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 75E3ACA1016 for ; Mon, 8 Sep 2025 23:53:39 +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=ia6PW5ih7zNZ1+tenI4x7/n74gKz46cfI3r0OqX8bCc=; b=rKsLnAsq3exViL t/Ynet0Ov3IeImoBk8QuNpxCsEe406qYsA5I5dwaH9tdwTsGOUF5DAo0UfzqRxUEYP3tWPWZAHzdl Uy6YnSL1VocZ4bun1fPI+GvUQ0S9Oj7ZKIuIoIn91UQVckVMDlyC06zWokbhKve3NZcBsY5fmn1q6 totyO1fwbj4gjbewDtkmBO3fwcQdmn2RUfoop7XFeLA/+aTqPmfLDgJYschowMH7R0uxqtCQNINEj gpC77E65+gOXKXFWWiqkJgc2kQV92BQsGRN/aND3rCIoB34lzq6y7F1f8DiJl1izOyEUjIVg+u9Lh csyGa+1wR56Vco8IrX1Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1uvlfp-0000000353s-1e8J; Mon, 08 Sep 2025 23:53:25 +0000 Received: from mail-pl1-x62e.google.com ([2607:f8b0:4864:20::62e]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1uvgSf-00000001UFq-2z9m for linux-riscv@lists.infradead.org; Mon, 08 Sep 2025 18:19:31 +0000 Received: by mail-pl1-x62e.google.com with SMTP id d9443c01a7336-2570bf6050bso8510425ad.2 for ; Mon, 08 Sep 2025 11:19:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=rivosinc.com; s=google; t=1757355569; x=1757960369; 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=gk4zQ1AMb6Oi8x2H/9hI9B4kuWghu9H8dMMYPZBZZ9E=; b=DoAE1ncAl8VsOrdTsXNaKH0bbxbdzR6zlr91s/HVW3CfkkcFMgSAw6uDF6xICWKTZ4 RaXlHYvAlym83r1penc5Kr2emwYKqOfrH9tbJozvqYm/JUqrTNscIbs5UhiR9UNha5b/ Az6F8zyciPe1L+/lrMh56ycS672WcBnWT/oik1X/TJFZgj4rS0E3rSech1YcjawXFcvx bz5rp9FGM63YnoceU+K1wjy+F7n9D9NRa0rGFV3yq1eXiwqeCci7CWST6vZVYfDGup0/ 3O4qpYwzIE5ZIuFJ5I0hZxosvbg68XalBoTMdBvekzAyY5Mhs4t0hKPnWU0sBDku296A DjZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757355569; x=1757960369; 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=gk4zQ1AMb6Oi8x2H/9hI9B4kuWghu9H8dMMYPZBZZ9E=; b=F8N/BYAps8Ie1341pLeW5LVU4afKbZpgh0Alxe+3pdWzpWONckKnrKIxFWzZHGvEsN ihm4od95K0kW81TzIDTN5eUpDmd8XW9MmAUgX1KkqErdJ9sS+yTGNxi6twog56l/A0cF 8QqGzrPMkgpl2nCE/fOBTvd3Kxc0pmLn9H6S8ynIDrKljWhdvtfQxmWjL1FV93IgR/Qv RDy3FJF8rvRvNrYD7szA49Of0wCEdpsh8ymYlrG8hOXg9MJQEYXe0XK3hl5xcw+eOECY oSiHNTqDoejxoQqm+Knzugx2WcJ6VTJknUor1a8PPXsrxWviXFYoVvSJeXRfKP9RbKz3 5ERQ== X-Forwarded-Encrypted: i=1; AJvYcCWBy9VHS45hj11dRp3DqGdIvbxDV4/k0Xvekx/HGxpTr4zty+lz+AV74X+Bp5kZ/qJhoQgGcitiWNRLxA==@lists.infradead.org X-Gm-Message-State: AOJu0YyBKjXBigPu9PlOwWNbKn9dWUZGCV5vhyBAGbql9GEbf3h0DfzW j6OUzfMd00YtrlRy5rfQZomFMM5culkoo6g+DxmiUO0owA23opTXicjBHMof2N3Zl+k= X-Gm-Gg: ASbGncta5A11hHmadP6lZXsPgzyRcf3IILLdxjfjVS5R8ZKtInkNRQhMvZrwwx6OD/q jPaHixV6RScZkDzaXSeq8qP0R38GMErbvagHE/ffHBwNfqoJg7J/04ZrNttYw1TxucytQ240+xf HY9kPFO6GoptGVlCNmjuNA1caVVg0aXc8L/lhdVF377i8vMR/va1jIDJjuO5WASEbhraUgL828u wm/JOX/1RAaWq7VC317Y4t+nq/t2LjS+c66AQSlX9NwYiEI0cWrmF0FCP1X2BG45A6jwwemgsXi ho3REUefUvnTGDfR108hMRQ5I/oY9tRd3lG0dIZjN0s2eRyohdqPN+CQQ7P2loc+MvL5s9pI/K2 fFvs= X-Google-Smtp-Source: AGHT+IGp56WXdQv6Bjj6PWmCZdyDxS5/Iilcz4D1q0oTR6IRl28o3n2FdFfFg6AHDOXy4c9oxkyPPg== X-Received: by 2002:a17:902:fc84:b0:249:34b:29fe with SMTP id d9443c01a7336-25173118df4mr104526735ad.32.1757355568842; Mon, 08 Sep 2025 11:19:28 -0700 (PDT) Received: from cleger.eu.int ([2001:41d0:420:f300::]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-24ccd763948sm117012755ad.118.2025.09.08.11.19.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 08 Sep 2025 11:19:28 -0700 (PDT) From: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= To: Paul Walmsley , Palmer Dabbelt , linux-riscv@lists.infradead.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org Cc: =?UTF-8?q?Cl=C3=A9ment=20L=C3=A9ger?= , Himanshu Chauhan , Anup Patel , Xu Lu , Atish Patra , =?UTF-8?q?Bj=C3=B6rn=20T=C3=B6pel?= , Yunhui Cui , Conor Dooley Subject: [PATCH v7 3/5] drivers: firmware: add riscv SSE support Date: Mon, 8 Sep 2025 18:17:05 +0000 Message-ID: <20250908181717.1997461-4-cleger@rivosinc.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250908181717.1997461-1-cleger@rivosinc.com> References: <20250908181717.1997461-1-cleger@rivosinc.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250908_111929_796831_FB1C4D47 X-CRM114-Status: GOOD ( 22.53 ) 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 QWRkIGRyaXZlciBsZXZlbCBpbnRlcmZhY2UgdG8gdXNlIFJJU0MtViBTU0UgYXJjaCBzdXBwb3J0 LiBUaGlzIGludGVyZmFjZQphbGxvd3MgcmVnaXN0ZXJpbmcgU1NFIGhhbmRsZXJzLCBhbmQgcmVj ZWl2ZSB0aGVtLiBUaGlzIHdpbGwgYmUgdXNlZCBieQpQTVUgYW5kIEdIRVMgZHJpdmVyLgoKQ28t ZGV2ZWxvcGVkLWJ5OiBIaW1hbnNodSBDaGF1aGFuIDxoY2hhdWhhbkB2ZW50YW5hbWljcm8uY29t PgpTaWduZWQtb2ZmLWJ5OiBIaW1hbnNodSBDaGF1aGFuIDxoY2hhdWhhbkB2ZW50YW5hbWljcm8u Y29tPgpTaWduZWQtb2ZmLWJ5OiBDbMOpbWVudCBMw6lnZXIgPGNsZWdlckByaXZvc2luYy5jb20+ CkFja2VkLWJ5OiBDb25vciBEb29sZXkgPGNvbm9yLmRvb2xleUBtaWNyb2NoaXAuY29tPgotLS0K IE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDE1ICsKIGRyaXZlcnMv ZmlybXdhcmUvS2NvbmZpZyAgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZmlybXdhcmUv TWFrZWZpbGUgICAgICAgICAgICAgIHwgICAxICsKIGRyaXZlcnMvZmlybXdhcmUvcmlzY3YvS2Nv bmZpZyAgICAgICAgIHwgIDE1ICsKIGRyaXZlcnMvZmlybXdhcmUvcmlzY3YvTWFrZWZpbGUgICAg ICAgIHwgICAzICsKIGRyaXZlcnMvZmlybXdhcmUvcmlzY3YvcmlzY3Zfc2JpX3NzZS5jIHwgNzAx ICsrKysrKysrKysrKysrKysrKysrKysrKysKIGluY2x1ZGUvbGludXgvcmlzY3Zfc2JpX3NzZS5o ICAgICAgICAgIHwgIDU3ICsrCiA3IGZpbGVzIGNoYW5nZWQsIDc5MyBpbnNlcnRpb25zKCspCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9maXJtd2FyZS9yaXNjdi9LY29uZmlnCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9maXJtd2FyZS9yaXNjdi9NYWtlZmlsZQogY3JlYXRlIG1vZGUg MTAwNjQ0IGRyaXZlcnMvZmlybXdhcmUvcmlzY3YvcmlzY3Zfc2JpX3NzZS5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgaW5jbHVkZS9saW51eC9yaXNjdl9zYmlfc3NlLmgKCmRpZmYgLS1naXQgYS9NQUlO VEFJTkVSUyBiL01BSU5UQUlORVJTCmluZGV4IGZlMTY4NDc3Y2FhNC4uNjg0ZDIzZjg1MmMzIDEw MDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMjE2NDgsNiArMjE2 NDgsMTMgQEAgVDoJZ2l0IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVs L2dpdC9pb21tdS9saW51eC5naXQKIEY6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5n cy9pb21tdS9yaXNjdixpb21tdS55YW1sCiBGOglkcml2ZXJzL2lvbW11L3Jpc2N2LwogCitSSVND LVYgRklSTVdBUkUgRFJJVkVSUworTToJQ29ub3IgRG9vbGV5IDxjb25vckBrZXJuZWwub3JnPgor TDoJbGludXgtcmlzY3ZAbGlzdHMuaW5mcmFkZWFkLm9yZworUzoJTWFpbnRhaW5lZAorVDoJZ2l0 IGdpdDovL2dpdC5rZXJuZWwub3JnL3B1Yi9zY20vbGludXgva2VybmVsL2dpdC9jb25vci9saW51 eC5naXQKK0Y6CWRyaXZlcnMvZmlybXdhcmUvcmlzY3YvKgorCiBSSVNDLVYgTUlDUk9DSElQIEZQ R0EgU1VQUE9SVAogTToJQ29ub3IgRG9vbGV5IDxjb25vci5kb29sZXlAbWljcm9jaGlwLmNvbT4K IE06CURhaXJlIE1jTmFtYXJhIDxkYWlyZS5tY25hbWFyYUBtaWNyb2NoaXAuY29tPgpAQCAtMjE3 MTIsNiArMjE3MTksMTQgQEAgRjoJYXJjaC9yaXNjdi9ib290L2R0cy9zcGFjZW1pdC8KIE46CXNw YWNlbWl0CiBLOglzcGFjZW1pdAogCitSSVNDLVYgU1NFIERSSVZFUgorTToJQ2zDqW1lbnQgTMOp Z2VyIDxjbGVnZXJAcml2b3NpbmMuY29tPgorUjoJSGltYW5zaHUgQ2hhdWhhbiA8aGltYW5zaHVA dGhlY2hhdWhhbi5kZXY+CitMOglsaW51eC1yaXNjdkBsaXN0cy5pbmZyYWRlYWQub3JnCitTOglN YWludGFpbmVkCitGOglkcml2ZXJzL2Zpcm13YXJlL3Jpc2N2L3Jpc2N2X3NzZS5jCitGOglpbmNs dWRlL2xpbnV4L3Jpc2N2X3NzZS5oCisKIFJJU0MtViBUSEVBRCBTb0MgU1VQUE9SVAogTToJRHJl dyBGdXN0aW5pIDxmdXN0aW5pQGtlcm5lbC5vcmc+CiBNOglHdW8gUmVuIDxndW9yZW5Aa2VybmVs Lm9yZz4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZmlybXdhcmUvS2NvbmZpZyBiL2RyaXZlcnMvZmly bXdhcmUvS2NvbmZpZwppbmRleCBiYmQyMTU1ZDg0ODMuLjE4OTRkZjg3YjA4ZSAxMDA2NDQKLS0t IGEvZHJpdmVycy9maXJtd2FyZS9LY29uZmlnCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvS2NvbmZp ZwpAQCAtMjk0LDYgKzI5NCw3IEBAIHNvdXJjZSAiZHJpdmVycy9maXJtd2FyZS9tZXNvbi9LY29u ZmlnIgogc291cmNlICJkcml2ZXJzL2Zpcm13YXJlL21pY3JvY2hpcC9LY29uZmlnIgogc291cmNl ICJkcml2ZXJzL2Zpcm13YXJlL3BzY2kvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9maXJtd2Fy ZS9xY29tL0tjb25maWciCitzb3VyY2UgImRyaXZlcnMvZmlybXdhcmUvcmlzY3YvS2NvbmZpZyIK IHNvdXJjZSAiZHJpdmVycy9maXJtd2FyZS9zYW1zdW5nL0tjb25maWciCiBzb3VyY2UgImRyaXZl cnMvZmlybXdhcmUvc21jY2MvS2NvbmZpZyIKIHNvdXJjZSAiZHJpdmVycy9maXJtd2FyZS90ZWdy YS9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9maXJtd2FyZS9NYWtlZmlsZSBiL2RyaXZl cnMvZmlybXdhcmUvTWFrZWZpbGUKaW5kZXggNGRkZWMyODIwYzk2Li42Y2RkODQ1NzBlYTcgMTAw NjQ0Ci0tLSBhL2RyaXZlcnMvZmlybXdhcmUvTWFrZWZpbGUKKysrIGIvZHJpdmVycy9maXJtd2Fy ZS9NYWtlZmlsZQpAQCAtMzQsNiArMzQsNyBAQCBvYmoteQkJCQkrPSBlZmkvCiBvYmoteQkJCQkr PSBpbXgvCiBvYmoteQkJCQkrPSBwc2NpLwogb2JqLXkJCQkJKz0gcWNvbS8KK29iai15CQkJCSs9 IHJpc2N2Lwogb2JqLXkJCQkJKz0gc2Ftc3VuZy8KIG9iai15CQkJCSs9IHNtY2NjLwogb2JqLXkJ CQkJKz0gdGVncmEvCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL3Jpc2N2L0tjb25maWcg Yi9kcml2ZXJzL2Zpcm13YXJlL3Jpc2N2L0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMDAwMDAwLi5lZDViNjYzYWM1ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJz L2Zpcm13YXJlL3Jpc2N2L0tjb25maWcKQEAgLTAsMCArMSwxNSBAQAorIyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CittZW51ICJSaXNjLVYgU3BlY2lmaWMgZmlybXdhcmUg ZHJpdmVycyIKK2RlcGVuZHMgb24gUklTQ1YKKworY29uZmlnIFJJU0NWX1NCSV9TU0UKKwlib29s ICJFbmFibGUgU0JJIFN1cGVydmlzb3IgU29mdHdhcmUgRXZlbnRzIHN1cHBvcnQiCisJZGVwZW5k cyBvbiBSSVNDVl9TQkkKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUaGUgU3VwZXJ2aXNvciBTb2Z0 d2FyZSBFdmVudHMgc3VwcG9ydCBhbGxvd3MgdGhlIFNCSSB0byBkZWxpdmVyCisJICBOTUktbGlr ZSBub3RpZmljYXRpb25zIHRvIHRoZSBzdXBlcnZpc29yIG1vZGUgc29mdHdhcmUuIFdoZW4gZW5h YmxlZCwKKwkgIHRoaXMgb3B0aW9uIHByb3ZpZGVzIHN1cHBvcnQgdG8gcmVnaXN0ZXIgY2FsbGJh Y2tzIG9uIHNwZWNpZmljIFNTRQorCSAgZXZlbnRzLgorCitlbmRtZW51CmRpZmYgLS1naXQgYS9k cml2ZXJzL2Zpcm13YXJlL3Jpc2N2L01ha2VmaWxlIGIvZHJpdmVycy9maXJtd2FyZS9yaXNjdi9N YWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmM4Nzk1ZDRi YmIyZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvcmlzY3YvTWFrZWZpbGUK QEAgLTAsMCArMSwzIEBACisjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCisKK29i ai0kKENPTkZJR19SSVNDVl9TQklfU1NFKQkJKz0gcmlzY3Zfc2JpX3NzZS5vCmRpZmYgLS1naXQg YS9kcml2ZXJzL2Zpcm13YXJlL3Jpc2N2L3Jpc2N2X3NiaV9zc2UuYyBiL2RyaXZlcnMvZmlybXdh cmUvcmlzY3YvcmlzY3Zfc2JpX3NzZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMC4uNTdiNmRhZDkyNDgyCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9maXJtd2Fy ZS9yaXNjdi9yaXNjdl9zYmlfc3NlLmMKQEAgLTAsMCArMSw3MDEgQEAKKy8vIFNQRFgtTGljZW5z ZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjQgUml2 b3MgSW5jLgorICovCisKKyNkZWZpbmUgcHJfZm10KGZtdCkgInNzZTogIiBmbXQKKworI2luY2x1 ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdWhvdHBsdWcuaD4KKyNpbmNsdWRl IDxsaW51eC9jcHVfcG0uaD4KKyNpbmNsdWRlIDxsaW51eC9oYXJkaXJxLmg+CisjaW5jbHVkZSA8 bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BlcmNwdS1kZWZzLmg+CisjaW5jbHVkZSA8 bGludXgvcmVib290Lmg+CisjaW5jbHVkZSA8bGludXgvcmlzY3Zfc2JpX3NzZS5oPgorI2luY2x1 ZGUgPGxpbnV4L3NsYWIuaD4KKworI2luY2x1ZGUgPGFzbS9zYmkuaD4KKyNpbmNsdWRlIDxhc20v c3NlLmg+CisKK3N0cnVjdCBzc2VfZXZlbnQgeworCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKwl1 MzIgZXZ0X2lkOworCXUzMiBwcmlvcml0eTsKKwlzc2VfZXZlbnRfaGFuZGxlcl9mbiAqaGFuZGxl cjsKKwl2b2lkICpoYW5kbGVyX2FyZzsKKwkvKiBPbmx5IHZhbGlkIGZvciBnbG9iYWwgZXZlbnRz ICovCisJdW5zaWduZWQgaW50IGNwdTsKKworCXVuaW9uIHsKKwkJc3RydWN0IHNzZV9yZWdpc3Rl cmVkX2V2ZW50ICpnbG9iYWw7CisJCXN0cnVjdCBzc2VfcmVnaXN0ZXJlZF9ldmVudCBfX3BlcmNw dSAqbG9jYWw7CisJfTsKK307CisKK3N0YXRpYyBpbnQgc3NlX2hwX3N0YXRlOworc3RhdGljIGJv b2wgc3NlX2F2YWlsYWJsZSBfX3JvX2FmdGVyX2luaXQ7CitzdGF0aWMgREVGSU5FX1NQSU5MT0NL KGV2ZW50c19saXN0X2xvY2spOworc3RhdGljIExJU1RfSEVBRChldmVudHMpOworc3RhdGljIERF RklORV9NVVRFWChzc2VfbXV0ZXgpOworCitzdHJ1Y3Qgc3NlX3JlZ2lzdGVyZWRfZXZlbnQgewor CXN0cnVjdCBzc2VfZXZlbnRfYXJjaF9kYXRhIGFyY2g7CisJc3RydWN0IHNzZV9ldmVudCAqZXZl bnQ7CisJdW5zaWduZWQgbG9uZyBhdHRyOworCWJvb2wgaXNfZW5hYmxlZDsKK307CisKK3ZvaWQg c3NlX2hhbmRsZV9ldmVudChzdHJ1Y3Qgc3NlX2V2ZW50X2FyY2hfZGF0YSAqYXJjaF9ldmVudCwK KwkJICAgICAgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisJaW50IHJldDsKKwlzdHJ1Y3Qgc3Nl X3JlZ2lzdGVyZWRfZXZlbnQgKnJlZ19ldnQgPQorCQljb250YWluZXJfb2YoYXJjaF9ldmVudCwg c3RydWN0IHNzZV9yZWdpc3RlcmVkX2V2ZW50LCBhcmNoKTsKKwlzdHJ1Y3Qgc3NlX2V2ZW50ICpl dnQgPSByZWdfZXZ0LT5ldmVudDsKKworCXJldCA9IGV2dC0+aGFuZGxlcihldnQtPmV2dF9pZCwg ZXZ0LT5oYW5kbGVyX2FyZywgcmVncyk7CisJaWYgKHJldCkKKwkJcHJfd2FybigiZXZlbnQgJXgg aGFuZGxlciBmYWlsZWQgd2l0aCBlcnJvciAlZFxuIiwgZXZ0LT5ldnRfaWQsIHJldCk7Cit9CisK K3N0YXRpYyBzdHJ1Y3Qgc3NlX2V2ZW50ICpzc2VfZXZlbnRfZ2V0KHUzMiBldnQpCit7CisJc3Ry dWN0IHNzZV9ldmVudCAqZXZlbnQgPSBOVUxMOworCisJc2NvcGVkX2d1YXJkKHNwaW5sb2NrLCAm ZXZlbnRzX2xpc3RfbG9jaykgeworCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmZXZlbnRz LCBsaXN0KSB7CisJCQlpZiAoZXZlbnQtPmV2dF9pZCA9PSBldnQpCisJCQkJcmV0dXJuIGV2ZW50 OworCQl9CisJfQorCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBwaHlzX2FkZHJfdCBzc2Vf ZXZlbnRfZ2V0X2F0dHJfcGh5cyhzdHJ1Y3Qgc3NlX3JlZ2lzdGVyZWRfZXZlbnQgKnJlZ19ldnQp Cit7CisJcGh5c19hZGRyX3QgcGh5czsKKwl2b2lkICphZGRyID0gJnJlZ19ldnQtPmF0dHI7CisK KwlpZiAoc3NlX2V2ZW50X2lzX2dsb2JhbChyZWdfZXZ0LT5ldmVudC0+ZXZ0X2lkKSkKKwkJcGh5 cyA9IHZpcnRfdG9fcGh5cyhhZGRyKTsKKwllbHNlCisJCXBoeXMgPSBwZXJfY3B1X3B0cl90b19w aHlzKGFkZHIpOworCisJcmV0dXJuIHBoeXM7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3NlX3JlZ2lz dGVyZWRfZXZlbnQgKnNzZV9nZXRfcmVnX2V2dChzdHJ1Y3Qgc3NlX2V2ZW50ICpldmVudCkKK3sK KwlpZiAoc3NlX2V2ZW50X2lzX2dsb2JhbChldmVudC0+ZXZ0X2lkKSkKKwkJcmV0dXJuIGV2ZW50 LT5nbG9iYWw7CisJZWxzZQorCQlyZXR1cm4gcGVyX2NwdV9wdHIoZXZlbnQtPmxvY2FsLCBzbXBf cHJvY2Vzc29yX2lkKCkpOworfQorCitzdGF0aWMgaW50IHNzZV9zYmlfZXZlbnRfZnVuYyhzdHJ1 Y3Qgc3NlX2V2ZW50ICpldmVudCwgdW5zaWduZWQgbG9uZyBmdW5jKQoreworCXN0cnVjdCBzYmly ZXQgcmV0OworCXUzMiBldnQgPSBldmVudC0+ZXZ0X2lkOworCXN0cnVjdCBzc2VfcmVnaXN0ZXJl ZF9ldmVudCAqcmVnX2V2dCA9IHNzZV9nZXRfcmVnX2V2dChldmVudCk7CisKKwlyZXQgPSBzYmlf ZWNhbGwoU0JJX0VYVF9TU0UsIGZ1bmMsIGV2dCwgMCwgMCwgMCwgMCwgMCk7CisJaWYgKHJldC5l cnJvcikgeworCQlwcl93YXJuKCJGYWlsZWQgdG8gZXhlY3V0ZSBmdW5jICVseCwgZXZlbnQgJXgs IGVycm9yICVsZFxuIiwKKwkJCWZ1bmMsIGV2dCwgcmV0LmVycm9yKTsKKwkJcmV0dXJuIHNiaV9l cnJfbWFwX2xpbnV4X2Vycm5vKHJldC5lcnJvcik7CisJfQorCisJaWYgKGZ1bmMgPT0gU0JJX1NT RV9FVkVOVF9ESVNBQkxFKQorCQlyZWdfZXZ0LT5pc19lbmFibGVkID0gZmFsc2U7CisJZWxzZSBp ZiAoZnVuYyA9PSBTQklfU1NFX0VWRU5UX0VOQUJMRSkKKwkJcmVnX2V2dC0+aXNfZW5hYmxlZCA9 IHRydWU7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHNzZV9ldmVudF9kaXNhYmxlX2xvY2FsKHN0 cnVjdCBzc2VfZXZlbnQgKmV2ZW50KQoreworCXJldHVybiBzc2Vfc2JpX2V2ZW50X2Z1bmMoZXZl bnQsIFNCSV9TU0VfRVZFTlRfRElTQUJMRSk7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzc2VfZXZl bnRfZGlzYWJsZV9sb2NhbCk7CisKK2ludCBzc2VfZXZlbnRfZW5hYmxlX2xvY2FsKHN0cnVjdCBz c2VfZXZlbnQgKmV2ZW50KQoreworCXJldHVybiBzc2Vfc2JpX2V2ZW50X2Z1bmMoZXZlbnQsIFNC SV9TU0VfRVZFTlRfRU5BQkxFKTsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNzZV9ldmVudF9lbmFi bGVfbG9jYWwpOworCitzdGF0aWMgaW50IHNzZV9ldmVudF9hdHRyX2dldF9ub19sb2NrKHN0cnVj dCBzc2VfcmVnaXN0ZXJlZF9ldmVudCAqcmVnX2V2dCwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25n IGF0dHJfaWQsIHVuc2lnbmVkIGxvbmcgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2JpcmV0IHNyZXQ7CisJ dTMyIGV2dCA9IHJlZ19ldnQtPmV2ZW50LT5ldnRfaWQ7CisJdW5zaWduZWQgbG9uZyBwaHlzOwor CisJcGh5cyA9IHNzZV9ldmVudF9nZXRfYXR0cl9waHlzKHJlZ19ldnQpOworCisJc3JldCA9IHNi aV9lY2FsbChTQklfRVhUX1NTRSwgU0JJX1NTRV9FVkVOVF9BVFRSX1JFQUQsIGV2dCwgYXR0cl9p ZCwgMSwKKwkJCSBwaHlzLCAwLCAwKTsKKwlpZiAoc3JldC5lcnJvcikgeworCQlwcl9kZWJ1Zygi RmFpbGVkIHRvIGdldCBldmVudCAleCBhdHRyICVseCwgZXJyb3IgJWxkXG4iLCBldnQsCisJCQkg YXR0cl9pZCwgc3JldC5lcnJvcik7CisJCXJldHVybiBzYmlfZXJyX21hcF9saW51eF9lcnJubyhz cmV0LmVycm9yKTsKKwl9CisKKwkqdmFsID0gcmVnX2V2dC0+YXR0cjsKKworCXJldHVybiAwOwor fQorCitzdGF0aWMgaW50IHNzZV9ldmVudF9hdHRyX3NldF9ub2xvY2soc3RydWN0IHNzZV9yZWdp c3RlcmVkX2V2ZW50ICpyZWdfZXZ0LAorCQkJCSAgICAgdW5zaWduZWQgbG9uZyBhdHRyX2lkLCB1 bnNpZ25lZCBsb25nIHZhbCkKK3sKKwlzdHJ1Y3Qgc2JpcmV0IHNyZXQ7CisJdTMyIGV2dCA9IHJl Z19ldnQtPmV2ZW50LT5ldnRfaWQ7CisJdW5zaWduZWQgbG9uZyBwaHlzOworCisJcmVnX2V2dC0+ YXR0ciA9IHZhbDsKKwlwaHlzID0gc3NlX2V2ZW50X2dldF9hdHRyX3BoeXMocmVnX2V2dCk7CisK KwlzcmV0ID0gc2JpX2VjYWxsKFNCSV9FWFRfU1NFLCBTQklfU1NFX0VWRU5UX0FUVFJfV1JJVEUs IGV2dCwgYXR0cl9pZCwgMSwKKwkJCSBwaHlzLCAwLCAwKTsKKwlpZiAoc3JldC5lcnJvcikKKwkJ cHJfZGVidWcoIkZhaWxlZCB0byBzZXQgZXZlbnQgJXggYXR0ciAlbHgsIGVycm9yICVsZFxuIiwg ZXZ0LAorCQkJIGF0dHJfaWQsIHNyZXQuZXJyb3IpOworCisJcmV0dXJuIHNiaV9lcnJfbWFwX2xp bnV4X2Vycm5vKHNyZXQuZXJyb3IpOworfQorCitzdGF0aWMgdm9pZCBzc2VfZ2xvYmFsX2V2ZW50 X3VwZGF0ZV9jcHUoc3RydWN0IHNzZV9ldmVudCAqZXZlbnQsCisJCQkJCXVuc2lnbmVkIGludCBj cHUpCit7CisJc3RydWN0IHNzZV9yZWdpc3RlcmVkX2V2ZW50ICpyZWdfZXZ0ID0gZXZlbnQtPmds b2JhbDsKKworCWV2ZW50LT5jcHUgPSBjcHU7CisJYXJjaF9zc2VfZXZlbnRfdXBkYXRlX2NwdSgm cmVnX2V2dC0+YXJjaCwgY3B1KTsKK30KKworc3RhdGljIGludCBzc2VfZXZlbnRfc2V0X3Rhcmdl dF9jcHVfbm9sb2NrKHN0cnVjdCBzc2VfZXZlbnQgKmV2ZW50LAorCQkJCQkgICB1bnNpZ25lZCBp bnQgY3B1KQoreworCXVuc2lnbmVkIGxvbmcgaGFydF9pZCA9IGNwdWlkX3RvX2hhcnRpZF9tYXAo Y3B1KTsKKwlzdHJ1Y3Qgc3NlX3JlZ2lzdGVyZWRfZXZlbnQgKnJlZ19ldnQgPSBldmVudC0+Z2xv YmFsOworCXUzMiBldnQgPSBldmVudC0+ZXZ0X2lkOworCWJvb2wgd2FzX2VuYWJsZWQ7CisJaW50 IHJldDsKKworCWlmICghc3NlX2V2ZW50X2lzX2dsb2JhbChldnQpKQorCQlyZXR1cm4gLUVJTlZB TDsKKworCXdhc19lbmFibGVkID0gcmVnX2V2dC0+aXNfZW5hYmxlZDsKKwlpZiAod2FzX2VuYWJs ZWQpCisJCXNzZV9ldmVudF9kaXNhYmxlX2xvY2FsKGV2ZW50KTsKKworCXJldCA9IHNzZV9ldmVu dF9hdHRyX3NldF9ub2xvY2socmVnX2V2dCwgU0JJX1NTRV9BVFRSX1BSRUZFUlJFRF9IQVJULAor CQkJCQloYXJ0X2lkKTsKKwlpZiAocmV0ID09IDApCisJCXNzZV9nbG9iYWxfZXZlbnRfdXBkYXRl X2NwdShldmVudCwgY3B1KTsKKworCWlmICh3YXNfZW5hYmxlZCkKKwkJc3NlX2V2ZW50X2VuYWJs ZV9sb2NhbChldmVudCk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHNzZV9ldmVudF9zZXRfdGFy Z2V0X2NwdShzdHJ1Y3Qgc3NlX2V2ZW50ICpldmVudCwgdW5zaWduZWQgaW50IGNwdSkKK3sKKwlp bnQgcmV0OworCisJc2NvcGVkX2d1YXJkKG11dGV4LCAmc3NlX211dGV4KSB7CisJCXNjb3BlZF9n dWFyZChjcHVzX3JlYWRfbG9jaykgeworCQkJaWYgKCFjcHVfb25saW5lKGNwdSkpCisJCQkJcmV0 dXJuIC1FSU5WQUw7CisKKwkJCXJldCA9IHNzZV9ldmVudF9zZXRfdGFyZ2V0X2NwdV9ub2xvY2so ZXZlbnQsIGNwdSk7CisJCX0KKwl9CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9H UEwoc3NlX2V2ZW50X3NldF90YXJnZXRfY3B1KTsKKworc3RhdGljIGludCBzc2VfZXZlbnRfaW5p dF9yZWdpc3RlcmVkKHVuc2lnbmVkIGludCBjcHUsCisJCQkJICAgICBzdHJ1Y3Qgc3NlX3JlZ2lz dGVyZWRfZXZlbnQgKnJlZ19ldnQsCisJCQkJICAgICBzdHJ1Y3Qgc3NlX2V2ZW50ICpldmVudCkK K3sKKwlyZWdfZXZ0LT5ldmVudCA9IGV2ZW50OworCisJcmV0dXJuIGFyY2hfc3NlX2luaXRfZXZl bnQoJnJlZ19ldnQtPmFyY2gsIGV2ZW50LT5ldnRfaWQsIGNwdSk7Cit9CisKK3N0YXRpYyB2b2lk IHNzZV9ldmVudF9mcmVlX3JlZ2lzdGVyZWQoc3RydWN0IHNzZV9yZWdpc3RlcmVkX2V2ZW50ICpy ZWdfZXZ0KQoreworCWFyY2hfc3NlX2ZyZWVfZXZlbnQoJnJlZ19ldnQtPmFyY2gpOworfQorCitz dGF0aWMgaW50IHNzZV9ldmVudF9hbGxvY19nbG9iYWwoc3RydWN0IHNzZV9ldmVudCAqZXZlbnQp Cit7CisJaW50IGVycjsKKwlzdHJ1Y3Qgc3NlX3JlZ2lzdGVyZWRfZXZlbnQgKnJlZ19ldnQ7CisK KwlyZWdfZXZ0ID0ga3phbGxvYyhzaXplb2YoKnJlZ19ldnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAo IXJlZ19ldnQpCisJCXJldHVybiAtRU5PTUVNOworCisJZXZlbnQtPmdsb2JhbCA9IHJlZ19ldnQ7 CisJZXJyID0gc3NlX2V2ZW50X2luaXRfcmVnaXN0ZXJlZChzbXBfcHJvY2Vzc29yX2lkKCksIHJl Z19ldnQsIGV2ZW50KTsKKwlpZiAoZXJyKQorCQlrZnJlZShyZWdfZXZ0KTsKKworCXJldHVybiBl cnI7Cit9CisKK3N0YXRpYyBpbnQgc3NlX2V2ZW50X2FsbG9jX2xvY2FsKHN0cnVjdCBzc2VfZXZl bnQgKmV2ZW50KQoreworCWludCBlcnI7CisJdW5zaWduZWQgaW50IGNwdSwgZXJyX2NwdTsKKwlz dHJ1Y3Qgc3NlX3JlZ2lzdGVyZWRfZXZlbnQgKnJlZ19ldnQ7CisJc3RydWN0IHNzZV9yZWdpc3Rl cmVkX2V2ZW50IF9fcGVyY3B1ICpyZWdfZXZ0czsKKworCXJlZ19ldnRzID0gYWxsb2NfcGVyY3B1 KHN0cnVjdCBzc2VfcmVnaXN0ZXJlZF9ldmVudCk7CisJaWYgKCFyZWdfZXZ0cykKKwkJcmV0dXJu IC1FTk9NRU07CisKKwlldmVudC0+bG9jYWwgPSByZWdfZXZ0czsKKworCWZvcl9lYWNoX3Bvc3Np YmxlX2NwdShjcHUpIHsKKwkJcmVnX2V2dCA9IHBlcl9jcHVfcHRyKHJlZ19ldnRzLCBjcHUpOwor CQllcnIgPSBzc2VfZXZlbnRfaW5pdF9yZWdpc3RlcmVkKGNwdSwgcmVnX2V2dCwgZXZlbnQpOwor CQlpZiAoZXJyKSB7CisJCQllcnJfY3B1ID0gY3B1OworCQkJZ290byBlcnJfZnJlZV9wZXJfY3B1 OworCQl9CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9mcmVlX3Blcl9jcHU6CisJZm9yX2VhY2hf cG9zc2libGVfY3B1KGNwdSkgeworCQlpZiAoY3B1ID09IGVycl9jcHUpCisJCQlicmVhazsKKwkJ cmVnX2V2dCA9IHBlcl9jcHVfcHRyKHJlZ19ldnRzLCBjcHUpOworCQlzc2VfZXZlbnRfZnJlZV9y ZWdpc3RlcmVkKHJlZ19ldnQpOworCX0KKworCWZyZWVfcGVyY3B1KHJlZ19ldnRzKTsKKworCXJl dHVybiBlcnI7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc3NlX2V2ZW50ICpzc2VfZXZlbnRfYWxsb2Mo dTMyIGV2dCwgdTMyIHByaW9yaXR5LAorCQkJCQkgc3NlX2V2ZW50X2hhbmRsZXJfZm4gKmhhbmRs ZXIsIHZvaWQgKmFyZykKK3sKKwlpbnQgZXJyOworCXN0cnVjdCBzc2VfZXZlbnQgKmV2ZW50Owor CisJZXZlbnQgPSBremFsbG9jKHNpemVvZigqZXZlbnQpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWV2 ZW50KQorCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKKworCWV2ZW50LT5ldnRfaWQgPSBldnQ7 CisJZXZlbnQtPnByaW9yaXR5ID0gcHJpb3JpdHk7CisJZXZlbnQtPmhhbmRsZXJfYXJnID0gYXJn OworCWV2ZW50LT5oYW5kbGVyID0gaGFuZGxlcjsKKworCWlmIChzc2VfZXZlbnRfaXNfZ2xvYmFs KGV2dCkpCisJCWVyciA9IHNzZV9ldmVudF9hbGxvY19nbG9iYWwoZXZlbnQpOworCWVsc2UKKwkJ ZXJyID0gc3NlX2V2ZW50X2FsbG9jX2xvY2FsKGV2ZW50KTsKKworCWlmIChlcnIpIHsKKwkJa2Zy ZWUoZXZlbnQpOworCQlyZXR1cm4gRVJSX1BUUihlcnIpOworCX0KKworCXJldHVybiBldmVudDsK K30KKworc3RhdGljIGludCBzc2Vfc2JpX3JlZ2lzdGVyX2V2ZW50KHN0cnVjdCBzc2VfZXZlbnQg KmV2ZW50LAorCQkJCSAgc3RydWN0IHNzZV9yZWdpc3RlcmVkX2V2ZW50ICpyZWdfZXZ0KQorewor CWludCByZXQ7CisKKwlyZXQgPSBzc2VfZXZlbnRfYXR0cl9zZXRfbm9sb2NrKHJlZ19ldnQsIFNC SV9TU0VfQVRUUl9QUklPLAorCQkJCQlldmVudC0+cHJpb3JpdHkpOworCWlmIChyZXQpCisJCXJl dHVybiByZXQ7CisKKwlyZXR1cm4gYXJjaF9zc2VfcmVnaXN0ZXJfZXZlbnQoJnJlZ19ldnQtPmFy Y2gpOworfQorCitzdGF0aWMgaW50IHNzZV9ldmVudF9yZWdpc3Rlcl9sb2NhbChzdHJ1Y3Qgc3Nl X2V2ZW50ICpldmVudCkKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBzc2VfcmVnaXN0ZXJlZF9ldmVu dCAqcmVnX2V2dDsKKworCXJlZ19ldnQgPSBwZXJfY3B1X3B0cihldmVudC0+bG9jYWwsIHNtcF9w cm9jZXNzb3JfaWQoKSk7CisJcmV0ID0gc3NlX3NiaV9yZWdpc3Rlcl9ldmVudChldmVudCwgcmVn X2V2dCk7CisJaWYgKHJldCkKKwkJcHJfZGVidWcoIkZhaWxlZCB0byByZWdpc3RlciBldmVudCAl eDogZXJyICVkXG4iLCBldmVudC0+ZXZ0X2lkLAorCQkJIHJldCk7CisKKwlyZXR1cm4gcmV0Owor fQorCitzdGF0aWMgaW50IHNzZV9zYmlfdW5yZWdpc3Rlcl9ldmVudChzdHJ1Y3Qgc3NlX2V2ZW50 ICpldmVudCkKK3sKKwlyZXR1cm4gc3NlX3NiaV9ldmVudF9mdW5jKGV2ZW50LCBTQklfU1NFX0VW RU5UX1VOUkVHSVNURVIpOworfQorCitzdHJ1Y3Qgc3NlX3Blcl9jcHVfZXZ0IHsKKwlzdHJ1Y3Qg c3NlX2V2ZW50ICpldmVudDsKKwl1bnNpZ25lZCBsb25nIGZ1bmM7CisJY3B1bWFza190IGVycm9y OworfTsKKworc3RhdGljIHZvaWQgc3NlX2V2ZW50X3Blcl9jcHVfZnVuYyh2b2lkICppbmZvKQor eworCWludCByZXQ7CisJc3RydWN0IHNzZV9wZXJfY3B1X2V2dCAqY3B1X2V2dCA9IGluZm87CisK KwlpZiAoY3B1X2V2dC0+ZnVuYyA9PSBTQklfU1NFX0VWRU5UX1JFR0lTVEVSKQorCQlyZXQgPSBz c2VfZXZlbnRfcmVnaXN0ZXJfbG9jYWwoY3B1X2V2dC0+ZXZlbnQpOworCWVsc2UKKwkJcmV0ID0g c3NlX3NiaV9ldmVudF9mdW5jKGNwdV9ldnQtPmV2ZW50LCBjcHVfZXZ0LT5mdW5jKTsKKworCWlm IChyZXQpCisJCWNwdW1hc2tfc2V0X2NwdShzbXBfcHJvY2Vzc29yX2lkKCksICZjcHVfZXZ0LT5l cnJvcik7Cit9CisKK3N0YXRpYyB2b2lkIHNzZV9ldmVudF9mcmVlKHN0cnVjdCBzc2VfZXZlbnQg KmV2ZW50KQoreworCXVuc2lnbmVkIGludCBjcHU7CisJc3RydWN0IHNzZV9yZWdpc3RlcmVkX2V2 ZW50ICpyZWdfZXZ0OworCisJaWYgKHNzZV9ldmVudF9pc19nbG9iYWwoZXZlbnQtPmV2dF9pZCkp IHsKKwkJc3NlX2V2ZW50X2ZyZWVfcmVnaXN0ZXJlZChldmVudC0+Z2xvYmFsKTsKKwkJa2ZyZWUo ZXZlbnQtPmdsb2JhbCk7CisJfSBlbHNlIHsKKwkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkg eworCQkJcmVnX2V2dCA9IHBlcl9jcHVfcHRyKGV2ZW50LT5sb2NhbCwgY3B1KTsKKwkJCXNzZV9l dmVudF9mcmVlX3JlZ2lzdGVyZWQocmVnX2V2dCk7CisJCX0KKwkJZnJlZV9wZXJjcHUoZXZlbnQt PmxvY2FsKTsKKwl9CisKKwlrZnJlZShldmVudCk7Cit9CisKK3N0YXRpYyBpbnQgc3NlX29uX2Vh Y2hfY3B1KHN0cnVjdCBzc2VfZXZlbnQgKmV2ZW50LCB1bnNpZ25lZCBsb25nIGZ1bmMsCisJCQkg ICB1bnNpZ25lZCBsb25nIHJldmVydF9mdW5jKQoreworCXN0cnVjdCBzc2VfcGVyX2NwdV9ldnQg Y3B1X2V2dDsKKworCWNwdV9ldnQuZXZlbnQgPSBldmVudDsKKwljcHVtYXNrX2NsZWFyKCZjcHVf ZXZ0LmVycm9yKTsKKwljcHVfZXZ0LmZ1bmMgPSBmdW5jOworCW9uX2VhY2hfY3B1KHNzZV9ldmVu dF9wZXJfY3B1X2Z1bmMsICZjcHVfZXZ0LCAxKTsKKwkvKgorCSAqIElmIHRoZXJlIGFyZSBzb21l IGVycm9yIHJlcG9ydGVkIGJ5IENQVXMsIHJldmVydCBldmVudCBzdGF0ZSBvbiB0aGUKKwkgKiBv dGhlciBvbmVzCisJICovCisJaWYgKCFjcHVtYXNrX2VtcHR5KCZjcHVfZXZ0LmVycm9yKSkgewor CQljcHVtYXNrX3QgcmV2ZXJ0OworCisJCWNwdW1hc2tfYW5kbm90KCZyZXZlcnQsIGNwdV9vbmxp bmVfbWFzaywgJmNwdV9ldnQuZXJyb3IpOworCQljcHVfZXZ0LmZ1bmMgPSByZXZlcnRfZnVuYzsK KwkJb25fZWFjaF9jcHVfbWFzaygmcmV2ZXJ0LCBzc2VfZXZlbnRfcGVyX2NwdV9mdW5jLCAmY3B1 X2V2dCwgMSk7CisKKwkJcmV0dXJuIC1FSU87CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBz c2VfZXZlbnRfZW5hYmxlKHN0cnVjdCBzc2VfZXZlbnQgKmV2ZW50KQoreworCWludCByZXQgPSAw OworCisJc2NvcGVkX2d1YXJkKG11dGV4LCAmc3NlX211dGV4KSB7CisJCXNjb3BlZF9ndWFyZChj cHVzX3JlYWRfbG9jaykgeworCQkJaWYgKHNzZV9ldmVudF9pc19nbG9iYWwoZXZlbnQtPmV2dF9p ZCkpIHsKKwkJCQlyZXQgPSBzc2VfZXZlbnRfZW5hYmxlX2xvY2FsKGV2ZW50KTsKKwkJCX0gZWxz ZSB7CisJCQkJcmV0ID0gc3NlX29uX2VhY2hfY3B1KGV2ZW50LAorCQkJCQkJICAgICAgU0JJX1NT RV9FVkVOVF9FTkFCTEUsCisJCQkJCQkgICAgICBTQklfU1NFX0VWRU5UX0RJU0FCTEUpOworCQkJ fQorCQl9CisJfQorCXJldHVybiByZXQ7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChzc2VfZXZlbnRf ZW5hYmxlKTsKKworc3RhdGljIGludCBzc2VfZXZlbnRzX21hc2sodm9pZCkKK3sKKwlzdHJ1Y3Qg c2JpcmV0IHJldDsKKworCXJldCA9IHNiaV9lY2FsbChTQklfRVhUX1NTRSwgU0JJX1NTRV9IQVJU X01BU0ssIDAsIDAsIDAsIDAsIDAsIDApOworCisJcmV0dXJuIHNiaV9lcnJfbWFwX2xpbnV4X2Vy cm5vKHJldC5lcnJvcik7Cit9CisKK3N0YXRpYyBpbnQgc3NlX2V2ZW50c191bm1hc2sodm9pZCkK K3sKKwlzdHJ1Y3Qgc2JpcmV0IHJldDsKKworCXJldCA9IHNiaV9lY2FsbChTQklfRVhUX1NTRSwg U0JJX1NTRV9IQVJUX1VOTUFTSywgMCwgMCwgMCwgMCwgMCwgMCk7CisKKwlyZXR1cm4gc2JpX2Vy cl9tYXBfbGludXhfZXJybm8ocmV0LmVycm9yKTsKK30KKworc3RhdGljIHZvaWQgc3NlX2V2ZW50 X2Rpc2FibGVfbm9sb2NrKHN0cnVjdCBzc2VfZXZlbnQgKmV2ZW50KQoreworCXN0cnVjdCBzc2Vf cGVyX2NwdV9ldnQgY3B1X2V2dDsKKworCWlmIChzc2VfZXZlbnRfaXNfZ2xvYmFsKGV2ZW50LT5l dnRfaWQpKSB7CisJCXNzZV9ldmVudF9kaXNhYmxlX2xvY2FsKGV2ZW50KTsKKwl9IGVsc2Ugewor CQljcHVfZXZ0LmV2ZW50ID0gZXZlbnQ7CisJCWNwdV9ldnQuZnVuYyA9IFNCSV9TU0VfRVZFTlRf RElTQUJMRTsKKwkJb25fZWFjaF9jcHUoc3NlX2V2ZW50X3Blcl9jcHVfZnVuYywgJmNwdV9ldnQs IDEpOworCX0KK30KKwordm9pZCBzc2VfZXZlbnRfZGlzYWJsZShzdHJ1Y3Qgc3NlX2V2ZW50ICpl dmVudCkKK3sKKwlzY29wZWRfZ3VhcmQobXV0ZXgsICZzc2VfbXV0ZXgpIHsKKwkJc2NvcGVkX2d1 YXJkKGNwdXNfcmVhZF9sb2NrKSB7CisJCQlzc2VfZXZlbnRfZGlzYWJsZV9ub2xvY2soZXZlbnQp OworCQl9CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwoc3NlX2V2ZW50X2Rpc2FibGUpOworCitz dHJ1Y3Qgc3NlX2V2ZW50ICpzc2VfZXZlbnRfcmVnaXN0ZXIodTMyIGV2dCwgdTMyIHByaW9yaXR5 LAorCQkJCSAgICAgc3NlX2V2ZW50X2hhbmRsZXJfZm4gKmhhbmRsZXIsIHZvaWQgKmFyZykKK3sK KwlzdHJ1Y3Qgc3NlX2V2ZW50ICpldmVudDsKKwlpbnQgY3B1OworCWludCByZXQgPSAwOworCisJ aWYgKCFzc2VfYXZhaWxhYmxlKQorCQlyZXR1cm4gRVJSX1BUUigtRU9QTk9UU1VQUCk7CisKKwln dWFyZChtdXRleCkoJnNzZV9tdXRleCk7CisJaWYgKHNzZV9ldmVudF9nZXQoZXZ0KSkKKwkJcmV0 dXJuIEVSUl9QVFIoLUVFWElTVCk7CisKKwlldmVudCA9IHNzZV9ldmVudF9hbGxvYyhldnQsIHBy aW9yaXR5LCBoYW5kbGVyLCBhcmcpOworCWlmIChJU19FUlIoZXZlbnQpKQorCQlyZXR1cm4gZXZl bnQ7CisKKwlzY29wZWRfZ3VhcmQoY3B1c19yZWFkX2xvY2spIHsKKwkJaWYgKHNzZV9ldmVudF9p c19nbG9iYWwoZXZ0KSkgeworCQkJdW5zaWduZWQgbG9uZyBwcmVmZXJyZWRfaGFydDsKKworCQkJ cmV0ID0gc3NlX2V2ZW50X2F0dHJfZ2V0X25vX2xvY2soZXZlbnQtPmdsb2JhbCwKKwkJCQkJCQlT QklfU1NFX0FUVFJfUFJFRkVSUkVEX0hBUlQsCisJCQkJCQkJJnByZWZlcnJlZF9oYXJ0KTsKKwkJ CWlmIChyZXQpCisJCQkJZ290byBlcnJfZXZlbnRfZnJlZTsKKworCQkJY3B1ID0gcmlzY3ZfaGFy dGlkX3RvX2NwdWlkKHByZWZlcnJlZF9oYXJ0KTsKKwkJCXNzZV9nbG9iYWxfZXZlbnRfdXBkYXRl X2NwdShldmVudCwgY3B1KTsKKworCQkJcmV0ID0gc3NlX3NiaV9yZWdpc3Rlcl9ldmVudChldmVu dCwgZXZlbnQtPmdsb2JhbCk7CisJCQlpZiAocmV0KQorCQkJCWdvdG8gZXJyX2V2ZW50X2ZyZWU7 CisKKwkJfSBlbHNlIHsKKwkJCXJldCA9IHNzZV9vbl9lYWNoX2NwdShldmVudCwgU0JJX1NTRV9F VkVOVF9SRUdJU1RFUiwKKwkJCQkJICAgICAgU0JJX1NTRV9FVkVOVF9ESVNBQkxFKTsKKwkJCWlm IChyZXQpCisJCQkJZ290byBlcnJfZXZlbnRfZnJlZTsKKwkJfQorCX0KKworCXNjb3BlZF9ndWFy ZChzcGlubG9jaywgJmV2ZW50c19saXN0X2xvY2spCisJCWxpc3RfYWRkKCZldmVudC0+bGlzdCwg JmV2ZW50cyk7CisKKwlyZXR1cm4gZXZlbnQ7CisKK2Vycl9ldmVudF9mcmVlOgorCXNzZV9ldmVu dF9mcmVlKGV2ZW50KTsKKworCXJldHVybiBFUlJfUFRSKHJldCk7Cit9CitFWFBPUlRfU1lNQk9M X0dQTChzc2VfZXZlbnRfcmVnaXN0ZXIpOworCitzdGF0aWMgdm9pZCBzc2VfZXZlbnRfdW5yZWdp c3Rlcl9ub2xvY2soc3RydWN0IHNzZV9ldmVudCAqZXZlbnQpCit7CisJc3RydWN0IHNzZV9wZXJf Y3B1X2V2dCBjcHVfZXZ0OworCisJaWYgKHNzZV9ldmVudF9pc19nbG9iYWwoZXZlbnQtPmV2dF9p ZCkpIHsKKwkJc3NlX3NiaV91bnJlZ2lzdGVyX2V2ZW50KGV2ZW50KTsKKwl9IGVsc2UgeworCQlj cHVfZXZ0LmV2ZW50ID0gZXZlbnQ7CisJCWNwdV9ldnQuZnVuYyA9IFNCSV9TU0VfRVZFTlRfVU5S RUdJU1RFUjsKKwkJb25fZWFjaF9jcHUoc3NlX2V2ZW50X3Blcl9jcHVfZnVuYywgJmNwdV9ldnQs IDEpOworCX0KK30KKwordm9pZCBzc2VfZXZlbnRfdW5yZWdpc3RlcihzdHJ1Y3Qgc3NlX2V2ZW50 ICpldmVudCkKK3sKKwlzY29wZWRfZ3VhcmQobXV0ZXgsICZzc2VfbXV0ZXgpIHsKKwkJc2NvcGVk X2d1YXJkKGNwdXNfcmVhZF9sb2NrKQorCQkJc3NlX2V2ZW50X3VucmVnaXN0ZXJfbm9sb2NrKGV2 ZW50KTsKKworCQlzY29wZWRfZ3VhcmQoc3BpbmxvY2ssICZldmVudHNfbGlzdF9sb2NrKQorCQkJ bGlzdF9kZWwoJmV2ZW50LT5saXN0KTsKKworCQlzc2VfZXZlbnRfZnJlZShldmVudCk7CisJfQor fQorRVhQT1JUX1NZTUJPTF9HUEwoc3NlX2V2ZW50X3VucmVnaXN0ZXIpOworCitzdGF0aWMgaW50 IHNzZV9jcHVfb25saW5lKHVuc2lnbmVkIGludCBjcHUpCit7CisJc3RydWN0IHNzZV9ldmVudCAq ZXZlbnQ7CisKKwlzY29wZWRfZ3VhcmQoc3BpbmxvY2ssICZldmVudHNfbGlzdF9sb2NrKSB7CisJ CWxpc3RfZm9yX2VhY2hfZW50cnkoZXZlbnQsICZldmVudHMsIGxpc3QpIHsKKwkJCWlmIChzc2Vf ZXZlbnRfaXNfZ2xvYmFsKGV2ZW50LT5ldnRfaWQpKQorCQkJCWNvbnRpbnVlOworCisJCQlzc2Vf ZXZlbnRfcmVnaXN0ZXJfbG9jYWwoZXZlbnQpOworCQkJaWYgKHNzZV9nZXRfcmVnX2V2dChldmVu dCkpCisJCQkJc3NlX2V2ZW50X2VuYWJsZV9sb2NhbChldmVudCk7CisJCX0KKwl9CisKKwkvKiBS ZWFkeSB0byBoYW5kbGUgZXZlbnRzLiBVbm1hc2sgU1NFLiAqLworCXJldHVybiBzc2VfZXZlbnRz X3VubWFzaygpOworfQorCitzdGF0aWMgaW50IHNzZV9jcHVfdGVhcmRvd24odW5zaWduZWQgaW50 IGNwdSkKK3sKKwlpbnQgcmV0ID0gMDsKKwl1bnNpZ25lZCBpbnQgbmV4dF9jcHU7CisJc3RydWN0 IHNzZV9ldmVudCAqZXZlbnQ7CisKKwkvKiBNYXNrIHRoZSBzc2UgZXZlbnRzICovCisJcmV0ID0g c3NlX2V2ZW50c19tYXNrKCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCXNjb3BlZF9n dWFyZChzcGlubG9jaywgJmV2ZW50c19saXN0X2xvY2spIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRy eShldmVudCwgJmV2ZW50cywgbGlzdCkgeworCQkJaWYgKCFzc2VfZXZlbnRfaXNfZ2xvYmFsKGV2 ZW50LT5ldnRfaWQpKSB7CisJCQkJaWYgKGV2ZW50LT5nbG9iYWwtPmlzX2VuYWJsZWQpCisJCQkJ CXNzZV9ldmVudF9kaXNhYmxlX2xvY2FsKGV2ZW50KTsKKworCQkJCXNzZV9zYmlfdW5yZWdpc3Rl cl9ldmVudChldmVudCk7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWlmIChldmVudC0+Y3B1 ICE9IHNtcF9wcm9jZXNzb3JfaWQoKSkKKwkJCQljb250aW51ZTsKKworCQkJLyogVXBkYXRlIGRl c3RpbmF0aW9uIGhhcnQgZm9yIGdsb2JhbCBldmVudCAqLworCQkJbmV4dF9jcHUgPSBjcHVtYXNr X2FueV9idXQoY3B1X29ubGluZV9tYXNrLCBjcHUpOworCQkJcmV0ID0gc3NlX2V2ZW50X3NldF90 YXJnZXRfY3B1X25vbG9jayhldmVudCwgbmV4dF9jcHUpOworCQl9CisJfQorCisJcmV0dXJuIHJl dDsKK30KKworc3RhdGljIHZvaWQgc3NlX3Jlc2V0KHZvaWQpCit7CisJc3RydWN0IHNzZV9ldmVu dCAqZXZlbnQ7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGV2ZW50LCAmZXZlbnRzLCBsaXN0KSB7 CisJCXNzZV9ldmVudF9kaXNhYmxlX25vbG9jayhldmVudCk7CisJCXNzZV9ldmVudF91bnJlZ2lz dGVyX25vbG9jayhldmVudCk7CisJfQorfQorCitzdGF0aWMgaW50IHNzZV9wbV9ub3RpZmllcihz dHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwKKwkJCSAgIHZv aWQgKmRhdGEpCit7CisJV0FSTl9PTl9PTkNFKHByZWVtcHRpYmxlKCkpOworCisJc3dpdGNoIChh Y3Rpb24pIHsKKwljYXNlIENQVV9QTV9FTlRFUjoKKwkJc3NlX2V2ZW50c19tYXNrKCk7CisJCWJy ZWFrOworCWNhc2UgQ1BVX1BNX0VYSVQ6CisJY2FzZSBDUFVfUE1fRU5URVJfRkFJTEVEOgorCQlz c2VfZXZlbnRzX3VubWFzaygpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gTk9USUZZ X0RPTkU7CisJfQorCisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworc3RhdGljIHN0cnVjdCBub3Rp Zmllcl9ibG9jayBzc2VfcG1fbmIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBzc2VfcG1fbm90aWZp ZXIsCit9OworCisvKgorICogTWFzayBhbGwgQ1BVcyBhbmQgdW5yZWdpc3RlciBhbGwgZXZlbnRz IG9uIHBhbmljLCByZWJvb3Qgb3Iga2V4ZWMuCisgKi8KK3N0YXRpYyBpbnQgc3NlX3JlYm9vdF9u b3RpZmllcihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbiwK KwkJCSAgICAgICB2b2lkICpkYXRhKQoreworCWNwdWhwX3JlbW92ZV9zdGF0ZShzc2VfaHBfc3Rh dGUpOworCXNzZV9yZXNldCgpOworCisJcmV0dXJuIE5PVElGWV9PSzsKK30KKworc3RhdGljIHN0 cnVjdCBub3RpZmllcl9ibG9jayBzc2VfcmVib290X25iID0geworCS5ub3RpZmllcl9jYWxsID0g c3NlX3JlYm9vdF9ub3RpZmllciwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNzZV9pbml0KHZv aWQpCit7CisJaW50IHJldDsKKworCWlmIChzYmlfcHJvYmVfZXh0ZW5zaW9uKFNCSV9FWFRfU1NF KSA8PSAwKSB7CisJCXByX2VycigiTWlzc2luZyBTQkkgU1NFIGV4dGVuc2lvblxuIik7CisJCXJl dHVybiAtRU9QTk9UU1VQUDsKKwl9CisJcHJfaW5mbygiU0JJIFNTRSBleHRlbnNpb24gZGV0ZWN0 ZWRcbiIpOworCisJcmV0ID0gY3B1X3BtX3JlZ2lzdGVyX25vdGlmaWVyKCZzc2VfcG1fbmIpOwor CWlmIChyZXQpIHsKKwkJcHJfd2FybigiRmFpbGVkIHRvIHJlZ2lzdGVyIENQVSBQTSBub3RpZmll ci4uLlxuIik7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0ID0gcmVnaXN0ZXJfcmVib290X25v dGlmaWVyKCZzc2VfcmVib290X25iKTsKKwlpZiAocmV0KSB7CisJCXByX3dhcm4oIkZhaWxlZCB0 byByZWdpc3RlciByZWJvb3Qgbm90aWZpZXIuLi5cbiIpOworCQlnb3RvIHJlbW92ZV9jcHVwbTsK Kwl9CisKKwlyZXQgPSBjcHVocF9zZXR1cF9zdGF0ZShDUFVIUF9BUF9PTkxJTkVfRFlOLCAicmlz Y3Yvc3NlOm9ubGluZSIsCisJCQkJc3NlX2NwdV9vbmxpbmUsIHNzZV9jcHVfdGVhcmRvd24pOwor CWlmIChyZXQgPCAwKQorCQlnb3RvIHJlbW92ZV9yZWJvb3Q7CisKKwlzc2VfaHBfc3RhdGUgPSBy ZXQ7CisJc3NlX2F2YWlsYWJsZSA9IHRydWU7CisKKwlyZXR1cm4gMDsKKworcmVtb3ZlX3JlYm9v dDoKKwl1bnJlZ2lzdGVyX3JlYm9vdF9ub3RpZmllcigmc3NlX3JlYm9vdF9uYik7CisKK3JlbW92 ZV9jcHVwbToKKwljcHVfcG1fdW5yZWdpc3Rlcl9ub3RpZmllcigmc3NlX3BtX25iKTsKKworCXJl dHVybiByZXQ7Cit9CithcmNoX2luaXRjYWxsKHNzZV9pbml0KTsKZGlmZiAtLWdpdCBhL2luY2x1 ZGUvbGludXgvcmlzY3Zfc2JpX3NzZS5oIGIvaW5jbHVkZS9saW51eC9yaXNjdl9zYmlfc3NlLmgK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5hMWI1OGU4OWRkMTkKLS0t IC9kZXYvbnVsbAorKysgYi9pbmNsdWRlL2xpbnV4L3Jpc2N2X3NiaV9zc2UuaApAQCAtMCwwICsx LDU3IEBACisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLworLyoKKyAqIENv cHlyaWdodCAoQykgMjAyNCBSaXZvcyBJbmMuCisgKi8KKworI2lmbmRlZiBfX0xJTlVYX1JJU0NW X1NCSV9TU0VfSAorI2RlZmluZSBfX0xJTlVYX1JJU0NWX1NCSV9TU0VfSAorCisjaW5jbHVkZSA8 bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisKK3N0cnVjdCBzc2Vf ZXZlbnQ7CitzdHJ1Y3QgcHRfcmVnczsKKwordHlwZWRlZiBpbnQgKHNzZV9ldmVudF9oYW5kbGVy X2ZuKSh1MzIgZXZlbnRfbnVtLCB2b2lkICphcmcsCisJCQkJICAgc3RydWN0IHB0X3JlZ3MgKnJl Z3MpOworCisjaWZkZWYgQ09ORklHX1JJU0NWX1NCSV9TU0UKKworc3RydWN0IHNzZV9ldmVudCAq c3NlX2V2ZW50X3JlZ2lzdGVyKHUzMiBldmVudF9udW0sIHUzMiBwcmlvcml0eSwKKwkJCQkgICAg IHNzZV9ldmVudF9oYW5kbGVyX2ZuICpoYW5kbGVyLCB2b2lkICphcmcpOworCit2b2lkIHNzZV9l dmVudF91bnJlZ2lzdGVyKHN0cnVjdCBzc2VfZXZlbnQgKmV2dCk7CisKK2ludCBzc2VfZXZlbnRf c2V0X3RhcmdldF9jcHUoc3RydWN0IHNzZV9ldmVudCAqc3NlX2V2dCwgdW5zaWduZWQgaW50IGNw dSk7CisKK2ludCBzc2VfZXZlbnRfZW5hYmxlKHN0cnVjdCBzc2VfZXZlbnQgKnNzZV9ldnQpOwor Cit2b2lkIHNzZV9ldmVudF9kaXNhYmxlKHN0cnVjdCBzc2VfZXZlbnQgKnNzZV9ldnQpOworCitp bnQgc3NlX2V2ZW50X2VuYWJsZV9sb2NhbChzdHJ1Y3Qgc3NlX2V2ZW50ICpzc2VfZXZ0KTsKK2lu dCBzc2VfZXZlbnRfZGlzYWJsZV9sb2NhbChzdHJ1Y3Qgc3NlX2V2ZW50ICpzc2VfZXZ0KTsKKwor I2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNzZV9ldmVudCAqc3NlX2V2ZW50X3JlZ2lzdGVy KHUzMiBldmVudF9udW0sIHUzMiBwcmlvcml0eSwKKwkJCQkJCSAgIHNzZV9ldmVudF9oYW5kbGVy X2ZuICpoYW5kbGVyLAorCQkJCQkJICAgdm9pZCAqYXJnKQoreworCXJldHVybiBFUlJfUFRSKC1F T1BOT1RTVVBQKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNzZV9ldmVudF91bnJlZ2lzdGVy KHN0cnVjdCBzc2VfZXZlbnQgKmV2dCkge30KKworc3RhdGljIGlubGluZSBpbnQgc3NlX2V2ZW50 X3NldF90YXJnZXRfY3B1KHN0cnVjdCBzc2VfZXZlbnQgKnNzZV9ldnQsCisJCQkJCSAgIHVuc2ln bmVkIGludCBjcHUpCit7CisJcmV0dXJuIC1FT1BOT1RTVVBQOworfQorCitzdGF0aWMgaW5saW5l IGludCBzc2VfZXZlbnRfZW5hYmxlKHN0cnVjdCBzc2VfZXZlbnQgKnNzZV9ldnQpCit7CisJcmV0 dXJuIC1FT1BOT1RTVVBQOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgc3NlX2V2ZW50X2Rpc2Fi bGUoc3RydWN0IHNzZV9ldmVudCAqc3NlX2V2dCkge30KKyNlbmRpZgorI2VuZGlmIC8qIF9fTElO VVhfUklTQ1ZfU0JJX1NTRV9IICovCi0tIAoyLjQzLjAKCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1yaXNjdiBtYWlsaW5nIGxpc3QKbGludXgt cmlzY3ZAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWls bWFuL2xpc3RpbmZvL2xpbnV4LXJpc2N2Cg==