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 AE53AC4727E for ; Mon, 28 Sep 2020 17:37:42 +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 30B512083B for ; Mon, 28 Sep 2020 17:37:42 +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="IV7G9Je5" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 30B512083B 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]:58528 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1kMx5p-0006Tp-AW for qemu-devel@archiver.kernel.org; Mon, 28 Sep 2020 13:37:41 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:48742) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1kMwxh-0002lq-DW for qemu-devel@nongnu.org; Mon, 28 Sep 2020 13:29:17 -0400 Received: from alexa-out-sd-01.qualcomm.com ([199.106.114.38]:53863) by eggs.gnu.org with esmtps (TLS1.2:RSA_AES_256_CBC_SHA1:256) (Exim 4.90_1) (envelope-from ) id 1kMwxe-0007v8-I7 for qemu-devel@nongnu.org; Mon, 28 Sep 2020 13:29:16 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1601314154; x=1632850154; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=XQrK9g65eeQvVdqB5oDYSBiKH955Biwm6giG2DJuzdo=; b=IV7G9Je5K5niBFAmxwmTMaNwbSs+izOYy9fxp+/J3Mm8Kl5Mw/ePigfT 2HLY3JRO4y7H0PRp4Ze1AoW7k5JbGrdHEPzSSt2wh/LxgqL94ocOQAmFo Yezhz9CfL0ExzBmxGLzj7OeERTdbFLEXRwvongFvrVaqEkId9EWviSIBl M=; Received: from unknown (HELO ironmsg03-sd.qualcomm.com) ([10.53.140.143]) by alexa-out-sd-01.qualcomm.com with ESMTP; 28 Sep 2020 10:29:03 -0700 X-QCInternal: smtphost Received: from vu-tsimpson-aus.qualcomm.com (HELO vu-tsimpson1-aus.qualcomm.com) ([10.222.150.1]) by ironmsg03-sd.qualcomm.com with ESMTP; 28 Sep 2020 10:29:02 -0700 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id 54F7119FD; Mon, 28 Sep 2020 12:29:02 -0500 (CDT) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [RFC PATCH v4 07/29] Hexagon (target/hexagon) scalar core helpers Date: Mon, 28 Sep 2020 12:28:36 -0500 Message-Id: <1601314138-9930-8-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" VGhlIG1ham9yaXR5IG9mIGhlbHBlcnMgYXJlIGdlbmVyYXRlZC4gIERlZmluZSB0aGUgaGVscGVy IGZ1bmN0aW9ucyBuZWVkZWQKdGhlbiBpbmNsdWRlIHRoZSBnZW5lcmF0ZWQgZmlsZQoKU2lnbmVk LW9mZi1ieTogVGF5bG9yIFNpbXBzb24gPHRzaW1wc29uQHF1aWNpbmMuY29tPgotLS0KIHRhcmdl dC9oZXhhZ29uL2hlbHBlci5oICAgIHwgIDMxICsrKysKIHRhcmdldC9oZXhhZ29uL29wX2hlbHBl ci5jIHwgMzgxICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog MiBmaWxlcyBjaGFuZ2VkLCA0MTIgaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRh cmdldC9oZXhhZ29uL2hlbHBlci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGFyZ2V0L2hleGFnb24v b3BfaGVscGVyLmMKCmRpZmYgLS1naXQgYS90YXJnZXQvaGV4YWdvbi9oZWxwZXIuaCBiL3Rhcmdl dC9oZXhhZ29uL2hlbHBlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJh ZDczMjEKLS0tIC9kZXYvbnVsbAorKysgYi90YXJnZXQvaGV4YWdvbi9oZWxwZXIuaApAQCAtMCww ICsxLDMxIEBACisvKgorICogIENvcHlyaWdodChjKSAyMDE5LTIwMjAgUXVhbGNvbW0gSW5ub3Zh dGlvbiBDZW50ZXIsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBwcm9n cmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp dGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisg KiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGlj IExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6 Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKK0RFRl9IRUxQRVJfMihyYWlzZV9leGNl cHRpb24sIG5vcmV0dXJuLCBlbnYsIGkzMikKK0RFRl9IRUxQRVJfMShkZWJ1Z19zdGFydF9wYWNr ZXQsIHZvaWQsIGVudikKK0RFRl9IRUxQRVJfMyhkZWJ1Z19jaGVja19zdG9yZV93aWR0aCwgdm9p ZCwgZW52LCBpbnQsIGludCkKK0RFRl9IRUxQRVJfMihjb21taXRfc3RvcmUsIHZvaWQsIGVudiwg aW50KQorREVGX0hFTFBFUl8zKGRlYnVnX2NvbW1pdF9lbmQsIHZvaWQsIGVudiwgaW50LCBpbnQp CitERUZfSEVMUEVSXzMobWVyZ2VfaW5mbGlnaHRfc3RvcmUxcywgczMyLCBlbnYsIHMzMiwgczMy KQorREVGX0hFTFBFUl8zKG1lcmdlX2luZmxpZ2h0X3N0b3JlMXUsIHMzMiwgZW52LCBzMzIsIHMz MikKK0RFRl9IRUxQRVJfMyhtZXJnZV9pbmZsaWdodF9zdG9yZTJzLCBzMzIsIGVudiwgczMyLCBz MzIpCitERUZfSEVMUEVSXzMobWVyZ2VfaW5mbGlnaHRfc3RvcmUydSwgczMyLCBlbnYsIHMzMiwg czMyKQorREVGX0hFTFBFUl8zKG1lcmdlX2luZmxpZ2h0X3N0b3JlNHMsIHMzMiwgZW52LCBzMzIs IHMzMikKK0RFRl9IRUxQRVJfMyhtZXJnZV9pbmZsaWdodF9zdG9yZTR1LCBzMzIsIGVudiwgczMy LCBzMzIpCitERUZfSEVMUEVSXzMobWVyZ2VfaW5mbGlnaHRfc3RvcmU4dSwgczY0LCBlbnYsIHMz MiwgczY0KQorCisjaW5jbHVkZSAiaGVscGVyX3Byb3Rvc19nZW5lcmF0ZWQuaCIKZGlmZiAtLWdp dCBhL3RhcmdldC9oZXhhZ29uL29wX2hlbHBlci5jIGIvdGFyZ2V0L2hleGFnb24vb3BfaGVscGVy LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU2MmZmMQotLS0gL2Rldi9u dWxsCisrKyBiL3RhcmdldC9oZXhhZ29uL29wX2hlbHBlci5jCkBAIC0wLDAgKzEsMzgxIEBACisv KgorICogIENvcHlyaWdodChjKSAyMDE5LTIwMjAgUXVhbGNvbW0gSW5ub3ZhdGlvbiBDZW50ZXIs IEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9u IDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq ICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9y Zy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSAicWVtdS9v c2RlcC5oIgorI2luY2x1ZGUgInFlbXUuaCIKKyNpbmNsdWRlICJleGVjL2hlbHBlci1wcm90by5o IgorI2luY2x1ZGUgImNwdS5oIgorI2luY2x1ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAibWFj cm9zLmgiCisjaW5jbHVkZSAiYXJjaC5oIgorI2luY2x1ZGUgImZtYV9lbXUuaCIKKyNpbmNsdWRl ICJjb252X2VtdS5oIgorCisvKiBFeGNlcHRpb25zIHByb2Nlc3NpbmcgaGVscGVycyAqLworc3Rh dGljIHZvaWQgUUVNVV9OT1JFVFVSTiBkb19yYWlzZV9leGNlcHRpb25fZXJyKENQVUhleGFnb25T dGF0ZSAqZW52LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVpbnQzMl90IGV4Y2VwdGlvbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1aW50cHRyX3QgcGMpCit7CisgICAgQ1BVU3RhdGUgKmNzID0gQ1BV KGhleGFnb25fZW52X2dldF9jcHUoZW52KSk7CisgICAgcWVtdV9sb2dfbWFzayhDUFVfTE9HX0lO VCwgIiVzOiAlZFxuIiwgX19mdW5jX18sIGV4Y2VwdGlvbik7CisgICAgY3MtPmV4Y2VwdGlvbl9p bmRleCA9IGV4Y2VwdGlvbjsKKyAgICBjcHVfbG9vcF9leGl0X3Jlc3RvcmUoY3MsIHBjKTsKK30K Kwordm9pZCBIRUxQRVIocmFpc2VfZXhjZXB0aW9uKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgdWlu dDMyX3QgZXhjZXB0aW9uKQoreworICAgIGRvX3JhaXNlX2V4Y2VwdGlvbl9lcnIoZW52LCBleGNl cHRpb24sIDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgbG9nX3JlZ193cml0ZShDUFVIZXhh Z29uU3RhdGUgKmVudiwgaW50IHJudW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB0YXJnZXRfdWxvbmcgdmFsLCB1aW50MzJfdCBzbG90KQoreworICAgIEhFWF9ERUJVR19MT0co ImxvZ19yZWdfd3JpdGVbJWRdID0gIiBUQVJHRVRfRk1UX2xkICIgKDB4IiBUQVJHRVRfRk1UX2x4 ICIpIiwKKyAgICAgICAgICAgICAgICAgIHJudW0sIHZhbCwgdmFsKTsKKyAgICBpZiAoZW52LT5z bG90X2NhbmNlbGxlZCAmICgxIDw8IHNsb3QpKSB7CisgICAgICAgIEhFWF9ERUJVR19MT0coIiBD QU5DRUxMRUQiKTsKKyAgICB9CisgICAgaWYgKHZhbCA9PSBlbnYtPmdwcltybnVtXSkgeworICAg ICAgICBIRVhfREVCVUdfTE9HKCIgTk8gQ0hBTkdFIik7CisgICAgfQorICAgIEhFWF9ERUJVR19M T0coIlxuIik7CisgICAgaWYgKCEoZW52LT5zbG90X2NhbmNlbGxlZCAmICgxIDw8IHNsb3QpKSkg eworICAgICAgICBlbnYtPm5ld192YWx1ZVtybnVtXSA9IHZhbDsKKyNpZiBIRVhfREVCVUcKKyAg ICAgICAgLyogRG8gdGhpcyBzbyBIRUxQRVIoZGVidWdfY29tbWl0X2VuZCkgd2lsbCBrbm93ICov CisgICAgICAgIGVudi0+cmVnX3dyaXR0ZW5bcm51bV0gPSAxOworI2VuZGlmCisgICAgfQorfQor CitzdGF0aWMgX19hdHRyaWJ1dGVfXygodW51c2VkKSkKK2lubGluZSB2b2lkIGxvZ19yZWdfd3Jp dGVfcGFpcihDUFVIZXhhZ29uU3RhdGUgKmVudiwgaW50IHJudW0sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgdmFsLCB1aW50MzJfdCBzbG90KQoreworICAg IEhFWF9ERUJVR19MT0coImxvZ19yZWdfd3JpdGVfcGFpclslZDolZF0gPSAlbGRcbiIsIHJudW0g KyAxLCBybnVtLCB2YWwpOworICAgIGxvZ19yZWdfd3JpdGUoZW52LCBybnVtLCB2YWwgJiAweEZG RkZGRkZGLCBzbG90KTsKKyAgICBsb2dfcmVnX3dyaXRlKGVudiwgcm51bSArIDEsICh2YWwgPj4g MzIpICYgMHhGRkZGRkZGRiwgc2xvdCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2dfcHJl ZF93cml0ZShDUFVIZXhhZ29uU3RhdGUgKmVudiwgaW50IHBudW0sCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGFyZ2V0X3Vsb25nIHZhbCkKK3sKKyAgICBIRVhfREVCVUdfTE9H KCJsb2dfcHJlZF93cml0ZVslZF0gPSAiIFRBUkdFVF9GTVRfbGQKKyAgICAgICAgICAgICAgICAg ICIgKDB4IiBUQVJHRVRfRk1UX2x4ICIpXG4iLAorICAgICAgICAgICAgICAgICAgcG51bSwgdmFs LCB2YWwpOworCisgICAgLyogTXVsdGlwbGUgd3JpdGVzIHRvIHRoZSBzYW1lIHByZWcgYXJlIGFu ZCdlZCB0b2dldGhlciAqLworICAgIGlmIChlbnYtPnByZWRfd3JpdHRlbiAmICgxIDw8IHBudW0p KSB7CisgICAgICAgIGVudi0+bmV3X3ByZWRfdmFsdWVbcG51bV0gJj0gdmFsICYgMHhmZjsKKyAg ICB9IGVsc2UgeworICAgICAgICBlbnYtPm5ld19wcmVkX3ZhbHVlW3BudW1dID0gdmFsICYgMHhm ZjsKKyAgICAgICAgZW52LT5wcmVkX3dyaXR0ZW4gfD0gMSA8PCBwbnVtOworICAgIH0KK30KKwor c3RhdGljIGlubGluZSB2b2lkIGxvZ19zdG9yZTMyKENQVUhleGFnb25TdGF0ZSAqZW52LCB0YXJn ZXRfdWxvbmcgYWRkciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0YXJnZXRfdWxv bmcgdmFsLCBpbnQgd2lkdGgsIGludCBzbG90KQoreworICAgIEhFWF9ERUJVR19MT0coImxvZ19z dG9yZSVkKDB4IiBUQVJHRVRfRk1UX2x4ICIsICIgVEFSR0VUX0ZNVF9sZAorICAgICAgICAgICAg ICAgICAgIiBbMHgiIFRBUkdFVF9GTVRfbHggIl0pXG4iLAorICAgICAgICAgICAgICAgICAgd2lk dGgsIGFkZHIsIHZhbCwgdmFsKTsKKyAgICBlbnYtPm1lbV9sb2dfc3RvcmVzW3Nsb3RdLnZhID0g YWRkcjsKKyAgICBlbnYtPm1lbV9sb2dfc3RvcmVzW3Nsb3RdLndpZHRoID0gd2lkdGg7CisgICAg ZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90XS5kYXRhMzIgPSB2YWw7Cit9CisKK3N0YXRpYyBpbmxp bmUgdm9pZCBsb2dfc3RvcmU2NChDUFVIZXhhZ29uU3RhdGUgKmVudiwgdGFyZ2V0X3Vsb25nIGFk ZHIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50NjRfdCB2YWwsIGludCB3aWR0 aCwgaW50IHNsb3QpCit7CisgICAgSEVYX0RFQlVHX0xPRygibG9nX3N0b3JlJWQoMHgiIFRBUkdF VF9GTVRfbHggIiwgJWxkIFsweCVseF0pXG4iLAorICAgICAgICAgICAgICAgICAgIHdpZHRoLCBh ZGRyLCB2YWwsIHZhbCk7CisgICAgZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90XS52YSA9IGFkZHI7 CisgICAgZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90XS53aWR0aCA9IHdpZHRoOworICAgIGVudi0+ bWVtX2xvZ19zdG9yZXNbc2xvdF0uZGF0YTY0ID0gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHZv aWQgd3JpdGVfbmV3X3BjKENQVUhleGFnb25TdGF0ZSAqZW52LCB0YXJnZXRfdWxvbmcgYWRkcikK K3sKKyAgICBIRVhfREVCVUdfTE9HKCJ3cml0ZV9uZXdfcGMoMHgiIFRBUkdFVF9GTVRfbHggIilc biIsIGFkZHIpOworCisgICAgLyoKKyAgICAgKiBJZiBtb3JlIHRoYW4gb25lIGJyYW5jaCBpcyB0 YWtlbiBpbiBhIHBhY2tldCwgb25seSB0aGUgZmlyc3Qgb25lCisgICAgICogaXMgYWN0dWFsbHkg ZG9uZS4KKyAgICAgKi8KKyAgICBpZiAoZW52LT5icmFuY2hfdGFrZW4pIHsKKyAgICAgICAgSEVY X0RFQlVHX0xPRygiSU5GTzogbXVsdGlwbGUgYnJhbmNoZXMgdGFrZW4gaW4gc2FtZSBwYWNrZXQs ICIKKyAgICAgICAgICAgICAgICAgICAgICAiaWdub3JpbmcgdGhlIHNlY29uZCBvbmVcbiIpOwor ICAgIH0gZWxzZSB7CisgICAgICAgIGZDSEVDS19QQ0FMSUdOKGFkZHIpOworICAgICAgICBlbnYt PmJyYW5jaF90YWtlbiA9IDE7CisgICAgICAgIGVudi0+bmV4dF9QQyA9IGFkZHI7CisgICAgfQor fQorCisvKiBIYW5keSBwbGFjZSB0byBzZXQgYSBicmVha3BvaW50ICovCit2b2lkIEhFTFBFUihk ZWJ1Z19zdGFydF9wYWNrZXQpKENQVUhleGFnb25TdGF0ZSAqZW52KQoreworICAgIEhFWF9ERUJV R19MT0coIlN0YXJ0IHBhY2tldDogcGMgPSAweCIgVEFSR0VUX0ZNVF9seCAiXG4iLAorICAgICAg ICAgICAgICAgICAgZW52LT5ncHJbSEVYX1JFR19QQ10pOworCisgICAgaW50IGk7CisgICAgZm9y IChpID0gMDsgaSA8IFRPVEFMX1BFUl9USFJFQURfUkVHUzsgaSsrKSB7CisgICAgICAgIGVudi0+ cmVnX3dyaXR0ZW5baV0gPSAwOworICAgIH0KK30KKworc3RhdGljIGlubGluZSBpbnQzMl90IG5l d19wcmVkX3ZhbHVlKENQVUhleGFnb25TdGF0ZSAqZW52LCBpbnQgcG51bSkKK3sKKyAgICByZXR1 cm4gZW52LT5uZXdfcHJlZF92YWx1ZVtwbnVtXTsKK30KKworLyogQ2hlY2tzIGZvciBib29ra2Vl cGluZyBlcnJvcnMgYmV0d2VlbiBkaXNhc3NlbWJseSBjb250ZXh0IGFuZCBydW50aW1lICovCit2 b2lkIEhFTFBFUihkZWJ1Z19jaGVja19zdG9yZV93aWR0aCkoQ1BVSGV4YWdvblN0YXRlICplbnYs IGludCBzbG90LCBpbnQgY2hlY2spCit7CisgICAgaWYgKGVudi0+bWVtX2xvZ19zdG9yZXNbc2xv dF0ud2lkdGggIT0gY2hlY2spIHsKKyAgICAgICAgSEVYX0RFQlVHX0xPRygiRVJST1I6ICVkICE9 ICVkXG4iLAorICAgICAgICAgICAgICAgICAgICAgIGVudi0+bWVtX2xvZ19zdG9yZXNbc2xvdF0u d2lkdGgsIGNoZWNrKTsKKyAgICAgICAgZ19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICB9Cit9 CisKK3ZvaWQgSEVMUEVSKGNvbW1pdF9zdG9yZSkoQ1BVSGV4YWdvblN0YXRlICplbnYsIGludCBz bG90X251bSkKK3sKKyAgICBzd2l0Y2ggKGVudi0+bWVtX2xvZ19zdG9yZXNbc2xvdF9udW1dLndp ZHRoKSB7CisgICAgY2FzZSAxOgorICAgICAgICBwdXRfdXNlcl91OChlbnYtPm1lbV9sb2dfc3Rv cmVzW3Nsb3RfbnVtXS5kYXRhMzIsCisgICAgICAgICAgICAgICAgICAgIGVudi0+bWVtX2xvZ19z dG9yZXNbc2xvdF9udW1dLnZhKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAyOgorICAgICAg ICBwdXRfdXNlcl91MTYoZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90X251bV0uZGF0YTMyLAorICAg ICAgICAgICAgICAgICAgICAgZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90X251bV0udmEpOworICAg ICAgICBicmVhazsKKyAgICBjYXNlIDQ6CisgICAgICAgIHB1dF91c2VyX3UzMihlbnYtPm1lbV9s b2dfc3RvcmVzW3Nsb3RfbnVtXS5kYXRhMzIsCisgICAgICAgICAgICAgICAgICAgICBlbnYtPm1l bV9sb2dfc3RvcmVzW3Nsb3RfbnVtXS52YSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgODoK KyAgICAgICAgcHV0X3VzZXJfdTY0KGVudi0+bWVtX2xvZ19zdG9yZXNbc2xvdF9udW1dLmRhdGE2 NCwKKyAgICAgICAgICAgICAgICAgICAgIGVudi0+bWVtX2xvZ19zdG9yZXNbc2xvdF9udW1dLnZh KTsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgZ19hc3NlcnRfbm90X3Jl YWNoZWQoKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X3N0b3JlKENQVUhleGFnb25T dGF0ZSAqZW52LCBpbnQgc2xvdCkKK3sKKyAgICBpZiAoIShlbnYtPnNsb3RfY2FuY2VsbGVkICYg KDEgPDwgc2xvdCkpKSB7CisgICAgICAgIHVpbnQ4X3Qgd2lkdGggPSBlbnYtPm1lbV9sb2dfc3Rv cmVzW3Nsb3RdLndpZHRoOworICAgICAgICBpZiAod2lkdGggPT0gMSkgeworICAgICAgICAgICAg dWludDMyX3QgZGF0YSA9IGVudi0+bWVtX2xvZ19zdG9yZXNbc2xvdF0uZGF0YTMyICYgMHhmZjsK KyAgICAgICAgICAgIEhFWF9ERUJVR19MT0coIlx0bWVtYlsweCIgVEFSR0VUX0ZNVF9seCAiXSA9 ICVkICgweCUwMngpXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbnYtPm1lbV9sb2df c3RvcmVzW3Nsb3RdLnZhLCBkYXRhLCBkYXRhKTsKKyAgICAgICAgfSBlbHNlIGlmICh3aWR0aCA9 PSAyKSB7CisgICAgICAgICAgICB1aW50MzJfdCBkYXRhID0gZW52LT5tZW1fbG9nX3N0b3Jlc1tz bG90XS5kYXRhMzIgJiAweGZmZmY7CisgICAgICAgICAgICBIRVhfREVCVUdfTE9HKCJcdG1lbWhb MHgiIFRBUkdFVF9GTVRfbHggIl0gPSAlZCAoMHglMDR4KVxuIiwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgZW52LT5tZW1fbG9nX3N0b3Jlc1tzbG90XS52YSwgZGF0YSwgZGF0YSk7CisgICAg ICAgIH0gZWxzZSBpZiAod2lkdGggPT0gNCkgeworICAgICAgICAgICAgdWludDMyX3QgZGF0YSA9 IGVudi0+bWVtX2xvZ19zdG9yZXNbc2xvdF0uZGF0YTMyOworICAgICAgICAgICAgSEVYX0RFQlVH X0xPRygiXHRtZW13WzB4IiBUQVJHRVRfRk1UX2x4ICJdID0gJWQgKDB4JTA4eClcbiIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgIGVudi0+bWVtX2xvZ19zdG9yZXNbc2xvdF0udmEsIGRhdGEs IGRhdGEpOworICAgICAgICB9IGVsc2UgaWYgKHdpZHRoID09IDgpIHsKKyAgICAgICAgICAgIEhF WF9ERUJVR19MT0coIlx0bWVtZFsweCIgVEFSR0VUX0ZNVF9seCAiXSA9ICVsdSAoMHglMDE2bHgp XG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbnYtPm1lbV9sb2dfc3RvcmVzW3Nsb3Rd LnZhLAorICAgICAgICAgICAgICAgICAgICAgICAgICBlbnYtPm1lbV9sb2dfc3RvcmVzW3Nsb3Rd LmRhdGE2NCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZW52LT5tZW1fbG9nX3N0b3Jlc1tz bG90XS5kYXRhNjQpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgSEVYX0RFQlVHX0xP RygiXHRCYWQgc3RvcmUgd2lkdGggJWRcbiIsIHdpZHRoKTsKKyAgICAgICAgICAgIGdfYXNzZXJ0 X25vdF9yZWFjaGVkKCk7CisgICAgICAgIH0KKyAgICB9Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24g aXMgYSBoYW5keSBwbGFjZSB0byBzZXQgYSBicmVha3BvaW50ICovCit2b2lkIEhFTFBFUihkZWJ1 Z19jb21taXRfZW5kKShDUFVIZXhhZ29uU3RhdGUgKmVudiwgaW50IGhhc19zdDAsIGludCBoYXNf c3QxKQoreworICAgIGJvb2wgcmVnX3ByaW50ZWQgPSBmYWxzZTsKKyAgICBib29sIHByZWRfcHJp bnRlZCA9IGZhbHNlOworICAgIGludCBpOworCisgICAgSEVYX0RFQlVHX0xPRygiUGFja2V0IGNv bW1pdHRlZDogcGMgPSAweCIgVEFSR0VUX0ZNVF9seCAiXG4iLAorICAgICAgICAgICAgICAgICAg ZW52LT50aGlzX1BDKTsKKyAgICBIRVhfREVCVUdfTE9HKCJzbG90X2NhbmNlbGxlZCA9ICVkXG4i LCBlbnYtPnNsb3RfY2FuY2VsbGVkKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCBUT1RBTF9QRVJf VEhSRUFEX1JFR1M7IGkrKykgeworICAgICAgICBpZiAoZW52LT5yZWdfd3JpdHRlbltpXSkgewor ICAgICAgICAgICAgaWYgKCFyZWdfcHJpbnRlZCkgeworICAgICAgICAgICAgICAgIEhFWF9ERUJV R19MT0coIlJlZ3Mgd3JpdHRlblxuIik7CisgICAgICAgICAgICAgICAgcmVnX3ByaW50ZWQgPSB0 cnVlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgSEVYX0RFQlVHX0xPRygiXHRyJWQgPSAi IFRBUkdFVF9GTVRfbGQgIiAoMHgiIFRBUkdFVF9GTVRfbHggIilcbiIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgIGksIGVudi0+bmV3X3ZhbHVlW2ldLCBlbnYtPm5ld192YWx1ZVtpXSk7Cisg ICAgICAgIH0KKyAgICB9CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgTlVNX1BSRUdTOyBpKyspIHsK KyAgICAgICAgaWYgKGVudi0+cHJlZF93cml0dGVuICYgKDEgPDwgaSkpIHsKKyAgICAgICAgICAg IGlmICghcHJlZF9wcmludGVkKSB7CisgICAgICAgICAgICAgICAgSEVYX0RFQlVHX0xPRygiUHJl ZGljYXRlcyB3cml0dGVuXG4iKTsKKyAgICAgICAgICAgICAgICBwcmVkX3ByaW50ZWQgPSB0cnVl OworICAgICAgICAgICAgfQorICAgICAgICAgICAgSEVYX0RFQlVHX0xPRygiXHRwJWQgPSAweCIg VEFSR0VUX0ZNVF9seCAiXG4iLAorICAgICAgICAgICAgICAgICAgICAgICAgICBpLCBlbnYtPm5l d19wcmVkX3ZhbHVlW2ldKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChoYXNfc3QwIHx8 IGhhc19zdDEpIHsKKyAgICAgICAgSEVYX0RFQlVHX0xPRygiU3RvcmVzXG4iKTsKKyAgICAgICAg aWYgKGhhc19zdDApIHsKKyAgICAgICAgICAgIHByaW50X3N0b3JlKGVudiwgMCk7CisgICAgICAg IH0KKyAgICAgICAgaWYgKGhhc19zdDEpIHsKKyAgICAgICAgICAgIHByaW50X3N0b3JlKGVudiwg MSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBIRVhfREVCVUdfTE9HKCJOZXh0IFBDID0gMHgl eFxuIiwgZW52LT5uZXh0X1BDKTsKKyAgICBIRVhfREVCVUdfTE9HKCJFeGVjIGNvdW50ZXJzOiBw a3QgPSAiIFRBUkdFVF9GTVRfbHgKKyAgICAgICAgICAgICAgICAgICIsIGluc24gPSAiIFRBUkdF VF9GTVRfbHgKKyAgICAgICAgICAgICAgICAgICJcbiIsCisgICAgICAgICAgICAgICAgICBlbnYt PmdwcltIRVhfUkVHX1FFTVVfUEtUX0NOVF0sCisgICAgICAgICAgICAgICAgICBlbnYtPmdwcltI RVhfUkVHX1FFTVVfSU5TTl9DTlRdKTsKKworfQorCisvKgorICogSGFuZGxlIG1lbV9ub3NodWYK KyAqCisgKiBUaGlzIG9jY3VycyB3aGVuIHRoZXJlIGlzIGEgbG9hZCB0aGF0IG1pZ2h0IG5lZWQg ZGF0YSBmb3J3YXJkZWQKKyAqIGZyb20gYW4gaW5mbGlnaHQgc3RvcmUgaW4gc2xvdCAxLiAgTm90 ZSB0aGF0IHRoZSBsb2FkIGFuZCBzdG9yZQorICogbWlnaHQgaGF2ZSBkaWZmZXJlbnQgc2l6ZXMs IHNvIHdlIGNhbid0IHNpbXBseSBjb21wYXJlIHRoZQorICogYWRkcmVzc2VzLiAgV2UgbWVyZ2Ug b25seSB0aGUgYnl0ZXMgdGhhdCBvdmVybGFwIChpZiBhbnkpLgorICovCitzdGF0aWMgaW50NjRf dCBtZXJnZV9ieXRlcyhDUFVIZXhhZ29uU3RhdGUgKmVudiwgdGFyZ2V0X3Vsb25nIGxvYWRfYWRk ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGludDY0X3QgbG9hZF9kYXRhLCB1aW50MzJf dCBsb2FkX3dpZHRoKQoreworICAgIC8qIERvbid0IGRvIGFueXRoaW5nIGlmIHNsb3QgMSB3YXMg Y2FuY2VsbGVkICovCisgICAgY29uc3QgaW50IHN0b3JlX3Nsb3QgPSAxOworICAgIGlmIChlbnYt PnNsb3RfY2FuY2VsbGVkICYgKDEgPDwgc3RvcmVfc2xvdCkpIHsKKyAgICAgICAgcmV0dXJuIGxv YWRfZGF0YTsKKyAgICB9CisKKyAgICBpbnQgc3RvcmVfd2lkdGggPSBlbnYtPm1lbV9sb2dfc3Rv cmVzW3N0b3JlX3Nsb3RdLndpZHRoOworICAgIHRhcmdldF91bG9uZyBzdG9yZV9hZGRyID0gZW52 LT5tZW1fbG9nX3N0b3Jlc1tzdG9yZV9zbG90XS52YTsKKyAgICB1bmlvbiB7CisgICAgICAgIHVp bnQ4X3QgYnl0ZXNbOF07CisgICAgICAgIHVpbnQzMl90IGRhdGEzMjsKKyAgICAgICAgdWludDY0 X3QgZGF0YTY0OworICAgIH0gcmV0ZGF0YSwgc3RvcmVkYXRhOworICAgIGludCBiaWdtYXNrID0g KCgtbG9hZF93aWR0aCkgJiAoLXN0b3JlX3dpZHRoKSk7CisgICAgaWYgKChsb2FkX2FkZHIgJiBi aWdtYXNrKSAhPSAoc3RvcmVfYWRkciAmIGJpZ21hc2spKSB7CisgICAgICAgIC8qIG5vIG92ZXJs YXAgKi8KKyAgICAgICAgcmV0dXJuIGxvYWRfZGF0YTsKKyAgICB9CisgICAgcmV0ZGF0YS5kYXRh NjQgPSBsb2FkX2RhdGE7CisKKyAgICBpZiAoc3RvcmVfd2lkdGggPT0gMSB8fCBzdG9yZV93aWR0 aCA9PSAyIHx8IHN0b3JlX3dpZHRoID09IDQpIHsKKyAgICAgICAgc3RvcmVkYXRhLmRhdGEzMiA9 IGVudi0+bWVtX2xvZ19zdG9yZXNbc3RvcmVfc2xvdF0uZGF0YTMyOworICAgIH0gZWxzZSBpZiAo c3RvcmVfd2lkdGggPT0gOCkgeworICAgICAgICBzdG9yZWRhdGEuZGF0YTY0ID0gZW52LT5tZW1f bG9nX3N0b3Jlc1tzdG9yZV9zbG90XS5kYXRhNjQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZ19h c3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICB9CisgICAgaW50IGksIGo7CisgICAgaSA9IHN0b3Jl X2FkZHIgJiAobG9hZF93aWR0aCAtIDEpOworICAgIGogPSBsb2FkX2FkZHIgJiAoc3RvcmVfd2lk dGggLSAxKTsKKyAgICB3aGlsZSAoKGkgPCBsb2FkX3dpZHRoKSAmJiAoaiA8IHN0b3JlX3dpZHRo KSkgeworICAgICAgICByZXRkYXRhLmJ5dGVzW2ldID0gc3RvcmVkYXRhLmJ5dGVzW2pdOworICAg ICAgICBpKys7CisgICAgICAgIGorKzsKKyAgICB9CisgICAgcmV0dXJuIHJldGRhdGEuZGF0YTY0 OworfQorCisjZGVmaW5lIE1FUkdFX0lORkxJR0hUKE5BTUUsIFJFVCwgSU5fVFlQRSwgT1VUX1RZ UEUsIFNJWkUpIFwKK1JFVCBIRUxQRVIoTkFNRSkoQ1BVSGV4YWdvblN0YXRlICplbnYsIGludDMy X3QgYWRkciwgSU5fVFlQRSBkYXRhKSBcCit7IFwKKyAgICByZXR1cm4gKE9VVF9UWVBFKW1lcmdl X2J5dGVzKGVudiwgYWRkciwgZGF0YSwgU0laRSk7IFwKK30KKworTUVSR0VfSU5GTElHSFQobWVy Z2VfaW5mbGlnaHRfc3RvcmUxcywgaW50MzJfdCwgaW50MzJfdCwgIGludDhfdCwgIDEpCitNRVJH RV9JTkZMSUdIVChtZXJnZV9pbmZsaWdodF9zdG9yZTF1LCBpbnQzMl90LCBpbnQzMl90LCB1aW50 OF90LCAgMSkKK01FUkdFX0lORkxJR0hUKG1lcmdlX2luZmxpZ2h0X3N0b3JlMnMsIGludDMyX3Qs IGludDMyX3QsICBpbnQxNl90LCAyKQorTUVSR0VfSU5GTElHSFQobWVyZ2VfaW5mbGlnaHRfc3Rv cmUydSwgaW50MzJfdCwgaW50MzJfdCwgdWludDE2X3QsIDIpCitNRVJHRV9JTkZMSUdIVChtZXJn ZV9pbmZsaWdodF9zdG9yZTRzLCBpbnQzMl90LCBpbnQzMl90LCAgaW50MzJfdCwgNCkKK01FUkdF X0lORkxJR0hUKG1lcmdlX2luZmxpZ2h0X3N0b3JlNHUsIGludDMyX3QsIGludDMyX3QsIHVpbnQz Ml90LCA0KQorTUVSR0VfSU5GTElHSFQobWVyZ2VfaW5mbGlnaHRfc3RvcmU4dSwgaW50NjRfdCwg aW50NjRfdCwgIGludDY0X3QsIDgpCisKKyNkZWZpbmUgQ0hFQ0tfTk9TSFVGKERTVCwgVkEsIFNa LCBTSUdOKSBcCisgICAgZG8geyBcCisgICAgICAgIGlmIChzbG90ID09IDAgJiYgZW52LT5wa3Rf aGFzX3N0b3JlX3MxKSB7IFwKKyAgICAgICAgICAgIERTVCA9IEhFTFBFUihtZXJnZV9pbmZsaWdo dF9zdG9yZSMjU1ojI1NJR04pKGVudiwgVkEsIERTVCk7IFwKKyAgICAgICAgfSBcCisgICAgfSB3 aGlsZSAoMCkKKworc3RhdGljIGlubGluZSB1aW50OF90IG1lbV9sb2FkMShDUFVIZXhhZ29uU3Rh dGUgKmVudiwgdWludDMyX3Qgc2xvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dGFyZ2V0X3Vsb25nIHZhZGRyKQoreworICAgIHVpbnQ4X3QgcmV0dmFsOworICAgIGdldF91c2Vy X3U4KHJldHZhbCwgdmFkZHIpOworICAgIENIRUNLX05PU0hVRihyZXR2YWwsIHZhZGRyLCAxLCB1 KTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQxNl90IG1lbV9s b2FkMihDUFVIZXhhZ29uU3RhdGUgKmVudiwgdWludDMyX3Qgc2xvdCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHRhcmdldF91bG9uZyB2YWRkcikKK3sKKyAgICB1aW50MTZfdCBy ZXR2YWw7CisgICAgZ2V0X3VzZXJfdTE2KHJldHZhbCwgdmFkZHIpOworICAgIENIRUNLX05PU0hV RihyZXR2YWwsIHZhZGRyLCAyLCB1KTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMg aW5saW5lIHVpbnQzMl90IG1lbV9sb2FkNChDUFVIZXhhZ29uU3RhdGUgKmVudiwgdWludDMyX3Qg c2xvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRhcmdldF91bG9uZyB2YWRk cikKK3sKKyAgICB1aW50MzJfdCByZXR2YWw7CisgICAgZ2V0X3VzZXJfdTMyKHJldHZhbCwgdmFk ZHIpOworICAgIENIRUNLX05PU0hVRihyZXR2YWwsIHZhZGRyLCA0LCB1KTsKKyAgICByZXR1cm4g cmV0dmFsOworfQorCitzdGF0aWMgaW5saW5lIHVpbnQ2NF90IG1lbV9sb2FkOChDUFVIZXhhZ29u U3RhdGUgKmVudiwgdWludDMyX3Qgc2xvdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHRhcmdldF91bG9uZyB2YWRkcikKK3sKKyAgICB1aW50NjRfdCByZXR2YWw7CisgICAgZ2V0 X3VzZXJfdTY0KHJldHZhbCwgdmFkZHIpOworICAgIENIRUNLX05PU0hVRihyZXR2YWwsIHZhZGRy LCA4LCB1KTsKKyAgICByZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgdm9pZCBjYW5jZWxfc2xv dChDUFVIZXhhZ29uU3RhdGUgKmVudiwgdWludDMyX3Qgc2xvdCkKK3sKKyAgICBIRVhfREVCVUdf TE9HKCJTbG90ICVkIGNhbmNlbGxlZFxuIiwgc2xvdCk7CisgICAgZW52LT5zbG90X2NhbmNlbGxl ZCB8PSAoMSA8PCBzbG90KTsKK30KKworLyogVGhlc2UgbWFjcm9zIGNhbiBiZSByZWZlcmVuY2Vk IGluIHRoZSBnZW5lcmF0ZWQgaGVscGVyIGZ1bmN0aW9ucyAqLworI2RlZmluZSB3YXJuKC4uLikg LyogTm90aGluZyAqLworI2RlZmluZSBmYXRhbCguLi4pIGdfYXNzZXJ0X25vdF9yZWFjaGVkKCk7 CisKKyNkZWZpbmUgQk9HVVNfSEVMUEVSKHRhZykgXAorICAgIHByaW50ZigiRVJST1I6IGJvZ3Vz IGhlbHBlcjogIiAjdGFnICJcbiIpCisKKyNpbmNsdWRlICJoZWxwZXJfZnVuY3NfZ2VuZXJhdGVk LmgiCisKLS0gCjIuNy40Cgo=