From mboxrd@z Thu Jan 1 00:00:00 1970 From: Miquel Raynal Subject: Re: [PATCH v3 10/17] irqchip/irq-mvebu-sei: add new driver for Marvell SEI Date: Fri, 29 Jun 2018 14:41:46 +0200 Message-ID: <20180629144146.50bd2d82@xps13> References: <20180622151432.1566-1-miquel.raynal@bootlin.com> <20180622151432.1566-11-miquel.raynal@bootlin.com> <24fc35a0-20c5-69fd-b098-422c5b539bd4@arm.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <24fc35a0-20c5-69fd-b098-422c5b539bd4@arm.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=m.gmane.org@lists.infradead.org To: Marc Zyngier Cc: Mark Rutland , Andrew Lunn , Jason Cooper , devicetree@vger.kernel.org, Antoine Tenart , Catalin Marinas , Gregory Clement , Haim Boot , Will Deacon , Maxime Chevallier , Nadav Haklai , Rob Herring , Thomas Petazzoni , Thomas Gleixner , Hanna Hawa , linux-arm-kernel@lists.infradead.org, Sebastian Hesselbarth List-Id: devicetree@vger.kernel.org SGkgTWFyYywKCk1hcmMgWnluZ2llciA8bWFyYy56eW5naWVyQGFybS5jb20+IHdyb3RlIG9uIFRo dSwgMjggSnVuIDIwMTggMTU6NTQ6MzAKKzAxMDA6Cgo+IE9uIDIyLzA2LzE4IDE2OjE0LCBNaXF1 ZWwgUmF5bmFsIHdyb3RlOgo+ID4gVGhpcyBpcyBhIGNhc2NhZGVkIGludGVycnVwdCBjb250cm9s bGVyIGluIHRoZSBBUDgwNiBHSUMgdGhhdCBjb2xsYXBzZXMKPiA+IFNFSXMgKFN5c3RlbSBFcnJv ciBJbnRlcnJ1cHQpIGNvbWluZyBmcm9tIHRoZSBBUCBhbmQgdGhlIENQcyAodGhyb3VnaAo+ID4g dGhlIElDVSkuCj4gPiAKPiA+IFRoZSBTRUkgaGFuZGxlcyB1cCB0byA2NCBpbnRlcnJ1cHRzLiBU aGUgZmlyc3QgMjEgaW50ZXJydXB0cyBhcmUgd2lyZWQKPiA+IGZyb20gdGhlIEFQLiBUaGUgbmV4 dCA0MyBpbnRlcnJ1cHRzIGFyZSBmcm9tIHRoZSBDUHMgYW5kIGFyZSB0cmlnZ2VyZWQKPiA+IHRo cm91Z2ggTVNJIG1lc3NhZ2VzLiBUbyBoYW5kbGUgdGhpcyBjb21wbGV4aXR5LCB0aGUgZHJpdmVy IGhhcyB0bwo+ID4gZGVjbGFyZSB0byB0aGUgdXBwZXIgbGF5ZXI6IG9uZSBJUlEgZG9tYWluIGZv ciB0aGUgd2lyZWQgaW50ZXJydXB0cywKPiA+IG9uZSBJUlEgZG9tYWluIGZvciB0aGUgTVNJczsg YW5kIGFjdHMgYXMgYSBNU0kgY29udHJvbGxlciAoJ3BhcmVudCcpCj4gPiBieSBkZWNsYXJpbmcg YW4gTVNJIGRvbWFpbi4KPiA+IAo+ID4gU3VnZ2VzdGVkLWJ5OiBIYWltIEJvb3QgPGhheWltQG1h cnZlbGwuY29tPgo+ID4gU2lnbmVkLW9mZi1ieTogTWlxdWVsIFJheW5hbCA8bWlxdWVsLnJheW5h bEBib290bGluLmNvbT4KPiA+IC0tLQo+ID4gIGRyaXZlcnMvaXJxY2hpcC9LY29uZmlnICAgICAg ICAgfCAgIDMgKwo+ID4gIGRyaXZlcnMvaXJxY2hpcC9NYWtlZmlsZSAgICAgICAgfCAgIDEgKwo+ ID4gIGRyaXZlcnMvaXJxY2hpcC9pcnEtbXZlYnUtc2VpLmMgfCA0NDQgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwo+ID4gIDMgZmlsZXMgY2hhbmdlZCwgNDQ4IGluc2Vy dGlvbnMoKykKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9pcnFjaGlwL2lycS1tdmVi dS1zZWkuYwo+ID4gCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9pcnFjaGlwL0tjb25maWcgYi9k cml2ZXJzL2lycWNoaXAvS2NvbmZpZwo+ID4gaW5kZXggZTkyMzNkYjE2ZTAzLi45MjJlMmE5MTlj ZjMgMTAwNjQ0Cj4gPiAtLS0gYS9kcml2ZXJzL2lycWNoaXAvS2NvbmZpZwo+ID4gKysrIGIvZHJp dmVycy9pcnFjaGlwL0tjb25maWcKPiA+IEBAIC0zMTAsNiArMzEwLDkgQEAgY29uZmlnIE1WRUJV X09ETUkKPiA+ICBjb25maWcgTVZFQlVfUElDCj4gPiAgCWJvb2wKPiA+ICAKPiA+ICtjb25maWcg TVZFQlVfU0VJCj4gPiArICAgICAgICBib29sCj4gPiArCj4gPiAgY29uZmlnIExTX1NDRkdfTVNJ Cj4gPiAgCWRlZl9ib29sIHkgaWYgU09DX0xTMTAyMUEgfHwgQVJDSF9MQVlFUlNDQVBFCj4gPiAg CWRlcGVuZHMgb24gUENJICYmIFBDSV9NU0kKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2lycWNo aXAvTWFrZWZpbGUgYi9kcml2ZXJzL2lycWNoaXAvTWFrZWZpbGUKPiA+IGluZGV4IDE1ZjI2OGY2 NDZiZi4uNjlkMmNjYjQ1NGVmIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9pcnFjaGlwL01ha2Vm aWxlCj4gPiArKysgYi9kcml2ZXJzL2lycWNoaXAvTWFrZWZpbGUKPiA+IEBAIC03Niw2ICs3Niw3 IEBAIG9iai0kKENPTkZJR19NVkVCVV9HSUNQKQkJKz0gaXJxLW12ZWJ1LWdpY3Aubwo+ID4gIG9i ai0kKENPTkZJR19NVkVCVV9JQ1UpCQkJKz0gaXJxLW12ZWJ1LWljdS5vCj4gPiAgb2JqLSQoQ09O RklHX01WRUJVX09ETUkpCQkrPSBpcnEtbXZlYnUtb2RtaS5vCj4gPiAgb2JqLSQoQ09ORklHX01W RUJVX1BJQykJCQkrPSBpcnEtbXZlYnUtcGljLm8KPiA+ICtvYmotJChDT05GSUdfTVZFQlVfU0VJ KQkJCSs9IGlycS1tdmVidS1zZWkubwo+ID4gIG9iai0kKENPTkZJR19MU19TQ0ZHX01TSSkJCSs9 IGlycS1scy1zY2ZnLW1zaS5vCj4gPiAgb2JqLSQoQ09ORklHX0VaTlBTX0dJQykJCQkrPSBpcnEt ZXpucHMubwo+ID4gIG9iai0kKENPTkZJR19BUkNIX0FTUEVFRCkJCSs9IGlycS1hc3BlZWQtdmlj Lm8gaXJxLWFzcGVlZC1pMmMtaWMubwo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvaXJxY2hpcC9p cnEtbXZlYnUtc2VpLmMgYi9kcml2ZXJzL2lycWNoaXAvaXJxLW12ZWJ1LXNlaS5jCj4gPiBuZXcg ZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMDAwMDAwLi40YTYyY2QyMzg1ZDcKPiA+ IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvaXJxY2hpcC9pcnEtbXZlYnUtc2VpLmMK PiA+IEBAIC0wLDAgKzEsNDQ0IEBACj4gPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQ TC0yLjAKPiA+ICsKPiA+ICsjZGVmaW5lIHByX2ZtdChmbXQpICJtdmVidS1zZWk6ICIgZm10Cj4g PiArCj4gPiArI2luY2x1ZGUgPGxpbnV4L2lycS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9pbnRl cnJ1cHQuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvaXJxY2hpcC9jaGFpbmVkX2lycS5oPgo+ID4g KyNpbmNsdWRlIDxsaW51eC9pcnFkb21haW4uaD4KPiA+ICsjaW5jbHVkZSA8bGludXgva2VybmVs Lmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX2FkZHJlc3MuaD4KPiA+ICsjaW5jbHVkZSA8bGlu dXgvb2ZfaXJxLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+Cj4gPiArI2lu Y2x1ZGUgPGxpbnV4L21zaS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2Uu aD4KPiA+ICsjaW5jbHVkZSA8bGludXgvaXJxY2hpcC5oPgo+ID4gKwo+ID4gKyNpbmNsdWRlIDxk dC1iaW5kaW5ncy9pbnRlcnJ1cHQtY29udHJvbGxlci9hcm0tZ2ljLmg+Cj4gPiArCj4gPiArLyog Q2F1c2UgcmVnaXN0ZXIgKi8KPiA+ICsjZGVmaW5lIEdJQ1BfU0VDUihpZHgpCQkoMHgwICArICgo aWR4KSAqIDB4NCkpCj4gPiArLyogTWFzayByZWdpc3RlciAqLwo+ID4gKyNkZWZpbmUgR0lDUF9T RU1SKGlkeCkJCSgweDIwICsgKChpZHgpICogMHg0KSkKPiA+ICsjZGVmaW5lIEdJQ1BfU0VUX1NF SV9PRkZTRVQJMHgzMAo+ID4gKwo+ID4gKyNkZWZpbmUgU0VJX0lSUV9DT1VOVF9QRVJfUkVHCTMy Cj4gPiArI2RlZmluZSBTRUlfSVJRX1JFR19DT1VOVAkyCj4gPiArI2RlZmluZSBTRUlfSVJRX0NP VU5UCQkoU0VJX0lSUV9DT1VOVF9QRVJfUkVHICogU0VJX0lSUV9SRUdfQ09VTlQpCj4gPiArI2Rl ZmluZSBTRUlfSVJRX1JFR19JRFgoaXJxX2lkKQkoKGlycV9pZCkgLyBTRUlfSVJRX0NPVU5UX1BF Ul9SRUcpCj4gPiArI2RlZmluZSBTRUlfSVJRX1JFR19CSVQoaXJxX2lkKQkoKGlycV9pZCkgJSBT RUlfSVJRX0NPVU5UX1BFUl9SRUcpCj4gPiArCj4gPiArc3RydWN0IG12ZWJ1X3NlaV9pbnRlcnJ1 cHRfcmFuZ2Ugewo+ID4gKwl1MzIgZmlyc3Q7Cj4gPiArCXUzMiBudW1iZXI7ICAKPiAKPiBuaXQ6 IG51bWJlciBpcyBhIGJpdCB2YWd1ZS4gY29uc2lkZXIgdXNpbmcgc2l6ZSAob3IgYW55dGhpbmcg c2ltaWxhcikuCgpBY2suCgo+IAo+ID4gK307Cj4gPiArCj4gPiArc3RydWN0IG12ZWJ1X3NlaSB7 Cj4gPiArCXN0cnVjdCBkZXZpY2UgKmRldjsKPiA+ICsJdm9pZCBfX2lvbWVtICpiYXNlOwo+ID4g KwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKPiA+ICsJc3RydWN0IGlycV9kb21haW4gKmFwX2RvbWFp bjsKPiA+ICsJc3RydWN0IGlycV9kb21haW4gKmNwX2RvbWFpbjsKPiA+ICsJc3RydWN0IG12ZWJ1 X3NlaV9pbnRlcnJ1cHRfcmFuZ2UgYXBfaW50ZXJydXB0czsKPiA+ICsJc3RydWN0IG12ZWJ1X3Nl aV9pbnRlcnJ1cHRfcmFuZ2UgY3BfaW50ZXJydXB0czsKPiA+ICsJLyogTG9jayBvbiBNU0kgYWxs b2NhdGlvbnMvcmVsZWFzZXMgKi8KPiA+ICsJc3RydWN0IG11dGV4IGNwX21zaV9sb2NrOwo+ID4g KwlERUNMQVJFX0JJVE1BUChjcF9tc2lfYml0bWFwLCBTRUlfSVJRX0NPVU5UKTsKPiA+ICt9Owo+ ID4gKwo+ID4gK3N0YXRpYyBpbnQgbXZlYnVfc2VpX2RvbWFpbl90b19zZWlfaXJxKHN0cnVjdCBt dmVidV9zZWkgKnNlaSwKPiA+ICsJCQkJICAgICAgIHN0cnVjdCBpcnFfZG9tYWluICpkb21haW4s Cj4gPiArCQkJCSAgICAgICBpcnFfaHdfbnVtYmVyX3QgaHdpcnEpCj4gPiArewo+ID4gKwlpZiAo ZG9tYWluID09IHNlaS0+YXBfZG9tYWluKQo+ID4gKwkJcmV0dXJuIHNlaS0+YXBfaW50ZXJydXB0 cy5maXJzdCArIGh3aXJxOwo+ID4gKwllbHNlCj4gPiArCQlyZXR1cm4gc2VpLT5jcF9pbnRlcnJ1 cHRzLmZpcnN0ICsgaHdpcnE7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyB2b2lkIG12ZWJ1X3Nl aV9yZXNldChzdHJ1Y3QgbXZlYnVfc2VpICpzZWkpCj4gPiArewo+ID4gKwl1MzIgcmVnX2lkeDsK PiA+ICsKPiA+ICsJLyogQ2xlYXIgSVJRIGNhdXNlIHJlZ2lzdGVycyAqLwo+ID4gKwlmb3IgKHJl Z19pZHggPSAwOyByZWdfaWR4IDwgU0VJX0lSUV9SRUdfQ09VTlQ7IHJlZ19pZHgrKykKPiA+ICsJ CXdyaXRlbCgweEZGRkZGRkZGLCBzZWktPmJhc2UgKyBHSUNQX1NFQ1IocmVnX2lkeCkpOwo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgdm9pZCBtdmVidV9zZWlfbWFza19pcnEoc3RydWN0IGlycV9k YXRhICpkKQo+ID4gK3sKPiA+ICsJc3RydWN0IG12ZWJ1X3NlaSAqc2VpID0gaXJxX2RhdGFfZ2V0 X2lycV9jaGlwX2RhdGEoZCk7Cj4gPiArCXUzMiBzZWlfaXJxID0gbXZlYnVfc2VpX2RvbWFpbl90 b19zZWlfaXJxKHNlaSwgZC0+ZG9tYWluLCBkLT5od2lycSk7Cj4gPiArCXUzMiByZWdfaWR4ID0g U0VJX0lSUV9SRUdfSURYKHNlaV9pcnEpOwo+ID4gKwl1MzIgcmVnOwo+ID4gKwo+ID4gKwkvKiAx IGRpc2FibGVzIHRoZSBpbnRlcnJ1cHQgKi8KPiA+ICsJcmVnID0gcmVhZGwoc2VpLT5iYXNlICsg R0lDUF9TRU1SKHJlZ19pZHgpKTsKPiA+ICsJcmVnIHw9IEJJVChTRUlfSVJRX1JFR19CSVQoc2Vp X2lycSkpOwo+ID4gKwl3cml0ZWwocmVnLCBzZWktPmJhc2UgKyBHSUNQX1NFTVIocmVnX2lkeCkp OyAgCj4gCj4gQ29uc2lkZXIgdXNpbmcgX3JlbGF4ZWQgYWNjZXNzb3JzLCB1bmxlc3MgdGhpcyBy ZWxpZXMgb24gb3JkZXJpbmcgd2l0aAo+IG90aGVyIG1lbW9yeSBhY2Nlc3NlcyAoSSByZWFsbHkg ZG9uJ3QgdGhpbmsgaXQgZG9lcykuCgpJIGRvbid0IHRoaW5rIGl0IGRvZXMgbmVpdGhlciwgSSBq dXN0IGZvcmdvdCBhYm91dCB0aGUgX3JlbGF4ZWQKdmFyaWFudHMuIEkgd2lsbCB1cGRhdGUgZm9y IGFsbCByZWdpc3RlciByZWFkcy93cml0ZXMuCgo+IAo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMg dm9pZCBtdmVidV9zZWlfdW5tYXNrX2lycShzdHJ1Y3QgaXJxX2RhdGEgKmQpCj4gPiArewo+ID4g KwlzdHJ1Y3QgbXZlYnVfc2VpICpzZWkgPSBpcnFfZGF0YV9nZXRfaXJxX2NoaXBfZGF0YShkKTsK PiA+ICsJdTMyIHNlaV9pcnEgPSBtdmVidV9zZWlfZG9tYWluX3RvX3NlaV9pcnEoc2VpLCBkLT5k b21haW4sIGQtPmh3aXJxKTsKPiA+ICsJdTMyIHJlZ19pZHggPSBTRUlfSVJRX1JFR19JRFgoc2Vp X2lycSk7Cj4gPiArCXUzMiByZWc7Cj4gPiArCj4gPiArCS8qIDAgZW5hYmxlcyB0aGUgaW50ZXJy dXB0ICovCj4gPiArCXJlZyA9IHJlYWRsKHNlaS0+YmFzZSArIEdJQ1BfU0VNUihyZWdfaWR4KSk7 Cj4gPiArCXJlZyAmPSB+QklUKFNFSV9JUlFfUkVHX0JJVChzZWlfaXJxKSk7Cj4gPiArCXdyaXRl bChyZWcsIHNlaS0+YmFzZSArIEdJQ1BfU0VNUihyZWdfaWR4KSk7Cj4gPiArfQo+ID4gKwo+ID4g K3N0YXRpYyB2b2lkIG12ZWJ1X3NlaV9jb21wb3NlX21zaV9tc2coc3RydWN0IGlycV9kYXRhICpk YXRhLAo+ID4gKwkJCQkgICAgICBzdHJ1Y3QgbXNpX21zZyAqbXNnKQo+ID4gK3sKPiA+ICsJc3Ry dWN0IG12ZWJ1X3NlaSAqc2VpID0gZGF0YS0+Y2hpcF9kYXRhOwo+ID4gKwlwaHlzX2FkZHJfdCBz ZXQgPSBzZWktPnJlcy0+c3RhcnQgKyBHSUNQX1NFVF9TRUlfT0ZGU0VUOwo+ID4gKwo+ID4gKwlt c2ctPmRhdGEgPSBtdmVidV9zZWlfZG9tYWluX3RvX3NlaV9pcnEoc2VpLCBkYXRhLT5kb21haW4s IGRhdGEtPmh3aXJxKTsKPiA+ICsJbXNnLT5hZGRyZXNzX2xvID0gbG93ZXJfMzJfYml0cyhzZXQp Owo+ID4gKwltc2ctPmFkZHJlc3NfaGkgPSB1cHBlcl8zMl9iaXRzKHNldCk7Cj4gPiArfQo+ID4g Kwo+ID4gK3N0YXRpYyBpbnQgbXZlYnVfc2VpX2FwX3NldF90eXBlKHN0cnVjdCBpcnFfZGF0YSAq ZGF0YSwgdW5zaWduZWQgaW50IHR5cGUpCj4gPiArewo+ID4gKwlpZiAoISh0eXBlICYgSVJRX1RZ UEVfTEVWRUxfSElHSCkpCj4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ICsKPiA+ICsJcmV0dXJu IDA7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgbXZlYnVfc2VpX2NwX3NldF90eXBlKHN0 cnVjdCBpcnFfZGF0YSAqZGF0YSwgdW5zaWduZWQgaW50IHR5cGUpCj4gPiArewo+ID4gKwlpZiAo ISh0eXBlICYgSVJRX1RZUEVfRURHRV9SSVNJTkcpKQo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4g PiArCj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0IGlycV9j aGlwIG12ZWJ1X3NlaV9hcF93aXJlZF9pcnFfY2hpcCA9IHsKPiA+ICsJLm5hbWUJCQk9ICJBUCB3 aXJlZCBTRUkiLAo+ID4gKwkuaXJxX21hc2sJCT0gbXZlYnVfc2VpX21hc2tfaXJxLAo+ID4gKwku aXJxX3VubWFzawkJPSBtdmVidV9zZWlfdW5tYXNrX2lycSwKPiA+ICsJLmlycV9lb2kJCT0gaXJx X2NoaXBfZW9pX3BhcmVudCwKPiA+ICsJLmlycV9zZXRfYWZmaW5pdHkJPSBpcnFfY2hpcF9zZXRf YWZmaW5pdHlfcGFyZW50LAo+ID4gKwkuaXJxX3NldF90eXBlCQk9IG12ZWJ1X3NlaV9hcF9zZXRf dHlwZSwKPiA+ICt9Owo+ID4gKwo+ID4gK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXZlYnVfc2Vp X2NwX21zaV9pcnFfY2hpcCA9IHsKPiA+ICsJLm5hbWUJCQk9ICJDUCBNU0kgU0VJIiwKPiA+ICsJ LmlycV9tYXNrCQk9IG12ZWJ1X3NlaV9tYXNrX2lycSwKPiA+ICsJLmlycV91bm1hc2sJCT0gbXZl YnVfc2VpX3VubWFza19pcnEsCj4gPiArCS5pcnFfZW9pCQk9IGlycV9jaGlwX2VvaV9wYXJlbnQs Cj4gPiArCS5pcnFfc2V0X2FmZmluaXR5CT0gaXJxX2NoaXBfc2V0X2FmZmluaXR5X3BhcmVudCwK PiA+ICsJLmlycV9zZXRfdHlwZQkJPSBtdmVidV9zZWlfY3Bfc2V0X3R5cGUsCj4gPiArCS5pcnFf Y29tcG9zZV9tc2lfbXNnCT0gbXZlYnVfc2VpX2NvbXBvc2VfbXNpX21zZywKPiA+ICt9Owo+ID4g Kwo+ID4gK3N0YXRpYyBpbnQgbXZlYnVfc2VpX2lycV9kb21haW5fYWxsb2Moc3RydWN0IGlycV9k b21haW4gKmRvbWFpbiwKPiA+ICsJCQkJICAgICAgdW5zaWduZWQgaW50IHZpcnEsIHVuc2lnbmVk IGludCBucl9pcnFzLAo+ID4gKwkJCQkgICAgICB2b2lkICphcmdzKQo+ID4gK3sKPiA+ICsJc3Ry dWN0IG12ZWJ1X3NlaSAqc2VpID0gZG9tYWluLT5ob3N0X2RhdGE7Cj4gPiArCXN0cnVjdCBpcnFf ZndzcGVjICpmd3NwZWMgPSBhcmdzOwo+ID4gKwlzdHJ1Y3QgaXJxX2NoaXAgKmlycV9jaGlwOwo+ ID4gKwlpbnQgc2VpX2h3aXJxLCBod2lycTsKPiA+ICsJaW50IHJldDsKPiA+ICsKPiA+ICsJLyog VGhlIHNvZnR3YXJlIG9ubHkgc3VwcG9ydHMgc2luZ2xlIGFsbG9jYXRpb25zIGZvciBub3cgKi8K PiA+ICsJaWYgKG5yX2lycXMgIT0gMSkKPiA+ICsJCXJldHVybiAtRU5PVFNVUFA7Cj4gPiArCj4g PiArCWlmIChkb21haW4gPT0gc2VpLT5hcF9kb21haW4pIHsKPiA+ICsJCWlycV9jaGlwID0gJm12 ZWJ1X3NlaV9hcF93aXJlZF9pcnFfY2hpcDsKPiA+ICsJCWh3aXJxID0gZndzcGVjLT5wYXJhbVsw XTsKPiA+ICsJfSBlbHNlIHsKPiA+ICsJCWlycV9jaGlwID0gJm12ZWJ1X3NlaV9jcF9tc2lfaXJx X2NoaXA7Cj4gPiArCQltdXRleF9sb2NrKCZzZWktPmNwX21zaV9sb2NrKTsKPiA+ICsJCWh3aXJx ID0gYml0bWFwX2ZpbmRfZnJlZV9yZWdpb24oc2VpLT5jcF9tc2lfYml0bWFwLAo+ID4gKwkJCQkJ CXNlaS0+Y3BfaW50ZXJydXB0cy5udW1iZXIsIDApOwo+ID4gKwkJbXV0ZXhfdW5sb2NrKCZzZWkt PmNwX21zaV9sb2NrKTsKPiA+ICsJCWlmIChod2lycSA8IDApCj4gPiArCQkJcmV0dXJuIC1FTk9T UEM7Cj4gPiArCX0KPiA+ICsKPiA+ICsJc2VpX2h3aXJxID0gbXZlYnVfc2VpX2RvbWFpbl90b19z ZWlfaXJxKHNlaSwgZG9tYWluLCBod2lycSk7Cj4gPiArCj4gPiArCWZ3c3BlYy0+Zndub2RlID0g ZG9tYWluLT5wYXJlbnQtPmZ3bm9kZTsKPiA+ICsJZndzcGVjLT5wYXJhbV9jb3VudCA9IDM7Cj4g PiArCWZ3c3BlYy0+cGFyYW1bMF0gPSBHSUNfU1BJOwo+ID4gKwlmd3NwZWMtPnBhcmFtWzFdID0g c2VpX2h3aXJxOwo+ID4gKwlmd3NwZWMtPnBhcmFtWzJdID0gSVJRX1RZUEVfRURHRV9SSVNJTkc7 Cj4gPiArCj4gPiArCXJldCA9IGlycV9kb21haW5fYWxsb2NfaXJxc19wYXJlbnQoZG9tYWluLCB2 aXJxLCBucl9pcnFzLCBmd3NwZWMpOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJZ290byByZWxlYXNl X3JlZ2lvbjsKPiA+ICsKPiA+ICsJcmV0ID0gaXJxX2RvbWFpbl9zZXRfaHdpcnFfYW5kX2NoaXAo ZG9tYWluLCB2aXJxLCBod2lycSwgaXJxX2NoaXAsIHNlaSk7Cj4gPiArCWlmIChyZXQpCj4gPiAr CQlnb3RvIGZyZWVfaXJxX3BhcmVudHM7Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gKwo+ID4g K2ZyZWVfaXJxX3BhcmVudHM6Cj4gPiArCWlycV9kb21haW5fZnJlZV9pcnFzX3BhcmVudChkb21h aW4sIHZpcnEsIG5yX2lycXMpOwo+ID4gK3JlbGVhc2VfcmVnaW9uOgo+ID4gKwlpZiAoZG9tYWlu ID09IHNlaS0+Y3BfZG9tYWluKSB7Cj4gPiArCQltdXRleF9sb2NrKCZzZWktPmNwX21zaV9sb2Nr KTsKPiA+ICsJCWJpdG1hcF9yZWxlYXNlX3JlZ2lvbihzZWktPmNwX21zaV9iaXRtYXAsIGh3aXJx LCAwKTsKPiA+ICsJCW11dGV4X3VubG9jaygmc2VpLT5jcF9tc2lfbG9jayk7Cj4gPiArCX0KPiA+ ICsKPiA+ICsJcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHZvaWQgbXZlYnVf c2VpX2lycV9kb21haW5fZnJlZShzdHJ1Y3QgaXJxX2RvbWFpbiAqZG9tYWluLAo+ID4gKwkJCQkg ICAgICB1bnNpZ25lZCBpbnQgdmlycSwgdW5zaWduZWQgaW50IG5yX2lycXMpCj4gPiArewo+ID4g KwlzdHJ1Y3QgbXZlYnVfc2VpICpzZWkgPSBkb21haW4tPmhvc3RfZGF0YTsKPiA+ICsJc3RydWN0 IGlycV9kYXRhICpkID0gaXJxX2RvbWFpbl9nZXRfaXJxX2RhdGEoZG9tYWluLCB2aXJxKTsKPiA+ ICsJdTMyIGlycV9uYiA9IHNlaS0+YXBfaW50ZXJydXB0cy5udW1iZXIgKyBzZWktPmNwX2ludGVy cnVwdHMubnVtYmVyOwo+ID4gKwo+ID4gKwlpZiAobnJfaXJxcyAhPSAxIHx8IGQtPmh3aXJxID49 IGlycV9uYikgewo+ID4gKwkJZGV2X2VycihzZWktPmRldiwgIkludmFsaWQgaHdpcnEgJWx1XG4i LCBkLT5od2lycSk7Cj4gPiArCQlyZXR1cm47Cj4gPiArCX0KPiA+ICsKPiA+ICsJaXJxX2RvbWFp bl9mcmVlX2lycXNfcGFyZW50KGRvbWFpbiwgdmlycSwgbnJfaXJxcyk7Cj4gPiArCj4gPiArCW11 dGV4X2xvY2soJnNlaS0+Y3BfbXNpX2xvY2spOwo+ID4gKwliaXRtYXBfcmVsZWFzZV9yZWdpb24o c2VpLT5jcF9tc2lfYml0bWFwLCBkLT5od2lycSwgMCk7Cj4gPiArCW11dGV4X3VubG9jaygmc2Vp LT5jcF9tc2lfbG9jayk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgbXZlYnVfc2VpX2Fw X21hdGNoKHN0cnVjdCBpcnFfZG9tYWluICpkLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUsCj4g PiArCQkJICAgICAgZW51bSBpcnFfZG9tYWluX2J1c190b2tlbiBidXNfdG9rZW4pCj4gPiArewo+ ID4gKwlzdHJ1Y3QgbXZlYnVfc2VpICpzZWkgPSBkLT5ob3N0X2RhdGE7ICAKPiAKPiBJZiB5b3Un cmUgZGVyZWZlcmVuY2luZyB0aGUgZG9tYWluIGhlcmUuLi4KPiAKPiA+ICsKPiA+ICsJaWYgKCFz ZWkpCj4gPiArCQlyZXR1cm4gMDsKPiA+ICsKPiA+ICsJaWYgKHNlaS0+ZGV2LT5vZl9ub2RlICE9 IG5vZGUpCj4gPiArCQlyZXR1cm4gMDsKPiA+ICsKPiA+ICsJaWYgKCFkIHx8ICFzZWktPmFwX2Rv bWFpbikgIAo+IAo+IC4uLiBob3cgY2FuIGl0IGJlIE5VTEwgaGVyZT8gQWN0dWFsbHksIGhvdyBj YW4gaXQgKmV2ZXIqIGJlIE5VTEw/CgpPdmVyLXNhbml0aXphdGlvbiBpbmRlZWQuIGQgY2Fubm90 IGJlIE5VTEwuCgo+IAo+IEFsc28sIGl0IGlzIG5vdCBjbGVhciB0byBtZSBob3cgY2FuIHNlaSBv ciBzZWktPmFwX2RvbWFpbiBiZSBOVUxMLgoKSSBtaXNyZWFkIHNvbWUgaW50ZXJuYWwgZnVuY3Rp b25zIG9mIHRoZSBjb3JlIGFuZCBhZnRlciBhIHNlY29uZCBsb29rCnlvdSBhcmUgcmlnaHQgdGhh dCB0aGVyZSBpcyBubyBwb3NzaWJpbGl0eSBmb3IgYm90aCBvZiB0aGVtIHRvIGJlIE5VTEwuCgpJ J2xsIHNpbXBsaWZ5LgoKPiAKPiA+ICsJCXJldHVybiAwOwo+ID4gKwo+ID4gKwlpZiAoZCA9PSBz ZWktPmFwX2RvbWFpbikKPiA+ICsJCXJldHVybiAxOwo+ID4gKwo+ID4gKwlyZXR1cm4gMDsKPiA+ ICt9Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBpcnFfZG9tYWluX29wcyBtdmVidV9z ZWlfYXBfZG9tYWluX29wcyA9IHsKPiA+ICsJLm1hdGNoID0gbXZlYnVfc2VpX2FwX21hdGNoLAo+ ID4gKwkueGxhdGUgPSBpcnFfZG9tYWluX3hsYXRlX29uZWNlbGwsCj4gPiArCS5hbGxvYyA9IG12 ZWJ1X3NlaV9pcnFfZG9tYWluX2FsbG9jLAo+ID4gKwkuZnJlZSA9IG12ZWJ1X3NlaV9pcnFfZG9t YWluX2ZyZWUsCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGlycV9kb21h aW5fb3BzIG12ZWJ1X3NlaV9jcF9kb21haW5fb3BzID0gewo+ID4gKwkuYWxsb2MgPSBtdmVidV9z ZWlfaXJxX2RvbWFpbl9hbGxvYywKPiA+ICsJLmZyZWUgPSBtdmVidV9zZWlfaXJxX2RvbWFpbl9m cmVlLAo+ID4gK307Cj4gPiArCj4gPiArc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtdmVidV9zZWlf bXNpX2lycV9jaGlwID0gewo+ID4gKwkubmFtZQkJPSAiU0VJIE1TSSBjb250cm9sbGVyIiwKPiA+ ICsJLmlycV9zZXRfdHlwZQk9IG12ZWJ1X3NlaV9jcF9zZXRfdHlwZSwKPiA+ICt9Owo+ID4gKwo+ ID4gK3N0YXRpYyBzdHJ1Y3QgbXNpX2RvbWFpbl9vcHMgbXZlYnVfc2VpX21zaV9vcHMgPSB7Cj4g PiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0IG1zaV9kb21haW5faW5mbyBtdmVidV9zZWlf bXNpX2RvbWFpbl9pbmZvID0gewo+ID4gKwkuZmxhZ3MJPSBNU0lfRkxBR19VU0VfREVGX0RPTV9P UFMgfCBNU0lfRkxBR19VU0VfREVGX0NISVBfT1BTLAo+ID4gKwkub3BzCT0gJm12ZWJ1X3NlaV9t c2lfb3BzLAo+ID4gKwkuY2hpcAk9ICZtdmVidV9zZWlfbXNpX2lycV9jaGlwLAo+ID4gK307Cj4g PiArCj4gPiArc3RhdGljIHZvaWQgbXZlYnVfc2VpX2hhbmRsZV9jYXNjYWRlX2lycShzdHJ1Y3Qg aXJxX2Rlc2MgKmRlc2MpCj4gPiArewo+ID4gKwlzdHJ1Y3QgbXZlYnVfc2VpICpzZWkgPSBpcnFf ZGVzY19nZXRfaGFuZGxlcl9kYXRhKGRlc2MpOwo+ID4gKwlzdHJ1Y3QgaXJxX2NoaXAgKmNoaXAg PSBpcnFfZGVzY19nZXRfY2hpcChkZXNjKTsKPiA+ICsJdW5zaWduZWQgbG9uZyBpcnFtYXAsIGly cV9iaXQ7Cj4gPiArCXUzMiByZWdfaWR4LCB2aXJxLCBpcnFuOwo+ID4gKwo+ID4gKwljaGFpbmVk X2lycV9lbnRlcihjaGlwLCBkZXNjKTsKPiA+ICsKPiA+ICsJLyogUmVhZCBib3RoIFNFSSBjYXVz ZSByZWdpc3RlcnMgKDY0IGJpdHMpICovCj4gPiArCWZvciAocmVnX2lkeCA9IDA7IHJlZ19pZHgg PCBTRUlfSVJRX1JFR19DT1VOVDsgcmVnX2lkeCsrKSB7Cj4gPiArCQlpcnFtYXAgPSByZWFkbF9y ZWxheGVkKHNlaS0+YmFzZSArIEdJQ1BfU0VDUihyZWdfaWR4KSk7ICAKPiAKPiBJIHRoaW5rIGl0 J2QgYmUgYSBsb3QgY2xlYXJlciBpZiB5b3UganVzdCByZWFkIGJvdGggMzJiaXQgcmVnaXN0ZXJz IGFuZAo+IHRyZWF0IHRoZSByZXN1bHRpbmcgNjRiaXQgcXVhbnRpdHkgYXMgYSBzaW5nbGUgYml0 bWFwLCByYXRoZXIgdGhhbgo+IGhhdmluZyB0aGlzIG91dGVyIGxvb3AuCgpUcnVlLCB0aGVyZSBp cyBubyBuZWVkIGZvciB0aGlzIG91dGVyIGxvb3Agb25jZSB0aGUgYml0bWFwIGlzIDY0LWJpdAp3 aWRlLgoKPiAKPiA+ICsKPiA+ICsJCS8qIENhbGwgaGFuZGxlciBmb3IgZWFjaCBzZXQgYml0ICov Cj4gPiArCQlmb3JfZWFjaF9zZXRfYml0KGlycV9iaXQsICZpcnFtYXAsIFNFSV9JUlFfQ09VTlRf UEVSX1JFRykgewo+ID4gKwkJCS8qIENhdXNlIFJlZ2lzdGVyIGdpdmVzIHRoZSBTRUkgbnVtYmVy ICovCj4gPiArCQkJaXJxbiA9IGlycV9iaXQgKyByZWdfaWR4ICogU0VJX0lSUV9DT1VOVF9QRVJf UkVHOwo+ID4gKwkJCS8qCj4gPiArCQkJICogRmluZGluZyBMaW51eCBtYXBwaW5nICh2aXJxKSBu ZWVkcyB0aGUgcmlnaHQgZG9tYWluCj4gPiArCQkJICogYW5kIHRoZSByZWxhdGl2ZSBod2lycSAo d2hpY2ggc3RhcnQgYXQgMCBpbiBib3RoCj4gPiArCQkJICogY2FzZXMsIHdoaWxlIGlycW4gaXMg cmVsYXRpdmUgdG8gYWxsIFNFSSBpbnRlcnJ1cHRzKS4KPiA+ICsJCQkgKi8KPiA+ICsJCQlpZiAo aXJxbiA8IHNlaS0+YXBfaW50ZXJydXB0cy5udW1iZXIpIHsKPiA+ICsJCQkJdmlycSA9IGlycV9m aW5kX21hcHBpbmcoc2VpLT5hcF9kb21haW4sIGlycW4pOwo+ID4gKwkJCX0gZWxzZSB7Cj4gPiAr CQkJCWlycW4gLT0gc2VpLT5hcF9pbnRlcnJ1cHRzLm51bWJlcjsKPiA+ICsJCQkJdmlycSA9IGly cV9maW5kX21hcHBpbmcoc2VpLT5jcF9kb21haW4sIGlycW4pOwo+ID4gKwkJCX0KPiA+ICsKPiA+ ICsJCQkvKiBDYWxsIElSUSBoYW5kbGVyICovCj4gPiArCQkJZ2VuZXJpY19oYW5kbGVfaXJxKHZp cnEpOwo+ID4gKwkJfQo+ID4gKwo+ID4gKwkJLyogQ2xlYXIgaW50ZXJydXB0IGluZGljYXRpb24g Ynkgd3JpdGluZyAxIHRvIGl0ICovCj4gPiArCQl3cml0ZWwoaXJxbWFwLCBzZWktPmJhc2UgKyBH SUNQX1NFQ1IocmVnX2lkeCkpOyAgCj4gCj4gd3JpdGVfcmVsYXhlZC4gSXQgd291bGQgcHJvYmFi bHkgbWFrZSBzZW5zZSBub3QgdG8gd3JpdGUgdG8gdGhhdAo+IHJlZ2lzdGVyIGlmIG5vIGJpdHMg d2VyZSBzZXQgdG8gMSB0aGUgZmlyc3QgcGxhY2UuCgpXaWxsIGRvIGl0LgoKPiAKPiA+ICsJfQo+ ID4gKwo+ID4gKwljaGFpbmVkX2lycV9leGl0KGNoaXAsIGRlc2MpOwo+ID4gK30KPiA+ICsKPiA+ ICtzdGF0aWMgaW50IG12ZWJ1X3NlaV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2 KQo+ID4gK3sKPiA+ICsJc3RydWN0IGRldmljZV9ub2RlICpub2RlID0gcGRldi0+ZGV2Lm9mX25v ZGUsICpwYXJlbnQ7Cj4gPiArCXN0cnVjdCBpcnFfZG9tYWluICpwYXJlbnRfZG9tYWluLCAqcGxh dF9kb21haW47Cj4gPiArCXN0cnVjdCBtdmVidV9zZWkgKnNlaTsKPiA+ICsJY29uc3QgX19iZTMy ICpwcm9wZXJ0eTsKPiA+ICsJdTMyIHBhcmVudF9pcnEsIHNpemU7Cj4gPiArCWludCByZXQ7Cj4g PiArCj4gPiArCXNlaSA9IGRldm1fa3phbGxvYygmcGRldi0+ZGV2LCBzaXplb2YoKnNlaSksIEdG UF9LRVJORUwpOwo+ID4gKwlpZiAoIXNlaSkKPiA+ICsJCXJldHVybiAtRU5PTUVNOwo+ID4gKwo+ ID4gKwlzZWktPmRldiA9ICZwZGV2LT5kZXY7Cj4gPiArCj4gPiArCW11dGV4X2luaXQoJnNlaS0+ Y3BfbXNpX2xvY2spOwo+ID4gKwo+ID4gKwlzZWktPnJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJj ZShwZGV2LCBJT1JFU09VUkNFX01FTSwgMCk7Cj4gPiArCXNlaS0+YmFzZSA9IGRldm1faW9yZW1h cF9yZXNvdXJjZShzZWktPmRldiwgc2VpLT5yZXMpOwo+ID4gKwlpZiAoIXNlaS0+YmFzZSkgewo+ ID4gKwkJZGV2X2VycihzZWktPmRldiwgIkZhaWxlZCB0byByZW1hcCBTRUkgcmVzb3VyY2VcbiIp Owo+ID4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gPiArCX0KPiA+ICsKPiA+ICsJbXZlYnVfc2VpX3Jl c2V0KHNlaSk7Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIFJlc2VydmUgdGhlIHNpbmdsZSAodG9w LWxldmVsKSBwYXJlbnQgU1BJIElSUSBmcm9tIHdoaWNoIGFsbCB0aGUKPiA+ICsJICogaW50ZXJy dXB0cyBoYW5kbGVkIGJ5IHRoaXMgZHJpdmVyIHdpbGwgYmUgc2lnbmFsZWQuCj4gPiArCSAqLwo+ ID4gKwlwYXJlbnRfaXJxID0gaXJxX29mX3BhcnNlX2FuZF9tYXAobm9kZSwgMCk7Cj4gPiArCWlm IChwYXJlbnRfaXJxIDw9IDApIHsKPiA+ICsJCWRldl9lcnIoc2VpLT5kZXYsICJGYWlsZWQgdG8g cmV0cmlldmUgdG9wLWxldmVsIFNQSSBJUlFcbiIpOwo+ID4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4g PiArCX0KPiA+ICsKPiA+ICsJaXJxX3NldF9jaGFpbmVkX2hhbmRsZXIocGFyZW50X2lycSwgbXZl YnVfc2VpX2hhbmRsZV9jYXNjYWRlX2lycSk7Cj4gPiArCWlycV9zZXRfaGFuZGxlcl9kYXRhKHBh cmVudF9pcnEsIHNlaSk7Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIFNFSXMgY2FuIGJlIHRyaWdn ZXJlZCBmcm9tIHRoZSBBUCB0aHJvdWdoIHdpcmVkIGludGVycnVwdHMgYW5kIGZyb20KPiA+ICsJ ICogdGhlIENQcyB0aHJvdWdoIE1TSXMuCj4gPiArCSAqLwo+ID4gKwo+ID4gKwkvKiBHZXQgYSBy ZWZlcmVuY2UgdG8gdGhlIHBhcmVudCBkb21haW4gdG8gY3JlYXRlIGEgaGllcmFyY2h5ICovCj4g PiArCXBhcmVudCA9IG9mX2lycV9maW5kX3BhcmVudChub2RlKTsKPiA+ICsJaWYgKCFwYXJlbnQp IHsKPiA+ICsJCWRldl9lcnIoc2VpLT5kZXYsICJGYWlsZWQgdG8gZmluZCBwYXJlbnQgSVJRIG5v ZGVcbiIpOwo+ID4gKwkJcmV0ID0gLUVOT0RFVjsKPiA+ICsJCWdvdG8gZGlzcG9zZV9pcnE7Cj4g PiArCX0gIAo+IAo+IFdvdWxkbid0IGl0IG1ha2Ugc2Vuc2UgdG8gY2hlY2sgdGhpcyBiZWZvcmUg aGF2aW5nIGNvbmZpZ3VyZWQgdGhpbmdzCj4gd2l0aCBhIGNoYWluZWQgaGFuZGxlcj8gaS5lLiBj aGVjayBldmVyeXRoaW5nIHRoYXQgY2FuIGJlIGNoZWNrZWQsIGFuZAo+IG9uY2UgeW91IGhhdmUg ZXZlcnl0aGluZyBpbiBvcmRlciwgZG8gdGhlIHBsdW1iaW5nPwoKT2sKCj4gCj4gPiArCj4gPiAr CXBhcmVudF9kb21haW4gPSBpcnFfZmluZF9ob3N0KHBhcmVudCk7Cj4gPiArCWlmICghcGFyZW50 X2RvbWFpbikgewo+ID4gKwkJZGV2X2VycihzZWktPmRldiwgIkZhaWxlZCB0byBmaW5kIHBhcmVu dCBJUlEgZG9tYWluXG4iKTsKPiA+ICsJCXJldCA9IC1FTk9ERVY7Cj4gPiArCQlnb3RvIGRpc3Bv c2VfaXJxOwo+ID4gKwl9Cj4gPiArCj4gPiArCS8qCj4gPiArCSAqIFJldHJpZXZlIHRoZSBJUlEg b3JnYW5pemF0aW9uIChBUC9DUCk6IHRoZSBpbmRleCBvZiB0aGUgZmlyc3Qgb25lIGFuZAo+ID4g KwkgKiB0aGUgbnVtYmVyIG9mIHRoZW0gZm9yIGVhY2ggZG9tYWluLgo+ID4gKwkgKi8KPiA+ICsJ cHJvcGVydHkgPSBvZl9nZXRfcHJvcGVydHkobm9kZSwgIm1hcnZlbGwsc2VpLWFwLXJhbmdlcyIs ICZzaXplKTsKPiA+ICsJaWYgKCFwcm9wZXJ0eSB8fCAoc2l6ZSAhPSAoMiAqIHNpemVvZih1MzIp KSkpIHsKPiA+ICsJCWRldl9lcnIoc2VpLT5kZXYsICJNaXNzaW5nICdtYXJ2ZWxsLHNlaS1hcC1y YW5nZXMnIHByb3BlcnR5XG4iKTsKPiA+ICsJCXJldCA9IC1FTk9ERVY7Cj4gPiArCQlnb3RvIGRp c3Bvc2VfaXJxOwo+ID4gKwl9Cj4gPiArCj4gPiArCXNlaS0+YXBfaW50ZXJydXB0cy5maXJzdCA9 IGJlMzJfdG9fY3B1KHByb3BlcnR5WzBdKTsKPiA+ICsJc2VpLT5hcF9pbnRlcnJ1cHRzLm51bWJl ciA9IGJlMzJfdG9fY3B1KHByb3BlcnR5WzFdKTsKPiA+ICsKPiA+ICsJcHJvcGVydHkgPSBvZl9n ZXRfcHJvcGVydHkobm9kZSwgIm1hcnZlbGwsc2VpLWNwLXJhbmdlcyIsICZzaXplKTsKPiA+ICsJ aWYgKCFwcm9wZXJ0eSB8fCAoc2l6ZSAhPSAoMiAqIHNpemVvZih1MzIpKSkpIHsKPiA+ICsJCWRl dl9lcnIoc2VpLT5kZXYsICJNaXNzaW5nICdtYXJ2ZWxsLHNlaS1jcC1yYW5nZXMnIHByb3BlcnR5 XG4iKTsKPiA+ICsJCXJldCA9IC1FTk9ERVY7Cj4gPiArCQlnb3RvIGRpc3Bvc2VfaXJxOwo+ID4g Kwl9Cj4gPiArCj4gPiArCXNlaS0+Y3BfaW50ZXJydXB0cy5maXJzdCA9IGJlMzJfdG9fY3B1KHBy b3BlcnR5WzBdKTsKPiA+ICsJc2VpLT5jcF9pbnRlcnJ1cHRzLm51bWJlciA9IGJlMzJfdG9fY3B1 KHByb3BlcnR5WzFdKTsKPiA+ICsKPiA+ICsJLyogQ3JlYXRlIHRoZSAnd2lyZWQnIGhpZXJhcmNo eSAqLwo+ID4gKwlzZWktPmFwX2RvbWFpbiA9IGlycV9kb21haW5fY3JlYXRlX2hpZXJhcmNoeShw YXJlbnRfZG9tYWluLCAwLAo+ID4gKwkJCQkJCSAgICAgc2VpLT5hcF9pbnRlcnJ1cHRzLm51bWJl ciwKPiA+ICsJCQkJCQkgICAgIG9mX25vZGVfdG9fZndub2RlKG5vZGUpLAo+ID4gKwkJCQkJCSAg ICAgJm12ZWJ1X3NlaV9hcF9kb21haW5fb3BzLAo+ID4gKwkJCQkJCSAgICAgc2VpKTsKPiA+ICsJ aWYgKCFzZWktPmFwX2RvbWFpbikgewo+ID4gKwkJZGV2X2VycihzZWktPmRldiwgIkZhaWxlZCB0 byBjcmVhdGUgQVAgSVJRIGRvbWFpblxuIik7Cj4gPiArCQlyZXQgPSAtRU5PTUVNOwo+ID4gKwkJ Z290byBkaXNwb3NlX2lycTsKPiA+ICsJfQo+ID4gKwo+ID4gKwkvKiBDcmVhdGUgdGhlICdNU0kn IGhpZXJhcmNoeSAqLwo+ID4gKwlzZWktPmNwX2RvbWFpbiA9IGlycV9kb21haW5fY3JlYXRlX2hp ZXJhcmNoeShwYXJlbnRfZG9tYWluLCAwLAo+ID4gKwkJCQkJCSAgICAgc2VpLT5jcF9pbnRlcnJ1 cHRzLm51bWJlciwKPiA+ICsJCQkJCQkgICAgIG9mX25vZGVfdG9fZndub2RlKG5vZGUpLAo+ID4g KwkJCQkJCSAgICAgJm12ZWJ1X3NlaV9jcF9kb21haW5fb3BzLAo+ID4gKwkJCQkJCSAgICAgc2Vp KTsKPiA+ICsJaWYgKCFzZWktPmNwX2RvbWFpbikgewo+ID4gKwkJcHJfZXJyKCJGYWlsZWQgdG8g Y3JlYXRlIENQcyBJUlEgZG9tYWluXG4iKTsKPiA+ICsJCXJldCA9IC1FTk9NRU07Cj4gPiArCQln b3RvIHJlbW92ZV9hcF9kb21haW47Cj4gPiArCX0KPiA+ICsKPiA+ICsJcGxhdF9kb21haW4gPSBw bGF0Zm9ybV9tc2lfY3JlYXRlX2lycV9kb21haW4ob2Zfbm9kZV90b19md25vZGUobm9kZSksCj4g PiArCQkJCQkJICAgICAmbXZlYnVfc2VpX21zaV9kb21haW5faW5mbywKPiA+ICsJCQkJCQkgICAg IHNlaS0+Y3BfZG9tYWluKTsKPiA+ICsJaWYgKCFwbGF0X2RvbWFpbikgewo+ID4gKwkJcHJfZXJy KCJGYWlsZWQgdG8gY3JlYXRlIENQcyBNU0kgZG9tYWluXG4iKTsKPiA+ICsJCXJldCA9IC1FTk9N RU07Cj4gPiArCQlnb3RvIHJlbW92ZV9jcF9kb21haW47Cj4gPiArCX0KPiA+ICsKPiA+ICsJcGxh dGZvcm1fc2V0X2RydmRhdGEocGRldiwgc2VpKTsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiAr Cj4gPiArcmVtb3ZlX2NwX2RvbWFpbjoKPiA+ICsJaXJxX2RvbWFpbl9yZW1vdmUoc2VpLT5jcF9k b21haW4pOwo+ID4gK3JlbW92ZV9hcF9kb21haW46Cj4gPiArCWlycV9kb21haW5fcmVtb3ZlKHNl aS0+YXBfZG9tYWluKTsKPiA+ICtkaXNwb3NlX2lycToKPiA+ICsJaXJxX2Rpc3Bvc2VfbWFwcGlu ZyhwYXJlbnRfaXJxKTsKPiA+ICsKPiA+ICsJcmV0dXJuIHJldDsKPiA+ICt9Cj4gPiArCj4gPiAr c3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXZlYnVfc2VpX29mX21hdGNoW10gPSB7 Cj4gPiArCXsgLmNvbXBhdGlibGUgPSAibWFydmVsbCxhcm1hZGEtOGstc2VpIiwgfSwKPiA+ICsJ e30sCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBtdmVi dV9zZWlfZHJpdmVyID0gewo+ID4gKwkucHJvYmUgID0gbXZlYnVfc2VpX3Byb2JlLAo+ID4gKwku ZHJpdmVyID0gewo+ID4gKwkJLm5hbWUgPSAibXZlYnUtc2VpIiwKPiA+ICsJCS5vZl9tYXRjaF90 YWJsZSA9IG12ZWJ1X3NlaV9vZl9tYXRjaCwKPiA+ICsJfSwKPiA+ICt9Owo+ID4gK2J1aWx0aW5f cGxhdGZvcm1fZHJpdmVyKG12ZWJ1X3NlaV9kcml2ZXIpOwo+ID4gICAKPiAKPiBUaGFua3MsCj4g Cj4gCU0uCgpUaGFua3MsCk1pcXXDqGwKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1r ZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWls bWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK