From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andrew Cooper Subject: [PATCH v3 12/24] x86/emul: Remove opencoded exception generation Date: Wed, 30 Nov 2016 13:50:29 +0000 Message-ID: <1480513841-7565-13-git-send-email-andrew.cooper3@citrix.com> References: <1480513841-7565-1-git-send-email-andrew.cooper3@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <1480513841-7565-1-git-send-email-andrew.cooper3@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Andrew Cooper List-Id: xen-devel@lists.xenproject.org SW50cm9kdWNlIGdlbmVyYXRlX2V4Y2VwdGlvbigpIGZvciB1bmNvbmRpdGlvbmFsIGV4Y2VwdGlv biBnZW5lcmF0aW9uLCBhbmQKcmVwbGFjZSBleGlzdGluZyB1c2VzLiAgQm90aCBnZW5lcmF0ZV9l eGNlcHRpb24oKSBhbmQgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKCkKYXJlIHVwZGF0ZWQgdG8gbWFr ZSB0aGVpciBlcnJvciBjb2RlIHBhcmFtZXRlcnMgb3B0aW9uYWwsIHdoaWNoIHJlbW92ZXMgdGhl CnVzZSBvZiB0aGUgLTEgc2VudGluYWwuCgpUaGUgaW9wb3J0X2FjY2Vzc19jaGVjaygpIGNoZWNr IGxvc2VzIHRoZSBwcmVzZW5jZSBjaGVjayBmb3IgJXRyLCBhcyB0aGUgeDg2CmFyY2hpdGVjdHVy ZSBoYXMgbm8gY29uY2VwdCBvZiBhIG5vbi11c2FibGUgdGFzayByZWdpc3Rlci4KCk5vIGZ1bmN0 aW9uYWwgY2hhbmdlLgoKU2lnbmVkLW9mZi1ieTogQW5kcmV3IENvb3BlciA8YW5kcmV3LmNvb3Bl cjNAY2l0cml4LmNvbT4KUmV2aWV3ZWQtYnk6IEphbiBCZXVsaWNoIDxKQmV1bGljaEBzdXNlLmNv bT4KLS0tCnYzOgogKiBSZWJhc2Ugb3ZlciBzaW5nbGVzdGVwcGluZyBjaGFuZ2VzCnYyOgogKiBC cmFja2V0cyBhcm91bmQgJgotLS0KIHhlbi9hcmNoL3g4Ni94ODZfZW11bGF0ZS94ODZfZW11bGF0 ZS5jIHwgMTkzICsrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5n ZWQsIDk5IGluc2VydGlvbnMoKyksIDk0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3hlbi9h cmNoL3g4Ni94ODZfZW11bGF0ZS94ODZfZW11bGF0ZS5jIGIveGVuL2FyY2gveDg2L3g4Nl9lbXVs YXRlL3g4Nl9lbXVsYXRlLmMKaW5kZXggMGFmNTMyZS4uNmFkZmRiZSAxMDA2NDQKLS0tIGEveGVu L2FyY2gveDg2L3g4Nl9lbXVsYXRlL3g4Nl9lbXVsYXRlLmMKKysrIGIveGVuL2FyY2gveDg2L3g4 Nl9lbXVsYXRlL3g4Nl9lbXVsYXRlLmMKQEAgLTQ1NywxNCArNDU3LDIwIEBAIHR5cGVkZWYgdW5p b24gewogI2RlZmluZSBFWENfQlIgIDUKICNkZWZpbmUgRVhDX1VEICA2CiAjZGVmaW5lIEVYQ19O TSAgNworI2RlZmluZSBFWENfREYgIDgKICNkZWZpbmUgRVhDX1RTIDEwCiAjZGVmaW5lIEVYQ19O UCAxMQogI2RlZmluZSBFWENfU1MgMTIKICNkZWZpbmUgRVhDX0dQIDEzCiAjZGVmaW5lIEVYQ19Q RiAxNAogI2RlZmluZSBFWENfTUYgMTYKKyNkZWZpbmUgRVhDX0FDIDE3CiAjZGVmaW5lIEVYQ19Y TSAxOQogCisjZGVmaW5lIEVYQ19IQVNfRUMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKCgxdSA8PCBFWENfREYpIHwgKDF1IDw8IEVY Q19UUykgfCAoMXUgPDwgRVhDX05QKSB8ICAgICAgICAgICAgICAgICBcCisgICAgICgxdSA8PCBF WENfU1MpIHwgKDF1IDw8IEVYQ19HUCkgfCAoMXUgPDwgRVhDX1BGKSB8ICgxdSA8PCBFWENfQUMp KQorCiAvKiBTZWdtZW50IHNlbGVjdG9yIGVycm9yIGNvZGUgYml0cy4gKi8KICNkZWZpbmUgRUNP REVfRVhUICgxIDw8IDApCiAjZGVmaW5lIEVDT0RFX0lEVCAoMSA8PCAxKQpAQCAtNjY3LDE0ICs2 NzMsMjIgQEAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCiAgICAgaWYgKCByYyApIGdvdG8gZG9uZTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKIH0gd2hpbGUgKDApCiAKLSNkZWZpbmUgZ2VuZXJhdGVfZXhjZXB0aW9uX2lm KHAsIGUsIGVjKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3RhdGljIGlu bGluZSBpbnQgbWtlYyh1aW50OF90IGUsIGludDMyX3QgZWMsIC4uLikKK3sKKyAgICByZXR1cm4g KGUgPCAzMiAmJiAoKDF1IDw8IGUpICYgRVhDX0hBU19FQykpID8gZWMgOiBYODZfRVZFTlRfTk9f RUM7Cit9CisKKyNkZWZpbmUgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHAsIGUsIGVjLi4uKSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogKHsgIGlmICggKHApICkgeyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgICAg IGZhaWxfaWYob3BzLT5pbmplY3RfaHdfZXhjZXB0aW9uID09IE5VTEwpOyAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSAgICAgICAgcmMgPSBvcHMtPmluamVjdF9od19leGNlcHRpb24oZSwgZWMs IGN0eHQpID8gOiBYODZFTVVMX0VYQ0VQVElPTjsgXAorICAgICAgICByYyA9IG9wcy0+aW5qZWN0 X2h3X2V4Y2VwdGlvbihlLCBta2VjKGUsICMjZWMsIDApLCBjdHh0KSAgICAgICAgICBcCisgICAg ICAgICAgICA/IDogWDg2RU1VTF9FWENFUFRJT047ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKICAgICAgICAgZ290byBkb25lOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAogICAgIH0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiB9 KQogCisjZGVmaW5lIGdlbmVyYXRlX2V4Y2VwdGlvbihlLCBlYy4uLikgZ2VuZXJhdGVfZXhjZXB0 aW9uX2lmKHRydWUsIGUsICMjZWMpCisKIC8qCiAgKiBHaXZlbiBieXRlIGhhcyBldmVuIHBhcml0 eSAoZXZlbiBudW1iZXIgb2YgMXMpPyBTRE0gVm9sLiAxIFNlYy4gMy40LjMuMSwKICAqICJTdGF0 dXMgRmxhZ3MiOiBFRkxBR1MuUEYgcmVmbGVjdHMgcGFyaXR5IG9mIGxlYXN0LXNpZy4gYnl0ZSBv ZiByZXN1bHQgb25seS4KQEAgLTc4NSw3ICs3OTksNyBAQCBzdGF0aWMgaW50IF9nZXRfZnB1KAog ICAgICAgICAgICAgICAgIHJldHVybiByYzsKICAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlv bl9pZighKGNyNCAmICgodHlwZSA9PSBYODZFTVVMX0ZQVV94bW0pCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgPyBDUjRfT1NGWFNSIDogQ1I0X09TWFNBVkUpKSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWENfVUQsIC0xKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBFWENfVUQpOwogICAgICAgICB9CiAKICAgICAgICAg cmMgPSBvcHMtPnJlYWRfY3IoMCwgJmNyMCwgY3R4dCk7CkBAIC03OTgsMTMgKzgxMiwxMyBAQCBz dGF0aWMgaW50IF9nZXRfZnB1KAogICAgICAgICB9CiAgICAgICAgIGlmICggY3IwICYgQ1IwX0VN ICkKICAgICAgICAgewotICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHR5cGUgPT0g WDg2RU1VTF9GUFVfZnB1LCBFWENfTk0sIC0xKTsKLSAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2Vw dGlvbl9pZih0eXBlID09IFg4NkVNVUxfRlBVX21teCwgRVhDX1VELCAtMSk7Ci0gICAgICAgICAg ICBnZW5lcmF0ZV9leGNlcHRpb25faWYodHlwZSA9PSBYODZFTVVMX0ZQVV94bW0sIEVYQ19VRCwg LTEpOworICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHR5cGUgPT0gWDg2RU1VTF9G UFVfZnB1LCBFWENfTk0pOworICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHR5cGUg PT0gWDg2RU1VTF9GUFVfbW14LCBFWENfVUQpOworICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0 aW9uX2lmKHR5cGUgPT0gWDg2RU1VTF9GUFVfeG1tLCBFWENfVUQpOwogICAgICAgICB9CiAgICAg ICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZigoY3IwICYgQ1IwX1RTKSAmJgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKHR5cGUgIT0gWDg2RU1VTF9GUFVfd2FpdCB8fCAoY3IwICYgQ1Iw X01QKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWENfTk0sIC0xKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIEVYQ19OTSk7CiAgICAgfQogCiAgZG9uZToKQEAgLTgz Miw3ICs4NDYsNyBAQCBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAogICAgICAgICAgICAgKF9maWMpLT5leG5fcmFpc2VkID0g RVhDX1VEOyAgICAgICAgICAgICAgICAgICAgICAgIFwKICAgICB9ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAgICAgZ2VuZXJhdGVf ZXhjZXB0aW9uX2lmKChfZmljKS0+ZXhuX3JhaXNlZCA+PSAwLCAgICAgICAgICAgICAgXAotICAg ICAgICAgICAgICAgICAgICAgICAgICAoX2ZpYyktPmV4bl9yYWlzZWQsIC0xKTsgICAgICAgICAg ICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKF9maWMpLT5leG5fcmFpc2VkKTsgICAg ICAgICAgICAgICAgICBcCiB9IHdoaWxlICgwKQogCiAjZGVmaW5lIGVtdWxhdGVfZnB1X2luc24o X29wKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKQEAgLTExNjcsMTEgKzExODEsOSBAQCBz dGF0aWMgaW50IGlvcG9ydF9hY2Nlc3NfY2hlY2soCiAgICAgaWYgKCAocmMgPSBvcHMtPnJlYWRf c2VnbWVudCh4ODZfc2VnX3RyLCAmdHIsIGN0eHQpKSAhPSAwICkKICAgICAgICAgcmV0dXJuIHJj OwogCi0gICAgLyogRW5zdXJlIHRoYXQgdGhlIFRTUyBpcyB2YWxpZCBhbmQgaGFzIGFuIGlvLWJp dG1hcC1vZmZzZXQgZmllbGQuICovCi0gICAgaWYgKCAhdHIuYXR0ci5maWVsZHMucCB8fAotICAg ICAgICAgKCh0ci5hdHRyLmZpZWxkcy50eXBlICYgMHhkKSAhPSAweDkpIHx8Ci0gICAgICAgICAo dHIubGltaXQgPCAweDY3KSApCi0gICAgICAgIGdvdG8gcmFpc2VfZXhjZXB0aW9uOworICAgIC8q IEVuc3VyZSB0aGUgVFNTIGhhcyBhbiBpby1iaXRtYXAtb2Zmc2V0IGZpZWxkLiAqLworICAgIGdl bmVyYXRlX2V4Y2VwdGlvbl9pZih0ci5hdHRyLmZpZWxkcy50eXBlICE9IDB4YiB8fAorICAgICAg ICAgICAgICAgICAgICAgICAgICB0ci5saW1pdCA8IDB4NjcsIEVYQ19HUCwgMCk7CiAKICAgICBp ZiAoIChyYyA9IHJlYWRfdWxvbmcoeDg2X3NlZ19ub25lLCB0ci5iYXNlICsgMHg2NiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgJmlvYm1wLCAyLCBjdHh0LCBvcHMpKSApCkBAIC0xMTc5LDIx ICsxMTkxLDE2IEBAIHN0YXRpYyBpbnQgaW9wb3J0X2FjY2Vzc19jaGVjaygKIAogICAgIC8qIEVu c3VyZSBUU1MgaW5jbHVkZXMgdHdvIGJ5dGVzIGluY2x1ZGluZyBieXRlIGNvbnRhaW5pbmcgZmly c3QgcG9ydC4gKi8KICAgICBpb2JtcCArPSBmaXJzdF9wb3J0IC8gODsKLSAgICBpZiAoIHRyLmxp bWl0IDw9IGlvYm1wICkKLSAgICAgICAgZ290byByYWlzZV9leGNlcHRpb247CisgICAgZ2VuZXJh dGVfZXhjZXB0aW9uX2lmKHRyLmxpbWl0IDw9IGlvYm1wLCBFWENfR1AsIDApOwogCiAgICAgaWYg KCAocmMgPSByZWFkX3Vsb25nKHg4Nl9zZWdfbm9uZSwgdHIuYmFzZSArIGlvYm1wLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAmaW9ibXAsIDIsIGN0eHQsIG9wcykpICkKICAgICAgICAgcmV0 dXJuIHJjOwotICAgIGlmICggKGlvYm1wICYgKCgoMTw8Ynl0ZXMpLTEpIDw8IChmaXJzdF9wb3J0 JjcpKSkgIT0gMCApCi0gICAgICAgIGdvdG8gcmFpc2VfZXhjZXB0aW9uOworICAgIGdlbmVyYXRl X2V4Y2VwdGlvbl9pZihpb2JtcCAmICgoKDEgPDwgYnl0ZXMpIC0gMSkgPDwgKGZpcnN0X3BvcnQg JiA3KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgIEVYQ19HUCwgMCk7CiAKICBkb25lOgog ICAgIHJldHVybiByYzsKLQotIHJhaXNlX2V4Y2VwdGlvbjoKLSAgICBmYWlsX2lmKG9wcy0+aW5q ZWN0X2h3X2V4Y2VwdGlvbiA9PSBOVUxMKTsKLSAgICByZXR1cm4gb3BzLT5pbmplY3RfaHdfZXhj ZXB0aW9uKEVYQ19HUCwgMCwgY3R4dCkgPyA6IFg4NkVNVUxfRVhDRVBUSU9OOwogfQogCiBzdGF0 aWMgYm9vbF90CkBAIC0xMjYyLDcgKzEyNjksNyBAQCBzdGF0aWMgYm9vbF90IHZjcHVfaGFzKAog I2RlZmluZSB2Y3B1X2hhc19ydG0oKSAgIHZjcHVfaGFzKDB4MDAwMDAwMDcsIEVCWCwgMTEsIGN0 eHQsIG9wcykKIAogI2RlZmluZSB2Y3B1X211c3RfaGF2ZShsZWFmLCByZWcsIGJpdCkgXAotICAg IGdlbmVyYXRlX2V4Y2VwdGlvbl9pZighdmNwdV9oYXMobGVhZiwgcmVnLCBiaXQsIGN0eHQsIG9w cyksIEVYQ19VRCwgLTEpCisgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKCF2Y3B1X2hhcyhsZWFm LCByZWcsIGJpdCwgY3R4dCwgb3BzKSwgRVhDX1VEKQogI2RlZmluZSB2Y3B1X211c3RfaGF2ZV9m cHUoKSAgdmNwdV9tdXN0X2hhdmUoMHgwMDAwMDAwMSwgRURYLCAwKQogI2RlZmluZSB2Y3B1X211 c3RfaGF2ZV9jbW92KCkgdmNwdV9tdXN0X2hhdmUoMHgwMDAwMDAwMSwgRURYLCAxNSkKICNkZWZp bmUgdmNwdV9tdXN0X2hhdmVfbW14KCkgIHZjcHVfbXVzdF9oYXZlKDB4MDAwMDAwMDEsIEVEWCwg MjMpCkBAIC0xMjgyLDcgKzEyODksNyBAQCBzdGF0aWMgYm9vbF90IHZjcHVfaGFzKAogICogdGhl IGFjdHVhbCBvcGVyYXRpb24uCiAgKi8KICNkZWZpbmUgaG9zdF9hbmRfdmNwdV9tdXN0X2hhdmUo ZmVhdCkgKHsgXAotICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZighY3B1X2hhc18jI2ZlYXQsIEVY Q19VRCwgLTEpOyBcCisgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKCFjcHVfaGFzXyMjZmVhdCwg RVhDX1VEKTsgXAogICAgIHZjcHVfbXVzdF9oYXZlXyMjZmVhdCgpOyBcCiB9KQogI2Vsc2UKQEAg LTE0ODUsMTEgKzE0OTIsOSBAQCBwcm90bW9kZV9sb2FkX3NlZygKICAgICByZXR1cm4gWDg2RU1V TF9PS0FZOwogCiAgcmFpc2VfZXhuOgotICAgIGlmICggb3BzLT5pbmplY3RfaHdfZXhjZXB0aW9u ID09IE5VTEwgKQotICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7Ci0gICAgaWYg KCAocmMgPSBvcHMtPmluamVjdF9od19leGNlcHRpb24oZmF1bHRfdHlwZSwgc2VsICYgMHhmZmZj LCBjdHh0KSkgKQotICAgICAgICByZXR1cm4gcmM7Ci0gICAgcmV0dXJuIFg4NkVNVUxfRVhDRVBU SU9OOworICAgIGdlbmVyYXRlX2V4Y2VwdGlvbihmYXVsdF90eXBlLCBzZWwgJiAweGZmZmMpOwor IGRvbmU6CisgICAgcmV0dXJuIHJjOwogfQogCiBzdGF0aWMgaW50CkBAIC0xNzAyLDcgKzE3MDcs NyBAQCBzdGF0aWMgaW50IGluamVjdF9zd2ludChlbnVtIHg4Nl9zd2ludF90eXBlIHR5cGUsCiAg ICAgcmV0dXJuIHJjOwogCiAgcmFpc2VfZXhuOgotICAgIHJldHVybiBvcHMtPmluamVjdF9od19l eGNlcHRpb24oZmF1bHRfdHlwZSwgZXJyb3JfY29kZSwgY3R4dCk7CisgICAgZ2VuZXJhdGVfZXhj ZXB0aW9uKGZhdWx0X3R5cGUsIGVycm9yX2NvZGUpOwogfQogCiBpbnQgeDg2ZW11bF91bmhhbmRs ZWFibGVfcncoCkBAIC0xNzkzLDcgKzE3OTgsNyBAQCB4ODZfZGVjb2RlX29uZWJ5dGUoCiAKICAg ICBjYXNlIDB4OWE6IC8qIGNhbGwgKGZhciwgYWJzb2x1dGUpICovCiAgICAgY2FzZSAweGVhOiAv KiBqbXAgKGZhciwgYWJzb2x1dGUpICovCi0gICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZiht b2RlXzY0Yml0KCksIEVYQ19VRCwgLTEpOworICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYo bW9kZV82NGJpdCgpLCBFWENfVUQpOwogCiAgICAgICAgIGltbTEgPSBpbnNuX2ZldGNoX2J5dGVz KG9wX2J5dGVzKTsKICAgICAgICAgaW1tMiA9IGluc25fZmV0Y2hfdHlwZSh1aW50MTZfdCk7CkBA IC0yMDIxLDcgKzIwMjYsNyBAQCB4ODZfZGVjb2RlKAogICAgICAgICAgICAgICAgIC8qIGZhbGwg dGhyb3VnaCAqLwogICAgICAgICAgICAgY2FzZSA4OgogICAgICAgICAgICAgICAgIC8qIFZFWCAv IFhPUCAvIEVWRVggKi8KLSAgICAgICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYocmV4 X3ByZWZpeCB8fCB2ZXgucGZ4LCBFWENfVUQsIC0xKTsKKyAgICAgICAgICAgICAgICBnZW5lcmF0 ZV9leGNlcHRpb25faWYocmV4X3ByZWZpeCB8fCB2ZXgucGZ4LCBFWENfVUQpOwogCiAgICAgICAg ICAgICAgICAgdmV4LnJhd1swXSA9IG1vZHJtOwogICAgICAgICAgICAgICAgIGlmICggYiA9PSAw eGM1ICkKQEAgLTI1MTUsMTIgKzI1MjAsMTIgQEAgeDg2X2VtdWxhdGUoCiAgICAgICAgICAgICAo ZXh0ICE9IGV4dF8wZiB8fAogICAgICAgICAgICAgICgoKGIgPCAweDIwKSB8fCAoYiA+IDB4MjMp KSAmJiAvKiBNT1YgQ1JuL0RSbiAqLwogICAgICAgICAgICAgICAoYiAhPSAweGM3KSkpLCAgICAg ICAgICAgICAgICAvKiBDTVBYQ0hHezgsMTZ9QiAqLwotICAgICAgICAgICAgRVhDX1VELCAtMSk7 CisgICAgICAgICAgICBFWENfVUQpOwogICAgICAgICBkc3QudHlwZSA9IE9QX05PTkU7CiAgICAg ICAgIGJyZWFrOwogCiAgICAgY2FzZSBEc3RSZWc6Ci0gICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlv bl9pZihsb2NrX3ByZWZpeCwgRVhDX1VELCAtMSk7CisgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlv bl9pZihsb2NrX3ByZWZpeCwgRVhDX1VEKTsKICAgICAgICAgZHN0LnR5cGUgPSBPUF9SRUc7CiAg ICAgICAgIGlmICggZCAmIEJ5dGVPcCApCiAgICAgICAgIHsKQEAgLTI1NzYsNyArMjU4MSw3IEBA IHg4Nl9lbXVsYXRlKAogICAgICAgICBkc3QgPSBlYTsKICAgICAgICAgaWYgKCBkc3QudHlwZSA9 PSBPUF9SRUcgKQogICAgICAgICB7Ci0gICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYo bG9ja19wcmVmaXgsIEVYQ19VRCwgLTEpOworICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9u X2lmKGxvY2tfcHJlZml4LCBFWENfVUQpOwogICAgICAgICAgICAgc3dpdGNoICggZHN0LmJ5dGVz ICkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgIGNhc2UgMTogZHN0LnZhbCA9ICoodWludDhf dCAgKilkc3QucmVnOyBicmVhazsKQEAgLTI1OTMsNyArMjU5OCw3IEBAIHg4Nl9lbXVsYXRlKAog ICAgICAgICAgICAgZHN0Lm9yaWdfdmFsID0gZHN0LnZhbDsKICAgICAgICAgfQogICAgICAgICBl bHNlIC8qIExvY2sgcHJlZml4IGlzIGFsbG93ZWQgb25seSBvbiBSTVcgaW5zdHJ1Y3Rpb25zLiAq LwotICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKGxvY2tfcHJlZml4LCBFWENfVUQs IC0xKTsKKyAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihsb2NrX3ByZWZpeCwgRVhD X1VEKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0yNjMxLDcgKzI2MzYsNyBAQCB4ODZf ZW11bGF0ZSgKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIDB4MzggLi4uIDB4M2Q6IGNtcDog LyogY21wICovCi0gICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihsb2NrX3ByZWZpeCwgRVhD X1VELCAtMSk7CisgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihsb2NrX3ByZWZpeCwgRVhD X1VEKTsKICAgICAgICAgZW11bGF0ZV8yb3BfU3JjVigiY21wIiwgc3JjLCBkc3QsIF9yZWdzLmVm bGFncyk7CiAgICAgICAgIGRzdC50eXBlID0gT1BfTk9ORTsKICAgICAgICAgYnJlYWs7CkBAIC0y NjM5LDcgKzI2NDQsNyBAQCB4ODZfZW11bGF0ZSgKICAgICBjYXNlIDB4MDY6IC8qIHB1c2ggJSVl cyAqLwogICAgICAgICBzcmMudmFsID0geDg2X3NlZ19lczsKICAgICBwdXNoX3NlZzoKLSAgICAg ICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKG1vZGVfNjRiaXQoKSAmJiAhZXh0LCBFWENfVUQsIC0x KTsKKyAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKG1vZGVfNjRiaXQoKSAmJiAhZXh0LCBF WENfVUQpOwogICAgICAgICBmYWlsX2lmKG9wcy0+cmVhZF9zZWdtZW50ID09IE5VTEwpOwogICAg ICAgICBpZiAoIChyYyA9IG9wcy0+cmVhZF9zZWdtZW50KHNyYy52YWwsICZzcmVnLCBjdHh0KSkg IT0gMCApCiAgICAgICAgICAgICBnb3RvIGRvbmU7CkBAIC0yNjQ5LDcgKzI2NTQsNyBAQCB4ODZf ZW11bGF0ZSgKICAgICBjYXNlIDB4MDc6IC8qIHBvcCAlJWVzICovCiAgICAgICAgIHNyYy52YWwg PSB4ODZfc2VnX2VzOwogICAgIHBvcF9zZWc6Ci0gICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9p Zihtb2RlXzY0Yml0KCkgJiYgIWV4dCwgRVhDX1VELCAtMSk7CisgICAgICAgIGdlbmVyYXRlX2V4 Y2VwdGlvbl9pZihtb2RlXzY0Yml0KCkgJiYgIWV4dCwgRVhDX1VEKTsKICAgICAgICAgZmFpbF9p ZihvcHMtPndyaXRlX3NlZ21lbnQgPT0gTlVMTCk7CiAgICAgICAgIC8qIDY0LWJpdCBtb2RlOiBQ T1AgZGVmYXVsdHMgdG8gYSA2NC1iaXQgb3BlcmFuZC4gKi8KICAgICAgICAgaWYgKCBtb2RlXzY0 Yml0KCkgJiYgKG9wX2J5dGVzID09IDQpICkKQEAgLTI2ODcsNyArMjY5Miw3IEBAIHg4Nl9lbXVs YXRlKAogICAgICAgICB1aW50OF90IGFsID0gX3JlZ3MuZWF4OwogICAgICAgICB1bnNpZ25lZCBs b25nIGVmbGFncyA9IF9yZWdzLmVmbGFnczsKIAotICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25f aWYobW9kZV82NGJpdCgpLCBFWENfVUQsIC0xKTsKKyAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9u X2lmKG1vZGVfNjRiaXQoKSwgRVhDX1VEKTsKICAgICAgICAgX3JlZ3MuZWZsYWdzICY9IH4oRUZM R19DRnxFRkxHX0FGfEVGTEdfU0Z8RUZMR19aRnxFRkxHX1BGKTsKICAgICAgICAgaWYgKCAoKGFs ICYgMHgwZikgPiA5KSB8fCAoZWZsYWdzICYgRUZMR19BRikgKQogICAgICAgICB7CkBAIC0yNzA5 LDcgKzI3MTQsNyBAQCB4ODZfZW11bGF0ZSgKIAogICAgIGNhc2UgMHgzNzogLyogYWFhICovCiAg ICAgY2FzZSAweDNmOiAvKiBhYXMgKi8KLSAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKG1v ZGVfNjRiaXQoKSwgRVhDX1VELCAtMSk7CisgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZiht b2RlXzY0Yml0KCksIEVYQ19VRCk7CiAgICAgICAgIF9yZWdzLmVmbGFncyAmPSB+RUZMR19DRjsK ICAgICAgICAgaWYgKCAoKHVpbnQ4X3QpX3JlZ3MuZWF4ID4gOSkgfHwgKF9yZWdzLmVmbGFncyAm IEVGTEdfQUYpICkKICAgICAgICAgewpAQCAtMjc1Myw3ICsyNzU4LDcgQEAgeDg2X2VtdWxhdGUo CiAgICAgICAgIHVuc2lnbmVkIGxvbmcgcmVnc1tdID0gewogICAgICAgICAgICAgX3JlZ3MuZWF4 LCBfcmVncy5lY3gsIF9yZWdzLmVkeCwgX3JlZ3MuZWJ4LAogICAgICAgICAgICAgX3JlZ3MuZXNw LCBfcmVncy5lYnAsIF9yZWdzLmVzaSwgX3JlZ3MuZWRpIH07Ci0gICAgICAgIGdlbmVyYXRlX2V4 Y2VwdGlvbl9pZihtb2RlXzY0Yml0KCksIEVYQ19VRCwgLTEpOworICAgICAgICBnZW5lcmF0ZV9l eGNlcHRpb25faWYobW9kZV82NGJpdCgpLCBFWENfVUQpOwogICAgICAgICBmb3IgKCBpID0gMDsg aSA8IDg7IGkrKyApCiAgICAgICAgICAgICBpZiAoIChyYyA9IG9wcy0+d3JpdGUoeDg2X3NlZ19z cywgc3BfcHJlX2RlYyhvcF9ieXRlcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJnJlZ3NbaV0sIG9wX2J5dGVzLCBjdHh0KSkgIT0gMCApCkBAIC0yNzY4LDcgKzI3NzMsNyBA QCB4ODZfZW11bGF0ZSgKICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nICopJl9yZWdzLmVicCwg KHVuc2lnbmVkIGxvbmcgKikmZHVtbXlfZXNwLAogICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcg KikmX3JlZ3MuZWJ4LCAodW5zaWduZWQgbG9uZyAqKSZfcmVncy5lZHgsCiAgICAgICAgICAgICAo dW5zaWduZWQgbG9uZyAqKSZfcmVncy5lY3gsICh1bnNpZ25lZCBsb25nICopJl9yZWdzLmVheCB9 OwotICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYobW9kZV82NGJpdCgpLCBFWENfVUQsIC0x KTsKKyAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKG1vZGVfNjRiaXQoKSwgRVhDX1VEKTsK ICAgICAgICAgZm9yICggaSA9IDA7IGkgPCA4OyBpKysgKQogICAgICAgICB7CiAgICAgICAgICAg ICBpZiAoIChyYyA9IHJlYWRfdWxvbmcoeDg2X3NlZ19zcywgc3BfcG9zdF9pbmMob3BfYnl0ZXMp LApAQCAtMjc4NiwxNCArMjc5MSwxNCBAQCB4ODZfZW11bGF0ZSgKICAgICAgICAgdW5zaWduZWQg bG9uZyBzcmNfdmFsMjsKICAgICAgICAgaW50IGxiLCB1YiwgaWR4OwogICAgICAgICBnZW5lcmF0 ZV9leGNlcHRpb25faWYobW9kZV82NGJpdCgpIHx8IChzcmMudHlwZSAhPSBPUF9NRU0pLAotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhDX1VELCAtMSk7CisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBFWENfVUQpOwogICAgICAgICBpZiAoIChyYyA9IHJlYWRfdWxvbmcoc3Jj Lm1lbS5zZWcsIHNyYy5tZW0ub2ZmICsgb3BfYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmc3JjX3ZhbDIsIG9wX2J5dGVzLCBjdHh0LCBvcHMpKSApCiAgICAgICAgICAgICBn b3RvIGRvbmU7CiAgICAgICAgIHViICA9IChvcF9ieXRlcyA9PSAyKSA/IChpbnQxNl90KXNyY192 YWwyIDogKGludDMyX3Qpc3JjX3ZhbDI7CiAgICAgICAgIGxiICA9IChvcF9ieXRlcyA9PSAyKSA/ IChpbnQxNl90KXNyYy52YWwgIDogKGludDMyX3Qpc3JjLnZhbDsKICAgICAgICAgaWR4ID0gKG9w X2J5dGVzID09IDIpID8gKGludDE2X3QpZHN0LnZhbCAgOiAoaW50MzJfdClkc3QudmFsOwotICAg ICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoKGlkeCA8IGxiKSB8fCAoaWR4ID4gdWIpLCBFWENf QlIsIC0xKTsKKyAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKChpZHggPCBsYikgfHwgKGlk eCA+IHViKSwgRVhDX0JSKTsKICAgICAgICAgZHN0LnR5cGUgPSBPUF9OT05FOwogICAgICAgICBi cmVhazsKICAgICB9CkBAIC0yODMxLDcgKzI4MzYsNyBAQCB4ODZfZW11bGF0ZSgKICAgICAgICAg ICAgICAgICBfcmVncy5lZmxhZ3MgJj0gfkVGTEdfWkY7CiAgICAgICAgICAgICAgICAgZHN0LnR5 cGUgPSBPUF9OT05FOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0 aW9uX2lmKCFpbl9wcm90bW9kZShjdHh0LCBvcHMpLCBFWENfVUQsIC0xKTsKKyAgICAgICAgICAg IGdlbmVyYXRlX2V4Y2VwdGlvbl9pZighaW5fcHJvdG1vZGUoY3R4dCwgb3BzKSwgRVhDX1VEKTsK ICAgICAgICAgfQogICAgICAgICBicmVhazsKIApAQCAtMjkyMiw3ICsyOTI3LDcgQEAgeDg2X2Vt dWxhdGUoCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSAweDgyOiAvKiBHcnAxICh4ODYvMzIg b25seSkgKi8KLSAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKG1vZGVfNjRiaXQoKSwgRVhD X1VELCAtMSk7CisgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihtb2RlXzY0Yml0KCksIEVY Q19VRCk7CiAgICAgY2FzZSAweDgwOiBjYXNlIDB4ODE6IGNhc2UgMHg4MzogLyogR3JwMSAqLwog ICAgICAgICBzd2l0Y2ggKCBtb2RybV9yZWcgJiA3ICkKICAgICAgICAgewpAQCAtMjk3Myw3ICsy OTc4LDcgQEAgeDg2X2VtdWxhdGUoCiAgICAgICAgICAgICBkc3QudHlwZSA9IE9QX05PTkU7CiAg ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25f aWYoKG1vZHJtX3JlZyAmIDcpICE9IDAsIEVYQ19VRCwgLTEpOworICAgICAgICBnZW5lcmF0ZV9l eGNlcHRpb25faWYoKG1vZHJtX3JlZyAmIDcpICE9IDAsIEVYQ19VRCk7CiAgICAgY2FzZSAweDg4 IC4uLiAweDhiOiAvKiBtb3YgKi8KICAgICBjYXNlIDB4YTAgLi4uIDB4YTE6IC8qIG1vdiBtZW0u b2Zmcyx7JWFsLCVheCwlZWF4LCVyYXh9ICovCiAgICAgY2FzZSAweGEyIC4uLiAweGEzOiAvKiBt b3YgeyVhbCwlYXgsJWVheCwlcmF4fSxtZW0ub2ZmcyAqLwpAQCAtMjk4Miw3ICsyOTg3LDcgQEAg eDg2X2VtdWxhdGUoCiAKICAgICBjYXNlIDB4OGM6IC8qIG1vdiBTcmVnLHIvbSAqLwogICAgICAg ICBzZWcgPSBtb2RybV9yZWcgJiA3OyAvKiBSRVguUiBpcyBpZ25vcmVkLiAqLwotICAgICAgICBn ZW5lcmF0ZV9leGNlcHRpb25faWYoIWlzX3g4Nl91c2VyX3NlZ21lbnQoc2VnKSwgRVhDX1VELCAt MSk7CisgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZighaXNfeDg2X3VzZXJfc2VnbWVudChz ZWcpLCBFWENfVUQpOwogICAgIHN0b3JlX3NlbGVjdG9yOgogICAgICAgICBmYWlsX2lmKG9wcy0+ cmVhZF9zZWdtZW50ID09IE5VTEwpOwogICAgICAgICBpZiAoIChyYyA9IG9wcy0+cmVhZF9zZWdt ZW50KHNlZywgJnNyZWcsIGN0eHQpKSAhPSAwICkKQEAgLTI5OTUsNyArMzAwMCw3IEBAIHg4Nl9l bXVsYXRlKAogICAgIGNhc2UgMHg4ZTogLyogbW92IHIvbSxTcmVnICovCiAgICAgICAgIHNlZyA9 IG1vZHJtX3JlZyAmIDc7IC8qIFJFWC5SIGlzIGlnbm9yZWQuICovCiAgICAgICAgIGdlbmVyYXRl X2V4Y2VwdGlvbl9pZighaXNfeDg2X3VzZXJfc2VnbWVudChzZWcpIHx8Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzZWcgPT0geDg2X3NlZ19jcywgRVhDX1VELCAtMSk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzZWcgPT0geDg2X3NlZ19jcywgRVhDX1VEKTsKICAgICAg ICAgaWYgKCAocmMgPSBsb2FkX3NlZyhzZWcsIHNyYy52YWwsIDAsIE5VTEwsIGN0eHQsIG9wcykp ICE9IDAgKQogICAgICAgICAgICAgZ290byBkb25lOwogICAgICAgICBpZiAoIHNlZyA9PSB4ODZf c2VnX3NzICkKQEAgLTMwMDQsMTIgKzMwMDksMTIgQEAgeDg2X2VtdWxhdGUoCiAgICAgICAgIGJy ZWFrOwogCiAgICAgY2FzZSAweDhkOiAvKiBsZWEgKi8KLSAgICAgICAgZ2VuZXJhdGVfZXhjZXB0 aW9uX2lmKGVhLnR5cGUgIT0gT1BfTUVNLCBFWENfVUQsIC0xKTsKKyAgICAgICAgZ2VuZXJhdGVf ZXhjZXB0aW9uX2lmKGVhLnR5cGUgIT0gT1BfTUVNLCBFWENfVUQpOwogICAgICAgICBkc3QudmFs ID0gZWEubWVtLm9mZjsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIDB4OGY6IC8qIHBvcCAo c29sZSBtZW1iZXIgb2YgR3JwMWEpICovCi0gICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZigo bW9kcm1fcmVnICYgNykgIT0gMCwgRVhDX1VELCAtMSk7CisgICAgICAgIGdlbmVyYXRlX2V4Y2Vw dGlvbl9pZigobW9kcm1fcmVnICYgNykgIT0gMCwgRVhDX1VEKTsKICAgICAgICAgLyogNjQtYml0 IG1vZGU6IFBPUCBkZWZhdWx0cyB0byBhIDY0LWJpdCBvcGVyYW5kLiAqLwogICAgICAgICBpZiAo IG1vZGVfNjRiaXQoKSAmJiAoZHN0LmJ5dGVzID09IDQpICkKICAgICAgICAgICAgIGRzdC5ieXRl cyA9IDg7CkBAIC0zMjg2LDggKzMyOTEsOCBAQCB4ODZfZW11bGF0ZSgKICAgICAgICAgdW5zaWdu ZWQgbG9uZyBzZWw7CiAgICAgICAgIGRzdC52YWwgPSB4ODZfc2VnX2VzOwogICAgIGxlczogLyog ZHN0LnZhbCBpZGVudGlmaWVzIHRoZSBzZWdtZW50ICovCi0gICAgICAgIGdlbmVyYXRlX2V4Y2Vw dGlvbl9pZihtb2RlXzY0Yml0KCkgJiYgIWV4dCwgRVhDX1VELCAtMSk7Ci0gICAgICAgIGdlbmVy YXRlX2V4Y2VwdGlvbl9pZihzcmMudHlwZSAhPSBPUF9NRU0sIEVYQ19VRCwgLTEpOworICAgICAg ICBnZW5lcmF0ZV9leGNlcHRpb25faWYobW9kZV82NGJpdCgpICYmICFleHQsIEVYQ19VRCk7Cisg ICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihzcmMudHlwZSAhPSBPUF9NRU0sIEVYQ19VRCk7 CiAgICAgICAgIGlmICggKHJjID0gcmVhZF91bG9uZyhzcmMubWVtLnNlZywgc3JjLm1lbS5vZmYg KyBzcmMuYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc2VsLCAyLCBjdHh0 LCBvcHMpKSAhPSAwICkKICAgICAgICAgICAgIGdvdG8gZG9uZTsKQEAgLTMzNzcsNyArMzM4Miw3 IEBAIHg4Nl9lbXVsYXRlKAogICAgICAgICBnb3RvIGRvbmU7CiAKICAgICBjYXNlIDB4Y2U6IC8q IGludG8gKi8KLSAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKG1vZGVfNjRiaXQoKSwgRVhD X1VELCAtMSk7CisgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihtb2RlXzY0Yml0KCksIEVY Q19VRCk7CiAgICAgICAgIGlmICggIShfcmVncy5lZmxhZ3MgJiBFRkxHX09GKSApCiAgICAgICAg ICAgICBicmVhazsKICAgICAgICAgc3JjLnZhbCA9IEVYQ19PRjsKQEAgLTM0MTksNyArMzQyNCw3 IEBAIHg4Nl9lbXVsYXRlKAogICAgIGNhc2UgMHhkNTogLyogYWFkICovIHsKICAgICAgICAgdW5z aWduZWQgaW50IGJhc2UgPSAodWludDhfdClzcmMudmFsOwogCi0gICAgICAgIGdlbmVyYXRlX2V4 Y2VwdGlvbl9pZihtb2RlXzY0Yml0KCksIEVYQ19VRCwgLTEpOworICAgICAgICBnZW5lcmF0ZV9l eGNlcHRpb25faWYobW9kZV82NGJpdCgpLCBFWENfVUQpOwogICAgICAgICBpZiAoIGIgJiAweDAx ICkKICAgICAgICAgewogICAgICAgICAgICAgdWludDE2X3QgYXggPSBfcmVncy5lYXg7CkBAIC0z NDMwLDcgKzM0MzUsNyBAQCB4ODZfZW11bGF0ZSgKICAgICAgICAgewogICAgICAgICAgICAgdWlu dDhfdCBhbCA9IF9yZWdzLmVheDsKIAotICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lm KCFiYXNlLCBFWENfREUsIC0xKTsKKyAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZigh YmFzZSwgRVhDX0RFKTsKICAgICAgICAgICAgICoodWludDE2X3QgKikmX3JlZ3MuZWF4ID0gKChh bCAvIGJhc2UpIDw8IDgpIHwgKGFsICUgYmFzZSk7CiAgICAgICAgIH0KICAgICAgICAgX3JlZ3Mu ZWZsYWdzICY9IH4oRUZMR19TRnxFRkxHX1pGfEVGTEdfUEYpOwpAQCAtMzQ0MSw3ICszNDQ2LDcg QEAgeDg2X2VtdWxhdGUoCiAgICAgfQogCiAgICAgY2FzZSAweGQ2OiAvKiBzYWxjICovCi0gICAg ICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihtb2RlXzY0Yml0KCksIEVYQ19VRCwgLTEpOworICAg ICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYobW9kZV82NGJpdCgpLCBFWENfVUQpOwogICAgICAg ICAqKHVpbnQ4X3QgKikmX3JlZ3MuZWF4ID0gKF9yZWdzLmVmbGFncyAmIEVGTEdfQ0YpID8gMHhm ZiA6IDB4MDA7CiAgICAgICAgIGJyZWFrOwogCkBAIC00MDQ5LDcgKzQwNTQsNyBAQCB4ODZfZW11 bGF0ZSgKICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgdVsyXSwgdjsKIAogICAgICAgICBjYXNl IDAgLi4uIDE6IC8qIHRlc3QgKi8KLSAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihs b2NrX3ByZWZpeCwgRVhDX1VELCAtMSk7CisgICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25f aWYobG9ja19wcmVmaXgsIEVYQ19VRCk7CiAgICAgICAgICAgICBnb3RvIHRlc3Q7CiAgICAgICAg IGNhc2UgMjogLyogbm90ICovCiAgICAgICAgICAgICBkc3QudmFsID0gfmRzdC52YWw7CkBAIC00 MTQ3LDcgKzQxNTIsNyBAQCB4ODZfZW11bGF0ZSgKICAgICAgICAgICAgICAgICB2ICAgID0gKHVp bnQ4X3Qpc3JjLnZhbDsKICAgICAgICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoCiAg ICAgICAgICAgICAgICAgICAgIGRpdl9kYmwodSwgdikgfHwgKCh1aW50OF90KXVbMF0gIT0gKHVp bnQxNl90KXVbMF0pLAotICAgICAgICAgICAgICAgICAgICBFWENfREUsIC0xKTsKKyAgICAgICAg ICAgICAgICAgICAgRVhDX0RFKTsKICAgICAgICAgICAgICAgICBkc3QudmFsID0gKHVpbnQ4X3Qp dVswXTsKICAgICAgICAgICAgICAgICAoKHVpbnQ4X3QgKikmX3JlZ3MuZWF4KVsxXSA9IHVbMV07 CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC00MTU3LDcgKzQxNjIsNyBAQCB4ODZfZW11bGF0 ZSgKICAgICAgICAgICAgICAgICB2ICAgID0gKHVpbnQxNl90KXNyYy52YWw7CiAgICAgICAgICAg ICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKAogICAgICAgICAgICAgICAgICAgICBkaXZfZGJs KHUsIHYpIHx8ICgodWludDE2X3QpdVswXSAhPSAodWludDMyX3QpdVswXSksCi0gICAgICAgICAg ICAgICAgICAgIEVYQ19ERSwgLTEpOworICAgICAgICAgICAgICAgICAgICBFWENfREUpOwogICAg ICAgICAgICAgICAgIGRzdC52YWwgPSAodWludDE2X3QpdVswXTsKICAgICAgICAgICAgICAgICAq KHVpbnQxNl90ICopJl9yZWdzLmVkeCA9IHVbMV07CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBA IC00MTY4LDcgKzQxNzMsNyBAQCB4ODZfZW11bGF0ZSgKICAgICAgICAgICAgICAgICB2ICAgID0g KHVpbnQzMl90KXNyYy52YWw7CiAgICAgICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lm KAogICAgICAgICAgICAgICAgICAgICBkaXZfZGJsKHUsIHYpIHx8ICgodWludDMyX3QpdVswXSAh PSB1WzBdKSwKLSAgICAgICAgICAgICAgICAgICAgRVhDX0RFLCAtMSk7CisgICAgICAgICAgICAg ICAgICAgIEVYQ19ERSk7CiAgICAgICAgICAgICAgICAgZHN0LnZhbCAgID0gKHVpbnQzMl90KXVb MF07CiAgICAgICAgICAgICAgICAgX3JlZ3MuZWR4ID0gKHVpbnQzMl90KXVbMV07CiAgICAgICAg ICAgICAgICAgYnJlYWs7CkBAIC00MTc3LDcgKzQxODIsNyBAQCB4ODZfZW11bGF0ZSgKICAgICAg ICAgICAgICAgICB1WzBdID0gX3JlZ3MuZWF4OwogICAgICAgICAgICAgICAgIHVbMV0gPSBfcmVn cy5lZHg7CiAgICAgICAgICAgICAgICAgdiAgICA9IHNyYy52YWw7Ci0gICAgICAgICAgICAgICAg Z2VuZXJhdGVfZXhjZXB0aW9uX2lmKGRpdl9kYmwodSwgdiksIEVYQ19ERSwgLTEpOworICAgICAg ICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihkaXZfZGJsKHUsIHYpLCBFWENfREUpOwog ICAgICAgICAgICAgICAgIGRzdC52YWwgICA9IHVbMF07CiAgICAgICAgICAgICAgICAgX3JlZ3Mu ZWR4ID0gdVsxXTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTQxOTMsNyArNDE5OCw3IEBA IHg4Nl9lbXVsYXRlKAogICAgICAgICAgICAgICAgIHYgICAgPSAoaW50OF90KXNyYy52YWw7CiAg ICAgICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKAogICAgICAgICAgICAgICAgICAg ICBpZGl2X2RibCh1LCB2KSB8fCAoKGludDhfdCl1WzBdICE9IChpbnQxNl90KXVbMF0pLAotICAg ICAgICAgICAgICAgICAgICBFWENfREUsIC0xKTsKKyAgICAgICAgICAgICAgICAgICAgRVhDX0RF KTsKICAgICAgICAgICAgICAgICBkc3QudmFsID0gKGludDhfdCl1WzBdOwogICAgICAgICAgICAg ICAgICgoaW50OF90ICopJl9yZWdzLmVheClbMV0gPSB1WzFdOwogICAgICAgICAgICAgICAgIGJy ZWFrOwpAQCAtNDIwMyw3ICs0MjA4LDcgQEAgeDg2X2VtdWxhdGUoCiAgICAgICAgICAgICAgICAg diAgICA9IChpbnQxNl90KXNyYy52YWw7CiAgICAgICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0 aW9uX2lmKAogICAgICAgICAgICAgICAgICAgICBpZGl2X2RibCh1LCB2KSB8fCAoKGludDE2X3Qp dVswXSAhPSAoaW50MzJfdCl1WzBdKSwKLSAgICAgICAgICAgICAgICAgICAgRVhDX0RFLCAtMSk7 CisgICAgICAgICAgICAgICAgICAgIEVYQ19ERSk7CiAgICAgICAgICAgICAgICAgZHN0LnZhbCA9 IChpbnQxNl90KXVbMF07CiAgICAgICAgICAgICAgICAgKihpbnQxNl90ICopJl9yZWdzLmVkeCA9 IHVbMV07CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC00MjE0LDcgKzQyMTksNyBAQCB4ODZf ZW11bGF0ZSgKICAgICAgICAgICAgICAgICB2ICAgID0gKGludDMyX3Qpc3JjLnZhbDsKICAgICAg ICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoCiAgICAgICAgICAgICAgICAgICAgIGlk aXZfZGJsKHUsIHYpIHx8ICgoaW50MzJfdCl1WzBdICE9IHVbMF0pLAotICAgICAgICAgICAgICAg ICAgICBFWENfREUsIC0xKTsKKyAgICAgICAgICAgICAgICAgICAgRVhDX0RFKTsKICAgICAgICAg ICAgICAgICBkc3QudmFsICAgPSAoaW50MzJfdCl1WzBdOwogICAgICAgICAgICAgICAgIF9yZWdz LmVkeCA9ICh1aW50MzJfdCl1WzFdOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNDIyMyw3 ICs0MjI4LDcgQEAgeDg2X2VtdWxhdGUoCiAgICAgICAgICAgICAgICAgdVswXSA9IF9yZWdzLmVh eDsKICAgICAgICAgICAgICAgICB1WzFdID0gX3JlZ3MuZWR4OwogICAgICAgICAgICAgICAgIHYg ICAgPSBzcmMudmFsOwotICAgICAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihpZGl2 X2RibCh1LCB2KSwgRVhDX0RFLCAtMSk7CisgICAgICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0 aW9uX2lmKGlkaXZfZGJsKHUsIHYpLCBFWENfREUpOwogICAgICAgICAgICAgICAgIGRzdC52YWwg ICA9IHVbMF07CiAgICAgICAgICAgICAgICAgX3JlZ3MuZWR4ID0gdVsxXTsKICAgICAgICAgICAg ICAgICBicmVhazsKQEAgLTQyNjMsNyArNDI2OCw3IEBAIHg4Nl9lbXVsYXRlKAogICAgICAgICBi cmVhazsKIAogICAgIGNhc2UgMHhmZTogLyogR3JwNCAqLwotICAgICAgICBnZW5lcmF0ZV9leGNl cHRpb25faWYoKG1vZHJtX3JlZyAmIDcpID49IDIsIEVYQ19VRCwgLTEpOworICAgICAgICBnZW5l cmF0ZV9leGNlcHRpb25faWYoKG1vZHJtX3JlZyAmIDcpID49IDIsIEVYQ19VRCk7CiAgICAgY2Fz ZSAweGZmOiAvKiBHcnA1ICovCiAgICAgICAgIHN3aXRjaCAoIG1vZHJtX3JlZyAmIDcgKQogICAg ICAgICB7CkBAIC00Mjg4LDcgKzQyOTMsNyBAQCB4ODZfZW11bGF0ZSgKICAgICAgICAgICAgIGJy ZWFrOwogICAgICAgICBjYXNlIDM6IC8qIGNhbGwgKGZhciwgYWJzb2x1dGUgaW5kaXJlY3QpICov CiAgICAgICAgIGNhc2UgNTogLyogam1wIChmYXIsIGFic29sdXRlIGluZGlyZWN0KSAqLwotICAg ICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHNyYy50eXBlICE9IE9QX01FTSwgRVhDX1VE LCAtMSk7CisgICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoc3JjLnR5cGUgIT0gT1Bf TUVNLCBFWENfVUQpOwogCiAgICAgICAgICAgICBpZiAoIChyYyA9IHJlYWRfdWxvbmcoc3JjLm1l bS5zZWcsIHNyYy5tZW0ub2ZmICsgb3BfYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJmltbTIsIDIsIGN0eHQsIG9wcykpICkKQEAgLTQzMDAsMTMgKzQzMDUsMTMgQEAg eDg2X2VtdWxhdGUoCiAgICAgICAgIGNhc2UgNjogLyogcHVzaCAqLwogICAgICAgICAgICAgZ290 byBwdXNoOwogICAgICAgICBjYXNlIDc6Ci0gICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25f aWYoMSwgRVhDX1VELCAtMSk7CisgICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb24oRVhDX1VE KTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgWDg2RU1VTF9PUEMoMHgw ZiwgMHgwMCk6IC8qIEdycDYgKi8KICAgICAgICAgc2VnID0gKG1vZHJtX3JlZyAmIDEpID8geDg2 X3NlZ190ciA6IHg4Nl9zZWdfbGR0cjsKLSAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKCFp bl9wcm90bW9kZShjdHh0LCBvcHMpLCBFWENfVUQsIC0xKTsKKyAgICAgICAgZ2VuZXJhdGVfZXhj ZXB0aW9uX2lmKCFpbl9wcm90bW9kZShjdHh0LCBvcHMpLCBFWENfVUQpOwogICAgICAgICBzd2l0 Y2ggKCBtb2RybV9yZWcgJiA2ICkKICAgICAgICAgewogICAgICAgICBjYXNlIDA6IC8qIHNsZHQg LyBzdHIgKi8KQEAgLTQzMTgsNyArNDMyMyw3IEBAIHg4Nl9lbXVsYXRlKAogICAgICAgICAgICAg ICAgIGdvdG8gZG9uZTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgotICAg ICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHRydWUsIEVYQ19VRCwgLTEpOworICAgICAg ICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKHRydWUsIEVYQ19VRCk7CiAgICAgICAgICAgICBi cmVhazsKICAgICAgICAgfQogICAgICAgICBicmVhazsKQEAgLTQzMzMsMTAgKzQzMzgsMTAgQEAg eDg2X2VtdWxhdGUoCiAgICAgICAgIHsKICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY3I0Owog Ci0gICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYodmV4LnBmeCwgRVhDX1VELCAtMSk7 CisgICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYodmV4LnBmeCwgRVhDX1VEKTsKICAg ICAgICAgICAgIGlmICggIW9wcy0+cmVhZF9jciB8fCBvcHMtPnJlYWRfY3IoNCwgJmNyNCwgY3R4 dCkgIT0gWDg2RU1VTF9PS0FZICkKICAgICAgICAgICAgICAgICBjcjQgPSAwOwotICAgICAgICAg ICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKCEoY3I0ICYgWDg2X0NSNF9PU1hTQVZFKSwgRVhDX1VE LCAtMSk7CisgICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoIShjcjQgJiBYODZfQ1I0 X09TWFNBVkUpLCBFWENfVUQpOwogICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKCFt b2RlX3JpbmcwKCkgfHwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYW5kbGVf eHNldGJ2KF9yZWdzLl9lY3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfcmVncy5fZWF4IHwgKF9yZWdzLnJkeCA8PCAzMikpLApAQCAtNDM0NywyOCAr NDM1MiwyOCBAQCB4ODZfZW11bGF0ZSgKIAogICAgICAgICBjYXNlIDB4ZDQ6IC8qIHZtZnVuYyAq LwogICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKGxvY2tfcHJlZml4IHwgcmVwX3By ZWZpeCgpIHwgKHZleC5wZnggPT0gdmV4XzY2KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBFWENfVUQsIC0xKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBF WENfVUQpOwogICAgICAgICAgICAgZmFpbF9pZighb3BzLT52bWZ1bmMpOwogICAgICAgICAgICAg aWYgKCAocmMgPSBvcHMtPnZtZnVuYyhjdHh0KSAhPSBYODZFTVVMX09LQVkpICkKICAgICAgICAg ICAgICAgICBnb3RvIGRvbmU7CiAgICAgICAgICAgICBnb3RvIG5vX3dyaXRlYmFjazsKIAogICAg ICAgICBjYXNlIDB4ZDU6IC8qIHhlbmQgKi8KLSAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlv bl9pZih2ZXgucGZ4LCBFWENfVUQsIC0xKTsKLSAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlv bl9pZighdmNwdV9oYXNfcnRtKCksIEVYQ19VRCwgLTEpOworICAgICAgICAgICAgZ2VuZXJhdGVf ZXhjZXB0aW9uX2lmKHZleC5wZngsIEVYQ19VRCk7CisgICAgICAgICAgICBnZW5lcmF0ZV9leGNl cHRpb25faWYoIXZjcHVfaGFzX3J0bSgpLCBFWENfVUQpOwogICAgICAgICAgICAgZ2VuZXJhdGVf ZXhjZXB0aW9uX2lmKHZjcHVfaGFzX3J0bSgpLCBFWENfR1AsIDApOwogICAgICAgICAgICAgYnJl YWs7CiAKICAgICAgICAgY2FzZSAweGQ2OiAvKiB4dGVzdCAqLwotICAgICAgICAgICAgZ2VuZXJh dGVfZXhjZXB0aW9uX2lmKHZleC5wZngsIEVYQ19VRCwgLTEpOworICAgICAgICAgICAgZ2VuZXJh dGVfZXhjZXB0aW9uX2lmKHZleC5wZngsIEVYQ19VRCk7CiAgICAgICAgICAgICBnZW5lcmF0ZV9l eGNlcHRpb25faWYoIXZjcHVfaGFzX3J0bSgpICYmICF2Y3B1X2hhc19obGUoKSwKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBFWENfVUQsIC0xKTsKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBFWENfVUQpOwogICAgICAgICAgICAgLyogTmVpdGhlciBITEUgbm9y IFJUTSBjYW4gYmUgYWN0aXZlIHdoZW4gd2UgZ2V0IGhlcmUuICovCiAgICAgICAgICAgICBfcmVn cy5lZmxhZ3MgfD0gRUZMR19aRjsKICAgICAgICAgICAgIGdvdG8gbm9fd3JpdGViYWNrOwogCiAg ICAgICAgIGNhc2UgMHhkZjogLyogaW52bHBnYSAqLwotICAgICAgICAgICAgZ2VuZXJhdGVfZXhj ZXB0aW9uX2lmKCFpbl9wcm90bW9kZShjdHh0LCBvcHMpLCBFWENfVUQsIC0xKTsKKyAgICAgICAg ICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZighaW5fcHJvdG1vZGUoY3R4dCwgb3BzKSwgRVhDX1VE KTsKICAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZighbW9kZV9yaW5nMCgpLCBFWENf R1AsIDApOwogICAgICAgICAgICAgZmFpbF9pZihvcHMtPmludmxwZyA9PSBOVUxMKTsKICAgICAg ICAgICAgIGlmICggKHJjID0gb3BzLT5pbnZscGcoeDg2X3NlZ19ub25lLCB0cnVuY2F0ZV9lYShf cmVncy5lYXgpLApAQCAtNDM5OCw3ICs0NDAzLDcgQEAgeDg2X2VtdWxhdGUoCiAgICAgICAgICAg ICAgICAgIG9wcy0+Y3B1aWQoJmVheCwgJmVieCwgJmR1bW15LCAmZHVtbXksIGN0eHQpID09IFg4 NkVNVUxfT0tBWSApCiAgICAgICAgICAgICAgICAgbGltaXQgPSAoKGVieCA+PiA4KSAmIDB4ZmYp ICogODsKICAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihsaW1pdCA8IHNpemVvZihs b25nKSB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsaW1pdCAmIChsaW1p dCAtIDEpKSwgRVhDX1VELCAtMSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGxpbWl0ICYgKGxpbWl0IC0gMSkpLCBFWENfVUQpOwogICAgICAgICAgICAgYmFzZSAmPSB+KGxp bWl0IC0gMSk7CiAgICAgICAgICAgICBpZiAoIG92ZXJyaWRlX3NlZyA9PSAtMSApCiAgICAgICAg ICAgICAgICAgb3ZlcnJpZGVfc2VnID0geDg2X3NlZ19kczsKQEAgLTQ0MzQsNyArNDQzOSw3IEBA IHg4Nl9lbXVsYXRlKAogICAgICAgICB7CiAgICAgICAgIGNhc2UgMDogLyogc2dkdCAqLwogICAg ICAgICBjYXNlIDE6IC8qIHNpZHQgKi8KLSAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9p ZihlYS50eXBlICE9IE9QX01FTSwgRVhDX1VELCAtMSk7CisgICAgICAgICAgICBnZW5lcmF0ZV9l eGNlcHRpb25faWYoZWEudHlwZSAhPSBPUF9NRU0sIEVYQ19VRCk7CiAgICAgICAgICAgICBnZW5l cmF0ZV9leGNlcHRpb25faWYodW1pcF9hY3RpdmUoY3R4dCwgb3BzKSwgRVhDX0dQLCAwKTsKICAg ICAgICAgICAgIGZhaWxfaWYob3BzLT5yZWFkX3NlZ21lbnQgPT0gTlVMTCk7CiAgICAgICAgICAg ICBpZiAoIChyYyA9IG9wcy0+cmVhZF9zZWdtZW50KHNlZywgJnNyZWcsIGN0eHQpKSApCkBAIC00 NDU1LDcgKzQ0NjAsNyBAQCB4ODZfZW11bGF0ZSgKICAgICAgICAgY2FzZSAyOiAvKiBsZ2R0ICov CiAgICAgICAgIGNhc2UgMzogLyogbGlkdCAqLwogICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0 aW9uX2lmKCFtb2RlX3JpbmcwKCksIEVYQ19HUCwgMCk7Ci0gICAgICAgICAgICBnZW5lcmF0ZV9l eGNlcHRpb25faWYoZWEudHlwZSAhPSBPUF9NRU0sIEVYQ19VRCwgLTEpOworICAgICAgICAgICAg Z2VuZXJhdGVfZXhjZXB0aW9uX2lmKGVhLnR5cGUgIT0gT1BfTUVNLCBFWENfVUQpOwogICAgICAg ICAgICAgZmFpbF9pZihvcHMtPndyaXRlX3NlZ21lbnQgPT0gTlVMTCk7CiAgICAgICAgICAgICBt ZW1zZXQoJnNyZWcsIDAsIHNpemVvZihzcmVnKSk7CiAgICAgICAgICAgICBpZiAoIChyYyA9IHJl YWRfdWxvbmcoZWEubWVtLnNlZywgZWEubWVtLm9mZiswLApAQCAtNDQ5OCw3ICs0NTAzLDcgQEAg eDg2X2VtdWxhdGUoCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSA3OiAvKiBpbnZs cGcgKi8KICAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZighbW9kZV9yaW5nMCgpLCBF WENfR1AsIDApOwotICAgICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKGVhLnR5cGUgIT0g T1BfTUVNLCBFWENfVUQsIC0xKTsKKyAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihl YS50eXBlICE9IE9QX01FTSwgRVhDX1VEKTsKICAgICAgICAgICAgIGZhaWxfaWYob3BzLT5pbnZs cGcgPT0gTlVMTCk7CiAgICAgICAgICAgICBpZiAoIChyYyA9IG9wcy0+aW52bHBnKGVhLm1lbS5z ZWcsIGVhLm1lbS5vZmYsIGN0eHQpKSApCiAgICAgICAgICAgICAgICAgZ290byBkb25lOwpAQCAt NDUxMiwxMyArNDUxNywxMyBAQCB4ODZfZW11bGF0ZSgKICAgICBjYXNlIFg4NkVNVUxfT1BDKDB4 MGYsIDB4MDUpOiAvKiBzeXNjYWxsICovIHsKICAgICAgICAgdWludDY0X3QgbXNyX2NvbnRlbnQ7 CiAKLSAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKCFpbl9wcm90bW9kZShjdHh0LCBvcHMp LCBFWENfVUQsIC0xKTsKKyAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKCFpbl9wcm90bW9k ZShjdHh0LCBvcHMpLCBFWENfVUQpOwogCiAgICAgICAgIC8qIEluamVjdCAjVUQgaWYgc3lzY2Fs bC9zeXNyZXQgYXJlIGRpc2FibGVkLiAqLwogICAgICAgICBmYWlsX2lmKG9wcy0+cmVhZF9tc3Ig PT0gTlVMTCk7CiAgICAgICAgIGlmICggKHJjID0gb3BzLT5yZWFkX21zcihNU1JfRUZFUiwgJm1z cl9jb250ZW50LCBjdHh0KSkgIT0gMCApCiAgICAgICAgICAgICBnb3RvIGRvbmU7Ci0gICAgICAg IGdlbmVyYXRlX2V4Y2VwdGlvbl9pZigobXNyX2NvbnRlbnQgJiBFRkVSX1NDRSkgPT0gMCwgRVhD X1VELCAtMSk7CisgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZigobXNyX2NvbnRlbnQgJiBF RkVSX1NDRSkgPT0gMCwgRVhDX1VEKTsKIAogICAgICAgICBpZiAoIChyYyA9IG9wcy0+cmVhZF9t c3IoTVNSX1NUQVIsICZtc3JfY29udGVudCwgY3R4dCkpICE9IDAgKQogICAgICAgICAgICAgZ290 byBkb25lOwpAQCAtNDU4Nyw3ICs0NTkyLDcgQEAgeDg2X2VtdWxhdGUoCiAgICAgY2FzZSBYODZF TVVMX09QQygweDBmLCAweDBiKTogLyogdWQyICovCiAgICAgY2FzZSBYODZFTVVMX09QQygweDBm LCAweGI5KTogLyogdWQxICovCiAgICAgY2FzZSBYODZFTVVMX09QQygweDBmLCAweGZmKTogLyog dWQwICovCi0gICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZigxLCBFWENfVUQsIC0xKTsKKyAg ICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uKEVYQ19VRCk7CiAKICAgICBjYXNlIFg4NkVNVUxfT1BD KDB4MGYsIDB4MGQpOiAvKiBHcnBQIChwcmVmZXRjaCkgKi8KICAgICBjYXNlIFg4NkVNVUxfT1BD KDB4MGYsIDB4MTgpOiAvKiBHcnAxNiAocHJlZmV0Y2gvbm9wKSAqLwpAQCAtNDcwNiw3ICs0NzEx LDcgQEAgeDg2X2VtdWxhdGUoCiAgICAgY2FzZSBYODZFTVVMX09QQygweDBmLCAweDIxKTogLyog bW92IGRyLHJlZyAqLwogICAgIGNhc2UgWDg2RU1VTF9PUEMoMHgwZiwgMHgyMik6IC8qIG1vdiBy ZWcsY3IgKi8KICAgICBjYXNlIFg4NkVNVUxfT1BDKDB4MGYsIDB4MjMpOiAvKiBtb3YgcmVnLGRy ICovCi0gICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihlYS50eXBlICE9IE9QX1JFRywgRVhD X1VELCAtMSk7CisgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZihlYS50eXBlICE9IE9QX1JF RywgRVhDX1VEKTsKICAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKCFtb2RlX3JpbmcwKCks IEVYQ19HUCwgMCk7CiAgICAgICAgIG1vZHJtX3JlZyB8PSBsb2NrX3ByZWZpeCA8PCAzOwogICAg ICAgICBpZiAoIGIgJiAyICkKQEAgLTQ5NDIsMTEgKzQ5NDcsMTEgQEAgeDg2X2VtdWxhdGUoCiAg ICAgICAgIHN3aXRjaCAoIGIgKQogICAgICAgICB7CiAgICAgICAgIGNhc2UgMHg3ZToKLSAgICAg ICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZih2ZXgubCwgRVhDX1VELCAtMSk7CisgICAgICAg ICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYodmV4LmwsIEVYQ19VRCk7CiAgICAgICAgICAgICBl YS5ieXRlcyA9IG9wX2J5dGVzOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgMHhk NjoKLSAgICAgICAgICAgIGdlbmVyYXRlX2V4Y2VwdGlvbl9pZih2ZXgubCwgRVhDX1VELCAtMSk7 CisgICAgICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYodmV4LmwsIEVYQ19VRCk7CiAgICAg ICAgICAgICBlYS5ieXRlcyA9IDg7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQpAQCAt NTAzNiw3ICs1MDQxLDcgQEAgeDg2X2VtdWxhdGUoCiAgICAgY2FzZSBYODZFTVVMX09QQygweDBm LCAweGFkKTogLyogc2hyZCAlJWNsLHIsci9tICovIHsKICAgICAgICAgdWludDhfdCBzaGlmdCwg d2lkdGggPSBkc3QuYnl0ZXMgPDwgMzsKIAotICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYo bG9ja19wcmVmaXgsIEVYQ19VRCwgLTEpOworICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYo bG9ja19wcmVmaXgsIEVYQ19VRCk7CiAgICAgICAgIGlmICggYiAmIDEgKQogICAgICAgICAgICAg c2hpZnQgPSBfcmVncy5lY3g7CiAgICAgICAgIGVsc2UKQEAgLTUxNTEsNyArNTE1Niw3IEBAIHg4 Nl9lbXVsYXRlKAogICAgICAgICBjYXNlIDU6IGdvdG8gYnRzOwogICAgICAgICBjYXNlIDY6IGdv dG8gYnRyOwogICAgICAgICBjYXNlIDc6IGdvdG8gYnRjOwotICAgICAgICBkZWZhdWx0OiBnZW5l cmF0ZV9leGNlcHRpb25faWYoMSwgRVhDX1VELCAtMSk7CisgICAgICAgIGRlZmF1bHQ6IGdlbmVy YXRlX2V4Y2VwdGlvbihFWENfVUQpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCkBAIC01 MjUyLDE1ICs1MjU3LDE1IEBAIHg4Nl9lbXVsYXRlKAogICAgIGNhc2UgWDg2RU1VTF9PUEMoMHgw ZiwgMHhjMyk6IC8qIG1vdm50aSAqLwogICAgICAgICAvKiBJZ25vcmUgdGhlIG5vbi10ZW1wb3Jh bCBoaW50IGZvciBub3cuICovCiAgICAgICAgIHZjcHVfbXVzdF9oYXZlX3NzZTIoKTsKLSAgICAg ICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKGRzdC5ieXRlcyA8PSAyLCBFWENfVUQsIC0xKTsKKyAg ICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKGRzdC5ieXRlcyA8PSAyLCBFWENfVUQpOwogICAg ICAgICBkc3QudmFsID0gc3JjLnZhbDsKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFg4NkVN VUxfT1BDKDB4MGYsIDB4YzcpOiAvKiBHcnA5IChjbXB4Y2hnOGIvY21weGNoZzE2YikgKi8gewog ICAgICAgICB1bnNpZ25lZCBsb25nIG9sZFsyXSwgZXhwWzJdLCBuZXdbMl07CiAKLSAgICAgICAg Z2VuZXJhdGVfZXhjZXB0aW9uX2lmKChtb2RybV9yZWcgJiA3KSAhPSAxLCBFWENfVUQsIC0xKTsK LSAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKGVhLnR5cGUgIT0gT1BfTUVNLCBFWENfVUQs IC0xKTsKKyAgICAgICAgZ2VuZXJhdGVfZXhjZXB0aW9uX2lmKChtb2RybV9yZWcgJiA3KSAhPSAx LCBFWENfVUQpOworICAgICAgICBnZW5lcmF0ZV9leGNlcHRpb25faWYoZWEudHlwZSAhPSBPUF9N RU0sIEVYQ19VRCk7CiAgICAgICAgIGlmICggb3BfYnl0ZXMgPT0gOCApCiAgICAgICAgICAgICBo b3N0X2FuZF92Y3B1X211c3RfaGF2ZShjeDE2KTsKICAgICAgICAgb3BfYnl0ZXMgKj0gMjsKLS0g CjIuMS40CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K WGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9yZwpodHRwczovL2xp c3RzLnhlbi5vcmcveGVuLWRldmVsCg==