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.1 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,MIME_BASE64_TEXT,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, UNPARSEABLE_RELAY,URIBL_BLOCKED,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D1BB2C433E2 for ; Mon, 7 Sep 2020 12:06:26 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 78F1F21481 for ; Mon, 7 Sep 2020 12:06:26 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (1024-bit key) header.d=mediatek.com header.i=@mediatek.com header.b="J+mUnAaK" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729112AbgIGMGF (ORCPT ); Mon, 7 Sep 2020 08:06:05 -0400 Received: from mailgw01.mediatek.com ([210.61.82.183]:23167 "EHLO mailgw01.mediatek.com" rhost-flags-OK-FAIL-OK-FAIL) by vger.kernel.org with ESMTP id S1729207AbgIGME6 (ORCPT ); Mon, 7 Sep 2020 08:04:58 -0400 X-UUID: f785a79bb70140ed8c4222d70aec0535-20200907 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=mediatek.com; s=dk; h=Content-Transfer-Encoding:Content-Type:MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:CC:To:From; bh=rGctXW3xphGU1BRXyHzJmesy6UdMTxMopibCyzVAh9s=; b=J+mUnAaKuGIl8Qn7OyAbfVB3DU6ySuNVwTITcYq42xK50VnkgRNGJqblOUVzo2WKYjY4tHE9NKLibMjsz+dWLN1mv7sana1BOK2sRMLvQDmrJTlCa7dK/zRb3UwmZ4jlGnnfZrKinIkOCpZiFTnLy7DBjr0YW6hyd3B4zrgClDM=; X-UUID: f785a79bb70140ed8c4222d70aec0535-20200907 Received: from mtkcas08.mediatek.inc [(172.21.101.126)] 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 1057507968; Mon, 07 Sep 2020 20:04:31 +0800 Received: from mtkcas07.mediatek.inc (172.21.101.84) by mtkmbs08n1.mediatek.inc (172.21.101.55) with Microsoft SMTP Server (TLS) id 15.0.1497.2; Mon, 7 Sep 2020 20:04:27 +0800 Received: from localhost.localdomain (10.17.3.153) by mtkcas07.mediatek.inc (172.21.101.73) with Microsoft SMTP Server id 15.0.1497.2 via Frontend Transport; Mon, 7 Sep 2020 20:04:27 +0800 From: Jianjun Wang To: Bjorn Helgaas , Rob Herring , Lorenzo Pieralisi , Ryder Lee CC: Philipp Zabel , Matthias Brugger , Mauro Carvalho Chehab , , , , , , , Sj Huang , Jianjun Wang Subject: [PATCH 2/3] PCI: mediatek: Add new generation controller support Date: Mon, 7 Sep 2020 20:01:17 +0800 Message-ID: <20200907120118.11667-2-jianjun.wang@mediatek.com> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20200907120118.11667-1-jianjun.wang@mediatek.com> References: <20200907120118.11667-1-jianjun.wang@mediatek.com> MIME-Version: 1.0 Content-Type: text/plain 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 TWVkaWFUZWsncyBQQ0llIGhvc3QgY29udHJvbGxlciBoYXMgdGhyZWUgZ2VuZXJhdGlvbiBIV3Ms IHRoZSBuZXcNCmdlbmVyYXRpb24gSFcgaXMgYW4gaW5kaXZpZHVhbCBicmlkZ2UsIGl0IHN1cG9v cnRzIEdlbjMgc3BlZWQgYW5kDQp1cCB0byAyNTYgTVNJIGludGVycnVwdCBudW1iZXJzIGZvciBt dWx0aS1mdW5jdGlvbiBkZXZpY2VzLg0KDQpBZGQgc3VwcG9ydCBmb3IgbmV3IEdlbjMgY29udHJv bGxlciB3aGljaCBjYW4gYmUgZm91bmQgb24gTVQ4MTkyLg0KDQpTaWduZWQtb2ZmLWJ5OiBKaWFu anVuIFdhbmcgPGppYW5qdW4ud2FuZ0BtZWRpYXRlay5jb20+DQotLS0NCiBkcml2ZXJzL3BjaS9j b250cm9sbGVyL0tjb25maWcgICAgICAgICAgICAgIHwgICAxNCArDQogZHJpdmVycy9wY2kvY29u dHJvbGxlci9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgIDEgKw0KIGRyaXZlcnMvcGNpL2NvbnRy b2xsZXIvcGNpZS1tZWRpYXRlay1nZW4zLmMgfCAxMDYzICsrKysrKysrKysrKysrKysrKysNCiAz IGZpbGVzIGNoYW5nZWQsIDEwNzggaW5zZXJ0aW9ucygrKQ0KIGNyZWF0ZSBtb2RlIDEwMDY0NCBk cml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtbWVkaWF0ZWstZ2VuMy5jDQoNCmRpZmYgLS1naXQg YS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL0tjb25maWcgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVy L0tjb25maWcNCmluZGV4IGYxOGMzNzI1ZWY4MC4uODNkYWE3NzI1OTViIDEwMDY0NA0KLS0tIGEv ZHJpdmVycy9wY2kvY29udHJvbGxlci9LY29uZmlnDQorKysgYi9kcml2ZXJzL3BjaS9jb250cm9s bGVyL0tjb25maWcNCkBAIC0yMzksNiArMjM5LDIwIEBAIGNvbmZpZyBQQ0lFX01FRElBVEVLDQog CSAgU2F5IFkgaGVyZSBpZiB5b3Ugd2FudCB0byBlbmFibGUgUENJZSBjb250cm9sbGVyIHN1cHBv cnQgb24NCiAJICBNZWRpYVRlayBTb0NzLg0KIA0KK2NvbmZpZyBQQ0lFX01FRElBVEVLX0dFTjMN CisJdHJpc3RhdGUgIk1lZGlhVGVrIEdFTjMgUENJZSBjb250cm9sbGVyIg0KKwlkZXBlbmRzIG9u IEFSQ0hfTUVESUFURUsgfHwgQ09NUElMRV9URVNUDQorCWRlcGVuZHMgb24gT0YNCisJZGVwZW5k cyBvbiBQQ0lfTVNJX0lSUV9ET01BSU4NCisJaGVscA0KKwkgIEFkZHMgc3VwcG9ydCBmb3IgUENJ ZSBHZW4zIE1BQyBjb250cm9sbGVyIGZvciBNZWRpYVRlayBTb0NzLg0KKwkgIFRoaXMgUENJZSBj b250cm9sbGVyIHByb3ZpZGVzIHRoZSBjYXBhYmxlIG9mIEdlbjMsIEdlbjIgYW5kDQorCSAgR2Vu MSBzcGVlZCwgYW5kIHN1cHBvcnQgdXAgdG8gMjU2IE1TSSBpbnRlcnJ1cHQgbnVtYmVycyBmb3IN CisJICBtdWx0aS1mdW5jdGlvbiBkZXZpY2VzLg0KKw0KKwkgIFNheSBZIGhlcmUgaWYgeW91IHdh bnQgdG8gZW5hYmxlIEdlbjMgUENJZSBjb250cm9sbGVyIHN1cHBvcnQgb24NCisJICBNZWRpYVRl ayBTb0NzLg0KKw0KIGNvbmZpZyBQQ0lFX1RBTkdPX1NNUDg3NTkNCiAJYm9vbCAiVGFuZ28gU01Q ODc1OSBQQ0llIGNvbnRyb2xsZXIgKERBTkdFUk9VUykiDQogCWRlcGVuZHMgb24gQVJDSF9UQU5H TyAmJiBQQ0lfTVNJICYmIE9GDQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9N YWtlZmlsZSBiL2RyaXZlcnMvcGNpL2NvbnRyb2xsZXIvTWFrZWZpbGUNCmluZGV4IGJjZGJmNDlh YjFlNC4uOWMxYjk2Nzc3NTk3IDEwMDY0NA0KLS0tIGEvZHJpdmVycy9wY2kvY29udHJvbGxlci9N YWtlZmlsZQ0KKysrIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9NYWtlZmlsZQ0KQEAgLTI3LDYg KzI3LDcgQEAgb2JqLSQoQ09ORklHX1BDSUVfUk9DS0NISVApICs9IHBjaWUtcm9ja2NoaXAubw0K IG9iai0kKENPTkZJR19QQ0lFX1JPQ0tDSElQX0VQKSArPSBwY2llLXJvY2tjaGlwLWVwLm8NCiBv YmotJChDT05GSUdfUENJRV9ST0NLQ0hJUF9IT1NUKSArPSBwY2llLXJvY2tjaGlwLWhvc3Qubw0K IG9iai0kKENPTkZJR19QQ0lFX01FRElBVEVLKSArPSBwY2llLW1lZGlhdGVrLm8NCitvYmotJChD T05GSUdfUENJRV9NRURJQVRFS19HRU4zKSArPSBwY2llLW1lZGlhdGVrLWdlbjMubw0KIG9iai0k KENPTkZJR19QQ0lFX1RBTkdPX1NNUDg3NTkpICs9IHBjaWUtdGFuZ28ubw0KIG9iai0kKENPTkZJ R19WTUQpICs9IHZtZC5vDQogb2JqLSQoQ09ORklHX1BDSUVfQlJDTVNUQikgKz0gcGNpZS1icmNt c3RiLm8NCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtbWVkaWF0ZWst Z2VuMy5jIGIvZHJpdmVycy9wY2kvY29udHJvbGxlci9wY2llLW1lZGlhdGVrLWdlbjMuYw0KbmV3 IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAwMDAwMDAwMC4uYjc2YmFlYWMzYjk4DQotLS0g L2Rldi9udWxsDQorKysgYi9kcml2ZXJzL3BjaS9jb250cm9sbGVyL3BjaWUtbWVkaWF0ZWstZ2Vu My5jDQpAQCAtMCwwICsxLDEwNjMgQEANCisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BM LTIuMA0KKy8qDQorICogTWVkaWFUZWsgUENJZSBob3N0IGNvbnRyb2xsZXIgZHJpdmVyLg0KKyAq DQorICogQ29weXJpZ2h0IChjKSAyMDIwIE1lZGlhVGVrIEluYy4NCisgKiBBdXRob3I6IEppYW5q dW4gV2FuZyA8amlhbmp1bi53YW5nQG1lZGlhdGVrLmNvbT4NCisgKi8NCisNCisjaW5jbHVkZSA8 bGludXgvY2xrLmg+DQorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+DQorI2luY2x1ZGUgPGxpbnV4 L2lvcG9sbC5oPg0KKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4NCisjaW5jbHVkZSA8bGludXgvaXJx Y2hpcC9jaGFpbmVkX2lycS5oPg0KKyNpbmNsdWRlIDxsaW51eC9pcnFkb21haW4uaD4NCisjaW5j bHVkZSA8bGludXgva2VybmVsLmg+DQorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KKyNpbmNs dWRlIDxsaW51eC9tc2kuaD4NCisjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPg0KKyNpbmNs dWRlIDxsaW51eC9vZl9jbGsuaD4NCisjaW5jbHVkZSA8bGludXgvb2ZfcGNpLmg+DQorI2luY2x1 ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+DQorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPg0KKyNpbmNs dWRlIDxsaW51eC9waHkvcGh5Lmg+DQorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5o Pg0KKyNpbmNsdWRlIDxsaW51eC9wbV9kb21haW4uaD4NCisjaW5jbHVkZSA8bGludXgvcG1fcnVu dGltZS5oPg0KKyNpbmNsdWRlIDxsaW51eC9yZXNldC5oPg0KKw0KKyNpbmNsdWRlICIuLi9wY2ku aCINCisNCisjZGVmaW5lIFBDSUVfU0VUVElOR19SRUcJCTB4ODANCisjZGVmaW5lIFBDSUVfUENJ X0lEU18xCQkJMHg5Yw0KKyNkZWZpbmUgUENJX0NMQVNTKGNsYXNzKQkJKGNsYXNzIDw8IDgpDQor I2RlZmluZSBQQ0lFX1JDX01PREUJCQlCSVQoMCkNCisNCisjZGVmaW5lIFBDSUVfQ0ZHTlVNX1JF RwkJCTB4MTQwDQorI2RlZmluZSBQQ0lFX0NGR19ERVZGTihkZXZmbikJCSgoZGV2Zm4pICYgR0VO TUFTSyg3LCAwKSkNCisjZGVmaW5lIFBDSUVfQ0ZHX0JVUyhidXMpCQkoKChidXMpIDw8IDgpICYg R0VOTUFTSygxNSwgOCkpDQorI2RlZmluZSBQQ0lFX0NGR19CWVRFX0VOKGJ5dGVzKQkJKCgoYnl0 ZXMpIDw8IDE2KSAmIEdFTk1BU0soMTksIDE2KSkNCisjZGVmaW5lIFBDSUVfQ0ZHX0ZPUkNFX0JZ VEVfRU4JCUJJVCgyMCkNCisjZGVmaW5lIFBDSUVfQ0ZHX09GRlNFVF9BRERSCQkweDEwMDANCisj ZGVmaW5lIFBDSUVfQ0ZHX0hFQURFUihkZXZmbiwgYnVzKSBcDQorCShQQ0lFX0NGR19ERVZGTihk ZXZmbikgfCBQQ0lFX0NGR19CVVMoYnVzKSkNCisNCisjZGVmaW5lIFBDSUVfQ0ZHX0hFQURFUl9G T1JDRV9CRShkZXZmbiwgYnVzLCBieXRlcykgXA0KKwkoUENJRV9DRkdfSEVBREVSKGRldmZuLCBi dXMpIHwgUENJRV9DRkdfQllURV9FTihieXRlcykgXA0KKwkgfCBQQ0lFX0NGR19GT1JDRV9CWVRF X0VOKQ0KKw0KKyNkZWZpbmUgUENJRV9SU1RfQ1RSTF9SRUcJCTB4MTQ4DQorI2RlZmluZSBQQ0lF X01BQ19SU1RCCQkJQklUKDApDQorI2RlZmluZSBQQ0lFX1BIWV9SU1RCCQkJQklUKDEpDQorI2Rl ZmluZSBQQ0lFX0JSR19SU1RCCQkJQklUKDIpDQorI2RlZmluZSBQQ0lFX1BFX1JTVEIJCQlCSVQo MykNCisNCisjZGVmaW5lIFBDSUVfTUlTQ19TVEFUVVNfUkVHCQkweDE0Qw0KKyNkZWZpbmUgUENJ RV9MVFJfTVNHX1JFQ0VJVkVECQlCSVQoMCkNCisjZGVmaW5lIFBDSUVfUENJRV9NU0dfUkVDRUlW RUQJCUJJVCgxKQ0KKw0KKyNkZWZpbmUgUENJRV9MVFNTTV9TVEFUVVNfUkVHCQkweDE1MA0KKyNk ZWZpbmUgUENJRV9MVFNTTV9TVEFURV9NQVNLCQlHRU5NQVNLKDI4LCAyNCkNCisjZGVmaW5lIFBD SUVfTFRTU01fU1RBVEUodmFsKQkJKCh2YWwgJiBQQ0lFX0xUU1NNX1NUQVRFX01BU0spID4+IDI0 KQ0KKyNkZWZpbmUgUENJRV9MVFNTTV9TVEFURV9MMAkJMHgxMA0KKyNkZWZpbmUgUENJRV9MVFNT TV9TVEFURV9MMV9JRExFCTB4MTMNCisjZGVmaW5lIFBDSUVfTFRTU01fU1RBVEVfTDJfSURMRQkw eDE0DQorDQorI2RlZmluZSBQQ0lFX0xJTktfU1RBVFVTX1JFRwkJMHgxNTQNCisjZGVmaW5lIFBD SUVfUE9SVF9MSU5LVVAJCUJJVCg4KQ0KKw0KKyNkZWZpbmUgUENJRV9NU0lfU0VUX05VTQkJOA0K KyNkZWZpbmUgUENJRV9NU0lfSVJRU19QRVJfU0VUCQkzMg0KKyNkZWZpbmUgUENJRV9NU0lfSVJR U19OVU0gXA0KKwkoUENJRV9NU0lfSVJRU19QRVJfU0VUICogKFBDSUVfTVNJX1NFVF9OVU0pKQ0K Kw0KKyNkZWZpbmUgUENJRV9JTlRfRU5BQkxFX1JFRwkJMHgxODANCisjZGVmaW5lIFBDSUVfTVNJ X01BU0sJCQlHRU5NQVNLKFBDSUVfTVNJX1NFVF9OVU0gKyA4IC0gMSwgOCkNCisjZGVmaW5lIFBD SUVfTVNJX1NISUZUCQkJOA0KKyNkZWZpbmUgUENJRV9JTlRYX1NISUZUCQkJMjQNCisjZGVmaW5l IFBDSUVfSU5UWF9NQVNLCQkJR0VOTUFTSygyNywgMjQpDQorI2RlZmluZSBQQ0lFX01TR19NQVNL CQkJQklUKDI4KQ0KKyNkZWZpbmUgUENJRV9BRVJfTUFTSwkJCUJJVCgyOSkNCisjZGVmaW5lIFBD SUVfUE1fTUFTSwkJCUJJVCgzMCkNCisNCisjZGVmaW5lIFBDSUVfSU5UX1NUQVRVU19SRUcJCTB4 MTg0DQorI2RlZmluZSBQQ0lFX01TSV9TRVRfRU5BQkxFX1JFRwkJMHgxOTANCisNCisjZGVmaW5l IFBDSUVfTE9XX1BPV0VSX0NUUkxfUkVHCQkweDE5NA0KKyNkZWZpbmUgUENJRV9ESVNfTE9XUFdS X01BU0sJCUdFTk1BU0soMywgMCkNCisjZGVmaW5lIFBDSUVfRElTX0wwU19NQVNLCQlCSVQoMCkN CisjZGVmaW5lIFBDSUVfRElTX0wxX01BU0sJCUJJVCgxKQ0KKyNkZWZpbmUgUENJRV9ESVNfTDEx X01BU0sJCUJJVCgyKQ0KKyNkZWZpbmUgUENJRV9ESVNfTDEyX01BU0sJCUJJVCgzKQ0KKyNkZWZp bmUgUENJRV9GT1JDRV9ESVNfTE9XUFdSCQlHRU5NQVNLKDExLCA4KQ0KKyNkZWZpbmUgUENJRV9G T1JDRV9ESVNfTDBTCQlCSVQoOCkNCisjZGVmaW5lIFBDSUVfRk9SQ0VfRElTX0wxCQlCSVQoOSkN CisjZGVmaW5lIFBDSUVfRk9SQ0VfRElTX0wxMQkJQklUKDEwKQ0KKyNkZWZpbmUgUENJRV9GT1JD RV9ESVNfTDEyCQlCSVQoMTEpDQorDQorI2RlZmluZSBQQ0lFX0lDTURfUE1fUkVHCQkweDE5OA0K KyNkZWZpbmUgUENJRV9UVVJOX09GRl9MSU5LCQlCSVQoNCkNCisNCisjZGVmaW5lIFBDSUVfTVNJ X0FERFJfQkFTRV9SRUcJCTB4YzAwDQorI2RlZmluZSBQQ0lFX01TSV9TRVRfT0ZGU0VUCQkweDEw DQorI2RlZmluZSBQQ0lFX01TSV9TVEFUVVNfT0ZGU0VUCQkweDA0DQorI2RlZmluZSBQQ0lFX01T SV9FTkFCTEVfT0ZGU0VUCQkweDA4DQorDQorI2RlZmluZSBQQ0lFX1RSQU5TX1RBQkxFX0JBU0Vf UkVHCTB4ODAwDQorI2RlZmluZSBQQ0lFX0FUUl9TUkNfQUREUl9NU0JfT0ZGU0VUCTB4NA0KKyNk ZWZpbmUgUENJRV9BVFJfVFJTTF9BRERSX0xTQl9PRkZTRVQJMHg4DQorI2RlZmluZSBQQ0lFX0FU Ul9UUlNMX0FERFJfTVNCX09GRlNFVAkweGMNCisjZGVmaW5lIFBDSUVfQVRSX1RSU0xfUEFSQU1f T0ZGU0VUCTB4MTANCisjZGVmaW5lIFBDSUVfQVRSX1RMQl9TRVRfT0ZGU0VUCQkweDIwDQorDQor I2RlZmluZSBQQ0lFX01BWF9UUkFOU19UQUJMRVMJCTgNCisjZGVmaW5lIEFUUl9FTgkJCQlCSVQo MCkNCisjZGVmaW5lIEFUUl9TSVpFKHNpemUpCQkJKCgoKHNpemUpIC0gMSkgPDwgMSkgJiBHRU5N QVNLKDYsIDEpKQ0KKyNkZWZpbmUgQVRSX0lEKGlkKQkJCShpZCAmIEdFTk1BU0soMywgMCkpDQor I2RlZmluZSBBVFJfUEFSQU0ocGFyYW0pCQkoKChwYXJhbSkgPDwgMTYpICYgR0VOTUFTSygyNywg MTYpKQ0KKw0KKy8qKg0KKyAqIHN0cnVjdCBtdGtfcGNpZV9tc2kgLSBNU0kgaW5mb3JtYXRpb24g Zm9yIGVhY2ggc2V0DQorICogQGJhc2U6IElPIG1hcHBlZCByZWdpc3RlciBiYXNlDQorICogQGh3 aXJxOiBIYXJkd2FyZSBpbnRlcnJ1cHQgbnVtYmVyDQorICogQGlycTogTVNJIHNldCBJbnRlcnJ1 cHQgbnVtYmVyDQorICogQGluZGV4OiBNU0kgc2V0IG51bWJlcg0KKyAqIEBtc2dfYWRkcjogTVNJ IG1lc3NhZ2UgYWRkcmVzcw0KKyAqIEBkb21haW46IElSUSBkb21haW4NCisgKi8NCitzdHJ1Y3Qg bXRrX3BjaWVfbXNpIHsNCisJdm9pZCBfX2lvbWVtICpiYXNlOw0KKwlpbnQgaHdpcnE7DQorCWlu dCBpcnE7DQorCWludCBpbmRleDsNCisJcGh5c19hZGRyX3QgbXNnX2FkZHI7DQorCXN0cnVjdCBp cnFfZG9tYWluICpkb21haW47DQorfTsNCisNCisvKioNCisgKiBzdHJ1Y3QgbXRrX3BjaWVfcG9y dCAtIFBDSWUgcG9ydCBpbmZvcm1hdGlvbg0KKyAqIEBkZXY6IFBDSWUgZGV2aWNlDQorICogQGJh c2U6IElPIG1hcHBlZCByZWdpc3RlciBiYXNlDQorICogQHJlZ19iYXNlOiBQaHlzaWNhbCByZWdp c3RlciBiYXNlDQorICogQG1hY19yZXNldDogbWFjIHJlc2V0IGNvbnRyb2wNCisgKiBAcGh5X3Jl c2V0OiBwaHkgcmVzZXQgY29udHJvbA0KKyAqIEBwaHk6IFBIWSBjb250cm9sbGVyIGJsb2NrDQor ICogQGNsa3M6IFBDSWUgY2xvY2tzDQorICogQG51bV9jbGtzOiBQQ0llIGNsb2NrcyBjb3VudCBm b3IgdGhpcyBwb3J0DQorICogQGlzX3N1c3BlbmRlZDogZGV2aWNlIHN1c3BlbmQgc3RhdGUNCisg KiBAaXJxOiBQQ0llIGNvbnRyb2xsZXIgaW50ZXJydXB0IG51bWJlcg0KKyAqIEBpbnR4X2RvbWFp bjogbGVnYWN5IElOVHggSVJRIGRvbWFpbg0KKyAqIEBtc2lfZG9tYWluOiBNU0kgSVJRIGRvbWFp bg0KKyAqIEBtc2lfdG9wX2RvbWFpbjogTVNJIElSUSB0b3AgZG9tYWluDQorICogQG1zaV9pbmZv OiBNU0kgc2V0cyBpbmZvcm1hdGlvbg0KKyAqIEBsb2NrOiBsb2NrIHByb3RlY3RpbmcgSVJRIGJp dCBtYXANCisgKiBAbXNpX2lycV9pbl91c2U6IGJpdCBtYXAgZm9yIGFzc2lnbmVkIE1TSSBJUlEN CisgKi8NCitzdHJ1Y3QgbXRrX3BjaWVfcG9ydCB7DQorCXN0cnVjdCBkZXZpY2UgKmRldjsNCisJ dm9pZCBfX2lvbWVtICpiYXNlOw0KKwlwaHlzX2FkZHJfdCByZWdfYmFzZTsNCisJc3RydWN0IHJl c2V0X2NvbnRyb2wgKm1hY19yZXNldDsNCisJc3RydWN0IHJlc2V0X2NvbnRyb2wgKnBoeV9yZXNl dDsNCisJc3RydWN0IHBoeSAqcGh5Ow0KKwlzdHJ1Y3QgY2xrICoqY2xrczsNCisJaW50IG51bV9j bGtzOw0KKwlib29sIGlzX3N1c3BlbmRlZDsNCisNCisJaW50IGlycTsNCisJc3RydWN0IGlycV9k b21haW4gKmludHhfZG9tYWluOw0KKwlzdHJ1Y3QgaXJxX2RvbWFpbiAqbXNpX2RvbWFpbjsNCisJ c3RydWN0IGlycV9kb21haW4gKm1zaV90b3BfZG9tYWluOw0KKwlzdHJ1Y3QgbXRrX3BjaWVfbXNp ICoqbXNpX2luZm87DQorCXN0cnVjdCBtdXRleCBsb2NrOw0KKwlERUNMQVJFX0JJVE1BUChtc2lf aXJxX2luX3VzZSwgUENJRV9NU0lfSVJRU19OVU0pOw0KK307DQorDQorc3RhdGljIGludCBtdGtf cGNpZV9jb25maWdfcmVhZChzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4s DQorCQkJCSAgICBpbnQgd2hlcmUsIGludCBzaXplLCB1MzIgKnZhbCkNCit7DQorCXN0cnVjdCBt dGtfcGNpZV9wb3J0ICpwb3J0ID0gYnVzLT5zeXNkYXRhOw0KKwlpbnQgYnl0ZXM7DQorDQorCWJ5 dGVzID0gKCgxIDw8IHNpemUpIC0gMSkgPDwgKHdoZXJlICYgMHgzKTsNCisJd3JpdGVsKFBDSUVf Q0ZHX0hFQURFUl9GT1JDRV9CRShkZXZmbiwgYnVzLT5udW1iZXIsIGJ5dGVzKSwNCisJICAgICAg IHBvcnQtPmJhc2UgKyBQQ0lFX0NGR05VTV9SRUcpOw0KKw0KKwkqdmFsID0gcmVhZGwocG9ydC0+ YmFzZSArIFBDSUVfQ0ZHX09GRlNFVF9BRERSICsgKHdoZXJlICYgfjB4MykpOw0KKw0KKwlpZiAo c2l6ZSA8PSAyKQ0KKwkJKnZhbCA9ICgqdmFsID4+ICg4ICogKHdoZXJlICYgMHgzKSkpICYgKCgx IDw8IChzaXplICogOCkpIC0gMSk7DQorDQorCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7DQor fQ0KKw0KK3N0YXRpYyBpbnQgbXRrX3BjaWVfY29uZmlnX3dyaXRlKHN0cnVjdCBwY2lfYnVzICpi dXMsIHVuc2lnbmVkIGludCBkZXZmbiwNCisJCQkJICAgICBpbnQgd2hlcmUsIGludCBzaXplLCB1 MzIgdmFsKQ0KK3sNCisJc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBidXMtPnN5c2RhdGE7 DQorCWludCBieXRlczsNCisNCisJYnl0ZXMgPSAoKDEgPDwgc2l6ZSkgLSAxKSA8PCAod2hlcmUg JiAweDMpOw0KKwl3cml0ZWwoUENJRV9DRkdfSEVBREVSX0ZPUkNFX0JFKGRldmZuLCBidXMtPm51 bWJlciwgYnl0ZXMpLA0KKwkgICAgICAgcG9ydC0+YmFzZSArIFBDSUVfQ0ZHTlVNX1JFRyk7DQor DQorCWlmIChzaXplIDw9IDIpDQorCQl2YWwgPSAodmFsICYgKCgxIDw8IChzaXplICogOCkpIC0g MSkpIDw8ICgod2hlcmUgJiAweDMpICogOCk7DQorDQorCXdyaXRlbCh2YWwsIHBvcnQtPmJhc2Ug KyBQQ0lFX0NGR19PRkZTRVRfQUREUiArICh3aGVyZSAmIH4weDMpKTsNCisNCisJcmV0dXJuIFBD SUJJT1NfU1VDQ0VTU0ZVTDsNCit9DQorDQorc3RhdGljIHN0cnVjdCBwY2lfb3BzIG10a19wY2ll X29wcyA9IHsNCisJLnJlYWQgID0gbXRrX3BjaWVfY29uZmlnX3JlYWQsDQorCS53cml0ZSA9IG10 a19wY2llX2NvbmZpZ193cml0ZSwNCit9Ow0KKw0KK3N0YXRpYyB2b2lkIG10a19wY2llX3NldF90 cmFuc193aW5kb3codm9pZCBfX2lvbWVtICpyZWcsDQorCQkJCSAgICAgIHJlc291cmNlX3NpemVf dCBjcHVfYWRkciwNCisJCQkJICAgICAgcmVzb3VyY2Vfc2l6ZV90IHBjaV9hZGRyLCBzaXplX3Qg c2l6ZSkNCit7DQorCXdyaXRlbChsb3dlcl8zMl9iaXRzKGNwdV9hZGRyKSB8IEFUUl9TSVpFKGZs cyhzaXplKSAtIDEpIHwgQVRSX0VOLCByZWcpOw0KKwl3cml0ZWwodXBwZXJfMzJfYml0cyhjcHVf YWRkciksIHJlZyArIFBDSUVfQVRSX1NSQ19BRERSX01TQl9PRkZTRVQpOw0KKwl3cml0ZWwobG93 ZXJfMzJfYml0cyhwY2lfYWRkciksIHJlZyArIFBDSUVfQVRSX1RSU0xfQUREUl9MU0JfT0ZGU0VU KTsNCisJd3JpdGVsKHVwcGVyXzMyX2JpdHMocGNpX2FkZHIpLCByZWcgKyBQQ0lFX0FUUl9UUlNM X0FERFJfTVNCX09GRlNFVCk7DQorCXdyaXRlbChBVFJfSUQoMCkgfCBBVFJfUEFSQU0oMCksIHJl ZyArIFBDSUVfQVRSX1RSU0xfUEFSQU1fT0ZGU0VUKTsNCit9DQorDQorc3RhdGljIGludCBtdGtf cGNpZV9zZXRfdHJhbnNfdGFibGUodm9pZCBfX2lvbWVtICpyZWcsDQorCQkJCSAgICByZXNvdXJj ZV9zaXplX3QgY3B1X2FkZHIsDQorCQkJCSAgICByZXNvdXJjZV9zaXplX3QgcGNpX2FkZHIsIHNp emVfdCBzaXplLA0KKwkJCQkgICAgaW50IG51bSkNCit7DQorCXZvaWQgX19pb21lbSAqdGFibGVf YmFzZTsNCisNCisJaWYgKG51bSA+IFBDSUVfTUFYX1RSQU5TX1RBQkxFUykNCisJCXJldHVybiAt RU5PREVWOw0KKw0KKwl0YWJsZV9iYXNlID0gcmVnICsgbnVtICogUENJRV9BVFJfVExCX1NFVF9P RkZTRVQ7DQorCW10a19wY2llX3NldF90cmFuc193aW5kb3codGFibGVfYmFzZSwgY3B1X2FkZHIs IHBjaV9hZGRyLCBzaXplKTsNCisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXRr X3BjaWVfc3RhcnR1cF9wb3J0KHN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0KQ0KK3sNCisJc3Ry dWN0IHJlc291cmNlX2VudHJ5ICplbnRyeTsNCisJc3RydWN0IHBjaV9ob3N0X2JyaWRnZSAqaG9z dCA9IHBjaV9ob3N0X2JyaWRnZV9mcm9tX3ByaXYocG9ydCk7DQorCXUzMiB2YWw7DQorCWludCBl cnIgPSAwLCB0YWJsZV9pbmRleCA9IDA7DQorDQorCS8qIFNldCBhcyBSQyBtb2RlICovDQorCXZh bCA9IHJlYWRsKHBvcnQtPmJhc2UgKyBQQ0lFX1NFVFRJTkdfUkVHKTsNCisJdmFsIHw9IFBDSUVf UkNfTU9ERTsNCisJd3JpdGVsKHZhbCwgcG9ydC0+YmFzZSArIFBDSUVfU0VUVElOR19SRUcpOw0K Kw0KKwkvKiBTZXQgY2xhc3MgY29kZSAqLw0KKwl2YWwgPSByZWFkbChwb3J0LT5iYXNlICsgUENJ RV9QQ0lfSURTXzEpOw0KKwl2YWwgJj0gfkdFTk1BU0soMzEsIDgpOw0KKwl2YWwgfD0gUENJX0NM QVNTKFBDSV9DTEFTU19CUklER0VfUENJIDw8IDgpOw0KKwl3cml0ZWwodmFsLCBwb3J0LT5iYXNl ICsgUENJRV9QQ0lfSURTXzEpOw0KKw0KKwkvKiBBc3NlcnQgYWxsIHJlc2V0IHNpZ25hbHMgKi8N CisJdmFsID0gcmVhZGwocG9ydC0+YmFzZSArIFBDSUVfUlNUX0NUUkxfUkVHKTsNCisJdmFsIHw9 IFBDSUVfTUFDX1JTVEIgfCBQQ0lFX1BIWV9SU1RCIHwgUENJRV9CUkdfUlNUQiB8IFBDSUVfUEVf UlNUQjsNCisJd3JpdGVsKHZhbCwgcG9ydC0+YmFzZSArIFBDSUVfUlNUX0NUUkxfUkVHKTsNCisN CisJLyogRGUtYXNzZXJ0IHJlc2V0IHNpZ25hbHMqLw0KKwl2YWwgJj0gfihQQ0lFX01BQ19SU1RC IHwgUENJRV9QSFlfUlNUQiB8IFBDSUVfQlJHX1JTVEIpOw0KKwl3cml0ZWwodmFsLCBwb3J0LT5i YXNlICsgUENJRV9SU1RfQ1RSTF9SRUcpOw0KKw0KKwl1c2xlZXBfcmFuZ2UoMTAwICogMTAwMCwg MTIwICogMTAwMCk7DQorDQorCS8qIERlLWFzc2VydCBwZSByZXNldCovDQorCXZhbCAmPSB+UENJ RV9QRV9SU1RCOw0KKwl3cml0ZWwodmFsLCBwb3J0LT5iYXNlICsgUENJRV9SU1RfQ1RSTF9SRUcp Ow0KKw0KKwkvKiBDaGVjayBpZiB0aGUgbGluayBpcyB1cCBvciBub3QgKi8NCisJZXJyID0gcmVh ZGxfcG9sbF90aW1lb3V0KHBvcnQtPmJhc2UgKyBQQ0lFX0xJTktfU1RBVFVTX1JFRywgdmFsLA0K KwkJCSEhKHZhbCAmIFBDSUVfUE9SVF9MSU5LVVApLCAyMCwNCisJCQk1MCAqIFVTRUNfUEVSX01T RUMpOw0KKwlpZiAoZXJyKQ0KKwkJcmV0dXJuIGVycjsNCisNCisJLyogU2V0IFBDSWUgdHJhbnNs YXRpb24gd2luZG93cyAqLw0KKwlyZXNvdXJjZV9saXN0X2Zvcl9lYWNoX2VudHJ5KGVudHJ5LCAm aG9zdC0+d2luZG93cykgew0KKwkJdW5zaWduZWQgbG9uZyB0eXBlID0gcmVzb3VyY2VfdHlwZShl bnRyeS0+cmVzKTsNCisJCXN0cnVjdCByZXNvdXJjZSAqcmVzID0gTlVMTDsNCisJCXJlc291cmNl X3NpemVfdCBjcHVfYWRkcjsNCisJCXJlc291cmNlX3NpemVfdCBwY2lfYWRkcjsNCisNCisJCWlm ICghKHR5cGUgJiAoSU9SRVNPVVJDRV9NRU0gfCBJT1JFU09VUkNFX0lPKSkpDQorCQkJY29udGlu dWU7DQorDQorCQlyZXMgPSBlbnRyeS0+cmVzOw0KKwkJY3B1X2FkZHIgPSByZXMtPnN0YXJ0Ow0K KwkJcGNpX2FkZHIgPSByZXMtPnN0YXJ0IC0gZW50cnktPm9mZnNldDsNCisJCW10a19wY2llX3Nl dF90cmFuc190YWJsZShwb3J0LT5iYXNlICsgUENJRV9UUkFOU19UQUJMRV9CQVNFX1JFRywNCisJ CQkJCSBjcHVfYWRkciwgcGNpX2FkZHIsIHJlc291cmNlX3NpemUocmVzKSwNCisJCQkJCSB0YWJs ZV9pbmRleCk7DQorDQorCQlkZXZfZGJnKHBvcnQtPmRldiwgIlNldCAlcyB0cmFucyB3aW5kb3db JWRdOiBjcHVfYWRkciA9ICUjbGx4LCBwY2lfYWRkciA9ICUjbGx4LCBzaXplID0gJSNsbHhcbiIs DQorCQkJKCEhKHR5cGUgJiBJT1JFU09VUkNFX01FTSkgPyAiTUVNIiA6ICJJTyIpLCB0YWJsZV9p bmRleCwNCisJCQljcHVfYWRkciwgcGNpX2FkZHIsIHJlc291cmNlX3NpemUocmVzKSk7DQorDQor CQl0YWJsZV9pbmRleCsrOw0KKwl9DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW5s aW5lIHN0cnVjdCBtdGtfcGNpZV9tc2kgKm10a19nZXRfbXNpX2luZm8oc3RydWN0IG10a19wY2ll X3BvcnQgKnBvcnQsDQorCQkJCQkgICAgIHVuc2lnbmVkIGludCBod2lycSkNCit7DQorCXJldHVy biBwb3J0LT5tc2lfaW5mb1tod2lycSAvIFBDSUVfTVNJX0lSUVNfUEVSX1NFVF07DQorfQ0KKw0K K3N0YXRpYyBpbnQgbXRrX3BjaWVfc2V0X2FmZmluaXR5KHN0cnVjdCBpcnFfZGF0YSAqZGF0YSwN CisJCQkJIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLCBib29sIGZvcmNlKQ0KK3sNCisJc3Ry dWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkYXRh KTsNCisJaW50IHJldDsNCisNCisJcmV0ID0gaXJxX3NldF9hZmZpbml0eV9oaW50KHBvcnQtPmly cSwgbWFzayk7DQorCWlmIChyZXQpDQorCQlyZXR1cm4gcmV0Ow0KKw0KKwlpcnFfZGF0YV91cGRh dGVfZWZmZWN0aXZlX2FmZmluaXR5KGRhdGEsIG1hc2spOw0KKw0KKwlyZXR1cm4gMDsNCit9DQor DQorc3RhdGljIHZvaWQgbXRrX2NvbXBvc2VfbXNpX21zZyhzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEs IHN0cnVjdCBtc2lfbXNnICptc2cpDQorew0KKwlzdHJ1Y3QgbXRrX3BjaWVfbXNpICptc2lfaW5m bzsNCisJc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBf ZGF0YShkYXRhKTsNCisNCisJbXNpX2luZm8gPSBtdGtfZ2V0X21zaV9pbmZvKHBvcnQsIGRhdGEt Pmh3aXJxKTsNCisNCisJbXNnLT5hZGRyZXNzX2hpID0gMDsNCisJbXNnLT5hZGRyZXNzX2xvID0g bG93ZXJfMzJfYml0cyhtc2lfaW5mby0+bXNnX2FkZHIpOw0KKw0KKwltc2ctPmRhdGEgPSBkYXRh LT5od2lycTsNCisJZGV2X2RiZyhwb3J0LT5kZXYsICJtc2kjJSNseCBhZGRyZXNzX2hpICUjeCBh ZGRyZXNzX2xvICUjeCBkYXRhICVkXG4iLA0KKwkJZGF0YS0+aHdpcnEsIG1zZy0+YWRkcmVzc19o aSwgbXNnLT5hZGRyZXNzX2xvLCBtc2ctPmRhdGEpOw0KK30NCisNCitzdGF0aWMgdm9pZCBtdGtf bXNpX2lycV9hY2soc3RydWN0IGlycV9kYXRhICpkYXRhKQ0KK3sNCisJc3RydWN0IG10a19wY2ll X21zaSAqbXNpX2luZm87DQorCXN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0ID0gaXJxX2RhdGFf Z2V0X2lycV9jaGlwX2RhdGEoZGF0YSk7DQorCWludCBod2lycTsNCisNCisJbXNpX2luZm8gPSBt dGtfZ2V0X21zaV9pbmZvKHBvcnQsIGRhdGEtPmh3aXJxKTsNCisNCisJaHdpcnEgPQlkYXRhLT5o d2lycSAlIFBDSUVfTVNJX0lSUVNfUEVSX1NFVDsNCisNCisJd3JpdGVsKDEgPDwgaHdpcnEsIG1z aV9pbmZvLT5iYXNlICsgUENJRV9NU0lfU1RBVFVTX09GRlNFVCk7DQorfQ0KKw0KK3N0YXRpYyB2 b2lkIG10a19tc2lfaXJxX21hc2soc3RydWN0IGlycV9kYXRhICpkYXRhKQ0KK3sNCisJc3RydWN0 IG10a19wY2llX21zaSAqbXNpX2luZm87DQorCXN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0ID0g aXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZGF0YSk7DQorCWludCB2YWw7DQorDQorCW1zaV9p bmZvID0gbXRrX2dldF9tc2lfaW5mbyhwb3J0LCBkYXRhLT5od2lycSk7DQorCXZhbCA9IHJlYWRs KG1zaV9pbmZvLT5iYXNlICsgUENJRV9NU0lfRU5BQkxFX09GRlNFVCk7DQorCXZhbCAmPSB+KDEg PDwgZGF0YS0+aHdpcnEpOw0KKwl3cml0ZWwodmFsLCBtc2lfaW5mby0+YmFzZSArIFBDSUVfTVNJ X0VOQUJMRV9PRkZTRVQpOw0KKw0KKwlwY2lfbXNpX21hc2tfaXJxKGRhdGEpOw0KK30NCisNCitz dGF0aWMgdm9pZCBtdGtfbXNpX2lycV91bm1hc2soc3RydWN0IGlycV9kYXRhICpkYXRhKQ0KK3sN CisJc3RydWN0IG10a19wY2llX21zaSAqbXNpX2luZm87DQorCXN0cnVjdCBtdGtfcGNpZV9wb3J0 ICpwb3J0ID0gaXJxX2RhdGFfZ2V0X2lycV9jaGlwX2RhdGEoZGF0YSk7DQorCWludCB2YWw7DQor DQorCW1zaV9pbmZvID0gbXRrX2dldF9tc2lfaW5mbyhwb3J0LCBkYXRhLT5od2lycSk7DQorCXZh bCA9IHJlYWRsKG1zaV9pbmZvLT5iYXNlICsgUENJRV9NU0lfRU5BQkxFX09GRlNFVCk7DQorCXZh bCB8PSAoMSA8PCBkYXRhLT5od2lycSk7DQorCXdyaXRlbCh2YWwsIG1zaV9pbmZvLT5iYXNlICsg UENJRV9NU0lfRU5BQkxFX09GRlNFVCk7DQorDQorCXBjaV9tc2lfdW5tYXNrX2lycShkYXRhKTsN Cit9DQorDQorc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtdGtfbXNpX2lycV9jaGlwID0gew0KKwku aXJxX2FjawkJPSBtdGtfbXNpX2lycV9hY2ssDQorCS5pcnFfY29tcG9zZV9tc2lfbXNnCT0gbXRr X2NvbXBvc2VfbXNpX21zZywNCisJLmlycV9tYXNrCQk9IG10a19tc2lfaXJxX21hc2ssDQorCS5p cnFfdW5tYXNrCQk9IG10a19tc2lfaXJxX3VubWFzaywNCisJLmlycV9zZXRfYWZmaW5pdHkJPSBt dGtfcGNpZV9zZXRfYWZmaW5pdHksDQorCS5uYW1lCQkJPSAiUENJZSIsDQorfTsNCisNCitzdGF0 aWMgaXJxX2h3X251bWJlcl90IG10a19wY2llX21zaV9nZXRfaHdpcnEoc3RydWN0IG1zaV9kb21h aW5faW5mbyAqaW5mbywNCisJCQkJCSAgICAgIG1zaV9hbGxvY19pbmZvX3QgKmFyZykNCit7DQor CXN0cnVjdCBtc2lfZGVzYyAqZW50cnkgPSBhcmctPmRlc2M7DQorCXN0cnVjdCBtdGtfcGNpZV9w b3J0ICpwb3J0ID0gaW5mby0+Y2hpcF9kYXRhOw0KKwlpbnQgaHdpcnE7DQorDQorCW11dGV4X2xv Y2soJnBvcnQtPmxvY2spOw0KKw0KKwlod2lycSA9IGJpdG1hcF9maW5kX2ZyZWVfcmVnaW9uKHBv cnQtPm1zaV9pcnFfaW5fdXNlLCBQQ0lFX01TSV9JUlFTX05VTSwNCisJCQlvcmRlcl9iYXNlXzIo ZW50cnktPm52ZWNfdXNlZCkpOw0KKwlpZiAoaHdpcnEgPCAwKSB7DQorCQltdXRleF91bmxvY2so JnBvcnQtPmxvY2spOw0KKwkJcmV0dXJuIC1FTk9TUEM7DQorCX0NCisNCisJbXV0ZXhfdW5sb2Nr KCZwb3J0LT5sb2NrKTsNCisNCisJcmV0dXJuIGh3aXJxOw0KK30NCisNCitzdGF0aWMgdm9pZCBt dGtfcGNpZV9tc2lfZnJlZShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLA0KKwkJCSAgICAgIHN0 cnVjdCBtc2lfZG9tYWluX2luZm8gKmluZm8sIHVuc2lnbmVkIGludCB2aXJxKQ0KK3sNCisJc3Ry dWN0IGlycV9kYXRhICpkYXRhID0gaXJxX2RvbWFpbl9nZXRfaXJxX2RhdGEoZG9tYWluLCB2aXJx KTsNCisJc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBf ZGF0YShkYXRhKTsNCisNCisJbXV0ZXhfbG9jaygmcG9ydC0+bG9jayk7DQorDQorCWJpdG1hcF9j bGVhcihwb3J0LT5tc2lfaXJxX2luX3VzZSwgZGF0YS0+aHdpcnEsIDEpOw0KKw0KKwltdXRleF91 bmxvY2soJnBvcnQtPmxvY2spOw0KK30NCisNCitzdGF0aWMgc3RydWN0IG1zaV9kb21haW5fb3Bz IG10a19tc2lfZG9tYWluX29wcyA9IHsNCisJLmdldF9od2lycQk9IG10a19wY2llX21zaV9nZXRf aHdpcnEsDQorCS5tc2lfZnJlZQk9IG10a19wY2llX21zaV9mcmVlLA0KK307DQorDQorc3RhdGlj IHN0cnVjdCBtc2lfZG9tYWluX2luZm8gbXRrX21zaV9kb21haW5faW5mbyA9IHsNCisJLmZsYWdz CQk9IChNU0lfRkxBR19VU0VfREVGX0RPTV9PUFMgfCBNU0lfRkxBR19QQ0lfTVNJWCB8DQorCQkJ ICAgTVNJX0ZMQUdfVVNFX0RFRl9DSElQX09QUyB8IE1TSV9GTEFHX01VTFRJX1BDSV9NU0kpLA0K KwkuY2hpcAkJPSAmbXRrX21zaV9pcnFfY2hpcCwNCisJLm9wcwkJPSAmbXRrX21zaV9kb21haW5f b3BzLA0KKwkuaGFuZGxlcgk9IGhhbmRsZV9lZGdlX2lycSwNCisJLmhhbmRsZXJfbmFtZQk9ICJN U0kiLA0KK307DQorDQorc3RhdGljIHZvaWQgbXRrX21zaV90b3BfaXJxX2FjayhzdHJ1Y3QgaXJx X2RhdGEgKmRhdGEpDQorew0KKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9IGlycV9kYXRh X2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOw0KKwlpbnQgbXNpX2lycSA9IGRhdGEtPmh3aXJxICsg UENJRV9NU0lfU0hJRlQ7DQorDQorCXdyaXRlbCgxIDw8IG1zaV9pcnEsIHBvcnQtPmJhc2UgKyBQ Q0lFX0lOVF9TVEFUVVNfUkVHKTsNCit9DQorDQorc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtdGtf bXNpX3RvcF9pcnFfY2hpcCA9IHsNCisJLmlycV9hY2sJPSBtdGtfbXNpX3RvcF9pcnFfYWNrLA0K KwkubmFtZQkJPSAiUENJZSIsDQorfTsNCisNCitzdGF0aWMgdm9pZCBtdGtfcGNpZV9tc2lfaGFu ZGxlcihzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpDQorew0KKwlzdHJ1Y3QgbXRrX3BjaWVfbXNpICpt c2lfaW5mbyA9IGlycV9kZXNjX2dldF9oYW5kbGVyX2RhdGEoZGVzYyk7DQorCXN0cnVjdCBpcnFf Y2hpcCAqaXJxY2hpcCA9IGlycV9kZXNjX2dldF9jaGlwKGRlc2MpOw0KKwl1bnNpZ25lZCBsb25n IG1zaV9lbmFibGUsIG1zaV9zdGF0dXM7DQorCXUzMiB2aXJxLCBiaXQsIGh3aXJxOw0KKw0KKwly YXdfc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsNCisNCisJbXNpX2VuYWJsZSA9IHJlYWRsKG1zaV9p bmZvLT5iYXNlICsgUENJRV9NU0lfRU5BQkxFX09GRlNFVCk7DQorCXdoaWxlICgobXNpX3N0YXR1 cyA9IHJlYWRsKG1zaV9pbmZvLT5iYXNlICsgUENJRV9NU0lfU1RBVFVTX09GRlNFVCkpKSB7DQor CQltc2lfc3RhdHVzICY9IG1zaV9lbmFibGU7DQorCQlmb3JfZWFjaF9zZXRfYml0KGJpdCwgJm1z aV9zdGF0dXMsIFBDSUVfTVNJX0lSUVNfUEVSX1NFVCkgew0KKwkJCWh3aXJxID0gYml0ICsgbXNp X2luZm8tPmluZGV4ICogUENJRV9NU0lfSVJRU19QRVJfU0VUOw0KKwkJCXZpcnEgPSBpcnFfZmlu ZF9tYXBwaW5nKG1zaV9pbmZvLT5kb21haW4sIGh3aXJxKTsNCisJCQlnZW5lcmljX2hhbmRsZV9p cnEodmlycSk7DQorCQl9DQorCX0NCisNCisJaXJxY2hpcC0+aXJxX2FjaygmZGVzYy0+aXJxX2Rh dGEpOw0KKw0KKwlyYXdfc3Bpbl91bmxvY2soJmRlc2MtPmxvY2spOw0KK30NCisNCitzdGF0aWMg aW50IG10a19tc2lfdG9wX2RvbWFpbl9tYXAoc3RydWN0IGlycV9kb21haW4gKmRvbWFpbiwNCisJ CQkJICAgIHVuc2lnbmVkIGludCB2aXJxLCBpcnFfaHdfbnVtYmVyX3QgaHdpcnEpDQorew0KKwlz dHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9IGRvbWFpbi0+aG9zdF9kYXRhOw0KKwlzdHJ1Y3Qg bXRrX3BjaWVfbXNpICptc2lfaW5mbyA9IHBvcnQtPm1zaV9pbmZvW2h3aXJxXTsNCisNCisJaXJx X2RvbWFpbl9zZXRfaW5mbyhkb21haW4sIHZpcnEsIGh3aXJxLA0KKwkJCSAgICAmbXRrX21zaV90 b3BfaXJxX2NoaXAsIGRvbWFpbi0+aG9zdF9kYXRhLA0KKwkJCSAgICBtdGtfcGNpZV9tc2lfaGFu ZGxlciwgbXNpX2luZm8sIE5VTEwpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGNv bnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBtdGtfbXNpX3RvcF9kb21haW5fb3BzID0gew0KKwku bWFwID0gbXRrX21zaV90b3BfZG9tYWluX21hcCwNCit9Ow0KKw0KK3N0YXRpYyB2b2lkIG10a19p bnR4X2FjayhzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEpDQorew0KKwlzdHJ1Y3QgbXRrX3BjaWVfcG9y dCAqcG9ydCA9IGlycV9kYXRhX2dldF9pcnFfY2hpcF9kYXRhKGRhdGEpOw0KKwlpbnQgaHdpcnE7 DQorDQorCWh3aXJxID0gZGF0YS0+aHdpcnEgKyBQQ0lFX0lOVFhfU0hJRlQ7DQorCXdyaXRlbCgx IDw8IGh3aXJxLCBwb3J0LT5iYXNlICsgUENJRV9JTlRfU1RBVFVTX1JFRyk7DQorfQ0KKw0KK3N0 YXRpYyB2b2lkIG10a19pbnR4X21hc2soc3RydWN0IGlycV9kYXRhICpkYXRhKQ0KK3sNCisJc3Ry dWN0IG10a19wY2llX3BvcnQgKnBvcnQgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkYXRh KTsNCisJaW50IHZhbDsNCisNCisJdmFsID0gcmVhZGwocG9ydC0+YmFzZSArIFBDSUVfSU5UX0VO QUJMRV9SRUcpOw0KKwl2YWwgJj0gfigxIDw8IChkYXRhLT5od2lycSArIFBDSUVfSU5UWF9TSElG VCkpOw0KKwl3cml0ZWwodmFsLCBwb3J0LT5iYXNlICsgUENJRV9JTlRfRU5BQkxFX1JFRyk7DQor fQ0KKw0KK3N0YXRpYyB2b2lkIG10a19pbnR4X3VubWFzayhzdHJ1Y3QgaXJxX2RhdGEgKmRhdGEp DQorew0KKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9IGlycV9kYXRhX2dldF9pcnFfY2hp cF9kYXRhKGRhdGEpOw0KKwlpbnQgdmFsLCBod2lycTsNCisNCisJLyoqDQorCSAqIEFzIGFuIGVt dWxhdGVkIGxldmVsIGlycSwgdGhpcyBpbnRlcnJ1cHQgc3RhdHVzIHdpbGwgYmUgcmVtYWluZWQN CisJICogdW50aWwgcmVjZWl2ZSB0aGUgY29ycmVzcG9uZGluZyBtZXNzYWdlIG9mIGRlLWFzc2Vy dCwgaGVuY2UgdGhhdA0KKwkgKiB0aGUgc3RhdHVzIGNhbiBvbmx5IGJlIGNsZWFyZWQgYXQgdGhp cyBwb2ludC4NCisJICovDQorCWh3aXJxID0gZGF0YS0+aHdpcnEgKyBQQ0lFX0lOVFhfU0hJRlQ7 DQorCXdyaXRlbCgxIDw8IGh3aXJxLCBwb3J0LT5iYXNlICsgUENJRV9JTlRfU1RBVFVTX1JFRyk7 DQorDQorCXZhbCA9IHJlYWRsKHBvcnQtPmJhc2UgKyBQQ0lFX0lOVF9FTkFCTEVfUkVHKTsNCisJ dmFsIHw9IDEgPDwgKGRhdGEtPmh3aXJxICsgUENJRV9JTlRYX1NISUZUKTsNCisJd3JpdGVsKHZh bCwgcG9ydC0+YmFzZSArIFBDSUVfSU5UX0VOQUJMRV9SRUcpOw0KK30NCisNCitzdGF0aWMgc3Ry dWN0IGlycV9jaGlwIG10a19pbnR4X2lycV9jaGlwID0gew0KKwkuaXJxX2FjawkJPSBtdGtfaW50 eF9hY2ssDQorCS5pcnFfbWFzawkJPSBtdGtfaW50eF9tYXNrLA0KKwkuaXJxX3VubWFzawkJPSBt dGtfaW50eF91bm1hc2ssDQorCS5pcnFfc2V0X2FmZmluaXR5CT0gbXRrX3BjaWVfc2V0X2FmZmlu aXR5LA0KKwkubmFtZQkJCT0gIlBDSWUiLA0KK307DQorDQorc3RhdGljIGludCBtdGtfcGNpZV9p bnR4X21hcChzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLCB1bnNpZ25lZCBpbnQgaXJxLA0KKwkJ CSAgICAgaXJxX2h3X251bWJlcl90IGh3aXJxKQ0KK3sNCisJaXJxX3NldF9jaGlwX2FuZF9oYW5k bGVyX25hbWUoaXJxLCAmbXRrX2ludHhfaXJxX2NoaXAsIGhhbmRsZV9sZXZlbF9pcnEsDQorCQkJ CSAgICAgICJJTlR4Iik7DQorCWlycV9zZXRfY2hpcF9kYXRhKGlycSwgZG9tYWluLT5ob3N0X2Rh dGEpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9t YWluX29wcyBpbnR4X2RvbWFpbl9vcHMgPSB7DQorCS5tYXAgPSBtdGtfcGNpZV9pbnR4X21hcCwN Cit9Ow0KKw0KK3N0YXRpYyBpbnQgbXRrX3BjaWVfaW5pdF9pcnFfZG9tYWlucyhzdHJ1Y3QgbXRr X3BjaWVfcG9ydCAqcG9ydCwNCisJCQkJICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpDQor ew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwb3J0LT5kZXY7DQorCXN0cnVjdCBkZXZpY2Vfbm9k ZSAqaW50Y19ub2RlOw0KKwlzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2RlID0gb2Zfbm9kZV90 b19md25vZGUobm9kZSk7DQorCXN0cnVjdCBtdGtfcGNpZV9tc2kgKm1zaV9pbmZvOw0KKwlzdHJ1 Y3QgbXNpX2RvbWFpbl9pbmZvICppbmZvOw0KKwlpbnQgaSwgdmFsLCByZXQ7DQorDQorCS8qIFNl dHVwIElOVHggKi8NCisJaW50Y19ub2RlID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUobm9kZSwgImxl Z2FjeS1pbnRlcnJ1cHQtY29udHJvbGxlciIpOw0KKwlpZiAoIWludGNfbm9kZSkgew0KKwkJZGV2 X25vdGljZShkZXYsICJNaXNzaW5nIFBDSWUgSW50YyBub2RlXG4iKTsNCisJCXJldHVybiAtRU5P REVWOw0KKwl9DQorDQorCXBvcnQtPmludHhfZG9tYWluID0gaXJxX2RvbWFpbl9hZGRfbGluZWFy KGludGNfbm9kZSwgUENJX05VTV9JTlRYLA0KKwkJCQkJCSAgJmludHhfZG9tYWluX29wcywgcG9y dCk7DQorCWlmICghcG9ydC0+aW50eF9kb21haW4pIHsNCisJCWRldl9ub3RpY2UoZGV2LCAiZmFp bGVkIHRvIGdldCBJTlR4IElSUSBkb21haW5cbiIpOw0KKwkJcmV0dXJuIC1FTk9ERVY7DQorCX0N CisNCisJLyogU2V0dXAgTVNJICovDQorCW11dGV4X2luaXQoJnBvcnQtPmxvY2spOw0KKw0KKwlp bmZvID0gZGV2bV9remFsbG9jKGRldiwgc2l6ZW9mKCppbmZvKSwgR0ZQX0tFUk5FTCk7DQorCWlm ICghaW5mbykNCisJCXJldHVybiAtRU5PTUVNOw0KKw0KKwltZW1jcHkoaW5mbywgJm10a19tc2lf ZG9tYWluX2luZm8sIHNpemVvZigqaW5mbykpOw0KKwlpbmZvLT5jaGlwX2RhdGEgPSBwb3J0Ow0K Kw0KKwlwb3J0LT5tc2lfZG9tYWluID0gcGNpX21zaV9jcmVhdGVfaXJxX2RvbWFpbihmd25vZGUs IGluZm8sIE5VTEwpOw0KKwlpZiAoIXBvcnQtPm1zaV9kb21haW4pIHsNCisJCWRldl9pbmZvKGRl diwgImZhaWxlZCB0byBjcmVhdGUgbXNpIGRvbWFpblxuIik7DQorCQlyZXQgPSAtRU5PREVWOw0K KwkJZ290byBlcnJfbXNpX2RvbWFpbjsNCisJfQ0KKw0KKwkvKiBFbmFibGUgTVNJIGFuZCBzZXR1 cCBwY2llIGRvbWFpbnMgKi8NCisJcG9ydC0+bXNpX3RvcF9kb21haW4gPSBpcnFfZG9tYWluX2Fk ZF9oaWVyYXJjaHkoTlVMTCwgMCwgMCwgbm9kZSwNCisJCQkJCQkJJm10a19tc2lfdG9wX2RvbWFp bl9vcHMsDQorCQkJCQkJCXBvcnQpOw0KKwlpZiAoIXBvcnQtPm1zaV90b3BfZG9tYWluKSB7DQor CQlkZXZfaW5mbyhkZXYsICJmYWlsZWQgdG8gY3JlYXRlIG1zaSB0b3AgZG9tYWluXG4iKTsNCisJ CXJldCA9IC1FTk9ERVY7DQorCQlnb3RvIGVycl9tc2lfdG9wX2RvbWFpbjsNCisJfQ0KKw0KKwlw b3J0LT5tc2lfaW5mbyA9IGRldm1fa3phbGxvYyhkZXYsIFBDSUVfTVNJX1NFVF9OVU0sIEdGUF9L RVJORUwpOw0KKwlpZiAoIXBvcnQtPm1zaV9pbmZvKSB7DQorCQlyZXQgPSAtRU5PTUVNOw0KKwkJ Z290byBlcnJfbXNpX2luZm87DQorCX0NCisNCisJZm9yIChpID0gMDsgaSA8IFBDSUVfTVNJX1NF VF9OVU07IGkrKykgew0KKwkJaW50IG9mZnNldCA9IGkgKiBQQ0lFX01TSV9TRVRfT0ZGU0VUOw0K Kw0KKwkJbXNpX2luZm8gPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKm1zaV9pbmZvKSwgR0ZQ X0tFUk5FTCk7DQorCQlpZiAoIW1zaV9pbmZvKSB7DQorCQkJcmV0ID0gLUVOT01FTTsNCisJCQln b3RvIGVycl9tc2lfc2V0Ow0KKwkJfQ0KKw0KKwkJbXNpX2luZm8tPmJhc2UgPSBwb3J0LT5iYXNl ICsgUENJRV9NU0lfQUREUl9CQVNFX1JFRyArIG9mZnNldDsNCisJCW1zaV9pbmZvLT5tc2dfYWRk ciA9IHBvcnQtPnJlZ19iYXNlICsgUENJRV9NU0lfQUREUl9CQVNFX1JFRyArDQorCQkJCSAgICAg b2Zmc2V0Ow0KKw0KKwkJd3JpdGVsKGxvd2VyXzMyX2JpdHMobXNpX2luZm8tPm1zZ19hZGRyKSwg bXNpX2luZm8tPmJhc2UpOw0KKw0KKwkJbXNpX2luZm8tPmh3aXJxID0gaTsNCisJCW1zaV9pbmZv LT5pbmRleCA9IGk7DQorCQltc2lfaW5mby0+ZG9tYWluID0gcG9ydC0+bXNpX2RvbWFpbjsNCisN CisJCXBvcnQtPm1zaV9pbmZvW2ldID0gbXNpX2luZm87DQorDQorCQkvKiBBbGxvYyBpcnEgZm9y IGVhY2ggbXNpIHNldCAqLw0KKwkJbXNpX2luZm8tPmlycSA9IGlycV9jcmVhdGVfbWFwcGluZyhw b3J0LT5tc2lfdG9wX2RvbWFpbiwgaSk7DQorCQlpZiAobXNpX2luZm8tPmlycSA8IDApIHsNCisJ CQlkZXZfaW5mbyhkZXYsICJhbGxvY2F0ZSBtc2kgdG9wIGlycSBmYWlsZWRcbiIpOw0KKwkJCXJl dCA9IC1FTk9TUEM7DQorCQkJZ290byBlcnJfbXNpX3NldDsNCisJCX0NCisNCisJCXZhbCA9IHJl YWRsKHBvcnQtPmJhc2UgKyBQQ0lFX0lOVF9FTkFCTEVfUkVHKTsNCisJCXZhbCB8PSAoMSA8PCAo aSArIFBDSUVfTVNJX1NISUZUKSk7DQorCQl3cml0ZWwodmFsLCBwb3J0LT5iYXNlICsgUENJRV9J TlRfRU5BQkxFX1JFRyk7DQorDQorCQl2YWwgPSByZWFkbChwb3J0LT5iYXNlICsgUENJRV9NU0lf U0VUX0VOQUJMRV9SRUcpOw0KKwkJdmFsIHw9ICgxIDw8IGkpOw0KKwkJd3JpdGVsKHZhbCwgcG9y dC0+YmFzZSArIFBDSUVfTVNJX1NFVF9FTkFCTEVfUkVHKTsNCisJfQ0KKw0KKwlyZXR1cm4gMDsN CisNCitlcnJfbXNpX3NldDoNCisJd2hpbGUgKC0taSA+PSAwKSB7DQorCQltc2lfaW5mbyA9IHBv cnQtPm1zaV9pbmZvW2ldOw0KKwkJaXJxX2Rpc3Bvc2VfbWFwcGluZyhtc2lfaW5mby0+aXJxKTsN CisJfQ0KK2Vycl9tc2lfaW5mbzoNCisJaXJxX2RvbWFpbl9yZW1vdmUocG9ydC0+bXNpX3RvcF9k b21haW4pOw0KK2Vycl9tc2lfdG9wX2RvbWFpbjoNCisJaXJxX2RvbWFpbl9yZW1vdmUocG9ydC0+ bXNpX2RvbWFpbik7DQorZXJyX21zaV9kb21haW46DQorCWlycV9kb21haW5fcmVtb3ZlKHBvcnQt PmludHhfZG9tYWluKTsNCisNCisJcmV0dXJuIHJldDsNCit9DQorDQorc3RhdGljIHZvaWQgbXRr X3BjaWVfaXJxX3RlYXJkb3duKHN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0KQ0KK3sNCisJaXJx X3NldF9jaGFpbmVkX2hhbmRsZXJfYW5kX2RhdGEocG9ydC0+aXJxLCBOVUxMLCBOVUxMKTsNCisN CisJaWYgKHBvcnQtPmludHhfZG9tYWluKQ0KKwkJaXJxX2RvbWFpbl9yZW1vdmUocG9ydC0+aW50 eF9kb21haW4pOw0KKw0KKwlpZiAocG9ydC0+bXNpX2RvbWFpbikNCisJCWlycV9kb21haW5fcmVt b3ZlKHBvcnQtPm1zaV9kb21haW4pOw0KKw0KKwlpZiAocG9ydC0+bXNpX3RvcF9kb21haW4pDQor CQlpcnFfZG9tYWluX3JlbW92ZShwb3J0LT5tc2lfdG9wX2RvbWFpbik7DQorDQorCWlycV9kaXNw b3NlX21hcHBpbmcocG9ydC0+aXJxKTsNCit9DQorDQorc3RhdGljIHZvaWQgbXRrX3BjaWVfaXJx X2hhbmRsZXIoc3RydWN0IGlycV9kZXNjICpkZXNjKQ0KK3sNCisJc3RydWN0IG10a19wY2llX3Bv cnQgKnBvcnQgPSBpcnFfZGVzY19nZXRfaGFuZGxlcl9kYXRhKGRlc2MpOw0KKwlzdHJ1Y3QgaXJx X2NoaXAgKmlycWNoaXAgPSBpcnFfZGVzY19nZXRfY2hpcChkZXNjKTsNCisJdW5zaWduZWQgbG9u ZyBzdGF0dXM7DQorCXUzMiB2aXJxOw0KKwl1MzIgaXJxX2JpdCA9IFBDSUVfSU5UWF9TSElGVDsN CisNCisJY2hhaW5lZF9pcnFfZW50ZXIoaXJxY2hpcCwgZGVzYyk7DQorDQorCXN0YXR1cyA9IHJl YWRsKHBvcnQtPmJhc2UgKyBQQ0lFX0lOVF9TVEFUVVNfUkVHKTsNCisJaWYgKHN0YXR1cyAmIFBD SUVfSU5UWF9NQVNLKSB7DQorCQlmb3JfZWFjaF9zZXRfYml0X2Zyb20oaXJxX2JpdCwgJnN0YXR1 cywgUENJX05VTV9JTlRYICsNCisJCQkJICAgICAgUENJRV9JTlRYX1NISUZUKSB7DQorCQkJdmly cSA9IGlycV9maW5kX21hcHBpbmcocG9ydC0+aW50eF9kb21haW4sDQorCQkJCQkJaXJxX2JpdCAt IFBDSUVfSU5UWF9TSElGVCk7DQorCQkJZ2VuZXJpY19oYW5kbGVfaXJxKHZpcnEpOw0KKwkJfQ0K Kwl9DQorDQorCWlmIChzdGF0dXMgJiBQQ0lFX01TSV9NQVNLKSB7DQorCQlpcnFfYml0ID0gUENJ RV9NU0lfU0hJRlQ7DQorCQlmb3JfZWFjaF9zZXRfYml0X2Zyb20oaXJxX2JpdCwgJnN0YXR1cywg UENJRV9NU0lfU0VUX05VTSArDQorCQkJCSAgICAgIFBDSUVfTVNJX1NISUZUKSB7DQorCQkJdmly cSA9IGlycV9maW5kX21hcHBpbmcocG9ydC0+bXNpX3RvcF9kb21haW4sDQorCQkJCQkJaXJxX2Jp dCAtIFBDSUVfTVNJX1NISUZUKTsNCisJCQlnZW5lcmljX2hhbmRsZV9pcnEodmlycSk7DQorCQl9 DQorCX0NCisNCisJY2hhaW5lZF9pcnFfZXhpdChpcnFjaGlwLCBkZXNjKTsNCit9DQorDQorc3Rh dGljIGludCBtdGtfcGNpZV9zZXR1cF9pcnEoc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQsDQor CQkJICAgICAgc3RydWN0IGRldmljZV9ub2RlICpub2RlKQ0KK3sNCisJc3RydWN0IGRldmljZSAq ZGV2ID0gcG9ydC0+ZGV2Ow0KKwlzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2ID0gdG9fcGxh dGZvcm1fZGV2aWNlKGRldik7DQorCWludCBlcnI7DQorDQorCWVyciA9IG10a19wY2llX2luaXRf aXJxX2RvbWFpbnMocG9ydCwgbm9kZSk7DQorCWlmIChlcnIpIHsNCisJCWRldl9ub3RpY2UoZGV2 LCAiZmFpbGVkIHRvIGluaXQgUENJZSBJUlEgZG9tYWluXG4iKTsNCisJCXJldHVybiBlcnI7DQor CX0NCisNCisJcG9ydC0+aXJxID0gcGxhdGZvcm1fZ2V0X2lycShwZGV2LCAwKTsNCisJaWYgKHBv cnQtPmlycSA8IDApDQorCQlyZXR1cm4gcG9ydC0+aXJxOw0KKw0KKwlpcnFfc2V0X2NoYWluZWRf aGFuZGxlcl9hbmRfZGF0YShwb3J0LT5pcnEsIG10a19wY2llX2lycV9oYW5kbGVyLCBwb3J0KTsN CisNCisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXRrX3BjaWVfY2xrX2luaXQoc3Ry dWN0IG10a19wY2llX3BvcnQgKnBvcnQpDQorew0KKwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBwb3J0 LT5kZXY7DQorCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAgPSBkZXYtPm9mX25vZGU7DQorCWludCBp Ow0KKw0KKwlwb3J0LT5udW1fY2xrcyA9IG9mX2Nsa19nZXRfcGFyZW50X2NvdW50KG5wKTsNCisJ aWYgKHBvcnQtPm51bV9jbGtzID09IDApIHsNCisJCWRldl9ub3RpY2UoZGV2LCAicGNpZSBjbG9j ayBpcyBub3QgZm91bmRcbiIpOw0KKwkJcmV0dXJuIC1FSU5WQUw7DQorCX0NCisNCisJcG9ydC0+ Y2xrcyA9IGRldm1fa3phbGxvYyhkZXYsIHBvcnQtPm51bV9jbGtzLCBHRlBfS0VSTkVMKTsNCisJ aWYgKCFwb3J0LT5jbGtzKQ0KKwkJcmV0dXJuIC1FTk9NRU07DQorDQorCWZvciAoaSA9IDA7IGkg PCBwb3J0LT5udW1fY2xrczsgaSsrKSB7DQorCQlzdHJ1Y3QgY2xrICAgICAgKmNsazsNCisJCWlu dCAgICAgICAgICAgICByZXQ7DQorDQorCQljbGsgPSBvZl9jbGtfZ2V0KG5wLCBpKTsNCisJCWlm IChJU19FUlIoY2xrKSkgew0KKwkJCXdoaWxlICgtLWkgPj0gMCkNCisJCQkJY2xrX3B1dChwb3J0 LT5jbGtzW2ldKTsNCisJCQlyZXR1cm4gUFRSX0VSUihjbGspOw0KKwkJfQ0KKw0KKwkJcmV0ID0g Y2xrX3ByZXBhcmVfZW5hYmxlKGNsayk7DQorCQlpZiAocmV0IDwgMCkgew0KKwkJCXdoaWxlICgt LWkgPj0gMCkgew0KKwkJCQljbGtfZGlzYWJsZV91bnByZXBhcmUocG9ydC0+Y2xrc1tpXSk7DQor CQkJCWNsa19wdXQocG9ydC0+Y2xrc1tpXSk7DQorCQkJfQ0KKwkJCWNsa19wdXQoY2xrKTsNCisN CisJCQlyZXR1cm4gcmV0Ow0KKwkJfQ0KKw0KKwkJcG9ydC0+Y2xrc1tpXSA9IGNsazsNCisJfQ0K Kw0KKwlyZXR1cm4gMDsNCit9DQorDQorc3RhdGljIGludCBtdGtfcGNpZV9kaXNhYmxlX2Nsayhz dHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCkNCit7DQorCWludCBpOw0KKw0KKwlpZiAocG9ydC0+ bnVtX2Nsa3MgPT0gMCkNCisJCXJldHVybiAwOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwgcG9ydC0+ bnVtX2Nsa3M7IGkrKykgew0KKwkJY2xrX2Rpc2FibGVfdW5wcmVwYXJlKHBvcnQtPmNsa3NbaV0p Ow0KKwkJY2xrX3B1dChwb3J0LT5jbGtzW2ldKTsNCisJfQ0KKw0KKwlwb3J0LT5udW1fY2xrcyA9 IDA7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IG10a19wY2llX3Bvd2VyX3Vw KHN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0KQ0KK3sNCisJc3RydWN0IGRldmljZSAqZGV2ID0g cG9ydC0+ZGV2Ow0KKwlpbnQgZXJyOw0KKw0KKwlwb3J0LT5waHlfcmVzZXQgPSBkZXZtX3Jlc2V0 X2NvbnRyb2xfZ2V0X29wdGlvbmFsKGRldiwgInBoeS1yc3QiKTsNCisJaWYgKFBUUl9FUlIocG9y dC0+cGh5X3Jlc2V0KSA9PSAtRVBST0JFX0RFRkVSKQ0KKwkJcmV0dXJuIFBUUl9FUlIocG9ydC0+ cGh5X3Jlc2V0KTsNCisNCisJcmVzZXRfY29udHJvbF9kZWFzc2VydChwb3J0LT5waHlfcmVzZXQp Ow0KKw0KKwkvKiBwaHkgcG93ZXIgb24gYW5kIGVuYWJsZSBwaXBlIGNsb2NrICovDQorCXBvcnQt PnBoeSA9IGRldm1fcGh5X29wdGlvbmFsX2dldChkZXYsICJwY2llLXBoeSIpOw0KKwlpZiAoSVNf RVJSKHBvcnQtPnBoeSkpDQorCQlwb3J0LT5waHkgPSBOVUxMOw0KKw0KKwllcnIgPSBwaHlfaW5p dChwb3J0LT5waHkpOw0KKwlpZiAoZXJyKSB7DQorCQlkZXZfbm90aWNlKGRldiwgImZhaWxlZCB0 byBpbml0aWFsaXplIHBjaWUgcGh5XG4iKTsNCisJCXJldHVybiAtRU5PREVWOw0KKwl9DQorDQor CWVyciA9IHBoeV9wb3dlcl9vbihwb3J0LT5waHkpOw0KKwlpZiAoZXJyKSB7DQorCQlkZXZfbm90 aWNlKGRldiwgImZhaWxlZCB0byBwb3dlciBvbiBwY2llIHBoeVxuIik7DQorCQlnb3RvIGVycl9w aHlfb247DQorCX0NCisNCisJcG9ydC0+bWFjX3Jlc2V0ID0gZGV2bV9yZXNldF9jb250cm9sX2dl dF9vcHRpb25hbChkZXYsICJtYWMtcnN0Iik7DQorCWlmIChQVFJfRVJSKHBvcnQtPm1hY19yZXNl dCkgPT0gLUVQUk9CRV9ERUZFUikNCisJCXJldHVybiBQVFJfRVJSKHBvcnQtPm1hY19yZXNldCk7 DQorDQorCXJlc2V0X2NvbnRyb2xfZGVhc3NlcnQocG9ydC0+bWFjX3Jlc2V0KTsNCisNCisJLyog bWFjIHBvd2VyIG9uIGFuZCBlbmFibGUgdHJhbnNhY3Rpb24gbGF5ZXIgY2xvY2tzICovDQorCXBt X3J1bnRpbWVfZW5hYmxlKGRldik7DQorCXBtX3J1bnRpbWVfZ2V0X3N5bmMoZGV2KTsNCisNCisJ ZXJyID0gbXRrX3BjaWVfY2xrX2luaXQocG9ydCk7DQorCWlmIChlcnIpIHsNCisJCWRldl9ub3Rp Y2UoZGV2LCAiY2xvY2sgaW5pdCBmYWlsZWRcbiIpOw0KKwkJZ290byBlcnJfY2xrX2luaXQ7DQor CX0NCisNCisJcmV0dXJuIDA7DQorDQorZXJyX2Nsa19pbml0Og0KKwlwbV9ydW50aW1lX3B1dF9z eW5jKGRldik7DQorCXBtX3J1bnRpbWVfZGlzYWJsZShkZXYpOw0KKwlyZXNldF9jb250cm9sX2Fz c2VydChwb3J0LT5tYWNfcmVzZXQpOw0KKwlwaHlfcG93ZXJfb2ZmKHBvcnQtPnBoeSk7DQorZXJy X3BoeV9vbjoNCisJcGh5X2V4aXQocG9ydC0+cGh5KTsNCisJcmVzZXRfY29udHJvbF9hc3NlcnQo cG9ydC0+cGh5X3Jlc2V0KTsNCisNCisJcmV0dXJuIC1FQlVTWTsNCit9DQorDQorc3RhdGljIHZv aWQgbXRrX3BjaWVfcG93ZXJfZG93bihzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCkNCit7DQor CXBoeV9wb3dlcl9vZmYocG9ydC0+cGh5KTsNCisJcGh5X2V4aXQocG9ydC0+cGh5KTsNCisNCisJ bXRrX3BjaWVfZGlzYWJsZV9jbGsocG9ydCk7DQorDQorCXBtX3J1bnRpbWVfcHV0X3N5bmMocG9y dC0+ZGV2KTsNCisJcG1fcnVudGltZV9kaXNhYmxlKHBvcnQtPmRldik7DQorfQ0KKw0KK3N0YXRp YyBpbnQgbXRrX3BjaWVfc2V0dXAoc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQpDQorew0KKwlz dHJ1Y3QgZGV2aWNlICpkZXYgPSBwb3J0LT5kZXY7DQorCXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2Ug KnBkZXYgPSB0b19wbGF0Zm9ybV9kZXZpY2UoZGV2KTsNCisJc3RydWN0IHJlc291cmNlICpyZWdz Ow0KKwlpbnQgZXJyOw0KKw0KKwlyZWdzID0gcGxhdGZvcm1fZ2V0X3Jlc291cmNlX2J5bmFtZShw ZGV2LCBJT1JFU09VUkNFX01FTSwgInBjaWUtbWFjIik7DQorCXBvcnQtPmJhc2UgPSBkZXZtX2lv cmVtYXBfcmVzb3VyY2UoZGV2LCByZWdzKTsNCisJaWYgKElTX0VSUihwb3J0LT5iYXNlKSkgew0K KwkJZGV2X25vdGljZShkZXYsICJmYWlsZWQgdG8gbWFwIHJlZ2lzdGVyIGJhc2VcbiIpOw0KKwkJ cmV0dXJuIFBUUl9FUlIocG9ydC0+YmFzZSk7DQorCX0NCisNCisJcG9ydC0+cmVnX2Jhc2UgPSBy ZWdzLT5zdGFydDsNCisNCisJLyogRG9uJ3QgdG91Y2ggdGhlIGhhcmR3YXJlIHJlZ2lzdGVycyBi ZWZvcmUgcG93ZXIgdXAgKi8NCisJZXJyID0gbXRrX3BjaWVfcG93ZXJfdXAocG9ydCk7DQorCWlm IChlcnIpDQorCQlyZXR1cm4gZXJyOw0KKw0KKwllcnIgPSBtdGtfcGNpZV9zZXR1cF9pcnEocG9y dCwgZGV2LT5vZl9ub2RlKTsNCisJaWYgKGVycikNCisJCXJldHVybiBlcnI7DQorDQorCS8qIFRy eSBsaW5rIHVwICovDQorCWVyciA9IG10a19wY2llX3N0YXJ0dXBfcG9ydChwb3J0KTsNCisJaWYg KGVycikgew0KKwkJZGV2X25vdGljZShkZXYsICJQQ0llIGxpbmsgZG93blxuIik7DQorCQltdGtf cGNpZV9wb3dlcl9kb3duKHBvcnQpOw0KKwkJcmV0dXJuIGVycjsNCisJfQ0KKw0KKwlkZXZfaW5m byhkZXYsICJQQ0llIGxpbmsgdXAgc3VjY2VzcyFcbiIpOw0KKw0KKwlyZXR1cm4gMDsNCit9DQor DQorc3RhdGljIGludCBtdGtfcGNpZV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQ0KK3sNCisJc3RydWN0IGRldmljZSAqZGV2ID0gJnBkZXYtPmRldjsNCisJc3RydWN0IG10a19w Y2llX3BvcnQgKnBvcnQ7DQorCXN0cnVjdCBwY2lfaG9zdF9icmlkZ2UgKmhvc3Q7DQorCWludCBl cnI7DQorDQorCWhvc3QgPSBkZXZtX3BjaV9hbGxvY19ob3N0X2JyaWRnZShkZXYsIHNpemVvZigq cG9ydCkpOw0KKwlpZiAoIWhvc3QpDQorCQlyZXR1cm4gLUVOT01FTTsNCisNCisJcG9ydCA9IHBj aV9ob3N0X2JyaWRnZV9wcml2KGhvc3QpOw0KKw0KKwlwb3J0LT5kZXYgPSBkZXY7DQorCXBsYXRm b3JtX3NldF9kcnZkYXRhKHBkZXYsIHBvcnQpOw0KKw0KKwllcnIgPSBtdGtfcGNpZV9zZXR1cChw b3J0KTsNCisJaWYgKGVycikNCisJCXJldHVybiBlcnI7DQorDQorCWhvc3QtPmRldi5wYXJlbnQg PSBwb3J0LT5kZXY7DQorCWhvc3QtPm9wcyA9ICZtdGtfcGNpZV9vcHM7DQorCWhvc3QtPnN5c2Rh dGEgPSBwb3J0Ow0KKw0KKwllcnIgPSBwY2lfaG9zdF9wcm9iZShob3N0KTsNCisJaWYgKGVycikg ew0KKwkJbXRrX3BjaWVfcG93ZXJfZG93bihwb3J0KTsNCisJCXJldHVybiBlcnI7DQorCX0NCisN CisJcmV0dXJuIDA7DQorfQ0KKw0KK3N0YXRpYyBpbnQgbXRrX3BjaWVfcmVtb3ZlKHN0cnVjdCBw bGF0Zm9ybV9kZXZpY2UgKnBkZXYpDQorew0KKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9 IHBsYXRmb3JtX2dldF9kcnZkYXRhKHBkZXYpOw0KKwlzdHJ1Y3QgcGNpX2hvc3RfYnJpZGdlICpo b3N0ID0gcGNpX2hvc3RfYnJpZGdlX2Zyb21fcHJpdihwb3J0KTsNCisNCisJcGNpX3N0b3Bfcm9v dF9idXMoaG9zdC0+YnVzKTsNCisJcGNpX3JlbW92ZV9yb290X2J1cyhob3N0LT5idXMpOw0KKw0K KwltdGtfcGNpZV9pcnFfdGVhcmRvd24ocG9ydCk7DQorCW10a19wY2llX3Bvd2VyX2Rvd24ocG9y dCk7DQorDQorCXJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIG10 a19wY2llX3R1cm5fb2ZmX2xpbmsoc3RydWN0IG10a19wY2llX3BvcnQgKnBvcnQpDQorew0KKwlp bnQgdmFsOw0KKw0KKwl2YWwgPSByZWFkbChwb3J0LT5iYXNlICsgUENJRV9JQ01EX1BNX1JFRyk7 DQorCXZhbCB8PSBQQ0lFX1RVUk5fT0ZGX0xJTks7DQorCXdyaXRlbCh2YWwsIHBvcnQtPmJhc2Ug KyBQQ0lFX0lDTURfUE1fUkVHKTsNCisNCisJLyogQ2hlY2sgdGhlIGxpbmsgaXMgTDIgKi8NCisJ cmV0dXJuIHJlYWRsX3BvbGxfdGltZW91dChwb3J0LT5iYXNlICsgUENJRV9MVFNTTV9TVEFUVVNf UkVHLCB2YWwsDQorCQkJCSAgKFBDSUVfTFRTU01fU1RBVEUodmFsKSA9PQ0KKwkJCQkgICBQQ0lF X0xUU1NNX1NUQVRFX0wyX0lETEUpLCAyMCwNCisJCQkJICAgNTAgKiBVU0VDX1BFUl9NU0VDKTsN Cit9DQorDQorc3RhdGljIGludCBfX21heWJlX3VudXNlZCBtdGtfcGNpZV9zdXNwZW5kX25vaXJx KHN0cnVjdCBkZXZpY2UgKmRldikNCit7DQorCXN0cnVjdCBtdGtfcGNpZV9wb3J0ICpwb3J0ID0g ZGV2X2dldF9kcnZkYXRhKGRldik7DQorCWludCBpLCBlcnIsIHZhbDsNCisNCisJaWYgKHBvcnQt PmlzX3N1c3BlbmRlZCkNCisJCXJldHVybiAwOw0KKw0KKwkvKiBUcmlnZ2VyIGxpbmsgdG8gTDIg c3RhdGUgKi8NCisJZXJyID0gbXRrX3BjaWVfdHVybl9vZmZfbGluayhwb3J0KTsNCisJaWYgKGVy cikgew0KKwkJZGV2X25vdGljZShwb3J0LT5kZXYsICJjYW4gbm90IGVudGVyIEwyIHN0YXRlXG4i KTsNCisJCWdvdG8gcG93ZXJfb2ZmOw0KKwl9DQorDQorCS8qIFB1bGwgZG93biB0aGUgUEVSU1Qj IHBpbiAqLw0KKwl2YWwgPSByZWFkbChwb3J0LT5iYXNlICsgUENJRV9SU1RfQ1RSTF9SRUcpOw0K Kwl2YWwgfD0gUENJRV9QRV9SU1RCOw0KKwl3cml0ZWwodmFsLCBwb3J0LT5iYXNlICsgUENJRV9S U1RfQ1RSTF9SRUcpOw0KKw0KKwlkZXZfaW5mbyhwb3J0LT5kZXYsICJlbnRlciBMMiBzdGF0ZSBz dWNjZXNzIik7DQorDQorcG93ZXJfb2ZmOg0KKwlwaHlfcG93ZXJfb2ZmKHBvcnQtPnBoeSk7DQor DQorCWZvciAoaSA9IDA7IGkgPCBwb3J0LT5udW1fY2xrczsgaSsrKQ0KKwkJY2xrX2Rpc2FibGVf dW5wcmVwYXJlKHBvcnQtPmNsa3NbaV0pOw0KKw0KKwlwbV9ydW50aW1lX3B1dF9zeW5jKHBvcnQt PmRldik7DQorDQorCXBvcnQtPmlzX3N1c3BlbmRlZCA9IHRydWU7DQorDQorCXJldHVybiAwOw0K K30NCisNCitzdGF0aWMgaW50IF9fbWF5YmVfdW51c2VkIG10a19wY2llX3Jlc3VtZV9ub2lycShz dHJ1Y3QgZGV2aWNlICpkZXYpDQorew0KKwlzdHJ1Y3QgbXRrX3BjaWVfcG9ydCAqcG9ydCA9IGRl dl9nZXRfZHJ2ZGF0YShkZXYpOw0KKwlpbnQgaSwgZXJyOw0KKw0KKwlpZiAoIXBvcnQtPmlzX3N1 c3BlbmRlZCkNCisJCXJldHVybiAwOw0KKw0KKwlwaHlfcG93ZXJfb24ocG9ydC0+cGh5KTsNCisN CisJcG1fcnVudGltZV9nZXRfc3luYyhwb3J0LT5kZXYpOw0KKw0KKwlmb3IgKGkgPSAwOyBpIDwg cG9ydC0+bnVtX2Nsa3M7IGkrKykgew0KKwkJZXJyID0gY2xrX3ByZXBhcmVfZW5hYmxlKHBvcnQt PmNsa3NbaV0pOw0KKwkJaWYgKGVyciA8IDApIHsNCisJCQl3aGlsZSAoLS1pID49IDApDQorCQkJ CWNsa19kaXNhYmxlX3VucHJlcGFyZShwb3J0LT5jbGtzW2ldKTsNCisJCQlyZXR1cm4gZXJyOw0K KwkJfQ0KKwl9DQorDQorCWVyciA9IG10a19wY2llX3N0YXJ0dXBfcG9ydChwb3J0KTsNCisJaWYg KGVycikgew0KKwkJZGV2X25vdGljZShwb3J0LT5kZXYsICJyZXN1bWUgZmFpbGVkXG4iKTsNCisJ CXJldHVybiBlcnI7DQorCX0NCisNCisJcG9ydC0+aXNfc3VzcGVuZGVkID0gZmFsc2U7DQorDQor CWRldl9pbmZvKHBvcnQtPmRldiwgInJlc3VtZSBkb25lXG4iKTsNCisNCisJcmV0dXJuIDA7DQor fQ0KKw0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2X3BtX29wcyBtdGtfcGNpZV9wbV9vcHMgPSB7 DQorCVNFVF9OT0lSUV9TWVNURU1fU0xFRVBfUE1fT1BTKG10a19wY2llX3N1c3BlbmRfbm9pcnEs DQorCQkJCSAgICAgIG10a19wY2llX3Jlc3VtZV9ub2lycSkNCit9Ow0KKw0KK3N0YXRpYyBjb25z dCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG10a19wY2llX29mX21hdGNoW10gPSB7DQorCXsgLmNvbXBh dGlibGUgPSAibWVkaWF0ZWssZ2VuMy1wY2llIiB9LA0KKwl7IC5jb21wYXRpYmxlID0gIm1lZGlh dGVrLG10ODE5Mi1wY2llIiB9LA0KKwl7fSwNCit9Ow0KKw0KK3N0YXRpYyBzdHJ1Y3QgcGxhdGZv cm1fZHJpdmVyIG10a19wY2llX2RyaXZlciA9IHsNCisJLnByb2JlID0gbXRrX3BjaWVfcHJvYmUs DQorCS5yZW1vdmUgPSBtdGtfcGNpZV9yZW1vdmUsDQorCS5kcml2ZXIgPSB7DQorCQkubmFtZSA9 ICJtdGstcGNpZSIsDQorCQkub2ZfbWF0Y2hfdGFibGUgPSBtdGtfcGNpZV9vZl9tYXRjaCwNCisJ CS5zdXBwcmVzc19iaW5kX2F0dHJzID0gdHJ1ZSwNCisJCS5wbSA9ICZtdGtfcGNpZV9wbV9vcHMs DQorCX0sDQorfTsNCisNCittb2R1bGVfcGxhdGZvcm1fZHJpdmVyKG10a19wY2llX2RyaXZlcik7 DQorTU9EVUxFX0xJQ0VOU0UoIkdQTCB2MiIpOw0KLS0gDQoyLjE4LjANCg==