From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH v8 05/35] drm/i915: MEI interface definition Date: Fri, 7 Dec 2018 15:29:50 +0100 Message-ID: <20181207142950.GE21184@phenom.ffwll.local> References: <1543315413-24302-1-git-send-email-ramalingam.c@intel.com> <1543315413-24302-6-git-send-email-ramalingam.c@intel.com> <20181206102303.GO21184@phenom.ffwll.local> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: "C, Ramalingam" Cc: daniel.vetter@ffwll.ch, intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org, tomas.winkler@intel.com List-Id: dri-devel@lists.freedesktop.org T24gRnJpLCBEZWMgMDcsIDIwMTggYXQgMTE6MjI6NDRBTSArMDUzMCwgQywgUmFtYWxpbmdhbSB3 cm90ZToKPiAKPiBPbiAxMi82LzIwMTggMzo1MyBQTSwgRGFuaWVsIFZldHRlciB3cm90ZToKPiA+ IE9uIFR1ZSwgTm92IDI3LCAyMDE4IGF0IDA0OjEzOjAzUE0gKzA1MzAsIFJhbWFsaW5nYW0gQyB3 cm90ZToKPiA+ID4gRGVmaW5pbmcgdGhlIG1laS1pOTE1IGludGVyZmFjZSBmdW5jdGlvbnMgYW5k IGluaXRpYWxpemF0aW9uIG9mCj4gPiA+IHRoZSBpbnRlcmZhY2UuCj4gPiA+IAo+ID4gPiBTaWdu ZWQtb2ZmLWJ5OiBSYW1hbGluZ2FtIEMgPHJhbWFsaW5nYW0uY0BpbnRlbC5jb20+Cj4gPiA+IFNp Z25lZC1vZmYtYnk6IFRvbWFzIFdpbmtsZXIgPHRvbWFzLndpbmtsZXJAaW50ZWwuY29tPgo+ID4g PiAtLS0KPiA+ID4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgfCAgIDIgKwo+ ID4gPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oICB8ICAgNyArCj4gPiA+ICAg ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGRjcC5jIHwgNDQyICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKystCj4gPiA+ICAgaW5jbHVkZS9kcm0vaTkxNV9jb21wb25lbnQu aCAgICAgIHwgIDcxICsrKysrKwo+ID4gPiAgIDQgZmlsZXMgY2hhbmdlZCwgNTIxIGluc2VydGlv bnMoKyksIDEgZGVsZXRpb24oLSkKPiA+ID4gCj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ ID4gPiBpbmRleCBmNzYzYjMwZjk4ZDkuLmI2OGJjOTgwYjdjZCAxMDA2NDQKPiA+ID4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaAo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2Rydi5oCj4gPiA+IEBAIC0yMDE1LDYgKzIwMTUsOCBAQCBzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSB7Cj4gPiA+ICAgCXN0cnVjdCBpOTE1X3BtdSBwbXU7Cj4gPiA+ICsJc3Ry dWN0IGk5MTVfaGRjcF9jb21wb25lbnRfbWFzdGVyICpoZGNwX2NvbXA7Cj4gPiA+ICsKPiA+ID4g ICAJLyoKPiA+ID4gICAJICogTk9URTogVGhpcyBpcyB0aGUgZHJpMS91bXMgZHVuZ2VvbiwgZG9u J3QgYWRkIHN0dWZmIGhlcmUuIFlvdXIgcGF0Y2gKPiA+ID4gICAJICogd2lsbCBiZSByZWplY3Rl ZC4gSW5zdGVhZCBsb29rIGZvciBhIGJldHRlciBwbGFjZS4KPiA+ID4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50 ZWxfZHJ2LmgKPiA+ID4gaW5kZXggODVhNTI2NTk4MDk2Li5iZGU4MmYzYWRhODUgMTAwNjQ0Cj4g PiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4gPiA+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Rydi5oCj4gPiA+IEBAIC0yOSw2ICsyOSw3IEBACj4g PiA+ICAgI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgo+ID4gPiAgICNpbmNsdWRlIDxsaW51eC9oZG1p Lmg+Cj4gPiA+ICAgI2luY2x1ZGUgPGxpbnV4L3NjaGVkL2Nsb2NrLmg+Cj4gPiA+ICsjaW5jbHVk ZSA8bGludXgvbWVpX2hkY3AuaD4KPiA+ID4gICAjaW5jbHVkZSA8ZHJtL2k5MTVfZHJtLmg+Cj4g PiA+ICAgI2luY2x1ZGUgImk5MTVfZHJ2LmgiCj4gPiA+ICAgI2luY2x1ZGUgPGRybS9kcm1fY3J0 Yy5oPgo+ID4gPiBAQCAtMzc5LDYgKzM4MCw5IEBAIHN0cnVjdCBpbnRlbF9oZGNwX3NoaW0gewo+ ID4gPiAgIAkvKiBEZXRlY3RzIHBhbmVsJ3MgaGRjcCBjYXBhYmlsaXR5LiBUaGlzIGlzIG9wdGlv bmFsIGZvciBIRE1JLiAqLwo+ID4gPiAgIAlpbnQgKCpoZGNwX2NhcGFibGUpKHN0cnVjdCBpbnRl bF9kaWdpdGFsX3BvcnQgKmludGVsX2RpZ19wb3J0LAo+ID4gPiAgIAkJCSAgICBib29sICpoZGNw X2NhcGFibGUpOwo+ID4gPiArCj4gPiA+ICsJLyogRGV0ZWN0cyB0aGUgSERDUCBwcm90b2NvbChE UC9IRE1JKSByZXF1aXJlZCBvbiB0aGUgcG9ydCAqLwo+ID4gPiArCWVudW0gbWVpX2hkY3Bfd2ly ZWRfcHJvdG9jb2wgKCpoZGNwX3Byb3RvY29sKSh2b2lkKTsKPiA+IExvb2tpbmcgYWhlYWQsIHRo aXMgc2VlbXMgaGFyZHdpcmVkIHRvIGNvbnN0YW50IHJldHVybiB2YWx1ZT8gT3Igd2h5IGRvIHdl Cj4gPiBuZWVkIGEgZnVuY3Rpb24gaGVyZT8KPiAKPiBUaGlzIGlzIGhhcmR3aXJlZCBiYXNlZCBv biB0aGUgY29ubmVjdG9yIHR5cGUoRFAvSERNSSkuCj4gU2luY2Ugd2UgaGF2ZSB0aGUgc2hpbSBm b3IgaGRjcCdzIGNvbm5lY3RvciBiYXNlZCB3b3JrLCBJIGhhdmUgYWRkZWQgdGhpcyBmdW5jdGlv bi4KPiAKPiBDb3VsZCBoYXZlIGRvbmUgdGhpcyBqdXN0IHdpdGggY29ubmVjdG9yX3R5cGUgY2hl Y2ssIGJ1dCBpbiB0aGF0IHdheSB3aG9sZSBoZGNwX3NoaW0KPiBjYW4gYmUgZG9uZSBpbiB0aGF0 IHdheS4gU28gZ29pbmcgd2l0aCB0aGUgbGFyZ2VyIGRlc2lnbiBoZXJlLgoKSWYgaXQncyBoYXJk d2lyZWQgdGhlbiBqdXN0IG1ha2UgaXQgYSBoYXJkd2lyZWQgc3RydWN0IG1lbWJlci4gQXMgbG9u ZyBhcwppdCdzIGFsbCBjb25zdCwgd2UgY2FuIG1peCBkYXRhIGFuIGZ1bmN0aW9uIHBvaW50ZXJz LiBJZiB5b3UgaGF2ZSBydW50aW1lCnZhcmlhYmxlIGRhdGEsIHRoZW4gaXQncyBiZXR0ZXIgdG8g c3BsaXQgaXQgb3V0IGZyb20gdGhlIG9wcyBzdHJ1Y3R1cmUsIHNvCnRoYXQgd2UgY2FuIGtlZXAg b3BzIHJlYWQtb25seSBhbmQgcHJvdGVjdGVkIGFnYWluc3QgcG9zc2libGUgZXhwbG9pdHMKKGFu eSBmdW5jdGlvbiBwb2ludGVycyBhcmUgYSBoaWdoLXZhbHVlIHRhcmdldCBpbiB0aGUga2VybmVs KS4KCj4gCj4gPiAKPiA+ID4gICB9Owo+ID4gPiAgIHN0cnVjdCBpbnRlbF9oZGNwIHsKPiA+ID4g QEAgLTM5OSw2ICs0MDMsOSBAQCBzdHJ1Y3QgaW50ZWxfaGRjcCB7Cj4gPiA+ICAgCSAqIGNvbnRl bnQgY2FuIGZsb3cgb25seSB0aHJvdWdoIGEgbGluayBwcm90ZWN0ZWQgYnkgSERDUDIuMi4KPiA+ ID4gICAJICovCj4gPiA+ICAgCXU4IGNvbnRlbnRfdHlwZTsKPiA+ID4gKwo+ID4gPiArCS8qIG1l aSBpbnRlcmZhY2UgcmVsYXRlZCBpbmZvcm1hdGlvbiAqLwo+ID4gPiArCXN0cnVjdCBtZWlfaGRj cF9kYXRhIG1laV9kYXRhOwo+ID4gPiAgIH07Cj4gPiA+ICAgc3RydWN0IGludGVsX2Nvbm5lY3Rv ciB7Cj4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZGNwLmMg Yi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZGNwLmMKPiA+ID4gaW5kZXggOTlkZGRiNTQw OTU4Li43NjA3ODBmMTEwNWMgMTAwNjQ0Cj4gPiA+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2hkY3AuYwo+ID4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oZGNw LmMKPiA+ID4gQEAgLTgsMTQgKzgsMjAgQEAKPiA+ID4gICAjaW5jbHVkZSA8ZHJtL2RybVAuaD4K PiA+ID4gICAjaW5jbHVkZSA8ZHJtL2RybV9oZGNwLmg+Cj4gPiA+ICsjaW5jbHVkZSA8ZHJtL2k5 MTVfY29tcG9uZW50Lmg+Cj4gPiA+ICAgI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgo+ID4gPiAgICNp bmNsdWRlIDxsaW51eC9yYW5kb20uaD4KPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9jb21wb25lbnQu aD4KPiA+ID4gICAjaW5jbHVkZSAiaW50ZWxfZHJ2LmgiCj4gPiA+ICAgI2luY2x1ZGUgImk5MTVf cmVnLmgiCj4gPiA+ICAgI2RlZmluZSBLRVlfTE9BRF9UUklFUwk1Cj4gPiA+ICAgI2RlZmluZSBU SU1FX0ZPUl9FTkNSWVBUX1NUQVRVU19DSEFOR0UJNTAKPiA+ID4gKyNkZWZpbmUgR0VUX01FSV9E RElfSU5ERVgocCkgKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAo+ID4gPiArCXR5cGVv ZihwKSBfX3AgPSAocCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKPiA+ID4gKwlf X3AgPT0gUE9SVF9BID8gTUVJX0RESV9BIDogKGVudW0gbWVpX2hkY3BfZGRpKV9fcDtcCj4gPiA+ ICt9KQo+ID4gPiAgIHN0YXRpYwo+ID4gPiAgIGJvb2wgaW50ZWxfaGRjcF9pc19rc3ZfdmFsaWQo dTggKmtzdikKPiA+ID4gQEAgLTgzMyw2ICs4MzksNDE3IEBAIGJvb2wgaXNfaGRjcF9zdXBwb3J0 ZWQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBlbnVtIHBvcnQgcG9ydCkKPiA+ ID4gICAJCSFJU19DSEVSUllWSUVXKGRldl9wcml2KSAmJiBwb3J0IDwgUE9SVF9FKTsKPiA+ID4g ICB9Cj4gPiA+ICtzdGF0aWMgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgaW50Cj4gPiA+ICtoZGNw Ml9wcmVwYXJlX2FrZV9pbml0KHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+ ID4gKwkJICAgICAgIHN0cnVjdCBoZGNwMl9ha2VfaW5pdCAqYWtlX2RhdGEpCj4gPiA+ICt7Cj4g PiA+ICsJc3RydWN0IG1laV9oZGNwX2RhdGEgKmRhdGEgPSAmY29ubmVjdG9yLT5oZGNwLm1laV9k YXRhOwo+ID4gPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUo Y29ubmVjdG9yLT5iYXNlLmRldik7Cj4gPiA+ICsJc3RydWN0IGk5MTVfaGRjcF9jb21wb25lbnRf bWFzdGVyICpjb21wID0gZGV2X3ByaXYtPmhkY3BfY29tcDsKPiA+ID4gKwlpbnQgcmV0Owo+ID4g PiArCj4gPiA+ICsJaWYgKCFjb21wKQo+ID4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ID4gKwo+ ID4gPiArCW11dGV4X2xvY2soJmNvbXAtPm11dGV4KTsKPiA+ID4gKwlpZiAoIWNvbXAtPm9wcyB8 fCAhY29tcC0+ZGV2KSB7Cj4gPiA+ICsJCW11dGV4X3VubG9jaygmY29tcC0+bXV0ZXgpOwo+ID4g PiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwlpZiAoZGF0YS0+ cG9ydCA9PSBNRUlfRERJX0lOVkFMSURfUE9SVCAmJiBjb25uZWN0b3ItPmVuY29kZXIpCj4gPiA+ ICsJCWRhdGEtPnBvcnQgPSBHRVRfTUVJX0RESV9JTkRFWChjb25uZWN0b3ItPmVuY29kZXItPnBv cnQpOwo+ID4gPiArCj4gPiA+ICsJLyogQ2xlYXIgTUUgRlcgaW5zdGFuY2UgZm9yIHRoZSBwb3J0 LCBqdXN0IGluY2FzZSAqLwo+ID4gPiArCWNvbXAtPm9wcy0+Y2xvc2VfaGRjcF9zZXNzaW9uKGNv bXAtPmRldiwgZGF0YSk7Cj4gPiBTb3VuZHMgbGlrZSBhIGJ1ZyBzb21ld2hlcmUgaWYgd2UgbmVl ZCB0aGlzPyBJJ2QgcHV0IHRoaXMgY29kZSBpbnRvIHRoZQo+ID4gLT5pbml0aWF0ZV9oZGNwMl9z ZXNzaW9uLCB3aXRoIGEgYmlnIFdBUk5fT04gaWYgaXQncyBhY3R1YWxseSBuZWVkZWQuCj4gCj4g Tm90IHJlYWxseS4gTGV0cyBzYXkgeW91IGhhdmUgcHJvZ3Jlc3NlZCBiZXlvbmQgdGhlIGZpcnN0 IHN0ZXAgb2YgSERDUDIuMiBhdXRoIGFsb25nIHdpdGggTUUgRlcuCj4gTm93IGlmIGF1dGhlbnRp Y2F0aW9uIGZhaWxlZCBkdWUgdG8gc29tZSByZWFzb24sIHRoZW4gdGhlIEhEQ1AyLjIgc2Vhc29u IGNyZWF0ZWQgd2l0aAo+IE1FIEZXIGZvciB0aGF0IHBvcnQgaXMgbm90IGNsb3NlZCB5ZXQuCj4g Cj4gU28gd2UgbmVlZCB0byBjYWxsIGNsb3NlX2hkY3Bfc2Vzc2lvbigpIGV4cGxpY2l0bHkgb24g YXV0aGVudGljYXRpb24gZmFpbHVyZXMuCj4gU2Vzc2lvbiBoYXMgdG8gYmUgY2xvc2VkIGJlZm9y ZSByZXN0YXJ0aW5nIHRoZSBhdXRoIG9uIHRoYXQgcG9ydCB3aXRoIGluaXRpYWxpdGVfaGRjcF9z ZXNzaW9uLgo+IElmIHdlIGFyZSBjbG9zaW5nIHRoZSBoZGNwIHNlc3Npb24gb2YgdGhlIHBvcnQg b24gYWxsIGF1dGggZXJyb3JzLCB3ZSBkb250IG5lZWQgdGhpcyBqdXN0IGJlZm9yZQo+IHN0YXJ0 IG9mIHRoZSBoZGNwIHNlc3Npb24uCgpZZWFoLCBtYWtlcyBzZW5zZS4gQnV0IHJpZ2h0IG5vdyB0 aGUgY2xvc2Vfc2Vzc2lvbiBzdHVmZiBpcyBzcHJpbmtsZWQgYWxsCm92ZXIsIHNvIGl0J3MgaGFy ZCB0byBzZWUgd2hhdCdzIGdvaW5nIG9uIGFuZCB3aGV0aGVyIHRoZXJlJ3MgYnVncwpzb21ld2hl cmUuIEkgbXVjaCBwcmVmZXIgY29kZSB0aGF0IGxvb2tzIGxpa2UgaXQga25vd3Mgd2hhdCBpdCdz IGRvaW5nLiBJCnRoaW5rIG9uZSB0b3AtbGV2ZWwgY2xvc2Vfc2Vzc2lvbiBjYWxsIGluIHRoZSBt YWluIGhkY3AyIGZ1bmN0aW9ucyAoY2FsbGVkCndoZW4gZXZlcnl0aGluZyBpcyBkb25lLCBvciBv biBmYWlsdXJlKSB3b3VsZCBiZSBtdWNoIGNsZWFuZXIuCgpQbHVzIHRoZW4gc29tZSBXQVJOX09O IHRvIG1ha2Ugc3VyZSB3ZSBuZXZlciBmb3JnZXQgdG8gY2xvc2UgYSBzZXNzaW9uLgpTcHJpbmts aW5nIGNsZWFudXAgY29kZSBhbGwgb3ZlciB0aGUgcGxhY2UgbG9va3MgbGlrZSBpdCdzIGVhc2ll ciwgYnV0CmxvbmcgdGVybSBpdCdzIG11Y2ggaGFyZGVyIGNvZGUgdG8gbWFpbnRhaW4gYW5kIHJl ZmFjdG9yIGJlY2F1c2UgeW91IG5ldmVyCnN1cmUgd2hpY2ggY2xlYW51cCBjb2RlIGlzIGFjdHVh bGx5IGRvaW5nIHRoZSBjbGVhbnVwLCBhbmQgd2hpY2ggY2xlYW51cApjb2RlIGlzIGp1c3QgdGhl cmUgZm9yIG5vdGhpbmcuCj4gCj4gPiAKPiA+ICJKdXN0IGluIGNhc2UiIHBhcGVyaW5nIG92ZXIg cHJvZ3JhbW1pbmcgYnVncyBvZiBvdXIgb3duIGp1c3QgbWFrZXMKPiA+IGRlYnVnZ2luZyBoYXJk ZXIuCj4gPiAKPiA+ID4gKwo+ID4gPiArCXJldCA9IGNvbXAtPm9wcy0+aW5pdGlhdGVfaGRjcDJf c2Vzc2lvbihjb21wLT5kZXYsCj4gPiA+ICsJCQkJCQlkYXRhLCBha2VfZGF0YSk7Cj4gPiBXZSBz aG91bGQgc2V0IHRoZSBwb3J0IG9ubHkgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IGluaXRpYWxpemluZyB0 aGlzLgo+IAo+IGhkY3AyX3Nlc3Npb24gaXMgY3JlYXRlZCBmb3IgZWFjaCBwb3J0IGF0IE1FIEZX LiBIZW5jZSB3ZSBuZWVkIHRoZSBwb3J0Cj4gaW5pdGlhbGl6ZWQgZXZlbiBiZWZvcmUgY2FsbGlu ZyB0aGUgaW5pdGlhdGVfaGRjcDJfc2Vzc2lvbi4KCj4gPiA+ICsJaWYgKGRhdGEtPnBvcnQgPT0g TUVJX0RESV9JTlZBTElEX1BPUlQgJiYgY29ubmVjdG9yLT5lbmNvZGVyKQo+ID4gPiArCQlkYXRh LT5wb3J0ID0gR0VUX01FSV9ERElfSU5ERVgoY29ubmVjdG9yLT5lbmNvZGVyLT5wb3J0KTsKClRo aXMgbGluZSByaWdodCBhYm92ZSBpbiB5b3VyIHBhdGNoIHNob3VsZCBvbmx5IHJ1biBvbiBzdWNj ZXNzLiBJIHRoaW5rLgoKQWxzbywgbG9va2luZyBhdCB0aGlzIGFnYWluOiBXaHkgY291bGQgY29u bmVjdG9yLT5lbmNvZGVyIGV2ZXIgYmUgTlVMTD8KVGhhdCBzbWVsbHMgbGlrZSBhbm90aGVyIHBv c3NpYmxlIGJ1ZyBpbiBvdXIgc2V0dXAgY29kZS4gQmV0dGVyIHRvIHdyYXAKdGhpcyBpbiBhIFdB Uk5fT04gYW5kIGJhaWwgb3V0LgoKCj4gCj4gPiAKPiA+ID4gKwltdXRleF91bmxvY2soJmNvbXAt Pm11dGV4KTsKPiA+ID4gKwo+ID4gPiArCXJldHVybiByZXQ7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ ID4gK3N0YXRpYyBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBpbnQKPiA+ID4gK2hkY3AyX3Zlcmlm eV9yeF9jZXJ0X3ByZXBhcmVfa20oc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ ID4gPiArCQkJCXN0cnVjdCBoZGNwMl9ha2Vfc2VuZF9jZXJ0ICpyeF9jZXJ0LAo+ID4gPiArCQkJ CWJvb2wgKnBhaXJlZCwKPiA+ID4gKwkJCQlzdHJ1Y3QgaGRjcDJfYWtlX25vX3N0b3JlZF9rbSAq ZWtfcHViX2ttLAo+ID4gPiArCQkJCXNpemVfdCAqbXNnX3N6KQo+ID4gPiArewo+ID4gPiArCXN0 cnVjdCBtZWlfaGRjcF9kYXRhICpkYXRhID0gJmNvbm5lY3Rvci0+aGRjcC5tZWlfZGF0YTsKPiA+ ID4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19pOTE1KGNvbm5lY3Rv ci0+YmFzZS5kZXYpOwo+ID4gPiArCXN0cnVjdCBpOTE1X2hkY3BfY29tcG9uZW50X21hc3RlciAq Y29tcCA9IGRldl9wcml2LT5oZGNwX2NvbXA7Cj4gPiA+ICsJaW50IHJldDsKPiA+ID4gKwo+ID4g PiArCWlmICghY29tcCkKPiA+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ICsKPiA+ID4gKwlt dXRleF9sb2NrKCZjb21wLT5tdXRleCk7Cj4gPiA+ICsJaWYgKCFjb21wLT5vcHMgfHwgIWNvbXAt PmRldiB8fCBkYXRhLT5wb3J0ID09IE1FSV9ERElfSU5WQUxJRF9QT1JUKSB7Cj4gPiBUaGVzZSBh bGwgbG9vayBsaWtlIHByb2dyYW1taW5nIG1pc3Rha2VzIHRoYXQgc2hvdWxkIHJlc3VsdCBpbiBh IFdBUk5fT04uCj4gCj4gV2UgYXJlIHVzaW5nIHRoZSBjb21wLT5tdXRleCBmb3IgcHJvdGVjdGlu ZyB0aGUgaW50ZXJmYWNlIGR1cmluZyB0aGUgaW50ZXJmYWNlCj4gaW5pdCwgdXNhZ2UgZm9yIG1l aSBjb21tdW5pY2F0aW9uIGFuZCBpbnRlcmZhY2UgdGVhcmRvd24uCj4gCj4gQnV0IHdoYXQgaWYg bWVpIGludGVyZmFjZSB0ZWFyZG93biBoYXBwZW5zIGJldHdlZW4gbWVpIGNvbW11bmljYXRpb25z Pwo+IFNvIHdoZW4gd2UgdHJ5IHRvIGFjY2VzcyB0aGUgbWVpIGludGVyZmFjZSBhZnRlciBzdWNo IHBvc3NpYmxlIHRlYXIgZG93biBzY2VuYXJpbywKPiB3ZSBhcmUgY2hlY2tpbmcgdGhlIGludGVn cml0eSBvZiB0aGUgaW50ZXJmYWNlLgo+IAo+IFBvc3NpYmxlIGFsdGVybmF0ZSBzb2x1dGlvbiBp cyBob2xkIHRoZSBjb21wLT5tdXRleCBhY3Jvc3MgdGhlIGF1dGhlbnRpY2F0aW9uIHN0ZXBzLgo+ IEJ1dCBjb25zZXF1ZW5jZSBpcyB0aGF0IG1laSBtb2R1bGUgcmVtb3ZhbCB3aWxsIGJlIGJsb2Nr ZWQgZm9yIGF1dGhlbnRpY2F0aW9uIGR1cmF0aW9uCj4gYW5kIGV2ZW4gaWYgdGhlIG1laV9kZXYg aXMgcmVtb3ZlZCwgY29tcG9uZW50IHVuYmluZCB3aWxsIGJlIGJsb2NrZWQgZHVlIHRvIHRoaXMg bXV0ZXggZGVwZW5kZW5jeS4KCkkgdGhpbmsgd2l0aCB0aGUgdjcgY29tcG9uZW50IGNvZGUgdGhp cyBzaG91bGQgYWxsIGJlIGltcG9zc2libGUgYW5kIHdlCmNhbiByZW1vdmUgaXQuIFdpdGggdGhl IHY4IGNvbXBvbmVudCBjb2RlIGl0J3MgZGVmaW5pdGVseSBuZWNlc3NhcnkgKHdoaWNoCmlzIHdo eSBJIGRvbid0IGxpa2UgdGhlIHY4IGNvbXBvbmVudCBjb2RlKS4gVGhpcyBpcyBhbGwgYmVjYXVz ZSBJIGRpZG4ndApmdWxseSByZWFsaXplIHRoZSBjaGFuZ2VzIHdpdGggdjggd2hlbiByZWFkaW5n IHRoZSBwYXRjaGVzIGFnYWluIC4uLgoKPiAKPiA+IAo+ID4gPiArCQltdXRleF91bmxvY2soJmNv bXAtPm11dGV4KTsKPiA+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ICsJfQo+ID4gPiArCj4g PiA+ICsJcmV0ID0gY29tcC0+b3BzLT52ZXJpZnlfcmVjZWl2ZXJfY2VydF9wcmVwYXJlX2ttKGNv bXAtPmRldiwgZGF0YSwKPiA+ID4gKwkJCQkJCQkgcnhfY2VydCwgcGFpcmVkLAo+ID4gPiArCQkJ CQkJCSBla19wdWJfa20sIG1zZ19zeik7Cj4gPiA+ICsJaWYgKHJldCA8IDApCj4gPiA+ICsJCWNv bXAtPm9wcy0+Y2xvc2VfaGRjcF9zZXNzaW9uKGNvbXAtPmRldiwgZGF0YSk7Cj4gPiBFcnJvciBo YW5kbGluZyBoZXJlIHNlZW1zIGEgYml0IHN0cmFuZ2UuIFlvdSBjbG9zZSB0aGUgc2Vzc2lvbiwg YnV0IGRvbid0Cj4gPiByZXNldCB0aGUgcG9ydC4gU28gbmV4dCBvcCB3aWxsIGJlIHRvdGFsbHkg dW5hd2FyZSB0aGF0IHRoaW5ncyBoYXZlIGJsb3duCj4gPiB1cC4gQWxzbyBubyB3YXJuaW5nLgo+ ID4gCj4gPiBJZiB3ZSB3YW50IHRvIGNsb3NlIHRoZSBzZXNzaW9uLCB0aGVuIEkgdGhpbmsgdGhh dCBzaG91bGQgYmUgYSBkZWNpc2lvbgo+ID4gbWFkZSBoaWdoZXIgdXAuCj4gCj4gVGhpcyBpcyBu ZWVkZWQgYXMgZXhwbGFpbmVkIGFib3ZlLiBCdXQgYXMgeW91IGhhdmUgbWVudGlvbmVkIHRoaXMg Y2FuIGJlIG1vdmVkCj4gdG8gdGhlIGVuZCBvZiB0aGUgYXV0aGVudGljYXRpb24gb24gZXJyb3Ig c2NlbmFyaW8uIEkgd2lsbCB3b3JrIG9uIHRoYXQuCgpZZWFoLCBJIHRoaW5rIHRoYXQnbGwgbGVh ZCB0byBjbGVhbmVyIGNvZGUuCgo+IAo+ID4gCj4gPiA+ICsJbXV0ZXhfdW5sb2NrKCZjb21wLT5t dXRleCk7Cj4gPiBXaXRoIGNvbXBvbmVudCBkbyB3ZSBzdGlsbCBuZWVkIHRoaXMgbXV0ZXggc3R1 ZmYgaGVyZT8KPiA+IAo+ID4gRXhhY3Qgc2FtZSBjb21tZW50cyBldmVyeXdoZXJlIGJlbG93Lgo+ ID4gCj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gcmV0Owo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtz dGF0aWMgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgaW50Cj4gPiA+ICtoZGNwMl92ZXJpZnlfaHBy aW1lKHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+ID4gKwkJICAgIHN0cnVj dCBoZGNwMl9ha2Vfc2VuZF9ocHJpbWUgKnJ4X2hwcmltZSkKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1 Y3QgbWVpX2hkY3BfZGF0YSAqZGF0YSA9ICZjb25uZWN0b3ItPmhkY3AubWVpX2RhdGE7Cj4gPiA+ ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjb25uZWN0b3It PmJhc2UuZGV2KTsKPiA+ID4gKwlzdHJ1Y3QgaTkxNV9oZGNwX2NvbXBvbmVudF9tYXN0ZXIgKmNv bXAgPSBkZXZfcHJpdi0+aGRjcF9jb21wOwo+ID4gPiArCWludCByZXQ7Cj4gPiA+ICsKPiA+ID4g KwlpZiAoIWNvbXApCj4gPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gPiArCj4gPiA+ICsJbXV0 ZXhfbG9jaygmY29tcC0+bXV0ZXgpOwo+ID4gPiArCWlmICghY29tcC0+b3BzIHx8ICFjb21wLT5k ZXYgfHwgZGF0YS0+cG9ydCA9PSBNRUlfRERJX0lOVkFMSURfUE9SVCkgewo+ID4gPiArCQltdXRl eF91bmxvY2soJmNvbXAtPm11dGV4KTsKPiA+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ICsJ fQo+ID4gPiArCj4gPiA+ICsJcmV0ID0gY29tcC0+b3BzLT52ZXJpZnlfaHByaW1lKGNvbXAtPmRl diwgZGF0YSwgcnhfaHByaW1lKTsKPiA+ID4gKwlpZiAocmV0IDwgMCkKPiA+ID4gKwkJY29tcC0+ b3BzLT5jbG9zZV9oZGNwX3Nlc3Npb24oY29tcC0+ZGV2LCBkYXRhKTsKPiA+ID4gKwltdXRleF91 bmxvY2soJmNvbXAtPm11dGV4KTsKPiA+ID4gKwo+ID4gPiArCXJldHVybiByZXQ7Cj4gPiA+ICt9 Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKSBpbnQKPiA+ID4g K2hkY3AyX3N0b3JlX3BhaXJpbmdfaW5mbyhzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0 b3IsCj4gPiA+ICsJCQkgc3RydWN0IGhkY3AyX2FrZV9zZW5kX3BhaXJpbmdfaW5mbyAqcGFpcmlu Z19pbmZvKQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBtZWlfaGRjcF9kYXRhICpkYXRhID0gJmNv bm5lY3Rvci0+aGRjcC5tZWlfZGF0YTsKPiA+ID4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAq ZGV2X3ByaXYgPSB0b19pOTE1KGNvbm5lY3Rvci0+YmFzZS5kZXYpOwo+ID4gPiArCXN0cnVjdCBp OTE1X2hkY3BfY29tcG9uZW50X21hc3RlciAqY29tcCA9IGRldl9wcml2LT5oZGNwX2NvbXA7Cj4g PiA+ICsJaW50IHJldDsKPiA+ID4gKwo+ID4gPiArCWlmICghY29tcCkKPiA+ID4gKwkJcmV0dXJu IC1FSU5WQUw7Cj4gPiA+ICsKPiA+ID4gKwltdXRleF9sb2NrKCZjb21wLT5tdXRleCk7Cj4gPiA+ ICsJaWYgKCFjb21wLT5vcHMgfHwgIWNvbXAtPmRldiB8fCBkYXRhLT5wb3J0ID09IE1FSV9ERElf SU5WQUxJRF9QT1JUKSB7Cj4gPiA+ICsJCW11dGV4X3VubG9jaygmY29tcC0+bXV0ZXgpOwo+ID4g PiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwlyZXQgPSBjb21w LT5vcHMtPnN0b3JlX3BhaXJpbmdfaW5mbyhjb21wLT5kZXYsCj4gPiA+ICsJCQkJCSAgICBkYXRh LCBwYWlyaW5nX2luZm8pOwo+ID4gPiArCWlmIChyZXQgPCAwKQo+ID4gPiArCQljb21wLT5vcHMt PmNsb3NlX2hkY3Bfc2Vzc2lvbihjb21wLT5kZXYsIGRhdGEpOwo+ID4gPiArCW11dGV4X3VubG9j aygmY29tcC0+bXV0ZXgpOwo+ID4gPiArCj4gPiA+ICsJcmV0dXJuIHJldDsKPiA+ID4gK30KPiA+ ID4gKwo+ID4gPiArc3RhdGljIF9fYXR0cmlidXRlX18oKHVudXNlZCkpIGludAo+ID4gPiAraGRj cDJfcHJlcGFyZV9sY19pbml0KHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+ ID4gKwkJICAgICAgc3RydWN0IGhkY3AyX2xjX2luaXQgKmxjX2luaXQpCj4gPiA+ICt7Cj4gPiA+ ICsJc3RydWN0IG1laV9oZGNwX2RhdGEgKmRhdGEgPSAmY29ubmVjdG9yLT5oZGNwLm1laV9kYXRh Owo+ID4gPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY29u bmVjdG9yLT5iYXNlLmRldik7Cj4gPiA+ICsJc3RydWN0IGk5MTVfaGRjcF9jb21wb25lbnRfbWFz dGVyICpjb21wID0gZGV2X3ByaXYtPmhkY3BfY29tcDsKPiA+ID4gKwlpbnQgcmV0Owo+ID4gPiAr Cj4gPiA+ICsJaWYgKCFjb21wKQo+ID4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ID4gKwo+ID4g PiArCW11dGV4X2xvY2soJmNvbXAtPm11dGV4KTsKPiA+ID4gKwlpZiAoIWNvbXAtPm9wcyB8fCAh Y29tcC0+ZGV2IHx8IGRhdGEtPnBvcnQgPT0gTUVJX0RESV9JTlZBTElEX1BPUlQpIHsKPiA+ID4g KwkJbXV0ZXhfdW5sb2NrKCZjb21wLT5tdXRleCk7Cj4gPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCXJldCA9IGNvbXAtPm9wcy0+aW5pdGlhdGVfbG9jYWxp dHlfY2hlY2soY29tcC0+ZGV2LAo+ID4gPiArCQkJCQkJIGRhdGEsIGxjX2luaXQpOwo+ID4gPiAr CWlmIChyZXQgPCAwKQo+ID4gPiArCQljb21wLT5vcHMtPmNsb3NlX2hkY3Bfc2Vzc2lvbihjb21w LT5kZXYsIGRhdGEpOwo+ID4gPiArCW11dGV4X3VubG9jaygmY29tcC0+bXV0ZXgpOwo+ID4gPiAr Cj4gPiA+ICsJcmV0dXJuIHJldDsKPiA+ID4gK30KPiA+ID4gKwo+ID4gPiArc3RhdGljIF9fYXR0 cmlidXRlX18oKHVudXNlZCkpIGludAo+ID4gPiAraGRjcDJfdmVyaWZ5X2xwcmltZShzdHJ1Y3Qg aW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IsCj4gPiA+ICsJCSAgICBzdHJ1Y3QgaGRjcDJfbGNf c2VuZF9scHJpbWUgKnJ4X2xwcmltZSkKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgbWVpX2hkY3Bf ZGF0YSAqZGF0YSA9ICZjb25uZWN0b3ItPmhkY3AubWVpX2RhdGE7Cj4gPiA+ICsJc3RydWN0IGRy bV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjb25uZWN0b3ItPmJhc2UuZGV2KTsK PiA+ID4gKwlzdHJ1Y3QgaTkxNV9oZGNwX2NvbXBvbmVudF9tYXN0ZXIgKmNvbXAgPSBkZXZfcHJp di0+aGRjcF9jb21wOwo+ID4gPiArCWludCByZXQ7Cj4gPiA+ICsKPiA+ID4gKwlpZiAoIWNvbXAp Cj4gPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gPiArCj4gPiA+ICsJbXV0ZXhfbG9jaygmY29t cC0+bXV0ZXgpOwo+ID4gPiArCWlmICghY29tcC0+b3BzIHx8ICFjb21wLT5kZXYgfHwgZGF0YS0+ cG9ydCA9PSBNRUlfRERJX0lOVkFMSURfUE9SVCkgewo+ID4gPiArCQltdXRleF91bmxvY2soJmNv bXAtPm11dGV4KTsKPiA+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ICsJfQo+ID4gPiArCj4g PiA+ICsJcmV0ID0gY29tcC0+b3BzLT52ZXJpZnlfbHByaW1lKGNvbXAtPmRldiwgZGF0YSwgcnhf bHByaW1lKTsKPiA+ID4gKwlpZiAocmV0IDwgMCkKPiA+ID4gKwkJY29tcC0+b3BzLT5jbG9zZV9o ZGNwX3Nlc3Npb24oY29tcC0+ZGV2LCBkYXRhKTsKPiA+ID4gKwltdXRleF91bmxvY2soJmNvbXAt Pm11dGV4KTsKPiA+ID4gKwo+ID4gPiArCXJldHVybiByZXQ7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ ID4gK3N0YXRpYyBfX2F0dHJpYnV0ZV9fKCh1bnVzZWQpKQo+ID4gPiAraW50IGhkY3AyX3ByZXBh cmVfc2tleShzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IsCj4gPiA+ICsJCSAgICAg ICBzdHJ1Y3QgaGRjcDJfc2tlX3NlbmRfZWtzICpza2VfZGF0YSkKPiA+ID4gK3sKPiA+ID4gKwlz dHJ1Y3QgbWVpX2hkY3BfZGF0YSAqZGF0YSA9ICZjb25uZWN0b3ItPmhkY3AubWVpX2RhdGE7Cj4g PiA+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjb25uZWN0 b3ItPmJhc2UuZGV2KTsKPiA+ID4gKwlzdHJ1Y3QgaTkxNV9oZGNwX2NvbXBvbmVudF9tYXN0ZXIg KmNvbXAgPSBkZXZfcHJpdi0+aGRjcF9jb21wOwo+ID4gPiArCWludCByZXQ7Cj4gPiA+ICsKPiA+ ID4gKwlpZiAoIWNvbXApCj4gPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gPiArCj4gPiA+ICsJ bXV0ZXhfbG9jaygmY29tcC0+bXV0ZXgpOwo+ID4gPiArCWlmICghY29tcC0+b3BzIHx8ICFjb21w LT5kZXYgfHwgZGF0YS0+cG9ydCA9PSBNRUlfRERJX0lOVkFMSURfUE9SVCkgewo+ID4gPiArCQlt dXRleF91bmxvY2soJmNvbXAtPm11dGV4KTsKPiA+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ ICsJfQo+ID4gPiArCj4gPiA+ICsJcmV0ID0gY29tcC0+b3BzLT5nZXRfc2Vzc2lvbl9rZXkoY29t cC0+ZGV2LCBkYXRhLCBza2VfZGF0YSk7Cj4gPiA+ICsJaWYgKHJldCA8IDApCj4gPiA+ICsJCWNv bXAtPm9wcy0+Y2xvc2VfaGRjcF9zZXNzaW9uKGNvbXAtPmRldiwgZGF0YSk7Cj4gPiA+ICsJbXV0 ZXhfdW5sb2NrKCZjb21wLT5tdXRleCk7Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gcmV0Owo+ID4g PiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgX19hdHRyaWJ1dGVfXygodW51c2VkKSkgaW50Cj4g PiA+ICtoZGNwMl92ZXJpZnlfcmVwX3RvcG9sb2d5X3ByZXBhcmVfYWNrKHN0cnVjdCBpbnRlbF9j b25uZWN0b3IgKmNvbm5lY3RvciwKPiA+ID4gKwkJCQkgICAgICBzdHJ1Y3QgaGRjcDJfcmVwX3Nl bmRfcmVjZWl2ZXJpZF9saXN0Cj4gPiA+ICsJCQkJCQkJCSpyZXBfdG9wb2xvZ3ksCj4gPiA+ICsJ CQkJICAgICAgc3RydWN0IGhkY3AyX3JlcF9zZW5kX2FjayAqcmVwX3NlbmRfYWNrKQo+ID4gPiAr ewo+ID4gPiArCXN0cnVjdCBtZWlfaGRjcF9kYXRhICpkYXRhID0gJmNvbm5lY3Rvci0+aGRjcC5t ZWlfZGF0YTsKPiA+ID4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSB0b19p OTE1KGNvbm5lY3Rvci0+YmFzZS5kZXYpOwo+ID4gPiArCXN0cnVjdCBpOTE1X2hkY3BfY29tcG9u ZW50X21hc3RlciAqY29tcCA9IGRldl9wcml2LT5oZGNwX2NvbXA7Cj4gPiA+ICsJaW50IHJldDsK PiA+ID4gKwo+ID4gPiArCWlmICghY29tcCkKPiA+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ ICsKPiA+ID4gKwltdXRleF9sb2NrKCZjb21wLT5tdXRleCk7Cj4gPiA+ICsJaWYgKCFjb21wLT5v cHMgfHwgIWNvbXAtPmRldiB8fCBkYXRhLT5wb3J0ID09IE1FSV9ERElfSU5WQUxJRF9QT1JUKSB7 Cj4gPiA+ICsJCW11dGV4X3VubG9jaygmY29tcC0+bXV0ZXgpOwo+ID4gPiArCQlyZXR1cm4gLUVJ TlZBTDsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ID4gKwlyZXQgPSBjb21wLT5vcHMtPnJlcGVhdGVy X2NoZWNrX2Zsb3dfcHJlcGFyZV9hY2soY29tcC0+ZGV2LAo+ID4gPiArCQkJCQkJCSBkYXRhLCBy ZXBfdG9wb2xvZ3ksCj4gPiA+ICsJCQkJCQkJIHJlcF9zZW5kX2Fjayk7Cj4gPiA+ICsJaWYgKHJl dCA8IDApCj4gPiA+ICsJCWNvbXAtPm9wcy0+Y2xvc2VfaGRjcF9zZXNzaW9uKGNvbXAtPmRldiwg ZGF0YSk7Cj4gPiA+ICsJbXV0ZXhfdW5sb2NrKCZjb21wLT5tdXRleCk7Cj4gPiA+ICsKPiA+ID4g KwlyZXR1cm4gcmV0Owo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMgX19hdHRyaWJ1dGVf XygodW51c2VkKSkgaW50Cj4gPiA+ICtoZGNwMl92ZXJpZnlfbXByaW1lKHN0cnVjdCBpbnRlbF9j b25uZWN0b3IgKmNvbm5lY3RvciwKPiA+ID4gKwkJICAgIHN0cnVjdCBoZGNwMl9yZXBfc3RyZWFt X3JlYWR5ICpzdHJlYW1fcmVhZHkpCj4gPiA+ICt7Cj4gPiA+ICsJc3RydWN0IG1laV9oZGNwX2Rh dGEgKmRhdGEgPSAmY29ubmVjdG9yLT5oZGNwLm1laV9kYXRhOwo+ID4gPiArCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY29ubmVjdG9yLT5iYXNlLmRldik7Cj4g PiA+ICsJc3RydWN0IGk5MTVfaGRjcF9jb21wb25lbnRfbWFzdGVyICpjb21wID0gZGV2X3ByaXYt PmhkY3BfY29tcDsKPiA+ID4gKwlpbnQgcmV0Owo+ID4gPiArCj4gPiA+ICsJaWYgKCFjb21wKQo+ ID4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ID4gKwo+ID4gPiArCW11dGV4X2xvY2soJmNvbXAt Pm11dGV4KTsKPiA+ID4gKwlpZiAoIWNvbXAtPm9wcyB8fCAhY29tcC0+ZGV2IHx8IGRhdGEtPnBv cnQgPT0gTUVJX0RESV9JTlZBTElEX1BPUlQpIHsKPiA+ID4gKwkJbXV0ZXhfdW5sb2NrKCZjb21w LT5tdXRleCk7Cj4gPiA+ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4g PiArCXJldCA9IGNvbXAtPm9wcy0+dmVyaWZ5X21wcmltZShjb21wLT5kZXYsIGRhdGEsIHN0cmVh bV9yZWFkeSk7Cj4gPiA+ICsJaWYgKHJldCA8IDApCj4gPiA+ICsJCWNvbXAtPm9wcy0+Y2xvc2Vf aGRjcF9zZXNzaW9uKGNvbXAtPmRldiwgZGF0YSk7Cj4gPiA+ICsJbXV0ZXhfdW5sb2NrKCZjb21w LT5tdXRleCk7Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gcmV0Owo+ID4gPiArfQo+ID4gPiArCj4g PiA+ICtzdGF0aWMgX19hdHRyaWJ1dGVfXygodW51c2VkKSkKPiA+ID4gK2ludCBoZGNwMl9hdXRo ZW50aWNhdGVfcG9ydChzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25uZWN0b3IpCj4gPiA+ICt7 Cj4gPiA+ICsJc3RydWN0IG1laV9oZGNwX2RhdGEgKmRhdGEgPSAmY29ubmVjdG9yLT5oZGNwLm1l aV9kYXRhOwo+ID4gPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5 MTUoY29ubmVjdG9yLT5iYXNlLmRldik7Cj4gPiA+ICsJc3RydWN0IGk5MTVfaGRjcF9jb21wb25l bnRfbWFzdGVyICpjb21wID0gZGV2X3ByaXYtPmhkY3BfY29tcDsKPiA+ID4gKwlpbnQgcmV0Owo+ ID4gPiArCj4gPiA+ICsJaWYgKCFjb21wKQo+ID4gPiArCQlyZXR1cm4gLUVJTlZBTDsKPiA+ID4g Kwo+ID4gPiArCW11dGV4X2xvY2soJmNvbXAtPm11dGV4KTsKPiA+ID4gKwlpZiAoIWNvbXAtPm9w cyB8fCAhY29tcC0+ZGV2IHx8IGRhdGEtPnBvcnQgPT0gTUVJX0RESV9JTlZBTElEX1BPUlQpIHsK PiA+ID4gKwkJbXV0ZXhfdW5sb2NrKCZjb21wLT5tdXRleCk7Cj4gPiA+ICsJCXJldHVybiAtRUlO VkFMOwo+ID4gPiArCX0KPiA+ID4gKwo+ID4gPiArCXJldCA9IGNvbXAtPm9wcy0+ZW5hYmxlX2hk Y3BfYXV0aGVudGljYXRpb24oY29tcC0+ZGV2LCBkYXRhKTsKPiA+ID4gKwlpZiAocmV0IDwgMCkK PiA+ID4gKwkJY29tcC0+b3BzLT5jbG9zZV9oZGNwX3Nlc3Npb24oY29tcC0+ZGV2LCBkYXRhKTsK PiA+ID4gKwltdXRleF91bmxvY2soJmNvbXAtPm11dGV4KTsKPiA+ID4gKwo+ID4gPiArCXJldHVy biByZXQ7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBfX2F0dHJpYnV0ZV9fKCh1bnVz ZWQpKQo+ID4gPiAraW50IGhkY3AyX2Nsb3NlX21laV9zZXNzaW9uKHN0cnVjdCBpbnRlbF9jb25u ZWN0b3IgKmNvbm5lY3RvcikKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgbWVpX2hkY3BfZGF0YSAq ZGF0YSA9ICZjb25uZWN0b3ItPmhkY3AubWVpX2RhdGE7Cj4gPiA+ICsJc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmRldl9wcml2ID0gdG9faTkxNShjb25uZWN0b3ItPmJhc2UuZGV2KTsKPiA+ID4g KwlzdHJ1Y3QgaTkxNV9oZGNwX2NvbXBvbmVudF9tYXN0ZXIgKmNvbXAgPSBkZXZfcHJpdi0+aGRj cF9jb21wOwo+ID4gPiArCWludCByZXQ7Cj4gPiA+ICsKPiA+ID4gKwlpZiAoIWNvbXApCj4gPiA+ ICsJCXJldHVybiAtRUlOVkFMOwo+ID4gPiArCj4gPiA+ICsJbXV0ZXhfbG9jaygmY29tcC0+bXV0 ZXgpOwo+ID4gPiArCWlmICghY29tcC0+b3BzIHx8ICFjb21wLT5kZXYgfHwKPiA+ID4gKwkgICAg ZGF0YS0+cG9ydCA9PSBNRUlfRERJX0lOVkFMSURfUE9SVCkgewo+ID4gPiArCQltdXRleF91bmxv Y2soJmNvbXAtPm11dGV4KTsKPiA+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ICsJfQo+ID4g PiArCj4gPiA+ICsJcmV0ID0gY29tcC0+b3BzLT5jbG9zZV9oZGNwX3Nlc3Npb24oY29tcC0+ZGV2 LCBkYXRhKTsKPiA+IE5lZWQgdG8gcmVzZXQgdGhlIHBvcnQgaGVyZSBJIHRoaW5rLgo+IAo+IFdo YXQgaXMgdGhlIHJlc2V0IG9mIHRoZSBwb3J0IHlvdSBhcmUgcmVmZXJyaW5nIHRvPyBwb3J0IGlz IG5vdAo+IGNvbmZpZ3VyZWQgZm9yIGVuY3J5cHRpb24uIEFuZCB0aGlzIGlzIHRoZSBjYWxsIGZv ciBtYXJraW5nIHRoZSBwb3J0IGFzIGRlLWF1dGhlbnRpY2F0ZWQgdG9vLgo+IAo+ID4gCj4gPiA+ ICsJbXV0ZXhfdW5sb2NrKCZjb21wLT5tdXRleCk7Cj4gPiA+ICsJcmV0dXJuIHJldDsKPiA+ID4g K30KPiA+ID4gKwo+ID4gPiArc3RhdGljIF9fYXR0cmlidXRlX18oKHVudXNlZCkpCj4gPiA+ICtp bnQgaGRjcDJfZGVhdXRoZW50aWNhdGVfcG9ydChzdHJ1Y3QgaW50ZWxfY29ubmVjdG9yICpjb25u ZWN0b3IpCj4gPiA+ICt7Cj4gPiA+ICsJcmV0dXJuIGhkY3AyX2Nsb3NlX21laV9zZXNzaW9uKGNv bm5lY3Rvcik7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBpbnQgaTkxNV9oZGNwX2Nv bXBvbmVudF9tYXN0ZXJfYmluZChzdHJ1Y3QgZGV2aWNlICpkZXYpCj4gPiA+ICt7Cj4gPiA+ICsJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2ID0ga2Rldl90b19pOTE1KGRldik7Cj4g PiA+ICsKPiA+ID4gKwlyZXR1cm4gY29tcG9uZW50X2JpbmRfYWxsKGRldiwgZGV2X3ByaXYtPmhk Y3BfY29tcCk7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyB2b2lkIGludGVsX2Nvbm5l Y3RvcnNfaGRjcF9kaXNhYmxlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdikKPiA+ ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gJmRldl9wcml2LT5kcm07Cj4g PiA+ICsJc3RydWN0IGludGVsX2Nvbm5lY3RvciAqaW50ZWxfY29ubmVjdG9yOwo+ID4gPiArCXN0 cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3I7Cj4gPiA+ICsJc3RydWN0IGRybV9jb25uZWN0 b3JfbGlzdF9pdGVyIGNvbm5faXRlcjsKPiA+ID4gKwo+ID4gPiArCWRybV9jb25uZWN0b3JfbGlz dF9pdGVyX2JlZ2luKGRldiwgJmNvbm5faXRlcik7Cj4gPiA+ICsJZHJtX2Zvcl9lYWNoX2Nvbm5l Y3Rvcl9pdGVyKGNvbm5lY3RvciwgJmNvbm5faXRlcikgewo+ID4gPiArCQlpbnRlbF9jb25uZWN0 b3IgPSB0b19pbnRlbF9jb25uZWN0b3IoY29ubmVjdG9yKTsKPiA+ID4gKwkJaWYgKCEoaW50ZWxf Y29ubmVjdG9yLT5oZGNwLnNoaW0pKQo+ID4gPiArCQkJY29udGludWU7Cj4gPiA+ICsKPiA+ID4g KwkJaW50ZWxfaGRjcF9kaXNhYmxlKGludGVsX2Nvbm5lY3Rvcik7Cj4gPiA+ICsJfQo+ID4gPiAr CWRybV9jb25uZWN0b3JfbGlzdF9pdGVyX2VuZCgmY29ubl9pdGVyKTsKPiA+ID4gK30KPiA+ID4g Kwo+ID4gPiArc3RhdGljIHZvaWQgaTkxNV9oZGNwX2NvbXBvbmVudF9tYXN0ZXJfdW5iaW5kKHN0 cnVjdCBkZXZpY2UgKmRldikKPiA+ID4gK3sKPiA+ID4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqZGV2X3ByaXYgPSBrZGV2X3RvX2k5MTUoZGV2KTsKPiA+ID4gKwo+ID4gPiArCWludGVsX2Nv bm5lY3RvcnNfaGRjcF9kaXNhYmxlKGRldl9wcml2KTsKPiA+IFdoeSB0aGlzIGNvZGU/IE9uY2Ug d2UndmUgdW5yZWdpc3RlcmVkIHRoZSBkcml2ZXIsIHdlIHNob3VsZCBoYXZlIHNodXQKPiA+IGRv d24gdGhlIGhhcmR3YXJlIGNvbXBsZXRlbHkuIFdoaWNoIHNob3VsZCBoYXZlIHNodXQgZG93biBh bGwgdGhlIGhkY3AKPiA+IHVzZXJzIHRvby4KPiAKPiBUaGlzIHVuYmluZCBtaWdodCBiZSB0cmln Z2VyZWQgZWl0aGVyIGR1ZSB0byBtYXN0ZXJfZGVsIG9yIGNvbXBvbmVudF9kZWwuCj4gaWYgaXRz IHRyaWdnZXJlZCBmcm9tIG1laSB0aHJvdWdoIGNvbXBvbmVudF9kZWwsIHRoZW4gYmVmb3JlIHRl YXJkb3duIG9mCj4gdGhlIGkvZiBpbiBjb21wb25lbnRfdW5iaW5kKCksIGRpc2FibGUgdGhlIG9u Z29pbmcgSERDUCBzZXNzaW9uIHRocm91Z2gKPiBoZGNwX2Rpc2FibGUoKSBmb3IgZWFjaCBjb25u ZWN0b3JzLgoKSSBsb29rZWQgYXQgeW91ciB2NyBjb21wb25lbnQgY29kZSBhZ2Fpbi4gSSB0aGlu ayBpZiB3ZSBwdXQgdGhlCmRybV9hdG9taWNfaGVscGVyX3NodXRkb3duKCkgY2FsbCBpbnRvIG1h c3Rlcl91bmJpbmQsIHRoZW4gd2UnbGwgaGF2ZSB0YWtlbiBjYXJlCm9mIHRoYXQuIEVzc2VudGlh bGx5IHdoYXQgeW91J3JlIGRvaW5nIGhlcmUgaXMgb3Blbi1jb2RpbmcgcGFydCBvZiB0aGF0CmZ1 bmN0aW9uLiBCZXR0ZXIgdG8ganVzdCBtb3ZlIHRoZSBleGlzdGluZyBjYWxsIHRvIHRoZSByaWdo dCBwbGFjZS4KCkFuZCBzaHV0dGluZyBkb3duIHRoZSBlbnRpcmUgaHcgaXMga2luZGEgd2hhdCBt YXN0ZXJfdW5iaW5kIHNob3VsZCBiZQpkb2luZyBJIHRoaW5rLiBXZSBtaWdodCBhbHNvIG5lZWQg dG8gbW92ZSB0aGUgZ2VuZXJhbCBodyBxdWllc2NlbnQgaW50bwptYXN0ZXJfdW5iaW5kLCB0aGF0 IHNob3VsZCB3b3JrIHRvby4KCj4gCj4gPiAKPiA+ID4gKwljb21wb25lbnRfdW5iaW5kX2FsbChk ZXYsIGRldl9wcml2LT5oZGNwX2NvbXApOwo+ID4gPiArfQo+ID4gPiArCj4gPiA+ICtzdGF0aWMg Y29uc3Qgc3RydWN0IGNvbXBvbmVudF9tYXN0ZXJfb3BzIGk5MTVfaGRjcF9jb21wb25lbnRfbWFz dGVyX29wcyA9IHsKPiA+ID4gKwkuYmluZCA9IGk5MTVfaGRjcF9jb21wb25lbnRfbWFzdGVyX2Jp bmQsCj4gPiA+ICsJLnVuYmluZCA9IGk5MTVfaGRjcF9jb21wb25lbnRfbWFzdGVyX3VuYmluZCwK PiA+ID4gK307Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBpbnQgaTkxNV9oZGNwX2NvbXBvbmVudF9t YXRjaChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCj4gPiA+ICt7Cj4gPiA+ICsJcmV0 dXJuICFzdHJjbXAoZGV2LT5kcml2ZXItPm5hbWUsICJtZWlfaGRjcCIpOwo+ID4gPiArfQo+ID4g PiArCj4gPiA+ICtzdGF0aWMgaW50IGludGVsX2hkY3BfY29tcG9uZW50X2luaXQoc3RydWN0IGlu dGVsX2Nvbm5lY3RvciAqY29ubmVjdG9yKQo+ID4gPiArewo+ID4gPiArCXN0cnVjdCBkcm1faTkx NV9wcml2YXRlICpkZXZfcHJpdiA9IHRvX2k5MTUoY29ubmVjdG9yLT5iYXNlLmRldik7Cj4gPiA+ ICsJc3RydWN0IGk5MTVfaGRjcF9jb21wb25lbnRfbWFzdGVyICpjb21wOwo+ID4gPiArCXN0cnVj dCBjb21wb25lbnRfbWF0Y2ggKm1hdGNoID0gTlVMTDsKPiA+ID4gKwlpbnQgcmV0Owo+ID4gPiAr Cj4gPiA+ICsJY29tcCA9IGt6YWxsb2Moc2l6ZW9mKCpjb21wKSwgR0ZQX0tFUk5FTCk7Cj4gPiA+ ICsJaWYgKCFjb21wKQo+ID4gPiArCQlyZXR1cm4gLUVOT01FTTsKPiA+ID4gKwo+ID4gPiArCW11 dGV4X2luaXQoJmNvbXAtPm11dGV4KTsKPiA+ID4gKwlkZXZfcHJpdi0+aGRjcF9jb21wID0gY29t cDsKPiA+ID4gKwo+ID4gPiArCWNvbXBvbmVudF9tYXRjaF9hZGQoZGV2X3ByaXYtPmRybS5kZXYs ICZtYXRjaCwKPiA+ID4gKwkJCSAgICBpOTE1X2hkY3BfY29tcG9uZW50X21hdGNoLCBkZXZfcHJp dik7Cj4gPiA+ICsJcmV0ID0gY29tcG9uZW50X21hc3Rlcl9hZGRfd2l0aF9tYXRjaChkZXZfcHJp di0+ZHJtLmRldiwKPiA+ID4gKwkJCQkJICAgICAgJmk5MTVfaGRjcF9jb21wb25lbnRfbWFzdGVy X29wcywKPiA+ID4gKwkJCQkJICAgICAgbWF0Y2gpOwo+ID4gU28gSSdtIG5vdCBzdXJlIHRoaXMg d2lsbCB3b3JrIG91dCB3ZWxsLCBoaWRpbmcgdGhlIG1hc3Rlcl9vcHMgaGVyZSBpbgo+ID4gaGRj cC4gRGVmaW5pdGVseSBuZWVkcyB0byBiZSByZXdyaXR0ZW4gYXMgc29vbiBhcyBpOTE1IG5lZWRz IGFub3RoZXIKPiA+IGNvbXBvbmVudC4gQW5kIG1pZ2h0IG1ha2UgdGhlIGxvYWQvdW5sb2FkIHNw bGl0IGNvbXBsaWNhdGVkLgo+IHdlIGhhdmUgYWxyZWFkeSBkaXNjdXNzZWQgdGhpcy4KPiA+IAo+ ID4gPiArCWlmIChyZXQgPCAwKQo+ID4gPiArCQlnb3RvIG91dF9lcnI7Cj4gPiA+ICsKPiA+ID4g KwlEUk1fSU5GTygiSTkxNSBoZGNwIGNvbXBvbmVudCBtYXN0ZXIgYWRkZWQuXG4iKTsKPiA+IFlv dSBhZGQgYm90aCB0aGUgbWFzdGVyIGFuZCB0aGUgaGRjcCBjb21wb25lbnQgaGVyZS4gT3V0cHV0 IGlzIGEgYml0Cj4gPiBjb25mdXNpbmcuCj4gCj4gd2UgaGF2ZSBjb21wb25lbnQgbWFzdGVyIGFu ZCBhIGNvbXBvbmVudCBmcm9tIG1laSB3aGljaCB3aWxsIG1hdGNoIHRvIHRoZQo+IG1hc3Rlci4K PiAKPiBIZXJlIHdlIGFyZSBhZGRpbmcgdGhlIGNvbXBvbmVudCBtYXN0ZXIuCj4gCj4gPiAKPiA+ ID4gKwlyZXR1cm4gcmV0Owo+ID4gPiArCj4gPiA+ICtvdXRfZXJyOgo+ID4gPiArCWNvbXBvbmVu dF9tYXN0ZXJfZGVsKGRldl9wcml2LT5kcm0uZGV2LAo+ID4gPiArCQkJICAgICAmaTkxNV9oZGNw X2NvbXBvbmVudF9tYXN0ZXJfb3BzKTsKPiA+ID4gKwlrZnJlZShjb21wKTsKPiA+ID4gKwlkZXZf cHJpdi0+aGRjcF9jb21wID0gTlVMTDsKPiA+ID4gKwlEUk1fRVJST1IoIkZhaWxlZCB0byBhZGQg aTkxNSBoZGNwIGNvbXBvbmVudCBtYXN0ZXIgKCVkKVxuIiwgcmV0KTsKPiA+ID4gKwo+ID4gPiAr CXJldHVybiByZXQ7Cj4gPiA+ICt9Cj4gPiA+ICsKPiA+ID4gK3N0YXRpYyBpbnQgaW5pdGlhbGl6 ZV9tZWlfaGRjcF9kYXRhKHN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmNvbm5lY3RvcikKPiA+ID4g K3sKPiA+ID4gKwlzdHJ1Y3QgaW50ZWxfaGRjcCAqaGRjcCA9ICZjb25uZWN0b3ItPmhkY3A7Cj4g PiA+ICsJc3RydWN0IG1laV9oZGNwX2RhdGEgKmRhdGEgPSAmaGRjcC0+bWVpX2RhdGE7Cj4gPiA+ ICsJZW51bSBwb3J0IHBvcnQ7Cj4gPiA+ICsKPiA+ID4gKwlpZiAoY29ubmVjdG9yLT5lbmNvZGVy KSB7Cj4gPiA+ICsJCXBvcnQgPSBjb25uZWN0b3ItPmVuY29kZXItPnBvcnQ7Cj4gPiA+ICsJCWRh dGEtPnBvcnQgPSBHRVRfTUVJX0RESV9JTkRFWChwb3J0KTsKPiA+ID4gKwl9Cj4gPiA+ICsKPiA+ ID4gKwlkYXRhLT5wb3J0X3R5cGUgPSBNRUlfSERDUF9QT1JUX1RZUEVfSU5URUdSQVRFRDsKPiA+ ID4gKwlkYXRhLT5wcm90b2NvbCA9IGhkY3AtPnNoaW0tPmhkY3BfcHJvdG9jb2woKTsKPiA+ID4g Kwo+ID4gPiArCWRhdGEtPmsgPSAxOwo+ID4gPiArCWlmICghZGF0YS0+c3RyZWFtcykKPiA+ID4g KwkJZGF0YS0+c3RyZWFtcyA9IGtjYWxsb2MoZGF0YS0+aywgc2l6ZW9mKGRhdGEtPnN0cmVhbXNb MF0pLAo+ID4gPiArCQkJCQlHRlBfS0VSTkVMKTsKPiA+ID4gKwlpZiAoIWRhdGEtPnN0cmVhbXMp IHsKPiA+ID4gKwkJRFJNX0VSUk9SKCJPdXQgb2YgTWVtb3J5XG4iKTsKPiA+ID4gKwkJcmV0dXJu IC1FTk9NRU07Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJZGF0YS0+c3RyZWFtc1swXS5zdHJl YW1faWQgPSAwOwo+ID4gPiArCWRhdGEtPnN0cmVhbXNbMF0uc3RyZWFtX3R5cGUgPSBoZGNwLT5j b250ZW50X3R5cGU7Cj4gPiA+ICsKPiA+ID4gKwlyZXR1cm4gMDsKPiA+ID4gK30KPiA+ID4gKwo+ ID4gPiAgIGJvb2wgaXNfaGRjcDJfc3VwcG9ydGVkKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpk ZXZfcHJpdikKPiA+ID4gICB7Cj4gPiA+ICAgCXJldHVybiAoKElOVEVMX0dFTihkZXZfcHJpdikg Pj0gMTAgfHwgSVNfR0VNSU5JTEFLRShkZXZfcHJpdikgfHwKPiA+ID4gQEAgLTg0MywxMCArMTI2 MCwyNSBAQCBzdGF0aWMgdm9pZCBpbnRlbF9oZGNwMl9pbml0KHN0cnVjdCBpbnRlbF9jb25uZWN0 b3IgKmNvbm5lY3RvcikKPiA+ID4gICB7Cj4gPiA+ICAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdiA9IHRvX2k5MTUoY29ubmVjdG9yLT5iYXNlLmRldik7Cj4gPiA+ICAgCXN0cnVj dCBpbnRlbF9oZGNwICpoZGNwID0gJmNvbm5lY3Rvci0+aGRjcDsKPiA+ID4gKwlpbnQgcmV0Owo+ ID4gPiAgIAlXQVJOX09OKCFpc19oZGNwMl9zdXBwb3J0ZWQoZGV2X3ByaXYpKTsKPiA+ID4gLQkv KiBUT0RPOiBNRUkgaW50ZXJmYWNlIG5lZWRzIHRvIGJlIGluaXRpYWxpemVkIGhlcmUgKi8KPiA+ ID4gKwlyZXQgPSBpbml0aWFsaXplX21laV9oZGNwX2RhdGEoY29ubmVjdG9yKTsKPiA+ID4gKwlp ZiAocmV0KSB7Cj4gPiA+ICsJCURSTV9ERUJVR19LTVMoIk1laSBoZGNwIGRhdGEgaW5pdCBmYWls ZWRcbiIpOwo+ID4gPiArCQlyZXR1cm47Cj4gPiA+ICsJfQo+ID4gPiArCj4gPiA+ICsJaWYgKCFk ZXZfcHJpdi0+aGRjcF9jb21wKQo+ID4gPiArCQlyZXQgPSBpbnRlbF9oZGNwX2NvbXBvbmVudF9p bml0KGNvbm5lY3Rvcik7Cj4gPiA+ICsKPiA+ID4gKwlpZiAocmV0KSB7Cj4gPiA+ICsJCURSTV9E RUJVR19LTVMoIkhEQ1AgY29tcCBpbml0IGZhaWxlZFxuIik7Cj4gPiA+ICsJCWtmcmVlKGhkY3At Pm1laV9kYXRhLnN0cmVhbXMpOwo+ID4gPiArCQlyZXR1cm47Cj4gPiA+ICsJfQo+ID4gPiArCj4g PiA+ICAgCWhkY3AtPmhkY3AyX3N1cHBvcnRlZCA9IDE7Cj4gPiA+ICAgfQo+ID4gPiBAQCAtODk0 LDkgKzEzMjYsMTcgQEAgdm9pZCBpbnRlbF9oZGNwX2V4aXQoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2KQo+ID4gPiAgIAkJbXV0ZXhfbG9jaygmaW50ZWxfY29ubmVjdG9yLT5oZGNw Lm11dGV4KTsKPiA+ID4gICAJCWludGVsX2Nvbm5lY3Rvci0+aGRjcC5oZGNwMl9zdXBwb3J0ZWQg PSAwOwo+ID4gPiAgIAkJaW50ZWxfY29ubmVjdG9yLT5oZGNwLnNoaW0gPSBOVUxMOwo+ID4gPiAr CQlrZnJlZShpbnRlbF9jb25uZWN0b3ItPmhkY3AubWVpX2RhdGEuc3RyZWFtcyk7Cj4gPiBXZSBu ZWVkIHRvIHB1c2ggdGhpcyBpbnRvIGEgcGVyLWNvbm5lY3RvciBoZGNwIGNsZWFudXAgZnVuY3Rp b24uIE9yIGp1c3QKPiA+IGludG8gdGhlIGdlbmVyaWMgY29ubmVjdG9yIGNsZWFudXAuCj4gV2Ug Y291bGQgbW92ZSBpdCB0byBwZXIgY29ubmVjdG9ywqAgaGRjcCBjbGVhbnVwIGZ1bmN0aW9uLgoK WWVhaCBJIHRoaW5rIHRoYXQgd291bGQgYmUgY2xlYW5lci4KCj4gPiAKPiA+ID4gICAJCW11dGV4 X3VubG9jaygmaW50ZWxfY29ubmVjdG9yLT5oZGNwLm11dGV4KTsKPiA+ID4gICAJfQo+ID4gPiAg IAlkcm1fY29ubmVjdG9yX2xpc3RfaXRlcl9lbmQoJmNvbm5faXRlcik7Cj4gPiA+ICsKPiA+ID4g KwlpZiAoZGV2X3ByaXYtPmhkY3BfY29tcCkgewo+ID4gPiArCQljb21wb25lbnRfbWFzdGVyX2Rl bChkZXZfcHJpdi0+ZHJtLmRldiwKPiA+ID4gKwkJCQkgICAgICZpOTE1X2hkY3BfY29tcG9uZW50 X21hc3Rlcl9vcHMpOwo+ID4gPiArCQlrZnJlZShkZXZfcHJpdi0+aGRjcF9jb21wKTsKPiA+ID4g KwkJZGV2X3ByaXYtPmhkY3BfY29tcCA9IE5VTEw7Cj4gPiA+ICsJfQo+ID4gPiAgIH0KPiA+ID4g ICBpbnQgaW50ZWxfaGRjcF9lbmFibGUoc3RydWN0IGludGVsX2Nvbm5lY3RvciAqY29ubmVjdG9y KQo+ID4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vaTkxNV9jb21wb25lbnQuaCBiL2luY2x1 ZGUvZHJtL2k5MTVfY29tcG9uZW50LmgKPiA+ID4gaW5kZXggZmNhMjJkNDYzZTFiLi4xMjI2ODIy OGY0ZGMgMTAwNjQ0Cj4gPiA+IC0tLSBhL2luY2x1ZGUvZHJtL2k5MTVfY29tcG9uZW50LmgKPiA+ ID4gKysrIGIvaW5jbHVkZS9kcm0vaTkxNV9jb21wb25lbnQuaAo+ID4gPiBAQCAtMjQsOCArMjQs MTIgQEAKPiA+ID4gICAjaWZuZGVmIF9JOTE1X0NPTVBPTkVOVF9IXwo+ID4gPiAgICNkZWZpbmUg X0k5MTVfQ09NUE9ORU5UX0hfCj4gPiA+ICsjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KPiA+ID4g Kwo+ID4gPiAgICNpbmNsdWRlICJkcm1fYXVkaW9fY29tcG9uZW50LmgiCj4gPiA+ICsjaW5jbHVk ZSA8ZHJtL2RybV9oZGNwLmg+Cj4gPiA+ICsKPiA+ID4gICAvKiBNQVhfUE9SVCBpcyB0aGUgbnVt YmVyIG9mIHBvcnQKPiA+ID4gICAgKiBJdCBtdXN0IGJlIHN5bmMgd2l0aCBJOTE1X01BWF9QT1JU UyBkZWZpbmVkIGk5MTVfZHJ2LmgKPiA+ID4gICAgKi8KPiA+ID4gQEAgLTQ2LDQgKzUwLDcxIEBA IHN0cnVjdCBpOTE1X2F1ZGlvX2NvbXBvbmVudCB7Cj4gPiA+ICAgCWludCBhdWRfc2FtcGxlX3Jh dGVbTUFYX1BPUlRTXTsKPiA+ID4gICB9Owo+ID4gPiArc3RydWN0IGk5MTVfaGRjcF9jb21wb25l bnRfb3BzIHsKPiA+IEltbyB0aGF0IHNob3VsZCBiZSBjYWxsZWQgbWVpX2hkY3BfY29tcG9uZW50 X29wcyBhbmQgcHV0IGludG8gdGhlCj4gPiBsaW51eC9tZWlfaGRjcC5oIGhlYWRlci4gT3Igd2Fz IHRoYXQgVGhvbWFzJyByZXZpZXcgY29tbWVudD8KPiAKPiBOb3BlIHRoaXMgaXMgdGhlcmUgZm9y IG1hbnkgdmVyc2lvbnMuIGk5MTVfaGRjcF9jb21wb25lbnRfb3BzIGFyZQo+IGltcGxlbWVudGVk IGJ5IG1laV9oZGNwLmMgYW5kIGluaXRpYWxpemVzIHRoZSBjb21wb25lbnQgd2l0aCB0aGUgJm9w cy4KCkkgc3VtbWFyaXplZCBhbGwgdGhlIGRpc2N1c3Npb24gYXJvdW5kIHRoZSBpOTE1L21laV9o ZGNwIGludGVyZmFjZSBpbiB0aGUKdGhyZWFkIGluIGFuIGVhcmxpZXIgcGF0Y2ggaW4gdGhpcyBz ZXJpZXMuCgpDaGVlcnMsIERhbmllbAoKPiAKPiA+IAo+ID4gQXNpZGU6IFJldmlldyBoZXJlIGlu IHB1YmxpYyBjaGFubmVscyBpbnN0ZWFkIG9mIGluIHByaXZhdGUgd291bGQgYmUgbXVjaAo+ID4g YmV0dGVyIGZvciBjb29yZGluYXRpb24uCj4gCj4gVG9tYXMsCj4gCj4gQ291bGQgeW91IHBsZWFz ZSBoZWxwIG9uIHRoaXMgYXNrLj8KPiAKPiAtLVJhbQo+IAo+ID4gCj4gPiA+ICsJLyoqCj4gPiA+ ICsJICogQG93bmVyOiBtZWlfaGRjcCBtb2R1bGUKPiA+ID4gKwkgKi8KPiA+ID4gKwlzdHJ1Y3Qg bW9kdWxlICpvd25lcjsKPiA+ID4gKwo+ID4gPiArCWludCAoKmluaXRpYXRlX2hkY3AyX3Nlc3Np b24pKHN0cnVjdCBkZXZpY2UgKmRldiwKPiA+ID4gKwkJCQkgICAgICB2b2lkICpoZGNwX2RhdGEs Cj4gPiA+ICsJCQkJICAgICAgc3RydWN0IGhkY3AyX2FrZV9pbml0ICpha2VfZGF0YSk7Cj4gPiA+ ICsJaW50ICgqdmVyaWZ5X3JlY2VpdmVyX2NlcnRfcHJlcGFyZV9rbSkoc3RydWN0IGRldmljZSAq ZGV2LAo+ID4gPiArCQkJCQkgICAgICAgdm9pZCAqaGRjcF9kYXRhLAo+ID4gPiArCQkJCQkgICAg ICAgc3RydWN0IGhkY3AyX2FrZV9zZW5kX2NlcnQKPiA+ID4gKwkJCQkJCQkJKnJ4X2NlcnQsCj4g PiA+ICsJCQkJCSAgICAgICBib29sICprbV9zdG9yZWQsCj4gPiA+ICsJCQkJCSAgICAgICBzdHJ1 Y3QgaGRjcDJfYWtlX25vX3N0b3JlZF9rbQo+ID4gPiArCQkJCQkJCQkqZWtfcHViX2ttLAo+ID4g PiArCQkJCQkgICAgICAgc2l6ZV90ICptc2dfc3opOwo+ID4gPiArCWludCAoKnZlcmlmeV9ocHJp bWUpKHN0cnVjdCBkZXZpY2UgKmRldiwKPiA+ID4gKwkJCSAgICAgdm9pZCAqaGRjcF9kYXRhLAo+ ID4gPiArCQkJICAgICBzdHJ1Y3QgaGRjcDJfYWtlX3NlbmRfaHByaW1lICpyeF9ocHJpbWUpOwo+ ID4gPiArCWludCAoKnN0b3JlX3BhaXJpbmdfaW5mbykoc3RydWN0IGRldmljZSAqZGV2LAo+ID4g PiArCQkJCSAgdm9pZCAqaGRjcF9kYXRhLAo+ID4gPiArCQkJCSAgc3RydWN0IGhkY3AyX2FrZV9z ZW5kX3BhaXJpbmdfaW5mbwo+ID4gPiArCQkJCQkJCQkqcGFpcmluZ19pbmZvKTsKPiA+ID4gKwlp bnQgKCppbml0aWF0ZV9sb2NhbGl0eV9jaGVjaykoc3RydWN0IGRldmljZSAqZGV2LAo+ID4gPiAr CQkJCSAgICAgICB2b2lkICpoZGNwX2RhdGEsCj4gPiA+ICsJCQkJICAgICAgIHN0cnVjdCBoZGNw Ml9sY19pbml0ICpsY19pbml0X2RhdGEpOwo+ID4gPiArCWludCAoKnZlcmlmeV9scHJpbWUpKHN0 cnVjdCBkZXZpY2UgKmRldiwKPiA+ID4gKwkJCSAgICAgdm9pZCAqaGRjcF9kYXRhLAo+ID4gPiAr CQkJICAgICBzdHJ1Y3QgaGRjcDJfbGNfc2VuZF9scHJpbWUgKnJ4X2xwcmltZSk7Cj4gPiA+ICsJ aW50ICgqZ2V0X3Nlc3Npb25fa2V5KShzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gPiA+ICsJCQkgICAg ICAgdm9pZCAqaGRjcF9kYXRhLAo+ID4gPiArCQkJICAgICAgIHN0cnVjdCBoZGNwMl9za2Vfc2Vu ZF9la3MgKnNrZV9kYXRhKTsKPiA+ID4gKwlpbnQgKCpyZXBlYXRlcl9jaGVja19mbG93X3ByZXBh cmVfYWNrKShzdHJ1Y3QgZGV2aWNlICpkZXYsCj4gPiA+ICsJCQkJCSAgICAgICB2b2lkICpoZGNw X2RhdGEsCj4gPiA+ICsJCQkJCSAgICAgICBzdHJ1Y3QgaGRjcDJfcmVwX3NlbmRfcmVjZWl2ZXJp ZF9saXN0Cj4gPiA+ICsJCQkJCQkJCSpyZXBfdG9wb2xvZ3ksCj4gPiA+ICsJCQkJCSAgICAgICBz dHJ1Y3QgaGRjcDJfcmVwX3NlbmRfYWNrCj4gPiA+ICsJCQkJCQkJCSpyZXBfc2VuZF9hY2spOwo+ ID4gPiArCWludCAoKnZlcmlmeV9tcHJpbWUpKHN0cnVjdCBkZXZpY2UgKmRldiwKPiA+ID4gKwkJ CSAgICAgdm9pZCAqaGRjcF9kYXRhLAo+ID4gPiArCQkJICAgICBzdHJ1Y3QgaGRjcDJfcmVwX3N0 cmVhbV9yZWFkeSAqc3RyZWFtX3JlYWR5KTsKPiA+ID4gKwlpbnQgKCplbmFibGVfaGRjcF9hdXRo ZW50aWNhdGlvbikoc3RydWN0IGRldmljZSAqZGV2LAo+ID4gPiArCQkJCQkgIHZvaWQgKmhkY3Bf ZGF0YSk7Cj4gPiA+ICsJaW50ICgqY2xvc2VfaGRjcF9zZXNzaW9uKShzdHJ1Y3QgZGV2aWNlICpk ZXYsCj4gPiA+ICsJCQkJICB2b2lkICpoZGNwX2RhdGEpOwo+ID4gPiArfTsKPiA+ID4gKwo+ID4g PiArLyoqCj4gPiA+ICsgKiBzdHJ1Y3QgaTkxNV9oZGNwX2NvbXBvbmVudF9tYXN0ZXIgLSBVc2Vk IGZvciBjb21tdW5pY2F0aW9uIGJldHdlZW4gaTkxNQo+ID4gPiArICogYW5kIG1laV9oZGNwIGZv ciBIRENQMi4yIHNlcnZpY2VzLgo+ID4gPiArICovCj4gPiA+ICtzdHJ1Y3QgaTkxNV9oZGNwX2Nv bXBvbmVudF9tYXN0ZXIgewo+ID4gPiArCS8qKgo+ID4gPiArCSAqIEBkZXY6IGEgZGV2aWNlIHBy b3ZpZGluZyBoZGNwCj4gPiA+ICsJICovCj4gPiA+ICsJc3RydWN0IGRldmljZSAqZGV2Owo+ID4g PiArCS8qKgo+ID4gPiArCSAqIEBtdXRleDogTXV0ZXggdG8gcHJvdGVjdCB0aGUgc3RhdGUgb2Yg ZGV2Cj4gPiA+ICsJICovCj4gPiA+ICsJc3RydWN0IG11dGV4IG11dGV4Owo+ID4gPiArCS8qKgo+ ID4gPiArCSAqIEBvcHM6IE9wcyBpbXBsZW1lbnRlZCBieSBtZWlfaGRjcCBkcml2ZXIsIHVzZWQg YnkgaTkxNSBkcml2ZXIuCj4gPiA+ICsJICovCj4gPiA+ICsJY29uc3Qgc3RydWN0IGk5MTVfaGRj cF9jb21wb25lbnRfb3BzICpvcHM7Cj4gPiA+ICt9Owo+ID4gPiArCj4gPiA+ICAgI2VuZGlmIC8q IF9JOTE1X0NPTVBPTkVOVF9IXyAqLwo+ID4gPiAtLSAKPiA+ID4gMi43LjQKPiA+ID4gCgotLSAK RGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9yYXRpb24KaHR0cDov L2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwt Z2Z4Cg==