From mboxrd@z Thu Jan 1 00:00:00 1970 From: Subject: Re: [PATCH v2 10/10] spi: atmel-quadspi: add support for sam9x60 qspi controller Date: Fri, 1 Feb 2019 07:07:40 +0000 Message-ID: <947f148d-3fd8-4e7d-4301-9d67715fbf7d@microchip.com> References: <20190131161515.21605-1-tudor.ambarus@microchip.com> <20190131161515.21605-11-tudor.ambarus@microchip.com> <20190131173207.56481a42@bbrezillon> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Cc: , , , , , , , , , , To: Return-path: In-Reply-To: <20190131173207.56481a42@bbrezillon> Content-Language: en-US Content-ID: Sender: linux-kernel-owner@vger.kernel.org List-Id: linux-spi.vger.kernel.org DQoNCk9uIDAxLzMxLzIwMTkgMDY6MzIgUE0sIEJvcmlzIEJyZXppbGxvbiB3cm90ZToNCj4gT24g VGh1LCAzMSBKYW4gMjAxOSAxNjoxNTo1MSArMDAwMA0KPiA8VHVkb3IuQW1iYXJ1c0BtaWNyb2No aXAuY29tPiB3cm90ZToNCj4gDQo+PiBGcm9tOiBUdWRvciBBbWJhcnVzIDx0dWRvci5hbWJhcnVz QG1pY3JvY2hpcC5jb20+DQo+Pg0KPj4gVGhlIHNhbTl4NjAgcXNwaSBjb250cm9sbGVyIHVzZXMg MiBjbG9ja3MsIG9uZSBmb3IgdGhlIHBlcmlwaGVyYWwgcmVnaXN0ZXINCj4+IGFjY2VzcywgdGhl IG90aGVyIGZvciB0aGUgcXNwaSBjb3JlIGFuZCBwaHkuIEJvdGggYXJlIG1hbmRhdG9yeS4gSXQg dXNlcw0KPj4gZGVkaWNhdGVkIHJlZ2lzdGVyIGZvciBSZWFkIEluc3RydWN0aW9uIENvZGUgUmVn aXN0ZXIgKFJJQ1IpIGFuZA0KPj4gV3JpdGUgSW5zdHJ1Y3Rpb24gQ29kZSBSZWdpc3RlciAoV0lD UikuIElDUi9SSUNSL1dJQ1IgaGF2ZSBpZGVudGljYWwNCj4+IGZpZWxkcy4NCj4+DQo+PiBUZXN0 ZWQgd2l0aCBzc3QyNnZmMDY0YiBqZWRlYyxzcGktbm9yIGZsYXNoLiBCYWNrd2FyZCBjb21wYXRp YmlsaXR5IHRlc3QNCj4+IGRvbmUgb24gc2FtYTVkMiBxc3BpIGNvbnRyb2xsZXIgYW5kIG14MjVs MjU2MzVlIGplZGVjLHNwaS1ub3IgZmxhc2guDQo+Pg0KPj4gU2lnbmVkLW9mZi1ieTogVHVkb3Ig QW1iYXJ1cyA8dHVkb3IuYW1iYXJ1c0BtaWNyb2NoaXAuY29tPg0KPj4gLS0tDQo+PiB2MjoNCj4+ IC0gcmV3b3JrIGNsb2NrIGhhbmRsaW5nDQo+PiAtIHJlb3JkZXIgc2V0dGluZyBvZiByZWdpc3Rl ciB2YWx1ZXMgaW4gc2V0X2NmZygpIGNhbGxzIC0+IG1vdmUgZnVuY3Rpb25zDQo+PiAgIHRoYXQg Y2FuIGZhaWwgaW4gdGhlIHVwcGVyIHBhcnQgb2YgdGhlIGZ1bmN0aW9uIGJvZHkuDQo+Pg0KPj4g IGRyaXZlcnMvc3BpL2F0bWVsLXF1YWRzcGkuYyB8IDI5NiArKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKy0tLS0tLS0tLQ0KPj4gIDEgZmlsZSBjaGFuZ2VkLCAyMzkgaW5zZXJ0aW9u cygrKSwgNTcgZGVsZXRpb25zKC0pDQo+Pg0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3BpL2F0 bWVsLXF1YWRzcGkuYyBiL2RyaXZlcnMvc3BpL2F0bWVsLXF1YWRzcGkuYw0KPj4gaW5kZXggZDNl NzZhY2Y4NTE3Li44MGM5MzRmM2U0NzkgMTAwNjQ0DQo+PiAtLS0gYS9kcml2ZXJzL3NwaS9hdG1l bC1xdWFkc3BpLmMNCj4+ICsrKyBiL2RyaXZlcnMvc3BpL2F0bWVsLXF1YWRzcGkuYw0KPj4gQEAg LTE5LDYgKzE5LDcgQEANCj4+ICAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+DQo+PiAgI2luY2x1 ZGUgPGxpbnV4L21vZHVsZS5oPg0KPj4gICNpbmNsdWRlIDxsaW51eC9vZi5oPg0KPj4gKyNpbmNs dWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPg0KPj4gICNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9k ZXZpY2UuaD4NCj4+ICAjaW5jbHVkZSA8bGludXgvc3BpL3NwaS1tZW0uaD4NCj4+ICANCj4+IEBA IC0zNSw3ICszNiw5IEBADQo+PiAgDQo+PiAgI2RlZmluZSBRU1BJX0lBUiAgICAgMHgwMDMwICAv KiBJbnN0cnVjdGlvbiBBZGRyZXNzIFJlZ2lzdGVyICovDQo+PiAgI2RlZmluZSBRU1BJX0lDUiAg ICAgMHgwMDM0ICAvKiBJbnN0cnVjdGlvbiBDb2RlIFJlZ2lzdGVyICovDQo+PiArI2RlZmluZSBR U1BJX1dJQ1IgICAgMHgwMDM0ICAvKiBXcml0ZSBJbnN0cnVjdGlvbiBDb2RlIFJlZ2lzdGVyICov DQo+PiAgI2RlZmluZSBRU1BJX0lGUiAgICAgMHgwMDM4ICAvKiBJbnN0cnVjdGlvbiBGcmFtZSBS ZWdpc3RlciAqLw0KPj4gKyNkZWZpbmUgUVNQSV9SSUNSICAgIDB4MDAzQyAgLyogUmVhZCBJbnN0 cnVjdGlvbiBDb2RlIFJlZ2lzdGVyICovDQo+PiAgDQo+PiAgI2RlZmluZSBRU1BJX1NNUiAgICAg MHgwMDQwICAvKiBTY3JhbWJsaW5nIE1vZGUgUmVnaXN0ZXIgKi8NCj4+ICAjZGVmaW5lIFFTUElf U0tSICAgICAweDAwNDQgIC8qIFNjcmFtYmxpbmcgS2V5IFJlZ2lzdGVyICovDQo+PiBAQCAtODgs NyArOTEsNyBAQA0KPj4gICNkZWZpbmUgUVNQSV9TQ1JfRExZQlNfTUFTSyAgICAgICAgICAgICBH RU5NQVNLKDIzLCAxNikNCj4+ICAjZGVmaW5lIFFTUElfU0NSX0RMWUJTKG4pICAgICAgICAgICAg ICAgKCgobikgPDwgMTYpICYgUVNQSV9TQ1JfRExZQlNfTUFTSykNCj4+ICANCj4+IC0vKiBCaXRm aWVsZHMgaW4gUVNQSV9JQ1IgKEluc3RydWN0aW9uIENvZGUgUmVnaXN0ZXIpICovDQo+PiArLyog Qml0ZmllbGRzIGluIFFTUElfSUNSIChSZWFkL1dyaXRlIEluc3RydWN0aW9uIENvZGUgUmVnaXN0 ZXIpICovDQo+PiAgI2RlZmluZSBRU1BJX0lDUl9JTlNUX01BU0sgICAgICAgICAgICAgIEdFTk1B U0soNywgMCkNCj4+ICAjZGVmaW5lIFFTUElfSUNSX0lOU1QoaW5zdCkgICAgICAgICAgICAgKCgo aW5zdCkgPDwgMCkgJiBRU1BJX0lDUl9JTlNUX01BU0spDQo+PiAgI2RlZmluZSBRU1BJX0lDUl9P UFRfTUFTSyAgICAgICAgICAgICAgIEdFTk1BU0soMjMsIDE2KQ0KPj4gQEAgLTExMyw2ICsxMTYs OCBAQA0KPj4gICNkZWZpbmUgUVNQSV9JRlJfT1BUTF80QklUICAgICAgICAgICAgICAoMiA8PCA4 KQ0KPj4gICNkZWZpbmUgUVNQSV9JRlJfT1BUTF84QklUICAgICAgICAgICAgICAoMyA8PCA4KQ0K Pj4gICNkZWZpbmUgUVNQSV9JRlJfQUREUkwgICAgICAgICAgICAgICAgICBCSVQoMTApDQo+PiAr I2RlZmluZSBRU1BJX0lGUl9URlJUWVBfVFJTRlJfTUVNCUJJVCgxMikNCj4+ICsjZGVmaW5lIFFT UElfSUZSX1RGUlRZUF9UUlNGUl9SRUcJKDAgPDwgMTIpDQo+IA0KPiBZb3UgZG9uJ3QgbmVlZCB0 byBkZWZpbmUgVFJTRlJfUkVHLCBqdXN0IHNldCBRU1BJX0lGUl9URlJUWVBfVFJTRlJfTUVNDQo+ IHdoZW4geW91IGRvIGEgbWVtIHRyYW5zZmVyIGFuZCBkbyBub3RoaW5nIHdoZW4gdGhpcyBpcyBh IHJlZ3VsYXINCj4gdHJhbnNmZXIuDQoNCg0KSSBjaG9zZSB0byBpbnRyb2R1Y2UgbWFjcm9zIHdp dGggemVybyB2YWx1ZSBmb3IgYmV0dGVyIGNvZGUgcmVhZGFiaWxpdHkuIEkgd291bGQNCmV4cGVj dCB0aGF0IHRoZSBOT1Agb3BlcmF0aW9ucyB0byBiZSBvcHRpbWl6ZWQgYXQgY29tcGlsZSB0aW1l LiBJIHdpbGwgcmVtb3ZlIHRoZW0NCmlmIHlvdSBwcmVmZXIsIGl0IHdpbGwgcmVzdWx0IGluIGZl d2VyIGxpbmVzIG9mIGNvZGUuDQoNCj4gDQo+PiAgI2RlZmluZSBRU1BJX0lGUl9URlJUWVBfTUFT SyAgICAgICAgICAgIEdFTk1BU0soMTMsIDEyKQ0KPj4gICNkZWZpbmUgUVNQSV9JRlJfVEZSVFlQ X1RSU0ZSX1JFQUQgICAgICAoMCA8PCAxMikNCj4+ICAjZGVmaW5lIFFTUElfSUZSX1RGUlRZUF9U UlNGUl9SRUFEX01FTSAgKDEgPDwgMTIpDQo+IA0KPiBMb29rcyBsaWtlIHRoZSByZWFkL3dyaXRl IGZsYWcgaXMgb24gYml0IDEzLiBDYW4gd2UganVzdCBhZGQNCg0KZm9yIHNhbWE1ZDIgb25seQ0K DQo+IA0KPiAjZGVmaW5lIFFTUElfSUZSX1RGUlRZUF9UUlNGUl9XUklURQlCSVQoMTMpDQo+IA0K PiBhbmQgZHJvcCBhbGwgb3RoZXJzIGRlZj8gVGhpcyB3YXkgdGhlIGltcGxlbWVudGF0aW9uIGlz IGNvbnNpc3RlbnQNCj4gYmV0d2VlbiBzYW05eDYwIGFuZCBzYW1hNWQyLg0KDQpCSVQoMTMpIGhh cyBubyBtZWFuaW5nIGZvciBzYW05eDYwLiBJIGNhbiBkcm9wIHRoZSBtYWNyb3Mgd2l0aCB6ZXJv IHZhbHVlIGZvcg0Kc2FtYTVkMiBpbiBhIHNlcGFyYXRlIHBhdGNoLg0KDQo+IA0KPj4gQEAgLTEy MSw2ICsxMjYsOCBAQA0KPj4gICNkZWZpbmUgUVNQSV9JRlJfQ1JNICAgICAgICAgICAgICAgICAg ICBCSVQoMTQpDQo+PiAgI2RlZmluZSBRU1BJX0lGUl9OQkRVTV9NQVNLICAgICAgICAgICAgIEdF Tk1BU0soMjAsIDE2KQ0KPj4gICNkZWZpbmUgUVNQSV9JRlJfTkJEVU0obikgICAgICAgICAgICAg ICAoKChuKSA8PCAxNikgJiBRU1BJX0lGUl9OQkRVTV9NQVNLKQ0KPj4gKyNkZWZpbmUgUVNQSV9J RlJfQVBCVEZSVFlQX1dSSVRFCSgwIDw8IDI0KQ0KPiANCj4gQXMgZm9yIHRoZSBvdGhlciBkZWZz LCBJIGRvbid0IHRoaW5rIHlvdSBuZWVkIHRvIGRlZmluZSBfV1JJVEUuDQoNCnVuZGVyc3Rvb2QN Cg0KPiANCj4+ICsjZGVmaW5lIFFTUElfSUZSX0FQQlRGUlRZUF9SRUFECQlCSVQoMjQpDQo+PiAg DQo+PiAgLyogQml0ZmllbGRzIGluIFFTUElfU01SIChTY3JhbWJsaW5nIE1vZGUgUmVnaXN0ZXIp ICovDQo+PiAgI2RlZmluZSBRU1BJX1NNUl9TQ1JFTiAgICAgICAgICAgICAgICAgIEJJVCgwKQ0K Pj4gQEAgLTEzNywxNiArMTQ0LDM3IEBADQo+PiAgI2RlZmluZSBRU1BJX1dQU1JfV1BWU1JDKHNy YykgICAgICAgICAgICgoKHNyYykgPDwgOCkgJiBRU1BJX1dQU1JfV1BWU1JDKQ0KPj4gIA0KPj4g IA0KPj4gKy8qIERlc2NyaWJlcyByZWdpc3RlciB2YWx1ZXMuICovDQo+PiArc3RydWN0IGF0bWVs X3FzcGlfY2ZnIHsNCj4+ICsJdTMyIGljcjsNCj4+ICsJdTMyIGlhcjsNCj4+ICsJdTMyIGlmcjsN Cj4+ICt9Ow0KPj4gKw0KPj4gK3N0cnVjdCBhdG1lbF9xc3BpX2NhcHM7DQo+PiArDQo+PiAgc3Ry dWN0IGF0bWVsX3FzcGkgew0KPj4gIAl2b2lkIF9faW9tZW0JCSpyZWdzOw0KPj4gIAl2b2lkIF9f aW9tZW0JCSptZW07DQo+PiAgCXN0cnVjdCBjbGsJCSpjbGs7DQo+IA0KPiBDYW4gd2UgcmVuYW1l IHRoYXQgb24gcGNsaz8NCg0Kd2lsbCByZW5hbWUgaXQsIHRvZ2V0aGVyIHdpdGggdGhlIHN1cHBv cnQgZm9yIHVubmFtZWQgY2xvY2sgb2Ygc2FtYTVkMiBpbiBhIHNlcGFyYXRlDQpwYXRjaC4gVGhl IGR0LWJpbmRpbmdzIHBhdGNoIHRoYXQgaW1wb3NlcyAicGNsayIgZm9yIHNhbWE1ZDIgc2hvdWxk IGJlIHNlcGFyYXRlZCB0b28uDQoNCj4gDQo+PiArCXN0cnVjdCBjbGsJCSpxc3BpY2s7DQo+PiAg CXN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UJKnBkZXY7DQo+PiArCWNvbnN0IHN0cnVjdCBhdG1lbF9x c3BpX2NhcHMgKmNhcHM7DQo+PiAgCXUzMgkJCXBlbmRpbmc7DQo+PiAgCXUzMgkJCW1yOw0KPj4g IAlzdHJ1Y3QgY29tcGxldGlvbgljbWRfY29tcGxldGlvbjsNCj4+ICB9Ow0KPj4gIA0KPiANCj4g Li4uDQo+IA0KPj4gKw0KPj4gK3N0YXRpYyBpbnQgYXRtZWxfc2FtOXg2MF9xc3BpX3NldF9jZmco dm9pZCBfX2lvbWVtICpiYXNlLA0KPj4gKwkJCQkgICAgICBjb25zdCBzdHJ1Y3Qgc3BpX21lbV9v cCAqb3AsDQo+PiArCQkJCSAgICAgIHN0cnVjdCBhdG1lbF9xc3BpX2NmZyAqY2ZnKQ0KPj4gK3sN Cj4+ICsJaW50IHJldCA9IGF0bWVsX3FzcGlfc2V0X21vZGUoY2ZnLCBvcCk7DQo+PiArDQo+PiAr CWlmIChyZXQpDQo+PiArCQlyZXR1cm4gcmV0Ow0KPj4gKw0KPj4gKwlyZXQgPSBhdG1lbF9xc3Bp X3NldF9hZGRyZXNzX21vZGUoY2ZnLCBvcCk7DQo+PiArCWlmIChyZXQpDQo+PiArCQlyZXR1cm4g cmV0Ow0KPj4gKw0KPj4gKwljZmctPmlmciB8PSBRU1BJX0lGUl9JTlNURU47DQo+PiArCWNmZy0+ aWNyIHw9IFFTUElfSUNSX0lOU1Qob3AtPmNtZC5vcGNvZGUpOw0KPj4gKw0KPj4gKwkvKiBTZXQg ZGF0YSBlbmFibGUgKi8NCj4+ICsJaWYgKG9wLT5kYXRhLm5ieXRlcykNCj4+ICsJCWNmZy0+aWZy IHw9IFFTUElfSUZSX0RBVEFFTjsNCj4+ICsNCj4+ICsJaWYgKCFvcC0+YWRkci5uYnl0ZXMpIHsN Cj4+ICsJCWNmZy0+aWZyIHw9IFFTUElfSUZSX1RGUlRZUF9UUlNGUl9SRUc7DQo+PiArCQlpZiAo b3AtPmRhdGEuZGlyID09IFNQSV9NRU1fREFUQV9PVVQpDQo+PiArCQkJY2ZnLT5pZnIgfD0gUVNQ SV9JRlJfQVBCVEZSVFlQX1dSSVRFOw0KPj4gKwkJZWxzZQ0KPj4gKwkJCWNmZy0+aWZyIHw9IFFT UElfSUZSX0FQQlRGUlRZUF9SRUFEOw0KPj4gKwl9IGVsc2Ugew0KPj4gKwkJY2ZnLT5pZnIgfD0g UVNQSV9JRlJfVEZSVFlQX1RSU0ZSX01FTTsNCj4gDQo+IENhbiB5b3UgdHJ5IGRvaW5nIG9ubHkg cmVndWxhciB0cmFuc2ZlcnMgYW5kIGxldCBtZSBrbm93IGlmIGl0IHN0aWxsDQo+IHdvcmtzLiBT dXBwb3J0IGZvciBtZW0gdHJhbnNmZXJzIGNhbiB0aGVuIGJlIGFkZGVkIGFsb25nIHdpdGggZGly bWFwDQo+IHN1cHBvcnQuDQoNCnNob3VsZCB3b3JrLiBXaWxsIHRyeSBhbmQgbGV0IHlvdSBrbm93 Lg0KDQo+IA0KPj4gKwl9DQo+PiAgDQo+PiAgCS8qIENsZWFyIHBlbmRpbmcgaW50ZXJydXB0cyAq Lw0KPj4gIAkodm9pZClyZWFkbF9yZWxheGVkKGJhc2UgKyBRU1BJX1NSKTsNCj4+ICANCj4+ICAJ LyogU2V0IFFTUEkgSW5zdHJ1Y3Rpb24gRnJhbWUgcmVnaXN0ZXJzICovDQo+PiAtCXdyaXRlbF9y ZWxheGVkKGlhciwgYmFzZSArIFFTUElfSUFSKTsNCj4+IC0Jd3JpdGVsX3JlbGF4ZWQoaWNyLCBi YXNlICsgUVNQSV9JQ1IpOw0KPj4gLQl3cml0ZWxfcmVsYXhlZChpZnIsIGJhc2UgKyBRU1BJX0lG Uik7DQo+PiArCXdyaXRlbF9yZWxheGVkKGNmZy0+aWFyLCBiYXNlICsgUVNQSV9JQVIpOw0KPj4g KwlpZiAob3AtPmRhdGEuZGlyID09IFNQSV9NRU1fREFUQV9PVVQpDQo+PiArCQl3cml0ZWxfcmVs YXhlZChjZmctPmljciwgYmFzZSArIFFTUElfSUNSKTsNCj4+ICsJZWxzZQ0KPj4gKwkJd3JpdGVs X3JlbGF4ZWQoY2ZnLT5pY3IsIGJhc2UgKyBRU1BJX1JJQ1IpOw0KPj4gKwl3cml0ZWxfcmVsYXhl ZChjZmctPmlmciwgYmFzZSArIFFTUElfSUZSKTsNCj4+ICsNCj4+ICsJcmV0dXJuIDA7DQo+PiAr fQ0KPj4gKw0KPiANCj4gLi4uDQo+IA0KPj4gQEAgLTQ0MywzMiArNTc4LDUyIEBAIHN0YXRpYyBp bnQgYXRtZWxfcXNwaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQ0KPj4gIAkv KiBFbmFibGUgdGhlIHBlcmlwaGVyYWwgY2xvY2sgKi8NCj4+ICAJZXJyID0gY2xrX3ByZXBhcmVf ZW5hYmxlKGFxLT5jbGspOw0KPj4gIAlpZiAoZXJyKSB7DQo+PiAtCQlkZXZfZXJyKCZwZGV2LT5k ZXYsICJmYWlsZWQgdG8gZW5hYmxlIHRoZSBwZXJpcGhlcmFsIGNsb2NrXG4iKTsNCj4+ICsJCWRl dl9lcnIoZGV2LCAiZmFpbGVkIHRvIGVuYWJsZSB0aGUgcGVyaXBoZXJhbCBjbG9ja1xuIik7DQo+ PiAgCQlnb3RvIGV4aXQ7DQo+PiAgCX0NCj4+ICANCj4+ICsJaWYgKGNhcHMtPmhhc19xc3BpY2sp IHsNCj4+ICsJCS8qIEdldCB0aGUgUVNQSSBzeXN0ZW0gY2xvY2sgKi8NCj4+ICsJCWFxLT5xc3Bp Y2sgPSBkZXZtX2Nsa19nZXQoZGV2LCAicXNwaWNrIik7DQo+PiArCQlpZiAoSVNfRVJSKGFxLT5x c3BpY2spKSB7DQo+PiArCQkJZGV2X2VycihkZXYsICJtaXNzaW5nIHN5c3RlbSBjbG9ja1xuIik7 DQo+PiArCQkJZXJyID0gUFRSX0VSUihhcS0+cXNwaWNrKTsNCj4+ICsJCQlnb3RvIGRpc2FibGVf Y2xrOw0KPj4gKwkJfQ0KPj4gKw0KPj4gKwkJLyogRW5hYmxlIHRoZSBRU1BJIHN5c3RlbSBjbG9j ayAqLw0KPj4gKwkJZXJyID0gY2xrX3ByZXBhcmVfZW5hYmxlKGFxLT5xc3BpY2spOw0KPj4gKwkJ aWYgKGVycikgew0KPj4gKwkJCWRldl9lcnIoZGV2LA0KPj4gKwkJCQkiZmFpbGVkIHRvIGVuYWJs ZSB0aGUgUVNQSSBzeXN0ZW0gY2xvY2tcbiIpOw0KPj4gKwkJCWdvdG8gZGlzYWJsZV9jbGs7DQo+ PiArCQl9DQo+PiArCX0NCj4+ICsNCj4+ICAJLyogUmVxdWVzdCB0aGUgSVJRICovDQo+PiAgCWly cSA9IHBsYXRmb3JtX2dldF9pcnEocGRldiwgMCk7DQo+PiAgCWlmIChpcnEgPCAwKSB7DQo+PiAt CQlkZXZfZXJyKCZwZGV2LT5kZXYsICJtaXNzaW5nIElSUVxuIik7DQo+PiArCQlkZXZfZXJyKGRl diwgIm1pc3NpbmcgSVJRXG4iKTsNCj4+ICAJCWVyciA9IGlycTsNCj4+IC0JCWdvdG8gZGlzYWJs ZV9jbGs7DQo+PiArCQlnb3RvIGRpc2FibGVfcXNwaWNrOw0KPj4gIAl9DQo+PiAtCWVyciA9IGRl dm1fcmVxdWVzdF9pcnEoJnBkZXYtPmRldiwgaXJxLCBhdG1lbF9xc3BpX2ludGVycnVwdCwNCj4+ IC0JCQkgICAgICAgMCwgZGV2X25hbWUoJnBkZXYtPmRldiksIGFxKTsNCj4+ICsJZXJyID0gZGV2 bV9yZXF1ZXN0X2lycShkZXYsIGlycSwgYXRtZWxfcXNwaV9pbnRlcnJ1cHQsIDAsDQo+PiArCQkJ ICAgICAgIGRldl9uYW1lKGRldiksIGFxKTsNCj4+ICAJaWYgKGVycikNCj4+IC0JCWdvdG8gZGlz YWJsZV9jbGs7DQo+PiArCQlnb3RvIGRpc2FibGVfcXNwaWNrOw0KPj4gIA0KPj4gIAllcnIgPSBh dG1lbF9xc3BpX2luaXQoYXEpOw0KPj4gIAlpZiAoZXJyKQ0KPj4gLQkJZ290byBkaXNhYmxlX2Ns azsNCj4+ICsJCWdvdG8gZGlzYWJsZV9xc3BpY2s7DQo+PiAgDQo+PiAgCWVyciA9IHNwaV9yZWdp c3Rlcl9jb250cm9sbGVyKGN0cmwpOw0KPj4gIAlpZiAoZXJyKQ0KPj4gLQkJZ290byBkaXNhYmxl X2NsazsNCj4+ICsJCWdvdG8gZGlzYWJsZV9xc3BpY2s7DQo+PiAgDQo+PiAgCXJldHVybiAwOw0K Pj4gIA0KPj4gK2Rpc2FibGVfcXNwaWNrOg0KPj4gKwljbGtfZGlzYWJsZV91bnByZXBhcmUoYXEt PnFzcGljayk7DQo+PiAgZGlzYWJsZV9jbGs6DQo+IA0KPiBXZSBzaG91bGQgcHJvYmFibHkgcmVu YW1lIHRoaXMgbGFiZWwgZGlzYWJsZV9wY2xrLg0KDQpzdXJlLiBUaGFua3MsIEJvcmlzIQ0KDQo+ IA0KPj4gIAljbGtfZGlzYWJsZV91bnByZXBhcmUoYXEtPmNsayk7DQo+PiAgZXhpdDoNCj4gDQo=