From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-11.3 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,UNPARSEABLE_RELAY, URIBL_BLOCKED,USER_AGENT_SANE_2 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5626EC43461 for ; Mon, 14 Sep 2020 11:08:12 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 0F7B8208DB for ; Mon, 14 Sep 2020 11:08:12 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="T/EF1kyI" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1725977AbgINLIC (ORCPT ); Mon, 14 Sep 2020 07:08:02 -0400 Received: from mailgw01.mediatek.com ([210.61.82.183]:32959 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1725944AbgINLHw (ORCPT ); Mon, 14 Sep 2020 07:07:52 -0400 X-UUID: c09b07bff4f5479fb30ffab6f42699d2-20200914 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:MIME-Version:Content-Type:References:In-Reply-To:Date:CC:To:From:Subject:Message-ID; bh=l+K+DCkSosMswrcSbxdGyNGwJ1puNc9STLFyx8t2fEg=; b=T/EF1kyICUOmqoBfAdX+pXQ6maAc16GXhDCFjudVk8afqVx+DdtgeYy+z1uM8/C4N7Wkgkk0w6wZbzWCP3hAKfcmIPVNMkNKrDs2Eohm3MtC3vHGoyxAkIQizYMnl+JBxhC1NviGQeyAyDFPQYvbuwMSLP8plcL/9RNODWZ4XsM=; X-UUID: c09b07bff4f5479fb30ffab6f42699d2-20200914 Received: from mtkcas11.mediatek.inc [(172.21.101.40)] by mailgw01.mediatek.com (envelope-from ) (Cellopoint E-mail Firewall v4.1.14 Build 0819 with TLSv1.2 ECDHE-RSA-AES256-SHA384 256/256) with ESMTP id 2094471136; Mon, 14 Sep 2020 19:07:38 +0800 Received: from MTKCAS32.mediatek.inc (172.27.4.184) by mtkmbs08n2.mediatek.inc (172.21.101.56) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 14 Sep 2020 19:07:34 +0800 Received: from [10.17.3.153] (10.17.3.153) by MTKCAS32.mediatek.inc (172.27.4.170) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 14 Sep 2020 19:07:33 +0800 Message-ID: <1600081533.2521.49.camel@mhfsdcap03> Subject: Re: [v2,2/3] PCI: mediatek: Add new generation controller support From: Jianjun Wang To: Rob Herring CC: , Lorenzo Pieralisi , Mauro Carvalho Chehab , , , Matthias Brugger , "Sj Huang" , Ryder Lee , , Philipp Zabel , Bjorn Helgaas , , Date: Mon, 14 Sep 2020 19:05:33 +0800 In-Reply-To: <20200911224434.GA2905744@bogus> References: <20200910034536.30860-1-jianjun.wang@mediatek.com> <20200910034536.30860-3-jianjun.wang@mediatek.com> <20200911224434.GA2905744@bogus> Content-Type: text/plain; charset="UTF-8" X-Mailer: Evolution 3.10.4-0ubuntu2 MIME-Version: 1.0 X-TM-SNTS-SMTP: 0DF510C4B04357405F5FEE82EDAA122009CE8FAF313E222050D21FDABB8C0E232000:8 X-MTK: N Content-Transfer-Encoding: base64 Sender: linux-pci-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-pci@vger.kernel.org T24gRnJpLCAyMDIwLTA5LTExIGF0IDE2OjQ0IC0wNjAwLCBSb2IgSGVycmluZyB3cm90ZToNCj4g T24gVGh1LCBTZXAgMTAsIDIwMjAgYXQgMTE6NDU6MzVBTSArMDgwMCwgSmlhbmp1biBXYW5nIHdy b3RlOg0KPiA+IE1lZGlhVGVrJ3MgUENJZSBob3N0IGNvbnRyb2xsZXIgaGFzIHRocmVlIGdlbmVy YXRpb24gSFdzLCB0aGUgbmV3DQo+ID4gZ2VuZXJhdGlvbiBIVyBpcyBhbiBpbmRpdmlkdWFsIGJy aWRnZSwgaXQgc3Vwb29ydHMgR2VuMyBzcGVlZCBhbmQNCj4gPiB1cCB0byAyNTYgTVNJIGludGVy cnVwdCBudW1iZXJzIGZvciBtdWx0aS1mdW5jdGlvbiBkZXZpY2VzLg0KPiA+IA0KPiA+IEFkZCBz dXBwb3J0IGZvciBuZXcgR2VuMyBjb250cm9sbGVyIHdoaWNoIGNhbiBiZSBmb3VuZCBvbiBNVDgx OTIuDQo+ID4gDQo+ID4gU2lnbmVkLW9mZi1ieTogSmlhbmp1biBXYW5nIDxqaWFuanVuLndhbmdA bWVkaWF0ZWsuY29tPg0KPiA+IEFja2VkLWJ5OiBSeWRlciBMZWUgPHJ5ZGVyLmxlZUBtZWRpYXRl ay5jb20+DQo+ID4gLS0tDQo+ID4gIGRyaXZlcnMvcGNpL2NvbnRyb2xsZXIvS2NvbmZpZyAgICAg ICAgICAgICAgfCAgIDE0ICsNCj4gPiAgZHJpdmVycy9wY2kvY29udHJvbGxlci9NYWtlZmlsZSAg ICAgICAgICAgICB8ICAgIDEgKw0KPiA+ICBkcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtbWVk aWF0ZWstZ2VuMy5jIHwgMTA3NiArKysrKysrKysrKysrKysrKysrDQo+ID4gIDMgZmlsZXMgY2hh bmdlZCwgMTA5MSBpbnNlcnRpb25zKCspDQo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJz L3BjaS9jb250cm9sbGVyL3BjaWUtbWVkaWF0ZWstZ2VuMy5jDQo+ID4gDQo+ID4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvS2NvbmZpZyBiL2RyaXZlcnMvcGNpL2NvbnRyb2xs ZXIvS2NvbmZpZw0KPiA+IGluZGV4IGYxOGMzNzI1ZWY4MC4uODNkYWE3NzI1OTViIDEwMDY0NA0K PiA+IC0tLSBhL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvS2NvbmZpZw0KPiA+ICsrKyBiL2RyaXZl cnMvcGNpL2NvbnRyb2xsZXIvS2NvbmZpZw0KPiA+IEBAIC0yMzksNiArMjM5LDIwIEBAIGNvbmZp ZyBQQ0lFX01FRElBVEVLDQo+ID4gIAkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxl IFBDSWUgY29udHJvbGxlciBzdXBwb3J0IG9uDQo+ID4gIAkgIE1lZGlhVGVrIFNvQ3MuDQo+ID4g IA0KPiA+ICtjb25maWcgUENJRV9NRURJQVRFS19HRU4zDQo+ID4gKwl0cmlzdGF0ZSAiTWVkaWFU ZWsgR0VOMyBQQ0llIGNvbnRyb2xsZXIiDQo+ID4gKwlkZXBlbmRzIG9uIEFSQ0hfTUVESUFURUsg fHwgQ09NUElMRV9URVNUDQo+ID4gKwlkZXBlbmRzIG9uIE9GDQo+ID4gKwlkZXBlbmRzIG9uIFBD SV9NU0lfSVJRX0RPTUFJTg0KPiA+ICsJaGVscA0KPiA+ICsJICBBZGRzIHN1cHBvcnQgZm9yIFBD SWUgR2VuMyBNQUMgY29udHJvbGxlciBmb3IgTWVkaWFUZWsgU29Dcy4NCj4gPiArCSAgVGhpcyBQ Q0llIGNvbnRyb2xsZXIgcHJvdmlkZXMgdGhlIGNhcGFibGUgb2YgR2VuMywgR2VuMiBhbmQNCj4g PiArCSAgR2VuMSBzcGVlZCwgYW5kIHN1cHBvcnQgdXAgdG8gMjU2IE1TSSBpbnRlcnJ1cHQgbnVt YmVycyBmb3INCj4gPiArCSAgbXVsdGktZnVuY3Rpb24gZGV2aWNlcy4NCj4gPiArDQo+ID4gKwkg IFNheSBZIGhlcmUgaWYgeW91IHdhbnQgdG8gZW5hYmxlIEdlbjMgUENJZSBjb250cm9sbGVyIHN1 cHBvcnQgb24NCj4gPiArCSAgTWVkaWFUZWsgU29Dcy4NCj4gPiArDQo+ID4gIGNvbmZpZyBQQ0lF X1RBTkdPX1NNUDg3NTkNCj4gPiAgCWJvb2wgIlRhbmdvIFNNUDg3NTkgUENJZSBjb250cm9sbGVy IChEQU5HRVJPVVMpIg0KPiA+ICAJZGVwZW5kcyBvbiBBUkNIX1RBTkdPICYmIFBDSV9NU0kgJiYg T0YNCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9NYWtlZmlsZSBiL2Ry aXZlcnMvcGNpL2NvbnRyb2xsZXIvTWFrZWZpbGUNCj4gPiBpbmRleCBiY2RiZjQ5YWIxZTQuLjlj MWI5Njc3NzU5NyAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL01ha2Vm aWxlDQo+ID4gKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9NYWtlZmlsZQ0KPiA+IEBAIC0y Nyw2ICsyNyw3IEBAIG9iai0kKENPTkZJR19QQ0lFX1JPQ0tDSElQKSArPSBwY2llLXJvY2tjaGlw Lm8NCj4gPiAgb2JqLSQoQ09ORklHX1BDSUVfUk9DS0NISVBfRVApICs9IHBjaWUtcm9ja2NoaXAt ZXAubw0KPiA+ICBvYmotJChDT05GSUdfUENJRV9ST0NLQ0hJUF9IT1NUKSArPSBwY2llLXJvY2tj aGlwLWhvc3Qubw0KPiA+ICBvYmotJChDT05GSUdfUENJRV9NRURJQVRFSykgKz0gcGNpZS1tZWRp YXRlay5vDQo+ID4gK29iai0kKENPTkZJR19QQ0lFX01FRElBVEVLX0dFTjMpICs9IHBjaWUtbWVk aWF0ZWstZ2VuMy5vDQo+ID4gIG9iai0kKENPTkZJR19QQ0lFX1RBTkdPX1NNUDg3NTkpICs9IHBj aWUtdGFuZ28ubw0KPiA+ICBvYmotJChDT05GSUdfVk1EKSArPSB2bWQubw0KPiA+ICBvYmotJChD T05GSUdfUENJRV9CUkNNU1RCKSArPSBwY2llLWJyY21zdGIubw0KPiA+IGRpZmYgLS1naXQgYS9k cml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtbWVkaWF0ZWstZ2VuMy5jIGIvZHJpdmVycy9wY2kv Y29udHJvbGxlci9wY2llLW1lZGlhdGVrLWdlbjMuYw0KPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 DQo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi5mOGM4YmRmODhkMzMNCj4gPiAtLS0gL2Rldi9udWxs DQo+ID4gKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLW1lZGlhdGVrLWdlbjMuYw0K PiA+IEBAIC0wLDAgKzEsMTA3NiBAQA0KPiA+ICsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjog R1BMLTIuMA0KPiA+ICsvKg0KPiA+ICsgKiBNZWRpYVRlayBQQ0llIGhvc3QgY29udHJvbGxlciBk cml2ZXIuDQo+ID4gKyAqDQo+ID4gKyAqIENvcHlyaWdodCAoYykgMjAyMCBNZWRpYVRlayBJbmMu DQo+ID4gKyAqIEF1dGhvcjogSmlhbmp1biBXYW5nIDxqaWFuanVuLndhbmdAbWVkaWF0ZWsuY29t Pg0KPiA+ICsgKi8NCj4gPiArDQo+ID4gKyNpbmNsdWRlIDxsaW51eC9jbGsuaD4NCj4gPiArI2lu Y2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9pb3BvbGwuaD4NCj4g PiArI2luY2x1ZGUgPGxpbnV4L2lycS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaXJxY2hpcC9j aGFpbmVkX2lycS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvaXJxZG9tYWluLmg+DQo+ID4gKyNp bmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0K PiA+ICsjaW5jbHVkZSA8bGludXgvbXNpLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZl9hZGRy ZXNzLmg+DQo+ID4gKyNpbmNsdWRlIDxsaW51eC9vZl9jbGsuaD4NCj4gPiArI2luY2x1ZGUgPGxp bnV4L29mX3BjaS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4NCj4gPiAr I2luY2x1ZGUgPGxpbnV4L3BjaS5oPg0KPiA+ICsjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPg0K PiA+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+DQo+ID4gKyNpbmNsdWRlIDxs aW51eC9wbV9kb21haW4uaD4NCj4gPiArI2luY2x1ZGUgPGxpbnV4L3BtX3J1bnRpbWUuaD4NCj4g PiArI2luY2x1ZGUgPGxpbnV4L3Jlc2V0Lmg+DQo+ID4gKw0KPiA+ICsjaW5jbHVkZSAiLi4vcGNp LmgiDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBDSUVfU0VUVElOR19SRUcJCTB4ODANCj4gPiArI2Rl ZmluZSBQQ0lFX1BDSV9JRFNfMQkJCTB4OWMNCj4gPiArI2RlZmluZSBQQ0lfQ0xBU1MoY2xhc3Mp CQkoY2xhc3MgPDwgOCkNCj4gPiArI2RlZmluZSBQQ0lFX1JDX01PREUJCQlCSVQoMCkNCj4gPiAr DQo+ID4gKyNkZWZpbmUgUENJRV9DRkdOVU1fUkVHCQkJMHgxNDANCj4gPiArI2RlZmluZSBQQ0lF X0NGR19ERVZGTihkZXZmbikJCSgoZGV2Zm4pICYgR0VOTUFTSyg3LCAwKSkNCj4gPiArI2RlZmlu ZSBQQ0lFX0NGR19CVVMoYnVzKQkJKCgoYnVzKSA8PCA4KSAmIEdFTk1BU0soMTUsIDgpKQ0KPiA+ ICsjZGVmaW5lIFBDSUVfQ0ZHX0JZVEVfRU4oYnl0ZXMpCQkoKChieXRlcykgPDwgMTYpICYgR0VO TUFTSygxOSwgMTYpKQ0KPiA+ICsjZGVmaW5lIFBDSUVfQ0ZHX0ZPUkNFX0JZVEVfRU4JCUJJVCgy MCkNCj4gPiArI2RlZmluZSBQQ0lFX0NGR19PRkZTRVRfQUREUgkJMHgxMDAwDQo+ID4gKyNkZWZp bmUgUENJRV9DRkdfSEVBREVSKGRldmZuLCBidXMpIFwNCj4gPiArCShQQ0lFX0NGR19ERVZGTihk ZXZmbikgfCBQQ0lFX0NGR19CVVMoYnVzKSkNCj4gPiArDQo+ID4gKyNkZWZpbmUgUENJRV9DRkdf SEVBREVSX0ZPUkNFX0JFKGRldmZuLCBidXMsIGJ5dGVzKSBcDQo+ID4gKwkoUENJRV9DRkdfSEVB REVSKGRldmZuLCBidXMpIHwgUENJRV9DRkdfQllURV9FTihieXRlcykgXA0KPiA+ICsJIHwgUENJ RV9DRkdfRk9SQ0VfQllURV9FTikNCj4gPiArDQo+ID4gKyNkZWZpbmUgUENJRV9SU1RfQ1RSTF9S RUcJCTB4MTQ4DQo+ID4gKyNkZWZpbmUgUENJRV9NQUNfUlNUQgkJCUJJVCgwKQ0KPiA+ICsjZGVm aW5lIFBDSUVfUEhZX1JTVEIJCQlCSVQoMSkNCj4gPiArI2RlZmluZSBQQ0lFX0JSR19SU1RCCQkJ QklUKDIpDQo+ID4gKyNkZWZpbmUgUENJRV9QRV9SU1RCCQkJQklUKDMpDQo+ID4gKw0KPiA+ICsj ZGVmaW5lIFBDSUVfTUlTQ19TVEFUVVNfUkVHCQkweDE0Qw0KPiA+ICsjZGVmaW5lIFBDSUVfTFRS X01TR19SRUNFSVZFRAkJQklUKDApDQo+ID4gKyNkZWZpbmUgUENJRV9QQ0lFX01TR19SRUNFSVZF RAkJQklUKDEpDQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBDSUVfTFRTU01fU1RBVFVTX1JFRwkJMHgx NTANCj4gPiArI2RlZmluZSBQQ0lFX0xUU1NNX1NUQVRFX01BU0sJCUdFTk1BU0soMjgsIDI0KQ0K PiA+ICsjZGVmaW5lIFBDSUVfTFRTU01fU1RBVEUodmFsKQkJKCh2YWwgJiBQQ0lFX0xUU1NNX1NU QVRFX01BU0spID4+IDI0KQ0KPiA+ICsjZGVmaW5lIFBDSUVfTFRTU01fU1RBVEVfTDAJCTB4MTAN Cj4gPiArI2RlZmluZSBQQ0lFX0xUU1NNX1NUQVRFX0wxX0lETEUJMHgxMw0KPiA+ICsjZGVmaW5l IFBDSUVfTFRTU01fU1RBVEVfTDJfSURMRQkweDE0DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBDSUVf TElOS19TVEFUVVNfUkVHCQkweDE1NA0KPiA+ICsjZGVmaW5lIFBDSUVfUE9SVF9MSU5LVVAJCUJJ VCg4KQ0KPiA+ICsNCj4gPiArI2RlZmluZSBQQ0lFX01TSV9TRVRfTlVNCQk4DQo+ID4gKyNkZWZp bmUgUENJRV9NU0lfSVJRU19QRVJfU0VUCQkzMg0KPiA+ICsjZGVmaW5lIFBDSUVfTVNJX0lSUVNf TlVNIFwNCj4gPiArCShQQ0lFX01TSV9JUlFTX1BFUl9TRVQgKiAoUENJRV9NU0lfU0VUX05VTSkp DQo+ID4gKw0KPiA+ICsjZGVmaW5lIFBDSUVfSU5UX0VOQUJMRV9SRUcJCTB4MTgwDQo+ID4gKyNk ZWZpbmUgUENJRV9NU0lfTUFTSwkJCUdFTk1BU0soUENJRV9NU0lfU0VUX05VTSArIDggLSAxLCA4 KQ0KPiA+ICsjZGVmaW5lIFBDSUVfTVNJX1NISUZUCQkJOA0KPiA+ICsjZGVmaW5lIFBDSUVfSU5U WF9TSElGVAkJCTI0DQo+ID4gKyNkZWZpbmUgUENJRV9JTlRYX01BU0sJCQlHRU5NQVNLKDI3LCAy NCkNCj4gPiArI2RlZmluZSBQQ0lFX01TR19NQVNLCQkJQklUKDI4KQ0KPiA+ICsjZGVmaW5lIFBD SUVfQUVSX01BU0sJCQlCSVQoMjkpDQo+ID4gKyNkZWZpbmUgUENJRV9QTV9NQVNLCQkJQklUKDMw KQ0KPiA+ICsNCj4gPiArI2RlZmluZSBQQ0lFX0lOVF9TVEFUVVNfUkVHCQkweDE4NA0KPiA+ICsj ZGVmaW5lIFBDSUVfTVNJX1NFVF9FTkFCTEVfUkVHCQkweDE5MA0KPiA+ICsNCj4gPiArI2RlZmlu ZSBQQ0lFX0xPV19QT1dFUl9DVFJMX1JFRwkJMHgxOTQNCj4gPiArI2RlZmluZSBQQ0lFX0RJU19M T1dQV1JfTUFTSwkJR0VOTUFTSygzLCAwKQ0KPiA+ICsjZGVmaW5lIFBDSUVfRElTX0wwU19NQVNL CQlCSVQoMCkNCj4gPiArI2RlZmluZSBQQ0lFX0RJU19MMV9NQVNLCQlCSVQoMSkNCj4gPiArI2Rl ZmluZSBQQ0lFX0RJU19MMTFfTUFTSwkJQklUKDIpDQo+ID4gKyNkZWZpbmUgUENJRV9ESVNfTDEy X01BU0sJCUJJVCgzKQ0KPiA+ICsjZGVmaW5lIFBDSUVfRk9SQ0VfRElTX0xPV1BXUgkJR0VOTUFT SygxMSwgOCkNCj4gPiArI2RlZmluZSBQQ0lFX0ZPUkNFX0RJU19MMFMJCUJJVCg4KQ0KPiA+ICsj ZGVmaW5lIFBDSUVfRk9SQ0VfRElTX0wxCQlCSVQoOSkNCj4gPiArI2RlZmluZSBQQ0lFX0ZPUkNF X0RJU19MMTEJCUJJVCgxMCkNCj4gPiArI2RlZmluZSBQQ0lFX0ZPUkNFX0RJU19MMTIJCUJJVCgx MSkNCj4gPiArDQo+ID4gKyNkZWZpbmUgUENJRV9JQ01EX1BNX1JFRwkJMHgxOTgNCj4gPiArI2Rl ZmluZSBQQ0lFX1RVUk5fT0ZGX0xJTksJCUJJVCg0KQ0KPiA+ICsNCj4gPiArI2RlZmluZSBQQ0lF X01TSV9BRERSX0JBU0VfUkVHCQkweGMwMA0KPiA+ICsjZGVmaW5lIFBDSUVfTVNJX1NFVF9PRkZT RVQJCTB4MTANCj4gPiArI2RlZmluZSBQQ0lFX01TSV9TVEFUVVNfT0ZGU0VUCQkweDA0DQo+ID4g KyNkZWZpbmUgUENJRV9NU0lfRU5BQkxFX09GRlNFVAkJMHgwOA0KPiA+ICsNCj4gPiArI2RlZmlu ZSBQQ0lFX1RSQU5TX1RBQkxFX0JBU0VfUkVHCTB4ODAwDQo+ID4gKyNkZWZpbmUgUENJRV9BVFJf U1JDX0FERFJfTVNCX09GRlNFVAkweDQNCj4gPiArI2RlZmluZSBQQ0lFX0FUUl9UUlNMX0FERFJf TFNCX09GRlNFVAkweDgNCj4gPiArI2RlZmluZSBQQ0lFX0FUUl9UUlNMX0FERFJfTVNCX09GRlNF VAkweGMNCj4gPiArI2RlZmluZSBQQ0lFX0FUUl9UUlNMX1BBUkFNX09GRlNFVAkweDEwDQo+ID4g KyNkZWZpbmUgUENJRV9BVFJfVExCX1NFVF9PRkZTRVQJCTB4MjANCj4gPiArDQo+ID4gKyNkZWZp bmUgUENJRV9NQVhfVFJBTlNfVEFCTEVTCQk4DQo+ID4gKyNkZWZpbmUgQVRSX0VOCQkJCUJJVCgw KQ0KPiA+ICsjZGVmaW5lIEFUUl9TSVpFKHNpemUpCQkJKCgoKHNpemUpIC0gMSkgPDwgMSkgJiBH RU5NQVNLKDYsIDEpKQ0KPiA+ICsjZGVmaW5lIEFUUl9JRChpZCkJCQkoaWQgJiBHRU5NQVNLKDMs IDApKQ0KPiA+ICsjZGVmaW5lIEFUUl9QQVJBTShwYXJhbSkJCSgoKHBhcmFtKSA8PCAxNikgJiBH RU5NQVNLKDI3LCAxNikpDQo+ID4gKw0KPiA+ICsvKioNCj4gPiArICogc3RydWN0IG10a19wY2ll X21zaSAtIE1TSSBpbmZvcm1hdGlvbiBmb3IgZWFjaCBzZXQNCj4gPiArICogQGJhc2U6IElPIG1h cHBlZCByZWdpc3RlciBiYXNlDQo+ID4gKyAqIEBod2lycTogSGFyZHdhcmUgaW50ZXJydXB0IG51 bWJlcg0KPiA+ICsgKiBAaXJxOiBNU0kgc2V0IEludGVycnVwdCBudW1iZXINCj4gPiArICogQGlu ZGV4OiBNU0kgc2V0IG51bWJlcg0KPiA+ICsgKiBAbXNnX2FkZHI6IE1TSSBtZXNzYWdlIGFkZHJl c3MNCj4gPiArICogQGRvbWFpbjogSVJRIGRvbWFpbg0KPiA+ICsgKi8NCj4gPiArc3RydWN0IG10 a19wY2llX21zaSB7DQo+ID4gKwl2b2lkIF9faW9tZW0gKmJhc2U7DQo+ID4gKwlpbnQgaHdpcnE7 DQo+ID4gKwlpbnQgaXJxOw0KPiA+ICsJaW50IGluZGV4Ow0KPiA+ICsJcGh5c19hZGRyX3QgbXNn X2FkZHI7DQo+ID4gKwlzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluOw0KPiA+ICt9Ow0KPiA+ICsN Cj4gPiArLyoqDQo+ID4gKyAqIHN0cnVjdCBtdGtfcGNpZV9wb3J0IC0gUENJZSBwb3J0IGluZm9y bWF0aW9uDQo+ID4gKyAqIEBkZXY6IFBDSWUgZGV2aWNlDQo+ID4gKyAqIEBiYXNlOiBJTyBtYXBw ZWQgcmVnaXN0ZXIgYmFzZQ0KPiA+ICsgKiBAcmVnX2Jhc2U6IFBoeXNpY2FsIHJlZ2lzdGVyIGJh c2UNCj4gPiArICogQG1hY19yZXNldDogbWFjIHJlc2V0IGNvbnRyb2wNCj4gPiArICogQHBoeV9y ZXNldDogcGh5IHJlc2V0IGNvbnRyb2wNCj4gPiArICogQHBoeTogUEhZIGNvbnRyb2xsZXIgYmxv Y2sNCj4gPiArICogQGNsa3M6IFBDSWUgY2xvY2tzDQo+ID4gKyAqIEBudW1fY2xrczogUENJZSBj bG9ja3MgY291bnQgZm9yIHRoaXMgcG9ydA0KPiA+ICsgKiBAaXNfc3VzcGVuZGVkOiBkZXZpY2Ug c3VzcGVuZCBzdGF0ZQ0KPiA+ICsgKiBAaXJxOiBQQ0llIGNvbnRyb2xsZXIgaW50ZXJydXB0IG51 bWJlcg0KPiA+ICsgKiBAaW50eF9kb21haW46IGxlZ2FjeSBJTlR4IElSUSBkb21haW4NCj4gPiAr ICogQG1zaV9kb21haW46IE1TSSBJUlEgZG9tYWluDQo+ID4gKyAqIEBtc2lfdG9wX2RvbWFpbjog TVNJIElSUSB0b3AgZG9tYWluDQo+ID4gKyAqIEBtc2lfaW5mbzogTVNJIHNldHMgaW5mb3JtYXRp b24NCj4gPiArICogQGxvY2s6IGxvY2sgcHJvdGVjdGluZyBJUlEgYml0IG1hcA0KPiA+ICsgKiBA bXNpX2lycV9pbl91c2U6IGJpdCBtYXAgZm9yIGFzc2lnbmVkIE1TSSBJUlENCj4gPiArICovDQo+ ID4gK3N0cnVjdCBtdGtfcGNpZV9wb3J0IHsNCj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldjsNCj4g PiArCXZvaWQgX19pb21lbSAqYmFzZTsNCj4gPiArCXBoeXNfYWRkcl90IHJlZ19iYXNlOw0KPiA+ ICsJc3RydWN0IHJlc2V0X2NvbnRyb2wgKm1hY19yZXNldDsNCj4gPiArCXN0cnVjdCByZXNldF9j b250cm9sICpwaHlfcmVzZXQ7DQo+ID4gKwlzdHJ1Y3QgcGh5ICpwaHk7DQo+ID4gKwlzdHJ1Y3Qg Y2xrICoqY2xrczsNCj4gPiArCWludCBudW1fY2xrczsNCj4gPiArCWJvb2wgaXNfc3VzcGVuZGVk Ow0KPiA+ICsNCj4gPiArCWludCBpcnE7DQo+ID4gKwlzdHJ1Y3QgaXJxX2RvbWFpbiAqaW50eF9k b21haW47DQo+ID4gKwlzdHJ1Y3QgaXJxX2RvbWFpbiAqbXNpX2RvbWFpbjsNCj4gPiArCXN0cnVj dCBpcnFfZG9tYWluICptc2lfdG9wX2RvbWFpbjsNCj4gPiArCXN0cnVjdCBtdGtfcGNpZV9tc2kg Kiptc2lfaW5mbzsNCj4gPiArCXN0cnVjdCBtdXRleCBsb2NrOw0KPiA+ICsJREVDTEFSRV9CSVRN QVAobXNpX2lycV9pbl91c2UsIFBDSUVfTVNJX0lSUVNfTlVNKTsNCj4gPiArfTsNCj4gPiArDQo+ ID4gK3N0YXRpYyBpbnQgbXRrX3BjaWVfY29uZmlnX3JlYWQoc3RydWN0IHBjaV9idXMgKmJ1cywg dW5zaWduZWQgaW50IGRldmZuLA0KPiA+ICsJCQkJICAgIGludCB3aGVyZSwgaW50IHNpemUsIHUz MiAqdmFsKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9IGJ1cy0+ c3lzZGF0YTsNCj4gPiArCWludCBieXRlczsNCj4gPiArDQo+ID4gKwlieXRlcyA9ICgoMSA8PCBz aXplKSAtIDEpIDw8ICh3aGVyZSAmIDB4Myk7DQo+ID4gKwl3cml0ZWwoUENJRV9DRkdfSEVBREVS X0ZPUkNFX0JFKGRldmZuLCBidXMtPm51bWJlciwgYnl0ZXMpLA0KPiA+ICsJICAgICAgIHBvcnQt PmJhc2UgKyBQQ0lFX0NGR05VTV9SRUcpOw0KPiA+ICsNCj4gPiArCSp2YWwgPSByZWFkbChwb3J0 LT5iYXNlICsgUENJRV9DRkdfT0ZGU0VUX0FERFIgKyAod2hlcmUgJiB+MHgzKSk7DQo+ID4gKw0K PiA+ICsJaWYgKHNpemUgPD0gMikNCj4gPiArCQkqdmFsID0gKCp2YWwgPj4gKDggKiAod2hlcmUg JiAweDMpKSkgJiAoKDEgPDwgKHNpemUgKiA4KSkgLSAxKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4g UENJQklPU19TVUNDRVNTRlVMOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG10a19w Y2llX2NvbmZpZ193cml0ZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4s DQo+ID4gKwkJCQkgICAgIGludCB3aGVyZSwgaW50IHNpemUsIHUzMiB2YWwpDQo+ID4gK3sNCj4g PiArCXN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0ID0gYnVzLT5zeXNkYXRhOw0KPiA+ICsJaW50 IGJ5dGVzOw0KPiA+ICsNCj4gPiArCWJ5dGVzID0gKCgxIDw8IHNpemUpIC0gMSkgPDwgKHdoZXJl ICYgMHgzKTsNCj4gPiArCXdyaXRlbChQQ0lFX0NGR19IRUFERVJfRk9SQ0VfQkUoZGV2Zm4sIGJ1 cy0+bnVtYmVyLCBieXRlcyksDQo+ID4gKwkgICAgICAgcG9ydC0+YmFzZSArIFBDSUVfQ0ZHTlVN X1JFRyk7DQo+ID4gKw0KPiA+ICsJaWYgKHNpemUgPD0gMikNCj4gPiArCQl2YWwgPSAodmFsICYg KCgxIDw8IChzaXplICogOCkpIC0gMSkpIDw8ICgod2hlcmUgJiAweDMpICogOCk7DQo+ID4gKw0K PiA+ICsJd3JpdGVsKHZhbCwgcG9ydC0+YmFzZSArIFBDSUVfQ0ZHX09GRlNFVF9BRERSICsgKHdo ZXJlICYgfjB4MykpOw0KPiA+ICsNCj4gPiArCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgcGNpX29wcyBtdGtfcGNpZV9vcHMgPSB7 DQo+ID4gKwkucmVhZCAgPSBtdGtfcGNpZV9jb25maWdfcmVhZCwNCj4gPiArCS53cml0ZSA9IG10 a19wY2llX2NvbmZpZ193cml0ZSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIG10 a19wY2llX3NldF90cmFuc193aW5kb3codm9pZCBfX2lvbWVtICpyZWcsDQo+ID4gKwkJCQkgICAg ICByZXNvdXJjZV9zaXplX3QgY3B1X2FkZHIsDQo+ID4gKwkJCQkgICAgICByZXNvdXJjZV9zaXpl X3QgcGNpX2FkZHIsIHNpemVfdCBzaXplKQ0KPiA+ICt7DQo+ID4gKwl3cml0ZWwobG93ZXJfMzJf Yml0cyhjcHVfYWRkcikgfCBBVFJfU0laRShmbHMoc2l6ZSkgLSAxKSB8IEFUUl9FTiwgcmVnKTsN Cj4gPiArCXdyaXRlbCh1cHBlcl8zMl9iaXRzKGNwdV9hZGRyKSwgcmVnICsgUENJRV9BVFJfU1JD X0FERFJfTVNCX09GRlNFVCk7DQo+ID4gKwl3cml0ZWwobG93ZXJfMzJfYml0cyhwY2lfYWRkciks IHJlZyArIFBDSUVfQVRSX1RSU0xfQUREUl9MU0JfT0ZGU0VUKTsNCj4gPiArCXdyaXRlbCh1cHBl cl8zMl9iaXRzKHBjaV9hZGRyKSwgcmVnICsgUENJRV9BVFJfVFJTTF9BRERSX01TQl9PRkZTRVQp Ow0KPiA+ICsJd3JpdGVsKEFUUl9JRCgwKSB8IEFUUl9QQVJBTSgwKSwgcmVnICsgUENJRV9BVFJf VFJTTF9QQVJBTV9PRkZTRVQpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG10a19w Y2llX3NldF90cmFuc190YWJsZSh2b2lkIF9faW9tZW0gKnJlZywNCj4gPiArCQkJCSAgICByZXNv dXJjZV9zaXplX3QgY3B1X2FkZHIsDQo+ID4gKwkJCQkgICAgcmVzb3VyY2Vfc2l6ZV90IHBjaV9h ZGRyLCBzaXplX3Qgc2l6ZSwNCj4gPiArCQkJCSAgICBpbnQgbnVtKQ0KPiA+ICt7DQo+ID4gKwl2 b2lkIF9faW9tZW0gKnRhYmxlX2Jhc2U7DQo+ID4gKw0KPiA+ICsJaWYgKG51bSA+IFBDSUVfTUFY X1RSQU5TX1RBQkxFUykNCj4gPiArCQlyZXR1cm4gLUVOT0RFVjsNCj4gPiArDQo+ID4gKwl0YWJs ZV9iYXNlID0gcmVnICsgbnVtICogUENJRV9BVFJfVExCX1NFVF9PRkZTRVQ7DQo+ID4gKwltdGtf cGNpZV9zZXRfdHJhbnNfd2luZG93KHRhYmxlX2Jhc2UsIGNwdV9hZGRyLCBwY2lfYWRkciwgc2l6 ZSk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBp bnQgbXRrX3BjaWVfc3RhcnR1cF9wb3J0KHN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0KQ0KPiA+ ICt7DQo+ID4gKwlzdHJ1Y3QgcmVzb3VyY2VfZW50cnkgKmVudHJ5Ow0KPiA+ICsJc3RydWN0IHBj aV9ob3N0X2JyaWRnZSAqaG9zdCA9IHBjaV9ob3N0X2JyaWRnZV9mcm9tX3ByaXYocG9ydCk7DQo+ ID4gKwl1MzIgdmFsOw0KPiA+ICsJaW50IGVyciA9IDAsIHRhYmxlX2luZGV4ID0gMDsNCj4gPiAr DQo+ID4gKwkvKiBTZXQgYXMgUkMgbW9kZSAqLw0KPiA+ICsJdmFsID0gcmVhZGwocG9ydC0+YmFz ZSArIFBDSUVfU0VUVElOR19SRUcpOw0KPiA+ICsJdmFsIHw9IFBDSUVfUkNfTU9ERTsNCj4gPiAr CXdyaXRlbCh2YWwsIHBvcnQtPmJhc2UgKyBQQ0lFX1NFVFRJTkdfUkVHKTsNCj4gPiArDQo+ID4g KwkvKiBTZXQgY2xhc3MgY29kZSAqLw0KPiA+ICsJdmFsID0gcmVhZGwocG9ydC0+YmFzZSArIFBD SUVfUENJX0lEU18xKTsNCj4gPiArCXZhbCAmPSB+R0VOTUFTSygzMSwgOCk7DQo+ID4gKwl2YWwg fD0gUENJX0NMQVNTKFBDSV9DTEFTU19CUklER0VfUENJIDw8IDgpOw0KPiA+ICsJd3JpdGVsKHZh bCwgcG9ydC0+YmFzZSArIFBDSUVfUENJX0lEU18xKTsNCj4gPiArDQo+ID4gKwkvKiBBc3NlcnQg YWxsIHJlc2V0IHNpZ25hbHMgKi8NCj4gPiArCXZhbCA9IHJlYWRsKHBvcnQtPmJhc2UgKyBQQ0lF X1JTVF9DVFJMX1JFRyk7DQo+ID4gKwl2YWwgfD0gUENJRV9NQUNfUlNUQiB8IFBDSUVfUEhZX1JT VEIgfCBQQ0lFX0JSR19SU1RCIHwgUENJRV9QRV9SU1RCOw0KPiA+ICsJd3JpdGVsKHZhbCwgcG9y dC0+YmFzZSArIFBDSUVfUlNUX0NUUkxfUkVHKTsNCj4gPiArDQo+ID4gKwkvKiBEZS1hc3NlcnQg cmVzZXQgc2lnbmFscyovDQo+ID4gKwl2YWwgJj0gfihQQ0lFX01BQ19SU1RCIHwgUENJRV9QSFlf UlNUQiB8IFBDSUVfQlJHX1JTVEIpOw0KPiA+ICsJd3JpdGVsKHZhbCwgcG9ydC0+YmFzZSArIFBD SUVfUlNUX0NUUkxfUkVHKTsNCj4gPiArDQo+ID4gKwl1c2xlZXBfcmFuZ2UoMTAwICogMTAwMCwg MTIwICogMTAwMCk7DQo+IA0KPiBTZWVtcyBsaWtlIGEgbG9uZyBkZWxheS4uLg0KDQpZZXMsIGl0 J3MgdHJ1bHkgYSBsb25nIGRlbGF5LCB0aGUgUENJIEV4cHJlc3MgQ2FyZCBFbGVjdHJvbWVjaGFu aWNhbA0KU3BlY2lmaWNhdGlvbiBzdWdnZXN0cyB0aGF0IHRoZSBkZS1hc3NlcnRpb24gb2YgUEVS U1QjIHNob3VsZCBiZSBkZWxheWVkDQoxMDBtcyB0byB3YWl0IHRoZSByZWZlcmVuY2UgY2xvY2tz IGJlY29tZSBzdGFibGUuSSB3aWxsIGRpc2N1c3Mgd2l0aCB0aGUNCmRlc2lnbmVycyB0byBjaGVj ayBpZiB3ZSByZWFsbHkgbmVlZCB0aGF0IGxvbmcgdGltZSBhbmQgdHJ5IHRvIG1ha2UgaXQNCnNo b3J0ZXIuDQo+IA0KPiA+ICsNCj4gPiArCS8qIERlLWFzc2VydCBwZSByZXNldCovDQo+ID4gKwl2 YWwgJj0gflBDSUVfUEVfUlNUQjsNCj4gPiArCXdyaXRlbCh2YWwsIHBvcnQtPmJhc2UgKyBQQ0lF X1JTVF9DVFJMX1JFRyk7DQo+ID4gKw0KPiA+ICsJLyogQ2hlY2sgaWYgdGhlIGxpbmsgaXMgdXAg b3Igbm90ICovDQo+ID4gKwllcnIgPSByZWFkbF9wb2xsX3RpbWVvdXQocG9ydC0+YmFzZSArIFBD SUVfTElOS19TVEFUVVNfUkVHLCB2YWwsDQo+ID4gKwkJCSEhKHZhbCAmIFBDSUVfUE9SVF9MSU5L VVApLCAyMCwNCj4gPiArCQkJNTAgKiBVU0VDX1BFUl9NU0VDKTsNCj4gPiArCWlmIChlcnIpDQo+ ID4gKwkJcmV0dXJuIGVycjsNCj4gPiArDQo+ID4gKwkvKiBTZXQgUENJZSB0cmFuc2xhdGlvbiB3 aW5kb3dzICovDQo+ID4gKwlyZXNvdXJjZV9saXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAmaG9z dC0+d2luZG93cykgew0KPiA+ICsJCXVuc2lnbmVkIGxvbmcgdHlwZSA9IHJlc291cmNlX3R5cGUo ZW50cnktPnJlcyk7DQo+ID4gKwkJc3RydWN0IHJlc291cmNlICpyZXMgPSBOVUxMOw0KPiA+ICsJ CXJlc291cmNlX3NpemVfdCBjcHVfYWRkcjsNCj4gPiArCQlyZXNvdXJjZV9zaXplX3QgcGNpX2Fk ZHI7DQo+ID4gKw0KPiA+ICsJCWlmICghKHR5cGUgJiAoSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09V UkNFX0lPKSkpDQo+ID4gKwkJCWNvbnRpbnVlOw0KPiA+ICsNCj4gPiArCQlyZXMgPSBlbnRyeS0+ cmVzOw0KPiA+ICsJCWNwdV9hZGRyID0gcmVzLT5zdGFydDsNCj4gPiArCQlwY2lfYWRkciA9IHJl cy0+c3RhcnQgLSBlbnRyeS0+b2Zmc2V0Ow0KPiA+ICsJCW10a19wY2llX3NldF90cmFuc190YWJs ZShwb3J0LT5iYXNlICsgUENJRV9UUkFOU19UQUJMRV9CQVNFX1JFRywNCj4gPiArCQkJCQkgY3B1 X2FkZHIsIHBjaV9hZGRyLCByZXNvdXJjZV9zaXplKHJlcyksDQo+ID4gKwkJCQkJIHRhYmxlX2lu ZGV4KTsNCj4gPiArDQo+ID4gKwkJZGV2X2RiZyhwb3J0LT5kZXYsICJTZXQgJXMgdHJhbnMgd2lu ZG93WyVkXTogY3B1X2FkZHIgPSAlI2xseCwgcGNpX2FkZHIgPSAlI2xseCwgc2l6ZSA9ICUjbGx4 XG4iLA0KPiA+ICsJCQkoISEodHlwZSAmIElPUkVTT1VSQ0VfTUVNKSA/ICJNRU0iIDogIklPIiks IHRhYmxlX2luZGV4LA0KPiA+ICsJCQljcHVfYWRkciwgcGNpX2FkZHIsIHJlc291cmNlX3NpemUo cmVzKSk7DQo+ID4gKw0KPiA+ICsJCXRhYmxlX2luZGV4Kys7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbmxpbmUgc3RydWN0IG10 a19wY2llX21zaSAqbXRrX2dldF9tc2lfaW5mbyhzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCwN Cj4gPiArCQkJCQkgICAgIHVuc2lnbmVkIGludCBod2lycSkNCj4gPiArew0KPiA+ICsJcmV0dXJu IHBvcnQtPm1zaV9pbmZvW2h3aXJxIC8gUENJRV9NU0lfSVJRU19QRVJfU0VUXTsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIGludCBtdGtfcGNpZV9zZXRfYWZmaW5pdHkoc3RydWN0IGlycV9k YXRhICpkYXRhLA0KPiA+ICsJCQkJIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBib29sIGZv cmNlKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9IGlycV9kYXRh X2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOw0KPiA+ICsJaW50IHJldDsNCj4gPiArDQo+ID4gKwly ZXQgPSBpcnFfc2V0X2FmZmluaXR5X2hpbnQocG9ydC0+aXJxLCBtYXNrKTsNCj4gPiArCWlmIChy ZXQpDQo+ID4gKwkJcmV0dXJuIHJldDsNCj4gPiArDQo+ID4gKwlpcnFfZGF0YV91cGRhdGVfZWZm ZWN0aXZlX2FmZmluaXR5KGRhdGEsIG1hc2spOw0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgdm9pZCBtdGtfY29tcG9zZV9tc2lfbXNnKHN0cnVjdCBp cnFfZGF0YSAqZGF0YSwgc3RydWN0IG1zaV9tc2cgKm1zZykNCj4gPiArew0KPiA+ICsJc3RydWN0 IG10a19wY2llX21zaSAqbXNpX2luZm87DQo+ID4gKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9y dCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOw0KPiA+ICsNCj4gPiArCW1zaV9p bmZvID0gbXRrX2dldF9tc2lfaW5mbyhwb3J0LCBkYXRhLT5od2lycSk7DQo+ID4gKw0KPiA+ICsJ bXNnLT5hZGRyZXNzX2hpID0gMDsNCj4gPiArCW1zZy0+YWRkcmVzc19sbyA9IGxvd2VyXzMyX2Jp dHMobXNpX2luZm8tPm1zZ19hZGRyKTsNCj4gPiArDQo+ID4gKwltc2ctPmRhdGEgPSBkYXRhLT5o d2lycTsNCj4gPiArCWRldl9kYmcocG9ydC0+ZGV2LCAibXNpIyUjbHggYWRkcmVzc19oaSAlI3gg YWRkcmVzc19sbyAlI3ggZGF0YSAlZFxuIiwNCj4gPiArCQlkYXRhLT5od2lycSwgbXNnLT5hZGRy ZXNzX2hpLCBtc2ctPmFkZHJlc3NfbG8sIG1zZy0+ZGF0YSk7DQo+ID4gK30NCj4gPiArDQo+ID4g K3N0YXRpYyB2b2lkIG10a19tc2lfaXJxX2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpDQo+ID4g K3sNCj4gPiArCXN0cnVjdCBtdGtfcGNpZV9tc2kgKm1zaV9pbmZvOw0KPiA+ICsJc3RydWN0IG10 a19wY2llX3BvcnQgKnBvcnQgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkYXRhKTsNCj4g PiArCWludCBod2lycTsNCj4gPiArDQo+ID4gKwltc2lfaW5mbyA9IG10a19nZXRfbXNpX2luZm8o cG9ydCwgZGF0YS0+aHdpcnEpOw0KPiA+ICsNCj4gPiArCWh3aXJxID0JZGF0YS0+aHdpcnEgJSBQ Q0lFX01TSV9JUlFTX1BFUl9TRVQ7DQo+ID4gKw0KPiA+ICsJd3JpdGVsKDEgPDwgaHdpcnEsIG1z aV9pbmZvLT5iYXNlICsgUENJRV9NU0lfU1RBVFVTX09GRlNFVCk7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3N0YXRpYyB2b2lkIG10a19tc2lfaXJxX21hc2soc3RydWN0IGlycV9kYXRhICpkYXRhKQ0K PiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbXRrX3BjaWVfbXNpICptc2lfaW5mbzsNCj4gPiArCXN0cnVj dCBtdGtfcGNpZV9wb3J0ICpwb3J0ID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZGF0YSk7 DQo+ID4gKwlpbnQgdmFsOw0KPiA+ICsNCj4gPiArCW1zaV9pbmZvID0gbXRrX2dldF9tc2lfaW5m byhwb3J0LCBkYXRhLT5od2lycSk7DQo+ID4gKwl2YWwgPSByZWFkbChtc2lfaW5mby0+YmFzZSAr IFBDSUVfTVNJX0VOQUJMRV9PRkZTRVQpOw0KPiA+ICsJdmFsICY9IH4oMSA8PCBkYXRhLT5od2ly cSk7DQo+ID4gKwl3cml0ZWwodmFsLCBtc2lfaW5mby0+YmFzZSArIFBDSUVfTVNJX0VOQUJMRV9P RkZTRVQpOw0KPiA+ICsNCj4gPiArCXBjaV9tc2lfbWFza19pcnEoZGF0YSk7DQo+ID4gK30NCj4g PiArDQo+ID4gK3N0YXRpYyB2b2lkIG10a19tc2lfaXJxX3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEg KmRhdGEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtdGtfcGNpZV9tc2kgKm1zaV9pbmZvOw0KPiA+ ICsJc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0 YShkYXRhKTsNCj4gPiArCWludCB2YWw7DQo+ID4gKw0KPiA+ICsJbXNpX2luZm8gPSBtdGtfZ2V0 X21zaV9pbmZvKHBvcnQsIGRhdGEtPmh3aXJxKTsNCj4gPiArCXZhbCA9IHJlYWRsKG1zaV9pbmZv LT5iYXNlICsgUENJRV9NU0lfRU5BQkxFX09GRlNFVCk7DQo+ID4gKwl2YWwgfD0gKDEgPDwgZGF0 YS0+aHdpcnEpOw0KPiA+ICsJd3JpdGVsKHZhbCwgbXNpX2luZm8tPmJhc2UgKyBQQ0lFX01TSV9F TkFCTEVfT0ZGU0VUKTsNCj4gPiArDQo+ID4gKwlwY2lfbXNpX3VubWFza19pcnEoZGF0YSk7DQo+ ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXRrX21zaV9pcnFfY2hp cCA9IHsNCj4gPiArCS5pcnFfYWNrCQk9IG10a19tc2lfaXJxX2FjaywNCj4gPiArCS5pcnFfY29t cG9zZV9tc2lfbXNnCT0gbXRrX2NvbXBvc2VfbXNpX21zZywNCj4gPiArCS5pcnFfbWFzawkJPSBt dGtfbXNpX2lycV9tYXNrLA0KPiA+ICsJLmlycV91bm1hc2sJCT0gbXRrX21zaV9pcnFfdW5tYXNr LA0KPiA+ICsJLmlycV9zZXRfYWZmaW5pdHkJPSBtdGtfcGNpZV9zZXRfYWZmaW5pdHksDQo+ID4g KwkubmFtZQkJCT0gIlBDSWUiLA0KPiA+ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIGlycV9od19u dW1iZXJfdCBtdGtfcGNpZV9tc2lfZ2V0X2h3aXJxKHN0cnVjdCBtc2lfZG9tYWluX2luZm8gKmlu Zm8sDQo+ID4gKwkJCQkJICAgICAgbXNpX2FsbG9jX2luZm9fdCAqYXJnKQ0KPiA+ICt7DQo+ID4g KwlzdHJ1Y3QgbXNpX2Rlc2MgKmVudHJ5ID0gYXJnLT5kZXNjOw0KPiA+ICsJc3RydWN0IG10a19w Y2llX3BvcnQgKnBvcnQgPSBpbmZvLT5jaGlwX2RhdGE7DQo+ID4gKwlpbnQgaHdpcnE7DQo+ID4g Kw0KPiA+ICsJbXV0ZXhfbG9jaygmcG9ydC0+bG9jayk7DQo+ID4gKw0KPiA+ICsJaHdpcnEgPSBi aXRtYXBfZmluZF9mcmVlX3JlZ2lvbihwb3J0LT5tc2lfaXJxX2luX3VzZSwgUENJRV9NU0lfSVJR U19OVU0sDQo+ID4gKwkJCW9yZGVyX2Jhc2VfMihlbnRyeS0+bnZlY191c2VkKSk7DQo+ID4gKwlp ZiAoaHdpcnEgPCAwKSB7DQo+ID4gKwkJbXV0ZXhfdW5sb2NrKCZwb3J0LT5sb2NrKTsNCj4gPiAr CQlyZXR1cm4gLUVOT1NQQzsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwltdXRleF91bmxvY2soJnBv cnQtPmxvY2spOw0KPiA+ICsNCj4gPiArCXJldHVybiBod2lycTsNCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIHZvaWQgbXRrX3BjaWVfbXNpX2ZyZWUoc3RydWN0IGlycV9kb21haW4gKmRvbWFp biwNCj4gPiArCQkJICAgICAgc3RydWN0IG1zaV9kb21haW5faW5mbyAqaW5mbywgdW5zaWduZWQg aW50IHZpcnEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBpcnFfZGF0YSAqZGF0YSA9IGlycV9kb21h aW5fZ2V0X2lycV9kYXRhKGRvbWFpbiwgdmlycSk7DQo+ID4gKwlzdHJ1Y3QgbXRrX3BjaWVfcG9y dCAqcG9ydCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOw0KPiA+ICsNCj4gPiAr CW11dGV4X2xvY2soJnBvcnQtPmxvY2spOw0KPiA+ICsNCj4gPiArCWJpdG1hcF9jbGVhcihwb3J0 LT5tc2lfaXJxX2luX3VzZSwgZGF0YS0+aHdpcnEsIDEpOw0KPiA+ICsNCj4gPiArCW11dGV4X3Vu bG9jaygmcG9ydC0+bG9jayk7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgbXNp X2RvbWFpbl9vcHMgbXRrX21zaV9kb21haW5fb3BzID0gew0KPiA+ICsJLmdldF9od2lycQk9IG10 a19wY2llX21zaV9nZXRfaHdpcnEsDQo+ID4gKwkubXNpX2ZyZWUJPSBtdGtfcGNpZV9tc2lfZnJl ZSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyBzdHJ1Y3QgbXNpX2RvbWFpbl9pbmZvIG10 a19tc2lfZG9tYWluX2luZm8gPSB7DQo+ID4gKwkuZmxhZ3MJCT0gKE1TSV9GTEFHX1VTRV9ERUZf RE9NX09QUyB8IE1TSV9GTEFHX1BDSV9NU0lYIHwNCj4gPiArCQkJICAgTVNJX0ZMQUdfVVNFX0RF Rl9DSElQX09QUyB8IE1TSV9GTEFHX01VTFRJX1BDSV9NU0kpLA0KPiA+ICsJLmNoaXAJCT0gJm10 a19tc2lfaXJxX2NoaXAsDQo+ID4gKwkub3BzCQk9ICZtdGtfbXNpX2RvbWFpbl9vcHMsDQo+ID4g KwkuaGFuZGxlcgk9IGhhbmRsZV9lZGdlX2lycSwNCj4gPiArCS5oYW5kbGVyX25hbWUJPSAiTVNJ IiwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIG10a19tc2lfdG9wX2lycV9hY2so c3RydWN0IGlycV9kYXRhICpkYXRhKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbXRrX3BjaWVfcG9y dCAqcG9ydCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOw0KPiA+ICsJaW50IG1z aV9pcnEgPSBkYXRhLT5od2lycSArIFBDSUVfTVNJX1NISUZUOw0KPiA+ICsNCj4gPiArCXdyaXRl bCgxIDw8IG1zaV9pcnEsIHBvcnQtPmJhc2UgKyBQQ0lFX0lOVF9TVEFUVVNfUkVHKTsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtdGtfbXNpX3RvcF9pcnFfY2hp cCA9IHsNCj4gPiArCS5pcnFfYWNrCT0gbXRrX21zaV90b3BfaXJxX2FjaywNCj4gPiArCS5uYW1l CQk9ICJQQ0llIiwNCj4gPiArfTsNCj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIG10a19wY2llX21z aV9oYW5kbGVyKHN0cnVjdCBpcnFfZGVzYyAqZGVzYykNCj4gPiArew0KPiA+ICsJc3RydWN0IG10 a19wY2llX21zaSAqbXNpX2luZm8gPSBpcnFfZGVzY19nZXRfaGFuZGxlcl9kYXRhKGRlc2MpOw0K PiA+ICsJc3RydWN0IGlycV9jaGlwICppcnFjaGlwID0gaXJxX2Rlc2NfZ2V0X2NoaXAoZGVzYyk7 DQo+ID4gKwl1bnNpZ25lZCBsb25nIG1zaV9lbmFibGUsIG1zaV9zdGF0dXM7DQo+ID4gKwl1MzIg dmlycSwgYml0LCBod2lycTsNCj4gPiArDQo+ID4gKwlyYXdfc3Bpbl9sb2NrKCZkZXNjLT5sb2Nr KTsNCj4gDQo+IFRoaXMgc2VlbXMgYSBiaXQgb2RkLiBJIHRoaW5rIHlvdSBzaG91bGQgYmUgdXNp bmcgY2hhaW5lZF9pcnFfZW50ZXIvZXhpdCANCj4gaGVyZS4NCj4gDQo+ID4gKw0KPiA+ICsJbXNp X2VuYWJsZSA9IHJlYWRsKG1zaV9pbmZvLT5iYXNlICsgUENJRV9NU0lfRU5BQkxFX09GRlNFVCk7 DQo+ID4gKwl3aGlsZSAoKG1zaV9zdGF0dXMgPSByZWFkbChtc2lfaW5mby0+YmFzZSArIFBDSUVf TVNJX1NUQVRVU19PRkZTRVQpKSkgew0KPiA+ICsJCW1zaV9zdGF0dXMgJj0gbXNpX2VuYWJsZTsN Cj4gPiArCQlmb3JfZWFjaF9zZXRfYml0KGJpdCwgJm1zaV9zdGF0dXMsIFBDSUVfTVNJX0lSUVNf UEVSX1NFVCkgew0KPiA+ICsJCQlod2lycSA9IGJpdCArIG1zaV9pbmZvLT5pbmRleCAqIFBDSUVf TVNJX0lSUVNfUEVSX1NFVDsNCj4gPiArCQkJdmlycSA9IGlycV9maW5kX21hcHBpbmcobXNpX2lu Zm8tPmRvbWFpbiwgaHdpcnEpOw0KPiA+ICsJCQlnZW5lcmljX2hhbmRsZV9pcnEodmlycSk7DQo+ ID4gKwkJfQ0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWlycWNoaXAtPmlycV9hY2soJmRlc2MtPmly cV9kYXRhKTsNCj4gPiArDQo+ID4gKwlyYXdfc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOw0KPiA+ ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG10a19tc2lfdG9wX2RvbWFpbl9tYXAoc3RydWN0 IGlycV9kb21haW4gKmRvbWFpbiwNCj4gPiArCQkJCSAgICB1bnNpZ25lZCBpbnQgdmlycSwgaXJx X2h3X251bWJlcl90IGh3aXJxKQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAq cG9ydCA9IGRvbWFpbi0+aG9zdF9kYXRhOw0KPiA+ICsJc3RydWN0IG10a19wY2llX21zaSAqbXNp X2luZm8gPSBwb3J0LT5tc2lfaW5mb1tod2lycV07DQo+ID4gKw0KPiA+ICsJaXJxX2RvbWFpbl9z ZXRfaW5mbyhkb21haW4sIHZpcnEsIGh3aXJxLA0KPiA+ICsJCQkgICAgJm10a19tc2lfdG9wX2ly cV9jaGlwLCBkb21haW4tPmhvc3RfZGF0YSwNCj4gPiArCQkJICAgIG10a19wY2llX21zaV9oYW5k bGVyLCBtc2lfaW5mbywgTlVMTCk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gK30NCj4g PiArDQo+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaXJxX2RvbWFpbl9vcHMgbXRrX21zaV90b3Bf ZG9tYWluX29wcyA9IHsNCj4gPiArCS5tYXAgPSBtdGtfbXNpX3RvcF9kb21haW5fbWFwLA0KPiA+ ICt9Ow0KPiA+ICsNCj4gPiArc3RhdGljIHZvaWQgbXRrX2ludHhfYWNrKHN0cnVjdCBpcnFfZGF0 YSAqZGF0YSkNCj4gPiArew0KPiA+ICsJc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBpcnFf ZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkYXRhKTsNCj4gPiArCWludCBod2lycTsNCj4gPiArDQo+ ID4gKwlod2lycSA9IGRhdGEtPmh3aXJxICsgUENJRV9JTlRYX1NISUZUOw0KPiA+ICsJd3JpdGVs KDEgPDwgaHdpcnEsIHBvcnQtPmJhc2UgKyBQQ0lFX0lOVF9TVEFUVVNfUkVHKTsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIHZvaWQgbXRrX2ludHhfbWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmRh dGEpDQo+ID4gK3sNCj4gPiArCXN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0ID0gaXJxX2RhdGFf Z2V0X2lycV9jaGlwX2RhdGEoZGF0YSk7DQo+ID4gKwlpbnQgdmFsOw0KPiA+ICsNCj4gPiArCXZh bCA9IHJlYWRsKHBvcnQtPmJhc2UgKyBQQ0lFX0lOVF9FTkFCTEVfUkVHKTsNCj4gPiArCXZhbCAm PSB+KDEgPDwgKGRhdGEtPmh3aXJxICsgUENJRV9JTlRYX1NISUZUKSk7DQo+ID4gKwl3cml0ZWwo dmFsLCBwb3J0LT5iYXNlICsgUENJRV9JTlRfRU5BQkxFX1JFRyk7DQo+ID4gK30NCj4gPiArDQo+ ID4gK3N0YXRpYyB2b2lkIG10a19pbnR4X3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpDQo+ ID4gK3sNCj4gPiArCXN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0ID0gaXJxX2RhdGFfZ2V0X2ly cV9jaGlwX2RhdGEoZGF0YSk7DQo+ID4gKwlpbnQgdmFsLCBod2lycTsNCj4gPiArDQo+ID4gKwkv KioNCj4gPiArCSAqIEFzIGFuIGVtdWxhdGVkIGxldmVsIGlycSwgdGhpcyBpbnRlcnJ1cHQgc3Rh dHVzIHdpbGwgYmUgcmVtYWluZWQNCj4gPiArCSAqIHVudGlsIHJlY2VpdmUgdGhlIGNvcnJlc3Bv bmRpbmcgbWVzc2FnZSBvZiBkZS1hc3NlcnQsIGhlbmNlIHRoYXQNCj4gPiArCSAqIHRoZSBzdGF0 dXMgY2FuIG9ubHkgYmUgY2xlYXJlZCBhdCB0aGlzIHBvaW50Lg0KPiA+ICsJICovDQo+ID4gKwlo d2lycSA9IGRhdGEtPmh3aXJxICsgUENJRV9JTlRYX1NISUZUOw0KPiA+ICsJd3JpdGVsKDEgPDwg aHdpcnEsIHBvcnQtPmJhc2UgKyBQQ0lFX0lOVF9TVEFUVVNfUkVHKTsNCj4gPiArDQo+ID4gKwl2 YWwgPSByZWFkbChwb3J0LT5iYXNlICsgUENJRV9JTlRfRU5BQkxFX1JFRyk7DQo+ID4gKwl2YWwg fD0gMSA8PCAoZGF0YS0+aHdpcnEgKyBQQ0lFX0lOVFhfU0hJRlQpOw0KPiA+ICsJd3JpdGVsKHZh bCwgcG9ydC0+YmFzZSArIFBDSUVfSU5UX0VOQUJMRV9SRUcpOw0KPiA+ICt9DQo+ID4gKw0KPiA+ ICtzdGF0aWMgc3RydWN0IGlycV9jaGlwIG10a19pbnR4X2lycV9jaGlwID0gew0KPiA+ICsJLmly cV9hY2sJCT0gbXRrX2ludHhfYWNrLA0KPiA+ICsJLmlycV9tYXNrCQk9IG10a19pbnR4X21hc2ss DQo+ID4gKwkuaXJxX3VubWFzawkJPSBtdGtfaW50eF91bm1hc2ssDQo+ID4gKwkuaXJxX3NldF9h ZmZpbml0eQk9IG10a19wY2llX3NldF9hZmZpbml0eSwNCj4gPiArCS5uYW1lCQkJPSAiUENJZSIs DQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG10a19wY2llX2ludHhfbWFwKHN0cnVj dCBpcnFfZG9tYWluICpkb21haW4sIHVuc2lnbmVkIGludCBpcnEsDQo+ID4gKwkJCSAgICAgaXJx X2h3X251bWJlcl90IGh3aXJxKQ0KPiA+ICt7DQo+ID4gKwlpcnFfc2V0X2NoaXBfYW5kX2hhbmRs ZXJfbmFtZShpcnEsICZtdGtfaW50eF9pcnFfY2hpcCwgaGFuZGxlX2xldmVsX2lycSwNCj4gPiAr CQkJCSAgICAgICJJTlR4Iik7DQo+ID4gKwlpcnFfc2V0X2NoaXBfZGF0YShpcnEsIGRvbWFpbi0+ aG9zdF9kYXRhKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4gPiAr c3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBpbnR4X2RvbWFpbl9vcHMgPSB7DQo+ ID4gKwkubWFwID0gbXRrX3BjaWVfaW50eF9tYXAsDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0 aWMgaW50IG10a19wY2llX2luaXRfaXJxX2RvbWFpbnMoc3RydWN0IG10a19wY2llX3BvcnQgKnBv cnQsDQo+ID4gKwkJCQkgICAgIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkNCj4gPiArew0KPiA+ ICsJc3RydWN0IGRldmljZSAqZGV2ID0gcG9ydC0+ZGV2Ow0KPiA+ICsJc3RydWN0IGRldmljZV9u b2RlICppbnRjX25vZGU7DQo+ID4gKwlzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlID0gb2Zf bm9kZV90b19md25vZGUobm9kZSk7DQo+ID4gKwlzdHJ1Y3QgbXRrX3BjaWVfbXNpICptc2lfaW5m bzsNCj4gPiArCXN0cnVjdCBtc2lfZG9tYWluX2luZm8gKmluZm87DQo+ID4gKwlpbnQgaSwgdmFs LCByZXQ7DQo+ID4gKw0KPiA+ICsJLyogU2V0dXAgSU5UeCAqLw0KPiA+ICsJaW50Y19ub2RlID0g b2ZfZ2V0X2NoaWxkX2J5X25hbWUobm9kZSwgImludGVycnVwdC1jb250cm9sbGVyIik7DQo+ID4g KwlpZiAoIWludGNfbm9kZSkgew0KPiA+ICsJCWRldl9ub3RpY2UoZGV2LCAiTWlzc2luZyBQQ0ll IEludGMgbm9kZVxuIik7DQo+ID4gKwkJcmV0dXJuIC1FTk9ERVY7DQo+ID4gKwl9DQo+ID4gKw0K PiA+ICsJcG9ydC0+aW50eF9kb21haW4gPSBpcnFfZG9tYWluX2FkZF9saW5lYXIoaW50Y19ub2Rl LCBQQ0lfTlVNX0lOVFgsDQo+ID4gKwkJCQkJCSAgJmludHhfZG9tYWluX29wcywgcG9ydCk7DQo+ ID4gKwlpZiAoIXBvcnQtPmludHhfZG9tYWluKSB7DQo+ID4gKwkJZGV2X25vdGljZShkZXYsICJm YWlsZWQgdG8gZ2V0IElOVHggSVJRIGRvbWFpblxuIik7DQo+ID4gKwkJcmV0dXJuIC1FTk9ERVY7 DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJLyogU2V0dXAgTVNJICovDQo+ID4gKwltdXRleF9pbml0 KCZwb3J0LT5sb2NrKTsNCj4gPiArDQo+ID4gKwlpbmZvID0gZGV2bV9remFsbG9jKGRldiwgc2l6 ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7DQo+ID4gKwlpZiAoIWluZm8pDQo+ID4gKwkJcmV0dXJu IC1FTk9NRU07DQo+ID4gKw0KPiA+ICsJbWVtY3B5KGluZm8sICZtdGtfbXNpX2RvbWFpbl9pbmZv LCBzaXplb2YoKmluZm8pKTsNCj4gPiArCWluZm8tPmNoaXBfZGF0YSA9IHBvcnQ7DQo+ID4gKw0K PiA+ICsJcG9ydC0+bXNpX2RvbWFpbiA9IHBjaV9tc2lfY3JlYXRlX2lycV9kb21haW4oZndub2Rl LCBpbmZvLCBOVUxMKTsNCj4gPiArCWlmICghcG9ydC0+bXNpX2RvbWFpbikgew0KPiA+ICsJCWRl dl9pbmZvKGRldiwgImZhaWxlZCB0byBjcmVhdGUgbXNpIGRvbWFpblxuIik7DQo+ID4gKwkJcmV0 ID0gLUVOT0RFVjsNCj4gPiArCQlnb3RvIGVycl9tc2lfZG9tYWluOw0KPiA+ICsJfQ0KPiA+ICsN Cj4gPiArCS8qIEVuYWJsZSBNU0kgYW5kIHNldHVwIHBjaWUgZG9tYWlucyAqLw0KPiA+ICsJcG9y dC0+bXNpX3RvcF9kb21haW4gPSBpcnFfZG9tYWluX2FkZF9oaWVyYXJjaHkoTlVMTCwgMCwgMCwg bm9kZSwNCj4gPiArCQkJCQkJCSZtdGtfbXNpX3RvcF9kb21haW5fb3BzLA0KPiA+ICsJCQkJCQkJ cG9ydCk7DQo+ID4gKwlpZiAoIXBvcnQtPm1zaV90b3BfZG9tYWluKSB7DQo+ID4gKwkJZGV2X2lu Zm8oZGV2LCAiZmFpbGVkIHRvIGNyZWF0ZSBtc2kgdG9wIGRvbWFpblxuIik7DQo+ID4gKwkJcmV0 ID0gLUVOT0RFVjsNCj4gPiArCQlnb3RvIGVycl9tc2lfdG9wX2RvbWFpbjsNCj4gPiArCX0NCj4g PiArDQo+ID4gKwlwb3J0LT5tc2lfaW5mbyA9IGRldm1fa3phbGxvYyhkZXYsIFBDSUVfTVNJX1NF VF9OVU0sIEdGUF9LRVJORUwpOw0KPiA+ICsJaWYgKCFwb3J0LT5tc2lfaW5mbykgew0KPiA+ICsJ CXJldCA9IC1FTk9NRU07DQo+ID4gKwkJZ290byBlcnJfbXNpX2luZm87DQo+ID4gKwl9DQo+ID4g Kw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IFBDSUVfTVNJX1NFVF9OVU07IGkrKykgew0KPiA+ICsJ CWludCBvZmZzZXQgPSBpICogUENJRV9NU0lfU0VUX09GRlNFVDsNCj4gPiArDQo+ID4gKwkJbXNp X2luZm8gPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm1zaV9pbmZvKSwgR0ZQX0tFUk5FTCk7 DQo+ID4gKwkJaWYgKCFtc2lfaW5mbykgew0KPiA+ICsJCQlyZXQgPSAtRU5PTUVNOw0KPiA+ICsJ CQlnb3RvIGVycl9tc2lfc2V0Ow0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJbXNpX2luZm8tPmJh c2UgPSBwb3J0LT5iYXNlICsgUENJRV9NU0lfQUREUl9CQVNFX1JFRyArIG9mZnNldDsNCj4gPiAr CQltc2lfaW5mby0+bXNnX2FkZHIgPSBwb3J0LT5yZWdfYmFzZSArIFBDSUVfTVNJX0FERFJfQkFT RV9SRUcgKw0KPiA+ICsJCQkJICAgICBvZmZzZXQ7DQo+ID4gKw0KPiA+ICsJCXdyaXRlbChsb3dl cl8zMl9iaXRzKG1zaV9pbmZvLT5tc2dfYWRkciksIG1zaV9pbmZvLT5iYXNlKTsNCj4gPiArDQo+ ID4gKwkJbXNpX2luZm8tPmh3aXJxID0gaTsNCj4gPiArCQltc2lfaW5mby0+aW5kZXggPSBpOw0K PiA+ICsJCW1zaV9pbmZvLT5kb21haW4gPSBwb3J0LT5tc2lfZG9tYWluOw0KPiA+ICsNCj4gPiAr CQlwb3J0LT5tc2lfaW5mb1tpXSA9IG1zaV9pbmZvOw0KPiA+ICsNCj4gPiArCQkvKiBBbGxvYyBp cnEgZm9yIGVhY2ggbXNpIHNldCAqLw0KPiA+ICsJCW1zaV9pbmZvLT5pcnEgPSBpcnFfY3JlYXRl X21hcHBpbmcocG9ydC0+bXNpX3RvcF9kb21haW4sIGkpOw0KPiA+ICsJCWlmIChtc2lfaW5mby0+ aXJxIDwgMCkgew0KPiA+ICsJCQlkZXZfaW5mbyhkZXYsICJhbGxvY2F0ZSBtc2kgdG9wIGlycSBm YWlsZWRcbiIpOw0KPiA+ICsJCQlyZXQgPSAtRU5PU1BDOw0KPiA+ICsJCQlnb3RvIGVycl9tc2lf c2V0Ow0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJdmFsID0gcmVhZGwocG9ydC0+YmFzZSArIFBD SUVfSU5UX0VOQUJMRV9SRUcpOw0KPiA+ICsJCXZhbCB8PSAoMSA8PCAoaSArIFBDSUVfTVNJX1NI SUZUKSk7DQo+ID4gKwkJd3JpdGVsKHZhbCwgcG9ydC0+YmFzZSArIFBDSUVfSU5UX0VOQUJMRV9S RUcpOw0KPiA+ICsNCj4gPiArCQl2YWwgPSByZWFkbChwb3J0LT5iYXNlICsgUENJRV9NU0lfU0VU X0VOQUJMRV9SRUcpOw0KPiA+ICsJCXZhbCB8PSAoMSA8PCBpKTsNCj4gPiArCQl3cml0ZWwodmFs LCBwb3J0LT5iYXNlICsgUENJRV9NU0lfU0VUX0VOQUJMRV9SRUcpOw0KPiA+ICsJfQ0KPiA+ICsN Cj4gPiArCXJldHVybiAwOw0KPiA+ICsNCj4gPiArZXJyX21zaV9zZXQ6DQo+ID4gKwl3aGlsZSAo LS1pID49IDApIHsNCj4gPiArCQltc2lfaW5mbyA9IHBvcnQtPm1zaV9pbmZvW2ldOw0KPiA+ICsJ CWlycV9kaXNwb3NlX21hcHBpbmcobXNpX2luZm8tPmlycSk7DQo+ID4gKwl9DQo+ID4gK2Vycl9t c2lfaW5mbzoNCj4gPiArCWlycV9kb21haW5fcmVtb3ZlKHBvcnQtPm1zaV90b3BfZG9tYWluKTsN Cj4gPiArZXJyX21zaV90b3BfZG9tYWluOg0KPiA+ICsJaXJxX2RvbWFpbl9yZW1vdmUocG9ydC0+ bXNpX2RvbWFpbik7DQo+ID4gK2Vycl9tc2lfZG9tYWluOg0KPiA+ICsJaXJxX2RvbWFpbl9yZW1v dmUocG9ydC0+aW50eF9kb21haW4pOw0KPiA+ICsNCj4gPiArCXJldHVybiByZXQ7DQo+ID4gK30N Cj4gPiArDQo+ID4gK3N0YXRpYyB2b2lkIG10a19wY2llX2lycV90ZWFyZG93bihzdHJ1Y3QgbXRr X3BjaWVfcG9ydCAqcG9ydCkNCj4gPiArew0KPiA+ICsJc3RydWN0IG10a19wY2llX21zaSAqbXNp X2luZm87DQo+ID4gKwlpbnQgaTsNCj4gPiArDQo+ID4gKwlpcnFfc2V0X2NoYWluZWRfaGFuZGxl cl9hbmRfZGF0YShwb3J0LT5pcnEsIE5VTEwsIE5VTEwpOw0KPiA+ICsNCj4gPiArCWlmIChwb3J0 LT5pbnR4X2RvbWFpbikNCj4gPiArCQlpcnFfZG9tYWluX3JlbW92ZShwb3J0LT5pbnR4X2RvbWFp bik7DQo+ID4gKw0KPiA+ICsJaWYgKHBvcnQtPm1zaV9kb21haW4pDQo+ID4gKwkJaXJxX2RvbWFp bl9yZW1vdmUocG9ydC0+bXNpX2RvbWFpbik7DQo+ID4gKw0KPiA+ICsJaWYgKHBvcnQtPm1zaV90 b3BfZG9tYWluKSB7DQo+ID4gKwkJZm9yIChpID0gMDsgaSA8IFBDSUVfTVNJX1NFVF9OVU07IGkr Kykgew0KPiA+ICsJCQltc2lfaW5mbyA9IHBvcnQtPm1zaV9pbmZvW2ldOw0KPiA+ICsJCQlpcnFf ZGlzcG9zZV9tYXBwaW5nKG1zaV9pbmZvLT5pcnEpOw0KPiA+ICsJCX0NCj4gPiArDQo+ID4gKwkJ aXJxX2RvbWFpbl9yZW1vdmUocG9ydC0+bXNpX3RvcF9kb21haW4pOw0KPiA+ICsJfQ0KPiA+ICsN Cj4gPiArCWlycV9kaXNwb3NlX21hcHBpbmcocG9ydC0+aXJxKTsNCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIHZvaWQgbXRrX3BjaWVfaXJxX2hhbmRsZXIoc3RydWN0IGlycV9kZXNjICpkZXNj KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9IGlycV9kZXNjX2dl dF9oYW5kbGVyX2RhdGEoZGVzYyk7DQo+ID4gKwlzdHJ1Y3QgaXJxX2NoaXAgKmlycWNoaXAgPSBp cnFfZGVzY19nZXRfY2hpcChkZXNjKTsNCj4gPiArCXVuc2lnbmVkIGxvbmcgc3RhdHVzOw0KPiA+ ICsJdTMyIHZpcnE7DQo+ID4gKwl1MzIgaXJxX2JpdCA9IFBDSUVfSU5UWF9TSElGVDsNCj4gPiAr DQo+ID4gKwljaGFpbmVkX2lycV9lbnRlcihpcnFjaGlwLCBkZXNjKTsNCj4gPiArDQo+ID4gKwlz dGF0dXMgPSByZWFkbChwb3J0LT5iYXNlICsgUENJRV9JTlRfU1RBVFVTX1JFRyk7DQo+ID4gKwlp ZiAoc3RhdHVzICYgUENJRV9JTlRYX01BU0spIHsNCj4gPiArCQlmb3JfZWFjaF9zZXRfYml0X2Zy b20oaXJxX2JpdCwgJnN0YXR1cywgUENJX05VTV9JTlRYICsNCj4gPiArCQkJCSAgICAgIFBDSUVf SU5UWF9TSElGVCkgew0KPiA+ICsJCQl2aXJxID0gaXJxX2ZpbmRfbWFwcGluZyhwb3J0LT5pbnR4 X2RvbWFpbiwNCj4gPiArCQkJCQkJaXJxX2JpdCAtIFBDSUVfSU5UWF9TSElGVCk7DQo+ID4gKwkJ CWdlbmVyaWNfaGFuZGxlX2lycSh2aXJxKTsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ ICsJaWYgKHN0YXR1cyAmIFBDSUVfTVNJX01BU0spIHsNCj4gPiArCQlpcnFfYml0ID0gUENJRV9N U0lfU0hJRlQ7DQo+ID4gKwkJZm9yX2VhY2hfc2V0X2JpdF9mcm9tKGlycV9iaXQsICZzdGF0dXMs IFBDSUVfTVNJX1NFVF9OVU0gKw0KPiA+ICsJCQkJICAgICAgUENJRV9NU0lfU0hJRlQpIHsNCj4g PiArCQkJdmlycSA9IGlycV9maW5kX21hcHBpbmcocG9ydC0+bXNpX3RvcF9kb21haW4sDQo+ID4g KwkJCQkJCWlycV9iaXQgLSBQQ0lFX01TSV9TSElGVCk7DQo+ID4gKwkJCWdlbmVyaWNfaGFuZGxl X2lycSh2aXJxKTsNCj4gPiArCQl9DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJY2hhaW5lZF9pcnFf ZXhpdChpcnFjaGlwLCBkZXNjKTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBtdGtf cGNpZV9zZXR1cF9pcnEoc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQsDQo+ID4gKwkJCSAgICAg IHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkNCj4gPiArew0KPiA+ICsJc3RydWN0IGRldmljZSAq ZGV2ID0gcG9ydC0+ZGV2Ow0KPiA+ICsJc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiA9IHRv X3BsYXRmb3JtX2RldmljZShkZXYpOw0KPiA+ICsJaW50IGVycjsNCj4gPiArDQo+ID4gKwllcnIg PSBtdGtfcGNpZV9pbml0X2lycV9kb21haW5zKHBvcnQsIG5vZGUpOw0KPiA+ICsJaWYgKGVycikg ew0KPiA+ICsJCWRldl9ub3RpY2UoZGV2LCAiZmFpbGVkIHRvIGluaXQgUENJZSBJUlEgZG9tYWlu XG4iKTsNCj4gPiArCQlyZXR1cm4gZXJyOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXBvcnQtPmly cSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7DQo+ID4gKwlpZiAocG9ydC0+aXJxIDwgMCkN Cj4gPiArCQlyZXR1cm4gcG9ydC0+aXJxOw0KPiA+ICsNCj4gPiArCWlycV9zZXRfY2hhaW5lZF9o YW5kbGVyX2FuZF9kYXRhKHBvcnQtPmlycSwgbXRrX3BjaWVfaXJxX2hhbmRsZXIsIHBvcnQpOw0K PiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IG10 a19wY2llX2Nsa19pbml0KHN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0KQ0KPiA+ICt7DQo+ID4g KwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwb3J0LT5kZXY7DQo+ID4gKwlzdHJ1Y3QgZGV2aWNlX25v ZGUgKm5wID0gZGV2LT5vZl9ub2RlOw0KPiA+ICsJaW50IGk7DQo+ID4gKw0KPiA+ICsJcG9ydC0+ bnVtX2Nsa3MgPSBvZl9jbGtfZ2V0X3BhcmVudF9jb3VudChucCk7DQo+ID4gKwlpZiAocG9ydC0+ bnVtX2Nsa3MgPT0gMCkgew0KPiA+ICsJCWRldl9ub3RpY2UoZGV2LCAicGNpZSBjbG9jayBpcyBu b3QgZm91bmRcbiIpOw0KPiA+ICsJCXJldHVybiAtRUlOVkFMOw0KPiA+ICsJfQ0KPiA+ICsNCj4g PiArCXBvcnQtPmNsa3MgPSBkZXZtX2t6YWxsb2MoZGV2LCBwb3J0LT5udW1fY2xrcywgR0ZQX0tF Uk5FTCk7DQo+ID4gKwlpZiAoIXBvcnQtPmNsa3MpDQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IHBvcnQtPm51bV9jbGtzOyBpKyspIHsNCj4gPiAr CQlzdHJ1Y3QgY2xrICAgICAgKmNsazsNCj4gPiArCQlpbnQgICAgICAgICAgICAgcmV0Ow0KPiA+ ICsNCj4gPiArCQljbGsgPSBvZl9jbGtfZ2V0KG5wLCBpKTsNCj4gDQo+IFVzZSB0aGUgYnVsayBj bGsgQVBJcy4NCj4gDQo+ID4gKwkJaWYgKElTX0VSUihjbGspKSB7DQo+ID4gKwkJCXdoaWxlICgt LWkgPj0gMCkNCj4gPiArCQkJCWNsa19wdXQocG9ydC0+Y2xrc1tpXSk7DQo+ID4gKwkJCXJldHVy biBQVFJfRVJSKGNsayk7DQo+ID4gKwkJfQ0KPiA+ICsNCj4gPiArCQlyZXQgPSBjbGtfcHJlcGFy ZV9lbmFibGUoY2xrKTsNCj4gPiArCQlpZiAocmV0IDwgMCkgew0KPiA+ICsJCQl3aGlsZSAoLS1p ID49IDApIHsNCj4gPiArCQkJCWNsa19kaXNhYmxlX3VucHJlcGFyZShwb3J0LT5jbGtzW2ldKTsN Cj4gPiArCQkJCWNsa19wdXQocG9ydC0+Y2xrc1tpXSk7DQo+ID4gKwkJCX0NCj4gPiArCQkJY2xr X3B1dChjbGspOw0KPiA+ICsNCj4gPiArCQkJcmV0dXJuIHJldDsNCj4gPiArCQl9DQo+ID4gKw0K PiA+ICsJCXBvcnQtPmNsa3NbaV0gPSBjbGs7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJcmV0dXJu IDA7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbXRrX3BjaWVfZGlzYWJsZV9jbGso c3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQpDQo+ID4gK3sNCj4gPiArCWludCBpOw0KPiA+ICsN Cj4gPiArCWlmIChwb3J0LT5udW1fY2xrcyA9PSAwKQ0KPiA+ICsJCXJldHVybiAwOw0KPiA+ICsN Cj4gPiArCWZvciAoaSA9IDA7IGkgPCBwb3J0LT5udW1fY2xrczsgaSsrKSB7DQo+ID4gKwkJY2xr X2Rpc2FibGVfdW5wcmVwYXJlKHBvcnQtPmNsa3NbaV0pOw0KPiA+ICsJCWNsa19wdXQocG9ydC0+ Y2xrc1tpXSk7DQo+ID4gKwl9DQo+IA0KPiBVc2UgdGhlIGJ1bGsgY2xrIEFQSXMuDQo+IA0KPiA+ ICsNCj4gPiArCXBvcnQtPm51bV9jbGtzID0gMDsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4g PiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBtdGtfcGNpZV9wb3dlcl91cChzdHJ1Y3QgbXRr X3BjaWVfcG9ydCAqcG9ydCkNCj4gPiArew0KPiA+ICsJc3RydWN0IGRldmljZSAqZGV2ID0gcG9y dC0+ZGV2Ow0KPiA+ICsJaW50IGVycjsNCj4gPiArDQo+ID4gKwlwb3J0LT5waHlfcmVzZXQgPSBk ZXZtX3Jlc2V0X2NvbnRyb2xfZ2V0X29wdGlvbmFsKGRldiwgInBoeS1yc3QiKTsNCj4gPiArCWlm IChQVFJfRVJSKHBvcnQtPnBoeV9yZXNldCkgPT0gLUVQUk9CRV9ERUZFUikNCj4gPiArCQlyZXR1 cm4gUFRSX0VSUihwb3J0LT5waHlfcmVzZXQpOw0KPiA+ICsNCj4gPiArCXJlc2V0X2NvbnRyb2xf ZGVhc3NlcnQocG9ydC0+cGh5X3Jlc2V0KTsNCj4gPiArDQo+ID4gKwkvKiBwaHkgcG93ZXIgb24g YW5kIGVuYWJsZSBwaXBlIGNsb2NrICovDQo+ID4gKwlwb3J0LT5waHkgPSBkZXZtX3BoeV9vcHRp b25hbF9nZXQoZGV2LCAicGNpZS1waHkiKTsNCj4gPiArCWlmIChJU19FUlIocG9ydC0+cGh5KSkN Cj4gPiArCQlwb3J0LT5waHkgPSBOVUxMOw0KPiANCj4gT3B0aW9uYWwgZ2V0IGFscmVhZHkgcmV0 dXJucyBOVUxMIGlmIHRoZSBkZXZpY2UgaXNuJ3QgaW4gRFQuIEFueSBvdGhlciANCj4gZXJyb3Ig c2hvdWxkIGJlIGFuIGVycm9yIGFuZCB5b3UgcmV0dXJuLg0KPiANCj4gPiArDQo+ID4gKwllcnIg PSBwaHlfaW5pdChwb3J0LT5waHkpOw0KPiA+ICsJaWYgKGVycikgew0KPiA+ICsJCWRldl9ub3Rp Y2UoZGV2LCAiZmFpbGVkIHRvIGluaXRpYWxpemUgcGNpZSBwaHlcbiIpOw0KPiA+ICsJCXJldHVy biAtRU5PREVWOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCWVyciA9IHBoeV9wb3dlcl9vbihwb3J0 LT5waHkpOw0KPiA+ICsJaWYgKGVycikgew0KPiA+ICsJCWRldl9ub3RpY2UoZGV2LCAiZmFpbGVk IHRvIHBvd2VyIG9uIHBjaWUgcGh5XG4iKTsNCj4gPiArCQlnb3RvIGVycl9waHlfb247DQo+ID4g Kwl9DQo+ID4gKw0KPiA+ICsJcG9ydC0+bWFjX3Jlc2V0ID0gZGV2bV9yZXNldF9jb250cm9sX2dl dF9vcHRpb25hbChkZXYsICJtYWMtcnN0Iik7DQo+ID4gKwlpZiAoUFRSX0VSUihwb3J0LT5tYWNf cmVzZXQpID09IC1FUFJPQkVfREVGRVIpDQo+ID4gKwkJcmV0dXJuIFBUUl9FUlIocG9ydC0+bWFj X3Jlc2V0KTsNCj4gPiArDQo+ID4gKwlyZXNldF9jb250cm9sX2RlYXNzZXJ0KHBvcnQtPm1hY19y ZXNldCk7DQo+ID4gKw0KPiA+ICsJLyogbWFjIHBvd2VyIG9uIGFuZCBlbmFibGUgdHJhbnNhY3Rp b24gbGF5ZXIgY2xvY2tzICovDQo+ID4gKwlwbV9ydW50aW1lX2VuYWJsZShkZXYpOw0KPiA+ICsJ cG1fcnVudGltZV9nZXRfc3luYyhkZXYpOw0KPiA+ICsNCj4gPiArCWVyciA9IG10a19wY2llX2Ns a19pbml0KHBvcnQpOw0KPiA+ICsJaWYgKGVycikgew0KPiA+ICsJCWRldl9ub3RpY2UoZGV2LCAi Y2xvY2sgaW5pdCBmYWlsZWRcbiIpOw0KPiA+ICsJCWdvdG8gZXJyX2Nsa19pbml0Ow0KPiA+ICsJ fQ0KPiA+ICsNCj4gPiArCXJldHVybiAwOw0KPiA+ICsNCj4gPiArZXJyX2Nsa19pbml0Og0KPiA+ ICsJcG1fcnVudGltZV9wdXRfc3luYyhkZXYpOw0KPiA+ICsJcG1fcnVudGltZV9kaXNhYmxlKGRl dik7DQo+ID4gKwlyZXNldF9jb250cm9sX2Fzc2VydChwb3J0LT5tYWNfcmVzZXQpOw0KPiA+ICsJ cGh5X3Bvd2VyX29mZihwb3J0LT5waHkpOw0KPiA+ICtlcnJfcGh5X29uOg0KPiA+ICsJcGh5X2V4 aXQocG9ydC0+cGh5KTsNCj4gPiArCXJlc2V0X2NvbnRyb2xfYXNzZXJ0KHBvcnQtPnBoeV9yZXNl dCk7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIC1FQlVTWTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3Rh dGljIHZvaWQgbXRrX3BjaWVfcG93ZXJfZG93bihzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCkN Cj4gPiArew0KPiA+ICsJcGh5X3Bvd2VyX29mZihwb3J0LT5waHkpOw0KPiA+ICsJcGh5X2V4aXQo cG9ydC0+cGh5KTsNCj4gPiArDQo+ID4gKwltdGtfcGNpZV9kaXNhYmxlX2Nsayhwb3J0KTsNCj4g PiArDQo+ID4gKwlwbV9ydW50aW1lX3B1dF9zeW5jKHBvcnQtPmRldik7DQo+ID4gKwlwbV9ydW50 aW1lX2Rpc2FibGUocG9ydC0+ZGV2KTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGludCBt dGtfcGNpZV9zZXR1cChzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCkNCj4gPiArew0KPiA+ICsJ c3RydWN0IGRldmljZSAqZGV2ID0gcG9ydC0+ZGV2Ow0KPiA+ICsJc3RydWN0IHBsYXRmb3JtX2Rl dmljZSAqcGRldiA9IHRvX3BsYXRmb3JtX2RldmljZShkZXYpOw0KPiA+ICsJc3RydWN0IHJlc291 cmNlICpyZWdzOw0KPiA+ICsJaW50IGVycjsNCj4gPiArDQo+ID4gKwlyZWdzID0gcGxhdGZvcm1f Z2V0X3Jlc291cmNlX2J5bmFtZShwZGV2LCBJT1JFU09VUkNFX01FTSwgInBjaWUtbWFjIik7DQo+ ID4gKwlwb3J0LT5iYXNlID0gZGV2bV9pb3JlbWFwX3Jlc291cmNlKGRldiwgcmVncyk7DQo+ID4g KwlpZiAoSVNfRVJSKHBvcnQtPmJhc2UpKSB7DQo+ID4gKwkJZGV2X25vdGljZShkZXYsICJmYWls ZWQgdG8gbWFwIHJlZ2lzdGVyIGJhc2VcbiIpOw0KPiA+ICsJCXJldHVybiBQVFJfRVJSKHBvcnQt PmJhc2UpOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCXBvcnQtPnJlZ19iYXNlID0gcmVncy0+c3Rh cnQ7DQo+ID4gKw0KPiA+ICsJLyogRG9uJ3QgdG91Y2ggdGhlIGhhcmR3YXJlIHJlZ2lzdGVycyBi ZWZvcmUgcG93ZXIgdXAgKi8NCj4gPiArCWVyciA9IG10a19wY2llX3Bvd2VyX3VwKHBvcnQpOw0K PiA+ICsJaWYgKGVycikNCj4gPiArCQlyZXR1cm4gZXJyOw0KPiA+ICsNCj4gPiArCS8qIFRyeSBs aW5rIHVwICovDQo+ID4gKwllcnIgPSBtdGtfcGNpZV9zdGFydHVwX3BvcnQocG9ydCk7DQo+ID4g KwlpZiAoZXJyKSB7DQo+ID4gKwkJZGV2X25vdGljZShkZXYsICJQQ0llIGxpbmsgZG93blxuIik7 DQo+ID4gKwkJZ290byBlcnJfc2V0dXA7DQo+ID4gKwl9DQo+ID4gKw0KPiA+ICsJZXJyID0gbXRr X3BjaWVfc2V0dXBfaXJxKHBvcnQsIGRldi0+b2Zfbm9kZSk7DQo+ID4gKwlpZiAoZXJyKQ0KPiA+ ICsJCWdvdG8gZXJyX3NldHVwOw0KPiA+ICsNCj4gPiArCWRldl9pbmZvKGRldiwgIlBDSWUgbGlu ayB1cCBzdWNjZXNzIVxuIik7DQo+ID4gKw0KPiA+ICsJcmV0dXJuIDA7DQo+ID4gKw0KPiA+ICtl cnJfc2V0dXA6DQo+ID4gKwltdGtfcGNpZV9wb3dlcl9kb3duKHBvcnQpOw0KPiA+ICsNCj4gPiAr CXJldHVybiBlcnI7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N0YXRpYyBpbnQgbXRrX3BjaWVfcHJv YmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikNCj4gPiArew0KPiA+ICsJc3RydWN0IGRl dmljZSAqZGV2ID0gJnBkZXYtPmRldjsNCj4gPiArCXN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0 Ow0KPiA+ICsJc3RydWN0IHBjaV9ob3N0X2JyaWRnZSAqaG9zdDsNCj4gPiArCWludCBlcnI7DQo+ ID4gKw0KPiA+ICsJaG9zdCA9IGRldm1fcGNpX2FsbG9jX2hvc3RfYnJpZGdlKGRldiwgc2l6ZW9m KCpwb3J0KSk7DQo+ID4gKwlpZiAoIWhvc3QpDQo+ID4gKwkJcmV0dXJuIC1FTk9NRU07DQo+ID4g Kw0KPiA+ICsJcG9ydCA9IHBjaV9ob3N0X2JyaWRnZV9wcml2KGhvc3QpOw0KPiA+ICsNCj4gPiAr CXBvcnQtPmRldiA9IGRldjsNCj4gPiArCXBsYXRmb3JtX3NldF9kcnZkYXRhKHBkZXYsIHBvcnQp Ow0KPiA+ICsNCj4gPiArCWVyciA9IG10a19wY2llX3NldHVwKHBvcnQpOw0KPiA+ICsJaWYgKGVy cikNCj4gPiArCQlyZXR1cm4gZXJyOw0KPiA+ICsNCj4gPiArCWhvc3QtPmRldi5wYXJlbnQgPSBw b3J0LT5kZXY7DQo+IA0KPiBZb3UgY2FuIGRyb3AgdGhpcyBub3cuIFRoZSBjb3JlIHNldHMgaXQu DQo+IA0KPiA+ICsJaG9zdC0+b3BzID0gJm10a19wY2llX29wczsNCj4gPiArCWhvc3QtPnN5c2Rh dGEgPSBwb3J0Ow0KPiA+ICsNCj4gPiArCWVyciA9IHBjaV9ob3N0X3Byb2JlKGhvc3QpOw0KPiA+ ICsJaWYgKGVycikgew0KPiA+ICsJCW10a19wY2llX3Bvd2VyX2Rvd24ocG9ydCk7DQo+ID4gKwkJ cmV0dXJuIGVycjsNCj4gPiArCX0NCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3RhdGljIGludCBtdGtfcGNpZV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2Rldmlj ZSAqcGRldikNCj4gPiArew0KPiA+ICsJc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBwbGF0 Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsNCj4gPiArCXN0cnVjdCBwY2lfaG9zdF9icmlkZ2UgKmhv c3QgPSBwY2lfaG9zdF9icmlkZ2VfZnJvbV9wcml2KHBvcnQpOw0KPiA+ICsNCj4gPiArCXBjaV9z dG9wX3Jvb3RfYnVzKGhvc3QtPmJ1cyk7DQo+ID4gKwlwY2lfcmVtb3ZlX3Jvb3RfYnVzKGhvc3Qt PmJ1cyk7DQo+IA0KPiBUaGVyZSdzIHN1cHBvc2VkIHRvIGJlIGEgbG9jayBhcm91bmQgdGhpcy4g U2VlIG90aGVyIGNhc2VzLg0KPiANCj4gPiArDQo+ID4gKwltdGtfcGNpZV9pcnFfdGVhcmRvd24o cG9ydCk7DQo+ID4gKwltdGtfcGNpZV9wb3dlcl9kb3duKHBvcnQpOw0KPiA+ICsNCj4gPiArCXJl dHVybiAwOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIG10 a19wY2llX3R1cm5fb2ZmX2xpbmsoc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQpDQo+ID4gK3sN Cj4gPiArCWludCB2YWw7DQo+ID4gKw0KPiA+ICsJdmFsID0gcmVhZGwocG9ydC0+YmFzZSArIFBD SUVfSUNNRF9QTV9SRUcpOw0KPiA+ICsJdmFsIHw9IFBDSUVfVFVSTl9PRkZfTElOSzsNCj4gPiAr CXdyaXRlbCh2YWwsIHBvcnQtPmJhc2UgKyBQQ0lFX0lDTURfUE1fUkVHKTsNCj4gPiArDQo+ID4g KwkvKiBDaGVjayB0aGUgbGluayBpcyBMMiAqLw0KPiA+ICsJcmV0dXJuIHJlYWRsX3BvbGxfdGlt ZW91dChwb3J0LT5iYXNlICsgUENJRV9MVFNTTV9TVEFUVVNfUkVHLCB2YWwsDQo+ID4gKwkJCQkg IChQQ0lFX0xUU1NNX1NUQVRFKHZhbCkgPT0NCj4gPiArCQkJCSAgIFBDSUVfTFRTU01fU1RBVEVf TDJfSURMRSksIDIwLA0KPiA+ICsJCQkJICAgNTAgKiBVU0VDX1BFUl9NU0VDKTsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3RhdGljIGludCBfX21heWJlX3VudXNlZCBtdGtfcGNpZV9zdXNwZW5kX25v aXJxKHN0cnVjdCBkZXZpY2UgKmRldikNCj4gDQo+IFdoeSBkbyB5b3UgbmVlZCB0aGUgbm9pcnEg dmFyaWFudD8NCg0KSSB0aGluayB0aGUgc3VzcGVuZCBvZiBidXMgY29udHJvbGxlciBzaG91bGQg YmUgdGhlIGxhc3QgY2FsbGJhY2sNCmZ1bmN0aW9uIHdoaWNoIHdpbGwgYmUgY2FsbGVkLCBzbyBJ IGFkZCBub2lycSB2YXJpYW50IHRvIG1ha2Ugc3VyZSBpdCdzDQpjYWxsZWQgYWZ0ZXIgdGhlIGRl dmljZSBkcml2ZXIncyBzdXNwZW5kIGZ1bmN0aW9uLg0KPiANCj4gPiArew0KPiA+ICsJc3RydWN0 IG10a19wY2llX3BvcnQgKnBvcnQgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsNCj4gPiArCWludCBp LCBlcnIsIHZhbDsNCj4gPiArDQo+ID4gKwlpZiAocG9ydC0+aXNfc3VzcGVuZGVkKQ0KPiA+ICsJ CXJldHVybiAwOw0KPiA+ICsNCj4gPiArCS8qIFRyaWdnZXIgbGluayB0byBMMiBzdGF0ZSAqLw0K PiA+ICsJZXJyID0gbXRrX3BjaWVfdHVybl9vZmZfbGluayhwb3J0KTsNCj4gPiArCWlmIChlcnIp IHsNCj4gPiArCQlkZXZfbm90aWNlKHBvcnQtPmRldiwgImNhbiBub3QgZW50ZXIgTDIgc3RhdGVc biIpOw0KPiA+ICsJCWdvdG8gcG93ZXJfb2ZmOw0KPiA+ICsJfQ0KPiA+ICsNCj4gPiArCS8qIFB1 bGwgZG93biB0aGUgUEVSU1QjIHBpbiAqLw0KPiA+ICsJdmFsID0gcmVhZGwocG9ydC0+YmFzZSAr IFBDSUVfUlNUX0NUUkxfUkVHKTsNCj4gPiArCXZhbCB8PSBQQ0lFX1BFX1JTVEI7DQo+ID4gKwl3 cml0ZWwodmFsLCBwb3J0LT5iYXNlICsgUENJRV9SU1RfQ1RSTF9SRUcpOw0KPiA+ICsNCj4gPiAr CWRldl9pbmZvKHBvcnQtPmRldiwgImVudGVyIEwyIHN0YXRlIHN1Y2Nlc3MiKTsNCj4gPiArDQo+ ID4gK3Bvd2VyX29mZjoNCj4gPiArCXBoeV9wb3dlcl9vZmYocG9ydC0+cGh5KTsNCj4gPiArDQo+ ID4gKwlmb3IgKGkgPSAwOyBpIDwgcG9ydC0+bnVtX2Nsa3M7IGkrKykNCj4gPiArCQljbGtfZGlz YWJsZV91bnByZXBhcmUocG9ydC0+Y2xrc1tpXSk7DQo+ID4gKw0KPiA+ICsJcG1fcnVudGltZV9w dXRfc3luYyhwb3J0LT5kZXYpOw0KPiANCj4gTm9ybWFsbHksIGNsb2NrIGNvbnRyb2wgd291bGQg YmUgd2l0aGluIHRoZSBwbS1ydW50aW1lIGhvb2tzLiBXaGF0IA0KPiBwbS1ydW50aW1lIGNvbnRy b2wgYXJlIHlvdSBkb2luZz8NCg0KSSB0aGluayBJIG1heWJlIGNvbmZ1c2VkIHdpdGggdGhlIHN1 c3BlbmQgYW5kIHJ1bnRpbWUgc3VzcGVuZCwgSSB3aWxsDQpyZW1vdmUgdGhlIHBtX3J1bnRpbWUq IEFQSXMgaW4gdGhlIG5leHQgdmVyc2lvbi4NCj4gDQo+ID4gKw0KPiA+ICsJcG9ydC0+aXNfc3Vz cGVuZGVkID0gdHJ1ZTsNCj4gPiArDQo+ID4gKwlyZXR1cm4gMDsNCj4gPiArfQ0KPiA+ICsNCj4g PiArc3RhdGljIGludCBfX21heWJlX3VudXNlZCBtdGtfcGNpZV9yZXN1bWVfbm9pcnEoc3RydWN0 IGRldmljZSAqZGV2KQ0KPiA+ICt7DQo+ID4gKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9 IGRldl9nZXRfZHJ2ZGF0YShkZXYpOw0KPiA+ICsJaW50IGksIGVycjsNCj4gPiArDQo+ID4gKwlp ZiAoIXBvcnQtPmlzX3N1c3BlbmRlZCkNCj4gPiArCQlyZXR1cm4gMDsNCj4gPiArDQo+ID4gKwlw aHlfcG93ZXJfb24ocG9ydC0+cGh5KTsNCj4gPiArDQo+ID4gKwlwbV9ydW50aW1lX2dldF9zeW5j KHBvcnQtPmRldik7DQo+ID4gKw0KPiA+ICsJZm9yIChpID0gMDsgaSA8IHBvcnQtPm51bV9jbGtz OyBpKyspIHsNCj4gPiArCQllcnIgPSBjbGtfcHJlcGFyZV9lbmFibGUocG9ydC0+Y2xrc1tpXSk7 DQo+ID4gKwkJaWYgKGVyciA8IDApIHsNCj4gPiArCQkJd2hpbGUgKC0taSA+PSAwKQ0KPiA+ICsJ CQkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHBvcnQtPmNsa3NbaV0pOw0KPiA+ICsJCQlyZXR1cm4g ZXJyOw0KPiA+ICsJCX0NCj4gPiArCX0NCj4gPiArDQo+ID4gKwllcnIgPSBtdGtfcGNpZV9zdGFy dHVwX3BvcnQocG9ydCk7DQo+ID4gKwlpZiAoZXJyKSB7DQo+ID4gKwkJZGV2X25vdGljZShwb3J0 LT5kZXYsICJyZXN1bWUgZmFpbGVkXG4iKTsNCj4gPiArCQlyZXR1cm4gZXJyOw0KPiA+ICsJfQ0K PiA+ICsNCj4gPiArCXBvcnQtPmlzX3N1c3BlbmRlZCA9IGZhbHNlOw0KPiA+ICsNCj4gPiArCWRl dl9pbmZvKHBvcnQtPmRldiwgInJlc3VtZSBkb25lXG4iKTsNCj4gPiArDQo+ID4gKwlyZXR1cm4g MDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZfcG1fb3BzIG10 a19wY2llX3BtX29wcyA9IHsNCj4gPiArCVNFVF9OT0lSUV9TWVNURU1fU0xFRVBfUE1fT1BTKG10 a19wY2llX3N1c3BlbmRfbm9pcnEsDQo+ID4gKwkJCQkgICAgICBtdGtfcGNpZV9yZXN1bWVfbm9p cnEpDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IG9mX2RldmljZV9p ZCBtdGtfcGNpZV9vZl9tYXRjaFtdID0gew0KPiA+ICsJeyAuY29tcGF0aWJsZSA9ICJtZWRpYXRl ayxnZW4zLXBjaWUiIH0sDQo+ID4gKwl7IC5jb21wYXRpYmxlID0gIm1lZGlhdGVrLG10ODE5Mi1w Y2llIiB9LA0KPiA+ICsJe30sDQo+ID4gK307DQo+ID4gKw0KPiA+ICtzdGF0aWMgc3RydWN0IHBs YXRmb3JtX2RyaXZlciBtdGtfcGNpZV9kcml2ZXIgPSB7DQo+ID4gKwkucHJvYmUgPSBtdGtfcGNp ZV9wcm9iZSwNCj4gPiArCS5yZW1vdmUgPSBtdGtfcGNpZV9yZW1vdmUsDQo+ID4gKwkuZHJpdmVy ID0gew0KPiA+ICsJCS5uYW1lID0gIm10ay1wY2llIiwNCj4gPiArCQkub2ZfbWF0Y2hfdGFibGUg PSBtdGtfcGNpZV9vZl9tYXRjaCwNCj4gPiArCQkuc3VwcHJlc3NfYmluZF9hdHRycyA9IHRydWUs DQo+IA0KPiBXaHk/IFlvdSBzdXBwb3J0IGJlaW5nIGEgbW9kdWxlLCBzbyB0aGlzIHNob3VsZCBi ZSBkcm9wcGVkLg0KDQpZZXMsIEkgd2lsbCBkcm9wIGl0IGluIHRoZSBuZXh0IHZlcnNpb24sdGhh bmtzIGZvciB5b3VyIGtpbmRseSByZXZpZXcuLg0KPiANCj4gPiArCQkucG0gPSAmbXRrX3BjaWVf cG1fb3BzLA0KPiA+ICsJfSwNCj4gPiArfTsNCj4gPiArDQo+ID4gK21vZHVsZV9wbGF0Zm9ybV9k cml2ZXIobXRrX3BjaWVfZHJpdmVyKTsNCj4gPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOw0K PiA+IC0tIA0KPiA+IDIuMjUuMQ0KPiANCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18NCj4gTGludXgtbWVkaWF0ZWsgbWFpbGluZyBsaXN0DQo+IExpbnV4 LW1lZGlhdGVrQGxpc3RzLmluZnJhZGVhZC5vcmcNCj4gaHR0cDovL2xpc3RzLmluZnJhZGVhZC5v cmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1tZWRpYXRlaw0KDQo=