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 D7DABC3F2D2 for ; Fri, 28 Feb 2020 17:13:57 +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 915DF2469F for ; Fri, 28 Feb 2020 17:13:57 +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="WGfoq4Fc" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 915DF2469F 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]:51068 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j7jD2-0007e7-KN for qemu-devel@archiver.kernel.org; Fri, 28 Feb 2020 12:13:56 -0500 Received: from eggs.gnu.org ([2001:470:142:3::10]:58499) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1j7imD-0005lQ-Tk for qemu-devel@nongnu.org; Fri, 28 Feb 2020 11:46:15 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1j7imB-0007Jy-HW for qemu-devel@nongnu.org; Fri, 28 Feb 2020 11:46:13 -0500 Received: from alexa-out-sd-01.qualcomm.com ([199.106.114.38]:13301) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1j7ilZ-0005cG-QJ for qemu-devel@nongnu.org; Fri, 28 Feb 2020 11:46:11 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1582908333; x=1614444333; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=woPevUDB/mV4W8AtRlWLkl7YfxNeGuTGnyGSyl5VXxU=; b=WGfoq4FcZfh+9i9C9DItnl0qSW0ADMoPHMZszxoATHgL060gB2dNlh4X O/hT0nV2dCruZVxfLQL0sx562ofECj3px11DBPk5qkgjJutr5emU//zhK WDp1xchhgPREioUrmek9bfK30MceeP2+IqmJWq7bygQKKJ6W4BvEK+zxd 0=; Received: from unknown (HELO ironmsg01-sd.qualcomm.com) ([10.53.140.141]) 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 ironmsg01-sd.qualcomm.com with ESMTP; 28 Feb 2020 08:44:30 -0800 Received: by vu-tsimpson1-aus.qualcomm.com (Postfix, from userid 47164) id C0B86FD8; Fri, 28 Feb 2020 10:44:30 -0600 (CST) From: Taylor Simpson To: qemu-devel@nongnu.org Subject: [RFC PATCH v2 34/67] Hexagon TCG generation helpers - step 1 Date: Fri, 28 Feb 2020 10:43:30 -0600 Message-Id: <1582908244-304-35-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" SGVscGVycyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyByZWdpc3RlcnMKSGVscGVycyBmb3IgZ2V0 dGluZyBhbmQgc2V0dGluZyBwYXJ0cyBvZiB2YWx1ZXMgKGUuZy4sIHNldCBiaXQpCgpTaWduZWQt b2ZmLWJ5OiBUYXlsb3IgU2ltcHNvbiA8dHNpbXBzb25AcXVpY2luYy5jb20+Ci0tLQogdGFyZ2V0 L2hleGFnb24vZ2VucHRyX2hlbHBlcnMuaCB8IDMzNyArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMzM3IGluc2VydGlvbnMoKykKIGNyZWF0 ZSBtb2RlIDEwMDY0NCB0YXJnZXQvaGV4YWdvbi9nZW5wdHJfaGVscGVycy5oCgpkaWZmIC0tZ2l0 IGEvdGFyZ2V0L2hleGFnb24vZ2VucHRyX2hlbHBlcnMuaCBiL3RhcmdldC9oZXhhZ29uL2dlbnB0 cl9oZWxwZXJzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhkNWQ5NQot LS0gL2Rldi9udWxsCisrKyBiL3RhcmdldC9oZXhhZ29uL2dlbnB0cl9oZWxwZXJzLmgKQEAgLTAs MCArMSwzMzcgQEAKKy8qCisgKiAgQ29weXJpZ2h0KGMpIDIwMTktMjAyMCBRdWFsY29tbSBJbm5v dmF0aW9uIENlbnRlciwgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqICBUaGlzIHBy b2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExp Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg ZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24p IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUK KyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHNlZSA8aHR0 cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lmbmRlZiBIRVhBR09OX0dFTlBU Ul9IRUxQRVJTX0gKKyNkZWZpbmUgSEVYQUdPTl9HRU5QVFJfSEVMUEVSU19ICisKKyNpbmNsdWRl ICJ0Y2cvdGNnLmgiCisKK3N0YXRpYyBpbmxpbmUgVENHdiBnZW5fcmVhZF9yZWcoVENHdiByZXN1 bHQsIGludCBudW0pCit7CisgICAgdGNnX2dlbl9tb3ZfdGwocmVzdWx0LCBoZXhfZ3ByW251bV0p OworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgVENHdiBnZW5fcmVhZF9w cmVnKFRDR3YgcHJlZCwgdWludDhfdCBudW0pCit7CisgICAgdGNnX2dlbl9tb3ZfdGwocHJlZCwg aGV4X3ByZWRbbnVtXSk7CisgICAgcmV0dXJuIHByZWQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgVENH diBnZW5fbmV3cmVnX3N0KFRDR3YgcmVzdWx0LCBUQ0d2X2VudiBjcHVfZW52LCBUQ0d2IHJudW0p Cit7CisgICAgZ2VuX2hlbHBlcl9uZXdfdmFsdWUocmVzdWx0LCBjcHVfZW52LCBybnVtKTsKKyAg ICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgaXNfcHJlbG9hZGVkKERp c2FzQ29udGV4dCAqY3R4LCBpbnQgbnVtKQoreworICAgIGludCBpOworICAgIGZvciAoaSA9IDA7 IGkgPCBjdHgtPmN0eF9yZWdfbG9nX2lkeDsgaSsrKSB7CisgICAgICAgIGlmIChjdHgtPmN0eF9y ZWdfbG9nW2ldID09IG51bSkgeworICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0K KyAgICB9CisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2VuX2xv Z19yZWdfd3JpdGUoaW50IHJudW0sIFRDR3YgdmFsLCBpbnQgc2xvdCwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpbnQgaXNfcHJlZGljYXRlZCkKK3sKKyAgICBpZiAoaXNf cHJlZGljYXRlZCkgeworICAgICAgICBUQ0d2IG9uZSA9IHRjZ19jb25zdF90bCgxKTsKKyAgICAg ICAgVENHdiB6ZXJvID0gdGNnX2NvbnN0X3RsKDApOworICAgICAgICBUQ0d2IHNsb3RfbWFzayA9 IHRjZ190ZW1wX25ldygpOworCisgICAgICAgIHRjZ19nZW5fYW5kaV90bChzbG90X21hc2ssIGhl eF9zbG90X2NhbmNlbGxlZCwgMSA8PCBzbG90KTsKKyAgICAgICAgdGNnX2dlbl9tb3Zjb25kX3Rs KFRDR19DT05EX0VRLCBoZXhfbmV3X3ZhbHVlW3JudW1dLCBzbG90X21hc2ssIHplcm8sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICB2YWwsIGhleF9uZXdfdmFsdWVbcm51bV0pOworI2lmIEhF WF9ERUJVRworICAgICAgICAvKiBEbyB0aGlzIHNvIEhFTFBFUihkZWJ1Z19jb21taXRfZW5kKSB3 aWxsIGtub3cgKi8KKyAgICAgICAgdGNnX2dlbl9tb3Zjb25kX3RsKFRDR19DT05EX0VRLCBoZXhf cmVnX3dyaXR0ZW5bcm51bV0sIHNsb3RfbWFzaywgemVybywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIG9uZSwgaGV4X3JlZ193cml0dGVuW3JudW1dKTsKKyNlbmRpZgorCisgICAgICAgIHRj Z190ZW1wX2ZyZWUob25lKTsKKyAgICAgICAgdGNnX3RlbXBfZnJlZSh6ZXJvKTsKKyAgICAgICAg dGNnX3RlbXBfZnJlZShzbG90X21hc2spOworICAgIH0gZWxzZSB7CisgICAgICAgIHRjZ19nZW5f bW92X3RsKGhleF9uZXdfdmFsdWVbcm51bV0sIHZhbCk7CisjaWYgSEVYX0RFQlVHCisgICAgICAg IC8qIERvIHRoaXMgc28gSEVMUEVSKGRlYnVnX2NvbW1pdF9lbmQpIHdpbGwga25vdyAqLworICAg ICAgICB0Y2dfZ2VuX21vdmlfdGwoaGV4X3JlZ193cml0dGVuW3JudW1dLCAxKTsKKyNlbmRpZgor ICAgIH0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGdlbl9sb2dfcmVnX3dyaXRlX3BhaXIoaW50 IHJudW0sIFRDR3ZfaTY0IHZhbCwgaW50IHNsb3QsCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgaXNfcHJlZGljYXRlZCkKK3sKKyAgICBUQ0d2IHZhbDMyID0g dGNnX3RlbXBfbmV3KCk7CisKKyAgICBpZiAoaXNfcHJlZGljYXRlZCkgeworICAgICAgICBUQ0d2 IG9uZSA9IHRjZ19jb25zdF90bCgxKTsKKyAgICAgICAgVENHdiB6ZXJvID0gdGNnX2NvbnN0X3Rs KDApOworICAgICAgICBUQ0d2IHNsb3RfbWFzayA9IHRjZ190ZW1wX25ldygpOworCisgICAgICAg IHRjZ19nZW5fYW5kaV90bChzbG90X21hc2ssIGhleF9zbG90X2NhbmNlbGxlZCwgMSA8PCBzbG90 KTsKKyAgICAgICAgLyogTG93IHdvcmQgKi8KKyAgICAgICAgdGNnX2dlbl9leHRybF9pNjRfaTMy KHZhbDMyLCB2YWwpOworICAgICAgICB0Y2dfZ2VuX21vdmNvbmRfdGwoVENHX0NPTkRfRVEsIGhl eF9uZXdfdmFsdWVbcm51bV0sIHNsb3RfbWFzaywgemVybywKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIHZhbDMyLCBoZXhfbmV3X3ZhbHVlW3JudW1dKTsKKyAgICAgICAgLyogSGlnaCB3b3Jk ICovCisgICAgICAgIHRjZ19nZW5fZXh0cmhfaTY0X2kzMih2YWwzMiwgdmFsKTsKKyAgICAgICAg dGNnX2dlbl9tb3Zjb25kX3RsKFRDR19DT05EX0VRLCBoZXhfbmV3X3ZhbHVlW3JudW0gKyAxXSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNsb3RfbWFzaywgemVybywKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZhbDMyLCBoZXhfbmV3X3ZhbHVlW3JudW0gKyAxXSk7CisKKyAgICAg ICAgdGNnX3RlbXBfZnJlZShvbmUpOworICAgICAgICB0Y2dfdGVtcF9mcmVlKHplcm8pOworICAg ICAgICB0Y2dfdGVtcF9mcmVlKHNsb3RfbWFzayk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgLyog TG93IHdvcmQgKi8KKyAgICAgICAgdGNnX2dlbl9leHRybF9pNjRfaTMyKHZhbDMyLCB2YWwpOwor ICAgICAgICB0Y2dfZ2VuX21vdl90bChoZXhfbmV3X3ZhbHVlW3JudW1dLCB2YWwzMik7CisgICAg ICAgIC8qIEhpZ2ggd29yZCAqLworICAgICAgICB0Y2dfZ2VuX2V4dHJoX2k2NF9pMzIodmFsMzIs IHZhbCk7CisgICAgICAgIHRjZ19nZW5fbW92X3RsKGhleF9uZXdfdmFsdWVbcm51bSArIDFdLCB2 YWwzMik7CisgICAgfQorCisgICAgdGNnX3RlbXBfZnJlZSh2YWwzMik7Cit9CisKK3N0YXRpYyBp bmxpbmUgdm9pZCBnZW5fbG9nX3ByZWRfd3JpdGUoaW50IHBudW0sIFRDR3YgdmFsKQoreworICAg IFRDR3YgemVybyA9IHRjZ19jb25zdF90bCgwKTsKKyAgICBUQ0d2IGJhc2VfdmFsID0gdGNnX3Rl bXBfbmV3KCk7CisgICAgVENHdiBhbmRfdmFsID0gdGNnX3RlbXBfbmV3KCk7CisgICAgVENHdiBw cmVkX3dyaXR0ZW4gPSB0Y2dfdGVtcF9uZXcoKTsKKworICAgIC8qIE11bHRpcGxlIHdyaXRlcyB0 byB0aGUgc2FtZSBwcmVnIGFyZSBhbmQnZWQgdG9nZXRoZXIgKi8KKyAgICB0Y2dfZ2VuX2FuZGlf dGwoYmFzZV92YWwsIHZhbCwgMHhmZik7CisgICAgdGNnX2dlbl9hbmRfdGwoYW5kX3ZhbCwgYmFz ZV92YWwsIGhleF9uZXdfcHJlZF92YWx1ZVtwbnVtXSk7CisgICAgdGNnX2dlbl9hbmRpX3RsKHBy ZWRfd3JpdHRlbiwgaGV4X3ByZWRfd3JpdHRlbiwgMSA8PCBwbnVtKTsKKyAgICB0Y2dfZ2VuX21v dmNvbmRfdGwoVENHX0NPTkRfTkUsIGhleF9uZXdfcHJlZF92YWx1ZVtwbnVtXSwKKyAgICAgICAg ICAgICAgICAgICAgICAgcHJlZF93cml0dGVuLCB6ZXJvLAorICAgICAgICAgICAgICAgICAgICAg ICBhbmRfdmFsLCBiYXNlX3ZhbCk7CisgICAgdGNnX2dlbl9vcmlfdGwoaGV4X3ByZWRfd3JpdHRl biwgaGV4X3ByZWRfd3JpdHRlbiwgMSA8PCBwbnVtKTsKKworICAgIHRjZ190ZW1wX2ZyZWUoemVy byk7CisgICAgdGNnX3RlbXBfZnJlZShiYXNlX3ZhbCk7CisgICAgdGNnX3RlbXBfZnJlZShhbmRf dmFsKTsKKyAgICB0Y2dfdGVtcF9mcmVlKHByZWRfd3JpdHRlbik7Cit9CisKK3N0YXRpYyBpbmxp bmUgdm9pZCBnZW5fcmVhZF9wM18wKFRDR3YgY29udHJvbF9yZWcpCit7CisgICAgVENHdiBwdmFs ID0gdGNnX3RlbXBfbmV3KCk7CisgICAgaW50IGk7CisgICAgdGNnX2dlbl9tb3ZpX3RsKGNvbnRy b2xfcmVnLCAwKTsKKyAgICBmb3IgKGkgPSBOVU1fUFJFR1MgLSAxOyBpID49IDA7IGktLSkgewor ICAgICAgICB0Y2dfZ2VuX3NobGlfdGwoY29udHJvbF9yZWcsIGNvbnRyb2xfcmVnLCA4KTsKKyAg ICAgICAgdGNnX2dlbl9hbmRpX3RsKHB2YWwsIGhleF9wcmVkW2ldLCAweGZmKTsKKyAgICAgICAg dGNnX2dlbl9vcl90bChjb250cm9sX3JlZywgY29udHJvbF9yZWcsIHB2YWwpOworICAgIH0KKyAg ICB0Y2dfdGVtcF9mcmVlKHB2YWwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZ2VuX3dyaXRl X3AzXzAoVENHdiB0bXApCit7CisgICAgVENHdiBjb250cm9sX3JlZyA9IHRjZ190ZW1wX25ldygp OworICAgIFRDR3YgcHJlZF92YWwgPSB0Y2dfdGVtcF9uZXcoKTsKKyAgICBpbnQgaTsKKworICAg IHRjZ19nZW5fbW92X3RsKGNvbnRyb2xfcmVnLCB0bXApOworICAgIGZvciAoaSA9IDA7IGkgPCBO VU1fUFJFR1M7IGkrKykgeworICAgICAgICB0Y2dfZ2VuX2FuZGlfdGwocHJlZF92YWwsIGNvbnRy b2xfcmVnLCAweGZmKTsKKyAgICAgICAgdGNnX2dlbl9tb3ZfdGwoaGV4X3ByZWRbaV0sIHByZWRf dmFsKTsKKyAgICAgICAgdGNnX2dlbl9zaHJpX3RsKGNvbnRyb2xfcmVnLCBjb250cm9sX3JlZywg OCk7CisgICAgfQorICAgIHRjZ190ZW1wX2ZyZWUoY29udHJvbF9yZWcpOworICAgIHRjZ190ZW1w X2ZyZWUocHJlZF92YWwpOworfQorCitzdGF0aWMgaW5saW5lIFRDR3YgZ2VuX2dldF9ieXRlKFRD R3YgcmVzdWx0LCBpbnQgTiwgVENHdiBzcmMsIGJvb2wgc2lnbikKK3sKKyAgICBUQ0d2IHNoaWZ0 ID0gdGNnX2NvbnN0X3RsKDggKiBOKTsKKyAgICBUQ0d2IG1hc2sgPSB0Y2dfY29uc3RfdGwoMHhm Zik7CisKKyAgICB0Y2dfZ2VuX3Nocl90bChyZXN1bHQsIHNyYywgc2hpZnQpOworICAgIHRjZ19n ZW5fYW5kX3RsKHJlc3VsdCwgcmVzdWx0LCBtYXNrKTsKKyAgICBpZiAoc2lnbikgeworICAgICAg ICB0Y2dfZ2VuX2V4dDhzX3RsKHJlc3VsdCwgcmVzdWx0KTsKKyAgICB9IGVsc2UgeworICAgICAg ICB0Y2dfZ2VuX2V4dDh1X3RsKHJlc3VsdCwgcmVzdWx0KTsKKyAgICB9CisgICAgdGNnX3RlbXBf ZnJlZShtYXNrKTsKKyAgICB0Y2dfdGVtcF9mcmVlKHNoaWZ0KTsKKworICAgIHJldHVybiByZXN1 bHQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgVENHdiBnZW5fZ2V0X2J5dGVfaTY0KFRDR3YgcmVzdWx0 LCBpbnQgTiwgVENHdl9pNjQgc3JjLCBib29sIHNpZ24pCit7CisgICAgVENHdl9pNjQgcmVzdWx0 X2k2NCA9IHRjZ190ZW1wX25ld19pNjQoKTsKKyAgICBUQ0d2X2k2NCBzaGlmdCA9IHRjZ19jb25z dF9pNjQoOCAqIE4pOworICAgIFRDR3ZfaTY0IG1hc2sgPSB0Y2dfY29uc3RfaTY0KDB4ZmYpOwor ICAgIHRjZ19nZW5fc2hyX2k2NChyZXN1bHRfaTY0LCBzcmMsIHNoaWZ0KTsKKyAgICB0Y2dfZ2Vu X2FuZF9pNjQocmVzdWx0X2k2NCwgcmVzdWx0X2k2NCwgbWFzayk7CisgICAgdGNnX2dlbl9leHRy bF9pNjRfaTMyKHJlc3VsdCwgcmVzdWx0X2k2NCk7CisgICAgaWYgKHNpZ24pIHsKKyAgICAgICAg dGNnX2dlbl9leHQ4c190bChyZXN1bHQsIHJlc3VsdCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg dGNnX2dlbl9leHQ4dV90bChyZXN1bHQsIHJlc3VsdCk7CisgICAgfQorICAgIHRjZ190ZW1wX2Zy ZWVfaTY0KHJlc3VsdF9pNjQpOworICAgIHRjZ190ZW1wX2ZyZWVfaTY0KHNoaWZ0KTsKKyAgICB0 Y2dfdGVtcF9mcmVlX2k2NChtYXNrKTsKKworICAgIHJldHVybiByZXN1bHQ7CisKK30KK3N0YXRp YyBpbmxpbmUgVENHdiBnZW5fZ2V0X2hhbGYoVENHdiByZXN1bHQsIGludCBOLCBUQ0d2IHNyYywg Ym9vbCBzaWduKQoreworICAgIFRDR3Ygc2hpZnQgPSB0Y2dfY29uc3RfdGwoMTYgKiBOKTsKKyAg ICBUQ0d2IG1hc2sgPSB0Y2dfY29uc3RfdGwoMHhmZmZmKTsKKworICAgIHRjZ19nZW5fc2hyX3Rs KHJlc3VsdCwgc3JjLCBzaGlmdCk7CisgICAgdGNnX2dlbl9hbmRfdGwocmVzdWx0LCByZXN1bHQs IG1hc2spOworICAgIGlmIChzaWduKSB7CisgICAgICAgIHRjZ19nZW5fZXh0MTZzX3RsKHJlc3Vs dCwgcmVzdWx0KTsKKyAgICB9IGVsc2UgeworICAgICAgICB0Y2dfZ2VuX2V4dDE2dV90bChyZXN1 bHQsIHJlc3VsdCk7CisgICAgfQorICAgIHRjZ190ZW1wX2ZyZWUobWFzayk7CisgICAgdGNnX3Rl bXBfZnJlZShzaGlmdCk7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgaW5saW5l IHZvaWQgZ2VuX3NldF9oYWxmKGludCBOLCBUQ0d2IHJlc3VsdCwgVENHdiBzcmMpCit7CisgICAg VENHdiBtYXNrMSA9IHRjZ19jb25zdF90bCh+KDB4ZmZmZiA8PCAoTiAqIDE2KSkpOworICAgIFRD R3YgbWFzazIgPSB0Y2dfY29uc3RfdGwoMHhmZmZmKTsKKyAgICBUQ0d2IHNoaWZ0ID0gdGNnX2Nv bnN0X3RsKE4gKiAxNik7CisgICAgVENHdiB0bXAgPSB0Y2dfdGVtcF9uZXcoKTsKKworICAgIHRj Z19nZW5fYW5kX3RsKHJlc3VsdCwgcmVzdWx0LCBtYXNrMSk7CisgICAgdGNnX2dlbl9hbmRfdGwo dG1wLCBzcmMsIG1hc2syKTsKKyAgICB0Y2dfZ2VuX3NobGlfdGwodG1wLCB0bXAsIE4gKiAxNik7 CisgICAgdGNnX2dlbl9vcl90bChyZXN1bHQsIHJlc3VsdCwgdG1wKTsKKworICAgIHRjZ190ZW1w X2ZyZWUobWFzazEpOworICAgIHRjZ190ZW1wX2ZyZWUobWFzazIpOworICAgIHRjZ190ZW1wX2Zy ZWUoc2hpZnQpOworICAgIHRjZ190ZW1wX2ZyZWUodG1wKTsKK30KKworc3RhdGljIGlubGluZSB2 b2lkIGdlbl9zZXRfaGFsZl9pNjQoaW50IE4sIFRDR3ZfaTY0IHJlc3VsdCwgVENHdiBzcmMpCit7 CisgICAgVENHdl9pNjQgbWFzazEgPSB0Y2dfY29uc3RfaTY0KH4oMHhmZmZmTEwgPDwgKE4gKiAx NikpKTsKKyAgICBUQ0d2X2k2NCBtYXNrMiA9IHRjZ19jb25zdF9pNjQoMHhmZmZmTEwpOworICAg IFRDR3ZfaTY0IHNoaWZ0ID0gdGNnX2NvbnN0X2k2NChOICogMTYpOworICAgIFRDR3ZfaTY0IHRt cCA9IHRjZ190ZW1wX25ld19pNjQoKTsKKworICAgIHRjZ19nZW5fYW5kX2k2NChyZXN1bHQsIHJl c3VsdCwgbWFzazEpOworICAgIHRjZ19nZW5fY29uY2F0X2kzMl9pNjQodG1wLCBzcmMsIHNyYyk7 CisgICAgdGNnX2dlbl9hbmRfaTY0KHRtcCwgdG1wLCBtYXNrMik7CisgICAgdGNnX2dlbl9zaGxp X2k2NCh0bXAsIHRtcCwgTiAqIDE2KTsKKyAgICB0Y2dfZ2VuX29yX2k2NChyZXN1bHQsIHJlc3Vs dCwgdG1wKTsKKworICAgIHRjZ190ZW1wX2ZyZWVfaTY0KG1hc2sxKTsKKyAgICB0Y2dfdGVtcF9m cmVlX2k2NChtYXNrMik7CisgICAgdGNnX3RlbXBfZnJlZV9pNjQoc2hpZnQpOworICAgIHRjZ190 ZW1wX2ZyZWVfaTY0KHRtcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZW5fc2V0X2J5dGUo aW50IE4sIFRDR3YgcmVzdWx0LCBUQ0d2IHNyYykKK3sKKyAgICBUQ0d2IG1hc2sxID0gdGNnX2Nv bnN0X3RsKH4oMHhmZiA8PCAoTiAqIDgpKSk7CisgICAgVENHdiBtYXNrMiA9IHRjZ19jb25zdF90 bCgweGZmKTsKKyAgICBUQ0d2IHNoaWZ0ID0gdGNnX2NvbnN0X3RsKE4gKiA4KTsKKyAgICBUQ0d2 IHRtcCA9IHRjZ190ZW1wX25ldygpOworCisgICAgdGNnX2dlbl9hbmRfdGwocmVzdWx0LCByZXN1 bHQsIG1hc2sxKTsKKyAgICB0Y2dfZ2VuX2FuZF90bCh0bXAsIHNyYywgbWFzazIpOworICAgIHRj Z19nZW5fc2hsaV90bCh0bXAsIHRtcCwgTiAqIDgpOworICAgIHRjZ19nZW5fb3JfdGwocmVzdWx0 LCByZXN1bHQsIHRtcCk7CisKKyAgICB0Y2dfdGVtcF9mcmVlKG1hc2sxKTsKKyAgICB0Y2dfdGVt cF9mcmVlKG1hc2syKTsKKyAgICB0Y2dfdGVtcF9mcmVlKHNoaWZ0KTsKKyAgICB0Y2dfdGVtcF9m cmVlKHRtcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBnZW5fc2V0X2J5dGVfaTY0KGludCBO LCBUQ0d2X2k2NCByZXN1bHQsIFRDR3Ygc3JjKQoreworICAgIFRDR3ZfaTY0IG1hc2sxID0gdGNn X2NvbnN0X2k2NCh+KDB4ZmZMTCA8PCAoTiAqIDgpKSk7CisgICAgVENHdl9pNjQgbWFzazIgPSB0 Y2dfY29uc3RfaTY0KDB4ZmZMTCk7CisgICAgVENHdl9pNjQgc2hpZnQgPSB0Y2dfY29uc3RfaTY0 KE4gKiA4KTsKKyAgICBUQ0d2X2k2NCB0bXAgPSB0Y2dfdGVtcF9uZXdfaTY0KCk7CisKKyAgICB0 Y2dfZ2VuX2FuZF9pNjQocmVzdWx0LCByZXN1bHQsIG1hc2sxKTsKKyAgICB0Y2dfZ2VuX2NvbmNh dF9pMzJfaTY0KHRtcCwgc3JjLCBzcmMpOworICAgIHRjZ19nZW5fYW5kX2k2NCh0bXAsIHRtcCwg bWFzazIpOworICAgIHRjZ19nZW5fc2hsaV9pNjQodG1wLCB0bXAsIE4gKiA4KTsKKyAgICB0Y2df Z2VuX29yX2k2NChyZXN1bHQsIHJlc3VsdCwgdG1wKTsKKworICAgIHRjZ190ZW1wX2ZyZWVfaTY0 KG1hc2sxKTsKKyAgICB0Y2dfdGVtcF9mcmVlX2k2NChtYXNrMik7CisgICAgdGNnX3RlbXBfZnJl ZV9pNjQoc2hpZnQpOworICAgIHRjZ190ZW1wX2ZyZWVfaTY0KHRtcCk7Cit9CisKK3N0YXRpYyBp bmxpbmUgVENHdiBnZW5fZ2V0X3dvcmQoVENHdiByZXN1bHQsIGludCBOLCBUQ0d2X2k2NCBzcmMs IGJvb2wgc2lnbikKK3sKKyAgICBpZiAoTiA9PSAwKSB7CisgICAgICAgIHRjZ19nZW5fZXh0cmxf aTY0X2kzMihyZXN1bHQsIHNyYyk7CisgICAgfSBlbHNlIGlmIChOID09IDEpIHsKKyAgICAgICAg dGNnX2dlbl9leHRyaF9pNjRfaTMyKHJlc3VsdCwgc3JjKTsKKyAgICB9IGVsc2UgeworICAgICAg Z19hc3NlcnRfbm90X3JlYWNoZWQoKTsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwor c3RhdGljIGlubGluZSBUQ0d2X2k2NCBnZW5fZ2V0X3dvcmRfaTY0KFRDR3ZfaTY0IHJlc3VsdCwg aW50IE4sIFRDR3ZfaTY0IHNyYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBib29sIHNpZ24pCit7CisgICAgVENHdiB3b3JkID0gdGNnX3RlbXBfbmV3KCk7CisgICAg Z2VuX2dldF93b3JkKHdvcmQsIE4sIHNyYywgc2lnbik7CisgICAgaWYgKHNpZ24pIHsKKyAgICAg ICAgdGNnX2dlbl9leHRfaTMyX2k2NChyZXN1bHQsIHdvcmQpOworICAgIH0gZWxzZSB7CisgICAg ICAgIHRjZ19nZW5fZXh0dV9pMzJfaTY0KHJlc3VsdCwgd29yZCk7CisgICAgfQorICAgIHRjZ190 ZW1wX2ZyZWUod29yZCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGlubGluZSBU Q0d2IGdlbl9zZXRfYml0KGludCBpLCBUQ0d2IHJlc3VsdCwgVENHdiBzcmMpCit7CisgICAgVENH diBtYXNrID0gdGNnX2NvbnN0X3RsKH4oMSA8PCBpKSk7CisgICAgVENHdiBiaXQgPSB0Y2dfdGVt cF9uZXcoKTsKKyAgICB0Y2dfZ2VuX3NobGlfdGwoYml0LCBzcmMsIGkpOworICAgIHRjZ19nZW5f YW5kX3RsKHJlc3VsdCwgcmVzdWx0LCBtYXNrKTsKKyAgICB0Y2dfZ2VuX29yX3RsKHJlc3VsdCwg cmVzdWx0LCBiaXQpOworICAgIHRjZ190ZW1wX2ZyZWUobWFzayk7CisgICAgdGNnX3RlbXBfZnJl ZShiaXQpOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworI2VuZGlmCi0tIAoyLjcuNAoK