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=-9.1 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_PASS,URIBL_BLOCKED,USER_AGENT_GIT 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 92A71C10F0E for ; Fri, 12 Apr 2019 09:53:19 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 160FB20850 for ; Fri, 12 Apr 2019 09:53:19 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=nxp.com header.i=@nxp.com header.b="totDVYAT" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727063AbfDLJxS (ORCPT ); Fri, 12 Apr 2019 05:53:18 -0400 Received: from mail-eopbgr10063.outbound.protection.outlook.com ([40.107.1.63]:5486 "EHLO EUR02-HE1-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726902AbfDLJxQ (ORCPT ); Fri, 12 Apr 2019 05:53:16 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nxp.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/1Zku6vfoKt7fEtyvJHYpXJNfQV1lP0TfoCJGhnswJc=; b=totDVYATj7spkNNv9JZUmgsxJ+rnT8gek8etDwHCMdK96F9gI5OjISDrIXq1LeTXG+ugxfxHBTMKH6WY4+C5ZmaBQypnhDIwHNMVJ2WPzeBgJfjUr6J1AQIwTunUwRSqZbyA3xpMxRjWegIVTtNz3hbQWZ1EGVll4rad/w8V0bE= Received: from AM6PR04MB5781.eurprd04.prod.outlook.com (20.179.3.19) by AM6PR04MB6262.eurprd04.prod.outlook.com (20.179.7.205) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1771.21; Fri, 12 Apr 2019 09:52:30 +0000 Received: from AM6PR04MB5781.eurprd04.prod.outlook.com ([fe80::f9db:ed86:614e:460]) by AM6PR04MB5781.eurprd04.prod.outlook.com ([fe80::f9db:ed86:614e:460%4]) with mapi id 15.20.1792.009; Fri, 12 Apr 2019 09:52:30 +0000 From: "Z.q. Hou" To: "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" , "mark.rutland@arm.com" , "l.subrahmanya@mobiveil.co.in" , "shawnguo@kernel.org" , Leo Li , "lorenzo.pieralisi@arm.com" , "catalin.marinas@arm.com" , "will.deacon@arm.com" CC: Mingkai Hu , "M.h. Lian" , Xiaowei Bao , "Z.q. Hou" Subject: [PATCHv5 1/6] PCI: mobiveil: Refactor Mobiveil PCIe Host Bridge IP driver Thread-Topic: [PATCHv5 1/6] PCI: mobiveil: Refactor Mobiveil PCIe Host Bridge IP driver Thread-Index: AQHU8RVxwCgqbmUIs0+mzKQDP7R+kg== Date: Fri, 12 Apr 2019 09:52:30 +0000 Message-ID: <20190412095332.41370-2-Zhiqiang.Hou@nxp.com> References: <20190412095332.41370-1-Zhiqiang.Hou@nxp.com> In-Reply-To: <20190412095332.41370-1-Zhiqiang.Hou@nxp.com> Accept-Language: zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: HK2PR02CA0210.apcprd02.prod.outlook.com (2603:1096:201:20::22) To AM6PR04MB5781.eurprd04.prod.outlook.com (2603:10a6:20b:ad::19) authentication-results: spf=none (sender IP is ) smtp.mailfrom=zhiqiang.hou@nxp.com; x-ms-exchange-messagesentrepresentingtype: 1 x-mailer: git-send-email 2.17.1 x-originating-ip: [119.31.174.73] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 6db5b21f-e447-4593-fb04-08d6bf2c93e6 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600139)(711020)(4605104)(4618075)(2017052603328)(7193020);SRVR:AM6PR04MB6262; x-ms-traffictypediagnostic: AM6PR04MB6262: x-microsoft-antispam-prvs: x-forefront-prvs: 0005B05917 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(366004)(346002)(136003)(376002)(396003)(39860400002)(199004)(54534003)(189003)(68736007)(81156014)(3846002)(66066001)(26005)(76176011)(81166006)(86362001)(2201001)(102836004)(186003)(386003)(7736002)(50226002)(7416002)(8676002)(2906002)(6506007)(8936002)(305945005)(5660300002)(6116002)(5024004)(14444005)(4326008)(476003)(53946003)(478600001)(25786009)(486006)(256004)(2616005)(105586002)(71190400001)(446003)(110136005)(6512007)(11346002)(1076003)(53936002)(14454004)(52116002)(6436002)(6486002)(71200400001)(54906003)(2501003)(30864003)(36756003)(106356001)(316002)(99286004)(97736004)(921003)(1121003)(559001)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:AM6PR04MB6262;H:AM6PR04MB5781.eurprd04.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: nxp.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: rIfl1AE9MSD5e5iYWGkwlAFU9N5Kn62f1dsWqJNWK0uyHnV1vBzt+dLNcCwMXhfvjZpoELQFyoiFfSB6Uwg/V+LL4qht9Cr9s4qQi3wTYfwivcTEIoikY6EY3FThbmmAaLm1X8BHgxIN9IzATEJ/X1Z1wBqag0mpt3nG0esFmHOFfVYp5HM2Vgp4ZVVQC1VdH5MgTUPugG0W4+N5Yi12BahsoCWK4QIEE1ASsNZmsgJBXsGrKsSuemIW2BfBjhkquJEHwQ8V0Ii4LFHQeJso7RQXN0youbhOYmQH8QDko4tXUzI/omi7P+/Bl0dBpBwgLcaxEgr1Ctjjy+BhgXQx0LbRtnyCprwl4o9QuTCIvi5Y2yPTV5/4+DV+4qmnboAMA/lWcfLRbsoVkJEZ2ob/zqfkQcQDDT0EeCrgx+e7Fq0= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: nxp.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6db5b21f-e447-4593-fb04-08d6bf2c93e6 X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Apr 2019 09:52:30.5862 (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-Transport-CrossTenantHeadersStamped: AM6PR04MB6262 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org RnJvbTogSG91IFpoaXFpYW5nIDxaaGlxaWFuZy5Ib3VAbnhwLmNvbT4NCg0KUmVmYWN0b3IgdGhl IE1vYml2ZWlsIFBDSWUgSG9zdCBCcmlkZ2UgSVAgZHJpdmVyIHRvIG1ha2UNCml0IGVhc2llciB0 byBhZGQgc3VwcG9ydCBmb3IgYm90aCBSQyBhbmQgRVAgbW9kZSBkcml2ZXIuDQpUaGlzIHBhdGNo IG1vdmVkIHRoZSBNb2JpdmVpbCBkcml2ZXIgdG8gYW4gbmV3IGRpcmVjdG9yeQ0KJ2RyaXZlcnMv cGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwnIGFuZCByZWZhY3RvciBpdCBhY2NvcmRpbmcNCnRvIHRo ZSBSQyBhbmQgRVAgYWJzdHJhY3Rpb24uDQoNClNpZ25lZC1vZmYtYnk6IEhvdSBaaGlxaWFuZyA8 WmhpcWlhbmcuSG91QG54cC5jb20+DQpSZXZpZXdlZC1ieTogTWluZ2h1YW4gTGlhbiA8TWluZ2h1 YW4uTGlhbkBueHAuY29tPg0KUmV2aWV3ZWQtYnk6IFN1YnJhaG1hbnlhIExpbmdhcHBhIDxsLnN1 YnJhaG1hbnlhQG1vYml2ZWlsLmNvLmluPg0KLS0tDQpWNToNCiAtIFJlZ2VuZXJhdGVkIHRoaXMg cGF0Y2ggb24gdGhlIG5ldyBiYXNlLg0KIC0gUmV0b3VjaGVkIHRoZSBjaGFuZ2Vsb2cuDQogLSBV cGRhdGVkIHRoZSBDb3B5cmlnaHQuDQoNCiBNQUlOVEFJTkVSUyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfCAgIDIgKy0NCiBkcml2ZXJzL3BjaS9jb250cm9sbGVyL0tjb25maWcg ICAgICAgICAgICAgICAgfCAgMTEgKy0NCiBkcml2ZXJzL3BjaS9jb250cm9sbGVyL01ha2VmaWxl ICAgICAgICAgICAgICAgfCAgIDIgKy0NCiBkcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWls L0tjb25maWcgICAgICAgfCAgMjQgKw0KIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwv TWFrZWZpbGUgICAgICB8ICAgNCArDQogLi4uL3BjaWUtbW9iaXZlaWwtaG9zdC5jfSAgICAgICAg ICAgICAgICAgICAgIHwgNTcwICsrKy0tLS0tLS0tLS0tLS0tLQ0KIC4uLi9jb250cm9sbGVyL21v Yml2ZWlsL3BjaWUtbW9iaXZlaWwtcGxhdC5jICB8ICA1NiArKw0KIC4uLi9wY2kvY29udHJvbGxl ci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLmMgICB8IDI0OCArKysrKysrKw0KIC4uLi9wY2kvY29u dHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLmggICB8IDIxMSArKysrKysrDQogOSBmaWxl cyBjaGFuZ2VkLCA2MzYgaW5zZXJ0aW9ucygrKSwgNDkyIGRlbGV0aW9ucygtKQ0KIGNyZWF0ZSBt b2RlIDEwMDY0NCBkcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL0tjb25maWcNCiBjcmVh dGUgbW9kZSAxMDA2NDQgZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9NYWtlZmlsZQ0K IHJlbmFtZSBkcml2ZXJzL3BjaS9jb250cm9sbGVyL3twY2llLW1vYml2ZWlsLmMgPT4gbW9iaXZl aWwvcGNpZS1tb2JpdmVpbC1ob3N0LmN9ICg1MyUpDQogY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZl cnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1tb2JpdmVpbC1wbGF0LmMNCiBjcmVhdGUg bW9kZSAxMDA2NDQgZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWls LmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9w Y2llLW1vYml2ZWlsLmgNCg0KZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlMN CmluZGV4IDFlNjQyNzlmMzM4YS4uMTAxM2U3NGIxNGYyIDEwMDY0NA0KLS0tIGEvTUFJTlRBSU5F UlMNCisrKyBiL01BSU5UQUlORVJTDQpAQCAtMTE4NzcsNyArMTE4NzcsNyBAQCBNOglTdWJyYWht YW55YSBMaW5nYXBwYSA8bC5zdWJyYWhtYW55YUBtb2JpdmVpbC5jby5pbj4NCiBMOglsaW51eC1w Y2lAdmdlci5rZXJuZWwub3JnDQogUzoJU3VwcG9ydGVkDQogRjoJRG9jdW1lbnRhdGlvbi9kZXZp Y2V0cmVlL2JpbmRpbmdzL3BjaS9tb2JpdmVpbC1wY2llLnR4dA0KLUY6CWRyaXZlcnMvcGNpL2Nv bnRyb2xsZXIvcGNpZS1tb2JpdmVpbC5jDQorRjoJZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2Jp dmVpbC9wY2llLW1vYml2ZWlsKg0KIA0KIFBDSSBEUklWRVIgRk9SIE1WRUJVIChNYXJ2ZWxsIEFy bWFkYSAzNzAgYW5kIEFybWFkYSBYUCBTT0Mgc3VwcG9ydCkNCiBNOglUaG9tYXMgUGV0YXp6b25p IDx0aG9tYXMucGV0YXp6b25pQGJvb3RsaW4uY29tPg0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNp L2NvbnRyb2xsZXIvS2NvbmZpZyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvS2NvbmZpZw0KaW5k ZXggNjY3MTk0NmRiZjY2Li4wZTk4MWVkMDBhNzUgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL3BjaS9j b250cm9sbGVyL0tjb25maWcNCisrKyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvS2NvbmZpZw0K QEAgLTI0MSwxNiArMjQxLDYgQEAgY29uZmlnIFBDSUVfTUVESUFURUsNCiAJICBTYXkgWSBoZXJl IGlmIHlvdSB3YW50IHRvIGVuYWJsZSBQQ0llIGNvbnRyb2xsZXIgc3VwcG9ydCBvbg0KIAkgIE1l ZGlhVGVrIFNvQ3MuDQogDQotY29uZmlnIFBDSUVfTU9CSVZFSUwNCi0JYm9vbCAiTW9iaXZlaWwg QVhJIFBDSWUgY29udHJvbGxlciINCi0JZGVwZW5kcyBvbiBBUkNIX1pZTlFNUCB8fCBDT01QSUxF X1RFU1QNCi0JZGVwZW5kcyBvbiBPRg0KLQlkZXBlbmRzIG9uIFBDSV9NU0lfSVJRX0RPTUFJTg0K LQloZWxwDQotCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgc3VwcG9ydCBmb3Ig dGhlIE1vYml2ZWlsIEFYSSBQQ0llDQotCSAgU29mdCBJUC4gSXQgaGFzIHVwIHRvIDggb3V0Ym91 bmQgYW5kIGluYm91bmQgd2luZG93cw0KLQkgIGZvciBhZGRyZXNzIHRyYW5zbGF0aW9uIGFuZCBp dCBpcyBhIFBDSWUgR2VuNCBJUC4NCi0NCiBjb25maWcgUENJRV9UQU5HT19TTVA4NzU5DQogCWJv b2wgIlRhbmdvIFNNUDg3NTkgUENJZSBjb250cm9sbGVyIChEQU5HRVJPVVMpIg0KIAlkZXBlbmRz IG9uIEFSQ0hfVEFOR08gJiYgUENJX01TSSAmJiBPRg0KQEAgLTI4MSw0ICsyNzEsNSBAQCBjb25m aWcgVk1EDQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZtZC4NCiANCiBzb3VyY2UgImRyaXZl cnMvcGNpL2NvbnRyb2xsZXIvZHdjL0tjb25maWciDQorc291cmNlICJkcml2ZXJzL3BjaS9jb250 cm9sbGVyL21vYml2ZWlsL0tjb25maWciDQogZW5kbWVudQ0KZGlmZiAtLWdpdCBhL2RyaXZlcnMv cGNpL2NvbnRyb2xsZXIvTWFrZWZpbGUgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL01ha2VmaWxl DQppbmRleCBkNTZhNTA3NDk1YzUuLmI3OWE2MTUwNDFhMCAxMDA2NDQNCi0tLSBhL2RyaXZlcnMv cGNpL2NvbnRyb2xsZXIvTWFrZWZpbGUNCisrKyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvTWFr ZWZpbGUNCkBAIC0yNiwxMSArMjYsMTEgQEAgb2JqLSQoQ09ORklHX1BDSUVfUk9DS0NISVApICs9 IHBjaWUtcm9ja2NoaXAubw0KIG9iai0kKENPTkZJR19QQ0lFX1JPQ0tDSElQX0VQKSArPSBwY2ll LXJvY2tjaGlwLWVwLm8NCiBvYmotJChDT05GSUdfUENJRV9ST0NLQ0hJUF9IT1NUKSArPSBwY2ll LXJvY2tjaGlwLWhvc3Qubw0KIG9iai0kKENPTkZJR19QQ0lFX01FRElBVEVLKSArPSBwY2llLW1l ZGlhdGVrLm8NCi1vYmotJChDT05GSUdfUENJRV9NT0JJVkVJTCkgKz0gcGNpZS1tb2JpdmVpbC5v DQogb2JqLSQoQ09ORklHX1BDSUVfVEFOR09fU01QODc1OSkgKz0gcGNpZS10YW5nby5vDQogb2Jq LSQoQ09ORklHX1ZNRCkgKz0gdm1kLm8NCiAjIHBjaWUtaGlzaS5vIHF1aXJrcyBhcmUgbmVlZGVk IGV2ZW4gd2l0aG91dCBDT05GSUdfUENJRV9EVw0KIG9iai15CQkJCSs9IGR3Yy8NCitvYmoteQkJ CQkrPSBtb2JpdmVpbC8NCiANCiANCiAjIFRoZSBmb2xsb3dpbmcgZHJpdmVycyBhcmUgZm9yIGRl dmljZXMgdGhhdCB1c2UgdGhlIGdlbmVyaWMgQUNQSQ0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNp L2NvbnRyb2xsZXIvbW9iaXZlaWwvS2NvbmZpZyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9i aXZlaWwvS2NvbmZpZw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4u NjQzNDNjMDdiZmVkDQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVy L21vYml2ZWlsL0tjb25maWcNCkBAIC0wLDAgKzEsMjQgQEANCisjIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wDQorDQorbWVudSAiTW9iaXZlaWwgUENJZSBDb3JlIFN1cHBvcnQiDQor CWRlcGVuZHMgb24gUENJDQorDQorY29uZmlnIFBDSUVfTU9CSVZFSUwNCisJYm9vbA0KKw0KK2Nv bmZpZyBQQ0lFX01PQklWRUlMX0hPU1QNCisgICAgICAgIGJvb2wNCisJZGVwZW5kcyBvbiBQQ0lf TVNJX0lSUV9ET01BSU4NCisgICAgICAgIHNlbGVjdCBQQ0lFX01PQklWRUlMDQorDQorY29uZmln IFBDSUVfTU9CSVZFSUxfUExBVA0KKwlib29sICJNb2JpdmVpbCBBWEkgUENJZSBjb250cm9sbGVy Ig0KKwlkZXBlbmRzIG9uIEFSQ0hfWllOUU1QIHx8IENPTVBJTEVfVEVTVA0KKwlkZXBlbmRzIG9u IE9GDQorCXNlbGVjdCBQQ0lFX01PQklWRUlMX0hPU1QNCisJaGVscA0KKwkgIFNheSBZIGhlcmUg aWYgeW91IHdhbnQgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIHRoZSBNb2JpdmVpbCBBWEkgUENJZQ0K KwkgIFNvZnQgSVAuIEl0IGhhcyB1cCB0byA4IG91dGJvdW5kIGFuZCBpbmJvdW5kIHdpbmRvd3MN CisJICBmb3IgYWRkcmVzcyB0cmFuc2xhdGlvbiBhbmQgaXQgaXMgYSBQQ0llIEdlbjQgSVAuDQor DQorZW5kbWVudQ0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwv TWFrZWZpbGUgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL01ha2VmaWxlDQpuZXcg ZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwLi45ZmI2ZDFjNjUwNGQNCi0tLSAv ZGV2L251bGwNCisrKyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvTWFrZWZpbGUN CkBAIC0wLDAgKzEsNCBAQA0KKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCitv YmotJChDT05GSUdfUENJRV9NT0JJVkVJTCkgKz0gcGNpZS1tb2JpdmVpbC5vDQorb2JqLSQoQ09O RklHX1BDSUVfTU9CSVZFSUxfSE9TVCkgKz0gcGNpZS1tb2JpdmVpbC1ob3N0Lm8NCitvYmotJChD T05GSUdfUENJRV9NT0JJVkVJTF9QTEFUKSArPSBwY2llLW1vYml2ZWlsLXBsYXQubw0KZGlmZiAt LWdpdCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1tb2JpdmVpbC5jIGIvZHJpdmVycy9w Y2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLWhvc3QuYw0Kc2ltaWxhcml0eSBp bmRleCA1MyUNCnJlbmFtZSBmcm9tIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvcGNpZS1tb2JpdmVp bC5jDQpyZW5hbWUgdG8gZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2 ZWlsLWhvc3QuYw0KaW5kZXggNDU2YWRmZWUzOTNjLi5lYmE5MGI2YjkxYjQgMTAwNjQ0DQotLS0g YS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtbW9iaXZlaWwuYw0KKysrIGIvZHJpdmVycy9w Y2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLWhvc3QuYw0KQEAgLTMsMTAgKzMs MTIgQEANCiAgKiBQQ0llIGhvc3QgY29udHJvbGxlciBkcml2ZXIgZm9yIE1vYml2ZWlsIFBDSWUg SG9zdCBjb250cm9sbGVyDQogICoNCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTggTW9iaXZlaWwgSW5j Lg0KKyAqIENvcHlyaWdodCAyMDE5IE5YUA0KKyAqDQogICogQXV0aG9yOiBTdWJyYWhtYW55YSBM aW5nYXBwYSA8bC5zdWJyYWhtYW55YUBtb2JpdmVpbC5jby5pbj4NCisgKiBSZWZhY3RvcjogWmhp cWlhbmcgSG91IDxaaGlxaWFuZy5Ib3VAbnhwLmNvbT4NCiAgKi8NCiANCi0jaW5jbHVkZSA8bGlu dXgvZGVsYXkuaD4NCiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPg0KICNpbmNsdWRlIDxsaW51eC9p bnRlcnJ1cHQuaD4NCiAjaW5jbHVkZSA8bGludXgvaXJxLmg+DQpAQCAtMjMsMjk5ICsyNSwyNSBA QA0KICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCiAjaW5jbHVkZSA8bGludXgv c2xhYi5oPg0KIA0KLSNpbmNsdWRlICIuLi9wY2kuaCINCi0NCi0vKiByZWdpc3RlciBvZmZzZXRz IGFuZCBiaXQgcG9zaXRpb25zICovDQotDQotLyoNCi0gKiB0cmFuc2xhdGlvbiB0YWJsZXMgYXJl IGdyb3VwZWQgaW50byB3aW5kb3dzLCBlYWNoIHdpbmRvdyByZWdpc3RlcnMgYXJlDQotICogZ3Jv dXBlZCBpbnRvIGJsb2NrcyBvZiA0IG9yIDE2IHJlZ2lzdGVycyBlYWNoDQotICovDQotI2RlZmlu ZSBQQUJfUkVHX0JMT0NLX1NJWkUJCTE2DQotI2RlZmluZSBQQUJfRVhUX1JFR19CTE9DS19TSVpF CQk0DQotDQotI2RlZmluZSBQQUJfUkVHX0FERFIob2Zmc2V0LCB3aW4pCVwNCi0JKG9mZnNldCAr ICh3aW4gKiBQQUJfUkVHX0JMT0NLX1NJWkUpKQ0KLSNkZWZpbmUgUEFCX0VYVF9SRUdfQUREUihv ZmZzZXQsIHdpbikJXA0KLQkob2Zmc2V0ICsgKHdpbiAqIFBBQl9FWFRfUkVHX0JMT0NLX1NJWkUp KQ0KLQ0KLSNkZWZpbmUgTFRTU01fU1RBVFVTCQkJMHgwNDA0DQotI2RlZmluZSAgTFRTU01fU1RB VFVTX0wwX01BU0sJCTB4M2YNCi0jZGVmaW5lICBMVFNTTV9TVEFUVVNfTDAJCTB4MmQNCi0NCi0j ZGVmaW5lIFBBQl9DVFJMCQkJMHgwODA4DQotI2RlZmluZSAgQU1CQV9QSU9fRU5BQkxFX1NISUZU CQkwDQotI2RlZmluZSAgUEVYX1BJT19FTkFCTEVfU0hJRlQJCTENCi0jZGVmaW5lICBQQUdFX1NF TF9TSElGVAkJCTEzDQotI2RlZmluZSAgUEFHRV9TRUxfTUFTSwkJCTB4M2YNCi0jZGVmaW5lICBQ QUdFX0xPX01BU0sJCQkweDNmZg0KLSNkZWZpbmUgIFBBR0VfU0VMX09GRlNFVF9TSElGVAkJMTAN Ci0NCi0jZGVmaW5lIFBBQl9BWElfUElPX0NUUkwJCTB4MDg0MA0KLSNkZWZpbmUgIEFQSU9fRU5f TUFTSwkJCTB4Zg0KLQ0KLSNkZWZpbmUgUEFCX1BFWF9QSU9fQ1RSTAkJMHgwOGMwDQotI2RlZmlu ZSAgUElPX0VOQUJMRV9TSElGVAkJMA0KLQ0KLSNkZWZpbmUgUEFCX0lOVFBfQU1CQV9NSVNDX0VO QgkJMHgwYjBjDQotI2RlZmluZSBQQUJfSU5UUF9BTUJBX01JU0NfU1RBVAkJMHgwYjFjDQotI2Rl ZmluZSAgUEFCX0lOVFBfSU5UWF9NQVNLCQkweDAxZTANCi0jZGVmaW5lICBQQUJfSU5UUF9NU0lf TUFTSwkJMHg4DQotDQotI2RlZmluZSBQQUJfQVhJX0FNQVBfQ1RSTCh3aW4pCQlQQUJfUkVHX0FE RFIoMHgwYmEwLCB3aW4pDQotI2RlZmluZSAgV0lOX0VOQUJMRV9TSElGVAkJMA0KLSNkZWZpbmUg IFdJTl9UWVBFX1NISUZUCQkJMQ0KLSNkZWZpbmUgIFdJTl9UWVBFX01BU0sJCQkweDMNCi0jZGVm aW5lICBXSU5fU0laRV9TSElGVAkJCTEwDQotI2RlZmluZSAgV0lOX1NJWkVfTUFTSwkJCTB4M2Zm ZmZmDQotDQotI2RlZmluZSBQQUJfRVhUX0FYSV9BTUFQX1NJWkUod2luKQlQQUJfRVhUX1JFR19B RERSKDB4YmFmMCwgd2luKQ0KLQ0KLSNkZWZpbmUgUEFCX0VYVF9BWElfQU1BUF9BWElfV0lOKHdp bikJUEFCX0VYVF9SRUdfQUREUigweDgwYTAsIHdpbikNCi0jZGVmaW5lIFBBQl9BWElfQU1BUF9B WElfV0lOKHdpbikJUEFCX1JFR19BRERSKDB4MGJhNCwgd2luKQ0KLSNkZWZpbmUgIEFYSV9XSU5E T1dfQUxJR05fTUFTSwkJMw0KLQ0KLSNkZWZpbmUgUEFCX0FYSV9BTUFQX1BFWF9XSU5fTCh3aW4p CVBBQl9SRUdfQUREUigweDBiYTgsIHdpbikNCi0jZGVmaW5lICBQQUJfQlVTX1NISUZUCQkJMjQN Ci0jZGVmaW5lICBQQUJfREVWSUNFX1NISUZUCQkxOQ0KLSNkZWZpbmUgIFBBQl9GVU5DVElPTl9T SElGVAkJMTYNCi0NCi0jZGVmaW5lIFBBQl9BWElfQU1BUF9QRVhfV0lOX0god2luKQlQQUJfUkVH X0FERFIoMHgwYmFjLCB3aW4pDQotI2RlZmluZSBQQUJfSU5UUF9BWElfUElPX0NMQVNTCQkweDQ3 NA0KLQ0KLSNkZWZpbmUgUEFCX1BFWF9BTUFQX0NUUkwod2luKQkJUEFCX1JFR19BRERSKDB4NGJh MCwgd2luKQ0KLSNkZWZpbmUgIEFNQVBfQ1RSTF9FTl9TSElGVAkJMA0KLSNkZWZpbmUgIEFNQVBf Q1RSTF9UWVBFX1NISUZUCQkxDQotI2RlZmluZSAgQU1BUF9DVFJMX1RZUEVfTUFTSwkJMw0KLQ0K LSNkZWZpbmUgUEFCX0VYVF9QRVhfQU1BUF9TSVpFTih3aW4pCVBBQl9FWFRfUkVHX0FERFIoMHhi ZWYwLCB3aW4pDQotI2RlZmluZSBQQUJfRVhUX1BFWF9BTUFQX0FYSV9XSU4od2luKQlQQUJfRVhU X1JFR19BRERSKDB4YjRhMCwgd2luKQ0KLSNkZWZpbmUgUEFCX1BFWF9BTUFQX0FYSV9XSU4od2lu KQlQQUJfUkVHX0FERFIoMHg0YmE0LCB3aW4pDQotI2RlZmluZSBQQUJfUEVYX0FNQVBfUEVYX1dJ Tl9MKHdpbikJUEFCX1JFR19BRERSKDB4NGJhOCwgd2luKQ0KLSNkZWZpbmUgUEFCX1BFWF9BTUFQ X1BFWF9XSU5fSCh3aW4pCVBBQl9SRUdfQUREUigweDRiYWMsIHdpbikNCi0NCi0vKiBzdGFydGlu ZyBvZmZzZXQgb2YgSU5UWCBiaXRzIGluIHN0YXR1cyByZWdpc3RlciAqLw0KLSNkZWZpbmUgUEFC X0lOVFhfU1RBUlQJCQk1DQotDQotLyogc3VwcG9ydGVkIG51bWJlciBvZiBNU0kgaW50ZXJydXB0 cyAqLw0KLSNkZWZpbmUgUENJX05VTV9NU0kJCQkxNg0KLQ0KLS8qIE1TSSByZWdpc3RlcnMgKi8N Ci0jZGVmaW5lIE1TSV9CQVNFX0xPX09GRlNFVAkJMHgwNA0KLSNkZWZpbmUgTVNJX0JBU0VfSElf T0ZGU0VUCQkweDA4DQotI2RlZmluZSBNU0lfU0laRV9PRkZTRVQJCQkweDBjDQotI2RlZmluZSBN U0lfRU5BQkxFX09GRlNFVAkJMHgxNA0KLSNkZWZpbmUgTVNJX1NUQVRVU19PRkZTRVQJCTB4MTgN Ci0jZGVmaW5lIE1TSV9EQVRBX09GRlNFVAkJCTB4MjANCi0jZGVmaW5lIE1TSV9BRERSX0xfT0ZG U0VUCQkweDI0DQotI2RlZmluZSBNU0lfQUREUl9IX09GRlNFVAkJMHgyOA0KLQ0KLS8qIG91dGJv dW5kIGFuZCBpbmJvdW5kIHdpbmRvdyBkZWZpbml0aW9ucyAqLw0KLSNkZWZpbmUgV0lOX05VTV8w CQkJMA0KLSNkZWZpbmUgV0lOX05VTV8xCQkJMQ0KLSNkZWZpbmUgQ0ZHX1dJTkRPV19UWVBFCQkJ MA0KLSNkZWZpbmUgSU9fV0lORE9XX1RZUEUJCQkxDQotI2RlZmluZSBNRU1fV0lORE9XX1RZUEUJ CQkyDQotI2RlZmluZSBJQl9XSU5fU0laRQkJCSgodTY0KTI1NiAqIDEwMjQgKiAxMDI0ICogMTAy NCkNCi0jZGVmaW5lIE1BWF9QSU9fV0lORE9XUwkJCTgNCi0NCi0vKiBQYXJhbWV0ZXJzIGZvciB0 aGUgd2FpdGluZyBmb3IgbGluayB1cCByb3V0aW5lICovDQotI2RlZmluZSBMSU5LX1dBSVRfTUFY X1JFVFJJRVMJCTEwDQotI2RlZmluZSBMSU5LX1dBSVRfTUlOCQkJOTAwMDANCi0jZGVmaW5lIExJ TktfV0FJVF9NQVgJCQkxMDAwMDANCi0NCi0jZGVmaW5lIFBBR0VEX0FERFJfQk5EUlkJCTB4YzAw DQotI2RlZmluZSBPRkZTRVRfVE9fUEFHRV9BRERSKG9mZikJXA0KLQkoKG9mZiAmIFBBR0VfTE9f TUFTSykgfCBQQUdFRF9BRERSX0JORFJZKQ0KLSNkZWZpbmUgT0ZGU0VUX1RPX1BBR0VfSURYKG9m ZikJCVwNCi0JKChvZmYgPj4gUEFHRV9TRUxfT0ZGU0VUX1NISUZUKSAmIFBBR0VfU0VMX01BU0sp DQotDQotc3RydWN0IG1vYml2ZWlsX21zaSB7CQkJLyogTVNJIGluZm9ybWF0aW9uICovDQotCXN0 cnVjdCBtdXRleCBsb2NrOwkJLyogcHJvdGVjdCBiaXRtYXAgdmFyaWFibGUgKi8NCi0Jc3RydWN0 IGlycV9kb21haW4gKm1zaV9kb21haW47DQotCXN0cnVjdCBpcnFfZG9tYWluICpkZXZfZG9tYWlu Ow0KLQlwaHlzX2FkZHJfdCBtc2lfcGFnZXNfcGh5czsNCi0JaW50IG51bV9vZl92ZWN0b3JzOw0K LQlERUNMQVJFX0JJVE1BUChtc2lfaXJxX2luX3VzZSwgUENJX05VTV9NU0kpOw0KLX07DQotDQot c3RydWN0IG1vYml2ZWlsX3BjaWUgew0KLQlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2Ow0K LQlzdHJ1Y3QgbGlzdF9oZWFkIHJlc291cmNlczsNCi0Jdm9pZCBfX2lvbWVtICpjb25maWdfYXhp X3NsYXZlX2Jhc2U7CS8qIGVuZHBvaW50IGNvbmZpZyBiYXNlICovDQotCXZvaWQgX19pb21lbSAq Y3NyX2F4aV9zbGF2ZV9iYXNlOwkvKiByb290IHBvcnQgY29uZmlnIGJhc2UgKi8NCi0Jdm9pZCBf X2lvbWVtICphcGJfY3NyX2Jhc2U7CS8qIE1TSSByZWdpc3RlciBiYXNlICovDQotCXBoeXNfYWRk cl90IHBjaWVfcmVnX2Jhc2U7CS8qIFBoeXNpY2FsIFBDSWUgQ29udHJvbGxlciBCYXNlICovDQot CXN0cnVjdCBpcnFfZG9tYWluICppbnR4X2RvbWFpbjsNCi0JcmF3X3NwaW5sb2NrX3QgaW50eF9t YXNrX2xvY2s7DQotCWludCBpcnE7DQotCWludCBhcGlvX3dpbnM7DQotCWludCBwcGlvX3dpbnM7 DQotCWludCBvYl93aW5zX2NvbmZpZ3VyZWQ7CQkvKiBjb25maWd1cmVkIG91dGJvdW5kIHdpbmRv d3MgKi8NCi0JaW50IGliX3dpbnNfY29uZmlndXJlZDsJCS8qIGNvbmZpZ3VyZWQgaW5ib3VuZCB3 aW5kb3dzICovDQotCXN0cnVjdCByZXNvdXJjZSAqb2JfaW9fcmVzOw0KLQljaGFyIHJvb3RfYnVz X25yOw0KLQlzdHJ1Y3QgbW9iaXZlaWxfbXNpIG1zaTsNCi19Ow0KLQ0KLS8qDQotICogbW9iaXZl aWxfcGNpZV9zZWxfcGFnZSAtIHJvdXRpbmUgdG8gYWNjZXNzIHBhZ2VkIHJlZ2lzdGVyDQotICoN Ci0gKiBSZWdpc3RlcnMgd2hvc2UgYWRkcmVzcyBncmVhdGVyIHRoYW4gUEFHRURfQUREUl9CTkRS WSAoMHhjMDApIGFyZSBwYWdlZCwNCi0gKiBmb3IgdGhpcyBzY2hlbWUgdG8gd29yayBleHRyYWN0 ZWQgaGlnaGVyIDYgYml0cyBvZiB0aGUgb2Zmc2V0IHdpbGwgYmUNCi0gKiB3cml0dGVuIHRvIHBn X3NlbCBmaWVsZCBvZiBQQUJfQ1RSTCByZWdpc3RlciBhbmQgcmVzdCBvZiB0aGUgbG93ZXIgMTAN Ci0gKiBiaXRzIGVuYWJsZWQgd2l0aCBQQUdFRF9BRERSX0JORFJZIGFyZSB1c2VkIGFzIG9mZnNl dCBvZiB0aGUgcmVnaXN0ZXIuDQotICovDQotc3RhdGljIHZvaWQgbW9iaXZlaWxfcGNpZV9zZWxf cGFnZShzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgdTggcGdfaWR4KQ0KLXsNCi0JdTMyIHZh bDsNCi0NCi0JdmFsID0gcmVhZGwocGNpZS0+Y3NyX2F4aV9zbGF2ZV9iYXNlICsgUEFCX0NUUkwp Ow0KLQl2YWwgJj0gfihQQUdFX1NFTF9NQVNLIDw8IFBBR0VfU0VMX1NISUZUKTsNCi0JdmFsIHw9 IChwZ19pZHggJiBQQUdFX1NFTF9NQVNLKSA8PCBQQUdFX1NFTF9TSElGVDsNCi0NCi0Jd3JpdGVs KHZhbCwgcGNpZS0+Y3NyX2F4aV9zbGF2ZV9iYXNlICsgUEFCX0NUUkwpOw0KLX0NCi0NCi1zdGF0 aWMgdm9pZCAqbW9iaXZlaWxfcGNpZV9jb21wX2FkZHIoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBj aWUsIHUzMiBvZmYpDQotew0KLQlpZiAob2ZmIDwgUEFHRURfQUREUl9CTkRSWSkgew0KLQkJLyog Rm9yIGRpcmVjdGx5IGFjY2Vzc2VkIHJlZ2lzdGVycywgY2xlYXIgdGhlIHBnX3NlbCBmaWVsZCAq Lw0KLQkJbW9iaXZlaWxfcGNpZV9zZWxfcGFnZShwY2llLCAwKTsNCi0JCXJldHVybiBwY2llLT5j c3JfYXhpX3NsYXZlX2Jhc2UgKyBvZmY7DQotCX0NCi0NCi0JbW9iaXZlaWxfcGNpZV9zZWxfcGFn ZShwY2llLCBPRkZTRVRfVE9fUEFHRV9JRFgob2ZmKSk7DQotCXJldHVybiBwY2llLT5jc3JfYXhp X3NsYXZlX2Jhc2UgKyBPRkZTRVRfVE9fUEFHRV9BRERSKG9mZik7DQotfQ0KLQ0KLXN0YXRpYyBp bnQgbW9iaXZlaWxfcGNpZV9yZWFkKHZvaWQgX19pb21lbSAqYWRkciwgaW50IHNpemUsIHUzMiAq dmFsKQ0KLXsNCi0JaWYgKCh1aW50cHRyX3QpYWRkciAmIChzaXplIC0gMSkpIHsNCi0JCSp2YWwg PSAwOw0KLQkJcmV0dXJuIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsNCi0JfQ0KLQ0KLQlz d2l0Y2ggKHNpemUpIHsNCi0JY2FzZSA0Og0KLQkJKnZhbCA9IHJlYWRsKGFkZHIpOw0KLQkJYnJl YWs7DQotCWNhc2UgMjoNCi0JCSp2YWwgPSByZWFkdyhhZGRyKTsNCi0JCWJyZWFrOw0KLQljYXNl IDE6DQotCQkqdmFsID0gcmVhZGIoYWRkcik7DQotCQlicmVhazsNCi0JZGVmYXVsdDoNCi0JCSp2 YWwgPSAwOw0KLQkJcmV0dXJuIFBDSUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsNCi0JfQ0KLQ0K LQlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOw0KLX0NCi0NCi1zdGF0aWMgaW50IG1vYml2ZWls X3BjaWVfd3JpdGUodm9pZCBfX2lvbWVtICphZGRyLCBpbnQgc2l6ZSwgdTMyIHZhbCkNCi17DQot CWlmICgodWludHB0cl90KWFkZHIgJiAoc2l6ZSAtIDEpKQ0KLQkJcmV0dXJuIFBDSUJJT1NfQkFE X1JFR0lTVEVSX05VTUJFUjsNCi0NCi0Jc3dpdGNoIChzaXplKSB7DQotCWNhc2UgNDoNCi0JCXdy aXRlbCh2YWwsIGFkZHIpOw0KLQkJYnJlYWs7DQotCWNhc2UgMjoNCi0JCXdyaXRldyh2YWwsIGFk ZHIpOw0KLQkJYnJlYWs7DQotCWNhc2UgMToNCi0JCXdyaXRlYih2YWwsIGFkZHIpOw0KLQkJYnJl YWs7DQotCWRlZmF1bHQ6DQotCQlyZXR1cm4gUENJQklPU19CQURfUkVHSVNURVJfTlVNQkVSOw0K LQl9DQotDQotCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7DQotfQ0KLQ0KLXN0YXRpYyB1MzIg Y3NyX3JlYWQoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIHUzMiBvZmYsIHNpemVfdCBzaXpl KQ0KLXsNCi0Jdm9pZCAqYWRkcjsNCi0JdTMyIHZhbDsNCi0JaW50IHJldDsNCi0NCi0JYWRkciA9 IG1vYml2ZWlsX3BjaWVfY29tcF9hZGRyKHBjaWUsIG9mZik7DQotDQotCXJldCA9IG1vYml2ZWls X3BjaWVfcmVhZChhZGRyLCBzaXplLCAmdmFsKTsNCi0JaWYgKHJldCkNCi0JCWRldl9lcnIoJnBj aWUtPnBkZXYtPmRldiwgInJlYWQgQ1NSIGFkZHJlc3MgZmFpbGVkXG4iKTsNCi0NCi0JcmV0dXJu IHZhbDsNCi19DQotDQotc3RhdGljIHZvaWQgY3NyX3dyaXRlKHN0cnVjdCBtb2JpdmVpbF9wY2ll ICpwY2llLCB1MzIgdmFsLCB1MzIgb2ZmLCBzaXplX3Qgc2l6ZSkNCi17DQotCXZvaWQgKmFkZHI7 DQotCWludCByZXQ7DQotDQotCWFkZHIgPSBtb2JpdmVpbF9wY2llX2NvbXBfYWRkcihwY2llLCBv ZmYpOw0KLQ0KLQlyZXQgPSBtb2JpdmVpbF9wY2llX3dyaXRlKGFkZHIsIHNpemUsIHZhbCk7DQot CWlmIChyZXQpDQotCQlkZXZfZXJyKCZwY2llLT5wZGV2LT5kZXYsICJ3cml0ZSBDU1IgYWRkcmVz cyBmYWlsZWRcbiIpOw0KLX0NCi0NCi1zdGF0aWMgdTMyIGNzcl9yZWFkbChzdHJ1Y3QgbW9iaXZl aWxfcGNpZSAqcGNpZSwgdTMyIG9mZikNCi17DQotCXJldHVybiBjc3JfcmVhZChwY2llLCBvZmYs IDB4NCk7DQotfQ0KLQ0KLXN0YXRpYyB1MzIgY3NyX3JlYWR3KHN0cnVjdCBtb2JpdmVpbF9wY2ll ICpwY2llLCB1MzIgb2ZmKQ0KLXsNCi0JcmV0dXJuIGNzcl9yZWFkKHBjaWUsIG9mZiwgMHgyKTsN Ci19DQotDQotc3RhdGljIHUzMiBjc3JfcmVhZGIoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUs IHUzMiBvZmYpDQotew0KLQlyZXR1cm4gY3NyX3JlYWQocGNpZSwgb2ZmLCAweDEpOw0KLX0NCi0N Ci1zdGF0aWMgdm9pZCBjc3Jfd3JpdGVsKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llLCB1MzIg dmFsLCB1MzIgb2ZmKQ0KLXsNCi0JY3NyX3dyaXRlKHBjaWUsIHZhbCwgb2ZmLCAweDQpOw0KLX0N Ci0NCi1zdGF0aWMgdm9pZCBjc3Jfd3JpdGV3KHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llLCB1 MzIgdmFsLCB1MzIgb2ZmKQ0KLXsNCi0JY3NyX3dyaXRlKHBjaWUsIHZhbCwgb2ZmLCAweDIpOw0K LX0NCi0NCi1zdGF0aWMgdm9pZCBjc3Jfd3JpdGViKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2ll LCB1MzIgdmFsLCB1MzIgb2ZmKQ0KLXsNCi0JY3NyX3dyaXRlKHBjaWUsIHZhbCwgb2ZmLCAweDEp Ow0KLX0NCi0NCi1zdGF0aWMgYm9vbCBtb2JpdmVpbF9wY2llX2xpbmtfdXAoc3RydWN0IG1vYml2 ZWlsX3BjaWUgKnBjaWUpDQotew0KLQlyZXR1cm4gKGNzcl9yZWFkbChwY2llLCBMVFNTTV9TVEFU VVMpICYNCi0JCUxUU1NNX1NUQVRVU19MMF9NQVNLKSA9PSBMVFNTTV9TVEFUVVNfTDA7DQotfQ0K KyNpbmNsdWRlICJwY2llLW1vYml2ZWlsLmgiDQogDQogc3RhdGljIGJvb2wgbW9iaXZlaWxfcGNp ZV92YWxpZF9kZXZpY2Uoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuKQ0K IHsNCiAJc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUgPSBidXMtPnN5c2RhdGE7DQogDQogCS8q IElmIHRoZXJlIGlzIG5vIGxpbmssIHRoZW4gdGhlcmUgaXMgbm8gZGV2aWNlICovDQotCWlmIChi dXMtPm51bWJlciA+IHBjaWUtPnJvb3RfYnVzX25yICYmICFtb2JpdmVpbF9wY2llX2xpbmtfdXAo cGNpZSkpDQorCWlmIChidXMtPm51bWJlciA+IHBjaWUtPnJwLnJvb3RfYnVzX25yICYmICFtb2Jp dmVpbF9wY2llX2xpbmtfdXAocGNpZSkpDQogCQlyZXR1cm4gZmFsc2U7DQogDQogCS8qIE9ubHkg b25lIGRldmljZSBkb3duIG9uIGVhY2ggcm9vdCBwb3J0ICovDQotCWlmICgoYnVzLT5udW1iZXIg PT0gcGNpZS0+cm9vdF9idXNfbnIpICYmIChkZXZmbiA+IDApKQ0KKwlpZiAoKGJ1cy0+bnVtYmVy ID09IHBjaWUtPnJwLnJvb3RfYnVzX25yKSAmJiAoZGV2Zm4gPiAwKSkNCiAJCXJldHVybiBmYWxz ZTsNCiANCiAJLyoNCiAJICogRG8gbm90IHJlYWQgbW9yZSB0aGFuIG9uZSBkZXZpY2Ugb24gdGhl IGJ1cyBkaXJlY3RseQ0KIAkgKiBhdHRhY2hlZCB0byBSQw0KIAkgKi8NCi0JaWYgKChidXMtPnBy aW1hcnkgPT0gcGNpZS0+cm9vdF9idXNfbnIpICYmIChQQ0lfU0xPVChkZXZmbikgPiAwKSkNCisJ aWYgKChidXMtPnByaW1hcnkgPT0gcGNpZS0+cnAucm9vdF9idXNfbnIpICYmIChQQ0lfU0xPVChk ZXZmbikgPiAwKSkNCiAJCXJldHVybiBmYWxzZTsNCiANCiAJcmV0dXJuIHRydWU7DQpAQCAtMzM1 LDcgKzYzLDcgQEAgc3RhdGljIHZvaWQgX19pb21lbSAqbW9iaXZlaWxfcGNpZV9tYXBfYnVzKHN0 cnVjdCBwY2lfYnVzICpidXMsDQogCQlyZXR1cm4gTlVMTDsNCiANCiAJLyogUkMgY29uZmlnIGFj Y2VzcyAqLw0KLQlpZiAoYnVzLT5udW1iZXIgPT0gcGNpZS0+cm9vdF9idXNfbnIpDQorCWlmIChi dXMtPm51bWJlciA9PSBwY2llLT5ycC5yb290X2J1c19ucikNCiAJCXJldHVybiBwY2llLT5jc3Jf YXhpX3NsYXZlX2Jhc2UgKyB3aGVyZTsNCiANCiAJLyoNCkBAIC0zNTAsNyArNzgsNyBAQCBzdGF0 aWMgdm9pZCBfX2lvbWVtICptb2JpdmVpbF9wY2llX21hcF9idXMoc3RydWN0IHBjaV9idXMgKmJ1 cywNCiANCiAJY3NyX3dyaXRlbChwY2llLCB2YWx1ZSwgUEFCX0FYSV9BTUFQX1BFWF9XSU5fTChX SU5fTlVNXzApKTsNCiANCi0JcmV0dXJuIHBjaWUtPmNvbmZpZ19heGlfc2xhdmVfYmFzZSArIHdo ZXJlOw0KKwlyZXR1cm4gcGNpZS0+cnAuY29uZmlnX2F4aV9zbGF2ZV9iYXNlICsgd2hlcmU7DQog fQ0KIA0KIHN0YXRpYyBzdHJ1Y3QgcGNpX29wcyBtb2JpdmVpbF9wY2llX29wcyA9IHsNCkBAIC0z NjQsNyArOTIsNyBAQCBzdGF0aWMgdm9pZCBtb2JpdmVpbF9wY2llX2lzcihzdHJ1Y3QgaXJxX2Rl c2MgKmRlc2MpDQogCXN0cnVjdCBpcnFfY2hpcCAqY2hpcCA9IGlycV9kZXNjX2dldF9jaGlwKGRl c2MpOw0KIAlzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSA9IGlycV9kZXNjX2dldF9oYW5kbGVy X2RhdGEoZGVzYyk7DQogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwY2llLT5wZGV2LT5kZXY7DQot CXN0cnVjdCBtb2JpdmVpbF9tc2kgKm1zaSA9ICZwY2llLT5tc2k7DQorCXN0cnVjdCBtb2JpdmVp bF9tc2kgKm1zaSA9ICZwY2llLT5ycC5tc2k7DQogCXUzMiBtc2lfZGF0YSwgbXNpX2FkZHJfbG8s IG1zaV9hZGRyX2hpOw0KIAl1MzIgaW50cl9zdGF0dXMsIG1zaV9zdGF0dXM7DQogCXVuc2lnbmVk IGxvbmcgc2hpZnRlZF9zdGF0dXM7DQpAQCAtMzg5LDcgKzExNyw3IEBAIHN0YXRpYyB2b2lkIG1v Yml2ZWlsX3BjaWVfaXNyKHN0cnVjdCBpcnFfZGVzYyAqZGVzYykNCiAJCXNoaWZ0ZWRfc3RhdHVz ID4+PSBQQUJfSU5UWF9TVEFSVDsNCiAJCWRvIHsNCiAJCQlmb3JfZWFjaF9zZXRfYml0KGJpdCwg JnNoaWZ0ZWRfc3RhdHVzLCBQQ0lfTlVNX0lOVFgpIHsNCi0JCQkJdmlycSA9IGlycV9maW5kX21h cHBpbmcocGNpZS0+aW50eF9kb21haW4sDQorCQkJCXZpcnEgPSBpcnFfZmluZF9tYXBwaW5nKHBj aWUtPnJwLmludHhfZG9tYWluLA0KIAkJCQkJCQliaXQgKyAxKTsNCiAJCQkJaWYgKHZpcnEpDQog CQkJCQlnZW5lcmljX2hhbmRsZV9pcnEodmlycSk7DQpAQCAtNDUyLDEwICsxODAsMTAgQEAgc3Rh dGljIGludCBtb2JpdmVpbF9wY2llX3BhcnNlX2R0KHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2ll KQ0KIAkvKiBtYXAgY29uZmlnIHJlc291cmNlICovDQogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNv dXJjZV9ieW5hbWUocGRldiwgSU9SRVNPVVJDRV9NRU0sDQogCQkJCQkgICAiY29uZmlnX2F4aV9z bGF2ZSIpOw0KLQlwY2llLT5jb25maWdfYXhpX3NsYXZlX2Jhc2UgPSBkZXZtX3BjaV9yZW1hcF9j ZmdfcmVzb3VyY2UoZGV2LCByZXMpOw0KLQlpZiAoSVNfRVJSKHBjaWUtPmNvbmZpZ19heGlfc2xh dmVfYmFzZSkpDQotCQlyZXR1cm4gUFRSX0VSUihwY2llLT5jb25maWdfYXhpX3NsYXZlX2Jhc2Up Ow0KLQlwY2llLT5vYl9pb19yZXMgPSByZXM7DQorCXBjaWUtPnJwLmNvbmZpZ19heGlfc2xhdmVf YmFzZSA9IGRldm1fcGNpX3JlbWFwX2NmZ19yZXNvdXJjZShkZXYsIHJlcyk7DQorCWlmIChJU19F UlIocGNpZS0+cnAuY29uZmlnX2F4aV9zbGF2ZV9iYXNlKSkNCisJCXJldHVybiBQVFJfRVJSKHBj aWUtPnJwLmNvbmZpZ19heGlfc2xhdmVfYmFzZSk7DQorCXBjaWUtPnJwLm9iX2lvX3JlcyA9IHJl czsNCiANCiAJLyogbWFwIGNzciByZXNvdXJjZSAqLw0KIAlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVz b3VyY2VfYnluYW1lKHBkZXYsIElPUkVTT1VSQ0VfTUVNLA0KQEAgLTQ2NSwxMiArMTkzLDYgQEAg c3RhdGljIGludCBtb2JpdmVpbF9wY2llX3BhcnNlX2R0KHN0cnVjdCBtb2JpdmVpbF9wY2llICpw Y2llKQ0KIAkJcmV0dXJuIFBUUl9FUlIocGNpZS0+Y3NyX2F4aV9zbGF2ZV9iYXNlKTsNCiAJcGNp ZS0+cGNpZV9yZWdfYmFzZSA9IHJlcy0+c3RhcnQ7DQogDQotCS8qIG1hcCBNU0kgY29uZmlnIHJl c291cmNlICovDQotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5hbWUocGRldiwgSU9S RVNPVVJDRV9NRU0sICJhcGJfY3NyIik7DQotCXBjaWUtPmFwYl9jc3JfYmFzZSA9IGRldm1fcGNp X3JlbWFwX2NmZ19yZXNvdXJjZShkZXYsIHJlcyk7DQotCWlmIChJU19FUlIocGNpZS0+YXBiX2Nz cl9iYXNlKSkNCi0JCXJldHVybiBQVFJfRVJSKHBjaWUtPmFwYl9jc3JfYmFzZSk7DQotDQogCS8q IHJlYWQgdGhlIG51bWJlciBvZiB3aW5kb3dzIHJlcXVlc3RlZCAqLw0KIAlpZiAob2ZfcHJvcGVy dHlfcmVhZF91MzIobm9kZSwgImFwaW8td2lucyIsICZwY2llLT5hcGlvX3dpbnMpKQ0KIAkJcGNp ZS0+YXBpb193aW5zID0gTUFYX1BJT19XSU5ET1dTOw0KQEAgLTQ3OCwxMzcgKzIwMCwxNSBAQCBz dGF0aWMgaW50IG1vYml2ZWlsX3BjaWVfcGFyc2VfZHQoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBj aWUpDQogCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3UzMihub2RlLCAicHBpby13aW5zIiwgJnBjaWUt PnBwaW9fd2lucykpDQogCQlwY2llLT5wcGlvX3dpbnMgPSBNQVhfUElPX1dJTkRPV1M7DQogDQot CXBjaWUtPmlycSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7DQotCWlmIChwY2llLT5pcnEg PD0gMCkgew0KLQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gbWFwIElSUTogJWRcbiIsIHBjaWUt PmlycSk7DQotCQlyZXR1cm4gLUVOT0RFVjsNCi0JfQ0KLQ0KIAlyZXR1cm4gMDsNCiB9DQogDQot c3RhdGljIHZvaWQgcHJvZ3JhbV9pYl93aW5kb3dzKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2ll LCBpbnQgd2luX251bSwNCi0JCQkgICAgICAgdTY0IGNwdV9hZGRyLCB1NjQgcGNpX2FkZHIsIHUz MiB0eXBlLCB1NjQgc2l6ZSkNCi17DQotCXUzMiB2YWx1ZTsNCi0JdTY0IHNpemU2NCA9IH4oc2l6 ZSAtIDEpOw0KLQ0KLQlpZiAod2luX251bSA+PSBwY2llLT5wcGlvX3dpbnMpIHsNCi0JCWRldl9l cnIoJnBjaWUtPnBkZXYtPmRldiwNCi0JCQkiRVJST1I6IG1heCBpbmJvdW5kIHdpbmRvd3MgcmVh Y2hlZCAhXG4iKTsNCi0JCXJldHVybjsNCi0JfQ0KLQ0KLQl2YWx1ZSA9IGNzcl9yZWFkbChwY2ll LCBQQUJfUEVYX0FNQVBfQ1RSTCh3aW5fbnVtKSk7DQotCXZhbHVlICY9IH4oQU1BUF9DVFJMX1RZ UEVfTUFTSyA8PCBBTUFQX0NUUkxfVFlQRV9TSElGVCB8DQotCQkgV0lOX1NJWkVfTUFTSyA8PCBX SU5fU0laRV9TSElGVCk7DQotCXZhbHVlIHw9ICh0eXBlIDw8IEFNQVBfQ1RSTF9UWVBFX1NISUZU KSB8ICgxIDw8IEFNQVBfQ1RSTF9FTl9TSElGVCkgfA0KLQkJIChsb3dlcl8zMl9iaXRzKHNpemU2 NCkgJiBXSU5fU0laRV9NQVNLIDw8IFdJTl9TSVpFX1NISUZUKTsNCi0JY3NyX3dyaXRlbChwY2ll LCB2YWx1ZSwgUEFCX1BFWF9BTUFQX0NUUkwod2luX251bSkpOw0KLQ0KLQljc3Jfd3JpdGVsKHBj aWUsIHVwcGVyXzMyX2JpdHMoc2l6ZTY0KSwNCi0JCSAgIFBBQl9FWFRfUEVYX0FNQVBfU0laRU4o d2luX251bSkpOw0KLQ0KLQljc3Jfd3JpdGVsKHBjaWUsIGxvd2VyXzMyX2JpdHMoY3B1X2FkZHIp LA0KLQkJICAgUEFCX1BFWF9BTUFQX0FYSV9XSU4od2luX251bSkpOw0KLQljc3Jfd3JpdGVsKHBj aWUsIHVwcGVyXzMyX2JpdHMoY3B1X2FkZHIpLA0KLQkJICAgUEFCX0VYVF9QRVhfQU1BUF9BWElf V0lOKHdpbl9udW0pKTsNCi0NCi0JY3NyX3dyaXRlbChwY2llLCBsb3dlcl8zMl9iaXRzKHBjaV9h ZGRyKSwNCi0JCSAgIFBBQl9QRVhfQU1BUF9QRVhfV0lOX0wod2luX251bSkpOw0KLQljc3Jfd3Jp dGVsKHBjaWUsIHVwcGVyXzMyX2JpdHMocGNpX2FkZHIpLA0KLQkJICAgUEFCX1BFWF9BTUFQX1BF WF9XSU5fSCh3aW5fbnVtKSk7DQotDQotCXBjaWUtPmliX3dpbnNfY29uZmlndXJlZCsrOw0KLX0N Ci0NCi0vKg0KLSAqIHJvdXRpbmUgdG8gcHJvZ3JhbSB0aGUgb3V0Ym91bmQgd2luZG93cw0KLSAq Lw0KLXN0YXRpYyB2b2lkIHByb2dyYW1fb2Jfd2luZG93cyhzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAq cGNpZSwgaW50IHdpbl9udW0sDQotCQkJICAgICAgIHU2NCBjcHVfYWRkciwgdTY0IHBjaV9hZGRy LCB1MzIgdHlwZSwgdTY0IHNpemUpDQotew0KLQ0KLQl1MzIgdmFsdWU7DQotCXU2NCBzaXplNjQg PSB+KHNpemUgLSAxKTsNCi0NCi0JaWYgKHdpbl9udW0gPj0gcGNpZS0+YXBpb193aW5zKSB7DQot CQlkZXZfZXJyKCZwY2llLT5wZGV2LT5kZXYsDQotCQkJIkVSUk9SOiBtYXggb3V0Ym91bmQgd2lu ZG93cyByZWFjaGVkICFcbiIpOw0KLQkJcmV0dXJuOw0KLQl9DQotDQotCS8qDQotCSAqIHByb2dy YW0gRW5hYmxlIEJpdCB0byAxLCBUeXBlIEJpdCB0byAoMDApIGJhc2UgMiwgQVhJIFdpbmRvdyBT aXplIEJpdA0KLQkgKiB0byA0IEtCIGluIFBBQl9BWElfQU1BUF9DVFJMIHJlZ2lzdGVyDQotCSAq Lw0KLQl2YWx1ZSA9IGNzcl9yZWFkbChwY2llLCBQQUJfQVhJX0FNQVBfQ1RSTCh3aW5fbnVtKSk7 DQotCXZhbHVlICY9IH4oV0lOX1RZUEVfTUFTSyA8PCBXSU5fVFlQRV9TSElGVCB8DQotCQkgV0lO X1NJWkVfTUFTSyA8PCBXSU5fU0laRV9TSElGVCk7DQotCXZhbHVlIHw9IDEgPDwgV0lOX0VOQUJM RV9TSElGVCB8IHR5cGUgPDwgV0lOX1RZUEVfU0hJRlQgfA0KLQkJIChsb3dlcl8zMl9iaXRzKHNp emU2NCkgJiBXSU5fU0laRV9NQVNLIDw8IFdJTl9TSVpFX1NISUZUKTsNCi0JY3NyX3dyaXRlbChw Y2llLCB2YWx1ZSwgUEFCX0FYSV9BTUFQX0NUUkwod2luX251bSkpOw0KLQ0KLQljc3Jfd3JpdGVs KHBjaWUsIHVwcGVyXzMyX2JpdHMoc2l6ZTY0KSwgUEFCX0VYVF9BWElfQU1BUF9TSVpFKHdpbl9u dW0pKTsNCi0NCi0JLyoNCi0JICogcHJvZ3JhbSBBWEkgd2luZG93IGJhc2Ugd2l0aCBhcHByb3By aWF0ZSB2YWx1ZSBpbg0KLQkgKiBQQUJfQVhJX0FNQVBfQVhJX1dJTjAgcmVnaXN0ZXINCi0JICov DQotCWNzcl93cml0ZWwocGNpZSwgbG93ZXJfMzJfYml0cyhjcHVfYWRkcikgJiAofkFYSV9XSU5E T1dfQUxJR05fTUFTSyksDQotCQkgICBQQUJfQVhJX0FNQVBfQVhJX1dJTih3aW5fbnVtKSk7DQot CWNzcl93cml0ZWwocGNpZSwgdXBwZXJfMzJfYml0cyhjcHVfYWRkciksDQotCQkgICBQQUJfRVhU X0FYSV9BTUFQX0FYSV9XSU4od2luX251bSkpOw0KLQ0KLQljc3Jfd3JpdGVsKHBjaWUsIGxvd2Vy XzMyX2JpdHMocGNpX2FkZHIpLA0KLQkJICAgUEFCX0FYSV9BTUFQX1BFWF9XSU5fTCh3aW5fbnVt KSk7DQotCWNzcl93cml0ZWwocGNpZSwgdXBwZXJfMzJfYml0cyhwY2lfYWRkciksDQotCQkgICBQ QUJfQVhJX0FNQVBfUEVYX1dJTl9IKHdpbl9udW0pKTsNCi0NCi0JcGNpZS0+b2Jfd2luc19jb25m aWd1cmVkKys7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgbW9iaXZlaWxfYnJpbmd1cF9saW5rKHN0cnVj dCBtb2JpdmVpbF9wY2llICpwY2llKQ0KLXsNCi0JaW50IHJldHJpZXM7DQotDQotCS8qIGNoZWNr IGlmIHRoZSBsaW5rIGlzIHVwIG9yIG5vdCAqLw0KLQlmb3IgKHJldHJpZXMgPSAwOyByZXRyaWVz IDwgTElOS19XQUlUX01BWF9SRVRSSUVTOyByZXRyaWVzKyspIHsNCi0JCWlmIChtb2JpdmVpbF9w Y2llX2xpbmtfdXAocGNpZSkpDQotCQkJcmV0dXJuIDA7DQotDQotCQl1c2xlZXBfcmFuZ2UoTElO S19XQUlUX01JTiwgTElOS19XQUlUX01BWCk7DQotCX0NCi0NCi0JZGV2X2luZm8oJnBjaWUtPnBk ZXYtPmRldiwgImxpbmsgbmV2ZXIgY2FtZSB1cFxuIik7DQotDQotCXJldHVybiAtRVRJTUVET1VU Ow0KLX0NCi0NCi1zdGF0aWMgdm9pZCBtb2JpdmVpbF9wY2llX2Rpc2FibGVfaWJfd2luKHN0cnVj dCBtb2JpdmVpbF9wY2llICpwY2llLCBpbnQgaWR4KQ0KLXsNCi0JdTMyIHZhbDsNCi0NCi0JdmFs ID0gY3NyX3JlYWRsKHBjaWUsIFBBQl9QRVhfQU1BUF9DVFJMKGlkeCkpOw0KLQl2YWwgJj0gfigx IDw8IEFNQVBfQ1RSTF9FTl9TSElGVCk7DQotCWNzcl93cml0ZWwocGNpZSwgdmFsLCBQQUJfUEVY X0FNQVBfQ1RSTChpZHgpKTsNCi19DQotDQotc3RhdGljIHZvaWQgbW9iaXZlaWxfcGNpZV9kaXNh YmxlX29iX3dpbihzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgaW50IGlkeCkNCi17DQotCXUz MiB2YWw7DQotDQotCXZhbCA9IGNzcl9yZWFkbChwY2llLCBQQUJfQVhJX0FNQVBfQ1RSTChpZHgp KTsNCi0JdmFsICY9IH4oMSA8PCBXSU5fRU5BQkxFX1NISUZUKTsNCi0JY3NyX3dyaXRlbChwY2ll LCB2YWwsIFBBQl9BWElfQU1BUF9DVFJMKGlkeCkpOw0KLX0NCi0NCiBzdGF0aWMgdm9pZCBtb2Jp dmVpbF9wY2llX2VuYWJsZV9tc2koc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUpDQogew0KIAlw aHlzX2FkZHJfdCBtc2dfYWRkciA9IHBjaWUtPnBjaWVfcmVnX2Jhc2U7DQotCXN0cnVjdCBtb2Jp dmVpbF9tc2kgKm1zaSA9ICZwY2llLT5tc2k7DQorCXN0cnVjdCBtb2JpdmVpbF9tc2kgKm1zaSA9 ICZwY2llLT5ycC5tc2k7DQogDQotCXBjaWUtPm1zaS5udW1fb2ZfdmVjdG9ycyA9IFBDSV9OVU1f TVNJOw0KKwltc2ktPm51bV9vZl92ZWN0b3JzID0gUENJX05VTV9NU0k7DQogCW1zaS0+bXNpX3Bh Z2VzX3BoeXMgPSAocGh5c19hZGRyX3QpbXNnX2FkZHI7DQogDQogCXdyaXRlbF9yZWxheGVkKGxv d2VyXzMyX2JpdHMobXNnX2FkZHIpLA0KQEAgLTY1Myw5ICsyNTMsNiBAQCBzdGF0aWMgaW50IG1v Yml2ZWlsX2hvc3RfaW5pdChzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSkNCiAJcGFiX2N0cmwg fD0gKDEgPDwgQU1CQV9QSU9fRU5BQkxFX1NISUZUKSB8ICgxIDw8IFBFWF9QSU9fRU5BQkxFX1NI SUZUKTsNCiAJY3NyX3dyaXRlbChwY2llLCBwYWJfY3RybCwgUEFCX0NUUkwpOw0KIA0KLQljc3Jf d3JpdGVsKHBjaWUsIChQQUJfSU5UUF9JTlRYX01BU0sgfCBQQUJfSU5UUF9NU0lfTUFTSyksDQot CQkgICBQQUJfSU5UUF9BTUJBX01JU0NfRU5CKTsNCi0NCiAJLyoNCiAJICogcHJvZ3JhbSBQSU8g RW5hYmxlIEJpdCB0byAxIGFuZCBDb25maWcgV2luZG93IEVuYWJsZSBCaXQgdG8gMSBpbg0KIAkg KiBQQUJfQVhJX1BJT19DVFJMIFJlZ2lzdGVyDQpAQCAtNjc3LDIwICsyNzQsMjQgQEAgc3RhdGlj IGludCBtb2JpdmVpbF9ob3N0X2luaXQoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUpDQogCSAq Lw0KIA0KIAkvKiBjb25maWcgb3V0Ym91bmQgdHJhbnNsYXRpb24gd2luZG93ICovDQotCXByb2dy YW1fb2Jfd2luZG93cyhwY2llLCBXSU5fTlVNXzAsIHBjaWUtPm9iX2lvX3Jlcy0+c3RhcnQsIDAs DQotCQkJICAgQ0ZHX1dJTkRPV19UWVBFLCByZXNvdXJjZV9zaXplKHBjaWUtPm9iX2lvX3Jlcykp Ow0KKwlwcm9ncmFtX29iX3dpbmRvd3MocGNpZSwgV0lOX05VTV8wLCBwY2llLT5ycC5vYl9pb19y ZXMtPnN0YXJ0LCAwLA0KKwkJCSAgIENGR19XSU5ET1dfVFlQRSwgcmVzb3VyY2Vfc2l6ZShwY2ll LT5ycC5vYl9pb19yZXMpKTsNCiANCiAJLyogbWVtb3J5IGluYm91bmQgdHJhbnNsYXRpb24gd2lu ZG93ICovDQogCXByb2dyYW1faWJfd2luZG93cyhwY2llLCBXSU5fTlVNXzAsIDAsIDAsIE1FTV9X SU5ET1dfVFlQRSwgSUJfV0lOX1NJWkUpOw0KIA0KIAkvKiBHZXQgdGhlIEkvTyBhbmQgbWVtb3J5 IHJhbmdlcyBmcm9tIERUICovDQogCXJlc291cmNlX2xpc3RfZm9yX2VhY2hfZW50cnkod2luLCAm cGNpZS0+cmVzb3VyY2VzKSB7DQotCQlpZiAocmVzb3VyY2VfdHlwZSh3aW4tPnJlcykgPT0gSU9S RVNPVVJDRV9NRU0pDQorCQlpZiAocmVzb3VyY2VfdHlwZSh3aW4tPnJlcykgPT0gSU9SRVNPVVJD RV9NRU0pIHsNCiAJCQl0eXBlID0gTUVNX1dJTkRPV19UWVBFOw0KLQkJZWxzZSBpZiAocmVzb3Vy Y2VfdHlwZSh3aW4tPnJlcykgPT0gSU9SRVNPVVJDRV9JTykNCisJCX0gZWxzZSBpZiAocmVzb3Vy Y2VfdHlwZSh3aW4tPnJlcykgPT0gSU9SRVNPVVJDRV9JTykgew0KIAkJCXR5cGUgPSBJT19XSU5E T1dfVFlQRTsNCi0JCWVsc2UNCisJCX0gZWxzZSBpZiAocmVzb3VyY2VfdHlwZSh3aW4tPnJlcykg PT0gSU9SRVNPVVJDRV9CVVMpIHsNCisJCQlwY2llLT5ycC5yb290X2J1c19uciA9IHdpbi0+cmVz LT5zdGFydDsNCisJCQljb250aW51ZTsNCisJCX0gZWxzZSB7DQogCQkJY29udGludWU7DQorCQl9 DQogDQogCQkvKiBjb25maWd1cmUgb3V0Ym91bmQgdHJhbnNsYXRpb24gd2luZG93ICovDQogCQlw cm9ncmFtX29iX3dpbmRvd3MocGNpZSwgcGNpZS0+b2Jfd2luc19jb25maWd1cmVkLA0KQEAgLTcw NSw5ICszMDYsNiBAQCBzdGF0aWMgaW50IG1vYml2ZWlsX2hvc3RfaW5pdChzdHJ1Y3QgbW9iaXZl aWxfcGNpZSAqcGNpZSkNCiAJdmFsdWUgfD0gKFBDSV9DTEFTU19CUklER0VfUENJIDw8IDE2KTsN CiAJY3NyX3dyaXRlbChwY2llLCB2YWx1ZSwgUEFCX0lOVFBfQVhJX1BJT19DTEFTUyk7DQogDQot CS8qIHNldHVwIE1TSSBoYXJkd2FyZSByZWdpc3RlcnMgKi8NCi0JbW9iaXZlaWxfcGNpZV9lbmFi bGVfbXNpKHBjaWUpOw0KLQ0KIAlyZXR1cm4gMDsNCiB9DQogDQpAQCAtNzIwLDExICszMTgsMTEg QEAgc3RhdGljIHZvaWQgbW9iaXZlaWxfbWFza19pbnR4X2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRh dGEpDQogDQogCXBjaWUgPSBpcnFfZGVzY19nZXRfY2hpcF9kYXRhKGRlc2MpOw0KIAltYXNrID0g MSA8PCAoKGRhdGEtPmh3aXJxICsgUEFCX0lOVFhfU1RBUlQpIC0gMSk7DQotCXJhd19zcGluX2xv Y2tfaXJxc2F2ZSgmcGNpZS0+aW50eF9tYXNrX2xvY2ssIGZsYWdzKTsNCisJcmF3X3NwaW5fbG9j a19pcnFzYXZlKCZwY2llLT5ycC5pbnR4X21hc2tfbG9jaywgZmxhZ3MpOw0KIAlzaGlmdGVkX3Zh bCA9IGNzcl9yZWFkbChwY2llLCBQQUJfSU5UUF9BTUJBX01JU0NfRU5CKTsNCiAJc2hpZnRlZF92 YWwgJj0gfm1hc2s7DQogCWNzcl93cml0ZWwocGNpZSwgc2hpZnRlZF92YWwsIFBBQl9JTlRQX0FN QkFfTUlTQ19FTkIpOw0KLQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNpZS0+aW50eF9t YXNrX2xvY2ssIGZsYWdzKTsNCisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjaWUtPnJw LmludHhfbWFza19sb2NrLCBmbGFncyk7DQogfQ0KIA0KIHN0YXRpYyB2b2lkIG1vYml2ZWlsX3Vu bWFza19pbnR4X2lycShzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpDQpAQCAtNzM2LDExICszMzQsMTEg QEAgc3RhdGljIHZvaWQgbW9iaXZlaWxfdW5tYXNrX2ludHhfaXJxKHN0cnVjdCBpcnFfZGF0YSAq ZGF0YSkNCiANCiAJcGNpZSA9IGlycV9kZXNjX2dldF9jaGlwX2RhdGEoZGVzYyk7DQogCW1hc2sg PSAxIDw8ICgoZGF0YS0+aHdpcnEgKyBQQUJfSU5UWF9TVEFSVCkgLSAxKTsNCi0JcmF3X3NwaW5f bG9ja19pcnFzYXZlKCZwY2llLT5pbnR4X21hc2tfbG9jaywgZmxhZ3MpOw0KKwlyYXdfc3Bpbl9s b2NrX2lycXNhdmUoJnBjaWUtPnJwLmludHhfbWFza19sb2NrLCBmbGFncyk7DQogCXNoaWZ0ZWRf dmFsID0gY3NyX3JlYWRsKHBjaWUsIFBBQl9JTlRQX0FNQkFfTUlTQ19FTkIpOw0KIAlzaGlmdGVk X3ZhbCB8PSBtYXNrOw0KIAljc3Jfd3JpdGVsKHBjaWUsIHNoaWZ0ZWRfdmFsLCBQQUJfSU5UUF9B TUJBX01JU0NfRU5CKTsNCi0JcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjaWUtPmludHhf bWFza19sb2NrLCBmbGFncyk7DQorCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY2llLT5y cC5pbnR4X21hc2tfbG9jaywgZmxhZ3MpOw0KIH0NCiANCiBzdGF0aWMgc3RydWN0IGlycV9jaGlw IGludHhfaXJxX2NoaXAgPSB7DQpAQCAtODA4LDcgKzQwNiw3IEBAIHN0YXRpYyBpbnQgbW9iaXZl aWxfaXJxX21zaV9kb21haW5fYWxsb2Moc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwNCiAJCQkJ CSB1bnNpZ25lZCBpbnQgbnJfaXJxcywgdm9pZCAqYXJncykNCiB7DQogCXN0cnVjdCBtb2JpdmVp bF9wY2llICpwY2llID0gZG9tYWluLT5ob3N0X2RhdGE7DQotCXN0cnVjdCBtb2JpdmVpbF9tc2kg Km1zaSA9ICZwY2llLT5tc2k7DQorCXN0cnVjdCBtb2JpdmVpbF9tc2kgKm1zaSA9ICZwY2llLT5y cC5tc2k7DQogCXVuc2lnbmVkIGxvbmcgYml0Ow0KIA0KIAlXQVJOX09OKG5yX2lycXMgIT0gMSk7 DQpAQCAtODM1LDcgKzQzMyw3IEBAIHN0YXRpYyB2b2lkIG1vYml2ZWlsX2lycV9tc2lfZG9tYWlu X2ZyZWUoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwNCiB7DQogCXN0cnVjdCBpcnFfZGF0YSAq ZCA9IGlycV9kb21haW5fZ2V0X2lycV9kYXRhKGRvbWFpbiwgdmlycSk7DQogCXN0cnVjdCBtb2Jp dmVpbF9wY2llICpwY2llID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZCk7DQotCXN0cnVj dCBtb2JpdmVpbF9tc2kgKm1zaSA9ICZwY2llLT5tc2k7DQorCXN0cnVjdCBtb2JpdmVpbF9tc2kg Km1zaSA9ICZwY2llLT5ycC5tc2k7DQogDQogCW11dGV4X2xvY2soJm1zaS0+bG9jayk7DQogDQpA QCAtODU2LDkgKzQ1NCw5IEBAIHN0YXRpYyBpbnQgbW9iaXZlaWxfYWxsb2NhdGVfbXNpX2RvbWFp bnMoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUpDQogew0KIAlzdHJ1Y3QgZGV2aWNlICpkZXYg PSAmcGNpZS0+cGRldi0+ZGV2Ow0KIAlzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlID0gb2Zf bm9kZV90b19md25vZGUoZGV2LT5vZl9ub2RlKTsNCi0Jc3RydWN0IG1vYml2ZWlsX21zaSAqbXNp ID0gJnBjaWUtPm1zaTsNCisJc3RydWN0IG1vYml2ZWlsX21zaSAqbXNpID0gJnBjaWUtPnJwLm1z aTsNCiANCi0JbXV0ZXhfaW5pdCgmcGNpZS0+bXNpLmxvY2spOw0KKwltdXRleF9pbml0KCZtc2kt PmxvY2spOw0KIAltc2ktPmRldl9kb21haW4gPSBpcnFfZG9tYWluX2FkZF9saW5lYXIoTlVMTCwg bXNpLT5udW1fb2ZfdmVjdG9ycywNCiAJCQkJCQkmbXNpX2RvbWFpbl9vcHMsIHBjaWUpOw0KIAlp ZiAoIW1zaS0+ZGV2X2RvbWFpbikgew0KQEAgLTg4NSwxNSArNDgzLDE1IEBAIHN0YXRpYyBpbnQg bW9iaXZlaWxfcGNpZV9pbml0X2lycV9kb21haW4oc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUp DQogCWludCByZXQ7DQogDQogCS8qIHNldHVwIElOVHggKi8NCi0JcGNpZS0+aW50eF9kb21haW4g PSBpcnFfZG9tYWluX2FkZF9saW5lYXIobm9kZSwgUENJX05VTV9JTlRYLA0KLQkJCQkJCSAgJmlu dHhfZG9tYWluX29wcywgcGNpZSk7DQorCXBjaWUtPnJwLmludHhfZG9tYWluID0gaXJxX2RvbWFp bl9hZGRfbGluZWFyKG5vZGUsIFBDSV9OVU1fSU5UWCwNCisJCQkJCQkgICAgICZpbnR4X2RvbWFp bl9vcHMsIHBjaWUpOw0KIA0KLQlpZiAoIXBjaWUtPmludHhfZG9tYWluKSB7DQorCWlmICghcGNp ZS0+cnAuaW50eF9kb21haW4pIHsNCiAJCWRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCBhIElO VHggSVJRIGRvbWFpblxuIik7DQogCQlyZXR1cm4gLUVOT01FTTsNCiAJfQ0KIA0KLQlyYXdfc3Bp bl9sb2NrX2luaXQoJnBjaWUtPmludHhfbWFza19sb2NrKTsNCisJcmF3X3NwaW5fbG9ja19pbml0 KCZwY2llLT5ycC5pbnR4X21hc2tfbG9jayk7DQogDQogCS8qIHNldHVwIE1TSSAqLw0KIAlyZXQg PSBtb2JpdmVpbF9hbGxvY2F0ZV9tc2lfZG9tYWlucyhwY2llKTsNCkBAIC05MDMsMjQgKzUwMSw1 OCBAQCBzdGF0aWMgaW50IG1vYml2ZWlsX3BjaWVfaW5pdF9pcnFfZG9tYWluKHN0cnVjdCBtb2Jp dmVpbF9wY2llICpwY2llKQ0KIAlyZXR1cm4gMDsNCiB9DQogDQotc3RhdGljIGludCBtb2JpdmVp bF9wY2llX3Byb2JlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQorc3RhdGljIGludCBt b2JpdmVpbF9wY2llX2ludGVycnVwdF9pbml0KHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llKQ0K K3sNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBjaWUtPnBkZXYtPmRldjsNCisJc3RydWN0IHJl c291cmNlICpyZXM7DQorCWludCByZXQ7DQorDQorCWlmIChwY2llLT5ycC5vcHMtPmludGVycnVw dF9pbml0KQ0KKwkJcmV0dXJuIHBjaWUtPnJwLm9wcy0+aW50ZXJydXB0X2luaXQocGNpZSk7DQor DQorCS8qIG1hcCBNU0kgY29uZmlnIHJlc291cmNlICovDQorCXJlcyA9IHBsYXRmb3JtX2dldF9y ZXNvdXJjZV9ieW5hbWUocGNpZS0+cGRldiwgSU9SRVNPVVJDRV9NRU0sDQorCQkJCQkgICAiYXBi X2NzciIpOw0KKwlwY2llLT5hcGJfY3NyX2Jhc2UgPSBkZXZtX3BjaV9yZW1hcF9jZmdfcmVzb3Vy Y2UoZGV2LCByZXMpOw0KKwlpZiAoSVNfRVJSKHBjaWUtPmFwYl9jc3JfYmFzZSkpDQorCQlyZXR1 cm4gUFRSX0VSUihwY2llLT5hcGJfY3NyX2Jhc2UpOw0KKw0KKwkvKiBzZXR1cCBNU0kgaGFyZHdh cmUgcmVnaXN0ZXJzICovDQorCW1vYml2ZWlsX3BjaWVfZW5hYmxlX21zaShwY2llKTsNCisNCisJ cGNpZS0+cnAuaXJxID0gcGxhdGZvcm1fZ2V0X2lycShwY2llLT5wZGV2LCAwKTsNCisJaWYgKHBj aWUtPnJwLmlycSA8PSAwKSB7DQorCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBtYXAgSVJROiAl ZFxuIiwgcGNpZS0+cnAuaXJxKTsNCisJCXJldHVybiAtRU5PREVWOw0KKwl9DQorDQorCS8qIGlu aXRpYWxpemUgdGhlIElSUSBkb21haW5zICovDQorCXJldCA9IG1vYml2ZWlsX3BjaWVfaW5pdF9p cnFfZG9tYWluKHBjaWUpOw0KKwlpZiAocmV0KSB7DQorCQlkZXZfZXJyKGRldiwgIkZhaWxlZCBj cmVhdGluZyBJUlEgRG9tYWluXG4iKTsNCisJCXJldHVybiByZXQ7DQorCX0NCisNCisJaXJxX3Nl dF9jaGFpbmVkX2hhbmRsZXJfYW5kX2RhdGEocGNpZS0+cnAuaXJxLA0KKwkJCQkJIG1vYml2ZWls X3BjaWVfaXNyLCBwY2llKTsNCisNCisJLyogRW5hYmxlIGludGVycnVwdHMgKi8NCisJY3NyX3dy aXRlbChwY2llLCAoUEFCX0lOVFBfSU5UWF9NQVNLIHwgUEFCX0lOVFBfTVNJX01BU0spLA0KKwkJ ICAgUEFCX0lOVFBfQU1CQV9NSVNDX0VOQik7DQorDQorCXJldHVybiAwOw0KK30NCisNCitpbnQg bW9iaXZlaWxfcGNpZV9ob3N0X3Byb2JlKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llKQ0KIHsN Ci0Jc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWU7DQogCXN0cnVjdCBwY2lfYnVzICpidXM7DQog CXN0cnVjdCBwY2lfYnVzICpjaGlsZDsNCiAJc3RydWN0IHBjaV9ob3N0X2JyaWRnZSAqYnJpZGdl Ow0KLQlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Ow0KKwlzdHJ1Y3QgZGV2aWNlICpk ZXYgPSAmcGNpZS0+cGRldi0+ZGV2Ow0KIAlyZXNvdXJjZV9zaXplX3QgaW9iYXNlOw0KIAlpbnQg cmV0Ow0KIA0KLQkvKiBhbGxvY2F0ZSB0aGUgUENJZSBwb3J0ICovDQotCWJyaWRnZSA9IGRldm1f cGNpX2FsbG9jX2hvc3RfYnJpZGdlKGRldiwgc2l6ZW9mKCpwY2llKSk7DQotCWlmICghYnJpZGdl KQ0KLQkJcmV0dXJuIC1FTk9NRU07DQotDQotCXBjaWUgPSBwY2lfaG9zdF9icmlkZ2VfcHJpdihi cmlkZ2UpOw0KLQ0KLQlwY2llLT5wZGV2ID0gcGRldjsNCisJSU5JVF9MSVNUX0hFQUQoJnBjaWUt PnJlc291cmNlcyk7DQogDQogCXJldCA9IG1vYml2ZWlsX3BjaWVfcGFyc2VfZHQocGNpZSk7DQog CWlmIChyZXQpIHsNCkBAIC05MjgsNyArNTYwLDEwIEBAIHN0YXRpYyBpbnQgbW9iaXZlaWxfcGNp ZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KIAkJcmV0dXJuIHJldDsNCiAJ fQ0KIA0KLQlJTklUX0xJU1RfSEVBRCgmcGNpZS0+cmVzb3VyY2VzKTsNCisJLyogYWxsb2NhdGUg dGhlIFBDSWUgcG9ydCAqLw0KKwlicmlkZ2UgPSBkZXZtX3BjaV9hbGxvY19ob3N0X2JyaWRnZShk ZXYsIDApOw0KKwlpZiAoIWJyaWRnZSkNCisJCXJldHVybiAtRU5PTUVNOw0KIA0KIAkvKiBwYXJz ZSB0aGUgaG9zdCBicmlkZ2UgYmFzZSBhZGRyZXNzZXMgZnJvbSB0aGUgZGV2aWNlIHRyZWUgZmls ZSAqLw0KIAlyZXQgPSBkZXZtX29mX3BjaV9nZXRfaG9zdF9icmlkZ2VfcmVzb3VyY2VzKGRldiwg MCwgMHhmZiwNCkBAIC05NDgsMTUgKzU4MywxMiBAQCBzdGF0aWMgaW50IG1vYml2ZWlsX3BjaWVf cHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCiAJCWdvdG8gZXJyb3I7DQogCX0N CiANCi0JLyogaW5pdGlhbGl6ZSB0aGUgSVJRIGRvbWFpbnMgKi8NCi0JcmV0ID0gbW9iaXZlaWxf cGNpZV9pbml0X2lycV9kb21haW4ocGNpZSk7DQorCXJldCA9IG1vYml2ZWlsX3BjaWVfaW50ZXJy dXB0X2luaXQocGNpZSk7DQogCWlmIChyZXQpIHsNCi0JCWRldl9lcnIoZGV2LCAiRmFpbGVkIGNy ZWF0aW5nIElSUSBEb21haW5cbiIpOw0KKwkJZGV2X2VycihkZXYsICJJbnRlcnJ1cHQgaW5pdCBm YWlsZWRcbiIpOw0KIAkJZ290byBlcnJvcjsNCiAJfQ0KIA0KLQlpcnFfc2V0X2NoYWluZWRfaGFu ZGxlcl9hbmRfZGF0YShwY2llLT5pcnEsIG1vYml2ZWlsX3BjaWVfaXNyLCBwY2llKTsNCi0NCiAJ cmV0ID0gZGV2bV9yZXF1ZXN0X3BjaV9idXNfcmVzb3VyY2VzKGRldiwgJnBjaWUtPnJlc291cmNl cyk7DQogCWlmIChyZXQpDQogCQlnb3RvIGVycm9yOw0KQEAgLTk2NSw3ICs1OTcsNyBAQCBzdGF0 aWMgaW50IG1vYml2ZWlsX3BjaWVfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikN CiAJbGlzdF9zcGxpY2VfaW5pdCgmcGNpZS0+cmVzb3VyY2VzLCAmYnJpZGdlLT53aW5kb3dzKTsN CiAJYnJpZGdlLT5kZXYucGFyZW50ID0gZGV2Ow0KIAlicmlkZ2UtPnN5c2RhdGEgPSBwY2llOw0K LQlicmlkZ2UtPmJ1c25yID0gcGNpZS0+cm9vdF9idXNfbnI7DQorCWJyaWRnZS0+YnVzbnIgPSBw Y2llLT5ycC5yb290X2J1c19ucjsNCiAJYnJpZGdlLT5vcHMgPSAmbW9iaXZlaWxfcGNpZV9vcHM7 DQogCWJyaWRnZS0+bWFwX2lycSA9IG9mX2lycV9wYXJzZV9hbmRfbWFwX3BjaTsNCiAJYnJpZGdl LT5zd2l6emxlX2lycSA9IHBjaV9jb21tb25fc3dpenpsZTsNCkBAIC05OTEsMjUgKzYyMywzIEBA IHN0YXRpYyBpbnQgbW9iaXZlaWxfcGNpZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQ0KIAlwY2lfZnJlZV9yZXNvdXJjZV9saXN0KCZwY2llLT5yZXNvdXJjZXMpOw0KIAlyZXR1 cm4gcmV0Ow0KIH0NCi0NCi1zdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9pZCBtb2JpdmVp bF9wY2llX29mX21hdGNoW10gPSB7DQotCXsuY29tcGF0aWJsZSA9ICJtYnZsLGdwZXg0MC1wY2ll Iix9LA0KLQl7fSwNCi19Ow0KLQ0KLU1PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG1vYml2ZWlsX3Bj aWVfb2ZfbWF0Y2gpOw0KLQ0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVyIG1vYml2ZWls X3BjaWVfZHJpdmVyID0gew0KLQkucHJvYmUgPSBtb2JpdmVpbF9wY2llX3Byb2JlLA0KLQkuZHJp dmVyID0gew0KLQkJLm5hbWUgPSAibW9iaXZlaWwtcGNpZSIsDQotCQkub2ZfbWF0Y2hfdGFibGUg PSBtb2JpdmVpbF9wY2llX29mX21hdGNoLA0KLQkJLnN1cHByZXNzX2JpbmRfYXR0cnMgPSB0cnVl LA0KLQl9LA0KLX07DQotDQotYnVpbHRpbl9wbGF0Zm9ybV9kcml2ZXIobW9iaXZlaWxfcGNpZV9k cml2ZXIpOw0KLQ0KLU1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsNCi1NT0RVTEVfREVTQ1JJUFRJ T04oIk1vYml2ZWlsIFBDSWUgaG9zdCBjb250cm9sbGVyIGRyaXZlciIpOw0KLU1PRFVMRV9BVVRI T1IoIlN1YnJhaG1hbnlhIExpbmdhcHBhIDxsLnN1YnJhaG1hbnlhQG1vYml2ZWlsLmNvLmluPiIp Ow0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1tb2Jp dmVpbC1wbGF0LmMgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL3BjaWUtbW9iaXZl aWwtcGxhdC5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwLi4zNzEy Mzc5ODQ3YjkNCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9i aXZlaWwvcGNpZS1tb2JpdmVpbC1wbGF0LmMNCkBAIC0wLDAgKzEsNTYgQEANCisvLyBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KKy8qDQorICogUENJZSBob3N0IGNvbnRyb2xsZXIg ZHJpdmVyIGZvciBNb2JpdmVpbCBQQ0llIEhvc3QgY29udHJvbGxlcg0KKyAqDQorICogQ29weXJp Z2h0IChjKSAyMDE4IE1vYml2ZWlsIEluYy4NCisgKiBDb3B5cmlnaHQgMjAxOSBOWFANCisgKg0K KyAqIEF1dGhvcjogU3VicmFobWFueWEgTGluZ2FwcGEgPGwuc3VicmFobWFueWFAbW9iaXZlaWwu Y28uaW4+DQorICogUmVmYWN0b3I6IFpoaXFpYW5nIEhvdSA8WmhpcWlhbmcuSG91QG54cC5jb20+ DQorICovDQorDQorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4NCisjaW5jbHVkZSA8bGludXgva2Vy bmVsLmg+DQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9vZl9w Y2kuaD4NCisjaW5jbHVkZSA8bGludXgvcGNpLmg+DQorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3Jt X2RldmljZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+DQorDQorI2luY2x1ZGUgInBjaWUt bW9iaXZlaWwuaCINCisNCitzdGF0aWMgaW50IG1vYml2ZWlsX3BjaWVfcHJvYmUoc3RydWN0IHBs YXRmb3JtX2RldmljZSAqcGRldikNCit7DQorCXN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llOw0K KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmcGRldi0+ZGV2Ow0KKw0KKwlwY2llID0gZGV2bV9remFs bG9jKGRldiwgc2l6ZW9mKCpwY2llKSwgR0ZQX0tFUk5FTCk7DQorCWlmICghcGNpZSkNCisJCXJl dHVybiAtRU5PTUVNOw0KKw0KKwlwY2llLT5wZGV2ID0gcGRldjsNCisNCisJcmV0dXJuIG1vYml2 ZWlsX3BjaWVfaG9zdF9wcm9iZShwY2llKTsNCit9DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBv Zl9kZXZpY2VfaWQgbW9iaXZlaWxfcGNpZV9vZl9tYXRjaFtdID0gew0KKwl7LmNvbXBhdGlibGUg PSAibWJ2bCxncGV4NDAtcGNpZSIsfSwNCisJe30sDQorfTsNCisNCitNT0RVTEVfREVWSUNFX1RB QkxFKG9mLCBtb2JpdmVpbF9wY2llX29mX21hdGNoKTsNCisNCitzdGF0aWMgc3RydWN0IHBsYXRm b3JtX2RyaXZlciBtb2JpdmVpbF9wY2llX2RyaXZlciA9IHsNCisJLnByb2JlID0gbW9iaXZlaWxf cGNpZV9wcm9iZSwNCisJLmRyaXZlciA9IHsNCisJCS5uYW1lID0gIm1vYml2ZWlsLXBjaWUiLA0K KwkJLm9mX21hdGNoX3RhYmxlID0gbW9iaXZlaWxfcGNpZV9vZl9tYXRjaCwNCisJCS5zdXBwcmVz c19iaW5kX2F0dHJzID0gdHJ1ZSwNCisJfSwNCit9Ow0KKw0KK2J1aWx0aW5fcGxhdGZvcm1fZHJp dmVyKG1vYml2ZWlsX3BjaWVfZHJpdmVyKTsNCisNCitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7 DQorTU9EVUxFX0RFU0NSSVBUSU9OKCJNb2JpdmVpbCBQQ0llIGhvc3QgY29udHJvbGxlciBkcml2 ZXIiKTsNCitNT0RVTEVfQVVUSE9SKCJTdWJyYWhtYW55YSBMaW5nYXBwYSA8bC5zdWJyYWhtYW55 YUBtb2JpdmVpbC5jby5pbj4iKTsNCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9jb250cm9sbGVy L21vYml2ZWlsL3BjaWUtbW9iaXZlaWwuYyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZl aWwvcGNpZS1tb2JpdmVpbC5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAw MDAwLi4xNWQ1ZDg4OGViOTMNCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvcGNpL2NvbnRy b2xsZXIvbW9iaXZlaWwvcGNpZS1tb2JpdmVpbC5jDQpAQCAtMCwwICsxLDI0OCBAQA0KKy8vIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQorLyoNCisgKiBQQ0llIGhvc3QgY29udHJv bGxlciBkcml2ZXIgZm9yIE1vYml2ZWlsIFBDSWUgSG9zdCBjb250cm9sbGVyDQorICoNCisgKiBD b3B5cmlnaHQgKGMpIDIwMTggTW9iaXZlaWwgSW5jLg0KKyAqIENvcHlyaWdodCAyMDE5IE5YUA0K KyAqDQorICogQXV0aG9yOiBTdWJyYWhtYW55YSBMaW5nYXBwYSA8bC5zdWJyYWhtYW55YUBtb2Jp dmVpbC5jby5pbj4NCisgKiBSZWZhY3RvcjogWmhpcWlhbmcgSG91IDxaaGlxaWFuZy5Ib3VAbnhw LmNvbT4NCisgKi8NCisNCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4NCisjaW5jbHVkZSA8bGlu dXgvaW5pdC5oPg0KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCisjaW5jbHVkZSA8bGludXgv cGNpLmg+DQorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPg0KKw0KKyNpbmNsdWRl ICJwY2llLW1vYml2ZWlsLmgiDQorDQorLyoNCisgKiBtb2JpdmVpbF9wY2llX3NlbF9wYWdlIC0g cm91dGluZSB0byBhY2Nlc3MgcGFnZWQgcmVnaXN0ZXINCisgKg0KKyAqIFJlZ2lzdGVycyB3aG9z ZSBhZGRyZXNzIGdyZWF0ZXIgdGhhbiBQQUdFRF9BRERSX0JORFJZICgweGMwMCkgYXJlIHBhZ2Vk LA0KKyAqIGZvciB0aGlzIHNjaGVtZSB0byB3b3JrIGV4dHJhY3RlZCBoaWdoZXIgNiBiaXRzIG9m IHRoZSBvZmZzZXQgd2lsbCBiZQ0KKyAqIHdyaXR0ZW4gdG8gcGdfc2VsIGZpZWxkIG9mIFBBQl9D VFJMIHJlZ2lzdGVyIGFuZCByZXN0IG9mIHRoZSBsb3dlciAxMA0KKyAqIGJpdHMgZW5hYmxlZCB3 aXRoIFBBR0VEX0FERFJfQk5EUlkgYXJlIHVzZWQgYXMgb2Zmc2V0IG9mIHRoZSByZWdpc3Rlci4N CisgKi8NCitzdGF0aWMgdm9pZCBtb2JpdmVpbF9wY2llX3NlbF9wYWdlKHN0cnVjdCBtb2JpdmVp bF9wY2llICpwY2llLCB1OCBwZ19pZHgpDQorew0KKwl1MzIgdmFsOw0KKw0KKwl2YWwgPSByZWFk bChwY2llLT5jc3JfYXhpX3NsYXZlX2Jhc2UgKyBQQUJfQ1RSTCk7DQorCXZhbCAmPSB+KFBBR0Vf U0VMX01BU0sgPDwgUEFHRV9TRUxfU0hJRlQpOw0KKwl2YWwgfD0gKHBnX2lkeCAmIFBBR0VfU0VM X01BU0spIDw8IFBBR0VfU0VMX1NISUZUOw0KKw0KKwl3cml0ZWwodmFsLCBwY2llLT5jc3JfYXhp X3NsYXZlX2Jhc2UgKyBQQUJfQ1RSTCk7DQorfQ0KKw0KK3N0YXRpYyB2b2lkICptb2JpdmVpbF9w Y2llX2NvbXBfYWRkcihzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgdTMyIG9mZikNCit7DQor CWlmIChvZmYgPCBQQUdFRF9BRERSX0JORFJZKSB7DQorCQkvKiBGb3IgZGlyZWN0bHkgYWNjZXNz ZWQgcmVnaXN0ZXJzLCBjbGVhciB0aGUgcGdfc2VsIGZpZWxkICovDQorCQltb2JpdmVpbF9wY2ll X3NlbF9wYWdlKHBjaWUsIDApOw0KKwkJcmV0dXJuIHBjaWUtPmNzcl9heGlfc2xhdmVfYmFzZSAr IG9mZjsNCisJfQ0KKw0KKwltb2JpdmVpbF9wY2llX3NlbF9wYWdlKHBjaWUsIE9GRlNFVF9UT19Q QUdFX0lEWChvZmYpKTsNCisJcmV0dXJuIHBjaWUtPmNzcl9heGlfc2xhdmVfYmFzZSArIE9GRlNF VF9UT19QQUdFX0FERFIob2ZmKTsNCit9DQorDQorc3RhdGljIGludCBtb2JpdmVpbF9wY2llX3Jl YWQodm9pZCBfX2lvbWVtICphZGRyLCBpbnQgc2l6ZSwgdTMyICp2YWwpDQorew0KKwlpZiAoKHVp bnRwdHJfdClhZGRyICYgKHNpemUgLSAxKSkgew0KKwkJKnZhbCA9IDA7DQorCQlyZXR1cm4gUENJ QklPU19CQURfUkVHSVNURVJfTlVNQkVSOw0KKwl9DQorDQorCXN3aXRjaCAoc2l6ZSkgew0KKwlj YXNlIDQ6DQorCQkqdmFsID0gcmVhZGwoYWRkcik7DQorCQlicmVhazsNCisJY2FzZSAyOg0KKwkJ KnZhbCA9IHJlYWR3KGFkZHIpOw0KKwkJYnJlYWs7DQorCWNhc2UgMToNCisJCSp2YWwgPSByZWFk YihhZGRyKTsNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJKnZhbCA9IDA7DQorCQlyZXR1cm4g UENJQklPU19CQURfUkVHSVNURVJfTlVNQkVSOw0KKwl9DQorDQorCXJldHVybiBQQ0lCSU9TX1NV Q0NFU1NGVUw7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbW9iaXZlaWxfcGNpZV93cml0ZSh2b2lkIF9f aW9tZW0gKmFkZHIsIGludCBzaXplLCB1MzIgdmFsKQ0KK3sNCisJaWYgKCh1aW50cHRyX3QpYWRk ciAmIChzaXplIC0gMSkpDQorCQlyZXR1cm4gUENJQklPU19CQURfUkVHSVNURVJfTlVNQkVSOw0K Kw0KKwlzd2l0Y2ggKHNpemUpIHsNCisJY2FzZSA0Og0KKwkJd3JpdGVsKHZhbCwgYWRkcik7DQor CQlicmVhazsNCisJY2FzZSAyOg0KKwkJd3JpdGV3KHZhbCwgYWRkcik7DQorCQlicmVhazsNCisJ Y2FzZSAxOg0KKwkJd3JpdGViKHZhbCwgYWRkcik7DQorCQlicmVhazsNCisJZGVmYXVsdDoNCisJ CXJldHVybiBQQ0lCSU9TX0JBRF9SRUdJU1RFUl9OVU1CRVI7DQorCX0NCisNCisJcmV0dXJuIFBD SUJJT1NfU1VDQ0VTU0ZVTDsNCit9DQorDQordTMyIGNzcl9yZWFkKHN0cnVjdCBtb2JpdmVpbF9w Y2llICpwY2llLCB1MzIgb2ZmLCBzaXplX3Qgc2l6ZSkNCit7DQorCXZvaWQgKmFkZHI7DQorCXUz MiB2YWw7DQorCWludCByZXQ7DQorDQorCWFkZHIgPSBtb2JpdmVpbF9wY2llX2NvbXBfYWRkcihw Y2llLCBvZmYpOw0KKw0KKwlyZXQgPSBtb2JpdmVpbF9wY2llX3JlYWQoYWRkciwgc2l6ZSwgJnZh bCk7DQorCWlmIChyZXQpDQorCQlkZXZfZXJyKCZwY2llLT5wZGV2LT5kZXYsICJyZWFkIENTUiBh ZGRyZXNzIGZhaWxlZFxuIik7DQorDQorCXJldHVybiB2YWw7DQorfQ0KKw0KK3ZvaWQgY3NyX3dy aXRlKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llLCB1MzIgdmFsLCB1MzIgb2ZmLCBzaXplX3Qg c2l6ZSkNCit7DQorCXZvaWQgKmFkZHI7DQorCWludCByZXQ7DQorDQorCWFkZHIgPSBtb2JpdmVp bF9wY2llX2NvbXBfYWRkcihwY2llLCBvZmYpOw0KKw0KKwlyZXQgPSBtb2JpdmVpbF9wY2llX3dy aXRlKGFkZHIsIHNpemUsIHZhbCk7DQorCWlmIChyZXQpDQorCQlkZXZfZXJyKCZwY2llLT5wZGV2 LT5kZXYsICJ3cml0ZSBDU1IgYWRkcmVzcyBmYWlsZWRcbiIpOw0KK30NCisNCitib29sIG1vYml2 ZWlsX3BjaWVfbGlua191cChzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSkNCit7DQorCWlmIChw Y2llLT5vcHMtPmxpbmtfdXApDQorCQlyZXR1cm4gcGNpZS0+b3BzLT5saW5rX3VwKHBjaWUpOw0K Kw0KKwlyZXR1cm4gKGNzcl9yZWFkbChwY2llLCBMVFNTTV9TVEFUVVMpICYNCisJCUxUU1NNX1NU QVRVU19MMF9NQVNLKSA9PSBMVFNTTV9TVEFUVVNfTDA7DQorfQ0KKw0KK3ZvaWQgcHJvZ3JhbV9p Yl93aW5kb3dzKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llLCBpbnQgd2luX251bSwgdTY0IGNw dV9hZGRyLA0KKwkJCXU2NCBwY2lfYWRkciwgdTMyIHR5cGUsIHU2NCBzaXplKQ0KK3sNCisJdTMy IHZhbHVlOw0KKwl1NjQgc2l6ZTY0ID0gfihzaXplIC0gMSk7DQorDQorCWlmICh3aW5fbnVtID49 IHBjaWUtPnBwaW9fd2lucykgew0KKwkJZGV2X2VycigmcGNpZS0+cGRldi0+ZGV2LA0KKwkJCSJF UlJPUjogbWF4IGluYm91bmQgd2luZG93cyByZWFjaGVkICFcbiIpOw0KKwkJcmV0dXJuOw0KKwl9 DQorDQorCXZhbHVlID0gY3NyX3JlYWRsKHBjaWUsIFBBQl9QRVhfQU1BUF9DVFJMKHdpbl9udW0p KTsNCisJdmFsdWUgJj0gfihBTUFQX0NUUkxfVFlQRV9NQVNLIDw8IEFNQVBfQ1RSTF9UWVBFX1NI SUZUIHwNCisJCSBXSU5fU0laRV9NQVNLIDw8IFdJTl9TSVpFX1NISUZUKTsNCisJdmFsdWUgfD0g KHR5cGUgPDwgQU1BUF9DVFJMX1RZUEVfU0hJRlQpIHwgKDEgPDwgQU1BUF9DVFJMX0VOX1NISUZU KSB8DQorCQkgKGxvd2VyXzMyX2JpdHMoc2l6ZTY0KSAmIFdJTl9TSVpFX01BU0sgPDwgV0lOX1NJ WkVfU0hJRlQpOw0KKwljc3Jfd3JpdGVsKHBjaWUsIHZhbHVlLCBQQUJfUEVYX0FNQVBfQ1RSTCh3 aW5fbnVtKSk7DQorDQorCWNzcl93cml0ZWwocGNpZSwgdXBwZXJfMzJfYml0cyhzaXplNjQpLA0K KwkJICAgUEFCX0VYVF9QRVhfQU1BUF9TSVpFTih3aW5fbnVtKSk7DQorDQorCWNzcl93cml0ZWwo cGNpZSwgbG93ZXJfMzJfYml0cyhjcHVfYWRkciksDQorCQkgICBQQUJfUEVYX0FNQVBfQVhJX1dJ Tih3aW5fbnVtKSk7DQorCWNzcl93cml0ZWwocGNpZSwgdXBwZXJfMzJfYml0cyhjcHVfYWRkciks DQorCQkgICBQQUJfRVhUX1BFWF9BTUFQX0FYSV9XSU4od2luX251bSkpOw0KKw0KKwljc3Jfd3Jp dGVsKHBjaWUsIGxvd2VyXzMyX2JpdHMocGNpX2FkZHIpLA0KKwkJICAgUEFCX1BFWF9BTUFQX1BF WF9XSU5fTCh3aW5fbnVtKSk7DQorCWNzcl93cml0ZWwocGNpZSwgdXBwZXJfMzJfYml0cyhwY2lf YWRkciksDQorCQkgICBQQUJfUEVYX0FNQVBfUEVYX1dJTl9IKHdpbl9udW0pKTsNCisNCisJcGNp ZS0+aWJfd2luc19jb25maWd1cmVkKys7DQorfQ0KKw0KKy8qDQorICogcm91dGluZSB0byBwcm9n cmFtIHRoZSBvdXRib3VuZCB3aW5kb3dzDQorICovDQordm9pZCBwcm9ncmFtX29iX3dpbmRvd3Mo c3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIGludCB3aW5fbnVtLCB1NjQgY3B1X2FkZHIsDQor CQkJdTY0IHBjaV9hZGRyLCB1MzIgdHlwZSwgdTY0IHNpemUpDQorew0KKw0KKwl1MzIgdmFsdWU7 DQorCXU2NCBzaXplNjQgPSB+KHNpemUgLSAxKTsNCisNCisJaWYgKHdpbl9udW0gPj0gcGNpZS0+ YXBpb193aW5zKSB7DQorCQlkZXZfZXJyKCZwY2llLT5wZGV2LT5kZXYsDQorCQkJIkVSUk9SOiBt YXggb3V0Ym91bmQgd2luZG93cyByZWFjaGVkICFcbiIpOw0KKwkJcmV0dXJuOw0KKwl9DQorDQor CS8qDQorCSAqIHByb2dyYW0gRW5hYmxlIEJpdCB0byAxLCBUeXBlIEJpdCB0byAoMDApIGJhc2Ug MiwgQVhJIFdpbmRvdyBTaXplIEJpdA0KKwkgKiB0byA0IEtCIGluIFBBQl9BWElfQU1BUF9DVFJM IHJlZ2lzdGVyDQorCSAqLw0KKwl2YWx1ZSA9IGNzcl9yZWFkbChwY2llLCBQQUJfQVhJX0FNQVBf Q1RSTCh3aW5fbnVtKSk7DQorCXZhbHVlICY9IH4oV0lOX1RZUEVfTUFTSyA8PCBXSU5fVFlQRV9T SElGVCB8DQorCQkgV0lOX1NJWkVfTUFTSyA8PCBXSU5fU0laRV9TSElGVCk7DQorCXZhbHVlIHw9 IDEgPDwgV0lOX0VOQUJMRV9TSElGVCB8IHR5cGUgPDwgV0lOX1RZUEVfU0hJRlQgfA0KKwkJIChs b3dlcl8zMl9iaXRzKHNpemU2NCkgJiBXSU5fU0laRV9NQVNLIDw8IFdJTl9TSVpFX1NISUZUKTsN CisJY3NyX3dyaXRlbChwY2llLCB2YWx1ZSwgUEFCX0FYSV9BTUFQX0NUUkwod2luX251bSkpOw0K Kw0KKwljc3Jfd3JpdGVsKHBjaWUsIHVwcGVyXzMyX2JpdHMoc2l6ZTY0KSwgUEFCX0VYVF9BWElf QU1BUF9TSVpFKHdpbl9udW0pKTsNCisNCisJLyoNCisJICogcHJvZ3JhbSBBWEkgd2luZG93IGJh c2Ugd2l0aCBhcHByb3ByaWF0ZSB2YWx1ZSBpbg0KKwkgKiBQQUJfQVhJX0FNQVBfQVhJX1dJTjAg cmVnaXN0ZXINCisJICovDQorCWNzcl93cml0ZWwocGNpZSwgbG93ZXJfMzJfYml0cyhjcHVfYWRk cikgJiAofkFYSV9XSU5ET1dfQUxJR05fTUFTSyksDQorCQkgICBQQUJfQVhJX0FNQVBfQVhJX1dJ Tih3aW5fbnVtKSk7DQorCWNzcl93cml0ZWwocGNpZSwgdXBwZXJfMzJfYml0cyhjcHVfYWRkciks DQorCQkgICBQQUJfRVhUX0FYSV9BTUFQX0FYSV9XSU4od2luX251bSkpOw0KKw0KKwljc3Jfd3Jp dGVsKHBjaWUsIGxvd2VyXzMyX2JpdHMocGNpX2FkZHIpLA0KKwkJICAgUEFCX0FYSV9BTUFQX1BF WF9XSU5fTCh3aW5fbnVtKSk7DQorCWNzcl93cml0ZWwocGNpZSwgdXBwZXJfMzJfYml0cyhwY2lf YWRkciksDQorCQkgICBQQUJfQVhJX0FNQVBfUEVYX1dJTl9IKHdpbl9udW0pKTsNCisNCisJcGNp ZS0+b2Jfd2luc19jb25maWd1cmVkKys7DQorfQ0KKw0KK2ludCBtb2JpdmVpbF9icmluZ3VwX2xp bmsoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUpDQorew0KKwlpbnQgcmV0cmllczsNCisNCisJ LyogY2hlY2sgaWYgdGhlIGxpbmsgaXMgdXAgb3Igbm90ICovDQorCWZvciAocmV0cmllcyA9IDA7 IHJldHJpZXMgPCBMSU5LX1dBSVRfTUFYX1JFVFJJRVM7IHJldHJpZXMrKykgew0KKwkJaWYgKG1v Yml2ZWlsX3BjaWVfbGlua191cChwY2llKSkNCisJCQlyZXR1cm4gMDsNCisNCisJCXVzbGVlcF9y YW5nZShMSU5LX1dBSVRfTUlOLCBMSU5LX1dBSVRfTUFYKTsNCisJfQ0KKw0KKwlkZXZfaW5mbygm cGNpZS0+cGRldi0+ZGV2LCAibGluayBuZXZlciBjYW1lIHVwXG4iKTsNCisNCisJcmV0dXJuIC1F VElNRURPVVQ7DQorfQ0KKw0KK3ZvaWQgbW9iaXZlaWxfcGNpZV9kaXNhYmxlX2liX3dpbihzdHJ1 Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgaW50IGlkeCkNCit7DQorCXUzMiB2YWw7DQorDQorCXZh bCA9IGNzcl9yZWFkbChwY2llLCBQQUJfUEVYX0FNQVBfQ1RSTChpZHgpKTsNCisJdmFsICY9IH4o MSA8PCBBTUFQX0NUUkxfRU5fU0hJRlQpOw0KKwljc3Jfd3JpdGVsKHBjaWUsIHZhbCwgUEFCX1BF WF9BTUFQX0NUUkwoaWR4KSk7DQorfQ0KKw0KK3ZvaWQgbW9iaXZlaWxfcGNpZV9kaXNhYmxlX29i X3dpbihzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgaW50IGlkeCkNCit7DQorCXUzMiB2YWw7 DQorDQorCXZhbCA9IGNzcl9yZWFkbChwY2llLCBQQUJfQVhJX0FNQVBfQ1RSTChpZHgpKTsNCisJ dmFsICY9IH4oMSA8PCBXSU5fRU5BQkxFX1NISUZUKTsNCisJY3NyX3dyaXRlbChwY2llLCB2YWws IFBBQl9BWElfQU1BUF9DVFJMKGlkeCkpOw0KK30NCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9j b250cm9sbGVyL21vYml2ZWlsL3BjaWUtbW9iaXZlaWwuaCBiL2RyaXZlcnMvcGNpL2NvbnRyb2xs ZXIvbW9iaXZlaWwvcGNpZS1tb2JpdmVpbC5oDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXgg MDAwMDAwMDAwMDAwLi40NGQ2YzRlMzBjMDkNCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMv cGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1tb2JpdmVpbC5oDQpAQCAtMCwwICsxLDIxMSBA QA0KKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovDQorLyoNCisgKiBQQ0ll IGhvc3QgY29udHJvbGxlciBkcml2ZXIgZm9yIE1vYml2ZWlsIFBDSWUgSG9zdCBjb250cm9sbGVy DQorICoNCisgKiBDb3B5cmlnaHQgKGMpIDIwMTggTW9iaXZlaWwgSW5jLg0KKyAqIENvcHlyaWdo dCAyMDE5IE5YUA0KKyAqDQorICogQXV0aG9yOiBTdWJyYWhtYW55YSBMaW5nYXBwYSA8bC5zdWJy YWhtYW55YUBtb2JpdmVpbC5jby5pbj4NCisgKiBSZWZhY3RvcjogWmhpcWlhbmcgSG91IDxaaGlx aWFuZy5Ib3VAbnhwLmNvbT4NCisgKi8NCisNCisjaWZuZGVmIF9QQ0lFX01PQklWRUlMX0gNCisj ZGVmaW5lIF9QQ0lFX01PQklWRUlMX0gNCisNCisjaW5jbHVkZSA8bGludXgvcGNpLmg+DQorI2lu Y2x1ZGUgPGxpbnV4L2lycS5oPg0KKyNpbmNsdWRlIDxsaW51eC9tc2kuaD4NCisjaW5jbHVkZSAi Li4vLi4vcGNpLmgiDQorDQorLyogcmVnaXN0ZXIgb2Zmc2V0cyBhbmQgYml0IHBvc2l0aW9ucyAq Lw0KKw0KKy8qDQorICogdHJhbnNsYXRpb24gdGFibGVzIGFyZSBncm91cGVkIGludG8gd2luZG93 cywgZWFjaCB3aW5kb3cgcmVnaXN0ZXJzIGFyZQ0KKyAqIGdyb3VwZWQgaW50byBibG9ja3Mgb2Yg NCBvciAxNiByZWdpc3RlcnMgZWFjaA0KKyAqLw0KKyNkZWZpbmUgUEFCX1JFR19CTE9DS19TSVpF CQkxNg0KKyNkZWZpbmUgUEFCX0VYVF9SRUdfQkxPQ0tfU0laRQkJNA0KKw0KKyNkZWZpbmUgUEFC X1JFR19BRERSKG9mZnNldCwgd2luKQlcDQorCShvZmZzZXQgKyAod2luICogUEFCX1JFR19CTE9D S19TSVpFKSkNCisjZGVmaW5lIFBBQl9FWFRfUkVHX0FERFIob2Zmc2V0LCB3aW4pCVwNCisJKG9m ZnNldCArICh3aW4gKiBQQUJfRVhUX1JFR19CTE9DS19TSVpFKSkNCisNCisjZGVmaW5lIExUU1NN X1NUQVRVUwkJCTB4MDQwNA0KKyNkZWZpbmUgIExUU1NNX1NUQVRVU19MMF9NQVNLCQkweDNmDQor I2RlZmluZSAgTFRTU01fU1RBVFVTX0wwCQkweDJkDQorDQorI2RlZmluZSBQQUJfQ1RSTAkJCTB4 MDgwOA0KKyNkZWZpbmUgIEFNQkFfUElPX0VOQUJMRV9TSElGVAkJMA0KKyNkZWZpbmUgIFBFWF9Q SU9fRU5BQkxFX1NISUZUCQkxDQorI2RlZmluZSAgUEFHRV9TRUxfU0hJRlQJCQkxMw0KKyNkZWZp bmUgIFBBR0VfU0VMX01BU0sJCQkweDNmDQorI2RlZmluZSAgUEFHRV9MT19NQVNLCQkJMHgzZmYN CisjZGVmaW5lICBQQUdFX1NFTF9PRkZTRVRfU0hJRlQJCTEwDQorDQorI2RlZmluZSBQQUJfQVhJ X1BJT19DVFJMCQkweDA4NDANCisjZGVmaW5lICBBUElPX0VOX01BU0sJCQkweGYNCisNCisjZGVm aW5lIFBBQl9QRVhfUElPX0NUUkwJCTB4MDhjMA0KKyNkZWZpbmUgIFBJT19FTkFCTEVfU0hJRlQJ CTANCisNCisjZGVmaW5lIFBBQl9JTlRQX0FNQkFfTUlTQ19FTkIJCTB4MGIwYw0KKyNkZWZpbmUg UEFCX0lOVFBfQU1CQV9NSVNDX1NUQVQJCTB4MGIxYw0KKyNkZWZpbmUgIFBBQl9JTlRQX0lOVFhf TUFTSwkJMHgwMWUwDQorI2RlZmluZSAgUEFCX0lOVFBfTVNJX01BU0sJCTB4OA0KKw0KKyNkZWZp bmUgUEFCX0FYSV9BTUFQX0NUUkwod2luKQkJUEFCX1JFR19BRERSKDB4MGJhMCwgd2luKQ0KKyNk ZWZpbmUgIFdJTl9FTkFCTEVfU0hJRlQJCTANCisjZGVmaW5lICBXSU5fVFlQRV9TSElGVAkJCTEN CisjZGVmaW5lICBXSU5fVFlQRV9NQVNLCQkJMHgzDQorI2RlZmluZSAgV0lOX1NJWkVfU0hJRlQJ CQkxMA0KKyNkZWZpbmUgIFdJTl9TSVpFX01BU0sJCQkweDNmZmZmZg0KKw0KKyNkZWZpbmUgUEFC X0VYVF9BWElfQU1BUF9TSVpFKHdpbikJUEFCX0VYVF9SRUdfQUREUigweGJhZjAsIHdpbikNCisN CisjZGVmaW5lIFBBQl9FWFRfQVhJX0FNQVBfQVhJX1dJTih3aW4pCVBBQl9FWFRfUkVHX0FERFIo MHg4MGEwLCB3aW4pDQorI2RlZmluZSBQQUJfQVhJX0FNQVBfQVhJX1dJTih3aW4pCVBBQl9SRUdf QUREUigweDBiYTQsIHdpbikNCisjZGVmaW5lICBBWElfV0lORE9XX0FMSUdOX01BU0sJCTMNCisN CisjZGVmaW5lIFBBQl9BWElfQU1BUF9QRVhfV0lOX0wod2luKQlQQUJfUkVHX0FERFIoMHgwYmE4 LCB3aW4pDQorI2RlZmluZSAgUEFCX0JVU19TSElGVAkJCTI0DQorI2RlZmluZSAgUEFCX0RFVklD RV9TSElGVAkJMTkNCisjZGVmaW5lICBQQUJfRlVOQ1RJT05fU0hJRlQJCTE2DQorDQorI2RlZmlu ZSBQQUJfQVhJX0FNQVBfUEVYX1dJTl9IKHdpbikJUEFCX1JFR19BRERSKDB4MGJhYywgd2luKQ0K KyNkZWZpbmUgUEFCX0lOVFBfQVhJX1BJT19DTEFTUwkJMHg0NzQNCisNCisjZGVmaW5lIFBBQl9Q RVhfQU1BUF9DVFJMKHdpbikJCVBBQl9SRUdfQUREUigweDRiYTAsIHdpbikNCisjZGVmaW5lICBB TUFQX0NUUkxfRU5fU0hJRlQJCTANCisjZGVmaW5lICBBTUFQX0NUUkxfVFlQRV9TSElGVAkJMQ0K KyNkZWZpbmUgIEFNQVBfQ1RSTF9UWVBFX01BU0sJCTMNCisNCisjZGVmaW5lIFBBQl9FWFRfUEVY X0FNQVBfU0laRU4od2luKQlQQUJfRVhUX1JFR19BRERSKDB4YmVmMCwgd2luKQ0KKyNkZWZpbmUg UEFCX0VYVF9QRVhfQU1BUF9BWElfV0lOKHdpbikJUEFCX0VYVF9SRUdfQUREUigweGI0YTAsIHdp bikNCisjZGVmaW5lIFBBQl9QRVhfQU1BUF9BWElfV0lOKHdpbikJUEFCX1JFR19BRERSKDB4NGJh NCwgd2luKQ0KKyNkZWZpbmUgUEFCX1BFWF9BTUFQX1BFWF9XSU5fTCh3aW4pCVBBQl9SRUdfQURE UigweDRiYTgsIHdpbikNCisjZGVmaW5lIFBBQl9QRVhfQU1BUF9QRVhfV0lOX0god2luKQlQQUJf UkVHX0FERFIoMHg0YmFjLCB3aW4pDQorDQorLyogc3RhcnRpbmcgb2Zmc2V0IG9mIElOVFggYml0 cyBpbiBzdGF0dXMgcmVnaXN0ZXIgKi8NCisjZGVmaW5lIFBBQl9JTlRYX1NUQVJUCQkJNQ0KKw0K Ky8qIHN1cHBvcnRlZCBudW1iZXIgb2YgTVNJIGludGVycnVwdHMgKi8NCisjZGVmaW5lIFBDSV9O VU1fTVNJCQkJMTYNCisNCisvKiBNU0kgcmVnaXN0ZXJzICovDQorI2RlZmluZSBNU0lfQkFTRV9M T19PRkZTRVQJCTB4MDQNCisjZGVmaW5lIE1TSV9CQVNFX0hJX09GRlNFVAkJMHgwOA0KKyNkZWZp bmUgTVNJX1NJWkVfT0ZGU0VUCQkJMHgwYw0KKyNkZWZpbmUgTVNJX0VOQUJMRV9PRkZTRVQJCTB4 MTQNCisjZGVmaW5lIE1TSV9TVEFUVVNfT0ZGU0VUCQkweDE4DQorI2RlZmluZSBNU0lfREFUQV9P RkZTRVQJCQkweDIwDQorI2RlZmluZSBNU0lfQUREUl9MX09GRlNFVAkJMHgyNA0KKyNkZWZpbmUg TVNJX0FERFJfSF9PRkZTRVQJCTB4MjgNCisNCisvKiBvdXRib3VuZCBhbmQgaW5ib3VuZCB3aW5k b3cgZGVmaW5pdGlvbnMgKi8NCisjZGVmaW5lIFdJTl9OVU1fMAkJCTANCisjZGVmaW5lIFdJTl9O VU1fMQkJCTENCisjZGVmaW5lIENGR19XSU5ET1dfVFlQRQkJCTANCisjZGVmaW5lIElPX1dJTkRP V19UWVBFCQkJMQ0KKyNkZWZpbmUgTUVNX1dJTkRPV19UWVBFCQkJMg0KKyNkZWZpbmUgSUJfV0lO X1NJWkUJCQkoKHU2NCkyNTYgKiAxMDI0ICogMTAyNCAqIDEwMjQpDQorI2RlZmluZSBNQVhfUElP X1dJTkRPV1MJCQk4DQorDQorLyogUGFyYW1ldGVycyBmb3IgdGhlIHdhaXRpbmcgZm9yIGxpbmsg dXAgcm91dGluZSAqLw0KKyNkZWZpbmUgTElOS19XQUlUX01BWF9SRVRSSUVTCQkxMA0KKyNkZWZp bmUgTElOS19XQUlUX01JTgkJCTkwMDAwDQorI2RlZmluZSBMSU5LX1dBSVRfTUFYCQkJMTAwMDAw DQorDQorI2RlZmluZSBQQUdFRF9BRERSX0JORFJZCQkweGMwMA0KKyNkZWZpbmUgT0ZGU0VUX1RP X1BBR0VfQUREUihvZmYpCVwNCisJKChvZmYgJiBQQUdFX0xPX01BU0spIHwgUEFHRURfQUREUl9C TkRSWSkNCisjZGVmaW5lIE9GRlNFVF9UT19QQUdFX0lEWChvZmYpCQlcDQorCSgob2ZmID4+IFBB R0VfU0VMX09GRlNFVF9TSElGVCkgJiBQQUdFX1NFTF9NQVNLKQ0KKw0KK3N0cnVjdCBtb2JpdmVp bF9wY2llOw0KKw0KK3N0cnVjdCBtb2JpdmVpbF9tc2kgewkJCS8qIE1TSSBpbmZvcm1hdGlvbiAq Lw0KKwlzdHJ1Y3QgbXV0ZXggbG9jazsJCS8qIHByb3RlY3QgYml0bWFwIHZhcmlhYmxlICovDQor CXN0cnVjdCBpcnFfZG9tYWluICptc2lfZG9tYWluOw0KKwlzdHJ1Y3QgaXJxX2RvbWFpbiAqZGV2 X2RvbWFpbjsNCisJcGh5c19hZGRyX3QgbXNpX3BhZ2VzX3BoeXM7DQorCWludCBudW1fb2ZfdmVj dG9yczsNCisJREVDTEFSRV9CSVRNQVAobXNpX2lycV9pbl91c2UsIFBDSV9OVU1fTVNJKTsNCit9 Ow0KKw0KK3N0cnVjdCBtb2JpdmVpbF9ycF9vcHMgew0KKwlpbnQgKCppbnRlcnJ1cHRfaW5pdCko c3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUpOw0KK307DQorDQorc3RydWN0IHJvb3RfcG9ydCB7 DQorCXU4IHJvb3RfYnVzX25yOw0KKwl2b2lkIF9faW9tZW0gKmNvbmZpZ19heGlfc2xhdmVfYmFz ZTsJLyogZW5kcG9pbnQgY29uZmlnIGJhc2UgKi8NCisJc3RydWN0IHJlc291cmNlICpvYl9pb19y ZXM7DQorCXN0cnVjdCBtb2JpdmVpbF9ycF9vcHMgKm9wczsNCisJaW50IGlycTsNCisJcmF3X3Nw aW5sb2NrX3QgaW50eF9tYXNrX2xvY2s7DQorCXN0cnVjdCBpcnFfZG9tYWluICppbnR4X2RvbWFp bjsNCisJc3RydWN0IG1vYml2ZWlsX21zaSBtc2k7DQorfTsNCisNCitzdHJ1Y3QgbW9iaXZlaWxf cGFiX29wcyB7DQorCWludCAoKmxpbmtfdXApKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llKTsN Cit9Ow0KKw0KK3N0cnVjdCBtb2JpdmVpbF9wY2llIHsNCisJc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldjsNCisJc3RydWN0IGxpc3RfaGVhZCByZXNvdXJjZXM7DQorCXZvaWQgX19pb21lbSAq Y3NyX2F4aV9zbGF2ZV9iYXNlOwkvKiBQQUIgcmVnaXN0ZXJzIGJhc2UgKi8NCisJcGh5c19hZGRy X3QgcGNpZV9yZWdfYmFzZTsJLyogUGh5c2ljYWwgUENJZSBDb250cm9sbGVyIEJhc2UgKi8NCisJ dm9pZCBfX2lvbWVtICphcGJfY3NyX2Jhc2U7CS8qIE1TSSByZWdpc3RlciBiYXNlICovDQorCXUz MiBhcGlvX3dpbnM7DQorCXUzMiBwcGlvX3dpbnM7DQorCXUzMiBvYl93aW5zX2NvbmZpZ3VyZWQ7 CQkvKiBjb25maWd1cmVkIG91dGJvdW5kIHdpbmRvd3MgKi8NCisJdTMyIGliX3dpbnNfY29uZmln dXJlZDsJCS8qIGNvbmZpZ3VyZWQgaW5ib3VuZCB3aW5kb3dzICovDQorCWNvbnN0IHN0cnVjdCBt b2JpdmVpbF9wYWJfb3BzICpvcHM7DQorCXN0cnVjdCByb290X3BvcnQgcnA7DQorfTsNCisNCitp bnQgbW9iaXZlaWxfcGNpZV9ob3N0X3Byb2JlKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llKTsN Citib29sIG1vYml2ZWlsX3BjaWVfbGlua191cChzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSk7 DQoraW50IG1vYml2ZWlsX2JyaW5ndXBfbGluayhzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSk7 DQordm9pZCBwcm9ncmFtX29iX3dpbmRvd3Moc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIGlu dCB3aW5fbnVtLCB1NjQgY3B1X2FkZHIsDQorCQkJdTY0IHBjaV9hZGRyLCB1MzIgdHlwZSwgdTY0 IHNpemUpOw0KK3ZvaWQgcHJvZ3JhbV9pYl93aW5kb3dzKHN0cnVjdCBtb2JpdmVpbF9wY2llICpw Y2llLCBpbnQgd2luX251bSwgdTY0IGNwdV9hZGRyLA0KKwkJCXU2NCBwY2lfYWRkciwgdTMyIHR5 cGUsIHU2NCBzaXplKTsNCit2b2lkIG1vYml2ZWlsX3BjaWVfZGlzYWJsZV9vYl93aW4oc3RydWN0 IG1vYml2ZWlsX3BjaWUgKnBjaWUsIGludCBpZHgpOw0KK3ZvaWQgbW9iaXZlaWxfcGNpZV9kaXNh YmxlX2liX3dpbihzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgaW50IGlkeCk7DQordTMyIGNz cl9yZWFkKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llLCB1MzIgb2ZmLCBzaXplX3Qgc2l6ZSk7 DQordm9pZCBjc3Jfd3JpdGUoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIHUzMiB2YWwsIHUz MiBvZmYsIHNpemVfdCBzaXplKTsNCisNCitzdGF0aWMgaW5saW5lIHUzMiBjc3JfcmVhZGwoc3Ry dWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIHUzMiBvZmYpDQorew0KKwlyZXR1cm4gY3NyX3JlYWQo cGNpZSwgb2ZmLCAweDQpOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHUzMiBjc3JfcmVhZHcoc3Ry dWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIHUzMiBvZmYpDQorew0KKwlyZXR1cm4gY3NyX3JlYWQo cGNpZSwgb2ZmLCAweDIpOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHUzMiBjc3JfcmVhZGIoc3Ry dWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIHUzMiBvZmYpDQorew0KKwlyZXR1cm4gY3NyX3JlYWQo cGNpZSwgb2ZmLCAweDEpOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHZvaWQgY3NyX3dyaXRlbChz dHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgdTMyIHZhbCwgdTMyIG9mZikNCit7DQorCWNzcl93 cml0ZShwY2llLCB2YWwsIG9mZiwgMHg0KTsNCit9DQorDQorc3RhdGljIGlubGluZSB2b2lkIGNz cl93cml0ZXcoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIHUzMiB2YWwsIHUzMiBvZmYpDQor ew0KKwljc3Jfd3JpdGUocGNpZSwgdmFsLCBvZmYsIDB4Mik7DQorfQ0KKw0KK3N0YXRpYyBpbmxp bmUgdm9pZCBjc3Jfd3JpdGViKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llLCB1MzIgdmFsLCB1 MzIgb2ZmKQ0KK3sNCisJY3NyX3dyaXRlKHBjaWUsIHZhbCwgb2ZmLCAweDEpOw0KK30NCisNCisj ZW5kaWYgLyogX1BDSUVfTU9CSVZFSUxfSCAqLw0KLS0gDQoyLjE3LjENCg0K