From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-16.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 86E35C433DB for ; Mon, 8 Feb 2021 06:18:35 +0000 (UTC) Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 9C9BE64E56 for ; Mon, 8 Feb 2021 06:18:34 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 9C9BE64E56 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=quicinc.com Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Received: from localhost ([::1]:39816 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1l8zsX-0003FE-JN for qemu-devel@archiver.kernel.org; Mon, 08 Feb 2021 01:18:33 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:56178) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1l8zOW-0008JQ-DB for qemu-devel@nongnu.org; Mon, 08 Feb 2021 00:47:32 -0500 Received: from alexa-out-sd-02.qualcomm.com ([199.106.114.39]:35756) by eggs.gnu.org with esmtps (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1l8zOL-0006RS-4e for qemu-devel@nongnu.org; Mon, 08 Feb 2021 00:47:32 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1612763241; x=1644299241; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=h/8Nsgl1J341eDi/toPbDsCLXmL8fjRPGDqvH2OF1jg=; b=qdLgWC37uMCEgKDK4uIcQOSBCzMgPf3mE8nvwSEA4Z/Ro0EydQnEYzaj ss1ukuBBLhkBzOUo0ksAp5Tnp6+EA5ye44DZ9QdyU9ZiI9YtpCz/2jaT6 XFSKJ81GDgnAdp0HdFoYq93SRGKND8jskfYa515CtEfqMq69GcyGqCAnQ w=; Received: from unknown (HELO ironmsg04-sd.qualcomm.com) ([10.53.140.144]) by alexa-out-sd-02.qualcomm.com with ESMTP; 07 Feb 2021 21:46:31 -0800 X-QCInternal: smtphost Received: from vu-tsimpson-aus.qualcomm.com (HELO vu-tsimpson1-aus.qualcomm.com) ([10.222.150.1]) by ironmsg04-sd.qualcomm.com with ESMTP; 07 Feb 2021 21:46:31 -0800 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id DF98F4148; Sun, 7 Feb 2021 23:46:30 -0600 (CST) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [PATCH v8 29/35] Hexagon (target/hexagon) translation Date: Sun, 7 Feb 2021 23:46:19 -0600 Message-Id: <1612763186-18161-30-git-send-email-tsimpson@quicinc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1612763186-18161-1-git-send-email-tsimpson@quicinc.com> References: <1612763186-18161-1-git-send-email-tsimpson@quicinc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Received-SPF: pass client-ip=199.106.114.39; envelope-from=tsimpson@qualcomm.com; helo=alexa-out-sd-02.qualcomm.com X-Spam_score_int: -40 X-Spam_score: -4.1 X-Spam_bar: ---- X-Spam_report: (-4.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, HEADER_FROM_DIFFERENT_DOMAINS=0.248, RCVD_IN_DNSWL_MED=-2.3, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: ale@rev.ng, bcain@quicinc.com, philmd@redhat.com, richard.henderson@linaro.org, laurent@vivier.eu, tsimpson@quicinc.com, alex.bennee@linaro.org Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" UmVhZCB0aGUgaW5zdHJ1Y3Rpb24gbWVtb3J5CkNyZWF0ZSBhIHBhY2tldCBkYXRhIHN0cnVjdHVy ZQpHZW5lcmF0ZSBUQ0cgY29kZSBmb3IgdGhlIHN0YXJ0IG9mIHRoZSBwYWNrZXQKSW52b2tlIHRo ZSBnZW5lcmF0ZSBmdW5jdGlvbiBmb3IgZWFjaCBpbnN0cnVjdGlvbgpHZW5lcmF0ZSBUQ0cgY29k ZSBmb3IgdGhlIGVuZCBvZiB0aGUgcGFja2V0CgpTaWduZWQtb2ZmLWJ5OiBUYXlsb3IgU2ltcHNv biA8dHNpbXBzb25AcXVpY2luYy5jb20+Ci0tLQogdGFyZ2V0L2hleGFnb24vdHJhbnNsYXRlLmgg fCAgOTMgKysrKysrCiB0YXJnZXQvaGV4YWdvbi90cmFuc2xhdGUuYyB8IDc0OCArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgODQx IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0YXJnZXQvaGV4YWdvbi90cmFuc2xh dGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHRhcmdldC9oZXhhZ29uL3RyYW5zbGF0ZS5jCgpkaWZm IC0tZ2l0IGEvdGFyZ2V0L2hleGFnb24vdHJhbnNsYXRlLmggYi90YXJnZXQvaGV4YWdvbi90cmFu c2xhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzhmN2ZiCi0tLSAv ZGV2L251bGwKKysrIGIvdGFyZ2V0L2hleGFnb24vdHJhbnNsYXRlLmgKQEAgLTAsMCArMSw5MyBA QAorLyoKKyAqICBDb3B5cmlnaHQoYykgMjAxOS0yMDIxIFF1YWxjb21tIElubm92YXRpb24gQ2Vu dGVyLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl CisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZuZGVmIEhFWEFHT05fVFJBTlNMQVRFX0gKKyNk ZWZpbmUgSEVYQUdPTl9UUkFOU0xBVEVfSAorCisjaW5jbHVkZSAicWVtdS9iaXRtYXAuaCIKKyNp bmNsdWRlICJjcHUuaCIKKyNpbmNsdWRlICJleGVjL3RyYW5zbGF0b3IuaCIKKyNpbmNsdWRlICJ0 Y2cvdGNnLW9wLmgiCisjaW5jbHVkZSAiaW50ZXJuYWwuaCIKKwordHlwZWRlZiBzdHJ1Y3QgRGlz YXNDb250ZXh0IHsKKyAgICBEaXNhc0NvbnRleHRCYXNlIGJhc2U7CisgICAgdWludDMyX3QgbWVt X2lkeDsKKyAgICB1aW50MzJfdCBudW1fcGFja2V0czsKKyAgICB1aW50MzJfdCBudW1faW5zbnM7 CisgICAgaW50IHJlZ19sb2dbUkVHX1dSSVRFU19NQVhdOworICAgIGludCByZWdfbG9nX2lkeDsK KyAgICBERUNMQVJFX0JJVE1BUChyZWdzX3dyaXR0ZW4sIFRPVEFMX1BFUl9USFJFQURfUkVHUyk7 CisgICAgaW50IHByZWdfbG9nW1BSRURfV1JJVEVTX01BWF07CisgICAgaW50IHByZWdfbG9nX2lk eDsKKyAgICB1aW50OF90IHN0b3JlX3dpZHRoW1NUT1JFU19NQVhdOworICAgIHVpbnQ4X3QgczFf c3RvcmVfcHJvY2Vzc2VkOworfSBEaXNhc0NvbnRleHQ7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBj dHhfbG9nX3JlZ193cml0ZShEaXNhc0NvbnRleHQgKmN0eCwgaW50IHJudW0pCit7CisjaWYgSEVY X0RFQlVHCisgICAgaWYgKHRlc3RfYml0KHJudW0sIGN0eC0+cmVnc193cml0dGVuKSkgeworICAg ICAgICBIRVhfREVCVUdfTE9HKCJXQVJOSU5HOiBNdWx0aXBsZSB3cml0ZXMgdG8gciVkXG4iLCBy bnVtKTsKKyAgICB9CisjZW5kaWYKKyAgICBjdHgtPnJlZ19sb2dbY3R4LT5yZWdfbG9nX2lkeF0g PSBybnVtOworICAgIGN0eC0+cmVnX2xvZ19pZHgrKzsKKyAgICBzZXRfYml0KHJudW0sIGN0eC0+ cmVnc193cml0dGVuKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGN0eF9sb2dfcmVnX3dyaXRl X3BhaXIoRGlzYXNDb250ZXh0ICpjdHgsIGludCBybnVtKQoreworICAgIGN0eF9sb2dfcmVnX3dy aXRlKGN0eCwgcm51bSk7CisgICAgY3R4X2xvZ19yZWdfd3JpdGUoY3R4LCBybnVtICsgMSk7Cit9 CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjdHhfbG9nX3ByZWRfd3JpdGUoRGlzYXNDb250ZXh0ICpj dHgsIGludCBwbnVtKQoreworICAgIGN0eC0+cHJlZ19sb2dbY3R4LT5wcmVnX2xvZ19pZHhdID0g cG51bTsKKyAgICBjdHgtPnByZWdfbG9nX2lkeCsrOworfQorCitzdGF0aWMgaW5saW5lIGJvb2wg aXNfcHJlbG9hZGVkKERpc2FzQ29udGV4dCAqY3R4LCBpbnQgbnVtKQoreworICAgIHJldHVybiB0 ZXN0X2JpdChudW0sIGN0eC0+cmVnc193cml0dGVuKTsKK30KKworZXh0ZXJuIFRDR3YgaGV4X2dw cltUT1RBTF9QRVJfVEhSRUFEX1JFR1NdOworZXh0ZXJuIFRDR3YgaGV4X3ByZWRbTlVNX1BSRUdT XTsKK2V4dGVybiBUQ0d2IGhleF9uZXh0X1BDOworZXh0ZXJuIFRDR3YgaGV4X3RoaXNfUEM7Citl eHRlcm4gVENHdiBoZXhfc2xvdF9jYW5jZWxsZWQ7CitleHRlcm4gVENHdiBoZXhfYnJhbmNoX3Rh a2VuOworZXh0ZXJuIFRDR3YgaGV4X25ld192YWx1ZVtUT1RBTF9QRVJfVEhSRUFEX1JFR1NdOwor ZXh0ZXJuIFRDR3YgaGV4X3JlZ193cml0dGVuW1RPVEFMX1BFUl9USFJFQURfUkVHU107CitleHRl cm4gVENHdiBoZXhfbmV3X3ByZWRfdmFsdWVbTlVNX1BSRUdTXTsKK2V4dGVybiBUQ0d2IGhleF9w cmVkX3dyaXR0ZW47CitleHRlcm4gVENHdiBoZXhfc3RvcmVfYWRkcltTVE9SRVNfTUFYXTsKK2V4 dGVybiBUQ0d2IGhleF9zdG9yZV93aWR0aFtTVE9SRVNfTUFYXTsKK2V4dGVybiBUQ0d2IGhleF9z dG9yZV92YWwzMltTVE9SRVNfTUFYXTsKK2V4dGVybiBUQ0d2X2k2NCBoZXhfc3RvcmVfdmFsNjRb U1RPUkVTX01BWF07CitleHRlcm4gVENHdiBoZXhfZGN6ZXJvX2FkZHI7CitleHRlcm4gVENHdiBo ZXhfbGxzY19hZGRyOworZXh0ZXJuIFRDR3YgaGV4X2xsc2NfdmFsOworZXh0ZXJuIFRDR3ZfaTY0 IGhleF9sbHNjX3ZhbF9pNjQ7CisKK3ZvaWQgZ2VuX2V4Y2VwdGlvbihpbnQgZXhjcCk7Cit2b2lk IGdlbl9leGNlcHRpb25fZGVidWcodm9pZCk7CisKK3ZvaWQgcHJvY2Vzc19zdG9yZShEaXNhc0Nv bnRleHQgKmN0eCwgUGFja2V0ICpwa3QsIGludCBzbG90X251bSk7CisjZW5kaWYKZGlmZiAtLWdp dCBhL3RhcmdldC9oZXhhZ29uL3RyYW5zbGF0ZS5jIGIvdGFyZ2V0L2hleGFnb24vdHJhbnNsYXRl LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVhYWQ1ZgotLS0gL2Rldi9u dWxsCisrKyBiL3RhcmdldC9oZXhhZ29uL3RyYW5zbGF0ZS5jCkBAIC0wLDAgKzEsNzQ4IEBACisv KgorICogIENvcHlyaWdodChjKSAyMDE5LTIwMjEgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIs IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9u IDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq ICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+LgorICovCisKKyNkZWZpbmUgUUVNVV9HRU5FUkFURQorI2luY2x1ZGUgInFl bXUvb3NkZXAuaCIKKyNpbmNsdWRlICJjcHUuaCIKKyNpbmNsdWRlICJ0Y2cvdGNnLW9wLmgiCisj aW5jbHVkZSAiZXhlYy9jcHVfbGRzdC5oIgorI2luY2x1ZGUgImV4ZWMvbG9nLmgiCisjaW5jbHVk ZSAiaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJhdHRyaWJzLmgiCisjaW5jbHVkZSAiaW5zbi5oIgor I2luY2x1ZGUgImRlY29kZS5oIgorI2luY2x1ZGUgInRyYW5zbGF0ZS5oIgorI2luY2x1ZGUgInBy aW50aW5zbi5oIgorCitUQ0d2IGhleF9ncHJbVE9UQUxfUEVSX1RIUkVBRF9SRUdTXTsKK1RDR3Yg aGV4X3ByZWRbTlVNX1BSRUdTXTsKK1RDR3YgaGV4X25leHRfUEM7CitUQ0d2IGhleF90aGlzX1BD OworVENHdiBoZXhfc2xvdF9jYW5jZWxsZWQ7CitUQ0d2IGhleF9icmFuY2hfdGFrZW47CitUQ0d2 IGhleF9uZXdfdmFsdWVbVE9UQUxfUEVSX1RIUkVBRF9SRUdTXTsKKyNpZiBIRVhfREVCVUcKK1RD R3YgaGV4X3JlZ193cml0dGVuW1RPVEFMX1BFUl9USFJFQURfUkVHU107CisjZW5kaWYKK1RDR3Yg aGV4X25ld19wcmVkX3ZhbHVlW05VTV9QUkVHU107CitUQ0d2IGhleF9wcmVkX3dyaXR0ZW47CitU Q0d2IGhleF9zdG9yZV9hZGRyW1NUT1JFU19NQVhdOworVENHdiBoZXhfc3RvcmVfd2lkdGhbU1RP UkVTX01BWF07CitUQ0d2IGhleF9zdG9yZV92YWwzMltTVE9SRVNfTUFYXTsKK1RDR3ZfaTY0IGhl eF9zdG9yZV92YWw2NFtTVE9SRVNfTUFYXTsKK1RDR3YgaGV4X3BrdF9oYXNfc3RvcmVfczE7CitU Q0d2IGhleF9kY3plcm9fYWRkcjsKK1RDR3YgaGV4X2xsc2NfYWRkcjsKK1RDR3YgaGV4X2xsc2Nf dmFsOworVENHdl9pNjQgaGV4X2xsc2NfdmFsX2k2NDsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBj b25zdCBoZXhhZ29uX3ByZWRuYW1lc1tdID0geworICAicDAiLCAicDEiLCAicDIiLCAicDMiCit9 OworCit2b2lkIGdlbl9leGNlcHRpb24oaW50IGV4Y3ApCit7CisgICAgVENHdl9pMzIgaGVscGVy X3RtcCA9IHRjZ19jb25zdF9pMzIoZXhjcCk7CisgICAgZ2VuX2hlbHBlcl9yYWlzZV9leGNlcHRp b24oY3B1X2VudiwgaGVscGVyX3RtcCk7CisgICAgdGNnX3RlbXBfZnJlZV9pMzIoaGVscGVyX3Rt cCk7Cit9CisKK3ZvaWQgZ2VuX2V4Y2VwdGlvbl9kZWJ1Zyh2b2lkKQoreworICAgIGdlbl9leGNl cHRpb24oRVhDUF9ERUJVRyk7Cit9CisKKyNpZiBIRVhfREVCVUcKKyNkZWZpbmUgUEFDS0VUX0JV RkZFUl9MRU4gICAgICAgICAgICAgIDEwMjgKK3N0YXRpYyB2b2lkIHByaW50X3BrdChQYWNrZXQg KnBrdCkKK3sKKyAgICBHU3RyaW5nICpidWYgPSBnX3N0cmluZ19zaXplZF9uZXcoUEFDS0VUX0JV RkZFUl9MRU4pOworICAgIHNucHJpbnRfYV9wa3RfZGVidWcoYnVmLCBwa3QpOworICAgIEhFWF9E RUJVR19MT0coIiVzIiwgYnVmLT5zdHIpOworICAgIGdfc3RyaW5nX2ZyZWUoYnVmLCB0cnVlKTsK K30KKyNkZWZpbmUgSEVYX0RFQlVHX1BSSU5UX1BLVChwa3QpICBwcmludF9wa3QocGt0KQorI2Vs c2UKKyNkZWZpbmUgSEVYX0RFQlVHX1BSSU5UX1BLVChwa3QpICAvKiBub3RoaW5nICovCisjZW5k aWYKKworc3RhdGljIGludCByZWFkX3BhY2tldF93b3JkcyhDUFVIZXhhZ29uU3RhdGUgKmVudiwg RGlzYXNDb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90 IHdvcmRzW10pCit7CisgICAgYm9vbCBmb3VuZF9lbmQgPSBmYWxzZTsKKyAgICBpbnQgbndvcmRz LCBtYXhfd29yZHM7CisKKyAgICBtZW1zZXQod29yZHMsIDAsIFBBQ0tFVF9XT1JEU19NQVggKiBz aXplb2YodWludDMyX3QpKTsKKyAgICBmb3IgKG53b3JkcyA9IDA7ICFmb3VuZF9lbmQgJiYgbndv cmRzIDwgUEFDS0VUX1dPUkRTX01BWDsgbndvcmRzKyspIHsKKyAgICAgICAgd29yZHNbbndvcmRz XSA9IGNwdV9sZGxfY29kZShlbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0 eC0+YmFzZS5wY19uZXh0ICsgbndvcmRzICogc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIGZv dW5kX2VuZCA9IGlzX3BhY2tldF9lbmQod29yZHNbbndvcmRzXSk7CisgICAgfQorICAgIGlmICgh Zm91bmRfZW5kKSB7CisgICAgICAgIC8qIFJlYWQgdG9vIG1hbnkgd29yZHMgd2l0aG91dCBmaW5k aW5nIHRoZSBlbmQgKi8KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogQ2hlY2sg Zm9yIHBhZ2UgYm91bmRhcnkgY3Jvc3NpbmcgKi8KKyAgICBtYXhfd29yZHMgPSAtKGN0eC0+YmFz ZS5wY19uZXh0IHwgVEFSR0VUX1BBR0VfTUFTSykgLyBzaXplb2YodWludDMyX3QpOworICAgIGlm IChud29yZHMgPiBtYXhfd29yZHMpIHsKKyAgICAgICAgLyogV2UgY2FuIG9ubHkgY3Jvc3MgYSBw YWdlIGJvdW5kYXJ5IGF0IHRoZSBiZWdpbm5pbmcgb2YgYSBUQiAqLworICAgICAgICBnX2Fzc2Vy dChjdHgtPmJhc2UubnVtX2luc25zID09IDEpOworICAgIH0KKworICAgIEhFWF9ERUJVR19MT0co ImRlY29kZV9wYWNrZXQ6IHBjID0gMHgleFxuIiwgY3R4LT5iYXNlLnBjX25leHQpOworICAgIEhF WF9ERUJVR19MT0coIiAgICB3b3JkcyA9IHsgIik7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBu d29yZHM7IGkrKykgeworICAgICAgICBIRVhfREVCVUdfTE9HKCIweCV4LCAiLCB3b3Jkc1tpXSk7 CisgICAgfQorICAgIEhFWF9ERUJVR19MT0coIn1cbiIpOworCisgICAgcmV0dXJuIG53b3JkczsK K30KKworc3RhdGljIGJvb2wgY2hlY2tfZm9yX2F0dHJpYihQYWNrZXQgKnBrdCwgaW50IGF0dHJp YikKK3sKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHBrdC0+bnVtX2luc25zOyBpKyspIHsKKyAg ICAgICAgaWYgKEdFVF9BVFRSSUIocGt0LT5pbnNuW2ldLm9wY29kZSwgYXR0cmliKSkgeworICAg ICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGZhbHNl OworfQorCitzdGF0aWMgYm9vbCBuZWVkX3BjKFBhY2tldCAqcGt0KQoreworICAgIHJldHVybiBj aGVja19mb3JfYXR0cmliKHBrdCwgQV9JTVBMSUNJVF9SRUFEU19QQyk7Cit9CisKK3N0YXRpYyBi b29sIG5lZWRfc2xvdF9jYW5jZWxsZWQoUGFja2V0ICpwa3QpCit7CisgICAgcmV0dXJuIGNoZWNr X2Zvcl9hdHRyaWIocGt0LCBBX0NPTkRFWEVDKTsKK30KKworc3RhdGljIGJvb2wgbmVlZF9wcmVk X3dyaXR0ZW4oUGFja2V0ICpwa3QpCit7CisgICAgcmV0dXJuIGNoZWNrX2Zvcl9hdHRyaWIocGt0 LCBBX1dSSVRFU19QUkVEX1JFRyk7Cit9CisKK3N0YXRpYyB2b2lkIGdlbl9zdGFydF9wYWNrZXQo RGlzYXNDb250ZXh0ICpjdHgsIFBhY2tldCAqcGt0KQoreworICAgIHRhcmdldF91bG9uZyBuZXh0 X1BDID0gY3R4LT5iYXNlLnBjX25leHQgKyBwa3QtPmVuY29kX3BrdF9zaXplX2luX2J5dGVzOwor ICAgIGludCBpOworCisgICAgLyogQ2xlYXIgb3V0IHRoZSBkaXNhc3NlbWJseSBjb250ZXh0ICov CisgICAgY3R4LT5yZWdfbG9nX2lkeCA9IDA7CisgICAgYml0bWFwX3plcm8oY3R4LT5yZWdzX3dy aXR0ZW4sIFRPVEFMX1BFUl9USFJFQURfUkVHUyk7CisgICAgY3R4LT5wcmVnX2xvZ19pZHggPSAw OworICAgIGZvciAoaSA9IDA7IGkgPCBTVE9SRVNfTUFYOyBpKyspIHsKKyAgICAgICAgY3R4LT5z dG9yZV93aWR0aFtpXSA9IDA7CisgICAgfQorICAgIHRjZ19nZW5fbW92aV90bChoZXhfcGt0X2hh c19zdG9yZV9zMSwgcGt0LT5wa3RfaGFzX3N0b3JlX3MxKTsKKyAgICBjdHgtPnMxX3N0b3JlX3By b2Nlc3NlZCA9IDA7CisKKyNpZiBIRVhfREVCVUcKKyAgICAvKiBIYW5keSBwbGFjZSB0byBzZXQg YSBicmVha3BvaW50IGJlZm9yZSB0aGUgcGFja2V0IGV4ZWN1dGVzICovCisgICAgZ2VuX2hlbHBl cl9kZWJ1Z19zdGFydF9wYWNrZXQoY3B1X2Vudik7CisgICAgdGNnX2dlbl9tb3ZpX3RsKGhleF90 aGlzX1BDLCBjdHgtPmJhc2UucGNfbmV4dCk7CisjZW5kaWYKKworICAgIC8qIEluaXRpYWxpemUg dGhlIHJ1bnRpbWUgc3RhdGUgZm9yIHBhY2tldCBzZW1hbnRpY3MgKi8KKyAgICBpZiAobmVlZF9w Yyhwa3QpKSB7CisgICAgICAgIHRjZ19nZW5fbW92aV90bChoZXhfZ3ByW0hFWF9SRUdfUENdLCBj dHgtPmJhc2UucGNfbmV4dCk7CisgICAgfQorICAgIGlmIChuZWVkX3Nsb3RfY2FuY2VsbGVkKHBr dCkpIHsKKyAgICAgICAgdGNnX2dlbl9tb3ZpX3RsKGhleF9zbG90X2NhbmNlbGxlZCwgMCk7Cisg ICAgfQorICAgIGlmIChwa3QtPnBrdF9oYXNfY29mKSB7CisgICAgICAgIHRjZ19nZW5fbW92aV90 bChoZXhfYnJhbmNoX3Rha2VuLCAwKTsKKyAgICAgICAgdGNnX2dlbl9tb3ZpX3RsKGhleF9uZXh0 X1BDLCBuZXh0X1BDKTsKKyAgICB9CisgICAgaWYgKG5lZWRfcHJlZF93cml0dGVuKHBrdCkpIHsK KyAgICAgICAgdGNnX2dlbl9tb3ZpX3RsKGhleF9wcmVkX3dyaXR0ZW4sIDApOworICAgIH0KK30K KworLyoKKyAqIFRoZSBMT0dfKl9XUklURSBtYWNyb3MgbWFyayBtb3N0IG9mIHRoZSB3cml0ZXMg aW4gYSBwYWNrZXQKKyAqIEhvd2V2ZXIsIHRoZXJlIGFyZSBzb21lIGltcGxpY2l0IHdyaXRlcyBt YXJrZWQgYXMgYXR0cmlidXRlcworICogb2YgdGhlIGFwcGxpY2FibGUgaW5zdHJ1Y3Rpb25zLgor ICovCitzdGF0aWMgdm9pZCBtYXJrX2ltcGxpY2l0X3JlZ193cml0ZShEaXNhc0NvbnRleHQgKmN0 eCwgSW5zbiAqaW5zbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBh dHRyaWIsIGludCBybnVtKQoreworICAgIGlmIChHRVRfQVRUUklCKGluc24tPm9wY29kZSwgYXR0 cmliKSkgeworICAgICAgICBpbnQgaXNfcHJlZGljYXRlZCA9IEdFVF9BVFRSSUIoaW5zbi0+b3Bj b2RlLCBBX0NPTkRFWEVDKTsKKyAgICAgICAgaWYgKGlzX3ByZWRpY2F0ZWQgJiYgIWlzX3ByZWxv YWRlZChjdHgsIHJudW0pKSB7CisgICAgICAgICAgICB0Y2dfZ2VuX21vdl90bChoZXhfbmV3X3Zh bHVlW3JudW1dLCBoZXhfZ3ByW3JudW1dKTsKKyAgICAgICAgfQorCisgICAgICAgIGN0eF9sb2df cmVnX3dyaXRlKGN0eCwgcm51bSk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBtYXJrX2ltcGxp Y2l0X3ByZWRfd3JpdGUoRGlzYXNDb250ZXh0ICpjdHgsIEluc24gKmluc24sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGF0dHJpYiwgaW50IHBudW0pCit7CisgICAg aWYgKEdFVF9BVFRSSUIoaW5zbi0+b3Bjb2RlLCBhdHRyaWIpKSB7CisgICAgICAgIGN0eF9sb2df cHJlZF93cml0ZShjdHgsIHBudW0pOworICAgIH0KK30KKworc3RhdGljIHZvaWQgbWFya19pbXBs aWNpdF93cml0ZXMoRGlzYXNDb250ZXh0ICpjdHgsIEluc24gKmluc24pCit7CisgICAgbWFya19p bXBsaWNpdF9yZWdfd3JpdGUoY3R4LCBpbnNuLCBBX0lNUExJQ0lUX1dSSVRFU19GUCwgIEhFWF9S RUdfRlApOworICAgIG1hcmtfaW1wbGljaXRfcmVnX3dyaXRlKGN0eCwgaW5zbiwgQV9JTVBMSUNJ VF9XUklURVNfU1AsICBIRVhfUkVHX1NQKTsKKyAgICBtYXJrX2ltcGxpY2l0X3JlZ193cml0ZShj dHgsIGluc24sIEFfSU1QTElDSVRfV1JJVEVTX0xSLCAgSEVYX1JFR19MUik7CisgICAgbWFya19p bXBsaWNpdF9yZWdfd3JpdGUoY3R4LCBpbnNuLCBBX0lNUExJQ0lUX1dSSVRFU19MQzAsIEhFWF9S RUdfTEMwKTsKKyAgICBtYXJrX2ltcGxpY2l0X3JlZ193cml0ZShjdHgsIGluc24sIEFfSU1QTElD SVRfV1JJVEVTX1NBMCwgSEVYX1JFR19TQTApOworICAgIG1hcmtfaW1wbGljaXRfcmVnX3dyaXRl KGN0eCwgaW5zbiwgQV9JTVBMSUNJVF9XUklURVNfTEMxLCBIRVhfUkVHX0xDMSk7CisgICAgbWFy a19pbXBsaWNpdF9yZWdfd3JpdGUoY3R4LCBpbnNuLCBBX0lNUExJQ0lUX1dSSVRFU19TQTEsIEhF WF9SRUdfU0ExKTsKKworICAgIG1hcmtfaW1wbGljaXRfcHJlZF93cml0ZShjdHgsIGluc24sIEFf SU1QTElDSVRfV1JJVEVTX1AwLCAwKTsKKyAgICBtYXJrX2ltcGxpY2l0X3ByZWRfd3JpdGUoY3R4 LCBpbnNuLCBBX0lNUExJQ0lUX1dSSVRFU19QMSwgMSk7CisgICAgbWFya19pbXBsaWNpdF9wcmVk X3dyaXRlKGN0eCwgaW5zbiwgQV9JTVBMSUNJVF9XUklURVNfUDIsIDIpOworICAgIG1hcmtfaW1w bGljaXRfcHJlZF93cml0ZShjdHgsIGluc24sIEFfSU1QTElDSVRfV1JJVEVTX1AzLCAzKTsKK30K Kworc3RhdGljIHZvaWQgZ2VuX2luc24oQ1BVSGV4YWdvblN0YXRlICplbnYsIERpc2FzQ29udGV4 dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgSW5zbiAqaW5zbiwgUGFja2V0ICpwa3QpCit7 CisgICAgaWYgKGluc24tPmdlbmVyYXRlKSB7CisgICAgICAgIG1hcmtfaW1wbGljaXRfd3JpdGVz KGN0eCwgaW5zbik7CisgICAgICAgIGluc24tPmdlbmVyYXRlKGVudiwgY3R4LCBpbnNuLCBwa3Qp OworICAgIH0gZWxzZSB7CisgICAgICAgIGdlbl9leGNlcHRpb24oSEVYX0VYQ1BfSU5WQUxJRF9P UENPREUpOworICAgICAgICBjdHgtPmJhc2UuaXNfam1wID0gRElTQVNfTk9SRVRVUk47CisgICAg fQorfQorCisvKgorICogSGVscGVycyBmb3IgZ2VuZXJhdGluZyB0aGUgcGFja2V0IGNvbW1pdAor ICovCitzdGF0aWMgdm9pZCBnZW5fcmVnX3dyaXRlcyhEaXNhc0NvbnRleHQgKmN0eCkKK3sKKyAg ICBpbnQgaTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBjdHgtPnJlZ19sb2dfaWR4OyBpKyspIHsK KyAgICAgICAgaW50IHJlZ19udW0gPSBjdHgtPnJlZ19sb2dbaV07CisKKyAgICAgICAgdGNnX2dl bl9tb3ZfdGwoaGV4X2dwcltyZWdfbnVtXSwgaGV4X25ld192YWx1ZVtyZWdfbnVtXSk7CisgICAg fQorfQorCitzdGF0aWMgdm9pZCBnZW5fcHJlZF93cml0ZXMoRGlzYXNDb250ZXh0ICpjdHgsIFBh Y2tldCAqcGt0KQoreworICAgIFRDR3YgemVybywgY29udHJvbF9yZWcsIHB2YWw7CisgICAgaW50 IGk7CisKKyAgICAvKiBFYXJseSBleGl0IGlmIHRoZSBsb2cgaXMgZW1wdHkgKi8KKyAgICBpZiAo IWN0eC0+cHJlZ19sb2dfaWR4KSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB6ZXJv ID0gdGNnX2NvbnN0X3RsKDApOworICAgIGNvbnRyb2xfcmVnID0gdGNnX3RlbXBfbmV3KCk7Cisg ICAgcHZhbCA9IHRjZ190ZW1wX25ldygpOworCisgICAgLyoKKyAgICAgKiBPbmx5IGVuZGxvb3Ag aW5zdHJ1Y3Rpb25zIHdpbGwgY29uZGl0aW9uYWxseQorICAgICAqIHdyaXRlIGEgcHJlZGljYXRl LiAgSWYgdGhlcmUgYXJlIG5vIGVuZGxvb3AKKyAgICAgKiBpbnN0cnVjdGlvbnMsIHdlIGNhbiB1 c2UgdGhlIG5vbi1jb25kaXRpb25hbAorICAgICAqIHdyaXRlIG9mIHRoZSBwcmVkaWNhdGVzLgor ICAgICAqLworICAgIGlmIChwa3QtPnBrdF9oYXNfZW5kbG9vcCkgeworICAgICAgICBUQ0d2IHBy ZWRfd3JpdHRlbiA9IHRjZ190ZW1wX25ldygpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgY3R4 LT5wcmVnX2xvZ19pZHg7IGkrKykgeworICAgICAgICAgICAgaW50IHByZWRfbnVtID0gY3R4LT5w cmVnX2xvZ1tpXTsKKworICAgICAgICAgICAgdGNnX2dlbl9hbmRpX3RsKHByZWRfd3JpdHRlbiwg aGV4X3ByZWRfd3JpdHRlbiwgMSA8PCBwcmVkX251bSk7CisgICAgICAgICAgICB0Y2dfZ2VuX21v dmNvbmRfdGwoVENHX0NPTkRfTkUsIGhleF9wcmVkW3ByZWRfbnVtXSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwcmVkX3dyaXR0ZW4sIHplcm8sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaGV4X25ld19wcmVkX3ZhbHVlW3ByZWRfbnVtXSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBoZXhfcHJlZFtwcmVkX251bV0pOworICAgICAgICB9CisgICAgICAg IHRjZ190ZW1wX2ZyZWUocHJlZF93cml0dGVuKTsKKyAgICB9IGVsc2UgeworICAgICAgICBmb3Ig KGkgPSAwOyBpIDwgY3R4LT5wcmVnX2xvZ19pZHg7IGkrKykgeworICAgICAgICAgICAgaW50IHBy ZWRfbnVtID0gY3R4LT5wcmVnX2xvZ1tpXTsKKyAgICAgICAgICAgIHRjZ19nZW5fbW92X3RsKGhl eF9wcmVkW3ByZWRfbnVtXSwgaGV4X25ld19wcmVkX3ZhbHVlW3ByZWRfbnVtXSk7CisjaWYgSEVY X0RFQlVHCisgICAgICAgICAgICAvKiBEbyB0aGlzIHNvIEhFTFBFUihkZWJ1Z19jb21taXRfZW5k KSB3aWxsIGtub3cgKi8KKyAgICAgICAgICAgIHRjZ19nZW5fb3JpX3RsKGhleF9wcmVkX3dyaXR0 ZW4sIGhleF9wcmVkX3dyaXR0ZW4sIDEgPDwgcHJlZF9udW0pOworI2VuZGlmCisgICAgICAgIH0K KyAgICB9CisKKyAgICB0Y2dfdGVtcF9mcmVlKHplcm8pOworICAgIHRjZ190ZW1wX2ZyZWUoY29u dHJvbF9yZWcpOworICAgIHRjZ190ZW1wX2ZyZWUocHZhbCk7Cit9CisKKyNpZiBIRVhfREVCVUcK K3N0YXRpYyBpbmxpbmUgdm9pZCBnZW5fY2hlY2tfc3RvcmVfd2lkdGgoRGlzYXNDb250ZXh0ICpj dHgsIGludCBzbG90X251bSkKK3sKKyAgICBUQ0d2IHNsb3QgPSB0Y2dfY29uc3RfdGwoc2xvdF9u dW0pOworICAgIFRDR3YgY2hlY2sgPSB0Y2dfY29uc3RfdGwoY3R4LT5zdG9yZV93aWR0aFtzbG90 X251bV0pOworICAgIGdlbl9oZWxwZXJfZGVidWdfY2hlY2tfc3RvcmVfd2lkdGgoY3B1X2Vudiwg c2xvdCwgY2hlY2spOworICAgIHRjZ190ZW1wX2ZyZWUoc2xvdCk7CisgICAgdGNnX3RlbXBfZnJl ZShjaGVjayk7Cit9CisjZGVmaW5lIEhFWF9ERUJVR19HRU5fQ0hFQ0tfU1RPUkVfV0lEVEgoY3R4 LCBzbG90X251bSkgXAorICAgIGdlbl9jaGVja19zdG9yZV93aWR0aChjdHgsIHNsb3RfbnVtKQor I2Vsc2UKKyNkZWZpbmUgSEVYX0RFQlVHX0dFTl9DSEVDS19TVE9SRV9XSURUSChjdHgsIHNsb3Rf bnVtKSAgLyogbm90aGluZyAqLworI2VuZGlmCisKK3N0YXRpYyBib29sIHNsb3RfaXNfcHJlZGlj YXRlZChQYWNrZXQgKnBrdCwgaW50IHNsb3RfbnVtKQoreworICAgIGZvciAoaW50IGkgPSAwOyBp IDwgcGt0LT5udW1faW5zbnM7IGkrKykgeworICAgICAgICBpZiAocGt0LT5pbnNuW2ldLnNsb3Qg PT0gc2xvdF9udW0pIHsKKyAgICAgICAgICAgIHJldHVybiBHRVRfQVRUUklCKHBrdC0+aW5zbltp XS5vcGNvZGUsIEFfQ09OREVYRUMpOworICAgICAgICB9CisgICAgfQorICAgIC8qIElmIHdlIGdl dCB0byBoZXJlLCB3ZSBkaWRuJ3QgZmluZCBhbiBpbnN0cnVjdGlvbiBpbiB0aGUgcmVxdWVzdGVk IHNsb3QgKi8KKyAgICBnX2Fzc2VydF9ub3RfcmVhY2hlZCgpOworfQorCit2b2lkIHByb2Nlc3Nf c3RvcmUoRGlzYXNDb250ZXh0ICpjdHgsIFBhY2tldCAqcGt0LCBpbnQgc2xvdF9udW0pCit7Cisg ICAgYm9vbCBpc19wcmVkaWNhdGVkID0gc2xvdF9pc19wcmVkaWNhdGVkKHBrdCwgc2xvdF9udW0p OworICAgIFRDR0xhYmVsICpsYWJlbF9lbmQgPSBOVUxMOworCisgICAgLyoKKyAgICAgKiBXZSBt YXkgaGF2ZSBhbHJlYWR5IHByb2Nlc3NlZCB0aGlzIHN0b3JlCisgICAgICogU2VlIENIRUNLX05P U0hVRiBpbiBtYWNyb3MuaAorICAgICAqLworICAgIGlmIChzbG90X251bSA9PSAxICYmIGN0eC0+ czFfc3RvcmVfcHJvY2Vzc2VkKSB7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgY3R4LT5z MV9zdG9yZV9wcm9jZXNzZWQgPSAxOworCisgICAgaWYgKGlzX3ByZWRpY2F0ZWQpIHsKKyAgICAg ICAgVENHdiBjYW5jZWxsZWQgPSB0Y2dfdGVtcF9uZXcoKTsKKyAgICAgICAgbGFiZWxfZW5kID0g Z2VuX25ld19sYWJlbCgpOworCisgICAgICAgIC8qIERvbid0IGRvIGFueXRoaW5nIGlmIHRoZSBz bG90IHdhcyBjYW5jZWxsZWQgKi8KKyAgICAgICAgdGNnX2dlbl9leHRyYWN0X3RsKGNhbmNlbGxl ZCwgaGV4X3Nsb3RfY2FuY2VsbGVkLCBzbG90X251bSwgMSk7CisgICAgICAgIHRjZ19nZW5fYnJj b25kaV90bChUQ0dfQ09ORF9ORSwgY2FuY2VsbGVkLCAwLCBsYWJlbF9lbmQpOworICAgICAgICB0 Y2dfdGVtcF9mcmVlKGNhbmNlbGxlZCk7CisgICAgfQorICAgIHsKKyAgICAgICAgVENHdiBhZGRy ZXNzID0gdGNnX3RlbXBfbG9jYWxfbmV3KCk7CisgICAgICAgIHRjZ19nZW5fbW92X3RsKGFkZHJl c3MsIGhleF9zdG9yZV9hZGRyW3Nsb3RfbnVtXSk7CisKKyAgICAgICAgLyoKKyAgICAgICAgICog SWYgd2Uga25vdyB0aGUgd2lkdGggZnJvbSB0aGUgRGlzYXNDb250ZXh0LCB3ZSBjYW4KKyAgICAg ICAgICogZ2VuZXJhdGUgbXVjaCBjbGVhbmVyIGNvZGUuCisgICAgICAgICAqIFVuZm9ydHVuYXRl bHksIG5vdCBhbGwgaW5zdHJ1Y3Rpb25zIGV4ZWN1dGUgdGhlIGZTVE9SRQorICAgICAgICAgKiBt YWNybyBkdXJpbmcgY29kZSBnZW5lcmF0aW9uLiAgQW55dGhpbmcgdGhhdCB1c2VzIHRoZQorICAg ICAgICAgKiBnZW5lcmljIGhlbHBlciB3aWxsIGhhdmUgdGhpcyBwcm9ibGVtLiAgSW5zdHJ1Y3Rp b25zCisgICAgICAgICAqIHRoYXQgdXNlIGZXUkFQIHRvIGdlbmVyYXRlIHByb3BlciBUQ0cgY29k ZSB3aWxsIGJlIE9LLgorICAgICAgICAgKi8KKyAgICAgICAgc3dpdGNoIChjdHgtPnN0b3JlX3dp ZHRoW3Nsb3RfbnVtXSkgeworICAgICAgICBjYXNlIDE6CisgICAgICAgICAgICBIRVhfREVCVUdf R0VOX0NIRUNLX1NUT1JFX1dJRFRIKGN0eCwgc2xvdF9udW0pOworICAgICAgICAgICAgdGNnX2dl bl9xZW11X3N0OChoZXhfc3RvcmVfdmFsMzJbc2xvdF9udW1dLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBoZXhfc3RvcmVfYWRkcltzbG90X251bV0sCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGN0eC0+bWVtX2lkeCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz ZSAyOgorICAgICAgICAgICAgSEVYX0RFQlVHX0dFTl9DSEVDS19TVE9SRV9XSURUSChjdHgsIHNs b3RfbnVtKTsKKyAgICAgICAgICAgIHRjZ19nZW5fcWVtdV9zdDE2KGhleF9zdG9yZV92YWwzMltz bG90X251bV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXhfc3RvcmVfYWRkcltz bG90X251bV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPm1lbV9pZHgpOwor ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgIEhFWF9ERUJV R19HRU5fQ0hFQ0tfU1RPUkVfV0lEVEgoY3R4LCBzbG90X251bSk7CisgICAgICAgICAgICB0Y2df Z2VuX3FlbXVfc3QzMihoZXhfc3RvcmVfdmFsMzJbc2xvdF9udW1dLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaGV4X3N0b3JlX2FkZHJbc2xvdF9udW1dLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY3R4LT5tZW1faWR4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICBjYXNlIDg6CisgICAgICAgICAgICBIRVhfREVCVUdfR0VOX0NIRUNLX1NUT1JFX1dJRFRIKGN0 eCwgc2xvdF9udW0pOworICAgICAgICAgICAgdGNnX2dlbl9xZW11X3N0NjQoaGV4X3N0b3JlX3Zh bDY0W3Nsb3RfbnVtXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleF9zdG9yZV9h ZGRyW3Nsb3RfbnVtXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+bWVtX2lk eCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIElmIHdlIGdldCB0byBoZXJl LCB3ZSBkb24ndCBrbm93IHRoZSB3aWR0aCBhdAorICAgICAgICAgICAgICAgICAqIFRDRyBnZW5l cmF0aW9uIHRpbWUsIHdlJ2xsIHVzZSBhIGhlbHBlciB0bworICAgICAgICAgICAgICAgICAqIGF2 b2lkIGJyYW5jaGluZyBiYXNlZCBvbiB0aGUgd2lkdGggYXQgcnVudGltZS4KKyAgICAgICAgICAg ICAgICAgKi8KKyAgICAgICAgICAgICAgICBUQ0d2IHNsb3QgPSB0Y2dfY29uc3RfdGwoc2xvdF9u dW0pOworICAgICAgICAgICAgICAgIGdlbl9oZWxwZXJfY29tbWl0X3N0b3JlKGNwdV9lbnYsIHNs b3QpOworICAgICAgICAgICAgICAgIHRjZ190ZW1wX2ZyZWUoc2xvdCk7CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKyAgICAgICAgdGNnX3RlbXBfZnJlZShhZGRyZXNzKTsKKyAgICB9CisgICAg aWYgKGlzX3ByZWRpY2F0ZWQpIHsKKyAgICAgICAgZ2VuX3NldF9sYWJlbChsYWJlbF9lbmQpOwor ICAgIH0KK30KKworc3RhdGljIHZvaWQgcHJvY2Vzc19zdG9yZV9sb2coRGlzYXNDb250ZXh0ICpj dHgsIFBhY2tldCAqcGt0KQoreworICAgIC8qCisgICAgICogIFdoZW4gYSBwYWNrZXQgaGFzIHR3 byBzdG9yZXMsIHRoZSBoYXJkd2FyZSBwcm9jZXNzZXMKKyAgICAgKiAgc2xvdCAxIGFuZCB0aGVu IHNsb3QgMi4gIFRoaXMgd2lsbCBiZSBpbXBvcnRhbnQgd2hlbgorICAgICAqICB0aGUgbWVtb3J5 IGFjY2Vzc2VzIG92ZXJsYXAuCisgICAgICovCisgICAgaWYgKHBrdC0+cGt0X2hhc19zdG9yZV9z MSAmJiAhcGt0LT5wa3RfaGFzX2RjemVyb2EpIHsKKyAgICAgICAgcHJvY2Vzc19zdG9yZShjdHgs IHBrdCwgMSk7CisgICAgfQorICAgIGlmIChwa3QtPnBrdF9oYXNfc3RvcmVfczAgJiYgIXBrdC0+ cGt0X2hhc19kY3plcm9hKSB7CisgICAgICAgIHByb2Nlc3Nfc3RvcmUoY3R4LCBwa3QsIDApOwor ICAgIH0KK30KKworLyogWmVybyBvdXQgYSAzMi1iaXQgY2FjaGUgbGluZSAqLworc3RhdGljIHZv aWQgcHJvY2Vzc19kY3plcm9hKERpc2FzQ29udGV4dCAqY3R4LCBQYWNrZXQgKnBrdCkKK3sKKyAg ICBpZiAocGt0LT5wa3RfaGFzX2RjemVyb2EpIHsKKyAgICAgICAgLyogU3RvcmUgMzIgYnl0ZXMg b2YgemVybyBzdGFydGluZyBhdCAoYWRkciAmIH4weDFmKSAqLworICAgICAgICBUQ0d2IGFkZHIg PSB0Y2dfdGVtcF9uZXcoKTsKKyAgICAgICAgVENHdl9pNjQgemVybyA9IHRjZ19jb25zdF9pNjQo MCk7CisKKyAgICAgICAgdGNnX2dlbl9hbmRpX3RsKGFkZHIsIGhleF9kY3plcm9fYWRkciwgfjB4 MWYpOworICAgICAgICB0Y2dfZ2VuX3FlbXVfc3Q2NCh6ZXJvLCBhZGRyLCBjdHgtPm1lbV9pZHgp OworICAgICAgICB0Y2dfZ2VuX2FkZGlfdGwoYWRkciwgYWRkciwgOCk7CisgICAgICAgIHRjZ19n ZW5fcWVtdV9zdDY0KHplcm8sIGFkZHIsIGN0eC0+bWVtX2lkeCk7CisgICAgICAgIHRjZ19nZW5f YWRkaV90bChhZGRyLCBhZGRyLCA4KTsKKyAgICAgICAgdGNnX2dlbl9xZW11X3N0NjQoemVybywg YWRkciwgY3R4LT5tZW1faWR4KTsKKyAgICAgICAgdGNnX2dlbl9hZGRpX3RsKGFkZHIsIGFkZHIs IDgpOworICAgICAgICB0Y2dfZ2VuX3FlbXVfc3Q2NCh6ZXJvLCBhZGRyLCBjdHgtPm1lbV9pZHgp OworCisgICAgICAgIHRjZ190ZW1wX2ZyZWUoYWRkcik7CisgICAgICAgIHRjZ190ZW1wX2ZyZWVf aTY0KHplcm8pOworICAgIH0KK30KKworc3RhdGljIHZvaWQgdXBkYXRlX2V4ZWNfY291bnRlcnMo RGlzYXNDb250ZXh0ICpjdHgsIFBhY2tldCAqcGt0KQoreworICAgIGludCBudW1faW5zbnMgPSBw a3QtPm51bV9pbnNuczsKKyAgICBpbnQgbnVtX3JlYWxfaW5zbnMgPSAwOworCisgICAgZm9yIChp bnQgaSA9IDA7IGkgPCBudW1faW5zbnM7IGkrKykgeworICAgICAgICBpZiAoIXBrdC0+aW5zbltp XS5pc19lbmRsb29wICYmCisgICAgICAgICAgICAhcGt0LT5pbnNuW2ldLnBhcnQxICYmCisgICAg ICAgICAgICAhR0VUX0FUVFJJQihwa3QtPmluc25baV0ub3Bjb2RlLCBBX0lUX05PUCkpIHsKKyAg ICAgICAgICAgIG51bV9yZWFsX2luc25zKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBjdHgt Pm51bV9wYWNrZXRzKys7CisgICAgY3R4LT5udW1faW5zbnMgKz0gbnVtX3JlYWxfaW5zbnM7Cit9 CisKK3N0YXRpYyB2b2lkIGdlbl9leGVjX2NvdW50ZXJzKERpc2FzQ29udGV4dCAqY3R4KQorewor ICAgIHRjZ19nZW5fYWRkaV90bChoZXhfZ3ByW0hFWF9SRUdfUUVNVV9QS1RfQ05UXSwKKyAgICAg ICAgICAgICAgICAgICAgaGV4X2dwcltIRVhfUkVHX1FFTVVfUEtUX0NOVF0sIGN0eC0+bnVtX3Bh Y2tldHMpOworICAgIHRjZ19nZW5fYWRkaV90bChoZXhfZ3ByW0hFWF9SRUdfUUVNVV9JTlNOX0NO VF0sCisgICAgICAgICAgICAgICAgICAgIGhleF9ncHJbSEVYX1JFR19RRU1VX0lOU05fQ05UXSwg Y3R4LT5udW1faW5zbnMpOworfQorCitzdGF0aWMgdm9pZCBnZW5fY29tbWl0X3BhY2tldChEaXNh c0NvbnRleHQgKmN0eCwgUGFja2V0ICpwa3QpCit7CisgICAgZ2VuX3JlZ193cml0ZXMoY3R4KTsK KyAgICBnZW5fcHJlZF93cml0ZXMoY3R4LCBwa3QpOworICAgIHByb2Nlc3Nfc3RvcmVfbG9nKGN0 eCwgcGt0KTsKKyAgICBwcm9jZXNzX2RjemVyb2EoY3R4LCBwa3QpOworICAgIHVwZGF0ZV9leGVj X2NvdW50ZXJzKGN0eCwgcGt0KTsKKyNpZiBIRVhfREVCVUcKKyAgICB7CisgICAgICAgIFRDR3Yg aGFzX3N0MCA9CisgICAgICAgICAgICB0Y2dfY29uc3RfdGwocGt0LT5wa3RfaGFzX3N0b3JlX3Mw ICYmICFwa3QtPnBrdF9oYXNfZGN6ZXJvYSk7CisgICAgICAgIFRDR3YgaGFzX3N0MSA9CisgICAg ICAgICAgICB0Y2dfY29uc3RfdGwocGt0LT5wa3RfaGFzX3N0b3JlX3MxICYmICFwa3QtPnBrdF9o YXNfZGN6ZXJvYSk7CisKKyAgICAgICAgLyogSGFuZHkgcGxhY2UgdG8gc2V0IGEgYnJlYWtwb2lu dCBhdCB0aGUgZW5kIG9mIGV4ZWN1dGlvbiAqLworICAgICAgICBnZW5faGVscGVyX2RlYnVnX2Nv bW1pdF9lbmQoY3B1X2VudiwgaGFzX3N0MCwgaGFzX3N0MSk7CisKKyAgICAgICAgdGNnX3RlbXBf ZnJlZShoYXNfc3QwKTsKKyAgICAgICAgdGNnX3RlbXBfZnJlZShoYXNfc3QxKTsKKyAgICB9Cisj ZW5kaWYKKworICAgIGlmIChwa3QtPnBrdF9oYXNfY29mKSB7CisgICAgICAgIGN0eC0+YmFzZS5p c19qbXAgPSBESVNBU19OT1JFVFVSTjsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGRlY29kZV9h bmRfdHJhbnNsYXRlX3BhY2tldChDUFVIZXhhZ29uU3RhdGUgKmVudiwgRGlzYXNDb250ZXh0ICpj dHgpCit7CisgICAgdWludDMyX3Qgd29yZHNbUEFDS0VUX1dPUkRTX01BWF07CisgICAgaW50IG53 b3JkczsKKyAgICBQYWNrZXQgcGt0OworICAgIGludCBpOworCisgICAgbndvcmRzID0gcmVhZF9w YWNrZXRfd29yZHMoZW52LCBjdHgsIHdvcmRzKTsKKyAgICBpZiAoIW53b3JkcykgeworICAgICAg ICBnZW5fZXhjZXB0aW9uKEhFWF9FWENQX0lOVkFMSURfUEFDS0VUKTsKKyAgICAgICAgY3R4LT5i YXNlLmlzX2ptcCA9IERJU0FTX05PUkVUVVJOOworICAgICAgICByZXR1cm47CisgICAgfQorCisg ICAgaWYgKGRlY29kZV9wYWNrZXQobndvcmRzLCB3b3JkcywgJnBrdCwgZmFsc2UpID4gMCkgewor ICAgICAgICBIRVhfREVCVUdfUFJJTlRfUEtUKCZwa3QpOworICAgICAgICBnZW5fc3RhcnRfcGFj a2V0KGN0eCwgJnBrdCk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwa3QubnVtX2luc25zOyBp KyspIHsKKyAgICAgICAgICAgIGdlbl9pbnNuKGVudiwgY3R4LCAmcGt0Lmluc25baV0sICZwa3Qp OworICAgICAgICB9CisgICAgICAgIGdlbl9jb21taXRfcGFja2V0KGN0eCwgJnBrdCk7CisgICAg ICAgIGN0eC0+YmFzZS5wY19uZXh0ICs9IHBrdC5lbmNvZF9wa3Rfc2l6ZV9pbl9ieXRlczsKKyAg ICB9IGVsc2UgeworICAgICAgICBnZW5fZXhjZXB0aW9uKEhFWF9FWENQX0lOVkFMSURfUEFDS0VU KTsKKyAgICAgICAgY3R4LT5iYXNlLmlzX2ptcCA9IERJU0FTX05PUkVUVVJOOworICAgIH0KK30K Kworc3RhdGljIHZvaWQgaGV4YWdvbl90cl9pbml0X2Rpc2FzX2NvbnRleHQoRGlzYXNDb250ZXh0 QmFzZSAqZGNiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Q1BVU3RhdGUgKmNzKQoreworICAgIERpc2FzQ29udGV4dCAqY3R4ID0gY29udGFpbmVyX29mKGRj YmFzZSwgRGlzYXNDb250ZXh0LCBiYXNlKTsKKworICAgIGN0eC0+bWVtX2lkeCA9IE1NVV9VU0VS X0lEWDsKKyAgICBjdHgtPm51bV9wYWNrZXRzID0gMDsKKyAgICBjdHgtPm51bV9pbnNucyA9IDA7 Cit9CisKK3N0YXRpYyB2b2lkIGhleGFnb25fdHJfdGJfc3RhcnQoRGlzYXNDb250ZXh0QmFzZSAq ZGIsIENQVVN0YXRlICpjcHUpCit7Cit9CisKK3N0YXRpYyB2b2lkIGhleGFnb25fdHJfaW5zbl9z dGFydChEaXNhc0NvbnRleHRCYXNlICpkY2Jhc2UsIENQVVN0YXRlICpjcHUpCit7CisgICAgRGlz YXNDb250ZXh0ICpjdHggPSBjb250YWluZXJfb2YoZGNiYXNlLCBEaXNhc0NvbnRleHQsIGJhc2Up OworCisgICAgdGNnX2dlbl9pbnNuX3N0YXJ0KGN0eC0+YmFzZS5wY19uZXh0KTsKK30KKworc3Rh dGljIGJvb2wgaGV4YWdvbl90cl9icmVha3BvaW50X2NoZWNrKERpc2FzQ29udGV4dEJhc2UgKmRj YmFzZSwgQ1BVU3RhdGUgKmNwdSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBDUFVCcmVha3BvaW50ICpicCkKK3sKKyAgICBEaXNhc0NvbnRleHQgKmN0eCA9 IGNvbnRhaW5lcl9vZihkY2Jhc2UsIERpc2FzQ29udGV4dCwgYmFzZSk7CisKKyAgICB0Y2dfZ2Vu X21vdmlfdGwoaGV4X2dwcltIRVhfUkVHX1BDXSwgY3R4LT5iYXNlLnBjX25leHQpOworICAgIGN0 eC0+YmFzZS5pc19qbXAgPSBESVNBU19OT1JFVFVSTjsKKyAgICBnZW5fZXhjZXB0aW9uX2RlYnVn KCk7CisgICAgLyoKKyAgICAgKiBUaGUgYWRkcmVzcyBjb3ZlcmVkIGJ5IHRoZSBicmVha3BvaW50 IG11c3QgYmUgaW5jbHVkZWQgaW4KKyAgICAgKiBbdGItPnBjLCB0Yi0+cGMgKyB0Yi0+c2l6ZSkg aW4gb3JkZXIgdG8gZm9yIGl0IHRvIGJlCisgICAgICogcHJvcGVybHkgY2xlYXJlZCAtLSB0aHVz IHdlIGluY3JlbWVudCB0aGUgUEMgaGVyZSBzbyB0aGF0CisgICAgICogdGhlIGxvZ2ljIHNldHRp bmcgdGItPnNpemUgYmVsb3cgZG9lcyB0aGUgcmlnaHQgdGhpbmcuCisgICAgICovCisgICAgY3R4 LT5iYXNlLnBjX25leHQgKz0gNDsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworc3RhdGljIGJvb2wg cGt0X2Nyb3NzZXNfcGFnZShDUFVIZXhhZ29uU3RhdGUgKmVudiwgRGlzYXNDb250ZXh0ICpjdHgp Cit7CisgICAgdGFyZ2V0X3Vsb25nIHBhZ2Vfc3RhcnQgPSBjdHgtPmJhc2UucGNfZmlyc3QgJiBU QVJHRVRfUEFHRV9NQVNLOworICAgIGJvb2wgZm91bmRfZW5kID0gZmFsc2U7CisgICAgaW50IG53 b3JkczsKKworICAgIGZvciAobndvcmRzID0gMDsgIWZvdW5kX2VuZCAmJiBud29yZHMgPCBQQUNL RVRfV09SRFNfTUFYOyBud29yZHMrKykgeworICAgICAgICB1aW50MzJfdCB3b3JkID0gY3B1X2xk bF9jb2RlKGVudiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPmJhc2UucGNfbmV4 dCArIG53b3JkcyAqIHNpemVvZih1aW50MzJfdCkpOworICAgICAgICBmb3VuZF9lbmQgPSBpc19w YWNrZXRfZW5kKHdvcmQpOworICAgIH0KKyAgICB1aW50MzJfdCBuZXh0X3B0ciA9ICBjdHgtPmJh c2UucGNfbmV4dCArIG53b3JkcyAqIHNpemVvZih1aW50MzJfdCk7CisgICAgcmV0dXJuIGZvdW5k X2VuZCAmJiBuZXh0X3B0ciAtIHBhZ2Vfc3RhcnQgPj0gVEFSR0VUX1BBR0VfU0laRTsKK30KKwor c3RhdGljIHZvaWQgaGV4YWdvbl90cl90cmFuc2xhdGVfcGFja2V0KERpc2FzQ29udGV4dEJhc2Ug KmRjYmFzZSwgQ1BVU3RhdGUgKmNwdSkKK3sKKyAgICBEaXNhc0NvbnRleHQgKmN0eCA9IGNvbnRh aW5lcl9vZihkY2Jhc2UsIERpc2FzQ29udGV4dCwgYmFzZSk7CisgICAgQ1BVSGV4YWdvblN0YXRl ICplbnYgPSBjcHUtPmVudl9wdHI7CisKKyAgICBkZWNvZGVfYW5kX3RyYW5zbGF0ZV9wYWNrZXQo ZW52LCBjdHgpOworCisgICAgaWYgKGN0eC0+YmFzZS5pc19qbXAgPT0gRElTQVNfTkVYVCkgewor ICAgICAgICB0YXJnZXRfdWxvbmcgcGFnZV9zdGFydCA9IGN0eC0+YmFzZS5wY19maXJzdCAmIFRB UkdFVF9QQUdFX01BU0s7CisgICAgICAgIHRhcmdldF91bG9uZyBieXRlc19tYXggPSBQQUNLRVRf V09SRFNfTUFYICogc2l6ZW9mKHRhcmdldF91bG9uZyk7CisKKyAgICAgICAgaWYgKGN0eC0+YmFz ZS5wY19uZXh0IC0gcGFnZV9zdGFydCA+PSBUQVJHRVRfUEFHRV9TSVpFIHx8CisgICAgICAgICAg ICAoY3R4LT5iYXNlLnBjX25leHQgLSBwYWdlX3N0YXJ0ID49IFRBUkdFVF9QQUdFX1NJWkUgLSBi eXRlc19tYXggJiYKKyAgICAgICAgICAgICBwa3RfY3Jvc3Nlc19wYWdlKGVudiwgY3R4KSkpIHsK KyAgICAgICAgICAgIGN0eC0+YmFzZS5pc19qbXAgPSBESVNBU19UT09fTUFOWTsKKyAgICAgICAg fQorCisgICAgICAgIC8qCisgICAgICAgICAqIFRoZSBDUFUgbG9nIGlzIHVzZWQgdG8gY29tcGFy ZSBhZ2FpbnN0IExMREIgc2luZ2xlIHN0ZXBwaW5nLAorICAgICAgICAgKiBzbyBlbmQgdGhlIFRM QiBhZnRlciBldmVyeSBwYWNrZXQuCisgICAgICAgICAqLworICAgICAgICBIZXhhZ29uQ1BVICpo ZXhfY3B1ID0gY29udGFpbmVyX29mKGVudiwgSGV4YWdvbkNQVSwgZW52KTsKKyAgICAgICAgaWYg KGhleF9jcHUtPmxsZGJfY29tcGF0ICYmIHFlbXVfbG9nbGV2ZWxfbWFzayhDUFVfTE9HX1RCX0NQ VSkpIHsKKyAgICAgICAgICAgIGN0eC0+YmFzZS5pc19qbXAgPSBESVNBU19UT09fTUFOWTsKKyAg ICAgICAgfQorI2lmIEhFWF9ERUJVRworICAgICAgICAvKiBXaGVuIGRlYnVnZ2luZywgb25seSBw dXQgb25lIHBhY2tldCBwZXIgVEIgKi8KKyAgICAgICAgY3R4LT5iYXNlLmlzX2ptcCA9IERJU0FT X1RPT19NQU5ZOworI2VuZGlmCisgICAgfQorfQorCitzdGF0aWMgdm9pZCBoZXhhZ29uX3RyX3Ri X3N0b3AoRGlzYXNDb250ZXh0QmFzZSAqZGNiYXNlLCBDUFVTdGF0ZSAqY3B1KQoreworICAgIERp c2FzQ29udGV4dCAqY3R4ID0gY29udGFpbmVyX29mKGRjYmFzZSwgRGlzYXNDb250ZXh0LCBiYXNl KTsKKworICAgIHN3aXRjaCAoY3R4LT5iYXNlLmlzX2ptcCkgeworICAgIGNhc2UgRElTQVNfVE9P X01BTlk6CisgICAgICAgIGdlbl9leGVjX2NvdW50ZXJzKGN0eCk7CisgICAgICAgIHRjZ19nZW5f bW92aV90bChoZXhfZ3ByW0hFWF9SRUdfUENdLCBjdHgtPmJhc2UucGNfbmV4dCk7CisgICAgICAg IGlmIChjdHgtPmJhc2Uuc2luZ2xlc3RlcF9lbmFibGVkKSB7CisgICAgICAgICAgICBnZW5fZXhj ZXB0aW9uX2RlYnVnKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB0Y2dfZ2VuX2V4 aXRfdGIoTlVMTCwgMCk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBESVNB U19OT1JFVFVSTjoKKyAgICAgICAgZ2VuX2V4ZWNfY291bnRlcnMoY3R4KTsKKyAgICAgICAgdGNn X2dlbl9tb3ZfdGwoaGV4X2dwcltIRVhfUkVHX1BDXSwgaGV4X25leHRfUEMpOworICAgICAgICBp ZiAoY3R4LT5iYXNlLnNpbmdsZXN0ZXBfZW5hYmxlZCkgeworICAgICAgICAgICAgZ2VuX2V4Y2Vw dGlvbl9kZWJ1ZygpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGNnX2dlbl9leGl0 X3RiKE5VTEwsIDApOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg ICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBo ZXhhZ29uX3RyX2Rpc2FzX2xvZyhjb25zdCBEaXNhc0NvbnRleHRCYXNlICpkY2Jhc2UsIENQVVN0 YXRlICpjcHUpCit7CisgICAgcWVtdV9sb2coIklOOiAlc1xuIiwgbG9va3VwX3N5bWJvbChkY2Jh c2UtPnBjX2ZpcnN0KSk7CisgICAgbG9nX3RhcmdldF9kaXNhcyhjcHUsIGRjYmFzZS0+cGNfZmly c3QsIGRjYmFzZS0+dGItPnNpemUpOworfQorCisKK3N0YXRpYyBjb25zdCBUcmFuc2xhdG9yT3Bz IGhleGFnb25fdHJfb3BzID0geworICAgIC5pbml0X2Rpc2FzX2NvbnRleHQgPSBoZXhhZ29uX3Ry X2luaXRfZGlzYXNfY29udGV4dCwKKyAgICAudGJfc3RhcnQgICAgICAgICAgID0gaGV4YWdvbl90 cl90Yl9zdGFydCwKKyAgICAuaW5zbl9zdGFydCAgICAgICAgID0gaGV4YWdvbl90cl9pbnNuX3N0 YXJ0LAorICAgIC5icmVha3BvaW50X2NoZWNrICAgPSBoZXhhZ29uX3RyX2JyZWFrcG9pbnRfY2hl Y2ssCisgICAgLnRyYW5zbGF0ZV9pbnNuICAgICA9IGhleGFnb25fdHJfdHJhbnNsYXRlX3BhY2tl dCwKKyAgICAudGJfc3RvcCAgICAgICAgICAgID0gaGV4YWdvbl90cl90Yl9zdG9wLAorICAgIC5k aXNhc19sb2cgICAgICAgICAgPSBoZXhhZ29uX3RyX2Rpc2FzX2xvZywKK307CisKK3ZvaWQgZ2Vu X2ludGVybWVkaWF0ZV9jb2RlKENQVVN0YXRlICpjcywgVHJhbnNsYXRpb25CbG9jayAqdGIsIGlu dCBtYXhfaW5zbnMpCit7CisgICAgRGlzYXNDb250ZXh0IGN0eDsKKworICAgIHRyYW5zbGF0b3Jf bG9vcCgmaGV4YWdvbl90cl9vcHMsICZjdHguYmFzZSwgY3MsIHRiLCBtYXhfaW5zbnMpOworfQor CisjZGVmaW5lIE5BTUVfTEVOICAgICAgICAgICAgICAgNjQKK3N0YXRpYyBjaGFyIG5ld192YWx1 ZV9uYW1lc1tUT1RBTF9QRVJfVEhSRUFEX1JFR1NdW05BTUVfTEVOXTsKKyNpZiBIRVhfREVCVUcK K3N0YXRpYyBjaGFyIHJlZ193cml0dGVuX25hbWVzW1RPVEFMX1BFUl9USFJFQURfUkVHU11bTkFN RV9MRU5dOworI2VuZGlmCitzdGF0aWMgY2hhciBuZXdfcHJlZF92YWx1ZV9uYW1lc1tOVU1fUFJF R1NdW05BTUVfTEVOXTsKK3N0YXRpYyBjaGFyIHN0b3JlX2FkZHJfbmFtZXNbU1RPUkVTX01BWF1b TkFNRV9MRU5dOworc3RhdGljIGNoYXIgc3RvcmVfd2lkdGhfbmFtZXNbU1RPUkVTX01BWF1bTkFN RV9MRU5dOworc3RhdGljIGNoYXIgc3RvcmVfdmFsMzJfbmFtZXNbU1RPUkVTX01BWF1bTkFNRV9M RU5dOworc3RhdGljIGNoYXIgc3RvcmVfdmFsNjRfbmFtZXNbU1RPUkVTX01BWF1bTkFNRV9MRU5d OworCit2b2lkIGhleGFnb25fdHJhbnNsYXRlX2luaXQodm9pZCkKK3sKKyAgICBpbnQgaTsKKwor ICAgIG9wY29kZV9pbml0KCk7CisKKyNpZiBIRVhfREVCVUcKKyAgICBpZiAoIXFlbXVfbG9nZmls ZSkgeworICAgICAgICBxZW11X3NldF9sb2cocWVtdV9sb2dsZXZlbCk7CisgICAgfQorI2VuZGlm CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgVE9UQUxfUEVSX1RIUkVBRF9SRUdTOyBpKyspIHsKKyAg ICAgICAgaGV4X2dwcltpXSA9IHRjZ19nbG9iYWxfbWVtX25ldyhjcHVfZW52LAorICAgICAgICAg ICAgb2Zmc2V0b2YoQ1BVSGV4YWdvblN0YXRlLCBncHJbaV0pLAorICAgICAgICAgICAgaGV4YWdv bl9yZWduYW1lc1tpXSk7CisKKyAgICAgICAgc25wcmludGYobmV3X3ZhbHVlX25hbWVzW2ldLCBO QU1FX0xFTiwgIm5ld18lcyIsIGhleGFnb25fcmVnbmFtZXNbaV0pOworICAgICAgICBoZXhfbmV3 X3ZhbHVlW2ldID0gdGNnX2dsb2JhbF9tZW1fbmV3KGNwdV9lbnYsCisgICAgICAgICAgICBvZmZz ZXRvZihDUFVIZXhhZ29uU3RhdGUsIG5ld192YWx1ZVtpXSksCisgICAgICAgICAgICBuZXdfdmFs dWVfbmFtZXNbaV0pOworCisjaWYgSEVYX0RFQlVHCisgICAgICAgIHNucHJpbnRmKHJlZ193cml0 dGVuX25hbWVzW2ldLCBOQU1FX0xFTiwgInJlZ193cml0dGVuXyVzIiwKKyAgICAgICAgICAgICAg ICAgaGV4YWdvbl9yZWduYW1lc1tpXSk7CisgICAgICAgIGhleF9yZWdfd3JpdHRlbltpXSA9IHRj Z19nbG9iYWxfbWVtX25ldyhjcHVfZW52LAorICAgICAgICAgICAgb2Zmc2V0b2YoQ1BVSGV4YWdv blN0YXRlLCByZWdfd3JpdHRlbltpXSksCisgICAgICAgICAgICByZWdfd3JpdHRlbl9uYW1lc1tp XSk7CisjZW5kaWYKKyAgICB9CisgICAgZm9yIChpID0gMDsgaSA8IE5VTV9QUkVHUzsgaSsrKSB7 CisgICAgICAgIGhleF9wcmVkW2ldID0gdGNnX2dsb2JhbF9tZW1fbmV3KGNwdV9lbnYsCisgICAg ICAgICAgICBvZmZzZXRvZihDUFVIZXhhZ29uU3RhdGUsIHByZWRbaV0pLAorICAgICAgICAgICAg aGV4YWdvbl9wcmVkbmFtZXNbaV0pOworCisgICAgICAgIHNucHJpbnRmKG5ld19wcmVkX3ZhbHVl X25hbWVzW2ldLCBOQU1FX0xFTiwgIm5ld19wcmVkXyVzIiwKKyAgICAgICAgICAgICAgICAgaGV4 YWdvbl9wcmVkbmFtZXNbaV0pOworICAgICAgICBoZXhfbmV3X3ByZWRfdmFsdWVbaV0gPSB0Y2df Z2xvYmFsX21lbV9uZXcoY3B1X2VudiwKKyAgICAgICAgICAgIG9mZnNldG9mKENQVUhleGFnb25T dGF0ZSwgbmV3X3ByZWRfdmFsdWVbaV0pLAorICAgICAgICAgICAgbmV3X3ByZWRfdmFsdWVfbmFt ZXNbaV0pOworICAgIH0KKyAgICBoZXhfcHJlZF93cml0dGVuID0gdGNnX2dsb2JhbF9tZW1fbmV3 KGNwdV9lbnYsCisgICAgICAgIG9mZnNldG9mKENQVUhleGFnb25TdGF0ZSwgcHJlZF93cml0dGVu KSwgInByZWRfd3JpdHRlbiIpOworICAgIGhleF9uZXh0X1BDID0gdGNnX2dsb2JhbF9tZW1fbmV3 KGNwdV9lbnYsCisgICAgICAgIG9mZnNldG9mKENQVUhleGFnb25TdGF0ZSwgbmV4dF9QQyksICJu ZXh0X1BDIik7CisgICAgaGV4X3RoaXNfUEMgPSB0Y2dfZ2xvYmFsX21lbV9uZXcoY3B1X2VudiwK KyAgICAgICAgb2Zmc2V0b2YoQ1BVSGV4YWdvblN0YXRlLCB0aGlzX1BDKSwgInRoaXNfUEMiKTsK KyAgICBoZXhfc2xvdF9jYW5jZWxsZWQgPSB0Y2dfZ2xvYmFsX21lbV9uZXcoY3B1X2VudiwKKyAg ICAgICAgb2Zmc2V0b2YoQ1BVSGV4YWdvblN0YXRlLCBzbG90X2NhbmNlbGxlZCksICJzbG90X2Nh bmNlbGxlZCIpOworICAgIGhleF9icmFuY2hfdGFrZW4gPSB0Y2dfZ2xvYmFsX21lbV9uZXcoY3B1 X2VudiwKKyAgICAgICAgb2Zmc2V0b2YoQ1BVSGV4YWdvblN0YXRlLCBicmFuY2hfdGFrZW4pLCAi YnJhbmNoX3Rha2VuIik7CisgICAgaGV4X3BrdF9oYXNfc3RvcmVfczEgPSB0Y2dfZ2xvYmFsX21l bV9uZXcoY3B1X2VudiwKKyAgICAgICAgb2Zmc2V0b2YoQ1BVSGV4YWdvblN0YXRlLCBwa3RfaGFz X3N0b3JlX3MxKSwgInBrdF9oYXNfc3RvcmVfczEiKTsKKyAgICBoZXhfZGN6ZXJvX2FkZHIgPSB0 Y2dfZ2xvYmFsX21lbV9uZXcoY3B1X2VudiwKKyAgICAgICAgb2Zmc2V0b2YoQ1BVSGV4YWdvblN0 YXRlLCBkY3plcm9fYWRkciksICJkY3plcm9fYWRkciIpOworICAgIGhleF9sbHNjX2FkZHIgPSB0 Y2dfZ2xvYmFsX21lbV9uZXcoY3B1X2VudiwKKyAgICAgICAgb2Zmc2V0b2YoQ1BVSGV4YWdvblN0 YXRlLCBsbHNjX2FkZHIpLCAibGxzY19hZGRyIik7CisgICAgaGV4X2xsc2NfdmFsID0gdGNnX2ds b2JhbF9tZW1fbmV3KGNwdV9lbnYsCisgICAgICAgIG9mZnNldG9mKENQVUhleGFnb25TdGF0ZSwg bGxzY192YWwpLCAibGxzY192YWwiKTsKKyAgICBoZXhfbGxzY192YWxfaTY0ID0gdGNnX2dsb2Jh bF9tZW1fbmV3X2k2NChjcHVfZW52LAorICAgICAgICBvZmZzZXRvZihDUFVIZXhhZ29uU3RhdGUs IGxsc2NfdmFsX2k2NCksICJsbHNjX3ZhbF9pNjQiKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgU1RP UkVTX01BWDsgaSsrKSB7CisgICAgICAgIHNucHJpbnRmKHN0b3JlX2FkZHJfbmFtZXNbaV0sIE5B TUVfTEVOLCAic3RvcmVfYWRkcl8lZCIsIGkpOworICAgICAgICBoZXhfc3RvcmVfYWRkcltpXSA9 IHRjZ19nbG9iYWxfbWVtX25ldyhjcHVfZW52LAorICAgICAgICAgICAgb2Zmc2V0b2YoQ1BVSGV4 YWdvblN0YXRlLCBtZW1fbG9nX3N0b3Jlc1tpXS52YSksCisgICAgICAgICAgICBzdG9yZV9hZGRy X25hbWVzW2ldKTsKKworICAgICAgICBzbnByaW50ZihzdG9yZV93aWR0aF9uYW1lc1tpXSwgTkFN RV9MRU4sICJzdG9yZV93aWR0aF8lZCIsIGkpOworICAgICAgICBoZXhfc3RvcmVfd2lkdGhbaV0g PSB0Y2dfZ2xvYmFsX21lbV9uZXcoY3B1X2VudiwKKyAgICAgICAgICAgIG9mZnNldG9mKENQVUhl eGFnb25TdGF0ZSwgbWVtX2xvZ19zdG9yZXNbaV0ud2lkdGgpLAorICAgICAgICAgICAgc3RvcmVf d2lkdGhfbmFtZXNbaV0pOworCisgICAgICAgIHNucHJpbnRmKHN0b3JlX3ZhbDMyX25hbWVzW2ld LCBOQU1FX0xFTiwgInN0b3JlX3ZhbDMyXyVkIiwgaSk7CisgICAgICAgIGhleF9zdG9yZV92YWwz MltpXSA9IHRjZ19nbG9iYWxfbWVtX25ldyhjcHVfZW52LAorICAgICAgICAgICAgb2Zmc2V0b2Yo Q1BVSGV4YWdvblN0YXRlLCBtZW1fbG9nX3N0b3Jlc1tpXS5kYXRhMzIpLAorICAgICAgICAgICAg c3RvcmVfdmFsMzJfbmFtZXNbaV0pOworCisgICAgICAgIHNucHJpbnRmKHN0b3JlX3ZhbDY0X25h bWVzW2ldLCBOQU1FX0xFTiwgInN0b3JlX3ZhbDY0XyVkIiwgaSk7CisgICAgICAgIGhleF9zdG9y ZV92YWw2NFtpXSA9IHRjZ19nbG9iYWxfbWVtX25ld19pNjQoY3B1X2VudiwKKyAgICAgICAgICAg IG9mZnNldG9mKENQVUhleGFnb25TdGF0ZSwgbWVtX2xvZ19zdG9yZXNbaV0uZGF0YTY0KSwKKyAg ICAgICAgICAgIHN0b3JlX3ZhbDY0X25hbWVzW2ldKTsKKyAgICB9Cit9Ci0tIAoyLjcuNAoK