Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp1803500pxb; Mon, 22 Feb 2021 11:15:41 -0800 (PST) X-Google-Smtp-Source: ABdhPJwN9YFmzIPDm1cnsX9anQSCCsjt9pbz5o8lVPO+5621u+IUzETTQA3SU+7aFlDMxFfaLFng X-Received: by 2002:a05:6402:34c1:: with SMTP id w1mr24351757edc.147.1614021341593; Mon, 22 Feb 2021 11:15:41 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1614021341; cv=pass; d=google.com; s=arc-20160816; b=0mqxzv6fG4KIZ+vrzDYXb1q6aT31yEUbBfWJXET30UA2R1CZaMB4R4MF7fNHl1sdSN YaF4lqUwcCAuhn7QyGiU+4Dh20DJg2aGtASkTOVvBjPfuQluYQlmj5UJ6ANukETW9men 2kELhMrhKR0OAyfQqXLW8T5nvjo73sPJSIMnr4WJRtcbjlT1QyVPv8F8tU+AbLTjR8K7 CyRcVU3zBGtmXfIO+9ToIOmUZpo29EnAWAll59DVrRKbK4TSiC8nipSG6k3QLVGUXnZc OXGJRsf/wuEcUrNZAnzdl8Iq6gm2E+904qZ0xZUUZEG9lSsLs6c4xTFhcrmEtPl8HkwR 5SAQ== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :content-id:user-agent:content-language:accept-language:in-reply-to :references:message-id:date:thread-index:thread-topic:subject:cc:to :from:dkim-signature; bh=ZGxH9U6g2USgsqzk7nCRsaq2s/rFVAamaEhuJSVDLAo=; b=ZfsEqowyJkYnM/c7SL4ELei0hW8ezIziss+PxSmJJr9gcBDYVa8sZQHVEXDAuqaH0k 402iGc3rFYrFRdt2hae8UPOrFLr459mY2mxkP+XWgKGP5/ns7jWRgcmH3SL8Zhi7RjfJ 7hyPGl80ZBYp87ajX80URYqmOD0OaRSf9sYfneHYkNYvlXJajPkg49FzMdXId90dy2xB UrtkUuWGJ2SibcCZYA9aLV1EzRzX5XMfJ7I20SlUIMFGYAL7Ocq2zQoU5zSO+CA6+lQk 3VGxx2kYcKhER1S800aehsOWirWYTvzVQPMVMFmtxpRXNHbQD0w4yt1qHnRnTAHomvfJ ltcw== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=AyhfEh3y; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id g10si11988150edy.225.2021.02.22.11.15.16; Mon, 22 Feb 2021 11:15:41 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=AyhfEh3y; arc=pass (i=1 spf=pass spfdomain=nxp.com dkim=pass dkdomain=nxp.com dmarc=pass fromdomain=nxp.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230165AbhBVTNx (ORCPT + 99 others); Mon, 22 Feb 2021 14:13:53 -0500 Received: from mail-eopbgr40067.outbound.protection.outlook.com ([40.107.4.67]:62182 "EHLO EUR03-DB5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S232865AbhBVTKt (ORCPT ); Mon, 22 Feb 2021 14:10:49 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jYi0PT/hLw6j4/gmRJ+5OrLCWnietQyZUFgGTDpBx9Jq8EhkVwfTcSe5g26WMAC1J3Vt3/K4IduWW/E73DvtVE8P/Xdt4Fi3D2oFD6o9Ut5FOQlPotXiaYU7UPNV7cys6nf7wGAXv6qpQtokQNc51/aOKhDUrcHzzemV8JDxxqiZgqJb1/2mQsWjNYYUyj914Mq3hxhdShkcMK0MB0I4gpLQplb/rt7gc6OqjoP71QtNDalHyrGsFj/qzsyz53RP3NnqGAuAPoKcd3ra9xepxZAUM0HpcSh0+ILhxiU/I/ZIUuULmwG1Eqt30+523v5KOJvK2/tINvbTqGFpOTWfaw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZGxH9U6g2USgsqzk7nCRsaq2s/rFVAamaEhuJSVDLAo=; b=i586fcE6IZjf0fr0bsUlpn6LZtb39JS3qaM1PZNyE6n2IYtQiEYAFENjIwnMAl6+Zo51Rni28datMKeedGcOosmdsL21F7Bv73f8ZE3REUsdjO0ZytO2rjp/5n1PBeh7yLZZhCXSP5W9//eIK8hOV1vZoftmuG5nF3PwX/x2Q0UCf1KytNR7bVypc2M/u28MAyU0iW/3tH4ShIdCpMoWBZXuRRlSFrw3qSapGKEWlIeVYNuWcFjbPEgsEMFNOtodpNX9btle55zNihjfpxSd211EOPymDv4JfEyPQMrC/4tMVI8Ji6MQ7nQ8AmPHvET8ElGmsgUcbK8F2y0V431Iww== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nxp.com; dmarc=pass action=none header.from=nxp.com; dkim=pass header.d=nxp.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=ZGxH9U6g2USgsqzk7nCRsaq2s/rFVAamaEhuJSVDLAo=; b=AyhfEh3yYpKxfUD5C8aCa4JfRlpskm9XRBg8/uu9KIkRklFBYd1TLTZdB4rJq/G6JgEgOEBzVFX6y8ngdpMBG0ILc6FVTnfUwPBM9Z6T0XKSLmtV/gu3ZkihsoVX79ZZoMqUHheaSLyZEO6tXgsG3e8j0eOFfW0VZhAAmlH8Bw8= Received: from AM5PR04MB3137.eurprd04.prod.outlook.com (2603:10a6:206:c::18) by AM7PR04MB7000.eurprd04.prod.outlook.com (2603:10a6:20b:104::18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3846.25; Mon, 22 Feb 2021 19:09:32 +0000 Received: from AM5PR04MB3137.eurprd04.prod.outlook.com ([fe80::618c:8b68:e3d9:a8c6]) by AM5PR04MB3137.eurprd04.prod.outlook.com ([fe80::618c:8b68:e3d9:a8c6%7]) with mapi id 15.20.3868.032; Mon, 22 Feb 2021 19:09:32 +0000 From: Mirela Rabulea To: "p.zabel@pengutronix.de" , "mchehab@kernel.org" , "Mirela Rabulea (OSS)" , "hverkuil-cisco@xs4all.nl" , "shawnguo@kernel.org" , "robh+dt@kernel.org" CC: "linux-media@vger.kernel.org" , Robert Chiras , dl-linux-imx , "s.hauer@pengutronix.de" , Laurentiu Palcu , "mark.rutland@arm.com" , "linux-kernel@vger.kernel.org" , Daniel Baluta , "paul.kocialkowski@bootlin.com" , "niklas.soderlund+renesas@ragnatech.se" , "devicetree@vger.kernel.org" , Aisheng Dong , "ezequiel@collabora.com" , "laurent.pinchart+renesas@ideasonboard.com" , "dafna.hirschfeld@collabora.com" Subject: Re: [EXT] Re: [PATCH v7 3/9] media: imx-jpeg: Add V4L2 driver for i.MX8 JPEG Encoder/Decoder Thread-Topic: [EXT] Re: [PATCH v7 3/9] media: imx-jpeg: Add V4L2 driver for i.MX8 JPEG Encoder/Decoder Thread-Index: AQHW6E/7msGb4xtlMUO/sDEedUC5Hqouy8aAgDYAGYA= Date: Mon, 22 Feb 2021 19:09:32 +0000 Message-ID: <3518c6c773b2bbd2cf818c1cf3109a9fa06720f7.camel@nxp.com> References: <20210111192822.12178-1-mirela.rabulea@oss.nxp.com> <20210111192822.12178-4-mirela.rabulea@oss.nxp.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.36.4-0ubuntu1 authentication-results: pengutronix.de; dkim=none (message not signed) header.d=none;pengutronix.de; dmarc=none action=none header.from=nxp.com; x-originating-ip: [86.124.171.30] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 0124bed3-d682-48fa-1200-08d8d7656336 x-ms-traffictypediagnostic: AM7PR04MB7000: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:2887; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 3NNYAm/LUDBr8FVcpXfxFyvcj0OLfLqmphbgX/NsamWzFQR/Sk4p31ABX8mLXkWrNyTC9jZ9hbr+j/OR+N/pr1dMNUGNxgf/xRABtoJXpMx6NMwaDkjD+1FEjtt7W98c32E6MsaYYt1cfkXTAX9QwDwBqX81iB2fFZDMmwgVWJB0xZHMlqFyvHYJvGdSDOx/1ZYC+Kf9uJqkdwRN0FS7eDTkEkfPJYI+j+I5ZvRRueZaGwi1AvDXE677ip65rw48O5GVR6DmMzBbRDyhBc5ufJPo1eLbvWhRZM5e5sTJ2v8qMBCOoUCpR0DZBH8XPZXeEiZfi8+u4LCIQ6NNvxv+Xj+mIMRkyvuFuU7/vSxLTH61QCFK+WWgM7flVQPqh08f51CnO1j8oEz3jLHJS9C3Ks4jB2zpvlSJx4JOV34I9//tCDMHOkqM6P+lE2sM7BnVJ3iP7oiwA6gMe2msXQuNcK1+7l6uUf2yd/21ZuNOihRJkY6QyXIAKUndd3JnBTw+1/Uf7rvCFPGj4QX3zd3IixRnulshPAxNUPa6yjyq8o8u5JPOoCrCzGtIvYZgOjB1 x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM5PR04MB3137.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(136003)(346002)(366004)(39850400004)(376002)(396003)(110136005)(478600001)(8676002)(66946007)(6486002)(5660300002)(26005)(7416002)(66476007)(86362001)(44832011)(76116006)(8936002)(6506007)(53546011)(2906002)(36756003)(83380400001)(54906003)(316002)(6512007)(4326008)(91956017)(66556008)(71200400001)(30864003)(2616005)(66446008)(186003)(64756008)(579004)(569008);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata: =?utf-8?B?Q2ZwOGVjMEpVQ24vR2ZLcGJvZmVGODFKL2ZWTFJJalM5czl2Qm92KzNsM2RW?= =?utf-8?B?dGxtLzIvTmlpN3pPTFlwajY0Q2UxK3dLRUpLZjJCOUVNUHU2Q0lHMW1nUUY5?= =?utf-8?B?T3FUemVhbktlMGptbno3bmw0M2tPSjNQM0hTUjFqdmRmdEU4VkUvb1dXYlpN?= =?utf-8?B?a0lpMVhhVmRuVENsaDR3Vi9GR3VuNWFFenVaOERETm9IeG5Yd044dUZBb1Y5?= =?utf-8?B?V2p4NXk5NTJtUTA5QmxWV1l2QnhZWWE4SHBMdVRrb3p3NVhMMDF1Q0ZUTEEx?= =?utf-8?B?T1N6ZjBZOEtOS1loK3dxTzZESFFaQVRZbjFqMStHdWhTbEwxY2NBUUtjMDgx?= =?utf-8?B?R1ArYWJ1NFRLVHcyTTk0TmwxNGhKaWhoVWc3RTJnelJkd3NVSDI1dnBycWUr?= =?utf-8?B?OWhhNjhHZW40c21tSVJaUHRhT2w0MXhEWktEK3ZPeVFPUE4vWGMrbXVpRGkx?= =?utf-8?B?UWk1OUk5MTgyVTRjNSsvYkM4bGVXMnpiOXBRcGF1TVNaZW1pbk5nbTU0S1ha?= =?utf-8?B?MDZCOHRKc2FlMHJTd2NiWmF3SHFRd2xBOXpXcjYrMjNrY0ZQdTdLb08xWEor?= =?utf-8?B?Mmw3M0xXOVo5N1NuNVEzR2FsaExURVozYTI4S2ZQR1FOM2l2T01NOEZpWS9V?= =?utf-8?B?N3cwWFdVMGpQbDF4d3VDTlcxM3F6VE9GTjJ6Zmp2akpjQjRueDlpMnAzMk54?= =?utf-8?B?a2tLaVBzKzRNVzZlblpIcmRwTkJsb2pVNGJQMlM0YWN2dm8vYmp3SHYwUHh1?= =?utf-8?B?WHFsR0xtOEFNVGw2VlBEbDB1Sjcra1o5cGtBdGlDNFo3QThLZWRNUDVVYlRt?= =?utf-8?B?Ykw1MFJLcUNiMmIzU3BHRnhSWXIxQ2szMXBqYURWZ1RUeVJxVzZLeUdrVzFK?= =?utf-8?B?b29ES04rRllSV2hoSUlZeXlsUEo3OEs2ZnFlSWlUbC9oYm8zZERVWHRsOTB2?= =?utf-8?B?SVh3N3V4L2R5TmpDSzdLVzdrY2RKSzl1NWVNZWFRejZDOEN3VnJrTUIzK1Zu?= =?utf-8?B?WXlSUUpzcElaVW8ydmdUamRxT2g5S1VlWi9oaWkzTStDbWo5MG8zYS9VUy9D?= =?utf-8?B?WktDemtJS3haRXhVaUFFZUppajdPdTdlU1BUVFF6Qnl0bUNDR1N2cGJQbjR4?= =?utf-8?B?SVFlUyswbHJCK3Rndmp5aWEvWGxwOXNZYklFdHlJdk9oUW8xczFKVWlhMmJV?= =?utf-8?B?bk1TRHdKSDRORi8vbXptWDM5VGw4VGlSSWx0cyt1M1c3cC9PQldYUUdibTRB?= =?utf-8?B?UUZ1emdmTUhKbFR2VTJuTklRbW1tZmtkRzl2VUR5ZDJqcW00U1RKMEhwZ05i?= =?utf-8?B?VndGQ3JnMk1EMmwzNUJ4RlNaQ1NxUHova3lrVTNrSmFLSkNJRzB4cjNDYURw?= =?utf-8?B?Q2J0bTZDNmNWMExmY1lHaDRha2tYeCs3bUNxcW1TTmZqRDMza1pMMVRnelhs?= =?utf-8?B?OVlpWk45YkNzdjRqNm9GaDRzbE5sWkhsWWtlQjhzYkRzbWROOW1jV3FIWGtM?= =?utf-8?B?R24xZ0d5QkhmR2c5VTI2c1NuSm1hQ1U5NEFZUnNoeWhmTDNBMnYrZUJFYlkz?= =?utf-8?B?SS9JVkZORzU3aFphQzcvMlhwK2tyZWJsajNEbW9GS2xpSWY4cmprcjZkK2Ur?= =?utf-8?B?VDdtdjFGUU41REpkbjJPV2I1dkxnd2lZUmFMVEcwU3RXWkpvd1pFYXBLQ0x4?= =?utf-8?B?VDFnNjJpbFdFL1VHUUhQK01KMXdBUS9qaDduQTgwbTJaR3BReWU0anJFY1la?= =?utf-8?Q?sVyqVkAjwr/UJVVmo1cJapi/RY/UGIXSUO11JF/?= Content-Type: text/plain; charset="utf-8" Content-ID: <141C8B895900A5408D451195004406C7@eurprd04.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AM5PR04MB3137.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 0124bed3-d682-48fa-1200-08d8d7656336 X-MS-Exchange-CrossTenant-originalarrivaltime: 22 Feb 2021 19:09:32.7522 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 686ea1d3-bc2b-4c6f-a92c-d99c5c301635 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Mlt0By+0hYNAZssuPidh6Oo1dxpXZi45bjdUYLh38Mo00efXNmbKHVqClv3FIs/fjNFHmcq75ZGlYlwv0YbCyg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR04MB7000 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgSGFucywNCmFwcG9sb2dpZXMgZm9yIG15IGxhdGUgcmVzcG9uc2UsIHBsZWFzZSBzZWUgYmVs b3cgMiBjb21tZW50cy4NCg0KT24gVHVlLCAyMDIxLTAxLTE5IGF0IDExOjMxICswMTAwLCBIYW5z IFZlcmt1aWwgd3JvdGU6DQo+IENhdXRpb246IEVYVCBFbWFpbA0KPiANCj4gT24gMTEvMDEvMjAy MSAyMDoyOCwgTWlyZWxhIFJhYnVsZWEgd3JvdGU6DQo+ID4gRnJvbTogTWlyZWxhIFJhYnVsZWEg PG1pcmVsYS5yYWJ1bGVhQG54cC5jb20+DQo+ID4gDQo+ID4gVjRMMiBkcml2ZXIgZm9yIHRoZSBK UEVHIGVuY29kZXIvZGVjb2RlciBmcm9tIGkuTVg4UVhQL2kuTVg4UU0NCj4gPiBhcHBsaWNhdGlv bg0KPiA+IHByb2Nlc3NvcnMuDQo+ID4gVGhlIG11bHRpLXBsYW5hciBidWZmZXJzIEFQSSBpcyB1 c2VkLg0KPiA+IA0KPiA+IEJhc2VsaW5lIGFuZCBleHRlbmRlZCBzZXF1ZW50aWFsIGpwZWcgZGVj b2RpbmcgaXMgc3VwcG9ydGVkLg0KPiA+IFByb2dyZXNzaXZlIGpwZWcgZGVjb2RpbmcgaXMgbm90 IHN1cHBvcnRlZCBieSB0aGUgSVAuDQo+ID4gU3VwcG9ydHMgZW5jb2RlIGFuZCBkZWNvZGUgb2Yg dmFyaW91cyBmb3JtYXRzOg0KPiA+ICAgICAgWVVWNDQ0LCBZVVY0MjIsIFlVVjQyMCwgUkdCLCBB UkdCLCBHcmF5DQo+ID4gWVVWNDIwIGlzIHRoZSBvbmx5IG11bHRpLXBsYW5hciBmb3JtYXQgc3Vw cG9ydGVkLg0KPiA+IE1pbmltdW0gcmVzb2x1dGlvbiBpcyA2NCB4IDY0LCBtYXhpbXVtIDgxOTIg eCA4MTkyLg0KPiA+IFRoZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnRzIGZvciB0aGUgcmVzb2x1dGlv biBkZXBlbmQgb24gdGhlIGZvcm1hdCwNCj4gPiBtdWx0aXBsZSBvZiAxNiByZXNvbHV0aW9ucyBz aG91bGQgd29yayBmb3IgYWxsIGZvcm1hdHMuDQo+ID4gDQo+ID4gdjRsMi1jb21wbGlhbmNlIHRl c3RzIGFyZSBwYXNzaW5nLCBpbmNsdWRpbmcgdGhlDQo+ID4gc3RyZWFtaW5nIHRlc3RzLCAidjRs Mi1jb21wbGlhbmNlIC1zIg0KPiA+IA0KPiA+IFNpZ25lZC1vZmYtYnk6IE1pcmVsYSBSYWJ1bGVh IDxtaXJlbGEucmFidWxlYUBueHAuY29tPg0KPiA+IC0tLQ0KPiA+IENoYW5nZXMgaW4gdjc6DQo+ ID4gICBBZGQgcHJpbnRfbXhjX2J1ZigpIHRvIHJlcGxhY2UgcHJpbnRfYnVmX3ByZXZpZXcoKSBh bmQNCj4gPiBwcmludF9uYnVmX3RvX2VvaSgpLA0KPiA+ICAgYW5kIGluc2lkZSwgdXNlIHRoZSBw cmludF9oZXhfZHVtcCgpIGZyb20gcHJpbnRrLmgsIGFsc28sIHByaW50DQo+ID4gYWxsIHRoZSBw bGFuZXMuDQo+ID4gDQo+ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vS2NvbmZpZyAgICAgICAg ICAgICAgICB8ICAgIDIgKw0KPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL01ha2VmaWxlICAg ICAgICAgICAgICAgfCAgICAxICsNCj4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9pbXgtanBl Zy9LY29uZmlnICAgICAgIHwgICAxMCArDQo+ID4gIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vaW14 LWpwZWcvTWFrZWZpbGUgICAgICB8ICAgIDMgKw0KPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3Jt L2lteC1qcGVnL214Yy1qcGVnLWh3LmMgfCAgMTY4ICsrDQo+ID4gIGRyaXZlcnMvbWVkaWEvcGxh dGZvcm0vaW14LWpwZWcvbXhjLWpwZWctaHcuaCB8ICAxNDAgKw0KPiA+ICBkcml2ZXJzL21lZGlh L3BsYXRmb3JtL2lteC1qcGVnL214Yy1qcGVnLmMgICAgfCAyMjg5DQo+ID4gKysrKysrKysrKysr KysrKysNCj4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9pbXgtanBlZy9teGMtanBlZy5oICAg IHwgIDE4NCArKw0KPiA+ICA4IGZpbGVzIGNoYW5nZWQsIDI3OTcgaW5zZXJ0aW9ucygrKQ0KPiA+ ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9pbXgtanBlZy9LY29u ZmlnDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2lteC1q cGVnL01ha2VmaWxlDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRm b3JtL2lteC1qcGVnL214Yy1qcGVnLWh3LmMNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvbWVkaWEvcGxhdGZvcm0vaW14LWpwZWcvbXhjLWpwZWctaHcuaA0KPiA+ICBjcmVhdGUgbW9k ZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9pbXgtanBlZy9teGMtanBlZy5jDQo+ID4g IGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2lteC1qcGVnL214Yy1q cGVnLmgNCj4gDQo+IE9uZSBoaWdoLWxldmVsIGNvbW1lbnQ6IHdoeSBpbnRyb2R1Y2UgdGhlIGRy aXZlciBpbiBwYXRjaCAzLzkgYW5kDQo+IHRoZW4NCj4gY2hhbmdlIGl0IGFnYWluIGluIDkvOT8g SSB3b3VsZCB2ZXJ5IG11Y2ggcHJlZmVyIHRvIGhhdmUganVzdCBhDQo+IHNpbmdsZQ0KPiBwYXRj aCB0aGF0IGFkZHMgdGhpcyBkcml2ZXIsIGkuZS4gbWVyZ2UgcGF0Y2ggMyBhbmQgOSBpbnRvIGEg c2luZ2xlDQo+IHBhdGNoLg0KDQpJIGNhbiBzcXVhc2ggcGF0Y2ggOSBpbnRvIHBhdGNoIDMsIGJ1 dCBwbGVhc2Ugbm90ZSB0aGF0IHBhdGNoIDkgZGVwZW5kcw0Kb24ganBlZyBoZWxwZXIgcGF0Y2hl cyA2LDcsOCwgc28gdGhlc2UgcGF0Y2hlcyB3aWxsIGFsc28gaGF2ZSB0byBtb3ZlDQpiZWZvcmUg cGF0Y2ggMy4gTGV0IG1lIGtub3cgeW91dCB0aG91Z2h0IGFuZCBJJ2xsIGRvIHRoaXMgaW4gdjks IGluIHY4DQp2ZXJzaW9uIEkgb25seSBhZGRyZXNzZWQgdGhlIHJlc3Qgb2YgeW91ciBmZWVkYmFj ayBhbmQgc29tZSBtb3JlIGZyb20NClBoaWxpcHAuDQoNCj4gDQo+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvbWVkaWEvcGxhdGZvcm0vS2NvbmZpZw0KPiA+IGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9y bS9LY29uZmlnDQo+ID4gaW5kZXggZTQxOWIxODYxM2M2Li42MjQ0ZTU3M2FlYTUgMTAwNjQ0DQo+ ID4gLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9LY29uZmlnDQo+ID4gKysrIGIvZHJpdmVy cy9tZWRpYS9wbGF0Zm9ybS9LY29uZmlnDQo+ID4gQEAgLTIzOSw2ICsyMzksOCBAQCBjb25maWcg VklERU9fSU1YX1BYUA0KPiA+ICAgICAgICAgVGhlIGkuTVggUGl4ZWwgUGlwZWxpbmUgaXMgYSBt ZW1vcnktdG8tbWVtb3J5IGVuZ2luZSBmb3INCj4gPiBzY2FsaW5nLA0KPiA+ICAgICAgICAgY29s b3Igc3BhY2UgY29udmVyc2lvbiwgYW5kIHJvdGF0aW9uLg0KPiA+IA0KPiA+ICtzb3VyY2UgImRy aXZlcnMvbWVkaWEvcGxhdGZvcm0vaW14LWpwZWcvS2NvbmZpZyINCj4gPiArDQo+ID4gIGNvbmZp ZyBWSURFT19NRURJQVRFS19KUEVHDQo+ID4gICAgICAgdHJpc3RhdGUgIk1lZGlhdGVrIEpQRUcg Q29kZWMgZHJpdmVyIg0KPiA+ICAgICAgIGRlcGVuZHMgb24gTVRLX0lPTU1VX1YxIHx8IE1US19J T01NVSB8fCBDT01QSUxFX1RFU1QNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0 Zm9ybS9NYWtlZmlsZQ0KPiA+IGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9NYWtlZmlsZQ0KPiA+ IGluZGV4IDlkNGQ2MzcwOTA4ZC4uZWVkYzE0YWFmYjMyIDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZl cnMvbWVkaWEvcGxhdGZvcm0vTWFrZWZpbGUNCj4gPiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRm b3JtL01ha2VmaWxlDQo+ID4gQEAgLTIxLDYgKzIxLDcgQEAgb2JqLSQoQ09ORklHX1ZJREVPX01Y Ml9FTU1BUFJQKSAgICAgICAgICAgICArPQ0KPiA+IG14Ml9lbW1hcHJwLm8NCj4gPiAgb2JqLSQo Q09ORklHX1ZJREVPX0NPREEpICAgICAgICAgICAgICs9IGNvZGEvDQo+ID4gDQo+ID4gIG9iai0k KENPTkZJR19WSURFT19JTVhfUFhQKSAgICAgICAgICArPSBpbXgtcHhwLm8NCj4gPiArb2JqLSQo Q09ORklHX1ZJREVPX0lNWDhfSlBFRykgICAgICAgICAgICAgICAgKz0gaW14LWpwZWcvDQo+ID4g DQo+ID4gIG9iai0kKENPTkZJR19WSURFT19NRU0yTUVNX0RFSU5URVJMQUNFKSAgICAgICs9IG0y bS1kZWludGVybGFjZS5vDQo+ID4gDQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxh dGZvcm0vaW14LWpwZWcvS2NvbmZpZw0KPiA+IGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9pbXgt anBlZy9LY29uZmlnDQo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAw MDAwMDAuLjdjYzg5ZTVlZmY5MA0KPiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJz L21lZGlhL3BsYXRmb3JtL2lteC1qcGVnL0tjb25maWcNCj4gPiBAQCAtMCwwICsxLDEwIEBADQo+ ID4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCj4gPiArY29uZmlnIFZJREVP X0lNWDhfSlBFRw0KPiA+ICsgICAgIHRyaXN0YXRlICJJTVg4IEpQRUcgRW5jb2Rlci9EZWNvZGVy Ig0KPiA+ICsgICAgIGRlcGVuZHMgb24gVklERU9fREVWICYmIFZJREVPX1Y0TDINCj4gPiArICAg ICBzZWxlY3QgVklERU9CVUYyX0RNQV9DT05USUcNCj4gPiArICAgICBzZWxlY3QgVjRMMl9NRU0y TUVNX0RFVg0KPiA+ICsgICAgIGRlZmF1bHQgbQ0KPiA+ICsgICAgIGhlbHANCj4gPiArICAgICAg IFRoaXMgaXMgYSB2aWRlbzRsaW51eDIgZHJpdmVyIGZvciB0aGUgaS5NWDggUVhQL1FNDQo+ID4g aW50ZWdyYXRlZA0KPiA+ICsgICAgICAgSlBFRyBlbmNvZGVyL2RlY29kZXIuDQo+ID4gZGlmZiAt LWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vaW14LWpwZWcvTWFrZWZpbGUNCj4gPiBiL2Ry aXZlcnMvbWVkaWEvcGxhdGZvcm0vaW14LWpwZWcvTWFrZWZpbGUNCj4gPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uYmYxOWM4MmU2MWI0DQo+ID4gLS0tIC9k ZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vaW14LWpwZWcvTWFrZWZp bGUNCj4gPiBAQCAtMCwwICsxLDMgQEANCj4gPiArIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMA0KPiA+ICtteGMtanBlZy1lbmNkZWMtb2JqcyA6PSBteGMtanBlZy1ody5vIG14Yy1q cGVnLm8NCj4gPiArb2JqLSQoQ09ORklHX1ZJREVPX0lNWDhfSlBFRykgKz0gbXhjLWpwZWctZW5j ZGVjLm8NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9pbXgtanBlZy9t eGMtanBlZy1ody5jDQo+ID4gYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2lteC1qcGVnL214Yy1q cGVnLWh3LmMNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAw MC4uMjljNjA0YjFiMTc5DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvbWVk aWEvcGxhdGZvcm0vaW14LWpwZWcvbXhjLWpwZWctaHcuYw0KPiA+IEBAIC0wLDAgKzEsMTY4IEBA DQo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+ID4gKy8qDQo+ID4g KyAqIGkuTVg4UVhQL2kuTVg4UU0gSlBFRyBlbmNvZGVyL2RlY29kZXIgdjRsMiBkcml2ZXINCj4g PiArICoNCj4gPiArICogQ29weXJpZ2h0IDIwMTgtMjAxOSBOWFANCj4gPiArICovDQo+ID4gKw0K PiA+ICsjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4NCj4gPiArI2luY2x1ZGUgPG1lZGlhL3ZpZGVv YnVmMi1jb3JlLmg+DQo+ID4gKyNpbmNsdWRlICJteGMtanBlZy1ody5oIg0KPiA+ICsNCj4gPiAr I2RlZmluZSBwcmludF93cmFwcGVyX3JlZyhkZXYsIGJhc2VfYWRkcmVzcywgcmVnX29mZnNldClc DQo+ID4gKyAgICAgICAgICAgICBpbnRlcm5hbF9wcmludF93cmFwcGVyX3JlZyhkZXYsIChiYXNl X2FkZHJlc3MpLA0KPiA+ICNyZWdfb2Zmc2V0LFwNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIChyZWdfb2Zmc2V0KSkNCj4gPiArI2RlZmluZSBpbnRlcm5hbF9w cmludF93cmFwcGVyX3JlZyhkZXYsIGJhc2VfYWRkcmVzcywgcmVnX25hbWUsDQo+ID4gcmVnX29m ZnNldCkge1wNCj4gPiArICAgICAgICAgICAgIGludCB2YWw7XA0KPiA+ICsgICAgICAgICAgICAg dmFsID0gcmVhZGwoKGJhc2VfYWRkcmVzcykgKyAocmVnX29mZnNldCkpO1wNCj4gPiArICAgICAg ICAgICAgIGRldl9kYmcoZGV2LCAiV3JhcHBlciByZWcgJXMgPSAweCV4XG4iLCByZWdfbmFtZSwN Cj4gPiB2YWwpO1wNCj4gPiArfQ0KPiA+ICsNCj4gPiArdm9pZCBwcmludF9kZXNjcmlwdG9yX2lu Zm8oc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QNCj4gPiBteGNfanBlZ19kZXNjICpkZXNjKQ0K PiA+ICt7DQo+ID4gKyAgICAgZGV2X2RiZyhkZXYsICIgTVhDIEpQRUcgTkVYVF9ERVNDUFRfUFRS IDB4JXhcbiIsDQo+ID4gKyAgICAgICAgICAgICBkZXNjLT5uZXh0X2Rlc2NwdF9wdHIpOw0KPiA+ ICsgICAgIGRldl9kYmcoZGV2LCAiIE1YQyBKUEVHIEJVRl9CQVNFMCAweCV4XG4iLCBkZXNjLT5i dWZfYmFzZTApOw0KPiA+ICsgICAgIGRldl9kYmcoZGV2LCAiIE1YQyBKUEVHIEJVRl9CQVNFMSAw eCV4XG4iLCBkZXNjLT5idWZfYmFzZTEpOw0KPiA+ICsgICAgIGRldl9kYmcoZGV2LCAiIE1YQyBK UEVHIExJTkVfUElUQ0ggJWRcbiIsIGRlc2MtPmxpbmVfcGl0Y2gpOw0KPiA+ICsgICAgIGRldl9k YmcoZGV2LCAiIE1YQyBKUEVHIFNUTV9CVUZCQVNFIDB4JXhcbiIsIGRlc2MtDQo+ID4gPnN0bV9i dWZiYXNlKTsNCj4gPiArICAgICBkZXZfZGJnKGRldiwgIiBNWEMgSlBFRyBTVE1fQlVGU0laRSAl ZFxuIiwgZGVzYy0NCj4gPiA+c3RtX2J1ZnNpemUpOw0KPiA+ICsgICAgIGRldl9kYmcoZGV2LCAi IE1YQyBKUEVHIElNR1NJWkUgJXggKCVkIHggJWQpXG4iLCBkZXNjLQ0KPiA+ID5pbWdzaXplLA0K PiA+ICsgICAgICAgICAgICAgZGVzYy0+aW1nc2l6ZSA+PiAxNiwgZGVzYy0+aW1nc2l6ZSAmIDB4 RkZGRik7DQo+ID4gKyAgICAgZGV2X2RiZyhkZXYsICIgTVhDIEpQRUcgU1RNX0NUUkwgMHgleFxu IiwgZGVzYy0+c3RtX2N0cmwpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICt2b2lkIHByaW50X2Nhc3Rf c3RhdHVzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCBfX2lvbWVtICpyZWcsDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1vZGUpDQo+ID4gK3sNCj4gPiArICAgICBkZXZf ZGJnKGRldiwgIkNBU1QgSVAgc3RhdHVzIHJlZ3M6XG4iKTsNCj4gPiArICAgICBwcmludF93cmFw cGVyX3JlZyhkZXYsIHJlZywgQ0FTVF9TVEFUVVMwKTsNCj4gPiArICAgICBwcmludF93cmFwcGVy X3JlZyhkZXYsIHJlZywgQ0FTVF9TVEFUVVMxKTsNCj4gPiArICAgICBwcmludF93cmFwcGVyX3Jl ZyhkZXYsIHJlZywgQ0FTVF9TVEFUVVMyKTsNCj4gPiArICAgICBwcmludF93cmFwcGVyX3JlZyhk ZXYsIHJlZywgQ0FTVF9TVEFUVVMzKTsNCj4gPiArICAgICBwcmludF93cmFwcGVyX3JlZyhkZXYs IHJlZywgQ0FTVF9TVEFUVVM0KTsNCj4gPiArICAgICBwcmludF93cmFwcGVyX3JlZyhkZXYsIHJl ZywgQ0FTVF9TVEFUVVM1KTsNCj4gPiArICAgICBwcmludF93cmFwcGVyX3JlZyhkZXYsIHJlZywg Q0FTVF9TVEFUVVM2KTsNCj4gPiArICAgICBwcmludF93cmFwcGVyX3JlZyhkZXYsIHJlZywgQ0FT VF9TVEFUVVM3KTsNCj4gPiArICAgICBwcmludF93cmFwcGVyX3JlZyhkZXYsIHJlZywgQ0FTVF9T VEFUVVM4KTsNCj4gPiArICAgICBwcmludF93cmFwcGVyX3JlZyhkZXYsIHJlZywgQ0FTVF9TVEFU VVM5KTsNCj4gPiArICAgICBwcmludF93cmFwcGVyX3JlZyhkZXYsIHJlZywgQ0FTVF9TVEFUVVMx MCk7DQo+ID4gKyAgICAgcHJpbnRfd3JhcHBlcl9yZWcoZGV2LCByZWcsIENBU1RfU1RBVFVTMTEp Ow0KPiA+ICsgICAgIHByaW50X3dyYXBwZXJfcmVnKGRldiwgcmVnLCBDQVNUX1NUQVRVUzEyKTsN Cj4gPiArICAgICBwcmludF93cmFwcGVyX3JlZyhkZXYsIHJlZywgQ0FTVF9TVEFUVVMxMyk7DQo+ ID4gKyAgICAgaWYgKG1vZGUgPT0gTVhDX0pQRUdfREVDT0RFKQ0KPiA+ICsgICAgICAgICAgICAg cmV0dXJuOw0KPiA+ICsgICAgIHByaW50X3dyYXBwZXJfcmVnKGRldiwgcmVnLCBDQVNUX1NUQVRV UzE0KTsNCj4gPiArICAgICBwcmludF93cmFwcGVyX3JlZyhkZXYsIHJlZywgQ0FTVF9TVEFUVVMx NSk7DQo+ID4gKyAgICAgcHJpbnRfd3JhcHBlcl9yZWcoZGV2LCByZWcsIENBU1RfU1RBVFVTMTYp Ow0KPiA+ICsgICAgIHByaW50X3dyYXBwZXJfcmVnKGRldiwgcmVnLCBDQVNUX1NUQVRVUzE3KTsN Cj4gPiArICAgICBwcmludF93cmFwcGVyX3JlZyhkZXYsIHJlZywgQ0FTVF9TVEFUVVMxOCk7DQo+ ID4gKyAgICAgcHJpbnRfd3JhcHBlcl9yZWcoZGV2LCByZWcsIENBU1RfU1RBVFVTMTkpOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICt2b2lkIHByaW50X3dyYXBwZXJfaW5mbyhzdHJ1Y3QgZGV2aWNlICpk ZXYsIHZvaWQgX19pb21lbSAqcmVnKQ0KPiA+ICt7DQo+ID4gKyAgICAgZGV2X2RiZyhkZXYsICJX cmFwcGVyIHJlZ3M6XG4iKTsNCj4gPiArICAgICBwcmludF93cmFwcGVyX3JlZyhkZXYsIHJlZywg R0xCX0NUUkwpOw0KPiA+ICsgICAgIHByaW50X3dyYXBwZXJfcmVnKGRldiwgcmVnLCBDT01fU1RB VFVTKTsNCj4gPiArICAgICBwcmludF93cmFwcGVyX3JlZyhkZXYsIHJlZywgQlVGX0JBU0UwKTsN Cj4gPiArICAgICBwcmludF93cmFwcGVyX3JlZyhkZXYsIHJlZywgQlVGX0JBU0UxKTsNCj4gPiAr ICAgICBwcmludF93cmFwcGVyX3JlZyhkZXYsIHJlZywgTElORV9QSVRDSCk7DQo+ID4gKyAgICAg cHJpbnRfd3JhcHBlcl9yZWcoZGV2LCByZWcsIFNUTV9CVUZCQVNFKTsNCj4gPiArICAgICBwcmlu dF93cmFwcGVyX3JlZyhkZXYsIHJlZywgU1RNX0JVRlNJWkUpOw0KPiA+ICsgICAgIHByaW50X3dy YXBwZXJfcmVnKGRldiwgcmVnLCBJTUdTSVpFKTsNCj4gPiArICAgICBwcmludF93cmFwcGVyX3Jl ZyhkZXYsIHJlZywgU1RNX0NUUkwpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICt2b2lkIG14Y19qcGVn X2VuYWJsZV9pcnEodm9pZCBfX2lvbWVtICpyZWcsIGludCBzbG90KQ0KPiA+ICt7DQo+ID4gKyAg ICAgd3JpdGVsKDB4RkZGRkZGRkYsIHJlZyArIE1YQ19TTE9UX09GRlNFVChzbG90LCBTTE9UX0lS UV9FTikpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICt2b2lkIG14Y19qcGVnX3N3X3Jlc2V0KHZvaWQg X19pb21lbSAqcmVnKQ0KPiA+ICt7DQo+ID4gKyAgICAgLyoNCj4gPiArICAgICAgKiBlbmdpbmUg c29mdCByZXNldCwgaW50ZXJuYWwgc3RhdGUgbWFjaGluZSByZXNldA0KPiA+ICsgICAgICAqIHRo aXMgd2lsbCBub3QgcmVzZXQgcmVnaXN0ZXJzLCBob3dldmVyLCBpdCBzZWVtcw0KPiA+ICsgICAg ICAqIHRoZSByZWdpc3RlcnMgbWF5IHJlbWFpbiBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgaW50ZXJu YWwNCj4gPiBzdGF0ZQ0KPiA+ICsgICAgICAqIHNvLCBvbiBwdXJwb3NlLCBhdCBsZWFzdCBsZXQg R0xCX0NUUkwgYml0cyBjbGVhciBhZnRlcg0KPiA+IHRoaXMgcmVzZXQNCj4gPiArICAgICAgKi8N Cj4gPiArICAgICB3cml0ZWwoR0xCX0NUUkxfU0ZUX1JTVCwgcmVnICsgR0xCX0NUUkwpOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICt2b2lkIG14Y19qcGVnX2VuY19tb2RlX2NvbmYoc3RydWN0IGRldmlj ZSAqZGV2LCB2b2lkIF9faW9tZW0gKnJlZykNCj4gPiArew0KPiA+ICsgICAgIGRldl9kYmcoZGV2 LCAiQ0FTVCBFbmNvZGVyIENPTkZJRy4uLlxuIik7DQo+ID4gKyAgICAgLyoNCj4gPiArICAgICAg KiAiQ29uZmlnX01vZGUiIGVuYWJsZWQsICJDb25maWdfTW9kZSBhdXRvIGNsZWFyIGVuYWJsZWQi LA0KPiA+ICsgICAgICAqLw0KPiA+ICsgICAgIHdyaXRlbCgweGEwLCByZWcgKyBDQVNUX01PREUp Ow0KPiA+ICsNCj4gPiArICAgICAvKiBhbGwgbWFya2VycyBhbmQgc2VnbWVudHMgKi8NCj4gPiAr ICAgICB3cml0ZWwoMHgzZmYsIHJlZyArIENBU1RfQ0ZHX01PREUpOw0KPiA+ICsNCj4gPiArICAg ICAvKiBxdWFsaXR5IGZhY3RvciAqLw0KPiA+ICsgICAgIHdyaXRlbCgweDRiLCByZWcgKyBDQVNU X1FVQUxJVFkpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICt2b2lkIG14Y19qcGVnX2VuY19tb2RlX2dv KHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCBfX2lvbWVtICpyZWcpDQo+ID4gK3sNCj4gPiArICAg ICBkZXZfZGJnKGRldiwgIkNBU1QgRW5jb2RlciBHTy4uLlxuIik7DQo+ID4gKyAgICAgLyoNCj4g PiArICAgICAgKiAiR08iIGVuYWJsZWQsICJHTyBiaXQgYXV0byBjbGVhciIgZW5hYmxlZA0KPiA+ ICsgICAgICAqLw0KPiA+ICsgICAgIHdyaXRlbCgweDE0MCwgcmVnICsgQ0FTVF9NT0RFKTsNCj4g PiArfQ0KPiA+ICsNCj4gPiArdm9pZCBteGNfanBlZ19kZWNfbW9kZV9nbyhzdHJ1Y3QgZGV2aWNl ICpkZXYsIHZvaWQgX19pb21lbSAqcmVnKQ0KPiA+ICt7DQo+ID4gKyAgICAgZGV2X2RiZyhkZXYs ICJDQVNUIERlY29kZXIgR08uLi5cbiIpOw0KPiA+ICsgICAgIHdyaXRlbChNWENfREVDX0VYSVRf SURMRV9NT0RFLCByZWcgKyBDQVNUX0NUUkwpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQgbXhj X2pwZWdfZW5hYmxlKHZvaWQgX19pb21lbSAqcmVnKQ0KPiA+ICt7DQo+ID4gKyAgICAgdTMyIHJl Z3ZhbDsNCj4gPiArDQo+ID4gKyAgICAgd3JpdGVsKEdMQl9DVFJMX0pQR19FTiwgcmVnICsgR0xC X0NUUkwpOw0KPiA+ICsgICAgIHJlZ3ZhbCA9IHJlYWRsKHJlZyk7DQo+ID4gKyAgICAgcmV0dXJu IHJlZ3ZhbDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArdm9pZCBteGNfanBlZ19lbmFibGVfc2xvdCh2 b2lkIF9faW9tZW0gKnJlZywgaW50IHNsb3QpDQo+ID4gK3sNCj4gPiArICAgICB1MzIgcmVndmFs Ow0KPiA+ICsNCj4gPiArICAgICByZWd2YWwgPSByZWFkbChyZWcgKyBHTEJfQ1RSTCk7DQo+ID4g KyAgICAgd3JpdGVsKEdMQl9DVFJMX1NMT1RfRU4oc2xvdCkgfCByZWd2YWwsIHJlZyArIEdMQl9D VFJMKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArdm9pZCBteGNfanBlZ19zZXRfbF9lbmRpYW4odm9p ZCBfX2lvbWVtICpyZWcsIGludCBsZSkNCj4gPiArew0KPiA+ICsgICAgIHUzMiByZWd2YWw7DQo+ ID4gKw0KPiA+ICsgICAgIHJlZ3ZhbCA9IHJlYWRsKHJlZyArIEdMQl9DVFJMKTsNCj4gPiArICAg ICByZWd2YWwgJj0gfkdMQl9DVFJMX0xfRU5ESUFOKDEpOyAvKiBjbGVhciAqLw0KPiA+ICsgICAg IHdyaXRlbChHTEJfQ1RSTF9MX0VORElBTihsZSkgfCByZWd2YWwsIHJlZyArIEdMQl9DVFJMKTsg LyoNCj4gPiBzZXQgKi8NCj4gPiArfQ0KPiA+ICsNCj4gPiArdm9pZCBteGNfanBlZ19zZXRfYnVm c2l6ZShzdHJ1Y3QgbXhjX2pwZWdfZGVzYyAqZGVzYywgIHUzMg0KPiA+IGJ1ZnNpemUpDQo+ID4g K3sNCj4gPiArICAgICBkZXNjLT5zdG1fYnVmc2l6ZSA9IGJ1ZnNpemU7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3ZvaWQgbXhjX2pwZWdfc2V0X3JlcyhzdHJ1Y3QgbXhjX2pwZWdfZGVzYyAqZGVzYywg dTE2IHcsIHUxNiBoKQ0KPiA+ICt7DQo+ID4gKyAgICAgZGVzYy0+aW1nc2l6ZSA9IHcgPDwgMTYg fCBoOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICt2b2lkIG14Y19qcGVnX3NldF9saW5lX3BpdGNoKHN0 cnVjdCBteGNfanBlZ19kZXNjICpkZXNjLCB1MzINCj4gPiBsaW5lX3BpdGNoKQ0KPiA+ICt7DQo+ ID4gKyAgICAgZGVzYy0+bGluZV9waXRjaCA9IGxpbmVfcGl0Y2g7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3ZvaWQgbXhjX2pwZWdfc2V0X2Rlc2ModTMyIGRlc2MsIHZvaWQgX19pb21lbSAqcmVnLCBp bnQgc2xvdCkNCj4gPiArew0KPiA+ICsgICAgIHdyaXRlbChkZXNjIHwgTVhDX05YVF9ERVNDUFRf RU4sDQo+ID4gKyAgICAgICAgICAgIHJlZyArIE1YQ19TTE9UX09GRlNFVChzbG90LCBTTE9UX05Y VF9ERVNDUFRfUFRSKSk7DQo+ID4gK30NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9w bGF0Zm9ybS9pbXgtanBlZy9teGMtanBlZy1ody5oDQo+ID4gYi9kcml2ZXJzL21lZGlhL3BsYXRm b3JtL2lteC1qcGVnL214Yy1qcGVnLWh3LmgNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+ IGluZGV4IDAwMDAwMDAwMDAwMC4uYWU3MGQzYTBkYzI0DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vaW14LWpwZWcvbXhjLWpwZWctaHcuaA0KPiA+ IEBAIC0wLDAgKzEsMTQwIEBADQo+ID4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwt Mi4wICovDQo+ID4gKy8qDQo+ID4gKyAqIGkuTVg4UVhQL2kuTVg4UU0gSlBFRyBlbmNvZGVyL2Rl Y29kZXIgdjRsMiBkcml2ZXINCj4gPiArICoNCj4gPiArICogQ29weXJpZ2h0IDIwMTgtMjAxOSBO WFANCj4gPiArICovDQo+ID4gKw0KPiA+ICsjaWZuZGVmIF9NWENfSlBFR19IV19IDQo+ID4gKyNk ZWZpbmUgX01YQ19KUEVHX0hXX0gNCj4gPiArDQo+ID4gKy8qIEpQRUcgRGVjb2Rlci9FbmNvZGVy IFdyYXBwZXIgUmVnaXN0ZXIgTWFwICovDQo+ID4gKyNkZWZpbmUgR0xCX0NUUkwgICAgICAgICAg ICAgICAgICAgICAweDANCj4gPiArI2RlZmluZSBDT01fU1RBVFVTICAgICAgICAgICAgICAgICAg IDB4NA0KPiA+ICsjZGVmaW5lIEJVRl9CQVNFMCAgICAgICAgICAgICAgICAgICAgMHgxNA0KPiA+ ICsjZGVmaW5lIEJVRl9CQVNFMSAgICAgICAgICAgICAgICAgICAgMHgxOA0KPiA+ICsjZGVmaW5l IExJTkVfUElUQ0ggICAgICAgICAgICAgICAgICAgMHgxQw0KPiA+ICsjZGVmaW5lIFNUTV9CVUZC QVNFICAgICAgICAgICAgICAgICAgMHgyMA0KPiA+ICsjZGVmaW5lIFNUTV9CVUZTSVpFICAgICAg ICAgICAgICAgICAgMHgyNA0KPiA+ICsjZGVmaW5lIElNR1NJWkUgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAweDI4DQo+ID4gKyNkZWZpbmUgU1RNX0NUUkwgICAgICAgICAgICAgICAgICAg ICAweDJDDQo+ID4gKw0KPiA+ICsvKiBDQVNUIEpQRUctRGVjb2Rlci9FbmNvZGVyIFN0YXR1cyBS ZWdpc3RlciBNYXAgKHJlYWQtb25seSkqLw0KPiA+ICsjZGVmaW5lIENBU1RfU1RBVFVTMCAgICAg ICAgICAgICAgICAgMHgxMDANCj4gPiArI2RlZmluZSBDQVNUX1NUQVRVUzEgICAgICAgICAgICAg ICAgIDB4MTA0DQo+ID4gKyNkZWZpbmUgQ0FTVF9TVEFUVVMyICAgICAgICAgICAgICAgICAweDEw OA0KPiA+ICsjZGVmaW5lIENBU1RfU1RBVFVTMyAgICAgICAgICAgICAgICAgMHgxMGMNCj4gPiAr I2RlZmluZSBDQVNUX1NUQVRVUzQgICAgICAgICAgICAgICAgIDB4MTEwDQo+ID4gKyNkZWZpbmUg Q0FTVF9TVEFUVVM1ICAgICAgICAgICAgICAgICAweDExNA0KPiA+ICsjZGVmaW5lIENBU1RfU1RB VFVTNiAgICAgICAgICAgICAgICAgMHgxMTgNCj4gPiArI2RlZmluZSBDQVNUX1NUQVRVUzcgICAg ICAgICAgICAgICAgIDB4MTFjDQo+ID4gKyNkZWZpbmUgQ0FTVF9TVEFUVVM4ICAgICAgICAgICAg ICAgICAweDEyMA0KPiA+ICsjZGVmaW5lIENBU1RfU1RBVFVTOSAgICAgICAgICAgICAgICAgMHgx MjQNCj4gPiArI2RlZmluZSBDQVNUX1NUQVRVUzEwICAgICAgICAgICAgICAgICAgICAgICAgMHgx MjgNCj4gPiArI2RlZmluZSBDQVNUX1NUQVRVUzExICAgICAgICAgICAgICAgICAgICAgICAgMHgx MmMNCj4gPiArI2RlZmluZSBDQVNUX1NUQVRVUzEyICAgICAgICAgICAgICAgICAgICAgICAgMHgx MzANCj4gPiArI2RlZmluZSBDQVNUX1NUQVRVUzEzICAgICAgICAgICAgICAgICAgICAgICAgMHgx MzQNCj4gPiArLyogdGhlIGZvbGxvd2luZyBhcmUgZm9yIGVuY29kZXIgb25seSAqLw0KPiA+ICsj ZGVmaW5lIENBU1RfU1RBVFVTMTQgICAgICAgICAgICAgICAgMHgxMzgNCj4gPiArI2RlZmluZSBD QVNUX1NUQVRVUzE1ICAgICAgICAgICAgICAgIDB4MTNjDQo+ID4gKyNkZWZpbmUgQ0FTVF9TVEFU VVMxNiAgICAgICAgICAgICAgICAweDE0MA0KPiA+ICsjZGVmaW5lIENBU1RfU1RBVFVTMTcgICAg ICAgICAgICAgICAgMHgxNDQNCj4gPiArI2RlZmluZSBDQVNUX1NUQVRVUzE4ICAgICAgICAgICAg ICAgIDB4MTQ4DQo+ID4gKyNkZWZpbmUgQ0FTVF9TVEFUVVMxOSAgICAgICAgICAgICAgICAweDE0 Yw0KPiA+ICsNCj4gPiArLyogQ0FTVCBKUEVHLURlY29kZXIgQ29udHJvbCBSZWdpc3RlciBNYXAg KHdyaXRlLW9ubHkpICovDQo+ID4gKyNkZWZpbmUgQ0FTVF9DVFJMICAgICAgICAgICAgICAgICAg ICBDQVNUX1NUQVRVUzEzDQo+ID4gKw0KPiA+ICsvKiBDQVNUIEpQRUctRW5jb2RlciBDb250cm9s IFJlZ2lzdGVyIE1hcCAod3JpdGUtb25seSkgKi8NCj4gPiArI2RlZmluZSBDQVNUX01PREUgICAg ICAgICAgICAgICAgICAgIENBU1RfU1RBVFVTMA0KPiA+ICsjZGVmaW5lIENBU1RfQ0ZHX01PREUg ICAgICAgICAgICAgICAgICAgICAgICBDQVNUX1NUQVRVUzENCj4gPiArI2RlZmluZSBDQVNUX1FV QUxJVFkgICAgICAgICAgICAgICAgIENBU1RfU1RBVFVTMg0KPiA+ICsjZGVmaW5lIENBU1RfUlNW RCAgICAgICAgICAgICAgICAgICAgQ0FTVF9TVEFUVVMzDQo+ID4gKyNkZWZpbmUgQ0FTVF9SRUNf UkVHU19TRUwgICAgICAgICAgICBDQVNUX1NUQVRVUzQNCj4gPiArI2RlZmluZSBDQVNUX0xVTVRI ICAgICAgICAgICAgICAgICAgIENBU1RfU1RBVFVTNQ0KPiA+ICsjZGVmaW5lIENBU1RfQ0hSVEgg ICAgICAgICAgICAgICAgICAgQ0FTVF9TVEFUVVM2DQo+ID4gKyNkZWZpbmUgQ0FTVF9OT01GUlNJ WkVfTE8gICAgICAgICAgICBDQVNUX1NUQVRVUzcNCj4gPiArI2RlZmluZSBDQVNUX05PTUZSU0la RV9ISSAgICAgICAgICAgIENBU1RfU1RBVFVTOA0KPiA+ICsjZGVmaW5lIENBU1RfT0ZCU0laRV9M TyAgICAgICAgICAgICAgICAgICAgICBDQVNUX1NUQVRVUzkNCj4gPiArI2RlZmluZSBDQVNUX09G QlNJWkVfSEkgICAgICAgICAgICAgICAgICAgICAgQ0FTVF9TVEFUVVMxMA0KPiA+ICsNCj4gPiAr I2RlZmluZSBNWENfTUFYX1NMT1RTICAgICAgICAxIC8qIFRPRE8gdXNlIGFsbCA0IHNsb3RzKi8N Cj4gPiArLyogSlBFRy1EZWNvZGVyIFdyYXBwZXIgU2xvdCBSZWdpc3RlcnMgMC4uMyAqLw0KPiA+ ICsjZGVmaW5lIFNMT1RfQkFTRSAgICAgICAgICAgICAgICAgICAgMHgxMDAwMA0KPiA+ICsjZGVm aW5lIFNMT1RfU1RBVFVTICAgICAgICAgICAgICAgICAgMHgwDQo+ID4gKyNkZWZpbmUgU0xPVF9J UlFfRU4gICAgICAgICAgICAgICAgICAweDQNCj4gPiArI2RlZmluZSBTTE9UX0JVRl9QVFIgICAg ICAgICAgICAgICAgIDB4OA0KPiA+ICsjZGVmaW5lIFNMT1RfQ1VSX0RFU0NQVF9QVFIgICAgICAg ICAgMHhDDQo+ID4gKyNkZWZpbmUgU0xPVF9OWFRfREVTQ1BUX1BUUiAgICAgICAgICAweDEwDQo+ ID4gKyNkZWZpbmUgTVhDX1NMT1RfT0ZGU0VUKHNsb3QsIG9mZnNldCkgICAgICAgICgoU0xPVF9C QVNFICogKChzbG90KQ0KPiA+ICsgMSkpICsgKG9mZnNldCkpDQo+ID4gKw0KPiA+ICsvKiBHTEJf Q1RSTCBmaWVsZHMgKi8NCj4gPiArI2RlZmluZSBHTEJfQ1RSTF9KUEdfRU4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDB4MQ0KPiA+ICsjZGVmaW5lIEdMQl9DVFJMX1NGVF9S U1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDEgPDwgMSkNCj4gPiArI2RlZmluZSBH TEJfQ1RSTF9ERUNfR08gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgweDEN Cj4gPiA8PCAyKQ0KPiA+ICsjZGVmaW5lIEdMQl9DVFJMX0xfRU5ESUFOKGxlKSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKChsZSkNCj4gPiA8PCAzKQ0KPiA+ICsjZGVmaW5lIEdMQl9D VFJMX1NMT1RfRU4oc2xvdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDB4MQ0KPiA+ IDw8ICgoc2xvdCkgKyA0KSkNCj4gPiArDQo+ID4gKy8qIENPTV9TVEFVUyBmaWVsZHMgKi8NCj4g PiArI2RlZmluZSBDT01fU1RBVFVTX0RFQ19PTkdPSU5HKHIpICAgICAgICAgICAgKCgocikgJiAo MSA8PCAzMSkpID4+DQo+ID4gMzEpDQo+ID4gKyNkZWZpbmUgQ09NX1NUQVRVU19DVVJfU0xPVChy KSAgICAgICAgICAgICAgICAgICAgICAgKCgocikgJiAoMHgzDQo+ID4gPDwgMjkpKSA+PiAyOSkN Cj4gPiArDQo+ID4gKy8qIFNUTV9DVFJMIGZpZWxkcyAqLw0KPiA+ICsjZGVmaW5lIFNUTV9DVFJM X1BJWEVMX1BSRUNJU0lPTiAgICAgICAgICAgICAoMHgxIDw8IDIpDQo+ID4gKyNkZWZpbmUgU1RN X0NUUkxfSU1BR0VfRk9STUFUKGltZ19mbXQpICAgICAgICAgICAgICAgKChpbWdfZm10KSA8PA0K PiA+IDMpDQo+ID4gKyNkZWZpbmUgU1RNX0NUUkxfSU1BR0VfRk9STUFUX01BU0sgICAgICAgICAg ICgweEYgPDwgMykNCj4gPiArI2RlZmluZSBTVE1fQ1RSTF9CSVRCVUZfUFRSX0NMUihjbHIpICAg ICAgICAgKChjbHIpIDw8IDcpDQo+ID4gKyNkZWZpbmUgU1RNX0NUUkxfQVVUT19TVEFSVChnbykg ICAgICAgICAgICAgICAgICAgICAgKChnbykgPDwgOCkNCj4gPiArI2RlZmluZSBTVE1fQ1RSTF9D T05GSUdfTU9EKG1vZCkgICAgICAgICAgICAgKChtb2QpIDw8IDkpDQo+ID4gKw0KPiA+ICsvKiBT TE9UX1NUQVRVUyBmaWVsZHMgZm9yIHNsb3RzIDAuLjMgKi8NCj4gPiArI2RlZmluZSBTTE9UX1NU QVRVU19GUk1ET05FICAgICAgICAgICAgICAgICAgKDB4MSA8PCAzKQ0KPiA+ICsjZGVmaW5lIFNM T1RfU1RBVFVTX0VOQ19DT05GSUdfRVJSICAgICAgICAgICAoMHgxIDw8IDgpDQo+ID4gKw0KPiA+ ICsvKiBTTE9UX0lSUV9FTiBmaWVsZHMgVEJEICovDQo+ID4gKw0KPiA+ICsjZGVmaW5lIE1YQ19O WFRfREVTQ1BUX0VOICAgICAgICAgICAgICAgICAgICAweDENCj4gPiArI2RlZmluZSBNWENfREVD X0VYSVRfSURMRV9NT0RFICAgICAgICAgICAgICAgICAgICAgICAweDQNCj4gPiArDQo+ID4gKy8q IEpQRUctRGVjb2RlciBXcmFwcGVyIC0gU1RNX0NUUkwgUmVnaXN0ZXIgRmllbGRzICovDQo+ID4g KyNkZWZpbmUgTVhDX1BJWEVMX1BSRUNJU0lPTihwcmVjaXNpb24pICgocHJlY2lzaW9uKSAvIDgg PDwgMikNCj4gPiArZW51bSBteGNfanBlZ19pbWFnZV9mb3JtYXQgew0KPiA+ICsgICAgIE1YQ19K UEVHX0lOVkFMSUQgPSAtMSwNCj4gPiArICAgICBNWENfSlBFR19ZVVY0MjAgPSAweDAsIC8qIDIg UGxhbm5hciwgWT0xc3QgcGxhbmUgVVY9Mm5kIHBsYW5lDQo+ID4gKi8NCj4gPiArICAgICBNWENf SlBFR19ZVVY0MjIgPSAweDEsIC8qIDEgUGxhbm5hciwgWVVZViBzZXF1ZW5jZSAqLw0KPiA+ICsg ICAgIE1YQ19KUEVHX1JHQiAgICA9IDB4MiwgLyogUkdCUkdCIHBhY2tlZCBmb3JtYXQgKi8NCj4g PiArICAgICBNWENfSlBFR19ZVVY0NDQgPSAweDMsIC8qIDEgUGxhbm5hciwgWVVWWVVWIHNlcXVl bmNlICovDQo+ID4gKyAgICAgTVhDX0pQRUdfR1JBWSA9IDB4NCwgLyogWTggb3IgWTEyIG9yIFNp bmdsZSBDb21wb25lbnQgKi8NCj4gPiArICAgICBNWENfSlBFR19SRVNFUlZFRCA9IDB4NSwNCj4g PiArICAgICBNWENfSlBFR19BUkdCICAgPSAweDYsDQo+ID4gK307DQo+ID4gKw0KPiA+ICsjaW5j bHVkZSAibXhjLWpwZWcuaCINCj4gPiArdm9pZCBwcmludF9kZXNjcmlwdG9yX2luZm8oc3RydWN0 IGRldmljZSAqZGV2LCBzdHJ1Y3QNCj4gPiBteGNfanBlZ19kZXNjICpkZXNjKTsNCj4gPiArdm9p ZCBwcmludF9jYXN0X3N0YXR1cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgX19pb21lbSAqcmVn LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBtb2RlKTsNCj4gPiArdm9p ZCBwcmludF93cmFwcGVyX2luZm8oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkIF9faW9tZW0gKnJl Zyk7DQo+ID4gK3ZvaWQgbXhjX2pwZWdfc3dfcmVzZXQodm9pZCBfX2lvbWVtICpyZWcpOw0KPiA+ ICtpbnQgbXhjX2pwZWdfZW5hYmxlKHZvaWQgX19pb21lbSAqcmVnKTsNCj4gPiArdm9pZCB3YWl0 X2ZybWRvbmUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkIF9faW9tZW0gKnJlZyk7DQo+ID4gK3Zv aWQgbXhjX2pwZWdfZW5jX21vZGVfY29uZihzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgX19pb21l bQ0KPiA+ICpyZWcpOw0KPiA+ICt2b2lkIG14Y19qcGVnX2VuY19tb2RlX2dvKHN0cnVjdCBkZXZp Y2UgKmRldiwgdm9pZCBfX2lvbWVtICpyZWcpOw0KPiA+ICt2b2lkIG14Y19qcGVnX2RlY19tb2Rl X2dvKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCBfX2lvbWVtICpyZWcpOw0KPiA+ICtpbnQgbXhj X2pwZWdfZ2V0X3Nsb3Qodm9pZCBfX2lvbWVtICpyZWcpOw0KPiA+ICt1MzIgbXhjX2pwZWdfZ2V0 X29mZnNldCh2b2lkIF9faW9tZW0gKnJlZywgaW50IHNsb3QpOw0KPiA+ICt2b2lkIG14Y19qcGVn X2VuYWJsZV9zbG90KHZvaWQgX19pb21lbSAqcmVnLCBpbnQgc2xvdCk7DQo+ID4gK3ZvaWQgbXhj X2pwZWdfc2V0X2xfZW5kaWFuKHZvaWQgX19pb21lbSAqcmVnLCBpbnQgbGUpOw0KPiA+ICt2b2lk IG14Y19qcGVnX2VuYWJsZV9pcnEodm9pZCBfX2lvbWVtICpyZWcsIGludCBzbG90KTsNCj4gPiAr aW50IG14Y19qcGVnX3NldF9pbnB1dCh2b2lkIF9faW9tZW0gKnJlZywgdTMyIGluX2J1ZiwgdTMy DQo+ID4gYnVmc2l6ZSk7DQo+ID4gK2ludCBteGNfanBlZ19zZXRfb3V0cHV0KHZvaWQgX19pb21l bSAqcmVnLCB1MTYgb3V0X3BpdGNoLCB1MzINCj4gPiBvdXRfYnVmLA0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICB1MTYgdywgdTE2IGgpOw0KPiA+ICt2b2lkIG14Y19qcGVnX3NldF9jb25maWdf bW9kZSh2b2lkIF9faW9tZW0gKnJlZywgaW50IGNvbmZpZ19tb2RlKTsNCj4gPiAraW50IG14Y19q cGVnX3NldF9wYXJhbXMoc3RydWN0IG14Y19qcGVnX2Rlc2MgKmRlc2MsICB1MzIgYnVmc2l6ZSwN Cj4gPiB1MTYNCj4gPiArICAgICAgICAgICAgICAgICAgICAgb3V0X3BpdGNoLCB1MzIgZm9ybWF0 KTsNCj4gPiArdm9pZCBteGNfanBlZ19zZXRfYnVmc2l6ZShzdHJ1Y3QgbXhjX2pwZWdfZGVzYyAq ZGVzYywgIHUzMg0KPiA+IGJ1ZnNpemUpOw0KPiA+ICt2b2lkIG14Y19qcGVnX3NldF9yZXMoc3Ry dWN0IG14Y19qcGVnX2Rlc2MgKmRlc2MsIHUxNiB3LCB1MTYgaCk7DQo+ID4gK3ZvaWQgbXhjX2pw ZWdfc2V0X2xpbmVfcGl0Y2goc3RydWN0IG14Y19qcGVnX2Rlc2MgKmRlc2MsIHUzMg0KPiA+IGxp bmVfcGl0Y2gpOw0KPiA+ICt2b2lkIG14Y19qcGVnX3NldF9kZXNjKHUzMiBkZXNjLCB2b2lkIF9f aW9tZW0gKnJlZywgaW50IHNsb3QpOw0KPiA+ICt2b2lkIG14Y19qcGVnX3NldF9yZWdzX2Zyb21f ZGVzYyhzdHJ1Y3QgbXhjX2pwZWdfZGVzYyAqZGVzYywNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdm9pZCBfX2lvbWVtICpyZWcpOw0KPiA+ICsjZW5kaWYNCj4gPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9pbXgtanBlZy9teGMtanBlZy5jDQo+ID4gYi9k cml2ZXJzL21lZGlhL3BsYXRmb3JtL2lteC1qcGVnL214Yy1qcGVnLmMNCj4gPiBuZXcgZmlsZSBt b2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uOWYxMDUyNzc5YzU4DQo+ID4gLS0t IC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vaW14LWpwZWcvbXhj LWpwZWcuYw0KPiA+IEBAIC0wLDAgKzEsMjI4OSBAQA0KPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMA0KPiA+ICsvKg0KPiA+ICsgKiBWNEwyIGRyaXZlciBmb3IgdGhlIEpQ RUcgZW5jb2Rlci9kZWNvZGVyIGZyb20gaS5NWDhRWFAvaS5NWDhRTQ0KPiA+IGFwcGxpY2F0aW9u DQo+ID4gKyAqIHByb2Nlc3NvcnMuDQo+ID4gKyAqDQo+ID4gKyAqIFRoZSBtdWx0aS1wbGFuYXIg YnVmZmVycyBBUEkgaXMgdXNlZC4NCj4gPiArICoNCj4gPiArICogQmFzZWxpbmUgYW5kIGV4dGVu ZGVkIHNlcXVlbnRpYWwganBlZyBkZWNvZGluZyBpcyBzdXBwb3J0ZWQuDQo+ID4gKyAqIFByb2dy ZXNzaXZlIGpwZWcgZGVjb2RpbmcgaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgSVAuDQo+ID4gKyAq IFN1cHBvcnRzIGVuY29kZSBhbmQgZGVjb2RlIG9mIHZhcmlvdXMgZm9ybWF0czoNCj4gPiArICog ICAgIFlVVjQ0NCwgWVVWNDIyLCBZVVY0MjAsIFJHQiwgQVJHQiwgR3JheQ0KPiA+ICsgKiBZVVY0 MjAgaXMgdGhlIG9ubHkgbXVsdGktcGxhbmFyIGZvcm1hdCBzdXBwb3J0ZWQuDQo+ID4gKyAqIE1p bmltdW0gcmVzb2x1dGlvbiBpcyA2NCB4IDY0LCBtYXhpbXVtIDgxOTIgeCA4MTkyLg0KPiA+ICsg KiBUbyBhY2hpZXZlIDgxOTIgeCA4MTkyLCBtb2RpZnkgaW4gZGVmY29uZmlnOg0KPiA+IENPTkZJ R19DTUFfU0laRV9NQllURVM9MzIwDQo+ID4gKyAqIFRoZSBhbGlnbm1lbnQgcmVxdWlyZW1lbnRz IGZvciB0aGUgcmVzb2x1dGlvbiBkZXBlbmQgb24gdGhlDQo+ID4gZm9ybWF0LA0KPiA+ICsgKiBt dWx0aXBsZSBvZiAxNiByZXNvbHV0aW9ucyBzaG91bGQgd29yayBmb3IgYWxsIGZvcm1hdHMuDQo+ ID4gKyAqIFNwZWNpYWwgd29ya2Fyb3VuZHMgYXJlIG1hZGUgaW4gdGhlIGRyaXZlciB0byBzdXBw b3J0IE5WMTINCj4gPiAxMDgwcC4NCj4gPiArICogV2hlbiBkZWNvZGluZywgdGhlIGRyaXZlciBk ZXRlY3RzIGltYWdlIHJlc29sdXRpb24gYW5kIHBpeGVsDQo+ID4gZm9ybWF0DQo+ID4gKyAqIGZy b20gdGhlIGpwZWcgc3RyZWFtLCBieSBwYXJzaW5nIHRoZSBqcGVnIG1hcmtlcnMuDQo+ID4gKyAq DQo+ID4gKyAqIFRoZSBJUCBoYXMgNCBzbG90cyBhdmFpbGFibGUgZm9yIGNvbnRleHQgc3dpdGNo aW5nLCBidXQgb25seQ0KPiA+IHNsb3QgMA0KPiA+ICsgKiB3YXMgZnVsbHkgdGVzdGVkIHRvIHdv cmsuIENvbnRleHQgc3dpdGNoaW5nIGlzIG5vdCB1c2VkIGJ5IHRoZQ0KPiA+IGRyaXZlci4NCj4g PiArICogRWFjaCBkcml2ZXIgaW5zdGFuY2UgKGNvbnRleHQpIGFsbG9jYXRlcyBhIHNsb3QgZm9y IGl0c2VsZiwgYnV0DQo+ID4gdGhpcw0KPiA+ICsgKiBpcyBwb3N0cG9uZWQgdW50aWwgZGV2aWNl X3J1biwgdG8gYWxsb3cgdW5saW1pdGVkIG9wZW5zLg0KPiA+ICsgKg0KPiA+ICsgKiBUaGUgZHJp dmVyIHN1Ym1pdHMgam9icyB0byB0aGUgSVAgYnkgc2V0dGluZyB1cCBhIGRlc2NyaXB0b3INCj4g PiBmb3IgdGhlDQo+ID4gKyAqIHVzZWQgc2xvdCwgYW5kIHRoZW4gdmFsaWRhdGluZyBpdC4gVGhl IGVuY29kZXIgaGFzIGFuDQo+ID4gYWRkaXRpb25hbCBkZXNjcmlwdG9yDQo+ID4gKyAqIGZvciB0 aGUgY29uZmlndXJhdGlvbiBwaGFzZS4gVGhlIGRyaXZlciBleHBlY3RzIEZSTV9ET05FDQo+ID4g aW50ZXJydXB0IGZyb20NCj4gPiArICogSVAgdG8gbWFyayB0aGUgam9iIGFzIGZpbmlzaGVkLg0K PiA+ICsgKg0KPiA+ICsgKiBUaGUgZGVjb2RlciBJUCBoYXMgc29tZSBsaW1pdGF0aW9ucyByZWdh cmRpbmcgdGhlIGNvbXBvbmVudA0KPiA+IElEJ3MsDQo+ID4gKyAqIGJ1dCB0aGUgZHJpdmVyIHdv cmtzIGFyb3VuZCB0aGlzIGJ5IHJlcGxhY2luZyB0aGVtIGluIHRoZSBqcGVnDQo+ID4gc3RyZWFt Lg0KPiA+ICsgKg0KPiA+ICsgKiBBIG1vZHVsZSBwYXJhbWV0ZXIgaXMgYXZhaWxhYmxlIGZvciBk ZWJ1ZyBwdXJwb3NlDQo+ID4gKGpwZWdfdHJhY2luZyksIHRvIGVuYWJsZQ0KPiA+ICsgKiBpdCwg ZW5hYmxlIGR5bmFtaWMgZGVidWcgZm9yIHRoaXMgbW9kdWxlIGFuZDoNCj4gPiArICogZWNobyAx ID4gL3N5cy9tb2R1bGUvbXhjX2pwZWdfZW5jZGVjL3BhcmFtZXRlcnMvanBlZ190cmFjaW5nDQo+ ID4gKyAqDQo+ID4gKyAqIFRoaXMgaXMgaW5zcGlyZWQgYnkgdGhlIGRyaXZlcnMvbWVkaWEvcGxh dGZvcm0vczVwLWpwZWcgZHJpdmVyDQo+ID4gKyAqDQo+ID4gKyAqIENvcHlyaWdodCAyMDE4LTIw MTkgTlhQDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0K PiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pby5o Pg0KPiA+ICsjaW5jbHVkZSA8bGludXgvY2xrLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZl9w bGF0Zm9ybS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+ID4g KyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pcnFyZXR1cm4u aD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPg0KPiA+ICsjaW5jbHVkZSA8bGlu dXgvcG1fZG9tYWluLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4NCj4gPiArDQo+ ID4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLW1lbTJtZW0uaD4NCj4gPiArI2luY2x1ZGUgPG1lZGlh L3Y0bDItaW9jdGwuaD4NCj4gPiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+DQo+ID4g KyNpbmNsdWRlIDxtZWRpYS92NGwyLWV2ZW50Lmg+DQo+ID4gKyNpbmNsdWRlIDxtZWRpYS92aWRl b2J1ZjItZG1hLWNvbnRpZy5oPg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgIm14Yy1qcGVnLWh3Lmgi DQo+ID4gKyNpbmNsdWRlICJteGMtanBlZy5oIg0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBt eGNfanBlZ19mbXQgbXhjX2Zvcm1hdHNbXSA9IHsNCj4gPiArICAgICB7DQo+ID4gKyAgICAgICAg ICAgICAubmFtZSAgICAgICAgICAgPSAiSlBFRyIsDQo+ID4gKyAgICAgICAgICAgICAuZm91cmNj ICAgICAgICAgPSBWNEwyX1BJWF9GTVRfSlBFRywNCj4gPiArICAgICAgICAgICAgIC5jb2xwbGFu ZXMgICAgICA9IDEsDQo+ID4gKyAgICAgICAgICAgICAuZmxhZ3MgICAgICAgICAgPSBNWENfSlBF R19GTVRfVFlQRV9FTkMsDQo+ID4gKyAgICAgfSwNCj4gPiArICAgICB7DQo+ID4gKyAgICAgICAg ICAgICAubmFtZSAgICAgICAgICAgPSAiUkdCIiwgLypSR0JSR0IgcGFja2VkIGZvcm1hdCovDQo+ ID4gKyAgICAgICAgICAgICAuZm91cmNjICAgICAgICAgPSBWNEwyX1BJWF9GTVRfUkdCMjQsDQo+ ID4gKyAgICAgICAgICAgICAuZGVwdGggICAgICAgICAgPSAyNCwNCj4gPiArICAgICAgICAgICAg IC5jb2xwbGFuZXMgICAgICA9IDEsDQo+ID4gKyAgICAgICAgICAgICAuaF9hbGlnbiAgICAgICAg PSAzLA0KPiA+ICsgICAgICAgICAgICAgLnZfYWxpZ24gICAgICAgID0gMywNCj4gPiArICAgICAg ICAgICAgIC5mbGFncyAgICAgICAgICA9IE1YQ19KUEVHX0ZNVF9UWVBFX1JBVywNCj4gPiArICAg ICB9LA0KPiA+ICsgICAgIHsNCj4gPiArICAgICAgICAgICAgIC5uYW1lICAgICAgICAgICA9ICJB UkdCIiwgLyogQVJHQkFSR0IgcGFja2VkIGZvcm1hdA0KPiA+ICovDQo+ID4gKyAgICAgICAgICAg ICAuZm91cmNjICAgICAgICAgPSBWNEwyX1BJWF9GTVRfQVJHQjMyLA0KPiA+ICsgICAgICAgICAg ICAgLmRlcHRoICAgICAgICAgID0gMzIsDQo+ID4gKyAgICAgICAgICAgICAuY29scGxhbmVzICAg ICAgPSAxLA0KPiA+ICsgICAgICAgICAgICAgLmhfYWxpZ24gICAgICAgID0gMywNCj4gPiArICAg ICAgICAgICAgIC52X2FsaWduICAgICAgICA9IDMsDQo+ID4gKyAgICAgICAgICAgICAuZmxhZ3Mg ICAgICAgICAgPSBNWENfSlBFR19GTVRfVFlQRV9SQVcsDQo+ID4gKyAgICAgfSwNCj4gPiArICAg ICB7DQo+ID4gKyAgICAgICAgICAgICAubmFtZSAgICAgICAgICAgPSAiWVVWNDIwIiwgLyogMXN0 IHBsYW5lID0gWSwgMm5kDQo+ID4gcGxhbmUgPSBVViAqLw0KPiA+ICsgICAgICAgICAgICAgLmZv dXJjYyAgICAgICAgID0gVjRMMl9QSVhfRk1UX05WMTIsDQo+ID4gKyAgICAgICAgICAgICAuZGVw dGggICAgICAgICAgPSAxMiwgLyogNiBieXRlcyAoNFkgKyBVVikgZm9yIDQNCj4gPiBwaXhlbHMg Ki8NCj4gPiArICAgICAgICAgICAgIC5jb2xwbGFuZXMgICAgICA9IDIsIC8qIDEgcGxhbmUgWSwg MSBwbGFuZSBVVg0KPiA+IGludGVybGVhdmVkICovDQo+ID4gKyAgICAgICAgICAgICAuaF9hbGln biAgICAgICAgPSA0LA0KPiA+ICsgICAgICAgICAgICAgLnZfYWxpZ24gICAgICAgID0gNCwNCj4g PiArICAgICAgICAgICAgIC5mbGFncyAgICAgICAgICA9IE1YQ19KUEVHX0ZNVF9UWVBFX1JBVywN Cj4gPiArICAgICB9LA0KPiA+ICsgICAgIHsNCj4gPiArICAgICAgICAgICAgIC5uYW1lICAgICAg ICAgICA9ICJZVVY0MjIiLCAvKiBZVVlWICovDQo+ID4gKyAgICAgICAgICAgICAuZm91cmNjICAg ICAgICAgPSBWNEwyX1BJWF9GTVRfWVVZViwNCj4gPiArICAgICAgICAgICAgIC5kZXB0aCAgICAg ICAgICA9IDE2LA0KPiA+ICsgICAgICAgICAgICAgLmNvbHBsYW5lcyAgICAgID0gMSwNCj4gPiAr ICAgICAgICAgICAgIC5oX2FsaWduICAgICAgICA9IDQsDQo+ID4gKyAgICAgICAgICAgICAudl9h bGlnbiAgICAgICAgPSAzLA0KPiA+ICsgICAgICAgICAgICAgLmZsYWdzICAgICAgICAgID0gTVhD X0pQRUdfRk1UX1RZUEVfUkFXLA0KPiA+ICsgICAgIH0sDQo+ID4gKyAgICAgew0KPiA+ICsgICAg ICAgICAgICAgLm5hbWUgICAgICAgICAgID0gIllVVjQ0NCIsIC8qIFlVVllVViAqLw0KPiA+ICsg ICAgICAgICAgICAgLmZvdXJjYyAgICAgICAgID0gVjRMMl9QSVhfRk1UX1lVVjI0LA0KPiA+ICsg ICAgICAgICAgICAgLmRlcHRoICAgICAgICAgID0gMjQsDQo+ID4gKyAgICAgICAgICAgICAuY29s cGxhbmVzICAgICAgPSAxLA0KPiA+ICsgICAgICAgICAgICAgLmhfYWxpZ24gICAgICAgID0gMywN Cj4gPiArICAgICAgICAgICAgIC52X2FsaWduICAgICAgICA9IDMsDQo+ID4gKyAgICAgICAgICAg ICAuZmxhZ3MgICAgICAgICAgPSBNWENfSlBFR19GTVRfVFlQRV9SQVcsDQo+ID4gKyAgICAgfSwN Cj4gPiArICAgICB7DQo+ID4gKyAgICAgICAgICAgICAubmFtZSAgICAgICAgICAgPSAiR3JheSIs IC8qIEdyYXkgKFk4L1kxMikgb3IgU2luZ2xlDQo+ID4gQ29tcCAqLw0KPiA+ICsgICAgICAgICAg ICAgLmZvdXJjYyAgICAgICAgID0gVjRMMl9QSVhfRk1UX0dSRVksDQo+ID4gKyAgICAgICAgICAg ICAuZGVwdGggICAgICAgICAgPSA4LA0KPiA+ICsgICAgICAgICAgICAgLmNvbHBsYW5lcyAgICAg ID0gMSwNCj4gPiArICAgICAgICAgICAgIC5oX2FsaWduICAgICAgICA9IDMsDQo+ID4gKyAgICAg ICAgICAgICAudl9hbGlnbiAgICAgICAgPSAzLA0KPiA+ICsgICAgICAgICAgICAgLmZsYWdzICAg ICAgICAgID0gTVhDX0pQRUdfRk1UX1RZUEVfUkFXLA0KPiA+ICsgICAgIH0sDQo+ID4gK307DQo+ ID4gKw0KPiA+ICsjZGVmaW5lIE1YQ19KUEVHX05VTV9GT1JNQVRTIEFSUkFZX1NJWkUobXhjX2Zv cm1hdHMpDQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBteGNf anBlZ19tYXRjaFtdID0gew0KPiA+ICsgICAgIHsNCj4gPiArICAgICAgICAgICAgIC5jb21wYXRp YmxlID0gIm54cCxpbXg4cXhwLWpwZ2RlYyIsDQo+ID4gKyAgICAgICAgICAgICAuZGF0YSAgICAg ICA9ICh2b2lkICopTVhDX0pQRUdfREVDT0RFLA0KPiA+ICsgICAgIH0sDQo+ID4gKyAgICAgew0K PiA+ICsgICAgICAgICAgICAgLmNvbXBhdGlibGUgPSAibnhwLGlteDhxeHAtanBnZW5jIiwNCj4g PiArICAgICAgICAgICAgIC5kYXRhICAgICAgID0gKHZvaWQgKilNWENfSlBFR19FTkNPREUsDQo+ ID4gKyAgICAgfSwNCj4gPiArICAgICB7IH0sDQo+ID4gK307DQo+ID4gKw0KPiA+ICsvKg0KPiA+ ICsgKiBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gc3RyZWFtLCA2NHg2NCB5dXY0MjINCj4gPiArICog c3BsaXQgYnkgSlBFRyBtYXJrZXIsIHNvIGl0J3MgZWFzaWVyIHRvIG1vZGlmeSAmIHVzZQ0KPiA+ ICsgKi8NCj4gPiArc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIganBlZ19zb2lbXSA9IHsNCj4g PiArICAgICAweEZGLCAweEQ4DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3QgdW5z aWduZWQgY2hhciBqcGVnX2FwcDBbXSA9IHsNCj4gPiArICAgICAweEZGLCAweEUwLA0KPiA+ICsg ICAgIDB4MDAsIDB4MTAsIDB4NEEsIDB4NDYsIDB4NDksIDB4NDYsIDB4MDAsDQo+ID4gKyAgICAg MHgwMSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMSwNCj4gPiArICAgICAweDAw LCAweDAwDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBq cGVnX2FwcDE0W10gPSB7DQo+ID4gKyAgICAgMHhGRiwgMHhFRSwNCj4gPiArICAgICAweDAwLCAw eDBFLCAweDQxLCAweDY0LCAweDZGLCAweDYyLCAweDY1LA0KPiA+ICsgICAgIDB4MDAsIDB4NjQs IDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDANCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRp YyBjb25zdCB1bnNpZ25lZCBjaGFyIGpwZWdfZHF0W10gPSB7DQo+ID4gKyAgICAgMHhGRiwgMHhE QiwNCj4gPiArICAgICAweDAwLCAweDg0LCAweDAwLCAweDEwLCAweDBCLCAweDBDLCAweDBFLA0K PiA+ICsgICAgIDB4MEMsIDB4MEEsIDB4MTAsIDB4MEUsIDB4MEQsIDB4MEUsIDB4MTIsDQo+ID4g KyAgICAgMHgxMSwgMHgxMCwgMHgxMywgMHgxOCwgMHgyOCwgMHgxQSwgMHgxOCwNCj4gPiArICAg ICAweDE2LCAweDE2LCAweDE4LCAweDMxLCAweDIzLCAweDI1LCAweDFELA0KPiA+ICsgICAgIDB4 MjgsIDB4M0EsIDB4MzMsIDB4M0QsIDB4M0MsIDB4MzksIDB4MzMsDQo+ID4gKyAgICAgMHgzOCwg MHgzNywgMHg0MCwgMHg0OCwgMHg1QywgMHg0RSwgMHg0MCwNCj4gPiArICAgICAweDQ0LCAweDU3 LCAweDQ1LCAweDM3LCAweDM4LCAweDUwLCAweDZELA0KPiA+ICsgICAgIDB4NTEsIDB4NTcsIDB4 NUYsIDB4NjIsIDB4NjcsIDB4NjgsIDB4NjcsDQo+ID4gKyAgICAgMHgzRSwgMHg0RCwgMHg3MSwg MHg3OSwgMHg3MCwgMHg2NCwgMHg3OCwNCj4gPiArICAgICAweDVDLCAweDY1LCAweDY3LCAweDYz LCAweDAxLCAweDExLCAweDEyLA0KPiA+ICsgICAgIDB4MTIsIDB4MTgsIDB4MTUsIDB4MTgsIDB4 MkYsIDB4MUEsIDB4MUEsDQo+ID4gKyAgICAgMHgyRiwgMHg2MywgMHg0MiwgMHgzOCwgMHg0Miwg MHg2MywgMHg2MywNCj4gPiArICAgICAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYz LCAweDYzLA0KPiA+ICsgICAgIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4 NjMsDQo+ID4gKyAgICAgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywN Cj4gPiArICAgICAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLA0KPiA+ ICsgICAgIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsDQo+ID4gKyAg ICAgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywNCj4gPiArICAgICAw eDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzDQo+ID4gK307DQo+ID4gKw0KPiA+ICtz dGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBqcGVnX3NvZl9tYXhpbWFsW10gPSB7DQo+ID4gKyAg ICAgMHhGRiwgMHhDMCwNCj4gPiArICAgICAweDAwLCAweDE0LCAweDA4LCAweDAwLCAweDQwLCAw eDAwLCAweDQwLA0KPiA+ICsgICAgIDB4MDQsIDB4MDEsIDB4MTEsIDB4MDAsIDB4MDIsIDB4MTEs IDB4MDEsDQo+ID4gKyAgICAgMHgwMywgMHgxMSwgMHgwMSwgMHgwNCwgMHgxMSwgMHgwMQ0KPiA+ ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIganBlZ19kaHRbXSA9 IHsNCj4gPiArICAgICAweEZGLCAweEM0LA0KPiA+ICsgICAgIDB4MDEsIDB4QTIsIDB4MDAsIDB4 MDAsIDB4MDEsIDB4MDUsIDB4MDEsDQo+ID4gKyAgICAgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwg MHgwMSwgMHgwMCwgMHgwMCwNCj4gPiArICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAw LCAweDAwLCAweDAxLA0KPiA+ICsgICAgIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4 MDcsIDB4MDgsDQo+ID4gKyAgICAgMHgwOSwgMHgwQSwgMHgwQiwgMHgxMCwgMHgwMCwgMHgwMiwg MHgwMSwNCj4gPiArICAgICAweDAzLCAweDAzLCAweDAyLCAweDA0LCAweDAzLCAweDA1LCAweDA1 LA0KPiA+ICsgICAgIDB4MDQsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDEsIDB4N0QsIDB4MDEsDQo+ ID4gKyAgICAgMHgwMiwgMHgwMywgMHgwMCwgMHgwNCwgMHgxMSwgMHgwNSwgMHgxMiwNCj4gPiAr ICAgICAweDIxLCAweDMxLCAweDQxLCAweDA2LCAweDEzLCAweDUxLCAweDYxLA0KPiA+ICsgICAg IDB4MDcsIDB4MjIsIDB4NzEsIDB4MTQsIDB4MzIsIDB4ODEsIDB4OTEsDQo+ID4gKyAgICAgMHhB MSwgMHgwOCwgMHgyMywgMHg0MiwgMHhCMSwgMHhDMSwgMHgxNSwNCj4gPiArICAgICAweDUyLCAw eEQxLCAweEYwLCAweDI0LCAweDMzLCAweDYyLCAweDcyLA0KPiA+ICsgICAgIDB4ODIsIDB4MDks IDB4MEEsIDB4MTYsIDB4MTcsIDB4MTgsIDB4MTksDQo+ID4gKyAgICAgMHgxQSwgMHgyNSwgMHgy NiwgMHgyNywgMHgyOCwgMHgyOSwgMHgyQSwNCj4gPiArICAgICAweDM0LCAweDM1LCAweDM2LCAw eDM3LCAweDM4LCAweDM5LCAweDNBLA0KPiA+ICsgICAgIDB4NDMsIDB4NDQsIDB4NDUsIDB4NDYs IDB4NDcsIDB4NDgsIDB4NDksDQo+ID4gKyAgICAgMHg0QSwgMHg1MywgMHg1NCwgMHg1NSwgMHg1 NiwgMHg1NywgMHg1OCwNCj4gPiArICAgICAweDU5LCAweDVBLCAweDYzLCAweDY0LCAweDY1LCAw eDY2LCAweDY3LA0KPiA+ICsgICAgIDB4NjgsIDB4NjksIDB4NkEsIDB4NzMsIDB4NzQsIDB4NzUs IDB4NzYsDQo+ID4gKyAgICAgMHg3NywgMHg3OCwgMHg3OSwgMHg3QSwgMHg4MywgMHg4NCwgMHg4 NSwNCj4gPiArICAgICAweDg2LCAweDg3LCAweDg4LCAweDg5LCAweDhBLCAweDkyLCAweDkzLA0K PiA+ICsgICAgIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsIDB4OTgsIDB4OTksIDB4OUEsDQo+ID4g KyAgICAgMHhBMiwgMHhBMywgMHhBNCwgMHhBNSwgMHhBNiwgMHhBNywgMHhBOCwNCj4gPiArICAg ICAweEE5LCAweEFBLCAweEIyLCAweEIzLCAweEI0LCAweEI1LCAweEI2LA0KPiA+ICsgICAgIDB4 QjcsIDB4QjgsIDB4QjksIDB4QkEsIDB4QzIsIDB4QzMsIDB4QzQsDQo+ID4gKyAgICAgMHhDNSwg MHhDNiwgMHhDNywgMHhDOCwgMHhDOSwgMHhDQSwgMHhEMiwNCj4gPiArICAgICAweEQzLCAweEQ0 LCAweEQ1LCAweEQ2LCAweEQ3LCAweEQ4LCAweEQ5LA0KPiA+ICsgICAgIDB4REEsIDB4RTEsIDB4 RTIsIDB4RTMsIDB4RTQsIDB4RTUsIDB4RTYsDQo+ID4gKyAgICAgMHhFNywgMHhFOCwgMHhFOSwg MHhFQSwgMHhGMSwgMHhGMiwgMHhGMywNCj4gPiArICAgICAweEY0LCAweEY1LCAweEY2LCAweEY3 LCAweEY4LCAweEY5LCAweEZBLA0KPiA+ICsgICAgIDB4MDEsIDB4MDAsIDB4MDMsIDB4MDEsIDB4 MDEsIDB4MDEsIDB4MDEsDQo+ID4gKyAgICAgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwg MHgwMCwgMHgwMCwNCj4gPiArICAgICAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAxLCAweDAy LCAweDAzLA0KPiA+ICsgICAgIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDgsIDB4MDksIDB4 MEEsDQo+ID4gKyAgICAgMHgwQiwgMHgxMSwgMHgwMCwgMHgwMiwgMHgwMSwgMHgwMiwgMHgwNCwN Cj4gPiArICAgICAweDA0LCAweDAzLCAweDA0LCAweDA3LCAweDA1LCAweDA0LCAweDA0LA0KPiA+ ICsgICAgIDB4MDAsIDB4MDEsIDB4MDIsIDB4NzcsIDB4MDAsIDB4MDEsIDB4MDIsDQo+ID4gKyAg ICAgMHgwMywgMHgxMSwgMHgwNCwgMHgwNSwgMHgyMSwgMHgzMSwgMHgwNiwNCj4gPiArICAgICAw eDEyLCAweDQxLCAweDUxLCAweDA3LCAweDYxLCAweDcxLCAweDEzLA0KPiA+ICsgICAgIDB4MjIs IDB4MzIsIDB4ODEsIDB4MDgsIDB4MTQsIDB4NDIsIDB4OTEsDQo+ID4gKyAgICAgMHhBMSwgMHhC MSwgMHhDMSwgMHgwOSwgMHgyMywgMHgzMywgMHg1MiwNCj4gPiArICAgICAweEYwLCAweDE1LCAw eDYyLCAweDcyLCAweEQxLCAweDBBLCAweDE2LA0KPiA+ICsgICAgIDB4MjQsIDB4MzQsIDB4RTEs IDB4MjUsIDB4RjEsIDB4MTcsIDB4MTgsDQo+ID4gKyAgICAgMHgxOSwgMHgxQSwgMHgyNiwgMHgy NywgMHgyOCwgMHgyOSwgMHgyQSwNCj4gPiArICAgICAweDM1LCAweDM2LCAweDM3LCAweDM4LCAw eDM5LCAweDNBLCAweDQzLA0KPiA+ICsgICAgIDB4NDQsIDB4NDUsIDB4NDYsIDB4NDcsIDB4NDgs IDB4NDksIDB4NEEsDQo+ID4gKyAgICAgMHg1MywgMHg1NCwgMHg1NSwgMHg1NiwgMHg1NywgMHg1 OCwgMHg1OSwNCj4gPiArICAgICAweDVBLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LCAw eDY4LA0KPiA+ICsgICAgIDB4NjksIDB4NkEsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4Nzcs DQo+ID4gKyAgICAgMHg3OCwgMHg3OSwgMHg3QSwgMHg4MiwgMHg4MywgMHg4NCwgMHg4NSwNCj4g PiArICAgICAweDg2LCAweDg3LCAweDg4LCAweDg5LCAweDhBLCAweDkyLCAweDkzLA0KPiA+ICsg ICAgIDB4OTQsIDB4OTUsIDB4OTYsIDB4OTcsIDB4OTgsIDB4OTksIDB4OUEsDQo+ID4gKyAgICAg MHhBMiwgMHhBMywgMHhBNCwgMHhBNSwgMHhBNiwgMHhBNywgMHhBOCwNCj4gPiArICAgICAweEE5 LCAweEFBLCAweEIyLCAweEIzLCAweEI0LCAweEI1LCAweEI2LA0KPiA+ICsgICAgIDB4QjcsIDB4 QjgsIDB4QjksIDB4QkEsIDB4QzIsIDB4QzMsIDB4QzQsDQo+ID4gKyAgICAgMHhDNSwgMHhDNiwg MHhDNywgMHhDOCwgMHhDOSwgMHhDQSwgMHhEMiwNCj4gPiArICAgICAweEQzLCAweEQ0LCAweEQ1 LCAweEQ2LCAweEQ3LCAweEQ4LCAweEQ5LA0KPiA+ICsgICAgIDB4REEsIDB4RTIsIDB4RTMsIDB4 RTQsIDB4RTUsIDB4RTYsIDB4RTcsDQo+ID4gKyAgICAgMHhFOCwgMHhFOSwgMHhFQSwgMHhGMiwg MHhGMywgMHhGNCwgMHhGNSwNCj4gPiArICAgICAweEY2LCAweEY3LCAweEY4LCAweEY5LCAweEZB DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBqcGVnX2Ry aVtdID0gew0KPiA+ICsgICAgIDB4RkYsIDB4REQsDQo+ID4gKyAgICAgMHgwMCwgMHgwNCwgMHgw MCwgMHgyMA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIg anBlZ19zb3NfbWF4aW1hbFtdID0gew0KPiA+ICsgICAgIDB4RkYsIDB4REEsDQo+ID4gKyAgICAg MHgwMCwgMHgwQywgMHgwNCwgMHgwMSwgMHgwMCwgMHgwMiwgMHgxMSwgMHgwMywNCj4gPiArICAg ICAweDExLCAweDA0LCAweDExLCAweDAwLCAweDNGLCAweDAwDQo+ID4gK307DQo+ID4gKw0KPiA+ ICtzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBqcGVnX2VvaVtdID0gew0KPiA+ICsgICAgIDB4 RkYsIDB4RDkNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCBteGNfanBlZ19zcmNfYnVmIHsN Cj4gPiArICAgICAvKiBjb21tb24gdjRsIGJ1ZmZlciBzdHVmZiAtLSBtdXN0IGJlIGZpcnN0ICov DQo+ID4gKyAgICAgc3RydWN0IHZiMl92NGwyX2J1ZmZlciAgYjsNCj4gPiArICAgICBzdHJ1Y3Qg bGlzdF9oZWFkICAgICAgICBsaXN0Ow0KPiA+ICsNCj4gPiArICAgICAvKiBteGMtanBlZyBzcGVj aWZpYyAqLw0KPiA+ICsgICAgIGJvb2wgICAgICAgICAgICAgICAgICAgIGRodF9uZWVkZWQ7DQo+ ID4gKyAgICAgYm9vbCAgICAgICAgICAgICAgICAgICAganBlZ19wYXJzZV9lcnJvcjsNCj4gPiAr fTsNCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IG14Y19qcGVnX3NyY19idWYgKnZi Ml90b19teGNfYnVmKHN0cnVjdA0KPiA+IHZiMl9idWZmZXIgKnZiKQ0KPiA+ICt7DQo+ID4gKyAg ICAgcmV0dXJuIGNvbnRhaW5lcl9vZih0b192YjJfdjRsMl9idWZmZXIodmIpLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG14Y19qcGVnX3NyY19idWYsIGIpOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgdW5zaWduZWQgaW50IGRlYnVnOw0KPiA+ICttb2R1bGVfcGFy YW0oZGVidWcsIGludCwgMDY0NCk7DQo+ID4gK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1 ZyBsZXZlbCAoMC0zKSIpOw0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgX2Jzd2FwMTYodTE2ICph KQ0KPiA+ICt7DQo+ID4gKyAgICAgKmEgPSAoKCphICYgMHgwMEZGKSA8PCA4KSB8ICgoKmEgJiAw eEZGMDApID4+IDgpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBwcmludF9teGNf YnVmKHN0cnVjdCBteGNfanBlZ19kZXYgKmpwZWcsIHN0cnVjdA0KPiA+IHZiMl9idWZmZXIgKmJ1 ZiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxlbikNCj4gPiAr ew0KPiA+ICsgICAgIHVuc2lnbmVkIGludCBwbGFuZV9ubzsNCj4gPiArICAgICB1MzIgZG1hX2Fk ZHI7DQo+ID4gKyAgICAgdm9pZCAqdmFkZHI7DQo+ID4gKyAgICAgdW5zaWduZWQgbG9uZyBwYXls b2FkOw0KPiA+ICsNCj4gPiArICAgICBpZiAoZGVidWcgPCAzKQ0KPiA+ICsgICAgICAgICAgICAg cmV0dXJuOw0KPiA+ICsNCj4gPiArICAgICBmb3IgKHBsYW5lX25vID0gMDsgcGxhbmVfbm8gPCBi dWYtPm51bV9wbGFuZXM7IHBsYW5lX25vKyspIHsNCj4gPiArICAgICAgICAgICAgIHBheWxvYWQg PSB2YjJfZ2V0X3BsYW5lX3BheWxvYWQoYnVmLCBwbGFuZV9ubyk7DQo+ID4gKyAgICAgICAgICAg ICBpZiAobGVuID09IDApDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGxlbiA9IHBheWxvYWQ7 DQo+ID4gKyAgICAgICAgICAgICBkbWFfYWRkciA9IHZiMl9kbWFfY29udGlnX3BsYW5lX2RtYV9h ZGRyKGJ1ZiwNCj4gPiBwbGFuZV9ubyk7DQo+ID4gKyAgICAgICAgICAgICB2YWRkciA9IHZiMl9w bGFuZV92YWRkcihidWYsIHBsYW5lX25vKTsNCj4gPiArICAgICAgICAgICAgIHY0bDJfZGJnKDMs IGRlYnVnLCAmanBlZy0+djRsMl9kZXYsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAicGxh bmUgJWQgKHZhZGRyPSVwIGRtYV9hZGRyPSV4DQo+ID4gcGF5bG9hZD0lbGQpOiIsDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgcGxhbmVfbm8sIHZhZGRyLCBkbWFfYWRkciwgcGF5bG9hZCk7 DQo+ID4gKyAgICAgICAgICAgICBwcmludF9oZXhfZHVtcChLRVJOX0RFQlVHLCAiIiwgRFVNUF9Q UkVGSVhfT0ZGU0VULA0KPiA+IDMyLCAxLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdmFkZHIsIGxlbiwgZmFsc2UpOw0KPiA+ICsgICAgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIGlubGluZSBzdHJ1Y3QgbXhjX2pwZWdfY3R4ICpteGNfanBlZ19maF90b19jdHgoc3Ry dWN0DQo+ID4gdjRsMl9maCAqZmgpDQo+ID4gK3sNCj4gPiArICAgICByZXR1cm4gY29udGFpbmVy X29mKGZoLCBzdHJ1Y3QgbXhjX2pwZWdfY3R4LCBmaCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyBpbnQgZW51bV9mbXQoc3RydWN0IG14Y19qcGVnX2ZtdCAqbXhjX2Zvcm1hdHMsIGludCBu LA0KPiA+ICsgICAgICAgICAgICAgICAgIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYsIHUzMiB0eXBl KQ0KPiA+ICt7DQo+ID4gKyAgICAgaW50IGksIG51bSA9IDA7DQo+ID4gKw0KPiA+ICsgICAgIGZv ciAoaSA9IDA7IGkgPCBuOyArK2kpIHsNCj4gPiArICAgICAgICAgICAgIGlmIChteGNfZm9ybWF0 c1tpXS5mbGFncyA9PSB0eXBlKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIC8qIGluZGV4 LXRoIGZvcm1hdCBvZiBzZWFyY2hlZCB0eXBlIGZvdW5kID8NCj4gPiAqLw0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICBpZiAobnVtID09IGYtPmluZGV4KQ0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAvKiBDb3JyZWN0 IHR5cGUgYnV0IGhhdmVuJ3QgcmVhY2hlZCBvdXIgaW5kZXgNCj4gPiB5ZXQsDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAqIGp1c3QgaW5jcmVtZW50IHBlci10eXBlIGluZGV4DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAqLw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICArK251bTsN Cj4gPiArICAgICAgICAgICAgIH0NCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIC8qIEZv cm1hdCBub3QgZm91bmQgKi8NCj4gPiArICAgICBpZiAoaSA+PSBuKQ0KPiA+ICsgICAgICAgICAg ICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsgICAgIHN0cnNjcHkoZi0+ZGVzY3JpcHRp b24sIG14Y19mb3JtYXRzW2ldLm5hbWUsIHNpemVvZihmLQ0KPiA+ID5kZXNjcmlwdGlvbikpOw0K PiA+ICsgICAgIGYtPnBpeGVsZm9ybWF0ID0gbXhjX2Zvcm1hdHNbaV0uZm91cmNjOw0KPiA+ICsN Cj4gPiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBt eGNfanBlZ19mbXQgKm14Y19qcGVnX2ZpbmRfZm9ybWF0KHN0cnVjdA0KPiA+IG14Y19qcGVnX2N0 eCAqY3R4LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdTMyIHBpeGVsZm9ybWF0KQ0KPiA+ICt7DQo+ID4gKyAgICAgdW5zaWduZWQgaW50IGs7DQo+ ID4gKw0KPiA+ICsgICAgIGZvciAoayA9IDA7IGsgPCBNWENfSlBFR19OVU1fRk9STUFUUzsgaysr KSB7DQo+ID4gKyAgICAgICAgICAgICBzdHJ1Y3QgbXhjX2pwZWdfZm10ICpmbXQgPSAmbXhjX2Zv cm1hdHNba107DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgaWYgKGZtdC0+Zm91cmNjID09IHBp eGVsZm9ybWF0KQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZm10Ow0KPiA+ICsg ICAgIH0NCj4gPiArICAgICByZXR1cm4gTlVMTDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IGVudW0gbXhjX2pwZWdfaW1hZ2VfZm9ybWF0IG14Y19qcGVnX2ZvdXJjY190b19pbWdmbXQodTMy DQo+ID4gZm91cmNjKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3dpdGNoIChmb3VyY2MpIHsNCj4gPiAr ICAgICBjYXNlIFY0TDJfUElYX0ZNVF9HUkVZOg0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIE1Y Q19KUEVHX0dSQVk7DQo+ID4gKyAgICAgY2FzZSBWNEwyX1BJWF9GTVRfWVVZVjoNCj4gPiArICAg ICAgICAgICAgIHJldHVybiBNWENfSlBFR19ZVVY0MjI7DQo+ID4gKyAgICAgY2FzZSBWNEwyX1BJ WF9GTVRfTlYxMjoNCj4gPiArICAgICAgICAgICAgIHJldHVybiBNWENfSlBFR19ZVVY0MjA7DQo+ ID4gKyAgICAgY2FzZSBWNEwyX1BJWF9GTVRfWVVWMjQ6DQo+ID4gKyAgICAgICAgICAgICByZXR1 cm4gTVhDX0pQRUdfWVVWNDQ0Ow0KPiA+ICsgICAgIGNhc2UgVjRMMl9QSVhfRk1UX1JHQjI0Og0K PiA+ICsgICAgICAgICAgICAgcmV0dXJuIE1YQ19KUEVHX1JHQjsNCj4gPiArICAgICBjYXNlIFY0 TDJfUElYX0ZNVF9BUkdCMzI6DQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gTVhDX0pQRUdfQVJH QjsNCj4gPiArICAgICBkZWZhdWx0Og0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIE1YQ19KUEVH X0lOVkFMSUQ7DQo+ID4gKyAgICAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG14 Y19qcGVnX2ltZ2ZtdF90b19mb3VyY2MoZW51bSBteGNfanBlZ19pbWFnZV9mb3JtYXQNCj4gPiBp bWdmbXQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgKmZvdXJj YykNCj4gPiArew0KPiA+ICsgICAgIHN3aXRjaCAoaW1nZm10KSB7DQo+ID4gKyAgICAgY2FzZSBN WENfSlBFR19HUkFZOg0KPiA+ICsgICAgICAgICAgICAgKmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9H UkVZOw0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4gKyAgICAgY2FzZSBNWENfSlBF R19ZVVY0MjI6DQo+ID4gKyAgICAgICAgICAgICAqZm91cmNjID0gVjRMMl9QSVhfRk1UX1lVWVY7 DQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiArICAgICBjYXNlIE1YQ19KUEVHX1lV VjQyMDoNCj4gPiArICAgICAgICAgICAgICpmb3VyY2MgPSAgVjRMMl9QSVhfRk1UX05WMTI7DQo+ ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiArICAgICBjYXNlIE1YQ19KUEVHX1lVVjQ0 NDoNCj4gPiArICAgICAgICAgICAgICpmb3VyY2MgPSAgVjRMMl9QSVhfRk1UX1lVVjI0Ow0KPiA+ ICsgICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4gKyAgICAgY2FzZSBNWENfSlBFR19SR0I6DQo+ ID4gKyAgICAgICAgICAgICAqZm91cmNjID0gIFY0TDJfUElYX0ZNVF9SR0IyNDsNCj4gPiArICAg ICAgICAgICAgIHJldHVybiAwOw0KPiA+ICsgICAgIGNhc2UgTVhDX0pQRUdfQVJHQjoNCj4gPiAr ICAgICAgICAgICAgICpmb3VyY2MgPSAgVjRMMl9QSVhfRk1UX0FSR0IzMjsNCj4gPiArICAgICAg ICAgICAgIHJldHVybiAwOw0KPiA+ICsgICAgIGRlZmF1bHQ6DQo+ID4gKyAgICAgICAgICAgICBy ZXR1cm4gMTsNCj4gPiArICAgICB9DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3Qg bXhjX2pwZWdfcV9kYXRhICpteGNfanBlZ19nZXRfcV9kYXRhKHN0cnVjdA0KPiA+IG14Y19qcGVn X2N0eCAqY3R4LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBlbnVtIHY0bDJfYnVmX3R5cGUNCj4gPiB0eXBlKQ0KPiA+ICt7DQo+ID4gKyAgICAg aWYgKFY0TDJfVFlQRV9JU19PVVRQVVQodHlwZSkpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4g JmN0eC0+b3V0X3E7DQo+ID4gKyAgICAgcmV0dXJuICZjdHgtPmNhcF9xOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgdm9pZCBteGNfanBlZ19hZGRycyhzdHJ1Y3QgbXhjX2pwZWdfZGVzYyAq ZGVzYywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZiMl9idWZmZXIgKnJh d19idWYsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2YjJfYnVmZmVyICpq cGVnX2J1ZiwgaW50IG9mZnNldCkNCj4gPiArew0KPiA+ICsgICAgIGludCBpbWdfZm10ID0gZGVz Yy0+c3RtX2N0cmwgJiBTVE1fQ1RSTF9JTUFHRV9GT1JNQVRfTUFTSzsNCj4gPiArDQo+ID4gKyAg ICAgZGVzYy0+YnVmX2Jhc2UwID0gdmIyX2RtYV9jb250aWdfcGxhbmVfZG1hX2FkZHIocmF3X2J1 ZiwgMCk7DQo+ID4gKyAgICAgZGVzYy0+YnVmX2Jhc2UxID0gMDsNCj4gPiArICAgICBpZiAoaW1n X2ZtdCA9PSBTVE1fQ1RSTF9JTUFHRV9GT1JNQVQoTVhDX0pQRUdfWVVWNDIwKSkgew0KPiA+ICsg ICAgICAgICAgICAgV0FSTl9PTihyYXdfYnVmLT5udW1fcGxhbmVzIDwgMik7DQo+ID4gKyAgICAg ICAgICAgICBkZXNjLT5idWZfYmFzZTEgPQ0KPiA+IHZiMl9kbWFfY29udGlnX3BsYW5lX2RtYV9h ZGRyKHJhd19idWYsIDEpOw0KPiA+ICsgICAgIH0NCj4gPiArICAgICBkZXNjLT5zdG1fYnVmYmFz ZSA9IHZiMl9kbWFfY29udGlnX3BsYW5lX2RtYV9hZGRyKGpwZWdfYnVmLA0KPiA+IDApICsNCj4g PiArICAgICAgICAgICAgIG9mZnNldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQg bm90aWZ5X2VvcyhzdHJ1Y3QgbXhjX2pwZWdfY3R4ICpjdHgpDQo+ID4gK3sNCj4gPiArICAgICBj b25zdCBzdHJ1Y3QgdjRsMl9ldmVudCBldiA9IHsNCj4gPiArICAgICAgICAgICAgIC50eXBlID0g VjRMMl9FVkVOVF9FT1MNCj4gPiArICAgICB9Ow0KPiA+ICsNCj4gPiArICAgICBkZXZfZGJnKGN0 eC0+bXhjX2pwZWctPmRldiwgIk5vdGlmeSBhcHAgZXZlbnQgRU9TIHJlYWNoZWQiKTsNCj4gPiAr ICAgICB2NGwyX2V2ZW50X3F1ZXVlX2ZoKCZjdHgtPmZoLCAmZXYpOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgdm9pZCBub3RpZnlfc3JjX2NoZyhzdHJ1Y3QgbXhjX2pwZWdfY3R4ICpjdHgp DQo+ID4gK3sNCj4gPiArICAgICBjb25zdCBzdHJ1Y3QgdjRsMl9ldmVudCBldiA9IHsNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgLnR5cGUgPSBWNEwyX0VWRU5UX1NPVVJDRV9DSEFOR0UsDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgIC51LnNyY19jaGFuZ2UuY2hhbmdlcyA9DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIFY0TDJfRVZFTlRfU1JDX0NIX1JFU09MVVRJT04sDQo+ID4gKyAg ICAgICAgICAgICB9Ow0KPiA+ICsNCj4gPiArICAgICBkZXZfZGJnKGN0eC0+bXhjX2pwZWctPmRl diwgIk5vdGlmeSBhcHAgZXZlbnQNCj4gPiBTUkNfQ0hfUkVTT0xVVElPTiIpOw0KPiA+ICsgICAg IHY0bDJfZXZlbnRfcXVldWVfZmgoJmN0eC0+ZmgsICZldik7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyBpbnQgbXhjX2dldF9mcmVlX3Nsb3Qoc3RydWN0IG14Y19qcGVnX3Nsb3RfZGF0YQ0K PiA+IHNsb3RfZGF0YVtdLCBpbnQgbikNCj4gPiArew0KPiA+ICsgICAgIGludCBmcmVlX3Nsb3Qg PSAwOw0KPiA+ICsNCj4gPiArICAgICB3aGlsZSAoc2xvdF9kYXRhW2ZyZWVfc2xvdF0udXNlZCAm JiBmcmVlX3Nsb3QgPCBuKQ0KPiA+ICsgICAgICAgICAgICAgZnJlZV9zbG90Kys7DQo+ID4gKw0K PiA+ICsgICAgIHJldHVybiBmcmVlX3Nsb3Q7IC8qID49biB3aGVuIHRoZXJlIGFyZSBubyBtb3Jl IGZyZWUgc2xvdHMgKi8NCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGJvb2wgbXhjX2pwZWdf YWxsb2Nfc2xvdF9kYXRhKHN0cnVjdCBteGNfanBlZ19kZXYgKmpwZWcsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2xvdCkNCj4gPiArew0KPiA+ ICsgICAgIHN0cnVjdCBteGNfanBlZ19kZXNjICpkZXNjOw0KPiA+ICsgICAgIHN0cnVjdCBteGNf anBlZ19kZXNjICpjZmdfZGVzYzsNCj4gPiArICAgICB2b2lkICpjZmdfc3RtOw0KPiA+ICsNCj4g PiArICAgICBpZiAoanBlZy0+c2xvdF9kYXRhW3Nsb3RdLmRlc2MpDQo+ID4gKyAgICAgICAgICAg ICBnb3RvIHNraXBfYWxsb2M7IC8qIGFscmVhZHkgYWxsb2NhdGVkLCByZXVzZSBpdCAqLw0KPiA+ ICsNCj4gPiArICAgICAvKiBhbGxvY2F0ZSBkZXNjcmlwdG9yIGZvciBkZWNvZGluZy9lbmNvZGlu ZyBwaGFzZSAqLw0KPiA+ICsgICAgIGRlc2MgPSBkbWFfYWxsb2NfY29oZXJlbnQoanBlZy0+ZGV2 LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBteGNf anBlZ19kZXNjKSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZqcGVnLT5z bG90X2RhdGFbc2xvdF0uZGVzY19oYW5kbGUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBHRlBfQVRPTUlDKTsNCj4gPiArICAgICBpZiAoIWRlc2MpDQo+ID4gKyAgICAgICAg ICAgICBnb3RvIGVycjsNCj4gPiArICAgICBqcGVnLT5zbG90X2RhdGFbc2xvdF0uZGVzYyA9IGRl c2M7DQo+ID4gKw0KPiA+ICsgICAgIC8qIGFsbG9jYXRlIGRlc2NyaXB0b3IgZm9yIGNvbmZpZ3Vy YXRpb24gcGhhc2UgKGVuY29kZXIgb25seSkNCj4gPiAqLw0KPiA+ICsgICAgIGNmZ19kZXNjID0g ZG1hX2FsbG9jX2NvaGVyZW50KGpwZWctPmRldiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IG14Y19qcGVnX2Rlc2MpLA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICZqcGVnLQ0KPiA+ID5zbG90X2RhdGFbc2xvdF0u Y2ZnX2Rlc2NfaGFuZGxlLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IEdGUF9BVE9NSUMpOw0KPiA+ICsgICAgIGlmICghY2ZnX2Rlc2MpDQo+ID4gKyAgICAgICAgICAg ICBnb3RvIGVycjsNCj4gPiArICAgICBqcGVnLT5zbG90X2RhdGFbc2xvdF0uY2ZnX2Rlc2MgPSBj ZmdfZGVzYzsNCj4gPiArDQo+ID4gKyAgICAgLyogYWxsb2NhdGUgY29uZmlndXJhdGlvbiBzdHJl YW0gKi8NCj4gPiArICAgICBjZmdfc3RtID0gZG1hX2FsbG9jX2NvaGVyZW50KGpwZWctPmRldiwN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1YQ19KUEVHX01BWF9DRkdf U1RSRUFNLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmpwZWctDQo+ ID4gPnNsb3RfZGF0YVtzbG90XS5jZmdfc3RyZWFtX2hhbmRsZSwNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEdGUF9BVE9NSUMpOw0KPiA+ICsgICAgIGlmICghY2ZnX3N0 bSkNCj4gPiArICAgICAgICAgICAgIGdvdG8gZXJyOw0KPiA+ICsgICAgIGpwZWctPnNsb3RfZGF0 YVtzbG90XS5jZmdfc3RyZWFtX3ZhZGRyID0gY2ZnX3N0bTsNCj4gPiArDQo+ID4gK3NraXBfYWxs b2M6DQo+ID4gKyAgICAganBlZy0+c2xvdF9kYXRhW3Nsb3RdLnVzZWQgPSB0cnVlOw0KPiA+ICsN Cj4gPiArICAgICByZXR1cm4gdHJ1ZTsNCj4gPiArZXJyOg0KPiA+ICsgICAgIGRldl9lcnIoanBl Zy0+ZGV2LCAiQ291bGQgbm90IGFsbG9jYXRlIGRlc2NyaXB0b3JzIGZvciBzbG90DQo+ID4gJWQi LCBzbG90KTsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIGZhbHNlOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgdm9pZCBteGNfanBlZ19mcmVlX3Nsb3RfZGF0YShzdHJ1Y3QgbXhjX2pwZWdf ZGV2ICpqcGVnLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l ZCBpbnQgc2xvdCkNCj4gPiArew0KPiA+ICsgICAgIGlmIChzbG90ID49IE1YQ19NQVhfU0xPVFMp IHsNCj4gPiArICAgICAgICAgICAgIGRldl9lcnIoanBlZy0+ZGV2LCAiSW52YWxpZCBzbG90ICVk LCBub3RoaW5nIHRvDQo+ID4gZnJlZS4iLCBzbG90KTsNCj4gPiArICAgICAgICAgICAgIHJldHVy bjsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIC8qIGZyZWUgZGVzY3JpcHRvciBmb3Ig ZGVjb2RpbmcvZW5jb2RpbmcgcGhhc2UgKi8NCj4gPiArICAgICBkbWFfZnJlZV9jb2hlcmVudChq cGVnLT5kZXYsIHNpemVvZihzdHJ1Y3QgbXhjX2pwZWdfZGVzYyksDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAganBlZy0+c2xvdF9kYXRhW3Nsb3RdLmRlc2MsDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAganBlZy0+c2xvdF9kYXRhW3Nsb3RdLmRlc2NfaGFuZGxlKTsNCj4gPiArDQo+ ID4gKyAgICAgLyogZnJlZSBkZXNjcmlwdG9yIGZvciBlbmNvZGVyIGNvbmZpZ3VyYXRpb24gcGhh c2UgLyBkZWNvZGVyDQo+ID4gREhUICovDQo+ID4gKyAgICAgZG1hX2ZyZWVfY29oZXJlbnQoanBl Zy0+ZGV2LCBzaXplb2Yoc3RydWN0IG14Y19qcGVnX2Rlc2MpLA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgIGpwZWctPnNsb3RfZGF0YVtzbG90XS5jZmdfZGVzYywNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICBqcGVnLT5zbG90X2RhdGFbc2xvdF0uY2ZnX2Rlc2NfaGFuZGxlKTsNCj4g PiArDQo+ID4gKyAgICAgLyogZnJlZSBjb25maWd1cmF0aW9uIHN0cmVhbSAqLw0KPiA+ICsgICAg IGRtYV9mcmVlX2NvaGVyZW50KGpwZWctPmRldiwgTVhDX0pQRUdfTUFYX0NGR19TVFJFQU0sDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAganBlZy0+c2xvdF9kYXRhW3Nsb3RdLmNmZ19zdHJl YW1fdmFkZHIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAganBlZy0+c2xvdF9kYXRhW3Ns b3RdLmNmZ19zdHJlYW1faGFuZGxlKTsNCj4gPiArDQo+ID4gKyAgICAganBlZy0+c2xvdF9kYXRh W3Nsb3RdLnVzZWQgPSBmYWxzZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlycXJldHVy bl90IG14Y19qcGVnX2RlY19pcnEoaW50IGlycSwgdm9pZCAqcHJpdikNCj4gPiArew0KPiA+ICsg ICAgIHN0cnVjdCBteGNfanBlZ19kZXYgKmpwZWcgPSBwcml2Ow0KPiA+ICsgICAgIHN0cnVjdCBt eGNfanBlZ19jdHggKmN0eDsNCj4gPiArICAgICB2b2lkIF9faW9tZW0gKnJlZyA9IGpwZWctPmJh c2VfcmVnOw0KPiA+ICsgICAgIHN0cnVjdCBkZXZpY2UgKmRldiA9IGpwZWctPmRldjsNCj4gPiAr ICAgICBzdHJ1Y3QgdmIyX3Y0bDJfYnVmZmVyICpzcmNfYnVmLCAqZHN0X2J1ZjsNCj4gPiArICAg ICBzdHJ1Y3QgbXhjX2pwZWdfc3JjX2J1ZiAqanBlZ19zcmNfYnVmOw0KPiA+ICsgICAgIGVudW0g dmIyX2J1ZmZlcl9zdGF0ZSBidWZfc3RhdGU7DQo+ID4gKyAgICAgdTMyIGRlY19yZXQsIGNvbV9z dGF0dXM7DQo+ID4gKyAgICAgdW5zaWduZWQgbG9uZyBwYXlsb2FkOw0KPiA+ICsgICAgIHN0cnVj dCBteGNfanBlZ19xX2RhdGEgKnFfZGF0YTsNCj4gPiArICAgICBlbnVtIHY0bDJfYnVmX3R5cGUg Y2FwX3R5cGUgPQ0KPiA+IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRV9NUExBTkU7DQo+ID4g KyAgICAgdW5zaWduZWQgaW50IHNsb3Q7DQo+ID4gKw0KPiA+ICsgICAgIHNwaW5fbG9jaygmanBl Zy0+aHdfbG9jayk7DQo+ID4gKw0KPiA+ICsgICAgIGNvbV9zdGF0dXMgPSByZWFkbChyZWcgKyBD T01fU1RBVFVTKTsNCj4gPiArICAgICBzbG90ID0gQ09NX1NUQVRVU19DVVJfU0xPVChjb21fc3Rh dHVzKTsNCj4gPiArICAgICBkZXZfZGJnKGRldiwgIklycSAlZCBvbiBzbG90ICVkLlxuIiwgaXJx LCBzbG90KTsNCj4gPiArDQo+ID4gKyAgICAgY3R4ID0gdjRsMl9tMm1fZ2V0X2N1cnJfcHJpdihq cGVnLT5tMm1fZGV2KTsNCj4gPiArICAgICBpZiAoIWN0eCkgew0KPiA+ICsgICAgICAgICAgICAg ZGV2X2VycihkZXYsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICJJbnN0YW5jZSByZWxlYXNl ZCBiZWZvcmUgdGhlIGVuZCBvZg0KPiA+IHRyYW5zYWN0aW9uLlxuIik7DQo+ID4gKyAgICAgICAg ICAgICAvKiBzb2Z0IHJlc2V0IG9ubHkgcmVzZXRzIGludGVybmFsIHN0YXRlLCBub3QNCj4gPiBy ZWdpc3RlcnMgKi8NCj4gPiArICAgICAgICAgICAgIG14Y19qcGVnX3N3X3Jlc2V0KHJlZyk7DQo+ ID4gKyAgICAgICAgICAgICAvKiBjbGVhciBhbGwgaW50ZXJydXB0cyAqLw0KPiA+ICsgICAgICAg ICAgICAgd3JpdGVsKDB4RkZGRkZGRkYsIHJlZyArIE1YQ19TTE9UX09GRlNFVChzbG90LA0KPiA+ IFNMT1RfU1RBVFVTKSk7DQo+ID4gKyAgICAgICAgICAgICBnb3RvIGpvYl91bmxvY2s7DQo+ID4g KyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBpZiAoc2xvdCAhPSBjdHgtPnNsb3QpIHsNCj4gPiAr ICAgICAgICAgICAgIC8qIFRPRE8gaW52ZXN0aWdhdGUgd2hlbiBhZGRpbmcgbXVsdGktaW5zdGFu Y2UNCj4gPiBzdXBwb3J0ICovDQo+ID4gKyAgICAgICAgICAgICBkZXZfd2FybihkZXYsICJJUlEg c2xvdCAlZCAhPSBjb250ZXh0IHNsb3QgJWQuXG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgc2xvdCwgY3R4LT5zbG90KTsNCj4gPiArICAgICAgICAgICAgIGdvdG8gam9iX3VubG9jazsN Cj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIGRlY19yZXQgPSByZWFkbChyZWcgKyBNWENf U0xPVF9PRkZTRVQoc2xvdCwgU0xPVF9TVEFUVVMpKTsNCj4gPiArICAgICB3cml0ZWwoZGVjX3Jl dCwgcmVnICsgTVhDX1NMT1RfT0ZGU0VUKHNsb3QsIFNMT1RfU1RBVFVTKSk7IC8qDQo+ID4gdzFj ICovDQo+ID4gKw0KPiA+ICsgICAgIGRzdF9idWYgPSB2NGwyX20ybV9uZXh0X2RzdF9idWYoY3R4 LT5maC5tMm1fY3R4KTsNCj4gPiArICAgICBzcmNfYnVmID0gdjRsMl9tMm1fbmV4dF9zcmNfYnVm KGN0eC0+ZmgubTJtX2N0eCk7DQo+ID4gKyAgICAganBlZ19zcmNfYnVmID0gdmIyX3RvX214Y19i dWYoJnNyY19idWYtPnZiMl9idWYpOw0KPiA+ICsNCj4gPiArICAgICBpZiAoZGVjX3JldCAmIFNM T1RfU1RBVFVTX0VOQ19DT05GSUdfRVJSKSB7DQo+ID4gKyAgICAgICAgICAgICB1MzIgcmV0ID0g cmVhZGwocmVnICsgQ0FTVF9TVEFUVVMxMik7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgZGV2 X2VycihkZXYsICJFbmNvZGVyL2RlY29kZXIgZXJyb3IsIHN0YXR1cz0weCUwOHgiLA0KPiA+IHJl dCk7DQo+ID4gKyAgICAgICAgICAgICBteGNfanBlZ19zd19yZXNldChyZWcpOw0KPiA+ICsgICAg ICAgICAgICAgYnVmX3N0YXRlID0gVkIyX0JVRl9TVEFURV9FUlJPUjsNCj4gPiArICAgICAgICAg ICAgIGdvdG8gYnVmZmVyc19kb25lOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgaWYg KCEoZGVjX3JldCAmIFNMT1RfU1RBVFVTX0ZSTURPTkUpKQ0KPiA+ICsgICAgICAgICAgICAgZ290 byBqb2JfdW5sb2NrOw0KPiA+ICsNCj4gPiArICAgICBpZiAoanBlZy0+bW9kZSA9PSBNWENfSlBF R19FTkNPREUgJiYNCj4gPiArICAgICAgICAgY3R4LT5lbmNfc3RhdGUgPT0gTVhDX0pQRUdfRU5D X0NPTkYpIHsNCj4gPiArICAgICAgICAgICAgIGN0eC0+ZW5jX3N0YXRlID0gTVhDX0pQRUdfRU5D T0RJTkc7DQo+ID4gKyAgICAgICAgICAgICBkZXZfZGJnKGRldiwgIkVuY29kZXIgY29uZmlnIGZp bmlzaGVkLiBTdGFydA0KPiA+IGVuY29kaW5nLi4uXG4iKTsNCj4gPiArICAgICAgICAgICAgIG14 Y19qcGVnX2VuY19tb2RlX2dvKGRldiwgcmVnKTsNCj4gPiArICAgICAgICAgICAgIGdvdG8gam9i X3VubG9jazsNCj4gPiArICAgICB9DQo+ID4gKyAgICAgaWYgKGpwZWctPm1vZGUgPT0gTVhDX0pQ RUdfREVDT0RFICYmIGpwZWdfc3JjX2J1Zi0NCj4gPiA+ZGh0X25lZWRlZCkgew0KPiA+ICsgICAg ICAgICAgICAganBlZ19zcmNfYnVmLT5kaHRfbmVlZGVkID0gZmFsc2U7DQo+ID4gKyAgICAgICAg ICAgICBkZXZfZGJnKGRldiwgIkRlY29kZXIgREhUIGNmZyBmaW5pc2hlZC4gU3RhcnQNCj4gPiBk ZWNvZGluZy4uLlxuIik7DQo+ID4gKyAgICAgICAgICAgICBnb3RvIGpvYl91bmxvY2s7DQo+ID4g KyAgICAgfQ0KPiA+ICsgICAgIGlmIChqcGVnLT5tb2RlID09IE1YQ19KUEVHX0VOQ09ERSkgew0K PiA+ICsgICAgICAgICAgICAgcGF5bG9hZCA9IHJlYWRsKHJlZyArIE1YQ19TTE9UX09GRlNFVChz bG90LA0KPiA+IFNMT1RfQlVGX1BUUikpOw0KPiA+ICsgICAgICAgICAgICAgdmIyX3NldF9wbGFu ZV9wYXlsb2FkKCZkc3RfYnVmLT52YjJfYnVmLCAwLCBwYXlsb2FkKTsNCj4gPiArICAgICAgICAg ICAgIGRldl9kYmcoZGV2LCAiRW5jb2RpbmcgZmluaXNoZWQsIHBheWxvYWQgc2l6ZToNCj4gPiAl bGRcbiIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHBheWxvYWQpOw0KPiA+ICsgICAgIH0g ZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICBxX2RhdGEgPSBteGNfanBlZ19nZXRfcV9kYXRhKGN0 eCwgY2FwX3R5cGUpOw0KPiA+ICsgICAgICAgICAgICAgcGF5bG9hZCA9IHFfZGF0YS0+c2l6ZWlt YWdlWzBdOw0KPiA+ICsgICAgICAgICAgICAgdmIyX3NldF9wbGFuZV9wYXlsb2FkKCZkc3RfYnVm LT52YjJfYnVmLCAwLCBwYXlsb2FkKTsNCj4gPiArICAgICAgICAgICAgIHZiMl9zZXRfcGxhbmVf cGF5bG9hZCgmZHN0X2J1Zi0+dmIyX2J1ZiwgMSwgMCk7DQo+ID4gKyAgICAgICAgICAgICBpZiAo cV9kYXRhLT5mbXQtPmNvbHBsYW5lcyA9PSAyKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg IHBheWxvYWQgPSBxX2RhdGEtPnNpemVpbWFnZVsxXTsNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgdmIyX3NldF9wbGFuZV9wYXlsb2FkKCZkc3RfYnVmLT52YjJfYnVmLCAxLA0KPiA+IHBheWxv YWQpOw0KPiA+ICsgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgICAgZGV2X2RiZyhkZXYs ICJEZWNvZGluZyBmaW5pc2hlZCwgcGF5bG9hZCBzaXplOiAlbGQgKw0KPiA+ICVsZFxuIiwNCj4g PiArICAgICAgICAgICAgICAgICAgICAgdmIyX2dldF9wbGFuZV9wYXlsb2FkKCZkc3RfYnVmLT52 YjJfYnVmLCAwKSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgdmIyX2dldF9wbGFuZV9wYXls b2FkKCZkc3RfYnVmLT52YjJfYnVmLCAxKSk7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAg ICAvKiBzaG9ydCBwcmV2aWV3IG9mIHRoZSByZXN1bHRzICovDQo+ID4gKyAgICAgZGV2X2RiZyhk ZXYsICJzcmNfYnVmIHByZXZpZXc6ICIpOw0KPiA+ICsgICAgIHByaW50X214Y19idWYoanBlZywg JnNyY19idWYtPnZiMl9idWYsIDMyKTsNCj4gPiArICAgICBkZXZfZGJnKGRldiwgImRzdF9idWYg cHJldmlldzogIik7DQo+ID4gKyAgICAgcHJpbnRfbXhjX2J1ZihqcGVnLCAmZHN0X2J1Zi0+dmIy X2J1ZiwgMzIpOw0KPiA+ICsgICAgIGJ1Zl9zdGF0ZSA9IFZCMl9CVUZfU1RBVEVfRE9ORTsNCj4g PiArDQo+ID4gK2J1ZmZlcnNfZG9uZToNCj4gPiArICAgICBqcGVnLT5zbG90X2RhdGFbc2xvdF0u dXNlZCA9IGZhbHNlOyAvKiB1bnVzZWQsIGJ1dCBkb24ndCBmcmVlDQo+ID4gKi8NCj4gPiArICAg ICB2NGwyX20ybV9zcmNfYnVmX3JlbW92ZShjdHgtPmZoLm0ybV9jdHgpOw0KPiA+ICsgICAgIHY0 bDJfbTJtX2RzdF9idWZfcmVtb3ZlKGN0eC0+ZmgubTJtX2N0eCk7DQo+ID4gKyAgICAgdjRsMl9t Mm1fYnVmX2RvbmUoc3JjX2J1ZiwgYnVmX3N0YXRlKTsNCj4gPiArICAgICB2NGwyX20ybV9idWZf ZG9uZShkc3RfYnVmLCBidWZfc3RhdGUpOw0KPiA+ICsgICAgIHNwaW5fdW5sb2NrKCZqcGVnLT5o d19sb2NrKTsNCj4gPiArICAgICB2NGwyX20ybV9qb2JfZmluaXNoKGpwZWctPm0ybV9kZXYsIGN0 eC0+ZmgubTJtX2N0eCk7DQo+ID4gKyAgICAgcmV0dXJuIElSUV9IQU5ETEVEOw0KPiA+ICtqb2Jf dW5sb2NrOg0KPiA+ICsgICAgIHNwaW5fdW5sb2NrKCZqcGVnLT5od19sb2NrKTsNCj4gPiArICAg ICByZXR1cm4gSVJRX0hBTkRMRUQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbXhj X2pwZWdfZml4dXBfc29mKHN0cnVjdCBteGNfanBlZ19zb2YgKnNvZiwNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgdTMyIGZvdXJjYywNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgdTE2IHcsIHUxNiBoKQ0KPiA+ICt7DQo+ID4gKyAgICAgaW50IHNvZl9sZW5ndGg7DQo+ ID4gKw0KPiA+ICsgICAgIHNvZi0+cHJlY2lzaW9uID0gODsgLyogVE9ETyBhbGxvdyA4LzEyIGJp dCBwcmVjaXNpb24qLw0KPiA+ICsgICAgIHNvZi0+aGVpZ2h0ID0gaDsNCj4gPiArICAgICBfYnN3 YXAxNigmc29mLT5oZWlnaHQpOw0KPiA+ICsgICAgIHNvZi0+d2lkdGggPSB3Ow0KPiA+ICsgICAg IF9ic3dhcDE2KCZzb2YtPndpZHRoKTsNCj4gPiArDQo+ID4gKyAgICAgc3dpdGNoIChmb3VyY2Mp IHsNCj4gPiArICAgICBjYXNlIFY0TDJfUElYX0ZNVF9OVjEyOg0KPiA+ICsgICAgICAgICAgICAg c29mLT5jb21wb25lbnRzX25vID0gMzsNCj4gPiArICAgICAgICAgICAgIHNvZi0+Y29tcFswXS52 ID0gMHgyOw0KPiA+ICsgICAgICAgICAgICAgc29mLT5jb21wWzBdLmggPSAweDI7DQo+ID4gKyAg ICAgICAgICAgICBicmVhazsNCj4gPiArICAgICBjYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOg0KPiA+ ICsgICAgICAgICAgICAgc29mLT5jb21wb25lbnRzX25vID0gMzsNCj4gPiArICAgICAgICAgICAg IHNvZi0+Y29tcFswXS52ID0gMHgxOw0KPiA+ICsgICAgICAgICAgICAgc29mLT5jb21wWzBdLmgg PSAweDI7DQo+ID4gKyAgICAgICAgICAgICBicmVhazsNCj4gPiArICAgICBjYXNlIFY0TDJfUElY X0ZNVF9ZVVYyNDoNCj4gPiArICAgICBjYXNlIFY0TDJfUElYX0ZNVF9SR0IyNDoNCj4gPiArICAg ICBkZWZhdWx0Og0KPiA+ICsgICAgICAgICAgICAgc29mLT5jb21wb25lbnRzX25vID0gMzsNCj4g PiArICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgIGNhc2UgVjRMMl9QSVhfRk1UX0FSR0Iz MjoNCj4gPiArICAgICAgICAgICAgIHNvZi0+Y29tcG9uZW50c19ubyA9IDQ7DQo+ID4gKyAgICAg ICAgICAgICBicmVhazsNCj4gPiArICAgICBjYXNlIFY0TDJfUElYX0ZNVF9HUkVZOg0KPiA+ICsg ICAgICAgICAgICAgc29mLT5jb21wb25lbnRzX25vID0gMTsNCj4gPiArICAgICAgICAgICAgIGJy ZWFrOw0KPiA+ICsgICAgIH0NCj4gPiArICAgICBzb2ZfbGVuZ3RoID0gOCArIDMgKiBzb2YtPmNv bXBvbmVudHNfbm87DQo+ID4gKyAgICAgc29mLT5sZW5ndGggPSBzb2ZfbGVuZ3RoOw0KPiA+ICsg ICAgIF9ic3dhcDE2KCZzb2YtPmxlbmd0aCk7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiBzb2Zf bGVuZ3RoOyAvKiBub3Qgc3dhcGVkICovDQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQg bXhjX2pwZWdfZml4dXBfc29zKHN0cnVjdCBteGNfanBlZ19zb3MgKnNvcywNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgdTMyIGZvdXJjYykNCj4gPiArew0KPiA+ICsgICAgIGludCBz b3NfbGVuZ3RoOw0KPiA+ICsgICAgIHU4ICpzb2ZfdTggPSAodTggKilzb3M7DQo+ID4gKw0KPiA+ ICsgICAgIHN3aXRjaCAoZm91cmNjKSB7DQo+ID4gKyAgICAgY2FzZSBWNEwyX1BJWF9GTVRfTlYx MjoNCj4gPiArICAgICAgICAgICAgIHNvcy0+Y29tcG9uZW50c19ubyA9IDM7DQo+ID4gKyAgICAg ICAgICAgICBicmVhazsNCj4gPiArICAgICBjYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOg0KPiA+ICsg ICAgICAgICAgICAgc29zLT5jb21wb25lbnRzX25vID0gMzsNCj4gPiArICAgICAgICAgICAgIGJy ZWFrOw0KPiA+ICsgICAgIGNhc2UgVjRMMl9QSVhfRk1UX1lVVjI0Og0KPiA+ICsgICAgIGNhc2Ug VjRMMl9QSVhfRk1UX1JHQjI0Og0KPiA+ICsgICAgIGRlZmF1bHQ6DQo+ID4gKyAgICAgICAgICAg ICBzb3MtPmNvbXBvbmVudHNfbm8gPSAzOw0KPiA+ICsgICAgICAgICAgICAgYnJlYWs7DQo+ID4g KyAgICAgY2FzZSBWNEwyX1BJWF9GTVRfQVJHQjMyOg0KPiA+ICsgICAgICAgICAgICAgc29zLT5j b21wb25lbnRzX25vID0gNDsNCj4gPiArICAgICAgICAgICAgIGJyZWFrOw0KPiA+ICsgICAgIGNh c2UgVjRMMl9QSVhfRk1UX0dSRVk6DQo+ID4gKyAgICAgICAgICAgICBzb3MtPmNvbXBvbmVudHNf bm8gPSAxOw0KPiA+ICsgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgfQ0KPiA+ICsgICAg IHNvc19sZW5ndGggPSA2ICsgMiAqIHNvcy0+Y29tcG9uZW50c19ubzsNCj4gPiArICAgICBzb3Mt Pmxlbmd0aCA9IHNvc19sZW5ndGg7DQo+ID4gKyAgICAgX2Jzd2FwMTYoJnNvcy0+bGVuZ3RoKTsN Cj4gPiArDQo+ID4gKyAgICAgLyogU09TIGlnbm9yYWJsZSBieXRlcywgbm90IHNvIGlnbm9yYWJs ZSBhZnRlciBhbGwgKi8NCj4gPiArICAgICBzb2ZfdThbc29zX2xlbmd0aCAtIDFdID0gMHgwOw0K PiA+ICsgICAgIHNvZl91OFtzb3NfbGVuZ3RoIC0gMl0gPSAweDNmOw0KPiA+ICsgICAgIHNvZl91 OFtzb3NfbGVuZ3RoIC0gM10gPSAweDA7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiBzb3NfbGVu Z3RoOyAvKiBub3Qgc3dhcGVkICovDQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB1bnNpZ25l ZCBpbnQgbXhjX2pwZWdfc2V0dXBfY2ZnX3N0cmVhbSh2b2lkDQo+ID4gKmNmZ19zdHJlYW1fdmFk ZHIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIg Zm91cmNjLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dTE2IHcsIHUxNiBoKQ0KPiA+ICt7DQo+ID4gKyAgICAgdW5zaWduZWQgaW50IG9mZnNldCA9IDA7 DQo+ID4gKyAgICAgdTggKmNmZyA9ICh1OCAqKWNmZ19zdHJlYW1fdmFkZHI7DQo+ID4gKyAgICAg c3RydWN0IG14Y19qcGVnX3NvZiAqc29mOw0KPiA+ICsgICAgIHN0cnVjdCBteGNfanBlZ19zb3Mg KnNvczsNCj4gPiArDQo+ID4gKyAgICAgbWVtY3B5KGNmZyArIG9mZnNldCwganBlZ19zb2ksIEFS UkFZX1NJWkUoanBlZ19zb2kpKTsNCj4gPiArICAgICBvZmZzZXQgKz0gQVJSQVlfU0laRShqcGVn X3NvaSk7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChmb3VyY2MgPT0gVjRMMl9QSVhfRk1UX1JHQjI0 IHx8DQo+ID4gKyAgICAgICAgIGZvdXJjYyA9PSBWNEwyX1BJWF9GTVRfQVJHQjMyKSB7DQo+ID4g KyAgICAgICAgICAgICBtZW1jcHkoY2ZnICsgb2Zmc2V0LCBqcGVnX2FwcDE0LCBzaXplb2YoanBl Z19hcHAxNCkpOw0KPiA+ICsgICAgICAgICAgICAgb2Zmc2V0ICs9IHNpemVvZihqcGVnX2FwcDE0 KTsNCj4gPiArICAgICB9IGVsc2Ugew0KPiA+ICsgICAgICAgICAgICAgbWVtY3B5KGNmZyArIG9m ZnNldCwganBlZ19hcHAwLCBzaXplb2YoanBlZ19hcHAwKSk7DQo+ID4gKyAgICAgICAgICAgICBv ZmZzZXQgKz0gc2l6ZW9mKGpwZWdfYXBwMCk7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAg ICBtZW1jcHkoY2ZnICsgb2Zmc2V0LCBqcGVnX2RxdCwgc2l6ZW9mKGpwZWdfZHF0KSk7DQo+ID4g KyAgICAgb2Zmc2V0ICs9IHNpemVvZihqcGVnX2RxdCk7DQo+ID4gKw0KPiA+ICsgICAgIG1lbWNw eShjZmcgKyBvZmZzZXQsIGpwZWdfc29mX21heGltYWwsDQo+ID4gc2l6ZW9mKGpwZWdfc29mX21h eGltYWwpKTsNCj4gPiArICAgICBvZmZzZXQgKz0gMjsgLyogc2tpcCBtYXJrZXIgSUQgKi8NCj4g PiArICAgICBzb2YgPSAoc3RydWN0IG14Y19qcGVnX3NvZiAqKShjZmcgKyBvZmZzZXQpOw0KPiA+ ICsgICAgIG9mZnNldCArPSBteGNfanBlZ19maXh1cF9zb2Yoc29mLCBmb3VyY2MsIHcsIGgpOw0K PiA+ICsNCj4gPiArICAgICBtZW1jcHkoY2ZnICsgb2Zmc2V0LCBqcGVnX2RodCwgc2l6ZW9mKGpw ZWdfZGh0KSk7DQo+ID4gKyAgICAgb2Zmc2V0ICs9IHNpemVvZihqcGVnX2RodCk7DQo+ID4gKw0K PiA+ICsgICAgIG1lbWNweShjZmcgKyBvZmZzZXQsIGpwZWdfZHJpLCBzaXplb2YoanBlZ19kcmkp KTsNCj4gPiArICAgICBvZmZzZXQgKz0gc2l6ZW9mKGpwZWdfZHJpKTsNCj4gPiArDQo+ID4gKyAg ICAgbWVtY3B5KGNmZyArIG9mZnNldCwganBlZ19zb3NfbWF4aW1hbCwNCj4gPiBzaXplb2YoanBl Z19zb3NfbWF4aW1hbCkpOw0KPiA+ICsgICAgIG9mZnNldCArPSAyOyAvKiBza2lwIG1hcmtlciBJ RCAqLw0KPiA+ICsgICAgIHNvcyA9IChzdHJ1Y3QgbXhjX2pwZWdfc29zICopKGNmZyArIG9mZnNl dCk7DQo+ID4gKyAgICAgb2Zmc2V0ICs9IG14Y19qcGVnX2ZpeHVwX3Nvcyhzb3MsIGZvdXJjYyk7 DQo+ID4gKw0KPiA+ICsgICAgIG1lbWNweShjZmcgKyBvZmZzZXQsIGpwZWdfZW9pLCBzaXplb2Yo anBlZ19lb2kpKTsNCj4gPiArICAgICBvZmZzZXQgKz0gc2l6ZW9mKGpwZWdfZW9pKTsNCj4gPiAr DQo+ID4gKyAgICAgcmV0dXJuIG9mZnNldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZv aWQgbXhjX2pwZWdfY29uZmlnX2RlY19kZXNjKHN0cnVjdCB2YjJfYnVmZmVyICpvdXRfYnVmLA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG14Y19qcGVnX2N0 eCAqY3R4LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZi Ml9idWZmZXIgKnNyY19idWYsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgdmIyX2J1ZmZlciAqZHN0X2J1ZikNCj4gPiArew0KPiA+ICsgICAgIGVudW0gdjRs Ml9idWZfdHlwZSBjYXBfdHlwZSA9DQo+ID4gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFX01Q TEFORTsNCj4gPiArICAgICBzdHJ1Y3QgbXhjX2pwZWdfcV9kYXRhICpxX2RhdGFfY2FwOw0KPiA+ ICsgICAgIGVudW0gbXhjX2pwZWdfaW1hZ2VfZm9ybWF0IGltZ19mbXQ7DQo+ID4gKyAgICAgc3Ry dWN0IG14Y19qcGVnX2RldiAqanBlZyA9IGN0eC0+bXhjX2pwZWc7DQo+ID4gKyAgICAgdm9pZCBf X2lvbWVtICpyZWcgPSBqcGVnLT5iYXNlX3JlZzsNCj4gPiArICAgICB1bnNpZ25lZCBpbnQgc2xv dCA9IGN0eC0+c2xvdDsNCj4gPiArICAgICBzdHJ1Y3QgbXhjX2pwZWdfZGVzYyAqZGVzYyA9IGpw ZWctPnNsb3RfZGF0YVtzbG90XS5kZXNjOw0KPiA+ICsgICAgIHN0cnVjdCBteGNfanBlZ19kZXNj ICpjZmdfZGVzYyA9IGpwZWctDQo+ID4gPnNsb3RfZGF0YVtzbG90XS5jZmdfZGVzYzsNCj4gPiAr ICAgICBkbWFfYWRkcl90IGRlc2NfaGFuZGxlID0ganBlZy0+c2xvdF9kYXRhW3Nsb3RdLmRlc2Nf aGFuZGxlOw0KPiA+ICsgICAgIGRtYV9hZGRyX3QgY2ZnX2Rlc2NfaGFuZGxlID0ganBlZy0NCj4g PiA+c2xvdF9kYXRhW3Nsb3RdLmNmZ19kZXNjX2hhbmRsZTsNCj4gPiArICAgICBkbWFfYWRkcl90 IGNmZ19zdHJlYW1faGFuZGxlID0ganBlZy0NCj4gPiA+c2xvdF9kYXRhW3Nsb3RdLmNmZ19zdHJl YW1faGFuZGxlOw0KPiA+ICsgICAgIHVuc2lnbmVkIGludCAqY2ZnX3NpemUgPSAmanBlZy0NCj4g PiA+c2xvdF9kYXRhW3Nsb3RdLmNmZ19zdHJlYW1fc2l6ZTsNCj4gPiArICAgICB2b2lkICpjZmdf c3RyZWFtX3ZhZGRyID0ganBlZy0NCj4gPiA+c2xvdF9kYXRhW3Nsb3RdLmNmZ19zdHJlYW1fdmFk ZHI7DQo+ID4gKyAgICAgc3RydWN0IG14Y19qcGVnX3NyY19idWYgKmpwZWdfc3JjX2J1ZjsNCj4g PiArDQo+ID4gKyAgICAganBlZ19zcmNfYnVmID0gdmIyX3RvX214Y19idWYoc3JjX2J1Zik7DQo+ ID4gKw0KPiA+ICsgICAgIC8qIHNldHVwIHRoZSBkZWNvZGluZyBkZXNjcmlwdG9yICovDQo+ID4g KyAgICAgZGVzYy0+bmV4dF9kZXNjcHRfcHRyID0gMDsgLyogZW5kIG9mIGNoYWluICovDQo+ID4g KyAgICAgcV9kYXRhX2NhcCA9IG14Y19qcGVnX2dldF9xX2RhdGEoY3R4LCBjYXBfdHlwZSk7DQo+ ID4gKyAgICAgZGVzYy0+aW1nc2l6ZSA9IHFfZGF0YV9jYXAtPndfYWRqdXN0ZWQgPDwgMTYgfCBx X2RhdGFfY2FwLQ0KPiA+ID5oX2FkanVzdGVkOw0KPiA+ICsgICAgIGltZ19mbXQgPSBteGNfanBl Z19mb3VyY2NfdG9faW1nZm10KHFfZGF0YV9jYXAtPmZtdC0+Zm91cmNjKTsNCj4gPiArICAgICBk ZXNjLT5zdG1fY3RybCAmPSB+U1RNX0NUUkxfSU1BR0VfRk9STUFUKDB4Rik7IC8qIGNsZWFyIGlt YWdlDQo+ID4gZm9ybWF0ICovDQo+ID4gKyAgICAgZGVzYy0+c3RtX2N0cmwgfD0gU1RNX0NUUkxf SU1BR0VfRk9STUFUKGltZ19mbXQpOw0KPiA+ICsgICAgIGRlc2MtPmxpbmVfcGl0Y2ggPSBxX2Rh dGFfY2FwLT5ieXRlc3BlcmxpbmVbMF07DQo+ID4gKyAgICAgbXhjX2pwZWdfYWRkcnMoZGVzYywg ZHN0X2J1Ziwgc3JjX2J1ZiwgMCk7DQo+ID4gKyAgICAgbXhjX2pwZWdfc2V0X2J1ZnNpemUoZGVz YywgQUxJR04odmIyX3BsYW5lX3NpemUoc3JjX2J1ZiwgMCksDQo+ID4gMTAyNCkpOw0KPiA+ICsg ICAgIHByaW50X2Rlc2NyaXB0b3JfaW5mbyhqcGVnLT5kZXYsIGRlc2MpOw0KPiA+ICsNCj4gPiAr ICAgICBpZiAoIWpwZWdfc3JjX2J1Zi0+ZGh0X25lZWRlZCkgew0KPiA+ICsgICAgICAgICAgICAg LyogdmFsaWRhdGUgdGhlIGRlY29kaW5nIGRlc2NyaXB0b3IgKi8NCj4gPiArICAgICAgICAgICAg IG14Y19qcGVnX3NldF9kZXNjKGRlc2NfaGFuZGxlLCByZWcsIHNsb3QpOw0KPiA+ICsgICAgICAg ICAgICAgcmV0dXJuOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgLyoNCj4gPiArICAg ICAgKiBpZiBhIGRlZmF1bHQgaHVmZm1hbiB0YWJsZSBpcyBuZWVkZWQsIHVzZSB0aGUgY29uZmln DQo+ID4gZGVzY3JpcHRvciB0bw0KPiA+ICsgICAgICAqIGluamVjdCBhIERIVCwgYnkgY2hhaW5p bmcgaXQgYmVmb3JlIHRoZSBkZWNvZGluZw0KPiA+IGRlc2NyaXB0b3INCj4gPiArICAgICAgKi8N Cj4gPiArICAgICAqY2ZnX3NpemUgPSBteGNfanBlZ19zZXR1cF9jZmdfc3RyZWFtKGNmZ19zdHJl YW1fdmFkZHIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBWNEwyX1BJWF9GTVRfWVVZViwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIE1YQ19KUEVHX01JTl9XSURUSCwNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE1YQ19KUEVHX01JTl9IRUlHSFQpOw0KPiA+ICsgICAg IGNmZ19kZXNjLT5uZXh0X2Rlc2NwdF9wdHIgPSBkZXNjX2hhbmRsZSB8IE1YQ19OWFRfREVTQ1BU X0VOOw0KPiA+ICsgICAgIGNmZ19kZXNjLT5idWZfYmFzZTAgPSB2YjJfZG1hX2NvbnRpZ19wbGFu ZV9kbWFfYWRkcihkc3RfYnVmLA0KPiA+IDApOw0KPiA+ICsgICAgIGNmZ19kZXNjLT5idWZfYmFz ZTEgPSAwOw0KPiA+ICsgICAgIGNmZ19kZXNjLT5pbWdzaXplID0gTVhDX0pQRUdfTUlOX1dJRFRI IDw8IDE2Ow0KPiA+ICsgICAgIGNmZ19kZXNjLT5pbWdzaXplIHw9IE1YQ19KUEVHX01JTl9IRUlH SFQ7DQo+ID4gKyAgICAgY2ZnX2Rlc2MtPmxpbmVfcGl0Y2ggPSBNWENfSlBFR19NSU5fV0lEVEgg KiAyOw0KPiA+ICsgICAgIGNmZ19kZXNjLT5zdG1fY3RybCA9IFNUTV9DVFJMX0lNQUdFX0ZPUk1B VChNWENfSlBFR19ZVVY0MjIpOw0KPiA+ICsgICAgIGNmZ19kZXNjLT5zdG1fYnVmYmFzZSA9IGNm Z19zdHJlYW1faGFuZGxlOw0KPiA+ICsgICAgIGNmZ19kZXNjLT5zdG1fYnVmc2l6ZSA9IEFMSUdO KCpjZmdfc2l6ZSwgMTAyNCk7DQo+ID4gKyAgICAgcHJpbnRfZGVzY3JpcHRvcl9pbmZvKGpwZWct PmRldiwgY2ZnX2Rlc2MpOw0KPiA+ICsNCj4gPiArICAgICAvKiB2YWxpZGF0ZSB0aGUgY29uZmln dXJhdGlvbiBkZXNjcmlwdG9yICovDQo+ID4gKyAgICAgbXhjX2pwZWdfc2V0X2Rlc2MoY2ZnX2Rl c2NfaGFuZGxlLCByZWcsIHNsb3QpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBt eGNfanBlZ19jb25maWdfZW5jX2Rlc2Moc3RydWN0IHZiMl9idWZmZXIgKm91dF9idWYsDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbXhjX2pwZWdfY3R4ICpj dHgsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmIyX2J1 ZmZlciAqc3JjX2J1ZiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCB2YjJfYnVmZmVyICpkc3RfYnVmKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IG14Y19q cGVnX2RldiAqanBlZyA9IGN0eC0+bXhjX2pwZWc7DQo+ID4gKyAgICAgdm9pZCBfX2lvbWVtICpy ZWcgPSBqcGVnLT5iYXNlX3JlZzsNCj4gPiArICAgICB1bnNpZ25lZCBpbnQgc2xvdCA9IGN0eC0+ c2xvdDsNCj4gPiArICAgICBzdHJ1Y3QgbXhjX2pwZWdfZGVzYyAqZGVzYyA9IGpwZWctPnNsb3Rf ZGF0YVtzbG90XS5kZXNjOw0KPiA+ICsgICAgIHN0cnVjdCBteGNfanBlZ19kZXNjICpjZmdfZGVz YyA9IGpwZWctDQo+ID4gPnNsb3RfZGF0YVtzbG90XS5jZmdfZGVzYzsNCj4gPiArICAgICBkbWFf YWRkcl90IGRlc2NfaGFuZGxlID0ganBlZy0+c2xvdF9kYXRhW3Nsb3RdLmRlc2NfaGFuZGxlOw0K PiA+ICsgICAgIGRtYV9hZGRyX3QgY2ZnX2Rlc2NfaGFuZGxlID0ganBlZy0NCj4gPiA+c2xvdF9k YXRhW3Nsb3RdLmNmZ19kZXNjX2hhbmRsZTsNCj4gPiArICAgICB2b2lkICpjZmdfc3RyZWFtX3Zh ZGRyID0ganBlZy0NCj4gPiA+c2xvdF9kYXRhW3Nsb3RdLmNmZ19zdHJlYW1fdmFkZHI7DQo+ID4g KyAgICAgc3RydWN0IG14Y19qcGVnX3FfZGF0YSAqcV9kYXRhOw0KPiA+ICsgICAgIGVudW0gbXhj X2pwZWdfaW1hZ2VfZm9ybWF0IGltZ19mbXQ7DQo+ID4gKyAgICAgaW50IHcsIGg7DQo+ID4gKw0K PiA+ICsgICAgIHFfZGF0YSA9IG14Y19qcGVnX2dldF9xX2RhdGEoY3R4LCBzcmNfYnVmLT52YjJf cXVldWUtPnR5cGUpOw0KPiA+ICsNCj4gPiArICAgICBqcGVnLT5zbG90X2RhdGFbc2xvdF0uY2Zn X3N0cmVhbV9zaXplID0NCj4gPiArICAgICAgICAgICAgICAgICAgICAgbXhjX2pwZWdfc2V0dXBf Y2ZnX3N0cmVhbShjZmdfc3RyZWFtX3ZhZGRyLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHFfZGF0YS0+Zm10LQ0KPiA+ID5mb3VyY2MsDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcV9kYXRhLT53 X2FkanVzdGVkLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHFfZGF0YS0NCj4gPiA+aF9hZGp1c3RlZCk7DQo+ID4gKw0KPiA+ICsgICAgIC8qIGNo YWluIHRoZSBjb25maWcgZGVzY3JpcHRvciB3aXRoIHRoZSBlbmNvZGluZyBkZXNjcmlwdG9yDQo+ ID4gKi8NCj4gPiArICAgICBjZmdfZGVzYy0+bmV4dF9kZXNjcHRfcHRyID0gZGVzY19oYW5kbGUg fCBNWENfTlhUX0RFU0NQVF9FTjsNCj4gPiArDQo+ID4gKyAgICAgY2ZnX2Rlc2MtPmJ1Zl9iYXNl MCA9IGpwZWctDQo+ID4gPnNsb3RfZGF0YVtzbG90XS5jZmdfc3RyZWFtX2hhbmRsZTsNCj4gPiAr ICAgICBjZmdfZGVzYy0+YnVmX2Jhc2UxID0gMDsNCj4gPiArICAgICBjZmdfZGVzYy0+bGluZV9w aXRjaCA9IDA7DQo+ID4gKyAgICAgY2ZnX2Rlc2MtPnN0bV9idWZiYXNlID0gMDsgLyogbm8gb3V0 cHV0IGV4cGVjdGVkICovDQo+ID4gKyAgICAgY2ZnX2Rlc2MtPnN0bV9idWZzaXplID0gMHgwOw0K PiA+ICsgICAgIGNmZ19kZXNjLT5pbWdzaXplID0gMDsNCj4gPiArICAgICBjZmdfZGVzYy0+c3Rt X2N0cmwgPSBTVE1fQ1RSTF9DT05GSUdfTU9EKDEpOw0KPiA+ICsNCj4gPiArICAgICBkZXNjLT5u ZXh0X2Rlc2NwdF9wdHIgPSAwOyAvKiBlbmQgb2YgY2hhaW4gKi8NCj4gPiArDQo+ID4gKyAgICAg LyogdXNlIGFkanVzdGVkIHJlc29sdXRpb24gZm9yIENBU1QgSVAgam9iICovDQo+ID4gKyAgICAg dyA9IHFfZGF0YS0+d19hZGp1c3RlZDsNCj4gPiArICAgICBoID0gcV9kYXRhLT5oX2FkanVzdGVk Ow0KPiA+ICsgICAgIG14Y19qcGVnX3NldF9yZXMoZGVzYywgdywgaCk7DQo+ID4gKyAgICAgbXhj X2pwZWdfc2V0X2xpbmVfcGl0Y2goZGVzYywgdyAqIChxX2RhdGEtPmZtdC0+ZGVwdGggLyA4KSk7 DQo+ID4gKyAgICAgbXhjX2pwZWdfc2V0X2J1ZnNpemUoZGVzYywgZGVzYy0+bGluZV9waXRjaCAq IGgpOw0KPiA+ICsgICAgIGltZ19mbXQgPSBteGNfanBlZ19mb3VyY2NfdG9faW1nZm10KHFfZGF0 YS0+Zm10LT5mb3VyY2MpOw0KPiA+ICsgICAgIGlmIChpbWdfZm10ID09IE1YQ19KUEVHX0lOVkFM SUQpDQo+ID4gKyAgICAgICAgICAgICBkZXZfZXJyKGpwZWctPmRldiwgIk5vIHZhbGlkIGltYWdl IGZvcm1hdA0KPiA+IGRldGVjdGVkXG4iKTsNCj4gPiArICAgICBkZXNjLT5zdG1fY3RybCA9IFNU TV9DVFJMX0NPTkZJR19NT0QoMCkgfA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgU1RNX0NU UkxfSU1BR0VfRk9STUFUKGltZ19mbXQpOw0KPiA+ICsgICAgIG14Y19qcGVnX2FkZHJzKGRlc2Ms IHNyY19idWYsIGRzdF9idWYsIDApOw0KPiA+ICsgICAgIGRldl9kYmcoanBlZy0+ZGV2LCAiY2Zn X2Rlc2MgLSAweCVsbHg6XG4iLCBjZmdfZGVzY19oYW5kbGUpOw0KPiA+ICsgICAgIHByaW50X2Rl c2NyaXB0b3JfaW5mbyhqcGVnLT5kZXYsIGNmZ19kZXNjKTsNCj4gPiArICAgICBkZXZfZGJnKGpw ZWctPmRldiwgImVuYyBkZXNjIC0gMHglbGx4OlxuIiwgZGVzY19oYW5kbGUpOw0KPiA+ICsgICAg IHByaW50X2Rlc2NyaXB0b3JfaW5mbyhqcGVnLT5kZXYsIGRlc2MpOw0KPiA+ICsgICAgIHByaW50 X3dyYXBwZXJfaW5mbyhqcGVnLT5kZXYsIHJlZyk7DQo+ID4gKyAgICAgcHJpbnRfY2FzdF9zdGF0 dXMoanBlZy0+ZGV2LCByZWcsIE1YQ19KUEVHX0VOQ09ERSk7DQo+ID4gKw0KPiA+ICsgICAgIC8q IHZhbGlkYXRlIHRoZSBjb25maWd1cmF0aW9uIGRlc2NyaXB0b3IgKi8NCj4gPiArICAgICBteGNf anBlZ19zZXRfZGVzYyhjZmdfZGVzY19oYW5kbGUsIHJlZywgc2xvdCk7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyB2b2lkIG14Y19qcGVnX2RldmljZV9ydW4odm9pZCAqcHJpdikNCj4gPiAr ew0KPiA+ICsgICAgIHN0cnVjdCBteGNfanBlZ19jdHggKmN0eCA9IHByaXY7DQo+ID4gKyAgICAg c3RydWN0IG14Y19qcGVnX2RldiAqanBlZyA9IGN0eC0+bXhjX2pwZWc7DQo+ID4gKyAgICAgdm9p ZCBfX2lvbWVtICpyZWcgPSBqcGVnLT5iYXNlX3JlZzsNCj4gPiArICAgICBzdHJ1Y3QgZGV2aWNl ICpkZXYgPSBqcGVnLT5kZXY7DQo+ID4gKyAgICAgc3RydWN0IHZiMl92NGwyX2J1ZmZlciAqc3Jj X2J1ZiwgKmRzdF9idWY7DQo+ID4gKyAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gPiArICAg ICBzdHJ1Y3QgbXhjX2pwZWdfcV9kYXRhICpxX2RhdGFfY2FwLCAqcV9kYXRhX291dDsNCj4gPiAr ICAgICBzdHJ1Y3QgbXhjX2pwZWdfc3JjX2J1ZiAqanBlZ19zcmNfYnVmOw0KPiA+ICsNCj4gPiAr ICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmY3R4LT5teGNfanBlZy0+aHdfbG9jaywgZmxhZ3MpOw0K PiA+ICsgICAgIHNyY19idWYgPSB2NGwyX20ybV9uZXh0X3NyY19idWYoY3R4LT5maC5tMm1fY3R4 KTsNCj4gPiArICAgICBkc3RfYnVmID0gdjRsMl9tMm1fbmV4dF9kc3RfYnVmKGN0eC0+ZmgubTJt X2N0eCk7DQo+ID4gKyAgICAgaWYgKCFzcmNfYnVmIHx8ICFkc3RfYnVmKSB7DQo+ID4gKyAgICAg ICAgICAgICBkZXZfZXJyKGRldiwgIk51bGwgc3JjIG9yIGRzdCBidWZcbiIpOw0KPiA+ICsgICAg ICAgICAgICAgZ290byBlbmQ7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBxX2RhdGFf Y2FwID0gbXhjX2pwZWdfZ2V0X3FfZGF0YShjdHgsDQo+ID4gVjRMMl9CVUZfVFlQRV9WSURFT19D QVBUVVJFKTsNCj4gPiArICAgICBpZiAoIXFfZGF0YV9jYXApDQo+ID4gKyAgICAgICAgICAgICBn b3RvIGVuZDsNCj4gPiArICAgICBxX2RhdGFfb3V0ID0gbXhjX2pwZWdfZ2V0X3FfZGF0YShjdHgs DQo+ID4gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQpOw0KPiA+ICsgICAgIGlmICghcV9kYXRh X291dCkNCj4gPiArICAgICAgICAgICAgIGdvdG8gZW5kOw0KPiA+ICsgICAgIHNyY19idWYtPnNl cXVlbmNlID0gcV9kYXRhX291dC0+c2VxdWVuY2UrKzsNCj4gPiArICAgICBkc3RfYnVmLT5zZXF1 ZW5jZSA9IHFfZGF0YV9jYXAtPnNlcXVlbmNlKys7DQo+ID4gKw0KPiA+ICsgICAgIHY0bDJfbTJt X2J1Zl9jb3B5X21ldGFkYXRhKHNyY19idWYsIGRzdF9idWYsIHRydWUpOw0KPiA+ICsNCj4gPiAr ICAgICBqcGVnX3NyY19idWYgPSB2YjJfdG9fbXhjX2J1Zigmc3JjX2J1Zi0+dmIyX2J1Zik7DQo+ ID4gKyAgICAgaWYgKGpwZWdfc3JjX2J1Zi0+anBlZ19wYXJzZV9lcnJvcikgew0KPiA+ICsgICAg ICAgICAgICAganBlZy0+c2xvdF9kYXRhW2N0eC0+c2xvdF0udXNlZCA9IGZhbHNlOw0KPiA+ICsg ICAgICAgICAgICAgdjRsMl9tMm1fc3JjX2J1Zl9yZW1vdmUoY3R4LT5maC5tMm1fY3R4KTsNCj4g PiArICAgICAgICAgICAgIHY0bDJfbTJtX2RzdF9idWZfcmVtb3ZlKGN0eC0+ZmgubTJtX2N0eCk7 DQo+ID4gKyAgICAgICAgICAgICB2NGwyX20ybV9idWZfZG9uZShzcmNfYnVmLCBWQjJfQlVGX1NU QVRFX0VSUk9SKTsNCj4gPiArICAgICAgICAgICAgIHY0bDJfbTJtX2J1Zl9kb25lKGRzdF9idWYs IFZCMl9CVUZfU1RBVEVfRVJST1IpOw0KPiA+ICsgICAgICAgICAgICAgc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmY3R4LT5teGNfanBlZy0+aHdfbG9jaywNCj4gPiBmbGFncyk7DQo+ID4gKyAgICAg ICAgICAgICB2NGwyX20ybV9qb2JfZmluaXNoKGpwZWctPm0ybV9kZXYsIGN0eC0+ZmgubTJtX2N0 eCk7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuOw0KPiA+ICsgICAgIH0NCj4gPiAr DQo+ID4gKyAgICAgLyoNCj4gPiArICAgICAgKiBUT0RPOiB0aGlzIHJlc2V0IHNob3VsZCBiZSBy ZW1vdmVkLCBvbmNlIHdlIGZpZ3VyZSBvdXQNCj4gPiArICAgICAgKiBob3cgdG8gb3ZlcmNvbWUg aGFyZHdhcmUgaXNzdWVzIGJvdGggb24gZW5jb2RlciBhbmQNCj4gPiBkZWNvZGVyDQo+ID4gKyAg ICAgICovDQo+ID4gKyAgICAgbXhjX2pwZWdfc3dfcmVzZXQocmVnKTsNCj4gPiArICAgICBteGNf anBlZ19lbmFibGUocmVnKTsNCj4gPiArICAgICBteGNfanBlZ19zZXRfbF9lbmRpYW4ocmVnLCAx KTsNCj4gPiArDQo+ID4gKyAgICAgY3R4LT5zbG90ID0gbXhjX2dldF9mcmVlX3Nsb3QoanBlZy0+ c2xvdF9kYXRhLA0KPiA+IE1YQ19NQVhfU0xPVFMpOw0KPiA+ICsgICAgIGlmIChjdHgtPnNsb3Qg Pj0gTVhDX01BWF9TTE9UUykgew0KPiA+ICsgICAgICAgICAgICAgZGV2X2VycihkZXYsICJObyBt b3JlIGZyZWUgc2xvdHNcbiIpOw0KPiA+ICsgICAgICAgICAgICAgZ290byBlbmQ7DQo+ID4gKyAg ICAgfQ0KPiA+ICsgICAgIGlmICghbXhjX2pwZWdfYWxsb2Nfc2xvdF9kYXRhKGpwZWcsIGN0eC0+ c2xvdCkpIHsNCj4gPiArICAgICAgICAgICAgIGRldl9lcnIoZGV2LCAiQ2Fub3QgYWxsb2NhdGUg c2xvdCBkYXRhXG4iKTsNCj4gPiArICAgICAgICAgICAgIGdvdG8gZW5kOw0KPiA+ICsgICAgIH0N Cj4gPiArDQo+ID4gKyAgICAgbXhjX2pwZWdfZW5hYmxlX3Nsb3QocmVnLCBjdHgtPnNsb3QpOw0K PiA+ICsgICAgIG14Y19qcGVnX2VuYWJsZV9pcnEocmVnLCBjdHgtPnNsb3QpOw0KPiA+ICsNCj4g PiArICAgICBpZiAoanBlZy0+bW9kZSA9PSBNWENfSlBFR19FTkNPREUpIHsNCj4gPiArICAgICAg ICAgICAgIGRldl9kYmcoZGV2LCAiRW5jb2Rpbmcgb24gc2xvdCAlZFxuIiwgY3R4LT5zbG90KTsN Cj4gPiArICAgICAgICAgICAgIGN0eC0+ZW5jX3N0YXRlID0gTVhDX0pQRUdfRU5DX0NPTkY7DQo+ ID4gKyAgICAgICAgICAgICBteGNfanBlZ19jb25maWdfZW5jX2Rlc2MoJmRzdF9idWYtPnZiMl9i dWYsIGN0eCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmc3Jj X2J1Zi0+dmIyX2J1ZiwgJmRzdF9idWYtDQo+ID4gPnZiMl9idWYpOw0KPiA+ICsgICAgICAgICAg ICAgbXhjX2pwZWdfZW5jX21vZGVfY29uZihkZXYsIHJlZyk7IC8qIHN0YXJ0IGNvbmZpZw0KPiA+ IHBoYXNlICovDQo+ID4gKyAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgIGRldl9kYmco ZGV2LCAiRGVjb2Rpbmcgb24gc2xvdCAlZFxuIiwgY3R4LT5zbG90KTsNCj4gPiArICAgICAgICAg ICAgIHByaW50X214Y19idWYoanBlZywgJnNyY19idWYtPnZiMl9idWYsIDApOw0KPiA+ICsgICAg ICAgICAgICAgbXhjX2pwZWdfY29uZmlnX2RlY19kZXNjKCZkc3RfYnVmLT52YjJfYnVmLCBjdHgs DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnNyY19idWYtPnZi Ml9idWYsICZkc3RfYnVmLQ0KPiA+ID52YjJfYnVmKTsNCj4gPiArICAgICAgICAgICAgIG14Y19q cGVnX2RlY19tb2RlX2dvKGRldiwgcmVnKTsNCj4gPiArICAgICB9DQo+ID4gK2VuZDoNCj4gPiAr ICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjdHgtPm14Y19qcGVnLT5od19sb2NrLCBmbGFn cyk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbXhjX2pwZWdfdHJ5X2RlY29kZXJf Y21kKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc3RydWN0IHY0bDJfZGVjb2Rlcl9jbWQgKmMpDQo+ID4gK3sNCj4gPiAr ICAgICBpZiAoYy0+Y21kICE9IFY0TDJfREVDX0NNRF9TVE9QICYmIGMtPmNtZCAhPQ0KPiA+IFY0 TDJfREVDX0NNRF9TVEFSVCkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ ICsNCj4gPiArICAgICBjLT5mbGFncyA9IDA7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChjLT5jbWQg PT0gVjRMMl9ERUNfQ01EX1NUQVJUKSB7DQo+ID4gKyAgICAgICAgICAgICBjLT5zdGFydC5zcGVl ZCA9IDA7DQo+ID4gKyAgICAgICAgICAgICBjLT5zdGFydC5mb3JtYXQgPSAwOw0KPiA+ICsgICAg IH0NCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyBpbnQgbXhjX2pwZWdfZGVjb2Rlcl9jbWQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYs DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHY0bDJfZGVjb2Rlcl9j bWQgKmNtZCkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2NGwyX2ZoICpmaCA9IGZpbGUtPnBy aXZhdGVfZGF0YTsNCj4gPiArICAgICBzdHJ1Y3QgbXhjX2pwZWdfY3R4ICpjdHggPSBteGNfanBl Z19maF90b19jdHgoZmgpOw0KPiA+ICsgICAgIHN0cnVjdCBkZXZpY2UgKmRldiA9IGN0eC0+bXhj X2pwZWctPmRldjsNCj4gPiArICAgICBpbnQgcmV0Ow0KPiA+ICsNCj4gPiArICAgICByZXQgPSBt eGNfanBlZ190cnlfZGVjb2Rlcl9jbWQoZmlsZSwgZmgsIGNtZCk7DQo+ID4gKyAgICAgaWYgKHJl dCA8IDApDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArICAgICAv KiBJZ25vcmUgZGVjb2RlciBjb21tYW5kIHNpbGVudGx5IGluIGVuY29kZXIgY29udGV4dCAqLw0K PiA+ICsgICAgIGlmIChjdHgtPm14Y19qcGVnLT5tb2RlICE9IE1YQ19KUEVHX0RFQ09ERSkNCj4g PiArICAgICAgICAgICAgIHJldHVybiAwOw0KPiANCj4gVGhpcyBpcyB3cm9uZywgdGhpcyBzaG91 bGRuJ3QgYmUgc2lsZW50Lg0KPiANCj4gSSByZWNvbW1lbmQgdGhhdCB5b3UgdXNlIHY0bDJfZGlz YWJsZV9pb2N0bCgpIHRvIGRpc2FibGUgdGhlDQo+IFZJRElPQ18oVFJZKV9FTkNPREVSX0NNRA0K PiBpb2N0bHMgZm9yIHRoZSBkZWNvZGVyIGFuZCB0aGUgVklESU9DXyhUUlkpX0RFQ09ERVJfQ01E IGlvY3RscyBmb3INCj4gdGhlIGVuY29kZXIuDQo+IA0KPiBUaGF0IHdheSB5b3UgY2FuIGRyb3Ag dGhpcyB0ZXN0IGFzIHdlbGwuDQo+IA0KPiBBbmQgaXQgYWxzbyBmaXhlcyBhIGJ1ZyB3aGVyZSBU UllfREVDT0RFUl9DTUQgaXMgYWxsb3dlZCBmb3IgYW4NCj4gZW5jb2RlciwgYnV0IG5vdA0KPiB0 aGUgREVDT0RFUl9DTUQgaW9jdGwuIEkndmUgaW1wcm92ZWQgdjRsMi1jb21wbGlhbmNlIGFzIHdl bGwgc2luY2UgaXQNCj4gc2hvdWxkIGhhdmUNCj4gZmFpbGVkIG9uIHRoaXMuDQo+IA0KPiA+ICsN Cj4gPiArICAgICBpZiAoY21kLT5jbWQgPT0gVjRMMl9ERUNfQ01EX1NUT1ApIHsNCj4gPiArICAg ICAgICAgICAgIGRldl9kYmcoZGV2LCAiUmVjZWl2ZWQgVjRMMl9ERUNfQ01EX1NUT1AiKTsNCj4g PiArICAgICAgICAgICAgIGlmICh2NGwyX20ybV9udW1fc3JjX2J1ZnNfcmVhZHkoZmgtPm0ybV9j dHgpID09IDApIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgLyogTm8gbW9yZSBzcmMgYnVm cywgbm90aWZ5IGFwcCBFT1MgKi8NCj4gPiArICAgICAgICAgICAgICAgICAgICAgbm90aWZ5X2Vv cyhjdHgpOw0KPiA+ICsgICAgICAgICAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgLyogd2lsbCBzZW5kIEVPUyBsYXRlciovDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg IGN0eC0+c3RvcHBpbmcgPSAxOw0KPiA+ICsgICAgICAgICAgICAgfQ0KPiA+ICsgICAgIH0NCj4g PiArDQo+ID4gKyAgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQg bXhjX2pwZWdfdHJ5X2VuY29kZXJfY21kKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHY0bDJfZW5jb2Rlcl9j bWQgKmMpDQo+ID4gK3sNCj4gPiArICAgICBpZiAoYy0+Y21kICE9IFY0TDJfRU5DX0NNRF9TVE9Q ICYmIGMtPmNtZCAhPQ0KPiA+IFY0TDJfRU5DX0NNRF9TVEFSVCkNCj4gPiArICAgICAgICAgICAg IHJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiArICAgICBjLT5mbGFncyA9IDA7DQo+ID4gKw0K PiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG14Y19q cGVnX2VuY29kZXJfY21kKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2NGwyX2VuY29kZXJfY21kICpjbWQpDQo+ ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdjRsMl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7 DQo+ID4gKyAgICAgc3RydWN0IG14Y19qcGVnX2N0eCAqY3R4ID0gbXhjX2pwZWdfZmhfdG9fY3R4 KGZoKTsNCj4gPiArICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjdHgtPm14Y19qcGVnLT5kZXY7 DQo+ID4gKyAgICAgaW50IHJldDsNCj4gPiArDQo+ID4gKyAgICAgcmV0ID0gbXhjX2pwZWdfdHJ5 X2VuY29kZXJfY21kKGZpbGUsIGZoLCBjbWQpOw0KPiA+ICsgICAgIGlmIChyZXQgPCAwKQ0KPiA+ ICsgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKyAgICAgLyogSWdub3JlIGVu Y29kZXIgY29tbWFuZCBzaWxlbnRseSBpbiBkZWNvZGVyIGNvbnRleHQgKi8NCj4gPiArICAgICBp ZiAoY3R4LT5teGNfanBlZy0+bW9kZSAhPSBNWENfSlBFR19FTkNPREUpDQo+ID4gKyAgICAgICAg ICAgICByZXR1cm4gMDsNCj4gDQo+IFNhbWUgY29tbWVudCBhcyBhYm92ZTogZHJvcCB0aGlzIHRl c3QgYW5kIHVzZSB2NGwyX2Rpc2FibGVfaW9jdGwoKQ0KPiBpbnN0ZWFkLg0KPiANCj4gPiArDQo+ ID4gKyAgICAgaWYgKGNtZC0+Y21kID09IFY0TDJfRU5DX0NNRF9TVE9QKSB7DQo+ID4gKyAgICAg ICAgICAgICBkZXZfZGJnKGRldiwgIlJlY2VpdmVkIFY0TDJfRU5DX0NNRF9TVE9QIik7DQo+ID4g KyAgICAgICAgICAgICBpZiAodjRsMl9tMm1fbnVtX3NyY19idWZzX3JlYWR5KGZoLT5tMm1fY3R4 KSA9PSAwKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIC8qIE5vIG1vcmUgc3JjIGJ1ZnMs IG5vdGlmeSBhcHAgRU9TICovDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIG5vdGlmeV9lb3Mo Y3R4KTsNCj4gPiArICAgICAgICAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgIC8qIHdpbGwgc2VuZCBFT1MgbGF0ZXIqLw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBj dHgtPnN0b3BwaW5nID0gMTsNCj4gPiArICAgICAgICAgICAgIH0NCj4gPiArICAgICB9DQo+ID4g Kw0KPiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG14 Y19qcGVnX3F1ZXVlX3NldHVwKHN0cnVjdCB2YjJfcXVldWUgKnEsDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50ICpuYnVmZmVycywNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgKm5wbGFuZXMsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNpemVzW10sDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRldmljZSAqYWxsb2NfY3R4c1tdKQ0KPiA+ICt7 DQo+ID4gKyAgICAgc3RydWN0IG14Y19qcGVnX2N0eCAqY3R4ID0gdmIyX2dldF9kcnZfcHJpdihx KTsNCj4gPiArICAgICBzdHJ1Y3QgbXhjX2pwZWdfcV9kYXRhICpxX2RhdGEgPSBOVUxMOw0KPiA+ ICsgICAgIGludCBpOw0KPiA+ICsNCj4gPiArICAgICBxX2RhdGEgPSBteGNfanBlZ19nZXRfcV9k YXRhKGN0eCwgcS0+dHlwZSk7DQo+ID4gKyAgICAgaWYgKCFxX2RhdGEpDQo+ID4gKyAgICAgICAg ICAgICByZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKyAgICAgLyogSGFuZGxlIENSRUFURV9C VUZTIHNpdHVhdGlvbiAtICpucGxhbmVzICE9IDAgKi8NCj4gPiArICAgICBpZiAoKm5wbGFuZXMp IHsNCj4gPiArICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCAqbnBsYW5lczsgaSsrKSB7DQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmIChzaXplc1tpXSA8IHFfZGF0YS0+c2l6ZWltYWdl W2ldKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0K PiA+ICsgICAgICAgICAgICAgfQ0KPiANCj4gWW91IG5lZWQgdG8gJ3JldHVybiAwOycgaGVyZS4N Cj4gDQo+IE90aGVyd2lzZSB5b3Ugd2lsbCBvdmVyd3JpdGUgdGhlIHNpemVzIGFycmF5IGJlbG93 LCB0aGF0J3Mgbm90DQo+IHdoYXQgeW91IHdhbnQuDQo+IA0KPiA+ICsgICAgIH0NCj4gPiArDQo+ ID4gKyAgICAgLyogSGFuZGxlIFJFUUJVRlMgc2l0dWF0aW9uICovDQo+ID4gKyAgICAgKm5wbGFu ZXMgPSBxX2RhdGEtPmZtdC0+Y29scGxhbmVzOw0KPiA+ICsgICAgIGZvciAoaSA9IDA7IGkgPCAq bnBsYW5lczsgaSsrKQ0KPiA+ICsgICAgICAgICAgICAgc2l6ZXNbaV0gPSBxX2RhdGEtPnNpemVp bWFnZVtpXTsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyBpbnQgbXhjX2pwZWdfc3RhcnRfc3RyZWFtaW5nKHN0cnVjdCB2YjJfcXVldWUgKnEs IHVuc2lnbmVkDQo+ID4gaW50IGNvdW50KQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IG14Y19q cGVnX2N0eCAqY3R4ID0gdmIyX2dldF9kcnZfcHJpdihxKTsNCj4gPiArICAgICBzdHJ1Y3QgbXhj X2pwZWdfcV9kYXRhICpxX2RhdGEgPSBteGNfanBlZ19nZXRfcV9kYXRhKGN0eCwgcS0NCj4gPiA+ dHlwZSk7DQo+ID4gKw0KPiA+ICsgICAgIGRldl9kYmcoY3R4LT5teGNfanBlZy0+ZGV2LCAiU3Rh cnQgc3RyZWFtaW5nIGN0eD0lcCIsIGN0eCk7DQo+ID4gKyAgICAgcV9kYXRhLT5zZXF1ZW5jZSA9 IDA7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0 aWMgdm9pZCByZWxlYXNlX2FjdGl2ZV9idWZmZXJzKHN0cnVjdCB2YjJfcXVldWUgKnEsDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW51bSB2YjJfYnVmZmVyX3N0YXRlIHMp DQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdmIyX2J1ZmZlciAqdmI7DQo+ID4gKw0KPiA+ICsg ICAgIGlmICghbGlzdF9lbXB0eSgmcS0+cXVldWVkX2xpc3QpKQ0KPiA+ICsgICAgICAgICAgICAg bGlzdF9mb3JfZWFjaF9lbnRyeSh2YiwgJnEtPnF1ZXVlZF9saXN0LA0KPiA+IHF1ZXVlZF9lbnRy eSkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBpZiAodmItPnN0YXRlID09IFZCMl9CVUZf U1RBVEVfQUNUSVZFKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZiMl9idWZm ZXJfZG9uZSh2Yiwgcyk7DQo+ID4gKyAgICAgICAgICAgICB9DQo+IA0KPiBUaGlzIGlzbid0IHJp Z2h0IHNpbmNlIHlvdSBhcmUgdG91Y2hpbmcgaW50ZXJuYWwgdmIyX3F1ZXVlIGRhdGENCj4gc3Ry dWN0dXJlcy4NCj4gDQo+IFNlZSB2aW0ybV9zdG9wX3N0cmVhbWluZygpIGZyb20gdmltMm0uYyBv biBob3cgdG8gZG8gdGhpcy4gTWludXMgdGhlDQo+IGNhbGwgdG8gdjRsMl9jdHJsX3JlcXVlc3Rf Y29tcGxldGUoKSBzaW5jZSB0aGlzIGRyaXZlciBkb2Vzbid0IHVzZQ0KPiByZXF1ZXN0cy4NCj4g DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIG14Y19qcGVnX3N0b3Bfc3RyZWFtaW5n KHN0cnVjdCB2YjJfcXVldWUgKnEpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgbXhjX2pwZWdf Y3R4ICpjdHggPSB2YjJfZ2V0X2Rydl9wcml2KHEpOw0KPiA+ICsNCj4gPiArICAgICBkZXZfZGJn KGN0eC0+bXhjX2pwZWctPmRldiwgIlN0b3Agc3RyZWFtaW5nIGN0eD0lcCIsIGN0eCk7DQo+ID4g Kw0KPiA+ICsgICAgIC8qIFJlbGVhc2UgYWxsIGFjdGl2ZSBidWZmZXJzICovDQo+ID4gKyAgICAg cmVsZWFzZV9hY3RpdmVfYnVmZmVycyhxLCBWQjJfQlVGX1NUQVRFX0VSUk9SKTsNCj4gDQo+IEp1 c3QgZm9sZCByZWxlYXNlX2FjdGl2ZV9idWZmZXJzKCkgaW4gaGVyZSBzaW5jZSBpdCBpcyBhIGJp dA0KPiBwb2ludGxlc3MgdG8NCj4gaGF2ZSB0aGF0IGFzIGEgc2VwYXJhdGUgZnVuY3Rpb24uDQo+ IA0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgbXhjX2pwZWdfc3RyZWFtIHsNCj4gPiArICAg ICB1OCAqYWRkcjsNCj4gPiArICAgICB1MzIgbG9jOw0KPiA+ICsgICAgIHUzMiBlbmQ7DQo+ID4g K307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IGdldF9ieXRlKHN0cnVjdCBteGNfanBlZ19zdHJl YW0gKnN0cmVhbSkNCj4gPiArew0KPiA+ICsgICAgIGludCByZXQ7DQo+ID4gKw0KPiA+ICsgICAg IGlmIChzdHJlYW0tPmxvYyA+PSBzdHJlYW0tPmVuZCkNCj4gPiArICAgICAgICAgICAgIHJldHVy biAtMTsNCj4gPiArICAgICByZXQgPSBzdHJlYW0tPmFkZHJbc3RyZWFtLT5sb2NdOw0KPiA+ICsg ICAgIHN0cmVhbS0+bG9jKys7DQo+ID4gKyAgICAgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsN Cj4gPiArc3RhdGljIGludCBnZXRfc29mKHN0cnVjdCBkZXZpY2UgKmRldiwNCj4gPiArICAgICAg ICAgICAgICAgIHN0cnVjdCBteGNfanBlZ19zdHJlYW0gKnN0cmVhbSwNCj4gPiArICAgICAgICAg ICAgICAgIHN0cnVjdCBteGNfanBlZ19zb2YgKnNvZikNCj4gPiArew0KPiA+ICsgICAgIGludCBp Ow0KPiA+ICsNCj4gPiArICAgICBpZiAoc3RyZWFtLT5sb2MgKyBzaXplb2Yoc3RydWN0IG14Y19q cGVnX3NvZikgPj0gc3RyZWFtLT5lbmQpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLTE7DQo+ ID4gKyAgICAgbWVtY3B5KHNvZiwgJnN0cmVhbS0+YWRkcltzdHJlYW0tPmxvY10sIHNpemVvZihz dHJ1Y3QNCj4gPiBteGNfanBlZ19zb2YpKTsNCj4gPiArICAgICBfYnN3YXAxNigmc29mLT5sZW5n dGgpOw0KPiA+ICsgICAgIF9ic3dhcDE2KCZzb2YtPmhlaWdodCk7DQo+ID4gKyAgICAgX2Jzd2Fw MTYoJnNvZi0+d2lkdGgpOw0KPiA+ICsgICAgIGRldl9kYmcoZGV2LCAiSlBFRyBTT0Y6IHByZWNp c2lvbj0lZFxuIiwgc29mLT5wcmVjaXNpb24pOw0KPiA+ICsgICAgIGRldl9kYmcoZGV2LCAiSlBF RyBTT0Y6IGhlaWdodD0lZCwgd2lkdGg9JWRcbiIsDQo+ID4gKyAgICAgICAgICAgICBzb2YtPmhl aWdodCwgc29mLT53aWR0aCk7DQo+ID4gKyAgICAgZm9yIChpID0gMDsgaSA8IHNvZi0+Y29tcG9u ZW50c19ubzsgaSsrKSB7DQo+ID4gKyAgICAgICAgICAgICBkZXZfZGJnKGRldiwgIkpQRUcgU09G OiBjb21wX2lkPSVkLCBIPTB4JXgsDQo+ID4gVj0weCV4XG4iLA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICBzb2YtPmNvbXBbaV0uaWQsIHNvZi0+Y29tcFtpXS52LCBzb2YtDQo+ID4gPmNvbXBb aV0uaCk7DQo+ID4gKyAgICAgfQ0KPiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgaW50IG14Y19qcGVnX3ZhbGlkX2NvbXBfaWQoc3RydWN0IGRldmljZSAqZGV2 LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG14Y19qcGVnX3Nv ZiAqc29mLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IG14Y19q cGVnX3NvcyAqc29zKQ0KPiA+ICt7DQo+ID4gKyAgICAgaW50IHZhbGlkID0gMTsNCj4gPiArICAg ICBpbnQgaTsNCj4gPiArDQo+ID4gKyAgICAgLyoNCj4gPiArICAgICAgKiB0aGVyZSdzIGEgbGlt aXRhdGlvbiBpbiB0aGUgSVAgdGhhdCB0aGUgY29tcG9uZW50IElEcyBtdXN0DQo+ID4gYmUNCj4g PiArICAgICAgKiBiZXR3ZWVuIDAuLjQsIGlmIHRoZXkgYXJlIG5vdCwgbGV0J3MgcGF0Y2ggdGhl bQ0KPiA+ICsgICAgICAqLw0KPiA+ICsgICAgIGZvciAoaSA9IDA7IGkgPCBzb2YtPmNvbXBvbmVu dHNfbm87IGkrKykNCj4gPiArICAgICAgICAgICAgIGlmIChzb2YtPmNvbXBbaV0uaWQgPiBNWENf SlBFR19NQVhfQ09NUE9ORU5UUykgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICB2YWxpZCA9 IDA7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoZGV2LCAiQ29tcG9uZW50ICVk IGhhcyBpbnZhbGlkIElEOg0KPiA+ICVkIiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpLCBzb2YtPmNvbXBbaV0uaWQpOw0KPiA+ICsgICAgICAgICAgICAgfQ0KPiA+ICsgICAg IGlmICghdmFsaWQpDQo+ID4gKyAgICAgICAgICAgICAvKiBwYXRjaCBhbGwgY29tcCBJRHMgaWYg YXQgbGVhc3Qgb25lIGlzIGludmFsaWQgKi8NCj4gPiArICAgICAgICAgICAgIGZvciAoaSA9IDA7 IGkgPCBzb2YtPmNvbXBvbmVudHNfbm87IGkrKykgew0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICBkZXZfd2FybihkZXYsICJDb21wb25lbnQgJWQgSUQgcGF0Y2hlZCB0bzoNCj4gPiAlZCIsDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksIGkgKyAxKTsNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgc29mLT5jb21wW2ldLmlkID0gaSArIDE7DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgIHNvcy0+Y29tcFtpXS5pZCA9IGkgKyAxOw0KPiA+ICsgICAgICAgICAgICAgfQ0K PiA+ICsNCj4gPiArICAgICByZXR1cm4gdmFsaWQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRp YyBlbnVtIG14Y19qcGVnX2ltYWdlX2Zvcm1hdA0KPiA+ICtteGNfanBlZ19nZXRfaW1hZ2VfZm9y bWF0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3Qgc3RydWN0DQo+ID4gbXhjX2pwZWdfc29mICpz b2YpDQo+ID4gK3sNCj4gPiArICAgICBpZiAoc29mLT5jb21wb25lbnRzX25vID09IDEpIHsNCj4g PiArICAgICAgICAgICAgIGRldl9kYmcoZGV2LCAiSU1BR0VfRk9STUFUIGlzOiBNWENfSlBFR19H UkFZXG4iKTsNCj4gPiArICAgICAgICAgICAgIHJldHVybiBNWENfSlBFR19HUkFZOw0KPiA+ICsg ICAgIH0NCj4gPiArICAgICBpZiAoc29mLT5jb21wb25lbnRzX25vID09IDMpIHsNCj4gPiArICAg ICAgICAgICAgIGlmIChzb2YtPmNvbXBbMF0uaCA9PSAyICYmIHNvZi0+Y29tcFswXS52ID09IDIg JiYNCj4gPiArICAgICAgICAgICAgICAgICBzb2YtPmNvbXBbMV0uaCA9PSAxICYmIHNvZi0+Y29t cFsxXS52ID09IDEgJiYNCj4gPiArICAgICAgICAgICAgICAgICBzb2YtPmNvbXBbMl0uaCA9PSAx ICYmIHNvZi0+Y29tcFsyXS52ID09IDEpew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBkZXZf ZGJnKGRldiwgIklNQUdFX0ZPUk1BVCBpczoNCj4gPiBNWENfSlBFR19ZVVY0MjBcbiIpOw0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTVhDX0pQRUdfWVVWNDIwOw0KPiA+ICsgICAg ICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgICAgaWYgKHNvZi0+Y29tcFswXS5oID09IDIgJiYg c29mLT5jb21wWzBdLnYgPT0gMSAmJg0KPiA+ICsgICAgICAgICAgICAgICAgIHNvZi0+Y29tcFsx XS5oID09IDEgJiYgc29mLT5jb21wWzFdLnYgPT0gMSAmJg0KPiA+ICsgICAgICAgICAgICAgICAg IHNvZi0+Y29tcFsyXS5oID09IDEgJiYgc29mLT5jb21wWzJdLnYgPT0gMSl7DQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgIGRldl9kYmcoZGV2LCAiSU1BR0VfRk9STUFUIGlzOg0KPiA+IE1YQ19K UEVHX1lVVjQyMlxuIik7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBNWENfSlBF R19ZVVY0MjI7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICBpZiAoc29m LT5jb21wWzBdLmggPT0gMSAmJiBzb2YtPmNvbXBbMF0udiA9PSAxICYmDQo+ID4gKyAgICAgICAg ICAgICAgICAgc29mLT5jb21wWzFdLmggPT0gMSAmJiBzb2YtPmNvbXBbMV0udiA9PSAxICYmDQo+ ID4gKyAgICAgICAgICAgICAgICAgc29mLT5jb21wWzJdLmggPT0gMSAmJiBzb2YtPmNvbXBbMl0u diA9PSAxKXsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgZGV2X2RiZyhkZXYsICJJTUFHRV9G T1JNQVQgaXM6DQo+ID4gTVhDX0pQRUdfWVVWNDQ0XG4iKTsNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIE1YQ19KUEVHX1lVVjQ0NDsNCj4gPiArICAgICAgICAgICAgIH0NCj4gPiAr ICAgICB9DQo+ID4gKyAgICAgaWYgKHNvZi0+Y29tcG9uZW50c19ubyA9PSA0KSB7DQo+ID4gKyAg ICAgICAgICAgICBpZiAoc29mLT5jb21wWzBdLmggPT0gMSAmJiBzb2YtPmNvbXBbMF0udiA9PSAx ICYmDQo+ID4gKyAgICAgICAgICAgICAgICAgc29mLT5jb21wWzFdLmggPT0gMSAmJiBzb2YtPmNv bXBbMV0udiA9PSAxICYmDQo+ID4gKyAgICAgICAgICAgICAgICAgc29mLT5jb21wWzJdLmggPT0g MSAmJiBzb2YtPmNvbXBbMl0udiA9PSAxICYmDQo+ID4gKyAgICAgICAgICAgICAgICAgc29mLT5j b21wWzNdLmggPT0gMSAmJiBzb2YtPmNvbXBbM10udiA9PSAxKXsNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgLyogdGhpcyBpcyBub3QgdGVzdGVkICovDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgIGRldl9kYmcoZGV2LCAiSU1BR0VfRk9STUFUIGlzOg0KPiA+IE1YQ19KUEVHX0FSR0JcbiIp Ow0KPiA+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gTVhDX0pQRUdfQVJHQjsNCj4gPiAr ICAgICAgICAgICAgIH0NCj4gPiArICAgICB9DQo+ID4gKyAgICAgZGV2X2VycihkZXYsICJDb3Vs ZCBub3QgaWRlbnRpZnkgaW1hZ2UgZm9ybWF0XG4iKTsNCj4gPiArICAgICByZXR1cm4gTVhDX0pQ RUdfSU5WQUxJRDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgbXhjX2pwZWdfYnl0 ZXNwZXJsaW5lKHN0cnVjdCBteGNfanBlZ19xX2RhdGEgKnEsDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1MzIgcHJlY2lzaW9uKQ0KPiA+ICt7DQo+ID4gKyAgICAgLyogQnl0 ZXMgZGlzdGFuY2UgYmV0d2VlbiB0aGUgbGVmdG1vc3QgcGl4ZWxzIGluIHR3byBhZGphY2VudA0K PiA+IGxpbmVzICovDQo+ID4gKyAgICAgaWYgKHEtPmZtdC0+Zm91cmNjID09IFY0TDJfUElYX0ZN VF9KUEVHKSB7DQo+ID4gKyAgICAgICAgICAgICAvKiBieXRlc3BlcmxpbmUgdW51c2VkIGZvciBj b21wcmVzc2VkIGZvcm1hdHMgKi8NCj4gPiArICAgICAgICAgICAgIHEtPmJ5dGVzcGVybGluZVsw XSA9IDA7DQo+ID4gKyAgICAgICAgICAgICBxLT5ieXRlc3BlcmxpbmVbMV0gPSAwOw0KPiA+ICsg ICAgIH0gZWxzZSBpZiAocS0+Zm10LT5mb3VyY2MgPT0gVjRMMl9QSVhfRk1UX05WMTIpIHsNCj4g PiArICAgICAgICAgICAgIC8qIFdoZW4gdGhlIGltYWdlIGZvcm1hdCBpcyBwbGFuYXIgdGhlIGJ5 dGVzcGVybGluZQ0KPiA+IHZhbHVlDQo+ID4gKyAgICAgICAgICAgICAgKiBhcHBsaWVzIHRvIHRo ZSBmaXJzdCBwbGFuZSBhbmQgaXMgZGl2aWRlZCBieSB0aGUNCj4gPiBzYW1lIGZhY3Rvcg0KPiA+ ICsgICAgICAgICAgICAgICogYXMgdGhlIHdpZHRoIGZpZWxkIGZvciB0aGUgb3RoZXIgcGxhbmVz DQo+ID4gKyAgICAgICAgICAgICAgKi8NCj4gPiArICAgICAgICAgICAgIHEtPmJ5dGVzcGVybGlu ZVswXSA9IHEtPncgKiAocHJlY2lzaW9uIC8gOCkgKg0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKHEtPmZtdC0+ZGVwdGggLyA4KTsNCj4gPiArICAgICAgICAgICAgIHEt PmJ5dGVzcGVybGluZVsxXSA9IHEtPmJ5dGVzcGVybGluZVswXTsNCj4gPiArICAgICB9IGVsc2Ug ew0KPiA+ICsgICAgICAgICAgICAgLyogc2luZ2xlIHBsYW5lIGZvcm1hdHMgKi8NCj4gPiArICAg ICAgICAgICAgIHEtPmJ5dGVzcGVybGluZVswXSA9IHEtPncgKiAocHJlY2lzaW9uIC8gOCkgKg0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHEtPmZtdC0+ZGVwdGggLyA4 KTsNCj4gPiArICAgICAgICAgICAgIHEtPmJ5dGVzcGVybGluZVsxXSA9IDA7DQo+ID4gKyAgICAg fQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBteGNfanBlZ19zaXplaW1hZ2Uoc3Ry dWN0IG14Y19qcGVnX3FfZGF0YSAqcSkNCj4gPiArew0KPiA+ICsgICAgIGlmIChxLT5mbXQtPmZv dXJjYyA9PSBWNEwyX1BJWF9GTVRfSlBFRykgew0KPiA+ICsgICAgICAgICAgICAgLyogaWYgbm8g c2l6ZWltYWdlIGZyb20gdXNlciwgYXNzdW1lIHdvcnN0IGpwZWcNCj4gPiBjb21wcmVzc2lvbiAq Lw0KPiA+ICsgICAgICAgICAgICAgaWYgKCFxLT5zaXplaW1hZ2VbMF0pDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgIHEtPnNpemVpbWFnZVswXSA9IDYgKiBxLT53ICogcS0+aDsNCj4gPiArICAg ICAgICAgICAgIHEtPnNpemVpbWFnZVsxXSA9IDA7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAg aWYgKHEtPnNpemVpbWFnZVswXSA+IE1YQ19KUEVHX01BWF9TSVpFSU1BR0UpDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgIHEtPnNpemVpbWFnZVswXSA9IE1YQ19KUEVHX01BWF9TSVpFSU1BR0U7 DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgLyoganBlZyBzdHJlYW0gc2l6ZSBtdXN0IGJlIG11 bHRpcGxlIG9mIDFLICovDQo+ID4gKyAgICAgICAgICAgICBxLT5zaXplaW1hZ2VbMF0gPSBBTElH TihxLT5zaXplaW1hZ2VbMF0sIDEwMjQpOw0KPiA+ICsgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAg ICAgICAgICBxLT5zaXplaW1hZ2VbMF0gPSBxLT5ieXRlc3BlcmxpbmVbMF0gKiBxLT5oOw0KPiA+ ICsgICAgICAgICAgICAgcS0+c2l6ZWltYWdlWzFdID0gMDsNCj4gPiArICAgICAgICAgICAgIGlm IChxLT5mbXQtPmZvdXJjYyA9PSBWNEwyX1BJWF9GTVRfTlYxMikNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgcS0+c2l6ZWltYWdlWzFdID0gcS0+c2l6ZWltYWdlWzBdIC8gMjsNCj4gPiArICAg ICB9DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbXhjX2pwZWdfcGFyc2Uoc3RydWN0 IG14Y19qcGVnX2N0eCAqY3R4LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIHU4ICpzcmNf YWRkciwgdTMyIHNpemUsIGJvb2wgKmRodF9uZWVkZWQpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1 Y3QgZGV2aWNlICpkZXYgPSBjdHgtPm14Y19qcGVnLT5kZXY7DQo+ID4gKyAgICAgc3RydWN0IG14 Y19qcGVnX3FfZGF0YSAqcV9kYXRhX291dCwgKnFfZGF0YV9jYXA7DQo+ID4gKyAgICAgZW51bSB2 NGwyX2J1Zl90eXBlIGNhcF90eXBlID0NCj4gPiBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkVf TVBMQU5FOw0KPiA+ICsgICAgIHN0cnVjdCBteGNfanBlZ19zdHJlYW0gc3RyZWFtOw0KPiA+ICsg ICAgIGJvb2wgbm90Zm91bmQgPSB0cnVlOw0KPiA+ICsgICAgIGJvb2wgYXBwMTQgPSBmYWxzZTsN Cj4gPiArICAgICBib29sIHNyY19jaGcgPSBmYWxzZTsNCj4gPiArICAgICB1OCBhcHAxNF90cmFu c2Zvcm0gPSAwOw0KPiA+ICsgICAgIHN0cnVjdCBteGNfanBlZ19zb2Ygc29mLCAqcHNvZiA9IE5V TEw7DQo+ID4gKyAgICAgc3RydWN0IG14Y19qcGVnX3NvcyAqcHNvcyA9IE5VTEw7DQo+ID4gKyAg ICAgaW50IGJ5dGU7DQo+ID4gKyAgICAgdTggKm5leHQgPSBOVUxMOw0KPiA+ICsgICAgIGVudW0g bXhjX2pwZWdfaW1hZ2VfZm9ybWF0IGltZ19mbXQ7DQo+ID4gKyAgICAgdTMyIGZvdXJjYzsNCj4g PiArDQo+ID4gKyAgICAgbWVtc2V0KCZzb2YsIDAsIHNpemVvZihzdHJ1Y3QgbXhjX2pwZWdfc29m KSk7DQo+ID4gKyAgICAgc3RyZWFtLmFkZHIgPSBzcmNfYWRkcjsNCj4gPiArICAgICBzdHJlYW0u ZW5kID0gc2l6ZTsNCj4gPiArICAgICBzdHJlYW0ubG9jID0gMDsNCj4gPiArICAgICAqZGh0X25l ZWRlZCA9IHRydWU7DQo+ID4gKw0KPiA+ICsgICAgIC8qIGNoZWNrIHN0cmVhbSBzdGFydHMgd2l0 aCBTT0kgKi8NCj4gPiArICAgICBieXRlID0gZ2V0X2J5dGUoJnN0cmVhbSk7DQo+ID4gKyAgICAg aWYgKGJ5dGUgPT0gLTEgfHwgYnl0ZSAhPSAweEZGKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJu IC1FSU5WQUw7DQo+ID4gKyAgICAgYnl0ZSA9IGdldF9ieXRlKCZzdHJlYW0pOw0KPiA+ICsgICAg IGlmIChieXRlID09IC0xIHx8IGJ5dGUgIT0gMHhEOCkNCj4gPiArICAgICAgICAgICAgIHJldHVy biAtRUlOVkFMOw0KPiA+ICsNCj4gPiArICAgICB3aGlsZSAobm90Zm91bmQpIHsNCj4gPiArICAg ICAgICAgICAgIGJ5dGUgPSBnZXRfYnl0ZSgmc3RyZWFtKTsNCj4gPiArICAgICAgICAgICAgIGlm IChieXRlID09IC0xKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsN Cj4gPiArICAgICAgICAgICAgIGlmIChieXRlICE9IDB4ZmYpDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgIGNvbnRpbnVlOw0KPiA+ICsgICAgICAgICAgICAgZG8gew0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICBieXRlID0gZ2V0X2J5dGUoJnN0cmVhbSk7DQo+ID4gKyAgICAgICAgICAgICB9 IHdoaWxlIChieXRlID09IDB4ZmYpOw0KPiA+ICsgICAgICAgICAgICAgaWYgKGJ5dGUgPT0gLTEp DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCj4gPiArICAgICAgICAg ICAgIGlmIChieXRlID09IDApDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0K PiA+ICsgICAgICAgICAgICAgc3dpdGNoIChieXRlKSB7DQo+ID4gKyAgICAgICAgICAgICBjYXNl IERIVDoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgLyogREhUIG1hcmtlciBwcmVzZW50LCBu byBuZWVkIHRvIGluamVjdA0KPiA+IGRlZmF1bHQgb25lICovDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICpkaHRfbmVlZGVkID0gZmFsc2U7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGJy ZWFrOw0KPiA+ICsgICAgICAgICAgICAgY2FzZSBTT0YyOiAvKiBQcm9ncmVzc2l2ZSBEQ0YgZnJh bWUgZGVmaW5pdGlvbiAqLw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKGRldiwN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiUHJvZ3Jlc3NpdmUgSlBFRyBub3Qg c3VwcG9ydGVkIGJ5DQo+ID4gaGFyZHdhcmUiKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIC1FSU5WQUw7DQo+ID4gKyAgICAgICAgICAgICBjYXNlIFNPRjE6IC8qIEV4dGVuZGVk IHNlcXVlbnRpYWwgRENGIGZyYW1lDQo+ID4gZGVmaW5pdGlvbiAqLw0KPiA+ICsgICAgICAgICAg ICAgY2FzZSBTT0YwOiAvKiBCYXNlbGluZSBzZXF1ZW50aWFsIERDRiBmcmFtZQ0KPiA+IGRlZmlu aXRpb24gKi8NCj4gPiArICAgICAgICAgICAgICAgICAgICAgaWYgKGdldF9zb2YoZGV2LCAmc3Ry ZWFtLCAmc29mKSA9PSAtMSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVh azsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IHN0cmVhbS5hZGRyICsgc3RyZWFt LmxvYzsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgcHNvZiA9IChzdHJ1Y3QgbXhjX2pwZWdf c29mICopbmV4dDsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAg ICAgICAgICBjYXNlIFNPUzoNCj4gPiArICAgICAgICAgICAgICAgICAgICAgbmV4dCA9IHN0cmVh bS5hZGRyICsgc3RyZWFtLmxvYzsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgcHNvcyA9IChz dHJ1Y3QgbXhjX2pwZWdfc29zICopbmV4dDsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgbm90 Zm91bmQgPSBmYWxzZTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAg ICAgICAgICAgICBjYXNlIEFQUDE0Og0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBhcHAxNCA9 IHRydWU7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIC8qDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAqIEFwcGxpY2F0aW9uIERhdGEgU3ludGF4IGlzOg0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgKiAyIGJ5dGVzKEFQUG46MHhGRiwweEVFKSwgMiBieXRlcyhMcCksDQo+ID4gQXAx Li4uQXBMcC0yDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAqIFRoZSB0cmFuc2Zvcm0gZmxh ZyBpcyBpbiBBcDEyDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAqIHN0cmVhbS5sb2MgaXMg bm93IG9uIEFQUG4tMHhFRSBieXRlDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAqLw0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICBhcHAxNF90cmFuc2Zvcm0gPSAqKHN0cmVhbS5hZGRyICsg c3RyZWFtLmxvYw0KPiA+ICsgMTIgKyAxKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgYnJl YWs7DQo+ID4gKyAgICAgICAgICAgICBkZWZhdWx0Og0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICBub3Rmb3VuZCA9IHRydWU7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKyAgICAgfQ0KPiA+ ICsgICAgIHFfZGF0YV9vdXQgPSBteGNfanBlZ19nZXRfcV9kYXRhKGN0eCwNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBV VF9NDQo+ID4gUExBTkUpOw0KPiA+ICsgICAgIGlmIChxX2RhdGFfb3V0LT53ID09IDAgJiYgcV9k YXRhX291dC0+aCA9PSAwKSB7DQo+ID4gKyAgICAgICAgICAgICBkZXZfd2FybihkZXYsICJJbnZh bGlkIHVzZXIgcmVzb2x1dGlvbiAweDAiKTsNCj4gPiArICAgICAgICAgICAgIGRldl93YXJuKGRl diwgIktlZXBpbmcgcmVzb2x1dGlvbiBmcm9tIEpQRUc6ICVkeCVkIiwNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgIHNvZi53aWR0aCwgc29mLmhlaWdodCk7DQo+ID4gKyAgICAgICAgICAgICAg cV9kYXRhX291dC0+dyA9IHNvZi53aWR0aDsNCj4gPiArICAgICAgICAgICAgICBxX2RhdGFfb3V0 LT5oID0gc29mLmhlaWdodDsNCj4gPiArICAgICB9IGVsc2UgaWYgKHNvZi53aWR0aCAhPSBxX2Rh dGFfb3V0LT53IHx8IHNvZi5oZWlnaHQgIT0NCj4gPiBxX2RhdGFfb3V0LT5oKSB7DQo+ID4gKyAg ICAgICAgICAgICBkZXZfZXJyKGRldiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIlJlc29s dXRpb24gbWlzbWF0Y2g6ICVkeCVkIChKUEVHKSB2ZXJzdXMNCj4gPiAlZHglZCh1c2VyKSIsDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgIHNvZi53aWR0aCwgc29mLmhlaWdodCwgcV9kYXRhX291 dC0+dywNCj4gPiBxX2RhdGFfb3V0LT5oKTsNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlO VkFMOw0KPiA+ICsgICAgIH0NCj4gPiArICAgICBpZiAoc29mLndpZHRoICUgOCAhPSAwIHx8IHNv Zi5oZWlnaHQgJSA4ICE9IDApIHsNCj4gPiArICAgICAgICAgICAgIGRldl9lcnIoZGV2LCAiSlBF RyB3aWR0aCBvciBoZWlnaHQgbm90IG11bHRpcGxlIG9mIDg6DQo+ID4gJWR4JWRcbiIsDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgIHNvZi53aWR0aCwgc29mLmhlaWdodCk7DQo+ID4gKyAgICAg ICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gPiArICAgICB9DQo+ID4gKyAgICAgaWYgKHNvZi53 aWR0aCA+IE1YQ19KUEVHX01BWF9XSURUSCB8fA0KPiA+ICsgICAgICAgICBzb2YuaGVpZ2h0ID4g TVhDX0pQRUdfTUFYX0hFSUdIVCkgew0KPiA+ICsgICAgICAgICAgICAgZGV2X2VycihkZXYsICJK UEVHIHdpZHRoIG9yIGhlaWdodCBzaG91bGQgYmUgPD0gODE5MjoNCj4gPiAlZHglZFxuIiwNCj4g PiArICAgICAgICAgICAgICAgICAgICAgc29mLndpZHRoLCBzb2YuaGVpZ2h0KTsNCj4gPiArICAg ICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsgICAgIH0NCj4gPiArICAgICBpZiAoc29m LndpZHRoIDwgTVhDX0pQRUdfTUlOX1dJRFRIIHx8DQo+ID4gKyAgICAgICAgIHNvZi5oZWlnaHQg PCBNWENfSlBFR19NSU5fSEVJR0hUKSB7DQo+ID4gKyAgICAgICAgICAgICBkZXZfZXJyKGRldiwg IkpQRUcgd2lkdGggb3IgaGVpZ2h0IHNob3VsZCBiZSA+IDY0Og0KPiA+ICVkeCVkXG4iLA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICBzb2Yud2lkdGgsIHNvZi5oZWlnaHQpOw0KPiA+ICsgICAg ICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4gKyAgICAgfQ0KPiA+ICsgICAgIGlmIChzb2Yu Y29tcG9uZW50c19ubyA+IE1YQ19KUEVHX01BWF9DT01QT05FTlRTKSB7DQo+ID4gKyAgICAgICAg ICAgICBkZXZfZXJyKGRldiwgIkpQRUcgbnVtYmVyIG9mIGNvbXBvbmVudHMgc2hvdWxkIGJlDQo+ ID4gPD0lZCIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIE1YQ19KUEVHX01BWF9DT01QT05F TlRTKTsNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsgICAgIH0NCj4g PiArICAgICAvKiBjaGVjayBhbmQsIGlmIG5lY2Vzc2FyeSwgcGF0Y2ggY29tcG9uZW50IElEcyov DQo+ID4gKyAgICAgaWYgKCFteGNfanBlZ192YWxpZF9jb21wX2lkKGRldiwgcHNvZiwgcHNvcykp DQo+ID4gKyAgICAgICAgICAgICBkZXZfd2FybihkZXYsICJKUEVHIGNvbXBvbmVudCBpZHMgc2hv dWxkIGJlIDAtMyBvciAxLQ0KPiA+IDQiKTsNCj4gPiArDQo+ID4gKyAgICAgaW1nX2ZtdCA9IG14 Y19qcGVnX2dldF9pbWFnZV9mb3JtYXQoZGV2LCAmc29mKTsNCj4gPiArICAgICBpZiAoaW1nX2Zt dCA9PSBNWENfSlBFR19JTlZBTElEKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7 DQo+ID4gKw0KPiA+ICsgICAgIC8qDQo+ID4gKyAgICAgICogSWYgdGhlIHRyYW5zZm9ybSBmbGFn IGZyb20gQVBQMTQgbWFya2VyIGlzIDAsIGltYWdlcyB0aGF0DQo+ID4gYXJlDQo+ID4gKyAgICAg ICogZW5jb2RlZCB3aXRoIDMgY29tcG9uZW50cyBoYXZlIFJHQiBjb2xvcnNwYWNlLCBzZWUNCj4g PiBSZWNvbW1lbmRhdGlvbg0KPiA+ICsgICAgICAqIElUVS1UIFQuODcyIGNoYXB0ZXIgNi41LjMg QVBQMTQgbWFya2VyIHNlZ21lbnQgZm9yIGNvbG91cg0KPiA+IGVuY29kaW5nDQo+ID4gKyAgICAg ICovDQo+ID4gKyAgICAgaWYgKGltZ19mbXQgPT0gTVhDX0pQRUdfWVVWNDQ0ICYmIGFwcDE0ICYm IGFwcDE0X3RyYW5zZm9ybSA9PQ0KPiA+IDApDQo+ID4gKyAgICAgICAgICAgICBpbWdfZm10ID0g TVhDX0pQRUdfUkdCOw0KPiA+ICsNCj4gPiArICAgICBpZiAobXhjX2pwZWdfaW1nZm10X3RvX2Zv dXJjYyhpbWdfZm10LCAmZm91cmNjKSkgew0KPiA+ICsgICAgICAgICAgICAgZGV2X2VycihkZXYs ICJGb3VyY2Mgbm90IGZvdW5kIGZvciAlZCIsIGltZ19mbXQpOw0KPiA+ICsgICAgICAgICAgICAg cmV0dXJuIC1FSU5WQUw7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICAvKg0KPiA+ICsg ICAgICAqIHNldC11cCB0aGUgY2FwdHVyZSBxdWV1ZSB3aXRoIHRoZSBwaXhlbGZvcm1hdCBhbmQN Cj4gPiByZXNvbHV0aW9uDQo+ID4gKyAgICAgICogZGV0ZWN0ZWQgZnJvbSB0aGUganBlZyBvdXRw dXQgc3RyZWFtDQo+ID4gKyAgICAgICovDQo+ID4gKyAgICAgcV9kYXRhX2NhcCA9IG14Y19qcGVn X2dldF9xX2RhdGEoY3R4LCBjYXBfdHlwZSk7DQo+ID4gKyAgICAgaWYgKHFfZGF0YV9jYXAtPncg IT0gc29mLndpZHRoIHx8IHFfZGF0YV9jYXAtPmggIT0NCj4gPiBzb2YuaGVpZ2h0KQ0KPiA+ICsg ICAgICAgICAgICAgc3JjX2NoZyA9IHRydWU7DQo+ID4gKyAgICAgcV9kYXRhX2NhcC0+dyA9IHNv Zi53aWR0aDsNCj4gPiArICAgICBxX2RhdGFfY2FwLT5oID0gc29mLmhlaWdodDsNCj4gPiArICAg ICBxX2RhdGFfY2FwLT5mbXQgPSBteGNfanBlZ19maW5kX2Zvcm1hdChjdHgsIGZvdXJjYyk7DQo+ ID4gKyAgICAgcV9kYXRhX2NhcC0+d19hZGp1c3RlZCA9IHFfZGF0YV9jYXAtPnc7DQo+ID4gKyAg ICAgcV9kYXRhX2NhcC0+aF9hZGp1c3RlZCA9IHFfZGF0YV9jYXAtPmg7DQo+ID4gKyAgICAgLyoN Cj4gPiArICAgICAgKiBhbGlnbiB1cCB0aGUgcmVzb2x1dGlvbiBmb3IgQ0FTVCBJUCwNCj4gPiAr ICAgICAgKiBidXQgbGVhdmUgdGhlIGJ1ZmZlciByZXNvbHV0aW9uIHVuY2hhbmdlZA0KPiA+ICsg ICAgICAqLw0KPiA+ICsgICAgIHY0bF9ib3VuZF9hbGlnbl9pbWFnZSgmcV9kYXRhX2NhcC0+d19h ZGp1c3RlZCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgcV9kYXRhX2NhcC0+d19h ZGp1c3RlZCwgIC8qIGFkanVzdCB1cA0KPiA+ICovDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgIE1YQ19KUEVHX01BWF9XSURUSCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgcV9kYXRhX2NhcC0+Zm10LT5oX2FsaWduLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAmcV9kYXRhX2NhcC0+aF9hZGp1c3RlZCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgcV9kYXRhX2NhcC0+aF9hZGp1c3RlZCwgLyogYWRqdXN0IHVwICovDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIE1YQ19KUEVHX01BWF9IRUlHSFQsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgIHFfZGF0YV9jYXAtPmZtdC0+dl9hbGlnbiwNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgMCk7DQo+ID4gKyAgICAgZGV2X2RiZyhkZXYsICJEZXRlY3Rl ZCBqcGVnIHJlcz0oJWR4JWQpLT4oJWR4JWQpLA0KPiA+IHBpeGZtdD0lYyVjJWMlY1xuIiwNCj4g PiArICAgICAgICAgICAgIHFfZGF0YV9jYXAtPncsIHFfZGF0YV9jYXAtPmgsDQo+ID4gKyAgICAg ICAgICAgICBxX2RhdGFfY2FwLT53X2FkanVzdGVkLCBxX2RhdGFfY2FwLT5oX2FkanVzdGVkLA0K PiA+ICsgICAgICAgICAgICAgKGZvdXJjYyAmIDB4ZmYpLA0KPiA+ICsgICAgICAgICAgICAgKGZv dXJjYyA+PiAgOCkgJiAweGZmLA0KPiA+ICsgICAgICAgICAgICAgKGZvdXJjYyA+PiAxNikgJiAw eGZmLA0KPiA+ICsgICAgICAgICAgICAgKGZvdXJjYyA+PiAyNCkgJiAweGZmKTsNCj4gPiArDQo+ ID4gKyAgICAgLyogc2V0dXAgYnl0ZXNwZXJsaW5lL3NpemVpbWFnZSBmb3IgY2FwdHVyZSBxdWV1 ZSAqLw0KPiA+ICsgICAgIG14Y19qcGVnX2J5dGVzcGVybGluZShxX2RhdGFfY2FwLCBzb2YucHJl Y2lzaW9uKTsNCj4gPiArICAgICBteGNfanBlZ19zaXplaW1hZ2UocV9kYXRhX2NhcCk7DQo+ID4g Kw0KPiA+ICsgICAgIC8qDQo+ID4gKyAgICAgICogaWYgdGhlIENBUFRVUkUgZm9ybWF0IHdhcyB1 cGRhdGVkIHdpdGggbmV3IHZhbHVlcywNCj4gPiByZWdhcmRsZXNzIG9mDQo+ID4gKyAgICAgICog d2hldGhlciB0aGV5IG1hdGNoIHRoZSB2YWx1ZXMgc2V0IGJ5IHRoZSBjbGllbnQgb3Igbm90LA0K PiA+IHNpZ25hbA0KPiA+ICsgICAgICAqIGEgc291cmNlIGNoYW5nZSBldmVudA0KPiA+ICsgICAg ICAqLw0KPiA+ICsgICAgIGlmIChzcmNfY2hnKQ0KPiA+ICsgICAgICAgICAgICAgbm90aWZ5X3Ny Y19jaGcoY3R4KTsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3N0YXRpYyB2b2lkIG14Y19qcGVnX2J1Zl9xdWV1ZShzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIp DQo+ID4gK3sNCj4gPiArICAgICBpbnQgcmV0Ow0KPiA+ICsgICAgIHN0cnVjdCB2YjJfdjRsMl9i dWZmZXIgKnZidWYgPSB0b192YjJfdjRsMl9idWZmZXIodmIpOw0KPiA+ICsgICAgIHN0cnVjdCBt eGNfanBlZ19jdHggKmN0eCA9IHZiMl9nZXRfZHJ2X3ByaXYodmItPnZiMl9xdWV1ZSk7DQo+ID4g KyAgICAgc3RydWN0IG14Y19qcGVnX3NyY19idWYgKmpwZWdfc3JjX2J1ZjsNCj4gPiArDQo+ID4g KyAgICAgaWYgKHZiLT52YjJfcXVldWUtPnR5cGUgPT0NCj4gPiBWNEwyX0JVRl9UWVBFX1ZJREVP X0NBUFRVUkVfTVBMQU5FKQ0KPiA+ICsgICAgICAgICAgICAgZ290byBlbmQ7DQo+ID4gKw0KPiA+ ICsgICAgIC8qIGZvciBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVF9NUExBTkUgKi8NCj4gPiAr ICAgICBpZiAoY3R4LT5teGNfanBlZy0+bW9kZSAhPSBNWENfSlBFR19ERUNPREUpDQo+ID4gKyAg ICAgICAgICAgICBnb3RvIGVuZDsNCj4gPiArDQo+ID4gKyAgICAganBlZ19zcmNfYnVmID0gdmIy X3RvX214Y19idWYodmIpOw0KPiA+ICsgICAgIGpwZWdfc3JjX2J1Zi0+anBlZ19wYXJzZV9lcnJv ciA9IGZhbHNlOw0KPiA+ICsgICAgIHJldCA9IG14Y19qcGVnX3BhcnNlKGN0eCwNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAodTggKil2YjJfcGxhbmVfdmFkZHIodmIsIDApLA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgIHZiMl9nZXRfcGxhbmVfcGF5bG9hZCh2YiwgMCks DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgJmpwZWdfc3JjX2J1Zi0+ZGh0X25lZWRl ZCk7DQo+ID4gKyAgICAgaWYgKHJldCkNCj4gPiArICAgICAgICAgICAgIGpwZWdfc3JjX2J1Zi0+ anBlZ19wYXJzZV9lcnJvciA9IHRydWU7DQo+ID4gKw0KPiA+ICtlbmQ6DQo+ID4gKyAgICAgdjRs Ml9tMm1fYnVmX3F1ZXVlKGN0eC0+ZmgubTJtX2N0eCwgdmJ1Zik7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3N0YXRpYyBpbnQgbXhjX2pwZWdfYnVmX291dF92YWxpZGF0ZShzdHJ1Y3QgdmIyX2J1ZmZl ciAqdmIpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdmIyX3Y0bDJfYnVmZmVyICp2YnVmID0g dG9fdmIyX3Y0bDJfYnVmZmVyKHZiKTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKHZidWYtPmZpZWxk ID09IFY0TDJfRklFTERfQU5ZKQ0KPiANCj4gRHJvcCB0aGlzICdpZicNCj4gDQo+ID4gKyAgICAg ICAgICAgICB2YnVmLT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsNCj4gDQo+IGFuZCBhbHdheXMg c2V0IHRoaXMgdG8gVjRMMl9GSUVMRF9OT05FLg0KPiANCj4gPiArDQo+ID4gKyAgICAgcmV0dXJu IDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbXhjX2pwZWdfYnVmX3ByZXBhcmUo c3RydWN0IHZiMl9idWZmZXIgKnZiKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IG14Y19qcGVn X2N0eCAqY3R4ID0gdmIyX2dldF9kcnZfcHJpdih2Yi0+dmIyX3F1ZXVlKTsNCj4gPiArICAgICBz dHJ1Y3QgbXhjX2pwZWdfcV9kYXRhICpxX2RhdGEgPSBOVUxMOw0KPiA+ICsgICAgIHN0cnVjdCBk ZXZpY2UgKmRldiA9IGN0eC0+bXhjX2pwZWctPmRldjsNCj4gPiArICAgICB1bnNpZ25lZCBsb25n IHNpemVpbWFnZTsNCj4gPiArICAgICBpbnQgaTsNCj4gPiArDQo+ID4gKyAgICAgcV9kYXRhID0g bXhjX2pwZWdfZ2V0X3FfZGF0YShjdHgsIHZiLT52YjJfcXVldWUtPnR5cGUpOw0KPiA+ICsgICAg IGlmICghcV9kYXRhKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4gKyAg ICAgZm9yIChpID0gMDsgaSA8IHFfZGF0YS0+Zm10LT5jb2xwbGFuZXM7IGkrKykgew0KPiA+ICsg ICAgICAgICAgICAgc2l6ZWltYWdlID0gcV9kYXRhLT5zaXplaW1hZ2VbaV07DQo+ID4gKyAgICAg ICAgICAgICBpZiAodmIyX3BsYW5lX3NpemUodmIsIGkpIDwgc2l6ZWltYWdlKSB7DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIGRldl9lcnIoZGV2LCAicGxhbmUgJWQgdG9vIHNtYWxsICglbHUg PA0KPiA+ICVsdSkiLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksIHZiMl9w bGFuZV9zaXplKHZiLCBpKSwgc2l6ZWltYWdlKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIC1FSU5WQUw7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICB2 YjJfc2V0X3BsYW5lX3BheWxvYWQodmIsIGksIHNpemVpbWFnZSk7DQo+ID4gKyAgICAgfQ0KPiA+ ICsgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IHZiMl9vcHMgbXhjX2pwZWdfcW9wcyA9IHsNCj4gPiArICAgICAucXVldWVfc2V0dXAgICAgICAg ICAgICA9IG14Y19qcGVnX3F1ZXVlX3NldHVwLA0KPiA+ICsgICAgIC53YWl0X3ByZXBhcmUgICAg ICAgICAgID0gdmIyX29wc193YWl0X3ByZXBhcmUsDQo+ID4gKyAgICAgLndhaXRfZmluaXNoICAg ICAgICAgICAgPSB2YjJfb3BzX3dhaXRfZmluaXNoLA0KPiA+ICsgICAgIC5idWZfb3V0X3ZhbGlk YXRlICAgICAgID0gbXhjX2pwZWdfYnVmX291dF92YWxpZGF0ZSwNCj4gPiArICAgICAuYnVmX3By ZXBhcmUgICAgICAgICAgICA9IG14Y19qcGVnX2J1Zl9wcmVwYXJlLA0KPiA+ICsgICAgIC5zdGFy dF9zdHJlYW1pbmcgICAgICAgID0gbXhjX2pwZWdfc3RhcnRfc3RyZWFtaW5nLA0KPiA+ICsgICAg IC5zdG9wX3N0cmVhbWluZyAgICAgICAgID0gbXhjX2pwZWdfc3RvcF9zdHJlYW1pbmcsDQo+ID4g KyAgICAgLmJ1Zl9xdWV1ZSAgICAgICAgICAgICAgPSBteGNfanBlZ19idWZfcXVldWUsDQo+ID4g K307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG14Y19qcGVnX3F1ZXVlX2luaXQodm9pZCAqcHJp diwgc3RydWN0IHZiMl9xdWV1ZQ0KPiA+ICpzcmNfdnEsDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgdmIyX3F1ZXVlICpkc3RfdnEpDQo+ID4gK3sNCj4gPiArICAgICBz dHJ1Y3QgbXhjX2pwZWdfY3R4ICpjdHggPSBwcml2Ow0KPiA+ICsgICAgIGludCByZXQ7DQo+ID4g Kw0KPiA+ICsgICAgIHNyY192cS0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUX01Q TEFORTsNCj4gPiArICAgICBzcmNfdnEtPmlvX21vZGVzID0gVkIyX01NQVAgfCBWQjJfRE1BQlVG Ow0KPiA+ICsgICAgIHNyY192cS0+ZHJ2X3ByaXYgPSBjdHg7DQo+ID4gKyAgICAgc3JjX3ZxLT5i dWZfc3RydWN0X3NpemUgPSBzaXplb2Yoc3RydWN0IG14Y19qcGVnX3NyY19idWYpOw0KPiA+ICsg ICAgIHNyY192cS0+b3BzID0gJm14Y19qcGVnX3FvcHM7DQo+ID4gKyAgICAgc3JjX3ZxLT5tZW1f b3BzID0gJnZiMl9kbWFfY29udGlnX21lbW9wczsNCj4gPiArICAgICBzcmNfdnEtPnRpbWVzdGFt cF9mbGFncyA9IFY0TDJfQlVGX0ZMQUdfVElNRVNUQU1QX0NPUFk7DQo+ID4gKyAgICAgc3JjX3Zx LT5sb2NrID0gJmN0eC0+bXhjX2pwZWctPmxvY2s7DQo+ID4gKyAgICAgc3JjX3ZxLT5kZXYgPSBj dHgtPm14Y19qcGVnLT5kZXY7DQo+ID4gKyAgICAgc3JjX3ZxLT5hbGxvd196ZXJvX2J5dGVzdXNl ZCA9IDE7IC8qIGtlZXAgb2xkIHVzZXJzcGFjZSBhcHBzDQo+ID4gd29ya2luZyAqLw0KPiA+ICsN Cj4gPiArICAgICByZXQgPSB2YjJfcXVldWVfaW5pdChzcmNfdnEpOw0KPiA+ICsgICAgIGlmIChy ZXQpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gcmV0Ow0KPiA+ICsNCj4gPiArICAgICBkc3Rf dnEtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkVfTVBMQU5FOw0KPiA+ICsgICAg IGRzdF92cS0+aW9fbW9kZXMgPSBWQjJfTU1BUCB8IFZCMl9ETUFCVUY7DQo+ID4gKyAgICAgZHN0 X3ZxLT5kcnZfcHJpdiA9IGN0eDsNCj4gPiArICAgICBkc3RfdnEtPmJ1Zl9zdHJ1Y3Rfc2l6ZSA9 IHNpemVvZihzdHJ1Y3QgdjRsMl9tMm1fYnVmZmVyKTsNCj4gPiArICAgICBkc3RfdnEtPm9wcyA9 ICZteGNfanBlZ19xb3BzOw0KPiA+ICsgICAgIGRzdF92cS0+bWVtX29wcyA9ICZ2YjJfZG1hX2Nv bnRpZ19tZW1vcHM7DQo+ID4gKyAgICAgZHN0X3ZxLT50aW1lc3RhbXBfZmxhZ3MgPSBWNEwyX0JV Rl9GTEFHX1RJTUVTVEFNUF9DT1BZOw0KPiA+ICsgICAgIGRzdF92cS0+bG9jayA9ICZjdHgtPm14 Y19qcGVnLT5sb2NrOw0KPiA+ICsgICAgIGRzdF92cS0+ZGV2ID0gY3R4LT5teGNfanBlZy0+ZGV2 Ow0KPiA+ICsNCj4gPiArICAgICByZXQgPSB2YjJfcXVldWVfaW5pdChkc3RfdnEpOw0KPiA+ICsg ICAgIHJldHVybiByZXQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIG14Y19qcGVn X3NldF9kZWZhdWx0X3BhcmFtcyhzdHJ1Y3QgbXhjX2pwZWdfY3R4ICpjdHgpDQo+ID4gK3sNCj4g PiArICAgICBzdHJ1Y3QgbXhjX2pwZWdfcV9kYXRhICpvdXRfcSA9ICZjdHgtPm91dF9xOw0KPiA+ ICsgICAgIHN0cnVjdCBteGNfanBlZ19xX2RhdGEgKmNhcF9xID0gJmN0eC0+Y2FwX3E7DQo+ID4g KyAgICAgc3RydWN0IG14Y19qcGVnX3FfZGF0YSAqcVsyXSA9IHtvdXRfcSwgY2FwX3F9Ow0KPiA+ ICsgICAgIGludCBpOw0KPiA+ICsNCj4gPiArICAgICBpZiAoY3R4LT5teGNfanBlZy0+bW9kZSA9 PSBNWENfSlBFR19FTkNPREUpIHsNCj4gPiArICAgICAgICAgICAgIG91dF9xLT5mbXQgPSBteGNf anBlZ19maW5kX2Zvcm1hdChjdHgsDQo+ID4gTVhDX0pQRUdfREVGQVVMVF9QRk1UKTsNCj4gPiAr ICAgICAgICAgICAgIGNhcF9xLT5mbXQgPSBteGNfanBlZ19maW5kX2Zvcm1hdChjdHgsDQo+ID4g VjRMMl9QSVhfRk1UX0pQRUcpOw0KPiA+ICsgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAg ICBvdXRfcS0+Zm10ID0gbXhjX2pwZWdfZmluZF9mb3JtYXQoY3R4LA0KPiA+IFY0TDJfUElYX0ZN VF9KUEVHKTsNCj4gPiArICAgICAgICAgICAgIGNhcF9xLT5mbXQgPSBteGNfanBlZ19maW5kX2Zv cm1hdChjdHgsDQo+ID4gTVhDX0pQRUdfREVGQVVMVF9QRk1UKTsNCj4gPiArICAgICB9DQo+ID4g Kw0KPiA+ICsgICAgIGZvciAoaSA9IDA7IGkgPCAyOyBpKyspIHsNCj4gPiArICAgICAgICAgICAg IHFbaV0tPncgPSBNWENfSlBFR19ERUZBVUxUX1dJRFRIOw0KPiA+ICsgICAgICAgICAgICAgcVtp XS0+aCA9IE1YQ19KUEVHX0RFRkFVTFRfSEVJR0hUOw0KPiA+ICsgICAgICAgICAgICAgcVtpXS0+ d19hZGp1c3RlZCA9IE1YQ19KUEVHX0RFRkFVTFRfV0lEVEg7DQo+ID4gKyAgICAgICAgICAgICBx W2ldLT5oX2FkanVzdGVkID0gTVhDX0pQRUdfREVGQVVMVF9IRUlHSFQ7DQo+ID4gKyAgICAgICAg ICAgICBteGNfanBlZ19ieXRlc3BlcmxpbmUocVtpXSwgOCk7DQo+ID4gKyAgICAgICAgICAgICBt eGNfanBlZ19zaXplaW1hZ2UocVtpXSk7DQo+ID4gKyAgICAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgaW50IG14Y19qcGVnX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpDQo+ID4gK3sNCj4g PiArICAgICBzdHJ1Y3QgbXhjX2pwZWdfZGV2ICpteGNfanBlZyA9IHZpZGVvX2RydmRhdGEoZmls ZSk7DQo+ID4gKyAgICAgc3RydWN0IHZpZGVvX2RldmljZSAqbXhjX3ZmZCA9IHZpZGVvX2RldmRh dGEoZmlsZSk7DQo+ID4gKyAgICAgc3RydWN0IGRldmljZSAqZGV2ID0gbXhjX2pwZWctPmRldjsN Cj4gPiArICAgICBzdHJ1Y3QgbXhjX2pwZWdfY3R4ICpjdHg7DQo+ID4gKyAgICAgaW50IHJldCA9 IDA7DQo+ID4gKw0KPiA+ICsgICAgIGN0eCA9IGt6YWxsb2Moc2l6ZW9mKCpjdHgpLCBHRlBfS0VS TkVMKTsNCj4gPiArICAgICBpZiAoIWN0eCkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRU5P TUVNOw0KPiA+ICsNCj4gPiArICAgICBpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZteGNf anBlZy0+bG9jaykpIHsNCj4gPiArICAgICAgICAgICAgIHJldCA9IC1FUkVTVEFSVFNZUzsNCj4g PiArICAgICAgICAgICAgIGdvdG8gZnJlZTsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAg IHY0bDJfZmhfaW5pdCgmY3R4LT5maCwgbXhjX3ZmZCk7DQo+ID4gKyAgICAgZmlsZS0+cHJpdmF0 ZV9kYXRhID0gJmN0eC0+Zmg7DQo+ID4gKyAgICAgdjRsMl9maF9hZGQoJmN0eC0+ZmgpOw0KPiA+ ICsNCj4gPiArICAgICBjdHgtPm14Y19qcGVnID0gbXhjX2pwZWc7DQo+ID4gKw0KPiA+ICsgICAg IGN0eC0+ZmgubTJtX2N0eCA9IHY0bDJfbTJtX2N0eF9pbml0KG14Y19qcGVnLT5tMm1fZGV2LCBj dHgsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXhjX2pw ZWdfcXVldWVfaW5pdCk7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChJU19FUlIoY3R4LT5maC5tMm1f Y3R4KSkgew0KPiA+ICsgICAgICAgICAgICAgcmV0ID0gUFRSX0VSUihjdHgtPmZoLm0ybV9jdHgp Ow0KPiA+ICsgICAgICAgICAgICAgZ290byBlcnJvcjsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ ICsgICAgIG14Y19qcGVnX3NldF9kZWZhdWx0X3BhcmFtcyhjdHgpOw0KPiA+ICsgICAgIGN0eC0+ c2xvdCA9IE1YQ19NQVhfU0xPVFM7IC8qIHNsb3Qgbm90IGFsbG9jYXRlZCB5ZXQgKi8NCj4gPiAr DQo+ID4gKyAgICAgaWYgKG14Y19qcGVnLT5tb2RlID09IE1YQ19KUEVHX0RFQ09ERSkNCj4gPiAr ICAgICAgICAgICAgIGRldl9kYmcoZGV2LCAiT3BlbmVkIEpQRUcgZGVjb2RlciBpbnN0YW5jZSAl cFxuIiwNCj4gPiBjdHgpOw0KPiA+ICsgICAgIGVsc2UNCj4gPiArICAgICAgICAgICAgIGRldl9k YmcoZGV2LCAiT3BlbmVkIEpQRUcgZW5jb2RlciBpbnN0YW5jZSAlcFxuIiwNCj4gPiBjdHgpOw0K PiA+ICsgICAgIG11dGV4X3VubG9jaygmbXhjX2pwZWctPmxvY2spOw0KPiA+ICsNCj4gPiArICAg ICByZXR1cm4gMDsNCj4gPiArDQo+ID4gK2Vycm9yOg0KPiA+ICsgICAgIHY0bDJfZmhfZGVsKCZj dHgtPmZoKTsNCj4gPiArICAgICB2NGwyX2ZoX2V4aXQoJmN0eC0+ZmgpOw0KPiA+ICsgICAgIG11 dGV4X3VubG9jaygmbXhjX2pwZWctPmxvY2spOw0KPiA+ICtmcmVlOg0KPiA+ICsgICAgIGtmcmVl KGN0eCk7DQo+ID4gKyAgICAgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IGludCBteGNfanBlZ19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXAp DQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgbXhjX2pwZWdfZGV2ICpteGNfanBlZyA9IHZpZGVv X2RydmRhdGEoZmlsZSk7DQo+ID4gKw0KPiA+ICsgICAgIHN0cnNjcHkoY2FwLT5kcml2ZXIsIE1Y Q19KUEVHX05BTUUgIiBkZWNvZGVyIiwgc2l6ZW9mKGNhcC0NCj4gPiA+ZHJpdmVyKSk7DQo+ID4g KyAgICAgc3Ryc2NweShjYXAtPmNhcmQsIE1YQ19KUEVHX05BTUUgIiBkZWNvZGVyIiwgc2l6ZW9m KGNhcC0NCj4gPiA+Y2FyZCkpOw0KPiANCj4gRm9yIHRoZSB0d28gbGluZXMgYWJvdmU6IGRlY29k ZXIgLT4gY29kZWMNCj4gDQo+IFNpbmNlIHRoaXMgZHJpdmVyIGlzIHVzZWQgZm9yIGJvdGggZW5j b2RlciBhbmQgZGVjb2Rlciwgc28gaXQgaXMgb2RkDQo+IHRvDQo+IHNlZSAnZGVjb2RlcicgZm9y IHZpZGVvMSBhcyB3ZWxsLiBKdXN0IG5hbWUgaXQgJ2NvZGVjJy4NCj4gDQo+ID4gKyAgICAgc25w cmludGYoY2FwLT5idXNfaW5mbywgc2l6ZW9mKGNhcC0+YnVzX2luZm8pLCAicGxhdGZvcm06JXMi LA0KPiA+ICsgICAgICAgICAgICAgIGRldl9uYW1lKG14Y19qcGVnLT5kZXYpKTsNCj4gPiArICAg ICBjYXAtPmRldmljZV9jYXBzID0gVjRMMl9DQVBfU1RSRUFNSU5HIHwNCj4gPiBWNEwyX0NBUF9W SURFT19NMk1fTVBMQU5FOw0KPiA+ICsgICAgIGNhcC0+Y2FwYWJpbGl0aWVzID0gY2FwLT5kZXZp Y2VfY2FwcyB8IFY0TDJfQ0FQX0RFVklDRV9DQVBTOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4g MDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBteGNfanBlZ19lbnVtX2ZtdF92aWRf Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkDQo+ID4gKnByaXYsDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQ0KPiA+ICt7DQo+ ID4gKyAgICAgc3RydWN0IG14Y19qcGVnX2N0eCAqY3R4ID0gbXhjX2pwZWdfZmhfdG9fY3R4KHBy aXYpOw0KPiA+ICsNCj4gPiArICAgICBpZiAoY3R4LT5teGNfanBlZy0+bW9kZSA9PSBNWENfSlBF R19FTkNPREUpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gZW51bV9mbXQobXhjX2Zvcm1hdHMs IE1YQ19KUEVHX05VTV9GT1JNQVRTLCBmLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBNWENf SlBFR19GTVRfVFlQRV9FTkMpOw0KPiA+ICsgICAgIGVsc2UNCj4gPiArICAgICAgICAgICAgIHJl dHVybiBlbnVtX2ZtdChteGNfZm9ybWF0cywgTVhDX0pQRUdfTlVNX0ZPUk1BVFMsIGYsDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgIE1YQ19KUEVHX0ZNVF9UWVBFX1JBVyk7DQo+ID4gK30NCj4g PiArDQo+ID4gK3N0YXRpYyBpbnQgbXhjX2pwZWdfZW51bV9mbXRfdmlkX291dChzdHJ1Y3QgZmls ZSAqZmlsZSwgdm9pZA0KPiA+ICpwcml2LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHY0bDJfZm10ZGVzYyAqZikNCj4gPiArew0KPiA+ICsgICAgIHN0cnVj dCBteGNfanBlZ19jdHggKmN0eCA9IG14Y19qcGVnX2ZoX3RvX2N0eChwcml2KTsNCj4gPiArDQo+ ID4gKyAgICAgaWYgKGN0eC0+bXhjX2pwZWctPm1vZGUgPT0gTVhDX0pQRUdfREVDT0RFKQ0KPiA+ ICsgICAgICAgICAgICAgcmV0dXJuIGVudW1fZm10KG14Y19mb3JtYXRzLCBNWENfSlBFR19OVU1f Rk9STUFUUywgZiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNWENfSlBFR19G TVRfVFlQRV9FTkMpOw0KPiA+ICsgICAgIGVsc2UNCj4gPiArICAgICAgICAgICAgIHJldHVybiBl bnVtX2ZtdChteGNfZm9ybWF0cywgTVhDX0pQRUdfTlVNX0ZPUk1BVFMsIGYsDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgTVhDX0pQRUdfRk1UX1RZUEVfUkFXKTsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIGludCBteGNfanBlZ190cnlfZm10KHN0cnVjdCB2NGwyX2Zvcm1h dCAqZiwgc3RydWN0DQo+ID4gbXhjX2pwZWdfZm10ICpmbXQsDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJ1Y3QgbXhjX2pwZWdfY3R4ICpjdHgsIGludCBxX3R5cGUpDQo+ID4gK3sN Cj4gPiArICAgICBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0X21wbGFuZSAqcGl4X21wID0gJmYtPmZt dC5waXhfbXA7DQo+ID4gKyAgICAgc3RydWN0IHY0bDJfcGxhbmVfcGl4X2Zvcm1hdCAqcGZtdDsN Cj4gPiArICAgICB1MzIgdyA9IChwaXhfbXAtPndpZHRoIDwgTVhDX0pQRUdfTUFYX1dJRFRIKSA/ DQo+ID4gKyAgICAgICAgICAgICAgcGl4X21wLT53aWR0aCA6IE1YQ19KUEVHX01BWF9XSURUSDsN Cj4gPiArICAgICB1MzIgaCA9IChwaXhfbXAtPmhlaWdodCA8IE1YQ19KUEVHX01BWF9IRUlHSFQp ID8NCj4gPiArICAgICAgICAgICAgICBwaXhfbXAtPmhlaWdodCA6IE1YQ19KUEVHX01BWF9IRUlH SFQ7DQo+ID4gKyAgICAgaW50IGk7DQo+ID4gKyAgICAgc3RydWN0IG14Y19qcGVnX3FfZGF0YSB0 bXBfcTsNCj4gPiArDQo+ID4gKyAgICAgbWVtc2V0KHBpeF9tcC0+cmVzZXJ2ZWQsIDAsIHNpemVv ZihwaXhfbXAtPnJlc2VydmVkKSk7DQo+ID4gKyAgICAgcGl4X21wLT5maWVsZCA9IFY0TDJfRklF TERfTk9ORTsNCj4gPiArICAgICBwaXhfbXAtPm51bV9wbGFuZXMgPSBmbXQtPmNvbHBsYW5lczsN Cj4gPiArICAgICBwaXhfbXAtPnBpeGVsZm9ybWF0ID0gZm10LT5mb3VyY2M7DQo+ID4gKw0KPiA+ ICsgICAgIC8qDQo+ID4gKyAgICAgICogdXNlIE1YQ19KUEVHX0hfQUxJR04gaW5zdGVhZCBvZiBm bXQtPnZfYWxpZ24sIGZvciB2ZXJ0aWNhbA0KPiA+ICsgICAgICAqIGFsaWdubWVudCwgdG8gbG9v c2VuIHVwIHRoZSBhbGlnbm1lbnQgdG8gbXVsdGlwbGUgb2YgOCwNCj4gPiArICAgICAgKiBvdGhl cndpc2UgTlYxMi0xMDgwcCBmYWlscyBhcyAxMDgwIGlzIG5vdCBhIG11bHRpcGxlIG9mIDE2DQo+ ID4gKyAgICAgICovDQo+ID4gKyAgICAgdjRsX2JvdW5kX2FsaWduX2ltYWdlKCZ3LA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICBNWENfSlBFR19NSU5fV0lEVEgsDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIHcsIC8qIGFkanVzdCBkb3dud2FyZHMqLw0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICBmbXQtPmhfYWxpZ24sDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICZoLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBNWENfSlBF R19NSU5fSEVJR0hULA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICBoLCAvKiBhZGp1 c3QgZG93bndhcmRzKi8NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgTVhDX0pQRUdf SF9BTElHTiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7DQo+ID4gKyAgICAg cGl4X21wLT53aWR0aCA9IHc7IC8qIG5lZ290aWF0ZSB0aGUgd2lkdGggKi8NCj4gPiArICAgICBw aXhfbXAtPmhlaWdodCA9IGg7IC8qIG5lZ290aWF0ZSB0aGUgaGVpZ2h0ICovDQo+ID4gKw0KPiA+ ICsgICAgIC8qIGdldCB1c2VyIGlucHV0IGludG8gdGhlIHRtcF9xICovDQo+ID4gKyAgICAgdG1w X3EudyA9IHc7DQo+ID4gKyAgICAgdG1wX3EuaCA9IGg7DQo+ID4gKyAgICAgdG1wX3EuZm10ID0g Zm10Ow0KPiA+ICsgICAgIGZvciAoaSA9IDA7IGkgPCBwaXhfbXAtPm51bV9wbGFuZXM7IGkrKykg ew0KPiA+ICsgICAgICAgICAgICAgcGZtdCA9ICZwaXhfbXAtPnBsYW5lX2ZtdFtpXTsNCj4gPiAr ICAgICAgICAgICAgIHRtcF9xLmJ5dGVzcGVybGluZVtpXSA9IHBmbXQtPmJ5dGVzcGVybGluZTsN Cj4gPiArICAgICAgICAgICAgIHRtcF9xLnNpemVpbWFnZVtpXSA9IHBmbXQtPnNpemVpbWFnZTsN Cj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIC8qIGNhbGN1bGF0ZSBieXRlc3BlcmxpbmUg JiBzaXplaW1hZ2UgaW50byB0aGUgdG1wX3EgKi8NCj4gPiArICAgICBteGNfanBlZ19ieXRlc3Bl cmxpbmUoJnRtcF9xLCA4KTsNCj4gPiArICAgICBteGNfanBlZ19zaXplaW1hZ2UoJnRtcF9xKTsN Cj4gPiArDQo+ID4gKyAgICAgLyogYWRqdXN0IHVzZXIgZm9ybWF0IGFjY29yZGluZyB0byBvdXIg Y2FsY3VsYXRpb25zICovDQo+ID4gKyAgICAgZm9yIChpID0gMDsgaSA8IHBpeF9tcC0+bnVtX3Bs YW5lczsgaSsrKSB7DQo+ID4gKyAgICAgICAgICAgICBwZm10ID0gJnBpeF9tcC0+cGxhbmVfZm10 W2ldOw0KPiA+ICsgICAgICAgICAgICAgbWVtc2V0KHBmbXQtPnJlc2VydmVkLCAwLCBzaXplb2Yo cGZtdC0+cmVzZXJ2ZWQpKTsNCj4gPiArICAgICAgICAgICAgIHBmbXQtPmJ5dGVzcGVybGluZSA9 IHRtcF9xLmJ5dGVzcGVybGluZVtpXTsNCj4gPiArICAgICAgICAgICAgIHBmbXQtPnNpemVpbWFn ZSA9IHRtcF9xLnNpemVpbWFnZVtpXTsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIC8q IGZpeCBjb2xvcnNwYWNlIGluZm9ybWF0aW9uIHRvIHNSR0IgZm9yIGJvdGggb3V0cHV0ICYNCj4g PiBjYXB0dXJlICovDQo+ID4gKyAgICAgcGl4X21wLT5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQ QUNFX1NSR0I7DQo+ID4gKyAgICAgcGl4X21wLT55Y2Jjcl9lbmMgPSBWNEwyX1lDQkNSX0VOQ182 MDE7DQo+ID4gKyAgICAgcGl4X21wLT54ZmVyX2Z1bmMgPSBWNEwyX1hGRVJfRlVOQ19TUkdCOw0K PiA+ICsgICAgIHBpeF9tcC0+cXVhbnRpemF0aW9uID0gVjRMMl9RVUFOVElaQVRJT05fRlVMTF9S QU5HRTsNCj4gDQo+IFNvIFlVViBmb3JtYXRzIGFyZSBleHBlY3RlZCB0byBiZSBmdWxsIHJhbmdl IGFzIHdlbGw/IEJvdGggd2hlbg0KPiBlbmNvZGluZw0KPiBhbmQgZGVjb2Rpbmc/DQoNCkkgc2V0 IHRoZSBjb2xvcnNwYWNlIGluZm9ybWF0aW9uIGxpa2UgdGhhdCBiYXNlZCBvbiB0aGlzIGNvbW1l bnQ6DQoJLyoNCgkgKiBFZmZlY3RpdmVseSBzaG9ydGhhbmQgZm9yIFY0TDJfQ09MT1JTUEFDRV9T UkdCLA0KVjRMMl9ZQ0JDUl9FTkNfNjAxDQoJICogYW5kIFY0TDJfUVVBTlRJWkFUSU9OX0ZVTExf UkFOR0UuIFRvIGJlIHVzZWQgZm9yIChNb3Rpb24tDQopSlBFRy4NCgkgKi8NCglWNEwyX0NPTE9S U1BBQ0VfSlBFRyAgICAgICAgICA9IDcsDQoNCkFsc28sIEkgbG9va2VkIGF0IG10a19qcGVnX3Nl dF9kZWZhdWx0X3BhcmFtcyBmb3IgZXhhbXBsZS4NCkxldCBtZSBrbm93IGlmIHlvdSBoYXZlIGEg ZGlmZmVyZW50IHN1Z2dlc3Rpb24uDQoNClRoYW5rcywNCk1pcmVsYQ0KDQo+IA0KPiA+ICsNCj4g PiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBteGNfanBl Z190cnlfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikNCj4g PiArew0KPiA+ICsgICAgIHN0cnVjdCBteGNfanBlZ19jdHggKmN0eCA9IG14Y19qcGVnX2ZoX3Rv X2N0eChwcml2KTsNCj4gPiArICAgICBzdHJ1Y3QgbXhjX2pwZWdfZGV2ICpqcGVnID0gY3R4LT5t eGNfanBlZzsNCj4gPiArICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYgPSBqcGVnLT5kZXY7DQo+ID4g KyAgICAgc3RydWN0IG14Y19qcGVnX2ZtdCAqZm10Ow0KPiA+ICsgICAgIHUzMiBmb3VyY2MgPSBm LT5mbXQucGl4X21wLnBpeGVsZm9ybWF0Ow0KPiA+ICsNCj4gPiArICAgICBpbnQgcV90eXBlID0g KGpwZWctPm1vZGUgPT0gTVhDX0pQRUdfREVDT0RFKSA/DQo+ID4gKyAgICAgICAgICAgICAgICAg IE1YQ19KUEVHX0ZNVF9UWVBFX1JBVyA6IE1YQ19KUEVHX0ZNVF9UWVBFX0VOQzsNCj4gPiArDQo+ ID4gKyAgICAgaWYgKCFWNEwyX1RZUEVfSVNfTVVMVElQTEFOQVIoZi0+dHlwZSkpIHsNCj4gPiAr ICAgICAgICAgICAgIGRldl9lcnIoZGV2LCAiVFJZX0ZNVCB3aXRoIEludmFsaWQgdHlwZTogJWRc biIsIGYtDQo+ID4gPnR5cGUpOw0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBmbXQgPSBteGNfanBlZ19maW5kX2Zvcm1hdChj dHgsIGZvdXJjYyk7DQo+ID4gKyAgICAgaWYgKCFmbXQgfHwgZm10LT5mbGFncyAhPSBxX3R5cGUp IHsNCj4gPiArICAgICAgICAgICAgIGRldl93YXJuKGRldiwgIkZvcm1hdCBub3Qgc3VwcG9ydGVk OiAlYyVjJWMlYywgdXNlDQo+ID4gdGhlIGRlZmF1bHQuXG4iLA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgKGZvdXJjYyAmIDB4ZmYpLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgKGZv dXJjYyA+PiAgOCkgJiAweGZmLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgKGZvdXJjYyA+ PiAxNikgJiAweGZmLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgKGZvdXJjYyA+PiAyNCkg JiAweGZmKTsNCj4gPiArICAgICAgICAgICAgIGYtPmZtdC5waXhfbXAucGl4ZWxmb3JtYXQgPSAo anBlZy0+bW9kZSA9PQ0KPiA+IE1YQ19KUEVHX0RFQ09ERSkgPw0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIE1YQ19KUEVHX0RFRkFVTFRfUEZNVCA6DQo+ID4gVjRMMl9QSVhfRk1U X0pQRUc7DQo+ID4gKyAgICAgICAgICAgICBmbXQgPSBteGNfanBlZ19maW5kX2Zvcm1hdChjdHgs IGYtDQo+ID4gPmZtdC5waXhfbXAucGl4ZWxmb3JtYXQpOw0KPiA+ICsgICAgIH0NCj4gPiArICAg ICByZXR1cm4gbXhjX2pwZWdfdHJ5X2ZtdChmLCBmbXQsIGN0eCwgcV90eXBlKTsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIGludCBteGNfanBlZ190cnlfZm10X3ZpZF9vdXQoc3RydWN0IGZp bGUgKmZpbGUsIHZvaWQgKnByaXYsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCBteGNf anBlZ19jdHggKmN0eCA9IG14Y19qcGVnX2ZoX3RvX2N0eChwcml2KTsNCj4gPiArICAgICBzdHJ1 Y3QgbXhjX2pwZWdfZGV2ICpqcGVnID0gY3R4LT5teGNfanBlZzsNCj4gPiArICAgICBzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSBqcGVnLT5kZXY7DQo+ID4gKyAgICAgc3RydWN0IG14Y19qcGVnX2ZtdCAq Zm10Ow0KPiA+ICsgICAgIHUzMiBmb3VyY2MgPSBmLT5mbXQucGl4X21wLnBpeGVsZm9ybWF0Ow0K PiA+ICsNCj4gPiArICAgICBpbnQgcV90eXBlID0gKGpwZWctPm1vZGUgPT0gTVhDX0pQRUdfRU5D T0RFKSA/DQo+ID4gKyAgICAgICAgICAgICAgICAgIE1YQ19KUEVHX0ZNVF9UWVBFX1JBVyA6IE1Y Q19KUEVHX0ZNVF9UWVBFX0VOQzsNCj4gPiArDQo+ID4gKyAgICAgaWYgKCFWNEwyX1RZUEVfSVNf TVVMVElQTEFOQVIoZi0+dHlwZSkpIHsNCj4gPiArICAgICAgICAgICAgIGRldl9lcnIoZGV2LCAi VFJZX0ZNVCB3aXRoIEludmFsaWQgdHlwZTogJWRcbiIsIGYtDQo+ID4gPnR5cGUpOw0KPiA+ICsg ICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAg ICBmbXQgPSBteGNfanBlZ19maW5kX2Zvcm1hdChjdHgsIGZvdXJjYyk7DQo+ID4gKyAgICAgaWYg KCFmbXQgfHwgZm10LT5mbGFncyAhPSBxX3R5cGUpIHsNCj4gPiArICAgICAgICAgICAgIGRldl93 YXJuKGRldiwgIkZvcm1hdCBub3Qgc3VwcG9ydGVkOiAlYyVjJWMlYywgdXNlDQo+ID4gdGhlIGRl ZmF1bHQuXG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgKGZvdXJjYyAmIDB4ZmYpLA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgKGZvdXJjYyA+PiAgOCkgJiAweGZmLA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgKGZvdXJjYyA+PiAxNikgJiAweGZmLA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgKGZvdXJjYyA+PiAyNCkgJiAweGZmKTsNCj4gPiArICAgICAgICAgICAg IGYtPmZtdC5waXhfbXAucGl4ZWxmb3JtYXQgPSAoanBlZy0+bW9kZSA9PQ0KPiA+IE1YQ19KUEVH X0VOQ09ERSkgPw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1YQ19KUEVHX0RF RkFVTFRfUEZNVCA6DQo+ID4gVjRMMl9QSVhfRk1UX0pQRUc7DQo+ID4gKyAgICAgICAgICAgICBm bXQgPSBteGNfanBlZ19maW5kX2Zvcm1hdChjdHgsIGYtDQo+ID4gPmZtdC5waXhfbXAucGl4ZWxm b3JtYXQpOw0KPiA+ICsgICAgIH0NCj4gPiArICAgICByZXR1cm4gbXhjX2pwZWdfdHJ5X2ZtdChm LCBmbXQsIGN0eCwgcV90eXBlKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBteGNf anBlZ19zX2ZtdChzdHJ1Y3QgbXhjX2pwZWdfY3R4ICpjdHgsDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0 IHZiMl9xdWV1ZSAqdnE7DQo+ID4gKyAgICAgc3RydWN0IG14Y19qcGVnX3FfZGF0YSAqcV9kYXRh ID0gTlVMTDsNCj4gPiArICAgICBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0X21wbGFuZSAqcGl4X21w ID0gJmYtPmZtdC5waXhfbXA7DQo+ID4gKyAgICAgc3RydWN0IG14Y19qcGVnX2RldiAqanBlZyA9 IGN0eC0+bXhjX2pwZWc7DQo+ID4gKyAgICAgaW50IGk7DQo+ID4gKw0KPiA+ICsgICAgIHZxID0g djRsMl9tMm1fZ2V0X3ZxKGN0eC0+ZmgubTJtX2N0eCwgZi0+dHlwZSk7DQo+ID4gKyAgICAgaWYg KCF2cSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiArICAg ICBxX2RhdGEgPSBteGNfanBlZ19nZXRfcV9kYXRhKGN0eCwgZi0+dHlwZSk7DQo+ID4gKw0KPiA+ ICsgICAgIGlmICh2YjJfaXNfYnVzeSh2cSkpIHsNCj4gPiArICAgICAgICAgICAgIHY0bDJfZXJy KCZqcGVnLT52NGwyX2RldiwgInF1ZXVlIGJ1c3lcbiIpOw0KPiA+ICsgICAgICAgICAgICAgcmV0 dXJuIC1FQlVTWTsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIHFfZGF0YS0+Zm10ID0g bXhjX2pwZWdfZmluZF9mb3JtYXQoY3R4LCBwaXhfbXAtPnBpeGVsZm9ybWF0KTsNCj4gPiArICAg ICBxX2RhdGEtPncgPSBwaXhfbXAtPndpZHRoOw0KPiA+ICsgICAgIHFfZGF0YS0+aCA9IHBpeF9t cC0+aGVpZ2h0Ow0KPiA+ICsNCj4gPiArICAgICBxX2RhdGEtPndfYWRqdXN0ZWQgPSBxX2RhdGEt Pnc7DQo+ID4gKyAgICAgcV9kYXRhLT5oX2FkanVzdGVkID0gcV9kYXRhLT5oOw0KPiA+ICsgICAg IGlmIChqcGVnLT5tb2RlID09IE1YQ19KUEVHX0RFQ09ERSkgew0KPiA+ICsgICAgICAgICAgICAg LyoNCj4gPiArICAgICAgICAgICAgICAqIGFsaWduIHVwIHRoZSByZXNvbHV0aW9uIGZvciBDQVNU IElQLA0KPiA+ICsgICAgICAgICAgICAgICogYnV0IGxlYXZlIHRoZSBidWZmZXIgcmVzb2x1dGlv biB1bmNoYW5nZWQNCj4gPiArICAgICAgICAgICAgICAqLw0KPiA+ICsgICAgICAgICAgICAgdjRs X2JvdW5kX2FsaWduX2ltYWdlKCZxX2RhdGEtPndfYWRqdXN0ZWQsDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgcV9kYXRhLT53X2FkanVzdGVkLCAgLyogYWRqdXN0DQo+ ID4gdXB3YXJkcyAqLw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1Y Q19KUEVHX01BWF9XSURUSCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBxX2RhdGEtPmZtdC0+aF9hbGlnbiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmcV9kYXRhLT5oX2FkanVzdGVkLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHFfZGF0YS0+aF9hZGp1c3RlZCwgLyogYWRqdXN0DQo+ID4gdXB3YXJkcyAq Lw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1YQ19KUEVHX01BWF9I RUlHSFQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcV9kYXRhLT5m bXQtPnZfYWxpZ24sDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCk7 DQo+ID4gKyAgICAgfSBlbHNlIHsNCj4gPiArICAgICAgICAgICAgIC8qDQo+ID4gKyAgICAgICAg ICAgICAgKiBhbGlnbiBkb3duIHRoZSByZXNvbHV0aW9uIGZvciBDQVNUIElQLA0KPiA+ICsgICAg ICAgICAgICAgICogYnV0IGxlYXZlIHRoZSBidWZmZXIgcmVzb2x1dGlvbiB1bmNoYW5nZWQNCj4g PiArICAgICAgICAgICAgICAqLw0KPiA+ICsgICAgICAgICAgICAgdjRsX2JvdW5kX2FsaWduX2lt YWdlKCZxX2RhdGEtPndfYWRqdXN0ZWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTVhDX0pQRUdfTUlOX1dJRFRILA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHFfZGF0YS0+d19hZGp1c3RlZCwgLyogYWRqdXN0DQo+ID4gZG93bndhcmRz Ki8NCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxX2RhdGEtPmZtdC0+ aF9hbGlnbiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmcV9kYXRh LT5oX2FkanVzdGVkLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1Y Q19KUEVHX01JTl9IRUlHSFQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcV9kYXRhLT5oX2FkanVzdGVkLCAvKiBhZGp1c3QNCj4gPiBkb3dud2FyZHMqLw0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHFfZGF0YS0+Zm10LT52X2FsaWduLA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDApOw0KPiA+ICsgICAgIH0N Cj4gPiArDQo+ID4gKyAgICAgZm9yIChpID0gMDsgaSA8IHBpeF9tcC0+bnVtX3BsYW5lczsgaSsr KSB7DQo+ID4gKyAgICAgICAgICAgICBxX2RhdGEtPmJ5dGVzcGVybGluZVtpXSA9IHBpeF9tcC0N Cj4gPiA+cGxhbmVfZm10W2ldLmJ5dGVzcGVybGluZTsNCj4gPiArICAgICAgICAgICAgIHFfZGF0 YS0+c2l6ZWltYWdlW2ldID0gcGl4X21wLQ0KPiA+ID5wbGFuZV9mbXRbaV0uc2l6ZWltYWdlOw0K PiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3N0YXRpYyBpbnQgbXhjX2pwZWdfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwg dm9pZCAqcHJpdiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2 NGwyX2Zvcm1hdCAqZikNCj4gPiArew0KPiA+ICsgICAgIGludCByZXQ7DQo+ID4gKw0KPiA+ICsg ICAgIHJldCA9IG14Y19qcGVnX3RyeV9mbXRfdmlkX2NhcChmaWxlLCBwcml2LCBmKTsNCj4gPiAr ICAgICBpZiAocmV0KQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4gPiArDQo+ID4g KyAgICAgcmV0dXJuIG14Y19qcGVnX3NfZm10KG14Y19qcGVnX2ZoX3RvX2N0eChwcml2KSwgZik7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbXhjX2pwZWdfc19mbXRfdmlkX291dChz dHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikNCj4gPiArew0KPiA+ICsgICAgIGludCBy ZXQ7DQo+ID4gKw0KPiA+ICsgICAgIHJldCA9IG14Y19qcGVnX3RyeV9mbXRfdmlkX291dChmaWxl LCBwcml2LCBmKTsNCj4gPiArICAgICBpZiAocmV0KQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJu IHJldDsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIG14Y19qcGVnX3NfZm10KG14Y19qcGVnX2Zo X3RvX2N0eChwcml2KSwgZik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbXhjX2pw ZWdfZ19mbXRfdmlkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpDQo+ID4gK3sNCj4gPiAr ICAgICBzdHJ1Y3QgbXhjX2pwZWdfY3R4ICpjdHggPSBteGNfanBlZ19maF90b19jdHgocHJpdik7 DQo+ID4gKyAgICAgc3RydWN0IG14Y19qcGVnX2RldiAqanBlZyA9IGN0eC0+bXhjX2pwZWc7DQo+ ID4gKyAgICAgc3RydWN0IGRldmljZSAqZGV2ID0ganBlZy0+ZGV2Ow0KPiA+ICsgICAgIHN0cnVj dCB2NGwyX3BpeF9mb3JtYXRfbXBsYW5lICAgKnBpeF9tcCA9ICZmLT5mbXQucGl4X21wOw0KPiA+ ICsgICAgIHN0cnVjdCBteGNfanBlZ19xX2RhdGEgKnFfZGF0YSA9IG14Y19qcGVnX2dldF9xX2Rh dGEoY3R4LCBmLQ0KPiA+ID50eXBlKTsNCj4gPiArICAgICBpbnQgaTsNCj4gPiArDQo+ID4gKyAg ICAgaWYgKCFWNEwyX1RZUEVfSVNfTVVMVElQTEFOQVIoZi0+dHlwZSkpIHsNCj4gPiArICAgICAg ICAgICAgIGRldl9lcnIoZGV2LCAiR19GTVQgd2l0aCBJbnZhbGlkIHR5cGU6ICVkXG4iLCBmLQ0K PiA+ID50eXBlKTsNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsgICAg IH0NCj4gPiArDQo+ID4gKyAgICAgcGl4X21wLT5waXhlbGZvcm1hdCA9IHFfZGF0YS0+Zm10LT5m b3VyY2M7DQo+ID4gKyAgICAgcGl4X21wLT53aWR0aCA9IHFfZGF0YS0+dzsNCj4gPiArICAgICBw aXhfbXAtPmhlaWdodCA9IHFfZGF0YS0+aDsNCj4gPiArICAgICBwaXhfbXAtPmZpZWxkID0gVjRM Ml9GSUVMRF9OT05FOw0KPiA+ICsNCj4gPiArICAgICAvKiBmaXggY29sb3JzcGFjZSBpbmZvcm1h dGlvbiB0byBzUkdCIGZvciBib3RoIG91dHB1dCAmDQo+ID4gY2FwdHVyZSAqLw0KPiA+ICsgICAg IHBpeF9tcC0+Y29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCOw0KPiA+ICsgICAgIHBp eF9tcC0+eWNiY3JfZW5jID0gVjRMMl9ZQ0JDUl9FTkNfNjAxOw0KPiA+ICsgICAgIHBpeF9tcC0+ eGZlcl9mdW5jID0gVjRMMl9YRkVSX0ZVTkNfU1JHQjsNCj4gPiArICAgICBwaXhfbXAtPnF1YW50 aXphdGlvbiA9IFY0TDJfUVVBTlRJWkFUSU9OX0ZVTExfUkFOR0U7DQo+ID4gKw0KPiA+ICsgICAg IHBpeF9tcC0+bnVtX3BsYW5lcyA9IHFfZGF0YS0+Zm10LT5jb2xwbGFuZXM7DQo+ID4gKyAgICAg Zm9yIChpID0gMDsgaSA8IHBpeF9tcC0+bnVtX3BsYW5lczsgaSsrKSB7DQo+ID4gKyAgICAgICAg ICAgICBwaXhfbXAtPnBsYW5lX2ZtdFtpXS5ieXRlc3BlcmxpbmUgPSBxX2RhdGEtDQo+ID4gPmJ5 dGVzcGVybGluZVtpXTsNCj4gPiArICAgICAgICAgICAgIHBpeF9tcC0+cGxhbmVfZm10W2ldLnNp emVpbWFnZSA9IHFfZGF0YS0NCj4gPiA+c2l6ZWltYWdlW2ldOw0KPiA+ICsgICAgIH0NCj4gPiAr DQo+ID4gKyAgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbXhj X2pwZWdfc3Vic2NyaWJlX2V2ZW50KHN0cnVjdCB2NGwyX2ZoICpmaCwNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0DQo+ID4gdjRsMl9ldmVudF9zdWJz Y3JpcHRpb24gKnN1YikNCj4gPiArew0KPiA+ICsgICAgIHN3aXRjaCAoc3ViLT50eXBlKSB7DQo+ ID4gKyAgICAgY2FzZSBWNEwyX0VWRU5UX0VPUzoNCj4gPiArICAgICAgICAgICAgIHJldHVybiB2 NGwyX2V2ZW50X3N1YnNjcmliZShmaCwgc3ViLCAwLCBOVUxMKTsNCj4gPiArICAgICBjYXNlIFY0 TDJfRVZFTlRfU09VUkNFX0NIQU5HRToNCj4gPiArICAgICAgICAgICAgIHJldHVybiB2NGwyX3Ny Y19jaGFuZ2VfZXZlbnRfc3Vic2NyaWJlKGZoLCBzdWIpOw0KPiA+ICsgICAgIGRlZmF1bHQ6DQo+ ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gPiArICAgICB9DQo+ID4gK30NCj4g PiArDQo+ID4gK3N0YXRpYyBpbnQgbXhjX2pwZWdfcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9p ZCAqcHJpdiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2NGwyX2J1ZmZlciAq YnVmKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHY0bDJfZmggKmZoID0gZmlsZS0+cHJpdmF0 ZV9kYXRhOw0KPiA+ICsgICAgIHN0cnVjdCBteGNfanBlZ19jdHggKmN0eCA9IG14Y19qcGVnX2Zo X3RvX2N0eChwcml2KTsNCj4gPiArICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYgPSBjdHgtPm14Y19q cGVnLT5kZXY7DQo+ID4gKyAgICAgc3RydWN0IHZiMl9xdWV1ZSAqdnE7DQo+ID4gKw0KPiA+ICsg ICAgIGRldl9kYmcoZGV2LCAiUUJVRiB0eXBlPSVkLCBpbmRleD0lZCIsIGJ1Zi0+dHlwZSwgYnVm LQ0KPiA+ID5pbmRleCk7DQo+ID4gKyAgICAgdnEgPSB2NGwyX20ybV9nZXRfdnEoZmgtPm0ybV9j dHgsIGJ1Zi0+dHlwZSk7DQo+ID4gKyAgICAgaWYgKGJ1Zi0+aW5kZXggPj0gdnEtPm51bV9idWZm ZXJzKSB7DQo+IA0KPiBXaHkgdGhpcyB0ZXN0PyBUaGVyZSBzaG91bGQgYmUgbm8gbmVlZCBmb3Ig dGhpcyBmdW5jdGlvbiwNCj4gdjRsMl9tMm1faW9jdGxfcWJ1ZigpIHNob3VsZCBkbyB0aGUgcmln aHQgdGhpbmcgaGVyZS4NCj4gDQo+ID4gKyAgICAgICAgICAgICBkZXZfZXJyKGRldiwgImJ1ZmZl ciBpbmRleCBvdXQgb2YgcmFuZ2VcbiIpOw0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5W QUw7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gdjRsMl9tMm1fcWJ1Zihm aWxlLCBmaC0+bTJtX2N0eCwgYnVmKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBt eGNfanBlZ19kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCj4gPiArICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZikNCj4gPiArew0KPiA+ICsg ICAgIHN0cnVjdCB2NGwyX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsNCj4gPiArICAgICBz dHJ1Y3QgbXhjX2pwZWdfY3R4ICpjdHggPSBteGNfanBlZ19maF90b19jdHgocHJpdik7DQo+ID4g KyAgICAgc3RydWN0IGRldmljZSAqZGV2ID0gY3R4LT5teGNfanBlZy0+ZGV2Ow0KPiA+ICsgICAg IGludCBudW1fc3JjX3JlYWR5ID0gdjRsMl9tMm1fbnVtX3NyY19idWZzX3JlYWR5KGZoLT5tMm1f Y3R4KTsNCj4gPiArICAgICBpbnQgcmV0Ow0KPiA+ICsNCj4gPiArICAgICBkZXZfZGJnKGRldiwg IkRRQlVGIHR5cGU9JWQsIGluZGV4PSVkIiwgYnVmLT50eXBlLCBidWYtDQo+ID4gPmluZGV4KTsN Cj4gPiArICAgICBpZiAoY3R4LT5zdG9wcGluZyA9PSAxICAmJiBudW1fc3JjX3JlYWR5ID09IDAp IHsNCj4gPiArICAgICAgICAgICAgIC8qIE5vIG1vcmUgc3JjIGJ1ZnMsIG5vdGlmeSBhcHAgRU9T ICovDQo+ID4gKyAgICAgICAgICAgICBub3RpZnlfZW9zKGN0eCk7DQo+ID4gKyAgICAgICAgICAg ICBjdHgtPnN0b3BwaW5nID0gMDsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIHJldCA9 IHY0bDJfbTJtX2RxYnVmKGZpbGUsIGZoLT5tMm1fY3R4LCBidWYpOw0KPiA+ICsgICAgIGJ1Zi0+ ZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7DQo+IA0KPiBUaGlzIGxpbmUgYmVsb25ncyBpbiBteGNf anBlZ19idWZfcHJlcGFyZSgpLg0KPiANCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIHJldDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyBteGNf anBlZ19pb2N0bF9vcHMgPSB7DQo+ID4gKyAgICAgLnZpZGlvY19xdWVyeWNhcCAgICAgICAgICAg ICAgICA9IG14Y19qcGVnX3F1ZXJ5Y2FwLA0KPiA+ICsgICAgIC52aWRpb2NfZW51bV9mbXRfdmlk X2NhcCAgICAgICAgPSBteGNfanBlZ19lbnVtX2ZtdF92aWRfY2FwLA0KPiA+ICsgICAgIC52aWRp b2NfZW51bV9mbXRfdmlkX291dCAgICAgICAgPSBteGNfanBlZ19lbnVtX2ZtdF92aWRfb3V0LA0K PiA+ICsNCj4gPiArICAgICAudmlkaW9jX3RyeV9mbXRfdmlkX2NhcF9tcGxhbmUgID0gbXhjX2pw ZWdfdHJ5X2ZtdF92aWRfY2FwLA0KPiA+ICsgICAgIC52aWRpb2NfdHJ5X2ZtdF92aWRfb3V0X21w bGFuZSAgPSBteGNfanBlZ190cnlfZm10X3ZpZF9vdXQsDQo+ID4gKw0KPiA+ICsgICAgIC52aWRp b2Nfc19mbXRfdmlkX2NhcF9tcGxhbmUgICAgPSBteGNfanBlZ19zX2ZtdF92aWRfY2FwLA0KPiA+ ICsgICAgIC52aWRpb2Nfc19mbXRfdmlkX291dF9tcGxhbmUgICAgPSBteGNfanBlZ19zX2ZtdF92 aWRfb3V0LA0KPiA+ICsNCj4gPiArICAgICAudmlkaW9jX2dfZm10X3ZpZF9jYXBfbXBsYW5lICAg ID0gbXhjX2pwZWdfZ19mbXRfdmlkLA0KPiA+ICsgICAgIC52aWRpb2NfZ19mbXRfdmlkX291dF9t cGxhbmUgICAgPSBteGNfanBlZ19nX2ZtdF92aWQsDQo+ID4gKw0KPiA+ICsgICAgIC52aWRpb2Nf c3Vic2NyaWJlX2V2ZW50ICAgICAgICAgPSBteGNfanBlZ19zdWJzY3JpYmVfZXZlbnQsDQo+ID4g KyAgICAgLnZpZGlvY191bnN1YnNjcmliZV9ldmVudCAgICAgICA9IHY0bDJfZXZlbnRfdW5zdWJz Y3JpYmUsDQo+ID4gKw0KPiA+ICsgICAgIC52aWRpb2NfdHJ5X2RlY29kZXJfY21kICAgICAgICAg PSBteGNfanBlZ190cnlfZGVjb2Rlcl9jbWQsDQo+IA0KPiBUaGlzIGNhbiBiZSByZXBsYWNlZCBi eSB2NGwyX20ybV9pb2N0bF90cnlfZGVjb2Rlcl9jbWQNCj4gDQo+ID4gKyAgICAgLnZpZGlvY19k ZWNvZGVyX2NtZCAgICAgICAgICAgICA9IG14Y19qcGVnX2RlY29kZXJfY21kLA0KPiA+ICsgICAg IC52aWRpb2NfdHJ5X2VuY29kZXJfY21kICAgICAgICAgPSBteGNfanBlZ190cnlfZW5jb2Rlcl9j bWQsDQo+IA0KPiBhbmQgdGhpcyBieSB2NGwyX20ybV9pb2N0bF90cnlfZW5jb2Rlcl9jbWQuDQo+ IA0KPiA+ICsgICAgIC52aWRpb2NfZW5jb2Rlcl9jbWQgICAgICAgICAgICAgPSBteGNfanBlZ19l bmNvZGVyX2NtZCwNCj4gPiArDQo+ID4gKyAgICAgLnZpZGlvY19xYnVmICAgICAgICAgICAgICAg ICAgICA9IG14Y19qcGVnX3FidWYsDQo+ID4gKyAgICAgLnZpZGlvY19kcWJ1ZiAgICAgICAgICAg ICAgICAgICA9IG14Y19qcGVnX2RxYnVmLA0KPiA+ICsNCj4gPiArICAgICAudmlkaW9jX2NyZWF0 ZV9idWZzICAgICAgICAgICAgID0gdjRsMl9tMm1faW9jdGxfY3JlYXRlX2J1ZnMsDQo+ID4gKyAg ICAgLnZpZGlvY19wcmVwYXJlX2J1ZiAgICAgICAgICAgICA9IHY0bDJfbTJtX2lvY3RsX3ByZXBh cmVfYnVmLA0KPiA+ICsgICAgIC52aWRpb2NfcmVxYnVmcyAgICAgICAgICAgICAgICAgPSB2NGwy X20ybV9pb2N0bF9yZXFidWZzLA0KPiA+ICsgICAgIC52aWRpb2NfcXVlcnlidWYgICAgICAgICAg ICAgICAgPSB2NGwyX20ybV9pb2N0bF9xdWVyeWJ1ZiwNCj4gPiArICAgICAudmlkaW9jX2V4cGJ1 ZiAgICAgICAgICAgICAgICAgID0gdjRsMl9tMm1faW9jdGxfZXhwYnVmLA0KPiA+ICsgICAgIC52 aWRpb2Nfc3RyZWFtb24gICAgICAgICAgICAgICAgPSB2NGwyX20ybV9pb2N0bF9zdHJlYW1vbiwN Cj4gPiArICAgICAudmlkaW9jX3N0cmVhbW9mZiAgICAgICAgICAgICAgID0gdjRsMl9tMm1faW9j dGxfc3RyZWFtb2ZmLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGludCBteGNfanBlZ19y ZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IG14Y19q cGVnX2RldiAqbXhjX2pwZWcgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KPiA+ICsgICAgIHN0cnVj dCBteGNfanBlZ19jdHggKmN0eCA9IG14Y19qcGVnX2ZoX3RvX2N0eChmaWxlLQ0KPiA+ID5wcml2 YXRlX2RhdGEpOw0KPiA+ICsgICAgIHN0cnVjdCBkZXZpY2UgKmRldiA9IG14Y19qcGVnLT5kZXY7 DQo+ID4gKw0KPiA+ICsgICAgIG11dGV4X2xvY2soJm14Y19qcGVnLT5sb2NrKTsNCj4gPiArICAg ICBpZiAobXhjX2pwZWctPm1vZGUgPT0gTVhDX0pQRUdfREVDT0RFKQ0KPiA+ICsgICAgICAgICAg ICAgZGV2X2RiZyhkZXYsICJSZWxlYXNlIEpQRUcgZGVjb2RlciBpbnN0YW5jZSBvbiBzbG90DQo+ ID4gJWQuIiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgY3R4LT5zbG90KTsNCj4gPiArICAg ICBlbHNlDQo+ID4gKyAgICAgICAgICAgICBkZXZfZGJnKGRldiwgIlJlbGVhc2UgSlBFRyBlbmNv ZGVyIGluc3RhbmNlIG9uIHNsb3QNCj4gPiAlZC4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICBjdHgtPnNsb3QpOw0KPiA+ICsgICAgIHY0bDJfbTJtX2N0eF9yZWxlYXNlKGN0eC0+ZmgubTJt X2N0eCk7DQo+ID4gKyAgICAgdjRsMl9maF9kZWwoJmN0eC0+ZmgpOw0KPiA+ICsgICAgIHY0bDJf ZmhfZXhpdCgmY3R4LT5maCk7DQo+ID4gKyAgICAga2ZyZWUoY3R4KTsNCj4gPiArICAgICBtdXRl eF91bmxvY2soJm14Y19qcGVnLT5sb2NrKTsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIDA7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlv bnMgbXhjX2pwZWdfZm9wcyA9IHsNCj4gPiArICAgICAub3duZXIgICAgICAgICAgPSBUSElTX01P RFVMRSwNCj4gPiArICAgICAub3BlbiAgICAgICAgICAgPSBteGNfanBlZ19vcGVuLA0KPiA+ICsg ICAgIC5yZWxlYXNlICAgICAgICA9IG14Y19qcGVnX3JlbGVhc2UsDQo+ID4gKyAgICAgLnBvbGwg ICAgICAgICAgID0gdjRsMl9tMm1fZm9wX3BvbGwsDQo+ID4gKyAgICAgLnVubG9ja2VkX2lvY3Rs ID0gdmlkZW9faW9jdGwyLA0KPiA+ICsgICAgIC5tbWFwICAgICAgICAgICA9IHY0bDJfbTJtX2Zv cF9tbWFwLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCB2NGwyX20ybV9vcHMg bXhjX2pwZWdfbTJtX29wcyA9IHsNCj4gPiArICAgICAuZGV2aWNlX3J1biAgICAgPSBteGNfanBl Z19kZXZpY2VfcnVuLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgbXhjX2pwZWdf ZGV0YWNoX3BtX2RvbWFpbnMoc3RydWN0IG14Y19qcGVnX2RldiAqanBlZykNCj4gPiArew0KPiA+ ICsgICAgIGludCBpOw0KPiA+ICsNCj4gPiArICAgICBmb3IgKGkgPSAwOyBpIDwganBlZy0+bnVt X2RvbWFpbnM7IGkrKykgew0KPiA+ICsgICAgICAgICAgICAgaWYgKGpwZWctPnBkX2xpbmtbaV0g JiYgIUlTX0VSUihqcGVnLT5wZF9saW5rW2ldKSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ZGV2aWNlX2xpbmtfZGVsKGpwZWctPnBkX2xpbmtbaV0pOw0KPiA+ICsgICAgICAgICAgICAgaWYg KGpwZWctPnBkX2RldltpXSAmJiAhSVNfRVJSKGpwZWctPnBkX2RldltpXSkpDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgIGRldl9wbV9kb21haW5fZGV0YWNoKGpwZWctPnBkX2RldltpXSwgdHJ1 ZSk7DQo+ID4gKyAgICAgICAgICAgICBqcGVnLT5wZF9kZXZbaV0gPSBOVUxMOw0KPiA+ICsgICAg ICAgICAgICAganBlZy0+cGRfbGlua1tpXSA9IE5VTEw7DQo+ID4gKyAgICAgfQ0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgaW50IG14Y19qcGVnX2F0dGFjaF9wbV9kb21haW5zKHN0cnVjdCBt eGNfanBlZ19kZXYgKmpwZWcpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYg PSBqcGVnLT5kZXY7DQo+ID4gKyAgICAgc3RydWN0IGRldmljZV9ub2RlICpucCA9IGpwZWctPnBk ZXYtPmRldi5vZl9ub2RlOw0KPiA+ICsgICAgIGludCBpOw0KPiA+ICsgICAgIGludCByZXQ7DQo+ ID4gKw0KPiA+ICsgICAgIGpwZWctPm51bV9kb21haW5zID0gb2ZfY291bnRfcGhhbmRsZV93aXRo X2FyZ3MobnAsICJwb3dlci0NCj4gPiBkb21haW5zIiwNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIjcG93ZXItDQo+ID4gZG9tYWluLWNl bGxzIik7DQo+ID4gKyAgICAgaWYgKGpwZWctPm51bV9kb21haW5zIDwgMCkgew0KPiA+ICsgICAg ICAgICAgICAgZGV2X2VycihkZXYsICJObyBwb3dlciBkb21haW5zIGRlZmluZWQgZm9yIGpwZWcN Cj4gPiBub2RlXG4iKTsNCj4gPiArICAgICAgICAgICAgIHJldHVybiBqcGVnLT5udW1fZG9tYWlu czsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIGpwZWctPnBkX2RldiA9IGRldm1fa21h bGxvY19hcnJheShkZXYsIGpwZWctPm51bV9kb21haW5zLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoKmpwZWctPnBkX2RldiksDQo+ID4gR0ZQX0tF Uk5FTCk7DQo+ID4gKyAgICAgaWYgKCFqcGVnLT5wZF9kZXYpDQo+ID4gKyAgICAgICAgICAgICBy ZXR1cm4gLUVOT01FTTsNCj4gPiArDQo+ID4gKyAgICAganBlZy0+cGRfbGluayA9IGRldm1fa21h bGxvY19hcnJheShkZXYsIGpwZWctPm51bV9kb21haW5zLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCpqcGVnLT5wZF9saW5rKSwNCj4gPiBHRlBf S0VSTkVMKTsNCj4gPiArICAgICBpZiAoIWpwZWctPnBkX2xpbmspDQo+ID4gKyAgICAgICAgICAg ICByZXR1cm4gLUVOT01FTTsNCj4gPiArDQo+ID4gKyAgICAgZm9yIChpID0gMDsgaSA8IGpwZWct Pm51bV9kb21haW5zOyBpKyspIHsNCj4gPiArICAgICAgICAgICAgIGpwZWctPnBkX2RldltpXSA9 IGRldl9wbV9kb21haW5fYXR0YWNoX2J5X2lkKGRldiwgaSk7DQo+ID4gKyAgICAgICAgICAgICBp ZiAoSVNfRVJSKGpwZWctPnBkX2RldltpXSkpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAg cmV0ID0gUFRSX0VSUihqcGVnLT5wZF9kZXZbaV0pOw0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICBnb3RvIGZhaWw7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKw0KPiA+ICsgICAgICAgICAg ICAganBlZy0+cGRfbGlua1tpXSA9IGRldmljZV9saW5rX2FkZChkZXYsIGpwZWctDQo+ID4gPnBk X2RldltpXSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgRExfRkxBR19TVEFURUxFU1MNCj4gPiB8DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIERMX0ZMQUdfUE1fUlVOVElNRQ0KPiA+IHwNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRExfRkxB R19SUE1fQUNUSVZFDQo+ID4gKTsNCj4gPiArICAgICAgICAgICAgIGlmIChJU19FUlIoanBlZy0+ cGRfbGlua1tpXSkpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgcmV0ID0gUFRSX0VSUihq cGVnLT5wZF9saW5rW2ldKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOw0K PiA+ICsgICAgICAgICAgICAgfQ0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgcmV0dXJu IDA7DQo+ID4gK2ZhaWw6DQo+ID4gKyAgICAgbXhjX2pwZWdfZGV0YWNoX3BtX2RvbWFpbnMoanBl Zyk7DQo+ID4gKyAgICAgcmV0dXJuIHJldDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlu dCBteGNfanBlZ19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiA+ICt7DQo+ ID4gKyAgICAgc3RydWN0IG14Y19qcGVnX2RldiAqanBlZzsNCj4gPiArICAgICBzdHJ1Y3QgZGV2 aWNlICpkZXYgPSAmcGRldi0+ZGV2Ow0KPiA+ICsgICAgIHN0cnVjdCByZXNvdXJjZSAqcmVzOw0K PiA+ICsgICAgIGludCBkZWNfaXJxOw0KPiA+ICsgICAgIGludCByZXQ7DQo+ID4gKyAgICAgaW50 IG1vZGU7DQo+ID4gKyAgICAgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCAqb2ZfaWQ7DQo+ID4g KyAgICAgdW5zaWduZWQgaW50IHNsb3Q7DQo+ID4gKw0KPiA+ICsgICAgIG9mX2lkID0gb2ZfbWF0 Y2hfbm9kZShteGNfanBlZ19tYXRjaCwgZGV2LT5vZl9ub2RlKTsNCj4gPiArICAgICBtb2RlID0g KGludCkodTY0KW9mX2lkLT5kYXRhOw0KPiA+ICsNCj4gPiArICAgICBqcGVnID0gZGV2bV9remFs bG9jKGRldiwgc2l6ZW9mKHN0cnVjdCBteGNfanBlZ19kZXYpLA0KPiA+IEdGUF9LRVJORUwpOw0K PiA+ICsgICAgIGlmICghanBlZykNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRU5PTUVNOw0K PiA+ICsNCj4gPiArICAgICBtdXRleF9pbml0KCZqcGVnLT5sb2NrKTsNCj4gPiArICAgICBzcGlu X2xvY2tfaW5pdCgmanBlZy0+aHdfbG9jayk7DQo+ID4gKw0KPiA+ICsgICAgIHJldCA9IGRtYV9z ZXRfbWFza19hbmRfY29oZXJlbnQoZGV2LCBETUFfQklUX01BU0soMzIpKTsNCj4gPiArICAgICBp ZiAocmV0KSB7DQo+ID4gKyAgICAgICAgICAgICBkZXZfZXJyKCZwZGV2LT5kZXYsICJObyBzdWl0 YWJsZSBETUEgYXZhaWxhYmxlLlxuIik7DQo+ID4gKyAgICAgICAgICAgICBnb3RvIGVycl9pcnE7 DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICByZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3Vy Y2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOw0KPiA+ICsgICAgIGpwZWctPmJhc2VfcmVnID0g ZGV2bV9pb3JlbWFwX3Jlc291cmNlKCZwZGV2LT5kZXYsIHJlcyk7DQo+ID4gKyAgICAgaWYgKElT X0VSUihqcGVnLT5iYXNlX3JlZykpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihq cGVnLT5iYXNlX3JlZyk7DQo+ID4gKw0KPiA+ICsgICAgIGZvciAoc2xvdCA9IDA7IHNsb3QgPCBN WENfTUFYX1NMT1RTOyBzbG90KyspIHsNCj4gPiArICAgICAgICAgICAgIGRlY19pcnEgPSBwbGF0 Zm9ybV9nZXRfaXJxKHBkZXYsIHNsb3QpOw0KPiA+ICsgICAgICAgICAgICAgaWYgKGRlY19pcnEg PCAwKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGRldl9lcnIoJnBkZXYtPmRldiwgIkZh aWxlZCB0byBnZXQgaXJxICVkXG4iLA0KPiA+IGRlY19pcnEpOw0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICByZXQgPSBkZWNfaXJxOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBnb3RvIGVy cl9pcnE7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICByZXQgPSBkZXZt X3JlcXVlc3RfaXJxKCZwZGV2LT5kZXYsIGRlY19pcnEsDQo+ID4gbXhjX2pwZWdfZGVjX2lycSwN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMCwgcGRldi0+bmFtZSwg anBlZyk7DQo+ID4gKyAgICAgICAgICAgICBpZiAocmV0KSB7DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgIGRldl9lcnIoJnBkZXYtPmRldiwgIkZhaWxlZCB0byByZXF1ZXN0IGlycSAlZA0KPiA+ ICglZClcbiIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVjX2lycSwgcmV0 KTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJfaXJxOw0KPiA+ICsgICAgICAg ICAgICAgfQ0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAganBlZy0+cGRldiA9IHBkZXY7 DQo+ID4gKyAgICAganBlZy0+ZGV2ID0gZGV2Ow0KPiA+ICsgICAgIGpwZWctPm1vZGUgPSBtb2Rl Ow0KPiA+ICsNCj4gPiArICAgICByZXQgPSBteGNfanBlZ19hdHRhY2hfcG1fZG9tYWlucyhqcGVn KTsNCj4gPiArICAgICBpZiAocmV0IDwgMCkgew0KPiA+ICsgICAgICAgICAgICAgZGV2X2Vycihk ZXYsICJmYWlsZWQgdG8gYXR0YWNoIHBvd2VyIGRvbWFpbnMgJWRcbiIsDQo+ID4gcmV0KTsNCj4g PiArICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAg ICAvKiB2NGwyICovDQo+ID4gKyAgICAgcmV0ID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoZGV2LCAm anBlZy0+djRsMl9kZXYpOw0KPiA+ICsgICAgIGlmIChyZXQpIHsNCj4gPiArICAgICAgICAgICAg IGRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIHJlZ2lzdGVyIHY0bDIgZGV2aWNlXG4iKTsNCj4gPiAr ICAgICAgICAgICAgIGdvdG8gZXJyX3JlZ2lzdGVyOw0KPiA+ICsgICAgIH0NCj4gPiArICAgICBq cGVnLT5tMm1fZGV2ID0gdjRsMl9tMm1faW5pdCgmbXhjX2pwZWdfbTJtX29wcyk7DQo+ID4gKyAg ICAgaWYgKElTX0VSUihqcGVnLT5tMm1fZGV2KSkgew0KPiA+ICsgICAgICAgICAgICAgZGV2X2Vy cihkZXYsICJmYWlsZWQgdG8gcmVnaXN0ZXIgdjRsMiBkZXZpY2VcbiIpOw0KPiA+ICsgICAgICAg ICAgICAgZ290byBlcnJfbTJtOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAganBlZy0+ ZGVjX3ZkZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsNCj4gPiArICAgICBpZiAoIWpwZWctPmRl Y192ZGV2KSB7DQo+ID4gKyAgICAgICAgICAgICBkZXZfZXJyKGRldiwgImZhaWxlZCB0byByZWdp c3RlciB2NGwyIGRldmljZVxuIik7DQo+ID4gKyAgICAgICAgICAgICBnb3RvIGVycl92ZGV2X2Fs bG9jOw0KPiA+ICsgICAgIH0NCj4gPiArICAgICBpZiAobW9kZSA9PSBNWENfSlBFR19FTkNPREUp DQo+ID4gKyAgICAgICAgICAgICBzbnByaW50ZihqcGVnLT5kZWNfdmRldi0+bmFtZSwNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihqcGVnLT5kZWNfdmRldi0+bmFtZSksDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICAiJXMtZW5jIiwgTVhDX0pQRUdfTkFNRSk7DQo+ID4gKyAg ICAgZWxzZQ0KPiA+ICsgICAgICAgICAgICAgc25wcmludGYoanBlZy0+ZGVjX3ZkZXYtPm5hbWUs DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICBzaXplb2YoanBlZy0+ZGVjX3ZkZXYtPm5hbWUp LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIiVzLWRlYyIsIE1YQ19KUEVHX05BTUUpOw0K PiA+ICsNCj4gPiArICAgICBqcGVnLT5kZWNfdmRldi0+Zm9wcyA9ICZteGNfanBlZ19mb3BzOw0K PiA+ICsgICAgIGpwZWctPmRlY192ZGV2LT5pb2N0bF9vcHMgPSAmbXhjX2pwZWdfaW9jdGxfb3Bz Ow0KPiA+ICsgICAgIGpwZWctPmRlY192ZGV2LT5taW5vciA9IC0xOw0KPiA+ICsgICAgIGpwZWct PmRlY192ZGV2LT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7DQo+ID4gKyAgICAganBl Zy0+ZGVjX3ZkZXYtPmxvY2sgPSAmanBlZy0+bG9jazsgLyogbG9jayBmb3IgaW9jdGwNCj4gPiBz ZXJpYWxpemF0aW9uICovDQo+ID4gKyAgICAganBlZy0+ZGVjX3ZkZXYtPnY0bDJfZGV2ID0gJmpw ZWctPnY0bDJfZGV2Ow0KPiA+ICsgICAgIGpwZWctPmRlY192ZGV2LT52ZmxfZGlyID0gVkZMX0RJ Ul9NMk07DQo+ID4gKyAgICAganBlZy0+ZGVjX3ZkZXYtPmRldmljZV9jYXBzID0gVjRMMl9DQVBf U1RSRUFNSU5HIHwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFY0 TDJfQ0FQX1ZJREVPX00yTV9NUExBTkU7DQo+ID4gKw0KPiA+ICsgICAgIHJldCA9IHZpZGVvX3Jl Z2lzdGVyX2RldmljZShqcGVnLT5kZWNfdmRldiwgVkZMX1RZUEVfVklERU8sDQo+ID4gLTEpOw0K PiA+ICsgICAgIGlmIChyZXQpIHsNCj4gPiArICAgICAgICAgICAgIGRldl9lcnIoZGV2LCAiZmFp bGVkIHRvIHJlZ2lzdGVyIHZpZGVvIGRldmljZVxuIik7DQo+ID4gKyAgICAgICAgICAgICBnb3Rv IGVycl92ZGV2X3JlZ2lzdGVyOw0KPiA+ICsgICAgIH0NCj4gPiArICAgICB2aWRlb19zZXRfZHJ2 ZGF0YShqcGVnLT5kZWNfdmRldiwganBlZyk7DQo+ID4gKyAgICAgaWYgKG1vZGUgPT0gTVhDX0pQ RUdfRU5DT0RFKQ0KPiA+ICsgICAgICAgICAgICAgdjRsMl9pbmZvKCZqcGVnLT52NGwyX2RldiwN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgICAiZW5jb2RlciBkZXZpY2UgcmVnaXN0ZXJlZCBh cyAvZGV2L3ZpZGVvJWQNCj4gPiAoJWQsJWQpXG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgIGpwZWctPmRlY192ZGV2LT5udW0sIFZJREVPX01BSk9SLA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgIGpwZWctPmRlY192ZGV2LT5taW5vcik7DQo+ID4gKyAgICAgZWxzZQ0KPiA+ICsg ICAgICAgICAgICAgdjRsMl9pbmZvKCZqcGVnLT52NGwyX2RldiwNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAiZGVjb2RlciBkZXZpY2UgcmVnaXN0ZXJlZCBhcyAvZGV2L3ZpZGVvJWQNCj4g PiAoJWQsJWQpXG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGpwZWctPmRlY192ZGV2 LT5udW0sIFZJREVPX01BSk9SLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgIGpwZWctPmRl Y192ZGV2LT5taW5vcik7DQo+ID4gKw0KPiA+ICsgICAgIHBsYXRmb3JtX3NldF9kcnZkYXRhKHBk ZXYsIGpwZWcpOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gMDsNCj4gPiArDQo+ID4gK2Vycl92 ZGV2X3JlZ2lzdGVyOg0KPiA+ICsgICAgIHZpZGVvX2RldmljZV9yZWxlYXNlKGpwZWctPmRlY192 ZGV2KTsNCj4gPiArDQo+ID4gK2Vycl92ZGV2X2FsbG9jOg0KPiA+ICsgICAgIHY0bDJfbTJtX3Jl bGVhc2UoanBlZy0+bTJtX2Rldik7DQo+ID4gKw0KPiA+ICtlcnJfbTJtOg0KPiA+ICsgICAgIHY0 bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmpwZWctPnY0bDJfZGV2KTsNCj4gPiArDQo+ID4gK2Vycl9y ZWdpc3RlcjoNCj4gPiArZXJyX2lycToNCj4gPiArICAgICByZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgaW50IG14Y19qcGVnX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQ0KPiA+ICt7DQo+ID4gKyAgICAgdW5zaWduZWQgaW50IHNsb3Q7DQo+ID4gKyAg ICAgc3RydWN0IG14Y19qcGVnX2RldiAqanBlZyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYp Ow0KPiA+ICsNCj4gPiArICAgICBmb3IgKHNsb3QgPSAwOyBzbG90IDwgTVhDX01BWF9TTE9UUzsg c2xvdCsrKQ0KPiA+ICsgICAgICAgICAgICAgbXhjX2pwZWdfZnJlZV9zbG90X2RhdGEoanBlZywg c2xvdCk7DQo+ID4gKw0KPiA+ICsgICAgIHZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGpwZWctPmRl Y192ZGV2KTsNCj4gPiArICAgICB2aWRlb19kZXZpY2VfcmVsZWFzZShqcGVnLT5kZWNfdmRldik7 DQo+ID4gKyAgICAgdjRsMl9tMm1fcmVsZWFzZShqcGVnLT5tMm1fZGV2KTsNCj4gPiArICAgICB2 NGwyX2RldmljZV91bnJlZ2lzdGVyKCZqcGVnLT52NGwyX2Rldik7DQo+ID4gKyAgICAgbXhjX2pw ZWdfZGV0YWNoX3BtX2RvbWFpbnMoanBlZyk7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiAwOw0K PiA+ICt9DQo+ID4gKw0KPiA+ICtNT0RVTEVfREVWSUNFX1RBQkxFKG9mLCBteGNfanBlZ19tYXRj aCk7DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBteGNfanBlZ19k cml2ZXIgPSB7DQo+ID4gKyAgICAgLnByb2JlID0gbXhjX2pwZWdfcHJvYmUsDQo+ID4gKyAgICAg LnJlbW92ZSA9IG14Y19qcGVnX3JlbW92ZSwNCj4gPiArICAgICAuZHJpdmVyID0gew0KPiA+ICsg ICAgICAgICAgICAgLm5hbWUgPSAibXhjLWpwZWciLA0KPiA+ICsgICAgICAgICAgICAgLm9mX21h dGNoX3RhYmxlID0gbXhjX2pwZWdfbWF0Y2gsDQo+ID4gKyAgICAgfSwNCj4gPiArfTsNCj4gPiAr bW9kdWxlX3BsYXRmb3JtX2RyaXZlcihteGNfanBlZ19kcml2ZXIpOw0KPiA+ICsNCj4gPiArTU9E VUxFX0FVVEhPUigiWmhlbmd5dSBTaGVuIDx6aGVuZ3l1LnNoZW5fMUBueHAuY29tPiIpOw0KPiA+ ICtNT0RVTEVfQVVUSE9SKCJNaXJlbGEgUmFidWxlYSA8bWlyZWxhLnJhYnVsZWFAbnhwLmNvbT4i KTsNCj4gPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJWNEwyIGRyaXZlciBmb3IgaS5NWDggUVhQL1FN IEpQRUcNCj4gPiBlbmNvZGVyL2RlY29kZXIiKTsNCj4gPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2 MiIpOw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2lteC1qcGVnL214 Yy1qcGVnLmgNCj4gPiBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vaW14LWpwZWcvbXhjLWpwZWcu aA0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi5lZjE2 NzBkYWZlYjQNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0 Zm9ybS9pbXgtanBlZy9teGMtanBlZy5oDQo+ID4gQEAgLTAsMCArMSwxODQgQEANCj4gPiArLyog U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8NCj4gPiArLyoNCj4gPiArICogaS5N WDhRWFAvaS5NWDhRTSBKUEVHIGVuY29kZXIvZGVjb2RlciB2NGwyIGRyaXZlcg0KPiA+ICsgKg0K PiA+ICsgKiBDb3B5cmlnaHQgMjAxOC0yMDE5IE5YUA0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNp bmNsdWRlIDxtZWRpYS92NGwyLWN0cmxzLmg+DQo+ID4gKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRl dmljZS5oPg0KPiA+ICsjaW5jbHVkZSA8bWVkaWEvdjRsMi1maC5oPg0KPiA+ICsNCj4gPiArI2lm bmRlZiBfTVhDX0pQRUdfQ09SRV9IDQo+ID4gKyNkZWZpbmUgX01YQ19KUEVHX0NPUkVfSA0KPiA+ ICsNCj4gPiArI2RlZmluZSBNWENfSlBFR19OQU1FICAgICAgICAgICAgICAgICAgICAgICAgIm14 Yy1qcGVnIg0KPiA+ICsjZGVmaW5lIE1YQ19KUEVHX0ZNVF9UWVBFX0VOQyAgICAgICAgICAgICAg ICAwDQo+ID4gKyNkZWZpbmUgTVhDX0pQRUdfRk1UX1RZUEVfUkFXICAgICAgICAgICAgICAgIDEN Cj4gPiArI2RlZmluZSBNWENfSlBFR19ERUZBVUxUX1dJRFRIICAgICAgICAgICAgICAgMTI4MA0K PiA+ICsjZGVmaW5lIE1YQ19KUEVHX0RFRkFVTFRfSEVJR0hUICAgICAgICAgICAgICA3MjANCj4g PiArI2RlZmluZSBNWENfSlBFR19ERUZBVUxUX1BGTVQgICAgICAgICAgICAgICAgVjRMMl9QSVhf Rk1UX1JHQjI0DQo+ID4gKyNkZWZpbmUgTVhDX0pQRUdfTUlOX1dJRFRIICAgICAgICAgICA2NA0K PiA+ICsjZGVmaW5lIE1YQ19KUEVHX01JTl9IRUlHSFQgICAgICAgICAgNjQNCj4gPiArI2RlZmlu ZSBNWENfSlBFR19NQVhfV0lEVEggICAgICAgICAgIDB4MjAwMA0KPiA+ICsjZGVmaW5lIE1YQ19K UEVHX01BWF9IRUlHSFQgICAgICAgICAgMHgyMDAwDQo+ID4gKyNkZWZpbmUgTVhDX0pQRUdfTUFY X0NGR19TVFJFQU0gICAgICAgICAgICAgIDB4MTAwMA0KPiA+ICsjZGVmaW5lIE1YQ19KUEVHX0hf QUxJR04gICAgICAgICAgICAgMw0KPiA+ICsjZGVmaW5lIE1YQ19KUEVHX1dfQUxJR04gICAgICAg ICAgICAgMw0KPiA+ICsjZGVmaW5lIE1YQ19KUEVHX01BWF9TSVpFSU1BR0UgICAgICAgICAgICAg ICAweEZGRkZGQzAwDQo+ID4gKyNkZWZpbmUgTVhDX0pQRUdfTUFYX1BMQU5FUyAgICAgICAgICAy DQo+ID4gKw0KPiA+ICtlbnVtIG14Y19qcGVnX2VuY19zdGF0ZSB7DQo+ID4gKyAgICAgTVhDX0pQ RUdfRU5DT0RJTkcgICAgICAgPSAwLCAvKiBqcGVnIGVuY29kZSBwaGFzZSAqLw0KPiA+ICsgICAg IE1YQ19KUEVHX0VOQ19DT05GICAgICAgID0gMSwgLyoganBlZyBlbmNvZGVyIGNvbmZpZyBwaGFz ZSAqLw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArZW51bSBteGNfanBlZ19tb2RlIHsNCj4gPiArICAg ICBNWENfSlBFR19ERUNPREUgPSAwLCAvKiBqcGVnIGRlY29kZSBtb2RlICovDQo+ID4gKyAgICAg TVhDX0pQRUdfRU5DT0RFID0gMSwgLyoganBlZyBlbmNvZGUgbW9kZSAqLw0KPiA+ICt9Ow0KPiA+ ICsNCj4gPiArLyoqDQo+ID4gKyAqIHN0cnVjdCBqcGVnX2ZtdCAtIGRyaXZlcidzIGludGVybmFs IGNvbG9yIGZvcm1hdCBkYXRhDQo+ID4gKyAqIEBuYW1lOiAgICBmb3JtYXQgZGVzY3JpcHRpb24N Cj4gPiArICogQGZvdXJjYzogIGZvdXJjYyBjb2RlLCAwIGlmIG5vdCBhcHBsaWNhYmxlDQo+ID4g KyAqIEBkZXB0aDogICBudW1iZXIgb2YgYml0cyBwZXIgcGl4ZWwNCj4gPiArICogQGNvbHBsYW5l czogICAgICAgbnVtYmVyIG9mIGNvbG9yIHBsYW5lcyAoMSBmb3IgcGFja2VkIGZvcm1hdHMpDQo+ ID4gKyAqIEBoX2FsaWduOiBob3Jpem9udGFsIGFsaWdubWVudCBvcmRlciAoYWxpZ24gdG8gMl5o X2FsaWduKQ0KPiA+ICsgKiBAdl9hbGlnbjogdmVydGljYWwgYWxpZ25tZW50IG9yZGVyIChhbGln biB0byAyXnZfYWxpZ24pDQo+ID4gKyAqIEBmbGFnczogICBmbGFncyBkZXNjcmliaW5nIGZvcm1h dCBhcHBsaWNhYmlsaXR5DQo+ID4gKyAqLw0KPiA+ICtzdHJ1Y3QgbXhjX2pwZWdfZm10IHsNCj4g PiArICAgICBjaGFyICAgICpuYW1lOw0KPiA+ICsgICAgIHUzMiAgICAgZm91cmNjOw0KPiA+ICsg ICAgIGludCAgICAgZGVwdGg7DQo+ID4gKyAgICAgaW50ICAgICBjb2xwbGFuZXM7DQo+ID4gKyAg ICAgaW50ICAgICBoX2FsaWduOw0KPiA+ICsgICAgIGludCAgICAgdl9hbGlnbjsNCj4gPiArICAg ICB1MzIgICAgIGZsYWdzOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IG14Y19qcGVnX2Rl c2Mgew0KPiA+ICsgICAgIHUzMiBuZXh0X2Rlc2NwdF9wdHI7DQo+ID4gKyAgICAgdTMyIGJ1Zl9i YXNlMDsNCj4gPiArICAgICB1MzIgYnVmX2Jhc2UxOw0KPiA+ICsgICAgIHUzMiBsaW5lX3BpdGNo Ow0KPiA+ICsgICAgIHUzMiBzdG1fYnVmYmFzZTsNCj4gPiArICAgICB1MzIgc3RtX2J1ZnNpemU7 DQo+ID4gKyAgICAgdTMyIGltZ3NpemU7DQo+ID4gKyAgICAgdTMyIHN0bV9jdHJsOw0KPiA+ICt9 IF9fcGFja2VkOw0KPiA+ICsNCj4gPiArc3RydWN0IG14Y19qcGVnX3FfZGF0YSB7DQo+ID4gKyAg ICAgc3RydWN0IG14Y19qcGVnX2ZtdCAgICAgKmZtdDsNCj4gPiArICAgICB1MzIgICAgICAgICAg ICAgICAgICAgICBzaXplaW1hZ2VbTVhDX0pQRUdfTUFYX1BMQU5FU107DQo+ID4gKyAgICAgdTMy ICAgICAgICAgICAgICAgICAgICAgYnl0ZXNwZXJsaW5lW01YQ19KUEVHX01BWF9QTEFORVNdOw0K PiA+ICsgICAgIGludCAgICAgICAgICAgICAgICAgICAgIHc7DQo+ID4gKyAgICAgaW50ICAgICAg ICAgICAgICAgICAgICAgd19hZGp1c3RlZDsNCj4gPiArICAgICBpbnQgICAgICAgICAgICAgICAg ICAgICBoOw0KPiA+ICsgICAgIGludCAgICAgICAgICAgICAgICAgICAgIGhfYWRqdXN0ZWQ7DQo+ ID4gKyAgICAgdW5zaWduZWQgaW50ICAgICAgICAgICAgc2VxdWVuY2U7DQo+ID4gK307DQo+ID4g Kw0KPiA+ICtzdHJ1Y3QgbXhjX2pwZWdfY3R4IHsNCj4gPiArICAgICBzdHJ1Y3QgbXhjX2pwZWdf ZGV2ICAgICAgICAgICAgICpteGNfanBlZzsNCj4gPiArICAgICBzdHJ1Y3QgbXhjX2pwZWdfcV9k YXRhICAgICAgICAgIG91dF9xOw0KPiA+ICsgICAgIHN0cnVjdCBteGNfanBlZ19xX2RhdGEgICAg ICAgICAgY2FwX3E7DQo+ID4gKyAgICAgc3RydWN0IHY0bDJfZmggICAgICAgICAgICAgICAgICBm aDsNCj4gPiArICAgICBlbnVtIG14Y19qcGVnX2VuY19zdGF0ZSAgICAgICAgIGVuY19zdGF0ZTsN Cj4gPiArICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICAgICAgIHN0b3BwaW5nOw0KPiA+ ICsgICAgIHVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgc2xvdDsNCj4gPiArfTsNCj4g PiArDQo+ID4gK3N0cnVjdCBteGNfanBlZ19zbG90X2RhdGEgew0KPiA+ICsgICAgIGJvb2wgdXNl ZDsNCj4gPiArICAgICBzdHJ1Y3QgbXhjX2pwZWdfZGVzYyAqZGVzYzsgLy8gZW5jL2RlYyBkZXNj cmlwdG9yDQo+ID4gKyAgICAgc3RydWN0IG14Y19qcGVnX2Rlc2MgKmNmZ19kZXNjOyAvLyBjb25m aWd1cmF0aW9uIGRlc2NyaXB0b3INCj4gPiArICAgICB2b2lkICpjZmdfc3RyZWFtX3ZhZGRyOyAv LyBjb25maWd1cmF0aW9uIGJpdHN0cmVhbSB2aXJ0dWFsDQo+ID4gYWRkcmVzcw0KPiA+ICsgICAg IHVuc2lnbmVkIGludCBjZmdfc3RyZWFtX3NpemU7DQo+ID4gKyAgICAgZG1hX2FkZHJfdCBkZXNj X2hhbmRsZTsNCj4gPiArICAgICBkbWFfYWRkcl90IGNmZ19kZXNjX2hhbmRsZTsgLy8gY29uZmln dXJhdGlvbiBkZXNjcmlwdG9yIGRtYQ0KPiA+IGFkZHJlc3MNCj4gPiArICAgICBkbWFfYWRkcl90 IGNmZ19zdHJlYW1faGFuZGxlOyAvLyBjb25maWd1cmF0aW9uIGJpdHN0cmVhbSBkbWENCj4gPiBh ZGRyZXNzDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgbXhjX2pwZWdfZGV2IHsNCj4gPiAr ICAgICBzcGlubG9ja190ICAgICAgICAgICAgICAgICAgICAgIGh3X2xvY2s7IC8qIGhhcmR3YXJl IGFjY2Vzcw0KPiA+IGxvY2sgKi8NCj4gPiArICAgICB1bnNpZ25lZCBpbnQgICAgICAgICAgICAg ICAgICAgIG1vZGU7DQo+ID4gKyAgICAgc3RydWN0IG11dGV4ICAgICAgICAgICAgICAgICAgICBs b2NrOyAvKiB2NGwyIGlvY3Rscw0KPiA+IHNlcmlhbGl6YXRpb24gKi8NCj4gPiArICAgICBzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICAgICAgICAgICpwZGV2Ow0KPiA+ICsgICAgIHN0cnVjdCBkZXZp Y2UgICAgICAgICAgICAgICAgICAgKmRldjsNCj4gPiArICAgICB2b2lkIF9faW9tZW0gICAgICAg ICAgICAgICAgICAgICpiYXNlX3JlZzsNCj4gPiArICAgICBzdHJ1Y3QgdjRsMl9kZXZpY2UgICAg ICAgICAgICAgIHY0bDJfZGV2Ow0KPiA+ICsgICAgIHN0cnVjdCB2NGwyX20ybV9kZXYgICAgICAg ICAgICAgKm0ybV9kZXY7DQo+ID4gKyAgICAgc3RydWN0IHZpZGVvX2RldmljZSAgICAgICAgICAg ICAqZGVjX3ZkZXY7DQo+ID4gKyAgICAgc3RydWN0IG14Y19qcGVnX3Nsb3RfZGF0YSAgICAgICBz bG90X2RhdGFbTVhDX01BWF9TTE9UU107DQo+ID4gKyAgICAgaW50ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBudW1fZG9tYWluczsNCj4gPiArICAgICBzdHJ1Y3QgZGV2aWNlICAgICAgICAg ICAgICAgICAgICoqcGRfZGV2Ow0KPiA+ICsgICAgIHN0cnVjdCBkZXZpY2VfbGluayAgICAgICAg ICAgICAgKipwZF9saW5rOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArLyogSlBFRyBtYXJrZXIgaWRl bnRpZmllcnMgKi8NCj4gPiArI2RlZmluZSBTT0YwICAgICAgICAgICAgICAgICAgICAgICAgIDB4 QzANCj4gPiArI2RlZmluZSBTT0YxICAgICAgICAgICAgICAgICAgICAgICAgIDB4QzENCj4gPiAr I2RlZmluZSBTT0YyICAgICAgICAgICAgICAgICAgICAgICAgIDB4QzINCj4gPiArI2RlZmluZSBT T1MgICAgICAgICAgICAgICAgICAgICAgICAgIDB4REENCj4gPiArI2RlZmluZSBESFQgICAgICAg ICAgICAgICAgICAgICAgICAgIDB4QzQNCj4gPiArI2RlZmluZSBBUFAxNCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgMHhFRQ0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHN0cnVjdCBt eGNfanBlZ19zb2ZfY29tcCAtIEpQRUcgU3RhcnQgT2YgRnJhbWUgY29tcG9uZW50IGZpZWxkcw0K PiA+ICsgKiBAaWQ6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcG9uZW50IGlkDQo+ ID4gKyAqIEB2OiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJ0aWNhbCBzYW1wbGlu Zw0KPiA+ICsgKiBAaDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaG9yaXpvbnRhbCBz YW1wbGluZw0KPiA+ICsgKiBAcXVhbnRpemF0aW9uX3RhYmxlX25vOiAgIGlkIG9mIHF1YW50aXph dGlvbiB0YWJsZQ0KPiA+ICsgKi8NCj4gPiArc3RydWN0IG14Y19qcGVnX3NvZl9jb21wIHsNCj4g PiArICAgICB1OCBpZDsNCj4gPiArICAgICB1OCB2IDo0Ow0KPiA+ICsgICAgIHU4IGggOjQ7DQo+ ID4gKyAgICAgdTggcXVhbnRpemF0aW9uX3RhYmxlX25vOw0KPiA+ICt9IF9fcGFja2VkOw0KPiA+ ICsNCj4gPiArI2RlZmluZSBNWENfSlBFR19NQVhfQ09NUE9ORU5UUyA0DQo+ID4gKy8qKg0KPiA+ ICsgKiBzdHJ1Y3QgbXhjX2pwZWdfc29mIC0gSlBFRyBTdGFydCBPZiBGcmFtZSBtYXJrZXIgZmll bGRzDQo+ID4gKyAqIEBsZW5ndGg6ICAgICAgICAgIFN0YXJ0IG9mIEZyYW1lIGxlbmd0aA0KPiA+ ICsgKiBAcHJlY2lzaW9uOiAgICAgICAgICAgICAgIHByZWNpc2lvbiAoYml0cyBwZXIgcGl4ZWwg cGVyIGNvbG9yDQo+ID4gY29tcG9uZW50KQ0KPiA+ICsgKiBAaGVpZ2h0OiAgICAgICAgICBpbWFn ZSBoZWlnaHQNCj4gPiArICogQHdpZHRoOiAgICAgICAgICAgaW1hZ2Ugd2lkdGgNCj4gPiArICog QGNvbXBvbmVudHNfbm86ICAgbnVtYmVyIG9mIGNvbG9yIGNvbXBvbmVudHMNCj4gPiArICogQGNv bXA6ICAgICAgICAgICAgY29tcG9uZW50IGZpZWxkcyBmb3IgZWFjaCBjb2xvciBjb21wb25lbnQN Cj4gPiArICovDQo+ID4gK3N0cnVjdCBteGNfanBlZ19zb2Ygew0KPiA+ICsgICAgIHUxNiBsZW5n dGg7DQo+ID4gKyAgICAgdTggcHJlY2lzaW9uOw0KPiA+ICsgICAgIHUxNiBoZWlnaHQsIHdpZHRo Ow0KPiA+ICsgICAgIHU4IGNvbXBvbmVudHNfbm87DQo+ID4gKyAgICAgc3RydWN0IG14Y19qcGVn X3NvZl9jb21wIGNvbXBbTVhDX0pQRUdfTUFYX0NPTVBPTkVOVFNdOw0KPiA+ICt9IF9fcGFja2Vk Ow0KPiA+ICsNCj4gPiArLyoqDQo+ID4gKyAqIHN0cnVjdCBteGNfanBlZ19zb2YgLSBKUEVHIFN0 YXJ0IE9mIFNjYW4gY29tcG9uZW50IGZpZWxkcw0KPiA+ICsgKiBAaWQ6ICAgICAgICAgICAgICAg ICAgICAgIGNvbXBvbmVudCBpZA0KPiA+ICsgKiBAaHVmZm1hbl90YWJsZV9ubzogICAgICAgIGlk IG9mIHRoZSBIdWZmbWFuIHRhYmxlDQo+ID4gKyAqLw0KPiA+ICtzdHJ1Y3QgbXhjX2pwZWdfc29z X2NvbXAgew0KPiA+ICsgICAgIHU4IGlkOyAvKmNvbXBvbmVudCBpZCovDQo+ID4gKyAgICAgdTgg aHVmZm1hbl90YWJsZV9ubzsNCj4gPiArfSBfX3BhY2tlZDsNCj4gPiArDQo+ID4gKy8qKg0KPiA+ ICsgKiBzdHJ1Y3QgbXhjX2pwZWdfc29mIC0gSlBFRyBTdGFydCBPZiBTY2FuIG1hcmtlciBmaWVs ZHMNCj4gPiArICogQGxlbmd0aDogICAgICAgICAgU3RhcnQgb2YgRnJhbWUgbGVuZ3RoDQo+ID4g KyAqIEBjb21wb25lbnRzX25vOiAgIG51bWJlciBvZiBjb2xvciBjb21wb25lbnRzDQo+ID4gKyAq IEBjb21wOiAgICAgICAgICAgIFNPUyBjb21wb25lbnQgZmllbGRzIGZvciBlYWNoIGNvbG9yIGNv bXBvbmVudA0KPiA+ICsgKiBAaWdub3JhYmxlX2J5dGVzOiBpZ25vcmFibGUgYnl0ZXMNCj4gPiAr ICovDQo+ID4gK3N0cnVjdCBteGNfanBlZ19zb3Mgew0KPiA+ICsgICAgIHUxNiBsZW5ndGg7DQo+ ID4gKyAgICAgdTggY29tcG9uZW50c19ubzsNCj4gPiArICAgICBzdHJ1Y3QgbXhjX2pwZWdfc29z X2NvbXAgY29tcFtNWENfSlBFR19NQVhfQ09NUE9ORU5UU107DQo+ID4gKyAgICAgdTggaWdub3Jh YmxlX2J5dGVzWzNdOw0KPiA+ICt9IF9fcGFja2VkOw0KPiA+ICsNCj4gPiArI2VuZGlmDQo+ID4g DQo+IA0KPiBSZWdhcmRzLA0KPiANCj4gICAgICAgICBIYW5zDQo=