Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp4655949ybi; Mon, 27 May 2019 23:51:44 -0700 (PDT) X-Google-Smtp-Source: APXvYqwUwopTcK1Up04SwAYcQ6MknZ7GZzKv2NPlS4pUaOVZps+6Md7dBdgxSniPGZjnfbw2d0Zl X-Received: by 2002:a62:4c5:: with SMTP id 188mr80734295pfe.19.1559026304720; Mon, 27 May 2019 23:51:44 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1559026304; cv=none; d=google.com; s=arc-20160816; b=NnDbQwQSDeBhDMSRn4C0ZAc/pSVixJhbgKw26UUGmvolWxX6W/Nb6k1EfebiqvD8Qz QhNrQNv2z4EqwdXuJ88AneYE0ACFEcsDZv0PdiyH00VmXG5aTl0N1WvS8hkzqSGYZVX0 xfBlfaz9xcGS7mIOeL9owza3XNOq4/7cLm17hbO7zYXvjvAV+j8Rrr0SNyKYXEjnI//3 0hSO3kwUZCkh3rOfaQI05Nf6uiNL0l8Lnq03gZ7mfTEWQKesApRkeKXYSOW+KWZzBw3l sXjUZz1mXLiOneqV5WeCeBIZPAuveHZzJS21c2M4JGtNRlQpyXDntywJrABuJCBhSe0Z ZXSQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:dkim-signature; bh=69AXWwd7FGUA8w/3gOn+ZaO4OfmeCyauyTyV+1ZjaWk=; b=AEjaziLBudUlrjB/A09jwjL4+ZbU1hBfpB0p8iOBzfoJ8/SpQ4S2cMExAc7oJ/Kxzb ZwANbKCU7NOPaJAUCixa+aWzZp37SXA9uyXXko1zJtxlXbYWkvWH6bwT4TbysRt3/9pJ s9OYQhFFfNTVbwPfdq0RzpoZYsbDzliJNQtay6iSKcJnvfE3ge+bgEnzLeLLcJw+Di1N LHTANKN30bdRM0aFH+NaBZ59+Schy0D4TsvzA4dxARivHdUdOpbSWE5R1BezoTj8I8LU VRLUQwWbVM8dDlsbVoul1nH/3/Pub8Mf1JLaHqPdXSljeARpl5C9N8+lM1ZdkNo9Q2+J 6PUw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=lI2ybSBG; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id o4si19350248pgp.476.2019.05.27.23.51.28; Mon, 27 May 2019 23:51:44 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@nxp.com header.s=selector2 header.b=lI2ybSBG; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=nxp.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727553AbfE1GuQ (ORCPT + 99 others); Tue, 28 May 2019 02:50:16 -0400 Received: from mail-eopbgr30075.outbound.protection.outlook.com ([40.107.3.75]:2909 "EHLO EUR03-AM5-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727230AbfE1GuP (ORCPT ); Tue, 28 May 2019 02:50:15 -0400 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=69AXWwd7FGUA8w/3gOn+ZaO4OfmeCyauyTyV+1ZjaWk=; b=lI2ybSBGx5dQtl5M8m+/3XBUoM3Yyadb0R3/g4s0E1tDxzvN2uo/v3Z9gX63WoMIsdBP7J5YwqcxzEEMUQheAUaKwi7/fF7JwA5GHmNAGb/U5jLr+UX9t5vbn4V902t5mIXTX7lNHyVwei1wygefdN/G4ddQBKKVmp1XDenI+LM= Received: from AM6PR04MB5781.eurprd04.prod.outlook.com (20.179.3.19) by AM6PR04MB5495.eurprd04.prod.outlook.com (20.178.93.140) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1922.15; Tue, 28 May 2019 06:50:05 +0000 Received: from AM6PR04MB5781.eurprd04.prod.outlook.com ([fe80::6491:59e7:6b25:2993]) by AM6PR04MB5781.eurprd04.prod.outlook.com ([fe80::6491:59e7:6b25:2993%7]) with mapi id 15.20.1922.021; Tue, 28 May 2019 06:50:05 +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" , "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" CC: Mingkai Hu , "M.h. Lian" , Xiaowei Bao , "Z.q. Hou" Subject: [PATCHv6 1/6] PCI: mobiveil: Refactor Mobiveil PCIe Host Bridge IP driver Thread-Topic: [PATCHv6 1/6] PCI: mobiveil: Refactor Mobiveil PCIe Host Bridge IP driver Thread-Index: AQHVFSGUU+6v/wCRD066pQxla4GBKw== Date: Tue, 28 May 2019 06:50:04 +0000 Message-ID: <20190528065129.8769-2-Zhiqiang.Hou@nxp.com> References: <20190528065129.8769-1-Zhiqiang.Hou@nxp.com> In-Reply-To: <20190528065129.8769-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: HK2PR02CA0128.apcprd02.prod.outlook.com (2603:1096:202:16::12) 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: 53fe8f15-2044-4e4b-b66e-08d6e338b69f x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(5600148)(711020)(4605104)(1401327)(4618075)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(2017052603328)(7193020);SRVR:AM6PR04MB5495; x-ms-traffictypediagnostic: AM6PR04MB5495: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:6108; x-forefront-prvs: 00514A2FE6 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(39860400002)(396003)(376002)(366004)(136003)(346002)(199004)(189003)(2501003)(6486002)(86362001)(6116002)(6436002)(66066001)(53946003)(6512007)(2201001)(386003)(2906002)(53936002)(25786009)(3846002)(7416002)(4326008)(71200400001)(71190400001)(66476007)(54906003)(5024004)(11346002)(81156014)(73956011)(64756008)(66556008)(50226002)(8676002)(316002)(5660300002)(81166006)(8936002)(110136005)(305945005)(76176011)(102836004)(52116002)(14444005)(186003)(26005)(36756003)(68736007)(6506007)(7736002)(256004)(446003)(478600001)(30864003)(486006)(1076003)(99286004)(66946007)(66446008)(2616005)(476003)(14454004)(921003)(1121003)(559001)(579004)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:AM6PR04MB5495;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: svn4eOVo2WQ38Eoohg/qdX3mhj66E1kwGnvxdkk37BdSX3pLbjsTCcBN0NH3nwKITpK9rSuSOWg4nDPhnKI9MSi476TajqNsPNMAbHZ2Tm2G0WX6lnZu2r36AeAdbEp49mQBqwhEeEzTyaMvhQbmJf2fRfFjPROM67nLKjv1eFpXF9Frv5UX3ow0K9Fen4w2h1EWnviA7ZEORbwzmuKivTB2/y31knLLpD1EPNs+4gpcYCLdNa58sbgH42yGEJ1/3YnezpNjNkBfw3fdOoX5mevEZZ6U1fKsDprwyy9wIGA+Xrdnj4+qopCsznVMYf19YkEnTgkMFFKm44yg9qEjcjZvSKIAuwx6H5bF13d9zMSoiZEcE3vUAWlKCG40a0s93FrOdvTXg/3ftjJXyErGaRwDZHpvl10cjcKciP7v7rI= 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: 53fe8f15-2044-4e4b-b66e-08d6e338b69f X-MS-Exchange-CrossTenant-originalarrivaltime: 28 May 2019 06:50:04.8453 (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: zhiqiang.hou@nxp.com X-MS-Exchange-Transport-CrossTenantHeadersStamped: AM6PR04MB5495 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 YnJhaG1hbnlhQG1vYml2ZWlsLmNvLmluPg0KLS0tDQpWNjoNCiAtIE1vdmUgdGhlIGFsbG9jYXRp b24gb2YgaG9zdCBiaXJkZ2Ugc3RydWN0dXJlIHRvIG1haW4gZHJpdmVyLA0KICAgYW5kIHNxdWFz aCB0aGUgYWxsb2NhdGlvbiBvZiBwcml2YXRlIHN0cnVjdHVyZSBpbnRvIHRoZSBob3N0DQogICBi cmlkZ2Ugc3RydWN0dXJlIGFsbG9jYXRpb24uDQoNCiBNQUlOVEFJTkVSUyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0NCiBkcml2ZXJzL3BjaS9jb250cm9sbGVyL0tj b25maWcgICAgICAgICAgICAgICAgfCAgMTEgKy0NCiBkcml2ZXJzL3BjaS9jb250cm9sbGVyL01h a2VmaWxlICAgICAgICAgICAgICAgfCAgIDIgKy0NCiBkcml2ZXJzL3BjaS9jb250cm9sbGVyL21v Yml2ZWlsL0tjb25maWcgICAgICAgfCAgMjQgKw0KIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9i aXZlaWwvTWFrZWZpbGUgICAgICB8ICAgNCArDQogLi4uL3BjaWUtbW9iaXZlaWwtaG9zdC5jfSAg ICAgICAgICAgICAgICAgICAgIHwgNTY5ICsrKy0tLS0tLS0tLS0tLS0tLQ0KIC4uLi9jb250cm9s bGVyL21vYml2ZWlsL3BjaWUtbW9iaXZlaWwtcGxhdC5jICB8ICA1OSArKw0KIC4uLi9wY2kvY29u dHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLmMgICB8IDI0OCArKysrKysrKw0KIC4uLi9w Y2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLmggICB8IDIxMiArKysrKysrDQog OSBmaWxlcyBjaGFuZ2VkLCA2MzcgaW5zZXJ0aW9ucygrKSwgNDk0IGRlbGV0aW9ucygtKQ0KIGNy ZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL0tjb25maWcN CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9NYWtl ZmlsZQ0KIHJlbmFtZSBkcml2ZXJzL3BjaS9jb250cm9sbGVyL3twY2llLW1vYml2ZWlsLmMgPT4g bW9iaXZlaWwvcGNpZS1tb2JpdmVpbC1ob3N0LmN9ICg1MyUpDQogY3JlYXRlIG1vZGUgMTAwNjQ0 IGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvcGNpZS1tb2JpdmVpbC1wbGF0LmMNCiBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1v Yml2ZWlsLmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2Jp dmVpbC9wY2llLW1vYml2ZWlsLmgNCg0KZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRB SU5FUlMNCmluZGV4IDk5MmYxZGQwNjMxOC4uYzA2NjEyOGQ2OWVjIDEwMDY0NA0KLS0tIGEvTUFJ TlRBSU5FUlMNCisrKyBiL01BSU5UQUlORVJTDQpAQCAtMTIwNjMsNyArMTIwNjMsNyBAQCBNOglI b3UgWmhpcWlhbmcgPFpoaXFpYW5nLkhvdUBueHAuY29tPg0KIEw6CWxpbnV4LXBjaUB2Z2VyLmtl cm5lbC5vcmcNCiBTOglTdXBwb3J0ZWQNCiBGOglEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmlu ZGluZ3MvcGNpL21vYml2ZWlsLXBjaWUudHh0DQotRjoJZHJpdmVycy9wY2kvY29udHJvbGxlci9w Y2llLW1vYml2ZWlsLmMNCitGOglkcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL3BjaWUt bW9iaXZlaWwqDQogDQogUENJIERSSVZFUiBGT1IgTVZFQlUgKE1hcnZlbGwgQXJtYWRhIDM3MCBh bmQgQXJtYWRhIFhQIFNPQyBzdXBwb3J0KQ0KIE06CVRob21hcyBQZXRhenpvbmkgPHRob21hcy5w ZXRhenpvbmlAYm9vdGxpbi5jb20+DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxl ci9LY29uZmlnIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9LY29uZmlnDQppbmRleCAwMTFjNTdj YWU0YjAuLmI0ZDFlMjExYjZkMSAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIv S2NvbmZpZw0KKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9LY29uZmlnDQpAQCAtMjQxLDE2 ICsyNDEsNiBAQCBjb25maWcgUENJRV9NRURJQVRFSw0KIAkgIFNheSBZIGhlcmUgaWYgeW91IHdh bnQgdG8gZW5hYmxlIFBDSWUgY29udHJvbGxlciBzdXBwb3J0IG9uDQogCSAgTWVkaWFUZWsgU29D cy4NCiANCi1jb25maWcgUENJRV9NT0JJVkVJTA0KLQlib29sICJNb2JpdmVpbCBBWEkgUENJZSBj b250cm9sbGVyIg0KLQlkZXBlbmRzIG9uIEFSQ0hfWllOUU1QIHx8IENPTVBJTEVfVEVTVA0KLQlk ZXBlbmRzIG9uIE9GDQotCWRlcGVuZHMgb24gUENJX01TSV9JUlFfRE9NQUlODQotCWhlbHANCi0J ICBTYXkgWSBoZXJlIGlmIHlvdSB3YW50IHRvIGVuYWJsZSBzdXBwb3J0IGZvciB0aGUgTW9iaXZl aWwgQVhJIFBDSWUNCi0JICBTb2Z0IElQLiBJdCBoYXMgdXAgdG8gOCBvdXRib3VuZCBhbmQgaW5i b3VuZCB3aW5kb3dzDQotCSAgZm9yIGFkZHJlc3MgdHJhbnNsYXRpb24gYW5kIGl0IGlzIGEgUENJ ZSBHZW40IElQLg0KLQ0KIGNvbmZpZyBQQ0lFX1RBTkdPX1NNUDg3NTkNCiAJYm9vbCAiVGFuZ28g U01QODc1OSBQQ0llIGNvbnRyb2xsZXIgKERBTkdFUk9VUykiDQogCWRlcGVuZHMgb24gQVJDSF9U QU5HTyAmJiBQQ0lfTVNJICYmIE9GDQpAQCAtMjgyLDQgKzI3Miw1IEBAIGNvbmZpZyBWTUQNCiAJ ICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgdm1kLg0KIA0KIHNvdXJjZSAiZHJpdmVycy9wY2kvY29u dHJvbGxlci9kd2MvS2NvbmZpZyINCitzb3VyY2UgImRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9i aXZlaWwvS2NvbmZpZyINCiBlbmRtZW51DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJv bGxlci9NYWtlZmlsZSBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvTWFrZWZpbGUNCmluZGV4IGQ1 NmE1MDc0OTVjNS4uYjc5YTYxNTA0MWEwIDEwMDY0NA0KLS0tIGEvZHJpdmVycy9wY2kvY29udHJv bGxlci9NYWtlZmlsZQ0KKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9NYWtlZmlsZQ0KQEAg LTI2LDExICsyNiwxMSBAQCBvYmotJChDT05GSUdfUENJRV9ST0NLQ0hJUCkgKz0gcGNpZS1yb2Nr Y2hpcC5vDQogb2JqLSQoQ09ORklHX1BDSUVfUk9DS0NISVBfRVApICs9IHBjaWUtcm9ja2NoaXAt ZXAubw0KIG9iai0kKENPTkZJR19QQ0lFX1JPQ0tDSElQX0hPU1QpICs9IHBjaWUtcm9ja2NoaXAt aG9zdC5vDQogb2JqLSQoQ09ORklHX1BDSUVfTUVESUFURUspICs9IHBjaWUtbWVkaWF0ZWsubw0K LW9iai0kKENPTkZJR19QQ0lFX01PQklWRUlMKSArPSBwY2llLW1vYml2ZWlsLm8NCiBvYmotJChD T05GSUdfUENJRV9UQU5HT19TTVA4NzU5KSArPSBwY2llLXRhbmdvLm8NCiBvYmotJChDT05GSUdf Vk1EKSArPSB2bWQubw0KICMgcGNpZS1oaXNpLm8gcXVpcmtzIGFyZSBuZWVkZWQgZXZlbiB3aXRo b3V0IENPTkZJR19QQ0lFX0RXDQogb2JqLXkJCQkJKz0gZHdjLw0KK29iai15CQkJCSs9IG1vYml2 ZWlsLw0KIA0KIA0KICMgVGhlIGZvbGxvd2luZyBkcml2ZXJzIGFyZSBmb3IgZGV2aWNlcyB0aGF0 IHVzZSB0aGUgZ2VuZXJpYyBBQ1BJDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxl ci9tb2JpdmVpbC9LY29uZmlnIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9LY29u ZmlnDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5kZXggMDAwMDAwMDAwMDAwLi42NDM0M2MwN2Jm ZWQNCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwv S2NvbmZpZw0KQEAgLTAsMCArMSwyNCBAQA0KKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjANCisNCittZW51ICJNb2JpdmVpbCBQQ0llIENvcmUgU3VwcG9ydCINCisJZGVwZW5kcyBv biBQQ0kNCisNCitjb25maWcgUENJRV9NT0JJVkVJTA0KKwlib29sDQorDQorY29uZmlnIFBDSUVf TU9CSVZFSUxfSE9TVA0KKyAgICAgICAgYm9vbA0KKwlkZXBlbmRzIG9uIFBDSV9NU0lfSVJRX0RP TUFJTg0KKyAgICAgICAgc2VsZWN0IFBDSUVfTU9CSVZFSUwNCisNCitjb25maWcgUENJRV9NT0JJ VkVJTF9QTEFUDQorCWJvb2wgIk1vYml2ZWlsIEFYSSBQQ0llIGNvbnRyb2xsZXIiDQorCWRlcGVu ZHMgb24gQVJDSF9aWU5RTVAgfHwgQ09NUElMRV9URVNUDQorCWRlcGVuZHMgb24gT0YNCisJc2Vs ZWN0IFBDSUVfTU9CSVZFSUxfSE9TVA0KKwloZWxwDQorCSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2Fu dCB0byBlbmFibGUgc3VwcG9ydCBmb3IgdGhlIE1vYml2ZWlsIEFYSSBQQ0llDQorCSAgU29mdCBJ UC4gSXQgaGFzIHVwIHRvIDggb3V0Ym91bmQgYW5kIGluYm91bmQgd2luZG93cw0KKwkgIGZvciBh ZGRyZXNzIHRyYW5zbGF0aW9uIGFuZCBpdCBpcyBhIFBDSWUgR2VuNCBJUC4NCisNCitlbmRtZW51 DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9NYWtlZmlsZSBi L2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwvTWFrZWZpbGUNCm5ldyBmaWxlIG1vZGUg MTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAuLjlmYjZkMWM2NTA0ZA0KLS0tIC9kZXYvbnVsbA0K KysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9NYWtlZmlsZQ0KQEAgLTAsMCAr MSw0IEBADQorIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KK29iai0kKENPTkZJ R19QQ0lFX01PQklWRUlMKSArPSBwY2llLW1vYml2ZWlsLm8NCitvYmotJChDT05GSUdfUENJRV9N T0JJVkVJTF9IT1NUKSArPSBwY2llLW1vYml2ZWlsLWhvc3Qubw0KK29iai0kKENPTkZJR19QQ0lF X01PQklWRUlMX1BMQVQpICs9IHBjaWUtbW9iaXZlaWwtcGxhdC5vDQpkaWZmIC0tZ2l0IGEvZHJp dmVycy9wY2kvY29udHJvbGxlci9wY2llLW1vYml2ZWlsLmMgYi9kcml2ZXJzL3BjaS9jb250cm9s bGVyL21vYml2ZWlsL3BjaWUtbW9iaXZlaWwtaG9zdC5jDQpzaW1pbGFyaXR5IGluZGV4IDUzJQ0K cmVuYW1lIGZyb20gZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLW1vYml2ZWlsLmMNCnJlbmFt ZSB0byBkcml2ZXJzL3BjaS9jb250cm9sbGVyL21vYml2ZWlsL3BjaWUtbW9iaXZlaWwtaG9zdC5j DQppbmRleCA0NTZhZGZlZTM5M2MuLmM0Yjk4YTMxZDQyNiAxMDA2NDQNCi0tLSBhL2RyaXZlcnMv cGNpL2NvbnRyb2xsZXIvcGNpZS1tb2JpdmVpbC5jDQorKysgYi9kcml2ZXJzL3BjaS9jb250cm9s bGVyL21vYml2ZWlsL3BjaWUtbW9iaXZlaWwtaG9zdC5jDQpAQCAtMywxMCArMywxMiBAQA0KICAq IFBDSWUgaG9zdCBjb250cm9sbGVyIGRyaXZlciBmb3IgTW9iaXZlaWwgUENJZSBIb3N0IGNvbnRy b2xsZXINCiAgKg0KICAqIENvcHlyaWdodCAoYykgMjAxOCBNb2JpdmVpbCBJbmMuDQorICogQ29w eXJpZ2h0IDIwMTkgTlhQDQorICoNCiAgKiBBdXRob3I6IFN1YnJhaG1hbnlhIExpbmdhcHBhIDxs LnN1YnJhaG1hbnlhQG1vYml2ZWlsLmNvLmluPg0KKyAqIFJlZmFjdG9yOiBaaGlxaWFuZyBIb3Ug PFpoaXFpYW5nLkhvdUBueHAuY29tPg0KICAqLw0KIA0KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5o Pg0KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+DQogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5o Pg0KICNpbmNsdWRlIDxsaW51eC9pcnEuaD4NCkBAIC0yMywyOTkgKzI1LDI1IEBADQogI2luY2x1 ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPg0KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+DQog DQotI2luY2x1ZGUgIi4uL3BjaS5oIg0KLQ0KLS8qIHJlZ2lzdGVyIG9mZnNldHMgYW5kIGJpdCBw b3NpdGlvbnMgKi8NCi0NCi0vKg0KLSAqIHRyYW5zbGF0aW9uIHRhYmxlcyBhcmUgZ3JvdXBlZCBp bnRvIHdpbmRvd3MsIGVhY2ggd2luZG93IHJlZ2lzdGVycyBhcmUNCi0gKiBncm91cGVkIGludG8g YmxvY2tzIG9mIDQgb3IgMTYgcmVnaXN0ZXJzIGVhY2gNCi0gKi8NCi0jZGVmaW5lIFBBQl9SRUdf QkxPQ0tfU0laRQkJMTYNCi0jZGVmaW5lIFBBQl9FWFRfUkVHX0JMT0NLX1NJWkUJCTQNCi0NCi0j ZGVmaW5lIFBBQl9SRUdfQUREUihvZmZzZXQsIHdpbikJXA0KLQkob2Zmc2V0ICsgKHdpbiAqIFBB Ql9SRUdfQkxPQ0tfU0laRSkpDQotI2RlZmluZSBQQUJfRVhUX1JFR19BRERSKG9mZnNldCwgd2lu KQlcDQotCShvZmZzZXQgKyAod2luICogUEFCX0VYVF9SRUdfQkxPQ0tfU0laRSkpDQotDQotI2Rl ZmluZSBMVFNTTV9TVEFUVVMJCQkweDA0MDQNCi0jZGVmaW5lICBMVFNTTV9TVEFUVVNfTDBfTUFT SwkJMHgzZg0KLSNkZWZpbmUgIExUU1NNX1NUQVRVU19MMAkJMHgyZA0KLQ0KLSNkZWZpbmUgUEFC X0NUUkwJCQkweDA4MDgNCi0jZGVmaW5lICBBTUJBX1BJT19FTkFCTEVfU0hJRlQJCTANCi0jZGVm aW5lICBQRVhfUElPX0VOQUJMRV9TSElGVAkJMQ0KLSNkZWZpbmUgIFBBR0VfU0VMX1NISUZUCQkJ MTMNCi0jZGVmaW5lICBQQUdFX1NFTF9NQVNLCQkJMHgzZg0KLSNkZWZpbmUgIFBBR0VfTE9fTUFT SwkJCTB4M2ZmDQotI2RlZmluZSAgUEFHRV9TRUxfT0ZGU0VUX1NISUZUCQkxMA0KLQ0KLSNkZWZp bmUgUEFCX0FYSV9QSU9fQ1RSTAkJMHgwODQwDQotI2RlZmluZSAgQVBJT19FTl9NQVNLCQkJMHhm DQotDQotI2RlZmluZSBQQUJfUEVYX1BJT19DVFJMCQkweDA4YzANCi0jZGVmaW5lICBQSU9fRU5B QkxFX1NISUZUCQkwDQotDQotI2RlZmluZSBQQUJfSU5UUF9BTUJBX01JU0NfRU5CCQkweDBiMGMN Ci0jZGVmaW5lIFBBQl9JTlRQX0FNQkFfTUlTQ19TVEFUCQkweDBiMWMNCi0jZGVmaW5lICBQQUJf SU5UUF9JTlRYX01BU0sJCTB4MDFlMA0KLSNkZWZpbmUgIFBBQl9JTlRQX01TSV9NQVNLCQkweDgN Ci0NCi0jZGVmaW5lIFBBQl9BWElfQU1BUF9DVFJMKHdpbikJCVBBQl9SRUdfQUREUigweDBiYTAs IHdpbikNCi0jZGVmaW5lICBXSU5fRU5BQkxFX1NISUZUCQkwDQotI2RlZmluZSAgV0lOX1RZUEVf U0hJRlQJCQkxDQotI2RlZmluZSAgV0lOX1RZUEVfTUFTSwkJCTB4Mw0KLSNkZWZpbmUgIFdJTl9T SVpFX1NISUZUCQkJMTANCi0jZGVmaW5lICBXSU5fU0laRV9NQVNLCQkJMHgzZmZmZmYNCi0NCi0j ZGVmaW5lIFBBQl9FWFRfQVhJX0FNQVBfU0laRSh3aW4pCVBBQl9FWFRfUkVHX0FERFIoMHhiYWYw LCB3aW4pDQotDQotI2RlZmluZSBQQUJfRVhUX0FYSV9BTUFQX0FYSV9XSU4od2luKQlQQUJfRVhU X1JFR19BRERSKDB4ODBhMCwgd2luKQ0KLSNkZWZpbmUgUEFCX0FYSV9BTUFQX0FYSV9XSU4od2lu KQlQQUJfUkVHX0FERFIoMHgwYmE0LCB3aW4pDQotI2RlZmluZSAgQVhJX1dJTkRPV19BTElHTl9N QVNLCQkzDQotDQotI2RlZmluZSBQQUJfQVhJX0FNQVBfUEVYX1dJTl9MKHdpbikJUEFCX1JFR19B RERSKDB4MGJhOCwgd2luKQ0KLSNkZWZpbmUgIFBBQl9CVVNfU0hJRlQJCQkyNA0KLSNkZWZpbmUg IFBBQl9ERVZJQ0VfU0hJRlQJCTE5DQotI2RlZmluZSAgUEFCX0ZVTkNUSU9OX1NISUZUCQkxNg0K LQ0KLSNkZWZpbmUgUEFCX0FYSV9BTUFQX1BFWF9XSU5fSCh3aW4pCVBBQl9SRUdfQUREUigweDBi YWMsIHdpbikNCi0jZGVmaW5lIFBBQl9JTlRQX0FYSV9QSU9fQ0xBU1MJCTB4NDc0DQotDQotI2Rl ZmluZSBQQUJfUEVYX0FNQVBfQ1RSTCh3aW4pCQlQQUJfUkVHX0FERFIoMHg0YmEwLCB3aW4pDQot I2RlZmluZSAgQU1BUF9DVFJMX0VOX1NISUZUCQkwDQotI2RlZmluZSAgQU1BUF9DVFJMX1RZUEVf U0hJRlQJCTENCi0jZGVmaW5lICBBTUFQX0NUUkxfVFlQRV9NQVNLCQkzDQotDQotI2RlZmluZSBQ QUJfRVhUX1BFWF9BTUFQX1NJWkVOKHdpbikJUEFCX0VYVF9SRUdfQUREUigweGJlZjAsIHdpbikN Ci0jZGVmaW5lIFBBQl9FWFRfUEVYX0FNQVBfQVhJX1dJTih3aW4pCVBBQl9FWFRfUkVHX0FERFIo MHhiNGEwLCB3aW4pDQotI2RlZmluZSBQQUJfUEVYX0FNQVBfQVhJX1dJTih3aW4pCVBBQl9SRUdf QUREUigweDRiYTQsIHdpbikNCi0jZGVmaW5lIFBBQl9QRVhfQU1BUF9QRVhfV0lOX0wod2luKQlQ QUJfUkVHX0FERFIoMHg0YmE4LCB3aW4pDQotI2RlZmluZSBQQUJfUEVYX0FNQVBfUEVYX1dJTl9I KHdpbikJUEFCX1JFR19BRERSKDB4NGJhYywgd2luKQ0KLQ0KLS8qIHN0YXJ0aW5nIG9mZnNldCBv ZiBJTlRYIGJpdHMgaW4gc3RhdHVzIHJlZ2lzdGVyICovDQotI2RlZmluZSBQQUJfSU5UWF9TVEFS VAkJCTUNCi0NCi0vKiBzdXBwb3J0ZWQgbnVtYmVyIG9mIE1TSSBpbnRlcnJ1cHRzICovDQotI2Rl ZmluZSBQQ0lfTlVNX01TSQkJCTE2DQotDQotLyogTVNJIHJlZ2lzdGVycyAqLw0KLSNkZWZpbmUg TVNJX0JBU0VfTE9fT0ZGU0VUCQkweDA0DQotI2RlZmluZSBNU0lfQkFTRV9ISV9PRkZTRVQJCTB4 MDgNCi0jZGVmaW5lIE1TSV9TSVpFX09GRlNFVAkJCTB4MGMNCi0jZGVmaW5lIE1TSV9FTkFCTEVf T0ZGU0VUCQkweDE0DQotI2RlZmluZSBNU0lfU1RBVFVTX09GRlNFVAkJMHgxOA0KLSNkZWZpbmUg TVNJX0RBVEFfT0ZGU0VUCQkJMHgyMA0KLSNkZWZpbmUgTVNJX0FERFJfTF9PRkZTRVQJCTB4MjQN Ci0jZGVmaW5lIE1TSV9BRERSX0hfT0ZGU0VUCQkweDI4DQotDQotLyogb3V0Ym91bmQgYW5kIGlu Ym91bmQgd2luZG93IGRlZmluaXRpb25zICovDQotI2RlZmluZSBXSU5fTlVNXzAJCQkwDQotI2Rl ZmluZSBXSU5fTlVNXzEJCQkxDQotI2RlZmluZSBDRkdfV0lORE9XX1RZUEUJCQkwDQotI2RlZmlu ZSBJT19XSU5ET1dfVFlQRQkJCTENCi0jZGVmaW5lIE1FTV9XSU5ET1dfVFlQRQkJCTINCi0jZGVm aW5lIElCX1dJTl9TSVpFCQkJKCh1NjQpMjU2ICogMTAyNCAqIDEwMjQgKiAxMDI0KQ0KLSNkZWZp bmUgTUFYX1BJT19XSU5ET1dTCQkJOA0KLQ0KLS8qIFBhcmFtZXRlcnMgZm9yIHRoZSB3YWl0aW5n IGZvciBsaW5rIHVwIHJvdXRpbmUgKi8NCi0jZGVmaW5lIExJTktfV0FJVF9NQVhfUkVUUklFUwkJ MTANCi0jZGVmaW5lIExJTktfV0FJVF9NSU4JCQk5MDAwMA0KLSNkZWZpbmUgTElOS19XQUlUX01B WAkJCTEwMDAwMA0KLQ0KLSNkZWZpbmUgUEFHRURfQUREUl9CTkRSWQkJMHhjMDANCi0jZGVmaW5l IE9GRlNFVF9UT19QQUdFX0FERFIob2ZmKQlcDQotCSgob2ZmICYgUEFHRV9MT19NQVNLKSB8IFBB R0VEX0FERFJfQk5EUlkpDQotI2RlZmluZSBPRkZTRVRfVE9fUEFHRV9JRFgob2ZmKQkJXA0KLQko KG9mZiA+PiBQQUdFX1NFTF9PRkZTRVRfU0hJRlQpICYgUEFHRV9TRUxfTUFTSykNCi0NCi1zdHJ1 Y3QgbW9iaXZlaWxfbXNpIHsJCQkvKiBNU0kgaW5mb3JtYXRpb24gKi8NCi0Jc3RydWN0IG11dGV4 IGxvY2s7CQkvKiBwcm90ZWN0IGJpdG1hcCB2YXJpYWJsZSAqLw0KLQlzdHJ1Y3QgaXJxX2RvbWFp biAqbXNpX2RvbWFpbjsNCi0Jc3RydWN0IGlycV9kb21haW4gKmRldl9kb21haW47DQotCXBoeXNf YWRkcl90IG1zaV9wYWdlc19waHlzOw0KLQlpbnQgbnVtX29mX3ZlY3RvcnM7DQotCURFQ0xBUkVf QklUTUFQKG1zaV9pcnFfaW5fdXNlLCBQQ0lfTlVNX01TSSk7DQotfTsNCi0NCi1zdHJ1Y3QgbW9i aXZlaWxfcGNpZSB7DQotCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXY7DQotCXN0cnVjdCBs aXN0X2hlYWQgcmVzb3VyY2VzOw0KLQl2b2lkIF9faW9tZW0gKmNvbmZpZ19heGlfc2xhdmVfYmFz ZTsJLyogZW5kcG9pbnQgY29uZmlnIGJhc2UgKi8NCi0Jdm9pZCBfX2lvbWVtICpjc3JfYXhpX3Ns YXZlX2Jhc2U7CS8qIHJvb3QgcG9ydCBjb25maWcgYmFzZSAqLw0KLQl2b2lkIF9faW9tZW0gKmFw Yl9jc3JfYmFzZTsJLyogTVNJIHJlZ2lzdGVyIGJhc2UgKi8NCi0JcGh5c19hZGRyX3QgcGNpZV9y ZWdfYmFzZTsJLyogUGh5c2ljYWwgUENJZSBDb250cm9sbGVyIEJhc2UgKi8NCi0Jc3RydWN0IGly cV9kb21haW4gKmludHhfZG9tYWluOw0KLQlyYXdfc3BpbmxvY2tfdCBpbnR4X21hc2tfbG9jazsN Ci0JaW50IGlycTsNCi0JaW50IGFwaW9fd2luczsNCi0JaW50IHBwaW9fd2luczsNCi0JaW50IG9i X3dpbnNfY29uZmlndXJlZDsJCS8qIGNvbmZpZ3VyZWQgb3V0Ym91bmQgd2luZG93cyAqLw0KLQlp bnQgaWJfd2luc19jb25maWd1cmVkOwkJLyogY29uZmlndXJlZCBpbmJvdW5kIHdpbmRvd3MgKi8N Ci0Jc3RydWN0IHJlc291cmNlICpvYl9pb19yZXM7DQotCWNoYXIgcm9vdF9idXNfbnI7DQotCXN0 cnVjdCBtb2JpdmVpbF9tc2kgbXNpOw0KLX07DQotDQotLyoNCi0gKiBtb2JpdmVpbF9wY2llX3Nl bF9wYWdlIC0gcm91dGluZSB0byBhY2Nlc3MgcGFnZWQgcmVnaXN0ZXINCi0gKg0KLSAqIFJlZ2lz dGVycyB3aG9zZSBhZGRyZXNzIGdyZWF0ZXIgdGhhbiBQQUdFRF9BRERSX0JORFJZICgweGMwMCkg YXJlIHBhZ2VkLA0KLSAqIGZvciB0aGlzIHNjaGVtZSB0byB3b3JrIGV4dHJhY3RlZCBoaWdoZXIg NiBiaXRzIG9mIHRoZSBvZmZzZXQgd2lsbCBiZQ0KLSAqIHdyaXR0ZW4gdG8gcGdfc2VsIGZpZWxk IG9mIFBBQl9DVFJMIHJlZ2lzdGVyIGFuZCByZXN0IG9mIHRoZSBsb3dlciAxMA0KLSAqIGJpdHMg ZW5hYmxlZCB3aXRoIFBBR0VEX0FERFJfQk5EUlkgYXJlIHVzZWQgYXMgb2Zmc2V0IG9mIHRoZSBy ZWdpc3Rlci4NCi0gKi8NCi1zdGF0aWMgdm9pZCBtb2JpdmVpbF9wY2llX3NlbF9wYWdlKHN0cnVj dCBtb2JpdmVpbF9wY2llICpwY2llLCB1OCBwZ19pZHgpDQotew0KLQl1MzIgdmFsOw0KLQ0KLQl2 YWwgPSByZWFkbChwY2llLT5jc3JfYXhpX3NsYXZlX2Jhc2UgKyBQQUJfQ1RSTCk7DQotCXZhbCAm PSB+KFBBR0VfU0VMX01BU0sgPDwgUEFHRV9TRUxfU0hJRlQpOw0KLQl2YWwgfD0gKHBnX2lkeCAm IFBBR0VfU0VMX01BU0spIDw8IFBBR0VfU0VMX1NISUZUOw0KLQ0KLQl3cml0ZWwodmFsLCBwY2ll LT5jc3JfYXhpX3NsYXZlX2Jhc2UgKyBQQUJfQ1RSTCk7DQotfQ0KLQ0KLXN0YXRpYyB2b2lkICpt b2JpdmVpbF9wY2llX2NvbXBfYWRkcihzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgdTMyIG9m ZikNCi17DQotCWlmIChvZmYgPCBQQUdFRF9BRERSX0JORFJZKSB7DQotCQkvKiBGb3IgZGlyZWN0 bHkgYWNjZXNzZWQgcmVnaXN0ZXJzLCBjbGVhciB0aGUgcGdfc2VsIGZpZWxkICovDQotCQltb2Jp dmVpbF9wY2llX3NlbF9wYWdlKHBjaWUsIDApOw0KLQkJcmV0dXJuIHBjaWUtPmNzcl9heGlfc2xh dmVfYmFzZSArIG9mZjsNCi0JfQ0KLQ0KLQltb2JpdmVpbF9wY2llX3NlbF9wYWdlKHBjaWUsIE9G RlNFVF9UT19QQUdFX0lEWChvZmYpKTsNCi0JcmV0dXJuIHBjaWUtPmNzcl9heGlfc2xhdmVfYmFz ZSArIE9GRlNFVF9UT19QQUdFX0FERFIob2ZmKTsNCi19DQotDQotc3RhdGljIGludCBtb2JpdmVp bF9wY2llX3JlYWQodm9pZCBfX2lvbWVtICphZGRyLCBpbnQgc2l6ZSwgdTMyICp2YWwpDQotew0K LQlpZiAoKHVpbnRwdHJfdClhZGRyICYgKHNpemUgLSAxKSkgew0KLQkJKnZhbCA9IDA7DQotCQly ZXR1cm4gUENJQklPU19CQURfUkVHSVNURVJfTlVNQkVSOw0KLQl9DQotDQotCXN3aXRjaCAoc2l6 ZSkgew0KLQljYXNlIDQ6DQotCQkqdmFsID0gcmVhZGwoYWRkcik7DQotCQlicmVhazsNCi0JY2Fz ZSAyOg0KLQkJKnZhbCA9IHJlYWR3KGFkZHIpOw0KLQkJYnJlYWs7DQotCWNhc2UgMToNCi0JCSp2 YWwgPSByZWFkYihhZGRyKTsNCi0JCWJyZWFrOw0KLQlkZWZhdWx0Og0KLQkJKnZhbCA9IDA7DQot CQlyZXR1cm4gUENJQklPU19CQURfUkVHSVNURVJfTlVNQkVSOw0KLQl9DQotDQotCXJldHVybiBQ Q0lCSU9TX1NVQ0NFU1NGVUw7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgbW9iaXZlaWxfcGNpZV93cml0 ZSh2b2lkIF9faW9tZW0gKmFkZHIsIGludCBzaXplLCB1MzIgdmFsKQ0KLXsNCi0JaWYgKCh1aW50 cHRyX3QpYWRkciAmIChzaXplIC0gMSkpDQotCQlyZXR1cm4gUENJQklPU19CQURfUkVHSVNURVJf TlVNQkVSOw0KLQ0KLQlzd2l0Y2ggKHNpemUpIHsNCi0JY2FzZSA0Og0KLQkJd3JpdGVsKHZhbCwg YWRkcik7DQotCQlicmVhazsNCi0JY2FzZSAyOg0KLQkJd3JpdGV3KHZhbCwgYWRkcik7DQotCQli cmVhazsNCi0JY2FzZSAxOg0KLQkJd3JpdGViKHZhbCwgYWRkcik7DQotCQlicmVhazsNCi0JZGVm YXVsdDoNCi0JCXJldHVybiBQQ0lCSU9TX0JBRF9SRUdJU1RFUl9OVU1CRVI7DQotCX0NCi0NCi0J cmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsNCi19DQotDQotc3RhdGljIHUzMiBjc3JfcmVhZChz dHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgdTMyIG9mZiwgc2l6ZV90IHNpemUpDQotew0KLQl2 b2lkICphZGRyOw0KLQl1MzIgdmFsOw0KLQlpbnQgcmV0Ow0KLQ0KLQlhZGRyID0gbW9iaXZlaWxf cGNpZV9jb21wX2FkZHIocGNpZSwgb2ZmKTsNCi0NCi0JcmV0ID0gbW9iaXZlaWxfcGNpZV9yZWFk KGFkZHIsIHNpemUsICZ2YWwpOw0KLQlpZiAocmV0KQ0KLQkJZGV2X2VycigmcGNpZS0+cGRldi0+ ZGV2LCAicmVhZCBDU1IgYWRkcmVzcyBmYWlsZWRcbiIpOw0KLQ0KLQlyZXR1cm4gdmFsOw0KLX0N Ci0NCi1zdGF0aWMgdm9pZCBjc3Jfd3JpdGUoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIHUz MiB2YWwsIHUzMiBvZmYsIHNpemVfdCBzaXplKQ0KLXsNCi0Jdm9pZCAqYWRkcjsNCi0JaW50IHJl dDsNCi0NCi0JYWRkciA9IG1vYml2ZWlsX3BjaWVfY29tcF9hZGRyKHBjaWUsIG9mZik7DQotDQot CXJldCA9IG1vYml2ZWlsX3BjaWVfd3JpdGUoYWRkciwgc2l6ZSwgdmFsKTsNCi0JaWYgKHJldCkN Ci0JCWRldl9lcnIoJnBjaWUtPnBkZXYtPmRldiwgIndyaXRlIENTUiBhZGRyZXNzIGZhaWxlZFxu Iik7DQotfQ0KLQ0KLXN0YXRpYyB1MzIgY3NyX3JlYWRsKHN0cnVjdCBtb2JpdmVpbF9wY2llICpw Y2llLCB1MzIgb2ZmKQ0KLXsNCi0JcmV0dXJuIGNzcl9yZWFkKHBjaWUsIG9mZiwgMHg0KTsNCi19 DQotDQotc3RhdGljIHUzMiBjc3JfcmVhZHcoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIHUz MiBvZmYpDQotew0KLQlyZXR1cm4gY3NyX3JlYWQocGNpZSwgb2ZmLCAweDIpOw0KLX0NCi0NCi1z dGF0aWMgdTMyIGNzcl9yZWFkYihzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgdTMyIG9mZikN Ci17DQotCXJldHVybiBjc3JfcmVhZChwY2llLCBvZmYsIDB4MSk7DQotfQ0KLQ0KLXN0YXRpYyB2 b2lkIGNzcl93cml0ZWwoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIHUzMiB2YWwsIHUzMiBv ZmYpDQotew0KLQljc3Jfd3JpdGUocGNpZSwgdmFsLCBvZmYsIDB4NCk7DQotfQ0KLQ0KLXN0YXRp YyB2b2lkIGNzcl93cml0ZXcoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIHUzMiB2YWwsIHUz MiBvZmYpDQotew0KLQljc3Jfd3JpdGUocGNpZSwgdmFsLCBvZmYsIDB4Mik7DQotfQ0KLQ0KLXN0 YXRpYyB2b2lkIGNzcl93cml0ZWIoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIHUzMiB2YWws IHUzMiBvZmYpDQotew0KLQljc3Jfd3JpdGUocGNpZSwgdmFsLCBvZmYsIDB4MSk7DQotfQ0KLQ0K LXN0YXRpYyBib29sIG1vYml2ZWlsX3BjaWVfbGlua191cChzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAq cGNpZSkNCi17DQotCXJldHVybiAoY3NyX3JlYWRsKHBjaWUsIExUU1NNX1NUQVRVUykgJg0KLQkJ TFRTU01fU1RBVFVTX0wwX01BU0spID09IExUU1NNX1NUQVRVU19MMDsNCi19DQorI2luY2x1ZGUg InBjaWUtbW9iaXZlaWwuaCINCiANCiBzdGF0aWMgYm9vbCBtb2JpdmVpbF9wY2llX3ZhbGlkX2Rl dmljZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4pDQogew0KIAlzdHJ1 Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSA9IGJ1cy0+c3lzZGF0YTsNCiANCiAJLyogSWYgdGhlcmUg aXMgbm8gbGluaywgdGhlbiB0aGVyZSBpcyBubyBkZXZpY2UgKi8NCi0JaWYgKGJ1cy0+bnVtYmVy ID4gcGNpZS0+cm9vdF9idXNfbnIgJiYgIW1vYml2ZWlsX3BjaWVfbGlua191cChwY2llKSkNCisJ aWYgKGJ1cy0+bnVtYmVyID4gcGNpZS0+cnAucm9vdF9idXNfbnIgJiYgIW1vYml2ZWlsX3BjaWVf bGlua191cChwY2llKSkNCiAJCXJldHVybiBmYWxzZTsNCiANCiAJLyogT25seSBvbmUgZGV2aWNl IGRvd24gb24gZWFjaCByb290IHBvcnQgKi8NCi0JaWYgKChidXMtPm51bWJlciA9PSBwY2llLT5y b290X2J1c19ucikgJiYgKGRldmZuID4gMCkpDQorCWlmICgoYnVzLT5udW1iZXIgPT0gcGNpZS0+ cnAucm9vdF9idXNfbnIpICYmIChkZXZmbiA+IDApKQ0KIAkJcmV0dXJuIGZhbHNlOw0KIA0KIAkv Kg0KIAkgKiBEbyBub3QgcmVhZCBtb3JlIHRoYW4gb25lIGRldmljZSBvbiB0aGUgYnVzIGRpcmVj dGx5DQogCSAqIGF0dGFjaGVkIHRvIFJDDQogCSAqLw0KLQlpZiAoKGJ1cy0+cHJpbWFyeSA9PSBw Y2llLT5yb290X2J1c19ucikgJiYgKFBDSV9TTE9UKGRldmZuKSA+IDApKQ0KKwlpZiAoKGJ1cy0+ cHJpbWFyeSA9PSBwY2llLT5ycC5yb290X2J1c19ucikgJiYgKFBDSV9TTE9UKGRldmZuKSA+IDAp KQ0KIAkJcmV0dXJuIGZhbHNlOw0KIA0KIAlyZXR1cm4gdHJ1ZTsNCkBAIC0zMzUsNyArNjMsNyBA QCBzdGF0aWMgdm9pZCBfX2lvbWVtICptb2JpdmVpbF9wY2llX21hcF9idXMoc3RydWN0IHBjaV9i dXMgKmJ1cywNCiAJCXJldHVybiBOVUxMOw0KIA0KIAkvKiBSQyBjb25maWcgYWNjZXNzICovDQot CWlmIChidXMtPm51bWJlciA9PSBwY2llLT5yb290X2J1c19ucikNCisJaWYgKGJ1cy0+bnVtYmVy ID09IHBjaWUtPnJwLnJvb3RfYnVzX25yKQ0KIAkJcmV0dXJuIHBjaWUtPmNzcl9heGlfc2xhdmVf YmFzZSArIHdoZXJlOw0KIA0KIAkvKg0KQEAgLTM1MCw3ICs3OCw3IEBAIHN0YXRpYyB2b2lkIF9f aW9tZW0gKm1vYml2ZWlsX3BjaWVfbWFwX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLA0KIA0KIAlj c3Jfd3JpdGVsKHBjaWUsIHZhbHVlLCBQQUJfQVhJX0FNQVBfUEVYX1dJTl9MKFdJTl9OVU1fMCkp Ow0KIA0KLQlyZXR1cm4gcGNpZS0+Y29uZmlnX2F4aV9zbGF2ZV9iYXNlICsgd2hlcmU7DQorCXJl dHVybiBwY2llLT5ycC5jb25maWdfYXhpX3NsYXZlX2Jhc2UgKyB3aGVyZTsNCiB9DQogDQogc3Rh dGljIHN0cnVjdCBwY2lfb3BzIG1vYml2ZWlsX3BjaWVfb3BzID0gew0KQEAgLTM2NCw3ICs5Miw3 IEBAIHN0YXRpYyB2b2lkIG1vYml2ZWlsX3BjaWVfaXNyKHN0cnVjdCBpcnFfZGVzYyAqZGVzYykN CiAJc3RydWN0IGlycV9jaGlwICpjaGlwID0gaXJxX2Rlc2NfZ2V0X2NoaXAoZGVzYyk7DQogCXN0 cnVjdCBtb2JpdmVpbF9wY2llICpwY2llID0gaXJxX2Rlc2NfZ2V0X2hhbmRsZXJfZGF0YShkZXNj KTsNCiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBjaWUtPnBkZXYtPmRldjsNCi0Jc3RydWN0IG1v Yml2ZWlsX21zaSAqbXNpID0gJnBjaWUtPm1zaTsNCisJc3RydWN0IG1vYml2ZWlsX21zaSAqbXNp ID0gJnBjaWUtPnJwLm1zaTsNCiAJdTMyIG1zaV9kYXRhLCBtc2lfYWRkcl9sbywgbXNpX2FkZHJf aGk7DQogCXUzMiBpbnRyX3N0YXR1cywgbXNpX3N0YXR1czsNCiAJdW5zaWduZWQgbG9uZyBzaGlm dGVkX3N0YXR1czsNCkBAIC0zODksNyArMTE3LDcgQEAgc3RhdGljIHZvaWQgbW9iaXZlaWxfcGNp ZV9pc3Ioc3RydWN0IGlycV9kZXNjICpkZXNjKQ0KIAkJc2hpZnRlZF9zdGF0dXMgPj49IFBBQl9J TlRYX1NUQVJUOw0KIAkJZG8gew0KIAkJCWZvcl9lYWNoX3NldF9iaXQoYml0LCAmc2hpZnRlZF9z dGF0dXMsIFBDSV9OVU1fSU5UWCkgew0KLQkJCQl2aXJxID0gaXJxX2ZpbmRfbWFwcGluZyhwY2ll LT5pbnR4X2RvbWFpbiwNCisJCQkJdmlycSA9IGlycV9maW5kX21hcHBpbmcocGNpZS0+cnAuaW50 eF9kb21haW4sDQogCQkJCQkJCWJpdCArIDEpOw0KIAkJCQlpZiAodmlycSkNCiAJCQkJCWdlbmVy aWNfaGFuZGxlX2lycSh2aXJxKTsNCkBAIC00NTIsMTAgKzE4MCwxMCBAQCBzdGF0aWMgaW50IG1v Yml2ZWlsX3BjaWVfcGFyc2VfZHQoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUpDQogCS8qIG1h cCBjb25maWcgcmVzb3VyY2UgKi8NCiAJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFt ZShwZGV2LCBJT1JFU09VUkNFX01FTSwNCiAJCQkJCSAgICJjb25maWdfYXhpX3NsYXZlIik7DQot CXBjaWUtPmNvbmZpZ19heGlfc2xhdmVfYmFzZSA9IGRldm1fcGNpX3JlbWFwX2NmZ19yZXNvdXJj ZShkZXYsIHJlcyk7DQotCWlmIChJU19FUlIocGNpZS0+Y29uZmlnX2F4aV9zbGF2ZV9iYXNlKSkN Ci0JCXJldHVybiBQVFJfRVJSKHBjaWUtPmNvbmZpZ19heGlfc2xhdmVfYmFzZSk7DQotCXBjaWUt Pm9iX2lvX3JlcyA9IHJlczsNCisJcGNpZS0+cnAuY29uZmlnX2F4aV9zbGF2ZV9iYXNlID0gZGV2 bV9wY2lfcmVtYXBfY2ZnX3Jlc291cmNlKGRldiwgcmVzKTsNCisJaWYgKElTX0VSUihwY2llLT5y cC5jb25maWdfYXhpX3NsYXZlX2Jhc2UpKQ0KKwkJcmV0dXJuIFBUUl9FUlIocGNpZS0+cnAuY29u ZmlnX2F4aV9zbGF2ZV9iYXNlKTsNCisJcGNpZS0+cnAub2JfaW9fcmVzID0gcmVzOw0KIA0KIAkv KiBtYXAgY3NyIHJlc291cmNlICovDQogCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZV9ieW5h bWUocGRldiwgSU9SRVNPVVJDRV9NRU0sDQpAQCAtNDY1LDEyICsxOTMsNiBAQCBzdGF0aWMgaW50 IG1vYml2ZWlsX3BjaWVfcGFyc2VfZHQoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUpDQogCQly ZXR1cm4gUFRSX0VSUihwY2llLT5jc3JfYXhpX3NsYXZlX2Jhc2UpOw0KIAlwY2llLT5wY2llX3Jl Z19iYXNlID0gcmVzLT5zdGFydDsNCiANCi0JLyogbWFwIE1TSSBjb25maWcgcmVzb3VyY2UgKi8N Ci0JcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01F TSwgImFwYl9jc3IiKTsNCi0JcGNpZS0+YXBiX2Nzcl9iYXNlID0gZGV2bV9wY2lfcmVtYXBfY2Zn X3Jlc291cmNlKGRldiwgcmVzKTsNCi0JaWYgKElTX0VSUihwY2llLT5hcGJfY3NyX2Jhc2UpKQ0K LQkJcmV0dXJuIFBUUl9FUlIocGNpZS0+YXBiX2Nzcl9iYXNlKTsNCi0NCiAJLyogcmVhZCB0aGUg bnVtYmVyIG9mIHdpbmRvd3MgcmVxdWVzdGVkICovDQogCWlmIChvZl9wcm9wZXJ0eV9yZWFkX3Uz Mihub2RlLCAiYXBpby13aW5zIiwgJnBjaWUtPmFwaW9fd2lucykpDQogCQlwY2llLT5hcGlvX3dp bnMgPSBNQVhfUElPX1dJTkRPV1M7DQpAQCAtNDc4LDEzNyArMjAwLDE1IEBAIHN0YXRpYyBpbnQg bW9iaXZlaWxfcGNpZV9wYXJzZV9kdChzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSkNCiAJaWYg KG9mX3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJwcGlvLXdpbnMiLCAmcGNpZS0+cHBpb193aW5z KSkNCiAJCXBjaWUtPnBwaW9fd2lucyA9IE1BWF9QSU9fV0lORE9XUzsNCiANCi0JcGNpZS0+aXJx ID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsNCi0JaWYgKHBjaWUtPmlycSA8PSAwKSB7DQot CQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBtYXAgSVJROiAlZFxuIiwgcGNpZS0+aXJxKTsNCi0J CXJldHVybiAtRU5PREVWOw0KLQl9DQotDQogCXJldHVybiAwOw0KIH0NCiANCi1zdGF0aWMgdm9p ZCBwcm9ncmFtX2liX3dpbmRvd3Moc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIGludCB3aW5f bnVtLA0KLQkJCSAgICAgICB1NjQgY3B1X2FkZHIsIHU2NCBwY2lfYWRkciwgdTMyIHR5cGUsIHU2 NCBzaXplKQ0KLXsNCi0JdTMyIHZhbHVlOw0KLQl1NjQgc2l6ZTY0ID0gfihzaXplIC0gMSk7DQot DQotCWlmICh3aW5fbnVtID49IHBjaWUtPnBwaW9fd2lucykgew0KLQkJZGV2X2VycigmcGNpZS0+ cGRldi0+ZGV2LA0KLQkJCSJFUlJPUjogbWF4IGluYm91bmQgd2luZG93cyByZWFjaGVkICFcbiIp Ow0KLQkJcmV0dXJuOw0KLQl9DQotDQotCXZhbHVlID0gY3NyX3JlYWRsKHBjaWUsIFBBQl9QRVhf QU1BUF9DVFJMKHdpbl9udW0pKTsNCi0JdmFsdWUgJj0gfihBTUFQX0NUUkxfVFlQRV9NQVNLIDw8 IEFNQVBfQ1RSTF9UWVBFX1NISUZUIHwNCi0JCSBXSU5fU0laRV9NQVNLIDw8IFdJTl9TSVpFX1NI SUZUKTsNCi0JdmFsdWUgfD0gKHR5cGUgPDwgQU1BUF9DVFJMX1RZUEVfU0hJRlQpIHwgKDEgPDwg QU1BUF9DVFJMX0VOX1NISUZUKSB8DQotCQkgKGxvd2VyXzMyX2JpdHMoc2l6ZTY0KSAmIFdJTl9T SVpFX01BU0sgPDwgV0lOX1NJWkVfU0hJRlQpOw0KLQljc3Jfd3JpdGVsKHBjaWUsIHZhbHVlLCBQ QUJfUEVYX0FNQVBfQ1RSTCh3aW5fbnVtKSk7DQotDQotCWNzcl93cml0ZWwocGNpZSwgdXBwZXJf MzJfYml0cyhzaXplNjQpLA0KLQkJICAgUEFCX0VYVF9QRVhfQU1BUF9TSVpFTih3aW5fbnVtKSk7 DQotDQotCWNzcl93cml0ZWwocGNpZSwgbG93ZXJfMzJfYml0cyhjcHVfYWRkciksDQotCQkgICBQ QUJfUEVYX0FNQVBfQVhJX1dJTih3aW5fbnVtKSk7DQotCWNzcl93cml0ZWwocGNpZSwgdXBwZXJf MzJfYml0cyhjcHVfYWRkciksDQotCQkgICBQQUJfRVhUX1BFWF9BTUFQX0FYSV9XSU4od2luX251 bSkpOw0KLQ0KLQljc3Jfd3JpdGVsKHBjaWUsIGxvd2VyXzMyX2JpdHMocGNpX2FkZHIpLA0KLQkJ ICAgUEFCX1BFWF9BTUFQX1BFWF9XSU5fTCh3aW5fbnVtKSk7DQotCWNzcl93cml0ZWwocGNpZSwg dXBwZXJfMzJfYml0cyhwY2lfYWRkciksDQotCQkgICBQQUJfUEVYX0FNQVBfUEVYX1dJTl9IKHdp bl9udW0pKTsNCi0NCi0JcGNpZS0+aWJfd2luc19jb25maWd1cmVkKys7DQotfQ0KLQ0KLS8qDQot ICogcm91dGluZSB0byBwcm9ncmFtIHRoZSBvdXRib3VuZCB3aW5kb3dzDQotICovDQotc3RhdGlj IHZvaWQgcHJvZ3JhbV9vYl93aW5kb3dzKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llLCBpbnQg d2luX251bSwNCi0JCQkgICAgICAgdTY0IGNwdV9hZGRyLCB1NjQgcGNpX2FkZHIsIHUzMiB0eXBl LCB1NjQgc2l6ZSkNCi17DQotDQotCXUzMiB2YWx1ZTsNCi0JdTY0IHNpemU2NCA9IH4oc2l6ZSAt IDEpOw0KLQ0KLQlpZiAod2luX251bSA+PSBwY2llLT5hcGlvX3dpbnMpIHsNCi0JCWRldl9lcnIo JnBjaWUtPnBkZXYtPmRldiwNCi0JCQkiRVJST1I6IG1heCBvdXRib3VuZCB3aW5kb3dzIHJlYWNo ZWQgIVxuIik7DQotCQlyZXR1cm47DQotCX0NCi0NCi0JLyoNCi0JICogcHJvZ3JhbSBFbmFibGUg Qml0IHRvIDEsIFR5cGUgQml0IHRvICgwMCkgYmFzZSAyLCBBWEkgV2luZG93IFNpemUgQml0DQot CSAqIHRvIDQgS0IgaW4gUEFCX0FYSV9BTUFQX0NUUkwgcmVnaXN0ZXINCi0JICovDQotCXZhbHVl ID0gY3NyX3JlYWRsKHBjaWUsIFBBQl9BWElfQU1BUF9DVFJMKHdpbl9udW0pKTsNCi0JdmFsdWUg Jj0gfihXSU5fVFlQRV9NQVNLIDw8IFdJTl9UWVBFX1NISUZUIHwNCi0JCSBXSU5fU0laRV9NQVNL IDw8IFdJTl9TSVpFX1NISUZUKTsNCi0JdmFsdWUgfD0gMSA8PCBXSU5fRU5BQkxFX1NISUZUIHwg dHlwZSA8PCBXSU5fVFlQRV9TSElGVCB8DQotCQkgKGxvd2VyXzMyX2JpdHMoc2l6ZTY0KSAmIFdJ Tl9TSVpFX01BU0sgPDwgV0lOX1NJWkVfU0hJRlQpOw0KLQljc3Jfd3JpdGVsKHBjaWUsIHZhbHVl LCBQQUJfQVhJX0FNQVBfQ1RSTCh3aW5fbnVtKSk7DQotDQotCWNzcl93cml0ZWwocGNpZSwgdXBw ZXJfMzJfYml0cyhzaXplNjQpLCBQQUJfRVhUX0FYSV9BTUFQX1NJWkUod2luX251bSkpOw0KLQ0K LQkvKg0KLQkgKiBwcm9ncmFtIEFYSSB3aW5kb3cgYmFzZSB3aXRoIGFwcHJvcHJpYXRlIHZhbHVl IGluDQotCSAqIFBBQl9BWElfQU1BUF9BWElfV0lOMCByZWdpc3Rlcg0KLQkgKi8NCi0JY3NyX3dy aXRlbChwY2llLCBsb3dlcl8zMl9iaXRzKGNwdV9hZGRyKSAmICh+QVhJX1dJTkRPV19BTElHTl9N QVNLKSwNCi0JCSAgIFBBQl9BWElfQU1BUF9BWElfV0lOKHdpbl9udW0pKTsNCi0JY3NyX3dyaXRl bChwY2llLCB1cHBlcl8zMl9iaXRzKGNwdV9hZGRyKSwNCi0JCSAgIFBBQl9FWFRfQVhJX0FNQVBf QVhJX1dJTih3aW5fbnVtKSk7DQotDQotCWNzcl93cml0ZWwocGNpZSwgbG93ZXJfMzJfYml0cyhw Y2lfYWRkciksDQotCQkgICBQQUJfQVhJX0FNQVBfUEVYX1dJTl9MKHdpbl9udW0pKTsNCi0JY3Ny X3dyaXRlbChwY2llLCB1cHBlcl8zMl9iaXRzKHBjaV9hZGRyKSwNCi0JCSAgIFBBQl9BWElfQU1B UF9QRVhfV0lOX0god2luX251bSkpOw0KLQ0KLQlwY2llLT5vYl93aW5zX2NvbmZpZ3VyZWQrKzsN Ci19DQotDQotc3RhdGljIGludCBtb2JpdmVpbF9icmluZ3VwX2xpbmsoc3RydWN0IG1vYml2ZWls X3BjaWUgKnBjaWUpDQotew0KLQlpbnQgcmV0cmllczsNCi0NCi0JLyogY2hlY2sgaWYgdGhlIGxp bmsgaXMgdXAgb3Igbm90ICovDQotCWZvciAocmV0cmllcyA9IDA7IHJldHJpZXMgPCBMSU5LX1dB SVRfTUFYX1JFVFJJRVM7IHJldHJpZXMrKykgew0KLQkJaWYgKG1vYml2ZWlsX3BjaWVfbGlua191 cChwY2llKSkNCi0JCQlyZXR1cm4gMDsNCi0NCi0JCXVzbGVlcF9yYW5nZShMSU5LX1dBSVRfTUlO LCBMSU5LX1dBSVRfTUFYKTsNCi0JfQ0KLQ0KLQlkZXZfaW5mbygmcGNpZS0+cGRldi0+ZGV2LCAi bGluayBuZXZlciBjYW1lIHVwXG4iKTsNCi0NCi0JcmV0dXJuIC1FVElNRURPVVQ7DQotfQ0KLQ0K LXN0YXRpYyB2b2lkIG1vYml2ZWlsX3BjaWVfZGlzYWJsZV9pYl93aW4oc3RydWN0IG1vYml2ZWls X3BjaWUgKnBjaWUsIGludCBpZHgpDQotew0KLQl1MzIgdmFsOw0KLQ0KLQl2YWwgPSBjc3JfcmVh ZGwocGNpZSwgUEFCX1BFWF9BTUFQX0NUUkwoaWR4KSk7DQotCXZhbCAmPSB+KDEgPDwgQU1BUF9D VFJMX0VOX1NISUZUKTsNCi0JY3NyX3dyaXRlbChwY2llLCB2YWwsIFBBQl9QRVhfQU1BUF9DVFJM KGlkeCkpOw0KLX0NCi0NCi1zdGF0aWMgdm9pZCBtb2JpdmVpbF9wY2llX2Rpc2FibGVfb2Jfd2lu KHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llLCBpbnQgaWR4KQ0KLXsNCi0JdTMyIHZhbDsNCi0N Ci0JdmFsID0gY3NyX3JlYWRsKHBjaWUsIFBBQl9BWElfQU1BUF9DVFJMKGlkeCkpOw0KLQl2YWwg Jj0gfigxIDw8IFdJTl9FTkFCTEVfU0hJRlQpOw0KLQljc3Jfd3JpdGVsKHBjaWUsIHZhbCwgUEFC X0FYSV9BTUFQX0NUUkwoaWR4KSk7DQotfQ0KLQ0KIHN0YXRpYyB2b2lkIG1vYml2ZWlsX3BjaWVf ZW5hYmxlX21zaShzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSkNCiB7DQogCXBoeXNfYWRkcl90 IG1zZ19hZGRyID0gcGNpZS0+cGNpZV9yZWdfYmFzZTsNCi0Jc3RydWN0IG1vYml2ZWlsX21zaSAq bXNpID0gJnBjaWUtPm1zaTsNCisJc3RydWN0IG1vYml2ZWlsX21zaSAqbXNpID0gJnBjaWUtPnJw Lm1zaTsNCiANCi0JcGNpZS0+bXNpLm51bV9vZl92ZWN0b3JzID0gUENJX05VTV9NU0k7DQorCW1z aS0+bnVtX29mX3ZlY3RvcnMgPSBQQ0lfTlVNX01TSTsNCiAJbXNpLT5tc2lfcGFnZXNfcGh5cyA9 IChwaHlzX2FkZHJfdCltc2dfYWRkcjsNCiANCiAJd3JpdGVsX3JlbGF4ZWQobG93ZXJfMzJfYml0 cyhtc2dfYWRkciksDQpAQCAtNjUzLDkgKzI1Myw2IEBAIHN0YXRpYyBpbnQgbW9iaXZlaWxfaG9z dF9pbml0KHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llKQ0KIAlwYWJfY3RybCB8PSAoMSA8PCBB TUJBX1BJT19FTkFCTEVfU0hJRlQpIHwgKDEgPDwgUEVYX1BJT19FTkFCTEVfU0hJRlQpOw0KIAlj c3Jfd3JpdGVsKHBjaWUsIHBhYl9jdHJsLCBQQUJfQ1RSTCk7DQogDQotCWNzcl93cml0ZWwocGNp ZSwgKFBBQl9JTlRQX0lOVFhfTUFTSyB8IFBBQl9JTlRQX01TSV9NQVNLKSwNCi0JCSAgIFBBQl9J TlRQX0FNQkFfTUlTQ19FTkIpOw0KLQ0KIAkvKg0KIAkgKiBwcm9ncmFtIFBJTyBFbmFibGUgQml0 IHRvIDEgYW5kIENvbmZpZyBXaW5kb3cgRW5hYmxlIEJpdCB0byAxIGluDQogCSAqIFBBQl9BWElf UElPX0NUUkwgUmVnaXN0ZXINCkBAIC02NzcsMjAgKzI3NCwyNCBAQCBzdGF0aWMgaW50IG1vYml2 ZWlsX2hvc3RfaW5pdChzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSkNCiAJICovDQogDQogCS8q IGNvbmZpZyBvdXRib3VuZCB0cmFuc2xhdGlvbiB3aW5kb3cgKi8NCi0JcHJvZ3JhbV9vYl93aW5k b3dzKHBjaWUsIFdJTl9OVU1fMCwgcGNpZS0+b2JfaW9fcmVzLT5zdGFydCwgMCwNCi0JCQkgICBD RkdfV0lORE9XX1RZUEUsIHJlc291cmNlX3NpemUocGNpZS0+b2JfaW9fcmVzKSk7DQorCXByb2dy YW1fb2Jfd2luZG93cyhwY2llLCBXSU5fTlVNXzAsIHBjaWUtPnJwLm9iX2lvX3Jlcy0+c3RhcnQs IDAsDQorCQkJICAgQ0ZHX1dJTkRPV19UWVBFLCByZXNvdXJjZV9zaXplKHBjaWUtPnJwLm9iX2lv X3JlcykpOw0KIA0KIAkvKiBtZW1vcnkgaW5ib3VuZCB0cmFuc2xhdGlvbiB3aW5kb3cgKi8NCiAJ cHJvZ3JhbV9pYl93aW5kb3dzKHBjaWUsIFdJTl9OVU1fMCwgMCwgMCwgTUVNX1dJTkRPV19UWVBF LCBJQl9XSU5fU0laRSk7DQogDQogCS8qIEdldCB0aGUgSS9PIGFuZCBtZW1vcnkgcmFuZ2VzIGZy b20gRFQgKi8NCiAJcmVzb3VyY2VfbGlzdF9mb3JfZWFjaF9lbnRyeSh3aW4sICZwY2llLT5yZXNv dXJjZXMpIHsNCi0JCWlmIChyZXNvdXJjZV90eXBlKHdpbi0+cmVzKSA9PSBJT1JFU09VUkNFX01F TSkNCisJCWlmIChyZXNvdXJjZV90eXBlKHdpbi0+cmVzKSA9PSBJT1JFU09VUkNFX01FTSkgew0K IAkJCXR5cGUgPSBNRU1fV0lORE9XX1RZUEU7DQotCQllbHNlIGlmIChyZXNvdXJjZV90eXBlKHdp bi0+cmVzKSA9PSBJT1JFU09VUkNFX0lPKQ0KKwkJfSBlbHNlIGlmIChyZXNvdXJjZV90eXBlKHdp bi0+cmVzKSA9PSBJT1JFU09VUkNFX0lPKSB7DQogCQkJdHlwZSA9IElPX1dJTkRPV19UWVBFOw0K LQkJZWxzZQ0KKwkJfSBlbHNlIGlmIChyZXNvdXJjZV90eXBlKHdpbi0+cmVzKSA9PSBJT1JFU09V UkNFX0JVUykgew0KKwkJCXBjaWUtPnJwLnJvb3RfYnVzX25yID0gd2luLT5yZXMtPnN0YXJ0Ow0K KwkJCWNvbnRpbnVlOw0KKwkJfSBlbHNlIHsNCiAJCQljb250aW51ZTsNCisJCX0NCiANCiAJCS8q IGNvbmZpZ3VyZSBvdXRib3VuZCB0cmFuc2xhdGlvbiB3aW5kb3cgKi8NCiAJCXByb2dyYW1fb2Jf d2luZG93cyhwY2llLCBwY2llLT5vYl93aW5zX2NvbmZpZ3VyZWQsDQpAQCAtNzA1LDkgKzMwNiw2 IEBAIHN0YXRpYyBpbnQgbW9iaXZlaWxfaG9zdF9pbml0KHN0cnVjdCBtb2JpdmVpbF9wY2llICpw Y2llKQ0KIAl2YWx1ZSB8PSAoUENJX0NMQVNTX0JSSURHRV9QQ0kgPDwgMTYpOw0KIAljc3Jfd3Jp dGVsKHBjaWUsIHZhbHVlLCBQQUJfSU5UUF9BWElfUElPX0NMQVNTKTsNCiANCi0JLyogc2V0dXAg TVNJIGhhcmR3YXJlIHJlZ2lzdGVycyAqLw0KLQltb2JpdmVpbF9wY2llX2VuYWJsZV9tc2kocGNp ZSk7DQotDQogCXJldHVybiAwOw0KIH0NCiANCkBAIC03MjAsMTEgKzMxOCwxMSBAQCBzdGF0aWMg dm9pZCBtb2JpdmVpbF9tYXNrX2ludHhfaXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkNCiANCiAJ cGNpZSA9IGlycV9kZXNjX2dldF9jaGlwX2RhdGEoZGVzYyk7DQogCW1hc2sgPSAxIDw8ICgoZGF0 YS0+aHdpcnEgKyBQQUJfSU5UWF9TVEFSVCkgLSAxKTsNCi0JcmF3X3NwaW5fbG9ja19pcnFzYXZl KCZwY2llLT5pbnR4X21hc2tfbG9jaywgZmxhZ3MpOw0KKwlyYXdfc3Bpbl9sb2NrX2lycXNhdmUo JnBjaWUtPnJwLmludHhfbWFza19sb2NrLCBmbGFncyk7DQogCXNoaWZ0ZWRfdmFsID0gY3NyX3Jl YWRsKHBjaWUsIFBBQl9JTlRQX0FNQkFfTUlTQ19FTkIpOw0KIAlzaGlmdGVkX3ZhbCAmPSB+bWFz azsNCiAJY3NyX3dyaXRlbChwY2llLCBzaGlmdGVkX3ZhbCwgUEFCX0lOVFBfQU1CQV9NSVNDX0VO Qik7DQotCXJhd19zcGluX3VubG9ja19pcnFyZXN0b3JlKCZwY2llLT5pbnR4X21hc2tfbG9jaywg ZmxhZ3MpOw0KKwlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNpZS0+cnAuaW50eF9tYXNr X2xvY2ssIGZsYWdzKTsNCiB9DQogDQogc3RhdGljIHZvaWQgbW9iaXZlaWxfdW5tYXNrX2ludHhf aXJxKHN0cnVjdCBpcnFfZGF0YSAqZGF0YSkNCkBAIC03MzYsMTEgKzMzNCwxMSBAQCBzdGF0aWMg dm9pZCBtb2JpdmVpbF91bm1hc2tfaW50eF9pcnEoc3RydWN0IGlycV9kYXRhICpkYXRhKQ0KIA0K IAlwY2llID0gaXJxX2Rlc2NfZ2V0X2NoaXBfZGF0YShkZXNjKTsNCiAJbWFzayA9IDEgPDwgKChk YXRhLT5od2lycSArIFBBQl9JTlRYX1NUQVJUKSAtIDEpOw0KLQlyYXdfc3Bpbl9sb2NrX2lycXNh dmUoJnBjaWUtPmludHhfbWFza19sb2NrLCBmbGFncyk7DQorCXJhd19zcGluX2xvY2tfaXJxc2F2 ZSgmcGNpZS0+cnAuaW50eF9tYXNrX2xvY2ssIGZsYWdzKTsNCiAJc2hpZnRlZF92YWwgPSBjc3Jf cmVhZGwocGNpZSwgUEFCX0lOVFBfQU1CQV9NSVNDX0VOQik7DQogCXNoaWZ0ZWRfdmFsIHw9IG1h c2s7DQogCWNzcl93cml0ZWwocGNpZSwgc2hpZnRlZF92YWwsIFBBQl9JTlRQX0FNQkFfTUlTQ19F TkIpOw0KLQlyYXdfc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmcGNpZS0+aW50eF9tYXNrX2xvY2ss IGZsYWdzKTsNCisJcmF3X3NwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnBjaWUtPnJwLmludHhfbWFz a19sb2NrLCBmbGFncyk7DQogfQ0KIA0KIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaW50eF9pcnFf Y2hpcCA9IHsNCkBAIC04MDgsNyArNDA2LDcgQEAgc3RhdGljIGludCBtb2JpdmVpbF9pcnFfbXNp X2RvbWFpbl9hbGxvYyhzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLA0KIAkJCQkJIHVuc2lnbmVk IGludCBucl9pcnFzLCB2b2lkICphcmdzKQ0KIHsNCiAJc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBj aWUgPSBkb21haW4tPmhvc3RfZGF0YTsNCi0Jc3RydWN0IG1vYml2ZWlsX21zaSAqbXNpID0gJnBj aWUtPm1zaTsNCisJc3RydWN0IG1vYml2ZWlsX21zaSAqbXNpID0gJnBjaWUtPnJwLm1zaTsNCiAJ dW5zaWduZWQgbG9uZyBiaXQ7DQogDQogCVdBUk5fT04obnJfaXJxcyAhPSAxKTsNCkBAIC04MzUs NyArNDMzLDcgQEAgc3RhdGljIHZvaWQgbW9iaXZlaWxfaXJxX21zaV9kb21haW5fZnJlZShzdHJ1 Y3QgaXJxX2RvbWFpbiAqZG9tYWluLA0KIHsNCiAJc3RydWN0IGlycV9kYXRhICpkID0gaXJxX2Rv bWFpbl9nZXRfaXJxX2RhdGEoZG9tYWluLCB2aXJxKTsNCiAJc3RydWN0IG1vYml2ZWlsX3BjaWUg KnBjaWUgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsNCi0Jc3RydWN0IG1vYml2ZWls X21zaSAqbXNpID0gJnBjaWUtPm1zaTsNCisJc3RydWN0IG1vYml2ZWlsX21zaSAqbXNpID0gJnBj aWUtPnJwLm1zaTsNCiANCiAJbXV0ZXhfbG9jaygmbXNpLT5sb2NrKTsNCiANCkBAIC04NTYsOSAr NDU0LDkgQEAgc3RhdGljIGludCBtb2JpdmVpbF9hbGxvY2F0ZV9tc2lfZG9tYWlucyhzdHJ1Y3Qg bW9iaXZlaWxfcGNpZSAqcGNpZSkNCiB7DQogCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwY2llLT5w ZGV2LT5kZXY7DQogCXN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGUgPSBvZl9ub2RlX3RvX2Z3 bm9kZShkZXYtPm9mX25vZGUpOw0KLQlzdHJ1Y3QgbW9iaXZlaWxfbXNpICptc2kgPSAmcGNpZS0+ bXNpOw0KKwlzdHJ1Y3QgbW9iaXZlaWxfbXNpICptc2kgPSAmcGNpZS0+cnAubXNpOw0KIA0KLQlt dXRleF9pbml0KCZwY2llLT5tc2kubG9jayk7DQorCW11dGV4X2luaXQoJm1zaS0+bG9jayk7DQog CW1zaS0+ZGV2X2RvbWFpbiA9IGlycV9kb21haW5fYWRkX2xpbmVhcihOVUxMLCBtc2ktPm51bV9v Zl92ZWN0b3JzLA0KIAkJCQkJCSZtc2lfZG9tYWluX29wcywgcGNpZSk7DQogCWlmICghbXNpLT5k ZXZfZG9tYWluKSB7DQpAQCAtODg1LDE1ICs0ODMsMTUgQEAgc3RhdGljIGludCBtb2JpdmVpbF9w Y2llX2luaXRfaXJxX2RvbWFpbihzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSkNCiAJaW50IHJl dDsNCiANCiAJLyogc2V0dXAgSU5UeCAqLw0KLQlwY2llLT5pbnR4X2RvbWFpbiA9IGlycV9kb21h aW5fYWRkX2xpbmVhcihub2RlLCBQQ0lfTlVNX0lOVFgsDQotCQkJCQkJICAmaW50eF9kb21haW5f b3BzLCBwY2llKTsNCisJcGNpZS0+cnAuaW50eF9kb21haW4gPSBpcnFfZG9tYWluX2FkZF9saW5l YXIobm9kZSwgUENJX05VTV9JTlRYLA0KKwkJCQkJCSAgICAgJmludHhfZG9tYWluX29wcywgcGNp ZSk7DQogDQotCWlmICghcGNpZS0+aW50eF9kb21haW4pIHsNCisJaWYgKCFwY2llLT5ycC5pbnR4 X2RvbWFpbikgew0KIAkJZGV2X2VycihkZXYsICJGYWlsZWQgdG8gZ2V0IGEgSU5UeCBJUlEgZG9t YWluXG4iKTsNCiAJCXJldHVybiAtRU5PTUVNOw0KIAl9DQogDQotCXJhd19zcGluX2xvY2tfaW5p dCgmcGNpZS0+aW50eF9tYXNrX2xvY2spOw0KKwlyYXdfc3Bpbl9sb2NrX2luaXQoJnBjaWUtPnJw LmludHhfbWFza19sb2NrKTsNCiANCiAJLyogc2V0dXAgTVNJICovDQogCXJldCA9IG1vYml2ZWls X2FsbG9jYXRlX21zaV9kb21haW5zKHBjaWUpOw0KQEAgLTkwMywyNCArNTAxLDU4IEBAIHN0YXRp YyBpbnQgbW9iaXZlaWxfcGNpZV9pbml0X2lycV9kb21haW4oc3RydWN0IG1vYml2ZWlsX3BjaWUg KnBjaWUpDQogCXJldHVybiAwOw0KIH0NCiANCi1zdGF0aWMgaW50IG1vYml2ZWlsX3BjaWVfcHJv YmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCitzdGF0aWMgaW50IG1vYml2ZWlsX3Bj aWVfaW50ZXJydXB0X2luaXQoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUpDQorew0KKwlzdHJ1 Y3QgZGV2aWNlICpkZXYgPSAmcGNpZS0+cGRldi0+ZGV2Ow0KKwlzdHJ1Y3QgcmVzb3VyY2UgKnJl czsNCisJaW50IHJldDsNCisNCisJaWYgKHBjaWUtPnJwLm9wcy0+aW50ZXJydXB0X2luaXQpDQor CQlyZXR1cm4gcGNpZS0+cnAub3BzLT5pbnRlcnJ1cHRfaW5pdChwY2llKTsNCisNCisJLyogbWFw IE1TSSBjb25maWcgcmVzb3VyY2UgKi8NCisJcmVzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5 bmFtZShwY2llLT5wZGV2LCBJT1JFU09VUkNFX01FTSwNCisJCQkJCSAgICJhcGJfY3NyIik7DQor CXBjaWUtPmFwYl9jc3JfYmFzZSA9IGRldm1fcGNpX3JlbWFwX2NmZ19yZXNvdXJjZShkZXYsIHJl cyk7DQorCWlmIChJU19FUlIocGNpZS0+YXBiX2Nzcl9iYXNlKSkNCisJCXJldHVybiBQVFJfRVJS KHBjaWUtPmFwYl9jc3JfYmFzZSk7DQorDQorCS8qIHNldHVwIE1TSSBoYXJkd2FyZSByZWdpc3Rl cnMgKi8NCisJbW9iaXZlaWxfcGNpZV9lbmFibGVfbXNpKHBjaWUpOw0KKw0KKwlwY2llLT5ycC5p cnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBjaWUtPnBkZXYsIDApOw0KKwlpZiAocGNpZS0+cnAuaXJx IDw9IDApIHsNCisJCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIG1hcCBJUlE6ICVkXG4iLCBwY2ll LT5ycC5pcnEpOw0KKwkJcmV0dXJuIC1FTk9ERVY7DQorCX0NCisNCisJLyogaW5pdGlhbGl6ZSB0 aGUgSVJRIGRvbWFpbnMgKi8NCisJcmV0ID0gbW9iaXZlaWxfcGNpZV9pbml0X2lycV9kb21haW4o cGNpZSk7DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoZGV2LCAiRmFpbGVkIGNyZWF0aW5nIElS USBEb21haW5cbiIpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwlpcnFfc2V0X2NoYWluZWRf aGFuZGxlcl9hbmRfZGF0YShwY2llLT5ycC5pcnEsDQorCQkJCQkgbW9iaXZlaWxfcGNpZV9pc3Is IHBjaWUpOw0KKw0KKwkvKiBFbmFibGUgaW50ZXJydXB0cyAqLw0KKwljc3Jfd3JpdGVsKHBjaWUs IChQQUJfSU5UUF9JTlRYX01BU0sgfCBQQUJfSU5UUF9NU0lfTUFTSyksDQorCQkgICBQQUJfSU5U UF9BTUJBX01JU0NfRU5CKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK2ludCBtb2JpdmVpbF9w Y2llX2hvc3RfcHJvYmUoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUpDQogew0KLQlzdHJ1Y3Qg bW9iaXZlaWxfcGNpZSAqcGNpZTsNCiAJc3RydWN0IHBjaV9idXMgKmJ1czsNCiAJc3RydWN0IHBj aV9idXMgKmNoaWxkOw0KLQlzdHJ1Y3QgcGNpX2hvc3RfYnJpZGdlICpicmlkZ2U7DQotCXN0cnVj dCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7DQorCXN0cnVjdCBwY2lfaG9zdF9icmlkZ2UgKmJy aWRnZSA9IHBjaWUtPmJyaWRnZTsNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBjaWUtPnBkZXYt PmRldjsNCiAJcmVzb3VyY2Vfc2l6ZV90IGlvYmFzZTsNCiAJaW50IHJldDsNCiANCi0JLyogYWxs b2NhdGUgdGhlIFBDSWUgcG9ydCAqLw0KLQlicmlkZ2UgPSBkZXZtX3BjaV9hbGxvY19ob3N0X2Jy aWRnZShkZXYsIHNpemVvZigqcGNpZSkpOw0KLQlpZiAoIWJyaWRnZSkNCi0JCXJldHVybiAtRU5P TUVNOw0KLQ0KLQlwY2llID0gcGNpX2hvc3RfYnJpZGdlX3ByaXYoYnJpZGdlKTsNCi0NCi0JcGNp ZS0+cGRldiA9IHBkZXY7DQorCUlOSVRfTElTVF9IRUFEKCZwY2llLT5yZXNvdXJjZXMpOw0KIA0K IAlyZXQgPSBtb2JpdmVpbF9wY2llX3BhcnNlX2R0KHBjaWUpOw0KIAlpZiAocmV0KSB7DQpAQCAt OTI4LDggKzU2MCw2IEBAIHN0YXRpYyBpbnQgbW9iaXZlaWxfcGNpZV9wcm9iZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQ0KIAkJcmV0dXJuIHJldDsNCiAJfQ0KIA0KLQlJTklUX0xJU1Rf SEVBRCgmcGNpZS0+cmVzb3VyY2VzKTsNCi0NCiAJLyogcGFyc2UgdGhlIGhvc3QgYnJpZGdlIGJh c2UgYWRkcmVzc2VzIGZyb20gdGhlIGRldmljZSB0cmVlIGZpbGUgKi8NCiAJcmV0ID0gZGV2bV9v Zl9wY2lfZ2V0X2hvc3RfYnJpZGdlX3Jlc291cmNlcyhkZXYsIDAsIDB4ZmYsDQogCQkJCQkJICAg ICZwY2llLT5yZXNvdXJjZXMsICZpb2Jhc2UpOw0KQEAgLTk0OCwxNSArNTc4LDEyIEBAIHN0YXRp YyBpbnQgbW9iaXZlaWxfcGNpZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0K IAkJZ290byBlcnJvcjsNCiAJfQ0KIA0KLQkvKiBpbml0aWFsaXplIHRoZSBJUlEgZG9tYWlucyAq Lw0KLQlyZXQgPSBtb2JpdmVpbF9wY2llX2luaXRfaXJxX2RvbWFpbihwY2llKTsNCisJcmV0ID0g bW9iaXZlaWxfcGNpZV9pbnRlcnJ1cHRfaW5pdChwY2llKTsNCiAJaWYgKHJldCkgew0KLQkJZGV2 X2VycihkZXYsICJGYWlsZWQgY3JlYXRpbmcgSVJRIERvbWFpblxuIik7DQorCQlkZXZfZXJyKGRl diwgIkludGVycnVwdCBpbml0IGZhaWxlZFxuIik7DQogCQlnb3RvIGVycm9yOw0KIAl9DQogDQot CWlycV9zZXRfY2hhaW5lZF9oYW5kbGVyX2FuZF9kYXRhKHBjaWUtPmlycSwgbW9iaXZlaWxfcGNp ZV9pc3IsIHBjaWUpOw0KLQ0KIAlyZXQgPSBkZXZtX3JlcXVlc3RfcGNpX2J1c19yZXNvdXJjZXMo ZGV2LCAmcGNpZS0+cmVzb3VyY2VzKTsNCiAJaWYgKHJldCkNCiAJCWdvdG8gZXJyb3I7DQpAQCAt OTY1LDcgKzU5Miw3IEBAIHN0YXRpYyBpbnQgbW9iaXZlaWxfcGNpZV9wcm9iZShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQ0KIAlsaXN0X3NwbGljZV9pbml0KCZwY2llLT5yZXNvdXJjZXMs ICZicmlkZ2UtPndpbmRvd3MpOw0KIAlicmlkZ2UtPmRldi5wYXJlbnQgPSBkZXY7DQogCWJyaWRn ZS0+c3lzZGF0YSA9IHBjaWU7DQotCWJyaWRnZS0+YnVzbnIgPSBwY2llLT5yb290X2J1c19ucjsN CisJYnJpZGdlLT5idXNuciA9IHBjaWUtPnJwLnJvb3RfYnVzX25yOw0KIAlicmlkZ2UtPm9wcyA9 ICZtb2JpdmVpbF9wY2llX29wczsNCiAJYnJpZGdlLT5tYXBfaXJxID0gb2ZfaXJxX3BhcnNlX2Fu ZF9tYXBfcGNpOw0KIAlicmlkZ2UtPnN3aXp6bGVfaXJxID0gcGNpX2NvbW1vbl9zd2l6emxlOw0K QEAgLTk5MSwyNSArNjE4LDMgQEAgc3RhdGljIGludCBtb2JpdmVpbF9wY2llX3Byb2JlKHN0cnVj dCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQogCXBjaV9mcmVlX3Jlc291cmNlX2xpc3QoJnBjaWUt PnJlc291cmNlcyk7DQogCXJldHVybiByZXQ7DQogfQ0KLQ0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qg b2ZfZGV2aWNlX2lkIG1vYml2ZWlsX3BjaWVfb2ZfbWF0Y2hbXSA9IHsNCi0Jey5jb21wYXRpYmxl ID0gIm1idmwsZ3BleDQwLXBjaWUiLH0sDQotCXt9LA0KLX07DQotDQotTU9EVUxFX0RFVklDRV9U QUJMRShvZiwgbW9iaXZlaWxfcGNpZV9vZl9tYXRjaCk7DQotDQotc3RhdGljIHN0cnVjdCBwbGF0 Zm9ybV9kcml2ZXIgbW9iaXZlaWxfcGNpZV9kcml2ZXIgPSB7DQotCS5wcm9iZSA9IG1vYml2ZWls X3BjaWVfcHJvYmUsDQotCS5kcml2ZXIgPSB7DQotCQkubmFtZSA9ICJtb2JpdmVpbC1wY2llIiwN Ci0JCS5vZl9tYXRjaF90YWJsZSA9IG1vYml2ZWlsX3BjaWVfb2ZfbWF0Y2gsDQotCQkuc3VwcHJl c3NfYmluZF9hdHRycyA9IHRydWUsDQotCX0sDQotfTsNCi0NCi1idWlsdGluX3BsYXRmb3JtX2Ry aXZlcihtb2JpdmVpbF9wY2llX2RyaXZlcik7DQotDQotTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIp Ow0KLU1PRFVMRV9ERVNDUklQVElPTigiTW9iaXZlaWwgUENJZSBob3N0IGNvbnRyb2xsZXIgZHJp dmVyIik7DQotTU9EVUxFX0FVVEhPUigiU3VicmFobWFueWEgTGluZ2FwcGEgPGwuc3VicmFobWFu eWFAbW9iaXZlaWwuY28uaW4+Iik7DQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxl ci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLXBsYXQuYyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIv bW9iaXZlaWwvcGNpZS1tb2JpdmVpbC1wbGF0LmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRl eCAwMDAwMDAwMDAwMDAuLjljNjJmYzU4NTMwYw0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVy cy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLXBsYXQuYw0KQEAgLTAsMCAr MSw1OSBAQA0KKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQorLyoNCisgKiBQ Q0llIGhvc3QgY29udHJvbGxlciBkcml2ZXIgZm9yIE1vYml2ZWlsIFBDSWUgSG9zdCBjb250cm9s bGVyDQorICoNCisgKiBDb3B5cmlnaHQgKGMpIDIwMTggTW9iaXZlaWwgSW5jLg0KKyAqIENvcHly aWdodCAyMDE5IE5YUA0KKyAqDQorICogQXV0aG9yOiBTdWJyYWhtYW55YSBMaW5nYXBwYSA8bC5z dWJyYWhtYW55YUBtb2JpdmVpbC5jby5pbj4NCisgKiBSZWZhY3RvcjogWmhpcWlhbmcgSG91IDxa aGlxaWFuZy5Ib3VAbnhwLmNvbT4NCisgKi8NCisNCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPg0K KyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQor I2luY2x1ZGUgPGxpbnV4L29mX3BjaS5oPg0KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4NCisjaW5j bHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4N CisNCisjaW5jbHVkZSAicGNpZS1tb2JpdmVpbC5oIg0KKw0KK3N0YXRpYyBpbnQgbW9iaXZlaWxf cGNpZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KK3sNCisJc3RydWN0IG1v Yml2ZWlsX3BjaWUgKnBjaWU7DQorCXN0cnVjdCBwY2lfaG9zdF9icmlkZ2UgKmJyaWRnZTsNCisJ c3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsNCisNCisJYnJpZGdlID0gZGV2bV9wY2lf YWxsb2NfaG9zdF9icmlkZ2UoZGV2LCBzaXplb2YoKnBjaWUpKTsNCisJaWYgKCFicmlkZ2UpDQor CQlyZXR1cm4gLUVOT01FTTsNCisNCisJcGNpZSA9IHBjaV9ob3N0X2JyaWRnZV9wcml2KGJyaWRn ZSk7DQorDQorCXBjaWUtPnBkZXYgPSBwZGV2Ow0KKw0KKwlyZXR1cm4gbW9iaXZlaWxfcGNpZV9o b3N0X3Byb2JlKHBjaWUpOw0KK30NCisNCitzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9p ZCBtb2JpdmVpbF9wY2llX29mX21hdGNoW10gPSB7DQorCXsuY29tcGF0aWJsZSA9ICJtYnZsLGdw ZXg0MC1wY2llIix9LA0KKwl7fSwNCit9Ow0KKw0KK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIG1v Yml2ZWlsX3BjaWVfb2ZfbWF0Y2gpOw0KKw0KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZHJpdmVy IG1vYml2ZWlsX3BjaWVfZHJpdmVyID0gew0KKwkucHJvYmUgPSBtb2JpdmVpbF9wY2llX3Byb2Jl LA0KKwkuZHJpdmVyID0gew0KKwkJLm5hbWUgPSAibW9iaXZlaWwtcGNpZSIsDQorCQkub2ZfbWF0 Y2hfdGFibGUgPSBtb2JpdmVpbF9wY2llX29mX21hdGNoLA0KKwkJLnN1cHByZXNzX2JpbmRfYXR0 cnMgPSB0cnVlLA0KKwl9LA0KK307DQorDQorYnVpbHRpbl9wbGF0Zm9ybV9kcml2ZXIobW9iaXZl aWxfcGNpZV9kcml2ZXIpOw0KKw0KK01PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsNCitNT0RVTEVf REVTQ1JJUFRJT04oIk1vYml2ZWlsIFBDSWUgaG9zdCBjb250cm9sbGVyIGRyaXZlciIpOw0KK01P RFVMRV9BVVRIT1IoIlN1YnJhaG1hbnlhIExpbmdhcHBhIDxsLnN1YnJhaG1hbnlhQG1vYml2ZWls LmNvLmluPiIpOw0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvbW9iaXZlaWwv cGNpZS1tb2JpdmVpbC5jIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVpbC9wY2llLW1v Yml2ZWlsLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwMDAuLjE1ZDVk ODg4ZWI5Mw0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2Jp dmVpbC9wY2llLW1vYml2ZWlsLmMNCkBAIC0wLDAgKzEsMjQ4IEBADQorLy8gU1BEWC1MaWNlbnNl LUlkZW50aWZpZXI6IEdQTC0yLjANCisvKg0KKyAqIFBDSWUgaG9zdCBjb250cm9sbGVyIGRyaXZl ciBmb3IgTW9iaXZlaWwgUENJZSBIb3N0IGNvbnRyb2xsZXINCisgKg0KKyAqIENvcHlyaWdodCAo YykgMjAxOCBNb2JpdmVpbCBJbmMuDQorICogQ29weXJpZ2h0IDIwMTkgTlhQDQorICoNCisgKiBB dXRob3I6IFN1YnJhaG1hbnlhIExpbmdhcHBhIDxsLnN1YnJhaG1hbnlhQG1vYml2ZWlsLmNvLmlu Pg0KKyAqIFJlZmFjdG9yOiBaaGlxaWFuZyBIb3UgPFpoaXFpYW5nLkhvdUBueHAuY29tPg0KKyAq Lw0KKw0KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+ DQorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4NCisj aW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQorDQorI2luY2x1ZGUgInBjaWUtbW9i aXZlaWwuaCINCisNCisvKg0KKyAqIG1vYml2ZWlsX3BjaWVfc2VsX3BhZ2UgLSByb3V0aW5lIHRv IGFjY2VzcyBwYWdlZCByZWdpc3Rlcg0KKyAqDQorICogUmVnaXN0ZXJzIHdob3NlIGFkZHJlc3Mg Z3JlYXRlciB0aGFuIFBBR0VEX0FERFJfQk5EUlkgKDB4YzAwKSBhcmUgcGFnZWQsDQorICogZm9y IHRoaXMgc2NoZW1lIHRvIHdvcmsgZXh0cmFjdGVkIGhpZ2hlciA2IGJpdHMgb2YgdGhlIG9mZnNl dCB3aWxsIGJlDQorICogd3JpdHRlbiB0byBwZ19zZWwgZmllbGQgb2YgUEFCX0NUUkwgcmVnaXN0 ZXIgYW5kIHJlc3Qgb2YgdGhlIGxvd2VyIDEwDQorICogYml0cyBlbmFibGVkIHdpdGggUEFHRURf QUREUl9CTkRSWSBhcmUgdXNlZCBhcyBvZmZzZXQgb2YgdGhlIHJlZ2lzdGVyLg0KKyAqLw0KK3N0 YXRpYyB2b2lkIG1vYml2ZWlsX3BjaWVfc2VsX3BhZ2Uoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBj aWUsIHU4IHBnX2lkeCkNCit7DQorCXUzMiB2YWw7DQorDQorCXZhbCA9IHJlYWRsKHBjaWUtPmNz cl9heGlfc2xhdmVfYmFzZSArIFBBQl9DVFJMKTsNCisJdmFsICY9IH4oUEFHRV9TRUxfTUFTSyA8 PCBQQUdFX1NFTF9TSElGVCk7DQorCXZhbCB8PSAocGdfaWR4ICYgUEFHRV9TRUxfTUFTSykgPDwg UEFHRV9TRUxfU0hJRlQ7DQorDQorCXdyaXRlbCh2YWwsIHBjaWUtPmNzcl9heGlfc2xhdmVfYmFz ZSArIFBBQl9DVFJMKTsNCit9DQorDQorc3RhdGljIHZvaWQgKm1vYml2ZWlsX3BjaWVfY29tcF9h ZGRyKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llLCB1MzIgb2ZmKQ0KK3sNCisJaWYgKG9mZiA8 IFBBR0VEX0FERFJfQk5EUlkpIHsNCisJCS8qIEZvciBkaXJlY3RseSBhY2Nlc3NlZCByZWdpc3Rl cnMsIGNsZWFyIHRoZSBwZ19zZWwgZmllbGQgKi8NCisJCW1vYml2ZWlsX3BjaWVfc2VsX3BhZ2Uo cGNpZSwgMCk7DQorCQlyZXR1cm4gcGNpZS0+Y3NyX2F4aV9zbGF2ZV9iYXNlICsgb2ZmOw0KKwl9 DQorDQorCW1vYml2ZWlsX3BjaWVfc2VsX3BhZ2UocGNpZSwgT0ZGU0VUX1RPX1BBR0VfSURYKG9m ZikpOw0KKwlyZXR1cm4gcGNpZS0+Y3NyX2F4aV9zbGF2ZV9iYXNlICsgT0ZGU0VUX1RPX1BBR0Vf QUREUihvZmYpOw0KK30NCisNCitzdGF0aWMgaW50IG1vYml2ZWlsX3BjaWVfcmVhZCh2b2lkIF9f aW9tZW0gKmFkZHIsIGludCBzaXplLCB1MzIgKnZhbCkNCit7DQorCWlmICgodWludHB0cl90KWFk ZHIgJiAoc2l6ZSAtIDEpKSB7DQorCQkqdmFsID0gMDsNCisJCXJldHVybiBQQ0lCSU9TX0JBRF9S RUdJU1RFUl9OVU1CRVI7DQorCX0NCisNCisJc3dpdGNoIChzaXplKSB7DQorCWNhc2UgNDoNCisJ CSp2YWwgPSByZWFkbChhZGRyKTsNCisJCWJyZWFrOw0KKwljYXNlIDI6DQorCQkqdmFsID0gcmVh ZHcoYWRkcik7DQorCQlicmVhazsNCisJY2FzZSAxOg0KKwkJKnZhbCA9IHJlYWRiKGFkZHIpOw0K KwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQkqdmFsID0gMDsNCisJCXJldHVybiBQQ0lCSU9TX0JB RF9SRUdJU1RFUl9OVU1CRVI7DQorCX0NCisNCisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsN Cit9DQorDQorc3RhdGljIGludCBtb2JpdmVpbF9wY2llX3dyaXRlKHZvaWQgX19pb21lbSAqYWRk ciwgaW50IHNpemUsIHUzMiB2YWwpDQorew0KKwlpZiAoKHVpbnRwdHJfdClhZGRyICYgKHNpemUg LSAxKSkNCisJCXJldHVybiBQQ0lCSU9TX0JBRF9SRUdJU1RFUl9OVU1CRVI7DQorDQorCXN3aXRj aCAoc2l6ZSkgew0KKwljYXNlIDQ6DQorCQl3cml0ZWwodmFsLCBhZGRyKTsNCisJCWJyZWFrOw0K KwljYXNlIDI6DQorCQl3cml0ZXcodmFsLCBhZGRyKTsNCisJCWJyZWFrOw0KKwljYXNlIDE6DQor CQl3cml0ZWIodmFsLCBhZGRyKTsNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJcmV0dXJuIFBD SUJJT1NfQkFEX1JFR0lTVEVSX05VTUJFUjsNCisJfQ0KKw0KKwlyZXR1cm4gUENJQklPU19TVUND RVNTRlVMOw0KK30NCisNCit1MzIgY3NyX3JlYWQoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUs IHUzMiBvZmYsIHNpemVfdCBzaXplKQ0KK3sNCisJdm9pZCAqYWRkcjsNCisJdTMyIHZhbDsNCisJ aW50IHJldDsNCisNCisJYWRkciA9IG1vYml2ZWlsX3BjaWVfY29tcF9hZGRyKHBjaWUsIG9mZik7 DQorDQorCXJldCA9IG1vYml2ZWlsX3BjaWVfcmVhZChhZGRyLCBzaXplLCAmdmFsKTsNCisJaWYg KHJldCkNCisJCWRldl9lcnIoJnBjaWUtPnBkZXYtPmRldiwgInJlYWQgQ1NSIGFkZHJlc3MgZmFp bGVkXG4iKTsNCisNCisJcmV0dXJuIHZhbDsNCit9DQorDQordm9pZCBjc3Jfd3JpdGUoc3RydWN0 IG1vYml2ZWlsX3BjaWUgKnBjaWUsIHUzMiB2YWwsIHUzMiBvZmYsIHNpemVfdCBzaXplKQ0KK3sN CisJdm9pZCAqYWRkcjsNCisJaW50IHJldDsNCisNCisJYWRkciA9IG1vYml2ZWlsX3BjaWVfY29t cF9hZGRyKHBjaWUsIG9mZik7DQorDQorCXJldCA9IG1vYml2ZWlsX3BjaWVfd3JpdGUoYWRkciwg c2l6ZSwgdmFsKTsNCisJaWYgKHJldCkNCisJCWRldl9lcnIoJnBjaWUtPnBkZXYtPmRldiwgIndy aXRlIENTUiBhZGRyZXNzIGZhaWxlZFxuIik7DQorfQ0KKw0KK2Jvb2wgbW9iaXZlaWxfcGNpZV9s aW5rX3VwKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llKQ0KK3sNCisJaWYgKHBjaWUtPm9wcy0+ bGlua191cCkNCisJCXJldHVybiBwY2llLT5vcHMtPmxpbmtfdXAocGNpZSk7DQorDQorCXJldHVy biAoY3NyX3JlYWRsKHBjaWUsIExUU1NNX1NUQVRVUykgJg0KKwkJTFRTU01fU1RBVFVTX0wwX01B U0spID09IExUU1NNX1NUQVRVU19MMDsNCit9DQorDQordm9pZCBwcm9ncmFtX2liX3dpbmRvd3Mo c3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIGludCB3aW5fbnVtLCB1NjQgY3B1X2FkZHIsDQor CQkJdTY0IHBjaV9hZGRyLCB1MzIgdHlwZSwgdTY0IHNpemUpDQorew0KKwl1MzIgdmFsdWU7DQor CXU2NCBzaXplNjQgPSB+KHNpemUgLSAxKTsNCisNCisJaWYgKHdpbl9udW0gPj0gcGNpZS0+cHBp b193aW5zKSB7DQorCQlkZXZfZXJyKCZwY2llLT5wZGV2LT5kZXYsDQorCQkJIkVSUk9SOiBtYXgg aW5ib3VuZCB3aW5kb3dzIHJlYWNoZWQgIVxuIik7DQorCQlyZXR1cm47DQorCX0NCisNCisJdmFs dWUgPSBjc3JfcmVhZGwocGNpZSwgUEFCX1BFWF9BTUFQX0NUUkwod2luX251bSkpOw0KKwl2YWx1 ZSAmPSB+KEFNQVBfQ1RSTF9UWVBFX01BU0sgPDwgQU1BUF9DVFJMX1RZUEVfU0hJRlQgfA0KKwkJ IFdJTl9TSVpFX01BU0sgPDwgV0lOX1NJWkVfU0hJRlQpOw0KKwl2YWx1ZSB8PSAodHlwZSA8PCBB TUFQX0NUUkxfVFlQRV9TSElGVCkgfCAoMSA8PCBBTUFQX0NUUkxfRU5fU0hJRlQpIHwNCisJCSAo bG93ZXJfMzJfYml0cyhzaXplNjQpICYgV0lOX1NJWkVfTUFTSyA8PCBXSU5fU0laRV9TSElGVCk7 DQorCWNzcl93cml0ZWwocGNpZSwgdmFsdWUsIFBBQl9QRVhfQU1BUF9DVFJMKHdpbl9udW0pKTsN CisNCisJY3NyX3dyaXRlbChwY2llLCB1cHBlcl8zMl9iaXRzKHNpemU2NCksDQorCQkgICBQQUJf RVhUX1BFWF9BTUFQX1NJWkVOKHdpbl9udW0pKTsNCisNCisJY3NyX3dyaXRlbChwY2llLCBsb3dl cl8zMl9iaXRzKGNwdV9hZGRyKSwNCisJCSAgIFBBQl9QRVhfQU1BUF9BWElfV0lOKHdpbl9udW0p KTsNCisJY3NyX3dyaXRlbChwY2llLCB1cHBlcl8zMl9iaXRzKGNwdV9hZGRyKSwNCisJCSAgIFBB Ql9FWFRfUEVYX0FNQVBfQVhJX1dJTih3aW5fbnVtKSk7DQorDQorCWNzcl93cml0ZWwocGNpZSwg bG93ZXJfMzJfYml0cyhwY2lfYWRkciksDQorCQkgICBQQUJfUEVYX0FNQVBfUEVYX1dJTl9MKHdp bl9udW0pKTsNCisJY3NyX3dyaXRlbChwY2llLCB1cHBlcl8zMl9iaXRzKHBjaV9hZGRyKSwNCisJ CSAgIFBBQl9QRVhfQU1BUF9QRVhfV0lOX0god2luX251bSkpOw0KKw0KKwlwY2llLT5pYl93aW5z X2NvbmZpZ3VyZWQrKzsNCit9DQorDQorLyoNCisgKiByb3V0aW5lIHRvIHByb2dyYW0gdGhlIG91 dGJvdW5kIHdpbmRvd3MNCisgKi8NCit2b2lkIHByb2dyYW1fb2Jfd2luZG93cyhzdHJ1Y3QgbW9i aXZlaWxfcGNpZSAqcGNpZSwgaW50IHdpbl9udW0sIHU2NCBjcHVfYWRkciwNCisJCQl1NjQgcGNp X2FkZHIsIHUzMiB0eXBlLCB1NjQgc2l6ZSkNCit7DQorDQorCXUzMiB2YWx1ZTsNCisJdTY0IHNp emU2NCA9IH4oc2l6ZSAtIDEpOw0KKw0KKwlpZiAod2luX251bSA+PSBwY2llLT5hcGlvX3dpbnMp IHsNCisJCWRldl9lcnIoJnBjaWUtPnBkZXYtPmRldiwNCisJCQkiRVJST1I6IG1heCBvdXRib3Vu ZCB3aW5kb3dzIHJlYWNoZWQgIVxuIik7DQorCQlyZXR1cm47DQorCX0NCisNCisJLyoNCisJICog cHJvZ3JhbSBFbmFibGUgQml0IHRvIDEsIFR5cGUgQml0IHRvICgwMCkgYmFzZSAyLCBBWEkgV2lu ZG93IFNpemUgQml0DQorCSAqIHRvIDQgS0IgaW4gUEFCX0FYSV9BTUFQX0NUUkwgcmVnaXN0ZXIN CisJICovDQorCXZhbHVlID0gY3NyX3JlYWRsKHBjaWUsIFBBQl9BWElfQU1BUF9DVFJMKHdpbl9u dW0pKTsNCisJdmFsdWUgJj0gfihXSU5fVFlQRV9NQVNLIDw8IFdJTl9UWVBFX1NISUZUIHwNCisJ CSBXSU5fU0laRV9NQVNLIDw8IFdJTl9TSVpFX1NISUZUKTsNCisJdmFsdWUgfD0gMSA8PCBXSU5f RU5BQkxFX1NISUZUIHwgdHlwZSA8PCBXSU5fVFlQRV9TSElGVCB8DQorCQkgKGxvd2VyXzMyX2Jp dHMoc2l6ZTY0KSAmIFdJTl9TSVpFX01BU0sgPDwgV0lOX1NJWkVfU0hJRlQpOw0KKwljc3Jfd3Jp dGVsKHBjaWUsIHZhbHVlLCBQQUJfQVhJX0FNQVBfQ1RSTCh3aW5fbnVtKSk7DQorDQorCWNzcl93 cml0ZWwocGNpZSwgdXBwZXJfMzJfYml0cyhzaXplNjQpLCBQQUJfRVhUX0FYSV9BTUFQX1NJWkUo d2luX251bSkpOw0KKw0KKwkvKg0KKwkgKiBwcm9ncmFtIEFYSSB3aW5kb3cgYmFzZSB3aXRoIGFw cHJvcHJpYXRlIHZhbHVlIGluDQorCSAqIFBBQl9BWElfQU1BUF9BWElfV0lOMCByZWdpc3Rlcg0K KwkgKi8NCisJY3NyX3dyaXRlbChwY2llLCBsb3dlcl8zMl9iaXRzKGNwdV9hZGRyKSAmICh+QVhJ X1dJTkRPV19BTElHTl9NQVNLKSwNCisJCSAgIFBBQl9BWElfQU1BUF9BWElfV0lOKHdpbl9udW0p KTsNCisJY3NyX3dyaXRlbChwY2llLCB1cHBlcl8zMl9iaXRzKGNwdV9hZGRyKSwNCisJCSAgIFBB Ql9FWFRfQVhJX0FNQVBfQVhJX1dJTih3aW5fbnVtKSk7DQorDQorCWNzcl93cml0ZWwocGNpZSwg bG93ZXJfMzJfYml0cyhwY2lfYWRkciksDQorCQkgICBQQUJfQVhJX0FNQVBfUEVYX1dJTl9MKHdp bl9udW0pKTsNCisJY3NyX3dyaXRlbChwY2llLCB1cHBlcl8zMl9iaXRzKHBjaV9hZGRyKSwNCisJ CSAgIFBBQl9BWElfQU1BUF9QRVhfV0lOX0god2luX251bSkpOw0KKw0KKwlwY2llLT5vYl93aW5z X2NvbmZpZ3VyZWQrKzsNCit9DQorDQoraW50IG1vYml2ZWlsX2JyaW5ndXBfbGluayhzdHJ1Y3Qg bW9iaXZlaWxfcGNpZSAqcGNpZSkNCit7DQorCWludCByZXRyaWVzOw0KKw0KKwkvKiBjaGVjayBp ZiB0aGUgbGluayBpcyB1cCBvciBub3QgKi8NCisJZm9yIChyZXRyaWVzID0gMDsgcmV0cmllcyA8 IExJTktfV0FJVF9NQVhfUkVUUklFUzsgcmV0cmllcysrKSB7DQorCQlpZiAobW9iaXZlaWxfcGNp ZV9saW5rX3VwKHBjaWUpKQ0KKwkJCXJldHVybiAwOw0KKw0KKwkJdXNsZWVwX3JhbmdlKExJTktf V0FJVF9NSU4sIExJTktfV0FJVF9NQVgpOw0KKwl9DQorDQorCWRldl9pbmZvKCZwY2llLT5wZGV2 LT5kZXYsICJsaW5rIG5ldmVyIGNhbWUgdXBcbiIpOw0KKw0KKwlyZXR1cm4gLUVUSU1FRE9VVDsN Cit9DQorDQordm9pZCBtb2JpdmVpbF9wY2llX2Rpc2FibGVfaWJfd2luKHN0cnVjdCBtb2JpdmVp bF9wY2llICpwY2llLCBpbnQgaWR4KQ0KK3sNCisJdTMyIHZhbDsNCisNCisJdmFsID0gY3NyX3Jl YWRsKHBjaWUsIFBBQl9QRVhfQU1BUF9DVFJMKGlkeCkpOw0KKwl2YWwgJj0gfigxIDw8IEFNQVBf Q1RSTF9FTl9TSElGVCk7DQorCWNzcl93cml0ZWwocGNpZSwgdmFsLCBQQUJfUEVYX0FNQVBfQ1RS TChpZHgpKTsNCit9DQorDQordm9pZCBtb2JpdmVpbF9wY2llX2Rpc2FibGVfb2Jfd2luKHN0cnVj dCBtb2JpdmVpbF9wY2llICpwY2llLCBpbnQgaWR4KQ0KK3sNCisJdTMyIHZhbDsNCisNCisJdmFs ID0gY3NyX3JlYWRsKHBjaWUsIFBBQl9BWElfQU1BUF9DVFJMKGlkeCkpOw0KKwl2YWwgJj0gfigx IDw8IFdJTl9FTkFCTEVfU0hJRlQpOw0KKwljc3Jfd3JpdGVsKHBjaWUsIHZhbCwgUEFCX0FYSV9B TUFQX0NUUkwoaWR4KSk7DQorfQ0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIv bW9iaXZlaWwvcGNpZS1tb2JpdmVpbC5oIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9tb2JpdmVp bC9wY2llLW1vYml2ZWlsLmgNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAw MDAuLmRjZTc4NzE3NjFlMQ0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9wY2kvY29udHJv bGxlci9tb2JpdmVpbC9wY2llLW1vYml2ZWlsLmgNCkBAIC0wLDAgKzEsMjEyIEBADQorLyogU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8NCisvKg0KKyAqIFBDSWUgaG9zdCBjb250 cm9sbGVyIGRyaXZlciBmb3IgTW9iaXZlaWwgUENJZSBIb3N0IGNvbnRyb2xsZXINCisgKg0KKyAq IENvcHlyaWdodCAoYykgMjAxOCBNb2JpdmVpbCBJbmMuDQorICogQ29weXJpZ2h0IDIwMTkgTlhQ DQorICoNCisgKiBBdXRob3I6IFN1YnJhaG1hbnlhIExpbmdhcHBhIDxsLnN1YnJhaG1hbnlhQG1v Yml2ZWlsLmNvLmluPg0KKyAqIFJlZmFjdG9yOiBaaGlxaWFuZyBIb3UgPFpoaXFpYW5nLkhvdUBu eHAuY29tPg0KKyAqLw0KKw0KKyNpZm5kZWYgX1BDSUVfTU9CSVZFSUxfSA0KKyNkZWZpbmUgX1BD SUVfTU9CSVZFSUxfSA0KKw0KKyNpbmNsdWRlIDxsaW51eC9wY2kuaD4NCisjaW5jbHVkZSA8bGlu dXgvaXJxLmg+DQorI2luY2x1ZGUgPGxpbnV4L21zaS5oPg0KKyNpbmNsdWRlICIuLi8uLi9wY2ku aCINCisNCisvKiByZWdpc3RlciBvZmZzZXRzIGFuZCBiaXQgcG9zaXRpb25zICovDQorDQorLyoN CisgKiB0cmFuc2xhdGlvbiB0YWJsZXMgYXJlIGdyb3VwZWQgaW50byB3aW5kb3dzLCBlYWNoIHdp bmRvdyByZWdpc3RlcnMgYXJlDQorICogZ3JvdXBlZCBpbnRvIGJsb2NrcyBvZiA0IG9yIDE2IHJl Z2lzdGVycyBlYWNoDQorICovDQorI2RlZmluZSBQQUJfUkVHX0JMT0NLX1NJWkUJCTE2DQorI2Rl ZmluZSBQQUJfRVhUX1JFR19CTE9DS19TSVpFCQk0DQorDQorI2RlZmluZSBQQUJfUkVHX0FERFIo b2Zmc2V0LCB3aW4pCVwNCisJKG9mZnNldCArICh3aW4gKiBQQUJfUkVHX0JMT0NLX1NJWkUpKQ0K KyNkZWZpbmUgUEFCX0VYVF9SRUdfQUREUihvZmZzZXQsIHdpbikJXA0KKwkob2Zmc2V0ICsgKHdp biAqIFBBQl9FWFRfUkVHX0JMT0NLX1NJWkUpKQ0KKw0KKyNkZWZpbmUgTFRTU01fU1RBVFVTCQkJ MHgwNDA0DQorI2RlZmluZSAgTFRTU01fU1RBVFVTX0wwX01BU0sJCTB4M2YNCisjZGVmaW5lICBM VFNTTV9TVEFUVVNfTDAJCTB4MmQNCisNCisjZGVmaW5lIFBBQl9DVFJMCQkJMHgwODA4DQorI2Rl ZmluZSAgQU1CQV9QSU9fRU5BQkxFX1NISUZUCQkwDQorI2RlZmluZSAgUEVYX1BJT19FTkFCTEVf U0hJRlQJCTENCisjZGVmaW5lICBQQUdFX1NFTF9TSElGVAkJCTEzDQorI2RlZmluZSAgUEFHRV9T RUxfTUFTSwkJCTB4M2YNCisjZGVmaW5lICBQQUdFX0xPX01BU0sJCQkweDNmZg0KKyNkZWZpbmUg IFBBR0VfU0VMX09GRlNFVF9TSElGVAkJMTANCisNCisjZGVmaW5lIFBBQl9BWElfUElPX0NUUkwJ CTB4MDg0MA0KKyNkZWZpbmUgIEFQSU9fRU5fTUFTSwkJCTB4Zg0KKw0KKyNkZWZpbmUgUEFCX1BF WF9QSU9fQ1RSTAkJMHgwOGMwDQorI2RlZmluZSAgUElPX0VOQUJMRV9TSElGVAkJMA0KKw0KKyNk ZWZpbmUgUEFCX0lOVFBfQU1CQV9NSVNDX0VOQgkJMHgwYjBjDQorI2RlZmluZSBQQUJfSU5UUF9B TUJBX01JU0NfU1RBVAkJMHgwYjFjDQorI2RlZmluZSAgUEFCX0lOVFBfSU5UWF9NQVNLCQkweDAx ZTANCisjZGVmaW5lICBQQUJfSU5UUF9NU0lfTUFTSwkJMHg4DQorDQorI2RlZmluZSBQQUJfQVhJ X0FNQVBfQ1RSTCh3aW4pCQlQQUJfUkVHX0FERFIoMHgwYmEwLCB3aW4pDQorI2RlZmluZSAgV0lO X0VOQUJMRV9TSElGVAkJMA0KKyNkZWZpbmUgIFdJTl9UWVBFX1NISUZUCQkJMQ0KKyNkZWZpbmUg IFdJTl9UWVBFX01BU0sJCQkweDMNCisjZGVmaW5lICBXSU5fU0laRV9TSElGVAkJCTEwDQorI2Rl ZmluZSAgV0lOX1NJWkVfTUFTSwkJCTB4M2ZmZmZmDQorDQorI2RlZmluZSBQQUJfRVhUX0FYSV9B TUFQX1NJWkUod2luKQlQQUJfRVhUX1JFR19BRERSKDB4YmFmMCwgd2luKQ0KKw0KKyNkZWZpbmUg UEFCX0VYVF9BWElfQU1BUF9BWElfV0lOKHdpbikJUEFCX0VYVF9SRUdfQUREUigweDgwYTAsIHdp bikNCisjZGVmaW5lIFBBQl9BWElfQU1BUF9BWElfV0lOKHdpbikJUEFCX1JFR19BRERSKDB4MGJh NCwgd2luKQ0KKyNkZWZpbmUgIEFYSV9XSU5ET1dfQUxJR05fTUFTSwkJMw0KKw0KKyNkZWZpbmUg UEFCX0FYSV9BTUFQX1BFWF9XSU5fTCh3aW4pCVBBQl9SRUdfQUREUigweDBiYTgsIHdpbikNCisj ZGVmaW5lICBQQUJfQlVTX1NISUZUCQkJMjQNCisjZGVmaW5lICBQQUJfREVWSUNFX1NISUZUCQkx OQ0KKyNkZWZpbmUgIFBBQl9GVU5DVElPTl9TSElGVAkJMTYNCisNCisjZGVmaW5lIFBBQl9BWElf QU1BUF9QRVhfV0lOX0god2luKQlQQUJfUkVHX0FERFIoMHgwYmFjLCB3aW4pDQorI2RlZmluZSBQ QUJfSU5UUF9BWElfUElPX0NMQVNTCQkweDQ3NA0KKw0KKyNkZWZpbmUgUEFCX1BFWF9BTUFQX0NU Ukwod2luKQkJUEFCX1JFR19BRERSKDB4NGJhMCwgd2luKQ0KKyNkZWZpbmUgIEFNQVBfQ1RSTF9F Tl9TSElGVAkJMA0KKyNkZWZpbmUgIEFNQVBfQ1RSTF9UWVBFX1NISUZUCQkxDQorI2RlZmluZSAg QU1BUF9DVFJMX1RZUEVfTUFTSwkJMw0KKw0KKyNkZWZpbmUgUEFCX0VYVF9QRVhfQU1BUF9TSVpF Tih3aW4pCVBBQl9FWFRfUkVHX0FERFIoMHhiZWYwLCB3aW4pDQorI2RlZmluZSBQQUJfRVhUX1BF WF9BTUFQX0FYSV9XSU4od2luKQlQQUJfRVhUX1JFR19BRERSKDB4YjRhMCwgd2luKQ0KKyNkZWZp bmUgUEFCX1BFWF9BTUFQX0FYSV9XSU4od2luKQlQQUJfUkVHX0FERFIoMHg0YmE0LCB3aW4pDQor I2RlZmluZSBQQUJfUEVYX0FNQVBfUEVYX1dJTl9MKHdpbikJUEFCX1JFR19BRERSKDB4NGJhOCwg d2luKQ0KKyNkZWZpbmUgUEFCX1BFWF9BTUFQX1BFWF9XSU5fSCh3aW4pCVBBQl9SRUdfQUREUigw eDRiYWMsIHdpbikNCisNCisvKiBzdGFydGluZyBvZmZzZXQgb2YgSU5UWCBiaXRzIGluIHN0YXR1 cyByZWdpc3RlciAqLw0KKyNkZWZpbmUgUEFCX0lOVFhfU1RBUlQJCQk1DQorDQorLyogc3VwcG9y dGVkIG51bWJlciBvZiBNU0kgaW50ZXJydXB0cyAqLw0KKyNkZWZpbmUgUENJX05VTV9NU0kJCQkx Ng0KKw0KKy8qIE1TSSByZWdpc3RlcnMgKi8NCisjZGVmaW5lIE1TSV9CQVNFX0xPX09GRlNFVAkJ MHgwNA0KKyNkZWZpbmUgTVNJX0JBU0VfSElfT0ZGU0VUCQkweDA4DQorI2RlZmluZSBNU0lfU0la RV9PRkZTRVQJCQkweDBjDQorI2RlZmluZSBNU0lfRU5BQkxFX09GRlNFVAkJMHgxNA0KKyNkZWZp bmUgTVNJX1NUQVRVU19PRkZTRVQJCTB4MTgNCisjZGVmaW5lIE1TSV9EQVRBX09GRlNFVAkJCTB4 MjANCisjZGVmaW5lIE1TSV9BRERSX0xfT0ZGU0VUCQkweDI0DQorI2RlZmluZSBNU0lfQUREUl9I X09GRlNFVAkJMHgyOA0KKw0KKy8qIG91dGJvdW5kIGFuZCBpbmJvdW5kIHdpbmRvdyBkZWZpbml0 aW9ucyAqLw0KKyNkZWZpbmUgV0lOX05VTV8wCQkJMA0KKyNkZWZpbmUgV0lOX05VTV8xCQkJMQ0K KyNkZWZpbmUgQ0ZHX1dJTkRPV19UWVBFCQkJMA0KKyNkZWZpbmUgSU9fV0lORE9XX1RZUEUJCQkx DQorI2RlZmluZSBNRU1fV0lORE9XX1RZUEUJCQkyDQorI2RlZmluZSBJQl9XSU5fU0laRQkJCSgo dTY0KTI1NiAqIDEwMjQgKiAxMDI0ICogMTAyNCkNCisjZGVmaW5lIE1BWF9QSU9fV0lORE9XUwkJ CTgNCisNCisvKiBQYXJhbWV0ZXJzIGZvciB0aGUgd2FpdGluZyBmb3IgbGluayB1cCByb3V0aW5l ICovDQorI2RlZmluZSBMSU5LX1dBSVRfTUFYX1JFVFJJRVMJCTEwDQorI2RlZmluZSBMSU5LX1dB SVRfTUlOCQkJOTAwMDANCisjZGVmaW5lIExJTktfV0FJVF9NQVgJCQkxMDAwMDANCisNCisjZGVm aW5lIFBBR0VEX0FERFJfQk5EUlkJCTB4YzAwDQorI2RlZmluZSBPRkZTRVRfVE9fUEFHRV9BRERS KG9mZikJXA0KKwkoKG9mZiAmIFBBR0VfTE9fTUFTSykgfCBQQUdFRF9BRERSX0JORFJZKQ0KKyNk ZWZpbmUgT0ZGU0VUX1RPX1BBR0VfSURYKG9mZikJCVwNCisJKChvZmYgPj4gUEFHRV9TRUxfT0ZG U0VUX1NISUZUKSAmIFBBR0VfU0VMX01BU0spDQorDQorc3RydWN0IG1vYml2ZWlsX3BjaWU7DQor DQorc3RydWN0IG1vYml2ZWlsX21zaSB7CQkJLyogTVNJIGluZm9ybWF0aW9uICovDQorCXN0cnVj dCBtdXRleCBsb2NrOwkJLyogcHJvdGVjdCBiaXRtYXAgdmFyaWFibGUgKi8NCisJc3RydWN0IGly cV9kb21haW4gKm1zaV9kb21haW47DQorCXN0cnVjdCBpcnFfZG9tYWluICpkZXZfZG9tYWluOw0K KwlwaHlzX2FkZHJfdCBtc2lfcGFnZXNfcGh5czsNCisJaW50IG51bV9vZl92ZWN0b3JzOw0KKwlE RUNMQVJFX0JJVE1BUChtc2lfaXJxX2luX3VzZSwgUENJX05VTV9NU0kpOw0KK307DQorDQorc3Ry dWN0IG1vYml2ZWlsX3JwX29wcyB7DQorCWludCAoKmludGVycnVwdF9pbml0KShzdHJ1Y3QgbW9i aXZlaWxfcGNpZSAqcGNpZSk7DQorfTsNCisNCitzdHJ1Y3Qgcm9vdF9wb3J0IHsNCisJdTggcm9v dF9idXNfbnI7DQorCXZvaWQgX19pb21lbSAqY29uZmlnX2F4aV9zbGF2ZV9iYXNlOwkvKiBlbmRw b2ludCBjb25maWcgYmFzZSAqLw0KKwlzdHJ1Y3QgcmVzb3VyY2UgKm9iX2lvX3JlczsNCisJc3Ry dWN0IG1vYml2ZWlsX3JwX29wcyAqb3BzOw0KKwlpbnQgaXJxOw0KKwlyYXdfc3BpbmxvY2tfdCBp bnR4X21hc2tfbG9jazsNCisJc3RydWN0IGlycV9kb21haW4gKmludHhfZG9tYWluOw0KKwlzdHJ1 Y3QgbW9iaXZlaWxfbXNpIG1zaTsNCit9Ow0KKw0KK3N0cnVjdCBtb2JpdmVpbF9wYWJfb3BzIHsN CisJaW50ICgqbGlua191cCkoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUpOw0KK307DQorDQor c3RydWN0IG1vYml2ZWlsX3BjaWUgew0KKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2Ow0K KwlzdHJ1Y3QgbGlzdF9oZWFkIHJlc291cmNlczsNCisJdm9pZCBfX2lvbWVtICpjc3JfYXhpX3Ns YXZlX2Jhc2U7CS8qIFBBQiByZWdpc3RlcnMgYmFzZSAqLw0KKwlwaHlzX2FkZHJfdCBwY2llX3Jl Z19iYXNlOwkvKiBQaHlzaWNhbCBQQ0llIENvbnRyb2xsZXIgQmFzZSAqLw0KKwl2b2lkIF9faW9t ZW0gKmFwYl9jc3JfYmFzZTsJLyogTVNJIHJlZ2lzdGVyIGJhc2UgKi8NCisJdTMyIGFwaW9fd2lu czsNCisJdTMyIHBwaW9fd2luczsNCisJdTMyIG9iX3dpbnNfY29uZmlndXJlZDsJCS8qIGNvbmZp Z3VyZWQgb3V0Ym91bmQgd2luZG93cyAqLw0KKwl1MzIgaWJfd2luc19jb25maWd1cmVkOwkJLyog Y29uZmlndXJlZCBpbmJvdW5kIHdpbmRvd3MgKi8NCisJY29uc3Qgc3RydWN0IG1vYml2ZWlsX3Bh Yl9vcHMgKm9wczsNCisJc3RydWN0IHJvb3RfcG9ydCBycDsNCisJc3RydWN0IHBjaV9ob3N0X2Jy aWRnZSAqYnJpZGdlOw0KK307DQorDQoraW50IG1vYml2ZWlsX3BjaWVfaG9zdF9wcm9iZShzdHJ1 Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSk7DQorYm9vbCBtb2JpdmVpbF9wY2llX2xpbmtfdXAoc3Ry dWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUpOw0KK2ludCBtb2JpdmVpbF9icmluZ3VwX2xpbmsoc3Ry dWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUpOw0KK3ZvaWQgcHJvZ3JhbV9vYl93aW5kb3dzKHN0cnVj dCBtb2JpdmVpbF9wY2llICpwY2llLCBpbnQgd2luX251bSwgdTY0IGNwdV9hZGRyLA0KKwkJCXU2 NCBwY2lfYWRkciwgdTMyIHR5cGUsIHU2NCBzaXplKTsNCit2b2lkIHByb2dyYW1faWJfd2luZG93 cyhzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNpZSwgaW50IHdpbl9udW0sIHU2NCBjcHVfYWRkciwN CisJCQl1NjQgcGNpX2FkZHIsIHUzMiB0eXBlLCB1NjQgc2l6ZSk7DQordm9pZCBtb2JpdmVpbF9w Y2llX2Rpc2FibGVfb2Jfd2luKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llLCBpbnQgaWR4KTsN Cit2b2lkIG1vYml2ZWlsX3BjaWVfZGlzYWJsZV9pYl93aW4oc3RydWN0IG1vYml2ZWlsX3BjaWUg KnBjaWUsIGludCBpZHgpOw0KK3UzMiBjc3JfcmVhZChzdHJ1Y3QgbW9iaXZlaWxfcGNpZSAqcGNp ZSwgdTMyIG9mZiwgc2l6ZV90IHNpemUpOw0KK3ZvaWQgY3NyX3dyaXRlKHN0cnVjdCBtb2JpdmVp bF9wY2llICpwY2llLCB1MzIgdmFsLCB1MzIgb2ZmLCBzaXplX3Qgc2l6ZSk7DQorDQorc3RhdGlj IGlubGluZSB1MzIgY3NyX3JlYWRsKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llLCB1MzIgb2Zm KQ0KK3sNCisJcmV0dXJuIGNzcl9yZWFkKHBjaWUsIG9mZiwgMHg0KTsNCit9DQorDQorc3RhdGlj IGlubGluZSB1MzIgY3NyX3JlYWR3KHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llLCB1MzIgb2Zm KQ0KK3sNCisJcmV0dXJuIGNzcl9yZWFkKHBjaWUsIG9mZiwgMHgyKTsNCit9DQorDQorc3RhdGlj IGlubGluZSB1MzIgY3NyX3JlYWRiKHN0cnVjdCBtb2JpdmVpbF9wY2llICpwY2llLCB1MzIgb2Zm KQ0KK3sNCisJcmV0dXJuIGNzcl9yZWFkKHBjaWUsIG9mZiwgMHgxKTsNCit9DQorDQorc3RhdGlj IGlubGluZSB2b2lkIGNzcl93cml0ZWwoc3RydWN0IG1vYml2ZWlsX3BjaWUgKnBjaWUsIHUzMiB2 YWwsIHUzMiBvZmYpDQorew0KKwljc3Jfd3JpdGUocGNpZSwgdmFsLCBvZmYsIDB4NCk7DQorfQ0K Kw0KK3N0YXRpYyBpbmxpbmUgdm9pZCBjc3Jfd3JpdGV3KHN0cnVjdCBtb2JpdmVpbF9wY2llICpw Y2llLCB1MzIgdmFsLCB1MzIgb2ZmKQ0KK3sNCisJY3NyX3dyaXRlKHBjaWUsIHZhbCwgb2ZmLCAw eDIpOw0KK30NCisNCitzdGF0aWMgaW5saW5lIHZvaWQgY3NyX3dyaXRlYihzdHJ1Y3QgbW9iaXZl aWxfcGNpZSAqcGNpZSwgdTMyIHZhbCwgdTMyIG9mZikNCit7DQorCWNzcl93cml0ZShwY2llLCB2 YWwsIG9mZiwgMHgxKTsNCit9DQorDQorI2VuZGlmIC8qIF9QQ0lFX01PQklWRUlMX0ggKi8NCi0t IA0KMi4xNy4xDQoNCg==