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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id E691BC10F05 for ; Tue, 5 Dec 2023 09:28:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=AbEBqskxa2pCb04vGUayGYLQsRYZGGOq6LchYEG4Wbg=; b=pyu+CKXY0KxMBh p4lT9/puqfS69aLbSHQHYqt2HoeN+IrBVXRDU0AzfqgoTLbA12Y4BywI1dRZEg0zw1i1KD9tUAEXX MpiGvsKLmdb5KbzmiA5SJCpWRCC4nPk8nLoIp24CP9yv0xguDtyWh6yKVitu3akt99GjfU5F+Ay5/ 1tG11/d67u4VaWlekmdPEOp3sfkreBIFWfidjNcnUXo+hvjW0fDbvDzGhYfeybvSTst9nTrQhwAlv HwMYWI7VxAIWLLE+eOifyZoIBrnbIkp+Rqw5Fd1Ucp977Xiglu/oE7++TSTky6ArpXJFg+WE/eyUZ ICcHJJ5vYIHPREKQCIMA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1rARjS-006nvX-2l; Tue, 05 Dec 2023 09:28:46 +0000 Received: from mail-pf1-x42c.google.com ([2607:f8b0:4864:20::42c]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1rARjN-006nqt-21 for linux-riscv@lists.infradead.org; Tue, 05 Dec 2023 09:28:45 +0000 Received: by mail-pf1-x42c.google.com with SMTP id d2e1a72fcca58-6ce52d796d2so1732841b3a.3 for ; Tue, 05 Dec 2023 01:28:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=sifive.com; s=google; t=1701768520; x=1702373320; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=rkAxxEMcPfloo2uem1ovLMPqU15m8yVjWoJ4/a1v3NY=; b=MTy8l3Qu1xE9X88yVyLYZBT2nHPu8P4HzfT7XjPXcpkKXVqh2i9QdTaYvHVRDyBiIb wGQK0CfN/TLhfBQQxk5sEG/8a/6vlmkTEcSPa7YAFklYLNdPABcVbWhKM5w6wTjYFl/j CF/yr9+qA6tb4AiklmjLZCaW9/fgOuJQpFC5BXMnnRACNFIDxkpAYUcfULq2Myofm1+B +P0kQJCh181y9czsIjF4WPYCF3TtvbsHKhp8BywJthwK5gz0Xot3zyjNpvFW9I5PnBXz Y6pwbd5C8Ns6+DUN3qhh6rYQErTyTO5HSN9IUT3DhWWLD0g0b7c3l+afQlidN7veb9SD Wwjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1701768520; x=1702373320; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=rkAxxEMcPfloo2uem1ovLMPqU15m8yVjWoJ4/a1v3NY=; b=IPFWdOXPJhdA4EQIOV/nHhOHRAbvtr3v0DF+56bLq7bmNxnmImfWEy2brw+p5ZMLnC xteR9ebOs3HVM6dfqqGaDePaL4UQKoYK0gzksdh8+S9XTH+MNTeQntd5awOowoNYsBlY L4EgJnFUmEftM0ZauZBnF9mCS+Xv1mzSjCz1rAXrpl5H1r3IOecPLezZwN8px1rn0XDt DuNdcl9z4q0M/YCb2CoMrLYXFelMvnAAEdliYb/J63opJpN7iOUl98OLMjpoXKg8Xhyu kkyWDZ7V+oAItVSGR0ewrogSoNfx/GedZmtvP3dp8HTY4JdJR8/ywFNi6NEhLUycfBdy 3Eow== X-Gm-Message-State: AOJu0YzOijLskFX2OOyyl5iBR4GElvxBEdgzrY64PXzNS3ETZqLxfgeb Fkh9oDm70CBgxGpLYNXmWFpuUw== X-Google-Smtp-Source: AGHT+IF/a8HDOVTLYHdfK8yiLKlVkwnCjjbd6X4trwmlDcQqE7kIuZrZnBO01IKodFPb8vrIKx6hcQ== X-Received: by 2002:a05:6a00:2d89:b0:6cd:e8c3:f733 with SMTP id fb9-20020a056a002d8900b006cde8c3f733mr1304453pfb.3.1701768520004; Tue, 05 Dec 2023 01:28:40 -0800 (PST) Received: from localhost.localdomain ([101.10.93.135]) by smtp.gmail.com with ESMTPSA id l6-20020a056a00140600b006cdd723bb6fsm8858788pfu.115.2023.12.05.01.28.36 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Dec 2023 01:28:39 -0800 (PST) From: Jerry Shih To: paul.walmsley@sifive.com, palmer@dabbelt.com, aou@eecs.berkeley.edu, herbert@gondor.apana.org.au, davem@davemloft.net, conor.dooley@microchip.com, ebiggers@kernel.org, ardb@kernel.org, conor@kernel.org Cc: heiko@sntech.de, phoebe.chen@sifive.com, hongrong.hsu@sifive.com, linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-crypto@vger.kernel.org Subject: [PATCH v3 08/12] RISC-V: crypto: add Zvknha/b accelerated SHA224/256 implementations Date: Tue, 5 Dec 2023 17:27:57 +0800 Message-Id: <20231205092801.1335-9-jerry.shih@sifive.com> X-Mailer: git-send-email 2.28.0 In-Reply-To: <20231205092801.1335-1-jerry.shih@sifive.com> References: <20231205092801.1335-1-jerry.shih@sifive.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231205_012841_679549_204BC0DD X-CRM114-Status: GOOD ( 31.82 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org QWRkIFNIQTIyNCBhbmQgMjU2IGltcGxlbWVudGF0aW9ucyB1c2luZyBadmtuaGEgb3IgWnZrbmhi IHZlY3RvciBjcnlwdG8KZXh0ZW5zaW9ucyBmcm9tIE9wZW5TU0wob3BlbnNzbC9vcGVuc3NsIzIx OTIzKS4KCkNvLWRldmVsb3BlZC1ieTogQ2hhcmFsYW1wb3MgTWl0cm9kaW1hcyA8Y2hhcmFsYW1w b3MubWl0cm9kaW1hc0B2cnVsbC5ldT4KU2lnbmVkLW9mZi1ieTogQ2hhcmFsYW1wb3MgTWl0cm9k aW1hcyA8Y2hhcmFsYW1wb3MubWl0cm9kaW1hc0B2cnVsbC5ldT4KQ28tZGV2ZWxvcGVkLWJ5OiBI ZWlrbyBTdHVlYm5lciA8aGVpa28uc3R1ZWJuZXJAdnJ1bGwuZXU+ClNpZ25lZC1vZmYtYnk6IEhl aWtvIFN0dWVibmVyIDxoZWlrby5zdHVlYm5lckB2cnVsbC5ldT4KQ28tZGV2ZWxvcGVkLWJ5OiBQ aG9lYmUgQ2hlbiA8cGhvZWJlLmNoZW5Ac2lmaXZlLmNvbT4KU2lnbmVkLW9mZi1ieTogUGhvZWJl IENoZW4gPHBob2ViZS5jaGVuQHNpZml2ZS5jb20+ClNpZ25lZC1vZmYtYnk6IEplcnJ5IFNoaWgg PGplcnJ5LnNoaWhAc2lmaXZlLmNvbT4KLS0tCkNoYW5nZWxvZyB2MzoKIC0gVXNlIGBTWU1fVFlQ RURfRlVOQ19TVEFSVGAgZm9yIHNoYTI1NiBpbmRpcmVjdC1jYWxsIGFzbSBzeW1ib2wuCiAtIFVz ZSBhc20gbW5lbW9uaWNzIGZvciB0aGUgaW5zdHJ1Y3Rpb25zIGluIFJWViAxLjAgZXh0ZW5zaW9u LgoKQ2hhbmdlbG9nIHYyOgogLSBEbyBub3QgdHVybiBvbiBrY29uZmlnIGBTSEEyNTZfUklTQ1Y2 NGAgb3B0aW9uIGJ5IGRlZmF1bHQuCiAtIEFkZCBgYXNtbGlua2FnZWAgcXVhbGlmaWVyIGZvciBj cnlwdG8gYXNtIGZ1bmN0aW9uLgogLSBSZW5hbWUgc2hhMjU2LXJpc2N2NjQtenZrYi16dmtuaGFf b3JfenZrbmhiIHRvCiAgIHNoYTI1Ni1yaXNjdjY0LXp2a25oYV9vcl96dmtuaGItenZrYi4KIC0g UmVvcmRlciBzdHJ1Y3R1cmUgc2hhMjU2X2FsZ3MgbWVtYmVycyBpbml0aWFsaXphdGlvbiBpbiB0 aGUgb3JkZXIKICAgZGVjbGFyZWQuCi0tLQogYXJjaC9yaXNjdi9jcnlwdG8vS2NvbmZpZyAgICAg ICAgICAgICAgICAgICAgIHwgIDExICsKIGFyY2gvcmlzY3YvY3J5cHRvL01ha2VmaWxlICAgICAg ICAgICAgICAgICAgICB8ICAgNyArCiBhcmNoL3Jpc2N2L2NyeXB0by9zaGEyNTYtcmlzY3Y2NC1n bHVlLmMgICAgICAgfCAxNDUgKysrKysrKysKIC4uLi9zaGEyNTYtcmlzY3Y2NC16dmtuaGFfb3Jf enZrbmhiLXp2a2IucGwgICB8IDMxNyArKysrKysrKysrKysrKysrKysKIDQgZmlsZXMgY2hhbmdl ZCwgNDgwIGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBhcmNoL3Jpc2N2L2NyeXB0 by9zaGEyNTYtcmlzY3Y2NC1nbHVlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBhcmNoL3Jpc2N2L2Ny eXB0by9zaGEyNTYtcmlzY3Y2NC16dmtuaGFfb3JfenZrbmhiLXp2a2IucGwKCmRpZmYgLS1naXQg YS9hcmNoL3Jpc2N2L2NyeXB0by9LY29uZmlnIGIvYXJjaC9yaXNjdi9jcnlwdG8vS2NvbmZpZwpp bmRleCA2ODYzZjAxYTJhYjAuLmQzMWFmOTE5MDcxNyAxMDA2NDQKLS0tIGEvYXJjaC9yaXNjdi9j cnlwdG8vS2NvbmZpZworKysgYi9hcmNoL3Jpc2N2L2NyeXB0by9LY29uZmlnCkBAIC00NCw0ICs0 NCwxNSBAQCBjb25maWcgQ1JZUFRPX0dIQVNIX1JJU0NWNjQKIAkgIEFyY2hpdGVjdHVyZTogcmlz Y3Y2NCB1c2luZzoKIAkgIC0gWnZrZyB2ZWN0b3IgY3J5cHRvIGV4dGVuc2lvbgogCitjb25maWcg Q1JZUFRPX1NIQTI1Nl9SSVNDVjY0CisJdHJpc3RhdGUgIkhhc2ggZnVuY3Rpb25zOiBTSEEtMjI0 IGFuZCBTSEEtMjU2IgorCWRlcGVuZHMgb24gNjRCSVQgJiYgUklTQ1ZfSVNBX1YKKwlzZWxlY3Qg Q1JZUFRPX1NIQTI1NgorCWhlbHAKKwkgIFNIQS0yMjQgYW5kIFNIQS0yNTYgc2VjdXJlIGhhc2gg YWxnb3JpdGhtIChGSVBTIDE4MCkKKworCSAgQXJjaGl0ZWN0dXJlOiByaXNjdjY0IHVzaW5nOgor CSAgLSBadmtuaGEgb3IgWnZrbmhiIHZlY3RvciBjcnlwdG8gZXh0ZW5zaW9ucworCSAgLSBadmti IHZlY3RvciBjcnlwdG8gZXh0ZW5zaW9uCisKIGVuZG1lbnUKZGlmZiAtLWdpdCBhL2FyY2gvcmlz Y3YvY3J5cHRvL01ha2VmaWxlIGIvYXJjaC9yaXNjdi9jcnlwdG8vTWFrZWZpbGUKaW5kZXggOTRh N2Y4ZWFhOGE3Li5lOWQ3NzE3ZWM5NDMgMTAwNjQ0Ci0tLSBhL2FyY2gvcmlzY3YvY3J5cHRvL01h a2VmaWxlCisrKyBiL2FyY2gvcmlzY3YvY3J5cHRvL01ha2VmaWxlCkBAIC0xMiw2ICsxMiw5IEBA IGFlcy1ibG9jay1yaXNjdjY0LXkgOj0gYWVzLXJpc2N2NjQtYmxvY2stbW9kZS1nbHVlLm8gYWVz LXJpc2N2NjQtenZrbmVkLXp2YmItenZrCiBvYmotJChDT05GSUdfQ1JZUFRPX0dIQVNIX1JJU0NW NjQpICs9IGdoYXNoLXJpc2N2NjQubwogZ2hhc2gtcmlzY3Y2NC15IDo9IGdoYXNoLXJpc2N2NjQt Z2x1ZS5vIGdoYXNoLXJpc2N2NjQtenZrZy5vCiAKK29iai0kKENPTkZJR19DUllQVE9fU0hBMjU2 X1JJU0NWNjQpICs9IHNoYTI1Ni1yaXNjdjY0Lm8KK3NoYTI1Ni1yaXNjdjY0LXkgOj0gc2hhMjU2 LXJpc2N2NjQtZ2x1ZS5vIHNoYTI1Ni1yaXNjdjY0LXp2a25oYV9vcl96dmtuaGItenZrYi5vCisK IHF1aWV0X2NtZF9wZXJsYXNtID0gUEVSTEFTTSAkQAogICAgICAgY21kX3Blcmxhc20gPSAkKFBF UkwpICQoPCkgdm9pZCAkKEApCiAKQEAgLTI3LDcgKzMwLDExIEBAICQob2JqKS9hZXMtcmlzY3Y2 NC16dmtuZWQtenZrYi5TOiAkKHNyYykvYWVzLXJpc2N2NjQtenZrbmVkLXp2a2IucGwKICQob2Jq KS9naGFzaC1yaXNjdjY0LXp2a2cuUzogJChzcmMpL2doYXNoLXJpc2N2NjQtenZrZy5wbAogCSQo Y2FsbCBjbWQscGVybGFzbSkKIAorJChvYmopL3NoYTI1Ni1yaXNjdjY0LXp2a25oYV9vcl96dmtu aGItenZrYi5TOiAkKHNyYykvc2hhMjU2LXJpc2N2NjQtenZrbmhhX29yX3p2a25oYi16dmtiLnBs CisJJChjYWxsIGNtZCxwZXJsYXNtKQorCiBjbGVhbi1maWxlcyArPSBhZXMtcmlzY3Y2NC16dmtu ZWQuUwogY2xlYW4tZmlsZXMgKz0gYWVzLXJpc2N2NjQtenZrbmVkLXp2YmItenZrZy5TCiBjbGVh bi1maWxlcyArPSBhZXMtcmlzY3Y2NC16dmtuZWQtenZrYi5TCiBjbGVhbi1maWxlcyArPSBnaGFz aC1yaXNjdjY0LXp2a2cuUworY2xlYW4tZmlsZXMgKz0gc2hhMjU2LXJpc2N2NjQtenZrbmhhX29y X3p2a25oYi16dmtiLlMKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvY3J5cHRvL3NoYTI1Ni1yaXNj djY0LWdsdWUuYyBiL2FyY2gvcmlzY3YvY3J5cHRvL3NoYTI1Ni1yaXNjdjY0LWdsdWUuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjc2MGQ4OTAzMWQxYwotLS0gL2Rl di9udWxsCisrKyBiL2FyY2gvcmlzY3YvY3J5cHRvL3NoYTI1Ni1yaXNjdjY0LWdsdWUuYwpAQCAt MCwwICsxLDE0NSBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0 ZXIKKy8qCisgKiBMaW51eC9yaXNjdjY0IHBvcnQgb2YgdGhlIE9wZW5TU0wgU0hBMjU2IGltcGxl bWVudGF0aW9uIGZvciBSSVNDLVYgNjQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMjIgVlJVTEwg R21iSAorICogQXV0aG9yOiBIZWlrbyBTdHVlYm5lciA8aGVpa28uc3R1ZWJuZXJAdnJ1bGwuZXU+ CisgKgorICogQ29weXJpZ2h0IChDKSAyMDIzIFNpRml2ZSwgSW5jLgorICogQXV0aG9yOiBKZXJy eSBTaGloIDxqZXJyeS5zaGloQHNpZml2ZS5jb20+CisgKi8KKworI2luY2x1ZGUgPGFzbS9zaW1k Lmg+CisjaW5jbHVkZSA8YXNtL3ZlY3Rvci5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4K KyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2lu Y2x1ZGUgPGNyeXB0by9pbnRlcm5hbC9oYXNoLmg+CisjaW5jbHVkZSA8Y3J5cHRvL2ludGVybmFs L3NpbWQuaD4KKyNpbmNsdWRlIDxjcnlwdG8vc2hhMjU2X2Jhc2UuaD4KKworLyoKKyAqIHNoYTI1 NiB1c2luZyB6dmtiIGFuZCB6dmtuaGEvYiB2ZWN0b3IgY3J5cHRvIGV4dGVuc2lvbgorICoKKyAq IFRoaXMgYXNtIGZ1bmN0aW9uIHdpbGwganVzdCB0YWtlIHRoZSBmaXJzdCAyNTYtYml0IGFzIHRo ZSBzaGEyNTYgc3RhdGUgZnJvbQorICogdGhlIHBvaW50ZXIgdG8gYHN0cnVjdCBzaGEyNTZfc3Rh dGVgLgorICovCithc21saW5rYWdlIHZvaWQKK3NoYTI1Nl9ibG9ja19kYXRhX29yZGVyX3p2a2Jf enZrbmhhX29yX3p2a25oYihzdHJ1Y3Qgc2hhMjU2X3N0YXRlICpkaWdlc3QsCisJCQkJCSAgICAg IGNvbnN0IHU4ICpkYXRhLCBpbnQgbnVtX2Jsa3MpOworCitzdGF0aWMgaW50IHJpc2N2NjRfc2hh MjU2X3VwZGF0ZShzdHJ1Y3Qgc2hhc2hfZGVzYyAqZGVzYywgY29uc3QgdTggKmRhdGEsCisJCQkJ IHVuc2lnbmVkIGludCBsZW4pCit7CisJaW50IHJldCA9IDA7CisKKwkvKgorCSAqIE1ha2Ugc3Vy ZSBzdHJ1Y3Qgc2hhMjU2X3N0YXRlIGJlZ2lucyBkaXJlY3RseSB3aXRoIHRoZSBTSEEyNTYKKwkg KiAyNTYtYml0IGludGVybmFsIHN0YXRlLCBhcyB0aGlzIGlzIHdoYXQgdGhlIGFzbSBmdW5jdGlv biBleHBlY3QuCisJICovCisJQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBzaGEyNTZfc3Rh dGUsIHN0YXRlKSAhPSAwKTsKKworCWlmIChjcnlwdG9fc2ltZF91c2FibGUoKSkgeworCQlrZXJu ZWxfdmVjdG9yX2JlZ2luKCk7CisJCXJldCA9IHNoYTI1Nl9iYXNlX2RvX3VwZGF0ZSgKKwkJCWRl c2MsIGRhdGEsIGxlbiwKKwkJCXNoYTI1Nl9ibG9ja19kYXRhX29yZGVyX3p2a2JfenZrbmhhX29y X3p2a25oYik7CisJCWtlcm5lbF92ZWN0b3JfZW5kKCk7CisJfSBlbHNlIHsKKwkJcmV0ID0gY3J5 cHRvX3NoYTI1Nl91cGRhdGUoZGVzYywgZGF0YSwgbGVuKTsKKwl9CisKKwlyZXR1cm4gcmV0Owor fQorCitzdGF0aWMgaW50IHJpc2N2NjRfc2hhMjU2X2ZpbnVwKHN0cnVjdCBzaGFzaF9kZXNjICpk ZXNjLCBjb25zdCB1OCAqZGF0YSwKKwkJCQl1bnNpZ25lZCBpbnQgbGVuLCB1OCAqb3V0KQorewor CWlmIChjcnlwdG9fc2ltZF91c2FibGUoKSkgeworCQlrZXJuZWxfdmVjdG9yX2JlZ2luKCk7CisJ CWlmIChsZW4pCisJCQlzaGEyNTZfYmFzZV9kb191cGRhdGUoCisJCQkJZGVzYywgZGF0YSwgbGVu LAorCQkJCXNoYTI1Nl9ibG9ja19kYXRhX29yZGVyX3p2a2JfenZrbmhhX29yX3p2a25oYik7CisJ CXNoYTI1Nl9iYXNlX2RvX2ZpbmFsaXplKAorCQkJZGVzYywgc2hhMjU2X2Jsb2NrX2RhdGFfb3Jk ZXJfenZrYl96dmtuaGFfb3JfenZrbmhiKTsKKwkJa2VybmVsX3ZlY3Rvcl9lbmQoKTsKKworCQly ZXR1cm4gc2hhMjU2X2Jhc2VfZmluaXNoKGRlc2MsIG91dCk7CisJfQorCisJcmV0dXJuIGNyeXB0 b19zaGEyNTZfZmludXAoZGVzYywgZGF0YSwgbGVuLCBvdXQpOworfQorCitzdGF0aWMgaW50IHJp c2N2NjRfc2hhMjU2X2ZpbmFsKHN0cnVjdCBzaGFzaF9kZXNjICpkZXNjLCB1OCAqb3V0KQorewor CXJldHVybiByaXNjdjY0X3NoYTI1Nl9maW51cChkZXNjLCBOVUxMLCAwLCBvdXQpOworfQorCitz dGF0aWMgc3RydWN0IHNoYXNoX2FsZyBzaGEyNTZfYWxnc1tdID0geworCXsKKwkJLmluaXQgPSBz aGEyNTZfYmFzZV9pbml0LAorCQkudXBkYXRlID0gcmlzY3Y2NF9zaGEyNTZfdXBkYXRlLAorCQku ZmluYWwgPSByaXNjdjY0X3NoYTI1Nl9maW5hbCwKKwkJLmZpbnVwID0gcmlzY3Y2NF9zaGEyNTZf ZmludXAsCisJCS5kZXNjc2l6ZSA9IHNpemVvZihzdHJ1Y3Qgc2hhMjU2X3N0YXRlKSwKKwkJLmRp Z2VzdHNpemUgPSBTSEEyNTZfRElHRVNUX1NJWkUsCisJCS5iYXNlID0geworCQkJLmNyYV9ibG9j a3NpemUgPSBTSEEyNTZfQkxPQ0tfU0laRSwKKwkJCS5jcmFfcHJpb3JpdHkgPSAxNTAsCisJCQku Y3JhX25hbWUgPSAic2hhMjU2IiwKKwkJCS5jcmFfZHJpdmVyX25hbWUgPSAic2hhMjU2LXJpc2N2 NjQtenZrbmhhX29yX3p2a25oYi16dmtiIiwKKwkJCS5jcmFfbW9kdWxlID0gVEhJU19NT0RVTEUs CisJCX0sCisJfSwgeworCQkuaW5pdCA9IHNoYTIyNF9iYXNlX2luaXQsCisJCS51cGRhdGUgPSBy aXNjdjY0X3NoYTI1Nl91cGRhdGUsCisJCS5maW5hbCA9IHJpc2N2NjRfc2hhMjU2X2ZpbmFsLAor CQkuZmludXAgPSByaXNjdjY0X3NoYTI1Nl9maW51cCwKKwkJLmRlc2NzaXplID0gc2l6ZW9mKHN0 cnVjdCBzaGEyNTZfc3RhdGUpLAorCQkuZGlnZXN0c2l6ZSA9IFNIQTIyNF9ESUdFU1RfU0laRSwK KwkJLmJhc2UgPSB7CisJCQkuY3JhX2Jsb2Nrc2l6ZSA9IFNIQTIyNF9CTE9DS19TSVpFLAorCQkJ LmNyYV9wcmlvcml0eSA9IDE1MCwKKwkJCS5jcmFfbmFtZSA9ICJzaGEyMjQiLAorCQkJLmNyYV9k cml2ZXJfbmFtZSA9ICJzaGEyMjQtcmlzY3Y2NC16dmtuaGFfb3JfenZrbmhiLXp2a2IiLAorCQkJ LmNyYV9tb2R1bGUgPSBUSElTX01PRFVMRSwKKwkJfSwKKwl9LAorfTsKKworc3RhdGljIGlubGlu ZSBib29sIGNoZWNrX3NoYTI1Nl9leHQodm9pZCkKK3sKKwkvKgorCSAqIEZyb20gdGhlIHNwZWM6 CisJICogVGhlIFp2a25oYiBleHQgc3VwcG9ydHMgYm90aCBTSEEtMjU2IGFuZCBTSEEtNTEyIGFu ZCBadmtuaGEgb25seQorCSAqIHN1cHBvcnRzIFNIQS0yNTYuCisJICovCisJcmV0dXJuIChyaXNj dl9pc2FfZXh0ZW5zaW9uX2F2YWlsYWJsZShOVUxMLCBaVktOSEEpIHx8CisJCXJpc2N2X2lzYV9l eHRlbnNpb25fYXZhaWxhYmxlKE5VTEwsIFpWS05IQikpICYmCisJICAgICAgIHJpc2N2X2lzYV9l eHRlbnNpb25fYXZhaWxhYmxlKE5VTEwsIFpWS0IpICYmCisJICAgICAgIHJpc2N2X3ZlY3Rvcl92 bGVuKCkgPj0gMTI4OworfQorCitzdGF0aWMgaW50IF9faW5pdCByaXNjdjY0X3NoYTI1Nl9tb2Rf aW5pdCh2b2lkKQoreworCWlmIChjaGVja19zaGEyNTZfZXh0KCkpCisJCXJldHVybiBjcnlwdG9f cmVnaXN0ZXJfc2hhc2hlcyhzaGEyNTZfYWxncywKKwkJCQkJICAgICAgIEFSUkFZX1NJWkUoc2hh MjU2X2FsZ3MpKTsKKworCXJldHVybiAtRU5PREVWOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQg cmlzY3Y2NF9zaGEyNTZfbW9kX2Zpbmkodm9pZCkKK3sKKwljcnlwdG9fdW5yZWdpc3Rlcl9zaGFz aGVzKHNoYTI1Nl9hbGdzLCBBUlJBWV9TSVpFKHNoYTI1Nl9hbGdzKSk7Cit9CisKK21vZHVsZV9p bml0KHJpc2N2NjRfc2hhMjU2X21vZF9pbml0KTsKK21vZHVsZV9leGl0KHJpc2N2NjRfc2hhMjU2 X21vZF9maW5pKTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTSEEtMjU2IChSSVNDLVYgYWNjZWxl cmF0ZWQpIik7CitNT0RVTEVfQVVUSE9SKCJIZWlrbyBTdHVlYm5lciA8aGVpa28uc3R1ZWJuZXJA dnJ1bGwuZXU+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQUxJQVNfQ1JZUFRP KCJzaGEyMjQiKTsKK01PRFVMRV9BTElBU19DUllQVE8oInNoYTI1NiIpOwpkaWZmIC0tZ2l0IGEv YXJjaC9yaXNjdi9jcnlwdG8vc2hhMjU2LXJpc2N2NjQtenZrbmhhX29yX3p2a25oYi16dmtiLnBs IGIvYXJjaC9yaXNjdi9jcnlwdG8vc2hhMjU2LXJpc2N2NjQtenZrbmhhX29yX3p2a25oYi16dmti LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uYjY2NGNkNjVmYmZj Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9yaXNjdi9jcnlwdG8vc2hhMjU2LXJpc2N2NjQtenZr bmhhX29yX3p2a25oYi16dmtiLnBsCkBAIC0wLDAgKzEsMzE3IEBACisjISAvdXNyL2Jpbi9lbnYg cGVybAorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCBPUiBCU0QtMi1DbGF1 c2UKKyMKKyMgVGhpcyBmaWxlIGlzIGR1YWwtbGljZW5zZWQsIG1lYW5pbmcgdGhhdCB5b3UgY2Fu IHVzZSBpdCB1bmRlciB5b3VyCisjIGNob2ljZSBvZiBlaXRoZXIgb2YgdGhlIGZvbGxvd2luZyB0 d28gbGljZW5zZXM6CisjCisjIENvcHlyaWdodCAyMDIzIFRoZSBPcGVuU1NMIFByb2plY3QgQXV0 aG9ycy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyMKKyMgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNo ZSBMaWNlbnNlIDIuMCAodGhlICJMaWNlbnNlIikuIFlvdSBjYW4gb2J0YWluCisjIGEgY29weSBp biB0aGUgZmlsZSBMSUNFTlNFIGluIHRoZSBzb3VyY2UgZGlzdHJpYnV0aW9uIG9yIGF0CisjIGh0 dHBzOi8vd3d3Lm9wZW5zc2wub3JnL3NvdXJjZS9saWNlbnNlLmh0bWwKKyMKKyMgb3IKKyMKKyMg Q29weXJpZ2h0IChjKSAyMDIzLCBDaHJpc3RvcGggTcO8bGxuZXIgPGNocmlzdG9waC5tdWVsbG5l ckB2cnVsbC5ldT4KKyMgQ29weXJpZ2h0IChjKSAyMDIzLCBQaG9lYmUgQ2hlbiA8cGhvZWJlLmNo ZW5Ac2lmaXZlLmNvbT4KKyMgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyMKKyMgUmVkaXN0cmlidXRp b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisj IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg Y29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlz dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlz dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp Z2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp bmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0 ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMKKyMgVEhJUyBTT0ZUV0FS RSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwor IyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO RywgQlVUIE5PVAorIyBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKKyMgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJ U0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKKyMgT1dORVIgT1IgQ09O VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws CisjIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ TkcsIEJVVCBOT1QKKyMgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisjIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorIyBUSEVPUlkgT0Yg TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU CisjIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB WSBPVVQgT0YgVEhFIFVTRQorIyBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisjIFRoZSBnZW5lcmF0ZWQgY29kZSBv ZiB0aGlzIGZpbGUgZGVwZW5kcyBvbiB0aGUgZm9sbG93aW5nIFJJU0MtViBleHRlbnNpb25zOgor IyAtIFJWNjRJCisjIC0gUklTQy1WIFZlY3RvciAoJ1YnKSB3aXRoIFZMRU4gPj0gMTI4CisjIC0g UklTQy1WIFZlY3RvciBDcnlwdG9ncmFwaHkgQml0LW1hbmlwdWxhdGlvbiBleHRlbnNpb24gKCda dmtiJykKKyMgLSBSSVNDLVYgVmVjdG9yIFNIQS0yIFNlY3VyZSBIYXNoIGV4dGVuc2lvbiAoJ1p2 a25oYScgb3IgJ1p2a25oYicpCisKK3VzZSBzdHJpY3Q7Cit1c2Ugd2FybmluZ3M7CisKK3VzZSBG aW5kQmluIHF3KCRCaW4pOwordXNlIGxpYiAiJEJpbiI7Cit1c2UgbGliICIkQmluLy4uLy4uL3Bl cmxhc20iOwordXNlIHJpc2N2OworCisjICRvdXRwdXQgaXMgdGhlIGxhc3QgYXJndW1lbnQgaWYg aXQgbG9va3MgbGlrZSBhIGZpbGUgKGl0IGhhcyBhbiBleHRlbnNpb24pCisjICRmbGF2b3VyIGlz IHRoZSBmaXJzdCBhcmd1bWVudCBpZiBpdCBkb2Vzbid0IGxvb2sgbGlrZSBhIGZpbGUKK215ICRv dXRwdXQgPSAkI0FSR1YgPj0gMCAmJiAkQVJHVlskI0FSR1ZdID1+IG18XC5cdyskfCA/IHBvcCA6 IHVuZGVmOworbXkgJGZsYXZvdXIgPSAkI0FSR1YgPj0gMCAmJiAkQVJHVlswXSAhfiBtfFwufCA/ IHNoaWZ0IDogdW5kZWY7CisKKyRvdXRwdXQgYW5kIG9wZW4gU1RET1VULCI+JG91dHB1dCI7CisK K215ICRjb2RlPTw8X19fOworI2luY2x1ZGUgPGxpbnV4L2NmaV90eXBlcy5oPgorCisudGV4dAor X19fCisKK215ICgkVjAsICRWMSwgJFYyLCAkVjMsICRWNCwgJFY1LCAkVjYsICRWNywKKyAgICAk VjgsICRWOSwgJFYxMCwgJFYxMSwgJFYxMiwgJFYxMywgJFYxNCwgJFYxNSwKKyAgICAkVjE2LCAk VjE3LCAkVjE4LCAkVjE5LCAkVjIwLCAkVjIxLCAkVjIyLCAkVjIzLAorICAgICRWMjQsICRWMjUs ICRWMjYsICRWMjcsICRWMjgsICRWMjksICRWMzAsICRWMzEsCispID0gbWFwKCJ2JF8iLCgwLi4z MSkpOworCitteSAkSzI1NiA9ICJLMjU2IjsKKworIyBGdW5jdGlvbiBhcmd1bWVudHMKK215ICgk SCwgJElOUCwgJExFTiwgJEtULCAkSDIsICRJTkRFWF9QQVRURVJOKSA9ICgiYTAiLCAiYTEiLCAi YTIiLCAiYTMiLCAidDMiLCAidDQiKTsKKworc3ViIHNoYV8yNTZfbG9hZF9jb25zdGFudCB7Cisg ICAgbXkgJGNvZGU9PDxfX187CisgICAgbGEgJEtULCAkSzI1NiAjIExvYWQgcm91bmQgY29uc3Rh bnRzIEsyNTYKKyAgICB2bGUzMi52ICRWMTAsICgkS1QpCisgICAgYWRkaSAkS1QsICRLVCwgMTYK KyAgICB2bGUzMi52ICRWMTEsICgkS1QpCisgICAgYWRkaSAkS1QsICRLVCwgMTYKKyAgICB2bGUz Mi52ICRWMTIsICgkS1QpCisgICAgYWRkaSAkS1QsICRLVCwgMTYKKyAgICB2bGUzMi52ICRWMTMs ICgkS1QpCisgICAgYWRkaSAkS1QsICRLVCwgMTYKKyAgICB2bGUzMi52ICRWMTQsICgkS1QpCisg ICAgYWRkaSAkS1QsICRLVCwgMTYKKyAgICB2bGUzMi52ICRWMTUsICgkS1QpCisgICAgYWRkaSAk S1QsICRLVCwgMTYKKyAgICB2bGUzMi52ICRWMTYsICgkS1QpCisgICAgYWRkaSAkS1QsICRLVCwg MTYKKyAgICB2bGUzMi52ICRWMTcsICgkS1QpCisgICAgYWRkaSAkS1QsICRLVCwgMTYKKyAgICB2 bGUzMi52ICRWMTgsICgkS1QpCisgICAgYWRkaSAkS1QsICRLVCwgMTYKKyAgICB2bGUzMi52ICRW MTksICgkS1QpCisgICAgYWRkaSAkS1QsICRLVCwgMTYKKyAgICB2bGUzMi52ICRWMjAsICgkS1Qp CisgICAgYWRkaSAkS1QsICRLVCwgMTYKKyAgICB2bGUzMi52ICRWMjEsICgkS1QpCisgICAgYWRk aSAkS1QsICRLVCwgMTYKKyAgICB2bGUzMi52ICRWMjIsICgkS1QpCisgICAgYWRkaSAkS1QsICRL VCwgMTYKKyAgICB2bGUzMi52ICRWMjMsICgkS1QpCisgICAgYWRkaSAkS1QsICRLVCwgMTYKKyAg ICB2bGUzMi52ICRWMjQsICgkS1QpCisgICAgYWRkaSAkS1QsICRLVCwgMTYKKyAgICB2bGUzMi52 ICRWMjUsICgkS1QpCitfX18KKworICAgIHJldHVybiAkY29kZTsKK30KKworIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKKyMgdm9pZCBzaGEyNTZfYmxvY2tfZGF0YV9vcmRlcl96dmtiX3p2a25oYV9v cl96dmtuaGIodm9pZCAqYywgY29uc3Qgdm9pZCAqcCwgc2l6ZV90IGxlbikKKyRjb2RlIC49IDw8 X19fOworU1lNX1RZUEVEX0ZVTkNfU1RBUlQoc2hhMjU2X2Jsb2NrX2RhdGFfb3JkZXJfenZrYl96 dmtuaGFfb3JfenZrbmhiKQorICAgIHZzZXRpdmxpIHplcm8sIDQsIGUzMiwgbTEsIHRhLCBtYQor CisgICAgQHtbc2hhXzI1Nl9sb2FkX2NvbnN0YW50XX0KKworICAgICMgSCBpcyBzdG9yZWQgYXMg e2EsYixjLGR9LHtlLGYsZyxofSwgYnV0IHdlIG5lZWQge2YsZSxiLGF9LHtoLGcsZCxjfQorICAg ICMgVGhlIGRzdCB2dHlwZSBpcyBlMzJtMSBhbmQgdGhlIGluZGV4IHZ0eXBlIGlzIGU4bWY0Lgor ICAgICMgV2UgdXNlIGluZGV4LWxvYWQgd2l0aCB0aGUgZm9sbG93aW5nIGluZGV4IHBhdHRlcm4g YXQgdjI2LgorICAgICMgICBpOCBpbmRleDoKKyAgICAjICAgICAyMCwgMTYsIDQsIDAKKyAgICAj IEluc3RlYWQgb2Ygc2V0dGluZyB0aGUgaTggaW5kZXgsIHdlIGNvdWxkIHVzZSBhIHNpbmdsZSAz MmJpdAorICAgICMgbGl0dGxlLWVuZGlhbiB2YWx1ZSB0byBjb3ZlciB0aGUgNHhpOCBpbmRleC4K KyAgICAjICAgaTMyIHZhbHVlOgorICAgICMgICAgIDB4IDAwIDA0IDEwIDE0CisgICAgbGkgJElO REVYX1BBVFRFUk4sIDB4MDAwNDEwMTQKKyAgICB2c2V0aXZsaSB6ZXJvLCAxLCBlMzIsIG0xLCB0 YSwgbWEKKyAgICB2bXYudi54ICRWMjYsICRJTkRFWF9QQVRURVJOCisKKyAgICBhZGRpICRIMiwg JEgsIDgKKworICAgICMgVXNlIGluZGV4LWxvYWQgdG8gZ2V0IHtmLGUsYixhfSx7aCxnLGQsY30K KyAgICB2c2V0aXZsaSB6ZXJvLCA0LCBlMzIsIG0xLCB0YSwgbWEKKyAgICB2bHV4ZWk4LnYgJFY2 LCAoJEgpLCAkVjI2CisgICAgdmx1eGVpOC52ICRWNywgKCRIMiksICRWMjYKKworICAgICMgU2V0 dXAgdjAgbWFzayBmb3IgdGhlIHZtZXJnZSB0byByZXBsYWNlIHRoZSBmaXJzdCB3b3JkIChpZHg9 PTApIGluIGtleS1zY2hlZHVsaW5nLgorICAgICMgVGhlIEFWTCBpcyA0IGluIFNIQSwgc28gd2Ug Y291bGQgdXNlIGEgc2luZ2xlIGU4KDggZWxlbWVudCBtYXNraW5nKSBmb3IgbWFza2luZy4KKyAg ICB2c2V0aXZsaSB6ZXJvLCAxLCBlOCwgbTEsIHRhLCBtYQorICAgIHZtdi52LmkgJFYwLCAweDAx CisKKyAgICB2c2V0aXZsaSB6ZXJvLCA0LCBlMzIsIG0xLCB0YSwgbWEKKworTF9yb3VuZF9sb29w OgorICAgICMgRGVjcmVtZW50IGxlbmd0aCBieSAxCisgICAgYWRkICRMRU4sICRMRU4sIC0xCisK KyAgICAjIEtlZXAgdGhlIGN1cnJlbnQgc3RhdGUgYXMgd2UgbmVlZCBpdCBsYXRlcjogSCcgPSBI K3thJyxiJyxjJywuLi4saCd9LgorICAgIHZtdi52LnYgJFYzMCwgJFY2CisgICAgdm12LnYudiAk VjMxLCAkVjcKKworICAgICMgTG9hZCB0aGUgNTEyLWJpdHMgb2YgdGhlIG1lc3NhZ2UgYmxvY2sg aW4gdjEtdjQgYW5kIHBlcmZvcm0KKyAgICAjIGFuIGVuZGlhbiBzd2FwIG9uIGVhY2ggNCBieXRl cyBlbGVtZW50LgorICAgIHZsZTMyLnYgJFYxLCAoJElOUCkKKyAgICBAe1t2cmV2OF92ICRWMSwg JFYxXX0KKyAgICBhZGQgJElOUCwgJElOUCwgMTYKKyAgICB2bGUzMi52ICRWMiwgKCRJTlApCisg ICAgQHtbdnJldjhfdiAkVjIsICRWMl19CisgICAgYWRkICRJTlAsICRJTlAsIDE2CisgICAgdmxl MzIudiAkVjMsICgkSU5QKQorICAgIEB7W3ZyZXY4X3YgJFYzLCAkVjNdfQorICAgIGFkZCAkSU5Q LCAkSU5QLCAxNgorICAgIHZsZTMyLnYgJFY0LCAoJElOUCkKKyAgICBAe1t2cmV2OF92ICRWNCwg JFY0XX0KKyAgICBhZGQgJElOUCwgJElOUCwgMTYKKworICAgICMgUXVhZC1yb3VuZCAwICgrMCwg V3QgZnJvbSBvbGRlc3QgdG8gbmV3ZXN0IGluIHYxLT52Mi0+djMtPnY0KQorICAgIHZhZGQudnYg JFY1LCAkVjEwLCAkVjEKKyAgICBAe1t2c2hhMmNsX3Z2ICRWNywgJFY2LCAkVjVdfQorICAgIEB7 W3ZzaGEyY2hfdnYgJFY2LCAkVjcsICRWNV19CisgICAgdm1lcmdlLnZ2bSAkVjUsICRWMywgJFYy LCAkVjAKKyAgICBAe1t2c2hhMm1zX3Z2ICRWMSwgJFY1LCAkVjRdfSAgIyBHZW5lcmF0ZSBXWzE5 OjE2XQorCisgICAgIyBRdWFkLXJvdW5kIDEgKCsxLCB2Mi0+djMtPnY0LT52MSkKKyAgICB2YWRk LnZ2ICRWNSwgJFYxMSwgJFYyCisgICAgQHtbdnNoYTJjbF92diAkVjcsICRWNiwgJFY1XX0KKyAg ICBAe1t2c2hhMmNoX3Z2ICRWNiwgJFY3LCAkVjVdfQorICAgIHZtZXJnZS52dm0gJFY1LCAkVjQs ICRWMywgJFYwCisgICAgQHtbdnNoYTJtc192diAkVjIsICRWNSwgJFYxXX0gICMgR2VuZXJhdGUg V1syMzoyMF0KKworICAgICMgUXVhZC1yb3VuZCAyICgrMiwgdjMtPnY0LT52MS0+djIpCisgICAg dmFkZC52diAkVjUsICRWMTIsICRWMworICAgIEB7W3ZzaGEyY2xfdnYgJFY3LCAkVjYsICRWNV19 CisgICAgQHtbdnNoYTJjaF92diAkVjYsICRWNywgJFY1XX0KKyAgICB2bWVyZ2UudnZtICRWNSwg JFYxLCAkVjQsICRWMAorICAgIEB7W3ZzaGEybXNfdnYgJFYzLCAkVjUsICRWMl19ICAjIEdlbmVy YXRlIFdbMjc6MjRdCisKKyAgICAjIFF1YWQtcm91bmQgMyAoKzMsIHY0LT52MS0+djItPnYzKQor ICAgIHZhZGQudnYgJFY1LCAkVjEzLCAkVjQKKyAgICBAe1t2c2hhMmNsX3Z2ICRWNywgJFY2LCAk VjVdfQorICAgIEB7W3ZzaGEyY2hfdnYgJFY2LCAkVjcsICRWNV19CisgICAgdm1lcmdlLnZ2bSAk VjUsICRWMiwgJFYxLCAkVjAKKyAgICBAe1t2c2hhMm1zX3Z2ICRWNCwgJFY1LCAkVjNdfSAgIyBH ZW5lcmF0ZSBXWzMxOjI4XQorCisgICAgIyBRdWFkLXJvdW5kIDQgKCswLCB2MS0+djItPnYzLT52 NCkKKyAgICB2YWRkLnZ2ICRWNSwgJFYxNCwgJFYxCisgICAgQHtbdnNoYTJjbF92diAkVjcsICRW NiwgJFY1XX0KKyAgICBAe1t2c2hhMmNoX3Z2ICRWNiwgJFY3LCAkVjVdfQorICAgIHZtZXJnZS52 dm0gJFY1LCAkVjMsICRWMiwgJFYwCisgICAgQHtbdnNoYTJtc192diAkVjEsICRWNSwgJFY0XX0g ICMgR2VuZXJhdGUgV1szNTozMl0KKworICAgICMgUXVhZC1yb3VuZCA1ICgrMSwgdjItPnYzLT52 NC0+djEpCisgICAgdmFkZC52diAkVjUsICRWMTUsICRWMgorICAgIEB7W3ZzaGEyY2xfdnYgJFY3 LCAkVjYsICRWNV19CisgICAgQHtbdnNoYTJjaF92diAkVjYsICRWNywgJFY1XX0KKyAgICB2bWVy Z2UudnZtICRWNSwgJFY0LCAkVjMsICRWMAorICAgIEB7W3ZzaGEybXNfdnYgJFYyLCAkVjUsICRW MV19ICAjIEdlbmVyYXRlIFdbMzk6MzZdCisKKyAgICAjIFF1YWQtcm91bmQgNiAoKzIsIHYzLT52 NC0+djEtPnYyKQorICAgIHZhZGQudnYgJFY1LCAkVjE2LCAkVjMKKyAgICBAe1t2c2hhMmNsX3Z2 ICRWNywgJFY2LCAkVjVdfQorICAgIEB7W3ZzaGEyY2hfdnYgJFY2LCAkVjcsICRWNV19CisgICAg dm1lcmdlLnZ2bSAkVjUsICRWMSwgJFY0LCAkVjAKKyAgICBAe1t2c2hhMm1zX3Z2ICRWMywgJFY1 LCAkVjJdfSAgIyBHZW5lcmF0ZSBXWzQzOjQwXQorCisgICAgIyBRdWFkLXJvdW5kIDcgKCszLCB2 NC0+djEtPnYyLT52MykKKyAgICB2YWRkLnZ2ICRWNSwgJFYxNywgJFY0CisgICAgQHtbdnNoYTJj bF92diAkVjcsICRWNiwgJFY1XX0KKyAgICBAe1t2c2hhMmNoX3Z2ICRWNiwgJFY3LCAkVjVdfQor ICAgIHZtZXJnZS52dm0gJFY1LCAkVjIsICRWMSwgJFYwCisgICAgQHtbdnNoYTJtc192diAkVjQs ICRWNSwgJFYzXX0gICMgR2VuZXJhdGUgV1s0Nzo0NF0KKworICAgICMgUXVhZC1yb3VuZCA4ICgr MCwgdjEtPnYyLT52My0+djQpCisgICAgdmFkZC52diAkVjUsICRWMTgsICRWMQorICAgIEB7W3Zz aGEyY2xfdnYgJFY3LCAkVjYsICRWNV19CisgICAgQHtbdnNoYTJjaF92diAkVjYsICRWNywgJFY1 XX0KKyAgICB2bWVyZ2UudnZtICRWNSwgJFYzLCAkVjIsICRWMAorICAgIEB7W3ZzaGEybXNfdnYg JFYxLCAkVjUsICRWNF19ICAjIEdlbmVyYXRlIFdbNTE6NDhdCisKKyAgICAjIFF1YWQtcm91bmQg OSAoKzEsIHYyLT52My0+djQtPnYxKQorICAgIHZhZGQudnYgJFY1LCAkVjE5LCAkVjIKKyAgICBA e1t2c2hhMmNsX3Z2ICRWNywgJFY2LCAkVjVdfQorICAgIEB7W3ZzaGEyY2hfdnYgJFY2LCAkVjcs ICRWNV19CisgICAgdm1lcmdlLnZ2bSAkVjUsICRWNCwgJFYzLCAkVjAKKyAgICBAe1t2c2hhMm1z X3Z2ICRWMiwgJFY1LCAkVjFdfSAgIyBHZW5lcmF0ZSBXWzU1OjUyXQorCisgICAgIyBRdWFkLXJv dW5kIDEwICgrMiwgdjMtPnY0LT52MS0+djIpCisgICAgdmFkZC52diAkVjUsICRWMjAsICRWMwor ICAgIEB7W3ZzaGEyY2xfdnYgJFY3LCAkVjYsICRWNV19CisgICAgQHtbdnNoYTJjaF92diAkVjYs ICRWNywgJFY1XX0KKyAgICB2bWVyZ2UudnZtICRWNSwgJFYxLCAkVjQsICRWMAorICAgIEB7W3Zz aGEybXNfdnYgJFYzLCAkVjUsICRWMl19ICAjIEdlbmVyYXRlIFdbNTk6NTZdCisKKyAgICAjIFF1 YWQtcm91bmQgMTEgKCszLCB2NC0+djEtPnYyLT52MykKKyAgICB2YWRkLnZ2ICRWNSwgJFYyMSwg JFY0CisgICAgQHtbdnNoYTJjbF92diAkVjcsICRWNiwgJFY1XX0KKyAgICBAe1t2c2hhMmNoX3Z2 ICRWNiwgJFY3LCAkVjVdfQorICAgIHZtZXJnZS52dm0gJFY1LCAkVjIsICRWMSwgJFYwCisgICAg QHtbdnNoYTJtc192diAkVjQsICRWNSwgJFYzXX0gICMgR2VuZXJhdGUgV1s2Mzo2MF0KKworICAg ICMgUXVhZC1yb3VuZCAxMiAoKzAsIHYxLT52Mi0+djMtPnY0KQorICAgICMgTm90ZSB0aGF0IHdl IHN0b3AgZ2VuZXJhdGluZyBuZXcgbWVzc2FnZSBzY2hlZHVsZSB3b3JkcyAoV3QsIHYxLTEzKQor ICAgICMgYXMgd2UgYWxyZWFkeSBnZW5lcmF0ZWQgYWxsIHRoZSB3b3JkcyB3ZSBlbmQgdXAgY29u c3VtaW5nIChpLmUuLCBXWzYzOjYwXSkuCisgICAgdmFkZC52diAkVjUsICRWMjIsICRWMQorICAg IEB7W3ZzaGEyY2xfdnYgJFY3LCAkVjYsICRWNV19CisgICAgQHtbdnNoYTJjaF92diAkVjYsICRW NywgJFY1XX0KKworICAgICMgUXVhZC1yb3VuZCAxMyAoKzEsIHYyLT52My0+djQtPnYxKQorICAg IHZhZGQudnYgJFY1LCAkVjIzLCAkVjIKKyAgICBAe1t2c2hhMmNsX3Z2ICRWNywgJFY2LCAkVjVd fQorICAgIEB7W3ZzaGEyY2hfdnYgJFY2LCAkVjcsICRWNV19CisKKyAgICAjIFF1YWQtcm91bmQg MTQgKCsyLCB2My0+djQtPnYxLT52MikKKyAgICB2YWRkLnZ2ICRWNSwgJFYyNCwgJFYzCisgICAg QHtbdnNoYTJjbF92diAkVjcsICRWNiwgJFY1XX0KKyAgICBAe1t2c2hhMmNoX3Z2ICRWNiwgJFY3 LCAkVjVdfQorCisgICAgIyBRdWFkLXJvdW5kIDE1ICgrMywgdjQtPnYxLT52Mi0+djMpCisgICAg dmFkZC52diAkVjUsICRWMjUsICRWNAorICAgIEB7W3ZzaGEyY2xfdnYgJFY3LCAkVjYsICRWNV19 CisgICAgQHtbdnNoYTJjaF92diAkVjYsICRWNywgJFY1XX0KKworICAgICMgSCcgPSBIK3thJyxi JyxjJywuLi4saCd9CisgICAgdmFkZC52diAkVjYsICRWMzAsICRWNgorICAgIHZhZGQudnYgJFY3 LCAkVjMxLCAkVjcKKyAgICBibmV6ICRMRU4sIExfcm91bmRfbG9vcAorCisgICAgIyBTdG9yZSB7 ZixlLGIsYX0se2gsZyxkLGN9IGJhY2sgdG8ge2EsYixjLGR9LHtlLGYsZyxofS4KKyAgICB2c3V4 ZWk4LnYgJFY2LCAoJEgpLCAkVjI2CisgICAgdnN1eGVpOC52ICRWNywgKCRIMiksICRWMjYKKwor ICAgIHJldAorU1lNX0ZVTkNfRU5EKHNoYTI1Nl9ibG9ja19kYXRhX29yZGVyX3p2a2JfenZrbmhh X29yX3p2a25oYikKKworLnAyYWxpZ24gMgorLnR5cGUgJEsyNTYsXEBvYmplY3QKKyRLMjU2Ogor ICAgIC53b3JkIDB4NDI4YTJmOTgsIDB4NzEzNzQ0OTEsIDB4YjVjMGZiY2YsIDB4ZTliNWRiYTUK KyAgICAud29yZCAweDM5NTZjMjViLCAweDU5ZjExMWYxLCAweDkyM2Y4MmE0LCAweGFiMWM1ZWQ1 CisgICAgLndvcmQgMHhkODA3YWE5OCwgMHgxMjgzNWIwMSwgMHgyNDMxODViZSwgMHg1NTBjN2Rj MworICAgIC53b3JkIDB4NzJiZTVkNzQsIDB4ODBkZWIxZmUsIDB4OWJkYzA2YTcsIDB4YzE5YmYx NzQKKyAgICAud29yZCAweGU0OWI2OWMxLCAweGVmYmU0Nzg2LCAweDBmYzE5ZGM2LCAweDI0MGNh MWNjCisgICAgLndvcmQgMHgyZGU5MmM2ZiwgMHg0YTc0ODRhYSwgMHg1Y2IwYTlkYywgMHg3NmY5 ODhkYQorICAgIC53b3JkIDB4OTgzZTUxNTIsIDB4YTgzMWM2NmQsIDB4YjAwMzI3YzgsIDB4YmY1 OTdmYzcKKyAgICAud29yZCAweGM2ZTAwYmYzLCAweGQ1YTc5MTQ3LCAweDA2Y2E2MzUxLCAweDE0 MjkyOTY3CisgICAgLndvcmQgMHgyN2I3MGE4NSwgMHgyZTFiMjEzOCwgMHg0ZDJjNmRmYywgMHg1 MzM4MGQxMworICAgIC53b3JkIDB4NjUwYTczNTQsIDB4NzY2YTBhYmIsIDB4ODFjMmM5MmUsIDB4 OTI3MjJjODUKKyAgICAud29yZCAweGEyYmZlOGExLCAweGE4MWE2NjRiLCAweGMyNGI4YjcwLCAw eGM3NmM1MWEzCisgICAgLndvcmQgMHhkMTkyZTgxOSwgMHhkNjk5MDYyNCwgMHhmNDBlMzU4NSwg MHgxMDZhYTA3MAorICAgIC53b3JkIDB4MTlhNGMxMTYsIDB4MWUzNzZjMDgsIDB4Mjc0ODc3NGMs IDB4MzRiMGJjYjUKKyAgICAud29yZCAweDM5MWMwY2IzLCAweDRlZDhhYTRhLCAweDViOWNjYTRm LCAweDY4MmU2ZmYzCisgICAgLndvcmQgMHg3NDhmODJlZSwgMHg3OGE1NjM2ZiwgMHg4NGM4Nzgx NCwgMHg4Y2M3MDIwOAorICAgIC53b3JkIDB4OTBiZWZmZmEsIDB4YTQ1MDZjZWIsIDB4YmVmOWEz ZjcsIDB4YzY3MTc4ZjIKKy5zaXplICRLMjU2LC4tJEsyNTYKK19fXworCitwcmludCAkY29kZTsK KworY2xvc2UgU1RET1VUIG9yIGRpZSAiZXJyb3IgY2xvc2luZyBTVERPVVQ6ICQhIjsKLS0gCjIu MjguMAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxp bnV4LXJpc2N2IG1haWxpbmcgbGlzdApsaW51eC1yaXNjdkBsaXN0cy5pbmZyYWRlYWQub3JnCmh0 dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtcmlzY3YK