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: [2/2] dma: xilinx: Add driver for Video Framebuffer IP From: Vishal Sagar Message-Id: Date: Fri, 22 Dec 2017 08:20:52 +0000 To: Vinod Koul , Vishal Sagar Cc: "dmaengine@vger.kernel.org" , Dinesh Kumar , "michal.simek@xilinx.com" , Jeff Mouroux , Radhey Shyam Pandey , Hyun Kwon , Maurice Penners , John Nichols Hyun Kwon List-ID: SGkgVmlub2QsCgpUaGFua3MgZm9yIHlvdXIgcmVwbHkuIApQbGVhc2Ugc2VlIG15IGNvbW1lbnRz IGlubGluZQoKPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQo+IEZyb206IGRtYWVuZ2luZS1v d25lckB2Z2VyLmtlcm5lbC5vcmcgW21haWx0bzpkbWFlbmdpbmUtCj4gb3duZXJAdmdlci5rZXJu ZWwub3JnXSBPbiBCZWhhbGYgT2YgVmlub2QgS291bAo+IFNlbnQ6IFdlZG5lc2RheSwgRGVjZW1i ZXIgMjAsIDIwMTcgMTA6MzYgUE0KPiBUbzogVmlzaGFsIFNhZ2FyIDx2aXNoYWwuc2FnYXJAeGls aW54LmNvbT4KPiBDYzogZG1hZW5naW5lQHZnZXIua2VybmVsLm9yZzsgRGluZXNoIEt1bWFyIDxk aW5lc2hrQHhpbGlueC5jb20+Owo+IG1pY2hhbC5zaW1la0B4aWxpbnguY29tOyBKZWZmIE1vdXJv dXggPGptb3Vyb3V4QHhpbGlueC5jb20+OyBSYWRoZXkKPiBTaHlhbSBQYW5kZXkgPHJhZGhleXNA eGlsaW54LmNvbT47IEh5dW4gS3dvbiA8aHl1bmtAeGlsaW54LmNvbT47Cj4gTWF1cmljZSBQZW5u ZXJzIDxtcGVubmVyQHhpbGlueC5jb20+OyBWaXNoYWwgU2FnYXIKPiA8dnNhZ2FyQHhpbGlueC5j b20+OyBKb2huIE5pY2hvbHMgPGpuaWNob2xAeGlsaW54LmNvbT47IEh5dW4gS3dvbgo+IDxoeXVu a0B4aWxpbnguY29tPgo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggMi8yXSBkbWE6IHhpbGlueDogQWRk IGRyaXZlciBmb3IgVmlkZW8gRnJhbWVidWZmZXIgSVAKPiAKPiBPbiBXZWQsIERlYyAyMCwgMjAx NyBhdCAwMjowMDoxOFBNICswNTMwLCBWaXNoYWwgU2FnYXIgd3JvdGU6Cj4gPiBUaGUgVmlkZW8g RnJhbWVidWZmZXIgSVAgaXMgYXZhaWxhYmxlIGluIHR3byBmb3JtczogcmVhZCBvciB3cml0ZS4K PiA+IFRoaXMgZHJpdmVyIHN1cHBvcnRzIGVpdGhlciBmb3JtIG9mIHRoZSBJUC4KPiA+IEVhY2gg SVAgaXMgYSBzaW5nbGUgY2hhbm5lbCBETUEgYW5kIGlzIHZpZGVvIGZvcm1hdCBhd2FyZS4KPiA+ IEl0IGNhbiByZWFkL3dyaXRlIHZpZGVvIGRhdGEgYXJyYW5nZWQgZnJvbS90byBtZW1vcnkgYXMg cGFja2VkIG9yCj4gPiBzZW1pLXBsYW5hciB3YXkgYmFzZWQgb24gdGhlIHNlbGVjdGVkIHZpZGVv IGZvcm1hdC4KPiA+IFRvIGdldCBsaXN0IG9mIHN1cHBvcnRlZCB2aWRlbyBmb3JtYXRzLCBjbGll bnRzIGNhbiBjYWxsIGNlcnRhaW4gQVBJcwo+ID4gZXhwb3NlZCBieSB0aGUgZHJpdmVyLiBUaGlz IGRyaXZlciBpbnRyb2R1Y2VzIHN1cHBvcnQgZm9yIHRoZXNlIElQcwo+ID4gYW5kIGludGVncmF0 ZXMgd2l0aCB0aGUgRE1BIEVuZ2luZSBGcmFtZXdvcmsuCj4gCj4gVGhlIHN1YnN5dGVtIG5hbWUg aXMgZG1hZW5naW5lIQoKW1Zpc2hhbCBTYWdhcl0gCkFwb2xvZ2llcy4gVGhpcyBpcyBteSBmaXJz dCBpbnN0YW5jZSBvZiBzZW5kaW5nIGFjcm9zcyBwYXRjaGVzIHRvIGNvbW11bml0eS4gCkkgc2F3 IHRoZSBwcmVjZWRlbmNlIGZvciB0aGlzIGluIG90aGVyIHhpbGlueCBkcml2ZXIgY29tbWl0IG1l c3NhZ2VzIHNvIGtlcHQgaXQgYXMgaXQgaXMuCkkgd2lsbCBtYWtlIHRoZSBjaGFuZ2VzIGFzICJk bWFlbmdpbmU6IHhpbGlueDogIiBpbiBuZXh0IHZlcnNpb24uCgo+IAo+ID4gU2lnbmVkLW9mZi1i eTogUmFkaGV5IFNoeWFtIFBhbmRleSA8cmFkaGV5c0B4aWxpbnguY29tPgo+ID4gU2lnbmVkLW9m Zi1ieTogSm9obiBOaWNob2xzIDxqbmljaG9sQHhpbGlueC5jb20+Cj4gPiBTaWduZWQtb2ZmLWJ5 OiBKZWZmcmV5IE1vdXJvdXggPGptb3Vyb3V4QHhpbGlueC5jb20+Cj4gPiBTaWduZWQtb2ZmLWJ5 OiBNaWNoYWwgU2ltZWsgPG1pY2hhbC5zaW1la0B4aWxpbnguY29tPgo+ID4gU2lnbmVkLW9mZi1i eTogSHl1biBLd29uIDxoeXVuLmt3b25AeGlsaW54LmNvbT4KPiA+IFNpZ25lZC1vZmYtYnk6IFZp c2hhbCBTYWdhciA8dnNhZ2FyQHhpbGlueC5jb20+Cj4gPiAtLS0KPiA+ICBkcml2ZXJzL2RtYS9L Y29uZmlnICAgICAgICAgICAgICAgIHwgICAxNCArLQo+ID4gIGRyaXZlcnMvZG1hL3hpbGlueC9N YWtlZmlsZSAgICAgICAgfCAgICAxICsKPiA+ICBkcml2ZXJzL2RtYS94aWxpbngveGlsaW54X2Zy bWJ1Zi5jIHwgMTE1NQo+ID4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCj4g Cj4gVGhhdHMgYSB2ZXJ5IGxhcmdlIGZpbGUgZm9yIHJldmlldywgZG8gY29uc2lkZXIgc3BsaXR0 aW5nIHN0dWZmCj4gCj4gPiBAQCAtMzQyLDcgKzM0Miw3IEBAIGNvbmZpZyBNT1hBUlRfRE1BCj4g PiAgCXNlbGVjdCBETUFfVklSVFVBTF9DSEFOTkVMUwo+ID4gIAloZWxwCj4gPiAgCSAgRW5hYmxl IHN1cHBvcnQgZm9yIHRoZSBNT1hBIEFSVCBTb0MgRE1BIGNvbnRyb2xsZXIuCj4gPiAtCj4gPiAr Cj4gCj4gd2h5IHRoaXMgbm9pc2UsIHRoaXMgcGF0Y2ggaGFzIHNvbWUgbWFueSBzaWduLW9mZidz IGJ1dCBkaWRudCBhbnlvbmUgc2VlCj4gdGhpcyBub2lzZT8KCltWaXNoYWwgU2FnYXJdIApJIGlu dHJvZHVjZWQgdGhpcy4gTXkgbWlzdGFrZS4gSSB3aWxsIGZpeCBpdCBpbiBuZXh0IHZlcnNpb24u Cgo+IAo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gCj4gQ29weXJp Z2h0IG5lZWRzIHRvIGZvbGxvdyB0aGlzIGluIEM5OSBzdHlsZQo+IAo+ID4gKy8qCj4gPiArICog RE1BRW5naW5lIGRyaXZlciBmb3IgWGlsaW54IEZyYW1lYnVmZmVyIElQCj4gPiArICoKPiA+ICsg KiBDb3B5cmlnaHQgKEMpIDIwMTYgLSAyMDE3IFhpbGlueCwgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy dmVkLgo+ID4gKyAqCj4gPiArICogQXV0aG9yczogUmFkaGV5IFNoeWFtIFBhbmRleSA8cmFkaGV5 c0B4aWxpbnguY29tPgo+ID4gKyAqICAgICAgICAgIEpvaG4gTmljaG9scyA8am5pY2hvbEB4aWxp bnguY29tPgo+ID4gKyAqICAgICAgICAgIEplZmZyZXkgTW91cm91eCA8am1vdXJvdXhAeGlsaW54 LmNvbT4KPiA+ICsgKgo+ID4gKyAqIEJhc2VkIG9uIHRoZSBGcmVlc2NhbGUgRE1BIGRyaXZlci4K PiA+ICsgKgo+ID4gKyAqIERlc2NyaXB0aW9uOgo+ID4gKyAqIFRoZSBBWEkgRnJhbWVidWZmZXIg Y29yZSBpcyBhIHNvZnQgWGlsaW54IElQIGNvcmUgdGhhdAo+ID4gKyAqIHByb3ZpZGVzIGhpZ2gt YmFuZHdpZHRoIGRpcmVjdCBtZW1vcnkgYWNjZXNzIGJldHdlZW4gbWVtb3J5Cj4gPiArICogYW5k IEFYSTQtU3RyZWFtLgo+ID4gKyAqCj4gPiArICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdh cmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgo+ID4gK21vZGlmeQo+ID4gKyAqIGl0 IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVi bGlzaGVkCj4gPiArYnkKPiA+ICsgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRo ZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgo+ID4gKyAqIChhdCB5b3VyIG9wdGlvbikg YW55IGxhdGVyIHZlcnNpb24uCj4gCj4gd2h5IGRvIHlvdSBuZWVkIHRoaXMgbGljZW5zZSB0ZXh0 PyBXaXRoIFNQRFggdGFnIHRoaXMgaXMgaW1wbGllZC4uCj4gCltWaXNoYWwgU2FnYXJdIApJIHdp bGwgZml4IGl0IG9uY2UgSSBnZXQgYSBjbGFyaWZpY2F0aW9uIGludGVybmFsbHkuCgo+ID4gKyNp bmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvZG1hL3hpbGlueF9m cm1idWYuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvZG1hcG9vbC5oPgo+ID4gKyNpbmNsdWRlIDxs aW51eC9ncGlvL2NvbnN1bWVyLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KPiA+ICsj aW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L2lvLmg+Cj4g PiArI2luY2x1ZGUgPGxpbnV4L2lvcG9sbC5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUu aD4KPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfYWRkcmVzcy5oPgo+ID4gKyNpbmNsdWRlIDxsaW51 eC9vZl9kbWEuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvb2ZfaXJxLmg+Cj4gPiArI2luY2x1ZGUg PGxpbnV4L29mX3BsYXRmb3JtLmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KPiA+ICsj aW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+Cj4gCj4gZG8geW91IG5lZWQgc28gbWFueSBoZWFk ZXJzPwo+IApbVmlzaGFsIFNhZ2FyXSAKSSB3aWxsIHJlbW92ZSBvbmVzIG5vdCByZXF1aXJlZCBp biBuZXh0IHZlcnNpb24uCgo+ID4gK3N0cnVjdCB4aWxpbnhfZnJtYnVmX2NoYW4gewo+ID4gKwlz dHJ1Y3QgeGlsaW54X2ZybWJ1Zl9kZXZpY2UgKnhkZXY7Cj4gPiArCS8qIERlc2NyaXB0b3Igb3Bl cmF0aW9uIGxvY2sgKi8KPiAKPiB0aGlzIGlzIGR1cGxpY2F0ZSBjb21tZW50CltWaXNoYWwgU2Fn YXJdIApXaWxsIGZpeCBpbiBuZXh0IHZlcnNpb24uCgo+IAo+ID4gK3N0YXRpYyBMSVNUX0hFQUQo ZnJtYnVmX2NoYW5fbGlzdCk7Cj4gPiArc3RhdGljIERFRklORV9NVVRFWChmcm1idWZfY2hhbl9s aXN0X2xvY2spOwo+IAo+IHdoeSBkbyB5b3UgbmVlZCB0aGVzZSBnbG9iYWxzPwo+IApbVmlzaGFs IFNhZ2FyXSAKVGhlIGZyYW1lIGJ1ZmZlciByZWFkIGFuZCB3cml0ZSBhcmUgU29mdCBJUHMgd2hp Y2ggY2FuIGJlIGNvbmZpZ3VyZWQgdG8gc3VwcG9ydCBkaWZmZXJlbnQgdmlkZW8gZm9ybWF0cy4g ClBsZWFzZSByZWZlciB0byBQRzI3OCBQcm9kdWN0IEd1aWRlIGZvciBWaWRlbyBGcmFtZSBCdWZm ZXIgUmVhZCBhbmQgV3JpdGUgdjIuMC4KVGhlIGNsaWVudCBkcml2ZXIgd291bGQgd2FudCB0byBr bm93IHdoYXQgYXJlIHRoZSB2aWRlbyBmb3JtYXRzIHN1cHBvcnRlZCBhbmQgc2V0IHRoZSBmb3Jt YXQgYWNjb3JkaW5nbHkuCkZvciB0aGlzIHRoZXJlIGFyZSBBUElzIGV4cG9zZWQgYnkgdGhpcyBk cml2ZXIuIAoKVGhlIGZybWJ1Zl9jaGFuX2xpc3QgaXMgYSBnbG9iYWwgbGlzdCBzbyB0aGUgZHJp dmVyIGNhbiBkZXRlcm1pbmUgaWYgYSBkbWFfY2hhbiBvYmplY3QgY2FuIHNhZmVseSBiZSB1bndy YXBwZWQgaW50byBhIHhpbGlueF9mcm1idWZfY2hhbiBvYmplY3QuCldoZW4gYSBjbGllbnQgY2Fs bHMgeGlsaW54X3hkbWFfc2V0X2NvbmZpZygpLCB3ZSBhc3N1bWUgaXQgZG9lcyBzbyB3aXRob3V0 IGtub3dpbmcgZm9yIHN1cmUgCmlmIHRoZSBkbWFfY2hhbiBpbnN0YW5jZSBpdCBpcyBwYXNzaW5n IGluIGFjdHVhbGx5IHJlcHJlc2VudHMgYSBGcmFtZWJ1ZmZlciBjaGFubmVsIG9yIHNvbWUgb3Ro ZXIgY2hhbm5lbC4gICAKQnkga2VlcGluZyBhIGdsb2JhbCBsaXN0IG9mIGZyYW1lYnVmZmVyIGNo YW5uZWwgb2JqZWN0cyB0aGF0IGhhdmUgYmVlbiByZWdpc3RlcmVkIGR1cmluZyBwcm9iZSwgCndl IGNhbiBjb21wYXJlIHRoZSBkbWFfY2hhbiByZWZlcmVuY2UgdG8gb25lIGFzc29jaWF0ZWQgd2l0 aCBhIGZyYW1lYnVmZmVyIGNoYW5uZWwgb2JqZWN0LiAgIAoKSWYgdGhleSBtYXRjaCwgdGhlbiB3 ZSBrbm93IHRoYXQgdGhlIGRtYV9jaGFuIG9iamVjdCBpbnN0YW5jZSByZXByZXNlbnRzIGEgZnJh bWVidWZmZXIgYW5kIAp3ZSBjYW4gcHJvY2VlZCB0byBzYWZlbHkgdW53cmFwIHRoaXMgYW5kIGdl dCBhdCB0aGUgdW5kZXJseWluZyBGcmFtZWJ1ZmZlciBjaGFubmVsIHRvIGFzc2lnbiB0aGUgdmlk ZW8gZm9ybWF0LiAgIAoKSWYgaXQgaXMgbm90IGEgbWF0Y2gsIHRoZW4gdGhpcyBkbWEgY2hhbm5l bCBsaWtlbHkgcmVwcmVzZW50cyBzb21lIG90aGVyIGRtYSB0eXBlIChlLmcuIHZkbWEpIGFuZCB0 aGlzIGNhbGwganVzdCBiZWNvbWVzIGEgbm8tb3AuIAoKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0 IHhpbGlueF9mcm1idWZfZm9ybWF0X2Rlc2MgeGlsaW54X2ZybWJ1Zl9mb3JtYXRzW10gPQo+IHsK PiA+ICsJewo+ID4gKwkJLmR0c19uYW1lID0gInhiZ3I4ODg4IiwKPiA+ICsJCS5pZCA9IFhJTElO WF9GUk1CVUZfRk1UX1JHQlg4LAo+ID4gKwkJLmJwcCA9IDQsCj4gPiArCQkubnVtX3BsYW5lcyA9 IDEsCj4gPiArCQkuZHJtX2ZtdCA9IERSTV9GT1JNQVRfWEJHUjg4ODgsCj4gPiArCQkudjRsMl9m bXQgPSAwLAo+ID4gKwkJLmZtdF9iaXRtYXNrID0gQklUKDApLAo+ID4gKwl9LAo+ID4gKwl7Cj4g PiArCQkuZHRzX25hbWUgPSAidW5zdXBwb3J0ZWQiLAo+ID4gKwkJLmlkID0gWElMSU5YX0ZSTUJV Rl9GTVRfWVVWWDgsCj4gPiArCQkuYnBwID0gNCwKPiA+ICsJCS5udW1fcGxhbmVzID0gMSwKPiA+ ICsJCS5kcm1fZm10ID0gMCwKPiA+ICsJCS52NGwyX2ZtdCA9IDAsCj4gPiArCQkuZm10X2JpdG1h c2sgPSBCSVQoMSksCj4gPiArCX0sCj4gCj4gYW0gbm8gRFQgZXhwZXJ0LCBidXQgdGhpcyBkb2Vz bid0IGxvb2sgcmlnaHQgdG8gbWUuIENhcmUgdG8gZXhwbGFpbiB3aGF0IHRoaXMKPiBzdHJ1Y3Qg ZG9lcz8KPiAKW1Zpc2hhbCBTYWdhcl0gCgpUaGlzIHRhYmxlIGlzIGNvbnRhaW5zIG1ldGFkYXRh IGZvciBhbGwgdGhlIGRpZmZlcmVudCB2aWRlbyBmb3JtYXRzIHRoZXNlIHNvZnQgSVBzIHN1cHBv cnQuCk9uZSBvciBtb3JlIHN0cmluZ3MgbWF0Y2hpbmcgdGhlIC5kdHNfbmFtZSBtZW1iZXIgc2hh bGwgYmUgcHJlc2VudCBpbiB0aGUgZGV2aWNlIHRyZWUgbm9kZSAKcmVwcmVzZW50aW5nIHRoZSB2 aWRlbyBmb3JtYXRzIHNlbGVjdGVkIGJ5IHN5c3RlbSBkZXNpZ25lciB0byBvcHRpbWl6ZSBsb2dp YyBmb290cHJpbnQgb2YgdGhlIElQLgoKQmFzZWQgb24gdGhlIHN0cmluZyBuYW1lcyBwcmVzZW50 LCBhIGJpdG1hc2sgZW5hYmxlZF92aWRfZm10cyBpcyBjcmVhdGVkIHVzaW5nIHRoZSAuZm10X2Jp dG1hc2sgbWVtYmVyCm9mIHZpZGVvIGZvcm1hdHMgbWVudGlvbmVkIGluIGRldmljZSB0cmVlLgpX aGVuIGEgY2xpZW50IHJlcXVlc3RzIGZvciBhIHBhcnRpY3VsYXIgcGl4ZWwgZm9ybWF0LCB0aGUg Y29ycmVzcG9uZGluZyBiaXQgaXMgY2hlY2tlZCBhZ2FpbnN0IHRoaXMgYml0bWFzayB0byBlbnN1 cmUgaXQgaXMgdmFsaWQuCgpXZSBzdXBwb3J0IGEgcHJpdmF0ZSBBUEkgdGhhdCBjbGllbnRzIGNh biBjYWxsIHRvIGdldCBhIGxpc3Qgb2Ygc3VwcG9ydGVkIHZpZGVvIGZvcm1hdHMuCldlIHVzZSB0 aGUgYml0bWFzayB0byBmaW5kIG91dCB3aGljaCBmb3JtYXRzIGFyZSBzdXBwb3J0ZWQsIHRoZW4g cHVsbCBlaXRoZXIgdGhlIERSTSBvciBWNEwyIChkZXBlbmRpbmcgb24gY2xpZW50IHR5cGUpIApw aXhlbCBmb3JtYXQgY29kZXMgZnJvbSB0aGlzIHRhYmxlIGludG8gYW4gYXJyYXkgcmV0dXJuZWQg dG8gdGhlIGNsaWVudC4KCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgeGls aW54X2ZybWJ1Zl9vZl9pZHNbXSA9IHsKPiA+ICsJeyAuY29tcGF0aWJsZSA9ICJ4bG54LGF4aS1m cm1idWYtd3ItdjIiLAo+ID4gKwkJLmRhdGEgPSAodm9pZCAqKURNQV9ERVZfVE9fTUVNfSwKPiA+ ICsJeyAuY29tcGF0aWJsZSA9ICJ4bG54LGF4aS1mcm1idWYtcmQtdjIiLAo+ID4gKwkJLmRhdGEg PSAodm9pZCAqKURNQV9NRU1fVE9fREVWfSwKPiAKPiBpcyB0aGUgZGlyZWN0aW9uIGEgaHcgcHJv cGVydHkgb3IgY29uZmlndXJhYmxlPwpbVmlzaGFsIFNhZ2FyXSAKVGhlIGRpcmVjdGlvbiBpcyBh IGZpeGVkIGh3IHByb3BlcnR5LiBGcmFtZWJ1ZmZlciBXcml0ZSBJUCB3aWxsIHdyaXRlIEFYSTQg c3RyZWFtIGRhdGEgdG8gbWVtb3J5LgpGcmFtZWJ1ZmZlciBSZWFkIElQIHdpbGwgcmVhZCBmcmFt ZSBkYXRhIGZyb20gbWVtb3J5IGFuZCBjb252ZXJ0IHRvIEFYSTQgc3RyZWFtLgoKPiAKPiA+ICtz dGF0aWMgaW5saW5lIHZvaWQgZnJtYnVmX3dyaXRlKHN0cnVjdCB4aWxpbnhfZnJtYnVmX2NoYW4g KmNoYW4sIHUzMiByZWcsCj4gPiArCQkJCXUzMiB2YWx1ZSkKPiAKPiByaWdodCBqdXN0ZmllZCBw bHMsIGhlcmUgYW5kIG90aGVyIHBsYWNlcwoKW1Zpc2hhbCBTYWdhcl0gCldpbGwgZml4IHRoZXNl IGluIG5leHQgdmVyc2lvbi4KCj4gCj4gPiArewo+ID4gKwlpb3dyaXRlMzIodmFsdWUsIGNoYW4t PnhkZXYtPnJlZ3MgKyByZWcpOyB9Cj4gPiArCj4gPiArc3RhdGljIGlubGluZSB2b2lkIGZybWJ1 Zl93cml0ZXEoc3RydWN0IHhpbGlueF9mcm1idWZfY2hhbiAqY2hhbiwgdTMyCj4gcmVnLAo+ID4g KwkJCQkgdTY0IHZhbHVlKQo+ID4gK3sKPiA+ICsJaW93cml0ZTMyKGxvd2VyXzMyX2JpdHModmFs dWUpLCBjaGFuLT54ZGV2LT5yZWdzICsgcmVnKTsKPiA+ICsJaW93cml0ZTMyKHVwcGVyXzMyX2Jp dHModmFsdWUpLCBjaGFuLT54ZGV2LT5yZWdzICsgcmVnICsgNCk7IH0KPiA+ICsKPiA+ICtzdGF0 aWMgdm9pZCB3cml0ZXFfYWRkcihzdHJ1Y3QgeGlsaW54X2ZybWJ1Zl9jaGFuICpjaGFuLCB1MzIg cmVnLAo+ID4gKwkJCWRtYV9hZGRyX3QgYWRkcikKPiA+ICt7Cj4gPiArCWZybWJ1Zl93cml0ZXEo Y2hhbiwgcmVnLCAodTY0KWFkZHIpOwo+IAo+IHdoeSB0aGUgY2FzdD8KPgpbVmlzaGFsIFNhZ2Fy XSAKTm90IHJlcXVpcmVkLiBJIHdpbGwgcmVtb3ZlIGluIG5leHQgdmVyc2lvbi4KIAo+IAo+ID4g K3N0YXRpYyBzdHJ1Y3QgeGlsaW54X2ZybWJ1Zl9kZXZpY2UgKmZybWJ1Zl9maW5kX2RldihzdHJ1 Y3QgZG1hX2NoYW4KPiA+ICsqY2hhbikgewo+ID4gKwlzdHJ1Y3QgeGlsaW54X2ZybWJ1Zl9jaGFu ICp4Y2hhbiwgKnRlbXA7Cj4gPiArCXN0cnVjdCB4aWxpbnhfZnJtYnVmX2RldmljZSAqeGRldjsK PiA+ICsJYm9vbCBpc19mcm1idWZfY2hhbiA9IGZhbHNlOwo+ID4gKwo+ID4gKwlsaXN0X2Zvcl9l YWNoX2VudHJ5X3NhZmUoeGNoYW4sIHRlbXAsICZmcm1idWZfY2hhbl9saXN0LAo+IGNoYW5fbm9k ZSkgewo+ID4gKwkJaWYgKGNoYW4gPT0gJnhjaGFuLT5jb21tb24pCj4gPiArCQkJaXNfZnJtYnVm X2NoYW4gPSB0cnVlOwo+ID4gKwl9Cj4gPiArCj4gPiArCWlmICghaXNfZnJtYnVmX2NoYW4pCj4g PiArCQlyZXR1cm4gRVJSX1BUUigtRU5PREVWKTsKPiA+ICsKPiA+ICsJeGNoYW4gPSB0b194aWxp bnhfY2hhbihjaGFuKTsKPiA+ICsJeGRldiA9IGNvbnRhaW5lcl9vZih4Y2hhbiwgc3RydWN0IHhp bGlueF9mcm1idWZfZGV2aWNlLCBjaGFuKTsKPiA+ICsKPiA+ICsJcmV0dXJuIHhkZXY7Cj4gCj4g aG1tIHRoaXMgc291bmRzIHN0cmFuZ2UgdG8gbWUsIGNhcmUgdG8gZXhwbGFpbiB0aGlzIHBscz8K W1Zpc2hhbCBTYWdhcl0gClRoaXMgaXMgYSBoZWxwZXIgZnVuY3Rpb24gcmVsYXRlZCB0byB0aGUg Z2xvYmFsIGxpc3QgcmVmZXJyZWQgdG8gZWFybGllci4KVGhpcyBpcyB0aGUgZnVuY3Rpb24gd2hp Y2ggdHJhdmVyc2VzIHRoZSBsaXN0IHRvIHNlZSBpZiB0aGUgZG1hX2NoYW4gb2JqZWN0IHBvaW50 ZXIgcmVwcmVzZW50cyBhIEZyYW1lYnVmZmVyIG9yIHNvbWUgb3RoZXIgRE1BIG9iamVjdAoKPiAK PiA+ICtzdGF0aWMgaW50IGZybWJ1Zl92ZXJpZnlfZm9ybWF0KHN0cnVjdCBkbWFfY2hhbiAqY2hh biwgdTMyIGZvdXJjYywKPiA+ICt1MzIgdHlwZSkgewo+ID4gKwlzdHJ1Y3QgeGlsaW54X2ZybWJ1 Zl9jaGFuICp4aWxfY2hhbiA9IHRvX3hpbGlueF9jaGFuKGNoYW4pOwo+ID4gKwl1MzIgaSwgc3og PSBBUlJBWV9TSVpFKHhpbGlueF9mcm1idWZfZm9ybWF0cyk7Cj4gPiArCj4gPiArCWZvciAoaSA9 IDA7IGkgPCBzejsgaSsrKSB7Cj4gPiArCQlpZiAoKHR5cGUgPT0gWERNQV9EUk0gJiYKPiA+ICsJ CSAgICAgZm91cmNjICE9IHhpbGlueF9mcm1idWZfZm9ybWF0c1tpXS5kcm1fZm10KSB8fAo+ID4g KwkJICAgKHR5cGUgPT0gWERNQV9WNEwyICYmCj4gPiArCQkgICAgZm91cmNjICE9IHhpbGlueF9m cm1idWZfZm9ybWF0c1tpXS52NGwyX2ZtdCkpCj4gCj4gdGhpcyBpcyB2ZXJ5IGhhcmQgdG8gcmVh ZC4uCltWaXNoYWwgU2FnYXJdIApIZXJlIHdlIGFyZSBjaGVja2luZyBpZiB0aGUgZm91cmNjIHZp ZGVvIGZvcm1hdCBtYXRjaGVzIHRoZSBjb3JyZXNwb25kaW5nIGZvcm1hdCBiYXNlZCBvbiB0aGUg RE1BIGNsaWVudCBpZSBEUk0gb3IgVjRMMi4KRG8geW91IHN1Z2dlc3Qgc29tZSBvdGhlciB3YXk/ Cgo+IAo+ID4gK3N0YXRpYyB2b2lkIHhpbGlueF94ZG1hX3NldF9jb25maWcoc3RydWN0IGRtYV9j aGFuICpjaGFuLCB1MzIgZm91cmNjLAo+ID4gK3UzMiB0eXBlKSB7Cj4gPiArCXN0cnVjdCB4aWxp bnhfZnJtYnVmX2NoYW4gKnhpbF9jaGFuOwo+ID4gKwlib29sIGZvdW5kX3hjaGFuID0gZmFsc2U7 Cj4gPiArCWludCByZXQ7Cj4gPiArCj4gPiArCW11dGV4X2xvY2soJmZybWJ1Zl9jaGFuX2xpc3Rf bG9jayk7Cj4gPiArCWxpc3RfZm9yX2VhY2hfZW50cnkoeGlsX2NoYW4sICZmcm1idWZfY2hhbl9s aXN0LCBjaGFuX25vZGUpIHsKPiA+ICsJCWlmIChjaGFuID09ICZ4aWxfY2hhbi0+Y29tbW9uKSB7 Cj4gPiArCQkJZm91bmRfeGNoYW4gPSB0cnVlOwo+ID4gKwkJCWJyZWFrOwo+ID4gKwkJfQo+ID4g Kwl9Cj4gCj4gYWdhaW4gdGhpcyBzZWFjaGluZyBhbmQgYW0gbm90IHN1cmUgd2h5Pwo+IApbVmlz aGFsIFNhZ2FyXSAKUGxlYXNlIHJlZmVyIHRvIGVhcmxpZXIgZXhwbGFuYXRpb24gZm9yIGdsb2Jh bCBsaXN0LgoKPiA+ICt2b2lkIHhpbGlueF94ZG1hX2RybV9jb25maWcoc3RydWN0IGRtYV9jaGFu ICpjaGFuLCB1MzIgZHJtX2ZvdXJjYykKPiB7Cj4gPiArCXhpbGlueF94ZG1hX3NldF9jb25maWco Y2hhbiwgZHJtX2ZvdXJjYywgWERNQV9EUk0pOwo+ID4gKwo+ID4gK30gRVhQT1JUX1NZTUJPTF9H UEwoeGlsaW54X3hkbWFfZHJtX2NvbmZpZyk7Cj4gCj4gZmlyc3QgRVhQT1JUX1NZTUJPTF9HUEwg c2hvdWxkIGJlIGluIGRpZmZlcmVudCBsaW5lLCBzZWNvbmQgd2hhdCBpcyBiZWluZwo+IHNldD8g c29tZSBkb2N1bWVudGF0aW9uIGZvciBFWFBPUlRfU1lNQk9McyBpcyByZXF1aXJlZC4uCj4gCltW aXNoYWwgU2FnYXJdIApPayB3aWxsIGFkZCBkb2N1bWVudGF0aW9uIGluIG5leHQgdmVyc2lvbiBm b3IgYWxsIEVYUE9SVF9TWU1CT0wuCgo+ID4gKwo+ID4gK3ZvaWQgeGlsaW54X3hkbWFfdjRsMl9j b25maWcoc3RydWN0IGRtYV9jaGFuICpjaGFuLCB1MzIgdjRsMl9mb3VyY2MpCj4gPiArewo+ID4g Kwl4aWxpbnhfeGRtYV9zZXRfY29uZmlnKGNoYW4sIHY0bDJfZm91cmNjLCBYRE1BX1Y0TDIpOwo+ ID4gKwo+ID4gK30gRVhQT1JUX1NZTUJPTF9HUEwoeGlsaW54X3hkbWFfdjRsMl9jb25maWcpOwo+ IAo+IGhlcmUgdG9vLi4KPiAKW1Zpc2hhbCBTYWdhcl0gCk9rIHdpbGwgYWRkIGRvY3VtZW50YXRp b24gaW4gbmV4dCB2ZXJzaW9uIGZvciBhbGwgRVhQT1JUX1NZTUJPTC4KCj4gPiArCj4gPiAraW50 IHhpbGlueF94ZG1hX2dldF9kcm1fdmlkX2ZtdHMoc3RydWN0IGRtYV9jaGFuICpjaGFuLCB1MzIK PiAqZm10X2NudCwKPiA+ICsJCQkJIHUzMiAqKmZtdHMpCj4gPiArewo+ID4gKwlzdHJ1Y3QgeGls aW54X2ZybWJ1Zl9kZXZpY2UgKnhkZXY7Cj4gPiArCj4gPiArCXhkZXYgPSBmcm1idWZfZmluZF9k ZXYoY2hhbik7Cj4gPiArCj4gPiArCWlmIChJU19FUlIoeGRldikpCj4gPiArCQlyZXR1cm4gUFRS X0VSUih4ZGV2KTsKPiA+ICsKPiA+ICsJKmZtdF9jbnQgPSB4ZGV2LT5kcm1fZm10X2NudDsKPiA+ ICsJKmZtdHMgPSB4ZGV2LT5kcm1fbWVtb3J5X2ZtdHM7Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ ID4gK30KPiA+ICtFWFBPUlRfU1lNQk9MKHhpbGlueF94ZG1hX2dldF9kcm1fdmlkX2ZtdHMpOwo+ IAo+IGFuZCBoZXJlCj4KW1Zpc2hhbCBTYWdhcl0gCk9rIHdpbGwgYWRkIGRvY3VtZW50YXRpb24g aW4gbmV4dCB2ZXJzaW9uIGZvciBhbGwgRVhQT1JUX1NZTUJPTC4KIAo+ID4gKwo+ID4gK2ludCB4 aWxpbnhfeGRtYV9nZXRfdjRsMl92aWRfZm10cyhzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4sIHUzMgo+ ICpmbXRfY250LAo+ID4gKwkJCQkgIHUzMiAqKmZtdHMpCj4gPiArewo+ID4gKwlzdHJ1Y3QgeGls aW54X2ZybWJ1Zl9kZXZpY2UgKnhkZXY7Cj4gPiArCj4gPiArCXhkZXYgPSBmcm1idWZfZmluZF9k ZXYoY2hhbik7Cj4gPiArCj4gPiArCWlmIChJU19FUlIoeGRldikpCj4gPiArCQlyZXR1cm4gUFRS X0VSUih4ZGV2KTsKPiA+ICsKPiA+ICsJKmZtdF9jbnQgPSB4ZGV2LT52NGwyX2ZtdF9jbnQ7Cj4g PiArCSpmbXRzID0geGRldi0+djRsMl9tZW1vcnlfZm10czsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7 Cj4gPiArfQo+ID4gK0VYUE9SVF9TWU1CT0woeGlsaW54X3hkbWFfZ2V0X3Y0bDJfdmlkX2ZtdHMp Owo+IAo+IGFuZCB0aGlzCj4gCltWaXNoYWwgU2FnYXJdIApPayB3aWxsIGFkZCBkb2N1bWVudGF0 aW9uIGluIG5leHQgdmVyc2lvbiBmb3IgYWxsIEVYUE9SVF9TWU1CT0wuCgo+ID4gKy8qCj4gPiAr LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCj4gPiArLS0tLS0tLS0KPiAKPiBkbyB5b3UgbWluZCBnZXR0aW5nIHJpZCBv ZiB0aGVzZSwgYXQgYmVzdCB0aGV5IGFyZSBkaXN0cmFjdGlvbgo+IApbVmlzaGFsIFNhZ2FyXSAK SSB3aWxsIHJlbW92ZSB0aGVzZSBpbiBuZXh0IHZlcnNpb24uCgo+ID4gK3N0YXRpYyBzdHJ1Y3Qg eGlsaW54X2ZybWJ1Zl90eF9kZXNjcmlwdG9yICoKPiA+ICt4aWxpbnhfZnJtYnVmX2FsbG9jX3R4 X2Rlc2NyaXB0b3Ioc3RydWN0IHhpbGlueF9mcm1idWZfY2hhbiAqY2hhbikgewo+ID4gKwlzdHJ1 Y3QgeGlsaW54X2ZybWJ1Zl90eF9kZXNjcmlwdG9yICpkZXNjOwo+ID4gKwo+ID4gKwlkZXNjID0g a3phbGxvYyhzaXplb2YoKmRlc2MpLCBHRlBfS0VSTkVMKTsKPiA+ICsJaWYgKCFkZXNjKQo+ID4g KwkJcmV0dXJuIE5VTEw7Cj4gCj4gdGhpcyBjYW4gYmUgc2tpcHBlZCBoZXJlIQpbVmlzaGFsIFNh Z2FyXSAKQWdyZWUuIEkgd2lsbCB1cGRhdGUgdGhpcyBpbiBuZXh0IHZlcnNpb24uCgo+IAo+ID4g K3N0YXRpYyB2b2lkIHhpbGlueF9mcm1idWZfZnJlZV9kZXNjcmlwdG9ycyhzdHJ1Y3QgeGlsaW54 X2ZybWJ1Zl9jaGFuCj4gPiArKmNoYW4pIHsKPiA+ICsJdW5zaWduZWQgbG9uZyBmbGFnczsKPiA+ ICsKPiA+ICsJc3Bpbl9sb2NrX2lycXNhdmUoJmNoYW4tPmxvY2ssIGZsYWdzKTsKPiA+ICsKPiA+ ICsJeGlsaW54X2ZybWJ1Zl9mcmVlX2Rlc2NfbGlzdChjaGFuLCAmY2hhbi0+cGVuZGluZ19saXN0 KTsKPiA+ICsJeGlsaW54X2ZybWJ1Zl9mcmVlX2Rlc2NfbGlzdChjaGFuLCAmY2hhbi0+ZG9uZV9s aXN0KTsKPiA+ICsJa2ZyZWUoY2hhbi0+YWN0aXZlX2Rlc2MpOwo+ID4gKwlrZnJlZShjaGFuLT5z dGFnZWRfZGVzYyk7Cj4gPiArCj4gPiArCWNoYW4tPnN0YWdlZF9kZXNjID0gTlVMTDsKPiA+ICsJ Y2hhbi0+YWN0aXZlX2Rlc2MgPSBOVUxMOwo+ID4gKwlJTklUX0xJU1RfSEVBRCgmY2hhbi0+cGVu ZGluZ19saXN0KTsKPiA+ICsJSU5JVF9MSVNUX0hFQUQoJmNoYW4tPmRvbmVfbGlzdCk7Cj4gCj4g aW5pdGlhbGl6aW5nIGxpc3RzIGluIGZyZWU/Cj4KW1Zpc2hhbCBTYWdhcl0gCldlIHdhbnRlZCB0 byB0aGUgbGlzdCB0byBiZSBpbml0aWFsIHN0YXRlIHdoZW4gaXQgd2lsbCBiZSB1c2VkIGFnYWlu LiAKSSB0aGluayBpdCB3b3VsZCBiZSBnb29kIHRvIG1vdmUgaXQgdG8gYWxsb2NfY2hhbl9yZXNv dXJjZXMgaW5zdGVhZC4KIAo+ID4gK3N0YXRpYyBpbnQgeGlsaW54X2ZybWJ1Zl9hbGxvY19jaGFu X3Jlc291cmNlcyhzdHJ1Y3QgZG1hX2NoYW4gKmRjaGFuKQo+ID4gK3sKPiA+ICsJZG1hX2Nvb2tp ZV9pbml0KGRjaGFuKTsKPiAKPiB0aGlzIGNhbiBiZSBkb25lIGluIHlvdXIgcHJvYmUgYW5kIG5v dCBvbiBhbGxvYy4uIGFuZCBjb25zZXF1ZW50bHkgeW91IGNhbgo+IGdldCByaWQgb2YgYWxsb2Mu Lgo+IApbVmlzaGFsIFNhZ2FyXSAKQWdyZWUuIEkgd2lsbCBtb3ZlIHRoaXMgdG8gcHJvYmUoKSBp biBuZXh0IHZlcnNpb24uCgo+ID4gK3N0YXRpYyBlbnVtIGRtYV9zdGF0dXMgeGlsaW54X2ZybWJ1 Zl90eF9zdGF0dXMoc3RydWN0IGRtYV9jaGFuCj4gKmRjaGFuLAo+ID4gKwkJCQkJICAgICAgIGRt YV9jb29raWVfdCBjb29raWUsCj4gPiArCQkJCQkgICAgICAgc3RydWN0IGRtYV90eF9zdGF0ZSAq dHhzdGF0ZSkgewo+ID4gKwlyZXR1cm4gZG1hX2Nvb2tpZV9zdGF0dXMoZGNoYW4sIGNvb2tpZSwg dHhzdGF0ZSk7Cj4gCj4gbm8gcmVzaWR1ZSBjYWxuPwo+IApbVmlzaGFsIFNhZ2FyXSAKSSBkaWRu J3QgdW5kZXJzdGFuZCB5b3VyIHF1ZXN0aW9uLiBBcmUgeW91IGFza2luZyBpZiB3ZSBjYW4gcmV0 dXJuIHJlc2lkdWFsIGJ5dGVzIHRyYW5zZmVycmVkPwpUaGUgSVAgZG9lc24ndCBzdXBwb3J0IGhv dyBtYW55IGJ5dGVzIHdlcmUgc2VudCBpbiB0aGlzIGZyYW1lIGJlZm9yZSBpdCB3YXMgc3RvcHBl ZC4KCj4gPiArc3RhdGljIGludCB4aWxpbnhfZnJtYnVmX2NoYW5fcHJvYmUoc3RydWN0IHhpbGlu eF9mcm1idWZfZGV2aWNlICp4ZGV2LAo+ID4gKwkJCQkgICAgc3RydWN0IGRldmljZV9ub2RlICpu b2RlKQo+ID4gK3sKPiA+ICsJc3RydWN0IHhpbGlueF9mcm1idWZfY2hhbiAqY2hhbjsKPiA+ICsJ aW50IGVycjsKPiA+ICsJdTMyIGRtYV9hZGRyX3NpemU7Cj4gPiArCj4gPiArCWNoYW4gPSAmeGRl di0+Y2hhbjsKPiA+ICsKPiA+ICsJY2hhbi0+ZGV2ID0geGRldi0+ZGV2Owo+ID4gKwljaGFuLT54 ZGV2ID0geGRldjsKPiA+ICsJY2hhbi0+aWRsZSA9IHRydWU7Cj4gPiArCj4gPiArCWVyciA9IG9m X3Byb3BlcnR5X3JlYWRfdTMyKG5vZGUsICJ4bG54LGRtYS1hZGRyLXdpZHRoIiwKPiAKPiB3aHkg bm90IGRldmljZV9wcm9wZXJ0eV9yZWFkX3UzMgo+IApbVmlzaGFsIFNhZ2FyXSAKT2ZfcHJvcGVy dHlfcmVhZF91MzIgaXMgbW9yZSBmYW1pbGlhci4gTGV0IG1lIGtub3cgaWYgdGhpcyBpcyBvayBv ciBJIHNob3VsZCBjaGFuZ2UgaXQuCgo+ID4gK3N0YXRpYyBpbnQgeGlsaW54X2ZybWJ1Zl9wcm9i ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KSB7Cj4gPiArCXN0cnVjdCBkZXZpY2Vfbm9k ZSAqbm9kZSA9IHBkZXYtPmRldi5vZl9ub2RlOwo+ID4gKwlzdHJ1Y3QgeGlsaW54X2ZybWJ1Zl9k ZXZpY2UgKnhkZXY7Cj4gPiArCXN0cnVjdCByZXNvdXJjZSAqaW87Cj4gPiArCWVudW0gZG1hX3Ry YW5zZmVyX2RpcmVjdGlvbiBkbWFfZGlyOwo+ID4gKwljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lk ICptYXRjaDsKPiA+ICsJaW50IGVycjsKPiA+ICsJdTMyIGksIGo7Cj4gPiArCWludCBod192aWRf Zm10X2NudDsKPiA+ICsJY29uc3QgY2hhciAqdmlkX2ZtdHNbQVJSQVlfU0laRSh4aWxpbnhfZnJt YnVmX2Zvcm1hdHMpXTsKPiAKPiBpbnZlcnRlZCB4LW1hcyB0cmVlIGhlbHBzIGluIHJlYWRhYmls aXR5CltWaXNoYWwgU2FnYXJdIApPay4gSSB3aWxsIHVwZGF0ZSBpdCBpbiBuZXh0IHZlcnNpb24u IAoKPiAKPiA+ICsJSU5JVF9MSVNUX0hFQUQoJnhkZXYtPmNvbW1vbi5jaGFubmVscyk7Cj4gPiAr CWRtYV9jYXBfc2V0KERNQV9TTEFWRSwgeGRldi0+Y29tbW9uLmNhcF9tYXNrKTsKPiAKPiB3aHkg c2xhdmUgYW5kIHdoeSBub3QgRE1BX0lOVEVSTEVBVkU/CgpbVmlzaGFsIFNhZ2FyXSAKVGhpcyBp cyBjb21pbmcgZnJvbSB0aGUgZWFybGllciB4aWxpbnggZHJpdmVyLiBJIHdpbGwgdXBkYXRlIGl0 IHRvIERNQV9JTlRFUkxFQVZFIGFzIHRoaXMgZGVzY3JpYmVzIHRoZSBjYXBhYmlsaXRpZXMgYmV0 dGVyLgoKPiAKPiA+ICsJZG1hX2NhcF9zZXQoRE1BX1BSSVZBVEUsIHhkZXYtPmNvbW1vbi5jYXBf bWFzayk7Cj4gPiArCj4gPiArCS8qIEluaXRpYWxpemUgdGhlIGNoYW5uZWxzICovCj4gPiArCWVy ciA9IHhpbGlueF9mcm1idWZfY2hhbl9wcm9iZSh4ZGV2LCBub2RlKTsKPiA+ICsJaWYgKGVyciA8 IDApCj4gPiArCQlyZXR1cm4gZXJyOwo+ID4gKwo+ID4gKwl4ZGV2LT5jaGFuLmRpcmVjdGlvbiA9 IGRtYV9kaXI7Cj4gPiArCj4gPiArCWlmICh4ZGV2LT5jaGFuLmRpcmVjdGlvbiA9PSBETUFfREVW X1RPX01FTSkgewo+ID4gKwkJeGRldi0+Y29tbW9uLmRpcmVjdGlvbnMgPSBCSVQoRE1BX0RFVl9U T19NRU0pOwo+ID4gKwkJZGV2X2luZm8oJnBkZXYtPmRldiwgIlhpbGlueCBBWEkgZnJtYnVmCj4g RE1BX0RFVl9UT19NRU1cbiIpOwo+ID4gKwl9IGVsc2UgaWYgKHhkZXYtPmNoYW4uZGlyZWN0aW9u ID09IERNQV9NRU1fVE9fREVWKSB7Cj4gPiArCQl4ZGV2LT5jb21tb24uZGlyZWN0aW9ucyA9IEJJ VChETUFfTUVNX1RPX0RFVik7Cj4gPiArCQlkZXZfaW5mbygmcGRldi0+ZGV2LCAiWGlsaW54IEFY SSBmcm1idWYKPiBETUFfTUVNX1RPX0RFVlxuIik7Cj4gPiArCX0gZWxzZSB7Cj4gPiArCQl4aWxp bnhfZnJtYnVmX2NoYW5fcmVtb3ZlKCZ4ZGV2LT5jaGFuKTsKPiAKPiB3aHkgbm90IGRvIHRoZSBj aGVja3MgZmlyc3QhCltWaXNoYWwgU2FnYXJdIApBZ3JlZS4gSSB3aWxsIHVwZGF0ZSBpdCBpbiBu ZXh0IHBhdGNoLgoKPiAKPiA+ICtNT0RVTEVfQVVUSE9SKCJYaWxpbngsIEluYy4iKTsKPiA+ICtN T0RVTEVfREVTQ1JJUFRJT04oIlhpbGlueCBGcmFtZWJ1ZmZlciBkcml2ZXIiKTsKPiBNT0RVTEVf TElDRU5TRSgiR1BMCj4gPiArdjIiKTsKPiAKPiBubyBNT0RVTEVfQUxJQVMsIGhvdyBkaWQgeW91 IHRlc3QgdGhpcz8KW1Zpc2hhbCBTYWdhcl0gClRoaXMgZHJpdmVyIHdhcyBlbmFibGVkIGluIHRo ZSBrZXJuZWwgY29uZmlnIGFuZCBkZXZpY2UgdHJlZSBhbmQgYnVpbHQgYXMgcGFydCBvZiBrZXJu ZWwuCgo+IAo+ID4gKyNpZiBJU19FTkFCTEVEKENPTkZJR19YSUxJTlhfRlJNQlVGKQo+ID4gKy8q Kgo+ID4gKyAqIHhpbGlueF94ZG1hX2RybV9jb25maWcgLSBjb25maWd1cmUgdmlkZW8gZm9ybWF0 IGluIHZpZGVvIGF3YXJlIERNQQo+ID4gKyAqIEBjaGFuOiBkbWEgY2hhbm5lbCBpbnN0YW5jZQo+ ID4gKyAqIEBkcm1fZm91cmNjOiBEUk0gZm91cmNjIGNvZGUgZGVzY3JpYmluZyB0aGUgbWVtb3J5 IGxheW91dCBvZgo+IHZpZGVvCj4gPiArZGF0YQo+ID4gKyAqCj4gPiArICogVGhpcyByb3V0aW5l IGlzIHVzZWQgd2hlbiB1dGlsaXppbmcgInZpZGVvIGZvcm1hdCBhd2FyZSIgWGlsaW54Cj4gPiAr RE1BIElQCj4gPiArICogKHN1Y2ggYXMgVmlkZW8gRnJhbWVidWZmZXIgUmVhZCBvciBWaWRlbyBG cmFtZWJ1ZmZlciBXcml0ZSkuICBUaGlzCj4gPiArY2FsbAo+ID4gKyAqIG11c3QgYmUgbWFkZSBw cmlvciB0byBkbWFfYXN5bmNfaXNzdWVfcGVuZGluZygpIHRvIGVuc3RhYmxpc2ggdGhlCj4gPiAr dmlkZW8KPiA+ICsgKiBkYXRhIG1lbW9yeSBmb3JtYXQgd2l0aGluIHRoZSBoYXJkd2FyZSBETUEu Cj4gPiArICovCj4gCj4gcGxzIG1vdmUgdGhpcyB0byBzcmMuLgpbVmlzaGFsIFNhZ2FyXSAKT2su IEkgd2lsbCB1cGRhdGUgdGhpcyBpbiB0aGUgbmV4dCB2ZXJzaW9uLiAKClJlZ2FyZHMKVmlzaGFs IFNhZ2FyIHwgRGVzaWduIEVuZ2luZWVyIHwgU3lzdGVtIFNvbHV0aW9ucyB8IFhpbGlueCBIeWRl cmFiYWQKIAo+IC0tCj4gflZpbm9kCj4gLS0KPiBUbyB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbGlz dDogc2VuZCB0aGUgbGluZSAidW5zdWJzY3JpYmUgZG1hZW5naW5lIiBpbiB0aGUKPiBib2R5IG9m IGEgbWVzc2FnZSB0byBtYWpvcmRvbW9Admdlci5rZXJuZWwub3JnIE1vcmUgbWFqb3Jkb21vIGlu Zm8KPiBhdCAgaHR0cDovL3ZnZXIua2VybmVsLm9yZy9tYWpvcmRvbW8taW5mby5odG1sCi0tLQpU byB1bnN1YnNjcmliZSBmcm9tIHRoaXMgbGlzdDogc2VuZCB0aGUgbGluZSAidW5zdWJzY3JpYmUg ZG1hZW5naW5lIiBpbgp0aGUgYm9keSBvZiBhIG1lc3NhZ2UgdG8gbWFqb3Jkb21vQHZnZXIua2Vy bmVsLm9yZwpNb3JlIG1ham9yZG9tbyBpbmZvIGF0ICBodHRwOi8vdmdlci5rZXJuZWwub3JnL21h am9yZG9tby1pbmZvLmh0bWwK