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=-9.6 required=3.0 tests=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 7AF45C3F2CD for ; Fri, 28 Feb 2020 17:18:38 +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 38E79246A2 for ; Fri, 28 Feb 2020 17:18:38 +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="Onr30Cir" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 38E79246A2 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]:51140 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j7jHZ-0006Hn-C2 for qemu-devel@archiver.kernel.org; Fri, 28 Feb 2020 12:18:37 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:58626) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j7imS-0005sI-Hh for qemu-devel@nongnu.org; Fri, 28 Feb 2020 11:46:31 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j7imP-0007Sr-0n for qemu-devel@nongnu.org; Fri, 28 Feb 2020 11:46:28 -0500 Received: from alexa-out-sd-01.qualcomm.com ([199.106.114.38]:13235) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j7imL-0005U6-5f for qemu-devel@nongnu.org; Fri, 28 Feb 2020 11:46:22 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1582908381; x=1614444381; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=/+qcbcQjmqrzLTqTjCZoiRd0csQBkuFop74v+70w62M=; b=Onr30Cir3uHSewAfbVEomShPty80U23fWSv/evhqYmhwXOKVEYftOkU4 0Bejc4h+wUIeAy8t14eYdqDGXCGbST0XiIiPCmqdQusBf+i38hoZcQSq5 kvNsM+Im+mbhEjC5dbVbUo0L6yA0LEQQQtajoZp4axUvPlg/Ay3Ka030k 4=; Received: from unknown (HELO ironmsg-SD-alpha.qualcomm.com) ([10.53.140.30]) by alexa-out-sd-01.qualcomm.com with ESMTP; 28 Feb 2020 08:44:32 -0800 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 Feb 2020 08:44:32 -0800 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id 3821E1191; Fri, 28 Feb 2020 10:44:32 -0600 (CST) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [RFC PATCH v2 51/67] Hexagon translation Date: Fri, 28 Feb 2020 10:43:47 -0600 Message-Id: <1582908244-304-52-git-send-email-tsimpson@quicinc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1582908244-304-1-git-send-email-tsimpson@quicinc.com> References: <1582908244-304-1-git-send-email-tsimpson@quicinc.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 X-detected-operating-system: by eggs.gnu.org: FreeBSD 9.x [fuzzy] X-Received-From: 199.106.114.38 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: riku.voipio@iki.fi, richard.henderson@linaro.org, laurent@vivier.eu, Taylor Simpson , 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 fCAgODIgKysrKysKIHRhcmdldC9oZXhhZ29uL3RyYW5zbGF0ZS5jIHwgNzI4ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCA4MTAg aW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRhcmdldC9oZXhhZ29uL3RyYW5zbGF0 ZS5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGFyZ2V0L2hleGFnb24vdHJhbnNsYXRlLmMKCmRpZmYg LS1naXQgYS90YXJnZXQvaGV4YWdvbi90cmFuc2xhdGUuaCBiL3RhcmdldC9oZXhhZ29uL3RyYW5z bGF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1YjcyMWUKLS0tIC9k ZXYvbnVsbAorKysgYi90YXJnZXQvaGV4YWdvbi90cmFuc2xhdGUuaApAQCAtMCwwICsxLDgyIEBA CisvKgorICogIENvcHlyaWdodChjKSAyMDE5LTIwMjAgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50 ZXIsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZy ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBp dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1 Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJz aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3 aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UK KyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251 Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpZm5kZWYgSEVYQUdPTl9UUkFOU0xBVEVfSAorI2Rl ZmluZSBIRVhBR09OX1RSQU5TTEFURV9ICisKKyNpbmNsdWRlICJjcHUuaCIKKyNpbmNsdWRlICJl eGVjL3RyYW5zbGF0b3IuaCIKKyNpbmNsdWRlICJleGVjL2hlbHBlci1wcm90by5oIgorI2luY2x1 ZGUgImV4ZWMvaGVscGVyLWdlbi5oIgorI2luY2x1ZGUgImludGVybmFsLmgiCisKK3R5cGVkZWYg c3RydWN0IERpc2FzQ29udGV4dCB7CisgICAgRGlzYXNDb250ZXh0QmFzZSBiYXNlOworICAgIHVp bnQzMl90IG1lbV9pZHg7CisgICAgaW50IGN0eF9yZWdfbG9nW1JFR19XUklURVNfTUFYXTsKKyAg ICBpbnQgY3R4X3JlZ19sb2dfaWR4OworICAgIGludCBjdHhfcHJlZ19sb2dbUFJFRF9XUklURVNf TUFYXTsKKyAgICBpbnQgY3R4X3ByZWdfbG9nX2lkeDsKKyAgICB1aW50OF90IGN0eF9zdG9yZV93 aWR0aFtTVE9SRVNfTUFYXTsKK30gRGlzYXNDb250ZXh0OworCitzdGF0aWMgaW5saW5lIHZvaWQg Y3R4X2xvZ19yZWdfd3JpdGUoRGlzYXNDb250ZXh0ICpjdHgsIGludCBybnVtKQoreworI2lmIEhF WF9ERUJVRworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7IGkgPCBjdHgtPmN0eF9yZWdfbG9n X2lkeDsgaSsrKSB7CisgICAgICAgIGlmIChjdHgtPmN0eF9yZWdfbG9nW2ldID09IHJudW0pIHsK KyAgICAgICAgICAgIEhFWF9ERUJVR19MT0coIldBUk5JTkc6IE11bHRpcGxlIHdyaXRlcyB0byBy JWRcbiIsIHJudW0pOworICAgICAgICB9CisgICAgfQorI2VuZGlmCisgICAgY3R4LT5jdHhfcmVn X2xvZ1tjdHgtPmN0eF9yZWdfbG9nX2lkeF0gPSBybnVtOworICAgIGN0eC0+Y3R4X3JlZ19sb2df aWR4Kys7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBjdHhfbG9nX3ByZWRfd3JpdGUoRGlzYXND b250ZXh0ICpjdHgsIGludCBwbnVtKQoreworICAgIGN0eC0+Y3R4X3ByZWdfbG9nW2N0eC0+Y3R4 X3ByZWdfbG9nX2lkeF0gPSBwbnVtOworICAgIGN0eC0+Y3R4X3ByZWdfbG9nX2lkeCsrOworfQor CitleHRlcm4gVENHdiBoZXhfZ3ByW1RPVEFMX1BFUl9USFJFQURfUkVHU107CitleHRlcm4gVENH diBoZXhfcHJlZFtOVU1fUFJFR1NdOworZXh0ZXJuIFRDR3YgaGV4X25leHRfUEM7CitleHRlcm4g VENHdiBoZXhfdGhpc19QQzsKK2V4dGVybiBUQ0d2IGhleF9zbG90X2NhbmNlbGxlZDsKK2V4dGVy biBUQ0d2IGhleF9icmFuY2hfdGFrZW47CitleHRlcm4gVENHdiBoZXhfbmV3X3ZhbHVlW1RPVEFM X1BFUl9USFJFQURfUkVHU107CitleHRlcm4gVENHdiBoZXhfcmVnX3dyaXR0ZW5bVE9UQUxfUEVS X1RIUkVBRF9SRUdTXTsKK2V4dGVybiBUQ0d2IGhleF9uZXdfcHJlZF92YWx1ZVtOVU1fUFJFR1Nd OworZXh0ZXJuIFRDR3YgaGV4X3ByZWRfd3JpdHRlbjsKK2V4dGVybiBUQ0d2IGhleF9zdG9yZV9h ZGRyW1NUT1JFU19NQVhdOworZXh0ZXJuIFRDR3YgaGV4X3N0b3JlX3dpZHRoW1NUT1JFU19NQVhd OworZXh0ZXJuIFRDR3YgaGV4X3N0b3JlX3ZhbDMyW1NUT1JFU19NQVhdOworZXh0ZXJuIFRDR3Zf aTY0IGhleF9zdG9yZV92YWw2NFtTVE9SRVNfTUFYXTsKK2V4dGVybiBUQ0d2IGhleF9kY3plcm9f YWRkcjsKK2V4dGVybiBUQ0d2IGxsc2NfYWRkcjsKK2V4dGVybiBUQ0d2IGxsc2NfdmFsOworZXh0 ZXJuIFRDR3ZfaTY0IGxsc2NfdmFsX2k2NDsKK2V4dGVybiBUQ0d2IGhleF9pc19nYXRoZXJfc3Rv cmVfaW5zbjsKK2V4dGVybiBUQ0d2IGhleF9nYXRoZXJfaXNzdWVkOworCit2b2lkIGhleGFnb25f dHJhbnNsYXRlX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBnZW5fZXhjZXB0aW9uKGludCBleGNw KTsKK2V4dGVybiB2b2lkIGdlbl9leGNlcHRpb25fZGVidWcodm9pZCk7CisKKyNlbmRpZgpkaWZm IC0tZ2l0IGEvdGFyZ2V0L2hleGFnb24vdHJhbnNsYXRlLmMgYi90YXJnZXQvaGV4YWdvbi90cmFu c2xhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41N2FiMjk0Ci0tLSAv ZGV2L251bGwKKysrIGIvdGFyZ2V0L2hleGFnb24vdHJhbnNsYXRlLmMKQEAgLTAsMCArMSw3Mjgg QEAKKy8qCisgKiAgQ29weXJpZ2h0KGMpIDIwMTktMjAyMCBRdWFsY29tbSBJbm5vdmF0aW9uIENl bnRlciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMg ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICog IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZl cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0cDovL3d3dy5n bnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2RlZmluZSBRRU1VX0dFTkVSQVRFCisjaW5jbHVk ZSAicWVtdS9vc2RlcC5oIgorI2luY2x1ZGUgImNwdS5oIgorI2luY2x1ZGUgInRjZy90Y2ctb3Au aCIKKyNpbmNsdWRlICJleGVjL2NwdV9sZHN0LmgiCisjaW5jbHVkZSAiZXhlYy9sb2cuaCIKKyNp bmNsdWRlICJpbnRlcm5hbC5oIgorI2luY2x1ZGUgImF0dHJpYnMuaCIKKyNpbmNsdWRlICJpbnNu LmgiCisjaW5jbHVkZSAiZGVjb2RlLmgiCisjaW5jbHVkZSAidHJhbnNsYXRlLmgiCisjaW5jbHVk ZSAicHJpbnRpbnNuLmgiCisjaW5jbHVkZSAibWFjcm9zLmgiCisKK1RDR3YgaGV4X2dwcltUT1RB TF9QRVJfVEhSRUFEX1JFR1NdOworVENHdiBoZXhfcHJlZFtOVU1fUFJFR1NdOworVENHdiBoZXhf bmV4dF9QQzsKK1RDR3YgaGV4X3RoaXNfUEM7CitUQ0d2IGhleF9zbG90X2NhbmNlbGxlZDsKK1RD R3YgaGV4X2JyYW5jaF90YWtlbjsKK1RDR3YgaGV4X25ld192YWx1ZVtUT1RBTF9QRVJfVEhSRUFE X1JFR1NdOworI2lmIEhFWF9ERUJVRworVENHdiBoZXhfcmVnX3dyaXR0ZW5bVE9UQUxfUEVSX1RI UkVBRF9SRUdTXTsKKyNlbmRpZgorVENHdiBoZXhfbmV3X3ByZWRfdmFsdWVbTlVNX1BSRUdTXTsK K1RDR3YgaGV4X3ByZWRfd3JpdHRlbjsKK1RDR3YgaGV4X3N0b3JlX2FkZHJbU1RPUkVTX01BWF07 CitUQ0d2IGhleF9zdG9yZV93aWR0aFtTVE9SRVNfTUFYXTsKK1RDR3YgaGV4X3N0b3JlX3ZhbDMy W1NUT1JFU19NQVhdOworVENHdl9pNjQgaGV4X3N0b3JlX3ZhbDY0W1NUT1JFU19NQVhdOworVENH diBoZXhfZGN6ZXJvX2FkZHI7CitUQ0d2IGxsc2NfYWRkcjsKK1RDR3YgbGxzY192YWw7CitUQ0d2 X2k2NCBsbHNjX3ZhbF9pNjQ7CitUQ0d2IGhleF9pc19nYXRoZXJfc3RvcmVfaW5zbjsKK1RDR3Yg aGV4X2dhdGhlcl9pc3N1ZWQ7CisKK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaGV4YWdvbl9w cmVkbmFtZXNbXSA9IHsKKyAgInAwIiwgInAxIiwgInAyIiwgInAzIgorfTsKKwordm9pZCBnZW5f ZXhjZXB0aW9uKGludCBleGNwKQoreworICAgIFRDR3ZfaTMyIGhlbHBlcl90bXAgPSB0Y2dfY29u c3RfaTMyKGV4Y3ApOworICAgIGdlbl9oZWxwZXJfcmFpc2VfZXhjZXB0aW9uKGNwdV9lbnYsIGhl bHBlcl90bXApOworICAgIHRjZ190ZW1wX2ZyZWVfaTMyKGhlbHBlcl90bXApOworfQorCit2b2lk IGdlbl9leGNlcHRpb25fZGVidWcodm9pZCkKK3sKKyAgICBnZW5fZXhjZXB0aW9uKEVYQ1BfREVC VUcpOworfQorCisjaWYgSEVYX0RFQlVHCisjZGVmaW5lIFBBQ0tFVF9CVUZGRVJfTEVOICAgICAg ICAgICAgICAxMDI4CitzdGF0aWMgdm9pZCBwcmludF9wa3QocGFja2V0X3QgKnBrdCkKK3sKKyAg ICBjaGFyIGJ1ZltQQUNLRVRfQlVGRkVSX0xFTl07CisgICAgc25wcmludF9hX3BrdChidWYsIFBB Q0tFVF9CVUZGRVJfTEVOLCBwa3QpOworICAgIEhFWF9ERUJVR19MT0coIiVzIiwgYnVmKTsKK30K KyNkZWZpbmUgSEVYX0RFQlVHX1BSSU5UX1BLVChwa3QpICBwcmludF9wa3QocGt0KQorI2Vsc2UK KyNkZWZpbmUgSEVYX0RFQlVHX1BSSU5UX1BLVChwa3QpICAvKiBub3RoaW5nICovCisjZW5kaWYK Kworc3RhdGljIGludCByZWFkX3BhY2tldF93b3JkcyhDUFVIZXhhZ29uU3RhdGUgKmVudiwgRGlz YXNDb250ZXh0ICpjdHgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHdv cmRzW10pCit7CisgICAgYm9vbCBmb3VuZF9lbmQgPSBmYWxzZTsKKyAgICBpbnQgbWF4X3dvcmRz OworICAgIGludCBud29yZHM7CisgICAgaW50IGk7CisKKyAgICAvKiBNYWtlIHN1cmUgd2UgZG9u J3QgY3Jvc3MgYSBwYWdlIGJvdW5kYXJ5ICovCisgICAgbWF4X3dvcmRzID0gLShjdHgtPmJhc2Uu cGNfbmV4dCB8IFRBUkdFVF9QQUdFX01BU0spIC8gc2l6ZW9mKHVpbnQzMl90KTsKKyAgICBpZiAo bWF4X3dvcmRzIDwgUEFDS0VUX1dPUkRTX01BWCkgeworICAgICAgICAvKiBNaWdodCBjcm9zcyBh IHBhZ2UgYm91bmRhcnkgKi8KKyAgICAgICAgaWYgKGN0eC0+YmFzZS5udW1faW5zbnMgPT0gMSkg eworICAgICAgICAgICAgLyogT0sgaWYgaXQncyB0aGUgZmlyc3QgcGFja2V0IGluIHRoZSBUQiAq LworICAgICAgICAgICAgbWF4X3dvcmRzID0gUEFDS0VUX1dPUkRTX01BWDsKKyAgICAgICAgfQor ICAgIH0gZWxzZSB7CisgICAgICAgIG1heF93b3JkcyA9IFBBQ0tFVF9XT1JEU19NQVg7CisgICAg fQorCisgICAgbWVtc2V0KHdvcmRzLCAwLCBQQUNLRVRfV09SRFNfTUFYICogc2l6ZW9mKHVpbnQz Ml90KSk7CisgICAgZm9yIChud29yZHMgPSAwOyAhZm91bmRfZW5kICYmIG53b3JkcyA8IG1heF93 b3JkczsgbndvcmRzKyspIHsKKyAgICAgICAgd29yZHNbbndvcmRzXSA9IGNwdV9sZGxfY29kZShl bnYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+YmFzZS5wY19uZXh0ICsg bndvcmRzICogc2l6ZW9mKHVpbnQzMl90KSk7CisgICAgICAgIGZvdW5kX2VuZCA9IGlzX3BhY2tl dF9lbmQod29yZHNbbndvcmRzXSk7CisgICAgfQorICAgIGlmICghZm91bmRfZW5kKSB7CisgICAg ICAgIGlmIChud29yZHMgPT0gUEFDS0VUX1dPUkRTX01BWCkgeworICAgICAgICAgICAgLyogUmVh ZCB0b28gbWFueSB3b3JkcyB3aXRob3V0IGZpbmRpbmcgdGhlIGVuZCAqLworICAgICAgICAgICAg Z2VuX2V4Y2VwdGlvbihIRVhfRVhDUF9JTlZBTElEX1BBQ0tFVCk7CisgICAgICAgICAgICBjdHgt PmJhc2UuaXNfam1wID0gRElTQVNfTk9SRVRVUk47CisgICAgICAgICAgICByZXR1cm4gMDsKKyAg ICAgICAgfQorICAgICAgICAvKiBDcm9zc2VzIHBhZ2UgYm91bmRhcnkgLSBkZWZlciB0byBuZXh0 IFRCICovCisgICAgICAgIGN0eC0+YmFzZS5pc19qbXAgPSBESVNBU19UT09fTUFOWTsKKyAgICAg ICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgSEVYX0RFQlVHX0xPRygiZGVjb2RlX3BhY2tldDog cGMgPSAweCV4XG4iLCBjdHgtPmJhc2UucGNfbmV4dCk7CisgICAgSEVYX0RFQlVHX0xPRygiICAg IHdvcmRzID0geyAiKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbndvcmRzOyBpKyspIHsKKyAgICAg ICAgSEVYX0RFQlVHX0xPRygiMHgleCwgIiwgd29yZHNbaV0pOworICAgIH0KKyAgICBIRVhfREVC VUdfTE9HKCJ9XG4iKTsKKworICAgIHJldHVybiBud29yZHM7Cit9CisKK3N0YXRpYyB2b2lkIGdl bl9zdGFydF9wYWNrZXQoRGlzYXNDb250ZXh0ICpjdHgsIHBhY2tldF90ICpwa3QpCit7CisgICAg dGFyZ2V0X3Vsb25nIG5leHRfUEMgPSBjdHgtPmJhc2UucGNfbmV4dCArIHBrdC0+ZW5jb2RfcGt0 X3NpemVfaW5fYnl0ZXM7CisgICAgaW50IGk7CisKKyAgICAvKiBDbGVhciBvdXQgdGhlIGRpc2Fz c2VtYmx5IGNvbnRleHQgKi8KKyAgICBjdHgtPmN0eF9yZWdfbG9nX2lkeCA9IDA7CisgICAgY3R4 LT5jdHhfcHJlZ19sb2dfaWR4ID0gMDsKKyAgICBmb3IgKGkgPSAwOyBpIDwgU1RPUkVTX01BWDsg aSsrKSB7CisgICAgICAgIGN0eC0+Y3R4X3N0b3JlX3dpZHRoW2ldID0gMDsKKyAgICB9CisKKyNp ZiBIRVhfREVCVUcKKyAgICAvKiBIYW5keSBwbGFjZSB0byBzZXQgYSBicmVha3BvaW50IGJlZm9y ZSB0aGUgcGFja2V0IGV4ZWN1dGVzICovCisgICAgZ2VuX2hlbHBlcl9kZWJ1Z19zdGFydF9wYWNr ZXQoY3B1X2Vudik7CisgICAgdGNnX2dlbl9tb3ZpX3RsKGhleF90aGlzX1BDLCBjdHgtPmJhc2Uu cGNfbmV4dCk7CisjZW5kaWYKKworICAgIC8qIEluaXRpYWxpemUgdGhlIHJ1bnRpbWUgc3RhdGUg Zm9yIHBhY2tldCBzZW1hbnRpY3MgKi8KKyAgICB0Y2dfZ2VuX21vdmlfdGwoaGV4X2dwcltIRVhf UkVHX1BDXSwgY3R4LT5iYXNlLnBjX25leHQpOworICAgIHRjZ19nZW5fbW92aV90bChoZXhfc2xv dF9jYW5jZWxsZWQsIDApOworICAgIGlmIChwa3QtPnBrdF9oYXNfY29mKSB7CisgICAgICAgIHRj Z19nZW5fbW92aV90bChoZXhfYnJhbmNoX3Rha2VuLCAwKTsKKyAgICAgICAgdGNnX2dlbl9tb3Zp X3RsKGhleF9uZXh0X1BDLCBuZXh0X1BDKTsKKyAgICB9CisgICAgdGNnX2dlbl9tb3ZpX3RsKGhl eF9wcmVkX3dyaXR0ZW4sIDApOworfQorCitzdGF0aWMgaW50IGlzX2dhdGhlcl9zdG9yZV9pbnNu KGluc25fdCAqaW5zbikKK3sKKyAgICBpbnQgY2hlY2sgPSBHRVRfQVRUUklCKGluc24tPm9wY29k ZSwgQV9DVklfTkVXKTsKKyAgICBjaGVjayAmPSAoaW5zbi0+bmV3X3ZhbHVlX3Byb2R1Y2VyX3Ns b3QgPT0gMSk7CisgICAgcmV0dXJuIGNoZWNrOworfQorCisvKgorICogVGhlIExPR18qX1dSSVRF IG1hY3JvcyBtYXJrIG1vc3Qgb2YgdGhlIHdyaXRlcyBpbiBhIHBhY2tldAorICogSG93ZXZlciwg dGhlcmUgYXJlIHNvbWUgaW1wbGljaXQgd3JpdGVzIG1hcmtlZCBhcyBhdHRyaWJ1dGVzCisgKiBv ZiB0aGUgYXBwbGljYWJsZSBpbnN0cnVjdGlvbnMuCisgKi8KK3N0YXRpYyB2b2lkIG1hcmtfaW1w bGljaXRfcmVnX3dyaXRlKERpc2FzQ29udGV4dCAqY3R4LCBpbnNuX3QgKmluc24sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYXR0cmliLCBpbnQgcm51bSkKK3sKKyAg ICBpZiAoR0VUX0FUVFJJQihpbnNuLT5vcGNvZGUsIGF0dHJpYikpIHsKKyAgICAgICAgY3R4LT5j dHhfcmVnX2xvZ1tjdHgtPmN0eF9yZWdfbG9nX2lkeF0gPSBybnVtOworICAgICAgICBjdHgtPmN0 eF9yZWdfbG9nX2lkeCsrOworICAgIH0KK30KKworc3RhdGljIHZvaWQgbWFya19pbXBsaWNpdF9w cmVkX3dyaXRlKERpc2FzQ29udGV4dCAqY3R4LCBpbnNuX3QgKmluc24sCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGF0dHJpYiwgaW50IHBudW0pCit7CisgICAgaWYg KEdFVF9BVFRSSUIoaW5zbi0+b3Bjb2RlLCBhdHRyaWIpKSB7CisgICAgICAgIGN0eC0+Y3R4X3By ZWdfbG9nW2N0eC0+Y3R4X3ByZWdfbG9nX2lkeF0gPSBwbnVtOworICAgICAgICBjdHgtPmN0eF9w cmVnX2xvZ19pZHgrKzsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIG1hcmtfaW1wbGljaXRfd3Jp dGVzKERpc2FzQ29udGV4dCAqY3R4LCBpbnNuX3QgKmluc24pCit7CisgICAgbWFya19pbXBsaWNp dF9yZWdfd3JpdGUoY3R4LCBpbnNuLCBBX0lNUExJQ0lUX1dSSVRFU19MUiwgIEhFWF9SRUdfTFIp OworICAgIG1hcmtfaW1wbGljaXRfcmVnX3dyaXRlKGN0eCwgaW5zbiwgQV9JTVBMSUNJVF9XUklU RVNfTEMwLCBIRVhfUkVHX0xDMCk7CisgICAgbWFya19pbXBsaWNpdF9yZWdfd3JpdGUoY3R4LCBp bnNuLCBBX0lNUExJQ0lUX1dSSVRFU19TQTAsIEhFWF9SRUdfU0EwKTsKKyAgICBtYXJrX2ltcGxp Y2l0X3JlZ193cml0ZShjdHgsIGluc24sIEFfSU1QTElDSVRfV1JJVEVTX0xDMSwgSEVYX1JFR19M QzEpOworICAgIG1hcmtfaW1wbGljaXRfcmVnX3dyaXRlKGN0eCwgaW5zbiwgQV9JTVBMSUNJVF9X UklURVNfU0ExLCBIRVhfUkVHX1NBMSk7CisKKyAgICBtYXJrX2ltcGxpY2l0X3ByZWRfd3JpdGUo Y3R4LCBpbnNuLCBBX0lNUExJQ0lUX1dSSVRFU19QMCwgMCk7CisgICAgbWFya19pbXBsaWNpdF9w cmVkX3dyaXRlKGN0eCwgaW5zbiwgQV9JTVBMSUNJVF9XUklURVNfUDEsIDEpOworICAgIG1hcmtf aW1wbGljaXRfcHJlZF93cml0ZShjdHgsIGluc24sIEFfSU1QTElDSVRfV1JJVEVTX1AyLCAyKTsK KyAgICBtYXJrX2ltcGxpY2l0X3ByZWRfd3JpdGUoY3R4LCBpbnNuLCBBX0lNUExJQ0lUX1dSSVRF U19QMywgMyk7Cit9CisKK3N0YXRpYyB2b2lkIGdlbl9pbnNuKENQVUhleGFnb25TdGF0ZSAqZW52 LCBEaXNhc0NvbnRleHQgKmN0eCwgaW5zbl90ICppbnNuKQoreworICAgIGlmIChpbnNuLT5nZW5l cmF0ZSkgeworICAgICAgICBib29sIGlzX2dhdGhlcl9zdG9yZSA9IGlzX2dhdGhlcl9zdG9yZV9p bnNuKGluc24pOworICAgICAgICBpZiAoaXNfZ2F0aGVyX3N0b3JlKSB7CisgICAgICAgICAgICB0 Y2dfZ2VuX21vdmlfdGwoaGV4X2lzX2dhdGhlcl9zdG9yZV9pbnNuLCAxKTsKKyAgICAgICAgfQor ICAgICAgICBpbnNuLT5nZW5lcmF0ZShlbnYsIGN0eCwgaW5zbik7CisgICAgICAgIG1hcmtfaW1w bGljaXRfd3JpdGVzKGN0eCwgaW5zbik7CisgICAgICAgIGlmIChpc19nYXRoZXJfc3RvcmUpIHsK KyAgICAgICAgICAgIHRjZ19nZW5fbW92aV90bChoZXhfaXNfZ2F0aGVyX3N0b3JlX2luc24sIDAp OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZ2VuX2V4Y2VwdGlvbihIRVhfRVhD UF9JTlZBTElEX09QQ09ERSk7CisgICAgICAgIGN0eC0+YmFzZS5pc19qbXAgPSBESVNBU19OT1JF VFVSTjsKKyAgICB9Cit9CisKKy8qCisgKiBIZWxwZXJzIGZvciBnZW5lcmF0aW5nIHRoZSBwYWNr ZXQgY29tbWl0CisgKi8KK3N0YXRpYyB2b2lkIGdlbl9yZWdfd3JpdGVzKERpc2FzQ29udGV4dCAq Y3R4KQoreworICAgIGludCBpOworCisgICAgZm9yIChpID0gMDsgaSA8IGN0eC0+Y3R4X3JlZ19s b2dfaWR4OyBpKyspIHsKKyAgICAgICAgaW50IHJlZ19udW0gPSBjdHgtPmN0eF9yZWdfbG9nW2ld OworCisgICAgICAgIHRjZ19nZW5fbW92X3RsKGhleF9ncHJbcmVnX251bV0sIGhleF9uZXdfdmFs dWVbcmVnX251bV0pOworICAgIH0KK30KKworc3RhdGljIHZvaWQgZ2VuX3ByZWRfd3JpdGVzKERp c2FzQ29udGV4dCAqY3R4LCBwYWNrZXRfdCAqcGt0KQoreworICAgIC8qIEVhcmx5IGV4aXQgaWYg dGhlIGxvZyBpcyBlbXB0eSAqLworICAgIGlmICghY3R4LT5jdHhfcHJlZ19sb2dfaWR4KSB7Cisg ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBUQ0d2IHplcm8gPSB0Y2dfY29uc3RfdGwoMCk7 CisgICAgVENHdiBjb250cm9sX3JlZyA9IHRjZ190ZW1wX25ldygpOworICAgIFRDR3YgcHZhbCA9 IHRjZ190ZW1wX25ldygpOworICAgIGludCBpOworCisgICAgLyoKKyAgICAgKiBPbmx5IGVuZGxv b3AgaW5zdHJ1Y3Rpb25zIHdpbGwgY29uZGl0aW9uYWxseQorICAgICAqIHdyaXRlIGEgcHJlZGlj YXRlLiAgSWYgdGhlcmUgYXJlIG5vIGVuZGxvb3AKKyAgICAgKiBpbnN0cnVjdGlvbnMsIHdlIGNh biB1c2UgdGhlIG5vbi1jb25kaXRpb25hbAorICAgICAqIHdyaXRlIG9mIHRoZSBwcmVkaWNhdGVz LgorICAgICAqLworICAgIGlmIChwa3QtPnBrdF9oYXNfZW5kbG9vcCkgeworICAgICAgICBUQ0d2 IHByZWRfd3JpdHRlbiA9IHRjZ190ZW1wX25ldygpOworICAgICAgICBmb3IgKGkgPSAwOyBpIDwg Y3R4LT5jdHhfcHJlZ19sb2dfaWR4OyBpKyspIHsKKyAgICAgICAgICAgIGludCBwcmVkX251bSA9 IGN0eC0+Y3R4X3ByZWdfbG9nW2ldOworCisgICAgICAgICAgICB0Y2dfZ2VuX2FuZGlfdGwocHJl ZF93cml0dGVuLCBoZXhfcHJlZF93cml0dGVuLCAxIDw8IHByZWRfbnVtKTsKKyAgICAgICAgICAg IHRjZ19nZW5fbW92Y29uZF90bChUQ0dfQ09ORF9ORSwgaGV4X3ByZWRbcHJlZF9udW1dLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWRfd3JpdHRlbiwgemVybywKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBoZXhfbmV3X3ByZWRfdmFsdWVbcHJlZF9udW1dLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleF9wcmVkW3ByZWRfbnVtXSk7CisgICAgICAg IH0KKyAgICAgICAgdGNnX3RlbXBfZnJlZShwcmVkX3dyaXR0ZW4pOworICAgIH0gZWxzZSB7Cisg ICAgICAgIGZvciAoaSA9IDA7IGkgPCBjdHgtPmN0eF9wcmVnX2xvZ19pZHg7IGkrKykgeworICAg ICAgICAgICAgaW50IHByZWRfbnVtID0gY3R4LT5jdHhfcHJlZ19sb2dbaV07CisgICAgICAgICAg ICB0Y2dfZ2VuX21vdl90bChoZXhfcHJlZFtwcmVkX251bV0sIGhleF9uZXdfcHJlZF92YWx1ZVtw cmVkX251bV0pOworI2lmIEhFWF9ERUJVRworICAgICAgICAgICAgLyogRG8gdGhpcyBzbyBIRUxQ RVIoZGVidWdfY29tbWl0X2VuZCkgd2lsbCBrbm93ICovCisgICAgICAgICAgICB0Y2dfZ2VuX29y aV90bChoZXhfcHJlZF93cml0dGVuLCBoZXhfcHJlZF93cml0dGVuLCAxIDw8IHByZWRfbnVtKTsK KyNlbmRpZgorICAgICAgICB9CisgICAgfQorCisgICAgdGNnX3RlbXBfZnJlZSh6ZXJvKTsKKyAg ICB0Y2dfdGVtcF9mcmVlKGNvbnRyb2xfcmVnKTsKKyAgICB0Y2dfdGVtcF9mcmVlKHB2YWwpOwor fQorCisjaWYgSEVYX0RFQlVHCitzdGF0aWMgaW5saW5lIHZvaWQgZ2VuX2NoZWNrX3N0b3JlX3dp ZHRoKERpc2FzQ29udGV4dCAqY3R4LCBpbnQgc2xvdF9udW0pCit7CisgICAgVENHdiBzbG90ID0g dGNnX2NvbnN0X3RsKHNsb3RfbnVtKTsKKyAgICBUQ0d2IGNoZWNrID0gdGNnX2NvbnN0X3RsKGN0 eC0+Y3R4X3N0b3JlX3dpZHRoW3Nsb3RfbnVtXSk7CisgICAgZ2VuX2hlbHBlcl9kZWJ1Z19jaGVj a19zdG9yZV93aWR0aChjcHVfZW52LCBzbG90LCBjaGVjayk7CisgICAgdGNnX3RlbXBfZnJlZShz bG90KTsKKyAgICB0Y2dfdGVtcF9mcmVlKGNoZWNrKTsKK30KKyNkZWZpbmUgSEVYX0RFQlVHX0dF Tl9DSEVDS19TVE9SRV9XSURUSChjdHgsIHNsb3RfbnVtKSBcCisgICAgZ2VuX2NoZWNrX3N0b3Jl X3dpZHRoKGN0eCwgc2xvdF9udW0pCisjZWxzZQorI2RlZmluZSBIRVhfREVCVUdfR0VOX0NIRUNL X1NUT1JFX1dJRFRIKGN0eCwgc2xvdF9udW0pICAvKiBub3RoaW5nICovCisjZW5kaWYKKworc3Rh dGljIHZvaWQgcHJvY2Vzc19zdG9yZShEaXNhc0NvbnRleHQgKmN0eCwgaW50IHNsb3RfbnVtKQor eworICAgIFRDR3YgY2FuY2VsbGVkID0gdGNnX3RlbXBfbG9jYWxfbmV3KCk7CisgICAgVENHTGFi ZWwgKmxhYmVsX2VuZCA9IGdlbl9uZXdfbGFiZWwoKTsKKworICAgIC8qIERvbid0IGRvIGFueXRo aW5nIGlmIHRoZSBzbG90IHdhcyBjYW5jZWxsZWQgKi8KKyAgICBnZW5fc2xvdF9jYW5jZWxsZWRf Y2hlY2soY2FuY2VsbGVkLCBzbG90X251bSk7CisgICAgdGNnX2dlbl9icmNvbmRpX3RsKFRDR19D T05EX05FLCBjYW5jZWxsZWQsIDAsIGxhYmVsX2VuZCk7CisgICAgeworICAgICAgICBpbnQgY3R4 X3dpZHRoID0gY3R4LT5jdHhfc3RvcmVfd2lkdGhbc2xvdF9udW1dOworICAgICAgICBUQ0d2IGFk ZHJlc3MgPSB0Y2dfdGVtcF9sb2NhbF9uZXcoKTsKKyAgICAgICAgdGNnX2dlbl9tb3ZfdGwoYWRk cmVzcywgaGV4X3N0b3JlX2FkZHJbc2xvdF9udW1dKTsKKworICAgICAgICAvKgorICAgICAgICAg KiBJZiB3ZSBrbm93IHRoZSB3aWR0aCBmcm9tIHRoZSBEaXNhc0NvbnRleHQsIHdlIGNhbgorICAg ICAgICAgKiBnZW5lcmF0ZSBtdWNoIGNsZWFuZXIgY29kZS4KKyAgICAgICAgICogVW5mb3J0dW5h dGVseSwgbm90IGFsbCBpbnN0cnVjdGlvbnMgZXhlY3V0ZSB0aGUgZlNUT1JFCisgICAgICAgICAq IG1hY3JvIGR1cmluZyBjb2RlIGdlbmVyYXRpb24uICBBbnl0aGluZyB0aGF0IHVzZXMgdGhlCisg ICAgICAgICAqIGdlbmVyaWMgaGVscGVyIHdpbGwgaGF2ZSB0aGlzIHByb2JsZW0uICBJbnN0cnVj dGlvbnMKKyAgICAgICAgICogdGhhdCB1c2UgZldSQVAgdG8gZ2VuZXJhdGUgcHJvcGVyIFRDRyBj b2RlIHdpbGwgYmUgT0suCisgICAgICAgICAqLworICAgICAgICBpZiAoY3R4X3dpZHRoID09IDEp IHsKKyAgICAgICAgICAgIEhFWF9ERUJVR19HRU5fQ0hFQ0tfU1RPUkVfV0lEVEgoY3R4LCBzbG90 X251bSk7CisgICAgICAgICAgICBUQ0d2IHZhbHVlID0gdGNnX3RlbXBfbmV3KCk7CisgICAgICAg ICAgICB0Y2dfZ2VuX21vdl90bCh2YWx1ZSwgaGV4X3N0b3JlX3ZhbDMyW3Nsb3RfbnVtXSk7Cisg ICAgICAgICAgICB0Y2dfZ2VuX3FlbXVfc3Q4KHZhbHVlLCBhZGRyZXNzLCBjdHgtPm1lbV9pZHgp OworICAgICAgICAgICAgdGNnX3RlbXBfZnJlZSh2YWx1ZSk7CisgICAgICAgIH0gZWxzZSBpZiAo Y3R4X3dpZHRoID09IDIpIHsKKyAgICAgICAgICAgIEhFWF9ERUJVR19HRU5fQ0hFQ0tfU1RPUkVf V0lEVEgoY3R4LCBzbG90X251bSk7CisgICAgICAgICAgICBUQ0d2IHZhbHVlID0gdGNnX3RlbXBf bmV3KCk7CisgICAgICAgICAgICB0Y2dfZ2VuX21vdl90bCh2YWx1ZSwgaGV4X3N0b3JlX3ZhbDMy W3Nsb3RfbnVtXSk7CisgICAgICAgICAgICB0Y2dfZ2VuX3FlbXVfc3QxNih2YWx1ZSwgYWRkcmVz cywgY3R4LT5tZW1faWR4KTsKKyAgICAgICAgICAgIHRjZ190ZW1wX2ZyZWUodmFsdWUpOworICAg ICAgICB9IGVsc2UgaWYgKGN0eF93aWR0aCA9PSA0KSB7CisgICAgICAgICAgICBIRVhfREVCVUdf R0VOX0NIRUNLX1NUT1JFX1dJRFRIKGN0eCwgc2xvdF9udW0pOworICAgICAgICAgICAgVENHdiB2 YWx1ZSA9IHRjZ190ZW1wX25ldygpOworICAgICAgICAgICAgdGNnX2dlbl9tb3ZfdGwodmFsdWUs IGhleF9zdG9yZV92YWwzMltzbG90X251bV0pOworICAgICAgICAgICAgdGNnX2dlbl9xZW11X3N0 MzIodmFsdWUsIGFkZHJlc3MsIGN0eC0+bWVtX2lkeCk7CisgICAgICAgICAgICB0Y2dfdGVtcF9m cmVlKHZhbHVlKTsKKyAgICAgICAgfSBlbHNlIGlmIChjdHhfd2lkdGggPT0gOCkgeworICAgICAg ICAgICAgSEVYX0RFQlVHX0dFTl9DSEVDS19TVE9SRV9XSURUSChjdHgsIHNsb3RfbnVtKTsKKyAg ICAgICAgICAgIFRDR3ZfaTY0IHZhbHVlID0gdGNnX3RlbXBfbmV3X2k2NCgpOworICAgICAgICAg ICAgdGNnX2dlbl9tb3ZfaTY0KHZhbHVlLCBoZXhfc3RvcmVfdmFsNjRbc2xvdF9udW1dKTsKKyAg ICAgICAgICAgIHRjZ19nZW5fcWVtdV9zdDY0KHZhbHVlLCBhZGRyZXNzLCBjdHgtPm1lbV9pZHgp OworICAgICAgICAgICAgdGNnX3RlbXBfZnJlZV9pNjQodmFsdWUpOworICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIElmIHdlIGdldCB0byBoZXJlLCB3ZSBk b24ndCBrbm93IHRoZSB3aWR0aCBhdAorICAgICAgICAgICAgICogVENHIGdlbmVyYXRpb24gdGlt ZSwgd2UnbGwgZ2VuZXJhdGUgYnJhbmNoaW5nCisgICAgICAgICAgICAgKiBiYXNlZCBvbiB0aGUg d2lkdGggYXQgcnVudGltZS4KKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgVENHTGFiZWwg KmxhYmVsX3cyID0gZ2VuX25ld19sYWJlbCgpOworICAgICAgICAgICAgVENHTGFiZWwgKmxhYmVs X3c0ID0gZ2VuX25ld19sYWJlbCgpOworICAgICAgICAgICAgVENHTGFiZWwgKmxhYmVsX3c4ID0g Z2VuX25ld19sYWJlbCgpOworICAgICAgICAgICAgVENHdiB3aWR0aCA9IHRjZ190ZW1wX2xvY2Fs X25ldygpOworCisgICAgICAgICAgICB0Y2dfZ2VuX21vdl90bCh3aWR0aCwgaGV4X3N0b3JlX3dp ZHRoW3Nsb3RfbnVtXSk7CisgICAgICAgICAgICB0Y2dfZ2VuX2JyY29uZGlfdGwoVENHX0NPTkRf TkUsIHdpZHRoLCAxLCBsYWJlbF93Mik7CisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg LyogV2lkdGggaXMgMSBieXRlICovCisgICAgICAgICAgICAgICAgVENHdiB2YWx1ZSA9IHRjZ190 ZW1wX25ldygpOworICAgICAgICAgICAgICAgIHRjZ19nZW5fbW92X3RsKHZhbHVlLCBoZXhfc3Rv cmVfdmFsMzJbc2xvdF9udW1dKTsKKyAgICAgICAgICAgICAgICB0Y2dfZ2VuX3FlbXVfc3Q4KHZh bHVlLCBhZGRyZXNzLCBjdHgtPm1lbV9pZHgpOworICAgICAgICAgICAgICAgIHRjZ19nZW5fYnIo bGFiZWxfZW5kKTsKKyAgICAgICAgICAgICAgICB0Y2dfdGVtcF9mcmVlKHZhbHVlKTsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGdlbl9zZXRfbGFiZWwobGFiZWxfdzIpOworICAgICAgICAg ICAgdGNnX2dlbl9icmNvbmRpX3RsKFRDR19DT05EX05FLCB3aWR0aCwgMiwgbGFiZWxfdzQpOwor ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFdpZHRoIGlzIDIgYnl0ZXMgKi8KKyAg ICAgICAgICAgICAgICBUQ0d2IHZhbHVlID0gdGNnX3RlbXBfbmV3KCk7CisgICAgICAgICAgICAg ICAgdGNnX2dlbl9tb3ZfdGwodmFsdWUsIGhleF9zdG9yZV92YWwzMltzbG90X251bV0pOworICAg ICAgICAgICAgICAgIHRjZ19nZW5fcWVtdV9zdDE2KHZhbHVlLCBhZGRyZXNzLCBjdHgtPm1lbV9p ZHgpOworICAgICAgICAgICAgICAgIHRjZ19nZW5fYnIobGFiZWxfZW5kKTsKKyAgICAgICAgICAg ICAgICB0Y2dfdGVtcF9mcmVlKHZhbHVlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdl bl9zZXRfbGFiZWwobGFiZWxfdzQpOworICAgICAgICAgICAgdGNnX2dlbl9icmNvbmRpX3RsKFRD R19DT05EX05FLCB3aWR0aCwgNCwgbGFiZWxfdzgpOworICAgICAgICAgICAgeworICAgICAgICAg ICAgICAgIC8qIFdpZHRoIGlzIDQgYnl0ZXMgKi8KKyAgICAgICAgICAgICAgICBUQ0d2IHZhbHVl ID0gdGNnX3RlbXBfbmV3KCk7CisgICAgICAgICAgICAgICAgdGNnX2dlbl9tb3ZfdGwodmFsdWUs IGhleF9zdG9yZV92YWwzMltzbG90X251bV0pOworICAgICAgICAgICAgICAgIHRjZ19nZW5fcWVt dV9zdDMyKHZhbHVlLCBhZGRyZXNzLCBjdHgtPm1lbV9pZHgpOworICAgICAgICAgICAgICAgIHRj Z19nZW5fYnIobGFiZWxfZW5kKTsKKyAgICAgICAgICAgICAgICB0Y2dfdGVtcF9mcmVlKHZhbHVl KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdlbl9zZXRfbGFiZWwobGFiZWxfdzgpOwor ICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIC8qIFdpZHRoIGlzIDggYnl0ZXMgKi8KKyAg ICAgICAgICAgICAgICBUQ0d2X2k2NCB2YWx1ZSA9IHRjZ190ZW1wX25ld19pNjQoKTsKKyAgICAg ICAgICAgICAgICB0Y2dfZ2VuX21vdl9pNjQodmFsdWUsIGhleF9zdG9yZV92YWw2NFtzbG90X251 bV0pOworICAgICAgICAgICAgICAgIHRjZ19nZW5fcWVtdV9zdDY0KHZhbHVlLCBhZGRyZXNzLCBj dHgtPm1lbV9pZHgpOworICAgICAgICAgICAgICAgIHRjZ19nZW5fYnIobGFiZWxfZW5kKTsKKyAg ICAgICAgICAgICAgICB0Y2dfdGVtcF9mcmVlX2k2NCh2YWx1ZSk7CisgICAgICAgICAgICB9CisK KyAgICAgICAgICAgIHRjZ190ZW1wX2ZyZWUod2lkdGgpOworICAgICAgICB9CisgICAgICAgIHRj Z190ZW1wX2ZyZWUoYWRkcmVzcyk7CisgICAgfQorICAgIGdlbl9zZXRfbGFiZWwobGFiZWxfZW5k KTsKKworICAgIHRjZ190ZW1wX2ZyZWUoY2FuY2VsbGVkKTsKK30KKworc3RhdGljIHZvaWQgcHJv Y2Vzc19zdG9yZV9sb2coRGlzYXNDb250ZXh0ICpjdHgsIHBhY2tldF90ICpwa3QpCit7CisgICAg LyoKKyAgICAgKiAgV2hlbiBhIHBhY2tldCBoYXMgdHdvIHN0b3JlcywgdGhlIGhhcmR3YXJlIHBy b2Nlc3NlcworICAgICAqICBzbG90IDEgYW5kIHRoZW4gc2xvdCAyLiAgVGhpcyB3aWxsIGJlIGlt cG9ydGFudCB3aGVuCisgICAgICogIHRoZSBtZW1vcnkgYWNjZXNzZXMgb3ZlcmxhcC4KKyAgICAg Ki8KKyAgICBpZiAocGt0LT5wa3RfaGFzX3N0b3JlX3MxICYmICFwa3QtPnBrdF9oYXNfZGN6ZXJv YSkgeworICAgICAgICBwcm9jZXNzX3N0b3JlKGN0eCwgMSk7CisgICAgfQorICAgIGlmIChwa3Qt PnBrdF9oYXNfc3RvcmVfczAgJiYgIXBrdC0+cGt0X2hhc19kY3plcm9hKSB7CisgICAgICAgIHBy b2Nlc3Nfc3RvcmUoY3R4LCAwKTsKKyAgICB9Cit9CisKKy8qIFplcm8gb3V0IGEgMzItYml0IGNh Y2hlIGxpbmUgKi8KK3N0YXRpYyB2b2lkIHByb2Nlc3NfZGN6ZXJvYShEaXNhc0NvbnRleHQgKmN0 eCwgcGFja2V0X3QgKnBrdCkKK3sKKyAgICBpZiAocGt0LT5wa3RfaGFzX2RjemVyb2EpIHsKKyAg ICAgICAgLyogU3RvcmUgMzIgYnl0ZXMgb2YgemVybyBzdGFydGluZyBhdCAoYWRkciAmIH4weDFm KSAqLworICAgICAgICBUQ0d2IGFkZHIgPSB0Y2dfdGVtcF9uZXcoKTsKKyAgICAgICAgVENHdl9p NjQgemVybyA9IHRjZ19jb25zdF9pNjQoMCk7CisKKyAgICAgICAgdGNnX2dlbl9hbmRpX3RsKGFk ZHIsIGhleF9kY3plcm9fYWRkciwgfjB4MWYpOworICAgICAgICB0Y2dfZ2VuX3FlbXVfc3Q2NCh6 ZXJvLCBhZGRyLCBjdHgtPm1lbV9pZHgpOworICAgICAgICB0Y2dfZ2VuX2FkZGlfdGwoYWRkciwg YWRkciwgOCk7CisgICAgICAgIHRjZ19nZW5fcWVtdV9zdDY0KHplcm8sIGFkZHIsIGN0eC0+bWVt X2lkeCk7CisgICAgICAgIHRjZ19nZW5fYWRkaV90bChhZGRyLCBhZGRyLCA4KTsKKyAgICAgICAg dGNnX2dlbl9xZW11X3N0NjQoemVybywgYWRkciwgY3R4LT5tZW1faWR4KTsKKyAgICAgICAgdGNn X2dlbl9hZGRpX3RsKGFkZHIsIGFkZHIsIDgpOworICAgICAgICB0Y2dfZ2VuX3FlbXVfc3Q2NCh6 ZXJvLCBhZGRyLCBjdHgtPm1lbV9pZHgpOworCisgICAgICAgIHRjZ190ZW1wX2ZyZWUoYWRkcik7 CisgICAgICAgIHRjZ190ZW1wX2ZyZWVfaTY0KHplcm8pOworICAgIH0KK30KKworc3RhdGljIGJv b2wgcHJvY2Vzc19jaGFuZ2Vfb2ZfZmxvdyhEaXNhc0NvbnRleHQgKmN0eCwgcGFja2V0X3QgKnBr dCkKK3sKKyAgICBpZiAocGt0LT5wa3RfaGFzX2NvZikgeworICAgICAgICB0Y2dfZ2VuX21vdl90 bChoZXhfZ3ByW0hFWF9SRUdfUENdLCBoZXhfbmV4dF9QQyk7CisgICAgICAgIHJldHVybiB0cnVl OworICAgIH0KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyB2b2lkIGdlbl9leGVjX2Nv dW50ZXJzKHBhY2tldF90ICpwa3QpCit7CisgICAgaW50IG51bV9pbnNucyA9IHBrdC0+bnVtX2lu c25zOworICAgIGludCBudW1fcmVhbF9pbnNucyA9IDA7CisgICAgaW50IGk7CisKKyAgICBmb3Ig KGkgPSAwOyBpIDwgbnVtX2luc25zOyBpKyspIHsKKyAgICAgICAgaWYgKCFwa3QtPmluc25baV0u aXNfZW5kbG9vcCAmJgorICAgICAgICAgICAgIXBrdC0+aW5zbltpXS5wYXJ0MSAmJgorICAgICAg ICAgICAgIUdFVF9BVFRSSUIocGt0LT5pbnNuW2ldLm9wY29kZSwgQV9JVF9OT1ApKSB7CisgICAg ICAgICAgICBudW1fcmVhbF9pbnNucysrOworICAgICAgICB9CisgICAgfQorCisgICAgdGNnX2dl bl9hZGRpX3RsKGhleF9ncHJbSEVYX1JFR19RRU1VX1BLVF9DTlRdLAorICAgICAgICAgICAgICAg ICAgICBoZXhfZ3ByW0hFWF9SRUdfUUVNVV9QS1RfQ05UXSwgMSk7CisgICAgaWYgKG51bV9yZWFs X2luc25zKSB7CisgICAgICAgIHRjZ19nZW5fYWRkaV90bChoZXhfZ3ByW0hFWF9SRUdfUUVNVV9J TlNOX0NOVF0sCisgICAgICAgICAgICAgICAgICAgICAgICBoZXhfZ3ByW0hFWF9SRUdfUUVNVV9J TlNOX0NOVF0sIG51bV9yZWFsX2luc25zKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGdlbl9j b21taXRfcGFja2V0KERpc2FzQ29udGV4dCAqY3R4LCBwYWNrZXRfdCAqcGt0KQoreworICAgIGJv b2wgZW5kX3RiID0gZmFsc2U7CisKKyAgICBnZW5fcmVnX3dyaXRlcyhjdHgpOworICAgIGdlbl9w cmVkX3dyaXRlcyhjdHgsIHBrdCk7CisgICAgcHJvY2Vzc19zdG9yZV9sb2coY3R4LCBwa3QpOwor ICAgIHByb2Nlc3NfZGN6ZXJvYShjdHgsIHBrdCk7CisgICAgZW5kX3RiIHw9IHByb2Nlc3NfY2hh bmdlX29mX2Zsb3coY3R4LCBwa3QpOworICAgIGdlbl9leGVjX2NvdW50ZXJzKHBrdCk7CisjaWYg SEVYX0RFQlVHCisgICAgeworICAgICAgICBUQ0d2IGhhc19zdDAgPQorICAgICAgICAgICAgdGNn X2NvbnN0X3RsKHBrdC0+cGt0X2hhc19zdG9yZV9zMCAmJiAhcGt0LT5wa3RfaGFzX2RjemVyb2Ep OworICAgICAgICBUQ0d2IGhhc19zdDEgPQorICAgICAgICAgICAgdGNnX2NvbnN0X3RsKHBrdC0+ cGt0X2hhc19zdG9yZV9zMSAmJiAhcGt0LT5wa3RfaGFzX2RjemVyb2EpOworCisgICAgICAgIC8q IEhhbmR5IHBsYWNlIHRvIHNldCBhIGJyZWFrcG9pbnQgYXQgdGhlIGVuZCBvZiBleGVjdXRpb24g Ki8KKyAgICAgICAgZ2VuX2hlbHBlcl9kZWJ1Z19jb21taXRfZW5kKGNwdV9lbnYsIGhhc19zdDAs IGhhc19zdDEpOworCisgICAgICAgIHRjZ190ZW1wX2ZyZWUoaGFzX3N0MCk7CisgICAgICAgIHRj Z190ZW1wX2ZyZWUoaGFzX3N0MSk7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAoZW5kX3RiKSB7 CisgICAgICAgIHRjZ19nZW5fZXhpdF90YihOVUxMLCAwKTsKKyAgICAgICAgY3R4LT5iYXNlLmlz X2ptcCA9IERJU0FTX05PUkVUVVJOOworICAgIH0KK30KKworc3RhdGljIHZvaWQgZGVjb2RlX2Fu ZF90cmFuc2xhdGVfcGFja2V0KENQVUhleGFnb25TdGF0ZSAqZW52LCBEaXNhc0NvbnRleHQgKmN0 eCkKK3sKKyAgICB1aW50MzJfdCB3b3Jkc1tQQUNLRVRfV09SRFNfTUFYXTsKKyAgICBpbnQgbndv cmRzOworICAgIHBhY2tldF90IHBrdDsKKyAgICBpbnQgaTsKKworICAgIG53b3JkcyA9IHJlYWRf cGFja2V0X3dvcmRzKGVudiwgY3R4LCB3b3Jkcyk7CisgICAgaWYgKCFud29yZHMpIHsKKyAgICAg ICAgcmV0dXJuOworICAgIH0KKworICAgIGlmIChkZWNvZGVfdGhpcyhud29yZHMsIHdvcmRzLCAm cGt0KSkgeworICAgICAgICBIRVhfREVCVUdfUFJJTlRfUEtUKCZwa3QpOworICAgICAgICBnZW5f c3RhcnRfcGFja2V0KGN0eCwgJnBrdCk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBwa3QubnVt X2luc25zOyBpKyspIHsKKyAgICAgICAgICAgIGdlbl9pbnNuKGVudiwgY3R4LCAmcGt0Lmluc25b aV0pOworICAgICAgICB9CisgICAgICAgIGdlbl9jb21taXRfcGFja2V0KGN0eCwgJnBrdCk7Cisg ICAgICAgIGN0eC0+YmFzZS5wY19uZXh0ICs9IHBrdC5lbmNvZF9wa3Rfc2l6ZV9pbl9ieXRlczsK KyAgICB9IGVsc2UgeworICAgICAgICBnZW5fZXhjZXB0aW9uKEhFWF9FWENQX0lOVkFMSURfUEFD S0VUKTsKKyAgICAgICAgY3R4LT5iYXNlLmlzX2ptcCA9IERJU0FTX05PUkVUVVJOOworICAgIH0K K30KKworc3RhdGljIHZvaWQgaGV4YWdvbl90cl9pbml0X2Rpc2FzX2NvbnRleHQoRGlzYXNDb250 ZXh0QmFzZSAqZGNiYXNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgQ1BVU3RhdGUgKmNzKQoreworICAgIERpc2FzQ29udGV4dCAqY3R4ID0gY29udGFpbmVyX29m KGRjYmFzZSwgRGlzYXNDb250ZXh0LCBiYXNlKTsKKworICAgIGN0eC0+bWVtX2lkeCA9IE1NVV9V U0VSX0lEWDsKK30KKworc3RhdGljIHZvaWQgaGV4YWdvbl90cl90Yl9zdGFydChEaXNhc0NvbnRl eHRCYXNlICpkYiwgQ1BVU3RhdGUgKmNwdSkKK3sKK30KKworc3RhdGljIHZvaWQgaGV4YWdvbl90 cl9pbnNuX3N0YXJ0KERpc2FzQ29udGV4dEJhc2UgKmRjYmFzZSwgQ1BVU3RhdGUgKmNwdSkKK3sK KyAgICBEaXNhc0NvbnRleHQgKmN0eCA9IGNvbnRhaW5lcl9vZihkY2Jhc2UsIERpc2FzQ29udGV4 dCwgYmFzZSk7CisKKyAgICB0Y2dfZ2VuX2luc25fc3RhcnQoY3R4LT5iYXNlLnBjX25leHQpOwor fQorCitzdGF0aWMgYm9vbCBoZXhhZ29uX3RyX2JyZWFrcG9pbnRfY2hlY2soRGlzYXNDb250ZXh0 QmFzZSAqZGNiYXNlLCBDUFVTdGF0ZSAqY3B1LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IENQVUJyZWFrcG9pbnQgKmJwKQoreworICAgIERpc2FzQ29udGV4 dCAqY3R4ID0gY29udGFpbmVyX29mKGRjYmFzZSwgRGlzYXNDb250ZXh0LCBiYXNlKTsKKworICAg IHRjZ19nZW5fbW92aV90bChoZXhfZ3ByW0hFWF9SRUdfUENdLCBjdHgtPmJhc2UucGNfbmV4dCk7 CisgICAgY3R4LT5iYXNlLmlzX2ptcCA9IERJU0FTX05PUkVUVVJOOworICAgIGdlbl9leGNlcHRp b25fZGVidWcoKTsKKyAgICAvKgorICAgICAqIFRoZSBhZGRyZXNzIGNvdmVyZWQgYnkgdGhlIGJy ZWFrcG9pbnQgbXVzdCBiZSBpbmNsdWRlZCBpbgorICAgICAqIFt0Yi0+cGMsIHRiLT5wYyArIHRi LT5zaXplKSBpbiBvcmRlciB0byBmb3IgaXQgdG8gYmUKKyAgICAgKiBwcm9wZXJseSBjbGVhcmVk IC0tIHRodXMgd2UgaW5jcmVtZW50IHRoZSBQQyBoZXJlIHNvIHRoYXQKKyAgICAgKiB0aGUgbG9n aWMgc2V0dGluZyB0Yi0+c2l6ZSBiZWxvdyBkb2VzIHRoZSByaWdodCB0aGluZy4KKyAgICAgKi8K KyAgICBjdHgtPmJhc2UucGNfbmV4dCArPSA0OworICAgIHJldHVybiB0cnVlOworfQorCisKK3N0 YXRpYyB2b2lkIGhleGFnb25fdHJfdHJhbnNsYXRlX3BhY2tldChEaXNhc0NvbnRleHRCYXNlICpk Y2Jhc2UsIENQVVN0YXRlICpjcHUpCit7CisgICAgRGlzYXNDb250ZXh0ICpjdHggPSBjb250YWlu ZXJfb2YoZGNiYXNlLCBEaXNhc0NvbnRleHQsIGJhc2UpOworICAgIENQVUhleGFnb25TdGF0ZSAq ZW52ID0gY3B1LT5lbnZfcHRyOworCisgICAgZGVjb2RlX2FuZF90cmFuc2xhdGVfcGFja2V0KGVu diwgY3R4KTsKKworICAgIGlmIChjdHgtPmJhc2UuaXNfam1wID09IERJU0FTX05FWFQpIHsKKyAg ICAgICAgdGFyZ2V0X3Vsb25nIHBhZ2Vfc3RhcnQ7CisKKyAgICAgICAgcGFnZV9zdGFydCA9IGN0 eC0+YmFzZS5wY19maXJzdCAmIFRBUkdFVF9QQUdFX01BU0s7CisgICAgICAgIGlmIChjdHgtPmJh c2UucGNfbmV4dCAtIHBhZ2Vfc3RhcnQgPj0gVEFSR0VUX1BBR0VfU0laRSkgeworICAgICAgICAg ICAgY3R4LT5iYXNlLmlzX2ptcCA9IERJU0FTX1RPT19NQU5ZOworICAgICAgICB9CisKKyAgICAg ICAgLyoKKyAgICAgICAgICogVGhlIENQVSBsb2cgaXMgdXNlZCB0byBjb21wYXJlIGFnYWluc3Qg TExEQiBzaW5nbGUgc3RlcHBpbmcsCisgICAgICAgICAqIHNvIGVuZCB0aGUgVExCIGFmdGVyIGV2 ZXJ5IHBhY2tldC4KKyAgICAgICAgICovCisgICAgICAgIGlmIChxZW11X2xvZ2xldmVsX21hc2so Q1BVX0xPR19UQl9DUFUpKSB7CisgICAgICAgICAgICBjdHgtPmJhc2UuaXNfam1wID0gRElTQVNf VE9PX01BTlk7CisgICAgICAgIH0KKyNpZiBIRVhfREVCVUcKKyAgICAgICAgLyogV2hlbiBkZWJ1 Z2dpbmcsIG9ubHkgcHV0IG9uZSBwYWNrZXQgcGVyIFRCICovCisgICAgICAgIGN0eC0+YmFzZS5p c19qbXAgPSBESVNBU19UT09fTUFOWTsKKyNlbmRpZgorICAgIH0KK30KKworc3RhdGljIHZvaWQg aGV4YWdvbl90cl90Yl9zdG9wKERpc2FzQ29udGV4dEJhc2UgKmRjYmFzZSwgQ1BVU3RhdGUgKmNw dSkKK3sKKyAgICBEaXNhc0NvbnRleHQgKmN0eCA9IGNvbnRhaW5lcl9vZihkY2Jhc2UsIERpc2Fz Q29udGV4dCwgYmFzZSk7CisKKyAgICBzd2l0Y2ggKGN0eC0+YmFzZS5pc19qbXApIHsKKyAgICBj YXNlIERJU0FTX1RPT19NQU5ZOgorICAgICAgICB0Y2dfZ2VuX21vdmlfdGwoaGV4X2dwcltIRVhf UkVHX1BDXSwgY3R4LT5iYXNlLnBjX25leHQpOworICAgICAgICBpZiAoY3R4LT5iYXNlLnNpbmds ZXN0ZXBfZW5hYmxlZCkgeworICAgICAgICAgICAgZ2VuX2V4Y2VwdGlvbl9kZWJ1ZygpOworICAg ICAgICB9IGVsc2UgeworICAgICAgICAgICAgdGNnX2dlbl9leGl0X3RiKE5VTEwsIDApOworICAg ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgRElTQVNfTk9SRVRVUk46CisgICAgICAg IGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7Cisg ICAgfQorfQorCitzdGF0aWMgdm9pZCBoZXhhZ29uX3RyX2Rpc2FzX2xvZyhjb25zdCBEaXNhc0Nv bnRleHRCYXNlICpkY2Jhc2UsIENQVVN0YXRlICpjcHUpCit7CisgICAgcWVtdV9sb2coIklOOiAl c1xuIiwgbG9va3VwX3N5bWJvbChkY2Jhc2UtPnBjX2ZpcnN0KSk7CisgICAgbG9nX3RhcmdldF9k aXNhcyhjcHUsIGRjYmFzZS0+cGNfZmlyc3QsIGRjYmFzZS0+dGItPnNpemUpOworfQorCisKK3N0 YXRpYyBjb25zdCBUcmFuc2xhdG9yT3BzIGhleGFnb25fdHJfb3BzID0geworICAgIC5pbml0X2Rp c2FzX2NvbnRleHQgPSBoZXhhZ29uX3RyX2luaXRfZGlzYXNfY29udGV4dCwKKyAgICAudGJfc3Rh cnQgICAgICAgICAgID0gaGV4YWdvbl90cl90Yl9zdGFydCwKKyAgICAuaW5zbl9zdGFydCAgICAg ICAgID0gaGV4YWdvbl90cl9pbnNuX3N0YXJ0LAorICAgIC5icmVha3BvaW50X2NoZWNrICAgPSBo ZXhhZ29uX3RyX2JyZWFrcG9pbnRfY2hlY2ssCisgICAgLnRyYW5zbGF0ZV9pbnNuICAgICA9IGhl eGFnb25fdHJfdHJhbnNsYXRlX3BhY2tldCwKKyAgICAudGJfc3RvcCAgICAgICAgICAgID0gaGV4 YWdvbl90cl90Yl9zdG9wLAorICAgIC5kaXNhc19sb2cgICAgICAgICAgPSBoZXhhZ29uX3RyX2Rp c2FzX2xvZywKK307CisKK3ZvaWQgZ2VuX2ludGVybWVkaWF0ZV9jb2RlKENQVVN0YXRlICpjcywg VHJhbnNsYXRpb25CbG9jayAqdGIsIGludCBtYXhfaW5zbnMpCit7CisgICAgRGlzYXNDb250ZXh0 IGN0eDsKKworICAgIHRyYW5zbGF0b3JfbG9vcCgmaGV4YWdvbl90cl9vcHMsICZjdHguYmFzZSwg Y3MsIHRiLCBtYXhfaW5zbnMpOworfQorCisjZGVmaW5lIE5BTUVfTEVOICAgICAgICAgICAgICAg NjQKK3N0YXRpYyBjaGFyIG5ld192YWx1ZV9uYW1lc1tUT1RBTF9QRVJfVEhSRUFEX1JFR1NdW05B TUVfTEVOXTsKKyNpZiBIRVhfREVCVUcKK3N0YXRpYyBjaGFyIHJlZ193cml0dGVuX25hbWVzW1RP VEFMX1BFUl9USFJFQURfUkVHU11bTkFNRV9MRU5dOworI2VuZGlmCitzdGF0aWMgY2hhciBuZXdf cHJlZF92YWx1ZV9uYW1lc1tOVU1fUFJFR1NdW05BTUVfTEVOXTsKK3N0YXRpYyBjaGFyIHN0b3Jl X2FkZHJfbmFtZXNbU1RPUkVTX01BWF1bTkFNRV9MRU5dOworc3RhdGljIGNoYXIgc3RvcmVfd2lk dGhfbmFtZXNbU1RPUkVTX01BWF1bTkFNRV9MRU5dOworc3RhdGljIGNoYXIgc3RvcmVfdmFsMzJf bmFtZXNbU1RPUkVTX01BWF1bTkFNRV9MRU5dOworc3RhdGljIGNoYXIgc3RvcmVfdmFsNjRfbmFt ZXNbU1RPUkVTX01BWF1bTkFNRV9MRU5dOworCit2b2lkIGhleGFnb25fdHJhbnNsYXRlX2luaXQo dm9pZCkKK3sKKyAgICBpbnQgaTsKKworICAgIG9wY29kZV9pbml0KCk7CisKKyAgICBmb3IgKGkg PSAwOyBpIDwgVE9UQUxfUEVSX1RIUkVBRF9SRUdTOyBpKyspIHsKKyAgICAgICAgaGV4X2dwcltp XSA9IHRjZ19nbG9iYWxfbWVtX25ldyhjcHVfZW52LAorICAgICAgICAgICAgb2Zmc2V0b2YoQ1BV SGV4YWdvblN0YXRlLCBncHJbaV0pLAorICAgICAgICAgICAgaGV4YWdvbl9yZWduYW1lc1tpXSk7 CisKKyAgICAgICAgc3ByaW50ZihuZXdfdmFsdWVfbmFtZXNbaV0sICJuZXdfJXMiLCBoZXhhZ29u X3JlZ25hbWVzW2ldKTsKKyAgICAgICAgaGV4X25ld192YWx1ZVtpXSA9IHRjZ19nbG9iYWxfbWVt X25ldyhjcHVfZW52LAorICAgICAgICAgICAgb2Zmc2V0b2YoQ1BVSGV4YWdvblN0YXRlLCBuZXdf dmFsdWVbaV0pLAorICAgICAgICAgICAgbmV3X3ZhbHVlX25hbWVzW2ldKTsKKworI2lmIEhFWF9E RUJVRworICAgICAgICBzcHJpbnRmKHJlZ193cml0dGVuX25hbWVzW2ldLCAicmVnX3dyaXR0ZW5f JXMiLCBoZXhhZ29uX3JlZ25hbWVzW2ldKTsKKyAgICAgICAgaGV4X3JlZ193cml0dGVuW2ldID0g dGNnX2dsb2JhbF9tZW1fbmV3KGNwdV9lbnYsCisgICAgICAgICAgICBvZmZzZXRvZihDUFVIZXhh Z29uU3RhdGUsIHJlZ193cml0dGVuW2ldKSwKKyAgICAgICAgICAgIHJlZ193cml0dGVuX25hbWVz W2ldKTsKKyNlbmRpZgorICAgIH0KKyAgICBmb3IgKGkgPSAwOyBpIDwgTlVNX1BSRUdTOyBpKysp IHsKKyAgICAgICAgaGV4X3ByZWRbaV0gPSB0Y2dfZ2xvYmFsX21lbV9uZXcoY3B1X2VudiwKKyAg ICAgICAgICAgIG9mZnNldG9mKENQVUhleGFnb25TdGF0ZSwgcHJlZFtpXSksCisgICAgICAgICAg ICBoZXhhZ29uX3ByZWRuYW1lc1tpXSk7CisKKyAgICAgICAgc3ByaW50ZihuZXdfcHJlZF92YWx1 ZV9uYW1lc1tpXSwgIm5ld19wcmVkXyVzIiwgaGV4YWdvbl9wcmVkbmFtZXNbaV0pOworICAgICAg ICBoZXhfbmV3X3ByZWRfdmFsdWVbaV0gPSB0Y2dfZ2xvYmFsX21lbV9uZXcoY3B1X2VudiwKKyAg ICAgICAgICAgIG9mZnNldG9mKENQVUhleGFnb25TdGF0ZSwgbmV3X3ByZWRfdmFsdWVbaV0pLAor ICAgICAgICAgICAgbmV3X3ByZWRfdmFsdWVfbmFtZXNbaV0pOworICAgIH0KKyAgICBoZXhfcHJl ZF93cml0dGVuID0gdGNnX2dsb2JhbF9tZW1fbmV3KGNwdV9lbnYsCisgICAgICAgIG9mZnNldG9m KENQVUhleGFnb25TdGF0ZSwgcHJlZF93cml0dGVuKSwgInByZWRfd3JpdHRlbiIpOworICAgIGhl eF9uZXh0X1BDID0gdGNnX2dsb2JhbF9tZW1fbmV3KGNwdV9lbnYsCisgICAgICAgIG9mZnNldG9m KENQVUhleGFnb25TdGF0ZSwgbmV4dF9QQyksICJuZXh0X1BDIik7CisgICAgaGV4X3RoaXNfUEMg PSB0Y2dfZ2xvYmFsX21lbV9uZXcoY3B1X2VudiwKKyAgICAgICAgb2Zmc2V0b2YoQ1BVSGV4YWdv blN0YXRlLCB0aGlzX1BDKSwgInRoaXNfUEMiKTsKKyAgICBoZXhfc2xvdF9jYW5jZWxsZWQgPSB0 Y2dfZ2xvYmFsX21lbV9uZXcoY3B1X2VudiwKKyAgICAgICAgb2Zmc2V0b2YoQ1BVSGV4YWdvblN0 YXRlLCBzbG90X2NhbmNlbGxlZCksICJzbG90X2NhbmNlbGxlZCIpOworICAgIGhleF9icmFuY2hf dGFrZW4gPSB0Y2dfZ2xvYmFsX21lbV9uZXcoY3B1X2VudiwKKyAgICAgICAgb2Zmc2V0b2YoQ1BV SGV4YWdvblN0YXRlLCBicmFuY2hfdGFrZW4pLCAiYnJhbmNoX3Rha2VuIik7CisgICAgaGV4X2Rj emVyb19hZGRyID0gdGNnX2dsb2JhbF9tZW1fbmV3KGNwdV9lbnYsCisgICAgICAgIG9mZnNldG9m KENQVUhleGFnb25TdGF0ZSwgZGN6ZXJvX2FkZHIpLCAiZGN6ZXJvX2FkZHIiKTsKKyAgICBsbHNj X2FkZHIgPSB0Y2dfZ2xvYmFsX21lbV9uZXcoY3B1X2VudiwKKyAgICAgICAgb2Zmc2V0b2YoQ1BV SGV4YWdvblN0YXRlLCBsbHNjX2FkZHIpLCAibGxzY19hZGRyIik7CisgICAgbGxzY192YWwgPSB0 Y2dfZ2xvYmFsX21lbV9uZXcoY3B1X2VudiwKKyAgICAgICAgb2Zmc2V0b2YoQ1BVSGV4YWdvblN0 YXRlLCBsbHNjX3ZhbCksICJsbHNjX3ZhbCIpOworICAgIGxsc2NfdmFsX2k2NCA9IHRjZ19nbG9i YWxfbWVtX25ld19pNjQoY3B1X2VudiwKKyAgICAgICAgb2Zmc2V0b2YoQ1BVSGV4YWdvblN0YXRl LCBsbHNjX3ZhbF9pNjQpLCAibGxzY192YWxfaTY0Iik7CisgICAgaGV4X2lzX2dhdGhlcl9zdG9y ZV9pbnNuID0gdGNnX2dsb2JhbF9tZW1fbmV3KGNwdV9lbnYsCisgICAgICAgIG9mZnNldG9mKENQ VUhleGFnb25TdGF0ZSwgaXNfZ2F0aGVyX3N0b3JlX2luc24pLAorICAgICAgICAiaXNfZ2F0aGVy X3N0b3JlX2luc24iKTsKKyAgICBoZXhfZ2F0aGVyX2lzc3VlZCA9IHRjZ19nbG9iYWxfbWVtX25l dyhjcHVfZW52LAorICAgICAgICBvZmZzZXRvZihDUFVIZXhhZ29uU3RhdGUsIGdhdGhlcl9pc3N1 ZWQpLCAiZ2F0aGVyX2lzc3VlZCIpOworICAgIGZvciAoaSA9IDA7IGkgPCBTVE9SRVNfTUFYOyBp KyspIHsKKyAgICAgICAgc3ByaW50ZihzdG9yZV9hZGRyX25hbWVzW2ldLCAic3RvcmVfYWRkcl8l ZCIsIGkpOworICAgICAgICBoZXhfc3RvcmVfYWRkcltpXSA9IHRjZ19nbG9iYWxfbWVtX25ldyhj cHVfZW52LAorICAgICAgICAgICAgb2Zmc2V0b2YoQ1BVSGV4YWdvblN0YXRlLCBtZW1fbG9nX3N0 b3Jlc1tpXS52YSksCisgICAgICAgICAgICBzdG9yZV9hZGRyX25hbWVzW2ldKTsKKworICAgICAg ICBzcHJpbnRmKHN0b3JlX3dpZHRoX25hbWVzW2ldLCAic3RvcmVfd2lkdGhfJWQiLCBpKTsKKyAg ICAgICAgaGV4X3N0b3JlX3dpZHRoW2ldID0gdGNnX2dsb2JhbF9tZW1fbmV3KGNwdV9lbnYsCisg ICAgICAgICAgICBvZmZzZXRvZihDUFVIZXhhZ29uU3RhdGUsIG1lbV9sb2dfc3RvcmVzW2ldLndp ZHRoKSwKKyAgICAgICAgICAgIHN0b3JlX3dpZHRoX25hbWVzW2ldKTsKKworICAgICAgICBzcHJp bnRmKHN0b3JlX3ZhbDMyX25hbWVzW2ldLCAic3RvcmVfdmFsMzJfJWQiLCBpKTsKKyAgICAgICAg aGV4X3N0b3JlX3ZhbDMyW2ldID0gdGNnX2dsb2JhbF9tZW1fbmV3KGNwdV9lbnYsCisgICAgICAg ICAgICBvZmZzZXRvZihDUFVIZXhhZ29uU3RhdGUsIG1lbV9sb2dfc3RvcmVzW2ldLmRhdGEzMiks CisgICAgICAgICAgICBzdG9yZV92YWwzMl9uYW1lc1tpXSk7CisKKyAgICAgICAgc3ByaW50Zihz dG9yZV92YWw2NF9uYW1lc1tpXSwgInN0b3JlX3ZhbDY0XyVkIiwgaSk7CisgICAgICAgIGhleF9z dG9yZV92YWw2NFtpXSA9IHRjZ19nbG9iYWxfbWVtX25ld19pNjQoY3B1X2VudiwKKyAgICAgICAg ICAgIG9mZnNldG9mKENQVUhleGFnb25TdGF0ZSwgbWVtX2xvZ19zdG9yZXNbaV0uZGF0YTY0KSwK KyAgICAgICAgICAgIHN0b3JlX3ZhbDY0X25hbWVzW2ldKTsKKyAgICB9CisKKyAgICBpbml0X2dl bnB0cigpOworfQotLSAKMi43LjQKCg==