From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 07039C433EF for ; Thu, 2 Dec 2021 09:14:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1353088AbhLBJRV (ORCPT ); Thu, 2 Dec 2021 04:17:21 -0500 Received: from mail-db8eur05on2079.outbound.protection.outlook.com ([40.107.20.79]:47819 "EHLO EUR05-DB8-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S241170AbhLBJRV (ORCPT ); Thu, 2 Dec 2021 04:17:21 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YYXBcxlc/YvmRx1T7J6ZaM9qZtWGuNglrjEC2aLl66Y1es73fN1x4uU93896U0lPkuEKNPhjPD+43AxxuGr0/ddIfw2nSajophEjt2oFg/o1AHYKlR8B+3vRxJpp52EAb1UeFNZI2q3eEePeSNRCw5R15s0rTg38jZutubdlwj9wytysxiZkFF770791pTux4XJcCUTH8p7owPFGy58nLETGSXtphJFw4Dygw08RjwWcynZ/xDgMvGcBEUAk/vt63t1P1A8lxAxco3riRI08WWX+JEuFykRUkv09wOY64Ua3n942FMJV1XScZ7nr9lgCAVdqNfo1OSRI/T1KDVsxmw== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=sVxtnsCkfH1zxXGAHhblRK8JHVMa24/naUcWFBL+EKA=; b=kTgsUjA9xXIE6amxjUcd8WRGkmNow+ZkSdkBrd6IXO74QhJeryhvNkBPBwrbK1j9nFRSM5nkKHyBNbW/753KaFhwetGrspCulpszYmcF/msFZzvAf2h2YufcdJhvUeBPphaMnqNbxtHoJUaUIRM5qH9tbNB0/G7baKmFjoGTmYTMcCOhEizQW1gNYXZKMLpjxfWDvGqfyPSI51i6yTR/jPZy0mC1FHiGjZjfwYK3q9iwATH/cSX6CkpOGMhJplf3GGBFKQpJhbAcSIsUvIbouYpHYbh7RTdK3uWh9ckx+Ui6S+xLUbhQnsR0uSH4/B5O26NmIywumYsrNLNVG9UEJA== 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=sVxtnsCkfH1zxXGAHhblRK8JHVMa24/naUcWFBL+EKA=; b=mm8OiCXXusq/A5Yy7QLX/f0m5RWptE5ENlNeGSTTEG0I/bAATtzb7ZRp9Iah6l09P+/4AGS3TfumROdyMsxZKgUIla++BTVBePOpoopUhU37q5VYC8ZAYmM6OJ6aLFDGPCpeoAJr7jME1mprhM0XdH8YaxwGgRglX+IjcIabHpQ= Received: from AM6PR04MB6341.eurprd04.prod.outlook.com (2603:10a6:20b:d8::14) by AM7PR04MB7047.eurprd04.prod.outlook.com (2603:10a6:20b:11b::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4734.22; Thu, 2 Dec 2021 09:13:56 +0000 Received: from AM6PR04MB6341.eurprd04.prod.outlook.com ([fe80::fc3a:8aea:2c92:3886]) by AM6PR04MB6341.eurprd04.prod.outlook.com ([fe80::fc3a:8aea:2c92:3886%5]) with mapi id 15.20.4734.028; Thu, 2 Dec 2021 09:13:56 +0000 From: Ming Qian To: Hans Verkuil , "mchehab@kernel.org" , "shawnguo@kernel.org" , "robh+dt@kernel.org" , "s.hauer@pengutronix.de" CC: "kernel@pengutronix.de" , "festevam@gmail.com" , dl-linux-imx , Aisheng Dong , "linux-media@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "devicetree@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" Subject: RE: [EXT] Re: [PATCH v13 04/13] media: amphion: add vpu core driver Thread-Topic: [EXT] Re: [PATCH v13 04/13] media: amphion: add vpu core driver Thread-Index: AQHX5c0I/CqWIb6L10+FVoyKwJl1tKwe66UAgAACMzA= Date: Thu, 2 Dec 2021 09:13:55 +0000 Message-ID: References: <041cfcb9c52e2c3a4e8f5927e23f1b3c70ee44f8.1638263914.git.ming.qian@nxp.com> <1a73baa3-3cde-8f47-f154-683650e02351@xs4all.nl> In-Reply-To: <1a73baa3-3cde-8f47-f154-683650e02351@xs4all.nl> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=nxp.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 481fe058-e149-49cd-b9aa-08d9b5741155 x-ms-traffictypediagnostic: AM7PR04MB7047: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:216; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: sSlv+ChX+XXW0anU+xgqse0ofsyKikiAUFPf0aGOlqPN5+w1R16YUa5p1dIFGK67NXDpePg3CXv8awwJhotVgLFBNGbvtydgWv4ql/+S/lhNKDqhH1Tv4YBV26o1v3encDhjqYBPpHpyo5DRaCeiwRnMISYIilYXtMlc5DaUEhqMlDaJDouW+Xx/KeHYNdYxJ2uy0Rh4e6SRuHM4bkqzY5ZzONV2PHV8BLVP9ENjNI78EY1wMeapg36NC9Up+fXwd/LcmDZ7kwYAarp1e21/auRySSK734Mc5odwBgzu+D74O9vWpvFv9bGfJHp8hGI4ZKPFkzdRhAO87JnhJSK12yu9mtSxPBrt+0ZcfmIGJxdAf8HtBSpaM82dnlsyyCBnW7T3OEVrk2VekP7Ws9Mqlu7P40Mi0WK9gjWNbEIZS2o7Q9K8rSJnAu7JZBhPBpZX+BBp4EczwtoPDAy8YpgoHBKO/3Uktmaufozhbi4+exjUBiBy6+kkrcMX8bXLo7bncD/t4R0NB6y5s3rHWvdSBw9/pFiv09bBXVOwplyW9OKk/Q6+JIgDXCILPHRdnrzzumm79wneCEMFwDmZwwlDhuicHSu7g5ViU+aKRL2pVgxuiuKRNDhPJucomRiK8SNDDYtTgjol5jXhgi8tCOr6p8phGkC7ooSCL6D3y7Dw42lpKhTTHd2PiFhFx+T9qXOUGBieknxWGFJnli2OeJxdgg== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:AM6PR04MB6341.eurprd04.prod.outlook.com;PTR:;CAT:NONE;SFS:(4636009)(366004)(52536014)(316002)(7696005)(8676002)(86362001)(53546011)(508600001)(8936002)(2906002)(6506007)(44832011)(122000001)(38070700005)(5660300002)(38100700002)(71200400001)(110136005)(26005)(54906003)(55016003)(186003)(83380400001)(66476007)(76116006)(30864003)(7416002)(66946007)(33656002)(66556008)(9686003)(66446008)(64756008)(4326008)(559001)(579004);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?RXJWNWJWcDNRRUk2dUZoMVZPakxFWmFEZ01BQjh4UTZIaldJSkVjUlNBbmlj?= =?utf-8?B?aFNiOXpWU2JING5OSXIyY3o3cm9odXcyV21JWmQwdDJaSjd2Q0M3N3k1TjZl?= =?utf-8?B?MDJFRUJ5YXRYckdJaHBPdFo0U1VKUGY1OFNhVlZRQ1RTUE5oWjBkNVhzV29H?= =?utf-8?B?NUszaUhocmJuVnJYT3k4L0lmbDFHZTVORU4rU3RrdFdkcFZxQjBLS2E2bHk4?= =?utf-8?B?a3UxTkRLbzAzVGlRTUJYaldicStqS3RFMWl5eENSQjVVVHVUazcyTHA2aTJW?= =?utf-8?B?d1dZbWJzejN6WTIrcm41czVtYlQ4eXU5VHdNQ0ozNXdlS29kSk9XSFdOU242?= =?utf-8?B?ajVrWVZmUTlPa2Q2UVJOWk9jUGlWQ0RCMmJJYmNmakRxSUhnTUtKc2ovNTNw?= =?utf-8?B?dGw3ODN0TWc1aVFxd2NpUHZISTBBOFBsd3dPN290VHNKNFN3eWF4UVJEWE54?= =?utf-8?B?Mzg4YnFjQ2RPRUxvTHRKN2VwTkExOW84WkZLb25oZk53M01PS1hHTTF2bStE?= =?utf-8?B?TDRaSDhwNHpvbFpBY0wzRTg1bU5jZnBnT3ZPZ0JIYlNZdkJxZmtCZFNhZkdJ?= =?utf-8?B?SFBsd1ZjemdrbXBZWGhGWGFQZ21xOUpLc0hIQXhHanhDekMrTkw4dUR6U3A5?= =?utf-8?B?cjZ0MmFKbWgrU1BLNVhONFN2QnUrVE00Yi95Rk83NDMvWFE4Yy9wYTEydXFJ?= =?utf-8?B?MitKaUZkdmthSFB1QkhFeVpkNXJEcWptL21BdHRnTmhSeXVkcy9IdUxOVWJq?= =?utf-8?B?VmtNUHQ3NENYaWdyMnRBQ2h3SER1T2lTOE1QcmhUZ3JyekpML1dkV0FFcGVE?= =?utf-8?B?WFNGVGRqWVIyajhuQ2xnaHRvdnFSN2RCcmxPdUk4MXdtdDFraUJOWEx0dEVL?= =?utf-8?B?ZW5zSUIyUzBVMWdWeFVEUytnaldMRWhQSmowNlJHZld0SXhwU3JBY3FDTU9q?= =?utf-8?B?RkZ0RWgzZ20wbExqR0dJc2l4YUtGaVdkaDE4eG5kMzNlb2FuUENiZnJkVURn?= =?utf-8?B?NzZQZldBenZEZ3hYRHNRbkswd2JJOG5KNDQxYzB2RHlFVjJ5MW5xaG9qbHZq?= =?utf-8?B?OCtzNHJjTm1qR2J2SjVUZ2VEN0FJY2NpNjJUR0ZHSDh4VVBFcGkzZjJJR05q?= =?utf-8?B?VzEyUE9TdklnOGpjaE9rcUptSWdHT3g3b1ZvcEl0Tm9pdll1aGQwTEcyeUd4?= =?utf-8?B?aERpd3JyZXBYS0R1dTJ2cGVpTVJ3RjVSYTRTdExOUFFOKzFnTFdCalVmV2FP?= =?utf-8?B?UVM4UitTUjNqTmQyZ0oyRlEyU25hWUpkcVgzR0REZGZIaU4rK21vTU9UcHNR?= =?utf-8?B?ZUFMMkJpc0kxenlHbHFocFJ3Slk4QnE2V3JSYmpESFBHbnlqczl4MGtaZWo1?= =?utf-8?B?ajNhOFBQditGUVErNC9UaXAzb2lVb0ZnTktTUjVZcndpN0hNV3UzNGxNZ3hw?= =?utf-8?B?QzZqUktSR3QyQUJDNDNpNGdCaHlscnZRNW9JTDZ6ME84SlNlMTNjZGFzYUNa?= =?utf-8?B?U0wrYmVSRTlzK2hJNWFjMlkrZEw4TktqMFVPZzVHcE8vRGhQaW1EZ0E5YlB6?= =?utf-8?B?d3ZoSXZBL0V1SnB1UUVUcWNpcEZJSHcwSDkvL0xxL3I3anVwb3VUdS9aaWRQ?= =?utf-8?B?ZEpUV0FPMEFmczlMT2xmb3dXUlRmOTZPVHRUaEFtOEpBeEF5MUxxTVBoNUU1?= =?utf-8?B?Y0M2T085ZnhuK3RhbjdmK3dRdk1JTERPL3NsNHRuRlBGMDNQemp5NmxMQXhM?= =?utf-8?B?allxbmpNSzJ0RTJVdms1NitCU0hOcDhKOG5wOG5aSFQ4WVFiYW4yMTBIWGlx?= =?utf-8?B?UUNkOTlPUWxXckh5aUh3VTZvRUEvbzRnOUFRc1pBZmF4d1FBamZXUW9waE1H?= =?utf-8?B?S0xCRHIrdmxnREphU2NJU21LRHY2MktjVDNwMFhUWFBGVFF2OGM0YnJwVEZU?= =?utf-8?B?R2dFYTUvMEFUM0d5WVpsOVhZSFpCRFljaG1nQ29TSXdla2lxRktjUk1zK0ND?= =?utf-8?B?Q0Y4eVJ4SDk0SU9qeTBtRHA2cXpVcCt1eVJFcFFKOUkxaFA3NWpydGlEdThU?= =?utf-8?B?WENjb2RjVGw2eW5ldk1VNHJYcWtaNEl2KzVwTE1xazJMcW5Ec0c4MFRUK3dw?= =?utf-8?B?MXpXMkh0V2h5QkNDVTFJM2ZSdXlmSWdMdWZ6b3BkRDhqYUlpY2R1c2hLTVVo?= =?utf-8?B?ZVE9PQ==?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: AM6PR04MB6341.eurprd04.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 481fe058-e149-49cd-b9aa-08d9b5741155 X-MS-Exchange-CrossTenant-originalarrivaltime: 02 Dec 2021 09:13:55.9821 (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: 6fkmbBO2zep2EA26DYktnBBxxSX0xou8b9DJhEDMLYKQPzKDli7oNcgEOzxm8d4eu8+wBgalKVhk5e+Zi8IWiQ== X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM7PR04MB7047 Precedence: bulk List-ID: X-Mailing-List: devicetree@vger.kernel.org PiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiBGcm9tOiBIYW5zIFZlcmt1aWwgW21haWx0 bzpodmVya3VpbC1jaXNjb0B4czRhbGwubmxdDQo+IFNlbnQ6IFRodXJzZGF5LCBEZWNlbWJlciAy LCAyMDIxIDU6MDUgUE0NCj4gVG86IE1pbmcgUWlhbiA8bWluZy5xaWFuQG54cC5jb20+OyBtY2hl aGFiQGtlcm5lbC5vcmc7DQo+IHNoYXduZ3VvQGtlcm5lbC5vcmc7IHJvYmgrZHRAa2VybmVsLm9y Zzsgcy5oYXVlckBwZW5ndXRyb25peC5kZQ0KPiBDYzoga2VybmVsQHBlbmd1dHJvbml4LmRlOyBm ZXN0ZXZhbUBnbWFpbC5jb207IGRsLWxpbnV4LWlteA0KPiA8bGludXgtaW14QG54cC5jb20+OyBB aXNoZW5nIERvbmcgPGFpc2hlbmcuZG9uZ0BueHAuY29tPjsNCj4gbGludXgtbWVkaWFAdmdlci5r ZXJuZWwub3JnOyBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnOw0KPiBkZXZpY2V0cmVlQHZn ZXIua2VybmVsLm9yZzsgbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnDQo+IFN1 YmplY3Q6IFtFWFRdIFJlOiBbUEFUQ0ggdjEzIDA0LzEzXSBtZWRpYTogYW1waGlvbjogYWRkIHZw dSBjb3JlIGRyaXZlcg0KPiANCj4gQ2F1dGlvbjogRVhUIEVtYWlsDQo+IA0KPiBPbiAzMC8xMS8y MDIxIDEwOjQ4LCBNaW5nIFFpYW4gd3JvdGU6DQo+ID4gVGhlIHZwdSBzdXBwb3J0cyBlbmNvZGVy IGFuZCBkZWNvZGVyLg0KPiA+IGl0IG5lZWRzIG11IGNvcmUgdG8gaGFuZGxlIGl0Lg0KPiANCj4g Im11IGNvcmUiPyBEbyB5b3UgbWVhbiAidnB1IGNvcmUiPyBJZiBub3QsIHRoZW4gd2hhdCBpcyBh ICJtdSBjb3JlIj8NCj4gDQo+IFJlZ2FyZHMsDQo+IA0KPiAgICAgICAgIEhhbnMNCg0KWWVzLCBp dCBtZWFucyAidnB1IGNvcmUiLiBXZSBvZnRlbiBjYWxsIGl0ICJtdSIgaW50ZXJuYWxseQ0KDQo+ IA0KPiA+IGNvcmUgd2lsbCBydW4gZWl0aGVyIGVuY29kZXIgb3IgZGVjb2RlciBmaXJtd2FyZS4N Cj4gPg0KPiA+IFRoaXMgZHJpdmVyIGlzIGZvciBzdXBwb3J0IHRoZSB2cHUgY29yZS4NCj4gPg0K PiA+IFNpZ25lZC1vZmYtYnk6IE1pbmcgUWlhbiA8bWluZy5xaWFuQG54cC5jb20+DQo+ID4gU2ln bmVkLW9mZi1ieTogU2hpamllIFFpbiA8c2hpamllLnFpbkBueHAuY29tPg0KPiA+IFNpZ25lZC1v ZmYtYnk6IFpob3UgUGVuZyA8ZWFnbGUuemhvdUBueHAuY29tPg0KPiA+IC0tLQ0KPiA+ICBkcml2 ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X2NvZGVjLmggfCAgNjcgKysNCj4gPiAgZHJp dmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9jb3JlLmMgIHwgOTA2DQo+ICsrKysrKysr KysrKysrKysrKysrKw0KPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X2Nv cmUuaCAgfCAgMTUgKw0KPiA+ICBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X2Ri Zy5jICAgfCA0OTUgKysrKysrKysrKysNCj4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBo aW9uL3ZwdV9ycGMuYyAgIHwgMjc5ICsrKysrKysNCj4gPiAgZHJpdmVycy9tZWRpYS9wbGF0Zm9y bS9hbXBoaW9uL3ZwdV9ycGMuaCAgIHwgNDY0ICsrKysrKysrKysrDQo+ID4gIDYgZmlsZXMgY2hh bmdlZCwgMjIyNiBpbnNlcnRpb25zKCspDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X2NvZGVjLmgNCj4gPiAgY3JlYXRlIG1vZGUgMTAw NjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfY29yZS5jDQo+ID4gIGNyZWF0 ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X2NvcmUuaA0K PiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3Zw dV9kYmcuYw0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9h bXBoaW9uL3ZwdV9ycGMuYw0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9w bGF0Zm9ybS9hbXBoaW9uL3ZwdV9ycGMuaA0KPiA+DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv bWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfY29kZWMuaA0KPiBiL2RyaXZlcnMvbWVkaWEvcGxh dGZvcm0vYW1waGlvbi92cHVfY29kZWMuaA0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4g aW5kZXggMDAwMDAwMDAwMDAwLi5iZjg5MjBlOWY2ZDcNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4g KysrIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9jb2RlYy5oDQo+ID4gQEAg LTAsMCArMSw2NyBAQA0KPiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAq Lw0KPiA+ICsvKg0KPiA+ICsgKiBDb3B5cmlnaHQgMjAyMC0yMDIxIE5YUA0KPiA+ICsgKi8NCj4g PiArDQo+ID4gKyNpZm5kZWYgX0FNUEhJT05fVlBVX0NPREVDX0gNCj4gPiArI2RlZmluZSBfQU1Q SElPTl9WUFVfQ09ERUNfSA0KPiA+ICsNCj4gPiArc3RydWN0IHZwdV9lbmNvZGVfcGFyYW1zIHsN Cj4gPiArICAgICB1MzIgaW5wdXRfZm9ybWF0Ow0KPiA+ICsgICAgIHUzMiBjb2RlY19mb3JtYXQ7 DQo+ID4gKyAgICAgdTMyIHByb2ZpbGU7DQo+ID4gKyAgICAgdTMyIHRpZXI7DQo+ID4gKyAgICAg dTMyIGxldmVsOw0KPiA+ICsgICAgIHN0cnVjdCB2NGwyX2ZyYWN0IGZyYW1lX3JhdGU7DQo+ID4g KyAgICAgdTMyIHNyY19zdHJpZGU7DQo+ID4gKyAgICAgdTMyIHNyY193aWR0aDsNCj4gPiArICAg ICB1MzIgc3JjX2hlaWdodDsNCj4gPiArICAgICBzdHJ1Y3QgdjRsMl9yZWN0IGNyb3A7DQo+ID4g KyAgICAgdTMyIG91dF93aWR0aDsNCj4gPiArICAgICB1MzIgb3V0X2hlaWdodDsNCj4gPiArDQo+ ID4gKyAgICAgdTMyIGdvcF9sZW5ndGg7DQo+ID4gKyAgICAgdTMyIGJmcmFtZXM7DQo+ID4gKw0K PiA+ICsgICAgIHUzMiByY19tb2RlOw0KPiA+ICsgICAgIHUzMiBiaXRyYXRlOw0KPiA+ICsgICAg IHUzMiBiaXRyYXRlX21pbjsNCj4gPiArICAgICB1MzIgYml0cmF0ZV9tYXg7DQo+ID4gKw0KPiA+ ICsgICAgIHUzMiBpX2ZyYW1lX3FwOw0KPiA+ICsgICAgIHUzMiBwX2ZyYW1lX3FwOw0KPiA+ICsg ICAgIHUzMiBiX2ZyYW1lX3FwOw0KPiA+ICsgICAgIHUzMiBxcF9taW47DQo+ID4gKyAgICAgdTMy IHFwX21heDsNCj4gPiArICAgICB1MzIgcXBfbWluX2k7DQo+ID4gKyAgICAgdTMyIHFwX21heF9p Ow0KPiA+ICsNCj4gPiArICAgICBzdHJ1Y3Qgew0KPiA+ICsgICAgICAgICAgICAgdTMyIGVuYWJs ZTsNCj4gPiArICAgICAgICAgICAgIHUzMiBpZGM7DQo+ID4gKyAgICAgICAgICAgICB1MzIgd2lk dGg7DQo+ID4gKyAgICAgICAgICAgICB1MzIgaGVpZ2h0Ow0KPiA+ICsgICAgIH0gc2FyOw0KPiA+ ICsNCj4gPiArICAgICBzdHJ1Y3Qgew0KPiA+ICsgICAgICAgICAgICAgdTMyIHByaW1hcmllczsN Cj4gPiArICAgICAgICAgICAgIHUzMiB0cmFuc2ZlcjsNCj4gPiArICAgICAgICAgICAgIHUzMiBt YXRyaXg7DQo+ID4gKyAgICAgICAgICAgICB1MzIgZnVsbF9yYW5nZTsNCj4gPiArICAgICB9IGNv bG9yOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RydWN0IHZwdV9kZWNvZGVfcGFyYW1zIHsNCj4g PiArICAgICB1MzIgY29kZWNfZm9ybWF0Ow0KPiA+ICsgICAgIHUzMiBvdXRwdXRfZm9ybWF0Ow0K PiA+ICsgICAgIHUzMiBiX2Rpc19yZW9yZGVyOw0KPiA+ICsgICAgIHUzMiBiX25vbl9mcmFtZTsN Cj4gPiArICAgICB1MzIgZnJhbWVfY291bnQ7DQo+ID4gKyAgICAgdTMyIGVuZF9mbGFnOw0KPiA+ ICsgICAgIHN0cnVjdCB7DQo+ID4gKyAgICAgICAgICAgICB1MzIgYmFzZTsNCj4gPiArICAgICAg ICAgICAgIHUzMiBzaXplOw0KPiA+ICsgICAgIH0gdWRhdGE7DQo+ID4gK307DQo+ID4gKw0KPiA+ ICsjZW5kaWYNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9u L3ZwdV9jb3JlLmMNCj4gYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X2NvcmUu Yw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi4wZGJm ZDFjODRmNzUNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9tZWRpYS9wbGF0 Zm9ybS9hbXBoaW9uL3ZwdV9jb3JlLmMNCj4gPiBAQCAtMCwwICsxLDkwNiBAQA0KPiA+ICsvLyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPiA+ICsvKg0KPiA+ICsgKiBDb3B5cmln aHQgMjAyMC0yMDIxIE5YUA0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9p bml0Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pbnRlcmNvbm5lY3QuaD4NCj4gPiArI2luY2x1 ZGUgPGxpbnV4L2lvY3RsLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+DQo+ID4gKyNp bmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0K PiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9v Zl9hZGRyZXNzLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCj4g PiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+ DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51 eC9wbV9kb21haW4uaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+DQo+ID4gKyNp bmNsdWRlICJ2cHUuaCINCj4gPiArI2luY2x1ZGUgInZwdV9kZWZzLmgiDQo+ID4gKyNpbmNsdWRl ICJ2cHVfY29yZS5oIg0KPiA+ICsjaW5jbHVkZSAidnB1X21ib3guaCINCj4gPiArI2luY2x1ZGUg InZwdV9tc2dzLmgiDQo+ID4gKyNpbmNsdWRlICJ2cHVfcnBjLmgiDQo+ID4gKyNpbmNsdWRlICJ2 cHVfY21kcy5oIg0KPiA+ICsNCj4gPiArdm9pZCBjc3Jfd3JpdGVsKHN0cnVjdCB2cHVfY29yZSAq Y29yZSwgdTMyIHJlZywgdTMyIHZhbCkNCj4gPiArew0KPiA+ICsgICAgIHdyaXRlbCh2YWwsIGNv cmUtPmJhc2UgKyByZWcpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICt1MzIgY3NyX3JlYWRsKHN0cnVj dCB2cHVfY29yZSAqY29yZSwgdTMyIHJlZykNCj4gPiArew0KPiA+ICsgICAgIHJldHVybiByZWFk bChjb3JlLT5iYXNlICsgcmVnKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2cHVf Y29yZV9sb2FkX2Zpcm13YXJlKHN0cnVjdCB2cHVfY29yZSAqY29yZSkNCj4gPiArew0KPiA+ICsg ICAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqcGZ3ID0gTlVMTDsNCj4gPiArICAgICBpbnQgcmV0 ID0gMDsNCj4gPiArDQo+ID4gKyAgICAgV0FSTl9PTighY29yZSB8fCAhY29yZS0+cmVzIHx8ICFj b3JlLT5yZXMtPmZ3bmFtZSk7DQo+ID4gKyAgICAgaWYgKCFjb3JlLT5mdy52aXJ0KSB7DQo+ID4g KyAgICAgICAgICAgICBkZXZfZXJyKGNvcmUtPmRldiwgImZpcm13YXJlIGJ1ZmZlciBpcyBub3Qg cmVhZHlcbiIpOw0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4gKyAgICAg fQ0KPiA+ICsNCj4gPiArICAgICByZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZwZncsIGNvcmUtPnJl cy0+ZnduYW1lLCBjb3JlLT5kZXYpOw0KPiA+ICsgICAgIGRldl9kYmcoY29yZS0+ZGV2LCAicmVx dWVzdF9maXJtd2FyZSAlcyA6ICVkXG4iLA0KPiBjb3JlLT5yZXMtPmZ3bmFtZSwgcmV0KTsNCj4g PiArICAgICBpZiAocmV0KSB7DQo+ID4gKyAgICAgICAgICAgICBkZXZfZXJyKGNvcmUtPmRldiwg InJlcXVlc3QgZmlybXdhcmUgJXMgZmFpbGVkLCByZXQgPSAlZFxuIiwNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb3JlLT5yZXMtPmZ3bmFtZSwgcmV0KTsNCj4gPiArICAgICAg ICAgICAgIHJldHVybiByZXQ7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBpZiAoY29y ZS0+ZncubGVuZ3RoIDwgcGZ3LT5zaXplKSB7DQo+ID4gKyAgICAgICAgICAgICBkZXZfZXJyKGNv cmUtPmRldiwgImZpcm13YXJlIGJ1ZmZlciBzaXplIHdhbnQgJXp1LA0KPiBidXQgJWRcbiIsDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGZ3LT5zaXplLCBjb3JlLT5mdy5sZW5n dGgpOw0KPiA+ICsgICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsNCj4gPiArICAgICAgICAgICAg IGdvdG8gZXhpdDsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIG1lbXNldF9pbyhjb3Jl LT5mdy52aXJ0LCAwLCBjb3JlLT5mdy5sZW5ndGgpOw0KPiA+ICsgICAgIG1lbWNweShjb3JlLT5m dy52aXJ0LCBwZnctPmRhdGEsIHBmdy0+c2l6ZSk7DQo+ID4gKyAgICAgY29yZS0+ZncuYnl0ZXN1 c2VkID0gcGZ3LT5zaXplOw0KPiA+ICsgICAgIHJldCA9IHZwdV9pZmFjZV9vbl9maXJtd2FyZV9s b2FkZWQoY29yZSk7DQo+ID4gK2V4aXQ6DQo+ID4gKyAgICAgcmVsZWFzZV9maXJtd2FyZShwZncp Ow0KPiA+ICsgICAgIHBmdyA9IE5VTEw7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiByZXQ7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdnB1X2NvcmVfYm9vdF9kb25lKHN0cnVjdCB2 cHVfY29yZSAqY29yZSkNCj4gPiArew0KPiA+ICsgICAgIHUzMiBmd192ZXJzaW9uOw0KPiA+ICsN Cj4gPiArICAgICBmd192ZXJzaW9uID0gdnB1X2lmYWNlX2dldF92ZXJzaW9uKGNvcmUpOw0KPiA+ ICsgICAgIGRldl9pbmZvKGNvcmUtPmRldiwgIiVzIGZpcm13YXJlIHZlcnNpb24gOiAlZC4lZC4l ZFxuIiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgdnB1X2NvcmVfdHlwZV9kZXNjKGNvcmUt PnR5cGUpLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAoZndfdmVyc2lvbiA+PiAxNikgJiAw eGZmLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAoZndfdmVyc2lvbiA+PiA4KSAmIDB4ZmYs DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGZ3X3ZlcnNpb24gJiAweGZmKTsNCj4gPiArICAg ICBjb3JlLT5zdXBwb3J0ZWRfaW5zdGFuY2VfY291bnQgPQ0KPiB2cHVfaWZhY2VfZ2V0X21heF9p bnN0YW5jZV9jb3VudChjb3JlKTsNCj4gPiArICAgICBpZiAoY29yZS0+cmVzLT5hY3Rfc2l6ZSkg ew0KPiA+ICsgICAgICAgICAgICAgdTMyIGNvdW50ID0gY29yZS0+YWN0Lmxlbmd0aCAvIGNvcmUt PnJlcy0+YWN0X3NpemU7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgY29yZS0+c3VwcG9ydGVk X2luc3RhbmNlX2NvdW50ID0NCj4gbWluKGNvcmUtPnN1cHBvcnRlZF9pbnN0YW5jZV9jb3VudCwg Y291bnQpOw0KPiA+ICsgICAgIH0NCj4gPiArICAgICBjb3JlLT5md192ZXJzaW9uID0gZndfdmVy c2lvbjsNCj4gPiArICAgICBjb3JlLT5zdGF0ZSA9IFZQVV9DT1JFX0FDVElWRTsNCj4gPiArDQo+ ID4gKyAgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgdnB1X2Nv cmVfd2FpdF9ib290X2RvbmUoc3RydWN0IHZwdV9jb3JlICpjb3JlKQ0KPiA+ICt7DQo+ID4gKyAg ICAgaW50IHJldDsNCj4gPiArDQo+ID4gKyAgICAgcmV0ID0gd2FpdF9mb3JfY29tcGxldGlvbl90 aW1lb3V0KCZjb3JlLT5jbXAsIFZQVV9USU1FT1VUKTsNCj4gPiArICAgICBpZiAoIXJldCkgew0K PiA+ICsgICAgICAgICAgICAgZGV2X2Vycihjb3JlLT5kZXYsICJib290IHRpbWVvdXRcbiIpOw0K PiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4gKyAgICAgfQ0KPiA+ICsgICAg IHJldHVybiB2cHVfY29yZV9ib290X2RvbmUoY29yZSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0 YXRpYyBpbnQgdnB1X2NvcmVfYm9vdChzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUsIGJvb2wgbG9hZCkN Cj4gPiArew0KPiA+ICsgICAgIGludCByZXQ7DQo+ID4gKw0KPiA+ICsgICAgIFdBUk5fT04oIWNv cmUpOw0KPiA+ICsNCj4gPiArICAgICBpZiAoIWNvcmUtPnJlcy0+c3RhbmRhbG9uZSkNCj4gPiAr ICAgICAgICAgICAgIHJldHVybiAwOw0KPiA+ICsNCj4gPiArICAgICByZWluaXRfY29tcGxldGlv bigmY29yZS0+Y21wKTsNCj4gPiArICAgICBpZiAobG9hZCkgew0KPiA+ICsgICAgICAgICAgICAg cmV0ID0gdnB1X2NvcmVfbG9hZF9maXJtd2FyZShjb3JlKTsNCj4gPiArICAgICAgICAgICAgIGlm IChyZXQpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4gKyAgICAg fQ0KPiA+ICsNCj4gPiArICAgICB2cHVfaWZhY2VfYm9vdF9jb3JlKGNvcmUpOw0KPiA+ICsgICAg IHJldHVybiB2cHVfY29yZV93YWl0X2Jvb3RfZG9uZShjb3JlKTsNCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIGludCB2cHVfY29yZV9zaHV0ZG93bihzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUpDQo+ ID4gK3sNCj4gPiArICAgICBpZiAoIWNvcmUtPnJlcy0+c3RhbmRhbG9uZSkNCj4gPiArICAgICAg ICAgICAgIHJldHVybiAwOw0KPiA+ICsgICAgIHJldHVybiB2cHVfaWZhY2Vfc2h1dGRvd25fY29y ZShjb3JlKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2cHVfY29yZV9yZXN0b3Jl KHN0cnVjdCB2cHVfY29yZSAqY29yZSkNCj4gPiArew0KPiA+ICsgICAgIGludCByZXQ7DQo+ID4g Kw0KPiA+ICsgICAgIGlmICghY29yZS0+cmVzLT5zdGFuZGFsb25lKQ0KPiA+ICsgICAgICAgICAg ICAgcmV0dXJuIDA7DQo+ID4gKyAgICAgcmV0ID0gdnB1X2NvcmVfc3dfcmVzZXQoY29yZSk7DQo+ ID4gKyAgICAgaWYgKHJldCkNCj4gPiArICAgICAgICAgICAgIHJldHVybiByZXQ7DQo+ID4gKw0K PiA+ICsgICAgIHZwdV9jb3JlX2Jvb3RfZG9uZShjb3JlKTsNCj4gPiArICAgICByZXR1cm4gdnB1 X2lmYWNlX3Jlc3RvcmVfY29yZShjb3JlKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlu dCBfX3ZwdV9hbGxvY19kbWEoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdnB1X2J1ZmZlciAq YnVmKQ0KPiA+ICt7DQo+ID4gKyAgICAgZ2ZwX3QgZ2ZwID0gR0ZQX0tFUk5FTCB8IEdGUF9ETUEz MjsNCj4gPiArDQo+ID4gKyAgICAgV0FSTl9PTighZGV2IHx8ICFidWYpOw0KPiA+ICsNCj4gPiAr ICAgICBpZiAoIWJ1Zi0+bGVuZ3RoKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4g Kw0KPiA+ICsgICAgIGJ1Zi0+dmlydCA9IGRtYV9hbGxvY19jb2hlcmVudChkZXYsIGJ1Zi0+bGVu Z3RoLCAmYnVmLT5waHlzLCBnZnApOw0KPiA+ICsgICAgIGlmICghYnVmLT52aXJ0KQ0KPiA+ICsg ICAgICAgICAgICAgcmV0dXJuIC1FTk9NRU07DQo+ID4gKw0KPiA+ICsgICAgIGJ1Zi0+ZGV2ID0g ZGV2Ow0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArdm9p ZCB2cHVfZnJlZV9kbWEoc3RydWN0IHZwdV9idWZmZXIgKmJ1ZikNCj4gPiArew0KPiA+ICsgICAg IFdBUk5fT04oIWJ1Zik7DQo+ID4gKw0KPiA+ICsgICAgIGlmICghYnVmLT52aXJ0IHx8ICFidWYt PmRldikNCj4gPiArICAgICAgICAgICAgIHJldHVybjsNCj4gPiArDQo+ID4gKyAgICAgZG1hX2Zy ZWVfY29oZXJlbnQoYnVmLT5kZXYsIGJ1Zi0+bGVuZ3RoLCBidWYtPnZpcnQsIGJ1Zi0+cGh5cyk7 DQo+ID4gKyAgICAgYnVmLT52aXJ0ID0gTlVMTDsNCj4gPiArICAgICBidWYtPnBoeXMgPSAwOw0K PiA+ICsgICAgIGJ1Zi0+bGVuZ3RoID0gMDsNCj4gPiArICAgICBidWYtPmJ5dGVzdXNlZCA9IDA7 DQo+ID4gKyAgICAgYnVmLT5kZXYgPSBOVUxMOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQgdnB1 X2FsbG9jX2RtYShzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUsIHN0cnVjdCB2cHVfYnVmZmVyICpidWYp DQo+ID4gK3sNCj4gPiArICAgICBXQVJOX09OKCFjb3JlIHx8ICFidWYpOw0KPiA+ICsNCj4gPiAr ICAgICByZXR1cm4gX192cHVfYWxsb2NfZG1hKGNvcmUtPmRldiwgYnVmKTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIHZvaWQgdnB1X2NvcmVfY2hlY2tfaGFuZyhzdHJ1Y3QgdnB1X2NvcmUg KmNvcmUpDQo+ID4gK3sNCj4gPiArICAgICBpZiAoY29yZS0+aGFuZ19tYXNrKQ0KPiA+ICsgICAg ICAgICAgICAgY29yZS0+c3RhdGUgPSBWUFVfQ09SRV9IQU5HOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgc3RydWN0IHZwdV9jb3JlICp2cHVfY29yZV9maW5kX3Byb3Blcl9ieV90eXBlKHN0 cnVjdCB2cHVfZGV2ICp2cHUsDQo+IHUzMiB0eXBlKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0 IHZwdV9jb3JlICpjb3JlID0gTlVMTDsNCj4gPiArICAgICBpbnQgcmVxdWVzdF9jb3VudCA9IElO VF9NQVg7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9jb3JlICpjOw0KPiA+ICsNCj4gPiArICAgICBX QVJOX09OKCF2cHUpOw0KPiA+ICsNCj4gPiArICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZ2 cHUtPmNvcmVzLCBsaXN0KSB7DQo+ID4gKyAgICAgICAgICAgICBkZXZfZGJnKGMtPmRldiwgImlu c3RhbmNlX21hc2sgPSAweCVseCwgc3RhdGUgPSAlZFxuIiwNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjLT5pbnN0YW5jZV9tYXNrLA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGMtPnN0YXRlKTsNCj4gPiArICAgICAgICAgICAgIGlmIChjLT50eXBlICE9IHR5 cGUpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KPiA+ICsgICAgICAgICAg ICAgaWYgKGMtPnN0YXRlID09IFZQVV9DT1JFX0RFSU5JVCkgew0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICBjb3JlID0gYzsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4g KyAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICB2cHVfY29yZV9jaGVja19oYW5nKGMp Ow0KPiA+ICsgICAgICAgICAgICAgaWYgKGMtPnN0YXRlICE9IFZQVV9DT1JFX0FDVElWRSkNCj4g PiArICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQo+ID4gKyAgICAgICAgICAgICBpZiAo Yy0+cmVxdWVzdF9jb3VudCA8IHJlcXVlc3RfY291bnQpIHsNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgcmVxdWVzdF9jb3VudCA9IGMtPnJlcXVlc3RfY291bnQ7DQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgIGNvcmUgPSBjOw0KPiA+ICsgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAg ICAgaWYgKCFyZXF1ZXN0X2NvdW50KQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBicmVhazsN Cj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiBjb3JlOw0KPiA+ICt9DQo+ID4g Kw0KPiA+ICtzdGF0aWMgYm9vbCB2cHVfY29yZV9pc19leGlzdChzdHJ1Y3QgdnB1X2RldiAqdnB1 LCBzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2Nv cmUgKmM7DQo+ID4gKw0KPiA+ICsgICAgIGxpc3RfZm9yX2VhY2hfZW50cnkoYywgJnZwdS0+Y29y ZXMsIGxpc3QpIHsNCj4gPiArICAgICAgICAgICAgIGlmIChjID09IGNvcmUpDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAg ICAgcmV0dXJuIGZhbHNlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCB2cHVfY29y ZV9nZXRfdnB1KHN0cnVjdCB2cHVfY29yZSAqY29yZSkNCj4gPiArew0KPiA+ICsgICAgIGNvcmUt PnZwdS0+Z2V0X3ZwdShjb3JlLT52cHUpOw0KPiA+ICsgICAgIGlmIChjb3JlLT50eXBlID09IFZQ VV9DT1JFX1RZUEVfRU5DKQ0KPiA+ICsgICAgICAgICAgICAgY29yZS0+dnB1LT5nZXRfZW5jKGNv cmUtPnZwdSk7DQo+ID4gKyAgICAgaWYgKGNvcmUtPnR5cGUgPT0gVlBVX0NPUkVfVFlQRV9ERUMp DQo+ID4gKyAgICAgICAgICAgICBjb3JlLT52cHUtPmdldF9kZWMoY29yZS0+dnB1KTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2cHVfY29yZV9yZWdpc3RlcihzdHJ1Y3QgZGV2aWNl ICpkZXYsIHN0cnVjdCB2cHVfY29yZSAqY29yZSkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2 cHVfZGV2ICp2cHUgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gPiArICAgICBpbnQgcmV0ID0g MDsNCj4gPiArDQo+ID4gKyAgICAgZGV2X2RiZyhjb3JlLT5kZXYsICJyZWdpc3RlciBjb3JlICVz XG4iLA0KPiB2cHVfY29yZV90eXBlX2Rlc2MoY29yZS0+dHlwZSkpOw0KPiA+ICsgICAgIGlmICh2 cHVfY29yZV9pc19leGlzdCh2cHUsIGNvcmUpKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIDA7 DQo+ID4gKw0KPiA+ICsgICAgIGNvcmUtPndvcmtxdWV1ZSA9IGFsbG9jX3dvcmtxdWV1ZSgidnB1 IiwgV1FfVU5CT1VORCB8DQo+IFdRX01FTV9SRUNMQUlNLCAxKTsNCj4gPiArICAgICBpZiAoIWNv cmUtPndvcmtxdWV1ZSkgew0KPiA+ICsgICAgICAgICAgICAgZGV2X2Vycihjb3JlLT5kZXYsICJm YWlsIHRvIGFsbG9jIHdvcmtxdWV1ZVxuIik7DQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVO T01FTTsNCj4gPiArICAgICB9DQo+ID4gKyAgICAgSU5JVF9XT1JLKCZjb3JlLT5tc2dfd29yaywg dnB1X21zZ19ydW5fd29yayk7DQo+ID4gKyAgICAgSU5JVF9ERUxBWUVEX1dPUksoJmNvcmUtPm1z Z19kZWxheWVkX3dvcmssDQo+IHZwdV9tc2dfZGVsYXllZF93b3JrKTsNCj4gPiArICAgICBjb3Jl LT5tc2dfYnVmZmVyX3NpemUgPQ0KPiByb3VuZHVwX3Bvd19vZl90d28oVlBVX01TR19CVUZGRVJf U0laRSk7DQo+ID4gKyAgICAgY29yZS0+bXNnX2J1ZmZlciA9IHZ6YWxsb2MoY29yZS0+bXNnX2J1 ZmZlcl9zaXplKTsNCj4gPiArICAgICBpZiAoIWNvcmUtPm1zZ19idWZmZXIpIHsNCj4gPiArICAg ICAgICAgICAgIGRldl9lcnIoY29yZS0+ZGV2LCAiZmFpbGVkIGFsbG9jYXRlIGJ1ZmZlciBmb3Ig Zmlmb1xuIik7DQo+ID4gKyAgICAgICAgICAgICByZXQgPSAtRU5PTUVNOw0KPiA+ICsgICAgICAg ICAgICAgZ290byBlcnJvcjsNCj4gPiArICAgICB9DQo+ID4gKyAgICAgcmV0ID0ga2ZpZm9faW5p dCgmY29yZS0+bXNnX2ZpZm8sIGNvcmUtPm1zZ19idWZmZXIsDQo+IGNvcmUtPm1zZ19idWZmZXJf c2l6ZSk7DQo+ID4gKyAgICAgaWYgKHJldCkgew0KPiA+ICsgICAgICAgICAgICAgZGV2X2Vycihj b3JlLT5kZXYsICJmYWlsZWQgaW5pdCBrZmlmb1xuIik7DQo+ID4gKyAgICAgICAgICAgICBnb3Rv IGVycm9yOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgbGlzdF9hZGRfdGFpbCgmY29y ZS0+bGlzdCwgJnZwdS0+Y29yZXMpOw0KPiA+ICsNCj4gPiArICAgICB2cHVfY29yZV9nZXRfdnB1 KGNvcmUpOw0KPiA+ICsNCj4gPiArICAgICBpZiAodnB1X2lmYWNlX2dldF9wb3dlcl9zdGF0ZShj b3JlKSkNCj4gPiArICAgICAgICAgICAgIHJldCA9IHZwdV9jb3JlX3Jlc3RvcmUoY29yZSk7DQo+ ID4gKyAgICAgaWYgKHJldCkNCj4gPiArICAgICAgICAgICAgIGdvdG8gZXJyb3I7DQo+ID4gKw0K PiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICtlcnJvcjoNCj4gPiArICAgICBpZiAoY29yZS0+bXNn X2J1ZmZlcikgew0KPiA+ICsgICAgICAgICAgICAgdmZyZWUoY29yZS0+bXNnX2J1ZmZlcik7DQo+ ID4gKyAgICAgICAgICAgICBjb3JlLT5tc2dfYnVmZmVyID0gTlVMTDsNCj4gPiArICAgICB9DQo+ ID4gKyAgICAgaWYgKGNvcmUtPndvcmtxdWV1ZSkgew0KPiA+ICsgICAgICAgICAgICAgZGVzdHJv eV93b3JrcXVldWUoY29yZS0+d29ya3F1ZXVlKTsNCj4gPiArICAgICAgICAgICAgIGNvcmUtPndv cmtxdWV1ZSA9IE5VTEw7DQo+ID4gKyAgICAgfQ0KPiA+ICsgICAgIHJldHVybiByZXQ7DQo+ID4g K30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHZwdV9jb3JlX3B1dF92cHUoc3RydWN0IHZwdV9j b3JlICpjb3JlKQ0KPiA+ICt7DQo+ID4gKyAgICAgaWYgKGNvcmUtPnR5cGUgPT0gVlBVX0NPUkVf VFlQRV9FTkMpDQo+ID4gKyAgICAgICAgICAgICBjb3JlLT52cHUtPnB1dF9lbmMoY29yZS0+dnB1 KTsNCj4gPiArICAgICBpZiAoY29yZS0+dHlwZSA9PSBWUFVfQ09SRV9UWVBFX0RFQykNCj4gPiAr ICAgICAgICAgICAgIGNvcmUtPnZwdS0+cHV0X2RlYyhjb3JlLT52cHUpOw0KPiA+ICsgICAgIGNv cmUtPnZwdS0+cHV0X3ZwdShjb3JlLT52cHUpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg aW50IHZwdV9jb3JlX3VucmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdnB1X2Nv cmUgKmNvcmUpDQo+ID4gK3sNCj4gPiArICAgICBsaXN0X2RlbF9pbml0KCZjb3JlLT5saXN0KTsN Cj4gPiArDQo+ID4gKyAgICAgdnB1X2NvcmVfcHV0X3ZwdShjb3JlKTsNCj4gPiArICAgICBjb3Jl LT52cHUgPSBOVUxMOw0KPiA+ICsgICAgIHZmcmVlKGNvcmUtPm1zZ19idWZmZXIpOw0KPiA+ICsg ICAgIGNvcmUtPm1zZ19idWZmZXIgPSBOVUxMOw0KPiA+ICsNCj4gPiArICAgICBpZiAoY29yZS0+ d29ya3F1ZXVlKSB7DQo+ID4gKyAgICAgICAgICAgICBjYW5jZWxfd29ya19zeW5jKCZjb3JlLT5t c2dfd29yayk7DQo+ID4gKyAgICAgICAgICAgICBjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmNv cmUtPm1zZ19kZWxheWVkX3dvcmspOw0KPiA+ICsgICAgICAgICAgICAgZGVzdHJveV93b3JrcXVl dWUoY29yZS0+d29ya3F1ZXVlKTsNCj4gPiArICAgICAgICAgICAgIGNvcmUtPndvcmtxdWV1ZSA9 IE5VTEw7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIGludCB2cHVfY29yZV9hY3F1aXJlX2luc3RhbmNlKHN0cnVjdCB2 cHVfY29yZSAqY29yZSkNCj4gPiArew0KPiA+ICsgICAgIGludCBpZDsNCj4gPiArDQo+ID4gKyAg ICAgV0FSTl9PTighY29yZSk7DQo+ID4gKw0KPiA+ICsgICAgIGlkID0gZmZ6KGNvcmUtPmluc3Rh bmNlX21hc2spOw0KPiA+ICsgICAgIGlmIChpZCA+PSBjb3JlLT5zdXBwb3J0ZWRfaW5zdGFuY2Vf Y291bnQpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKyAg ICAgc2V0X2JpdChpZCwgJmNvcmUtPmluc3RhbmNlX21hc2spOw0KPiA+ICsNCj4gPiArICAgICBy ZXR1cm4gaWQ7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIHZwdV9jb3JlX3JlbGVh c2VfaW5zdGFuY2Uoc3RydWN0IHZwdV9jb3JlICpjb3JlLCBpbnQgaWQpDQo+ID4gK3sNCj4gPiAr ICAgICBXQVJOX09OKCFjb3JlKTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKGlkIDwgMCB8fCBpZCA+ PSBjb3JlLT5zdXBwb3J0ZWRfaW5zdGFuY2VfY291bnQpDQo+ID4gKyAgICAgICAgICAgICByZXR1 cm47DQo+ID4gKw0KPiA+ICsgICAgIGNsZWFyX2JpdChpZCwgJmNvcmUtPmluc3RhbmNlX21hc2sp Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgdnB1X2luc3QgKnZwdV9pbnN0X2dldChzdHJ1 Y3QgdnB1X2luc3QgKmluc3QpDQo+ID4gK3sNCj4gPiArICAgICBpZiAoIWluc3QpDQo+ID4gKyAg ICAgICAgICAgICByZXR1cm4gTlVMTDsNCj4gPiArDQo+ID4gKyAgICAgYXRvbWljX2luYygmaW5z dC0+cmVmX2NvdW50KTsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIGluc3Q7DQo+ID4gK30NCj4g PiArDQo+ID4gK3ZvaWQgdnB1X2luc3RfcHV0KHN0cnVjdCB2cHVfaW5zdCAqaW5zdCkNCj4gPiAr ew0KPiA+ICsgICAgIGlmICghaW5zdCkNCj4gPiArICAgICAgICAgICAgIHJldHVybjsNCj4gPiAr ICAgICBpZiAoYXRvbWljX2RlY19hbmRfdGVzdCgmaW5zdC0+cmVmX2NvdW50KSkgew0KPiA+ICsg ICAgICAgICAgICAgaWYgKGluc3QtPnJlbGVhc2UpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg IGluc3QtPnJlbGVhc2UoaW5zdCk7DQo+ID4gKyAgICAgfQ0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dHJ1Y3QgdnB1X2NvcmUgKnZwdV9yZXF1ZXN0X2NvcmUoc3RydWN0IHZwdV9kZXYgKnZwdSwgZW51 bQ0KPiB2cHVfY29yZV90eXBlIHR5cGUpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2Nv cmUgKmNvcmUgPSBOVUxMOw0KPiA+ICsgICAgIGludCByZXQ7DQo+ID4gKw0KPiA+ICsgICAgIG11 dGV4X2xvY2soJnZwdS0+bG9jayk7DQo+ID4gKw0KPiA+ICsgICAgIGNvcmUgPSB2cHVfY29yZV9m aW5kX3Byb3Blcl9ieV90eXBlKHZwdSwgdHlwZSk7DQo+ID4gKyAgICAgaWYgKCFjb3JlKQ0KPiA+ ICsgICAgICAgICAgICAgZ290byBleGl0Ow0KPiA+ICsNCj4gPiArICAgICBtdXRleF9sb2NrKCZj b3JlLT5sb2NrKTsNCj4gPiArICAgICBwbV9ydW50aW1lX2dldF9zeW5jKGNvcmUtPmRldik7DQo+ ID4gKw0KPiA+ICsgICAgIGlmIChjb3JlLT5zdGF0ZSA9PSBWUFVfQ09SRV9ERUlOSVQpIHsNCj4g PiArICAgICAgICAgICAgIHJldCA9IHZwdV9jb3JlX2Jvb3QoY29yZSwgdHJ1ZSk7DQo+ID4gKyAg ICAgICAgICAgICBpZiAocmV0KSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHBtX3J1bnRp bWVfcHV0X3N5bmMoY29yZS0+ZGV2KTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgbXV0ZXhf dW5sb2NrKCZjb3JlLT5sb2NrKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgY29yZSA9IE5V TEw7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXhpdDsNCj4gPiArICAgICAgICAg ICAgIH0NCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIGNvcmUtPnJlcXVlc3RfY291bnQr KzsNCj4gPiArDQo+ID4gKyAgICAgbXV0ZXhfdW5sb2NrKCZjb3JlLT5sb2NrKTsNCj4gPiArZXhp dDoNCj4gPiArICAgICBtdXRleF91bmxvY2soJnZwdS0+bG9jayk7DQo+ID4gKw0KPiA+ICsgICAg IHJldHVybiBjb3JlOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICt2b2lkIHZwdV9yZWxlYXNlX2NvcmUo c3RydWN0IHZwdV9jb3JlICpjb3JlKQ0KPiA+ICt7DQo+ID4gKyAgICAgaWYgKCFjb3JlKQ0KPiA+ ICsgICAgICAgICAgICAgcmV0dXJuOw0KPiA+ICsNCj4gPiArICAgICBtdXRleF9sb2NrKCZjb3Jl LT5sb2NrKTsNCj4gPiArICAgICBwbV9ydW50aW1lX3B1dF9zeW5jKGNvcmUtPmRldik7DQo+ID4g KyAgICAgaWYgKGNvcmUtPnJlcXVlc3RfY291bnQpDQo+ID4gKyAgICAgICAgICAgICBjb3JlLT5y ZXF1ZXN0X2NvdW50LS07DQo+ID4gKyAgICAgbXV0ZXhfdW5sb2NrKCZjb3JlLT5sb2NrKTsNCj4g PiArfQ0KPiA+ICsNCj4gPiAraW50IHZwdV9pbnN0X3JlZ2lzdGVyKHN0cnVjdCB2cHVfaW5zdCAq aW5zdCkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfZGV2ICp2cHU7DQo+ID4gKyAgICAg c3RydWN0IHZwdV9jb3JlICpjb3JlOw0KPiA+ICsgICAgIGludCByZXQgPSAwOw0KPiA+ICsNCj4g PiArICAgICBXQVJOX09OKCFpbnN0IHx8ICFpbnN0LT52cHUpOw0KPiA+ICsNCj4gPiArICAgICB2 cHUgPSBpbnN0LT52cHU7DQo+ID4gKyAgICAgY29yZSA9IGluc3QtPmNvcmU7DQo+ID4gKyAgICAg aWYgKCFjb3JlKSB7DQo+ID4gKyAgICAgICAgICAgICBjb3JlID0gdnB1X3JlcXVlc3RfY29yZSh2 cHUsIGluc3QtPnR5cGUpOw0KPiA+ICsgICAgICAgICAgICAgaWYgKCFjb3JlKSB7DQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIGRldl9lcnIodnB1LT5kZXYsICJ0aGVyZSBpcyBubyB2cHUgY29y ZSBmb3IgJXNcbiIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdnB1X2NvcmVf dHlwZV9kZXNjKGluc3QtPnR5cGUpKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJu IC1FSU5WQUw7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICBpbnN0LT5j b3JlID0gY29yZTsNCj4gPiArICAgICAgICAgICAgIGluc3QtPmRldiA9IGdldF9kZXZpY2UoY29y ZS0+ZGV2KTsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIG11dGV4X2xvY2soJmNvcmUt PmxvY2spOw0KPiA+ICsgICAgIGlmIChpbnN0LT5pZCA+PSAwICYmIGluc3QtPmlkIDwgY29yZS0+ c3VwcG9ydGVkX2luc3RhbmNlX2NvdW50KQ0KPiA+ICsgICAgICAgICAgICAgZ290byBleGl0Ow0K PiA+ICsNCj4gPiArICAgICByZXQgPSB2cHVfY29yZV9hY3F1aXJlX2luc3RhbmNlKGNvcmUpOw0K PiA+ICsgICAgIGlmIChyZXQgPCAwKQ0KPiA+ICsgICAgICAgICAgICAgZ290byBleGl0Ow0KPiA+ ICsNCj4gPiArICAgICB2cHVfdHJhY2UoaW5zdC0+ZGV2LCAiWyVkXSAlcFxuIiwgcmV0LCBpbnN0 KTsNCj4gPiArICAgICBpbnN0LT5pZCA9IHJldDsNCj4gPiArICAgICBsaXN0X2FkZF90YWlsKCZp bnN0LT5saXN0LCAmY29yZS0+aW5zdGFuY2VzKTsNCj4gPiArICAgICByZXQgPSAwOw0KPiA+ICsg ICAgIGlmIChjb3JlLT5yZXMtPmFjdF9zaXplKSB7DQo+ID4gKyAgICAgICAgICAgICBpbnN0LT5h Y3QucGh5cyA9IGNvcmUtPmFjdC5waHlzICsgY29yZS0+cmVzLT5hY3Rfc2l6ZSAqDQo+IGluc3Qt PmlkOw0KPiA+ICsgICAgICAgICAgICAgaW5zdC0+YWN0LnZpcnQgPSBjb3JlLT5hY3QudmlydCAr IGNvcmUtPnJlcy0+YWN0X3NpemUgKiBpbnN0LT5pZDsNCj4gPiArICAgICAgICAgICAgIGluc3Qt PmFjdC5sZW5ndGggPSBjb3JlLT5yZXMtPmFjdF9zaXplOw0KPiA+ICsgICAgIH0NCj4gPiArICAg ICB2cHVfaW5zdF9jcmVhdGVfZGJnZnNfZmlsZShpbnN0KTsNCj4gPiArZXhpdDoNCj4gPiArICAg ICBtdXRleF91bmxvY2soJmNvcmUtPmxvY2spOw0KPiA+ICsNCj4gPiArICAgICBpZiAocmV0KQ0K PiA+ICsgICAgICAgICAgICAgZGV2X2Vycihjb3JlLT5kZXYsICJyZWdpc3RlciBpbnN0YW5jZSBm YWlsXG4iKTsNCj4gPiArICAgICByZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQg dnB1X2luc3RfdW5yZWdpc3RlcihzdHJ1Y3QgdnB1X2luc3QgKmluc3QpDQo+ID4gK3sNCj4gPiAr ICAgICBzdHJ1Y3QgdnB1X2NvcmUgKmNvcmU7DQo+ID4gKw0KPiA+ICsgICAgIFdBUk5fT04oIWlu c3QpOw0KPiA+ICsNCj4gPiArICAgICBpZiAoIWluc3QtPmNvcmUpDQo+ID4gKyAgICAgICAgICAg ICByZXR1cm4gMDsNCj4gPiArDQo+ID4gKyAgICAgY29yZSA9IGluc3QtPmNvcmU7DQo+ID4gKyAg ICAgdnB1X2NsZWFyX3JlcXVlc3QoaW5zdCk7DQo+ID4gKyAgICAgbXV0ZXhfbG9jaygmY29yZS0+ bG9jayk7DQo+ID4gKyAgICAgaWYgKGluc3QtPmlkID49IDAgJiYgaW5zdC0+aWQgPCBjb3JlLT5z dXBwb3J0ZWRfaW5zdGFuY2VfY291bnQpIHsNCj4gPiArICAgICAgICAgICAgIHZwdV9pbnN0X3Jl bW92ZV9kYmdmc19maWxlKGluc3QpOw0KPiA+ICsgICAgICAgICAgICAgbGlzdF9kZWxfaW5pdCgm aW5zdC0+bGlzdCk7DQo+ID4gKyAgICAgICAgICAgICB2cHVfY29yZV9yZWxlYXNlX2luc3RhbmNl KGNvcmUsIGluc3QtPmlkKTsNCj4gPiArICAgICAgICAgICAgIGluc3QtPmlkID0gVlBVX0lOU1Rf TlVMTF9JRDsNCj4gPiArICAgICB9DQo+ID4gKyAgICAgdnB1X2NvcmVfY2hlY2tfaGFuZyhjb3Jl KTsNCj4gPiArICAgICBpZiAoY29yZS0+c3RhdGUgPT0gVlBVX0NPUkVfSEFORyAmJiAhY29yZS0+ aW5zdGFuY2VfbWFzaykgew0KPiA+ICsgICAgICAgICAgICAgZGV2X2luZm8oY29yZS0+ZGV2LCAi cmVzZXQgaGFuZyBjb3JlXG4iKTsNCj4gPiArICAgICAgICAgICAgIGlmICghdnB1X2NvcmVfc3df cmVzZXQoY29yZSkpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgY29yZS0+c3RhdGUgPSBW UFVfQ09SRV9BQ1RJVkU7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGNvcmUtPmhhbmdfbWFz ayA9IDA7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKyAgICAgfQ0KPiA+ICsgICAgIG11dGV4 X3VubG9jaygmY29yZS0+bG9jayk7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgdnB1X2luc3QgKnZwdV9jb3JlX2ZpbmRfaW5zdGFuY2Uoc3Ry dWN0IHZwdV9jb3JlICpjb3JlLCB1MzIgaW5kZXgpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3Qg dnB1X2luc3QgKmluc3QgPSBOVUxMOw0KPiA+ICsgICAgIHN0cnVjdCB2cHVfaW5zdCAqdG1wOw0K PiA+ICsNCj4gPiArICAgICBtdXRleF9sb2NrKCZjb3JlLT5sb2NrKTsNCj4gPiArICAgICBpZiAo IXRlc3RfYml0KGluZGV4LCAmY29yZS0+aW5zdGFuY2VfbWFzaykpDQo+ID4gKyAgICAgICAgICAg ICBnb3RvIGV4aXQ7DQo+ID4gKyAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXAsICZjb3JlLT5p bnN0YW5jZXMsIGxpc3QpIHsNCj4gPiArICAgICAgICAgICAgIGlmICh0bXAtPmlkID09IGluZGV4 KSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGluc3QgPSB2cHVfaW5zdF9nZXQodG1wKTsN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ ID4gKyAgICAgfQ0KPiA+ICtleGl0Og0KPiA+ICsgICAgIG11dGV4X3VubG9jaygmY29yZS0+bG9j ayk7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiBpbnN0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtj b25zdCBzdHJ1Y3QgdnB1X2NvcmVfcmVzb3VyY2VzICp2cHVfZ2V0X3Jlc291cmNlKHN0cnVjdCB2 cHVfaW5zdCAqaW5zdCkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfZGV2ICp2cHU7DQo+ ID4gKyAgICAgc3RydWN0IHZwdV9jb3JlICpjb3JlID0gTlVMTDsNCj4gPiArICAgICBjb25zdCBz dHJ1Y3QgdnB1X2NvcmVfcmVzb3VyY2VzICpyZXMgPSBOVUxMOw0KPiA+ICsNCj4gPiArICAgICBp ZiAoIWluc3QgfHwgIWluc3QtPnZwdSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiBOVUxMOw0K PiA+ICsNCj4gPiArICAgICBpZiAoaW5zdC0+Y29yZSAmJiBpbnN0LT5jb3JlLT5yZXMpDQo+ID4g KyAgICAgICAgICAgICByZXR1cm4gaW5zdC0+Y29yZS0+cmVzOw0KPiA+ICsNCj4gPiArICAgICB2 cHUgPSBpbnN0LT52cHU7DQo+ID4gKyAgICAgbXV0ZXhfbG9jaygmdnB1LT5sb2NrKTsNCj4gPiAr ICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KGNvcmUsICZ2cHUtPmNvcmVzLCBsaXN0KSB7DQo+ID4g KyAgICAgICAgICAgICBpZiAoY29yZS0+dHlwZSA9PSBpbnN0LT50eXBlKSB7DQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgIHJlcyA9IGNvcmUtPnJlczsNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKyAgICAgfQ0KPiA+ICsgICAgIG11 dGV4X3VubG9jaygmdnB1LT5sb2NrKTsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIHJlczsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2cHVfY29yZV9wYXJzZV9kdChzdHJ1Y3QgdnB1 X2NvcmUgKmNvcmUsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApDQo+ID4gK3sNCj4gPiArICAgICBz dHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGU7DQo+ID4gKyAgICAgc3RydWN0IHJlc291cmNlIHJlczsN Cj4gPiArDQo+ID4gKyAgICAgaWYgKG9mX2NvdW50X3BoYW5kbGVfd2l0aF9hcmdzKG5wLCAibWVt b3J5LXJlZ2lvbiIsIE5VTEwpIDwgMikgew0KPiA+ICsgICAgICAgICAgICAgZGV2X2Vycihjb3Jl LT5kZXYsICJuZWVkIDIgbWVtb3J5LXJlZ2lvbiBmb3IgYm9vdCBhbmQNCj4gcnBjXG4iKTsNCj4g PiArICAgICAgICAgICAgIHJldHVybiAtRU5PREVWOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4g KyAgICAgbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUobnAsICJtZW1vcnktcmVnaW9uIiwgMCk7DQo+ ID4gKyAgICAgaWYgKCFub2RlKSB7DQo+ID4gKyAgICAgICAgICAgICBkZXZfZXJyKGNvcmUtPmRl diwgImJvb3QtcmVnaW9uIG9mX3BhcnNlX3BoYW5kbGUgZXJyb3JcbiIpOw0KPiA+ICsgICAgICAg ICAgICAgcmV0dXJuIC1FTk9ERVY7DQo+ID4gKyAgICAgfQ0KPiA+ICsgICAgIGlmIChvZl9hZGRy ZXNzX3RvX3Jlc291cmNlKG5vZGUsIDAsICZyZXMpKSB7DQo+ID4gKyAgICAgICAgICAgICBkZXZf ZXJyKGNvcmUtPmRldiwgImJvb3QtcmVnaW9uIG9mX2FkZHJlc3NfdG9fcmVzb3VyY2UNCj4gZXJy b3JcbiIpOw0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4gKyAgICAgfQ0K PiA+ICsgICAgIGNvcmUtPmZ3LnBoeXMgPSByZXMuc3RhcnQ7DQo+ID4gKyAgICAgY29yZS0+Zncu bGVuZ3RoID0gcmVzb3VyY2Vfc2l6ZSgmcmVzKTsNCj4gPiArDQo+ID4gKyAgICAgbm9kZSA9IG9m X3BhcnNlX3BoYW5kbGUobnAsICJtZW1vcnktcmVnaW9uIiwgMSk7DQo+ID4gKyAgICAgaWYgKCFu b2RlKSB7DQo+ID4gKyAgICAgICAgICAgICBkZXZfZXJyKGNvcmUtPmRldiwgInJwYy1yZWdpb24g b2ZfcGFyc2VfcGhhbmRsZSBlcnJvclxuIik7DQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVO T0RFVjsNCj4gPiArICAgICB9DQo+ID4gKyAgICAgaWYgKG9mX2FkZHJlc3NfdG9fcmVzb3VyY2Uo bm9kZSwgMCwgJnJlcykpIHsNCj4gPiArICAgICAgICAgICAgIGRldl9lcnIoY29yZS0+ZGV2LCAi cnBjLXJlZ2lvbiBvZl9hZGRyZXNzX3RvX3Jlc291cmNlDQo+IGVycm9yXG4iKTsNCj4gPiArICAg ICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsgICAgIH0NCj4gPiArICAgICBjb3JlLT5y cGMucGh5cyA9IHJlcy5zdGFydDsNCj4gPiArICAgICBjb3JlLT5ycGMubGVuZ3RoID0gcmVzb3Vy Y2Vfc2l6ZSgmcmVzKTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKGNvcmUtPnJwYy5sZW5ndGggPCBj b3JlLT5yZXMtPnJwY19zaXplICsgY29yZS0+cmVzLT5md2xvZ19zaXplKSB7DQo+ID4gKyAgICAg ICAgICAgICBkZXZfZXJyKGNvcmUtPmRldiwgInRoZSBycGMtcmVnaW9uIDwlcGFkLCAweCV4PiBp cyBub3QNCj4gZW5vdWdoXG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZj b3JlLT5ycGMucGh5cywgY29yZS0+cnBjLmxlbmd0aCk7DQo+ID4gKyAgICAgICAgICAgICByZXR1 cm4gLUVJTlZBTDsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIGNvcmUtPmZ3LnZpcnQg PSBpb3JlbWFwX3djKGNvcmUtPmZ3LnBoeXMsIGNvcmUtPmZ3Lmxlbmd0aCk7DQo+ID4gKyAgICAg Y29yZS0+cnBjLnZpcnQgPSBpb3JlbWFwX3djKGNvcmUtPnJwYy5waHlzLCBjb3JlLT5ycGMubGVu Z3RoKTsNCj4gPiArICAgICBtZW1zZXRfaW8oY29yZS0+cnBjLnZpcnQsIDAsIGNvcmUtPnJwYy5s ZW5ndGgpOw0KPiA+ICsNCj4gPiArICAgICBpZiAodnB1X2lmYWNlX2NoZWNrX21lbW9yeV9yZWdp b24oY29yZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLT5ycGMucGh5 cywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3JlLT5ycGMubGVuZ3RoKSAh PQ0KPiBWUFVfQ09SRV9NRU1PUllfVU5DQUNIRUQpIHsNCj4gPiArICAgICAgICAgICAgIGRldl9l cnIoY29yZS0+ZGV2LCAicnBjIHJlZ2lvbjwlcGFkLCAweCV4PiBpc24ndA0KPiB1bmNhY2hlZFxu IiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmY29yZS0+cnBjLnBoeXMsIGNv cmUtPnJwYy5sZW5ndGgpOw0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4g KyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBjb3JlLT5sb2cucGh5cyA9IGNvcmUtPnJwYy5waHlz ICsgY29yZS0+cmVzLT5ycGNfc2l6ZTsNCj4gPiArICAgICBjb3JlLT5sb2cudmlydCA9IGNvcmUt PnJwYy52aXJ0ICsgY29yZS0+cmVzLT5ycGNfc2l6ZTsNCj4gPiArICAgICBjb3JlLT5sb2cubGVu Z3RoID0gY29yZS0+cmVzLT5md2xvZ19zaXplOw0KPiA+ICsgICAgIGNvcmUtPmFjdC5waHlzID0g Y29yZS0+bG9nLnBoeXMgKyBjb3JlLT5sb2cubGVuZ3RoOw0KPiA+ICsgICAgIGNvcmUtPmFjdC52 aXJ0ID0gY29yZS0+bG9nLnZpcnQgKyBjb3JlLT5sb2cubGVuZ3RoOw0KPiA+ICsgICAgIGNvcmUt PmFjdC5sZW5ndGggPSBjb3JlLT5ycGMubGVuZ3RoIC0gY29yZS0+cmVzLT5ycGNfc2l6ZSAtDQo+ IGNvcmUtPmxvZy5sZW5ndGg7DQo+ID4gKyAgICAgY29yZS0+cnBjLmxlbmd0aCA9IGNvcmUtPnJl cy0+cnBjX3NpemU7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdGF0aWMgaW50IHZwdV9jb3JlX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Ow0K PiA+ICsgICAgIHN0cnVjdCB2cHVfY29yZSAqY29yZTsNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2Rl diAqdnB1ID0gZGV2X2dldF9kcnZkYXRhKGRldi0+cGFyZW50KTsNCj4gPiArICAgICBzdHJ1Y3Qg dnB1X3NoYXJlZF9hZGRyICppZmFjZTsNCj4gPiArICAgICB1MzIgaWZhY2VfZGF0YV9zaXplOw0K PiA+ICsgICAgIGludCByZXQ7DQo+ID4gKw0KPiA+ICsgICAgIGRldl9kYmcoZGV2LCAicHJvYmVc biIpOw0KPiA+ICsgICAgIGlmICghdnB1KQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5W QUw7DQo+ID4gKyAgICAgY29yZSA9IGRldm1fa3phbGxvYyhkZXYsIHNpemVvZigqY29yZSksIEdG UF9LRVJORUwpOw0KPiA+ICsgICAgIGlmICghY29yZSkNCj4gPiArICAgICAgICAgICAgIHJldHVy biAtRU5PTUVNOw0KPiA+ICsNCj4gPiArICAgICBjb3JlLT5wZGV2ID0gcGRldjsNCj4gPiArICAg ICBjb3JlLT5kZXYgPSBkZXY7DQo+ID4gKyAgICAgcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwg Y29yZSk7DQo+ID4gKyAgICAgY29yZS0+dnB1ID0gdnB1Ow0KPiA+ICsgICAgIElOSVRfTElTVF9I RUFEKCZjb3JlLT5pbnN0YW5jZXMpOw0KPiA+ICsgICAgIG11dGV4X2luaXQoJmNvcmUtPmxvY2sp Ow0KPiA+ICsgICAgIG11dGV4X2luaXQoJmNvcmUtPmNtZF9sb2NrKTsNCj4gPiArICAgICBpbml0 X2NvbXBsZXRpb24oJmNvcmUtPmNtcCk7DQo+ID4gKyAgICAgaW5pdF93YWl0cXVldWVfaGVhZCgm Y29yZS0+YWNrX3dxKTsNCj4gPiArICAgICBjb3JlLT5zdGF0ZSA9IFZQVV9DT1JFX0RFSU5JVDsN Cj4gPiArDQo+ID4gKyAgICAgY29yZS0+cmVzID0gb2ZfZGV2aWNlX2dldF9tYXRjaF9kYXRhKGRl dik7DQo+ID4gKyAgICAgaWYgKCFjb3JlLT5yZXMpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4g LUVOT0RFVjsNCj4gPiArDQo+ID4gKyAgICAgY29yZS0+dHlwZSA9IGNvcmUtPnJlcy0+dHlwZTsN Cj4gPiArICAgICBjb3JlLT5pZCA9IG9mX2FsaWFzX2dldF9pZChkZXYtPm9mX25vZGUsICJ2cHVf Y29yZSIpOw0KPiA+ICsgICAgIGlmIChjb3JlLT5pZCA8IDApIHsNCj4gPiArICAgICAgICAgICAg IGRldl9lcnIoZGV2LCAiY2FuJ3QgZ2V0IHZwdSBjb3JlIGlkXG4iKTsNCj4gPiArICAgICAgICAg ICAgIHJldHVybiBjb3JlLT5pZDsNCj4gPiArICAgICB9DQo+ID4gKyAgICAgZGV2X2luZm8oY29y ZS0+ZGV2LCAiWyVkXSA9ICVzXG4iLCBjb3JlLT5pZCwNCj4gdnB1X2NvcmVfdHlwZV9kZXNjKGNv cmUtPnR5cGUpKTsNCj4gPiArICAgICByZXQgPSB2cHVfY29yZV9wYXJzZV9kdChjb3JlLCBkZXYt Pm9mX25vZGUpOw0KPiA+ICsgICAgIGlmIChyZXQpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4g cmV0Ow0KPiA+ICsNCj4gPiArICAgICBjb3JlLT5iYXNlID0gZGV2bV9wbGF0Zm9ybV9pb3JlbWFw X3Jlc291cmNlKHBkZXYsIDApOw0KPiA+ICsgICAgIGlmIChJU19FUlIoY29yZS0+YmFzZSkpDQo+ ID4gKyAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihjb3JlLT5iYXNlKTsNCj4gPiArDQo+ID4g KyAgICAgaWYgKCF2cHVfaWZhY2VfY2hlY2tfY29kZWMoY29yZSkpIHsNCj4gPiArICAgICAgICAg ICAgIGRldl9lcnIoY29yZS0+ZGV2LCAiaXMgbm90IHN1cHBvcnRlZFxuIik7DQo+ID4gKyAgICAg ICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIHJl dCA9IHZwdV9tYm94X2luaXQoY29yZSk7DQo+ID4gKyAgICAgaWYgKHJldCkNCj4gPiArICAgICAg ICAgICAgIHJldHVybiByZXQ7DQo+ID4gKw0KPiA+ICsgICAgIGlmYWNlID0gZGV2bV9remFsbG9j KGRldiwgc2l6ZW9mKCppZmFjZSksIEdGUF9LRVJORUwpOw0KPiA+ICsgICAgIGlmICghaWZhY2Up DQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gLUVOT01FTTsNCj4gPiArDQo+ID4gKyAgICAgaWZh Y2VfZGF0YV9zaXplID0gdnB1X2lmYWNlX2dldF9kYXRhX3NpemUoY29yZSk7DQo+ID4gKyAgICAg aWYgKGlmYWNlX2RhdGFfc2l6ZSkgew0KPiA+ICsgICAgICAgICAgICAgaWZhY2UtPnByaXYgPSBk ZXZtX2t6YWxsb2MoZGV2LCBpZmFjZV9kYXRhX3NpemUsDQo+IEdGUF9LRVJORUwpOw0KPiA+ICsg ICAgICAgICAgICAgaWYgKCFpZmFjZS0+cHJpdikNCj4gPiArICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIC1FTk9NRU07DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICByZXQgPSB2cHVf aWZhY2VfaW5pdChjb3JlLCBpZmFjZSwgJmNvcmUtPnJwYywgY29yZS0+ZncucGh5cyk7DQo+ID4g KyAgICAgaWYgKHJldCkgew0KPiA+ICsgICAgICAgICAgICAgZGV2X2Vycihjb3JlLT5kZXYsICJp bml0IGlmYWNlIGZhaWwsIHJldCA9ICVkXG4iLCByZXQpOw0KPiA+ICsgICAgICAgICAgICAgcmV0 dXJuIHJldDsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIHZwdV9pZmFjZV9jb25maWdf c3lzdGVtKGNvcmUsIHZwdS0+cmVzLT5tcmVnX2Jhc2UsIHZwdS0+YmFzZSk7DQo+ID4gKyAgICAg dnB1X2lmYWNlX3NldF9sb2dfYnVmKGNvcmUsICZjb3JlLT5sb2cpOw0KPiA+ICsNCj4gPiArICAg ICBwbV9ydW50aW1lX2VuYWJsZShkZXYpOw0KPiA+ICsgICAgIHJldCA9IHBtX3J1bnRpbWVfZ2V0 X3N5bmMoZGV2KTsNCj4gPiArICAgICBpZiAocmV0KSB7DQo+ID4gKyAgICAgICAgICAgICBwbV9y dW50aW1lX3B1dF9ub2lkbGUoZGV2KTsNCj4gPiArICAgICAgICAgICAgIHBtX3J1bnRpbWVfc2V0 X3N1c3BlbmRlZChkZXYpOw0KPiA+ICsgICAgICAgICAgICAgZ290byBlcnJfcnVudGltZV9kaXNh YmxlOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgcmV0ID0gdnB1X2NvcmVfcmVnaXN0 ZXIoZGV2LT5wYXJlbnQsIGNvcmUpOw0KPiA+ICsgICAgIGlmIChyZXQpDQo+ID4gKyAgICAgICAg ICAgICBnb3RvIGVycl9jb3JlX3JlZ2lzdGVyOw0KPiA+ICsgICAgIGNvcmUtPnBhcmVudCA9IGRl di0+cGFyZW50Ow0KPiA+ICsNCj4gPiArICAgICBwbV9ydW50aW1lX3B1dF9zeW5jKGRldik7DQo+ ID4gKyAgICAgdnB1X2NvcmVfY3JlYXRlX2RiZ2ZzX2ZpbGUoY29yZSk7DQo+ID4gKw0KPiA+ICsg ICAgIHJldHVybiAwOw0KPiA+ICsNCj4gPiArZXJyX2NvcmVfcmVnaXN0ZXI6DQo+ID4gKyAgICAg cG1fcnVudGltZV9wdXRfc3luYyhkZXYpOw0KPiA+ICtlcnJfcnVudGltZV9kaXNhYmxlOg0KPiA+ ICsgICAgIHBtX3J1bnRpbWVfZGlzYWJsZShkZXYpOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4g cmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZwdV9jb3JlX3JlbW92ZShzdHJ1 Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IGRldmlj ZSAqZGV2ID0gJnBkZXYtPmRldjsNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUgPSBw bGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsNCj4gPiArICAgICBpbnQgcmV0Ow0KPiA+ICsNCj4g PiArICAgICB2cHVfY29yZV9yZW1vdmVfZGJnZnNfZmlsZShjb3JlKTsNCj4gPiArICAgICByZXQg PSBwbV9ydW50aW1lX2dldF9zeW5jKGRldik7DQo+ID4gKyAgICAgV0FSTl9PTihyZXQgPCAwKTsN Cj4gPiArDQo+ID4gKyAgICAgdnB1X2NvcmVfc2h1dGRvd24oY29yZSk7DQo+ID4gKyAgICAgcG1f cnVudGltZV9wdXRfc3luYyhkZXYpOw0KPiA+ICsgICAgIHBtX3J1bnRpbWVfZGlzYWJsZShkZXYp Ow0KPiA+ICsNCj4gPiArICAgICB2cHVfY29yZV91bnJlZ2lzdGVyKGNvcmUtPnBhcmVudCwgY29y ZSk7DQo+ID4gKyAgICAgaW91bm1hcChjb3JlLT5mdy52aXJ0KTsNCj4gPiArICAgICBpb3VubWFw KGNvcmUtPnJwYy52aXJ0KTsNCj4gPiArICAgICBtdXRleF9kZXN0cm95KCZjb3JlLT5sb2NrKTsN Cj4gPiArICAgICBtdXRleF9kZXN0cm95KCZjb3JlLT5jbWRfbG9jayk7DQo+ID4gKw0KPiA+ICsg ICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IF9fbWF5YmVfdW51 c2VkIHZwdV9jb3JlX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikNCj4gPiArew0K PiA+ICsgICAgIHN0cnVjdCB2cHVfY29yZSAqY29yZSA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0K PiA+ICsNCj4gPiArICAgICByZXR1cm4gdnB1X21ib3hfcmVxdWVzdChjb3JlKTsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIGludCBfX21heWJlX3VudXNlZCB2cHVfY29yZV9ydW50aW1lX3N1 c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9j b3JlICpjb3JlID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQo+ID4gKw0KPiA+ICsgICAgIHZwdV9t Ym94X2ZyZWUoY29yZSk7DQo+ID4gKyAgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyB2b2lkIHZwdV9jb3JlX2NhbmNlbF93b3JrKHN0cnVjdCB2cHVfY29yZSAqY29yZSkN Cj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfaW5zdCAqaW5zdCA9IE5VTEw7DQo+ID4gKw0K PiA+ICsgICAgIGNhbmNlbF93b3JrX3N5bmMoJmNvcmUtPm1zZ193b3JrKTsNCj4gPiArICAgICBj YW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmNvcmUtPm1zZ19kZWxheWVkX3dvcmspOw0KPiA+ICsN Cj4gPiArICAgICBtdXRleF9sb2NrKCZjb3JlLT5sb2NrKTsNCj4gPiArICAgICBsaXN0X2Zvcl9l YWNoX2VudHJ5KGluc3QsICZjb3JlLT5pbnN0YW5jZXMsIGxpc3QpDQo+ID4gKyAgICAgICAgICAg ICBjYW5jZWxfd29ya19zeW5jKCZpbnN0LT5tc2dfd29yayk7DQo+ID4gKyAgICAgbXV0ZXhfdW5s b2NrKCZjb3JlLT5sb2NrKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgdnB1X2Nv cmVfcmVzdW1lX3dvcmsoc3RydWN0IHZwdV9jb3JlICpjb3JlKQ0KPiA+ICt7DQo+ID4gKyAgICAg c3RydWN0IHZwdV9pbnN0ICppbnN0ID0gTlVMTDsNCj4gPiArICAgICB1bnNpZ25lZCBsb25nIGRl bGF5ID0gbXNlY3NfdG9famlmZmllcygxMCk7DQo+ID4gKw0KPiA+ICsgICAgIHF1ZXVlX3dvcmso Y29yZS0+d29ya3F1ZXVlLCAmY29yZS0+bXNnX3dvcmspOw0KPiA+ICsgICAgIHF1ZXVlX2RlbGF5 ZWRfd29yayhjb3JlLT53b3JrcXVldWUsICZjb3JlLT5tc2dfZGVsYXllZF93b3JrLA0KPiBkZWxh eSk7DQo+ID4gKw0KPiA+ICsgICAgIG11dGV4X2xvY2soJmNvcmUtPmxvY2spOw0KPiA+ICsgICAg IGxpc3RfZm9yX2VhY2hfZW50cnkoaW5zdCwgJmNvcmUtPmluc3RhbmNlcywgbGlzdCkNCj4gPiAr ICAgICAgICAgICAgIHF1ZXVlX3dvcmsoaW5zdC0+d29ya3F1ZXVlLCAmaW5zdC0+bXNnX3dvcmsp Ow0KPiA+ICsgICAgIG11dGV4X3VubG9jaygmY29yZS0+bG9jayk7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgdnB1X2NvcmVfcmVzdW1lKHN0cnVjdCBkZXZp Y2UgKmRldikNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfY29yZSAqY29yZSA9IGRldl9n ZXRfZHJ2ZGF0YShkZXYpOw0KPiA+ICsgICAgIGludCByZXQgPSAwOw0KPiA+ICsNCj4gPiArICAg ICBpZiAoIWNvcmUtPnJlcy0+c3RhbmRhbG9uZSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAw Ow0KPiA+ICsNCj4gPiArICAgICBtdXRleF9sb2NrKCZjb3JlLT5sb2NrKTsNCj4gPiArICAgICBw bV9ydW50aW1lX2dldF9zeW5jKGRldik7DQo+ID4gKyAgICAgdnB1X2NvcmVfZ2V0X3ZwdShjb3Jl KTsNCj4gPiArICAgICBpZiAoY29yZS0+c3RhdGUgIT0gVlBVX0NPUkVfU05BUFNIT1QpDQo+ID4g KyAgICAgICAgICAgICBnb3RvIGV4aXQ7DQo+ID4gKw0KPiA+ICsgICAgIGlmICghdnB1X2lmYWNl X2dldF9wb3dlcl9zdGF0ZShjb3JlKSkgew0KPiA+ICsgICAgICAgICAgICAgaWYgKCFsaXN0X2Vt cHR5KCZjb3JlLT5pbnN0YW5jZXMpKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJldCA9 IHZwdV9jb3JlX2Jvb3QoY29yZSwgZmFsc2UpOw0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBp ZiAocmV0KSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGV2X2Vycihjb3Jl LT5kZXYsICIlcyBib290IGZhaWxcbiIsDQo+IF9fZnVuY19fKTsNCj4gPiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb3JlLT5zdGF0ZSA9IFZQVV9DT1JFX0RFSU5JVDsNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGV4aXQ7DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgIH0NCj4gPiArICAgICAgICAgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgIGNvcmUtPnN0YXRlID0gVlBVX0NPUkVfREVJTklUOw0KPiA+ICsgICAgICAgICAgICAg fQ0KPiA+ICsgICAgIH0gZWxzZSB7DQo+ID4gKyAgICAgICAgICAgICBpZiAoIWxpc3RfZW1wdHko JmNvcmUtPmluc3RhbmNlcykpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgcmV0ID0gdnB1 X2NvcmVfc3dfcmVzZXQoY29yZSk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmIChyZXQp IHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKGNvcmUtPmRldiwg IiVzIHN3X3Jlc2V0IGZhaWxcbiIsDQo+IF9fZnVuY19fKTsNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb3JlLT5zdGF0ZSA9IFZQVV9DT1JFX0hBTkc7DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZ290byBleGl0Ow0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICB9DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKyAgICAgICAgICAgICBjb3JlLT5zdGF0ZSA9 IFZQVV9DT1JFX0FDVElWRTsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICtleGl0Og0KPiA+ICsg ICAgIHBtX3J1bnRpbWVfcHV0X3N5bmMoZGV2KTsNCj4gPiArICAgICBtdXRleF91bmxvY2soJmNv cmUtPmxvY2spOw0KPiA+ICsNCj4gPiArICAgICB2cHVfY29yZV9yZXN1bWVfd29yayhjb3JlKTsN Cj4gPiArICAgICByZXR1cm4gcmV0Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IF9f bWF5YmVfdW51c2VkIHZwdV9jb3JlX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2KQ0KPiA+ICt7 DQo+ID4gKyAgICAgc3RydWN0IHZwdV9jb3JlICpjb3JlID0gZGV2X2dldF9kcnZkYXRhKGRldik7 DQo+ID4gKyAgICAgaW50IHJldCA9IDA7DQo+ID4gKw0KPiA+ICsgICAgIGlmICghY29yZS0+cmVz LT5zdGFuZGFsb25lKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICsg ICAgIG11dGV4X2xvY2soJmNvcmUtPmxvY2spOw0KPiA+ICsgICAgIGlmIChjb3JlLT5zdGF0ZSA9 PSBWUFVfQ09SRV9BQ1RJVkUpIHsNCj4gPiArICAgICAgICAgICAgIGlmICghbGlzdF9lbXB0eSgm Y29yZS0+aW5zdGFuY2VzKSkgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICByZXQgPSB2cHVf Y29yZV9zbmFwc2hvdChjb3JlKTsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgaWYgKHJldCkg ew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG11dGV4X3VubG9jaygmY29yZS0+ bG9jayk7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsNCj4g PiArICAgICAgICAgICAgICAgICAgICAgfQ0KPiA+ICsgICAgICAgICAgICAgfQ0KPiA+ICsNCj4g PiArICAgICAgICAgICAgIGNvcmUtPnN0YXRlID0gVlBVX0NPUkVfU05BUFNIT1Q7DQo+ID4gKyAg ICAgfQ0KPiA+ICsgICAgIG11dGV4X3VubG9jaygmY29yZS0+bG9jayk7DQo+ID4gKw0KPiA+ICsg ICAgIHZwdV9jb3JlX2NhbmNlbF93b3JrKGNvcmUpOw0KPiA+ICsNCj4gPiArICAgICBtdXRleF9s b2NrKCZjb3JlLT5sb2NrKTsNCj4gPiArICAgICB2cHVfY29yZV9wdXRfdnB1KGNvcmUpOw0KPiA+ ICsgICAgIG11dGV4X3VubG9jaygmY29yZS0+bG9jayk7DQo+ID4gKyAgICAgcmV0dXJuIHJldDsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIHZwdV9j b3JlX3BtX29wcyA9IHsNCj4gPiArICAgICBTRVRfUlVOVElNRV9QTV9PUFModnB1X2NvcmVfcnVu dGltZV9zdXNwZW5kLA0KPiB2cHVfY29yZV9ydW50aW1lX3Jlc3VtZSwgTlVMTCkNCj4gPiArICAg ICBTRVRfU1lTVEVNX1NMRUVQX1BNX09QUyh2cHVfY29yZV9zdXNwZW5kLCB2cHVfY29yZV9yZXN1 bWUpDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IHZwdV9jb3JlX3Jlc291cmNl cyBpbXg4cV9lbmMgPSB7DQo+ID4gKyAgICAgLnR5cGUgPSBWUFVfQ09SRV9UWVBFX0VOQywNCj4g PiArICAgICAuZnduYW1lID0gInZwdS92cHVfZndfaW14OF9lbmMuYmluIiwNCj4gPiArICAgICAu c3RyaWRlID0gMTYsDQo+ID4gKyAgICAgLm1heF93aWR0aCA9IDE5MjAsDQo+ID4gKyAgICAgLm1h eF9oZWlnaHQgPSAxOTIwLA0KPiA+ICsgICAgIC5taW5fd2lkdGggPSA2NCwNCj4gPiArICAgICAu bWluX2hlaWdodCA9IDQ4LA0KPiA+ICsgICAgIC5zdGVwX3dpZHRoID0gMiwNCj4gPiArICAgICAu c3RlcF9oZWlnaHQgPSAyLA0KPiA+ICsgICAgIC5ycGNfc2l6ZSA9IDB4ODAwMDAsDQo+ID4gKyAg ICAgLmZ3bG9nX3NpemUgPSAweDgwMDAwLA0KPiA+ICsgICAgIC5hY3Rfc2l6ZSA9IDB4YzAwMDAs DQo+ID4gKyAgICAgLnN0YW5kYWxvbmUgPSB0cnVlLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3Rh dGljIHN0cnVjdCB2cHVfY29yZV9yZXNvdXJjZXMgaW14OHFfZGVjID0gew0KPiA+ICsgICAgIC50 eXBlID0gVlBVX0NPUkVfVFlQRV9ERUMsDQo+ID4gKyAgICAgLmZ3bmFtZSA9ICJ2cHUvdnB1X2Z3 X2lteDhfZGVjLmJpbiIsDQo+ID4gKyAgICAgLnN0cmlkZSA9IDI1NiwNCj4gPiArICAgICAubWF4 X3dpZHRoID0gODE4OCwNCj4gPiArICAgICAubWF4X2hlaWdodCA9IDgxODgsDQo+ID4gKyAgICAg Lm1pbl93aWR0aCA9IDE2LA0KPiA+ICsgICAgIC5taW5faGVpZ2h0ID0gMTYsDQo+ID4gKyAgICAg LnN0ZXBfd2lkdGggPSAxLA0KPiA+ICsgICAgIC5zdGVwX2hlaWdodCA9IDEsDQo+ID4gKyAgICAg LnJwY19zaXplID0gMHg4MDAwMCwNCj4gPiArICAgICAuZndsb2dfc2l6ZSA9IDB4ODAwMDAsDQo+ ID4gKyAgICAgLnN0YW5kYWxvbmUgPSB0cnVlLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGlj IGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgdnB1X2NvcmVfZHRfbWF0Y2hbXSA9IHsNCj4gPiAr ICAgICB7IC5jb21wYXRpYmxlID0gIm54cCxpbXg4cS12cHUtZW5jb2RlciIsIC5kYXRhID0gJmlt eDhxX2VuYyB9LA0KPiA+ICsgICAgIHsgLmNvbXBhdGlibGUgPSAibnhwLGlteDhxLXZwdS1kZWNv ZGVyIiwgLmRhdGEgPSAmaW14OHFfZGVjIH0sDQo+ID4gKyAgICAge30NCj4gPiArfTsNCj4gPiAr TU9EVUxFX0RFVklDRV9UQUJMRShvZiwgdnB1X2NvcmVfZHRfbWF0Y2gpOw0KPiA+ICsNCj4gPiAr c3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYW1waGlvbl92cHVfY29yZV9kcml2ZXIgPSB7 DQo+ID4gKyAgICAgLnByb2JlID0gdnB1X2NvcmVfcHJvYmUsDQo+ID4gKyAgICAgLnJlbW92ZSA9 IHZwdV9jb3JlX3JlbW92ZSwNCj4gPiArICAgICAuZHJpdmVyID0gew0KPiA+ICsgICAgICAgICAg ICAgLm5hbWUgPSAiYW1waGlvbi12cHUtY29yZSIsDQo+ID4gKyAgICAgICAgICAgICAub2ZfbWF0 Y2hfdGFibGUgPSB2cHVfY29yZV9kdF9tYXRjaCwNCj4gPiArICAgICAgICAgICAgIC5wbSA9ICZ2 cHVfY29yZV9wbV9vcHMsDQo+ID4gKyAgICAgfSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK2ludCBf X2luaXQgdnB1X2NvcmVfZHJpdmVyX2luaXQodm9pZCkNCj4gPiArew0KPiA+ICsgICAgIHJldHVy biBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJmFtcGhpb25fdnB1X2NvcmVfZHJpdmVyKTsNCj4g PiArfQ0KPiA+ICsNCj4gPiArdm9pZCBfX2V4aXQgdnB1X2NvcmVfZHJpdmVyX2V4aXQodm9pZCkN Cj4gPiArew0KPiA+ICsgICAgIHBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZhbXBoaW9uX3Zw dV9jb3JlX2RyaXZlcik7DQo+ID4gK30NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9w bGF0Zm9ybS9hbXBoaW9uL3ZwdV9jb3JlLmgNCj4gYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2Ft cGhpb24vdnB1X2NvcmUuaA0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAw MDAwMDAwMDAwLi4wMGE2NjI5OTdkYTQNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJp dmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9jb3JlLmgNCj4gPiBAQCAtMCwwICsxLDE1 IEBADQo+ID4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovDQo+ID4gKy8q DQo+ID4gKyAqIENvcHlyaWdodCAyMDIwLTIwMjEgTlhQDQo+ID4gKyAqLw0KPiA+ICsNCj4gPiAr I2lmbmRlZiBfQU1QSElPTl9WUFVfQ09SRV9IDQo+ID4gKyNkZWZpbmUgX0FNUEhJT05fVlBVX0NP UkVfSA0KPiA+ICsNCj4gPiArdm9pZCBjc3Jfd3JpdGVsKHN0cnVjdCB2cHVfY29yZSAqY29yZSwg dTMyIHJlZywgdTMyIHZhbCk7DQo+ID4gK3UzMiBjc3JfcmVhZGwoc3RydWN0IHZwdV9jb3JlICpj b3JlLCB1MzIgcmVnKTsNCj4gPiAraW50IHZwdV9hbGxvY19kbWEoc3RydWN0IHZwdV9jb3JlICpj b3JlLCBzdHJ1Y3QgdnB1X2J1ZmZlciAqYnVmKTsNCj4gPiArdm9pZCB2cHVfZnJlZV9kbWEoc3Ry dWN0IHZwdV9idWZmZXIgKmJ1Zik7DQo+ID4gK3N0cnVjdCB2cHVfaW5zdCAqdnB1X2NvcmVfZmlu ZF9pbnN0YW5jZShzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUsIHUzMiBpbmRleCk7DQo+ID4gKw0KPiA+ ICsjZW5kaWYNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hbXBoaW9u L3ZwdV9kYmcuYw0KPiBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfZGJnLmMN Cj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uMmU3ZTEx MTAxZjk5DQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZv cm0vYW1waGlvbi92cHVfZGJnLmMNCj4gPiBAQCAtMCwwICsxLDQ5NSBAQA0KPiA+ICsvLyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPiA+ICsvKg0KPiA+ICsgKiBDb3B5cmlnaHQg MjAyMC0yMDIxIE5YUA0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pbml0 Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4 L2lvY3RsLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+DQo+ID4gKyNpbmNsdWRlIDxs aW51eC9tb2R1bGUuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KPiA+ICsjaW5j bHVkZSA8bGludXgvdHlwZXMuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4N Cj4gPiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51 eC9kZWJ1Z2ZzLmg+DQo+ID4gKyNpbmNsdWRlICJ2cHUuaCINCj4gPiArI2luY2x1ZGUgInZwdV9k ZWZzLmgiDQo+ID4gKyNpbmNsdWRlICJ2cHVfaGVscGVycy5oIg0KPiA+ICsjaW5jbHVkZSAidnB1 X2NtZHMuaCINCj4gPiArI2luY2x1ZGUgInZwdV9ycGMuaCINCj4gPiArDQo+ID4gK3N0cnVjdCBw cmludF9idWZfZGVzYyB7DQo+ID4gKyAgICAgdTMyIHN0YXJ0X2hfcGh5Ow0KPiA+ICsgICAgIHUz MiBzdGFydF9oX3ZpcjsNCj4gPiArICAgICB1MzIgc3RhcnRfbTsNCj4gPiArICAgICB1MzIgYnl0 ZXM7DQo+ID4gKyAgICAgdTMyIHJlYWQ7DQo+ID4gKyAgICAgdTMyIHdyaXRlOw0KPiA+ICsgICAg IGNoYXIgYnVmZmVyWzBdOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNoYXIgKnZiMl9z dGF0X25hbWVbXSA9IHsNCj4gPiArICAgICBbVkIyX0JVRl9TVEFURV9ERVFVRVVFRF0gPSAiZGVx dWV1ZWQiLA0KPiA+ICsgICAgIFtWQjJfQlVGX1NUQVRFX0lOX1JFUVVFU1RdID0gImluX3JlcXVl c3QiLA0KPiA+ICsgICAgIFtWQjJfQlVGX1NUQVRFX1BSRVBBUklOR10gPSAicHJlcGFyaW5nIiwN Cj4gPiArICAgICBbVkIyX0JVRl9TVEFURV9RVUVVRURdID0gInF1ZXVlZCIsDQo+ID4gKyAgICAg W1ZCMl9CVUZfU1RBVEVfQUNUSVZFXSA9ICJhY3RpdmUiLA0KPiA+ICsgICAgIFtWQjJfQlVGX1NU QVRFX0RPTkVdID0gImRvbmUiLA0KPiA+ICsgICAgIFtWQjJfQlVGX1NUQVRFX0VSUk9SXSA9ICJl cnJvciIsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgY2hhciAqdnB1X3N0YXRfbmFtZVtd ID0gew0KPiA+ICsgICAgIFtWUFVfQlVGX1NUQVRFX0lETEVdID0gImlkbGUiLA0KPiA+ICsgICAg IFtWUFVfQlVGX1NUQVRFX0lOVVNFXSA9ICJpbnVzZSIsDQo+ID4gKyAgICAgW1ZQVV9CVUZfU1RB VEVfREVDT0RFRF0gPSAiZGVjb2RlZCIsDQo+ID4gKyAgICAgW1ZQVV9CVUZfU1RBVEVfUkVBRFld ID0gInJlYWR5IiwNCj4gPiArICAgICBbVlBVX0JVRl9TVEFURV9TS0lQXSA9ICJza2lwIiwNCj4g PiArICAgICBbVlBVX0JVRl9TVEFURV9FUlJPUl0gPSAiZXJyb3IiLA0KPiA+ICt9Ow0KPiA+ICsN Cj4gPiArc3RhdGljIGludCB2cHVfZGJnX2luc3RhbmNlKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9p ZCAqZGF0YSkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfaW5zdCAqaW5zdCA9IHMtPnBy aXZhdGU7DQo+ID4gKyAgICAgY2hhciBzdHJbMTI4XTsNCj4gPiArICAgICBpbnQgbnVtOw0KPiA+ ICsgICAgIHN0cnVjdCB2YjJfcXVldWUgKnZxOw0KPiA+ICsgICAgIGludCBpOw0KPiA+ICsNCj4g PiArICAgICBudW0gPSBzY25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIlslc11cbiIsDQo+IHZw dV9jb3JlX3R5cGVfZGVzYyhpbnN0LT50eXBlKSk7DQo+ID4gKyAgICAgaWYgKHNlcV93cml0ZShz LCBzdHIsIG51bSkpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiArDQo+ID4gKyAg ICAgbnVtID0gc2NucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICJ0Z2lnID0gJWQscGlkID0gJWRc biIsIGluc3QtPnRnaWQsDQo+IGluc3QtPnBpZCk7DQo+ID4gKyAgICAgaWYgKHNlcV93cml0ZShz LCBzdHIsIG51bSkpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiArICAgICBudW0g PSBzY25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgInN0YXRlID0gJWRcbiIsIGluc3QtPnN0YXRl KTsNCj4gPiArICAgICBpZiAoc2VxX3dyaXRlKHMsIHN0ciwgbnVtKSkNCj4gPiArICAgICAgICAg ICAgIHJldHVybiAwOw0KPiA+ICsgICAgIG51bSA9IHNjbnByaW50ZihzdHIsIHNpemVvZihzdHIp LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAibWluX2J1ZmZlcl9vdXQgPSAlZCwgbWluX2J1 ZmZlcl9jYXAgPSAlZFxuIiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgaW5zdC0+bWluX2J1 ZmZlcl9vdXQsIGluc3QtPm1pbl9idWZmZXJfY2FwKTsNCj4gPiArICAgICBpZiAoc2VxX3dyaXRl KHMsIHN0ciwgbnVtKSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAwOw0KPiA+ICsNCj4gPiAr DQo+ID4gKyAgICAgdnEgPSB2NGwyX20ybV9nZXRfc3JjX3ZxKGluc3QtPmZoLm0ybV9jdHgpOw0K PiA+ICsgICAgIG51bSA9IHNjbnByaW50ZihzdHIsIHNpemVvZihzdHIpLA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICAib3V0cHV0ICglMmQsICUyZCk6IGZtdCA9ICVjJWMlYyVjICVkDQo+IHgg JWQsICVkOyIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHZiMl9pc19zdHJlYW1pbmcodnEp LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICB2cS0+bnVtX2J1ZmZlcnMsDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgIGluc3QtPm91dF9mb3JtYXQucGl4Zm10LA0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICBpbnN0LT5vdXRfZm9ybWF0LnBpeGZtdCA+PiA4LA0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICBpbnN0LT5vdXRfZm9ybWF0LnBpeGZtdCA+PiAxNiwNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgaW5zdC0+b3V0X2Zvcm1hdC5waXhmbXQgPj4gMjQsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgIGluc3QtPm91dF9mb3JtYXQud2lkdGgsDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgIGluc3QtPm91dF9mb3JtYXQuaGVpZ2h0LA0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICB2cS0+bGFzdF9idWZmZXJfZGVxdWV1ZWQpOw0KPiA+ICsgICAgIGlmIChzZXFfd3JpdGUocywg c3RyLCBudW0pKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4gKyAgICAgZm9yIChp ID0gMDsgaSA8IGluc3QtPm91dF9mb3JtYXQubnVtX3BsYW5lczsgaSsrKSB7DQo+ID4gKyAgICAg ICAgICAgICBudW0gPSBzY25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwgIiAlZCglZCkiLA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3QtPm91dF9mb3JtYXQuc2l6ZWltYWdl W2ldLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluc3QtPm91dF9mb3JtYXQu Ynl0ZXNwZXJsaW5lW2ldKTsNCj4gPiArICAgICAgICAgICAgIGlmIChzZXFfd3JpdGUocywgc3Ry LCBudW0pKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiArICAgICB9 DQo+ID4gKyAgICAgaWYgKHNlcV93cml0ZShzLCAiXG4iLCAxKSkNCj4gPiArICAgICAgICAgICAg IHJldHVybiAwOw0KPiA+ICsNCj4gPiArICAgICB2cSA9IHY0bDJfbTJtX2dldF9kc3RfdnEoaW5z dC0+ZmgubTJtX2N0eCk7DQo+ID4gKyAgICAgbnVtID0gc2NucHJpbnRmKHN0ciwgc2l6ZW9mKHN0 ciksDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICJjYXB0dXJlKCUyZCwgJTJkKTogZm10ID0g JWMlYyVjJWMgJWQNCj4geCAlZCwgJWQ7IiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgdmIy X2lzX3N0cmVhbWluZyh2cSksDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHZxLT5udW1fYnVm ZmVycywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgaW5zdC0+Y2FwX2Zvcm1hdC5waXhmbXQs DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGluc3QtPmNhcF9mb3JtYXQucGl4Zm10ID4+IDgs DQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGluc3QtPmNhcF9mb3JtYXQucGl4Zm10ID4+IDE2 LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBpbnN0LT5jYXBfZm9ybWF0LnBpeGZtdCA+PiAy NCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgaW5zdC0+Y2FwX2Zvcm1hdC53aWR0aCwNCj4g PiArICAgICAgICAgICAgICAgICAgICAgaW5zdC0+Y2FwX2Zvcm1hdC5oZWlnaHQsDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgIHZxLT5sYXN0X2J1ZmZlcl9kZXF1ZXVlZCk7DQo+ID4gKyAgICAg aWYgKHNlcV93cml0ZShzLCBzdHIsIG51bSkpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsN Cj4gPiArICAgICBmb3IgKGkgPSAwOyBpIDwgaW5zdC0+Y2FwX2Zvcm1hdC5udW1fcGxhbmVzOyBp KyspIHsNCj4gPiArICAgICAgICAgICAgIG51bSA9IHNjbnByaW50ZihzdHIsIHNpemVvZihzdHIp LCAiICVkKCVkKSIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdC0+Y2Fw X2Zvcm1hdC5zaXplaW1hZ2VbaV0sDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW5zdC0+Y2FwX2Zvcm1hdC5ieXRlc3BlcmxpbmVbaV0pOw0KPiA+ICsgICAgICAgICAgICAgaWYg KHNlcV93cml0ZShzLCBzdHIsIG51bSkpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIHJldHVy biAwOw0KPiA+ICsgICAgIH0NCj4gPiArICAgICBpZiAoc2VxX3dyaXRlKHMsICJcbiIsIDEpKQ0K PiA+ICsgICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4gKyAgICAgbnVtID0gc2NucHJpbnRmKHN0 ciwgc2l6ZW9mKHN0ciksICJjcm9wOiAoJWQsICVkKSAlZCB4ICVkXG4iLA0KPiA+ICsgICAgICAg ICAgICAgICAgICAgICBpbnN0LT5jcm9wLmxlZnQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg IGluc3QtPmNyb3AudG9wLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBpbnN0LT5jcm9wLndp ZHRoLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBpbnN0LT5jcm9wLmhlaWdodCk7DQo+ID4g KyAgICAgaWYgKHNlcV93cml0ZShzLCBzdHIsIG51bSkpDQo+ID4gKyAgICAgICAgICAgICByZXR1 cm4gMDsNCj4gPiArDQo+ID4gKyAgICAgdnEgPSB2NGwyX20ybV9nZXRfc3JjX3ZxKGluc3QtPmZo Lm0ybV9jdHgpOw0KPiA+ICsgICAgIGZvciAoaSA9IDA7IGkgPCB2cS0+bnVtX2J1ZmZlcnM7IGkr Kykgew0KPiA+ICsgICAgICAgICAgICAgc3RydWN0IHZiMl9idWZmZXIgKnZiID0gdnEtPmJ1ZnNb aV07DQo+ID4gKyAgICAgICAgICAgICBzdHJ1Y3QgdmIyX3Y0bDJfYnVmZmVyICp2YnVmID0gdG9f dmIyX3Y0bDJfYnVmZmVyKHZiKTsNCj4gPiArICAgICAgICAgICAgIHN0cnVjdCB2cHVfdmIyX2J1 ZmZlciAqdnB1X2J1ZiA9IHRvX3ZwdV92YjJfYnVmZmVyKHZidWYpOw0KPiA+ICsNCj4gPiArICAg ICAgICAgICAgIGlmICh2Yi0+c3RhdGUgPT0gVkIyX0JVRl9TVEFURV9ERVFVRVVFRCkNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQo+ID4gKyAgICAgICAgICAgICBudW0gPSBz Y25wcmludGYoc3RyLCBzaXplb2Yoc3RyKSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAib3V0cHV0IFslMmRdIHN0YXRlID0gJTEwcywgJThzXG4iLA0KPiA+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGksIHZiMl9zdGF0X25hbWVbdmItPnN0YXRlXSwNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2cHVfc3RhdF9uYW1lW3ZwdV9idWYtPnN0YXRlXSk7 DQo+ID4gKyAgICAgICAgICAgICBpZiAoc2VxX3dyaXRlKHMsIHN0ciwgbnVtKSkNCj4gPiArICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAg ICB2cSA9IHY0bDJfbTJtX2dldF9kc3RfdnEoaW5zdC0+ZmgubTJtX2N0eCk7DQo+ID4gKyAgICAg Zm9yIChpID0gMDsgaSA8IHZxLT5udW1fYnVmZmVyczsgaSsrKSB7DQo+ID4gKyAgICAgICAgICAg ICBzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIgPSB2cS0+YnVmc1tpXTsNCj4gPiArICAgICAgICAgICAg IHN0cnVjdCB2YjJfdjRsMl9idWZmZXIgKnZidWYgPSB0b192YjJfdjRsMl9idWZmZXIodmIpOw0K PiA+ICsgICAgICAgICAgICAgc3RydWN0IHZwdV92YjJfYnVmZmVyICp2cHVfYnVmID0gdG9fdnB1 X3ZiMl9idWZmZXIodmJ1Zik7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgaWYgKHZiLT5zdGF0 ZSA9PSBWQjJfQlVGX1NUQVRFX0RFUVVFVUVEKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBj b250aW51ZTsNCj4gPiArICAgICAgICAgICAgIG51bSA9IHNjbnByaW50ZihzdHIsIHNpemVvZihz dHIpLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjYXB0dXJlWyUyZF0gc3Rh dGUgPSAlMTBzLCAlOHNcbiIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSwg dmIyX3N0YXRfbmFtZVt2Yi0+c3RhdGVdLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZwdV9zdGF0X25hbWVbdnB1X2J1Zi0+c3RhdGVdKTsNCj4gPiArICAgICAgICAgICAgIGlm IChzZXFfd3JpdGUocywgc3RyLCBudW0pKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gMDsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIG51bSA9IHNjbnByaW50ZihzdHIs IHNpemVvZihzdHIpLCAic2VxdWVuY2UgPSAlZFxuIiwgaW5zdC0+c2VxdWVuY2UpOw0KPiA+ICsg ICAgIGlmIChzZXFfd3JpdGUocywgc3RyLCBudW0pKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJu IDA7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChpbnN0LT51c2Vfc3RyZWFtX2J1ZmZlcikgew0KPiA+ ICsgICAgICAgICAgICAgbnVtID0gc2NucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICJzdHJlYW1f YnVmZmVyID0gJWQgLyAlZCwNCj4gPCVwYWQsIDB4JXg+XG4iLA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZwdV9oZWxwZXJfZ2V0X3VzZWRfc3BhY2UoaW5zdCksDQo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdC0+c3RyZWFtX2J1ZmZlci5sZW5ndGgsDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmluc3QtPnN0cmVhbV9idWZmZXIucGh5 cywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0LT5zdHJlYW1fYnVmZmVy Lmxlbmd0aCk7DQo+ID4gKyAgICAgICAgICAgICBpZiAoc2VxX3dyaXRlKHMsIHN0ciwgbnVtKSkN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4gKyAgICAgfQ0KPiA+ICsg ICAgIG51bSA9IHNjbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAia2ZpZm8gbGVuID0gMHgleFxu IiwNCj4ga2ZpZm9fbGVuKCZpbnN0LT5tc2dfZmlmbykpOw0KPiA+ICsgICAgIGlmIChzZXFfd3Jp dGUocywgc3RyLCBudW0pKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4gKw0KPiA+ ICsgICAgIG51bSA9IHNjbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiZmxvdyA6XG4iKTsNCj4g PiArICAgICBpZiAoc2VxX3dyaXRlKHMsIHN0ciwgbnVtKSkNCj4gPiArICAgICAgICAgICAgIHJl dHVybiAwOw0KPiA+ICsNCj4gPiArICAgICBtdXRleF9sb2NrKCZpbnN0LT5jb3JlLT5jbWRfbG9j ayk7DQo+ID4gKyAgICAgZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW5zdC0+Zmxvd3MpOyBp KyspIHsNCj4gPiArICAgICAgICAgICAgIHUzMiBpZHggPSAoaW5zdC0+Zmxvd19pZHggKyBpKSAl IChBUlJBWV9TSVpFKGluc3QtPmZsb3dzKSk7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgaWYg KCFpbnN0LT5mbG93c1tpZHhdKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsN Cj4gPiArICAgICAgICAgICAgIG51bSA9IHNjbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAiXHRb JXNdMHgleFxuIiwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnN0LT5mbG93 c1tpZHhdID49IFZQVV9NU0dfSURfTk9PUCA/DQo+ICJNIiA6ICJDIiwNCj4gPiArICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnN0LT5mbG93c1tpZHhdKTsNCj4gPiArICAgICAgICAgICAg IGlmIChzZXFfd3JpdGUocywgc3RyLCBudW0pKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAgICAg IG11dGV4X3VubG9jaygmaW5zdC0+Y29yZS0+Y21kX2xvY2spOw0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICByZXR1cm4gMDsNCj4gPiArICAgICAgICAgICAgIH0NCj4gPiArICAgICB9DQo+ID4g KyAgICAgbXV0ZXhfdW5sb2NrKCZpbnN0LT5jb3JlLT5jbWRfbG9jayk7DQo+ID4gKw0KPiA+ICsg ICAgIGkgPSAwOw0KPiA+ICsgICAgIHdoaWxlICh0cnVlKSB7DQo+ID4gKyAgICAgICAgICAgICBu dW0gPSBjYWxsX3ZvcChpbnN0LCBnZXRfZGVidWdfaW5mbywgc3RyLCBzaXplb2Yoc3RyKSwgaSsr KTsNCj4gPiArICAgICAgICAgICAgIGlmIChudW0gPD0gMCkNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgYnJlYWs7DQo+ID4gKyAgICAgICAgICAgICBpZiAoc2VxX3dyaXRlKHMsIHN0ciwgbnVt KSkNCj4gPiArICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4gKyAgICAgfQ0KPiA+ ICsNCj4gPiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2 cHVfZGJnX2NvcmUoc3RydWN0IHNlcV9maWxlICpzLCB2b2lkICpkYXRhKQ0KPiA+ICt7DQo+ID4g KyAgICAgc3RydWN0IHZwdV9jb3JlICpjb3JlID0gcy0+cHJpdmF0ZTsNCj4gPiArICAgICBzdHJ1 Y3QgdnB1X3NoYXJlZF9hZGRyICppZmFjZSA9IGNvcmUtPmlmYWNlOw0KPiA+ICsgICAgIGNoYXIg c3RyWzEyOF07DQo+ID4gKyAgICAgaW50IG51bTsNCj4gPiArDQo+ID4gKyAgICAgbnVtID0gc2Nu cHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICJbJXNdXG4iLA0KPiB2cHVfY29yZV90eXBlX2Rlc2Mo Y29yZS0+dHlwZSkpOw0KPiA+ICsgICAgIGlmIChzZXFfd3JpdGUocywgc3RyLCBudW0pKQ0KPiA+ ICsgICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICsgICAgIG51bSA9IHNjbnByaW50 ZihzdHIsIHNpemVvZihzdHIpLCAiYm9vdF9yZWdpb24gID0gPCVwYWQsIDB4JXg+XG4iLA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICAmY29yZS0+ZncucGh5cywgY29yZS0+ZncubGVuZ3RoKTsN Cj4gPiArICAgICBpZiAoc2VxX3dyaXRlKHMsIHN0ciwgbnVtKSkNCj4gPiArICAgICAgICAgICAg IHJldHVybiAwOw0KPiA+ICsgICAgIG51bSA9IHNjbnByaW50ZihzdHIsIHNpemVvZihzdHIpLCAi cnBjX3JlZ2lvbiAgID0gPCVwYWQsIDB4JXg+IHVzZWQgPQ0KPiAweCV4XG4iLA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAmY29yZS0+cnBjLnBoeXMsIGNvcmUtPnJwYy5sZW5ndGgsDQo+IGNv cmUtPnJwYy5ieXRlc3VzZWQpOw0KPiA+ICsgICAgIGlmIChzZXFfd3JpdGUocywgc3RyLCBudW0p KQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIDA7DQo+ID4gKyAgICAgbnVtID0gc2NucHJpbnRm KHN0ciwgc2l6ZW9mKHN0ciksICJmd2xvZ19yZWdpb24gPSA8JXBhZCwgMHgleD5cbiIsDQo+ID4g KyAgICAgICAgICAgICAgICAgICAgICZjb3JlLT5sb2cucGh5cywgY29yZS0+bG9nLmxlbmd0aCk7 DQo+ID4gKyAgICAgaWYgKHNlcV93cml0ZShzLCBzdHIsIG51bSkpDQo+ID4gKyAgICAgICAgICAg ICByZXR1cm4gMDsNCj4gPiArDQo+ID4gKyAgICAgbnVtID0gc2NucHJpbnRmKHN0ciwgc2l6ZW9m KHN0ciksICJzdGF0ZSA9ICVkXG4iLCBjb3JlLT5zdGF0ZSk7DQo+ID4gKyAgICAgaWYgKHNlcV93 cml0ZShzLCBzdHIsIG51bSkpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiArICAg ICBpZiAoY29yZS0+c3RhdGUgPT0gVlBVX0NPUkVfREVJTklUKQ0KPiA+ICsgICAgICAgICAgICAg cmV0dXJuIDA7DQo+ID4gKyAgICAgbnVtID0gc2NucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICJm dyB2ZXJzaW9uID0gJWQuJWQuJWRcbiIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGNvcmUtPmZ3X3ZlcnNpb24gPj4gMTYpICYgMHhmZiwNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAoY29yZS0+ZndfdmVyc2lvbiA+PiA4KSAmIDB4ZmYsDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29yZS0+ZndfdmVyc2lvbiAmIDB4ZmYpOw0KPiA+ICsg ICAgIGlmIChzZXFfd3JpdGUocywgc3RyLCBudW0pKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJu IDA7DQo+ID4gKyAgICAgbnVtID0gc2NucHJpbnRmKHN0ciwgc2l6ZW9mKHN0ciksICJpbnN0YW5j ZXMgPSAlZC8lZCAoMHglMDJseCksICVkXG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBo d2VpZ2h0MzIoY29yZS0+aW5zdGFuY2VfbWFzayksDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg IGNvcmUtPnN1cHBvcnRlZF9pbnN0YW5jZV9jb3VudCwNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgY29yZS0+aW5zdGFuY2VfbWFzaywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgY29yZS0+ cmVxdWVzdF9jb3VudCk7DQo+ID4gKyAgICAgaWYgKHNlcV93cml0ZShzLCBzdHIsIG51bSkpDQo+ ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiArICAgICBudW0gPSBzY25wcmludGYoc3Ry LCBzaXplb2Yoc3RyKSwgImtmaWZvIGxlbiA9IDB4JXhcbiIsDQo+IGtmaWZvX2xlbigmY29yZS0+ bXNnX2ZpZm8pKTsNCj4gPiArICAgICBpZiAoc2VxX3dyaXRlKHMsIHN0ciwgbnVtKSkNCj4gPiAr ICAgICAgICAgICAgIHJldHVybiAwOw0KPiA+ICsgICAgIG51bSA9IHNjbnByaW50ZihzdHIsIHNp emVvZihzdHIpLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAiY21kX2J1ZjpbMHgleCwgMHgl eF0sIHdwdHIgPSAweCV4LCBycHRyID0NCj4gMHgleFxuIiwNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgaWZhY2UtPmNtZF9kZXNjLT5zdGFydCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAg aWZhY2UtPmNtZF9kZXNjLT5lbmQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmYWNlLT5j bWRfZGVzYy0+d3B0ciwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgaWZhY2UtPmNtZF9kZXNj LT5ycHRyKTsNCj4gPiArICAgICBpZiAoc2VxX3dyaXRlKHMsIHN0ciwgbnVtKSkNCj4gPiArICAg ICAgICAgICAgIHJldHVybiAwOw0KPiA+ICsgICAgIG51bSA9IHNjbnByaW50ZihzdHIsIHNpemVv ZihzdHIpLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAibXNnX2J1ZjpbMHgleCwgMHgleF0s IHdwdHIgPSAweCV4LCBycHRyID0NCj4gMHgleFxuIiwNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgaWZhY2UtPm1zZ19kZXNjLT5zdGFydCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgaWZh Y2UtPm1zZ19kZXNjLT5lbmQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgIGlmYWNlLT5tc2df ZGVzYy0+d3B0ciwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgaWZhY2UtPm1zZ19kZXNjLT5y cHRyKTsNCj4gPiArICAgICBpZiAoc2VxX3dyaXRlKHMsIHN0ciwgbnVtKSkNCj4gPiArICAgICAg ICAgICAgIHJldHVybiAwOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIGludCB2cHVfZGJnX2Z3bG9nKHN0cnVjdCBzZXFfZmlsZSAqcywgdm9p ZCAqZGF0YSkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfY29yZSAqY29yZSA9IHMtPnBy aXZhdGU7DQo+ID4gKyAgICAgc3RydWN0IHByaW50X2J1Zl9kZXNjICpwcmludF9idWY7DQo+ID4g KyAgICAgaW50IGxlbmd0aDsNCj4gPiArICAgICB1MzIgcnB0cjsNCj4gPiArICAgICB1MzIgd3B0 cjsNCj4gPiArICAgICBpbnQgcmV0ID0gMDsNCj4gPiArDQo+ID4gKyAgICAgaWYgKCFjb3JlLT5s b2cudmlydCB8fCBjb3JlLT5zdGF0ZSA9PSBWUFVfQ09SRV9ERUlOSVQpDQo+ID4gKyAgICAgICAg ICAgICByZXR1cm4gMDsNCj4gPiArDQo+ID4gKyAgICAgcHJpbnRfYnVmID0gY29yZS0+bG9nLnZp cnQ7DQo+ID4gKyAgICAgcnB0ciA9IHByaW50X2J1Zi0+cmVhZDsNCj4gPiArICAgICB3cHRyID0g cHJpbnRfYnVmLT53cml0ZTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKHJwdHIgPT0gd3B0cikNCj4g PiArICAgICAgICAgICAgIHJldHVybiAwOw0KPiA+ICsgICAgIGVsc2UgaWYgKHJwdHIgPCB3cHRy KQ0KPiA+ICsgICAgICAgICAgICAgbGVuZ3RoID0gd3B0ciAtIHJwdHI7DQo+ID4gKyAgICAgZWxz ZQ0KPiA+ICsgICAgICAgICAgICAgbGVuZ3RoID0gcHJpbnRfYnVmLT5ieXRlcyArIHdwdHIgLSBy cHRyOw0KPiA+ICsNCj4gPiArICAgICBpZiAocy0+Y291bnQgKyBsZW5ndGggPj0gcy0+c2l6ZSkg ew0KPiA+ICsgICAgICAgICAgICAgcy0+Y291bnQgPSBzLT5zaXplOw0KPiA+ICsgICAgICAgICAg ICAgcmV0dXJuIDA7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBpZiAocnB0ciArIGxl bmd0aCA+PSBwcmludF9idWYtPmJ5dGVzKSB7DQo+ID4gKyAgICAgICAgICAgICBpbnQgbnVtID0g cHJpbnRfYnVmLT5ieXRlcyAtIHJwdHI7DQo+ID4gKw0KPiA+ICsgICAgICAgICAgICAgaWYgKHNl cV93cml0ZShzLCBwcmludF9idWYtPmJ1ZmZlciArIHJwdHIsIG51bSkpDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgIHJldCA9IC0xOw0KPiA+ICsgICAgICAgICAgICAgbGVuZ3RoIC09IG51bTsN Cj4gPiArICAgICAgICAgICAgIHJwdHIgPSAwOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAg ICAgaWYgKGxlbmd0aCkgew0KPiA+ICsgICAgICAgICAgICAgaWYgKHNlcV93cml0ZShzLCBwcmlu dF9idWYtPmJ1ZmZlciArIHJwdHIsIGxlbmd0aCkpDQo+ID4gKyAgICAgICAgICAgICAgICAgICAg IHJldCA9IC0xOw0KPiA+ICsgICAgICAgICAgICAgcnB0ciArPSBsZW5ndGg7DQo+ID4gKyAgICAg fQ0KPiA+ICsgICAgIGlmICghcmV0KQ0KPiA+ICsgICAgICAgICAgICAgcHJpbnRfYnVmLT5yZWFk ID0gcnB0cjsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyBpbnQgdnB1X2RiZ19pbnN0X29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0 IGZpbGUgKmZpbHApDQo+ID4gK3sNCj4gPiArICAgICByZXR1cm4gc2luZ2xlX29wZW4oZmlscCwg dnB1X2RiZ19pbnN0YW5jZSwgaW5vZGUtPmlfcHJpdmF0ZSk7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyBzc2l6ZV90IHZwdV9kYmdfaW5zdF93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwNCj4g PiArICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciBfX3VzZXIgKnVzZXJfYnVmLCBzaXpl X3Qgc2l6ZSwgbG9mZl90DQo+ICpwcG9zKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHNlcV9m aWxlICpzID0gZmlsZS0+cHJpdmF0ZV9kYXRhOw0KPiA+ICsgICAgIHN0cnVjdCB2cHVfaW5zdCAq aW5zdCA9IHMtPnByaXZhdGU7DQo+ID4gKw0KPiA+ICsgICAgIHZwdV9zZXNzaW9uX2RlYnVnKGlu c3QpOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gc2l6ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIHNzaXplX3QgdnB1X2RiZ19jb3JlX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLA0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyIF9fdXNlciAqdXNlcl9idWYsIHNpemVf dCBzaXplLCBsb2ZmX3QNCj4gKnBwb3MpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3Qgc2VxX2Zp bGUgKnMgPSBmaWxlLT5wcml2YXRlX2RhdGE7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9jb3JlICpj b3JlID0gcy0+cHJpdmF0ZTsNCj4gPiArDQo+ID4gKyAgICAgcG1fcnVudGltZV9nZXRfc3luYyhj b3JlLT5kZXYpOw0KPiA+ICsgICAgIG11dGV4X2xvY2soJmNvcmUtPmxvY2spOw0KPiA+ICsgICAg IGlmIChjb3JlLT5zdGF0ZSAhPSBWUFVfQ09SRV9ERUlOSVQgJiYgIWNvcmUtPmluc3RhbmNlX21h c2spIHsNCj4gPiArICAgICAgICAgICAgIGRldl9pbmZvKGNvcmUtPmRldiwgInJlc2V0XG4iKTsN Cj4gPiArICAgICAgICAgICAgIGlmICghdnB1X2NvcmVfc3dfcmVzZXQoY29yZSkpIHsNCj4gPiAr ICAgICAgICAgICAgICAgICAgICAgY29yZS0+c3RhdGUgPSBWUFVfQ09SRV9BQ1RJVkU7DQo+ID4g KyAgICAgICAgICAgICAgICAgICAgIGNvcmUtPmhhbmdfbWFzayA9IDA7DQo+ID4gKyAgICAgICAg ICAgICB9DQo+ID4gKyAgICAgfQ0KPiA+ICsgICAgIG11dGV4X3VubG9jaygmY29yZS0+bG9jayk7 DQo+ID4gKyAgICAgcG1fcnVudGltZV9wdXRfc3luYyhjb3JlLT5kZXYpOw0KPiA+ICsNCj4gPiAr ICAgICByZXR1cm4gc2l6ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2cHVfZGJn X2NvcmVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkNCj4gPiAr ew0KPiA+ICsgICAgIHJldHVybiBzaW5nbGVfb3BlbihmaWxwLCB2cHVfZGJnX2NvcmUsIGlub2Rl LT5pX3ByaXZhdGUpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IHZwdV9kYmdfZnds b2dfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkNCj4gPiArew0K PiA+ICsgICAgIHJldHVybiBzaW5nbGVfb3BlbihmaWxwLCB2cHVfZGJnX2Z3bG9nLCBpbm9kZS0+ aV9wcml2YXRlKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxl X29wZXJhdGlvbnMgdnB1X2RiZ19pbnN0X2ZvcHMgPSB7DQo+ID4gKyAgICAgLm93bmVyID0gVEhJ U19NT0RVTEUsDQo+ID4gKyAgICAgLm9wZW4gPSB2cHVfZGJnX2luc3Rfb3BlbiwNCj4gPiArICAg ICAucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNlLA0KPiA+ICsgICAgIC5yZWFkID0gc2VxX3JlYWQs DQo+ID4gKyAgICAgLndyaXRlID0gdnB1X2RiZ19pbnN0X3dyaXRlLA0KPiA+ICt9Ow0KPiA+ICsN Cj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdnB1X2RiZ19jb3JlX2Zv cHMgPSB7DQo+ID4gKyAgICAgLm93bmVyID0gVEhJU19NT0RVTEUsDQo+ID4gKyAgICAgLm9wZW4g PSB2cHVfZGJnX2NvcmVfb3BlbiwNCj4gPiArICAgICAucmVsZWFzZSA9IHNpbmdsZV9yZWxlYXNl LA0KPiA+ICsgICAgIC5yZWFkID0gc2VxX3JlYWQsDQo+ID4gKyAgICAgLndyaXRlID0gdnB1X2Ri Z19jb3JlX3dyaXRlLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBm aWxlX29wZXJhdGlvbnMgdnB1X2RiZ19md2xvZ19mb3BzID0gew0KPiA+ICsgICAgIC5vd25lciA9 IFRISVNfTU9EVUxFLA0KPiA+ICsgICAgIC5vcGVuID0gdnB1X2RiZ19md2xvZ19vcGVuLA0KPiA+ ICsgICAgIC5yZWxlYXNlID0gc2luZ2xlX3JlbGVhc2UsDQo+ID4gKyAgICAgLnJlYWQgPSBzZXFf cmVhZCwNCj4gPiArfTsNCj4gPiArDQo+ID4gK2ludCB2cHVfaW5zdF9jcmVhdGVfZGJnZnNfZmls ZShzdHJ1Y3QgdnB1X2luc3QgKmluc3QpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2Rl diAqdnB1Ow0KPiA+ICsgICAgIGNoYXIgbmFtZVs2NF07DQo+ID4gKw0KPiA+ICsgICAgIGlmICgh aW5zdCB8fCAhaW5zdC0+Y29yZSB8fCAhaW5zdC0+Y29yZS0+dnB1KQ0KPiA+ICsgICAgICAgICAg ICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsgICAgIHZwdSA9IGluc3QtPmNvcmUtPnZw dTsNCj4gPiArICAgICBpZiAoIXZwdS0+ZGVidWdmcykNCj4gPiArICAgICAgICAgICAgIHJldHVy biAtRUlOVkFMOw0KPiA+ICsNCj4gPiArICAgICBpZiAoaW5zdC0+ZGVidWdmcykNCj4gPiArICAg ICAgICAgICAgIHJldHVybiAwOw0KPiA+ICsNCj4gPiArICAgICBzY25wcmludGYobmFtZSwgc2l6 ZW9mKG5hbWUpLCAiaW5zdGFuY2UuJWQuJWQiLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBp bnN0LT5jb3JlLT5pZCwgaW5zdC0+aWQpOw0KPiA+ICsgICAgIGluc3QtPmRlYnVnZnMgPSBkZWJ1 Z2ZzX2NyZWF0ZV9maWxlKChjb25zdCBjaGFyICopbmFtZSwNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBWRVJJRllfT0NUQUxfUEVSTUlTU0lPTlMoMDY0NCksDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdnB1LT5kZWJ1Z2ZzLA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGluc3QsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg JnZwdV9kYmdfaW5zdF9mb3BzKTsNCj4gPiArICAgICBpZiAoIWluc3QtPmRlYnVnZnMpIHsNCj4g PiArICAgICAgICAgICAgIGRldl9lcnIoaW5zdC0+ZGV2LCAidnB1IGNyZWF0ZSBkZWJ1Z2ZzICVz IGZhaWxcbiIsIG5hbWUpOw0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4g KyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr aW50IHZwdV9pbnN0X3JlbW92ZV9kYmdmc19maWxlKHN0cnVjdCB2cHVfaW5zdCAqaW5zdCkNCj4g PiArew0KPiA+ICsgICAgIGlmICghaW5zdCkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAwOw0K PiA+ICsNCj4gPiArICAgICBkZWJ1Z2ZzX3JlbW92ZShpbnN0LT5kZWJ1Z2ZzKTsNCj4gPiArICAg ICBpbnN0LT5kZWJ1Z2ZzID0gTlVMTDsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIDA7DQo+ID4g K30NCj4gPiArDQo+ID4gK2ludCB2cHVfY29yZV9jcmVhdGVfZGJnZnNfZmlsZShzdHJ1Y3QgdnB1 X2NvcmUgKmNvcmUpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2RldiAqdnB1Ow0KPiA+ ICsgICAgIGNoYXIgbmFtZVs2NF07DQo+ID4gKw0KPiA+ICsgICAgIGlmICghY29yZSB8fCAhY29y ZS0+dnB1KQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsg ICAgIHZwdSA9IGNvcmUtPnZwdTsNCj4gPiArICAgICBpZiAoIXZwdS0+ZGVidWdmcykNCj4gPiAr ICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiArICAgICBpZiAoIWNvcmUt PmRlYnVnZnMpIHsNCj4gPiArICAgICAgICAgICAgIHNjbnByaW50ZihuYW1lLCBzaXplb2YobmFt ZSksICJjb3JlLiVkIiwgY29yZS0+aWQpOw0KPiA+ICsgICAgICAgICAgICAgY29yZS0+ZGVidWdm cyA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoKGNvbnN0IGNoYXIgKiluYW1lLA0KPiA+ICsNCj4gVkVS SUZZX09DVEFMX1BFUk1JU1NJT05TKDA2NDQpLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdnB1LT5kZWJ1Z2ZzLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29yZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICZ2cHVfZGJnX2NvcmVfZm9wcyk7DQo+ID4gKyAgICAgICAgICAgICBpZiAoIWNvcmUt PmRlYnVnZnMpIHsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgZGV2X2Vycihjb3JlLT5kZXYs ICJ2cHUgY3JlYXRlIGRlYnVnZnMgJXMgZmFpbFxuIiwNCj4gbmFtZSk7DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsgICAgICAgICAgICAgfQ0KPiA+ICsg ICAgIH0NCj4gPiArICAgICBpZiAoIWNvcmUtPmRlYnVnZnNfZndsb2cpIHsNCj4gPiArICAgICAg ICAgICAgIHNjbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICJmd2xvZy4lZCIsIGNvcmUtPmlk KTsNCj4gPiArICAgICAgICAgICAgIGNvcmUtPmRlYnVnZnNfZndsb2cgPSBkZWJ1Z2ZzX2NyZWF0 ZV9maWxlKChjb25zdCBjaGFyDQo+ICopbmFtZSwNCj4gPiArDQo+IFZFUklGWV9PQ1RBTF9QRVJN SVNTSU9OUygwNDQ0KSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHZwdS0+ZGVidWdmcywNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvcmUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdnB1X2Ri Z19md2xvZ19mb3BzKTsNCj4gPiArICAgICAgICAgICAgIGlmICghY29yZS0+ZGVidWdmc19md2xv Zykgew0KPiA+ICsgICAgICAgICAgICAgICAgICAgICBkZXZfZXJyKGNvcmUtPmRldiwgInZwdSBj cmVhdGUgZGVidWdmcyAlcyBmYWlsXG4iLA0KPiBuYW1lKTsNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKyAgICAgfQ0K PiA+ICsNCj4gPiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAraW50IHZwdV9j b3JlX3JlbW92ZV9kYmdmc19maWxlKHN0cnVjdCB2cHVfY29yZSAqY29yZSkNCj4gPiArew0KPiA+ ICsgICAgIGlmICghY29yZSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAwOw0KPiA+ICsgICAg IGRlYnVnZnNfcmVtb3ZlKGNvcmUtPmRlYnVnZnMpOw0KPiA+ICsgICAgIGNvcmUtPmRlYnVnZnMg PSBOVUxMOw0KPiA+ICsgICAgIGRlYnVnZnNfcmVtb3ZlKGNvcmUtPmRlYnVnZnNfZndsb2cpOw0K PiA+ICsgICAgIGNvcmUtPmRlYnVnZnNfZndsb2cgPSBOVUxMOw0KPiA+ICsNCj4gPiArICAgICBy ZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArdm9pZCB2cHVfaW5zdF9yZWNvcmRfZmxvdyhz dHJ1Y3QgdnB1X2luc3QgKmluc3QsIHUzMiBmbG93KQ0KPiA+ICt7DQo+ID4gKyAgICAgaWYgKCFp bnN0KQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuOw0KPiA+ICsNCj4gPiArICAgICBpbnN0LT5m bG93c1tpbnN0LT5mbG93X2lkeF0gPSBmbG93Ow0KPiA+ICsgICAgIGluc3QtPmZsb3dfaWR4ID0g KGluc3QtPmZsb3dfaWR4ICsgMSkgJSAoQVJSQVlfU0laRShpbnN0LT5mbG93cykpOw0KPiA+ICt9 DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfcnBj LmMNCj4gYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhpb24vdnB1X3JwYy5jDQo+ID4gbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCj4gPiBpbmRleCAwMDAwMDAwMDAwMDAuLjdiNWU5MTc3ZTAxMA0K PiA+IC0tLSAvZGV2L251bGwNCj4gPiArKysgYi9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2FtcGhp b24vdnB1X3JwYy5jDQo+ID4gQEAgLTAsMCArMSwyNzkgQEANCj4gPiArLy8gU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjANCj4gPiArLyoNCj4gPiArICogQ29weXJpZ2h0IDIwMjAtMjAy MSBOWFANCj4gPiArICovDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8bGludXgvaW5pdC5oPg0KPiA+ ICsjaW5jbHVkZSA8bGludXgvaW50ZXJjb25uZWN0Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9p b2N0bC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbGlzdC5oPg0KPiA+ICsjaW5jbHVkZSA8bGlu dXgva2VybmVsLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4NCj4gPiArI2luY2x1 ZGUgPGxpbnV4L29mX2RldmljZS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5o Pg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRl IDxsaW51eC9maXJtd2FyZS9pbXgvaXBjLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9maXJtd2Fy ZS9pbXgvc3ZjL21pc2MuaD4NCj4gPiArI2luY2x1ZGUgInZwdS5oIg0KPiA+ICsjaW5jbHVkZSAi dnB1X3JwYy5oIg0KPiA+ICsjaW5jbHVkZSAidnB1X2lteDhxLmgiDQo+ID4gKyNpbmNsdWRlICJ2 cHVfd2luZHNvci5oIg0KPiA+ICsjaW5jbHVkZSAidnB1X21hbG9uZS5oIg0KPiA+ICsNCj4gPiAr dTMyIHZwdV9pZmFjZV9jaGVja19tZW1vcnlfcmVnaW9uKHN0cnVjdCB2cHVfY29yZSAqY29yZSwg ZG1hX2FkZHJfdA0KPiBhZGRyLCB1MzIgc2l6ZSkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2 cHVfaWZhY2Vfb3BzICpvcHMgPSB2cHVfY29yZV9nZXRfaWZhY2UoY29yZSk7DQo+ID4gKw0KPiA+ ICsgICAgIGlmICghb3BzIHx8ICFvcHMtPmNoZWNrX21lbW9yeV9yZWdpb24pDQo+ID4gKyAgICAg ICAgICAgICByZXR1cm4gVlBVX0NPUkVfTUVNT1JZX0lOVkFMSUQ7DQo+ID4gKw0KPiA+ICsgICAg IHJldHVybiBvcHMtPmNoZWNrX21lbW9yeV9yZWdpb24oY29yZS0+ZncucGh5cywgYWRkciwgc2l6 ZSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyB1MzIgdnB1X3JwY19jaGVja19idWZmZXJf c3BhY2Uoc3RydWN0IHZwdV9ycGNfYnVmZmVyX2Rlc2MgKmRlc2MsDQo+IGJvb2wgd3JpdGUpDQo+ ID4gK3sNCj4gPiArICAgICB1MzIgcHRyMTsNCj4gPiArICAgICB1MzIgcHRyMjsNCj4gPiArICAg ICB1MzIgc2l6ZTsNCj4gPiArDQo+ID4gKyAgICAgV0FSTl9PTighZGVzYyk7DQo+ID4gKw0KPiA+ ICsgICAgIHNpemUgPSBkZXNjLT5lbmQgLSBkZXNjLT5zdGFydDsNCj4gPiArICAgICBpZiAod3Jp dGUpIHsNCj4gPiArICAgICAgICAgICAgIHB0cjEgPSBkZXNjLT53cHRyOw0KPiA+ICsgICAgICAg ICAgICAgcHRyMiA9IGRlc2MtPnJwdHI7DQo+ID4gKyAgICAgfSBlbHNlIHsNCj4gPiArICAgICAg ICAgICAgIHB0cjEgPSBkZXNjLT5ycHRyOw0KPiA+ICsgICAgICAgICAgICAgcHRyMiA9IGRlc2Mt PndwdHI7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBpZiAocHRyMSA9PSBwdHIyKSB7 DQo+ID4gKyAgICAgICAgICAgICBpZiAoIXdyaXRlKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gMDsNCj4gPiArICAgICAgICAgICAgIGVsc2UNCj4gPiArICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIHNpemU7DQo+ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICByZXR1cm4g KHB0cjIgKyBzaXplIC0gcHRyMSkgJSBzaXplOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMg aW50IHZwdV9ycGNfc2VuZF9jbWRfYnVmKHN0cnVjdCB2cHVfc2hhcmVkX2FkZHIgKnNoYXJlZCwN Cj4gPiArICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZwdV9ycGNfZXZlbnQgKmNtZCkNCj4g PiArew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfcnBjX2J1ZmZlcl9kZXNjICpkZXNjOw0KPiA+ICsg ICAgIHUzMiBzcGFjZSA9IDA7DQo+ID4gKyAgICAgdTMyICpkYXRhOw0KPiA+ICsgICAgIHUzMiB3 cHRyOw0KPiA+ICsgICAgIHUzMiBpOw0KPiA+ICsNCj4gPiArICAgICBXQVJOX09OKCFzaGFyZWQg fHwgIXNoYXJlZC0+Y21kX21lbV92aXIgfHwgIWNtZCk7DQo+ID4gKw0KPiA+ICsgICAgIGRlc2Mg PSBzaGFyZWQtPmNtZF9kZXNjOw0KPiA+ICsgICAgIHNwYWNlID0gdnB1X3JwY19jaGVja19idWZm ZXJfc3BhY2UoZGVzYywgdHJ1ZSk7DQo+ID4gKyAgICAgaWYgKHNwYWNlIDwgKCgoY21kLT5oZHIu bnVtICsgMSkgPDwgMikgKyAxNikpIHsNCj4gPiArICAgICAgICAgICAgIHByX2VycigiQ21kIEJ1 ZmZlciBpcyBubyBzcGFjZSBmb3IgWyVkXSAlZFxuIiwNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjbWQtPmhkci5pbmRleCwgY21kLT5oZHIuaWQpOw0KPiA+ICsgICAgICAgICAg ICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4gKyAgICAgfQ0KPiA+ICsgICAgIHdwdHIgPSBkZXNjLT53 cHRyOw0KPiA+ICsgICAgIGRhdGEgPSAodTMyICopKHNoYXJlZC0+Y21kX21lbV92aXIgKyBkZXNj LT53cHRyIC0gZGVzYy0+c3RhcnQpOw0KPiA+ICsgICAgICpkYXRhID0gMDsNCj4gPiArICAgICAq ZGF0YSB8PSAoKGNtZC0+aGRyLmluZGV4ICYgMHhmZikgPDwgMjQpOw0KPiA+ICsgICAgICpkYXRh IHw9ICgoY21kLT5oZHIubnVtICYgMHhmZikgPDwgMTYpOw0KPiA+ICsgICAgICpkYXRhIHw9IChj bWQtPmhkci5pZCAmIDB4M2ZmZik7DQo+ID4gKyAgICAgd3B0ciArPSA0Ow0KPiA+ICsgICAgIGRh dGErKzsNCj4gPiArICAgICBpZiAod3B0ciA+PSBkZXNjLT5lbmQpIHsNCj4gPiArICAgICAgICAg ICAgIHdwdHIgPSBkZXNjLT5zdGFydDsNCj4gPiArICAgICAgICAgICAgIGRhdGEgPSBzaGFyZWQt PmNtZF9tZW1fdmlyOw0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgZm9yIChpID0gMDsg aSA8IGNtZC0+aGRyLm51bTsgaSsrKSB7DQo+ID4gKyAgICAgICAgICAgICAqZGF0YSA9IGNtZC0+ ZGF0YVtpXTsNCj4gPiArICAgICAgICAgICAgIHdwdHIgKz0gNDsNCj4gPiArICAgICAgICAgICAg IGRhdGErKzsNCj4gPiArICAgICAgICAgICAgIGlmICh3cHRyID49IGRlc2MtPmVuZCkgew0KPiA+ ICsgICAgICAgICAgICAgICAgICAgICB3cHRyID0gZGVzYy0+c3RhcnQ7DQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgIGRhdGEgPSBzaGFyZWQtPmNtZF9tZW1fdmlyOw0KPiA+ICsgICAgICAgICAg ICAgfQ0KPiA+ICsgICAgIH0NCj4gPiArDQo+ID4gKyAgICAgLyp1cGRhdGUgd3B0ciBhZnRlciBk YXRhIGlzIHdyaXR0ZW4qLw0KPiA+ICsgICAgIG1iKCk7DQo+ID4gKyAgICAgZGVzYy0+d3B0ciA9 IHdwdHI7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtz dGF0aWMgYm9vbCB2cHVfcnBjX2NoZWNrX21zZyhzdHJ1Y3QgdnB1X3NoYXJlZF9hZGRyICpzaGFy ZWQpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X3JwY19idWZmZXJfZGVzYyAqZGVzYzsN Cj4gPiArICAgICB1MzIgc3BhY2UgPSAwOw0KPiA+ICsgICAgIHUzMiBtc2d3b3JkOw0KPiA+ICsg ICAgIHUzMiBtc2dudW07DQo+ID4gKw0KPiA+ICsgICAgIFdBUk5fT04oIXNoYXJlZCB8fCAhc2hh cmVkLT5tc2dfZGVzYyk7DQo+ID4gKw0KPiA+ICsgICAgIGRlc2MgPSBzaGFyZWQtPm1zZ19kZXNj Ow0KPiA+ICsgICAgIHNwYWNlID0gdnB1X3JwY19jaGVja19idWZmZXJfc3BhY2UoZGVzYywgMCk7 DQo+ID4gKyAgICAgc3BhY2UgPSAoc3BhY2UgPj4gMik7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChz cGFjZSkgew0KPiA+ICsgICAgICAgICAgICAgbXNnd29yZCA9ICoodTMyICopKHNoYXJlZC0+bXNn X21lbV92aXIgKyBkZXNjLT5ycHRyIC0NCj4gZGVzYy0+c3RhcnQpOw0KPiA+ICsgICAgICAgICAg ICAgbXNnbnVtID0gKG1zZ3dvcmQgJiAweGZmMDAwMCkgPj4gMTY7DQo+ID4gKyAgICAgICAgICAg ICBpZiAobXNnbnVtIDw9IHNwYWNlKQ0KPiA+ICsgICAgICAgICAgICAgICAgICAgICByZXR1cm4g dHJ1ZTsNCj4gPiArICAgICB9DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiBmYWxzZTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCB2cHVfcnBjX3JlY2VpdmVfbXNnX2J1ZihzdHJ1Y3Qg dnB1X3NoYXJlZF9hZGRyICpzaGFyZWQsIHN0cnVjdA0KPiB2cHVfcnBjX2V2ZW50ICptc2cpDQo+ ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X3JwY19idWZmZXJfZGVzYyAqZGVzYzsNCj4gPiAr ICAgICB1MzIgKmRhdGE7DQo+ID4gKyAgICAgdTMyIG1zZ3dvcmQ7DQo+ID4gKyAgICAgdTMyIHJw dHI7DQo+ID4gKyAgICAgdTMyIGk7DQo+ID4gKw0KPiA+ICsgICAgIFdBUk5fT04oIXNoYXJlZCB8 fCAhc2hhcmVkLT5tc2dfZGVzYyB8fCAhbXNnKTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKCF2cHVf cnBjX2NoZWNrX21zZyhzaGFyZWQpKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7 DQo+ID4gKw0KPiA+ICsgICAgIGRlc2MgPSBzaGFyZWQtPm1zZ19kZXNjOw0KPiA+ICsgICAgIGRh dGEgPSAodTMyICopKHNoYXJlZC0+bXNnX21lbV92aXIgKyBkZXNjLT5ycHRyIC0gZGVzYy0+c3Rh cnQpOw0KPiA+ICsgICAgIHJwdHIgPSBkZXNjLT5ycHRyOw0KPiA+ICsgICAgIG1zZ3dvcmQgPSAq ZGF0YTsNCj4gPiArICAgICBkYXRhKys7DQo+ID4gKyAgICAgcnB0ciArPSA0Ow0KPiA+ICsgICAg IGlmIChycHRyID49IGRlc2MtPmVuZCkgew0KPiA+ICsgICAgICAgICAgICAgcnB0ciA9IGRlc2Mt PnN0YXJ0Ow0KPiA+ICsgICAgICAgICAgICAgZGF0YSA9IHNoYXJlZC0+bXNnX21lbV92aXI7DQo+ ID4gKyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBtc2ctPmhkci5pbmRleCA9IChtc2d3b3JkID4+ IDI0KSAmIDB4ZmY7DQo+ID4gKyAgICAgbXNnLT5oZHIubnVtID0gKG1zZ3dvcmQgPj4gMTYpICYg MHhmZjsNCj4gPiArICAgICBtc2ctPmhkci5pZCA9IG1zZ3dvcmQgJiAweDNmZmY7DQo+ID4gKw0K PiA+ICsgICAgIGlmIChtc2ctPmhkci5udW0gPiBBUlJBWV9TSVpFKG1zZy0+ZGF0YSkpIHsNCj4g PiArICAgICAgICAgICAgIHByX2VycigibXNnKCVkKSBkYXRhIGxlbmd0aCglZCkgaXMgb3V0IG9m IHJhbmdlXG4iLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1zZy0+aGRyLmlk LCBtc2ctPmhkci5udW0pOw0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4g KyAgICAgfQ0KPiA+ICsNCj4gPiArICAgICBmb3IgKGkgPSAwOyBpIDwgbXNnLT5oZHIubnVtOyBp KyspIHsNCj4gPiArICAgICAgICAgICAgIG1zZy0+ZGF0YVtpXSA9ICpkYXRhOw0KPiA+ICsgICAg ICAgICAgICAgZGF0YSsrOw0KPiA+ICsgICAgICAgICAgICAgcnB0ciArPSA0Ow0KPiA+ICsgICAg ICAgICAgICAgaWYgKHJwdHIgPj0gZGVzYy0+ZW5kKSB7DQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgIHJwdHIgPSBkZXNjLT5zdGFydDsNCj4gPiArICAgICAgICAgICAgICAgICAgICAgZGF0YSA9 IHNoYXJlZC0+bXNnX21lbV92aXI7DQo+ID4gKyAgICAgICAgICAgICB9DQo+ID4gKyAgICAgfQ0K PiA+ICsNCj4gPiArICAgICAvKnVwZGF0ZSBycHRyIGFmdGVyIGRhdGEgaXMgcmVhZCovDQo+ID4g KyAgICAgbWIoKTsNCj4gPiArICAgICBkZXNjLT5ycHRyID0gcnB0cjsNCj4gPiArDQo+ID4gKyAg ICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0cnVjdCB2cHVfaWZhY2Vfb3BzIGlt eDhxX3JwY19vcHNbXSA9IHsNCj4gPiArICAgICBbVlBVX0NPUkVfVFlQRV9FTkNdID0gew0KPiA+ ICsgICAgICAgICAgICAgLmNoZWNrX2NvZGVjID0gdnB1X2lteDhxX2NoZWNrX2NvZGVjLA0KPiA+ ICsgICAgICAgICAgICAgLmNoZWNrX2ZtdCA9IHZwdV9pbXg4cV9jaGVja19mbXQsDQo+ID4gKyAg ICAgICAgICAgICAuYm9vdF9jb3JlID0gdnB1X2lteDhxX2Jvb3RfY29yZSwNCj4gPiArICAgICAg ICAgICAgIC5nZXRfcG93ZXJfc3RhdGUgPSB2cHVfaW14OHFfZ2V0X3Bvd2VyX3N0YXRlLA0KPiA+ ICsgICAgICAgICAgICAgLm9uX2Zpcm13YXJlX2xvYWRlZCA9IHZwdV9pbXg4cV9vbl9maXJtd2Fy ZV9sb2FkZWQsDQo+ID4gKyAgICAgICAgICAgICAuZ2V0X2RhdGFfc2l6ZSA9IHZwdV93aW5kc29y X2dldF9kYXRhX3NpemUsDQo+ID4gKyAgICAgICAgICAgICAuY2hlY2tfbWVtb3J5X3JlZ2lvbiA9 DQo+IHZwdV9pbXg4cV9jaGVja19tZW1vcnlfcmVnaW9uLA0KPiA+ICsgICAgICAgICAgICAgLmlu aXRfcnBjID0gdnB1X3dpbmRzb3JfaW5pdF9ycGMsDQo+ID4gKyAgICAgICAgICAgICAuc2V0X2xv Z19idWYgPSB2cHVfd2luZHNvcl9zZXRfbG9nX2J1ZiwNCj4gPiArICAgICAgICAgICAgIC5zZXRf c3lzdGVtX2NmZyA9IHZwdV93aW5kc29yX3NldF9zeXN0ZW1fY2ZnLA0KPiA+ICsgICAgICAgICAg ICAgLmdldF92ZXJzaW9uID0gdnB1X3dpbmRzb3JfZ2V0X3ZlcnNpb24sDQo+ID4gKyAgICAgICAg ICAgICAuc2VuZF9jbWRfYnVmID0gdnB1X3JwY19zZW5kX2NtZF9idWYsDQo+ID4gKyAgICAgICAg ICAgICAucmVjZWl2ZV9tc2dfYnVmID0gdnB1X3JwY19yZWNlaXZlX21zZ19idWYsDQo+ID4gKyAg ICAgICAgICAgICAucGFja19jbWQgPSB2cHVfd2luZHNvcl9wYWNrX2NtZCwNCj4gPiArICAgICAg ICAgICAgIC5jb252ZXJ0X21zZ19pZCA9IHZwdV93aW5kc29yX2NvbnZlcnRfbXNnX2lkLA0KPiA+ ICsgICAgICAgICAgICAgLnVucGFja19tc2dfZGF0YSA9IHZwdV93aW5kc29yX3VucGFja19tc2df ZGF0YSwNCj4gPiArICAgICAgICAgICAgIC5jb25maWdfbWVtb3J5X3Jlc291cmNlID0NCj4gdnB1 X3dpbmRzb3JfY29uZmlnX21lbW9yeV9yZXNvdXJjZSwNCj4gPiArICAgICAgICAgICAgIC5nZXRf c3RyZWFtX2J1ZmZlcl9zaXplID0NCj4gdnB1X3dpbmRzb3JfZ2V0X3N0cmVhbV9idWZmZXJfc2l6 ZSwNCj4gPiArICAgICAgICAgICAgIC5jb25maWdfc3RyZWFtX2J1ZmZlciA9IHZwdV93aW5kc29y X2NvbmZpZ19zdHJlYW1fYnVmZmVyLA0KPiA+ICsgICAgICAgICAgICAgLmdldF9zdHJlYW1fYnVm ZmVyX2Rlc2MgPQ0KPiB2cHVfd2luZHNvcl9nZXRfc3RyZWFtX2J1ZmZlcl9kZXNjLA0KPiA+ICsg ICAgICAgICAgICAgLnVwZGF0ZV9zdHJlYW1fYnVmZmVyID0NCj4gdnB1X3dpbmRzb3JfdXBkYXRl X3N0cmVhbV9idWZmZXIsDQo+ID4gKyAgICAgICAgICAgICAuc2V0X2VuY29kZV9wYXJhbXMgPSB2 cHVfd2luZHNvcl9zZXRfZW5jb2RlX3BhcmFtcywNCj4gPiArICAgICAgICAgICAgIC5pbnB1dF9m cmFtZSA9IHZwdV93aW5kc29yX2lucHV0X2ZyYW1lLA0KPiA+ICsgICAgICAgICAgICAgLmdldF9t YXhfaW5zdGFuY2VfY291bnQgPQ0KPiB2cHVfd2luZHNvcl9nZXRfbWF4X2luc3RhbmNlX2NvdW50 LA0KPiA+ICsgICAgIH0sDQo+ID4gKyAgICAgW1ZQVV9DT1JFX1RZUEVfREVDXSA9IHsNCj4gPiAr ICAgICAgICAgICAgIC5jaGVja19jb2RlYyA9IHZwdV9pbXg4cV9jaGVja19jb2RlYywNCj4gPiAr ICAgICAgICAgICAgIC5jaGVja19mbXQgPSB2cHVfaW14OHFfY2hlY2tfZm10LA0KPiA+ICsgICAg ICAgICAgICAgLmJvb3RfY29yZSA9IHZwdV9pbXg4cV9ib290X2NvcmUsDQo+ID4gKyAgICAgICAg ICAgICAuZ2V0X3Bvd2VyX3N0YXRlID0gdnB1X2lteDhxX2dldF9wb3dlcl9zdGF0ZSwNCj4gPiAr ICAgICAgICAgICAgIC5vbl9maXJtd2FyZV9sb2FkZWQgPSB2cHVfaW14OHFfb25fZmlybXdhcmVf bG9hZGVkLA0KPiA+ICsgICAgICAgICAgICAgLmdldF9kYXRhX3NpemUgPSB2cHVfbWFsb25lX2dl dF9kYXRhX3NpemUsDQo+ID4gKyAgICAgICAgICAgICAuY2hlY2tfbWVtb3J5X3JlZ2lvbiA9DQo+ IHZwdV9pbXg4cV9jaGVja19tZW1vcnlfcmVnaW9uLA0KPiA+ICsgICAgICAgICAgICAgLmluaXRf cnBjID0gdnB1X21hbG9uZV9pbml0X3JwYywNCj4gPiArICAgICAgICAgICAgIC5zZXRfbG9nX2J1 ZiA9IHZwdV9tYWxvbmVfc2V0X2xvZ19idWYsDQo+ID4gKyAgICAgICAgICAgICAuc2V0X3N5c3Rl bV9jZmcgPSB2cHVfbWFsb25lX3NldF9zeXN0ZW1fY2ZnLA0KPiA+ICsgICAgICAgICAgICAgLmdl dF92ZXJzaW9uID0gdnB1X21hbG9uZV9nZXRfdmVyc2lvbiwNCj4gPiArICAgICAgICAgICAgIC5z ZW5kX2NtZF9idWYgPSB2cHVfcnBjX3NlbmRfY21kX2J1ZiwNCj4gPiArICAgICAgICAgICAgIC5y ZWNlaXZlX21zZ19idWYgPSB2cHVfcnBjX3JlY2VpdmVfbXNnX2J1ZiwNCj4gPiArICAgICAgICAg ICAgIC5nZXRfc3RyZWFtX2J1ZmZlcl9zaXplID0NCj4gdnB1X21hbG9uZV9nZXRfc3RyZWFtX2J1 ZmZlcl9zaXplLA0KPiA+ICsgICAgICAgICAgICAgLmNvbmZpZ19zdHJlYW1fYnVmZmVyID0gdnB1 X21hbG9uZV9jb25maWdfc3RyZWFtX2J1ZmZlciwNCj4gPiArICAgICAgICAgICAgIC5zZXRfZGVj b2RlX3BhcmFtcyA9IHZwdV9tYWxvbmVfc2V0X2RlY29kZV9wYXJhbXMsDQo+ID4gKyAgICAgICAg ICAgICAucGFja19jbWQgPSB2cHVfbWFsb25lX3BhY2tfY21kLA0KPiA+ICsgICAgICAgICAgICAg LmNvbnZlcnRfbXNnX2lkID0gdnB1X21hbG9uZV9jb252ZXJ0X21zZ19pZCwNCj4gPiArICAgICAg ICAgICAgIC51bnBhY2tfbXNnX2RhdGEgPSB2cHVfbWFsb25lX3VucGFja19tc2dfZGF0YSwNCj4g PiArICAgICAgICAgICAgIC5nZXRfc3RyZWFtX2J1ZmZlcl9kZXNjID0NCj4gdnB1X21hbG9uZV9n ZXRfc3RyZWFtX2J1ZmZlcl9kZXNjLA0KPiA+ICsgICAgICAgICAgICAgLnVwZGF0ZV9zdHJlYW1f YnVmZmVyID0NCj4gdnB1X21hbG9uZV91cGRhdGVfc3RyZWFtX2J1ZmZlciwNCj4gPiArICAgICAg ICAgICAgIC5hZGRfc2NvZGUgPSB2cHVfbWFsb25lX2FkZF9zY29kZSwNCj4gPiArICAgICAgICAg ICAgIC5pbnB1dF9mcmFtZSA9IHZwdV9tYWxvbmVfaW5wdXRfZnJhbWUsDQo+ID4gKyAgICAgICAg ICAgICAucHJlX3NlbmRfY21kID0gdnB1X21hbG9uZV9wcmVfY21kLA0KPiA+ICsgICAgICAgICAg ICAgLnBvc3Rfc2VuZF9jbWQgPSB2cHVfbWFsb25lX3Bvc3RfY21kLA0KPiA+ICsgICAgICAgICAg ICAgLmluaXRfaW5zdGFuY2UgPSB2cHVfbWFsb25lX2luaXRfaW5zdGFuY2UsDQo+ID4gKyAgICAg ICAgICAgICAuZ2V0X21heF9pbnN0YW5jZV9jb3VudCA9DQo+IHZwdV9tYWxvbmVfZ2V0X21heF9p bnN0YW5jZV9jb3VudCwNCj4gPiArICAgICB9LA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArDQo+ID4g K3N0YXRpYyBzdHJ1Y3QgdnB1X2lmYWNlX29wcyAqdnB1X2dldF9pZmFjZShzdHJ1Y3QgdnB1X2Rl diAqdnB1LCBlbnVtDQo+IHZwdV9jb3JlX3R5cGUgdHlwZSkNCj4gPiArew0KPiA+ICsgICAgIHN0 cnVjdCB2cHVfaWZhY2Vfb3BzICpycGNfb3BzID0gTlVMTDsNCj4gPiArICAgICB1MzIgc2l6ZSA9 IDA7DQo+ID4gKw0KPiA+ICsgICAgIFdBUk5fT04oIXZwdSB8fCAhdnB1LT5yZXMpOw0KPiA+ICsN Cj4gPiArICAgICBzd2l0Y2ggKHZwdS0+cmVzLT5wbGF0X3R5cGUpIHsNCj4gPiArICAgICBjYXNl IElNWDhRWFA6DQo+ID4gKyAgICAgY2FzZSBJTVg4UU06DQo+ID4gKyAgICAgICAgICAgICBycGNf b3BzID0gaW14OHFfcnBjX29wczsNCj4gPiArICAgICAgICAgICAgIHNpemUgPSBBUlJBWV9TSVpF KGlteDhxX3JwY19vcHMpOw0KPiA+ICsgICAgICAgICAgICAgYnJlYWs7DQo+ID4gKyAgICAgZGVm YXVsdDoNCj4gPiArICAgICAgICAgICAgIHJldHVybiBOVUxMOw0KPiA+ICsgICAgIH0NCj4gPiAr DQo+ID4gKyAgICAgaWYgKHR5cGUgPj0gc2l6ZSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiBO VUxMOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gJnJwY19vcHNbdHlwZV07DQo+ID4gK30NCj4g PiArDQo+ID4gK3N0cnVjdCB2cHVfaWZhY2Vfb3BzICp2cHVfY29yZV9nZXRfaWZhY2Uoc3RydWN0 IHZwdV9jb3JlICpjb3JlKQ0KPiA+ICt7DQo+ID4gKyAgICAgV0FSTl9PTighY29yZSB8fCAhY29y ZS0+dnB1KTsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIHZwdV9nZXRfaWZhY2UoY29yZS0+dnB1 LCBjb3JlLT50eXBlKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RydWN0IHZwdV9pZmFjZV9vcHMg KnZwdV9pbnN0X2dldF9pZmFjZShzdHJ1Y3QgdnB1X2luc3QgKmluc3QpDQo+ID4gK3sNCj4gPiAr ICAgICBXQVJOX09OKCFpbnN0IHx8ICFpbnN0LT52cHUpOw0KPiA+ICsNCj4gPiArICAgICBpZiAo aW5zdC0+Y29yZSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiB2cHVfY29yZV9nZXRfaWZhY2Uo aW5zdC0+Y29yZSk7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiB2cHVfZ2V0X2lmYWNlKGluc3Qt PnZwdSwgaW5zdC0+dHlwZSk7DQo+ID4gK30NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRp YS9wbGF0Zm9ybS9hbXBoaW9uL3ZwdV9ycGMuaA0KPiBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0v YW1waGlvbi92cHVfcnBjLmgNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAw MDAwMDAwMDAwMC4uYWJlOTk4ZTVhNWJlDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2Ry aXZlcnMvbWVkaWEvcGxhdGZvcm0vYW1waGlvbi92cHVfcnBjLmgNCj4gPiBAQCAtMCwwICsxLDQ2 NCBAQA0KPiA+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLw0KPiA+ICsv Kg0KPiA+ICsgKiBDb3B5cmlnaHQgMjAyMC0yMDIxIE5YUA0KPiA+ICsgKi8NCj4gPiArDQo+ID4g KyNpZm5kZWYgX0FNUEhJT05fVlBVX1JQQ19IDQo+ID4gKyNkZWZpbmUgX0FNUEhJT05fVlBVX1JQ Q19IDQo+ID4gKw0KPiA+ICsjaW5jbHVkZSA8bWVkaWEvdmlkZW9idWYyLWNvcmUuaD4NCj4gPiAr I2luY2x1ZGUgInZwdV9jb2RlYy5oIg0KPiA+ICsNCj4gPiArc3RydWN0IHZwdV9ycGNfYnVmZmVy X2Rlc2Mgew0KPiA+ICsgICAgIHUzMiB3cHRyOw0KPiA+ICsgICAgIHUzMiBycHRyOw0KPiA+ICsg ICAgIHUzMiBzdGFydDsNCj4gPiArICAgICB1MzIgZW5kOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiAr c3RydWN0IHZwdV9zaGFyZWRfYWRkciB7DQo+ID4gKyAgICAgdm9pZCAqaWZhY2U7DQo+ID4gKyAg ICAgc3RydWN0IHZwdV9ycGNfYnVmZmVyX2Rlc2MgKmNtZF9kZXNjOw0KPiA+ICsgICAgIHZvaWQg KmNtZF9tZW1fdmlyOw0KPiA+ICsgICAgIHN0cnVjdCB2cHVfcnBjX2J1ZmZlcl9kZXNjICptc2df ZGVzYzsNCj4gPiArICAgICB2b2lkICptc2dfbWVtX3ZpcjsNCj4gPiArDQo+ID4gKyAgICAgdW5z aWduZWQgbG9uZyBib290X2FkZHI7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9jb3JlICpjb3JlOw0K PiA+ICsgICAgIHZvaWQgKnByaXY7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgdnB1X3Jw Y19ldmVudF9oZWFkZXIgew0KPiA+ICsgICAgIHUzMiBpbmRleDsNCj4gPiArICAgICB1MzIgaWQ7 DQo+ID4gKyAgICAgdTMyIG51bTsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCB2cHVfcnBj X2V2ZW50IHsNCj4gPiArICAgICBzdHJ1Y3QgdnB1X3JwY19ldmVudF9oZWFkZXIgaGRyOw0KPiA+ ICsgICAgIHUzMiBkYXRhWzEyOF07DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgdnB1X2lm YWNlX29wcyB7DQo+ID4gKyAgICAgYm9vbCAoKmNoZWNrX2NvZGVjKShlbnVtIHZwdV9jb3JlX3R5 cGUgdHlwZSk7DQo+ID4gKyAgICAgYm9vbCAoKmNoZWNrX2ZtdCkoZW51bSB2cHVfY29yZV90eXBl IHR5cGUsIHUzMiBwaXhlbGZtdCk7DQo+ID4gKyAgICAgdTMyICgqZ2V0X2RhdGFfc2l6ZSkodm9p ZCk7DQo+ID4gKyAgICAgdTMyICgqY2hlY2tfbWVtb3J5X3JlZ2lvbikoZG1hX2FkZHJfdCBiYXNl LCBkbWFfYWRkcl90IGFkZHIsDQo+IHUzMiBzaXplKTsNCj4gPiArICAgICBpbnQgKCpib290X2Nv cmUpKHN0cnVjdCB2cHVfY29yZSAqY29yZSk7DQo+ID4gKyAgICAgaW50ICgqc2h1dGRvd25fY29y ZSkoc3RydWN0IHZwdV9jb3JlICpjb3JlKTsNCj4gPiArICAgICBpbnQgKCpyZXN0b3JlX2NvcmUp KHN0cnVjdCB2cHVfY29yZSAqY29yZSk7DQo+ID4gKyAgICAgaW50ICgqZ2V0X3Bvd2VyX3N0YXRl KShzdHJ1Y3QgdnB1X2NvcmUgKmNvcmUpOw0KPiA+ICsgICAgIGludCAoKm9uX2Zpcm13YXJlX2xv YWRlZCkoc3RydWN0IHZwdV9jb3JlICpjb3JlKTsNCj4gPiArICAgICB2b2lkICgqaW5pdF9ycGMp KHN0cnVjdCB2cHVfc2hhcmVkX2FkZHIgKnNoYXJlZCwNCj4gPiArICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IHZwdV9idWZmZXIgKnJwYywgZG1hX2FkZHJfdCBib290X2FkZHIpOw0KPiA+ICsg ICAgIHZvaWQgKCpzZXRfbG9nX2J1Zikoc3RydWN0IHZwdV9zaGFyZWRfYWRkciAqc2hhcmVkLA0K PiA+ICsgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdnB1X2J1ZmZlciAqbG9nKTsNCj4gPiAr ICAgICB2b2lkICgqc2V0X3N5c3RlbV9jZmcpKHN0cnVjdCB2cHVfc2hhcmVkX2FkZHIgKnNoYXJl ZCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgdTMyIHJlZ3NfYmFzZSwgdm9pZCBfX2lvbWVt ICpyZWdzLCB1MzIgaW5kZXgpOw0KPiA+ICsgICAgIHZvaWQgKCpzZXRfc3RyZWFtX2NmZykoc3Ry dWN0IHZwdV9zaGFyZWRfYWRkciAqc2hhcmVkLCB1MzIgaW5kZXgpOw0KPiA+ICsgICAgIHUzMiAo KmdldF92ZXJzaW9uKShzdHJ1Y3QgdnB1X3NoYXJlZF9hZGRyICpzaGFyZWQpOw0KPiA+ICsgICAg IHUzMiAoKmdldF9tYXhfaW5zdGFuY2VfY291bnQpKHN0cnVjdCB2cHVfc2hhcmVkX2FkZHIgKnNo YXJlZCk7DQo+ID4gKyAgICAgaW50ICgqZ2V0X3N0cmVhbV9idWZmZXJfc2l6ZSkoc3RydWN0IHZw dV9zaGFyZWRfYWRkciAqc2hhcmVkKTsNCj4gPiArICAgICBpbnQgKCpzZW5kX2NtZF9idWYpKHN0 cnVjdCB2cHVfc2hhcmVkX2FkZHIgKnNoYXJlZCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAg c3RydWN0IHZwdV9ycGNfZXZlbnQgKmNtZCk7DQo+ID4gKyAgICAgaW50ICgqcmVjZWl2ZV9tc2df YnVmKShzdHJ1Y3QgdnB1X3NoYXJlZF9hZGRyICpzaGFyZWQsDQo+ID4gKyAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCB2cHVfcnBjX2V2ZW50ICptc2cpOw0KPiA+ICsgICAgIGludCAoKnBhY2tf Y21kKShzdHJ1Y3QgdnB1X3JwY19ldmVudCAqcGt0LCB1MzIgaW5kZXgsIHUzMiBpZCwgdm9pZA0K PiAqZGF0YSk7DQo+ID4gKyAgICAgaW50ICgqY29udmVydF9tc2dfaWQpKHUzMiBtc2dfaWQpOw0K PiA+ICsgICAgIGludCAoKnVucGFja19tc2dfZGF0YSkoc3RydWN0IHZwdV9ycGNfZXZlbnQgKnBr dCwgdm9pZCAqZGF0YSk7DQo+ID4gKyAgICAgaW50ICgqaW5wdXRfZnJhbWUpKHN0cnVjdCB2cHVf c2hhcmVkX2FkZHIgKnNoYXJlZCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZw dV9pbnN0ICppbnN0LCBzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIpOw0KPiA+ICsgICAgIGludCAoKmNv bmZpZ19tZW1vcnlfcmVzb3VyY2UpKHN0cnVjdCB2cHVfc2hhcmVkX2FkZHIgKnNoYXJlZCwNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBpbnN0YW5jZSwNCj4g PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiB0eXBlLA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdTMyIGluZGV4LA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZwdV9idWZmZXIgKmJ1Zik7 DQo+ID4gKyAgICAgaW50ICgqY29uZmlnX3N0cmVhbV9idWZmZXIpKHN0cnVjdCB2cHVfc2hhcmVk X2FkZHIgKnNoYXJlZCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHUzMiBpbnN0YW5jZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCB2cHVfYnVmZmVyICpidWYpOw0KPiA+ICsgICAgIGludCAoKnVwZGF0ZV9zdHJlYW1f YnVmZmVyKShzdHJ1Y3QgdnB1X3NoYXJlZF9hZGRyICpzaGFyZWQsDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgaW5zdGFuY2UsIHUzMiBwdHIsIGJvb2wNCj4g d3JpdGUpOw0KPiA+ICsgICAgIGludCAoKmdldF9zdHJlYW1fYnVmZmVyX2Rlc2MpKHN0cnVjdCB2 cHVfc2hhcmVkX2FkZHIgKnNoYXJlZCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHUzMiBpbnN0YW5jZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCB2cHVfcnBjX2J1ZmZlcl9kZXNjDQo+ICpkZXNjKTsNCj4gPiArICAg ICBpbnQgKCpzZXRfZW5jb2RlX3BhcmFtcykoc3RydWN0IHZwdV9zaGFyZWRfYWRkciAqc2hhcmVk LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICB1MzIgaW5zdGFuY2UsDQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgIHN0cnVjdCB2cHVfZW5jb2RlX3BhcmFtcyAqcGFyYW1zLCB1MzIgdXBkYXRl KTsNCj4gPiArICAgICBpbnQgKCpzZXRfZGVjb2RlX3BhcmFtcykoc3RydWN0IHZwdV9zaGFyZWRf YWRkciAqc2hhcmVkLA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICB1MzIgaW5zdGFuY2UsDQo+ ID4gKyAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2cHVfZGVjb2RlX3BhcmFtcyAqcGFyYW1z LCB1MzIgdXBkYXRlKTsNCj4gPiArICAgICBpbnQgKCphZGRfc2NvZGUpKHN0cnVjdCB2cHVfc2hh cmVkX2FkZHIgKnNoYXJlZCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIg aW5zdGFuY2UsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZwdV9i dWZmZXIgKnN0cmVhbV9idWZmZXIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dTMyIHBpeGVsZm9ybWF0LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBz Y29kZV90eXBlKTsNCj4gPiArICAgICBpbnQgKCpwcmVfc2VuZF9jbWQpKHN0cnVjdCB2cHVfc2hh cmVkX2FkZHIgKnNoYXJlZCwgdTMyIGluc3RhbmNlKTsNCj4gPiArICAgICBpbnQgKCpwb3N0X3Nl bmRfY21kKShzdHJ1Y3QgdnB1X3NoYXJlZF9hZGRyICpzaGFyZWQsIHUzMiBpbnN0YW5jZSk7DQo+ ID4gKyAgICAgaW50ICgqaW5pdF9pbnN0YW5jZSkoc3RydWN0IHZwdV9zaGFyZWRfYWRkciAqc2hh cmVkLCB1MzIgaW5zdGFuY2UpOw0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArZW51bSB7DQo+ID4gKyAg ICAgVlBVX0NPUkVfTUVNT1JZX0lOVkFMSUQgPSAwLA0KPiA+ICsgICAgIFZQVV9DT1JFX01FTU9S WV9DQUNIRUQsDQo+ID4gKyAgICAgVlBVX0NPUkVfTUVNT1JZX1VOQ0FDSEVEDQo+ID4gK307DQo+ ID4gKw0KPiA+ICtzdHJ1Y3QgdnB1X3JwY19yZWdpb25fdCB7DQo+ID4gKyAgICAgZG1hX2FkZHJf dCBzdGFydDsNCj4gPiArICAgICBkbWFfYWRkcl90IGVuZDsNCj4gPiArICAgICBkbWFfYWRkcl90 IHR5cGU7DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdHJ1Y3QgdnB1X2lmYWNlX29wcyAqdnB1X2Nv cmVfZ2V0X2lmYWNlKHN0cnVjdCB2cHVfY29yZSAqY29yZSk7DQo+ID4gK3N0cnVjdCB2cHVfaWZh Y2Vfb3BzICp2cHVfaW5zdF9nZXRfaWZhY2Uoc3RydWN0IHZwdV9pbnN0ICppbnN0KTsNCj4gPiAr dTMyIHZwdV9pZmFjZV9jaGVja19tZW1vcnlfcmVnaW9uKHN0cnVjdCB2cHVfY29yZSAqY29yZSwg ZG1hX2FkZHJfdA0KPiBhZGRyLCB1MzIgc2l6ZSk7DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5l IGJvb2wgdnB1X2lmYWNlX2NoZWNrX2NvZGVjKHN0cnVjdCB2cHVfY29yZSAqY29yZSkNCj4gPiAr ew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfaWZhY2Vfb3BzICpvcHMgPSB2cHVfY29yZV9nZXRfaWZh Y2UoY29yZSk7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChvcHMgJiYgb3BzLT5jaGVja19jb2RlYykN Cj4gPiArICAgICAgICAgICAgIHJldHVybiBvcHMtPmNoZWNrX2NvZGVjKGNvcmUtPnR5cGUpOw0K PiA+ICsNCj4gPiArICAgICByZXR1cm4gdHJ1ZTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGlj IGlubGluZSBib29sIHZwdV9pZmFjZV9jaGVja19mb3JtYXQoc3RydWN0IHZwdV9pbnN0ICppbnN0 LCB1MzINCj4gcGl4ZWxmbXQpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2lmYWNlX29w cyAqb3BzID0gdnB1X2luc3RfZ2V0X2lmYWNlKGluc3QpOw0KPiA+ICsNCj4gPiArICAgICBpZiAo b3BzICYmIG9wcy0+Y2hlY2tfZm10KQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIG9wcy0+Y2hl Y2tfZm10KGluc3QtPnR5cGUsIHBpeGVsZm10KTsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIHRy dWU7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgaW50IHZwdV9pZmFjZV9ib290 X2NvcmUoc3RydWN0IHZwdV9jb3JlICpjb3JlKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHZw dV9pZmFjZV9vcHMgKm9wcyA9IHZwdV9jb3JlX2dldF9pZmFjZShjb3JlKTsNCj4gPiArDQo+ID4g KyAgICAgaWYgKG9wcyAmJiBvcHMtPmJvb3RfY29yZSkNCj4gPiArICAgICAgICAgICAgIHJldHVy biBvcHMtPmJvb3RfY29yZShjb3JlKTsNCj4gPiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIGlubGluZSBpbnQgdnB1X2lmYWNlX2dldF9wb3dlcl9zdGF0ZShzdHJ1 Y3QgdnB1X2NvcmUgKmNvcmUpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2lmYWNlX29w cyAqb3BzID0gdnB1X2NvcmVfZ2V0X2lmYWNlKGNvcmUpOw0KPiA+ICsNCj4gPiArICAgICBpZiAo b3BzICYmIG9wcy0+Z2V0X3Bvd2VyX3N0YXRlKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIG9w cy0+Z2V0X3Bvd2VyX3N0YXRlKGNvcmUpOw0KPiA+ICsgICAgIHJldHVybiAxOw0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIGludCB2cHVfaWZhY2Vfc2h1dGRvd25fY29yZShzdHJ1 Y3QgdnB1X2NvcmUgKmNvcmUpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2lmYWNlX29w cyAqb3BzID0gdnB1X2NvcmVfZ2V0X2lmYWNlKGNvcmUpOw0KPiA+ICsNCj4gPiArICAgICBpZiAo b3BzICYmIG9wcy0+c2h1dGRvd25fY29yZSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiBvcHMt PnNodXRkb3duX2NvcmUoY29yZSk7DQo+ID4gKyAgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiAr DQo+ID4gK3N0YXRpYyBpbmxpbmUgaW50IHZwdV9pZmFjZV9yZXN0b3JlX2NvcmUoc3RydWN0IHZw dV9jb3JlICpjb3JlKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9pZmFjZV9vcHMgKm9w cyA9IHZwdV9jb3JlX2dldF9pZmFjZShjb3JlKTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKG9wcyAm JiBvcHMtPnJlc3RvcmVfY29yZSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiBvcHMtPnJlc3Rv cmVfY29yZShjb3JlKTsNCj4gPiArICAgICByZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIGlubGluZSBpbnQgdnB1X2lmYWNlX29uX2Zpcm13YXJlX2xvYWRlZChzdHJ1Y3QgdnB1 X2NvcmUgKmNvcmUpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2lmYWNlX29wcyAqb3Bz ID0gdnB1X2NvcmVfZ2V0X2lmYWNlKGNvcmUpOw0KPiA+ICsNCj4gPiArICAgICBpZiAob3BzICYm IG9wcy0+b25fZmlybXdhcmVfbG9hZGVkKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIG9wcy0+ b25fZmlybXdhcmVfbG9hZGVkKGNvcmUpOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gMDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSB1MzIgdnB1X2lmYWNlX2dldF9kYXRhX3Np emUoc3RydWN0IHZwdV9jb3JlICpjb3JlKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9p ZmFjZV9vcHMgKm9wcyA9IHZwdV9jb3JlX2dldF9pZmFjZShjb3JlKTsNCj4gPiArDQo+ID4gKyAg ICAgaWYgKCFvcHMgfHwgIW9wcy0+Z2V0X2RhdGFfc2l6ZSkNCj4gPiArICAgICAgICAgICAgIHJl dHVybiAwOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gb3BzLT5nZXRfZGF0YV9zaXplKCk7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgaW50IHZwdV9pZmFjZV9pbml0KHN0cnVj dCB2cHVfY29yZSAqY29yZSwNCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgdnB1X3NoYXJlZF9hZGRyICpzaGFyZWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHZwdV9idWZmZXIgKnJwYywNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBkbWFfYWRkcl90IGJvb3RfYWRkcikNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2 cHVfaWZhY2Vfb3BzICpvcHMgPSB2cHVfY29yZV9nZXRfaWZhY2UoY29yZSk7DQo+ID4gKw0KPiA+ ICsgICAgIGlmICghb3BzIHx8ICFvcHMtPmluaXRfcnBjKQ0KPiA+ICsgICAgICAgICAgICAgcmV0 dXJuIC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsgICAgIG9wcy0+aW5pdF9ycGMoc2hhcmVkLCBycGMs IGJvb3RfYWRkcik7DQo+ID4gKyAgICAgY29yZS0+aWZhY2UgPSBzaGFyZWQ7DQo+ID4gKyAgICAg c2hhcmVkLT5jb3JlID0gY29yZTsNCj4gPiArICAgICBpZiAocnBjLT5ieXRlc3VzZWQgPiBycGMt Pmxlbmd0aCkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRU5PU1BDOw0KPiA+ICsgICAgIHJl dHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIGludCB2cHVfaWZhY2Vf c2V0X2xvZ19idWYoc3RydWN0IHZwdV9jb3JlICpjb3JlLA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZwdV9idWZmZXIgKmxvZykNCj4gPiArew0KPiA+ ICsgICAgIHN0cnVjdCB2cHVfaWZhY2Vfb3BzICpvcHMgPSB2cHVfY29yZV9nZXRfaWZhY2UoY29y ZSk7DQo+ID4gKw0KPiA+ICsgICAgIGlmICghb3BzKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJu IC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsgICAgIGlmIChvcHMtPnNldF9sb2dfYnVmKQ0KPiA+ICsg ICAgICAgICAgICAgb3BzLT5zZXRfbG9nX2J1Zihjb3JlLT5pZmFjZSwgbG9nKTsNCj4gPiArDQo+ ID4gKyAgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgaW50 IHZwdV9pZmFjZV9jb25maWdfc3lzdGVtKHN0cnVjdCB2cHVfY29yZSAqY29yZSwNCj4gPiArICAg ICAgICAgICAgIHUzMiByZWdzX2Jhc2UsIHZvaWQgX19pb21lbSAqcmVncykNCj4gPiArew0KPiA+ ICsgICAgIHN0cnVjdCB2cHVfaWZhY2Vfb3BzICpvcHMgPSB2cHVfY29yZV9nZXRfaWZhY2UoY29y ZSk7DQo+ID4gKw0KPiA+ICsgICAgIGlmICghb3BzKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJu IC1FSU5WQUw7DQo+ID4gKyAgICAgaWYgKG9wcy0+c2V0X3N5c3RlbV9jZmcpDQo+ID4gKyAgICAg ICAgICAgICBvcHMtPnNldF9zeXN0ZW1fY2ZnKGNvcmUtPmlmYWNlLCByZWdzX2Jhc2UsIHJlZ3Ms IGNvcmUtPmlkKTsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3N0YXRpYyBpbmxpbmUgaW50IHZwdV9pZmFjZV9nZXRfc3RyZWFtX2J1ZmZlcl9zaXplKHN0 cnVjdCB2cHVfY29yZSAqY29yZSkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfaWZhY2Vf b3BzICpvcHMgPSB2cHVfY29yZV9nZXRfaWZhY2UoY29yZSk7DQo+ID4gKw0KPiA+ICsgICAgIGlm ICghb3BzIHx8ICFvcHMtPmdldF9zdHJlYW1fYnVmZmVyX3NpemUpDQo+ID4gKyAgICAgICAgICAg ICByZXR1cm4gMDsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIG9wcy0+Z2V0X3N0cmVhbV9idWZm ZXJfc2l6ZShjb3JlLT5pZmFjZSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUg aW50IHZwdV9pZmFjZV9jb25maWdfc3RyZWFtKHN0cnVjdCB2cHVfaW5zdCAqaW5zdCkNCj4gPiAr ew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfaWZhY2Vfb3BzICpvcHMgPSB2cHVfY29yZV9nZXRfaWZh Y2UoaW5zdC0+Y29yZSk7DQo+ID4gKw0KPiA+ICsgICAgIFdBUk5fT04oaW5zdC0+aWQgPCAwKTsN Cj4gPiArICAgICBpZiAoIW9wcykNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0K PiA+ICsgICAgIGlmIChvcHMtPnNldF9zdHJlYW1fY2ZnKQ0KPiA+ICsgICAgICAgICAgICAgb3Bz LT5zZXRfc3RyZWFtX2NmZyhpbnN0LT5jb3JlLT5pZmFjZSwgaW5zdC0+aWQpOw0KPiA+ICsgICAg IHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIGludCB2cHVfaWZh Y2Vfc2VuZF9jbWQoc3RydWN0IHZwdV9jb3JlICpjb3JlLCBzdHJ1Y3QNCj4gdnB1X3JwY19ldmVu dCAqY21kKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9pZmFjZV9vcHMgKm9wcyA9IHZw dV9jb3JlX2dldF9pZmFjZShjb3JlKTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKCFvcHMgfHwgIW9w cy0+c2VuZF9jbWRfYnVmKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4g Kw0KPiA+ICsgICAgIHJldHVybiBvcHMtPnNlbmRfY21kX2J1Zihjb3JlLT5pZmFjZSwgY21kKTsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSBpbnQgdnB1X2lmYWNlX3JlY2VpdmVf bXNnKHN0cnVjdCB2cHVfY29yZSAqY29yZSwgc3RydWN0DQo+IHZwdV9ycGNfZXZlbnQgKm1zZykN Cj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfaWZhY2Vfb3BzICpvcHMgPSB2cHVfY29yZV9n ZXRfaWZhY2UoY29yZSk7DQo+ID4gKw0KPiA+ICsgICAgIGlmICghb3BzIHx8ICFvcHMtPnJlY2Vp dmVfbXNnX2J1ZikNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4g PiArICAgICByZXR1cm4gb3BzLT5yZWNlaXZlX21zZ19idWYoY29yZS0+aWZhY2UsIG1zZyk7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgaW50IHZwdV9pZmFjZV9wYWNrX2NtZChz dHJ1Y3QgdnB1X2NvcmUgKmNvcmUsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgdnB1X3JwY19ldmVudCAqcGt0LA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdTMyIGluZGV4LCB1MzIgaWQsIHZvaWQgKmRhdGEpDQo+ID4g K3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2lmYWNlX29wcyAqb3BzID0gdnB1X2NvcmVfZ2V0X2lm YWNlKGNvcmUpOw0KPiA+ICsNCj4gPiArICAgICBpZiAoIW9wcyB8fCAhb3BzLT5wYWNrX2NtZCkN Cj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsgICAgIHJldHVybiBvcHMt PnBhY2tfY21kKHBrdCwgaW5kZXgsIGlkLCBkYXRhKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljIGlubGluZSBpbnQgdnB1X2lmYWNlX2NvbnZlcnRfbXNnX2lkKHN0cnVjdCB2cHVfY29yZSAq Y29yZSwgdTMyDQo+IG1zZ19pZCkNCj4gPiArew0KPiA+ICsgICAgIHN0cnVjdCB2cHVfaWZhY2Vf b3BzICpvcHMgPSB2cHVfY29yZV9nZXRfaWZhY2UoY29yZSk7DQo+ID4gKw0KPiA+ICsgICAgIGlm ICghb3BzIHx8ICFvcHMtPmNvbnZlcnRfbXNnX2lkKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJu IC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiBvcHMtPmNvbnZlcnRfbXNnX2lkKG1z Z19pZCk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgaW50IHZwdV9pZmFjZV91 bnBhY2tfbXNnX2RhdGEoc3RydWN0IHZwdV9jb3JlICpjb3JlLA0KPiA+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdnB1X3JwY19ldmVudA0KPiAq cGt0LCB2b2lkICpkYXRhKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9pZmFjZV9vcHMg Km9wcyA9IHZwdV9jb3JlX2dldF9pZmFjZShjb3JlKTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKCFv cHMgfHwgIW9wcy0+dW5wYWNrX21zZ19kYXRhKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1F SU5WQUw7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiBvcHMtPnVucGFja19tc2dfZGF0YShwa3Qs IGRhdGEpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIGludCB2cHVfaWZhY2Vf aW5wdXRfZnJhbWUoc3RydWN0IHZwdV9pbnN0ICppbnN0LA0KPiA+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIpDQo+ID4g K3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2lmYWNlX29wcyAqb3BzID0gdnB1X2NvcmVfZ2V0X2lm YWNlKGluc3QtPmNvcmUpOw0KPiA+ICsNCj4gPiArICAgICBpZiAoIW9wcyB8fCAhb3BzLT5pbnB1 dF9mcmFtZSkNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiAr ICAgICByZXR1cm4gb3BzLT5pbnB1dF9mcmFtZShpbnN0LT5jb3JlLT5pZmFjZSwgaW5zdCwgdmIp Ow0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIGludCB2cHVfaWZhY2VfY29uZmln X21lbW9yeV9yZXNvdXJjZShzdHJ1Y3QgdnB1X2luc3QgKmluc3QsDQo+ID4gKyAgICAgICAgICAg ICAgICAgICAgIHUzMiB0eXBlLCB1MzIgaW5kZXgsIHN0cnVjdCB2cHVfYnVmZmVyICpidWYpDQo+ ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2lmYWNlX29wcyAqb3BzID0gdnB1X2NvcmVfZ2V0 X2lmYWNlKGluc3QtPmNvcmUpOw0KPiA+ICsNCj4gPiArICAgICBXQVJOX09OKGluc3QtPmlkIDwg MCk7DQo+ID4gKyAgICAgaWYgKCFvcHMgfHwgIW9wcy0+Y29uZmlnX21lbW9yeV9yZXNvdXJjZSkN Cj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiArICAgICByZXR1 cm4gb3BzLT5jb25maWdfbWVtb3J5X3Jlc291cmNlKGluc3QtPmNvcmUtPmlmYWNlLA0KPiA+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdC0+aWQsDQo+ID4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlLCBpbmRleCwgYnVmKTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSBpbnQgdnB1X2lmYWNlX2NvbmZpZ19zdHJlYW1f YnVmZmVyKHN0cnVjdCB2cHVfaW5zdCAqaW5zdCwNCj4gPiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZwdV9idWZmZXIgKmJ1ZikNCj4gPiArew0K PiA+ICsgICAgIHN0cnVjdCB2cHVfaWZhY2Vfb3BzICpvcHMgPSB2cHVfY29yZV9nZXRfaWZhY2Uo aW5zdC0+Y29yZSk7DQo+ID4gKw0KPiA+ICsgICAgIFdBUk5fT04oaW5zdC0+aWQgPCAwKTsNCj4g PiArICAgICBpZiAoIW9wcyB8fCAhb3BzLT5jb25maWdfc3RyZWFtX2J1ZmZlcikNCj4gPiArICAg ICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsNCj4gPiArICAgICByZXR1cm4gb3BzLT5j b25maWdfc3RyZWFtX2J1ZmZlcihpbnN0LT5jb3JlLT5pZmFjZSwgaW5zdC0+aWQsIGJ1Zik7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgaW50IHZwdV9pZmFjZV91cGRhdGVfc3Ry ZWFtX2J1ZmZlcihzdHJ1Y3QgdnB1X2luc3QgKmluc3QsDQo+ID4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBwdHIsIGJvb2wgd3JpdGUpDQo+ID4gK3sN Cj4gPiArICAgICBzdHJ1Y3QgdnB1X2lmYWNlX29wcyAqb3BzID0gdnB1X2NvcmVfZ2V0X2lmYWNl KGluc3QtPmNvcmUpOw0KPiA+ICsNCj4gPiArICAgICBXQVJOX09OKGluc3QtPmlkIDwgMCk7DQo+ ID4gKyAgICAgaWYgKCFvcHMgfHwgIW9wcy0+dXBkYXRlX3N0cmVhbV9idWZmZXIpDQo+ID4gKyAg ICAgICAgICAgICByZXR1cm4gLUVJTlZBTDsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJuIG9wcy0+ dXBkYXRlX3N0cmVhbV9idWZmZXIoaW5zdC0+Y29yZS0+aWZhY2UsIGluc3QtPmlkLCBwdHIsDQo+ IHdyaXRlKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSBpbnQgdnB1X2lmYWNl X2dldF9zdHJlYW1fYnVmZmVyX2Rlc2Moc3RydWN0IHZwdV9pbnN0ICppbnN0LA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHZwdV9ycGNfYnVmZmVyX2Rl c2MNCj4gKmRlc2MpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2lmYWNlX29wcyAqb3Bz ID0gdnB1X2NvcmVfZ2V0X2lmYWNlKGluc3QtPmNvcmUpOw0KPiA+ICsNCj4gPiArICAgICBXQVJO X09OKGluc3QtPmlkIDwgMCk7DQo+ID4gKyAgICAgaWYgKCFvcHMgfHwgIW9wcy0+Z2V0X3N0cmVh bV9idWZmZXJfZGVzYykNCj4gPiArICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMOw0KPiA+ICsN Cj4gPiArICAgICBpZiAoIWRlc2MpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiAr DQo+ID4gKyAgICAgcmV0dXJuIG9wcy0+Z2V0X3N0cmVhbV9idWZmZXJfZGVzYyhpbnN0LT5jb3Jl LT5pZmFjZSwgaW5zdC0+aWQsIGRlc2MpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5s aW5lIHUzMiB2cHVfaWZhY2VfZ2V0X3ZlcnNpb24oc3RydWN0IHZwdV9jb3JlICpjb3JlKQ0KPiA+ ICt7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9pZmFjZV9vcHMgKm9wcyA9IHZwdV9jb3JlX2dldF9p ZmFjZShjb3JlKTsNCj4gPiArDQo+ID4gKyAgICAgaWYgKCFvcHMgfHwgIW9wcy0+Z2V0X3ZlcnNp b24pDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gMDsNCj4gPiArDQo+ID4gKyAgICAgcmV0dXJu IG9wcy0+Z2V0X3ZlcnNpb24oY29yZS0+aWZhY2UpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0 aWMgaW5saW5lIHUzMiB2cHVfaWZhY2VfZ2V0X21heF9pbnN0YW5jZV9jb3VudChzdHJ1Y3QgdnB1 X2NvcmUgKmNvcmUpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1Y3QgdnB1X2lmYWNlX29wcyAqb3Bz ID0gdnB1X2NvcmVfZ2V0X2lmYWNlKGNvcmUpOw0KPiA+ICsNCj4gPiArICAgICBpZiAoIW9wcyB8 fCAhb3BzLT5nZXRfbWF4X2luc3RhbmNlX2NvdW50KQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJu IDA7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiBvcHMtPmdldF9tYXhfaW5zdGFuY2VfY291bnQo Y29yZS0+aWZhY2UpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIGludCB2cHVf aWZhY2Vfc2V0X2VuY29kZV9wYXJhbXMoc3RydWN0IHZwdV9pbnN0ICppbnN0LA0KPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2cHVfZW5jb2RlX3BhcmFtcyAqcGFyYW1z LCB1MzINCj4gdXBkYXRlKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3RydWN0IHZwdV9pZmFjZV9vcHMg Km9wcyA9IHZwdV9jb3JlX2dldF9pZmFjZShpbnN0LT5jb3JlKTsNCj4gPiArDQo+ID4gKyAgICAg V0FSTl9PTihpbnN0LT5pZCA8IDApOw0KPiA+ICsgICAgIGlmICghb3BzIHx8ICFvcHMtPnNldF9l bmNvZGVfcGFyYW1zKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7DQo+ID4gKw0K PiA+ICsgICAgIHJldHVybiBvcHMtPnNldF9lbmNvZGVfcGFyYW1zKGluc3QtPmNvcmUtPmlmYWNl LCBpbnN0LT5pZCwgcGFyYW1zLA0KPiB1cGRhdGUpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0 aWMgaW5saW5lIGludCB2cHVfaWZhY2Vfc2V0X2RlY29kZV9wYXJhbXMoc3RydWN0IHZwdV9pbnN0 ICppbnN0LA0KPiA+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB2cHVfZGVj b2RlX3BhcmFtcyAqcGFyYW1zLCB1MzINCj4gdXBkYXRlKQ0KPiA+ICt7DQo+ID4gKyAgICAgc3Ry dWN0IHZwdV9pZmFjZV9vcHMgKm9wcyA9IHZwdV9jb3JlX2dldF9pZmFjZShpbnN0LT5jb3JlKTsN Cj4gPiArDQo+ID4gKyAgICAgV0FSTl9PTihpbnN0LT5pZCA8IDApOw0KPiA+ICsgICAgIGlmICgh b3BzIHx8ICFvcHMtPnNldF9kZWNvZGVfcGFyYW1zKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJu IC1FSU5WQUw7DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiBvcHMtPnNldF9kZWNvZGVfcGFyYW1z KGluc3QtPmNvcmUtPmlmYWNlLCBpbnN0LT5pZCwgcGFyYW1zLA0KPiB1cGRhdGUpOw0KPiA+ICt9 DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIGludCB2cHVfaWZhY2VfYWRkX3Njb2RlKHN0cnVj dCB2cHVfaW5zdCAqaW5zdCwgdTMyIHNjb2RlX3R5cGUpDQo+ID4gK3sNCj4gPiArICAgICBzdHJ1 Y3QgdnB1X2lmYWNlX29wcyAqb3BzID0gdnB1X2NvcmVfZ2V0X2lmYWNlKGluc3QtPmNvcmUpOw0K PiA+ICsNCj4gPiArICAgICBXQVJOX09OKGluc3QtPmlkIDwgMCk7DQo+ID4gKyAgICAgaWYgKCFv cHMgfHwgIW9wcy0+YWRkX3Njb2RlKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7 DQo+ID4gKw0KPiA+ICsgICAgIHJldHVybiBvcHMtPmFkZF9zY29kZShpbnN0LT5jb3JlLT5pZmFj ZSwgaW5zdC0+aWQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmluc3QtPnN0 cmVhbV9idWZmZXIsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5zdC0+b3V0 X2Zvcm1hdC5waXhmbXQsDQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NvZGVf dHlwZSk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgaW50IHZwdV9pZmFjZV9w cmVfc2VuZF9jbWQoc3RydWN0IHZwdV9pbnN0ICppbnN0KQ0KPiA+ICt7DQo+ID4gKyAgICAgc3Ry dWN0IHZwdV9pZmFjZV9vcHMgKm9wcyA9IHZwdV9jb3JlX2dldF9pZmFjZShpbnN0LT5jb3JlKTsN Cj4gPiArDQo+ID4gKyAgICAgV0FSTl9PTihpbnN0LT5pZCA8IDApOw0KPiA+ICsgICAgIGlmIChv cHMgJiYgb3BzLT5wcmVfc2VuZF9jbWQpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gb3BzLT5w cmVfc2VuZF9jbWQoaW5zdC0+Y29yZS0+aWZhY2UsIGluc3QtPmlkKTsNCj4gPiArICAgICByZXR1 cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGlubGluZSBpbnQgdnB1X2lmYWNlX3Bv c3Rfc2VuZF9jbWQoc3RydWN0IHZwdV9pbnN0ICppbnN0KQ0KPiA+ICt7DQo+ID4gKyAgICAgc3Ry dWN0IHZwdV9pZmFjZV9vcHMgKm9wcyA9IHZwdV9jb3JlX2dldF9pZmFjZShpbnN0LT5jb3JlKTsN Cj4gPiArDQo+ID4gKyAgICAgV0FSTl9PTihpbnN0LT5pZCA8IDApOw0KPiA+ICsgICAgIGlmIChv cHMgJiYgb3BzLT5wb3N0X3NlbmRfY21kKQ0KPiA+ICsgICAgICAgICAgICAgcmV0dXJuIG9wcy0+ cG9zdF9zZW5kX2NtZChpbnN0LT5jb3JlLT5pZmFjZSwgaW5zdC0+aWQpOw0KPiA+ICsgICAgIHJl dHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW5saW5lIGludCB2cHVfaWZhY2Vf aW5pdF9pbnN0YW5jZShzdHJ1Y3QgdnB1X2luc3QgKmluc3QpDQo+ID4gK3sNCj4gPiArICAgICBz dHJ1Y3QgdnB1X2lmYWNlX29wcyAqb3BzID0gdnB1X2NvcmVfZ2V0X2lmYWNlKGluc3QtPmNvcmUp Ow0KPiA+ICsNCj4gPiArICAgICBXQVJOX09OKGluc3QtPmlkIDwgMCk7DQo+ID4gKyAgICAgaWYg KG9wcyAmJiBvcHMtPmluaXRfaW5zdGFuY2UpDQo+ID4gKyAgICAgICAgICAgICByZXR1cm4gb3Bz LT5pbml0X2luc3RhbmNlKGluc3QtPmNvcmUtPmlmYWNlLCBpbnN0LT5pZCk7DQo+ID4gKw0KPiA+ ICsgICAgIHJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICsjZW5kaWYNCj4gPg0KDQo=