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=-0.5 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, FROM_EXCESS_BASE64,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED 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 80B94C31E5E for ; Tue, 18 Jun 2019 15:16:13 +0000 (UTC) Received: from krantz.zx2c4.com (krantz.zx2c4.com [192.95.5.69]) (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 91670213F2 for ; Tue, 18 Jun 2019 15:16:12 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="key not found in DNS" (0-bit key) header.d=efcloud.co header.i=@efcloud.co header.b="OkcehDtG" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 91670213F2 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=hess.ooo Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=wireguard-bounces@lists.zx2c4.com Received: from krantz.zx2c4.com (localhost [IPv6:::1]) by krantz.zx2c4.com (ZX2C4 Mail Server) with ESMTP id ea0c2e1d; Tue, 18 Jun 2019 15:14:50 +0000 (UTC) Received: from krantz.zx2c4.com (localhost [127.0.0.1]) by krantz.zx2c4.com (ZX2C4 Mail Server) with ESMTP id 9c2ac78c for ; Fri, 7 Jun 2019 18:21:45 +0000 (UTC) Received: from mx1.efcloud.co (mango.efcloud.co [IPv6:2a03:4000:6:50dc::1]) by krantz.zx2c4.com (ZX2C4 Mail Server) with ESMTP id 361c55ab for ; Fri, 7 Jun 2019 18:21:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=efcloud.co; s=mango; h=Sender:Cc:To:Subject:Message-ID:From:Content-Type:Date: MIME-Version:Reply-To:Content-Transfer-Encoding:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=CdCZYwoGu7gtRmxvpzAK1Yr8YQprg3n7ZcB1XGj9LIE=; b=OkcehDtG2hpP49Mdu2KOa+PNGl ZixbdP5kH9AgXNyHJsRiARO0umHPaBnlcYQ5PLUiIdERAIgo2TLXmKEMbrrnd1SWLEmgz4qFlPqHZ zlFU+iSETGGR3OJZXREqOMHdCevgtdv1W39+nt6gGY3bjxi59PcUUuCZngur/LMQ8FXSzUNNsES1q cjetyEpkjf/obbHWe3uxI0A80h6+TNNEylEe3ZNm1uK8zuX9iDPr92ofNTjleE87Cy/OQHNyeJGGa r9PE33V7+iEhsXdwtsxyFcahvjFOcp1xT/leEN93nS/dmcqEDwm3929f8zaSYWA0lp+nfaS8ulW4P cvrwaZUw==; Received: from localhost ([127.0.0.1] helo=webmail.efcloud.co) by mx1.efcloud.co with esmtpsa (TLSv1.2:ECDHE-RSA-AES128-GCM-SHA256:128) (envelope-from ) ; Fri, 07 Jun 2019 18:21:42 +0000 MIME-Version: 1.0 Date: Fri, 07 Jun 2019 18:21:42 +0000 Content-Type: multipart/mixed; boundary="--=_RainLoop_925_777050238.1559931702" X-Mailer: RainLoop/1.12.1 From: "=?utf-8?B?SmFubmUgSGXDnw==?=" Message-ID: <524c0c7c670e5525c2911bdde2b1211a@hess.ooo> Subject: Introduce Wireguard support to bird To: bird-users@network.cz X-Mailman-Approved-At: Tue, 18 Jun 2019 17:14:48 +0200 Cc: wireguard@lists.zx2c4.com X-BeenThere: wireguard@lists.zx2c4.com X-Mailman-Version: 2.1.15 Precedence: list List-Id: Development discussion of WireGuard List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: wireguard-bounces@lists.zx2c4.com Sender: "WireGuard" ----=_RainLoop_925_777050238.1559931702 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Hey everyone,=0A=0Aas advertised, I have completed the Wireguard support.= =0AYou might see that I am not really a C expert, but I hope the code is = good enough.=0AIf you need me to change anything or have additional quest= ions, just let me know.=0A=0ARegards=0AJanne ----=_RainLoop_925_777050238.1559931702 Content-Type: application/octet-stream; name="0001-sysdep-linux-Introduce-Wireguard-support.patch" Content-Disposition: attachment; filename="0001-sysdep-linux-Introduce-Wireguard-support.patch" Content-Transfer-Encoding: base64 RnJvbSA1Y2U1NDI5NjllNDIwZjBiNzA0Mjk0OWU2YWEwOTNkYTE4MjY0MDQ1IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiA9P1VURi04P3E/SmFubmU9MjBIZT1DMz05Rj89IDxq YW5uZUBoZXNzLm9vbz4KRGF0ZTogRnJpLCAzIE1heSAyMDE5IDEzOjA3OjE5ICswMjAwClN1 YmplY3Q6IFtQQVRDSF0gc3lzZGVwL2xpbnV4OiBJbnRyb2R1Y2UgV2lyZWd1YXJkIHN1cHBv cnQKClRoZSBjb2RlIGNoYW5nZXMgdGhlIGFsbG93ZWQgSVBzIG9mIGFuIGludGVyZmFjZSBh dXRvbWF0aWNhbGx5IGlmCm5ldHdvcmtzIGFyZSByb3V0ZWQgdmlhIGEgV2lyZWd1YXJkIGlu dGVyZmFjZS4gVGhpcyBpcyByZXF1aXJlZCBpbiBvcmRlcgp0byBjb21tdW5pY2F0ZSB3aXRo IHRoZSBwZWVyLgoKVGhlIGNvZGUgcmVzaWRlcyBpbiB0aGUgc3lzZGVwIHRyZWUgYmVjYXVz ZSBpdCBpcyBvbmx5IHN1cHBvcnRlZCBvbgpMaW51eCBmb3Igbm93ICh2aWEgbmV0bGluayku IFRoZSBuZXRsaW5rIGNvbm5lY3Rpb24gYWxzbyBtZWFucyB0aGF0IG9ubHkKdGhlIGtlcm5l bCBtb2R1bGUgaXMgc3VwcG9ydGVkIGFuZCBubyB1c2Vyc3BhY2UgaW1wbGVtZW50YXRpb24u CgpJbnN0ZWFkIG9mIHVzaW5nIHRoZSBwcmVleGlzdGluZyBuZXRsaW5rIGNvZGUsIHRoZSBv ZmZpY2lhbCBlbWJlZGRhYmxlCldpcmVndWFyZCBsaWJyYXJ5IGlzIHVzZWQuIFRoaXMgZW5z dXJlcyB0aGF0IHdoZW4gdGhlIGNvZGUgb2YgdGhlIGtlcm5lbAptb2R1bGUgY2hhbmdlcywg dGhlIG1vZGlmaWNhdGlvbnMgY2FuIGVhc2lseSBiZSByZWZsZWN0ZWQgaW4gYmlyZC4KCkl0 IG1heSBzZWVtIHN0cmFuZ2UgdG8gaW5jbHVkZSB0aGUgZW50aXJlIGxpYnJhcnkgd2l0aCB0 aGlzIGNvbW1pdCwgYnV0CnRoZSBSRUFETUUgaW4gY29udHJpYi9leGFtcGxlcy9lbWJlZGRh YmxlLXdnLWxpYnJhcnkgbWVudGlvbnMgaXQncyBub3QKbWVhbnQgdG8gYmUgYnVpbHQgYXMg YSBzaGFyZWQgbGlicmFyeSBhbmQgcmF0aGVyIHRvIGJlIGVtYmVkZGVkIGludG8gdGhlCnBy b2plY3QuCkFzIHdpcmVndWFyZC5oIGFscmVhZHkgaW5jbHVkZXMgaWYuaCwgd2UgbXVzdCBu b3QgZG8gdGhhdCBhZ2FpbiBpbgpuZXRsaW5rLmMuCi0tLQogY29uZmlndXJlLmFjICAgICAg ICAgICAgIHwgICAxMSArCiBzeXNkZXAvbGludXgvTWFrZWZpbGUgICAgfCAgICAyICstCiBz eXNkZXAvbGludXgvbmV0bGluay5jICAgfCAgMTQzICsrLQogc3lzZGVwL2xpbnV4L3dpcmVn dWFyZC5jIHwgMTc3MSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwog c3lzZGVwL2xpbnV4L3dpcmVndWFyZC5oIHwgIDEwMyArKysKIDUgZmlsZXMgY2hhbmdlZCwg MjAyMSBpbnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0 IHN5c2RlcC9saW51eC93aXJlZ3VhcmQuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHN5c2RlcC9s aW51eC93aXJlZ3VhcmQuaAoKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3Vy ZS5hYwppbmRleCBkYTFhOGY0NC4uMzU0ZDEzMDQgMTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5h YworKysgYi9jb25maWd1cmUuYWMKQEAgLTQyLDYgKzQyLDEyIEBAIEFDX0FSR19FTkFCTEUo W21wbHMta2VybmVsXSwKICAgW2VuYWJsZV9tcGxzX2tlcm5lbD10cnldCiApCiAKK0FDX0FS R19FTkFCTEUoW3dpcmVndWFyZF0sCisgIFtBU19IRUxQX1NUUklORyhbLS1lbmFibGUtd2ly ZWd1YXJkXSwgW2VuYWJsZSBXaXJlR3VhcmQgaW50ZXJmYWNlIHN1cHBvcnQgQDw6QHllc0A6 PkBdKV0sCisgIFtdLAorICBbZW5hYmxlX3dpcmVndWFyZD15ZXNdCispCisKIEFDX0FSR19X SVRIKFtwcm90b2NvbHNdLAogICBbQVNfSEVMUF9TVFJJTkcoWy0td2l0aC1wcm90b2NvbHM9 TElTVF0sIFtpbmNsdWRlIHNwZWNpZmllZCByb3V0aW5nIHByb3RvY29scyBAPDpAYWxsQDo+ QF0pXSwKICAgW10sCkBAIC0xMjYsNiArMTMyLDEwIEBAIGlmIHRlc3QgIiRlbmFibGVfcHRo cmVhZHMiICE9IG5vIDsgdGhlbgogICBmaQogZmkKIAoraWYgdGVzdCAiJGVuYWJsZV93aXJl Z3VhcmQiICE9IG5vIDsgdGhlbgorICBBQ19ERUZJTkUoW1dJVEhfV0lSRUdVQVJEXSwgWzFd LCBbRGVmaW5lIHRvIDEgaWYgV2lyZUd1YXJkIGlzIGVuYWJsZWRdKQorZmkKKwogaWYgdGVz dCAiJGJpcmRfY2ZsYWdzX2RlZmF1bHQiID0geWVzIDsgdGhlbgogICBCSVJEX0NIRUNLX0dD Q19PUFRJT04oW2JpcmRfY3ZfY19vcHRpb25fd25vX3BvaW50ZXJfc2lnbl0sIFstV25vLXBv aW50ZXItc2lnbl0sIFstV2FsbF0pCiAgIEJJUkRfQ0hFQ0tfR0NDX09QVElPTihbYmlyZF9j dl9jX29wdGlvbl93bm9fbWlzc2luZ19pbml0XSwgWy1Xbm8tbWlzc2luZy1maWVsZC1pbml0 aWFsaXplcnNdLCBbLVdhbGwgLVdleHRyYV0pCkBAIC00MjcsNiArNDM3LDcgQEAgQUNfTVNH X1JFU1VMVChbICAgICAgICBJcHJvdXRlMiBkaXJlY3Rvcnk6CSRpcHJvdXRlZGlyXSkKIEFD X01TR19SRVNVTFQoWyAgICAgICAgU3lzdGVtIGNvbmZpZ3VyYXRpb246CSRzeXNkZXNjXSkK IEFDX01TR19SRVNVTFQoWyAgICAgICAgRGVidWdnaW5nOgkJJGVuYWJsZV9kZWJ1Z10pCiBB Q19NU0dfUkVTVUxUKFsgICAgICAgIFBPU0lYIHRocmVhZHM6CQkkZW5hYmxlX3B0aHJlYWRz XSkKK0FDX01TR19SRVNVTFQoWyAgICAgICAgV2lyZUd1YXJkOgkJJGVuYWJsZV93aXJlZ3Vh cmRdKQogQUNfTVNHX1JFU1VMVChbICAgICAgICBSb3V0aW5nIHByb3RvY29sczoJJHByb3Rv Y29sc10pCiBBQ19NU0dfUkVTVUxUKFsgICAgICAgIEtlcm5lbCBNUExTIHN1cHBvcnQ6CSRl bmFibGVfbXBsc19rZXJuZWxdKQogQUNfTVNHX1JFU1VMVChbICAgICAgICBDbGllbnQ6CQkJ JGVuYWJsZV9jbGllbnRdKQpkaWZmIC0tZ2l0IGEvc3lzZGVwL2xpbnV4L01ha2VmaWxlIGIv c3lzZGVwL2xpbnV4L01ha2VmaWxlCmluZGV4IDE4OGFjOGRlLi4xMmJiMjZjMSAxMDA2NDQK LS0tIGEvc3lzZGVwL2xpbnV4L01ha2VmaWxlCisrKyBiL3N5c2RlcC9saW51eC9NYWtlZmls ZQpAQCAtMSw0ICsxLDQgQEAKLXNyYyA6PSBuZXRsaW5rLmMKK3NyYyA6PSBuZXRsaW5rLmMg d2lyZWd1YXJkLmMKIG9iaiA6PSAkKHNyYy1vLWZpbGVzKQogJChhbGwtZGFlbW9uKQogJChj b25mLXktdGFyZ2V0cyk6ICQocyluZXRsaW5rLlkKZGlmZiAtLWdpdCBhL3N5c2RlcC9saW51 eC9uZXRsaW5rLmMgYi9zeXNkZXAvbGludXgvbmV0bGluay5jCmluZGV4IGQ3NzM3NDNkLi40 NjA2MzUzYiAxMDA2NDQKLS0tIGEvc3lzZGVwL2xpbnV4L25ldGxpbmsuYworKysgYi9zeXNk ZXAvbGludXgvbmV0bGluay5jCkBAIC0yNiwxMiArMjYsMTggQEAKICNpbmNsdWRlICJsaWIv c29ja2V0LmgiCiAjaW5jbHVkZSAibGliL3N0cmluZy5oIgogI2luY2x1ZGUgImxpYi9oYXNo LmgiCisjaW5jbHVkZSAibGliL2JpcmRsaWIuaCIKICNpbmNsdWRlICJjb25mL2NvbmYuaCIK IAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2lmLmg+CiAjaW5j bHVkZSA8bGludXgvbmV0bGluay5oPgogI2luY2x1ZGUgPGxpbnV4L3J0bmV0bGluay5oPgor I2lmZGVmIFdJVEhfV0lSRUdVQVJECisjaW5jbHVkZSAic3RkbGliLmgiIC8vIGZyZWUoKQor I2luY2x1ZGUgIndpcmVndWFyZC5oIgorI2Vsc2UKKyNpbmNsdWRlIDxsaW51eC9pZi5oPgor I2VuZGlmCiAKICNpZmRlZiBIQVZFX01QTFNfS0VSTkVMCiAjaW5jbHVkZSA8bGludXgvbHd0 dW5uZWwuaD4KQEAgLTExNzYsNiArMTE4MiwxMjMgQEAgbmhfYnVmc2l6ZShzdHJ1Y3QgbmV4 dGhvcCAqbmgpCiAgIHJldHVybiBydjsKIH0KIAorI2lmZGVmIFdJVEhfV0lSRUdVQVJECitz dGF0aWMgaW5saW5lIGJvb2wgbmxfbmV0X292ZXJsYXBzKGlwX2FkZHIgYSwgaXBfYWRkciBi LCB1MzIgY2lkciwgdTMyIGZhbWlseSkKK3sKKyAgdTMyIGk7CisgIHUzMiBtYXNrOworCisg IC8vIHY2LW1hcHBlZCB2NCBhZGRyZXNzZXMKKyAgaWYgKGZhbWlseSA9PSBBRl9JTkVUKQor ICAgIGNpZHIgKz0gKDEyOCAtIDMyKTsKKworICBmb3IgKGk9MDsgaTw0OyBpKyspIHsKKyAg ICBtYXNrID0gfjA7CisgICAgaWYgKChjaWRyIC0gaSozMikgLyAzMiA8IDEpCisgICAgICBt YXNrIDw8PSAzMiAtIGNpZHIlMzI7CisKKyAgICBpZiAoKGEuYWRkcltpXSAmIG1hc2spICE9 IChiLmFkZHJbaV0gJiBtYXNrKSkKKyAgICAgIHJldHVybiBmYWxzZTsKKyAgfQorICByZXR1 cm4gdHJ1ZTsKK30KKworc3RhdGljIHZvaWQgbmxfaGFuZGxlX3dpcmVndWFyZChjaGFyICpp ZmFjZSwgaW50IG9wLCBpcF9hZGRyIGd3LCBuZXRfYWRkciAqbmV0KQoreworICBpbnQgZXJy OworICB3Z19kZXZpY2UgKmRldjsgLy8gQ3VycmVudCBkZXZpY2UKKyAgd2dfcGVlciAqcGVl cjsgLy8gQ3VycmVudCBwZWVyIGluIHRoZSBsaXN0CisgIHdnX3BlZXIgKnZpYXRoaXMgPSBO VUxMOyAvLyBSb3V0ZSB2aWEgdGhpcyBwZWVyCisgIHU4IHZpYXRoaXNDaWRyID0gMDsgLy8g dmlhdGhpcyBoYXMgdGhpcyBDSURSCisgIHdnX2FsbG93ZWRpcCAqYWxsb3dlZGlwOyAvLyBD dXJyZW50IElQIGluIHRoZSBsaXN0CisgIGlwX2FkZHIgYWxsb3dlZGlwYTsgLy8gVGhlIHNh bWUsIGJ1dCBhcyBpcF9hZGRyCisgIHdnX2FsbG93ZWRpcCAqcHJldmlwOyAvLyBQcmV2aW91 cyBJUCBpbiB0aGUgbGlzdAorICBib29sIGZyZWVkOyAvLyBXaGV0aGVyIHRoaXMgYWxsb3dl ZCBJUCB3YXMgZnJlZWQKKyAgc3RydWN0IHdnX2FsbG93ZWRpcCAqbmV3X2lwOyAvLyBOZXcg YWxsb3dlZCBJUCB0byBpbnNlcnQKKworICBEQkcoIm5sX2hhbmRsZV93aXJlZ3VhcmQ6ICVz IHJvdXRlIHRvICVOIG9uICVzIiwgb3AgPyAiQWRkaW5nIiA6ICJSZW1vdmluZyIsIG5ldCwg aWZhY2UpOworCisgIGVyciA9IHdnX2dldF9kZXZpY2UoJmRldiwgaWZhY2UpOworICBpZiAo ZXJyICE9IDApCisgICAgcmV0dXJuOyAvLyBObyBrZXJuZWwgc3VwcG9ydCBvciBub3QgYSBX aXJlZ3VhcmQgaW50ZXJmYWNlCisKKyAgd2dfZm9yX2VhY2hfcGVlcihkZXYsIHBlZXIpCisg IHsKKyAgICBwcmV2aXAgPSBOVUxMOworICAgIHdnX2Zvcl9lYWNoX2FsbG93ZWRpcChwZWVy LCBhbGxvd2VkaXApCisgICAgeworICAgICAgZnJlZWQgPSBmYWxzZTsKKyAgICAgIC8vIE9u bHkgaWYgZXZlcnl0aGluZyBpcyB2NC92NgorICAgICAgaWYgKChhbGxvd2VkaXAtPmZhbWls eSA9PSBBRl9JTkVUICYmIGlwYV9pc19pcDQoZ3cpICYmIG5ldC0+dHlwZSA9PSBORVRfSVA0 KQorICAgICAgICB8fCAoYWxsb3dlZGlwLT5mYW1pbHkgPT0gQUZfSU5FVDYgJiYgaXBhX2lz X2lwNihndykgJiYgbmV0LT50eXBlID09IE5FVF9JUDYpKQorICAgICAgeworICAgICAgICAv LyBXZSBuZWVkIHRoZSBhbGxvd2VkIElQIGFzIGlwYQorICAgICAgICBhbGxvd2VkaXBhID0g YWxsb3dlZGlwLT5mYW1pbHkgPT0gQUZfSU5FVDYgPyBpcGFfZnJvbV9pbjYoYWxsb3dlZGlw LT5pcDYpIDogaXBhX2Zyb21faW40KGFsbG93ZWRpcC0+aXA0KTsKKyAgICAgICAgLy8gSGFu ZGxlIGdhdGV3YXkgKHJvdXRlIHZpYSB0aGlzIHBlZXI/KQorICAgICAgICBpZiAoaXBhX25v bnplcm8oZ3cpICYmIG5sX25ldF9vdmVybGFwcyhhbGxvd2VkaXBhLCBndywgTUlOKGFsbG93 ZWRpcC0+Y2lkciwgbmV0LT5weGxlbiksIGFsbG93ZWRpcC0+ZmFtaWx5KSkKKyAgICAgICAg ICBpZiAodmlhdGhpcyA9PSBOVUxMIHx8IHZpYXRoaXNDaWRyIDwgYWxsb3dlZGlwLT5jaWRy KQorICAgICAgICAgIHsKKyAgICAgICAgICAgIHZpYXRoaXMgPSBwZWVyOworICAgICAgICAg ICAgdmlhdGhpc0NpZHIgPSBhbGxvd2VkaXAtPmNpZHI7CisgICAgICAgICAgfQorCisgICAg ICAgIC8vIEhhbmRsZSBuZXR3b3JrIChkbyB3ZSBuZWVkIHRvIHJlbW92ZSB0aGUgbmV0IGZy b20gYSBwZWVyPykKKyAgICAgICAgaWYgKG5sX25ldF9vdmVybGFwcyhhbGxvd2VkaXBhLCBu ZXRfcHJlZml4KG5ldCksIE1BWChhbGxvd2VkaXAtPmNpZHIsIG5ldC0+cHhsZW4pLCBhbGxv d2VkaXAtPmZhbWlseSkpIHsKKyAgICAgICAgICAvLyBSZW1vdmUgdGhlIElQCisgICAgICAg ICAgaWYgKHByZXZpcCA9PSBOVUxMKQorICAgICAgICAgICAgLy8gVGhpcyB3YXMgdGhlIGZp cnN0CisgICAgICAgICAgICBwZWVyLT5maXJzdF9hbGxvd2VkaXAgPSBhbGxvd2VkaXAtPm5l eHRfYWxsb3dlZGlwOworICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIC8vIFRoaXMgd2Fz IHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlCisgICAgICAgICAgICBwcmV2aXAtPm5leHRfYWxs b3dlZGlwID0gYWxsb3dlZGlwLT5uZXh0X2FsbG93ZWRpcDsKKyAgICAgICAgICBpZiAocGVl ci0+bGFzdF9hbGxvd2VkaXAgPT0gYWxsb3dlZGlwKSB7CisgICAgICAgICAgICAvLyBUaGlz IHdhcyB0aGUgbGFzdCBJUAorICAgICAgICAgICAgcGVlci0+bGFzdF9hbGxvd2VkaXAgPSBw cmV2aXA7CisgICAgICAgICAgICBwcmV2aXAtPm5leHRfYWxsb3dlZGlwID0gTlVMTDsKKyAg ICAgICAgICB9CisgICAgICAgICAgcGVlci0+ZmxhZ3MgfD0gV0dQRUVSX1JFUExBQ0VfQUxM T1dFRElQUzsKKyAgICAgICAgICBmcmVlKGFsbG93ZWRpcCk7CisgICAgICAgICAgZnJlZWQg PSB0cnVlOworICAgICAgICB9CisgICAgICB9CisgICAgICBpZiAoIWZyZWVkKQorICAgICAg ICBwcmV2aXAgPSBhbGxvd2VkaXA7CisgICAgfQorICB9CisKKyAgLy8gU2tpcCB0aGlzIGlm IHRoZSByb3V0ZSBpcyB0byBiZSByZW1vdmVkCisgIGlmIChvcCAhPSBOTF9PUF9ERUxFVEUg JiYgdmlhdGhpcyAhPSBOVUxMKQorICB7CisgICAgLy8gQWRkIG5ldyBJUAorICAgIG5ld19p cCA9IG1hbGxvYyhzaXplb2Yod2dfYWxsb3dlZGlwKSk7CisgICAgbmV3X2lwLT5jaWRyID0g bmV0LT5weGxlbjsKKyAgICBuZXdfaXAtPm5leHRfYWxsb3dlZGlwID0gTlVMTDsKKyAgICBp ZiAobmV0LT50eXBlID09IE5FVF9JUDQpCisgICAgeworICAgICAgbmV3X2lwLT5mYW1pbHkg PSBBRl9JTkVUOworICAgICAgbmV3X2lwLT5pcDQgPSBpcGFfdG9faW40KG5ldF9wcmVmaXgo bmV0KSk7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICBuZXdfaXAtPmZhbWlseSA9 IEFGX0lORVQ2OworICAgICAgbmV3X2lwLT5pcDYgPSBpcGFfdG9faW42KG5ldF9wcmVmaXgo bmV0KSk7CisgICAgfQorCisgICAgdmlhdGhpcy0+ZmxhZ3MgfD0gV0dQRUVSX1JFUExBQ0Vf QUxMT1dFRElQUzsKKyAgICB2aWF0aGlzLT5sYXN0X2FsbG93ZWRpcC0+bmV4dF9hbGxvd2Vk aXAgPSBuZXdfaXA7CisgICAgdmlhdGhpcy0+bGFzdF9hbGxvd2VkaXAgPSBuZXdfaXA7Cisg IH0KKworICBlcnIgPSB3Z19zZXRfZGV2aWNlKGRldik7CisgIGlmIChlcnIgIT0gMCkKKyAg ICBsb2coTF9XQVJOICJDb3VsZCBub3QgdXBkYXRlIFdpcmVndWFyZCBpbnRlcmZhY2UgYmVj YXVzZSBvZiBlcnJvciAlZCIsIGVycik7CisKKyAgd2dfZnJlZV9kZXZpY2UoZGV2KTsKKyAg cmV0dXJuOworCit9CisjZW5kaWYKKwogc3RhdGljIGludAogbmxfc2VuZF9yb3V0ZShzdHJ1 Y3Qga3J0X3Byb3RvICpwLCBydGUgKmUsIGludCBvcCwgaW50IGRlc3QsIHN0cnVjdCBuZXh0 aG9wICpuaCkKIHsKQEAgLTEyOTksMTQgKzE0MjIsMTMgQEAgZGVzdDoKICAgICBjYXNlIFJU RF9VTklDQVNUOgogICAgICAgci0+ci5ydG1fdHlwZSA9IFJUTl9VTklDQVNUOwogICAgICAg aWYgKG5oLT5uZXh0ICYmICFrcnRfZWNtcDYocCkpCi0JbmxfYWRkX211bHRpcGF0aCgmci0+ aCwgcnNpemUsIG5oLCBwLT5hZik7CisgICAgICAgIG5sX2FkZF9tdWx0aXBhdGgoJnItPmgs IHJzaXplLCBuaCwgcC0+YWYpOwogICAgICAgZWxzZQogICAgICAgewotCW5sX2FkZF9hdHRy X3UzMigmci0+aCwgcnNpemUsIFJUQV9PSUYsIG5oLT5pZmFjZS0+aW5kZXgpOwotCW5sX2Fk ZF9uZXh0aG9wKCZyLT5oLCByc2l6ZSwgbmgsIHAtPmFmKTsKLQotCWlmIChuaC0+ZmxhZ3Mg JiBSTkZfT05MSU5LKQotCSAgci0+ci5ydG1fZmxhZ3MgfD0gUlROSF9GX09OTElOSzsKKyAg ICAgICAgbmxfYWRkX2F0dHJfdTMyKCZyLT5oLCByc2l6ZSwgUlRBX09JRiwgbmgtPmlmYWNl LT5pbmRleCk7CisgICAgICAgIG5sX2FkZF9uZXh0aG9wKCZyLT5oLCByc2l6ZSwgbmgsIHAt PmFmKTsKKyAgICAgICAgaWYgKG5oLT5mbGFncyAmIFJORl9PTkxJTkspCisgICAgICAgICAg ci0+ci5ydG1fZmxhZ3MgfD0gUlROSF9GX09OTElOSzsKICAgICAgIH0KICAgICAgIGJyZWFr OwogICAgIGNhc2UgUlREX0JMQUNLSE9MRToKQEAgLTEzMjMsNiArMTQ0NSwxMSBAQCBkZXN0 OgogICAgIGRlZmF1bHQ6CiAgICAgICBidWcoImtydF9jYXBhYmxlIGluY29uc2lzdGVudCB3 aXRoIG5sX3NlbmRfcm91dGUiKTsKICAgICB9CisjaWZkZWYgV0lUSF9XSVJFR1VBUkQKKyAg ICBpZiAoKGRlc3QgPT0gUlREX1VOSUNBU1QgJiYgaXBhX25vbnplcm8obmgtPmd3KSkgfHwg b3AgPT0gTkxfT1BfREVMRVRFKQorICAgICAgbmxfaGFuZGxlX3dpcmVndWFyZChuaC0+aWZh Y2UtPm5hbWUsIG9wLCBuaC0+Z3csIG5ldC0+bi5hZGRyKTsKKyNlbmRpZgorCiAKICAgLyog SWdub3JlIG1pc3NpbmcgZm9yIERFTEVURSAqLwogICByZXR1cm4gbmxfZXhjaGFuZ2UoJnIt PmgsIChvcCA9PSBOTF9PUF9ERUxFVEUpKTsKQEAgLTEzNTgsNyArMTQ4NSw3IEBAIG5sX2Rl bGV0ZV9ydGUoc3RydWN0IGtydF9wcm90byAqcCwgcnRlICplKQogCiAgIC8qIEZvciBJUHY2 LCB3ZSBqdXN0IHJlcGVhdGVkbHkgcmVxdWVzdCBERUxFVEUgdW50aWwgd2UgZ2V0IGVycm9y ICovCiAgIGRvCi0gICAgZXJyID0gbmxfc2VuZF9yb3V0ZShwLCBlLCBOTF9PUF9ERUxFVEUs IFJURF9OT05FLCBOVUxMKTsKKyAgICBlcnIgPSBubF9zZW5kX3JvdXRlKHAsIGUsIE5MX09Q X0RFTEVURSwgUlREX05PTkUsICYoZS0+YXR0cnMtPm5oKSk7CiAgIHdoaWxlIChrcnRfZWNt cDYocCkgJiYgIWVycik7CiAKICAgcmV0dXJuIGVycjsKZGlmZiAtLWdpdCBhL3N5c2RlcC9s aW51eC93aXJlZ3VhcmQuYyBiL3N5c2RlcC9saW51eC93aXJlZ3VhcmQuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMC4uNTRiODcwMDQKLS0tIC9kZXYvbnVsbAorKysg Yi9zeXNkZXAvbGludXgvd2lyZWd1YXJkLmMKQEAgLTAsMCArMSwxNzcxIEBACisvLyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogTEdQTC0yLjErCisvKgorICogQ29weXJpZ2h0IChDKSAy MDE1LTIwMTkgSmFzb24gQS4gRG9uZW5mZWxkIDxKYXNvbkB6eDJjNC5jb20+LiBBbGwgUmln aHRzIFJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4LTIwMTIgUGFibG8gTmVpcmEg QXl1c28gPHBhYmxvQG5ldGZpbHRlci5vcmc+LgorICovCisKKyNkZWZpbmUgX0dOVV9TT1VS Q0UKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGludXgvZ2VuZXRsaW5rLmg+ CisjaW5jbHVkZSA8bGludXgvaWZfbGluay5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGxpbmsu aD4KKyNpbmNsdWRlIDxsaW51eC9ydG5ldGxpbmsuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2lu Lmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVk ZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tl dC5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRl IDxmY250bC5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorCisjaW5jbHVkZSAid2lyZWd1YXJk LmgiCisKKy8qIHdpcmVndWFyZC5oIG5ldGxpbmsgdWFwaTogKi8KKworI2RlZmluZSBXR19H RU5MX05BTUUgIndpcmVndWFyZCIKKyNkZWZpbmUgV0dfR0VOTF9WRVJTSU9OIDEKKworZW51 bSB3Z19jbWQgeworCVdHX0NNRF9HRVRfREVWSUNFLAorCVdHX0NNRF9TRVRfREVWSUNFLAor CV9fV0dfQ01EX01BWAorfTsKKworZW51bSB3Z2RldmljZV9mbGFnIHsKKwlXR0RFVklDRV9G X1JFUExBQ0VfUEVFUlMgPSAxVSA8PCAwCit9OworZW51bSB3Z2RldmljZV9hdHRyaWJ1dGUg eworCVdHREVWSUNFX0FfVU5TUEVDLAorCVdHREVWSUNFX0FfSUZJTkRFWCwKKwlXR0RFVklD RV9BX0lGTkFNRSwKKwlXR0RFVklDRV9BX1BSSVZBVEVfS0VZLAorCVdHREVWSUNFX0FfUFVC TElDX0tFWSwKKwlXR0RFVklDRV9BX0ZMQUdTLAorCVdHREVWSUNFX0FfTElTVEVOX1BPUlQs CisJV0dERVZJQ0VfQV9GV01BUkssCisJV0dERVZJQ0VfQV9QRUVSUywKKwlfX1dHREVWSUNF X0FfTEFTVAorfTsKKworZW51bSB3Z3BlZXJfZmxhZyB7CisJV0dQRUVSX0ZfUkVNT1ZFX01F ID0gMVUgPDwgMCwKKwlXR1BFRVJfRl9SRVBMQUNFX0FMTE9XRURJUFMgPSAxVSA8PCAxCit9 OworZW51bSB3Z3BlZXJfYXR0cmlidXRlIHsKKwlXR1BFRVJfQV9VTlNQRUMsCisJV0dQRUVS X0FfUFVCTElDX0tFWSwKKwlXR1BFRVJfQV9QUkVTSEFSRURfS0VZLAorCVdHUEVFUl9BX0ZM QUdTLAorCVdHUEVFUl9BX0VORFBPSU5ULAorCVdHUEVFUl9BX1BFUlNJU1RFTlRfS0VFUEFM SVZFX0lOVEVSVkFMLAorCVdHUEVFUl9BX0xBU1RfSEFORFNIQUtFX1RJTUUsCisJV0dQRUVS X0FfUlhfQllURVMsCisJV0dQRUVSX0FfVFhfQllURVMsCisJV0dQRUVSX0FfQUxMT1dFRElQ UywKKwlXR1BFRVJfQV9QUk9UT0NPTF9WRVJTSU9OLAorCV9fV0dQRUVSX0FfTEFTVAorfTsK KworZW51bSB3Z2FsbG93ZWRpcF9hdHRyaWJ1dGUgeworCVdHQUxMT1dFRElQX0FfVU5TUEVD LAorCVdHQUxMT1dFRElQX0FfRkFNSUxZLAorCVdHQUxMT1dFRElQX0FfSVBBRERSLAorCVdH QUxMT1dFRElQX0FfQ0lEUl9NQVNLLAorCV9fV0dBTExPV0VESVBfQV9MQVNUCit9OworCisv KiBsaWJtbmwgbWluaSBsaWJyYXJ5OiAqLworCisjZGVmaW5lIE1OTF9TT0NLRVRfQVVUT1BJ RCAwCisjZGVmaW5lIE1OTF9TT0NLRVRfQlVGRkVSX1NJWkUgKHN5c2NvbmYoX1NDX1BBR0VT SVpFKSA8IDgxOTJMID8gc3lzY29uZihfU0NfUEFHRVNJWkUpIDogODE5MkwpCisjZGVmaW5l IE1OTF9BTElHTlRPIDQKKyNkZWZpbmUgTU5MX0FMSUdOKGxlbikgKCgobGVuKStNTkxfQUxJ R05UTy0xKSAmIH4oTU5MX0FMSUdOVE8tMSkpCisjZGVmaW5lIE1OTF9OTE1TR19IRFJMRU4g TU5MX0FMSUdOKHNpemVvZihzdHJ1Y3Qgbmxtc2doZHIpKQorI2RlZmluZSBNTkxfQVRUUl9I RFJMRU4gTU5MX0FMSUdOKHNpemVvZihzdHJ1Y3QgbmxhdHRyKSkKKworZW51bSBtbmxfYXR0 cl9kYXRhX3R5cGUgeworCU1OTF9UWVBFX1VOU1BFQywKKwlNTkxfVFlQRV9VOCwKKwlNTkxf VFlQRV9VMTYsCisJTU5MX1RZUEVfVTMyLAorCU1OTF9UWVBFX1U2NCwKKwlNTkxfVFlQRV9T VFJJTkcsCisJTU5MX1RZUEVfRkxBRywKKwlNTkxfVFlQRV9NU0VDUywKKwlNTkxfVFlQRV9O RVNURUQsCisJTU5MX1RZUEVfTkVTVEVEX0NPTVBBVCwKKwlNTkxfVFlQRV9OVUxfU1RSSU5H LAorCU1OTF9UWVBFX0JJTkFSWSwKKwlNTkxfVFlQRV9NQVgsCit9OworCisjZGVmaW5lIG1u bF9hdHRyX2Zvcl9lYWNoKGF0dHIsIG5saCwgb2Zmc2V0KSBcCisJZm9yICgoYXR0cikgPSBt bmxfbmxtc2dfZ2V0X3BheWxvYWRfb2Zmc2V0KChubGgpLCAob2Zmc2V0KSk7IFwKKwkgICAg IG1ubF9hdHRyX29rKChhdHRyKSwgKGNoYXIgKiltbmxfbmxtc2dfZ2V0X3BheWxvYWRfdGFp bChubGgpIC0gKGNoYXIgKikoYXR0cikpOyBcCisJICAgICAoYXR0cikgPSBtbmxfYXR0cl9u ZXh0KGF0dHIpKQorCisjZGVmaW5lIG1ubF9hdHRyX2Zvcl9lYWNoX25lc3RlZChhdHRyLCBu ZXN0KSBcCisJZm9yICgoYXR0cikgPSBtbmxfYXR0cl9nZXRfcGF5bG9hZChuZXN0KTsgXAor CSAgICAgbW5sX2F0dHJfb2soKGF0dHIpLCAoY2hhciAqKW1ubF9hdHRyX2dldF9wYXlsb2Fk KG5lc3QpICsgbW5sX2F0dHJfZ2V0X3BheWxvYWRfbGVuKG5lc3QpIC0gKGNoYXIgKikoYXR0 cikpOyBcCisJICAgICAoYXR0cikgPSBtbmxfYXR0cl9uZXh0KGF0dHIpKQorCisjZGVmaW5l IG1ubF9hdHRyX2Zvcl9lYWNoX3BheWxvYWQocGF5bG9hZCwgcGF5bG9hZF9zaXplKSBcCisJ Zm9yICgoYXR0cikgPSAocGF5bG9hZCk7IFwKKwkgICAgIG1ubF9hdHRyX29rKChhdHRyKSwg KGNoYXIgKikocGF5bG9hZCkgKyBwYXlsb2FkX3NpemUgLSAoY2hhciAqKShhdHRyKSk7IFwK KwkgICAgIChhdHRyKSA9IG1ubF9hdHRyX25leHQoYXR0cikpCisKKyNkZWZpbmUgTU5MX0NC X0VSUk9SCS0xCisjZGVmaW5lIE1OTF9DQl9TVE9QCTAKKyNkZWZpbmUgTU5MX0NCX09LCTEK KwordHlwZWRlZiBpbnQgKCptbmxfYXR0cl9jYl90KShjb25zdCBzdHJ1Y3QgbmxhdHRyICph dHRyLCB2b2lkICpkYXRhKTsKK3R5cGVkZWYgaW50ICgqbW5sX2NiX3QpKGNvbnN0IHN0cnVj dCBubG1zZ2hkciAqbmxoLCB2b2lkICpkYXRhKTsKKworI2lmbmRlZiBNTkxfQVJSQVlfU0la RQorI2RlZmluZSBNTkxfQVJSQVlfU0laRShhKSAoc2l6ZW9mKGEpL3NpemVvZigoYSlbMF0p KQorI2VuZGlmCisKK3N0YXRpYyBzaXplX3QgbW5sX25sbXNnX3NpemUoc2l6ZV90IGxlbikK K3sKKwlyZXR1cm4gbGVuICsgTU5MX05MTVNHX0hEUkxFTjsKK30KKworc3RhdGljIHN0cnVj dCBubG1zZ2hkciAqbW5sX25sbXNnX3B1dF9oZWFkZXIodm9pZCAqYnVmKQoreworCWludCBs ZW4gPSBNTkxfQUxJR04oc2l6ZW9mKHN0cnVjdCBubG1zZ2hkcikpOworCXN0cnVjdCBubG1z Z2hkciAqbmxoID0gYnVmOworCisJbWVtc2V0KGJ1ZiwgMCwgbGVuKTsKKwlubGgtPm5sbXNn X2xlbiA9IGxlbjsKKwlyZXR1cm4gbmxoOworfQorCitzdGF0aWMgdm9pZCAqbW5sX25sbXNn X3B1dF9leHRyYV9oZWFkZXIoc3RydWN0IG5sbXNnaGRyICpubGgsIHNpemVfdCBzaXplKQor eworCWNoYXIgKnB0ciA9IChjaGFyICopbmxoICsgbmxoLT5ubG1zZ19sZW47CisJc2l6ZV90 IGxlbiA9IE1OTF9BTElHTihzaXplKTsKKwlubGgtPm5sbXNnX2xlbiArPSBsZW47CisJbWVt c2V0KHB0ciwgMCwgbGVuKTsKKwlyZXR1cm4gcHRyOworfQorCitzdGF0aWMgdm9pZCAqbW5s X25sbXNnX2dldF9wYXlsb2FkKGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoKQoreworCXJl dHVybiAodm9pZCAqKW5saCArIE1OTF9OTE1TR19IRFJMRU47Cit9CisKK3N0YXRpYyB2b2lk ICptbmxfbmxtc2dfZ2V0X3BheWxvYWRfb2Zmc2V0KGNvbnN0IHN0cnVjdCBubG1zZ2hkciAq bmxoLCBzaXplX3Qgb2Zmc2V0KQoreworCXJldHVybiAodm9pZCAqKW5saCArIE1OTF9OTE1T R19IRFJMRU4gKyBNTkxfQUxJR04ob2Zmc2V0KTsKK30KKworCitzdGF0aWMgYm9vbCBtbmxf bmxtc2dfb2soY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgsIGludCBsZW4pCit7CisJcmV0 dXJuIGxlbiA+PSAoaW50KXNpemVvZihzdHJ1Y3Qgbmxtc2doZHIpICYmCisJICAgICAgIG5s aC0+bmxtc2dfbGVuID49IHNpemVvZihzdHJ1Y3Qgbmxtc2doZHIpICYmCisJICAgICAgIChp bnQpbmxoLT5ubG1zZ19sZW4gPD0gbGVuOworfQorCitzdGF0aWMgc3RydWN0IG5sbXNnaGRy ICptbmxfbmxtc2dfbmV4dChjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgaW50ICpsZW4p Cit7CisJKmxlbiAtPSBNTkxfQUxJR04obmxoLT5ubG1zZ19sZW4pOworCXJldHVybiAoc3Ry dWN0IG5sbXNnaGRyICopKCh2b2lkICopbmxoICsgTU5MX0FMSUdOKG5saC0+bmxtc2dfbGVu KSk7Cit9CisKK3N0YXRpYyB2b2lkICptbmxfbmxtc2dfZ2V0X3BheWxvYWRfdGFpbChjb25z dCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCkKK3sKKwlyZXR1cm4gKHZvaWQgKilubGggKyBNTkxf QUxJR04obmxoLT5ubG1zZ19sZW4pOworfQorCitzdGF0aWMgYm9vbCBtbmxfbmxtc2dfc2Vx X29rKGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLCB1bnNpZ25lZCBpbnQgc2VxKQorewor CXJldHVybiBubGgtPm5sbXNnX3NlcSAmJiBzZXEgPyBubGgtPm5sbXNnX3NlcSA9PSBzZXEg OiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBtbmxfbmxtc2dfcG9ydGlkX29rKGNvbnN0IHN0 cnVjdCBubG1zZ2hkciAqbmxoLCB1bnNpZ25lZCBpbnQgcG9ydGlkKQoreworCXJldHVybiBu bGgtPm5sbXNnX3BpZCAmJiBwb3J0aWQgPyBubGgtPm5sbXNnX3BpZCA9PSBwb3J0aWQgOiB0 cnVlOworfQorCitzdGF0aWMgdWludDE2X3QgbW5sX2F0dHJfZ2V0X3R5cGUoY29uc3Qgc3Ry dWN0IG5sYXR0ciAqYXR0cikKK3sKKwlyZXR1cm4gYXR0ci0+bmxhX3R5cGUgJiBOTEFfVFlQ RV9NQVNLOworfQorCitzdGF0aWMgdWludDE2X3QgbW5sX2F0dHJfZ2V0X3BheWxvYWRfbGVu KGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIpCit7CisJcmV0dXJuIGF0dHItPm5sYV9sZW4g LSBNTkxfQVRUUl9IRFJMRU47Cit9CisKK3N0YXRpYyB2b2lkICptbmxfYXR0cl9nZXRfcGF5 bG9hZChjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyKQoreworCXJldHVybiAodm9pZCAqKWF0 dHIgKyBNTkxfQVRUUl9IRFJMRU47Cit9CisKK3N0YXRpYyBib29sIG1ubF9hdHRyX29rKGNv bnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsIGludCBsZW4pCit7CisJcmV0dXJuIGxlbiA+PSAo aW50KXNpemVvZihzdHJ1Y3QgbmxhdHRyKSAmJgorCSAgICAgICBhdHRyLT5ubGFfbGVuID49 IHNpemVvZihzdHJ1Y3QgbmxhdHRyKSAmJgorCSAgICAgICAoaW50KWF0dHItPm5sYV9sZW4g PD0gbGVuOworfQorCitzdGF0aWMgc3RydWN0IG5sYXR0ciAqbW5sX2F0dHJfbmV4dChjb25z dCBzdHJ1Y3QgbmxhdHRyICphdHRyKQoreworCXJldHVybiAoc3RydWN0IG5sYXR0ciAqKSgo dm9pZCAqKWF0dHIgKyBNTkxfQUxJR04oYXR0ci0+bmxhX2xlbikpOworfQorCitzdGF0aWMg aW50IG1ubF9hdHRyX3R5cGVfdmFsaWQoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwgdWlu dDE2X3QgbWF4KQoreworCWlmIChtbmxfYXR0cl9nZXRfdHlwZShhdHRyKSA+IG1heCkgewor CQllcnJubyA9IEVPUE5PVFNVUFA7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDE7Cit9 CisKK3N0YXRpYyBpbnQgX19tbmxfYXR0cl92YWxpZGF0ZShjb25zdCBzdHJ1Y3QgbmxhdHRy ICphdHRyLAorCQkJICAgICAgIGVudW0gbW5sX2F0dHJfZGF0YV90eXBlIHR5cGUsIHNpemVf dCBleHBfbGVuKQoreworCXVpbnQxNl90IGF0dHJfbGVuID0gbW5sX2F0dHJfZ2V0X3BheWxv YWRfbGVuKGF0dHIpOworCWNvbnN0IGNoYXIgKmF0dHJfZGF0YSA9IG1ubF9hdHRyX2dldF9w YXlsb2FkKGF0dHIpOworCisJaWYgKGF0dHJfbGVuIDwgZXhwX2xlbikgeworCQllcnJubyA9 IEVSQU5HRTsKKwkJcmV0dXJuIC0xOworCX0KKwlzd2l0Y2godHlwZSkgeworCWNhc2UgTU5M X1RZUEVfRkxBRzoKKwkJaWYgKGF0dHJfbGVuID4gMCkgeworCQkJZXJybm8gPSBFUkFOR0U7 CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBNTkxfVFlQRV9OVUxfU1RS SU5HOgorCQlpZiAoYXR0cl9sZW4gPT0gMCkgeworCQkJZXJybm8gPSBFUkFOR0U7CisJCQly ZXR1cm4gLTE7CisJCX0KKwkJaWYgKGF0dHJfZGF0YVthdHRyX2xlbi0xXSAhPSAnXDAnKSB7 CisJCQllcnJubyA9IEVJTlZBTDsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlicmVhazsKKwlj YXNlIE1OTF9UWVBFX1NUUklORzoKKwkJaWYgKGF0dHJfbGVuID09IDApIHsKKwkJCWVycm5v ID0gRVJBTkdFOworCQkJcmV0dXJuIC0xOworCQl9CisJCWJyZWFrOworCWNhc2UgTU5MX1RZ UEVfTkVTVEVEOgorCisJCWlmIChhdHRyX2xlbiA9PSAwKQorCQkJYnJlYWs7CisKKwkJaWYg KGF0dHJfbGVuIDwgTU5MX0FUVFJfSERSTEVOKSB7CisJCQllcnJubyA9IEVSQU5HRTsKKwkJ CXJldHVybiAtMTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCisJCWJyZWFrOworCX0K KwlpZiAoZXhwX2xlbiAmJiBhdHRyX2xlbiA+IGV4cF9sZW4pIHsKKwkJZXJybm8gPSBFUkFO R0U7CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBz aXplX3QgbW5sX2F0dHJfZGF0YV90eXBlX2xlbltNTkxfVFlQRV9NQVhdID0geworCVtNTkxf VFlQRV9VOF0JCT0gc2l6ZW9mKHVpbnQ4X3QpLAorCVtNTkxfVFlQRV9VMTZdCQk9IHNpemVv Zih1aW50MTZfdCksCisJW01OTF9UWVBFX1UzMl0JCT0gc2l6ZW9mKHVpbnQzMl90KSwKKwlb TU5MX1RZUEVfVTY0XQkJPSBzaXplb2YodWludDY0X3QpLAorCVtNTkxfVFlQRV9NU0VDU10J PSBzaXplb2YodWludDY0X3QpLAorfTsKKworc3RhdGljIGludCBtbmxfYXR0cl92YWxpZGF0 ZShjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLCBlbnVtIG1ubF9hdHRyX2RhdGFfdHlwZSB0 eXBlKQoreworCWludCBleHBfbGVuOworCisJaWYgKHR5cGUgPj0gTU5MX1RZUEVfTUFYKSB7 CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gLTE7CisJfQorCWV4cF9sZW4gPSBtbmxf YXR0cl9kYXRhX3R5cGVfbGVuW3R5cGVdOworCXJldHVybiBfX21ubF9hdHRyX3ZhbGlkYXRl KGF0dHIsIHR5cGUsIGV4cF9sZW4pOworfQorCitzdGF0aWMgaW50IG1ubF9hdHRyX3BhcnNl KGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LAorCQkJ ICBtbmxfYXR0cl9jYl90IGNiLCB2b2lkICpkYXRhKQoreworCWludCByZXQgPSBNTkxfQ0Jf T0s7CisJY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cjsKKworCW1ubF9hdHRyX2Zvcl9lYWNo KGF0dHIsIG5saCwgb2Zmc2V0KQorCQlpZiAoKHJldCA9IGNiKGF0dHIsIGRhdGEpKSA8PSBN TkxfQ0JfU1RPUCkKKwkJCXJldHVybiByZXQ7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGlj IGludCBtbmxfYXR0cl9wYXJzZV9uZXN0ZWQoY29uc3Qgc3RydWN0IG5sYXR0ciAqbmVzdGVk LCBtbmxfYXR0cl9jYl90IGNiLAorCQkJCSB2b2lkICpkYXRhKQoreworCWludCByZXQgPSBN TkxfQ0JfT0s7CisJY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cjsKKworCW1ubF9hdHRyX2Zv cl9lYWNoX25lc3RlZChhdHRyLCBuZXN0ZWQpCisJCWlmICgocmV0ID0gY2IoYXR0ciwgZGF0 YSkpIDw9IE1OTF9DQl9TVE9QKQorCQkJcmV0dXJuIHJldDsKKwlyZXR1cm4gcmV0OworfQor CitzdGF0aWMgdWludDhfdCBtbmxfYXR0cl9nZXRfdTgoY29uc3Qgc3RydWN0IG5sYXR0ciAq YXR0cikKK3sKKwlyZXR1cm4gKigodWludDhfdCAqKW1ubF9hdHRyX2dldF9wYXlsb2FkKGF0 dHIpKTsKK30KKworc3RhdGljIHVpbnQxNl90IG1ubF9hdHRyX2dldF91MTYoY29uc3Qgc3Ry dWN0IG5sYXR0ciAqYXR0cikKK3sKKwlyZXR1cm4gKigodWludDE2X3QgKiltbmxfYXR0cl9n ZXRfcGF5bG9hZChhdHRyKSk7Cit9CisKK3N0YXRpYyB1aW50MzJfdCBtbmxfYXR0cl9nZXRf dTMyKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIpCit7CisJcmV0dXJuICooKHVpbnQzMl90 ICopbW5sX2F0dHJfZ2V0X3BheWxvYWQoYXR0cikpOworfQorCisKK3N0YXRpYyB1aW50NjRf dCBtbmxfYXR0cl9nZXRfdTY0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIpCit7CisJdWlu dDY0X3QgdG1wOworCW1lbWNweSgmdG1wLCBtbmxfYXR0cl9nZXRfcGF5bG9hZChhdHRyKSwg c2l6ZW9mKHRtcCkpOworCXJldHVybiB0bXA7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICpt bmxfYXR0cl9nZXRfc3RyKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIpCit7CisJcmV0dXJu IG1ubF9hdHRyX2dldF9wYXlsb2FkKGF0dHIpOworfQorCitzdGF0aWMgdm9pZCBtbmxfYXR0 cl9wdXQoc3RydWN0IG5sbXNnaGRyICpubGgsIHVpbnQxNl90IHR5cGUsIHNpemVfdCBsZW4s CisJCQkgY29uc3Qgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgbmxhdHRyICphdHRyID0gbW5s X25sbXNnX2dldF9wYXlsb2FkX3RhaWwobmxoKTsKKwl1aW50MTZfdCBwYXlsb2FkX2xlbiA9 IE1OTF9BTElHTihzaXplb2Yoc3RydWN0IG5sYXR0cikpICsgbGVuOworCWludCBwYWQ7CisK KwlhdHRyLT5ubGFfdHlwZSA9IHR5cGU7CisJYXR0ci0+bmxhX2xlbiA9IHBheWxvYWRfbGVu OworCW1lbWNweShtbmxfYXR0cl9nZXRfcGF5bG9hZChhdHRyKSwgZGF0YSwgbGVuKTsKKwlu bGgtPm5sbXNnX2xlbiArPSBNTkxfQUxJR04ocGF5bG9hZF9sZW4pOworCXBhZCA9IE1OTF9B TElHTihsZW4pIC0gbGVuOworCWlmIChwYWQgPiAwKQorCQltZW1zZXQobW5sX2F0dHJfZ2V0 X3BheWxvYWQoYXR0cikgKyBsZW4sIDAsIHBhZCk7Cit9CisKK3N0YXRpYyB2b2lkIG1ubF9h dHRyX3B1dF91MTYoc3RydWN0IG5sbXNnaGRyICpubGgsIHVpbnQxNl90IHR5cGUsIHVpbnQx Nl90IGRhdGEpCit7CisJbW5sX2F0dHJfcHV0KG5saCwgdHlwZSwgc2l6ZW9mKHVpbnQxNl90 KSwgJmRhdGEpOworfQorCitzdGF0aWMgdm9pZCBtbmxfYXR0cl9wdXRfdTMyKHN0cnVjdCBu bG1zZ2hkciAqbmxoLCB1aW50MTZfdCB0eXBlLCB1aW50MzJfdCBkYXRhKQoreworCW1ubF9h dHRyX3B1dChubGgsIHR5cGUsIHNpemVvZih1aW50MzJfdCksICZkYXRhKTsKK30KKworc3Rh dGljIHZvaWQgbW5sX2F0dHJfcHV0X3N0cnooc3RydWN0IG5sbXNnaGRyICpubGgsIHVpbnQx Nl90IHR5cGUsIGNvbnN0IGNoYXIgKmRhdGEpCit7CisJbW5sX2F0dHJfcHV0KG5saCwgdHlw ZSwgc3RybGVuKGRhdGEpKzEsIGRhdGEpOworfQorCitzdGF0aWMgc3RydWN0IG5sYXR0ciAq bW5sX2F0dHJfbmVzdF9zdGFydChzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdWludDE2X3QgdHlw ZSkKK3sKKwlzdHJ1Y3QgbmxhdHRyICpzdGFydCA9IG1ubF9ubG1zZ19nZXRfcGF5bG9hZF90 YWlsKG5saCk7CisKKwlzdGFydC0+bmxhX3R5cGUgPSBOTEFfRl9ORVNURUQgfCB0eXBlOwor CW5saC0+bmxtc2dfbGVuICs9IE1OTF9BTElHTihzaXplb2Yoc3RydWN0IG5sYXR0cikpOwor CXJldHVybiBzdGFydDsKK30KKworc3RhdGljIGJvb2wgbW5sX2F0dHJfcHV0X2NoZWNrKHN0 cnVjdCBubG1zZ2hkciAqbmxoLCBzaXplX3QgYnVmbGVuLAorCQkJICAgICAgIHVpbnQxNl90 IHR5cGUsIHNpemVfdCBsZW4sIGNvbnN0IHZvaWQgKmRhdGEpCit7CisJaWYgKG5saC0+bmxt c2dfbGVuICsgTU5MX0FUVFJfSERSTEVOICsgTU5MX0FMSUdOKGxlbikgPiBidWZsZW4pCisJ CXJldHVybiBmYWxzZTsKKwltbmxfYXR0cl9wdXQobmxoLCB0eXBlLCBsZW4sIGRhdGEpOwor CXJldHVybiB0cnVlOworfQorCitzdGF0aWMgYm9vbCBtbmxfYXR0cl9wdXRfdThfY2hlY2so c3RydWN0IG5sbXNnaGRyICpubGgsIHNpemVfdCBidWZsZW4sCisJCQkJICB1aW50MTZfdCB0 eXBlLCB1aW50OF90IGRhdGEpCit7CisJcmV0dXJuIG1ubF9hdHRyX3B1dF9jaGVjayhubGgs IGJ1ZmxlbiwgdHlwZSwgc2l6ZW9mKHVpbnQ4X3QpLCAmZGF0YSk7Cit9CisKKworc3RhdGlj IGJvb2wgbW5sX2F0dHJfcHV0X3UxNl9jaGVjayhzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgc2l6 ZV90IGJ1ZmxlbiwKKwkJCQkgICB1aW50MTZfdCB0eXBlLCB1aW50MTZfdCBkYXRhKQorewor CXJldHVybiBtbmxfYXR0cl9wdXRfY2hlY2sobmxoLCBidWZsZW4sIHR5cGUsIHNpemVvZih1 aW50MTZfdCksICZkYXRhKTsKK30KKworCitzdGF0aWMgYm9vbCBtbmxfYXR0cl9wdXRfdTMy X2NoZWNrKHN0cnVjdCBubG1zZ2hkciAqbmxoLCBzaXplX3QgYnVmbGVuLAorCQkJCSAgIHVp bnQxNl90IHR5cGUsIHVpbnQzMl90IGRhdGEpCit7CisJcmV0dXJuIG1ubF9hdHRyX3B1dF9j aGVjayhubGgsIGJ1ZmxlbiwgdHlwZSwgc2l6ZW9mKHVpbnQzMl90KSwgJmRhdGEpOworfQor CitzdGF0aWMgc3RydWN0IG5sYXR0ciAqbW5sX2F0dHJfbmVzdF9zdGFydF9jaGVjayhzdHJ1 Y3Qgbmxtc2doZHIgKm5saCwgc2l6ZV90IGJ1ZmxlbiwKKwkJCQkJCXVpbnQxNl90IHR5cGUp Cit7CisJaWYgKG5saC0+bmxtc2dfbGVuICsgTU5MX0FUVFJfSERSTEVOID4gYnVmbGVuKQor CQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gbW5sX2F0dHJfbmVzdF9zdGFydChubGgsIHR5cGUp OworfQorCitzdGF0aWMgdm9pZCBtbmxfYXR0cl9uZXN0X2VuZChzdHJ1Y3Qgbmxtc2doZHIg Km5saCwgc3RydWN0IG5sYXR0ciAqc3RhcnQpCit7CisJc3RhcnQtPm5sYV9sZW4gPSBtbmxf bmxtc2dfZ2V0X3BheWxvYWRfdGFpbChubGgpIC0gKHZvaWQgKilzdGFydDsKK30KKworc3Rh dGljIHZvaWQgbW5sX2F0dHJfbmVzdF9jYW5jZWwoc3RydWN0IG5sbXNnaGRyICpubGgsIHN0 cnVjdCBubGF0dHIgKnN0YXJ0KQoreworCW5saC0+bmxtc2dfbGVuIC09IG1ubF9ubG1zZ19n ZXRfcGF5bG9hZF90YWlsKG5saCkgLSAodm9pZCAqKXN0YXJ0OworfQorCitzdGF0aWMgaW50 IG1ubF9jYl9ub29wKGNvbnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLCB2b2lkICpkYXRhKQor eworCXJldHVybiBNTkxfQ0JfT0s7Cit9CisKK3N0YXRpYyBpbnQgbW5sX2NiX2Vycm9yKGNv bnN0IHN0cnVjdCBubG1zZ2hkciAqbmxoLCB2b2lkICpkYXRhKQoreworCWNvbnN0IHN0cnVj dCBubG1zZ2VyciAqZXJyID0gbW5sX25sbXNnX2dldF9wYXlsb2FkKG5saCk7CisKKwlpZiAo bmxoLT5ubG1zZ19sZW4gPCBtbmxfbmxtc2dfc2l6ZShzaXplb2Yoc3RydWN0IG5sbXNnZXJy KSkpIHsKKwkJZXJybm8gPSBFQkFETVNHOworCQlyZXR1cm4gTU5MX0NCX0VSUk9SOworCX0K KworCWlmIChlcnItPmVycm9yIDwgMCkKKwkJZXJybm8gPSAtZXJyLT5lcnJvcjsKKwllbHNl CisJCWVycm5vID0gZXJyLT5lcnJvcjsKKworCXJldHVybiBlcnItPmVycm9yID09IDAgPyBN TkxfQ0JfU1RPUCA6IE1OTF9DQl9FUlJPUjsKK30KKworc3RhdGljIGludCBtbmxfY2Jfc3Rv cChjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqZGF0YSkKK3sKKwlyZXR1cm4g TU5MX0NCX1NUT1A7Cit9CisKK3N0YXRpYyBjb25zdCBtbmxfY2JfdCBkZWZhdWx0X2NiX2Fy cmF5W05MTVNHX01JTl9UWVBFXSA9IHsKKwlbTkxNU0dfTk9PUF0JPSBtbmxfY2Jfbm9vcCwK KwlbTkxNU0dfRVJST1JdCT0gbW5sX2NiX2Vycm9yLAorCVtOTE1TR19ET05FXQk9IG1ubF9j Yl9zdG9wLAorCVtOTE1TR19PVkVSUlVOXQk9IG1ubF9jYl9ub29wLAorfTsKKworc3RhdGlj IGludCBfX21ubF9jYl9ydW4oY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgbnVtYnl0ZXMsCisJ CQl1bnNpZ25lZCBpbnQgc2VxLCB1bnNpZ25lZCBpbnQgcG9ydGlkLAorCQkJbW5sX2NiX3Qg Y2JfZGF0YSwgdm9pZCAqZGF0YSwKKwkJCWNvbnN0IG1ubF9jYl90ICpjYl9jdGxfYXJyYXks CisJCQl1bnNpZ25lZCBpbnQgY2JfY3RsX2FycmF5X2xlbikKK3sKKwlpbnQgcmV0ID0gTU5M X0NCX09LLCBsZW4gPSBudW1ieXRlczsKKwljb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCA9 IGJ1ZjsKKworCXdoaWxlIChtbmxfbmxtc2dfb2sobmxoLCBsZW4pKSB7CisKKwkJaWYgKCFt bmxfbmxtc2dfcG9ydGlkX29rKG5saCwgcG9ydGlkKSkgeworCQkJZXJybm8gPSBFU1JDSDsK KwkJCXJldHVybiAtMTsKKwkJfQorCisJCWlmICghbW5sX25sbXNnX3NlcV9vayhubGgsIHNl cSkpIHsKKwkJCWVycm5vID0gRVBST1RPOworCQkJcmV0dXJuIC0xOworCQl9CisKKworCQlp ZiAobmxoLT5ubG1zZ19mbGFncyAmIE5MTV9GX0RVTVBfSU5UUikgeworCQkJZXJybm8gPSBF SU5UUjsKKwkJCXJldHVybiAtMTsKKwkJfQorCisKKwkJaWYgKG5saC0+bmxtc2dfdHlwZSA+ PSBOTE1TR19NSU5fVFlQRSkgeworCQkJaWYgKGNiX2RhdGEpeworCQkJCXJldCA9IGNiX2Rh dGEobmxoLCBkYXRhKTsKKwkJCQlpZiAocmV0IDw9IE1OTF9DQl9TVE9QKQorCQkJCQlnb3Rv IG91dDsKKwkJCX0KKwkJfSBlbHNlIGlmIChubGgtPm5sbXNnX3R5cGUgPCBjYl9jdGxfYXJy YXlfbGVuKSB7CisJCQlpZiAoY2JfY3RsX2FycmF5ICYmIGNiX2N0bF9hcnJheVtubGgtPm5s bXNnX3R5cGVdKSB7CisJCQkJcmV0ID0gY2JfY3RsX2FycmF5W25saC0+bmxtc2dfdHlwZV0o bmxoLCBkYXRhKTsKKwkJCQlpZiAocmV0IDw9IE1OTF9DQl9TVE9QKQorCQkJCQlnb3RvIG91 dDsKKwkJCX0KKwkJfSBlbHNlIGlmIChkZWZhdWx0X2NiX2FycmF5W25saC0+bmxtc2dfdHlw ZV0pIHsKKwkJCXJldCA9IGRlZmF1bHRfY2JfYXJyYXlbbmxoLT5ubG1zZ190eXBlXShubGgs IGRhdGEpOworCQkJaWYgKHJldCA8PSBNTkxfQ0JfU1RPUCkKKwkJCQlnb3RvIG91dDsKKwkJ fQorCQlubGggPSBtbmxfbmxtc2dfbmV4dChubGgsICZsZW4pOworCX0KK291dDoKKwlyZXR1 cm4gcmV0OworfQorCitzdGF0aWMgaW50IG1ubF9jYl9ydW4yKGNvbnN0IHZvaWQgKmJ1Ziwg c2l6ZV90IG51bWJ5dGVzLCB1bnNpZ25lZCBpbnQgc2VxLAorCQkgICAgICAgdW5zaWduZWQg aW50IHBvcnRpZCwgbW5sX2NiX3QgY2JfZGF0YSwgdm9pZCAqZGF0YSwKKwkJICAgICAgIGNv bnN0IG1ubF9jYl90ICpjYl9jdGxfYXJyYXksIHVuc2lnbmVkIGludCBjYl9jdGxfYXJyYXlf bGVuKQoreworCXJldHVybiBfX21ubF9jYl9ydW4oYnVmLCBudW1ieXRlcywgc2VxLCBwb3J0 aWQsIGNiX2RhdGEsIGRhdGEsCisJCQkgICAgY2JfY3RsX2FycmF5LCBjYl9jdGxfYXJyYXlf bGVuKTsKK30KKworc3RhdGljIGludCBtbmxfY2JfcnVuKGNvbnN0IHZvaWQgKmJ1Ziwgc2l6 ZV90IG51bWJ5dGVzLCB1bnNpZ25lZCBpbnQgc2VxLAorCQkgICAgICB1bnNpZ25lZCBpbnQg cG9ydGlkLCBtbmxfY2JfdCBjYl9kYXRhLCB2b2lkICpkYXRhKQoreworCXJldHVybiBfX21u bF9jYl9ydW4oYnVmLCBudW1ieXRlcywgc2VxLCBwb3J0aWQsIGNiX2RhdGEsIGRhdGEsIE5V TEwsIDApOworfQorCitzdHJ1Y3QgbW5sX3NvY2tldCB7CisJaW50IAkJCWZkOworCXN0cnVj dCBzb2NrYWRkcl9ubAlhZGRyOworfTsKKworc3RhdGljIHVuc2lnbmVkIGludCBtbmxfc29j a2V0X2dldF9wb3J0aWQoY29uc3Qgc3RydWN0IG1ubF9zb2NrZXQgKm5sKQoreworCXJldHVy biBubC0+YWRkci5ubF9waWQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgbW5sX3NvY2tldCAqX19t bmxfc29ja2V0X29wZW4oaW50IGJ1cywgaW50IGZsYWdzKQoreworCXN0cnVjdCBtbmxfc29j a2V0ICpubDsKKworCW5sID0gY2FsbG9jKDEsIHNpemVvZihzdHJ1Y3QgbW5sX3NvY2tldCkp OworCWlmIChubCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCW5sLT5mZCA9IHNvY2tl dChBRl9ORVRMSU5LLCBTT0NLX1JBVyB8IGZsYWdzLCBidXMpOworCWlmIChubC0+ZmQgPT0g LTEpIHsKKwkJZnJlZShubCk7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBubDsK K30KKworc3RhdGljIHN0cnVjdCBtbmxfc29ja2V0ICptbmxfc29ja2V0X29wZW4oaW50IGJ1 cykKK3sKKwlyZXR1cm4gX19tbmxfc29ja2V0X29wZW4oYnVzLCAwKTsKK30KKworCitzdGF0 aWMgaW50IG1ubF9zb2NrZXRfYmluZChzdHJ1Y3QgbW5sX3NvY2tldCAqbmwsIHVuc2lnbmVk IGludCBncm91cHMsIHBpZF90IHBpZCkKK3sKKwlpbnQgcmV0OworCXNvY2tsZW5fdCBhZGRy X2xlbjsKKworCW5sLT5hZGRyLm5sX2ZhbWlseSA9IEFGX05FVExJTks7CisJbmwtPmFkZHIu bmxfZ3JvdXBzID0gZ3JvdXBzOworCW5sLT5hZGRyLm5sX3BpZCA9IHBpZDsKKworCXJldCA9 IGJpbmQobmwtPmZkLCAoc3RydWN0IHNvY2thZGRyICopICZubC0+YWRkciwgc2l6ZW9mIChu bC0+YWRkcikpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJYWRkcl9sZW4g PSBzaXplb2YobmwtPmFkZHIpOworCXJldCA9IGdldHNvY2tuYW1lKG5sLT5mZCwgKHN0cnVj dCBzb2NrYWRkciAqKSAmbmwtPmFkZHIsICZhZGRyX2xlbik7CisJaWYgKHJldCA8IDApCisJ CXJldHVybiByZXQ7CisKKwlpZiAoYWRkcl9sZW4gIT0gc2l6ZW9mKG5sLT5hZGRyKSkgewor CQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAobmwtPmFkZHIubmxf ZmFtaWx5ICE9IEFGX05FVExJTkspIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAt MTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIHNzaXplX3QgbW5sX3NvY2tldF9z ZW5kdG8oY29uc3Qgc3RydWN0IG1ubF9zb2NrZXQgKm5sLCBjb25zdCB2b2lkICpidWYsCisJ CQkJIHNpemVfdCBsZW4pCit7CisJc3RhdGljIGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9ubCBz bmwgPSB7CisJCS5ubF9mYW1pbHkgPSBBRl9ORVRMSU5LCisJfTsKKwlyZXR1cm4gc2VuZHRv KG5sLT5mZCwgYnVmLCBsZW4sIDAsCisJCSAgICAgIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNu bCwgc2l6ZW9mKHNubCkpOworfQorCisKK3N0YXRpYyBzc2l6ZV90IG1ubF9zb2NrZXRfcmVj dmZyb20oY29uc3Qgc3RydWN0IG1ubF9zb2NrZXQgKm5sLCB2b2lkICpidWYsCisJCQkJICAg c2l6ZV90IGJ1ZnNpeikKK3sKKwlzc2l6ZV90IHJldDsKKwlzdHJ1Y3Qgc29ja2FkZHJfbmwg YWRkcjsKKwlzdHJ1Y3QgaW92ZWMgaW92ID0geworCQkuaW92X2Jhc2UJPSBidWYsCisJCS5p b3ZfbGVuCT0gYnVmc2l6LAorCX07CisJc3RydWN0IG1zZ2hkciBtc2cgPSB7CisJCS5tc2df bmFtZQk9ICZhZGRyLAorCQkubXNnX25hbWVsZW4JPSBzaXplb2Yoc3RydWN0IHNvY2thZGRy X25sKSwKKwkJLm1zZ19pb3YJPSAmaW92LAorCQkubXNnX2lvdmxlbgk9IDEsCisJCS5tc2df Y29udHJvbAk9IE5VTEwsCisJCS5tc2dfY29udHJvbGxlbgk9IDAsCisJCS5tc2dfZmxhZ3MJ PSAwLAorCX07CisJcmV0ID0gcmVjdm1zZyhubC0+ZmQsICZtc2csIDApOworCWlmIChyZXQg PT0gLTEpCisJCXJldHVybiByZXQ7CisKKwlpZiAobXNnLm1zZ19mbGFncyAmIE1TR19UUlVO QykgeworCQllcnJubyA9IEVOT1NQQzsKKwkJcmV0dXJuIC0xOworCX0KKwlpZiAobXNnLm1z Z19uYW1lbGVuICE9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbmwpKSB7CisJCWVycm5vID0g RUlOVkFMOworCQlyZXR1cm4gLTE7CisJfQorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBp bnQgbW5sX3NvY2tldF9jbG9zZShzdHJ1Y3QgbW5sX3NvY2tldCAqbmwpCit7CisJaW50IHJl dCA9IGNsb3NlKG5sLT5mZCk7CisJZnJlZShubCk7CisJcmV0dXJuIHJldDsKK30KKworLyog bW5sZyBtaW5pIGxpYnJhcnk6ICovCisKK3N0cnVjdCBtbmxnX3NvY2tldCB7CisJc3RydWN0 IG1ubF9zb2NrZXQgKm5sOworCWNoYXIgKmJ1ZjsKKwl1aW50MTZfdCBpZDsKKwl1aW50OF90 IHZlcnNpb247CisJdW5zaWduZWQgaW50IHNlcTsKKwl1bnNpZ25lZCBpbnQgcG9ydGlkOwor fTsKKworc3RhdGljIHN0cnVjdCBubG1zZ2hkciAqX19tbmxnX21zZ19wcmVwYXJlKHN0cnVj dCBtbmxnX3NvY2tldCAqbmxnLCB1aW50OF90IGNtZCwKKwkJCQkJICAgdWludDE2X3QgZmxh Z3MsIHVpbnQxNl90IGlkLAorCQkJCQkgICB1aW50OF90IHZlcnNpb24pCit7CisJc3RydWN0 IG5sbXNnaGRyICpubGg7CisJc3RydWN0IGdlbmxtc2doZHIgKmdlbmw7CisKKwlubGggPSBt bmxfbmxtc2dfcHV0X2hlYWRlcihubGctPmJ1Zik7CisJbmxoLT5ubG1zZ190eXBlCT0gaWQ7 CisJbmxoLT5ubG1zZ19mbGFncyA9IGZsYWdzOworCW5sZy0+c2VxID0gdGltZShOVUxMKTsK KwlubGgtPm5sbXNnX3NlcSA9IG5sZy0+c2VxOworCisJZ2VubCA9IG1ubF9ubG1zZ19wdXRf ZXh0cmFfaGVhZGVyKG5saCwgc2l6ZW9mKHN0cnVjdCBnZW5sbXNnaGRyKSk7CisJZ2VubC0+ Y21kID0gY21kOworCWdlbmwtPnZlcnNpb24gPSB2ZXJzaW9uOworCisJcmV0dXJuIG5saDsK K30KKworc3RhdGljIHN0cnVjdCBubG1zZ2hkciAqbW5sZ19tc2dfcHJlcGFyZShzdHJ1Y3Qg bW5sZ19zb2NrZXQgKm5sZywgdWludDhfdCBjbWQsCisJCQkJCSB1aW50MTZfdCBmbGFncykK K3sKKwlyZXR1cm4gX19tbmxnX21zZ19wcmVwYXJlKG5sZywgY21kLCBmbGFncywgbmxnLT5p ZCwgbmxnLT52ZXJzaW9uKTsKK30KKworc3RhdGljIGludCBtbmxnX3NvY2tldF9zZW5kKHN0 cnVjdCBtbmxnX3NvY2tldCAqbmxnLCBjb25zdCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCkKK3sK KwlyZXR1cm4gbW5sX3NvY2tldF9zZW5kdG8obmxnLT5ubCwgbmxoLCBubGgtPm5sbXNnX2xl bik7Cit9CisKK3N0YXRpYyBpbnQgbW5sZ19jYl9ub29wKGNvbnN0IHN0cnVjdCBubG1zZ2hk ciAqbmxoLCB2b2lkICpkYXRhKQoreworCSh2b2lkKW5saDsKKwkodm9pZClkYXRhOworCXJl dHVybiBNTkxfQ0JfT0s7Cit9CisKK3N0YXRpYyBpbnQgbW5sZ19jYl9lcnJvcihjb25zdCBz dHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqZGF0YSkKK3sKKwljb25zdCBzdHJ1Y3Qgbmxt c2dlcnIgKmVyciA9IG1ubF9ubG1zZ19nZXRfcGF5bG9hZChubGgpOworCSh2b2lkKWRhdGE7 CisKKwlpZiAobmxoLT5ubG1zZ19sZW4gPCBtbmxfbmxtc2dfc2l6ZShzaXplb2Yoc3RydWN0 IG5sbXNnZXJyKSkpIHsKKwkJZXJybm8gPSBFQkFETVNHOworCQlyZXR1cm4gTU5MX0NCX0VS Uk9SOworCX0KKwkvKiBOZXRsaW5rIHN1YnN5c3RlbXMgcmV0dXJucyB0aGUgZXJybm8gdmFs dWUgd2l0aCBkaWZmZXJlbnQgc2lnbmVzcyAqLworCWlmIChlcnItPmVycm9yIDwgMCkKKwkJ ZXJybm8gPSAtZXJyLT5lcnJvcjsKKwllbHNlCisJCWVycm5vID0gZXJyLT5lcnJvcjsKKwor CXJldHVybiBlcnItPmVycm9yID09IDAgPyBNTkxfQ0JfU1RPUCA6IE1OTF9DQl9FUlJPUjsK K30KKworc3RhdGljIGludCBtbmxnX2NiX3N0b3AoY29uc3Qgc3RydWN0IG5sbXNnaGRyICpu bGgsIHZvaWQgKmRhdGEpCit7CisJKHZvaWQpZGF0YTsKKwlpZiAobmxoLT5ubG1zZ19mbGFn cyAmIE5MTV9GX01VTFRJICYmIG5saC0+bmxtc2dfbGVuID09IG1ubF9ubG1zZ19zaXplKHNp emVvZihpbnQpKSkgeworCQlpbnQgZXJyb3IgPSAqKGludCAqKW1ubF9ubG1zZ19nZXRfcGF5 bG9hZChubGgpOworCQkvKiBOZXRsaW5rIHN1YnN5c3RlbXMgcmV0dXJucyB0aGUgZXJybm8g dmFsdWUgd2l0aCBkaWZmZXJlbnQgc2lnbmVzcyAqLworCQlpZiAoZXJyb3IgPCAwKQorCQkJ ZXJybm8gPSAtZXJyb3I7CisJCWVsc2UKKwkJCWVycm5vID0gZXJyb3I7CisKKwkJcmV0dXJu IGVycm9yID09IDAgPyBNTkxfQ0JfU1RPUCA6IE1OTF9DQl9FUlJPUjsKKwl9CisJcmV0dXJu IE1OTF9DQl9TVE9QOworfQorCitzdGF0aWMgY29uc3QgbW5sX2NiX3QgbW5sZ19jYl9hcnJh eVtdID0geworCVtOTE1TR19OT09QXQk9IG1ubGdfY2Jfbm9vcCwKKwlbTkxNU0dfRVJST1Jd CT0gbW5sZ19jYl9lcnJvciwKKwlbTkxNU0dfRE9ORV0JPSBtbmxnX2NiX3N0b3AsCisJW05M TVNHX09WRVJSVU5dCT0gbW5sZ19jYl9ub29wLAorfTsKKworc3RhdGljIGludCBtbmxnX3Nv Y2tldF9yZWN2X3J1bihzdHJ1Y3QgbW5sZ19zb2NrZXQgKm5sZywgbW5sX2NiX3QgZGF0YV9j Yiwgdm9pZCAqZGF0YSkKK3sKKwlpbnQgZXJyOworCisJZG8geworCQllcnIgPSBtbmxfc29j a2V0X3JlY3Zmcm9tKG5sZy0+bmwsIG5sZy0+YnVmLAorCQkJCQkgIE1OTF9TT0NLRVRfQlVG RkVSX1NJWkUpOworCQlpZiAoZXJyIDw9IDApCisJCQlicmVhazsKKwkJZXJyID0gbW5sX2Ni X3J1bjIobmxnLT5idWYsIGVyciwgbmxnLT5zZXEsIG5sZy0+cG9ydGlkLAorCQkJCSAgZGF0 YV9jYiwgZGF0YSwgbW5sZ19jYl9hcnJheSwgTU5MX0FSUkFZX1NJWkUobW5sZ19jYl9hcnJh eSkpOworCX0gd2hpbGUgKGVyciA+IDApOworCisJcmV0dXJuIGVycjsKK30KKworc3RhdGlj IGludCBnZXRfZmFtaWx5X2lkX2F0dHJfY2IoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwg dm9pZCAqZGF0YSkKK3sKKwljb25zdCBzdHJ1Y3QgbmxhdHRyICoqdGIgPSBkYXRhOworCWlu dCB0eXBlID0gbW5sX2F0dHJfZ2V0X3R5cGUoYXR0cik7CisKKwlpZiAobW5sX2F0dHJfdHlw ZV92YWxpZChhdHRyLCBDVFJMX0FUVFJfTUFYKSA8IDApCisJCXJldHVybiBNTkxfQ0JfRVJS T1I7CisKKwlpZiAodHlwZSA9PSBDVFJMX0FUVFJfRkFNSUxZX0lEICYmCisJICAgIG1ubF9h dHRyX3ZhbGlkYXRlKGF0dHIsIE1OTF9UWVBFX1UxNikgPCAwKQorCQlyZXR1cm4gTU5MX0NC X0VSUk9SOworCXRiW3R5cGVdID0gYXR0cjsKKwlyZXR1cm4gTU5MX0NCX09LOworfQorCitz dGF0aWMgaW50IGdldF9mYW1pbHlfaWRfY2IoY29uc3Qgc3RydWN0IG5sbXNnaGRyICpubGgs IHZvaWQgKmRhdGEpCit7CisJdWludDE2X3QgKnBfaWQgPSBkYXRhOworCXN0cnVjdCBubGF0 dHIgKnRiW0NUUkxfQVRUUl9NQVggKyAxXSA9IHsgMCB9OworCisJbW5sX2F0dHJfcGFyc2Uo bmxoLCBzaXplb2Yoc3RydWN0IGdlbmxtc2doZHIpLCBnZXRfZmFtaWx5X2lkX2F0dHJfY2Is IHRiKTsKKwlpZiAoIXRiW0NUUkxfQVRUUl9GQU1JTFlfSURdKQorCQlyZXR1cm4gTU5MX0NC X0VSUk9SOworCSpwX2lkID0gbW5sX2F0dHJfZ2V0X3UxNih0YltDVFJMX0FUVFJfRkFNSUxZ X0lEXSk7CisJcmV0dXJuIE1OTF9DQl9PSzsKK30KKworc3RhdGljIHN0cnVjdCBtbmxnX3Nv Y2tldCAqbW5sZ19zb2NrZXRfb3Blbihjb25zdCBjaGFyICpmYW1pbHlfbmFtZSwgdWludDhf dCB2ZXJzaW9uKQoreworCXN0cnVjdCBtbmxnX3NvY2tldCAqbmxnOworCXN0cnVjdCBubG1z Z2hkciAqbmxoOworCWludCBlcnI7CisKKwlubGcgPSBtYWxsb2Moc2l6ZW9mKCpubGcpKTsK KwlpZiAoIW5sZykKKwkJcmV0dXJuIE5VTEw7CisKKwllcnIgPSAtRU5PTUVNOworCW5sZy0+ YnVmID0gbWFsbG9jKE1OTF9TT0NLRVRfQlVGRkVSX1NJWkUpOworCWlmICghbmxnLT5idWYp CisJCWdvdG8gZXJyX2J1Zl9hbGxvYzsKKworCW5sZy0+bmwgPSBtbmxfc29ja2V0X29wZW4o TkVUTElOS19HRU5FUklDKTsKKwlpZiAoIW5sZy0+bmwpIHsKKwkJZXJyID0gLWVycm5vOwor CQlnb3RvIGVycl9tbmxfc29ja2V0X29wZW47CisJfQorCisJaWYgKG1ubF9zb2NrZXRfYmlu ZChubGctPm5sLCAwLCBNTkxfU09DS0VUX0FVVE9QSUQpIDwgMCkgeworCQllcnIgPSAtZXJy bm87CisJCWdvdG8gZXJyX21ubF9zb2NrZXRfYmluZDsKKwl9CisKKwlubGctPnBvcnRpZCA9 IG1ubF9zb2NrZXRfZ2V0X3BvcnRpZChubGctPm5sKTsKKworCW5saCA9IF9fbW5sZ19tc2df cHJlcGFyZShubGcsIENUUkxfQ01EX0dFVEZBTUlMWSwKKwkJCQkgTkxNX0ZfUkVRVUVTVCB8 IE5MTV9GX0FDSywgR0VOTF9JRF9DVFJMLCAxKTsKKwltbmxfYXR0cl9wdXRfc3RyeihubGgs IENUUkxfQVRUUl9GQU1JTFlfTkFNRSwgZmFtaWx5X25hbWUpOworCisJaWYgKG1ubGdfc29j a2V0X3NlbmQobmxnLCBubGgpIDwgMCkgeworCQllcnIgPSAtZXJybm87CisJCWdvdG8gZXJy X21ubGdfc29ja2V0X3NlbmQ7CisJfQorCisJZXJybm8gPSAwOworCWlmIChtbmxnX3NvY2tl dF9yZWN2X3J1bihubGcsIGdldF9mYW1pbHlfaWRfY2IsICZubGctPmlkKSA8IDApIHsKKwkJ ZXJybm8gPSBlcnJubyA9PSBFTk9FTlQgPyBFUFJPVE9OT1NVUFBPUlQgOiBlcnJubzsKKwkJ ZXJyID0gZXJybm8gPyAtZXJybm8gOiAtRU5PU1lTOworCQlnb3RvIGVycl9tbmxnX3NvY2tl dF9yZWN2X3J1bjsKKwl9CisKKwlubGctPnZlcnNpb24gPSB2ZXJzaW9uOworCWVycm5vID0g MDsKKwlyZXR1cm4gbmxnOworCitlcnJfbW5sZ19zb2NrZXRfcmVjdl9ydW46CitlcnJfbW5s Z19zb2NrZXRfc2VuZDoKK2Vycl9tbmxfc29ja2V0X2JpbmQ6CisJbW5sX3NvY2tldF9jbG9z ZShubGctPm5sKTsKK2Vycl9tbmxfc29ja2V0X29wZW46CisJZnJlZShubGctPmJ1Zik7Citl cnJfYnVmX2FsbG9jOgorCWZyZWUobmxnKTsKKwllcnJubyA9IC1lcnI7CisJcmV0dXJuIE5V TEw7Cit9CisKK3N0YXRpYyB2b2lkIG1ubGdfc29ja2V0X2Nsb3NlKHN0cnVjdCBtbmxnX3Nv Y2tldCAqbmxnKQoreworCW1ubF9zb2NrZXRfY2xvc2UobmxnLT5ubCk7CisJZnJlZShubGct PmJ1Zik7CisJZnJlZShubGcpOworfQorCisvKiB3aXJlZ3VhcmQtc3BlY2lmaWMgcGFydHM6 ICovCisKK3N0cnVjdCBpbmZsYXRhYmxlX2J1ZmZlciB7CisJY2hhciAqYnVmZmVyOworCWNo YXIgKm5leHQ7CisJYm9vbCBnb29kOworCXNpemVfdCBsZW47CisJc2l6ZV90IHBvczsKK307 CisKKyNkZWZpbmUgbWF4KGEsIGIpICgoYSkgPiAoYikgPyAoYSkgOiAoYikpCisKK3N0YXRp YyBpbnQgYWRkX25leHRfdG9faW5mbGF0YWJsZV9idWZmZXIoc3RydWN0IGluZmxhdGFibGVf YnVmZmVyICpidWZmZXIpCit7CisJc2l6ZV90IGxlbiwgZXhwYW5kX3RvOworCWNoYXIgKm5l d19idWZmZXI7CisKKwlpZiAoIWJ1ZmZlci0+Z29vZCB8fCAhYnVmZmVyLT5uZXh0KSB7CisJ CWZyZWUoYnVmZmVyLT5uZXh0KTsKKwkJYnVmZmVyLT5nb29kID0gZmFsc2U7CisJCXJldHVy biAwOworCX0KKworCWxlbiA9IHN0cmxlbihidWZmZXItPm5leHQpICsgMTsKKworCWlmIChs ZW4gPT0gMSkgeworCQlmcmVlKGJ1ZmZlci0+bmV4dCk7CisJCWJ1ZmZlci0+Z29vZCA9IGZh bHNlOworCQlyZXR1cm4gMDsKKwl9CisKKwlpZiAoYnVmZmVyLT5sZW4gLSBidWZmZXItPnBv cyA8PSBsZW4pIHsKKwkJZXhwYW5kX3RvID0gbWF4KGJ1ZmZlci0+bGVuICogMiwgYnVmZmVy LT5sZW4gKyBsZW4gKyAxKTsKKwkJbmV3X2J1ZmZlciA9IHJlYWxsb2MoYnVmZmVyLT5idWZm ZXIsIGV4cGFuZF90byk7CisJCWlmICghbmV3X2J1ZmZlcikgeworCQkJZnJlZShidWZmZXIt Pm5leHQpOworCQkJYnVmZmVyLT5nb29kID0gZmFsc2U7CisJCQlyZXR1cm4gLWVycm5vOwor CQl9CisJCW1lbXNldCgmbmV3X2J1ZmZlcltidWZmZXItPmxlbl0sIDAsIGV4cGFuZF90byAt IGJ1ZmZlci0+bGVuKTsKKwkJYnVmZmVyLT5idWZmZXIgPSBuZXdfYnVmZmVyOworCQlidWZm ZXItPmxlbiA9IGV4cGFuZF90bzsKKwl9CisJbWVtY3B5KCZidWZmZXItPmJ1ZmZlcltidWZm ZXItPnBvc10sIGJ1ZmZlci0+bmV4dCwgbGVuKTsKKwlmcmVlKGJ1ZmZlci0+bmV4dCk7CisJ YnVmZmVyLT5nb29kID0gZmFsc2U7CisJYnVmZmVyLT5wb3MgKz0gbGVuOworCXJldHVybiAw OworfQorCitzdGF0aWMgaW50IHBhcnNlX2xpbmtpbmZvKGNvbnN0IHN0cnVjdCBubGF0dHIg KmF0dHIsIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGluZmxhdGFibGVfYnVmZmVyICpidWZm ZXIgPSBkYXRhOworCisJaWYgKG1ubF9hdHRyX2dldF90eXBlKGF0dHIpID09IElGTEFfSU5G T19LSU5EICYmICFzdHJjbXAoV0dfR0VOTF9OQU1FLCBtbmxfYXR0cl9nZXRfc3RyKGF0dHIp KSkKKwkJYnVmZmVyLT5nb29kID0gdHJ1ZTsKKwlyZXR1cm4gTU5MX0NCX09LOworfQorCitz dGF0aWMgaW50IHBhcnNlX2luZm9tc2coY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwgdm9p ZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaW5mbGF0YWJsZV9idWZmZXIgKmJ1ZmZlciA9IGRhdGE7 CisKKwlpZiAobW5sX2F0dHJfZ2V0X3R5cGUoYXR0cikgPT0gSUZMQV9MSU5LSU5GTykKKwkJ cmV0dXJuIG1ubF9hdHRyX3BhcnNlX25lc3RlZChhdHRyLCBwYXJzZV9saW5raW5mbywgZGF0 YSk7CisJZWxzZSBpZiAobW5sX2F0dHJfZ2V0X3R5cGUoYXR0cikgPT0gSUZMQV9JRk5BTUUp CisJCWJ1ZmZlci0+bmV4dCA9IHN0cmR1cChtbmxfYXR0cl9nZXRfc3RyKGF0dHIpKTsKKwly ZXR1cm4gTU5MX0NCX09LOworfQorCitzdGF0aWMgaW50IHJlYWRfZGV2aWNlc19jYihjb25z dCBzdHJ1Y3Qgbmxtc2doZHIgKm5saCwgdm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgaW5mbGF0 YWJsZV9idWZmZXIgKmJ1ZmZlciA9IGRhdGE7CisJaW50IHJldDsKKworCWJ1ZmZlci0+Z29v ZCA9IGZhbHNlOworCWJ1ZmZlci0+bmV4dCA9IE5VTEw7CisJcmV0ID0gbW5sX2F0dHJfcGFy c2UobmxoLCBzaXplb2Yoc3RydWN0IGlmaW5mb21zZyksIHBhcnNlX2luZm9tc2csIGRhdGEp OworCWlmIChyZXQgIT0gTU5MX0NCX09LKQorCQlyZXR1cm4gcmV0OworCXJldCA9IGFkZF9u ZXh0X3RvX2luZmxhdGFibGVfYnVmZmVyKGJ1ZmZlcik7CisJaWYgKHJldCA8IDApCisJCXJl dHVybiByZXQ7CisJaWYgKG5saC0+bmxtc2dfdHlwZSAhPSBOTE1TR19ET05FKQorCQlyZXR1 cm4gTU5MX0NCX09LICsgMTsKKwlyZXR1cm4gTU5MX0NCX09LOworfQorCitzdGF0aWMgaW50 IGZldGNoX2RldmljZV9uYW1lcyhzdHJ1Y3QgaW5mbGF0YWJsZV9idWZmZXIgKmJ1ZmZlcikK K3sKKwlzdHJ1Y3QgbW5sX3NvY2tldCAqbmwgPSBOVUxMOworCWNoYXIgKnJ0bmxfYnVmZmVy ID0gTlVMTDsKKwlzaXplX3QgbWVzc2FnZV9sZW47CisJdW5zaWduZWQgaW50IHBvcnRpZCwg c2VxOworCXNzaXplX3QgbGVuOworCWludCByZXQgPSAwOworCXN0cnVjdCBubG1zZ2hkciAq bmxoOworCXN0cnVjdCBpZmluZm9tc2cgKmlmbTsKKworCXJldCA9IC1FTk9NRU07CisJcnRu bF9idWZmZXIgPSBjYWxsb2MoTU5MX1NPQ0tFVF9CVUZGRVJfU0laRSwgMSk7CisJaWYgKCFy dG5sX2J1ZmZlcikKKwkJZ290byBjbGVhbnVwOworCisJbmwgPSBtbmxfc29ja2V0X29wZW4o TkVUTElOS19ST1VURSk7CisJaWYgKCFubCkgeworCQlyZXQgPSAtZXJybm87CisJCWdvdG8g Y2xlYW51cDsKKwl9CisKKwlpZiAobW5sX3NvY2tldF9iaW5kKG5sLCAwLCBNTkxfU09DS0VU X0FVVE9QSUQpIDwgMCkgeworCQlyZXQgPSAtZXJybm87CisJCWdvdG8gY2xlYW51cDsKKwl9 CisKKwlzZXEgPSB0aW1lKE5VTEwpOworCXBvcnRpZCA9IG1ubF9zb2NrZXRfZ2V0X3BvcnRp ZChubCk7CisJbmxoID0gbW5sX25sbXNnX3B1dF9oZWFkZXIocnRubF9idWZmZXIpOworCW5s aC0+bmxtc2dfdHlwZSA9IFJUTV9HRVRMSU5LOworCW5saC0+bmxtc2dfZmxhZ3MgPSBOTE1f Rl9SRVFVRVNUIHwgTkxNX0ZfQUNLIHwgTkxNX0ZfRFVNUDsKKwlubGgtPm5sbXNnX3NlcSA9 IHNlcTsKKwlpZm0gPSBtbmxfbmxtc2dfcHV0X2V4dHJhX2hlYWRlcihubGgsIHNpemVvZigq aWZtKSk7CisJaWZtLT5pZmlfZmFtaWx5ID0gQUZfVU5TUEVDOworCW1lc3NhZ2VfbGVuID0g bmxoLT5ubG1zZ19sZW47CisKKwlpZiAobW5sX3NvY2tldF9zZW5kdG8obmwsIHJ0bmxfYnVm ZmVyLCBtZXNzYWdlX2xlbikgPCAwKSB7CisJCXJldCA9IC1lcnJubzsKKwkJZ290byBjbGVh bnVwOworCX0KKworYW5vdGhlcjoKKwlpZiAoKGxlbiA9IG1ubF9zb2NrZXRfcmVjdmZyb20o bmwsIHJ0bmxfYnVmZmVyLCBNTkxfU09DS0VUX0JVRkZFUl9TSVpFKSkgPCAwKSB7CisJCXJl dCA9IC1lcnJubzsKKwkJZ290byBjbGVhbnVwOworCX0KKwlpZiAoKGxlbiA9IG1ubF9jYl9y dW4ocnRubF9idWZmZXIsIGxlbiwgc2VxLCBwb3J0aWQsIHJlYWRfZGV2aWNlc19jYiwgYnVm ZmVyKSkgPCAwKSB7CisJCS8qIE5ldGxpbmsgcmV0dXJucyBOTE1fRl9EVU1QX0lOVFIgaWYg dGhlIHNldCBvZiBhbGwgdHVubmVscyBjaGFuZ2VkCisJCSAqIGR1cmluZyB0aGUgZHVtcC4g VGhhdCdzIHVuZm9ydHVuYXRlLCBidXQgaXMgcHJldHR5IGNvbW1vbiBvbiBidXN5CisJCSAq IHN5c3RlbXMgdGhhdCBhcmUgYWRkaW5nIGFuZCByZW1vdmluZyB0dW5uZWxzIGFsbCB0aGUg dGltZS4gUmF0aGVyCisJCSAqIHRoYW4gcmV0cnlpbmcsIHBvdGVudGlhbGx5IGluZGVmaW5p dGVseSwgd2UganVzdCB3b3JrIHdpdGggdGhlCisJCSAqIHBhcnRpYWwgcmVzdWx0cy4gKi8K KwkJaWYgKGVycm5vICE9IEVJTlRSKSB7CisJCQlyZXQgPSAtZXJybm87CisJCQlnb3RvIGNs ZWFudXA7CisJCX0KKwl9CisJaWYgKGxlbiA9PSBNTkxfQ0JfT0sgKyAxKQorCQlnb3RvIGFu b3RoZXI7CisJcmV0ID0gMDsKKworY2xlYW51cDoKKwlmcmVlKHJ0bmxfYnVmZmVyKTsKKwlp ZiAobmwpCisJCW1ubF9zb2NrZXRfY2xvc2UobmwpOworCXJldHVybiByZXQ7Cit9CisKK3N0 YXRpYyBpbnQgYWRkX2RlbF9pZmFjZShjb25zdCBjaGFyICppZm5hbWUsIGJvb2wgYWRkKQor eworCXN0cnVjdCBtbmxfc29ja2V0ICpubCA9IE5VTEw7CisJY2hhciAqcnRubF9idWZmZXI7 CisJc3NpemVfdCBsZW47CisJaW50IHJldDsKKwlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKKwlz dHJ1Y3QgaWZpbmZvbXNnICppZm07CisJc3RydWN0IG5sYXR0ciAqbmVzdDsKKworCXJ0bmxf YnVmZmVyID0gY2FsbG9jKE1OTF9TT0NLRVRfQlVGRkVSX1NJWkUsIDEpOworCWlmICghcnRu bF9idWZmZXIpIHsKKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBjbGVhbnVwOworCX0KKwor CW5sID0gbW5sX3NvY2tldF9vcGVuKE5FVExJTktfUk9VVEUpOworCWlmICghbmwpIHsKKwkJ cmV0ID0gLWVycm5vOworCQlnb3RvIGNsZWFudXA7CisJfQorCisJaWYgKG1ubF9zb2NrZXRf YmluZChubCwgMCwgTU5MX1NPQ0tFVF9BVVRPUElEKSA8IDApIHsKKwkJcmV0ID0gLWVycm5v OworCQlnb3RvIGNsZWFudXA7CisJfQorCisJbmxoID0gbW5sX25sbXNnX3B1dF9oZWFkZXIo cnRubF9idWZmZXIpOworCW5saC0+bmxtc2dfdHlwZSA9IGFkZCA/IFJUTV9ORVdMSU5LIDog UlRNX0RFTExJTks7CisJbmxoLT5ubG1zZ19mbGFncyA9IE5MTV9GX1JFUVVFU1QgfCBOTE1f Rl9BQ0sgfCAoYWRkID8gTkxNX0ZfQ1JFQVRFIHwgTkxNX0ZfRVhDTCA6IDApOworCW5saC0+ bmxtc2dfc2VxID0gdGltZShOVUxMKTsKKwlpZm0gPSBtbmxfbmxtc2dfcHV0X2V4dHJhX2hl YWRlcihubGgsIHNpemVvZigqaWZtKSk7CisJaWZtLT5pZmlfZmFtaWx5ID0gQUZfVU5TUEVD OworCW1ubF9hdHRyX3B1dF9zdHJ6KG5saCwgSUZMQV9JRk5BTUUsIGlmbmFtZSk7CisJbmVz dCA9IG1ubF9hdHRyX25lc3Rfc3RhcnQobmxoLCBJRkxBX0xJTktJTkZPKTsKKwltbmxfYXR0 cl9wdXRfc3RyeihubGgsIElGTEFfSU5GT19LSU5ELCBXR19HRU5MX05BTUUpOworCW1ubF9h dHRyX25lc3RfZW5kKG5saCwgbmVzdCk7CisKKwlpZiAobW5sX3NvY2tldF9zZW5kdG8obmws IHJ0bmxfYnVmZmVyLCBubGgtPm5sbXNnX2xlbikgPCAwKSB7CisJCXJldCA9IC1lcnJubzsK KwkJZ290byBjbGVhbnVwOworCX0KKwlpZiAoKGxlbiA9IG1ubF9zb2NrZXRfcmVjdmZyb20o bmwsIHJ0bmxfYnVmZmVyLCBNTkxfU09DS0VUX0JVRkZFUl9TSVpFKSkgPCAwKSB7CisJCXJl dCA9IC1lcnJubzsKKwkJZ290byBjbGVhbnVwOworCX0KKwlpZiAobW5sX2NiX3J1bihydG5s X2J1ZmZlciwgbGVuLCBubGgtPm5sbXNnX3NlcSwgbW5sX3NvY2tldF9nZXRfcG9ydGlkKG5s KSwgTlVMTCwgTlVMTCkgPCAwKSB7CisJCXJldCA9IC1lcnJubzsKKwkJZ290byBjbGVhbnVw OworCX0KKwlyZXQgPSAwOworCitjbGVhbnVwOgorCWZyZWUocnRubF9idWZmZXIpOworCWlm IChubCkKKwkJbW5sX3NvY2tldF9jbG9zZShubCk7CisJcmV0dXJuIHJldDsKK30KKworaW50 IHdnX3NldF9kZXZpY2Uod2dfZGV2aWNlICpkZXYpCit7CisJaW50IHJldCA9IDA7CisJd2df cGVlciAqcGVlciA9IE5VTEw7CisJd2dfYWxsb3dlZGlwICphbGxvd2VkaXAgPSBOVUxMOwor CXN0cnVjdCBubGF0dHIgKnBlZXJzX25lc3QsICpwZWVyX25lc3QsICphbGxvd2VkaXBzX25l c3QsICphbGxvd2VkaXBfbmVzdDsKKwlzdHJ1Y3Qgbmxtc2doZHIgKm5saDsKKwlzdHJ1Y3Qg bW5sZ19zb2NrZXQgKm5sZzsKKworCW5sZyA9IG1ubGdfc29ja2V0X29wZW4oV0dfR0VOTF9O QU1FLCBXR19HRU5MX1ZFUlNJT04pOworCWlmICghbmxnKQorCQlyZXR1cm4gLWVycm5vOwor CithZ2FpbjoKKwlubGggPSBtbmxnX21zZ19wcmVwYXJlKG5sZywgV0dfQ01EX1NFVF9ERVZJ Q0UsIE5MTV9GX1JFUVVFU1QgfCBOTE1fRl9BQ0spOworCW1ubF9hdHRyX3B1dF9zdHJ6KG5s aCwgV0dERVZJQ0VfQV9JRk5BTUUsIGRldi0+bmFtZSk7CisKKwlpZiAoIXBlZXIpIHsKKwkJ dWludDMyX3QgZmxhZ3MgPSAwOworCisJCWlmIChkZXYtPmZsYWdzICYgV0dERVZJQ0VfSEFT X1BSSVZBVEVfS0VZKQorCQkJbW5sX2F0dHJfcHV0KG5saCwgV0dERVZJQ0VfQV9QUklWQVRF X0tFWSwgc2l6ZW9mKGRldi0+cHJpdmF0ZV9rZXkpLCBkZXYtPnByaXZhdGVfa2V5KTsKKwkJ aWYgKGRldi0+ZmxhZ3MgJiBXR0RFVklDRV9IQVNfTElTVEVOX1BPUlQpCisJCQltbmxfYXR0 cl9wdXRfdTE2KG5saCwgV0dERVZJQ0VfQV9MSVNURU5fUE9SVCwgZGV2LT5saXN0ZW5fcG9y dCk7CisJCWlmIChkZXYtPmZsYWdzICYgV0dERVZJQ0VfSEFTX0ZXTUFSSykKKwkJCW1ubF9h dHRyX3B1dF91MzIobmxoLCBXR0RFVklDRV9BX0ZXTUFSSywgZGV2LT5md21hcmspOworCQlp ZiAoZGV2LT5mbGFncyAmIFdHREVWSUNFX1JFUExBQ0VfUEVFUlMpCisJCQlmbGFncyB8PSBX R0RFVklDRV9GX1JFUExBQ0VfUEVFUlM7CisJCWlmIChmbGFncykKKwkJCW1ubF9hdHRyX3B1 dF91MzIobmxoLCBXR0RFVklDRV9BX0ZMQUdTLCBmbGFncyk7CisJfQorCWlmICghZGV2LT5m aXJzdF9wZWVyKQorCQlnb3RvIHNlbmQ7CisJcGVlcnNfbmVzdCA9IHBlZXJfbmVzdCA9IGFs bG93ZWRpcHNfbmVzdCA9IGFsbG93ZWRpcF9uZXN0ID0gTlVMTDsKKwlwZWVyc19uZXN0ID0g bW5sX2F0dHJfbmVzdF9zdGFydChubGgsIFdHREVWSUNFX0FfUEVFUlMpOworCWZvciAocGVl ciA9IHBlZXIgPyBwZWVyIDogZGV2LT5maXJzdF9wZWVyOyBwZWVyOyBwZWVyID0gcGVlci0+ bmV4dF9wZWVyKSB7CisJCXVpbnQzMl90IGZsYWdzID0gMDsKKworCQlwZWVyX25lc3QgPSBt bmxfYXR0cl9uZXN0X3N0YXJ0X2NoZWNrKG5saCwgTU5MX1NPQ0tFVF9CVUZGRVJfU0laRSwg MCk7CisJCWlmICghcGVlcl9uZXN0KQorCQkJZ290byB0b29iaWdfcGVlcnM7CisJCWlmICgh bW5sX2F0dHJfcHV0X2NoZWNrKG5saCwgTU5MX1NPQ0tFVF9CVUZGRVJfU0laRSwgV0dQRUVS X0FfUFVCTElDX0tFWSwgc2l6ZW9mKHBlZXItPnB1YmxpY19rZXkpLCBwZWVyLT5wdWJsaWNf a2V5KSkKKwkJCWdvdG8gdG9vYmlnX3BlZXJzOworCQlpZiAocGVlci0+ZmxhZ3MgJiBXR1BF RVJfUkVNT1ZFX01FKQorCQkJZmxhZ3MgfD0gV0dQRUVSX0ZfUkVNT1ZFX01FOworCQlpZiAo IWFsbG93ZWRpcCkgeworCQkJaWYgKHBlZXItPmZsYWdzICYgV0dQRUVSX1JFUExBQ0VfQUxM T1dFRElQUykKKwkJCQlmbGFncyB8PSBXR1BFRVJfRl9SRVBMQUNFX0FMTE9XRURJUFM7CisJ CQlpZiAocGVlci0+ZmxhZ3MgJiBXR1BFRVJfSEFTX1BSRVNIQVJFRF9LRVkpIHsKKwkJCQlp ZiAoIW1ubF9hdHRyX3B1dF9jaGVjayhubGgsIE1OTF9TT0NLRVRfQlVGRkVSX1NJWkUsIFdH UEVFUl9BX1BSRVNIQVJFRF9LRVksIHNpemVvZihwZWVyLT5wcmVzaGFyZWRfa2V5KSwgcGVl ci0+cHJlc2hhcmVkX2tleSkpCisJCQkJCWdvdG8gdG9vYmlnX3BlZXJzOworCQkJfQorCQkJ aWYgKHBlZXItPmVuZHBvaW50LmFkZHIuc2FfZmFtaWx5ID09IEFGX0lORVQpIHsKKwkJCQlp ZiAoIW1ubF9hdHRyX3B1dF9jaGVjayhubGgsIE1OTF9TT0NLRVRfQlVGRkVSX1NJWkUsIFdH UEVFUl9BX0VORFBPSU5ULCBzaXplb2YocGVlci0+ZW5kcG9pbnQuYWRkcjQpLCAmcGVlci0+ ZW5kcG9pbnQuYWRkcjQpKQorCQkJCQlnb3RvIHRvb2JpZ19wZWVyczsKKwkJCX0gZWxzZSBp ZiAocGVlci0+ZW5kcG9pbnQuYWRkci5zYV9mYW1pbHkgPT0gQUZfSU5FVDYpIHsKKwkJCQlp ZiAoIW1ubF9hdHRyX3B1dF9jaGVjayhubGgsIE1OTF9TT0NLRVRfQlVGRkVSX1NJWkUsIFdH UEVFUl9BX0VORFBPSU5ULCBzaXplb2YocGVlci0+ZW5kcG9pbnQuYWRkcjYpLCAmcGVlci0+ ZW5kcG9pbnQuYWRkcjYpKQorCQkJCQlnb3RvIHRvb2JpZ19wZWVyczsKKwkJCX0KKwkJCWlm IChwZWVyLT5mbGFncyAmIFdHUEVFUl9IQVNfUEVSU0lTVEVOVF9LRUVQQUxJVkVfSU5URVJW QUwpIHsKKwkJCQlpZiAoIW1ubF9hdHRyX3B1dF91MTZfY2hlY2sobmxoLCBNTkxfU09DS0VU X0JVRkZFUl9TSVpFLCBXR1BFRVJfQV9QRVJTSVNURU5UX0tFRVBBTElWRV9JTlRFUlZBTCwg cGVlci0+cGVyc2lzdGVudF9rZWVwYWxpdmVfaW50ZXJ2YWwpKQorCQkJCQlnb3RvIHRvb2Jp Z19wZWVyczsKKwkJCX0KKwkJfQorCQlpZiAoZmxhZ3MpIHsKKwkJCWlmICghbW5sX2F0dHJf cHV0X3UzMl9jaGVjayhubGgsIE1OTF9TT0NLRVRfQlVGRkVSX1NJWkUsIFdHUEVFUl9BX0ZM QUdTLCBmbGFncykpCisJCQkJZ290byB0b29iaWdfcGVlcnM7CisJCX0KKwkJaWYgKHBlZXIt PmZpcnN0X2FsbG93ZWRpcCkgeworCQkJaWYgKCFhbGxvd2VkaXApCisJCQkJYWxsb3dlZGlw ID0gcGVlci0+Zmlyc3RfYWxsb3dlZGlwOworCQkJYWxsb3dlZGlwc19uZXN0ID0gbW5sX2F0 dHJfbmVzdF9zdGFydF9jaGVjayhubGgsIE1OTF9TT0NLRVRfQlVGRkVSX1NJWkUsIFdHUEVF Ul9BX0FMTE9XRURJUFMpOworCQkJaWYgKCFhbGxvd2VkaXBzX25lc3QpCisJCQkJZ290byB0 b29iaWdfYWxsb3dlZGlwczsKKwkJCWZvciAoOyBhbGxvd2VkaXA7IGFsbG93ZWRpcCA9IGFs bG93ZWRpcC0+bmV4dF9hbGxvd2VkaXApIHsKKwkJCQlhbGxvd2VkaXBfbmVzdCA9IG1ubF9h dHRyX25lc3Rfc3RhcnRfY2hlY2sobmxoLCBNTkxfU09DS0VUX0JVRkZFUl9TSVpFLCAwKTsK KwkJCQlpZiAoIWFsbG93ZWRpcF9uZXN0KQorCQkJCQlnb3RvIHRvb2JpZ19hbGxvd2VkaXBz OworCQkJCWlmICghbW5sX2F0dHJfcHV0X3UxNl9jaGVjayhubGgsIE1OTF9TT0NLRVRfQlVG RkVSX1NJWkUsIFdHQUxMT1dFRElQX0FfRkFNSUxZLCBhbGxvd2VkaXAtPmZhbWlseSkpCisJ CQkJCWdvdG8gdG9vYmlnX2FsbG93ZWRpcHM7CisJCQkJaWYgKGFsbG93ZWRpcC0+ZmFtaWx5 ID09IEFGX0lORVQpIHsKKwkJCQkJaWYgKCFtbmxfYXR0cl9wdXRfY2hlY2sobmxoLCBNTkxf U09DS0VUX0JVRkZFUl9TSVpFLCBXR0FMTE9XRURJUF9BX0lQQUREUiwgc2l6ZW9mKGFsbG93 ZWRpcC0+aXA0KSwgJmFsbG93ZWRpcC0+aXA0KSkKKwkJCQkJCWdvdG8gdG9vYmlnX2FsbG93 ZWRpcHM7CisJCQkJfSBlbHNlIGlmIChhbGxvd2VkaXAtPmZhbWlseSA9PSBBRl9JTkVUNikg eworCQkJCQlpZiAoIW1ubF9hdHRyX3B1dF9jaGVjayhubGgsIE1OTF9TT0NLRVRfQlVGRkVS X1NJWkUsIFdHQUxMT1dFRElQX0FfSVBBRERSLCBzaXplb2YoYWxsb3dlZGlwLT5pcDYpLCAm YWxsb3dlZGlwLT5pcDYpKQorCQkJCQkJZ290byB0b29iaWdfYWxsb3dlZGlwczsKKwkJCQl9 CisJCQkJaWYgKCFtbmxfYXR0cl9wdXRfdThfY2hlY2sobmxoLCBNTkxfU09DS0VUX0JVRkZF Ul9TSVpFLCBXR0FMTE9XRURJUF9BX0NJRFJfTUFTSywgYWxsb3dlZGlwLT5jaWRyKSkKKwkJ CQkJZ290byB0b29iaWdfYWxsb3dlZGlwczsKKwkJCQltbmxfYXR0cl9uZXN0X2VuZChubGgs IGFsbG93ZWRpcF9uZXN0KTsKKwkJCQlhbGxvd2VkaXBfbmVzdCA9IE5VTEw7CisJCQl9CisJ CQltbmxfYXR0cl9uZXN0X2VuZChubGgsIGFsbG93ZWRpcHNfbmVzdCk7CisJCQlhbGxvd2Vk aXBzX25lc3QgPSBOVUxMOworCQl9CisKKwkJbW5sX2F0dHJfbmVzdF9lbmQobmxoLCBwZWVy X25lc3QpOworCQlwZWVyX25lc3QgPSBOVUxMOworCX0KKwltbmxfYXR0cl9uZXN0X2VuZChu bGgsIHBlZXJzX25lc3QpOworCXBlZXJzX25lc3QgPSBOVUxMOworCWdvdG8gc2VuZDsKK3Rv b2JpZ19hbGxvd2VkaXBzOgorCWlmIChhbGxvd2VkaXBfbmVzdCkKKwkJbW5sX2F0dHJfbmVz dF9jYW5jZWwobmxoLCBhbGxvd2VkaXBfbmVzdCk7CisJaWYgKGFsbG93ZWRpcHNfbmVzdCkK KwkJbW5sX2F0dHJfbmVzdF9lbmQobmxoLCBhbGxvd2VkaXBzX25lc3QpOworCW1ubF9hdHRy X25lc3RfZW5kKG5saCwgcGVlcl9uZXN0KTsKKwltbmxfYXR0cl9uZXN0X2VuZChubGgsIHBl ZXJzX25lc3QpOworCWdvdG8gc2VuZDsKK3Rvb2JpZ19wZWVyczoKKwlpZiAocGVlcl9uZXN0 KQorCQltbmxfYXR0cl9uZXN0X2NhbmNlbChubGgsIHBlZXJfbmVzdCk7CisJbW5sX2F0dHJf bmVzdF9lbmQobmxoLCBwZWVyc19uZXN0KTsKKwlnb3RvIHNlbmQ7CitzZW5kOgorCWlmICht bmxnX3NvY2tldF9zZW5kKG5sZywgbmxoKSA8IDApIHsKKwkJcmV0ID0gLWVycm5vOworCQln b3RvIG91dDsKKwl9CisJZXJybm8gPSAwOworCWlmIChtbmxnX3NvY2tldF9yZWN2X3J1bihu bGcsIE5VTEwsIE5VTEwpIDwgMCkgeworCQlyZXQgPSBlcnJubyA/IC1lcnJubyA6IC1FSU5W QUw7CisJCWdvdG8gb3V0OworCX0KKwlpZiAocGVlcikKKwkJZ290byBhZ2FpbjsKKworb3V0 OgorCW1ubGdfc29ja2V0X2Nsb3NlKG5sZyk7CisJZXJybm8gPSAtcmV0OworCXJldHVybiBy ZXQ7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfYWxsb3dlZGlwKGNvbnN0IHN0cnVjdCBubGF0 dHIgKmF0dHIsIHZvaWQgKmRhdGEpCit7CisJd2dfYWxsb3dlZGlwICphbGxvd2VkaXAgPSBk YXRhOworCisJc3dpdGNoIChtbmxfYXR0cl9nZXRfdHlwZShhdHRyKSkgeworCWNhc2UgV0dB TExPV0VESVBfQV9VTlNQRUM6CisJCWJyZWFrOworCWNhc2UgV0dBTExPV0VESVBfQV9GQU1J TFk6CisJCWlmICghbW5sX2F0dHJfdmFsaWRhdGUoYXR0ciwgTU5MX1RZUEVfVTE2KSkKKwkJ CWFsbG93ZWRpcC0+ZmFtaWx5ID0gbW5sX2F0dHJfZ2V0X3UxNihhdHRyKTsKKwkJYnJlYWs7 CisJY2FzZSBXR0FMTE9XRURJUF9BX0lQQUREUjoKKwkJaWYgKG1ubF9hdHRyX2dldF9wYXls b2FkX2xlbihhdHRyKSA9PSBzaXplb2YoYWxsb3dlZGlwLT5pcDQpKQorCQkJbWVtY3B5KCZh bGxvd2VkaXAtPmlwNCwgbW5sX2F0dHJfZ2V0X3BheWxvYWQoYXR0ciksIHNpemVvZihhbGxv d2VkaXAtPmlwNCkpOworCQllbHNlIGlmIChtbmxfYXR0cl9nZXRfcGF5bG9hZF9sZW4oYXR0 cikgPT0gc2l6ZW9mKGFsbG93ZWRpcC0+aXA2KSkKKwkJCW1lbWNweSgmYWxsb3dlZGlwLT5p cDYsIG1ubF9hdHRyX2dldF9wYXlsb2FkKGF0dHIpLCBzaXplb2YoYWxsb3dlZGlwLT5pcDYp KTsKKwkJYnJlYWs7CisJY2FzZSBXR0FMTE9XRURJUF9BX0NJRFJfTUFTSzoKKwkJaWYgKCFt bmxfYXR0cl92YWxpZGF0ZShhdHRyLCBNTkxfVFlQRV9VOCkpCisJCQlhbGxvd2VkaXAtPmNp ZHIgPSBtbmxfYXR0cl9nZXRfdTgoYXR0cik7CisJCWJyZWFrOworCX0KKworCXJldHVybiBN TkxfQ0JfT0s7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfYWxsb3dlZGlwcyhjb25zdCBzdHJ1 Y3QgbmxhdHRyICphdHRyLCB2b2lkICpkYXRhKQoreworCXdnX3BlZXIgKnBlZXIgPSBkYXRh OworCXdnX2FsbG93ZWRpcCAqbmV3X2FsbG93ZWRpcCA9IGNhbGxvYygxLCBzaXplb2Yod2df YWxsb3dlZGlwKSk7CisJaW50IHJldDsKKworCWlmICghbmV3X2FsbG93ZWRpcCkKKwkJcmV0 dXJuIE1OTF9DQl9FUlJPUjsKKwlpZiAoIXBlZXItPmZpcnN0X2FsbG93ZWRpcCkKKwkJcGVl ci0+Zmlyc3RfYWxsb3dlZGlwID0gcGVlci0+bGFzdF9hbGxvd2VkaXAgPSBuZXdfYWxsb3dl ZGlwOworCWVsc2UgeworCQlwZWVyLT5sYXN0X2FsbG93ZWRpcC0+bmV4dF9hbGxvd2VkaXAg PSBuZXdfYWxsb3dlZGlwOworCQlwZWVyLT5sYXN0X2FsbG93ZWRpcCA9IG5ld19hbGxvd2Vk aXA7CisJfQorCXJldCA9IG1ubF9hdHRyX3BhcnNlX25lc3RlZChhdHRyLCBwYXJzZV9hbGxv d2VkaXAsIG5ld19hbGxvd2VkaXApOworCWlmICghcmV0KQorCQlyZXR1cm4gcmV0OworCWlm ICghKChuZXdfYWxsb3dlZGlwLT5mYW1pbHkgPT0gQUZfSU5FVCAmJiBuZXdfYWxsb3dlZGlw LT5jaWRyIDw9IDMyKSB8fCAobmV3X2FsbG93ZWRpcC0+ZmFtaWx5ID09IEFGX0lORVQ2ICYm IG5ld19hbGxvd2VkaXAtPmNpZHIgPD0gMTI4KSkpIHsKKwkJZXJybm8gPSBFQUZOT1NVUFBP UlQ7CisJCXJldHVybiBNTkxfQ0JfRVJST1I7CisJfQorCXJldHVybiBNTkxfQ0JfT0s7Cit9 CisKK2Jvb2wgd2dfa2V5X2lzX3plcm8oY29uc3Qgd2dfa2V5IGtleSkKK3sKKwl2b2xhdGls ZSB1aW50OF90IGFjYyA9IDA7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBp IDwgc2l6ZW9mKHdnX2tleSk7ICsraSkgeworCQlhY2MgfD0ga2V5W2ldOworCQlfX2FzbV9f ICgiIiA6ICI9ciIgKGFjYykgOiAiMCIgKGFjYykpOworCX0KKwlyZXR1cm4gMSAmICgoYWNj IC0gMSkgPj4gOCk7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfcGVlcihjb25zdCBzdHJ1Y3Qg bmxhdHRyICphdHRyLCB2b2lkICpkYXRhKQoreworCXdnX3BlZXIgKnBlZXIgPSBkYXRhOwor CisJc3dpdGNoIChtbmxfYXR0cl9nZXRfdHlwZShhdHRyKSkgeworCWNhc2UgV0dQRUVSX0Ff VU5TUEVDOgorCQlicmVhazsKKwljYXNlIFdHUEVFUl9BX1BVQkxJQ19LRVk6CisJCWlmICht bmxfYXR0cl9nZXRfcGF5bG9hZF9sZW4oYXR0cikgPT0gc2l6ZW9mKHBlZXItPnB1YmxpY19r ZXkpKSB7CisJCQltZW1jcHkocGVlci0+cHVibGljX2tleSwgbW5sX2F0dHJfZ2V0X3BheWxv YWQoYXR0ciksIHNpemVvZihwZWVyLT5wdWJsaWNfa2V5KSk7CisJCQlwZWVyLT5mbGFncyB8 PSBXR1BFRVJfSEFTX1BVQkxJQ19LRVk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBXR1BFRVJf QV9QUkVTSEFSRURfS0VZOgorCQlpZiAobW5sX2F0dHJfZ2V0X3BheWxvYWRfbGVuKGF0dHIp ID09IHNpemVvZihwZWVyLT5wcmVzaGFyZWRfa2V5KSkgeworCQkJbWVtY3B5KHBlZXItPnBy ZXNoYXJlZF9rZXksIG1ubF9hdHRyX2dldF9wYXlsb2FkKGF0dHIpLCBzaXplb2YocGVlci0+ cHJlc2hhcmVkX2tleSkpOworCQkJaWYgKCF3Z19rZXlfaXNfemVybyhwZWVyLT5wcmVzaGFy ZWRfa2V5KSkKKwkJCQlwZWVyLT5mbGFncyB8PSBXR1BFRVJfSEFTX1BSRVNIQVJFRF9LRVk7 CisJCX0KKwkJYnJlYWs7CisJY2FzZSBXR1BFRVJfQV9FTkRQT0lOVDogeworCQlzdHJ1Y3Qg c29ja2FkZHIgKmFkZHI7CisKKwkJaWYgKG1ubF9hdHRyX2dldF9wYXlsb2FkX2xlbihhdHRy KSA8IHNpemVvZigqYWRkcikpCisJCQlicmVhazsKKwkJYWRkciA9IG1ubF9hdHRyX2dldF9w YXlsb2FkKGF0dHIpOworCQlpZiAoYWRkci0+c2FfZmFtaWx5ID09IEFGX0lORVQgJiYgbW5s X2F0dHJfZ2V0X3BheWxvYWRfbGVuKGF0dHIpID09IHNpemVvZihwZWVyLT5lbmRwb2ludC5h ZGRyNCkpCisJCQltZW1jcHkoJnBlZXItPmVuZHBvaW50LmFkZHI0LCBhZGRyLCBzaXplb2Yo cGVlci0+ZW5kcG9pbnQuYWRkcjQpKTsKKwkJZWxzZSBpZiAoYWRkci0+c2FfZmFtaWx5ID09 IEFGX0lORVQ2ICYmIG1ubF9hdHRyX2dldF9wYXlsb2FkX2xlbihhdHRyKSA9PSBzaXplb2Yo cGVlci0+ZW5kcG9pbnQuYWRkcjYpKQorCQkJbWVtY3B5KCZwZWVyLT5lbmRwb2ludC5hZGRy NiwgYWRkciwgc2l6ZW9mKHBlZXItPmVuZHBvaW50LmFkZHI2KSk7CisJCWJyZWFrOworCX0K KwljYXNlIFdHUEVFUl9BX1BFUlNJU1RFTlRfS0VFUEFMSVZFX0lOVEVSVkFMOgorCQlpZiAo IW1ubF9hdHRyX3ZhbGlkYXRlKGF0dHIsIE1OTF9UWVBFX1UxNikpCisJCQlwZWVyLT5wZXJz aXN0ZW50X2tlZXBhbGl2ZV9pbnRlcnZhbCA9IG1ubF9hdHRyX2dldF91MTYoYXR0cik7CisJ CWJyZWFrOworCWNhc2UgV0dQRUVSX0FfTEFTVF9IQU5EU0hBS0VfVElNRToKKwkJaWYgKG1u bF9hdHRyX2dldF9wYXlsb2FkX2xlbihhdHRyKSA9PSBzaXplb2YocGVlci0+bGFzdF9oYW5k c2hha2VfdGltZSkpCisJCQltZW1jcHkoJnBlZXItPmxhc3RfaGFuZHNoYWtlX3RpbWUsIG1u bF9hdHRyX2dldF9wYXlsb2FkKGF0dHIpLCBzaXplb2YocGVlci0+bGFzdF9oYW5kc2hha2Vf dGltZSkpOworCQlicmVhazsKKwljYXNlIFdHUEVFUl9BX1JYX0JZVEVTOgorCQlpZiAoIW1u bF9hdHRyX3ZhbGlkYXRlKGF0dHIsIE1OTF9UWVBFX1U2NCkpCisJCQlwZWVyLT5yeF9ieXRl cyA9IG1ubF9hdHRyX2dldF91NjQoYXR0cik7CisJCWJyZWFrOworCWNhc2UgV0dQRUVSX0Ff VFhfQllURVM6CisJCWlmICghbW5sX2F0dHJfdmFsaWRhdGUoYXR0ciwgTU5MX1RZUEVfVTY0 KSkKKwkJCXBlZXItPnR4X2J5dGVzID0gbW5sX2F0dHJfZ2V0X3U2NChhdHRyKTsKKwkJYnJl YWs7CisJY2FzZSBXR1BFRVJfQV9BTExPV0VESVBTOgorCQlyZXR1cm4gbW5sX2F0dHJfcGFy c2VfbmVzdGVkKGF0dHIsIHBhcnNlX2FsbG93ZWRpcHMsIHBlZXIpOworCX0KKworCXJldHVy biBNTkxfQ0JfT0s7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfcGVlcnMoY29uc3Qgc3RydWN0 IG5sYXR0ciAqYXR0ciwgdm9pZCAqZGF0YSkKK3sKKwl3Z19kZXZpY2UgKmRldmljZSA9IGRh dGE7CisJd2dfcGVlciAqbmV3X3BlZXIgPSBjYWxsb2MoMSwgc2l6ZW9mKHdnX3BlZXIpKTsK KwlpbnQgcmV0OworCisJaWYgKCFuZXdfcGVlcikKKwkJcmV0dXJuIE1OTF9DQl9FUlJPUjsK KwlpZiAoIWRldmljZS0+Zmlyc3RfcGVlcikKKwkJZGV2aWNlLT5maXJzdF9wZWVyID0gZGV2 aWNlLT5sYXN0X3BlZXIgPSBuZXdfcGVlcjsKKwllbHNlIHsKKwkJZGV2aWNlLT5sYXN0X3Bl ZXItPm5leHRfcGVlciA9IG5ld19wZWVyOworCQlkZXZpY2UtPmxhc3RfcGVlciA9IG5ld19w ZWVyOworCX0KKwlyZXQgPSBtbmxfYXR0cl9wYXJzZV9uZXN0ZWQoYXR0ciwgcGFyc2VfcGVl ciwgbmV3X3BlZXIpOworCWlmICghcmV0KQorCQlyZXR1cm4gcmV0OworCWlmICghKG5ld19w ZWVyLT5mbGFncyAmIFdHUEVFUl9IQVNfUFVCTElDX0tFWSkpIHsKKwkJZXJybm8gPSBFTlhJ TzsKKwkJcmV0dXJuIE1OTF9DQl9FUlJPUjsKKwl9CisJcmV0dXJuIE1OTF9DQl9PSzsKK30K Kworc3RhdGljIGludCBwYXJzZV9kZXZpY2UoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwg dm9pZCAqZGF0YSkKK3sKKwl3Z19kZXZpY2UgKmRldmljZSA9IGRhdGE7CisKKwlzd2l0Y2gg KG1ubF9hdHRyX2dldF90eXBlKGF0dHIpKSB7CisJY2FzZSBXR0RFVklDRV9BX1VOU1BFQzoK KwkJYnJlYWs7CisJY2FzZSBXR0RFVklDRV9BX0lGSU5ERVg6CisJCWlmICghbW5sX2F0dHJf dmFsaWRhdGUoYXR0ciwgTU5MX1RZUEVfVTMyKSkKKwkJCWRldmljZS0+aWZpbmRleCA9IG1u bF9hdHRyX2dldF91MzIoYXR0cik7CisJCWJyZWFrOworCWNhc2UgV0dERVZJQ0VfQV9JRk5B TUU6CisJCWlmICghbW5sX2F0dHJfdmFsaWRhdGUoYXR0ciwgTU5MX1RZUEVfU1RSSU5HKSkg eworCQkJc3RybmNweShkZXZpY2UtPm5hbWUsIG1ubF9hdHRyX2dldF9zdHIoYXR0ciksIHNp emVvZihkZXZpY2UtPm5hbWUpIC0gMSk7CisJCQlkZXZpY2UtPm5hbWVbc2l6ZW9mKGRldmlj ZS0+bmFtZSkgLSAxXSA9ICdcMCc7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBXR0RFVklDRV9B X1BSSVZBVEVfS0VZOgorCQlpZiAobW5sX2F0dHJfZ2V0X3BheWxvYWRfbGVuKGF0dHIpID09 IHNpemVvZihkZXZpY2UtPnByaXZhdGVfa2V5KSkgeworCQkJbWVtY3B5KGRldmljZS0+cHJp dmF0ZV9rZXksIG1ubF9hdHRyX2dldF9wYXlsb2FkKGF0dHIpLCBzaXplb2YoZGV2aWNlLT5w cml2YXRlX2tleSkpOworCQkJZGV2aWNlLT5mbGFncyB8PSBXR0RFVklDRV9IQVNfUFJJVkFU RV9LRVk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBXR0RFVklDRV9BX1BVQkxJQ19LRVk6CisJ CWlmIChtbmxfYXR0cl9nZXRfcGF5bG9hZF9sZW4oYXR0cikgPT0gc2l6ZW9mKGRldmljZS0+ cHVibGljX2tleSkpIHsKKwkJCW1lbWNweShkZXZpY2UtPnB1YmxpY19rZXksIG1ubF9hdHRy X2dldF9wYXlsb2FkKGF0dHIpLCBzaXplb2YoZGV2aWNlLT5wdWJsaWNfa2V5KSk7CisJCQlk ZXZpY2UtPmZsYWdzIHw9IFdHREVWSUNFX0hBU19QVUJMSUNfS0VZOworCQl9CisJCWJyZWFr OworCWNhc2UgV0dERVZJQ0VfQV9MSVNURU5fUE9SVDoKKwkJaWYgKCFtbmxfYXR0cl92YWxp ZGF0ZShhdHRyLCBNTkxfVFlQRV9VMTYpKQorCQkJZGV2aWNlLT5saXN0ZW5fcG9ydCA9IG1u bF9hdHRyX2dldF91MTYoYXR0cik7CisJCWJyZWFrOworCWNhc2UgV0dERVZJQ0VfQV9GV01B Uks6CisJCWlmICghbW5sX2F0dHJfdmFsaWRhdGUoYXR0ciwgTU5MX1RZUEVfVTMyKSkKKwkJ CWRldmljZS0+ZndtYXJrID0gbW5sX2F0dHJfZ2V0X3UzMihhdHRyKTsKKwkJYnJlYWs7CisJ Y2FzZSBXR0RFVklDRV9BX1BFRVJTOgorCQlyZXR1cm4gbW5sX2F0dHJfcGFyc2VfbmVzdGVk KGF0dHIsIHBhcnNlX3BlZXJzLCBkZXZpY2UpOworCX0KKworCXJldHVybiBNTkxfQ0JfT0s7 Cit9CisKK3N0YXRpYyBpbnQgcmVhZF9kZXZpY2VfY2IoY29uc3Qgc3RydWN0IG5sbXNnaGRy ICpubGgsIHZvaWQgKmRhdGEpCit7CisJcmV0dXJuIG1ubF9hdHRyX3BhcnNlKG5saCwgc2l6 ZW9mKHN0cnVjdCBnZW5sbXNnaGRyKSwgcGFyc2VfZGV2aWNlLCBkYXRhKTsKK30KKworc3Rh dGljIHZvaWQgY29hbGVzY2VfcGVlcnMod2dfZGV2aWNlICpkZXZpY2UpCit7CisJd2dfcGVl ciAqb2xkX25leHRfcGVlciwgKnBlZXIgPSBkZXZpY2UtPmZpcnN0X3BlZXI7CisKKwl3aGls ZSAocGVlciAmJiBwZWVyLT5uZXh0X3BlZXIpIHsKKwkJaWYgKG1lbWNtcChwZWVyLT5wdWJs aWNfa2V5LCBwZWVyLT5uZXh0X3BlZXItPnB1YmxpY19rZXksIHNpemVvZih3Z19rZXkpKSkg eworCQkJcGVlciA9IHBlZXItPm5leHRfcGVlcjsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlm ICghcGVlci0+Zmlyc3RfYWxsb3dlZGlwKSB7CisJCQlwZWVyLT5maXJzdF9hbGxvd2VkaXAg PSBwZWVyLT5uZXh0X3BlZXItPmZpcnN0X2FsbG93ZWRpcDsKKwkJCXBlZXItPmxhc3RfYWxs b3dlZGlwID0gcGVlci0+bmV4dF9wZWVyLT5sYXN0X2FsbG93ZWRpcDsKKwkJfSBlbHNlIHsK KwkJCXBlZXItPmxhc3RfYWxsb3dlZGlwLT5uZXh0X2FsbG93ZWRpcCA9IHBlZXItPm5leHRf cGVlci0+Zmlyc3RfYWxsb3dlZGlwOworCQkJcGVlci0+bGFzdF9hbGxvd2VkaXAgPSBwZWVy LT5uZXh0X3BlZXItPmxhc3RfYWxsb3dlZGlwOworCQl9CisJCW9sZF9uZXh0X3BlZXIgPSBw ZWVyLT5uZXh0X3BlZXI7CisJCXBlZXItPm5leHRfcGVlciA9IG9sZF9uZXh0X3BlZXItPm5l eHRfcGVlcjsKKwkJZnJlZShvbGRfbmV4dF9wZWVyKTsKKwl9Cit9CisKK2ludCB3Z19nZXRf ZGV2aWNlKHdnX2RldmljZSAqKmRldmljZSwgY29uc3QgY2hhciAqZGV2aWNlX25hbWUpCit7 CisJaW50IHJldCA9IDA7CisJc3RydWN0IG5sbXNnaGRyICpubGg7CisJc3RydWN0IG1ubGdf c29ja2V0ICpubGc7CisKK3RyeV9hZ2FpbjoKKwkqZGV2aWNlID0gY2FsbG9jKDEsIHNpemVv Zih3Z19kZXZpY2UpKTsKKwlpZiAoISpkZXZpY2UpCisJCXJldHVybiAtZXJybm87CisKKwlu bGcgPSBtbmxnX3NvY2tldF9vcGVuKFdHX0dFTkxfTkFNRSwgV0dfR0VOTF9WRVJTSU9OKTsK KwlpZiAoIW5sZykgeworCQl3Z19mcmVlX2RldmljZSgqZGV2aWNlKTsKKwkJKmRldmljZSA9 IE5VTEw7CisJCXJldHVybiAtZXJybm87CisJfQorCisJbmxoID0gbW5sZ19tc2dfcHJlcGFy ZShubGcsIFdHX0NNRF9HRVRfREVWSUNFLCBOTE1fRl9SRVFVRVNUIHwgTkxNX0ZfQUNLIHwg TkxNX0ZfRFVNUCk7CisJbW5sX2F0dHJfcHV0X3N0cnoobmxoLCBXR0RFVklDRV9BX0lGTkFN RSwgZGV2aWNlX25hbWUpOworCWlmIChtbmxnX3NvY2tldF9zZW5kKG5sZywgbmxoKSA8IDAp IHsKKwkJcmV0ID0gLWVycm5vOworCQlnb3RvIG91dDsKKwl9CisJZXJybm8gPSAwOworCWlm IChtbmxnX3NvY2tldF9yZWN2X3J1bihubGcsIHJlYWRfZGV2aWNlX2NiLCAqZGV2aWNlKSA8 IDApIHsKKwkJcmV0ID0gZXJybm8gPyAtZXJybm8gOiAtRUlOVkFMOworCQlnb3RvIG91dDsK Kwl9CisJY29hbGVzY2VfcGVlcnMoKmRldmljZSk7CisKK291dDoKKwlpZiAobmxnKQorCQlt bmxnX3NvY2tldF9jbG9zZShubGcpOworCWlmIChyZXQpIHsKKwkJd2dfZnJlZV9kZXZpY2Uo KmRldmljZSk7CisJCWlmIChyZXQgPT0gLUVJTlRSKQorCQkJZ290byB0cnlfYWdhaW47CisJ CSpkZXZpY2UgPSBOVUxMOworCX0KKwllcnJubyA9IC1yZXQ7CisJcmV0dXJuIHJldDsKK30K KworLyogZmlyc3RcMHNlY29uZFwwdGhpcmRcMGZvcnRoXDBsYXN0XDBcMCAqLworY2hhciAq d2dfbGlzdF9kZXZpY2VfbmFtZXModm9pZCkKK3sKKwlzdHJ1Y3QgaW5mbGF0YWJsZV9idWZm ZXIgYnVmZmVyID0geyAubGVuID0gTU5MX1NPQ0tFVF9CVUZGRVJfU0laRSB9OworCWludCBy ZXQ7CisKKwlyZXQgPSAtRU5PTUVNOworCWJ1ZmZlci5idWZmZXIgPSBjYWxsb2MoMSwgYnVm ZmVyLmxlbik7CisJaWYgKCFidWZmZXIuYnVmZmVyKQorCQlnb3RvIGVycjsKKworCXJldCA9 IGZldGNoX2RldmljZV9uYW1lcygmYnVmZmVyKTsKK2VycjoKKwllcnJubyA9IC1yZXQ7CisJ aWYgKGVycm5vKSB7CisJCWZyZWUoYnVmZmVyLmJ1ZmZlcik7CisJCXJldHVybiBOVUxMOwor CX0KKwlyZXR1cm4gYnVmZmVyLmJ1ZmZlcjsKK30KKworaW50IHdnX2FkZF9kZXZpY2UoY29u c3QgY2hhciAqZGV2aWNlX25hbWUpCit7CisJcmV0dXJuIGFkZF9kZWxfaWZhY2UoZGV2aWNl X25hbWUsIHRydWUpOworfQorCitpbnQgd2dfZGVsX2RldmljZShjb25zdCBjaGFyICpkZXZp Y2VfbmFtZSkKK3sKKwlyZXR1cm4gYWRkX2RlbF9pZmFjZShkZXZpY2VfbmFtZSwgZmFsc2Up OworfQorCit2b2lkIHdnX2ZyZWVfZGV2aWNlKHdnX2RldmljZSAqZGV2KQoreworCXdnX3Bl ZXIgKnBlZXIsICpucDsKKwl3Z19hbGxvd2VkaXAgKmFsbG93ZWRpcCwgKm5hOworCisJaWYg KCFkZXYpCisJCXJldHVybjsKKwlmb3IgKHBlZXIgPSBkZXYtPmZpcnN0X3BlZXIsIG5wID0g cGVlciA/IHBlZXItPm5leHRfcGVlciA6IE5VTEw7IHBlZXI7IHBlZXIgPSBucCwgbnAgPSBw ZWVyID8gcGVlci0+bmV4dF9wZWVyIDogTlVMTCkgeworCQlmb3IgKGFsbG93ZWRpcCA9IHBl ZXItPmZpcnN0X2FsbG93ZWRpcCwgbmEgPSBhbGxvd2VkaXAgPyBhbGxvd2VkaXAtPm5leHRf YWxsb3dlZGlwIDogTlVMTDsgYWxsb3dlZGlwOyBhbGxvd2VkaXAgPSBuYSwgbmEgPSBhbGxv d2VkaXAgPyBhbGxvd2VkaXAtPm5leHRfYWxsb3dlZGlwIDogTlVMTCkKKwkJCWZyZWUoYWxs b3dlZGlwKTsKKwkJZnJlZShwZWVyKTsKKwl9CisJZnJlZShkZXYpOworfQorCitzdGF0aWMg dm9pZCBlbmNvZGVfYmFzZTY0KGNoYXIgZGVzdFtzdGF0aWMgNF0sIGNvbnN0IHVpbnQ4X3Qg c3JjW3N0YXRpYyAzXSkKK3sKKwljb25zdCB1aW50OF90IGlucHV0W10gPSB7IChzcmNbMF0g Pj4gMikgJiA2MywgKChzcmNbMF0gPDwgNCkgfCAoc3JjWzFdID4+IDQpKSAmIDYzLCAoKHNy Y1sxXSA8PCAyKSB8IChzcmNbMl0gPj4gNikpICYgNjMsIHNyY1syXSAmIDYzIH07CisJdW5z aWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgNDsgKytpKQorCQlkZXN0W2ldID0g aW5wdXRbaV0gKyAnQScKKwkJCSAgKyAoKCgyNSAtIGlucHV0W2ldKSA+PiA4KSAmIDYpCisJ CQkgIC0gKCgoNTEgLSBpbnB1dFtpXSkgPj4gOCkgJiA3NSkKKwkJCSAgLSAoKCg2MSAtIGlu cHV0W2ldKSA+PiA4KSAmIDE1KQorCQkJICArICgoKDYyIC0gaW5wdXRbaV0pID4+IDgpICYg Myk7CisKK30KKwordm9pZCB3Z19rZXlfdG9fYmFzZTY0KHdnX2tleV9iNjRfc3RyaW5nIGJh c2U2NCwgY29uc3Qgd2dfa2V5IGtleSkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAo aSA9IDA7IGkgPCAzMiAvIDM7ICsraSkKKwkJZW5jb2RlX2Jhc2U2NCgmYmFzZTY0W2kgKiA0 XSwgJmtleVtpICogM10pOworCWVuY29kZV9iYXNlNjQoJmJhc2U2NFtpICogNF0sIChjb25z dCB1aW50OF90W10peyBrZXlbaSAqIDMgKyAwXSwga2V5W2kgKiAzICsgMV0sIDAgfSk7CisJ YmFzZTY0W3NpemVvZih3Z19rZXlfYjY0X3N0cmluZykgLSAyXSA9ICc9JzsKKwliYXNlNjRb c2l6ZW9mKHdnX2tleV9iNjRfc3RyaW5nKSAtIDFdID0gJ1wwJzsKK30KKworc3RhdGljIGlu dCBkZWNvZGVfYmFzZTY0KGNvbnN0IGNoYXIgc3JjW3N0YXRpYyA0XSkKK3sKKwlpbnQgdmFs ID0gMDsKKwl1bnNpZ25lZCBpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCA0OyArK2kpCisJ CXZhbCB8PSAoLTEKKwkJCSAgICArICgoKCgoJ0EnIC0gMSkgLSBzcmNbaV0pICYgKHNyY1tp XSAtICgnWicgKyAxKSkpID4+IDgpICYgKHNyY1tpXSAtIDY0KSkKKwkJCSAgICArICgoKCgo J2EnIC0gMSkgLSBzcmNbaV0pICYgKHNyY1tpXSAtICgneicgKyAxKSkpID4+IDgpICYgKHNy Y1tpXSAtIDcwKSkKKwkJCSAgICArICgoKCgoJzAnIC0gMSkgLSBzcmNbaV0pICYgKHNyY1tp XSAtICgnOScgKyAxKSkpID4+IDgpICYgKHNyY1tpXSArIDUpKQorCQkJICAgICsgKCgoKCgn KycgLSAxKSAtIHNyY1tpXSkgJiAoc3JjW2ldIC0gKCcrJyArIDEpKSkgPj4gOCkgJiA2MykK KwkJCSAgICArICgoKCgoJy8nIC0gMSkgLSBzcmNbaV0pICYgKHNyY1tpXSAtICgnLycgKyAx KSkpID4+IDgpICYgNjQpCisJCQkpIDw8ICgxOCAtIDYgKiBpKTsKKwlyZXR1cm4gdmFsOwor fQorCitpbnQgd2dfa2V5X2Zyb21fYmFzZTY0KHdnX2tleSBrZXksIGNvbnN0IHdnX2tleV9i NjRfc3RyaW5nIGJhc2U2NCkKK3sKKwl1bnNpZ25lZCBpbnQgaTsKKwlpbnQgdmFsOworCXZv bGF0aWxlIHVpbnQ4X3QgcmV0ID0gMDsKKworCWlmIChzdHJsZW4oYmFzZTY0KSAhPSBzaXpl b2Yod2dfa2V5X2I2NF9zdHJpbmcpIC0gMSB8fCBiYXNlNjRbc2l6ZW9mKHdnX2tleV9iNjRf c3RyaW5nKSAtIDJdICE9ICc9JykgeworCQllcnJubyA9IEVJTlZBTDsKKwkJZ290byBvdXQ7 CisJfQorCisJZm9yIChpID0gMDsgaSA8IDMyIC8gMzsgKytpKSB7CisJCXZhbCA9IGRlY29k ZV9iYXNlNjQoJmJhc2U2NFtpICogNF0pOworCQlyZXQgfD0gKHVpbnQzMl90KXZhbCA+PiAz MTsKKwkJa2V5W2kgKiAzICsgMF0gPSAodmFsID4+IDE2KSAmIDB4ZmY7CisJCWtleVtpICog MyArIDFdID0gKHZhbCA+PiA4KSAmIDB4ZmY7CisJCWtleVtpICogMyArIDJdID0gdmFsICYg MHhmZjsKKwl9CisJdmFsID0gZGVjb2RlX2Jhc2U2NCgoY29uc3QgY2hhcltdKXsgYmFzZTY0 W2kgKiA0ICsgMF0sIGJhc2U2NFtpICogNCArIDFdLCBiYXNlNjRbaSAqIDQgKyAyXSwgJ0En IH0pOworCXJldCB8PSAoKHVpbnQzMl90KXZhbCA+PiAzMSkgfCAodmFsICYgMHhmZik7CisJ a2V5W2kgKiAzICsgMF0gPSAodmFsID4+IDE2KSAmIDB4ZmY7CisJa2V5W2kgKiAzICsgMV0g PSAodmFsID4+IDgpICYgMHhmZjsKKwllcnJubyA9IEVJTlZBTCAmIH4oKHJldCAtIDEpID4+ IDgpOworb3V0OgorCXJldHVybiAtZXJybm87Cit9CisKK3R5cGVkZWYgaW50NjRfdCBmZVsx Nl07CisKK3N0YXRpYyBfX2F0dHJpYnV0ZV9fKChub2lubGluZSkpIHZvaWQgbWVtemVyb19l eHBsaWNpdCh2b2lkICpzLCBzaXplX3QgY291bnQpCit7CisJbWVtc2V0KHMsIDAsIGNvdW50 KTsKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiJyIihzKSA6Im1lbW9yeSIpOworfQor CitzdGF0aWMgdm9pZCBjYXJyeShmZSBvKQoreworCWludCBpOworCisJZm9yIChpID0gMDsg aSA8IDE2OyArK2kpIHsKKwkJb1soaSArIDEpICUgMTZdICs9IChpID09IDE1ID8gMzggOiAx KSAqIChvW2ldID4+IDE2KTsKKwkJb1tpXSAmPSAweGZmZmY7CisJfQorfQorCitzdGF0aWMg dm9pZCBjc3dhcChmZSBwLCBmZSBxLCBpbnQgYikKK3sKKwlpbnQgaTsKKwlpbnQ2NF90IHQs IGMgPSB+KGIgLSAxKTsKKworCWZvciAoaSA9IDA7IGkgPCAxNjsgKytpKSB7CisJCXQgPSBj ICYgKHBbaV0gXiBxW2ldKTsKKwkJcFtpXSBePSB0OworCQlxW2ldIF49IHQ7CisJfQorCisJ bWVtemVyb19leHBsaWNpdCgmdCwgc2l6ZW9mKHQpKTsKKwltZW16ZXJvX2V4cGxpY2l0KCZj LCBzaXplb2YoYykpOworCW1lbXplcm9fZXhwbGljaXQoJmIsIHNpemVvZihiKSk7Cit9CisK K3N0YXRpYyB2b2lkIHBhY2sodWludDhfdCAqbywgY29uc3QgZmUgbikKK3sKKwlpbnQgaSwg aiwgYjsKKwlmZSBtLCB0OworCisJbWVtY3B5KHQsIG4sIHNpemVvZih0KSk7CisJY2Fycnko dCk7CisJY2FycnkodCk7CisJY2FycnkodCk7CisJZm9yIChqID0gMDsgaiA8IDI7ICsraikg eworCQltWzBdID0gdFswXSAtIDB4ZmZlZDsKKwkJZm9yIChpID0gMTsgaSA8IDE1OyArK2kp IHsKKwkJCW1baV0gPSB0W2ldIC0gMHhmZmZmIC0gKChtW2kgLSAxXSA+PiAxNikgJiAxKTsK KwkJCW1baSAtIDFdICY9IDB4ZmZmZjsKKwkJfQorCQltWzE1XSA9IHRbMTVdIC0gMHg3ZmZm IC0gKChtWzE0XSA+PiAxNikgJiAxKTsKKwkJYiA9IChtWzE1XSA+PiAxNikgJiAxOworCQlt WzE0XSAmPSAweGZmZmY7CisJCWNzd2FwKHQsIG0sIDEgLSBiKTsKKwl9CisJZm9yIChpID0g MDsgaSA8IDE2OyArK2kpIHsKKwkJb1syICogaV0gPSB0W2ldICYgMHhmZjsKKwkJb1syICog aSArIDFdID0gdFtpXSA+PiA4OworCX0KKworCW1lbXplcm9fZXhwbGljaXQobSwgc2l6ZW9m KG0pKTsKKwltZW16ZXJvX2V4cGxpY2l0KHQsIHNpemVvZih0KSk7CisJbWVtemVyb19leHBs aWNpdCgmYiwgc2l6ZW9mKGIpKTsKK30KKworc3RhdGljIHZvaWQgYWRkKGZlIG8sIGNvbnN0 IGZlIGEsIGNvbnN0IGZlIGIpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTY7 ICsraSkKKwkJb1tpXSA9IGFbaV0gKyBiW2ldOworfQorCitzdGF0aWMgdm9pZCBzdWJ0cmFj dChmZSBvLCBjb25zdCBmZSBhLCBjb25zdCBmZSBiKQoreworCWludCBpOworCisJZm9yIChp ID0gMDsgaSA8IDE2OyArK2kpCisJCW9baV0gPSBhW2ldIC0gYltpXTsKK30KKworc3RhdGlj IHZvaWQgbXVsdG1vZChmZSBvLCBjb25zdCBmZSBhLCBjb25zdCBmZSBiKQoreworCWludCBp LCBqOworCWludDY0X3QgdFszMV0gPSB7IDAgfTsKKworCWZvciAoaSA9IDA7IGkgPCAxNjsg KytpKSB7CisJCWZvciAoaiA9IDA7IGogPCAxNjsgKytqKQorCQkJdFtpICsgal0gKz0gYVtp XSAqIGJbal07CisJfQorCWZvciAoaSA9IDA7IGkgPCAxNTsgKytpKQorCQl0W2ldICs9IDM4 ICogdFtpICsgMTZdOworCW1lbWNweShvLCB0LCBzaXplb2YoZmUpKTsKKwljYXJyeShvKTsK KwljYXJyeShvKTsKKworCW1lbXplcm9fZXhwbGljaXQodCwgc2l6ZW9mKHQpKTsKK30KKwor c3RhdGljIHZvaWQgaW52ZXJ0KGZlIG8sIGNvbnN0IGZlIGkpCit7CisJZmUgYzsKKwlpbnQg YTsKKworCW1lbWNweShjLCBpLCBzaXplb2YoYykpOworCWZvciAoYSA9IDI1MzsgYSA+PSAw OyAtLWEpIHsKKwkJbXVsdG1vZChjLCBjLCBjKTsKKwkJaWYgKGEgIT0gMiAmJiBhICE9IDQp CisJCQltdWx0bW9kKGMsIGMsIGkpOworCX0KKwltZW1jcHkobywgYywgc2l6ZW9mKGZlKSk7 CisKKwltZW16ZXJvX2V4cGxpY2l0KGMsIHNpemVvZihjKSk7Cit9CisKK3N0YXRpYyB2b2lk IGNsYW1wX2tleSh1aW50OF90ICp6KQoreworCXpbMzFdID0gKHpbMzFdICYgMTI3KSB8IDY0 OworCXpbMF0gJj0gMjQ4OworfQorCit2b2lkIHdnX2dlbmVyYXRlX3B1YmxpY19rZXkod2df a2V5IHB1YmxpY19rZXksIGNvbnN0IHdnX2tleSBwcml2YXRlX2tleSkKK3sKKwlpbnQgaSwg cjsKKwl1aW50OF90IHpbMzJdOworCWZlIGEgPSB7IDEgfSwgYiA9IHsgOSB9LCBjID0geyAw IH0sIGQgPSB7IDEgfSwgZSwgZjsKKworCW1lbWNweSh6LCBwcml2YXRlX2tleSwgc2l6ZW9m KHopKTsKKwljbGFtcF9rZXkoeik7CisKKwlmb3IgKGkgPSAyNTQ7IGkgPj0gMDsgLS1pKSB7 CisJCXIgPSAoeltpID4+IDNdID4+IChpICYgNykpICYgMTsKKwkJY3N3YXAoYSwgYiwgcik7 CisJCWNzd2FwKGMsIGQsIHIpOworCQlhZGQoZSwgYSwgYyk7CisJCXN1YnRyYWN0KGEsIGEs IGMpOworCQlhZGQoYywgYiwgZCk7CisJCXN1YnRyYWN0KGIsIGIsIGQpOworCQltdWx0bW9k KGQsIGUsIGUpOworCQltdWx0bW9kKGYsIGEsIGEpOworCQltdWx0bW9kKGEsIGMsIGEpOwor CQltdWx0bW9kKGMsIGIsIGUpOworCQlhZGQoZSwgYSwgYyk7CisJCXN1YnRyYWN0KGEsIGEs IGMpOworCQltdWx0bW9kKGIsIGEsIGEpOworCQlzdWJ0cmFjdChjLCBkLCBmKTsKKwkJbXVs dG1vZChhLCBjLCAoY29uc3QgZmUpeyAweGRiNDEsIDEgfSk7CisJCWFkZChhLCBhLCBkKTsK KwkJbXVsdG1vZChjLCBjLCBhKTsKKwkJbXVsdG1vZChhLCBkLCBmKTsKKwkJbXVsdG1vZChk LCBiLCAoY29uc3QgZmUpeyA5IH0pOworCQltdWx0bW9kKGIsIGUsIGUpOworCQljc3dhcChh LCBiLCByKTsKKwkJY3N3YXAoYywgZCwgcik7CisJfQorCWludmVydChjLCBjKTsKKwltdWx0 bW9kKGEsIGEsIGMpOworCXBhY2socHVibGljX2tleSwgYSk7CisKKwltZW16ZXJvX2V4cGxp Y2l0KCZyLCBzaXplb2YocikpOworCW1lbXplcm9fZXhwbGljaXQoeiwgc2l6ZW9mKHopKTsK KwltZW16ZXJvX2V4cGxpY2l0KGEsIHNpemVvZihhKSk7CisJbWVtemVyb19leHBsaWNpdChi LCBzaXplb2YoYikpOworCW1lbXplcm9fZXhwbGljaXQoYywgc2l6ZW9mKGMpKTsKKwltZW16 ZXJvX2V4cGxpY2l0KGQsIHNpemVvZihkKSk7CisJbWVtemVyb19leHBsaWNpdChlLCBzaXpl b2YoZSkpOworCW1lbXplcm9fZXhwbGljaXQoZiwgc2l6ZW9mKGYpKTsKK30KKwordm9pZCB3 Z19nZW5lcmF0ZV9wcml2YXRlX2tleSh3Z19rZXkgcHJpdmF0ZV9rZXkpCit7CisJd2dfZ2Vu ZXJhdGVfcHJlc2hhcmVkX2tleShwcml2YXRlX2tleSk7CisJY2xhbXBfa2V5KHByaXZhdGVf a2V5KTsKK30KKwordm9pZCB3Z19nZW5lcmF0ZV9wcmVzaGFyZWRfa2V5KHdnX2tleSBwcmVz aGFyZWRfa2V5KQoreworCXNzaXplX3QgcmV0OworCXNpemVfdCBpOworCWludCBmZDsKKyNp ZiBkZWZpbmVkKF9fT3BlbkJTRF9fKSB8fCAoZGVmaW5lZChfX0FQUExFX18pICYmIE1BQ19P U19YX1ZFUlNJT05fTUlOX1JFUVVJUkVEID49IE1BQ19PU19YX1ZFUlNJT05fMTBfMTIpIHx8 IChkZWZpbmVkKF9fR0xJQkNfXykgJiYgKF9fR0xJQkNfXyA+IDIgfHwgKF9fR0xJQkNfXyA9 PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAyNSkpKQorCWlmICghZ2V0ZW50cm9weShwcmVz aGFyZWRfa2V5LCBzaXplb2Yod2dfa2V5KSkpCisJCXJldHVybjsKKyNlbmRpZgorI2lmIGRl ZmluZWQoX19OUl9nZXRyYW5kb20pICYmIGRlZmluZWQoX19saW51eF9fKQorCWlmIChzeXNj YWxsKF9fTlJfZ2V0cmFuZG9tLCBwcmVzaGFyZWRfa2V5LCBzaXplb2Yod2dfa2V5KSwgMCkg PT0gc2l6ZW9mKHdnX2tleSkpCisJCXJldHVybjsKKyNlbmRpZgorCWZkID0gb3BlbigiL2Rl di91cmFuZG9tIiwgT19SRE9OTFkpOworCWFzc2VydChmZCA+PSAwKTsKKwlmb3IgKGkgPSAw OyBpIDwgc2l6ZW9mKHdnX2tleSk7IGkgKz0gcmV0KSB7CisJCXJldCA9IHJlYWQoZmQsIHBy ZXNoYXJlZF9rZXkgKyBpLCBzaXplb2Yod2dfa2V5KSAtIGkpOworCQlhc3NlcnQocmV0ID4g MCk7CisJfQorCWNsb3NlKGZkKTsKK30KZGlmZiAtLWdpdCBhL3N5c2RlcC9saW51eC93aXJl Z3VhcmQuaCBiL3N5c2RlcC9saW51eC93aXJlZ3VhcmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMC4uZTdhMWJiZjAKLS0tIC9kZXYvbnVsbAorKysgYi9zeXNkZXAv bGludXgvd2lyZWd1YXJkLmgKQEAgLTAsMCArMSwxMDMgQEAKKy8qIFNQRFgtTGljZW5zZS1J ZGVudGlmaWVyOiBMR1BMLTIuMSsgKi8KKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAx OSBKYXNvbiBBLiBEb25lbmZlbGQgPEphc29uQHp4MmM0LmNvbT4uIEFsbCBSaWdodHMgUmVz ZXJ2ZWQuCisgKi8KKworI2lmbmRlZiBXSVJFR1VBUkRfSAorI2RlZmluZSBXSVJFR1VBUkRf SAorCisjaW5jbHVkZSA8bmV0L2lmLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2lu Y2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8c3Rk aW50Lmg+CisjaW5jbHVkZSA8c3RkYm9vbC5oPgorCit0eXBlZGVmIHVpbnQ4X3Qgd2dfa2V5 WzMyXTsKK3R5cGVkZWYgY2hhciB3Z19rZXlfYjY0X3N0cmluZ1soKHNpemVvZih3Z19rZXkp ICsgMikgLyAzKSAqIDQgKyAxXTsKKworLyogQ3Jvc3MgcGxhdGZvcm0gX19rZXJuZWxfdGlt ZXNwZWMgKi8KK3N0cnVjdCB0aW1lc3BlYzY0IHsKKwlpbnQ2NF90IHR2X3NlYzsKKwlpbnQ2 NF90IHR2X25zZWM7Cit9OworCit0eXBlZGVmIHN0cnVjdCB3Z19hbGxvd2VkaXAgeworCXVp bnQxNl90IGZhbWlseTsKKwl1bmlvbiB7CisJCXN0cnVjdCBpbl9hZGRyIGlwNDsKKwkJc3Ry dWN0IGluNl9hZGRyIGlwNjsKKwl9OworCXVpbnQ4X3QgY2lkcjsKKwlzdHJ1Y3Qgd2dfYWxs b3dlZGlwICpuZXh0X2FsbG93ZWRpcDsKK30gd2dfYWxsb3dlZGlwOworCitlbnVtIHdnX3Bl ZXJfZmxhZ3MgeworCVdHUEVFUl9SRU1PVkVfTUUgPSAxVSA8PCAwLAorCVdHUEVFUl9SRVBM QUNFX0FMTE9XRURJUFMgPSAxVSA8PCAxLAorCVdHUEVFUl9IQVNfUFVCTElDX0tFWSA9IDFV IDw8IDIsCisJV0dQRUVSX0hBU19QUkVTSEFSRURfS0VZID0gMVUgPDwgMywKKwlXR1BFRVJf SEFTX1BFUlNJU1RFTlRfS0VFUEFMSVZFX0lOVEVSVkFMID0gMVUgPDwgNAorfTsKKwordHlw ZWRlZiBzdHJ1Y3Qgd2dfcGVlciB7CisJZW51bSB3Z19wZWVyX2ZsYWdzIGZsYWdzOworCisJ d2dfa2V5IHB1YmxpY19rZXk7CisJd2dfa2V5IHByZXNoYXJlZF9rZXk7CisKKwl1bmlvbiB7 CisJCXN0cnVjdCBzb2NrYWRkciBhZGRyOworCQlzdHJ1Y3Qgc29ja2FkZHJfaW4gYWRkcjQ7 CisJCXN0cnVjdCBzb2NrYWRkcl9pbjYgYWRkcjY7CisJfSBlbmRwb2ludDsKKworCXN0cnVj dCB0aW1lc3BlYzY0IGxhc3RfaGFuZHNoYWtlX3RpbWU7CisJdWludDY0X3QgcnhfYnl0ZXMs IHR4X2J5dGVzOworCXVpbnQxNl90IHBlcnNpc3RlbnRfa2VlcGFsaXZlX2ludGVydmFsOwor CisJc3RydWN0IHdnX2FsbG93ZWRpcCAqZmlyc3RfYWxsb3dlZGlwLCAqbGFzdF9hbGxvd2Vk aXA7CisJc3RydWN0IHdnX3BlZXIgKm5leHRfcGVlcjsKK30gd2dfcGVlcjsKKworZW51bSB3 Z19kZXZpY2VfZmxhZ3MgeworCVdHREVWSUNFX1JFUExBQ0VfUEVFUlMgPSAxVSA8PCAwLAor CVdHREVWSUNFX0hBU19QUklWQVRFX0tFWSA9IDFVIDw8IDEsCisJV0dERVZJQ0VfSEFTX1BV QkxJQ19LRVkgPSAxVSA8PCAyLAorCVdHREVWSUNFX0hBU19MSVNURU5fUE9SVCA9IDFVIDw8 IDMsCisJV0dERVZJQ0VfSEFTX0ZXTUFSSyA9IDFVIDw8IDQKK307CisKK3R5cGVkZWYgc3Ry dWN0IHdnX2RldmljZSB7CisJY2hhciBuYW1lW0lGTkFNU0laXTsKKwl1aW50MzJfdCBpZmlu ZGV4OworCisJZW51bSB3Z19kZXZpY2VfZmxhZ3MgZmxhZ3M7CisKKwl3Z19rZXkgcHVibGlj X2tleTsKKwl3Z19rZXkgcHJpdmF0ZV9rZXk7CisKKwl1aW50MzJfdCBmd21hcms7CisJdWlu dDE2X3QgbGlzdGVuX3BvcnQ7CisKKwlzdHJ1Y3Qgd2dfcGVlciAqZmlyc3RfcGVlciwgKmxh c3RfcGVlcjsKK30gd2dfZGV2aWNlOworCisjZGVmaW5lIHdnX2Zvcl9lYWNoX2RldmljZV9u YW1lKF9fbmFtZXMsIF9fbmFtZSwgX19sZW4pIGZvciAoKF9fbmFtZSkgPSAoX19uYW1lcyks IChfX2xlbikgPSAwOyAoKF9fbGVuKSA9IHN0cmxlbihfX25hbWUpKTsgKF9fbmFtZSkgKz0g KF9fbGVuKSArIDEpCisjZGVmaW5lIHdnX2Zvcl9lYWNoX3BlZXIoX19kZXYsIF9fcGVlcikg Zm9yICgoX19wZWVyKSA9IChfX2RldiktPmZpcnN0X3BlZXI7IChfX3BlZXIpOyAoX19wZWVy KSA9IChfX3BlZXIpLT5uZXh0X3BlZXIpCisjZGVmaW5lIHdnX2Zvcl9lYWNoX2FsbG93ZWRp cChfX3BlZXIsIF9fYWxsb3dlZGlwKSBmb3IgKChfX2FsbG93ZWRpcCkgPSAoX19wZWVyKS0+ Zmlyc3RfYWxsb3dlZGlwOyAoX19hbGxvd2VkaXApOyAoX19hbGxvd2VkaXApID0gKF9fYWxs b3dlZGlwKS0+bmV4dF9hbGxvd2VkaXApCisKK2ludCB3Z19zZXRfZGV2aWNlKHdnX2Rldmlj ZSAqZGV2KTsKK2ludCB3Z19nZXRfZGV2aWNlKHdnX2RldmljZSAqKmRldiwgY29uc3QgY2hh ciAqZGV2aWNlX25hbWUpOworaW50IHdnX2FkZF9kZXZpY2UoY29uc3QgY2hhciAqZGV2aWNl X25hbWUpOworaW50IHdnX2RlbF9kZXZpY2UoY29uc3QgY2hhciAqZGV2aWNlX25hbWUpOwor dm9pZCB3Z19mcmVlX2RldmljZSh3Z19kZXZpY2UgKmRldik7CitjaGFyICp3Z19saXN0X2Rl dmljZV9uYW1lcyh2b2lkKTsgLyogZmlyc3RcMHNlY29uZFwwdGhpcmRcMGZvcnRoXDBsYXN0 XDBcMCAqLwordm9pZCB3Z19rZXlfdG9fYmFzZTY0KHdnX2tleV9iNjRfc3RyaW5nIGJhc2U2 NCwgY29uc3Qgd2dfa2V5IGtleSk7CitpbnQgd2dfa2V5X2Zyb21fYmFzZTY0KHdnX2tleSBr ZXksIGNvbnN0IHdnX2tleV9iNjRfc3RyaW5nIGJhc2U2NCk7Citib29sIHdnX2tleV9pc196 ZXJvKGNvbnN0IHdnX2tleSBrZXkpOwordm9pZCB3Z19nZW5lcmF0ZV9wdWJsaWNfa2V5KHdn X2tleSBwdWJsaWNfa2V5LCBjb25zdCB3Z19rZXkgcHJpdmF0ZV9rZXkpOwordm9pZCB3Z19n ZW5lcmF0ZV9wcml2YXRlX2tleSh3Z19rZXkgcHJpdmF0ZV9rZXkpOwordm9pZCB3Z19nZW5l cmF0ZV9wcmVzaGFyZWRfa2V5KHdnX2tleSBwcmVzaGFyZWRfa2V5KTsKKworI2VuZGlmCi0t IAoyLjE5LjIKCg== ----=_RainLoop_925_777050238.1559931702 Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ WireGuard mailing list WireGuard@lists.zx2c4.com https://lists.zx2c4.com/mailman/listinfo/wireguard ----=_RainLoop_925_777050238.1559931702--