From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-db5eur01on0063.outbound.protection.outlook.com ([104.47.2.63] helo=EUR01-DB5-obe.outbound.protection.outlook.com) by bombadil.infradead.org with esmtps (Exim 4.89 #1 (Red Hat Linux)) id 1elN1m-0007pt-6P for linux-mtd@lists.infradead.org; Mon, 12 Feb 2018 22:56:56 +0000 From: Han Xu To: Yogesh Narayan Gaur , "linux-mtd@lists.infradead.org" CC: "boris.brezillon@free-electrons.com" , "cyrille.pitchen@wedev4u.fr" , "computersforpeace@gmail.com" , "festevam@gmail.com" , Prabhakar Kushwaha , Suresh Gupta Subject: Re: [PATCH v5 1/2] mtd: fsl-quadspi: add support to create dynamic LUT entry Date: Mon, 12 Feb 2018 22:56:35 +0000 Message-ID: References: <1517330970-15197-1-git-send-email-yogeshnarayan.gaur@nxp.com> <1517330970-15197-2-git-send-email-yogeshnarayan.gaur@nxp.com> In-Reply-To: <1517330970-15197-2-git-send-email-yogeshnarayan.gaur@nxp.com> Content-Language: en-US Content-Type: text/plain; charset="utf-8" Content-ID: <21E7DF0E6F3D424FB78904FABA23C8B7@eurprd04.prod.outlook.com> Content-Transfer-Encoding: base64 MIME-Version: 1.0 List-Id: Linux MTD discussion mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , DQoNCk9uIDAxLzMwLzIwMTggMTA6NDkgQU0sIFlvZ2VzaCBHYXVyIHdyb3RlOg0KPiBBZGQgc3Vw cG9ydCB0byBjcmVhdGUgZHluYW1pYyBMVVQgZW50cnkuDQo+DQo+IEN1cnJlbnQgYXBwcm9hY2gg b2YgY3JlYXRpbmcgTFVUIGVudHJpZXMgZm9yIHZhcmlvdXMgY21kcyBsaWtlIHJlYWQsIHdyaXRl LA0KPiBlcmFzZSwgcmVhZGlkLCByZWFkc3IsIHdlLCB3ZCBldGMgaXMgdGhhdCB3aGVuIFFTUEkg Y29udHJvbGxlciBnZXRzDQo+IGluaXRpYWxpemVkIGF0IHRoYXQgdGltZSBzdGF0aWMgTFVUIGVu dHJpZXMgZm9yIHRoZXNlIGNtZHMgZ2V0IGNyZWF0ZWQuDQo+DQo+IFBhdGNoIGFkZCBzdXBwb3J0 IHRvIGNyZWF0ZSB0aGUgTFVUIGF0IHJ1biB0aW1lIGJhc2VkIG9uIHRoZSBvcGVyYXRpb24NCj4g YmVpbmcgcGVyZm9ybWVkLg0KPg0KPiBBZGRlZCBBUEkgZnNsX3FzcGlfcHJlcGFyZV9sdXQoKSwg dGhpcyBBUEkgd291bGQgZ29pbmcgdG8gYmUgY2FsbGVkIGZyb20NCj4gZnNsX3FzcGlfcmVhZF9y ZWcsIGZzbF9xc3BpX3dyaXRlX3JlZywgZnNsX3FzcGlfd3JpdGUsIGZzbF9xc3BpX3JlYWQgYW5k DQo+IGZzbF9xc3BpX2VyYXNlIEFQSXMuDQo+IFRoaXMgQVBJIHdvdWxkIGZldGNoIHJlcXVpcmVk IGluZm8gbGlrZSBvcGNvZGUsIHByb3RvY29sIGluZm8sIGR1bW15IGluZm8NCj4gZm9yIGNyZWF0 aW5nIExVVCBmcm9tIGluc3RhbmNlIG9mICdzdHJ1Y3Qgc3BpX25vcicgYW5kIHRoZW4gcHJlcGFy ZSBMVVQNCj4gZW50cnkgZm9yIHRoZSByZXF1aXJlZCBjb21tYW5kLg0KPg0KPiBTaWduZWQtb2Zm LWJ5OiBZb2dlc2ggR2F1ciA8eW9nZXNobmFyYXlhbi5nYXVyQG54cC5jb20+DQo+IC0tLQ0KPiBD aGFuZ2VzIGZvciB2NToNCj4gLSBGaXggTFVUIHByZXBhcmF0aW9uIGZvciBTUElOT1JfT1BfUkVB RCBhbmQgU1BJTk9SX09QX1JFQURfNEIgY21kcy4NCj4gQ2hhbmdlcyBmb3IgdjQ6DQo+IC0gQ29y cmVjdCB2ZXJzaW9uIG51bWJlcmluZy4NCj4gQ2hhbmdlcyBmb3IgdjM6DQo+IC0gQWRkIFNUT1Ag aW5zdHJ1Y3Rpb24gZm9yIHByZXBhcmVkIExVVCBhbmQgcmVtb3ZlIG1lbXNldCBvZiA0IExVVCBy ZWcuDQo+IENoYW5nZXMgZm9yIHYyOg0KPiAtIFN3YXAgcGF0Y2ggc2VxdWVuY2VzIGluIHRoZSBz ZXJpZXMgdG8gc29sdmUgZ2l0IGJpc3NlY3QgaXNzdWUuDQo+DQo+ICAgZHJpdmVycy9tdGQvc3Bp LW5vci9mc2wtcXVhZHNwaS5jIHwgMzEwICsrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0t LS0tLS0tDQo+ICAgMSBmaWxlIGNoYW5nZWQsIDE2OCBpbnNlcnRpb25zKCspLCAxNDIgZGVsZXRp b25zKC0pDQo+DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL210ZC9zcGktbm9yL2ZzbC1xdWFkc3Bp LmMgYi9kcml2ZXJzL210ZC9zcGktbm9yL2ZzbC1xdWFkc3BpLmMNCj4gaW5kZXggODkzMDZjZi4u ODRjMzQxYiAxMDA2NDQNCj4gLS0tIGEvZHJpdmVycy9tdGQvc3BpLW5vci9mc2wtcXVhZHNwaS5j DQo+ICsrKyBiL2RyaXZlcnMvbXRkL3NwaS1ub3IvZnNsLXF1YWRzcGkuYw0KPiBAQCAtMTgzLDcg KzE4Myw3IEBADQo+ICAgDQo+ICAgLyogTWFjcm9zIGZvciBjb25zdHJ1Y3RpbmcgdGhlIExVVCBy ZWdpc3Rlci4gKi8NCj4gICAjZGVmaW5lIExVVDAoaW5zLCBwYWQsIG9wcikJCQkJCQlcDQo+IC0J CSgoKG9wcikgPDwgT1BSTkQwX1NISUZUKSB8ICgoTFVUXyMjcGFkKSA8PCBQQUQwX1NISUZUKSB8 IFwNCj4gKwkJKCgob3ByKSA8PCBPUFJORDBfU0hJRlQpIHwgKChwYWQpIDw8IFBBRDBfU0hJRlQp IHwgXA0KPiAgIAkJKChMVVRfIyNpbnMpIDw8IElOU1RSMF9TSElGVCkpDQo+ICAgDQo+ICAgI2Rl ZmluZSBMVVQxKGlucywgcGFkLCBvcHIpCShMVVQwKGlucywgcGFkLCBvcHIpIDw8IE9QUk5EMV9T SElGVCkNCj4gQEAgLTE5MywyMSArMTkzLDIxIEBADQo+ICAgI2RlZmluZSBRVUFEU1BJX0xVVF9O VU0JCTY0DQo+ICAgDQo+ICAgLyogU0VRSUQgLS0gd2UgY2FuIGhhdmUgMTYgc2VxaWRzIGF0IG1v c3QuICovDQo+IC0jZGVmaW5lIFNFUUlEX1JFQUQJCTANCj4gLSNkZWZpbmUgU0VRSURfV1JFTgkJ MQ0KPiAtI2RlZmluZSBTRVFJRF9XUkRJCQkyDQo+IC0jZGVmaW5lIFNFUUlEX1JEU1IJCTMNCj4g LSNkZWZpbmUgU0VRSURfU0UJCTQNCj4gLSNkZWZpbmUgU0VRSURfQ0hJUF9FUkFTRQk1DQo+IC0j ZGVmaW5lIFNFUUlEX1BQCQk2DQo+IC0jZGVmaW5lIFNFUUlEX1JESUQJCTcNCj4gLSNkZWZpbmUg U0VRSURfV1JTUgkJOA0KPiAtI2RlZmluZSBTRVFJRF9SRENSCQk5DQo+IC0jZGVmaW5lIFNFUUlE X0VONEIJCTEwDQo+IC0jZGVmaW5lIFNFUUlEX0JSV1IJCTExDQo+ICsvKiBMVVQwIHByb2dyYW1t ZWQgYnkgYm9vdGxvYWRlciwgZm9yIHJ1bi10aW1lIGNyZWF0ZSBlbnRyeSBmb3IgTFVUIHNlcWlk IDEgKi8NCj4gKyNkZWZpbmUgU0VRSURfTFVUMF9CT09UTE9BREVSCTANCj4gKyNkZWZpbmUgU0VR SURfTFVUMV9SVU5USU1FCTENCj4gICANCj4gICAjZGVmaW5lIFFVQURTUElfTUlOX0lPTUFQIFNa XzRNDQo+ICAgDQo+ICtlbnVtIGZzbF9xc3BpX29wcyB7DQo+ICsJRlNMX1FTUElfT1BTX1JFQUQg PSAwLA0KPiArCUZTTF9RU1BJX09QU19XUklURSwNCj4gKwlGU0xfUVNQSV9PUFNfRVJBU0UsDQo+ ICsJRlNMX1FTUElfT1BTX1JFQURfUkVHLA0KPiArCUZTTF9RU1BJX09QU19XUklURV9SRUcsDQo+ ICsJRlNMX1FTUElfT1BTX1dSSVRFX0JVRl9SRUcsDQo+ICt9Ow0KPiArDQo+ICAgZW51bSBmc2xf cXNwaV9kZXZ0eXBlIHsNCj4gICAJRlNMX1FVQURTUElfVllCUklELA0KPiAgIAlGU0xfUVVBRFNQ SV9JTVg2U1gsDQo+IEBAIC0zNjgsMTM2ICszNjgsMTU4IEBAIHN0YXRpYyBpcnFyZXR1cm5fdCBm c2xfcXNwaV9pcnFfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQpDQo+ICAgCXJldHVybiBJ UlFfSEFORExFRDsNCj4gICB9DQo+ICAgDQo+IC1zdGF0aWMgdm9pZCBmc2xfcXNwaV9pbml0X2x1 dChzdHJ1Y3QgZnNsX3FzcGkgKnEpDQo+ICtzdGF0aWMgaW5saW5lIHM4IHBhZF9jb3VudChzOCBw YWRfdmFsKQ0KPiAgIHsNCj4gKwlzOCBjb3VudCA9IC0xOw0KPiArDQo+ICsJaWYgKCFwYWRfdmFs KQ0KPiArCQlyZXR1cm4gMDsNCj4gKw0KPiArCXdoaWxlIChwYWRfdmFsKSB7DQo+ICsJCXBhZF92 YWwgPj49IDE7DQo+ICsJCWNvdW50Kys7DQo+ICsJfQ0KPiArCXJldHVybiBjb3VudDsNCj4gK30N Cj4gKw0KPiArLyoNCj4gKyAqIFByZXBhcmUgTFVUIGVudHJ5IGZvciB0aGUgaW5wdXQgY21kLg0K PiArICogUHJvdG9jb2wgaW5mbyBpcyBwcmVzZW50IGluIGluc3RhbmNlIG9mIHN0cnVjdCBzcGlf bm9yLCB1c2luZyB3aGljaCBmaWVsZHMNCj4gKyAqIGxpa2UgY21kLCBkYXRhLCBhZGRybGVuIGFs b25nIHdpdGggcGFkIGluZm8gZXRjIGNhbiBiZSBwYXJzZWQuDQo+ICsgKi8NCj4gK3N0YXRpYyB2 b2lkIGZzbF9xc3BpX3ByZXBhcmVfbHV0KHN0cnVjdCBzcGlfbm9yICpub3IsDQo+ICsJCQkJIGVu dW0gZnNsX3FzcGlfb3BzIG9wcywgdTggY21kKQ0KPiArew0KPiArCXN0cnVjdCBmc2xfcXNwaSAq cSA9IG5vci0+cHJpdjsNCj4gICAJdm9pZCBfX2lvbWVtICpiYXNlID0gcS0+aW9iYXNlOw0KPiAg IAlpbnQgcnhmaWZvID0gcS0+ZGV2dHlwZV9kYXRhLT5yeGZpZm87DQo+ICsJaW50IHR4ZmlmbyA9 IHEtPmRldnR5cGVfZGF0YS0+dHhmaWZvOw0KPiAgIAl1MzIgbHV0X2Jhc2U7DQo+IC0JaW50IGk7 DQo+ICsJdTggY21kX3BhZCwgYWRkcl9wYWQsIGRhdGFfcGFkLCBkdW1teV9wYWQ7DQo+ICsJZW51 bSBzcGlfbm9yX3Byb3RvY29sIHByb3RvY29sID0gMDsNCj4gKwl1OCBhZGRybGVuID0gMDsNCj4g Kwl1OCByZWFkX2RtLCBvcGNvZGU7DQo+ICsJaW50IHN0b3BfbHV0Ow0KPiArDQo+ICsJcmVhZF9k bSA9IG9wY29kZSA9IGNtZF9wYWQgPSBhZGRyX3BhZCA9IGRhdGFfcGFkID0gZHVtbXlfcGFkID0g MDsNCj4gKw0KPiArCXN3aXRjaCAob3BzKSB7DQo+ICsJY2FzZSBGU0xfUVNQSV9PUFNfUkVBRF9S RUc6DQo+ICsJY2FzZSBGU0xfUVNQSV9PUFNfV1JJVEVfUkVHOg0KPiArCWNhc2UgRlNMX1FTUElf T1BTX1dSSVRFX0JVRl9SRUc6DQo+ICsJCW9wY29kZSA9IGNtZDsNCj4gKwkJcHJvdG9jb2wgPSBu b3ItPnJlZ19wcm90bzsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBGU0xfUVNQSV9PUFNfUkVBRDoN Cj4gKwkJb3Bjb2RlID0gY21kOw0KPiArCQlyZWFkX2RtID0gbm9yLT5yZWFkX2R1bW15Ow0KPiAr CQlwcm90b2NvbCA9IG5vci0+cmVhZF9wcm90bzsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBGU0xf UVNQSV9PUFNfV1JJVEU6DQo+ICsJCW9wY29kZSA9IGNtZDsNCj4gKwkJcHJvdG9jb2wgPSBub3It PndyaXRlX3Byb3RvOw0KPiArCQlicmVhazsNCj4gKwljYXNlIEZTTF9RU1BJX09QU19FUkFTRToN Cj4gKwkJb3Bjb2RlID0gY21kOw0KPiArCQlicmVhazsNCj4gKwlkZWZhdWx0Og0KPiArCQlkZXZf ZXJyKHEtPmRldiwgIlVuc3VwcG9ydGVkIG9wZXJhdGlvbiAweCUuMnhcbiIsIG9wcyk7DQo+ICsJ CXJldHVybjsNCj4gKwl9DQo+ICsNCj4gKwlpZiAocHJvdG9jb2wpIHsNCj4gKwkJY21kX3BhZCA9 IHNwaV9ub3JfZ2V0X3Byb3RvY29sX2luc3RfbmJpdHMocHJvdG9jb2wpOw0KPiArCQlhZGRyX3Bh ZCA9IHNwaV9ub3JfZ2V0X3Byb3RvY29sX2FkZHJfbmJpdHMocHJvdG9jb2wpOw0KPiArCQlkYXRh X3BhZCA9IHNwaV9ub3JfZ2V0X3Byb3RvY29sX2RhdGFfbmJpdHMocHJvdG9jb2wpOw0KPiArCX0N Cj4gICANCj4gLQlzdHJ1Y3Qgc3BpX25vciAqbm9yID0gJnEtPm5vclswXTsNCj4gLQl1OCBhZGRy bGVuID0gKG5vci0+YWRkcl93aWR0aCA9PSAzKSA/IEFERFIyNEJJVCA6IEFERFIzMkJJVDsNCj4g LQl1OCByZWFkX29wID0gbm9yLT5yZWFkX29wY29kZTsNCj4gLQl1OCByZWFkX2RtID0gbm9yLT5y ZWFkX2R1bW15Ow0KPiArCWR1bW15X3BhZCA9IGRhdGFfcGFkOw0KPiArDQo+ICsJZGV2X2RiZyhx LT5kZXYsICJvcHM6JXggb3Bjb2RlOiV4IHBhZFtjbWQ6JWQsIGFkZHI6JWQsIGRhdGE6JWRdXG4i LA0KPiArCQkJb3BzLCBvcGNvZGUsIGNtZF9wYWQsIGFkZHJfcGFkLCBkYXRhX3BhZCk7DQo+ICAg DQo+ICAgCWZzbF9xc3BpX3VubG9ja19sdXQocSk7DQo+ICAgDQo+IC0JLyogQ2xlYXIgYWxsIHRo ZSBMVVQgdGFibGUgKi8NCj4gLQlmb3IgKGkgPSAwOyBpIDwgUVVBRFNQSV9MVVRfTlVNOyBpKysp DQo+IC0JCXFzcGlfd3JpdGVsKHEsIDAsIGJhc2UgKyBRVUFEU1BJX0xVVF9CQVNFICsgaSAqIDQp Ow0KPiAtDQo+IC0JLyogUmVhZCAqLw0KPiAtCWx1dF9iYXNlID0gU0VRSURfUkVBRCAqIDQ7DQo+ IC0NCj4gLQlxc3BpX3dyaXRlbChxLCBMVVQwKENNRCwgUEFEMSwgcmVhZF9vcCkgfCBMVVQxKEFE RFIsIFBBRDEsIGFkZHJsZW4pLA0KPiAtCQkJYmFzZSArIFFVQURTUElfTFVUKGx1dF9iYXNlKSk7 DQo+IC0JcXNwaV93cml0ZWwocSwgTFVUMChEVU1NWSwgUEFEMSwgcmVhZF9kbSkgfA0KPiAtCQkg ICAgTFVUMShGU0xfUkVBRCwgUEFENCwgcnhmaWZvKSwNCj4gLQkJCWJhc2UgKyBRVUFEU1BJX0xV VChsdXRfYmFzZSArIDEpKTsNCj4gLQ0KPiAtCS8qIFdyaXRlIGVuYWJsZSAqLw0KPiAtCWx1dF9i YXNlID0gU0VRSURfV1JFTiAqIDQ7DQo+IC0JcXNwaV93cml0ZWwocSwgTFVUMChDTUQsIFBBRDEs IFNQSU5PUl9PUF9XUkVOKSwNCj4gLQkJCWJhc2UgKyBRVUFEU1BJX0xVVChsdXRfYmFzZSkpOw0K PiAtDQo+IC0JLyogUGFnZSBQcm9ncmFtICovDQo+IC0JbHV0X2Jhc2UgPSBTRVFJRF9QUCAqIDQ7 DQo+IC0NCj4gLQlxc3BpX3dyaXRlbChxLCBMVVQwKENNRCwgUEFEMSwgbm9yLT5wcm9ncmFtX29w Y29kZSkgfA0KPiAtCQkgICAgTFVUMShBRERSLCBQQUQxLCBhZGRybGVuKSwNCj4gLQkJCWJhc2Ug KyBRVUFEU1BJX0xVVChsdXRfYmFzZSkpOw0KPiAtCXFzcGlfd3JpdGVsKHEsIExVVDAoRlNMX1dS SVRFLCBQQUQxLCAwKSwNCj4gLQkJCWJhc2UgKyBRVUFEU1BJX0xVVChsdXRfYmFzZSArIDEpKTsN Cj4gLQ0KPiAtCS8qIFJlYWQgU3RhdHVzICovDQo+IC0JbHV0X2Jhc2UgPSBTRVFJRF9SRFNSICog NDsNCj4gLQlxc3BpX3dyaXRlbChxLCBMVVQwKENNRCwgUEFEMSwgU1BJTk9SX09QX1JEU1IpIHwN Cj4gLQkJCUxVVDEoRlNMX1JFQUQsIFBBRDEsIDB4MSksDQo+IC0JCQliYXNlICsgUVVBRFNQSV9M VVQobHV0X2Jhc2UpKTsNCj4gLQ0KPiAtCS8qIEVyYXNlIGEgc2VjdG9yICovDQo+IC0JbHV0X2Jh c2UgPSBTRVFJRF9TRSAqIDQ7DQo+IC0NCj4gLQlxc3BpX3dyaXRlbChxLCBMVVQwKENNRCwgUEFE MSwgbm9yLT5lcmFzZV9vcGNvZGUpIHwNCj4gLQkJICAgIExVVDEoQUREUiwgUEFEMSwgYWRkcmxl biksDQo+IC0JCQliYXNlICsgUVVBRFNQSV9MVVQobHV0X2Jhc2UpKTsNCj4gLQ0KPiAtCS8qIEVy YXNlIHRoZSB3aG9sZSBjaGlwICovDQo+IC0JbHV0X2Jhc2UgPSBTRVFJRF9DSElQX0VSQVNFICog NDsNCj4gLQlxc3BpX3dyaXRlbChxLCBMVVQwKENNRCwgUEFEMSwgU1BJTk9SX09QX0NISVBfRVJB U0UpLA0KPiAtCQkJYmFzZSArIFFVQURTUElfTFVUKGx1dF9iYXNlKSk7DQo+IC0NCj4gLQkvKiBS RUFEIElEICovDQo+IC0JbHV0X2Jhc2UgPSBTRVFJRF9SRElEICogNDsNCj4gLQlxc3BpX3dyaXRl bChxLCBMVVQwKENNRCwgUEFEMSwgU1BJTk9SX09QX1JESUQpIHwNCj4gLQkJCUxVVDEoRlNMX1JF QUQsIFBBRDEsIDB4OCksDQo+IC0JCQliYXNlICsgUVVBRFNQSV9MVVQobHV0X2Jhc2UpKTsNCj4g LQ0KPiAtCS8qIFdyaXRlIFJlZ2lzdGVyICovDQo+IC0JbHV0X2Jhc2UgPSBTRVFJRF9XUlNSICog NDsNCj4gLQlxc3BpX3dyaXRlbChxLCBMVVQwKENNRCwgUEFEMSwgU1BJTk9SX09QX1dSU1IpIHwN Cj4gLQkJCUxVVDEoRlNMX1dSSVRFLCBQQUQxLCAweDIpLA0KPiAtCQkJYmFzZSArIFFVQURTUElf TFVUKGx1dF9iYXNlKSk7DQo+IC0NCj4gLQkvKiBSZWFkIENvbmZpZ3VyYXRpb24gUmVnaXN0ZXIg Ki8NCj4gLQlsdXRfYmFzZSA9IFNFUUlEX1JEQ1IgKiA0Ow0KPiAtCXFzcGlfd3JpdGVsKHEsIExV VDAoQ01ELCBQQUQxLCBTUElOT1JfT1BfUkRDUikgfA0KPiAtCQkJTFVUMShGU0xfUkVBRCwgUEFE MSwgMHgxKSwNCj4gLQkJCWJhc2UgKyBRVUFEU1BJX0xVVChsdXRfYmFzZSkpOw0KPiAtDQo+IC0J LyogV3JpdGUgZGlzYWJsZSAqLw0KPiAtCWx1dF9iYXNlID0gU0VRSURfV1JESSAqIDQ7DQo+IC0J cXNwaV93cml0ZWwocSwgTFVUMChDTUQsIFBBRDEsIFNQSU5PUl9PUF9XUkRJKSwNCj4gLQkJCWJh c2UgKyBRVUFEU1BJX0xVVChsdXRfYmFzZSkpOw0KPiAtDQo+IC0JLyogRW50ZXIgNCBCeXRlIE1v ZGUgKE1pY3JvbikgKi8NCj4gLQlsdXRfYmFzZSA9IFNFUUlEX0VONEIgKiA0Ow0KPiAtCXFzcGlf d3JpdGVsKHEsIExVVDAoQ01ELCBQQUQxLCBTUElOT1JfT1BfRU40QiksDQo+IC0JCQliYXNlICsg UVVBRFNQSV9MVVQobHV0X2Jhc2UpKTsNCj4gLQ0KPiAtCS8qIEVudGVyIDQgQnl0ZSBNb2RlIChT cGFuc2lvbikgKi8NCj4gLQlsdXRfYmFzZSA9IFNFUUlEX0JSV1IgKiA0Ow0KPiAtCXFzcGlfd3Jp dGVsKHEsIExVVDAoQ01ELCBQQUQxLCBTUElOT1JfT1BfQlJXUiksDQo+IC0JCQliYXNlICsgUVVB RFNQSV9MVVQobHV0X2Jhc2UpKTsNCj4gKwkvKiBEeW5hbWljIExVVCAqLw0KPiArCWx1dF9iYXNl ID0gU0VRSURfTFVUMV9SVU5USU1FICogNDsNCj4gICANCj4gLQlmc2xfcXNwaV9sb2NrX2x1dChx KTsNCj4gLX0NCj4gKwkvKiBkZWZhdWx0LCBTVE9QIGluc3RydWN0aW9uIHRvIGJlIHByb2dyYW1t ZWQgaW4gKGx1dF9iYXNlICsgMSkgcmVnICovDQo+ICsJc3RvcF9sdXQgPSAxOw0KPiArCXN3aXRj aCAob3BzKSB7DQo+ICsJY2FzZSBGU0xfUVNQSV9PUFNfUkVBRF9SRUc6DQo+ICsJCXFzcGlfd3Jp dGVsKHEsIExVVDAoQ01ELCBwYWRfY291bnQoY21kX3BhZCksIG9wY29kZSkgfA0KPiArCQkJICBM VVQxKEZTTF9SRUFELCBwYWRfY291bnQoZGF0YV9wYWQpLCByeGZpZm8pLA0KPiArCQkJICBiYXNl ICsgUVVBRFNQSV9MVVQobHV0X2Jhc2UpKTsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBGU0xfUVNQ SV9PUFNfV1JJVEVfUkVHOg0KPiArCQlxc3BpX3dyaXRlbChxLCBMVVQwKENNRCwgcGFkX2NvdW50 KGNtZF9wYWQpLCBvcGNvZGUpLA0KPiArCQkJICBiYXNlICsgUVVBRFNQSV9MVVQobHV0X2Jhc2Up KTsNCj4gKwkJYnJlYWs7DQo+ICsJY2FzZSBGU0xfUVNQSV9PUFNfV1JJVEVfQlVGX1JFRzoNCj4g KwkJcXNwaV93cml0ZWwocSwgTFVUMChDTUQsIHBhZF9jb3VudChjbWRfcGFkKSwgb3Bjb2RlKSB8 DQo+ICsJCQkgIExVVDEoRlNMX1dSSVRFLCBwYWRfY291bnQoZGF0YV9wYWQpLCB0eGZpZm8pLA0K PiArCQkJICBiYXNlICsgUVVBRFNQSV9MVVQobHV0X2Jhc2UpKTsNCj4gKwkJYnJlYWs7DQo+ICsJ Y2FzZSBGU0xfUVNQSV9PUFNfUkVBRDoNCj4gKwljYXNlIEZTTF9RU1BJX09QU19XUklURToNCj4g KwljYXNlIEZTTF9RU1BJX09QU19FUkFTRToNCj4gKwkJLyogQ29tbW9uIGZvciBSZWFkLCBXcml0 ZSBhbmQgRXJhc2Ugb3BzLiAqLw0KPiAgIA0KPiAtLyogR2V0IHRoZSBTRVFJRCBmb3IgdGhlIGNv bW1hbmQgKi8NCj4gLXN0YXRpYyBpbnQgZnNsX3FzcGlfZ2V0X3NlcWlkKHN0cnVjdCBmc2xfcXNw aSAqcSwgdTggY21kKQ0KPiAtew0KPiAtCXN3aXRjaCAoY21kKSB7DQo+IC0JY2FzZSBTUElOT1Jf T1BfUkVBRF8xXzFfNDoNCj4gLQkJcmV0dXJuIFNFUUlEX1JFQUQ7DQo+IC0JY2FzZSBTUElOT1Jf T1BfV1JFTjoNCj4gLQkJcmV0dXJuIFNFUUlEX1dSRU47DQo+IC0JY2FzZSBTUElOT1JfT1BfV1JE SToNCj4gLQkJcmV0dXJuIFNFUUlEX1dSREk7DQo+IC0JY2FzZSBTUElOT1JfT1BfUkRTUjoNCj4g LQkJcmV0dXJuIFNFUUlEX1JEU1I7DQo+IC0JY2FzZSBTUElOT1JfT1BfU0U6DQo+IC0JCXJldHVy biBTRVFJRF9TRTsNCj4gLQljYXNlIFNQSU5PUl9PUF9DSElQX0VSQVNFOg0KPiAtCQlyZXR1cm4g U0VRSURfQ0hJUF9FUkFTRTsNCj4gLQljYXNlIFNQSU5PUl9PUF9QUDoNCj4gLQkJcmV0dXJuIFNF UUlEX1BQOw0KPiAtCWNhc2UgU1BJTk9SX09QX1JESUQ6DQo+IC0JCXJldHVybiBTRVFJRF9SRElE Ow0KPiAtCWNhc2UgU1BJTk9SX09QX1dSU1I6DQo+IC0JCXJldHVybiBTRVFJRF9XUlNSOw0KPiAt CWNhc2UgU1BJTk9SX09QX1JEQ1I6DQo+IC0JCXJldHVybiBTRVFJRF9SRENSOw0KPiAtCWNhc2Ug U1BJTk9SX09QX0VONEI6DQo+IC0JCXJldHVybiBTRVFJRF9FTjRCOw0KPiAtCWNhc2UgU1BJTk9S X09QX0JSV1I6DQo+IC0JCXJldHVybiBTRVFJRF9CUldSOw0KPiArCQlhZGRybGVuID0gKG5vci0+ YWRkcl93aWR0aCA9PSAzKSA/IEFERFIyNEJJVCA6IEFERFIzMkJJVDsNCj4gKw0KPiArCQlxc3Bp X3dyaXRlbChxLCBMVVQwKENNRCwgcGFkX2NvdW50KGNtZF9wYWQpLCBvcGNvZGUpIHwNCj4gKwkJ CQlMVVQxKEFERFIsIHBhZF9jb3VudChhZGRyX3BhZCksIGFkZHJsZW4pLA0KPiArCQkJCWJhc2Ug KyBRVUFEU1BJX0xVVChsdXRfYmFzZSkpOw0KPiArCQkvKg0KPiArCQkgKiBGb3IgRXJhc2Ugb3Bz IC0gRGF0YSBhbmQgRHVtbXkgbm90IHJlcXVpcmVkLg0KPiArCQkgKiBGb3IgV3JpdGUgb3BzIC0g RHVtbXkgbm90IHJlcXVpcmVkLg0KPiArCQkgKi8NCj4gKw0KPiArCQlpZiAob3BzID09IEZTTF9R U1BJX09QU19SRUFEKSB7DQo+ICsNCj4gKwkJCS8qDQo+ICsJCQkgKiBGb3IgY21kcyBTUElOT1Jf T1BfUkVBRCBhbmQgU1BJTk9SX09QX1JFQURfNEIgdmFsdWUNCj4gKwkJCSAqIG9mIGR1bW15IGN5 Y2xlcyBhcmUgMC4NCj4gKwkJCSAqLw0KPiArCQkJaWYgKHJlYWRfZG0pDQo+ICsJCQkJcXNwaV93 cml0ZWwocSwNCj4gKwkJCQkJICAgIExVVDAoRFVNTVksIHBhZF9jb3VudChkdW1teV9wYWQpLA0K PiArCQkJCQkgICAgcmVhZF9kbSkgfA0KPiArCQkJCQkgICAgTFVUMShGU0xfUkVBRCwgcGFkX2Nv dW50KGRhdGFfcGFkKSwNCj4gKwkJCQkJICAgIHJ4ZmlmbyksDQo+ICsJCQkJCSAgICBiYXNlICsg UVVBRFNQSV9MVVQobHV0X2Jhc2UgKyAxKSk7DQo+ICsJCQllbHNlDQo+ICsJCQkJcXNwaV93cml0 ZWwocSwNCj4gKwkJCQkJICAgIExVVDAoRlNMX1JFQUQsIHBhZF9jb3VudChkYXRhX3BhZCksDQo+ ICsJCQkJCSAgICByeGZpZm8pLA0KPiArCQkJCQkgICAgYmFzZSArIFFVQURTUElfTFVUKGx1dF9i YXNlICsgMSkpOw0KPiArDQo+ICsJCQlzdG9wX2x1dCA9IDI7DQo+ICsNCj4gKwkJCS8qIFRPRE8g QWRkIGNvbmRpdGlvbiB0byBjaGVjayBpZiBSRUFEIGlzIElQL0FIQi4gKi8NCj4gKw0KPiArCQkJ LyogRm9yIEFIQiByZWFkLCBhZGQgc2VxaWQgaW4gQkZHRU5DUiByZWdpc3Rlci4gKi8NCj4gKwkJ CXFzcGlfd3JpdGVsKHEsDQo+ICsJCQkJICAgIFNFUUlEX0xVVDFfUlVOVElNRSA8PA0KPiArCQkJ CSAgICBRVUFEU1BJX0JGR0VOQ1JfU0VRSURfU0hJRlQsDQo+ICsJCQkJICAgIHEtPmlvYmFzZSAr IFFVQURTUElfQkZHRU5DUik7DQo+ICsJCX0NCj4gKw0KPiArCQlpZiAob3BzID09IEZTTF9RU1BJ X09QU19XUklURSkgew0KPiArCQkJcXNwaV93cml0ZWwocSwgTFVUMChGU0xfV1JJVEUsIHBhZF9j b3VudChkYXRhX3BhZCksIDApLA0KPiArCQkJCQliYXNlICsgUVVBRFNQSV9MVVQobHV0X2Jhc2Ug KyAxKSk7DQo+ICsJCQlzdG9wX2x1dCA9IDI7DQo+ICsJCX0NCj4gKwkJYnJlYWs7DQo+ICAgCWRl ZmF1bHQ6DQo+IC0JCWlmIChjbWQgPT0gcS0+bm9yWzBdLmVyYXNlX29wY29kZSkNCj4gLQkJCXJl dHVybiBTRVFJRF9TRTsNCj4gLQkJZGV2X2VycihxLT5kZXYsICJVbnN1cHBvcnRlZCBjbWQgMHgl LjJ4XG4iLCBjbWQpOw0KPiArCQlkZXZfZXJyKHEtPmRldiwgIlVuc3VwcG9ydGVkIG9wZXJhdGlv biAweCUuMnhcbiIsIG9wcyk7DQo+ICAgCQlicmVhazsNCj4gICAJfQ0KPiAtCXJldHVybiAtRUlO VkFMOw0KPiArDQo+ICsJLyogcHJlcGFyZSBMVVQgZm9yIFNUT1AgaW5zdHJ1Y3Rpb24uICovDQo+ ICsJcXNwaV93cml0ZWwocSwgMCwgYmFzZSArICBRVUFEU1BJX0xVVChsdXRfYmFzZSArIHN0b3Bf bHV0KSk7DQo+ICsNCj4gKwlmc2xfcXNwaV9sb2NrX2x1dChxKTsNCj4gICB9DQo+ICAgDQoNCkl0 J3Mgbm90IGV4YWN0IG15IGV4cGVjdGVkIGR5bmFtaWMgaW1wbGVtZW50YXRpb24sIHRoaXMgY29k ZSBjaGFuZ2UgDQptZXJlbHkgdXNlIDEgTFVUIHNldCBhbmQgbmVlZCB0byB1cGRhdGUgaXQgZm9y IGVhY2ggb3BlcmF0aW9uLiBNeSANCnByZXZpb3VzIHRob3VnaHQgd2FzIHVzZSBhcyBtdWNoIExV VCBhcyBwb3NzaWJsZSBhbmQgcmVzZXJ2ZSB0aGUgbGFzdCANCm9uZSAob3Igb25lIHBhaXIpIExV VChzKSBmb3IgZHluYW1pY2FsIHVwZGF0ZS4NCg0KSSBhbSBva2F5IHdpdGggdGhpcyBpbXBsZW1l bnRhdGlvbi4gQnV0IEkgc2VlIHNvbWUgZXJyb3Igd2hlbiB0ZXN0aW5nIG9uIA0KaS5NWDcsIEkg bmVlZCB0byBkaWcgdGhlIGlzc3VlLiBQbGVhc2UgbGV0IG1lIGtub3cgb24gd2hpY2ggcGxhdGZv cm0gZGlkIA0KeW91IHRlc3Q/DQoNCj4gICBzdGF0aWMgaW50DQo+IEBAIC01MzIsNyArNTU0LDcg QEAgc3RhdGljIGludCBmc2xfcXNwaV9nZXRfc2VxaWQoc3RydWN0IGZzbF9xc3BpICpxLCB1OCBj bWQpDQo+ICAgCX0gd2hpbGUgKDEpOw0KPiAgIA0KPiAgIAkvKiB0cmlnZ2VyIHRoZSBMVVQgbm93 ICovDQo+IC0Jc2VxaWQgPSBmc2xfcXNwaV9nZXRfc2VxaWQocSwgY21kKTsNCj4gKwlzZXFpZCA9 IFNFUUlEX0xVVDFfUlVOVElNRTsNCj4gICAJcXNwaV93cml0ZWwocSwgKHNlcWlkIDw8IFFVQURT UElfSVBDUl9TRVFJRF9TSElGVCkgfCBsZW4sDQo+ICAgCQkJYmFzZSArIFFVQURTUElfSVBDUik7 DQo+ICAgDQo+IEBAIC02ODQsOCArNzA2LDggQEAgc3RhdGljIHZvaWQgZnNsX3FzcGlfaW5pdF9h aGJfcmVhZChzdHJ1Y3QgZnNsX3FzcGkgKnEpDQo+ICAgCXFzcGlfd3JpdGVsKHEsIDAsIGJhc2Ug KyBRVUFEU1BJX0JVRjFJTkQpOw0KPiAgIAlxc3BpX3dyaXRlbChxLCAwLCBiYXNlICsgUVVBRFNQ SV9CVUYySU5EKTsNCj4gICANCj4gLQkvKiBTZXQgdGhlIGRlZmF1bHQgbHV0IHNlcXVlbmNlIGZv ciBBSEIgUmVhZC4gKi8NCj4gLQlzZXFpZCA9IGZzbF9xc3BpX2dldF9zZXFpZChxLCBxLT5ub3Jb MF0ucmVhZF9vcGNvZGUpOw0KPiArCS8qIFNldCBkeW5hbWljIExVVCBlbnRyeSBhcyBsdXQgc2Vx dWVuY2UgZm9yIEFIQiBSZWFkIC4gKi8NCj4gKwlzZXFpZCA9IFNFUUlEX0xVVDFfUlVOVElNRTsN Cj4gICAJcXNwaV93cml0ZWwocSwgc2VxaWQgPDwgUVVBRFNQSV9CRkdFTkNSX1NFUUlEX1NISUZU LA0KPiAgIAkJcS0+aW9iYXNlICsgUVVBRFNQSV9CRkdFTkNSKTsNCj4gICB9DQo+IEBAIC03Mjgs NyArNzUwLDYgQEAgc3RhdGljIGludCBmc2xfcXNwaV9ub3Jfc2V0dXAoc3RydWN0IGZzbF9xc3Bp ICpxKQ0KPiAgIAl2b2lkIF9faW9tZW0gKmJhc2UgPSBxLT5pb2Jhc2U7DQo+ICAgCXUzMiByZWc7 DQo+ICAgCWludCByZXQ7DQo+IC0NCj4gICAJLyogZGlzYWJsZSBhbmQgdW5wcmVwYXJlIGNsb2Nr IHRvIGF2b2lkIGdsaXRjaCBwYXNzIHRvIGNvbnRyb2xsZXIgKi8NCj4gICAJZnNsX3FzcGlfY2xr X2Rpc2FibGVfdW5wcmVwKHEpOw0KPiAgIA0KPiBAQCAtNzQ2LDkgKzc2Nyw2IEBAIHN0YXRpYyBp bnQgZnNsX3FzcGlfbm9yX3NldHVwKHN0cnVjdCBmc2xfcXNwaSAqcSkNCj4gICAJCWJhc2UgKyBR VUFEU1BJX01DUik7DQo+ICAgCXVkZWxheSgxKTsNCj4gICANCj4gLQkvKiBJbml0IHRoZSBMVVQg dGFibGUuICovDQo+IC0JZnNsX3FzcGlfaW5pdF9sdXQocSk7DQo+IC0NCj4gICAJLyogRGlzYWJs ZSB0aGUgbW9kdWxlICovDQo+ICAgCXFzcGlfd3JpdGVsKHEsIFFVQURTUElfTUNSX01ESVNfTUFT SyB8IFFVQURTUElfTUNSX1JFU0VSVkVEX01BU0ssDQo+ICAgCQkJYmFzZSArIFFVQURTUElfTUNS KTsNCj4gQEAgLTc5MSw5ICs4MDksNiBAQCBzdGF0aWMgaW50IGZzbF9xc3BpX25vcl9zZXR1cF9s YXN0KHN0cnVjdCBmc2xfcXNwaSAqcSkNCj4gICAJaWYgKHJldCkNCj4gICAJCXJldHVybiByZXQ7 DQo+ICAgDQo+IC0JLyogSW5pdCB0aGUgTFVUIHRhYmxlIGFnYWluLiAqLw0KPiAtCWZzbF9xc3Bp X2luaXRfbHV0KHEpOw0KPiAtDQo+ICAgCS8qIEluaXQgZm9yIEFIQiByZWFkICovDQo+ICAgCWZz bF9xc3BpX2luaXRfYWhiX3JlYWQocSk7DQo+ICAgDQo+IEBAIC04MjAsNiArODM1LDcgQEAgc3Rh dGljIGludCBmc2xfcXNwaV9yZWFkX3JlZyhzdHJ1Y3Qgc3BpX25vciAqbm9yLCB1OCBvcGNvZGUs IHU4ICpidWYsIGludCBsZW4pDQo+ICAgCWludCByZXQ7DQo+ICAgCXN0cnVjdCBmc2xfcXNwaSAq cSA9IG5vci0+cHJpdjsNCj4gICANCj4gKwlmc2xfcXNwaV9wcmVwYXJlX2x1dChub3IsIEZTTF9R U1BJX09QU19SRUFEX1JFRywgb3Bjb2RlKTsNCj4gICAJcmV0ID0gZnNsX3FzcGlfcnVuY21kKHEs IG9wY29kZSwgMCwgbGVuKTsNCj4gICAJaWYgKHJldCkNCj4gICAJCXJldHVybiByZXQ7DQo+IEBA IC04MzQsNiArODUwLDggQEAgc3RhdGljIGludCBmc2xfcXNwaV93cml0ZV9yZWcoc3RydWN0IHNw aV9ub3IgKm5vciwgdTggb3Bjb2RlLCB1OCAqYnVmLCBpbnQgbGVuKQ0KPiAgIAlpbnQgcmV0Ow0K PiAgIA0KPiAgIAlpZiAoIWJ1Zikgew0KPiArCQkvKiBQcmVwYXJlIExVVCBmb3IgV1JJVEVfUkVH IGNtZCB3aXRoIGlucHV0IEJVRiBhcyBOVUxMLiAqLw0KPiArCQlmc2xfcXNwaV9wcmVwYXJlX2x1 dChub3IsIEZTTF9RU1BJX09QU19XUklURV9SRUcsIG9wY29kZSk7DQo+ICAgCQlyZXQgPSBmc2xf cXNwaV9ydW5jbWQocSwgb3Bjb2RlLCAwLCAxKTsNCj4gICAJCWlmIChyZXQpDQo+ICAgCQkJcmV0 dXJuIHJldDsNCj4gQEAgLTg0Miw2ICs4NjAsOCBAQCBzdGF0aWMgaW50IGZzbF9xc3BpX3dyaXRl X3JlZyhzdHJ1Y3Qgc3BpX25vciAqbm9yLCB1OCBvcGNvZGUsIHU4ICpidWYsIGludCBsZW4pDQo+ ICAgCQkJZnNsX3FzcGlfaW52YWxpZChxKTsNCj4gICANCj4gICAJfSBlbHNlIGlmIChsZW4gPiAw KSB7DQo+ICsJCS8qIFByZXBhcmUgTFVUIGZvciBXUklURV9SRUcgY21kIHdpdGggaW5wdXQgQlVG IG5vbi1OVUxMLiAqLw0KPiArCQlmc2xfcXNwaV9wcmVwYXJlX2x1dChub3IsIEZTTF9RU1BJX09Q U19XUklURV9CVUZfUkVHLCBvcGNvZGUpOw0KPiAgIAkJcmV0ID0gZnNsX3FzcGlfbm9yX3dyaXRl KHEsIG5vciwgb3Bjb2RlLCAwLA0KPiAgIAkJCQkJKHUzMiAqKWJ1ZiwgbGVuKTsNCj4gICAJCWlm IChyZXQgPiAwKQ0KPiBAQCAtODU4LDggKzg3OCwxMSBAQCBzdGF0aWMgc3NpemVfdCBmc2xfcXNw aV93cml0ZShzdHJ1Y3Qgc3BpX25vciAqbm9yLCBsb2ZmX3QgdG8sDQo+ICAgCQkJICAgICAgc2l6 ZV90IGxlbiwgY29uc3QgdV9jaGFyICpidWYpDQo+ICAgew0KPiAgIAlzdHJ1Y3QgZnNsX3FzcGkg KnEgPSBub3ItPnByaXY7DQo+IC0Jc3NpemVfdCByZXQgPSBmc2xfcXNwaV9ub3Jfd3JpdGUocSwg bm9yLCBub3ItPnByb2dyYW1fb3Bjb2RlLCB0bywNCj4gLQkJCQkJICh1MzIgKilidWYsIGxlbik7 DQo+ICsJc3NpemVfdCByZXQ7DQo+ICsNCj4gKwlmc2xfcXNwaV9wcmVwYXJlX2x1dChub3IsIEZT TF9RU1BJX09QU19XUklURSwgbm9yLT5wcm9ncmFtX29wY29kZSk7DQo+ICsJcmV0ID0gZnNsX3Fz cGlfbm9yX3dyaXRlKHEsIG5vciwgbm9yLT5wcm9ncmFtX29wY29kZSwgdG8sDQo+ICsJCQkJICh1 MzIgKilidWYsIGxlbik7DQo+ICAgDQo+ICAgCS8qIGludmFsaWQgdGhlIGRhdGEgaW4gdGhlIEFI QiBidWZmZXIuICovDQo+ICAgCWZzbF9xc3BpX2ludmFsaWQocSk7DQo+IEBAIC04NzIsNiArODk1 LDggQEAgc3RhdGljIHNzaXplX3QgZnNsX3FzcGlfcmVhZChzdHJ1Y3Qgc3BpX25vciAqbm9yLCBs b2ZmX3QgZnJvbSwNCj4gICAJc3RydWN0IGZzbF9xc3BpICpxID0gbm9yLT5wcml2Ow0KPiAgIAl1 OCBjbWQgPSBub3ItPnJlYWRfb3Bjb2RlOw0KPiAgIA0KPiArCWZzbF9xc3BpX3ByZXBhcmVfbHV0 KG5vciwgRlNMX1FTUElfT1BTX1JFQUQsIG5vci0+cmVhZF9vcGNvZGUpOw0KPiArDQo+ICAgCS8q IGlmIG5lY2Vzc2FyeSxpb3JlbWFwIGJ1ZmZlciBiZWZvcmUgQUhCIHJlYWQsICovDQo+ICAgCWlm ICghcS0+YWhiX2FkZHIpIHsNCj4gICAJCXEtPm1lbW1hcF9vZmZzID0gcS0+Y2hpcF9iYXNlX2Fk ZHIgKyBmcm9tOw0KPiBAQCAtOTIwLDYgKzk0NSw3IEBAIHN0YXRpYyBpbnQgZnNsX3FzcGlfZXJh c2Uoc3RydWN0IHNwaV9ub3IgKm5vciwgbG9mZl90IG9mZnMpDQo+ICAgCWRldl9kYmcobm9yLT5k ZXYsICIlZEtpQiBhdCAweCUwOHg6MHglMDh4XG4iLA0KPiAgIAkJbm9yLT5tdGQuZXJhc2VzaXpl IC8gMTAyNCwgcS0+Y2hpcF9iYXNlX2FkZHIsICh1MzIpb2Zmcyk7DQo+ICAgDQo+ICsJZnNsX3Fz cGlfcHJlcGFyZV9sdXQobm9yLCBGU0xfUVNQSV9PUFNfRVJBU0UsIG5vci0+ZXJhc2Vfb3Bjb2Rl KTsNCj4gICAJcmV0ID0gZnNsX3FzcGlfcnVuY21kKHEsIG5vci0+ZXJhc2Vfb3Bjb2RlLCBvZmZz LCAwKTsNCj4gICAJaWYgKHJldCkNCj4gICAJCXJldHVybiByZXQ7DQo=