From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D6957C47409 for ; Thu, 6 Feb 2020 12:26:14 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 9E5AA21775 for ; Thu, 6 Feb 2020 12:26:14 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=nxp.com header.i=@nxp.com header.b="dmPlBcaP" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727993AbgBFM0N (ORCPT ); Thu, 6 Feb 2020 07:26:13 -0500 Received: from mail-vi1eur05on2041.outbound.protection.outlook.com ([40.107.21.41]:6147 "EHLO EUR05-VI1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726925AbgBFM0N (ORCPT ); Thu, 6 Feb 2020 07:26:13 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fM3B6/LmghJ2VHKCTibpwovNUtXkDPiR9j3Hoh3ANlO4Ea1Cc7CyImDZ99LSxotwX9oO0euKi37Xvc9eyLiis7WjXpa197QoyacI9fdyvjOVAYlHgTCp5E5x3J9lIEYO8avR9dGpL562/3bEpbrmZVE0aTIWOcNL4I/4K8M7jvDwuZT+SPDrItY3e16nn52Okw2WwXQunXUO/42JpLB+jUeH/DAgLMrfWBTBdGK8insZlmVsQ5yMTBlofd2u2H0PuTYAG58lnFYqBUn2wW8PGtY0IlWGCJL5+jJqVwO/IubF8WMGEVGXQBZCk7P+rSfiMJwe5ewCZsWy6hLzHpEFVQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Uzcg/Qx4uWE5TmMslyrU5wgEnULzT9L//kmlWmrOmrg=; b=Tt9TGZwNNvxt0TbTE2Sn111Yddv7xNGJOOiZE66+k3qx3Irou1Ai3M0EBck/MtHD0akSAmx8nfyaIfmv18BodvModitjjghGc7412TUtc/VMxOTRq+KCqPOzqVW6jTtza8YCDzha7TzyASFVedUXgfiUFmpE0Sw3nrSxSwJWa6uF62jGYoK9VdXlnsyZEjP6Bejh1mR9qsSkShVsNPLh9Ecv4v2vZNKbg0pUNCIY0sQbfWdSEEpkwc3wgotKreRT+znBypPEvfEPGBsu5NkhIplHhiE/JSWB5+OZOpMo3FPLwaauzUjQnTx28WGlIpYoUqHD/+0DSAQ08mRzphtNWw== 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=Uzcg/Qx4uWE5TmMslyrU5wgEnULzT9L//kmlWmrOmrg=; b=dmPlBcaPQCGvM9pvWKPQb/Uht49o6sV/0t2tyWCePBUwqG+6UYO5mlu/xhBbQp+JCT7Tb5j0gk2gcz16fQ8wbU5e2xM70zPNWKPYd2moDgzy577HsZNJpqJZyfz61EmmzqcfUpQ4TvBKBCiNFBir8Q8qERc6/2oAsYfZRYGe+/E= Received: from DB8PR04MB6747.eurprd04.prod.outlook.com (20.179.250.159) by DB8PR04MB7067.eurprd04.prod.outlook.com (52.135.62.80) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2707.21; Thu, 6 Feb 2020 12:25:59 +0000 Received: from DB8PR04MB6747.eurprd04.prod.outlook.com ([fe80::104b:e88b:b0d3:cdaa]) by DB8PR04MB6747.eurprd04.prod.outlook.com ([fe80::104b:e88b:b0d3:cdaa%4]) with mapi id 15.20.2686.035; Thu, 6 Feb 2020 12:25:59 +0000 From: "Z.q. Hou" To: Andrew Murray CC: "linux-pci@vger.kernel.org" , "linux-arm-kernel@lists.infradead.org" , "devicetree@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "bhelgaas@google.com" , "robh+dt@kernel.org" , "arnd@arndb.de" , "mark.rutland@arm.com" , "l.subrahmanya@mobiveil.co.in" , "shawnguo@kernel.org" , "m.karthikeyan@mobiveil.co.in" , Leo Li , "lorenzo.pieralisi@arm.com" , "catalin.marinas@arm.com" , "will.deacon@arm.com" , Mingkai Hu , "M.h. Lian" , Xiaowei Bao Subject: RE: [PATCHv9 04/12] PCI: mobiveil: Modularize the Mobiveil PCIe Host Bridge IP driver Thread-Topic: [PATCHv9 04/12] PCI: mobiveil: Modularize the Mobiveil PCIe Host Bridge IP driver Thread-Index: AQHVn1T8aFb5mY+RykmposxdjKSlyafoxCoAgCRaO/A= Date: Thu, 6 Feb 2020 12:25:59 +0000 Message-ID: References: <20191120034451.30102-1-Zhiqiang.Hou@nxp.com> <20191120034451.30102-5-Zhiqiang.Hou@nxp.com> <20200113110548.GJ42593@e119886-lin.cambridge.arm.com> In-Reply-To: <20200113110548.GJ42593@e119886-lin.cambridge.arm.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=zhiqiang.hou@nxp.com; x-originating-ip: [92.121.68.129] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 2177e398-59e9-4610-420a-08d7aaffb959 x-ms-traffictypediagnostic: DB8PR04MB7067:|DB8PR04MB7067: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:5236; x-forefront-prvs: 0305463112 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(4636009)(366004)(396003)(136003)(39860400002)(346002)(376002)(189003)(199004)(66476007)(81156014)(316002)(30864003)(8676002)(478600001)(54906003)(81166006)(66556008)(52536014)(5660300002)(7696005)(7416002)(66446008)(64756008)(33656002)(2906002)(66946007)(76116006)(9686003)(55016002)(6916009)(53546011)(6506007)(4326008)(26005)(86362001)(8936002)(186003)(71200400001)(559001)(579004);DIR:OUT;SFP:1101;SCL:1;SRVR:DB8PR04MB7067;H:DB8PR04MB6747.eurprd04.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: /M/f4du/cAPrIw5OPyTewk8fpTQfz0+NvO0m4zZs+RRGAYONnF3N3bs02pgJdh1ibkNjhW52AANaHbjP+GA4AkOZZ/vI7o/rJ80JYrBopPjRl8DWI/GQf/VaSoW3euoZxoA5odq7gDLK9T4UdLmS0nAySWjZip1R5RqLlRGklHFtu51Br330IWeuy41akh6G8+p1ovYobg6W0mI5pRhthUoPKSiTprcHXkoAl85ivfNbBMHZAmB6wEV36/jIf8b+uIpteNmQJLOorfV7hoGKw/XIedNOtySZ78Se+wOd3bSRk1Y8d2FhPSeShug3pVDLn25xBE4xy/spQ8If+ajSkZIFbAIZ/VDurVJJzRIEXlnUXjjMR5c1GDtmEFkXWk2RXwsiSq3lqGO5PeCLoquCkTMYwb9qJ0WSQ6c28WYYTsE/i5eV9jfNYI4RO6P3/G1I x-ms-exchange-antispam-messagedata: GhGIsyXR4BcaROJQC3ztr00zLYiNfaDxXfhyyesOwi7CH1QTWmd+EZh/b4S5lbBK4qRiyCm6uAH0ZP5IFZEAyQXEXbJTlDGBJwRzI91aMF/DX3TYC1WGffciu5f6WABKFOeErGa+scf/wcZuokV3lQ== Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2177e398-59e9-4610-420a-08d7aaffb959 X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Feb 2020 12:25:59.7952 (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: L3Icq06zaYThh4lAn1AV1fYZADSrvvyYxIesrJVHnkiF/eH9iXtQtPl+MOy5Xngt+QT/Grv/bN3E8VjErujrmw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB7067 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgQW5kcmV3LA0KDQpUaGFua3MgYSBsb3QgZm9yIHlvdXIgcmV2aWV3IQ0KDQpCLlIsDQpaaGlx aWFuZw0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEFuZHJldyBNdXJy YXkgPGFuZHJldy5tdXJyYXlAYXJtLmNvbT4NCj4gU2VudDogMjAyMMTqMdTCMTPI1SAxOTowNg0K PiBUbzogWi5xLiBIb3UgPHpoaXFpYW5nLmhvdUBueHAuY29tPg0KPiBDYzogbGludXgtcGNpQHZn ZXIua2VybmVsLm9yZzsgbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnOw0KPiBk ZXZpY2V0cmVlQHZnZXIua2VybmVsLm9yZzsgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsN Cj4gYmhlbGdhYXNAZ29vZ2xlLmNvbTsgcm9iaCtkdEBrZXJuZWwub3JnOyBhcm5kQGFybmRiLmRl Ow0KPiBtYXJrLnJ1dGxhbmRAYXJtLmNvbTsgbC5zdWJyYWhtYW55YUBtb2JpdmVpbC5jby5pbjsN Cj4gc2hhd25ndW9Aa2VybmVsLm9yZzsgbS5rYXJ0aGlrZXlhbkBtb2JpdmVpbC5jby5pbjsgTGVv IExpDQo+IDxsZW95YW5nLmxpQG54cC5jb20+OyBsb3JlbnpvLnBpZXJhbGlzaUBhcm0uY29tOw0K PiBjYXRhbGluLm1hcmluYXNAYXJtLmNvbTsgd2lsbC5kZWFjb25AYXJtLmNvbTsgTWluZ2thaSBI dQ0KPiA8bWluZ2thaS5odUBueHAuY29tPjsgTS5oLiBMaWFuIDxtaW5naHVhbi5saWFuQG54cC5j b20+OyBYaWFvd2VpIEJhbw0KPiA8eGlhb3dlaS5iYW9AbnhwLmNvbT4NCj4gU3ViamVjdDogUmU6 IFtQQVRDSHY5IDA0LzEyXSBQQ0k6IG1vYml2ZWlsOiBNb2R1bGFyaXplIHRoZSBNb2JpdmVpbCBQ Q0llDQo+IEhvc3QgQnJpZGdlIElQIGRyaXZlcg0KPiANCj4gT24gV2VkLCBOb3YgMjAsIDIwMTkg YXQgMDM6NDU6NDNBTSArMDAwMCwgWi5xLiBIb3Ugd3JvdGU6DQo+ID4gRnJvbTogSG91IFpoaXFp YW5nIDxaaGlxaWFuZy5Ib3VAbnhwLmNvbT4NCj4gPg0KPiA+IE1vZHVsYXJpemUgdGhlIE1vYml2 ZWlsIFBDSWUgaG9zdCBkcml2ZXIgYWNjb3JkaW5nIHRvIHRoZSBhYnN0cmFjdGlvbg0KPiA+IG9m IFJvb3QgQ29tcGxleCBhbmQgRW5kcG9pbnQgYW5kIG1vdmUgaXQgaW50byBhIG5ldyBkaXJlY3Rv cnkuDQo+ID4NCj4gPiBTcGxpdCB0aGUgUkMgcmVsYXRlZCByb3V0aW5lcyBpbnRvIHBjaWUtbW9i aXZlaWwtaG9zdC5jLCBhbmQgY29tbW9uDQo+ID4gcm91dGluZXMgaW50byBwY2llLW1vYml2ZWls LmMsIG1vdmUgdGhlIG1hY3JvIGRlZmluaXRpb25zIGFuZCBmdW5jdGlvbg0KPiA+IGRlY2xhcmF0 aW9ucyBpbnRvIHBjaWUtbW9iaXZlaWwuaCwgYW5kIHRoZSBNb2JpdmVpbCBwbGF0Zm9ybSByZWZl cmVuY2UNCj4gPiBjb2RlIGludG8gcGNpZS1tb2JpdmVpbC1wbGF0LmMuIFNvIHRoYXQgaXQgaXMg ZWFzeSB0byByZXVzZSB0aGUNCj4gPiBleHRyYWN0ZWQgcm91dGluZXMgdG8gYWRkIGEgbmV3IGhv c3QgZHJpdmVyLCB3aGljaCBpbnRlZ3JhdGVkIE1vYml2ZWlsDQo+ID4gUENJZSBHUEVYIElQLg0K PiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogSG91IFpoaXFpYW5nIDxaaGlxaWFuZy5Ib3VAbnhwLmNv bT4NCj4gDQo+IFJldmlld2VkLWJ5OiBBbmRyZXcgTXVycmF5IDxhbmRyZXcubXVycmF5QGFybS5j b20+DQo+IA0KPiA+IC0tLQ0KPiA+IFY5Og0KPiA+ICAtIE5ldyBwYXRjaCBzcGxpdGVkIGZyb20g dGhlICMxIG9mIFY4IHBhdGNoZXMgdG8gbWFrZSBpdCBlYXN5IHRvIHJldmlldy4NCj4gPg0KPiA+ ICBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0N Cj4gPiAgZHJpdmVycy9wY2kvY29udHJvbGxlci9LY29uZmlnICAgICAgICAgICAgICAgIHwgIDEx ICstDQo+ID4gIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvTWFrZWZpbGUgICAgICAgICAgICAgICB8 ICAgMiArLQ0KPiA+ICBkcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL0tjb25maWcgICAg ICAgfCAgMjQgKysNCj4gPiAgZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9NYWtlZmls ZSAgICAgIHwgICA0ICsNCj4gPiAgLi4uL3BjaWUtbW9iaXZlaWwtaG9zdC5jfSAgICAgICAgICAg ICAgICAgICAgIHwgMzk4ICstLS0tLS0tLS0tLS0tLS0tLQ0KPiA+ICAuLi4vY29udHJvbGxlci9t b2JpdmVpbC9wY2llLW1vYml2ZWlsLXBsYXQuYyAgfCAgNjAgKysrDQo+ID4gIC4uLi9wY2kvY29u dHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLmMgICB8IDIyNyArKysrKysrKysrDQo+ID4g IC4uLi9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLmggICB8IDE3OCArKysr KysrKw0KPiA+ICA5IGZpbGVzIGNoYW5nZWQsIDQ5NyBpbnNlcnRpb25zKCspLCA0MDkgZGVsZXRp b25zKC0pICBjcmVhdGUgbW9kZQ0KPiA+IDEwMDY0NCBkcml2ZXJzL3BjaS9jb250cm9sbGVyL21v Yml2ZWlsL0tjb25maWcNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvcGNpL2NvbnRy b2xsZXIvbW9iaXZlaWwvTWFrZWZpbGUNCj4gPiAgcmVuYW1lIGRyaXZlcnMvcGNpL2NvbnRyb2xs ZXIve3BjaWUtbW9iaXZlaWwuYyA9Pg0KPiA+IG1vYml2ZWlsL3BjaWUtbW9iaXZlaWwtaG9zdC5j fSAoNjElKSAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+ID4gZHJpdmVycy9wY2kvY29udHJvbGxlci9t b2JpdmVpbC9wY2llLW1vYml2ZWlsLXBsYXQuYw0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLmMNCj4gPiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1tb2JpdmVp bC5oDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUyBpbmRl eA0KPiA+IDNmN2Y4Y2RiYzQ3MS4uYTRhZDk5NjE5ZTUzIDEwMDY0NA0KPiA+IC0tLSBhL01BSU5U QUlORVJTDQo+ID4gKysrIGIvTUFJTlRBSU5FUlMNCj4gPiBAQCAtMTI2MTIsNyArMTI2MTIsNyBA QCBNOglIb3UgWmhpcWlhbmcNCj4gPFpoaXFpYW5nLkhvdUBueHAuY29tPg0KPiA+ICBMOglsaW51 eC1wY2lAdmdlci5rZXJuZWwub3JnDQo+ID4gIFM6CVN1cHBvcnRlZA0KPiA+ICBGOglEb2N1bWVu dGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGNpL21vYml2ZWlsLXBjaWUudHh0DQo+ID4gLUY6 CWRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1tb2JpdmVpbC5jDQo+ID4gK0Y6CWRyaXZlcnMv cGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1tb2JpdmVpbCoNCj4gPg0KPiA+ICBQQ0kgRFJJ VkVSIEZPUiBNVkVCVSAoTWFydmVsbCBBcm1hZGEgMzcwIGFuZCBBcm1hZGEgWFAgU09DDQo+IHN1 cHBvcnQpDQo+ID4gIE06CVRob21hcyBQZXRhenpvbmkgPHRob21hcy5wZXRhenpvbmlAYm9vdGxp bi5jb20+DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvS2NvbmZpZw0K PiA+IGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9LY29uZmlnIGluZGV4IGY1ZGU5MTE5ZThkMy4u NzRmZDMzMjc1NWFlDQo+ID4gMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9wY2kvY29udHJvbGxl ci9LY29uZmlnDQo+ID4gKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9LY29uZmlnDQo+ID4g QEAgLTI0MSwxNiArMjQxLDYgQEAgY29uZmlnIFBDSUVfTUVESUFURUsNCj4gPiAgCSAgU2F5IFkg aGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgUENJZSBjb250cm9sbGVyIHN1cHBvcnQgb24NCj4g PiAgCSAgTWVkaWFUZWsgU29Dcy4NCj4gPg0KPiA+IC1jb25maWcgUENJRV9NT0JJVkVJTA0KPiA+ IC0JYm9vbCAiTW9iaXZlaWwgQVhJIFBDSWUgY29udHJvbGxlciINCj4gPiAtCWRlcGVuZHMgb24g QVJDSF9aWU5RTVAgfHwgQ09NUElMRV9URVNUDQo+ID4gLQlkZXBlbmRzIG9uIE9GDQo+ID4gLQlk ZXBlbmRzIG9uIFBDSV9NU0lfSVJRX0RPTUFJTg0KPiA+IC0JaGVscA0KPiA+IC0JICBTYXkgWSBo ZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgTW9iaXZlaWwgQVhJIFBD SWUNCj4gPiAtCSAgU29mdCBJUC4gSXQgaGFzIHVwIHRvIDggb3V0Ym91bmQgYW5kIGluYm91bmQg d2luZG93cw0KPiA+IC0JICBmb3IgYWRkcmVzcyB0cmFuc2xhdGlvbiBhbmQgaXQgaXMgYSBQQ0ll IEdlbjQgSVAuDQo+ID4gLQ0KPiA+ICBjb25maWcgUENJRV9UQU5HT19TTVA4NzU5DQo+ID4gIAli b29sICJUYW5nbyBTTVA4NzU5IFBDSWUgY29udHJvbGxlciAoREFOR0VST1VTKSINCj4gPiAgCWRl cGVuZHMgb24gQVJDSF9UQU5HTyAmJiBQQ0lfTVNJICYmIE9GIEBAIC0yODksNCArMjc5LDUgQEAN Cj4gY29uZmlnDQo+ID4gUENJX0hZUEVSVl9JTlRFUkZBQ0UNCj4gPiAgCSAgaGF2ZSBhIGNvbW1v biBpbnRlcmZhY2Ugd2l0aCB0aGUgSHlwZXItViBQQ0kgZnJvbnRlbmQgZHJpdmVyLg0KPiA+DQo+ ID4gIHNvdXJjZSAiZHJpdmVycy9wY2kvY29udHJvbGxlci9kd2MvS2NvbmZpZyINCj4gPiArc291 cmNlICJkcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL0tjb25maWciDQo+ID4gIGVuZG1l bnUNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9NYWtlZmlsZQ0KPiA+ IGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9NYWtlZmlsZSBpbmRleCBhMmEyMmM5ZDkxYWYuLjQ0 NDE0Y2ZkNDVlYQ0KPiA+IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIv TWFrZWZpbGUNCj4gPiArKysgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL01ha2VmaWxlDQo+ID4g QEAgLTI3LDExICsyNywxMSBAQCBvYmotJChDT05GSUdfUENJRV9ST0NLQ0hJUCkgKz0gcGNpZS1y b2NrY2hpcC5vDQo+ID4gIG9iai0kKENPTkZJR19QQ0lFX1JPQ0tDSElQX0VQKSArPSBwY2llLXJv Y2tjaGlwLWVwLm8NCj4gPiAgb2JqLSQoQ09ORklHX1BDSUVfUk9DS0NISVBfSE9TVCkgKz0gcGNp ZS1yb2NrY2hpcC1ob3N0Lm8NCj4gPiAgb2JqLSQoQ09ORklHX1BDSUVfTUVESUFURUspICs9IHBj aWUtbWVkaWF0ZWsubw0KPiA+IC1vYmotJChDT05GSUdfUENJRV9NT0JJVkVJTCkgKz0gcGNpZS1t b2JpdmVpbC5vDQo+ID4gIG9iai0kKENPTkZJR19QQ0lFX1RBTkdPX1NNUDg3NTkpICs9IHBjaWUt dGFuZ28ubw0KPiA+ICBvYmotJChDT05GSUdfVk1EKSArPSB2bWQubw0KPiA+ICAjIHBjaWUtaGlz aS5vIHF1aXJrcyBhcmUgbmVlZGVkIGV2ZW4gd2l0aG91dCBDT05GSUdfUENJRV9EVw0KPiA+ICBv YmoteQkJCQkrPSBkd2MvDQo+ID4gK29iai15CQkJCSs9IG1vYml2ZWlsLw0KPiA+DQo+ID4NCj4g PiAgIyBUaGUgZm9sbG93aW5nIGRyaXZlcnMgYXJlIGZvciBkZXZpY2VzIHRoYXQgdXNlIHRoZSBn ZW5lcmljIEFDUEkNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2Jp dmVpbC9LY29uZmlnDQo+ID4gYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL0tjb25m aWcNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uNjQz NDNjMDdiZmVkDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvcGNpL2NvbnRy b2xsZXIvbW9iaXZlaWwvS2NvbmZpZw0KPiA+IEBAIC0wLDAgKzEsMjQgQEANCj4gPiArIyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPiA+ICsNCj4gPiArbWVudSAiTW9iaXZlaWwg UENJZSBDb3JlIFN1cHBvcnQiDQo+ID4gKwlkZXBlbmRzIG9uIFBDSQ0KPiA+ICsNCj4gPiArY29u ZmlnIFBDSUVfTU9CSVZFSUwNCj4gPiArCWJvb2wNCj4gPiArDQo+ID4gK2NvbmZpZyBQQ0lFX01P QklWRUlMX0hPU1QNCj4gPiArCWJvb2wNCj4gPiArCWRlcGVuZHMgb24gUENJX01TSV9JUlFfRE9N QUlODQo+ID4gKwlzZWxlY3QgUENJRV9NT0JJVkVJTA0KPiA+ICsNCj4gPiArY29uZmlnIFBDSUVf TU9CSVZFSUxfUExBVA0KPiA+ICsJYm9vbCAiTW9iaXZlaWwgQVhJIFBDSWUgY29udHJvbGxlciIN Cj4gPiArCWRlcGVuZHMgb24gQVJDSF9aWU5RTVAgfHwgQ09NUElMRV9URVNUDQo+ID4gKwlkZXBl bmRzIG9uIE9GDQo+ID4gKwlzZWxlY3QgUENJRV9NT0JJVkVJTF9IT1NUDQo+ID4gKwloZWxwDQo+ ID4gKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBN b2JpdmVpbCBBWEkgUENJZQ0KPiA+ICsJICBTb2Z0IElQLiBJdCBoYXMgdXAgdG8gOCBvdXRib3Vu ZCBhbmQgaW5ib3VuZCB3aW5kb3dzDQo+ID4gKwkgIGZvciBhZGRyZXNzIHRyYW5zbGF0aW9uIGFu ZCBpdCBpcyBhIFBDSWUgR2VuNCBJUC4NCj4gPiArDQo+ID4gK2VuZG1lbnUNCj4gPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9NYWtlZmlsZQ0KPiA+IGIvZHJp dmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9NYWtlZmlsZQ0KPiA+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi45ZmI2ZDFjNjUwNGQNCj4gPiAtLS0gL2Rl di9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9NYWtlZmls ZQ0KPiA+IEBAIC0wLDAgKzEsNCBAQA0KPiA+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wDQo+ID4gK29iai0kKENPTkZJR19QQ0lFX01PQklWRUlMKSArPSBwY2llLW1vYml2ZWls Lm8NCj4gPiArb2JqLSQoQ09ORklHX1BDSUVfTU9CSVZFSUxfSE9TVCkgKz0gcGNpZS1tb2JpdmVp bC1ob3N0Lm8NCj4gPiArb2JqLSQoQ09ORklHX1BDSUVfTU9CSVZFSUxfUExBVCkgKz0gcGNpZS1t b2JpdmVpbC1wbGF0Lm8NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9w Y2llLW1vYml2ZWlsLmMNCj4gPiBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNp ZS1tb2JpdmVpbC1ob3N0LmMNCj4gPiBzaW1pbGFyaXR5IGluZGV4IDYxJQ0KPiA+IHJlbmFtZSBm cm9tIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1tb2JpdmVpbC5jDQo+ID4gcmVuYW1lIHRv IGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1tb2JpdmVpbC1ob3N0LmMNCj4g PiBpbmRleCA1MTJiMjdhMDUzNmUuLjJjYzQyNGU3OGQzMyAxMDA2NDQNCj4gPiAtLS0gYS9kcml2 ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtbW9iaXZlaWwuYw0KPiA+ICsrKyBiL2RyaXZlcnMvcGNp L2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1tb2JpdmVpbC1ob3N0LmMNCj4gPiBAQCAtOSw3ICs5 LDYgQEANCj4gPiAgICogUmVjb2RlOiBIb3UgWmhpcWlhbmcgPFpoaXFpYW5nLkhvdUBueHAuY29t Pg0KPiA+ICAgKi8NCj4gPg0KPiA+IC0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4NCj4gPiAgI2lu Y2x1ZGUgPGxpbnV4L2luaXQuaD4NCj4gPiAgI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPg0K PiA+ICAjaW5jbHVkZSA8bGludXgvaXJxLmg+DQo+ID4gQEAgLTI2LDI2NSArMjUsNyBAQA0KPiA+ ICAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+ID4gICNpbmNsdWRlIDxsaW51 eC9zbGFiLmg+DQo+ID4NCj4gPiAtI2luY2x1ZGUgIi4uL3BjaS5oIg0KPiA+IC0NCj4gPiAtLyog cmVnaXN0ZXIgb2Zmc2V0cyBhbmQgYml0IHBvc2l0aW9ucyAqLw0KPiA+IC0NCj4gPiAtLyoNCj4g PiAtICogdHJhbnNsYXRpb24gdGFibGVzIGFyZSBncm91cGVkIGludG8gd2luZG93cywgZWFjaCB3 aW5kb3cgcmVnaXN0ZXJzDQo+ID4gYXJlDQo+ID4gLSAqIGdyb3VwZWQgaW50byBibG9ja3Mgb2Yg NCBvciAxNiByZWdpc3RlcnMgZWFjaA0KPiA+IC0gKi8NCj4gPiAtI2RlZmluZSBQQUJfUkVHX0JM T0NLX1NJWkUJCTE2DQo+ID4gLSNkZWZpbmUgUEFCX0VYVF9SRUdfQkxPQ0tfU0laRQkJNA0KPiA+ IC0NCj4gPiAtI2RlZmluZSBQQUJfUkVHX0FERFIob2Zmc2V0LCB3aW4pCVwNCj4gPiAtCShvZmZz ZXQgKyAod2luICogUEFCX1JFR19CTE9DS19TSVpFKSkNCj4gPiAtI2RlZmluZSBQQUJfRVhUX1JF R19BRERSKG9mZnNldCwgd2luKQlcDQo+ID4gLQkob2Zmc2V0ICsgKHdpbiAqIFBBQl9FWFRfUkVH X0JMT0NLX1NJWkUpKQ0KPiA+IC0NCj4gPiAtI2RlZmluZSBMVFNTTV9TVEFUVVMJCQkweDA0MDQN Cj4gPiAtI2RlZmluZSAgTFRTU01fU1RBVFVTX0wwX01BU0sJCTB4M2YNCj4gPiAtI2RlZmluZSAg TFRTU01fU1RBVFVTX0wwCQkweDJkDQo+ID4gLQ0KPiA+IC0jZGVmaW5lIFBBQl9DVFJMCQkJMHgw ODA4DQo+ID4gLSNkZWZpbmUgIEFNQkFfUElPX0VOQUJMRV9TSElGVAkJMA0KPiA+IC0jZGVmaW5l ICBQRVhfUElPX0VOQUJMRV9TSElGVAkJMQ0KPiA+IC0jZGVmaW5lICBQQUdFX1NFTF9TSElGVAkJ CTEzDQo+ID4gLSNkZWZpbmUgIFBBR0VfU0VMX01BU0sJCQkweDNmDQo+ID4gLSNkZWZpbmUgIFBB R0VfTE9fTUFTSwkJCTB4M2ZmDQo+ID4gLSNkZWZpbmUgIFBBR0VfU0VMX09GRlNFVF9TSElGVAkJ MTANCj4gPiAtDQo+ID4gLSNkZWZpbmUgUEFCX0FYSV9QSU9fQ1RSTAkJMHgwODQwDQo+ID4gLSNk ZWZpbmUgIEFQSU9fRU5fTUFTSwkJCTB4Zg0KPiA+IC0NCj4gPiAtI2RlZmluZSBQQUJfUEVYX1BJ T19DVFJMCQkweDA4YzANCj4gPiAtI2RlZmluZSAgUElPX0VOQUJMRV9TSElGVAkJMA0KPiA+IC0N Cj4gPiAtI2RlZmluZSBQQUJfSU5UUF9BTUJBX01JU0NfRU5CCQkweDBiMGMNCj4gPiAtI2RlZmlu ZSBQQUJfSU5UUF9BTUJBX01JU0NfU1RBVAkJMHgwYjFjDQo+ID4gLSNkZWZpbmUgIFBBQl9JTlRQ X0lOVFhfTUFTSwkJMHgwMWUwDQo+ID4gLSNkZWZpbmUgIFBBQl9JTlRQX01TSV9NQVNLCQkweDgN Cj4gPiAtDQo+ID4gLSNkZWZpbmUgUEFCX0FYSV9BTUFQX0NUUkwod2luKQkJUEFCX1JFR19BRERS KDB4MGJhMCwgd2luKQ0KPiA+IC0jZGVmaW5lICBXSU5fRU5BQkxFX1NISUZUCQkwDQo+ID4gLSNk ZWZpbmUgIFdJTl9UWVBFX1NISUZUCQkJMQ0KPiA+IC0jZGVmaW5lICBXSU5fVFlQRV9NQVNLCQkJ MHgzDQo+ID4gLSNkZWZpbmUgIFdJTl9TSVpFX01BU0sJCQkweGZmZmZmYzAwDQo+ID4gLQ0KPiA+ IC0jZGVmaW5lIFBBQl9FWFRfQVhJX0FNQVBfU0laRSh3aW4pCVBBQl9FWFRfUkVHX0FERFIoMHhi YWYwLA0KPiB3aW4pDQo+ID4gLQ0KPiA+IC0jZGVmaW5lIFBBQl9FWFRfQVhJX0FNQVBfQVhJX1dJ Tih3aW4pDQo+IAlQQUJfRVhUX1JFR19BRERSKDB4ODBhMCwgd2luKQ0KPiA+IC0jZGVmaW5lIFBB Ql9BWElfQU1BUF9BWElfV0lOKHdpbikJUEFCX1JFR19BRERSKDB4MGJhNCwgd2luKQ0KPiA+IC0j ZGVmaW5lICBBWElfV0lORE9XX0FMSUdOX01BU0sJCTMNCj4gPiAtDQo+ID4gLSNkZWZpbmUgUEFC X0FYSV9BTUFQX1BFWF9XSU5fTCh3aW4pCVBBQl9SRUdfQUREUigweDBiYTgsDQo+IHdpbikNCj4g PiAtI2RlZmluZSAgUEFCX0JVU19TSElGVAkJCTI0DQo+ID4gLSNkZWZpbmUgIFBBQl9ERVZJQ0Vf U0hJRlQJCTE5DQo+ID4gLSNkZWZpbmUgIFBBQl9GVU5DVElPTl9TSElGVAkJMTYNCj4gPiAtDQo+ ID4gLSNkZWZpbmUgUEFCX0FYSV9BTUFQX1BFWF9XSU5fSCh3aW4pCVBBQl9SRUdfQUREUigweDBi YWMsDQo+IHdpbikNCj4gPiAtI2RlZmluZSBQQUJfSU5UUF9BWElfUElPX0NMQVNTCQkweDQ3NA0K PiA+IC0NCj4gPiAtI2RlZmluZSBQQUJfUEVYX0FNQVBfQ1RSTCh3aW4pCQlQQUJfUkVHX0FERFIo MHg0YmEwLCB3aW4pDQo+ID4gLSNkZWZpbmUgIEFNQVBfQ1RSTF9FTl9TSElGVAkJMA0KPiA+IC0j ZGVmaW5lICBBTUFQX0NUUkxfVFlQRV9TSElGVAkJMQ0KPiA+IC0jZGVmaW5lICBBTUFQX0NUUkxf VFlQRV9NQVNLCQkzDQo+ID4gLQ0KPiA+IC0jZGVmaW5lIFBBQl9FWFRfUEVYX0FNQVBfU0laRU4o d2luKQlQQUJfRVhUX1JFR19BRERSKDB4YmVmMCwNCj4gd2luKQ0KPiA+IC0jZGVmaW5lIFBBQl9F WFRfUEVYX0FNQVBfQVhJX1dJTih3aW4pDQo+IAlQQUJfRVhUX1JFR19BRERSKDB4YjRhMCwgd2lu KQ0KPiA+IC0jZGVmaW5lIFBBQl9QRVhfQU1BUF9BWElfV0lOKHdpbikJUEFCX1JFR19BRERSKDB4 NGJhNCwgd2luKQ0KPiA+IC0jZGVmaW5lIFBBQl9QRVhfQU1BUF9QRVhfV0lOX0wod2luKQlQQUJf UkVHX0FERFIoMHg0YmE4LA0KPiB3aW4pDQo+ID4gLSNkZWZpbmUgUEFCX1BFWF9BTUFQX1BFWF9X SU5fSCh3aW4pCVBBQl9SRUdfQUREUigweDRiYWMsDQo+IHdpbikNCj4gPiAtDQo+ID4gLS8qIHN0 YXJ0aW5nIG9mZnNldCBvZiBJTlRYIGJpdHMgaW4gc3RhdHVzIHJlZ2lzdGVyICovDQo+ID4gLSNk ZWZpbmUgUEFCX0lOVFhfU1RBUlQJCQk1DQo+ID4gLQ0KPiA+IC0vKiBzdXBwb3J0ZWQgbnVtYmVy IG9mIE1TSSBpbnRlcnJ1cHRzICovDQo+ID4gLSNkZWZpbmUgUENJX05VTV9NU0kJCQkxNg0KPiA+ IC0NCj4gPiAtLyogTVNJIHJlZ2lzdGVycyAqLw0KPiA+IC0jZGVmaW5lIE1TSV9CQVNFX0xPX09G RlNFVAkJMHgwNA0KPiA+IC0jZGVmaW5lIE1TSV9CQVNFX0hJX09GRlNFVAkJMHgwOA0KPiA+IC0j ZGVmaW5lIE1TSV9TSVpFX09GRlNFVAkJCTB4MGMNCj4gPiAtI2RlZmluZSBNU0lfRU5BQkxFX09G RlNFVAkJMHgxNA0KPiA+IC0jZGVmaW5lIE1TSV9TVEFUVVNfT0ZGU0VUCQkweDE4DQo+ID4gLSNk ZWZpbmUgTVNJX0RBVEFfT0ZGU0VUCQkJMHgyMA0KPiA+IC0jZGVmaW5lIE1TSV9BRERSX0xfT0ZG U0VUCQkweDI0DQo+ID4gLSNkZWZpbmUgTVNJX0FERFJfSF9PRkZTRVQJCTB4MjgNCj4gPiAtDQo+ ID4gLS8qIG91dGJvdW5kIGFuZCBpbmJvdW5kIHdpbmRvdyBkZWZpbml0aW9ucyAqLw0KPiA+IC0j ZGVmaW5lIFdJTl9OVU1fMAkJCTANCj4gPiAtI2RlZmluZSBXSU5fTlVNXzEJCQkxDQo+ID4gLSNk ZWZpbmUgQ0ZHX1dJTkRPV19UWVBFCQkJMA0KPiA+IC0jZGVmaW5lIElPX1dJTkRPV19UWVBFCQkJ MQ0KPiA+IC0jZGVmaW5lIE1FTV9XSU5ET1dfVFlQRQkJCTINCj4gPiAtI2RlZmluZSBJQl9XSU5f U0laRQkJCSgodTY0KTI1NiAqIDEwMjQgKiAxMDI0ICogMTAyNCkNCj4gPiAtI2RlZmluZSBNQVhf UElPX1dJTkRPV1MJCQk4DQo+ID4gLQ0KPiA+IC0vKiBQYXJhbWV0ZXJzIGZvciB0aGUgd2FpdGlu ZyBmb3IgbGluayB1cCByb3V0aW5lICovDQo+ID4gLSNkZWZpbmUgTElOS19XQUlUX01BWF9SRVRS SUVTCQkxMA0KPiA+IC0jZGVmaW5lIExJTktfV0FJVF9NSU4JCQk5MDAwMA0KPiA+IC0jZGVmaW5l IExJTktfV0FJVF9NQVgJCQkxMDAwMDANCj4gPiAtDQo+ID4gLSNkZWZpbmUgUEFHRURfQUREUl9C TkRSWQkJMHhjMDANCj4gPiAtI2RlZmluZSBPRkZTRVRfVE9fUEFHRV9BRERSKG9mZikJXA0KPiA+ IC0JKChvZmYgJiBQQUdFX0xPX01BU0spIHwgUEFHRURfQUREUl9CTkRSWSkNCj4gPiAtI2RlZmlu ZSBPRkZTRVRfVE9fUEFHRV9JRFgob2ZmKQkJXA0KPiA+IC0JKChvZmYgPj4gUEFHRV9TRUxfT0ZG U0VUX1NISUZUKSAmIFBBR0VfU0VMX01BU0spDQo+ID4gLQ0KPiA+IC1zdHJ1Y3QgbW9iaXZlaWxf bXNpIHsJCQkvKiBNU0kgaW5mb3JtYXRpb24gKi8NCj4gPiAtCXN0cnVjdCBtdXRleCBsb2NrOwkJ LyogcHJvdGVjdCBiaXRtYXAgdmFyaWFibGUgKi8NCj4gPiAtCXN0cnVjdCBpcnFfZG9tYWluICpt c2lfZG9tYWluOw0KPiA+IC0Jc3RydWN0IGlycV9kb21haW4gKmRldl9kb21haW47DQo+ID4gLQlw aHlzX2FkZHJfdCBtc2lfcGFnZXNfcGh5czsNCj4gPiAtCWludCBudW1fb2ZfdmVjdG9yczsNCj4g PiAtCURFQ0xBUkVfQklUTUFQKG1zaV9pcnFfaW5fdXNlLCBQQ0lfTlVNX01TSSk7DQo+ID4gLX07 DQo+ID4gLQ0KPiA+IC1zdHJ1Y3Qgcm9vdF9wb3J0IHsNCj4gPiAtCWNoYXIgcm9vdF9idXNfbnI7 DQo+ID4gLQl2b2lkIF9faW9tZW0gKmNvbmZpZ19heGlfc2xhdmVfYmFzZTsJLyogZW5kcG9pbnQg Y29uZmlnIGJhc2UgKi8NCj4gPiAtCXN0cnVjdCByZXNvdXJjZSAqb2JfaW9fcmVzOw0KPiA+IC0J aW50IGlycTsNCj4gPiAtCXJhd19zcGlubG9ja190IGludHhfbWFza19sb2NrOw0KPiA+IC0Jc3Ry dWN0IGlycV9kb21haW4gKmludHhfZG9tYWluOw0KPiA+IC0Jc3RydWN0IG1vYml2ZWlsX21zaSBt c2k7DQo+ID4gLQlzdHJ1Y3QgcGNpX2hvc3RfYnJpZGdlICpicmlkZ2U7DQo+ID4gLX07DQo+ID4g LQ0KPiA+IC1zdHJ1Y3QgbW9iaXZlaWxfcGNpZSB7DQo+ID4gLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2Ow0KPiA+IC0Jdm9pZCBfX2lvbWVtICpjc3JfYXhpX3NsYXZlX2Jhc2U7CS8qIHJv b3QgcG9ydCBjb25maWcgYmFzZSAqLw0KPiA+IC0Jdm9pZCBfX2lvbWVtICphcGJfY3NyX2Jhc2U7 CS8qIE1TSSByZWdpc3RlciBiYXNlICovDQo+ID4gLQlwaHlzX2FkZHJfdCBwY2llX3JlZ19iYXNl OwkvKiBQaHlzaWNhbCBQQ0llIENvbnRyb2xsZXIgQmFzZSAqLw0KPiA+IC0JaW50IGFwaW9fd2lu czsNCj4gPiAtCWludCBwcGlvX3dpbnM7DQo+ID4gLQlpbnQgb2Jfd2luc19jb25maWd1cmVkOwkJ LyogY29uZmlndXJlZCBvdXRib3VuZCB3aW5kb3dzICovDQo+ID4gLQlpbnQgaWJfd2luc19jb25m aWd1cmVkOwkJLyogY29uZmlndXJlZCBpbmJvdW5kIHdpbmRvd3MgKi8NCj4gPiAtCXN0cnVjdCBy b290X3BvcnQgcnA7DQo+ID4gLX07DQo+ID4gLQ0KPiA+IC0vKg0KPiA+IC0gKiBtb2JpdmVpbF9w Y2llX3NlbF9wYWdlIC0gcm91dGluZSB0byBhY2Nlc3MgcGFnZWQgcmVnaXN0ZXINCj4gPiAtICoN Cj4gPiAtICogUmVnaXN0ZXJzIHdob3NlIGFkZHJlc3MgZ3JlYXRlciB0aGFuIFBBR0VEX0FERFJf Qk5EUlkgKDB4YzAwKSBhcmUNCj4gPiBwYWdlZCwNCj4gPiAtICogZm9yIHRoaXMgc2NoZW1lIHRv IHdvcmsgZXh0cmFjdGVkIGhpZ2hlciA2IGJpdHMgb2YgdGhlIG9mZnNldCB3aWxsDQo+ID4gYmUN Cj4gPiAtICogd3JpdHRlbiB0byBwZ19zZWwgZmllbGQgb2YgUEFCX0NUUkwgcmVnaXN0ZXIgYW5k IHJlc3Qgb2YgdGhlIGxvd2VyDQo+ID4gMTANCj4gPiAtICogYml0cyBlbmFibGVkIHdpdGggUEFH RURfQUREUl9CTkRSWSBhcmUgdXNlZCBhcyBvZmZzZXQgb2YgdGhlDQo+IHJlZ2lzdGVyLg0KPiA+ IC0gKi8NCj4gPiAtc3RhdGljIHZvaWQgbW9iaXZlaWxfcGNpZV9zZWxfcGFnZShzdHJ1Y3QgbW9i aXZlaWxfcGNpZSAqcGNpZSwgdTgNCj4gPiBwZ19pZHgpIC17DQo+ID4gLQl1MzIgdmFsOw0KPiA+ IC0NCj4gPiAtCXZhbCA9IHJlYWRsKHBjaWUtPmNzcl9heGlfc2xhdmVfYmFzZSArIFBBQl9DVFJM KTsNCj4gPiAtCXZhbCAmPSB+KFBBR0VfU0VMX01BU0sgPDwgUEFHRV9TRUxfU0hJRlQpOw0KPiA+ IC0JdmFsIHw9IChwZ19pZHggJiBQQUdFX1NFTF9NQVNLKSA8PCBQQUdFX1NFTF9TSElGVDsNCj4g PiAtDQo+ID4gLQl3cml0ZWwodmFsLCBwY2llLT5jc3JfYXhpX3NsYXZlX2Jhc2UgKyBQQUJfQ1RS TCk7DQo+ID4gLX0NCj4gPiAtDQo+ID4gLXN0YXRpYyB2b2lkICptb2JpdmVpbF9wY2llX2NvbXBf YWRkcihzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgdTMyDQo+ID4gb2ZmKSAtew0KPiA+IC0J aWYgKG9mZiA8IFBBR0VEX0FERFJfQk5EUlkpIHsNCj4gPiAtCQkvKiBGb3IgZGlyZWN0bHkgYWNj ZXNzZWQgcmVnaXN0ZXJzLCBjbGVhciB0aGUgcGdfc2VsIGZpZWxkICovDQo+ID4gLQkJbW9iaXZl aWxfcGNpZV9zZWxfcGFnZShwY2llLCAwKTsNCj4gPiAtCQlyZXR1cm4gcGNpZS0+Y3NyX2F4aV9z bGF2ZV9iYXNlICsgb2ZmOw0KPiA+IC0JfQ0KPiA+IC0NCj4gPiAtCW1vYml2ZWlsX3BjaWVfc2Vs X3BhZ2UocGNpZSwgT0ZGU0VUX1RPX1BBR0VfSURYKG9mZikpOw0KPiA+IC0JcmV0dXJuIHBjaWUt PmNzcl9heGlfc2xhdmVfYmFzZSArIE9GRlNFVF9UT19QQUdFX0FERFIob2ZmKTsNCj4gPiAtfQ0K PiA+IC0NCj4gPiAtc3RhdGljIGludCBtb2JpdmVpbF9wY2llX3JlYWQodm9pZCBfX2lvbWVtICph ZGRyLCBpbnQgc2l6ZSwgdTMyICp2YWwpDQo+ID4gLXsNCj4gPiAtCWlmICgodWludHB0cl90KWFk ZHIgJiAoc2l6ZSAtIDEpKSB7DQo+ID4gLQkJKnZhbCA9IDA7DQo+ID4gLQkJcmV0dXJuIFBDSUJJ T1NfQkFEX1JFR0lTVEVSX05VTUJFUjsNCj4gPiAtCX0NCj4gPiAtDQo+ID4gLQlzd2l0Y2ggKHNp emUpIHsNCj4gPiAtCWNhc2UgNDoNCj4gPiAtCQkqdmFsID0gcmVhZGwoYWRkcik7DQo+ID4gLQkJ YnJlYWs7DQo+ID4gLQljYXNlIDI6DQo+ID4gLQkJKnZhbCA9IHJlYWR3KGFkZHIpOw0KPiA+IC0J CWJyZWFrOw0KPiA+IC0JY2FzZSAxOg0KPiA+IC0JCSp2YWwgPSByZWFkYihhZGRyKTsNCj4gPiAt CQlicmVhazsNCj4gPiAtCWRlZmF1bHQ6DQo+ID4gLQkJKnZhbCA9IDA7DQo+ID4gLQkJcmV0dXJu IFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsNCj4gPiAtCX0NCj4gPiAtDQo+ID4gLQlyZXR1 cm4gUENJQklPU19TVUNDRVNTRlVMOw0KPiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMgaW50IG1v Yml2ZWlsX3BjaWVfd3JpdGUodm9pZCBfX2lvbWVtICphZGRyLCBpbnQgc2l6ZSwgdTMyIHZhbCkN Cj4gPiAtew0KPiA+IC0JaWYgKCh1aW50cHRyX3QpYWRkciAmIChzaXplIC0gMSkpDQo+ID4gLQkJ cmV0dXJuIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsNCj4gPiAtDQo+ID4gLQlzd2l0Y2gg KHNpemUpIHsNCj4gPiAtCWNhc2UgNDoNCj4gPiAtCQl3cml0ZWwodmFsLCBhZGRyKTsNCj4gPiAt CQlicmVhazsNCj4gPiAtCWNhc2UgMjoNCj4gPiAtCQl3cml0ZXcodmFsLCBhZGRyKTsNCj4gPiAt CQlicmVhazsNCj4gPiAtCWNhc2UgMToNCj4gPiAtCQl3cml0ZWIodmFsLCBhZGRyKTsNCj4gPiAt CQlicmVhazsNCj4gPiAtCWRlZmF1bHQ6DQo+ID4gLQkJcmV0dXJuIFBDSUJJT1NfQkFEX1JFR0lT VEVSX05VTUJFUjsNCj4gPiAtCX0NCj4gPiAtDQo+ID4gLQlyZXR1cm4gUENJQklPU19TVUNDRVNT RlVMOw0KPiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMgdTMyIG1vYml2ZWlsX2Nzcl9yZWFkKHN0 cnVjdCBtb2JpdmVpbF9wY2llICpwY2llLCB1MzIgb2ZmLA0KPiA+IHNpemVfdCBzaXplKSAtew0K PiA+IC0Jdm9pZCAqYWRkcjsNCj4gPiAtCXUzMiB2YWw7DQo+ID4gLQlpbnQgcmV0Ow0KPiA+IC0N Cj4gPiAtCWFkZHIgPSBtb2JpdmVpbF9wY2llX2NvbXBfYWRkcihwY2llLCBvZmYpOw0KPiA+IC0N Cj4gPiAtCXJldCA9IG1vYml2ZWlsX3BjaWVfcmVhZChhZGRyLCBzaXplLCAmdmFsKTsNCj4gPiAt CWlmIChyZXQpDQo+ID4gLQkJZGV2X2VycigmcGNpZS0+cGRldi0+ZGV2LCAicmVhZCBDU1IgYWRk cmVzcyBmYWlsZWRcbiIpOw0KPiA+IC0NCj4gPiAtCXJldHVybiB2YWw7DQo+ID4gLX0NCj4gPiAt DQo+ID4gLXN0YXRpYyB2b2lkIG1vYml2ZWlsX2Nzcl93cml0ZShzdHJ1Y3QgbW9iaXZlaWxfcGNp ZSAqcGNpZSwgdTMyIHZhbCwgdTMyIG9mZiwNCj4gPiAtCQkJICAgICAgIHNpemVfdCBzaXplKQ0K PiA+IC17DQo+ID4gLQl2b2lkICphZGRyOw0KPiA+IC0JaW50IHJldDsNCj4gPiAtDQo+ID4gLQlh ZGRyID0gbW9iaXZlaWxfcGNpZV9jb21wX2FkZHIocGNpZSwgb2ZmKTsNCj4gPiAtDQo+ID4gLQly ZXQgPSBtb2JpdmVpbF9wY2llX3dyaXRlKGFkZHIsIHNpemUsIHZhbCk7DQo+ID4gLQlpZiAocmV0 KQ0KPiA+IC0JCWRldl9lcnIoJnBjaWUtPnBkZXYtPmRldiwgIndyaXRlIENTUiBhZGRyZXNzIGZh aWxlZFxuIik7DQo+ID4gLX0NCj4gPiAtDQo+ID4gLXN0YXRpYyB1MzIgbW9iaXZlaWxfY3NyX3Jl YWRsKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llLCB1MzIgb2ZmKSAtew0KPiA+IC0JcmV0dXJu IG1vYml2ZWlsX2Nzcl9yZWFkKHBjaWUsIG9mZiwgMHg0KTsNCj4gPiAtfQ0KPiA+IC0NCj4gPiAt c3RhdGljIHZvaWQgbW9iaXZlaWxfY3NyX3dyaXRlbChzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNp ZSwgdTMyIHZhbCwNCj4gPiB1MzIgb2ZmKSAtew0KPiA+IC0JbW9iaXZlaWxfY3NyX3dyaXRlKHBj aWUsIHZhbCwgb2ZmLCAweDQpOw0KPiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMgYm9vbCBtb2Jp dmVpbF9wY2llX2xpbmtfdXAoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUpIC17DQo+ID4gLQly ZXR1cm4gKG1vYml2ZWlsX2Nzcl9yZWFkbChwY2llLCBMVFNTTV9TVEFUVVMpICYNCj4gPiAtCQlM VFNTTV9TVEFUVVNfTDBfTUFTSykgPT0gTFRTU01fU1RBVFVTX0wwOw0KPiA+IC19DQo+ID4gKyNp bmNsdWRlICJwY2llLW1vYml2ZWlsLmgiDQo+ID4NCj4gPiAgc3RhdGljIGJvb2wgbW9iaXZlaWxf cGNpZV92YWxpZF9kZXZpY2Uoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQNCj4gPiBpbnQg ZGV2Zm4pICB7IEBAIC00NjQsMTAzICsyMDUsNiBAQCBzdGF0aWMgaW50DQo+ID4gbW9iaXZlaWxf cGNpZV9wYXJzZV9kdChzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSkNCj4gPiAgCXJldHVybiAw Ow0KPiA+ICB9DQo+ID4NCj4gPiAtc3RhdGljIHZvaWQgcHJvZ3JhbV9pYl93aW5kb3dzKHN0cnVj dCBtb2JpdmVpbF9wY2llICpwY2llLCBpbnQgd2luX251bSwNCj4gPiAtCQkJICAgICAgIHU2NCBj cHVfYWRkciwgdTY0IHBjaV9hZGRyLCB1MzIgdHlwZSwgdTY0IHNpemUpDQo+ID4gLXsNCj4gPiAt CXUzMiB2YWx1ZTsNCj4gPiAtCXU2NCBzaXplNjQgPSB+KHNpemUgLSAxKTsNCj4gPiAtDQo+ID4g LQlpZiAod2luX251bSA+PSBwY2llLT5wcGlvX3dpbnMpIHsNCj4gPiAtCQlkZXZfZXJyKCZwY2ll LT5wZGV2LT5kZXYsDQo+ID4gLQkJCSJFUlJPUjogbWF4IGluYm91bmQgd2luZG93cyByZWFjaGVk ICFcbiIpOw0KPiA+IC0JCXJldHVybjsNCj4gPiAtCX0NCj4gPiAtDQo+ID4gLQl2YWx1ZSA9IG1v Yml2ZWlsX2Nzcl9yZWFkbChwY2llLCBQQUJfUEVYX0FNQVBfQ1RSTCh3aW5fbnVtKSk7DQo+ID4g LQl2YWx1ZSAmPSB+KEFNQVBfQ1RSTF9UWVBFX01BU0sgPDwgQU1BUF9DVFJMX1RZUEVfU0hJRlQg fA0KPiBXSU5fU0laRV9NQVNLKTsNCj4gPiAtCXZhbHVlIHw9IHR5cGUgPDwgQU1BUF9DVFJMX1RZ UEVfU0hJRlQgfCAxIDw8DQo+IEFNQVBfQ1RSTF9FTl9TSElGVCB8DQo+ID4gLQkJIChsb3dlcl8z Ml9iaXRzKHNpemU2NCkgJiBXSU5fU0laRV9NQVNLKTsNCj4gPiAtCW1vYml2ZWlsX2Nzcl93cml0 ZWwocGNpZSwgdmFsdWUsIFBBQl9QRVhfQU1BUF9DVFJMKHdpbl9udW0pKTsNCj4gPiAtDQo+ID4g LQltb2JpdmVpbF9jc3Jfd3JpdGVsKHBjaWUsIHVwcGVyXzMyX2JpdHMoc2l6ZTY0KSwNCj4gPiAt CQkJICAgIFBBQl9FWFRfUEVYX0FNQVBfU0laRU4od2luX251bSkpOw0KPiA+IC0NCj4gPiAtCW1v Yml2ZWlsX2Nzcl93cml0ZWwocGNpZSwgbG93ZXJfMzJfYml0cyhjcHVfYWRkciksDQo+ID4gLQkJ CSAgICBQQUJfUEVYX0FNQVBfQVhJX1dJTih3aW5fbnVtKSk7DQo+ID4gLQltb2JpdmVpbF9jc3Jf d3JpdGVsKHBjaWUsIHVwcGVyXzMyX2JpdHMoY3B1X2FkZHIpLA0KPiA+IC0JCQkgICAgUEFCX0VY VF9QRVhfQU1BUF9BWElfV0lOKHdpbl9udW0pKTsNCj4gPiAtDQo+ID4gLQltb2JpdmVpbF9jc3Jf d3JpdGVsKHBjaWUsIGxvd2VyXzMyX2JpdHMocGNpX2FkZHIpLA0KPiA+IC0JCQkgICAgUEFCX1BF WF9BTUFQX1BFWF9XSU5fTCh3aW5fbnVtKSk7DQo+ID4gLQltb2JpdmVpbF9jc3Jfd3JpdGVsKHBj aWUsIHVwcGVyXzMyX2JpdHMocGNpX2FkZHIpLA0KPiA+IC0JCQkgICAgUEFCX1BFWF9BTUFQX1BF WF9XSU5fSCh3aW5fbnVtKSk7DQo+ID4gLQ0KPiA+IC0JcGNpZS0+aWJfd2luc19jb25maWd1cmVk Kys7DQo+ID4gLX0NCj4gPiAtDQo+ID4gLS8qDQo+ID4gLSAqIHJvdXRpbmUgdG8gcHJvZ3JhbSB0 aGUgb3V0Ym91bmQgd2luZG93cw0KPiA+IC0gKi8NCj4gPiAtc3RhdGljIHZvaWQgcHJvZ3JhbV9v Yl93aW5kb3dzKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llLCBpbnQgd2luX251bSwNCj4gPiAt CQkJICAgICAgIHU2NCBjcHVfYWRkciwgdTY0IHBjaV9hZGRyLCB1MzIgdHlwZSwgdTY0IHNpemUp DQo+ID4gLXsNCj4gPiAtCXUzMiB2YWx1ZTsNCj4gPiAtCXU2NCBzaXplNjQgPSB+KHNpemUgLSAx KTsNCj4gPiAtDQo+ID4gLQlpZiAod2luX251bSA+PSBwY2llLT5hcGlvX3dpbnMpIHsNCj4gPiAt CQlkZXZfZXJyKCZwY2llLT5wZGV2LT5kZXYsDQo+ID4gLQkJCSJFUlJPUjogbWF4IG91dGJvdW5k IHdpbmRvd3MgcmVhY2hlZCAhXG4iKTsNCj4gPiAtCQlyZXR1cm47DQo+ID4gLQl9DQo+ID4gLQ0K PiA+IC0JLyoNCj4gPiAtCSAqIHByb2dyYW0gRW5hYmxlIEJpdCB0byAxLCBUeXBlIEJpdCB0byAo MDApIGJhc2UgMiwgQVhJIFdpbmRvdyBTaXplIEJpdA0KPiA+IC0JICogdG8gNCBLQiBpbiBQQUJf QVhJX0FNQVBfQ1RSTCByZWdpc3Rlcg0KPiA+IC0JICovDQo+ID4gLQl2YWx1ZSA9IG1vYml2ZWls X2Nzcl9yZWFkbChwY2llLCBQQUJfQVhJX0FNQVBfQ1RSTCh3aW5fbnVtKSk7DQo+ID4gLQl2YWx1 ZSAmPSB+KFdJTl9UWVBFX01BU0sgPDwgV0lOX1RZUEVfU0hJRlQgfCBXSU5fU0laRV9NQVNLKTsN Cj4gPiAtCXZhbHVlIHw9IDEgPDwgV0lOX0VOQUJMRV9TSElGVCB8IHR5cGUgPDwgV0lOX1RZUEVf U0hJRlQgfA0KPiA+IC0JCSAobG93ZXJfMzJfYml0cyhzaXplNjQpICYgV0lOX1NJWkVfTUFTSyk7 DQo+ID4gLQltb2JpdmVpbF9jc3Jfd3JpdGVsKHBjaWUsIHZhbHVlLCBQQUJfQVhJX0FNQVBfQ1RS TCh3aW5fbnVtKSk7DQo+ID4gLQ0KPiA+IC0JbW9iaXZlaWxfY3NyX3dyaXRlbChwY2llLCB1cHBl cl8zMl9iaXRzKHNpemU2NCksDQo+ID4gLQkJCSAgICBQQUJfRVhUX0FYSV9BTUFQX1NJWkUod2lu X251bSkpOw0KPiA+IC0NCj4gPiAtCS8qDQo+ID4gLQkgKiBwcm9ncmFtIEFYSSB3aW5kb3cgYmFz ZSB3aXRoIGFwcHJvcHJpYXRlIHZhbHVlIGluDQo+ID4gLQkgKiBQQUJfQVhJX0FNQVBfQVhJX1dJ TjAgcmVnaXN0ZXINCj4gPiAtCSAqLw0KPiA+IC0JbW9iaXZlaWxfY3NyX3dyaXRlbChwY2llLA0K PiA+IC0JCQkgICAgbG93ZXJfMzJfYml0cyhjcHVfYWRkcikgJg0KPiAofkFYSV9XSU5ET1dfQUxJ R05fTUFTSyksDQo+ID4gLQkJCSAgICBQQUJfQVhJX0FNQVBfQVhJX1dJTih3aW5fbnVtKSk7DQo+ ID4gLQltb2JpdmVpbF9jc3Jfd3JpdGVsKHBjaWUsIHVwcGVyXzMyX2JpdHMoY3B1X2FkZHIpLA0K PiA+IC0JCQkgICAgUEFCX0VYVF9BWElfQU1BUF9BWElfV0lOKHdpbl9udW0pKTsNCj4gPiAtDQo+ ID4gLQltb2JpdmVpbF9jc3Jfd3JpdGVsKHBjaWUsIGxvd2VyXzMyX2JpdHMocGNpX2FkZHIpLA0K PiA+IC0JCQkgICAgUEFCX0FYSV9BTUFQX1BFWF9XSU5fTCh3aW5fbnVtKSk7DQo+ID4gLQltb2Jp dmVpbF9jc3Jfd3JpdGVsKHBjaWUsIHVwcGVyXzMyX2JpdHMocGNpX2FkZHIpLA0KPiA+IC0JCQkg ICAgUEFCX0FYSV9BTUFQX1BFWF9XSU5fSCh3aW5fbnVtKSk7DQo+ID4gLQ0KPiA+IC0JcGNpZS0+ b2Jfd2luc19jb25maWd1cmVkKys7DQo+ID4gLX0NCj4gPiAtDQo+ID4gLXN0YXRpYyBpbnQgbW9i aXZlaWxfYnJpbmd1cF9saW5rKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llKSAtew0KPiA+IC0J aW50IHJldHJpZXM7DQo+ID4gLQ0KPiA+IC0JLyogY2hlY2sgaWYgdGhlIGxpbmsgaXMgdXAgb3Ig bm90ICovDQo+ID4gLQlmb3IgKHJldHJpZXMgPSAwOyByZXRyaWVzIDwgTElOS19XQUlUX01BWF9S RVRSSUVTOyByZXRyaWVzKyspIHsNCj4gPiAtCQlpZiAobW9iaXZlaWxfcGNpZV9saW5rX3VwKHBj aWUpKQ0KPiA+IC0JCQlyZXR1cm4gMDsNCj4gPiAtDQo+ID4gLQkJdXNsZWVwX3JhbmdlKExJTktf V0FJVF9NSU4sIExJTktfV0FJVF9NQVgpOw0KPiA+IC0JfQ0KPiA+IC0NCj4gPiAtCWRldl9lcnIo JnBjaWUtPnBkZXYtPmRldiwgImxpbmsgbmV2ZXIgY2FtZSB1cFxuIik7DQo+ID4gLQ0KPiA+IC0J cmV0dXJuIC1FVElNRURPVVQ7DQo+ID4gLX0NCj4gPiAtDQo+ID4gIHN0YXRpYyB2b2lkIG1vYml2 ZWlsX3BjaWVfZW5hYmxlX21zaShzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSkgIHsNCj4gPiAg CXBoeXNfYWRkcl90IG1zZ19hZGRyID0gcGNpZS0+cGNpZV9yZWdfYmFzZTsgQEAgLTk2Miw0MyAr NjA2LDMgQEANCj4gaW50DQo+ID4gbW9iaXZlaWxfcGNpZV9ob3N0X3Byb2JlKHN0cnVjdCBtb2Jp dmVpbF9wY2llICpwY2llKQ0KPiA+DQo+ID4gIAlyZXR1cm4gMDsNCj4gPiAgfQ0KPiA+IC0NCj4g PiAtc3RhdGljIGludCBtb2JpdmVpbF9wY2llX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpIC17DQo+ID4gLQlzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZTsNCj4gPiAtCXN0cnVj dCBwY2lfaG9zdF9icmlkZ2UgKmJyaWRnZTsNCj4gPiAtCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZw ZGV2LT5kZXY7DQo+ID4gLQ0KPiA+IC0JYnJpZGdlID0gZGV2bV9wY2lfYWxsb2NfaG9zdF9icmlk Z2UoZGV2LCBzaXplb2YoKnBjaWUpKTsNCj4gPiAtCWlmICghYnJpZGdlKQ0KPiA+IC0JCXJldHVy biAtRU5PTUVNOw0KPiA+IC0NCj4gPiAtCXBjaWUgPSBwY2lfaG9zdF9icmlkZ2VfcHJpdihicmlk Z2UpOw0KPiA+IC0JcGNpZS0+cnAuYnJpZGdlID0gYnJpZGdlOw0KPiA+IC0NCj4gPiAtCXBjaWUt PnBkZXYgPSBwZGV2Ow0KPiA+IC0NCj4gPiAtCXJldHVybiBtb2JpdmVpbF9wY2llX2hvc3RfcHJv YmUocGNpZSk7DQo+ID4gLX0NCj4gPiAtDQo+ID4gLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2 aWNlX2lkIG1vYml2ZWlsX3BjaWVfb2ZfbWF0Y2hbXSA9IHsNCj4gPiAtCXsuY29tcGF0aWJsZSA9 ICJtYnZsLGdwZXg0MC1wY2llIix9LA0KPiA+IC0Je30sDQo+ID4gLX07DQo+ID4gLQ0KPiA+IC1N T0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtb2JpdmVpbF9wY2llX29mX21hdGNoKTsNCj4gPiAtDQo+ ID4gLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1vYml2ZWlsX3BjaWVfZHJpdmVyID0g ew0KPiA+IC0JLnByb2JlID0gbW9iaXZlaWxfcGNpZV9wcm9iZSwNCj4gPiAtCS5kcml2ZXIgPSB7 DQo+ID4gLQkJLm5hbWUgPSAibW9iaXZlaWwtcGNpZSIsDQo+ID4gLQkJLm9mX21hdGNoX3RhYmxl ID0gbW9iaXZlaWxfcGNpZV9vZl9tYXRjaCwNCj4gPiAtCQkuc3VwcHJlc3NfYmluZF9hdHRycyA9 IHRydWUsDQo+ID4gLQl9LA0KPiA+IC19Ow0KPiA+IC0NCj4gPiAtYnVpbHRpbl9wbGF0Zm9ybV9k cml2ZXIobW9iaXZlaWxfcGNpZV9kcml2ZXIpOw0KPiA+IC0NCj4gPiAtTU9EVUxFX0xJQ0VOU0Uo IkdQTCB2MiIpOw0KPiA+IC1NT0RVTEVfREVTQ1JJUFRJT04oIk1vYml2ZWlsIFBDSWUgaG9zdCBj b250cm9sbGVyIGRyaXZlciIpOw0KPiA+IC1NT0RVTEVfQVVUSE9SKCJTdWJyYWhtYW55YSBMaW5n YXBwYQ0KPiA8bC5zdWJyYWhtYW55YUBtb2JpdmVpbC5jby5pbj4iKTsNCj4gPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLXBsYXQuYw0K PiA+IGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLXBsYXQu Yw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi42NGM4 NWY4NTI4NjkNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9wY2kvY29udHJv bGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLXBsYXQuYw0KPiA+IEBAIC0wLDAgKzEsNjAgQEAN Cj4gPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCj4gPiArLyoNCj4gPiAr ICogUENJZSBob3N0IGNvbnRyb2xsZXIgZHJpdmVyIGZvciBNb2JpdmVpbCBQQ0llIEhvc3QgY29u dHJvbGxlcg0KPiA+ICsgKg0KPiA+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTggTW9iaXZlaWwgSW5j Lg0KPiA+ICsgKiBDb3B5cmlnaHQgMjAxOSBOWFANCj4gPiArICoNCj4gPiArICogQXV0aG9yOiBT dWJyYWhtYW55YSBMaW5nYXBwYSA8bC5zdWJyYWhtYW55YUBtb2JpdmVpbC5jby5pbj4NCj4gPiAr ICogUmVjb2RlOiBIb3UgWmhpcWlhbmcgPFpoaXFpYW5nLkhvdUBueHAuY29tPg0KPiANCj4gU2Ft ZSBmZWVkYmFjayBhcyBiZWZvcmUgd2l0aCB0aGUgcmVjb2RlIHRhZy4NCj4gDQo+ID4gKyAqLw0K PiA+ICsNCj4gPiArI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4 L2tlcm5lbC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ID4gKyNpbmNsdWRl IDxsaW51eC9vZl9wY2kuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3BjaS5oPg0KPiA+ICsjaW5j bHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9zbGFi Lmg+DQo+ID4gKw0KPiA+ICsjaW5jbHVkZSAicGNpZS1tb2JpdmVpbC5oIg0KPiA+ICsNCj4gPiAr c3RhdGljIGludCBtb2JpdmVpbF9wY2llX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpIHsNCj4gPiArCXN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llOw0KPiA+ICsJc3RydWN0IHBj aV9ob3N0X2JyaWRnZSAqYnJpZGdlOw0KPiA+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYt PmRldjsNCj4gPiArDQo+ID4gKwlicmlkZ2UgPSBkZXZtX3BjaV9hbGxvY19ob3N0X2JyaWRnZShk ZXYsIHNpemVvZigqcGNpZSkpOw0KPiA+ICsJaWYgKCFicmlkZ2UpDQo+ID4gKwkJcmV0dXJuIC1F Tk9NRU07DQo+ID4gKw0KPiA+ICsJcGNpZSA9IHBjaV9ob3N0X2JyaWRnZV9wcml2KGJyaWRnZSk7 DQo+ID4gKwlwY2llLT5ycC5icmlkZ2UgPSBicmlkZ2U7DQo+ID4gKw0KPiA+ICsJcGNpZS0+cGRl diA9IHBkZXY7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIG1vYml2ZWlsX3BjaWVfaG9zdF9wcm9iZShw Y2llKTsgfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbW9i aXZlaWxfcGNpZV9vZl9tYXRjaFtdID0gew0KPiA+ICsJey5jb21wYXRpYmxlID0gIm1idmwsZ3Bl eDQwLXBjaWUiLH0sDQo+ID4gKwl7fSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK01PRFVMRV9ERVZJ Q0VfVEFCTEUob2YsIG1vYml2ZWlsX3BjaWVfb2ZfbWF0Y2gpOw0KPiA+ICsNCj4gPiArc3RhdGlj IHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbW9iaXZlaWxfcGNpZV9kcml2ZXIgPSB7DQo+ID4gKwku cHJvYmUgPSBtb2JpdmVpbF9wY2llX3Byb2JlLA0KPiA+ICsJLmRyaXZlciA9IHsNCj4gPiArCQku bmFtZSA9ICJtb2JpdmVpbC1wY2llIiwNCj4gPiArCQkub2ZfbWF0Y2hfdGFibGUgPSBtb2JpdmVp bF9wY2llX29mX21hdGNoLA0KPiA+ICsJCS5zdXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1ZSwNCj4g PiArCX0sDQo+ID4gK307DQo+ID4gKw0KPiA+ICtidWlsdGluX3BsYXRmb3JtX2RyaXZlcihtb2Jp dmVpbF9wY2llX2RyaXZlcik7DQo+ID4gKw0KPiA+ICtNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7 DQo+ID4gK01PRFVMRV9ERVNDUklQVElPTigiTW9iaXZlaWwgUENJZSBob3N0IGNvbnRyb2xsZXIg ZHJpdmVyIik7DQo+ID4gK01PRFVMRV9BVVRIT1IoIlN1YnJhaG1hbnlhIExpbmdhcHBhDQo+IDxs LnN1YnJhaG1hbnlhQG1vYml2ZWlsLmNvLmluPiIpOw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJz L3BjaS9jb250cm9sbGVyL21vYml2ZWlsL3BjaWUtbW9iaXZlaWwuYw0KPiA+IGIvZHJpdmVycy9w Y2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLmMNCj4gPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uMjc3M2Y4MjNjOWVhDQo+ID4gLS0tIC9k ZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1t b2JpdmVpbC5jDQo+ID4gQEAgLTAsMCArMSwyMjcgQEANCj4gPiArLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjANCj4gPiArLyoNCj4gPiArICogUENJZSBob3N0IGNvbnRyb2xsZXIg ZHJpdmVyIGZvciBNb2JpdmVpbCBQQ0llIEhvc3QgY29udHJvbGxlcg0KPiA+ICsgKg0KPiA+ICsg KiBDb3B5cmlnaHQgKGMpIDIwMTggTW9iaXZlaWwgSW5jLg0KPiA+ICsgKiBDb3B5cmlnaHQgMjAx OSBOWFANCj4gPiArICoNCj4gPiArICogQXV0aG9yOiBTdWJyYWhtYW55YSBMaW5nYXBwYSA8bC5z dWJyYWhtYW55YUBtb2JpdmVpbC5jby5pbj4NCj4gPiArICogUmVjb2RlOiBIb3UgWmhpcWlhbmcg PFpoaXFpYW5nLkhvdUBueHAuY29tPiAgKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9k ZWxheS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaW5pdC5oPg0KPiA+ICsjaW5jbHVkZSA8bGlu dXgva2VybmVsLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4NCj4gPiArI2luY2x1ZGUg PGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgInBjaWUtbW9i aXZlaWwuaCINCj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIG1vYml2ZWlsX3BjaWVfc2VsX3BhZ2Ug LSByb3V0aW5lIHRvIGFjY2VzcyBwYWdlZCByZWdpc3Rlcg0KPiA+ICsgKg0KPiA+ICsgKiBSZWdp c3RlcnMgd2hvc2UgYWRkcmVzcyBncmVhdGVyIHRoYW4gUEFHRURfQUREUl9CTkRSWSAoMHhjMDAp IGFyZQ0KPiA+ICtwYWdlZCwNCj4gPiArICogZm9yIHRoaXMgc2NoZW1lIHRvIHdvcmsgZXh0cmFj dGVkIGhpZ2hlciA2IGJpdHMgb2YgdGhlIG9mZnNldCB3aWxsDQo+ID4gK2JlDQo+ID4gKyAqIHdy aXR0ZW4gdG8gcGdfc2VsIGZpZWxkIG9mIFBBQl9DVFJMIHJlZ2lzdGVyIGFuZCByZXN0IG9mIHRo ZSBsb3dlcg0KPiA+ICsxMA0KPiA+ICsgKiBiaXRzIGVuYWJsZWQgd2l0aCBQQUdFRF9BRERSX0JO RFJZIGFyZSB1c2VkIGFzIG9mZnNldCBvZiB0aGUNCj4gcmVnaXN0ZXIuDQo+ID4gKyAqLw0KPiA+ ICtzdGF0aWMgdm9pZCBtb2JpdmVpbF9wY2llX3NlbF9wYWdlKHN0cnVjdCBtb2JpdmVpbF9wY2ll ICpwY2llLCB1OA0KPiA+ICtwZ19pZHgpIHsNCj4gPiArCXUzMiB2YWw7DQo+ID4gKw0KPiA+ICsJ dmFsID0gcmVhZGwocGNpZS0+Y3NyX2F4aV9zbGF2ZV9iYXNlICsgUEFCX0NUUkwpOw0KPiA+ICsJ dmFsICY9IH4oUEFHRV9TRUxfTUFTSyA8PCBQQUdFX1NFTF9TSElGVCk7DQo+ID4gKwl2YWwgfD0g KHBnX2lkeCAmIFBBR0VfU0VMX01BU0spIDw8IFBBR0VfU0VMX1NISUZUOw0KPiA+ICsNCj4gPiAr CXdyaXRlbCh2YWwsIHBjaWUtPmNzcl9heGlfc2xhdmVfYmFzZSArIFBBQl9DVFJMKTsgfQ0KPiA+ ICsNCj4gPiArc3RhdGljIHZvaWQgKm1vYml2ZWlsX3BjaWVfY29tcF9hZGRyKHN0cnVjdCBtb2Jp dmVpbF9wY2llICpwY2llLCB1MzINCj4gPiArb2ZmKSB7DQo+ID4gKwlpZiAob2ZmIDwgUEFHRURf QUREUl9CTkRSWSkgew0KPiA+ICsJCS8qIEZvciBkaXJlY3RseSBhY2Nlc3NlZCByZWdpc3RlcnMs IGNsZWFyIHRoZSBwZ19zZWwgZmllbGQgKi8NCj4gPiArCQltb2JpdmVpbF9wY2llX3NlbF9wYWdl KHBjaWUsIDApOw0KPiA+ICsJCXJldHVybiBwY2llLT5jc3JfYXhpX3NsYXZlX2Jhc2UgKyBvZmY7 DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJbW9iaXZlaWxfcGNpZV9zZWxfcGFnZShwY2llLCBPRkZT RVRfVE9fUEFHRV9JRFgob2ZmKSk7DQo+ID4gKwlyZXR1cm4gcGNpZS0+Y3NyX2F4aV9zbGF2ZV9i YXNlICsgT0ZGU0VUX1RPX1BBR0VfQUREUihvZmYpOyB9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50 IG1vYml2ZWlsX3BjaWVfcmVhZCh2b2lkIF9faW9tZW0gKmFkZHIsIGludCBzaXplLCB1MzIgKnZh bCkNCj4gPiArew0KPiA+ICsJaWYgKCh1aW50cHRyX3QpYWRkciAmIChzaXplIC0gMSkpIHsNCj4g PiArCQkqdmFsID0gMDsNCj4gPiArCQlyZXR1cm4gUENJQklPU19CQURfUkVHSVNURVJfTlVNQkVS Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXN3aXRjaCAoc2l6ZSkgew0KPiA+ICsJY2FzZSA0Og0K PiA+ICsJCSp2YWwgPSByZWFkbChhZGRyKTsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgMjoN Cj4gPiArCQkqdmFsID0gcmVhZHcoYWRkcik7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIDE6 DQo+ID4gKwkJKnZhbCA9IHJlYWRiKGFkZHIpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJZGVmYXVs dDoNCj4gPiArCQkqdmFsID0gMDsNCj4gPiArCQlyZXR1cm4gUENJQklPU19CQURfUkVHSVNURVJf TlVNQkVSOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbW9iaXZlaWxfcGNpZV93cml0ZSh2b2lk IF9faW9tZW0gKmFkZHIsIGludCBzaXplLCB1MzIgdmFsKQ0KPiA+ICt7DQo+ID4gKwlpZiAoKHVp bnRwdHJfdClhZGRyICYgKHNpemUgLSAxKSkNCj4gPiArCQlyZXR1cm4gUENJQklPU19CQURfUkVH SVNURVJfTlVNQkVSOw0KPiA+ICsNCj4gPiArCXN3aXRjaCAoc2l6ZSkgew0KPiA+ICsJY2FzZSA0 Og0KPiA+ICsJCXdyaXRlbCh2YWwsIGFkZHIpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSAy Og0KPiA+ICsJCXdyaXRldyh2YWwsIGFkZHIpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSAx Og0KPiA+ICsJCXdyaXRlYih2YWwsIGFkZHIpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJZGVmYXVs dDoNCj4gPiArCQlyZXR1cm4gUENJQklPU19CQURfUkVHSVNURVJfTlVNQkVSOw0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3UzMiBtb2JpdmVpbF9jc3JfcmVhZChzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgdTMy IG9mZiwgc2l6ZV90DQo+ID4gK3NpemUpIHsNCj4gPiArCXZvaWQgKmFkZHI7DQo+ID4gKwl1MzIg dmFsOw0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwlhZGRyID0gbW9iaXZlaWxfcGNpZV9j b21wX2FkZHIocGNpZSwgb2ZmKTsNCj4gPiArDQo+ID4gKwlyZXQgPSBtb2JpdmVpbF9wY2llX3Jl YWQoYWRkciwgc2l6ZSwgJnZhbCk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCWRldl9lcnIoJnBj aWUtPnBkZXYtPmRldiwgInJlYWQgQ1NSIGFkZHJlc3MgZmFpbGVkXG4iKTsNCj4gPiArDQo+ID4g KwlyZXR1cm4gdmFsOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICt2b2lkIG1vYml2ZWlsX2Nzcl93cml0 ZShzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgdTMyIHZhbCwgdTMyIG9mZiwNCj4gPiArCQkJ ICAgICAgIHNpemVfdCBzaXplKQ0KPiA+ICt7DQo+ID4gKwl2b2lkICphZGRyOw0KPiA+ICsJaW50 IHJldDsNCj4gPiArDQo+ID4gKwlhZGRyID0gbW9iaXZlaWxfcGNpZV9jb21wX2FkZHIocGNpZSwg b2ZmKTsNCj4gPiArDQo+ID4gKwlyZXQgPSBtb2JpdmVpbF9wY2llX3dyaXRlKGFkZHIsIHNpemUs IHZhbCk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCWRldl9lcnIoJnBjaWUtPnBkZXYtPmRldiwg IndyaXRlIENTUiBhZGRyZXNzIGZhaWxlZFxuIik7IH0NCj4gPiArDQo+ID4gK2Jvb2wgbW9iaXZl aWxfcGNpZV9saW5rX3VwKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llKSB7DQo+ID4gKwlyZXR1 cm4gKG1vYml2ZWlsX2Nzcl9yZWFkbChwY2llLCBMVFNTTV9TVEFUVVMpICYNCj4gPiArCQlMVFNT TV9TVEFUVVNfTDBfTUFTSykgPT0gTFRTU01fU1RBVFVTX0wwOyB9DQo+ID4gKw0KPiA+ICt2b2lk IHByb2dyYW1faWJfd2luZG93cyhzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgaW50IHdpbl9u dW0sDQo+ID4gKwkJCXU2NCBjcHVfYWRkciwgdTY0IHBjaV9hZGRyLCB1MzIgdHlwZSwgdTY0IHNp emUpIHsNCj4gPiArCXUzMiB2YWx1ZTsNCj4gPiArCXU2NCBzaXplNjQgPSB+KHNpemUgLSAxKTsN Cj4gPiArDQo+ID4gKwlpZiAod2luX251bSA+PSBwY2llLT5wcGlvX3dpbnMpIHsNCj4gPiArCQlk ZXZfZXJyKCZwY2llLT5wZGV2LT5kZXYsDQo+ID4gKwkJCSJFUlJPUjogbWF4IGluYm91bmQgd2lu ZG93cyByZWFjaGVkICFcbiIpOw0KPiA+ICsJCXJldHVybjsNCj4gPiArCX0NCj4gPiArDQo+ID4g Kwl2YWx1ZSA9IG1vYml2ZWlsX2Nzcl9yZWFkbChwY2llLCBQQUJfUEVYX0FNQVBfQ1RSTCh3aW5f bnVtKSk7DQo+ID4gKwl2YWx1ZSAmPSB+KEFNQVBfQ1RSTF9UWVBFX01BU0sgPDwgQU1BUF9DVFJM X1RZUEVfU0hJRlQgfA0KPiBXSU5fU0laRV9NQVNLKTsNCj4gPiArCXZhbHVlIHw9IHR5cGUgPDwg QU1BUF9DVFJMX1RZUEVfU0hJRlQgfCAxIDw8DQo+IEFNQVBfQ1RSTF9FTl9TSElGVCB8DQo+ID4g KwkJIChsb3dlcl8zMl9iaXRzKHNpemU2NCkgJiBXSU5fU0laRV9NQVNLKTsNCj4gPiArCW1vYml2 ZWlsX2Nzcl93cml0ZWwocGNpZSwgdmFsdWUsIFBBQl9QRVhfQU1BUF9DVFJMKHdpbl9udW0pKTsN Cj4gPiArDQo+ID4gKwltb2JpdmVpbF9jc3Jfd3JpdGVsKHBjaWUsIHVwcGVyXzMyX2JpdHMoc2l6 ZTY0KSwNCj4gPiArCQkJICAgIFBBQl9FWFRfUEVYX0FNQVBfU0laRU4od2luX251bSkpOw0KPiA+ ICsNCj4gPiArCW1vYml2ZWlsX2Nzcl93cml0ZWwocGNpZSwgbG93ZXJfMzJfYml0cyhjcHVfYWRk ciksDQo+ID4gKwkJCSAgICBQQUJfUEVYX0FNQVBfQVhJX1dJTih3aW5fbnVtKSk7DQo+ID4gKwlt b2JpdmVpbF9jc3Jfd3JpdGVsKHBjaWUsIHVwcGVyXzMyX2JpdHMoY3B1X2FkZHIpLA0KPiA+ICsJ CQkgICAgUEFCX0VYVF9QRVhfQU1BUF9BWElfV0lOKHdpbl9udW0pKTsNCj4gPiArDQo+ID4gKwlt b2JpdmVpbF9jc3Jfd3JpdGVsKHBjaWUsIGxvd2VyXzMyX2JpdHMocGNpX2FkZHIpLA0KPiA+ICsJ CQkgICAgUEFCX1BFWF9BTUFQX1BFWF9XSU5fTCh3aW5fbnVtKSk7DQo+ID4gKwltb2JpdmVpbF9j c3Jfd3JpdGVsKHBjaWUsIHVwcGVyXzMyX2JpdHMocGNpX2FkZHIpLA0KPiA+ICsJCQkgICAgUEFC X1BFWF9BTUFQX1BFWF9XSU5fSCh3aW5fbnVtKSk7DQo+ID4gKw0KPiA+ICsJcGNpZS0+aWJfd2lu c19jb25maWd1cmVkKys7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIHJvdXRpbmUg dG8gcHJvZ3JhbSB0aGUgb3V0Ym91bmQgd2luZG93cyAgKi8gdm9pZA0KPiA+ICtwcm9ncmFtX29i X3dpbmRvd3Moc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIGludCB3aW5fbnVtLA0KPiA+ICsJ CQl1NjQgY3B1X2FkZHIsIHU2NCBwY2lfYWRkciwgdTMyIHR5cGUsIHU2NCBzaXplKSB7DQo+ID4g Kwl1MzIgdmFsdWU7DQo+ID4gKwl1NjQgc2l6ZTY0ID0gfihzaXplIC0gMSk7DQo+ID4gKw0KPiA+ ICsJaWYgKHdpbl9udW0gPj0gcGNpZS0+YXBpb193aW5zKSB7DQo+ID4gKwkJZGV2X2VycigmcGNp ZS0+cGRldi0+ZGV2LA0KPiA+ICsJCQkiRVJST1I6IG1heCBvdXRib3VuZCB3aW5kb3dzIHJlYWNo ZWQgIVxuIik7DQo+ID4gKwkJcmV0dXJuOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qDQo+ID4g KwkgKiBwcm9ncmFtIEVuYWJsZSBCaXQgdG8gMSwgVHlwZSBCaXQgdG8gKDAwKSBiYXNlIDIsIEFY SSBXaW5kb3cgU2l6ZSBCaXQNCj4gPiArCSAqIHRvIDQgS0IgaW4gUEFCX0FYSV9BTUFQX0NUUkwg cmVnaXN0ZXINCj4gPiArCSAqLw0KPiA+ICsJdmFsdWUgPSBtb2JpdmVpbF9jc3JfcmVhZGwocGNp ZSwgUEFCX0FYSV9BTUFQX0NUUkwod2luX251bSkpOw0KPiA+ICsJdmFsdWUgJj0gfihXSU5fVFlQ RV9NQVNLIDw8IFdJTl9UWVBFX1NISUZUIHwgV0lOX1NJWkVfTUFTSyk7DQo+ID4gKwl2YWx1ZSB8 PSAxIDw8IFdJTl9FTkFCTEVfU0hJRlQgfCB0eXBlIDw8IFdJTl9UWVBFX1NISUZUIHwNCj4gPiAr CQkgKGxvd2VyXzMyX2JpdHMoc2l6ZTY0KSAmIFdJTl9TSVpFX01BU0spOw0KPiA+ICsJbW9iaXZl aWxfY3NyX3dyaXRlbChwY2llLCB2YWx1ZSwgUEFCX0FYSV9BTUFQX0NUUkwod2luX251bSkpOw0K PiA+ICsNCj4gPiArCW1vYml2ZWlsX2Nzcl93cml0ZWwocGNpZSwgdXBwZXJfMzJfYml0cyhzaXpl NjQpLA0KPiA+ICsJCQkgICAgUEFCX0VYVF9BWElfQU1BUF9TSVpFKHdpbl9udW0pKTsNCj4gPiAr DQo+ID4gKwkvKg0KPiA+ICsJICogcHJvZ3JhbSBBWEkgd2luZG93IGJhc2Ugd2l0aCBhcHByb3By aWF0ZSB2YWx1ZSBpbg0KPiA+ICsJICogUEFCX0FYSV9BTUFQX0FYSV9XSU4wIHJlZ2lzdGVyDQo+ ID4gKwkgKi8NCj4gPiArCW1vYml2ZWlsX2Nzcl93cml0ZWwocGNpZSwNCj4gPiArCQkJICAgIGxv d2VyXzMyX2JpdHMoY3B1X2FkZHIpICYNCj4gKH5BWElfV0lORE9XX0FMSUdOX01BU0spLA0KPiA+ ICsJCQkgICAgUEFCX0FYSV9BTUFQX0FYSV9XSU4od2luX251bSkpOw0KPiA+ICsJbW9iaXZlaWxf Y3NyX3dyaXRlbChwY2llLCB1cHBlcl8zMl9iaXRzKGNwdV9hZGRyKSwNCj4gPiArCQkJICAgIFBB Ql9FWFRfQVhJX0FNQVBfQVhJX1dJTih3aW5fbnVtKSk7DQo+ID4gKw0KPiA+ICsJbW9iaXZlaWxf Y3NyX3dyaXRlbChwY2llLCBsb3dlcl8zMl9iaXRzKHBjaV9hZGRyKSwNCj4gPiArCQkJICAgIFBB Ql9BWElfQU1BUF9QRVhfV0lOX0wod2luX251bSkpOw0KPiA+ICsJbW9iaXZlaWxfY3NyX3dyaXRl bChwY2llLCB1cHBlcl8zMl9iaXRzKHBjaV9hZGRyKSwNCj4gPiArCQkJICAgIFBBQl9BWElfQU1B UF9QRVhfV0lOX0god2luX251bSkpOw0KPiA+ICsNCj4gPiArCXBjaWUtPm9iX3dpbnNfY29uZmln dXJlZCsrOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQgbW9iaXZlaWxfYnJpbmd1cF9saW5rKHN0 cnVjdCBtb2JpdmVpbF9wY2llICpwY2llKSB7DQo+ID4gKwlpbnQgcmV0cmllczsNCj4gPiArDQo+ ID4gKwkvKiBjaGVjayBpZiB0aGUgbGluayBpcyB1cCBvciBub3QgKi8NCj4gPiArCWZvciAocmV0 cmllcyA9IDA7IHJldHJpZXMgPCBMSU5LX1dBSVRfTUFYX1JFVFJJRVM7IHJldHJpZXMrKykgew0K PiA+ICsJCWlmIChtb2JpdmVpbF9wY2llX2xpbmtfdXAocGNpZSkpDQo+ID4gKwkJCXJldHVybiAw Ow0KPiA+ICsNCj4gPiArCQl1c2xlZXBfcmFuZ2UoTElOS19XQUlUX01JTiwgTElOS19XQUlUX01B WCk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZGV2X2VycigmcGNpZS0+cGRldi0+ZGV2LCAibGlu ayBuZXZlciBjYW1lIHVwXG4iKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gLUVUSU1FRE9VVDsNCj4g PiArfQ0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL3Bj aWUtbW9iaXZlaWwuaA0KPiA+IGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2ll LW1vYml2ZWlsLmgNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAw MDAwMC4uZTMxNDgwNzhlOWRkDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMv cGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1tb2JpdmVpbC5oDQo+ID4gQEAgLTAsMCArMSwx NzggQEANCj4gPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8NCj4gPiAr LyoNCj4gPiArICogUENJZSBob3N0IGNvbnRyb2xsZXIgZHJpdmVyIGZvciBNb2JpdmVpbCBQQ0ll IEhvc3QgY29udHJvbGxlcg0KPiA+ICsgKg0KPiA+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTggTW9i aXZlaWwgSW5jLg0KPiA+ICsgKiBDb3B5cmlnaHQgMjAxOSBOWFANCj4gPiArICoNCj4gPiArICog QXV0aG9yOiBTdWJyYWhtYW55YSBMaW5nYXBwYSA8bC5zdWJyYWhtYW55YUBtb2JpdmVpbC5jby5p bj4NCj4gPiArICogUmVjb2RlOiBIb3UgWmhpcWlhbmcgPFpoaXFpYW5nLkhvdUBueHAuY29tPiAg Ki8NCj4gPiArDQo+ID4gKyNpZm5kZWYgX1BDSUVfTU9CSVZFSUxfSA0KPiA+ICsjZGVmaW5lIF9Q Q0lFX01PQklWRUlMX0gNCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4NCj4gPiAr I2luY2x1ZGUgPGxpbnV4L2lycS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbXNpLmg+DQo+ID4g KyNpbmNsdWRlICIuLi8uLi9wY2kuaCINCj4gPiArDQo+ID4gKy8qIHJlZ2lzdGVyIG9mZnNldHMg YW5kIGJpdCBwb3NpdGlvbnMgKi8NCj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIHRyYW5zbGF0aW9u IHRhYmxlcyBhcmUgZ3JvdXBlZCBpbnRvIHdpbmRvd3MsIGVhY2ggd2luZG93IHJlZ2lzdGVycw0K PiA+ICthcmUNCj4gPiArICogZ3JvdXBlZCBpbnRvIGJsb2NrcyBvZiA0IG9yIDE2IHJlZ2lzdGVy cyBlYWNoICAqLw0KPiA+ICsjZGVmaW5lIFBBQl9SRUdfQkxPQ0tfU0laRQkJMTYNCj4gPiArI2Rl ZmluZSBQQUJfRVhUX1JFR19CTE9DS19TSVpFCQk0DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBBQl9S RUdfQUREUihvZmZzZXQsIHdpbikJXA0KPiA+ICsJKG9mZnNldCArICh3aW4gKiBQQUJfUkVHX0JM T0NLX1NJWkUpKQ0KPiA+ICsjZGVmaW5lIFBBQl9FWFRfUkVHX0FERFIob2Zmc2V0LCB3aW4pCVwN Cj4gPiArCShvZmZzZXQgKyAod2luICogUEFCX0VYVF9SRUdfQkxPQ0tfU0laRSkpDQo+ID4gKw0K PiA+ICsjZGVmaW5lIExUU1NNX1NUQVRVUwkJCTB4MDQwNA0KPiA+ICsjZGVmaW5lICBMVFNTTV9T VEFUVVNfTDBfTUFTSwkJMHgzZg0KPiA+ICsjZGVmaW5lICBMVFNTTV9TVEFUVVNfTDAJCTB4MmQN Cj4gPiArDQo+ID4gKyNkZWZpbmUgUEFCX0NUUkwJCQkweDA4MDgNCj4gPiArI2RlZmluZSAgQU1C QV9QSU9fRU5BQkxFX1NISUZUCQkwDQo+ID4gKyNkZWZpbmUgIFBFWF9QSU9fRU5BQkxFX1NISUZU CQkxDQo+ID4gKyNkZWZpbmUgIFBBR0VfU0VMX1NISUZUCQkJMTMNCj4gPiArI2RlZmluZSAgUEFH RV9TRUxfTUFTSwkJCTB4M2YNCj4gPiArI2RlZmluZSAgUEFHRV9MT19NQVNLCQkJMHgzZmYNCj4g PiArI2RlZmluZSAgUEFHRV9TRUxfT0ZGU0VUX1NISUZUCQkxMA0KPiA+ICsNCj4gPiArI2RlZmlu ZSBQQUJfQVhJX1BJT19DVFJMCQkweDA4NDANCj4gPiArI2RlZmluZSAgQVBJT19FTl9NQVNLCQkJ MHhmDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBBQl9QRVhfUElPX0NUUkwJCTB4MDhjMA0KPiA+ICsj ZGVmaW5lICBQSU9fRU5BQkxFX1NISUZUCQkwDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBBQl9JTlRQ X0FNQkFfTUlTQ19FTkIJCTB4MGIwYw0KPiA+ICsjZGVmaW5lIFBBQl9JTlRQX0FNQkFfTUlTQ19T VEFUCQkweDBiMWMNCj4gPiArI2RlZmluZSAgUEFCX0lOVFBfSU5UWF9NQVNLCQkweDAxZTANCj4g PiArI2RlZmluZSAgUEFCX0lOVFBfTVNJX01BU0sJCTB4OA0KPiA+ICsNCj4gPiArI2RlZmluZSBQ QUJfQVhJX0FNQVBfQ1RSTCh3aW4pCQlQQUJfUkVHX0FERFIoMHgwYmEwLCB3aW4pDQo+ID4gKyNk ZWZpbmUgIFdJTl9FTkFCTEVfU0hJRlQJCTANCj4gPiArI2RlZmluZSAgV0lOX1RZUEVfU0hJRlQJ CQkxDQo+ID4gKyNkZWZpbmUgIFdJTl9UWVBFX01BU0sJCQkweDMNCj4gPiArI2RlZmluZSAgV0lO X1NJWkVfTUFTSwkJCTB4ZmZmZmZjMDANCj4gPiArDQo+ID4gKyNkZWZpbmUgUEFCX0VYVF9BWElf QU1BUF9TSVpFKHdpbikJUEFCX0VYVF9SRUdfQUREUigweGJhZjAsDQo+IHdpbikNCj4gPiArDQo+ ID4gKyNkZWZpbmUgUEFCX0VYVF9BWElfQU1BUF9BWElfV0lOKHdpbikNCj4gCVBBQl9FWFRfUkVH X0FERFIoMHg4MGEwLCB3aW4pDQo+ID4gKyNkZWZpbmUgUEFCX0FYSV9BTUFQX0FYSV9XSU4od2lu KQlQQUJfUkVHX0FERFIoMHgwYmE0LCB3aW4pDQo+ID4gKyNkZWZpbmUgIEFYSV9XSU5ET1dfQUxJ R05fTUFTSwkJMw0KPiA+ICsNCj4gPiArI2RlZmluZSBQQUJfQVhJX0FNQVBfUEVYX1dJTl9MKHdp bikJUEFCX1JFR19BRERSKDB4MGJhOCwNCj4gd2luKQ0KPiA+ICsjZGVmaW5lICBQQUJfQlVTX1NI SUZUCQkJMjQNCj4gPiArI2RlZmluZSAgUEFCX0RFVklDRV9TSElGVAkJMTkNCj4gPiArI2RlZmlu ZSAgUEFCX0ZVTkNUSU9OX1NISUZUCQkxNg0KPiA+ICsNCj4gPiArI2RlZmluZSBQQUJfQVhJX0FN QVBfUEVYX1dJTl9IKHdpbikJUEFCX1JFR19BRERSKDB4MGJhYywNCj4gd2luKQ0KPiA+ICsjZGVm aW5lIFBBQl9JTlRQX0FYSV9QSU9fQ0xBU1MJCTB4NDc0DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBB Ql9QRVhfQU1BUF9DVFJMKHdpbikJCVBBQl9SRUdfQUREUigweDRiYTAsDQo+IHdpbikNCj4gPiAr I2RlZmluZSAgQU1BUF9DVFJMX0VOX1NISUZUCQkwDQo+ID4gKyNkZWZpbmUgIEFNQVBfQ1RSTF9U WVBFX1NISUZUCQkxDQo+ID4gKyNkZWZpbmUgIEFNQVBfQ1RSTF9UWVBFX01BU0sJCTMNCj4gPiAr DQo+ID4gKyNkZWZpbmUgUEFCX0VYVF9QRVhfQU1BUF9TSVpFTih3aW4pCVBBQl9FWFRfUkVHX0FE RFIoMHhiZWYwLA0KPiB3aW4pDQo+ID4gKyNkZWZpbmUgUEFCX0VYVF9QRVhfQU1BUF9BWElfV0lO KHdpbikNCj4gCVBBQl9FWFRfUkVHX0FERFIoMHhiNGEwLCB3aW4pDQo+ID4gKyNkZWZpbmUgUEFC X1BFWF9BTUFQX0FYSV9XSU4od2luKQlQQUJfUkVHX0FERFIoMHg0YmE0LCB3aW4pDQo+ID4gKyNk ZWZpbmUgUEFCX1BFWF9BTUFQX1BFWF9XSU5fTCh3aW4pCVBBQl9SRUdfQUREUigweDRiYTgsDQo+ IHdpbikNCj4gPiArI2RlZmluZSBQQUJfUEVYX0FNQVBfUEVYX1dJTl9IKHdpbikJUEFCX1JFR19B RERSKDB4NGJhYywNCj4gd2luKQ0KPiA+ICsNCj4gPiArLyogc3RhcnRpbmcgb2Zmc2V0IG9mIElO VFggYml0cyBpbiBzdGF0dXMgcmVnaXN0ZXIgKi8NCj4gPiArI2RlZmluZSBQQUJfSU5UWF9TVEFS VAkJCTUNCj4gPiArDQo+ID4gKy8qIHN1cHBvcnRlZCBudW1iZXIgb2YgTVNJIGludGVycnVwdHMg Ki8NCj4gPiArI2RlZmluZSBQQ0lfTlVNX01TSQkJCTE2DQo+ID4gKw0KPiA+ICsvKiBNU0kgcmVn aXN0ZXJzICovDQo+ID4gKyNkZWZpbmUgTVNJX0JBU0VfTE9fT0ZGU0VUCQkweDA0DQo+ID4gKyNk ZWZpbmUgTVNJX0JBU0VfSElfT0ZGU0VUCQkweDA4DQo+ID4gKyNkZWZpbmUgTVNJX1NJWkVfT0ZG U0VUCQkJMHgwYw0KPiA+ICsjZGVmaW5lIE1TSV9FTkFCTEVfT0ZGU0VUCQkweDE0DQo+ID4gKyNk ZWZpbmUgTVNJX1NUQVRVU19PRkZTRVQJCTB4MTgNCj4gPiArI2RlZmluZSBNU0lfREFUQV9PRkZT RVQJCQkweDIwDQo+ID4gKyNkZWZpbmUgTVNJX0FERFJfTF9PRkZTRVQJCTB4MjQNCj4gPiArI2Rl ZmluZSBNU0lfQUREUl9IX09GRlNFVAkJMHgyOA0KPiA+ICsNCj4gPiArLyogb3V0Ym91bmQgYW5k IGluYm91bmQgd2luZG93IGRlZmluaXRpb25zICovDQo+ID4gKyNkZWZpbmUgV0lOX05VTV8wCQkJ MA0KPiA+ICsjZGVmaW5lIFdJTl9OVU1fMQkJCTENCj4gPiArI2RlZmluZSBDRkdfV0lORE9XX1RZ UEUJCQkwDQo+ID4gKyNkZWZpbmUgSU9fV0lORE9XX1RZUEUJCQkxDQo+ID4gKyNkZWZpbmUgTUVN X1dJTkRPV19UWVBFCQkJMg0KPiA+ICsjZGVmaW5lIElCX1dJTl9TSVpFCQkJKCh1NjQpMjU2ICog MTAyNCAqIDEwMjQgKiAxMDI0KQ0KPiA+ICsjZGVmaW5lIE1BWF9QSU9fV0lORE9XUwkJCTgNCj4g PiArDQo+ID4gKy8qIFBhcmFtZXRlcnMgZm9yIHRoZSB3YWl0aW5nIGZvciBsaW5rIHVwIHJvdXRp bmUgKi8NCj4gPiArI2RlZmluZSBMSU5LX1dBSVRfTUFYX1JFVFJJRVMJCTEwDQo+ID4gKyNkZWZp bmUgTElOS19XQUlUX01JTgkJCTkwMDAwDQo+ID4gKyNkZWZpbmUgTElOS19XQUlUX01BWAkJCTEw MDAwMA0KPiA+ICsNCj4gPiArI2RlZmluZSBQQUdFRF9BRERSX0JORFJZCQkweGMwMA0KPiA+ICsj ZGVmaW5lIE9GRlNFVF9UT19QQUdFX0FERFIob2ZmKQlcDQo+ID4gKwkoKG9mZiAmIFBBR0VfTE9f TUFTSykgfCBQQUdFRF9BRERSX0JORFJZKQ0KPiA+ICsjZGVmaW5lIE9GRlNFVF9UT19QQUdFX0lE WChvZmYpCQlcDQo+ID4gKwkoKG9mZiA+PiBQQUdFX1NFTF9PRkZTRVRfU0hJRlQpICYgUEFHRV9T RUxfTUFTSykNCj4gPiArDQo+ID4gK3N0cnVjdCBtb2JpdmVpbF9tc2kgewkJCS8qIE1TSSBpbmZv cm1hdGlvbiAqLw0KPiA+ICsJc3RydWN0IG11dGV4IGxvY2s7CQkvKiBwcm90ZWN0IGJpdG1hcCB2 YXJpYWJsZSAqLw0KPiA+ICsJc3RydWN0IGlycV9kb21haW4gKm1zaV9kb21haW47DQo+ID4gKwlz dHJ1Y3QgaXJxX2RvbWFpbiAqZGV2X2RvbWFpbjsNCj4gPiArCXBoeXNfYWRkcl90IG1zaV9wYWdl c19waHlzOw0KPiA+ICsJaW50IG51bV9vZl92ZWN0b3JzOw0KPiA+ICsJREVDTEFSRV9CSVRNQVAo bXNpX2lycV9pbl91c2UsIFBDSV9OVU1fTVNJKTsgfTsNCj4gPiArDQo+ID4gK3N0cnVjdCByb290 X3BvcnQgew0KPiA+ICsJY2hhciByb290X2J1c19ucjsNCj4gPiArCXZvaWQgX19pb21lbSAqY29u ZmlnX2F4aV9zbGF2ZV9iYXNlOwkvKiBlbmRwb2ludCBjb25maWcgYmFzZSAqLw0KPiA+ICsJc3Ry dWN0IHJlc291cmNlICpvYl9pb19yZXM7DQo+ID4gKwlpbnQgaXJxOw0KPiA+ICsJcmF3X3NwaW5s b2NrX3QgaW50eF9tYXNrX2xvY2s7DQo+ID4gKwlzdHJ1Y3QgaXJxX2RvbWFpbiAqaW50eF9kb21h aW47DQo+ID4gKwlzdHJ1Y3QgbW9iaXZlaWxfbXNpIG1zaTsNCj4gPiArCXN0cnVjdCBwY2lfaG9z dF9icmlkZ2UgKmJyaWRnZTsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCBtb2JpdmVpbF9w Y2llIHsNCj4gPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7DQo+ID4gKwl2b2lkIF9f aW9tZW0gKmNzcl9heGlfc2xhdmVfYmFzZTsJLyogcm9vdCBwb3J0IGNvbmZpZyBiYXNlICovDQo+ ID4gKwl2b2lkIF9faW9tZW0gKmFwYl9jc3JfYmFzZTsJLyogTVNJIHJlZ2lzdGVyIGJhc2UgKi8N Cj4gPiArCXBoeXNfYWRkcl90IHBjaWVfcmVnX2Jhc2U7CS8qIFBoeXNpY2FsIFBDSWUgQ29udHJv bGxlciBCYXNlICovDQo+ID4gKwlpbnQgYXBpb193aW5zOw0KPiA+ICsJaW50IHBwaW9fd2luczsN Cj4gPiArCWludCBvYl93aW5zX2NvbmZpZ3VyZWQ7CQkvKiBjb25maWd1cmVkIG91dGJvdW5kIHdp bmRvd3MgKi8NCj4gPiArCWludCBpYl93aW5zX2NvbmZpZ3VyZWQ7CQkvKiBjb25maWd1cmVkIGlu Ym91bmQgd2luZG93cyAqLw0KPiA+ICsJc3RydWN0IHJvb3RfcG9ydCBycDsNCj4gPiArfTsNCj4g PiArDQo+ID4gK2ludCBtb2JpdmVpbF9wY2llX2hvc3RfcHJvYmUoc3RydWN0IG1vYml2ZWlsX3Bj aWUgKnBjaWUpOyBib29sDQo+ID4gK21vYml2ZWlsX3BjaWVfbGlua191cChzdHJ1Y3QgbW9iaXZl aWxfcGNpZSAqcGNpZSk7IGludA0KPiA+ICttb2JpdmVpbF9icmluZ3VwX2xpbmsoc3RydWN0IG1v Yml2ZWlsX3BjaWUgKnBjaWUpOyB2b2lkDQo+ID4gK3Byb2dyYW1fb2Jfd2luZG93cyhzdHJ1Y3Qg bW9iaXZlaWxfcGNpZSAqcGNpZSwgaW50IHdpbl9udW0sIHU2NA0KPiBjcHVfYWRkciwNCj4gPiAr CQkJdTY0IHBjaV9hZGRyLCB1MzIgdHlwZSwgdTY0IHNpemUpOyB2b2lkDQo+IHByb2dyYW1faWJf d2luZG93cyhzdHJ1Y3QNCj4gPiArbW9iaXZlaWxfcGNpZSAqcGNpZSwgaW50IHdpbl9udW0sIHU2 NCBjcHVfYWRkciwNCj4gPiArCQkJdTY0IHBjaV9hZGRyLCB1MzIgdHlwZSwgdTY0IHNpemUpOw0K PiA+ICt1MzIgbW9iaXZlaWxfY3NyX3JlYWQoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIHUz MiBvZmYsIHNpemVfdA0KPiA+ICtzaXplKTsgdm9pZCBtb2JpdmVpbF9jc3Jfd3JpdGUoc3RydWN0 IG1vYml2ZWlsX3BjaWUgKnBjaWUsIHUzMiB2YWwsIHUzMiBvZmYsDQo+ID4gKwkJCXNpemVfdCBz aXplKTsNCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgdTMyIG1vYml2ZWlsX2Nzcl9yZWFkbChz dHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgdTMyDQo+ID4gK29mZikgew0KPiA+ICsJcmV0dXJu IG1vYml2ZWlsX2Nzcl9yZWFkKHBjaWUsIG9mZiwgMHg0KTsgfQ0KPiA+ICsNCj4gPiArc3RhdGlj IGlubGluZSB2b2lkIG1vYml2ZWlsX2Nzcl93cml0ZWwoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBj aWUsIHUzMiB2YWwsDQo+ID4gKwkJCQkgICAgICAgdTMyIG9mZikNCj4gPiArew0KPiA+ICsJbW9i aXZlaWxfY3NyX3dyaXRlKHBjaWUsIHZhbCwgb2ZmLCAweDQpOyB9DQo+ID4gKw0KPiA+ICsjZW5k aWYgLyogX1BDSUVfTU9CSVZFSUxfSCAqLw0KPiA+IC0tDQo+ID4gMi4xNy4xDQo+ID4NCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 59A07C2D0B1 for ; Thu, 6 Feb 2020 12:26:13 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 2298B217BA for ; Thu, 6 Feb 2020 12:26:13 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="fX7tWWKc"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=nxp.com header.i=@nxp.com header.b="dmPlBcaP" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 2298B217BA Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=nxp.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:In-Reply-To:References: Message-ID:Date:Subject:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=t8b5S00RSUTQPwVVnaZvS6s2baphEuZ/7xRwnn86Yts=; b=fX7tWWKcx7782/ dWkbRV1X+r3zw9EujiHs7dHH+dxUb4rddnzaPk90jZreg5q5zl2WyeIu8omDxAoYEcXmAHGRdd01u O/dklT0uv8y6mEGrUoRdY/aBok/3nHmYJCCSHympiCoQ7CP0HsWZtouSbvdqsbvHDJ6a7f3eV9uBy IBofrGjS7mkGa2dEaUFv0LsDm1nVCapNuE8/dfjKNI7M1ZGgs/b3ZCFURUd2p06oZayg1KqFd6C6K 2w1qAF54GWnICkINEVZ0YEDjQyCRjqe0ZkxGbXstCx1r7niLn92G+9D6FtRmP/FDy3uwUXtsrul0z 4l5DRVbFt2N+nQF72Xrg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1izgES-0005Rc-SR; Thu, 06 Feb 2020 12:26:08 +0000 Received: from mail-am6eur05on2085.outbound.protection.outlook.com ([40.107.22.85] helo=EUR05-AM6-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1izgEN-0005R3-1k for linux-arm-kernel@lists.infradead.org; Thu, 06 Feb 2020 12:26:06 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=fM3B6/LmghJ2VHKCTibpwovNUtXkDPiR9j3Hoh3ANlO4Ea1Cc7CyImDZ99LSxotwX9oO0euKi37Xvc9eyLiis7WjXpa197QoyacI9fdyvjOVAYlHgTCp5E5x3J9lIEYO8avR9dGpL562/3bEpbrmZVE0aTIWOcNL4I/4K8M7jvDwuZT+SPDrItY3e16nn52Okw2WwXQunXUO/42JpLB+jUeH/DAgLMrfWBTBdGK8insZlmVsQ5yMTBlofd2u2H0PuTYAG58lnFYqBUn2wW8PGtY0IlWGCJL5+jJqVwO/IubF8WMGEVGXQBZCk7P+rSfiMJwe5ewCZsWy6hLzHpEFVQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=Uzcg/Qx4uWE5TmMslyrU5wgEnULzT9L//kmlWmrOmrg=; b=Tt9TGZwNNvxt0TbTE2Sn111Yddv7xNGJOOiZE66+k3qx3Irou1Ai3M0EBck/MtHD0akSAmx8nfyaIfmv18BodvModitjjghGc7412TUtc/VMxOTRq+KCqPOzqVW6jTtza8YCDzha7TzyASFVedUXgfiUFmpE0Sw3nrSxSwJWa6uF62jGYoK9VdXlnsyZEjP6Bejh1mR9qsSkShVsNPLh9Ecv4v2vZNKbg0pUNCIY0sQbfWdSEEpkwc3wgotKreRT+znBypPEvfEPGBsu5NkhIplHhiE/JSWB5+OZOpMo3FPLwaauzUjQnTx28WGlIpYoUqHD/+0DSAQ08mRzphtNWw== 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=Uzcg/Qx4uWE5TmMslyrU5wgEnULzT9L//kmlWmrOmrg=; b=dmPlBcaPQCGvM9pvWKPQb/Uht49o6sV/0t2tyWCePBUwqG+6UYO5mlu/xhBbQp+JCT7Tb5j0gk2gcz16fQ8wbU5e2xM70zPNWKPYd2moDgzy577HsZNJpqJZyfz61EmmzqcfUpQ4TvBKBCiNFBir8Q8qERc6/2oAsYfZRYGe+/E= Received: from DB8PR04MB6747.eurprd04.prod.outlook.com (20.179.250.159) by DB8PR04MB7067.eurprd04.prod.outlook.com (52.135.62.80) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2707.21; Thu, 6 Feb 2020 12:25:59 +0000 Received: from DB8PR04MB6747.eurprd04.prod.outlook.com ([fe80::104b:e88b:b0d3:cdaa]) by DB8PR04MB6747.eurprd04.prod.outlook.com ([fe80::104b:e88b:b0d3:cdaa%4]) with mapi id 15.20.2686.035; Thu, 6 Feb 2020 12:25:59 +0000 From: "Z.q. Hou" To: Andrew Murray Subject: RE: [PATCHv9 04/12] PCI: mobiveil: Modularize the Mobiveil PCIe Host Bridge IP driver Thread-Topic: [PATCHv9 04/12] PCI: mobiveil: Modularize the Mobiveil PCIe Host Bridge IP driver Thread-Index: AQHVn1T8aFb5mY+RykmposxdjKSlyafoxCoAgCRaO/A= Date: Thu, 6 Feb 2020 12:25:59 +0000 Message-ID: References: <20191120034451.30102-1-Zhiqiang.Hou@nxp.com> <20191120034451.30102-5-Zhiqiang.Hou@nxp.com> <20200113110548.GJ42593@e119886-lin.cambridge.arm.com> In-Reply-To: <20200113110548.GJ42593@e119886-lin.cambridge.arm.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: spf=none (sender IP is ) smtp.mailfrom=zhiqiang.hou@nxp.com; x-originating-ip: [92.121.68.129] x-ms-publictraffictype: Email x-ms-office365-filtering-ht: Tenant x-ms-office365-filtering-correlation-id: 2177e398-59e9-4610-420a-08d7aaffb959 x-ms-traffictypediagnostic: DB8PR04MB7067:|DB8PR04MB7067: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:5236; x-forefront-prvs: 0305463112 x-forefront-antispam-report: SFV:NSPM; SFS:(10009020)(4636009)(366004)(396003)(136003)(39860400002)(346002)(376002)(189003)(199004)(66476007)(81156014)(316002)(30864003)(8676002)(478600001)(54906003)(81166006)(66556008)(52536014)(5660300002)(7696005)(7416002)(66446008)(64756008)(33656002)(2906002)(66946007)(76116006)(9686003)(55016002)(6916009)(53546011)(6506007)(4326008)(26005)(86362001)(8936002)(186003)(71200400001)(559001)(579004); DIR:OUT; SFP:1101; SCL:1; SRVR:DB8PR04MB7067; H:DB8PR04MB6747.eurprd04.prod.outlook.com; FPR:; SPF:None; LANG:en; PTR:InfoNoRecords; MX:1; A:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: /M/f4du/cAPrIw5OPyTewk8fpTQfz0+NvO0m4zZs+RRGAYONnF3N3bs02pgJdh1ibkNjhW52AANaHbjP+GA4AkOZZ/vI7o/rJ80JYrBopPjRl8DWI/GQf/VaSoW3euoZxoA5odq7gDLK9T4UdLmS0nAySWjZip1R5RqLlRGklHFtu51Br330IWeuy41akh6G8+p1ovYobg6W0mI5pRhthUoPKSiTprcHXkoAl85ivfNbBMHZAmB6wEV36/jIf8b+uIpteNmQJLOorfV7hoGKw/XIedNOtySZ78Se+wOd3bSRk1Y8d2FhPSeShug3pVDLn25xBE4xy/spQ8If+ajSkZIFbAIZ/VDurVJJzRIEXlnUXjjMR5c1GDtmEFkXWk2RXwsiSq3lqGO5PeCLoquCkTMYwb9qJ0WSQ6c28WYYTsE/i5eV9jfNYI4RO6P3/G1I x-ms-exchange-antispam-messagedata: GhGIsyXR4BcaROJQC3ztr00zLYiNfaDxXfhyyesOwi7CH1QTWmd+EZh/b4S5lbBK4qRiyCm6uAH0ZP5IFZEAyQXEXbJTlDGBJwRzI91aMF/DX3TYC1WGffciu5f6WABKFOeErGa+scf/wcZuokV3lQ== MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 2177e398-59e9-4610-420a-08d7aaffb959 X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Feb 2020 12:25:59.7952 (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: L3Icq06zaYThh4lAn1AV1fYZADSrvvyYxIesrJVHnkiF/eH9iXtQtPl+MOy5Xngt+QT/Grv/bN3E8VjErujrmw== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DB8PR04MB7067 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200206_042603_483638_ABE66281 X-CRM114-Status: GOOD ( 24.27 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: "mark.rutland@arm.com" , "devicetree@vger.kernel.org" , "lorenzo.pieralisi@arm.com" , "m.karthikeyan@mobiveil.co.in" , "arnd@arndb.de" , "linux-pci@vger.kernel.org" , "l.subrahmanya@mobiveil.co.in" , "will.deacon@arm.com" , "linux-kernel@vger.kernel.org" , Leo Li , "M.h. Lian" , "robh+dt@kernel.org" , Mingkai Hu , Xiaowei Bao , "catalin.marinas@arm.com" , "bhelgaas@google.com" , "shawnguo@kernel.org" , "linux-arm-kernel@lists.infradead.org" Content-Type: text/plain; charset="gb2312" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org SGkgQW5kcmV3LA0KDQpUaGFua3MgYSBsb3QgZm9yIHlvdXIgcmV2aWV3IQ0KDQpCLlIsDQpaaGlx aWFuZw0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEFuZHJldyBNdXJy YXkgPGFuZHJldy5tdXJyYXlAYXJtLmNvbT4NCj4gU2VudDogMjAyMMTqMdTCMTPI1SAxOTowNg0K PiBUbzogWi5xLiBIb3UgPHpoaXFpYW5nLmhvdUBueHAuY29tPg0KPiBDYzogbGludXgtcGNpQHZn ZXIua2VybmVsLm9yZzsgbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQub3JnOw0KPiBk ZXZpY2V0cmVlQHZnZXIua2VybmVsLm9yZzsgbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsN Cj4gYmhlbGdhYXNAZ29vZ2xlLmNvbTsgcm9iaCtkdEBrZXJuZWwub3JnOyBhcm5kQGFybmRiLmRl Ow0KPiBtYXJrLnJ1dGxhbmRAYXJtLmNvbTsgbC5zdWJyYWhtYW55YUBtb2JpdmVpbC5jby5pbjsN Cj4gc2hhd25ndW9Aa2VybmVsLm9yZzsgbS5rYXJ0aGlrZXlhbkBtb2JpdmVpbC5jby5pbjsgTGVv IExpDQo+IDxsZW95YW5nLmxpQG54cC5jb20+OyBsb3JlbnpvLnBpZXJhbGlzaUBhcm0uY29tOw0K PiBjYXRhbGluLm1hcmluYXNAYXJtLmNvbTsgd2lsbC5kZWFjb25AYXJtLmNvbTsgTWluZ2thaSBI dQ0KPiA8bWluZ2thaS5odUBueHAuY29tPjsgTS5oLiBMaWFuIDxtaW5naHVhbi5saWFuQG54cC5j b20+OyBYaWFvd2VpIEJhbw0KPiA8eGlhb3dlaS5iYW9AbnhwLmNvbT4NCj4gU3ViamVjdDogUmU6 IFtQQVRDSHY5IDA0LzEyXSBQQ0k6IG1vYml2ZWlsOiBNb2R1bGFyaXplIHRoZSBNb2JpdmVpbCBQ Q0llDQo+IEhvc3QgQnJpZGdlIElQIGRyaXZlcg0KPiANCj4gT24gV2VkLCBOb3YgMjAsIDIwMTkg YXQgMDM6NDU6NDNBTSArMDAwMCwgWi5xLiBIb3Ugd3JvdGU6DQo+ID4gRnJvbTogSG91IFpoaXFp YW5nIDxaaGlxaWFuZy5Ib3VAbnhwLmNvbT4NCj4gPg0KPiA+IE1vZHVsYXJpemUgdGhlIE1vYml2 ZWlsIFBDSWUgaG9zdCBkcml2ZXIgYWNjb3JkaW5nIHRvIHRoZSBhYnN0cmFjdGlvbg0KPiA+IG9m IFJvb3QgQ29tcGxleCBhbmQgRW5kcG9pbnQgYW5kIG1vdmUgaXQgaW50byBhIG5ldyBkaXJlY3Rv cnkuDQo+ID4NCj4gPiBTcGxpdCB0aGUgUkMgcmVsYXRlZCByb3V0aW5lcyBpbnRvIHBjaWUtbW9i aXZlaWwtaG9zdC5jLCBhbmQgY29tbW9uDQo+ID4gcm91dGluZXMgaW50byBwY2llLW1vYml2ZWls LmMsIG1vdmUgdGhlIG1hY3JvIGRlZmluaXRpb25zIGFuZCBmdW5jdGlvbg0KPiA+IGRlY2xhcmF0 aW9ucyBpbnRvIHBjaWUtbW9iaXZlaWwuaCwgYW5kIHRoZSBNb2JpdmVpbCBwbGF0Zm9ybSByZWZl cmVuY2UNCj4gPiBjb2RlIGludG8gcGNpZS1tb2JpdmVpbC1wbGF0LmMuIFNvIHRoYXQgaXQgaXMg ZWFzeSB0byByZXVzZSB0aGUNCj4gPiBleHRyYWN0ZWQgcm91dGluZXMgdG8gYWRkIGEgbmV3IGhv c3QgZHJpdmVyLCB3aGljaCBpbnRlZ3JhdGVkIE1vYml2ZWlsDQo+ID4gUENJZSBHUEVYIElQLg0K PiA+DQo+ID4gU2lnbmVkLW9mZi1ieTogSG91IFpoaXFpYW5nIDxaaGlxaWFuZy5Ib3VAbnhwLmNv bT4NCj4gDQo+IFJldmlld2VkLWJ5OiBBbmRyZXcgTXVycmF5IDxhbmRyZXcubXVycmF5QGFybS5j b20+DQo+IA0KPiA+IC0tLQ0KPiA+IFY5Og0KPiA+ICAtIE5ldyBwYXRjaCBzcGxpdGVkIGZyb20g dGhlICMxIG9mIFY4IHBhdGNoZXMgdG8gbWFrZSBpdCBlYXN5IHRvIHJldmlldy4NCj4gPg0KPiA+ ICBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0N Cj4gPiAgZHJpdmVycy9wY2kvY29udHJvbGxlci9LY29uZmlnICAgICAgICAgICAgICAgIHwgIDEx ICstDQo+ID4gIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvTWFrZWZpbGUgICAgICAgICAgICAgICB8 ICAgMiArLQ0KPiA+ICBkcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL0tjb25maWcgICAg ICAgfCAgMjQgKysNCj4gPiAgZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9NYWtlZmls ZSAgICAgIHwgICA0ICsNCj4gPiAgLi4uL3BjaWUtbW9iaXZlaWwtaG9zdC5jfSAgICAgICAgICAg ICAgICAgICAgIHwgMzk4ICstLS0tLS0tLS0tLS0tLS0tLQ0KPiA+ICAuLi4vY29udHJvbGxlci9t b2JpdmVpbC9wY2llLW1vYml2ZWlsLXBsYXQuYyAgfCAgNjAgKysrDQo+ID4gIC4uLi9wY2kvY29u dHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLmMgICB8IDIyNyArKysrKysrKysrDQo+ID4g IC4uLi9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLmggICB8IDE3OCArKysr KysrKw0KPiA+ICA5IGZpbGVzIGNoYW5nZWQsIDQ5NyBpbnNlcnRpb25zKCspLCA0MDkgZGVsZXRp b25zKC0pICBjcmVhdGUgbW9kZQ0KPiA+IDEwMDY0NCBkcml2ZXJzL3BjaS9jb250cm9sbGVyL21v Yml2ZWlsL0tjb25maWcNCj4gPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvcGNpL2NvbnRy b2xsZXIvbW9iaXZlaWwvTWFrZWZpbGUNCj4gPiAgcmVuYW1lIGRyaXZlcnMvcGNpL2NvbnRyb2xs ZXIve3BjaWUtbW9iaXZlaWwuYyA9Pg0KPiA+IG1vYml2ZWlsL3BjaWUtbW9iaXZlaWwtaG9zdC5j fSAoNjElKSAgY3JlYXRlIG1vZGUgMTAwNjQ0DQo+ID4gZHJpdmVycy9wY2kvY29udHJvbGxlci9t b2JpdmVpbC9wY2llLW1vYml2ZWlsLXBsYXQuYw0KPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJp dmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLmMNCj4gPiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1tb2JpdmVp bC5oDQo+ID4NCj4gPiBkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUyBpbmRl eA0KPiA+IDNmN2Y4Y2RiYzQ3MS4uYTRhZDk5NjE5ZTUzIDEwMDY0NA0KPiA+IC0tLSBhL01BSU5U QUlORVJTDQo+ID4gKysrIGIvTUFJTlRBSU5FUlMNCj4gPiBAQCAtMTI2MTIsNyArMTI2MTIsNyBA QCBNOglIb3UgWmhpcWlhbmcNCj4gPFpoaXFpYW5nLkhvdUBueHAuY29tPg0KPiA+ICBMOglsaW51 eC1wY2lAdmdlci5rZXJuZWwub3JnDQo+ID4gIFM6CVN1cHBvcnRlZA0KPiA+ICBGOglEb2N1bWVu dGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvcGNpL21vYml2ZWlsLXBjaWUudHh0DQo+ID4gLUY6 CWRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1tb2JpdmVpbC5jDQo+ID4gK0Y6CWRyaXZlcnMv cGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1tb2JpdmVpbCoNCj4gPg0KPiA+ICBQQ0kgRFJJ VkVSIEZPUiBNVkVCVSAoTWFydmVsbCBBcm1hZGEgMzcwIGFuZCBBcm1hZGEgWFAgU09DDQo+IHN1 cHBvcnQpDQo+ID4gIE06CVRob21hcyBQZXRhenpvbmkgPHRob21hcy5wZXRhenpvbmlAYm9vdGxp bi5jb20+DQo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvS2NvbmZpZw0K PiA+IGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9LY29uZmlnIGluZGV4IGY1ZGU5MTE5ZThkMy4u NzRmZDMzMjc1NWFlDQo+ID4gMTAwNjQ0DQo+ID4gLS0tIGEvZHJpdmVycy9wY2kvY29udHJvbGxl ci9LY29uZmlnDQo+ID4gKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9LY29uZmlnDQo+ID4g QEAgLTI0MSwxNiArMjQxLDYgQEAgY29uZmlnIFBDSUVfTUVESUFURUsNCj4gPiAgCSAgU2F5IFkg aGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgUENJZSBjb250cm9sbGVyIHN1cHBvcnQgb24NCj4g PiAgCSAgTWVkaWFUZWsgU29Dcy4NCj4gPg0KPiA+IC1jb25maWcgUENJRV9NT0JJVkVJTA0KPiA+ IC0JYm9vbCAiTW9iaXZlaWwgQVhJIFBDSWUgY29udHJvbGxlciINCj4gPiAtCWRlcGVuZHMgb24g QVJDSF9aWU5RTVAgfHwgQ09NUElMRV9URVNUDQo+ID4gLQlkZXBlbmRzIG9uIE9GDQo+ID4gLQlk ZXBlbmRzIG9uIFBDSV9NU0lfSVJRX0RPTUFJTg0KPiA+IC0JaGVscA0KPiA+IC0JICBTYXkgWSBo ZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgTW9iaXZlaWwgQVhJIFBD SWUNCj4gPiAtCSAgU29mdCBJUC4gSXQgaGFzIHVwIHRvIDggb3V0Ym91bmQgYW5kIGluYm91bmQg d2luZG93cw0KPiA+IC0JICBmb3IgYWRkcmVzcyB0cmFuc2xhdGlvbiBhbmQgaXQgaXMgYSBQQ0ll IEdlbjQgSVAuDQo+ID4gLQ0KPiA+ICBjb25maWcgUENJRV9UQU5HT19TTVA4NzU5DQo+ID4gIAli b29sICJUYW5nbyBTTVA4NzU5IFBDSWUgY29udHJvbGxlciAoREFOR0VST1VTKSINCj4gPiAgCWRl cGVuZHMgb24gQVJDSF9UQU5HTyAmJiBQQ0lfTVNJICYmIE9GIEBAIC0yODksNCArMjc5LDUgQEAN Cj4gY29uZmlnDQo+ID4gUENJX0hZUEVSVl9JTlRFUkZBQ0UNCj4gPiAgCSAgaGF2ZSBhIGNvbW1v biBpbnRlcmZhY2Ugd2l0aCB0aGUgSHlwZXItViBQQ0kgZnJvbnRlbmQgZHJpdmVyLg0KPiA+DQo+ ID4gIHNvdXJjZSAiZHJpdmVycy9wY2kvY29udHJvbGxlci9kd2MvS2NvbmZpZyINCj4gPiArc291 cmNlICJkcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL0tjb25maWciDQo+ID4gIGVuZG1l bnUNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9NYWtlZmlsZQ0KPiA+ IGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9NYWtlZmlsZSBpbmRleCBhMmEyMmM5ZDkxYWYuLjQ0 NDE0Y2ZkNDVlYQ0KPiA+IDEwMDY0NA0KPiA+IC0tLSBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIv TWFrZWZpbGUNCj4gPiArKysgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL01ha2VmaWxlDQo+ID4g QEAgLTI3LDExICsyNywxMSBAQCBvYmotJChDT05GSUdfUENJRV9ST0NLQ0hJUCkgKz0gcGNpZS1y b2NrY2hpcC5vDQo+ID4gIG9iai0kKENPTkZJR19QQ0lFX1JPQ0tDSElQX0VQKSArPSBwY2llLXJv Y2tjaGlwLWVwLm8NCj4gPiAgb2JqLSQoQ09ORklHX1BDSUVfUk9DS0NISVBfSE9TVCkgKz0gcGNp ZS1yb2NrY2hpcC1ob3N0Lm8NCj4gPiAgb2JqLSQoQ09ORklHX1BDSUVfTUVESUFURUspICs9IHBj aWUtbWVkaWF0ZWsubw0KPiA+IC1vYmotJChDT05GSUdfUENJRV9NT0JJVkVJTCkgKz0gcGNpZS1t b2JpdmVpbC5vDQo+ID4gIG9iai0kKENPTkZJR19QQ0lFX1RBTkdPX1NNUDg3NTkpICs9IHBjaWUt dGFuZ28ubw0KPiA+ICBvYmotJChDT05GSUdfVk1EKSArPSB2bWQubw0KPiA+ICAjIHBjaWUtaGlz aS5vIHF1aXJrcyBhcmUgbmVlZGVkIGV2ZW4gd2l0aG91dCBDT05GSUdfUENJRV9EVw0KPiA+ICBv YmoteQkJCQkrPSBkd2MvDQo+ID4gK29iai15CQkJCSs9IG1vYml2ZWlsLw0KPiA+DQo+ID4NCj4g PiAgIyBUaGUgZm9sbG93aW5nIGRyaXZlcnMgYXJlIGZvciBkZXZpY2VzIHRoYXQgdXNlIHRoZSBn ZW5lcmljIEFDUEkNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2Jp dmVpbC9LY29uZmlnDQo+ID4gYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL0tjb25m aWcNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uNjQz NDNjMDdiZmVkDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvcGNpL2NvbnRy b2xsZXIvbW9iaXZlaWwvS2NvbmZpZw0KPiA+IEBAIC0wLDAgKzEsMjQgQEANCj4gPiArIyBTUERY LUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPiA+ICsNCj4gPiArbWVudSAiTW9iaXZlaWwg UENJZSBDb3JlIFN1cHBvcnQiDQo+ID4gKwlkZXBlbmRzIG9uIFBDSQ0KPiA+ICsNCj4gPiArY29u ZmlnIFBDSUVfTU9CSVZFSUwNCj4gPiArCWJvb2wNCj4gPiArDQo+ID4gK2NvbmZpZyBQQ0lFX01P QklWRUlMX0hPU1QNCj4gPiArCWJvb2wNCj4gPiArCWRlcGVuZHMgb24gUENJX01TSV9JUlFfRE9N QUlODQo+ID4gKwlzZWxlY3QgUENJRV9NT0JJVkVJTA0KPiA+ICsNCj4gPiArY29uZmlnIFBDSUVf TU9CSVZFSUxfUExBVA0KPiA+ICsJYm9vbCAiTW9iaXZlaWwgQVhJIFBDSWUgY29udHJvbGxlciIN Cj4gPiArCWRlcGVuZHMgb24gQVJDSF9aWU5RTVAgfHwgQ09NUElMRV9URVNUDQo+ID4gKwlkZXBl bmRzIG9uIE9GDQo+ID4gKwlzZWxlY3QgUENJRV9NT0JJVkVJTF9IT1NUDQo+ID4gKwloZWxwDQo+ ID4gKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBN b2JpdmVpbCBBWEkgUENJZQ0KPiA+ICsJICBTb2Z0IElQLiBJdCBoYXMgdXAgdG8gOCBvdXRib3Vu ZCBhbmQgaW5ib3VuZCB3aW5kb3dzDQo+ID4gKwkgIGZvciBhZGRyZXNzIHRyYW5zbGF0aW9uIGFu ZCBpdCBpcyBhIFBDSWUgR2VuNCBJUC4NCj4gPiArDQo+ID4gK2VuZG1lbnUNCj4gPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9NYWtlZmlsZQ0KPiA+IGIvZHJp dmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9NYWtlZmlsZQ0KPiA+IG5ldyBmaWxlIG1vZGUg MTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi45ZmI2ZDFjNjUwNGQNCj4gPiAtLS0gL2Rl di9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9NYWtlZmls ZQ0KPiA+IEBAIC0wLDAgKzEsNCBAQA0KPiA+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBH UEwtMi4wDQo+ID4gK29iai0kKENPTkZJR19QQ0lFX01PQklWRUlMKSArPSBwY2llLW1vYml2ZWls Lm8NCj4gPiArb2JqLSQoQ09ORklHX1BDSUVfTU9CSVZFSUxfSE9TVCkgKz0gcGNpZS1tb2JpdmVp bC1ob3N0Lm8NCj4gPiArb2JqLSQoQ09ORklHX1BDSUVfTU9CSVZFSUxfUExBVCkgKz0gcGNpZS1t b2JpdmVpbC1wbGF0Lm8NCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9w Y2llLW1vYml2ZWlsLmMNCj4gPiBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNp ZS1tb2JpdmVpbC1ob3N0LmMNCj4gPiBzaW1pbGFyaXR5IGluZGV4IDYxJQ0KPiA+IHJlbmFtZSBm cm9tIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1tb2JpdmVpbC5jDQo+ID4gcmVuYW1lIHRv IGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1tb2JpdmVpbC1ob3N0LmMNCj4g PiBpbmRleCA1MTJiMjdhMDUzNmUuLjJjYzQyNGU3OGQzMyAxMDA2NDQNCj4gPiAtLS0gYS9kcml2 ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtbW9iaXZlaWwuYw0KPiA+ICsrKyBiL2RyaXZlcnMvcGNp L2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1tb2JpdmVpbC1ob3N0LmMNCj4gPiBAQCAtOSw3ICs5 LDYgQEANCj4gPiAgICogUmVjb2RlOiBIb3UgWmhpcWlhbmcgPFpoaXFpYW5nLkhvdUBueHAuY29t Pg0KPiA+ICAgKi8NCj4gPg0KPiA+IC0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4NCj4gPiAgI2lu Y2x1ZGUgPGxpbnV4L2luaXQuaD4NCj4gPiAgI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPg0K PiA+ICAjaW5jbHVkZSA8bGludXgvaXJxLmg+DQo+ID4gQEAgLTI2LDI2NSArMjUsNyBAQA0KPiA+ ICAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+ID4gICNpbmNsdWRlIDxsaW51 eC9zbGFiLmg+DQo+ID4NCj4gPiAtI2luY2x1ZGUgIi4uL3BjaS5oIg0KPiA+IC0NCj4gPiAtLyog cmVnaXN0ZXIgb2Zmc2V0cyBhbmQgYml0IHBvc2l0aW9ucyAqLw0KPiA+IC0NCj4gPiAtLyoNCj4g PiAtICogdHJhbnNsYXRpb24gdGFibGVzIGFyZSBncm91cGVkIGludG8gd2luZG93cywgZWFjaCB3 aW5kb3cgcmVnaXN0ZXJzDQo+ID4gYXJlDQo+ID4gLSAqIGdyb3VwZWQgaW50byBibG9ja3Mgb2Yg NCBvciAxNiByZWdpc3RlcnMgZWFjaA0KPiA+IC0gKi8NCj4gPiAtI2RlZmluZSBQQUJfUkVHX0JM T0NLX1NJWkUJCTE2DQo+ID4gLSNkZWZpbmUgUEFCX0VYVF9SRUdfQkxPQ0tfU0laRQkJNA0KPiA+ IC0NCj4gPiAtI2RlZmluZSBQQUJfUkVHX0FERFIob2Zmc2V0LCB3aW4pCVwNCj4gPiAtCShvZmZz ZXQgKyAod2luICogUEFCX1JFR19CTE9DS19TSVpFKSkNCj4gPiAtI2RlZmluZSBQQUJfRVhUX1JF R19BRERSKG9mZnNldCwgd2luKQlcDQo+ID4gLQkob2Zmc2V0ICsgKHdpbiAqIFBBQl9FWFRfUkVH X0JMT0NLX1NJWkUpKQ0KPiA+IC0NCj4gPiAtI2RlZmluZSBMVFNTTV9TVEFUVVMJCQkweDA0MDQN Cj4gPiAtI2RlZmluZSAgTFRTU01fU1RBVFVTX0wwX01BU0sJCTB4M2YNCj4gPiAtI2RlZmluZSAg TFRTU01fU1RBVFVTX0wwCQkweDJkDQo+ID4gLQ0KPiA+IC0jZGVmaW5lIFBBQl9DVFJMCQkJMHgw ODA4DQo+ID4gLSNkZWZpbmUgIEFNQkFfUElPX0VOQUJMRV9TSElGVAkJMA0KPiA+IC0jZGVmaW5l ICBQRVhfUElPX0VOQUJMRV9TSElGVAkJMQ0KPiA+IC0jZGVmaW5lICBQQUdFX1NFTF9TSElGVAkJ CTEzDQo+ID4gLSNkZWZpbmUgIFBBR0VfU0VMX01BU0sJCQkweDNmDQo+ID4gLSNkZWZpbmUgIFBB R0VfTE9fTUFTSwkJCTB4M2ZmDQo+ID4gLSNkZWZpbmUgIFBBR0VfU0VMX09GRlNFVF9TSElGVAkJ MTANCj4gPiAtDQo+ID4gLSNkZWZpbmUgUEFCX0FYSV9QSU9fQ1RSTAkJMHgwODQwDQo+ID4gLSNk ZWZpbmUgIEFQSU9fRU5fTUFTSwkJCTB4Zg0KPiA+IC0NCj4gPiAtI2RlZmluZSBQQUJfUEVYX1BJ T19DVFJMCQkweDA4YzANCj4gPiAtI2RlZmluZSAgUElPX0VOQUJMRV9TSElGVAkJMA0KPiA+IC0N Cj4gPiAtI2RlZmluZSBQQUJfSU5UUF9BTUJBX01JU0NfRU5CCQkweDBiMGMNCj4gPiAtI2RlZmlu ZSBQQUJfSU5UUF9BTUJBX01JU0NfU1RBVAkJMHgwYjFjDQo+ID4gLSNkZWZpbmUgIFBBQl9JTlRQ X0lOVFhfTUFTSwkJMHgwMWUwDQo+ID4gLSNkZWZpbmUgIFBBQl9JTlRQX01TSV9NQVNLCQkweDgN Cj4gPiAtDQo+ID4gLSNkZWZpbmUgUEFCX0FYSV9BTUFQX0NUUkwod2luKQkJUEFCX1JFR19BRERS KDB4MGJhMCwgd2luKQ0KPiA+IC0jZGVmaW5lICBXSU5fRU5BQkxFX1NISUZUCQkwDQo+ID4gLSNk ZWZpbmUgIFdJTl9UWVBFX1NISUZUCQkJMQ0KPiA+IC0jZGVmaW5lICBXSU5fVFlQRV9NQVNLCQkJ MHgzDQo+ID4gLSNkZWZpbmUgIFdJTl9TSVpFX01BU0sJCQkweGZmZmZmYzAwDQo+ID4gLQ0KPiA+ IC0jZGVmaW5lIFBBQl9FWFRfQVhJX0FNQVBfU0laRSh3aW4pCVBBQl9FWFRfUkVHX0FERFIoMHhi YWYwLA0KPiB3aW4pDQo+ID4gLQ0KPiA+IC0jZGVmaW5lIFBBQl9FWFRfQVhJX0FNQVBfQVhJX1dJ Tih3aW4pDQo+IAlQQUJfRVhUX1JFR19BRERSKDB4ODBhMCwgd2luKQ0KPiA+IC0jZGVmaW5lIFBB Ql9BWElfQU1BUF9BWElfV0lOKHdpbikJUEFCX1JFR19BRERSKDB4MGJhNCwgd2luKQ0KPiA+IC0j ZGVmaW5lICBBWElfV0lORE9XX0FMSUdOX01BU0sJCTMNCj4gPiAtDQo+ID4gLSNkZWZpbmUgUEFC X0FYSV9BTUFQX1BFWF9XSU5fTCh3aW4pCVBBQl9SRUdfQUREUigweDBiYTgsDQo+IHdpbikNCj4g PiAtI2RlZmluZSAgUEFCX0JVU19TSElGVAkJCTI0DQo+ID4gLSNkZWZpbmUgIFBBQl9ERVZJQ0Vf U0hJRlQJCTE5DQo+ID4gLSNkZWZpbmUgIFBBQl9GVU5DVElPTl9TSElGVAkJMTYNCj4gPiAtDQo+ ID4gLSNkZWZpbmUgUEFCX0FYSV9BTUFQX1BFWF9XSU5fSCh3aW4pCVBBQl9SRUdfQUREUigweDBi YWMsDQo+IHdpbikNCj4gPiAtI2RlZmluZSBQQUJfSU5UUF9BWElfUElPX0NMQVNTCQkweDQ3NA0K PiA+IC0NCj4gPiAtI2RlZmluZSBQQUJfUEVYX0FNQVBfQ1RSTCh3aW4pCQlQQUJfUkVHX0FERFIo MHg0YmEwLCB3aW4pDQo+ID4gLSNkZWZpbmUgIEFNQVBfQ1RSTF9FTl9TSElGVAkJMA0KPiA+IC0j ZGVmaW5lICBBTUFQX0NUUkxfVFlQRV9TSElGVAkJMQ0KPiA+IC0jZGVmaW5lICBBTUFQX0NUUkxf VFlQRV9NQVNLCQkzDQo+ID4gLQ0KPiA+IC0jZGVmaW5lIFBBQl9FWFRfUEVYX0FNQVBfU0laRU4o d2luKQlQQUJfRVhUX1JFR19BRERSKDB4YmVmMCwNCj4gd2luKQ0KPiA+IC0jZGVmaW5lIFBBQl9F WFRfUEVYX0FNQVBfQVhJX1dJTih3aW4pDQo+IAlQQUJfRVhUX1JFR19BRERSKDB4YjRhMCwgd2lu KQ0KPiA+IC0jZGVmaW5lIFBBQl9QRVhfQU1BUF9BWElfV0lOKHdpbikJUEFCX1JFR19BRERSKDB4 NGJhNCwgd2luKQ0KPiA+IC0jZGVmaW5lIFBBQl9QRVhfQU1BUF9QRVhfV0lOX0wod2luKQlQQUJf UkVHX0FERFIoMHg0YmE4LA0KPiB3aW4pDQo+ID4gLSNkZWZpbmUgUEFCX1BFWF9BTUFQX1BFWF9X SU5fSCh3aW4pCVBBQl9SRUdfQUREUigweDRiYWMsDQo+IHdpbikNCj4gPiAtDQo+ID4gLS8qIHN0 YXJ0aW5nIG9mZnNldCBvZiBJTlRYIGJpdHMgaW4gc3RhdHVzIHJlZ2lzdGVyICovDQo+ID4gLSNk ZWZpbmUgUEFCX0lOVFhfU1RBUlQJCQk1DQo+ID4gLQ0KPiA+IC0vKiBzdXBwb3J0ZWQgbnVtYmVy IG9mIE1TSSBpbnRlcnJ1cHRzICovDQo+ID4gLSNkZWZpbmUgUENJX05VTV9NU0kJCQkxNg0KPiA+ IC0NCj4gPiAtLyogTVNJIHJlZ2lzdGVycyAqLw0KPiA+IC0jZGVmaW5lIE1TSV9CQVNFX0xPX09G RlNFVAkJMHgwNA0KPiA+IC0jZGVmaW5lIE1TSV9CQVNFX0hJX09GRlNFVAkJMHgwOA0KPiA+IC0j ZGVmaW5lIE1TSV9TSVpFX09GRlNFVAkJCTB4MGMNCj4gPiAtI2RlZmluZSBNU0lfRU5BQkxFX09G RlNFVAkJMHgxNA0KPiA+IC0jZGVmaW5lIE1TSV9TVEFUVVNfT0ZGU0VUCQkweDE4DQo+ID4gLSNk ZWZpbmUgTVNJX0RBVEFfT0ZGU0VUCQkJMHgyMA0KPiA+IC0jZGVmaW5lIE1TSV9BRERSX0xfT0ZG U0VUCQkweDI0DQo+ID4gLSNkZWZpbmUgTVNJX0FERFJfSF9PRkZTRVQJCTB4MjgNCj4gPiAtDQo+ ID4gLS8qIG91dGJvdW5kIGFuZCBpbmJvdW5kIHdpbmRvdyBkZWZpbml0aW9ucyAqLw0KPiA+IC0j ZGVmaW5lIFdJTl9OVU1fMAkJCTANCj4gPiAtI2RlZmluZSBXSU5fTlVNXzEJCQkxDQo+ID4gLSNk ZWZpbmUgQ0ZHX1dJTkRPV19UWVBFCQkJMA0KPiA+IC0jZGVmaW5lIElPX1dJTkRPV19UWVBFCQkJ MQ0KPiA+IC0jZGVmaW5lIE1FTV9XSU5ET1dfVFlQRQkJCTINCj4gPiAtI2RlZmluZSBJQl9XSU5f U0laRQkJCSgodTY0KTI1NiAqIDEwMjQgKiAxMDI0ICogMTAyNCkNCj4gPiAtI2RlZmluZSBNQVhf UElPX1dJTkRPV1MJCQk4DQo+ID4gLQ0KPiA+IC0vKiBQYXJhbWV0ZXJzIGZvciB0aGUgd2FpdGlu ZyBmb3IgbGluayB1cCByb3V0aW5lICovDQo+ID4gLSNkZWZpbmUgTElOS19XQUlUX01BWF9SRVRS SUVTCQkxMA0KPiA+IC0jZGVmaW5lIExJTktfV0FJVF9NSU4JCQk5MDAwMA0KPiA+IC0jZGVmaW5l IExJTktfV0FJVF9NQVgJCQkxMDAwMDANCj4gPiAtDQo+ID4gLSNkZWZpbmUgUEFHRURfQUREUl9C TkRSWQkJMHhjMDANCj4gPiAtI2RlZmluZSBPRkZTRVRfVE9fUEFHRV9BRERSKG9mZikJXA0KPiA+ IC0JKChvZmYgJiBQQUdFX0xPX01BU0spIHwgUEFHRURfQUREUl9CTkRSWSkNCj4gPiAtI2RlZmlu ZSBPRkZTRVRfVE9fUEFHRV9JRFgob2ZmKQkJXA0KPiA+IC0JKChvZmYgPj4gUEFHRV9TRUxfT0ZG U0VUX1NISUZUKSAmIFBBR0VfU0VMX01BU0spDQo+ID4gLQ0KPiA+IC1zdHJ1Y3QgbW9iaXZlaWxf bXNpIHsJCQkvKiBNU0kgaW5mb3JtYXRpb24gKi8NCj4gPiAtCXN0cnVjdCBtdXRleCBsb2NrOwkJ LyogcHJvdGVjdCBiaXRtYXAgdmFyaWFibGUgKi8NCj4gPiAtCXN0cnVjdCBpcnFfZG9tYWluICpt c2lfZG9tYWluOw0KPiA+IC0Jc3RydWN0IGlycV9kb21haW4gKmRldl9kb21haW47DQo+ID4gLQlw aHlzX2FkZHJfdCBtc2lfcGFnZXNfcGh5czsNCj4gPiAtCWludCBudW1fb2ZfdmVjdG9yczsNCj4g PiAtCURFQ0xBUkVfQklUTUFQKG1zaV9pcnFfaW5fdXNlLCBQQ0lfTlVNX01TSSk7DQo+ID4gLX07 DQo+ID4gLQ0KPiA+IC1zdHJ1Y3Qgcm9vdF9wb3J0IHsNCj4gPiAtCWNoYXIgcm9vdF9idXNfbnI7 DQo+ID4gLQl2b2lkIF9faW9tZW0gKmNvbmZpZ19heGlfc2xhdmVfYmFzZTsJLyogZW5kcG9pbnQg Y29uZmlnIGJhc2UgKi8NCj4gPiAtCXN0cnVjdCByZXNvdXJjZSAqb2JfaW9fcmVzOw0KPiA+IC0J aW50IGlycTsNCj4gPiAtCXJhd19zcGlubG9ja190IGludHhfbWFza19sb2NrOw0KPiA+IC0Jc3Ry dWN0IGlycV9kb21haW4gKmludHhfZG9tYWluOw0KPiA+IC0Jc3RydWN0IG1vYml2ZWlsX21zaSBt c2k7DQo+ID4gLQlzdHJ1Y3QgcGNpX2hvc3RfYnJpZGdlICpicmlkZ2U7DQo+ID4gLX07DQo+ID4g LQ0KPiA+IC1zdHJ1Y3QgbW9iaXZlaWxfcGNpZSB7DQo+ID4gLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2Ow0KPiA+IC0Jdm9pZCBfX2lvbWVtICpjc3JfYXhpX3NsYXZlX2Jhc2U7CS8qIHJv b3QgcG9ydCBjb25maWcgYmFzZSAqLw0KPiA+IC0Jdm9pZCBfX2lvbWVtICphcGJfY3NyX2Jhc2U7 CS8qIE1TSSByZWdpc3RlciBiYXNlICovDQo+ID4gLQlwaHlzX2FkZHJfdCBwY2llX3JlZ19iYXNl OwkvKiBQaHlzaWNhbCBQQ0llIENvbnRyb2xsZXIgQmFzZSAqLw0KPiA+IC0JaW50IGFwaW9fd2lu czsNCj4gPiAtCWludCBwcGlvX3dpbnM7DQo+ID4gLQlpbnQgb2Jfd2luc19jb25maWd1cmVkOwkJ LyogY29uZmlndXJlZCBvdXRib3VuZCB3aW5kb3dzICovDQo+ID4gLQlpbnQgaWJfd2luc19jb25m aWd1cmVkOwkJLyogY29uZmlndXJlZCBpbmJvdW5kIHdpbmRvd3MgKi8NCj4gPiAtCXN0cnVjdCBy b290X3BvcnQgcnA7DQo+ID4gLX07DQo+ID4gLQ0KPiA+IC0vKg0KPiA+IC0gKiBtb2JpdmVpbF9w Y2llX3NlbF9wYWdlIC0gcm91dGluZSB0byBhY2Nlc3MgcGFnZWQgcmVnaXN0ZXINCj4gPiAtICoN Cj4gPiAtICogUmVnaXN0ZXJzIHdob3NlIGFkZHJlc3MgZ3JlYXRlciB0aGFuIFBBR0VEX0FERFJf Qk5EUlkgKDB4YzAwKSBhcmUNCj4gPiBwYWdlZCwNCj4gPiAtICogZm9yIHRoaXMgc2NoZW1lIHRv IHdvcmsgZXh0cmFjdGVkIGhpZ2hlciA2IGJpdHMgb2YgdGhlIG9mZnNldCB3aWxsDQo+ID4gYmUN Cj4gPiAtICogd3JpdHRlbiB0byBwZ19zZWwgZmllbGQgb2YgUEFCX0NUUkwgcmVnaXN0ZXIgYW5k IHJlc3Qgb2YgdGhlIGxvd2VyDQo+ID4gMTANCj4gPiAtICogYml0cyBlbmFibGVkIHdpdGggUEFH RURfQUREUl9CTkRSWSBhcmUgdXNlZCBhcyBvZmZzZXQgb2YgdGhlDQo+IHJlZ2lzdGVyLg0KPiA+ IC0gKi8NCj4gPiAtc3RhdGljIHZvaWQgbW9iaXZlaWxfcGNpZV9zZWxfcGFnZShzdHJ1Y3QgbW9i aXZlaWxfcGNpZSAqcGNpZSwgdTgNCj4gPiBwZ19pZHgpIC17DQo+ID4gLQl1MzIgdmFsOw0KPiA+ IC0NCj4gPiAtCXZhbCA9IHJlYWRsKHBjaWUtPmNzcl9heGlfc2xhdmVfYmFzZSArIFBBQl9DVFJM KTsNCj4gPiAtCXZhbCAmPSB+KFBBR0VfU0VMX01BU0sgPDwgUEFHRV9TRUxfU0hJRlQpOw0KPiA+ IC0JdmFsIHw9IChwZ19pZHggJiBQQUdFX1NFTF9NQVNLKSA8PCBQQUdFX1NFTF9TSElGVDsNCj4g PiAtDQo+ID4gLQl3cml0ZWwodmFsLCBwY2llLT5jc3JfYXhpX3NsYXZlX2Jhc2UgKyBQQUJfQ1RS TCk7DQo+ID4gLX0NCj4gPiAtDQo+ID4gLXN0YXRpYyB2b2lkICptb2JpdmVpbF9wY2llX2NvbXBf YWRkcihzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgdTMyDQo+ID4gb2ZmKSAtew0KPiA+IC0J aWYgKG9mZiA8IFBBR0VEX0FERFJfQk5EUlkpIHsNCj4gPiAtCQkvKiBGb3IgZGlyZWN0bHkgYWNj ZXNzZWQgcmVnaXN0ZXJzLCBjbGVhciB0aGUgcGdfc2VsIGZpZWxkICovDQo+ID4gLQkJbW9iaXZl aWxfcGNpZV9zZWxfcGFnZShwY2llLCAwKTsNCj4gPiAtCQlyZXR1cm4gcGNpZS0+Y3NyX2F4aV9z bGF2ZV9iYXNlICsgb2ZmOw0KPiA+IC0JfQ0KPiA+IC0NCj4gPiAtCW1vYml2ZWlsX3BjaWVfc2Vs X3BhZ2UocGNpZSwgT0ZGU0VUX1RPX1BBR0VfSURYKG9mZikpOw0KPiA+IC0JcmV0dXJuIHBjaWUt PmNzcl9heGlfc2xhdmVfYmFzZSArIE9GRlNFVF9UT19QQUdFX0FERFIob2ZmKTsNCj4gPiAtfQ0K PiA+IC0NCj4gPiAtc3RhdGljIGludCBtb2JpdmVpbF9wY2llX3JlYWQodm9pZCBfX2lvbWVtICph ZGRyLCBpbnQgc2l6ZSwgdTMyICp2YWwpDQo+ID4gLXsNCj4gPiAtCWlmICgodWludHB0cl90KWFk ZHIgJiAoc2l6ZSAtIDEpKSB7DQo+ID4gLQkJKnZhbCA9IDA7DQo+ID4gLQkJcmV0dXJuIFBDSUJJ T1NfQkFEX1JFR0lTVEVSX05VTUJFUjsNCj4gPiAtCX0NCj4gPiAtDQo+ID4gLQlzd2l0Y2ggKHNp emUpIHsNCj4gPiAtCWNhc2UgNDoNCj4gPiAtCQkqdmFsID0gcmVhZGwoYWRkcik7DQo+ID4gLQkJ YnJlYWs7DQo+ID4gLQljYXNlIDI6DQo+ID4gLQkJKnZhbCA9IHJlYWR3KGFkZHIpOw0KPiA+IC0J CWJyZWFrOw0KPiA+IC0JY2FzZSAxOg0KPiA+IC0JCSp2YWwgPSByZWFkYihhZGRyKTsNCj4gPiAt CQlicmVhazsNCj4gPiAtCWRlZmF1bHQ6DQo+ID4gLQkJKnZhbCA9IDA7DQo+ID4gLQkJcmV0dXJu IFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsNCj4gPiAtCX0NCj4gPiAtDQo+ID4gLQlyZXR1 cm4gUENJQklPU19TVUNDRVNTRlVMOw0KPiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMgaW50IG1v Yml2ZWlsX3BjaWVfd3JpdGUodm9pZCBfX2lvbWVtICphZGRyLCBpbnQgc2l6ZSwgdTMyIHZhbCkN Cj4gPiAtew0KPiA+IC0JaWYgKCh1aW50cHRyX3QpYWRkciAmIChzaXplIC0gMSkpDQo+ID4gLQkJ cmV0dXJuIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsNCj4gPiAtDQo+ID4gLQlzd2l0Y2gg KHNpemUpIHsNCj4gPiAtCWNhc2UgNDoNCj4gPiAtCQl3cml0ZWwodmFsLCBhZGRyKTsNCj4gPiAt CQlicmVhazsNCj4gPiAtCWNhc2UgMjoNCj4gPiAtCQl3cml0ZXcodmFsLCBhZGRyKTsNCj4gPiAt CQlicmVhazsNCj4gPiAtCWNhc2UgMToNCj4gPiAtCQl3cml0ZWIodmFsLCBhZGRyKTsNCj4gPiAt CQlicmVhazsNCj4gPiAtCWRlZmF1bHQ6DQo+ID4gLQkJcmV0dXJuIFBDSUJJT1NfQkFEX1JFR0lT VEVSX05VTUJFUjsNCj4gPiAtCX0NCj4gPiAtDQo+ID4gLQlyZXR1cm4gUENJQklPU19TVUNDRVNT RlVMOw0KPiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMgdTMyIG1vYml2ZWlsX2Nzcl9yZWFkKHN0 cnVjdCBtb2JpdmVpbF9wY2llICpwY2llLCB1MzIgb2ZmLA0KPiA+IHNpemVfdCBzaXplKSAtew0K PiA+IC0Jdm9pZCAqYWRkcjsNCj4gPiAtCXUzMiB2YWw7DQo+ID4gLQlpbnQgcmV0Ow0KPiA+IC0N Cj4gPiAtCWFkZHIgPSBtb2JpdmVpbF9wY2llX2NvbXBfYWRkcihwY2llLCBvZmYpOw0KPiA+IC0N Cj4gPiAtCXJldCA9IG1vYml2ZWlsX3BjaWVfcmVhZChhZGRyLCBzaXplLCAmdmFsKTsNCj4gPiAt CWlmIChyZXQpDQo+ID4gLQkJZGV2X2VycigmcGNpZS0+cGRldi0+ZGV2LCAicmVhZCBDU1IgYWRk cmVzcyBmYWlsZWRcbiIpOw0KPiA+IC0NCj4gPiAtCXJldHVybiB2YWw7DQo+ID4gLX0NCj4gPiAt DQo+ID4gLXN0YXRpYyB2b2lkIG1vYml2ZWlsX2Nzcl93cml0ZShzdHJ1Y3QgbW9iaXZlaWxfcGNp ZSAqcGNpZSwgdTMyIHZhbCwgdTMyIG9mZiwNCj4gPiAtCQkJICAgICAgIHNpemVfdCBzaXplKQ0K PiA+IC17DQo+ID4gLQl2b2lkICphZGRyOw0KPiA+IC0JaW50IHJldDsNCj4gPiAtDQo+ID4gLQlh ZGRyID0gbW9iaXZlaWxfcGNpZV9jb21wX2FkZHIocGNpZSwgb2ZmKTsNCj4gPiAtDQo+ID4gLQly ZXQgPSBtb2JpdmVpbF9wY2llX3dyaXRlKGFkZHIsIHNpemUsIHZhbCk7DQo+ID4gLQlpZiAocmV0 KQ0KPiA+IC0JCWRldl9lcnIoJnBjaWUtPnBkZXYtPmRldiwgIndyaXRlIENTUiBhZGRyZXNzIGZh aWxlZFxuIik7DQo+ID4gLX0NCj4gPiAtDQo+ID4gLXN0YXRpYyB1MzIgbW9iaXZlaWxfY3NyX3Jl YWRsKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llLCB1MzIgb2ZmKSAtew0KPiA+IC0JcmV0dXJu IG1vYml2ZWlsX2Nzcl9yZWFkKHBjaWUsIG9mZiwgMHg0KTsNCj4gPiAtfQ0KPiA+IC0NCj4gPiAt c3RhdGljIHZvaWQgbW9iaXZlaWxfY3NyX3dyaXRlbChzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNp ZSwgdTMyIHZhbCwNCj4gPiB1MzIgb2ZmKSAtew0KPiA+IC0JbW9iaXZlaWxfY3NyX3dyaXRlKHBj aWUsIHZhbCwgb2ZmLCAweDQpOw0KPiA+IC19DQo+ID4gLQ0KPiA+IC1zdGF0aWMgYm9vbCBtb2Jp dmVpbF9wY2llX2xpbmtfdXAoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUpIC17DQo+ID4gLQly ZXR1cm4gKG1vYml2ZWlsX2Nzcl9yZWFkbChwY2llLCBMVFNTTV9TVEFUVVMpICYNCj4gPiAtCQlM VFNTTV9TVEFUVVNfTDBfTUFTSykgPT0gTFRTU01fU1RBVFVTX0wwOw0KPiA+IC19DQo+ID4gKyNp bmNsdWRlICJwY2llLW1vYml2ZWlsLmgiDQo+ID4NCj4gPiAgc3RhdGljIGJvb2wgbW9iaXZlaWxf cGNpZV92YWxpZF9kZXZpY2Uoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQNCj4gPiBpbnQg ZGV2Zm4pICB7IEBAIC00NjQsMTAzICsyMDUsNiBAQCBzdGF0aWMgaW50DQo+ID4gbW9iaXZlaWxf cGNpZV9wYXJzZV9kdChzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSkNCj4gPiAgCXJldHVybiAw Ow0KPiA+ICB9DQo+ID4NCj4gPiAtc3RhdGljIHZvaWQgcHJvZ3JhbV9pYl93aW5kb3dzKHN0cnVj dCBtb2JpdmVpbF9wY2llICpwY2llLCBpbnQgd2luX251bSwNCj4gPiAtCQkJICAgICAgIHU2NCBj cHVfYWRkciwgdTY0IHBjaV9hZGRyLCB1MzIgdHlwZSwgdTY0IHNpemUpDQo+ID4gLXsNCj4gPiAt CXUzMiB2YWx1ZTsNCj4gPiAtCXU2NCBzaXplNjQgPSB+KHNpemUgLSAxKTsNCj4gPiAtDQo+ID4g LQlpZiAod2luX251bSA+PSBwY2llLT5wcGlvX3dpbnMpIHsNCj4gPiAtCQlkZXZfZXJyKCZwY2ll LT5wZGV2LT5kZXYsDQo+ID4gLQkJCSJFUlJPUjogbWF4IGluYm91bmQgd2luZG93cyByZWFjaGVk ICFcbiIpOw0KPiA+IC0JCXJldHVybjsNCj4gPiAtCX0NCj4gPiAtDQo+ID4gLQl2YWx1ZSA9IG1v Yml2ZWlsX2Nzcl9yZWFkbChwY2llLCBQQUJfUEVYX0FNQVBfQ1RSTCh3aW5fbnVtKSk7DQo+ID4g LQl2YWx1ZSAmPSB+KEFNQVBfQ1RSTF9UWVBFX01BU0sgPDwgQU1BUF9DVFJMX1RZUEVfU0hJRlQg fA0KPiBXSU5fU0laRV9NQVNLKTsNCj4gPiAtCXZhbHVlIHw9IHR5cGUgPDwgQU1BUF9DVFJMX1RZ UEVfU0hJRlQgfCAxIDw8DQo+IEFNQVBfQ1RSTF9FTl9TSElGVCB8DQo+ID4gLQkJIChsb3dlcl8z Ml9iaXRzKHNpemU2NCkgJiBXSU5fU0laRV9NQVNLKTsNCj4gPiAtCW1vYml2ZWlsX2Nzcl93cml0 ZWwocGNpZSwgdmFsdWUsIFBBQl9QRVhfQU1BUF9DVFJMKHdpbl9udW0pKTsNCj4gPiAtDQo+ID4g LQltb2JpdmVpbF9jc3Jfd3JpdGVsKHBjaWUsIHVwcGVyXzMyX2JpdHMoc2l6ZTY0KSwNCj4gPiAt CQkJICAgIFBBQl9FWFRfUEVYX0FNQVBfU0laRU4od2luX251bSkpOw0KPiA+IC0NCj4gPiAtCW1v Yml2ZWlsX2Nzcl93cml0ZWwocGNpZSwgbG93ZXJfMzJfYml0cyhjcHVfYWRkciksDQo+ID4gLQkJ CSAgICBQQUJfUEVYX0FNQVBfQVhJX1dJTih3aW5fbnVtKSk7DQo+ID4gLQltb2JpdmVpbF9jc3Jf d3JpdGVsKHBjaWUsIHVwcGVyXzMyX2JpdHMoY3B1X2FkZHIpLA0KPiA+IC0JCQkgICAgUEFCX0VY VF9QRVhfQU1BUF9BWElfV0lOKHdpbl9udW0pKTsNCj4gPiAtDQo+ID4gLQltb2JpdmVpbF9jc3Jf d3JpdGVsKHBjaWUsIGxvd2VyXzMyX2JpdHMocGNpX2FkZHIpLA0KPiA+IC0JCQkgICAgUEFCX1BF WF9BTUFQX1BFWF9XSU5fTCh3aW5fbnVtKSk7DQo+ID4gLQltb2JpdmVpbF9jc3Jfd3JpdGVsKHBj aWUsIHVwcGVyXzMyX2JpdHMocGNpX2FkZHIpLA0KPiA+IC0JCQkgICAgUEFCX1BFWF9BTUFQX1BF WF9XSU5fSCh3aW5fbnVtKSk7DQo+ID4gLQ0KPiA+IC0JcGNpZS0+aWJfd2luc19jb25maWd1cmVk Kys7DQo+ID4gLX0NCj4gPiAtDQo+ID4gLS8qDQo+ID4gLSAqIHJvdXRpbmUgdG8gcHJvZ3JhbSB0 aGUgb3V0Ym91bmQgd2luZG93cw0KPiA+IC0gKi8NCj4gPiAtc3RhdGljIHZvaWQgcHJvZ3JhbV9v Yl93aW5kb3dzKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llLCBpbnQgd2luX251bSwNCj4gPiAt CQkJICAgICAgIHU2NCBjcHVfYWRkciwgdTY0IHBjaV9hZGRyLCB1MzIgdHlwZSwgdTY0IHNpemUp DQo+ID4gLXsNCj4gPiAtCXUzMiB2YWx1ZTsNCj4gPiAtCXU2NCBzaXplNjQgPSB+KHNpemUgLSAx KTsNCj4gPiAtDQo+ID4gLQlpZiAod2luX251bSA+PSBwY2llLT5hcGlvX3dpbnMpIHsNCj4gPiAt CQlkZXZfZXJyKCZwY2llLT5wZGV2LT5kZXYsDQo+ID4gLQkJCSJFUlJPUjogbWF4IG91dGJvdW5k IHdpbmRvd3MgcmVhY2hlZCAhXG4iKTsNCj4gPiAtCQlyZXR1cm47DQo+ID4gLQl9DQo+ID4gLQ0K PiA+IC0JLyoNCj4gPiAtCSAqIHByb2dyYW0gRW5hYmxlIEJpdCB0byAxLCBUeXBlIEJpdCB0byAo MDApIGJhc2UgMiwgQVhJIFdpbmRvdyBTaXplIEJpdA0KPiA+IC0JICogdG8gNCBLQiBpbiBQQUJf QVhJX0FNQVBfQ1RSTCByZWdpc3Rlcg0KPiA+IC0JICovDQo+ID4gLQl2YWx1ZSA9IG1vYml2ZWls X2Nzcl9yZWFkbChwY2llLCBQQUJfQVhJX0FNQVBfQ1RSTCh3aW5fbnVtKSk7DQo+ID4gLQl2YWx1 ZSAmPSB+KFdJTl9UWVBFX01BU0sgPDwgV0lOX1RZUEVfU0hJRlQgfCBXSU5fU0laRV9NQVNLKTsN Cj4gPiAtCXZhbHVlIHw9IDEgPDwgV0lOX0VOQUJMRV9TSElGVCB8IHR5cGUgPDwgV0lOX1RZUEVf U0hJRlQgfA0KPiA+IC0JCSAobG93ZXJfMzJfYml0cyhzaXplNjQpICYgV0lOX1NJWkVfTUFTSyk7 DQo+ID4gLQltb2JpdmVpbF9jc3Jfd3JpdGVsKHBjaWUsIHZhbHVlLCBQQUJfQVhJX0FNQVBfQ1RS TCh3aW5fbnVtKSk7DQo+ID4gLQ0KPiA+IC0JbW9iaXZlaWxfY3NyX3dyaXRlbChwY2llLCB1cHBl cl8zMl9iaXRzKHNpemU2NCksDQo+ID4gLQkJCSAgICBQQUJfRVhUX0FYSV9BTUFQX1NJWkUod2lu X251bSkpOw0KPiA+IC0NCj4gPiAtCS8qDQo+ID4gLQkgKiBwcm9ncmFtIEFYSSB3aW5kb3cgYmFz ZSB3aXRoIGFwcHJvcHJpYXRlIHZhbHVlIGluDQo+ID4gLQkgKiBQQUJfQVhJX0FNQVBfQVhJX1dJ TjAgcmVnaXN0ZXINCj4gPiAtCSAqLw0KPiA+IC0JbW9iaXZlaWxfY3NyX3dyaXRlbChwY2llLA0K PiA+IC0JCQkgICAgbG93ZXJfMzJfYml0cyhjcHVfYWRkcikgJg0KPiAofkFYSV9XSU5ET1dfQUxJ R05fTUFTSyksDQo+ID4gLQkJCSAgICBQQUJfQVhJX0FNQVBfQVhJX1dJTih3aW5fbnVtKSk7DQo+ ID4gLQltb2JpdmVpbF9jc3Jfd3JpdGVsKHBjaWUsIHVwcGVyXzMyX2JpdHMoY3B1X2FkZHIpLA0K PiA+IC0JCQkgICAgUEFCX0VYVF9BWElfQU1BUF9BWElfV0lOKHdpbl9udW0pKTsNCj4gPiAtDQo+ ID4gLQltb2JpdmVpbF9jc3Jfd3JpdGVsKHBjaWUsIGxvd2VyXzMyX2JpdHMocGNpX2FkZHIpLA0K PiA+IC0JCQkgICAgUEFCX0FYSV9BTUFQX1BFWF9XSU5fTCh3aW5fbnVtKSk7DQo+ID4gLQltb2Jp dmVpbF9jc3Jfd3JpdGVsKHBjaWUsIHVwcGVyXzMyX2JpdHMocGNpX2FkZHIpLA0KPiA+IC0JCQkg ICAgUEFCX0FYSV9BTUFQX1BFWF9XSU5fSCh3aW5fbnVtKSk7DQo+ID4gLQ0KPiA+IC0JcGNpZS0+ b2Jfd2luc19jb25maWd1cmVkKys7DQo+ID4gLX0NCj4gPiAtDQo+ID4gLXN0YXRpYyBpbnQgbW9i aXZlaWxfYnJpbmd1cF9saW5rKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llKSAtew0KPiA+IC0J aW50IHJldHJpZXM7DQo+ID4gLQ0KPiA+IC0JLyogY2hlY2sgaWYgdGhlIGxpbmsgaXMgdXAgb3Ig bm90ICovDQo+ID4gLQlmb3IgKHJldHJpZXMgPSAwOyByZXRyaWVzIDwgTElOS19XQUlUX01BWF9S RVRSSUVTOyByZXRyaWVzKyspIHsNCj4gPiAtCQlpZiAobW9iaXZlaWxfcGNpZV9saW5rX3VwKHBj aWUpKQ0KPiA+IC0JCQlyZXR1cm4gMDsNCj4gPiAtDQo+ID4gLQkJdXNsZWVwX3JhbmdlKExJTktf V0FJVF9NSU4sIExJTktfV0FJVF9NQVgpOw0KPiA+IC0JfQ0KPiA+IC0NCj4gPiAtCWRldl9lcnIo JnBjaWUtPnBkZXYtPmRldiwgImxpbmsgbmV2ZXIgY2FtZSB1cFxuIik7DQo+ID4gLQ0KPiA+IC0J cmV0dXJuIC1FVElNRURPVVQ7DQo+ID4gLX0NCj4gPiAtDQo+ID4gIHN0YXRpYyB2b2lkIG1vYml2 ZWlsX3BjaWVfZW5hYmxlX21zaShzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSkgIHsNCj4gPiAg CXBoeXNfYWRkcl90IG1zZ19hZGRyID0gcGNpZS0+cGNpZV9yZWdfYmFzZTsgQEAgLTk2Miw0MyAr NjA2LDMgQEANCj4gaW50DQo+ID4gbW9iaXZlaWxfcGNpZV9ob3N0X3Byb2JlKHN0cnVjdCBtb2Jp dmVpbF9wY2llICpwY2llKQ0KPiA+DQo+ID4gIAlyZXR1cm4gMDsNCj4gPiAgfQ0KPiA+IC0NCj4g PiAtc3RhdGljIGludCBtb2JpdmVpbF9wY2llX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYpIC17DQo+ID4gLQlzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZTsNCj4gPiAtCXN0cnVj dCBwY2lfaG9zdF9icmlkZ2UgKmJyaWRnZTsNCj4gPiAtCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZw ZGV2LT5kZXY7DQo+ID4gLQ0KPiA+IC0JYnJpZGdlID0gZGV2bV9wY2lfYWxsb2NfaG9zdF9icmlk Z2UoZGV2LCBzaXplb2YoKnBjaWUpKTsNCj4gPiAtCWlmICghYnJpZGdlKQ0KPiA+IC0JCXJldHVy biAtRU5PTUVNOw0KPiA+IC0NCj4gPiAtCXBjaWUgPSBwY2lfaG9zdF9icmlkZ2VfcHJpdihicmlk Z2UpOw0KPiA+IC0JcGNpZS0+cnAuYnJpZGdlID0gYnJpZGdlOw0KPiA+IC0NCj4gPiAtCXBjaWUt PnBkZXYgPSBwZGV2Ow0KPiA+IC0NCj4gPiAtCXJldHVybiBtb2JpdmVpbF9wY2llX2hvc3RfcHJv YmUocGNpZSk7DQo+ID4gLX0NCj4gPiAtDQo+ID4gLXN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2 aWNlX2lkIG1vYml2ZWlsX3BjaWVfb2ZfbWF0Y2hbXSA9IHsNCj4gPiAtCXsuY29tcGF0aWJsZSA9 ICJtYnZsLGdwZXg0MC1wY2llIix9LA0KPiA+IC0Je30sDQo+ID4gLX07DQo+ID4gLQ0KPiA+IC1N T0RVTEVfREVWSUNFX1RBQkxFKG9mLCBtb2JpdmVpbF9wY2llX29mX21hdGNoKTsNCj4gPiAtDQo+ ID4gLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1vYml2ZWlsX3BjaWVfZHJpdmVyID0g ew0KPiA+IC0JLnByb2JlID0gbW9iaXZlaWxfcGNpZV9wcm9iZSwNCj4gPiAtCS5kcml2ZXIgPSB7 DQo+ID4gLQkJLm5hbWUgPSAibW9iaXZlaWwtcGNpZSIsDQo+ID4gLQkJLm9mX21hdGNoX3RhYmxl ID0gbW9iaXZlaWxfcGNpZV9vZl9tYXRjaCwNCj4gPiAtCQkuc3VwcHJlc3NfYmluZF9hdHRycyA9 IHRydWUsDQo+ID4gLQl9LA0KPiA+IC19Ow0KPiA+IC0NCj4gPiAtYnVpbHRpbl9wbGF0Zm9ybV9k cml2ZXIobW9iaXZlaWxfcGNpZV9kcml2ZXIpOw0KPiA+IC0NCj4gPiAtTU9EVUxFX0xJQ0VOU0Uo IkdQTCB2MiIpOw0KPiA+IC1NT0RVTEVfREVTQ1JJUFRJT04oIk1vYml2ZWlsIFBDSWUgaG9zdCBj b250cm9sbGVyIGRyaXZlciIpOw0KPiA+IC1NT0RVTEVfQVVUSE9SKCJTdWJyYWhtYW55YSBMaW5n YXBwYQ0KPiA8bC5zdWJyYWhtYW55YUBtb2JpdmVpbC5jby5pbj4iKTsNCj4gPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLXBsYXQuYw0K PiA+IGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLXBsYXQu Yw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi42NGM4 NWY4NTI4NjkNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvZHJpdmVycy9wY2kvY29udHJv bGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLXBsYXQuYw0KPiA+IEBAIC0wLDAgKzEsNjAgQEAN Cj4gPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCj4gPiArLyoNCj4gPiAr ICogUENJZSBob3N0IGNvbnRyb2xsZXIgZHJpdmVyIGZvciBNb2JpdmVpbCBQQ0llIEhvc3QgY29u dHJvbGxlcg0KPiA+ICsgKg0KPiA+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTggTW9iaXZlaWwgSW5j Lg0KPiA+ICsgKiBDb3B5cmlnaHQgMjAxOSBOWFANCj4gPiArICoNCj4gPiArICogQXV0aG9yOiBT dWJyYWhtYW55YSBMaW5nYXBwYSA8bC5zdWJyYWhtYW55YUBtb2JpdmVpbC5jby5pbj4NCj4gPiAr ICogUmVjb2RlOiBIb3UgWmhpcWlhbmcgPFpoaXFpYW5nLkhvdUBueHAuY29tPg0KPiANCj4gU2Ft ZSBmZWVkYmFjayBhcyBiZWZvcmUgd2l0aCB0aGUgcmVjb2RlIHRhZy4NCj4gDQo+ID4gKyAqLw0K PiA+ICsNCj4gPiArI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4 L2tlcm5lbC5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQo+ID4gKyNpbmNsdWRl IDxsaW51eC9vZl9wY2kuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3BjaS5oPg0KPiA+ICsjaW5j bHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9zbGFi Lmg+DQo+ID4gKw0KPiA+ICsjaW5jbHVkZSAicGNpZS1tb2JpdmVpbC5oIg0KPiA+ICsNCj4gPiAr c3RhdGljIGludCBtb2JpdmVpbF9wY2llX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBk ZXYpIHsNCj4gPiArCXN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llOw0KPiA+ICsJc3RydWN0IHBj aV9ob3N0X2JyaWRnZSAqYnJpZGdlOw0KPiA+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYt PmRldjsNCj4gPiArDQo+ID4gKwlicmlkZ2UgPSBkZXZtX3BjaV9hbGxvY19ob3N0X2JyaWRnZShk ZXYsIHNpemVvZigqcGNpZSkpOw0KPiA+ICsJaWYgKCFicmlkZ2UpDQo+ID4gKwkJcmV0dXJuIC1F Tk9NRU07DQo+ID4gKw0KPiA+ICsJcGNpZSA9IHBjaV9ob3N0X2JyaWRnZV9wcml2KGJyaWRnZSk7 DQo+ID4gKwlwY2llLT5ycC5icmlkZ2UgPSBicmlkZ2U7DQo+ID4gKw0KPiA+ICsJcGNpZS0+cGRl diA9IHBkZXY7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIG1vYml2ZWlsX3BjaWVfaG9zdF9wcm9iZShw Y2llKTsgfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbW9i aXZlaWxfcGNpZV9vZl9tYXRjaFtdID0gew0KPiA+ICsJey5jb21wYXRpYmxlID0gIm1idmwsZ3Bl eDQwLXBjaWUiLH0sDQo+ID4gKwl7fSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK01PRFVMRV9ERVZJ Q0VfVEFCTEUob2YsIG1vYml2ZWlsX3BjaWVfb2ZfbWF0Y2gpOw0KPiA+ICsNCj4gPiArc3RhdGlj IHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgbW9iaXZlaWxfcGNpZV9kcml2ZXIgPSB7DQo+ID4gKwku cHJvYmUgPSBtb2JpdmVpbF9wY2llX3Byb2JlLA0KPiA+ICsJLmRyaXZlciA9IHsNCj4gPiArCQku bmFtZSA9ICJtb2JpdmVpbC1wY2llIiwNCj4gPiArCQkub2ZfbWF0Y2hfdGFibGUgPSBtb2JpdmVp bF9wY2llX29mX21hdGNoLA0KPiA+ICsJCS5zdXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1ZSwNCj4g PiArCX0sDQo+ID4gK307DQo+ID4gKw0KPiA+ICtidWlsdGluX3BsYXRmb3JtX2RyaXZlcihtb2Jp dmVpbF9wY2llX2RyaXZlcik7DQo+ID4gKw0KPiA+ICtNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7 DQo+ID4gK01PRFVMRV9ERVNDUklQVElPTigiTW9iaXZlaWwgUENJZSBob3N0IGNvbnRyb2xsZXIg ZHJpdmVyIik7DQo+ID4gK01PRFVMRV9BVVRIT1IoIlN1YnJhaG1hbnlhIExpbmdhcHBhDQo+IDxs LnN1YnJhaG1hbnlhQG1vYml2ZWlsLmNvLmluPiIpOw0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJz L3BjaS9jb250cm9sbGVyL21vYml2ZWlsL3BjaWUtbW9iaXZlaWwuYw0KPiA+IGIvZHJpdmVycy9w Y2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLmMNCj4gPiBuZXcgZmlsZSBtb2Rl IDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uMjc3M2Y4MjNjOWVhDQo+ID4gLS0tIC9k ZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1t b2JpdmVpbC5jDQo+ID4gQEAgLTAsMCArMSwyMjcgQEANCj4gPiArLy8gU1BEWC1MaWNlbnNlLUlk ZW50aWZpZXI6IEdQTC0yLjANCj4gPiArLyoNCj4gPiArICogUENJZSBob3N0IGNvbnRyb2xsZXIg ZHJpdmVyIGZvciBNb2JpdmVpbCBQQ0llIEhvc3QgY29udHJvbGxlcg0KPiA+ICsgKg0KPiA+ICsg KiBDb3B5cmlnaHQgKGMpIDIwMTggTW9iaXZlaWwgSW5jLg0KPiA+ICsgKiBDb3B5cmlnaHQgMjAx OSBOWFANCj4gPiArICoNCj4gPiArICogQXV0aG9yOiBTdWJyYWhtYW55YSBMaW5nYXBwYSA8bC5z dWJyYWhtYW55YUBtb2JpdmVpbC5jby5pbj4NCj4gPiArICogUmVjb2RlOiBIb3UgWmhpcWlhbmcg PFpoaXFpYW5nLkhvdUBueHAuY29tPiAgKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9k ZWxheS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaW5pdC5oPg0KPiA+ICsjaW5jbHVkZSA8bGlu dXgva2VybmVsLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4NCj4gPiArI2luY2x1ZGUg PGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPg0KPiA+ICsNCj4gPiArI2luY2x1ZGUgInBjaWUtbW9i aXZlaWwuaCINCj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIG1vYml2ZWlsX3BjaWVfc2VsX3BhZ2Ug LSByb3V0aW5lIHRvIGFjY2VzcyBwYWdlZCByZWdpc3Rlcg0KPiA+ICsgKg0KPiA+ICsgKiBSZWdp c3RlcnMgd2hvc2UgYWRkcmVzcyBncmVhdGVyIHRoYW4gUEFHRURfQUREUl9CTkRSWSAoMHhjMDAp IGFyZQ0KPiA+ICtwYWdlZCwNCj4gPiArICogZm9yIHRoaXMgc2NoZW1lIHRvIHdvcmsgZXh0cmFj dGVkIGhpZ2hlciA2IGJpdHMgb2YgdGhlIG9mZnNldCB3aWxsDQo+ID4gK2JlDQo+ID4gKyAqIHdy aXR0ZW4gdG8gcGdfc2VsIGZpZWxkIG9mIFBBQl9DVFJMIHJlZ2lzdGVyIGFuZCByZXN0IG9mIHRo ZSBsb3dlcg0KPiA+ICsxMA0KPiA+ICsgKiBiaXRzIGVuYWJsZWQgd2l0aCBQQUdFRF9BRERSX0JO RFJZIGFyZSB1c2VkIGFzIG9mZnNldCBvZiB0aGUNCj4gcmVnaXN0ZXIuDQo+ID4gKyAqLw0KPiA+ ICtzdGF0aWMgdm9pZCBtb2JpdmVpbF9wY2llX3NlbF9wYWdlKHN0cnVjdCBtb2JpdmVpbF9wY2ll ICpwY2llLCB1OA0KPiA+ICtwZ19pZHgpIHsNCj4gPiArCXUzMiB2YWw7DQo+ID4gKw0KPiA+ICsJ dmFsID0gcmVhZGwocGNpZS0+Y3NyX2F4aV9zbGF2ZV9iYXNlICsgUEFCX0NUUkwpOw0KPiA+ICsJ dmFsICY9IH4oUEFHRV9TRUxfTUFTSyA8PCBQQUdFX1NFTF9TSElGVCk7DQo+ID4gKwl2YWwgfD0g KHBnX2lkeCAmIFBBR0VfU0VMX01BU0spIDw8IFBBR0VfU0VMX1NISUZUOw0KPiA+ICsNCj4gPiAr CXdyaXRlbCh2YWwsIHBjaWUtPmNzcl9heGlfc2xhdmVfYmFzZSArIFBBQl9DVFJMKTsgfQ0KPiA+ ICsNCj4gPiArc3RhdGljIHZvaWQgKm1vYml2ZWlsX3BjaWVfY29tcF9hZGRyKHN0cnVjdCBtb2Jp dmVpbF9wY2llICpwY2llLCB1MzINCj4gPiArb2ZmKSB7DQo+ID4gKwlpZiAob2ZmIDwgUEFHRURf QUREUl9CTkRSWSkgew0KPiA+ICsJCS8qIEZvciBkaXJlY3RseSBhY2Nlc3NlZCByZWdpc3RlcnMs IGNsZWFyIHRoZSBwZ19zZWwgZmllbGQgKi8NCj4gPiArCQltb2JpdmVpbF9wY2llX3NlbF9wYWdl KHBjaWUsIDApOw0KPiA+ICsJCXJldHVybiBwY2llLT5jc3JfYXhpX3NsYXZlX2Jhc2UgKyBvZmY7 DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJbW9iaXZlaWxfcGNpZV9zZWxfcGFnZShwY2llLCBPRkZT RVRfVE9fUEFHRV9JRFgob2ZmKSk7DQo+ID4gKwlyZXR1cm4gcGNpZS0+Y3NyX2F4aV9zbGF2ZV9i YXNlICsgT0ZGU0VUX1RPX1BBR0VfQUREUihvZmYpOyB9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50 IG1vYml2ZWlsX3BjaWVfcmVhZCh2b2lkIF9faW9tZW0gKmFkZHIsIGludCBzaXplLCB1MzIgKnZh bCkNCj4gPiArew0KPiA+ICsJaWYgKCh1aW50cHRyX3QpYWRkciAmIChzaXplIC0gMSkpIHsNCj4g PiArCQkqdmFsID0gMDsNCj4gPiArCQlyZXR1cm4gUENJQklPU19CQURfUkVHSVNURVJfTlVNQkVS Ow0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXN3aXRjaCAoc2l6ZSkgew0KPiA+ICsJY2FzZSA0Og0K PiA+ICsJCSp2YWwgPSByZWFkbChhZGRyKTsNCj4gPiArCQlicmVhazsNCj4gPiArCWNhc2UgMjoN Cj4gPiArCQkqdmFsID0gcmVhZHcoYWRkcik7DQo+ID4gKwkJYnJlYWs7DQo+ID4gKwljYXNlIDE6 DQo+ID4gKwkJKnZhbCA9IHJlYWRiKGFkZHIpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJZGVmYXVs dDoNCj4gPiArCQkqdmFsID0gMDsNCj4gPiArCQlyZXR1cm4gUENJQklPU19CQURfUkVHSVNURVJf TlVNQkVSOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7 DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbW9iaXZlaWxfcGNpZV93cml0ZSh2b2lk IF9faW9tZW0gKmFkZHIsIGludCBzaXplLCB1MzIgdmFsKQ0KPiA+ICt7DQo+ID4gKwlpZiAoKHVp bnRwdHJfdClhZGRyICYgKHNpemUgLSAxKSkNCj4gPiArCQlyZXR1cm4gUENJQklPU19CQURfUkVH SVNURVJfTlVNQkVSOw0KPiA+ICsNCj4gPiArCXN3aXRjaCAoc2l6ZSkgew0KPiA+ICsJY2FzZSA0 Og0KPiA+ICsJCXdyaXRlbCh2YWwsIGFkZHIpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSAy Og0KPiA+ICsJCXdyaXRldyh2YWwsIGFkZHIpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJY2FzZSAx Og0KPiA+ICsJCXdyaXRlYih2YWwsIGFkZHIpOw0KPiA+ICsJCWJyZWFrOw0KPiA+ICsJZGVmYXVs dDoNCj4gPiArCQlyZXR1cm4gUENJQklPU19CQURfUkVHSVNURVJfTlVNQkVSOw0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3UzMiBtb2JpdmVpbF9jc3JfcmVhZChzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgdTMy IG9mZiwgc2l6ZV90DQo+ID4gK3NpemUpIHsNCj4gPiArCXZvaWQgKmFkZHI7DQo+ID4gKwl1MzIg dmFsOw0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwlhZGRyID0gbW9iaXZlaWxfcGNpZV9j b21wX2FkZHIocGNpZSwgb2ZmKTsNCj4gPiArDQo+ID4gKwlyZXQgPSBtb2JpdmVpbF9wY2llX3Jl YWQoYWRkciwgc2l6ZSwgJnZhbCk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCWRldl9lcnIoJnBj aWUtPnBkZXYtPmRldiwgInJlYWQgQ1NSIGFkZHJlc3MgZmFpbGVkXG4iKTsNCj4gPiArDQo+ID4g KwlyZXR1cm4gdmFsOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICt2b2lkIG1vYml2ZWlsX2Nzcl93cml0 ZShzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgdTMyIHZhbCwgdTMyIG9mZiwNCj4gPiArCQkJ ICAgICAgIHNpemVfdCBzaXplKQ0KPiA+ICt7DQo+ID4gKwl2b2lkICphZGRyOw0KPiA+ICsJaW50 IHJldDsNCj4gPiArDQo+ID4gKwlhZGRyID0gbW9iaXZlaWxfcGNpZV9jb21wX2FkZHIocGNpZSwg b2ZmKTsNCj4gPiArDQo+ID4gKwlyZXQgPSBtb2JpdmVpbF9wY2llX3dyaXRlKGFkZHIsIHNpemUs IHZhbCk7DQo+ID4gKwlpZiAocmV0KQ0KPiA+ICsJCWRldl9lcnIoJnBjaWUtPnBkZXYtPmRldiwg IndyaXRlIENTUiBhZGRyZXNzIGZhaWxlZFxuIik7IH0NCj4gPiArDQo+ID4gK2Jvb2wgbW9iaXZl aWxfcGNpZV9saW5rX3VwKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llKSB7DQo+ID4gKwlyZXR1 cm4gKG1vYml2ZWlsX2Nzcl9yZWFkbChwY2llLCBMVFNTTV9TVEFUVVMpICYNCj4gPiArCQlMVFNT TV9TVEFUVVNfTDBfTUFTSykgPT0gTFRTU01fU1RBVFVTX0wwOyB9DQo+ID4gKw0KPiA+ICt2b2lk IHByb2dyYW1faWJfd2luZG93cyhzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgaW50IHdpbl9u dW0sDQo+ID4gKwkJCXU2NCBjcHVfYWRkciwgdTY0IHBjaV9hZGRyLCB1MzIgdHlwZSwgdTY0IHNp emUpIHsNCj4gPiArCXUzMiB2YWx1ZTsNCj4gPiArCXU2NCBzaXplNjQgPSB+KHNpemUgLSAxKTsN Cj4gPiArDQo+ID4gKwlpZiAod2luX251bSA+PSBwY2llLT5wcGlvX3dpbnMpIHsNCj4gPiArCQlk ZXZfZXJyKCZwY2llLT5wZGV2LT5kZXYsDQo+ID4gKwkJCSJFUlJPUjogbWF4IGluYm91bmQgd2lu ZG93cyByZWFjaGVkICFcbiIpOw0KPiA+ICsJCXJldHVybjsNCj4gPiArCX0NCj4gPiArDQo+ID4g Kwl2YWx1ZSA9IG1vYml2ZWlsX2Nzcl9yZWFkbChwY2llLCBQQUJfUEVYX0FNQVBfQ1RSTCh3aW5f bnVtKSk7DQo+ID4gKwl2YWx1ZSAmPSB+KEFNQVBfQ1RSTF9UWVBFX01BU0sgPDwgQU1BUF9DVFJM X1RZUEVfU0hJRlQgfA0KPiBXSU5fU0laRV9NQVNLKTsNCj4gPiArCXZhbHVlIHw9IHR5cGUgPDwg QU1BUF9DVFJMX1RZUEVfU0hJRlQgfCAxIDw8DQo+IEFNQVBfQ1RSTF9FTl9TSElGVCB8DQo+ID4g KwkJIChsb3dlcl8zMl9iaXRzKHNpemU2NCkgJiBXSU5fU0laRV9NQVNLKTsNCj4gPiArCW1vYml2 ZWlsX2Nzcl93cml0ZWwocGNpZSwgdmFsdWUsIFBBQl9QRVhfQU1BUF9DVFJMKHdpbl9udW0pKTsN Cj4gPiArDQo+ID4gKwltb2JpdmVpbF9jc3Jfd3JpdGVsKHBjaWUsIHVwcGVyXzMyX2JpdHMoc2l6 ZTY0KSwNCj4gPiArCQkJICAgIFBBQl9FWFRfUEVYX0FNQVBfU0laRU4od2luX251bSkpOw0KPiA+ ICsNCj4gPiArCW1vYml2ZWlsX2Nzcl93cml0ZWwocGNpZSwgbG93ZXJfMzJfYml0cyhjcHVfYWRk ciksDQo+ID4gKwkJCSAgICBQQUJfUEVYX0FNQVBfQVhJX1dJTih3aW5fbnVtKSk7DQo+ID4gKwlt b2JpdmVpbF9jc3Jfd3JpdGVsKHBjaWUsIHVwcGVyXzMyX2JpdHMoY3B1X2FkZHIpLA0KPiA+ICsJ CQkgICAgUEFCX0VYVF9QRVhfQU1BUF9BWElfV0lOKHdpbl9udW0pKTsNCj4gPiArDQo+ID4gKwlt b2JpdmVpbF9jc3Jfd3JpdGVsKHBjaWUsIGxvd2VyXzMyX2JpdHMocGNpX2FkZHIpLA0KPiA+ICsJ CQkgICAgUEFCX1BFWF9BTUFQX1BFWF9XSU5fTCh3aW5fbnVtKSk7DQo+ID4gKwltb2JpdmVpbF9j c3Jfd3JpdGVsKHBjaWUsIHVwcGVyXzMyX2JpdHMocGNpX2FkZHIpLA0KPiA+ICsJCQkgICAgUEFC X1BFWF9BTUFQX1BFWF9XSU5fSCh3aW5fbnVtKSk7DQo+ID4gKw0KPiA+ICsJcGNpZS0+aWJfd2lu c19jb25maWd1cmVkKys7DQo+ID4gK30NCj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIHJvdXRpbmUg dG8gcHJvZ3JhbSB0aGUgb3V0Ym91bmQgd2luZG93cyAgKi8gdm9pZA0KPiA+ICtwcm9ncmFtX29i X3dpbmRvd3Moc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIGludCB3aW5fbnVtLA0KPiA+ICsJ CQl1NjQgY3B1X2FkZHIsIHU2NCBwY2lfYWRkciwgdTMyIHR5cGUsIHU2NCBzaXplKSB7DQo+ID4g Kwl1MzIgdmFsdWU7DQo+ID4gKwl1NjQgc2l6ZTY0ID0gfihzaXplIC0gMSk7DQo+ID4gKw0KPiA+ ICsJaWYgKHdpbl9udW0gPj0gcGNpZS0+YXBpb193aW5zKSB7DQo+ID4gKwkJZGV2X2VycigmcGNp ZS0+cGRldi0+ZGV2LA0KPiA+ICsJCQkiRVJST1I6IG1heCBvdXRib3VuZCB3aW5kb3dzIHJlYWNo ZWQgIVxuIik7DQo+ID4gKwkJcmV0dXJuOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qDQo+ID4g KwkgKiBwcm9ncmFtIEVuYWJsZSBCaXQgdG8gMSwgVHlwZSBCaXQgdG8gKDAwKSBiYXNlIDIsIEFY SSBXaW5kb3cgU2l6ZSBCaXQNCj4gPiArCSAqIHRvIDQgS0IgaW4gUEFCX0FYSV9BTUFQX0NUUkwg cmVnaXN0ZXINCj4gPiArCSAqLw0KPiA+ICsJdmFsdWUgPSBtb2JpdmVpbF9jc3JfcmVhZGwocGNp ZSwgUEFCX0FYSV9BTUFQX0NUUkwod2luX251bSkpOw0KPiA+ICsJdmFsdWUgJj0gfihXSU5fVFlQ RV9NQVNLIDw8IFdJTl9UWVBFX1NISUZUIHwgV0lOX1NJWkVfTUFTSyk7DQo+ID4gKwl2YWx1ZSB8 PSAxIDw8IFdJTl9FTkFCTEVfU0hJRlQgfCB0eXBlIDw8IFdJTl9UWVBFX1NISUZUIHwNCj4gPiAr CQkgKGxvd2VyXzMyX2JpdHMoc2l6ZTY0KSAmIFdJTl9TSVpFX01BU0spOw0KPiA+ICsJbW9iaXZl aWxfY3NyX3dyaXRlbChwY2llLCB2YWx1ZSwgUEFCX0FYSV9BTUFQX0NUUkwod2luX251bSkpOw0K PiA+ICsNCj4gPiArCW1vYml2ZWlsX2Nzcl93cml0ZWwocGNpZSwgdXBwZXJfMzJfYml0cyhzaXpl NjQpLA0KPiA+ICsJCQkgICAgUEFCX0VYVF9BWElfQU1BUF9TSVpFKHdpbl9udW0pKTsNCj4gPiAr DQo+ID4gKwkvKg0KPiA+ICsJICogcHJvZ3JhbSBBWEkgd2luZG93IGJhc2Ugd2l0aCBhcHByb3By aWF0ZSB2YWx1ZSBpbg0KPiA+ICsJICogUEFCX0FYSV9BTUFQX0FYSV9XSU4wIHJlZ2lzdGVyDQo+ ID4gKwkgKi8NCj4gPiArCW1vYml2ZWlsX2Nzcl93cml0ZWwocGNpZSwNCj4gPiArCQkJICAgIGxv d2VyXzMyX2JpdHMoY3B1X2FkZHIpICYNCj4gKH5BWElfV0lORE9XX0FMSUdOX01BU0spLA0KPiA+ ICsJCQkgICAgUEFCX0FYSV9BTUFQX0FYSV9XSU4od2luX251bSkpOw0KPiA+ICsJbW9iaXZlaWxf Y3NyX3dyaXRlbChwY2llLCB1cHBlcl8zMl9iaXRzKGNwdV9hZGRyKSwNCj4gPiArCQkJICAgIFBB Ql9FWFRfQVhJX0FNQVBfQVhJX1dJTih3aW5fbnVtKSk7DQo+ID4gKw0KPiA+ICsJbW9iaXZlaWxf Y3NyX3dyaXRlbChwY2llLCBsb3dlcl8zMl9iaXRzKHBjaV9hZGRyKSwNCj4gPiArCQkJICAgIFBB Ql9BWElfQU1BUF9QRVhfV0lOX0wod2luX251bSkpOw0KPiA+ICsJbW9iaXZlaWxfY3NyX3dyaXRl bChwY2llLCB1cHBlcl8zMl9iaXRzKHBjaV9hZGRyKSwNCj4gPiArCQkJICAgIFBBQl9BWElfQU1B UF9QRVhfV0lOX0god2luX251bSkpOw0KPiA+ICsNCj4gPiArCXBjaWUtPm9iX3dpbnNfY29uZmln dXJlZCsrOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtpbnQgbW9iaXZlaWxfYnJpbmd1cF9saW5rKHN0 cnVjdCBtb2JpdmVpbF9wY2llICpwY2llKSB7DQo+ID4gKwlpbnQgcmV0cmllczsNCj4gPiArDQo+ ID4gKwkvKiBjaGVjayBpZiB0aGUgbGluayBpcyB1cCBvciBub3QgKi8NCj4gPiArCWZvciAocmV0 cmllcyA9IDA7IHJldHJpZXMgPCBMSU5LX1dBSVRfTUFYX1JFVFJJRVM7IHJldHJpZXMrKykgew0K PiA+ICsJCWlmIChtb2JpdmVpbF9wY2llX2xpbmtfdXAocGNpZSkpDQo+ID4gKwkJCXJldHVybiAw Ow0KPiA+ICsNCj4gPiArCQl1c2xlZXBfcmFuZ2UoTElOS19XQUlUX01JTiwgTElOS19XQUlUX01B WCk7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZGV2X2VycigmcGNpZS0+cGRldi0+ZGV2LCAibGlu ayBuZXZlciBjYW1lIHVwXG4iKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gLUVUSU1FRE9VVDsNCj4g PiArfQ0KPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL3Bj aWUtbW9iaXZlaWwuaA0KPiA+IGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2ll LW1vYml2ZWlsLmgNCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGluZGV4IDAwMDAwMDAw MDAwMC4uZTMxNDgwNzhlOWRkDQo+ID4gLS0tIC9kZXYvbnVsbA0KPiA+ICsrKyBiL2RyaXZlcnMv cGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1tb2JpdmVpbC5oDQo+ID4gQEAgLTAsMCArMSwx NzggQEANCj4gPiArLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8NCj4gPiAr LyoNCj4gPiArICogUENJZSBob3N0IGNvbnRyb2xsZXIgZHJpdmVyIGZvciBNb2JpdmVpbCBQQ0ll IEhvc3QgY29udHJvbGxlcg0KPiA+ICsgKg0KPiA+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTggTW9i aXZlaWwgSW5jLg0KPiA+ICsgKiBDb3B5cmlnaHQgMjAxOSBOWFANCj4gPiArICoNCj4gPiArICog QXV0aG9yOiBTdWJyYWhtYW55YSBMaW5nYXBwYSA8bC5zdWJyYWhtYW55YUBtb2JpdmVpbC5jby5p bj4NCj4gPiArICogUmVjb2RlOiBIb3UgWmhpcWlhbmcgPFpoaXFpYW5nLkhvdUBueHAuY29tPiAg Ki8NCj4gPiArDQo+ID4gKyNpZm5kZWYgX1BDSUVfTU9CSVZFSUxfSA0KPiA+ICsjZGVmaW5lIF9Q Q0lFX01PQklWRUlMX0gNCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4NCj4gPiAr I2luY2x1ZGUgPGxpbnV4L2lycS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvbXNpLmg+DQo+ID4g KyNpbmNsdWRlICIuLi8uLi9wY2kuaCINCj4gPiArDQo+ID4gKy8qIHJlZ2lzdGVyIG9mZnNldHMg YW5kIGJpdCBwb3NpdGlvbnMgKi8NCj4gPiArDQo+ID4gKy8qDQo+ID4gKyAqIHRyYW5zbGF0aW9u IHRhYmxlcyBhcmUgZ3JvdXBlZCBpbnRvIHdpbmRvd3MsIGVhY2ggd2luZG93IHJlZ2lzdGVycw0K PiA+ICthcmUNCj4gPiArICogZ3JvdXBlZCBpbnRvIGJsb2NrcyBvZiA0IG9yIDE2IHJlZ2lzdGVy cyBlYWNoICAqLw0KPiA+ICsjZGVmaW5lIFBBQl9SRUdfQkxPQ0tfU0laRQkJMTYNCj4gPiArI2Rl ZmluZSBQQUJfRVhUX1JFR19CTE9DS19TSVpFCQk0DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBBQl9S RUdfQUREUihvZmZzZXQsIHdpbikJXA0KPiA+ICsJKG9mZnNldCArICh3aW4gKiBQQUJfUkVHX0JM T0NLX1NJWkUpKQ0KPiA+ICsjZGVmaW5lIFBBQl9FWFRfUkVHX0FERFIob2Zmc2V0LCB3aW4pCVwN Cj4gPiArCShvZmZzZXQgKyAod2luICogUEFCX0VYVF9SRUdfQkxPQ0tfU0laRSkpDQo+ID4gKw0K PiA+ICsjZGVmaW5lIExUU1NNX1NUQVRVUwkJCTB4MDQwNA0KPiA+ICsjZGVmaW5lICBMVFNTTV9T VEFUVVNfTDBfTUFTSwkJMHgzZg0KPiA+ICsjZGVmaW5lICBMVFNTTV9TVEFUVVNfTDAJCTB4MmQN Cj4gPiArDQo+ID4gKyNkZWZpbmUgUEFCX0NUUkwJCQkweDA4MDgNCj4gPiArI2RlZmluZSAgQU1C QV9QSU9fRU5BQkxFX1NISUZUCQkwDQo+ID4gKyNkZWZpbmUgIFBFWF9QSU9fRU5BQkxFX1NISUZU CQkxDQo+ID4gKyNkZWZpbmUgIFBBR0VfU0VMX1NISUZUCQkJMTMNCj4gPiArI2RlZmluZSAgUEFH RV9TRUxfTUFTSwkJCTB4M2YNCj4gPiArI2RlZmluZSAgUEFHRV9MT19NQVNLCQkJMHgzZmYNCj4g PiArI2RlZmluZSAgUEFHRV9TRUxfT0ZGU0VUX1NISUZUCQkxMA0KPiA+ICsNCj4gPiArI2RlZmlu ZSBQQUJfQVhJX1BJT19DVFJMCQkweDA4NDANCj4gPiArI2RlZmluZSAgQVBJT19FTl9NQVNLCQkJ MHhmDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBBQl9QRVhfUElPX0NUUkwJCTB4MDhjMA0KPiA+ICsj ZGVmaW5lICBQSU9fRU5BQkxFX1NISUZUCQkwDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBBQl9JTlRQ X0FNQkFfTUlTQ19FTkIJCTB4MGIwYw0KPiA+ICsjZGVmaW5lIFBBQl9JTlRQX0FNQkFfTUlTQ19T VEFUCQkweDBiMWMNCj4gPiArI2RlZmluZSAgUEFCX0lOVFBfSU5UWF9NQVNLCQkweDAxZTANCj4g PiArI2RlZmluZSAgUEFCX0lOVFBfTVNJX01BU0sJCTB4OA0KPiA+ICsNCj4gPiArI2RlZmluZSBQ QUJfQVhJX0FNQVBfQ1RSTCh3aW4pCQlQQUJfUkVHX0FERFIoMHgwYmEwLCB3aW4pDQo+ID4gKyNk ZWZpbmUgIFdJTl9FTkFCTEVfU0hJRlQJCTANCj4gPiArI2RlZmluZSAgV0lOX1RZUEVfU0hJRlQJ CQkxDQo+ID4gKyNkZWZpbmUgIFdJTl9UWVBFX01BU0sJCQkweDMNCj4gPiArI2RlZmluZSAgV0lO X1NJWkVfTUFTSwkJCTB4ZmZmZmZjMDANCj4gPiArDQo+ID4gKyNkZWZpbmUgUEFCX0VYVF9BWElf QU1BUF9TSVpFKHdpbikJUEFCX0VYVF9SRUdfQUREUigweGJhZjAsDQo+IHdpbikNCj4gPiArDQo+ ID4gKyNkZWZpbmUgUEFCX0VYVF9BWElfQU1BUF9BWElfV0lOKHdpbikNCj4gCVBBQl9FWFRfUkVH X0FERFIoMHg4MGEwLCB3aW4pDQo+ID4gKyNkZWZpbmUgUEFCX0FYSV9BTUFQX0FYSV9XSU4od2lu KQlQQUJfUkVHX0FERFIoMHgwYmE0LCB3aW4pDQo+ID4gKyNkZWZpbmUgIEFYSV9XSU5ET1dfQUxJ R05fTUFTSwkJMw0KPiA+ICsNCj4gPiArI2RlZmluZSBQQUJfQVhJX0FNQVBfUEVYX1dJTl9MKHdp bikJUEFCX1JFR19BRERSKDB4MGJhOCwNCj4gd2luKQ0KPiA+ICsjZGVmaW5lICBQQUJfQlVTX1NI SUZUCQkJMjQNCj4gPiArI2RlZmluZSAgUEFCX0RFVklDRV9TSElGVAkJMTkNCj4gPiArI2RlZmlu ZSAgUEFCX0ZVTkNUSU9OX1NISUZUCQkxNg0KPiA+ICsNCj4gPiArI2RlZmluZSBQQUJfQVhJX0FN QVBfUEVYX1dJTl9IKHdpbikJUEFCX1JFR19BRERSKDB4MGJhYywNCj4gd2luKQ0KPiA+ICsjZGVm aW5lIFBBQl9JTlRQX0FYSV9QSU9fQ0xBU1MJCTB4NDc0DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBB Ql9QRVhfQU1BUF9DVFJMKHdpbikJCVBBQl9SRUdfQUREUigweDRiYTAsDQo+IHdpbikNCj4gPiAr I2RlZmluZSAgQU1BUF9DVFJMX0VOX1NISUZUCQkwDQo+ID4gKyNkZWZpbmUgIEFNQVBfQ1RSTF9U WVBFX1NISUZUCQkxDQo+ID4gKyNkZWZpbmUgIEFNQVBfQ1RSTF9UWVBFX01BU0sJCTMNCj4gPiAr DQo+ID4gKyNkZWZpbmUgUEFCX0VYVF9QRVhfQU1BUF9TSVpFTih3aW4pCVBBQl9FWFRfUkVHX0FE RFIoMHhiZWYwLA0KPiB3aW4pDQo+ID4gKyNkZWZpbmUgUEFCX0VYVF9QRVhfQU1BUF9BWElfV0lO KHdpbikNCj4gCVBBQl9FWFRfUkVHX0FERFIoMHhiNGEwLCB3aW4pDQo+ID4gKyNkZWZpbmUgUEFC X1BFWF9BTUFQX0FYSV9XSU4od2luKQlQQUJfUkVHX0FERFIoMHg0YmE0LCB3aW4pDQo+ID4gKyNk ZWZpbmUgUEFCX1BFWF9BTUFQX1BFWF9XSU5fTCh3aW4pCVBBQl9SRUdfQUREUigweDRiYTgsDQo+ IHdpbikNCj4gPiArI2RlZmluZSBQQUJfUEVYX0FNQVBfUEVYX1dJTl9IKHdpbikJUEFCX1JFR19B RERSKDB4NGJhYywNCj4gd2luKQ0KPiA+ICsNCj4gPiArLyogc3RhcnRpbmcgb2Zmc2V0IG9mIElO VFggYml0cyBpbiBzdGF0dXMgcmVnaXN0ZXIgKi8NCj4gPiArI2RlZmluZSBQQUJfSU5UWF9TVEFS VAkJCTUNCj4gPiArDQo+ID4gKy8qIHN1cHBvcnRlZCBudW1iZXIgb2YgTVNJIGludGVycnVwdHMg Ki8NCj4gPiArI2RlZmluZSBQQ0lfTlVNX01TSQkJCTE2DQo+ID4gKw0KPiA+ICsvKiBNU0kgcmVn aXN0ZXJzICovDQo+ID4gKyNkZWZpbmUgTVNJX0JBU0VfTE9fT0ZGU0VUCQkweDA0DQo+ID4gKyNk ZWZpbmUgTVNJX0JBU0VfSElfT0ZGU0VUCQkweDA4DQo+ID4gKyNkZWZpbmUgTVNJX1NJWkVfT0ZG U0VUCQkJMHgwYw0KPiA+ICsjZGVmaW5lIE1TSV9FTkFCTEVfT0ZGU0VUCQkweDE0DQo+ID4gKyNk ZWZpbmUgTVNJX1NUQVRVU19PRkZTRVQJCTB4MTgNCj4gPiArI2RlZmluZSBNU0lfREFUQV9PRkZT RVQJCQkweDIwDQo+ID4gKyNkZWZpbmUgTVNJX0FERFJfTF9PRkZTRVQJCTB4MjQNCj4gPiArI2Rl ZmluZSBNU0lfQUREUl9IX09GRlNFVAkJMHgyOA0KPiA+ICsNCj4gPiArLyogb3V0Ym91bmQgYW5k IGluYm91bmQgd2luZG93IGRlZmluaXRpb25zICovDQo+ID4gKyNkZWZpbmUgV0lOX05VTV8wCQkJ MA0KPiA+ICsjZGVmaW5lIFdJTl9OVU1fMQkJCTENCj4gPiArI2RlZmluZSBDRkdfV0lORE9XX1RZ UEUJCQkwDQo+ID4gKyNkZWZpbmUgSU9fV0lORE9XX1RZUEUJCQkxDQo+ID4gKyNkZWZpbmUgTUVN X1dJTkRPV19UWVBFCQkJMg0KPiA+ICsjZGVmaW5lIElCX1dJTl9TSVpFCQkJKCh1NjQpMjU2ICog MTAyNCAqIDEwMjQgKiAxMDI0KQ0KPiA+ICsjZGVmaW5lIE1BWF9QSU9fV0lORE9XUwkJCTgNCj4g PiArDQo+ID4gKy8qIFBhcmFtZXRlcnMgZm9yIHRoZSB3YWl0aW5nIGZvciBsaW5rIHVwIHJvdXRp bmUgKi8NCj4gPiArI2RlZmluZSBMSU5LX1dBSVRfTUFYX1JFVFJJRVMJCTEwDQo+ID4gKyNkZWZp bmUgTElOS19XQUlUX01JTgkJCTkwMDAwDQo+ID4gKyNkZWZpbmUgTElOS19XQUlUX01BWAkJCTEw MDAwMA0KPiA+ICsNCj4gPiArI2RlZmluZSBQQUdFRF9BRERSX0JORFJZCQkweGMwMA0KPiA+ICsj ZGVmaW5lIE9GRlNFVF9UT19QQUdFX0FERFIob2ZmKQlcDQo+ID4gKwkoKG9mZiAmIFBBR0VfTE9f TUFTSykgfCBQQUdFRF9BRERSX0JORFJZKQ0KPiA+ICsjZGVmaW5lIE9GRlNFVF9UT19QQUdFX0lE WChvZmYpCQlcDQo+ID4gKwkoKG9mZiA+PiBQQUdFX1NFTF9PRkZTRVRfU0hJRlQpICYgUEFHRV9T RUxfTUFTSykNCj4gPiArDQo+ID4gK3N0cnVjdCBtb2JpdmVpbF9tc2kgewkJCS8qIE1TSSBpbmZv cm1hdGlvbiAqLw0KPiA+ICsJc3RydWN0IG11dGV4IGxvY2s7CQkvKiBwcm90ZWN0IGJpdG1hcCB2 YXJpYWJsZSAqLw0KPiA+ICsJc3RydWN0IGlycV9kb21haW4gKm1zaV9kb21haW47DQo+ID4gKwlz dHJ1Y3QgaXJxX2RvbWFpbiAqZGV2X2RvbWFpbjsNCj4gPiArCXBoeXNfYWRkcl90IG1zaV9wYWdl c19waHlzOw0KPiA+ICsJaW50IG51bV9vZl92ZWN0b3JzOw0KPiA+ICsJREVDTEFSRV9CSVRNQVAo bXNpX2lycV9pbl91c2UsIFBDSV9OVU1fTVNJKTsgfTsNCj4gPiArDQo+ID4gK3N0cnVjdCByb290 X3BvcnQgew0KPiA+ICsJY2hhciByb290X2J1c19ucjsNCj4gPiArCXZvaWQgX19pb21lbSAqY29u ZmlnX2F4aV9zbGF2ZV9iYXNlOwkvKiBlbmRwb2ludCBjb25maWcgYmFzZSAqLw0KPiA+ICsJc3Ry dWN0IHJlc291cmNlICpvYl9pb19yZXM7DQo+ID4gKwlpbnQgaXJxOw0KPiA+ICsJcmF3X3NwaW5s b2NrX3QgaW50eF9tYXNrX2xvY2s7DQo+ID4gKwlzdHJ1Y3QgaXJxX2RvbWFpbiAqaW50eF9kb21h aW47DQo+ID4gKwlzdHJ1Y3QgbW9iaXZlaWxfbXNpIG1zaTsNCj4gPiArCXN0cnVjdCBwY2lfaG9z dF9icmlkZ2UgKmJyaWRnZTsNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0cnVjdCBtb2JpdmVpbF9w Y2llIHsNCj4gPiArCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7DQo+ID4gKwl2b2lkIF9f aW9tZW0gKmNzcl9heGlfc2xhdmVfYmFzZTsJLyogcm9vdCBwb3J0IGNvbmZpZyBiYXNlICovDQo+ ID4gKwl2b2lkIF9faW9tZW0gKmFwYl9jc3JfYmFzZTsJLyogTVNJIHJlZ2lzdGVyIGJhc2UgKi8N Cj4gPiArCXBoeXNfYWRkcl90IHBjaWVfcmVnX2Jhc2U7CS8qIFBoeXNpY2FsIFBDSWUgQ29udHJv bGxlciBCYXNlICovDQo+ID4gKwlpbnQgYXBpb193aW5zOw0KPiA+ICsJaW50IHBwaW9fd2luczsN Cj4gPiArCWludCBvYl93aW5zX2NvbmZpZ3VyZWQ7CQkvKiBjb25maWd1cmVkIG91dGJvdW5kIHdp bmRvd3MgKi8NCj4gPiArCWludCBpYl93aW5zX2NvbmZpZ3VyZWQ7CQkvKiBjb25maWd1cmVkIGlu Ym91bmQgd2luZG93cyAqLw0KPiA+ICsJc3RydWN0IHJvb3RfcG9ydCBycDsNCj4gPiArfTsNCj4g PiArDQo+ID4gK2ludCBtb2JpdmVpbF9wY2llX2hvc3RfcHJvYmUoc3RydWN0IG1vYml2ZWlsX3Bj aWUgKnBjaWUpOyBib29sDQo+ID4gK21vYml2ZWlsX3BjaWVfbGlua191cChzdHJ1Y3QgbW9iaXZl aWxfcGNpZSAqcGNpZSk7IGludA0KPiA+ICttb2JpdmVpbF9icmluZ3VwX2xpbmsoc3RydWN0IG1v Yml2ZWlsX3BjaWUgKnBjaWUpOyB2b2lkDQo+ID4gK3Byb2dyYW1fb2Jfd2luZG93cyhzdHJ1Y3Qg bW9iaXZlaWxfcGNpZSAqcGNpZSwgaW50IHdpbl9udW0sIHU2NA0KPiBjcHVfYWRkciwNCj4gPiAr CQkJdTY0IHBjaV9hZGRyLCB1MzIgdHlwZSwgdTY0IHNpemUpOyB2b2lkDQo+IHByb2dyYW1faWJf d2luZG93cyhzdHJ1Y3QNCj4gPiArbW9iaXZlaWxfcGNpZSAqcGNpZSwgaW50IHdpbl9udW0sIHU2 NCBjcHVfYWRkciwNCj4gPiArCQkJdTY0IHBjaV9hZGRyLCB1MzIgdHlwZSwgdTY0IHNpemUpOw0K PiA+ICt1MzIgbW9iaXZlaWxfY3NyX3JlYWQoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIHUz MiBvZmYsIHNpemVfdA0KPiA+ICtzaXplKTsgdm9pZCBtb2JpdmVpbF9jc3Jfd3JpdGUoc3RydWN0 IG1vYml2ZWlsX3BjaWUgKnBjaWUsIHUzMiB2YWwsIHUzMiBvZmYsDQo+ID4gKwkJCXNpemVfdCBz aXplKTsNCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgdTMyIG1vYml2ZWlsX2Nzcl9yZWFkbChz dHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgdTMyDQo+ID4gK29mZikgew0KPiA+ICsJcmV0dXJu IG1vYml2ZWlsX2Nzcl9yZWFkKHBjaWUsIG9mZiwgMHg0KTsgfQ0KPiA+ICsNCj4gPiArc3RhdGlj IGlubGluZSB2b2lkIG1vYml2ZWlsX2Nzcl93cml0ZWwoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBj aWUsIHUzMiB2YWwsDQo+ID4gKwkJCQkgICAgICAgdTMyIG9mZikNCj4gPiArew0KPiA+ICsJbW9i aXZlaWxfY3NyX3dyaXRlKHBjaWUsIHZhbCwgb2ZmLCAweDQpOyB9DQo+ID4gKw0KPiA+ICsjZW5k aWYgLyogX1BDSUVfTU9CSVZFSUxfSCAqLw0KPiA+IC0tDQo+ID4gMi4xNy4xDQo+ID4NCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJu ZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRw Oi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK