Received: by 10.213.65.68 with SMTP id h4csp220754imn; Tue, 13 Mar 2018 01:58:22 -0700 (PDT) X-Google-Smtp-Source: AG47ELtzX4EScfQfEcoMmPLGRcJB5wNBYXeJZEceNBKeyF4up0IyNXumbIyAAshGMWgHuXayi28u X-Received: by 2002:a17:902:20c9:: with SMTP id v9-v6mr11374752plg.41.1520931502015; Tue, 13 Mar 2018 01:58:22 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1520931501; cv=none; d=google.com; s=arc-20160816; b=z7R163qS9hoL7lnI/qteovRLwIpEEN8KmdYbFMj8R7VebVQxus9wP40wahcJz0M6d0 agF24XQ7U9vNb22gvO1jvWYLXlhhSIstvY01pAJA+++fGZDY9a2gPytfViPHQGuZlIx+ R3hPN0l7aGxXSC5eZJWosU8PwsC31K1BREJB3TfrnCDLjL8RrfoDt2VM0eT0cHOMb91s wB2POoVhzCueQ6Z+bxliTYQEEOmywADkH+0bsXx1spXexCECwjOGT84HRtPxTy4qJ4PO /kpr+ULI6VnMWhk/vp7WsuUoLW1aKLWFn2xmelG+xCPPnGl/78aBHCpLtlu6t7Wb6C9l BcPw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:content-transfer-encoding :content-id:user-agent:content-language:accept-language:in-reply-to :references:message-id:date:thread-index:thread-topic:subject:cc:to :from:arc-authentication-results; bh=CjBXW+eUWYGQbFGoz/waH/je74J/dhFA42v3TLL/T1c=; b=ij5NoR81B+AkS2BkR+M59JG54Tod3wOJokt0VqvX8PxOn2c6lGkS9uze7eoM1XoYxd WBeNKINeFvccFHIJutEruEON0Aby4BhfnNabWm2w0tv2g2oVuVvKBro2e2kxP/3kEfck 3ncafaINfbiEa3pe0/hgIAYD1GuEaFQqQOsWU/7P/VP10EqEXOJ54iplODuWPIgqpSue rRe1q0sSiwNcvPonpmWY0Vjg0ex8hFyNP1c1hQ+NTmGPlhrdVOXibkw+Frex/DLRLZEG RmR9/idJLkGmhcXAMz6fpiYoAmY3vfKzVgidUL4hqONueabi1y1RpomRVo18SbJAi6WM mLVA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id c14si6305398pgt.475.2018.03.13.01.58.07; Tue, 13 Mar 2018 01:58:21 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752674AbeCMI5A (ORCPT + 99 others); Tue, 13 Mar 2018 04:57:00 -0400 Received: from mx08-00178001.pphosted.com ([91.207.212.93]:40272 "EHLO mx07-00178001.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752663AbeCMI47 (ORCPT ); Tue, 13 Mar 2018 04:56:59 -0400 Received: from pps.filterd (m0046661.ppops.net [127.0.0.1]) by mx08-.pphosted.com (8.16.0.21/8.16.0.21) with SMTP id w2D8sdN9014563; Tue, 13 Mar 2018 09:56:37 +0100 Received: from beta.dmz-eu.st.com (beta.dmz-eu.st.com [164.129.1.35]) by mx08-00178001.pphosted.com with ESMTP id 2gp8mqruyc-1 (version=TLSv1 cipher=ECDHE-RSA-AES256-SHA bits=256 verify=NOT); Tue, 13 Mar 2018 09:56:36 +0100 Received: from zeta.dmz-eu.st.com (zeta.dmz-eu.st.com [164.129.230.9]) by beta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 9853631; Tue, 13 Mar 2018 08:56:35 +0000 (GMT) Received: from Webmail-eu.st.com (sfhdag6node3.st.com [10.75.127.18]) by zeta.dmz-eu.st.com (STMicroelectronics) with ESMTP id 4E49B4F5D; Tue, 13 Mar 2018 08:56:35 +0000 (GMT) Received: from SFHDAG6NODE3.st.com (10.75.127.18) by SFHDAG6NODE3.st.com (10.75.127.18) with Microsoft SMTP Server (TLS) id 15.0.1347.2; Tue, 13 Mar 2018 09:56:34 +0100 Received: from SFHDAG6NODE3.st.com ([fe80::d04:5337:ab17:b6f6]) by SFHDAG6NODE3.st.com ([fe80::d04:5337:ab17:b6f6%20]) with mapi id 15.00.1347.000; Tue, 13 Mar 2018 09:56:34 +0100 From: Patrice CHOTARD To: Yannick FERTRE , Vikas MANOCHA , Benjamin Gaignard , Philippe CORNU , Patrick DELAUNAY , Christophe KERELLO , Archit Taneja , Andrzej Hajda , Laurent Pinchart , David Airlie , Brian Norris , Bhumika Goyal , Gustavo Padovan , "Maarten Lankhorst" , Sean Paul , Albert Aribaud , "Simon Glass" , Anatolij Gustschin , Thierry Reding CC: "u-boot@lists.denx.de" , "dri-devel@lists.freedesktop.org" , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH v2 06/10] video: add support of STM32 MIPI DSI controller driver Thread-Topic: [PATCH v2 06/10] video: add support of STM32 MIPI DSI controller driver Thread-Index: AQHTsj1WUAcHOkO7Z06Y5FrFHkgZFKPN3RwA Date: Tue, 13 Mar 2018 08:56:34 +0000 Message-ID: <2453d72e-8c38-2d55-7e54-359ab4e9ffc5@st.com> References: <1520005451-23217-1-git-send-email-yannick.fertre@st.com> <1520005451-23217-7-git-send-email-yannick.fertre@st.com> In-Reply-To: <1520005451-23217-7-git-send-email-yannick.fertre@st.com> Accept-Language: fr-FR, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.6.0 x-ms-exchange-messagesentrepresentingtype: 1 x-ms-exchange-transport-fromentityheader: Hosted x-originating-ip: [10.75.127.44] Content-Type: text/plain; charset="utf-8" Content-ID: <67E9045F25978541AA7B75ABDCF7C08B@st.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2018-03-13_04:,, signatures=0 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org SGkgeWFubmljaw0KDQpPbiAwMy8wMi8yMDE4IDA0OjQ0IFBNLCB5YW5uaWNrIGZlcnRyZSB3cm90 ZToNCj4gQWRkIHRoZSBTVE0zMiBEU0kgY29udHJvbGxlciBkcml2ZXIgdGhhdCB1c2VzIHRoZSBT eW5vcHN5cyBEZXNpZ25XYXJlDQo+IE1JUEkgRFNJIGhvc3QgY29udHJvbGxlciBicmlkZ2UuDQo+ IA0KPiBTaWduZWQtb2ZmLWJ5OiB5YW5uaWNrIGZlcnRyZSA8eWFubmljay5mZXJ0cmVAc3QuY29t Pg0KPiAtLS0NCj4gICBkcml2ZXJzL3ZpZGVvL3N0bTMyL0tjb25maWcgICAgIHwgIDEwICsNCj4g ICBkcml2ZXJzL3ZpZGVvL3N0bTMyL01ha2VmaWxlICAgIHwgICAxICsNCj4gICBkcml2ZXJzL3Zp ZGVvL3N0bTMyL3N0bTMyX2RzaS5jIHwgNDI3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysNCj4gICAzIGZpbGVzIGNoYW5nZWQsIDQzOCBpbnNlcnRpb25zKCspDQo+ICAg Y3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdmlkZW8vc3RtMzIvc3RtMzJfZHNpLmMNCj4gDQo+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3N0bTMyL0tjb25maWcgYi9kcml2ZXJzL3ZpZGVv L3N0bTMyL0tjb25maWcNCj4gaW5kZXggMTEzYTJiYi4uMmVhNmYxOCAxMDA2NDQNCj4gLS0tIGEv ZHJpdmVycy92aWRlby9zdG0zMi9LY29uZmlnDQo+ICsrKyBiL2RyaXZlcnMvdmlkZW8vc3RtMzIv S2NvbmZpZw0KPiBAQCAtMTUsNiArMTUsMTYgQEAgbWVudWNvbmZpZyBWSURFT19TVE0zMg0KPiAg IAkgIERTSS4gVGhpcyBvcHRpb24gZW5hYmxlcyB0aGVzZSBzdXBwb3J0cyB3aGljaCBjYW4gYmUg dXNlZCBvbg0KPiAgIAkgIGRldmljZXMgd2hpY2ggaGF2ZSBSR0IgVEZUIG9yIERTSSBkaXNwbGF5 IGNvbm5lY3RlZC4NCj4gICANCj4gK2NvbmZpZyBWSURFT19TVE0zMl9EU0kNCj4gKwlib29sICJF bmFibGUgU1RNMzIgRFNJIHZpZGVvIHN1cHBvcnQiDQo+ICsJZGVwZW5kcyBvbiBWSURFT19TVE0z Mg0KPiArCXNlbGVjdCBWSURFT19NSVBJX0RTSQ0KPiArCXNlbGVjdCBWSURFT19CUklER0UNCj4g KwlzZWxlY3QgVklERU9fRFdfTUlQSV9EU0kNCj4gKwloZWxwDQo+ICsJICBUaGlzIG9wdGlvbiBl bmFibGVzIHN1cHBvcnQgRFNJIGludGVybmFsIGJyaWRnZSB3aGljaCBjYW4gYmUgdXNlZCBvbg0K PiArCSAgZGV2aWNlcyB3aGljaCBoYXZlIERTSSBkaXNwbGF5IGNvbm5lY3RlZC4NCj4gKw0KPiAg IGNvbmZpZyBWSURFT19TVE0zMl9NQVhfWFJFUw0KPiAgIAlpbnQgIk1heGltdW0gaG9yaXpvbnRh bCByZXNvbHV0aW9uIChmb3IgbWVtb3J5IGFsbG9jYXRpb24gcHVycG9zZXMpIg0KPiAgIAlkZXBl bmRzIG9uIFZJREVPX1NUTTMyDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3ZpZGVvL3N0bTMyL01h a2VmaWxlIGIvZHJpdmVycy92aWRlby9zdG0zMi9NYWtlZmlsZQ0KPiBpbmRleCAzNzJhMmUxLi5m OGMzZmY3IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL3ZpZGVvL3N0bTMyL01ha2VmaWxlDQo+ICsr KyBiL2RyaXZlcnMvdmlkZW8vc3RtMzIvTWFrZWZpbGUNCj4gQEAgLTgsMyArOCw0IEBADQo+ICAg Iw0KPiAgIA0KPiAgIG9iai0ke0NPTkZJR19WSURFT19TVE0zMn0gPSBzdG0zMl9sdGRjLm8NCj4g K29iai0ke0NPTkZJR19WSURFT19TVE0zMl9EU0l9ICs9IHN0bTMyX2RzaS5vDQo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL3ZpZGVvL3N0bTMyL3N0bTMyX2RzaS5jIGIvZHJpdmVycy92aWRlby9zdG0z Mi9zdG0zMl9kc2kuYw0KPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwMDAwMDAwLi4z ZTI2NDMzDQo+IC0tLSAvZGV2L251bGwNCj4gKysrIGIvZHJpdmVycy92aWRlby9zdG0zMi9zdG0z Ml9kc2kuYw0KPiBAQCAtMCwwICsxLDQyNyBAQA0KPiArLyoNCj4gKyAqIENvcHlyaWdodCAoQykg MjAxOCBTVE1pY3JvZWxlY3Ryb25pY3MgLSBBbGwgUmlnaHRzIFJlc2VydmVkDQo+ICsgKiBBdXRo b3Iocyk6IFBoaWxpcHBlIENvcm51IDxwaGlsaXBwZS5jb3JudUBzdC5jb20+IGZvciBTVE1pY3Jv ZWxlY3Ryb25pY3MuDQo+ICsgKgkgICAgICBZYW5uaWNrIEZlcnRyZSA8eWFubmljay5mZXJ0cmVA c3QuY29tPiBmb3IgU1RNaWNyb2VsZWN0cm9uaWNzLg0KPiArICoNCj4gKyAqIFRoaXMgZHJpdmVy IGlzIGJhc2VkIG9uIHRoZSBtaXBpIGRzaSBkcml2ZXIgZnJvbQ0KPiArICogZHJpdmVycy9ncHUv ZHJtL3N0bS9kd19taXBpX2RzaS1zdG0uYyAoa2VybmVsIGxpbnV4KS4NCj4gKyAqDQo+ICsgKiBT UERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMA0KPiArICovDQo+ICsNCj4gKyNpbmNsdWRl IDxhc20vaW8uaD4NCj4gKyNpbmNsdWRlIDxhc20vYXJjaC9ncGlvLmg+DQo+ICsjaW5jbHVkZSA8 Y29tbW9uLmg+DQo+ICsjaW5jbHVkZSA8Y2xrLmg+DQo+ICsjaW5jbHVkZSA8ZG0uaD4NCj4gKyNp bmNsdWRlIDxkbS9kZXZpY2UtaW50ZXJuYWwuaD4NCj4gKyNpbmNsdWRlIDxtaXBpX2Rpc3BsYXku aD4NCj4gKyNpbmNsdWRlIDxkd19taXBpX2RzaS5oPg0KPiArI2luY2x1ZGUgPGxpbnV4L2lvcG9s bC5oPg0KPiArI2luY2x1ZGUgPHBhbmVsLmg+DQo+ICsjaW5jbHVkZSA8cmVzZXQuaD4NCj4gKyNp bmNsdWRlIDx2aWRlby5oPg0KPiArI2luY2x1ZGUgPHZpZGVvX2JyaWRnZS5oPg0KPiArDQo+ICtE RUNMQVJFX0dMT0JBTF9EQVRBX1BUUjsNCj4gKw0KPiArI2RlZmluZSBIV1ZFUl8xMzAJCQkweDMx MzMzMDAwCS8qIElQIHZlcnNpb24gMS4zMCAqLw0KPiArI2RlZmluZSBIV1ZFUl8xMzEJCQkweDMx MzMzMTAwCS8qIElQIHZlcnNpb24gMS4zMSAqLw0KPiArDQo+ICsvKiBEU0kgZGlnaXRhbCByZWdp c3RlcnMgJiBiaXQgZGVmaW5pdGlvbnMgKi8NCj4gKyNkZWZpbmUgRFNJX1ZFUlNJT04JCQkweDAw DQo+ICsjZGVmaW5lIFZFUlNJT04JCQkJR0VOTUFTSygzMSwgOCkNCj4gKw0KPiArLyoNCj4gKyAq IERTSSB3cmFwcGVyIHJlZ2lzdGVycyAmIGJpdCBkZWZpbml0aW9ucw0KPiArICogTm90ZTogcmVn aXN0ZXJzIGFyZSBuYW1lZCBhcyBpbiB0aGUgUmVmZXJlbmNlIE1hbnVhbA0KPiArICovDQo+ICsj ZGVmaW5lIERTSV9XQ0ZHUgkweDA0MDAJCS8qIFdyYXBwZXIgQ29uRmlHdXJhdGlvbiBSZWcgKi8N Cj4gKyNkZWZpbmUgV0NGR1JfRFNJTQlCSVQoMCkJCS8qIERTSSBNb2RlICovDQo+ICsjZGVmaW5l IFdDRkdSX0NPTE1VWAlHRU5NQVNLKDMsIDEpCS8qIENPTG9yIE1VbHRpcGxlWGluZyAqLw0KPiAr DQo+ICsjZGVmaW5lIERTSV9XQ1IJCTB4MDQwNAkJLyogV3JhcHBlciBDb250cm9sIFJlZyAqLw0K PiArI2RlZmluZSBXQ1JfRFNJRU4JQklUKDMpCQkvKiBEU0kgRU5hYmxlICovDQo+ICsNCj4gKyNk ZWZpbmUgRFNJX1dJU1IJMHgwNDBDCQkvKiBXcmFwcGVyIEludGVycnVwdCBhbmQgU3RhdHVzIFJl ZyAqLw0KPiArI2RlZmluZSBXSVNSX1BMTExTCUJJVCg4KQkJLyogUExMIExvY2sgU3RhdHVzICov DQo+ICsjZGVmaW5lIFdJU1JfUlJTCUJJVCgxMikJCS8qIFJlZ3VsYXRvciBSZWFkeSBTdGF0dXMg Ki8NCj4gKw0KPiArI2RlZmluZSBEU0lfV1BDUjAJMHgwNDE4CQkvKiBXcmFwcGVyIFBoeSBDb25m IFJlZyAwICovDQo+ICsjZGVmaW5lIFdQQ1IwX1VJWDQJR0VOTUFTSyg1LCAwKQkvKiBVbml0IElu dGVydmFsIFggNCAqLw0KPiArI2RlZmluZSBXUENSMF9URERMCUJJVCgxNikJCS8qIFR1cm4gRGlz YWJsZSBEYXRhIExhbmVzICovDQo+ICsNCj4gKyNkZWZpbmUgRFNJX1dSUENSCTB4MDQzMAkJLyog V3JhcHBlciBSZWd1bGF0b3IgJiBQbGwgQ3RybCBSZWcgKi8NCj4gKyNkZWZpbmUgV1JQQ1JfUExM RU4JQklUKDApCQkvKiBQTEwgRU5hYmxlICovDQo+ICsjZGVmaW5lIFdSUENSX05ESVYJR0VOTUFT Syg4LCAyKQkvKiBwbGwgbG9vcCBESVZpc2lvbiBGYWN0b3IgKi8NCj4gKyNkZWZpbmUgV1JQQ1Jf SURGCUdFTk1BU0soMTQsIDExKQkvKiBwbGwgSW5wdXQgRGl2aXNpb24gRmFjdG9yICovDQo+ICsj ZGVmaW5lIFdSUENSX09ERglHRU5NQVNLKDE3LCAxNikJLyogcGxsIE91dHB1dCBEaXZpc2lvbiBG YWN0b3IgKi8NCj4gKyNkZWZpbmUgV1JQQ1JfUkVHRU4JQklUKDI0KQkJLyogUkVHdWxhdG9yIEVO YWJsZSAqLw0KPiArI2RlZmluZSBXUlBDUl9CR1JFTglCSVQoMjgpCQkvKiBCYW5kR2FwIFJlZmVy ZW5jZSBFTmFibGUgKi8NCj4gKyNkZWZpbmUgSURGX01JTgkJMQ0KPiArI2RlZmluZSBJREZfTUFY CQk3DQo+ICsjZGVmaW5lIE5ESVZfTUlOCTEwDQo+ICsjZGVmaW5lIE5ESVZfTUFYCTEyNQ0KPiAr I2RlZmluZSBPREZfTUlOCQkxDQo+ICsjZGVmaW5lIE9ERl9NQVgJCTgNCj4gKw0KPiArLyogZHNp IGNvbG9yIGZvcm1hdCBjb2RpbmcgYWNjb3JkaW5nIHRvIHRoZSBkYXRhc2hlZXQgKi8NCj4gK2Vu dW0gZHNpX2NvbG9yIHsNCj4gKwlEU0lfUkdCNTY1X0NPTkYxLA0KPiArCURTSV9SR0I1NjVfQ09O RjIsDQo+ICsJRFNJX1JHQjU2NV9DT05GMywNCj4gKwlEU0lfUkdCNjY2X0NPTkYxLA0KPiArCURT SV9SR0I2NjZfQ09ORjIsDQo+ICsJRFNJX1JHQjg4OCwNCj4gK307DQo+ICsNCj4gKyNkZWZpbmUg TEFORV9NSU5fS0JQUwkzMTI1MA0KPiArI2RlZmluZSBMQU5FX01BWF9LQlBTCTUwMDAwMA0KPiAr DQo+ICsvKiBUaW1lb3V0IGZvciByZWd1bGF0b3Igb24vb2ZmLCBwbGwgbG9jay91bmxvY2sgJiBm aWZvIGVtcHR5ICovDQo+ICsjZGVmaW5lIFRJTUVPVVRfVVMJMjAwMDAwDQo+ICsNCj4gK3N0cnVj dCBzdG0zMl9kc2lfcHJpdiB7DQo+ICsJc3RydWN0IG1pcGlfZHNpX2RldmljZSBkZXZpY2U7DQo+ ICsJdm9pZCBfX2lvbWVtICpiYXNlOw0KPiArCXN0cnVjdCB1ZGV2aWNlICpwYW5lbDsNCj4gKwl1 MzIgcGxscmVmX2NsazsNCj4gKwl1MzIgaHdfdmVyc2lvbjsNCj4gKwlpbnQgbGFuZV9taW5fa2Jw czsNCj4gKwlpbnQgbGFuZV9tYXhfa2JwczsNCj4gK307DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUg dm9pZCBkc2lfd3JpdGUoc3RydWN0IHN0bTMyX2RzaV9wcml2ICpkc2ksIHUzMiByZWcsIHUzMiB2 YWwpDQo+ICt7DQo+ICsJd3JpdGVsKHZhbCwgZHNpLT5iYXNlICsgcmVnKTsNCj4gK30NCj4gKw0K PiArc3RhdGljIGlubGluZSB1MzIgZHNpX3JlYWQoc3RydWN0IHN0bTMyX2RzaV9wcml2ICpkc2ks IHUzMiByZWcpDQo+ICt7DQo+ICsJcmV0dXJuIHJlYWRsKGRzaS0+YmFzZSArIHJlZyk7DQo+ICt9 DQo+ICsNCj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBkc2lfc2V0KHN0cnVjdCBzdG0zMl9kc2lfcHJp diAqZHNpLCB1MzIgcmVnLCB1MzIgbWFzaykNCj4gK3sNCj4gKwlkc2lfd3JpdGUoZHNpLCByZWcs IGRzaV9yZWFkKGRzaSwgcmVnKSB8IG1hc2spOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW5saW5l IHZvaWQgZHNpX2NsZWFyKHN0cnVjdCBzdG0zMl9kc2lfcHJpdiAqZHNpLCB1MzIgcmVnLCB1MzIg bWFzaykNCj4gK3sNCj4gKwlkc2lfd3JpdGUoZHNpLCByZWcsIGRzaV9yZWFkKGRzaSwgcmVnKSAm IH5tYXNrKTsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlubGluZSB2b2lkIGRzaV91cGRhdGVfYml0 cyhzdHJ1Y3Qgc3RtMzJfZHNpX3ByaXYgKmRzaSwgdTMyIHJlZywNCj4gKwkJCQkgICB1MzIgbWFz aywgdTMyIHZhbCkNCj4gK3sNCj4gKwlkc2lfd3JpdGUoZHNpLCByZWcsIChkc2lfcmVhZChkc2ks IHJlZykgJiB+bWFzaykgfCB2YWwpOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgZW51bSBkc2lfY29s b3IgZHNpX2NvbG9yX2Zyb21fbWlwaSh1MzIgZm10KQ0KPiArew0KPiArCXN3aXRjaCAoZm10KSB7 DQo+ICsJY2FzZSBNSVBJX0RTSV9GTVRfUkdCODg4Og0KPiArCQlyZXR1cm4gRFNJX1JHQjg4ODsN Cj4gKwljYXNlIE1JUElfRFNJX0ZNVF9SR0I2NjY6DQo+ICsJCXJldHVybiBEU0lfUkdCNjY2X0NP TkYyOw0KPiArCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjY2Nl9QQUNLRUQ6DQo+ICsJCXJldHVybiBE U0lfUkdCNjY2X0NPTkYxOw0KPiArCWNhc2UgTUlQSV9EU0lfRk1UX1JHQjU2NToNCj4gKwkJcmV0 dXJuIERTSV9SR0I1NjVfQ09ORjE7DQo+ICsJZGVmYXVsdDoNCj4gKwkJcHJfZXJyKCJNSVBJIGNv bG9yIGludmFsaWQsIHNvIHdlIHVzZSByZ2I4ODhcbiIpOw0KPiArCX0NCj4gKwlyZXR1cm4gRFNJ X1JHQjg4ODsNCj4gK30NCj4gKw0KPiArc3RhdGljIGludCBkc2lfcGxsX2dldF9jbGtvdXRfa2h6 KGludCBjbGtpbl9raHosIGludCBpZGYsIGludCBuZGl2LCBpbnQgb2RmKQ0KPiArew0KPiArCWlu dCBkaXZpc29yID0gaWRmICogb2RmOw0KPiArDQo+ICsJLyogcHJldmVudCBmcm9tIGRpdmlzaW9u IGJ5IDAgKi8NCj4gKwlpZiAoIWRpdmlzb3IpDQo+ICsJCXJldHVybiAwOw0KPiArDQo+ICsJcmV0 dXJuIERJVl9ST1VORF9DTE9TRVNUKGNsa2luX2toeiAqIG5kaXYsIGRpdmlzb3IpOw0KPiArfQ0K PiArDQo+ICtzdGF0aWMgaW50IGRzaV9wbGxfZ2V0X3BhcmFtcyhzdHJ1Y3Qgc3RtMzJfZHNpX3By aXYgKmRzaSwNCj4gKwkJCSAgICAgIGludCBjbGtpbl9raHosIGludCBjbGtvdXRfa2h6LA0KPiAr CQkJICAgICAgaW50ICppZGYsIGludCAqbmRpdiwgaW50ICpvZGYpDQo+ICt7DQo+ICsJaW50IGks IG8sIG4sIG5fbWluLCBuX21heDsNCj4gKwlpbnQgZnZjb19taW4sIGZ2Y29fbWF4LCBkZWx0YSwg YmVzdF9kZWx0YTsgLyogYWxsIGluIGtoeiAqLw0KPiArDQo+ICsJLyogRWFybHkgY2hlY2tzIHBy ZXZlbnRpbmcgZGl2aXNpb24gYnkgMCAmIG9kZCByZXN1bHRzICovDQo+ICsJaWYgKGNsa2luX2to eiA8PSAwIHx8IGNsa291dF9raHogPD0gMCkNCj4gKwkJcmV0dXJuIC1FSU5WQUw7DQo+ICsNCj4g KwlmdmNvX21pbiA9IGRzaS0+bGFuZV9taW5fa2JwcyAqIDIgKiBPREZfTUFYOw0KPiArCWZ2Y29f bWF4ID0gZHNpLT5sYW5lX21heF9rYnBzICogMiAqIE9ERl9NSU47DQo+ICsNCj4gKwliZXN0X2Rl bHRhID0gMTAwMDAwMDsgLyogYmlnIHN0YXJ0ZWQgdmFsdWUgKDEwMDAwMDBraHopICovDQo+ICsN Cj4gKwlmb3IgKGkgPSBJREZfTUlOOyBpIDw9IElERl9NQVg7IGkrKykgew0KPiArCQkvKiBDb21w dXRlIG5kaXYgcmFuZ2UgYWNjb3JkaW5nIHRvIEZ2Y28gKi8NCj4gKwkJbl9taW4gPSAoKGZ2Y29f bWluICogaSkgLyAoMiAqIGNsa2luX2toeikpICsgMTsNCj4gKwkJbl9tYXggPSAoZnZjb19tYXgg KiBpKSAvICgyICogY2xraW5fa2h6KTsNCj4gKw0KPiArCQkvKiBObyBuZWVkIHRvIGNvbnRpbnVl IGlkZiBsb29wIGlmIHdlIHJlYWNoIG5kaXYgbWF4ICovDQo+ICsJCWlmIChuX21pbiA+PSBORElW X01BWCkNCj4gKwkJCWJyZWFrOw0KPiArDQo+ICsJCS8qIENsYW1wIG5kaXYgdG8gdmFsaWQgdmFs dWVzICovDQo+ICsJCWlmIChuX21pbiA8IE5ESVZfTUlOKQ0KPiArCQkJbl9taW4gPSBORElWX01J TjsNCj4gKwkJaWYgKG5fbWF4ID4gTkRJVl9NQVgpDQo+ICsJCQluX21heCA9IE5ESVZfTUFYOw0K PiArDQo+ICsJCWZvciAobyA9IE9ERl9NSU47IG8gPD0gT0RGX01BWDsgbyAqPSAyKSB7DQo+ICsJ CQluID0gRElWX1JPVU5EX0NMT1NFU1QoaSAqIG8gKiBjbGtvdXRfa2h6LCBjbGtpbl9raHopOw0K PiArCQkJLyogQ2hlY2sgbmRpdiBhY2NvcmRpbmcgdG8gdmNvIHJhbmdlICovDQo+ICsJCQlpZiAo biA8IG5fbWluIHx8IG4gPiBuX21heCkNCj4gKwkJCQljb250aW51ZTsNCj4gKwkJCS8qIENoZWNr IGlmIG5ldyBkZWx0YSBpcyBiZXR0ZXIgJiBzYXZlcyBwYXJhbWV0ZXJzICovDQo+ICsJCQlkZWx0 YSA9IGRzaV9wbGxfZ2V0X2Nsa291dF9raHooY2xraW5fa2h6LCBpLCBuLCBvKSAtDQo+ICsJCQkJ Y2xrb3V0X2toejsNCj4gKwkJCWlmIChkZWx0YSA8IDApDQo+ICsJCQkJZGVsdGEgPSAtZGVsdGE7 DQo+ICsJCQlpZiAoZGVsdGEgPCBiZXN0X2RlbHRhKSB7DQo+ICsJCQkJKmlkZiA9IGk7DQo+ICsJ CQkJKm5kaXYgPSBuOw0KPiArCQkJCSpvZGYgPSBvOw0KPiArCQkJCWJlc3RfZGVsdGEgPSBkZWx0 YTsNCj4gKwkJCX0NCj4gKwkJCS8qIGZhc3QgcmV0dXJuIGluIGNhc2Ugb2YgInBlcmZlY3QgcmVz dWx0IiAqLw0KPiArCQkJaWYgKCFkZWx0YSkNCj4gKwkJCQlyZXR1cm4gMDsNCj4gKwkJfQ0KPiAr CX0NCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ICtzdGF0aWMgaW50IGRzaV9waHlf aW5pdCh2b2lkICpwcml2X2RhdGEpDQo+ICt7DQo+ICsJc3RydWN0IG1pcGlfZHNpX2RldmljZSAq ZGV2aWNlID0gcHJpdl9kYXRhOw0KPiArCXN0cnVjdCBzdG0zMl9kc2lfcHJpdiAqZHNpID0gZGV2 X2dldF9wcml2KGRldmljZS0+ZGV2KTsNCj4gKwl1MzIgdmFsOw0KPiArCWludCByZXQ7DQo+ICsN Cj4gKwkvKiBFbmFibGUgdGhlIHJlZ3VsYXRvciAqLw0KPiArCWRzaV9zZXQoZHNpLCBEU0lfV1JQ Q1IsIFdSUENSX1JFR0VOIHwgV1JQQ1JfQkdSRU4pOw0KPiArCXJldCA9IHJlYWRsX3BvbGxfdGlt ZW91dChkc2ktPmJhc2UgKyBEU0lfV0lTUiwgdmFsLCB2YWwgJiBXSVNSX1JSUywNCj4gKwkJCQkg VElNRU9VVF9VUyk7DQo+ICsJaWYgKHJldCkgew0KPiArCQlwcl9lcnIoIiFUSU1FT1VUISB3YWl0 aW5nIFJFR1VcbiIpOw0KDQpkZXZfZXJyKCkNCg0KPiArCQlyZXR1cm4gcmV0Ow0KPiArCX0NCj4g Kw0KPiArCS8qIEVuYWJsZSB0aGUgRFNJIFBMTCAmIHdhaXQgZm9yIGl0cyBsb2NrICovDQo+ICsJ ZHNpX3NldChkc2ksIERTSV9XUlBDUiwgV1JQQ1JfUExMRU4pOw0KPiArCXJldCA9IHJlYWRsX3Bv bGxfdGltZW91dChkc2ktPmJhc2UgKyBEU0lfV0lTUiwgdmFsLCB2YWwgJiBXSVNSX1BMTExTLA0K PiArCQkJCSBUSU1FT1VUX1VTKTsNCj4gKwlpZiAocmV0KSB7DQo+ICsJCXByX2VycigiIVRJTUVP VVQhIHdhaXRpbmcgUExMXG4iKTsNCg0KZGV2X2VycigpDQoNCj4gKwkJcmV0dXJuIHJldDsNCj4g Kwl9DQo+ICsNCj4gKwkvKiBFbmFibGUgdGhlIERTSSB3cmFwcGVyICovDQo+ICsJZHNpX3NldChk c2ksIERTSV9XQ1IsIFdDUl9EU0lFTik7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0K PiArc3RhdGljIGludCBkc2lfZ2V0X2xhbmVfbWJwcyh2b2lkICpwcml2X2RhdGEsIHN0cnVjdCBk aXNwbGF5X3RpbWluZyAqdGltaW5ncywNCj4gKwkJCSAgICAgdTMyIGxhbmVzLCB1MzIgZm9ybWF0 LCB1bnNpZ25lZCBpbnQgKmxhbmVfbWJwcykNCj4gK3sNCj4gKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2 aWNlICpkZXZpY2UgPSBwcml2X2RhdGE7DQo+ICsJc3RydWN0IHN0bTMyX2RzaV9wcml2ICpkc2kg PSBkZXZfZ2V0X3ByaXYoZGV2aWNlLT5kZXYpOw0KPiArCWludCBpZGYsIG5kaXYsIG9kZiwgcGxs X2luX2toeiwgcGxsX291dF9raHo7DQo+ICsJaW50IHJldCwgYnBwOw0KPiArCXUzMiB2YWw7DQo+ ICsNCj4gKwkvKiBVcGRhdGUgbGFuZSBjYXBhYmlsaXRpZXMgYWNjb3JkaW5nIHRvIGh3IHZlcnNp b24gKi8NCj4gKwlkc2ktPmh3X3ZlcnNpb24gPSBkc2lfcmVhZChkc2ksIERTSV9WRVJTSU9OKSAm IFZFUlNJT047DQo+ICsJZHNpLT5sYW5lX21pbl9rYnBzID0gTEFORV9NSU5fS0JQUzsNCj4gKwlk c2ktPmxhbmVfbWF4X2ticHMgPSBMQU5FX01BWF9LQlBTOw0KPiArCWlmIChkc2ktPmh3X3ZlcnNp b24gPT0gSFdWRVJfMTMxKSB7DQo+ICsJCWRzaS0+bGFuZV9taW5fa2JwcyAqPSAyOw0KPiArCQlk c2ktPmxhbmVfbWF4X2ticHMgKj0gMjsNCj4gKwl9DQo+ICsNCj4gKwlwbGxfaW5fa2h6ID0gZHNp LT5wbGxyZWZfY2xrIC8gMTAwMDsNCj4gKw0KPiArCS8qIENvbXB1dGUgcmVxdWVzdGVkIHBsbCBv dXQgKi8NCj4gKwlicHAgPSBtaXBpX2RzaV9waXhlbF9mb3JtYXRfdG9fYnBwKGZvcm1hdCk7DQo+ ICsJcGxsX291dF9raHogPSAodGltaW5ncy0+cGl4ZWxjbG9jay50eXAgLyAxMDAwKSAqIGJwcCAv IGxhbmVzOw0KPiArCS8qIEFkZCAyMCUgdG8gcGxsIG91dCB0byBiZSBoaWdoZXIgdGhhbiBwaXhl bCBidyAoYnVyc3QgbW9kZSBvbmx5KSAqLw0KPiArCXBsbF9vdXRfa2h6ID0gKHBsbF9vdXRfa2h6 ICogMTIpIC8gMTA7DQo+ICsJaWYgKHBsbF9vdXRfa2h6ID4gZHNpLT5sYW5lX21heF9rYnBzKSB7 DQo+ICsJCXBsbF9vdXRfa2h6ID0gZHNpLT5sYW5lX21heF9rYnBzOw0KPiArCQlwcl93YXJuKCJX YXJuaW5nIG1heCBwaHkgbWJwcyBpcyB1c2VkXG4iKTsNCj4gKwl9DQo+ICsJaWYgKHBsbF9vdXRf a2h6IDwgZHNpLT5sYW5lX21pbl9rYnBzKSB7DQo+ICsJCXBsbF9vdXRfa2h6ID0gZHNpLT5sYW5l X21pbl9rYnBzOw0KPiArCQlwcl93YXJuKCJXYXJuaW5nIG1pbiBwaHkgbWJwcyBpcyB1c2VkXG4i KTsNCj4gKwl9DQo+ICsNCj4gKwkvKiBDb21wdXRlIGJlc3QgcGxsIHBhcmFtZXRlcnMgKi8NCj4g KwlpZGYgPSAwOw0KPiArCW5kaXYgPSAwOw0KPiArCW9kZiA9IDA7DQo+ICsJcmV0ID0gZHNpX3Bs bF9nZXRfcGFyYW1zKGRzaSwgcGxsX2luX2toeiwgcGxsX291dF9raHosDQo+ICsJCQkJICZpZGYs ICZuZGl2LCAmb2RmKTsNCj4gKwlpZiAocmV0KSB7DQo+ICsJCXByX3dhcm4oIldhcm5pbmcgZHNp X3BsbF9nZXRfcGFyYW1zKCk6IGJhZCBwYXJhbXNcbiIpOw0KDQpkZXZfd2FybigpIG9yIGRldl9l cnIoKSA/DQoNCj4gKwkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ICsNCj4gKwkvKiBHZXQgdGhlIGFk anVzdGVkIHBsbCBvdXQgdmFsdWUgKi8NCj4gKwlwbGxfb3V0X2toeiA9IGRzaV9wbGxfZ2V0X2Ns a291dF9raHoocGxsX2luX2toeiwgaWRmLCBuZGl2LCBvZGYpOw0KPiArDQo+ICsJLyogU2V0IHRo ZSBQTEwgZGl2aXNpb24gZmFjdG9ycyAqLw0KPiArCWRzaV91cGRhdGVfYml0cyhkc2ksIERTSV9X UlBDUiwJV1JQQ1JfTkRJViB8IFdSUENSX0lERiB8IFdSUENSX09ERiwNCj4gKwkJCShuZGl2IDw8 IDIpIHwgKGlkZiA8PCAxMSkgfCAoKGZmcyhvZGYpIC0gMSkgPDwgMTYpKTsNCj4gKw0KPiArCS8q IENvbXB1dGUgdWl4NCAmIHNldCB0aGUgYml0IHBlcmlvZCBpbiBoaWdoLXNwZWVkIG1vZGUgKi8N Cj4gKwl2YWwgPSA0MDAwMDAwIC8gcGxsX291dF9raHo7DQo+ICsJZHNpX3VwZGF0ZV9iaXRzKGRz aSwgRFNJX1dQQ1IwLCBXUENSMF9VSVg0LCB2YWwpOw0KPiArDQo+ICsJLyogU2VsZWN0IHZpZGVv IG1vZGUgYnkgcmVzZXR0aW5nIERTSU0gYml0ICovDQo+ICsJZHNpX2NsZWFyKGRzaSwgRFNJX1dD RkdSLCBXQ0ZHUl9EU0lNKTsNCj4gKw0KPiArCS8qIFNlbGVjdCB0aGUgY29sb3IgY29kaW5nICov DQo+ICsJZHNpX3VwZGF0ZV9iaXRzKGRzaSwgRFNJX1dDRkdSLCBXQ0ZHUl9DT0xNVVgsDQo+ICsJ CQlkc2lfY29sb3JfZnJvbV9taXBpKGZvcm1hdCkgPDwgMSk7DQo+ICsNCj4gKwkqbGFuZV9tYnBz ID0gcGxsX291dF9raHogLyAxMDAwOw0KPiArDQo+ICsJcHJfaW5mbygicGxsX2luICV1a0h6IHBs bF9vdXQgJXVrSHogbGFuZV9tYnBzICV1TUh6XG4iLA0KPiArCQlwbGxfaW5fa2h6LCBwbGxfb3V0 X2toeiwgKmxhbmVfbWJwcyk7DQoNCmlzIGl0IHVzZWZ1bCB0byBwcmludCB0aGlzIGVhY2ggdGlt ZSA/IG9yIGlzIGl0IGZvciBkZWJ1ZyBwdXJwb3NlID8gaW4gDQp0aGlzIGNhc2UgdXNlIGRlYnVn KCkNCg0KPiArDQo+ICsJcmV0dXJuIDA7DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBjb25zdCBzdHJ1 Y3QgZHdfbWlwaV9kc2lfcGh5X29wcyBkd19taXBpX2RzaV9zdG1fcGh5X29wcyA9IHsNCj4gKwku aW5pdCA9IGRzaV9waHlfaW5pdCwNCj4gKwkuZ2V0X2xhbmVfbWJwcyA9IGRzaV9nZXRfbGFuZV9t YnBzLA0KPiArfTsNCj4gKw0KPiArc3RhdGljIGludCBzdG0zMl9kc2lfYXR0YWNoKHN0cnVjdCB1 ZGV2aWNlICpkZXYpDQo+ICt7DQo+ICsJc3RydWN0IHN0bTMyX2RzaV9wcml2ICpwcml2ID0gZGV2 X2dldF9wcml2KGRldik7DQo+ICsJc3RydWN0IGR3X21pcGlfZHNpX3BsYXRfZGF0YSAqcGxhdGRh dGEgPSBkZXZfZ2V0X3BsYXRkYXRhKGRldik7DQo+ICsJc3RydWN0IG1pcGlfZHNpX2RldmljZSAq ZGV2aWNlID0gJnByaXYtPmRldmljZTsNCj4gKwlpbnQgcmV0Ow0KPiArDQo+ICsJcGxhdGRhdGEt Pm1heF9kYXRhX2xhbmVzID0gMjsNCj4gKwlwbGF0ZGF0YS0+cGh5X29wcyA9ICZkd19taXBpX2Rz aV9zdG1fcGh5X29wczsNCj4gKw0KPiArCXJldCA9IHVjbGFzc19maXJzdF9kZXZpY2UoVUNMQVNT X1BBTkVMLCAmcGxhdGRhdGEtPnBhbmVsKTsNCj4gKwlpZiAocmV0KSB7DQo+ICsJCXByX2Vycigi JXM6IHBhbmVsIGRldmljZSBlcnJvciAlZFxuIiwgX19mdW5jX18sIHJldCk7DQoNCmRldl9lcnIo KQ0KDQo+ICsJCXJldHVybiByZXQ7DQo+ICsJfQ0KPiArDQo+ICsJcmV0ID0gZHdfbWlwaV9kc2lf aW5pdF9icmlkZ2UoZGV2aWNlKTsNCj4gKwlpZiAocmV0KSB7DQo+ICsJCXByX2VycigiRmFpbGVk IHRvIGluaXRpYWxpemUgbWlwaSBkc2kgaG9zdFxuIik7DQoNCmRpdHRvDQoNCj4gKwkJcmV0dXJu IHJldDsNCj4gKwl9DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RhdGljIGlu dCBzdG0zMl9kc2lfc2V0X2JhY2tsaWdodChzdHJ1Y3QgdWRldmljZSAqZGV2LCBpbnQgcGVyY2Vu dCkNCj4gK3sNCj4gKwlzdHJ1Y3QgZHdfbWlwaV9kc2lfcGxhdF9kYXRhICpkcGxhdCA9IGRldl9n ZXRfcGxhdGRhdGEoZGV2KTsNCj4gKwlzdHJ1Y3Qgc3RtMzJfZHNpX3ByaXYgKnByaXYgPSBkZXZf Z2V0X3ByaXYoZGV2KTsNCj4gKwlzdHJ1Y3QgbWlwaV9kc2lfZGV2aWNlICpkZXZpY2UgPSAmcHJp di0+ZGV2aWNlOw0KPiArCXN0cnVjdCB1ZGV2aWNlICpwYW5lbCA9IGRwbGF0LT5wYW5lbDsNCj4g KwlzdHJ1Y3QgbWlwaV9kc2lfcGFuZWxfcGxhdCAqbXBsYXQ7DQo+ICsJaW50IHJldDsNCj4gKw0K PiArCW1wbGF0ID0gZGV2X2dldF9wbGF0ZGF0YShwYW5lbCk7DQo+ICsJbXBsYXQtPmRldmljZSA9 IGRldmljZTsNCj4gKw0KPiArCXJldCA9IHBhbmVsX2VuYWJsZV9iYWNrbGlnaHQocGFuZWwpOw0K PiArCWlmIChyZXQpIHsNCj4gKwkJcHJfZXJyKCIlczogcGFuZWwgJXMgZW5hYmxlIGJhY2tsaWdo dCBlcnJvciAlZFxuIiwNCj4gKwkJICAgICAgIF9fZnVuY19fLCBwYW5lbC0+bmFtZSwgcmV0KTsN Cg0KZGl0dG8NCg0KPiArCQlyZXR1cm4gcmV0Ow0KPiArCX0NCj4gKw0KPiArCWR3X21pcGlfZHNp X2JyaWRnZV9lbmFibGUoZGV2aWNlKTsNCj4gKw0KPiArCXJldHVybiAwOw0KPiArfQ0KPiArDQo+ ICtzdGF0aWMgaW50IHN0bTMyX2RzaV9wcm9iZShzdHJ1Y3QgdWRldmljZSAqZGV2KQ0KPiArew0K PiArCXN0cnVjdCBzdG0zMl9kc2lfcHJpdiAqcHJpdiA9IGRldl9nZXRfcHJpdihkZXYpOw0KPiAr CXN0cnVjdCBtaXBpX2RzaV9kZXZpY2UgKmRldmljZSA9ICZwcml2LT5kZXZpY2U7DQo+ICsJc3Ry dWN0IHJlc2V0X2N0bCByc3Q7DQo+ICsJc3RydWN0IGNsayBjbGs7DQo+ICsJaW50IHJldDsNCj4g Kw0KPiArCWRldmljZS0+ZGV2ID0gZGV2Ow0KPiArDQo+ICsJcHJpdi0+YmFzZSA9ICh2b2lkICop ZGV2X3JlYWRfYWRkcihkZXYpOw0KPiArCWlmICgoZmR0X2FkZHJfdClwcml2LT5iYXNlID09IEZE VF9BRERSX1RfTk9ORSkgew0KPiArCQlwcl9lcnIoIiVzOiBkc2kgZHQgcmVnaXN0ZXIgYWRkcmVz cyBlcnJvclxuIiwgX19mdW5jX18pOw0KDQpkaXR0bw0KDQo+ICsJCXJldHVybiAtRUlOVkFMOw0K PiArCX0NCj4gKw0KPiArCXJldCA9IGNsa19nZXRfYnlfbmFtZShkZXZpY2UtPmRldiwgInBjbGsi LCAmY2xrKTsNCj4gKwlpZiAocmV0KSB7DQo+ICsJCXByX2VycigiJXM6IHBlcmlwaGVyYWwgY2xv Y2sgZ2V0IGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsNCg0KZGl0dG8NCg0KPiArCQlyZXR1 cm4gLUVOT0RFVjsNCj4gKwl9DQo+ICsNCj4gKwlyZXQgPSBjbGtfZW5hYmxlKCZjbGspOw0KPiAr CWlmIChyZXQpIHsNCj4gKwkJcHJfZXJyKCIlczogcGVyaXBoZXJhbCBjbG9jayBlbmFibGUgZXJy b3IgJWRcbiIsIF9fZnVuY19fLCByZXQpOw0KDQpkaXR0bw0KDQo+ICsJCXJldHVybiAtRU5PREVW Ow0KPiArCX0NCj4gKw0KPiArCXJldCA9IGNsa19nZXRfYnlfbmFtZShkZXYsICJyZWYiLCAmY2xr KTsNCj4gKwlpZiAocmV0KSB7DQo+ICsJCXByX2VycigiJXM6IHBsbCByZWZlcmVuY2UgY2xvY2sg Z2V0IGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsNCg0KZGl0dG8NCg0KPiArCQlyZXR1cm4g cmV0Ow0KPiArCX0NCj4gKw0KPiArCXByaXYtPnBsbHJlZl9jbGsgPSAodW5zaWduZWQgaW50KWNs a19nZXRfcmF0ZSgmY2xrKTsNCj4gKw0KPiArCXJldCA9IHJlc2V0X2dldF9ieV9pbmRleChkZXZp Y2UtPmRldiwgMCwgJnJzdCk7DQo+ICsJaWYgKHJldCkgew0KPiArCQlwcl9lcnIoIiVzOiBtaXNz aW5nIGRzaSBoYXJkd2FyZSByZXNldFxuIiwgX19mdW5jX18pOw0KDQpkaXR0bw0KDQo+ICsJCXJl dHVybiAtRU5PREVWOw0KPiArCX0NCj4gKw0KPiArCS8qIFJlc2V0ICovDQo+ICsJcmVzZXRfZGVh c3NlcnQoJnJzdCk7DQo+ICsNCj4gKwlyZXR1cm4gMDsNCj4gK30NCj4gKw0KPiArc3RydWN0IHZp ZGVvX2JyaWRnZV9vcHMgc3RtMzJfZHNpX29wcyA9IHsNCj4gKwkuYXR0YWNoID0gc3RtMzJfZHNp X2F0dGFjaCwNCj4gKwkuc2V0X2JhY2tsaWdodCA9IHN0bTMyX2RzaV9zZXRfYmFja2xpZ2h0LA0K PiArfTsNCj4gKw0KPiArc3RhdGljIGNvbnN0IHN0cnVjdCB1ZGV2aWNlX2lkIHN0bTMyX2RzaV9p ZHNbXSA9IHsNCj4gKwl7IC5jb21wYXRpYmxlID0gInN0LHN0bTMyLWRzaSJ9LA0KPiArCXsgfQ0K PiArfTsNCj4gKw0KPiArVV9CT09UX0RSSVZFUihzdG0zMl9kc2kpID0gew0KPiArCS5uYW1lCQkJ CT0gInN0bTMyLWRpc3BsYXktZHNpIiwNCj4gKwkuaWQJCQkJPSBVQ0xBU1NfVklERU9fQlJJREdF LA0KPiArCS5vZl9tYXRjaAkJCT0gc3RtMzJfZHNpX2lkcywNCj4gKwkuYmluZAkJCQk9IGRtX3Nj YW5fZmR0X2RldiwNCj4gKwkucHJvYmUJCQkJPSBzdG0zMl9kc2lfcHJvYmUsDQo+ICsJLm9wcwkJ CQk9ICZzdG0zMl9kc2lfb3BzLA0KPiArCS5wcml2X2F1dG9fYWxsb2Nfc2l6ZQkJPSBzaXplb2Yo c3RydWN0IHN0bTMyX2RzaV9wcml2KSwNCj4gKwkucGxhdGRhdGFfYXV0b19hbGxvY19zaXplCT0g c2l6ZW9mKHN0cnVjdCBkd19taXBpX2RzaV9wbGF0X2RhdGEpLA0KPiArfTsNCj4g