From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NZa5P-0006Mk-TE for qemu-devel@nongnu.org; Mon, 25 Jan 2010 20:19:20 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NZa5N-0006Lz-4w for qemu-devel@nongnu.org; Mon, 25 Jan 2010 20:19:18 -0500 Received: from [199.232.76.173] (port=44979 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NZa5M-0006Lr-TO for qemu-devel@nongnu.org; Mon, 25 Jan 2010 20:19:16 -0500 Received: from are.twiddle.net ([75.149.56.221]:55252) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NZa5M-0006GL-3L for qemu-devel@nongnu.org; Mon, 25 Jan 2010 20:19:16 -0500 Message-ID: <4B5E4311.10707@twiddle.net> Date: Mon, 25 Jan 2010 17:19:13 -0800 From: Richard Henderson MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH] Porting TCG to alpha platform References: <242393.28161.qm@web15901.mail.cnb.yahoo.com> In-Reply-To: <242393.28161.qm@web15901.mail.cnb.yahoo.com> Content-Type: multipart/mixed; boundary="------------020701090303080100080506" List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: identifier scorpio Cc: qemu-devel@nongnu.org This is a multi-part message in MIME format. --------------020701090303080100080506 Content-Type: text/plain; charset=GB2312 Content-Transfer-Encoding: 7bit I've rearranged the code a tad, along the lines I had in mind. I *think* I may have found cause of some of your problems running Windows. Mainly, tcg_target_long was used places that could be holding HOST values, which means that the host values would have been truncated to 32 bits. Anyway, give this a try and let me know what happens. All I could actually try was a cross-compile of the code... r~ --------------020701090303080100080506 Content-Type: text/plain; name="d-tcg-alpha.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="d-tcg-alpha.txt" ZGlmZiAtLWdpdCBhL2NwdS1jb21tb24uaCBiL2NwdS1jb21tb24uaAppbmRleCA2MzAyMzcy Li4wMWY5OTgwIDEwMDY0NAotLS0gYS9jcHUtY29tbW9uLmgKKysrIGIvY3B1LWNvbW1vbi5o CkBAIC0zLDcgKzMsOCBAQAogCiAvKiBDUFUgaW50ZXJmYWNlcyB0aGF0IGFyZSB0YXJnZXQg aW5kcGVuZGVudC4gICovCiAKLSNpZiBkZWZpbmVkKF9fYXJtX18pIHx8IGRlZmluZWQoX19z cGFyY19fKSB8fCBkZWZpbmVkKF9fbWlwc19fKSB8fCBkZWZpbmVkKF9faHBwYV9fKQorI2lm IGRlZmluZWQoX19hcm1fXykgfHwgZGVmaW5lZChfX3NwYXJjX18pIHx8IGRlZmluZWQoX19t aXBzX18pIFwKKyAgICB8fCBkZWZpbmVkKF9faHBwYV9fKSB8fCBkZWZpbmVkKF9fYWxwaGFf XykKICNkZWZpbmUgV09SRFNfQUxJR05FRAogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL2V4ZWMt YWxsLmggYi9leGVjLWFsbC5oCmluZGV4IDgyMGI1OWUuLjNlMDNhZWYgMTAwNjQ0Ci0tLSBh L2V4ZWMtYWxsLmgKKysrIGIvZXhlYy1hbGwuaApAQCAtMTE0LDcgKzExNCw4IEBAIHN0YXRp YyBpbmxpbmUgaW50IHRsYl9zZXRfcGFnZShDUFVTdGF0ZSAqZW52MSwgdGFyZ2V0X3Vsb25n IHZhZGRyLAogI2RlZmluZSBDT0RFX0dFTl9BVkdfQkxPQ0tfU0laRSA2NAogI2VuZGlmCiAK LSNpZiBkZWZpbmVkKF9BUkNIX1BQQykgfHwgZGVmaW5lZChfX3g4Nl82NF9fKSB8fCBkZWZp bmVkKF9fYXJtX18pIHx8IGRlZmluZWQoX19pMzg2X18pCisjaWYgZGVmaW5lZChfQVJDSF9Q UEMpIHx8IGRlZmluZWQoX194ODZfNjRfXykgfHwgZGVmaW5lZChfX2FybV9fKSBcCisgICAg fHwgZGVmaW5lZChfX2kzODZfXykgfHwgZGVmaW5lZChfX2FscGhhX18pCiAjZGVmaW5lIFVT RV9ESVJFQ1RfSlVNUAogI2VuZGlmCiAKQEAgLTE4OSw2ICsxOTAsOSBAQCBleHRlcm4gaW50 IGNvZGVfZ2VuX21heF9ibG9ja3M7CiAjaWYgZGVmaW5lZChfQVJDSF9QUEMpCiBleHRlcm4g dm9pZCBwcGNfdGJfc2V0X2ptcF90YXJnZXQodW5zaWduZWQgbG9uZyBqbXBfYWRkciwgdW5z aWduZWQgbG9uZyBhZGRyKTsKICNkZWZpbmUgdGJfc2V0X2ptcF90YXJnZXQxIHBwY190Yl9z ZXRfam1wX3RhcmdldAorI2VsaWYgZGVmaW5lZChfX2FscGhhX18pCitleHRlcm4gdm9pZCBh bHBoYV90Yl9zZXRfam1wX3RhcmdldCh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKQor I2RlZmluZSB0Yl9zZXRfam1wX3RhcmdldDEgYWxwaGFfdGJfc2V0X2ptcF90YXJnZXQKICNl bGlmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX194ODZfNjRfXykKIHN0YXRpYyBp bmxpbmUgdm9pZCB0Yl9zZXRfam1wX3RhcmdldDEodW5zaWduZWQgbG9uZyBqbXBfYWRkciwg dW5zaWduZWQgbG9uZyBhZGRyKQogewpkaWZmIC0tZ2l0IGEvdGNnL2FscGhhL3RjZy10YXJn ZXQuYyBiL3RjZy9hbHBoYS90Y2ctdGFyZ2V0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uN2UwZTM2NwotLS0gL2Rldi9udWxsCisrKyBiL3RjZy9hbHBoYS90Y2ct dGFyZ2V0LmMKQEAgLTAsMCArMSwxMzk4IEBACisvKgorICogVGlueSBDb2RlIEdlbmVyYXRv ciBmb3IgUUVNVSBvbiBBTFBIQSBwbGF0Zm9ybS4KKyAqLworCisjaWZuZGVmIE5ERUJVRwor c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCB0Y2dfdGFyZ2V0X3JlZ19uYW1lc1tUQ0dfVEFS R0VUX05CX1JFR1NdID0geworICAgICIkMCIsICIkMSIsICIkMiIsICIkMyIsICIkNCIsICIk NSIsICIkNiIsICIkNyIsCisgICAgIiQ4IiwgIiQ5IiwgIiQxMCIsICIkMTEiLCAiJDEyIiwg IiQxMyIsICIkMTQiLCAiJDE1IiwKKyAgICAiJDE2IiwgIiQxNyIsICIkMTgiLCAiJDE5Iiwg IiQyMCIsICIkMjEiLCAiJDIyIiwgIiQyMyIsCisgICAgIiQyNCIsICIkMjUiLCAiJDI2Iiwg IiQyNyIsICIkMjgiLCAiJDI5IiwgIiQzMCIsICIkMzEiLAorfTsKKyNlbmRpZgorCisvKgor ICogJDE1IGlzIHRoZSBjcHVfZW52IHJlZ2lzdGVyLAorICogJDMwIGlzIHRoZSBzdGFjayBw b2ludGVyLAorICogJDMxIGlzIHRoZSB6ZXJvIHJlZ2lzdGVyLAorICogJDIzLCAkMjgsICQy OSBhcmUgcmVzZXJ2ZWQgYXMgdGVtcG9yYXJpZXMuCisgKi8KK3N0YXRpYyBjb25zdCBpbnQg dGNnX3RhcmdldF9yZWdfYWxsb2Nfb3JkZXJbXSA9IHsKKyAgICBUQ0dfUkVHXzksIFRDR19S RUdfMTAsIFRDR19SRUdfMTEsIFRDR19SRUdfMTIsIFRDR19SRUdfMTMsIFRDR19SRUdfMTQs CisgICAgVENHX1JFR18xLCBUQ0dfUkVHXzIsIFRDR19SRUdfMywgVENHX1JFR180LCBUQ0df UkVHXzUsIFRDR19SRUdfNiwKKyAgICBUQ0dfUkVHXzcsIFRDR19SRUdfOCwgVENHX1JFR18y MiwgVENHX1JFR18yNCwgVENHX1JFR18yNSwgVENHX1JFR18yNiwKKyAgICBUQ0dfUkVHXzI3 LCBUQ0dfUkVHXzE2LCBUQ0dfUkVHXzE3LCBUQ0dfUkVHXzE4LCBUQ0dfUkVHXzE5LCBUQ0df UkVHXzIwLAorICAgIFRDR19SRUdfMjEKK307CisKKy8qCisgKiBBY2NvcmRpbmcgdG8gYWxw aGEgY2FsbGluZyBjb252ZW50aW9uLCB0aGVzZSA2IHJlZ2lzdGVycyBhcmUgdXNlZCBmb3IK KyAqIGZ1bmN0aW9uIHBhcmFtZXRlciBwYXNzaW5nLiBpZiBmdW5jdGlvbiBoYXMgbW9yZSB0 aGFuIDYgcGFyYW1ldGVycywKKyAqIHJlbWFpbmluZyBhcmd1bWVudHMgYXJlIHN0b3JlZCBv biB0aGUgc3RhY2suCisgKi8KK3N0YXRpYyBjb25zdCBpbnQgdGNnX3RhcmdldF9jYWxsX2lh cmdfcmVnc1s2XSA9IHsKKyAgICBUQ0dfUkVHXzE2LCBUQ0dfUkVHXzE3LCBUQ0dfUkVHXzE4 LCBUQ0dfUkVHXzE5LCBUQ0dfUkVHXzIwLCBUQ0dfUkVHXzIxCit9OworCisvKgorICogQWNj b3JkaW5nIHRvIGFscGhhIGNhbGxpbmcgY29udmVudGlvbiwgJDAgaXMgdXNlZCBmb3IgcmV0 dXJuaW5nIGZ1bmN0aW9uCisgKiByZXN1bHQuCisgKi8KK3N0YXRpYyBjb25zdCBpbnQgdGNn X3RhcmdldF9jYWxsX29hcmdfcmVnc1sxXSA9IHsgVENHX1JFR18wIH07CisKKy8qCisgKiBT YXZlIHRoZSBhZGRyZXNzIG9mIFRCJ3MgZXBpbG9ndWUuCisgKi8KKyNkZWZpbmUgVEJfUkVU X09GUwlUQ0dfU1RBVElDX0NBTExfQVJHU19TSVpFCisKKyNkZWZpbmUgSU5TTl9PUCh4KSAg ICAgKCgoeCkgJiAweDNmKSA8PCAyNikKKyNkZWZpbmUgSU5TTl9GVU5DMSh4KSAgKCgoeCkg JiAweDMpIDw8IDE0KQorI2RlZmluZSBJTlNOX0ZVTkMyKHgpICAoKCh4KSAmIDB4N2YpIDw8 IDUpCisjZGVmaW5lIElOU05fUkEoeCkgICAgICgoKHgpICYgMHgxZikgPDwgMjEpCisjZGVm aW5lIElOU05fUkIoeCkgICAgICgoKHgpICYgMHgxZikgPDwgMTYpCisjZGVmaW5lIElOU05f UkMoeCkgICAgICgoeCkgJiAweDFmKQorI2RlZmluZSBJTlNOX0xJVCh4KSAgICAoKCh4KSAm IDB4ZmYpIDw8IDEzKQorI2RlZmluZSBJTlNOX0RJU1AxNih4KSAoKHgpICYgMHhmZmZmKQor I2RlZmluZSBJTlNOX0RJU1AyMSh4KSAoKHgpICYgMHgxZmZmZmYpCisjZGVmaW5lIElOU05f UlNWRUQoeCkgICgoeCkgJiAweDNmZmYpCisKKyNkZWZpbmUgSU5TTl9BRERMCShJTlNOX09Q KDB4MTApIHwgSU5TTl9GVU5DMigweDAwKSkKKyNkZWZpbmUgSU5TTl9BRERRCShJTlNOX09Q KDB4MTApIHwgSU5TTl9GVU5DMigweDIwKSkKKyNkZWZpbmUgSU5TTl9BTkQJKElOU05fT1Ao MHgxMSkgfCBJTlNOX0ZVTkMyKDB4MDApKQorI2RlZmluZSBJTlNOX0JFUQlJTlNOX09QKDB4 MzkpCisjZGVmaW5lIElOU05fQkdFCUlOU05fT1AoMHgzZSkKKyNkZWZpbmUgSU5TTl9CR1QJ SU5TTl9PUCgweDNmKQorI2RlZmluZSBJTlNOX0JJQwkoSU5TTl9PUCgweDExKSB8IElOU05f RlVOQzIoMHgwOCkpCisjZGVmaW5lIElOU05fQklTCShJTlNOX09QKDB4MTEpIHwgSU5TTl9G VU5DMigweDIwKSkKKyNkZWZpbmUgSU5TTl9CTEUJSU5TTl9PUCgweDNiKQorI2RlZmluZSBJ TlNOX0JMVAlJTlNOX09QKDB4M2EpCisjZGVmaW5lIElOU05fQk5FCUlOU05fT1AoMHgzZCkK KyNkZWZpbmUgSU5TTl9CUgkJSU5TTl9PUCgweDMwKQorI2RlZmluZSBJTlNOX0NBTEwJKElO U05fT1AoMHgxYSkgfCBJTlNOX0ZVTkMxKDEpKQorI2RlZmluZSBJTlNOX0NNUEVRCShJTlNO X09QKDB4MTApIHwgSU5TTl9GVU5DMigweDJkKSkKKyNkZWZpbmUgSU5TTl9DTVBMRQkoSU5T Tl9PUCgweDEwKSB8IElOU05fRlVOQzIoMHg2ZCkpCisjZGVmaW5lIElOU05fQ01QTFQJKElO U05fT1AoMHgxMCkgfCBJTlNOX0ZVTkMyKDB4NGQpKQorI2RlZmluZSBJTlNOX0NNUFVMRQko SU5TTl9PUCgweDEwKSB8IElOU05fRlVOQzIoMHgzZCkpCisjZGVmaW5lIElOU05fQ01QVUxU CShJTlNOX09QKDB4MTApIHwgSU5TTl9GVU5DMigweDFkKSkKKyNkZWZpbmUgSU5TTl9FUVYJ KElOU05fT1AoMHgxMSkgfCBJTlNOX0ZVTkMyKDB4NDgpKQorI2RlZmluZSBJTlNOX0VYVEJM CShJTlNOX09QKDB4MTIpIHwgSU5TTl9GVU5DMigweDA2KSkKKyNkZWZpbmUgSU5TTl9FWFRX SAkoSU5TTl9PUCgweDEyKSB8IElOU05fRlVOQzIoMHgxNikpCisjZGVmaW5lIElOU05fSU5T TEgJKElOU05fT1AoMHgxMikgfCBJTlNOX0ZVTkMyKDB4NjcpKQorI2RlZmluZSBJTlNOX0lO U1dMCShJTlNOX09QKDB4MTIpIHwgSU5TTl9GVU5DMigweDU3KSkKKyNkZWZpbmUgSU5TTl9K TVAJKElOU05fT1AoMHgxYSkgfCBJTlNOX0ZVTkMxKDApKQorI2RlZmluZSBJTlNOX0xEQQlJ TlNOX09QKDB4OCkKKyNkZWZpbmUgSU5TTl9MREFICUlOU05fT1AoMHg5KQorI2RlZmluZSBJ TlNOX0xEQlUJSU5TTl9PUCgweGEpCisjZGVmaW5lIElOU05fTERMCUlOU05fT1AoMHgyOCkK KyNkZWZpbmUgSU5TTl9MRFEJSU5TTl9PUCgweDI5KQorI2RlZmluZSBJTlNOX0xEV1UJSU5T Tl9PUCgweGMpCisjZGVmaW5lIElOU05fTVVMTAkoSU5TTl9PUCgweDEzKSB8IElOU05fRlVO QzIoMHgwMCkpCisjZGVmaW5lIElOU05fTVVMUQkoSU5TTl9PUCgweDEzKSB8IElOU05fRlVO QzIoMHgyMCkpCisjZGVmaW5lIElOU05fT1JOT1QJKElOU05fT1AoMHgxMSkgfCBJTlNOX0ZV TkMyKDB4MjgpKQorI2RlZmluZSBJTlNOX1JFVAkoSU5TTl9PUCgweDFhKSB8IElOU05fRlVO QzEoMikpCisjZGVmaW5lIElOU05fU0VYVEIJKElOU05fT1AoMHgxYykgfCBJTlNOX0ZVTkMy KDB4MDApKQorI2RlZmluZSBJTlNOX1NFWFRXCShJTlNOX09QKDB4MWMpIHwgSU5TTl9GVU5D MigweDEpKQorI2RlZmluZSBJTlNOX1NMTAkoSU5TTl9PUCgweDEyKSB8IElOU05fRlVOQzIo MHgzOSkpCisjZGVmaW5lIElOU05fU1JBCShJTlNOX09QKDB4MTIpIHwgSU5TTl9GVU5DMigw eDNjKSkKKyNkZWZpbmUgSU5TTl9TUkwJKElOU05fT1AoMHgxMikgfCBJTlNOX0ZVTkMyKDB4 MzQpKQorI2RlZmluZSBJTlNOX1NUQglJTlNOX09QKDB4ZSkKKyNkZWZpbmUgSU5TTl9TVEwJ SU5TTl9PUCgweDJjKQorI2RlZmluZSBJTlNOX1NUUQlJTlNOX09QKDB4MmQpCisjZGVmaW5l IElOU05fU1RXCUlOU05fT1AoMHhkKQorI2RlZmluZSBJTlNOX1NVQkwJKElOU05fT1AoMHgx MCkgfCBJTlNOX0ZVTkMyKDB4MDkpKQorI2RlZmluZSBJTlNOX1NVQlEJKElOU05fT1AoMHgx MCkgfCBJTlNOX0ZVTkMyKDB4MjkpKQorI2RlZmluZSBJTlNOX1hPUgkoSU5TTl9PUCgweDEx KSB8IElOU05fRlVOQzIoMHg0MCkpCisjZGVmaW5lIElOU05fWkFQTk9UCShJTlNOX09QKDB4 MTIpIHwgSU5TTl9GVU5DMigweDMxKSkKKyNkZWZpbmUgSU5TTl9CVUdDSEsJKElOU05fT1Ao MHgwMCkgfCBJTlNOX0RJU1AxNigweDgxKSkKKworLyoKKyAqIFJldHVybiB0aGUgIyBvZiBy ZWdzIHVzZWQgZm9yIHBhcmFtZXRlciBwYXNzaW5nIG9uIHByb2NlZHVyZSBjYWxsaW5nLgor ICogbm90ZSB0aGF0IGFscGhhIHVzZSAkMTZ+JDIxIHRvIHRyYW5zZmVyIHRoZSBmaXJzdCA2 IHBhcmFtZW50ZXJzIG9mIGEKKyAqIHByb2NlZHVyZS4KKyAqLworc3RhdGljIGlubGluZSBp bnQgdGNnX3RhcmdldF9nZXRfY2FsbF9pYXJnX3JlZ3NfY291bnQoaW50IGZsYWdzKQorewor ICAgIHJldHVybiA2OworfQorCisvKgorICogR2l2ZW4gYSBjb25zdHJhaW50LCBmaWxsIGlu IHRoZSBhdmFpbGFibGUgcmVnaXN0ZXIgc2V0IG9yIGNvbnN0YW50IHJhbmdlLgorICovCitz dGF0aWMgaW50IHRhcmdldF9wYXJzZV9jb25zdHJhaW50KFRDR0FyZ0NvbnN0cmFpbnQgKmN0 LCBjb25zdCBjaGFyICoqcGN0X3N0cikKK3sKKyAgICBjb25zdCBjaGFyICpjdF9zdHIgPSAq cGN0X3N0cjsKKworICAgIHN3aXRjaCAoY3Rfc3RyWzBdKSB7CisgICAgY2FzZSAncic6Cisg ICAgICAgIC8qIENvbnN0YWludCAncicgbWVhbnMgYW55IHJlZ2lzdGVyIGlzIG9rYXkuICAq LworICAgICAgICBjdC0+Y3QgfD0gVENHX0NUX1JFRzsKKyAgICAgICAgdGNnX3JlZ3NldF9z ZXQzMihjdC0+dS5yZWdzLCAwLCAweGZmZmZmZmZmdSk7CisgICAgICAgIGJyZWFrOworCisg ICAgY2FzZSAnYSc6CisgICAgICAgIC8qIENvbnN0cmFpbnQgJ2EnIG1lYW5zICQyNCwgb25l IG9mIHRoZSBkaXZpc2lvbiBpbnB1dHMuICAqLworICAgICAgICBjdC0+Y3QgfD0gVENHX0NU X1JFRzsKKyAgICAgICAgdGNnX3JlZ3NldF9zZXQzMihjdC0+dS5yZWdzLCAwLCAxdSA8PCAy NCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSAnYic6CisgICAgICAgIC8qIENvbnN0 cmFpbnQgJ2InIG1lYW5zICQyNSwgb25lIG9mIHRoZSBkaXZpc2lvbiBpbnB1dHMuICAqLwor ICAgICAgICBjdC0+Y3QgfD0gVENHX0NUX1JFRzsKKyAgICAgICAgdGNnX3JlZ3NldF9zZXQz MihjdC0+dS5yZWdzLCAwLCAxdSA8PCAyNSk7CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz ZSAnYyc6CisgICAgICAgIC8qIENvbnN0cmFpbnQgJ2MnIG1lYW5zICQyNywgdGhlIGNhbGwg cHJvY2VkdXJlIHZlY3Rvci4gICovCisgICAgICAgIGN0LT5jdCB8PSBUQ0dfQ1RfUkVHOwor ICAgICAgICB0Y2dfcmVnc2V0X3NldDMyKGN0LT51LnJlZ3MsIDAsIDF1IDw8IDI3KTsKKyAg ICAgICAgYnJlYWs7CisKKyAgICBjYXNlICdMJzoKKyAgICAgICAgLyogQ29uc3RyYWludCBm b3IgcWVtdV9sZC9zdC4gIFRoZSBleHRyYSByZXNlcnZlZCByZWdpc3RlcnMgYXJlCisgICAg ICAgICAgIHVzZWQgZm9yIHBhc3NpbmcgdGhlIHBhcmFtZXRlcnMgdG8gdGhlIGhlbHBlciBm dW5jdGlvbi4gICovCisgICAgICAgIGN0LT5jdCB8PSBUQ0dfQ1RfUkVHOworICAgICAgICB0 Y2dfcmVnc2V0X3NldDMyKGN0LT51LnJlZ3MsIDAsIDB4ZmZmZmZmZmZ1KTsKKyAgICAgICAg dGNnX3JlZ3NldF9yZXNldF9yZWcoY3QtPnUucmVncywgVENHX1JFR18xNik7CisgICAgICAg IHRjZ19yZWdzZXRfcmVzZXRfcmVnKGN0LT51LnJlZ3MsIFRDR19SRUdfMTcpOworICAgICAg ICB0Y2dfcmVnc2V0X3Jlc2V0X3JlZyhjdC0+dS5yZWdzLCBUQ0dfUkVHXzE4KTsKKyAgICAg ICAgYnJlYWs7CisKKyAgICBjYXNlICdJJzoKKyAgICAgICAgLyogQ29uc3RyYWludCAnSScg bWVhbnMgYW4gaW1tZWRpYXRlIDAgLi4uIDI1NS4gICovCisgICAgICAgIGN0LT5jdCB8PSBU Q0dfQ1RfQ09OU1RfVTg7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSAnSic6CisgICAg ICAgIC8qIENvbnN0cmFpbnQgJ0onIG1lYW5zIHRoZSBpbW1lZGlhdGUgMC4gICovCisgICAg ICAgIGN0LT5jdCB8PSBUQ0dfQ1RfQ09OU1RfWkVSTzsKKyAgICAgICAgYnJlYWs7CisKKyAg ICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgY3Rfc3RyKys7 CisgICAgKnBjdF9zdHIgPSBjdF9zdHI7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bmxpbmUgaW50IHRjZ190YXJnZXRfY29uc3RfbWF0Y2godGNnX3RhcmdldF9sb25nIHZhbCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgVENHQXJn Q29uc3RyYWludCAqYXJnX2N0KQoreworICAgIGludCBjdCA9IGFyZ19jdC0+Y3Q7CisgICAg aWYgKGN0ICYgVENHX0NUX0NPTlNUKSB7CisgICAgICAgIHJldHVybiAxOworICAgIH0gZWxz ZSBpZiAoY3QgJiBUQ0dfQ1RfQ09OU1RfVTgpIHsKKyAgICAgICAgcmV0dXJuIHZhbCA9PSAo dWludDhfdCl2YWw7CisgICAgfSBlbHNlIGlmIChjdCAmIFRDR19DVF9DT05TVF9aRVJPKSB7 CisgICAgICAgIHJldHVybiB2YWwgPT0gMDsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1 cm4gMDsKKyAgICB9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y2dfb3V0X2ZtdF9icihU Q0dDb250ZXh0ICpzLCBpbnQgb3BjLCBpbnQgcmEsIGludCBkaXNwKQoreworICAgIHRjZ19v dXQzMihzLCAob3BjKSB8IElOU05fUkEocmEpIHwgSU5TTl9ESVNQMjEoZGlzcCkpOworfQor CitzdGF0aWMgaW5saW5lIHZvaWQgdGNnX291dF9mbXRfbWVtKFRDR0NvbnRleHQgKnMsIGlu dCBvcGMsIGludCByYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 IHJiLCBpbnQgZGlzcCkKK3sKKyAgICBpZiAoZGlzcCAhPSAoaW50MTZfdClkaXNwKSB7Cisg ICAgICAgIHRjZ19hYm9ydCgpOworICAgIH0KKyAgICB0Y2dfb3V0MzIocywgKG9wYykgfCBJ TlNOX1JBKHJhKSB8IElOU05fUkIocmIpIHwgSU5TTl9ESVNQMTYoZGlzcCkpOworfQorCitz dGF0aWMgaW5saW5lIHZvaWQgdGNnX291dF9mbXRfam1wKFRDR0NvbnRleHQgKnMsIGludCBv cGMsIGludCByYSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHJi LCBpbnQgcnN2ZWQpCit7CisgICAgdGNnX291dDMyKHMsIChvcGMpIHwgSU5TTl9SQShyYSkg fCBJTlNOX1JCKHJiKSB8IElOU05fUlNWRUQocnN2ZWQpKTsKK30KKworc3RhdGljIGlubGlu ZSB2b2lkIHRjZ19vdXRfZm10X29wcihUQ0dDb250ZXh0ICpzLCBpbnQgb3BjLCBpbnQgcmEs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCByYiwgaW50IHJjKQor eworICAgIHRjZ19vdXQzMihzLCAob3BjKSB8IElOU05fUkEocmEpIHwgSU5TTl9SQihyYikg fCBJTlNOX1JDKHJjKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCB0Y2dfb3V0X2ZtdF9v cGkoVENHQ29udGV4dCAqcywgaW50IG9wYywgaW50IHJhLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgbGl0LCBpbnQgcmMpCit7CisgICAgaWYgKGxpdCAmIH4w eGZmKSB7CisgICAgICAgIHRjZ19hYm9ydCgpOworICAgIH0KKyAgICB0Y2dfb3V0MzIocywg KG9wYykgfCBJTlNOX1JBKHJhKSB8IElOU05fTElUKGxpdCkgfCBJTlNOX1JDKHJjKSB8ICgx PDwxMikpOworfQorCisvKgorICogbW92IGZyb20gYSByZWcgdG8gYW5vdGhlcgorICovCitz dGF0aWMgaW5saW5lIHZvaWQgdGNnX291dF9tb3YoVENHQ29udGV4dCAqcywgaW50IHJjLCBp bnQgcmIpCit7CisgICAgaWYgKHJiICE9IHJjKSB7CisgICAgICAgIHRjZ19vdXRfZm10X29w cihzLCBJTlNOX0JJUywgVENHX1JFR18zMSwgcmIsIHJjKTsKKyAgICB9Cit9CisKKy8qCisg KiBIZWxwZXIgZnVuY3Rpb24gdG8gZW1pdCBhIG1lbW9yeSBmb3JtYXQgb3BlcmF0aW9uIHdp dGggYSBkaXNwbGFjZW1lbnQKKyAqIHRoYXQgbWF5IGJlIGxhcmdlciB0aGFuIHRoZSAxNiBi aXRzIGFjY2VwdGVkIGJ5IHRoZSByZWFsIGluc3RydWN0aW9uLgorICovCitzdGF0aWMgdm9p ZCB0Y2dfb3V0X21lbV9sb25nKFRDR0NvbnRleHQgKnMsIGludCBvcGMsIGludCByYSwgaW50 IHJiLCBsb25nIG9yaWcpCit7CisgICAgbG9uZyBsMCwgbDEsIGV4dHJhID0gMCwgdmFsID0g b3JpZzsKKyAgICBpbnQgcnM7CisKKyAgICAvKiBQaWNrIGEgc2NyYXRjaCByZWdpc3Rlci4g IFVzZSB0aGUgb3V0cHV0IHJlZ2lzdGVyLCBpZiBwb3NzaWJsZS4gICovCisgICAgc3dpdGNo IChvcGMpIHsKKyAgICBkZWZhdWx0OgorICAgICAgICBpZiAocmEgIT0gcmIpIHsKKyAgICAg ICAgICAgIHJzID0gcmE7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAg ICAvKiBGQUxMVEhSVSAqLworCisgICAgY2FzZSBJTlNOX1NUQjoKKyAgICBjYXNlIElOU05f U1RXOgorICAgIGNhc2UgSU5TTl9TVEw6CisgICAgY2FzZSBJTlNOX1NUUToKKyAgICAgICAg aWYgKHJhID09IFRNUF9SRUcxKSB7CisgICAgICAgICAgICB0Y2dfYWJvcnQoKTsKKyAgICAg ICAgfQorICAgICAgICBycyA9IFRNUF9SRUcxOworICAgICAgICBicmVhazsKKyAgICB9CisK KyAgICBsMCA9IChpbnQxNl90KXZhbDsKKyAgICB2YWwgPSAodmFsIC0gbDApID4+IDE2Owor ICAgIGwxID0gKGludDE2X3QpdmFsOworCisgICAgaWYgKG9yaWcgPj4gMzEgPT0gLTEgfHwg b3JpZyA+PiAzMSA9PSAwKSB7CisgICAgICAgIGlmIChsMSA8IDAgJiYgb3JpZyA+PSAwKSB7 CisgICAgICAgICAgICBleHRyYSA9IDB4NDAwMDsKKyAgICAgICAgICAgIGwxID0gKGludDE2 X3QpKHZhbCAtIDB4NDAwMCk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBs b25nIGwyLCBsMzsKKyAgICAgICAgaW50IHJoID0gVENHX1JFR18zMTsKKworICAgICAgICB2 YWwgPSAodmFsIC0gbDEpID4+IDE2OworICAgICAgICBsMiA9IChpbnQxNl90KXZhbDsKKyAg ICAgICAgdmFsID0gKHZhbCAtIGwyKSA+PiAxNjsKKyAgICAgICAgbDMgPSAoaW50MTZfdCl2 YWw7CisKKyAgICAgICAgaWYgKGwzKSB7CisgICAgICAgICAgICB0Y2dfb3V0X2ZtdF9tZW0o cywgSU5TTl9MREFILCBycywgcmgsIGwzKTsKKyAgICAgICAgICAgIHJoID0gcnM7CisgICAg ICAgIH0KKyAgICAgICAgaWYgKGwyKSB7CisgICAgICAgICAgICB0Y2dfb3V0X2ZtdF9tZW0o cywgSU5TTl9MREEsIHJzLCByaCwgbDIpOworICAgICAgICAgICAgcmggPSByczsKKyAgICAg ICAgfQorICAgICAgICB0Y2dfb3V0X2ZtdF9vcGkocywgSU5TTl9TTEwsIHJoLCAzMiwgcnMp OworCisgICAgICAgIGlmIChyYiAhPSBUQ0dfUkVHXzMxKSB7CisgICAgICAgICAgICB0Y2df b3V0X2ZtdF9vcHIocywgSU5TTl9BRERRLCBycywgcmIsIHJzKTsKKyAgICAgICAgfQorICAg ICAgICByYiA9IHJzOworICAgIH0KKworICAgIGlmIChsMSkgeworICAgICAgICB0Y2dfb3V0 X2ZtdF9tZW0ocywgSU5TTl9MREFILCBycywgcmIsIGwxKTsKKyAgICAgICAgcmIgPSByczsK KyAgICB9CisgICAgaWYgKGV4dHJhKSB7CisgICAgICAgIHRjZ19vdXRfZm10X21lbShzLCBJ TlNOX0xEQUgsIHJzLCByYiwgZXh0cmEpOworICAgICAgICByYiA9IHJzOworICAgIH0KKwor ICAgIGlmIChvcGMgIT0gSU5TTl9MREEgfHwgcmIgIT0gcmEgfHwgbDAgIT0gMCkgeworICAg ICAgICB0Y2dfb3V0X2ZtdF9tZW0ocywgb3BjLCByYSwgcmIsIGwwKTsKKyAgICB9Cit9CisK K3N0YXRpYyBpbmxpbmUgdm9pZCB0Y2dfb3V0X21vdmkoVENHQ29udGV4dCAqcywgVENHVHlw ZSB0eXBlLCBpbnQgcmEsIGxvbmcgdmFsKQoreworICAgIGlmICh0eXBlID09IFRDR19UWVBF X0kzMikgeworICAgICAgICB2YWwgPSAoaW50MzJfdCl2YWw7CisgICAgfQorICAgIHRjZ19v dXRfbWVtX2xvbmcocywgSU5TTl9MREEsIHJhLCBUQ0dfUkVHXzMxLCB2YWwpOworfQorCitz dGF0aWMgaW5saW5lIHZvaWQgdGNnX291dF9sZChUQ0dDb250ZXh0ICpzLCBpbnQgdHlwZSwK KwkJCSAgICAgIGludCByYSwgaW50IHJiLCBsb25nIGRpc3ApCit7CisgICAgdGNnX291dF9t ZW1fbG9uZyhzLCB0eXBlID09IFRDR19UWVBFX0kzMiA/IElOU05fTERMIDogSU5TTl9MRFEs CisgICAgICAgICAgICAgICAgICAgICByYSwgcmIsIGRpc3ApOworfQorCitzdGF0aWMgaW5s aW5lIHZvaWQgdGNnX291dF9zdChUQ0dDb250ZXh0ICpzLCBpbnQgdHlwZSwKKwkJCSAgICAg IGludCByYSwgaW50IHJiLCBsb25nIGRpc3ApCit7CisgICAgdGNnX291dF9tZW1fbG9uZyhz LCB0eXBlID09IFRDR19UWVBFX0kzMiA/IElOU05fU1RMIDogSU5TTl9TVFEsCisgICAgICAg ICAgICAgICAgICAgICByYSwgcmIsIGRpc3ApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQg dGNnX291dF9hZGRpKFRDR0NvbnRleHQgKnMsIGludCByZWcsIGxvbmcgdmFsKQoreworICAg IGlmICh2YWwgIT0gMCkgeworICAgICAgICB0Y2dfb3V0X21lbV9sb25nKHMsIElOU05fTERB LCByZWcsIHJlZywgdmFsKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHRjZ19vdXRfYW5k aShUQ0dDb250ZXh0ICpzLCBpbnQgcmEsIGxvbmcgdmFsLCBpbnQgcmMpCit7CisgICAgaWYg KHZhbCA9PSAodWludDhfdCl2YWwpIHsKKyAgICAgICAgdGNnX291dF9mbXRfb3BpKHMsIElO U05fQU5ELCByYSwgdmFsLCByYyk7CisgICAgfSBlbHNlIGlmICh+dmFsID09ICh1aW50OF90 KX52YWwpIHsKKyAgICAgICAgdGNnX291dF9mbXRfb3BpKHMsIElOU05fQklDLCByYSwgfnZh bCwgcmMpOworICAgIH0gZWxzZSB7CisgICAgICAgIGxvbmcgbWFzazAsIG1hc2tmZjsKKwor ICAgICAgICAvKiBDaGVjayBhbmQgc2VlIGlmIHRoZSB2YWx1ZSBtYXRjaGVzIGEgWkFQTk9U IG1hc2suIFRoaXMgaXMgZmFpcmx5CisgICAgICAgICAgIGNvbW1vbi4gIFNpbmNlIHdlIGtu b3cgdGhpcyBpcyBhbiBhbHBoYSBob3N0LCBzcGVlZCB0aGUgY2hlY2sgYnkKKyAgICAgICAg ICAgdXNpbmcgY21wYmdlIHRvIGNvbXBhcmUgOCBieXRlcyBhdCBvbmNlLCBhbmQgaW5jaWRl bnRhbGx5IGFsc28KKyAgICAgICAgICAgcHJvZHVjZSB0aGUgemFwbm90IG1hc2suICAqLwor ICAgICAgICAvKiA/Pz8gVGhpcyBidWlsdGluIHdhcyBpbXBsZW1lbnRlZCBzb21ldGltZSBp biAyMDAyLAorICAgICAgICAgICBwZXJoYXBzIGluIHRoZSBHQ0MgMy4xIHRpbWVmcmFtZS4g ICovCisgICAgICAgIG1hc2swID0gX19idWlsdGluX2FscGhhX2NtcGJnZSgwLCB2YWwpOwor ICAgICAgICBtYXNrZmYgPSBfX2J1aWx0aW5fYWxwaGFfY21wYmdlKHZhbCwgLTEpOworCisg ICAgICAgIC8qIEhlcmUsIG1hc2swIGNvbnRhaW5zIHRoZSBieXRlcyB0aGF0IGFyZSAwLCBt YXNrZmYgY29udGFpbnMKKyAgICAgICAgICAgdGhlIGJ5dGVzIHRoYXQgYXJlIDB4ZmY7IHRo YXQgc2hvdWxkIGNvdmVyIHRoZSBlbnRpcmUgd29yZC4gICovCisgICAgICAgIGlmICgobWFz azAgfCBtYXNrZmYpID09IDB4ZmYpIHsKKyAgICAgICAgICAgIHRjZ19vdXRfZm10X29waShz LCBJTlNOX1pBUE5PVCwgcmEsIG1hc2tmZiwgcmMpOworICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgLyogVmFsIGNvbnRhaW5zIGJ5dGVzIHRoYXQgYXJlIG5laXRoZXIgMCBub3Ig MHhmZiwgd2hpY2gKKyAgICAgICAgICAgICAgIG1lYW5zIHRoYXQgd2UgY2Fubm90IHVzZSB6 YXBub3QuICBMb2FkIHRoZSBjb25zdGFudC4gICovCisgICAgICAgICAgICB0Y2dfb3V0X21v dmkocywgVENHX1RZUEVfSTY0LCBUTVBfUkVHMSwgdmFsKTsKKyAgICAgICAgICAgIHRjZ19v dXRfZm10X29wcihzLCBJTlNOX0FORCwgcmEsIFRNUF9SRUcxLCByYyk7CisgICAgICAgIH0K KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHRjZ19vdXRfZXh0ZW5kKFRDR0NvbnRleHQgKnMs IGludCBzaXplb3AsIGludCByYSwgaW50IHJjKQoreworICAgIHN3aXRjaCAoc2l6ZW9wKSB7 CisgICAgY2FzZSAwOgorICAgICAgICB0Y2dfb3V0X2ZtdF9vcGkocywgSU5TTl9BTkQsIHJh LCAweGZmLCByYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMCB8IDQ6CisgICAgICAg IHRjZ19vdXRfZm10X29wcihzLCBJTlNOX1NFWFRCLCBUQ0dfUkVHXzMxLCByYSwgcmMpOwor ICAgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgICAgIHRjZ19vdXRfZm10X29waShz LCBJTlNOX1pBUE5PVCwgcmEsIDB4MDMsIHJjKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz ZSAxIHwgNDoKKyAgICAgICAgdGNnX291dF9mbXRfb3ByKHMsIElOU05fU0VYVFcsIFRDR19S RUdfMzEsIHJhLCByYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMjoKKyAgICAgICAg dGNnX291dF9mbXRfb3BpKHMsIElOU05fWkFQTk9ULCByYSwgMHgwZiwgcmMpOworICAgICAg ICBicmVhazsKKyAgICBjYXNlIDIgfCA0OgorICAgICAgICB0Y2dfb3V0X2ZtdF9vcHIocywg SU5TTl9BRERMLCBUQ0dfUkVHXzMxLCByYSwgcmMpOworICAgICAgICBicmVhazsKKyAgICBj YXNlIDM6CisgICAgICAgIHRjZ19vdXRfbW92KHMsIHJhLCByYyk7CisgICAgICAgIGJyZWFr OworICAgIGRlZmF1bHQ6CisgICAgICAgIHRjZ19hYm9ydCgpOworICAgIH0KK30KKworc3Rh dGljIHZvaWQgdGNnX291dF9ic3dhcChUQ0dDb250ZXh0ICpzLCBpbnQgc2l6ZW9wLCBpbnQg cmEsIGludCByYykKK3sKKyAgICBjb25zdCBpbnQgdDAgPSBUTVBfUkVHMSwgdDEgPSBUTVBf UkVHMiwgdDIgPSBUTVBfUkVHMzsKKworICAgIHN3aXRjaCAoc2l6ZW9wKSB7CisgICAgY2Fz ZSAxOiAgICAgLyogMTYtYml0IHN3YXAsIHVuc2lnbmVkIHJlc3VsdCAqLworICAgIGNhc2Ug MSB8IDQ6IC8qIDE2LWJpdCBzd2FwLCBzaWduZWQgcmVzdWx0ICovCisgICAgICAgIC8qIGlu cHV0IHZhbHVlID0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHh4eHggeHhB QiAqLworICAgICAgICB0Y2dfb3V0X2ZtdF9vcGkocywgSU5TTl9FWFRXSCwgcmEsIDcsIHQw KTsJLyogLi4uLiAuLkIuICovCisgICAgICAgIHRjZ19vdXRfZm10X29waShzLCBJTlNOX0VY VEJMLCByYSwgMSwgcmMpOwkvKiAuLi4uIC4uLkEgKi8KKyAgICAgICAgdGNnX291dF9mbXRf b3ByKHMsIElOU05fQklTLCByYywgdDAsIHJjKTsJLyogLi4uLiAuLkJBICovCisgICAgICAg IGlmIChzaXplb3AgJiA0KSB7CisgICAgICAgICAgICB0Y2dfb3V0X2ZtdF9vcHIocywgSU5T Tl9TRVhUVywgVENHX1JFR18zMSwgcmMsIHJjKTsKKyAgICAgICAgfQorICAgICAgICBicmVh azsKKworICAgIGNhc2UgMjogICAgIC8qIDMyLWJpdCBzd2FwLCB1bnNpZ25lZCByZXN1bHQg Ki8KKyAgICBjYXNlIDIgfCA0OiAvKiAzMi1iaXQgc3dhcCwgc2lnbmVkIHJlc3VsdCAqLwor ICAgICAgICAvKiBpbnB1dCB2YWx1ZSA9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB4eHh4IEFCQ0QgKi8KKyAgICAgICAgdGNnX291dF9mbXRfb3BpKHMsIElOU05fSU5T TEgsIHJhLCA3LCB0MCk7CS8qIC4uLi4gLkFCQyAqLworICAgICAgICB0Y2dfb3V0X2ZtdF9v cGkocywgSU5TTl9JTlNXTCwgcmEsIDMsIHQxKTsJLyogLi4uQyBELi4uICovCisgICAgICAg IHRjZ19vdXRfZm10X29wcihzLCBJTlNOX0JJUywgdDAsIHQxLCB0MSk7CS8qIC4uLkMgREFC QyAqLworICAgICAgICB0Y2dfb3V0X2ZtdF9vcGkocywgSU5TTl9TUkwsIHQxLCAxNiwgdDAp OwkvKiAuLi4uIC5DREEgKi8KKyAgICAgICAgdGNnX291dF9mbXRfb3BpKHMsIElOU05fWkFQ Tk9ULCB0MSwgMHgwQSwgdDEpOwkvKiAuLi4uIEQuQi4gKi8KKyAgICAgICAgdGNnX291dF9m bXRfb3BpKHMsIElOU05fWkFQTk9ULCB0MSwgMHgwNSwgdDEpOwkvKiAuLi4uIC5DLkEgKi8K KyAgICAgICAgdGNnX291dF9mbXRfb3ByKHMsIChzaXplb3AgJiA0ID8gSU5TTl9BRERMIDog SU5TTl9CSVMpLCB0MCwgdDEsIHJjKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIDM6 ICAgICAvKiA2NC1iaXQgc3dhcCAqLworICAgICAgICAvKiBpbnB1dCB2YWx1ZSA9ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQkNEIEVGR0ggKi8KKyAgICAgICAgdGNn X291dF9mbXRfb3BpKHMsIElOU05fU1JMLCByYSwgMjQsIHQwKTsJLyogLi4uQSBCQ0RFICov CisgICAgICAgIHRjZ19vdXRfZm10X29waShzLCBJTlNOX1NMTCwgcmEsIDI0LCB0MSk7CS8q IERFRkcgSC4uLiAqLworICAgICAgICB0Y2dfb3V0X2ZtdF9vcGkocywgSU5TTl9aQVBOT1Qs IHQwLCAweDExLCB0MCk7CS8qIC4uLkEgLi4uRSAqLworICAgICAgICB0Y2dfb3V0X2ZtdF9v cGkocywgSU5TTl9aQVBOT1QsIHQxLCAweDg4LCB0MSk7CS8qIEQuLi4gSC4uLiAqLworICAg ICAgICB0Y2dfb3V0X2ZtdF9vcHIocywgSU5TTl9CSVMsIHQwLCB0MSwgdDIpOwkvKiBELi5B IEguLkUgKi8KKyAgICAgICAgdGNnX291dF9mbXRfb3BpKHMsIElOU05fU1JMLCByYSwgOCwg dDApOwkvKiAuQUJDIERFRkcgKi8KKyAgICAgICAgdGNnX291dF9mbXRfb3BpKHMsIElOU05f U0xMLCByYSwgOCwgdDEpOwkvKiBCQ0RFIEZHSC4gKi8KKyAgICAgICAgdGNnX291dF9mbXRf b3BpKHMsIElOU05fWkFQTk9ULCB0MCwgMHgyMiwgdDApOwkvKiAuLkIuIC4uRi4gKi8KKyAg ICAgICAgdGNnX291dF9mbXRfb3BpKHMsIElOU05fWkFQTk9ULCB0MSwgMHg0NCwgdDEpOwkv KiAuQy4uIC5HLi4gKi8KKyAgICAgICAgdGNnX291dF9mbXRfb3ByKHMsIElOU05fQklTLCB0 MCwgdDIsIHQyKTsJLyogRC5CQSBILkZFICovCisgICAgICAgIHRjZ19vdXRfZm10X29wcihz LCBJTlNOX0JJUywgdDEsIHQyLCB0Mik7CS8qIERDQkEgSEdGRSAqLworICAgICAgICB0Y2df b3V0X2ZtdF9vcGkocywgSU5TTl9TUkwsIHQyLCAzMiwgdDApOwkvKiAuLi4uIERDQkEgKi8K KyAgICAgICAgdGNnX291dF9mbXRfb3BpKHMsIElOU05fU0xMLCB0MiwgMzIsIHQxKTsJLyog SEdGRSAuLi4uICovCisgICAgICAgIHRjZ19vdXRfZm10X29wcihzLCBJTlNOX0JJUywgdDAs IHQxLCByYyk7CS8qIEhHRkUgRENCQSAqLworICAgICAgICBicmVhazsKKworICAgIGRlZmF1 bHQ6CisgICAgICAgIHRjZ19hYm9ydCgpOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdGNn X291dF9sZF9zeihUQ0dDb250ZXh0ICpzLCBpbnQgc2l6ZW9wLCBpbnQgcmEsIGludCByYiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCBkaXNwKQoreworICAgIHN0YXRp YyBjb25zdCBpbnQgbGRfb3BjWzRdID0geyBJTlNOX0xEQlUsIElOU05fTERXVSwgSU5TTl9M REwsIElOU05fTERRIH07CisKKyAgICB0Y2dfb3V0X21lbV9sb25nKHMsIGxkX29wY1tzaXpl b3AgJiAzXSwgcmEsIHJiLCBkaXNwKTsKKworICAgIHN3aXRjaCAoc2l6ZW9wKSB7CisgICAg Y2FzZSAwIHwgNCB8IDg6CisgICAgY2FzZSAwIHwgNDoKKyAgICBjYXNlIDEgfCA0OgorICAg IGNhc2UgMjoKKyAgICAgICAgdGNnX291dF9leHRlbmQocywgc2l6ZW9wLCByYSwgcmEpOwor ICAgICAgICBicmVhazsKKworICAgIGNhc2UgMDoKKyAgICBjYXNlIDAgfCA4OgorICAgIGNh c2UgMToKKyAgICBjYXNlIDIgfCA0OgorICAgIGNhc2UgMzoKKyAgICAgICAgYnJlYWs7CisK KyAgICBjYXNlIDEgfCA4OgorICAgIGNhc2UgMSB8IDQgfCA4OgorICAgIGNhc2UgMiB8IDg6 CisgICAgY2FzZSAyIHwgNCB8IDg6CisgICAgY2FzZSAzIHwgODoKKyAgICAgICAgdGNnX291 dF9ic3dhcChzLCBzaXplb3AgJiA3LCByYSwgcmEpOworICAgICAgICBicmVhazsKKworICAg IGRlZmF1bHQ6CisgICAgICAgIHRjZ19hYm9ydCgpOworICAgIH0KK30KKworc3RhdGljIHZv aWQgdGNnX291dF9zdF9zeihUQ0dDb250ZXh0ICpzLCBpbnQgc2l6ZW9wLCBpbnQgcmEsIGlu dCByYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCBkaXNwKQoreworICAg IHN0YXRpYyBjb25zdCBpbnQgc3Rfb3BjWzRdID0geyBJTlNOX1NUQiwgSU5TTl9TVFcsIElO U05fU1RMLCBJTlNOX1NUUSB9OworCisgICAgaWYgKChzaXplb3AgJiA4KSAmJiAoc2l6ZW9w ICYgMykgPiAwKSB7CisgICAgICAgIHRjZ19vdXRfYnN3YXAocywgc2l6ZW9wICYgMywgcmEs IFRNUF9SRUcxKTsKKyAgICAgICAgcmEgPSBUTVBfUkVHMTsKKyAgICB9CisKKyAgICB0Y2df b3V0X21lbV9sb25nKHMsIHN0X29wY1tzaXplb3AgJiAzXSwgcmEsIHJiLCBkaXNwKTsKK30K Kworc3RhdGljIHZvaWQgcGF0Y2hfcmVsb2ModWludDhfdCAqeF9wdHIsIGludCB0eXBlLCBp bnQ2NF90IHZhbHVlLCBpbnQ2NF90IGFkZCkKK3sKKyAgICB1aW50MzJfdCAqY29kZV9wdHIg PSAodWludDMyX3QgKil4X3B0cjsKKyAgICB1aW50MzJfdCBpbnNuID0gKmNvZGVfcHRyOwor CisgICAgdmFsdWUgKz0gYWRkOworICAgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgUl9B TFBIQV9CUkFERFI6CisgICAgICAgIHZhbHVlIC09IChsb25nKXhfcHRyICsgNDsKKyAgICAg ICAgaWYgKCh2YWx1ZSAmIDMpIHx8IHZhbHVlIDwgLTB4NDAwMDAwIHx8IHZhbHVlID49IDB4 NDAwMDAwKSB7CisgICAgICAgICAgICB0Y2dfYWJvcnQoKTsKKyAgICAgICAgfQorICAgICAg ICAqY29kZV9wdHIgPSBpbnNuIHwgSU5TTl9ESVNQMjEodmFsdWUgPj4gMik7CisgICAgICAg IGJyZWFrOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgdGNnX2Fib3J0KCk7CisgICAgfQor fQorCitzdGF0aWMgdm9pZCB0Y2dfb3V0X2JyKFRDR0NvbnRleHQgKnMsIGludCBvcGMsIGlu dCByYSwgaW50IGxhYmVsX2luZGV4KQoreworICAgIFRDR0xhYmVsICpsID0gJnMtPmxhYmVs c1tsYWJlbF9pbmRleF07CisgICAgbG9uZyB2YWx1ZTsKKworICAgIGlmIChsLT5oYXNfdmFs dWUpIHsKKyAgICAgICAgdmFsdWUgPSBsLT51LnZhbHVlOworICAgICAgICB2YWx1ZSAtPSAo bG9uZylzLT5jb2RlX3B0ciArIDQ7CisgICAgICAgIGlmICgodmFsdWUgJiAzKSB8fCB2YWx1 ZSA8IC0weDQwMDAwMCB8fCB2YWx1ZSA+PSAweDQwMDAwMCkgeworICAgICAgICAgICAgdGNn X2Fib3J0KCk7CisgICAgICAgIH0KKyAgICAgICAgdmFsdWUgPj49IDI7CisgICAgfSBlbHNl IHsKKyAgICAgICAgdGNnX291dF9yZWxvYyhzLCBzLT5jb2RlX3B0ciwgUl9BTFBIQV9CUkFE RFIsIGxhYmVsX2luZGV4LCAwKTsKKyAgICAgICAgdmFsdWUgPSAwOworICAgIH0KKyAgICB0 Y2dfb3V0X2ZtdF9icihzLCBvcGMsIHJhLCB2YWx1ZSk7Cit9CisKK3N0YXRpYyB2b2lkIHRj Z19vdXRfYnJjb25kKFRDR0NvbnRleHQgKnMsIGludCBjb25kLCBUQ0dBcmcgYXJnMSwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIFRDR0FyZyBhcmcyLCBpbnQgY29uc3RfYXJnMiwg aW50IGxhYmVsX2luZGV4KQoreworICAgIHN0YXRpYyBjb25zdCBpbnQgYnJfb3BjWzEwXSA9 IHsKKyAgICAgICAgW1RDR19DT05EX0VRXSA9IElOU05fQkVRLAorICAgICAgICBbVENHX0NP TkRfTkVdID0gSU5TTl9CTkUsCisgICAgICAgIFtUQ0dfQ09ORF9MVF0gPSBJTlNOX0JMVCwK KyAgICAgICAgW1RDR19DT05EX0dFXSA9IElOU05fQkdFLAorICAgICAgICBbVENHX0NPTkRf TEVdID0gSU5TTl9CTEUsCisgICAgICAgIFtUQ0dfQ09ORF9HVF0gPSBJTlNOX0JHVAorICAg IH07CisKKyAgICBzdGF0aWMgY29uc3QgdWludDY0X3QgY21wX29wY1sxMF0gPSB7CisgICAg ICAgIFtUQ0dfQ09ORF9FUV0gPSBJTlNOX0NNUEVRLAorICAgICAgICBbVENHX0NPTkRfTkVd ID0gSU5TTl9DTVBFUSwKKyAgICAgICAgW1RDR19DT05EX0xUXSA9IElOU05fQ01QTFQsCisg ICAgICAgIFtUQ0dfQ09ORF9HRV0gPSBJTlNOX0NNUExULAorICAgICAgICBbVENHX0NPTkRf TEVdID0gSU5TTl9DTVBMRSwKKyAgICAgICAgW1RDR19DT05EX0dUXSA9IElOU05fQ01QTEUs CisgICAgICAgIFtUQ0dfQ09ORF9MVFVdID0gSU5TTl9DTVBVTFQsCisgICAgICAgIFtUQ0df Q09ORF9HRVVdID0gSU5TTl9DTVBVTFQsCisgICAgICAgIFtUQ0dfQ09ORF9MRVVdID0gSU5T Tl9DTVBVTEUsCisgICAgICAgIFtUQ0dfQ09ORF9HVFVdID0gSU5TTl9DTVBVTEUKKyAgICB9 OworCisgICAgaW50IG9wYyA9IDA7CisKKyAgICBpZiAoY29uc3RfYXJnMikgeworICAgICAg ICBpZiAoYXJnMiA9PSAwKSB7CisgICAgICAgICAgICBvcGMgPSBicl9vcGNbY29uZF07Cisg ICAgICAgIH0gZWxzZSBpZiAoY29uZCA9PSBUQ0dfQ09ORF9FUSB8fCBjb25kID09IFRDR19D T05EX05FKSB7CisgICAgICAgICAgICB0Y2dfb3V0X21lbV9sb25nKHMsIElOU05fTERBLCBU TVBfUkVHMSwgYXJnMSwgLWFyZzIpOworICAgICAgICAgICAgb3BjID0gKGNvbmQgPT0gVENH X0NPTkRfRVEgPyBJTlNOX0JFUSA6IElOU05fQk5FKTsKKyAgICAgICAgfQorICAgIH0KKwor ICAgIGlmIChvcGMgPT0gMCkgeworICAgICAgICBvcGMgPSBjbXBfb3BjW2NvbmRdOworICAg ICAgICBpZiAoY29uc3RfYXJnMikgeworICAgICAgICAgICAgdGNnX291dF9mbXRfb3BpKHMs IG9wYywgYXJnMSwgYXJnMiwgVE1QX1JFRzEpOworICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgdGNnX291dF9mbXRfb3ByKHMsIG9wYywgYXJnMSwgYXJnMiwgVE1QX1JFRzEpOwor ICAgICAgICB9CisgICAgICAgIG9wYyA9IChjb25kICYgMSkgPyBJTlNOX0JFUSA6IElOU05f Qk5FOworICAgICAgICBhcmcxID0gVE1QX1JFRzE7CisgICAgfQorCisgICAgdGNnX291dF9i cihzLCBvcGMsIGFyZzEsIGxhYmVsX2luZGV4KTsKK30KKworc3RhdGljIHZvaWQgdGNnX291 dF9kaXYoVENHQ29udGV4dCAqcywgaW50IHNpemVvcCkKK3sKKyAgICAvKiBOb3RlIHRoYXQg dGhlc2UgZnVuY3Rpb25zIGRvbid0IGhhdmUgbm9ybWFsIEMgY2FsbGluZyBjb252ZW50aW9u cy4gICovCisgICAgdHlwZWRlZiBsb25nIGRpdmZuKGxvbmcsIGxvbmcpOworICAgIGV4dGVy biBkaXZmbiBfX2RpdmwsIF9fZGl2bHUsIF9fcmVtbCwgX19yZW1sdTsKKyAgICBleHRlcm4g ZGl2Zm4gX19kaXZxLCBfX2RpdnF1LCBfX3JlbXEsIF9fcmVtcXU7CisKKyAgICBzdGF0aWMg ZGl2Zm4gKiBjb25zdCBsaWJjX2RpdlsxNl0gPSB7CisgICAgICAgIFsyXSA9IF9fZGl2bHUs CisgICAgICAgIFsyIHwgOF0gPSBfX3JlbWx1LAorICAgICAgICBbMiB8IDRdID0gX19kaXZs LAorICAgICAgICBbMiB8IDQgfCA4XSA9IF9fcmVtbCwKKworICAgICAgICBbM10gPSBfX2Rp dnF1LAorICAgICAgICBbMyB8IDhdID0gX19yZW1xdSwKKyAgICAgICAgWzMgfCA0XSA9IF9f ZGl2cSwKKyAgICAgICAgWzMgfCA0IHwgOF0gPSBfX3JlbXEsCisgICAgfTsKKworICAgIGxv bmcgdmFsOworCisjaWZuZGVmIF9fbGludXhfXworICAgIC8qID8/PyBBIGNvbW1lbnQgaW4g R0NDIHN1Z2dlc3RzIHRoYXQgT1NGLzEgYW5kIFdpbk5UIGJvdGggaGF2ZSBhCisgICAgICAg YnVnIHN1Y2ggdGhhdCBldmVuIDMyLWJpdCBpbnB1dHMgbXVzdCBiZSBleHRlbmRlZCB0byA2 NC1iaXRzLgorICAgICAgIFRoaXMgaXMga25vd24gdG8gd29yayBwcm9wZXJseSBvbiBMaW51 eCwgYXQgbGVhc3QuICAqLworICAgIGlmICgoc2l6ZW9wICYgMykgIT0gMykgeworICAgICAg ICB0Y2dfb3V0X2V4dGVuZChzLCBzaXplb3AsIFRDR19SRUdfMjQsIFRDR19SRUdfMjQpOwor ICAgICAgICB0Y2dfb3V0X2V4dGVuZChzLCBzaXplb3AsIFRDR19SRUdfMjUsIFRDR19SRUdf MjUpOworICAgIH0KKyNlbmRpZgorCisgICAgdmFsID0gKGxvbmcpIGxpYmNfZGl2W3NpemVv cF07CisgICAgaWYgKHZhbCA9PSAwKSB7CisgICAgICAgIHRjZ19hYm9ydCgpOworICAgIH0K KworICAgIHRjZ19vdXRfbW92aShzLCBUQ0dfVFlQRV9JNjQsIFRNUF9SRUcxLCB2YWwpOwor ICAgIHRjZ19vdXRfZm10X2ptcChzLCBJTlNOX0NBTEwsIFRDR19SRUdfMjMsIFRNUF9SRUcx LCB2YWwpOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfU09GVE1NVSkKKworI2luY2x1ZGUg Ii4uLy4uL3NvZnRtbXVfZGVmcy5oIgorCitzdGF0aWMgdm9pZCAqcWVtdV9sZF9oZWxwZXJz WzRdID0geworICAgIF9fbGRiX21tdSwKKyAgICBfX2xkd19tbXUsCisgICAgX19sZGxfbW11 LAorICAgIF9fbGRxX21tdSwKK307CisKK3N0YXRpYyB2b2lkICpxZW11X3N0X2hlbHBlcnNb NF0gPSB7CisgICAgX19zdGJfbW11LAorICAgIF9fc3R3X21tdSwKKyAgICBfX3N0bF9tbXUs CisgICAgX19zdHFfbW11LAorfTsKKworc3RhdGljIHZvaWQgdGNnX291dF90bGJfY21wKFRD R0NvbnRleHQgKnMsIGludCBzaXplb3AsIGludCByMCwgaW50IHIxLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBhZGRyX3JlZywgaW50IGxhYmVsMSwgbG9uZyB0bGJfb2Zm c2V0KQoreworICAgIGxvbmcgdmFsOworCisgICAgLyogTWFzayB0aGUgcGFnZSwgcGx1cyB0 aGUgbG93IGJpdHMgb2YgdGhlIGFjY2VzcywgaW50byBSMC4gIE5vdGUKKyAgICAgICB0aGF0 IHRoZSBsb3cgYml0cyBhcmUgYWRkZWQgaW4gb3JkZXIgdG8gY2F0Y2ggdW5hbGlnbmVkIGFj Y2Vzc2VzLAorICAgICAgIGFzIHRob3NlIGJpdHMgd29uJ3QgYmUgc2V0IGluIHRoZSBUTEIg ZW50cnkuICBGb3IgMzItYml0IHRhcmdldHMsCisgICAgICAgZm9yY2UgdGhlIGhpZ2ggYml0 cyBvZiB0aGUgbWFzayB0byBiZSB6ZXJvLCBhcyB0aGUgaGlnaCBiaXRzIG9mCisgICAgICAg dGhlIGlucHV0IHJlZ2lzdGVyIGFyZSBnYXJiYWdlLiAgKi8KKyAgICB2YWwgPSBUQVJHRVRf UEFHRV9NQVNLIHwgKCgxIDw8IChzaXplb3AgJiAzKSkgLSAxKTsKKyAgICBpZiAoVEFSR0VU X0xPTkdfQklUUyA9PSAzMikgeworICAgICAgICB2YWwgJj0gMHhmZmZmZmZmZnU7CisgICAg fQorICAgIHRjZ19vdXRfYW5kaShzLCBhZGRyX3JlZywgdmFsLCByMCk7CisKKyAgICAvKiBD b21wdXRlIHRoZSBpbmRleCBpbnRvIHRoZSBUTEIgaW50byBSMS4gIEFnYWluLCBub3RlIHRo YXQgdGhlCisgICAgICAgaGlnaCBiaXRzIG9mIGEgMzItYml0IGFkZHJlc3MgbXVzdCBiZSBj bGVhcmVkLiAgKi8KKyAgICB0Y2dfb3V0X2ZtdF9vcGkocywgSU5TTl9TUkwsIGFkZHJfcmVn LAorICAgICAgICAgICAgICAgICAgICBUQVJHRVRfUEFHRV9CSVRTIC0gQ1BVX1RMQl9FTlRS WV9CSVRTLCByMSk7CisKKyAgICB2YWwgPSAoQ1BVX1RMQl9TSVpFIC0gMSkgPDwgQ1BVX1RM Ql9FTlRSWV9CSVRTOworICAgIGlmIChUQVJHRVRfTE9OR19CSVRTID09IDMyKSB7CisgICAg ICAgIHZhbCAmPSAweGZmZmZmZmZmdSA+PiAoVEFSR0VUX1BBR0VfQklUUyAtIENQVV9UTEJf RU5UUllfQklUUyk7CisgICAgfQorICAgIHRjZ19vdXRfYW5kaShzLCByMSwgdmFsLCByMSk7 CisKKyAgICAvKiBMb2FkIHRoZSB3b3JkIGF0IChSMSArIENQVV9FTlYgKyBUTEJfT0ZGU0VU KS4gIE5vdGUgdGhhdCB3ZQorICAgICAgIGFycmFuZ2UgZm9yIGEgMzItYml0IGxvYWQgdG8g YmUgemVyby1leHRlbmRlZC4gICovCisgICAgdGNnX291dF9mbXRfb3ByKHMsIElOU05fQURE USwgcjEsIFRDR19BUkVHMCwgcjEpOworICAgIHRjZ19vdXRfbGRfc3oocywgVEFSR0VUX0xP TkdfQklUUyA9PSAzMiA/IDIgOiAzLAorICAgICAgICAgICAgICAgICAgVE1QX1JFRzIsIHIx LCB0bGJfb2Zmc2V0KTsKKworICAgIC8qIENvbXBhcmUgUjAgd2l0aCB0aGUgdmFsdWUgbG9h ZGVkIGZyb20gdGhlIFRMQi4gICovCisgICAgdGNnX291dF9icmNvbmQocywgVENHX0NPTkRf TkUsIFRNUF9SRUcyLCByMCwgMCwgbGFiZWwxKTsKK30KKyNlbmRpZiAvKiBTT0ZUTU1VICov CisKK3N0YXRpYyB2b2lkIHRjZ19vdXRfcWVtdV9sZChUQ0dDb250ZXh0ICpzLCBjb25zdCBU Q0dBcmcgKmFyZ3MsIGludCBzaXplb3ApCit7CisgICAgaW50IGFkZHJfcmVnLCBkYXRhX3Jl ZywgcjAsIHIxLCBtZW1faW5kZXgsIGJzd2FwOworICAgIGxvbmcgdmFsOworI2lmIGRlZmlu ZWQoQ09ORklHX1NPRlRNTVUpCisgICAgaW50IGxhYmVsMSwgbGFiZWwyOworI2VuZGlmCisK KyAgICBkYXRhX3JlZyA9ICphcmdzKys7CisgICAgYWRkcl9yZWcgPSAqYXJncysrOworICAg IG1lbV9pbmRleCA9ICphcmdzOworCisgICAgcjAgPSBUQ0dfUkVHXzE2OworICAgIHIxID0g VENHX1JFR18xNzsKKworI2lmIGRlZmluZWQoQ09ORklHX1NPRlRNTVUpCisgICAgbGFiZWwx ID0gZ2VuX25ld19sYWJlbCgpOworICAgIGxhYmVsMiA9IGdlbl9uZXdfbGFiZWwoKTsKKwor ICAgIHRjZ19vdXRfdGxiX2NtcChzLCBzaXplb3AsIHIwLCByMSwgYWRkcl9yZWcsIGxhYmVs MSwKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0b2YoQ1BVU3RhdGUsIHRsYl90YWJsZVtt ZW1faW5kZXhdWzBdLmFkZHJfcmVhZCkpOworCisgICAgLyogVExCIEhpdC4gIE5vdGUgdGhh dCBBbHBoYSBzdGF0aWNhbGx5IHByZWRpY3RzIGZvcndhcmQgYnJhbmNoIGFzCisgICAgICAg bm90IHRha2VuLCBzbyBhcnJhbmdlIHRoZSBmYWxsdGhydSBhcyB0aGUgY29tbW9uIGNhc2Uu CisKKyAgICAgICBBRERSX1JFRyBjb250YWlucyB0aGUgZ3Vlc3QgYWRkcmVzcywgYW5kIFIx IGNvbnRhaW5zIHRoZSBwb2ludGVyCisgICAgICAgdG8gVExCX0VOVFJZLkFERFJfUkVBRC4g IFdlIG5lZWQgdG8gbG9hZCBUTEJfRU5UUlkuQURERU5EIGFuZAorICAgICAgIGFkZCBpdCB0 byBBRERSX1JFRyB0byBnZXQgdGhlIGhvc3QgYWRkcmVzcy4gICovCisKKyAgICB0Y2dfb3V0 X2xkKHMsIFRDR19UWVBFX0k2NCwgcjEsIHIxLAorICAgICAgICAgICAgICAgb2Zmc2V0b2Yo Q1BVVExCRW50cnksIGFkZGVuZCkKKyAgICAgICAgICAgICAgIC0gb2Zmc2V0b2YoQ1BVVExC RW50cnksIGFkZHJfcmVhZCkpOworCisgICAgaWYgKFRBUkdFVF9MT05HX0JJVFMgPT0gMzIp IHsKKyAgICAgICAgdGNnX291dF9leHRlbmQocywgMiwgYWRkcl9yZWcsIHIwKTsKKyAgICAg ICAgYWRkcl9yZWcgPSByMDsKKyAgICB9CisKKyAgICB0Y2dfb3V0X2ZtdF9vcHIocywgSU5T Tl9BRERRLCBhZGRyX3JlZywgcjEsIHIwKTsKKyAgICB2YWwgPSAwOworI2Vsc2UKKyAgICBy MCA9IGFkZHJfcmVnOworICAgIHZhbCA9IEdVRVNUX0JBU0U7CisjZW5kaWYKKworI2lmIGRl ZmluZWQoVEFSR0VUX1dPUkRTX0JJR0VORElBTikKKyAgICAvKiBTaWduYWwgYnl0ZSBzd2Fw IG5lY2Vzc2FyeS4gICovCisgICAgYnN3YXAgPSA4OworI2Vsc2UKKyAgICBic3dhcCA9IDA7 CisjZW5kaWYKKworICAgIC8qIFBlcmZvcm0gdGhlIGFjdHVhbCBsb2FkLiAgKi8KKyAgICB0 Y2dfb3V0X2xkX3N6KHMsIHNpemVvcCB8IGJzd2FwLCBkYXRhX3JlZywgcjAsIHZhbCk7CisK KyNpZiBkZWZpbmVkKENPTkZJR19TT0ZUTU1VKQorICAgIHRjZ19vdXRfYnIocywgSU5TTl9C UiwgVENHX1JFR18zMSwgbGFiZWwyKTsKKworICAgIC8qIFRMQiBtaXNzLiAgQ2FsbCB0aGUg aGVscGVyIGZ1bmN0aW9uLiAgKi8KKyAgICB0Y2dfb3V0X2xhYmVsKHMsIGxhYmVsMSwgKGxv bmcpcy0+Y29kZV9wdHIpOworICAgIHRjZ19vdXRfbW92aShzLCBUQ0dfVFlQRV9JMzIsIFRD R19SRUdfMTcsIG1lbV9pbmRleCk7CisKKyAgICB2YWwgPSAobG9uZylxZW11X2xkX2hlbHBl cnNbc2l6ZW9wICYgM107CisgICAgdGNnX291dF9tb3ZpKHMsIFRDR19UWVBFX0k2NCwgVENH X1JFR18yNywgdmFsKTsKKyAgICB0Y2dfb3V0X2ZtdF9qbXAocywgSU5TTl9DQUxMLCBUQ0df UkVHXzI2LCBUQ0dfUkVHXzI3LCB2YWwpOworCisgICAgLyogVGhlIGhlbHBlciByb3V0aW5l cyBoYXZlIG5vIGRlZmluZWQgZGF0YSBleHRlbnNpb24uCisgICAgICAgUHJvcGVybHkgZXh0 ZW5kIHRoZSByZXN1bHQgdG8gd2hhdGV2ZXIgZGF0YSB0eXBlIHdlIG5lZWQuICAqLworICAg IHRjZ19vdXRfZXh0ZW5kKHMsIHNpemVvcCwgVENHX1JFR18wLCBkYXRhX3JlZyk7CisKKyAg ICB0Y2dfb3V0X2xhYmVsKHMsIGxhYmVsMiwgKGxvbmcpcy0+Y29kZV9wdHIpOworI2VuZGlm Cit9CisKK3N0YXRpYyB2b2lkIHRjZ19vdXRfcWVtdV9zdChUQ0dDb250ZXh0ICpzLCBjb25z dCBUQ0dBcmcgKmFyZ3MsIGludCBzaXplb3ApCit7CisgICAgaW50IGFkZHJfcmVnLCBkYXRh X3JlZywgcjAsIHIxLCBtZW1faW5kZXgsIGJzd2FwOworICAgIGxvbmcgdmFsOworI2lmIGRl ZmluZWQoQ09ORklHX1NPRlRNTVUpCisgICAgaW50IGxhYmVsMSwgbGFiZWwyOworI2VuZGlm CisKKyAgICBkYXRhX3JlZyA9ICphcmdzKys7CisgICAgYWRkcl9yZWcgPSAqYXJncysrOwor ICAgIG1lbV9pbmRleCA9ICphcmdzOworCisgICAgcjAgPSBUQ0dfUkVHXzE2OworICAgIHIx ID0gVENHX1JFR18xNzsKKworI2lmIGRlZmluZWQoQ09ORklHX1NPRlRNTVUpCisgICAgbGFi ZWwxID0gZ2VuX25ld19sYWJlbCgpOworICAgIGxhYmVsMiA9IGdlbl9uZXdfbGFiZWwoKTsK KworICAgIHRjZ19vdXRfdGxiX2NtcChzLCBzaXplb3AsIHIwLCByMSwgYWRkcl9yZWcsIGxh YmVsMSwKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0b2YoQ1BVU3RhdGUsIHRsYl90YWJs ZVttZW1faW5kZXhdWzBdLmFkZHJfd3JpdGUpKTsKKworICAgIC8qIFRMQiBIaXQuICBOb3Rl IHRoYXQgQWxwaGEgc3RhdGljYWxseSBwcmVkaWN0cyBmb3J3YXJkIGJyYW5jaCBhcworICAg ICAgIG5vdCB0YWtlbiwgc28gYXJyYW5nZSB0aGUgZmFsbHRocnUgYXMgdGhlIGNvbW1vbiBj YXNlLgorCisgICAgICAgQUREUl9SRUcgY29udGFpbnMgdGhlIGd1ZXN0IGFkZHJlc3MsIGFu ZCBSMSBjb250YWlucyB0aGUgcG9pbnRlcgorICAgICAgIHRvIFRMQl9FTlRSWS5BRERSX1JF QUQuICBXZSBuZWVkIHRvIGxvYWQgVExCX0VOVFJZLkFEREVORCBhbmQKKyAgICAgICBhZGQg aXQgdG8gQUREUl9SRUcgdG8gZ2V0IHRoZSBob3N0IGFkZHJlc3MuICAqLworCisgICAgdGNn X291dF9sZChzLCBUQ0dfVFlQRV9JNjQsIHIxLCByMSwKKyAgICAgICAgICAgICAgIG9mZnNl dG9mKENQVVRMQkVudHJ5LCBhZGRlbmQpCisgICAgICAgICAgICAgICAtIG9mZnNldG9mKENQ VVRMQkVudHJ5LCBhZGRyX3dyaXRlKSk7CisKKyAgICBpZiAoVEFSR0VUX0xPTkdfQklUUyA9 PSAzMikgeworICAgICAgICB0Y2dfb3V0X2V4dGVuZChzLCAyLCBhZGRyX3JlZywgcjApOwor ICAgICAgICBhZGRyX3JlZyA9IHIwOworICAgIH0KKworICAgIHRjZ19vdXRfZm10X29wcihz LCBJTlNOX0FERFEsIGFkZHJfcmVnLCByMSwgcjApOworICAgIHZhbCA9IDA7CisjZWxzZQor ICAgIHIwID0gYWRkcl9yZWc7CisgICAgdmFsID0gR1VFU1RfQkFTRTsKKyNlbmRpZgorCisj aWYgZGVmaW5lZChUQVJHRVRfV09SRFNfQklHRU5ESUFOKQorICAgIC8qIFNpZ25hbCBieXRl IHN3YXAgbmVjZXNzYXJ5LiAgKi8KKyAgICBic3dhcCA9IDg7CisjZWxzZQorICAgIGJzd2Fw ID0gMDsKKyNlbmRpZgorCisgICAgLyogUGVyZm9ybSB0aGUgYWN0dWFsIGxvYWQuICAqLwor ICAgIHRjZ19vdXRfc3Rfc3oocywgc2l6ZW9wIHwgYnN3YXAsIGRhdGFfcmVnLCByMCwgdmFs KTsKKworI2lmIGRlZmluZWQoQ09ORklHX1NPRlRNTVUpCisgICAgdGNnX291dF9icihzLCBJ TlNOX0JSLCBUQ0dfUkVHXzMxLCBsYWJlbDIpOworCisgICAgLyogVExCIG1pc3MuICBDYWxs IHRoZSBoZWxwZXIgZnVuY3Rpb24uICAqLworICAgIHRjZ19vdXRfbGFiZWwocywgbGFiZWwx LCAobG9uZylzLT5jb2RlX3B0cik7CisgICAgdGNnX291dF9tb3YocywgVENHX1JFR18xNywg ZGF0YV9yZWcpOworICAgIHRjZ19vdXRfbW92aShzLCBUQ0dfVFlQRV9JMzIsIFRDR19SRUdf MTgsIG1lbV9pbmRleCk7CisKKyAgICB2YWwgPSAobG9uZylxZW11X3N0X2hlbHBlcnNbc2l6 ZW9wICYgM107CisgICAgdGNnX291dF9tb3ZpKHMsIFRDR19UWVBFX0k2NCwgVENHX1JFR18y NywgdmFsKTsKKyAgICB0Y2dfb3V0X2ZtdF9qbXAocywgSU5TTl9DQUxMLCBUQ0dfUkVHXzI2 LCBUQ0dfUkVHXzI3LCB2YWwpOworCisgICAgdGNnX291dF9sYWJlbChzLCBsYWJlbDIsIChs b25nKXMtPmNvZGVfcHRyKTsKKyNlbmRpZgorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgdGNn X291dF9vcChUQ0dDb250ZXh0ICpzLCBpbnQgb3BjLCBjb25zdCBUQ0dBcmcgKmFyZ3MsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBpbnQgKmNvbnN0X2FyZ3MpCit7 CisgICAgbG9uZyBhcmcwLCBhcmcxLCBhcmcyOworICAgIGludCBjOworCisgICAgYXJnMCA9 IGFyZ3NbMF07CisgICAgYXJnMSA9IGFyZ3NbMV07CisgICAgYXJnMiA9IGFyZ3NbMl07CisK KyAgICBzd2l0Y2ggKG9wYykgeworICAgIGNhc2UgSU5ERVhfb3BfZXhpdF90YjoKKyAgICAg ICAgdGNnX291dF9sZChzLCBUQ0dfVFlQRV9JNjQsIFRNUF9SRUcxLCBUQ0dfUkVHXzMwLCBU Ql9SRVRfT0ZTKTsKKyAgICAgICAgdGNnX291dF9tb3ZpKHMsIFRDR19UWVBFX0k2NCwgVENH X1JFR18wLCBhcmcwKTsKKyAgICAgICAgdGNnX291dF9mbXRfam1wKHMsIElOU05fUkVULCBU Q0dfUkVHXzMxLCBUTVBfUkVHMSwgMCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJ TkRFWF9vcF9nb3RvX3RiOgorICAgICAgICBpZiAocy0+dGJfam1wX29mZnNldCkgeworICAg ICAgICAgICAgLyogRGlyZWN0IGp1bXAgbWV0aG9kLiAgKi8KKyAgICAgICAgICAgIC8qIFJl c2VydmUgNiBpbnNucy4gIEluIGFscGhhX3RiX3NldF9qbXBfdGFyZ2V0LCBpZiB0aGUKKyAg ICAgICAgICAgICAgIGRpc3BsYWNlbWVudCBoYXBwZW5zIHRvIGJlIGluIHJhbmdlIChhbmQg SSBzdXNwZWN0IGl0IHdpbGwKKyAgICAgICAgICAgICAgIGJlIG11Y2ggb2YgdGhlIHRpbWUp IHRoZW4gaW5zdGFsbCBhIGRpcmVjdCBicmFuY2guICBPdGhlcndpc2UKKyAgICAgICAgICAg ICAgIHdlIGNhbiBsb2FkIHRoZSA2NC1iaXQgY29uc3RhbnQgaW50byB0aGUgZmlyc3QgNSBp bnNucyBhbmQgZG8KKyAgICAgICAgICAgICAgIGFuIGluZGlyZWN0IGp1bXAgd2l0aCB0aGUg NnRoLiAgKi8KKyAgICAgICAgICAgIHMtPnRiX2ptcF9vZmZzZXRbYXJnMF0gPSBzLT5jb2Rl X3B0ciAtIHMtPmNvZGVfYnVmOworCisgICAgICAgICAgICAvKiBGaWxsIHdpdGggQlVHQ0hL IHBsdXMgNSBub3BzLCB0byBiZSBzdXJlIGl0J3MgZmlsbGVkIGluLiAgKi8KKyAgICAgICAg ICAgIHRjZ19vdXQzMihzLCBJTlNOX0JVR0NISyk7CisgICAgICAgICAgICB0Y2dfb3V0X2Zt dF9vcHIocywgSU5TTl9CSVMsIFRDR19SRUdfMzEsIFRDR19SRUdfMzEsIFRDR19SRUdfMzEp OworICAgICAgICAgICAgdGNnX291dF9mbXRfb3ByKHMsIElOU05fQklTLCBUQ0dfUkVHXzMx LCBUQ0dfUkVHXzMxLCBUQ0dfUkVHXzMxKTsKKyAgICAgICAgICAgIHRjZ19vdXRfZm10X29w cihzLCBJTlNOX0JJUywgVENHX1JFR18zMSwgVENHX1JFR18zMSwgVENHX1JFR18zMSk7Cisg ICAgICAgICAgICB0Y2dfb3V0X2ZtdF9vcHIocywgSU5TTl9CSVMsIFRDR19SRUdfMzEsIFRD R19SRUdfMzEsIFRDR19SRUdfMzEpOworICAgICAgICAgICAgdGNnX291dF9mbXRfb3ByKHMs IElOU05fQklTLCBUQ0dfUkVHXzMxLCBUQ0dfUkVHXzMxLCBUQ0dfUkVHXzMxKTsKKyAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIEluZGlyZWN0IGp1bXAgbWV0aG9kLiAgKi8K KyAgICAgICAgICAgIHRjZ19hYm9ydCgpOworICAgICAgICB9CisgICAgICAgIHMtPnRiX25l eHRfb2Zmc2V0W2FyZzBdID0gcy0+Y29kZV9wdHIgLSBzLT5jb2RlX2J1ZjsKKyAgICAgICAg YnJlYWs7CisKKyAgICBjYXNlIElOREVYX29wX2NhbGw6CisgICAgICAgIHRjZ19vdXRfZm10 X2ptcChzLCBJTlNOX0NBTEwsIFRDR19SRUdfMjYsIFRDR19SRUdfMjcsIDApOworICAgICAg ICBicmVhazsKKworICAgIGNhc2UgSU5ERVhfb3Bfam1wOgorICAgICAgICB0Y2dfb3V0X2Zt dF9qbXAocywgSU5TTl9KTVAsIFRDR19SRUdfMzEsIGFyZzAsIDApOworICAgICAgICBicmVh azsKKworICAgIGNhc2UgSU5ERVhfb3BfYnI6CisgICAgICAgIHRjZ19vdXRfYnIocywgSU5T Tl9CUiwgVENHX1JFR18zMSwgYXJnMCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJ TkRFWF9vcF9sZDh1X2kzMjoKKyAgICBjYXNlIElOREVYX29wX2xkOHVfaTY0OgorICAgICAg ICBjID0gMDsKKyAgICAgICAgZ290byBkb19sb2FkOworICAgIGNhc2UgSU5ERVhfb3BfbGQ4 c19pMzI6CisgICAgY2FzZSBJTkRFWF9vcF9sZDhzX2k2NDoKKyAgICAgICAgYyA9IDAgfCA0 OworICAgICAgICBnb3RvIGRvX2xvYWQ7CisgICAgY2FzZSBJTkRFWF9vcF9sZDE2dV9pMzI6 CisgICAgY2FzZSBJTkRFWF9vcF9sZDE2dV9pNjQ6CisgICAgICAgIGMgPSAxOworICAgICAg ICBnb3RvIGRvX2xvYWQ7CisgICAgY2FzZSBJTkRFWF9vcF9sZDE2c19pMzI6CisgICAgY2Fz ZSBJTkRFWF9vcF9sZDE2c19pNjQ6CisgICAgICAgIGMgPSAxIHwgNDsKKyAgICAgICAgZ290 byBkb19sb2FkOworICAgIGNhc2UgSU5ERVhfb3BfbGQzMnVfaTY0OgorICAgICAgICBjID0g MjsKKyAgICAgICAgZ290byBkb19sb2FkOworICAgIGNhc2UgSU5ERVhfb3BfbGRfaTMyOgor ICAgIGNhc2UgSU5ERVhfb3BfbGQzMnNfaTY0OgorICAgICAgICBjID0gMiB8IDQ7CisgICAg ICAgIGdvdG8gZG9fbG9hZDsKKyAgICBjYXNlIElOREVYX29wX2xkX2k2NDoKKyAgICAgICAg YyA9IDM7CisgICAgZG9fbG9hZDoKKyAgICAgICAgdGNnX291dF9sZF9zeihzLCBjLCBhcmcw LCBhcmcxLCBhcmcyKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIElOREVYX29wX3N0 OF9pMzI6CisgICAgY2FzZSBJTkRFWF9vcF9zdDhfaTY0OgorICAgICAgICBjID0gMDsKKyAg ICAgICAgZ290byBkb19zdG9yZTsKKyAgICBjYXNlIElOREVYX29wX3N0MTZfaTMyOgorICAg IGNhc2UgSU5ERVhfb3Bfc3QxNl9pNjQ6CisgICAgICAgIGMgPSAxOworICAgICAgICBnb3Rv IGRvX3N0b3JlOworICAgIGNhc2UgSU5ERVhfb3Bfc3RfaTMyOgorICAgIGNhc2UgSU5ERVhf b3Bfc3QzMl9pNjQ6CisgICAgICAgIGMgPSAyOworICAgICAgICBnb3RvIGRvX3N0b3JlOwor ICAgIGNhc2UgSU5ERVhfb3Bfc3RfaTY0OgorICAgICAgICBjID0gMzsKKyAgICBkb19zdG9y ZToKKyAgICAgICAgdGNnX291dF9zdF9zeihzLCBjLCBhcmcwLCBhcmcxLCBhcmcyKTsKKyAg ICAgICAgYnJlYWs7CisKKyAgICBjYXNlIElOREVYX29wX3N1Yl9pMzI6CisgICAgICAgIGlm IChjb25zdF9hcmdzWzJdKSB7CisgICAgICAgICAgICBhcmcyID0gLWFyZ3NbMl07CisgICAg ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBjID0gSU5TTl9TVUJMOworICAgICAgICAgICAg Z290byBkb19hcml0aDsKKyAgICAgICAgfQorICAgICAgICAvKiBGQUxMVEhSVSAqLworCisg ICAgY2FzZSBJTkRFWF9vcF9hZGRfaTMyOgorICAgICAgICAvKiBOb3RlIHRoZXJlIGlzIG5v IGd1YXJhbnRlZSBvZiBhIHNpZ24tZXh0ZW5kZWQgcmVzdWx0LiAgKi8KKyAgICAgICAgaWYg KGNvbnN0X2FyZ3NbMl0pIHsKKyAgICAgICAgICAgIGlmIChjb25zdF9hcmdzWzFdKSB7Cisg ICAgICAgICAgICAgICAgYXJnMSA9IFRDR19SRUdfMzE7CisgICAgICAgICAgICB9CisgICAg ICAgICAgICB0Y2dfb3V0X21lbV9sb25nKHMsIElOU05fTERBLCBhcmcwLCBhcmcxLCAoaW50 MzJfdClhcmcyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGMgPSBJTlNOX0FE REw7CisgICAgICAgICAgICBnb3RvIGRvX2FyaXRoOworICAgICAgICB9CisgICAgICAgIGJy ZWFrOworCisgICAgY2FzZSBJTkRFWF9vcF9zdWJfaTY0OgorICAgICAgICBpZiAoY29uc3Rf YXJnc1syXSkgeworICAgICAgICAgICAgYXJnMiA9IC1hcmdzWzJdOworICAgICAgICB9IGVs c2UgeworICAgICAgICAgICAgYyA9IElOU05fU1VCUTsKKyAgICAgICAgICAgIGdvdG8gZG9f YXJpdGg7CisgICAgICAgIH0KKyAgICAgICAgLyogRkFMTFRIUlUgKi8KKworICAgIGNhc2Ug SU5ERVhfb3BfYWRkX2k2NDoKKyAgICAgICAgaWYgKGNvbnN0X2FyZ3NbMl0pIHsKKyAgICAg ICAgICAgIGlmIChjb25zdF9hcmdzWzFdKSB7CisgICAgICAgICAgICAgICAgYXJnMSA9IFRD R19SRUdfMzE7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB0Y2dfb3V0X21lbV9sb25n KHMsIElOU05fTERBLCBhcmcwLCBhcmcxLCBhcmcyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgIGMgPSBJTlNOX0FERFE7CisgICAgICAgICAgICBnb3RvIGRvX2FyaXRoOwor ICAgICAgICB9CisgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBJTkRFWF9vcF9tdWxfaTMy OgorICAgICAgICBjID0gSU5TTl9NVUxMOworCWdvdG8gZG9fYXJpdGg7CisKKyAgICBjYXNl IElOREVYX29wX211bF9pNjQ6CisgICAgICAgIGMgPSBJTlNOX01VTFE7CisgICAgICAgIGdv dG8gZG9fYXJpdGg7CisKKyAgICBjYXNlIElOREVYX29wX2FuZF9pMzI6CisgICAgY2FzZSBJ TkRFWF9vcF9hbmRfaTY0OgorICAgICAgICBpZiAoY29uc3RfYXJnc1syXSkgeworICAgICAg ICAgICAgaWYgKGNvbnN0X2FyZ3NbMV0pIHsKKyAgICAgICAgICAgICAgICBhcmcxID0gVENH X1JFR18zMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChvcGMgPT0gSU5ERVhf b3BfYW5kX2kzMikgeworICAgICAgICAgICAgICAgIGFyZzIgPSAodWludDMyX3QpYXJnMjsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHRjZ19vdXRfYW5kaShzLCBhcmcxLCBhcmcy LCBhcmcwKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGMgPSBJ TlNOX0FORDsKKyAgICAgICAgZ290byBkb19hcml0aDsKKworICAgIGNhc2UgSU5ERVhfb3Bf b3JfaTMyOgorICAgIGNhc2UgSU5ERVhfb3Bfb3JfaTY0OgorICAgICAgICBjID0gSU5TTl9C SVM7CisgICAgICAgIGdvdG8gZG9fYXJpdGg7CisKKyAgICBjYXNlIElOREVYX29wX3hvcl9p MzI6CisgICAgY2FzZSBJTkRFWF9vcF94b3JfaTY0OgorICAgICAgICBjID0gSU5TTl9YT1I7 CisJZ290byBkb19hcml0aDsKKworICAgIGNhc2UgSU5ERVhfb3Bfc2hsX2kzMjoKKyAgICBj YXNlIElOREVYX29wX3NobF9pNjQ6CisgICAgICAgIGMgPSBJTlNOX1NMTDsKKwlnb3RvIGRv X2FyaXRoOworCisgICAgY2FzZSBJTkRFWF9vcF9zaHJfaTMyOgorICAgICAgICBpZiAoIWNv bnN0X2FyZ3NbMV0pIHsKKyAgICAgICAgICAgIHRjZ19vdXRfZXh0ZW5kKHMsIDIsIGFyZzEs IGFyZzEpOworICAgICAgICB9CisgICAgICAgIC8qIEZBTExUSFJVICovCisgICAgY2FzZSBJ TkRFWF9vcF9zaHJfaTY0OgorICAgICAgICBjID0gSU5TTl9TUkw7CisgICAgICAgIGdvdG8g ZG9fYXJpdGg7CisKKyAgICBjYXNlIElOREVYX29wX3Nhcl9pMzI6CisgICAgICAgIGlmICgh Y29uc3RfYXJnc1sxXSkgeworICAgICAgICAgICAgdGNnX291dF9leHRlbmQocywgMiB8IDQs IGFyZzEsIGFyZzEpOworICAgICAgICB9CisgICAgICAgIC8qIEZBTExUSFJVICovCisgICAg Y2FzZSBJTkRFWF9vcF9zYXJfaTY0OgorICAgICAgICBjID0gSU5TTl9TUkE7CisgICAgICAg IGdvdG8gZG9fYXJpdGg7CisKKyAgICBkb19hcml0aDoKKyAgICAgICAgaWYgKGNvbnN0X2Fy Z3NbMV0pIHsKKyAgICAgICAgICAgIGFyZzEgPSBUQ0dfUkVHXzMxOworICAgICAgICB9Cisg ICAgICAgIGlmIChjb25zdF9hcmdzWzJdKSB7CisgICAgICAgICAgICB0Y2dfb3V0X2ZtdF9v cGkocywgYywgYXJnMSwgYXJnMiwgYXJnMCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg ICAgICB0Y2dfb3V0X2ZtdF9vcHIocywgYywgYXJnMSwgYXJnMiwgYXJnMCk7CisgICAgICAg IH0KKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIElOREVYX29wX25vdF9pMzI6CisgICAg Y2FzZSBJTkRFWF9vcF9ub3RfaTY0OgorICAgICAgICBpZiAoY29uc3RfYXJnc1sxXSkgewor ICAgICAgICAgICAgdGNnX291dF9mbXRfb3BpKHMsIElOU05fT1JOT1QsIFRDR19SRUdfMzEs IGFyZzEsIGFyZzApOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGNnX291dF9m bXRfb3ByKHMsIElOU05fT1JOT1QsIFRDR19SRUdfMzEsIGFyZzEsIGFyZzApOworICAgICAg ICB9CisgICAgICAgIGdvdG8gZG9fYXJpdGg7CisKKyAgICBjYXNlIElOREVYX29wX2JyY29u ZF9pMzI6CisgICAgICAgIC8qIDMyLWJpdCBvcGVyYW5kcyBoYXZlIHVuZGVmaW5lZCBoaWdo IGJpdHMuICBTaWduIGV4dGVuZCBib3RoCisgICAgICAgICAgIGlucHV0IG9wZXJhbmRzIHRv IGNvcnJlY3QgdGhhdC4gIE5vdGUgdGhhdCB0aGlzIGV4dGVuc2lvbgorICAgICAgICAgICB3 b3JrcyBldmVuIGZvciB1bnNpZ25lZCBjb21wYXJpc29ucywgc28gbG9uZyBhcyBib3RoIG9w ZXJhbmRzCisgICAgICAgICAgIGFyZSBzaW1pbGFybHkgZXh0ZW5kZWQuICAqLworICAgICAg ICBpZiAoIWNvbnN0X2FyZ3NbMF0pIHsKKyAgICAgICAgICAgIHRjZ19vdXRfZXh0ZW5kKHMs IDIgfCA0LCBhcmcwLCBhcmcwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoIWNvbnN0X2Fy Z3NbMV0pIHsKKyAgICAgICAgICAgIHRjZ19vdXRfZXh0ZW5kKHMsIDIgfCA0LCBhcmcxLCBh cmcxKTsKKyAgICAgICAgfQorICAgICAgICAvKiBGQUxMVEhSVSAqLworICAgIGNhc2UgSU5E RVhfb3BfYnJjb25kX2k2NDoKKyAgICAgICAgaWYgKGNvbnN0X2FyZ3NbMF0pIHsKKyAgICAg ICAgICAgIGFyZzAgPSBUQ0dfUkVHXzMxOworICAgICAgICB9CisgICAgICAgIHRjZ19vdXRf YnJjb25kKHMsIGFyZzIsIGFyZzAsIGFyZzEsIGNvbnN0X2FyZ3NbMV0sIGFyZ3NbM10pOwor ICAgICAgICBicmVhazsKKworICAgIGNhc2UgSU5ERVhfb3BfZXh0OHNfaTMyOgorICAgIGNh c2UgSU5ERVhfb3BfZXh0OHNfaTY0OgorICAgICAgICBjID0gMCB8IDQ7CisgICAgICAgIGdv dG8gZG9fc2lnbl9leHRlbmQ7CisgICAgY2FzZSBJTkRFWF9vcF9leHQxNnNfaTMyOgorICAg IGNhc2UgSU5ERVhfb3BfZXh0MTZzX2k2NDoKKyAgICAgICAgYyA9IDEgfCA0OworICAgICAg ICBnb3RvIGRvX3NpZ25fZXh0ZW5kOworICAgIGNhc2UgSU5ERVhfb3BfZXh0MzJzX2k2NDoK KyAgICAgICAgYyA9IDIgfCA0OworICAgIGRvX3NpZ25fZXh0ZW5kOgorICAgICAgICBpZiAo Y29uc3RfYXJnc1sxXSkgeworICAgICAgICAgICAgYXJnMSA9IFRDR19SRUdfMzE7CisgICAg ICAgIH0KKyAgICAgICAgdGNnX291dF9leHRlbmQocywgYywgYXJnMSwgYXJnMCk7CisgICAg ICAgIGJyZWFrOworCisgICAgY2FzZSBJTkRFWF9vcF9kaXZfaTMyOgorICAgICAgICBjID0g MiB8IDQ7CisgICAgICAgIGdvdG8gZG9fZGl2OworICAgIGNhc2UgSU5ERVhfb3BfcmVtX2kz MjoKKyAgICAgICAgYyA9IDIgfCA0IHwgODsKKyAgICAgICAgZ290byBkb19kaXY7CisgICAg Y2FzZSBJTkRFWF9vcF9kaXZ1X2kzMjoKKyAgICAgICAgYyA9IDI7CisgICAgICAgIGdvdG8g ZG9fZGl2OworICAgIGNhc2UgSU5ERVhfb3BfcmVtdV9pMzI6CisgICAgICAgIGMgPSAyIHwg ODsKKyAgICAgICAgZ290byBkb19kaXY7CisgICAgY2FzZSBJTkRFWF9vcF9kaXZfaTY0Ogor ICAgICAgICBjID0gMyB8IDQ7CisgICAgICAgIGdvdG8gZG9fZGl2OworICAgIGNhc2UgSU5E RVhfb3BfcmVtX2k2NDoKKyAgICAgICAgYyA9IDMgfCA0IHwgODsKKyAgICAgICAgZ290byBk b19kaXY7CisgICAgY2FzZSBJTkRFWF9vcF9kaXZ1X2k2NDoKKyAgICAgICAgYyA9IDM7Cisg ICAgICAgIGdvdG8gZG9fZGl2OworICAgIGNhc2UgSU5ERVhfb3BfcmVtdV9pNjQ6CisgICAg ICAgIGMgPSAzIHwgODsKKyAgICBkb19kaXY6CisgICAgICAgIHRjZ19vdXRfZGl2KHMsIGMp OworICAgICAgICBicmVhazsKKworICAgIGNhc2UgSU5ERVhfb3BfYnN3YXAxNl9pMzI6Cisg ICAgY2FzZSBJTkRFWF9vcF9ic3dhcDE2X2k2NDoKKyAgICAgICAgYyA9IDE7CisgICAgICAg IGdvdG8gZG9fYnN3YXA7CisgICAgY2FzZSBJTkRFWF9vcF9ic3dhcDMyX2kzMjoKKyAgICBj YXNlIElOREVYX29wX2Jzd2FwMzJfaTY0OgorICAgICAgICBjID0gMjsKKyAgICAgICAgZ290 byBkb19ic3dhcDsKKyAgICBjYXNlIElOREVYX29wX2Jzd2FwNjRfaTY0OgorICAgICAgICBj ID0gMzsKKyAgICBkb19ic3dhcDoKKyAgICAgICAgaWYgKGNvbnN0X2FyZ3NbMV0pIHsKKyAg ICAgICAgICAgIGFyZzEgPSBUQ0dfUkVHXzMxOworICAgICAgICB9CisgICAgICAgIHRjZ19v dXRfYnN3YXAocywgYywgYXJnMSwgYXJnMCk7CisgICAgICAgIGJyZWFrOworCisgICAgY2Fz ZSBJTkRFWF9vcF9xZW11X2xkOHU6CisgICAgICAgIGMgPSAwOworICAgICAgICBnb3RvIGRv X3FlbXVfbG9hZDsKKyAgICBjYXNlIElOREVYX29wX3FlbXVfbGQ4czoKKyAgICAgICAgYyA9 IDAgfCA0OworICAgICAgICBnb3RvIGRvX3FlbXVfbG9hZDsKKyAgICBjYXNlIElOREVYX29w X3FlbXVfbGQxNnU6CisgICAgICAgIGMgPSAxOworICAgICAgICBnb3RvIGRvX3FlbXVfbG9h ZDsKKyAgICBjYXNlIElOREVYX29wX3FlbXVfbGQxNnM6CisgICAgICAgIGMgPSAxIHwgNDsK KyAgICAgICAgZ290byBkb19xZW11X2xvYWQ7CisgICAgY2FzZSBJTkRFWF9vcF9xZW11X2xk MzJ1OgorICAgICAgICBjID0gMjsKKyAgICAgICAgZ290byBkb19xZW11X2xvYWQ7CisgICAg Y2FzZSBJTkRFWF9vcF9xZW11X2xkMzJzOgorICAgICAgICBjID0gMiB8IDQ7CisgICAgICAg IGdvdG8gZG9fcWVtdV9sb2FkOworICAgIGNhc2UgSU5ERVhfb3BfcWVtdV9sZDY0OgorICAg ICAgICBjID0gMzsKKyAgICBkb19xZW11X2xvYWQ6CisgICAgICAgIHRjZ19vdXRfcWVtdV9s ZChzLCBhcmdzLCBjKTsKKyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIElOREVYX29wX3Fl bXVfc3Q4OgorICAgICAgICBjID0gMDsKKyAgICAgICAgZ290byBkb19xZW11X3N0b3JlOwor ICAgIGNhc2UgSU5ERVhfb3BfcWVtdV9zdDE2OgorICAgICAgICBjID0gMTsKKyAgICAgICAg Z290byBkb19xZW11X3N0b3JlOworICAgIGNhc2UgSU5ERVhfb3BfcWVtdV9zdDMyOgorICAg ICAgICBjID0gMjsKKyAgICAgICAgZ290byBkb19xZW11X3N0b3JlOworICAgIGNhc2UgSU5E RVhfb3BfcWVtdV9zdDY0OgorICAgICAgICBjID0gMzsKKyAgICBkb19xZW11X3N0b3JlOgor ICAgICAgICB0Y2dfb3V0X3FlbXVfc3QocywgYXJncywgYyk7CisgICAgICAgIGJyZWFrOwor CisgICAgY2FzZSBJTkRFWF9vcF9tb3ZfaTMyOgorICAgIGNhc2UgSU5ERVhfb3BfbW92X2k2 NDoKKyAgICBjYXNlIElOREVYX29wX21vdmlfaTMyOgorICAgIGNhc2UgSU5ERVhfb3BfbW92 aV9pNjQ6CisgICAgICAgIC8qIFRoZXNlIGZvdXIgYXJlIGhhbmRsZWQgYnkgdGNnLmMgZGly ZWN0bHkuICAqLworICAgIGRlZmF1bHQ6CisgICAgICAgIHRjZ19hYm9ydCgpOworICAgIH0K K30KKworc3RhdGljIGNvbnN0IFRDR1RhcmdldE9wRGVmIGFscGhhX29wX2RlZnNbXSA9IHsK KyAgICB7IElOREVYX29wX2V4aXRfdGIsCQl7IH0gfSwKKyAgICB7IElOREVYX29wX2dvdG9f dGIsCQl7IH0gfSwKKyAgICB7IElOREVYX29wX2NhbGwsCQl7ICJjIiB9IH0sCisgICAgeyBJ TkRFWF9vcF9qbXAsCQl7ICJyIiB9IH0sCisgICAgeyBJTkRFWF9vcF9iciwJCXsgfSB9LAor CisgICAgeyBJTkRFWF9vcF9sZDh1X2kzMiwJeyAiciIsICJyIiB9IH0sCisgICAgeyBJTkRF WF9vcF9sZDhzX2kzMiwJeyAiciIsICJyIiB9IH0sCisgICAgeyBJTkRFWF9vcF9sZDE2dV9p MzIsCXsgInIiLCAiciIgfSB9LAorICAgIHsgSU5ERVhfb3BfbGQxNnNfaTMyLAl7ICJyIiwg InIiIH0gfSwKKyAgICB7IElOREVYX29wX2xkX2kzMiwJCXsgInIiLCAiciIgfSB9LAorICAg IHsgSU5ERVhfb3Bfc3Q4X2kzMiwJCXsgInIiLCAiciIgfSB9LAorICAgIHsgSU5ERVhfb3Bf c3QxNl9pMzIsCXsgInIiLCAiciIgfSB9LAorICAgIHsgSU5ERVhfb3Bfc3RfaTMyLAkJeyAi ciIsICJyIiB9IH0sCisKKyAgICB7IElOREVYX29wX2FkZF9pMzIsCQl7ICJyIiwgInJKIiwg InJpIiB9IH0sCisgICAgeyBJTkRFWF9vcF9tdWxfaTMyLAkJeyAiciIsICJySiIsICJySSIg fSB9LAorICAgIHsgSU5ERVhfb3Bfc3ViX2kzMiwJCXsgInIiLCAickoiLCAicmkiIH0gfSwK KyAgICB7IElOREVYX29wX2FuZF9pMzIsCQl7ICJyIiwgInJKIiwgInJpIiB9IH0sCisgICAg eyBJTkRFWF9vcF9vcl9pMzIsCQl7ICJyIiwgInJKIiwgInJJIiB9IH0sCisgICAgeyBJTkRF WF9vcF94b3JfaTMyLAkJeyAiciIsICJySiIsICJySSIgfSB9LAorICAgIHsgSU5ERVhfb3Bf bm90X2kzMiwJCXsgInIiLCAickkiIH0gfSwKKworICAgIHsgSU5ERVhfb3Bfc2hsX2kzMiwJ CXsgInIiLCAickoiLCAickkiIH0gfSwKKyAgICB7IElOREVYX29wX3Nocl9pMzIsCQl7ICJy IiwgInJKIiwgInJJIiB9IH0sCisgICAgeyBJTkRFWF9vcF9zYXJfaTMyLAkJeyAiciIsICJy SiIsICJySSIgfSB9LAorCisgICAgeyBJTkRFWF9vcF9kaXZfaTMyLAkJeyAiYyIsICJhIiwg ImIiIH0gfSwKKyAgICB7IElOREVYX29wX3JlbV9pMzIsCQl7ICJjIiwgImEiLCAiYiIgfSB9 LAorICAgIHsgSU5ERVhfb3BfZGl2dV9pMzIsCXsgImMiLCAiYSIsICJiIiB9IH0sCisgICAg eyBJTkRFWF9vcF9yZW11X2kzMiwJeyAiYyIsICJhIiwgImIiIH0gfSwKKworICAgIHsgSU5E RVhfb3BfYnJjb25kX2kzMiwJeyAickoiLCAickkiIH0gfSwKKworICAgIHsgSU5ERVhfb3Bf bGQ4dV9pNjQsCXsgInIiLCAiciIgfSB9LAorICAgIHsgSU5ERVhfb3BfbGQ4c19pNjQsCXsg InIiLCAiciIgfSB9LAorICAgIHsgSU5ERVhfb3BfbGQxNnVfaTY0LAl7ICJyIiwgInIiIH0g fSwKKyAgICB7IElOREVYX29wX2xkMTZzX2k2NCwJeyAiciIsICJyIiB9IH0sCisgICAgeyBJ TkRFWF9vcF9sZDMydV9pNjQsCXsgInIiLCAiciIgfSB9LAorICAgIHsgSU5ERVhfb3BfbGQz MnNfaTY0LAl7ICJyIiwgInIiIH0gfSwKKyAgICB7IElOREVYX29wX2xkX2k2NCwJCXsgInIi LCAiciIgfSB9LAorICAgIHsgSU5ERVhfb3Bfc3Q4X2k2NCwJCXsgInIiLCAiciIgfSB9LAor ICAgIHsgSU5ERVhfb3Bfc3QxNl9pNjQsCXsgInIiLCAiciIgfSB9LAorICAgIHsgSU5ERVhf b3Bfc3QzMl9pNjQsCXsgInIiLCAiciIgfSB9LAorICAgIHsgSU5ERVhfb3Bfc3RfaTY0LAkJ eyAiciIsICJyIiB9IH0sCisKKyAgICB7IElOREVYX29wX2FkZF9pNjQsCQl7ICJyIiwgInJK IiwgInJpIiB9IH0sCisgICAgeyBJTkRFWF9vcF9tdWxfaTY0LAkJeyAiciIsICJySiIsICJy SSIgfSB9LAorICAgIHsgSU5ERVhfb3Bfc3ViX2k2NCwJCXsgInIiLCAickoiLCAicmkiIH0g fSwKKyAgICB7IElOREVYX29wX2FuZF9pNjQsCQl7ICJyIiwgInJKIiwgInJpIiB9IH0sCisg ICAgeyBJTkRFWF9vcF9vcl9pNjQsCQl7ICJyIiwgInJKIiwgInJJIiB9IH0sCisgICAgeyBJ TkRFWF9vcF94b3JfaTY0LAkJeyAiciIsICJySiIsICJySSIgfSB9LAorICAgIHsgSU5ERVhf b3Bfbm90X2k2NCwJCXsgInIiLCAickkiIH0gfSwKKworICAgIHsgSU5ERVhfb3Bfc2hsX2k2 NCwJCXsgInIiLCAickoiLCAickkiIH0gfSwKKyAgICB7IElOREVYX29wX3Nocl9pNjQsCQl7 ICJyIiwgInJKIiwgInJJIiB9IH0sCisgICAgeyBJTkRFWF9vcF9zYXJfaTY0LAkJeyAiciIs ICJySiIsICJySSIgfSB9LAorCisgICAgeyBJTkRFWF9vcF9kaXZfaTY0LAkJeyAiYyIsICJh IiwgImIiIH0gfSwKKyAgICB7IElOREVYX29wX3JlbV9pNjQsCQl7ICJjIiwgImEiLCAiYiIg fSB9LAorICAgIHsgSU5ERVhfb3BfZGl2dV9pNjQsCXsgImMiLCAiYSIsICJiIiB9IH0sCisg ICAgeyBJTkRFWF9vcF9yZW11X2k2NCwJeyAiYyIsICJhIiwgImIiIH0gfSwKKworICAgIHsg SU5ERVhfb3BfYnJjb25kX2k2NCwJeyAickoiLCAickkiIH0gfSwKKworICAgIHsgSU5ERVhf b3BfZXh0OHNfaTMyLAl7ICJyIiwgInJKIiB9IH0sCisgICAgeyBJTkRFWF9vcF9leHQxNnNf aTMyLAl7ICJyIiwgInJKIiB9IH0sCisgICAgeyBJTkRFWF9vcF9leHQ4c19pNjQsCXsgInIi LCAickoiIH0gfSwKKyAgICB7IElOREVYX29wX2V4dDE2c19pNjQsCXsgInIiLCAickoiIH0g fSwKKyAgICB7IElOREVYX29wX2V4dDMyc19pNjQsCXsgInIiLCAickoiIH0gfSwKKworICAg IHsgSU5ERVhfb3BfYnN3YXAxNl9pMzIsCXsgInIiLCAickoiIH0gfSwKKyAgICB7IElOREVY X29wX2Jzd2FwMzJfaTMyLAl7ICJyIiwgInJKIiB9IH0sCisgICAgeyBJTkRFWF9vcF9ic3dh cDE2X2k2NCwJeyAiciIsICJySiIgfSB9LAorICAgIHsgSU5ERVhfb3BfYnN3YXAzMl9pNjQs CXsgInIiLCAickoiIH0gfSwKKyAgICB7IElOREVYX29wX2Jzd2FwNjRfaTY0LAl7ICJyIiwg InJKIiB9IH0sCisKKyAgICB7IElOREVYX29wX3FlbXVfbGQ4dSwJeyAiciIsICJMIiB9IH0s CisgICAgeyBJTkRFWF9vcF9xZW11X2xkOHMsCXsgInIiLCAiTCIgfSB9LAorICAgIHsgSU5E RVhfb3BfcWVtdV9sZDE2dSwJeyAiciIsICJMIiB9IH0sCisgICAgeyBJTkRFWF9vcF9xZW11 X2xkMTZzLAl7ICJyIiwgIkwiIH0gfSwKKyAgICB7IElOREVYX29wX3FlbXVfbGQzMnUsCXsg InIiLCAiTCIgfSB9LAorICAgIHsgSU5ERVhfb3BfcWVtdV9sZDMycywJeyAiciIsICJMIiB9 IH0sCisgICAgeyBJTkRFWF9vcF9xZW11X2xkNjQsCXsgInIiLCAiTCIgfSB9LAorCisgICAg eyBJTkRFWF9vcF9xZW11X3N0OCwJeyAiTCIsICJMIiB9IH0sCisgICAgeyBJTkRFWF9vcF9x ZW11X3N0MTYsCXsgIkwiLCAiTCIgfSB9LAorICAgIHsgSU5ERVhfb3BfcWVtdV9zdDMyLAl7 ICJMIiwgIkwiIH0gfSwKKyAgICB7IElOREVYX29wX3FlbXVfc3Q2NCwJeyAiTCIsICJMIiB9 IH0sCisgICAgeyAtMSB9LAorfTsKKworCisvKgorICogR2VuZXJhdGUgZ2xvYmFsIFFFTVUg cHJvbG9ndWUgYW5kIGVwaWxvZ3VlIGNvZGUKKyAqLwordm9pZCB0Y2dfdGFyZ2V0X3FlbXVf cHJvbG9ndWUoVENHQ29udGV4dCAqcykKK3sKKyAgICBzdGF0aWMgY29uc3QgaW50IHNhdmVf cmVnc1tdID0geworICAgICAgICBUQ0dfUkVHXzI2LAorICAgICAgICBUQ0dfUkVHXzksCisg ICAgICAgIFRDR19SRUdfMTAsCisgICAgICAgIFRDR19SRUdfMTEsCisgICAgICAgIFRDR19S RUdfMTIsCisgICAgICAgIFRDR19SRUdfMTMsCisgICAgICAgIFRDR19SRUdfMTQsCisgICAg fTsKKworICAgIGxvbmcgaSwgZnJhbWVfc2l6ZSwgc2F2ZV9vZnM7CisgICAgdWludDhfdCAq cmV0X2xvYywgKmVudF9sb2M7CisKKyAgICAvKiBUaGUgc2hhcGUgb2YgdGhlIHN0YWNrIGZy YW1lIGlzOgorICAgICAgIGlucHV0IHNwCisgICAgICAgICBbIFJlZ2lzdGVyIHNhdmUgYXJl YSBdCisgICAgICAgICBbIFRCIHJldHVybiBhZGRyZXNzIF0KKyAgICAgICAgIFsgVENHX1NU QVRJQ19DQUxMX0FSR1NfU0laRSBdCisgICAgICAgc3AKKyAgICAqLworCisgICAgc2F2ZV9v ZnMgPSBUQ0dfU1RBVElDX0NBTExfQVJHU19TSVpFICsgODsKKyAgICBmcmFtZV9zaXplID0g c2F2ZV9vZnMgKyBBUlJBWV9TSVpFKHNhdmVfcmVncykgKiA4OworICAgIGZyYW1lX3NpemUg Kz0gVENHX1RBUkdFVF9TVEFDS19BTElHTiAtIDE7CisgICAgZnJhbWVfc2l6ZSAmPSAtVENH X1RBUkdFVF9TVEFDS19BTElHTjsKKworICAgIC8qIFRCIFByb2xvZ3VlLiAgKi8KKyAgICBl bnRfbG9jID0gcy0+Y29kZV9wdHI7CisKKyAgICAvKiBBbGxvY2F0ZSB0aGUgc3RhY2sgZnJh bWUuICAqLworICAgIHRjZ19vdXRfZm10X21lbShzLCBJTlNOX0xEQSwgVENHX1JFR18zMCwg VENHX1JFR18zMCwgLWZyYW1lX3NpemUpOworCisgICAgLyogU2F2ZSBhbGwgY2FsbGVlIHNh dmVkIHJlZ2lzdGVycy4gICovCisgICAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2F2 ZV9yZWdzKTsgaSsrKSB7CisgICAgICAgIHRjZ19vdXRfZm10X21lbShzLCBJTlNOX1NUUSwg c2F2ZV9yZWdzW2ldLCBUQ0dfUkVHXzMwLCBzYXZlX29mcyArIGkqOCk7CisgICAgfQorCisg ICAgLyogPz8/IFN0b3JlIHRoZSByZXR1cm4gYWRkcmVzcyBvZiB0aGUgVEIuICBJZGVhbGx5 IHRoaXMgd291bGQgYmUKKyAgICAgICBkb25lIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIFRC LCBzdG9yaW5nICQyNiBvciBzb21ldGhpbmcuICBCdXQKKyAgICAgICB3ZSBkb24ndCBhY3R1 YWxseSBoYXZlIGNvbnRyb2wgb2YgdGhlIGJlZ2lubmluZyBvZiB0aGUgVEIuICBTbworICAg ICAgIHdlIGNvbXB1dGUgdGhpcyB2aWEgYXJpdGhtZXRpYyBiYXNlZCBvZmYgJDI3LCB3aGlj aCBob2xkcyB0aGUKKyAgICAgICBzdGFydCBhZGRyZXNzIG9mIHRoaXMgcHJvbG9ndWUuICAq LworICAgIHJldF9sb2MgPSBzLT5jb2RlX3B0cjsKKyAgICB0Y2dfb3V0X2ZtdF9tZW0ocywg SU5TTl9MREEsIFRNUF9SRUcxLCBUQ0dfUkVHXzI3LCAwKTsKKyAgICB0Y2dfb3V0X2ZtdF9t ZW0ocywgSU5TTl9TVFEsIFRNUF9SRUcxLCBUQ0dfUkVHXzMwLCBUQl9SRVRfT0ZTKTsKKwor ICAgIC8qIEludm9rZSB0aGUgVEIuICAqLworICAgIHRjZ19vdXRfZm10X2ptcChzLCBJTlNO X0NBTEwsIFRDR19SRUdfMzEsIFRDR19SRUdfMTYsIDApOworCisgICAgLyogRmlsbCBpbiB0 aGUgb2Zmc2V0IGZvciB0aGUgVEIgcmV0dXJuIGFkZHJlc3MsIGFzIGRlc2NyaWJlZCBhYm92 ZS4gICovCisgICAgaSA9IHMtPmNvZGVfcHRyIC0gZW50X2xvYzsKKyAgICBpZiAoaSAhPSAo aW50MTZfdClpKSB7CisgICAgICAgIHRjZ19hYm9ydCgpOworICAgIH0KKyAgICAqKGludDE2 X3QgKilyZXRfbG9jID0gaTsKKworICAgIC8qIFRCIGVwaWxvZ3VlLiAqLworCisgICAgLyog UmVzdG9yZSBhbGwgY2FsbGVlIHNhdmVkIHJlZ2lzdGVycy4gICovCisgICAgZm9yIChpID0g MDsgaSA8IEFSUkFZX1NJWkUoc2F2ZV9yZWdzKTsgaSsrKSB7CisgICAgICAgIHRjZ19vdXRf Zm10X21lbShzLCBJTlNOX0xEUSwgc2F2ZV9yZWdzW2ldLCBUQ0dfUkVHXzMwLCBzYXZlX29m cyArIGkqOCk7CisgICAgfQorCisgICAgLyogRGVhbGxvY2F0ZSB0aGUgc3RhY2sgZnJhbWUu ICAqLworICAgIHRjZ19vdXRfZm10X21lbShzLCBJTlNOX0xEQSwgVENHX1JFR18zMCwgVENH X1JFR18zMCwgZnJhbWVfc2l6ZSk7CisKKyAgICB0Y2dfb3V0X2ZtdF9qbXAocywgSU5TTl9S RVQsIFRDR19SRUdfMzEsIFRDR19SRUdfMjYsIDApOworfQorCisKK3ZvaWQgdGNnX3Rhcmdl dF9pbml0KFRDR0NvbnRleHQgKnMpCit7CisgICAgLyogZmFpbCBzYWZlICovCisgICAgaWYg KCgxIDw8IENQVV9UTEJfRU5UUllfQklUUykgIT0gc2l6ZW9mKENQVVRMQkVudHJ5KSkKKyAg ICAgICAgdGNnX2Fib3J0KCk7CisKKyAgICB0Y2dfcmVnc2V0X3NldDMyKHRjZ190YXJnZXRf YXZhaWxhYmxlX3JlZ3NbVENHX1RZUEVfSTMyXSwgMCwgMHhmZmZmZmZmZik7CisgICAgdGNn X3JlZ3NldF9zZXQzMih0Y2dfdGFyZ2V0X2F2YWlsYWJsZV9yZWdzW1RDR19UWVBFX0k2NF0s IDAsIDB4ZmZmZmZmZmYpOworCisgICAgdGNnX3JlZ3NldF9zZXQzMih0Y2dfdGFyZ2V0X2Nh bGxfY2xvYmJlcl9yZWdzLCAwLCAweGZmZmZmZmZmKTsKKyAgICB0Y2dfcmVnc2V0X3Jlc2V0 X3JlZyh0Y2dfdGFyZ2V0X2NhbGxfY2xvYmJlcl9yZWdzLCBUQ0dfUkVHXzkpOworICAgIHRj Z19yZWdzZXRfcmVzZXRfcmVnKHRjZ190YXJnZXRfY2FsbF9jbG9iYmVyX3JlZ3MsIFRDR19S RUdfMTApOworICAgIHRjZ19yZWdzZXRfcmVzZXRfcmVnKHRjZ190YXJnZXRfY2FsbF9jbG9i YmVyX3JlZ3MsIFRDR19SRUdfMTEpOworICAgIHRjZ19yZWdzZXRfcmVzZXRfcmVnKHRjZ190 YXJnZXRfY2FsbF9jbG9iYmVyX3JlZ3MsIFRDR19SRUdfMTIpOworICAgIHRjZ19yZWdzZXRf cmVzZXRfcmVnKHRjZ190YXJnZXRfY2FsbF9jbG9iYmVyX3JlZ3MsIFRDR19SRUdfMTMpOwor ICAgIHRjZ19yZWdzZXRfcmVzZXRfcmVnKHRjZ190YXJnZXRfY2FsbF9jbG9iYmVyX3JlZ3Ms IFRDR19SRUdfMTQpOworICAgIHRjZ19yZWdzZXRfcmVzZXRfcmVnKHRjZ190YXJnZXRfY2Fs bF9jbG9iYmVyX3JlZ3MsIFRDR19SRUdfMTUpOworICAgIHRjZ19yZWdzZXRfcmVzZXRfcmVn KHRjZ190YXJnZXRfY2FsbF9jbG9iYmVyX3JlZ3MsIFRDR19SRUdfMzApOworCisgICAgdGNn X3JlZ3NldF9jbGVhcihzLT5yZXNlcnZlZF9yZWdzKTsKKyAgICB0Y2dfcmVnc2V0X3NldF9y ZWcocy0+cmVzZXJ2ZWRfcmVncywgVENHX1JFR18zMCk7CisgICAgdGNnX3JlZ3NldF9zZXRf cmVnKHMtPnJlc2VydmVkX3JlZ3MsIFRDR19SRUdfMzEpOworICAgIHRjZ19yZWdzZXRfc2V0 X3JlZyhzLT5yZXNlcnZlZF9yZWdzLCBUTVBfUkVHMSk7CisgICAgdGNnX3JlZ3NldF9zZXRf cmVnKHMtPnJlc2VydmVkX3JlZ3MsIFRNUF9SRUcyKTsKKyAgICB0Y2dfcmVnc2V0X3NldF9y ZWcocy0+cmVzZXJ2ZWRfcmVncywgVE1QX1JFRzMpOworCisgICAgdGNnX2FkZF90YXJnZXRf YWRkX29wX2RlZnMoYWxwaGFfb3BfZGVmcyk7Cit9CisKKy8qIENhbGxlZCBmcm9tIGV4ZWMt YWxsLmgsIHRiX3NldF9qbXBfdGFyZ2V0LiAgKi8KK3ZvaWQgYWxwaGFfdGJfc2V0X2ptcF90 YXJnZXQodW5zaWduZWQgbG9uZyBqbXBfYWRkciwgdW5zaWduZWQgbG9uZyBhZGRyKTsKK3Zv aWQgYWxwaGFfdGJfc2V0X2ptcF90YXJnZXQodW5zaWduZWQgbG9uZyBqbXBfYWRkciwgdW5z aWduZWQgbG9uZyBhZGRyKQoreworICAgIFRDR0NvbnRleHQgczsKKyAgICBsb25nIGRpc3A7 CisKKyAgICBzLmNvZGVfcHRyID0gcy5jb2RlX2J1ZiA9ICh1aW50OF90ICopam1wX2FkZHI7 CisKKyAgICBkaXNwID0gam1wX2FkZHIgKyA0IC0gYWRkcjsKKyAgICBpZiAoZGlzcCA8IC0w eDQwMDAwMCB8fCBkaXNwID49IDB4NDAwMDAwKSB7CisgICAgICAgIHRjZ19vdXRfbW92aSgm cywgVENHX1RZUEVfSTY0LCBUTVBfUkVHMSwgYWRkcik7CisgICAgICAgIHRjZ19vdXRfZm10 X2ptcCgmcywgSU5TTl9KTVAsIFRDR19SRUdfMzEsIFRNUF9SRUcxLCBhZGRyKTsKKyAgICB9 IGVsc2UgeworICAgICAgICB0Y2dfb3V0X2ZtdF9icigmcywgSU5TTl9CUiwgVENHX1JFR18z MSwgZGlzcCk7CisgICAgfQorCisgICAgZmx1c2hfaWNhY2hlX3JhbmdlKDAsIC0xKTsKK30K ZGlmZiAtLWdpdCBhL3RjZy9hbHBoYS90Y2ctdGFyZ2V0LmggYi90Y2cvYWxwaGEvdGNnLXRh cmdldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3OGZmNmEKLS0t IC9kZXYvbnVsbAorKysgYi90Y2cvYWxwaGEvdGNnLXRhcmdldC5oCkBAIC0wLDAgKzEsODkg QEAKKy8qCisgKiBUaW55IENvZGUgR2VuZXJhdG9yIGZvciBRRU1VCisgKgorICogQ29weXJp Z2h0IChjKSAyMDA4IEZhYnJpY2UgQmVsbGFyZAorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVy ZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBh IGNvcHkKKyAqIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlv biBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsCisgKiBpbiB0aGUgU29mdHdhcmUg d2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUg cmlnaHRzCisgKiB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3Ry aWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisgKiBjb3BpZXMgb2YgdGhlIFNvZnR3 YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKyAq IGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlz c2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vi c3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBF WFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRI RSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxM CisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFO WSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFO IEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwK KyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1IgT1RIRVIgREVBTElOR1MgSU4KKyAqIFRIRSBTT0ZUV0FSRS4KKyAqLworI2RlZmlu ZSBUQ0dfVEFSR0VUX0FMUEhBIDEKKworI2RlZmluZSBUQ0dfVEFSR0VUX1JFR19CSVRTIDY0 CisKKyNkZWZpbmUgVENHX1RBUkdFVF9OQl9SRUdTIDMyCisKK2VudW0geworICAgIFRDR19S RUdfMCA9IDAsIFRDR19SRUdfMSwgVENHX1JFR18yLCBUQ0dfUkVHXzMsCisgICAgVENHX1JF R180LCBUQ0dfUkVHXzUsIFRDR19SRUdfNiwgVENHX1JFR183LAorICAgIFRDR19SRUdfOCwg VENHX1JFR185LCBUQ0dfUkVHXzEwLCBUQ0dfUkVHXzExLAorICAgIFRDR19SRUdfMTIsIFRD R19SRUdfMTMsIFRDR19SRUdfMTQsIFRDR19SRUdfMTUsCisgICAgVENHX1JFR18xNiwgVENH X1JFR18xNywgVENHX1JFR18xOCwgVENHX1JFR18xOSwKKyAgICBUQ0dfUkVHXzIwLCBUQ0df UkVHXzIxLCBUQ0dfUkVHXzIyLCBUQ0dfUkVHXzIzLAorICAgIFRDR19SRUdfMjQsIFRDR19S RUdfMjUsIFRDR19SRUdfMjYsIFRDR19SRUdfMjcsCisgICAgVENHX1JFR18yOCwgVENHX1JF R18yOSwgVENHX1JFR18zMCwgVENHX1JFR18zMQorfTsKKworI2RlZmluZSBUQ0dfQ1RfQ09O U1RfVTggICAweDEwMAorI2RlZmluZSBUQ0dfQ1RfQ09OU1RfWkVSTyAweDIwMAorCisvKiBV c2VkIGZvciBmdW5jdGlvbiBjYWxsIGdlbmVyYXRpb24uICAqLworI2RlZmluZSBUQ0dfUkVH X0NBTExfU1RBQ0sgVENHX1JFR18zMAorI2RlZmluZSBUQ0dfVEFSR0VUX1NUQUNLX0FMSUdO IDE2CisjZGVmaW5lIFRDR19UQVJHRVRfQ0FMTF9TVEFDS19PRkZTRVQgMAorCisvKiBXZSBo YXZlIHNpZ25lZCBleHRlbnNpb24gaW5zdHJ1Y3Rpb25zLiAgKi8KKyNkZWZpbmUgVENHX1RB UkdFVF9IQVNfZXh0OHNfaTMyCisjZGVmaW5lIFRDR19UQVJHRVRfSEFTX2V4dDE2c19pMzIK KyNkZWZpbmUgVENHX1RBUkdFVF9IQVNfZXh0OHNfaTY0CisjZGVmaW5lIFRDR19UQVJHRVRf SEFTX2V4dDE2c19pNjQKKyNkZWZpbmUgVENHX1RBUkdFVF9IQVNfZXh0MzJzX2k2NAorCisv KiBXZSBoYXZlIHNpbmdsZS1vdXRwdXQgZGl2aXNpb24gcm91dGluZXMuICAqLworI2RlZmlu ZSBUQ0dfVEFSR0VUX0hBU19kaXZfaTMyCisjZGVmaW5lIFRDR19UQVJHRVRfSEFTX2Rpdl9p NjQKKworLyogV2UgaGF2ZSBvcHRpbWl6ZWQgYnN3YXAgcm91dGluZXMuICAqLworI2RlZmlu ZSBUQ0dfVEFSR0VUX0hBU19ic3dhcDE2X2kzMgorI2RlZmluZSBUQ0dfVEFSR0VUX0hBU19i c3dhcDMyX2kzMgorI2RlZmluZSBUQ0dfVEFSR0VUX0hBU19ic3dhcDE2X2k2NAorI2RlZmlu ZSBUQ0dfVEFSR0VUX0hBU19ic3dhcDMyX2k2NAorI2RlZmluZSBUQ0dfVEFSR0VUX0hBU19i c3dhcDY0X2k2NAorCisvKiBXZSBoYXZlIE5PVCB2aWEgT1JOT1QuICAqLworI2RlZmluZSBU Q0dfVEFSR0VUX0hBU19ub3RfaTMyCisjZGVmaW5lIFRDR19UQVJHRVRfSEFTX25vdF9pNjQK KworI2RlZmluZSBUQ0dfVEFSR0VUX0hBU19HVUVTVF9CQVNFCisKKy8qIE5vdGU6IG11c3Qg YmUgc3luY2VkIHdpdGggZHluZ2VuLWV4ZWMuaCAqLworI2RlZmluZSBUQ0dfQVJFRzAgVENH X1JFR18xNQorI2RlZmluZSBUQ0dfQVJFRzEgVENHX1JFR185CisjZGVmaW5lIFRDR19BUkVH MiBUQ0dfUkVHXzEwCisjZGVmaW5lIFRDR19BUkVHMyBUQ0dfUkVHXzExCisjZGVmaW5lIFRD R19BUkVHNCBUQ0dfUkVHXzEyCisjZGVmaW5lIFRDR19BUkVHNSBUQ0dfUkVHXzEzCisjZGVm aW5lIFRDR19BUkVHNiBUQ0dfUkVHXzE0CisKKyNkZWZpbmUgVE1QX1JFRzEgVENHX1JFR18y OAorI2RlZmluZSBUTVBfUkVHMiBUQ0dfUkVHXzI5CisjZGVmaW5lIFRNUF9SRUczIFRDR19S RUdfMjMKKworc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX2ljYWNoZV9yYW5nZSh1bnNpZ25l ZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIHN0b3ApCit7CisgICAgX19hc21fXyBfX3Zv bGF0aWxlX18gKCJjYWxsX3BhbCAweDg2Iik7Cit9Cg== --------------020701090303080100080506--