Received: by 2002:a25:ab43:0:0:0:0:0 with SMTP id u61csp5890551ybi; Wed, 12 Jun 2019 10:11:01 -0700 (PDT) X-Google-Smtp-Source: APXvYqyE6fLAw5XpPOAsSX0dp5CPYAM0VQJc4erOElILefbYlz69SSV/TbGDKrKtLZ46kV+xSmJN X-Received: by 2002:a65:6295:: with SMTP id f21mr26892462pgv.416.1560359460993; Wed, 12 Jun 2019 10:11:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1560359460; cv=none; d=google.com; s=arc-20160816; b=E87xt/s+rvbELf3QMPt7CSFH59st/6opkd9hOx3FVNbHGpkfeAIxG/9GDTvf8P+YZo apNNlulEcL0VrPrnYMaflOR1YE4KoWYV/XlYJSPATmcOnhl/HK01AELBDPaQq4aGLYkB aKKEhlNd2hAmWNsnkW3u1lHWt5PKHxwQD3R/V4qaHgxmXF/RChuR1R7w/1zhnN/unoq1 SWcHwy2KclDnVHv7xqrJlTAYrBlhWkAlIGOyGmsiiiQlpiXLTZFmbN3L3ikQqEVRF9LO b+Nf5y6XLPwuVzqbswJLi9u+/bV8cC+CY3sThW/z0yUXQzq8bE66uAi/6n2I9+exma6D bCkQ== 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=359iEhuELV856EB95xtjT5DMCpFQtEg/91kqTw5NcLg=; b=i4+42sp3ryTRDMyHIhtLqBRZ4aXG+7FDCtGKtf4uO5ZToPVzp2/icCIltjd7yEOHJr mnjRMU6laaB7qEx0YJ77zgZNqlTMewbb9iSGT+42MS/acvtkOIER6VEkDDrMEgistfYN NoZ1t+vB5TmRqMGLLHX2jgUu8yTbXcLKZOjmMOPxLp/degT8ePSnesf1Ucv51W6v31Fv GT3sayyU48eQENPM3W+qTs3eI87HeuMAaAEHgo1E7EHt23fNNfvRWu7kE/lhtXWdHqNu zjkFcofcY2kQ7ecLNztmAZMJUZuZ08yrdsPplLEd+CAx9yQNJT4n9dbYSkGiciMw6j3w s+SA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@microchiptechnology.onmicrosoft.com header.s=selector1-microchiptechnology-onmicrosoft-com header.b="kY6J/WD2"; 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 u10si314174pjr.102.2019.06.12.10.10.45; Wed, 12 Jun 2019 10:11:00 -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="kY6J/WD2"; 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 S2404577AbfFLMAr (ORCPT + 99 others); Wed, 12 Jun 2019 08:00:47 -0400 Received: from esa4.microchip.iphmx.com ([68.232.154.123]:58896 "EHLO esa4.microchip.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727233AbfFLMAq (ORCPT ); Wed, 12 Jun 2019 08:00:46 -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.63,365,1557212400"; d="scan'208";a="36626237" Received: from smtpout.microchip.com (HELO email.microchip.com) ([198.175.253.82]) by esa4.microchip.iphmx.com with ESMTP/TLS/AES256-SHA256; 12 Jun 2019 05:00:39 -0700 Received: from chn-vm-ex02.mchp-main.com (10.10.87.72) by chn-vm-ex04.mchp-main.com (10.10.87.151) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Wed, 12 Jun 2019 05:00:38 -0700 Received: from NAM01-BN3-obe.outbound.protection.outlook.com (10.10.215.89) by email.microchip.com (10.10.87.72) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256) id 15.1.1713.5 via Frontend Transport; Wed, 12 Jun 2019 05:00:37 -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=359iEhuELV856EB95xtjT5DMCpFQtEg/91kqTw5NcLg=; b=kY6J/WD2c6LqLDjdGps1w9ShvbTA+wH4qftTG59Ovor7zVIC4MAyBl+a26kJKWH0L2v9zhejofxp04GANmlEQb6j9Z5uAtixVevMIUxP0NY4XWoHPUYU2RW5ZOIM4plQDQO96wHOjALIwZnNaeVHd2N9EshgyE9kiuOODNLgge4= Received: from DM5PR11MB1242.namprd11.prod.outlook.com (10.168.108.8) by DM5PR11MB1497.namprd11.prod.outlook.com (10.172.38.9) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.1987.11; Wed, 12 Jun 2019 12:00:32 +0000 Received: from DM5PR11MB1242.namprd11.prod.outlook.com ([fe80::2807:f606:3b7c:cce9]) by DM5PR11MB1242.namprd11.prod.outlook.com ([fe80::2807:f606:3b7c:cce9%9]) with mapi id 15.20.1965.017; Wed, 12 Jun 2019 12:00:32 +0000 From: To: , , , , CC: Subject: [PATCH v6 1/3] media: atmel: atmel-isc: split driver into driver base and isc Thread-Topic: [PATCH v6 1/3] media: atmel: atmel-isc: split driver into driver base and isc Thread-Index: AQHVIRZvdXz+7WTC6EqB3qrnJyqeaQ== Date: Wed, 12 Jun 2019 12:00:31 +0000 Message-ID: <1560340575-21021-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: VI1PR03CA0065.eurprd03.prod.outlook.com (2603:10a6:803:50::36) 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: 221aae93-2dc7-4116-5627-08d6ef2d9158 x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(2017052603328)(7193020);SRVR:DM5PR11MB1497; x-ms-traffictypediagnostic: DM5PR11MB1497: x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:1468; x-forefront-prvs: 0066D63CE6 x-forefront-antispam-report: SFV:NSPM;SFS:(10009020)(979002)(376002)(346002)(39860400002)(396003)(136003)(366004)(189003)(199004)(66476007)(26005)(73956011)(30864003)(66946007)(66446008)(66556008)(53936002)(64756008)(107886003)(4326008)(5660300002)(110136005)(316002)(6486002)(14444005)(71200400001)(25786009)(99286004)(256004)(2501003)(66066001)(476003)(6512007)(53946003)(6506007)(71190400001)(86362001)(6436002)(2906002)(52116002)(6116002)(386003)(186003)(2616005)(3846002)(36756003)(2201001)(486006)(72206003)(102836004)(478600001)(68736007)(8676002)(14454004)(50226002)(81156014)(81166006)(8936002)(305945005)(7736002)(461764006)(959014)(579004)(559001)(569006);DIR:OUT;SFP:1101;SCL:1;SRVR:DM5PR11MB1497;H:DM5PR11MB1242.namprd11.prod.outlook.com;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A: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: KpYEezNi+cxCce3OO7Lpxrhan0HBE7KsUSTUY2e584sTNGJN1gTIpJeikYTRsmpAOLNRbmbiAKj4mdOMgiVScl+PJLE6vpYIyBUDJ3p9NcR8OwVHb9YHO+m19XJSq8w56q/GS/QYInsZPpSa9ocW7q8yCqi75xKQ4G1xRakoUgVZEkawRO6Rb3d1wYbROCNoi6+UILCzJlfefSahMkRZ4N0T0NIuv8TT7qaj2Rt8XvchGmjHxe9lRL+gxtG9QPhHUEJslxbqhG2VNW7CUADd8ALtongBw2K77Ogz4AlxYfpsSRjyeQ23gVJIxXvKvHuQqSZ/WpWRmQJNrOiv1yX2QKrVkFEliWkfiVbtfq6bDBeEyLmNmw8nUAWA4Yf9mYtvywAsybAzQaAY5cC+lcPhm9asRNI7oqpCkWOyKcwsr34= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-Network-Message-Id: 221aae93-2dc7-4116-5627-08d6ef2d9158 X-MS-Exchange-CrossTenant-originalarrivaltime: 12 Jun 2019 12:00:31.8772 (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-CrossTenant-userprincipalname: eugen.hristev@microchip.com X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM5PR11MB1497 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org RnJvbTogRXVnZW4gSHJpc3RldiA8ZXVnZW4uaHJpc3RldkBtaWNyb2NoaXAuY29tPg0KDQpUaGlz IHNwbGl0cyB0aGUgQXRtZWwgSVNDIGRyaXZlciBpbnRvIGEgY29tbW9uIGJhc2U6IGF0bWVsLWlz Yy1iYXNlLmMNCmFuZCB0aGUgZHJpdmVyIHByb2JlL2R0IHBhcnQgLCBhdG1lbC1zYW1hNWQyLWlz Yy5jDQpUaGlzIGlzIG5lZWRlZCB0byBrZWVwIGEgY29tbW9uIGdyb3VuZCBmb3IgdGhlIHNlbnNv ciBjb250cm9sbGVyIHdoaWNoIHdpbGwNCmJlIHJldXNlZC4NClRoZSBhdG1lbC1pc2Mgd2lsbCB1 c2UgdGhlIGNvbW1vbiBzeW1ib2xzIGluc2lkZSB0aGUgYXRtZWwtaXNjLWJhc2UNCkZ1dHVyZSBk cml2ZXIgd2lsbCBhbHNvIHVzZSB0aGUgc2FtZSBzeW1ib2xzIGFuZCByZWRlZmluZSBkaWZmZXJl bnQgYXNwZWN0cywNCmZvciBhIGRpZmZlcmVudCB2ZXJzaW9uIG9mIHRoZSBJU0MuDQpUaGlzIGlz IGRvbmUgdG8gYXZvaWQgY29tcGxldGUgY29kZSBkdXBsaWNhdGlvbiBieSBjcmVhdGluZyBhIHRv dGFsbHkNCmRpZmZlcmVudCBkcml2ZXIgZm9yIHRoZSBuZXcgdmFyaWFudCBvZiB0aGUgSVNDLg0K DQpTaWduZWQtb2ZmLWJ5OiBFdWdlbiBIcmlzdGV2IDxldWdlbi5ocmlzdGV2QG1pY3JvY2hpcC5j b20+DQotLS0NCg0KSGVsbG8gSGFucyBhbmQgU2FrYXJpLA0KSSBtYWRlIGEgbmV3IHZlcnNpb24g dGhhdCBpcyBub3cgcmViYXNlZCBvbiBsYXRlc3QgbWVkaWEgdHJlZS4NCkkgYWRkZWQgYSBuZXcg cGF0Y2ggMy8zIHdoaWNoIGZpeGVzIGlzc3VlcyByZXZpZXdlZCBieSBTYWthcmkuDQoNCkkgbWFk ZSB0aGVtIGluIGEgc2VwYXJhdGUgcGF0Y2ggdG8gbm90IG1peCB1cCB0aGluZ3MuDQoNCkNoYW5n ZXMgaW4gdjY6DQotIHJlYWRkZWQgbWlzc2luZyBsaW5lIGluIHBhdGNoIDMvMyB3aXRoICJyZXR1 cm4gMCINCg0KQ2hhbmdlcyBpbiB2NToNCi0gUmViYXNlZCBvbiB0b3Agb2YgbGF0ZXN0IG1lZGlh X3RyZWUuIGhhZCBzb21lIGNvbmZsaWN0cyB3aXRoIFNQRFgNCg0KQ2hhbmdlcyBpbiB2NDoNCi0g UmVtb3ZlZCBTb25nanVuJ3MgZS1tYWlsIGFkZHJlc3MgYXMgaXQncyBubyBsb25nZXIgdmFsaWQu IE9ubHkga2VwdCBoaXMgbmFtZQ0KDQpDaGFuZ2VzIGluIHYzOg0KLSBGaXhlZCB1cCB0aGUgZXh0 ZXJucywgbW92ZWQgdG8gaGVhZGVyIGZpbGUNCi0gbW92ZWQgdGhlIG1vZHVsZSBwYXJhbWV0ZXJz IHRvIGF0bWVsLWlzYy1iYXNlLmMNCg0KQ2hhbmdlcyBpbiB2MjoNCi0gcmVuYW1lZCBhdG1lbC1p c2MuYyB0byBhdG1lbC1zYW1hNWQyLWlzYy5jIGFzIHNhbWE1ZDIgaXMgdGhlIFNvQyB0aGF0DQog IGluY2x1ZGVzIHRoaXMgaGFyZHdhcmUgYmxvY2suIFRoZSBtb2R1bGUgd2lsbCBzdGlsbCBiZSBu YW1lZCBhdG1lbC1pc2Mua28NCi0gcmVtb3ZlZCBpZmRlZiBhcm91bmQgZGVmaW5pdGlvbiBvZiBB VE1FTF9JU0NfTkFNRQ0KLSBtb3ZlZCBleHRlcm5hbCBkZWNsYXJhdGlvbnMgaW4gdGhlIHNwZWNp ZmljIGZpbGVzLCB0aGlzIHdhcyBicmVha2luZw0KICBtb2R1bGUgbG9hZGluZw0KDQoNCg0KIE1B SU5UQUlORVJTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgIDQgKy0N CiBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVsL01ha2VmaWxlICAgICAgICAgICAgfCAgICA0 ICstDQogZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1pc2MtYmFzZS5jICAgIHwg MjE1MyArKysrKysrKysrKysrKysrKysNCiBkcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVsL2F0 bWVsLWlzYy5jICAgICAgICAgfCAyNjMxIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiBkcml2ZXJz L21lZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVsLWlzYy5oICAgICAgICAgfCAgMjA4ICsrDQogZHJp dmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1zYW1hNWQyLWlzYy5jIHwgIDM0NCArKysN CiA2IGZpbGVzIGNoYW5nZWQsIDI3MTEgaW5zZXJ0aW9ucygrKSwgMjYzMyBkZWxldGlvbnMoLSkN CiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1p c2MtYmFzZS5jDQogZGVsZXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRt ZWwvYXRtZWwtaXNjLmMNCiBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9tZWRpYS9wbGF0Zm9y bS9hdG1lbC9hdG1lbC1pc2MuaA0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL21lZGlhL3Bs YXRmb3JtL2F0bWVsL2F0bWVsLXNhbWE1ZDItaXNjLmMNCg0KZGlmZiAtLWdpdCBhL01BSU5UQUlO RVJTIGIvTUFJTlRBSU5FUlMNCmluZGV4IDZhM2JhYzIuLjcxMTE5N2EgMTAwNjQ0DQotLS0gYS9N QUlOVEFJTkVSUw0KKysrIGIvTUFJTlRBSU5FUlMNCkBAIC0xMDI5Niw3ICsxMDI5Niw5IEBAIE1J Q1JPQ0hJUCBJU0MgRFJJVkVSDQogTToJRXVnZW4gSHJpc3RldiA8ZXVnZW4uaHJpc3RldkBtaWNy b2NoaXAuY29tPg0KIEw6CWxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZw0KIFM6CVN1cHBvcnRl ZA0KLUY6CWRyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvYXRtZWwtaXNjLmMNCitGOglkcml2 ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVsLXNhbWE1ZDItaXNjLmMNCitGOglkcml2ZXJz L21lZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVsLWlzYy5oDQorRjoJZHJpdmVycy9tZWRpYS9wbGF0 Zm9ybS9hdG1lbC9hdG1lbC1pc2MtYmFzZS5jDQogRjoJZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9h dG1lbC9hdG1lbC1pc2MtcmVncy5oDQogRjoJRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRp bmdzL21lZGlhL2F0bWVsLWlzYy50eHQNCiANCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3Bs YXRmb3JtL2F0bWVsL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9NYWtl ZmlsZQ0KaW5kZXggNDg0OTM2Ni4uMmRiYTM4OSAxMDA2NDQNCi0tLSBhL2RyaXZlcnMvbWVkaWEv cGxhdGZvcm0vYXRtZWwvTWFrZWZpbGUNCisrKyBiL2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRt ZWwvTWFrZWZpbGUNCkBAIC0xLDMgKzEsNSBAQA0KICMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAtb25seQ0KLW9iai0kKENPTkZJR19WSURFT19BVE1FTF9JU0MpICs9IGF0bWVsLWlz Yy5vDQorYXRtZWwtaXNjLW9ianMgPSBhdG1lbC1zYW1hNWQyLWlzYy5vIGF0bWVsLWlzYy1iYXNl Lm8NCisNCiBvYmotJChDT05GSUdfVklERU9fQVRNRUxfSVNJKSArPSBhdG1lbC1pc2kubw0KK29i ai0kKENPTkZJR19WSURFT19BVE1FTF9JU0MpICs9IGF0bWVsLWlzYy5vDQpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1pc2MtYmFzZS5jIGIvZHJpdmVycy9t ZWRpYS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1pc2MtYmFzZS5jDQpuZXcgZmlsZSBtb2RlIDEwMDY0 NA0KaW5kZXggMDAwMDAwMC4uZWRmZDdlMA0KLS0tIC9kZXYvbnVsbA0KKysrIGIvZHJpdmVycy9t ZWRpYS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1pc2MtYmFzZS5jDQpAQCAtMCwwICsxLDIxNTMgQEAN CisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5DQorLyoNCisgKiBNaWNy b2NoaXAgSW1hZ2UgU2Vuc29yIENvbnRyb2xsZXIgKElTQykgY29tbW9uIGRyaXZlciBiYXNlDQor ICoNCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYtMjAxOSBNaWNyb2NoaXAgVGVjaG5vbG9neSwgSW5j Lg0KKyAqDQorICogQXV0aG9yOiBTb25nanVuIFd1DQorICogQXV0aG9yOiBFdWdlbiBIcmlzdGV2 IDxldWdlbi5ocmlzdGV2QG1pY3JvY2hpcC5jb20+DQorICoNCisgKi8NCisNCisjaW5jbHVkZSA8 bGludXgvY2xrLmg+DQorI2luY2x1ZGUgPGxpbnV4L2Nsa2Rldi5oPg0KKyNpbmNsdWRlIDxsaW51 eC9jbGstcHJvdmlkZXIuaD4NCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4NCisjaW5jbHVkZSA8 bGludXgvaW50ZXJydXB0Lmg+DQorI2luY2x1ZGUgPGxpbnV4L21hdGg2NC5oPg0KKyNpbmNsdWRl IDxsaW51eC9tb2R1bGUuaD4NCisjaW5jbHVkZSA8bGludXgvb2YuaD4NCisjaW5jbHVkZSA8bGlu dXgvb2ZfZ3JhcGguaD4NCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQorI2lu Y2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4NCisjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+DQor I2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPg0KKw0KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWN0 cmxzLmg+DQorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+DQorI2luY2x1ZGUgPG1lZGlh L3Y0bDItZXZlbnQuaD4NCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pbWFnZS1zaXplcy5oPg0KKyNp bmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+DQorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZndub2Rl Lmg+DQorI2luY2x1ZGUgPG1lZGlhL3Y0bDItc3ViZGV2Lmg+DQorI2luY2x1ZGUgPG1lZGlhL3Zp ZGVvYnVmMi1kbWEtY29udGlnLmg+DQorDQorI2luY2x1ZGUgImF0bWVsLWlzYy1yZWdzLmgiDQor I2luY2x1ZGUgImF0bWVsLWlzYy5oIg0KKw0KK3Vuc2lnbmVkIGludCBkZWJ1ZzsNCittb2R1bGVf cGFyYW0oZGVidWcsIGludCwgMDY0NCk7DQorTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImRlYnVn IGxldmVsICgwLTIpIik7DQorDQordW5zaWduZWQgaW50IHNlbnNvcl9wcmVmZXJyZWQgPSAxOw0K K21vZHVsZV9wYXJhbShzZW5zb3JfcHJlZmVycmVkLCB1aW50LCAwNjQ0KTsNCitNT0RVTEVfUEFS TV9ERVNDKHNlbnNvcl9wcmVmZXJyZWQsDQorCQkgIlNlbnNvciBpcyBwcmVmZXJyZWQgdG8gb3V0 cHV0IHRoZSBzcGVjaWZpZWQgZm9ybWF0ICgxLW9uIDAtb2ZmKSwgZGVmYXVsdCAxIik7DQorDQor LyogVGhpcyBpcyBhIGxpc3Qgb2YgdGhlIGZvcm1hdHMgdGhhdCB0aGUgSVNDIGNhbiAqb3V0cHV0 KiAqLw0KK3N0cnVjdCBpc2NfZm9ybWF0IGNvbnRyb2xsZXJfZm9ybWF0c1tdID0gew0KKwl7DQor CQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9BUkdCNDQ0LA0KKwl9LA0KKwl7DQorCQkuZm91cmNj CQk9IFY0TDJfUElYX0ZNVF9BUkdCNTU1LA0KKwl9LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJf UElYX0ZNVF9SR0I1NjUsDQorCX0sDQorCXsNCisJCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX0FC R1IzMiwNCisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfWEJHUjMyLA0KKwl9 LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9ZVVY0MjAsDQorCX0sDQorCXsNCisJ CS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1lVWVYsDQorCX0sDQorCXsNCisJCS5mb3VyY2MJCT0g VjRMMl9QSVhfRk1UX1lVVjQyMlAsDQorCX0sDQorCXsNCisJCS5mb3VyY2MJCT0gVjRMMl9QSVhf Rk1UX0dSRVksDQorCX0sDQorfTsNCisNCisvKiBUaGlzIGlzIGEgbGlzdCBvZiBmb3JtYXRzIHRo YXQgdGhlIElTQyBjYW4gcmVjZWl2ZSBhcyAqaW5wdXQqICovDQorc3RydWN0IGlzY19mb3JtYXQg Zm9ybWF0c19saXN0W10gPSB7DQorCXsNCisJCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1NCR0dS OCwNCisJCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NCR0dSOF8xWDgsDQorCQkucGZlX2Nm ZzBfYnBzCT0gSVNDX1BGRV9DRkcwX0JQU19FSUdIVCwNCisJCS5jZmFfYmF5Y2ZnCT0gSVNDX0JB WV9DRkdfQkdCRywNCisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0dCUkc4 LA0KKwkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfU0dCUkc4XzFYOCwNCisJCS5wZmVfY2Zn MF9icHMJPSBJU0NfUEZFX0NGRzBfQlBTX0VJR0hULA0KKwkJLmNmYV9iYXljZmcJPSBJU0NfQkFZ X0NGR19HQkdCLA0KKwl9LA0KKwl7DQorCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9TR1JCRzgs DQorCQkubWJ1c19jb2RlCT0gTUVESUFfQlVTX0ZNVF9TR1JCRzhfMVg4LA0KKwkJLnBmZV9jZmcw X2Jwcwk9IElTQ19QRkVfQ0ZHMF9CUFNfRUlHSFQsDQorCQkuY2ZhX2JheWNmZwk9IElTQ19CQVlf Q0ZHX0dSR1IsDQorCX0sDQorCXsNCisJCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1NSR0dCOCwN CisJCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NSR0dCOF8xWDgsDQorCQkucGZlX2NmZzBf YnBzCT0gSVNDX1BGRV9DRkcwX0JQU19FSUdIVCwNCisJCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9D RkdfUkdSRywNCisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0JHR1IxMCwN CisJCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NCR0dSMTBfMVgxMCwNCisJCS5wZmVfY2Zn MF9icHMJPSBJU0NfUEZHX0NGRzBfQlBTX1RFTiwNCisJCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9D RkdfUkdSRywNCisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0dCUkcxMCwN CisJCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NHQlJHMTBfMVgxMCwNCisJCS5wZmVfY2Zn MF9icHMJPSBJU0NfUEZHX0NGRzBfQlBTX1RFTiwNCisJCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9D RkdfR0JHQiwNCisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0dSQkcxMCwN CisJCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NHUkJHMTBfMVgxMCwNCisJCS5wZmVfY2Zn MF9icHMJPSBJU0NfUEZHX0NGRzBfQlBTX1RFTiwNCisJCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9D RkdfR1JHUiwNCisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU1JHR0IxMCwN CisJCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NSR0dCMTBfMVgxMCwNCisJCS5wZmVfY2Zn MF9icHMJPSBJU0NfUEZHX0NGRzBfQlBTX1RFTiwNCisJCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9D RkdfUkdSRywNCisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0JHR1IxMiwN CisJCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NCR0dSMTJfMVgxMiwNCisJCS5wZmVfY2Zn MF9icHMJPSBJU0NfUEZHX0NGRzBfQlBTX1RXRUxWRSwNCisJCS5jZmFfYmF5Y2ZnCT0gSVNDX0JB WV9DRkdfQkdCRywNCisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0dCUkcx MiwNCisJCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NHQlJHMTJfMVgxMiwNCisJCS5wZmVf Y2ZnMF9icHMJPSBJU0NfUEZHX0NGRzBfQlBTX1RXRUxWRSwNCisJCS5jZmFfYmF5Y2ZnCT0gSVND X0JBWV9DRkdfR0JHQiwNCisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0dS QkcxMiwNCisJCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NHUkJHMTJfMVgxMiwNCisJCS5w ZmVfY2ZnMF9icHMJPSBJU0NfUEZHX0NGRzBfQlBTX1RXRUxWRSwNCisJCS5jZmFfYmF5Y2ZnCT0g SVNDX0JBWV9DRkdfR1JHUiwNCisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRf U1JHR0IxMiwNCisJCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1NSR0dCMTJfMVgxMiwNCisJ CS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZHX0NGRzBfQlBTX1RXRUxWRSwNCisJCS5jZmFfYmF5Y2Zn CT0gSVNDX0JBWV9DRkdfUkdSRywNCisJfSwNCisJew0KKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9G TVRfR1JFWSwNCisJCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1k4XzFYOCwNCisJCS5wZmVf Y2ZnMF9icHMJPSBJU0NfUEZFX0NGRzBfQlBTX0VJR0hULA0KKwl9LA0KKwl7DQorCQkuZm91cmNj CQk9IFY0TDJfUElYX0ZNVF9ZVVlWLA0KKwkJLm1idXNfY29kZQk9IE1FRElBX0JVU19GTVRfWVVZ VjhfMlg4LA0KKwkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkVfQ0ZHMF9CUFNfRUlHSFQsDQorCX0s DQorCXsNCisJCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1JHQjU2NSwNCisJCS5tYnVzX2NvZGUJ PSBNRURJQV9CVVNfRk1UX1JHQjU2NV8yWDhfTEUsDQorCQkucGZlX2NmZzBfYnBzCT0gSVNDX1BG RV9DRkcwX0JQU19FSUdIVCwNCisJfSwNCit9Ow0KKw0KKy8qIEdhbW1hIHRhYmxlIHdpdGggZ2Ft bWEgMS8yLjIgKi8NCitjb25zdCB1MzIgaXNjX2dhbW1hX3RhYmxlW0dBTU1BX01BWCArIDFdW0dB TU1BX0VOVFJJRVNdID0gew0KKwkvKiAwIC0tPiBnYW1tYSAxLzEuOCAqLw0KKwl7ICAgICAgMHg2 NSwgIDB4NjYwMDJGLCAgMHg5NTAwMjUsICAweEJCMDAyMCwgIDB4REIwMDFELCAgMHhGODAwMUEs DQorCSAgMHgxMTMwMDE4LCAweDEyQjAwMTcsIDB4MTQyMDAxNiwgMHgxNTgwMDE0LCAweDE2RDAw MTMsIDB4MTgxMDAxMiwNCisJICAweDE5NDAwMTIsIDB4MUE2MDAxMiwgMHgxQjgwMDExLCAweDFD OTAwMTAsIDB4MURBMDAxMCwgMHgxRUEwMDBGLA0KKwkgIDB4MUZBMDAwRiwgMHgyMDkwMDBGLCAw eDIxODAwMEYsIDB4MjI3MDAwRSwgMHgyMzUwMDBFLCAweDI0MzAwMEUsDQorCSAgMHgyNTEwMDBF LCAweDI1RjAwMEQsIDB4MjZDMDAwRCwgMHgyNzkwMDBELCAweDI4NjAwMEQsIDB4MjkzMDAwQywN CisJICAweDJBMDAwMEMsIDB4MkFDMDAwQywgMHgyQjgwMDBDLCAweDJDNDAwMEMsIDB4MkQwMDAw QiwgMHgyREMwMDBCLA0KKwkgIDB4MkU3MDAwQiwgMHgyRjMwMDBCLCAweDJGRTAwMEIsIDB4MzA5 MDAwQiwgMHgzMTQwMDBCLCAweDMxRjAwMEEsDQorCSAgMHgzMkEwMDBBLCAweDMzNDAwMEIsIDB4 MzNGMDAwQSwgMHgzNDkwMDBBLCAweDM1NDAwMEEsIDB4MzVFMDAwQSwNCisJICAweDM2ODAwMEEs IDB4MzcyMDAwQSwgMHgzN0MwMDBBLCAweDM4NjAwMEEsIDB4MzkwMDAwOSwgMHgzOTkwMDBBLA0K KwkgIDB4M0EzMDAwOSwgMHgzQUQwMDA5LCAweDNCNjAwMDksIDB4M0JGMDAwQSwgMHgzQzkwMDA5 LCAweDNEMjAwMDksDQorCSAgMHgzREIwMDA5LCAweDNFNDAwMDksIDB4M0VEMDAwOSwgMHgzRjYw MDA5IH0sDQorDQorCS8qIDEgLS0+IGdhbW1hIDEvMiAqLw0KKwl7ICAgICAgMHg3RiwgIDB4ODAw MDM0LCAgMHhCNTAwMjgsICAweERFMDAyMSwgMHgxMDAwMDFFLCAweDExRTAwMUIsDQorCSAgMHgx MzkwMDE5LCAweDE1MjAwMTcsIDB4MTZBMDAxNSwgMHgxODAwMDE0LCAweDE5NDAwMTQsIDB4MUE4 MDAxMywNCisJICAweDFCQjAwMTIsIDB4MUNEMDAxMSwgMHgxREYwMDEwLCAweDFFRjAwMTAsIDB4 MjAwMDAwRiwgMHgyMEYwMDBGLA0KKwkgIDB4MjFGMDAwRSwgMHgyMkQwMDBGLCAweDIzQzAwMEUs IDB4MjRBMDAwRSwgMHgyNTgwMDBELCAweDI2NTAwMEQsDQorCSAgMHgyNzMwMDBDLCAweDI3RjAw MEQsIDB4MjhDMDAwQywgMHgyOTkwMDBDLCAweDJBNTAwMEMsIDB4MkIxMDAwQiwNCisJICAweDJC QzAwMEMsIDB4MkM4MDAwQiwgMHgyRDMwMDBDLCAweDJERjAwMEIsIDB4MkVBMDAwQSwgMHgyRjUw MDBBLA0KKwkgIDB4MkZGMDAwQiwgMHgzMEEwMDBBLCAweDMxNDAwMEIsIDB4MzFGMDAwQSwgMHgz MjkwMDBBLCAweDMzMzAwMEEsDQorCSAgMHgzM0QwMDA5LCAweDM0NzAwMDksIDB4MzUwMDAwQSwg MHgzNUEwMDA5LCAweDM2MzAwMEEsIDB4MzZEMDAwOSwNCisJICAweDM3NjAwMDksIDB4MzdGMDAw OSwgMHgzODgwMDA5LCAweDM5MTAwMDksIDB4MzlBMDAwOSwgMHgzQTMwMDA5LA0KKwkgIDB4M0FD MDAwOCwgMHgzQjQwMDA5LCAweDNCRDAwMDgsIDB4M0M2MDAwOCwgMHgzQ0UwMDA4LCAweDNENjAw MDksDQorCSAgMHgzREYwMDA4LCAweDNFNzAwMDgsIDB4M0VGMDAwOCwgMHgzRjcwMDA4IH0sDQor DQorCS8qIDIgLS0+IGdhbW1hIDEvMi4yICovDQorCXsgICAgICAweDk5LCAgMHg5QjAwMzgsICAw eEQ0MDAyQSwgIDB4RkYwMDIzLCAweDEyMjAwMUYsIDB4MTQxMDAxQiwNCisJICAweDE1RDAwMTks IDB4MTc2MDAxNywgMHgxOEUwMDE1LCAweDFBMzAwMTUsIDB4MUI4MDAxMywgMHgxQ0MwMDEyLA0K KwkgIDB4MURFMDAxMSwgMHgxRjAwMDEwLCAweDIwMTAwMTAsIDB4MjExMDAxMCwgMHgyMjEwMDBG LCAweDIzMDAwMEYsDQorCSAgMHgyM0YwMDBFLCAweDI0RDAwMEUsIDB4MjVCMDAwRCwgMHgyNjkw MDBDLCAweDI3NjAwMEMsIDB4MjgzMDAwQywNCisJICAweDI4RjAwMEMsIDB4MjlCMDAwQywgMHgy QTcwMDBDLCAweDJCMzAwMEIsIDB4MkJGMDAwQiwgMHgyQ0EwMDBCLA0KKwkgIDB4MkQ1MDAwQiwg MHgyRTAwMDBBLCAweDJFQjAwMEEsIDB4MkY1MDAwQSwgMHgyRkYwMDBBLCAweDMwQTAwMEEsDQor CSAgMHgzMTQwMDA5LCAweDMxRTAwMDksIDB4MzI3MDAwQSwgMHgzMzEwMDA5LCAweDMzQTAwMDks IDB4MzQ0MDAwOSwNCisJICAweDM0RDAwMDksIDB4MzU2MDAwOSwgMHgzNUYwMDA5LCAweDM2ODAw MDgsIDB4MzcxMDAwOCwgMHgzNzkwMDA5LA0KKwkgIDB4MzgyMDAwOCwgMHgzOEEwMDA4LCAweDM5 MzAwMDgsIDB4MzlCMDAwOCwgMHgzQTMwMDA4LCAweDNBQjAwMDgsDQorCSAgMHgzQjMwMDA4LCAw eDNCQjAwMDgsIDB4M0MzMDAwOCwgMHgzQ0IwMDA3LCAweDNEMjAwMDgsIDB4M0RBMDAwNywNCisJ ICAweDNFMjAwMDcsIDB4M0U5MDAwNywgMHgzRjAwMDA4LCAweDNGODAwMDcgfSwNCit9Ow0KKw0K KyNkZWZpbmUgSVNDX0lTX0ZPUk1BVF9SQVcobWJ1c19jb2RlKSBcDQorCSgoKG1idXNfY29kZSkg JiAweGYwMDApID09IDB4MzAwMCkNCisNCitzdGF0aWMgaW5saW5lIHZvaWQgaXNjX3VwZGF0ZV9h d2JfY3RybHMoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCit7DQorCXN0cnVjdCBpc2NfY3RybHMg KmN0cmxzID0gJmlzYy0+Y3RybHM7DQorDQorCXJlZ21hcF93cml0ZShpc2MtPnJlZ21hcCwgSVND X1dCX09fUkdSLA0KKwkJICAgICAoSVNDX1dCX09fWkVST19WQUwgLSAoY3RybHMtPm9mZnNldFtJ U0NfSElTX0NGR19NT0RFX1JdKSkgfA0KKwkJICAgICAoKElTQ19XQl9PX1pFUk9fVkFMIC0gY3Ry bHMtPm9mZnNldFtJU0NfSElTX0NGR19NT0RFX0dSXSkgPDwgMTYpKTsNCisJcmVnbWFwX3dyaXRl KGlzYy0+cmVnbWFwLCBJU0NfV0JfT19CR0IsDQorCQkgICAgIChJU0NfV0JfT19aRVJPX1ZBTCAt IChjdHJscy0+b2Zmc2V0W0lTQ19ISVNfQ0ZHX01PREVfQl0pKSB8DQorCQkgICAgICgoSVNDX1dC X09fWkVST19WQUwgLSBjdHJscy0+b2Zmc2V0W0lTQ19ISVNfQ0ZHX01PREVfR0JdKSA8PCAxNikp Ow0KKwlyZWdtYXBfd3JpdGUoaXNjLT5yZWdtYXAsIElTQ19XQl9HX1JHUiwNCisJCSAgICAgY3Ry bHMtPmdhaW5bSVNDX0hJU19DRkdfTU9ERV9SXSB8DQorCQkgICAgIChjdHJscy0+Z2FpbltJU0Nf SElTX0NGR19NT0RFX0dSXSA8PCAxNikpOw0KKwlyZWdtYXBfd3JpdGUoaXNjLT5yZWdtYXAsIElT Q19XQl9HX0JHQiwNCisJCSAgICAgY3RybHMtPmdhaW5bSVNDX0hJU19DRkdfTU9ERV9CXSB8DQor CQkgICAgIChjdHJscy0+Z2FpbltJU0NfSElTX0NGR19NT0RFX0dCXSA8PCAxNikpOw0KK30NCisN CitzdGF0aWMgaW5saW5lIHZvaWQgaXNjX3Jlc2V0X2F3Yl9jdHJscyhzdHJ1Y3QgaXNjX2Rldmlj ZSAqaXNjKQ0KK3sNCisJaW50IGM7DQorDQorCWZvciAoYyA9IElTQ19ISVNfQ0ZHX01PREVfR1I7 IGMgPD0gSVNDX0hJU19DRkdfTU9ERV9COyBjKyspIHsNCisJCS8qIGdhaW5zIGhhdmUgYSBmaXhl ZCBwb2ludCBhdCA5IGRlY2ltYWxzICovDQorCQlpc2MtPmN0cmxzLmdhaW5bY10gPSAxIDw8IDk7 DQorCQkvKiBvZmZzZXRzIGFyZSBpbiAyJ3MgY29tcGxlbWVudHMsIHRoZSB2YWx1ZQ0KKwkJICog d2lsbCBiZSBzdWJzdHJhY3RlZCBmcm9tIElTQ19XQl9PX1pFUk9fVkFMIHRvIG9idGFpbg0KKwkJ ICogMidzIGNvbXBsZW1lbnQgb2YgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5kDQorCQkgKiBJU0NfV0Jf T19aRVJPX1ZBTCA+PiAxDQorCQkgKi8NCisJCWlzYy0+Y3RybHMub2Zmc2V0W2NdID0gSVNDX1dC X09fWkVST19WQUw7DQorCX0NCit9DQorDQorc3RhdGljIGludCBpc2Nfd2FpdF9jbGtfc3RhYmxl KHN0cnVjdCBjbGtfaHcgKmh3KQ0KK3sNCisJc3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSB0b19p c2NfY2xrKGh3KTsNCisJc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjX2Nsay0+cmVnbWFwOw0K Kwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgdXNlY3NfdG9famlmZmllcygxMDAw KTsNCisJdW5zaWduZWQgaW50IHN0YXR1czsNCisNCisJd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZp ZXMsIHRpbWVvdXQpKSB7DQorCQlyZWdtYXBfcmVhZChyZWdtYXAsIElTQ19DTEtTUiwgJnN0YXR1 cyk7DQorCQlpZiAoIShzdGF0dXMgJiBJU0NfQ0xLU1JfU0lQKSkNCisJCQlyZXR1cm4gMDsNCisN CisJCXVzbGVlcF9yYW5nZSgxMCwgMjUwKTsNCisJfQ0KKw0KKwlyZXR1cm4gLUVUSU1FRE9VVDsN Cit9DQorDQorc3RhdGljIGludCBpc2NfY2xrX3ByZXBhcmUoc3RydWN0IGNsa19odyAqaHcpDQor ew0KKwlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0KKw0KKwlpZiAo aXNjX2Nsay0+aWQgPT0gSVNDX0lTUENLKQ0KKwkJcG1fcnVudGltZV9nZXRfc3luYyhpc2NfY2xr LT5kZXYpOw0KKw0KKwlyZXR1cm4gaXNjX3dhaXRfY2xrX3N0YWJsZShodyk7DQorfQ0KKw0KK3N0 YXRpYyB2b2lkIGlzY19jbGtfdW5wcmVwYXJlKHN0cnVjdCBjbGtfaHcgKmh3KQ0KK3sNCisJc3Ry dWN0IGlzY19jbGsgKmlzY19jbGsgPSB0b19pc2NfY2xrKGh3KTsNCisNCisJaXNjX3dhaXRfY2xr X3N0YWJsZShodyk7DQorDQorCWlmIChpc2NfY2xrLT5pZCA9PSBJU0NfSVNQQ0spDQorCQlwbV9y dW50aW1lX3B1dF9zeW5jKGlzY19jbGstPmRldik7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNjX2Ns a19lbmFibGUoc3RydWN0IGNsa19odyAqaHcpDQorew0KKwlzdHJ1Y3QgaXNjX2NsayAqaXNjX2Ns ayA9IHRvX2lzY19jbGsoaHcpOw0KKwl1MzIgaWQgPSBpc2NfY2xrLT5pZDsNCisJc3RydWN0IHJl Z21hcCAqcmVnbWFwID0gaXNjX2Nsay0+cmVnbWFwOw0KKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0K Kwl1bnNpZ25lZCBpbnQgc3RhdHVzOw0KKw0KKwlkZXZfZGJnKGlzY19jbGstPmRldiwgIklTQyBD TEs6ICVzLCBkaXYgPSAlZCwgcGFyZW50IGlkID0gJWRcbiIsDQorCQlfX2Z1bmNfXywgaXNjX2Ns ay0+ZGl2LCBpc2NfY2xrLT5wYXJlbnRfaWQpOw0KKw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXNj X2Nsay0+bG9jaywgZmxhZ3MpOw0KKwlyZWdtYXBfdXBkYXRlX2JpdHMocmVnbWFwLCBJU0NfQ0xL Q0ZHLA0KKwkJCSAgIElTQ19DTEtDRkdfRElWX01BU0soaWQpIHwgSVNDX0NMS0NGR19TRUxfTUFT SyhpZCksDQorCQkJICAgKGlzY19jbGstPmRpdiA8PCBJU0NfQ0xLQ0ZHX0RJVl9TSElGVChpZCkp IHwNCisJCQkgICAoaXNjX2Nsay0+cGFyZW50X2lkIDw8IElTQ19DTEtDRkdfU0VMX1NISUZUKGlk KSkpOw0KKw0KKwlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfQ0xLRU4sIElTQ19DTEsoaWQpKTsN CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNjX2Nsay0+bG9jaywgZmxhZ3MpOw0KKw0KKwly ZWdtYXBfcmVhZChyZWdtYXAsIElTQ19DTEtTUiwgJnN0YXR1cyk7DQorCWlmIChzdGF0dXMgJiBJ U0NfQ0xLKGlkKSkNCisJCXJldHVybiAwOw0KKwllbHNlDQorCQlyZXR1cm4gLUVJTlZBTDsNCit9 DQorDQorc3RhdGljIHZvaWQgaXNjX2Nsa19kaXNhYmxlKHN0cnVjdCBjbGtfaHcgKmh3KQ0KK3sN CisJc3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSB0b19pc2NfY2xrKGh3KTsNCisJdTMyIGlkID0g aXNjX2Nsay0+aWQ7DQorCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQorDQorCXNwaW5fbG9ja19pcnFz YXZlKCZpc2NfY2xrLT5sb2NrLCBmbGFncyk7DQorCXJlZ21hcF93cml0ZShpc2NfY2xrLT5yZWdt YXAsIElTQ19DTEtESVMsIElTQ19DTEsoaWQpKTsNCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm aXNjX2Nsay0+bG9jaywgZmxhZ3MpOw0KK30NCisNCitzdGF0aWMgaW50IGlzY19jbGtfaXNfZW5h YmxlZChzdHJ1Y3QgY2xrX2h3ICpodykNCit7DQorCXN0cnVjdCBpc2NfY2xrICppc2NfY2xrID0g dG9faXNjX2Nsayhodyk7DQorCXUzMiBzdGF0dXM7DQorDQorCWlmIChpc2NfY2xrLT5pZCA9PSBJ U0NfSVNQQ0spDQorCQlwbV9ydW50aW1lX2dldF9zeW5jKGlzY19jbGstPmRldik7DQorDQorCXJl Z21hcF9yZWFkKGlzY19jbGstPnJlZ21hcCwgSVNDX0NMS1NSLCAmc3RhdHVzKTsNCisNCisJaWYg KGlzY19jbGstPmlkID09IElTQ19JU1BDSykNCisJCXBtX3J1bnRpbWVfcHV0X3N5bmMoaXNjX2Ns ay0+ZGV2KTsNCisNCisJcmV0dXJuIHN0YXR1cyAmIElTQ19DTEsoaXNjX2Nsay0+aWQpID8gMSA6 IDA7DQorfQ0KKw0KK3N0YXRpYyB1bnNpZ25lZCBsb25nDQoraXNjX2Nsa19yZWNhbGNfcmF0ZShz dHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkNCit7DQorCXN0cnVj dCBpc2NfY2xrICppc2NfY2xrID0gdG9faXNjX2Nsayhodyk7DQorDQorCXJldHVybiBESVZfUk9V TkRfQ0xPU0VTVChwYXJlbnRfcmF0ZSwgaXNjX2Nsay0+ZGl2ICsgMSk7DQorfQ0KKw0KK3N0YXRp YyBpbnQgaXNjX2Nsa19kZXRlcm1pbmVfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywNCisJCQkJICAg c3RydWN0IGNsa19yYXRlX3JlcXVlc3QgKnJlcSkNCit7DQorCXN0cnVjdCBpc2NfY2xrICppc2Nf Y2xrID0gdG9faXNjX2Nsayhodyk7DQorCWxvbmcgYmVzdF9yYXRlID0gLUVJTlZBTDsNCisJaW50 IGJlc3RfZGlmZiA9IC0xOw0KKwl1bnNpZ25lZCBpbnQgaSwgZGl2Ow0KKw0KKwlmb3IgKGkgPSAw OyBpIDwgY2xrX2h3X2dldF9udW1fcGFyZW50cyhodyk7IGkrKykgew0KKwkJc3RydWN0IGNsa19o dyAqcGFyZW50Ow0KKwkJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsNCisNCisJCXBhcmVudCA9 IGNsa19od19nZXRfcGFyZW50X2J5X2luZGV4KGh3LCBpKTsNCisJCWlmICghcGFyZW50KQ0KKwkJ CWNvbnRpbnVlOw0KKw0KKwkJcGFyZW50X3JhdGUgPSBjbGtfaHdfZ2V0X3JhdGUocGFyZW50KTsN CisJCWlmICghcGFyZW50X3JhdGUpDQorCQkJY29udGludWU7DQorDQorCQlmb3IgKGRpdiA9IDE7 IGRpdiA8IElTQ19DTEtfTUFYX0RJViArIDI7IGRpdisrKSB7DQorCQkJdW5zaWduZWQgbG9uZyBy YXRlOw0KKwkJCWludCBkaWZmOw0KKw0KKwkJCXJhdGUgPSBESVZfUk9VTkRfQ0xPU0VTVChwYXJl bnRfcmF0ZSwgZGl2KTsNCisJCQlkaWZmID0gYWJzKHJlcS0+cmF0ZSAtIHJhdGUpOw0KKw0KKwkJ CWlmIChiZXN0X2RpZmYgPCAwIHx8IGJlc3RfZGlmZiA+IGRpZmYpIHsNCisJCQkJYmVzdF9yYXRl ID0gcmF0ZTsNCisJCQkJYmVzdF9kaWZmID0gZGlmZjsNCisJCQkJcmVxLT5iZXN0X3BhcmVudF9y YXRlID0gcGFyZW50X3JhdGU7DQorCQkJCXJlcS0+YmVzdF9wYXJlbnRfaHcgPSBwYXJlbnQ7DQor CQkJfQ0KKw0KKwkJCWlmICghYmVzdF9kaWZmIHx8IHJhdGUgPCByZXEtPnJhdGUpDQorCQkJCWJy ZWFrOw0KKwkJfQ0KKw0KKwkJaWYgKCFiZXN0X2RpZmYpDQorCQkJYnJlYWs7DQorCX0NCisNCisJ ZGV2X2RiZyhpc2NfY2xrLT5kZXYsDQorCQkiSVNDIENMSzogJXMsIGJlc3RfcmF0ZSA9ICVsZCwg cGFyZW50IGNsazogJXMgQCAlbGRcbiIsDQorCQlfX2Z1bmNfXywgYmVzdF9yYXRlLA0KKwkJX19j bGtfZ2V0X25hbWUoKHJlcS0+YmVzdF9wYXJlbnRfaHcpLT5jbGspLA0KKwkJcmVxLT5iZXN0X3Bh cmVudF9yYXRlKTsNCisNCisJaWYgKGJlc3RfcmF0ZSA8IDApDQorCQlyZXR1cm4gYmVzdF9yYXRl Ow0KKw0KKwlyZXEtPnJhdGUgPSBiZXN0X3JhdGU7DQorDQorCXJldHVybiAwOw0KK30NCisNCitz dGF0aWMgaW50IGlzY19jbGtfc2V0X3BhcmVudChzdHJ1Y3QgY2xrX2h3ICpodywgdTggaW5kZXgp DQorew0KKwlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0KKw0KKwlp ZiAoaW5kZXggPj0gY2xrX2h3X2dldF9udW1fcGFyZW50cyhodykpDQorCQlyZXR1cm4gLUVJTlZB TDsNCisNCisJaXNjX2Nsay0+cGFyZW50X2lkID0gaW5kZXg7DQorDQorCXJldHVybiAwOw0KK30N CisNCitzdGF0aWMgdTggaXNjX2Nsa19nZXRfcGFyZW50KHN0cnVjdCBjbGtfaHcgKmh3KQ0KK3sN CisJc3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSB0b19pc2NfY2xrKGh3KTsNCisNCisJcmV0dXJu IGlzY19jbGstPnBhcmVudF9pZDsNCit9DQorDQorc3RhdGljIGludCBpc2NfY2xrX3NldF9yYXRl KHN0cnVjdCBjbGtfaHcgKmh3LA0KKwkJCSAgICAgdW5zaWduZWQgbG9uZyByYXRlLA0KKwkJCSAg ICAgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkNCit7DQorCXN0cnVjdCBpc2NfY2xrICppc2Nf Y2xrID0gdG9faXNjX2Nsayhodyk7DQorCXUzMiBkaXY7DQorDQorCWlmICghcmF0ZSkNCisJCXJl dHVybiAtRUlOVkFMOw0KKw0KKwlkaXYgPSBESVZfUk9VTkRfQ0xPU0VTVChwYXJlbnRfcmF0ZSwg cmF0ZSk7DQorCWlmIChkaXYgPiAoSVNDX0NMS19NQVhfRElWICsgMSkgfHwgIWRpdikNCisJCXJl dHVybiAtRUlOVkFMOw0KKw0KKwlpc2NfY2xrLT5kaXYgPSBkaXYgLSAxOw0KKw0KKwlyZXR1cm4g MDsNCit9DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIGlzY19jbGtfb3BzID0gew0K KwkucHJlcGFyZQk9IGlzY19jbGtfcHJlcGFyZSwNCisJLnVucHJlcGFyZQk9IGlzY19jbGtfdW5w cmVwYXJlLA0KKwkuZW5hYmxlCQk9IGlzY19jbGtfZW5hYmxlLA0KKwkuZGlzYWJsZQk9IGlzY19j bGtfZGlzYWJsZSwNCisJLmlzX2VuYWJsZWQJPSBpc2NfY2xrX2lzX2VuYWJsZWQsDQorCS5yZWNh bGNfcmF0ZQk9IGlzY19jbGtfcmVjYWxjX3JhdGUsDQorCS5kZXRlcm1pbmVfcmF0ZQk9IGlzY19j bGtfZGV0ZXJtaW5lX3JhdGUsDQorCS5zZXRfcGFyZW50CT0gaXNjX2Nsa19zZXRfcGFyZW50LA0K KwkuZ2V0X3BhcmVudAk9IGlzY19jbGtfZ2V0X3BhcmVudCwNCisJLnNldF9yYXRlCT0gaXNjX2Ns a19zZXRfcmF0ZSwNCit9Ow0KKw0KK3N0YXRpYyBpbnQgaXNjX2Nsa19yZWdpc3RlcihzdHJ1Y3Qg aXNjX2RldmljZSAqaXNjLCB1bnNpZ25lZCBpbnQgaWQpDQorew0KKwlzdHJ1Y3QgcmVnbWFwICpy ZWdtYXAgPSBpc2MtPnJlZ21hcDsNCisJc3RydWN0IGRldmljZV9ub2RlICpucCA9IGlzYy0+ZGV2 LT5vZl9ub2RlOw0KKwlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsazsNCisJc3RydWN0IGNsa19pbml0 X2RhdGEgaW5pdDsNCisJY29uc3QgY2hhciAqY2xrX25hbWUgPSBucC0+bmFtZTsNCisJY29uc3Qg Y2hhciAqcGFyZW50X25hbWVzWzNdOw0KKwlpbnQgbnVtX3BhcmVudHM7DQorDQorCW51bV9wYXJl bnRzID0gb2ZfY2xrX2dldF9wYXJlbnRfY291bnQobnApOw0KKwlpZiAobnVtX3BhcmVudHMgPCAx IHx8IG51bV9wYXJlbnRzID4gMykNCisJCXJldHVybiAtRUlOVkFMOw0KKw0KKwlpZiAobnVtX3Bh cmVudHMgPiAyICYmIGlkID09IElTQ19JU1BDSykNCisJCW51bV9wYXJlbnRzID0gMjsNCisNCisJ b2ZfY2xrX3BhcmVudF9maWxsKG5wLCBwYXJlbnRfbmFtZXMsIG51bV9wYXJlbnRzKTsNCisNCisJ aWYgKGlkID09IElTQ19NQ0spDQorCQlvZl9wcm9wZXJ0eV9yZWFkX3N0cmluZyhucCwgImNsb2Nr LW91dHB1dC1uYW1lcyIsICZjbGtfbmFtZSk7DQorCWVsc2UNCisJCWNsa19uYW1lID0gImlzYy1p c3BjayI7DQorDQorCWluaXQucGFyZW50X25hbWVzCT0gcGFyZW50X25hbWVzOw0KKwlpbml0Lm51 bV9wYXJlbnRzCT0gbnVtX3BhcmVudHM7DQorCWluaXQubmFtZQkJPSBjbGtfbmFtZTsNCisJaW5p dC5vcHMJCT0gJmlzY19jbGtfb3BzOw0KKwlpbml0LmZsYWdzCQk9IENMS19TRVRfUkFURV9HQVRF IHwgQ0xLX1NFVF9QQVJFTlRfR0FURTsNCisNCisJaXNjX2NsayA9ICZpc2MtPmlzY19jbGtzW2lk XTsNCisJaXNjX2Nsay0+aHcuaW5pdAk9ICZpbml0Ow0KKwlpc2NfY2xrLT5yZWdtYXAJCT0gcmVn bWFwOw0KKwlpc2NfY2xrLT5pZAkJPSBpZDsNCisJaXNjX2Nsay0+ZGV2CQk9IGlzYy0+ZGV2Ow0K KwlzcGluX2xvY2tfaW5pdCgmaXNjX2Nsay0+bG9jayk7DQorDQorCWlzY19jbGstPmNsayA9IGNs a19yZWdpc3Rlcihpc2MtPmRldiwgJmlzY19jbGstPmh3KTsNCisJaWYgKElTX0VSUihpc2NfY2xr LT5jbGspKSB7DQorCQlkZXZfZXJyKGlzYy0+ZGV2LCAiJXM6IGNsb2NrIHJlZ2lzdGVyIGZhaWxc biIsIGNsa19uYW1lKTsNCisJCXJldHVybiBQVFJfRVJSKGlzY19jbGstPmNsayk7DQorCX0gZWxz ZSBpZiAoaWQgPT0gSVNDX01DSykNCisJCW9mX2Nsa19hZGRfcHJvdmlkZXIobnAsIG9mX2Nsa19z cmNfc2ltcGxlX2dldCwgaXNjX2Nsay0+Y2xrKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK2lu dCBpc2NfY2xrX2luaXQoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCit7DQorCXVuc2lnbmVkIGlu dCBpOw0KKwlpbnQgcmV0Ow0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpc2MtPmlz Y19jbGtzKTsgaSsrKQ0KKwkJaXNjLT5pc2NfY2xrc1tpXS5jbGsgPSBFUlJfUFRSKC1FSU5WQUwp Ow0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpc2MtPmlzY19jbGtzKTsgaSsrKSB7 DQorCQlyZXQgPSBpc2NfY2xrX3JlZ2lzdGVyKGlzYywgaSk7DQorCQlpZiAocmV0KQ0KKwkJCXJl dHVybiByZXQ7DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3ZvaWQgaXNjX2Nsa19jbGVh bnVwKHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQorew0KKwl1bnNpZ25lZCBpbnQgaTsNCisNCisJ b2ZfY2xrX2RlbF9wcm92aWRlcihpc2MtPmRldi0+b2Zfbm9kZSk7DQorDQorCWZvciAoaSA9IDA7 IGkgPCBBUlJBWV9TSVpFKGlzYy0+aXNjX2Nsa3MpOyBpKyspIHsNCisJCXN0cnVjdCBpc2NfY2xr ICppc2NfY2xrID0gJmlzYy0+aXNjX2Nsa3NbaV07DQorDQorCQlpZiAoIUlTX0VSUihpc2NfY2xr LT5jbGspKQ0KKwkJCWNsa191bnJlZ2lzdGVyKGlzY19jbGstPmNsayk7DQorCX0NCit9DQorDQor c3RhdGljIGludCBpc2NfcXVldWVfc2V0dXAoc3RydWN0IHZiMl9xdWV1ZSAqdnEsDQorCQkJICAg IHVuc2lnbmVkIGludCAqbmJ1ZmZlcnMsIHVuc2lnbmVkIGludCAqbnBsYW5lcywNCisJCQkgICAg dW5zaWduZWQgaW50IHNpemVzW10sIHN0cnVjdCBkZXZpY2UgKmFsbG9jX2RldnNbXSkNCit7DQor CXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2YjJfZ2V0X2Rydl9wcml2KHZxKTsNCisJdW5zaWdu ZWQgaW50IHNpemUgPSBpc2MtPmZtdC5mbXQucGl4LnNpemVpbWFnZTsNCisNCisJaWYgKCpucGxh bmVzKQ0KKwkJcmV0dXJuIHNpemVzWzBdIDwgc2l6ZSA/IC1FSU5WQUwgOiAwOw0KKw0KKwkqbnBs YW5lcyA9IDE7DQorCXNpemVzWzBdID0gc2l6ZTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0 YXRpYyBpbnQgaXNjX2J1ZmZlcl9wcmVwYXJlKHN0cnVjdCB2YjJfYnVmZmVyICp2YikNCit7DQor CXN0cnVjdCB2YjJfdjRsMl9idWZmZXIgKnZidWYgPSB0b192YjJfdjRsMl9idWZmZXIodmIpOw0K KwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmIyX2dldF9kcnZfcHJpdih2Yi0+dmIyX3F1ZXVl KTsNCisJdW5zaWduZWQgbG9uZyBzaXplID0gaXNjLT5mbXQuZm10LnBpeC5zaXplaW1hZ2U7DQor DQorCWlmICh2YjJfcGxhbmVfc2l6ZSh2YiwgMCkgPCBzaXplKSB7DQorCQl2NGwyX2VycigmaXNj LT52NGwyX2RldiwgImJ1ZmZlciB0b28gc21hbGwgKCVsdSA8ICVsdSlcbiIsDQorCQkJIHZiMl9w bGFuZV9zaXplKHZiLCAwKSwgc2l6ZSk7DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKw0KKwl2 YjJfc2V0X3BsYW5lX3BheWxvYWQodmIsIDAsIHNpemUpOw0KKw0KKwl2YnVmLT5maWVsZCA9IGlz Yy0+Zm10LmZtdC5waXguZmllbGQ7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgdm9p ZCBpc2Nfc3RhcnRfZG1hKHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQorew0KKwlzdHJ1Y3QgcmVn bWFwICpyZWdtYXAgPSBpc2MtPnJlZ21hcDsNCisJdTMyIHNpemVpbWFnZSA9IGlzYy0+Zm10LmZt dC5waXguc2l6ZWltYWdlOw0KKwl1MzIgZGN0cmxfZHZpZXc7DQorCWRtYV9hZGRyX3QgYWRkcjA7 DQorCXUzMiBoLCB3Ow0KKw0KKwloID0gaXNjLT5mbXQuZm10LnBpeC5oZWlnaHQ7DQorCXcgPSBp c2MtPmZtdC5mbXQucGl4LndpZHRoOw0KKw0KKwkvKg0KKwkgKiBJbiBjYXNlIHRoZSBzZW5zb3Ig aXMgbm90IFJBVywgaXQgd2lsbCBvdXRwdXQgYSBwaXhlbCAoMTItMTYgYml0cykNCisJICogd2l0 aCB0d28gc2FtcGxlcyBvbiB0aGUgSVNDIERhdGEgYnVzICh3aGljaCBpcyA4LTEyKQ0KKwkgKiBJ U0Mgd2lsbCBjb3VudCBlYWNoIHNhbXBsZSwgc28sIHdlIG5lZWQgdG8gbXVsdGlwbHkgdGhlc2Ug dmFsdWVzDQorCSAqIGJ5IHR3bywgdG8gZ2V0IHRoZSByZWFsIG51bWJlciBvZiBzYW1wbGVzIGZv ciB0aGUgcmVxdWlyZWQgcGl4ZWxzLg0KKwkgKi8NCisJaWYgKCFJU0NfSVNfRk9STUFUX1JBVyhp c2MtPmNvbmZpZy5zZF9mb3JtYXQtPm1idXNfY29kZSkpIHsNCisJCWggPDw9IDE7DQorCQl3IDw8 PSAxOw0KKwl9DQorDQorCS8qDQorCSAqIFdlIGxpbWl0IHRoZSBjb2x1bW4vcm93IGNvdW50IHRo YXQgdGhlIElTQyB3aWxsIG91dHB1dCBhY2NvcmRpbmcNCisJICogdG8gdGhlIGNvbmZpZ3VyZWQg cmVzb2x1dGlvbiB0aGF0IHdlIHdhbnQuDQorCSAqIFRoaXMgd2lsbCBhdm9pZCB0aGUgc2l0dWF0 aW9uIHdoZXJlIHRoZSBzZW5zb3IgaXMgbWlzY29uZmlndXJlZCwNCisJICogc2VuZGluZyBtb3Jl IGRhdGEsIGFuZCB0aGUgSVNDIHdpbGwganVzdCB0YWtlIGl0IGFuZCBETUEgdG8gbWVtb3J5LA0K KwkgKiBjYXVzaW5nIGNvcnJ1cHRpb24uDQorCSAqLw0KKwlyZWdtYXBfd3JpdGUocmVnbWFwLCBJ U0NfUEZFX0NGRzEsDQorCQkgICAgIChJU0NfUEZFX0NGRzFfQ09MTUlOKDApICYgSVNDX1BGRV9D RkcxX0NPTE1JTl9NQVNLKSB8DQorCQkgICAgIChJU0NfUEZFX0NGRzFfQ09MTUFYKHcgLSAxKSAm IElTQ19QRkVfQ0ZHMV9DT0xNQVhfTUFTSykpOw0KKw0KKwlyZWdtYXBfd3JpdGUocmVnbWFwLCBJ U0NfUEZFX0NGRzIsDQorCQkgICAgIChJU0NfUEZFX0NGRzJfUk9XTUlOKDApICYgSVNDX1BGRV9D RkcyX1JPV01JTl9NQVNLKSB8DQorCQkgICAgIChJU0NfUEZFX0NGRzJfUk9XTUFYKGggLSAxKSAm IElTQ19QRkVfQ0ZHMl9ST1dNQVhfTUFTSykpOw0KKw0KKwlyZWdtYXBfdXBkYXRlX2JpdHMocmVn bWFwLCBJU0NfUEZFX0NGRzAsDQorCQkJICAgSVNDX1BGRV9DRkcwX0NPTEVOIHwgSVNDX1BGRV9D RkcwX1JPV0VOLA0KKwkJCSAgIElTQ19QRkVfQ0ZHMF9DT0xFTiB8IElTQ19QRkVfQ0ZHMF9ST1dF Tik7DQorDQorCWFkZHIwID0gdmIyX2RtYV9jb250aWdfcGxhbmVfZG1hX2FkZHIoJmlzYy0+Y3Vy X2ZybS0+dmIudmIyX2J1ZiwgMCk7DQorCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19EQUQwLCBh ZGRyMCk7DQorDQorCXN3aXRjaCAoaXNjLT5jb25maWcuZm91cmNjKSB7DQorCWNhc2UgVjRMMl9Q SVhfRk1UX1lVVjQyMDoNCisJCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19EQUQxLCBhZGRyMCAr IChzaXplaW1hZ2UgKiAyKSAvIDMpOw0KKwkJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0RBRDIs IGFkZHIwICsgKHNpemVpbWFnZSAqIDUpIC8gNik7DQorCQlicmVhazsNCisJY2FzZSBWNEwyX1BJ WF9GTVRfWVVWNDIyUDoNCisJCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19EQUQxLCBhZGRyMCAr IHNpemVpbWFnZSAvIDIpOw0KKwkJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0RBRDIsIGFkZHIw ICsgKHNpemVpbWFnZSAqIDMpIC8gNCk7DQorCQlicmVhazsNCisJZGVmYXVsdDoNCisJCWJyZWFr Ow0KKwl9DQorDQorCWRjdHJsX2R2aWV3ID0gaXNjLT5jb25maWcuZGN0cmxfZHZpZXc7DQorDQor CXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19EQ1RSTCwgZGN0cmxfZHZpZXcgfCBJU0NfRENUUkxf SUVfSVMpOw0KKwlzcGluX2xvY2soJmlzYy0+YXdiX2xvY2spOw0KKwlyZWdtYXBfd3JpdGUocmVn bWFwLCBJU0NfQ1RSTEVOLCBJU0NfQ1RSTF9DQVBUVVJFKTsNCisJc3Bpbl91bmxvY2soJmlzYy0+ YXdiX2xvY2spOw0KK30NCisNCitzdGF0aWMgdm9pZCBpc2Nfc2V0X3BpcGVsaW5lKHN0cnVjdCBp c2NfZGV2aWNlICppc2MsIHUzMiBwaXBlbGluZSkNCit7DQorCXN0cnVjdCByZWdtYXAgKnJlZ21h cCA9IGlzYy0+cmVnbWFwOw0KKwlzdHJ1Y3QgaXNjX2N0cmxzICpjdHJscyA9ICZpc2MtPmN0cmxz Ow0KKwl1MzIgdmFsLCBiYXlfY2ZnOw0KKwljb25zdCB1MzIgKmdhbW1hOw0KKwl1bnNpZ25lZCBp bnQgaTsNCisNCisJLyogV0ItLT5DRkEtLT5DQy0tPkdBTS0tPkNTQy0tPkNCQy0tPlNVQjQyMi0t PlNVQjQyMCAqLw0KKwlmb3IgKGkgPSAwOyBpIDwgSVNDX1BJUEVfTElORV9OT0RFX05VTTsgaSsr KSB7DQorCQl2YWwgPSBwaXBlbGluZSAmIEJJVChpKSA/IDEgOiAwOw0KKwkJcmVnbWFwX2ZpZWxk X3dyaXRlKGlzYy0+cGlwZWxpbmVbaV0sIHZhbCk7DQorCX0NCisNCisJaWYgKCFwaXBlbGluZSkN CisJCXJldHVybjsNCisNCisJYmF5X2NmZyA9IGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+Y2ZhX2Jh eWNmZzsNCisNCisJaWYgKGN0cmxzLT5hd2IgPT0gSVNDX1dCX05PTkUpDQorCQlpc2NfcmVzZXRf YXdiX2N0cmxzKGlzYyk7DQorDQorCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19XQl9DRkcsIGJh eV9jZmcpOw0KKwlpc2NfdXBkYXRlX2F3Yl9jdHJscyhpc2MpOw0KKw0KKwlyZWdtYXBfd3JpdGUo cmVnbWFwLCBJU0NfQ0ZBX0NGRywgYmF5X2NmZyB8IElTQ19DRkFfQ0ZHX0VJVFBPTCk7DQorDQor CWdhbW1hID0gJmlzY19nYW1tYV90YWJsZVtjdHJscy0+Z2FtbWFfaW5kZXhdWzBdOw0KKwlyZWdt YXBfYnVsa193cml0ZShyZWdtYXAsIElTQ19HQU1fQkVOVFJZLCBnYW1tYSwgR0FNTUFfRU5UUklF Uyk7DQorCXJlZ21hcF9idWxrX3dyaXRlKHJlZ21hcCwgSVNDX0dBTV9HRU5UUlksIGdhbW1hLCBH QU1NQV9FTlRSSUVTKTsNCisJcmVnbWFwX2J1bGtfd3JpdGUocmVnbWFwLCBJU0NfR0FNX1JFTlRS WSwgZ2FtbWEsIEdBTU1BX0VOVFJJRVMpOw0KKw0KKwkvKiBDb252ZXJ0IFJHQiB0byBZVVYgKi8N CisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NTQ19ZUl9ZRywgMHg0MiB8ICgweDgxIDw8IDE2 KSk7DQorCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DU0NfWUJfT1ksIDB4MTkgfCAoMHgxMCA8 PCAxNikpOw0KKwlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfQ1NDX0NCUl9DQkcsIDB4RkRBIHwg KDB4RkI2IDw8IDE2KSk7DQorCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DU0NfQ0JCX09DQiwg MHg3MCB8ICgweDgwIDw8IDE2KSk7DQorCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DU0NfQ1JS X0NSRywgMHg3MCB8ICgweEZBMiA8PCAxNikpOw0KKwlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0Nf Q1NDX0NSQl9PQ1IsIDB4RkVFIHwgKDB4ODAgPDwgMTYpKTsNCisNCisJcmVnbWFwX3dyaXRlKHJl Z21hcCwgSVNDX0NCQ19CUklHSFQsIGN0cmxzLT5icmlnaHRuZXNzKTsNCisJcmVnbWFwX3dyaXRl KHJlZ21hcCwgSVNDX0NCQ19DT05UUkFTVCwgY3RybHMtPmNvbnRyYXN0KTsNCit9DQorDQorc3Rh dGljIGludCBpc2NfdXBkYXRlX3Byb2ZpbGUoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCit7DQor CXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0KKwl1MzIgc3I7DQorCWludCBj b3VudGVyID0gMTAwOw0KKw0KKwlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfQ1RSTEVOLCBJU0Nf Q1RSTF9VUFBSTyk7DQorDQorCXJlZ21hcF9yZWFkKHJlZ21hcCwgSVNDX0NUUkxTUiwgJnNyKTsN CisJd2hpbGUgKChzciAmIElTQ19DVFJMX1VQUFJPKSAmJiBjb3VudGVyLS0pIHsNCisJCXVzbGVl cF9yYW5nZSgxMDAwLCAyMDAwKTsNCisJCXJlZ21hcF9yZWFkKHJlZ21hcCwgSVNDX0NUUkxTUiwg JnNyKTsNCisJfQ0KKw0KKwlpZiAoY291bnRlciA8IDApIHsNCisJCXY0bDJfd2FybigmaXNjLT52 NGwyX2RldiwgIlRpbWUgb3V0IHRvIHVwZGF0ZSBwcm9maWxlXG4iKTsNCisJCXJldHVybiAtRVRJ TUVET1VUOw0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgdm9pZCBpc2Nfc2V0 X2hpc3RvZ3JhbShzdHJ1Y3QgaXNjX2RldmljZSAqaXNjLCBib29sIGVuYWJsZSkNCit7DQorCXN0 cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0KKwlzdHJ1Y3QgaXNjX2N0cmxzICpj dHJscyA9ICZpc2MtPmN0cmxzOw0KKw0KKwlpZiAoZW5hYmxlKSB7DQorCQlyZWdtYXBfd3JpdGUo cmVnbWFwLCBJU0NfSElTX0NGRywNCisJCQkgICAgIElTQ19ISVNfQ0ZHX01PREVfR1IgfA0KKwkJ CSAgICAgKGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+Y2ZhX2JheWNmZw0KKwkJCQkJPDwgSVNDX0hJ U19DRkdfQkFZU0VMX1NISUZUKSB8DQorCQkJCQlJU0NfSElTX0NGR19SQVIpOw0KKwkJcmVnbWFw X3dyaXRlKHJlZ21hcCwgSVNDX0hJU19DVFJMLCBJU0NfSElTX0NUUkxfRU4pOw0KKwkJcmVnbWFw X3dyaXRlKHJlZ21hcCwgSVNDX0lOVEVOLCBJU0NfSU5UX0hJU0RPTkUpOw0KKwkJY3RybHMtPmhp c3RfaWQgPSBJU0NfSElTX0NGR19NT0RFX0dSOw0KKwkJaXNjX3VwZGF0ZV9wcm9maWxlKGlzYyk7 DQorCQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfQ1RSTEVOLCBJU0NfQ1RSTF9ISVNSRVEpOw0K Kw0KKwkJY3RybHMtPmhpc3Rfc3RhdCA9IEhJU1RfRU5BQkxFRDsNCisJfSBlbHNlIHsNCisJCXJl Z21hcF93cml0ZShyZWdtYXAsIElTQ19JTlRESVMsIElTQ19JTlRfSElTRE9ORSk7DQorCQlyZWdt YXBfd3JpdGUocmVnbWFwLCBJU0NfSElTX0NUUkwsIElTQ19ISVNfQ1RSTF9ESVMpOw0KKw0KKwkJ Y3RybHMtPmhpc3Rfc3RhdCA9IEhJU1RfRElTQUJMRUQ7DQorCX0NCit9DQorDQorc3RhdGljIGlu dCBpc2NfY29uZmlndXJlKHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQorew0KKwlzdHJ1Y3QgcmVn bWFwICpyZWdtYXAgPSBpc2MtPnJlZ21hcDsNCisJdTMyIHBmZV9jZmcwLCBybHBfbW9kZSwgZGNm ZywgbWFzaywgcGlwZWxpbmU7DQorCXN0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eSAqc3ViZGV2ID0g aXNjLT5jdXJyZW50X3N1YmRldjsNCisNCisJcGZlX2NmZzAgPSBpc2MtPmNvbmZpZy5zZF9mb3Jt YXQtPnBmZV9jZmcwX2JwczsNCisJcmxwX21vZGUgPSBpc2MtPmNvbmZpZy5ybHBfY2ZnX21vZGU7 DQorCXBpcGVsaW5lID0gaXNjLT5jb25maWcuYml0c19waXBlbGluZTsNCisNCisJZGNmZyA9IGlz Yy0+Y29uZmlnLmRjZmdfaW1vZGUgfA0KKwkJICAgICAgIElTQ19EQ0ZHX1lNQlNJWkVfQkVBVFM4 IHwgSVNDX0RDRkdfQ01CU0laRV9CRUFUUzg7DQorDQorCXBmZV9jZmcwICB8PSBzdWJkZXYtPnBm ZV9jZmcwIHwgSVNDX1BGRV9DRkcwX01PREVfUFJPR1JFU1NJVkU7DQorCW1hc2sgPSBJU0NfUEZF X0NGRzBfQlBTX01BU0sgfCBJU0NfUEZFX0NGRzBfSFBPTF9MT1cgfA0KKwkgICAgICAgSVNDX1BG RV9DRkcwX1ZQT0xfTE9XIHwgSVNDX1BGRV9DRkcwX1BQT0xfTE9XIHwNCisJICAgICAgIElTQ19Q RkVfQ0ZHMF9NT0RFX01BU0sgfCBJU0NfUEZFX0NGRzBfQ0NJUl9DUkMgfA0KKwkJICAgSVNDX1BG RV9DRkcwX0NDSVI2NTY7DQorDQorCXJlZ21hcF91cGRhdGVfYml0cyhyZWdtYXAsIElTQ19QRkVf Q0ZHMCwgbWFzaywgcGZlX2NmZzApOw0KKw0KKwlyZWdtYXBfdXBkYXRlX2JpdHMocmVnbWFwLCBJ U0NfUkxQX0NGRywgSVNDX1JMUF9DRkdfTU9ERV9NQVNLLA0KKwkJCSAgIHJscF9tb2RlKTsNCisN CisJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0RDRkcsIGRjZmcpOw0KKw0KKwkvKiBTZXQgdGhl IHBpcGVsaW5lICovDQorCWlzY19zZXRfcGlwZWxpbmUoaXNjLCBwaXBlbGluZSk7DQorDQorCS8q DQorCSAqIFRoZSBjdXJyZW50IGltcGxlbWVudGVkIGhpc3RvZ3JhbSBpcyBhdmFpbGFibGUgZm9y IFJBVyBSLCBCLCBHQiwgR1INCisJICogY2hhbm5lbHMuIFdlIG5lZWQgdG8gY2hlY2sgaWYgc2Vu c29yIGlzIG91dHB1dHRpbmcgUkFXIEJBWUVSDQorCSAqLw0KKwlpZiAoaXNjLT5jdHJscy5hd2Ig JiYNCisJICAgIElTQ19JU19GT1JNQVRfUkFXKGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19j b2RlKSkNCisJCWlzY19zZXRfaGlzdG9ncmFtKGlzYywgdHJ1ZSk7DQorCWVsc2UNCisJCWlzY19z ZXRfaGlzdG9ncmFtKGlzYywgZmFsc2UpOw0KKw0KKwkvKiBVcGRhdGUgcHJvZmlsZSAqLw0KKwly ZXR1cm4gaXNjX3VwZGF0ZV9wcm9maWxlKGlzYyk7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNjX3N0 YXJ0X3N0cmVhbWluZyhzdHJ1Y3QgdmIyX3F1ZXVlICp2cSwgdW5zaWduZWQgaW50IGNvdW50KQ0K K3sNCisJc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpOw0KKwlz dHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBpc2MtPnJlZ21hcDsNCisJc3RydWN0IGlzY19idWZmZXIg KmJ1ZjsNCisJdW5zaWduZWQgbG9uZyBmbGFnczsNCisJaW50IHJldDsNCisNCisJLyogRW5hYmxl IHN0cmVhbSBvbiB0aGUgc3ViIGRldmljZSAqLw0KKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKGlz Yy0+Y3VycmVudF9zdWJkZXYtPnNkLCB2aWRlbywgc19zdHJlYW0sIDEpOw0KKwlpZiAocmV0ICYm IHJldCAhPSAtRU5PSU9DVExDTUQpIHsNCisJCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LCAic3Ry ZWFtIG9uIGZhaWxlZCBpbiBzdWJkZXYgJWRcbiIsDQorCQkJIHJldCk7DQorCQlnb3RvIGVycl9z dGFydF9zdHJlYW07DQorCX0NCisNCisJcG1fcnVudGltZV9nZXRfc3luYyhpc2MtPmRldik7DQor DQorCXJldCA9IGlzY19jb25maWd1cmUoaXNjKTsNCisJaWYgKHVubGlrZWx5KHJldCkpDQorCQln b3RvIGVycl9jb25maWd1cmU7DQorDQorCS8qIEVuYWJsZSBETUEgaW50ZXJydXB0ICovDQorCXJl Z21hcF93cml0ZShyZWdtYXAsIElTQ19JTlRFTiwgSVNDX0lOVF9ERE9ORSk7DQorDQorCXNwaW5f bG9ja19pcnFzYXZlKCZpc2MtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7DQorDQorCWlzYy0+c2Vx dWVuY2UgPSAwOw0KKwlpc2MtPnN0b3AgPSBmYWxzZTsNCisJcmVpbml0X2NvbXBsZXRpb24oJmlz Yy0+Y29tcCk7DQorDQorCWlzYy0+Y3VyX2ZybSA9IGxpc3RfZmlyc3RfZW50cnkoJmlzYy0+ZG1h X3F1ZXVlLA0KKwkJCQkJc3RydWN0IGlzY19idWZmZXIsIGxpc3QpOw0KKwlsaXN0X2RlbCgmaXNj LT5jdXJfZnJtLT5saXN0KTsNCisNCisJaXNjX3N0YXJ0X2RtYShpc2MpOw0KKw0KKwlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZpc2MtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7DQorDQorCS8qIGlm IHdlIHN0cmVhbWluZyBmcm9tIFJBVywgd2UgY2FuIGRvIG9uZS1zaG90IHdoaXRlIGJhbGFuY2Ug YWRqICovDQorCWlmIChJU0NfSVNfRk9STUFUX1JBVyhpc2MtPmNvbmZpZy5zZF9mb3JtYXQtPm1i dXNfY29kZSkpDQorCQl2NGwyX2N0cmxfYWN0aXZhdGUoaXNjLT5kb193Yl9jdHJsLCB0cnVlKTsN CisNCisJcmV0dXJuIDA7DQorDQorZXJyX2NvbmZpZ3VyZToNCisJcG1fcnVudGltZV9wdXRfc3lu Yyhpc2MtPmRldik7DQorDQorCXY0bDJfc3ViZGV2X2NhbGwoaXNjLT5jdXJyZW50X3N1YmRldi0+ c2QsIHZpZGVvLCBzX3N0cmVhbSwgMCk7DQorDQorZXJyX3N0YXJ0X3N0cmVhbToNCisJc3Bpbl9s b2NrX2lycXNhdmUoJmlzYy0+ZG1hX3F1ZXVlX2xvY2ssIGZsYWdzKTsNCisJbGlzdF9mb3JfZWFj aF9lbnRyeShidWYsICZpc2MtPmRtYV9xdWV1ZSwgbGlzdCkNCisJCXZiMl9idWZmZXJfZG9uZSgm YnVmLT52Yi52YjJfYnVmLCBWQjJfQlVGX1NUQVRFX1FVRVVFRCk7DQorCUlOSVRfTElTVF9IRUFE KCZpc2MtPmRtYV9xdWV1ZSk7DQorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzYy0+ZG1hX3F1 ZXVlX2xvY2ssIGZsYWdzKTsNCisNCisJcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIHZvaWQg aXNjX3N0b3Bfc3RyZWFtaW5nKHN0cnVjdCB2YjJfcXVldWUgKnZxKQ0KK3sNCisJc3RydWN0IGlz Y19kZXZpY2UgKmlzYyA9IHZiMl9nZXRfZHJ2X3ByaXYodnEpOw0KKwl1bnNpZ25lZCBsb25nIGZs YWdzOw0KKwlzdHJ1Y3QgaXNjX2J1ZmZlciAqYnVmOw0KKwlpbnQgcmV0Ow0KKw0KKwl2NGwyX2N0 cmxfYWN0aXZhdGUoaXNjLT5kb193Yl9jdHJsLCBmYWxzZSk7DQorDQorCWlzYy0+c3RvcCA9IHRy dWU7DQorDQorCS8qIFdhaXQgdW50aWwgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBmcmFtZSAqLw0K KwlpZiAoaXNjLT5jdXJfZnJtICYmICF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmlzYy0+ Y29tcCwgNSAqIEhaKSkNCisJCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LA0KKwkJCSAiVGltZW91 dCB3YWl0aW5nIGZvciBlbmQgb2YgdGhlIGNhcHR1cmVcbiIpOw0KKw0KKwkvKiBEaXNhYmxlIERN QSBpbnRlcnJ1cHQgKi8NCisJcmVnbWFwX3dyaXRlKGlzYy0+cmVnbWFwLCBJU0NfSU5URElTLCBJ U0NfSU5UX0RET05FKTsNCisNCisJcG1fcnVudGltZV9wdXRfc3luYyhpc2MtPmRldik7DQorDQor CS8qIERpc2FibGUgc3RyZWFtIG9uIHRoZSBzdWIgZGV2aWNlICovDQorCXJldCA9IHY0bDJfc3Vi ZGV2X2NhbGwoaXNjLT5jdXJyZW50X3N1YmRldi0+c2QsIHZpZGVvLCBzX3N0cmVhbSwgMCk7DQor CWlmIChyZXQgJiYgcmV0ICE9IC1FTk9JT0NUTENNRCkNCisJCXY0bDJfZXJyKCZpc2MtPnY0bDJf ZGV2LCAic3RyZWFtIG9mZiBmYWlsZWQgaW4gc3ViZGV2XG4iKTsNCisNCisJLyogUmVsZWFzZSBh bGwgYWN0aXZlIGJ1ZmZlcnMgKi8NCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlzYy0+ZG1hX3F1ZXVl X2xvY2ssIGZsYWdzKTsNCisJaWYgKHVubGlrZWx5KGlzYy0+Y3VyX2ZybSkpIHsNCisJCXZiMl9i dWZmZXJfZG9uZSgmaXNjLT5jdXJfZnJtLT52Yi52YjJfYnVmLA0KKwkJCQlWQjJfQlVGX1NUQVRF X0VSUk9SKTsNCisJCWlzYy0+Y3VyX2ZybSA9IE5VTEw7DQorCX0NCisJbGlzdF9mb3JfZWFjaF9l bnRyeShidWYsICZpc2MtPmRtYV9xdWV1ZSwgbGlzdCkNCisJCXZiMl9idWZmZXJfZG9uZSgmYnVm LT52Yi52YjJfYnVmLCBWQjJfQlVGX1NUQVRFX0VSUk9SKTsNCisJSU5JVF9MSVNUX0hFQUQoJmlz Yy0+ZG1hX3F1ZXVlKTsNCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNjLT5kbWFfcXVldWVf bG9jaywgZmxhZ3MpOw0KK30NCisNCitzdGF0aWMgdm9pZCBpc2NfYnVmZmVyX3F1ZXVlKHN0cnVj dCB2YjJfYnVmZmVyICp2YikNCit7DQorCXN0cnVjdCB2YjJfdjRsMl9idWZmZXIgKnZidWYgPSB0 b192YjJfdjRsMl9idWZmZXIodmIpOw0KKwlzdHJ1Y3QgaXNjX2J1ZmZlciAqYnVmID0gY29udGFp bmVyX29mKHZidWYsIHN0cnVjdCBpc2NfYnVmZmVyLCB2Yik7DQorCXN0cnVjdCBpc2NfZGV2aWNl ICppc2MgPSB2YjJfZ2V0X2Rydl9wcml2KHZiLT52YjJfcXVldWUpOw0KKwl1bnNpZ25lZCBsb25n IGZsYWdzOw0KKw0KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXNjLT5kbWFfcXVldWVfbG9jaywgZmxh Z3MpOw0KKwlpZiAoIWlzYy0+Y3VyX2ZybSAmJiBsaXN0X2VtcHR5KCZpc2MtPmRtYV9xdWV1ZSkg JiYNCisJCXZiMl9pc19zdHJlYW1pbmcodmItPnZiMl9xdWV1ZSkpIHsNCisJCWlzYy0+Y3VyX2Zy bSA9IGJ1ZjsNCisJCWlzY19zdGFydF9kbWEoaXNjKTsNCisJfSBlbHNlDQorCQlsaXN0X2FkZF90 YWlsKCZidWYtPmxpc3QsICZpc2MtPmRtYV9xdWV1ZSk7DQorCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJmlzYy0+ZG1hX3F1ZXVlX2xvY2ssIGZsYWdzKTsNCit9DQorDQorc3RhdGljIHN0cnVjdCBp c2NfZm9ybWF0ICpmaW5kX2Zvcm1hdF9ieV9mb3VyY2Moc3RydWN0IGlzY19kZXZpY2UgKmlzYywN CisJCQkJCQkgdW5zaWduZWQgaW50IGZvdXJjYykNCit7DQorCXVuc2lnbmVkIGludCBudW1fZm9y bWF0cyA9IGlzYy0+bnVtX3VzZXJfZm9ybWF0czsNCisJc3RydWN0IGlzY19mb3JtYXQgKmZtdDsN CisJdW5zaWduZWQgaW50IGk7DQorDQorCWZvciAoaSA9IDA7IGkgPCBudW1fZm9ybWF0czsgaSsr KSB7DQorCQlmbXQgPSBpc2MtPnVzZXJfZm9ybWF0c1tpXTsNCisJCWlmIChmbXQtPmZvdXJjYyA9 PSBmb3VyY2MpDQorCQkJcmV0dXJuIGZtdDsNCisJfQ0KKw0KKwlyZXR1cm4gTlVMTDsNCit9DQor DQorc3RhdGljIGNvbnN0IHN0cnVjdCB2YjJfb3BzIGlzY192YjJfb3BzID0gew0KKwkucXVldWVf c2V0dXAJCT0gaXNjX3F1ZXVlX3NldHVwLA0KKwkud2FpdF9wcmVwYXJlCQk9IHZiMl9vcHNfd2Fp dF9wcmVwYXJlLA0KKwkud2FpdF9maW5pc2gJCT0gdmIyX29wc193YWl0X2ZpbmlzaCwNCisJLmJ1 Zl9wcmVwYXJlCQk9IGlzY19idWZmZXJfcHJlcGFyZSwNCisJLnN0YXJ0X3N0cmVhbWluZwk9IGlz Y19zdGFydF9zdHJlYW1pbmcsDQorCS5zdG9wX3N0cmVhbWluZwkJPSBpc2Nfc3RvcF9zdHJlYW1p bmcsDQorCS5idWZfcXVldWUJCT0gaXNjX2J1ZmZlcl9xdWV1ZSwNCit9Ow0KKw0KK3N0YXRpYyBp bnQgaXNjX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LA0KKwkJCSBzdHJ1 Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApDQorew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0g dmlkZW9fZHJ2ZGF0YShmaWxlKTsNCisNCisJc3Ryc2NweShjYXAtPmRyaXZlciwgQVRNRUxfSVND X05BTUUsIHNpemVvZihjYXAtPmRyaXZlcikpOw0KKwlzdHJzY3B5KGNhcC0+Y2FyZCwgIkF0bWVs IEltYWdlIFNlbnNvciBDb250cm9sbGVyIiwgc2l6ZW9mKGNhcC0+Y2FyZCkpOw0KKwlzbnByaW50 ZihjYXAtPmJ1c19pbmZvLCBzaXplb2YoY2FwLT5idXNfaW5mbyksDQorCQkgInBsYXRmb3JtOiVz IiwgaXNjLT52NGwyX2Rldi5uYW1lKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBp bnQgaXNjX2VudW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsDQor CQkJCSBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQ0KK3sNCisJdTMyIGluZGV4ID0gZi0+aW5kZXg7 DQorCXUzMiBpLCBzdXBwb3J0ZWRfaW5kZXg7DQorDQorCWlmIChpbmRleCA8IEFSUkFZX1NJWkUo Y29udHJvbGxlcl9mb3JtYXRzKSkgew0KKwkJZi0+cGl4ZWxmb3JtYXQgPSBjb250cm9sbGVyX2Zv cm1hdHNbaW5kZXhdLmZvdXJjYzsNCisJCXJldHVybiAwOw0KKwl9DQorDQorCWluZGV4IC09IEFS UkFZX1NJWkUoY29udHJvbGxlcl9mb3JtYXRzKTsNCisNCisJaSA9IDA7DQorCXN1cHBvcnRlZF9p bmRleCA9IDA7DQorDQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGZvcm1hdHNfbGlzdCk7 IGkrKykgew0KKwkJaWYgKCFJU0NfSVNfRk9STUFUX1JBVyhmb3JtYXRzX2xpc3RbaV0ubWJ1c19j b2RlKSB8fA0KKwkJICAgICFmb3JtYXRzX2xpc3RbaV0uc2Rfc3VwcG9ydCkNCisJCQljb250aW51 ZTsNCisJCWlmIChzdXBwb3J0ZWRfaW5kZXggPT0gaW5kZXgpIHsNCisJCQlmLT5waXhlbGZvcm1h dCA9IGZvcm1hdHNfbGlzdFtpXS5mb3VyY2M7DQorCQkJcmV0dXJuIDA7DQorCQl9DQorCQlzdXBw b3J0ZWRfaW5kZXgrKzsNCisJfQ0KKw0KKwlyZXR1cm4gLUVJTlZBTDsNCit9DQorDQorc3RhdGlj IGludCBpc2NfZ19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCisJ CQkgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkNCit7DQorCXN0cnVjdCBpc2NfZGV2aWNl ICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KKw0KKwkqZm10ID0gaXNjLT5mbXQ7DQorDQor CXJldHVybiAwOw0KK30NCisNCisvKg0KKyAqIENoZWNrcyB0aGUgY3VycmVudCBjb25maWd1cmVk IGZvcm1hdCwgaWYgSVNDIGNhbiBvdXRwdXQgaXQsDQorICogY29uc2lkZXJpbmcgd2hpY2ggdHlw ZSBvZiBmb3JtYXQgdGhlIElTQyByZWNlaXZlcyBmcm9tIHRoZSBzZW5zb3INCisgKi8NCitzdGF0 aWMgaW50IGlzY190cnlfdmFsaWRhdGVfZm9ybWF0cyhzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0K K3sNCisJaW50IHJldDsNCisJYm9vbCBiYXllciA9IGZhbHNlLCB5dXYgPSBmYWxzZSwgcmdiID0g ZmFsc2UsIGdyZXkgPSBmYWxzZTsNCisNCisJLyogYWxsIGZvcm1hdHMgc3VwcG9ydGVkIGJ5IHRo ZSBSTFAgbW9kdWxlIGFyZSBPSyAqLw0KKwlzd2l0Y2ggKGlzYy0+dHJ5X2NvbmZpZy5mb3VyY2Mp IHsNCisJY2FzZSBWNEwyX1BJWF9GTVRfU0JHR1I4Og0KKwljYXNlIFY0TDJfUElYX0ZNVF9TR0JS Rzg6DQorCWNhc2UgVjRMMl9QSVhfRk1UX1NHUkJHODoNCisJY2FzZSBWNEwyX1BJWF9GTVRfU1JH R0I4Og0KKwljYXNlIFY0TDJfUElYX0ZNVF9TQkdHUjEwOg0KKwljYXNlIFY0TDJfUElYX0ZNVF9T R0JSRzEwOg0KKwljYXNlIFY0TDJfUElYX0ZNVF9TR1JCRzEwOg0KKwljYXNlIFY0TDJfUElYX0ZN VF9TUkdHQjEwOg0KKwljYXNlIFY0TDJfUElYX0ZNVF9TQkdHUjEyOg0KKwljYXNlIFY0TDJfUElY X0ZNVF9TR0JSRzEyOg0KKwljYXNlIFY0TDJfUElYX0ZNVF9TR1JCRzEyOg0KKwljYXNlIFY0TDJf UElYX0ZNVF9TUkdHQjEyOg0KKwkJcmV0ID0gMDsNCisJCWJheWVyID0gdHJ1ZTsNCisJCWJyZWFr Ow0KKw0KKwljYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjA6DQorCWNhc2UgVjRMMl9QSVhfRk1UX1lV VjQyMlA6DQorCWNhc2UgVjRMMl9QSVhfRk1UX1lVWVY6DQorCQlyZXQgPSAwOw0KKwkJeXV2ID0g dHJ1ZTsNCisJCWJyZWFrOw0KKw0KKwljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjU6DQorCWNhc2Ug VjRMMl9QSVhfRk1UX0FCR1IzMjoNCisJY2FzZSBWNEwyX1BJWF9GTVRfWEJHUjMyOg0KKwljYXNl IFY0TDJfUElYX0ZNVF9BUkdCNDQ0Og0KKwljYXNlIFY0TDJfUElYX0ZNVF9BUkdCNTU1Og0KKwkJ cmV0ID0gMDsNCisJCXJnYiA9IHRydWU7DQorCQlicmVhazsNCisJY2FzZSBWNEwyX1BJWF9GTVRf R1JFWToNCisJCXJldCA9IDA7DQorCQlncmV5ID0gdHJ1ZTsNCisJCWJyZWFrOw0KKwlkZWZhdWx0 Og0KKwkvKiBhbnkgb3RoZXIgZGlmZmVyZW50IGZvcm1hdHMgYXJlIG5vdCBzdXBwb3J0ZWQgKi8N CisJCXJldCA9IC1FSU5WQUw7DQorCX0NCisNCisJLyogd2UgY2Fubm90IG91dHB1dCBSQVcvR3Jl eSBpZiB3ZSBkbyBub3QgcmVjZWl2ZSBSQVcgKi8NCisJaWYgKChiYXllciB8fCBncmV5KSAmJg0K KwkgICAgIUlTQ19JU19GT1JNQVRfUkFXKGlzYy0+dHJ5X2NvbmZpZy5zZF9mb3JtYXQtPm1idXNf Y29kZSkpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJdjRsMl9kYmcoMSwgZGVidWcsICZpc2Mt PnY0bDJfZGV2LA0KKwkJICJGb3JtYXQgdmFsaWRhdGlvbiwgcmVxdWVzdGVkIHJnYj0ldSwgeXV2 PSV1LCBncmV5PSV1LCBiYXllcj0ldVxuIiwNCisJCSByZ2IsIHl1diwgZ3JleSwgYmF5ZXIpOw0K Kw0KKwlyZXR1cm4gcmV0Ow0KK30NCisNCisvKg0KKyAqIENvbmZpZ3VyZXMgdGhlIFJMUCBhbmQg RE1BIG1vZHVsZXMsIGRlcGVuZGluZyBvbiB0aGUgb3V0cHV0IGZvcm1hdA0KKyAqIGNvbmZpZ3Vy ZWQgZm9yIHRoZSBJU0MuDQorICogSWYgZGlyZWN0X2R1bXAgPT0gdHJ1ZSwganVzdCBkdW1wIHJh dyBkYXRhIDggYml0cy4NCisgKi8NCitzdGF0aWMgaW50IGlzY190cnlfY29uZmlndXJlX3JscF9k bWEoc3RydWN0IGlzY19kZXZpY2UgKmlzYywgYm9vbCBkaXJlY3RfZHVtcCkNCit7DQorCWlmIChk aXJlY3RfZHVtcCkgew0KKwkJaXNjLT50cnlfY29uZmlnLnJscF9jZmdfbW9kZSA9IElTQ19STFBf Q0ZHX01PREVfREFUODsNCisJCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdf SU1PREVfUEFDS0VEODsNCisJCWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9kdmlldyA9IElTQ19EQ1RS TF9EVklFV19QQUNLRUQ7DQorCQlpc2MtPnRyeV9jb25maWcuYnBwID0gMTY7DQorCQlyZXR1cm4g MDsNCisJfQ0KKw0KKwlzd2l0Y2ggKGlzYy0+dHJ5X2NvbmZpZy5mb3VyY2MpIHsNCisJY2FzZSBW NEwyX1BJWF9GTVRfU0JHR1I4Og0KKwljYXNlIFY0TDJfUElYX0ZNVF9TR0JSRzg6DQorCWNhc2Ug VjRMMl9QSVhfRk1UX1NHUkJHODoNCisJY2FzZSBWNEwyX1BJWF9GTVRfU1JHR0I4Og0KKwkJaXNj LT50cnlfY29uZmlnLnJscF9jZmdfbW9kZSA9IElTQ19STFBfQ0ZHX01PREVfREFUODsNCisJCWlz Yy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdfSU1PREVfUEFDS0VEODsNCisJCWlz Yy0+dHJ5X2NvbmZpZy5kY3RybF9kdmlldyA9IElTQ19EQ1RSTF9EVklFV19QQUNLRUQ7DQorCQlp c2MtPnRyeV9jb25maWcuYnBwID0gODsNCisJCWJyZWFrOw0KKwljYXNlIFY0TDJfUElYX0ZNVF9T QkdHUjEwOg0KKwljYXNlIFY0TDJfUElYX0ZNVF9TR0JSRzEwOg0KKwljYXNlIFY0TDJfUElYX0ZN VF9TR1JCRzEwOg0KKwljYXNlIFY0TDJfUElYX0ZNVF9TUkdHQjEwOg0KKwkJaXNjLT50cnlfY29u ZmlnLnJscF9jZmdfbW9kZSA9IElTQ19STFBfQ0ZHX01PREVfREFUMTA7DQorCQlpc2MtPnRyeV9j b25maWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDE2Ow0KKwkJaXNjLT50cnlf Y29uZmlnLmRjdHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tFRDsNCisJCWlzYy0+dHJ5 X2NvbmZpZy5icHAgPSAxNjsNCisJCWJyZWFrOw0KKwljYXNlIFY0TDJfUElYX0ZNVF9TQkdHUjEy Og0KKwljYXNlIFY0TDJfUElYX0ZNVF9TR0JSRzEyOg0KKwljYXNlIFY0TDJfUElYX0ZNVF9TR1JC RzEyOg0KKwljYXNlIFY0TDJfUElYX0ZNVF9TUkdHQjEyOg0KKwkJaXNjLT50cnlfY29uZmlnLnJs cF9jZmdfbW9kZSA9IElTQ19STFBfQ0ZHX01PREVfREFUMTI7DQorCQlpc2MtPnRyeV9jb25maWcu ZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDE2Ow0KKwkJaXNjLT50cnlfY29uZmln LmRjdHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tFRDsNCisJCWlzYy0+dHJ5X2NvbmZp Zy5icHAgPSAxNjsNCisJCWJyZWFrOw0KKwljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjU6DQorCQlp c2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9SR0I1NjU7DQor CQlpc2MtPnRyeV9jb25maWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDE2Ow0K KwkJaXNjLT50cnlfY29uZmlnLmRjdHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tFRDsN CisJCWlzYy0+dHJ5X2NvbmZpZy5icHAgPSAxNjsNCisJCWJyZWFrOw0KKwljYXNlIFY0TDJfUElY X0ZNVF9BUkdCNDQ0Og0KKwkJaXNjLT50cnlfY29uZmlnLnJscF9jZmdfbW9kZSA9IElTQ19STFBf Q0ZHX01PREVfQVJHQjQ0NDsNCisJCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RD RkdfSU1PREVfUEFDS0VEMTY7DQorCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0Nf RENUUkxfRFZJRVdfUEFDS0VEOw0KKwkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDE2Ow0KKwkJYnJl YWs7DQorCWNhc2UgVjRMMl9QSVhfRk1UX0FSR0I1NTU6DQorCQlpc2MtPnRyeV9jb25maWcucmxw X2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9BUkdCNTU1Ow0KKwkJaXNjLT50cnlfY29uZmln LmRjZmdfaW1vZGUgPSBJU0NfRENGR19JTU9ERV9QQUNLRUQxNjsNCisJCWlzYy0+dHJ5X2NvbmZp Zy5kY3RybF9kdmlldyA9IElTQ19EQ1RSTF9EVklFV19QQUNLRUQ7DQorCQlpc2MtPnRyeV9jb25m aWcuYnBwID0gMTY7DQorCQlicmVhazsNCisJY2FzZSBWNEwyX1BJWF9GTVRfQUJHUjMyOg0KKwlj YXNlIFY0TDJfUElYX0ZNVF9YQkdSMzI6DQorCQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2Rl ID0gSVNDX1JMUF9DRkdfTU9ERV9BUkdCMzI7DQorCQlpc2MtPnRyeV9jb25maWcuZGNmZ19pbW9k ZSA9IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDMyOw0KKwkJaXNjLT50cnlfY29uZmlnLmRjdHJsX2R2 aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tFRDsNCisJCWlzYy0+dHJ5X2NvbmZpZy5icHAgPSAz MjsNCisJCWJyZWFrOw0KKwljYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjA6DQorCQlpc2MtPnRyeV9j b25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9ZWUNDOw0KKwkJaXNjLT50cnlf Y29uZmlnLmRjZmdfaW1vZGUgPSBJU0NfRENGR19JTU9ERV9ZQzQyMFA7DQorCQlpc2MtPnRyeV9j b25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJRVdfUExBTkFSOw0KKwkJaXNjLT50cnlf Y29uZmlnLmJwcCA9IDEyOw0KKwkJYnJlYWs7DQorCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMlA6 DQorCQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9ZWUND Ow0KKwkJaXNjLT50cnlfY29uZmlnLmRjZmdfaW1vZGUgPSBJU0NfRENGR19JTU9ERV9ZQzQyMlA7 DQorCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJRVdfUExBTkFS Ow0KKwkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDE2Ow0KKwkJYnJlYWs7DQorCWNhc2UgVjRMMl9Q SVhfRk1UX1lVWVY6DQorCQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9D RkdfTU9ERV9ZWUNDOw0KKwkJaXNjLT50cnlfY29uZmlnLmRjZmdfaW1vZGUgPSBJU0NfRENGR19J TU9ERV9QQUNLRUQzMjsNCisJCWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9kdmlldyA9IElTQ19EQ1RS TF9EVklFV19QQUNLRUQ7DQorCQlpc2MtPnRyeV9jb25maWcuYnBwID0gMTY7DQorCQlicmVhazsN CisJY2FzZSBWNEwyX1BJWF9GTVRfR1JFWToNCisJCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21v ZGUgPSBJU0NfUkxQX0NGR19NT0RFX0RBVFk4Ow0KKwkJaXNjLT50cnlfY29uZmlnLmRjZmdfaW1v ZGUgPSBJU0NfRENGR19JTU9ERV9QQUNLRUQ4Ow0KKwkJaXNjLT50cnlfY29uZmlnLmRjdHJsX2R2 aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tFRDsNCisJCWlzYy0+dHJ5X2NvbmZpZy5icHAgPSA4 Ow0KKwkJYnJlYWs7DQorCWRlZmF1bHQ6DQorCQlyZXR1cm4gLUVJTlZBTDsNCisJfQ0KKwlyZXR1 cm4gMDsNCit9DQorDQorLyoNCisgKiBDb25maWd1cmluZyBwaXBlbGluZSBtb2R1bGVzLCBkZXBl bmRpbmcgb24gd2hpY2ggZm9ybWF0IHRoZSBJU0Mgb3V0cHV0cw0KKyAqIGFuZCBjb25zaWRlcmlu ZyB3aGljaCBmb3JtYXQgaXQgaGFzIGFzIGlucHV0IGZyb20gdGhlIHNlbnNvci4NCisgKi8NCitz dGF0aWMgaW50IGlzY190cnlfY29uZmlndXJlX3BpcGVsaW5lKHN0cnVjdCBpc2NfZGV2aWNlICpp c2MpDQorew0KKwlzd2l0Y2ggKGlzYy0+dHJ5X2NvbmZpZy5mb3VyY2MpIHsNCisJY2FzZSBWNEwy X1BJWF9GTVRfUkdCNTY1Og0KKwljYXNlIFY0TDJfUElYX0ZNVF9BUkdCNTU1Og0KKwljYXNlIFY0 TDJfUElYX0ZNVF9BUkdCNDQ0Og0KKwljYXNlIFY0TDJfUElYX0ZNVF9BQkdSMzI6DQorCWNhc2Ug VjRMMl9QSVhfRk1UX1hCR1IzMjoNCisJCS8qIGlmIHNlbnNvciBmb3JtYXQgaXMgUkFXLCB3ZSBj b252ZXJ0IGluc2lkZSBJU0MgKi8NCisJCWlmIChJU0NfSVNfRk9STUFUX1JBVyhpc2MtPnRyeV9j b25maWcuc2RfZm9ybWF0LT5tYnVzX2NvZGUpKSB7DQorCQkJaXNjLT50cnlfY29uZmlnLmJpdHNf cGlwZWxpbmUgPSBDRkFfRU5BQkxFIHwNCisJCQkJV0JfRU5BQkxFIHwgR0FNX0VOQUJMRVM7DQor CQl9IGVsc2Ugew0KKwkJCWlzYy0+dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gMHgwOw0KKwkJ fQ0KKwkJYnJlYWs7DQorCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMDoNCisJCS8qIGlmIHNlbnNv ciBmb3JtYXQgaXMgUkFXLCB3ZSBjb252ZXJ0IGluc2lkZSBJU0MgKi8NCisJCWlmIChJU0NfSVNf Rk9STUFUX1JBVyhpc2MtPnRyeV9jb25maWcuc2RfZm9ybWF0LT5tYnVzX2NvZGUpKSB7DQorCQkJ aXNjLT50cnlfY29uZmlnLmJpdHNfcGlwZWxpbmUgPSBDRkFfRU5BQkxFIHwNCisJCQkJQ1NDX0VO QUJMRSB8IFdCX0VOQUJMRSB8IEdBTV9FTkFCTEVTIHwNCisJCQkJU1VCNDIwX0VOQUJMRSB8IFNV QjQyMl9FTkFCTEUgfCBDQkNfRU5BQkxFOw0KKwkJfSBlbHNlIHsNCisJCQlpc2MtPnRyeV9jb25m aWcuYml0c19waXBlbGluZSA9IDB4MDsNCisJCX0NCisJCWJyZWFrOw0KKwljYXNlIFY0TDJfUElY X0ZNVF9ZVVY0MjJQOg0KKwkJLyogaWYgc2Vuc29yIGZvcm1hdCBpcyBSQVcsIHdlIGNvbnZlcnQg aW5zaWRlIElTQyAqLw0KKwkJaWYgKElTQ19JU19GT1JNQVRfUkFXKGlzYy0+dHJ5X2NvbmZpZy5z ZF9mb3JtYXQtPm1idXNfY29kZSkpIHsNCisJCQlpc2MtPnRyeV9jb25maWcuYml0c19waXBlbGlu ZSA9IENGQV9FTkFCTEUgfA0KKwkJCQlDU0NfRU5BQkxFIHwgV0JfRU5BQkxFIHwgR0FNX0VOQUJM RVMgfA0KKwkJCQlTVUI0MjJfRU5BQkxFIHwgQ0JDX0VOQUJMRTsNCisJCX0gZWxzZSB7DQorCQkJ aXNjLT50cnlfY29uZmlnLmJpdHNfcGlwZWxpbmUgPSAweDA7DQorCQl9DQorCQlicmVhazsNCisJ Y2FzZSBWNEwyX1BJWF9GTVRfWVVZVjoNCisJCS8qIGlmIHNlbnNvciBmb3JtYXQgaXMgUkFXLCB3 ZSBjb252ZXJ0IGluc2lkZSBJU0MgKi8NCisJCWlmIChJU0NfSVNfRk9STUFUX1JBVyhpc2MtPnRy eV9jb25maWcuc2RfZm9ybWF0LT5tYnVzX2NvZGUpKSB7DQorCQkJaXNjLT50cnlfY29uZmlnLmJp dHNfcGlwZWxpbmUgPSBDRkFfRU5BQkxFIHwNCisJCQkJQ1NDX0VOQUJMRSB8IFdCX0VOQUJMRSB8 IEdBTV9FTkFCTEVTIHwNCisJCQkJU1VCNDIyX0VOQUJMRSB8IENCQ19FTkFCTEU7DQorCQl9IGVs c2Ugew0KKwkJCWlzYy0+dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gMHgwOw0KKwkJfQ0KKwkJ YnJlYWs7DQorCWNhc2UgVjRMMl9QSVhfRk1UX0dSRVk6DQorCQlpZiAoSVNDX0lTX0ZPUk1BVF9S QVcoaXNjLT50cnlfY29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlKSkgew0KKwkJLyogaWYgc2Vu c29yIGZvcm1hdCBpcyBSQVcsIHdlIGNvbnZlcnQgaW5zaWRlIElTQyAqLw0KKwkJCWlzYy0+dHJ5 X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gQ0ZBX0VOQUJMRSB8DQorCQkJCUNTQ19FTkFCTEUgfCBX Ql9FTkFCTEUgfCBHQU1fRU5BQkxFUyB8DQorCQkJCUNCQ19FTkFCTEU7DQorCQl9IGVsc2Ugew0K KwkJCWlzYy0+dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gMHgwOw0KKwkJfQ0KKwkJYnJlYWs7 DQorCWRlZmF1bHQ6DQorCQlpc2MtPnRyeV9jb25maWcuYml0c19waXBlbGluZSA9IDB4MDsNCisJ fQ0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBpc2NfdHJ5X2ZtdChzdHJ1Y3QgaXNj X2RldmljZSAqaXNjLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYsDQorCQkJdTMyICpjb2RlKQ0KK3sN CisJaW50IGk7DQorCXN0cnVjdCBpc2NfZm9ybWF0ICpzZF9mbXQgPSBOVUxMLCAqZGlyZWN0X2Zt dCA9IE5VTEw7DQorCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeGZtdCA9ICZmLT5mbXQucGl4 Ow0KKwlzdHJ1Y3QgdjRsMl9zdWJkZXZfcGFkX2NvbmZpZyBwYWRfY2ZnOw0KKwlzdHJ1Y3QgdjRs Ml9zdWJkZXZfZm9ybWF0IGZvcm1hdCA9IHsNCisJCS53aGljaCA9IFY0TDJfU1VCREVWX0ZPUk1B VF9UUlksDQorCX07DQorCXUzMiBtYnVzX2NvZGU7DQorCWludCByZXQ7DQorCWJvb2wgcmxwX2Rt YV9kaXJlY3RfZHVtcCA9IGZhbHNlOw0KKw0KKwlpZiAoZi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBF X1ZJREVPX0NBUFRVUkUpDQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJLyogU3RlcCAxOiBmaW5k IGEgUkFXIGZvcm1hdCB0aGF0IGlzIHN1cHBvcnRlZCAqLw0KKwlmb3IgKGkgPSAwOyBpIDwgaXNj LT5udW1fdXNlcl9mb3JtYXRzOyBpKyspIHsNCisJCWlmIChJU0NfSVNfRk9STUFUX1JBVyhpc2Mt PnVzZXJfZm9ybWF0c1tpXS0+bWJ1c19jb2RlKSkgew0KKwkJCXNkX2ZtdCA9IGlzYy0+dXNlcl9m b3JtYXRzW2ldOw0KKwkJCWJyZWFrOw0KKwkJfQ0KKwl9DQorCS8qIFN0ZXAgMjogV2UgY2FuIGNv bnRpbnVlIHdpdGggdGhpcyBSQVcgZm9ybWF0LCBvciB3ZSBjYW4gbG9vaw0KKwkgKiBmb3IgYmV0 dGVyOiBtYXliZSBzZW5zb3Igc3VwcG9ydHMgZGlyZWN0bHkgd2hhdCB3ZSBuZWVkLg0KKwkgKi8N CisJZGlyZWN0X2ZtdCA9IGZpbmRfZm9ybWF0X2J5X2ZvdXJjYyhpc2MsIHBpeGZtdC0+cGl4ZWxm b3JtYXQpOw0KKw0KKwkvKiBTdGVwIDM6IFdlIGhhdmUgYm90aC4gV2UgZGVjaWRlIGdpdmVuIHRo ZSBtb2R1bGUgcGFyYW1ldGVyIHdoaWNoDQorCSAqIG9uZSB0byB1c2UuDQorCSAqLw0KKwlpZiAo ZGlyZWN0X2ZtdCAmJiBzZF9mbXQgJiYgc2Vuc29yX3ByZWZlcnJlZCkNCisJCXNkX2ZtdCA9IGRp cmVjdF9mbXQ7DQorDQorCS8qIFN0ZXAgNDogd2UgZG8gbm90IGhhdmUgUkFXIGJ1dCB3ZSBoYXZl IGEgZGlyZWN0IGZvcm1hdC4gVXNlIGl0LiAqLw0KKwlpZiAoZGlyZWN0X2ZtdCAmJiAhc2RfZm10 KQ0KKwkJc2RfZm10ID0gZGlyZWN0X2ZtdDsNCisNCisJLyogU3RlcCA1OiBpZiB3ZSBhcmUgdXNp bmcgYSBkaXJlY3QgZm9ybWF0LCB3ZSBuZWVkIHRvIHBhY2thZ2UNCisJICogZXZlcnl0aGluZyBh cyA4IGJpdCBkYXRhIGFuZCBqdXN0IGR1bXAgaXQNCisJICovDQorCWlmIChzZF9mbXQgPT0gZGly ZWN0X2ZtdCkNCisJCXJscF9kbWFfZGlyZWN0X2R1bXAgPSB0cnVlOw0KKw0KKwkvKiBTdGVwIDY6 IFdlIGhhdmUgbm8gZm9ybWF0LiBUaGlzIGNhbiBoYXBwZW4gaWYgdGhlIHVzZXJzcGFjZQ0KKwkg KiByZXF1ZXN0cyBzb21lIHdlaXJkL2ludmFsaWQgZm9ybWF0Lg0KKwkgKiBJbiB0aGlzIGNhc2Us IGRlZmF1bHQgdG8gd2hhdGV2ZXIgd2UgaGF2ZQ0KKwkgKi8NCisJaWYgKCFzZF9mbXQgJiYgIWRp cmVjdF9mbXQpIHsNCisJCXNkX2ZtdCA9IGlzYy0+dXNlcl9mb3JtYXRzW2lzYy0+bnVtX3VzZXJf Zm9ybWF0cyAtIDFdOw0KKwkJdjRsMl9kYmcoMSwgZGVidWcsICZpc2MtPnY0bDJfZGV2LA0KKwkJ CSAiU2Vuc29yIG5vdCBzdXBwb3J0aW5nICUuNHMsIHVzaW5nICUuNHNcbiIsDQorCQkJIChjaGFy ICopJnBpeGZtdC0+cGl4ZWxmb3JtYXQsIChjaGFyICopJnNkX2ZtdC0+Zm91cmNjKTsNCisJfQ0K Kw0KKwlpZiAoIXNkX2ZtdCkgew0KKwkJcmV0ID0gLUVJTlZBTDsNCisJCWdvdG8gaXNjX3RyeV9m bXRfZXJyOw0KKwl9DQorDQorCS8qIFN0ZXAgNzogUHJpbnQgb3V0IHdoYXQgd2UgZGVjaWRlZCBm b3IgZGVidWdnaW5nICovDQorCXY0bDJfZGJnKDEsIGRlYnVnLCAmaXNjLT52NGwyX2RldiwNCisJ CSAiUHJlZmVycmluZyB0byBoYXZlIHNlbnNvciB1c2luZyBmb3JtYXQgJS40c1xuIiwNCisJCSAo Y2hhciAqKSZzZF9mbXQtPmZvdXJjYyk7DQorDQorCS8qIFN0ZXAgODogYXQgdGhpcyBtb21lbnQg d2UgZGVjaWRlZCB3aGljaCBmb3JtYXQgdGhlIHN1YmRldiB3aWxsIHVzZSAqLw0KKwlpc2MtPnRy eV9jb25maWcuc2RfZm9ybWF0ID0gc2RfZm10Ow0KKw0KKwkvKiBMaW1pdCB0byBBdG1lbCBJU0Mg aGFyZHdhcmUgY2FwYWJpbGl0aWVzICovDQorCWlmIChwaXhmbXQtPndpZHRoID4gSVNDX01BWF9T VVBQT1JUX1dJRFRIKQ0KKwkJcGl4Zm10LT53aWR0aCA9IElTQ19NQVhfU1VQUE9SVF9XSURUSDsN CisJaWYgKHBpeGZtdC0+aGVpZ2h0ID4gSVNDX01BWF9TVVBQT1JUX0hFSUdIVCkNCisJCXBpeGZt dC0+aGVpZ2h0ID0gSVNDX01BWF9TVVBQT1JUX0hFSUdIVDsNCisNCisJLyoNCisJICogVGhlIG1i dXMgZm9ybWF0IGlzIHRoZSBvbmUgdGhlIHN1YmRldiBvdXRwdXRzLg0KKwkgKiBUaGUgcGl4ZWxz IHdpbGwgYmUgdHJhbnNmZXJyZWQgaW4gdGhpcyBmb3JtYXQgU2Vuc29yIC0+IElTQw0KKwkgKi8N CisJbWJ1c19jb2RlID0gc2RfZm10LT5tYnVzX2NvZGU7DQorDQorCS8qDQorCSAqIFZhbGlkYXRl IGZvcm1hdHMuIElmIHRoZSByZXF1aXJlZCBmb3JtYXQgaXMgbm90IE9LLCBkZWZhdWx0IHRvIHJh dy4NCisJICovDQorDQorCWlzYy0+dHJ5X2NvbmZpZy5mb3VyY2MgPSBwaXhmbXQtPnBpeGVsZm9y bWF0Ow0KKw0KKwlpZiAoaXNjX3RyeV92YWxpZGF0ZV9mb3JtYXRzKGlzYykpIHsNCisJCXBpeGZt dC0+cGl4ZWxmb3JtYXQgPSBpc2MtPnRyeV9jb25maWcuZm91cmNjID0gc2RfZm10LT5mb3VyY2M7 DQorCQkvKiBSZS10cnkgdG8gdmFsaWRhdGUgdGhlIG5ldyBmb3JtYXQgKi8NCisJCXJldCA9IGlz Y190cnlfdmFsaWRhdGVfZm9ybWF0cyhpc2MpOw0KKwkJaWYgKHJldCkNCisJCQlnb3RvIGlzY190 cnlfZm10X2VycjsNCisJfQ0KKw0KKwlyZXQgPSBpc2NfdHJ5X2NvbmZpZ3VyZV9ybHBfZG1hKGlz YywgcmxwX2RtYV9kaXJlY3RfZHVtcCk7DQorCWlmIChyZXQpDQorCQlnb3RvIGlzY190cnlfZm10 X2VycjsNCisNCisJcmV0ID0gaXNjX3RyeV9jb25maWd1cmVfcGlwZWxpbmUoaXNjKTsNCisJaWYg KHJldCkNCisJCWdvdG8gaXNjX3RyeV9mbXRfZXJyOw0KKw0KKwl2NGwyX2ZpbGxfbWJ1c19mb3Jt YXQoJmZvcm1hdC5mb3JtYXQsIHBpeGZtdCwgbWJ1c19jb2RlKTsNCisJcmV0ID0gdjRsMl9zdWJk ZXZfY2FsbChpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZCwgcGFkLCBzZXRfZm10LA0KKwkJCSAgICAg ICAmcGFkX2NmZywgJmZvcm1hdCk7DQorCWlmIChyZXQgPCAwKQ0KKwkJZ290byBpc2NfdHJ5X2Zt dF9zdWJkZXZfZXJyOw0KKw0KKwl2NGwyX2ZpbGxfcGl4X2Zvcm1hdChwaXhmbXQsICZmb3JtYXQu Zm9ybWF0KTsNCisNCisJcGl4Zm10LT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsNCisJcGl4Zm10 LT5ieXRlc3BlcmxpbmUgPSAocGl4Zm10LT53aWR0aCAqIGlzYy0+dHJ5X2NvbmZpZy5icHApID4+ IDM7DQorCXBpeGZtdC0+c2l6ZWltYWdlID0gcGl4Zm10LT5ieXRlc3BlcmxpbmUgKiBwaXhmbXQt PmhlaWdodDsNCisNCisJaWYgKGNvZGUpDQorCQkqY29kZSA9IG1idXNfY29kZTsNCisNCisJcmV0 dXJuIDA7DQorDQoraXNjX3RyeV9mbXRfZXJyOg0KKwl2NGwyX2VycigmaXNjLT52NGwyX2Rldiwg IkNvdWxkIG5vdCBmaW5kIGFueSBwb3NzaWJsZSBmb3JtYXQgZm9yIGEgd29ya2luZyBwaXBlbGlu ZVxuIik7DQoraXNjX3RyeV9mbXRfc3ViZGV2X2VycjoNCisJbWVtc2V0KCZpc2MtPnRyeV9jb25m aWcsIDAsIHNpemVvZihpc2MtPnRyeV9jb25maWcpKTsNCisNCisJcmV0dXJuIHJldDsNCit9DQor DQorc3RhdGljIGludCBpc2Nfc2V0X2ZtdChzdHJ1Y3QgaXNjX2RldmljZSAqaXNjLCBzdHJ1Y3Qg djRsMl9mb3JtYXQgKmYpDQorew0KKwlzdHJ1Y3QgdjRsMl9zdWJkZXZfZm9ybWF0IGZvcm1hdCA9 IHsNCisJCS53aGljaCA9IFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkUsDQorCX07DQorCXUzMiBt YnVzX2NvZGUgPSAwOw0KKwlpbnQgcmV0Ow0KKw0KKwlyZXQgPSBpc2NfdHJ5X2ZtdChpc2MsIGYs ICZtYnVzX2NvZGUpOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJdjRsMl9maWxs X21idXNfZm9ybWF0KCZmb3JtYXQuZm9ybWF0LCAmZi0+Zm10LnBpeCwgbWJ1c19jb2RlKTsNCisJ cmV0ID0gdjRsMl9zdWJkZXZfY2FsbChpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZCwgcGFkLA0KKwkJ CSAgICAgICBzZXRfZm10LCBOVUxMLCAmZm9ybWF0KTsNCisJaWYgKHJldCA8IDApDQorCQlyZXR1 cm4gcmV0Ow0KKw0KKwlpc2MtPmZtdCA9ICpmOw0KKw0KKwlpZiAoaXNjLT50cnlfY29uZmlnLnNk X2Zvcm1hdCAmJiBpc2MtPmNvbmZpZy5zZF9mb3JtYXQgJiYNCisJICAgIGlzYy0+dHJ5X2NvbmZp Zy5zZF9mb3JtYXQgIT0gaXNjLT5jb25maWcuc2RfZm9ybWF0KSB7DQorCQlpc2MtPmN0cmxzLmhp c3Rfc3RhdCA9IEhJU1RfSU5JVDsNCisJCWlzY19yZXNldF9hd2JfY3RybHMoaXNjKTsNCisJfQ0K KwkvKiBtYWtlIHRoZSB0cnkgY29uZmlndXJhdGlvbiBhY3RpdmUgKi8NCisJaXNjLT5jb25maWcg PSBpc2MtPnRyeV9jb25maWc7DQorDQorCXY0bDJfZGJnKDEsIGRlYnVnLCAmaXNjLT52NGwyX2Rl diwgIk5ldyBJU0MgY29uZmlndXJhdGlvbiBpbiBwbGFjZVxuIik7DQorDQorCXJldHVybiAwOw0K K30NCisNCitzdGF0aWMgaW50IGlzY19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2 b2lkICpwcml2LA0KKwkJCSAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikNCit7DQorCXN0cnVj dCBpc2NfZGV2aWNlICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KKw0KKwlpZiAodmIyX2lz X3N0cmVhbWluZygmaXNjLT52YjJfdmlkcSkpDQorCQlyZXR1cm4gLUVCVVNZOw0KKw0KKwlyZXR1 cm4gaXNjX3NldF9mbXQoaXNjLCBmKTsNCit9DQorDQorc3RhdGljIGludCBpc2NfdHJ5X2ZtdF92 aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LA0KKwkJCQlzdHJ1Y3QgdjRsMl9m b3JtYXQgKmYpDQorew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmlkZW9fZHJ2ZGF0YShm aWxlKTsNCisNCisJcmV0dXJuIGlzY190cnlfZm10KGlzYywgZiwgTlVMTCk7DQorfQ0KKw0KK3N0 YXRpYyBpbnQgaXNjX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsDQor CQkJICAgc3RydWN0IHY0bDJfaW5wdXQgKmlucCkNCit7DQorCWlmIChpbnAtPmluZGV4ICE9IDAp DQorCQlyZXR1cm4gLUVJTlZBTDsNCisNCisJaW5wLT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NB TUVSQTsNCisJaW5wLT5zdGQgPSAwOw0KKwlzdHJzY3B5KGlucC0+bmFtZSwgIkNhbWVyYSIsIHNp emVvZihpbnAtPm5hbWUpKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNj X2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkN Cit7DQorCSppID0gMDsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNjX3Nf aW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKQ0KK3sN CisJaWYgKGkgPiAwKQ0KKwkJcmV0dXJuIC1FSU5WQUw7DQorDQorCXJldHVybiAwOw0KK30NCisN CitzdGF0aWMgaW50IGlzY19nX3Bhcm0oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1 Y3QgdjRsMl9zdHJlYW1wYXJtICphKQ0KK3sNCisJc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZp ZGVvX2RydmRhdGEoZmlsZSk7DQorDQorCXJldHVybiB2NGwyX2dfcGFybV9jYXAodmlkZW9fZGV2 ZGF0YShmaWxlKSwgaXNjLT5jdXJyZW50X3N1YmRldi0+c2QsIGEpOw0KK30NCisNCitzdGF0aWMg aW50IGlzY19zX3Bhcm0oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9z dHJlYW1wYXJtICphKQ0KK3sNCisJc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZpZGVvX2RydmRh dGEoZmlsZSk7DQorDQorCXJldHVybiB2NGwyX3NfcGFybV9jYXAodmlkZW9fZGV2ZGF0YShmaWxl KSwgaXNjLT5jdXJyZW50X3N1YmRldi0+c2QsIGEpOw0KK30NCisNCitzdGF0aWMgaW50IGlzY19l bnVtX2ZyYW1lc2l6ZXMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLA0KKwkJCSAgICAgICBz dHJ1Y3QgdjRsMl9mcm1zaXplZW51bSAqZnNpemUpDQorew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAq aXNjID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCisJc3RydWN0IHY0bDJfc3ViZGV2X2ZyYW1lX3Np emVfZW51bSBmc2UgPSB7DQorCQkuaW5kZXggPSBmc2l6ZS0+aW5kZXgsDQorCQkud2hpY2ggPSBW NEwyX1NVQkRFVl9GT1JNQVRfQUNUSVZFLA0KKwl9Ow0KKwlpbnQgcmV0ID0gLUVJTlZBTDsNCisJ aW50IGk7DQorDQorCWZvciAoaSA9IDA7IGkgPCBpc2MtPm51bV91c2VyX2Zvcm1hdHM7IGkrKykN CisJCWlmIChpc2MtPnVzZXJfZm9ybWF0c1tpXS0+Zm91cmNjID09IGZzaXplLT5waXhlbF9mb3Jt YXQpDQorCQkJcmV0ID0gMDsNCisNCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29udHJv bGxlcl9mb3JtYXRzKTsgaSsrKQ0KKwkJaWYgKGNvbnRyb2xsZXJfZm9ybWF0c1tpXS5mb3VyY2Mg PT0gZnNpemUtPnBpeGVsX2Zvcm1hdCkNCisJCQlyZXQgPSAwOw0KKw0KKwlpZiAocmV0KQ0KKwkJ cmV0dXJuIHJldDsNCisNCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChpc2MtPmN1cnJlbnRfc3Vi ZGV2LT5zZCwgcGFkLCBlbnVtX2ZyYW1lX3NpemUsDQorCQkJICAgICAgIE5VTEwsICZmc2UpOw0K KwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJZnNlLmNvZGUgPSBpc2MtPmNvbmZpZy5z ZF9mb3JtYXQtPm1idXNfY29kZTsNCisNCisJZnNpemUtPnR5cGUgPSBWNEwyX0ZSTVNJWkVfVFlQ RV9ESVNDUkVURTsNCisJZnNpemUtPmRpc2NyZXRlLndpZHRoID0gZnNlLm1heF93aWR0aDsNCisJ ZnNpemUtPmRpc2NyZXRlLmhlaWdodCA9IGZzZS5tYXhfaGVpZ2h0Ow0KKw0KKwlyZXR1cm4gMDsN Cit9DQorDQorc3RhdGljIGludCBpc2NfZW51bV9mcmFtZWludGVydmFscyhzdHJ1Y3QgZmlsZSAq ZmlsZSwgdm9pZCAqZmgsDQorCQkJCSAgICBzdHJ1Y3QgdjRsMl9mcm1pdmFsZW51bSAqZml2YWwp DQorew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCisJ c3RydWN0IHY0bDJfc3ViZGV2X2ZyYW1lX2ludGVydmFsX2VudW0gZmllID0gew0KKwkJLmluZGV4 ID0gZml2YWwtPmluZGV4LA0KKwkJLndpZHRoID0gZml2YWwtPndpZHRoLA0KKwkJLmhlaWdodCA9 IGZpdmFsLT5oZWlnaHQsDQorCQkud2hpY2ggPSBWNEwyX1NVQkRFVl9GT1JNQVRfQUNUSVZFLA0K Kwl9Ow0KKwlpbnQgcmV0ID0gLUVJTlZBTDsNCisJaW50IGk7DQorDQorCWZvciAoaSA9IDA7IGkg PCBpc2MtPm51bV91c2VyX2Zvcm1hdHM7IGkrKykNCisJCWlmIChpc2MtPnVzZXJfZm9ybWF0c1tp XS0+Zm91cmNjID09IGZpdmFsLT5waXhlbF9mb3JtYXQpDQorCQkJcmV0ID0gMDsNCisNCisJZm9y IChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY29udHJvbGxlcl9mb3JtYXRzKTsgaSsrKQ0KKwkJaWYg KGNvbnRyb2xsZXJfZm9ybWF0c1tpXS5mb3VyY2MgPT0gZml2YWwtPnBpeGVsX2Zvcm1hdCkNCisJ CQlyZXQgPSAwOw0KKw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJcmV0ID0gdjRs Ml9zdWJkZXZfY2FsbChpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZCwgcGFkLA0KKwkJCSAgICAgICBl bnVtX2ZyYW1lX2ludGVydmFsLCBOVUxMLCAmZmllKTsNCisJaWYgKHJldCkNCisJCXJldHVybiBy ZXQ7DQorDQorCWZpZS5jb2RlID0gaXNjLT5jb25maWcuc2RfZm9ybWF0LT5tYnVzX2NvZGU7DQor CWZpdmFsLT50eXBlID0gVjRMMl9GUk1JVkFMX1RZUEVfRElTQ1JFVEU7DQorCWZpdmFsLT5kaXNj cmV0ZSA9IGZpZS5pbnRlcnZhbDsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBjb25z dCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgaXNjX2lvY3RsX29wcyA9IHsNCisJLnZpZGlvY19xdWVy eWNhcAkJPSBpc2NfcXVlcnljYXAsDQorCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcAk9IGlzY19l bnVtX2ZtdF92aWRfY2FwLA0KKwkudmlkaW9jX2dfZm10X3ZpZF9jYXAJCT0gaXNjX2dfZm10X3Zp ZF9jYXAsDQorCS52aWRpb2Nfc19mbXRfdmlkX2NhcAkJPSBpc2Nfc19mbXRfdmlkX2NhcCwNCisJ LnZpZGlvY190cnlfZm10X3ZpZF9jYXAJCT0gaXNjX3RyeV9mbXRfdmlkX2NhcCwNCisNCisJLnZp ZGlvY19lbnVtX2lucHV0CQk9IGlzY19lbnVtX2lucHV0LA0KKwkudmlkaW9jX2dfaW5wdXQJCQk9 IGlzY19nX2lucHV0LA0KKwkudmlkaW9jX3NfaW5wdXQJCQk9IGlzY19zX2lucHV0LA0KKw0KKwku dmlkaW9jX3JlcWJ1ZnMJCQk9IHZiMl9pb2N0bF9yZXFidWZzLA0KKwkudmlkaW9jX3F1ZXJ5YnVm CQk9IHZiMl9pb2N0bF9xdWVyeWJ1ZiwNCisJLnZpZGlvY19xYnVmCQkJPSB2YjJfaW9jdGxfcWJ1 ZiwNCisJLnZpZGlvY19leHBidWYJCQk9IHZiMl9pb2N0bF9leHBidWYsDQorCS52aWRpb2NfZHFi dWYJCQk9IHZiMl9pb2N0bF9kcWJ1ZiwNCisJLnZpZGlvY19jcmVhdGVfYnVmcwkJPSB2YjJfaW9j dGxfY3JlYXRlX2J1ZnMsDQorCS52aWRpb2NfcHJlcGFyZV9idWYJCT0gdmIyX2lvY3RsX3ByZXBh cmVfYnVmLA0KKwkudmlkaW9jX3N0cmVhbW9uCQk9IHZiMl9pb2N0bF9zdHJlYW1vbiwNCisJLnZp ZGlvY19zdHJlYW1vZmYJCT0gdmIyX2lvY3RsX3N0cmVhbW9mZiwNCisNCisJLnZpZGlvY19nX3Bh cm0JCQk9IGlzY19nX3Bhcm0sDQorCS52aWRpb2Nfc19wYXJtCQkJPSBpc2Nfc19wYXJtLA0KKwku dmlkaW9jX2VudW1fZnJhbWVzaXplcwkJPSBpc2NfZW51bV9mcmFtZXNpemVzLA0KKwkudmlkaW9j X2VudW1fZnJhbWVpbnRlcnZhbHMJPSBpc2NfZW51bV9mcmFtZWludGVydmFscywNCisNCisJLnZp ZGlvY19sb2dfc3RhdHVzCQk9IHY0bDJfY3RybF9sb2dfc3RhdHVzLA0KKwkudmlkaW9jX3N1YnNj cmliZV9ldmVudAkJPSB2NGwyX2N0cmxfc3Vic2NyaWJlX2V2ZW50LA0KKwkudmlkaW9jX3Vuc3Vi c2NyaWJlX2V2ZW50CT0gdjRsMl9ldmVudF91bnN1YnNjcmliZSwNCit9Ow0KKw0KK3N0YXRpYyBp bnQgaXNjX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpDQorew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAq aXNjID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGlz Yy0+Y3VycmVudF9zdWJkZXYtPnNkOw0KKwlpbnQgcmV0Ow0KKw0KKwlpZiAobXV0ZXhfbG9ja19p bnRlcnJ1cHRpYmxlKCZpc2MtPmxvY2spKQ0KKwkJcmV0dXJuIC1FUkVTVEFSVFNZUzsNCisNCisJ cmV0ID0gdjRsMl9maF9vcGVuKGZpbGUpOw0KKwlpZiAocmV0IDwgMCkNCisJCWdvdG8gdW5sb2Nr Ow0KKw0KKwlpZiAoIXY0bDJfZmhfaXNfc2luZ3VsYXJfZmlsZShmaWxlKSkNCisJCWdvdG8gdW5s b2NrOw0KKw0KKwlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCBjb3JlLCBzX3Bvd2VyLCAxKTsN CisJaWYgKHJldCA8IDAgJiYgcmV0ICE9IC1FTk9JT0NUTENNRCkgew0KKwkJdjRsMl9maF9yZWxl YXNlKGZpbGUpOw0KKwkJZ290byB1bmxvY2s7DQorCX0NCisNCisJcmV0ID0gaXNjX3NldF9mbXQo aXNjLCAmaXNjLT5mbXQpOw0KKwlpZiAocmV0KSB7DQorCQl2NGwyX3N1YmRldl9jYWxsKHNkLCBj b3JlLCBzX3Bvd2VyLCAwKTsNCisJCXY0bDJfZmhfcmVsZWFzZShmaWxlKTsNCisJfQ0KKw0KK3Vu bG9jazoNCisJbXV0ZXhfdW5sb2NrKCZpc2MtPmxvY2spOw0KKwlyZXR1cm4gcmV0Ow0KK30NCisN CitzdGF0aWMgaW50IGlzY19yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQ0KK3sNCisJc3RydWN0 IGlzY19kZXZpY2UgKmlzYyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7DQorCXN0cnVjdCB2NGwyX3N1 YmRldiAqc2QgPSBpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZDsNCisJYm9vbCBmaF9zaW5ndWxhcjsN CisJaW50IHJldDsNCisNCisJbXV0ZXhfbG9jaygmaXNjLT5sb2NrKTsNCisNCisJZmhfc2luZ3Vs YXIgPSB2NGwyX2ZoX2lzX3Npbmd1bGFyX2ZpbGUoZmlsZSk7DQorDQorCXJldCA9IF92YjJfZm9w X3JlbGVhc2UoZmlsZSwgTlVMTCk7DQorDQorCWlmIChmaF9zaW5ndWxhcikNCisJCXY0bDJfc3Vi ZGV2X2NhbGwoc2QsIGNvcmUsIHNfcG93ZXIsIDApOw0KKw0KKwltdXRleF91bmxvY2soJmlzYy0+ bG9jayk7DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRs Ml9maWxlX29wZXJhdGlvbnMgaXNjX2ZvcHMgPSB7DQorCS5vd25lcgkJPSBUSElTX01PRFVMRSwN CisJLm9wZW4JCT0gaXNjX29wZW4sDQorCS5yZWxlYXNlCT0gaXNjX3JlbGVhc2UsDQorCS51bmxv Y2tlZF9pb2N0bAk9IHZpZGVvX2lvY3RsMiwNCisJLnJlYWQJCT0gdmIyX2ZvcF9yZWFkLA0KKwku bW1hcAkJPSB2YjJfZm9wX21tYXAsDQorCS5wb2xsCQk9IHZiMl9mb3BfcG9sbCwNCit9Ow0KKw0K K2lycXJldHVybl90IGlzY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQ0KK3sNCisJ c3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IChzdHJ1Y3QgaXNjX2RldmljZSAqKWRldl9pZDsNCisJ c3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjLT5yZWdtYXA7DQorCXUzMiBpc2NfaW50c3IsIGlz Y19pbnRtYXNrLCBwZW5kaW5nOw0KKwlpcnFyZXR1cm5fdCByZXQgPSBJUlFfTk9ORTsNCisNCisJ cmVnbWFwX3JlYWQocmVnbWFwLCBJU0NfSU5UU1IsICZpc2NfaW50c3IpOw0KKwlyZWdtYXBfcmVh ZChyZWdtYXAsIElTQ19JTlRNQVNLLCAmaXNjX2ludG1hc2spOw0KKw0KKwlwZW5kaW5nID0gaXNj X2ludHNyICYgaXNjX2ludG1hc2s7DQorDQorCWlmIChsaWtlbHkocGVuZGluZyAmIElTQ19JTlRf RERPTkUpKSB7DQorCQlzcGluX2xvY2soJmlzYy0+ZG1hX3F1ZXVlX2xvY2spOw0KKwkJaWYgKGlz Yy0+Y3VyX2ZybSkgew0KKwkJCXN0cnVjdCB2YjJfdjRsMl9idWZmZXIgKnZidWYgPSAmaXNjLT5j dXJfZnJtLT52YjsNCisJCQlzdHJ1Y3QgdmIyX2J1ZmZlciAqdmIgPSAmdmJ1Zi0+dmIyX2J1ZjsN CisNCisJCQl2Yi0+dGltZXN0YW1wID0ga3RpbWVfZ2V0X25zKCk7DQorCQkJdmJ1Zi0+c2VxdWVu Y2UgPSBpc2MtPnNlcXVlbmNlKys7DQorCQkJdmIyX2J1ZmZlcl9kb25lKHZiLCBWQjJfQlVGX1NU QVRFX0RPTkUpOw0KKwkJCWlzYy0+Y3VyX2ZybSA9IE5VTEw7DQorCQl9DQorDQorCQlpZiAoIWxp c3RfZW1wdHkoJmlzYy0+ZG1hX3F1ZXVlKSAmJiAhaXNjLT5zdG9wKSB7DQorCQkJaXNjLT5jdXJf ZnJtID0gbGlzdF9maXJzdF9lbnRyeSgmaXNjLT5kbWFfcXVldWUsDQorCQkJCQkJICAgICBzdHJ1 Y3QgaXNjX2J1ZmZlciwgbGlzdCk7DQorCQkJbGlzdF9kZWwoJmlzYy0+Y3VyX2ZybS0+bGlzdCk7 DQorDQorCQkJaXNjX3N0YXJ0X2RtYShpc2MpOw0KKwkJfQ0KKw0KKwkJaWYgKGlzYy0+c3RvcCkN CisJCQljb21wbGV0ZSgmaXNjLT5jb21wKTsNCisNCisJCXJldCA9IElSUV9IQU5ETEVEOw0KKwkJ c3Bpbl91bmxvY2soJmlzYy0+ZG1hX3F1ZXVlX2xvY2spOw0KKwl9DQorDQorCWlmIChwZW5kaW5n ICYgSVNDX0lOVF9ISVNET05FKSB7DQorCQlzY2hlZHVsZV93b3JrKCZpc2MtPmF3Yl93b3JrKTsN CisJCXJldCA9IElSUV9IQU5ETEVEOw0KKwl9DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0 YXRpYyB2b2lkIGlzY19oaXN0X2NvdW50KHN0cnVjdCBpc2NfZGV2aWNlICppc2MsIHUzMiAqbWlu LCB1MzIgKm1heCkNCit7DQorCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0K KwlzdHJ1Y3QgaXNjX2N0cmxzICpjdHJscyA9ICZpc2MtPmN0cmxzOw0KKwl1MzIgKmhpc3RfY291 bnQgPSAmY3RybHMtPmhpc3RfY291bnRbY3RybHMtPmhpc3RfaWRdOw0KKwl1MzIgKmhpc3RfZW50 cnkgPSAmY3RybHMtPmhpc3RfZW50cnlbMF07DQorCXUzMiBpOw0KKw0KKwkqbWluID0gMDsNCisJ Km1heCA9IEhJU1RfRU5UUklFUzsNCisNCisJcmVnbWFwX2J1bGtfcmVhZChyZWdtYXAsIElTQ19I SVNfRU5UUlksIGhpc3RfZW50cnksIEhJU1RfRU5UUklFUyk7DQorDQorCSpoaXN0X2NvdW50ID0g MDsNCisJLyoNCisJICogd2UgZGVsaWJlcmF0ZWx5IGlnbm9yZSB0aGUgZW5kIG9mIHRoZSBoaXN0 b2dyYW0sDQorCSAqIHRoZSBtb3N0IHdoaXRlIHBpeGVscw0KKwkgKi8NCisJZm9yIChpID0gMTsg aSA8IEhJU1RfRU5UUklFUzsgaSsrKSB7DQorCQlpZiAoKmhpc3RfZW50cnkgJiYgISptaW4pDQor CQkJKm1pbiA9IGk7DQorCQlpZiAoKmhpc3RfZW50cnkpDQorCQkJKm1heCA9IGk7DQorCQkqaGlz dF9jb3VudCArPSBpICogKCpoaXN0X2VudHJ5KyspOw0KKwl9DQorDQorCWlmICghKm1pbikNCisJ CSptaW4gPSAxOw0KK30NCisNCitzdGF0aWMgdm9pZCBpc2Nfd2JfdXBkYXRlKHN0cnVjdCBpc2Nf Y3RybHMgKmN0cmxzKQ0KK3sNCisJdTMyICpoaXN0X2NvdW50ID0gJmN0cmxzLT5oaXN0X2NvdW50 WzBdOw0KKwl1MzIgYywgb2Zmc2V0WzRdOw0KKwl1NjQgYXZnID0gMDsNCisJLyogV2UgY29tcHV0 ZSB0d28gZ2FpbnMsIHN0cmV0Y2ggZ2FpbiBhbmQgZ3JleSB3b3JsZCBnYWluICovDQorCXUzMiBz X2dhaW5bNF0sIGd3X2dhaW5bNF07DQorDQorCS8qDQorCSAqIEFjY29yZGluZyB0byBHcmV5IFdv cmxkLCB3ZSBuZWVkIHRvIHNldCBnYWlucyBmb3IgUi9CIHRvIG5vcm1hbGl6ZQ0KKwkgKiB0aGVt IHRvd2FyZHMgdGhlIGdyZWVuIGNoYW5uZWwuDQorCSAqIFRodXMgd2Ugd2FudCB0byBrZWVwIEdy ZWVuIGFzIGZpeGVkIGFuZCBhZGp1c3Qgb25seSBSZWQvQmx1ZQ0KKwkgKiBDb21wdXRlIHRoZSBh dmVyYWdlIG9mIHRoZSBib3RoIGdyZWVuIGNoYW5uZWxzIGZpcnN0DQorCSAqLw0KKwlhdmcgPSAo dTY0KWhpc3RfY291bnRbSVNDX0hJU19DRkdfTU9ERV9HUl0gKw0KKwkJKHU2NCloaXN0X2NvdW50 W0lTQ19ISVNfQ0ZHX01PREVfR0JdOw0KKwlhdmcgPj49IDE7DQorDQorCS8qIEdyZWVuIGhpc3Rv Z3JhbSBpcyBudWxsLCBub3RoaW5nIHRvIGRvICovDQorCWlmICghYXZnKQ0KKwkJcmV0dXJuOw0K Kw0KKwlmb3IgKGMgPSBJU0NfSElTX0NGR19NT0RFX0dSOyBjIDw9IElTQ19ISVNfQ0ZHX01PREVf QjsgYysrKSB7DQorCQkvKg0KKwkJICogdGhlIGNvbG9yIG9mZnNldCBpcyB0aGUgbWluaW11bSB2 YWx1ZSBvZiB0aGUgaGlzdG9ncmFtLg0KKwkJICogd2Ugc3RyZXRjaCB0aGlzIGNvbG9yIHRvIHRo ZSBmdWxsIHJhbmdlIGJ5IHN1YnN0cmFjdGluZw0KKwkJICogdGhpcyB2YWx1ZSBmcm9tIHRoZSBj b2xvciBjb21wb25lbnQuDQorCQkgKi8NCisJCW9mZnNldFtjXSA9IGN0cmxzLT5oaXN0X21pbm1h eFtjXVtISVNUX01JTl9JTkRFWF07DQorCQkvKg0KKwkJICogVGhlIG9mZnNldCBpcyBhbHdheXMg YXQgbGVhc3QgMS4gSWYgdGhlIG9mZnNldCBpcyAxLCB3ZSBkbw0KKwkJICogbm90IG5lZWQgdG8g YWRqdXN0IGl0LCBzbyBvdXIgcmVzdWx0IG11c3QgYmUgemVyby4NCisJCSAqIHRoZSBvZmZzZXQg aXMgY29tcHV0ZWQgaW4gYSBoaXN0b2dyYW0gb24gOSBiaXRzICgwLi41MTIpDQorCQkgKiBidXQg dGhlIG9mZnNldCBpbiByZWdpc3RlciBpcyBiYXNlZCBvbg0KKwkJICogMTIgYml0cyBwaXBlbGlu ZSAoMC4uNDA5NikuDQorCQkgKiB3ZSBuZWVkIHRvIHNoaWZ0IHdpdGggdGhlIDMgYml0cyB0aGF0 IHRoZSBoaXN0b2dyYW0gaXMNCisJCSAqIGlnbm9yaW5nDQorCQkgKi8NCisJCWN0cmxzLT5vZmZz ZXRbY10gPSAob2Zmc2V0W2NdIC0gMSkgPDwgMzsNCisNCisJCS8qIHRoZSBvZmZzZXQgaXMgdGhl biB0YWtlbiBhbmQgY29udmVydGVkIHRvIDIncyBjb21wbGVtZW50cyAqLw0KKwkJaWYgKCFjdHJs cy0+b2Zmc2V0W2NdKQ0KKwkJCWN0cmxzLT5vZmZzZXRbY10gPSBJU0NfV0JfT19aRVJPX1ZBTDsN CisNCisJCS8qDQorCQkgKiB0aGUgc3RyZXRjaCBnYWluIGlzIHRoZSB0b3RhbCBudW1iZXIgb2Yg aGlzdG9ncmFtIGJpbnMNCisJCSAqIGRpdmlkZWQgYnkgdGhlIGFjdHVhbCByYW5nZSBvZiBjb2xv ciBjb21wb25lbnQgKE1heCAtIE1pbikNCisJCSAqIElmIHdlIGNvbXB1dGUgZ2FpbiBsaWtlIHRo aXMsIHRoZSBhY3R1YWwgY29sb3IgY29tcG9uZW50DQorCQkgKiB3aWxsIGJlIHN0cmV0Y2hlZCB0 byB0aGUgZnVsbCBoaXN0b2dyYW0uDQorCQkgKiBXZSBuZWVkIHRvIHNoaWZ0IDkgYml0cyBmb3Ig cHJlY2lzaW9uLCB3ZSBoYXZlIDkgYml0cyBmb3INCisJCSAqIGRlY2ltYWxzDQorCQkgKi8NCisJ CXNfZ2FpbltjXSA9IChISVNUX0VOVFJJRVMgPDwgOSkgLw0KKwkJCShjdHJscy0+aGlzdF9taW5t YXhbY11bSElTVF9NQVhfSU5ERVhdIC0NCisJCQljdHJscy0+aGlzdF9taW5tYXhbY11bSElTVF9N SU5fSU5ERVhdICsgMSk7DQorDQorCQkvKg0KKwkJICogTm93IHdlIGhhdmUgdG8gY29tcHV0ZSB0 aGUgZ2FpbiB3LnIudC4gdGhlIGF2ZXJhZ2UuDQorCQkgKiBBZGQvbG9zZSBnYWluIHRvIHRoZSBj b21wb25lbnQgdG93YXJkcyB0aGUgYXZlcmFnZS4NCisJCSAqIElmIGl0IGhhcHBlbnMgdGhhdCB0 aGUgY29tcG9uZW50IGlzIHplcm8sIHVzZSB0aGUNCisJCSAqIGZpeGVkIHBvaW50IHZhbHVlIDog MS4wIGdhaW4uDQorCQkgKi8NCisJCWlmIChoaXN0X2NvdW50W2NdKQ0KKwkJCWd3X2dhaW5bY10g PSBkaXZfdTY0KGF2ZyA8PCA5LCBoaXN0X2NvdW50W2NdKTsNCisJCWVsc2UNCisJCQlnd19nYWlu W2NdID0gMSA8PCA5Ow0KKw0KKwkJLyogbXVsdGlwbHkgYm90aCBnYWlucyBhbmQgYWRqdXN0IGZv ciBkZWNpbWFscyAqLw0KKwkJY3RybHMtPmdhaW5bY10gPSBzX2dhaW5bY10gKiBnd19nYWluW2Nd Ow0KKwkJY3RybHMtPmdhaW5bY10gPj49IDk7DQorCX0NCit9DQorDQorc3RhdGljIHZvaWQgaXNj X2F3Yl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqdykNCit7DQorCXN0cnVjdCBpc2NfZGV2aWNl ICppc2MgPQ0KKwkJY29udGFpbmVyX29mKHcsIHN0cnVjdCBpc2NfZGV2aWNlLCBhd2Jfd29yayk7 DQorCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0KKwlzdHJ1Y3QgaXNjX2N0 cmxzICpjdHJscyA9ICZpc2MtPmN0cmxzOw0KKwl1MzIgaGlzdF9pZCA9IGN0cmxzLT5oaXN0X2lk Ow0KKwl1MzIgYmF5c2VsOw0KKwl1bnNpZ25lZCBsb25nIGZsYWdzOw0KKwl1MzIgbWluLCBtYXg7 DQorDQorCS8qIHN0cmVhbWluZyBpcyBub3QgYWN0aXZlIGFueW1vcmUgKi8NCisJaWYgKGlzYy0+ c3RvcCkNCisJCXJldHVybjsNCisNCisJaWYgKGN0cmxzLT5oaXN0X3N0YXQgIT0gSElTVF9FTkFC TEVEKQ0KKwkJcmV0dXJuOw0KKw0KKwlpc2NfaGlzdF9jb3VudChpc2MsICZtaW4sICZtYXgpOw0K KwljdHJscy0+aGlzdF9taW5tYXhbaGlzdF9pZF1bSElTVF9NSU5fSU5ERVhdID0gbWluOw0KKwlj dHJscy0+aGlzdF9taW5tYXhbaGlzdF9pZF1bSElTVF9NQVhfSU5ERVhdID0gbWF4Ow0KKw0KKwlp ZiAoaGlzdF9pZCAhPSBJU0NfSElTX0NGR19NT0RFX0IpIHsNCisJCWhpc3RfaWQrKzsNCisJfSBl bHNlIHsNCisJCWlzY193Yl91cGRhdGUoY3RybHMpOw0KKwkJaGlzdF9pZCA9IElTQ19ISVNfQ0ZH X01PREVfR1I7DQorCX0NCisNCisJY3RybHMtPmhpc3RfaWQgPSBoaXN0X2lkOw0KKwliYXlzZWwg PSBpc2MtPmNvbmZpZy5zZF9mb3JtYXQtPmNmYV9iYXljZmcgPDwgSVNDX0hJU19DRkdfQkFZU0VM X1NISUZUOw0KKw0KKwkvKiBpZiBubyBtb3JlIGF1dG8gd2hpdGUgYmFsYW5jZSwgcmVzZXQgY29u dHJvbHMuICovDQorCWlmIChjdHJscy0+YXdiID09IElTQ19XQl9OT05FKQ0KKwkJaXNjX3Jlc2V0 X2F3Yl9jdHJscyhpc2MpOw0KKw0KKwlwbV9ydW50aW1lX2dldF9zeW5jKGlzYy0+ZGV2KTsNCisN CisJLyoNCisJICogb25seSB1cGRhdGUgaWYgd2UgaGF2ZSBhbGwgdGhlIHJlcXVpcmVkIGhpc3Rv Z3JhbXMgYW5kIGNvbnRyb2xzDQorCSAqIGlmIGF3YiBoYXMgYmVlbiBkaXNhYmxlZCwgd2UgbmVl ZCB0byByZXNldCByZWdpc3RlcnMgYXMgd2VsbC4NCisJICovDQorCWlmIChoaXN0X2lkID09IElT Q19ISVNfQ0ZHX01PREVfR1IgfHwgY3RybHMtPmF3YiA9PSBJU0NfV0JfTk9ORSkgew0KKwkJLyoN CisJCSAqIEl0IG1heSBoYXBwZW4gdGhhdCBETUEgRG9uZSBJUlEgd2lsbCB0cmlnZ2VyIHdoaWxl IHdlIGFyZQ0KKwkJICogdXBkYXRpbmcgd2hpdGUgYmFsYW5jZSByZWdpc3RlcnMgaGVyZS4NCisJ CSAqIEluIHRoYXQgY2FzZSwgb25seSBwYXJ0cyBvZiB0aGUgY29udHJvbHMgaGF2ZSBiZWVuIHVw ZGF0ZWQuDQorCQkgKiBXZSBjYW4gYXZvaWQgdGhhdCBieSBsb2NraW5nIHRoZSBzZWN0aW9uLg0K KwkJICovDQorCQlzcGluX2xvY2tfaXJxc2F2ZSgmaXNjLT5hd2JfbG9jaywgZmxhZ3MpOw0KKwkJ aXNjX3VwZGF0ZV9hd2JfY3RybHMoaXNjKTsNCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlz Yy0+YXdiX2xvY2ssIGZsYWdzKTsNCisNCisJCS8qDQorCQkgKiBpZiB3ZSBhcmUgZG9pbmcganVz dCB0aGUgb25lIHRpbWUgd2hpdGUgYmFsYW5jZSBhZGp1c3RtZW50LA0KKwkJICogd2UgYXJlIGJh c2ljYWxseSBkb25lLg0KKwkJICovDQorCQlpZiAoY3RybHMtPmF3YiA9PSBJU0NfV0JfT05FVElN RSkgew0KKwkJCXY0bDJfaW5mbygmaXNjLT52NGwyX2RldiwNCisJCQkJICAiQ29tcGxldGVkIG9u ZSB0aW1lIHdoaXRlLWJhbGFuY2UgYWRqdXN0bWVudC5cbiIpOw0KKwkJCWN0cmxzLT5hd2IgPSBJ U0NfV0JfTk9ORTsNCisJCX0NCisJfQ0KKwlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfSElTX0NG RywgaGlzdF9pZCB8IGJheXNlbCB8IElTQ19ISVNfQ0ZHX1JBUik7DQorCWlzY191cGRhdGVfcHJv ZmlsZShpc2MpOw0KKwkvKiBpZiBhd2IgaGFzIGJlZW4gZGlzYWJsZWQsIHdlIGRvbid0IG5lZWQg dG8gc3RhcnQgYW5vdGhlciBoaXN0b2dyYW0gKi8NCisJaWYgKGN0cmxzLT5hd2IpDQorCQlyZWdt YXBfd3JpdGUocmVnbWFwLCBJU0NfQ1RSTEVOLCBJU0NfQ1RSTF9ISVNSRVEpOw0KKw0KKwlwbV9y dW50aW1lX3B1dF9zeW5jKGlzYy0+ZGV2KTsNCit9DQorDQorc3RhdGljIGludCBpc2Nfc19jdHJs KHN0cnVjdCB2NGwyX2N0cmwgKmN0cmwpDQorew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0g Y29udGFpbmVyX29mKGN0cmwtPmhhbmRsZXIsDQorCQkJCQkgICAgIHN0cnVjdCBpc2NfZGV2aWNl LCBjdHJscy5oYW5kbGVyKTsNCisJc3RydWN0IGlzY19jdHJscyAqY3RybHMgPSAmaXNjLT5jdHJs czsNCisNCisJaWYgKGN0cmwtPmZsYWdzICYgVjRMMl9DVFJMX0ZMQUdfSU5BQ1RJVkUpDQorCQly ZXR1cm4gMDsNCisNCisJc3dpdGNoIChjdHJsLT5pZCkgew0KKwljYXNlIFY0TDJfQ0lEX0JSSUdI VE5FU1M6DQorCQljdHJscy0+YnJpZ2h0bmVzcyA9IGN0cmwtPnZhbCAmIElTQ19DQkNfQlJJR0hU X01BU0s7DQorCQlicmVhazsNCisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoNCisJCWN0cmxzLT5j b250cmFzdCA9IGN0cmwtPnZhbCAmIElTQ19DQkNfQ09OVFJBU1RfTUFTSzsNCisJCWJyZWFrOw0K KwljYXNlIFY0TDJfQ0lEX0dBTU1BOg0KKwkJY3RybHMtPmdhbW1hX2luZGV4ID0gY3RybC0+dmFs Ow0KKwkJYnJlYWs7DQorCWNhc2UgVjRMMl9DSURfQVVUT19XSElURV9CQUxBTkNFOg0KKwkJaWYg KGN0cmwtPnZhbCA9PSAxKQ0KKwkJCWN0cmxzLT5hd2IgPSBJU0NfV0JfQVVUTzsNCisJCWVsc2UN CisJCQljdHJscy0+YXdiID0gSVNDX1dCX05PTkU7DQorDQorCQkvKiB3ZSBkaWQgbm90IGNvbmZp Z3VyZSBJU0MgeWV0ICovDQorCQlpZiAoIWlzYy0+Y29uZmlnLnNkX2Zvcm1hdCkNCisJCQlicmVh azsNCisNCisJCWlmIChjdHJscy0+aGlzdF9zdGF0ICE9IEhJU1RfRU5BQkxFRCkNCisJCQlpc2Nf cmVzZXRfYXdiX2N0cmxzKGlzYyk7DQorDQorCQlpZiAoaXNjLT5jdHJscy5hd2IgPT0gSVNDX1dC X0FVVE8gJiYNCisJCSAgICB2YjJfaXNfc3RyZWFtaW5nKCZpc2MtPnZiMl92aWRxKSAmJg0KKwkJ ICAgIElTQ19JU19GT1JNQVRfUkFXKGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlKSkN CisJCQlpc2Nfc2V0X2hpc3RvZ3JhbShpc2MsIHRydWUpOw0KKw0KKwkJYnJlYWs7DQorCWNhc2Ug VjRMMl9DSURfRE9fV0hJVEVfQkFMQU5DRToNCisJCS8qIGlmIEFXQiBpcyBlbmFibGVkLCBkbyBu b3RoaW5nICovDQorCQlpZiAoY3RybHMtPmF3YiA9PSBJU0NfV0JfQVVUTykNCisJCQlyZXR1cm4g MDsNCisNCisJCWN0cmxzLT5hd2IgPSBJU0NfV0JfT05FVElNRTsNCisJCWlzY19zZXRfaGlzdG9n cmFtKGlzYywgdHJ1ZSk7DQorCQl2NGwyX2RiZygxLCBkZWJ1ZywgJmlzYy0+djRsMl9kZXYsDQor CQkJICJPbmUgdGltZSB3aGl0ZS1iYWxhbmNlIHN0YXJ0ZWQuXG4iKTsNCisJCWJyZWFrOw0KKwlk ZWZhdWx0Og0KKwkJcmV0dXJuIC1FSU5WQUw7DQorCX0NCisNCisJcmV0dXJuIDA7DQorfQ0KKw0K K3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX29wcyBpc2NfY3RybF9vcHMgPSB7DQorCS5z X2N0cmwJPSBpc2Nfc19jdHJsLA0KK307DQorDQorc3RhdGljIGludCBpc2NfY3RybF9pbml0KHN0 cnVjdCBpc2NfZGV2aWNlICppc2MpDQorew0KKwljb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX29wcyAq b3BzID0gJmlzY19jdHJsX29wczsNCisJc3RydWN0IGlzY19jdHJscyAqY3RybHMgPSAmaXNjLT5j dHJsczsNCisJc3RydWN0IHY0bDJfY3RybF9oYW5kbGVyICpoZGwgPSAmY3RybHMtPmhhbmRsZXI7 DQorCWludCByZXQ7DQorDQorCWN0cmxzLT5oaXN0X3N0YXQgPSBISVNUX0lOSVQ7DQorCWlzY19y ZXNldF9hd2JfY3RybHMoaXNjKTsNCisNCisJcmV0ID0gdjRsMl9jdHJsX2hhbmRsZXJfaW5pdCho ZGwsIDUpOw0KKwlpZiAocmV0IDwgMCkNCisJCXJldHVybiByZXQ7DQorDQorCWN0cmxzLT5icmln aHRuZXNzID0gMDsNCisJY3RybHMtPmNvbnRyYXN0ID0gMjU2Ow0KKw0KKwl2NGwyX2N0cmxfbmV3 X3N0ZChoZGwsIG9wcywgVjRMMl9DSURfQlJJR0hUTkVTUywgLTEwMjQsIDEwMjMsIDEsIDApOw0K Kwl2NGwyX2N0cmxfbmV3X3N0ZChoZGwsIG9wcywgVjRMMl9DSURfQ09OVFJBU1QsIC0yMDQ4LCAy MDQ3LCAxLCAyNTYpOw0KKwl2NGwyX2N0cmxfbmV3X3N0ZChoZGwsIG9wcywgVjRMMl9DSURfR0FN TUEsIDAsIEdBTU1BX01BWCwgMSwgMik7DQorCXY0bDJfY3RybF9uZXdfc3RkKGhkbCwgb3BzLCBW NEwyX0NJRF9BVVRPX1dISVRFX0JBTEFOQ0UsIDAsIDEsIDEsIDEpOw0KKw0KKwkvKiBkb193aGl0 ZV9iYWxhbmNlIGlzIGEgYnV0dG9uLCBzbyBtaW4sbWF4LHN0ZXAsZGVmYXVsdCBhcmUgaWdub3Jl ZCAqLw0KKwlpc2MtPmRvX3diX2N0cmwgPSB2NGwyX2N0cmxfbmV3X3N0ZChoZGwsIG9wcywgVjRM Ml9DSURfRE9fV0hJVEVfQkFMQU5DRSwNCisJCQkJCSAgICAwLCAwLCAwLCAwKTsNCisNCisJdjRs Ml9jdHJsX2FjdGl2YXRlKGlzYy0+ZG9fd2JfY3RybCwgZmFsc2UpOw0KKw0KKwl2NGwyX2N0cmxf aGFuZGxlcl9zZXR1cChoZGwpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBp c2NfYXN5bmNfYm91bmQoc3RydWN0IHY0bDJfYXN5bmNfbm90aWZpZXIgKm5vdGlmaWVyLA0KKwkJ CSAgICBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRldiwNCisJCQkgICAgc3RydWN0IHY0bDJfYXN5 bmNfc3ViZGV2ICphc2QpDQorew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gY29udGFpbmVy X29mKG5vdGlmaWVyLT52NGwyX2RldiwNCisJCQkJCSAgICAgIHN0cnVjdCBpc2NfZGV2aWNlLCB2 NGwyX2Rldik7DQorCXN0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eSAqc3ViZGV2X2VudGl0eSA9DQor CQljb250YWluZXJfb2Yobm90aWZpZXIsIHN0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eSwgbm90aWZp ZXIpOw0KKw0KKwlpZiAodmlkZW9faXNfcmVnaXN0ZXJlZCgmaXNjLT52aWRlb19kZXYpKSB7DQor CQl2NGwyX2VycigmaXNjLT52NGwyX2RldiwgIm9ubHkgc3VwcG9ydHMgb25lIHN1Yi1kZXZpY2Uu XG4iKTsNCisJCXJldHVybiAtRUJVU1k7DQorCX0NCisNCisJc3ViZGV2X2VudGl0eS0+c2QgPSBz dWJkZXY7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgdm9pZCBpc2NfYXN5bmNfdW5i aW5kKHN0cnVjdCB2NGwyX2FzeW5jX25vdGlmaWVyICpub3RpZmllciwNCisJCQkgICAgICBzdHJ1 Y3QgdjRsMl9zdWJkZXYgKnN1YmRldiwNCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9hc3luY19zdWJk ZXYgKmFzZCkNCit7DQorCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSBjb250YWluZXJfb2Yobm90 aWZpZXItPnY0bDJfZGV2LA0KKwkJCQkJICAgICAgc3RydWN0IGlzY19kZXZpY2UsIHY0bDJfZGV2 KTsNCisJY2FuY2VsX3dvcmtfc3luYygmaXNjLT5hd2Jfd29yayk7DQorCXZpZGVvX3VucmVnaXN0 ZXJfZGV2aWNlKCZpc2MtPnZpZGVvX2Rldik7DQorCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoJmlz Yy0+Y3RybHMuaGFuZGxlcik7DQorfQ0KKw0KK3N0YXRpYyBzdHJ1Y3QgaXNjX2Zvcm1hdCAqZmlu ZF9mb3JtYXRfYnlfY29kZSh1bnNpZ25lZCBpbnQgY29kZSwgaW50ICppbmRleCkNCit7DQorCXN0 cnVjdCBpc2NfZm9ybWF0ICpmbXQgPSAmZm9ybWF0c19saXN0WzBdOw0KKwl1bnNpZ25lZCBpbnQg aTsNCisNCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZm9ybWF0c19saXN0KTsgaSsrKSB7 DQorCQlpZiAoZm10LT5tYnVzX2NvZGUgPT0gY29kZSkgew0KKwkJCSppbmRleCA9IGk7DQorCQkJ cmV0dXJuIGZtdDsNCisJCX0NCisNCisJCWZtdCsrOw0KKwl9DQorDQorCXJldHVybiBOVUxMOw0K K30NCisNCitzdGF0aWMgaW50IGlzY19mb3JtYXRzX2luaXQoc3RydWN0IGlzY19kZXZpY2UgKmlz YykNCit7DQorCXN0cnVjdCBpc2NfZm9ybWF0ICpmbXQ7DQorCXN0cnVjdCB2NGwyX3N1YmRldiAq c3ViZGV2ID0gaXNjLT5jdXJyZW50X3N1YmRldi0+c2Q7DQorCXVuc2lnbmVkIGludCBudW1fZm10 cywgaSwgajsNCisJdTMyIGxpc3Rfc2l6ZSA9IEFSUkFZX1NJWkUoZm9ybWF0c19saXN0KTsNCisJ c3RydWN0IHY0bDJfc3ViZGV2X21idXNfY29kZV9lbnVtIG1idXNfY29kZSA9IHsNCisJCS53aGlj aCA9IFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkUsDQorCX07DQorDQorCW51bV9mbXRzID0gMDsN CisJd2hpbGUgKCF2NGwyX3N1YmRldl9jYWxsKHN1YmRldiwgcGFkLCBlbnVtX21idXNfY29kZSwN CisJICAgICAgIE5VTEwsICZtYnVzX2NvZGUpKSB7DQorCQltYnVzX2NvZGUuaW5kZXgrKzsNCisN CisJCWZtdCA9IGZpbmRfZm9ybWF0X2J5X2NvZGUobWJ1c19jb2RlLmNvZGUsICZpKTsNCisJCWlm ICghZm10KSB7DQorCQkJdjRsMl93YXJuKCZpc2MtPnY0bDJfZGV2LCAiTWJ1cyBjb2RlICV4IG5v dCBzdXBwb3J0ZWRcbiIsDQorCQkJCSAgbWJ1c19jb2RlLmNvZGUpOw0KKwkJCWNvbnRpbnVlOw0K KwkJfQ0KKw0KKwkJZm10LT5zZF9zdXBwb3J0ID0gdHJ1ZTsNCisJCW51bV9mbXRzKys7DQorCX0N CisNCisJaWYgKCFudW1fZm10cykNCisJCXJldHVybiAtRU5YSU87DQorDQorCWlzYy0+bnVtX3Vz ZXJfZm9ybWF0cyA9IG51bV9mbXRzOw0KKwlpc2MtPnVzZXJfZm9ybWF0cyA9IGRldm1fa2NhbGxv Yyhpc2MtPmRldiwNCisJCQkJCSBudW1fZm10cywgc2l6ZW9mKCppc2MtPnVzZXJfZm9ybWF0cyks DQorCQkJCQkgR0ZQX0tFUk5FTCk7DQorCWlmICghaXNjLT51c2VyX2Zvcm1hdHMpDQorCQlyZXR1 cm4gLUVOT01FTTsNCisNCisJZm10ID0gJmZvcm1hdHNfbGlzdFswXTsNCisJZm9yIChpID0gMCwg aiA9IDA7IGkgPCBsaXN0X3NpemU7IGkrKykgew0KKwkJaWYgKGZtdC0+c2Rfc3VwcG9ydCkNCisJ CQlpc2MtPnVzZXJfZm9ybWF0c1tqKytdID0gZm10Ow0KKwkJZm10Kys7DQorCX0NCisNCisJcmV0 dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgaXNjX3NldF9kZWZhdWx0X2ZtdChzdHJ1Y3QgaXNj X2RldmljZSAqaXNjKQ0KK3sNCisJc3RydWN0IHY0bDJfZm9ybWF0IGYgPSB7DQorCQkudHlwZSA9 IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwNCisJCS5mbXQucGl4ID0gew0KKwkJCS53aWR0 aAkJPSBWR0FfV0lEVEgsDQorCQkJLmhlaWdodAkJPSBWR0FfSEVJR0hULA0KKwkJCS5maWVsZAkJ PSBWNEwyX0ZJRUxEX05PTkUsDQorCQkJLnBpeGVsZm9ybWF0CT0gaXNjLT51c2VyX2Zvcm1hdHNb MF0tPmZvdXJjYywNCisJCX0sDQorCX07DQorCWludCByZXQ7DQorDQorCXJldCA9IGlzY190cnlf Zm10KGlzYywgJmYsIE5VTEwpOw0KKwlpZiAocmV0KQ0KKwkJcmV0dXJuIHJldDsNCisNCisJaXNj LT5mbXQgPSBmOw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBpc2NfYXN5bmNfY29t cGxldGUoc3RydWN0IHY0bDJfYXN5bmNfbm90aWZpZXIgKm5vdGlmaWVyKQ0KK3sNCisJc3RydWN0 IGlzY19kZXZpY2UgKmlzYyA9IGNvbnRhaW5lcl9vZihub3RpZmllci0+djRsMl9kZXYsDQorCQkJ CQkgICAgICBzdHJ1Y3QgaXNjX2RldmljZSwgdjRsMl9kZXYpOw0KKwlzdHJ1Y3QgdmlkZW9fZGV2 aWNlICp2ZGV2ID0gJmlzYy0+dmlkZW9fZGV2Ow0KKwlzdHJ1Y3QgdmIyX3F1ZXVlICpxID0gJmlz Yy0+dmIyX3ZpZHE7DQorCWludCByZXQ7DQorDQorCUlOSVRfV09SSygmaXNjLT5hd2Jfd29yaywg aXNjX2F3Yl93b3JrKTsNCisNCisJcmV0ID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2X25v ZGVzKCZpc2MtPnY0bDJfZGV2KTsNCisJaWYgKHJldCA8IDApIHsNCisJCXY0bDJfZXJyKCZpc2Mt PnY0bDJfZGV2LCAiRmFpbGVkIHRvIHJlZ2lzdGVyIHN1YmRldiBub2Rlc1xuIik7DQorCQlyZXR1 cm4gcmV0Ow0KKwl9DQorDQorCWlzYy0+Y3VycmVudF9zdWJkZXYgPSBjb250YWluZXJfb2Yobm90 aWZpZXIsDQorCQkJCQkgICBzdHJ1Y3QgaXNjX3N1YmRldl9lbnRpdHksIG5vdGlmaWVyKTsNCisJ bXV0ZXhfaW5pdCgmaXNjLT5sb2NrKTsNCisJaW5pdF9jb21wbGV0aW9uKCZpc2MtPmNvbXApOw0K Kw0KKwkvKiBJbml0aWFsaXplIHZpZGVvYnVmMiBxdWV1ZSAqLw0KKwlxLT50eXBlCQkJPSBWNEwy X0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7DQorCXEtPmlvX21vZGVzCQk9IFZCMl9NTUFQIHwgVkIy X0RNQUJVRiB8IFZCMl9SRUFEOw0KKwlxLT5kcnZfcHJpdgkJPSBpc2M7DQorCXEtPmJ1Zl9zdHJ1 Y3Rfc2l6ZQk9IHNpemVvZihzdHJ1Y3QgaXNjX2J1ZmZlcik7DQorCXEtPm9wcwkJCT0gJmlzY192 YjJfb3BzOw0KKwlxLT5tZW1fb3BzCQk9ICZ2YjJfZG1hX2NvbnRpZ19tZW1vcHM7DQorCXEtPnRp bWVzdGFtcF9mbGFncwk9IFY0TDJfQlVGX0ZMQUdfVElNRVNUQU1QX01PTk9UT05JQzsNCisJcS0+ bG9jawkJCT0gJmlzYy0+bG9jazsNCisJcS0+bWluX2J1ZmZlcnNfbmVlZGVkCT0gMTsNCisJcS0+ ZGV2CQkJPSBpc2MtPmRldjsNCisNCisJcmV0ID0gdmIyX3F1ZXVlX2luaXQocSk7DQorCWlmIChy ZXQgPCAwKSB7DQorCQl2NGwyX2VycigmaXNjLT52NGwyX2RldiwNCisJCQkgInZiMl9xdWV1ZV9p bml0KCkgZmFpbGVkOiAlZFxuIiwgcmV0KTsNCisJCXJldHVybiByZXQ7DQorCX0NCisNCisJLyog SW5pdCB2aWRlbyBkbWEgcXVldWVzICovDQorCUlOSVRfTElTVF9IRUFEKCZpc2MtPmRtYV9xdWV1 ZSk7DQorCXNwaW5fbG9ja19pbml0KCZpc2MtPmRtYV9xdWV1ZV9sb2NrKTsNCisJc3Bpbl9sb2Nr X2luaXQoJmlzYy0+YXdiX2xvY2spOw0KKw0KKwlyZXQgPSBpc2NfZm9ybWF0c19pbml0KGlzYyk7 DQorCWlmIChyZXQgPCAwKSB7DQorCQl2NGwyX2VycigmaXNjLT52NGwyX2RldiwNCisJCQkgIklu aXQgZm9ybWF0IGZhaWxlZDogJWRcbiIsIHJldCk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQor CXJldCA9IGlzY19zZXRfZGVmYXVsdF9mbXQoaXNjKTsNCisJaWYgKHJldCkgew0KKwkJdjRsMl9l cnIoJmlzYy0+djRsMl9kZXYsICJDb3VsZCBub3Qgc2V0IGRlZmF1bHQgZm9ybWF0XG4iKTsNCisJ CXJldHVybiByZXQ7DQorCX0NCisNCisJcmV0ID0gaXNjX2N0cmxfaW5pdChpc2MpOw0KKwlpZiAo cmV0KSB7DQorCQl2NGwyX2VycigmaXNjLT52NGwyX2RldiwgIkluaXQgaXNjIGN0cm9scyBmYWls ZWQ6ICVkXG4iLCByZXQpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0KKwkvKiBSZWdpc3RlciB2 aWRlbyBkZXZpY2UgKi8NCisJc3Ryc2NweSh2ZGV2LT5uYW1lLCBBVE1FTF9JU0NfTkFNRSwgc2l6 ZW9mKHZkZXYtPm5hbWUpKTsNCisJdmRldi0+cmVsZWFzZQkJPSB2aWRlb19kZXZpY2VfcmVsZWFz ZV9lbXB0eTsNCisJdmRldi0+Zm9wcwkJPSAmaXNjX2ZvcHM7DQorCXZkZXYtPmlvY3RsX29wcwkJ PSAmaXNjX2lvY3RsX29wczsNCisJdmRldi0+djRsMl9kZXYJCT0gJmlzYy0+djRsMl9kZXY7DQor CXZkZXYtPnZmbF9kaXIJCT0gVkZMX0RJUl9SWDsNCisJdmRldi0+cXVldWUJCT0gcTsNCisJdmRl di0+bG9jawkJPSAmaXNjLT5sb2NrOw0KKwl2ZGV2LT5jdHJsX2hhbmRsZXIJPSAmaXNjLT5jdHJs cy5oYW5kbGVyOw0KKwl2ZGV2LT5kZXZpY2VfY2Fwcwk9IFY0TDJfQ0FQX1NUUkVBTUlORyB8IFY0 TDJfQ0FQX1ZJREVPX0NBUFRVUkU7DQorCXZpZGVvX3NldF9kcnZkYXRhKHZkZXYsIGlzYyk7DQor DQorCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh2ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCAt MSk7DQorCWlmIChyZXQgPCAwKSB7DQorCQl2NGwyX2VycigmaXNjLT52NGwyX2RldiwNCisJCQkg InZpZGVvX3JlZ2lzdGVyX2RldmljZSBmYWlsZWQ6ICVkXG4iLCByZXQpOw0KKwkJcmV0dXJuIHJl dDsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorY29uc3Qgc3RydWN0IHY0bDJfYXN5bmNf bm90aWZpZXJfb3BlcmF0aW9ucyBpc2NfYXN5bmNfb3BzID0gew0KKwkuYm91bmQgPSBpc2NfYXN5 bmNfYm91bmQsDQorCS51bmJpbmQgPSBpc2NfYXN5bmNfdW5iaW5kLA0KKwkuY29tcGxldGUgPSBp c2NfYXN5bmNfY29tcGxldGUsDQorfTsNCisNCit2b2lkIGlzY19zdWJkZXZfY2xlYW51cChzdHJ1 Y3QgaXNjX2RldmljZSAqaXNjKQ0KK3sNCisJc3RydWN0IGlzY19zdWJkZXZfZW50aXR5ICpzdWJk ZXZfZW50aXR5Ow0KKw0KKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHN1YmRldl9lbnRpdHksICZpc2Mt PnN1YmRldl9lbnRpdGllcywgbGlzdCkgew0KKwkJdjRsMl9hc3luY19ub3RpZmllcl91bnJlZ2lz dGVyKCZzdWJkZXZfZW50aXR5LT5ub3RpZmllcik7DQorCQl2NGwyX2FzeW5jX25vdGlmaWVyX2Ns ZWFudXAoJnN1YmRldl9lbnRpdHktPm5vdGlmaWVyKTsNCisJfQ0KKw0KKwlJTklUX0xJU1RfSEVB RCgmaXNjLT5zdWJkZXZfZW50aXRpZXMpOw0KK30NCisNCitpbnQgaXNjX3BpcGVsaW5lX2luaXQo c3RydWN0IGlzY19kZXZpY2UgKmlzYykNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9IGlzYy0+ ZGV2Ow0KKwlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBpc2MtPnJlZ21hcDsNCisJc3RydWN0IHJl Z21hcF9maWVsZCAqcmVnczsNCisJdW5zaWduZWQgaW50IGk7DQorDQorCS8qIFdCLS0+Q0ZBLS0+ Q0MtLT5HQU0tLT5DU0MtLT5DQkMtLT5TVUI0MjItLT5TVUI0MjAgKi8NCisJY29uc3Qgc3RydWN0 IHJlZ19maWVsZCByZWdmaWVsZHNbSVNDX1BJUEVfTElORV9OT0RFX05VTV0gPSB7DQorCQlSRUdf RklFTEQoSVNDX1dCX0NUUkwsIDAsIDApLA0KKwkJUkVHX0ZJRUxEKElTQ19DRkFfQ1RSTCwgMCwg MCksDQorCQlSRUdfRklFTEQoSVNDX0NDX0NUUkwsIDAsIDApLA0KKwkJUkVHX0ZJRUxEKElTQ19H QU1fQ1RSTCwgMCwgMCksDQorCQlSRUdfRklFTEQoSVNDX0dBTV9DVFJMLCAxLCAxKSwNCisJCVJF R19GSUVMRChJU0NfR0FNX0NUUkwsIDIsIDIpLA0KKwkJUkVHX0ZJRUxEKElTQ19HQU1fQ1RSTCwg MywgMyksDQorCQlSRUdfRklFTEQoSVNDX0NTQ19DVFJMLCAwLCAwKSwNCisJCVJFR19GSUVMRChJ U0NfQ0JDX0NUUkwsIDAsIDApLA0KKwkJUkVHX0ZJRUxEKElTQ19TVUI0MjJfQ1RSTCwgMCwgMCks DQorCQlSRUdfRklFTEQoSVNDX1NVQjQyMF9DVFJMLCAwLCAwKSwNCisJfTsNCisNCisJZm9yIChp ID0gMDsgaSA8IElTQ19QSVBFX0xJTkVfTk9ERV9OVU07IGkrKykgew0KKwkJcmVncyA9IGRldm1f cmVnbWFwX2ZpZWxkX2FsbG9jKGRldiwgcmVnbWFwLCByZWdmaWVsZHNbaV0pOw0KKwkJaWYgKElT X0VSUihyZWdzKSkNCisJCQlyZXR1cm4gUFRSX0VSUihyZWdzKTsNCisNCisJCWlzYy0+cGlwZWxp bmVbaV0gPSAgcmVnczsNCisJfQ0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorLyogcmVnbWFwIGNv bmZpZ3VyYXRpb24gKi8NCisjZGVmaW5lIEFUTUVMX0lTQ19SRUdfTUFYICAgIDB4YmZjDQorY29u c3Qgc3RydWN0IHJlZ21hcF9jb25maWcgaXNjX3JlZ21hcF9jb25maWcgPSB7DQorCS5yZWdfYml0 cyAgICAgICA9IDMyLA0KKwkucmVnX3N0cmlkZSAgICAgPSA0LA0KKwkudmFsX2JpdHMgICAgICAg PSAzMiwNCisJLm1heF9yZWdpc3Rlcgk9IEFUTUVMX0lTQ19SRUdfTUFYLA0KK307DQorDQpkaWZm IC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1pc2MuYyBiL2RyaXZl cnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvYXRtZWwtaXNjLmMNCmRlbGV0ZWQgZmlsZSBtb2RlIDEw MDY0NA0KaW5kZXggNmY4MDk4MC4uMDAwMDAwMA0KLS0tIGEvZHJpdmVycy9tZWRpYS9wbGF0Zm9y bS9hdG1lbC9hdG1lbC1pc2MuYw0KKysrIC9kZXYvbnVsbA0KQEAgLTEsMjYzMSArMCwwIEBADQot Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seQ0KLS8qDQotICogQXRtZWwg SW1hZ2UgU2Vuc29yIENvbnRyb2xsZXIgKElTQykgZHJpdmVyDQotICoNCi0gKiBDb3B5cmlnaHQg KEMpIDIwMTYgQXRtZWwNCi0gKg0KLSAqIEF1dGhvcjogU29uZ2p1biBXdSA8c29uZ2p1bi53dUBt aWNyb2NoaXAuY29tPg0KLSAqDQotICogU2Vuc29yLS0+UEZFLS0+V0ItLT5DRkEtLT5DQy0tPkdB TS0tPkNTQy0tPkNCQy0tPlNVQi0tPlJMUC0tPkRNQQ0KLSAqDQotICogSVNDIHZpZGVvIHBpcGVs aW5lIGludGVncmF0ZXMgdGhlIGZvbGxvd2luZyBzdWJtb2R1bGVzOg0KLSAqIFBGRTogUGFyYWxs ZWwgRnJvbnQgRW5kIHRvIHNhbXBsZSB0aGUgY2FtZXJhIHNlbnNvciBpbnB1dCBzdHJlYW0NCi0g KiAgV0I6IFByb2dyYW1tYWJsZSB3aGl0ZSBiYWxhbmNlIGluIHRoZSBCYXllciBkb21haW4NCi0g KiBDRkE6IENvbG9yIGZpbHRlciBhcnJheSBpbnRlcnBvbGF0aW9uIG1vZHVsZQ0KLSAqICBDQzog UHJvZ3JhbW1hYmxlIGNvbG9yIGNvcnJlY3Rpb24NCi0gKiBHQU06IEdhbW1hIGNvcnJlY3Rpb24N Ci0gKiBDU0M6IFByb2dyYW1tYWJsZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uDQotICogQ0JDOiBD b250cmFzdCBhbmQgQnJpZ2h0bmVzcyBjb250cm9sDQotICogU1VCOiBUaGlzIG1vZHVsZSBwZXJm b3JtcyBZQ2JDcjQ0NCB0byBZQ2JDcjQyMCBjaHJvbWluYW5jZSBzdWJzYW1wbGluZw0KLSAqIFJM UDogVGhpcyBtb2R1bGUgcGVyZm9ybXMgcm91bmRpbmcsIHJhbmdlIGxpbWl0aW5nDQotICogICAg ICBhbmQgcGFja2luZyBvZiB0aGUgaW5jb21pbmcgZGF0YQ0KLSAqLw0KLQ0KLSNpbmNsdWRlIDxs aW51eC9jbGsuaD4NCi0jaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+DQotI2luY2x1ZGUgPGxpbnV4 L2Nsay1wcm92aWRlci5oPg0KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KLSNpbmNsdWRlIDxs aW51eC9pbnRlcnJ1cHQuaD4NCi0jaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+DQotI2luY2x1ZGUg PGxpbnV4L21vZHVsZS5oPg0KLSNpbmNsdWRlIDxsaW51eC9vZi5oPg0KLSNpbmNsdWRlIDxsaW51 eC9vZl9ncmFwaC5oPg0KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCi0jaW5j bHVkZSA8bGludXgvcG1fcnVudGltZS5oPg0KLSNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4NCi0j aW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+DQotDQotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3Ry bHMuaD4NCi0jaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4NCi0jaW5jbHVkZSA8bWVkaWEv djRsMi1ldmVudC5oPg0KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWltYWdlLXNpemVzLmg+DQotI2lu Y2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4NCi0jaW5jbHVkZSA8bWVkaWEvdjRsMi1md25vZGUu aD4NCi0jaW5jbHVkZSA8bWVkaWEvdjRsMi1zdWJkZXYuaD4NCi0jaW5jbHVkZSA8bWVkaWEvdmlk ZW9idWYyLWRtYS1jb250aWcuaD4NCi0NCi0jaW5jbHVkZSAiYXRtZWwtaXNjLXJlZ3MuaCINCi0N Ci0jZGVmaW5lIEFUTUVMX0lTQ19OQU1FCQkiYXRtZWxfaXNjIg0KLQ0KLSNkZWZpbmUgSVNDX01B WF9TVVBQT1JUX1dJRFRIICAgMjU5Mg0KLSNkZWZpbmUgSVNDX01BWF9TVVBQT1JUX0hFSUdIVCAg MTk0NA0KLQ0KLSNkZWZpbmUgSVNDX0NMS19NQVhfRElWCQkyNTUNCi0NCi1lbnVtIGlzY19jbGtf aWQgew0KLQlJU0NfSVNQQ0sgPSAwLA0KLQlJU0NfTUNLID0gMSwNCi19Ow0KLQ0KLXN0cnVjdCBp c2NfY2xrIHsNCi0Jc3RydWN0IGNsa19odyAgIGh3Ow0KLQlzdHJ1Y3QgY2xrICAgICAgKmNsazsN Ci0Jc3RydWN0IHJlZ21hcCAgICpyZWdtYXA7DQotCXNwaW5sb2NrX3QJbG9jazsNCi0JdTgJCWlk Ow0KLQl1OAkJcGFyZW50X2lkOw0KLQl1MzIJCWRpdjsNCi0Jc3RydWN0IGRldmljZQkqZGV2Ow0K LX07DQotDQotI2RlZmluZSB0b19pc2NfY2xrKGh3KSBjb250YWluZXJfb2YoaHcsIHN0cnVjdCBp c2NfY2xrLCBodykNCi0NCi1zdHJ1Y3QgaXNjX2J1ZmZlciB7DQotCXN0cnVjdCB2YjJfdjRsMl9i dWZmZXIgIHZiOw0KLQlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7DQotfTsNCi0NCi1zdHJ1Y3QgaXNj X3N1YmRldl9lbnRpdHkgew0KLQlzdHJ1Y3QgdjRsMl9zdWJkZXYJCSpzZDsNCi0Jc3RydWN0IHY0 bDJfYXN5bmNfc3ViZGV2CSphc2Q7DQotCXN0cnVjdCB2NGwyX2FzeW5jX25vdGlmaWVyICAgICAg bm90aWZpZXI7DQotDQotCXUzMiBwZmVfY2ZnMDsNCi0NCi0Jc3RydWN0IGxpc3RfaGVhZCBsaXN0 Ow0KLX07DQotDQotLyoNCi0gKiBzdHJ1Y3QgaXNjX2Zvcm1hdCAtIElTQyBtZWRpYSBidXMgZm9y bWF0IGluZm9ybWF0aW9uDQotCQkJVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyB0aGUgaW50ZXJm YWNlIGJldHdlZW4gdGhlIElTQw0KLQkJCWFuZCB0aGUgc2Vuc29yLiBJdCdzIHRoZSBpbnB1dCBm b3JtYXQgcmVjZWl2ZWQgYnkNCi0JCQl0aGUgSVNDLg0KLSAqIEBmb3VyY2M6CQlGb3VyY2MgY29k ZSBmb3IgdGhpcyBmb3JtYXQNCi0gKiBAbWJ1c19jb2RlOgkJVjRMMiBtZWRpYSBidXMgZm9ybWF0 IGNvZGUuDQotICogQGNmYV9iYXljZmc6CQlJZiB0aGlzIGZvcm1hdCBpcyBSQVcgQkFZRVIsIGlu ZGljYXRlIHRoZSB0eXBlIG9mIGJheWVyLg0KLQkJCXRoaXMgaXMgZWl0aGVyIEJHQkcsIFJHUkcs IGV0Yy4NCi0gKiBAcGZlX2NmZzBfYnBzOglOdW1iZXIgb2YgaGFyZHdhcmUgZGF0YSBsaW5lcyBj b25uZWN0ZWQgdG8gdGhlIElTQw0KLSAqLw0KLQ0KLXN0cnVjdCBpc2NfZm9ybWF0IHsNCi0JdTMy CWZvdXJjYzsNCi0JdTMyCW1idXNfY29kZTsNCi0JdTMyCWNmYV9iYXljZmc7DQotDQotCWJvb2wJ c2Rfc3VwcG9ydDsNCi0JdTMyCXBmZV9jZmcwX2JwczsNCi19Ow0KLQ0KLS8qIFBpcGVsaW5lIGJp dG1hcCAqLw0KLSNkZWZpbmUgV0JfRU5BQkxFCUJJVCgwKQ0KLSNkZWZpbmUgQ0ZBX0VOQUJMRQlC SVQoMSkNCi0jZGVmaW5lIENDX0VOQUJMRQlCSVQoMikNCi0jZGVmaW5lIEdBTV9FTkFCTEUJQklU KDMpDQotI2RlZmluZSBHQU1fQkVOQUJMRQlCSVQoNCkNCi0jZGVmaW5lIEdBTV9HRU5BQkxFCUJJ VCg1KQ0KLSNkZWZpbmUgR0FNX1JFTkFCTEUJQklUKDYpDQotI2RlZmluZSBDU0NfRU5BQkxFCUJJ VCg3KQ0KLSNkZWZpbmUgQ0JDX0VOQUJMRQlCSVQoOCkNCi0jZGVmaW5lIFNVQjQyMl9FTkFCTEUJ QklUKDkpDQotI2RlZmluZSBTVUI0MjBfRU5BQkxFCUJJVCgxMCkNCi0NCi0jZGVmaW5lIEdBTV9F TkFCTEVTCShHQU1fUkVOQUJMRSB8IEdBTV9HRU5BQkxFIHwgR0FNX0JFTkFCTEUgfCBHQU1fRU5B QkxFKQ0KLQ0KLS8qDQotICogc3RydWN0IGZtdF9jb25maWcgLSBJU0MgZm9ybWF0IGNvbmZpZ3Vy YXRpb24gYW5kIGludGVybmFsIHBpcGVsaW5lDQotCQkJVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50 cyB0aGUgaW50ZXJuYWwgY29uZmlndXJhdGlvbg0KLQkJCW9mIHRoZSBJU0MuDQotCQkJSXQgYWxz byBob2xkcyB0aGUgZm9ybWF0IHRoYXQgSVNDIHdpbGwgcHJlc2VudCB0byB2NGwyLg0KLSAqIEBz ZF9mb3JtYXQ6CQlQb2ludGVyIHRvIGFuIGlzY19mb3JtYXQgc3RydWN0IHRoYXQgaG9sZHMgdGhl IHNlbnNvcg0KLQkJCWNvbmZpZ3VyYXRpb24uDQotICogQGZvdXJjYzoJCUZvdXJjYyBjb2RlIGZv ciB0aGlzIGZvcm1hdC4NCi0gKiBAYnBwOgkJQnl0ZXMgcGVyIHBpeGVsIGluIHRoZSBjdXJyZW50 IGZvcm1hdC4NCi0gKiBAcmxwX2NmZ19tb2RlOglDb25maWd1cmF0aW9uIG9mIHRoZSBSTFAgKHJv dW5kaW5nLCBsaW1pdGluZyBwYWNrYWdpbmcpDQotICogQGRjZmdfaW1vZGU6CQlDb25maWd1cmF0 aW9uIG9mIHRoZSBpbnB1dCBvZiB0aGUgRE1BIG1vZHVsZQ0KLSAqIEBkY3RybF9kdmlldzoJQ29u ZmlndXJhdGlvbiBvZiB0aGUgb3V0cHV0IG9mIHRoZSBETUEgbW9kdWxlDQotICogQGJpdHNfcGlw ZWxpbmU6CUNvbmZpZ3VyYXRpb24gb2YgdGhlIHBpcGVsaW5lLCB3aGljaCBtb2R1bGVzIGFyZSBl bmFibGVkDQotICovDQotc3RydWN0IGZtdF9jb25maWcgew0KLQlzdHJ1Y3QgaXNjX2Zvcm1hdAkq c2RfZm9ybWF0Ow0KLQ0KLQl1MzIJCQlmb3VyY2M7DQotCXU4CQkJYnBwOw0KLQ0KLQl1MzIJCQly bHBfY2ZnX21vZGU7DQotCXUzMgkJCWRjZmdfaW1vZGU7DQotCXUzMgkJCWRjdHJsX2R2aWV3Ow0K LQ0KLQl1MzIJCQliaXRzX3BpcGVsaW5lOw0KLX07DQotDQotI2RlZmluZSBISVNUX0VOVFJJRVMJ CTUxMg0KLSNkZWZpbmUgSElTVF9CQVlFUgkJKElTQ19ISVNfQ0ZHX01PREVfQiArIDEpDQotDQot ZW51bXsNCi0JSElTVF9JTklUID0gMCwNCi0JSElTVF9FTkFCTEVELA0KLQlISVNUX0RJU0FCTEVE LA0KLX07DQotDQotc3RydWN0IGlzY19jdHJscyB7DQotCXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxl ciBoYW5kbGVyOw0KLQ0KLQl1MzIgYnJpZ2h0bmVzczsNCi0JdTMyIGNvbnRyYXN0Ow0KLQl1OCBn YW1tYV9pbmRleDsNCi0jZGVmaW5lIElTQ19XQl9OT05FCTANCi0jZGVmaW5lIElTQ19XQl9BVVRP CTENCi0jZGVmaW5lIElTQ19XQl9PTkVUSU1FCTINCi0JdTggYXdiOw0KLQ0KLQkvKiBvbmUgZm9y IGVhY2ggY29tcG9uZW50IDogR1IsIFIsIEdCLCBCICovDQotCXUzMiBnYWluW0hJU1RfQkFZRVJd Ow0KLQl1MzIgb2Zmc2V0W0hJU1RfQkFZRVJdOw0KLQ0KLQl1MzIgaGlzdF9lbnRyeVtISVNUX0VO VFJJRVNdOw0KLQl1MzIgaGlzdF9jb3VudFtISVNUX0JBWUVSXTsNCi0JdTggaGlzdF9pZDsNCi0J dTggaGlzdF9zdGF0Ow0KLSNkZWZpbmUgSElTVF9NSU5fSU5ERVgJCTANCi0jZGVmaW5lIEhJU1Rf TUFYX0lOREVYCQkxDQotCXUzMiBoaXN0X21pbm1heFtISVNUX0JBWUVSXVsyXTsNCi19Ow0KLQ0K LSNkZWZpbmUgSVNDX1BJUEVfTElORV9OT0RFX05VTQkxMQ0KLQ0KLXN0cnVjdCBpc2NfZGV2aWNl IHsNCi0Jc3RydWN0IHJlZ21hcAkJKnJlZ21hcDsNCi0Jc3RydWN0IGNsawkJKmhjbG9jazsNCi0J c3RydWN0IGNsawkJKmlzcGNrOw0KLQlzdHJ1Y3QgaXNjX2NsawkJaXNjX2Nsa3NbMl07DQotDQot CXN0cnVjdCBkZXZpY2UJCSpkZXY7DQotCXN0cnVjdCB2NGwyX2RldmljZQl2NGwyX2RldjsNCi0J c3RydWN0IHZpZGVvX2RldmljZQl2aWRlb19kZXY7DQotDQotCXN0cnVjdCB2YjJfcXVldWUJdmIy X3ZpZHE7DQotCXNwaW5sb2NrX3QJCWRtYV9xdWV1ZV9sb2NrOw0KLQlzdHJ1Y3QgbGlzdF9oZWFk CWRtYV9xdWV1ZTsNCi0Jc3RydWN0IGlzY19idWZmZXIJKmN1cl9mcm07DQotCXVuc2lnbmVkIGlu dAkJc2VxdWVuY2U7DQotCWJvb2wJCQlzdG9wOw0KLQlzdHJ1Y3QgY29tcGxldGlvbgljb21wOw0K LQ0KLQlzdHJ1Y3QgdjRsMl9mb3JtYXQJZm10Ow0KLQlzdHJ1Y3QgaXNjX2Zvcm1hdAkqKnVzZXJf Zm9ybWF0czsNCi0JdW5zaWduZWQgaW50CQludW1fdXNlcl9mb3JtYXRzOw0KLQ0KLQlzdHJ1Y3Qg Zm10X2NvbmZpZwljb25maWc7DQotCXN0cnVjdCBmbXRfY29uZmlnCXRyeV9jb25maWc7DQotDQot CXN0cnVjdCBpc2NfY3RybHMJY3RybHM7DQotCXN0cnVjdCB2NGwyX2N0cmwJKmRvX3diX2N0cmw7 DQotCXN0cnVjdCB3b3JrX3N0cnVjdAlhd2Jfd29yazsNCi0NCi0Jc3RydWN0IG11dGV4CQlsb2Nr Ow0KLQlzcGlubG9ja190CQlhd2JfbG9jazsNCi0NCi0Jc3RydWN0IHJlZ21hcF9maWVsZAkqcGlw ZWxpbmVbSVNDX1BJUEVfTElORV9OT0RFX05VTV07DQotDQotCXN0cnVjdCBpc2Nfc3ViZGV2X2Vu dGl0eQkqY3VycmVudF9zdWJkZXY7DQotCXN0cnVjdCBsaXN0X2hlYWQJCXN1YmRldl9lbnRpdGll czsNCi19Ow0KLQ0KLS8qIFRoaXMgaXMgYSBsaXN0IG9mIHRoZSBmb3JtYXRzIHRoYXQgdGhlIElT QyBjYW4gKm91dHB1dCogKi8NCi1zdGF0aWMgc3RydWN0IGlzY19mb3JtYXQgY29udHJvbGxlcl9m b3JtYXRzW10gPSB7DQotCXsNCi0JCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX0FSR0I0NDQsDQot CX0sDQotCXsNCi0JCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX0FSR0I1NTUsDQotCX0sDQotCXsN Ci0JCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1JHQjU2NSwNCi0JfSwNCi0Jew0KLQkJLmZvdXJj YwkJPSBWNEwyX1BJWF9GTVRfQUJHUjMyLA0KLQl9LA0KLQl7DQotCQkuZm91cmNjCQk9IFY0TDJf UElYX0ZNVF9YQkdSMzIsDQotCX0sDQotCXsNCi0JCS5mb3VyY2MJCT0gVjRMMl9QSVhfRk1UX1lV VjQyMCwNCi0JfSwNCi0Jew0KLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfWVVZViwNCi0JfSwN Ci0Jew0KLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfWVVWNDIyUCwNCi0JfSwNCi0Jew0KLQkJ LmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfR1JFWSwNCi0JfSwNCi19Ow0KLQ0KLS8qIFRoaXMgaXMg YSBsaXN0IG9mIGZvcm1hdHMgdGhhdCB0aGUgSVNDIGNhbiByZWNlaXZlIGFzICppbnB1dCogKi8N Ci1zdGF0aWMgc3RydWN0IGlzY19mb3JtYXQgZm9ybWF0c19saXN0W10gPSB7DQotCXsNCi0JCS5m b3VyY2MJCT0gVjRMMl9QSVhfRk1UX1NCR0dSOCwNCi0JCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNf Rk1UX1NCR0dSOF8xWDgsDQotCQkucGZlX2NmZzBfYnBzCT0gSVNDX1BGRV9DRkcwX0JQU19FSUdI VCwNCi0JCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfQkdCRywNCi0JfSwNCi0Jew0KLQkJLmZv dXJjYwkJPSBWNEwyX1BJWF9GTVRfU0dCUkc4LA0KLQkJLm1idXNfY29kZQk9IE1FRElBX0JVU19G TVRfU0dCUkc4XzFYOCwNCi0JCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZFX0NGRzBfQlBTX0VJR0hU LA0KLQkJLmNmYV9iYXljZmcJPSBJU0NfQkFZX0NGR19HQkdCLA0KLQl9LA0KLQl7DQotCQkuZm91 cmNjCQk9IFY0TDJfUElYX0ZNVF9TR1JCRzgsDQotCQkubWJ1c19jb2RlCT0gTUVESUFfQlVTX0ZN VF9TR1JCRzhfMVg4LA0KLQkJLnBmZV9jZmcwX2Jwcwk9IElTQ19QRkVfQ0ZHMF9CUFNfRUlHSFQs DQotCQkuY2ZhX2JheWNmZwk9IElTQ19CQVlfQ0ZHX0dSR1IsDQotCX0sDQotCXsNCi0JCS5mb3Vy Y2MJCT0gVjRMMl9QSVhfRk1UX1NSR0dCOCwNCi0JCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1U X1NSR0dCOF8xWDgsDQotCQkucGZlX2NmZzBfYnBzCT0gSVNDX1BGRV9DRkcwX0JQU19FSUdIVCwN Ci0JCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfUkdSRywNCi0JfSwNCi0Jew0KLQkJLmZvdXJj YwkJPSBWNEwyX1BJWF9GTVRfU0JHR1IxMCwNCi0JCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1U X1NCR0dSMTBfMVgxMCwNCi0JCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZHX0NGRzBfQlBTX1RFTiwN Ci0JCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfUkdSRywNCi0JfSwNCi0Jew0KLQkJLmZvdXJj YwkJPSBWNEwyX1BJWF9GTVRfU0dCUkcxMCwNCi0JCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1U X1NHQlJHMTBfMVgxMCwNCi0JCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZHX0NGRzBfQlBTX1RFTiwN Ci0JCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfR0JHQiwNCi0JfSwNCi0Jew0KLQkJLmZvdXJj YwkJPSBWNEwyX1BJWF9GTVRfU0dSQkcxMCwNCi0JCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1U X1NHUkJHMTBfMVgxMCwNCi0JCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZHX0NGRzBfQlBTX1RFTiwN Ci0JCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfR1JHUiwNCi0JfSwNCi0Jew0KLQkJLmZvdXJj YwkJPSBWNEwyX1BJWF9GTVRfU1JHR0IxMCwNCi0JCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1U X1NSR0dCMTBfMVgxMCwNCi0JCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZHX0NGRzBfQlBTX1RFTiwN Ci0JCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfUkdSRywNCi0JfSwNCi0Jew0KLQkJLmZvdXJj YwkJPSBWNEwyX1BJWF9GTVRfU0JHR1IxMiwNCi0JCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1U X1NCR0dSMTJfMVgxMiwNCi0JCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZHX0NGRzBfQlBTX1RXRUxW RSwNCi0JCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfQkdCRywNCi0JfSwNCi0Jew0KLQkJLmZv dXJjYwkJPSBWNEwyX1BJWF9GTVRfU0dCUkcxMiwNCi0JCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNf Rk1UX1NHQlJHMTJfMVgxMiwNCi0JCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZHX0NGRzBfQlBTX1RX RUxWRSwNCi0JCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfR0JHQiwNCi0JfSwNCi0Jew0KLQkJ LmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0dSQkcxMiwNCi0JCS5tYnVzX2NvZGUJPSBNRURJQV9C VVNfRk1UX1NHUkJHMTJfMVgxMiwNCi0JCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZHX0NGRzBfQlBT X1RXRUxWRSwNCi0JCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfR1JHUiwNCi0JfSwNCi0Jew0K LQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU1JHR0IxMiwNCi0JCS5tYnVzX2NvZGUJPSBNRURJ QV9CVVNfRk1UX1NSR0dCMTJfMVgxMiwNCi0JCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZHX0NGRzBf QlBTX1RXRUxWRSwNCi0JCS5jZmFfYmF5Y2ZnCT0gSVNDX0JBWV9DRkdfUkdSRywNCi0JfSwNCi0J ew0KLQkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfR1JFWSwNCi0JCS5tYnVzX2NvZGUJPSBNRURJ QV9CVVNfRk1UX1k4XzFYOCwNCi0JCS5wZmVfY2ZnMF9icHMJPSBJU0NfUEZFX0NGRzBfQlBTX0VJ R0hULA0KLQl9LA0KLQl7DQotCQkuZm91cmNjCQk9IFY0TDJfUElYX0ZNVF9ZVVlWLA0KLQkJLm1i dXNfY29kZQk9IE1FRElBX0JVU19GTVRfWVVZVjhfMlg4LA0KLQkJLnBmZV9jZmcwX2Jwcwk9IElT Q19QRkVfQ0ZHMF9CUFNfRUlHSFQsDQotCX0sDQotCXsNCi0JCS5mb3VyY2MJCT0gVjRMMl9QSVhf Rk1UX1JHQjU2NSwNCi0JCS5tYnVzX2NvZGUJPSBNRURJQV9CVVNfRk1UX1JHQjU2NV8yWDhfTEUs DQotCQkucGZlX2NmZzBfYnBzCT0gSVNDX1BGRV9DRkcwX0JQU19FSUdIVCwNCi0JfSwNCi19Ow0K LQ0KLSNkZWZpbmUgR0FNTUFfTUFYCTINCi0jZGVmaW5lIEdBTU1BX0VOVFJJRVMJNjQNCi0NCi0v KiBHYW1tYSB0YWJsZSB3aXRoIGdhbW1hIDEvMi4yICovDQotc3RhdGljIGNvbnN0IHUzMiBpc2Nf Z2FtbWFfdGFibGVbR0FNTUFfTUFYICsgMV1bR0FNTUFfRU5UUklFU10gPSB7DQotCS8qIDAgLS0+ IGdhbW1hIDEvMS44ICovDQotCXsgICAgICAweDY1LCAgMHg2NjAwMkYsICAweDk1MDAyNSwgIDB4 QkIwMDIwLCAgMHhEQjAwMUQsICAweEY4MDAxQSwNCi0JICAweDExMzAwMTgsIDB4MTJCMDAxNywg MHgxNDIwMDE2LCAweDE1ODAwMTQsIDB4MTZEMDAxMywgMHgxODEwMDEyLA0KLQkgIDB4MTk0MDAx MiwgMHgxQTYwMDEyLCAweDFCODAwMTEsIDB4MUM5MDAxMCwgMHgxREEwMDEwLCAweDFFQTAwMEYs DQotCSAgMHgxRkEwMDBGLCAweDIwOTAwMEYsIDB4MjE4MDAwRiwgMHgyMjcwMDBFLCAweDIzNTAw MEUsIDB4MjQzMDAwRSwNCi0JICAweDI1MTAwMEUsIDB4MjVGMDAwRCwgMHgyNkMwMDBELCAweDI3 OTAwMEQsIDB4Mjg2MDAwRCwgMHgyOTMwMDBDLA0KLQkgIDB4MkEwMDAwQywgMHgyQUMwMDBDLCAw eDJCODAwMEMsIDB4MkM0MDAwQywgMHgyRDAwMDBCLCAweDJEQzAwMEIsDQotCSAgMHgyRTcwMDBC LCAweDJGMzAwMEIsIDB4MkZFMDAwQiwgMHgzMDkwMDBCLCAweDMxNDAwMEIsIDB4MzFGMDAwQSwN Ci0JICAweDMyQTAwMEEsIDB4MzM0MDAwQiwgMHgzM0YwMDBBLCAweDM0OTAwMEEsIDB4MzU0MDAw QSwgMHgzNUUwMDBBLA0KLQkgIDB4MzY4MDAwQSwgMHgzNzIwMDBBLCAweDM3QzAwMEEsIDB4Mzg2 MDAwQSwgMHgzOTAwMDA5LCAweDM5OTAwMEEsDQotCSAgMHgzQTMwMDA5LCAweDNBRDAwMDksIDB4 M0I2MDAwOSwgMHgzQkYwMDBBLCAweDNDOTAwMDksIDB4M0QyMDAwOSwNCi0JICAweDNEQjAwMDks IDB4M0U0MDAwOSwgMHgzRUQwMDA5LCAweDNGNjAwMDkgfSwNCi0NCi0JLyogMSAtLT4gZ2FtbWEg MS8yICovDQotCXsgICAgICAweDdGLCAgMHg4MDAwMzQsICAweEI1MDAyOCwgIDB4REUwMDIxLCAw eDEwMDAwMUUsIDB4MTFFMDAxQiwNCi0JICAweDEzOTAwMTksIDB4MTUyMDAxNywgMHgxNkEwMDE1 LCAweDE4MDAwMTQsIDB4MTk0MDAxNCwgMHgxQTgwMDEzLA0KLQkgIDB4MUJCMDAxMiwgMHgxQ0Qw MDExLCAweDFERjAwMTAsIDB4MUVGMDAxMCwgMHgyMDAwMDBGLCAweDIwRjAwMEYsDQotCSAgMHgy MUYwMDBFLCAweDIyRDAwMEYsIDB4MjNDMDAwRSwgMHgyNEEwMDBFLCAweDI1ODAwMEQsIDB4MjY1 MDAwRCwNCi0JICAweDI3MzAwMEMsIDB4MjdGMDAwRCwgMHgyOEMwMDBDLCAweDI5OTAwMEMsIDB4 MkE1MDAwQywgMHgyQjEwMDBCLA0KLQkgIDB4MkJDMDAwQywgMHgyQzgwMDBCLCAweDJEMzAwMEMs IDB4MkRGMDAwQiwgMHgyRUEwMDBBLCAweDJGNTAwMEEsDQotCSAgMHgyRkYwMDBCLCAweDMwQTAw MEEsIDB4MzE0MDAwQiwgMHgzMUYwMDBBLCAweDMyOTAwMEEsIDB4MzMzMDAwQSwNCi0JICAweDMz RDAwMDksIDB4MzQ3MDAwOSwgMHgzNTAwMDBBLCAweDM1QTAwMDksIDB4MzYzMDAwQSwgMHgzNkQw MDA5LA0KLQkgIDB4Mzc2MDAwOSwgMHgzN0YwMDA5LCAweDM4ODAwMDksIDB4MzkxMDAwOSwgMHgz OUEwMDA5LCAweDNBMzAwMDksDQotCSAgMHgzQUMwMDA4LCAweDNCNDAwMDksIDB4M0JEMDAwOCwg MHgzQzYwMDA4LCAweDNDRTAwMDgsIDB4M0Q2MDAwOSwNCi0JICAweDNERjAwMDgsIDB4M0U3MDAw OCwgMHgzRUYwMDA4LCAweDNGNzAwMDggfSwNCi0NCi0JLyogMiAtLT4gZ2FtbWEgMS8yLjIgKi8N Ci0JeyAgICAgIDB4OTksICAweDlCMDAzOCwgIDB4RDQwMDJBLCAgMHhGRjAwMjMsIDB4MTIyMDAx RiwgMHgxNDEwMDFCLA0KLQkgIDB4MTVEMDAxOSwgMHgxNzYwMDE3LCAweDE4RTAwMTUsIDB4MUEz MDAxNSwgMHgxQjgwMDEzLCAweDFDQzAwMTIsDQotCSAgMHgxREUwMDExLCAweDFGMDAwMTAsIDB4 MjAxMDAxMCwgMHgyMTEwMDEwLCAweDIyMTAwMEYsIDB4MjMwMDAwRiwNCi0JICAweDIzRjAwMEUs IDB4MjREMDAwRSwgMHgyNUIwMDBELCAweDI2OTAwMEMsIDB4Mjc2MDAwQywgMHgyODMwMDBDLA0K LQkgIDB4MjhGMDAwQywgMHgyOUIwMDBDLCAweDJBNzAwMEMsIDB4MkIzMDAwQiwgMHgyQkYwMDBC LCAweDJDQTAwMEIsDQotCSAgMHgyRDUwMDBCLCAweDJFMDAwMEEsIDB4MkVCMDAwQSwgMHgyRjUw MDBBLCAweDJGRjAwMEEsIDB4MzBBMDAwQSwNCi0JICAweDMxNDAwMDksIDB4MzFFMDAwOSwgMHgz MjcwMDBBLCAweDMzMTAwMDksIDB4MzNBMDAwOSwgMHgzNDQwMDA5LA0KLQkgIDB4MzREMDAwOSwg MHgzNTYwMDA5LCAweDM1RjAwMDksIDB4MzY4MDAwOCwgMHgzNzEwMDA4LCAweDM3OTAwMDksDQot CSAgMHgzODIwMDA4LCAweDM4QTAwMDgsIDB4MzkzMDAwOCwgMHgzOUIwMDA4LCAweDNBMzAwMDgs IDB4M0FCMDAwOCwNCi0JICAweDNCMzAwMDgsIDB4M0JCMDAwOCwgMHgzQzMwMDA4LCAweDNDQjAw MDcsIDB4M0QyMDAwOCwgMHgzREEwMDA3LA0KLQkgIDB4M0UyMDAwNywgMHgzRTkwMDA3LCAweDNG MDAwMDgsIDB4M0Y4MDAwNyB9LA0KLX07DQotDQotI2RlZmluZSBJU0NfSVNfRk9STUFUX1JBVyht YnVzX2NvZGUpIFwNCi0JKCgobWJ1c19jb2RlKSAmIDB4ZjAwMCkgPT0gMHgzMDAwKQ0KLQ0KLXN0 YXRpYyB1bnNpZ25lZCBpbnQgZGVidWc7DQotbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQp Ow0KLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJkZWJ1ZyBsZXZlbCAoMC0yKSIpOw0KLQ0KLXN0 YXRpYyB1bnNpZ25lZCBpbnQgc2Vuc29yX3ByZWZlcnJlZCA9IDE7DQotbW9kdWxlX3BhcmFtKHNl bnNvcl9wcmVmZXJyZWQsIHVpbnQsIDA2NDQpOw0KLU1PRFVMRV9QQVJNX0RFU0Moc2Vuc29yX3By ZWZlcnJlZCwNCi0JCSAiU2Vuc29yIGlzIHByZWZlcnJlZCB0byBvdXRwdXQgdGhlIHNwZWNpZmll ZCBmb3JtYXQgKDEtb24gMC1vZmYpLCBkZWZhdWx0IDEiKTsNCi0NCi1zdGF0aWMgaW5saW5lIHZv aWQgaXNjX3VwZGF0ZV9hd2JfY3RybHMoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCi17DQotCXN0 cnVjdCBpc2NfY3RybHMgKmN0cmxzID0gJmlzYy0+Y3RybHM7DQotDQotCXJlZ21hcF93cml0ZShp c2MtPnJlZ21hcCwgSVNDX1dCX09fUkdSLA0KLQkJICAgICAoSVNDX1dCX09fWkVST19WQUwgLSAo Y3RybHMtPm9mZnNldFtJU0NfSElTX0NGR19NT0RFX1JdKSkgfA0KLQkJICAgICAoKElTQ19XQl9P X1pFUk9fVkFMIC0gY3RybHMtPm9mZnNldFtJU0NfSElTX0NGR19NT0RFX0dSXSkgPDwgMTYpKTsN Ci0JcmVnbWFwX3dyaXRlKGlzYy0+cmVnbWFwLCBJU0NfV0JfT19CR0IsDQotCQkgICAgIChJU0Nf V0JfT19aRVJPX1ZBTCAtIChjdHJscy0+b2Zmc2V0W0lTQ19ISVNfQ0ZHX01PREVfQl0pKSB8DQot CQkgICAgICgoSVNDX1dCX09fWkVST19WQUwgLSBjdHJscy0+b2Zmc2V0W0lTQ19ISVNfQ0ZHX01P REVfR0JdKSA8PCAxNikpOw0KLQlyZWdtYXBfd3JpdGUoaXNjLT5yZWdtYXAsIElTQ19XQl9HX1JH UiwNCi0JCSAgICAgY3RybHMtPmdhaW5bSVNDX0hJU19DRkdfTU9ERV9SXSB8DQotCQkgICAgIChj dHJscy0+Z2FpbltJU0NfSElTX0NGR19NT0RFX0dSXSA8PCAxNikpOw0KLQlyZWdtYXBfd3JpdGUo aXNjLT5yZWdtYXAsIElTQ19XQl9HX0JHQiwNCi0JCSAgICAgY3RybHMtPmdhaW5bSVNDX0hJU19D RkdfTU9ERV9CXSB8DQotCQkgICAgIChjdHJscy0+Z2FpbltJU0NfSElTX0NGR19NT0RFX0dCXSA8 PCAxNikpOw0KLX0NCi0NCi1zdGF0aWMgaW5saW5lIHZvaWQgaXNjX3Jlc2V0X2F3Yl9jdHJscyhz dHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KLXsNCi0JaW50IGM7DQotDQotCWZvciAoYyA9IElTQ19I SVNfQ0ZHX01PREVfR1I7IGMgPD0gSVNDX0hJU19DRkdfTU9ERV9COyBjKyspIHsNCi0JCS8qIGdh aW5zIGhhdmUgYSBmaXhlZCBwb2ludCBhdCA5IGRlY2ltYWxzICovDQotCQlpc2MtPmN0cmxzLmdh aW5bY10gPSAxIDw8IDk7DQotCQkvKiBvZmZzZXRzIGFyZSBpbiAyJ3MgY29tcGxlbWVudHMsIHRo ZSB2YWx1ZQ0KLQkJICogd2lsbCBiZSBzdWJzdHJhY3RlZCBmcm9tIElTQ19XQl9PX1pFUk9fVkFM IHRvIG9idGFpbg0KLQkJICogMidzIGNvbXBsZW1lbnQgb2YgYSB2YWx1ZSBiZXR3ZWVuIDAgYW5k DQotCQkgKiBJU0NfV0JfT19aRVJPX1ZBTCA+PiAxDQotCQkgKi8NCi0JCWlzYy0+Y3RybHMub2Zm c2V0W2NdID0gSVNDX1dCX09fWkVST19WQUw7DQotCX0NCi19DQotDQotc3RhdGljIGludCBpc2Nf d2FpdF9jbGtfc3RhYmxlKHN0cnVjdCBjbGtfaHcgKmh3KQ0KLXsNCi0Jc3RydWN0IGlzY19jbGsg KmlzY19jbGsgPSB0b19pc2NfY2xrKGh3KTsNCi0Jc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNj X2Nsay0+cmVnbWFwOw0KLQl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgdXNlY3Nf dG9famlmZmllcygxMDAwKTsNCi0JdW5zaWduZWQgaW50IHN0YXR1czsNCi0NCi0Jd2hpbGUgKHRp bWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKSB7DQotCQlyZWdtYXBfcmVhZChyZWdtYXAsIElT Q19DTEtTUiwgJnN0YXR1cyk7DQotCQlpZiAoIShzdGF0dXMgJiBJU0NfQ0xLU1JfU0lQKSkNCi0J CQlyZXR1cm4gMDsNCi0NCi0JCXVzbGVlcF9yYW5nZSgxMCwgMjUwKTsNCi0JfQ0KLQ0KLQlyZXR1 cm4gLUVUSU1FRE9VVDsNCi19DQotDQotc3RhdGljIGludCBpc2NfY2xrX3ByZXBhcmUoc3RydWN0 IGNsa19odyAqaHcpDQotew0KLQlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRvX2lzY19jbGso aHcpOw0KLQ0KLQlpZiAoaXNjX2Nsay0+aWQgPT0gSVNDX0lTUENLKQ0KLQkJcG1fcnVudGltZV9n ZXRfc3luYyhpc2NfY2xrLT5kZXYpOw0KLQ0KLQlyZXR1cm4gaXNjX3dhaXRfY2xrX3N0YWJsZSho dyk7DQotfQ0KLQ0KLXN0YXRpYyB2b2lkIGlzY19jbGtfdW5wcmVwYXJlKHN0cnVjdCBjbGtfaHcg Kmh3KQ0KLXsNCi0Jc3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSB0b19pc2NfY2xrKGh3KTsNCi0N Ci0JaXNjX3dhaXRfY2xrX3N0YWJsZShodyk7DQotDQotCWlmIChpc2NfY2xrLT5pZCA9PSBJU0Nf SVNQQ0spDQotCQlwbV9ydW50aW1lX3B1dF9zeW5jKGlzY19jbGstPmRldik7DQotfQ0KLQ0KLXN0 YXRpYyBpbnQgaXNjX2Nsa19lbmFibGUoc3RydWN0IGNsa19odyAqaHcpDQotew0KLQlzdHJ1Y3Qg aXNjX2NsayAqaXNjX2NsayA9IHRvX2lzY19jbGsoaHcpOw0KLQl1MzIgaWQgPSBpc2NfY2xrLT5p ZDsNCi0Jc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjX2Nsay0+cmVnbWFwOw0KLQl1bnNpZ25l ZCBsb25nIGZsYWdzOw0KLQl1bnNpZ25lZCBpbnQgc3RhdHVzOw0KLQ0KLQlkZXZfZGJnKGlzY19j bGstPmRldiwgIklTQyBDTEs6ICVzLCBkaXYgPSAlZCwgcGFyZW50IGlkID0gJWRcbiIsDQotCQlf X2Z1bmNfXywgaXNjX2Nsay0+ZGl2LCBpc2NfY2xrLT5wYXJlbnRfaWQpOw0KLQ0KLQlzcGluX2xv Y2tfaXJxc2F2ZSgmaXNjX2Nsay0+bG9jaywgZmxhZ3MpOw0KLQlyZWdtYXBfdXBkYXRlX2JpdHMo cmVnbWFwLCBJU0NfQ0xLQ0ZHLA0KLQkJCSAgIElTQ19DTEtDRkdfRElWX01BU0soaWQpIHwgSVND X0NMS0NGR19TRUxfTUFTSyhpZCksDQotCQkJICAgKGlzY19jbGstPmRpdiA8PCBJU0NfQ0xLQ0ZH X0RJVl9TSElGVChpZCkpIHwNCi0JCQkgICAoaXNjX2Nsay0+cGFyZW50X2lkIDw8IElTQ19DTEtD RkdfU0VMX1NISUZUKGlkKSkpOw0KLQ0KLQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfQ0xLRU4s IElTQ19DTEsoaWQpKTsNCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNjX2Nsay0+bG9jaywg ZmxhZ3MpOw0KLQ0KLQlyZWdtYXBfcmVhZChyZWdtYXAsIElTQ19DTEtTUiwgJnN0YXR1cyk7DQot CWlmIChzdGF0dXMgJiBJU0NfQ0xLKGlkKSkNCi0JCXJldHVybiAwOw0KLQllbHNlDQotCQlyZXR1 cm4gLUVJTlZBTDsNCi19DQotDQotc3RhdGljIHZvaWQgaXNjX2Nsa19kaXNhYmxlKHN0cnVjdCBj bGtfaHcgKmh3KQ0KLXsNCi0Jc3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSB0b19pc2NfY2xrKGh3 KTsNCi0JdTMyIGlkID0gaXNjX2Nsay0+aWQ7DQotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQotDQot CXNwaW5fbG9ja19pcnFzYXZlKCZpc2NfY2xrLT5sb2NrLCBmbGFncyk7DQotCXJlZ21hcF93cml0 ZShpc2NfY2xrLT5yZWdtYXAsIElTQ19DTEtESVMsIElTQ19DTEsoaWQpKTsNCi0Jc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZSgmaXNjX2Nsay0+bG9jaywgZmxhZ3MpOw0KLX0NCi0NCi1zdGF0aWMgaW50 IGlzY19jbGtfaXNfZW5hYmxlZChzdHJ1Y3QgY2xrX2h3ICpodykNCi17DQotCXN0cnVjdCBpc2Nf Y2xrICppc2NfY2xrID0gdG9faXNjX2Nsayhodyk7DQotCXUzMiBzdGF0dXM7DQotDQotCWlmIChp c2NfY2xrLT5pZCA9PSBJU0NfSVNQQ0spDQotCQlwbV9ydW50aW1lX2dldF9zeW5jKGlzY19jbGst PmRldik7DQotDQotCXJlZ21hcF9yZWFkKGlzY19jbGstPnJlZ21hcCwgSVNDX0NMS1NSLCAmc3Rh dHVzKTsNCi0NCi0JaWYgKGlzY19jbGstPmlkID09IElTQ19JU1BDSykNCi0JCXBtX3J1bnRpbWVf cHV0X3N5bmMoaXNjX2Nsay0+ZGV2KTsNCi0NCi0JcmV0dXJuIHN0YXR1cyAmIElTQ19DTEsoaXNj X2Nsay0+aWQpID8gMSA6IDA7DQotfQ0KLQ0KLXN0YXRpYyB1bnNpZ25lZCBsb25nDQotaXNjX2Ns a19yZWNhbGNfcmF0ZShzdHJ1Y3QgY2xrX2h3ICpodywgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0 ZSkNCi17DQotCXN0cnVjdCBpc2NfY2xrICppc2NfY2xrID0gdG9faXNjX2Nsayhodyk7DQotDQot CXJldHVybiBESVZfUk9VTkRfQ0xPU0VTVChwYXJlbnRfcmF0ZSwgaXNjX2Nsay0+ZGl2ICsgMSk7 DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX2Nsa19kZXRlcm1pbmVfcmF0ZShzdHJ1Y3QgY2xrX2h3 ICpodywNCi0JCQkJICAgc3RydWN0IGNsa19yYXRlX3JlcXVlc3QgKnJlcSkNCi17DQotCXN0cnVj dCBpc2NfY2xrICppc2NfY2xrID0gdG9faXNjX2Nsayhodyk7DQotCWxvbmcgYmVzdF9yYXRlID0g LUVJTlZBTDsNCi0JaW50IGJlc3RfZGlmZiA9IC0xOw0KLQl1bnNpZ25lZCBpbnQgaSwgZGl2Ow0K LQ0KLQlmb3IgKGkgPSAwOyBpIDwgY2xrX2h3X2dldF9udW1fcGFyZW50cyhodyk7IGkrKykgew0K LQkJc3RydWN0IGNsa19odyAqcGFyZW50Ow0KLQkJdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZTsN Ci0NCi0JCXBhcmVudCA9IGNsa19od19nZXRfcGFyZW50X2J5X2luZGV4KGh3LCBpKTsNCi0JCWlm ICghcGFyZW50KQ0KLQkJCWNvbnRpbnVlOw0KLQ0KLQkJcGFyZW50X3JhdGUgPSBjbGtfaHdfZ2V0 X3JhdGUocGFyZW50KTsNCi0JCWlmICghcGFyZW50X3JhdGUpDQotCQkJY29udGludWU7DQotDQot CQlmb3IgKGRpdiA9IDE7IGRpdiA8IElTQ19DTEtfTUFYX0RJViArIDI7IGRpdisrKSB7DQotCQkJ dW5zaWduZWQgbG9uZyByYXRlOw0KLQkJCWludCBkaWZmOw0KLQ0KLQkJCXJhdGUgPSBESVZfUk9V TkRfQ0xPU0VTVChwYXJlbnRfcmF0ZSwgZGl2KTsNCi0JCQlkaWZmID0gYWJzKHJlcS0+cmF0ZSAt IHJhdGUpOw0KLQ0KLQkJCWlmIChiZXN0X2RpZmYgPCAwIHx8IGJlc3RfZGlmZiA+IGRpZmYpIHsN Ci0JCQkJYmVzdF9yYXRlID0gcmF0ZTsNCi0JCQkJYmVzdF9kaWZmID0gZGlmZjsNCi0JCQkJcmVx LT5iZXN0X3BhcmVudF9yYXRlID0gcGFyZW50X3JhdGU7DQotCQkJCXJlcS0+YmVzdF9wYXJlbnRf aHcgPSBwYXJlbnQ7DQotCQkJfQ0KLQ0KLQkJCWlmICghYmVzdF9kaWZmIHx8IHJhdGUgPCByZXEt PnJhdGUpDQotCQkJCWJyZWFrOw0KLQkJfQ0KLQ0KLQkJaWYgKCFiZXN0X2RpZmYpDQotCQkJYnJl YWs7DQotCX0NCi0NCi0JZGV2X2RiZyhpc2NfY2xrLT5kZXYsDQotCQkiSVNDIENMSzogJXMsIGJl c3RfcmF0ZSA9ICVsZCwgcGFyZW50IGNsazogJXMgQCAlbGRcbiIsDQotCQlfX2Z1bmNfXywgYmVz dF9yYXRlLA0KLQkJX19jbGtfZ2V0X25hbWUoKHJlcS0+YmVzdF9wYXJlbnRfaHcpLT5jbGspLA0K LQkJcmVxLT5iZXN0X3BhcmVudF9yYXRlKTsNCi0NCi0JaWYgKGJlc3RfcmF0ZSA8IDApDQotCQly ZXR1cm4gYmVzdF9yYXRlOw0KLQ0KLQlyZXEtPnJhdGUgPSBiZXN0X3JhdGU7DQotDQotCXJldHVy biAwOw0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY19jbGtfc2V0X3BhcmVudChzdHJ1Y3QgY2xrX2h3 ICpodywgdTggaW5kZXgpDQotew0KLQlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsayA9IHRvX2lzY19j bGsoaHcpOw0KLQ0KLQlpZiAoaW5kZXggPj0gY2xrX2h3X2dldF9udW1fcGFyZW50cyhodykpDQot CQlyZXR1cm4gLUVJTlZBTDsNCi0NCi0JaXNjX2Nsay0+cGFyZW50X2lkID0gaW5kZXg7DQotDQot CXJldHVybiAwOw0KLX0NCi0NCi1zdGF0aWMgdTggaXNjX2Nsa19nZXRfcGFyZW50KHN0cnVjdCBj bGtfaHcgKmh3KQ0KLXsNCi0Jc3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSB0b19pc2NfY2xrKGh3 KTsNCi0NCi0JcmV0dXJuIGlzY19jbGstPnBhcmVudF9pZDsNCi19DQotDQotc3RhdGljIGludCBp c2NfY2xrX3NldF9yYXRlKHN0cnVjdCBjbGtfaHcgKmh3LA0KLQkJCSAgICAgdW5zaWduZWQgbG9u ZyByYXRlLA0KLQkJCSAgICAgdW5zaWduZWQgbG9uZyBwYXJlbnRfcmF0ZSkNCi17DQotCXN0cnVj dCBpc2NfY2xrICppc2NfY2xrID0gdG9faXNjX2Nsayhodyk7DQotCXUzMiBkaXY7DQotDQotCWlm ICghcmF0ZSkNCi0JCXJldHVybiAtRUlOVkFMOw0KLQ0KLQlkaXYgPSBESVZfUk9VTkRfQ0xPU0VT VChwYXJlbnRfcmF0ZSwgcmF0ZSk7DQotCWlmIChkaXYgPiAoSVNDX0NMS19NQVhfRElWICsgMSkg fHwgIWRpdikNCi0JCXJldHVybiAtRUlOVkFMOw0KLQ0KLQlpc2NfY2xrLT5kaXYgPSBkaXYgLSAx Ow0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGljIGNvbnN0IHN0cnVjdCBjbGtfb3BzIGlz Y19jbGtfb3BzID0gew0KLQkucHJlcGFyZQk9IGlzY19jbGtfcHJlcGFyZSwNCi0JLnVucHJlcGFy ZQk9IGlzY19jbGtfdW5wcmVwYXJlLA0KLQkuZW5hYmxlCQk9IGlzY19jbGtfZW5hYmxlLA0KLQku ZGlzYWJsZQk9IGlzY19jbGtfZGlzYWJsZSwNCi0JLmlzX2VuYWJsZWQJPSBpc2NfY2xrX2lzX2Vu YWJsZWQsDQotCS5yZWNhbGNfcmF0ZQk9IGlzY19jbGtfcmVjYWxjX3JhdGUsDQotCS5kZXRlcm1p bmVfcmF0ZQk9IGlzY19jbGtfZGV0ZXJtaW5lX3JhdGUsDQotCS5zZXRfcGFyZW50CT0gaXNjX2Ns a19zZXRfcGFyZW50LA0KLQkuZ2V0X3BhcmVudAk9IGlzY19jbGtfZ2V0X3BhcmVudCwNCi0JLnNl dF9yYXRlCT0gaXNjX2Nsa19zZXRfcmF0ZSwNCi19Ow0KLQ0KLXN0YXRpYyBpbnQgaXNjX2Nsa19y ZWdpc3RlcihzdHJ1Y3QgaXNjX2RldmljZSAqaXNjLCB1bnNpZ25lZCBpbnQgaWQpDQotew0KLQlz dHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBpc2MtPnJlZ21hcDsNCi0Jc3RydWN0IGRldmljZV9ub2Rl ICpucCA9IGlzYy0+ZGV2LT5vZl9ub2RlOw0KLQlzdHJ1Y3QgaXNjX2NsayAqaXNjX2NsazsNCi0J c3RydWN0IGNsa19pbml0X2RhdGEgaW5pdDsNCi0JY29uc3QgY2hhciAqY2xrX25hbWUgPSBucC0+ bmFtZTsNCi0JY29uc3QgY2hhciAqcGFyZW50X25hbWVzWzNdOw0KLQlpbnQgbnVtX3BhcmVudHM7 DQotDQotCW51bV9wYXJlbnRzID0gb2ZfY2xrX2dldF9wYXJlbnRfY291bnQobnApOw0KLQlpZiAo bnVtX3BhcmVudHMgPCAxIHx8IG51bV9wYXJlbnRzID4gMykNCi0JCXJldHVybiAtRUlOVkFMOw0K LQ0KLQlpZiAobnVtX3BhcmVudHMgPiAyICYmIGlkID09IElTQ19JU1BDSykNCi0JCW51bV9wYXJl bnRzID0gMjsNCi0NCi0Jb2ZfY2xrX3BhcmVudF9maWxsKG5wLCBwYXJlbnRfbmFtZXMsIG51bV9w YXJlbnRzKTsNCi0NCi0JaWYgKGlkID09IElTQ19NQ0spDQotCQlvZl9wcm9wZXJ0eV9yZWFkX3N0 cmluZyhucCwgImNsb2NrLW91dHB1dC1uYW1lcyIsICZjbGtfbmFtZSk7DQotCWVsc2UNCi0JCWNs a19uYW1lID0gImlzYy1pc3BjayI7DQotDQotCWluaXQucGFyZW50X25hbWVzCT0gcGFyZW50X25h bWVzOw0KLQlpbml0Lm51bV9wYXJlbnRzCT0gbnVtX3BhcmVudHM7DQotCWluaXQubmFtZQkJPSBj bGtfbmFtZTsNCi0JaW5pdC5vcHMJCT0gJmlzY19jbGtfb3BzOw0KLQlpbml0LmZsYWdzCQk9IENM S19TRVRfUkFURV9HQVRFIHwgQ0xLX1NFVF9QQVJFTlRfR0FURTsNCi0NCi0JaXNjX2NsayA9ICZp c2MtPmlzY19jbGtzW2lkXTsNCi0JaXNjX2Nsay0+aHcuaW5pdAk9ICZpbml0Ow0KLQlpc2NfY2xr LT5yZWdtYXAJCT0gcmVnbWFwOw0KLQlpc2NfY2xrLT5pZAkJPSBpZDsNCi0JaXNjX2Nsay0+ZGV2 CQk9IGlzYy0+ZGV2Ow0KLQlzcGluX2xvY2tfaW5pdCgmaXNjX2Nsay0+bG9jayk7DQotDQotCWlz Y19jbGstPmNsayA9IGNsa19yZWdpc3Rlcihpc2MtPmRldiwgJmlzY19jbGstPmh3KTsNCi0JaWYg KElTX0VSUihpc2NfY2xrLT5jbGspKSB7DQotCQlkZXZfZXJyKGlzYy0+ZGV2LCAiJXM6IGNsb2Nr IHJlZ2lzdGVyIGZhaWxcbiIsIGNsa19uYW1lKTsNCi0JCXJldHVybiBQVFJfRVJSKGlzY19jbGst PmNsayk7DQotCX0gZWxzZSBpZiAoaWQgPT0gSVNDX01DSykNCi0JCW9mX2Nsa19hZGRfcHJvdmlk ZXIobnAsIG9mX2Nsa19zcmNfc2ltcGxlX2dldCwgaXNjX2Nsay0+Y2xrKTsNCi0NCi0JcmV0dXJu IDA7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX2Nsa19pbml0KHN0cnVjdCBpc2NfZGV2aWNlICpp c2MpDQotew0KLQl1bnNpZ25lZCBpbnQgaTsNCi0JaW50IHJldDsNCi0NCi0JZm9yIChpID0gMDsg aSA8IEFSUkFZX1NJWkUoaXNjLT5pc2NfY2xrcyk7IGkrKykNCi0JCWlzYy0+aXNjX2Nsa3NbaV0u Y2xrID0gRVJSX1BUUigtRUlOVkFMKTsNCi0NCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUo aXNjLT5pc2NfY2xrcyk7IGkrKykgew0KLQkJcmV0ID0gaXNjX2Nsa19yZWdpc3Rlcihpc2MsIGkp Ow0KLQkJaWYgKHJldCkNCi0JCQlyZXR1cm4gcmV0Ow0KLQl9DQotDQotCXJldHVybiAwOw0KLX0N Ci0NCi1zdGF0aWMgdm9pZCBpc2NfY2xrX2NsZWFudXAoc3RydWN0IGlzY19kZXZpY2UgKmlzYykN Ci17DQotCXVuc2lnbmVkIGludCBpOw0KLQ0KLQlvZl9jbGtfZGVsX3Byb3ZpZGVyKGlzYy0+ZGV2 LT5vZl9ub2RlKTsNCi0NCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaXNjLT5pc2NfY2xr cyk7IGkrKykgew0KLQkJc3RydWN0IGlzY19jbGsgKmlzY19jbGsgPSAmaXNjLT5pc2NfY2xrc1tp XTsNCi0NCi0JCWlmICghSVNfRVJSKGlzY19jbGstPmNsaykpDQotCQkJY2xrX3VucmVnaXN0ZXIo aXNjX2Nsay0+Y2xrKTsNCi0JfQ0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY19xdWV1ZV9zZXR1cChz dHJ1Y3QgdmIyX3F1ZXVlICp2cSwNCi0JCQkgICAgdW5zaWduZWQgaW50ICpuYnVmZmVycywgdW5z aWduZWQgaW50ICpucGxhbmVzLA0KLQkJCSAgICB1bnNpZ25lZCBpbnQgc2l6ZXNbXSwgc3RydWN0 IGRldmljZSAqYWxsb2NfZGV2c1tdKQ0KLXsNCi0Jc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZi Ml9nZXRfZHJ2X3ByaXYodnEpOw0KLQl1bnNpZ25lZCBpbnQgc2l6ZSA9IGlzYy0+Zm10LmZtdC5w aXguc2l6ZWltYWdlOw0KLQ0KLQlpZiAoKm5wbGFuZXMpDQotCQlyZXR1cm4gc2l6ZXNbMF0gPCBz aXplID8gLUVJTlZBTCA6IDA7DQotDQotCSpucGxhbmVzID0gMTsNCi0Jc2l6ZXNbMF0gPSBzaXpl Ow0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGljIGludCBpc2NfYnVmZmVyX3ByZXBhcmUo c3RydWN0IHZiMl9idWZmZXIgKnZiKQ0KLXsNCi0Jc3RydWN0IHZiMl92NGwyX2J1ZmZlciAqdmJ1 ZiA9IHRvX3ZiMl92NGwyX2J1ZmZlcih2Yik7DQotCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2 YjJfZ2V0X2Rydl9wcml2KHZiLT52YjJfcXVldWUpOw0KLQl1bnNpZ25lZCBsb25nIHNpemUgPSBp c2MtPmZtdC5mbXQucGl4LnNpemVpbWFnZTsNCi0NCi0JaWYgKHZiMl9wbGFuZV9zaXplKHZiLCAw KSA8IHNpemUpIHsNCi0JCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LCAiYnVmZmVyIHRvbyBzbWFs bCAoJWx1IDwgJWx1KVxuIiwNCi0JCQkgdmIyX3BsYW5lX3NpemUodmIsIDApLCBzaXplKTsNCi0J CXJldHVybiAtRUlOVkFMOw0KLQl9DQotDQotCXZiMl9zZXRfcGxhbmVfcGF5bG9hZCh2YiwgMCwg c2l6ZSk7DQotDQotCXZidWYtPmZpZWxkID0gaXNjLT5mbXQuZm10LnBpeC5maWVsZDsNCi0NCi0J cmV0dXJuIDA7DQotfQ0KLQ0KLXN0YXRpYyB2b2lkIGlzY19zdGFydF9kbWEoc3RydWN0IGlzY19k ZXZpY2UgKmlzYykNCi17DQotCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0K LQl1MzIgc2l6ZWltYWdlID0gaXNjLT5mbXQuZm10LnBpeC5zaXplaW1hZ2U7DQotCXUzMiBkY3Ry bF9kdmlldzsNCi0JZG1hX2FkZHJfdCBhZGRyMDsNCi0JdTMyIGgsIHc7DQotDQotCWggPSBpc2Mt PmZtdC5mbXQucGl4LmhlaWdodDsNCi0JdyA9IGlzYy0+Zm10LmZtdC5waXgud2lkdGg7DQotDQot CS8qDQotCSAqIEluIGNhc2UgdGhlIHNlbnNvciBpcyBub3QgUkFXLCBpdCB3aWxsIG91dHB1dCBh IHBpeGVsICgxMi0xNiBiaXRzKQ0KLQkgKiB3aXRoIHR3byBzYW1wbGVzIG9uIHRoZSBJU0MgRGF0 YSBidXMgKHdoaWNoIGlzIDgtMTIpDQotCSAqIElTQyB3aWxsIGNvdW50IGVhY2ggc2FtcGxlLCBz bywgd2UgbmVlZCB0byBtdWx0aXBseSB0aGVzZSB2YWx1ZXMNCi0JICogYnkgdHdvLCB0byBnZXQg dGhlIHJlYWwgbnVtYmVyIG9mIHNhbXBsZXMgZm9yIHRoZSByZXF1aXJlZCBwaXhlbHMuDQotCSAq Lw0KLQlpZiAoIUlTQ19JU19GT1JNQVRfUkFXKGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19j b2RlKSkgew0KLQkJaCA8PD0gMTsNCi0JCXcgPDw9IDE7DQotCX0NCi0NCi0JLyoNCi0JICogV2Ug bGltaXQgdGhlIGNvbHVtbi9yb3cgY291bnQgdGhhdCB0aGUgSVNDIHdpbGwgb3V0cHV0IGFjY29y ZGluZw0KLQkgKiB0byB0aGUgY29uZmlndXJlZCByZXNvbHV0aW9uIHRoYXQgd2Ugd2FudC4NCi0J ICogVGhpcyB3aWxsIGF2b2lkIHRoZSBzaXR1YXRpb24gd2hlcmUgdGhlIHNlbnNvciBpcyBtaXNj b25maWd1cmVkLA0KLQkgKiBzZW5kaW5nIG1vcmUgZGF0YSwgYW5kIHRoZSBJU0Mgd2lsbCBqdXN0 IHRha2UgaXQgYW5kIERNQSB0byBtZW1vcnksDQotCSAqIGNhdXNpbmcgY29ycnVwdGlvbi4NCi0J ICovDQotCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19QRkVfQ0ZHMSwNCi0JCSAgICAgKElTQ19Q RkVfQ0ZHMV9DT0xNSU4oMCkgJiBJU0NfUEZFX0NGRzFfQ09MTUlOX01BU0spIHwNCi0JCSAgICAg KElTQ19QRkVfQ0ZHMV9DT0xNQVgodyAtIDEpICYgSVNDX1BGRV9DRkcxX0NPTE1BWF9NQVNLKSk7 DQotDQotCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19QRkVfQ0ZHMiwNCi0JCSAgICAgKElTQ19Q RkVfQ0ZHMl9ST1dNSU4oMCkgJiBJU0NfUEZFX0NGRzJfUk9XTUlOX01BU0spIHwNCi0JCSAgICAg KElTQ19QRkVfQ0ZHMl9ST1dNQVgoaCAtIDEpICYgSVNDX1BGRV9DRkcyX1JPV01BWF9NQVNLKSk7 DQotDQotCXJlZ21hcF91cGRhdGVfYml0cyhyZWdtYXAsIElTQ19QRkVfQ0ZHMCwNCi0JCQkgICBJ U0NfUEZFX0NGRzBfQ09MRU4gfCBJU0NfUEZFX0NGRzBfUk9XRU4sDQotCQkJICAgSVNDX1BGRV9D RkcwX0NPTEVOIHwgSVNDX1BGRV9DRkcwX1JPV0VOKTsNCi0NCi0JYWRkcjAgPSB2YjJfZG1hX2Nv bnRpZ19wbGFuZV9kbWFfYWRkcigmaXNjLT5jdXJfZnJtLT52Yi52YjJfYnVmLCAwKTsNCi0JcmVn bWFwX3dyaXRlKHJlZ21hcCwgSVNDX0RBRDAsIGFkZHIwKTsNCi0NCi0Jc3dpdGNoIChpc2MtPmNv bmZpZy5mb3VyY2MpIHsNCi0JY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIwOg0KLQkJcmVnbWFwX3dy aXRlKHJlZ21hcCwgSVNDX0RBRDEsIGFkZHIwICsgKHNpemVpbWFnZSAqIDIpIC8gMyk7DQotCQly ZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfREFEMiwgYWRkcjAgKyAoc2l6ZWltYWdlICogNSkgLyA2 KTsNCi0JCWJyZWFrOw0KLQljYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjJQOg0KLQkJcmVnbWFwX3dy aXRlKHJlZ21hcCwgSVNDX0RBRDEsIGFkZHIwICsgc2l6ZWltYWdlIC8gMik7DQotCQlyZWdtYXBf d3JpdGUocmVnbWFwLCBJU0NfREFEMiwgYWRkcjAgKyAoc2l6ZWltYWdlICogMykgLyA0KTsNCi0J CWJyZWFrOw0KLQlkZWZhdWx0Og0KLQkJYnJlYWs7DQotCX0NCi0NCi0JZGN0cmxfZHZpZXcgPSBp c2MtPmNvbmZpZy5kY3RybF9kdmlldzsNCi0NCi0JcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0RD VFJMLCBkY3RybF9kdmlldyB8IElTQ19EQ1RSTF9JRV9JUyk7DQotCXNwaW5fbG9jaygmaXNjLT5h d2JfbG9jayk7DQotCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DVFJMRU4sIElTQ19DVFJMX0NB UFRVUkUpOw0KLQlzcGluX3VubG9jaygmaXNjLT5hd2JfbG9jayk7DQotfQ0KLQ0KLXN0YXRpYyB2 b2lkIGlzY19zZXRfcGlwZWxpbmUoc3RydWN0IGlzY19kZXZpY2UgKmlzYywgdTMyIHBpcGVsaW5l KQ0KLXsNCi0Jc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjLT5yZWdtYXA7DQotCXN0cnVjdCBp c2NfY3RybHMgKmN0cmxzID0gJmlzYy0+Y3RybHM7DQotCXUzMiB2YWwsIGJheV9jZmc7DQotCWNv bnN0IHUzMiAqZ2FtbWE7DQotCXVuc2lnbmVkIGludCBpOw0KLQ0KLQkvKiBXQi0tPkNGQS0tPkND LS0+R0FNLS0+Q1NDLS0+Q0JDLS0+U1VCNDIyLS0+U1VCNDIwICovDQotCWZvciAoaSA9IDA7IGkg PCBJU0NfUElQRV9MSU5FX05PREVfTlVNOyBpKyspIHsNCi0JCXZhbCA9IHBpcGVsaW5lICYgQklU KGkpID8gMSA6IDA7DQotCQlyZWdtYXBfZmllbGRfd3JpdGUoaXNjLT5waXBlbGluZVtpXSwgdmFs KTsNCi0JfQ0KLQ0KLQlpZiAoIXBpcGVsaW5lKQ0KLQkJcmV0dXJuOw0KLQ0KLQliYXlfY2ZnID0g aXNjLT5jb25maWcuc2RfZm9ybWF0LT5jZmFfYmF5Y2ZnOw0KLQ0KLQlpZiAoY3RybHMtPmF3YiA9 PSBJU0NfV0JfTk9ORSkNCi0JCWlzY19yZXNldF9hd2JfY3RybHMoaXNjKTsNCi0NCi0JcmVnbWFw X3dyaXRlKHJlZ21hcCwgSVNDX1dCX0NGRywgYmF5X2NmZyk7DQotCWlzY191cGRhdGVfYXdiX2N0 cmxzKGlzYyk7DQotDQotCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DRkFfQ0ZHLCBiYXlfY2Zn IHwgSVNDX0NGQV9DRkdfRUlUUE9MKTsNCi0NCi0JZ2FtbWEgPSAmaXNjX2dhbW1hX3RhYmxlW2N0 cmxzLT5nYW1tYV9pbmRleF1bMF07DQotCXJlZ21hcF9idWxrX3dyaXRlKHJlZ21hcCwgSVNDX0dB TV9CRU5UUlksIGdhbW1hLCBHQU1NQV9FTlRSSUVTKTsNCi0JcmVnbWFwX2J1bGtfd3JpdGUocmVn bWFwLCBJU0NfR0FNX0dFTlRSWSwgZ2FtbWEsIEdBTU1BX0VOVFJJRVMpOw0KLQlyZWdtYXBfYnVs a193cml0ZShyZWdtYXAsIElTQ19HQU1fUkVOVFJZLCBnYW1tYSwgR0FNTUFfRU5UUklFUyk7DQot DQotCS8qIENvbnZlcnQgUkdCIHRvIFlVViAqLw0KLQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0Nf Q1NDX1lSX1lHLCAweDQyIHwgKDB4ODEgPDwgMTYpKTsNCi0JcmVnbWFwX3dyaXRlKHJlZ21hcCwg SVNDX0NTQ19ZQl9PWSwgMHgxOSB8ICgweDEwIDw8IDE2KSk7DQotCXJlZ21hcF93cml0ZShyZWdt YXAsIElTQ19DU0NfQ0JSX0NCRywgMHhGREEgfCAoMHhGQjYgPDwgMTYpKTsNCi0JcmVnbWFwX3dy aXRlKHJlZ21hcCwgSVNDX0NTQ19DQkJfT0NCLCAweDcwIHwgKDB4ODAgPDwgMTYpKTsNCi0JcmVn bWFwX3dyaXRlKHJlZ21hcCwgSVNDX0NTQ19DUlJfQ1JHLCAweDcwIHwgKDB4RkEyIDw8IDE2KSk7 DQotCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19DU0NfQ1JCX09DUiwgMHhGRUUgfCAoMHg4MCA8 PCAxNikpOw0KLQ0KLQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfQ0JDX0JSSUdIVCwgY3RybHMt PmJyaWdodG5lc3MpOw0KLQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfQ0JDX0NPTlRSQVNULCBj dHJscy0+Y29udHJhc3QpOw0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY191cGRhdGVfcHJvZmlsZShz dHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KLXsNCi0Jc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNj LT5yZWdtYXA7DQotCXUzMiBzcjsNCi0JaW50IGNvdW50ZXIgPSAxMDA7DQotDQotCXJlZ21hcF93 cml0ZShyZWdtYXAsIElTQ19DVFJMRU4sIElTQ19DVFJMX1VQUFJPKTsNCi0NCi0JcmVnbWFwX3Jl YWQocmVnbWFwLCBJU0NfQ1RSTFNSLCAmc3IpOw0KLQl3aGlsZSAoKHNyICYgSVNDX0NUUkxfVVBQ Uk8pICYmIGNvdW50ZXItLSkgew0KLQkJdXNsZWVwX3JhbmdlKDEwMDAsIDIwMDApOw0KLQkJcmVn bWFwX3JlYWQocmVnbWFwLCBJU0NfQ1RSTFNSLCAmc3IpOw0KLQl9DQotDQotCWlmIChjb3VudGVy IDwgMCkgew0KLQkJdjRsMl93YXJuKCZpc2MtPnY0bDJfZGV2LCAiVGltZSBvdXQgdG8gdXBkYXRl IHByb2ZpbGVcbiIpOw0KLQkJcmV0dXJuIC1FVElNRURPVVQ7DQotCX0NCi0NCi0JcmV0dXJuIDA7 DQotfQ0KLQ0KLXN0YXRpYyB2b2lkIGlzY19zZXRfaGlzdG9ncmFtKHN0cnVjdCBpc2NfZGV2aWNl ICppc2MsIGJvb2wgZW5hYmxlKQ0KLXsNCi0Jc3RydWN0IHJlZ21hcCAqcmVnbWFwID0gaXNjLT5y ZWdtYXA7DQotCXN0cnVjdCBpc2NfY3RybHMgKmN0cmxzID0gJmlzYy0+Y3RybHM7DQotDQotCWlm IChlbmFibGUpIHsNCi0JCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19ISVNfQ0ZHLA0KLQkJCSAg ICAgSVNDX0hJU19DRkdfTU9ERV9HUiB8DQotCQkJICAgICAoaXNjLT5jb25maWcuc2RfZm9ybWF0 LT5jZmFfYmF5Y2ZnDQotCQkJCQk8PCBJU0NfSElTX0NGR19CQVlTRUxfU0hJRlQpIHwNCi0JCQkJ CUlTQ19ISVNfQ0ZHX1JBUik7DQotCQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfSElTX0NUUkws IElTQ19ISVNfQ1RSTF9FTik7DQotCQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfSU5URU4sIElT Q19JTlRfSElTRE9ORSk7DQotCQljdHJscy0+aGlzdF9pZCA9IElTQ19ISVNfQ0ZHX01PREVfR1I7 DQotCQlpc2NfdXBkYXRlX3Byb2ZpbGUoaXNjKTsNCi0JCXJlZ21hcF93cml0ZShyZWdtYXAsIElT Q19DVFJMRU4sIElTQ19DVFJMX0hJU1JFUSk7DQotDQotCQljdHJscy0+aGlzdF9zdGF0ID0gSElT VF9FTkFCTEVEOw0KLQl9IGVsc2Ugew0KLQkJcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0lOVERJ UywgSVNDX0lOVF9ISVNET05FKTsNCi0JCXJlZ21hcF93cml0ZShyZWdtYXAsIElTQ19ISVNfQ1RS TCwgSVNDX0hJU19DVFJMX0RJUyk7DQotDQotCQljdHJscy0+aGlzdF9zdGF0ID0gSElTVF9ESVNB QkxFRDsNCi0JfQ0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY19jb25maWd1cmUoc3RydWN0IGlzY19k ZXZpY2UgKmlzYykNCi17DQotCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0K LQl1MzIgcGZlX2NmZzAsIHJscF9tb2RlLCBkY2ZnLCBtYXNrLCBwaXBlbGluZTsNCi0Jc3RydWN0 IGlzY19zdWJkZXZfZW50aXR5ICpzdWJkZXYgPSBpc2MtPmN1cnJlbnRfc3ViZGV2Ow0KLQ0KLQlw ZmVfY2ZnMCA9IGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+cGZlX2NmZzBfYnBzOw0KLQlybHBfbW9k ZSA9IGlzYy0+Y29uZmlnLnJscF9jZmdfbW9kZTsNCi0JcGlwZWxpbmUgPSBpc2MtPmNvbmZpZy5i aXRzX3BpcGVsaW5lOw0KLQ0KLQlkY2ZnID0gaXNjLT5jb25maWcuZGNmZ19pbW9kZSB8DQotCQkg ICAgICAgSVNDX0RDRkdfWU1CU0laRV9CRUFUUzggfCBJU0NfRENGR19DTUJTSVpFX0JFQVRTODsN Ci0NCi0JcGZlX2NmZzAgIHw9IHN1YmRldi0+cGZlX2NmZzAgfCBJU0NfUEZFX0NGRzBfTU9ERV9Q Uk9HUkVTU0lWRTsNCi0JbWFzayA9IElTQ19QRkVfQ0ZHMF9CUFNfTUFTSyB8IElTQ19QRkVfQ0ZH MF9IUE9MX0xPVyB8DQotCSAgICAgICBJU0NfUEZFX0NGRzBfVlBPTF9MT1cgfCBJU0NfUEZFX0NG RzBfUFBPTF9MT1cgfA0KLQkgICAgICAgSVNDX1BGRV9DRkcwX01PREVfTUFTSyB8IElTQ19QRkVf Q0ZHMF9DQ0lSX0NSQyB8DQotCQkgICBJU0NfUEZFX0NGRzBfQ0NJUjY1NjsNCi0NCi0JcmVnbWFw X3VwZGF0ZV9iaXRzKHJlZ21hcCwgSVNDX1BGRV9DRkcwLCBtYXNrLCBwZmVfY2ZnMCk7DQotDQot CXJlZ21hcF91cGRhdGVfYml0cyhyZWdtYXAsIElTQ19STFBfQ0ZHLCBJU0NfUkxQX0NGR19NT0RF X01BU0ssDQotCQkJICAgcmxwX21vZGUpOw0KLQ0KLQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0Nf RENGRywgZGNmZyk7DQotDQotCS8qIFNldCB0aGUgcGlwZWxpbmUgKi8NCi0JaXNjX3NldF9waXBl bGluZShpc2MsIHBpcGVsaW5lKTsNCi0NCi0JLyoNCi0JICogVGhlIGN1cnJlbnQgaW1wbGVtZW50 ZWQgaGlzdG9ncmFtIGlzIGF2YWlsYWJsZSBmb3IgUkFXIFIsIEIsIEdCLCBHUg0KLQkgKiBjaGFu bmVscy4gV2UgbmVlZCB0byBjaGVjayBpZiBzZW5zb3IgaXMgb3V0cHV0dGluZyBSQVcgQkFZRVIN Ci0JICovDQotCWlmIChpc2MtPmN0cmxzLmF3YiAmJg0KLQkgICAgSVNDX0lTX0ZPUk1BVF9SQVco aXNjLT5jb25maWcuc2RfZm9ybWF0LT5tYnVzX2NvZGUpKQ0KLQkJaXNjX3NldF9oaXN0b2dyYW0o aXNjLCB0cnVlKTsNCi0JZWxzZQ0KLQkJaXNjX3NldF9oaXN0b2dyYW0oaXNjLCBmYWxzZSk7DQot DQotCS8qIFVwZGF0ZSBwcm9maWxlICovDQotCXJldHVybiBpc2NfdXBkYXRlX3Byb2ZpbGUoaXNj KTsNCi19DQotDQotc3RhdGljIGludCBpc2Nfc3RhcnRfc3RyZWFtaW5nKHN0cnVjdCB2YjJfcXVl dWUgKnZxLCB1bnNpZ25lZCBpbnQgY291bnQpDQotew0KLQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNj ID0gdmIyX2dldF9kcnZfcHJpdih2cSk7DQotCXN0cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+ cmVnbWFwOw0KLQlzdHJ1Y3QgaXNjX2J1ZmZlciAqYnVmOw0KLQl1bnNpZ25lZCBsb25nIGZsYWdz Ow0KLQlpbnQgcmV0Ow0KLQ0KLQkvKiBFbmFibGUgc3RyZWFtIG9uIHRoZSBzdWIgZGV2aWNlICov DQotCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoaXNjLT5jdXJyZW50X3N1YmRldi0+c2QsIHZpZGVv LCBzX3N0cmVhbSwgMSk7DQotCWlmIChyZXQgJiYgcmV0ICE9IC1FTk9JT0NUTENNRCkgew0KLQkJ djRsMl9lcnIoJmlzYy0+djRsMl9kZXYsICJzdHJlYW0gb24gZmFpbGVkIGluIHN1YmRldiAlZFxu IiwNCi0JCQkgcmV0KTsNCi0JCWdvdG8gZXJyX3N0YXJ0X3N0cmVhbTsNCi0JfQ0KLQ0KLQlwbV9y dW50aW1lX2dldF9zeW5jKGlzYy0+ZGV2KTsNCi0NCi0JcmV0ID0gaXNjX2NvbmZpZ3VyZShpc2Mp Ow0KLQlpZiAodW5saWtlbHkocmV0KSkNCi0JCWdvdG8gZXJyX2NvbmZpZ3VyZTsNCi0NCi0JLyog RW5hYmxlIERNQSBpbnRlcnJ1cHQgKi8NCi0JcmVnbWFwX3dyaXRlKHJlZ21hcCwgSVNDX0lOVEVO LCBJU0NfSU5UX0RET05FKTsNCi0NCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlzYy0+ZG1hX3F1ZXVl X2xvY2ssIGZsYWdzKTsNCi0NCi0JaXNjLT5zZXF1ZW5jZSA9IDA7DQotCWlzYy0+c3RvcCA9IGZh bHNlOw0KLQlyZWluaXRfY29tcGxldGlvbigmaXNjLT5jb21wKTsNCi0NCi0JaXNjLT5jdXJfZnJt ID0gbGlzdF9maXJzdF9lbnRyeSgmaXNjLT5kbWFfcXVldWUsDQotCQkJCQlzdHJ1Y3QgaXNjX2J1 ZmZlciwgbGlzdCk7DQotCWxpc3RfZGVsKCZpc2MtPmN1cl9mcm0tPmxpc3QpOw0KLQ0KLQlpc2Nf c3RhcnRfZG1hKGlzYyk7DQotDQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzYy0+ZG1hX3F1 ZXVlX2xvY2ssIGZsYWdzKTsNCi0NCi0JLyogaWYgd2Ugc3RyZWFtaW5nIGZyb20gUkFXLCB3ZSBj YW4gZG8gb25lLXNob3Qgd2hpdGUgYmFsYW5jZSBhZGogKi8NCi0JaWYgKElTQ19JU19GT1JNQVRf UkFXKGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlKSkNCi0JCXY0bDJfY3RybF9hY3Rp dmF0ZShpc2MtPmRvX3diX2N0cmwsIHRydWUpOw0KLQ0KLQlyZXR1cm4gMDsNCi0NCi1lcnJfY29u ZmlndXJlOg0KLQlwbV9ydW50aW1lX3B1dF9zeW5jKGlzYy0+ZGV2KTsNCi0NCi0JdjRsMl9zdWJk ZXZfY2FsbChpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZCwgdmlkZW8sIHNfc3RyZWFtLCAwKTsNCi0N Ci1lcnJfc3RhcnRfc3RyZWFtOg0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaXNjLT5kbWFfcXVldWVf bG9jaywgZmxhZ3MpOw0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1ZiwgJmlzYy0+ZG1hX3F1ZXVl LCBsaXN0KQ0KLQkJdmIyX2J1ZmZlcl9kb25lKCZidWYtPnZiLnZiMl9idWYsIFZCMl9CVUZfU1RB VEVfUVVFVUVEKTsNCi0JSU5JVF9MSVNUX0hFQUQoJmlzYy0+ZG1hX3F1ZXVlKTsNCi0Jc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmaXNjLT5kbWFfcXVldWVfbG9jaywgZmxhZ3MpOw0KLQ0KLQlyZXR1 cm4gcmV0Ow0KLX0NCi0NCi1zdGF0aWMgdm9pZCBpc2Nfc3RvcF9zdHJlYW1pbmcoc3RydWN0IHZi Ml9xdWV1ZSAqdnEpDQotew0KLQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmIyX2dldF9kcnZf cHJpdih2cSk7DQotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQotCXN0cnVjdCBpc2NfYnVmZmVyICpi dWY7DQotCWludCByZXQ7DQotDQotCXY0bDJfY3RybF9hY3RpdmF0ZShpc2MtPmRvX3diX2N0cmws IGZhbHNlKTsNCi0NCi0JaXNjLT5zdG9wID0gdHJ1ZTsNCi0NCi0JLyogV2FpdCB1bnRpbCB0aGUg ZW5kIG9mIHRoZSBjdXJyZW50IGZyYW1lICovDQotCWlmIChpc2MtPmN1cl9mcm0gJiYgIXdhaXRf Zm9yX2NvbXBsZXRpb25fdGltZW91dCgmaXNjLT5jb21wLCA1ICogSFopKQ0KLQkJdjRsMl9lcnIo JmlzYy0+djRsMl9kZXYsDQotCQkJICJUaW1lb3V0IHdhaXRpbmcgZm9yIGVuZCBvZiB0aGUgY2Fw dHVyZVxuIik7DQotDQotCS8qIERpc2FibGUgRE1BIGludGVycnVwdCAqLw0KLQlyZWdtYXBfd3Jp dGUoaXNjLT5yZWdtYXAsIElTQ19JTlRESVMsIElTQ19JTlRfRERPTkUpOw0KLQ0KLQlwbV9ydW50 aW1lX3B1dF9zeW5jKGlzYy0+ZGV2KTsNCi0NCi0JLyogRGlzYWJsZSBzdHJlYW0gb24gdGhlIHN1 YiBkZXZpY2UgKi8NCi0JcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChpc2MtPmN1cnJlbnRfc3ViZGV2 LT5zZCwgdmlkZW8sIHNfc3RyZWFtLCAwKTsNCi0JaWYgKHJldCAmJiByZXQgIT0gLUVOT0lPQ1RM Q01EKQ0KLQkJdjRsMl9lcnIoJmlzYy0+djRsMl9kZXYsICJzdHJlYW0gb2ZmIGZhaWxlZCBpbiBz dWJkZXZcbiIpOw0KLQ0KLQkvKiBSZWxlYXNlIGFsbCBhY3RpdmUgYnVmZmVycyAqLw0KLQlzcGlu X2xvY2tfaXJxc2F2ZSgmaXNjLT5kbWFfcXVldWVfbG9jaywgZmxhZ3MpOw0KLQlpZiAodW5saWtl bHkoaXNjLT5jdXJfZnJtKSkgew0KLQkJdmIyX2J1ZmZlcl9kb25lKCZpc2MtPmN1cl9mcm0tPnZi LnZiMl9idWYsDQotCQkJCVZCMl9CVUZfU1RBVEVfRVJST1IpOw0KLQkJaXNjLT5jdXJfZnJtID0g TlVMTDsNCi0JfQ0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJ1ZiwgJmlzYy0+ZG1hX3F1ZXVlLCBs aXN0KQ0KLQkJdmIyX2J1ZmZlcl9kb25lKCZidWYtPnZiLnZiMl9idWYsIFZCMl9CVUZfU1RBVEVf RVJST1IpOw0KLQlJTklUX0xJU1RfSEVBRCgmaXNjLT5kbWFfcXVldWUpOw0KLQlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZpc2MtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7DQotfQ0KLQ0KLXN0YXRp YyB2b2lkIGlzY19idWZmZXJfcXVldWUoc3RydWN0IHZiMl9idWZmZXIgKnZiKQ0KLXsNCi0Jc3Ry dWN0IHZiMl92NGwyX2J1ZmZlciAqdmJ1ZiA9IHRvX3ZiMl92NGwyX2J1ZmZlcih2Yik7DQotCXN0 cnVjdCBpc2NfYnVmZmVyICpidWYgPSBjb250YWluZXJfb2YodmJ1Ziwgc3RydWN0IGlzY19idWZm ZXIsIHZiKTsNCi0Jc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZiMl9nZXRfZHJ2X3ByaXYodmIt PnZiMl9xdWV1ZSk7DQotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7DQotDQotCXNwaW5fbG9ja19pcnFz YXZlKCZpc2MtPmRtYV9xdWV1ZV9sb2NrLCBmbGFncyk7DQotCWlmICghaXNjLT5jdXJfZnJtICYm IGxpc3RfZW1wdHkoJmlzYy0+ZG1hX3F1ZXVlKSAmJg0KLQkJdmIyX2lzX3N0cmVhbWluZyh2Yi0+ dmIyX3F1ZXVlKSkgew0KLQkJaXNjLT5jdXJfZnJtID0gYnVmOw0KLQkJaXNjX3N0YXJ0X2RtYShp c2MpOw0KLQl9IGVsc2UNCi0JCWxpc3RfYWRkX3RhaWwoJmJ1Zi0+bGlzdCwgJmlzYy0+ZG1hX3F1 ZXVlKTsNCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXNjLT5kbWFfcXVldWVfbG9jaywgZmxh Z3MpOw0KLX0NCi0NCi1zdGF0aWMgc3RydWN0IGlzY19mb3JtYXQgKmZpbmRfZm9ybWF0X2J5X2Zv dXJjYyhzdHJ1Y3QgaXNjX2RldmljZSAqaXNjLA0KLQkJCQkJCSB1bnNpZ25lZCBpbnQgZm91cmNj KQ0KLXsNCi0JdW5zaWduZWQgaW50IG51bV9mb3JtYXRzID0gaXNjLT5udW1fdXNlcl9mb3JtYXRz Ow0KLQlzdHJ1Y3QgaXNjX2Zvcm1hdCAqZm10Ow0KLQl1bnNpZ25lZCBpbnQgaTsNCi0NCi0JZm9y IChpID0gMDsgaSA8IG51bV9mb3JtYXRzOyBpKyspIHsNCi0JCWZtdCA9IGlzYy0+dXNlcl9mb3Jt YXRzW2ldOw0KLQkJaWYgKGZtdC0+Zm91cmNjID09IGZvdXJjYykNCi0JCQlyZXR1cm4gZm10Ow0K LQl9DQotDQotCXJldHVybiBOVUxMOw0KLX0NCi0NCi1zdGF0aWMgY29uc3Qgc3RydWN0IHZiMl9v cHMgaXNjX3ZiMl9vcHMgPSB7DQotCS5xdWV1ZV9zZXR1cAkJPSBpc2NfcXVldWVfc2V0dXAsDQot CS53YWl0X3ByZXBhcmUJCT0gdmIyX29wc193YWl0X3ByZXBhcmUsDQotCS53YWl0X2ZpbmlzaAkJ PSB2YjJfb3BzX3dhaXRfZmluaXNoLA0KLQkuYnVmX3ByZXBhcmUJCT0gaXNjX2J1ZmZlcl9wcmVw YXJlLA0KLQkuc3RhcnRfc3RyZWFtaW5nCT0gaXNjX3N0YXJ0X3N0cmVhbWluZywNCi0JLnN0b3Bf c3RyZWFtaW5nCQk9IGlzY19zdG9wX3N0cmVhbWluZywNCi0JLmJ1Zl9xdWV1ZQkJPSBpc2NfYnVm ZmVyX3F1ZXVlLA0KLX07DQotDQotc3RhdGljIGludCBpc2NfcXVlcnljYXAoc3RydWN0IGZpbGUg KmZpbGUsIHZvaWQgKnByaXYsDQotCQkJIHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCkNCi17 DQotCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KLQ0KLQlz dHJzY3B5KGNhcC0+ZHJpdmVyLCBBVE1FTF9JU0NfTkFNRSwgc2l6ZW9mKGNhcC0+ZHJpdmVyKSk7 DQotCXN0cnNjcHkoY2FwLT5jYXJkLCAiQXRtZWwgSW1hZ2UgU2Vuc29yIENvbnRyb2xsZXIiLCBz aXplb2YoY2FwLT5jYXJkKSk7DQotCXNucHJpbnRmKGNhcC0+YnVzX2luZm8sIHNpemVvZihjYXAt PmJ1c19pbmZvKSwNCi0JCSAicGxhdGZvcm06JXMiLCBpc2MtPnY0bDJfZGV2Lm5hbWUpOw0KLQ0K LQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGljIGludCBpc2NfZW51bV9mbXRfdmlkX2NhcChzdHJ1 Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCi0JCQkJIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYp DQotew0KLQl1MzIgaW5kZXggPSBmLT5pbmRleDsNCi0JdTMyIGksIHN1cHBvcnRlZF9pbmRleDsN Ci0NCi0JaWYgKGluZGV4IDwgQVJSQVlfU0laRShjb250cm9sbGVyX2Zvcm1hdHMpKSB7DQotCQlm LT5waXhlbGZvcm1hdCA9IGNvbnRyb2xsZXJfZm9ybWF0c1tpbmRleF0uZm91cmNjOw0KLQkJcmV0 dXJuIDA7DQotCX0NCi0NCi0JaW5kZXggLT0gQVJSQVlfU0laRShjb250cm9sbGVyX2Zvcm1hdHMp Ow0KLQ0KLQlpID0gMDsNCi0Jc3VwcG9ydGVkX2luZGV4ID0gMDsNCi0NCi0JZm9yIChpID0gMDsg aSA8IEFSUkFZX1NJWkUoZm9ybWF0c19saXN0KTsgaSsrKSB7DQotCQlpZiAoIUlTQ19JU19GT1JN QVRfUkFXKGZvcm1hdHNfbGlzdFtpXS5tYnVzX2NvZGUpIHx8DQotCQkgICAgIWZvcm1hdHNfbGlz dFtpXS5zZF9zdXBwb3J0KQ0KLQkJCWNvbnRpbnVlOw0KLQkJaWYgKHN1cHBvcnRlZF9pbmRleCA9 PSBpbmRleCkgew0KLQkJCWYtPnBpeGVsZm9ybWF0ID0gZm9ybWF0c19saXN0W2ldLmZvdXJjYzsN Ci0JCQlyZXR1cm4gMDsNCi0JCX0NCi0JCXN1cHBvcnRlZF9pbmRleCsrOw0KLQl9DQotDQotCXJl dHVybiAtRUlOVkFMOw0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY19nX2ZtdF92aWRfY2FwKHN0cnVj dCBmaWxlICpmaWxlLCB2b2lkICpwcml2LA0KLQkJCSAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAq Zm10KQ0KLXsNCi0Jc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7 DQotDQotCSpmbXQgPSBpc2MtPmZtdDsNCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLS8qDQotICog Q2hlY2tzIHRoZSBjdXJyZW50IGNvbmZpZ3VyZWQgZm9ybWF0LCBpZiBJU0MgY2FuIG91dHB1dCBp dCwNCi0gKiBjb25zaWRlcmluZyB3aGljaCB0eXBlIG9mIGZvcm1hdCB0aGUgSVNDIHJlY2VpdmVz IGZyb20gdGhlIHNlbnNvcg0KLSAqLw0KLXN0YXRpYyBpbnQgaXNjX3RyeV92YWxpZGF0ZV9mb3Jt YXRzKHN0cnVjdCBpc2NfZGV2aWNlICppc2MpDQotew0KLQlpbnQgcmV0Ow0KLQlib29sIGJheWVy ID0gZmFsc2UsIHl1diA9IGZhbHNlLCByZ2IgPSBmYWxzZSwgZ3JleSA9IGZhbHNlOw0KLQ0KLQkv KiBhbGwgZm9ybWF0cyBzdXBwb3J0ZWQgYnkgdGhlIFJMUCBtb2R1bGUgYXJlIE9LICovDQotCXN3 aXRjaCAoaXNjLT50cnlfY29uZmlnLmZvdXJjYykgew0KLQljYXNlIFY0TDJfUElYX0ZNVF9TQkdH Ujg6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NHQlJHODoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfU0dS Qkc4Og0KLQljYXNlIFY0TDJfUElYX0ZNVF9TUkdHQjg6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NC R0dSMTA6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NHQlJHMTA6DQotCWNhc2UgVjRMMl9QSVhfRk1U X1NHUkJHMTA6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NSR0dCMTA6DQotCWNhc2UgVjRMMl9QSVhf Rk1UX1NCR0dSMTI6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NHQlJHMTI6DQotCWNhc2UgVjRMMl9Q SVhfRk1UX1NHUkJHMTI6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NSR0dCMTI6DQotCQlyZXQgPSAw Ow0KLQkJYmF5ZXIgPSB0cnVlOw0KLQkJYnJlYWs7DQotDQotCWNhc2UgVjRMMl9QSVhfRk1UX1lV VjQyMDoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIyUDoNCi0JY2FzZSBWNEwyX1BJWF9GTVRf WVVZVjoNCi0JCXJldCA9IDA7DQotCQl5dXYgPSB0cnVlOw0KLQkJYnJlYWs7DQotDQotCWNhc2Ug VjRMMl9QSVhfRk1UX1JHQjU2NToNCi0JY2FzZSBWNEwyX1BJWF9GTVRfQUJHUjMyOg0KLQljYXNl IFY0TDJfUElYX0ZNVF9YQkdSMzI6DQotCWNhc2UgVjRMMl9QSVhfRk1UX0FSR0I0NDQ6DQotCWNh c2UgVjRMMl9QSVhfRk1UX0FSR0I1NTU6DQotCQlyZXQgPSAwOw0KLQkJcmdiID0gdHJ1ZTsNCi0J CWJyZWFrOw0KLQljYXNlIFY0TDJfUElYX0ZNVF9HUkVZOg0KLQkJcmV0ID0gMDsNCi0JCWdyZXkg PSB0cnVlOw0KLQkJYnJlYWs7DQotCWRlZmF1bHQ6DQotCS8qIGFueSBvdGhlciBkaWZmZXJlbnQg Zm9ybWF0cyBhcmUgbm90IHN1cHBvcnRlZCAqLw0KLQkJcmV0ID0gLUVJTlZBTDsNCi0JfQ0KLQ0K LQkvKiB3ZSBjYW5ub3Qgb3V0cHV0IFJBVy9HcmV5IGlmIHdlIGRvIG5vdCByZWNlaXZlIFJBVyAq Lw0KLQlpZiAoKGJheWVyIHx8IGdyZXkpICYmDQotCSAgICAhSVNDX0lTX0ZPUk1BVF9SQVcoaXNj LT50cnlfY29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlKSkNCi0JCXJldHVybiAtRUlOVkFMOw0K LQ0KLQl2NGwyX2RiZygxLCBkZWJ1ZywgJmlzYy0+djRsMl9kZXYsDQotCQkgIkZvcm1hdCB2YWxp ZGF0aW9uLCByZXF1ZXN0ZWQgcmdiPSV1LCB5dXY9JXUsIGdyZXk9JXUsIGJheWVyPSV1XG4iLA0K LQkJIHJnYiwgeXV2LCBncmV5LCBiYXllcik7DQotDQotCXJldHVybiByZXQ7DQotfQ0KLQ0KLS8q DQotICogQ29uZmlndXJlcyB0aGUgUkxQIGFuZCBETUEgbW9kdWxlcywgZGVwZW5kaW5nIG9uIHRo ZSBvdXRwdXQgZm9ybWF0DQotICogY29uZmlndXJlZCBmb3IgdGhlIElTQy4NCi0gKiBJZiBkaXJl Y3RfZHVtcCA9PSB0cnVlLCBqdXN0IGR1bXAgcmF3IGRhdGEgOCBiaXRzLg0KLSAqLw0KLXN0YXRp YyBpbnQgaXNjX3RyeV9jb25maWd1cmVfcmxwX2RtYShzdHJ1Y3QgaXNjX2RldmljZSAqaXNjLCBi b29sIGRpcmVjdF9kdW1wKQ0KLXsNCi0JaWYgKGRpcmVjdF9kdW1wKSB7DQotCQlpc2MtPnRyeV9j b25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9EQVQ4Ow0KLQkJaXNjLT50cnlf Y29uZmlnLmRjZmdfaW1vZGUgPSBJU0NfRENGR19JTU9ERV9QQUNLRUQ4Ow0KLQkJaXNjLT50cnlf Y29uZmlnLmRjdHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tFRDsNCi0JCWlzYy0+dHJ5 X2NvbmZpZy5icHAgPSAxNjsNCi0JCXJldHVybiAwOw0KLQl9DQotDQotCXN3aXRjaCAoaXNjLT50 cnlfY29uZmlnLmZvdXJjYykgew0KLQljYXNlIFY0TDJfUElYX0ZNVF9TQkdHUjg6DQotCWNhc2Ug VjRMMl9QSVhfRk1UX1NHQlJHODoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfU0dSQkc4Og0KLQljYXNl IFY0TDJfUElYX0ZNVF9TUkdHQjg6DQotCQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2RlID0g SVNDX1JMUF9DRkdfTU9ERV9EQVQ4Ow0KLQkJaXNjLT50cnlfY29uZmlnLmRjZmdfaW1vZGUgPSBJ U0NfRENGR19JTU9ERV9QQUNLRUQ4Ow0KLQkJaXNjLT50cnlfY29uZmlnLmRjdHJsX2R2aWV3ID0g SVNDX0RDVFJMX0RWSUVXX1BBQ0tFRDsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5icHAgPSA4Ow0KLQkJ YnJlYWs7DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dSMTA6DQotCWNhc2UgVjRMMl9QSVhfRk1U X1NHQlJHMTA6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NHUkJHMTA6DQotCWNhc2UgVjRMMl9QSVhf Rk1UX1NSR0dCMTA6DQotCQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9D RkdfTU9ERV9EQVQxMDsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdf SU1PREVfUEFDS0VEMTY7DQotCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENU UkxfRFZJRVdfUEFDS0VEOw0KLQkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDE2Ow0KLQkJYnJlYWs7 DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dSMTI6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NHQlJH MTI6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NHUkJHMTI6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1NS R0dCMTI6DQotCQlpc2MtPnRyeV9jb25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9E RV9EQVQxMjsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdfSU1PREVf UEFDS0VEMTY7DQotCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJ RVdfUEFDS0VEOw0KLQkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDE2Ow0KLQkJYnJlYWs7DQotCWNh c2UgVjRMMl9QSVhfRk1UX1JHQjU2NToNCi0JCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUg PSBJU0NfUkxQX0NGR19NT0RFX1JHQjU2NTsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2Rl ID0gSVNDX0RDRkdfSU1PREVfUEFDS0VEMTY7DQotCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZp ZXcgPSBJU0NfRENUUkxfRFZJRVdfUEFDS0VEOw0KLQkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDE2 Ow0KLQkJYnJlYWs7DQotCWNhc2UgVjRMMl9QSVhfRk1UX0FSR0I0NDQ6DQotCQlpc2MtPnRyeV9j b25maWcucmxwX2NmZ19tb2RlID0gSVNDX1JMUF9DRkdfTU9ERV9BUkdCNDQ0Ow0KLQkJaXNjLT50 cnlfY29uZmlnLmRjZmdfaW1vZGUgPSBJU0NfRENGR19JTU9ERV9QQUNLRUQxNjsNCi0JCWlzYy0+ dHJ5X2NvbmZpZy5kY3RybF9kdmlldyA9IElTQ19EQ1RSTF9EVklFV19QQUNLRUQ7DQotCQlpc2Mt PnRyeV9jb25maWcuYnBwID0gMTY7DQotCQlicmVhazsNCi0JY2FzZSBWNEwyX1BJWF9GTVRfQVJH QjU1NToNCi0JCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RF X0FSR0I1NTU7DQotCQlpc2MtPnRyeV9jb25maWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RF X1BBQ0tFRDE2Ow0KLQkJaXNjLT50cnlfY29uZmlnLmRjdHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RW SUVXX1BBQ0tFRDsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5icHAgPSAxNjsNCi0JCWJyZWFrOw0KLQlj YXNlIFY0TDJfUElYX0ZNVF9BQkdSMzI6DQotCWNhc2UgVjRMMl9QSVhfRk1UX1hCR1IzMjoNCi0J CWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX0FSR0IzMjsN Ci0JCWlzYy0+dHJ5X2NvbmZpZy5kY2ZnX2ltb2RlID0gSVNDX0RDRkdfSU1PREVfUEFDS0VEMzI7 DQotCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJRVdfUEFDS0VE Ow0KLQkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDMyOw0KLQkJYnJlYWs7DQotCWNhc2UgVjRMMl9Q SVhfRk1UX1lVVjQyMDoNCi0JCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQ X0NGR19NT0RFX1lZQ0M7DQotCQlpc2MtPnRyeV9jb25maWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZH X0lNT0RFX1lDNDIwUDsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9kdmlldyA9IElTQ19EQ1RS TF9EVklFV19QTEFOQVI7DQotCQlpc2MtPnRyeV9jb25maWcuYnBwID0gMTI7DQotCQlicmVhazsN Ci0JY2FzZSBWNEwyX1BJWF9GTVRfWVVWNDIyUDoNCi0JCWlzYy0+dHJ5X2NvbmZpZy5ybHBfY2Zn X21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX1lZQ0M7DQotCQlpc2MtPnRyeV9jb25maWcuZGNmZ19p bW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1lDNDIyUDsNCi0JCWlzYy0+dHJ5X2NvbmZpZy5kY3RybF9k dmlldyA9IElTQ19EQ1RSTF9EVklFV19QTEFOQVI7DQotCQlpc2MtPnRyeV9jb25maWcuYnBwID0g MTY7DQotCQlicmVhazsNCi0JY2FzZSBWNEwyX1BJWF9GTVRfWVVZVjoNCi0JCWlzYy0+dHJ5X2Nv bmZpZy5ybHBfY2ZnX21vZGUgPSBJU0NfUkxQX0NGR19NT0RFX1lZQ0M7DQotCQlpc2MtPnRyeV9j b25maWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDMyOw0KLQkJaXNjLT50cnlf Y29uZmlnLmRjdHJsX2R2aWV3ID0gSVNDX0RDVFJMX0RWSUVXX1BBQ0tFRDsNCi0JCWlzYy0+dHJ5 X2NvbmZpZy5icHAgPSAxNjsNCi0JCWJyZWFrOw0KLQljYXNlIFY0TDJfUElYX0ZNVF9HUkVZOg0K LQkJaXNjLT50cnlfY29uZmlnLnJscF9jZmdfbW9kZSA9IElTQ19STFBfQ0ZHX01PREVfREFUWTg7 DQotCQlpc2MtPnRyeV9jb25maWcuZGNmZ19pbW9kZSA9IElTQ19EQ0ZHX0lNT0RFX1BBQ0tFRDg7 DQotCQlpc2MtPnRyeV9jb25maWcuZGN0cmxfZHZpZXcgPSBJU0NfRENUUkxfRFZJRVdfUEFDS0VE Ow0KLQkJaXNjLT50cnlfY29uZmlnLmJwcCA9IDg7DQotCQlicmVhazsNCi0JZGVmYXVsdDoNCi0J CXJldHVybiAtRUlOVkFMOw0KLQl9DQotCXJldHVybiAwOw0KLX0NCi0NCi0vKg0KLSAqIENvbmZp Z3VyaW5nIHBpcGVsaW5lIG1vZHVsZXMsIGRlcGVuZGluZyBvbiB3aGljaCBmb3JtYXQgdGhlIElT QyBvdXRwdXRzDQotICogYW5kIGNvbnNpZGVyaW5nIHdoaWNoIGZvcm1hdCBpdCBoYXMgYXMgaW5w dXQgZnJvbSB0aGUgc2Vuc29yLg0KLSAqLw0KLXN0YXRpYyBpbnQgaXNjX3RyeV9jb25maWd1cmVf cGlwZWxpbmUoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCi17DQotCXN3aXRjaCAoaXNjLT50cnlf Y29uZmlnLmZvdXJjYykgew0KLQljYXNlIFY0TDJfUElYX0ZNVF9SR0I1NjU6DQotCWNhc2UgVjRM Ml9QSVhfRk1UX0FSR0I1NTU6DQotCWNhc2UgVjRMMl9QSVhfRk1UX0FSR0I0NDQ6DQotCWNhc2Ug VjRMMl9QSVhfRk1UX0FCR1IzMjoNCi0JY2FzZSBWNEwyX1BJWF9GTVRfWEJHUjMyOg0KLQkJLyog aWYgc2Vuc29yIGZvcm1hdCBpcyBSQVcsIHdlIGNvbnZlcnQgaW5zaWRlIElTQyAqLw0KLQkJaWYg KElTQ19JU19GT1JNQVRfUkFXKGlzYy0+dHJ5X2NvbmZpZy5zZF9mb3JtYXQtPm1idXNfY29kZSkp IHsNCi0JCQlpc2MtPnRyeV9jb25maWcuYml0c19waXBlbGluZSA9IENGQV9FTkFCTEUgfA0KLQkJ CQlXQl9FTkFCTEUgfCBHQU1fRU5BQkxFUzsNCi0JCX0gZWxzZSB7DQotCQkJaXNjLT50cnlfY29u ZmlnLmJpdHNfcGlwZWxpbmUgPSAweDA7DQotCQl9DQotCQlicmVhazsNCi0JY2FzZSBWNEwyX1BJ WF9GTVRfWVVWNDIwOg0KLQkJLyogaWYgc2Vuc29yIGZvcm1hdCBpcyBSQVcsIHdlIGNvbnZlcnQg aW5zaWRlIElTQyAqLw0KLQkJaWYgKElTQ19JU19GT1JNQVRfUkFXKGlzYy0+dHJ5X2NvbmZpZy5z ZF9mb3JtYXQtPm1idXNfY29kZSkpIHsNCi0JCQlpc2MtPnRyeV9jb25maWcuYml0c19waXBlbGlu ZSA9IENGQV9FTkFCTEUgfA0KLQkJCQlDU0NfRU5BQkxFIHwgV0JfRU5BQkxFIHwgR0FNX0VOQUJM RVMgfA0KLQkJCQlTVUI0MjBfRU5BQkxFIHwgU1VCNDIyX0VOQUJMRSB8IENCQ19FTkFCTEU7DQot CQl9IGVsc2Ugew0KLQkJCWlzYy0+dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gMHgwOw0KLQkJ fQ0KLQkJYnJlYWs7DQotCWNhc2UgVjRMMl9QSVhfRk1UX1lVVjQyMlA6DQotCQkvKiBpZiBzZW5z b3IgZm9ybWF0IGlzIFJBVywgd2UgY29udmVydCBpbnNpZGUgSVNDICovDQotCQlpZiAoSVNDX0lT X0ZPUk1BVF9SQVcoaXNjLT50cnlfY29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlKSkgew0KLQkJ CWlzYy0+dHJ5X2NvbmZpZy5iaXRzX3BpcGVsaW5lID0gQ0ZBX0VOQUJMRSB8DQotCQkJCUNTQ19F TkFCTEUgfCBXQl9FTkFCTEUgfCBHQU1fRU5BQkxFUyB8DQotCQkJCVNVQjQyMl9FTkFCTEUgfCBD QkNfRU5BQkxFOw0KLQkJfSBlbHNlIHsNCi0JCQlpc2MtPnRyeV9jb25maWcuYml0c19waXBlbGlu ZSA9IDB4MDsNCi0JCX0NCi0JCWJyZWFrOw0KLQljYXNlIFY0TDJfUElYX0ZNVF9ZVVlWOg0KLQkJ LyogaWYgc2Vuc29yIGZvcm1hdCBpcyBSQVcsIHdlIGNvbnZlcnQgaW5zaWRlIElTQyAqLw0KLQkJ aWYgKElTQ19JU19GT1JNQVRfUkFXKGlzYy0+dHJ5X2NvbmZpZy5zZF9mb3JtYXQtPm1idXNfY29k ZSkpIHsNCi0JCQlpc2MtPnRyeV9jb25maWcuYml0c19waXBlbGluZSA9IENGQV9FTkFCTEUgfA0K LQkJCQlDU0NfRU5BQkxFIHwgV0JfRU5BQkxFIHwgR0FNX0VOQUJMRVMgfA0KLQkJCQlTVUI0MjJf RU5BQkxFIHwgQ0JDX0VOQUJMRTsNCi0JCX0gZWxzZSB7DQotCQkJaXNjLT50cnlfY29uZmlnLmJp dHNfcGlwZWxpbmUgPSAweDA7DQotCQl9DQotCQlicmVhazsNCi0JY2FzZSBWNEwyX1BJWF9GTVRf R1JFWToNCi0JCWlmIChJU0NfSVNfRk9STUFUX1JBVyhpc2MtPnRyeV9jb25maWcuc2RfZm9ybWF0 LT5tYnVzX2NvZGUpKSB7DQotCQkvKiBpZiBzZW5zb3IgZm9ybWF0IGlzIFJBVywgd2UgY29udmVy dCBpbnNpZGUgSVNDICovDQotCQkJaXNjLT50cnlfY29uZmlnLmJpdHNfcGlwZWxpbmUgPSBDRkFf RU5BQkxFIHwNCi0JCQkJQ1NDX0VOQUJMRSB8IFdCX0VOQUJMRSB8IEdBTV9FTkFCTEVTIHwNCi0J CQkJQ0JDX0VOQUJMRTsNCi0JCX0gZWxzZSB7DQotCQkJaXNjLT50cnlfY29uZmlnLmJpdHNfcGlw ZWxpbmUgPSAweDA7DQotCQl9DQotCQlicmVhazsNCi0JZGVmYXVsdDoNCi0JCWlzYy0+dHJ5X2Nv bmZpZy5iaXRzX3BpcGVsaW5lID0gMHgwOw0KLQl9DQotCXJldHVybiAwOw0KLX0NCi0NCi1zdGF0 aWMgaW50IGlzY190cnlfZm10KHN0cnVjdCBpc2NfZGV2aWNlICppc2MsIHN0cnVjdCB2NGwyX2Zv cm1hdCAqZiwNCi0JCQl1MzIgKmNvZGUpDQotew0KLQlpbnQgaTsNCi0Jc3RydWN0IGlzY19mb3Jt YXQgKnNkX2ZtdCA9IE5VTEwsICpkaXJlY3RfZm10ID0gTlVMTDsNCi0Jc3RydWN0IHY0bDJfcGl4 X2Zvcm1hdCAqcGl4Zm10ID0gJmYtPmZtdC5waXg7DQotCXN0cnVjdCB2NGwyX3N1YmRldl9wYWRf Y29uZmlnIHBhZF9jZmc7DQotCXN0cnVjdCB2NGwyX3N1YmRldl9mb3JtYXQgZm9ybWF0ID0gew0K LQkJLndoaWNoID0gVjRMMl9TVUJERVZfRk9STUFUX1RSWSwNCi0JfTsNCi0JdTMyIG1idXNfY29k ZTsNCi0JaW50IHJldDsNCi0JYm9vbCBybHBfZG1hX2RpcmVjdF9kdW1wID0gZmFsc2U7DQotDQot CWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkNCi0JCXJldHVybiAt RUlOVkFMOw0KLQ0KLQkvKiBTdGVwIDE6IGZpbmQgYSBSQVcgZm9ybWF0IHRoYXQgaXMgc3VwcG9y dGVkICovDQotCWZvciAoaSA9IDA7IGkgPCBpc2MtPm51bV91c2VyX2Zvcm1hdHM7IGkrKykgew0K LQkJaWYgKElTQ19JU19GT1JNQVRfUkFXKGlzYy0+dXNlcl9mb3JtYXRzW2ldLT5tYnVzX2NvZGUp KSB7DQotCQkJc2RfZm10ID0gaXNjLT51c2VyX2Zvcm1hdHNbaV07DQotCQkJYnJlYWs7DQotCQl9 DQotCX0NCi0JLyogU3RlcCAyOiBXZSBjYW4gY29udGludWUgd2l0aCB0aGlzIFJBVyBmb3JtYXQs IG9yIHdlIGNhbiBsb29rDQotCSAqIGZvciBiZXR0ZXI6IG1heWJlIHNlbnNvciBzdXBwb3J0cyBk aXJlY3RseSB3aGF0IHdlIG5lZWQuDQotCSAqLw0KLQlkaXJlY3RfZm10ID0gZmluZF9mb3JtYXRf YnlfZm91cmNjKGlzYywgcGl4Zm10LT5waXhlbGZvcm1hdCk7DQotDQotCS8qIFN0ZXAgMzogV2Ug aGF2ZSBib3RoLiBXZSBkZWNpZGUgZ2l2ZW4gdGhlIG1vZHVsZSBwYXJhbWV0ZXIgd2hpY2gNCi0J ICogb25lIHRvIHVzZS4NCi0JICovDQotCWlmIChkaXJlY3RfZm10ICYmIHNkX2ZtdCAmJiBzZW5z b3JfcHJlZmVycmVkKQ0KLQkJc2RfZm10ID0gZGlyZWN0X2ZtdDsNCi0NCi0JLyogU3RlcCA0OiB3 ZSBkbyBub3QgaGF2ZSBSQVcgYnV0IHdlIGhhdmUgYSBkaXJlY3QgZm9ybWF0LiBVc2UgaXQuICov DQotCWlmIChkaXJlY3RfZm10ICYmICFzZF9mbXQpDQotCQlzZF9mbXQgPSBkaXJlY3RfZm10Ow0K LQ0KLQkvKiBTdGVwIDU6IGlmIHdlIGFyZSB1c2luZyBhIGRpcmVjdCBmb3JtYXQsIHdlIG5lZWQg dG8gcGFja2FnZQ0KLQkgKiBldmVyeXRoaW5nIGFzIDggYml0IGRhdGEgYW5kIGp1c3QgZHVtcCBp dA0KLQkgKi8NCi0JaWYgKHNkX2ZtdCA9PSBkaXJlY3RfZm10KQ0KLQkJcmxwX2RtYV9kaXJlY3Rf ZHVtcCA9IHRydWU7DQotDQotCS8qIFN0ZXAgNjogV2UgaGF2ZSBubyBmb3JtYXQuIFRoaXMgY2Fu IGhhcHBlbiBpZiB0aGUgdXNlcnNwYWNlDQotCSAqIHJlcXVlc3RzIHNvbWUgd2VpcmQvaW52YWxp ZCBmb3JtYXQuDQotCSAqIEluIHRoaXMgY2FzZSwgZGVmYXVsdCB0byB3aGF0ZXZlciB3ZSBoYXZl DQotCSAqLw0KLQlpZiAoIXNkX2ZtdCAmJiAhZGlyZWN0X2ZtdCkgew0KLQkJc2RfZm10ID0gaXNj LT51c2VyX2Zvcm1hdHNbaXNjLT5udW1fdXNlcl9mb3JtYXRzIC0gMV07DQotCQl2NGwyX2RiZygx LCBkZWJ1ZywgJmlzYy0+djRsMl9kZXYsDQotCQkJICJTZW5zb3Igbm90IHN1cHBvcnRpbmcgJS40 cywgdXNpbmcgJS40c1xuIiwNCi0JCQkgKGNoYXIgKikmcGl4Zm10LT5waXhlbGZvcm1hdCwgKGNo YXIgKikmc2RfZm10LT5mb3VyY2MpOw0KLQl9DQotDQotCWlmICghc2RfZm10KSB7DQotCQlyZXQg PSAtRUlOVkFMOw0KLQkJZ290byBpc2NfdHJ5X2ZtdF9lcnI7DQotCX0NCi0NCi0JLyogU3RlcCA3 OiBQcmludCBvdXQgd2hhdCB3ZSBkZWNpZGVkIGZvciBkZWJ1Z2dpbmcgKi8NCi0JdjRsMl9kYmco MSwgZGVidWcsICZpc2MtPnY0bDJfZGV2LA0KLQkJICJQcmVmZXJyaW5nIHRvIGhhdmUgc2Vuc29y IHVzaW5nIGZvcm1hdCAlLjRzXG4iLA0KLQkJIChjaGFyICopJnNkX2ZtdC0+Zm91cmNjKTsNCi0N Ci0JLyogU3RlcCA4OiBhdCB0aGlzIG1vbWVudCB3ZSBkZWNpZGVkIHdoaWNoIGZvcm1hdCB0aGUg c3ViZGV2IHdpbGwgdXNlICovDQotCWlzYy0+dHJ5X2NvbmZpZy5zZF9mb3JtYXQgPSBzZF9mbXQ7 DQotDQotCS8qIExpbWl0IHRvIEF0bWVsIElTQyBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgKi8NCi0J aWYgKHBpeGZtdC0+d2lkdGggPiBJU0NfTUFYX1NVUFBPUlRfV0lEVEgpDQotCQlwaXhmbXQtPndp ZHRoID0gSVNDX01BWF9TVVBQT1JUX1dJRFRIOw0KLQlpZiAocGl4Zm10LT5oZWlnaHQgPiBJU0Nf TUFYX1NVUFBPUlRfSEVJR0hUKQ0KLQkJcGl4Zm10LT5oZWlnaHQgPSBJU0NfTUFYX1NVUFBPUlRf SEVJR0hUOw0KLQ0KLQkvKg0KLQkgKiBUaGUgbWJ1cyBmb3JtYXQgaXMgdGhlIG9uZSB0aGUgc3Vi ZGV2IG91dHB1dHMuDQotCSAqIFRoZSBwaXhlbHMgd2lsbCBiZSB0cmFuc2ZlcnJlZCBpbiB0aGlz IGZvcm1hdCBTZW5zb3IgLT4gSVNDDQotCSAqLw0KLQltYnVzX2NvZGUgPSBzZF9mbXQtPm1idXNf Y29kZTsNCi0NCi0JLyoNCi0JICogVmFsaWRhdGUgZm9ybWF0cy4gSWYgdGhlIHJlcXVpcmVkIGZv cm1hdCBpcyBub3QgT0ssIGRlZmF1bHQgdG8gcmF3Lg0KLQkgKi8NCi0NCi0JaXNjLT50cnlfY29u ZmlnLmZvdXJjYyA9IHBpeGZtdC0+cGl4ZWxmb3JtYXQ7DQotDQotCWlmIChpc2NfdHJ5X3ZhbGlk YXRlX2Zvcm1hdHMoaXNjKSkgew0KLQkJcGl4Zm10LT5waXhlbGZvcm1hdCA9IGlzYy0+dHJ5X2Nv bmZpZy5mb3VyY2MgPSBzZF9mbXQtPmZvdXJjYzsNCi0JCS8qIFJlLXRyeSB0byB2YWxpZGF0ZSB0 aGUgbmV3IGZvcm1hdCAqLw0KLQkJcmV0ID0gaXNjX3RyeV92YWxpZGF0ZV9mb3JtYXRzKGlzYyk7 DQotCQlpZiAocmV0KQ0KLQkJCWdvdG8gaXNjX3RyeV9mbXRfZXJyOw0KLQl9DQotDQotCXJldCA9 IGlzY190cnlfY29uZmlndXJlX3JscF9kbWEoaXNjLCBybHBfZG1hX2RpcmVjdF9kdW1wKTsNCi0J aWYgKHJldCkNCi0JCWdvdG8gaXNjX3RyeV9mbXRfZXJyOw0KLQ0KLQlyZXQgPSBpc2NfdHJ5X2Nv bmZpZ3VyZV9waXBlbGluZShpc2MpOw0KLQlpZiAocmV0KQ0KLQkJZ290byBpc2NfdHJ5X2ZtdF9l cnI7DQotDQotCXY0bDJfZmlsbF9tYnVzX2Zvcm1hdCgmZm9ybWF0LmZvcm1hdCwgcGl4Zm10LCBt YnVzX2NvZGUpOw0KLQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKGlzYy0+Y3VycmVudF9zdWJkZXYt PnNkLCBwYWQsIHNldF9mbXQsDQotCQkJICAgICAgICZwYWRfY2ZnLCAmZm9ybWF0KTsNCi0JaWYg KHJldCA8IDApDQotCQlnb3RvIGlzY190cnlfZm10X3N1YmRldl9lcnI7DQotDQotCXY0bDJfZmls bF9waXhfZm9ybWF0KHBpeGZtdCwgJmZvcm1hdC5mb3JtYXQpOw0KLQ0KLQlwaXhmbXQtPmZpZWxk ID0gVjRMMl9GSUVMRF9OT05FOw0KLQlwaXhmbXQtPmJ5dGVzcGVybGluZSA9IChwaXhmbXQtPndp ZHRoICogaXNjLT50cnlfY29uZmlnLmJwcCkgPj4gMzsNCi0JcGl4Zm10LT5zaXplaW1hZ2UgPSBw aXhmbXQtPmJ5dGVzcGVybGluZSAqIHBpeGZtdC0+aGVpZ2h0Ow0KLQ0KLQlpZiAoY29kZSkNCi0J CSpjb2RlID0gbWJ1c19jb2RlOw0KLQ0KLQlyZXR1cm4gMDsNCi0NCi1pc2NfdHJ5X2ZtdF9lcnI6 DQotCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LCAiQ291bGQgbm90IGZpbmQgYW55IHBvc3NpYmxl IGZvcm1hdCBmb3IgYSB3b3JraW5nIHBpcGVsaW5lXG4iKTsNCi1pc2NfdHJ5X2ZtdF9zdWJkZXZf ZXJyOg0KLQltZW1zZXQoJmlzYy0+dHJ5X2NvbmZpZywgMCwgc2l6ZW9mKGlzYy0+dHJ5X2NvbmZp ZykpOw0KLQ0KLQlyZXR1cm4gcmV0Ow0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY19zZXRfZm10KHN0 cnVjdCBpc2NfZGV2aWNlICppc2MsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikNCi17DQotCXN0cnVj dCB2NGwyX3N1YmRldl9mb3JtYXQgZm9ybWF0ID0gew0KLQkJLndoaWNoID0gVjRMMl9TVUJERVZf Rk9STUFUX0FDVElWRSwNCi0JfTsNCi0JdTMyIG1idXNfY29kZSA9IDA7DQotCWludCByZXQ7DQot DQotCXJldCA9IGlzY190cnlfZm10KGlzYywgZiwgJm1idXNfY29kZSk7DQotCWlmIChyZXQpDQot CQlyZXR1cm4gcmV0Ow0KLQ0KLQl2NGwyX2ZpbGxfbWJ1c19mb3JtYXQoJmZvcm1hdC5mb3JtYXQs ICZmLT5mbXQucGl4LCBtYnVzX2NvZGUpOw0KLQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKGlzYy0+ Y3VycmVudF9zdWJkZXYtPnNkLCBwYWQsDQotCQkJICAgICAgIHNldF9mbXQsIE5VTEwsICZmb3Jt YXQpOw0KLQlpZiAocmV0IDwgMCkNCi0JCXJldHVybiByZXQ7DQotDQotCWlzYy0+Zm10ID0gKmY7 DQotDQotCWlmIChpc2MtPnRyeV9jb25maWcuc2RfZm9ybWF0ICYmIGlzYy0+Y29uZmlnLnNkX2Zv cm1hdCAmJg0KLQkgICAgaXNjLT50cnlfY29uZmlnLnNkX2Zvcm1hdCAhPSBpc2MtPmNvbmZpZy5z ZF9mb3JtYXQpIHsNCi0JCWlzYy0+Y3RybHMuaGlzdF9zdGF0ID0gSElTVF9JTklUOw0KLQkJaXNj X3Jlc2V0X2F3Yl9jdHJscyhpc2MpOw0KLQl9DQotCS8qIG1ha2UgdGhlIHRyeSBjb25maWd1cmF0 aW9uIGFjdGl2ZSAqLw0KLQlpc2MtPmNvbmZpZyA9IGlzYy0+dHJ5X2NvbmZpZzsNCi0NCi0JdjRs Ml9kYmcoMSwgZGVidWcsICZpc2MtPnY0bDJfZGV2LCAiTmV3IElTQyBjb25maWd1cmF0aW9uIGlu IHBsYWNlXG4iKTsNCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX3NfZm10 X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsDQotCQkJICAgICAgc3RydWN0 IHY0bDJfZm9ybWF0ICpmKQ0KLXsNCi0Jc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHZpZGVvX2Ry dmRhdGEoZmlsZSk7DQotDQotCWlmICh2YjJfaXNfc3RyZWFtaW5nKCZpc2MtPnZiMl92aWRxKSkN Ci0JCXJldHVybiAtRUJVU1k7DQotDQotCXJldHVybiBpc2Nfc2V0X2ZtdChpc2MsIGYpOw0KLX0N Ci0NCi1zdGF0aWMgaW50IGlzY190cnlfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZv aWQgKnByaXYsDQotCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikNCi17DQotCXN0cnVjdCBpc2Nf ZGV2aWNlICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KLQ0KLQlyZXR1cm4gaXNjX3RyeV9m bXQoaXNjLCBmLCBOVUxMKTsNCi19DQotDQotc3RhdGljIGludCBpc2NfZW51bV9pbnB1dChzdHJ1 Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwNCi0JCQkgICBzdHJ1Y3QgdjRsMl9pbnB1dCAqaW5w KQ0KLXsNCi0JaWYgKGlucC0+aW5kZXggIT0gMCkNCi0JCXJldHVybiAtRUlOVkFMOw0KLQ0KLQlp bnAtPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOw0KLQlpbnAtPnN0ZCA9IDA7DQotCXN0 cnNjcHkoaW5wLT5uYW1lLCAiQ2FtZXJhIiwgc2l6ZW9mKGlucC0+bmFtZSkpOw0KLQ0KLQlyZXR1 cm4gMDsNCi19DQotDQotc3RhdGljIGludCBpc2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwg dm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQ0KLXsNCi0JKmkgPSAwOw0KLQ0KLQlyZXR1cm4g MDsNCi19DQotDQotc3RhdGljIGludCBpc2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9p ZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpDQotew0KLQlpZiAoaSA+IDApDQotCQlyZXR1cm4gLUVJ TlZBTDsNCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX2dfcGFybShzdHJ1 Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKmEpDQotew0K LQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCi0NCi0JcmV0 dXJuIHY0bDJfZ19wYXJtX2NhcCh2aWRlb19kZXZkYXRhKGZpbGUpLCBpc2MtPmN1cnJlbnRfc3Vi ZGV2LT5zZCwgYSk7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX3NfcGFybShzdHJ1Y3QgZmlsZSAq ZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKmEpDQotew0KLQlzdHJ1Y3Qg aXNjX2RldmljZSAqaXNjID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsNCi0NCi0JcmV0dXJuIHY0bDJf c19wYXJtX2NhcCh2aWRlb19kZXZkYXRhKGZpbGUpLCBpc2MtPmN1cnJlbnRfc3ViZGV2LT5zZCwg YSk7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX2VudW1fZnJhbWVzaXplcyhzdHJ1Y3QgZmlsZSAq ZmlsZSwgdm9pZCAqZmgsDQotCQkJICAgICAgIHN0cnVjdCB2NGwyX2ZybXNpemVlbnVtICpmc2l6 ZSkNCi17DQotCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0K LQlzdHJ1Y3QgdjRsMl9zdWJkZXZfZnJhbWVfc2l6ZV9lbnVtIGZzZSA9IHsNCi0JCS5pbmRleCA9 IGZzaXplLT5pbmRleCwNCi0JCS53aGljaCA9IFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkUsDQot CX07DQotCWludCByZXQgPSAtRUlOVkFMOw0KLQlpbnQgaTsNCi0NCi0JZm9yIChpID0gMDsgaSA8 IGlzYy0+bnVtX3VzZXJfZm9ybWF0czsgaSsrKQ0KLQkJaWYgKGlzYy0+dXNlcl9mb3JtYXRzW2ld LT5mb3VyY2MgPT0gZnNpemUtPnBpeGVsX2Zvcm1hdCkNCi0JCQlyZXQgPSAwOw0KLQ0KLQlmb3Ig KGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb250cm9sbGVyX2Zvcm1hdHMpOyBpKyspDQotCQlpZiAo Y29udHJvbGxlcl9mb3JtYXRzW2ldLmZvdXJjYyA9PSBmc2l6ZS0+cGl4ZWxfZm9ybWF0KQ0KLQkJ CXJldCA9IDA7DQotDQotCWlmIChyZXQpDQotCQlyZXR1cm4gcmV0Ow0KLQ0KLQlyZXQgPSB2NGwy X3N1YmRldl9jYWxsKGlzYy0+Y3VycmVudF9zdWJkZXYtPnNkLCBwYWQsIGVudW1fZnJhbWVfc2l6 ZSwNCi0JCQkgICAgICAgTlVMTCwgJmZzZSk7DQotCWlmIChyZXQpDQotCQlyZXR1cm4gcmV0Ow0K LQ0KLQlmc2UuY29kZSA9IGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlOw0KLQ0KLQlm c2l6ZS0+dHlwZSA9IFY0TDJfRlJNU0laRV9UWVBFX0RJU0NSRVRFOw0KLQlmc2l6ZS0+ZGlzY3Jl dGUud2lkdGggPSBmc2UubWF4X3dpZHRoOw0KLQlmc2l6ZS0+ZGlzY3JldGUuaGVpZ2h0ID0gZnNl Lm1heF9oZWlnaHQ7DQotDQotCXJldHVybiAwOw0KLX0NCi0NCi1zdGF0aWMgaW50IGlzY19lbnVt X2ZyYW1laW50ZXJ2YWxzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwNCi0JCQkJICAgIHN0 cnVjdCB2NGwyX2ZybWl2YWxlbnVtICpmaXZhbCkNCi17DQotCXN0cnVjdCBpc2NfZGV2aWNlICpp c2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0KLQlzdHJ1Y3QgdjRsMl9zdWJkZXZfZnJhbWVfaW50 ZXJ2YWxfZW51bSBmaWUgPSB7DQotCQkuaW5kZXggPSBmaXZhbC0+aW5kZXgsDQotCQkud2lkdGgg PSBmaXZhbC0+d2lkdGgsDQotCQkuaGVpZ2h0ID0gZml2YWwtPmhlaWdodCwNCi0JCS53aGljaCA9 IFY0TDJfU1VCREVWX0ZPUk1BVF9BQ1RJVkUsDQotCX07DQotCWludCByZXQgPSAtRUlOVkFMOw0K LQlpbnQgaTsNCi0NCi0JZm9yIChpID0gMDsgaSA8IGlzYy0+bnVtX3VzZXJfZm9ybWF0czsgaSsr KQ0KLQkJaWYgKGlzYy0+dXNlcl9mb3JtYXRzW2ldLT5mb3VyY2MgPT0gZml2YWwtPnBpeGVsX2Zv cm1hdCkNCi0JCQlyZXQgPSAwOw0KLQ0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjb250 cm9sbGVyX2Zvcm1hdHMpOyBpKyspDQotCQlpZiAoY29udHJvbGxlcl9mb3JtYXRzW2ldLmZvdXJj YyA9PSBmaXZhbC0+cGl4ZWxfZm9ybWF0KQ0KLQkJCXJldCA9IDA7DQotDQotCWlmIChyZXQpDQot CQlyZXR1cm4gcmV0Ow0KLQ0KLQlyZXQgPSB2NGwyX3N1YmRldl9jYWxsKGlzYy0+Y3VycmVudF9z dWJkZXYtPnNkLCBwYWQsDQotCQkJICAgICAgIGVudW1fZnJhbWVfaW50ZXJ2YWwsIE5VTEwsICZm aWUpOw0KLQlpZiAocmV0KQ0KLQkJcmV0dXJuIHJldDsNCi0NCi0JZmllLmNvZGUgPSBpc2MtPmNv bmZpZy5zZF9mb3JtYXQtPm1idXNfY29kZTsNCi0JZml2YWwtPnR5cGUgPSBWNEwyX0ZSTUlWQUxf VFlQRV9ESVNDUkVURTsNCi0JZml2YWwtPmRpc2NyZXRlID0gZmllLmludGVydmFsOw0KLQ0KLQly ZXR1cm4gMDsNCi19DQotDQotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyBpc2Nf aW9jdGxfb3BzID0gew0KLQkudmlkaW9jX3F1ZXJ5Y2FwCQk9IGlzY19xdWVyeWNhcCwNCi0JLnZp ZGlvY19lbnVtX2ZtdF92aWRfY2FwCT0gaXNjX2VudW1fZm10X3ZpZF9jYXAsDQotCS52aWRpb2Nf Z19mbXRfdmlkX2NhcAkJPSBpc2NfZ19mbXRfdmlkX2NhcCwNCi0JLnZpZGlvY19zX2ZtdF92aWRf Y2FwCQk9IGlzY19zX2ZtdF92aWRfY2FwLA0KLQkudmlkaW9jX3RyeV9mbXRfdmlkX2NhcAkJPSBp c2NfdHJ5X2ZtdF92aWRfY2FwLA0KLQ0KLQkudmlkaW9jX2VudW1faW5wdXQJCT0gaXNjX2VudW1f aW5wdXQsDQotCS52aWRpb2NfZ19pbnB1dAkJCT0gaXNjX2dfaW5wdXQsDQotCS52aWRpb2Nfc19p bnB1dAkJCT0gaXNjX3NfaW5wdXQsDQotDQotCS52aWRpb2NfcmVxYnVmcwkJCT0gdmIyX2lvY3Rs X3JlcWJ1ZnMsDQotCS52aWRpb2NfcXVlcnlidWYJCT0gdmIyX2lvY3RsX3F1ZXJ5YnVmLA0KLQku dmlkaW9jX3FidWYJCQk9IHZiMl9pb2N0bF9xYnVmLA0KLQkudmlkaW9jX2V4cGJ1ZgkJCT0gdmIy X2lvY3RsX2V4cGJ1ZiwNCi0JLnZpZGlvY19kcWJ1ZgkJCT0gdmIyX2lvY3RsX2RxYnVmLA0KLQku dmlkaW9jX2NyZWF0ZV9idWZzCQk9IHZiMl9pb2N0bF9jcmVhdGVfYnVmcywNCi0JLnZpZGlvY19w cmVwYXJlX2J1ZgkJPSB2YjJfaW9jdGxfcHJlcGFyZV9idWYsDQotCS52aWRpb2Nfc3RyZWFtb24J CT0gdmIyX2lvY3RsX3N0cmVhbW9uLA0KLQkudmlkaW9jX3N0cmVhbW9mZgkJPSB2YjJfaW9jdGxf c3RyZWFtb2ZmLA0KLQ0KLQkudmlkaW9jX2dfcGFybQkJCT0gaXNjX2dfcGFybSwNCi0JLnZpZGlv Y19zX3Bhcm0JCQk9IGlzY19zX3Bhcm0sDQotCS52aWRpb2NfZW51bV9mcmFtZXNpemVzCQk9IGlz Y19lbnVtX2ZyYW1lc2l6ZXMsDQotCS52aWRpb2NfZW51bV9mcmFtZWludGVydmFscwk9IGlzY19l bnVtX2ZyYW1laW50ZXJ2YWxzLA0KLQ0KLQkudmlkaW9jX2xvZ19zdGF0dXMJCT0gdjRsMl9jdHJs X2xvZ19zdGF0dXMsDQotCS52aWRpb2Nfc3Vic2NyaWJlX2V2ZW50CQk9IHY0bDJfY3RybF9zdWJz Y3JpYmVfZXZlbnQsDQotCS52aWRpb2NfdW5zdWJzY3JpYmVfZXZlbnQJPSB2NGwyX2V2ZW50X3Vu c3Vic2NyaWJlLA0KLX07DQotDQotc3RhdGljIGludCBpc2Nfb3BlbihzdHJ1Y3QgZmlsZSAqZmls ZSkNCi17DQotCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOw0K LQlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaXNjLT5jdXJyZW50X3N1YmRldi0+c2Q7DQotCWlu dCByZXQ7DQotDQotCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmlzYy0+bG9jaykpDQot CQlyZXR1cm4gLUVSRVNUQVJUU1lTOw0KLQ0KLQlyZXQgPSB2NGwyX2ZoX29wZW4oZmlsZSk7DQot CWlmIChyZXQgPCAwKQ0KLQkJZ290byB1bmxvY2s7DQotDQotCWlmICghdjRsMl9maF9pc19zaW5n dWxhcl9maWxlKGZpbGUpKQ0KLQkJZ290byB1bmxvY2s7DQotDQotCXJldCA9IHY0bDJfc3ViZGV2 X2NhbGwoc2QsIGNvcmUsIHNfcG93ZXIsIDEpOw0KLQlpZiAocmV0IDwgMCAmJiByZXQgIT0gLUVO T0lPQ1RMQ01EKSB7DQotCQl2NGwyX2ZoX3JlbGVhc2UoZmlsZSk7DQotCQlnb3RvIHVubG9jazsN Ci0JfQ0KLQ0KLQlyZXQgPSBpc2Nfc2V0X2ZtdChpc2MsICZpc2MtPmZtdCk7DQotCWlmIChyZXQp IHsNCi0JCXY0bDJfc3ViZGV2X2NhbGwoc2QsIGNvcmUsIHNfcG93ZXIsIDApOw0KLQkJdjRsMl9m aF9yZWxlYXNlKGZpbGUpOw0KLQl9DQotDQotdW5sb2NrOg0KLQltdXRleF91bmxvY2soJmlzYy0+ bG9jayk7DQotCXJldHVybiByZXQ7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX3JlbGVhc2Uoc3Ry dWN0IGZpbGUgKmZpbGUpDQotew0KLQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gdmlkZW9fZHJ2 ZGF0YShmaWxlKTsNCi0Jc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGlzYy0+Y3VycmVudF9zdWJk ZXYtPnNkOw0KLQlib29sIGZoX3Npbmd1bGFyOw0KLQlpbnQgcmV0Ow0KLQ0KLQltdXRleF9sb2Nr KCZpc2MtPmxvY2spOw0KLQ0KLQlmaF9zaW5ndWxhciA9IHY0bDJfZmhfaXNfc2luZ3VsYXJfZmls ZShmaWxlKTsNCi0NCi0JcmV0ID0gX3ZiMl9mb3BfcmVsZWFzZShmaWxlLCBOVUxMKTsNCi0NCi0J aWYgKGZoX3Npbmd1bGFyKQ0KLQkJdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgc19wb3dlciwg MCk7DQotDQotCW11dGV4X3VubG9jaygmaXNjLT5sb2NrKTsNCi0NCi0JcmV0dXJuIHJldDsNCi19 DQotDQotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBpc2NfZm9wcyA9 IHsNCi0JLm93bmVyCQk9IFRISVNfTU9EVUxFLA0KLQkub3BlbgkJPSBpc2Nfb3BlbiwNCi0JLnJl bGVhc2UJPSBpc2NfcmVsZWFzZSwNCi0JLnVubG9ja2VkX2lvY3RsCT0gdmlkZW9faW9jdGwyLA0K LQkucmVhZAkJPSB2YjJfZm9wX3JlYWQsDQotCS5tbWFwCQk9IHZiMl9mb3BfbW1hcCwNCi0JLnBv bGwJCT0gdmIyX2ZvcF9wb2xsLA0KLX07DQotDQotc3RhdGljIGlycXJldHVybl90IGlzY19pbnRl cnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQ0KLXsNCi0Jc3RydWN0IGlzY19kZXZpY2UgKmlz YyA9IChzdHJ1Y3QgaXNjX2RldmljZSAqKWRldl9pZDsNCi0Jc3RydWN0IHJlZ21hcCAqcmVnbWFw ID0gaXNjLT5yZWdtYXA7DQotCXUzMiBpc2NfaW50c3IsIGlzY19pbnRtYXNrLCBwZW5kaW5nOw0K LQlpcnFyZXR1cm5fdCByZXQgPSBJUlFfTk9ORTsNCi0NCi0JcmVnbWFwX3JlYWQocmVnbWFwLCBJ U0NfSU5UU1IsICZpc2NfaW50c3IpOw0KLQlyZWdtYXBfcmVhZChyZWdtYXAsIElTQ19JTlRNQVNL LCAmaXNjX2ludG1hc2spOw0KLQ0KLQlwZW5kaW5nID0gaXNjX2ludHNyICYgaXNjX2ludG1hc2s7 DQotDQotCWlmIChsaWtlbHkocGVuZGluZyAmIElTQ19JTlRfRERPTkUpKSB7DQotCQlzcGluX2xv Y2soJmlzYy0+ZG1hX3F1ZXVlX2xvY2spOw0KLQkJaWYgKGlzYy0+Y3VyX2ZybSkgew0KLQkJCXN0 cnVjdCB2YjJfdjRsMl9idWZmZXIgKnZidWYgPSAmaXNjLT5jdXJfZnJtLT52YjsNCi0JCQlzdHJ1 Y3QgdmIyX2J1ZmZlciAqdmIgPSAmdmJ1Zi0+dmIyX2J1ZjsNCi0NCi0JCQl2Yi0+dGltZXN0YW1w ID0ga3RpbWVfZ2V0X25zKCk7DQotCQkJdmJ1Zi0+c2VxdWVuY2UgPSBpc2MtPnNlcXVlbmNlKys7 DQotCQkJdmIyX2J1ZmZlcl9kb25lKHZiLCBWQjJfQlVGX1NUQVRFX0RPTkUpOw0KLQkJCWlzYy0+ Y3VyX2ZybSA9IE5VTEw7DQotCQl9DQotDQotCQlpZiAoIWxpc3RfZW1wdHkoJmlzYy0+ZG1hX3F1 ZXVlKSAmJiAhaXNjLT5zdG9wKSB7DQotCQkJaXNjLT5jdXJfZnJtID0gbGlzdF9maXJzdF9lbnRy eSgmaXNjLT5kbWFfcXVldWUsDQotCQkJCQkJICAgICBzdHJ1Y3QgaXNjX2J1ZmZlciwgbGlzdCk7 DQotCQkJbGlzdF9kZWwoJmlzYy0+Y3VyX2ZybS0+bGlzdCk7DQotDQotCQkJaXNjX3N0YXJ0X2Rt YShpc2MpOw0KLQkJfQ0KLQ0KLQkJaWYgKGlzYy0+c3RvcCkNCi0JCQljb21wbGV0ZSgmaXNjLT5j b21wKTsNCi0NCi0JCXJldCA9IElSUV9IQU5ETEVEOw0KLQkJc3Bpbl91bmxvY2soJmlzYy0+ZG1h X3F1ZXVlX2xvY2spOw0KLQl9DQotDQotCWlmIChwZW5kaW5nICYgSVNDX0lOVF9ISVNET05FKSB7 DQotCQlzY2hlZHVsZV93b3JrKCZpc2MtPmF3Yl93b3JrKTsNCi0JCXJldCA9IElSUV9IQU5ETEVE Ow0KLQl9DQotDQotCXJldHVybiByZXQ7DQotfQ0KLQ0KLXN0YXRpYyB2b2lkIGlzY19oaXN0X2Nv dW50KHN0cnVjdCBpc2NfZGV2aWNlICppc2MsIHUzMiAqbWluLCB1MzIgKm1heCkNCi17DQotCXN0 cnVjdCByZWdtYXAgKnJlZ21hcCA9IGlzYy0+cmVnbWFwOw0KLQlzdHJ1Y3QgaXNjX2N0cmxzICpj dHJscyA9ICZpc2MtPmN0cmxzOw0KLQl1MzIgKmhpc3RfY291bnQgPSAmY3RybHMtPmhpc3RfY291 bnRbY3RybHMtPmhpc3RfaWRdOw0KLQl1MzIgKmhpc3RfZW50cnkgPSAmY3RybHMtPmhpc3RfZW50 cnlbMF07DQotCXUzMiBpOw0KLQ0KLQkqbWluID0gMDsNCi0JKm1heCA9IEhJU1RfRU5UUklFUzsN Ci0NCi0JcmVnbWFwX2J1bGtfcmVhZChyZWdtYXAsIElTQ19ISVNfRU5UUlksIGhpc3RfZW50cnks IEhJU1RfRU5UUklFUyk7DQotDQotCSpoaXN0X2NvdW50ID0gMDsNCi0JLyoNCi0JICogd2UgZGVs aWJlcmF0ZWx5IGlnbm9yZSB0aGUgZW5kIG9mIHRoZSBoaXN0b2dyYW0sDQotCSAqIHRoZSBtb3N0 IHdoaXRlIHBpeGVscw0KLQkgKi8NCi0JZm9yIChpID0gMTsgaSA8IEhJU1RfRU5UUklFUzsgaSsr KSB7DQotCQlpZiAoKmhpc3RfZW50cnkgJiYgISptaW4pDQotCQkJKm1pbiA9IGk7DQotCQlpZiAo Kmhpc3RfZW50cnkpDQotCQkJKm1heCA9IGk7DQotCQkqaGlzdF9jb3VudCArPSBpICogKCpoaXN0 X2VudHJ5KyspOw0KLQl9DQotDQotCWlmICghKm1pbikNCi0JCSptaW4gPSAxOw0KLX0NCi0NCi1z dGF0aWMgdm9pZCBpc2Nfd2JfdXBkYXRlKHN0cnVjdCBpc2NfY3RybHMgKmN0cmxzKQ0KLXsNCi0J dTMyICpoaXN0X2NvdW50ID0gJmN0cmxzLT5oaXN0X2NvdW50WzBdOw0KLQl1MzIgYywgb2Zmc2V0 WzRdOw0KLQl1NjQgYXZnID0gMDsNCi0JLyogV2UgY29tcHV0ZSB0d28gZ2FpbnMsIHN0cmV0Y2gg Z2FpbiBhbmQgZ3JleSB3b3JsZCBnYWluICovDQotCXUzMiBzX2dhaW5bNF0sIGd3X2dhaW5bNF07 DQotDQotCS8qDQotCSAqIEFjY29yZGluZyB0byBHcmV5IFdvcmxkLCB3ZSBuZWVkIHRvIHNldCBn YWlucyBmb3IgUi9CIHRvIG5vcm1hbGl6ZQ0KLQkgKiB0aGVtIHRvd2FyZHMgdGhlIGdyZWVuIGNo YW5uZWwuDQotCSAqIFRodXMgd2Ugd2FudCB0byBrZWVwIEdyZWVuIGFzIGZpeGVkIGFuZCBhZGp1 c3Qgb25seSBSZWQvQmx1ZQ0KLQkgKiBDb21wdXRlIHRoZSBhdmVyYWdlIG9mIHRoZSBib3RoIGdy ZWVuIGNoYW5uZWxzIGZpcnN0DQotCSAqLw0KLQlhdmcgPSAodTY0KWhpc3RfY291bnRbSVNDX0hJ U19DRkdfTU9ERV9HUl0gKw0KLQkJKHU2NCloaXN0X2NvdW50W0lTQ19ISVNfQ0ZHX01PREVfR0Jd Ow0KLQlhdmcgPj49IDE7DQotDQotCS8qIEdyZWVuIGhpc3RvZ3JhbSBpcyBudWxsLCBub3RoaW5n IHRvIGRvICovDQotCWlmICghYXZnKQ0KLQkJcmV0dXJuOw0KLQ0KLQlmb3IgKGMgPSBJU0NfSElT X0NGR19NT0RFX0dSOyBjIDw9IElTQ19ISVNfQ0ZHX01PREVfQjsgYysrKSB7DQotCQkvKg0KLQkJ ICogdGhlIGNvbG9yIG9mZnNldCBpcyB0aGUgbWluaW11bSB2YWx1ZSBvZiB0aGUgaGlzdG9ncmFt Lg0KLQkJICogd2Ugc3RyZXRjaCB0aGlzIGNvbG9yIHRvIHRoZSBmdWxsIHJhbmdlIGJ5IHN1YnN0 cmFjdGluZw0KLQkJICogdGhpcyB2YWx1ZSBmcm9tIHRoZSBjb2xvciBjb21wb25lbnQuDQotCQkg Ki8NCi0JCW9mZnNldFtjXSA9IGN0cmxzLT5oaXN0X21pbm1heFtjXVtISVNUX01JTl9JTkRFWF07 DQotCQkvKg0KLQkJICogVGhlIG9mZnNldCBpcyBhbHdheXMgYXQgbGVhc3QgMS4gSWYgdGhlIG9m ZnNldCBpcyAxLCB3ZSBkbw0KLQkJICogbm90IG5lZWQgdG8gYWRqdXN0IGl0LCBzbyBvdXIgcmVz dWx0IG11c3QgYmUgemVyby4NCi0JCSAqIHRoZSBvZmZzZXQgaXMgY29tcHV0ZWQgaW4gYSBoaXN0 b2dyYW0gb24gOSBiaXRzICgwLi41MTIpDQotCQkgKiBidXQgdGhlIG9mZnNldCBpbiByZWdpc3Rl ciBpcyBiYXNlZCBvbg0KLQkJICogMTIgYml0cyBwaXBlbGluZSAoMC4uNDA5NikuDQotCQkgKiB3 ZSBuZWVkIHRvIHNoaWZ0IHdpdGggdGhlIDMgYml0cyB0aGF0IHRoZSBoaXN0b2dyYW0gaXMNCi0J CSAqIGlnbm9yaW5nDQotCQkgKi8NCi0JCWN0cmxzLT5vZmZzZXRbY10gPSAob2Zmc2V0W2NdIC0g MSkgPDwgMzsNCi0NCi0JCS8qIHRoZSBvZmZzZXQgaXMgdGhlbiB0YWtlbiBhbmQgY29udmVydGVk IHRvIDIncyBjb21wbGVtZW50cyAqLw0KLQkJaWYgKCFjdHJscy0+b2Zmc2V0W2NdKQ0KLQkJCWN0 cmxzLT5vZmZzZXRbY10gPSBJU0NfV0JfT19aRVJPX1ZBTDsNCi0NCi0JCS8qDQotCQkgKiB0aGUg c3RyZXRjaCBnYWluIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgaGlzdG9ncmFtIGJpbnMNCi0JCSAq IGRpdmlkZWQgYnkgdGhlIGFjdHVhbCByYW5nZSBvZiBjb2xvciBjb21wb25lbnQgKE1heCAtIE1p bikNCi0JCSAqIElmIHdlIGNvbXB1dGUgZ2FpbiBsaWtlIHRoaXMsIHRoZSBhY3R1YWwgY29sb3Ig Y29tcG9uZW50DQotCQkgKiB3aWxsIGJlIHN0cmV0Y2hlZCB0byB0aGUgZnVsbCBoaXN0b2dyYW0u DQotCQkgKiBXZSBuZWVkIHRvIHNoaWZ0IDkgYml0cyBmb3IgcHJlY2lzaW9uLCB3ZSBoYXZlIDkg Yml0cyBmb3INCi0JCSAqIGRlY2ltYWxzDQotCQkgKi8NCi0JCXNfZ2FpbltjXSA9IChISVNUX0VO VFJJRVMgPDwgOSkgLw0KLQkJCShjdHJscy0+aGlzdF9taW5tYXhbY11bSElTVF9NQVhfSU5ERVhd IC0NCi0JCQljdHJscy0+aGlzdF9taW5tYXhbY11bSElTVF9NSU5fSU5ERVhdICsgMSk7DQotDQot CQkvKg0KLQkJICogTm93IHdlIGhhdmUgdG8gY29tcHV0ZSB0aGUgZ2FpbiB3LnIudC4gdGhlIGF2 ZXJhZ2UuDQotCQkgKiBBZGQvbG9zZSBnYWluIHRvIHRoZSBjb21wb25lbnQgdG93YXJkcyB0aGUg YXZlcmFnZS4NCi0JCSAqIElmIGl0IGhhcHBlbnMgdGhhdCB0aGUgY29tcG9uZW50IGlzIHplcm8s IHVzZSB0aGUNCi0JCSAqIGZpeGVkIHBvaW50IHZhbHVlIDogMS4wIGdhaW4uDQotCQkgKi8NCi0J CWlmIChoaXN0X2NvdW50W2NdKQ0KLQkJCWd3X2dhaW5bY10gPSBkaXZfdTY0KGF2ZyA8PCA5LCBo aXN0X2NvdW50W2NdKTsNCi0JCWVsc2UNCi0JCQlnd19nYWluW2NdID0gMSA8PCA5Ow0KLQ0KLQkJ LyogbXVsdGlwbHkgYm90aCBnYWlucyBhbmQgYWRqdXN0IGZvciBkZWNpbWFscyAqLw0KLQkJY3Ry bHMtPmdhaW5bY10gPSBzX2dhaW5bY10gKiBnd19nYWluW2NdOw0KLQkJY3RybHMtPmdhaW5bY10g Pj49IDk7DQotCX0NCi19DQotDQotc3RhdGljIHZvaWQgaXNjX2F3Yl93b3JrKHN0cnVjdCB3b3Jr X3N0cnVjdCAqdykNCi17DQotCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPQ0KLQkJY29udGFpbmVy X29mKHcsIHN0cnVjdCBpc2NfZGV2aWNlLCBhd2Jfd29yayk7DQotCXN0cnVjdCByZWdtYXAgKnJl Z21hcCA9IGlzYy0+cmVnbWFwOw0KLQlzdHJ1Y3QgaXNjX2N0cmxzICpjdHJscyA9ICZpc2MtPmN0 cmxzOw0KLQl1MzIgaGlzdF9pZCA9IGN0cmxzLT5oaXN0X2lkOw0KLQl1MzIgYmF5c2VsOw0KLQl1 bnNpZ25lZCBsb25nIGZsYWdzOw0KLQl1MzIgbWluLCBtYXg7DQotDQotCS8qIHN0cmVhbWluZyBp cyBub3QgYWN0aXZlIGFueW1vcmUgKi8NCi0JaWYgKGlzYy0+c3RvcCkNCi0JCXJldHVybjsNCi0N Ci0JaWYgKGN0cmxzLT5oaXN0X3N0YXQgIT0gSElTVF9FTkFCTEVEKQ0KLQkJcmV0dXJuOw0KLQ0K LQlpc2NfaGlzdF9jb3VudChpc2MsICZtaW4sICZtYXgpOw0KLQljdHJscy0+aGlzdF9taW5tYXhb aGlzdF9pZF1bSElTVF9NSU5fSU5ERVhdID0gbWluOw0KLQljdHJscy0+aGlzdF9taW5tYXhbaGlz dF9pZF1bSElTVF9NQVhfSU5ERVhdID0gbWF4Ow0KLQ0KLQlpZiAoaGlzdF9pZCAhPSBJU0NfSElT X0NGR19NT0RFX0IpIHsNCi0JCWhpc3RfaWQrKzsNCi0JfSBlbHNlIHsNCi0JCWlzY193Yl91cGRh dGUoY3RybHMpOw0KLQkJaGlzdF9pZCA9IElTQ19ISVNfQ0ZHX01PREVfR1I7DQotCX0NCi0NCi0J Y3RybHMtPmhpc3RfaWQgPSBoaXN0X2lkOw0KLQliYXlzZWwgPSBpc2MtPmNvbmZpZy5zZF9mb3Jt YXQtPmNmYV9iYXljZmcgPDwgSVNDX0hJU19DRkdfQkFZU0VMX1NISUZUOw0KLQ0KLQkvKiBpZiBu byBtb3JlIGF1dG8gd2hpdGUgYmFsYW5jZSwgcmVzZXQgY29udHJvbHMuICovDQotCWlmIChjdHJs cy0+YXdiID09IElTQ19XQl9OT05FKQ0KLQkJaXNjX3Jlc2V0X2F3Yl9jdHJscyhpc2MpOw0KLQ0K LQlwbV9ydW50aW1lX2dldF9zeW5jKGlzYy0+ZGV2KTsNCi0NCi0JLyoNCi0JICogb25seSB1cGRh dGUgaWYgd2UgaGF2ZSBhbGwgdGhlIHJlcXVpcmVkIGhpc3RvZ3JhbXMgYW5kIGNvbnRyb2xzDQot CSAqIGlmIGF3YiBoYXMgYmVlbiBkaXNhYmxlZCwgd2UgbmVlZCB0byByZXNldCByZWdpc3RlcnMg YXMgd2VsbC4NCi0JICovDQotCWlmIChoaXN0X2lkID09IElTQ19ISVNfQ0ZHX01PREVfR1IgfHwg Y3RybHMtPmF3YiA9PSBJU0NfV0JfTk9ORSkgew0KLQkJLyoNCi0JCSAqIEl0IG1heSBoYXBwZW4g dGhhdCBETUEgRG9uZSBJUlEgd2lsbCB0cmlnZ2VyIHdoaWxlIHdlIGFyZQ0KLQkJICogdXBkYXRp bmcgd2hpdGUgYmFsYW5jZSByZWdpc3RlcnMgaGVyZS4NCi0JCSAqIEluIHRoYXQgY2FzZSwgb25s eSBwYXJ0cyBvZiB0aGUgY29udHJvbHMgaGF2ZSBiZWVuIHVwZGF0ZWQuDQotCQkgKiBXZSBjYW4g YXZvaWQgdGhhdCBieSBsb2NraW5nIHRoZSBzZWN0aW9uLg0KLQkJICovDQotCQlzcGluX2xvY2tf aXJxc2F2ZSgmaXNjLT5hd2JfbG9jaywgZmxhZ3MpOw0KLQkJaXNjX3VwZGF0ZV9hd2JfY3RybHMo aXNjKTsNCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlzYy0+YXdiX2xvY2ssIGZsYWdzKTsN Ci0NCi0JCS8qDQotCQkgKiBpZiB3ZSBhcmUgZG9pbmcganVzdCB0aGUgb25lIHRpbWUgd2hpdGUg YmFsYW5jZSBhZGp1c3RtZW50LA0KLQkJICogd2UgYXJlIGJhc2ljYWxseSBkb25lLg0KLQkJICov DQotCQlpZiAoY3RybHMtPmF3YiA9PSBJU0NfV0JfT05FVElNRSkgew0KLQkJCXY0bDJfaW5mbygm aXNjLT52NGwyX2RldiwNCi0JCQkJICAiQ29tcGxldGVkIG9uZSB0aW1lIHdoaXRlLWJhbGFuY2Ug YWRqdXN0bWVudC5cbiIpOw0KLQkJCWN0cmxzLT5hd2IgPSBJU0NfV0JfTk9ORTsNCi0JCX0NCi0J fQ0KLQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0NfSElTX0NGRywgaGlzdF9pZCB8IGJheXNlbCB8 IElTQ19ISVNfQ0ZHX1JBUik7DQotCWlzY191cGRhdGVfcHJvZmlsZShpc2MpOw0KLQkvKiBpZiBh d2IgaGFzIGJlZW4gZGlzYWJsZWQsIHdlIGRvbid0IG5lZWQgdG8gc3RhcnQgYW5vdGhlciBoaXN0 b2dyYW0gKi8NCi0JaWYgKGN0cmxzLT5hd2IpDQotCQlyZWdtYXBfd3JpdGUocmVnbWFwLCBJU0Nf Q1RSTEVOLCBJU0NfQ1RSTF9ISVNSRVEpOw0KLQ0KLQlwbV9ydW50aW1lX3B1dF9zeW5jKGlzYy0+ ZGV2KTsNCi19DQotDQotc3RhdGljIGludCBpc2Nfc19jdHJsKHN0cnVjdCB2NGwyX2N0cmwgKmN0 cmwpDQotew0KLQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gY29udGFpbmVyX29mKGN0cmwtPmhh bmRsZXIsDQotCQkJCQkgICAgIHN0cnVjdCBpc2NfZGV2aWNlLCBjdHJscy5oYW5kbGVyKTsNCi0J c3RydWN0IGlzY19jdHJscyAqY3RybHMgPSAmaXNjLT5jdHJsczsNCi0NCi0JaWYgKGN0cmwtPmZs YWdzICYgVjRMMl9DVFJMX0ZMQUdfSU5BQ1RJVkUpDQotCQlyZXR1cm4gMDsNCi0NCi0Jc3dpdGNo IChjdHJsLT5pZCkgew0KLQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6DQotCQljdHJscy0+YnJp Z2h0bmVzcyA9IGN0cmwtPnZhbCAmIElTQ19DQkNfQlJJR0hUX01BU0s7DQotCQlicmVhazsNCi0J Y2FzZSBWNEwyX0NJRF9DT05UUkFTVDoNCi0JCWN0cmxzLT5jb250cmFzdCA9IGN0cmwtPnZhbCAm IElTQ19DQkNfQ09OVFJBU1RfTUFTSzsNCi0JCWJyZWFrOw0KLQljYXNlIFY0TDJfQ0lEX0dBTU1B Og0KLQkJY3RybHMtPmdhbW1hX2luZGV4ID0gY3RybC0+dmFsOw0KLQkJYnJlYWs7DQotCWNhc2Ug VjRMMl9DSURfQVVUT19XSElURV9CQUxBTkNFOg0KLQkJaWYgKGN0cmwtPnZhbCA9PSAxKQ0KLQkJ CWN0cmxzLT5hd2IgPSBJU0NfV0JfQVVUTzsNCi0JCWVsc2UNCi0JCQljdHJscy0+YXdiID0gSVND X1dCX05PTkU7DQotDQotCQkvKiB3ZSBkaWQgbm90IGNvbmZpZ3VyZSBJU0MgeWV0ICovDQotCQlp ZiAoIWlzYy0+Y29uZmlnLnNkX2Zvcm1hdCkNCi0JCQlicmVhazsNCi0NCi0JCWlmIChjdHJscy0+ aGlzdF9zdGF0ICE9IEhJU1RfRU5BQkxFRCkNCi0JCQlpc2NfcmVzZXRfYXdiX2N0cmxzKGlzYyk7 DQotDQotCQlpZiAoaXNjLT5jdHJscy5hd2IgPT0gSVNDX1dCX0FVVE8gJiYNCi0JCSAgICB2YjJf aXNfc3RyZWFtaW5nKCZpc2MtPnZiMl92aWRxKSAmJg0KLQkJICAgIElTQ19JU19GT1JNQVRfUkFX KGlzYy0+Y29uZmlnLnNkX2Zvcm1hdC0+bWJ1c19jb2RlKSkNCi0JCQlpc2Nfc2V0X2hpc3RvZ3Jh bShpc2MsIHRydWUpOw0KLQ0KLQkJYnJlYWs7DQotCWNhc2UgVjRMMl9DSURfRE9fV0hJVEVfQkFM QU5DRToNCi0JCS8qIGlmIEFXQiBpcyBlbmFibGVkLCBkbyBub3RoaW5nICovDQotCQlpZiAoY3Ry bHMtPmF3YiA9PSBJU0NfV0JfQVVUTykNCi0JCQlyZXR1cm4gMDsNCi0NCi0JCWN0cmxzLT5hd2Ig PSBJU0NfV0JfT05FVElNRTsNCi0JCWlzY19zZXRfaGlzdG9ncmFtKGlzYywgdHJ1ZSk7DQotCQl2 NGwyX2RiZygxLCBkZWJ1ZywgJmlzYy0+djRsMl9kZXYsDQotCQkJICJPbmUgdGltZSB3aGl0ZS1i YWxhbmNlIHN0YXJ0ZWQuXG4iKTsNCi0JCWJyZWFrOw0KLQlkZWZhdWx0Og0KLQkJcmV0dXJuIC1F SU5WQUw7DQotCX0NCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0YXRpYyBjb25zdCBzdHJ1Y3Qg djRsMl9jdHJsX29wcyBpc2NfY3RybF9vcHMgPSB7DQotCS5zX2N0cmwJPSBpc2Nfc19jdHJsLA0K LX07DQotDQotc3RhdGljIGludCBpc2NfY3RybF9pbml0KHN0cnVjdCBpc2NfZGV2aWNlICppc2Mp DQotew0KLQljb25zdCBzdHJ1Y3QgdjRsMl9jdHJsX29wcyAqb3BzID0gJmlzY19jdHJsX29wczsN Ci0Jc3RydWN0IGlzY19jdHJscyAqY3RybHMgPSAmaXNjLT5jdHJsczsNCi0Jc3RydWN0IHY0bDJf Y3RybF9oYW5kbGVyICpoZGwgPSAmY3RybHMtPmhhbmRsZXI7DQotCWludCByZXQ7DQotDQotCWN0 cmxzLT5oaXN0X3N0YXQgPSBISVNUX0lOSVQ7DQotCWlzY19yZXNldF9hd2JfY3RybHMoaXNjKTsN Ci0NCi0JcmV0ID0gdjRsMl9jdHJsX2hhbmRsZXJfaW5pdChoZGwsIDUpOw0KLQlpZiAocmV0IDwg MCkNCi0JCXJldHVybiByZXQ7DQotDQotCWN0cmxzLT5icmlnaHRuZXNzID0gMDsNCi0JY3RybHMt PmNvbnRyYXN0ID0gMjU2Ow0KLQ0KLQl2NGwyX2N0cmxfbmV3X3N0ZChoZGwsIG9wcywgVjRMMl9D SURfQlJJR0hUTkVTUywgLTEwMjQsIDEwMjMsIDEsIDApOw0KLQl2NGwyX2N0cmxfbmV3X3N0ZCho ZGwsIG9wcywgVjRMMl9DSURfQ09OVFJBU1QsIC0yMDQ4LCAyMDQ3LCAxLCAyNTYpOw0KLQl2NGwy X2N0cmxfbmV3X3N0ZChoZGwsIG9wcywgVjRMMl9DSURfR0FNTUEsIDAsIEdBTU1BX01BWCwgMSwg Mik7DQotCXY0bDJfY3RybF9uZXdfc3RkKGhkbCwgb3BzLCBWNEwyX0NJRF9BVVRPX1dISVRFX0JB TEFOQ0UsIDAsIDEsIDEsIDEpOw0KLQ0KLQkvKiBkb193aGl0ZV9iYWxhbmNlIGlzIGEgYnV0dG9u LCBzbyBtaW4sbWF4LHN0ZXAsZGVmYXVsdCBhcmUgaWdub3JlZCAqLw0KLQlpc2MtPmRvX3diX2N0 cmwgPSB2NGwyX2N0cmxfbmV3X3N0ZChoZGwsIG9wcywgVjRMMl9DSURfRE9fV0hJVEVfQkFMQU5D RSwNCi0JCQkJCSAgICAwLCAwLCAwLCAwKTsNCi0NCi0JdjRsMl9jdHJsX2FjdGl2YXRlKGlzYy0+ ZG9fd2JfY3RybCwgZmFsc2UpOw0KLQ0KLQl2NGwyX2N0cmxfaGFuZGxlcl9zZXR1cChoZGwpOw0K LQ0KLQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGljIGludCBpc2NfYXN5bmNfYm91bmQoc3RydWN0 IHY0bDJfYXN5bmNfbm90aWZpZXIgKm5vdGlmaWVyLA0KLQkJCSAgICBzdHJ1Y3QgdjRsMl9zdWJk ZXYgKnN1YmRldiwNCi0JCQkgICAgc3RydWN0IHY0bDJfYXN5bmNfc3ViZGV2ICphc2QpDQotew0K LQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gY29udGFpbmVyX29mKG5vdGlmaWVyLT52NGwyX2Rl diwNCi0JCQkJCSAgICAgIHN0cnVjdCBpc2NfZGV2aWNlLCB2NGwyX2Rldik7DQotCXN0cnVjdCBp c2Nfc3ViZGV2X2VudGl0eSAqc3ViZGV2X2VudGl0eSA9DQotCQljb250YWluZXJfb2Yobm90aWZp ZXIsIHN0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eSwgbm90aWZpZXIpOw0KLQ0KLQlpZiAodmlkZW9f aXNfcmVnaXN0ZXJlZCgmaXNjLT52aWRlb19kZXYpKSB7DQotCQl2NGwyX2VycigmaXNjLT52NGwy X2RldiwgIm9ubHkgc3VwcG9ydHMgb25lIHN1Yi1kZXZpY2UuXG4iKTsNCi0JCXJldHVybiAtRUJV U1k7DQotCX0NCi0NCi0Jc3ViZGV2X2VudGl0eS0+c2QgPSBzdWJkZXY7DQotDQotCXJldHVybiAw Ow0KLX0NCi0NCi1zdGF0aWMgdm9pZCBpc2NfYXN5bmNfdW5iaW5kKHN0cnVjdCB2NGwyX2FzeW5j X25vdGlmaWVyICpub3RpZmllciwNCi0JCQkgICAgICBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnN1YmRl diwNCi0JCQkgICAgICBzdHJ1Y3QgdjRsMl9hc3luY19zdWJkZXYgKmFzZCkNCi17DQotCXN0cnVj dCBpc2NfZGV2aWNlICppc2MgPSBjb250YWluZXJfb2Yobm90aWZpZXItPnY0bDJfZGV2LA0KLQkJ CQkJICAgICAgc3RydWN0IGlzY19kZXZpY2UsIHY0bDJfZGV2KTsNCi0JY2FuY2VsX3dvcmtfc3lu YygmaXNjLT5hd2Jfd29yayk7DQotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZpc2MtPnZpZGVv X2Rldik7DQotCXY0bDJfY3RybF9oYW5kbGVyX2ZyZWUoJmlzYy0+Y3RybHMuaGFuZGxlcik7DQot fQ0KLQ0KLXN0YXRpYyBzdHJ1Y3QgaXNjX2Zvcm1hdCAqZmluZF9mb3JtYXRfYnlfY29kZSh1bnNp Z25lZCBpbnQgY29kZSwgaW50ICppbmRleCkNCi17DQotCXN0cnVjdCBpc2NfZm9ybWF0ICpmbXQg PSAmZm9ybWF0c19saXN0WzBdOw0KLQl1bnNpZ25lZCBpbnQgaTsNCi0NCi0JZm9yIChpID0gMDsg aSA8IEFSUkFZX1NJWkUoZm9ybWF0c19saXN0KTsgaSsrKSB7DQotCQlpZiAoZm10LT5tYnVzX2Nv ZGUgPT0gY29kZSkgew0KLQkJCSppbmRleCA9IGk7DQotCQkJcmV0dXJuIGZtdDsNCi0JCX0NCi0N Ci0JCWZtdCsrOw0KLQl9DQotDQotCXJldHVybiBOVUxMOw0KLX0NCi0NCi1zdGF0aWMgaW50IGlz Y19mb3JtYXRzX2luaXQoc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCi17DQotCXN0cnVjdCBpc2Nf Zm9ybWF0ICpmbXQ7DQotCXN0cnVjdCB2NGwyX3N1YmRldiAqc3ViZGV2ID0gaXNjLT5jdXJyZW50 X3N1YmRldi0+c2Q7DQotCXVuc2lnbmVkIGludCBudW1fZm10cywgaSwgajsNCi0JdTMyIGxpc3Rf c2l6ZSA9IEFSUkFZX1NJWkUoZm9ybWF0c19saXN0KTsNCi0Jc3RydWN0IHY0bDJfc3ViZGV2X21i dXNfY29kZV9lbnVtIG1idXNfY29kZSA9IHsNCi0JCS53aGljaCA9IFY0TDJfU1VCREVWX0ZPUk1B VF9BQ1RJVkUsDQotCX07DQotDQotCW51bV9mbXRzID0gMDsNCi0Jd2hpbGUgKCF2NGwyX3N1YmRl dl9jYWxsKHN1YmRldiwgcGFkLCBlbnVtX21idXNfY29kZSwNCi0JICAgICAgIE5VTEwsICZtYnVz X2NvZGUpKSB7DQotCQltYnVzX2NvZGUuaW5kZXgrKzsNCi0NCi0JCWZtdCA9IGZpbmRfZm9ybWF0 X2J5X2NvZGUobWJ1c19jb2RlLmNvZGUsICZpKTsNCi0JCWlmICghZm10KSB7DQotCQkJdjRsMl93 YXJuKCZpc2MtPnY0bDJfZGV2LCAiTWJ1cyBjb2RlICV4IG5vdCBzdXBwb3J0ZWRcbiIsDQotCQkJ CSAgbWJ1c19jb2RlLmNvZGUpOw0KLQkJCWNvbnRpbnVlOw0KLQkJfQ0KLQ0KLQkJZm10LT5zZF9z dXBwb3J0ID0gdHJ1ZTsNCi0JCW51bV9mbXRzKys7DQotCX0NCi0NCi0JaWYgKCFudW1fZm10cykN Ci0JCXJldHVybiAtRU5YSU87DQotDQotCWlzYy0+bnVtX3VzZXJfZm9ybWF0cyA9IG51bV9mbXRz Ow0KLQlpc2MtPnVzZXJfZm9ybWF0cyA9IGRldm1fa2NhbGxvYyhpc2MtPmRldiwNCi0JCQkJCSBu dW1fZm10cywgc2l6ZW9mKCppc2MtPnVzZXJfZm9ybWF0cyksDQotCQkJCQkgR0ZQX0tFUk5FTCk7 DQotCWlmICghaXNjLT51c2VyX2Zvcm1hdHMpDQotCQlyZXR1cm4gLUVOT01FTTsNCi0NCi0JZm10 ID0gJmZvcm1hdHNfbGlzdFswXTsNCi0JZm9yIChpID0gMCwgaiA9IDA7IGkgPCBsaXN0X3NpemU7 IGkrKykgew0KLQkJaWYgKGZtdC0+c2Rfc3VwcG9ydCkNCi0JCQlpc2MtPnVzZXJfZm9ybWF0c1tq KytdID0gZm10Ow0KLQkJZm10Kys7DQotCX0NCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0YXRp YyBpbnQgaXNjX3NldF9kZWZhdWx0X2ZtdChzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0KLXsNCi0J c3RydWN0IHY0bDJfZm9ybWF0IGYgPSB7DQotCQkudHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9f Q0FQVFVSRSwNCi0JCS5mbXQucGl4ID0gew0KLQkJCS53aWR0aAkJPSBWR0FfV0lEVEgsDQotCQkJ LmhlaWdodAkJPSBWR0FfSEVJR0hULA0KLQkJCS5maWVsZAkJPSBWNEwyX0ZJRUxEX05PTkUsDQot CQkJLnBpeGVsZm9ybWF0CT0gaXNjLT51c2VyX2Zvcm1hdHNbMF0tPmZvdXJjYywNCi0JCX0sDQot CX07DQotCWludCByZXQ7DQotDQotCXJldCA9IGlzY190cnlfZm10KGlzYywgJmYsIE5VTEwpOw0K LQlpZiAocmV0KQ0KLQkJcmV0dXJuIHJldDsNCi0NCi0JaXNjLT5mbXQgPSBmOw0KLQlyZXR1cm4g MDsNCi19DQotDQotc3RhdGljIGludCBpc2NfYXN5bmNfY29tcGxldGUoc3RydWN0IHY0bDJfYXN5 bmNfbm90aWZpZXIgKm5vdGlmaWVyKQ0KLXsNCi0Jc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IGNv bnRhaW5lcl9vZihub3RpZmllci0+djRsMl9kZXYsDQotCQkJCQkgICAgICBzdHJ1Y3QgaXNjX2Rl dmljZSwgdjRsMl9kZXYpOw0KLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gJmlzYy0+dmlk ZW9fZGV2Ow0KLQlzdHJ1Y3QgdmIyX3F1ZXVlICpxID0gJmlzYy0+dmIyX3ZpZHE7DQotCWludCBy ZXQ7DQotDQotCUlOSVRfV09SSygmaXNjLT5hd2Jfd29yaywgaXNjX2F3Yl93b3JrKTsNCi0NCi0J cmV0ID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2X25vZGVzKCZpc2MtPnY0bDJfZGV2KTsN Ci0JaWYgKHJldCA8IDApIHsNCi0JCXY0bDJfZXJyKCZpc2MtPnY0bDJfZGV2LCAiRmFpbGVkIHRv IHJlZ2lzdGVyIHN1YmRldiBub2Rlc1xuIik7DQotCQlyZXR1cm4gcmV0Ow0KLQl9DQotDQotCWlz Yy0+Y3VycmVudF9zdWJkZXYgPSBjb250YWluZXJfb2Yobm90aWZpZXIsDQotCQkJCQkgICBzdHJ1 Y3QgaXNjX3N1YmRldl9lbnRpdHksIG5vdGlmaWVyKTsNCi0JbXV0ZXhfaW5pdCgmaXNjLT5sb2Nr KTsNCi0JaW5pdF9jb21wbGV0aW9uKCZpc2MtPmNvbXApOw0KLQ0KLQkvKiBJbml0aWFsaXplIHZp ZGVvYnVmMiBxdWV1ZSAqLw0KLQlxLT50eXBlCQkJPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRV UkU7DQotCXEtPmlvX21vZGVzCQk9IFZCMl9NTUFQIHwgVkIyX0RNQUJVRiB8IFZCMl9SRUFEOw0K LQlxLT5kcnZfcHJpdgkJPSBpc2M7DQotCXEtPmJ1Zl9zdHJ1Y3Rfc2l6ZQk9IHNpemVvZihzdHJ1 Y3QgaXNjX2J1ZmZlcik7DQotCXEtPm9wcwkJCT0gJmlzY192YjJfb3BzOw0KLQlxLT5tZW1fb3Bz CQk9ICZ2YjJfZG1hX2NvbnRpZ19tZW1vcHM7DQotCXEtPnRpbWVzdGFtcF9mbGFncwk9IFY0TDJf QlVGX0ZMQUdfVElNRVNUQU1QX01PTk9UT05JQzsNCi0JcS0+bG9jawkJCT0gJmlzYy0+bG9jazsN Ci0JcS0+bWluX2J1ZmZlcnNfbmVlZGVkCT0gMTsNCi0JcS0+ZGV2CQkJPSBpc2MtPmRldjsNCi0N Ci0JcmV0ID0gdmIyX3F1ZXVlX2luaXQocSk7DQotCWlmIChyZXQgPCAwKSB7DQotCQl2NGwyX2Vy cigmaXNjLT52NGwyX2RldiwNCi0JCQkgInZiMl9xdWV1ZV9pbml0KCkgZmFpbGVkOiAlZFxuIiwg cmV0KTsNCi0JCXJldHVybiByZXQ7DQotCX0NCi0NCi0JLyogSW5pdCB2aWRlbyBkbWEgcXVldWVz ICovDQotCUlOSVRfTElTVF9IRUFEKCZpc2MtPmRtYV9xdWV1ZSk7DQotCXNwaW5fbG9ja19pbml0 KCZpc2MtPmRtYV9xdWV1ZV9sb2NrKTsNCi0Jc3Bpbl9sb2NrX2luaXQoJmlzYy0+YXdiX2xvY2sp Ow0KLQ0KLQlyZXQgPSBpc2NfZm9ybWF0c19pbml0KGlzYyk7DQotCWlmIChyZXQgPCAwKSB7DQot CQl2NGwyX2VycigmaXNjLT52NGwyX2RldiwNCi0JCQkgIkluaXQgZm9ybWF0IGZhaWxlZDogJWRc biIsIHJldCk7DQotCQlyZXR1cm4gcmV0Ow0KLQl9DQotDQotCXJldCA9IGlzY19zZXRfZGVmYXVs dF9mbXQoaXNjKTsNCi0JaWYgKHJldCkgew0KLQkJdjRsMl9lcnIoJmlzYy0+djRsMl9kZXYsICJD b3VsZCBub3Qgc2V0IGRlZmF1bHQgZm9ybWF0XG4iKTsNCi0JCXJldHVybiByZXQ7DQotCX0NCi0N Ci0JcmV0ID0gaXNjX2N0cmxfaW5pdChpc2MpOw0KLQlpZiAocmV0KSB7DQotCQl2NGwyX2Vycigm aXNjLT52NGwyX2RldiwgIkluaXQgaXNjIGN0cm9scyBmYWlsZWQ6ICVkXG4iLCByZXQpOw0KLQkJ cmV0dXJuIHJldDsNCi0JfQ0KLQ0KLQkvKiBSZWdpc3RlciB2aWRlbyBkZXZpY2UgKi8NCi0Jc3Ry c2NweSh2ZGV2LT5uYW1lLCBBVE1FTF9JU0NfTkFNRSwgc2l6ZW9mKHZkZXYtPm5hbWUpKTsNCi0J dmRldi0+cmVsZWFzZQkJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eTsNCi0JdmRldi0+Zm9w cwkJPSAmaXNjX2ZvcHM7DQotCXZkZXYtPmlvY3RsX29wcwkJPSAmaXNjX2lvY3RsX29wczsNCi0J dmRldi0+djRsMl9kZXYJCT0gJmlzYy0+djRsMl9kZXY7DQotCXZkZXYtPnZmbF9kaXIJCT0gVkZM X0RJUl9SWDsNCi0JdmRldi0+cXVldWUJCT0gcTsNCi0JdmRldi0+bG9jawkJPSAmaXNjLT5sb2Nr Ow0KLQl2ZGV2LT5jdHJsX2hhbmRsZXIJPSAmaXNjLT5jdHJscy5oYW5kbGVyOw0KLQl2ZGV2LT5k ZXZpY2VfY2Fwcwk9IFY0TDJfQ0FQX1NUUkVBTUlORyB8IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkU7 DQotCXZpZGVvX3NldF9kcnZkYXRhKHZkZXYsIGlzYyk7DQotDQotCXJldCA9IHZpZGVvX3JlZ2lz dGVyX2RldmljZSh2ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCAtMSk7DQotCWlmIChyZXQgPCAwKSB7 DQotCQl2NGwyX2VycigmaXNjLT52NGwyX2RldiwNCi0JCQkgInZpZGVvX3JlZ2lzdGVyX2Rldmlj ZSBmYWlsZWQ6ICVkXG4iLCByZXQpOw0KLQkJcmV0dXJuIHJldDsNCi0JfQ0KLQ0KLQlyZXR1cm4g MDsNCi19DQotDQotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2FzeW5jX25vdGlmaWVyX29wZXJh dGlvbnMgaXNjX2FzeW5jX29wcyA9IHsNCi0JLmJvdW5kID0gaXNjX2FzeW5jX2JvdW5kLA0KLQku dW5iaW5kID0gaXNjX2FzeW5jX3VuYmluZCwNCi0JLmNvbXBsZXRlID0gaXNjX2FzeW5jX2NvbXBs ZXRlLA0KLX07DQotDQotc3RhdGljIHZvaWQgaXNjX3N1YmRldl9jbGVhbnVwKHN0cnVjdCBpc2Nf ZGV2aWNlICppc2MpDQotew0KLQlzdHJ1Y3QgaXNjX3N1YmRldl9lbnRpdHkgKnN1YmRldl9lbnRp dHk7DQotDQotCWxpc3RfZm9yX2VhY2hfZW50cnkoc3ViZGV2X2VudGl0eSwgJmlzYy0+c3ViZGV2 X2VudGl0aWVzLCBsaXN0KSB7DQotCQl2NGwyX2FzeW5jX25vdGlmaWVyX3VucmVnaXN0ZXIoJnN1 YmRldl9lbnRpdHktPm5vdGlmaWVyKTsNCi0JCXY0bDJfYXN5bmNfbm90aWZpZXJfY2xlYW51cCgm c3ViZGV2X2VudGl0eS0+bm90aWZpZXIpOw0KLQl9DQotDQotCUlOSVRfTElTVF9IRUFEKCZpc2Mt PnN1YmRldl9lbnRpdGllcyk7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgaXNjX3BpcGVsaW5lX2luaXQo c3RydWN0IGlzY19kZXZpY2UgKmlzYykNCi17DQotCXN0cnVjdCBkZXZpY2UgKmRldiA9IGlzYy0+ ZGV2Ow0KLQlzdHJ1Y3QgcmVnbWFwICpyZWdtYXAgPSBpc2MtPnJlZ21hcDsNCi0Jc3RydWN0IHJl Z21hcF9maWVsZCAqcmVnczsNCi0JdW5zaWduZWQgaW50IGk7DQotDQotCS8qIFdCLS0+Q0ZBLS0+ Q0MtLT5HQU0tLT5DU0MtLT5DQkMtLT5TVUI0MjItLT5TVUI0MjAgKi8NCi0JY29uc3Qgc3RydWN0 IHJlZ19maWVsZCByZWdmaWVsZHNbSVNDX1BJUEVfTElORV9OT0RFX05VTV0gPSB7DQotCQlSRUdf RklFTEQoSVNDX1dCX0NUUkwsIDAsIDApLA0KLQkJUkVHX0ZJRUxEKElTQ19DRkFfQ1RSTCwgMCwg MCksDQotCQlSRUdfRklFTEQoSVNDX0NDX0NUUkwsIDAsIDApLA0KLQkJUkVHX0ZJRUxEKElTQ19H QU1fQ1RSTCwgMCwgMCksDQotCQlSRUdfRklFTEQoSVNDX0dBTV9DVFJMLCAxLCAxKSwNCi0JCVJF R19GSUVMRChJU0NfR0FNX0NUUkwsIDIsIDIpLA0KLQkJUkVHX0ZJRUxEKElTQ19HQU1fQ1RSTCwg MywgMyksDQotCQlSRUdfRklFTEQoSVNDX0NTQ19DVFJMLCAwLCAwKSwNCi0JCVJFR19GSUVMRChJ U0NfQ0JDX0NUUkwsIDAsIDApLA0KLQkJUkVHX0ZJRUxEKElTQ19TVUI0MjJfQ1RSTCwgMCwgMCks DQotCQlSRUdfRklFTEQoSVNDX1NVQjQyMF9DVFJMLCAwLCAwKSwNCi0JfTsNCi0NCi0JZm9yIChp ID0gMDsgaSA8IElTQ19QSVBFX0xJTkVfTk9ERV9OVU07IGkrKykgew0KLQkJcmVncyA9IGRldm1f cmVnbWFwX2ZpZWxkX2FsbG9jKGRldiwgcmVnbWFwLCByZWdmaWVsZHNbaV0pOw0KLQkJaWYgKElT X0VSUihyZWdzKSkNCi0JCQlyZXR1cm4gUFRSX0VSUihyZWdzKTsNCi0NCi0JCWlzYy0+cGlwZWxp bmVbaV0gPSAgcmVnczsNCi0JfQ0KLQ0KLQlyZXR1cm4gMDsNCi19DQotDQotc3RhdGljIGludCBp c2NfcGFyc2VfZHQoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKQ0K LXsNCi0Jc3RydWN0IGRldmljZV9ub2RlICpucCA9IGRldi0+b2Zfbm9kZTsNCi0Jc3RydWN0IGRl dmljZV9ub2RlICplcG4gPSBOVUxMLCAqcmVtOw0KLQlzdHJ1Y3QgaXNjX3N1YmRldl9lbnRpdHkg KnN1YmRldl9lbnRpdHk7DQotCXVuc2lnbmVkIGludCBmbGFnczsNCi0JaW50IHJldDsNCi0NCi0J SU5JVF9MSVNUX0hFQUQoJmlzYy0+c3ViZGV2X2VudGl0aWVzKTsNCi0NCi0Jd2hpbGUgKDEpIHsN Ci0JCXN0cnVjdCB2NGwyX2Z3bm9kZV9lbmRwb2ludCB2NGwyX2VwbiA9IHsgLmJ1c190eXBlID0g MCB9Ow0KLQ0KLQkJZXBuID0gb2ZfZ3JhcGhfZ2V0X25leHRfZW5kcG9pbnQobnAsIGVwbik7DQot CQlpZiAoIWVwbikNCi0JCQlyZXR1cm4gMDsNCi0NCi0JCXJlbSA9IG9mX2dyYXBoX2dldF9yZW1v dGVfcG9ydF9wYXJlbnQoZXBuKTsNCi0JCWlmICghcmVtKSB7DQotCQkJZGV2X25vdGljZShkZXYs ICJSZW1vdGUgZGV2aWNlIGF0ICVwT0Ygbm90IGZvdW5kXG4iLA0KLQkJCQkgICBlcG4pOw0KLQkJ CWNvbnRpbnVlOw0KLQkJfQ0KLQ0KLQkJcmV0ID0gdjRsMl9md25vZGVfZW5kcG9pbnRfcGFyc2Uo b2ZfZndub2RlX2hhbmRsZShlcG4pLA0KLQkJCQkJCSAmdjRsMl9lcG4pOw0KLQkJaWYgKHJldCkg ew0KLQkJCW9mX25vZGVfcHV0KHJlbSk7DQotCQkJcmV0ID0gLUVJTlZBTDsNCi0JCQlkZXZfZXJy KGRldiwgIkNvdWxkIG5vdCBwYXJzZSB0aGUgZW5kcG9pbnRcbiIpOw0KLQkJCWJyZWFrOw0KLQkJ fQ0KLQ0KLQkJc3ViZGV2X2VudGl0eSA9IGRldm1fa3phbGxvYyhkZXYsDQotCQkJCQkgIHNpemVv Zigqc3ViZGV2X2VudGl0eSksIEdGUF9LRVJORUwpOw0KLQkJaWYgKCFzdWJkZXZfZW50aXR5KSB7 DQotCQkJb2Zfbm9kZV9wdXQocmVtKTsNCi0JCQlyZXQgPSAtRU5PTUVNOw0KLQkJCWJyZWFrOw0K LQkJfQ0KLQ0KLQkJLyogYXNkIHdpbGwgYmUgZnJlZWQgYnkgdGhlIHN1YnN5c3RlbSBvbmNlIGl0 J3MgYWRkZWQgdG8gdGhlDQotCQkgKiBub3RpZmllciBsaXN0DQotCQkgKi8NCi0JCXN1YmRldl9l bnRpdHktPmFzZCA9IGt6YWxsb2Moc2l6ZW9mKCpzdWJkZXZfZW50aXR5LT5hc2QpLA0KLQkJCQkJ ICAgICBHRlBfS0VSTkVMKTsNCi0JCWlmICghc3ViZGV2X2VudGl0eS0+YXNkKSB7DQotCQkJb2Zf bm9kZV9wdXQocmVtKTsNCi0JCQlyZXQgPSAtRU5PTUVNOw0KLQkJCWJyZWFrOw0KLQkJfQ0KLQ0K LQkJZmxhZ3MgPSB2NGwyX2Vwbi5idXMucGFyYWxsZWwuZmxhZ3M7DQotDQotCQlpZiAoZmxhZ3Mg JiBWNEwyX01CVVNfSFNZTkNfQUNUSVZFX0xPVykNCi0JCQlzdWJkZXZfZW50aXR5LT5wZmVfY2Zn MCA9IElTQ19QRkVfQ0ZHMF9IUE9MX0xPVzsNCi0NCi0JCWlmIChmbGFncyAmIFY0TDJfTUJVU19W U1lOQ19BQ1RJVkVfTE9XKQ0KLQkJCXN1YmRldl9lbnRpdHktPnBmZV9jZmcwIHw9IElTQ19QRkVf Q0ZHMF9WUE9MX0xPVzsNCi0NCi0JCWlmIChmbGFncyAmIFY0TDJfTUJVU19QQ0xLX1NBTVBMRV9G QUxMSU5HKQ0KLQkJCXN1YmRldl9lbnRpdHktPnBmZV9jZmcwIHw9IElTQ19QRkVfQ0ZHMF9QUE9M X0xPVzsNCi0NCi0JCWlmICh2NGwyX2Vwbi5idXNfdHlwZSA9PSBWNEwyX01CVVNfQlQ2NTYpDQot CQkJc3ViZGV2X2VudGl0eS0+cGZlX2NmZzAgfD0gSVNDX1BGRV9DRkcwX0NDSVJfQ1JDIHwNCi0J CQkJCUlTQ19QRkVfQ0ZHMF9DQ0lSNjU2Ow0KLQ0KLQkJc3ViZGV2X2VudGl0eS0+YXNkLT5tYXRj aF90eXBlID0gVjRMMl9BU1lOQ19NQVRDSF9GV05PREU7DQotCQlzdWJkZXZfZW50aXR5LT5hc2Qt Pm1hdGNoLmZ3bm9kZSA9DQotCQkJb2ZfZndub2RlX2hhbmRsZShyZW0pOw0KLQkJbGlzdF9hZGRf dGFpbCgmc3ViZGV2X2VudGl0eS0+bGlzdCwgJmlzYy0+c3ViZGV2X2VudGl0aWVzKTsNCi0JfQ0K LQ0KLQlvZl9ub2RlX3B1dChlcG4pOw0KLQlyZXR1cm4gcmV0Ow0KLX0NCi0NCi0vKiByZWdtYXAg Y29uZmlndXJhdGlvbiAqLw0KLSNkZWZpbmUgQVRNRUxfSVNDX1JFR19NQVggICAgMHhiZmMNCi1z dGF0aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgaXNjX3JlZ21hcF9jb25maWcgPSB7DQot CS5yZWdfYml0cyAgICAgICA9IDMyLA0KLQkucmVnX3N0cmlkZSAgICAgPSA0LA0KLQkudmFsX2Jp dHMgICAgICAgPSAzMiwNCi0JLm1heF9yZWdpc3Rlcgk9IEFUTUVMX0lTQ19SRUdfTUFYLA0KLX07 DQotDQotc3RhdGljIGludCBhdG1lbF9pc2NfcHJvYmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAq cGRldikNCi17DQotCXN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7DQotCXN0cnVjdCBp c2NfZGV2aWNlICppc2M7DQotCXN0cnVjdCByZXNvdXJjZSAqcmVzOw0KLQl2b2lkIF9faW9tZW0g KmlvX2Jhc2U7DQotCXN0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eSAqc3ViZGV2X2VudGl0eTsNCi0J aW50IGlycTsNCi0JaW50IHJldDsNCi0NCi0JaXNjID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9m KCppc2MpLCBHRlBfS0VSTkVMKTsNCi0JaWYgKCFpc2MpDQotCQlyZXR1cm4gLUVOT01FTTsNCi0N Ci0JcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaXNjKTsNCi0JaXNjLT5kZXYgPSBkZXY7DQot DQotCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7 DQotCWlvX2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3VyY2UoZGV2LCByZXMpOw0KLQlpZiAoSVNf RVJSKGlvX2Jhc2UpKQ0KLQkJcmV0dXJuIFBUUl9FUlIoaW9fYmFzZSk7DQotDQotCWlzYy0+cmVn bWFwID0gZGV2bV9yZWdtYXBfaW5pdF9tbWlvKGRldiwgaW9fYmFzZSwgJmlzY19yZWdtYXBfY29u ZmlnKTsNCi0JaWYgKElTX0VSUihpc2MtPnJlZ21hcCkpIHsNCi0JCXJldCA9IFBUUl9FUlIoaXNj LT5yZWdtYXApOw0KLQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gaW5pdCByZWdpc3RlciBtYXA6 ICVkXG4iLCByZXQpOw0KLQkJcmV0dXJuIHJldDsNCi0JfQ0KLQ0KLQlpcnEgPSBwbGF0Zm9ybV9n ZXRfaXJxKHBkZXYsIDApOw0KLQlpZiAoaXJxIDwgMCkgew0KLQkJcmV0ID0gaXJxOw0KLQkJZGV2 X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IGlycTogJWRcbiIsIHJldCk7DQotCQlyZXR1cm4gcmV0 Ow0KLQl9DQotDQotCXJldCA9IGRldm1fcmVxdWVzdF9pcnEoZGV2LCBpcnEsIGlzY19pbnRlcnJ1 cHQsIDAsDQotCQkJICAgICAgIEFUTUVMX0lTQ19OQU1FLCBpc2MpOw0KLQlpZiAocmV0IDwgMCkg ew0KLQkJZGV2X2VycihkZXYsICJjYW4ndCByZWdpc3RlciBJU1IgZm9yIElSUSAldSAocmV0PSVp KVxuIiwNCi0JCQlpcnEsIHJldCk7DQotCQlyZXR1cm4gcmV0Ow0KLQl9DQotDQotCXJldCA9IGlz Y19waXBlbGluZV9pbml0KGlzYyk7DQotCWlmIChyZXQpDQotCQlyZXR1cm4gcmV0Ow0KLQ0KLQlp c2MtPmhjbG9jayA9IGRldm1fY2xrX2dldChkZXYsICJoY2xvY2siKTsNCi0JaWYgKElTX0VSUihp c2MtPmhjbG9jaykpIHsNCi0JCXJldCA9IFBUUl9FUlIoaXNjLT5oY2xvY2spOw0KLQkJZGV2X2Vy cihkZXYsICJmYWlsZWQgdG8gZ2V0IGhjbG9jazogJWRcbiIsIHJldCk7DQotCQlyZXR1cm4gcmV0 Ow0KLQl9DQotDQotCXJldCA9IGNsa19wcmVwYXJlX2VuYWJsZShpc2MtPmhjbG9jayk7DQotCWlm IChyZXQpIHsNCi0JCWRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSBoY2xvY2s6ICVkXG4i LCByZXQpOw0KLQkJcmV0dXJuIHJldDsNCi0JfQ0KLQ0KLQlyZXQgPSBpc2NfY2xrX2luaXQoaXNj KTsNCi0JaWYgKHJldCkgew0KLQkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gaW5pdCBpc2MgY2xv Y2s6ICVkXG4iLCByZXQpOw0KLQkJZ290byB1bnByZXBhcmVfaGNsazsNCi0JfQ0KLQ0KLQlpc2Mt PmlzcGNrID0gaXNjLT5pc2NfY2xrc1tJU0NfSVNQQ0tdLmNsazsNCi0NCi0JcmV0ID0gY2xrX3By ZXBhcmVfZW5hYmxlKGlzYy0+aXNwY2spOw0KLQlpZiAocmV0KSB7DQotCQlkZXZfZXJyKGRldiwg ImZhaWxlZCB0byBlbmFibGUgaXNwY2s6ICVkXG4iLCByZXQpOw0KLQkJZ290byB1bnByZXBhcmVf aGNsazsNCi0JfQ0KLQ0KLQkvKiBpc3BjayBzaG91bGQgYmUgZ3JlYXRlciBvciBlcXVhbCB0byBo Y2xvY2sgKi8NCi0JcmV0ID0gY2xrX3NldF9yYXRlKGlzYy0+aXNwY2ssIGNsa19nZXRfcmF0ZShp c2MtPmhjbG9jaykpOw0KLQlpZiAocmV0KSB7DQotCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBz ZXQgaXNwY2sgcmF0ZTogJWRcbiIsIHJldCk7DQotCQlnb3RvIHVucHJlcGFyZV9jbGs7DQotCX0N Ci0NCi0JcmV0ID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoZGV2LCAmaXNjLT52NGwyX2Rldik7DQot CWlmIChyZXQpIHsNCi0JCWRldl9lcnIoZGV2LCAidW5hYmxlIHRvIHJlZ2lzdGVyIHY0bDIgZGV2 aWNlLlxuIik7DQotCQlnb3RvIHVucHJlcGFyZV9jbGs7DQotCX0NCi0NCi0JcmV0ID0gaXNjX3Bh cnNlX2R0KGRldiwgaXNjKTsNCi0JaWYgKHJldCkgew0KLQkJZGV2X2VycihkZXYsICJmYWlsIHRv IHBhcnNlIGRldmljZSB0cmVlXG4iKTsNCi0JCWdvdG8gdW5yZWdpc3Rlcl92NGwyX2RldmljZTsN Ci0JfQ0KLQ0KLQlpZiAobGlzdF9lbXB0eSgmaXNjLT5zdWJkZXZfZW50aXRpZXMpKSB7DQotCQlk ZXZfZXJyKGRldiwgIm5vIHN1YmRldiBmb3VuZFxuIik7DQotCQlyZXQgPSAtRU5PREVWOw0KLQkJ Z290byB1bnJlZ2lzdGVyX3Y0bDJfZGV2aWNlOw0KLQl9DQotDQotCWxpc3RfZm9yX2VhY2hfZW50 cnkoc3ViZGV2X2VudGl0eSwgJmlzYy0+c3ViZGV2X2VudGl0aWVzLCBsaXN0KSB7DQotCQl2NGwy X2FzeW5jX25vdGlmaWVyX2luaXQoJnN1YmRldl9lbnRpdHktPm5vdGlmaWVyKTsNCi0NCi0JCXJl dCA9IHY0bDJfYXN5bmNfbm90aWZpZXJfYWRkX3N1YmRldigmc3ViZGV2X2VudGl0eS0+bm90aWZp ZXIsDQotCQkJCQkJICAgICBzdWJkZXZfZW50aXR5LT5hc2QpOw0KLQkJaWYgKHJldCkgew0KLQkJ CWZ3bm9kZV9oYW5kbGVfcHV0KHN1YmRldl9lbnRpdHktPmFzZC0+bWF0Y2guZndub2RlKTsNCi0J CQlrZnJlZShzdWJkZXZfZW50aXR5LT5hc2QpOw0KLQkJCWdvdG8gY2xlYW51cF9zdWJkZXY7DQot CQl9DQotDQotCQlzdWJkZXZfZW50aXR5LT5ub3RpZmllci5vcHMgPSAmaXNjX2FzeW5jX29wczsN Ci0NCi0JCXJldCA9IHY0bDJfYXN5bmNfbm90aWZpZXJfcmVnaXN0ZXIoJmlzYy0+djRsMl9kZXYs DQotCQkJCQkJICAgJnN1YmRldl9lbnRpdHktPm5vdGlmaWVyKTsNCi0JCWlmIChyZXQpIHsNCi0J CQlkZXZfZXJyKGRldiwgImZhaWwgdG8gcmVnaXN0ZXIgYXN5bmMgbm90aWZpZXJcbiIpOw0KLQkJ CWdvdG8gY2xlYW51cF9zdWJkZXY7DQotCQl9DQotDQotCQlpZiAodmlkZW9faXNfcmVnaXN0ZXJl ZCgmaXNjLT52aWRlb19kZXYpKQ0KLQkJCWJyZWFrOw0KLQl9DQotDQotCXBtX3J1bnRpbWVfc2V0 X2FjdGl2ZShkZXYpOw0KLQlwbV9ydW50aW1lX2VuYWJsZShkZXYpOw0KLQlwbV9yZXF1ZXN0X2lk bGUoZGV2KTsNCi0NCi0JcmV0dXJuIDA7DQotDQotY2xlYW51cF9zdWJkZXY6DQotCWlzY19zdWJk ZXZfY2xlYW51cChpc2MpOw0KLQ0KLXVucmVnaXN0ZXJfdjRsMl9kZXZpY2U6DQotCXY0bDJfZGV2 aWNlX3VucmVnaXN0ZXIoJmlzYy0+djRsMl9kZXYpOw0KLQ0KLXVucHJlcGFyZV9jbGs6DQotCWNs a19kaXNhYmxlX3VucHJlcGFyZShpc2MtPmlzcGNrKTsNCi11bnByZXBhcmVfaGNsazoNCi0JY2xr X2Rpc2FibGVfdW5wcmVwYXJlKGlzYy0+aGNsb2NrKTsNCi0NCi0JaXNjX2Nsa19jbGVhbnVwKGlz Yyk7DQotDQotCXJldHVybiByZXQ7DQotfQ0KLQ0KLXN0YXRpYyBpbnQgYXRtZWxfaXNjX3JlbW92 ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KLXsNCi0Jc3RydWN0IGlzY19kZXZpY2Ug KmlzYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOw0KLQ0KLQlwbV9ydW50aW1lX2Rpc2Fi bGUoJnBkZXYtPmRldik7DQotCWNsa19kaXNhYmxlX3VucHJlcGFyZShpc2MtPmlzcGNrKTsNCi0J Y2xrX2Rpc2FibGVfdW5wcmVwYXJlKGlzYy0+aGNsb2NrKTsNCi0NCi0JaXNjX3N1YmRldl9jbGVh bnVwKGlzYyk7DQotDQotCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmlzYy0+djRsMl9kZXYpOw0K LQ0KLQlpc2NfY2xrX2NsZWFudXAoaXNjKTsNCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0YXRp YyBpbnQgX19tYXliZV91bnVzZWQgaXNjX3J1bnRpbWVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpk ZXYpDQotew0KLQlzdHJ1Y3QgaXNjX2RldmljZSAqaXNjID0gZGV2X2dldF9kcnZkYXRhKGRldik7 DQotDQotCWNsa19kaXNhYmxlX3VucHJlcGFyZShpc2MtPmlzcGNrKTsNCi0JY2xrX2Rpc2FibGVf dW5wcmVwYXJlKGlzYy0+aGNsb2NrKTsNCi0NCi0JcmV0dXJuIDA7DQotfQ0KLQ0KLXN0YXRpYyBp bnQgX19tYXliZV91bnVzZWQgaXNjX3J1bnRpbWVfcmVzdW1lKHN0cnVjdCBkZXZpY2UgKmRldikN Ci17DQotCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCi0J aW50IHJldDsNCi0NCi0JcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGlzYy0+aGNsb2NrKTsNCi0J aWYgKHJldCkNCi0JCXJldHVybiByZXQ7DQotDQotCXJldHVybiBjbGtfcHJlcGFyZV9lbmFibGUo aXNjLT5pc3Bjayk7DQotfQ0KLQ0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBhdG1l bF9pc2NfZGV2X3BtX29wcyA9IHsNCi0JU0VUX1JVTlRJTUVfUE1fT1BTKGlzY19ydW50aW1lX3N1 c3BlbmQsIGlzY19ydW50aW1lX3Jlc3VtZSwgTlVMTCkNCi19Ow0KLQ0KLXN0YXRpYyBjb25zdCBz dHJ1Y3Qgb2ZfZGV2aWNlX2lkIGF0bWVsX2lzY19vZl9tYXRjaFtdID0gew0KLQl7IC5jb21wYXRp YmxlID0gImF0bWVsLHNhbWE1ZDItaXNjIiB9LA0KLQl7IH0NCi19Ow0KLU1PRFVMRV9ERVZJQ0Vf VEFCTEUob2YsIGF0bWVsX2lzY19vZl9tYXRjaCk7DQotDQotc3RhdGljIHN0cnVjdCBwbGF0Zm9y bV9kcml2ZXIgYXRtZWxfaXNjX2RyaXZlciA9IHsNCi0JLnByb2JlCT0gYXRtZWxfaXNjX3Byb2Jl LA0KLQkucmVtb3ZlCT0gYXRtZWxfaXNjX3JlbW92ZSwNCi0JLmRyaXZlcgk9IHsNCi0JCS5uYW1l CQk9IEFUTUVMX0lTQ19OQU1FLA0KLQkJLnBtCQk9ICZhdG1lbF9pc2NfZGV2X3BtX29wcywNCi0J CS5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihhdG1lbF9pc2Nfb2ZfbWF0Y2gpLA0KLQl9 LA0KLX07DQotDQotbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihhdG1lbF9pc2NfZHJpdmVyKTsNCi0N Ci1NT0RVTEVfQVVUSE9SKCJTb25nanVuIFd1IDxzb25nanVuLnd1QG1pY3JvY2hpcC5jb20+Iik7 DQotTU9EVUxFX0RFU0NSSVBUSU9OKCJUaGUgVjRMMiBkcml2ZXIgZm9yIEF0bWVsLUlTQyIpOw0K LU1PRFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsNCi1NT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgidmlk ZW8iKTsNCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3BsYXRmb3JtL2F0bWVsL2F0bWVsLWlz Yy5oIGIvZHJpdmVycy9tZWRpYS9wbGF0Zm9ybS9hdG1lbC9hdG1lbC1pc2MuaA0KbmV3IGZpbGUg bW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAuLmY2MzNlMTANCi0tLSAvZGV2L251bGwNCisrKyBi L2RyaXZlcnMvbWVkaWEvcGxhdGZvcm0vYXRtZWwvYXRtZWwtaXNjLmgNCkBAIC0wLDAgKzEsMjA4 IEBADQorLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8NCisvKg0KKyAqIE1p Y3JvY2hpcCBJbWFnZSBTZW5zb3IgQ29udHJvbGxlciAoSVNDKSBkcml2ZXIgaGVhZGVyIGZpbGUN CisgKg0KKyAqIENvcHlyaWdodCAoQykgMjAxNi0yMDE5IE1pY3JvY2hpcCBUZWNobm9sb2d5LCBJ bmMuDQorICoNCisgKiBBdXRob3I6IFNvbmdqdW4gV3UNCisgKiBBdXRob3I6IEV1Z2VuIEhyaXN0 ZXYgPGV1Z2VuLmhyaXN0ZXZAbWljcm9jaGlwLmNvbT4NCisgKg0KKyAqLw0KKyNpZm5kZWYgX0FU TUVMX0lTQ19IXw0KKw0KKyNkZWZpbmUgSVNDX01BWF9TVVBQT1JUX1dJRFRIICAgMjU5Mg0KKyNk ZWZpbmUgSVNDX01BWF9TVVBQT1JUX0hFSUdIVCAgMTk0NA0KKw0KKyNkZWZpbmUgSVNDX0NMS19N QVhfRElWCQkyNTUNCisNCitlbnVtIGlzY19jbGtfaWQgew0KKwlJU0NfSVNQQ0sgPSAwLA0KKwlJ U0NfTUNLID0gMSwNCit9Ow0KKw0KK3N0cnVjdCBpc2NfY2xrIHsNCisJc3RydWN0IGNsa19odyAg IGh3Ow0KKwlzdHJ1Y3QgY2xrICAgICAgKmNsazsNCisJc3RydWN0IHJlZ21hcCAgICpyZWdtYXA7 DQorCXNwaW5sb2NrX3QJbG9jazsNCisJdTgJCWlkOw0KKwl1OAkJcGFyZW50X2lkOw0KKwl1MzIJ CWRpdjsNCisJc3RydWN0IGRldmljZQkqZGV2Ow0KK307DQorDQorI2RlZmluZSB0b19pc2NfY2xr KGh3KSBjb250YWluZXJfb2YoaHcsIHN0cnVjdCBpc2NfY2xrLCBodykNCisNCitzdHJ1Y3QgaXNj X2J1ZmZlciB7DQorCXN0cnVjdCB2YjJfdjRsMl9idWZmZXIgIHZiOw0KKwlzdHJ1Y3QgbGlzdF9o ZWFkCWxpc3Q7DQorfTsNCisNCitzdHJ1Y3QgaXNjX3N1YmRldl9lbnRpdHkgew0KKwlzdHJ1Y3Qg djRsMl9zdWJkZXYJCSpzZDsNCisJc3RydWN0IHY0bDJfYXN5bmNfc3ViZGV2CSphc2Q7DQorCXN0 cnVjdCB2NGwyX2FzeW5jX25vdGlmaWVyICAgICAgbm90aWZpZXI7DQorDQorCXUzMiBwZmVfY2Zn MDsNCisNCisJc3RydWN0IGxpc3RfaGVhZCBsaXN0Ow0KK307DQorDQorLyoNCisgKiBzdHJ1Y3Qg aXNjX2Zvcm1hdCAtIElTQyBtZWRpYSBidXMgZm9ybWF0IGluZm9ybWF0aW9uDQorCQkJVGhpcyBz dHJ1Y3R1cmUgcmVwcmVzZW50cyB0aGUgaW50ZXJmYWNlIGJldHdlZW4gdGhlIElTQw0KKwkJCWFu ZCB0aGUgc2Vuc29yLiBJdCdzIHRoZSBpbnB1dCBmb3JtYXQgcmVjZWl2ZWQgYnkNCisJCQl0aGUg SVNDLg0KKyAqIEBmb3VyY2M6CQlGb3VyY2MgY29kZSBmb3IgdGhpcyBmb3JtYXQNCisgKiBAbWJ1 c19jb2RlOgkJVjRMMiBtZWRpYSBidXMgZm9ybWF0IGNvZGUuDQorICogQGNmYV9iYXljZmc6CQlJ ZiB0aGlzIGZvcm1hdCBpcyBSQVcgQkFZRVIsIGluZGljYXRlIHRoZSB0eXBlIG9mIGJheWVyLg0K KwkJCXRoaXMgaXMgZWl0aGVyIEJHQkcsIFJHUkcsIGV0Yy4NCisgKiBAcGZlX2NmZzBfYnBzOglO dW1iZXIgb2YgaGFyZHdhcmUgZGF0YSBsaW5lcyBjb25uZWN0ZWQgdG8gdGhlIElTQw0KKyAqLw0K Kw0KK3N0cnVjdCBpc2NfZm9ybWF0IHsNCisJdTMyCWZvdXJjYzsNCisJdTMyCW1idXNfY29kZTsN CisJdTMyCWNmYV9iYXljZmc7DQorDQorCWJvb2wJc2Rfc3VwcG9ydDsNCisJdTMyCXBmZV9jZmcw X2JwczsNCit9Ow0KKw0KKy8qIFBpcGVsaW5lIGJpdG1hcCAqLw0KKyNkZWZpbmUgV0JfRU5BQkxF CUJJVCgwKQ0KKyNkZWZpbmUgQ0ZBX0VOQUJMRQlCSVQoMSkNCisjZGVmaW5lIENDX0VOQUJMRQlC SVQoMikNCisjZGVmaW5lIEdBTV9FTkFCTEUJQklUKDMpDQorI2RlZmluZSBHQU1fQkVOQUJMRQlC SVQoNCkNCisjZGVmaW5lIEdBTV9HRU5BQkxFCUJJVCg1KQ0KKyNkZWZpbmUgR0FNX1JFTkFCTEUJ QklUKDYpDQorI2RlZmluZSBDU0NfRU5BQkxFCUJJVCg3KQ0KKyNkZWZpbmUgQ0JDX0VOQUJMRQlC SVQoOCkNCisjZGVmaW5lIFNVQjQyMl9FTkFCTEUJQklUKDkpDQorI2RlZmluZSBTVUI0MjBfRU5B QkxFCUJJVCgxMCkNCisNCisjZGVmaW5lIEdBTV9FTkFCTEVTCShHQU1fUkVOQUJMRSB8IEdBTV9H RU5BQkxFIHwgR0FNX0JFTkFCTEUgfCBHQU1fRU5BQkxFKQ0KKw0KKy8qDQorICogc3RydWN0IGZt dF9jb25maWcgLSBJU0MgZm9ybWF0IGNvbmZpZ3VyYXRpb24gYW5kIGludGVybmFsIHBpcGVsaW5l DQorCQkJVGhpcyBzdHJ1Y3R1cmUgcmVwcmVzZW50cyB0aGUgaW50ZXJuYWwgY29uZmlndXJhdGlv bg0KKwkJCW9mIHRoZSBJU0MuDQorCQkJSXQgYWxzbyBob2xkcyB0aGUgZm9ybWF0IHRoYXQgSVND IHdpbGwgcHJlc2VudCB0byB2NGwyLg0KKyAqIEBzZF9mb3JtYXQ6CQlQb2ludGVyIHRvIGFuIGlz Y19mb3JtYXQgc3RydWN0IHRoYXQgaG9sZHMgdGhlIHNlbnNvcg0KKwkJCWNvbmZpZ3VyYXRpb24u DQorICogQGZvdXJjYzoJCUZvdXJjYyBjb2RlIGZvciB0aGlzIGZvcm1hdC4NCisgKiBAYnBwOgkJ Qnl0ZXMgcGVyIHBpeGVsIGluIHRoZSBjdXJyZW50IGZvcm1hdC4NCisgKiBAcmxwX2NmZ19tb2Rl OglDb25maWd1cmF0aW9uIG9mIHRoZSBSTFAgKHJvdW5kaW5nLCBsaW1pdGluZyBwYWNrYWdpbmcp DQorICogQGRjZmdfaW1vZGU6CQlDb25maWd1cmF0aW9uIG9mIHRoZSBpbnB1dCBvZiB0aGUgRE1B IG1vZHVsZQ0KKyAqIEBkY3RybF9kdmlldzoJQ29uZmlndXJhdGlvbiBvZiB0aGUgb3V0cHV0IG9m IHRoZSBETUEgbW9kdWxlDQorICogQGJpdHNfcGlwZWxpbmU6CUNvbmZpZ3VyYXRpb24gb2YgdGhl IHBpcGVsaW5lLCB3aGljaCBtb2R1bGVzIGFyZSBlbmFibGVkDQorICovDQorc3RydWN0IGZtdF9j b25maWcgew0KKwlzdHJ1Y3QgaXNjX2Zvcm1hdAkqc2RfZm9ybWF0Ow0KKw0KKwl1MzIJCQlmb3Vy Y2M7DQorCXU4CQkJYnBwOw0KKw0KKwl1MzIJCQlybHBfY2ZnX21vZGU7DQorCXUzMgkJCWRjZmdf aW1vZGU7DQorCXUzMgkJCWRjdHJsX2R2aWV3Ow0KKw0KKwl1MzIJCQliaXRzX3BpcGVsaW5lOw0K K307DQorDQorI2RlZmluZSBISVNUX0VOVFJJRVMJCTUxMg0KKyNkZWZpbmUgSElTVF9CQVlFUgkJ KElTQ19ISVNfQ0ZHX01PREVfQiArIDEpDQorDQorZW51bXsNCisJSElTVF9JTklUID0gMCwNCisJ SElTVF9FTkFCTEVELA0KKwlISVNUX0RJU0FCTEVELA0KK307DQorDQorc3RydWN0IGlzY19jdHJs cyB7DQorCXN0cnVjdCB2NGwyX2N0cmxfaGFuZGxlciBoYW5kbGVyOw0KKw0KKwl1MzIgYnJpZ2h0 bmVzczsNCisJdTMyIGNvbnRyYXN0Ow0KKwl1OCBnYW1tYV9pbmRleDsNCisjZGVmaW5lIElTQ19X Ql9OT05FCTANCisjZGVmaW5lIElTQ19XQl9BVVRPCTENCisjZGVmaW5lIElTQ19XQl9PTkVUSU1F CTINCisJdTggYXdiOw0KKw0KKwkvKiBvbmUgZm9yIGVhY2ggY29tcG9uZW50IDogR1IsIFIsIEdC LCBCICovDQorCXUzMiBnYWluW0hJU1RfQkFZRVJdOw0KKwl1MzIgb2Zmc2V0W0hJU1RfQkFZRVJd Ow0KKw0KKwl1MzIgaGlzdF9lbnRyeVtISVNUX0VOVFJJRVNdOw0KKwl1MzIgaGlzdF9jb3VudFtI SVNUX0JBWUVSXTsNCisJdTggaGlzdF9pZDsNCisJdTggaGlzdF9zdGF0Ow0KKyNkZWZpbmUgSElT VF9NSU5fSU5ERVgJCTANCisjZGVmaW5lIEhJU1RfTUFYX0lOREVYCQkxDQorCXUzMiBoaXN0X21p bm1heFtISVNUX0JBWUVSXVsyXTsNCit9Ow0KKw0KKyNkZWZpbmUgSVNDX1BJUEVfTElORV9OT0RF X05VTQkxMQ0KKw0KK3N0cnVjdCBpc2NfZGV2aWNlIHsNCisJc3RydWN0IHJlZ21hcAkJKnJlZ21h cDsNCisJc3RydWN0IGNsawkJKmhjbG9jazsNCisJc3RydWN0IGNsawkJKmlzcGNrOw0KKwlzdHJ1 Y3QgaXNjX2NsawkJaXNjX2Nsa3NbMl07DQorDQorCXN0cnVjdCBkZXZpY2UJCSpkZXY7DQorCXN0 cnVjdCB2NGwyX2RldmljZQl2NGwyX2RldjsNCisJc3RydWN0IHZpZGVvX2RldmljZQl2aWRlb19k ZXY7DQorDQorCXN0cnVjdCB2YjJfcXVldWUJdmIyX3ZpZHE7DQorCXNwaW5sb2NrX3QJCWRtYV9x dWV1ZV9sb2NrOw0KKwlzdHJ1Y3QgbGlzdF9oZWFkCWRtYV9xdWV1ZTsNCisJc3RydWN0IGlzY19i dWZmZXIJKmN1cl9mcm07DQorCXVuc2lnbmVkIGludAkJc2VxdWVuY2U7DQorCWJvb2wJCQlzdG9w Ow0KKwlzdHJ1Y3QgY29tcGxldGlvbgljb21wOw0KKw0KKwlzdHJ1Y3QgdjRsMl9mb3JtYXQJZm10 Ow0KKwlzdHJ1Y3QgaXNjX2Zvcm1hdAkqKnVzZXJfZm9ybWF0czsNCisJdW5zaWduZWQgaW50CQlu dW1fdXNlcl9mb3JtYXRzOw0KKw0KKwlzdHJ1Y3QgZm10X2NvbmZpZwljb25maWc7DQorCXN0cnVj dCBmbXRfY29uZmlnCXRyeV9jb25maWc7DQorDQorCXN0cnVjdCBpc2NfY3RybHMJY3RybHM7DQor CXN0cnVjdCB2NGwyX2N0cmwJKmRvX3diX2N0cmw7DQorCXN0cnVjdCB3b3JrX3N0cnVjdAlhd2Jf d29yazsNCisNCisJc3RydWN0IG11dGV4CQlsb2NrOw0KKwlzcGlubG9ja190CQlhd2JfbG9jazsN CisNCisJc3RydWN0IHJlZ21hcF9maWVsZAkqcGlwZWxpbmVbSVNDX1BJUEVfTElORV9OT0RFX05V TV07DQorDQorCXN0cnVjdCBpc2Nfc3ViZGV2X2VudGl0eQkqY3VycmVudF9zdWJkZXY7DQorCXN0 cnVjdCBsaXN0X2hlYWQJCXN1YmRldl9lbnRpdGllczsNCit9Ow0KKw0KKyNkZWZpbmUgR0FNTUFf TUFYCTINCisjZGVmaW5lIEdBTU1BX0VOVFJJRVMJNjQNCisNCisjZGVmaW5lIEFUTUVMX0lTQ19O QU1FICJhdG1lbC1pc2MiDQorDQorLyogbW9kdWxlIHBhcmFtZXRlcnMgKi8NCitleHRlcm4gdW5z aWduZWQgaW50IGRlYnVnOw0KK2V4dGVybiB1bnNpZ25lZCBpbnQgc2Vuc29yX3ByZWZlcnJlZDsN CisNCitleHRlcm4gc3RydWN0IGlzY19mb3JtYXQgZm9ybWF0c19saXN0W107DQorZXh0ZXJuIHN0 cnVjdCBpc2NfZm9ybWF0IGNvbnRyb2xsZXJfZm9ybWF0c1tdOw0KK2V4dGVybiBjb25zdCB1MzIg aXNjX2dhbW1hX3RhYmxlW0dBTU1BX01BWCArIDFdW0dBTU1BX0VOVFJJRVNdOw0KK2V4dGVybiBj b25zdCBzdHJ1Y3QgcmVnbWFwX2NvbmZpZyBpc2NfcmVnbWFwX2NvbmZpZzsNCitleHRlcm4gY29u c3Qgc3RydWN0IHY0bDJfYXN5bmNfbm90aWZpZXJfb3BlcmF0aW9ucyBpc2NfYXN5bmNfb3BzOw0K Kw0KK2lycXJldHVybl90IGlzY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsNCitp bnQgaXNjX3BpcGVsaW5lX2luaXQoc3RydWN0IGlzY19kZXZpY2UgKmlzYyk7DQoraW50IGlzY19j bGtfaW5pdChzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKTsNCit2b2lkIGlzY19zdWJkZXZfY2xlYW51 cChzdHJ1Y3QgaXNjX2RldmljZSAqaXNjKTsNCit2b2lkIGlzY19jbGtfY2xlYW51cChzdHJ1Y3Qg aXNjX2RldmljZSAqaXNjKTsNCisNCisjZW5kaWYNCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlh L3BsYXRmb3JtL2F0bWVsL2F0bWVsLXNhbWE1ZDItaXNjLmMgYi9kcml2ZXJzL21lZGlhL3BsYXRm b3JtL2F0bWVsL2F0bWVsLXNhbWE1ZDItaXNjLmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRl eCAwMDAwMDAwLi45M2ZiODM5DQotLS0gL2Rldi9udWxsDQorKysgYi9kcml2ZXJzL21lZGlhL3Bs YXRmb3JtL2F0bWVsL2F0bWVsLXNhbWE1ZDItaXNjLmMNCkBAIC0wLDAgKzEsMzQ0IEBADQorLy8g U1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCisvKg0KKyAqIE1pY3JvY2hpcCBJbWFn ZSBTZW5zb3IgQ29udHJvbGxlciAoSVNDKSBkcml2ZXINCisgKg0KKyAqIENvcHlyaWdodCAoQykg MjAxNi0yMDE5IE1pY3JvY2hpcCBUZWNobm9sb2d5LCBJbmMuDQorICoNCisgKiBBdXRob3I6IFNv bmdqdW4gV3UNCisgKiBBdXRob3I6IEV1Z2VuIEhyaXN0ZXYgPGV1Z2VuLmhyaXN0ZXZAbWljcm9j aGlwLmNvbT4NCisgKg0KKyAqDQorICogU2Vuc29yLS0+UEZFLS0+V0ItLT5DRkEtLT5DQy0tPkdB TS0tPkNTQy0tPkNCQy0tPlNVQi0tPlJMUC0tPkRNQQ0KKyAqDQorICogSVNDIHZpZGVvIHBpcGVs aW5lIGludGVncmF0ZXMgdGhlIGZvbGxvd2luZyBzdWJtb2R1bGVzOg0KKyAqIFBGRTogUGFyYWxs ZWwgRnJvbnQgRW5kIHRvIHNhbXBsZSB0aGUgY2FtZXJhIHNlbnNvciBpbnB1dCBzdHJlYW0NCisg KiAgV0I6IFByb2dyYW1tYWJsZSB3aGl0ZSBiYWxhbmNlIGluIHRoZSBCYXllciBkb21haW4NCisg KiBDRkE6IENvbG9yIGZpbHRlciBhcnJheSBpbnRlcnBvbGF0aW9uIG1vZHVsZQ0KKyAqICBDQzog UHJvZ3JhbW1hYmxlIGNvbG9yIGNvcnJlY3Rpb24NCisgKiBHQU06IEdhbW1hIGNvcnJlY3Rpb24N CisgKiBDU0M6IFByb2dyYW1tYWJsZSBjb2xvciBzcGFjZSBjb252ZXJzaW9uDQorICogQ0JDOiBD b250cmFzdCBhbmQgQnJpZ2h0bmVzcyBjb250cm9sDQorICogU1VCOiBUaGlzIG1vZHVsZSBwZXJm b3JtcyBZQ2JDcjQ0NCB0byBZQ2JDcjQyMCBjaHJvbWluYW5jZSBzdWJzYW1wbGluZw0KKyAqIFJM UDogVGhpcyBtb2R1bGUgcGVyZm9ybXMgcm91bmRpbmcsIHJhbmdlIGxpbWl0aW5nDQorICogICAg ICBhbmQgcGFja2luZyBvZiB0aGUgaW5jb21pbmcgZGF0YQ0KKyAqLw0KKw0KKyNpbmNsdWRlIDxs aW51eC9jbGsuaD4NCisjaW5jbHVkZSA8bGludXgvY2xrZGV2Lmg+DQorI2luY2x1ZGUgPGxpbnV4 L2Nsay1wcm92aWRlci5oPg0KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPg0KKyNpbmNsdWRlIDxs aW51eC9pbnRlcnJ1cHQuaD4NCisjaW5jbHVkZSA8bGludXgvbWF0aDY0Lmg+DQorI2luY2x1ZGUg PGxpbnV4L21vZHVsZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9vZi5oPg0KKyNpbmNsdWRlIDxsaW51 eC9vZl9ncmFwaC5oPg0KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4NCisjaW5j bHVkZSA8bGludXgvcG1fcnVudGltZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4NCisj aW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+DQorDQorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY3Ry bHMuaD4NCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4NCisjaW5jbHVkZSA8bWVkaWEv djRsMi1ldmVudC5oPg0KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWltYWdlLXNpemVzLmg+DQorI2lu Y2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4NCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1md25vZGUu aD4NCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1zdWJkZXYuaD4NCisjaW5jbHVkZSA8bWVkaWEvdmlk ZW9idWYyLWRtYS1jb250aWcuaD4NCisNCisjaW5jbHVkZSAiYXRtZWwtaXNjLXJlZ3MuaCINCisj aW5jbHVkZSAiYXRtZWwtaXNjLmgiDQorDQorI2RlZmluZSBJU0NfTUFYX1NVUFBPUlRfV0lEVEgg ICAyNTkyDQorI2RlZmluZSBJU0NfTUFYX1NVUFBPUlRfSEVJR0hUICAxOTQ0DQorDQorI2RlZmlu ZSBJU0NfQ0xLX01BWF9ESVYJCTI1NQ0KKw0KK3N0YXRpYyBpbnQgaXNjX3BhcnNlX2R0KHN0cnVj dCBkZXZpY2UgKmRldiwgc3RydWN0IGlzY19kZXZpY2UgKmlzYykNCit7DQorCXN0cnVjdCBkZXZp Y2Vfbm9kZSAqbnAgPSBkZXYtPm9mX25vZGU7DQorCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZXBuID0g TlVMTCwgKnJlbTsNCisJc3RydWN0IGlzY19zdWJkZXZfZW50aXR5ICpzdWJkZXZfZW50aXR5Ow0K Kwl1bnNpZ25lZCBpbnQgZmxhZ3M7DQorCWludCByZXQ7DQorDQorCUlOSVRfTElTVF9IRUFEKCZp c2MtPnN1YmRldl9lbnRpdGllcyk7DQorDQorCXdoaWxlICgxKSB7DQorCQlzdHJ1Y3QgdjRsMl9m d25vZGVfZW5kcG9pbnQgdjRsMl9lcG4gPSB7IC5idXNfdHlwZSA9IDAgfTsNCisNCisJCWVwbiA9 IG9mX2dyYXBoX2dldF9uZXh0X2VuZHBvaW50KG5wLCBlcG4pOw0KKwkJaWYgKCFlcG4pDQorCQkJ cmV0dXJuIDA7DQorDQorCQlyZW0gPSBvZl9ncmFwaF9nZXRfcmVtb3RlX3BvcnRfcGFyZW50KGVw bik7DQorCQlpZiAoIXJlbSkgew0KKwkJCWRldl9ub3RpY2UoZGV2LCAiUmVtb3RlIGRldmljZSBh dCAlcE9GIG5vdCBmb3VuZFxuIiwNCisJCQkJICAgZXBuKTsNCisJCQljb250aW51ZTsNCisJCX0N CisNCisJCXJldCA9IHY0bDJfZndub2RlX2VuZHBvaW50X3BhcnNlKG9mX2Z3bm9kZV9oYW5kbGUo ZXBuKSwNCisJCQkJCQkgJnY0bDJfZXBuKTsNCisJCWlmIChyZXQpIHsNCisJCQlvZl9ub2RlX3B1 dChyZW0pOw0KKwkJCXJldCA9IC1FSU5WQUw7DQorCQkJZGV2X2VycihkZXYsICJDb3VsZCBub3Qg cGFyc2UgdGhlIGVuZHBvaW50XG4iKTsNCisJCQlicmVhazsNCisJCX0NCisNCisJCXN1YmRldl9l bnRpdHkgPSBkZXZtX2t6YWxsb2MoZGV2LA0KKwkJCQkJICBzaXplb2YoKnN1YmRldl9lbnRpdHkp LCBHRlBfS0VSTkVMKTsNCisJCWlmICghc3ViZGV2X2VudGl0eSkgew0KKwkJCW9mX25vZGVfcHV0 KHJlbSk7DQorCQkJcmV0ID0gLUVOT01FTTsNCisJCQlicmVhazsNCisJCX0NCisNCisJCS8qIGFz ZCB3aWxsIGJlIGZyZWVkIGJ5IHRoZSBzdWJzeXN0ZW0gb25jZSBpdCdzIGFkZGVkIHRvIHRoZQ0K KwkJICogbm90aWZpZXIgbGlzdA0KKwkJICovDQorCQlzdWJkZXZfZW50aXR5LT5hc2QgPSBremFs bG9jKHNpemVvZigqc3ViZGV2X2VudGl0eS0+YXNkKSwNCisJCQkJCSAgICAgR0ZQX0tFUk5FTCk7 DQorCQlpZiAoIXN1YmRldl9lbnRpdHktPmFzZCkgew0KKwkJCW9mX25vZGVfcHV0KHJlbSk7DQor CQkJcmV0ID0gLUVOT01FTTsNCisJCQlicmVhazsNCisJCX0NCisNCisJCWZsYWdzID0gdjRsMl9l cG4uYnVzLnBhcmFsbGVsLmZsYWdzOw0KKw0KKwkJaWYgKGZsYWdzICYgVjRMMl9NQlVTX0hTWU5D X0FDVElWRV9MT1cpDQorCQkJc3ViZGV2X2VudGl0eS0+cGZlX2NmZzAgPSBJU0NfUEZFX0NGRzBf SFBPTF9MT1c7DQorDQorCQlpZiAoZmxhZ3MgJiBWNEwyX01CVVNfVlNZTkNfQUNUSVZFX0xPVykN CisJCQlzdWJkZXZfZW50aXR5LT5wZmVfY2ZnMCB8PSBJU0NfUEZFX0NGRzBfVlBPTF9MT1c7DQor DQorCQlpZiAoZmxhZ3MgJiBWNEwyX01CVVNfUENMS19TQU1QTEVfRkFMTElORykNCisJCQlzdWJk ZXZfZW50aXR5LT5wZmVfY2ZnMCB8PSBJU0NfUEZFX0NGRzBfUFBPTF9MT1c7DQorDQorCQlpZiAo djRsMl9lcG4uYnVzX3R5cGUgPT0gVjRMMl9NQlVTX0JUNjU2KQ0KKwkJCXN1YmRldl9lbnRpdHkt PnBmZV9jZmcwIHw9IElTQ19QRkVfQ0ZHMF9DQ0lSX0NSQyB8DQorCQkJCQlJU0NfUEZFX0NGRzBf Q0NJUjY1NjsNCisNCisJCXN1YmRldl9lbnRpdHktPmFzZC0+bWF0Y2hfdHlwZSA9IFY0TDJfQVNZ TkNfTUFUQ0hfRldOT0RFOw0KKwkJc3ViZGV2X2VudGl0eS0+YXNkLT5tYXRjaC5md25vZGUgPQ0K KwkJCW9mX2Z3bm9kZV9oYW5kbGUocmVtKTsNCisJCWxpc3RfYWRkX3RhaWwoJnN1YmRldl9lbnRp dHktPmxpc3QsICZpc2MtPnN1YmRldl9lbnRpdGllcyk7DQorCX0NCisNCisJb2Zfbm9kZV9wdXQo ZXBuKTsNCisJcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIGludCBhdG1lbF9pc2NfcHJvYmUo c3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCit7DQorCXN0cnVjdCBkZXZpY2UgKmRldiA9 ICZwZGV2LT5kZXY7DQorCXN0cnVjdCBpc2NfZGV2aWNlICppc2M7DQorCXN0cnVjdCByZXNvdXJj ZSAqcmVzOw0KKwl2b2lkIF9faW9tZW0gKmlvX2Jhc2U7DQorCXN0cnVjdCBpc2Nfc3ViZGV2X2Vu dGl0eSAqc3ViZGV2X2VudGl0eTsNCisJaW50IGlycTsNCisJaW50IHJldDsNCisNCisJaXNjID0g ZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCppc2MpLCBHRlBfS0VSTkVMKTsNCisJaWYgKCFpc2Mp DQorCQlyZXR1cm4gLUVOT01FTTsNCisNCisJcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgaXNj KTsNCisJaXNjLT5kZXYgPSBkZXY7DQorDQorCXJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShw ZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7DQorCWlvX2Jhc2UgPSBkZXZtX2lvcmVtYXBfcmVzb3Vy Y2UoZGV2LCByZXMpOw0KKwlpZiAoSVNfRVJSKGlvX2Jhc2UpKQ0KKwkJcmV0dXJuIFBUUl9FUlIo aW9fYmFzZSk7DQorDQorCWlzYy0+cmVnbWFwID0gZGV2bV9yZWdtYXBfaW5pdF9tbWlvKGRldiwg aW9fYmFzZSwgJmlzY19yZWdtYXBfY29uZmlnKTsNCisJaWYgKElTX0VSUihpc2MtPnJlZ21hcCkp IHsNCisJCXJldCA9IFBUUl9FUlIoaXNjLT5yZWdtYXApOw0KKwkJZGV2X2VycihkZXYsICJmYWls ZWQgdG8gaW5pdCByZWdpc3RlciBtYXA6ICVkXG4iLCByZXQpOw0KKwkJcmV0dXJuIHJldDsNCisJ fQ0KKw0KKwlpcnEgPSBwbGF0Zm9ybV9nZXRfaXJxKHBkZXYsIDApOw0KKwlpZiAoaXJxIDwgMCkg ew0KKwkJcmV0ID0gaXJxOw0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IGlycTogJWRc biIsIHJldCk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCXJldCA9IGRldm1fcmVxdWVzdF9p cnEoZGV2LCBpcnEsIGlzY19pbnRlcnJ1cHQsIDAsDQorCQkJICAgICAgIEFUTUVMX0lTQ19OQU1F LCBpc2MpOw0KKwlpZiAocmV0IDwgMCkgew0KKwkJZGV2X2VycihkZXYsICJjYW4ndCByZWdpc3Rl ciBJU1IgZm9yIElSUSAldSAocmV0PSVpKVxuIiwNCisJCQlpcnEsIHJldCk7DQorCQlyZXR1cm4g cmV0Ow0KKwl9DQorDQorCXJldCA9IGlzY19waXBlbGluZV9pbml0KGlzYyk7DQorCWlmIChyZXQp DQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlpc2MtPmhjbG9jayA9IGRldm1fY2xrX2dldChkZXYsICJo Y2xvY2siKTsNCisJaWYgKElTX0VSUihpc2MtPmhjbG9jaykpIHsNCisJCXJldCA9IFBUUl9FUlIo aXNjLT5oY2xvY2spOw0KKwkJZGV2X2VycihkZXYsICJmYWlsZWQgdG8gZ2V0IGhjbG9jazogJWRc biIsIHJldCk7DQorCQlyZXR1cm4gcmV0Ow0KKwl9DQorDQorCXJldCA9IGNsa19wcmVwYXJlX2Vu YWJsZShpc2MtPmhjbG9jayk7DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoZGV2LCAiZmFpbGVk IHRvIGVuYWJsZSBoY2xvY2s6ICVkXG4iLCByZXQpOw0KKwkJcmV0dXJuIHJldDsNCisJfQ0KKw0K KwlyZXQgPSBpc2NfY2xrX2luaXQoaXNjKTsNCisJaWYgKHJldCkgew0KKwkJZGV2X2VycihkZXYs ICJmYWlsZWQgdG8gaW5pdCBpc2MgY2xvY2s6ICVkXG4iLCByZXQpOw0KKwkJZ290byB1bnByZXBh cmVfaGNsazsNCisJfQ0KKw0KKwlpc2MtPmlzcGNrID0gaXNjLT5pc2NfY2xrc1tJU0NfSVNQQ0td LmNsazsNCisNCisJcmV0ID0gY2xrX3ByZXBhcmVfZW5hYmxlKGlzYy0+aXNwY2spOw0KKwlpZiAo cmV0KSB7DQorCQlkZXZfZXJyKGRldiwgImZhaWxlZCB0byBlbmFibGUgaXNwY2s6ICVkXG4iLCBy ZXQpOw0KKwkJZ290byB1bnByZXBhcmVfaGNsazsNCisJfQ0KKw0KKwkvKiBpc3BjayBzaG91bGQg YmUgZ3JlYXRlciBvciBlcXVhbCB0byBoY2xvY2sgKi8NCisJcmV0ID0gY2xrX3NldF9yYXRlKGlz Yy0+aXNwY2ssIGNsa19nZXRfcmF0ZShpc2MtPmhjbG9jaykpOw0KKwlpZiAocmV0KSB7DQorCQlk ZXZfZXJyKGRldiwgImZhaWxlZCB0byBzZXQgaXNwY2sgcmF0ZTogJWRcbiIsIHJldCk7DQorCQln b3RvIHVucHJlcGFyZV9jbGs7DQorCX0NCisNCisJcmV0ID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIo ZGV2LCAmaXNjLT52NGwyX2Rldik7DQorCWlmIChyZXQpIHsNCisJCWRldl9lcnIoZGV2LCAidW5h YmxlIHRvIHJlZ2lzdGVyIHY0bDIgZGV2aWNlLlxuIik7DQorCQlnb3RvIHVucHJlcGFyZV9jbGs7 DQorCX0NCisNCisJcmV0ID0gaXNjX3BhcnNlX2R0KGRldiwgaXNjKTsNCisJaWYgKHJldCkgew0K KwkJZGV2X2VycihkZXYsICJmYWlsIHRvIHBhcnNlIGRldmljZSB0cmVlXG4iKTsNCisJCWdvdG8g dW5yZWdpc3Rlcl92NGwyX2RldmljZTsNCisJfQ0KKw0KKwlpZiAobGlzdF9lbXB0eSgmaXNjLT5z dWJkZXZfZW50aXRpZXMpKSB7DQorCQlkZXZfZXJyKGRldiwgIm5vIHN1YmRldiBmb3VuZFxuIik7 DQorCQlyZXQgPSAtRU5PREVWOw0KKwkJZ290byB1bnJlZ2lzdGVyX3Y0bDJfZGV2aWNlOw0KKwl9 DQorDQorCWxpc3RfZm9yX2VhY2hfZW50cnkoc3ViZGV2X2VudGl0eSwgJmlzYy0+c3ViZGV2X2Vu dGl0aWVzLCBsaXN0KSB7DQorCQl2NGwyX2FzeW5jX25vdGlmaWVyX2luaXQoJnN1YmRldl9lbnRp dHktPm5vdGlmaWVyKTsNCisNCisJCXJldCA9IHY0bDJfYXN5bmNfbm90aWZpZXJfYWRkX3N1YmRl digmc3ViZGV2X2VudGl0eS0+bm90aWZpZXIsDQorCQkJCQkJICAgICBzdWJkZXZfZW50aXR5LT5h c2QpOw0KKwkJaWYgKHJldCkgew0KKwkJCWZ3bm9kZV9oYW5kbGVfcHV0KHN1YmRldl9lbnRpdHkt PmFzZC0+bWF0Y2guZndub2RlKTsNCisJCQlrZnJlZShzdWJkZXZfZW50aXR5LT5hc2QpOw0KKwkJ CWdvdG8gY2xlYW51cF9zdWJkZXY7DQorCQl9DQorDQorCQlzdWJkZXZfZW50aXR5LT5ub3RpZmll ci5vcHMgPSAmaXNjX2FzeW5jX29wczsNCisNCisJCXJldCA9IHY0bDJfYXN5bmNfbm90aWZpZXJf cmVnaXN0ZXIoJmlzYy0+djRsMl9kZXYsDQorCQkJCQkJICAgJnN1YmRldl9lbnRpdHktPm5vdGlm aWVyKTsNCisJCWlmIChyZXQpIHsNCisJCQlkZXZfZXJyKGRldiwgImZhaWwgdG8gcmVnaXN0ZXIg YXN5bmMgbm90aWZpZXJcbiIpOw0KKwkJCWdvdG8gY2xlYW51cF9zdWJkZXY7DQorCQl9DQorDQor CQlpZiAodmlkZW9faXNfcmVnaXN0ZXJlZCgmaXNjLT52aWRlb19kZXYpKQ0KKwkJCWJyZWFrOw0K Kwl9DQorDQorCXBtX3J1bnRpbWVfc2V0X2FjdGl2ZShkZXYpOw0KKwlwbV9ydW50aW1lX2VuYWJs ZShkZXYpOw0KKwlwbV9yZXF1ZXN0X2lkbGUoZGV2KTsNCisNCisJcmV0dXJuIDA7DQorDQorY2xl YW51cF9zdWJkZXY6DQorCWlzY19zdWJkZXZfY2xlYW51cChpc2MpOw0KKw0KK3VucmVnaXN0ZXJf djRsMl9kZXZpY2U6DQorCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmlzYy0+djRsMl9kZXYpOw0K Kw0KK3VucHJlcGFyZV9jbGs6DQorCWNsa19kaXNhYmxlX3VucHJlcGFyZShpc2MtPmlzcGNrKTsN Cit1bnByZXBhcmVfaGNsazoNCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGlzYy0+aGNsb2NrKTsN CisNCisJaXNjX2Nsa19jbGVhbnVwKGlzYyk7DQorDQorCXJldHVybiByZXQ7DQorfQ0KKw0KK3N0 YXRpYyBpbnQgYXRtZWxfaXNjX3JlbW92ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0K K3sNCisJc3RydWN0IGlzY19kZXZpY2UgKmlzYyA9IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYp Ow0KKw0KKwlwbV9ydW50aW1lX2Rpc2FibGUoJnBkZXYtPmRldik7DQorCWNsa19kaXNhYmxlX3Vu cHJlcGFyZShpc2MtPmlzcGNrKTsNCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGlzYy0+aGNsb2Nr KTsNCisNCisJaXNjX3N1YmRldl9jbGVhbnVwKGlzYyk7DQorDQorCXY0bDJfZGV2aWNlX3VucmVn aXN0ZXIoJmlzYy0+djRsMl9kZXYpOw0KKw0KKwlpc2NfY2xrX2NsZWFudXAoaXNjKTsNCisNCisJ cmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgaXNjX3J1bnRpbWVf c3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYpDQorew0KKwlzdHJ1Y3QgaXNjX2RldmljZSAqaXNj ID0gZGV2X2dldF9kcnZkYXRhKGRldik7DQorDQorCWNsa19kaXNhYmxlX3VucHJlcGFyZShpc2Mt PmlzcGNrKTsNCisJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKGlzYy0+aGNsb2NrKTsNCisNCisJcmV0 dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgX19tYXliZV91bnVzZWQgaXNjX3J1bnRpbWVfcmVz dW1lKHN0cnVjdCBkZXZpY2UgKmRldikNCit7DQorCXN0cnVjdCBpc2NfZGV2aWNlICppc2MgPSBk ZXZfZ2V0X2RydmRhdGEoZGV2KTsNCisJaW50IHJldDsNCisNCisJcmV0ID0gY2xrX3ByZXBhcmVf ZW5hYmxlKGlzYy0+aGNsb2NrKTsNCisJaWYgKHJldCkNCisJCXJldHVybiByZXQ7DQorDQorCXJl dHVybiBjbGtfcHJlcGFyZV9lbmFibGUoaXNjLT5pc3Bjayk7DQorfQ0KKw0KK3N0YXRpYyBjb25z dCBzdHJ1Y3QgZGV2X3BtX29wcyBhdG1lbF9pc2NfZGV2X3BtX29wcyA9IHsNCisJU0VUX1JVTlRJ TUVfUE1fT1BTKGlzY19ydW50aW1lX3N1c3BlbmQsIGlzY19ydW50aW1lX3Jlc3VtZSwgTlVMTCkN Cit9Ow0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIGF0bWVsX2lzY19vZl9t YXRjaFtdID0gew0KKwl7IC5jb21wYXRpYmxlID0gImF0bWVsLHNhbWE1ZDItaXNjIiB9LA0KKwl7 IH0NCit9Ow0KK01PRFVMRV9ERVZJQ0VfVEFCTEUob2YsIGF0bWVsX2lzY19vZl9tYXRjaCk7DQor DQorc3RhdGljIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgYXRtZWxfaXNjX2RyaXZlciA9IHsNCisJ LnByb2JlCT0gYXRtZWxfaXNjX3Byb2JlLA0KKwkucmVtb3ZlCT0gYXRtZWxfaXNjX3JlbW92ZSwN CisJLmRyaXZlcgk9IHsNCisJCS5uYW1lCQk9IEFUTUVMX0lTQ19OQU1FLA0KKwkJLnBtCQk9ICZh dG1lbF9pc2NfZGV2X3BtX29wcywNCisJCS5vZl9tYXRjaF90YWJsZSA9IG9mX21hdGNoX3B0cihh dG1lbF9pc2Nfb2ZfbWF0Y2gpLA0KKwl9LA0KK307DQorDQorbW9kdWxlX3BsYXRmb3JtX2RyaXZl cihhdG1lbF9pc2NfZHJpdmVyKTsNCisNCitNT0RVTEVfQVVUSE9SKCJTb25nanVuIFd1Iik7DQor TU9EVUxFX0RFU0NSSVBUSU9OKCJUaGUgVjRMMiBkcml2ZXIgZm9yIEF0bWVsLUlTQyIpOw0KK01P RFVMRV9MSUNFTlNFKCJHUEwgdjIiKTsNCitNT0RVTEVfU1VQUE9SVEVEX0RFVklDRSgidmlkZW8i KTsNCi0tIA0KMi43LjQNCg0K