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=-12.6 required=3.0 tests=BAYES_00,DKIM_INVALID, DKIM_SIGNED,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,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 84286C2D0A8 for ; Mon, 28 Sep 2020 17:44:25 +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 19A7E2083B for ; Mon, 28 Sep 2020 17:44:25 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=quicinc.com header.i=@quicinc.com header.b="WslKPMhb" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 19A7E2083B 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]:45930 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kMxCJ-0004bl-VM for qemu-devel@archiver.kernel.org; Mon, 28 Sep 2020 13:44:24 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:49050) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kMwyP-0003sQ-Ev for qemu-devel@nongnu.org; Mon, 28 Sep 2020 13:30:01 -0400 Received: from alexa-out-sd-01.qualcomm.com ([199.106.114.38]:53848) by eggs.gnu.org with esmtps (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kMwyL-0007us-U1 for qemu-devel@nongnu.org; Mon, 28 Sep 2020 13:30:01 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1601314197; x=1632850197; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=1cRCG9LyWHGW64+NajIRVLEsChN9AAQRbISwo3g87c8=; b=WslKPMhbk2TFz6kL+rrh075muJ5bEHKzZaZX8O0qHqKxi0Rf1Eihr8VR Lvv2d0ZPe07F8N432WG8IbIz6352+r6MVEpy00rlvkUIygb7b28TuSgKf tjdeE5INWNR/rj8AoNAAyXvpRZ208uSiNTO2dPYIhp0Zej4N7/vLBJFAa c=; Received: from unknown (HELO ironmsg-SD-alpha.qualcomm.com) ([10.53.140.30]) by alexa-out-sd-01.qualcomm.com with ESMTP; 28 Sep 2020 10:29:05 -0700 X-QCInternal: smtphost Received: from vu-tsimpson-aus.qualcomm.com (HELO vu-tsimpson1-aus.qualcomm.com) ([10.222.150.1]) by ironmsg-SD-alpha.qualcomm.com with ESMTP; 28 Sep 2020 10:29:05 -0700 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id 0857E1184; Mon, 28 Sep 2020 12:29:05 -0500 (CDT) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [RFC PATCH v4 26/29] Hexagon (target/hexagon) translation Date: Mon, 28 Sep 2020 12:28:55 -0500 Message-Id: <1601314138-9930-27-git-send-email-tsimpson@quicinc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1601314138-9930-1-git-send-email-tsimpson@quicinc.com> References: <1601314138-9930-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.38; envelope-from=tsimpson@qualcomm.com; helo=alexa-out-sd-01.qualcomm.com X-detected-operating-system: by eggs.gnu.org: First seen = 2020/09/28 13:29:03 X-ACL-Warn: Detected OS = FreeBSD 9.x or newer [fuzzy] 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.199, 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, riku.voipio@iki.fi, richard.henderson@linaro.org, laurent@vivier.eu, tsimpson@quicinc.com, philmd@redhat.com, aleksandar.m.mail@gmail.com Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: "Qemu-devel" UmVhZCB0aGUgaW5zdHJ1Y3Rpb24gbWVtb3J5CkNyZWF0ZSBhIHBhY2tldCBkYXRhIHN0cnVjdHVy ZQpHZW5lcmF0ZSBUQ0cgY29kZSBmb3IgdGhlIHN0YXJ0IG9mIHRoZSBwYWNrZXQKSW52b2tlIHRo ZSBnZW5lcmF0ZSBmdW5jdGlvbiBmb3IgZWFjaCBpbnN0cnVjdGlvbgpHZW5lcmF0ZSBUQ0cgY29k ZSBmb3IgdGhlIGVuZCBvZiB0aGUgcGFja2V0CgpTaWduZWQtb2ZmLWJ5OiBUYXlsb3IgU2ltcHNv biA8dHNpbXBzb25AcXVpY2luYy5jb20+Ci0tLQogdGFyZ2V0L2hleGFnb24vdHJhbnNsYXRlLmgg fCAgODkgKysrKysrCiB0YXJnZXQvaGV4YWdvbi90cmFuc2xhdGUuYyB8IDY3OCArKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgNzY3 IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0YXJnZXQvaGV4YWdvbi90cmFuc2xh dGUuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IHRhcmdldC9oZXhhZ29uL3RyYW5zbGF0ZS5jCgpkaWZm IC0tZ2l0IGEvdGFyZ2V0L2hleGFnb24vdHJhbnNsYXRlLmggYi90YXJnZXQvaGV4YWdvbi90cmFu c2xhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzQ2ZTg0Ci0tLSAv ZGV2L251bGwKKysrIGIvdGFyZ2V0L2hleGFnb24vdHJhbnNsYXRlLmgKQEAgLTAsMCArMSw4OSBA QAorLyoKKyAqICBDb3B5cmlnaHQoYykgMjAxOS0yMDIwIFF1YWxjb21tIElubm92YXRpb24gQ2Vu dGVyLCBJbmMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBm cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAg aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVy c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl CisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgc2VlIDxodHRwOi8vd3d3Lmdu dS5vcmcvbGljZW5zZXMvPi4KKyAqLworCisjaWZuZGVmIEhFWEFHT05fVFJBTlNMQVRFX0gKKyNk ZWZpbmUgSEVYQUdPTl9UUkFOU0xBVEVfSAorCisjaW5jbHVkZSAiY3B1LmgiCisjaW5jbHVkZSAi ZXhlYy90cmFuc2xhdG9yLmgiCisjaW5jbHVkZSAidGNnL3RjZy1vcC5oIgorI2luY2x1ZGUgImlu dGVybmFsLmgiCisKK3R5cGVkZWYgc3RydWN0IERpc2FzQ29udGV4dCB7CisgICAgRGlzYXNDb250 ZXh0QmFzZSBiYXNlOworICAgIHVpbnQzMl90IG1lbV9pZHg7CisgICAgaW50IHJlZ19sb2dbUkVH X1dSSVRFU19NQVhdOworICAgIGludCByZWdfbG9nX2lkeDsKKyAgICBpbnQgcHJlZ19sb2dbUFJF RF9XUklURVNfTUFYXTsKKyAgICBpbnQgcHJlZ19sb2dfaWR4OworICAgIHVpbnQ4X3Qgc3RvcmVf d2lkdGhbU1RPUkVTX01BWF07Cit9IERpc2FzQ29udGV4dDsKKworc3RhdGljIGlubGluZSB2b2lk IGN0eF9sb2dfcmVnX3dyaXRlKERpc2FzQ29udGV4dCAqY3R4LCBpbnQgcm51bSkKK3sKKyNpZiBI RVhfREVCVUcKKyAgICBpbnQgaTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgY3R4LT5yZWdfbG9nX2lk eDsgaSsrKSB7CisgICAgICAgIGlmIChjdHgtPnJlZ19sb2dbaV0gPT0gcm51bSkgeworICAgICAg ICAgICAgSEVYX0RFQlVHX0xPRygiV0FSTklORzogTXVsdGlwbGUgd3JpdGVzIHRvIHIlZFxuIiwg cm51bSk7CisgICAgICAgIH0KKyAgICB9CisjZW5kaWYKKyAgICBjdHgtPnJlZ19sb2dbY3R4LT5y ZWdfbG9nX2lkeF0gPSBybnVtOworICAgIGN0eC0+cmVnX2xvZ19pZHgrKzsKK30KKworc3RhdGlj IGlubGluZSB2b2lkIGN0eF9sb2dfcHJlZF93cml0ZShEaXNhc0NvbnRleHQgKmN0eCwgaW50IHBu dW0pCit7CisgICAgY3R4LT5wcmVnX2xvZ1tjdHgtPnByZWdfbG9nX2lkeF0gPSBwbnVtOworICAg IGN0eC0+cHJlZ19sb2dfaWR4Kys7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc19wcmVsb2Fk ZWQoRGlzYXNDb250ZXh0ICpjdHgsIGludCBudW0pCit7CisgICAgaW50IGk7CisgICAgZm9yIChp ID0gMDsgaSA8IGN0eC0+cmVnX2xvZ19pZHg7IGkrKykgeworICAgICAgICBpZiAoY3R4LT5yZWdf bG9nW2ldID09IG51bSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAg ICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitleHRlcm4gVENHdiBoZXhfZ3ByW1RPVEFMX1BF Ul9USFJFQURfUkVHU107CitleHRlcm4gVENHdiBoZXhfcHJlZFtOVU1fUFJFR1NdOworZXh0ZXJu IFRDR3YgaGV4X25leHRfUEM7CitleHRlcm4gVENHdiBoZXhfdGhpc19QQzsKK2V4dGVybiBUQ0d2 IGhleF9zbG90X2NhbmNlbGxlZDsKK2V4dGVybiBUQ0d2IGhleF9icmFuY2hfdGFrZW47CitleHRl cm4gVENHdiBoZXhfbmV3X3ZhbHVlW1RPVEFMX1BFUl9USFJFQURfUkVHU107CitleHRlcm4gVENH diBoZXhfcmVnX3dyaXR0ZW5bVE9UQUxfUEVSX1RIUkVBRF9SRUdTXTsKK2V4dGVybiBUQ0d2IGhl eF9uZXdfcHJlZF92YWx1ZVtOVU1fUFJFR1NdOworZXh0ZXJuIFRDR3YgaGV4X3ByZWRfd3JpdHRl bjsKK2V4dGVybiBUQ0d2IGhleF9zdG9yZV9hZGRyW1NUT1JFU19NQVhdOworZXh0ZXJuIFRDR3Yg aGV4X3N0b3JlX3dpZHRoW1NUT1JFU19NQVhdOworZXh0ZXJuIFRDR3YgaGV4X3N0b3JlX3ZhbDMy W1NUT1JFU19NQVhdOworZXh0ZXJuIFRDR3ZfaTY0IGhleF9zdG9yZV92YWw2NFtTVE9SRVNfTUFY XTsKK2V4dGVybiBUQ0d2IGhleF9kY3plcm9fYWRkcjsKK2V4dGVybiBUQ0d2IGhleF9sbHNjX2Fk ZHI7CitleHRlcm4gVENHdiBoZXhfbGxzY192YWw7CitleHRlcm4gVENHdl9pNjQgaGV4X2xsc2Nf dmFsX2k2NDsKKworZXh0ZXJuIHZvaWQgZ2VuX2V4Y2VwdGlvbihpbnQgZXhjcCk7CitleHRlcm4g dm9pZCBnZW5fZXhjZXB0aW9uX2RlYnVnKHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL3Rh cmdldC9oZXhhZ29uL3RyYW5zbGF0ZS5jIGIvdGFyZ2V0L2hleGFnb24vdHJhbnNsYXRlLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA0YTIzNAotLS0gL2Rldi9udWxsCisr KyBiL3RhcmdldC9oZXhhZ29uL3RyYW5zbGF0ZS5jCkBAIC0wLDAgKzEsNjc4IEBACisvKgorICog IENvcHlyaWdodChjKSAyMDE5LTIwMjAgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4g QWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0 aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi eQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2Yg dGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K KyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2 ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9u ZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNl bnNlcy8+LgorICovCisKKyNkZWZpbmUgUUVNVV9HRU5FUkFURQorI2luY2x1ZGUgInFlbXUvb3Nk ZXAuaCIKKyNpbmNsdWRlICJjcHUuaCIKKyNpbmNsdWRlICJ0Y2cvdGNnLW9wLmgiCisjaW5jbHVk ZSAiZXhlYy9jcHVfbGRzdC5oIgorI2luY2x1ZGUgImV4ZWMvbG9nLmgiCisjaW5jbHVkZSAiaW50 ZXJuYWwuaCIKKyNpbmNsdWRlICJhdHRyaWJzLmgiCisjaW5jbHVkZSAiaW5zbi5oIgorI2luY2x1 ZGUgImRlY29kZS5oIgorI2luY2x1ZGUgInRyYW5zbGF0ZS5oIgorI2luY2x1ZGUgInByaW50aW5z bi5oIgorCitUQ0d2IGhleF9ncHJbVE9UQUxfUEVSX1RIUkVBRF9SRUdTXTsKK1RDR3YgaGV4X3By ZWRbTlVNX1BSRUdTXTsKK1RDR3YgaGV4X25leHRfUEM7CitUQ0d2IGhleF90aGlzX1BDOworVENH diBoZXhfc2xvdF9jYW5jZWxsZWQ7CitUQ0d2IGhleF9icmFuY2hfdGFrZW47CitUQ0d2IGhleF9u ZXdfdmFsdWVbVE9UQUxfUEVSX1RIUkVBRF9SRUdTXTsKKyNpZiBIRVhfREVCVUcKK1RDR3YgaGV4 X3JlZ193cml0dGVuW1RPVEFMX1BFUl9USFJFQURfUkVHU107CisjZW5kaWYKK1RDR3YgaGV4X25l d19wcmVkX3ZhbHVlW05VTV9QUkVHU107CitUQ0d2IGhleF9wcmVkX3dyaXR0ZW47CitUQ0d2IGhl eF9zdG9yZV9hZGRyW1NUT1JFU19NQVhdOworVENHdiBoZXhfc3RvcmVfd2lkdGhbU1RPUkVTX01B WF07CitUQ0d2IGhleF9zdG9yZV92YWwzMltTVE9SRVNfTUFYXTsKK1RDR3ZfaTY0IGhleF9zdG9y ZV92YWw2NFtTVE9SRVNfTUFYXTsKK1RDR3YgaGV4X3BrdF9oYXNfc3RvcmVfczE7CitUQ0d2IGhl eF9kY3plcm9fYWRkcjsKK1RDR3YgaGV4X2xsc2NfYWRkcjsKK1RDR3YgaGV4X2xsc2NfdmFsOwor VENHdl9pNjQgaGV4X2xsc2NfdmFsX2k2NDsKKworc3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBo ZXhhZ29uX3ByZWRuYW1lc1tdID0geworICAicDAiLCAicDEiLCAicDIiLCAicDMiCit9OworCit2 b2lkIGdlbl9leGNlcHRpb24oaW50IGV4Y3ApCit7CisgICAgVENHdl9pMzIgaGVscGVyX3RtcCA9 IHRjZ19jb25zdF9pMzIoZXhjcCk7CisgICAgZ2VuX2hlbHBlcl9yYWlzZV9leGNlcHRpb24oY3B1 X2VudiwgaGVscGVyX3RtcCk7CisgICAgdGNnX3RlbXBfZnJlZV9pMzIoaGVscGVyX3RtcCk7Cit9 CisKK3ZvaWQgZ2VuX2V4Y2VwdGlvbl9kZWJ1Zyh2b2lkKQoreworICAgIGdlbl9leGNlcHRpb24o RVhDUF9ERUJVRyk7Cit9CisKKyNpZiBIRVhfREVCVUcKKyNkZWZpbmUgUEFDS0VUX0JVRkZFUl9M RU4gICAgICAgICAgICAgIDEwMjgKK3N0YXRpYyB2b2lkIHByaW50X3BrdChwYWNrZXRfdCAqcGt0 KQoreworICAgIGNoYXIgYnVmW1BBQ0tFVF9CVUZGRVJfTEVOXTsKKyAgICBzbnByaW50X2FfcGt0 KGJ1ZiwgUEFDS0VUX0JVRkZFUl9MRU4sIHBrdCk7CisgICAgSEVYX0RFQlVHX0xPRygiJXMiLCBi dWYpOworfQorI2RlZmluZSBIRVhfREVCVUdfUFJJTlRfUEtUKHBrdCkgIHByaW50X3BrdChwa3Qp CisjZWxzZQorI2RlZmluZSBIRVhfREVCVUdfUFJJTlRfUEtUKHBrdCkgIC8qIG5vdGhpbmcgKi8K KyNlbmRpZgorCitzdGF0aWMgaW50IHJlYWRfcGFja2V0X3dvcmRzKENQVUhleGFnb25TdGF0ZSAq ZW52LCBEaXNhc0NvbnRleHQgKmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWlu dDMyX3Qgd29yZHNbXSkKK3sKKyAgICBib29sIGZvdW5kX2VuZCA9IGZhbHNlOworICAgIGludCBu d29yZHM7CisKKyAgICBtZW1zZXQod29yZHMsIDAsIFBBQ0tFVF9XT1JEU19NQVggKiBzaXplb2Yo dWludDMyX3QpKTsKKyAgICBmb3IgKG53b3JkcyA9IDA7ICFmb3VuZF9lbmQgJiYgbndvcmRzIDwg UEFDS0VUX1dPUkRTX01BWDsgbndvcmRzKyspIHsKKyAgICAgICAgd29yZHNbbndvcmRzXSA9IGNw dV9sZGxfY29kZShlbnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+YmFz ZS5wY19uZXh0ICsgbndvcmRzICogc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIGZvdW5kX2Vu ZCA9IGlzX3BhY2tldF9lbmQod29yZHNbbndvcmRzXSk7CisgICAgfQorICAgIGlmICghZm91bmRf ZW5kKSB7CisgICAgICAgIC8qIFJlYWQgdG9vIG1hbnkgd29yZHMgd2l0aG91dCBmaW5kaW5nIHRo ZSBlbmQgKi8KKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogQ2hlY2sgZm9yIHBh Z2UgYm91bmRhcnkgY3Jvc3NpbmcgKi8KKyAgICBpbnQgbWF4X3dvcmRzID0gLShjdHgtPmJhc2Uu cGNfbmV4dCB8IFRBUkdFVF9QQUdFX01BU0spIC8gc2l6ZW9mKHVpbnQzMl90KTsKKyAgICBpZiAo bndvcmRzID4gbWF4X3dvcmRzKSB7CisgICAgICAgIC8qIFdlIGNhbiBvbmx5IGNyb3NzIGEgcGFn ZSBib3VuZGFyeSBhdCB0aGUgYmVnaW5uaW5nIG9mIGEgVEIgKi8KKyAgICAgICAgZ19hc3NlcnQo Y3R4LT5iYXNlLm51bV9pbnNucyA9PSAxKTsKKyAgICB9CisKKyAgICBIRVhfREVCVUdfTE9HKCJk ZWNvZGVfcGFja2V0OiBwYyA9IDB4JXhcbiIsIGN0eC0+YmFzZS5wY19uZXh0KTsKKyAgICBIRVhf REVCVUdfTE9HKCIgICAgd29yZHMgPSB7ICIpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbndv cmRzOyBpKyspIHsKKyAgICAgICAgSEVYX0RFQlVHX0xPRygiMHgleCwgIiwgd29yZHNbaV0pOwor ICAgIH0KKyAgICBIRVhfREVCVUdfTE9HKCJ9XG4iKTsKKworICAgIHJldHVybiBud29yZHM7Cit9 CisKK3N0YXRpYyB2b2lkIGdlbl9zdGFydF9wYWNrZXQoRGlzYXNDb250ZXh0ICpjdHgsIHBhY2tl dF90ICpwa3QpCit7CisgICAgdGFyZ2V0X3Vsb25nIG5leHRfUEMgPSBjdHgtPmJhc2UucGNfbmV4 dCArIHBrdC0+ZW5jb2RfcGt0X3NpemVfaW5fYnl0ZXM7CisgICAgaW50IGk7CisKKyAgICAvKiBD bGVhciBvdXQgdGhlIGRpc2Fzc2VtYmx5IGNvbnRleHQgKi8KKyAgICBjdHgtPnJlZ19sb2dfaWR4 ID0gMDsKKyAgICBjdHgtPnByZWdfbG9nX2lkeCA9IDA7CisgICAgZm9yIChpID0gMDsgaSA8IFNU T1JFU19NQVg7IGkrKykgeworICAgICAgICBjdHgtPnN0b3JlX3dpZHRoW2ldID0gMDsKKyAgICB9 CisgICAgdGNnX2dlbl9tb3ZpX3RsKGhleF9wa3RfaGFzX3N0b3JlX3MxLCBwa3QtPnBrdF9oYXNf c3RvcmVfczEpOworCisjaWYgSEVYX0RFQlVHCisgICAgLyogSGFuZHkgcGxhY2UgdG8gc2V0IGEg YnJlYWtwb2ludCBiZWZvcmUgdGhlIHBhY2tldCBleGVjdXRlcyAqLworICAgIGdlbl9oZWxwZXJf ZGVidWdfc3RhcnRfcGFja2V0KGNwdV9lbnYpOworICAgIHRjZ19nZW5fbW92aV90bChoZXhfdGhp c19QQywgY3R4LT5iYXNlLnBjX25leHQpOworI2VuZGlmCisKKyAgICAvKiBJbml0aWFsaXplIHRo ZSBydW50aW1lIHN0YXRlIGZvciBwYWNrZXQgc2VtYW50aWNzICovCisgICAgdGNnX2dlbl9tb3Zp X3RsKGhleF9ncHJbSEVYX1JFR19QQ10sIGN0eC0+YmFzZS5wY19uZXh0KTsKKyAgICB0Y2dfZ2Vu X21vdmlfdGwoaGV4X3Nsb3RfY2FuY2VsbGVkLCAwKTsKKyAgICBpZiAocGt0LT5wa3RfaGFzX2Nv ZikgeworICAgICAgICB0Y2dfZ2VuX21vdmlfdGwoaGV4X2JyYW5jaF90YWtlbiwgMCk7CisgICAg ICAgIHRjZ19nZW5fbW92aV90bChoZXhfbmV4dF9QQywgbmV4dF9QQyk7CisgICAgfQorICAgIHRj Z19nZW5fbW92aV90bChoZXhfcHJlZF93cml0dGVuLCAwKTsKK30KKworLyoKKyAqIFRoZSBMT0df Kl9XUklURSBtYWNyb3MgbWFyayBtb3N0IG9mIHRoZSB3cml0ZXMgaW4gYSBwYWNrZXQKKyAqIEhv d2V2ZXIsIHRoZXJlIGFyZSBzb21lIGltcGxpY2l0IHdyaXRlcyBtYXJrZWQgYXMgYXR0cmlidXRl cworICogb2YgdGhlIGFwcGxpY2FibGUgaW5zdHJ1Y3Rpb25zLgorICovCitzdGF0aWMgdm9pZCBt YXJrX2ltcGxpY2l0X3JlZ193cml0ZShEaXNhc0NvbnRleHQgKmN0eCwgaW5zbl90ICppbnNuLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGF0dHJpYiwgaW50IHJudW0p Cit7CisgICAgaWYgKEdFVF9BVFRSSUIoaW5zbi0+b3Bjb2RlLCBhdHRyaWIpKSB7CisgICAgICAg IGludCBpc19wcmVkaWNhdGVkID0gR0VUX0FUVFJJQihpbnNuLT5vcGNvZGUsIEFfQ09OREVYRUMp OworICAgICAgICBpZiAoaXNfcHJlZGljYXRlZCAmJiAhaXNfcHJlbG9hZGVkKGN0eCwgcm51bSkp IHsKKyAgICAgICAgICAgIHRjZ19nZW5fbW92X3RsKGhleF9uZXdfdmFsdWVbcm51bV0sIGhleF9n cHJbcm51bV0pOworICAgICAgICB9CisKKyAgICAgICAgY3R4LT5yZWdfbG9nW2N0eC0+cmVnX2xv Z19pZHhdID0gcm51bTsKKyAgICAgICAgY3R4LT5yZWdfbG9nX2lkeCsrOworICAgIH0KK30KKwor c3RhdGljIHZvaWQgbWFya19pbXBsaWNpdF9wcmVkX3dyaXRlKERpc2FzQ29udGV4dCAqY3R4LCBp bnNuX3QgKmluc24sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGF0 dHJpYiwgaW50IHBudW0pCit7CisgICAgaWYgKEdFVF9BVFRSSUIoaW5zbi0+b3Bjb2RlLCBhdHRy aWIpKSB7CisgICAgICAgIGN0eC0+cHJlZ19sb2dbY3R4LT5wcmVnX2xvZ19pZHhdID0gcG51bTsK KyAgICAgICAgY3R4LT5wcmVnX2xvZ19pZHgrKzsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIG1h cmtfaW1wbGljaXRfd3JpdGVzKERpc2FzQ29udGV4dCAqY3R4LCBpbnNuX3QgKmluc24pCit7Cisg ICAgbWFya19pbXBsaWNpdF9yZWdfd3JpdGUoY3R4LCBpbnNuLCBBX0lNUExJQ0lUX1dSSVRFU19G UCwgIEhFWF9SRUdfRlApOworICAgIG1hcmtfaW1wbGljaXRfcmVnX3dyaXRlKGN0eCwgaW5zbiwg QV9JTVBMSUNJVF9XUklURVNfU1AsICBIRVhfUkVHX1NQKTsKKyAgICBtYXJrX2ltcGxpY2l0X3Jl Z193cml0ZShjdHgsIGluc24sIEFfSU1QTElDSVRfV1JJVEVTX0xSLCAgSEVYX1JFR19MUik7Cisg ICAgbWFya19pbXBsaWNpdF9yZWdfd3JpdGUoY3R4LCBpbnNuLCBBX0lNUExJQ0lUX1dSSVRFU19M QzAsIEhFWF9SRUdfTEMwKTsKKyAgICBtYXJrX2ltcGxpY2l0X3JlZ193cml0ZShjdHgsIGluc24s IEFfSU1QTElDSVRfV1JJVEVTX1NBMCwgSEVYX1JFR19TQTApOworICAgIG1hcmtfaW1wbGljaXRf cmVnX3dyaXRlKGN0eCwgaW5zbiwgQV9JTVBMSUNJVF9XUklURVNfTEMxLCBIRVhfUkVHX0xDMSk7 CisgICAgbWFya19pbXBsaWNpdF9yZWdfd3JpdGUoY3R4LCBpbnNuLCBBX0lNUExJQ0lUX1dSSVRF U19TQTEsIEhFWF9SRUdfU0ExKTsKKworICAgIG1hcmtfaW1wbGljaXRfcHJlZF93cml0ZShjdHgs IGluc24sIEFfSU1QTElDSVRfV1JJVEVTX1AwLCAwKTsKKyAgICBtYXJrX2ltcGxpY2l0X3ByZWRf d3JpdGUoY3R4LCBpbnNuLCBBX0lNUExJQ0lUX1dSSVRFU19QMSwgMSk7CisgICAgbWFya19pbXBs aWNpdF9wcmVkX3dyaXRlKGN0eCwgaW5zbiwgQV9JTVBMSUNJVF9XUklURVNfUDIsIDIpOworICAg IG1hcmtfaW1wbGljaXRfcHJlZF93cml0ZShjdHgsIGluc24sIEFfSU1QTElDSVRfV1JJVEVTX1Az LCAzKTsKK30KKworc3RhdGljIHZvaWQgZ2VuX2luc24oQ1BVSGV4YWdvblN0YXRlICplbnYsIERp c2FzQ29udGV4dCAqY3R4LAorICAgICAgICAgICAgICAgICAgICAgaW5zbl90ICppbnNuLCBwYWNr ZXRfdCAqcGt0KQoreworICAgIGlmIChpbnNuLT5nZW5lcmF0ZSkgeworICAgICAgICBtYXJrX2lt cGxpY2l0X3dyaXRlcyhjdHgsIGluc24pOworICAgICAgICBpbnNuLT5nZW5lcmF0ZShlbnYsIGN0 eCwgaW5zbiwgcGt0KTsKKyAgICB9IGVsc2UgeworICAgICAgICBnZW5fZXhjZXB0aW9uKEhFWF9F WENQX0lOVkFMSURfT1BDT0RFKTsKKyAgICAgICAgY3R4LT5iYXNlLmlzX2ptcCA9IERJU0FTX05P UkVUVVJOOworICAgIH0KK30KKworLyoKKyAqIEhlbHBlcnMgZm9yIGdlbmVyYXRpbmcgdGhlIHBh Y2tldCBjb21taXQKKyAqLworc3RhdGljIHZvaWQgZ2VuX3JlZ193cml0ZXMoRGlzYXNDb250ZXh0 ICpjdHgpCit7CisgICAgaW50IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgY3R4LT5yZWdfbG9n X2lkeDsgaSsrKSB7CisgICAgICAgIGludCByZWdfbnVtID0gY3R4LT5yZWdfbG9nW2ldOworCisg ICAgICAgIHRjZ19nZW5fbW92X3RsKGhleF9ncHJbcmVnX251bV0sIGhleF9uZXdfdmFsdWVbcmVn X251bV0pOworICAgIH0KK30KKworc3RhdGljIHZvaWQgZ2VuX3ByZWRfd3JpdGVzKERpc2FzQ29u dGV4dCAqY3R4LCBwYWNrZXRfdCAqcGt0KQoreworICAgIC8qIEVhcmx5IGV4aXQgaWYgdGhlIGxv ZyBpcyBlbXB0eSAqLworICAgIGlmICghY3R4LT5wcmVnX2xvZ19pZHgpIHsKKyAgICAgICAgcmV0 dXJuOworICAgIH0KKworICAgIFRDR3YgemVybyA9IHRjZ19jb25zdF90bCgwKTsKKyAgICBUQ0d2 IGNvbnRyb2xfcmVnID0gdGNnX3RlbXBfbmV3KCk7CisgICAgVENHdiBwdmFsID0gdGNnX3RlbXBf bmV3KCk7CisgICAgaW50IGk7CisKKyAgICAvKgorICAgICAqIE9ubHkgZW5kbG9vcCBpbnN0cnVj dGlvbnMgd2lsbCBjb25kaXRpb25hbGx5CisgICAgICogd3JpdGUgYSBwcmVkaWNhdGUuICBJZiB0 aGVyZSBhcmUgbm8gZW5kbG9vcAorICAgICAqIGluc3RydWN0aW9ucywgd2UgY2FuIHVzZSB0aGUg bm9uLWNvbmRpdGlvbmFsCisgICAgICogd3JpdGUgb2YgdGhlIHByZWRpY2F0ZXMuCisgICAgICov CisgICAgaWYgKHBrdC0+cGt0X2hhc19lbmRsb29wKSB7CisgICAgICAgIFRDR3YgcHJlZF93cml0 dGVuID0gdGNnX3RlbXBfbmV3KCk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBjdHgtPnByZWdf bG9nX2lkeDsgaSsrKSB7CisgICAgICAgICAgICBpbnQgcHJlZF9udW0gPSBjdHgtPnByZWdfbG9n W2ldOworCisgICAgICAgICAgICB0Y2dfZ2VuX2FuZGlfdGwocHJlZF93cml0dGVuLCBoZXhfcHJl ZF93cml0dGVuLCAxIDw8IHByZWRfbnVtKTsKKyAgICAgICAgICAgIHRjZ19nZW5fbW92Y29uZF90 bChUQ0dfQ09ORF9ORSwgaGV4X3ByZWRbcHJlZF9udW1dLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHByZWRfd3JpdHRlbiwgemVybywKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBoZXhfbmV3X3ByZWRfdmFsdWVbcHJlZF9udW1dLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGhleF9wcmVkW3ByZWRfbnVtXSk7CisgICAgICAgIH0KKyAgICAgICAgdGNnX3Rl bXBfZnJlZShwcmVkX3dyaXR0ZW4pOworICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAoaSA9IDA7 IGkgPCBjdHgtPnByZWdfbG9nX2lkeDsgaSsrKSB7CisgICAgICAgICAgICBpbnQgcHJlZF9udW0g PSBjdHgtPnByZWdfbG9nW2ldOworICAgICAgICAgICAgdGNnX2dlbl9tb3ZfdGwoaGV4X3ByZWRb cHJlZF9udW1dLCBoZXhfbmV3X3ByZWRfdmFsdWVbcHJlZF9udW1dKTsKKyNpZiBIRVhfREVCVUcK KyAgICAgICAgICAgIC8qIERvIHRoaXMgc28gSEVMUEVSKGRlYnVnX2NvbW1pdF9lbmQpIHdpbGwg a25vdyAqLworICAgICAgICAgICAgdGNnX2dlbl9vcmlfdGwoaGV4X3ByZWRfd3JpdHRlbiwgaGV4 X3ByZWRfd3JpdHRlbiwgMSA8PCBwcmVkX251bSk7CisjZW5kaWYKKyAgICAgICAgfQorICAgIH0K KworICAgIHRjZ190ZW1wX2ZyZWUoemVybyk7CisgICAgdGNnX3RlbXBfZnJlZShjb250cm9sX3Jl Zyk7CisgICAgdGNnX3RlbXBfZnJlZShwdmFsKTsKK30KKworI2lmIEhFWF9ERUJVRworc3RhdGlj IGlubGluZSB2b2lkIGdlbl9jaGVja19zdG9yZV93aWR0aChEaXNhc0NvbnRleHQgKmN0eCwgaW50 IHNsb3RfbnVtKQoreworICAgIFRDR3Ygc2xvdCA9IHRjZ19jb25zdF90bChzbG90X251bSk7Cisg ICAgVENHdiBjaGVjayA9IHRjZ19jb25zdF90bChjdHgtPnN0b3JlX3dpZHRoW3Nsb3RfbnVtXSk7 CisgICAgZ2VuX2hlbHBlcl9kZWJ1Z19jaGVja19zdG9yZV93aWR0aChjcHVfZW52LCBzbG90LCBj aGVjayk7CisgICAgdGNnX3RlbXBfZnJlZShzbG90KTsKKyAgICB0Y2dfdGVtcF9mcmVlKGNoZWNr KTsKK30KKyNkZWZpbmUgSEVYX0RFQlVHX0dFTl9DSEVDS19TVE9SRV9XSURUSChjdHgsIHNsb3Rf bnVtKSBcCisgICAgZ2VuX2NoZWNrX3N0b3JlX3dpZHRoKGN0eCwgc2xvdF9udW0pCisjZWxzZQor I2RlZmluZSBIRVhfREVCVUdfR0VOX0NIRUNLX1NUT1JFX1dJRFRIKGN0eCwgc2xvdF9udW0pICAv KiBub3RoaW5nICovCisjZW5kaWYKKworc3RhdGljIHZvaWQgcHJvY2Vzc19zdG9yZShEaXNhc0Nv bnRleHQgKmN0eCwgaW50IHNsb3RfbnVtKQoreworICAgIFRDR3YgY2FuY2VsbGVkID0gdGNnX3Rl bXBfbmV3KCk7CisgICAgVENHTGFiZWwgKmxhYmVsX2VuZCA9IGdlbl9uZXdfbGFiZWwoKTsKKwor ICAgIC8qIERvbid0IGRvIGFueXRoaW5nIGlmIHRoZSBzbG90IHdhcyBjYW5jZWxsZWQgKi8KKyAg ICB0Y2dfZ2VuX2V4dHJhY3RfdGwoY2FuY2VsbGVkLCBoZXhfc2xvdF9jYW5jZWxsZWQsIHNsb3Rf bnVtLCAxKTsKKyAgICB0Y2dfZ2VuX2JyY29uZGlfdGwoVENHX0NPTkRfTkUsIGNhbmNlbGxlZCwg MCwgbGFiZWxfZW5kKTsKKyAgICB0Y2dfdGVtcF9mcmVlKGNhbmNlbGxlZCk7CisgICAgeworICAg ICAgICBUQ0d2IGFkZHJlc3MgPSB0Y2dfdGVtcF9sb2NhbF9uZXcoKTsKKyAgICAgICAgdGNnX2dl bl9tb3ZfdGwoYWRkcmVzcywgaGV4X3N0b3JlX2FkZHJbc2xvdF9udW1dKTsKKworICAgICAgICAv KgorICAgICAgICAgKiBJZiB3ZSBrbm93IHRoZSB3aWR0aCBmcm9tIHRoZSBEaXNhc0NvbnRleHQs IHdlIGNhbgorICAgICAgICAgKiBnZW5lcmF0ZSBtdWNoIGNsZWFuZXIgY29kZS4KKyAgICAgICAg ICogVW5mb3J0dW5hdGVseSwgbm90IGFsbCBpbnN0cnVjdGlvbnMgZXhlY3V0ZSB0aGUgZlNUT1JF CisgICAgICAgICAqIG1hY3JvIGR1cmluZyBjb2RlIGdlbmVyYXRpb24uICBBbnl0aGluZyB0aGF0 IHVzZXMgdGhlCisgICAgICAgICAqIGdlbmVyaWMgaGVscGVyIHdpbGwgaGF2ZSB0aGlzIHByb2Js ZW0uICBJbnN0cnVjdGlvbnMKKyAgICAgICAgICogdGhhdCB1c2UgZldSQVAgdG8gZ2VuZXJhdGUg cHJvcGVyIFRDRyBjb2RlIHdpbGwgYmUgT0suCisgICAgICAgICAqLworICAgICAgICBzd2l0Y2gg KGN0eC0+c3RvcmVfd2lkdGhbc2xvdF9udW1dKSB7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAg ICAgIEhFWF9ERUJVR19HRU5fQ0hFQ0tfU1RPUkVfV0lEVEgoY3R4LCBzbG90X251bSk7CisgICAg ICAgICAgICB0Y2dfZ2VuX3FlbXVfc3Q4KGhleF9zdG9yZV92YWwzMltzbG90X251bV0sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGhleF9zdG9yZV9hZGRyW3Nsb3RfbnVtXSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5tZW1faWR4KTsKKyAgICAgICAgICAgIGJyZWFr OworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICBIRVhfREVCVUdfR0VOX0NIRUNLX1NUT1JF X1dJRFRIKGN0eCwgc2xvdF9udW0pOworICAgICAgICAgICAgdGNnX2dlbl9xZW11X3N0MTYoaGV4 X3N0b3JlX3ZhbDMyW3Nsb3RfbnVtXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhl eF9zdG9yZV9hZGRyW3Nsb3RfbnVtXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0 eC0+bWVtX2lkeCk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0OgorICAgICAg ICAgICAgSEVYX0RFQlVHX0dFTl9DSEVDS19TVE9SRV9XSURUSChjdHgsIHNsb3RfbnVtKTsKKyAg ICAgICAgICAgIHRjZ19nZW5fcWVtdV9zdDMyKGhleF9zdG9yZV92YWwzMltzbG90X251bV0sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZXhfc3RvcmVfYWRkcltzbG90X251bV0sCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjdHgtPm1lbV9pZHgpOworICAgICAgICAgICAg YnJlYWs7CisgICAgICAgIGNhc2UgODoKKyAgICAgICAgICAgIEhFWF9ERUJVR19HRU5fQ0hFQ0tf U1RPUkVfV0lEVEgoY3R4LCBzbG90X251bSk7CisgICAgICAgICAgICB0Y2dfZ2VuX3FlbXVfc3Q2 NChoZXhfc3RvcmVfdmFsNjRbc2xvdF9udW1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaGV4X3N0b3JlX2FkZHJbc2xvdF9udW1dLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY3R4LT5tZW1faWR4KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0Ogor ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogSWYg d2UgZ2V0IHRvIGhlcmUsIHdlIGRvbid0IGtub3cgdGhlIHdpZHRoIGF0CisgICAgICAgICAgICAg ICAgICogVENHIGdlbmVyYXRpb24gdGltZSwgd2UnbGwgdXNlIGEgaGVscGVyIHRvCisgICAgICAg ICAgICAgICAgICogYXZvaWQgYnJhbmNoaW5nIGJhc2VkIG9uIHRoZSB3aWR0aCBhdCBydW50aW1l LgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIFRDR3Ygc2xvdCA9IHRjZ19j b25zdF90bChzbG90X251bSk7CisgICAgICAgICAgICAgICAgZ2VuX2hlbHBlcl9jb21taXRfc3Rv cmUoY3B1X2Vudiwgc2xvdCk7CisgICAgICAgICAgICAgICAgdGNnX3RlbXBfZnJlZShzbG90KTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICB0Y2dfdGVtcF9mcmVlKGFkZHJlc3Mp OworICAgIH0KKyAgICBnZW5fc2V0X2xhYmVsKGxhYmVsX2VuZCk7Cit9CisKK3N0YXRpYyB2b2lk IHByb2Nlc3Nfc3RvcmVfbG9nKERpc2FzQ29udGV4dCAqY3R4LCBwYWNrZXRfdCAqcGt0KQorewor ICAgIC8qCisgICAgICogIFdoZW4gYSBwYWNrZXQgaGFzIHR3byBzdG9yZXMsIHRoZSBoYXJkd2Fy ZSBwcm9jZXNzZXMKKyAgICAgKiAgc2xvdCAxIGFuZCB0aGVuIHNsb3QgMi4gIFRoaXMgd2lsbCBi ZSBpbXBvcnRhbnQgd2hlbgorICAgICAqICB0aGUgbWVtb3J5IGFjY2Vzc2VzIG92ZXJsYXAuCisg ICAgICovCisgICAgaWYgKHBrdC0+cGt0X2hhc19zdG9yZV9zMSAmJiAhcGt0LT5wa3RfaGFzX2Rj emVyb2EpIHsKKyAgICAgICAgcHJvY2Vzc19zdG9yZShjdHgsIDEpOworICAgIH0KKyAgICBpZiAo cGt0LT5wa3RfaGFzX3N0b3JlX3MwICYmICFwa3QtPnBrdF9oYXNfZGN6ZXJvYSkgeworICAgICAg ICBwcm9jZXNzX3N0b3JlKGN0eCwgMCk7CisgICAgfQorfQorCisvKiBaZXJvIG91dCBhIDMyLWJp dCBjYWNoZSBsaW5lICovCitzdGF0aWMgdm9pZCBwcm9jZXNzX2RjemVyb2EoRGlzYXNDb250ZXh0 ICpjdHgsIHBhY2tldF90ICpwa3QpCit7CisgICAgaWYgKHBrdC0+cGt0X2hhc19kY3plcm9hKSB7 CisgICAgICAgIC8qIFN0b3JlIDMyIGJ5dGVzIG9mIHplcm8gc3RhcnRpbmcgYXQgKGFkZHIgJiB+ MHgxZikgKi8KKyAgICAgICAgVENHdiBhZGRyID0gdGNnX3RlbXBfbmV3KCk7CisgICAgICAgIFRD R3ZfaTY0IHplcm8gPSB0Y2dfY29uc3RfaTY0KDApOworCisgICAgICAgIHRjZ19nZW5fYW5kaV90 bChhZGRyLCBoZXhfZGN6ZXJvX2FkZHIsIH4weDFmKTsKKyAgICAgICAgdGNnX2dlbl9xZW11X3N0 NjQoemVybywgYWRkciwgY3R4LT5tZW1faWR4KTsKKyAgICAgICAgdGNnX2dlbl9hZGRpX3RsKGFk ZHIsIGFkZHIsIDgpOworICAgICAgICB0Y2dfZ2VuX3FlbXVfc3Q2NCh6ZXJvLCBhZGRyLCBjdHgt Pm1lbV9pZHgpOworICAgICAgICB0Y2dfZ2VuX2FkZGlfdGwoYWRkciwgYWRkciwgOCk7CisgICAg ICAgIHRjZ19nZW5fcWVtdV9zdDY0KHplcm8sIGFkZHIsIGN0eC0+bWVtX2lkeCk7CisgICAgICAg IHRjZ19nZW5fYWRkaV90bChhZGRyLCBhZGRyLCA4KTsKKyAgICAgICAgdGNnX2dlbl9xZW11X3N0 NjQoemVybywgYWRkciwgY3R4LT5tZW1faWR4KTsKKworICAgICAgICB0Y2dfdGVtcF9mcmVlKGFk ZHIpOworICAgICAgICB0Y2dfdGVtcF9mcmVlX2k2NCh6ZXJvKTsKKyAgICB9Cit9CisKK3N0YXRp YyB2b2lkIGdlbl9leGVjX2NvdW50ZXJzKHBhY2tldF90ICpwa3QpCit7CisgICAgaW50IG51bV9p bnNucyA9IHBrdC0+bnVtX2luc25zOworICAgIGludCBudW1fcmVhbF9pbnNucyA9IDA7CisgICAg aW50IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX2luc25zOyBpKyspIHsKKyAgICAgICAg aWYgKCFwa3QtPmluc25baV0uaXNfZW5kbG9vcCAmJgorICAgICAgICAgICAgIXBrdC0+aW5zbltp XS5wYXJ0MSAmJgorICAgICAgICAgICAgIUdFVF9BVFRSSUIocGt0LT5pbnNuW2ldLm9wY29kZSwg QV9JVF9OT1ApKSB7CisgICAgICAgICAgICBudW1fcmVhbF9pbnNucysrOworICAgICAgICB9Cisg ICAgfQorCisgICAgdGNnX2dlbl9hZGRpX3RsKGhleF9ncHJbSEVYX1JFR19RRU1VX1BLVF9DTlRd LAorICAgICAgICAgICAgICAgICAgICBoZXhfZ3ByW0hFWF9SRUdfUUVNVV9QS1RfQ05UXSwgMSk7 CisgICAgdGNnX2dlbl9hZGRpX3RsKGhleF9ncHJbSEVYX1JFR19RRU1VX0lOU05fQ05UXSwKKyAg ICAgICAgICAgICAgICAgICAgaGV4X2dwcltIRVhfUkVHX1FFTVVfSU5TTl9DTlRdLCBudW1fcmVh bF9pbnNucyk7Cit9CisKK3N0YXRpYyB2b2lkIGdlbl9jb21taXRfcGFja2V0KERpc2FzQ29udGV4 dCAqY3R4LCBwYWNrZXRfdCAqcGt0KQoreworICAgIGdlbl9yZWdfd3JpdGVzKGN0eCk7CisgICAg Z2VuX3ByZWRfd3JpdGVzKGN0eCwgcGt0KTsKKyAgICBwcm9jZXNzX3N0b3JlX2xvZyhjdHgsIHBr dCk7CisgICAgcHJvY2Vzc19kY3plcm9hKGN0eCwgcGt0KTsKKyAgICBnZW5fZXhlY19jb3VudGVy cyhwa3QpOworI2lmIEhFWF9ERUJVRworICAgIHsKKyAgICAgICAgVENHdiBoYXNfc3QwID0KKyAg ICAgICAgICAgIHRjZ19jb25zdF90bChwa3QtPnBrdF9oYXNfc3RvcmVfczAgJiYgIXBrdC0+cGt0 X2hhc19kY3plcm9hKTsKKyAgICAgICAgVENHdiBoYXNfc3QxID0KKyAgICAgICAgICAgIHRjZ19j b25zdF90bChwa3QtPnBrdF9oYXNfc3RvcmVfczEgJiYgIXBrdC0+cGt0X2hhc19kY3plcm9hKTsK KworICAgICAgICAvKiBIYW5keSBwbGFjZSB0byBzZXQgYSBicmVha3BvaW50IGF0IHRoZSBlbmQg b2YgZXhlY3V0aW9uICovCisgICAgICAgIGdlbl9oZWxwZXJfZGVidWdfY29tbWl0X2VuZChjcHVf ZW52LCBoYXNfc3QwLCBoYXNfc3QxKTsKKworICAgICAgICB0Y2dfdGVtcF9mcmVlKGhhc19zdDAp OworICAgICAgICB0Y2dfdGVtcF9mcmVlKGhhc19zdDEpOworICAgIH0KKyNlbmRpZgorCisgICAg aWYgKHBrdC0+cGt0X2hhc19jb2YpIHsKKyAgICAgICAgY3R4LT5iYXNlLmlzX2ptcCA9IERJU0FT X05PUkVUVVJOOworICAgIH0KK30KKworc3RhdGljIHZvaWQgZGVjb2RlX2FuZF90cmFuc2xhdGVf cGFja2V0KENQVUhleGFnb25TdGF0ZSAqZW52LCBEaXNhc0NvbnRleHQgKmN0eCkKK3sKKyAgICB1 aW50MzJfdCB3b3Jkc1tQQUNLRVRfV09SRFNfTUFYXTsKKyAgICBpbnQgbndvcmRzOworICAgIHBh Y2tldF90IHBrdDsKKyAgICBpbnQgaTsKKworICAgIG53b3JkcyA9IHJlYWRfcGFja2V0X3dvcmRz KGVudiwgY3R4LCB3b3Jkcyk7CisgICAgaWYgKCFud29yZHMpIHsKKyAgICAgICAgZ2VuX2V4Y2Vw dGlvbihIRVhfRVhDUF9JTlZBTElEX1BBQ0tFVCk7CisgICAgICAgIGN0eC0+YmFzZS5pc19qbXAg PSBESVNBU19OT1JFVFVSTjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChkZWNv ZGVfdGhpcyhud29yZHMsIHdvcmRzLCAmcGt0KSkgeworICAgICAgICBIRVhfREVCVUdfUFJJTlRf UEtUKCZwa3QpOworICAgICAgICBnZW5fc3RhcnRfcGFja2V0KGN0eCwgJnBrdCk7CisgICAgICAg IGZvciAoaSA9IDA7IGkgPCBwa3QubnVtX2luc25zOyBpKyspIHsKKyAgICAgICAgICAgIGdlbl9p bnNuKGVudiwgY3R4LCAmcGt0Lmluc25baV0sICZwa3QpOworICAgICAgICB9CisgICAgICAgIGdl bl9jb21taXRfcGFja2V0KGN0eCwgJnBrdCk7CisgICAgICAgIGN0eC0+YmFzZS5wY19uZXh0ICs9 IHBrdC5lbmNvZF9wa3Rfc2l6ZV9pbl9ieXRlczsKKyAgICB9IGVsc2UgeworICAgICAgICBnZW5f ZXhjZXB0aW9uKEhFWF9FWENQX0lOVkFMSURfUEFDS0VUKTsKKyAgICAgICAgY3R4LT5iYXNlLmlz X2ptcCA9IERJU0FTX05PUkVUVVJOOworICAgIH0KK30KKworc3RhdGljIHZvaWQgaGV4YWdvbl90 cl9pbml0X2Rpc2FzX2NvbnRleHQoRGlzYXNDb250ZXh0QmFzZSAqZGNiYXNlLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1BVU3RhdGUgKmNzKQoreworICAgIERp c2FzQ29udGV4dCAqY3R4ID0gY29udGFpbmVyX29mKGRjYmFzZSwgRGlzYXNDb250ZXh0LCBiYXNl KTsKKworICAgIGN0eC0+bWVtX2lkeCA9IE1NVV9VU0VSX0lEWDsKK30KKworc3RhdGljIHZvaWQg aGV4YWdvbl90cl90Yl9zdGFydChEaXNhc0NvbnRleHRCYXNlICpkYiwgQ1BVU3RhdGUgKmNwdSkK K3sKK30KKworc3RhdGljIHZvaWQgaGV4YWdvbl90cl9pbnNuX3N0YXJ0KERpc2FzQ29udGV4dEJh c2UgKmRjYmFzZSwgQ1BVU3RhdGUgKmNwdSkKK3sKKyAgICBEaXNhc0NvbnRleHQgKmN0eCA9IGNv bnRhaW5lcl9vZihkY2Jhc2UsIERpc2FzQ29udGV4dCwgYmFzZSk7CisKKyAgICB0Y2dfZ2VuX2lu c25fc3RhcnQoY3R4LT5iYXNlLnBjX25leHQpOworfQorCitzdGF0aWMgYm9vbCBoZXhhZ29uX3Ry X2JyZWFrcG9pbnRfY2hlY2soRGlzYXNDb250ZXh0QmFzZSAqZGNiYXNlLCBDUFVTdGF0ZSAqY3B1 LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IENQVUJyZWFr cG9pbnQgKmJwKQoreworICAgIERpc2FzQ29udGV4dCAqY3R4ID0gY29udGFpbmVyX29mKGRjYmFz ZSwgRGlzYXNDb250ZXh0LCBiYXNlKTsKKworICAgIHRjZ19nZW5fbW92aV90bChoZXhfZ3ByW0hF WF9SRUdfUENdLCBjdHgtPmJhc2UucGNfbmV4dCk7CisgICAgY3R4LT5iYXNlLmlzX2ptcCA9IERJ U0FTX05PUkVUVVJOOworICAgIGdlbl9leGNlcHRpb25fZGVidWcoKTsKKyAgICAvKgorICAgICAq IFRoZSBhZGRyZXNzIGNvdmVyZWQgYnkgdGhlIGJyZWFrcG9pbnQgbXVzdCBiZSBpbmNsdWRlZCBp bgorICAgICAqIFt0Yi0+cGMsIHRiLT5wYyArIHRiLT5zaXplKSBpbiBvcmRlciB0byBmb3IgaXQg dG8gYmUKKyAgICAgKiBwcm9wZXJseSBjbGVhcmVkIC0tIHRodXMgd2UgaW5jcmVtZW50IHRoZSBQ QyBoZXJlIHNvIHRoYXQKKyAgICAgKiB0aGUgbG9naWMgc2V0dGluZyB0Yi0+c2l6ZSBiZWxvdyBk b2VzIHRoZSByaWdodCB0aGluZy4KKyAgICAgKi8KKyAgICBjdHgtPmJhc2UucGNfbmV4dCArPSA0 OworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBwa3RfY3Jvc3Nlc19wYWdlKENQ VUhleGFnb25TdGF0ZSAqZW52LCBEaXNhc0NvbnRleHQgKmN0eCkKK3sKKyAgICB0YXJnZXRfdWxv bmcgcGFnZV9zdGFydCA9IGN0eC0+YmFzZS5wY19maXJzdCAmIFRBUkdFVF9QQUdFX01BU0s7Cisg ICAgYm9vbCBmb3VuZF9lbmQgPSBmYWxzZTsKKyAgICBpbnQgbndvcmRzOworCisgICAgZm9yIChu d29yZHMgPSAwOyAhZm91bmRfZW5kICYmIG53b3JkcyA8IFBBQ0tFVF9XT1JEU19NQVg7IG53b3Jk cysrKSB7CisgICAgICAgIHVpbnQzMl90IHdvcmQgPSBjcHVfbGRsX2NvZGUoZW52LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGN0eC0+YmFzZS5wY19uZXh0ICsgbndvcmRzICogc2l6ZW9m KHVpbnQzMl90KSk7CisgICAgICAgIGZvdW5kX2VuZCA9IGlzX3BhY2tldF9lbmQod29yZCk7Cisg ICAgfQorICAgIHVpbnQzMl90IG5leHRfcHRyID0gIGN0eC0+YmFzZS5wY19uZXh0ICsgbndvcmRz ICogc2l6ZW9mKHVpbnQzMl90KTsKKyAgICByZXR1cm4gZm91bmRfZW5kICYmIG5leHRfcHRyIC0g cGFnZV9zdGFydCA+PSBUQVJHRVRfUEFHRV9TSVpFOworfQorCitzdGF0aWMgdm9pZCBoZXhhZ29u X3RyX3RyYW5zbGF0ZV9wYWNrZXQoRGlzYXNDb250ZXh0QmFzZSAqZGNiYXNlLCBDUFVTdGF0ZSAq Y3B1KQoreworICAgIERpc2FzQ29udGV4dCAqY3R4ID0gY29udGFpbmVyX29mKGRjYmFzZSwgRGlz YXNDb250ZXh0LCBiYXNlKTsKKyAgICBDUFVIZXhhZ29uU3RhdGUgKmVudiA9IGNwdS0+ZW52X3B0 cjsKKworICAgIGRlY29kZV9hbmRfdHJhbnNsYXRlX3BhY2tldChlbnYsIGN0eCk7CisKKyAgICBp ZiAoY3R4LT5iYXNlLmlzX2ptcCA9PSBESVNBU19ORVhUKSB7CisgICAgICAgIHRhcmdldF91bG9u ZyBwYWdlX3N0YXJ0ID0gY3R4LT5iYXNlLnBjX2ZpcnN0ICYgVEFSR0VUX1BBR0VfTUFTSzsKKyAg ICAgICAgdGFyZ2V0X3Vsb25nIGJ5dGVzX21heCA9IFBBQ0tFVF9XT1JEU19NQVggKiBzaXplb2Yo dGFyZ2V0X3Vsb25nKTsKKworICAgICAgICBpZiAoY3R4LT5iYXNlLnBjX25leHQgLSBwYWdlX3N0 YXJ0ID49IFRBUkdFVF9QQUdFX1NJWkUgfHwKKyAgICAgICAgICAgIChjdHgtPmJhc2UucGNfbmV4 dCAtIHBhZ2Vfc3RhcnQgPj0gVEFSR0VUX1BBR0VfU0laRSAtIGJ5dGVzX21heCAmJgorICAgICAg ICAgICAgIHBrdF9jcm9zc2VzX3BhZ2UoZW52LCBjdHgpKSkgeworICAgICAgICAgICAgY3R4LT5i YXNlLmlzX2ptcCA9IERJU0FTX1RPT19NQU5ZOworICAgICAgICB9CisKKyAgICAgICAgLyoKKyAg ICAgICAgICogVGhlIENQVSBsb2cgaXMgdXNlZCB0byBjb21wYXJlIGFnYWluc3QgTExEQiBzaW5n bGUgc3RlcHBpbmcsCisgICAgICAgICAqIHNvIGVuZCB0aGUgVExCIGFmdGVyIGV2ZXJ5IHBhY2tl dC4KKyAgICAgICAgICovCisgICAgICAgIEhleGFnb25DUFUgKmhleF9jcHUgPSBjb250YWluZXJf b2YoZW52LCBIZXhhZ29uQ1BVLCBlbnYpOworICAgICAgICBpZiAoaGV4X2NwdS0+bGxkYl9jb21w YXQgJiYgcWVtdV9sb2dsZXZlbF9tYXNrKENQVV9MT0dfVEJfQ1BVKSkgeworICAgICAgICAgICAg Y3R4LT5iYXNlLmlzX2ptcCA9IERJU0FTX1RPT19NQU5ZOworICAgICAgICB9CisjaWYgSEVYX0RF QlVHCisgICAgICAgIC8qIFdoZW4gZGVidWdnaW5nLCBvbmx5IHB1dCBvbmUgcGFja2V0IHBlciBU QiAqLworICAgICAgICBjdHgtPmJhc2UuaXNfam1wID0gRElTQVNfVE9PX01BTlk7CisjZW5kaWYK KyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGhleGFnb25fdHJfdGJfc3RvcChEaXNhc0NvbnRleHRC YXNlICpkY2Jhc2UsIENQVVN0YXRlICpjcHUpCit7CisgICAgRGlzYXNDb250ZXh0ICpjdHggPSBj b250YWluZXJfb2YoZGNiYXNlLCBEaXNhc0NvbnRleHQsIGJhc2UpOworCisgICAgc3dpdGNoIChj dHgtPmJhc2UuaXNfam1wKSB7CisgICAgY2FzZSBESVNBU19UT09fTUFOWToKKyAgICAgICAgdGNn X2dlbl9tb3ZpX3RsKGhleF9ncHJbSEVYX1JFR19QQ10sIGN0eC0+YmFzZS5wY19uZXh0KTsKKyAg ICAgICAgaWYgKGN0eC0+YmFzZS5zaW5nbGVzdGVwX2VuYWJsZWQpIHsKKyAgICAgICAgICAgIGdl bl9leGNlcHRpb25fZGVidWcoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRjZ19n ZW5fZXhpdF90YihOVUxMLCAwKTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNl IERJU0FTX05PUkVUVVJOOgorICAgICAgICB0Y2dfZ2VuX21vdl90bChoZXhfZ3ByW0hFWF9SRUdf UENdLCBoZXhfbmV4dF9QQyk7CisgICAgICAgIGlmIChjdHgtPmJhc2Uuc2luZ2xlc3RlcF9lbmFi bGVkKSB7CisgICAgICAgICAgICBnZW5fZXhjZXB0aW9uX2RlYnVnKCk7CisgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICB0Y2dfZ2VuX2V4aXRfdGIoTlVMTCwgMCk7CisgICAgICAgIH0KKyAg ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQo KTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGhleGFnb25fdHJfZGlzYXNfbG9nKGNvbnN0IERp c2FzQ29udGV4dEJhc2UgKmRjYmFzZSwgQ1BVU3RhdGUgKmNwdSkKK3sKKyAgICBxZW11X2xvZygi SU46ICVzXG4iLCBsb29rdXBfc3ltYm9sKGRjYmFzZS0+cGNfZmlyc3QpKTsKKyAgICBsb2dfdGFy Z2V0X2Rpc2FzKGNwdSwgZGNiYXNlLT5wY19maXJzdCwgZGNiYXNlLT50Yi0+c2l6ZSk7Cit9CisK Kworc3RhdGljIGNvbnN0IFRyYW5zbGF0b3JPcHMgaGV4YWdvbl90cl9vcHMgPSB7CisgICAgLmlu aXRfZGlzYXNfY29udGV4dCA9IGhleGFnb25fdHJfaW5pdF9kaXNhc19jb250ZXh0LAorICAgIC50 Yl9zdGFydCAgICAgICAgICAgPSBoZXhhZ29uX3RyX3RiX3N0YXJ0LAorICAgIC5pbnNuX3N0YXJ0 ICAgICAgICAgPSBoZXhhZ29uX3RyX2luc25fc3RhcnQsCisgICAgLmJyZWFrcG9pbnRfY2hlY2sg ICA9IGhleGFnb25fdHJfYnJlYWtwb2ludF9jaGVjaywKKyAgICAudHJhbnNsYXRlX2luc24gICAg ID0gaGV4YWdvbl90cl90cmFuc2xhdGVfcGFja2V0LAorICAgIC50Yl9zdG9wICAgICAgICAgICAg PSBoZXhhZ29uX3RyX3RiX3N0b3AsCisgICAgLmRpc2FzX2xvZyAgICAgICAgICA9IGhleGFnb25f dHJfZGlzYXNfbG9nLAorfTsKKwordm9pZCBnZW5faW50ZXJtZWRpYXRlX2NvZGUoQ1BVU3RhdGUg KmNzLCBUcmFuc2xhdGlvbkJsb2NrICp0YiwgaW50IG1heF9pbnNucykKK3sKKyAgICBEaXNhc0Nv bnRleHQgY3R4OworCisgICAgdHJhbnNsYXRvcl9sb29wKCZoZXhhZ29uX3RyX29wcywgJmN0eC5i YXNlLCBjcywgdGIsIG1heF9pbnNucyk7Cit9CisKKyNkZWZpbmUgTkFNRV9MRU4gICAgICAgICAg ICAgICA2NAorc3RhdGljIGNoYXIgbmV3X3ZhbHVlX25hbWVzW1RPVEFMX1BFUl9USFJFQURfUkVH U11bTkFNRV9MRU5dOworI2lmIEhFWF9ERUJVRworc3RhdGljIGNoYXIgcmVnX3dyaXR0ZW5fbmFt ZXNbVE9UQUxfUEVSX1RIUkVBRF9SRUdTXVtOQU1FX0xFTl07CisjZW5kaWYKK3N0YXRpYyBjaGFy IG5ld19wcmVkX3ZhbHVlX25hbWVzW05VTV9QUkVHU11bTkFNRV9MRU5dOworc3RhdGljIGNoYXIg c3RvcmVfYWRkcl9uYW1lc1tTVE9SRVNfTUFYXVtOQU1FX0xFTl07CitzdGF0aWMgY2hhciBzdG9y ZV93aWR0aF9uYW1lc1tTVE9SRVNfTUFYXVtOQU1FX0xFTl07CitzdGF0aWMgY2hhciBzdG9yZV92 YWwzMl9uYW1lc1tTVE9SRVNfTUFYXVtOQU1FX0xFTl07CitzdGF0aWMgY2hhciBzdG9yZV92YWw2 NF9uYW1lc1tTVE9SRVNfTUFYXVtOQU1FX0xFTl07CisKK3ZvaWQgaGV4YWdvbl90cmFuc2xhdGVf aW5pdCh2b2lkKQoreworICAgIGludCBpOworCisgICAgb3Bjb2RlX2luaXQoKTsKKworI2lmIEhF WF9ERUJVRworICAgIGlmICghcWVtdV9sb2dmaWxlKSB7CisgICAgICAgIHFlbXVfc2V0X2xvZyhx ZW11X2xvZ2xldmVsKTsKKyAgICB9CisjZW5kaWYKKworICAgIGZvciAoaSA9IDA7IGkgPCBUT1RB TF9QRVJfVEhSRUFEX1JFR1M7IGkrKykgeworICAgICAgICBoZXhfZ3ByW2ldID0gdGNnX2dsb2Jh bF9tZW1fbmV3KGNwdV9lbnYsCisgICAgICAgICAgICBvZmZzZXRvZihDUFVIZXhhZ29uU3RhdGUs IGdwcltpXSksCisgICAgICAgICAgICBoZXhhZ29uX3JlZ25hbWVzW2ldKTsKKworICAgICAgICBz bnByaW50ZihuZXdfdmFsdWVfbmFtZXNbaV0sIE5BTUVfTEVOLCAibmV3XyVzIiwgaGV4YWdvbl9y ZWduYW1lc1tpXSk7CisgICAgICAgIGhleF9uZXdfdmFsdWVbaV0gPSB0Y2dfZ2xvYmFsX21lbV9u ZXcoY3B1X2VudiwKKyAgICAgICAgICAgIG9mZnNldG9mKENQVUhleGFnb25TdGF0ZSwgbmV3X3Zh bHVlW2ldKSwKKyAgICAgICAgICAgIG5ld192YWx1ZV9uYW1lc1tpXSk7CisKKyNpZiBIRVhfREVC VUcKKyAgICAgICAgc25wcmludGYocmVnX3dyaXR0ZW5fbmFtZXNbaV0sIE5BTUVfTEVOLCAicmVn X3dyaXR0ZW5fJXMiLAorICAgICAgICAgICAgICAgICBoZXhhZ29uX3JlZ25hbWVzW2ldKTsKKyAg ICAgICAgaGV4X3JlZ193cml0dGVuW2ldID0gdGNnX2dsb2JhbF9tZW1fbmV3KGNwdV9lbnYsCisg ICAgICAgICAgICBvZmZzZXRvZihDUFVIZXhhZ29uU3RhdGUsIHJlZ193cml0dGVuW2ldKSwKKyAg ICAgICAgICAgIHJlZ193cml0dGVuX25hbWVzW2ldKTsKKyNlbmRpZgorICAgIH0KKyAgICBmb3Ig KGkgPSAwOyBpIDwgTlVNX1BSRUdTOyBpKyspIHsKKyAgICAgICAgaGV4X3ByZWRbaV0gPSB0Y2df Z2xvYmFsX21lbV9uZXcoY3B1X2VudiwKKyAgICAgICAgICAgIG9mZnNldG9mKENQVUhleGFnb25T dGF0ZSwgcHJlZFtpXSksCisgICAgICAgICAgICBoZXhhZ29uX3ByZWRuYW1lc1tpXSk7CisKKyAg ICAgICAgc25wcmludGYobmV3X3ByZWRfdmFsdWVfbmFtZXNbaV0sIE5BTUVfTEVOLCAibmV3X3By ZWRfJXMiLAorICAgICAgICAgICAgICAgICBoZXhhZ29uX3ByZWRuYW1lc1tpXSk7CisgICAgICAg IGhleF9uZXdfcHJlZF92YWx1ZVtpXSA9IHRjZ19nbG9iYWxfbWVtX25ldyhjcHVfZW52LAorICAg ICAgICAgICAgb2Zmc2V0b2YoQ1BVSGV4YWdvblN0YXRlLCBuZXdfcHJlZF92YWx1ZVtpXSksCisg ICAgICAgICAgICBuZXdfcHJlZF92YWx1ZV9uYW1lc1tpXSk7CisgICAgfQorICAgIGhleF9wcmVk X3dyaXR0ZW4gPSB0Y2dfZ2xvYmFsX21lbV9uZXcoY3B1X2VudiwKKyAgICAgICAgb2Zmc2V0b2Yo Q1BVSGV4YWdvblN0YXRlLCBwcmVkX3dyaXR0ZW4pLCAicHJlZF93cml0dGVuIik7CisgICAgaGV4 X25leHRfUEMgPSB0Y2dfZ2xvYmFsX21lbV9uZXcoY3B1X2VudiwKKyAgICAgICAgb2Zmc2V0b2Yo Q1BVSGV4YWdvblN0YXRlLCBuZXh0X1BDKSwgIm5leHRfUEMiKTsKKyAgICBoZXhfdGhpc19QQyA9 IHRjZ19nbG9iYWxfbWVtX25ldyhjcHVfZW52LAorICAgICAgICBvZmZzZXRvZihDUFVIZXhhZ29u U3RhdGUsIHRoaXNfUEMpLCAidGhpc19QQyIpOworICAgIGhleF9zbG90X2NhbmNlbGxlZCA9IHRj Z19nbG9iYWxfbWVtX25ldyhjcHVfZW52LAorICAgICAgICBvZmZzZXRvZihDUFVIZXhhZ29uU3Rh dGUsIHNsb3RfY2FuY2VsbGVkKSwgInNsb3RfY2FuY2VsbGVkIik7CisgICAgaGV4X2JyYW5jaF90 YWtlbiA9IHRjZ19nbG9iYWxfbWVtX25ldyhjcHVfZW52LAorICAgICAgICBvZmZzZXRvZihDUFVI ZXhhZ29uU3RhdGUsIGJyYW5jaF90YWtlbiksICJicmFuY2hfdGFrZW4iKTsKKyAgICBoZXhfcGt0 X2hhc19zdG9yZV9zMSA9IHRjZ19nbG9iYWxfbWVtX25ldyhjcHVfZW52LAorICAgICAgICBvZmZz ZXRvZihDUFVIZXhhZ29uU3RhdGUsIHBrdF9oYXNfc3RvcmVfczEpLCAicGt0X2hhc19zdG9yZV9z MSIpOworICAgIGhleF9kY3plcm9fYWRkciA9IHRjZ19nbG9iYWxfbWVtX25ldyhjcHVfZW52LAor ICAgICAgICBvZmZzZXRvZihDUFVIZXhhZ29uU3RhdGUsIGRjemVyb19hZGRyKSwgImRjemVyb19h ZGRyIik7CisgICAgaGV4X2xsc2NfYWRkciA9IHRjZ19nbG9iYWxfbWVtX25ldyhjcHVfZW52LAor ICAgICAgICBvZmZzZXRvZihDUFVIZXhhZ29uU3RhdGUsIGxsc2NfYWRkciksICJsbHNjX2FkZHIi KTsKKyAgICBoZXhfbGxzY192YWwgPSB0Y2dfZ2xvYmFsX21lbV9uZXcoY3B1X2VudiwKKyAgICAg ICAgb2Zmc2V0b2YoQ1BVSGV4YWdvblN0YXRlLCBsbHNjX3ZhbCksICJsbHNjX3ZhbCIpOworICAg IGhleF9sbHNjX3ZhbF9pNjQgPSB0Y2dfZ2xvYmFsX21lbV9uZXdfaTY0KGNwdV9lbnYsCisgICAg ICAgIG9mZnNldG9mKENQVUhleGFnb25TdGF0ZSwgbGxzY192YWxfaTY0KSwgImxsc2NfdmFsX2k2 NCIpOworICAgIGZvciAoaSA9IDA7IGkgPCBTVE9SRVNfTUFYOyBpKyspIHsKKyAgICAgICAgc25w cmludGYoc3RvcmVfYWRkcl9uYW1lc1tpXSwgTkFNRV9MRU4sICJzdG9yZV9hZGRyXyVkIiwgaSk7 CisgICAgICAgIGhleF9zdG9yZV9hZGRyW2ldID0gdGNnX2dsb2JhbF9tZW1fbmV3KGNwdV9lbnYs CisgICAgICAgICAgICBvZmZzZXRvZihDUFVIZXhhZ29uU3RhdGUsIG1lbV9sb2dfc3RvcmVzW2ld LnZhKSwKKyAgICAgICAgICAgIHN0b3JlX2FkZHJfbmFtZXNbaV0pOworCisgICAgICAgIHNucHJp bnRmKHN0b3JlX3dpZHRoX25hbWVzW2ldLCBOQU1FX0xFTiwgInN0b3JlX3dpZHRoXyVkIiwgaSk7 CisgICAgICAgIGhleF9zdG9yZV93aWR0aFtpXSA9IHRjZ19nbG9iYWxfbWVtX25ldyhjcHVfZW52 LAorICAgICAgICAgICAgb2Zmc2V0b2YoQ1BVSGV4YWdvblN0YXRlLCBtZW1fbG9nX3N0b3Jlc1tp XS53aWR0aCksCisgICAgICAgICAgICBzdG9yZV93aWR0aF9uYW1lc1tpXSk7CisKKyAgICAgICAg c25wcmludGYoc3RvcmVfdmFsMzJfbmFtZXNbaV0sIE5BTUVfTEVOLCAic3RvcmVfdmFsMzJfJWQi LCBpKTsKKyAgICAgICAgaGV4X3N0b3JlX3ZhbDMyW2ldID0gdGNnX2dsb2JhbF9tZW1fbmV3KGNw dV9lbnYsCisgICAgICAgICAgICBvZmZzZXRvZihDUFVIZXhhZ29uU3RhdGUsIG1lbV9sb2dfc3Rv cmVzW2ldLmRhdGEzMiksCisgICAgICAgICAgICBzdG9yZV92YWwzMl9uYW1lc1tpXSk7CisKKyAg ICAgICAgc25wcmludGYoc3RvcmVfdmFsNjRfbmFtZXNbaV0sIE5BTUVfTEVOLCAic3RvcmVfdmFs NjRfJWQiLCBpKTsKKyAgICAgICAgaGV4X3N0b3JlX3ZhbDY0W2ldID0gdGNnX2dsb2JhbF9tZW1f bmV3X2k2NChjcHVfZW52LAorICAgICAgICAgICAgb2Zmc2V0b2YoQ1BVSGV4YWdvblN0YXRlLCBt ZW1fbG9nX3N0b3Jlc1tpXS5kYXRhNjQpLAorICAgICAgICAgICAgc3RvcmVfdmFsNjRfbmFtZXNb aV0pOworICAgIH0KK30KLS0gCjIuNy40Cgo=