Received: by 2002:a25:4158:0:0:0:0:0 with SMTP id o85csp551521yba; Thu, 9 May 2019 02:10:29 -0700 (PDT) X-Google-Smtp-Source: APXvYqwnJPJ3tEMSAdmXfkjhKuPB7OGrYHpQR4ZTBqwhC5Ldor9jYfDxXfndgXDaioPZvk62WBZz X-Received: by 2002:a17:902:6b03:: with SMTP id o3mr2687019plk.85.1557393029703; Thu, 09 May 2019 02:10:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1557393029; cv=none; d=google.com; s=arc-20160816; b=lyagRD+CbEF+ZvY+FjuKstrTXAFl8RrEwOdqN7xxtLl735JLn7Zcp/rloTIRP1KYI3 M29e4LbWg5hlmx/oPuR2uPlh2zPCJOjZwiuBbHn+kkIrYGzjKSZwYgdr0dmDOvHdjA88 XhxtZ8XqVosyJRY58Dtcj1NGGOWwTVHGfGfVRgBDcS2dTT6lf9TSvnIZWY5Rp/Pmdzts l+C03ivLnSyzuuJxq5N6jdn8AUH+sAW2wYIGjsnczYtNn2hHmyqzDqcHG9dvG15oV95/ Of1PKuyQU6J1su2ZhWy17UBexCoPjY03ksyQgXTEVJddShNyfurOZzoE0k1f/wfzaa4U iLBQ== 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:message-id:date:thread-index :thread-topic:subject:cc:to:from:dkim-signature; bh=DoQZW5eQgkrIe/Yh1JC77tnCKYlkUW/WC5ifBxwwYRA=; b=VzsnLzf1GpVE9elwTsAUoyOTzLZlaR1sAwetU3A7n4XOgavUtb659n9+sB9fb4tFxu g7whmxyMWJPeD9+DJfIdPzabJnDtx9sYwnpW847naV01Bxb5OXyFPisr02R66t6QIdJL dqWgQgvTXUPdVk07TmFOwSuYebYJeKnkxDuVWNuWCaK/jmq/MlynJCt7mqcRkpXIP5Ut aMPwCz060Thp9Tjv5uDTPc5MwAfOZdIcClBtpCFS+yRoU+72rUwH03RBWwxmxQ2tgsVg HjpjvwQ+btZxQmN7SmKZbbUTZcBbCDwp5rJ0PNoT67jCqRC9+3P7x3j1tPP7Fh99cLFZ YJ6Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@microchiptechnology.onmicrosoft.com header.s=selector1-microchiptechnology-onmicrosoft-com header.b=gzpo1F8V; 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=fail (p=NONE sp=NONE dis=NONE) header.from=microchip.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id k33si1945195pld.415.2019.05.09.02.10.12; Thu, 09 May 2019 02:10:29 -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=@microchiptechnology.onmicrosoft.com header.s=selector1-microchiptechnology-onmicrosoft-com header.b=gzpo1F8V; 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=fail (p=NONE sp=NONE dis=NONE) header.from=microchip.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726713AbfEIJJK (ORCPT + 99 others); Thu, 9 May 2019 05:09:10 -0400 Received: from esa4.microchip.iphmx.com ([68.232.154.123]:57949 "EHLO esa4.microchip.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725821AbfEIJJK (ORCPT ); Thu, 9 May 2019 05:09:10 -0400 Received-SPF: Pass (esa4.microchip.iphmx.com: domain of Eugen.Hristev@microchip.com designates 198.175.253.82 as permitted sender) identity=mailfrom; client-ip=198.175.253.82; receiver=esa4.microchip.iphmx.com; envelope-from="Eugen.Hristev@microchip.com"; x-sender="Eugen.Hristev@microchip.com"; x-conformance=spf_only; x-record-type="v=spf1"; x-record-text="v=spf1 mx a:ushub1.microchip.com a:smtpout.microchip.com a:mx1.microchip.iphmx.com a:mx2.microchip.iphmx.com include:servers.mcsv.net include:mktomail.com include:spf.protection.outlook.com ~all" Received-SPF: None (esa4.microchip.iphmx.com: no sender authenticity information available from domain of postmaster@email.microchip.com) identity=helo; client-ip=198.175.253.82; receiver=esa4.microchip.iphmx.com; envelope-from="Eugen.Hristev@microchip.com"; x-sender="postmaster@email.microchip.com"; x-conformance=spf_only Authentication-Results: esa4.microchip.iphmx.com; spf=Pass smtp.mailfrom=Eugen.Hristev@microchip.com; spf=None smtp.helo=postmaster@email.microchip.com; dkim=pass (signature verified) header.i=@microchiptechnology.onmicrosoft.com; dmarc=pass (p=none dis=none) d=microchip.com X-IronPort-AV: E=Sophos;i="5.60,449,1549954800"; d="scan'208";a="32264636" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa4.microchip.iphmx.com with ESMTP/TLS/DHE-RSA-AES256-SHA; 09 May 2019 02:09:06 -0700 Received: from NAM05-DM3-obe.outbound.protection.outlook.com (10.10.215.89) by email.microchip.com (10.10.76.108) with Microsoft SMTP Server (TLS) id 14.3.352.0; Thu, 9 May 2019 02:09:05 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=microchiptechnology.onmicrosoft.com; s=selector1-microchiptechnology-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=DoQZW5eQgkrIe/Yh1JC77tnCKYlkUW/WC5ifBxwwYRA=; b=gzpo1F8V7VBkZs1tLhiaWE9iAkBfP5WZ4D+ovs8HUlN28S9Z7+tp7Z78sgP+hqT8tLxvMfw0JSpZOXQYnOFBTKspox8xzgeslzMTcw2E/zB0DyAnUl1FxgNXNBjoYsCPmBsVvxcTTDA7QarfnzwGajMNfHefXkoRLBKiS0DM2co= Received: from DM5PR11MB1242.namprd11.prod.outlook.com (10.168.108.8) by DM5PR11MB1690.namprd11.prod.outlook.com (10.168.108.139) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1878.21; Thu, 9 May 2019 09:09:01 +0000 Received: from DM5PR11MB1242.namprd11.prod.outlook.com ([fe80::e0e3:1d51:9e3e:6dc]) by DM5PR11MB1242.namprd11.prod.outlook.com ([fe80::e0e3:1d51:9e3e:6dc%3]) with mapi id 15.20.1856.012; Thu, 9 May 2019 09:09:00 +0000 From: To: , , , CC: , Subject: [PATCH] media: atmel: atmel-isc: split driver into driver base and isc Thread-Topic: [PATCH] media: atmel: atmel-isc: split driver into driver base and isc Thread-Index: AQHVBkbX5BHnfrFMKk6sBhC7dfZ9YA== Date: Thu, 9 May 2019 09:09:00 +0000 Message-ID: <1557392634-11090-1-git-send-email-eugen.hristev@microchip.com> Accept-Language: ro-RO, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: VI1PR0302CA0011.eurprd03.prod.outlook.com (2603:10a6:800:e9::21) To DM5PR11MB1242.namprd11.prod.outlook.com (2603:10b6:3:14::8) x-ms-exchange-messagesentrepresentingtype: 1 x-mailer: git-send-email 2.7.4 x-originating-ip: [94.177.32.154] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 58df35ae-8a57-4e51-02a9-08d6d45df8fc x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600141)(711020)(4605104)(2017052603328)(7193020);SRVR:DM5PR11MB1690; x-ms-traffictypediagnostic: DM5PR11MB1690: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:1417; x-forefront-prvs: 003245E729 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(376002)(346002)(396003)(136003)(366004)(39860400002)(199004)(189003)(2201001)(68736007)(3846002)(81166006)(52116002)(30864003)(305945005)(316002)(110136005)(107886003)(71190400001)(6436002)(71200400001)(478600001)(8936002)(86362001)(50226002)(25786009)(2616005)(4326008)(66066001)(6506007)(386003)(14454004)(256004)(99286004)(6512007)(6116002)(5660300002)(72206003)(186003)(8676002)(81156014)(73956011)(54906003)(36756003)(14444005)(66946007)(486006)(53936002)(26005)(476003)(53946003)(2906002)(6486002)(7736002)(66446008)(66476007)(66556008)(102836004)(64756008)(2501003)(461764006)(2004002)(559001)(579004)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:DM5PR11MB1690;H:DM5PR11MB1242.namprd11.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;A:1;MX:1; received-spf: None (protection.outlook.com: microchip.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: f8s7H8rF7G7Sfh/ENiyoaafBetySCbylGGygjc/HTHJsvl7C47KoDnxLv7chPaJnSRut7ZuzSvSRqx/cmVHFMisK/uYN6YVsv1jWqmKcr1l5R4L626+mk0NsQ0veVwQEZl2aPSIZyfwyZfj1zo4jNQnftpaQvdhs/qd1YJV2jP0NGom5rgfvTJLg6sKSydGfFSmknULvNLwMuSkILjIwK+H4G/sSQU6bVHesGaPb8BJOoxey8/1dTAOTYp2bKT+s74nO1EV+s/mxn1Z+c9Cb6z53OuaYslzc8JSHy0JwIQZW9Zs+Vv+MJ0ZJ4lyzDCiDjF4p3f7lYg9kauT+6EqTJNhWT8aTgd4XpRF1ZDVGl2xTt/JlcpQ8oWfvKPBdH7m5q3bLGNjsjNnoDRkQv0N1nJmpUXRyDt1MOkjCyFjTmlA= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 58df35ae-8a57-4e51-02a9-08d6d45df8fc X-MS-Exchange-CrossTenant-originalarrivaltime: 09 May 2019 09:09:00.7437 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3f4057f3-b418-4d4e-ba84-d55b4e897d88 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR11MB1690 X-OriginatorOrg: microchip.com Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org RnJvbTogRXVnZW4gSHJpc3RldiA8ZXVnZW4uaHJpc3RldkBtaWNyb2NoaXAuY29tPg0KDQpUaGlz IHNwbGl0cyB0aGUgQXRtZWwgSVNDIGRyaXZlciBpbnRvIGEgY29tbW9uIGJhc2U6IGF0bWVsLWlz Yy1iYXNlLmMNCmFuZCB0aGUgZHJpdmVyIHByb2JlL2R0IHBhcnQgLCBhdG1lbC1pc2MuYw0KVGhp cyBpcyBuZWVkZWQgdG8ga2VlcCBhIGNvbW1vbiBncm91bmQgZm9yIHRoZSBzZW5zb3IgY29udHJv bGxlciB3aGljaCB3aWxsDQpiZSByZXVzZWQuDQpUaGUgYXRtZWwtaXNjIHdpbGwgdXNlIHRoZSBj b21tb24gc3ltYm9scyBpbnNpZGUgdGhlIGF0bWVsLWlzYy1iYXNlDQpGdXR1cmUgZHJpdmVyIHdp bGwgYWxzbyB1c2UgdGhlIHNhbWUgc3ltYm9scyBhbmQgcmVkZWZpbmUgZGlmZmVyZW50IGFzcGVj dHMsDQpmb3IgYSBkaWZmZXJlbnQgdmVyc2lvbiBvZiB0aGUgSVNDLg0KVGhpcyBpcyBkb25lIHRv IGF2b2lkIGNvbXBsZXRlIGNvZGUgZHVwbGljYXRpb24gYnkgY3JlYXRpbmcgYSB0b3RhbGx5DQpk aWZmZXJlbnQgZHJpdmVyIGZvciB0aGUgbmV3IHZhcmlhbnQgb2YgdGhlIElTQy4NCg0KU2lnbmVk LW9mZi1ieTogRXVnZW4gSHJpc3RldiA8ZXVnZW4uaHJpc3RldkBtaWNyb2NoaXAuY29tPg0KLS0t DQoNCkhlbGxvLA0KDQpUaGlzIHBhdGNoIGFwcGxpZXMgb24gdG9wIG9mIG15IG90aGVyIHBhdGNo ZXM6DQoNCm1lZGlhOiBhdG1lbDogYXRtZWwtaXNjOiBtYWtlIHRyeV9mbXQgZXJyb3IgbGVzcyB2 ZXJib3NlDQptZWRpYTogYXRtZWw6IGF0bWVsLWlzYzogYWRkIHN1cHBvcnQgZm9yIERPX1dISVRF X0JBTEFOQ0UNCm1lZGlhOiBhdG1lbDogYXRtZWwtaXNjOiByZXdvcmtlZCB3aGl0ZSBiYWxhbmNl IGZlYXR1cmUNCg0KVGhhbmtzICENCg0KIE1BSU5UQUlORVJTICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8ICAgIDIgKw0KIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvTWFr ZWZpbGUgICAgICAgICB8ICAgIDEgKw0KIGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvYXRt ZWwtaXNjLWJhc2UuYyB8IDIxNDQgKysrKysrKysrKysrKysrKysrKysrKysNCiBkcml2ZXJzL21l ZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVsLWlzYy5jICAgICAgfCAyMzExICstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0NCiBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVsLWlzYy5oICAg ICAgfCAgMjEwICsrKw0KIDUgZmlsZXMgY2hhbmdlZCwgMjM3MiBpbnNlcnRpb25zKCspLCAyMjk2 IGRlbGV0aW9ucygtKQ0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3BsYXRmb3Jt L2F0bWVsL2F0bWVsLWlzYy1iYXNlLmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRp YS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1pc2MuaA0KDQpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMg Yi9NQUlOVEFJTkVSUw0KaW5kZXggODc4NTg4Yy4uODc5OTc3OSAxMDA2NDQNCi0tLSBhL01BSU5U QUlORVJTDQorKysgYi9NQUlOVEFJTkVSUw0KQEAgLTEwMTEwLDYgKzEwMTEwLDggQEAgTToJRXVn ZW4gSHJpc3RldiA8ZXVnZW4uaHJpc3RldkBtaWNyb2NoaXAuY29tPg0KIEw6CWxpbnV4LW1lZGlh QHZnZXIua2VybmVsLm9yZw0KIFM6CVN1cHBvcnRlZA0KIEY6CWRyaXZlcnMvbWVkaWEvcGxhdGZv cm0vYXRtZWwvYXRtZWwtaXNjLmMNCitGOglkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVsL2F0 bWVsLWlzYy5oDQorRjoJZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1pc2MtYmFz ZS5jDQogRjoJZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1pc2MtcmVncy5oDQog RjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL21lZGlhL2F0bWVsLWlzYy50eHQN CiANCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVsL01ha2VmaWxlIGIv ZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9NYWtlZmlsZQ0KaW5kZXggMjcwMDBkMC4uOWM4 NTY2ZSAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvTWFrZWZpbGUN CisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvTWFrZWZpbGUNCkBAIC0xLDIgKzEs MyBAQA0KIG9iai0kKENPTkZJR19WSURFT19BVE1FTF9JU0MpICs9IGF0bWVsLWlzYy5vDQogb2Jq LSQoQ09ORklHX1ZJREVPX0FUTUVMX0lTSSkgKz0gYXRtZWwtaXNpLm8NCitvYmotJChDT05GSUdf VklERU9fQVRNRUxfSVNDKSArPSBhdG1lbC1pc2MtYmFzZS5vDQpkaWZmIC0tZ2l0IGEvZHJpdmVy cy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1pc2MtYmFzZS5jIGIvZHJpdmVycy9tZWRpYS9w bGF0Zm9ybS9hdG1lbC9hdG1lbC1pc2MtYmFzZS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0NA0KaW5k ZXggMDAwMDAwMC4uMDQ0NmE0MA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9tZWRpYS9w bGF0Zm9ybS9hdG1lbC9hdG1lbC1pc2MtYmFzZS5jDQpAQCAtMCwwICsxLDIxNDQgQEANCisvLyBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KKy8qDQorICogTWljcm9jaGlwIEltYWdl IFNlbnNvciBDb250cm9sbGVyIChJU0MpIGNvbW1vbiBkcml2ZXIgYmFzZQ0KKyAqDQorICogQ29w eXJpZ2h0IChDKSAyMDE2LTIwMTkgTWljcm9jaGlwIFRlY2hub2xvZ3ksIEluYy4NCisgKg0KKyAq IEF1dGhvcjogU29uZ2p1biBXdSA8c29uZ2p1bi53dUBtaWNyb2NoaXAuY29tPg0KKyAqIEF1dGhv cjogRXVnZW4gSHJpc3RldiA8ZXVnZW4uaHJpc3RldkBtaWNyb2NoaXAuY29tPg0KKyAqDQorICov DQorDQorI2luY2x1ZGUgPGxpbnV4L2Nsay5oPg0KKyNpbmNsdWRlIDxsaW51eC9jbGtkZXYuaD4N CisjaW5jbHVkZSA8bGludXgvY2xrLXByb3ZpZGVyLmg+DQorI2luY2x1ZGUgPGxpbnV4L2RlbGF5 Lmg+DQorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPg0KKyNpbmNsdWRlIDxsaW51eC9tYXRo NjQuaD4NCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+DQorI2luY2x1ZGUgPGxpbnV4L29mLmg+ DQorI2luY2x1ZGUgPGxpbnV4L29mX2dyYXBoLmg+DQorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3Jt X2RldmljZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+DQorI2luY2x1ZGUgPGxp bnV4L3JlZ21hcC5oPg0KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4NCisNCisjaW5jbHVk ZSA8bWVkaWEvdjRsMi1jdHJscy5oPg0KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPg0K KyNpbmNsdWRlIDxtZWRpYS92NGwyLWV2ZW50Lmg+DQorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW1h Z2Utc2l6ZXMuaD4NCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPg0KKyNpbmNsdWRlIDxt ZWRpYS92NGwyLWZ3bm9kZS5oPg0KKyNpbmNsdWRlIDxtZWRpYS92NGwyLXN1YmRldi5oPg0KKyNp bmNsdWRlIDxtZWRpYS92aWRlb2J1ZjItZG1hLWNvbnRpZy5oPg0KKw0KKyNpbmNsdWRlICJhdG1l bC1pc2MtcmVncy5oIg0KKyNpbmNsdWRlICJhdG1lbC1pc2MuaCINCisNCisvKiBUaGlzIGlzIGEg bGlzdCBvZiB0aGUgZm9ybWF0cyB0aGF0IHRoZSBJU0MgY2FuICpvdXRwdXQqICovDQorc3RydWN0 IGlzY19mb3JtYXQgY29udHJvbGxlcl9mb3JtYXRzW10gPSB7DQorCXsNCisJCS5mb3VyY2MJCT0g VjRMMl9QSVhfRk1UX0FSR0I0NDQsDQorCX0sDQorCXsNCisJCS5mb3VyY2MJCT0gVjRMMl9QSVhf Rk1UX0FSR0I1NTUsDQorCX0sDQorCXsNCisJCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1JHQjU2 NSwNCisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfQUJHUjMyLA0KKwl9LA0K Kwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9YQkdSMzIsDQorCX0sDQorCXsNCisJCS5m b3VyY2MJCT0gVjRMMl9QSVhfRk1UX1lVVjQyMCwNCisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBW NEwyX1BJWF9GTVRfWVVZViwNCisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRf WVVWNDIyUCwNCisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfR1JFWSwNCisJ fSwNCit9Ow0KKw0KKy8qIFRoaXMgaXMgYSBsaXN0IG9mIGZvcm1hdHMgdGhhdCB0aGUgSVNDIGNh biByZWNlaXZlIGFzICppbnB1dCogKi8NCitzdHJ1Y3QgaXNjX2Zvcm1hdCBmb3JtYXRzX2xpc3Rb XSA9IHsNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0JHR1I4LA0KKwkJLm1idXNf Y29kZQk9IE1FRElBX0JVU19GTVRfU0JHR1I4XzFYOCwNCisJCS5wZmVfY2ZnMF9icHMJPSBJU0Nf UEZFX0NGRzBfQlBTX0VJR0hULA0KKwkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19CR0JHLA0K Kwl9LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TR0JSRzgsDQorCQkubWJ1c19j b2RlCT0gTUVESUFfQlVTX0ZNVF9TR0JSRzhfMVg4LA0KKwkJLnBmZV9jZmcwX2Jwcwk9IElTQ19Q RkVfQ0ZHMF9CUFNfRUlHSFQsDQorCQkuY2ZhX2JheWNmZwk9IElTQ19CQVlfQ0ZHX0dCR0IsDQor CX0sDQorCXsNCisJCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1NHUkJHOCwNCisJCS5tYnVzX2Nv ZGUJPSBNRURJQV9CVVNfRk1UX1NHUkJHOF8xWDgsDQorCQkucGZlX2NmZzBfYnBzCT0gSVNDX1BG RV9DRkcwX0JQU19FSUdIVCwNCisJCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfR1JHUiwNCisJ fSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU1JHR0I4LA0KKwkJLm1idXNfY29k ZQk9IE1FRElBX0JVU19GTVRfU1JHR0I4XzFYOCwNCisJCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZF X0NGRzBfQlBTX0VJR0hULA0KKwkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19SR1JHLA0KKwl9 LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TQkdHUjEwLA0KKwkJLm1idXNfY29k ZQk9IE1FRElBX0JVU19GTVRfU0JHR1IxMF8xWDEwLA0KKwkJLnBmZV9jZmcwX2Jwcwk9IElTQ19Q RkdfQ0ZHMF9CUFNfVEVOLA0KKwkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19SR1JHLA0KKwl9 LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TR0JSRzEwLA0KKwkJLm1idXNfY29k ZQk9IE1FRElBX0JVU19GTVRfU0dCUkcxMF8xWDEwLA0KKwkJLnBmZV9jZmcwX2Jwcwk9IElTQ19Q RkdfQ0ZHMF9CUFNfVEVOLA0KKwkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19HQkdCLA0KKwl9 LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TR1JCRzEwLA0KKwkJLm1idXNfY29k ZQk9IE1FRElBX0JVU19GTVRfU0dSQkcxMF8xWDEwLA0KKwkJLnBmZV9jZmcwX2Jwcwk9IElTQ19Q RkdfQ0ZHMF9CUFNfVEVOLA0KKwkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19HUkdSLA0KKwl9 LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TUkdHQjEwLA0KKwkJLm1idXNfY29k ZQk9IE1FRElBX0JVU19GTVRfU1JHR0IxMF8xWDEwLA0KKwkJLnBmZV9jZmcwX2Jwcwk9IElTQ19Q RkdfQ0ZHMF9CUFNfVEVOLA0KKwkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19SR1JHLA0KKwl9 LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TQkdHUjEyLA0KKwkJLm1idXNfY29k ZQk9IE1FRElBX0JVU19GTVRfU0JHR1IxMl8xWDEyLA0KKwkJLnBmZV9jZmcwX2Jwcwk9IElTQ19Q RkdfQ0ZHMF9CUFNfVFdFTFZFLA0KKwkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19CR0JHLA0K Kwl9LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TR0JSRzEyLA0KKwkJLm1idXNf Y29kZQk9IE1FRElBX0JVU19GTVRfU0dCUkcxMl8xWDEyLA0KKwkJLnBmZV9jZmcwX2Jwcwk9IElT Q19QRkdfQ0ZHMF9CUFNfVFdFTFZFLA0KKwkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19HQkdC LA0KKwl9LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TR1JCRzEyLA0KKwkJLm1i dXNfY29kZQk9IE1FRElBX0JVU19GTVRfU0dSQkcxMl8xWDEyLA0KKwkJLnBmZV9jZmcwX2Jwcwk9 IElTQ19QRkdfQ0ZHMF9CUFNfVFdFTFZFLA0KKwkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19H UkdSLA0KKwl9LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TUkdHQjEyLA0KKwkJ Lm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfU1JHR0IxMl8xWDEyLA0KKwkJLnBmZV9jZmcwX2Jw cwk9IElTQ19QRkdfQ0ZHMF9CUFNfVFdFTFZFLA0KKwkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NG R19SR1JHLA0KKwl9LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9HUkVZLA0KKwkJ Lm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfWThfMVg4LA0KKwkJLnBmZV9jZmcwX2Jwcwk9IElT Q19QRkVfQ0ZHMF9CUFNfRUlHSFQsDQorCX0sDQorCXsNCisJCS5mb3VyY2MJCT0gVjRMMl9QSVhf Rk1UX1lVWVYsDQorCQkubWJ1c19jb2RlCT0gTUVESUFfQlVTX0ZNVF9ZVVlWOF8yWDgsDQorCQku cGZlX2NmZzBfYnBzCT0gSVNDX1BGRV9DRkcwX0JQU19FSUdIVCwNCisJfSwNCisJew0KKwkJLmZv dXJjYwkJPSBWNEwyX1BJWF9GTVRfUkdCNTY1LA0KKwkJLm1idXNfY29kZQk9IE1FRElBX0JVU19G TVRfUkdCNTY1XzJYOF9MRSwNCisJCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZFX0NGRzBfQlBTX0VJ R0hULA0KKwl9LA0KK307DQorDQorLyogR2FtbWEgdGFibGUgd2l0aCBnYW1tYSAxLzIuMiAqLw0K K2NvbnN0IHUzMiBpc2NfZ2FtbWFfdGFibGVbR0FNTUFfTUFYICsgMV1bR0FNTUFfRU5UUklFU10g PSB7DQorCS8qIDAgLS0+IGdhbW1hIDEvMS44ICovDQorCXsgICAgICAweDY1LCAgMHg2NjAwMkYs ICAweDk1MDAyNSwgIDB4QkIwMDIwLCAgMHhEQjAwMUQsICAweEY4MDAxQSwNCisJICAweDExMzAw MTgsIDB4MTJCMDAxNywgMHgxNDIwMDE2LCAweDE1ODAwMTQsIDB4MTZEMDAxMywgMHgxODEwMDEy LA0KKwkgIDB4MTk0MDAxMiwgMHgxQTYwMDEyLCAweDFCODAwMTEsIDB4MUM5MDAxMCwgMHgxREEw MDEwLCAweDFFQTAwMEYsDQorCSAgMHgxRkEwMDBGLCAweDIwOTAwMEYsIDB4MjE4MDAwRiwgMHgy MjcwMDBFLCAweDIzNTAwMEUsIDB4MjQzMDAwRSwNCisJICAweDI1MTAwMEUsIDB4MjVGMDAwRCwg MHgyNkMwMDBELCAweDI3OTAwMEQsIDB4Mjg2MDAwRCwgMHgyOTMwMDBDLA0KKwkgIDB4MkEwMDAw QywgMHgyQUMwMDBDLCAweDJCODAwMEMsIDB4MkM0MDAwQywgMHgyRDAwMDBCLCAweDJEQzAwMEIs DQorCSAgMHgyRTcwMDBCLCAweDJGMzAwMEIsIDB4MkZFMDAwQiwgMHgzMDkwMDBCLCAweDMxNDAw MEIsIDB4MzFGMDAwQSwNCisJICAweDMyQTAwMEEsIDB4MzM0MDAwQiwgMHgzM0YwMDBBLCAweDM0 OTAwMEEsIDB4MzU0MDAwQSwgMHgzNUUwMDBBLA0KKwkgIDB4MzY4MDAwQSwgMHgzNzIwMDBBLCAw eDM3QzAwMEEsIDB4Mzg2MDAwQSwgMHgzOTAwMDA5LCAweDM5OTAwMEEsDQorCSAgMHgzQTMwMDA5 LCAweDNBRDAwMDksIDB4M0I2MDAwOSwgMHgzQkYwMDBBLCAweDNDOTAwMDksIDB4M0QyMDAwOSwN CisJICAweDNEQjAwMDksIDB4M0U0MDAwOSwgMHgzRUQwMDA5LCAweDNGNjAwMDkgfSwNCisNCisJ LyogMSAtLT4gZ2FtbWEgMS8yICovDQorCXsgICAgICAweDdGLCAgMHg4MDAwMzQsICAweEI1MDAy OCwgIDB4REUwMDIxLCAweDEwMDAwMUUsIDB4MTFFMDAxQiwNCisJICAweDEzOTAwMTksIDB4MTUy MDAxNywgMHgxNkEwMDE1LCAweDE4MDAwMTQsIDB4MTk0MDAxNCwgMHgxQTgwMDEzLA0KKwkgIDB4 MUJCMDAxMiwgMHgxQ0QwMDExLCAweDFERjAwMTAsIDB4MUVGMDAxMCwgMHgyMDAwMDBGLCAweDIw RjAwMEYsDQorCSAgMHgyMUYwMDBFLCAweDIyRDAwMEYsIDB4MjNDMDAwRSwgMHgyNEEwMDBFLCAw eDI1ODAwMEQsIDB4MjY1MDAwRCwNCisJICAweDI3MzAwMEMsIDB4MjdGMDAwRCwgMHgyOEMwMDBD LCAweDI5OTAwMEMsIDB4MkE1MDAwQywgMHgyQjEwMDBCLA0KKwkgIDB4MkJDMDAwQywgMHgyQzgw MDBCLCAweDJEMzAwMEMsIDB4MkRGMDAwQiwgMHgyRUEwMDBBLCAweDJGNTAwMEEsDQorCSAgMHgy RkYwMDBCLCAweDMwQTAwMEEsIDB4MzE0MDAwQiwgMHgzMUYwMDBBLCAweDMyOTAwMEEsIDB4MzMz MDAwQSwNCisJICAweDMzRDAwMDksIDB4MzQ3MDAwOSwgMHgzNTAwMDBBLCAweDM1QTAwMDksIDB4 MzYzMDAwQSwgMHgzNkQwMDA5LA0KKwkgIDB4Mzc2MDAwOSwgMHgzN0YwMDA5LCAweDM4ODAwMDks IDB4MzkxMDAwOSwgMHgzOUEwMDA5LCAweDNBMzAwMDksDQorCSAgMHgzQUMwMDA4LCAweDNCNDAw MDksIDB4M0JEMDAwOCwgMHgzQzYwMDA4LCAweDNDRTAwMDgsIDB4M0Q2MDAwOSwNCisJICAweDNE RjAwMDgsIDB4M0U3MDAwOCwgMHgzRUYwMDA4LCAweDNGNzAwMDggfSwNCisNCisJLyogMiAtLT4g Z2FtbWEgMS8yLjIgKi8NCisJeyAgICAgIDB4OTksICAweDlCMDAzOCwgIDB4RDQwMDJBLCAgMHhG RjAwMjMsIDB4MTIyMDAxRiwgMHgxNDEwMDFCLA0KKwkgIDB4MTVEMDAxOSwgMHgxNzYwMDE3LCAw eDE4RTAwMTUsIDB4MUEzMDAxNSwgMHgxQjgwMDEzLCAweDFDQzAwMTIsDQorCSAgMHgxREUwMDEx LCAweDFGMDAwMTAsIDB4MjAxMDAxMCwgMHgyMTEwMDEwLCAweDIyMTAwMEYsIDB4MjMwMDAwRiwN CisJICAweDIzRjAwMEUsIDB4MjREMDAwRSwgMHgyNUIwMDBELCAweDI2OTAwMEMsIDB4Mjc2MDAw QywgMHgyODMwMDBDLA0KKwkgIDB4MjhGMDAwQywgMHgyOUIwMDBDLCAweDJBNzAwMEMsIDB4MkIz MDAwQiwgMHgyQkYwMDBCLCAweDJDQTAwMEIsDQorCSAgMHgyRDUwMDBCLCAweDJFMDAwMEEsIDB4 MkVCMDAwQSwgMHgyRjUwMDBBLCAweDJGRjAwMEEsIDB4MzBBMDAwQSwNCisJICAweDMxNDAwMDks IDB4MzFFMDAwOSwgMHgzMjcwMDBBLCAweDMzMTAwMDksIDB4MzNBMDAwOSwgMHgzNDQwMDA5LA0K KwkgIDB4MzREMDAwOSwgMHgzNTYwMDA5LCAweDM1RjAwMDksIDB4MzY4MDAwOCwgMHgzNzEwMDA4 LCAweDM3OTAwMDksDQorCSAgMHgzODIwMDA4LCAweDM4QTAwMDgsIDB4MzkzMDAwOCwgMHgzOUIw MDA4LCAweDNBMzAwMDgsIDB4M0FCMDAwOCwNCisJICAweDNCMzAwMDgsIDB4M0JCMDAwOCwgMHgz QzMwMDA4LCAweDNDQjAwMDcsIDB4M0QyMDAwOCwgMHgzREEwMDA3LA0KKwkgIDB4M0UyMDAwNywg MHgzRTkwMDA3LCAweDNGMDAwMDgsIDB4M0Y4MDAwNyB9LA0KK307DQorDQorI2RlZmluZSBJU0Nf SVNfRk9STUFUX1JBVyhtYnVzX2NvZGUpIFwNCisJKCgobWJ1c19jb2RlKSAmIDB4ZjAwMCkgPT0g MHgzMDAwKQ0KKw0KK3N0YXRpYyBpbmxpbmUgdm9pZCBpc2NfdXBkYXRlX2F3Yl9jdHJscyhzdHJ1 Y3QgaXNjX2RldmljZSAqaXNjKQ0KK3sNCisJc3RydWN0IGlzY19jdHJscyAqY3RybHMgPSAmaXNj LT5jdHJsczsNCisNCisJcmVnbWFwX3dyaXRlKGlzYy0+cmVnbWFwLCBJU0NfV0JfT19SR1IsDQor CQkgICAgIChJU0NfV0JfT19aRVJPX1ZBTCAtIChjdHJscy0+b2Zmc2V0W0lTQ19ISVNfQ0ZHX01P REVfUl0pKSB8DQorCQkgICAgICgoSVNDX1dCX09fWkVST19WQUwgLSBjdHJscy0+b2Zmc2V0W0lT Q19ISVNfQ0ZHX01PREVfR1JdKSA8PCAxNikpOw0KKwlyZWdtYXBfd3JpdGUoaXNjLT5yZWdtYXAs IElTQ19XQl9PX0JHQiwNCisJCSAgICAgKElTQ19XQl9PX1pFUk9fVkFMIC0gKGN0cmxzLT5vZmZz ZXRbSVNDX0hJU19DRkdfTU9ERV9CXSkpIHwNCisJCSAgICAgKChJU0NfV0JfT19aRVJPX1ZBTCAt IGN0cmxzLT5vZmZzZXRbSVNDX0hJU19DRkdfTU9ERV9HQl0pIDw8IDE2KSk7DQorCXJlZ21hcF93 cml0ZShpc2MtPnJlZ21hcCwgSVNDX1dCX0dfUkdSLA0KKwkJICAgICBjdHJscy0+Z2FpbltJU0Nf SElTX0NGR19NT0RFX1JdIHwNCisJCSAgICAgKGN0cmxzLT5nYWluW0lTQ19ISVNfQ0ZHX01PREVf R1JdIDw8IDE2KSk7DQorCXJlZ21hcF93cml0ZShpc2MtPnJlZ21hcCwgSVNDX1dCX0dfQkdCLA0K KwkJICAgICBjdHJscy0+Z2FpbltJU0NfSElTX0NGR19NT0RFX0JdIHwNCisJCSAgICAgKGN0cmxz LT5nYWluW0lTQ19ISVNfQ0ZHX01PREVfR0JdIDw8IDE2KSk7DQorfQ0KKw0KK3N0YXRpYyBpbmxp bmUgdm9pZCBpc2NfcmVzZXRfYXdiX2N0cmxzKHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQorew0K KwlpbnQgYzsNCisNCisJZm9yIChjID0gSVNDX0hJU19DRkdfTU9ERV9HUjsgYyA8PSBJU0NfSElT X0NGR19NT0RFX0I7IGMrKykgew0KKwkJLyogZ2FpbnMgaGF2ZSBhIGZpeGVkIHBvaW50IGF0IDkg ZGVjaW1hbHMgKi8NCisJCWlzYy0+Y3RybHMuZ2FpbltjXSA9IDEgPDwgOTsNCisJCS8qIG9mZnNl dHMgYXJlIGluIDIncyBjb21wbGVtZW50cywgdGhlIHZhbHVlDQorCQkgKiB3aWxsIGJlIHN1YnN0 cmFjdGVkIGZyb20gSVNDX1dCX09fWkVST19WQUwgdG8gb2J0YWluDQorCQkgKiAyJ3MgY29tcGxl bWVudCBvZiBhIHZhbHVlIGJldHdlZW4gMCBhbmQNCisJCSAqIElTQ19XQl9PX1pFUk9fVkFMID4+ IDENCisJCSAqLw0KKwkJaXNjLT5jdHJscy5vZmZzZXRbY10gPSBJU0NfV0JfT19aRVJPX1ZBTDsN CisJfQ0KK30NCisNCitzdGF0aWMgaW50IGlzY193YWl0X2Nsa19zdGFibGUoc3RydWN0IGNsa19o dyAqaHcpDQorew0KKwlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0K KwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBpc2NfY2xrLT5yZWdtYXA7DQorCXVuc2lnbmVkIGxv bmcgdGltZW91dCA9IGppZmZpZXMgKyB1c2Vjc190b19qaWZmaWVzKDEwMDApOw0KKwl1bnNpZ25l ZCBpbnQgc3RhdHVzOw0KKw0KKwl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkp IHsNCisJCXJlZ21hcF9yZWFkKHJlZ21hcCwgSVNDX0NMS1NSLCAmc3RhdHVzKTsNCisJCWlmICgh KHN0YXR1cyAmIElTQ19DTEtTUl9TSVApKQ0KKwkJCXJldHVybiAwOw0KKw0KKwkJdXNsZWVwX3Jh bmdlKDEwLCAyNTApOw0KKwl9DQorDQorCXJldHVybiAtRVRJTUVET1VUOw0KK30NCisNCitzdGF0 aWMgaW50IGlzY19jbGtfcHJlcGFyZShzdHJ1Y3QgY2xrX2h3ICpodykNCit7DQorCXN0cnVjdCBp c2NfY2xrICppc2NfY2xrID0gdG9faXNjX2Nsayhodyk7DQorDQorCWlmIChpc2NfY2xrLT5pZCA9 PSBJU0NfSVNQQ0spDQorCQlwbV9ydW50aW1lX2dldF9zeW5jKGlzY19jbGstPmRldik7DQorDQor CXJldHVybiBpc2Nfd2FpdF9jbGtfc3RhYmxlKGh3KTsNCit9DQorDQorc3RhdGljIHZvaWQgaXNj X2Nsa191bnByZXBhcmUoc3RydWN0IGNsa19odyAqaHcpDQorew0KKwlzdHJ1Y3QgaXNjX2NsayAq aXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0KKw0KKwlpc2Nfd2FpdF9jbGtfc3RhYmxlKGh3KTsN CisNCisJaWYgKGlzY19jbGstPmlkID09IElTQ19JU1BDSykNCisJCXBtX3J1bnRpbWVfcHV0X3N5 bmMoaXNjX2Nsay0+ZGV2KTsNCit9DQorDQorc3RhdGljIGludCBpc2NfY2xrX2VuYWJsZShzdHJ1 Y3QgY2xrX2h3ICpodykNCit7DQorCXN0cnVjdCBpc2NfY2xrICppc2NfY2xrID0gdG9faXNjX2Ns ayhodyk7DQorCXUzMiBpZCA9IGlzY19jbGstPmlkOw0KKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAg PSBpc2NfY2xrLT5yZWdtYXA7DQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQorCXVuc2lnbmVkIGlu dCBzdGF0dXM7DQorDQorCWRldl9kYmcoaXNjX2Nsay0+ZGV2LCAiSVNDIENMSzogJXMsIGRpdiA9 ICVkLCBwYXJlbnQgaWQgPSAlZFxuIiwNCisJCV9fZnVuY19fLCBpc2NfY2xrLT5kaXYsIGlzY19j bGstPnBhcmVudF9pZCk7DQorDQorCXNwaW5fbG9ja19pcnFzYXZlKCZpc2NfY2xrLT5sb2NrLCBm bGFncyk7DQorCXJlZ21hcF91cGRhdGVfYml0cyhyZWdtYXAsIElTQ19DTEtDRkcsDQorCQkJICAg SVNDX0NMS0NGR19ESVZfTUFTSyhpZCkgfCBJU0NfQ0xLQ0ZHX1NFTF9NQVNLKGlkKSwNCisJCQkg ICAoaXNjX2Nsay0+ZGl2IDw8IElTQ19DTEtDRkdfRElWX1NISUZUKGlkKSkgfA0KKwkJCSAgIChp c2NfY2xrLT5wYXJlbnRfaWQgPDwgSVNDX0NMS0NGR19TRUxfU0hJRlQoaWQpKSk7DQorDQorCXJl Z21hcF93cml0ZShyZWdtYXAsIElTQ19DTEtFTiwgSVNDX0NMSyhpZCkpOw0KKwlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZpc2NfY2xrLT5sb2NrLCBmbGFncyk7DQorDQorCXJlZ21hcF9yZWFkKHJl Z21hcCwgSVNDX0NMS1NSLCAmc3RhdHVzKTsNCisJaWYgKHN0YXR1cyAmIElTQ19DTEsoaWQpKQ0K KwkJcmV0dXJuIDA7DQorCWVsc2UNCisJCXJldHVybiAtRUlOVkFMOw0KK30NCisNCitzdGF0aWMg dm9pZCBpc2NfY2xrX2Rpc2FibGUoc3RydWN0IGNsa19odyAqaHcpDQorew0KKwlzdHJ1Y3QgaXNj X2NsayAqaXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0KKwl1MzIgaWQgPSBpc2NfY2xrLT5pZDsN CisJdW5zaWduZWQgbG9uZyBmbGFnczsNCisNCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlzY19jbGst PmxvY2ssIGZsYWdzKTsNCisJcmVnbWFwX3dyaXRlKGlzY19jbGstPnJlZ21hcCwgSVNDX0NMS0RJ UywgSVNDX0NMSyhpZCkpOw0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc2NfY2xrLT5sb2Nr LCBmbGFncyk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNjX2Nsa19pc19lbmFibGVkKHN0cnVjdCBj bGtfaHcgKmh3KQ0KK3sNCisJc3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSB0b19pc2NfY2xrKGh3 KTsNCisJdTMyIHN0YXR1czsNCisNCisJaWYgKGlzY19jbGstPmlkID09IElTQ19JU1BDSykNCisJ CXBtX3J1bnRpbWVfZ2V0X3N5bmMoaXNjX2Nsay0+ZGV2KTsNCisNCisJcmVnbWFwX3JlYWQoaXNj X2Nsay0+cmVnbWFwLCBJU0NfQ0xLU1IsICZzdGF0dXMpOw0KKw0KKwlpZiAoaXNjX2Nsay0+aWQg PT0gSVNDX0lTUENLKQ0KKwkJcG1fcnVudGltZV9wdXRfc3luYyhpc2NfY2xrLT5kZXYpOw0KKw0K KwlyZXR1cm4gc3RhdHVzICYgSVNDX0NMSyhpc2NfY2xrLT5pZCkgPyAxIDogMDsNCit9DQorDQor c3RhdGljIHVuc2lnbmVkIGxvbmcNCitpc2NfY2xrX3JlY2FsY19yYXRlKHN0cnVjdCBjbGtfaHcg Kmh3LCB1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlKQ0KK3sNCisJc3RydWN0IGlzY19jbGsgKmlz Y19jbGsgPSB0b19pc2NfY2xrKGh3KTsNCisNCisJcmV0dXJuIERJVl9ST1VORF9DTE9TRVNUKHBh cmVudF9yYXRlLCBpc2NfY2xrLT5kaXYgKyAxKTsNCit9DQorDQorc3RhdGljIGludCBpc2NfY2xr X2RldGVybWluZV9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LA0KKwkJCQkgICBzdHJ1Y3QgY2xrX3Jh dGVfcmVxdWVzdCAqcmVxKQ0KK3sNCisJc3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSB0b19pc2Nf Y2xrKGh3KTsNCisJbG9uZyBiZXN0X3JhdGUgPSAtRUlOVkFMOw0KKwlpbnQgYmVzdF9kaWZmID0g LTE7DQorCXVuc2lnbmVkIGludCBpLCBkaXY7DQorDQorCWZvciAoaSA9IDA7IGkgPCBjbGtfaHdf Z2V0X251bV9wYXJlbnRzKGh3KTsgaSsrKSB7DQorCQlzdHJ1Y3QgY2xrX2h3ICpwYXJlbnQ7DQor CQl1bnNpZ25lZCBsb25nIHBhcmVudF9yYXRlOw0KKw0KKwkJcGFyZW50ID0gY2xrX2h3X2dldF9w YXJlbnRfYnlfaW5kZXgoaHcsIGkpOw0KKwkJaWYgKCFwYXJlbnQpDQorCQkJY29udGludWU7DQor DQorCQlwYXJlbnRfcmF0ZSA9IGNsa19od19nZXRfcmF0ZShwYXJlbnQpOw0KKwkJaWYgKCFwYXJl bnRfcmF0ZSkNCisJCQljb250aW51ZTsNCisNCisJCWZvciAoZGl2ID0gMTsgZGl2IDwgSVNDX0NM S19NQVhfRElWICsgMjsgZGl2KyspIHsNCisJCQl1bnNpZ25lZCBsb25nIHJhdGU7DQorCQkJaW50 IGRpZmY7DQorDQorCQkJcmF0ZSA9IERJVl9ST1VORF9DTE9TRVNUKHBhcmVudF9yYXRlLCBkaXYp Ow0KKwkJCWRpZmYgPSBhYnMocmVxLT5yYXRlIC0gcmF0ZSk7DQorDQorCQkJaWYgKGJlc3RfZGlm ZiA8IDAgfHwgYmVzdF9kaWZmID4gZGlmZikgew0KKwkJCQliZXN0X3JhdGUgPSByYXRlOw0KKwkJ CQliZXN0X2RpZmYgPSBkaWZmOw0KKwkJCQlyZXEtPmJlc3RfcGFyZW50X3JhdGUgPSBwYXJlbnRf cmF0ZTsNCisJCQkJcmVxLT5iZXN0X3BhcmVudF9odyA9IHBhcmVudDsNCisJCQl9DQorDQorCQkJ aWYgKCFiZXN0X2RpZmYgfHwgcmF0ZSA8IHJlcS0+cmF0ZSkNCisJCQkJYnJlYWs7DQorCQl9DQor DQorCQlpZiAoIWJlc3RfZGlmZikNCisJCQlicmVhazsNCisJfQ0KKw0KKwlkZXZfZGJnKGlzY19j bGstPmRldiwNCisJCSJJU0MgQ0xLOiAlcywgYmVzdF9yYXRlID0gJWxkLCBwYXJlbnQgY2xrOiAl cyBAICVsZFxuIiwNCisJCV9fZnVuY19fLCBiZXN0X3JhdGUsDQorCQlfX2Nsa19nZXRfbmFtZSgo cmVxLT5iZXN0X3BhcmVudF9odyktPmNsayksDQorCQlyZXEtPmJlc3RfcGFyZW50X3JhdGUpOw0K Kw0KKwlpZiAoYmVzdF9yYXRlIDwgMCkNCisJCXJldHVybiBiZXN0X3JhdGU7DQorDQorCXJlcS0+ cmF0ZSA9IGJlc3RfcmF0ZTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNj X2Nsa19zZXRfcGFyZW50KHN0cnVjdCBjbGtfaHcgKmh3LCB1OCBpbmRleCkNCit7DQorCXN0cnVj dCBpc2NfY2xrICppc2NfY2xrID0gdG9faXNjX2Nsayhodyk7DQorDQorCWlmIChpbmRleCA+PSBj bGtfaHdfZ2V0X251bV9wYXJlbnRzKGh3KSkNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwlpc2Nf Y2xrLT5wYXJlbnRfaWQgPSBpbmRleDsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB1 OCBpc2NfY2xrX2dldF9wYXJlbnQoc3RydWN0IGNsa19odyAqaHcpDQorew0KKwlzdHJ1Y3QgaXNj X2NsayAqaXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0KKw0KKwlyZXR1cm4gaXNjX2Nsay0+cGFy ZW50X2lkOw0KK30NCisNCitzdGF0aWMgaW50IGlzY19jbGtfc2V0X3JhdGUoc3RydWN0IGNsa19o dyAqaHcsDQorCQkJICAgICB1bnNpZ25lZCBsb25nIHJhdGUsDQorCQkJICAgICB1bnNpZ25lZCBs b25nIHBhcmVudF9yYXRlKQ0KK3sNCisJc3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSB0b19pc2Nf Y2xrKGh3KTsNCisJdTMyIGRpdjsNCisNCisJaWYgKCFyYXRlKQ0KKwkJcmV0dXJuIC1FSU5WQUw7 DQorDQorCWRpdiA9IERJVl9ST1VORF9DTE9TRVNUKHBhcmVudF9yYXRlLCByYXRlKTsNCisJaWYg KGRpdiA+IChJU0NfQ0xLX01BWF9ESVYgKyAxKSB8fCAhZGl2KQ0KKwkJcmV0dXJuIC1FSU5WQUw7 DQorDQorCWlzY19jbGstPmRpdiA9IGRpdiAtIDE7DQorDQorCXJldHVybiAwOw0KK30NCisNCitz dGF0aWMgY29uc3Qgc3RydWN0IGNsa19vcHMgaXNjX2Nsa19vcHMgPSB7DQorCS5wcmVwYXJlCT0g aXNjX2Nsa19wcmVwYXJlLA0KKwkudW5wcmVwYXJlCT0gaXNjX2Nsa191bnByZXBhcmUsDQorCS5l bmFibGUJCT0gaXNjX2Nsa19lbmFibGUsDQorCS5kaXNhYmxlCT0gaXNjX2Nsa19kaXNhYmxlLA0K KwkuaXNfZW5hYmxlZAk9IGlzY19jbGtfaXNfZW5hYmxlZCwNCisJLnJlY2FsY19yYXRlCT0gaXNj X2Nsa19yZWNhbGNfcmF0ZSwNCisJLmRldGVybWluZV9yYXRlCT0gaXNjX2Nsa19kZXRlcm1pbmVf cmF0ZSwNCisJLnNldF9wYXJlbnQJPSBpc2NfY2xrX3NldF9wYXJlbnQsDQorCS5nZXRfcGFyZW50 CT0gaXNjX2Nsa19nZXRfcGFyZW50LA0KKwkuc2V0X3JhdGUJPSBpc2NfY2xrX3NldF9yYXRlLA0K K307DQorDQorc3RhdGljIGludCBpc2NfY2xrX3JlZ2lzdGVyKHN0cnVjdCBpc2NfZGV2aWNlICpp c2MsIHVuc2lnbmVkIGludCBpZCkNCit7DQorCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+ cmVnbWFwOw0KKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wID0gaXNjLT5kZXYtPm9mX25vZGU7DQor CXN0cnVjdCBpc2NfY2xrICppc2NfY2xrOw0KKwlzdHJ1Y3QgY2xrX2luaXRfZGF0YSBpbml0Ow0K Kwljb25zdCBjaGFyICpjbGtfbmFtZSA9IG5wLT5uYW1lOw0KKwljb25zdCBjaGFyICpwYXJlbnRf bmFtZXNbM107DQorCWludCBudW1fcGFyZW50czsNCisNCisJbnVtX3BhcmVudHMgPSBvZl9jbGtf Z2V0X3BhcmVudF9jb3VudChucCk7DQorCWlmIChudW1fcGFyZW50cyA8IDEgfHwgbnVtX3BhcmVu dHMgPiAzKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCWlmIChudW1fcGFyZW50cyA+IDIgJiYg aWQgPT0gSVNDX0lTUENLKQ0KKwkJbnVtX3BhcmVudHMgPSAyOw0KKw0KKwlvZl9jbGtfcGFyZW50 X2ZpbGwobnAsIHBhcmVudF9uYW1lcywgbnVtX3BhcmVudHMpOw0KKw0KKwlpZiAoaWQgPT0gSVND X01DSykNCisJCW9mX3Byb3BlcnR5X3JlYWRfc3RyaW5nKG5wLCAiY2xvY2stb3V0cHV0LW5hbWVz IiwgJmNsa19uYW1lKTsNCisJZWxzZQ0KKwkJY2xrX25hbWUgPSAiaXNjLWlzcGNrIjsNCisNCisJ aW5pdC5wYXJlbnRfbmFtZXMJPSBwYXJlbnRfbmFtZXM7DQorCWluaXQubnVtX3BhcmVudHMJPSBu dW1fcGFyZW50czsNCisJaW5pdC5uYW1lCQk9IGNsa19uYW1lOw0KKwlpbml0Lm9wcwkJPSAmaXNj X2Nsa19vcHM7DQorCWluaXQuZmxhZ3MJCT0gQ0xLX1NFVF9SQVRFX0dBVEUgfCBDTEtfU0VUX1BB UkVOVF9HQVRFOw0KKw0KKwlpc2NfY2xrID0gJmlzYy0+aXNjX2Nsa3NbaWRdOw0KKwlpc2NfY2xr LT5ody5pbml0CT0gJmluaXQ7DQorCWlzY19jbGstPnJlZ21hcAkJPSByZWdtYXA7DQorCWlzY19j bGstPmlkCQk9IGlkOw0KKwlpc2NfY2xrLT5kZXYJCT0gaXNjLT5kZXY7DQorCXNwaW5fbG9ja19p bml0KCZpc2NfY2xrLT5sb2NrKTsNCisNCisJaXNjX2Nsay0+Y2xrID0gY2xrX3JlZ2lzdGVyKGlz Yy0+ZGV2LCAmaXNjX2Nsay0+aHcpOw0KKwlpZiAoSVNfRVJSKGlzY19jbGstPmNsaykpIHsNCisJ CWRldl9lcnIoaXNjLT5kZXYsICIlczogY2xvY2sgcmVnaXN0ZXIgZmFpbFxuIiwgY2xrX25hbWUp Ow0KKwkJcmV0dXJuIFBUUl9FUlIoaXNjX2Nsay0+Y2xrKTsNCisJfSBlbHNlIGlmIChpZCA9PSBJ U0NfTUNLKQ0KKwkJb2ZfY2xrX2FkZF9wcm92aWRlcihucCwgb2ZfY2xrX3NyY19zaW1wbGVfZ2V0 LCBpc2NfY2xrLT5jbGspOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQoraW50IGlzY19jbGtfaW5p dChzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KK3sNCisJdW5zaWduZWQgaW50IGk7DQorCWludCBy ZXQ7DQorDQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlzYy0+aXNjX2Nsa3MpOyBpKysp DQorCQlpc2MtPmlzY19jbGtzW2ldLmNsayA9IEVSUl9QVFIoLUVJTlZBTCk7DQorDQorCWZvciAo aSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlzYy0+aXNjX2Nsa3MpOyBpKyspIHsNCisJCXJldCA9IGlz Y19jbGtfcmVnaXN0ZXIoaXNjLCBpKTsNCisJCWlmIChyZXQpDQorCQkJcmV0dXJuIHJldDsNCisJ fQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQordm9pZCBpc2NfY2xrX2NsZWFudXAoc3RydWN0IGlz Y19kZXZpY2UgKmlzYykNCit7DQorCXVuc2lnbmVkIGludCBpOw0KKw0KKwlvZl9jbGtfZGVsX3By b3ZpZGVyKGlzYy0+ZGV2LT5vZl9ub2RlKTsNCisNCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJ WkUoaXNjLT5pc2NfY2xrcyk7IGkrKykgew0KKwkJc3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSAm aXNjLT5pc2NfY2xrc1tpXTsNCisNCisJCWlmICghSVNfRVJSKGlzY19jbGstPmNsaykpDQorCQkJ Y2xrX3VucmVnaXN0ZXIoaXNjX2Nsay0+Y2xrKTsNCisJfQ0KK30NCisNCitzdGF0aWMgaW50IGlz Y19xdWV1ZV9zZXR1cChzdHJ1Y3QgdmIyX3F1ZXVlICp2cSwNCisJCQkgICAgdW5zaWduZWQgaW50 ICpuYnVmZmVycywgdW5zaWduZWQgaW50ICpucGxhbmVzLA0KKwkJCSAgICB1bnNpZ25lZCBpbnQg c2l6ZXNbXSwgc3RydWN0IGRldmljZSAqYWxsb2NfZGV2c1tdKQ0KK3sNCisJc3RydWN0IGlzY19k ZXZpY2UgKmlzYyA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpOw0KKwl1bnNpZ25lZCBpbnQgc2l6ZSA9 IGlzYy0+Zm10LmZtdC5waXguc2l6ZWltYWdlOw0KKw0KKwlpZiAoKm5wbGFuZXMpDQorCQlyZXR1 cm4gc2l6ZXNbMF0gPCBzaXplID8gLUVJTlZBTCA6IDA7DQorDQorCSpucGxhbmVzID0gMTsNCisJ c2l6ZXNbMF0gPSBzaXplOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBpc2Nf YnVmZmVyX3ByZXBhcmUoc3RydWN0IHZiMl9idWZmZXIgKnZiKQ0KK3sNCisJc3RydWN0IHZiMl92 NGwyX2J1ZmZlciAqdmJ1ZiA9IHRvX3ZiMl92NGwyX2J1ZmZlcih2Yik7DQorCXN0cnVjdCBpc2Nf ZGV2aWNlICppc2MgPSB2YjJfZ2V0X2Rydl9wcml2KHZiLT52YjJfcXVldWUpOw0KKwl1bnNpZ25l ZCBsb25nIHNpemUgPSBpc2MtPmZtdC5mbXQucGl4LnNpemVpbWFnZTsNCisNCisJaWYgKHZiMl9w bGFuZV9zaXplKHZiLCAwKSA8IHNpemUpIHsNCisJCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LCAi YnVmZmVyIHRvbyBzbWFsbCAoJWx1IDwgJWx1KVxuIiwNCisJCQkgdmIyX3BsYW5lX3NpemUodmIs IDApLCBzaXplKTsNCisJCXJldHVybiAtRUlOVkFMOw0KKwl9DQorDQorCXZiMl9zZXRfcGxhbmVf cGF5bG9hZCh2YiwgMCwgc2l6ZSk7DQorDQorCXZidWYtPmZpZWxkID0gaXNjLT5mbXQuZm10LnBp eC5maWVsZDsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGlzY19zdGFydF9k bWEoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCit7DQorCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9 IGlzYy0+cmVnbWFwOw0KKwl1MzIgc2l6ZWltYWdlID0gaXNjLT5mbXQuZm10LnBpeC5zaXplaW1h Z2U7DQorCXUzMiBkY3RybF9kdmlldzsNCisJZG1hX2FkZHJfdCBhZGRyMDsNCisJdTMyIGgsIHc7 DQorDQorCWggPSBpc2MtPmZtdC5mbXQucGl4LmhlaWdodDsNCisJdyA9IGlzYy0+Zm10LmZtdC5w aXgud2lkdGg7DQorDQorCS8qDQorCSAqIEluIGNhc2UgdGhlIHNlbnNvciBpcyBub3QgUkFXLCBp dCB3aWxsIG91dHB1dCBhIHBpeGVsICgxMi0xNiBiaXRzKQ0KKwkgKiB3aXRoIHR3byBzYW1wbGVz IG9uIHRoZSBJU0MgRGF0YSBidXMgKHdoaWNoIGlzIDgtMTIpDQorCSAqIElTQyB3aWxsIGNvdW50 IGVhY2ggc2FtcGxlLCBzbywgd2UgbmVlZCB0byBtdWx0aXBseSB0aGVzZSB2YWx1ZXMNCisJICog YnkgdHdvLCB0byBnZXQgdGhlIHJlYWwgbnVtYmVyIG9mIHNhbXBsZXMgZm9yIHRoZSByZXF1aXJl ZCBwaXhlbHMuDQorCSAqLw0KKwlpZiAoIUlTQ19JU19GT1JNQVRfUkFXKGlzYy0+Y29uZmlnLnNk X2Zvcm1hdC0+bWJ1c19jb2RlKSkgew0KKwkJaCA8PD0gMTsNCisJCXcgPDw9IDE7DQorCX0NCisN CisJLyoNCisJICogV2UgbGltaXQgdGhlIGNvbHVtbi9yb3cgY291bnQgdGhhdCB0aGUgSVNDIHdp bGwgb3V0cHV0IGFjY29yZGluZw0KKwkgKiB0byB0aGUgY29uZmlndXJlZCByZXNvbHV0aW9uIHRo YXQgd2Ugd2FudC4NCisJICogVGhpcyB3aWxsIGF2b2lkIHRoZSBzaXR1YXRpb24gd2hlcmUgdGhl IHNlbnNvciBpcyBtaXNjb25maWd1cmVkLA0KKwkgKiBzZW5kaW5nIG1vcmUgZGF0YSwgYW5kIHRo ZSBJU0Mgd2lsbCBqdXN0IHRha2UgaXQgYW5kIERNQSB0byBtZW1vcnksDQorCSAqIGNhdXNpbmcg Y29ycnVwdGlvbi4NCisJICovDQorCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19QRkVfQ0ZHMSwN CisJCSAgICAgKElTQ19QRkVfQ0ZHMV9DT0xNSU4oMCkgJiBJU0NfUEZFX0NGRzFfQ09MTUlOX01B U0spIHwNCisJCSAgICAgKElTQ19QRkVfQ0ZHMV9DT0xNQVgodyAtIDEpICYgSVNDX1BGRV9DRkcx X0NPTE1BWF9NQVNLKSk7DQorDQorCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19QRkVfQ0ZHMiwN CisJCSAgICAgKElTQ19QRkVfQ0ZHMl9ST1dNSU4oMCkgJiBJU0NfUEZFX0NGRzJfUk9XTUlOX01B U0spIHwNCisJCSAgICAgKElTQ19QRkVfQ0ZHMl9ST1dNQVgoaCAtIDEpICYgSVNDX1BGRV9DRkcy X1JPV01BWF9NQVNLKSk7DQorDQorCXJlZ21hcF91cGRhdGVfYml0cyhyZWdtYXAsIElTQ19QRkVf Q0ZHMCwNCisJCQkgICBJU0NfUEZFX0NGRzBfQ09MRU4gfCBJU0NfUEZFX0NGRzBfUk9XRU4sDQor CQkJICAgSVNDX1BGRV9DRkcwX0NPTEVOIHwgSVNDX1BGRV9DRkcwX1JPV0VOKTsNCisNCisJYWRk cjAgPSB2YjJfZG1hX2NvbnRpZ19wbGFuZV9kbWFfYWRkcigmaXNjLT5jdXJfZnJtLT52Yi52YjJf YnVmLCAwKTsNCisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0RBRDAsIGFkZHIwKTsNCisNCisJ c3dpdGNoIChpc2MtPmNvbmZpZy5mb3VyY2MpIHsNCisJY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIw Og0KKwkJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0RBRDEsIGFkZHIwICsgKHNpemVpbWFnZSAq IDIpIC8gMyk7DQorCQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfREFEMiwgYWRkcjAgKyAoc2l6 ZWltYWdlICogNSkgLyA2KTsNCisJCWJyZWFrOw0KKwljYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjJQ Og0KKwkJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0RBRDEsIGFkZHIwICsgc2l6ZWltYWdlIC8g Mik7DQorCQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfREFEMiwgYWRkcjAgKyAoc2l6ZWltYWdl ICogMykgLyA0KTsNCisJCWJyZWFrOw0KKwlkZWZhdWx0Og0KKwkJYnJlYWs7DQorCX0NCisNCisJ ZGN0cmxfZHZpZXcgPSBpc2MtPmNvbmZpZy5kY3RybF9kdmlldzsNCisNCisJcmVnbWFwX3dyaXRl KHJlZ21hcCwgSVNDX0RDVFJMLCBkY3RybF9kdmlldyB8IElTQ19EQ1RSTF9JRV9JUyk7DQorCXNw aW5fbG9jaygmaXNjLT5hd2JfbG9jayk7DQorCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DVFJM RU4sIElTQ19DVFJMX0NBUFRVUkUpOw0KKwlzcGluX3VubG9jaygmaXNjLT5hd2JfbG9jayk7DQor fQ0KKw0KK3N0YXRpYyB2b2lkIGlzY19zZXRfcGlwZWxpbmUoc3RydWN0IGlzY19kZXZpY2UgKmlz YywgdTMyIHBpcGVsaW5lKQ0KK3sNCisJc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjLT5yZWdt YXA7DQorCXN0cnVjdCBpc2NfY3RybHMgKmN0cmxzID0gJmlzYy0+Y3RybHM7DQorCXUzMiB2YWws IGJheV9jZmc7DQorCWNvbnN0IHUzMiAqZ2FtbWE7DQorCXVuc2lnbmVkIGludCBpOw0KKw0KKwkv KiBXQi0tPkNGQS0tPkNDLS0+R0FNLS0+Q1NDLS0+Q0JDLS0+U1VCNDIyLS0+U1VCNDIwICovDQor CWZvciAoaSA9IDA7IGkgPCBJU0NfUElQRV9MSU5FX05PREVfTlVNOyBpKyspIHsNCisJCXZhbCA9 IHBpcGVsaW5lICYgQklUKGkpID8gMSA6IDA7DQorCQlyZWdtYXBfZmllbGRfd3JpdGUoaXNjLT5w aXBlbGluZVtpXSwgdmFsKTsNCisJfQ0KKw0KKwlpZiAoIXBpcGVsaW5lKQ0KKwkJcmV0dXJuOw0K Kw0KKwliYXlfY2ZnID0gaXNjLT5jb25maWcuc2RfZm9ybWF0LT5jZmFfYmF5Y2ZnOw0KKw0KKwlp ZiAoY3RybHMtPmF3YiA9PSBJU0NfV0JfTk9ORSkNCisJCWlzY19yZXNldF9hd2JfY3RybHMoaXNj KTsNCisNCisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX1dCX0NGRywgYmF5X2NmZyk7DQorCWlz Y191cGRhdGVfYXdiX2N0cmxzKGlzYyk7DQorDQorCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19D RkFfQ0ZHLCBiYXlfY2ZnIHwgSVNDX0NGQV9DRkdfRUlUUE9MKTsNCisNCisJZ2FtbWEgPSAmaXNj X2dhbW1hX3RhYmxlW2N0cmxzLT5nYW1tYV9pbmRleF1bMF07DQorCXJlZ21hcF9idWxrX3dyaXRl KHJlZ21hcCwgSVNDX0dBTV9CRU5UUlksIGdhbW1hLCBHQU1NQV9FTlRSSUVTKTsNCisJcmVnbWFw X2J1bGtfd3JpdGUocmVnbWFwLCBJU0NfR0FNX0dFTlRSWSwgZ2FtbWEsIEdBTU1BX0VOVFJJRVMp Ow0KKwlyZWdtYXBfYnVsa193cml0ZShyZWdtYXAsIElTQ19HQU1fUkVOVFJZLCBnYW1tYSwgR0FN TUFfRU5UUklFUyk7DQorDQorCS8qIENvbnZlcnQgUkdCIHRvIFlVViAqLw0KKwlyZWdtYXBfd3Jp dGUocmVnbWFwLCBJU0NfQ1NDX1lSX1lHLCAweDQyIHwgKDB4ODEgPDwgMTYpKTsNCisJcmVnbWFw X3dyaXRlKHJlZ21hcCwgSVNDX0NTQ19ZQl9PWSwgMHgxOSB8ICgweDEwIDw8IDE2KSk7DQorCXJl Z21hcF93cml0ZShyZWdtYXAsIElTQ19DU0NfQ0JSX0NCRywgMHhGREEgfCAoMHhGQjYgPDwgMTYp KTsNCisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NTQ19DQkJfT0NCLCAweDcwIHwgKDB4ODAg PDwgMTYpKTsNCisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NTQ19DUlJfQ1JHLCAweDcwIHwg KDB4RkEyIDw8IDE2KSk7DQorCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DU0NfQ1JCX09DUiwg MHhGRUUgfCAoMHg4MCA8PCAxNikpOw0KKw0KKwlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfQ0JD X0JSSUdIVCwgY3RybHMtPmJyaWdodG5lc3MpOw0KKwlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0Nf Q0JDX0NPTlRSQVNULCBjdHJscy0+Y29udHJhc3QpOw0KK30NCisNCitzdGF0aWMgaW50IGlzY191 cGRhdGVfcHJvZmlsZShzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KK3sNCisJc3RydWN0IHJlZ21h cCAqcmVnbWFwID0gaXNjLT5yZWdtYXA7DQorCXUzMiBzcjsNCisJaW50IGNvdW50ZXIgPSAxMDA7 DQorDQorCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DVFJMRU4sIElTQ19DVFJMX1VQUFJPKTsN CisNCisJcmVnbWFwX3JlYWQocmVnbWFwLCBJU0NfQ1RSTFNSLCAmc3IpOw0KKwl3aGlsZSAoKHNy ICYgSVNDX0NUUkxfVVBQUk8pICYmIGNvdW50ZXItLSkgew0KKwkJdXNsZWVwX3JhbmdlKDEwMDAs IDIwMDApOw0KKwkJcmVnbWFwX3JlYWQocmVnbWFwLCBJU0NfQ1RSTFNSLCAmc3IpOw0KKwl9DQor DQorCWlmIChjb3VudGVyIDwgMCkgew0KKwkJdjRsMl93YXJuKCZpc2MtPnY0bDJfZGV2LCAiVGlt ZSBvdXQgdG8gdXBkYXRlIHByb2ZpbGVcbiIpOw0KKwkJcmV0dXJuIC1FVElNRURPVVQ7DQorCX0N CisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGlzY19zZXRfaGlzdG9ncmFtKHN0 cnVjdCBpc2NfZGV2aWNlICppc2MsIGJvb2wgZW5hYmxlKQ0KK3sNCisJc3RydWN0IHJlZ21hcCAq cmVnbWFwID0gaXNjLT5yZWdtYXA7DQorCXN0cnVjdCBpc2NfY3RybHMgKmN0cmxzID0gJmlzYy0+ Y3RybHM7DQorDQorCWlmIChlbmFibGUpIHsNCisJCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19I SVNfQ0ZHLA0KKwkJCSAgICAgSVNDX0hJU19DRkdfTU9ERV9HUiB8DQorCQkJICAgICAoaXNjLT5j b25maWcuc2RfZm9ybWF0LT5jZmFfYmF5Y2ZnDQorCQkJCQk8PCBJU0NfSElTX0NGR19CQVlTRUxf U0hJRlQpIHwNCisJCQkJCUlTQ19ISVNfQ0ZHX1JBUik7DQorCQlyZWdtYXBfd3JpdGUocmVnbWFw LCBJU0NfSElTX0NUUkwsIElTQ19ISVNfQ1RSTF9FTik7DQorCQlyZWdtYXBfd3JpdGUocmVnbWFw LCBJU0NfSU5URU4sIElTQ19JTlRfSElTRE9ORSk7DQorCQljdHJscy0+aGlzdF9pZCA9IElTQ19I SVNfQ0ZHX01PREVfR1I7DQorCQlpc2NfdXBkYXRlX3Byb2ZpbGUoaXNjKTsNCisJCXJlZ21hcF93 cml0ZShyZWdtYXAsIElTQ19DVFJMRU4sIElTQ19DVFJMX0hJU1JFUSk7DQorDQorCQljdHJscy0+ aGlzdF9zdGF0ID0gSElTVF9FTkFCTEVEOw0KKwl9IGVsc2Ugew0KKwkJcmVnbWFwX3dyaXRlKHJl Z21hcCwgSVNDX0lOVERJUywgSVNDX0lOVF9ISVNET05FKTsNCisJCXJlZ21hcF93cml0ZShyZWdt YXAsIElTQ19ISVNfQ1RSTCwgSVNDX0hJU19DVFJMX0RJUyk7DQorDQorCQljdHJscy0+aGlzdF9z dGF0ID0gSElTVF9ESVNBQkxFRDsNCisJfQ0KK30NCisNCitzdGF0aWMgaW50IGlzY19jb25maWd1 cmUoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCit7DQorCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9 IGlzYy0+cmVnbWFwOw0KKwl1MzIgcGZlX2NmZzAsIHJscF9tb2RlLCBkY2ZnLCBtYXNrLCBwaXBl bGluZTsNCisJc3RydWN0IGlzY19zdWJkZXZfZW50aXR5ICpzdWJkZXYgPSBpc2MtPmN1cnJlbnRf c3ViZGV2Ow0KKw0KKwlwZmVfY2ZnMCA9IGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+cGZlX2NmZzBf YnBzOw0KKwlybHBfbW9kZSA9IGlzYy0+Y29uZmlnLnJscF9jZmdfbW9kZTsNCisJcGlwZWxpbmUg PSBpc2MtPmNvbmZpZy5iaXRzX3BpcGVsaW5lOw0KKw0KKwlkY2ZnID0gaXNjLT5jb25maWcuZGNm Z19pbW9kZSB8DQorCQkgICAgICAgSVNDX0RDRkdfWU1CU0laRV9CRUFUUzggfCBJU0NfRENGR19D TUJTSVpFX0JFQVRTODsNCisNCisJcGZlX2NmZzAgIHw9IHN1YmRldi0+cGZlX2NmZzAgfCBJU0Nf UEZFX0NGRzBfTU9ERV9QUk9HUkVTU0lWRTsNCisJbWFzayA9IElTQ19QRkVfQ0ZHMF9CUFNfTUFT SyB8IElTQ19QRkVfQ0ZHMF9IUE9MX0xPVyB8DQorCSAgICAgICBJU0NfUEZFX0NGRzBfVlBPTF9M T1cgfCBJU0NfUEZFX0NGRzBfUFBPTF9MT1cgfA0KKwkgICAgICAgSVNDX1BGRV9DRkcwX01PREVf TUFTSyB8IElTQ19QRkVfQ0ZHMF9DQ0lSX0NSQyB8DQorCQkgICBJU0NfUEZFX0NGRzBfQ0NJUjY1 NjsNCisNCisJcmVnbWFwX3VwZGF0ZV9iaXRzKHJlZ21hcCwgSVNDX1BGRV9DRkcwLCBtYXNrLCBw ZmVfY2ZnMCk7DQorDQorCXJlZ21hcF91cGRhdGVfYml0cyhyZWdtYXAsIElTQ19STFBfQ0ZHLCBJ U0NfUkxQX0NGR19NT0RFX01BU0ssDQorCQkJICAgcmxwX21vZGUpOw0KKw0KKwlyZWdtYXBfd3Jp dGUocmVnbWFwLCBJU0NfRENGRywgZGNmZyk7DQorDQorCS8qIFNldCB0aGUgcGlwZWxpbmUgKi8N CisJaXNjX3NldF9waXBlbGluZShpc2MsIHBpcGVsaW5lKTsNCisNCisJLyoNCisJICogVGhlIGN1 cnJlbnQgaW1wbGVtZW50ZWQgaGlzdG9ncmFtIGlzIGF2YWlsYWJsZSBmb3IgUkFXIFIsIEIsIEdC LCBHUg0KKwkgKiBjaGFubmVscy4gV2UgbmVlZCB0byBjaGVjayBpZiBzZW5zb3IgaXMgb3V0cHV0 dGluZyBSQVcgQkFZRVINCisJICovDQorCWlmIChpc2MtPmN0cmxzLmF3YiAmJg0KKwkgICAgSVND X0lTX0ZPUk1BVF9SQVcoaXNjLT5jb25maWcuc2RfZm9ybWF0LT5tYnVzX2NvZGUpKQ0KKwkJaXNj X3NldF9oaXN0b2dyYW0oaXNjLCB0cnVlKTsNCisJZWxzZQ0KKwkJaXNjX3NldF9oaXN0b2dyYW0o aXNjLCBmYWxzZSk7DQorDQorCS8qIFVwZGF0ZSBwcm9maWxlICovDQorCXJldHVybiBpc2NfdXBk YXRlX3Byb2ZpbGUoaXNjKTsNCit9DQorDQorc3RhdGljIGludCBpc2Nfc3RhcnRfc3RyZWFtaW5n KHN0cnVjdCB2YjJfcXVldWUgKnZxLCB1bnNpZ25lZCBpbnQgY291bnQpDQorew0KKwlzdHJ1Y3Qg aXNjX2RldmljZSAqaXNjID0gdmIyX2dldF9kcnZfcHJpdih2cSk7DQorCXN0cnVjdCByZWdtYXAg KnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0KKwlzdHJ1Y3QgaXNjX2J1ZmZlciAqYnVmOw0KKwl1bnNp Z25lZCBsb25nIGZsYWdzOw0KKwlpbnQgcmV0Ow0KKw0KKwkvKiBFbmFibGUgc3RyZWFtIG9uIHRo ZSBzdWIgZGV2aWNlICovDQorCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoaXNjLT5jdXJyZW50X3N1 YmRldi0+c2QsIHZpZGVvLCBzX3N0cmVhbSwgMSk7DQorCWlmIChyZXQgJiYgcmV0ICE9IC1FTk9J T0NUTENNRCkgew0KKwkJdjRsMl9lcnIoJmlzYy0+djRsMl9kZXYsICJzdHJlYW0gb24gZmFpbGVk IGluIHN1YmRldiAlZFxuIiwNCisJCQkgcmV0KTsNCisJCWdvdG8gZXJyX3N0YXJ0X3N0cmVhbTsN CisJfQ0KKw0KKwlwbV9ydW50aW1lX2dldF9zeW5jKGlzYy0+ZGV2KTsNCisNCisJcmV0ID0gaXNj X2NvbmZpZ3VyZShpc2MpOw0KKwlpZiAodW5saWtlbHkocmV0KSkNCisJCWdvdG8gZXJyX2NvbmZp Z3VyZTsNCisNCisJLyogRW5hYmxlIERNQSBpbnRlcnJ1cHQgKi8NCisJcmVnbWFwX3dyaXRlKHJl Z21hcCwgSVNDX0lOVEVOLCBJU0NfSU5UX0RET05FKTsNCisNCisJc3Bpbl9sb2NrX2lycXNhdmUo JmlzYy0+ZG1hX3F1ZXVlX2xvY2ssIGZsYWdzKTsNCisNCisJaXNjLT5zZXF1ZW5jZSA9IDA7DQor CWlzYy0+c3RvcCA9IGZhbHNlOw0KKwlyZWluaXRfY29tcGxldGlvbigmaXNjLT5jb21wKTsNCisN CisJaXNjLT5jdXJfZnJtID0gbGlzdF9maXJzdF9lbnRyeSgmaXNjLT5kbWFfcXVldWUsDQorCQkJ CQlzdHJ1Y3QgaXNjX2J1ZmZlciwgbGlzdCk7DQorCWxpc3RfZGVsKCZpc2MtPmN1cl9mcm0tPmxp c3QpOw0KKw0KKwlpc2Nfc3RhcnRfZG1hKGlzYyk7DQorDQorCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJmlzYy0+ZG1hX3F1ZXVlX2xvY2ssIGZsYWdzKTsNCisNCisJLyogaWYgd2Ugc3RyZWFtaW5n IGZyb20gUkFXLCB3ZSBjYW4gZG8gb25lLXNob3Qgd2hpdGUgYmFsYW5jZSBhZGogKi8NCisJaWYg KElTQ19JU19GT1JNQVRfUkFXKGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlKSkNCisJ CXY0bDJfY3RybF9hY3RpdmF0ZShpc2MtPmRvX3diX2N0cmwsIHRydWUpOw0KKw0KKwlyZXR1cm4g MDsNCisNCitlcnJfY29uZmlndXJlOg0KKwlwbV9ydW50aW1lX3B1dF9zeW5jKGlzYy0+ZGV2KTsN CisNCisJdjRsMl9zdWJkZXZfY2FsbChpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZCwgdmlkZW8sIHNf c3RyZWFtLCAwKTsNCisNCitlcnJfc3RhcnRfc3RyZWFtOg0KKwlzcGluX2xvY2tfaXJxc2F2ZSgm aXNjLT5kbWFfcXVldWVfbG9jaywgZmxhZ3MpOw0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1Ziwg JmlzYy0+ZG1hX3F1ZXVlLCBsaXN0KQ0KKwkJdmIyX2J1ZmZlcl9kb25lKCZidWYtPnZiLnZiMl9i dWYsIFZCMl9CVUZfU1RBVEVfUVVFVUVEKTsNCisJSU5JVF9MSVNUX0hFQUQoJmlzYy0+ZG1hX3F1 ZXVlKTsNCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNjLT5kbWFfcXVldWVfbG9jaywgZmxh Z3MpOw0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgdm9pZCBpc2Nfc3RvcF9zdHJl YW1pbmcoc3RydWN0IHZiMl9xdWV1ZSAqdnEpDQorew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNj ID0gdmIyX2dldF9kcnZfcHJpdih2cSk7DQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQorCXN0cnVj dCBpc2NfYnVmZmVyICpidWY7DQorCWludCByZXQ7DQorDQorCXY0bDJfY3RybF9hY3RpdmF0ZShp c2MtPmRvX3diX2N0cmwsIGZhbHNlKTsNCisNCisJaXNjLT5zdG9wID0gdHJ1ZTsNCisNCisJLyog V2FpdCB1bnRpbCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGZyYW1lICovDQorCWlmIChpc2MtPmN1 cl9mcm0gJiYgIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaXNjLT5jb21wLCA1ICogSFop KQ0KKwkJdjRsMl9lcnIoJmlzYy0+djRsMl9kZXYsDQorCQkJICJUaW1lb3V0IHdhaXRpbmcgZm9y IGVuZCBvZiB0aGUgY2FwdHVyZVxuIik7DQorDQorCS8qIERpc2FibGUgRE1BIGludGVycnVwdCAq Lw0KKwlyZWdtYXBfd3JpdGUoaXNjLT5yZWdtYXAsIElTQ19JTlRESVMsIElTQ19JTlRfRERPTkUp Ow0KKw0KKwlwbV9ydW50aW1lX3B1dF9zeW5jKGlzYy0+ZGV2KTsNCisNCisJLyogRGlzYWJsZSBz dHJlYW0gb24gdGhlIHN1YiBkZXZpY2UgKi8NCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChpc2Mt PmN1cnJlbnRfc3ViZGV2LT5zZCwgdmlkZW8sIHNfc3RyZWFtLCAwKTsNCisJaWYgKHJldCAmJiBy ZXQgIT0gLUVOT0lPQ1RMQ01EKQ0KKwkJdjRsMl9lcnIoJmlzYy0+djRsMl9kZXYsICJzdHJlYW0g b2ZmIGZhaWxlZCBpbiBzdWJkZXZcbiIpOw0KKw0KKwkvKiBSZWxlYXNlIGFsbCBhY3RpdmUgYnVm ZmVycyAqLw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXNjLT5kbWFfcXVldWVfbG9jaywgZmxhZ3Mp Ow0KKwlpZiAodW5saWtlbHkoaXNjLT5jdXJfZnJtKSkgew0KKwkJdmIyX2J1ZmZlcl9kb25lKCZp c2MtPmN1cl9mcm0tPnZiLnZiMl9idWYsDQorCQkJCVZCMl9CVUZfU1RBVEVfRVJST1IpOw0KKwkJ aXNjLT5jdXJfZnJtID0gTlVMTDsNCisJfQ0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1ZiwgJmlz Yy0+ZG1hX3F1ZXVlLCBsaXN0KQ0KKwkJdmIyX2J1ZmZlcl9kb25lKCZidWYtPnZiLnZiMl9idWYs IFZCMl9CVUZfU1RBVEVfRVJST1IpOw0KKwlJTklUX0xJU1RfSEVBRCgmaXNjLT5kbWFfcXVldWUp Ow0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc2MtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7 DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGlzY19idWZmZXJfcXVldWUoc3RydWN0IHZiMl9idWZmZXIg KnZiKQ0KK3sNCisJc3RydWN0IHZiMl92NGwyX2J1ZmZlciAqdmJ1ZiA9IHRvX3ZiMl92NGwyX2J1 ZmZlcih2Yik7DQorCXN0cnVjdCBpc2NfYnVmZmVyICpidWYgPSBjb250YWluZXJfb2YodmJ1Ziwg c3RydWN0IGlzY19idWZmZXIsIHZiKTsNCisJc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZiMl9n ZXRfZHJ2X3ByaXYodmItPnZiMl9xdWV1ZSk7DQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQorDQor CXNwaW5fbG9ja19pcnFzYXZlKCZpc2MtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7DQorCWlmICgh aXNjLT5jdXJfZnJtICYmIGxpc3RfZW1wdHkoJmlzYy0+ZG1hX3F1ZXVlKSAmJg0KKwkJdmIyX2lz X3N0cmVhbWluZyh2Yi0+dmIyX3F1ZXVlKSkgew0KKwkJaXNjLT5jdXJfZnJtID0gYnVmOw0KKwkJ aXNjX3N0YXJ0X2RtYShpc2MpOw0KKwl9IGVsc2UNCisJCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+bGlz dCwgJmlzYy0+ZG1hX3F1ZXVlKTsNCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNjLT5kbWFf cXVldWVfbG9jaywgZmxhZ3MpOw0KK30NCisNCitzdGF0aWMgc3RydWN0IGlzY19mb3JtYXQgKmZp bmRfZm9ybWF0X2J5X2ZvdXJjYyhzdHJ1Y3QgaXNjX2RldmljZSAqaXNjLA0KKwkJCQkJCSB1bnNp Z25lZCBpbnQgZm91cmNjKQ0KK3sNCisJdW5zaWduZWQgaW50IG51bV9mb3JtYXRzID0gaXNjLT5u dW1fdXNlcl9mb3JtYXRzOw0KKwlzdHJ1Y3QgaXNjX2Zvcm1hdCAqZm10Ow0KKwl1bnNpZ25lZCBp bnQgaTsNCisNCisJZm9yIChpID0gMDsgaSA8IG51bV9mb3JtYXRzOyBpKyspIHsNCisJCWZtdCA9 IGlzYy0+dXNlcl9mb3JtYXRzW2ldOw0KKwkJaWYgKGZtdC0+Zm91cmNjID09IGZvdXJjYykNCisJ CQlyZXR1cm4gZm10Ow0KKwl9DQorDQorCXJldHVybiBOVUxMOw0KK30NCisNCitzdGF0aWMgY29u c3Qgc3RydWN0IHZiMl9vcHMgaXNjX3ZiMl9vcHMgPSB7DQorCS5xdWV1ZV9zZXR1cAkJPSBpc2Nf cXVldWVfc2V0dXAsDQorCS53YWl0X3ByZXBhcmUJCT0gdmIyX29wc193YWl0X3ByZXBhcmUsDQor CS53YWl0X2ZpbmlzaAkJPSB2YjJfb3BzX3dhaXRfZmluaXNoLA0KKwkuYnVmX3ByZXBhcmUJCT0g aXNjX2J1ZmZlcl9wcmVwYXJlLA0KKwkuc3RhcnRfc3RyZWFtaW5nCT0gaXNjX3N0YXJ0X3N0cmVh bWluZywNCisJLnN0b3Bfc3RyZWFtaW5nCQk9IGlzY19zdG9wX3N0cmVhbWluZywNCisJLmJ1Zl9x dWV1ZQkJPSBpc2NfYnVmZmVyX3F1ZXVlLA0KK307DQorDQorc3RhdGljIGludCBpc2NfcXVlcnlj YXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsDQorCQkJIHN0cnVjdCB2NGwyX2NhcGFi aWxpdHkgKmNhcCkNCit7DQorCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2aWRlb19kcnZkYXRh KGZpbGUpOw0KKw0KKwlzdHJzY3B5KGNhcC0+ZHJpdmVyLCBBVE1FTF9JU0NfTkFNRSwgc2l6ZW9m KGNhcC0+ZHJpdmVyKSk7DQorCXN0cnNjcHkoY2FwLT5jYXJkLCAiQXRtZWwgSW1hZ2UgU2Vuc29y IENvbnRyb2xsZXIiLCBzaXplb2YoY2FwLT5jYXJkKSk7DQorCXNucHJpbnRmKGNhcC0+YnVzX2lu Zm8sIHNpemVvZihjYXAtPmJ1c19pbmZvKSwNCisJCSAicGxhdGZvcm06JXMiLCBpc2MtPnY0bDJf ZGV2Lm5hbWUpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBpc2NfZW51bV9m bXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCisJCQkJIHN0cnVjdCB2 NGwyX2ZtdGRlc2MgKmYpDQorew0KKwl1MzIgaW5kZXggPSBmLT5pbmRleDsNCisJdTMyIGksIHN1 cHBvcnRlZF9pbmRleDsNCisNCisJaWYgKGluZGV4IDwgQVJSQVlfU0laRShjb250cm9sbGVyX2Zv cm1hdHMpKSB7DQorCQlmLT5waXhlbGZvcm1hdCA9IGNvbnRyb2xsZXJfZm9ybWF0c1tpbmRleF0u Zm91cmNjOw0KKwkJcmV0dXJuIDA7DQorCX0NCisNCisJaW5kZXggLT0gQVJSQVlfU0laRShjb250 cm9sbGVyX2Zvcm1hdHMpOw0KKw0KKwlpID0gMDsNCisJc3VwcG9ydGVkX2luZGV4ID0gMDsNCisN CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZm9ybWF0c19saXN0KTsgaSsrKSB7DQorCQlp ZiAoIUlTQ19JU19GT1JNQVRfUkFXKGZvcm1hdHNfbGlzdFtpXS5tYnVzX2NvZGUpIHx8DQorCQkg ICAgIWZvcm1hdHNfbGlzdFtpXS5zZF9zdXBwb3J0KQ0KKwkJCWNvbnRpbnVlOw0KKwkJaWYgKHN1 cHBvcnRlZF9pbmRleCA9PSBpbmRleCkgew0KKwkJCWYtPnBpeGVsZm9ybWF0ID0gZm9ybWF0c19s aXN0W2ldLmZvdXJjYzsNCisJCQlyZXR1cm4gMDsNCisJCX0NCisJCXN1cHBvcnRlZF9pbmRleCsr Ow0KKwl9DQorDQorCXJldHVybiAtRUlOVkFMOw0KK30NCisNCitzdGF0aWMgaW50IGlzY19nX2Zt dF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LA0KKwkJCSAgICAgIHN0cnVj dCB2NGwyX2Zvcm1hdCAqZm10KQ0KK3sNCisJc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZpZGVv X2RydmRhdGEoZmlsZSk7DQorDQorCSpmbXQgPSBpc2MtPmZtdDsNCisNCisJcmV0dXJuIDA7DQor fQ0KKw0KKy8qDQorICogQ2hlY2tzIHRoZSBjdXJyZW50IGNvbmZpZ3VyZWQgZm9ybWF0LCBpZiBJ U0MgY2FuIG91dHB1dCBpdCwNCisgKiBjb25zaWRlcmluZyB3aGljaCB0eXBlIG9mIGZvcm1hdCB0 aGUgSVNDIHJlY2VpdmVzIGZyb20gdGhlIHNlbnNvcg0KKyAqLw0KK3N0YXRpYyBpbnQgaXNjX3Ry eV92YWxpZGF0ZV9mb3JtYXRzKHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQorew0KKwlpbnQgcmV0 Ow0KKwlib29sIGJheWVyID0gZmFsc2UsIHl1diA9IGZhbHNlLCByZ2IgPSBmYWxzZSwgZ3JleSA9 IGZhbHNlOw0KKw0KKwkvKiBhbGwgZm9ybWF0cyBzdXBwb3J0ZWQgYnkgdGhlIFJMUCBtb2R1bGUg YXJlIE9LICovDQorCXN3aXRjaCAoaXNjLT50cnlfY29uZmlnLmZvdXJjYykgew0KKwljYXNlIFY0 TDJfUElYX0ZNVF9TQkdHUjg6DQorCWNhc2UgVjRMMl9QSVhfRk1UX1NHQlJHODoNCisJY2FzZSBW NEwyX1BJWF9GTVRfU0dSQkc4Og0KKwljYXNlIFY0TDJfUElYX0ZNVF9TUkdHQjg6DQorCWNhc2Ug VjRMMl9QSVhfRk1UX1NCR0dSMTA6DQorCWNhc2UgVjRMMl9QSVhfRk1UX1NHQlJHMTA6DQorCWNh c2UgVjRMMl9QSVhfRk1UX1NHUkJHMTA6DQorCWNhc2UgVjRMMl9QSVhfRk1UX1NSR0dCMTA6DQor CWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dSMTI6DQorCWNhc2UgVjRMMl9QSVhfRk1UX1NHQlJHMTI6 DQorCWNhc2UgVjRMMl9QSVhfRk1UX1NHUkJHMTI6DQorCWNhc2UgVjRMMl9QSVhfRk1UX1NSR0dC MTI6DQorCQlyZXQgPSAwOw0KKwkJYmF5ZXIgPSB0cnVlOw0KKwkJYnJlYWs7DQorDQorCWNhc2Ug VjRMMl9QSVhfRk1UX1lVVjQyMDoNCisJY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIyUDoNCisJY2Fz ZSBWNEwyX1BJWF9GTVRfWVVZVjoNCisJCXJldCA9IDA7DQorCQl5dXYgPSB0cnVlOw0KKwkJYnJl YWs7DQorDQorCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU2NToNCisJY2FzZSBWNEwyX1BJWF9GTVRf QUJHUjMyOg0KKwljYXNlIFY0TDJfUElYX0ZNVF9YQkdSMzI6DQorCWNhc2UgVjRMMl9QSVhfRk1U X0FSR0I0NDQ6DQorCWNhc2UgVjRMMl9QSVhfRk1UX0FSR0I1NTU6DQorCQlyZXQgPSAwOw0KKwkJ cmdiID0gdHJ1ZTsNCisJCWJyZWFrOw0KKwljYXNlIFY0TDJfUElYX0ZNVF9HUkVZOg0KKwkJcmV0 ID0gMDsNCisJCWdyZXkgPSB0cnVlOw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCS8qIGFueSBv dGhlciBkaWZmZXJlbnQgZm9ybWF0cyBhcmUgbm90IHN1cHBvcnRlZCAqLw0KKwkJcmV0ID0gLUVJ TlZBTDsNCisJfQ0KKw0KKwkvKiB3ZSBjYW5ub3Qgb3V0cHV0IFJBVy9HcmV5IGlmIHdlIGRvIG5v dCByZWNlaXZlIFJBVyAqLw0KKwlpZiAoKGJheWVyIHx8IGdyZXkpICYmDQorCSAgICAhSVNDX0lT X0ZPUk1BVF9SQVcoaXNjLT50cnlfY29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlKSkNCisJCXJl dHVybiAtRUlOVkFMOw0KKw0KKwl2NGwyX2RiZygxLCBkZWJ1ZywgJmlzYy0+djRsMl9kZXYsDQor CQkgIkZvcm1hdCB2YWxpZGF0aW9uLCByZXF1ZXN0ZWQgcmdiPSV1LCB5dXY9JXUsIGdyZXk9JXUs IGJheWVyPSV1XG4iLA0KKwkJIHJnYiwgeXV2LCBncmV5LCBiYXllcik7DQorDQorCXJldHVybiBy ZXQ7DQorfQ0KKw0KKy8qDQorICogQ29uZmlndXJlcyB0aGUgUkxQIGFuZCBETUEgbW9kdWxlcywg ZGVwZW5kaW5nIG9uIHRoZSBvdXRwdXQgZm9ybWF0DQorICogY29uZmlndXJlZCBmb3IgdGhlIElT Qy4NCisgKiBJZiBkaXJlY3RfZHVtcCA9PSB0cnVlLCBqdXN0IGR1bXAgcmF3IGRhdGEgOCBiaXRz Lg0KKyAqLw0KK3N0YXRpYyBpbnQgaXNjX3RyeV9jb25maWd1cmVfcmxwX2RtYShzdHJ1Y3QgaXNj X2RldmljZSAqaXNjLCBib29sIGRpcmVjdF9kdW1wKQ0KK3sNCisJaWYgKGRpcmVjdF9kdW1wKSB7 DQorCQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9EQVQ4 Ow0KKwkJaXNjLT50cnlfY29uZmlnLmRjZmdfaW1vZGUgPSBJU0NfRENGR19JTU9ERV9QQUNLRUQ4 Ow0KKwkJaXNjLT50cnlfY29uZmlnLmRjdHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tF RDsNCisJCWlzYy0+dHJ5X2NvbmZpZy5icHAgPSAxNjsNCisJCXJldHVybiAwOw0KKwl9DQorDQor CXN3aXRjaCAoaXNjLT50cnlfY29uZmlnLmZvdXJjYykgew0KKwljYXNlIFY0TDJfUElYX0ZNVF9T QkdHUjg6DQorCWNhc2UgVjRMMl9QSVhfRk1UX1NHQlJHODoNCisJY2FzZSBWNEwyX1BJWF9GTVRf U0dSQkc4Og0KKwljYXNlIFY0TDJfUElYX0ZNVF9TUkdHQjg6DQorCQlpc2MtPnRyeV9jb25maWcu cmxwX2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9EQVQ4Ow0KKwkJaXNjLT50cnlfY29uZmln LmRjZmdfaW1vZGUgPSBJU0NfRENGR19JTU9ERV9QQUNLRUQ4Ow0KKwkJaXNjLT50cnlfY29uZmln LmRjdHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tFRDsNCisJCWlzYy0+dHJ5X2NvbmZp Zy5icHAgPSA4Ow0KKwkJYnJlYWs7DQorCWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dSMTA6DQorCWNh c2UgVjRMMl9QSVhfRk1UX1NHQlJHMTA6DQorCWNhc2UgVjRMMl9QSVhfRk1UX1NHUkJHMTA6DQor CWNhc2UgVjRMMl9QSVhfRk1UX1NSR0dCMTA6DQorCQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19t b2RlID0gSVNDX1JMUF9DRkdfTU9ERV9EQVQxMDsNCisJCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2lt b2RlID0gSVNDX0RDRkdfSU1PREVfUEFDS0VEMTY7DQorCQlpc2MtPnRyeV9jb25maWcuZGN0cmxf ZHZpZXcgPSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0KKwkJaXNjLT50cnlfY29uZmlnLmJwcCA9 IDE2Ow0KKwkJYnJlYWs7DQorCWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dSMTI6DQorCWNhc2UgVjRM Ml9QSVhfRk1UX1NHQlJHMTI6DQorCWNhc2UgVjRMMl9QSVhfRk1UX1NHUkJHMTI6DQorCWNhc2Ug VjRMMl9QSVhfRk1UX1NSR0dCMTI6DQorCQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2RlID0g SVNDX1JMUF9DRkdfTU9ERV9EQVQxMjsNCisJCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0g SVNDX0RDRkdfSU1PREVfUEFDS0VEMTY7DQorCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcg PSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0KKwkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDE2Ow0K KwkJYnJlYWs7DQorCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU2NToNCisJCWlzYy0+dHJ5X2NvbmZp Zy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX1JHQjU2NTsNCisJCWlzYy0+dHJ5X2Nv bmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdfSU1PREVfUEFDS0VEMTY7DQorCQlpc2MtPnRyeV9j b25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0KKwkJaXNjLT50cnlf Y29uZmlnLmJwcCA9IDE2Ow0KKwkJYnJlYWs7DQorCWNhc2UgVjRMMl9QSVhfRk1UX0FSR0I0NDQ6 DQorCQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9BUkdC NDQ0Ow0KKwkJaXNjLT50cnlfY29uZmlnLmRjZmdfaW1vZGUgPSBJU0NfRENGR19JTU9ERV9QQUNL RUQxNjsNCisJCWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9kdmlldyA9IElTQ19EQ1RSTF9EVklFV19Q QUNLRUQ7DQorCQlpc2MtPnRyeV9jb25maWcuYnBwID0gMTY7DQorCQlicmVhazsNCisJY2FzZSBW NEwyX1BJWF9GTVRfQVJHQjU1NToNCisJCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJ U0NfUkxQX0NGR19NT0RFX0FSR0I1NTU7DQorCQlpc2MtPnRyeV9jb25maWcuZGNmZ19pbW9kZSA9 IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDE2Ow0KKwkJaXNjLT50cnlfY29uZmlnLmRjdHJsX2R2aWV3 ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tFRDsNCisJCWlzYy0+dHJ5X2NvbmZpZy5icHAgPSAxNjsN CisJCWJyZWFrOw0KKwljYXNlIFY0TDJfUElYX0ZNVF9BQkdSMzI6DQorCWNhc2UgVjRMMl9QSVhf Rk1UX1hCR1IzMjoNCisJCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NG R19NT0RFX0FSR0IzMjsNCisJCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdf SU1PREVfUEFDS0VEMzI7DQorCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENU UkxfRFZJRVdfUEFDS0VEOw0KKwkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDMyOw0KKwkJYnJlYWs7 DQorCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMDoNCisJCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2Zn X21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX1lZQ0M7DQorCQlpc2MtPnRyeV9jb25maWcuZGNmZ19p bW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1lDNDIwUDsNCisJCWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9k dmlldyA9IElTQ19EQ1RSTF9EVklFV19QTEFOQVI7DQorCQlpc2MtPnRyeV9jb25maWcuYnBwID0g MTI7DQorCQlicmVhazsNCisJY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIyUDoNCisJCWlzYy0+dHJ5 X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX1lZQ0M7DQorCQlpc2MtPnRy eV9jb25maWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1lDNDIyUDsNCisJCWlzYy0+dHJ5 X2NvbmZpZy5kY3RybF9kdmlldyA9IElTQ19EQ1RSTF9EVklFV19QTEFOQVI7DQorCQlpc2MtPnRy eV9jb25maWcuYnBwID0gMTY7DQorCQlicmVhazsNCisJY2FzZSBWNEwyX1BJWF9GTVRfWVVZVjoN CisJCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX1lZQ0M7 DQorCQlpc2MtPnRyeV9jb25maWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDMy Ow0KKwkJaXNjLT50cnlfY29uZmlnLmRjdHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tF RDsNCisJCWlzYy0+dHJ5X2NvbmZpZy5icHAgPSAxNjsNCisJCWJyZWFrOw0KKwljYXNlIFY0TDJf UElYX0ZNVF9HUkVZOg0KKwkJaXNjLT50cnlfY29uZmlnLnJscF9jZmdfbW9kZSA9IElTQ19STFBf Q0ZHX01PREVfREFUWTg7DQorCQlpc2MtPnRyeV9jb25maWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZH X0lNT0RFX1BBQ0tFRDg7DQorCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENU UkxfRFZJRVdfUEFDS0VEOw0KKwkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDg7DQorCQlicmVhazsN CisJZGVmYXVsdDoNCisJCXJldHVybiAtRUlOVkFMOw0KKwl9DQorCXJldHVybiAwOw0KK30NCisN CisvKg0KKyAqIENvbmZpZ3VyaW5nIHBpcGVsaW5lIG1vZHVsZXMsIGRlcGVuZGluZyBvbiB3aGlj aCBmb3JtYXQgdGhlIElTQyBvdXRwdXRzDQorICogYW5kIGNvbnNpZGVyaW5nIHdoaWNoIGZvcm1h dCBpdCBoYXMgYXMgaW5wdXQgZnJvbSB0aGUgc2Vuc29yLg0KKyAqLw0KK3N0YXRpYyBpbnQgaXNj X3RyeV9jb25maWd1cmVfcGlwZWxpbmUoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCit7DQorCXN3 aXRjaCAoaXNjLT50cnlfY29uZmlnLmZvdXJjYykgew0KKwljYXNlIFY0TDJfUElYX0ZNVF9SR0I1 NjU6DQorCWNhc2UgVjRMMl9QSVhfRk1UX0FSR0I1NTU6DQorCWNhc2UgVjRMMl9QSVhfRk1UX0FS R0I0NDQ6DQorCWNhc2UgVjRMMl9QSVhfRk1UX0FCR1IzMjoNCisJY2FzZSBWNEwyX1BJWF9GTVRf WEJHUjMyOg0KKwkJLyogaWYgc2Vuc29yIGZvcm1hdCBpcyBSQVcsIHdlIGNvbnZlcnQgaW5zaWRl IElTQyAqLw0KKwkJaWYgKElTQ19JU19GT1JNQVRfUkFXKGlzYy0+dHJ5X2NvbmZpZy5zZF9mb3Jt YXQtPm1idXNfY29kZSkpIHsNCisJCQlpc2MtPnRyeV9jb25maWcuYml0c19waXBlbGluZSA9IENG QV9FTkFCTEUgfA0KKwkJCQlXQl9FTkFCTEUgfCBHQU1fRU5BQkxFUzsNCisJCX0gZWxzZSB7DQor CQkJaXNjLT50cnlfY29uZmlnLmJpdHNfcGlwZWxpbmUgPSAweDA7DQorCQl9DQorCQlicmVhazsN CisJY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIwOg0KKwkJLyogaWYgc2Vuc29yIGZvcm1hdCBpcyBS QVcsIHdlIGNvbnZlcnQgaW5zaWRlIElTQyAqLw0KKwkJaWYgKElTQ19JU19GT1JNQVRfUkFXKGlz Yy0+dHJ5X2NvbmZpZy5zZF9mb3JtYXQtPm1idXNfY29kZSkpIHsNCisJCQlpc2MtPnRyeV9jb25m aWcuYml0c19waXBlbGluZSA9IENGQV9FTkFCTEUgfA0KKwkJCQlDU0NfRU5BQkxFIHwgV0JfRU5B QkxFIHwgR0FNX0VOQUJMRVMgfA0KKwkJCQlTVUI0MjBfRU5BQkxFIHwgU1VCNDIyX0VOQUJMRSB8 IENCQ19FTkFCTEU7DQorCQl9IGVsc2Ugew0KKwkJCWlzYy0+dHJ5X2NvbmZpZy5iaXRzX3BpcGVs aW5lID0gMHgwOw0KKwkJfQ0KKwkJYnJlYWs7DQorCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMlA6 DQorCQkvKiBpZiBzZW5zb3IgZm9ybWF0IGlzIFJBVywgd2UgY29udmVydCBpbnNpZGUgSVNDICov DQorCQlpZiAoSVNDX0lTX0ZPUk1BVF9SQVcoaXNjLT50cnlfY29uZmlnLnNkX2Zvcm1hdC0+bWJ1 c19jb2RlKSkgew0KKwkJCWlzYy0+dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gQ0ZBX0VOQUJM RSB8DQorCQkJCUNTQ19FTkFCTEUgfCBXQl9FTkFCTEUgfCBHQU1fRU5BQkxFUyB8DQorCQkJCVNV QjQyMl9FTkFCTEUgfCBDQkNfRU5BQkxFOw0KKwkJfSBlbHNlIHsNCisJCQlpc2MtPnRyeV9jb25m aWcuYml0c19waXBlbGluZSA9IDB4MDsNCisJCX0NCisJCWJyZWFrOw0KKwljYXNlIFY0TDJfUElY X0ZNVF9ZVVlWOg0KKwkJLyogaWYgc2Vuc29yIGZvcm1hdCBpcyBSQVcsIHdlIGNvbnZlcnQgaW5z aWRlIElTQyAqLw0KKwkJaWYgKElTQ19JU19GT1JNQVRfUkFXKGlzYy0+dHJ5X2NvbmZpZy5zZF9m b3JtYXQtPm1idXNfY29kZSkpIHsNCisJCQlpc2MtPnRyeV9jb25maWcuYml0c19waXBlbGluZSA9 IENGQV9FTkFCTEUgfA0KKwkJCQlDU0NfRU5BQkxFIHwgV0JfRU5BQkxFIHwgR0FNX0VOQUJMRVMg fA0KKwkJCQlTVUI0MjJfRU5BQkxFIHwgQ0JDX0VOQUJMRTsNCisJCX0gZWxzZSB7DQorCQkJaXNj LT50cnlfY29uZmlnLmJpdHNfcGlwZWxpbmUgPSAweDA7DQorCQl9DQorCQlicmVhazsNCisJY2Fz ZSBWNEwyX1BJWF9GTVRfR1JFWToNCisJCWlmIChJU0NfSVNfRk9STUFUX1JBVyhpc2MtPnRyeV9j b25maWcuc2RfZm9ybWF0LT5tYnVzX2NvZGUpKSB7DQorCQkvKiBpZiBzZW5zb3IgZm9ybWF0IGlz IFJBVywgd2UgY29udmVydCBpbnNpZGUgSVNDICovDQorCQkJaXNjLT50cnlfY29uZmlnLmJpdHNf cGlwZWxpbmUgPSBDRkFfRU5BQkxFIHwNCisJCQkJQ1NDX0VOQUJMRSB8IFdCX0VOQUJMRSB8IEdB TV9FTkFCTEVTIHwNCisJCQkJQ0JDX0VOQUJMRTsNCisJCX0gZWxzZSB7DQorCQkJaXNjLT50cnlf Y29uZmlnLmJpdHNfcGlwZWxpbmUgPSAweDA7DQorCQl9DQorCQlicmVhazsNCisJZGVmYXVsdDoN CisJCWlzYy0+dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gMHgwOw0KKwl9DQorCXJldHVybiAw Ow0KK30NCisNCitzdGF0aWMgaW50IGlzY190cnlfZm10KHN0cnVjdCBpc2NfZGV2aWNlICppc2Ms IHN0cnVjdCB2NGwyX2Zvcm1hdCAqZiwNCisJCQl1MzIgKmNvZGUpDQorew0KKwlpbnQgaTsNCisJ c3RydWN0IGlzY19mb3JtYXQgKnNkX2ZtdCA9IE5VTEwsICpkaXJlY3RfZm10ID0gTlVMTDsNCisJ c3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4Zm10ID0gJmYtPmZtdC5waXg7DQorCXN0cnVjdCB2 NGwyX3N1YmRldl9wYWRfY29uZmlnIHBhZF9jZmc7DQorCXN0cnVjdCB2NGwyX3N1YmRldl9mb3Jt YXQgZm9ybWF0ID0gew0KKwkJLndoaWNoID0gVjRMMl9TVUJERVZfRk9STUFUX1RSWSwNCisJfTsN CisJdTMyIG1idXNfY29kZTsNCisJaW50IHJldDsNCisJYm9vbCBybHBfZG1hX2RpcmVjdF9kdW1w ID0gZmFsc2U7DQorDQorCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVS RSkNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwkvKiBTdGVwIDE6IGZpbmQgYSBSQVcgZm9ybWF0 IHRoYXQgaXMgc3VwcG9ydGVkICovDQorCWZvciAoaSA9IDA7IGkgPCBpc2MtPm51bV91c2VyX2Zv cm1hdHM7IGkrKykgew0KKwkJaWYgKElTQ19JU19GT1JNQVRfUkFXKGlzYy0+dXNlcl9mb3JtYXRz W2ldLT5tYnVzX2NvZGUpKSB7DQorCQkJc2RfZm10ID0gaXNjLT51c2VyX2Zvcm1hdHNbaV07DQor CQkJYnJlYWs7DQorCQl9DQorCX0NCisJLyogU3RlcCAyOiBXZSBjYW4gY29udGludWUgd2l0aCB0 aGlzIFJBVyBmb3JtYXQsIG9yIHdlIGNhbiBsb29rDQorCSAqIGZvciBiZXR0ZXI6IG1heWJlIHNl bnNvciBzdXBwb3J0cyBkaXJlY3RseSB3aGF0IHdlIG5lZWQuDQorCSAqLw0KKwlkaXJlY3RfZm10 ID0gZmluZF9mb3JtYXRfYnlfZm91cmNjKGlzYywgcGl4Zm10LT5waXhlbGZvcm1hdCk7DQorDQor CS8qIFN0ZXAgMzogV2UgaGF2ZSBib3RoLiBXZSBkZWNpZGUgZ2l2ZW4gdGhlIG1vZHVsZSBwYXJh bWV0ZXIgd2hpY2gNCisJICogb25lIHRvIHVzZS4NCisJICovDQorCWlmIChkaXJlY3RfZm10ICYm IHNkX2ZtdCAmJiBzZW5zb3JfcHJlZmVycmVkKQ0KKwkJc2RfZm10ID0gZGlyZWN0X2ZtdDsNCisN CisJLyogU3RlcCA0OiB3ZSBkbyBub3QgaGF2ZSBSQVcgYnV0IHdlIGhhdmUgYSBkaXJlY3QgZm9y bWF0LiBVc2UgaXQuICovDQorCWlmIChkaXJlY3RfZm10ICYmICFzZF9mbXQpDQorCQlzZF9mbXQg PSBkaXJlY3RfZm10Ow0KKw0KKwkvKiBTdGVwIDU6IGlmIHdlIGFyZSB1c2luZyBhIGRpcmVjdCBm b3JtYXQsIHdlIG5lZWQgdG8gcGFja2FnZQ0KKwkgKiBldmVyeXRoaW5nIGFzIDggYml0IGRhdGEg YW5kIGp1c3QgZHVtcCBpdA0KKwkgKi8NCisJaWYgKHNkX2ZtdCA9PSBkaXJlY3RfZm10KQ0KKwkJ cmxwX2RtYV9kaXJlY3RfZHVtcCA9IHRydWU7DQorDQorCS8qIFN0ZXAgNjogV2UgaGF2ZSBubyBm b3JtYXQuIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgdXNlcnNwYWNlDQorCSAqIHJlcXVlc3RzIHNv bWUgd2VpcmQvaW52YWxpZCBmb3JtYXQuDQorCSAqIEluIHRoaXMgY2FzZSwgZGVmYXVsdCB0byB3 aGF0ZXZlciB3ZSBoYXZlDQorCSAqLw0KKwlpZiAoIXNkX2ZtdCAmJiAhZGlyZWN0X2ZtdCkgew0K KwkJc2RfZm10ID0gaXNjLT51c2VyX2Zvcm1hdHNbaXNjLT5udW1fdXNlcl9mb3JtYXRzIC0gMV07 DQorCQl2NGwyX2RiZygxLCBkZWJ1ZywgJmlzYy0+djRsMl9kZXYsDQorCQkJICJTZW5zb3Igbm90 IHN1cHBvcnRpbmcgJS40cywgdXNpbmcgJS40c1xuIiwNCisJCQkgKGNoYXIgKikmcGl4Zm10LT5w aXhlbGZvcm1hdCwgKGNoYXIgKikmc2RfZm10LT5mb3VyY2MpOw0KKwl9DQorDQorCWlmICghc2Rf Zm10KSB7DQorCQlyZXQgPSAtRUlOVkFMOw0KKwkJZ290byBpc2NfdHJ5X2ZtdF9lcnI7DQorCX0N CisNCisJLyogU3RlcCA3OiBQcmludCBvdXQgd2hhdCB3ZSBkZWNpZGVkIGZvciBkZWJ1Z2dpbmcg Ki8NCisJdjRsMl9kYmcoMSwgZGVidWcsICZpc2MtPnY0bDJfZGV2LA0KKwkJICJQcmVmZXJyaW5n IHRvIGhhdmUgc2Vuc29yIHVzaW5nIGZvcm1hdCAlLjRzXG4iLA0KKwkJIChjaGFyICopJnNkX2Zt dC0+Zm91cmNjKTsNCisNCisJLyogU3RlcCA4OiBhdCB0aGlzIG1vbWVudCB3ZSBkZWNpZGVkIHdo aWNoIGZvcm1hdCB0aGUgc3ViZGV2IHdpbGwgdXNlICovDQorCWlzYy0+dHJ5X2NvbmZpZy5zZF9m b3JtYXQgPSBzZF9mbXQ7DQorDQorCS8qIExpbWl0IHRvIEF0bWVsIElTQyBoYXJkd2FyZSBjYXBh YmlsaXRpZXMgKi8NCisJaWYgKHBpeGZtdC0+d2lkdGggPiBJU0NfTUFYX1NVUFBPUlRfV0lEVEgp DQorCQlwaXhmbXQtPndpZHRoID0gSVNDX01BWF9TVVBQT1JUX1dJRFRIOw0KKwlpZiAocGl4Zm10 LT5oZWlnaHQgPiBJU0NfTUFYX1NVUFBPUlRfSEVJR0hUKQ0KKwkJcGl4Zm10LT5oZWlnaHQgPSBJ U0NfTUFYX1NVUFBPUlRfSEVJR0hUOw0KKw0KKwkvKg0KKwkgKiBUaGUgbWJ1cyBmb3JtYXQgaXMg dGhlIG9uZSB0aGUgc3ViZGV2IG91dHB1dHMuDQorCSAqIFRoZSBwaXhlbHMgd2lsbCBiZSB0cmFu c2ZlcnJlZCBpbiB0aGlzIGZvcm1hdCBTZW5zb3IgLT4gSVNDDQorCSAqLw0KKwltYnVzX2NvZGUg PSBzZF9mbXQtPm1idXNfY29kZTsNCisNCisJLyoNCisJICogVmFsaWRhdGUgZm9ybWF0cy4gSWYg dGhlIHJlcXVpcmVkIGZvcm1hdCBpcyBub3QgT0ssIGRlZmF1bHQgdG8gcmF3Lg0KKwkgKi8NCisN CisJaXNjLT50cnlfY29uZmlnLmZvdXJjYyA9IHBpeGZtdC0+cGl4ZWxmb3JtYXQ7DQorDQorCWlm IChpc2NfdHJ5X3ZhbGlkYXRlX2Zvcm1hdHMoaXNjKSkgew0KKwkJcGl4Zm10LT5waXhlbGZvcm1h dCA9IGlzYy0+dHJ5X2NvbmZpZy5mb3VyY2MgPSBzZF9mbXQtPmZvdXJjYzsNCisJCS8qIFJlLXRy eSB0byB2YWxpZGF0ZSB0aGUgbmV3IGZvcm1hdCAqLw0KKwkJcmV0ID0gaXNjX3RyeV92YWxpZGF0 ZV9mb3JtYXRzKGlzYyk7DQorCQlpZiAocmV0KQ0KKwkJCWdvdG8gaXNjX3RyeV9mbXRfZXJyOw0K Kwl9DQorDQorCXJldCA9IGlzY190cnlfY29uZmlndXJlX3JscF9kbWEoaXNjLCBybHBfZG1hX2Rp cmVjdF9kdW1wKTsNCisJaWYgKHJldCkNCisJCWdvdG8gaXNjX3RyeV9mbXRfZXJyOw0KKw0KKwly ZXQgPSBpc2NfdHJ5X2NvbmZpZ3VyZV9waXBlbGluZShpc2MpOw0KKwlpZiAocmV0KQ0KKwkJZ290 byBpc2NfdHJ5X2ZtdF9lcnI7DQorDQorCXY0bDJfZmlsbF9tYnVzX2Zvcm1hdCgmZm9ybWF0LmZv cm1hdCwgcGl4Zm10LCBtYnVzX2NvZGUpOw0KKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKGlzYy0+ Y3VycmVudF9zdWJkZXYtPnNkLCBwYWQsIHNldF9mbXQsDQorCQkJICAgICAgICZwYWRfY2ZnLCAm Zm9ybWF0KTsNCisJaWYgKHJldCA8IDApDQorCQlnb3RvIGlzY190cnlfZm10X3N1YmRldl9lcnI7 DQorDQorCXY0bDJfZmlsbF9waXhfZm9ybWF0KHBpeGZtdCwgJmZvcm1hdC5mb3JtYXQpOw0KKw0K KwlwaXhmbXQtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOw0KKwlwaXhmbXQtPmJ5dGVzcGVybGlu ZSA9IChwaXhmbXQtPndpZHRoICogaXNjLT50cnlfY29uZmlnLmJwcCkgPj4gMzsNCisJcGl4Zm10 LT5zaXplaW1hZ2UgPSBwaXhmbXQtPmJ5dGVzcGVybGluZSAqIHBpeGZtdC0+aGVpZ2h0Ow0KKw0K KwlpZiAoY29kZSkNCisJCSpjb2RlID0gbWJ1c19jb2RlOw0KKw0KKwlyZXR1cm4gMDsNCisNCitp c2NfdHJ5X2ZtdF9lcnI6DQorCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LCAiQ291bGQgbm90IGZp bmQgYW55IHBvc3NpYmxlIGZvcm1hdCBmb3IgYSB3b3JraW5nIHBpcGVsaW5lXG4iKTsNCitpc2Nf dHJ5X2ZtdF9zdWJkZXZfZXJyOg0KKwltZW1zZXQoJmlzYy0+dHJ5X2NvbmZpZywgMCwgc2l6ZW9m KGlzYy0+dHJ5X2NvbmZpZykpOw0KKw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgaW50 IGlzY19zZXRfZm10KHN0cnVjdCBpc2NfZGV2aWNlICppc2MsIHN0cnVjdCB2NGwyX2Zvcm1hdCAq ZikNCit7DQorCXN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgZm9ybWF0ID0gew0KKwkJLndoaWNo ID0gVjRMMl9TVUJERVZfRk9STUFUX0FDVElWRSwNCisJfTsNCisJdTMyIG1idXNfY29kZSA9IDA7 DQorCWludCByZXQ7DQorDQorCXJldCA9IGlzY190cnlfZm10KGlzYywgZiwgJm1idXNfY29kZSk7 DQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwl2NGwyX2ZpbGxfbWJ1c19mb3JtYXQo JmZvcm1hdC5mb3JtYXQsICZmLT5mbXQucGl4LCBtYnVzX2NvZGUpOw0KKwlyZXQgPSB2NGwyX3N1 YmRldl9jYWxsKGlzYy0+Y3VycmVudF9zdWJkZXYtPnNkLCBwYWQsDQorCQkJICAgICAgIHNldF9m bXQsIE5VTEwsICZmb3JtYXQpOw0KKwlpZiAocmV0IDwgMCkNCisJCXJldHVybiByZXQ7DQorDQor CWlzYy0+Zm10ID0gKmY7DQorDQorCWlmIChpc2MtPnRyeV9jb25maWcuc2RfZm9ybWF0ICYmIGlz Yy0+Y29uZmlnLnNkX2Zvcm1hdCAmJg0KKwkgICAgaXNjLT50cnlfY29uZmlnLnNkX2Zvcm1hdCAh PSBpc2MtPmNvbmZpZy5zZF9mb3JtYXQpIHsNCisJCWlzYy0+Y3RybHMuaGlzdF9zdGF0ID0gSElT VF9JTklUOw0KKwkJaXNjX3Jlc2V0X2F3Yl9jdHJscyhpc2MpOw0KKwl9DQorCS8qIG1ha2UgdGhl IHRyeSBjb25maWd1cmF0aW9uIGFjdGl2ZSAqLw0KKwlpc2MtPmNvbmZpZyA9IGlzYy0+dHJ5X2Nv bmZpZzsNCisNCisJdjRsMl9kYmcoMSwgZGVidWcsICZpc2MtPnY0bDJfZGV2LCAiTmV3IElTQyBj b25maWd1cmF0aW9uIGluIHBsYWNlXG4iKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRp YyBpbnQgaXNjX3NfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsDQor CQkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQ0KK3sNCisJc3RydWN0IGlzY19kZXZpY2Ug KmlzYyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7DQorDQorCWlmICh2YjJfaXNfc3RyZWFtaW5nKCZp c2MtPnZiMl92aWRxKSkNCisJCXJldHVybiAtRUJVU1k7DQorDQorCXJldHVybiBpc2Nfc2V0X2Zt dChpc2MsIGYpOw0KK30NCisNCitzdGF0aWMgaW50IGlzY190cnlfZm10X3ZpZF9jYXAoc3RydWN0 IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsDQorCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikNCit7 DQorCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KKw0KKwly ZXR1cm4gaXNjX3RyeV9mbXQoaXNjLCBmLCBOVUxMKTsNCit9DQorDQorc3RhdGljIGludCBpc2Nf ZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCisJCQkgICBzdHJ1Y3Qg djRsMl9pbnB1dCAqaW5wKQ0KK3sNCisJaWYgKGlucC0+aW5kZXggIT0gMCkNCisJCXJldHVybiAt RUlOVkFMOw0KKw0KKwlpbnAtPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOw0KKwlpbnAt PnN0ZCA9IDA7DQorCXN0cnNjcHkoaW5wLT5uYW1lLCAiQ2FtZXJhIiwgc2l6ZW9mKGlucC0+bmFt ZSkpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBpc2NfZ19pbnB1dChzdHJ1 Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQ0KK3sNCisJKmkgPSAw Ow0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBpc2Nfc19pbnB1dChzdHJ1Y3Qg ZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpDQorew0KKwlpZiAoaSA+IDAp DQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQg aXNjX2dfcGFybShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX3N0cmVh bXBhcm0gKmEpDQorew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmlkZW9fZHJ2ZGF0YShm aWxlKTsNCisNCisJcmV0dXJuIHY0bDJfZ19wYXJtX2NhcCh2aWRlb19kZXZkYXRhKGZpbGUpLCBp c2MtPmN1cnJlbnRfc3ViZGV2LT5zZCwgYSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNjX3NfcGFy bShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKmEp DQorew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCisN CisJcmV0dXJuIHY0bDJfc19wYXJtX2NhcCh2aWRlb19kZXZkYXRhKGZpbGUpLCBpc2MtPmN1cnJl bnRfc3ViZGV2LT5zZCwgYSk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNjX2VudW1fZnJhbWVzaXpl cyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsDQorCQkJICAgICAgIHN0cnVjdCB2NGwyX2Zy bXNpemVlbnVtICpmc2l6ZSkNCit7DQorCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2aWRlb19k cnZkYXRhKGZpbGUpOw0KKwlzdHJ1Y3QgdjRsMl9zdWJkZXZfZnJhbWVfc2l6ZV9lbnVtIGZzZSA9 IHsNCisJCS5pbmRleCA9IGZzaXplLT5pbmRleCwNCisJCS53aGljaCA9IFY0TDJfU1VCREVWX0ZP Uk1BVF9BQ1RJVkUsDQorCX07DQorCWludCByZXQgPSAtRUlOVkFMOw0KKwlpbnQgaTsNCisNCisJ Zm9yIChpID0gMDsgaSA8IGlzYy0+bnVtX3VzZXJfZm9ybWF0czsgaSsrKQ0KKwkJaWYgKGlzYy0+ dXNlcl9mb3JtYXRzW2ldLT5mb3VyY2MgPT0gZnNpemUtPnBpeGVsX2Zvcm1hdCkNCisJCQlyZXQg PSAwOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb250cm9sbGVyX2Zvcm1hdHMp OyBpKyspDQorCQlpZiAoY29udHJvbGxlcl9mb3JtYXRzW2ldLmZvdXJjYyA9PSBmc2l6ZS0+cGl4 ZWxfZm9ybWF0KQ0KKwkJCXJldCA9IDA7DQorDQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0K Kw0KKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKGlzYy0+Y3VycmVudF9zdWJkZXYtPnNkLCBwYWQs IGVudW1fZnJhbWVfc2l6ZSwNCisJCQkgICAgICAgTlVMTCwgJmZzZSk7DQorCWlmIChyZXQpDQor CQlyZXR1cm4gcmV0Ow0KKw0KKwlmc2UuY29kZSA9IGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+bWJ1 c19jb2RlOw0KKw0KKwlmc2l6ZS0+dHlwZSA9IFY0TDJfRlJNU0laRV9UWVBFX0RJU0NSRVRFOw0K Kwlmc2l6ZS0+ZGlzY3JldGUud2lkdGggPSBmc2UubWF4X3dpZHRoOw0KKwlmc2l6ZS0+ZGlzY3Jl dGUuaGVpZ2h0ID0gZnNlLm1heF9oZWlnaHQ7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0 aWMgaW50IGlzY19lbnVtX2ZyYW1laW50ZXJ2YWxzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpm aCwNCisJCQkJICAgIHN0cnVjdCB2NGwyX2ZybWl2YWxlbnVtICpmaXZhbCkNCit7DQorCXN0cnVj dCBpc2NfZGV2aWNlICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KKwlzdHJ1Y3QgdjRsMl9z dWJkZXZfZnJhbWVfaW50ZXJ2YWxfZW51bSBmaWUgPSB7DQorCQkuaW5kZXggPSBmaXZhbC0+aW5k ZXgsDQorCQkud2lkdGggPSBmaXZhbC0+d2lkdGgsDQorCQkuaGVpZ2h0ID0gZml2YWwtPmhlaWdo dCwNCisJCS53aGljaCA9IFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkUsDQorCX07DQorCWludCBy ZXQgPSAtRUlOVkFMOw0KKwlpbnQgaTsNCisNCisJZm9yIChpID0gMDsgaSA8IGlzYy0+bnVtX3Vz ZXJfZm9ybWF0czsgaSsrKQ0KKwkJaWYgKGlzYy0+dXNlcl9mb3JtYXRzW2ldLT5mb3VyY2MgPT0g Zml2YWwtPnBpeGVsX2Zvcm1hdCkNCisJCQlyZXQgPSAwOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwg QVJSQVlfU0laRShjb250cm9sbGVyX2Zvcm1hdHMpOyBpKyspDQorCQlpZiAoY29udHJvbGxlcl9m b3JtYXRzW2ldLmZvdXJjYyA9PSBmaXZhbC0+cGl4ZWxfZm9ybWF0KQ0KKwkJCXJldCA9IDA7DQor DQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxs KGlzYy0+Y3VycmVudF9zdWJkZXYtPnNkLCBwYWQsDQorCQkJICAgICAgIGVudW1fZnJhbWVfaW50 ZXJ2YWwsIE5VTEwsICZmaWUpOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJZmll LmNvZGUgPSBpc2MtPmNvbmZpZy5zZF9mb3JtYXQtPm1idXNfY29kZTsNCisJZml2YWwtPnR5cGUg PSBWNEwyX0ZSTUlWQUxfVFlQRV9ESVNDUkVURTsNCisJZml2YWwtPmRpc2NyZXRlID0gZmllLmlu dGVydmFsOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwy X2lvY3RsX29wcyBpc2NfaW9jdGxfb3BzID0gew0KKwkudmlkaW9jX3F1ZXJ5Y2FwCQk9IGlzY19x dWVyeWNhcCwNCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwCT0gaXNjX2VudW1fZm10X3ZpZF9j YXAsDQorCS52aWRpb2NfZ19mbXRfdmlkX2NhcAkJPSBpc2NfZ19mbXRfdmlkX2NhcCwNCisJLnZp ZGlvY19zX2ZtdF92aWRfY2FwCQk9IGlzY19zX2ZtdF92aWRfY2FwLA0KKwkudmlkaW9jX3RyeV9m bXRfdmlkX2NhcAkJPSBpc2NfdHJ5X2ZtdF92aWRfY2FwLA0KKw0KKwkudmlkaW9jX2VudW1faW5w dXQJCT0gaXNjX2VudW1faW5wdXQsDQorCS52aWRpb2NfZ19pbnB1dAkJCT0gaXNjX2dfaW5wdXQs DQorCS52aWRpb2Nfc19pbnB1dAkJCT0gaXNjX3NfaW5wdXQsDQorDQorCS52aWRpb2NfcmVxYnVm cwkJCT0gdmIyX2lvY3RsX3JlcWJ1ZnMsDQorCS52aWRpb2NfcXVlcnlidWYJCT0gdmIyX2lvY3Rs X3F1ZXJ5YnVmLA0KKwkudmlkaW9jX3FidWYJCQk9IHZiMl9pb2N0bF9xYnVmLA0KKwkudmlkaW9j X2V4cGJ1ZgkJCT0gdmIyX2lvY3RsX2V4cGJ1ZiwNCisJLnZpZGlvY19kcWJ1ZgkJCT0gdmIyX2lv Y3RsX2RxYnVmLA0KKwkudmlkaW9jX2NyZWF0ZV9idWZzCQk9IHZiMl9pb2N0bF9jcmVhdGVfYnVm cywNCisJLnZpZGlvY19wcmVwYXJlX2J1ZgkJPSB2YjJfaW9jdGxfcHJlcGFyZV9idWYsDQorCS52 aWRpb2Nfc3RyZWFtb24JCT0gdmIyX2lvY3RsX3N0cmVhbW9uLA0KKwkudmlkaW9jX3N0cmVhbW9m ZgkJPSB2YjJfaW9jdGxfc3RyZWFtb2ZmLA0KKw0KKwkudmlkaW9jX2dfcGFybQkJCT0gaXNjX2df cGFybSwNCisJLnZpZGlvY19zX3Bhcm0JCQk9IGlzY19zX3Bhcm0sDQorCS52aWRpb2NfZW51bV9m cmFtZXNpemVzCQk9IGlzY19lbnVtX2ZyYW1lc2l6ZXMsDQorCS52aWRpb2NfZW51bV9mcmFtZWlu dGVydmFscwk9IGlzY19lbnVtX2ZyYW1laW50ZXJ2YWxzLA0KKw0KKwkudmlkaW9jX2xvZ19zdGF0 dXMJCT0gdjRsMl9jdHJsX2xvZ19zdGF0dXMsDQorCS52aWRpb2Nfc3Vic2NyaWJlX2V2ZW50CQk9 IHY0bDJfY3RybF9zdWJzY3JpYmVfZXZlbnQsDQorCS52aWRpb2NfdW5zdWJzY3JpYmVfZXZlbnQJ PSB2NGwyX2V2ZW50X3Vuc3Vic2NyaWJlLA0KK307DQorDQorc3RhdGljIGludCBpc2Nfb3Blbihz dHJ1Y3QgZmlsZSAqZmlsZSkNCit7DQorCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2aWRlb19k cnZkYXRhKGZpbGUpOw0KKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaXNjLT5jdXJyZW50X3N1 YmRldi0+c2Q7DQorCWludCByZXQ7DQorDQorCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUo JmlzYy0+bG9jaykpDQorCQlyZXR1cm4gLUVSRVNUQVJUU1lTOw0KKw0KKwlyZXQgPSB2NGwyX2Zo X29wZW4oZmlsZSk7DQorCWlmIChyZXQgPCAwKQ0KKwkJZ290byB1bmxvY2s7DQorDQorCWlmICgh djRsMl9maF9pc19zaW5ndWxhcl9maWxlKGZpbGUpKQ0KKwkJZ290byB1bmxvY2s7DQorDQorCXJl dCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIGNvcmUsIHNfcG93ZXIsIDEpOw0KKwlpZiAocmV0IDwg MCAmJiByZXQgIT0gLUVOT0lPQ1RMQ01EKSB7DQorCQl2NGwyX2ZoX3JlbGVhc2UoZmlsZSk7DQor CQlnb3RvIHVubG9jazsNCisJfQ0KKw0KKwlyZXQgPSBpc2Nfc2V0X2ZtdChpc2MsICZpc2MtPmZt dCk7DQorCWlmIChyZXQpIHsNCisJCXY0bDJfc3ViZGV2X2NhbGwoc2QsIGNvcmUsIHNfcG93ZXIs IDApOw0KKwkJdjRsMl9maF9yZWxlYXNlKGZpbGUpOw0KKwl9DQorDQordW5sb2NrOg0KKwltdXRl eF91bmxvY2soJmlzYy0+bG9jayk7DQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQg aXNjX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpDQorew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAq aXNjID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGlz Yy0+Y3VycmVudF9zdWJkZXYtPnNkOw0KKwlib29sIGZoX3Npbmd1bGFyOw0KKwlpbnQgcmV0Ow0K Kw0KKwltdXRleF9sb2NrKCZpc2MtPmxvY2spOw0KKw0KKwlmaF9zaW5ndWxhciA9IHY0bDJfZmhf aXNfc2luZ3VsYXJfZmlsZShmaWxlKTsNCisNCisJcmV0ID0gX3ZiMl9mb3BfcmVsZWFzZShmaWxl LCBOVUxMKTsNCisNCisJaWYgKGZoX3Npbmd1bGFyKQ0KKwkJdjRsMl9zdWJkZXZfY2FsbChzZCwg Y29yZSwgc19wb3dlciwgMCk7DQorDQorCW11dGV4X3VubG9jaygmaXNjLT5sb2NrKTsNCisNCisJ cmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0 aW9ucyBpc2NfZm9wcyA9IHsNCisJLm93bmVyCQk9IFRISVNfTU9EVUxFLA0KKwkub3BlbgkJPSBp c2Nfb3BlbiwNCisJLnJlbGVhc2UJPSBpc2NfcmVsZWFzZSwNCisJLnVubG9ja2VkX2lvY3RsCT0g dmlkZW9faW9jdGwyLA0KKwkucmVhZAkJPSB2YjJfZm9wX3JlYWQsDQorCS5tbWFwCQk9IHZiMl9m b3BfbW1hcCwNCisJLnBvbGwJCT0gdmIyX2ZvcF9wb2xsLA0KK307DQorDQoraXJxcmV0dXJuX3Qg aXNjX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpDQorew0KKwlzdHJ1Y3QgaXNjX2Rl dmljZSAqaXNjID0gKHN0cnVjdCBpc2NfZGV2aWNlICopZGV2X2lkOw0KKwlzdHJ1Y3QgcmVnbWFw ICpyZWdtYXAgPSBpc2MtPnJlZ21hcDsNCisJdTMyIGlzY19pbnRzciwgaXNjX2ludG1hc2ssIHBl bmRpbmc7DQorCWlycXJldHVybl90IHJldCA9IElSUV9OT05FOw0KKw0KKwlyZWdtYXBfcmVhZChy ZWdtYXAsIElTQ19JTlRTUiwgJmlzY19pbnRzcik7DQorCXJlZ21hcF9yZWFkKHJlZ21hcCwgSVND X0lOVE1BU0ssICZpc2NfaW50bWFzayk7DQorDQorCXBlbmRpbmcgPSBpc2NfaW50c3IgJiBpc2Nf aW50bWFzazsNCisNCisJaWYgKGxpa2VseShwZW5kaW5nICYgSVNDX0lOVF9ERE9ORSkpIHsNCisJ CXNwaW5fbG9jaygmaXNjLT5kbWFfcXVldWVfbG9jayk7DQorCQlpZiAoaXNjLT5jdXJfZnJtKSB7 DQorCQkJc3RydWN0IHZiMl92NGwyX2J1ZmZlciAqdmJ1ZiA9ICZpc2MtPmN1cl9mcm0tPnZiOw0K KwkJCXN0cnVjdCB2YjJfYnVmZmVyICp2YiA9ICZ2YnVmLT52YjJfYnVmOw0KKw0KKwkJCXZiLT50 aW1lc3RhbXAgPSBrdGltZV9nZXRfbnMoKTsNCisJCQl2YnVmLT5zZXF1ZW5jZSA9IGlzYy0+c2Vx dWVuY2UrKzsNCisJCQl2YjJfYnVmZmVyX2RvbmUodmIsIFZCMl9CVUZfU1RBVEVfRE9ORSk7DQor CQkJaXNjLT5jdXJfZnJtID0gTlVMTDsNCisJCX0NCisNCisJCWlmICghbGlzdF9lbXB0eSgmaXNj LT5kbWFfcXVldWUpICYmICFpc2MtPnN0b3ApIHsNCisJCQlpc2MtPmN1cl9mcm0gPSBsaXN0X2Zp cnN0X2VudHJ5KCZpc2MtPmRtYV9xdWV1ZSwNCisJCQkJCQkgICAgIHN0cnVjdCBpc2NfYnVmZmVy LCBsaXN0KTsNCisJCQlsaXN0X2RlbCgmaXNjLT5jdXJfZnJtLT5saXN0KTsNCisNCisJCQlpc2Nf c3RhcnRfZG1hKGlzYyk7DQorCQl9DQorDQorCQlpZiAoaXNjLT5zdG9wKQ0KKwkJCWNvbXBsZXRl KCZpc2MtPmNvbXApOw0KKw0KKwkJcmV0ID0gSVJRX0hBTkRMRUQ7DQorCQlzcGluX3VubG9jaygm aXNjLT5kbWFfcXVldWVfbG9jayk7DQorCX0NCisNCisJaWYgKHBlbmRpbmcgJiBJU0NfSU5UX0hJ U0RPTkUpIHsNCisJCXNjaGVkdWxlX3dvcmsoJmlzYy0+YXdiX3dvcmspOw0KKwkJcmV0ID0gSVJR X0hBTkRMRUQ7DQorCX0NCisNCisJcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIHZvaWQgaXNj X2hpc3RfY291bnQoc3RydWN0IGlzY19kZXZpY2UgKmlzYywgdTMyICptaW4sIHUzMiAqbWF4KQ0K K3sNCisJc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjLT5yZWdtYXA7DQorCXN0cnVjdCBpc2Nf Y3RybHMgKmN0cmxzID0gJmlzYy0+Y3RybHM7DQorCXUzMiAqaGlzdF9jb3VudCA9ICZjdHJscy0+ aGlzdF9jb3VudFtjdHJscy0+aGlzdF9pZF07DQorCXUzMiAqaGlzdF9lbnRyeSA9ICZjdHJscy0+ aGlzdF9lbnRyeVswXTsNCisJdTMyIGk7DQorDQorCSptaW4gPSAwOw0KKwkqbWF4ID0gSElTVF9F TlRSSUVTOw0KKw0KKwlyZWdtYXBfYnVsa19yZWFkKHJlZ21hcCwgSVNDX0hJU19FTlRSWSwgaGlz dF9lbnRyeSwgSElTVF9FTlRSSUVTKTsNCisNCisJKmhpc3RfY291bnQgPSAwOw0KKwkvKg0KKwkg KiB3ZSBkZWxpYmVyYXRlbHkgaWdub3JlIHRoZSBlbmQgb2YgdGhlIGhpc3RvZ3JhbSwNCisJICog dGhlIG1vc3Qgd2hpdGUgcGl4ZWxzDQorCSAqLw0KKwlmb3IgKGkgPSAxOyBpIDwgSElTVF9FTlRS SUVTOyBpKyspIHsNCisJCWlmICgqaGlzdF9lbnRyeSAmJiAhKm1pbikNCisJCQkqbWluID0gaTsN CisJCWlmICgqaGlzdF9lbnRyeSkNCisJCQkqbWF4ID0gaTsNCisJCSpoaXN0X2NvdW50ICs9IGkg KiAoKmhpc3RfZW50cnkrKyk7DQorCX0NCisNCisJaWYgKCEqbWluKQ0KKwkJKm1pbiA9IDE7DQor fQ0KKw0KK3N0YXRpYyB2b2lkIGlzY193Yl91cGRhdGUoc3RydWN0IGlzY19jdHJscyAqY3RybHMp DQorew0KKwl1MzIgKmhpc3RfY291bnQgPSAmY3RybHMtPmhpc3RfY291bnRbMF07DQorCXUzMiBj LCBvZmZzZXRbNF07DQorCXU2NCBhdmcgPSAwOw0KKwkvKiBXZSBjb21wdXRlIHR3byBnYWlucywg c3RyZXRjaCBnYWluIGFuZCBncmV5IHdvcmxkIGdhaW4gKi8NCisJdTMyIHNfZ2Fpbls0XSwgZ3df Z2Fpbls0XTsNCisNCisJLyoNCisJICogQWNjb3JkaW5nIHRvIEdyZXkgV29ybGQsIHdlIG5lZWQg dG8gc2V0IGdhaW5zIGZvciBSL0IgdG8gbm9ybWFsaXplDQorCSAqIHRoZW0gdG93YXJkcyB0aGUg Z3JlZW4gY2hhbm5lbC4NCisJICogVGh1cyB3ZSB3YW50IHRvIGtlZXAgR3JlZW4gYXMgZml4ZWQg YW5kIGFkanVzdCBvbmx5IFJlZC9CbHVlDQorCSAqIENvbXB1dGUgdGhlIGF2ZXJhZ2Ugb2YgdGhl IGJvdGggZ3JlZW4gY2hhbm5lbHMgZmlyc3QNCisJICovDQorCWF2ZyA9ICh1NjQpaGlzdF9jb3Vu dFtJU0NfSElTX0NGR19NT0RFX0dSXSArDQorCQkodTY0KWhpc3RfY291bnRbSVNDX0hJU19DRkdf TU9ERV9HQl07DQorCWF2ZyA+Pj0gMTsNCisNCisJLyogR3JlZW4gaGlzdG9ncmFtIGlzIG51bGws IG5vdGhpbmcgdG8gZG8gKi8NCisJaWYgKCFhdmcpDQorCQlyZXR1cm47DQorDQorCWZvciAoYyA9 IElTQ19ISVNfQ0ZHX01PREVfR1I7IGMgPD0gSVNDX0hJU19DRkdfTU9ERV9COyBjKyspIHsNCisJ CS8qDQorCQkgKiB0aGUgY29sb3Igb2Zmc2V0IGlzIHRoZSBtaW5pbXVtIHZhbHVlIG9mIHRoZSBo aXN0b2dyYW0uDQorCQkgKiB3ZSBzdHJldGNoIHRoaXMgY29sb3IgdG8gdGhlIGZ1bGwgcmFuZ2Ug Ynkgc3Vic3RyYWN0aW5nDQorCQkgKiB0aGlzIHZhbHVlIGZyb20gdGhlIGNvbG9yIGNvbXBvbmVu dC4NCisJCSAqLw0KKwkJb2Zmc2V0W2NdID0gY3RybHMtPmhpc3RfbWlubWF4W2NdW0hJU1RfTUlO X0lOREVYXTsNCisJCS8qDQorCQkgKiBUaGUgb2Zmc2V0IGlzIGFsd2F5cyBhdCBsZWFzdCAxLiBJ ZiB0aGUgb2Zmc2V0IGlzIDEsIHdlIGRvDQorCQkgKiBub3QgbmVlZCB0byBhZGp1c3QgaXQsIHNv IG91ciByZXN1bHQgbXVzdCBiZSB6ZXJvLg0KKwkJICogdGhlIG9mZnNldCBpcyBjb21wdXRlZCBp biBhIGhpc3RvZ3JhbSBvbiA5IGJpdHMgKDAuLjUxMikNCisJCSAqIGJ1dCB0aGUgb2Zmc2V0IGlu IHJlZ2lzdGVyIGlzIGJhc2VkIG9uDQorCQkgKiAxMiBiaXRzIHBpcGVsaW5lICgwLi40MDk2KS4N CisJCSAqIHdlIG5lZWQgdG8gc2hpZnQgd2l0aCB0aGUgMyBiaXRzIHRoYXQgdGhlIGhpc3RvZ3Jh bSBpcw0KKwkJICogaWdub3JpbmcNCisJCSAqLw0KKwkJY3RybHMtPm9mZnNldFtjXSA9IChvZmZz ZXRbY10gLSAxKSA8PCAzOw0KKw0KKwkJLyogdGhlIG9mZnNldCBpcyB0aGVuIHRha2VuIGFuZCBj b252ZXJ0ZWQgdG8gMidzIGNvbXBsZW1lbnRzICovDQorCQlpZiAoIWN0cmxzLT5vZmZzZXRbY10p DQorCQkJY3RybHMtPm9mZnNldFtjXSA9IElTQ19XQl9PX1pFUk9fVkFMOw0KKw0KKwkJLyoNCisJ CSAqIHRoZSBzdHJldGNoIGdhaW4gaXMgdGhlIHRvdGFsIG51bWJlciBvZiBoaXN0b2dyYW0gYmlu cw0KKwkJICogZGl2aWRlZCBieSB0aGUgYWN0dWFsIHJhbmdlIG9mIGNvbG9yIGNvbXBvbmVudCAo TWF4IC0gTWluKQ0KKwkJICogSWYgd2UgY29tcHV0ZSBnYWluIGxpa2UgdGhpcywgdGhlIGFjdHVh bCBjb2xvciBjb21wb25lbnQNCisJCSAqIHdpbGwgYmUgc3RyZXRjaGVkIHRvIHRoZSBmdWxsIGhp c3RvZ3JhbS4NCisJCSAqIFdlIG5lZWQgdG8gc2hpZnQgOSBiaXRzIGZvciBwcmVjaXNpb24sIHdl IGhhdmUgOSBiaXRzIGZvcg0KKwkJICogZGVjaW1hbHMNCisJCSAqLw0KKwkJc19nYWluW2NdID0g KEhJU1RfRU5UUklFUyA8PCA5KSAvDQorCQkJKGN0cmxzLT5oaXN0X21pbm1heFtjXVtISVNUX01B WF9JTkRFWF0gLQ0KKwkJCWN0cmxzLT5oaXN0X21pbm1heFtjXVtISVNUX01JTl9JTkRFWF0gKyAx KTsNCisNCisJCS8qDQorCQkgKiBOb3cgd2UgaGF2ZSB0byBjb21wdXRlIHRoZSBnYWluIHcuci50 LiB0aGUgYXZlcmFnZS4NCisJCSAqIEFkZC9sb3NlIGdhaW4gdG8gdGhlIGNvbXBvbmVudCB0b3dh cmRzIHRoZSBhdmVyYWdlLg0KKwkJICogSWYgaXQgaGFwcGVucyB0aGF0IHRoZSBjb21wb25lbnQg aXMgemVybywgdXNlIHRoZQ0KKwkJICogZml4ZWQgcG9pbnQgdmFsdWUgOiAxLjAgZ2Fpbi4NCisJ CSAqLw0KKwkJaWYgKGhpc3RfY291bnRbY10pDQorCQkJZ3dfZ2FpbltjXSA9IGRpdl91NjQoYXZn IDw8IDksIGhpc3RfY291bnRbY10pOw0KKwkJZWxzZQ0KKwkJCWd3X2dhaW5bY10gPSAxIDw8IDk7 DQorDQorCQkvKiBtdWx0aXBseSBib3RoIGdhaW5zIGFuZCBhZGp1c3QgZm9yIGRlY2ltYWxzICov DQorCQljdHJscy0+Z2FpbltjXSA9IHNfZ2FpbltjXSAqIGd3X2dhaW5bY107DQorCQljdHJscy0+ Z2FpbltjXSA+Pj0gOTsNCisJfQ0KK30NCisNCitzdGF0aWMgdm9pZCBpc2NfYXdiX3dvcmsoc3Ry dWN0IHdvcmtfc3RydWN0ICp3KQ0KK3sNCisJc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9DQorCQlj b250YWluZXJfb2Yodywgc3RydWN0IGlzY19kZXZpY2UsIGF3Yl93b3JrKTsNCisJc3RydWN0IHJl Z21hcCAqcmVnbWFwID0gaXNjLT5yZWdtYXA7DQorCXN0cnVjdCBpc2NfY3RybHMgKmN0cmxzID0g JmlzYy0+Y3RybHM7DQorCXUzMiBoaXN0X2lkID0gY3RybHMtPmhpc3RfaWQ7DQorCXUzMiBiYXlz ZWw7DQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQorCXUzMiBtaW4sIG1heDsNCisNCisJLyogc3Ry ZWFtaW5nIGlzIG5vdCBhY3RpdmUgYW55bW9yZSAqLw0KKwlpZiAoaXNjLT5zdG9wKQ0KKwkJcmV0 dXJuOw0KKw0KKwlpZiAoY3RybHMtPmhpc3Rfc3RhdCAhPSBISVNUX0VOQUJMRUQpDQorCQlyZXR1 cm47DQorDQorCWlzY19oaXN0X2NvdW50KGlzYywgJm1pbiwgJm1heCk7DQorCWN0cmxzLT5oaXN0 X21pbm1heFtoaXN0X2lkXVtISVNUX01JTl9JTkRFWF0gPSBtaW47DQorCWN0cmxzLT5oaXN0X21p bm1heFtoaXN0X2lkXVtISVNUX01BWF9JTkRFWF0gPSBtYXg7DQorDQorCWlmIChoaXN0X2lkICE9 IElTQ19ISVNfQ0ZHX01PREVfQikgew0KKwkJaGlzdF9pZCsrOw0KKwl9IGVsc2Ugew0KKwkJaXNj X3diX3VwZGF0ZShjdHJscyk7DQorCQloaXN0X2lkID0gSVNDX0hJU19DRkdfTU9ERV9HUjsNCisJ fQ0KKw0KKwljdHJscy0+aGlzdF9pZCA9IGhpc3RfaWQ7DQorCWJheXNlbCA9IGlzYy0+Y29uZmln LnNkX2Zvcm1hdC0+Y2ZhX2JheWNmZyA8PCBJU0NfSElTX0NGR19CQVlTRUxfU0hJRlQ7DQorDQor CS8qIGlmIG5vIG1vcmUgYXV0byB3aGl0ZSBiYWxhbmNlLCByZXNldCBjb250cm9scy4gKi8NCisJ aWYgKGN0cmxzLT5hd2IgPT0gSVNDX1dCX05PTkUpDQorCQlpc2NfcmVzZXRfYXdiX2N0cmxzKGlz Yyk7DQorDQorCXBtX3J1bnRpbWVfZ2V0X3N5bmMoaXNjLT5kZXYpOw0KKw0KKwkvKg0KKwkgKiBv bmx5IHVwZGF0ZSBpZiB3ZSBoYXZlIGFsbCB0aGUgcmVxdWlyZWQgaGlzdG9ncmFtcyBhbmQgY29u dHJvbHMNCisJICogaWYgYXdiIGhhcyBiZWVuIGRpc2FibGVkLCB3ZSBuZWVkIHRvIHJlc2V0IHJl Z2lzdGVycyBhcyB3ZWxsLg0KKwkgKi8NCisJaWYgKGhpc3RfaWQgPT0gSVNDX0hJU19DRkdfTU9E RV9HUiB8fCBjdHJscy0+YXdiID09IElTQ19XQl9OT05FKSB7DQorCQkvKg0KKwkJICogSXQgbWF5 IGhhcHBlbiB0aGF0IERNQSBEb25lIElSUSB3aWxsIHRyaWdnZXIgd2hpbGUgd2UgYXJlDQorCQkg KiB1cGRhdGluZyB3aGl0ZSBiYWxhbmNlIHJlZ2lzdGVycyBoZXJlLg0KKwkJICogSW4gdGhhdCBj YXNlLCBvbmx5IHBhcnRzIG9mIHRoZSBjb250cm9scyBoYXZlIGJlZW4gdXBkYXRlZC4NCisJCSAq IFdlIGNhbiBhdm9pZCB0aGF0IGJ5IGxvY2tpbmcgdGhlIHNlY3Rpb24uDQorCQkgKi8NCisJCXNw aW5fbG9ja19pcnFzYXZlKCZpc2MtPmF3Yl9sb2NrLCBmbGFncyk7DQorCQlpc2NfdXBkYXRlX2F3 Yl9jdHJscyhpc2MpOw0KKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNjLT5hd2JfbG9jaywg ZmxhZ3MpOw0KKw0KKwkJLyoNCisJCSAqIGlmIHdlIGFyZSBkb2luZyBqdXN0IHRoZSBvbmUgdGlt ZSB3aGl0ZSBiYWxhbmNlIGFkanVzdG1lbnQsDQorCQkgKiB3ZSBhcmUgYmFzaWNhbGx5IGRvbmUu DQorCQkgKi8NCisJCWlmIChjdHJscy0+YXdiID09IElTQ19XQl9PTkVUSU1FKSB7DQorCQkJdjRs Ml9pbmZvKCZpc2MtPnY0bDJfZGV2LA0KKwkJCQkgICJDb21wbGV0ZWQgb25lIHRpbWUgd2hpdGUt YmFsYW5jZSBhZGp1c3RtZW50LlxuIik7DQorCQkJY3RybHMtPmF3YiA9IElTQ19XQl9OT05FOw0K KwkJfQ0KKwl9DQorCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19ISVNfQ0ZHLCBoaXN0X2lkIHwg YmF5c2VsIHwgSVNDX0hJU19DRkdfUkFSKTsNCisJaXNjX3VwZGF0ZV9wcm9maWxlKGlzYyk7DQor CS8qIGlmIGF3YiBoYXMgYmVlbiBkaXNhYmxlZCwgd2UgZG9uJ3QgbmVlZCB0byBzdGFydCBhbm90 aGVyIGhpc3RvZ3JhbSAqLw0KKwlpZiAoY3RybHMtPmF3YikNCisJCXJlZ21hcF93cml0ZShyZWdt YXAsIElTQ19DVFJMRU4sIElTQ19DVFJMX0hJU1JFUSk7DQorDQorCXBtX3J1bnRpbWVfcHV0X3N5 bmMoaXNjLT5kZXYpOw0KK30NCisNCitzdGF0aWMgaW50IGlzY19zX2N0cmwoc3RydWN0IHY0bDJf Y3RybCAqY3RybCkNCit7DQorCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSBjb250YWluZXJfb2Yo Y3RybC0+aGFuZGxlciwNCisJCQkJCSAgICAgc3RydWN0IGlzY19kZXZpY2UsIGN0cmxzLmhhbmRs ZXIpOw0KKwlzdHJ1Y3QgaXNjX2N0cmxzICpjdHJscyA9ICZpc2MtPmN0cmxzOw0KKw0KKwlpZiAo Y3RybC0+ZmxhZ3MgJiBWNEwyX0NUUkxfRkxBR19JTkFDVElWRSkNCisJCXJldHVybiAwOw0KKw0K Kwlzd2l0Y2ggKGN0cmwtPmlkKSB7DQorCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoNCisJCWN0 cmxzLT5icmlnaHRuZXNzID0gY3RybC0+dmFsICYgSVNDX0NCQ19CUklHSFRfTUFTSzsNCisJCWJy ZWFrOw0KKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOg0KKwkJY3RybHMtPmNvbnRyYXN0ID0gY3Ry bC0+dmFsICYgSVNDX0NCQ19DT05UUkFTVF9NQVNLOw0KKwkJYnJlYWs7DQorCWNhc2UgVjRMMl9D SURfR0FNTUE6DQorCQljdHJscy0+Z2FtbWFfaW5kZXggPSBjdHJsLT52YWw7DQorCQlicmVhazsN CisJY2FzZSBWNEwyX0NJRF9BVVRPX1dISVRFX0JBTEFOQ0U6DQorCQlpZiAoY3RybC0+dmFsID09 IDEpDQorCQkJY3RybHMtPmF3YiA9IElTQ19XQl9BVVRPOw0KKwkJZWxzZQ0KKwkJCWN0cmxzLT5h d2IgPSBJU0NfV0JfTk9ORTsNCisNCisJCS8qIHdlIGRpZCBub3QgY29uZmlndXJlIElTQyB5ZXQg Ki8NCisJCWlmICghaXNjLT5jb25maWcuc2RfZm9ybWF0KQ0KKwkJCWJyZWFrOw0KKw0KKwkJaWYg KGN0cmxzLT5oaXN0X3N0YXQgIT0gSElTVF9FTkFCTEVEKQ0KKwkJCWlzY19yZXNldF9hd2JfY3Ry bHMoaXNjKTsNCisNCisJCWlmIChpc2MtPmN0cmxzLmF3YiA9PSBJU0NfV0JfQVVUTyAmJg0KKwkJ ICAgIHZiMl9pc19zdHJlYW1pbmcoJmlzYy0+dmIyX3ZpZHEpICYmDQorCQkgICAgSVNDX0lTX0ZP Uk1BVF9SQVcoaXNjLT5jb25maWcuc2RfZm9ybWF0LT5tYnVzX2NvZGUpKQ0KKwkJCWlzY19zZXRf aGlzdG9ncmFtKGlzYywgdHJ1ZSk7DQorDQorCQlicmVhazsNCisJY2FzZSBWNEwyX0NJRF9ET19X SElURV9CQUxBTkNFOg0KKwkJLyogaWYgQVdCIGlzIGVuYWJsZWQsIGRvIG5vdGhpbmcgKi8NCisJ CWlmIChjdHJscy0+YXdiID09IElTQ19XQl9BVVRPKQ0KKwkJCXJldHVybiAwOw0KKw0KKwkJY3Ry bHMtPmF3YiA9IElTQ19XQl9PTkVUSU1FOw0KKwkJaXNjX3NldF9oaXN0b2dyYW0oaXNjLCB0cnVl KTsNCisJCXY0bDJfZGJnKDEsIGRlYnVnLCAmaXNjLT52NGwyX2RldiwNCisJCQkgIk9uZSB0aW1l IHdoaXRlLWJhbGFuY2Ugc3RhcnRlZC5cbiIpOw0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQly ZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGNvbnN0 IHN0cnVjdCB2NGwyX2N0cmxfb3BzIGlzY19jdHJsX29wcyA9IHsNCisJLnNfY3RybAk9IGlzY19z X2N0cmwsDQorfTsNCisNCitzdGF0aWMgaW50IGlzY19jdHJsX2luaXQoc3RydWN0IGlzY19kZXZp Y2UgKmlzYykNCit7DQorCWNvbnN0IHN0cnVjdCB2NGwyX2N0cmxfb3BzICpvcHMgPSAmaXNjX2N0 cmxfb3BzOw0KKwlzdHJ1Y3QgaXNjX2N0cmxzICpjdHJscyA9ICZpc2MtPmN0cmxzOw0KKwlzdHJ1 Y3QgdjRsMl9jdHJsX2hhbmRsZXIgKmhkbCA9ICZjdHJscy0+aGFuZGxlcjsNCisJaW50IHJldDsN CisNCisJY3RybHMtPmhpc3Rfc3RhdCA9IEhJU1RfSU5JVDsNCisJaXNjX3Jlc2V0X2F3Yl9jdHJs cyhpc2MpOw0KKw0KKwlyZXQgPSB2NGwyX2N0cmxfaGFuZGxlcl9pbml0KGhkbCwgNSk7DQorCWlm IChyZXQgPCAwKQ0KKwkJcmV0dXJuIHJldDsNCisNCisJY3RybHMtPmJyaWdodG5lc3MgPSAwOw0K KwljdHJscy0+Y29udHJhc3QgPSAyNTY7DQorDQorCXY0bDJfY3RybF9uZXdfc3RkKGhkbCwgb3Bz LCBWNEwyX0NJRF9CUklHSFRORVNTLCAtMTAyNCwgMTAyMywgMSwgMCk7DQorCXY0bDJfY3RybF9u ZXdfc3RkKGhkbCwgb3BzLCBWNEwyX0NJRF9DT05UUkFTVCwgLTIwNDgsIDIwNDcsIDEsIDI1Nik7 DQorCXY0bDJfY3RybF9uZXdfc3RkKGhkbCwgb3BzLCBWNEwyX0NJRF9HQU1NQSwgMCwgR0FNTUFf TUFYLCAxLCAyKTsNCisJdjRsMl9jdHJsX25ld19zdGQoaGRsLCBvcHMsIFY0TDJfQ0lEX0FVVE9f V0hJVEVfQkFMQU5DRSwgMCwgMSwgMSwgMSk7DQorDQorCS8qIGRvX3doaXRlX2JhbGFuY2UgaXMg YSBidXR0b24sIHNvIG1pbixtYXgsc3RlcCxkZWZhdWx0IGFyZSBpZ25vcmVkICovDQorCWlzYy0+ ZG9fd2JfY3RybCA9IHY0bDJfY3RybF9uZXdfc3RkKGhkbCwgb3BzLCBWNEwyX0NJRF9ET19XSElU RV9CQUxBTkNFLA0KKwkJCQkJICAgIDAsIDAsIDAsIDApOw0KKw0KKwl2NGwyX2N0cmxfYWN0aXZh dGUoaXNjLT5kb193Yl9jdHJsLCBmYWxzZSk7DQorDQorCXY0bDJfY3RybF9oYW5kbGVyX3NldHVw KGhkbCk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IGlzY19hc3luY19ib3Vu ZChzdHJ1Y3QgdjRsMl9hc3luY19ub3RpZmllciAqbm90aWZpZXIsDQorCQkJICAgIHN0cnVjdCB2 NGwyX3N1YmRldiAqc3ViZGV2LA0KKwkJCSAgICBzdHJ1Y3QgdjRsMl9hc3luY19zdWJkZXYgKmFz ZCkNCit7DQorCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSBjb250YWluZXJfb2Yobm90aWZpZXIt PnY0bDJfZGV2LA0KKwkJCQkJICAgICAgc3RydWN0IGlzY19kZXZpY2UsIHY0bDJfZGV2KTsNCisJ c3RydWN0IGlzY19zdWJkZXZfZW50aXR5ICpzdWJkZXZfZW50aXR5ID0NCisJCWNvbnRhaW5lcl9v Zihub3RpZmllciwgc3RydWN0IGlzY19zdWJkZXZfZW50aXR5LCBub3RpZmllcik7DQorDQorCWlm ICh2aWRlb19pc19yZWdpc3RlcmVkKCZpc2MtPnZpZGVvX2RldikpIHsNCisJCXY0bDJfZXJyKCZp c2MtPnY0bDJfZGV2LCAib25seSBzdXBwb3J0cyBvbmUgc3ViLWRldmljZS5cbiIpOw0KKwkJcmV0 dXJuIC1FQlVTWTsNCisJfQ0KKw0KKwlzdWJkZXZfZW50aXR5LT5zZCA9IHN1YmRldjsNCisNCisJ cmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyB2b2lkIGlzY19hc3luY191bmJpbmQoc3RydWN0IHY0 bDJfYXN5bmNfbm90aWZpZXIgKm5vdGlmaWVyLA0KKwkJCSAgICAgIHN0cnVjdCB2NGwyX3N1YmRl diAqc3ViZGV2LA0KKwkJCSAgICAgIHN0cnVjdCB2NGwyX2FzeW5jX3N1YmRldiAqYXNkKQ0KK3sN CisJc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IGNvbnRhaW5lcl9vZihub3RpZmllci0+djRsMl9k ZXYsDQorCQkJCQkgICAgICBzdHJ1Y3QgaXNjX2RldmljZSwgdjRsMl9kZXYpOw0KKwljYW5jZWxf d29ya19zeW5jKCZpc2MtPmF3Yl93b3JrKTsNCisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmlz Yy0+dmlkZW9fZGV2KTsNCisJdjRsMl9jdHJsX2hhbmRsZXJfZnJlZSgmaXNjLT5jdHJscy5oYW5k bGVyKTsNCit9DQorDQorc3RhdGljIHN0cnVjdCBpc2NfZm9ybWF0ICpmaW5kX2Zvcm1hdF9ieV9j b2RlKHVuc2lnbmVkIGludCBjb2RlLCBpbnQgKmluZGV4KQ0KK3sNCisJc3RydWN0IGlzY19mb3Jt YXQgKmZtdCA9ICZmb3JtYXRzX2xpc3RbMF07DQorCXVuc2lnbmVkIGludCBpOw0KKw0KKwlmb3Ig KGkgPSAwOyBpIDwgQVJSQVlfU0laRShmb3JtYXRzX2xpc3QpOyBpKyspIHsNCisJCWlmIChmbXQt Pm1idXNfY29kZSA9PSBjb2RlKSB7DQorCQkJKmluZGV4ID0gaTsNCisJCQlyZXR1cm4gZm10Ow0K KwkJfQ0KKw0KKwkJZm10Kys7DQorCX0NCisNCisJcmV0dXJuIE5VTEw7DQorfQ0KKw0KK3N0YXRp YyBpbnQgaXNjX2Zvcm1hdHNfaW5pdChzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KK3sNCisJc3Ry dWN0IGlzY19mb3JtYXQgKmZtdDsNCisJc3RydWN0IHY0bDJfc3ViZGV2ICpzdWJkZXYgPSBpc2Mt PmN1cnJlbnRfc3ViZGV2LT5zZDsNCisJdW5zaWduZWQgaW50IG51bV9mbXRzLCBpLCBqOw0KKwl1 MzIgbGlzdF9zaXplID0gQVJSQVlfU0laRShmb3JtYXRzX2xpc3QpOw0KKwlzdHJ1Y3QgdjRsMl9z dWJkZXZfbWJ1c19jb2RlX2VudW0gbWJ1c19jb2RlID0gew0KKwkJLndoaWNoID0gVjRMMl9TVUJE RVZfRk9STUFUX0FDVElWRSwNCisJfTsNCisNCisJbnVtX2ZtdHMgPSAwOw0KKwl3aGlsZSAoIXY0 bDJfc3ViZGV2X2NhbGwoc3ViZGV2LCBwYWQsIGVudW1fbWJ1c19jb2RlLA0KKwkgICAgICAgTlVM TCwgJm1idXNfY29kZSkpIHsNCisJCW1idXNfY29kZS5pbmRleCsrOw0KKw0KKwkJZm10ID0gZmlu ZF9mb3JtYXRfYnlfY29kZShtYnVzX2NvZGUuY29kZSwgJmkpOw0KKwkJaWYgKCFmbXQpIHsNCisJ CQl2NGwyX3dhcm4oJmlzYy0+djRsMl9kZXYsICJNYnVzIGNvZGUgJXggbm90IHN1cHBvcnRlZFxu IiwNCisJCQkJICBtYnVzX2NvZGUuY29kZSk7DQorCQkJY29udGludWU7DQorCQl9DQorDQorCQlm bXQtPnNkX3N1cHBvcnQgPSB0cnVlOw0KKwkJbnVtX2ZtdHMrKzsNCisJfQ0KKw0KKwlpZiAoIW51 bV9mbXRzKQ0KKwkJcmV0dXJuIC1FTlhJTzsNCisNCisJaXNjLT5udW1fdXNlcl9mb3JtYXRzID0g bnVtX2ZtdHM7DQorCWlzYy0+dXNlcl9mb3JtYXRzID0gZGV2bV9rY2FsbG9jKGlzYy0+ZGV2LA0K KwkJCQkJIG51bV9mbXRzLCBzaXplb2YoKmlzYy0+dXNlcl9mb3JtYXRzKSwNCisJCQkJCSBHRlBf S0VSTkVMKTsNCisJaWYgKCFpc2MtPnVzZXJfZm9ybWF0cykNCisJCXJldHVybiAtRU5PTUVNOw0K Kw0KKwlmbXQgPSAmZm9ybWF0c19saXN0WzBdOw0KKwlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IGxp c3Rfc2l6ZTsgaSsrKSB7DQorCQlpZiAoZm10LT5zZF9zdXBwb3J0KQ0KKwkJCWlzYy0+dXNlcl9m b3JtYXRzW2orK10gPSBmbXQ7DQorCQlmbXQrKzsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQor DQorc3RhdGljIGludCBpc2Nfc2V0X2RlZmF1bHRfZm10KHN0cnVjdCBpc2NfZGV2aWNlICppc2Mp DQorew0KKwlzdHJ1Y3QgdjRsMl9mb3JtYXQgZiA9IHsNCisJCS50eXBlID0gVjRMMl9CVUZfVFlQ RV9WSURFT19DQVBUVVJFLA0KKwkJLmZtdC5waXggPSB7DQorCQkJLndpZHRoCQk9IFZHQV9XSURU SCwNCisJCQkuaGVpZ2h0CQk9IFZHQV9IRUlHSFQsDQorCQkJLmZpZWxkCQk9IFY0TDJfRklFTERf Tk9ORSwNCisJCQkucGl4ZWxmb3JtYXQJPSBpc2MtPnVzZXJfZm9ybWF0c1swXS0+Zm91cmNjLA0K KwkJfSwNCisJfTsNCisJaW50IHJldDsNCisNCisJcmV0ID0gaXNjX3RyeV9mbXQoaXNjLCAmZiwg TlVMTCk7DQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlpc2MtPmZtdCA9IGY7DQor CXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IGlzY19hc3luY19jb21wbGV0ZShzdHJ1Y3Qg djRsMl9hc3luY19ub3RpZmllciAqbm90aWZpZXIpDQorew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAq aXNjID0gY29udGFpbmVyX29mKG5vdGlmaWVyLT52NGwyX2RldiwNCisJCQkJCSAgICAgIHN0cnVj dCBpc2NfZGV2aWNlLCB2NGwyX2Rldik7DQorCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSAm aXNjLT52aWRlb19kZXY7DQorCXN0cnVjdCB2YjJfcXVldWUgKnEgPSAmaXNjLT52YjJfdmlkcTsN CisJaW50IHJldDsNCisNCisJSU5JVF9XT1JLKCZpc2MtPmF3Yl93b3JrLCBpc2NfYXdiX3dvcmsp Ow0KKw0KKwlyZXQgPSB2NGwyX2RldmljZV9yZWdpc3Rlcl9zdWJkZXZfbm9kZXMoJmlzYy0+djRs Ml9kZXYpOw0KKwlpZiAocmV0IDwgMCkgew0KKwkJdjRsMl9lcnIoJmlzYy0+djRsMl9kZXYsICJG YWlsZWQgdG8gcmVnaXN0ZXIgc3ViZGV2IG5vZGVzXG4iKTsNCisJCXJldHVybiByZXQ7DQorCX0N CisNCisJaXNjLT5jdXJyZW50X3N1YmRldiA9IGNvbnRhaW5lcl9vZihub3RpZmllciwNCisJCQkJ CSAgIHN0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eSwgbm90aWZpZXIpOw0KKwltdXRleF9pbml0KCZp c2MtPmxvY2spOw0KKwlpbml0X2NvbXBsZXRpb24oJmlzYy0+Y29tcCk7DQorDQorCS8qIEluaXRp YWxpemUgdmlkZW9idWYyIHF1ZXVlICovDQorCXEtPnR5cGUJCQk9IFY0TDJfQlVGX1RZUEVfVklE RU9fQ0FQVFVSRTsNCisJcS0+aW9fbW9kZXMJCT0gVkIyX01NQVAgfCBWQjJfRE1BQlVGIHwgVkIy X1JFQUQ7DQorCXEtPmRydl9wcml2CQk9IGlzYzsNCisJcS0+YnVmX3N0cnVjdF9zaXplCT0gc2l6 ZW9mKHN0cnVjdCBpc2NfYnVmZmVyKTsNCisJcS0+b3BzCQkJPSAmaXNjX3ZiMl9vcHM7DQorCXEt Pm1lbV9vcHMJCT0gJnZiMl9kbWFfY29udGlnX21lbW9wczsNCisJcS0+dGltZXN0YW1wX2ZsYWdz CT0gVjRMMl9CVUZfRkxBR19USU1FU1RBTVBfTU9OT1RPTklDOw0KKwlxLT5sb2NrCQkJPSAmaXNj LT5sb2NrOw0KKwlxLT5taW5fYnVmZmVyc19uZWVkZWQJPSAxOw0KKwlxLT5kZXYJCQk9IGlzYy0+ ZGV2Ow0KKw0KKwlyZXQgPSB2YjJfcXVldWVfaW5pdChxKTsNCisJaWYgKHJldCA8IDApIHsNCisJ CXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LA0KKwkJCSAidmIyX3F1ZXVlX2luaXQoKSBmYWlsZWQ6 ICVkXG4iLCByZXQpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwkvKiBJbml0IHZpZGVvIGRt YSBxdWV1ZXMgKi8NCisJSU5JVF9MSVNUX0hFQUQoJmlzYy0+ZG1hX3F1ZXVlKTsNCisJc3Bpbl9s b2NrX2luaXQoJmlzYy0+ZG1hX3F1ZXVlX2xvY2spOw0KKwlzcGluX2xvY2tfaW5pdCgmaXNjLT5h d2JfbG9jayk7DQorDQorCXJldCA9IGlzY19mb3JtYXRzX2luaXQoaXNjKTsNCisJaWYgKHJldCA8 IDApIHsNCisJCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LA0KKwkJCSAiSW5pdCBmb3JtYXQgZmFp bGVkOiAlZFxuIiwgcmV0KTsNCisJCXJldHVybiByZXQ7DQorCX0NCisNCisJcmV0ID0gaXNjX3Nl dF9kZWZhdWx0X2ZtdChpc2MpOw0KKwlpZiAocmV0KSB7DQorCQl2NGwyX2VycigmaXNjLT52NGwy X2RldiwgIkNvdWxkIG5vdCBzZXQgZGVmYXVsdCBmb3JtYXRcbiIpOw0KKwkJcmV0dXJuIHJldDsN CisJfQ0KKw0KKwlyZXQgPSBpc2NfY3RybF9pbml0KGlzYyk7DQorCWlmIChyZXQpIHsNCisJCXY0 bDJfZXJyKCZpc2MtPnY0bDJfZGV2LCAiSW5pdCBpc2MgY3Ryb2xzIGZhaWxlZDogJWRcbiIsIHJl dCk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCS8qIFJlZ2lzdGVyIHZpZGVvIGRldmljZSAq Lw0KKwlzdHJzY3B5KHZkZXYtPm5hbWUsIEFUTUVMX0lTQ19OQU1FLCBzaXplb2YodmRldi0+bmFt ZSkpOw0KKwl2ZGV2LT5yZWxlYXNlCQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5Ow0KKwl2 ZGV2LT5mb3BzCQk9ICZpc2NfZm9wczsNCisJdmRldi0+aW9jdGxfb3BzCQk9ICZpc2NfaW9jdGxf b3BzOw0KKwl2ZGV2LT52NGwyX2RldgkJPSAmaXNjLT52NGwyX2RldjsNCisJdmRldi0+dmZsX2Rp cgkJPSBWRkxfRElSX1JYOw0KKwl2ZGV2LT5xdWV1ZQkJPSBxOw0KKwl2ZGV2LT5sb2NrCQk9ICZp c2MtPmxvY2s7DQorCXZkZXYtPmN0cmxfaGFuZGxlcgk9ICZpc2MtPmN0cmxzLmhhbmRsZXI7DQor CXZkZXYtPmRldmljZV9jYXBzCT0gVjRMMl9DQVBfU1RSRUFNSU5HIHwgVjRMMl9DQVBfVklERU9f Q0FQVFVSRTsNCisJdmlkZW9fc2V0X2RydmRhdGEodmRldiwgaXNjKTsNCisNCisJcmV0ID0gdmlk ZW9fcmVnaXN0ZXJfZGV2aWNlKHZkZXYsIFZGTF9UWVBFX0dSQUJCRVIsIC0xKTsNCisJaWYgKHJl dCA8IDApIHsNCisJCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LA0KKwkJCSAidmlkZW9fcmVnaXN0 ZXJfZGV2aWNlIGZhaWxlZDogJWRcbiIsIHJldCk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQor CXJldHVybiAwOw0KK30NCisNCitjb25zdCBzdHJ1Y3QgdjRsMl9hc3luY19ub3RpZmllcl9vcGVy YXRpb25zIGlzY19hc3luY19vcHMgPSB7DQorCS5ib3VuZCA9IGlzY19hc3luY19ib3VuZCwNCisJ LnVuYmluZCA9IGlzY19hc3luY191bmJpbmQsDQorCS5jb21wbGV0ZSA9IGlzY19hc3luY19jb21w bGV0ZSwNCit9Ow0KKw0KK3ZvaWQgaXNjX3N1YmRldl9jbGVhbnVwKHN0cnVjdCBpc2NfZGV2aWNl ICppc2MpDQorew0KKwlzdHJ1Y3QgaXNjX3N1YmRldl9lbnRpdHkgKnN1YmRldl9lbnRpdHk7DQor DQorCWxpc3RfZm9yX2VhY2hfZW50cnkoc3ViZGV2X2VudGl0eSwgJmlzYy0+c3ViZGV2X2VudGl0 aWVzLCBsaXN0KSB7DQorCQl2NGwyX2FzeW5jX25vdGlmaWVyX3VucmVnaXN0ZXIoJnN1YmRldl9l bnRpdHktPm5vdGlmaWVyKTsNCisJCXY0bDJfYXN5bmNfbm90aWZpZXJfY2xlYW51cCgmc3ViZGV2 X2VudGl0eS0+bm90aWZpZXIpOw0KKwl9DQorDQorCUlOSVRfTElTVF9IRUFEKCZpc2MtPnN1YmRl dl9lbnRpdGllcyk7DQorfQ0KKw0KK2ludCBpc2NfcGlwZWxpbmVfaW5pdChzdHJ1Y3QgaXNjX2Rl dmljZSAqaXNjKQ0KK3sNCisJc3RydWN0IGRldmljZSAqZGV2ID0gaXNjLT5kZXY7DQorCXN0cnVj dCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0KKwlzdHJ1Y3QgcmVnbWFwX2ZpZWxkICpy ZWdzOw0KKwl1bnNpZ25lZCBpbnQgaTsNCisNCisJLyogV0ItLT5DRkEtLT5DQy0tPkdBTS0tPkNT Qy0tPkNCQy0tPlNVQjQyMi0tPlNVQjQyMCAqLw0KKwljb25zdCBzdHJ1Y3QgcmVnX2ZpZWxkIHJl Z2ZpZWxkc1tJU0NfUElQRV9MSU5FX05PREVfTlVNXSA9IHsNCisJCVJFR19GSUVMRChJU0NfV0Jf Q1RSTCwgMCwgMCksDQorCQlSRUdfRklFTEQoSVNDX0NGQV9DVFJMLCAwLCAwKSwNCisJCVJFR19G SUVMRChJU0NfQ0NfQ1RSTCwgMCwgMCksDQorCQlSRUdfRklFTEQoSVNDX0dBTV9DVFJMLCAwLCAw KSwNCisJCVJFR19GSUVMRChJU0NfR0FNX0NUUkwsIDEsIDEpLA0KKwkJUkVHX0ZJRUxEKElTQ19H QU1fQ1RSTCwgMiwgMiksDQorCQlSRUdfRklFTEQoSVNDX0dBTV9DVFJMLCAzLCAzKSwNCisJCVJF R19GSUVMRChJU0NfQ1NDX0NUUkwsIDAsIDApLA0KKwkJUkVHX0ZJRUxEKElTQ19DQkNfQ1RSTCwg MCwgMCksDQorCQlSRUdfRklFTEQoSVNDX1NVQjQyMl9DVFJMLCAwLCAwKSwNCisJCVJFR19GSUVM RChJU0NfU1VCNDIwX0NUUkwsIDAsIDApLA0KKwl9Ow0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgSVND X1BJUEVfTElORV9OT0RFX05VTTsgaSsrKSB7DQorCQlyZWdzID0gZGV2bV9yZWdtYXBfZmllbGRf YWxsb2MoZGV2LCByZWdtYXAsIHJlZ2ZpZWxkc1tpXSk7DQorCQlpZiAoSVNfRVJSKHJlZ3MpKQ0K KwkJCXJldHVybiBQVFJfRVJSKHJlZ3MpOw0KKw0KKwkJaXNjLT5waXBlbGluZVtpXSA9ICByZWdz Ow0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCisvKiByZWdtYXAgY29uZmlndXJhdGlvbiAq Lw0KKyNkZWZpbmUgQVRNRUxfSVNDX1JFR19NQVggICAgMHhiZmMNCitjb25zdCBzdHJ1Y3QgcmVn bWFwX2NvbmZpZyBpc2NfcmVnbWFwX2NvbmZpZyA9IHsNCisJLnJlZ19iaXRzICAgICAgID0gMzIs DQorCS5yZWdfc3RyaWRlICAgICA9IDQsDQorCS52YWxfYml0cyAgICAgICA9IDMyLA0KKwkubWF4 X3JlZ2lzdGVyCT0gQVRNRUxfSVNDX1JFR19NQVgsDQorfTsNCisNCmRpZmYgLS1naXQgYS9kcml2 ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVsLWlzYy5jIGIvZHJpdmVycy9tZWRpYS9wbGF0 Zm9ybS9hdG1lbC9hdG1lbC1pc2MuYw0KaW5kZXggZGEzYjQ0MS4uMjM4MTZlMiAxMDA2NDQNCi0t LSBhL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvYXRtZWwtaXNjLmMNCisrKyBiL2RyaXZl cnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvYXRtZWwtaXNjLmMNCkBAIC0xLDEzICsxLDEyIEBADQor Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCiAvKg0KLSAqIEF0bWVsIEltYWdl IFNlbnNvciBDb250cm9sbGVyIChJU0MpIGRyaXZlcg0KKyAqIE1pY3JvY2hpcCBJbWFnZSBTZW5z b3IgQ29udHJvbGxlciAoSVNDKSBkcml2ZXINCiAgKg0KLSAqIENvcHlyaWdodCAoQykgMjAxNiBB dG1lbA0KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IE1pY3JvY2hpcCBUZWNobm9sb2d5LCBJ bmMuDQogICoNCiAgKiBBdXRob3I6IFNvbmdqdW4gV3UgPHNvbmdqdW4ud3VAbWljcm9jaGlwLmNv bT4NCisgKiBBdXRob3I6IEV1Z2VuIEhyaXN0ZXYgPGV1Z2VuLmhyaXN0ZXZAbWljcm9jaGlwLmNv bT4NCiAgKg0KLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgbWF5IHJlZGlz dHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5DQotICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH TlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkNCi0gKiB0aGUgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UuDQogICoNCiAgKiBT ZW5zb3ItLT5QRkUtLT5XQi0tPkNGQS0tPkNDLS0+R0FNLS0+Q1NDLS0+Q0JDLS0+U1VCLS0+UkxQ LS0+RE1BDQogICoNCkBAIC00OCwyMjkyICs0NywyMSBAQA0KICNpbmNsdWRlIDxtZWRpYS92aWRl b2J1ZjItZG1hLWNvbnRpZy5oPg0KIA0KICNpbmNsdWRlICJhdG1lbC1pc2MtcmVncy5oIg0KKyNp bmNsdWRlICJhdG1lbC1pc2MuaCINCiANCi0jZGVmaW5lIEFUTUVMX0lTQ19OQU1FCQkiYXRtZWxf aXNjIg0KLQ0KLSNkZWZpbmUgSVNDX01BWF9TVVBQT1JUX1dJRFRIICAgMjU5Mg0KLSNkZWZpbmUg SVNDX01BWF9TVVBQT1JUX0hFSUdIVCAgMTk0NA0KLQ0KLSNkZWZpbmUgSVNDX0NMS19NQVhfRElW CQkyNTUNCi0NCi1lbnVtIGlzY19jbGtfaWQgew0KLQlJU0NfSVNQQ0sgPSAwLA0KLQlJU0NfTUNL ID0gMSwNCi19Ow0KLQ0KLXN0cnVjdCBpc2NfY2xrIHsNCi0Jc3RydWN0IGNsa19odyAgIGh3Ow0K LQlzdHJ1Y3QgY2xrICAgICAgKmNsazsNCi0Jc3RydWN0IHJlZ21hcCAgICpyZWdtYXA7DQotCXNw aW5sb2NrX3QJbG9jazsNCi0JdTgJCWlkOw0KLQl1OAkJcGFyZW50X2lkOw0KLQl1MzIJCWRpdjsN Ci0Jc3RydWN0IGRldmljZQkqZGV2Ow0KLX07DQotDQotI2RlZmluZSB0b19pc2NfY2xrKGh3KSBj b250YWluZXJfb2YoaHcsIHN0cnVjdCBpc2NfY2xrLCBodykNCi0NCi1zdHJ1Y3QgaXNjX2J1ZmZl ciB7DQotCXN0cnVjdCB2YjJfdjRsMl9idWZmZXIgIHZiOw0KLQlzdHJ1Y3QgbGlzdF9oZWFkCWxp c3Q7DQotfTsNCi0NCi1zdHJ1Y3QgaXNjX3N1YmRldl9lbnRpdHkgew0KLQlzdHJ1Y3QgdjRsMl9z dWJkZXYJCSpzZDsNCi0Jc3RydWN0IHY0bDJfYXN5bmNfc3ViZGV2CSphc2Q7DQotCXN0cnVjdCB2 NGwyX2FzeW5jX25vdGlmaWVyICAgICAgbm90aWZpZXI7DQotDQotCXUzMiBwZmVfY2ZnMDsNCi0N Ci0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0Ow0KLX07DQotDQotLyoNCi0gKiBzdHJ1Y3QgaXNjX2Zv cm1hdCAtIElTQyBtZWRpYSBidXMgZm9ybWF0IGluZm9ybWF0aW9uDQotCQkJVGhpcyBzdHJ1Y3R1 cmUgcmVwcmVzZW50cyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIElTQw0KLQkJCWFuZCB0aGUg c2Vuc29yLiBJdCdzIHRoZSBpbnB1dCBmb3JtYXQgcmVjZWl2ZWQgYnkNCi0JCQl0aGUgSVNDLg0K LSAqIEBmb3VyY2M6CQlGb3VyY2MgY29kZSBmb3IgdGhpcyBmb3JtYXQNCi0gKiBAbWJ1c19jb2Rl OgkJVjRMMiBtZWRpYSBidXMgZm9ybWF0IGNvZGUuDQotICogQGNmYV9iYXljZmc6CQlJZiB0aGlz IGZvcm1hdCBpcyBSQVcgQkFZRVIsIGluZGljYXRlIHRoZSB0eXBlIG9mIGJheWVyLg0KLQkJCXRo aXMgaXMgZWl0aGVyIEJHQkcsIFJHUkcsIGV0Yy4NCi0gKiBAcGZlX2NmZzBfYnBzOglOdW1iZXIg b2YgaGFyZHdhcmUgZGF0YSBsaW5lcyBjb25uZWN0ZWQgdG8gdGhlIElTQw0KLSAqLw0KLQ0KLXN0 cnVjdCBpc2NfZm9ybWF0IHsNCi0JdTMyCWZvdXJjYzsNCi0JdTMyCW1idXNfY29kZTsNCi0JdTMy CWNmYV9iYXljZmc7DQotDQotCWJvb2wJc2Rfc3VwcG9ydDsNCi0JdTMyCXBmZV9jZmcwX2JwczsN Ci19Ow0KLQ0KLS8qIFBpcGVsaW5lIGJpdG1hcCAqLw0KLSNkZWZpbmUgV0JfRU5BQkxFCUJJVCgw KQ0KLSNkZWZpbmUgQ0ZBX0VOQUJMRQlCSVQoMSkNCi0jZGVmaW5lIENDX0VOQUJMRQlCSVQoMikN Ci0jZGVmaW5lIEdBTV9FTkFCTEUJQklUKDMpDQotI2RlZmluZSBHQU1fQkVOQUJMRQlCSVQoNCkN Ci0jZGVmaW5lIEdBTV9HRU5BQkxFCUJJVCg1KQ0KLSNkZWZpbmUgR0FNX1JFTkFCTEUJQklUKDYp DQotI2RlZmluZSBDU0NfRU5BQkxFCUJJVCg3KQ0KLSNkZWZpbmUgQ0JDX0VOQUJMRQlCSVQoOCkN Ci0jZGVmaW5lIFNVQjQyMl9FTkFCTEUJQklUKDkpDQotI2RlZmluZSBTVUI0MjBfRU5BQkxFCUJJ VCgxMCkNCi0NCi0jZGVmaW5lIEdBTV9FTkFCTEVTCShHQU1fUkVOQUJMRSB8IEdBTV9HRU5BQkxF IHwgR0FNX0JFTkFCTEUgfCBHQU1fRU5BQkxFKQ0KLQ0KLS8qDQotICogc3RydWN0IGZtdF9jb25m aWcgLSBJU0MgZm9ybWF0IGNvbmZpZ3VyYXRpb24gYW5kIGludGVybmFsIHBpcGVsaW5lDQotCQkJ VGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyB0aGUgaW50ZXJuYWwgY29uZmlndXJhdGlvbg0KLQkJ CW9mIHRoZSBJU0MuDQotCQkJSXQgYWxzbyBob2xkcyB0aGUgZm9ybWF0IHRoYXQgSVNDIHdpbGwg cHJlc2VudCB0byB2NGwyLg0KLSAqIEBzZF9mb3JtYXQ6CQlQb2ludGVyIHRvIGFuIGlzY19mb3Jt YXQgc3RydWN0IHRoYXQgaG9sZHMgdGhlIHNlbnNvcg0KLQkJCWNvbmZpZ3VyYXRpb24uDQotICog QGZvdXJjYzoJCUZvdXJjYyBjb2RlIGZvciB0aGlzIGZvcm1hdC4NCi0gKiBAYnBwOgkJQnl0ZXMg cGVyIHBpeGVsIGluIHRoZSBjdXJyZW50IGZvcm1hdC4NCi0gKiBAcmxwX2NmZ19tb2RlOglDb25m aWd1cmF0aW9uIG9mIHRoZSBSTFAgKHJvdW5kaW5nLCBsaW1pdGluZyBwYWNrYWdpbmcpDQotICog QGRjZmdfaW1vZGU6CQlDb25maWd1cmF0aW9uIG9mIHRoZSBpbnB1dCBvZiB0aGUgRE1BIG1vZHVs ZQ0KLSAqIEBkY3RybF9kdmlldzoJQ29uZmlndXJhdGlvbiBvZiB0aGUgb3V0cHV0IG9mIHRoZSBE TUEgbW9kdWxlDQotICogQGJpdHNfcGlwZWxpbmU6CUNvbmZpZ3VyYXRpb24gb2YgdGhlIHBpcGVs aW5lLCB3aGljaCBtb2R1bGVzIGFyZSBlbmFibGVkDQotICovDQotc3RydWN0IGZtdF9jb25maWcg ew0KLQlzdHJ1Y3QgaXNjX2Zvcm1hdAkqc2RfZm9ybWF0Ow0KLQ0KLQl1MzIJCQlmb3VyY2M7DQot CXU4CQkJYnBwOw0KLQ0KLQl1MzIJCQlybHBfY2ZnX21vZGU7DQotCXUzMgkJCWRjZmdfaW1vZGU7 DQotCXUzMgkJCWRjdHJsX2R2aWV3Ow0KLQ0KLQl1MzIJCQliaXRzX3BpcGVsaW5lOw0KLX07DQot DQotI2RlZmluZSBISVNUX0VOVFJJRVMJCTUxMg0KLSNkZWZpbmUgSElTVF9CQVlFUgkJKElTQ19I SVNfQ0ZHX01PREVfQiArIDEpDQotDQotZW51bXsNCi0JSElTVF9JTklUID0gMCwNCi0JSElTVF9F TkFCTEVELA0KLQlISVNUX0RJU0FCTEVELA0KLX07DQotDQotc3RydWN0IGlzY19jdHJscyB7DQot CXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciBoYW5kbGVyOw0KLQ0KLQl1MzIgYnJpZ2h0bmVzczsN Ci0JdTMyIGNvbnRyYXN0Ow0KLQl1OCBnYW1tYV9pbmRleDsNCi0jZGVmaW5lIElTQ19XQl9OT05F CTANCi0jZGVmaW5lIElTQ19XQl9BVVRPCTENCi0jZGVmaW5lIElTQ19XQl9PTkVUSU1FCTINCi0J dTggYXdiOw0KLQ0KLQkvKiBvbmUgZm9yIGVhY2ggY29tcG9uZW50IDogR1IsIFIsIEdCLCBCICov DQotCXUzMiBnYWluW0hJU1RfQkFZRVJdOw0KLQl1MzIgb2Zmc2V0W0hJU1RfQkFZRVJdOw0KLQ0K LQl1MzIgaGlzdF9lbnRyeVtISVNUX0VOVFJJRVNdOw0KLQl1MzIgaGlzdF9jb3VudFtISVNUX0JB WUVSXTsNCi0JdTggaGlzdF9pZDsNCi0JdTggaGlzdF9zdGF0Ow0KLSNkZWZpbmUgSElTVF9NSU5f SU5ERVgJCTANCi0jZGVmaW5lIEhJU1RfTUFYX0lOREVYCQkxDQotCXUzMiBoaXN0X21pbm1heFtI SVNUX0JBWUVSXVsyXTsNCi19Ow0KLQ0KLSNkZWZpbmUgSVNDX1BJUEVfTElORV9OT0RFX05VTQkx MQ0KLQ0KLXN0cnVjdCBpc2NfZGV2aWNlIHsNCi0Jc3RydWN0IHJlZ21hcAkJKnJlZ21hcDsNCi0J c3RydWN0IGNsawkJKmhjbG9jazsNCi0Jc3RydWN0IGNsawkJKmlzcGNrOw0KLQlzdHJ1Y3QgaXNj X2NsawkJaXNjX2Nsa3NbMl07DQotDQotCXN0cnVjdCBkZXZpY2UJCSpkZXY7DQotCXN0cnVjdCB2 NGwyX2RldmljZQl2NGwyX2RldjsNCi0Jc3RydWN0IHZpZGVvX2RldmljZQl2aWRlb19kZXY7DQot DQotCXN0cnVjdCB2YjJfcXVldWUJdmIyX3ZpZHE7DQotCXNwaW5sb2NrX3QJCWRtYV9xdWV1ZV9s b2NrOw0KLQlzdHJ1Y3QgbGlzdF9oZWFkCWRtYV9xdWV1ZTsNCi0Jc3RydWN0IGlzY19idWZmZXIJ KmN1cl9mcm07DQotCXVuc2lnbmVkIGludAkJc2VxdWVuY2U7DQotCWJvb2wJCQlzdG9wOw0KLQlz dHJ1Y3QgY29tcGxldGlvbgljb21wOw0KLQ0KLQlzdHJ1Y3QgdjRsMl9mb3JtYXQJZm10Ow0KLQlz dHJ1Y3QgaXNjX2Zvcm1hdAkqKnVzZXJfZm9ybWF0czsNCi0JdW5zaWduZWQgaW50CQludW1fdXNl cl9mb3JtYXRzOw0KLQ0KLQlzdHJ1Y3QgZm10X2NvbmZpZwljb25maWc7DQotCXN0cnVjdCBmbXRf Y29uZmlnCXRyeV9jb25maWc7DQotDQotCXN0cnVjdCBpc2NfY3RybHMJY3RybHM7DQotCXN0cnVj dCB2NGwyX2N0cmwJKmRvX3diX2N0cmw7DQotCXN0cnVjdCB3b3JrX3N0cnVjdAlhd2Jfd29yazsN Ci0NCi0Jc3RydWN0IG11dGV4CQlsb2NrOw0KLQlzcGlubG9ja190CQlhd2JfbG9jazsNCi0NCi0J c3RydWN0IHJlZ21hcF9maWVsZAkqcGlwZWxpbmVbSVNDX1BJUEVfTElORV9OT0RFX05VTV07DQot DQotCXN0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eQkqY3VycmVudF9zdWJkZXY7DQotCXN0cnVjdCBs aXN0X2hlYWQJCXN1YmRldl9lbnRpdGllczsNCi19Ow0KLQ0KLS8qIFRoaXMgaXMgYSBsaXN0IG9m IHRoZSBmb3JtYXRzIHRoYXQgdGhlIElTQyBjYW4gKm91dHB1dCogKi8NCi1zdGF0aWMgc3RydWN0 IGlzY19mb3JtYXQgY29udHJvbGxlcl9mb3JtYXRzW10gPSB7DQotCXsNCi0JCS5mb3VyY2MJCT0g VjRMMl9QSVhfRk1UX0FSR0I0NDQsDQotCX0sDQotCXsNCi0JCS5mb3VyY2MJCT0gVjRMMl9QSVhf Rk1UX0FSR0I1NTUsDQotCX0sDQotCXsNCi0JCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1JHQjU2 NSwNCi0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfQUJHUjMyLA0KLQl9LA0K LQl7DQotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9YQkdSMzIsDQotCX0sDQotCXsNCi0JCS5m b3VyY2MJCT0gVjRMMl9QSVhfRk1UX1lVVjQyMCwNCi0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJPSBW NEwyX1BJWF9GTVRfWVVZViwNCi0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRf WVVWNDIyUCwNCi0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfR1JFWSwNCi0J fSwNCi19Ow0KLQ0KLS8qIFRoaXMgaXMgYSBsaXN0IG9mIGZvcm1hdHMgdGhhdCB0aGUgSVNDIGNh biByZWNlaXZlIGFzICppbnB1dCogKi8NCi1zdGF0aWMgc3RydWN0IGlzY19mb3JtYXQgZm9ybWF0 c19saXN0W10gPSB7DQotCXsNCi0JCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1NCR0dSOCwNCi0J CS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NCR0dSOF8xWDgsDQotCQkucGZlX2NmZzBfYnBz CT0gSVNDX1BGRV9DRkcwX0JQU19FSUdIVCwNCi0JCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdf QkdCRywNCi0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0dCUkc4LA0KLQkJ Lm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfU0dCUkc4XzFYOCwNCi0JCS5wZmVfY2ZnMF9icHMJ PSBJU0NfUEZFX0NGRzBfQlBTX0VJR0hULA0KLQkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19H QkdCLA0KLQl9LA0KLQl7DQotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TR1JCRzgsDQotCQku bWJ1c19jb2RlCT0gTUVESUFfQlVTX0ZNVF9TR1JCRzhfMVg4LA0KLQkJLnBmZV9jZmcwX2Jwcwk9 IElTQ19QRkVfQ0ZHMF9CUFNfRUlHSFQsDQotCQkuY2ZhX2JheWNmZwk9IElTQ19CQVlfQ0ZHX0dS R1IsDQotCX0sDQotCXsNCi0JCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1NSR0dCOCwNCi0JCS5t YnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NSR0dCOF8xWDgsDQotCQkucGZlX2NmZzBfYnBzCT0g SVNDX1BGRV9DRkcwX0JQU19FSUdIVCwNCi0JCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfUkdS RywNCi0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0JHR1IxMCwNCi0JCS5t YnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NCR0dSMTBfMVgxMCwNCi0JCS5wZmVfY2ZnMF9icHMJ PSBJU0NfUEZHX0NGRzBfQlBTX1RFTiwNCi0JCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfUkdS RywNCi0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0dCUkcxMCwNCi0JCS5t YnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NHQlJHMTBfMVgxMCwNCi0JCS5wZmVfY2ZnMF9icHMJ PSBJU0NfUEZHX0NGRzBfQlBTX1RFTiwNCi0JCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfR0JH QiwNCi0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0dSQkcxMCwNCi0JCS5t YnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NHUkJHMTBfMVgxMCwNCi0JCS5wZmVfY2ZnMF9icHMJ PSBJU0NfUEZHX0NGRzBfQlBTX1RFTiwNCi0JCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfR1JH UiwNCi0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU1JHR0IxMCwNCi0JCS5t YnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NSR0dCMTBfMVgxMCwNCi0JCS5wZmVfY2ZnMF9icHMJ PSBJU0NfUEZHX0NGRzBfQlBTX1RFTiwNCi0JCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfUkdS RywNCi0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0JHR1IxMiwNCi0JCS5t YnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NCR0dSMTJfMVgxMiwNCi0JCS5wZmVfY2ZnMF9icHMJ PSBJU0NfUEZHX0NGRzBfQlBTX1RXRUxWRSwNCi0JCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdf QkdCRywNCi0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0dCUkcxMiwNCi0J CS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NHQlJHMTJfMVgxMiwNCi0JCS5wZmVfY2ZnMF9i cHMJPSBJU0NfUEZHX0NGRzBfQlBTX1RXRUxWRSwNCi0JCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9D RkdfR0JHQiwNCi0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0dSQkcxMiwN Ci0JCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NHUkJHMTJfMVgxMiwNCi0JCS5wZmVfY2Zn MF9icHMJPSBJU0NfUEZHX0NGRzBfQlBTX1RXRUxWRSwNCi0JCS5jZmFfYmF5Y2ZnCT0gSVNDX0JB WV9DRkdfR1JHUiwNCi0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU1JHR0Ix MiwNCi0JCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NSR0dCMTJfMVgxMiwNCi0JCS5wZmVf Y2ZnMF9icHMJPSBJU0NfUEZHX0NGRzBfQlBTX1RXRUxWRSwNCi0JCS5jZmFfYmF5Y2ZnCT0gSVND X0JBWV9DRkdfUkdSRywNCi0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfR1JF WSwNCi0JCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1k4XzFYOCwNCi0JCS5wZmVfY2ZnMF9i cHMJPSBJU0NfUEZFX0NGRzBfQlBTX0VJR0hULA0KLQl9LA0KLQl7DQotCQkuZm91cmNjCQk9IFY0 TDJfUElYX0ZNVF9ZVVlWLA0KLQkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfWVVZVjhfMlg4 LA0KLQkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkVfQ0ZHMF9CUFNfRUlHSFQsDQotCX0sDQotCXsN Ci0JCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1JHQjU2NSwNCi0JCS5tYnVzX2NvZGUJPSBNRURJ QV9CVVNfRk1UX1JHQjU2NV8yWDhfTEUsDQotCQkucGZlX2NmZzBfYnBzCT0gSVNDX1BGRV9DRkcw X0JQU19FSUdIVCwNCi0JfSwNCi19Ow0KLQ0KLSNkZWZpbmUgR0FNTUFfTUFYCTINCi0jZGVmaW5l IEdBTU1BX0VOVFJJRVMJNjQNCi0NCi0vKiBHYW1tYSB0YWJsZSB3aXRoIGdhbW1hIDEvMi4yICov DQotc3RhdGljIGNvbnN0IHUzMiBpc2NfZ2FtbWFfdGFibGVbR0FNTUFfTUFYICsgMV1bR0FNTUFf RU5UUklFU10gPSB7DQotCS8qIDAgLS0+IGdhbW1hIDEvMS44ICovDQotCXsgICAgICAweDY1LCAg MHg2NjAwMkYsICAweDk1MDAyNSwgIDB4QkIwMDIwLCAgMHhEQjAwMUQsICAweEY4MDAxQSwNCi0J ICAweDExMzAwMTgsIDB4MTJCMDAxNywgMHgxNDIwMDE2LCAweDE1ODAwMTQsIDB4MTZEMDAxMywg MHgxODEwMDEyLA0KLQkgIDB4MTk0MDAxMiwgMHgxQTYwMDEyLCAweDFCODAwMTEsIDB4MUM5MDAx MCwgMHgxREEwMDEwLCAweDFFQTAwMEYsDQotCSAgMHgxRkEwMDBGLCAweDIwOTAwMEYsIDB4MjE4 MDAwRiwgMHgyMjcwMDBFLCAweDIzNTAwMEUsIDB4MjQzMDAwRSwNCi0JICAweDI1MTAwMEUsIDB4 MjVGMDAwRCwgMHgyNkMwMDBELCAweDI3OTAwMEQsIDB4Mjg2MDAwRCwgMHgyOTMwMDBDLA0KLQkg IDB4MkEwMDAwQywgMHgyQUMwMDBDLCAweDJCODAwMEMsIDB4MkM0MDAwQywgMHgyRDAwMDBCLCAw eDJEQzAwMEIsDQotCSAgMHgyRTcwMDBCLCAweDJGMzAwMEIsIDB4MkZFMDAwQiwgMHgzMDkwMDBC LCAweDMxNDAwMEIsIDB4MzFGMDAwQSwNCi0JICAweDMyQTAwMEEsIDB4MzM0MDAwQiwgMHgzM0Yw MDBBLCAweDM0OTAwMEEsIDB4MzU0MDAwQSwgMHgzNUUwMDBBLA0KLQkgIDB4MzY4MDAwQSwgMHgz NzIwMDBBLCAweDM3QzAwMEEsIDB4Mzg2MDAwQSwgMHgzOTAwMDA5LCAweDM5OTAwMEEsDQotCSAg MHgzQTMwMDA5LCAweDNBRDAwMDksIDB4M0I2MDAwOSwgMHgzQkYwMDBBLCAweDNDOTAwMDksIDB4 M0QyMDAwOSwNCi0JICAweDNEQjAwMDksIDB4M0U0MDAwOSwgMHgzRUQwMDA5LCAweDNGNjAwMDkg fSwNCi0NCi0JLyogMSAtLT4gZ2FtbWEgMS8yICovDQotCXsgICAgICAweDdGLCAgMHg4MDAwMzQs ICAweEI1MDAyOCwgIDB4REUwMDIxLCAweDEwMDAwMUUsIDB4MTFFMDAxQiwNCi0JICAweDEzOTAw MTksIDB4MTUyMDAxNywgMHgxNkEwMDE1LCAweDE4MDAwMTQsIDB4MTk0MDAxNCwgMHgxQTgwMDEz LA0KLQkgIDB4MUJCMDAxMiwgMHgxQ0QwMDExLCAweDFERjAwMTAsIDB4MUVGMDAxMCwgMHgyMDAw MDBGLCAweDIwRjAwMEYsDQotCSAgMHgyMUYwMDBFLCAweDIyRDAwMEYsIDB4MjNDMDAwRSwgMHgy NEEwMDBFLCAweDI1ODAwMEQsIDB4MjY1MDAwRCwNCi0JICAweDI3MzAwMEMsIDB4MjdGMDAwRCwg MHgyOEMwMDBDLCAweDI5OTAwMEMsIDB4MkE1MDAwQywgMHgyQjEwMDBCLA0KLQkgIDB4MkJDMDAw QywgMHgyQzgwMDBCLCAweDJEMzAwMEMsIDB4MkRGMDAwQiwgMHgyRUEwMDBBLCAweDJGNTAwMEEs DQotCSAgMHgyRkYwMDBCLCAweDMwQTAwMEEsIDB4MzE0MDAwQiwgMHgzMUYwMDBBLCAweDMyOTAw MEEsIDB4MzMzMDAwQSwNCi0JICAweDMzRDAwMDksIDB4MzQ3MDAwOSwgMHgzNTAwMDBBLCAweDM1 QTAwMDksIDB4MzYzMDAwQSwgMHgzNkQwMDA5LA0KLQkgIDB4Mzc2MDAwOSwgMHgzN0YwMDA5LCAw eDM4ODAwMDksIDB4MzkxMDAwOSwgMHgzOUEwMDA5LCAweDNBMzAwMDksDQotCSAgMHgzQUMwMDA4 LCAweDNCNDAwMDksIDB4M0JEMDAwOCwgMHgzQzYwMDA4LCAweDNDRTAwMDgsIDB4M0Q2MDAwOSwN Ci0JICAweDNERjAwMDgsIDB4M0U3MDAwOCwgMHgzRUYwMDA4LCAweDNGNzAwMDggfSwNCi0NCi0J LyogMiAtLT4gZ2FtbWEgMS8yLjIgKi8NCi0JeyAgICAgIDB4OTksICAweDlCMDAzOCwgIDB4RDQw MDJBLCAgMHhGRjAwMjMsIDB4MTIyMDAxRiwgMHgxNDEwMDFCLA0KLQkgIDB4MTVEMDAxOSwgMHgx NzYwMDE3LCAweDE4RTAwMTUsIDB4MUEzMDAxNSwgMHgxQjgwMDEzLCAweDFDQzAwMTIsDQotCSAg MHgxREUwMDExLCAweDFGMDAwMTAsIDB4MjAxMDAxMCwgMHgyMTEwMDEwLCAweDIyMTAwMEYsIDB4 MjMwMDAwRiwNCi0JICAweDIzRjAwMEUsIDB4MjREMDAwRSwgMHgyNUIwMDBELCAweDI2OTAwMEMs IDB4Mjc2MDAwQywgMHgyODMwMDBDLA0KLQkgIDB4MjhGMDAwQywgMHgyOUIwMDBDLCAweDJBNzAw MEMsIDB4MkIzMDAwQiwgMHgyQkYwMDBCLCAweDJDQTAwMEIsDQotCSAgMHgyRDUwMDBCLCAweDJF MDAwMEEsIDB4MkVCMDAwQSwgMHgyRjUwMDBBLCAweDJGRjAwMEEsIDB4MzBBMDAwQSwNCi0JICAw eDMxNDAwMDksIDB4MzFFMDAwOSwgMHgzMjcwMDBBLCAweDMzMTAwMDksIDB4MzNBMDAwOSwgMHgz NDQwMDA5LA0KLQkgIDB4MzREMDAwOSwgMHgzNTYwMDA5LCAweDM1RjAwMDksIDB4MzY4MDAwOCwg MHgzNzEwMDA4LCAweDM3OTAwMDksDQotCSAgMHgzODIwMDA4LCAweDM4QTAwMDgsIDB4MzkzMDAw OCwgMHgzOUIwMDA4LCAweDNBMzAwMDgsIDB4M0FCMDAwOCwNCi0JICAweDNCMzAwMDgsIDB4M0JC MDAwOCwgMHgzQzMwMDA4LCAweDNDQjAwMDcsIDB4M0QyMDAwOCwgMHgzREEwMDA3LA0KLQkgIDB4 M0UyMDAwNywgMHgzRTkwMDA3LCAweDNGMDAwMDgsIDB4M0Y4MDAwNyB9LA0KLX07DQotDQotI2Rl ZmluZSBJU0NfSVNfRk9STUFUX1JBVyhtYnVzX2NvZGUpIFwNCi0JKCgobWJ1c19jb2RlKSAmIDB4 ZjAwMCkgPT0gMHgzMDAwKQ0KLQ0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVidWc7DQotbW9kdWxl X3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOw0KLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJkZWJ1 ZyBsZXZlbCAoMC0yKSIpOw0KLQ0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgc2Vuc29yX3ByZWZlcnJl ZCA9IDE7DQotbW9kdWxlX3BhcmFtKHNlbnNvcl9wcmVmZXJyZWQsIHVpbnQsIDA2NDQpOw0KLU1P RFVMRV9QQVJNX0RFU0Moc2Vuc29yX3ByZWZlcnJlZCwNCi0JCSAiU2Vuc29yIGlzIHByZWZlcnJl ZCB0byBvdXRwdXQgdGhlIHNwZWNpZmllZCBmb3JtYXQgKDEtb24gMC1vZmYpLCBkZWZhdWx0IDEi KTsNCi0NCi1zdGF0aWMgaW5saW5lIHZvaWQgaXNjX3VwZGF0ZV9hd2JfY3RybHMoc3RydWN0IGlz Y19kZXZpY2UgKmlzYykNCi17DQotCXN0cnVjdCBpc2NfY3RybHMgKmN0cmxzID0gJmlzYy0+Y3Ry bHM7DQotDQotCXJlZ21hcF93cml0ZShpc2MtPnJlZ21hcCwgSVNDX1dCX09fUkdSLA0KLQkJICAg ICAoSVNDX1dCX09fWkVST19WQUwgLSAoY3RybHMtPm9mZnNldFtJU0NfSElTX0NGR19NT0RFX1Jd KSkgfA0KLQkJICAgICAoKElTQ19XQl9PX1pFUk9fVkFMIC0gY3RybHMtPm9mZnNldFtJU0NfSElT X0NGR19NT0RFX0dSXSkgPDwgMTYpKTsNCi0JcmVnbWFwX3dyaXRlKGlzYy0+cmVnbWFwLCBJU0Nf V0JfT19CR0IsDQotCQkgICAgIChJU0NfV0JfT19aRVJPX1ZBTCAtIChjdHJscy0+b2Zmc2V0W0lT Q19ISVNfQ0ZHX01PREVfQl0pKSB8DQotCQkgICAgICgoSVNDX1dCX09fWkVST19WQUwgLSBjdHJs cy0+b2Zmc2V0W0lTQ19ISVNfQ0ZHX01PREVfR0JdKSA8PCAxNikpOw0KLQlyZWdtYXBfd3JpdGUo aXNjLT5yZWdtYXAsIElTQ19XQl9HX1JHUiwNCi0JCSAgICAgY3RybHMtPmdhaW5bSVNDX0hJU19D RkdfTU9ERV9SXSB8DQotCQkgICAgIChjdHJscy0+Z2FpbltJU0NfSElTX0NGR19NT0RFX0dSXSA8 PCAxNikpOw0KLQlyZWdtYXBfd3JpdGUoaXNjLT5yZWdtYXAsIElTQ19XQl9HX0JHQiwNCi0JCSAg ICAgY3RybHMtPmdhaW5bSVNDX0hJU19DRkdfTU9ERV9CXSB8DQotCQkgICAgIChjdHJscy0+Z2Fp bltJU0NfSElTX0NGR19NT0RFX0dCXSA8PCAxNikpOw0KLX0NCi0NCi1zdGF0aWMgaW5saW5lIHZv aWQgaXNjX3Jlc2V0X2F3Yl9jdHJscyhzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KLXsNCi0JaW50 IGM7DQotDQotCWZvciAoYyA9IElTQ19ISVNfQ0ZHX01PREVfR1I7IGMgPD0gSVNDX0hJU19DRkdf TU9ERV9COyBjKyspIHsNCi0JCS8qIGdhaW5zIGhhdmUgYSBmaXhlZCBwb2ludCBhdCA5IGRlY2lt YWxzICovDQotCQlpc2MtPmN0cmxzLmdhaW5bY10gPSAxIDw8IDk7DQotCQkvKiBvZmZzZXRzIGFy ZSBpbiAyJ3MgY29tcGxlbWVudHMsIHRoZSB2YWx1ZQ0KLQkJICogd2lsbCBiZSBzdWJzdHJhY3Rl ZCBmcm9tIElTQ19XQl9PX1pFUk9fVkFMIHRvIG9idGFpbg0KLQkJICogMidzIGNvbXBsZW1lbnQg b2YgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kDQotCQkgKiBJU0NfV0JfT19aRVJPX1ZBTCA+PiAxDQot CQkgKi8NCi0JCWlzYy0+Y3RybHMub2Zmc2V0W2NdID0gSVNDX1dCX09fWkVST19WQUw7DQotCX0N Ci19DQotDQotc3RhdGljIGludCBpc2Nfd2FpdF9jbGtfc3RhYmxlKHN0cnVjdCBjbGtfaHcgKmh3 KQ0KLXsNCi0Jc3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSB0b19pc2NfY2xrKGh3KTsNCi0Jc3Ry dWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjX2Nsay0+cmVnbWFwOw0KLQl1bnNpZ25lZCBsb25nIHRp bWVvdXQgPSBqaWZmaWVzICsgdXNlY3NfdG9famlmZmllcygxMDAwKTsNCi0JdW5zaWduZWQgaW50 IHN0YXR1czsNCi0NCi0Jd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7DQot CQlyZWdtYXBfcmVhZChyZWdtYXAsIElTQ19DTEtTUiwgJnN0YXR1cyk7DQotCQlpZiAoIShzdGF0 dXMgJiBJU0NfQ0xLU1JfU0lQKSkNCi0JCQlyZXR1cm4gMDsNCi0NCi0JCXVzbGVlcF9yYW5nZSgx MCwgMjUwKTsNCi0JfQ0KLQ0KLQlyZXR1cm4gLUVUSU1FRE9VVDsNCi19DQotDQotc3RhdGljIGlu dCBpc2NfY2xrX3ByZXBhcmUoc3RydWN0IGNsa19odyAqaHcpDQotew0KLQlzdHJ1Y3QgaXNjX2Ns ayAqaXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0KLQ0KLQlpZiAoaXNjX2Nsay0+aWQgPT0gSVND X0lTUENLKQ0KLQkJcG1fcnVudGltZV9nZXRfc3luYyhpc2NfY2xrLT5kZXYpOw0KLQ0KLQlyZXR1 cm4gaXNjX3dhaXRfY2xrX3N0YWJsZShodyk7DQotfQ0KLQ0KLXN0YXRpYyB2b2lkIGlzY19jbGtf dW5wcmVwYXJlKHN0cnVjdCBjbGtfaHcgKmh3KQ0KLXsNCi0Jc3RydWN0IGlzY19jbGsgKmlzY19j bGsgPSB0b19pc2NfY2xrKGh3KTsNCi0NCi0JaXNjX3dhaXRfY2xrX3N0YWJsZShodyk7DQotDQot CWlmIChpc2NfY2xrLT5pZCA9PSBJU0NfSVNQQ0spDQotCQlwbV9ydW50aW1lX3B1dF9zeW5jKGlz Y19jbGstPmRldik7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX2Nsa19lbmFibGUoc3RydWN0IGNs a19odyAqaHcpDQotew0KLQlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRvX2lzY19jbGsoaHcp Ow0KLQl1MzIgaWQgPSBpc2NfY2xrLT5pZDsNCi0Jc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNj X2Nsay0+cmVnbWFwOw0KLQl1bnNpZ25lZCBsb25nIGZsYWdzOw0KLQl1bnNpZ25lZCBpbnQgc3Rh dHVzOw0KLQ0KLQlkZXZfZGJnKGlzY19jbGstPmRldiwgIklTQyBDTEs6ICVzLCBkaXYgPSAlZCwg cGFyZW50IGlkID0gJWRcbiIsDQotCQlfX2Z1bmNfXywgaXNjX2Nsay0+ZGl2LCBpc2NfY2xrLT5w YXJlbnRfaWQpOw0KLQ0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaXNjX2Nsay0+bG9jaywgZmxhZ3Mp Ow0KLQlyZWdtYXBfdXBkYXRlX2JpdHMocmVnbWFwLCBJU0NfQ0xLQ0ZHLA0KLQkJCSAgIElTQ19D TEtDRkdfRElWX01BU0soaWQpIHwgSVNDX0NMS0NGR19TRUxfTUFTSyhpZCksDQotCQkJICAgKGlz Y19jbGstPmRpdiA8PCBJU0NfQ0xLQ0ZHX0RJVl9TSElGVChpZCkpIHwNCi0JCQkgICAoaXNjX2Ns ay0+cGFyZW50X2lkIDw8IElTQ19DTEtDRkdfU0VMX1NISUZUKGlkKSkpOw0KLQ0KLQlyZWdtYXBf d3JpdGUocmVnbWFwLCBJU0NfQ0xLRU4sIElTQ19DTEsoaWQpKTsNCi0Jc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmaXNjX2Nsay0+bG9jaywgZmxhZ3MpOw0KLQ0KLQlyZWdtYXBfcmVhZChyZWdtYXAs IElTQ19DTEtTUiwgJnN0YXR1cyk7DQotCWlmIChzdGF0dXMgJiBJU0NfQ0xLKGlkKSkNCi0JCXJl dHVybiAwOw0KLQllbHNlDQotCQlyZXR1cm4gLUVJTlZBTDsNCi19DQotDQotc3RhdGljIHZvaWQg aXNjX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGtfaHcgKmh3KQ0KLXsNCi0Jc3RydWN0IGlzY19jbGsg KmlzY19jbGsgPSB0b19pc2NfY2xrKGh3KTsNCi0JdTMyIGlkID0gaXNjX2Nsay0+aWQ7DQotCXVu c2lnbmVkIGxvbmcgZmxhZ3M7DQotDQotCXNwaW5fbG9ja19pcnFzYXZlKCZpc2NfY2xrLT5sb2Nr LCBmbGFncyk7DQotCXJlZ21hcF93cml0ZShpc2NfY2xrLT5yZWdtYXAsIElTQ19DTEtESVMsIElT Q19DTEsoaWQpKTsNCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNjX2Nsay0+bG9jaywgZmxh Z3MpOw0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY19jbGtfaXNfZW5hYmxlZChzdHJ1Y3QgY2xrX2h3 ICpodykNCi17DQotCXN0cnVjdCBpc2NfY2xrICppc2NfY2xrID0gdG9faXNjX2Nsayhodyk7DQot CXUzMiBzdGF0dXM7DQotDQotCWlmIChpc2NfY2xrLT5pZCA9PSBJU0NfSVNQQ0spDQotCQlwbV9y dW50aW1lX2dldF9zeW5jKGlzY19jbGstPmRldik7DQotDQotCXJlZ21hcF9yZWFkKGlzY19jbGst PnJlZ21hcCwgSVNDX0NMS1NSLCAmc3RhdHVzKTsNCi0NCi0JaWYgKGlzY19jbGstPmlkID09IElT Q19JU1BDSykNCi0JCXBtX3J1bnRpbWVfcHV0X3N5bmMoaXNjX2Nsay0+ZGV2KTsNCi0NCi0JcmV0 dXJuIHN0YXR1cyAmIElTQ19DTEsoaXNjX2Nsay0+aWQpID8gMSA6IDA7DQotfQ0KLQ0KLXN0YXRp YyB1bnNpZ25lZCBsb25nDQotaXNjX2Nsa19yZWNhbGNfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywg dW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkNCi17DQotCXN0cnVjdCBpc2NfY2xrICppc2NfY2xr ID0gdG9faXNjX2Nsayhodyk7DQotDQotCXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVChwYXJlbnRf cmF0ZSwgaXNjX2Nsay0+ZGl2ICsgMSk7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX2Nsa19kZXRl cm1pbmVfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywNCi0JCQkJICAgc3RydWN0IGNsa19yYXRlX3Jl cXVlc3QgKnJlcSkNCi17DQotCXN0cnVjdCBpc2NfY2xrICppc2NfY2xrID0gdG9faXNjX2Nsayho dyk7DQotCWxvbmcgYmVzdF9yYXRlID0gLUVJTlZBTDsNCi0JaW50IGJlc3RfZGlmZiA9IC0xOw0K LQl1bnNpZ25lZCBpbnQgaSwgZGl2Ow0KLQ0KLQlmb3IgKGkgPSAwOyBpIDwgY2xrX2h3X2dldF9u dW1fcGFyZW50cyhodyk7IGkrKykgew0KLQkJc3RydWN0IGNsa19odyAqcGFyZW50Ow0KLQkJdW5z aWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsNCi0NCi0JCXBhcmVudCA9IGNsa19od19nZXRfcGFyZW50 X2J5X2luZGV4KGh3LCBpKTsNCi0JCWlmICghcGFyZW50KQ0KLQkJCWNvbnRpbnVlOw0KLQ0KLQkJ cGFyZW50X3JhdGUgPSBjbGtfaHdfZ2V0X3JhdGUocGFyZW50KTsNCi0JCWlmICghcGFyZW50X3Jh dGUpDQotCQkJY29udGludWU7DQotDQotCQlmb3IgKGRpdiA9IDE7IGRpdiA8IElTQ19DTEtfTUFY X0RJViArIDI7IGRpdisrKSB7DQotCQkJdW5zaWduZWQgbG9uZyByYXRlOw0KLQkJCWludCBkaWZm Ow0KLQ0KLQkJCXJhdGUgPSBESVZfUk9VTkRfQ0xPU0VTVChwYXJlbnRfcmF0ZSwgZGl2KTsNCi0J CQlkaWZmID0gYWJzKHJlcS0+cmF0ZSAtIHJhdGUpOw0KLQ0KLQkJCWlmIChiZXN0X2RpZmYgPCAw IHx8IGJlc3RfZGlmZiA+IGRpZmYpIHsNCi0JCQkJYmVzdF9yYXRlID0gcmF0ZTsNCi0JCQkJYmVz dF9kaWZmID0gZGlmZjsNCi0JCQkJcmVxLT5iZXN0X3BhcmVudF9yYXRlID0gcGFyZW50X3JhdGU7 DQotCQkJCXJlcS0+YmVzdF9wYXJlbnRfaHcgPSBwYXJlbnQ7DQotCQkJfQ0KLQ0KLQkJCWlmICgh YmVzdF9kaWZmIHx8IHJhdGUgPCByZXEtPnJhdGUpDQotCQkJCWJyZWFrOw0KLQkJfQ0KLQ0KLQkJ aWYgKCFiZXN0X2RpZmYpDQotCQkJYnJlYWs7DQotCX0NCi0NCi0JZGV2X2RiZyhpc2NfY2xrLT5k ZXYsDQotCQkiSVNDIENMSzogJXMsIGJlc3RfcmF0ZSA9ICVsZCwgcGFyZW50IGNsazogJXMgQCAl bGRcbiIsDQotCQlfX2Z1bmNfXywgYmVzdF9yYXRlLA0KLQkJX19jbGtfZ2V0X25hbWUoKHJlcS0+ YmVzdF9wYXJlbnRfaHcpLT5jbGspLA0KLQkJcmVxLT5iZXN0X3BhcmVudF9yYXRlKTsNCi0NCi0J aWYgKGJlc3RfcmF0ZSA8IDApDQotCQlyZXR1cm4gYmVzdF9yYXRlOw0KLQ0KLQlyZXEtPnJhdGUg PSBiZXN0X3JhdGU7DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY19jbGtf c2V0X3BhcmVudChzdHJ1Y3QgY2xrX2h3ICpodywgdTggaW5kZXgpDQotew0KLQlzdHJ1Y3QgaXNj X2NsayAqaXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0KLQ0KLQlpZiAoaW5kZXggPj0gY2xrX2h3 X2dldF9udW1fcGFyZW50cyhodykpDQotCQlyZXR1cm4gLUVJTlZBTDsNCi0NCi0JaXNjX2Nsay0+ cGFyZW50X2lkID0gaW5kZXg7DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi1zdGF0aWMgdTggaXNj X2Nsa19nZXRfcGFyZW50KHN0cnVjdCBjbGtfaHcgKmh3KQ0KLXsNCi0Jc3RydWN0IGlzY19jbGsg KmlzY19jbGsgPSB0b19pc2NfY2xrKGh3KTsNCi0NCi0JcmV0dXJuIGlzY19jbGstPnBhcmVudF9p ZDsNCi19DQotDQotc3RhdGljIGludCBpc2NfY2xrX3NldF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3 LA0KLQkJCSAgICAgdW5zaWduZWQgbG9uZyByYXRlLA0KLQkJCSAgICAgdW5zaWduZWQgbG9uZyBw YXJlbnRfcmF0ZSkNCi17DQotCXN0cnVjdCBpc2NfY2xrICppc2NfY2xrID0gdG9faXNjX2Nsayho dyk7DQotCXUzMiBkaXY7DQotDQotCWlmICghcmF0ZSkNCi0JCXJldHVybiAtRUlOVkFMOw0KLQ0K LQlkaXYgPSBESVZfUk9VTkRfQ0xPU0VTVChwYXJlbnRfcmF0ZSwgcmF0ZSk7DQotCWlmIChkaXYg PiAoSVNDX0NMS19NQVhfRElWICsgMSkgfHwgIWRpdikNCi0JCXJldHVybiAtRUlOVkFMOw0KLQ0K LQlpc2NfY2xrLT5kaXYgPSBkaXYgLSAxOw0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGlj IGNvbnN0IHN0cnVjdCBjbGtfb3BzIGlzY19jbGtfb3BzID0gew0KLQkucHJlcGFyZQk9IGlzY19j bGtfcHJlcGFyZSwNCi0JLnVucHJlcGFyZQk9IGlzY19jbGtfdW5wcmVwYXJlLA0KLQkuZW5hYmxl CQk9IGlzY19jbGtfZW5hYmxlLA0KLQkuZGlzYWJsZQk9IGlzY19jbGtfZGlzYWJsZSwNCi0JLmlz X2VuYWJsZWQJPSBpc2NfY2xrX2lzX2VuYWJsZWQsDQotCS5yZWNhbGNfcmF0ZQk9IGlzY19jbGtf cmVjYWxjX3JhdGUsDQotCS5kZXRlcm1pbmVfcmF0ZQk9IGlzY19jbGtfZGV0ZXJtaW5lX3JhdGUs DQotCS5zZXRfcGFyZW50CT0gaXNjX2Nsa19zZXRfcGFyZW50LA0KLQkuZ2V0X3BhcmVudAk9IGlz Y19jbGtfZ2V0X3BhcmVudCwNCi0JLnNldF9yYXRlCT0gaXNjX2Nsa19zZXRfcmF0ZSwNCi19Ow0K LQ0KLXN0YXRpYyBpbnQgaXNjX2Nsa19yZWdpc3RlcihzdHJ1Y3QgaXNjX2RldmljZSAqaXNjLCB1 bnNpZ25lZCBpbnQgaWQpDQotew0KLQlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBpc2MtPnJlZ21h cDsNCi0Jc3RydWN0IGRldmljZV9ub2RlICpucCA9IGlzYy0+ZGV2LT5vZl9ub2RlOw0KLQlzdHJ1 Y3QgaXNjX2NsayAqaXNjX2NsazsNCi0Jc3RydWN0IGNsa19pbml0X2RhdGEgaW5pdDsNCi0JY29u c3QgY2hhciAqY2xrX25hbWUgPSBucC0+bmFtZTsNCi0JY29uc3QgY2hhciAqcGFyZW50X25hbWVz WzNdOw0KLQlpbnQgbnVtX3BhcmVudHM7DQotDQotCW51bV9wYXJlbnRzID0gb2ZfY2xrX2dldF9w YXJlbnRfY291bnQobnApOw0KLQlpZiAobnVtX3BhcmVudHMgPCAxIHx8IG51bV9wYXJlbnRzID4g MykNCi0JCXJldHVybiAtRUlOVkFMOw0KLQ0KLQlpZiAobnVtX3BhcmVudHMgPiAyICYmIGlkID09 IElTQ19JU1BDSykNCi0JCW51bV9wYXJlbnRzID0gMjsNCi0NCi0Jb2ZfY2xrX3BhcmVudF9maWxs KG5wLCBwYXJlbnRfbmFtZXMsIG51bV9wYXJlbnRzKTsNCi0NCi0JaWYgKGlkID09IElTQ19NQ0sp DQotCQlvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgImNsb2NrLW91dHB1dC1uYW1lcyIsICZj bGtfbmFtZSk7DQotCWVsc2UNCi0JCWNsa19uYW1lID0gImlzYy1pc3BjayI7DQotDQotCWluaXQu cGFyZW50X25hbWVzCT0gcGFyZW50X25hbWVzOw0KLQlpbml0Lm51bV9wYXJlbnRzCT0gbnVtX3Bh cmVudHM7DQotCWluaXQubmFtZQkJPSBjbGtfbmFtZTsNCi0JaW5pdC5vcHMJCT0gJmlzY19jbGtf b3BzOw0KLQlpbml0LmZsYWdzCQk9IENMS19TRVRfUkFURV9HQVRFIHwgQ0xLX1NFVF9QQVJFTlRf R0FURTsNCi0NCi0JaXNjX2NsayA9ICZpc2MtPmlzY19jbGtzW2lkXTsNCi0JaXNjX2Nsay0+aHcu aW5pdAk9ICZpbml0Ow0KLQlpc2NfY2xrLT5yZWdtYXAJCT0gcmVnbWFwOw0KLQlpc2NfY2xrLT5p ZAkJPSBpZDsNCi0JaXNjX2Nsay0+ZGV2CQk9IGlzYy0+ZGV2Ow0KLQlzcGluX2xvY2tfaW5pdCgm aXNjX2Nsay0+bG9jayk7DQotDQotCWlzY19jbGstPmNsayA9IGNsa19yZWdpc3Rlcihpc2MtPmRl diwgJmlzY19jbGstPmh3KTsNCi0JaWYgKElTX0VSUihpc2NfY2xrLT5jbGspKSB7DQotCQlkZXZf ZXJyKGlzYy0+ZGV2LCAiJXM6IGNsb2NrIHJlZ2lzdGVyIGZhaWxcbiIsIGNsa19uYW1lKTsNCi0J CXJldHVybiBQVFJfRVJSKGlzY19jbGstPmNsayk7DQotCX0gZWxzZSBpZiAoaWQgPT0gSVNDX01D SykNCi0JCW9mX2Nsa19hZGRfcHJvdmlkZXIobnAsIG9mX2Nsa19zcmNfc2ltcGxlX2dldCwgaXNj X2Nsay0+Y2xrKTsNCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX2Nsa19p bml0KHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQotew0KLQl1bnNpZ25lZCBpbnQgaTsNCi0JaW50 IHJldDsNCi0NCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaXNjLT5pc2NfY2xrcyk7IGkr KykNCi0JCWlzYy0+aXNjX2Nsa3NbaV0uY2xrID0gRVJSX1BUUigtRUlOVkFMKTsNCi0NCi0JZm9y IChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaXNjLT5pc2NfY2xrcyk7IGkrKykgew0KLQkJcmV0ID0g aXNjX2Nsa19yZWdpc3Rlcihpc2MsIGkpOw0KLQkJaWYgKHJldCkNCi0JCQlyZXR1cm4gcmV0Ow0K LQl9DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi1zdGF0aWMgdm9pZCBpc2NfY2xrX2NsZWFudXAo c3RydWN0IGlzY19kZXZpY2UgKmlzYykNCi17DQotCXVuc2lnbmVkIGludCBpOw0KLQ0KLQlvZl9j bGtfZGVsX3Byb3ZpZGVyKGlzYy0+ZGV2LT5vZl9ub2RlKTsNCi0NCi0JZm9yIChpID0gMDsgaSA8 IEFSUkFZX1NJWkUoaXNjLT5pc2NfY2xrcyk7IGkrKykgew0KLQkJc3RydWN0IGlzY19jbGsgKmlz Y19jbGsgPSAmaXNjLT5pc2NfY2xrc1tpXTsNCi0NCi0JCWlmICghSVNfRVJSKGlzY19jbGstPmNs aykpDQotCQkJY2xrX3VucmVnaXN0ZXIoaXNjX2Nsay0+Y2xrKTsNCi0JfQ0KLX0NCi0NCi1zdGF0 aWMgaW50IGlzY19xdWV1ZV9zZXR1cChzdHJ1Y3QgdmIyX3F1ZXVlICp2cSwNCi0JCQkgICAgdW5z aWduZWQgaW50ICpuYnVmZmVycywgdW5zaWduZWQgaW50ICpucGxhbmVzLA0KLQkJCSAgICB1bnNp Z25lZCBpbnQgc2l6ZXNbXSwgc3RydWN0IGRldmljZSAqYWxsb2NfZGV2c1tdKQ0KLXsNCi0Jc3Ry dWN0IGlzY19kZXZpY2UgKmlzYyA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpOw0KLQl1bnNpZ25lZCBp bnQgc2l6ZSA9IGlzYy0+Zm10LmZtdC5waXguc2l6ZWltYWdlOw0KLQ0KLQlpZiAoKm5wbGFuZXMp DQotCQlyZXR1cm4gc2l6ZXNbMF0gPCBzaXplID8gLUVJTlZBTCA6IDA7DQotDQotCSpucGxhbmVz ID0gMTsNCi0Jc2l6ZXNbMF0gPSBzaXplOw0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGlj IGludCBpc2NfYnVmZmVyX3ByZXBhcmUoc3RydWN0IHZiMl9idWZmZXIgKnZiKQ0KLXsNCi0Jc3Ry dWN0IHZiMl92NGwyX2J1ZmZlciAqdmJ1ZiA9IHRvX3ZiMl92NGwyX2J1ZmZlcih2Yik7DQotCXN0 cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2YjJfZ2V0X2Rydl9wcml2KHZiLT52YjJfcXVldWUpOw0K LQl1bnNpZ25lZCBsb25nIHNpemUgPSBpc2MtPmZtdC5mbXQucGl4LnNpemVpbWFnZTsNCi0NCi0J aWYgKHZiMl9wbGFuZV9zaXplKHZiLCAwKSA8IHNpemUpIHsNCi0JCXY0bDJfZXJyKCZpc2MtPnY0 bDJfZGV2LCAiYnVmZmVyIHRvbyBzbWFsbCAoJWx1IDwgJWx1KVxuIiwNCi0JCQkgdmIyX3BsYW5l X3NpemUodmIsIDApLCBzaXplKTsNCi0JCXJldHVybiAtRUlOVkFMOw0KLQl9DQotDQotCXZiMl9z ZXRfcGxhbmVfcGF5bG9hZCh2YiwgMCwgc2l6ZSk7DQotDQotCXZidWYtPmZpZWxkID0gaXNjLT5m bXQuZm10LnBpeC5maWVsZDsNCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0YXRpYyB2b2lkIGlz Y19zdGFydF9kbWEoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCi17DQotCXN0cnVjdCByZWdtYXAg KnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0KLQl1MzIgc2l6ZWltYWdlID0gaXNjLT5mbXQuZm10LnBp eC5zaXplaW1hZ2U7DQotCXUzMiBkY3RybF9kdmlldzsNCi0JZG1hX2FkZHJfdCBhZGRyMDsNCi0J dTMyIGgsIHc7DQotDQotCWggPSBpc2MtPmZtdC5mbXQucGl4LmhlaWdodDsNCi0JdyA9IGlzYy0+ Zm10LmZtdC5waXgud2lkdGg7DQotDQotCS8qDQotCSAqIEluIGNhc2UgdGhlIHNlbnNvciBpcyBu b3QgUkFXLCBpdCB3aWxsIG91dHB1dCBhIHBpeGVsICgxMi0xNiBiaXRzKQ0KLQkgKiB3aXRoIHR3 byBzYW1wbGVzIG9uIHRoZSBJU0MgRGF0YSBidXMgKHdoaWNoIGlzIDgtMTIpDQotCSAqIElTQyB3 aWxsIGNvdW50IGVhY2ggc2FtcGxlLCBzbywgd2UgbmVlZCB0byBtdWx0aXBseSB0aGVzZSB2YWx1 ZXMNCi0JICogYnkgdHdvLCB0byBnZXQgdGhlIHJlYWwgbnVtYmVyIG9mIHNhbXBsZXMgZm9yIHRo ZSByZXF1aXJlZCBwaXhlbHMuDQotCSAqLw0KLQlpZiAoIUlTQ19JU19GT1JNQVRfUkFXKGlzYy0+ Y29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlKSkgew0KLQkJaCA8PD0gMTsNCi0JCXcgPDw9IDE7 DQotCX0NCi0NCi0JLyoNCi0JICogV2UgbGltaXQgdGhlIGNvbHVtbi9yb3cgY291bnQgdGhhdCB0 aGUgSVNDIHdpbGwgb3V0cHV0IGFjY29yZGluZw0KLQkgKiB0byB0aGUgY29uZmlndXJlZCByZXNv bHV0aW9uIHRoYXQgd2Ugd2FudC4NCi0JICogVGhpcyB3aWxsIGF2b2lkIHRoZSBzaXR1YXRpb24g d2hlcmUgdGhlIHNlbnNvciBpcyBtaXNjb25maWd1cmVkLA0KLQkgKiBzZW5kaW5nIG1vcmUgZGF0 YSwgYW5kIHRoZSBJU0Mgd2lsbCBqdXN0IHRha2UgaXQgYW5kIERNQSB0byBtZW1vcnksDQotCSAq IGNhdXNpbmcgY29ycnVwdGlvbi4NCi0JICovDQotCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19Q RkVfQ0ZHMSwNCi0JCSAgICAgKElTQ19QRkVfQ0ZHMV9DT0xNSU4oMCkgJiBJU0NfUEZFX0NGRzFf Q09MTUlOX01BU0spIHwNCi0JCSAgICAgKElTQ19QRkVfQ0ZHMV9DT0xNQVgodyAtIDEpICYgSVND X1BGRV9DRkcxX0NPTE1BWF9NQVNLKSk7DQotDQotCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19Q RkVfQ0ZHMiwNCi0JCSAgICAgKElTQ19QRkVfQ0ZHMl9ST1dNSU4oMCkgJiBJU0NfUEZFX0NGRzJf Uk9XTUlOX01BU0spIHwNCi0JCSAgICAgKElTQ19QRkVfQ0ZHMl9ST1dNQVgoaCAtIDEpICYgSVND X1BGRV9DRkcyX1JPV01BWF9NQVNLKSk7DQotDQotCXJlZ21hcF91cGRhdGVfYml0cyhyZWdtYXAs IElTQ19QRkVfQ0ZHMCwNCi0JCQkgICBJU0NfUEZFX0NGRzBfQ09MRU4gfCBJU0NfUEZFX0NGRzBf Uk9XRU4sDQotCQkJICAgSVNDX1BGRV9DRkcwX0NPTEVOIHwgSVNDX1BGRV9DRkcwX1JPV0VOKTsN Ci0NCi0JYWRkcjAgPSB2YjJfZG1hX2NvbnRpZ19wbGFuZV9kbWFfYWRkcigmaXNjLT5jdXJfZnJt LT52Yi52YjJfYnVmLCAwKTsNCi0JcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0RBRDAsIGFkZHIw KTsNCi0NCi0Jc3dpdGNoIChpc2MtPmNvbmZpZy5mb3VyY2MpIHsNCi0JY2FzZSBWNEwyX1BJWF9G TVRfWVVWNDIwOg0KLQkJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0RBRDEsIGFkZHIwICsgKHNp emVpbWFnZSAqIDIpIC8gMyk7DQotCQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfREFEMiwgYWRk cjAgKyAoc2l6ZWltYWdlICogNSkgLyA2KTsNCi0JCWJyZWFrOw0KLQljYXNlIFY0TDJfUElYX0ZN VF9ZVVY0MjJQOg0KLQkJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0RBRDEsIGFkZHIwICsgc2l6 ZWltYWdlIC8gMik7DQotCQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfREFEMiwgYWRkcjAgKyAo c2l6ZWltYWdlICogMykgLyA0KTsNCi0JCWJyZWFrOw0KLQlkZWZhdWx0Og0KLQkJYnJlYWs7DQot CX0NCi0NCi0JZGN0cmxfZHZpZXcgPSBpc2MtPmNvbmZpZy5kY3RybF9kdmlldzsNCi0NCi0JcmVn bWFwX3dyaXRlKHJlZ21hcCwgSVNDX0RDVFJMLCBkY3RybF9kdmlldyB8IElTQ19EQ1RSTF9JRV9J Uyk7DQotCXNwaW5fbG9jaygmaXNjLT5hd2JfbG9jayk7DQotCXJlZ21hcF93cml0ZShyZWdtYXAs IElTQ19DVFJMRU4sIElTQ19DVFJMX0NBUFRVUkUpOw0KLQlzcGluX3VubG9jaygmaXNjLT5hd2Jf bG9jayk7DQotfQ0KLQ0KLXN0YXRpYyB2b2lkIGlzY19zZXRfcGlwZWxpbmUoc3RydWN0IGlzY19k ZXZpY2UgKmlzYywgdTMyIHBpcGVsaW5lKQ0KLXsNCi0Jc3RydWN0IHJlZ21hcCAqcmVnbWFwID0g aXNjLT5yZWdtYXA7DQotCXN0cnVjdCBpc2NfY3RybHMgKmN0cmxzID0gJmlzYy0+Y3RybHM7DQot CXUzMiB2YWwsIGJheV9jZmc7DQotCWNvbnN0IHUzMiAqZ2FtbWE7DQotCXVuc2lnbmVkIGludCBp Ow0KLQ0KLQkvKiBXQi0tPkNGQS0tPkNDLS0+R0FNLS0+Q1NDLS0+Q0JDLS0+U1VCNDIyLS0+U1VC NDIwICovDQotCWZvciAoaSA9IDA7IGkgPCBJU0NfUElQRV9MSU5FX05PREVfTlVNOyBpKyspIHsN Ci0JCXZhbCA9IHBpcGVsaW5lICYgQklUKGkpID8gMSA6IDA7DQotCQlyZWdtYXBfZmllbGRfd3Jp dGUoaXNjLT5waXBlbGluZVtpXSwgdmFsKTsNCi0JfQ0KLQ0KLQlpZiAoIXBpcGVsaW5lKQ0KLQkJ cmV0dXJuOw0KLQ0KLQliYXlfY2ZnID0gaXNjLT5jb25maWcuc2RfZm9ybWF0LT5jZmFfYmF5Y2Zn Ow0KLQ0KLQlpZiAoY3RybHMtPmF3YiA9PSBJU0NfV0JfTk9ORSkNCi0JCWlzY19yZXNldF9hd2Jf Y3RybHMoaXNjKTsNCi0NCi0JcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX1dCX0NGRywgYmF5X2Nm Zyk7DQotCWlzY191cGRhdGVfYXdiX2N0cmxzKGlzYyk7DQotDQotCXJlZ21hcF93cml0ZShyZWdt YXAsIElTQ19DRkFfQ0ZHLCBiYXlfY2ZnIHwgSVNDX0NGQV9DRkdfRUlUUE9MKTsNCi0NCi0JZ2Ft bWEgPSAmaXNjX2dhbW1hX3RhYmxlW2N0cmxzLT5nYW1tYV9pbmRleF1bMF07DQotCXJlZ21hcF9i dWxrX3dyaXRlKHJlZ21hcCwgSVNDX0dBTV9CRU5UUlksIGdhbW1hLCBHQU1NQV9FTlRSSUVTKTsN Ci0JcmVnbWFwX2J1bGtfd3JpdGUocmVnbWFwLCBJU0NfR0FNX0dFTlRSWSwgZ2FtbWEsIEdBTU1B X0VOVFJJRVMpOw0KLQlyZWdtYXBfYnVsa193cml0ZShyZWdtYXAsIElTQ19HQU1fUkVOVFJZLCBn YW1tYSwgR0FNTUFfRU5UUklFUyk7DQotDQotCS8qIENvbnZlcnQgUkdCIHRvIFlVViAqLw0KLQly ZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfQ1NDX1lSX1lHLCAweDQyIHwgKDB4ODEgPDwgMTYpKTsN Ci0JcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NTQ19ZQl9PWSwgMHgxOSB8ICgweDEwIDw8IDE2 KSk7DQotCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DU0NfQ0JSX0NCRywgMHhGREEgfCAoMHhG QjYgPDwgMTYpKTsNCi0JcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NTQ19DQkJfT0NCLCAweDcw IHwgKDB4ODAgPDwgMTYpKTsNCi0JcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NTQ19DUlJfQ1JH LCAweDcwIHwgKDB4RkEyIDw8IDE2KSk7DQotCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DU0Nf Q1JCX09DUiwgMHhGRUUgfCAoMHg4MCA8PCAxNikpOw0KLQ0KLQlyZWdtYXBfd3JpdGUocmVnbWFw LCBJU0NfQ0JDX0JSSUdIVCwgY3RybHMtPmJyaWdodG5lc3MpOw0KLQlyZWdtYXBfd3JpdGUocmVn bWFwLCBJU0NfQ0JDX0NPTlRSQVNULCBjdHJscy0+Y29udHJhc3QpOw0KLX0NCi0NCi1zdGF0aWMg aW50IGlzY191cGRhdGVfcHJvZmlsZShzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KLXsNCi0Jc3Ry dWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjLT5yZWdtYXA7DQotCXUzMiBzcjsNCi0JaW50IGNvdW50 ZXIgPSAxMDA7DQotDQotCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DVFJMRU4sIElTQ19DVFJM X1VQUFJPKTsNCi0NCi0JcmVnbWFwX3JlYWQocmVnbWFwLCBJU0NfQ1RSTFNSLCAmc3IpOw0KLQl3 aGlsZSAoKHNyICYgSVNDX0NUUkxfVVBQUk8pICYmIGNvdW50ZXItLSkgew0KLQkJdXNsZWVwX3Jh bmdlKDEwMDAsIDIwMDApOw0KLQkJcmVnbWFwX3JlYWQocmVnbWFwLCBJU0NfQ1RSTFNSLCAmc3Ip Ow0KLQl9DQotDQotCWlmIChjb3VudGVyIDwgMCkgew0KLQkJdjRsMl93YXJuKCZpc2MtPnY0bDJf ZGV2LCAiVGltZSBvdXQgdG8gdXBkYXRlIHByb2ZpbGVcbiIpOw0KLQkJcmV0dXJuIC1FVElNRURP VVQ7DQotCX0NCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0YXRpYyB2b2lkIGlzY19zZXRfaGlz dG9ncmFtKHN0cnVjdCBpc2NfZGV2aWNlICppc2MsIGJvb2wgZW5hYmxlKQ0KLXsNCi0Jc3RydWN0 IHJlZ21hcCAqcmVnbWFwID0gaXNjLT5yZWdtYXA7DQotCXN0cnVjdCBpc2NfY3RybHMgKmN0cmxz ID0gJmlzYy0+Y3RybHM7DQotDQotCWlmIChlbmFibGUpIHsNCi0JCXJlZ21hcF93cml0ZShyZWdt YXAsIElTQ19ISVNfQ0ZHLA0KLQkJCSAgICAgSVNDX0hJU19DRkdfTU9ERV9HUiB8DQotCQkJICAg ICAoaXNjLT5jb25maWcuc2RfZm9ybWF0LT5jZmFfYmF5Y2ZnDQotCQkJCQk8PCBJU0NfSElTX0NG R19CQVlTRUxfU0hJRlQpIHwNCi0JCQkJCUlTQ19ISVNfQ0ZHX1JBUik7DQotCQlyZWdtYXBfd3Jp dGUocmVnbWFwLCBJU0NfSElTX0NUUkwsIElTQ19ISVNfQ1RSTF9FTik7DQotCQlyZWdtYXBfd3Jp dGUocmVnbWFwLCBJU0NfSU5URU4sIElTQ19JTlRfSElTRE9ORSk7DQotCQljdHJscy0+aGlzdF9p ZCA9IElTQ19ISVNfQ0ZHX01PREVfR1I7DQotCQlpc2NfdXBkYXRlX3Byb2ZpbGUoaXNjKTsNCi0J CXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DVFJMRU4sIElTQ19DVFJMX0hJU1JFUSk7DQotDQot CQljdHJscy0+aGlzdF9zdGF0ID0gSElTVF9FTkFCTEVEOw0KLQl9IGVsc2Ugew0KLQkJcmVnbWFw X3dyaXRlKHJlZ21hcCwgSVNDX0lOVERJUywgSVNDX0lOVF9ISVNET05FKTsNCi0JCXJlZ21hcF93 cml0ZShyZWdtYXAsIElTQ19ISVNfQ1RSTCwgSVNDX0hJU19DVFJMX0RJUyk7DQotDQotCQljdHJs cy0+aGlzdF9zdGF0ID0gSElTVF9ESVNBQkxFRDsNCi0JfQ0KLX0NCi0NCi1zdGF0aWMgaW50IGlz Y19jb25maWd1cmUoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCi17DQotCXN0cnVjdCByZWdtYXAg KnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0KLQl1MzIgcGZlX2NmZzAsIHJscF9tb2RlLCBkY2ZnLCBt YXNrLCBwaXBlbGluZTsNCi0Jc3RydWN0IGlzY19zdWJkZXZfZW50aXR5ICpzdWJkZXYgPSBpc2Mt PmN1cnJlbnRfc3ViZGV2Ow0KLQ0KLQlwZmVfY2ZnMCA9IGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+ cGZlX2NmZzBfYnBzOw0KLQlybHBfbW9kZSA9IGlzYy0+Y29uZmlnLnJscF9jZmdfbW9kZTsNCi0J cGlwZWxpbmUgPSBpc2MtPmNvbmZpZy5iaXRzX3BpcGVsaW5lOw0KLQ0KLQlkY2ZnID0gaXNjLT5j b25maWcuZGNmZ19pbW9kZSB8DQotCQkgICAgICAgSVNDX0RDRkdfWU1CU0laRV9CRUFUUzggfCBJ U0NfRENGR19DTUJTSVpFX0JFQVRTODsNCi0NCi0JcGZlX2NmZzAgIHw9IHN1YmRldi0+cGZlX2Nm ZzAgfCBJU0NfUEZFX0NGRzBfTU9ERV9QUk9HUkVTU0lWRTsNCi0JbWFzayA9IElTQ19QRkVfQ0ZH MF9CUFNfTUFTSyB8IElTQ19QRkVfQ0ZHMF9IUE9MX0xPVyB8DQotCSAgICAgICBJU0NfUEZFX0NG RzBfVlBPTF9MT1cgfCBJU0NfUEZFX0NGRzBfUFBPTF9MT1cgfA0KLQkgICAgICAgSVNDX1BGRV9D RkcwX01PREVfTUFTSyB8IElTQ19QRkVfQ0ZHMF9DQ0lSX0NSQyB8DQotCQkgICBJU0NfUEZFX0NG RzBfQ0NJUjY1NjsNCi0NCi0JcmVnbWFwX3VwZGF0ZV9iaXRzKHJlZ21hcCwgSVNDX1BGRV9DRkcw LCBtYXNrLCBwZmVfY2ZnMCk7DQotDQotCXJlZ21hcF91cGRhdGVfYml0cyhyZWdtYXAsIElTQ19S TFBfQ0ZHLCBJU0NfUkxQX0NGR19NT0RFX01BU0ssDQotCQkJICAgcmxwX21vZGUpOw0KLQ0KLQly ZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfRENGRywgZGNmZyk7DQotDQotCS8qIFNldCB0aGUgcGlw ZWxpbmUgKi8NCi0JaXNjX3NldF9waXBlbGluZShpc2MsIHBpcGVsaW5lKTsNCi0NCi0JLyoNCi0J ICogVGhlIGN1cnJlbnQgaW1wbGVtZW50ZWQgaGlzdG9ncmFtIGlzIGF2YWlsYWJsZSBmb3IgUkFX IFIsIEIsIEdCLCBHUg0KLQkgKiBjaGFubmVscy4gV2UgbmVlZCB0byBjaGVjayBpZiBzZW5zb3Ig aXMgb3V0cHV0dGluZyBSQVcgQkFZRVINCi0JICovDQotCWlmIChpc2MtPmN0cmxzLmF3YiAmJg0K LQkgICAgSVNDX0lTX0ZPUk1BVF9SQVcoaXNjLT5jb25maWcuc2RfZm9ybWF0LT5tYnVzX2NvZGUp KQ0KLQkJaXNjX3NldF9oaXN0b2dyYW0oaXNjLCB0cnVlKTsNCi0JZWxzZQ0KLQkJaXNjX3NldF9o aXN0b2dyYW0oaXNjLCBmYWxzZSk7DQotDQotCS8qIFVwZGF0ZSBwcm9maWxlICovDQotCXJldHVy biBpc2NfdXBkYXRlX3Byb2ZpbGUoaXNjKTsNCi19DQotDQotc3RhdGljIGludCBpc2Nfc3RhcnRf c3RyZWFtaW5nKHN0cnVjdCB2YjJfcXVldWUgKnZxLCB1bnNpZ25lZCBpbnQgY291bnQpDQotew0K LQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmIyX2dldF9kcnZfcHJpdih2cSk7DQotCXN0cnVj dCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0KLQlzdHJ1Y3QgaXNjX2J1ZmZlciAqYnVm Ow0KLQl1bnNpZ25lZCBsb25nIGZsYWdzOw0KLQlpbnQgcmV0Ow0KLQ0KLQkvKiBFbmFibGUgc3Ry ZWFtIG9uIHRoZSBzdWIgZGV2aWNlICovDQotCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoaXNjLT5j dXJyZW50X3N1YmRldi0+c2QsIHZpZGVvLCBzX3N0cmVhbSwgMSk7DQotCWlmIChyZXQgJiYgcmV0 ICE9IC1FTk9JT0NUTENNRCkgew0KLQkJdjRsMl9lcnIoJmlzYy0+djRsMl9kZXYsICJzdHJlYW0g b24gZmFpbGVkIGluIHN1YmRldiAlZFxuIiwNCi0JCQkgcmV0KTsNCi0JCWdvdG8gZXJyX3N0YXJ0 X3N0cmVhbTsNCi0JfQ0KLQ0KLQlwbV9ydW50aW1lX2dldF9zeW5jKGlzYy0+ZGV2KTsNCi0NCi0J cmV0ID0gaXNjX2NvbmZpZ3VyZShpc2MpOw0KLQlpZiAodW5saWtlbHkocmV0KSkNCi0JCWdvdG8g ZXJyX2NvbmZpZ3VyZTsNCi0NCi0JLyogRW5hYmxlIERNQSBpbnRlcnJ1cHQgKi8NCi0JcmVnbWFw X3dyaXRlKHJlZ21hcCwgSVNDX0lOVEVOLCBJU0NfSU5UX0RET05FKTsNCi0NCi0Jc3Bpbl9sb2Nr X2lycXNhdmUoJmlzYy0+ZG1hX3F1ZXVlX2xvY2ssIGZsYWdzKTsNCi0NCi0JaXNjLT5zZXF1ZW5j ZSA9IDA7DQotCWlzYy0+c3RvcCA9IGZhbHNlOw0KLQlyZWluaXRfY29tcGxldGlvbigmaXNjLT5j b21wKTsNCi0NCi0JaXNjLT5jdXJfZnJtID0gbGlzdF9maXJzdF9lbnRyeSgmaXNjLT5kbWFfcXVl dWUsDQotCQkJCQlzdHJ1Y3QgaXNjX2J1ZmZlciwgbGlzdCk7DQotCWxpc3RfZGVsKCZpc2MtPmN1 cl9mcm0tPmxpc3QpOw0KLQ0KLQlpc2Nfc3RhcnRfZG1hKGlzYyk7DQotDQotCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJmlzYy0+ZG1hX3F1ZXVlX2xvY2ssIGZsYWdzKTsNCi0NCi0JLyogaWYgd2Ug c3RyZWFtaW5nIGZyb20gUkFXLCB3ZSBjYW4gZG8gb25lLXNob3Qgd2hpdGUgYmFsYW5jZSBhZGog Ki8NCi0JaWYgKElTQ19JU19GT1JNQVRfUkFXKGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19j b2RlKSkNCi0JCXY0bDJfY3RybF9hY3RpdmF0ZShpc2MtPmRvX3diX2N0cmwsIHRydWUpOw0KLQ0K LQlyZXR1cm4gMDsNCi0NCi1lcnJfY29uZmlndXJlOg0KLQlwbV9ydW50aW1lX3B1dF9zeW5jKGlz Yy0+ZGV2KTsNCi0NCi0JdjRsMl9zdWJkZXZfY2FsbChpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZCwg dmlkZW8sIHNfc3RyZWFtLCAwKTsNCi0NCi1lcnJfc3RhcnRfc3RyZWFtOg0KLQlzcGluX2xvY2tf aXJxc2F2ZSgmaXNjLT5kbWFfcXVldWVfbG9jaywgZmxhZ3MpOw0KLQlsaXN0X2Zvcl9lYWNoX2Vu dHJ5KGJ1ZiwgJmlzYy0+ZG1hX3F1ZXVlLCBsaXN0KQ0KLQkJdmIyX2J1ZmZlcl9kb25lKCZidWYt PnZiLnZiMl9idWYsIFZCMl9CVUZfU1RBVEVfUVVFVUVEKTsNCi0JSU5JVF9MSVNUX0hFQUQoJmlz Yy0+ZG1hX3F1ZXVlKTsNCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNjLT5kbWFfcXVldWVf bG9jaywgZmxhZ3MpOw0KLQ0KLQlyZXR1cm4gcmV0Ow0KLX0NCi0NCi1zdGF0aWMgdm9pZCBpc2Nf c3RvcF9zdHJlYW1pbmcoc3RydWN0IHZiMl9xdWV1ZSAqdnEpDQotew0KLQlzdHJ1Y3QgaXNjX2Rl dmljZSAqaXNjID0gdmIyX2dldF9kcnZfcHJpdih2cSk7DQotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 DQotCXN0cnVjdCBpc2NfYnVmZmVyICpidWY7DQotCWludCByZXQ7DQotDQotCXY0bDJfY3RybF9h Y3RpdmF0ZShpc2MtPmRvX3diX2N0cmwsIGZhbHNlKTsNCi0NCi0JaXNjLT5zdG9wID0gdHJ1ZTsN Ci0NCi0JLyogV2FpdCB1bnRpbCB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGZyYW1lICovDQotCWlm IChpc2MtPmN1cl9mcm0gJiYgIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dCgmaXNjLT5jb21w LCA1ICogSFopKQ0KLQkJdjRsMl9lcnIoJmlzYy0+djRsMl9kZXYsDQotCQkJICJUaW1lb3V0IHdh aXRpbmcgZm9yIGVuZCBvZiB0aGUgY2FwdHVyZVxuIik7DQotDQotCS8qIERpc2FibGUgRE1BIGlu dGVycnVwdCAqLw0KLQlyZWdtYXBfd3JpdGUoaXNjLT5yZWdtYXAsIElTQ19JTlRESVMsIElTQ19J TlRfRERPTkUpOw0KLQ0KLQlwbV9ydW50aW1lX3B1dF9zeW5jKGlzYy0+ZGV2KTsNCi0NCi0JLyog RGlzYWJsZSBzdHJlYW0gb24gdGhlIHN1YiBkZXZpY2UgKi8NCi0JcmV0ID0gdjRsMl9zdWJkZXZf Y2FsbChpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZCwgdmlkZW8sIHNfc3RyZWFtLCAwKTsNCi0JaWYg KHJldCAmJiByZXQgIT0gLUVOT0lPQ1RMQ01EKQ0KLQkJdjRsMl9lcnIoJmlzYy0+djRsMl9kZXYs ICJzdHJlYW0gb2ZmIGZhaWxlZCBpbiBzdWJkZXZcbiIpOw0KLQ0KLQkvKiBSZWxlYXNlIGFsbCBh Y3RpdmUgYnVmZmVycyAqLw0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaXNjLT5kbWFfcXVldWVfbG9j aywgZmxhZ3MpOw0KLQlpZiAodW5saWtlbHkoaXNjLT5jdXJfZnJtKSkgew0KLQkJdmIyX2J1ZmZl cl9kb25lKCZpc2MtPmN1cl9mcm0tPnZiLnZiMl9idWYsDQotCQkJCVZCMl9CVUZfU1RBVEVfRVJS T1IpOw0KLQkJaXNjLT5jdXJfZnJtID0gTlVMTDsNCi0JfQ0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5 KGJ1ZiwgJmlzYy0+ZG1hX3F1ZXVlLCBsaXN0KQ0KLQkJdmIyX2J1ZmZlcl9kb25lKCZidWYtPnZi LnZiMl9idWYsIFZCMl9CVUZfU1RBVEVfRVJST1IpOw0KLQlJTklUX0xJU1RfSEVBRCgmaXNjLT5k bWFfcXVldWUpOw0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpc2MtPmRtYV9xdWV1ZV9sb2Nr LCBmbGFncyk7DQotfQ0KLQ0KLXN0YXRpYyB2b2lkIGlzY19idWZmZXJfcXVldWUoc3RydWN0IHZi Ml9idWZmZXIgKnZiKQ0KLXsNCi0Jc3RydWN0IHZiMl92NGwyX2J1ZmZlciAqdmJ1ZiA9IHRvX3Zi Ml92NGwyX2J1ZmZlcih2Yik7DQotCXN0cnVjdCBpc2NfYnVmZmVyICpidWYgPSBjb250YWluZXJf b2YodmJ1Ziwgc3RydWN0IGlzY19idWZmZXIsIHZiKTsNCi0Jc3RydWN0IGlzY19kZXZpY2UgKmlz YyA9IHZiMl9nZXRfZHJ2X3ByaXYodmItPnZiMl9xdWV1ZSk7DQotCXVuc2lnbmVkIGxvbmcgZmxh Z3M7DQotDQotCXNwaW5fbG9ja19pcnFzYXZlKCZpc2MtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7 DQotCWlmICghaXNjLT5jdXJfZnJtICYmIGxpc3RfZW1wdHkoJmlzYy0+ZG1hX3F1ZXVlKSAmJg0K LQkJdmIyX2lzX3N0cmVhbWluZyh2Yi0+dmIyX3F1ZXVlKSkgew0KLQkJaXNjLT5jdXJfZnJtID0g YnVmOw0KLQkJaXNjX3N0YXJ0X2RtYShpc2MpOw0KLQl9IGVsc2UNCi0JCWxpc3RfYWRkX3RhaWwo JmJ1Zi0+bGlzdCwgJmlzYy0+ZG1hX3F1ZXVlKTsNCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm aXNjLT5kbWFfcXVldWVfbG9jaywgZmxhZ3MpOw0KLX0NCi0NCi1zdGF0aWMgc3RydWN0IGlzY19m b3JtYXQgKmZpbmRfZm9ybWF0X2J5X2ZvdXJjYyhzdHJ1Y3QgaXNjX2RldmljZSAqaXNjLA0KLQkJ CQkJCSB1bnNpZ25lZCBpbnQgZm91cmNjKQ0KLXsNCi0JdW5zaWduZWQgaW50IG51bV9mb3JtYXRz ID0gaXNjLT5udW1fdXNlcl9mb3JtYXRzOw0KLQlzdHJ1Y3QgaXNjX2Zvcm1hdCAqZm10Ow0KLQl1 bnNpZ25lZCBpbnQgaTsNCi0NCi0JZm9yIChpID0gMDsgaSA8IG51bV9mb3JtYXRzOyBpKyspIHsN Ci0JCWZtdCA9IGlzYy0+dXNlcl9mb3JtYXRzW2ldOw0KLQkJaWYgKGZtdC0+Zm91cmNjID09IGZv dXJjYykNCi0JCQlyZXR1cm4gZm10Ow0KLQl9DQotDQotCXJldHVybiBOVUxMOw0KLX0NCi0NCi1z dGF0aWMgY29uc3Qgc3RydWN0IHZiMl9vcHMgaXNjX3ZiMl9vcHMgPSB7DQotCS5xdWV1ZV9zZXR1 cAkJPSBpc2NfcXVldWVfc2V0dXAsDQotCS53YWl0X3ByZXBhcmUJCT0gdmIyX29wc193YWl0X3By ZXBhcmUsDQotCS53YWl0X2ZpbmlzaAkJPSB2YjJfb3BzX3dhaXRfZmluaXNoLA0KLQkuYnVmX3By ZXBhcmUJCT0gaXNjX2J1ZmZlcl9wcmVwYXJlLA0KLQkuc3RhcnRfc3RyZWFtaW5nCT0gaXNjX3N0 YXJ0X3N0cmVhbWluZywNCi0JLnN0b3Bfc3RyZWFtaW5nCQk9IGlzY19zdG9wX3N0cmVhbWluZywN Ci0JLmJ1Zl9xdWV1ZQkJPSBpc2NfYnVmZmVyX3F1ZXVlLA0KLX07DQotDQotc3RhdGljIGludCBp c2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsDQotCQkJIHN0cnVjdCB2 NGwyX2NhcGFiaWxpdHkgKmNhcCkNCi17DQotCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2aWRl b19kcnZkYXRhKGZpbGUpOw0KLQ0KLQlzdHJzY3B5KGNhcC0+ZHJpdmVyLCBBVE1FTF9JU0NfTkFN RSwgc2l6ZW9mKGNhcC0+ZHJpdmVyKSk7DQotCXN0cnNjcHkoY2FwLT5jYXJkLCAiQXRtZWwgSW1h Z2UgU2Vuc29yIENvbnRyb2xsZXIiLCBzaXplb2YoY2FwLT5jYXJkKSk7DQotCXNucHJpbnRmKGNh cC0+YnVzX2luZm8sIHNpemVvZihjYXAtPmJ1c19pbmZvKSwNCi0JCSAicGxhdGZvcm06JXMiLCBp c2MtPnY0bDJfZGV2Lm5hbWUpOw0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGljIGludCBp c2NfZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCi0JCQkJ IHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpDQotew0KLQl1MzIgaW5kZXggPSBmLT5pbmRleDsNCi0J dTMyIGksIHN1cHBvcnRlZF9pbmRleDsNCi0NCi0JaWYgKGluZGV4IDwgQVJSQVlfU0laRShjb250 cm9sbGVyX2Zvcm1hdHMpKSB7DQotCQlmLT5waXhlbGZvcm1hdCA9IGNvbnRyb2xsZXJfZm9ybWF0 c1tpbmRleF0uZm91cmNjOw0KLQkJcmV0dXJuIDA7DQotCX0NCi0NCi0JaW5kZXggLT0gQVJSQVlf U0laRShjb250cm9sbGVyX2Zvcm1hdHMpOw0KLQ0KLQlpID0gMDsNCi0Jc3VwcG9ydGVkX2luZGV4 ID0gMDsNCi0NCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZm9ybWF0c19saXN0KTsgaSsr KSB7DQotCQlpZiAoIUlTQ19JU19GT1JNQVRfUkFXKGZvcm1hdHNfbGlzdFtpXS5tYnVzX2NvZGUp IHx8DQotCQkgICAgIWZvcm1hdHNfbGlzdFtpXS5zZF9zdXBwb3J0KQ0KLQkJCWNvbnRpbnVlOw0K LQkJaWYgKHN1cHBvcnRlZF9pbmRleCA9PSBpbmRleCkgew0KLQkJCWYtPnBpeGVsZm9ybWF0ID0g Zm9ybWF0c19saXN0W2ldLmZvdXJjYzsNCi0JCQlyZXR1cm4gMDsNCi0JCX0NCi0JCXN1cHBvcnRl ZF9pbmRleCsrOw0KLQl9DQotDQotCXJldHVybiAtRUlOVkFMOw0KLX0NCi0NCi1zdGF0aWMgaW50 IGlzY19nX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LA0KLQkJCSAg ICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQ0KLXsNCi0Jc3RydWN0IGlzY19kZXZpY2UgKmlz YyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7DQotDQotCSpmbXQgPSBpc2MtPmZtdDsNCi0NCi0JcmV0 dXJuIDA7DQotfQ0KLQ0KLS8qDQotICogQ2hlY2tzIHRoZSBjdXJyZW50IGNvbmZpZ3VyZWQgZm9y bWF0LCBpZiBJU0MgY2FuIG91dHB1dCBpdCwNCi0gKiBjb25zaWRlcmluZyB3aGljaCB0eXBlIG9m IGZvcm1hdCB0aGUgSVNDIHJlY2VpdmVzIGZyb20gdGhlIHNlbnNvcg0KLSAqLw0KLXN0YXRpYyBp bnQgaXNjX3RyeV92YWxpZGF0ZV9mb3JtYXRzKHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQotew0K LQlpbnQgcmV0Ow0KLQlib29sIGJheWVyID0gZmFsc2UsIHl1diA9IGZhbHNlLCByZ2IgPSBmYWxz ZSwgZ3JleSA9IGZhbHNlOw0KLQ0KLQkvKiBhbGwgZm9ybWF0cyBzdXBwb3J0ZWQgYnkgdGhlIFJM UCBtb2R1bGUgYXJlIE9LICovDQotCXN3aXRjaCAoaXNjLT50cnlfY29uZmlnLmZvdXJjYykgew0K LQljYXNlIFY0TDJfUElYX0ZNVF9TQkdHUjg6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NHQlJHODoN Ci0JY2FzZSBWNEwyX1BJWF9GTVRfU0dSQkc4Og0KLQljYXNlIFY0TDJfUElYX0ZNVF9TUkdHQjg6 DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dSMTA6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NHQlJH MTA6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NHUkJHMTA6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NS R0dCMTA6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dSMTI6DQotCWNhc2UgVjRMMl9QSVhfRk1U X1NHQlJHMTI6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NHUkJHMTI6DQotCWNhc2UgVjRMMl9QSVhf Rk1UX1NSR0dCMTI6DQotCQlyZXQgPSAwOw0KLQkJYmF5ZXIgPSB0cnVlOw0KLQkJYnJlYWs7DQot DQotCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMDoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIy UDoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfWVVZVjoNCi0JCXJldCA9IDA7DQotCQl5dXYgPSB0cnVl Ow0KLQkJYnJlYWs7DQotDQotCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU2NToNCi0JY2FzZSBWNEwy X1BJWF9GTVRfQUJHUjMyOg0KLQljYXNlIFY0TDJfUElYX0ZNVF9YQkdSMzI6DQotCWNhc2UgVjRM Ml9QSVhfRk1UX0FSR0I0NDQ6DQotCWNhc2UgVjRMMl9QSVhfRk1UX0FSR0I1NTU6DQotCQlyZXQg PSAwOw0KLQkJcmdiID0gdHJ1ZTsNCi0JCWJyZWFrOw0KLQljYXNlIFY0TDJfUElYX0ZNVF9HUkVZ Og0KLQkJcmV0ID0gMDsNCi0JCWdyZXkgPSB0cnVlOw0KLQkJYnJlYWs7DQotCWRlZmF1bHQ6DQot CS8qIGFueSBvdGhlciBkaWZmZXJlbnQgZm9ybWF0cyBhcmUgbm90IHN1cHBvcnRlZCAqLw0KLQkJ cmV0ID0gLUVJTlZBTDsNCi0JfQ0KLQ0KLQkvKiB3ZSBjYW5ub3Qgb3V0cHV0IFJBVy9HcmV5IGlm IHdlIGRvIG5vdCByZWNlaXZlIFJBVyAqLw0KLQlpZiAoKGJheWVyIHx8IGdyZXkpICYmDQotCSAg ICAhSVNDX0lTX0ZPUk1BVF9SQVcoaXNjLT50cnlfY29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2Rl KSkNCi0JCXJldHVybiAtRUlOVkFMOw0KLQ0KLQl2NGwyX2RiZygxLCBkZWJ1ZywgJmlzYy0+djRs Ml9kZXYsDQotCQkgIkZvcm1hdCB2YWxpZGF0aW9uLCByZXF1ZXN0ZWQgcmdiPSV1LCB5dXY9JXUs IGdyZXk9JXUsIGJheWVyPSV1XG4iLA0KLQkJIHJnYiwgeXV2LCBncmV5LCBiYXllcik7DQotDQot CXJldHVybiByZXQ7DQotfQ0KLQ0KLS8qDQotICogQ29uZmlndXJlcyB0aGUgUkxQIGFuZCBETUEg bW9kdWxlcywgZGVwZW5kaW5nIG9uIHRoZSBvdXRwdXQgZm9ybWF0DQotICogY29uZmlndXJlZCBm b3IgdGhlIElTQy4NCi0gKiBJZiBkaXJlY3RfZHVtcCA9PSB0cnVlLCBqdXN0IGR1bXAgcmF3IGRh dGEgOCBiaXRzLg0KLSAqLw0KLXN0YXRpYyBpbnQgaXNjX3RyeV9jb25maWd1cmVfcmxwX2RtYShz dHJ1Y3QgaXNjX2RldmljZSAqaXNjLCBib29sIGRpcmVjdF9kdW1wKQ0KLXsNCi0JaWYgKGRpcmVj dF9kdW1wKSB7DQotCQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9DRkdf TU9ERV9EQVQ4Ow0KLQkJaXNjLT50cnlfY29uZmlnLmRjZmdfaW1vZGUgPSBJU0NfRENGR19JTU9E RV9QQUNLRUQ4Ow0KLQkJaXNjLT50cnlfY29uZmlnLmRjdHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RW SUVXX1BBQ0tFRDsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5icHAgPSAxNjsNCi0JCXJldHVybiAwOw0K LQl9DQotDQotCXN3aXRjaCAoaXNjLT50cnlfY29uZmlnLmZvdXJjYykgew0KLQljYXNlIFY0TDJf UElYX0ZNVF9TQkdHUjg6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NHQlJHODoNCi0JY2FzZSBWNEwy X1BJWF9GTVRfU0dSQkc4Og0KLQljYXNlIFY0TDJfUElYX0ZNVF9TUkdHQjg6DQotCQlpc2MtPnRy eV9jb25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9EQVQ4Ow0KLQkJaXNjLT50 cnlfY29uZmlnLmRjZmdfaW1vZGUgPSBJU0NfRENGR19JTU9ERV9QQUNLRUQ4Ow0KLQkJaXNjLT50 cnlfY29uZmlnLmRjdHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tFRDsNCi0JCWlzYy0+ dHJ5X2NvbmZpZy5icHAgPSA4Ow0KLQkJYnJlYWs7DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dS MTA6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NHQlJHMTA6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NH UkJHMTA6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NSR0dCMTA6DQotCQlpc2MtPnRyeV9jb25maWcu cmxwX2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9EQVQxMDsNCi0JCWlzYy0+dHJ5X2NvbmZp Zy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdfSU1PREVfUEFDS0VEMTY7DQotCQlpc2MtPnRyeV9jb25m aWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0KLQkJaXNjLT50cnlfY29u ZmlnLmJwcCA9IDE2Ow0KLQkJYnJlYWs7DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dSMTI6DQot CWNhc2UgVjRMMl9QSVhfRk1UX1NHQlJHMTI6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NHUkJHMTI6 DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NSR0dCMTI6DQotCQlpc2MtPnRyeV9jb25maWcucmxwX2Nm Z19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9EQVQxMjsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5kY2Zn X2ltb2RlID0gSVNDX0RDRkdfSU1PREVfUEFDS0VEMTY7DQotCQlpc2MtPnRyeV9jb25maWcuZGN0 cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0KLQkJaXNjLT50cnlfY29uZmlnLmJw cCA9IDE2Ow0KLQkJYnJlYWs7DQotCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU2NToNCi0JCWlzYy0+ dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX1JHQjU2NTsNCi0JCWlz Yy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdfSU1PREVfUEFDS0VEMTY7DQotCQlp c2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0KLQkJ aXNjLT50cnlfY29uZmlnLmJwcCA9IDE2Ow0KLQkJYnJlYWs7DQotCWNhc2UgVjRMMl9QSVhfRk1U X0FSR0I0NDQ6DQotCQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9DRkdf TU9ERV9BUkdCNDQ0Ow0KLQkJaXNjLT50cnlfY29uZmlnLmRjZmdfaW1vZGUgPSBJU0NfRENGR19J TU9ERV9QQUNLRUQxNjsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9kdmlldyA9IElTQ19EQ1RS TF9EVklFV19QQUNLRUQ7DQotCQlpc2MtPnRyeV9jb25maWcuYnBwID0gMTY7DQotCQlicmVhazsN Ci0JY2FzZSBWNEwyX1BJWF9GTVRfQVJHQjU1NToNCi0JCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2Zn X21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX0FSR0I1NTU7DQotCQlpc2MtPnRyeV9jb25maWcuZGNm Z19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDE2Ow0KLQkJaXNjLT50cnlfY29uZmlnLmRj dHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tFRDsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5i cHAgPSAxNjsNCi0JCWJyZWFrOw0KLQljYXNlIFY0TDJfUElYX0ZNVF9BQkdSMzI6DQotCWNhc2Ug VjRMMl9QSVhfRk1UX1hCR1IzMjoNCi0JCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJ U0NfUkxQX0NGR19NT0RFX0FSR0IzMjsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0g SVNDX0RDRkdfSU1PREVfUEFDS0VEMzI7DQotCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcg PSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0KLQkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDMyOw0K LQkJYnJlYWs7DQotCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMDoNCi0JCWlzYy0+dHJ5X2NvbmZp Zy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX1lZQ0M7DQotCQlpc2MtPnRyeV9jb25m aWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1lDNDIwUDsNCi0JCWlzYy0+dHJ5X2NvbmZp Zy5kY3RybF9kdmlldyA9IElTQ19EQ1RSTF9EVklFV19QTEFOQVI7DQotCQlpc2MtPnRyeV9jb25m aWcuYnBwID0gMTI7DQotCQlicmVhazsNCi0JY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIyUDoNCi0J CWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX1lZQ0M7DQot CQlpc2MtPnRyeV9jb25maWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1lDNDIyUDsNCi0J CWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9kdmlldyA9IElTQ19EQ1RSTF9EVklFV19QTEFOQVI7DQot CQlpc2MtPnRyeV9jb25maWcuYnBwID0gMTY7DQotCQlicmVhazsNCi0JY2FzZSBWNEwyX1BJWF9G TVRfWVVZVjoNCi0JCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19N T0RFX1lZQ0M7DQotCQlpc2MtPnRyeV9jb25maWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RF X1BBQ0tFRDMyOw0KLQkJaXNjLT50cnlfY29uZmlnLmRjdHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RW SUVXX1BBQ0tFRDsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5icHAgPSAxNjsNCi0JCWJyZWFrOw0KLQlj YXNlIFY0TDJfUElYX0ZNVF9HUkVZOg0KLQkJaXNjLT50cnlfY29uZmlnLnJscF9jZmdfbW9kZSA9 IElTQ19STFBfQ0ZHX01PREVfREFUWTg7DQotCQlpc2MtPnRyeV9jb25maWcuZGNmZ19pbW9kZSA9 IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDg7DQotCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcg PSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0KLQkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDg7DQot CQlicmVhazsNCi0JZGVmYXVsdDoNCi0JCXJldHVybiAtRUlOVkFMOw0KLQl9DQotCXJldHVybiAw Ow0KLX0NCi0NCi0vKg0KLSAqIENvbmZpZ3VyaW5nIHBpcGVsaW5lIG1vZHVsZXMsIGRlcGVuZGlu ZyBvbiB3aGljaCBmb3JtYXQgdGhlIElTQyBvdXRwdXRzDQotICogYW5kIGNvbnNpZGVyaW5nIHdo aWNoIGZvcm1hdCBpdCBoYXMgYXMgaW5wdXQgZnJvbSB0aGUgc2Vuc29yLg0KLSAqLw0KLXN0YXRp YyBpbnQgaXNjX3RyeV9jb25maWd1cmVfcGlwZWxpbmUoc3RydWN0IGlzY19kZXZpY2UgKmlzYykN Ci17DQotCXN3aXRjaCAoaXNjLT50cnlfY29uZmlnLmZvdXJjYykgew0KLQljYXNlIFY0TDJfUElY X0ZNVF9SR0I1NjU6DQotCWNhc2UgVjRMMl9QSVhfRk1UX0FSR0I1NTU6DQotCWNhc2UgVjRMMl9Q SVhfRk1UX0FSR0I0NDQ6DQotCWNhc2UgVjRMMl9QSVhfRk1UX0FCR1IzMjoNCi0JY2FzZSBWNEwy X1BJWF9GTVRfWEJHUjMyOg0KLQkJLyogaWYgc2Vuc29yIGZvcm1hdCBpcyBSQVcsIHdlIGNvbnZl cnQgaW5zaWRlIElTQyAqLw0KLQkJaWYgKElTQ19JU19GT1JNQVRfUkFXKGlzYy0+dHJ5X2NvbmZp Zy5zZF9mb3JtYXQtPm1idXNfY29kZSkpIHsNCi0JCQlpc2MtPnRyeV9jb25maWcuYml0c19waXBl bGluZSA9IENGQV9FTkFCTEUgfA0KLQkJCQlXQl9FTkFCTEUgfCBHQU1fRU5BQkxFUzsNCi0JCX0g ZWxzZSB7DQotCQkJaXNjLT50cnlfY29uZmlnLmJpdHNfcGlwZWxpbmUgPSAweDA7DQotCQl9DQot CQlicmVhazsNCi0JY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIwOg0KLQkJLyogaWYgc2Vuc29yIGZv cm1hdCBpcyBSQVcsIHdlIGNvbnZlcnQgaW5zaWRlIElTQyAqLw0KLQkJaWYgKElTQ19JU19GT1JN QVRfUkFXKGlzYy0+dHJ5X2NvbmZpZy5zZF9mb3JtYXQtPm1idXNfY29kZSkpIHsNCi0JCQlpc2Mt PnRyeV9jb25maWcuYml0c19waXBlbGluZSA9IENGQV9FTkFCTEUgfA0KLQkJCQlDU0NfRU5BQkxF IHwgV0JfRU5BQkxFIHwgR0FNX0VOQUJMRVMgfA0KLQkJCQlTVUI0MjBfRU5BQkxFIHwgU1VCNDIy X0VOQUJMRSB8IENCQ19FTkFCTEU7DQotCQl9IGVsc2Ugew0KLQkJCWlzYy0+dHJ5X2NvbmZpZy5i aXRzX3BpcGVsaW5lID0gMHgwOw0KLQkJfQ0KLQkJYnJlYWs7DQotCWNhc2UgVjRMMl9QSVhfRk1U X1lVVjQyMlA6DQotCQkvKiBpZiBzZW5zb3IgZm9ybWF0IGlzIFJBVywgd2UgY29udmVydCBpbnNp ZGUgSVNDICovDQotCQlpZiAoSVNDX0lTX0ZPUk1BVF9SQVcoaXNjLT50cnlfY29uZmlnLnNkX2Zv cm1hdC0+bWJ1c19jb2RlKSkgew0KLQkJCWlzYy0+dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0g Q0ZBX0VOQUJMRSB8DQotCQkJCUNTQ19FTkFCTEUgfCBXQl9FTkFCTEUgfCBHQU1fRU5BQkxFUyB8 DQotCQkJCVNVQjQyMl9FTkFCTEUgfCBDQkNfRU5BQkxFOw0KLQkJfSBlbHNlIHsNCi0JCQlpc2Mt PnRyeV9jb25maWcuYml0c19waXBlbGluZSA9IDB4MDsNCi0JCX0NCi0JCWJyZWFrOw0KLQljYXNl IFY0TDJfUElYX0ZNVF9ZVVlWOg0KLQkJLyogaWYgc2Vuc29yIGZvcm1hdCBpcyBSQVcsIHdlIGNv bnZlcnQgaW5zaWRlIElTQyAqLw0KLQkJaWYgKElTQ19JU19GT1JNQVRfUkFXKGlzYy0+dHJ5X2Nv bmZpZy5zZF9mb3JtYXQtPm1idXNfY29kZSkpIHsNCi0JCQlpc2MtPnRyeV9jb25maWcuYml0c19w aXBlbGluZSA9IENGQV9FTkFCTEUgfA0KLQkJCQlDU0NfRU5BQkxFIHwgV0JfRU5BQkxFIHwgR0FN X0VOQUJMRVMgfA0KLQkJCQlTVUI0MjJfRU5BQkxFIHwgQ0JDX0VOQUJMRTsNCi0JCX0gZWxzZSB7 DQotCQkJaXNjLT50cnlfY29uZmlnLmJpdHNfcGlwZWxpbmUgPSAweDA7DQotCQl9DQotCQlicmVh azsNCi0JY2FzZSBWNEwyX1BJWF9GTVRfR1JFWToNCi0JCWlmIChJU0NfSVNfRk9STUFUX1JBVyhp c2MtPnRyeV9jb25maWcuc2RfZm9ybWF0LT5tYnVzX2NvZGUpKSB7DQotCQkvKiBpZiBzZW5zb3Ig Zm9ybWF0IGlzIFJBVywgd2UgY29udmVydCBpbnNpZGUgSVNDICovDQotCQkJaXNjLT50cnlfY29u ZmlnLmJpdHNfcGlwZWxpbmUgPSBDRkFfRU5BQkxFIHwNCi0JCQkJQ1NDX0VOQUJMRSB8IFdCX0VO QUJMRSB8IEdBTV9FTkFCTEVTIHwNCi0JCQkJQ0JDX0VOQUJMRTsNCi0JCX0gZWxzZSB7DQotCQkJ aXNjLT50cnlfY29uZmlnLmJpdHNfcGlwZWxpbmUgPSAweDA7DQotCQl9DQotCQlicmVhazsNCi0J ZGVmYXVsdDoNCi0JCWlzYy0+dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gMHgwOw0KLQl9DQot CXJldHVybiAwOw0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY190cnlfZm10KHN0cnVjdCBpc2NfZGV2 aWNlICppc2MsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZiwNCi0JCQl1MzIgKmNvZGUpDQotew0KLQlp bnQgaTsNCi0Jc3RydWN0IGlzY19mb3JtYXQgKnNkX2ZtdCA9IE5VTEwsICpkaXJlY3RfZm10ID0g TlVMTDsNCi0Jc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4Zm10ID0gJmYtPmZtdC5waXg7DQot CXN0cnVjdCB2NGwyX3N1YmRldl9wYWRfY29uZmlnIHBhZF9jZmc7DQotCXN0cnVjdCB2NGwyX3N1 YmRldl9mb3JtYXQgZm9ybWF0ID0gew0KLQkJLndoaWNoID0gVjRMMl9TVUJERVZfRk9STUFUX1RS WSwNCi0JfTsNCi0JdTMyIG1idXNfY29kZTsNCi0JaW50IHJldDsNCi0JYm9vbCBybHBfZG1hX2Rp cmVjdF9kdW1wID0gZmFsc2U7DQotDQotCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklE RU9fQ0FQVFVSRSkNCi0JCXJldHVybiAtRUlOVkFMOw0KLQ0KLQkvKiBTdGVwIDE6IGZpbmQgYSBS QVcgZm9ybWF0IHRoYXQgaXMgc3VwcG9ydGVkICovDQotCWZvciAoaSA9IDA7IGkgPCBpc2MtPm51 bV91c2VyX2Zvcm1hdHM7IGkrKykgew0KLQkJaWYgKElTQ19JU19GT1JNQVRfUkFXKGlzYy0+dXNl cl9mb3JtYXRzW2ldLT5tYnVzX2NvZGUpKSB7DQotCQkJc2RfZm10ID0gaXNjLT51c2VyX2Zvcm1h dHNbaV07DQotCQkJYnJlYWs7DQotCQl9DQotCX0NCi0JLyogU3RlcCAyOiBXZSBjYW4gY29udGlu dWUgd2l0aCB0aGlzIFJBVyBmb3JtYXQsIG9yIHdlIGNhbiBsb29rDQotCSAqIGZvciBiZXR0ZXI6 IG1heWJlIHNlbnNvciBzdXBwb3J0cyBkaXJlY3RseSB3aGF0IHdlIG5lZWQuDQotCSAqLw0KLQlk aXJlY3RfZm10ID0gZmluZF9mb3JtYXRfYnlfZm91cmNjKGlzYywgcGl4Zm10LT5waXhlbGZvcm1h dCk7DQotDQotCS8qIFN0ZXAgMzogV2UgaGF2ZSBib3RoLiBXZSBkZWNpZGUgZ2l2ZW4gdGhlIG1v ZHVsZSBwYXJhbWV0ZXIgd2hpY2gNCi0JICogb25lIHRvIHVzZS4NCi0JICovDQotCWlmIChkaXJl Y3RfZm10ICYmIHNkX2ZtdCAmJiBzZW5zb3JfcHJlZmVycmVkKQ0KLQkJc2RfZm10ID0gZGlyZWN0 X2ZtdDsNCi0NCi0JLyogU3RlcCA0OiB3ZSBkbyBub3QgaGF2ZSBSQVcgYnV0IHdlIGhhdmUgYSBk aXJlY3QgZm9ybWF0LiBVc2UgaXQuICovDQotCWlmIChkaXJlY3RfZm10ICYmICFzZF9mbXQpDQot CQlzZF9mbXQgPSBkaXJlY3RfZm10Ow0KLQ0KLQkvKiBTdGVwIDU6IGlmIHdlIGFyZSB1c2luZyBh IGRpcmVjdCBmb3JtYXQsIHdlIG5lZWQgdG8gcGFja2FnZQ0KLQkgKiBldmVyeXRoaW5nIGFzIDgg Yml0IGRhdGEgYW5kIGp1c3QgZHVtcCBpdA0KLQkgKi8NCi0JaWYgKHNkX2ZtdCA9PSBkaXJlY3Rf Zm10KQ0KLQkJcmxwX2RtYV9kaXJlY3RfZHVtcCA9IHRydWU7DQotDQotCS8qIFN0ZXAgNjogV2Ug aGF2ZSBubyBmb3JtYXQuIFRoaXMgY2FuIGhhcHBlbiBpZiB0aGUgdXNlcnNwYWNlDQotCSAqIHJl cXVlc3RzIHNvbWUgd2VpcmQvaW52YWxpZCBmb3JtYXQuDQotCSAqIEluIHRoaXMgY2FzZSwgZGVm YXVsdCB0byB3aGF0ZXZlciB3ZSBoYXZlDQotCSAqLw0KLQlpZiAoIXNkX2ZtdCAmJiAhZGlyZWN0 X2ZtdCkgew0KLQkJc2RfZm10ID0gaXNjLT51c2VyX2Zvcm1hdHNbaXNjLT5udW1fdXNlcl9mb3Jt YXRzIC0gMV07DQotCQl2NGwyX2RiZygxLCBkZWJ1ZywgJmlzYy0+djRsMl9kZXYsDQotCQkJICJT ZW5zb3Igbm90IHN1cHBvcnRpbmcgJS40cywgdXNpbmcgJS40c1xuIiwNCi0JCQkgKGNoYXIgKikm cGl4Zm10LT5waXhlbGZvcm1hdCwgKGNoYXIgKikmc2RfZm10LT5mb3VyY2MpOw0KLQl9DQotDQot CWlmICghc2RfZm10KSB7DQotCQlyZXQgPSAtRUlOVkFMOw0KLQkJZ290byBpc2NfdHJ5X2ZtdF9l cnI7DQotCX0NCi0NCi0JLyogU3RlcCA3OiBQcmludCBvdXQgd2hhdCB3ZSBkZWNpZGVkIGZvciBk ZWJ1Z2dpbmcgKi8NCi0JdjRsMl9kYmcoMSwgZGVidWcsICZpc2MtPnY0bDJfZGV2LA0KLQkJICJQ cmVmZXJyaW5nIHRvIGhhdmUgc2Vuc29yIHVzaW5nIGZvcm1hdCAlLjRzXG4iLA0KLQkJIChjaGFy ICopJnNkX2ZtdC0+Zm91cmNjKTsNCi0NCi0JLyogU3RlcCA4OiBhdCB0aGlzIG1vbWVudCB3ZSBk ZWNpZGVkIHdoaWNoIGZvcm1hdCB0aGUgc3ViZGV2IHdpbGwgdXNlICovDQotCWlzYy0+dHJ5X2Nv bmZpZy5zZF9mb3JtYXQgPSBzZF9mbXQ7DQotDQotCS8qIExpbWl0IHRvIEF0bWVsIElTQyBoYXJk d2FyZSBjYXBhYmlsaXRpZXMgKi8NCi0JaWYgKHBpeGZtdC0+d2lkdGggPiBJU0NfTUFYX1NVUFBP UlRfV0lEVEgpDQotCQlwaXhmbXQtPndpZHRoID0gSVNDX01BWF9TVVBQT1JUX1dJRFRIOw0KLQlp ZiAocGl4Zm10LT5oZWlnaHQgPiBJU0NfTUFYX1NVUFBPUlRfSEVJR0hUKQ0KLQkJcGl4Zm10LT5o ZWlnaHQgPSBJU0NfTUFYX1NVUFBPUlRfSEVJR0hUOw0KLQ0KLQkvKg0KLQkgKiBUaGUgbWJ1cyBm b3JtYXQgaXMgdGhlIG9uZSB0aGUgc3ViZGV2IG91dHB1dHMuDQotCSAqIFRoZSBwaXhlbHMgd2ls bCBiZSB0cmFuc2ZlcnJlZCBpbiB0aGlzIGZvcm1hdCBTZW5zb3IgLT4gSVNDDQotCSAqLw0KLQlt YnVzX2NvZGUgPSBzZF9mbXQtPm1idXNfY29kZTsNCi0NCi0JLyoNCi0JICogVmFsaWRhdGUgZm9y bWF0cy4gSWYgdGhlIHJlcXVpcmVkIGZvcm1hdCBpcyBub3QgT0ssIGRlZmF1bHQgdG8gcmF3Lg0K LQkgKi8NCi0NCi0JaXNjLT50cnlfY29uZmlnLmZvdXJjYyA9IHBpeGZtdC0+cGl4ZWxmb3JtYXQ7 DQotDQotCWlmIChpc2NfdHJ5X3ZhbGlkYXRlX2Zvcm1hdHMoaXNjKSkgew0KLQkJcGl4Zm10LT5w aXhlbGZvcm1hdCA9IGlzYy0+dHJ5X2NvbmZpZy5mb3VyY2MgPSBzZF9mbXQtPmZvdXJjYzsNCi0J CS8qIFJlLXRyeSB0byB2YWxpZGF0ZSB0aGUgbmV3IGZvcm1hdCAqLw0KLQkJcmV0ID0gaXNjX3Ry eV92YWxpZGF0ZV9mb3JtYXRzKGlzYyk7DQotCQlpZiAocmV0KQ0KLQkJCWdvdG8gaXNjX3RyeV9m bXRfZXJyOw0KLQl9DQotDQotCXJldCA9IGlzY190cnlfY29uZmlndXJlX3JscF9kbWEoaXNjLCBy bHBfZG1hX2RpcmVjdF9kdW1wKTsNCi0JaWYgKHJldCkNCi0JCWdvdG8gaXNjX3RyeV9mbXRfZXJy Ow0KLQ0KLQlyZXQgPSBpc2NfdHJ5X2NvbmZpZ3VyZV9waXBlbGluZShpc2MpOw0KLQlpZiAocmV0 KQ0KLQkJZ290byBpc2NfdHJ5X2ZtdF9lcnI7DQotDQotCXY0bDJfZmlsbF9tYnVzX2Zvcm1hdCgm Zm9ybWF0LmZvcm1hdCwgcGl4Zm10LCBtYnVzX2NvZGUpOw0KLQlyZXQgPSB2NGwyX3N1YmRldl9j YWxsKGlzYy0+Y3VycmVudF9zdWJkZXYtPnNkLCBwYWQsIHNldF9mbXQsDQotCQkJICAgICAgICZw YWRfY2ZnLCAmZm9ybWF0KTsNCi0JaWYgKHJldCA8IDApDQotCQlnb3RvIGlzY190cnlfZm10X3N1 YmRldl9lcnI7DQotDQotCXY0bDJfZmlsbF9waXhfZm9ybWF0KHBpeGZtdCwgJmZvcm1hdC5mb3Jt YXQpOw0KLQ0KLQlwaXhmbXQtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOw0KLQlwaXhmbXQtPmJ5 dGVzcGVybGluZSA9IChwaXhmbXQtPndpZHRoICogaXNjLT50cnlfY29uZmlnLmJwcCkgPj4gMzsN Ci0JcGl4Zm10LT5zaXplaW1hZ2UgPSBwaXhmbXQtPmJ5dGVzcGVybGluZSAqIHBpeGZtdC0+aGVp Z2h0Ow0KLQ0KLQlpZiAoY29kZSkNCi0JCSpjb2RlID0gbWJ1c19jb2RlOw0KLQ0KLQlyZXR1cm4g MDsNCi0NCi1pc2NfdHJ5X2ZtdF9lcnI6DQotCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LCAiQ291 bGQgbm90IGZpbmQgYW55IHBvc3NpYmxlIGZvcm1hdCBmb3IgYSB3b3JraW5nIHBpcGVsaW5lXG4i KTsNCi1pc2NfdHJ5X2ZtdF9zdWJkZXZfZXJyOg0KLQltZW1zZXQoJmlzYy0+dHJ5X2NvbmZpZywg MCwgc2l6ZW9mKGlzYy0+dHJ5X2NvbmZpZykpOw0KLQ0KLQlyZXR1cm4gcmV0Ow0KLX0NCi0NCi1z dGF0aWMgaW50IGlzY19zZXRfZm10KHN0cnVjdCBpc2NfZGV2aWNlICppc2MsIHN0cnVjdCB2NGwy X2Zvcm1hdCAqZikNCi17DQotCXN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgZm9ybWF0ID0gew0K LQkJLndoaWNoID0gVjRMMl9TVUJERVZfRk9STUFUX0FDVElWRSwNCi0JfTsNCi0JdTMyIG1idXNf Y29kZSA9IDA7DQotCWludCByZXQ7DQotDQotCXJldCA9IGlzY190cnlfZm10KGlzYywgZiwgJm1i dXNfY29kZSk7DQotCWlmIChyZXQpDQotCQlyZXR1cm4gcmV0Ow0KLQ0KLQl2NGwyX2ZpbGxfbWJ1 c19mb3JtYXQoJmZvcm1hdC5mb3JtYXQsICZmLT5mbXQucGl4LCBtYnVzX2NvZGUpOw0KLQlyZXQg PSB2NGwyX3N1YmRldl9jYWxsKGlzYy0+Y3VycmVudF9zdWJkZXYtPnNkLCBwYWQsDQotCQkJICAg ICAgIHNldF9mbXQsIE5VTEwsICZmb3JtYXQpOw0KLQlpZiAocmV0IDwgMCkNCi0JCXJldHVybiBy ZXQ7DQotDQotCWlzYy0+Zm10ID0gKmY7DQotDQotCWlmIChpc2MtPnRyeV9jb25maWcuc2RfZm9y bWF0ICYmIGlzYy0+Y29uZmlnLnNkX2Zvcm1hdCAmJg0KLQkgICAgaXNjLT50cnlfY29uZmlnLnNk X2Zvcm1hdCAhPSBpc2MtPmNvbmZpZy5zZF9mb3JtYXQpIHsNCi0JCWlzYy0+Y3RybHMuaGlzdF9z dGF0ID0gSElTVF9JTklUOw0KLQkJaXNjX3Jlc2V0X2F3Yl9jdHJscyhpc2MpOw0KLQl9DQotCS8q IG1ha2UgdGhlIHRyeSBjb25maWd1cmF0aW9uIGFjdGl2ZSAqLw0KLQlpc2MtPmNvbmZpZyA9IGlz Yy0+dHJ5X2NvbmZpZzsNCi0NCi0JdjRsMl9kYmcoMSwgZGVidWcsICZpc2MtPnY0bDJfZGV2LCAi TmV3IElTQyBjb25maWd1cmF0aW9uIGluIHBsYWNlXG4iKTsNCi0NCi0JcmV0dXJuIDA7DQotfQ0K LQ0KLXN0YXRpYyBpbnQgaXNjX3NfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQg KnByaXYsDQotCQkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQ0KLXsNCi0Jc3RydWN0IGlz Y19kZXZpY2UgKmlzYyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7DQotDQotCWlmICh2YjJfaXNfc3Ry ZWFtaW5nKCZpc2MtPnZiMl92aWRxKSkNCi0JCXJldHVybiAtRUJVU1k7DQotDQotCXJldHVybiBp c2Nfc2V0X2ZtdChpc2MsIGYpOw0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY190cnlfZm10X3ZpZF9j YXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsDQotCQkJCXN0cnVjdCB2NGwyX2Zvcm1h dCAqZikNCi17DQotCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUp Ow0KLQ0KLQlyZXR1cm4gaXNjX3RyeV9mbXQoaXNjLCBmLCBOVUxMKTsNCi19DQotDQotc3RhdGlj IGludCBpc2NfZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCi0JCQkg ICBzdHJ1Y3QgdjRsMl9pbnB1dCAqaW5wKQ0KLXsNCi0JaWYgKGlucC0+aW5kZXggIT0gMCkNCi0J CXJldHVybiAtRUlOVkFMOw0KLQ0KLQlpbnAtPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJB Ow0KLQlpbnAtPnN0ZCA9IDA7DQotCXN0cnNjcHkoaW5wLT5uYW1lLCAiQ2FtZXJhIiwgc2l6ZW9m KGlucC0+bmFtZSkpOw0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGljIGludCBpc2NfZ19p bnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQ0KLXsN Ci0JKmkgPSAwOw0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGljIGludCBpc2Nfc19pbnB1 dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpDQotew0KLQlp ZiAoaSA+IDApDQotCQlyZXR1cm4gLUVJTlZBTDsNCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0 YXRpYyBpbnQgaXNjX2dfcGFybShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2 NGwyX3N0cmVhbXBhcm0gKmEpDQotew0KLQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmlkZW9f ZHJ2ZGF0YShmaWxlKTsNCi0NCi0JcmV0dXJuIHY0bDJfZ19wYXJtX2NhcCh2aWRlb19kZXZkYXRh KGZpbGUpLCBpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZCwgYSk7DQotfQ0KLQ0KLXN0YXRpYyBpbnQg aXNjX3NfcGFybShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX3N0cmVh bXBhcm0gKmEpDQotew0KLQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmlkZW9fZHJ2ZGF0YShm aWxlKTsNCi0NCi0JcmV0dXJuIHY0bDJfc19wYXJtX2NhcCh2aWRlb19kZXZkYXRhKGZpbGUpLCBp c2MtPmN1cnJlbnRfc3ViZGV2LT5zZCwgYSk7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX2VudW1f ZnJhbWVzaXplcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsDQotCQkJICAgICAgIHN0cnVj dCB2NGwyX2ZybXNpemVlbnVtICpmc2l6ZSkNCi17DQotCXN0cnVjdCBpc2NfZGV2aWNlICppc2Mg PSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KLQlzdHJ1Y3QgdjRsMl9zdWJkZXZfZnJhbWVfc2l6ZV9l bnVtIGZzZSA9IHsNCi0JCS5pbmRleCA9IGZzaXplLT5pbmRleCwNCi0JCS53aGljaCA9IFY0TDJf U1VCREVWX0ZPUk1BVF9BQ1RJVkUsDQotCX07DQotCWludCByZXQgPSAtRUlOVkFMOw0KLQlpbnQg aTsNCi0NCi0JZm9yIChpID0gMDsgaSA8IGlzYy0+bnVtX3VzZXJfZm9ybWF0czsgaSsrKQ0KLQkJ aWYgKGlzYy0+dXNlcl9mb3JtYXRzW2ldLT5mb3VyY2MgPT0gZnNpemUtPnBpeGVsX2Zvcm1hdCkN Ci0JCQlyZXQgPSAwOw0KLQ0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb250cm9sbGVy X2Zvcm1hdHMpOyBpKyspDQotCQlpZiAoY29udHJvbGxlcl9mb3JtYXRzW2ldLmZvdXJjYyA9PSBm c2l6ZS0+cGl4ZWxfZm9ybWF0KQ0KLQkJCXJldCA9IDA7DQotDQotCWlmIChyZXQpDQotCQlyZXR1 cm4gcmV0Ow0KLQ0KLQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKGlzYy0+Y3VycmVudF9zdWJkZXYt PnNkLCBwYWQsIGVudW1fZnJhbWVfc2l6ZSwNCi0JCQkgICAgICAgTlVMTCwgJmZzZSk7DQotCWlm IChyZXQpDQotCQlyZXR1cm4gcmV0Ow0KLQ0KLQlmc2UuY29kZSA9IGlzYy0+Y29uZmlnLnNkX2Zv cm1hdC0+bWJ1c19jb2RlOw0KLQ0KLQlmc2l6ZS0+dHlwZSA9IFY0TDJfRlJNU0laRV9UWVBFX0RJ U0NSRVRFOw0KLQlmc2l6ZS0+ZGlzY3JldGUud2lkdGggPSBmc2UubWF4X3dpZHRoOw0KLQlmc2l6 ZS0+ZGlzY3JldGUuaGVpZ2h0ID0gZnNlLm1heF9oZWlnaHQ7DQotDQotCXJldHVybiAwOw0KLX0N Ci0NCi1zdGF0aWMgaW50IGlzY19lbnVtX2ZyYW1laW50ZXJ2YWxzKHN0cnVjdCBmaWxlICpmaWxl LCB2b2lkICpmaCwNCi0JCQkJICAgIHN0cnVjdCB2NGwyX2ZybWl2YWxlbnVtICpmaXZhbCkNCi17 DQotCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KLQlzdHJ1 Y3QgdjRsMl9zdWJkZXZfZnJhbWVfaW50ZXJ2YWxfZW51bSBmaWUgPSB7DQotCQkuaW5kZXggPSBm aXZhbC0+aW5kZXgsDQotCQkud2lkdGggPSBmaXZhbC0+d2lkdGgsDQotCQkuaGVpZ2h0ID0gZml2 YWwtPmhlaWdodCwNCi0JCS53aGljaCA9IFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkUsDQotCX07 DQotCWludCByZXQgPSAtRUlOVkFMOw0KLQlpbnQgaTsNCi0NCi0JZm9yIChpID0gMDsgaSA8IGlz Yy0+bnVtX3VzZXJfZm9ybWF0czsgaSsrKQ0KLQkJaWYgKGlzYy0+dXNlcl9mb3JtYXRzW2ldLT5m b3VyY2MgPT0gZml2YWwtPnBpeGVsX2Zvcm1hdCkNCi0JCQlyZXQgPSAwOw0KLQ0KLQlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRShjb250cm9sbGVyX2Zvcm1hdHMpOyBpKyspDQotCQlpZiAoY29u dHJvbGxlcl9mb3JtYXRzW2ldLmZvdXJjYyA9PSBmaXZhbC0+cGl4ZWxfZm9ybWF0KQ0KLQkJCXJl dCA9IDA7DQotDQotCWlmIChyZXQpDQotCQlyZXR1cm4gcmV0Ow0KLQ0KLQlyZXQgPSB2NGwyX3N1 YmRldl9jYWxsKGlzYy0+Y3VycmVudF9zdWJkZXYtPnNkLCBwYWQsDQotCQkJICAgICAgIGVudW1f ZnJhbWVfaW50ZXJ2YWwsIE5VTEwsICZmaWUpOw0KLQlpZiAocmV0KQ0KLQkJcmV0dXJuIHJldDsN Ci0NCi0JZmllLmNvZGUgPSBpc2MtPmNvbmZpZy5zZF9mb3JtYXQtPm1idXNfY29kZTsNCi0JZml2 YWwtPnR5cGUgPSBWNEwyX0ZSTUlWQUxfVFlQRV9ESVNDUkVURTsNCi0JZml2YWwtPmRpc2NyZXRl ID0gZmllLmludGVydmFsOw0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGljIGNvbnN0IHN0 cnVjdCB2NGwyX2lvY3RsX29wcyBpc2NfaW9jdGxfb3BzID0gew0KLQkudmlkaW9jX3F1ZXJ5Y2Fw CQk9IGlzY19xdWVyeWNhcCwNCi0JLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwCT0gaXNjX2VudW1f Zm10X3ZpZF9jYXAsDQotCS52aWRpb2NfZ19mbXRfdmlkX2NhcAkJPSBpc2NfZ19mbXRfdmlkX2Nh cCwNCi0JLnZpZGlvY19zX2ZtdF92aWRfY2FwCQk9IGlzY19zX2ZtdF92aWRfY2FwLA0KLQkudmlk aW9jX3RyeV9mbXRfdmlkX2NhcAkJPSBpc2NfdHJ5X2ZtdF92aWRfY2FwLA0KLQ0KLQkudmlkaW9j X2VudW1faW5wdXQJCT0gaXNjX2VudW1faW5wdXQsDQotCS52aWRpb2NfZ19pbnB1dAkJCT0gaXNj X2dfaW5wdXQsDQotCS52aWRpb2Nfc19pbnB1dAkJCT0gaXNjX3NfaW5wdXQsDQotDQotCS52aWRp b2NfcmVxYnVmcwkJCT0gdmIyX2lvY3RsX3JlcWJ1ZnMsDQotCS52aWRpb2NfcXVlcnlidWYJCT0g dmIyX2lvY3RsX3F1ZXJ5YnVmLA0KLQkudmlkaW9jX3FidWYJCQk9IHZiMl9pb2N0bF9xYnVmLA0K LQkudmlkaW9jX2V4cGJ1ZgkJCT0gdmIyX2lvY3RsX2V4cGJ1ZiwNCi0JLnZpZGlvY19kcWJ1ZgkJ CT0gdmIyX2lvY3RsX2RxYnVmLA0KLQkudmlkaW9jX2NyZWF0ZV9idWZzCQk9IHZiMl9pb2N0bF9j cmVhdGVfYnVmcywNCi0JLnZpZGlvY19wcmVwYXJlX2J1ZgkJPSB2YjJfaW9jdGxfcHJlcGFyZV9i dWYsDQotCS52aWRpb2Nfc3RyZWFtb24JCT0gdmIyX2lvY3RsX3N0cmVhbW9uLA0KLQkudmlkaW9j X3N0cmVhbW9mZgkJPSB2YjJfaW9jdGxfc3RyZWFtb2ZmLA0KLQ0KLQkudmlkaW9jX2dfcGFybQkJ CT0gaXNjX2dfcGFybSwNCi0JLnZpZGlvY19zX3Bhcm0JCQk9IGlzY19zX3Bhcm0sDQotCS52aWRp b2NfZW51bV9mcmFtZXNpemVzCQk9IGlzY19lbnVtX2ZyYW1lc2l6ZXMsDQotCS52aWRpb2NfZW51 bV9mcmFtZWludGVydmFscwk9IGlzY19lbnVtX2ZyYW1laW50ZXJ2YWxzLA0KLQ0KLQkudmlkaW9j X2xvZ19zdGF0dXMJCT0gdjRsMl9jdHJsX2xvZ19zdGF0dXMsDQotCS52aWRpb2Nfc3Vic2NyaWJl X2V2ZW50CQk9IHY0bDJfY3RybF9zdWJzY3JpYmVfZXZlbnQsDQotCS52aWRpb2NfdW5zdWJzY3Jp YmVfZXZlbnQJPSB2NGwyX2V2ZW50X3Vuc3Vic2NyaWJlLA0KLX07DQotDQotc3RhdGljIGludCBp c2Nfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkNCi17DQotCXN0cnVjdCBpc2NfZGV2aWNlICppc2Mg PSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KLQlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaXNjLT5j dXJyZW50X3N1YmRldi0+c2Q7DQotCWludCByZXQ7DQotDQotCWlmIChtdXRleF9sb2NrX2ludGVy cnVwdGlibGUoJmlzYy0+bG9jaykpDQotCQlyZXR1cm4gLUVSRVNUQVJUU1lTOw0KLQ0KLQlyZXQg PSB2NGwyX2ZoX29wZW4oZmlsZSk7DQotCWlmIChyZXQgPCAwKQ0KLQkJZ290byB1bmxvY2s7DQot DQotCWlmICghdjRsMl9maF9pc19zaW5ndWxhcl9maWxlKGZpbGUpKQ0KLQkJZ290byB1bmxvY2s7 DQotDQotCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoc2QsIGNvcmUsIHNfcG93ZXIsIDEpOw0KLQlp ZiAocmV0IDwgMCAmJiByZXQgIT0gLUVOT0lPQ1RMQ01EKSB7DQotCQl2NGwyX2ZoX3JlbGVhc2Uo ZmlsZSk7DQotCQlnb3RvIHVubG9jazsNCi0JfQ0KLQ0KLQlyZXQgPSBpc2Nfc2V0X2ZtdChpc2Ms ICZpc2MtPmZtdCk7DQotCWlmIChyZXQpIHsNCi0JCXY0bDJfc3ViZGV2X2NhbGwoc2QsIGNvcmUs IHNfcG93ZXIsIDApOw0KLQkJdjRsMl9maF9yZWxlYXNlKGZpbGUpOw0KLQl9DQotDQotdW5sb2Nr Og0KLQltdXRleF91bmxvY2soJmlzYy0+bG9jayk7DQotCXJldHVybiByZXQ7DQotfQ0KLQ0KLXN0 YXRpYyBpbnQgaXNjX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpDQotew0KLQlzdHJ1Y3QgaXNj X2RldmljZSAqaXNjID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCi0Jc3RydWN0IHY0bDJfc3ViZGV2 ICpzZCA9IGlzYy0+Y3VycmVudF9zdWJkZXYtPnNkOw0KLQlib29sIGZoX3Npbmd1bGFyOw0KLQlp bnQgcmV0Ow0KLQ0KLQltdXRleF9sb2NrKCZpc2MtPmxvY2spOw0KLQ0KLQlmaF9zaW5ndWxhciA9 IHY0bDJfZmhfaXNfc2luZ3VsYXJfZmlsZShmaWxlKTsNCi0NCi0JcmV0ID0gX3ZiMl9mb3BfcmVs ZWFzZShmaWxlLCBOVUxMKTsNCi0NCi0JaWYgKGZoX3Npbmd1bGFyKQ0KLQkJdjRsMl9zdWJkZXZf Y2FsbChzZCwgY29yZSwgc19wb3dlciwgMCk7DQotDQotCW11dGV4X3VubG9jaygmaXNjLT5sb2Nr KTsNCi0NCi0JcmV0dXJuIHJldDsNCi19DQotDQotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2Zp bGVfb3BlcmF0aW9ucyBpc2NfZm9wcyA9IHsNCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLA0KLQku b3BlbgkJPSBpc2Nfb3BlbiwNCi0JLnJlbGVhc2UJPSBpc2NfcmVsZWFzZSwNCi0JLnVubG9ja2Vk X2lvY3RsCT0gdmlkZW9faW9jdGwyLA0KLQkucmVhZAkJPSB2YjJfZm9wX3JlYWQsDQotCS5tbWFw CQk9IHZiMl9mb3BfbW1hcCwNCi0JLnBvbGwJCT0gdmIyX2ZvcF9wb2xsLA0KLX07DQotDQotc3Rh dGljIGlycXJldHVybl90IGlzY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQ0KLXsN Ci0Jc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IChzdHJ1Y3QgaXNjX2RldmljZSAqKWRldl9pZDsN Ci0Jc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjLT5yZWdtYXA7DQotCXUzMiBpc2NfaW50c3Is IGlzY19pbnRtYXNrLCBwZW5kaW5nOw0KLQlpcnFyZXR1cm5fdCByZXQgPSBJUlFfTk9ORTsNCi0N Ci0JcmVnbWFwX3JlYWQocmVnbWFwLCBJU0NfSU5UU1IsICZpc2NfaW50c3IpOw0KLQlyZWdtYXBf cmVhZChyZWdtYXAsIElTQ19JTlRNQVNLLCAmaXNjX2ludG1hc2spOw0KLQ0KLQlwZW5kaW5nID0g aXNjX2ludHNyICYgaXNjX2ludG1hc2s7DQotDQotCWlmIChsaWtlbHkocGVuZGluZyAmIElTQ19J TlRfRERPTkUpKSB7DQotCQlzcGluX2xvY2soJmlzYy0+ZG1hX3F1ZXVlX2xvY2spOw0KLQkJaWYg KGlzYy0+Y3VyX2ZybSkgew0KLQkJCXN0cnVjdCB2YjJfdjRsMl9idWZmZXIgKnZidWYgPSAmaXNj LT5jdXJfZnJtLT52YjsNCi0JCQlzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIgPSAmdmJ1Zi0+dmIyX2J1 ZjsNCi0NCi0JCQl2Yi0+dGltZXN0YW1wID0ga3RpbWVfZ2V0X25zKCk7DQotCQkJdmJ1Zi0+c2Vx dWVuY2UgPSBpc2MtPnNlcXVlbmNlKys7DQotCQkJdmIyX2J1ZmZlcl9kb25lKHZiLCBWQjJfQlVG X1NUQVRFX0RPTkUpOw0KLQkJCWlzYy0+Y3VyX2ZybSA9IE5VTEw7DQotCQl9DQotDQotCQlpZiAo IWxpc3RfZW1wdHkoJmlzYy0+ZG1hX3F1ZXVlKSAmJiAhaXNjLT5zdG9wKSB7DQotCQkJaXNjLT5j dXJfZnJtID0gbGlzdF9maXJzdF9lbnRyeSgmaXNjLT5kbWFfcXVldWUsDQotCQkJCQkJICAgICBz dHJ1Y3QgaXNjX2J1ZmZlciwgbGlzdCk7DQotCQkJbGlzdF9kZWwoJmlzYy0+Y3VyX2ZybS0+bGlz dCk7DQotDQotCQkJaXNjX3N0YXJ0X2RtYShpc2MpOw0KLQkJfQ0KLQ0KLQkJaWYgKGlzYy0+c3Rv cCkNCi0JCQljb21wbGV0ZSgmaXNjLT5jb21wKTsNCi0NCi0JCXJldCA9IElSUV9IQU5ETEVEOw0K LQkJc3Bpbl91bmxvY2soJmlzYy0+ZG1hX3F1ZXVlX2xvY2spOw0KLQl9DQotDQotCWlmIChwZW5k aW5nICYgSVNDX0lOVF9ISVNET05FKSB7DQotCQlzY2hlZHVsZV93b3JrKCZpc2MtPmF3Yl93b3Jr KTsNCi0JCXJldCA9IElSUV9IQU5ETEVEOw0KLQl9DQotDQotCXJldHVybiByZXQ7DQotfQ0KLQ0K LXN0YXRpYyB2b2lkIGlzY19oaXN0X2NvdW50KHN0cnVjdCBpc2NfZGV2aWNlICppc2MsIHUzMiAq bWluLCB1MzIgKm1heCkNCi17DQotCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFw Ow0KLQlzdHJ1Y3QgaXNjX2N0cmxzICpjdHJscyA9ICZpc2MtPmN0cmxzOw0KLQl1MzIgKmhpc3Rf Y291bnQgPSAmY3RybHMtPmhpc3RfY291bnRbY3RybHMtPmhpc3RfaWRdOw0KLQl1MzIgKmhpc3Rf ZW50cnkgPSAmY3RybHMtPmhpc3RfZW50cnlbMF07DQotCXUzMiBpOw0KLQ0KLQkqbWluID0gMDsN Ci0JKm1heCA9IEhJU1RfRU5UUklFUzsNCi0NCi0JcmVnbWFwX2J1bGtfcmVhZChyZWdtYXAsIElT Q19ISVNfRU5UUlksIGhpc3RfZW50cnksIEhJU1RfRU5UUklFUyk7DQotDQotCSpoaXN0X2NvdW50 ID0gMDsNCi0JLyoNCi0JICogd2UgZGVsaWJlcmF0ZWx5IGlnbm9yZSB0aGUgZW5kIG9mIHRoZSBo aXN0b2dyYW0sDQotCSAqIHRoZSBtb3N0IHdoaXRlIHBpeGVscw0KLQkgKi8NCi0JZm9yIChpID0g MTsgaSA8IEhJU1RfRU5UUklFUzsgaSsrKSB7DQotCQlpZiAoKmhpc3RfZW50cnkgJiYgISptaW4p DQotCQkJKm1pbiA9IGk7DQotCQlpZiAoKmhpc3RfZW50cnkpDQotCQkJKm1heCA9IGk7DQotCQkq aGlzdF9jb3VudCArPSBpICogKCpoaXN0X2VudHJ5KyspOw0KLQl9DQotDQotCWlmICghKm1pbikN Ci0JCSptaW4gPSAxOw0KLX0NCi0NCi1zdGF0aWMgdm9pZCBpc2Nfd2JfdXBkYXRlKHN0cnVjdCBp c2NfY3RybHMgKmN0cmxzKQ0KLXsNCi0JdTMyICpoaXN0X2NvdW50ID0gJmN0cmxzLT5oaXN0X2Nv dW50WzBdOw0KLQl1MzIgYywgb2Zmc2V0WzRdOw0KLQl1NjQgYXZnID0gMDsNCi0JLyogV2UgY29t cHV0ZSB0d28gZ2FpbnMsIHN0cmV0Y2ggZ2FpbiBhbmQgZ3JleSB3b3JsZCBnYWluICovDQotCXUz MiBzX2dhaW5bNF0sIGd3X2dhaW5bNF07DQotDQotCS8qDQotCSAqIEFjY29yZGluZyB0byBHcmV5 IFdvcmxkLCB3ZSBuZWVkIHRvIHNldCBnYWlucyBmb3IgUi9CIHRvIG5vcm1hbGl6ZQ0KLQkgKiB0 aGVtIHRvd2FyZHMgdGhlIGdyZWVuIGNoYW5uZWwuDQotCSAqIFRodXMgd2Ugd2FudCB0byBrZWVw IEdyZWVuIGFzIGZpeGVkIGFuZCBhZGp1c3Qgb25seSBSZWQvQmx1ZQ0KLQkgKiBDb21wdXRlIHRo ZSBhdmVyYWdlIG9mIHRoZSBib3RoIGdyZWVuIGNoYW5uZWxzIGZpcnN0DQotCSAqLw0KLQlhdmcg PSAodTY0KWhpc3RfY291bnRbSVNDX0hJU19DRkdfTU9ERV9HUl0gKw0KLQkJKHU2NCloaXN0X2Nv dW50W0lTQ19ISVNfQ0ZHX01PREVfR0JdOw0KLQlhdmcgPj49IDE7DQotDQotCS8qIEdyZWVuIGhp c3RvZ3JhbSBpcyBudWxsLCBub3RoaW5nIHRvIGRvICovDQotCWlmICghYXZnKQ0KLQkJcmV0dXJu Ow0KLQ0KLQlmb3IgKGMgPSBJU0NfSElTX0NGR19NT0RFX0dSOyBjIDw9IElTQ19ISVNfQ0ZHX01P REVfQjsgYysrKSB7DQotCQkvKg0KLQkJICogdGhlIGNvbG9yIG9mZnNldCBpcyB0aGUgbWluaW11 bSB2YWx1ZSBvZiB0aGUgaGlzdG9ncmFtLg0KLQkJICogd2Ugc3RyZXRjaCB0aGlzIGNvbG9yIHRv IHRoZSBmdWxsIHJhbmdlIGJ5IHN1YnN0cmFjdGluZw0KLQkJICogdGhpcyB2YWx1ZSBmcm9tIHRo ZSBjb2xvciBjb21wb25lbnQuDQotCQkgKi8NCi0JCW9mZnNldFtjXSA9IGN0cmxzLT5oaXN0X21p bm1heFtjXVtISVNUX01JTl9JTkRFWF07DQotCQkvKg0KLQkJICogVGhlIG9mZnNldCBpcyBhbHdh eXMgYXQgbGVhc3QgMS4gSWYgdGhlIG9mZnNldCBpcyAxLCB3ZSBkbw0KLQkJICogbm90IG5lZWQg dG8gYWRqdXN0IGl0LCBzbyBvdXIgcmVzdWx0IG11c3QgYmUgemVyby4NCi0JCSAqIHRoZSBvZmZz ZXQgaXMgY29tcHV0ZWQgaW4gYSBoaXN0b2dyYW0gb24gOSBiaXRzICgwLi41MTIpDQotCQkgKiBi dXQgdGhlIG9mZnNldCBpbiByZWdpc3RlciBpcyBiYXNlZCBvbg0KLQkJICogMTIgYml0cyBwaXBl bGluZSAoMC4uNDA5NikuDQotCQkgKiB3ZSBuZWVkIHRvIHNoaWZ0IHdpdGggdGhlIDMgYml0cyB0 aGF0IHRoZSBoaXN0b2dyYW0gaXMNCi0JCSAqIGlnbm9yaW5nDQotCQkgKi8NCi0JCWN0cmxzLT5v ZmZzZXRbY10gPSAob2Zmc2V0W2NdIC0gMSkgPDwgMzsNCi0NCi0JCS8qIHRoZSBvZmZzZXQgaXMg dGhlbiB0YWtlbiBhbmQgY29udmVydGVkIHRvIDIncyBjb21wbGVtZW50cyAqLw0KLQkJaWYgKCFj dHJscy0+b2Zmc2V0W2NdKQ0KLQkJCWN0cmxzLT5vZmZzZXRbY10gPSBJU0NfV0JfT19aRVJPX1ZB TDsNCi0NCi0JCS8qDQotCQkgKiB0aGUgc3RyZXRjaCBnYWluIGlzIHRoZSB0b3RhbCBudW1iZXIg b2YgaGlzdG9ncmFtIGJpbnMNCi0JCSAqIGRpdmlkZWQgYnkgdGhlIGFjdHVhbCByYW5nZSBvZiBj b2xvciBjb21wb25lbnQgKE1heCAtIE1pbikNCi0JCSAqIElmIHdlIGNvbXB1dGUgZ2FpbiBsaWtl IHRoaXMsIHRoZSBhY3R1YWwgY29sb3IgY29tcG9uZW50DQotCQkgKiB3aWxsIGJlIHN0cmV0Y2hl ZCB0byB0aGUgZnVsbCBoaXN0b2dyYW0uDQotCQkgKiBXZSBuZWVkIHRvIHNoaWZ0IDkgYml0cyBm b3IgcHJlY2lzaW9uLCB3ZSBoYXZlIDkgYml0cyBmb3INCi0JCSAqIGRlY2ltYWxzDQotCQkgKi8N Ci0JCXNfZ2FpbltjXSA9IChISVNUX0VOVFJJRVMgPDwgOSkgLw0KLQkJCShjdHJscy0+aGlzdF9t aW5tYXhbY11bSElTVF9NQVhfSU5ERVhdIC0NCi0JCQljdHJscy0+aGlzdF9taW5tYXhbY11bSElT VF9NSU5fSU5ERVhdICsgMSk7DQotDQotCQkvKg0KLQkJICogTm93IHdlIGhhdmUgdG8gY29tcHV0 ZSB0aGUgZ2FpbiB3LnIudC4gdGhlIGF2ZXJhZ2UuDQotCQkgKiBBZGQvbG9zZSBnYWluIHRvIHRo ZSBjb21wb25lbnQgdG93YXJkcyB0aGUgYXZlcmFnZS4NCi0JCSAqIElmIGl0IGhhcHBlbnMgdGhh dCB0aGUgY29tcG9uZW50IGlzIHplcm8sIHVzZSB0aGUNCi0JCSAqIGZpeGVkIHBvaW50IHZhbHVl IDogMS4wIGdhaW4uDQotCQkgKi8NCi0JCWlmIChoaXN0X2NvdW50W2NdKQ0KLQkJCWd3X2dhaW5b Y10gPSBkaXZfdTY0KGF2ZyA8PCA5LCBoaXN0X2NvdW50W2NdKTsNCi0JCWVsc2UNCi0JCQlnd19n YWluW2NdID0gMSA8PCA5Ow0KLQ0KLQkJLyogbXVsdGlwbHkgYm90aCBnYWlucyBhbmQgYWRqdXN0 IGZvciBkZWNpbWFscyAqLw0KLQkJY3RybHMtPmdhaW5bY10gPSBzX2dhaW5bY10gKiBnd19nYWlu W2NdOw0KLQkJY3RybHMtPmdhaW5bY10gPj49IDk7DQotCX0NCi19DQotDQotc3RhdGljIHZvaWQg aXNjX2F3Yl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykNCi17DQotCXN0cnVjdCBpc2NfZGV2 aWNlICppc2MgPQ0KLQkJY29udGFpbmVyX29mKHcsIHN0cnVjdCBpc2NfZGV2aWNlLCBhd2Jfd29y ayk7DQotCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0KLQlzdHJ1Y3QgaXNj X2N0cmxzICpjdHJscyA9ICZpc2MtPmN0cmxzOw0KLQl1MzIgaGlzdF9pZCA9IGN0cmxzLT5oaXN0 X2lkOw0KLQl1MzIgYmF5c2VsOw0KLQl1bnNpZ25lZCBsb25nIGZsYWdzOw0KLQl1MzIgbWluLCBt YXg7DQotDQotCS8qIHN0cmVhbWluZyBpcyBub3QgYWN0aXZlIGFueW1vcmUgKi8NCi0JaWYgKGlz Yy0+c3RvcCkNCi0JCXJldHVybjsNCi0NCi0JaWYgKGN0cmxzLT5oaXN0X3N0YXQgIT0gSElTVF9F TkFCTEVEKQ0KLQkJcmV0dXJuOw0KLQ0KLQlpc2NfaGlzdF9jb3VudChpc2MsICZtaW4sICZtYXgp Ow0KLQljdHJscy0+aGlzdF9taW5tYXhbaGlzdF9pZF1bSElTVF9NSU5fSU5ERVhdID0gbWluOw0K LQljdHJscy0+aGlzdF9taW5tYXhbaGlzdF9pZF1bSElTVF9NQVhfSU5ERVhdID0gbWF4Ow0KLQ0K LQlpZiAoaGlzdF9pZCAhPSBJU0NfSElTX0NGR19NT0RFX0IpIHsNCi0JCWhpc3RfaWQrKzsNCi0J fSBlbHNlIHsNCi0JCWlzY193Yl91cGRhdGUoY3RybHMpOw0KLQkJaGlzdF9pZCA9IElTQ19ISVNf Q0ZHX01PREVfR1I7DQotCX0NCi0NCi0JY3RybHMtPmhpc3RfaWQgPSBoaXN0X2lkOw0KLQliYXlz ZWwgPSBpc2MtPmNvbmZpZy5zZF9mb3JtYXQtPmNmYV9iYXljZmcgPDwgSVNDX0hJU19DRkdfQkFZ U0VMX1NISUZUOw0KLQ0KLQkvKiBpZiBubyBtb3JlIGF1dG8gd2hpdGUgYmFsYW5jZSwgcmVzZXQg Y29udHJvbHMuICovDQotCWlmIChjdHJscy0+YXdiID09IElTQ19XQl9OT05FKQ0KLQkJaXNjX3Jl c2V0X2F3Yl9jdHJscyhpc2MpOw0KLQ0KLQlwbV9ydW50aW1lX2dldF9zeW5jKGlzYy0+ZGV2KTsN Ci0NCi0JLyoNCi0JICogb25seSB1cGRhdGUgaWYgd2UgaGF2ZSBhbGwgdGhlIHJlcXVpcmVkIGhp c3RvZ3JhbXMgYW5kIGNvbnRyb2xzDQotCSAqIGlmIGF3YiBoYXMgYmVlbiBkaXNhYmxlZCwgd2Ug bmVlZCB0byByZXNldCByZWdpc3RlcnMgYXMgd2VsbC4NCi0JICovDQotCWlmIChoaXN0X2lkID09 IElTQ19ISVNfQ0ZHX01PREVfR1IgfHwgY3RybHMtPmF3YiA9PSBJU0NfV0JfTk9ORSkgew0KLQkJ LyoNCi0JCSAqIEl0IG1heSBoYXBwZW4gdGhhdCBETUEgRG9uZSBJUlEgd2lsbCB0cmlnZ2VyIHdo aWxlIHdlIGFyZQ0KLQkJICogdXBkYXRpbmcgd2hpdGUgYmFsYW5jZSByZWdpc3RlcnMgaGVyZS4N Ci0JCSAqIEluIHRoYXQgY2FzZSwgb25seSBwYXJ0cyBvZiB0aGUgY29udHJvbHMgaGF2ZSBiZWVu IHVwZGF0ZWQuDQotCQkgKiBXZSBjYW4gYXZvaWQgdGhhdCBieSBsb2NraW5nIHRoZSBzZWN0aW9u Lg0KLQkJICovDQotCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXNjLT5hd2JfbG9jaywgZmxhZ3MpOw0K LQkJaXNjX3VwZGF0ZV9hd2JfY3RybHMoaXNjKTsNCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUo JmlzYy0+YXdiX2xvY2ssIGZsYWdzKTsNCi0NCi0JCS8qDQotCQkgKiBpZiB3ZSBhcmUgZG9pbmcg anVzdCB0aGUgb25lIHRpbWUgd2hpdGUgYmFsYW5jZSBhZGp1c3RtZW50LA0KLQkJICogd2UgYXJl IGJhc2ljYWxseSBkb25lLg0KLQkJICovDQotCQlpZiAoY3RybHMtPmF3YiA9PSBJU0NfV0JfT05F VElNRSkgew0KLQkJCXY0bDJfaW5mbygmaXNjLT52NGwyX2RldiwNCi0JCQkJICAiQ29tcGxldGVk IG9uZSB0aW1lIHdoaXRlLWJhbGFuY2UgYWRqdXN0bWVudC5cbiIpOw0KLQkJCWN0cmxzLT5hd2Ig PSBJU0NfV0JfTk9ORTsNCi0JCX0NCi0JfQ0KLQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfSElT X0NGRywgaGlzdF9pZCB8IGJheXNlbCB8IElTQ19ISVNfQ0ZHX1JBUik7DQotCWlzY191cGRhdGVf cHJvZmlsZShpc2MpOw0KLQkvKiBpZiBhd2IgaGFzIGJlZW4gZGlzYWJsZWQsIHdlIGRvbid0IG5l ZWQgdG8gc3RhcnQgYW5vdGhlciBoaXN0b2dyYW0gKi8NCi0JaWYgKGN0cmxzLT5hd2IpDQotCQly ZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfQ1RSTEVOLCBJU0NfQ1RSTF9ISVNSRVEpOw0KLQ0KLQlw bV9ydW50aW1lX3B1dF9zeW5jKGlzYy0+ZGV2KTsNCi19DQotDQotc3RhdGljIGludCBpc2Nfc19j dHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpDQotew0KLQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNj ID0gY29udGFpbmVyX29mKGN0cmwtPmhhbmRsZXIsDQotCQkJCQkgICAgIHN0cnVjdCBpc2NfZGV2 aWNlLCBjdHJscy5oYW5kbGVyKTsNCi0Jc3RydWN0IGlzY19jdHJscyAqY3RybHMgPSAmaXNjLT5j dHJsczsNCi0NCi0JaWYgKGN0cmwtPmZsYWdzICYgVjRMMl9DVFJMX0ZMQUdfSU5BQ1RJVkUpDQot CQlyZXR1cm4gMDsNCi0NCi0Jc3dpdGNoIChjdHJsLT5pZCkgew0KLQljYXNlIFY0TDJfQ0lEX0JS SUdIVE5FU1M6DQotCQljdHJscy0+YnJpZ2h0bmVzcyA9IGN0cmwtPnZhbCAmIElTQ19DQkNfQlJJ R0hUX01BU0s7DQotCQlicmVhazsNCi0JY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoNCi0JCWN0cmxz LT5jb250cmFzdCA9IGN0cmwtPnZhbCAmIElTQ19DQkNfQ09OVFJBU1RfTUFTSzsNCi0JCWJyZWFr Ow0KLQljYXNlIFY0TDJfQ0lEX0dBTU1BOg0KLQkJY3RybHMtPmdhbW1hX2luZGV4ID0gY3RybC0+ dmFsOw0KLQkJYnJlYWs7DQotCWNhc2UgVjRMMl9DSURfQVVUT19XSElURV9CQUxBTkNFOg0KLQkJ aWYgKGN0cmwtPnZhbCA9PSAxKQ0KLQkJCWN0cmxzLT5hd2IgPSBJU0NfV0JfQVVUTzsNCi0JCWVs c2UNCi0JCQljdHJscy0+YXdiID0gSVNDX1dCX05PTkU7DQotDQotCQkvKiB3ZSBkaWQgbm90IGNv bmZpZ3VyZSBJU0MgeWV0ICovDQotCQlpZiAoIWlzYy0+Y29uZmlnLnNkX2Zvcm1hdCkNCi0JCQli cmVhazsNCi0NCi0JCWlmIChjdHJscy0+aGlzdF9zdGF0ICE9IEhJU1RfRU5BQkxFRCkNCi0JCQlp c2NfcmVzZXRfYXdiX2N0cmxzKGlzYyk7DQotDQotCQlpZiAoaXNjLT5jdHJscy5hd2IgPT0gSVND X1dCX0FVVE8gJiYNCi0JCSAgICB2YjJfaXNfc3RyZWFtaW5nKCZpc2MtPnZiMl92aWRxKSAmJg0K LQkJICAgIElTQ19JU19GT1JNQVRfUkFXKGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2Rl KSkNCi0JCQlpc2Nfc2V0X2hpc3RvZ3JhbShpc2MsIHRydWUpOw0KLQ0KLQkJYnJlYWs7DQotCWNh c2UgVjRMMl9DSURfRE9fV0hJVEVfQkFMQU5DRToNCi0JCS8qIGlmIEFXQiBpcyBlbmFibGVkLCBk byBub3RoaW5nICovDQotCQlpZiAoY3RybHMtPmF3YiA9PSBJU0NfV0JfQVVUTykNCi0JCQlyZXR1 cm4gMDsNCi0NCi0JCWN0cmxzLT5hd2IgPSBJU0NfV0JfT05FVElNRTsNCi0JCWlzY19zZXRfaGlz dG9ncmFtKGlzYywgdHJ1ZSk7DQotCQl2NGwyX2RiZygxLCBkZWJ1ZywgJmlzYy0+djRsMl9kZXYs DQotCQkJICJPbmUgdGltZSB3aGl0ZS1iYWxhbmNlIHN0YXJ0ZWQuXG4iKTsNCi0JCWJyZWFrOw0K LQlkZWZhdWx0Og0KLQkJcmV0dXJuIC1FSU5WQUw7DQotCX0NCi0NCi0JcmV0dXJuIDA7DQotfQ0K LQ0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX29wcyBpc2NfY3RybF9vcHMgPSB7DQot CS5zX2N0cmwJPSBpc2Nfc19jdHJsLA0KLX07DQotDQotc3RhdGljIGludCBpc2NfY3RybF9pbml0 KHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQotew0KLQljb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX29w cyAqb3BzID0gJmlzY19jdHJsX29wczsNCi0Jc3RydWN0IGlzY19jdHJscyAqY3RybHMgPSAmaXNj LT5jdHJsczsNCi0Jc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoZGwgPSAmY3RybHMtPmhhbmRs ZXI7DQotCWludCByZXQ7DQotDQotCWN0cmxzLT5oaXN0X3N0YXQgPSBISVNUX0lOSVQ7DQotCWlz Y19yZXNldF9hd2JfY3RybHMoaXNjKTsNCi0NCi0JcmV0ID0gdjRsMl9jdHJsX2hhbmRsZXJfaW5p dChoZGwsIDUpOw0KLQlpZiAocmV0IDwgMCkNCi0JCXJldHVybiByZXQ7DQotDQotCWN0cmxzLT5i cmlnaHRuZXNzID0gMDsNCi0JY3RybHMtPmNvbnRyYXN0ID0gMjU2Ow0KLQ0KLQl2NGwyX2N0cmxf bmV3X3N0ZChoZGwsIG9wcywgVjRMMl9DSURfQlJJR0hUTkVTUywgLTEwMjQsIDEwMjMsIDEsIDAp Ow0KLQl2NGwyX2N0cmxfbmV3X3N0ZChoZGwsIG9wcywgVjRMMl9DSURfQ09OVFJBU1QsIC0yMDQ4 LCAyMDQ3LCAxLCAyNTYpOw0KLQl2NGwyX2N0cmxfbmV3X3N0ZChoZGwsIG9wcywgVjRMMl9DSURf R0FNTUEsIDAsIEdBTU1BX01BWCwgMSwgMik7DQotCXY0bDJfY3RybF9uZXdfc3RkKGhkbCwgb3Bz LCBWNEwyX0NJRF9BVVRPX1dISVRFX0JBTEFOQ0UsIDAsIDEsIDEsIDEpOw0KLQ0KLQkvKiBkb193 aGl0ZV9iYWxhbmNlIGlzIGEgYnV0dG9uLCBzbyBtaW4sbWF4LHN0ZXAsZGVmYXVsdCBhcmUgaWdu b3JlZCAqLw0KLQlpc2MtPmRvX3diX2N0cmwgPSB2NGwyX2N0cmxfbmV3X3N0ZChoZGwsIG9wcywg VjRMMl9DSURfRE9fV0hJVEVfQkFMQU5DRSwNCi0JCQkJCSAgICAwLCAwLCAwLCAwKTsNCi0NCi0J djRsMl9jdHJsX2FjdGl2YXRlKGlzYy0+ZG9fd2JfY3RybCwgZmFsc2UpOw0KLQ0KLQl2NGwyX2N0 cmxfaGFuZGxlcl9zZXR1cChoZGwpOw0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGljIGlu dCBpc2NfYXN5bmNfYm91bmQoc3RydWN0IHY0bDJfYXN5bmNfbm90aWZpZXIgKm5vdGlmaWVyLA0K LQkJCSAgICBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldiwNCi0JCQkgICAgc3RydWN0IHY0bDJf YXN5bmNfc3ViZGV2ICphc2QpDQotew0KLQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gY29udGFp bmVyX29mKG5vdGlmaWVyLT52NGwyX2RldiwNCi0JCQkJCSAgICAgIHN0cnVjdCBpc2NfZGV2aWNl LCB2NGwyX2Rldik7DQotCXN0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eSAqc3ViZGV2X2VudGl0eSA9 DQotCQljb250YWluZXJfb2Yobm90aWZpZXIsIHN0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eSwgbm90 aWZpZXIpOw0KLQ0KLQlpZiAodmlkZW9faXNfcmVnaXN0ZXJlZCgmaXNjLT52aWRlb19kZXYpKSB7 DQotCQl2NGwyX2VycigmaXNjLT52NGwyX2RldiwgIm9ubHkgc3VwcG9ydHMgb25lIHN1Yi1kZXZp Y2UuXG4iKTsNCi0JCXJldHVybiAtRUJVU1k7DQotCX0NCi0NCi0Jc3ViZGV2X2VudGl0eS0+c2Qg PSBzdWJkZXY7DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi1zdGF0aWMgdm9pZCBpc2NfYXN5bmNf dW5iaW5kKHN0cnVjdCB2NGwyX2FzeW5jX25vdGlmaWVyICpub3RpZmllciwNCi0JCQkgICAgICBz dHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldiwNCi0JCQkgICAgICBzdHJ1Y3QgdjRsMl9hc3luY19z dWJkZXYgKmFzZCkNCi17DQotCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSBjb250YWluZXJfb2Yo bm90aWZpZXItPnY0bDJfZGV2LA0KLQkJCQkJICAgICAgc3RydWN0IGlzY19kZXZpY2UsIHY0bDJf ZGV2KTsNCi0JY2FuY2VsX3dvcmtfc3luYygmaXNjLT5hd2Jfd29yayk7DQotCXZpZGVvX3VucmVn aXN0ZXJfZGV2aWNlKCZpc2MtPnZpZGVvX2Rldik7DQotCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUo JmlzYy0+Y3RybHMuaGFuZGxlcik7DQotfQ0KLQ0KLXN0YXRpYyBzdHJ1Y3QgaXNjX2Zvcm1hdCAq ZmluZF9mb3JtYXRfYnlfY29kZSh1bnNpZ25lZCBpbnQgY29kZSwgaW50ICppbmRleCkNCi17DQot CXN0cnVjdCBpc2NfZm9ybWF0ICpmbXQgPSAmZm9ybWF0c19saXN0WzBdOw0KLQl1bnNpZ25lZCBp bnQgaTsNCi0NCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZm9ybWF0c19saXN0KTsgaSsr KSB7DQotCQlpZiAoZm10LT5tYnVzX2NvZGUgPT0gY29kZSkgew0KLQkJCSppbmRleCA9IGk7DQot CQkJcmV0dXJuIGZtdDsNCi0JCX0NCi0NCi0JCWZtdCsrOw0KLQl9DQotDQotCXJldHVybiBOVUxM Ow0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY19mb3JtYXRzX2luaXQoc3RydWN0IGlzY19kZXZpY2Ug KmlzYykNCi17DQotCXN0cnVjdCBpc2NfZm9ybWF0ICpmbXQ7DQotCXN0cnVjdCB2NGwyX3N1YmRl diAqc3ViZGV2ID0gaXNjLT5jdXJyZW50X3N1YmRldi0+c2Q7DQotCXVuc2lnbmVkIGludCBudW1f Zm10cywgaSwgajsNCi0JdTMyIGxpc3Rfc2l6ZSA9IEFSUkFZX1NJWkUoZm9ybWF0c19saXN0KTsN Ci0Jc3RydWN0IHY0bDJfc3ViZGV2X21idXNfY29kZV9lbnVtIG1idXNfY29kZSA9IHsNCi0JCS53 aGljaCA9IFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkUsDQotCX07DQotDQotCW51bV9mbXRzID0g MDsNCi0Jd2hpbGUgKCF2NGwyX3N1YmRldl9jYWxsKHN1YmRldiwgcGFkLCBlbnVtX21idXNfY29k ZSwNCi0JICAgICAgIE5VTEwsICZtYnVzX2NvZGUpKSB7DQotCQltYnVzX2NvZGUuaW5kZXgrKzsN Ci0NCi0JCWZtdCA9IGZpbmRfZm9ybWF0X2J5X2NvZGUobWJ1c19jb2RlLmNvZGUsICZpKTsNCi0J CWlmICghZm10KSB7DQotCQkJdjRsMl93YXJuKCZpc2MtPnY0bDJfZGV2LCAiTWJ1cyBjb2RlICV4 IG5vdCBzdXBwb3J0ZWRcbiIsDQotCQkJCSAgbWJ1c19jb2RlLmNvZGUpOw0KLQkJCWNvbnRpbnVl Ow0KLQkJfQ0KLQ0KLQkJZm10LT5zZF9zdXBwb3J0ID0gdHJ1ZTsNCi0JCW51bV9mbXRzKys7DQot CX0NCi0NCi0JaWYgKCFudW1fZm10cykNCi0JCXJldHVybiAtRU5YSU87DQotDQotCWlzYy0+bnVt X3VzZXJfZm9ybWF0cyA9IG51bV9mbXRzOw0KLQlpc2MtPnVzZXJfZm9ybWF0cyA9IGRldm1fa2Nh bGxvYyhpc2MtPmRldiwNCi0JCQkJCSBudW1fZm10cywgc2l6ZW9mKCppc2MtPnVzZXJfZm9ybWF0 cyksDQotCQkJCQkgR0ZQX0tFUk5FTCk7DQotCWlmICghaXNjLT51c2VyX2Zvcm1hdHMpDQotCQly ZXR1cm4gLUVOT01FTTsNCi0NCi0JZm10ID0gJmZvcm1hdHNfbGlzdFswXTsNCi0JZm9yIChpID0g MCwgaiA9IDA7IGkgPCBsaXN0X3NpemU7IGkrKykgew0KLQkJaWYgKGZtdC0+c2Rfc3VwcG9ydCkN Ci0JCQlpc2MtPnVzZXJfZm9ybWF0c1tqKytdID0gZm10Ow0KLQkJZm10Kys7DQotCX0NCi0NCi0J cmV0dXJuIDA7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX3NldF9kZWZhdWx0X2ZtdChzdHJ1Y3Qg aXNjX2RldmljZSAqaXNjKQ0KLXsNCi0Jc3RydWN0IHY0bDJfZm9ybWF0IGYgPSB7DQotCQkudHlw ZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwNCi0JCS5mbXQucGl4ID0gew0KLQkJCS53 aWR0aAkJPSBWR0FfV0lEVEgsDQotCQkJLmhlaWdodAkJPSBWR0FfSEVJR0hULA0KLQkJCS5maWVs ZAkJPSBWNEwyX0ZJRUxEX05PTkUsDQotCQkJLnBpeGVsZm9ybWF0CT0gaXNjLT51c2VyX2Zvcm1h dHNbMF0tPmZvdXJjYywNCi0JCX0sDQotCX07DQotCWludCByZXQ7DQotDQotCXJldCA9IGlzY190 cnlfZm10KGlzYywgJmYsIE5VTEwpOw0KLQlpZiAocmV0KQ0KLQkJcmV0dXJuIHJldDsNCi0NCi0J aXNjLT5mbXQgPSBmOw0KLQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGljIGludCBpc2NfYXN5bmNf Y29tcGxldGUoc3RydWN0IHY0bDJfYXN5bmNfbm90aWZpZXIgKm5vdGlmaWVyKQ0KLXsNCi0Jc3Ry dWN0IGlzY19kZXZpY2UgKmlzYyA9IGNvbnRhaW5lcl9vZihub3RpZmllci0+djRsMl9kZXYsDQot CQkJCQkgICAgICBzdHJ1Y3QgaXNjX2RldmljZSwgdjRsMl9kZXYpOw0KLQlzdHJ1Y3QgdmlkZW9f ZGV2aWNlICp2ZGV2ID0gJmlzYy0+dmlkZW9fZGV2Ow0KLQlzdHJ1Y3QgdmIyX3F1ZXVlICpxID0g JmlzYy0+dmIyX3ZpZHE7DQotCWludCByZXQ7DQotDQotCUlOSVRfV09SSygmaXNjLT5hd2Jfd29y aywgaXNjX2F3Yl93b3JrKTsNCi0NCi0JcmV0ID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2 X25vZGVzKCZpc2MtPnY0bDJfZGV2KTsNCi0JaWYgKHJldCA8IDApIHsNCi0JCXY0bDJfZXJyKCZp c2MtPnY0bDJfZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHN1YmRldiBub2Rlc1xuIik7DQotCQly ZXR1cm4gcmV0Ow0KLQl9DQotDQotCWlzYy0+Y3VycmVudF9zdWJkZXYgPSBjb250YWluZXJfb2Yo bm90aWZpZXIsDQotCQkJCQkgICBzdHJ1Y3QgaXNjX3N1YmRldl9lbnRpdHksIG5vdGlmaWVyKTsN Ci0JbXV0ZXhfaW5pdCgmaXNjLT5sb2NrKTsNCi0JaW5pdF9jb21wbGV0aW9uKCZpc2MtPmNvbXAp Ow0KLQ0KLQkvKiBJbml0aWFsaXplIHZpZGVvYnVmMiBxdWV1ZSAqLw0KLQlxLT50eXBlCQkJPSBW NEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7DQotCXEtPmlvX21vZGVzCQk9IFZCMl9NTUFQIHwg VkIyX0RNQUJVRiB8IFZCMl9SRUFEOw0KLQlxLT5kcnZfcHJpdgkJPSBpc2M7DQotCXEtPmJ1Zl9z dHJ1Y3Rfc2l6ZQk9IHNpemVvZihzdHJ1Y3QgaXNjX2J1ZmZlcik7DQotCXEtPm9wcwkJCT0gJmlz Y192YjJfb3BzOw0KLQlxLT5tZW1fb3BzCQk9ICZ2YjJfZG1hX2NvbnRpZ19tZW1vcHM7DQotCXEt PnRpbWVzdGFtcF9mbGFncwk9IFY0TDJfQlVGX0ZMQUdfVElNRVNUQU1QX01PTk9UT05JQzsNCi0J cS0+bG9jawkJCT0gJmlzYy0+bG9jazsNCi0JcS0+bWluX2J1ZmZlcnNfbmVlZGVkCT0gMTsNCi0J cS0+ZGV2CQkJPSBpc2MtPmRldjsNCi0NCi0JcmV0ID0gdmIyX3F1ZXVlX2luaXQocSk7DQotCWlm IChyZXQgPCAwKSB7DQotCQl2NGwyX2VycigmaXNjLT52NGwyX2RldiwNCi0JCQkgInZiMl9xdWV1 ZV9pbml0KCkgZmFpbGVkOiAlZFxuIiwgcmV0KTsNCi0JCXJldHVybiByZXQ7DQotCX0NCi0NCi0J LyogSW5pdCB2aWRlbyBkbWEgcXVldWVzICovDQotCUlOSVRfTElTVF9IRUFEKCZpc2MtPmRtYV9x dWV1ZSk7DQotCXNwaW5fbG9ja19pbml0KCZpc2MtPmRtYV9xdWV1ZV9sb2NrKTsNCi0Jc3Bpbl9s b2NrX2luaXQoJmlzYy0+YXdiX2xvY2spOw0KLQ0KLQlyZXQgPSBpc2NfZm9ybWF0c19pbml0KGlz Yyk7DQotCWlmIChyZXQgPCAwKSB7DQotCQl2NGwyX2VycigmaXNjLT52NGwyX2RldiwNCi0JCQkg IkluaXQgZm9ybWF0IGZhaWxlZDogJWRcbiIsIHJldCk7DQotCQlyZXR1cm4gcmV0Ow0KLQl9DQot DQotCXJldCA9IGlzY19zZXRfZGVmYXVsdF9mbXQoaXNjKTsNCi0JaWYgKHJldCkgew0KLQkJdjRs Ml9lcnIoJmlzYy0+djRsMl9kZXYsICJDb3VsZCBub3Qgc2V0IGRlZmF1bHQgZm9ybWF0XG4iKTsN Ci0JCXJldHVybiByZXQ7DQotCX0NCi0NCi0JcmV0ID0gaXNjX2N0cmxfaW5pdChpc2MpOw0KLQlp ZiAocmV0KSB7DQotCQl2NGwyX2VycigmaXNjLT52NGwyX2RldiwgIkluaXQgaXNjIGN0cm9scyBm YWlsZWQ6ICVkXG4iLCByZXQpOw0KLQkJcmV0dXJuIHJldDsNCi0JfQ0KLQ0KLQkvKiBSZWdpc3Rl ciB2aWRlbyBkZXZpY2UgKi8NCi0Jc3Ryc2NweSh2ZGV2LT5uYW1lLCBBVE1FTF9JU0NfTkFNRSwg c2l6ZW9mKHZkZXYtPm5hbWUpKTsNCi0JdmRldi0+cmVsZWFzZQkJPSB2aWRlb19kZXZpY2VfcmVs ZWFzZV9lbXB0eTsNCi0JdmRldi0+Zm9wcwkJPSAmaXNjX2ZvcHM7DQotCXZkZXYtPmlvY3RsX29w cwkJPSAmaXNjX2lvY3RsX29wczsNCi0JdmRldi0+djRsMl9kZXYJCT0gJmlzYy0+djRsMl9kZXY7 DQotCXZkZXYtPnZmbF9kaXIJCT0gVkZMX0RJUl9SWDsNCi0JdmRldi0+cXVldWUJCT0gcTsNCi0J dmRldi0+bG9jawkJPSAmaXNjLT5sb2NrOw0KLQl2ZGV2LT5jdHJsX2hhbmRsZXIJPSAmaXNjLT5j dHJscy5oYW5kbGVyOw0KLQl2ZGV2LT5kZXZpY2VfY2Fwcwk9IFY0TDJfQ0FQX1NUUkVBTUlORyB8 IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkU7DQotCXZpZGVvX3NldF9kcnZkYXRhKHZkZXYsIGlzYyk7 DQotDQotCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh2ZGV2LCBWRkxfVFlQRV9HUkFCQkVS LCAtMSk7DQotCWlmIChyZXQgPCAwKSB7DQotCQl2NGwyX2VycigmaXNjLT52NGwyX2RldiwNCi0J CQkgInZpZGVvX3JlZ2lzdGVyX2RldmljZSBmYWlsZWQ6ICVkXG4iLCByZXQpOw0KLQkJcmV0dXJu IHJldDsNCi0JfQ0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGljIGNvbnN0IHN0cnVjdCB2 NGwyX2FzeW5jX25vdGlmaWVyX29wZXJhdGlvbnMgaXNjX2FzeW5jX29wcyA9IHsNCi0JLmJvdW5k ID0gaXNjX2FzeW5jX2JvdW5kLA0KLQkudW5iaW5kID0gaXNjX2FzeW5jX3VuYmluZCwNCi0JLmNv bXBsZXRlID0gaXNjX2FzeW5jX2NvbXBsZXRlLA0KLX07DQotDQotc3RhdGljIHZvaWQgaXNjX3N1 YmRldl9jbGVhbnVwKHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQotew0KLQlzdHJ1Y3QgaXNjX3N1 YmRldl9lbnRpdHkgKnN1YmRldl9lbnRpdHk7DQotDQotCWxpc3RfZm9yX2VhY2hfZW50cnkoc3Vi ZGV2X2VudGl0eSwgJmlzYy0+c3ViZGV2X2VudGl0aWVzLCBsaXN0KSB7DQotCQl2NGwyX2FzeW5j X25vdGlmaWVyX3VucmVnaXN0ZXIoJnN1YmRldl9lbnRpdHktPm5vdGlmaWVyKTsNCi0JCXY0bDJf YXN5bmNfbm90aWZpZXJfY2xlYW51cCgmc3ViZGV2X2VudGl0eS0+bm90aWZpZXIpOw0KLQl9DQor I2RlZmluZSBJU0NfTUFYX1NVUFBPUlRfV0lEVEggICAyNTkyDQorI2RlZmluZSBJU0NfTUFYX1NV UFBPUlRfSEVJR0hUICAxOTQ0DQogDQotCUlOSVRfTElTVF9IRUFEKCZpc2MtPnN1YmRldl9lbnRp dGllcyk7DQotfQ0KKyNkZWZpbmUgSVNDX0NMS19NQVhfRElWCQkyNTUNCiANCi1zdGF0aWMgaW50 IGlzY19waXBlbGluZV9pbml0KHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQotew0KLQlzdHJ1Y3Qg ZGV2aWNlICpkZXYgPSBpc2MtPmRldjsNCi0Jc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjLT5y ZWdtYXA7DQotCXN0cnVjdCByZWdtYXBfZmllbGQgKnJlZ3M7DQotCXVuc2lnbmVkIGludCBpOw0K LQ0KLQkvKiBXQi0tPkNGQS0tPkNDLS0+R0FNLS0+Q1NDLS0+Q0JDLS0+U1VCNDIyLS0+U1VCNDIw ICovDQotCWNvbnN0IHN0cnVjdCByZWdfZmllbGQgcmVnZmllbGRzW0lTQ19QSVBFX0xJTkVfTk9E RV9OVU1dID0gew0KLQkJUkVHX0ZJRUxEKElTQ19XQl9DVFJMLCAwLCAwKSwNCi0JCVJFR19GSUVM RChJU0NfQ0ZBX0NUUkwsIDAsIDApLA0KLQkJUkVHX0ZJRUxEKElTQ19DQ19DVFJMLCAwLCAwKSwN Ci0JCVJFR19GSUVMRChJU0NfR0FNX0NUUkwsIDAsIDApLA0KLQkJUkVHX0ZJRUxEKElTQ19HQU1f Q1RSTCwgMSwgMSksDQotCQlSRUdfRklFTEQoSVNDX0dBTV9DVFJMLCAyLCAyKSwNCi0JCVJFR19G SUVMRChJU0NfR0FNX0NUUkwsIDMsIDMpLA0KLQkJUkVHX0ZJRUxEKElTQ19DU0NfQ1RSTCwgMCwg MCksDQotCQlSRUdfRklFTEQoSVNDX0NCQ19DVFJMLCAwLCAwKSwNCi0JCVJFR19GSUVMRChJU0Nf U1VCNDIyX0NUUkwsIDAsIDApLA0KLQkJUkVHX0ZJRUxEKElTQ19TVUI0MjBfQ1RSTCwgMCwgMCks DQotCX07DQotDQotCWZvciAoaSA9IDA7IGkgPCBJU0NfUElQRV9MSU5FX05PREVfTlVNOyBpKysp IHsNCi0JCXJlZ3MgPSBkZXZtX3JlZ21hcF9maWVsZF9hbGxvYyhkZXYsIHJlZ21hcCwgcmVnZmll bGRzW2ldKTsNCi0JCWlmIChJU19FUlIocmVncykpDQotCQkJcmV0dXJuIFBUUl9FUlIocmVncyk7 DQotDQotCQlpc2MtPnBpcGVsaW5lW2ldID0gIHJlZ3M7DQotCX0NCit1bnNpZ25lZCBpbnQgZGVi dWc7DQorbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOw0KK01PRFVMRV9QQVJNX0RFU0Mo ZGVidWcsICJkZWJ1ZyBsZXZlbCAoMC0yKSIpOw0KIA0KLQlyZXR1cm4gMDsNCi19DQordW5zaWdu ZWQgaW50IHNlbnNvcl9wcmVmZXJyZWQgPSAxOw0KK21vZHVsZV9wYXJhbShzZW5zb3JfcHJlZmVy cmVkLCB1aW50LCAwNjQ0KTsNCitNT0RVTEVfUEFSTV9ERVNDKHNlbnNvcl9wcmVmZXJyZWQsDQor CQkgIlNlbnNvciBpcyBwcmVmZXJyZWQgdG8gb3V0cHV0IHRoZSBzcGVjaWZpZWQgZm9ybWF0ICgx LW9uIDAtb2ZmKSwgZGVmYXVsdCAxIik7DQogDQogc3RhdGljIGludCBpc2NfcGFyc2VfZHQoc3Ry dWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KIHsNCkBAIC0yNDEyLDE1 ICsxNDAsNiBAQCBzdGF0aWMgaW50IGlzY19wYXJzZV9kdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0 cnVjdCBpc2NfZGV2aWNlICppc2MpDQogCXJldHVybiByZXQ7DQogfQ0KIA0KLS8qIHJlZ21hcCBj b25maWd1cmF0aW9uICovDQotI2RlZmluZSBBVE1FTF9JU0NfUkVHX01BWCAgICAweGJmYw0KLXN0 YXRpYyBjb25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBpc2NfcmVnbWFwX2NvbmZpZyA9IHsNCi0J LnJlZ19iaXRzICAgICAgID0gMzIsDQotCS5yZWdfc3RyaWRlICAgICA9IDQsDQotCS52YWxfYml0 cyAgICAgICA9IDMyLA0KLQkubWF4X3JlZ2lzdGVyCT0gQVRNRUxfSVNDX1JFR19NQVgsDQotfTsN Ci0NCiBzdGF0aWMgaW50IGF0bWVsX2lzY19wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpw ZGV2KQ0KIHsNCiAJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsNCmRpZmYgLS1naXQg YS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVsLWlzYy5oIGIvZHJpdmVycy9tZWRp YS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1pc2MuaA0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4 IDAwMDAwMDAuLjFlMjg1ZjENCi0tLSAvZGV2L251bGwNCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxh dGZvcm0vYXRtZWwvYXRtZWwtaXNjLmgNCkBAIC0wLDAgKzEsMjEwIEBADQorLyogU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8NCisvKg0KKyAqIE1pY3JvY2hpcCBJbWFnZSBTZW5z b3IgQ29udHJvbGxlciAoSVNDKSBkcml2ZXIgaGVhZGVyIGZpbGUNCisgKg0KKyAqIENvcHlyaWdo dCAoQykgMjAxNi0yMDE5IE1pY3JvY2hpcCBUZWNobm9sb2d5LCBJbmMuDQorICoNCisgKiBBdXRo b3I6IFNvbmdqdW4gV3UgPHNvbmdqdW4ud3VAbWljcm9jaGlwLmNvbT4NCisgKiBBdXRob3I6IEV1 Z2VuIEhyaXN0ZXYgPGV1Z2VuLmhyaXN0ZXZAbWljcm9jaGlwLmNvbT4NCisgKg0KKyAqLw0KKyNp Zm5kZWYgX0FUTUVMX0lTQ19IXw0KKw0KKyNkZWZpbmUgSVNDX01BWF9TVVBQT1JUX1dJRFRIICAg MjU5Mg0KKyNkZWZpbmUgSVNDX01BWF9TVVBQT1JUX0hFSUdIVCAgMTk0NA0KKw0KKyNkZWZpbmUg SVNDX0NMS19NQVhfRElWCQkyNTUNCisNCitlbnVtIGlzY19jbGtfaWQgew0KKwlJU0NfSVNQQ0sg PSAwLA0KKwlJU0NfTUNLID0gMSwNCit9Ow0KKw0KK3N0cnVjdCBpc2NfY2xrIHsNCisJc3RydWN0 IGNsa19odyAgIGh3Ow0KKwlzdHJ1Y3QgY2xrICAgICAgKmNsazsNCisJc3RydWN0IHJlZ21hcCAg ICpyZWdtYXA7DQorCXNwaW5sb2NrX3QJbG9jazsNCisJdTgJCWlkOw0KKwl1OAkJcGFyZW50X2lk Ow0KKwl1MzIJCWRpdjsNCisJc3RydWN0IGRldmljZQkqZGV2Ow0KK307DQorDQorI2RlZmluZSB0 b19pc2NfY2xrKGh3KSBjb250YWluZXJfb2YoaHcsIHN0cnVjdCBpc2NfY2xrLCBodykNCisNCitz dHJ1Y3QgaXNjX2J1ZmZlciB7DQorCXN0cnVjdCB2YjJfdjRsMl9idWZmZXIgIHZiOw0KKwlzdHJ1 Y3QgbGlzdF9oZWFkCWxpc3Q7DQorfTsNCisNCitzdHJ1Y3QgaXNjX3N1YmRldl9lbnRpdHkgew0K KwlzdHJ1Y3QgdjRsMl9zdWJkZXYJCSpzZDsNCisJc3RydWN0IHY0bDJfYXN5bmNfc3ViZGV2CSph c2Q7DQorCXN0cnVjdCB2NGwyX2FzeW5jX25vdGlmaWVyICAgICAgbm90aWZpZXI7DQorDQorCXUz MiBwZmVfY2ZnMDsNCisNCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0Ow0KK307DQorDQorLyoNCisg KiBzdHJ1Y3QgaXNjX2Zvcm1hdCAtIElTQyBtZWRpYSBidXMgZm9ybWF0IGluZm9ybWF0aW9uDQor CQkJVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIElT Qw0KKwkJCWFuZCB0aGUgc2Vuc29yLiBJdCdzIHRoZSBpbnB1dCBmb3JtYXQgcmVjZWl2ZWQgYnkN CisJCQl0aGUgSVNDLg0KKyAqIEBmb3VyY2M6CQlGb3VyY2MgY29kZSBmb3IgdGhpcyBmb3JtYXQN CisgKiBAbWJ1c19jb2RlOgkJVjRMMiBtZWRpYSBidXMgZm9ybWF0IGNvZGUuDQorICogQGNmYV9i YXljZmc6CQlJZiB0aGlzIGZvcm1hdCBpcyBSQVcgQkFZRVIsIGluZGljYXRlIHRoZSB0eXBlIG9m IGJheWVyLg0KKwkJCXRoaXMgaXMgZWl0aGVyIEJHQkcsIFJHUkcsIGV0Yy4NCisgKiBAcGZlX2Nm ZzBfYnBzOglOdW1iZXIgb2YgaGFyZHdhcmUgZGF0YSBsaW5lcyBjb25uZWN0ZWQgdG8gdGhlIElT Qw0KKyAqLw0KKw0KK3N0cnVjdCBpc2NfZm9ybWF0IHsNCisJdTMyCWZvdXJjYzsNCisJdTMyCW1i dXNfY29kZTsNCisJdTMyCWNmYV9iYXljZmc7DQorDQorCWJvb2wJc2Rfc3VwcG9ydDsNCisJdTMy CXBmZV9jZmcwX2JwczsNCit9Ow0KKw0KKy8qIFBpcGVsaW5lIGJpdG1hcCAqLw0KKyNkZWZpbmUg V0JfRU5BQkxFCUJJVCgwKQ0KKyNkZWZpbmUgQ0ZBX0VOQUJMRQlCSVQoMSkNCisjZGVmaW5lIEND X0VOQUJMRQlCSVQoMikNCisjZGVmaW5lIEdBTV9FTkFCTEUJQklUKDMpDQorI2RlZmluZSBHQU1f QkVOQUJMRQlCSVQoNCkNCisjZGVmaW5lIEdBTV9HRU5BQkxFCUJJVCg1KQ0KKyNkZWZpbmUgR0FN X1JFTkFCTEUJQklUKDYpDQorI2RlZmluZSBDU0NfRU5BQkxFCUJJVCg3KQ0KKyNkZWZpbmUgQ0JD X0VOQUJMRQlCSVQoOCkNCisjZGVmaW5lIFNVQjQyMl9FTkFCTEUJQklUKDkpDQorI2RlZmluZSBT VUI0MjBfRU5BQkxFCUJJVCgxMCkNCisNCisjZGVmaW5lIEdBTV9FTkFCTEVTCShHQU1fUkVOQUJM RSB8IEdBTV9HRU5BQkxFIHwgR0FNX0JFTkFCTEUgfCBHQU1fRU5BQkxFKQ0KKw0KKy8qDQorICog c3RydWN0IGZtdF9jb25maWcgLSBJU0MgZm9ybWF0IGNvbmZpZ3VyYXRpb24gYW5kIGludGVybmFs IHBpcGVsaW5lDQorCQkJVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyB0aGUgaW50ZXJuYWwgY29u ZmlndXJhdGlvbg0KKwkJCW9mIHRoZSBJU0MuDQorCQkJSXQgYWxzbyBob2xkcyB0aGUgZm9ybWF0 IHRoYXQgSVNDIHdpbGwgcHJlc2VudCB0byB2NGwyLg0KKyAqIEBzZF9mb3JtYXQ6CQlQb2ludGVy IHRvIGFuIGlzY19mb3JtYXQgc3RydWN0IHRoYXQgaG9sZHMgdGhlIHNlbnNvcg0KKwkJCWNvbmZp Z3VyYXRpb24uDQorICogQGZvdXJjYzoJCUZvdXJjYyBjb2RlIGZvciB0aGlzIGZvcm1hdC4NCisg KiBAYnBwOgkJQnl0ZXMgcGVyIHBpeGVsIGluIHRoZSBjdXJyZW50IGZvcm1hdC4NCisgKiBAcmxw X2NmZ19tb2RlOglDb25maWd1cmF0aW9uIG9mIHRoZSBSTFAgKHJvdW5kaW5nLCBsaW1pdGluZyBw YWNrYWdpbmcpDQorICogQGRjZmdfaW1vZGU6CQlDb25maWd1cmF0aW9uIG9mIHRoZSBpbnB1dCBv ZiB0aGUgRE1BIG1vZHVsZQ0KKyAqIEBkY3RybF9kdmlldzoJQ29uZmlndXJhdGlvbiBvZiB0aGUg b3V0cHV0IG9mIHRoZSBETUEgbW9kdWxlDQorICogQGJpdHNfcGlwZWxpbmU6CUNvbmZpZ3VyYXRp b24gb2YgdGhlIHBpcGVsaW5lLCB3aGljaCBtb2R1bGVzIGFyZSBlbmFibGVkDQorICovDQorc3Ry dWN0IGZtdF9jb25maWcgew0KKwlzdHJ1Y3QgaXNjX2Zvcm1hdAkqc2RfZm9ybWF0Ow0KKw0KKwl1 MzIJCQlmb3VyY2M7DQorCXU4CQkJYnBwOw0KKw0KKwl1MzIJCQlybHBfY2ZnX21vZGU7DQorCXUz MgkJCWRjZmdfaW1vZGU7DQorCXUzMgkJCWRjdHJsX2R2aWV3Ow0KKw0KKwl1MzIJCQliaXRzX3Bp cGVsaW5lOw0KK307DQorDQorI2RlZmluZSBISVNUX0VOVFJJRVMJCTUxMg0KKyNkZWZpbmUgSElT VF9CQVlFUgkJKElTQ19ISVNfQ0ZHX01PREVfQiArIDEpDQorDQorZW51bXsNCisJSElTVF9JTklU ID0gMCwNCisJSElTVF9FTkFCTEVELA0KKwlISVNUX0RJU0FCTEVELA0KK307DQorDQorc3RydWN0 IGlzY19jdHJscyB7DQorCXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciBoYW5kbGVyOw0KKw0KKwl1 MzIgYnJpZ2h0bmVzczsNCisJdTMyIGNvbnRyYXN0Ow0KKwl1OCBnYW1tYV9pbmRleDsNCisjZGVm aW5lIElTQ19XQl9OT05FCTANCisjZGVmaW5lIElTQ19XQl9BVVRPCTENCisjZGVmaW5lIElTQ19X Ql9PTkVUSU1FCTINCisJdTggYXdiOw0KKw0KKwkvKiBvbmUgZm9yIGVhY2ggY29tcG9uZW50IDog R1IsIFIsIEdCLCBCICovDQorCXUzMiBnYWluW0hJU1RfQkFZRVJdOw0KKwl1MzIgb2Zmc2V0W0hJ U1RfQkFZRVJdOw0KKw0KKwl1MzIgaGlzdF9lbnRyeVtISVNUX0VOVFJJRVNdOw0KKwl1MzIgaGlz dF9jb3VudFtISVNUX0JBWUVSXTsNCisJdTggaGlzdF9pZDsNCisJdTggaGlzdF9zdGF0Ow0KKyNk ZWZpbmUgSElTVF9NSU5fSU5ERVgJCTANCisjZGVmaW5lIEhJU1RfTUFYX0lOREVYCQkxDQorCXUz MiBoaXN0X21pbm1heFtISVNUX0JBWUVSXVsyXTsNCit9Ow0KKw0KKyNkZWZpbmUgSVNDX1BJUEVf TElORV9OT0RFX05VTQkxMQ0KKw0KK3N0cnVjdCBpc2NfZGV2aWNlIHsNCisJc3RydWN0IHJlZ21h cAkJKnJlZ21hcDsNCisJc3RydWN0IGNsawkJKmhjbG9jazsNCisJc3RydWN0IGNsawkJKmlzcGNr Ow0KKwlzdHJ1Y3QgaXNjX2NsawkJaXNjX2Nsa3NbMl07DQorDQorCXN0cnVjdCBkZXZpY2UJCSpk ZXY7DQorCXN0cnVjdCB2NGwyX2RldmljZQl2NGwyX2RldjsNCisJc3RydWN0IHZpZGVvX2Rldmlj ZQl2aWRlb19kZXY7DQorDQorCXN0cnVjdCB2YjJfcXVldWUJdmIyX3ZpZHE7DQorCXNwaW5sb2Nr X3QJCWRtYV9xdWV1ZV9sb2NrOw0KKwlzdHJ1Y3QgbGlzdF9oZWFkCWRtYV9xdWV1ZTsNCisJc3Ry dWN0IGlzY19idWZmZXIJKmN1cl9mcm07DQorCXVuc2lnbmVkIGludAkJc2VxdWVuY2U7DQorCWJv b2wJCQlzdG9wOw0KKwlzdHJ1Y3QgY29tcGxldGlvbgljb21wOw0KKw0KKwlzdHJ1Y3QgdjRsMl9m b3JtYXQJZm10Ow0KKwlzdHJ1Y3QgaXNjX2Zvcm1hdAkqKnVzZXJfZm9ybWF0czsNCisJdW5zaWdu ZWQgaW50CQludW1fdXNlcl9mb3JtYXRzOw0KKw0KKwlzdHJ1Y3QgZm10X2NvbmZpZwljb25maWc7 DQorCXN0cnVjdCBmbXRfY29uZmlnCXRyeV9jb25maWc7DQorDQorCXN0cnVjdCBpc2NfY3RybHMJ Y3RybHM7DQorCXN0cnVjdCB2NGwyX2N0cmwJKmRvX3diX2N0cmw7DQorCXN0cnVjdCB3b3JrX3N0 cnVjdAlhd2Jfd29yazsNCisNCisJc3RydWN0IG11dGV4CQlsb2NrOw0KKwlzcGlubG9ja190CQlh d2JfbG9jazsNCisNCisJc3RydWN0IHJlZ21hcF9maWVsZAkqcGlwZWxpbmVbSVNDX1BJUEVfTElO RV9OT0RFX05VTV07DQorDQorCXN0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eQkqY3VycmVudF9zdWJk ZXY7DQorCXN0cnVjdCBsaXN0X2hlYWQJCXN1YmRldl9lbnRpdGllczsNCit9Ow0KKw0KKyNkZWZp bmUgR0FNTUFfTUFYCTINCisjZGVmaW5lIEdBTU1BX0VOVFJJRVMJNjQNCisNCitleHRlcm4gc3Ry dWN0IGlzY19mb3JtYXQgZm9ybWF0c19saXN0W107DQorZXh0ZXJuIHN0cnVjdCBpc2NfZm9ybWF0 IGNvbnRyb2xsZXJfZm9ybWF0c1tdOw0KK2V4dGVybiBjb25zdCB1MzIgaXNjX2dhbW1hX3RhYmxl W0dBTU1BX01BWCArIDFdW0dBTU1BX0VOVFJJRVNdOw0KK2V4dGVybiBjb25zdCBzdHJ1Y3QgcmVn bWFwX2NvbmZpZyBpc2NfcmVnbWFwX2NvbmZpZzsNCitleHRlcm4gY29uc3Qgc3RydWN0IHY0bDJf YXN5bmNfbm90aWZpZXJfb3BlcmF0aW9ucyBpc2NfYXN5bmNfb3BzOw0KKw0KK2V4dGVybiBpcnFy ZXR1cm5fdCBpc2NfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7DQorZXh0ZXJuIGlu dCBpc2NfcGlwZWxpbmVfaW5pdChzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKTsNCitleHRlcm4gaW50 IGlzY19jbGtfaW5pdChzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKTsNCitleHRlcm4gdm9pZCBpc2Nf c3ViZGV2X2NsZWFudXAoc3RydWN0IGlzY19kZXZpY2UgKmlzYyk7DQorZXh0ZXJuIHZvaWQgaXNj X2Nsa19jbGVhbnVwKHN0cnVjdCBpc2NfZGV2aWNlICppc2MpOw0KKw0KKy8qIG1vZHVsZSBwYXJh bWV0ZXJzICovDQorZXh0ZXJuIHVuc2lnbmVkIGludCBkZWJ1ZzsNCitleHRlcm4gdW5zaWduZWQg aW50IHNlbnNvcl9wcmVmZXJyZWQ7DQorDQorI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX0FUTUVM X0lTQykNCisjZGVmaW5lIEFUTUVMX0lTQ19OQU1FICJhdG1lbC1pc2MiDQorI2VuZGlmDQorDQor I2VuZGlmDQotLSANCjIuNy40DQoNCg==