From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ville =?iso-8859-1?Q?Syrj=E4l=E4?= Subject: Re: [PATCH v10 2/4] drm/dp: Add a drm_aux-dev module for reading/writing dpcd registers. Date: Fri, 12 Feb 2016 13:53:10 +0200 Message-ID: <20160212115310.GK23290@intel.com> References: <1453417821-2811-1-git-send-email-rafael.antognolli@intel.com> <1453417821-2811-3-git-send-email-rafael.antognolli@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <1453417821-2811-3-git-send-email-rafael.antognolli@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Rafael Antognolli Cc: intel-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org T24gVGh1LCBKYW4gMjEsIDIwMTYgYXQgMDM6MTA6MTlQTSAtMDgwMCwgUmFmYWVsIEFudG9nbm9s bGkgd3JvdGU6Cj4gVGhpcyBtb2R1bGUgaXMgaGVhdmlseSBiYXNlZCBvbiBpMmMtZGV2LiBPbmNl IGxvYWRlZCwgaXQgcHJvdmlkZXMgb25lCj4gZGV2IG5vZGUgcGVyIERQIEFVWCBjaGFubmVsLCBu YW1lZCBkcm1fZHBfYXV4Tiwgd2hlcmUgTiBpcyBhbiBpbnRlZ2VyLgo+IAo+IEl0J3MgcG9zc2li bGUgdG8ga25vdyB3aGljaCBjb25uZWN0b3Igb3ducyB0aGlzIGF1eCBjaGFubmVsIGJ5IGxvb2tp bmcKPiBhdCB0aGUgcmVzcGVjdGl2ZSBzeXNmcyAvc3lzL2NsYXNzL2RybV9hdXhfZGV2L2RybV9k cF9hdXhOL2Nvbm5lY3RvciwgaWYKPiB0aGUgY29ubmVjdG9yIGRldmljZSBwb2ludGVyIHdhcyBj b3JyZWN0bHkgc2V0IGluIHRoZSBhdXggaGVscGVyIHN0cnVjdC4KPiAKPiBUd28gbWFpbiBvcGVy YXRpb25zIGFyZSBwcm92aWRlZCBvbiB0aGUgcmVnaXN0ZXJzIHJlYWQgYW5kIHdyaXRlLiBUaGUK PiBhZGRyZXNzIG9mIHRoZSByZWdpc3RlciB0byBiZSByZWFkIG9yIHdyaXR0ZW4gaXMgZ2l2ZW4g dXNpbmcgbHNlZWsuIFRoZQo+IHNlZWsgcG9zaXRpb24gaXMgdXBkYXRlZCB1cG9uIHJlYWQgb3Ig d3JpdGUuCj4gCj4gdjI6Cj4gIC0gbHNlZWsgaXMgdXNlZCB0byBzZWxlY3QgdGhlIHJlZ2lzdGVy IHRvIHJlYWQvd3JpdGUKPiAgLSByZWFkL3dyaXRlIGFyZSB1c2VkIGluc3RlYWQgb2YgaW9jdGwK PiAgLSBubyBibG9ja2luZ19ub3RpZmllciBpcyB1c2VkLCBqdXN0IGEgZGlyZWN0IGNhbGxiYWNr Cj4gCj4gdjM6Cj4gIC0gdXNlIGRybV9kcF9hdXhfZGV2IHByZWZpeCBmb3IgcHVibGljIGZ1bmN0 aW9ucwo+ICAtIGNoYXJkZXYgaXMgbmFtZWQgZHJtX2RwX2F1eE4KPiAgLSByZWFkL3dyaXRlIGRv bid0IGFsbG9jYXRlIGEgYnVmZmVyIGFueW1vcmUsIGFuZCB0cmFuc2ZlciB1cCB0byAxNiBieXRl cyBhCj4gICAgdGltZQo+ICAtIHJlbW92ZSBub3RpZmllciBsaXN0IGZyb20gdGhlIGltcGxlbWVu dGF0aW9uCj4gIC0gb3B0aW9uIG9uIG1lbnVjb25maWcgaXMgbm93IGEgYm9vbGVhbgo+ICAtIGFk ZCBpbmxpbmUgc3R1YiBmdW5jdGlvbnMgdG8gYXZvaWQgYnJlYWthZ2Ugd2hlbiB0aGlzIG9wdGlv biBpcyBkaXNhYmxlZAo+IAo+IHY0Ogo+ICAtIGZpeCBidWlsZCBzeXN0ZW0gY2hhbmdlcyAtIGFj dHVhbGx5IGRpc2FibGUgdGhpcyBtb2R1bGUgd2hlbiBub3Qgc2VsZWN0ZWQuCj4gCj4gdjU6Cj4g IC0gVXNlIGtyZWYgdG8gYXZvaWQgZGV2aWNlIGNsb3Npbmcgd2hpbGUgc3RpbGwgaW4gdXNlCj4g IC0gRG9uJ3QgdXNlIGxpc3QsIHVzZSBhbiBpZHIgZm9yIHN0b3JpbmcgYXV4X2Rldgo+ICAtIFJl bW92ZSAiY29ubmVjdG9yIiBhdHRyaWJ1dGUKPiAgLSBzZXQgYXV4LmRldiB0byB0aGUgY29ubmVj dG9yIGRybV9jb25uZWN0b3IgZGV2aWNlLCBpbnN0ZWFkIG9mCj4gICAgZHJtX2RldmljZQo+IAo+ IHY2Ogo+ICAtIFVzZSBhdG9taWNfdCBmb3IgdXNhZ2UgY291bnQKPiAgLSBVc2UgYSBtdXRleCBp bnN0ZWFkIG9mIHNwaW5sb2NrIGZvciBpZHIgbG9jawo+ICAtIERlc3Ryb3kgY2hhcmRldiBpbW1l ZGlhdGVseSBvbiB1bnJlZ2lzdGVyCj4gIC0gb3RoZXIgbWlub3Igc3VnZ2VzdGlvbnMgZnJvbSBW aWxsZQo+IAo+IHY3Ogo+ICAtIHN0eWxlIGZpeGVzCj4gIC0gZXJyb3IgaGFuZGxpbmcgZml4ZXMK PiAKPiB2ODoKPiAgLSBtb3JlIGVycm9yIGhhbmRsaW5nIGZpeGVzCj4gCj4gdjk6Cj4gIC0gcmVt b3ZlIG1vZHVsZV9pbml0IGFuZCBtb2R1bGVfZXhpdCwgYW5kIGFkZCBkcm1fZHBfYXV4X2Rldl9p bml0L2V4aXQKPiAgdG8gZHJtX2ttc19oZWxwZXJfaW5pdC9leGl0Lgo+IAo+IFNpZ25lZC1vZmYt Ynk6IFJhZmFlbCBBbnRvZ25vbGxpIDxyYWZhZWwuYW50b2dub2xsaUBpbnRlbC5jb20+CgpPbmx5 IGNoZWNrZWQgdGhlIGluaXQvZXhpdCBzdHVmZiBzaW5jZSBJIHNob3VsZCBoYXZlIHJlYWQgdGhl IHJlc3QgCm1hbnkgdGltZXMgYnkgbm93LgoKUmV2aWV3ZWQtYnk6IFZpbGxlIFN5cmrDpGzDpCA8 dmlsbGUuc3lyamFsYUBsaW51eC5pbnRlbC5jb20+Cgo+IC0tLQo+ICBkcml2ZXJzL2dwdS9kcm0v S2NvbmZpZyAgICAgICAgICAgICAgICAgfCAgIDggKwo+ICBkcml2ZXJzL2dwdS9kcm0vTWFrZWZp bGUgICAgICAgICAgICAgICAgfCAgIDEgKwo+ICBkcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2F1eF9k ZXYuYyAgICAgICAgfCAzNjggKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKPiAgZHJp dmVycy9ncHUvZHJtL2RybV9kcF9oZWxwZXIuYyAgICAgICAgIHwgIDE2ICstCj4gIGRyaXZlcnMv Z3B1L2RybS9kcm1fa21zX2hlbHBlcl9jb21tb24uYyB8ICAxNSArLQo+ICBpbmNsdWRlL2RybS9k cm1fZHBfYXV4X2Rldi5oICAgICAgICAgICAgfCAgNjIgKysrKysrCj4gIDYgZmlsZXMgY2hhbmdl ZCwgNDY4IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pCj4gIGNyZWF0ZSBtb2RlIDEwMDY0 NCBkcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2F1eF9kZXYuYwo+ICBjcmVhdGUgbW9kZSAxMDA2NDQg aW5jbHVkZS9kcm0vZHJtX2RwX2F1eF9kZXYuaAo+IAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vS2NvbmZpZyBiL2RyaXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gaW5kZXggNTliYWJkNS4u ZGZmODdjYSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vS2NvbmZpZwo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9LY29uZmlnCj4gQEAgLTI1LDYgKzI1LDE0IEBAIGNvbmZpZyBEUk1fTUlQ SV9EU0kKPiAgCWJvb2wKPiAgCWRlcGVuZHMgb24gRFJNCj4gIAo+ICtjb25maWcgRFJNX0RQX0FV WF9DSEFSREVWCj4gKwlib29sICJEUk0gRFAgQVVYIEludGVyZmFjZSIKPiArCWRlcGVuZHMgb24g RFJNCj4gKwloZWxwCj4gKwkgIENob29zZSB0aGlzIG9wdGlvbiB0byBlbmFibGUgYSAvZGV2L2Ry bV9kcF9hdXhOIG5vZGUgdGhhdCBhbGxvd3MgdG8KPiArCSAgcmVhZCBhbmQgd3JpdGUgdmFsdWVz IHRvIGFyYml0cmFyeSBEUENEIHJlZ2lzdGVycyBvbiB0aGUgRFAgYXV4Cj4gKwkgIGNoYW5uZWwu Cj4gKwo+ICBjb25maWcgRFJNX0tNU19IRUxQRVIKPiAgCXRyaXN0YXRlCj4gIAlkZXBlbmRzIG9u IERSTQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dw dS9kcm0vTWFrZWZpbGUKPiBpbmRleCBkZmU1MTNmLi40MjRmY2I3IDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9NYWtlZmlsZQo+ IEBAIC0zMCw2ICszMCw3IEBAIGRybV9rbXNfaGVscGVyLXkgOj0gZHJtX2NydGNfaGVscGVyLm8g ZHJtX2RwX2hlbHBlci5vIGRybV9wcm9iZV9oZWxwZXIubyBcCj4gIGRybV9rbXNfaGVscGVyLSQo Q09ORklHX0RSTV9MT0FEX0VESURfRklSTVdBUkUpICs9IGRybV9lZGlkX2xvYWQubwo+ICBkcm1f a21zX2hlbHBlci0kKENPTkZJR19EUk1fRkJERVZfRU1VTEFUSU9OKSArPSBkcm1fZmJfaGVscGVy Lm8KPiAgZHJtX2ttc19oZWxwZXItJChDT05GSUdfRFJNX0tNU19DTUFfSEVMUEVSKSArPSBkcm1f ZmJfY21hX2hlbHBlci5vCj4gK2RybV9rbXNfaGVscGVyLSQoQ09ORklHX0RSTV9EUF9BVVhfQ0hB UkRFVikgKz0gZHJtX2RwX2F1eF9kZXYubwo+ICAKPiAgb2JqLSQoQ09ORklHX0RSTV9LTVNfSEVM UEVSKSArPSBkcm1fa21zX2hlbHBlci5vCj4gIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vZHJtX2RwX2F1eF9kZXYuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfYXV4X2Rldi5jCj4g bmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5mNzNiMzhiCj4gLS0tIC9kZXYv bnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHBfYXV4X2Rldi5jCj4gQEAgLTAsMCAr MSwzNjggQEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTUgSW50ZWwgQ29ycG9yYXRpb24K PiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2Us IHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFu ZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICog dG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBt ZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwg Y29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhl Cj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNl IGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFy YWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBv cnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElT IFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1Mg T1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFO VElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUg QVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFN QUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENP TlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJ TkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiArICoKPiArICogQXV0aG9yczoKPiArICogICAg UmFmYWVsIEFudG9nbm9sbGkgPHJhZmFlbC5hbnRvZ25vbGxpQGludGVsLmNvbT4KPiArICoKPiAr ICovCj4gKwo+ICsjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9m cy5oPgo+ICsjaW5jbHVkZSA8bGludXgvc2xhYi5oPgo+ICsjaW5jbHVkZSA8bGludXgvaW5pdC5o Pgo+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUu aD4KPiArI2luY2x1ZGUgPGxpbnV4L3VhY2Nlc3MuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZHBf aGVscGVyLmg+Cj4gKyNpbmNsdWRlIDxkcm0vZHJtX2NydGMuaD4KPiArI2luY2x1ZGUgPGRybS9k cm1QLmg+Cj4gKwo+ICtzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYgewo+ICsJdW5zaWduZWQgaW5kZXg7 Cj4gKwlzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4Owo+ICsJc3RydWN0IGRldmljZSAqZGV2Owo+ICsJ c3RydWN0IGtyZWYgcmVmY291bnQ7Cj4gKwlhdG9taWNfdCB1c2Vjb3VudDsKPiArfTsKPiArCj4g KyNkZWZpbmUgRFJNX0FVWF9NSU5PUlMJMjU2Cj4gKyNkZWZpbmUgQVVYX01BWF9PRkZTRVQJKDEg PDwgMjApCj4gK3N0YXRpYyBERUZJTkVfSURSKGF1eF9pZHIpOwo+ICtzdGF0aWMgREVGSU5FX01V VEVYKGF1eF9pZHJfbXV0ZXgpOwo+ICtzdGF0aWMgc3RydWN0IGNsYXNzICpkcm1fZHBfYXV4X2Rl dl9jbGFzczsKPiArc3RhdGljIGludCBkcm1fZGV2X21ham9yID0gLTE7Cj4gKwo+ICtzdGF0aWMg c3RydWN0IGRybV9kcF9hdXhfZGV2ICpkcm1fZHBfYXV4X2Rldl9nZXRfYnlfbWlub3IodW5zaWdu ZWQgaW5kZXgpCj4gK3sKPiArCXN0cnVjdCBkcm1fZHBfYXV4X2RldiAqYXV4X2RldiA9IE5VTEw7 Cj4gKwo+ICsJbXV0ZXhfbG9jaygmYXV4X2lkcl9tdXRleCk7Cj4gKwlhdXhfZGV2ID0gaWRyX2Zp bmQoJmF1eF9pZHIsIGluZGV4KTsKPiArCWlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oJmF1eF9k ZXYtPnJlZmNvdW50KSkKPiArCQlhdXhfZGV2ID0gTlVMTDsKPiArCW11dGV4X3VubG9jaygmYXV4 X2lkcl9tdXRleCk7Cj4gKwo+ICsJcmV0dXJuIGF1eF9kZXY7Cj4gK30KPiArCj4gK3N0YXRpYyBz dHJ1Y3QgZHJtX2RwX2F1eF9kZXYgKmFsbG9jX2RybV9kcF9hdXhfZGV2KHN0cnVjdCBkcm1fZHBf YXV4ICphdXgpCj4gK3sKPiArCXN0cnVjdCBkcm1fZHBfYXV4X2RldiAqYXV4X2RldjsKPiArCWlu dCBpbmRleDsKPiArCj4gKwlhdXhfZGV2ID0ga3phbGxvYyhzaXplb2YoKmF1eF9kZXYpLCBHRlBf S0VSTkVMKTsKPiArCWlmICghYXV4X2RldikKPiArCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsK PiArCWF1eF9kZXYtPmF1eCA9IGF1eDsKPiArCWF0b21pY19zZXQoJmF1eF9kZXYtPnVzZWNvdW50 LCAxKTsKPiArCWtyZWZfaW5pdCgmYXV4X2Rldi0+cmVmY291bnQpOwo+ICsKPiArCW11dGV4X2xv Y2soJmF1eF9pZHJfbXV0ZXgpOwo+ICsJaW5kZXggPSBpZHJfYWxsb2NfY3ljbGljKCZhdXhfaWRy LCBhdXhfZGV2LCAwLCBEUk1fQVVYX01JTk9SUywKPiArCQkJCSBHRlBfS0VSTkVMKTsKPiArCW11 dGV4X3VubG9jaygmYXV4X2lkcl9tdXRleCk7Cj4gKwlpZiAoaW5kZXggPCAwKSB7Cj4gKwkJa2Zy ZWUoYXV4X2Rldik7Cj4gKwkJcmV0dXJuIEVSUl9QVFIoaW5kZXgpOwo+ICsJfQo+ICsJYXV4X2Rl di0+aW5kZXggPSBpbmRleDsKPiArCj4gKwlyZXR1cm4gYXV4X2RldjsKPiArfQo+ICsKPiArc3Rh dGljIHZvaWQgcmVsZWFzZV9kcm1fZHBfYXV4X2RldihzdHJ1Y3Qga3JlZiAqcmVmKQo+ICt7Cj4g KwlzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYgKmF1eF9kZXYgPQo+ICsJCWNvbnRhaW5lcl9vZihyZWYs IHN0cnVjdCBkcm1fZHBfYXV4X2RldiwgcmVmY291bnQpOwo+ICsKPiArCWtmcmVlKGF1eF9kZXYp Owo+ICt9Cj4gKwo+ICtzdGF0aWMgc3NpemVfdCBuYW1lX3Nob3coc3RydWN0IGRldmljZSAqZGV2 LAo+ICsJCQkgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsIGNoYXIgKmJ1ZikKPiArewo+ ICsJc3NpemVfdCByZXM7Cj4gKwlzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYgKmF1eF9kZXYgPQo+ICsJ CWRybV9kcF9hdXhfZGV2X2dldF9ieV9taW5vcihNSU5PUihkZXYtPmRldnQpKTsKPiArCj4gKwlp ZiAoIWF1eF9kZXYpCj4gKwkJcmV0dXJuIC1FTk9ERVY7Cj4gKwo+ICsJcmVzID0gc3ByaW50Zihi dWYsICIlc1xuIiwgYXV4X2Rldi0+YXV4LT5uYW1lKTsKPiArCWtyZWZfcHV0KCZhdXhfZGV2LT5y ZWZjb3VudCwgcmVsZWFzZV9kcm1fZHBfYXV4X2Rldik7Cj4gKwo+ICsJcmV0dXJuIHJlczsKPiAr fQo+ICtzdGF0aWMgREVWSUNFX0FUVFJfUk8obmFtZSk7Cj4gKwo+ICtzdGF0aWMgc3RydWN0IGF0 dHJpYnV0ZSAqZHJtX2RwX2F1eF9hdHRyc1tdID0gewo+ICsJJmRldl9hdHRyX25hbWUuYXR0ciwK PiArCU5VTEwsCj4gK307Cj4gK0FUVFJJQlVURV9HUk9VUFMoZHJtX2RwX2F1eCk7Cj4gKwo+ICtz dGF0aWMgaW50IGF1eGRldl9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpm aWxlKQo+ICt7Cj4gKwl1bnNpZ25lZCBpbnQgbWlub3IgPSBpbWlub3IoaW5vZGUpOwo+ICsJc3Ry dWN0IGRybV9kcF9hdXhfZGV2ICphdXhfZGV2Owo+ICsKPiArCWF1eF9kZXYgPSBkcm1fZHBfYXV4 X2Rldl9nZXRfYnlfbWlub3IobWlub3IpOwo+ICsJaWYgKCFhdXhfZGV2KQo+ICsJCXJldHVybiAt RU5PREVWOwo+ICsKPiArCWZpbGUtPnByaXZhdGVfZGF0YSA9IGF1eF9kZXY7Cj4gKwlyZXR1cm4g MDsKPiArfQo+ICsKPiArc3RhdGljIGxvZmZfdCBhdXhkZXZfbGxzZWVrKHN0cnVjdCBmaWxlICpm aWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgd2hlbmNlKQo+ICt7Cj4gKwlyZXR1cm4gZml4ZWRfc2l6 ZV9sbHNlZWsoZmlsZSwgb2Zmc2V0LCB3aGVuY2UsIEFVWF9NQVhfT0ZGU0VUKTsKPiArfQo+ICsK PiArc3RhdGljIHNzaXplX3QgYXV4ZGV2X3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191 c2VyICpidWYsIHNpemVfdCBjb3VudCwKPiArCQkJICAgbG9mZl90ICpvZmZzZXQpCj4gK3sKPiAr CXNpemVfdCBieXRlc19wZW5kaW5nLCBudW1fYnl0ZXNfcHJvY2Vzc2VkID0gMDsKPiArCXN0cnVj dCBkcm1fZHBfYXV4X2RldiAqYXV4X2RldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKPiArCXNzaXpl X3QgcmVzID0gMDsKPiArCj4gKwlpZiAoIWF0b21pY19pbmNfbm90X3plcm8oJmF1eF9kZXYtPnVz ZWNvdW50KSkKPiArCQlyZXR1cm4gLUVOT0RFVjsKPiArCj4gKwlieXRlc19wZW5kaW5nID0gbWlu KChsb2ZmX3QpY291bnQsIEFVWF9NQVhfT0ZGU0VUIC0gKCpvZmZzZXQpKTsKPiArCj4gKwlpZiAo IWFjY2Vzc19vayhWRVJJRllfV1JJVEUsIGJ1ZiwgYnl0ZXNfcGVuZGluZykpIHsKPiArCQlyZXMg PSAtRUZBVUxUOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArCXdoaWxlIChieXRlc19wZW5k aW5nID4gMCkgewo+ICsJCXVpbnQ4X3QgbG9jYWxidWZbRFBfQVVYX01BWF9QQVlMT0FEX0JZVEVT XTsKPiArCQlzc2l6ZV90IHRvZG8gPSBtaW5fdChzaXplX3QsIGJ5dGVzX3BlbmRpbmcsIHNpemVv Zihsb2NhbGJ1ZikpOwo+ICsKPiArCQlyZXMgPSBkcm1fZHBfZHBjZF9yZWFkKGF1eF9kZXYtPmF1 eCwgKm9mZnNldCwgbG9jYWxidWYsIHRvZG8pOwo+ICsJCWlmIChyZXMgPD0gMCkgewo+ICsJCQly ZXMgPSBudW1fYnl0ZXNfcHJvY2Vzc2VkID8gbnVtX2J5dGVzX3Byb2Nlc3NlZCA6IHJlczsKPiAr CQkJZ290byBvdXQ7Cj4gKwkJfQo+ICsJCWlmIChfX2NvcHlfdG9fdXNlcihidWYgKyBudW1fYnl0 ZXNfcHJvY2Vzc2VkLCBsb2NhbGJ1ZiwgcmVzKSkgewo+ICsJCQlyZXMgPSBudW1fYnl0ZXNfcHJv Y2Vzc2VkID8KPiArCQkJCW51bV9ieXRlc19wcm9jZXNzZWQgOiAtRUZBVUxUOwo+ICsJCQlnb3Rv IG91dDsKPiArCQl9Cj4gKwkJYnl0ZXNfcGVuZGluZyAtPSByZXM7Cj4gKwkJKm9mZnNldCArPSBy ZXM7Cj4gKwkJbnVtX2J5dGVzX3Byb2Nlc3NlZCArPSByZXM7Cj4gKwkJcmVzID0gbnVtX2J5dGVz X3Byb2Nlc3NlZDsKPiArCX0KPiArCj4gK291dDoKPiArCWF0b21pY19kZWMoJmF1eF9kZXYtPnVz ZWNvdW50KTsKPiArCXdha2VfdXBfYXRvbWljX3QoJmF1eF9kZXYtPnVzZWNvdW50KTsKPiArCXJl dHVybiByZXM7Cj4gK30KPiArCj4gK3N0YXRpYyBzc2l6ZV90IGF1eGRldl93cml0ZShzdHJ1Y3Qg ZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZiwKPiArCQkJICAgIHNpemVfdCBjb3Vu dCwgbG9mZl90ICpvZmZzZXQpCj4gK3sKPiArCXNpemVfdCBieXRlc19wZW5kaW5nLCBudW1fYnl0 ZXNfcHJvY2Vzc2VkID0gMDsKPiArCXN0cnVjdCBkcm1fZHBfYXV4X2RldiAqYXV4X2RldiA9IGZp bGUtPnByaXZhdGVfZGF0YTsKPiArCXNzaXplX3QgcmVzID0gMDsKPiArCj4gKwlpZiAoIWF0b21p Y19pbmNfbm90X3plcm8oJmF1eF9kZXYtPnVzZWNvdW50KSkKPiArCQlyZXR1cm4gLUVOT0RFVjsK PiArCj4gKwlieXRlc19wZW5kaW5nID0gbWluKChsb2ZmX3QpY291bnQsIEFVWF9NQVhfT0ZGU0VU IC0gKm9mZnNldCk7Cj4gKwo+ICsJaWYgKCFhY2Nlc3Nfb2soVkVSSUZZX1JFQUQsIGJ1ZiwgYnl0 ZXNfcGVuZGluZykpIHsKPiArCQlyZXMgPSAtRUZBVUxUOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ ICsKPiArCXdoaWxlIChieXRlc19wZW5kaW5nID4gMCkgewo+ICsJCXVpbnQ4X3QgbG9jYWxidWZb RFBfQVVYX01BWF9QQVlMT0FEX0JZVEVTXTsKPiArCQlzc2l6ZV90IHRvZG8gPSBtaW5fdChzaXpl X3QsIGJ5dGVzX3BlbmRpbmcsIHNpemVvZihsb2NhbGJ1ZikpOwo+ICsKPiArCQlpZiAoX19jb3B5 X2Zyb21fdXNlcihsb2NhbGJ1ZiwKPiArCQkJCSAgICAgYnVmICsgbnVtX2J5dGVzX3Byb2Nlc3Nl ZCwgdG9kbykpIHsKPiArCQkJcmVzID0gbnVtX2J5dGVzX3Byb2Nlc3NlZCA/Cj4gKwkJCQludW1f Ynl0ZXNfcHJvY2Vzc2VkIDogLUVGQVVMVDsKPiArCQkJZ290byBvdXQ7Cj4gKwkJfQo+ICsKPiAr CQlyZXMgPSBkcm1fZHBfZHBjZF93cml0ZShhdXhfZGV2LT5hdXgsICpvZmZzZXQsIGxvY2FsYnVm LCB0b2RvKTsKPiArCQlpZiAocmVzIDw9IDApIHsKPiArCQkJcmVzID0gbnVtX2J5dGVzX3Byb2Nl c3NlZCA/IG51bV9ieXRlc19wcm9jZXNzZWQgOiByZXM7Cj4gKwkJCWdvdG8gb3V0Owo+ICsJCX0K PiArCQlieXRlc19wZW5kaW5nIC09IHJlczsKPiArCQkqb2Zmc2V0ICs9IHJlczsKPiArCQludW1f Ynl0ZXNfcHJvY2Vzc2VkICs9IHJlczsKPiArCQlyZXMgPSBudW1fYnl0ZXNfcHJvY2Vzc2VkOwo+ ICsJfQo+ICsKPiArb3V0Ogo+ICsJYXRvbWljX2RlYygmYXV4X2Rldi0+dXNlY291bnQpOwo+ICsJ d2FrZV91cF9hdG9taWNfdCgmYXV4X2Rldi0+dXNlY291bnQpOwo+ICsJcmV0dXJuIHJlczsKPiAr fQo+ICsKPiArc3RhdGljIGludCBhdXhkZXZfcmVsZWFzZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBz dHJ1Y3QgZmlsZSAqZmlsZSkKPiArewo+ICsJc3RydWN0IGRybV9kcF9hdXhfZGV2ICphdXhfZGV2 ID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwo+ICsKPiArCWtyZWZfcHV0KCZhdXhfZGV2LT5yZWZjb3Vu dCwgcmVsZWFzZV9kcm1fZHBfYXV4X2Rldik7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3Rh dGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgYXV4ZGV2X2ZvcHMgPSB7Cj4gKwkub3du ZXIJCT0gVEhJU19NT0RVTEUsCj4gKwkubGxzZWVrCQk9IGF1eGRldl9sbHNlZWssCj4gKwkucmVh ZAkJPSBhdXhkZXZfcmVhZCwKPiArCS53cml0ZQkJPSBhdXhkZXZfd3JpdGUsCj4gKwkub3BlbgkJ PSBhdXhkZXZfb3BlbiwKPiArCS5yZWxlYXNlCT0gYXV4ZGV2X3JlbGVhc2UsCj4gK307Cj4gKwo+ ICsjZGVmaW5lIHRvX2F1eGRldihkKSBjb250YWluZXJfb2YoZCwgc3RydWN0IGRybV9kcF9hdXhf ZGV2LCBhdXgpCj4gKwo+ICtzdGF0aWMgc3RydWN0IGRybV9kcF9hdXhfZGV2ICpkcm1fZHBfYXV4 X2Rldl9nZXRfYnlfYXV4KHN0cnVjdCBkcm1fZHBfYXV4ICphdXgpCj4gK3sKPiArCXN0cnVjdCBk cm1fZHBfYXV4X2RldiAqaXRlciwgKmF1eF9kZXYgPSBOVUxMOwo+ICsJaW50IGlkOwo+ICsKPiAr CS8qIGRvbid0IGluY3JlYXNlIGtyZWYgY291bnQgaGVyZSBiZWNhdXNlIHRoaXMgZnVuY3Rpb24g c2hvdWxkIG9ubHkgYmUKPiArCSAqIHVzZWQgYnkgZHJtX2RwX2F1eF91bnJlZ2lzdGVyX2Rldm5v ZGUuIFRodXMsIGl0IHdpbGwgYWx3YXlzIGhhdmUgYXQKPiArCSAqIGxlYXN0IG9uZSByZWZlcmVu Y2UgLSB0aGUgb25lIHRoYXQgZHJtX2RwX2F1eF9yZWdpc3Rlcl9kZXZub2RlCj4gKwkgKiBjcmVh dGVkCj4gKwkgKi8KPiArCW11dGV4X2xvY2soJmF1eF9pZHJfbXV0ZXgpOwo+ICsJaWRyX2Zvcl9l YWNoX2VudHJ5KCZhdXhfaWRyLCBpdGVyLCBpZCkgewo+ICsJCWlmIChpdGVyLT5hdXggPT0gYXV4 KSB7Cj4gKwkJCWF1eF9kZXYgPSBpdGVyOwo+ICsJCQlicmVhazsKPiArCQl9Cj4gKwl9Cj4gKwlt dXRleF91bmxvY2soJmF1eF9pZHJfbXV0ZXgpOwo+ICsJcmV0dXJuIGF1eF9kZXY7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgYXV4ZGV2X3dhaXRfYXRvbWljX3QoYXRvbWljX3QgKnApCj4gK3sKPiAr CXNjaGVkdWxlKCk7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsvKioKPiArICogZHJtX2RwX2F1eF91 bnJlZ2lzdGVyX2Rldm5vZGUoKSAtIHVucmVnaXN0ZXIgYSBkZXZub2RlIGZvciB0aGlzIGF1eCBj aGFubmVsCj4gKyAqIEBhdXg6IERpc3BsYXlQb3J0IEFVWCBjaGFubmVsCj4gKyAqCj4gKyAqIFJl dHVybnMgMCBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlLgo+ ICsgKi8KPiArdm9pZCBkcm1fZHBfYXV4X3VucmVnaXN0ZXJfZGV2bm9kZShzdHJ1Y3QgZHJtX2Rw X2F1eCAqYXV4KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2RwX2F1eF9kZXYgKmF1eF9kZXY7Cj4gKwl1 bnNpZ25lZCBpbnQgbWlub3I7Cj4gKwo+ICsJYXV4X2RldiA9IGRybV9kcF9hdXhfZGV2X2dldF9i eV9hdXgoYXV4KTsKPiArCWlmICghYXV4X2RldikgLyogYXR0YWNoIG11c3QgaGF2ZSBmYWlsZWQg Ki8KPiArCQlyZXR1cm47Cj4gKwo+ICsJbXV0ZXhfbG9jaygmYXV4X2lkcl9tdXRleCk7Cj4gKwlp ZHJfcmVtb3ZlKCZhdXhfaWRyLCBhdXhfZGV2LT5pbmRleCk7Cj4gKwltdXRleF91bmxvY2soJmF1 eF9pZHJfbXV0ZXgpOwo+ICsKPiArCWF0b21pY19kZWMoJmF1eF9kZXYtPnVzZWNvdW50KTsKPiAr CXdhaXRfb25fYXRvbWljX3QoJmF1eF9kZXYtPnVzZWNvdW50LCBhdXhkZXZfd2FpdF9hdG9taWNf dCwKPiArCQkJIFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsKPiArCj4gKwltaW5vciA9IGF1eF9kZXYt PmluZGV4Owo+ICsJaWYgKGF1eF9kZXYtPmRldikKPiArCQlkZXZpY2VfZGVzdHJveShkcm1fZHBf YXV4X2Rldl9jbGFzcywKPiArCQkJICAgICAgIE1LREVWKGRybV9kZXZfbWFqb3IsIG1pbm9yKSk7 Cj4gKwo+ICsJRFJNX0RFQlVHKCJkcm1fZHBfYXV4X2RldjogYXV4IFslc10gdW5yZWdpc3Rlcmlu Z1xuIiwgYXV4LT5uYW1lKTsKPiArCWtyZWZfcHV0KCZhdXhfZGV2LT5yZWZjb3VudCwgcmVsZWFz ZV9kcm1fZHBfYXV4X2Rldik7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1fZHBfYXV4X3VucmVn aXN0ZXJfZGV2bm9kZSk7Cj4gKwo+ICsvKioKPiArICogZHJtX2RwX2F1eF9yZWdpc3Rlcl9kZXZu b2RlKCkgLSByZWdpc3RlciBhIGRldm5vZGUgZm9yIHRoaXMgYXV4IGNoYW5uZWwKPiArICogQGF1 eDogRGlzcGxheVBvcnQgQVVYIGNoYW5uZWwKPiArICoKPiArICogUmV0dXJucyAwIG9uIHN1Y2Nl c3Mgb3IgYSBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUuCj4gKyAqLwo+ICtpbnQgZHJt X2RwX2F1eF9yZWdpc3Rlcl9kZXZub2RlKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgpCj4gK3sKPiAr CXN0cnVjdCBkcm1fZHBfYXV4X2RldiAqYXV4X2RldjsKPiArCWludCByZXM7Cj4gKwo+ICsJYXV4 X2RldiA9IGFsbG9jX2RybV9kcF9hdXhfZGV2KGF1eCk7Cj4gKwlpZiAoSVNfRVJSKGF1eF9kZXYp KQo+ICsJCXJldHVybiBQVFJfRVJSKGF1eF9kZXYpOwo+ICsKPiArCWF1eF9kZXYtPmRldiA9IGRl dmljZV9jcmVhdGUoZHJtX2RwX2F1eF9kZXZfY2xhc3MsIGF1eC0+ZGV2LAo+ICsJCQkJICAgICBN S0RFVihkcm1fZGV2X21ham9yLCBhdXhfZGV2LT5pbmRleCksIE5VTEwsCj4gKwkJCQkgICAgICJk cm1fZHBfYXV4JWQiLCBhdXhfZGV2LT5pbmRleCk7Cj4gKwlpZiAoSVNfRVJSKGF1eF9kZXYtPmRl dikpIHsKPiArCQlyZXMgPSBQVFJfRVJSKGF1eF9kZXYtPmRldik7Cj4gKwkJYXV4X2Rldi0+ZGV2 ID0gTlVMTDsKPiArCQlnb3RvIGVycm9yOwo+ICsJfQo+ICsKPiArCURSTV9ERUJVRygiZHJtX2Rw X2F1eF9kZXY6IGF1eCBbJXNdIHJlZ2lzdGVyZWQgYXMgbWlub3IgJWRcbiIsCj4gKwkJICBhdXgt Pm5hbWUsIGF1eF9kZXYtPmluZGV4KTsKPiArCXJldHVybiAwOwo+ICtlcnJvcjoKPiArCWRybV9k cF9hdXhfdW5yZWdpc3Rlcl9kZXZub2RlKGF1eCk7Cj4gKwlyZXR1cm4gcmVzOwo+ICt9Cj4gK0VY UE9SVF9TWU1CT0woZHJtX2RwX2F1eF9yZWdpc3Rlcl9kZXZub2RlKTsKPiArCj4gK2ludCBkcm1f ZHBfYXV4X2Rldl9pbml0KHZvaWQpCj4gK3sKPiArCWludCByZXM7Cj4gKwo+ICsJZHJtX2RwX2F1 eF9kZXZfY2xhc3MgPSBjbGFzc19jcmVhdGUoVEhJU19NT0RVTEUsICJkcm1fZHBfYXV4X2RldiIp Owo+ICsJaWYgKElTX0VSUihkcm1fZHBfYXV4X2Rldl9jbGFzcykpIHsKPiArCQlyZXMgPSBQVFJf RVJSKGRybV9kcF9hdXhfZGV2X2NsYXNzKTsKPiArCQlnb3RvIG91dDsKPiArCX0KPiArCWRybV9k cF9hdXhfZGV2X2NsYXNzLT5kZXZfZ3JvdXBzID0gZHJtX2RwX2F1eF9ncm91cHM7Cj4gKwo+ICsJ cmVzID0gcmVnaXN0ZXJfY2hyZGV2KDAsICJhdXgiLCAmYXV4ZGV2X2ZvcHMpOwo+ICsJaWYgKHJl cyA8IDApCj4gKwkJZ290byBvdXQ7Cj4gKwlkcm1fZGV2X21ham9yID0gcmVzOwo+ICsKPiArCXJl dHVybiAwOwo+ICtvdXQ6Cj4gKwljbGFzc19kZXN0cm95KGRybV9kcF9hdXhfZGV2X2NsYXNzKTsK PiArCXJldHVybiByZXM7Cj4gK30KPiArRVhQT1JUX1NZTUJPTChkcm1fZHBfYXV4X2Rldl9pbml0 KTsKPiArCj4gK3ZvaWQgZHJtX2RwX2F1eF9kZXZfZXhpdCh2b2lkKQo+ICt7Cj4gKwl1bnJlZ2lz dGVyX2NocmRldihkcm1fZGV2X21ham9yLCAiYXV4Iik7Cj4gKwljbGFzc19kZXN0cm95KGRybV9k cF9hdXhfZGV2X2NsYXNzKTsKPiArfQo+ICtFWFBPUlRfU1lNQk9MKGRybV9kcF9hdXhfZGV2X2V4 aXQpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2RwX2hlbHBlci5jIGIvZHJp dmVycy9ncHUvZHJtL2RybV9kcF9oZWxwZXIuYwo+IGluZGV4IDk1MzVjNWIuLjdkNThmNTkgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9kcF9oZWxwZXIuYwo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS9kcm1fZHBfaGVscGVyLmMKPiBAQCAtMjgsNiArMjgsNyBAQAo+ICAjaW5jbHVk ZSA8bGludXgvc2NoZWQuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgo+ICAjaW5jbHVkZSA8 ZHJtL2RybV9kcF9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1fZHBfYXV4X2Rldi5oPgo+ ICAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KPiAgCj4gIC8qKgo+IEBAIC03NTQsNiArNzU1LDggQEAg c3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIGRybV9kcF9pMmNfYWxnbyA9IHsKPiAg ICovCj4gIGludCBkcm1fZHBfYXV4X3JlZ2lzdGVyKHN0cnVjdCBkcm1fZHBfYXV4ICphdXgpCj4g IHsKPiArCWludCByZXQ7Cj4gKwo+ICAJbXV0ZXhfaW5pdCgmYXV4LT5od19tdXRleCk7Cj4gIAo+ ICAJYXV4LT5kZGMuYWxnbyA9ICZkcm1fZHBfaTJjX2FsZ287Cj4gQEAgLTc2OCw3ICs3NzEsMTcg QEAgaW50IGRybV9kcF9hdXhfcmVnaXN0ZXIoc3RydWN0IGRybV9kcF9hdXggKmF1eCkKPiAgCXN0 cmxjcHkoYXV4LT5kZGMubmFtZSwgYXV4LT5uYW1lID8gYXV4LT5uYW1lIDogZGV2X25hbWUoYXV4 LT5kZXYpLAo+ICAJCXNpemVvZihhdXgtPmRkYy5uYW1lKSk7Cj4gIAo+IC0JcmV0dXJuIGkyY19h ZGRfYWRhcHRlcigmYXV4LT5kZGMpOwo+ICsJcmV0ID0gZHJtX2RwX2F1eF9yZWdpc3Rlcl9kZXZu b2RlKGF1eCk7Cj4gKwlpZiAocmV0KQo+ICsJCXJldHVybiByZXQ7Cj4gKwo+ICsJcmV0ID0gaTJj X2FkZF9hZGFwdGVyKCZhdXgtPmRkYyk7Cj4gKwlpZiAocmV0KSB7Cj4gKwkJZHJtX2RwX2F1eF91 bnJlZ2lzdGVyX2Rldm5vZGUoYXV4KTsKPiArCQlyZXR1cm4gcmV0Owo+ICsJfQo+ICsKPiArCXJl dHVybiAwOwo+ICB9Cj4gIEVYUE9SVF9TWU1CT0woZHJtX2RwX2F1eF9yZWdpc3Rlcik7Cj4gIAo+ IEBAIC03NzgsNiArNzkxLDcgQEAgRVhQT1JUX1NZTUJPTChkcm1fZHBfYXV4X3JlZ2lzdGVyKTsK PiAgICovCj4gIHZvaWQgZHJtX2RwX2F1eF91bnJlZ2lzdGVyKHN0cnVjdCBkcm1fZHBfYXV4ICph dXgpCj4gIHsKPiArCWRybV9kcF9hdXhfdW5yZWdpc3Rlcl9kZXZub2RlKGF1eCk7Cj4gIAlpMmNf ZGVsX2FkYXB0ZXIoJmF1eC0+ZGRjKTsKPiAgfQo+ICBFWFBPUlRfU1lNQk9MKGRybV9kcF9hdXhf dW5yZWdpc3Rlcik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fa21zX2hlbHBl cl9jb21tb24uYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fa21zX2hlbHBlcl9jb21tb24uYwo+IGlu ZGV4IGQzNjEwMDUuLjMxODdjNGIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9r bXNfaGVscGVyX2NvbW1vbi5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9rbXNfaGVscGVy X2NvbW1vbi5jCj4gQEAgLTI3LDYgKzI3LDcgQEAKPiAgCj4gICNpbmNsdWRlIDxkcm0vZHJtUC5o Pgo+ICAjaW5jbHVkZSA8ZHJtL2RybV9mYl9oZWxwZXIuaD4KPiArI2luY2x1ZGUgPGRybS9kcm1f ZHBfYXV4X2Rldi5oPgo+ICAKPiAgTU9EVUxFX0FVVEhPUigiRGF2aWQgQWlybGllLCBKZXNzZSBC YXJuZXMiKTsKPiAgTU9EVUxFX0RFU0NSSVBUSU9OKCJEUk0gS01TIGhlbHBlciIpOwo+IEBAIC0z NCwxMyArMzUsMjUgQEAgTU9EVUxFX0xJQ0VOU0UoIkdQTCBhbmQgYWRkaXRpb25hbCByaWdodHMi KTsKPiAgCj4gIHN0YXRpYyBpbnQgX19pbml0IGRybV9rbXNfaGVscGVyX2luaXQodm9pZCkKPiAg ewo+ICsJaW50IHJldDsKPiArCj4gIAkvKiBDYWxsIGluaXQgZnVuY3Rpb25zIGZyb20gc3BlY2lm aWMga21zIGhlbHBlcnMgaGVyZSAqLwo+IC0JcmV0dXJuIGRybV9mYl9oZWxwZXJfbW9kaW5pdCgp Owo+ICsJcmV0ID0gZHJtX2ZiX2hlbHBlcl9tb2Rpbml0KCk7Cj4gKwlpZiAocmV0IDwgMCkKPiAr CQlnb3RvIG91dDsKPiArCj4gKwlyZXQgPSBkcm1fZHBfYXV4X2Rldl9pbml0KCk7Cj4gKwlpZiAo cmV0IDwgMCkKPiArCQlnb3RvIG91dDsKPiArCj4gK291dDoKPiArCXJldHVybiByZXQ7Cj4gIH0K PiAgCj4gIHN0YXRpYyB2b2lkIF9fZXhpdCBkcm1fa21zX2hlbHBlcl9leGl0KHZvaWQpCj4gIHsK PiAgCS8qIENhbGwgZXhpdCBmdW5jdGlvbnMgZnJvbSBzcGVjaWZpYyBrbXMgaGVscGVycyBoZXJl ICovCj4gKwlkcm1fZHBfYXV4X2Rldl9leGl0KCk7Cj4gIH0KPiAgCj4gIG1vZHVsZV9pbml0KGRy bV9rbXNfaGVscGVyX2luaXQpOwo+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fZHBfYXV4 X2Rldi5oIGIvaW5jbHVkZS9kcm0vZHJtX2RwX2F1eF9kZXYuaAo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4gaW5kZXggMDAwMDAwMC4uMWI3NmQ5OQo+IC0tLSAvZGV2L251bGwKPiArKysgYi9pbmNs dWRlL2RybS9kcm1fZHBfYXV4X2Rldi5oCj4gQEAgLTAsMCArMSw2MiBAQAo+ICsvKgo+ICsgKiBD b3B5cmlnaHQgwqkgMjAxNSBJbnRlbCBDb3Jwb3JhdGlvbgo+ICsgKgo+ICsgKiBQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcgYQo+ICsgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+ICsgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2Fy ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gKyAq IHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmli dXRlLCBzdWJsaWNlbnNlLAo+ICsgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJl LCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiArICogU29mdHdhcmUgaXMgZnVy bmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiAr ICoKPiArICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu b3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+ICsgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1 ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gKyAqIFNv ZnR3YXJlLgo+ICsgKgo+ICsgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lU SE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+ICsgKiBJTVBMSUVELCBJTkNM VURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSwKPiArICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBI T0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gKyAqIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJX SVNFLCBBUklTSU5HCj4gKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhF IFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiArICogSU4gVEhFIFNPRlRX QVJFLgo+ICsgKgo+ICsgKiBBdXRob3JzOgo+ICsgKiAgICBSYWZhZWwgQW50b2dub2xsaSA8cmFm YWVsLmFudG9nbm9sbGlAaW50ZWwuY29tPgo+ICsgKgo+ICsgKi8KPiArCj4gKyNpZm5kZWYgRFJN X0RQX0FVWF9ERVYKPiArI2RlZmluZSBEUk1fRFBfQVVYX0RFVgo+ICsKPiArI2luY2x1ZGUgPGRy bS9kcm1fZHBfaGVscGVyLmg+Cj4gKwo+ICsjaWZkZWYgQ09ORklHX0RSTV9EUF9BVVhfQ0hBUkRF Vgo+ICsKPiAraW50IGRybV9kcF9hdXhfZGV2X2luaXQodm9pZCk7Cj4gK3ZvaWQgZHJtX2RwX2F1 eF9kZXZfZXhpdCh2b2lkKTsKPiAraW50IGRybV9kcF9hdXhfcmVnaXN0ZXJfZGV2bm9kZShzdHJ1 Y3QgZHJtX2RwX2F1eCAqYXV4KTsKPiArdm9pZCBkcm1fZHBfYXV4X3VucmVnaXN0ZXJfZGV2bm9k ZShzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4KTsKPiArCj4gKyNlbHNlCj4gKwo+ICtzdGF0aWMgaW5s aW5lIGludCBkcm1fZHBfYXV4X2Rldl9pbml0KHZvaWQpCj4gK3sKPiArCXJldHVybiAwOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW5saW5lIHZvaWQgZHJtX2RwX2F1eF9kZXZfZXhpdCh2b2lkKQo+ICt7 Cj4gK30KPiArCj4gK3N0YXRpYyBpbmxpbmUgaW50IGRybV9kcF9hdXhfcmVnaXN0ZXJfZGV2bm9k ZShzdHJ1Y3QgZHJtX2RwX2F1eCAqYXV4KQo+ICt7Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiAr c3RhdGljIGlubGluZSB2b2lkIGRybV9kcF9hdXhfdW5yZWdpc3Rlcl9kZXZub2RlKHN0cnVjdCBk cm1fZHBfYXV4ICphdXgpCj4gK3sKPiArfQo+ICsKPiArI2VuZGlmCj4gKwo+ICsjZW5kaWYKPiAt LSAKPiAyLjQuMwo+IAo+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCj4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+IEludGVsLWdmeEBsaXN0cy5mcmVlZGVz a3RvcC5vcmcKPiBodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8v aW50ZWwtZ2Z4CgotLSAKVmlsbGUgU3lyasOkbMOkCkludGVsIE9UQwpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0Cklu dGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5v cmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK