From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [usb-next,v10,3/8] usb: core: add a wrapper for the USB PHYs on the HCD From: Chunfeng Yun Message-Id: <1521706245.3717.139.camel@mhfsdcap03> Date: Thu, 22 Mar 2018 16:10:45 +0800 To: Roger Quadros Cc: Martin Blumenstingl , linux-usb@vger.kernel.org, mathias.nyman@intel.com, arnd@arndb.de, gregkh@linuxfoundation.org, felipe.balbi@linux.intel.com, linux-omap@vger.kernel.org, linux-tegra@vger.kernel.org, linux-mediatek@lists.infradead.org, linux-arm-kernel@lists.infradead.org, devicetree@vger.kernel.org, jonathanh@nvidia.com, thierry.reding@gmail.com, stern@rowland.harvard.edu, linux@prisktech.co.nz, Peter.Chen@nxp.com, matthias.bgg@gmail.com, mark.rutland@arm.com, robh+dt@kernel.org, Neil Armstrong , linux-amlogic@lists.infradead.org, yixun.lan@amlogic.com, Keerthy , "Gerlach, Dave" , KISHON VIJAY ABRAHAM List-ID: SGksCk9uIFdlZCwgMjAxOC0wMy0yMSBhdCAxMzozMCArMDIwMCwgUm9nZXIgUXVhZHJvcyB3cm90 ZToKPiBNYXJ0aW4sCj4gCj4gT24gMjEvMDMvMTggMDA6MDEsIE1hcnRpbiBCbHVtZW5zdGluZ2wg d3JvdGU6Cj4gPiBIaSBSb2dlciwgSGkgQ2h1bmZlbmcsCj4gPiAKPiA+IE9uIFR1ZSwgTWFyIDIw LCAyMDE4IGF0IDE6MDQgUE0sIENodW5mZW5nIFl1biA8Y2h1bmZlbmcueXVuQG1lZGlhdGVrLmNv bT4gd3JvdGU6Cj4gPj4gSGkgTWFydGluICYgUm9nZXI6Cj4gPj4KPiA+PiBPbiBNb24sIDIwMTgt MDMtMTkgYXQgMTc6MTIgKzAxMDAsIE1hcnRpbiBCbHVtZW5zdGluZ2wgd3JvdGU6Cj4gPj4+IEhp IFJvZ2VyLAo+ID4+Pgo+ID4+PiBPbiBNb24sIE1hciAxOSwgMjAxOCBhdCA5OjQ5IEFNLCBSb2dl ciBRdWFkcm9zIDxyb2dlcnFAdGkuY29tPiB3cm90ZToKPiA+Pj4+IEhpLAo+ID4+Pj4KPiA+Pj4+ IE9uIDE5LzAzLzE4IDAwOjI5LCBNYXJ0aW4gQmx1bWVuc3RpbmdsIHdyb3RlOgo+ID4+Pj4+IEhp IFJvZ2VyLAo+ID4+Pj4+Cj4gPj4+Pj4gT24gRnJpLCBNYXIgMTYsIDIwMTggYXQgMzozMiBQTSwg Um9nZXIgUXVhZHJvcyA8cm9nZXJxQHRpLmNvbT4gd3JvdGU6Cj4gPj4+Pj4+ICtzb21lIFRJIGZv bGtzCj4gPj4+Pj4+Cj4gPj4+Pj4+IEhpIE1hcnRpbiwKPiA+Pj4+Pj4KPiA+Pj4+Pj4gT24gMTgv MDIvMTggMjA6NDQsIE1hcnRpbiBCbHVtZW5zdGluZ2wgd3JvdGU6Cj4gPj4+Pj4+PiBNYW55IFNv QyBwbGF0Zm9ybXMgaGF2ZSBzZXBhcmF0ZSBkZXZpY2VzIGZvciB0aGUgVVNCIFBIWSB3aGljaCBh cmUKPiA+Pj4+Pj4+IHJlZ2lzdGVyZWQgdGhyb3VnaCB0aGUgZ2VuZXJpYyBQSFkgZnJhbWV3b3Jr LiBUaGVzZSBQSFlzIGhhdmUgdG8gYmUKPiA+Pj4+Pj4+IGVuYWJsZWQgdG8gbWFrZSB0aGUgVVNC IGNvbnRyb2xsZXIgYWN0dWFsbHkgd29yay4gVGhleSBhbHNvIGhhdmUgdG8gYmUKPiA+Pj4+Pj4+ IGRpc2FibGVkIGFnYWluIG9uIHNodXRkb3duL3N1c3BlbmQuCj4gPj4+Pj4+Pgo+ID4+Pj4+Pj4g Q3VycmVudGx5IChhdCBsZWFzdCkgdGhlIGZvbGxvd2luZyBIQ0kgcGxhdGZvcm0gZHJpdmVycyBh cmUgdXNpbmcgY3VzdG9tCj4gPj4+Pj4+PiBjb2RlIHRvIG9idGFpbiBhbGwgUEhZcyB2aWEgZGV2 aWNldHJlZSBmb3IgdGhlIHJvb3RodWIvY29udHJvbGxlciBhbmQKPiA+Pj4+Pj4+IGRpc2FibGUv ZW5hYmxlIHRoZW0gd2hlbiByZXF1aXJlZDoKPiA+Pj4+Pj4+IC0gZWhjaS1wbGF0Zm9ybS5jIGhh cyBlaGNpX3BsYXRmb3JtX3Bvd2VyX3tvbixvZmZ9Cj4gPj4+Pj4+PiAtIHhoY2ktbXRrLmMgaGFz IHhoY2lfbXRrX3BoeV97aW5pdCxleGl0LHBvd2VyX29uLHBvd2VyX29mZn0KPiA+Pj4+Pj4+IC0g b2hjaS1wbGF0Zm9ybS5jIGhhcyBvaGNpX3BsYXRmb3JtX3Bvd2VyX3tvbixvZmZ9Cj4gPj4+Pj4+ Pgo+ID4+Pj4+Pj4gV2l0aCB0aGlzIG5ldyB3cmFwcGVyIHRoZSBVU0IgUEhZcyBjYW4gYmUgc3Bl Y2lmaWVkIGRpcmVjdGx5IGluIHRoZQo+ID4+Pj4+Pj4gVVNCIGNvbnRyb2xsZXIncyBkZXZpY2V0 cmVlIG5vZGUgKGp1c3QgbGlrZSBvbiB0aGUgZHJpdmVycyBsaXN0ZWQKPiA+Pj4+Pj4+IGFib3Zl KS4gVGhpcyBhbGxvd3MgU29DcyBsaWtlIHRoZSBBbWxvZ2ljIE1lc29uIEdYTCBmYW1pbHkgdG8g b3BlcmF0ZQo+ID4+Pj4+Pj4gY29ycmVjdGx5IG9uY2UgdGhpcyBpcyB3aXJlZCB1cCBjb3JyZWN0 bHkuIFRoZXNlIFNvQ3MgdXNlIGEgZHdjMwo+ID4+Pj4+Pj4gY29udHJvbGxlciBhbmQgcmVxdWly ZSBhbGwgVVNCIFBIWXMgdG8gYmUgaW5pdGlhbGl6ZWQgKGlmIG9uZSBvZiB0aGUgVVNCCj4gPj4+ Pj4+PiBQSFlzIGl0IG5vdCBpbml0aWFsaXplZCB0aGVuIG5vbmUgb2YgVVNCIHBvcnQgd29ya3Mg YXQgYWxsKS4KPiA+Pj4+Pj4+Cj4gPj4+Pj4+PiBTaWduZWQtb2ZmLWJ5OiBNYXJ0aW4gQmx1bWVu c3RpbmdsIDxtYXJ0aW4uYmx1bWVuc3RpbmdsQGdvb2dsZW1haWwuY29tPgo+ID4+Pj4+Pj4gVGVz dGVkLWJ5OiBZaXh1biBMYW4gPHlpeHVuLmxhbkBhbWxvZ2ljLmNvbT4KPiA+Pj4+Pj4+IENjOiBO ZWlsIEFybXN0cm9uZyA8bmFybXN0cm9uZ0BiYXlsaWJyZS5jb20+Cj4gPj4+Pj4+PiBDYzogQ2h1 bmZlbmcgWXVuIDxjaHVuZmVuZy55dW5AbWVkaWF0ZWsuY29tPgo+ID4+Pj4+Pgo+ID4+Pj4+PiBU aGlzIHBhdGNoIGlzIGJyZWFraW5nIGxvdyBwb3dlciBjYXNlcyBvbiBUSSBTb0NzIHdoZW4gVVNC IGlzIGluIGhvc3QgbW9kZS4KPiA+Pj4+Pj4gSSdsbCBleHBsYWluIHdoeSBiZWxvdy4KPiA+Pj4+ PiBiYXNlZCBvbiB5b3VyIGV4cGxhbmF0aW9uIGFuZCByZWFkaW5nIHRoZSBUSSBQSFkgZHJpdmVy cyBJIGFtIGFzc3VtaW5nCj4gPj4+Pj4gdGhhdCB0aGUgYWZmZWN0ZWQgU29DcyBhcmUgdXNpbmcg dGhlICJwaHktb21hcC11c2IyIiBkcml2ZXIKPiA+Pj4+Pgo+ID4+Pj4geWVzIGFuZCBwaHktdGkt cGlwZTMgYXMgd2VsbCBpLmUuICJ0aSxwaHktdXNiMyIgYW5kICJ0aSxvbWFwLXVzYjMiCj4gPj4+ IEkgbWlzc2VkIHRoYXQsIHRoYW5rcwo+ID4+Pgo+ID4+Pj4+Pj4gLS0tCj4gPj4+Pj4+PiAgZHJp dmVycy91c2IvY29yZS9NYWtlZmlsZSB8ICAgMiArLQo+ID4+Pj4+Pj4gIGRyaXZlcnMvdXNiL2Nv cmUvcGh5LmMgICAgfCAxNTggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKwo+ID4+Pj4+Pj4gIGRyaXZlcnMvdXNiL2NvcmUvcGh5LmggICAgfCAgIDcgKysKPiA+ Pj4+Pj4+ICAzIGZpbGVzIGNoYW5nZWQsIDE2NiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0p Cj4gPj4+Pj4+PiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvdXNiL2NvcmUvcGh5LmMKPiA+ Pj4+Pj4+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy91c2IvY29yZS9waHkuaAo+ID4+Pj4+ Pj4KPiA+Pj4+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlIGIvZHJp dmVycy91c2IvY29yZS9NYWtlZmlsZQo+ID4+Pj4+Pj4gaW5kZXggOTJjOWNlZmI0MzE3Li4xOGU4 NzRiMDQ0MWUgMTAwNjQ0Cj4gPj4+Pj4+PiAtLS0gYS9kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxl Cj4gPj4+Pj4+PiArKysgYi9kcml2ZXJzL3VzYi9jb3JlL01ha2VmaWxlCj4gPj4+Pj4+PiBAQCAt Niw3ICs2LDcgQEAKPiA+Pj4+Pj4+ICB1c2Jjb3JlLXkgOj0gdXNiLm8gaHViLm8gaGNkLm8gdXJi Lm8gbWVzc2FnZS5vIGRyaXZlci5vCj4gPj4+Pj4+PiAgdXNiY29yZS15ICs9IGNvbmZpZy5vIGZp bGUubyBidWZmZXIubyBzeXNmcy5vIGVuZHBvaW50Lm8KPiA+Pj4+Pj4+ICB1c2Jjb3JlLXkgKz0g ZGV2aW8ubyBub3RpZnkubyBnZW5lcmljLm8gcXVpcmtzLm8gZGV2aWNlcy5vCj4gPj4+Pj4+PiAt dXNiY29yZS15ICs9IHBvcnQubwo+ID4+Pj4+Pj4gK3VzYmNvcmUteSArPSBwaHkubyBwb3J0Lm8K PiA+Pj4+Pj4+Cj4gPj4+Pj4+PiAgdXNiY29yZS0kKENPTkZJR19PRikgICAgICAgICArPSBvZi5v Cj4gPj4+Pj4+PiAgdXNiY29yZS0kKENPTkZJR19VU0JfUENJKSAgICAgICAgICAgICs9IGhjZC1w Y2kubwo+ID4+Pj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvcGh5LmMgYi9kcml2 ZXJzL3VzYi9jb3JlL3BoeS5jCj4gPj4+Pj4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4+Pj4+ Pj4gaW5kZXggMDAwMDAwMDAwMDAwLi4wOWI3YzQzYzBlYTQKPiA+Pj4+Pj4+IC0tLSAvZGV2L251 bGwKPiA+Pj4+Pj4+ICsrKyBiL2RyaXZlcnMvdXNiL2NvcmUvcGh5LmMKPiA+Pj4+Pj4+IEBAIC0w LDAgKzEsMTU4IEBACj4gPj4+Pj4+PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjArCj4gPj4+Pj4+PiArLyoKPiA+Pj4+Pj4+ICsgKiBBIHdyYXBwZXIgZm9yIG11bHRpcGxlIFBI WXMgd2hpY2ggcGFzc2VzIGFsbCBwaHlfKiBmdW5jdGlvbiBjYWxscyB0bwo+ID4+Pj4+Pj4gKyAq IG11bHRpcGxlIChhY3R1YWwpIFBIWSBkZXZpY2VzLiBUaGlzIGlzIGNvbWVzIGhhbmR5IHdoZW4g aW5pdGlhbGl6aW5nCj4gPj4+Pj4+PiArICogYWxsIFBIWXMgb24gYSBIQ0QgYW5kIHRvIGtlZXAg dGhlbSBhbGwgaW4gdGhlIHNhbWUgc3RhdGUuCj4gPj4+Pj4+PiArICoKPiA+Pj4+Pj4+ICsgKiBD b3B5cmlnaHQgKEMpIDIwMTggTWFydGluIEJsdW1lbnN0aW5nbCA8bWFydGluLmJsdW1lbnN0aW5n bEBnb29nbGVtYWlsLmNvbT4KPiA+Pj4+Pj4+ICsgKi8KPiA+Pj4+Pj4+ICsKPiA+Pj4+Pj4+ICsj aW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Cj4gPj4+Pj4+PiArI2luY2x1ZGUgPGxpbnV4L2xpc3Qu aD4KPiA+Pj4+Pj4+ICsjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgo+ID4+Pj4+Pj4gKyNpbmNs dWRlIDxsaW51eC9vZi5oPgo+ID4+Pj4+Pj4gKwo+ID4+Pj4+Pj4gKyNpbmNsdWRlICJwaHkuaCIK PiA+Pj4+Pj4+ICsKPiA+Pj4+Pj4+ICtzdHJ1Y3QgdXNiX3BoeV9yb290aHViIHsKPiA+Pj4+Pj4+ ICsgICAgIHN0cnVjdCBwaHkgICAgICAgICAgICAgICpwaHk7Cj4gPj4+Pj4+PiArICAgICBzdHJ1 Y3QgbGlzdF9oZWFkICAgICAgICBsaXN0Owo+ID4+Pj4+Pj4gK307Cj4gPj4+Pj4+PiArCj4gPj4+ Pj4+PiArc3RhdGljIHN0cnVjdCB1c2JfcGh5X3Jvb3RodWIgKnVzYl9waHlfcm9vdGh1Yl9hbGxv YyhzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gPj4+Pj4+PiArewo+ID4+Pj4+Pj4gKyAgICAgc3RydWN0 IHVzYl9waHlfcm9vdGh1YiAqcm9vdGh1Yl9lbnRyeTsKPiA+Pj4+Pj4+ICsKPiA+Pj4+Pj4+ICsg ICAgIHJvb3RodWJfZW50cnkgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnJvb3RodWJfZW50 cnkpLCBHRlBfS0VSTkVMKTsKPiA+Pj4+Pj4+ICsgICAgIGlmICghcm9vdGh1Yl9lbnRyeSkKPiA+ Pj4+Pj4+ICsgICAgICAgICAgICAgcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7Cj4gPj4+Pj4+PiAr Cj4gPj4+Pj4+PiArICAgICBJTklUX0xJU1RfSEVBRCgmcm9vdGh1Yl9lbnRyeS0+bGlzdCk7Cj4g Pj4+Pj4+PiArCj4gPj4+Pj4+PiArICAgICByZXR1cm4gcm9vdGh1Yl9lbnRyeTsKPiA+Pj4+Pj4+ ICt9Cj4gPj4+Pj4+PiArCj4gPj4+Pj4+PiArc3RhdGljIGludCB1c2JfcGh5X3Jvb3RodWJfYWRk X3BoeShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBpbmRleCwKPiA+Pj4+Pj4+ICsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QpCj4gPj4+Pj4+PiAr ewo+ID4+Pj4+Pj4gKyAgICAgc3RydWN0IHVzYl9waHlfcm9vdGh1YiAqcm9vdGh1Yl9lbnRyeTsK PiA+Pj4+Pj4+ICsgICAgIHN0cnVjdCBwaHkgKnBoeSA9IGRldm1fb2ZfcGh5X2dldF9ieV9pbmRl eChkZXYsIGRldi0+b2Zfbm9kZSwgaW5kZXgpOwo+ID4+Pj4+Pj4gKwo+ID4+Pj4+Pj4gKyAgICAg aWYgKElTX0VSUl9PUl9OVUxMKHBoeSkpIHsKPiA+Pj4+Pj4+ICsgICAgICAgICAgICAgaWYgKCFw aHkgfHwgUFRSX0VSUihwaHkpID09IC1FTk9ERVYpCj4gPj4+Pj4+PiArICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIDA7Cj4gPj4+Pj4+PiArICAgICAgICAgICAgIGVsc2UKPiA+Pj4+Pj4+ICsg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihwaHkpOwo+ID4+Pj4+Pj4gKyAgICAg fQo+ID4+Pj4+Pj4gKwo+ID4+Pj4+Pj4gKyAgICAgcm9vdGh1Yl9lbnRyeSA9IHVzYl9waHlfcm9v dGh1Yl9hbGxvYyhkZXYpOwo+ID4+Pj4+Pj4gKyAgICAgaWYgKElTX0VSUihyb290aHViX2VudHJ5 KSkKPiA+Pj4+Pj4+ICsgICAgICAgICAgICAgcmV0dXJuIFBUUl9FUlIocm9vdGh1Yl9lbnRyeSk7 Cj4gPj4+Pj4+PiArCj4gPj4+Pj4+PiArICAgICByb290aHViX2VudHJ5LT5waHkgPSBwaHk7Cj4g Pj4+Pj4+PiArCj4gPj4+Pj4+PiArICAgICBsaXN0X2FkZF90YWlsKCZyb290aHViX2VudHJ5LT5s aXN0LCBsaXN0KTsKPiA+Pj4+Pj4+ICsKPiA+Pj4+Pj4+ICsgICAgIHJldHVybiAwOwo+ID4+Pj4+ Pj4gK30KPiA+Pj4+Pj4+ICsKPiA+Pj4+Pj4+ICtzdHJ1Y3QgdXNiX3BoeV9yb290aHViICp1c2Jf cGh5X3Jvb3RodWJfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gPj4+Pj4+PiArewo+ID4+Pj4+ Pj4gKyAgICAgc3RydWN0IHVzYl9waHlfcm9vdGh1YiAqcGh5X3Jvb3RodWI7Cj4gPj4+Pj4+PiAr ICAgICBzdHJ1Y3QgdXNiX3BoeV9yb290aHViICpyb290aHViX2VudHJ5Owo+ID4+Pj4+Pj4gKyAg ICAgc3RydWN0IGxpc3RfaGVhZCAqaGVhZDsKPiA+Pj4+Pj4+ICsgICAgIGludCBpLCBudW1fcGh5 cywgZXJyOwo+ID4+Pj4+Pj4gKwo+ID4+Pj4+Pj4gKyAgICAgbnVtX3BoeXMgPSBvZl9jb3VudF9w aGFuZGxlX3dpdGhfYXJncyhkZXYtPm9mX25vZGUsICJwaHlzIiwKPiA+Pj4+Pj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiNwaHktY2VsbHMiKTsKPiA+Pj4+ Pj4+ICsgICAgIGlmIChudW1fcGh5cyA8PSAwKQo+ID4+Pj4+Pj4gKyAgICAgICAgICAgICByZXR1 cm4gTlVMTDsKPiA+Pj4+Pj4+ICsKPiA+Pj4+Pj4+ICsgICAgIHBoeV9yb290aHViID0gdXNiX3Bo eV9yb290aHViX2FsbG9jKGRldik7Cj4gPj4+Pj4+PiArICAgICBpZiAoSVNfRVJSKHBoeV9yb290 aHViKSkKPiA+Pj4+Pj4+ICsgICAgICAgICAgICAgcmV0dXJuIHBoeV9yb290aHViOwo+ID4+Pj4+ Pj4gKwo+ID4+Pj4+Pj4gKyAgICAgZm9yIChpID0gMDsgaSA8IG51bV9waHlzOyBpKyspIHsKPiA+ Pj4+Pj4+ICsgICAgICAgICAgICAgZXJyID0gdXNiX3BoeV9yb290aHViX2FkZF9waHkoZGV2LCBp LCAmcGh5X3Jvb3RodWItPmxpc3QpOwo+ID4+Pj4+Pj4gKyAgICAgICAgICAgICBpZiAoZXJyKQo+ ID4+Pj4+Pj4gKyAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyX291dDsKPiA+Pj4+Pj4+ICsg ICAgIH0KPiA+Pj4+Pj4+ICsKPiA+Pj4+Pj4+ICsgICAgIGhlYWQgPSAmcGh5X3Jvb3RodWItPmxp c3Q7Cj4gPj4+Pj4+PiArCj4gPj4+Pj4+PiArICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KHJvb3Ro dWJfZW50cnksIGhlYWQsIGxpc3QpIHsKPiA+Pj4+Pj4+ICsgICAgICAgICAgICAgZXJyID0gcGh5 X2luaXQocm9vdGh1Yl9lbnRyeS0+cGh5KTsKPiA+Pj4+Pj4KPiA+Pj4+Pj4gVGhlIHBoeV9pbml0 KCkgZnVuY3Rpb24gYWN0dWFsbHkgZW5hYmxlcyB0aGUgUEhZIGNsb2Nrcy4KPiA+Pj4+Pj4gSXQg c2hvdWxkIGJlIG1vdmVkIHRvIHRoZSB1c2JfcGh5X3Jvb3RodWJfZXhpdCgpIHJvdXRpbmUganVz dCBiZWZvcmUgY2FsbGluZyBwaHlfcG93ZXJfb24oKS4KPiA+Pj4+PiBkbyB5b3UgbWVhbiB0aGF0 IHBoeV9pbml0IHNob3VsZCBiZSBtb3ZlZCB0byB1c2JfcGh5X3Jvb3RodWJfcG93ZXJfb24KPiA+ Pj4+PiAoanVzdCBiZWZvcmUgcGh5X3Bvd2VyX29uIGlzIGNhbGxlZCB3aXRoaW4gdXNiX3BoeV9y b290aHViX3Bvd2VyX29uKT8KPiA+Pj4+Pgo+ID4+Pj4KPiA+Pj4+IFllcy4KPiA+Pj4+Cj4gPj4+ Pj4gYW4gZWFybGllciB2ZXJzaW9uIG9mIG15IHBhdGNoIGRpZCBleGFjdGx5IHRoaXMsIGJ1dCBp dCBjYXVzZWQKPiA+Pj4+PiBwcm9ibGVtcyBkdXJpbmcgYSBzdXNwZW5kL3Jlc3VtZSBjeWNsZSBv biBNZWRpYXRlayBkZXZpY2VzCj4gPj4+Pj4gQ2h1bmZlbmcgWXVuIHJlcG9ydGVkIHRoYXQgaXNz dWUgaGVyZSBbMF0sIHF1b3RlIGZyb20gdGhhdCBtYWlsIGZvcgo+ID4+Pj4+IGVhc2llciByZWFk aW5nOgo+ID4+Pj4+ICJJbiBvcmRlciB0byBrZWVwIGxpbmsgc3RhdGUgb24gbXQ4MTczLCB3ZSBq dXN0IHBvd2VyIG9mZiBhbGwgcGh5cyhub3QKPiA+Pj4+PiBleGl0KSB3aGVuIHN5c3RlbSBlbnRl ciBzdXNwZW5kLCB0aGVuIHBvd2VyIG9uIHRoZW0gYWdhaW4gKG5lZWRuJ3QKPiA+Pj4+PiBpbml0 LCBvdGhlcndpc2UgZGV2aWNlIHdpbGwgYmUgZGlzY29ubmVjdGVkKSB3aGVuIHN5c3RlbSByZXN1 bWUsIHRoaXMKPiA+Pj4+PiBjYW4gYXZvaWQgcmUtZW51bWVyYXRpbmcgZGV2aWNlLiIKPiA+Pj4+ Pgo+ID4+Pj4+Pj4gKyAgICAgICAgICAgICBpZiAoZXJyKQo+ID4+Pj4+Pj4gKyAgICAgICAgICAg ICAgICAgICAgIGdvdG8gZXJyX2V4aXRfcGh5czsKPiA+Pj4+Pj4+ICsgICAgIH0KPiA+Pj4+Pj4+ ICsKPiA+Pj4+Pj4+ICsgICAgIHJldHVybiBwaHlfcm9vdGh1YjsKPiA+Pj4+Pj4+ICsKPiA+Pj4+ Pj4+ICtlcnJfZXhpdF9waHlzOgo+ID4+Pj4+Pj4gKyAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeV9j b250aW51ZV9yZXZlcnNlKHJvb3RodWJfZW50cnksIGhlYWQsIGxpc3QpCj4gPj4+Pj4+PiArICAg ICAgICAgICAgIHBoeV9leGl0KHJvb3RodWJfZW50cnktPnBoeSk7Cj4gPj4+Pj4+PiArCj4gPj4+ Pj4+PiArZXJyX291dDoKPiA+Pj4+Pj4+ICsgICAgIHJldHVybiBFUlJfUFRSKGVycik7Cj4gPj4+ Pj4+PiArfQo+ID4+Pj4+Pj4gK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9waHlfcm9vdGh1Yl9pbml0 KTsKPiA+Pj4+Pj4+ICsKPiA+Pj4+Pj4+ICtpbnQgdXNiX3BoeV9yb290aHViX2V4aXQoc3RydWN0 IHVzYl9waHlfcm9vdGh1YiAqcGh5X3Jvb3RodWIpCj4gPj4+Pj4+PiArewo+ID4+Pj4+Pj4gKyAg ICAgc3RydWN0IHVzYl9waHlfcm9vdGh1YiAqcm9vdGh1Yl9lbnRyeTsKPiA+Pj4+Pj4+ICsgICAg IHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQ7Cj4gPj4+Pj4+PiArICAgICBpbnQgZXJyLCByZXQgPSAw Owo+ID4+Pj4+Pj4gKwo+ID4+Pj4+Pj4gKyAgICAgaWYgKCFwaHlfcm9vdGh1YikKPiA+Pj4+Pj4+ ICsgICAgICAgICAgICAgcmV0dXJuIDA7Cj4gPj4+Pj4+PiArCj4gPj4+Pj4+PiArICAgICBoZWFk ID0gJnBoeV9yb290aHViLT5saXN0Owo+ID4+Pj4+Pj4gKwo+ID4+Pj4+Pj4gKyAgICAgbGlzdF9m b3JfZWFjaF9lbnRyeShyb290aHViX2VudHJ5LCBoZWFkLCBsaXN0KSB7Cj4gPj4+Pj4+PiArICAg ICAgICAgICAgIGVyciA9IHBoeV9leGl0KHJvb3RodWJfZW50cnktPnBoeSk7Cj4gPj4+Pj4+PiAr ICAgICAgICAgICAgIGlmIChlcnIpCj4gPj4+Pj4+PiArICAgICAgICAgICAgICAgICAgICAgcmV0 ID0gcmV0Owo+ID4+Pj4+Pj4gKyAgICAgfQo+ID4+Pj4+Pgo+ID4+Pj4+PiBwaHlfZXhpdCgpIHNo b3VsZCBiZSBtb3ZlZCB0byB1c2JfcGh5X3Jvb3RodWJfcG93ZXJvZmYoKSBqdXN0IGFmdGVyIGNh bGxpbmcgcGh5X3Bvd2VyX29mZigpLgo+ID4+Pj4+IGlmIEkgdW5kZXJzdG9vZCBDaHVuZmVuZyBZ dW4gY29ycmVjdGx5IHRoaXMgd2lsbCByZXF1aXJlCj4gPj4+Pj4gcmUtZW51bWVyYXRpb24gb2Yg dGhlIFVTQiBkZXZpY2VzIGFmdGVyIGEgc3VzcGVuZC9yZXN1bWUgY3ljbGUgb24KPiA+Pj4+PiBN ZWRpYXRlayBTb0NzCj4gPj4+Pj4KPiA+Pj4+Cj4gPj4+PiBPSy4gSSBzdXBwb3NlIHRoYXQgdGhl cmUgYXJlIDIgY2FzZXMKPiA+Pj4+IDEpIE1lZGlhdGVrJ3MgY2FzZTogVVNCIGNvbnRyb2xsZXIg Y29udGV4dCByZXRhaW5lZCBhY3Jvc3Mgc3VzcGVuZC9yZXN1bWUuCj4gPj4+PiBSZW1vdGUgd2Fr ZXVwIHByb2JhYmx5IHJlcXVpcmVkLgo+ID4+Pj4gTm8gcmUtZW51bWVyYXRpb24gcHJlZmVycmVk IGFmdGVyIHJlc3VtZS4gcGh5X2V4aXQoKS9waHlfaW5pdCgpIG11c3Qgbm90IGJlIGNhbGxlZAo+ ID4+Pj4gZHVyaW5nIHN1c3BlbmQvcmVzdW1lIHRvIGtlZXAgUEhZIGxpbmsgYWN0aXZlLgo+ID4+ PiBEb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvdXNiL21lZGlhdGVrLG10dTMudHh0 IGluZGVlZCBzaG93cwo+ID4+PiB0aGF0IHRoZSBwYXJlbnQgb2YgdGhlIFVTQiBjb250cm9sbGVy IGNhbiBiZSBtYXJrZWQgYXMgIndha2V1cC1zb3VyY2UiCj4gPj4+Cj4gPj4+PiAyKSBUSSdzIGNh c2U6IGxvdyBwb3dlciBpbXBvcnRhbnQ6IFVTQiBjb250ZXh0IGlzIGxvc3QsIE9LIHRvIHJlLWVu dW1lcmF0ZS4KPiA+Pj4+IHBoeV9leGl0KCkvcGh5X2luaXQoKSBtdXN0IGJlIGNhbGxlZCBkdXJp bmcgc3VzcGVuZC9yZXN1bWUuCj4gPj4+IEFDSwo+ID4+Pgo+ID4+Pj4+PiBXaXRoIHRoYXQgdGhl cmUgaXMgbm90aGluZyBlbHNlIGJlaW5nIGRvbmUgaGVyZS4gU2hvdWxkbid0IHdlIGJlIGRvaW5n IHRoZSBlcXVpdmFsZW50IG9mCj4gPj4+Pj4+IHVzYl9waHlfcm9vdGh1Yl9kZWxfcGh5KCkgYW5k IHVzYl9waHlfcm9vdGh1Yl9mcmVlKCkgaGVyZT8KPiA+Pj4+Pj4KPiA+Pj4+Pj4+ICsKPiA+Pj4+ Pj4+ICsgICAgIHJldHVybiByZXQ7Cj4gPj4+Pj4+PiArfQo+ID4+Pj4+Pj4gK0VYUE9SVF9TWU1C T0xfR1BMKHVzYl9waHlfcm9vdGh1Yl9leGl0KTsKPiA+Pj4+Pj4+ICsKPiA+Pj4+Pj4+ICtpbnQg dXNiX3BoeV9yb290aHViX3Bvd2VyX29uKHN0cnVjdCB1c2JfcGh5X3Jvb3RodWIgKnBoeV9yb290 aHViKQo+ID4+Pj4+Pj4gK3sKPiA+Pj4+Pj4+ICsgICAgIHN0cnVjdCB1c2JfcGh5X3Jvb3RodWIg KnJvb3RodWJfZW50cnk7Cj4gPj4+Pj4+PiArICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkOwo+ ID4+Pj4+Pj4gKyAgICAgaW50IGVycjsKPiA+Pj4+Pj4+ICsKPiA+Pj4+Pj4+ICsgICAgIGlmICgh cGh5X3Jvb3RodWIpCj4gPj4+Pj4+PiArICAgICAgICAgICAgIHJldHVybiAwOwo+ID4+Pj4+Pj4g Kwo+ID4+Pj4+Pj4gKyAgICAgaGVhZCA9ICZwaHlfcm9vdGh1Yi0+bGlzdDsKPiA+Pj4+Pj4+ICsK PiA+Pj4+Pj4+ICsgICAgIGxpc3RfZm9yX2VhY2hfZW50cnkocm9vdGh1Yl9lbnRyeSwgaGVhZCwg bGlzdCkgewo+ID4+Pj4+Pj4gKyAgICAgICAgICAgICBlcnIgPSBwaHlfcG93ZXJfb24ocm9vdGh1 Yl9lbnRyeS0+cGh5KTsKPiA+Pj4+Pj4+ICsgICAgICAgICAgICAgaWYgKGVycikKPiA+Pj4+Pj4+ ICsgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycl9vdXQ7Cj4gPj4+Pj4+PiArICAgICB9Cj4g Pj4+Pj4+PiArCj4gPj4+Pj4+PiArICAgICByZXR1cm4gMDsKPiA+Pj4+Pj4+ICsKPiA+Pj4+Pj4+ ICtlcnJfb3V0Ogo+ID4+Pj4+Pj4gKyAgICAgbGlzdF9mb3JfZWFjaF9lbnRyeV9jb250aW51ZV9y ZXZlcnNlKHJvb3RodWJfZW50cnksIGhlYWQsIGxpc3QpCj4gPj4+Pj4+PiArICAgICAgICAgICAg IHBoeV9wb3dlcl9vZmYocm9vdGh1Yl9lbnRyeS0+cGh5KTsKPiA+Pj4+Pj4+ICsKPiA+Pj4+Pj4+ ICsgICAgIHJldHVybiBlcnI7Cj4gPj4+Pj4+PiArfQo+ID4+Pj4+Pj4gK0VYUE9SVF9TWU1CT0xf R1BMKHVzYl9waHlfcm9vdGh1Yl9wb3dlcl9vbik7Cj4gPj4+Pj4+PiArCj4gPj4+Pj4+PiArdm9p ZCB1c2JfcGh5X3Jvb3RodWJfcG93ZXJfb2ZmKHN0cnVjdCB1c2JfcGh5X3Jvb3RodWIgKnBoeV9y b290aHViKQo+ID4+Pj4+Pj4gK3sKPiA+Pj4+Pj4+ICsgICAgIHN0cnVjdCB1c2JfcGh5X3Jvb3Ro dWIgKnJvb3RodWJfZW50cnk7Cj4gPj4+Pj4+PiArCj4gPj4+Pj4+PiArICAgICBpZiAoIXBoeV9y b290aHViKQo+ID4+Pj4+Pj4gKyAgICAgICAgICAgICByZXR1cm47Cj4gPj4+Pj4+PiArCj4gPj4+ Pj4+PiArICAgICBsaXN0X2Zvcl9lYWNoX2VudHJ5X3JldmVyc2Uocm9vdGh1Yl9lbnRyeSwgJnBo eV9yb290aHViLT5saXN0LCBsaXN0KQo+ID4+Pj4+Pj4gKyAgICAgICAgICAgICBwaHlfcG93ZXJf b2ZmKHJvb3RodWJfZW50cnktPnBoeSk7Cj4gPj4+Pj4+Cj4gPj4+Pj4+IE5vdCBkb2luZyB0aGUg cGh5X2V4aXQoKSBoZXJlIGxlYXZlcyB0aGUgY2xvY2tzIGVuYWJsZWQgb24gb3VyIFNvQyBhbmQK PiA+Pj4+Pj4gd2UncmUgbm8gbG9uZ2VyIGFibGUgdG8gcmVhY2ggbG93IHBvd2VyIHN0YXRlcyBv biBzeXN0ZW0gc3VzcGVuZC4KPiA+Pj4+PiBJJ20gbm90IHN1cmUgd2hlcmUgdGhpcyBwcm9ibGVt IHNob3VsZCBiZSBzb2x2ZWQ6Cj4gPj4+Pj4gLSBzZXQgc2tpcF9waHlfaW5pdGlhbGl6YXRpb24g aW4gc3RydWN0IHVzYl9oY2QgdG8gMSBmb3IgdGhlIGFmZmVjdGVkCj4gPj4+Pj4gVEkgcGxhdGZv cm1zCj4gPj4+Pgo+ID4+Pj4gTWFueSBUSSBwbGF0Zm9ybXMgYXJlIGFmZmVjdGVkLCBvbWFwNSos IGRyYTcqLCBhbTQzKgo+ID4+Pj4KPiA+Pj4+PiAtIGZpeCB0aGlzIGluIHRoZSB1c2JfcGh5X3Jv b3RodWIgY29kZQo+ID4+Pj4KPiA+Pj4+IEknZCB2b3RlIGZvciBmaXhpbmcgaXQgaW4gdGhlIHVz Yl9waHlfcm9vdGh1YiBjb2RlLiBIb3c/Cj4gPj4+PiBIb3cgYWJvdXQgdXNpbmcgdGhlIGRldmlj ZV9jYW5fd2FrZXVwKCkgdG8gZGVjaWRlIGlmIHdlIHNob3VsZCBjYWxsIHBoeV9leGl0KCkvaW5p dCgpIG9yIG5vdD8KPiA+Pj4+IElmIHRoZSBVU0IgZGV2aWNlIGNhbid0IHdha2V1cCB0aGUgc3lz dGVtIHRoZXJlIGlzIG5vIHBvaW50IGluIGtlZXBpbmcgaXQgcG93ZXJlZC9jbG9ja2VkIHJpZ2h0 Pwo+ID4+PiBAQ2h1bmZlbmc6IGNhbiB5b3UgY29uZmlybSBSb2dlcidzIGlkZWEgdGhhdCB3ZSBj b3VsZCBjYWxsIHBoeV9leGl0IGlmCj4gPj4+IHRoZSBjb250cm9sbGVyIGlzICpOT1QqIG1hcmtl ZCBhcyAid2FrZXVwLXNvdXJjZSI/Cj4gPj4+IEkgYW0gYWxzbyBub3Qgc3VyZSBpZiBpdCB3b3Vs ZCB3b3JrLCBzaW5jZSB0aGUgIndha2V1cC1zb3VyY2UiCj4gPj4+IHByb3BlcnR5IGlzIGRlZmlu ZWQgb24gdGhlIFVTQiBjb250cm9sbGVyJ3MgcGFyZW50IG5vZGUgaW4gY2FzZSBvZiB0aGUKPiA+ Pj4gTWVkaWF0ZWsgTVRVMyAoTWVkaWF0ZWsgVVNCMy4wIERSRCkgY29udHJvbGxlcgo+ID4+Pgo+ ID4+IFZlcnkgc29ycnksIEkgZm9yZ290IHRoYXQgTVRVMyAmIHhIQ0kgZHJpdmVycyBhbHdheXMg c2V0IHRoZW0gYXMgd2FrZXVwCj4gPj4gZGV2aWNlcyBieSBkZXZpY2VfaW5pdF93YWtldXAoZGV2 LCB0cnVlKSxidXQgbm90IGRlcGVuZGVudCBvbgo+ID4+ICJ3YWtldXAtc291cmNlIiBwcm9wZXJ0 eSwgc28gbWF5YmUgd2UgY2FuIHVzZSBkZXZpY2VfY2FuX3dha2V1cCgpIHRvCj4gPj4gZGVjaWRl IHdoZXRoZXIgY2FsbCBwaHlfZXhpdCgpL2luaXQoKSBvciBub3QuCj4gPiB0aGUgNjQtYml0IEFt bG9naWMgTWVzb24gR1hML0dYTSBTb0NzIGRvbid0IHN1cHBvcnQgc3VzcGVuZC9yZXN1bWUKPiA+ IHlldCwgc28gSSBjYW5ub3QgdGVzdCB0aGlzCj4gPiBiYXNlZCBvbiB0aGlzIHN1Z2dlc3Rpb24g SSB0aHJldyB1cCB0d28gcGF0Y2hlcyB3aGljaCBhcmUgKmNvbXBpbGUKPiA+IHRlc3RlZCBvbmx5 KiBiYXNlZCBvbiBHcmVnJ3MgdXNiLW5leHQgYnJhbmNoCj4gPiB5b3UgY2FuIGZpbmQgdGhlbSBo ZXJlOiBbMF0gKGFzIHdlbGwgYXMgYXR0YWNoZWQgdG8gdGhpcyBtYWlsKQo+ID4gCj4gPiBAQ2h1 bmZlbmc6IGNhbiB5b3UgcGxlYXNlIHRlc3QgdGhpcyBvbiBvbmUgb2YgeW91ciBNZWRpYXRlayBT b0NzPwo+ID4gQFJvZ2VyOiBjYW4geW91IHBsZWFzZSB0ZXN0IHRoaXMgb24gYSBUSSBTb0M/Cj4g PiAKPiA+IChhcG9sb2dpZXMgaW4gYWR2YW5jZSBpZiB0aGVzZSBwYXRjaGVzIGRvbid0IHdvcmsp Cj4gPiAKPiA+IHBsZWFzZSBub3RlIHRoYXQgSSB3b24ndCBoYXZlIGFjY2VzcyB0byBteSBjb21w dXRlciB1bnRpbCBTYXR1cmRheS4KPiA+IGlmIHRoZXNlIHBhdGNoZXMgbmVlZCB0byBiZSByZXdy aXR0ZW4vcmVwbGFjZWQvZXRjLiB0aGVuIGZlZWwgZnJlZSB0bwo+ID4gc2VuZCB5b3VyIG93biB2 ZXJzaW9uIHRvIHRoZSBsaXN0Cj4gCj4gSGFkIHRvIGRvIHRoZSBmb2xsb3dpbmcgdG8gYnVpbGQK PiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy91c2IvY29yZS9oY2QuYyBiL2RyaXZlcnMvdXNiL2Nv cmUvaGNkLmMKPiBpbmRleCA2ZDRhNDE5Li4yODg0NjA3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv dXNiL2NvcmUvaGNkLmMKPiArKysgYi9kcml2ZXJzL3VzYi9jb3JlL2hjZC5jCj4gQEAgLTIyNjIs NyArMjI2Miw3IEBAIGludCBoY2RfYnVzX3N1c3BlbmQoc3RydWN0IHVzYl9kZXZpY2UgKnJoZGV2 LCBwbV9tZXNzYWdlX3QgbXNnKQo+ICAJCWhjZC0+c3RhdGUgPSBIQ19TVEFURV9TVVNQRU5ERUQ7 Cj4gIAo+ICAJCWlmICghUE1TR19JU19BVVRPKG1zZykpCj4gLQkJCXVzYl9waHlfcm9vdGh1Yl9z dXNwZW5kKGhjZC0+cGh5X3Jvb3RodWIpOwo+ICsJCQl1c2JfcGh5X3Jvb3RodWJfc3VzcGVuZCgm cmhkZXYtPmRldiwgaGNkLT5waHlfcm9vdGh1Yik7CgpUcnkgdG8gdXNlIGhjZC0+c2VsZi5jb250 cm9sbGVyIGluc3RlYWQgb2YgJnJoZGV2LT5kZXY7Cgo+ICAKPiAgCQkvKiBEaWQgd2UgcmFjZSB3 aXRoIGEgcm9vdC1odWIgd2FrZXVwIGV2ZW50PyAqLwo+ICAJCWlmIChyaGRldi0+ZG9fcmVtb3Rl X3dha2V1cCkgewo+IEBAIC0yMzAyLDcgKzIzMDIsNyBAQCBpbnQgaGNkX2J1c19yZXN1bWUoc3Ry dWN0IHVzYl9kZXZpY2UgKnJoZGV2LCBwbV9tZXNzYWdlX3QgbXNnKQo+ICAJfQo+ICAKPiAgCWlm ICghUE1TR19JU19BVVRPKG1zZykpIHsKPiAtCQlzdGF0dXMgPSB1c2JfcGh5X3Jvb3RodWJfcmVz dW1lKGhjZC0+cGh5X3Jvb3RodWIpOwo+ICsJCXN0YXR1cyA9IHVzYl9waHlfcm9vdGh1Yl9yZXN1 bWUoJnJoZGV2LT5kZXYsIGhjZC0+cGh5X3Jvb3RodWIpOwpkaXR0bwo+ICAJCWlmIChzdGF0dXMp Cj4gIAkJCXJldHVybiBzdGF0dXM7Cj4gIAl9Cj4gQEAgLTIzNDQsNyArMjM0NCw3IEBAIGludCBo Y2RfYnVzX3Jlc3VtZShzdHJ1Y3QgdXNiX2RldmljZSAqcmhkZXYsIHBtX21lc3NhZ2VfdCBtc2cp Cj4gIAkJfQo+ICAJfSBlbHNlIHsKPiAgCQloY2QtPnN0YXRlID0gb2xkX3N0YXRlOwo+IC0JCXVz Yl9waHlfcm9vdGh1Yl9zdXNwZW5kKGhjZC0+cGh5X3Jvb3RodWIpOwo+ICsJCXVzYl9waHlfcm9v dGh1Yl9zdXNwZW5kKCZyaGRldi0+ZGV2LCBoY2QtPnBoeV9yb290aHViKTsKZGl0dG8KPiAgCQlk ZXZfZGJnKCZyaGRldi0+ZGV2LCAiYnVzICVzIGZhaWwsIGVyciAlZFxuIiwKPiAgCQkJCSJyZXN1 bWUiLCBzdGF0dXMpOwo+ICAJCWlmIChzdGF0dXMgIT0gLUVTSFVURE9XTikKPiAKPiAKPiBBbmQg dGhlIGZvbGxvd2luZyB0byBmaXggcnVudGltZSBpc3N1ZXMKPiAKPiBkaWZmIC0tZ2l0IGEvZHJp dmVycy91c2IvY29yZS9waHkuYyBiL2RyaXZlcnMvdXNiL2NvcmUvcGh5LmMKPiBpbmRleCAyZWNh MzcxLi44NTk4OTA2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvdXNiL2NvcmUvcGh5LmMKPiArKysg Yi9kcml2ZXJzL3VzYi9jb3JlL3BoeS5jCj4gQEAgLTMyLDkgKzMyLDkgQEAgc3RhdGljIGludCB1 c2JfcGh5X3Jvb3RodWJfYWRkX3BoeShzdHJ1Y3QgZGV2aWNlICpkZXYsIGludCBpbmRleCwKPiAg CQkJcmV0dXJuIFBUUl9FUlIocGh5KTsKPiAgCX0KPiAgCj4gLQlyb290aHViX2VudHJ5ID0gdXNi X3BoeV9yb290aHViX2FsbG9jKGRldik7Cj4gLQlpZiAoSVNfRVJSKHJvb3RodWJfZW50cnkpKQo+ IC0JCXJldHVybiBQVFJfRVJSKHJvb3RodWJfZW50cnkpOwo+ICsJcm9vdGh1Yl9lbnRyeSA9IGRl dm1fa3phbGxvYyhkZXYsIHNpemVvZigqcm9vdGh1Yl9lbnRyeSksIEdGUF9LRVJORUwpOwo+ICsJ aWYgKCFyb290aHViX2VudHJ5KQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICAKPiAgCXJvb3RodWJf ZW50cnktPnBoeSA9IHBoeTsKPiAgCj4gQEAgLTE2Miw3ICsxNjIsNyBAQCBpbnQgdXNiX3BoeV9y b290aHViX3N1c3BlbmQoc3RydWN0IGRldmljZSAqZGV2LAo+ICAJdXNiX3BoeV9yb290aHViX3Bv d2VyX29mZihwaHlfcm9vdGh1Yik7Cj4gIAo+ICAJLyoga2VlcCB0aGUgUEhZcyBpbml0aWFsaXpl ZCBzbyB0aGUgZGV2aWNlIGNhbiB3YWtlIHVwIHRoZSBzeXN0ZW0gKi8KPiAtCWlmIChkZXZpY2Vf Y2FuX3dha2V1cChkZXYpKQo+ICsJaWYgKGRldmljZV9tYXlfd2FrZXVwKGRldikpCkl0J3Mgb2sK PiAgCQlyZXR1cm4gMDsKPiAgCj4gIAlyZXR1cm4gdXNiX3BoeV9yb290aHViX2V4aXQocGh5X3Jv b3RodWIpOwo+IAo+IAo+IEhlcmUgYXJlIG15IG9iZXJ2YXRpb25zCj4gLSBpZiB3YWtldXAgaXMg ZGlzYWJsZWQgaXQgd29ya3MgZmluZSBhcyBleHBlY3RlZCwgcGh5X2V4aXQoKSBpcyBjYWxsZWQg YW5kIEknbSBhYmxlIHRvIHJlYWNoCj4gbG93IHBvd2VyIHN0YXRlcy4KPiAKPiAtIGlmIHdha2V1 cCBpcyBlbmFibGVkICgvc3lzL2J1cy91c2IvZGV2aWNlL3VzYjIvcG93ZXIvd2FrZXVwKSwgdGhl biBoY2RfYnVzX3N1c3BlbmQoKSBpcyBuZXZlciBjYWxsZWQKPiBhbmQgc28gcGh5X3Bvd2VyX29m ZiB3b24ndCBiZSBjYWxsZWQgZWl0aGVyLgo+IAo+IFRoaXMgbWVhbnMgdGhhdCB0aGUgZGV2aWNl X21heV93YWtldXAoKSBjaGVjayBpcyByZWR1bmRhbnQuIFNvcnJ5IGZvciBzdWdnZXN0aW5nIHRo aXMuCllvdSBtYXliZSB1c2UgYSB3cm9uZyBkZXZpY2UuCj4gCj4gVGhpcyBhbHNvIG1lYW5zIHRo YXQgd2FrZXVwIGlzIG5vdCBlbmFibGVkIG9uIENodW5mZW5nJ3MgcGxhdGZvcm0uIENodW5mZW5n LCBjYW4geW91IGNvbmZpcm0gdGhpcz8KPiBXaGF0IGRvZXMgL3N5cy9idXMvdXNiL2RldmljZS91 c2I8Pz4vcG93ZXIvd2FrZXVwIHNheT8KVGhleSBhcmUgYWxzbyAiZGlzYWJsZWQiIHN0YXRlOwpJ IHRoaW5rIHdlIHNob3VsZCB1c2Ugd2FrZXVwIHN0YXRlIG9mIGhjZCBjb250cm9sbGVyLCBidXQg bm90CnVzYl9kZXZpY2UncywgcGxlYXNlIHRlc3QgaXQsIHRoYW5rcy4KCj4gCj4gQ2h1bmZlbmcg c2VudCBhIHBhdGNoIFsxXSB0byBzZXQgc2hhcmVkX2hjZC0+c2tpcF9waHlfaW5pdGlhbGl6YXRp b24gZm9yIHRoZSBtdGsgcGxhdGZvcm0uCj4gQ2h1bmZlbmcsIHdoeSBkaWQgeW91IG5lZWQgdGhp cyBwYXRjaD8KPiAKPiBbMV0gLSBodHRwczovL3BhdGNod29yay5rZXJuZWwub3JnL3BhdGNoLzEw Mjk4NjQxLwo+IAo+IFdoYXQgb3B0aW9ucyBkbyB3ZSBoYXZlIG5vdyB0byBmaXggdGhlIG9yaWdp bmFsIGlzc3VlPwo+IAo+IENodW5nZmVuZywgY2FuIHlvdSBzZXQgc2tpcF9waHlfaW5pdGlhbGl6 YXRpb24gZm9yIHRoZSBoY2QgdGhhdCBoYXMgUEhZJ3MgbGlua2VkIHRvIGl0Pwo+IFRoZW4gdXNi X3BoeV9yb290aHViXyooKSBkcml2ZXIgd2lsbCBiZSBhIG5vLW9wIGZvciB5b3UuIEFuZCB3ZSBj b3VsZCByZXZlcnQgdG8gdGhlIG9yaWdpbmFsIGFwcHJvYWNoCj4gb2YgZG9pbmcgcGh5X3Bvd2Vy X29mZigpIGFzIHdlbGwgYXMgcGh5X2V4aXQoKSBkdXJpbmcgc3VzcGVuZC4KPiAKPiBBbHRlcm5h dGl2ZWx5LCBNYXJ0aW4sIGhvdyBhYm91dCBub3QgcmVseWluZyBvbiBza2lwX3BoeV9pbml0aWFs aXphdGlvbiBmbGFnIGJ1dCBoYXZpbmcgZGVmYXVsdCBiZWhhdmlvdXIKPiBvZiBuby1vcCBmb3Ig dGhlIHVzYl9waHlfcm9vdGh1Yl8qKCkgZHJpdmVyLiBBcyBwbGF0Zm9ybXMgbWlncmF0ZSB0byBp dCB0aGV5IGNhbiBzZXQgYSBuZXcKPiBmbGFnIGluIGhjZCB0byB1c2UgaXQ/Cgo+IAo+ID4gCj4g Pj4+Pj4gLSBmaXggdGhpcyBpbiB0aGUgUEhZIGRyaXZlcgo+ID4+Pj4KPiA+Pj4+IFRoZXJlIGlz IG5vdGhpbmcgdG8gZml4IGluIHRoZSBQSFkgZHJpdmVyLiBJdCBpcyBkb2luZyB3aGF0IGl0IGlz IHN1cHBvc2VkIHRvIGRvLgo+ID4+PiBJIGFjdHVhbGx5IHdvbmRlciBpZiBwaHlfb3BzIHNob3Vs ZCBoYXZlIGV4cGxpY2l0IHN1c3BlbmQvcmVzdW1lIHN1cHBvcnQ6Cj4gPj4+IC0gYXNzdW1pbmcg d2UgZGVmaW5lIHR3byBuZXcgY2FsbGJhY2tzOiAuc3VzcGVuZCBhbmQgLnJlc3VtZQo+ID4+PiAt IHRoZSBQSFkgZnJhbWV3b3JrIGNvdWxkIGNhbGwgLnBvd2VyX29mZiBieSBkZWZhdWx0IGlmIC5z dXNwZW5kIGlzIG5vdCBkZWZpbmVkCj4gPj4+IC0gdGhlIFBIWSBmcmFtZXdvcmsgY291bGQgY2Fs bCAucG93ZXJfb24gYnkgZGVmYXVsdCBpZiAucmVzdW1lIGlzIG5vdCBkZWZpbmVkCj4gPj4+IC0g ZHJpdmVycyBjb3VsZCBzZXQgLnN1c3BlbmQgYW5kIC5yZXN1bWUgb24gdGhlaXIgb3duLCBhbGxv d2luZyBtb3JlCj4gPj4+IGZpbmUtZ3JhaW5lZCBjb250cm9sIGJ5IGZvciBleGFtcGxlICpvbmx5 KiBzdG9wcGluZyB0aGUgY2xvY2sgKGJ1dCBub3QKPiA+Pj4gcmUtaW5pdGlhbGl6aW5nIHRoZSBy ZWdpc3RlcnMsIGV0Yy4pCj4gPj4+Cj4gPj4+IEBSb2dlcjogd2hhdCBkbyB5b3UgdGhpbmsgYWJv dXQgdGhpcz8KPiA+Pj4gS2lzaG9uICh0aGUgUEhZIGZyYW1ld29yayBtYWludGFpbmVyKSBpcyBh bHNvIENDJ2VkIC0gSSB3b3VsZCBsaWtlIHRvCj4gPj4+IGhlYXIgaGlzIG9waW5pb24gdG9vCj4g Pj4+Cj4gPj4+Pj4gLSBzb21ld2hlcmUgZWxzZQo+ID4+Pj4+Cj4gPj4+Pj4+PiArfQo+ID4+Pj4+ Pj4gK0VYUE9SVF9TWU1CT0xfR1BMKHVzYl9waHlfcm9vdGh1Yl9wb3dlcl9vZmYpOwo+ID4+Pj4+ Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvdXNiL2NvcmUvcGh5LmggYi9kcml2ZXJzL3VzYi9jb3Jl L3BoeS5oCj4gPj4+Pj4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4+Pj4+Pj4gaW5kZXggMDAw MDAwMDAwMDAwLi42ZmRlNTliZmJmZjgKPiA+Pj4+Pj4+IC0tLSAvZGV2L251bGwKPiA+Pj4+Pj4+ ICsrKyBiL2RyaXZlcnMvdXNiL2NvcmUvcGh5LmgKPiA+Pj4+Pj4+IEBAIC0wLDAgKzEsNyBAQAo+ ID4+Pj4+Pj4gK3N0cnVjdCB1c2JfcGh5X3Jvb3RodWI7Cj4gPj4+Pj4+PiArCj4gPj4+Pj4+PiAr c3RydWN0IHVzYl9waHlfcm9vdGh1YiAqdXNiX3BoeV9yb290aHViX2luaXQoc3RydWN0IGRldmlj ZSAqZGV2KTsKPiA+Pj4+Pj4+ICtpbnQgdXNiX3BoeV9yb290aHViX2V4aXQoc3RydWN0IHVzYl9w aHlfcm9vdGh1YiAqcGh5X3Jvb3RodWIpOwo+ID4+Pj4+Pj4gKwo+ID4+Pj4+Pj4gK2ludCB1c2Jf cGh5X3Jvb3RodWJfcG93ZXJfb24oc3RydWN0IHVzYl9waHlfcm9vdGh1YiAqcGh5X3Jvb3RodWIp Owo+ID4+Pj4+Pj4gK3ZvaWQgdXNiX3BoeV9yb290aHViX3Bvd2VyX29mZihzdHJ1Y3QgdXNiX3Bo eV9yb290aHViICpwaHlfcm9vdGh1Yik7Cj4gPj4+Pj4+Pgo+ID4+Pj4+Pgo+ID4+Pj4KPiAKPiA+ IAo+ID4gWzBdIGh0dHBzOi8vZ2l0aHViLmNvbS94ZGFya2xpZ2h0L2xpbnV4L2NvbW1pdHMvdXNi LXBoeS1yb290aHViLXN1c3BlbmQtcmZjLXYxCj4gPiAKPgotLS0KVG8gdW5zdWJzY3JpYmUgZnJv bSB0aGlzIGxpc3Q6IHNlbmQgdGhlIGxpbmUgInVuc3Vic2NyaWJlIGxpbnV4LXVzYiIgaW4KdGhl IGJvZHkgb2YgYSBtZXNzYWdlIHRvIG1ham9yZG9tb0B2Z2VyLmtlcm5lbC5vcmcKTW9yZSBtYWpv cmRvbW8gaW5mbyBhdCAgaHR0cDovL3ZnZXIua2VybmVsLm9yZy9tYWpvcmRvbW8taW5mby5odG1s Cg==