From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 1/4] dma-buf: change DMA-buf locking convention Date: Tue, 17 Sep 2019 15:13:20 +0200 Message-ID: <20190917131320.GU3958@phenom.ffwll.local> References: <20190829142917.13058-1-christian.koenig@amd.com> <20190829142917.13058-2-christian.koenig@amd.com> <20190903080522.GM2112@phenom.ffwll.local> <88f748d2-43de-ae2a-b895-40d8b3be5c78@gmail.com> <20190917123150.GM3958@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: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: "Koenig, Christian" Cc: "intel-gfx@lists.freedesktop.org" , "dri-devel@lists.freedesktop.org" , "linaro-mm-sig@lists.linaro.org" , "linux-media@vger.kernel.org" List-Id: intel-gfx@lists.freedesktop.org T24gVHVlLCBTZXAgMTcsIDIwMTkgYXQgMTI6NDA6NTFQTSArMDAwMCwgS29lbmlnLCBDaHJpc3Rp YW4gd3JvdGU6Cj4gQW0gMTcuMDkuMTkgdW0gMTQ6MzEgc2NocmllYiBEYW5pZWwgVmV0dGVyOgo+ ID4gT24gTW9uLCBTZXAgMTYsIDIwMTkgYXQgMDI6MjM6MTNQTSArMDIwMCwgQ2hyaXN0aWFuIEvD tm5pZyB3cm90ZToKPiA+PiBQaW5nPyBBbnkgZnVydGhlciBjb21tZW50IG9uIHRoaXMgb3IgY2Fu J3Qgd2UgbWVyZ2UgYXQgbGVhc3QgdGhlIGxvY2tpbmcKPiA+PiBjaGFuZ2U/Cj4gPiBJIHdhcyBh dCBwbHVtYmVycyAuLi4KPiA+PiBDaHJpc3RpYW4uCj4gPj4KPiA+PiBBbSAxMS4wOS4xOSB1bSAx Mjo1MyBzY2hyaWViIENocmlzdGlhbiBLw7ZuaWc6Cj4gPj4+IEFtIDAzLjA5LjE5IHVtIDEwOjA1 IHNjaHJpZWIgRGFuaWVsIFZldHRlcjoKPiA+Pj4+IE9uIFRodSwgQXVnIDI5LCAyMDE5IGF0IDA0 OjI5OjE0UE0gKzAyMDAsIENocmlzdGlhbiBLw7ZuaWcgd3JvdGU6Cj4gPj4+Pj4gVGhpcyBwYXRj aCBpcyBhIHN0cmlwcGVkIGRvd24gdmVyc2lvbiBvZiB0aGUgbG9ja2luZyBjaGFuZ2VzCj4gPj4+ Pj4gbmVjZXNzYXJ5IHRvIHN1cHBvcnQgZHluYW1pYyBETUEtYnVmIGhhbmRsaW5nLgo+ID4+Pj4+ Cj4gPj4+Pj4gRm9yIGNvbXBhdGliaWxpdHkgd2UgY2FjaGUgdGhlIERNQS1idWYgbWFwcGluZyBh cyBzb29uIGFzCj4gPj4+Pj4gZXhwb3J0ZXIvaW1wb3J0ZXIgZGlzYWdyZWUgb24gdGhlIGR5bmFt aWMgaGFuZGxpbmcuCj4gPj4+Pj4KPiA+Pj4+PiBTaWduZWQtb2ZmLWJ5OiBDaHJpc3RpYW4gS8O2 bmlnIDxjaHJpc3RpYW4ua29lbmlnQGFtZC5jb20+Cj4gPj4+Pj4gLS0tCj4gPj4+Pj4gIMKgIGRy aXZlcnMvZG1hLWJ1Zi9kbWEtYnVmLmMgfCA5MAo+ID4+Pj4+ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKy0tLQo+ID4+Pj4+ICDCoCBpbmNsdWRlL2xpbnV4L2RtYS1idWYuaMKg wqAgfCA1MSArKysrKysrKysrKysrKysrKysrKystCj4gPj4+Pj4gIMKgIDIgZmlsZXMgY2hhbmdl ZCwgMTMzIGluc2VydGlvbnMoKyksIDggZGVsZXRpb25zKC0pCj4gPj4+Pj4KPiA+Pj4+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9kbWEtYnVmL2RtYS1idWYuYyBiL2RyaXZlcnMvZG1hLWJ1Zi9kbWEt YnVmLmMKPiA+Pj4+PiBpbmRleCA0MzNkOTFkNzEwZTQuLjY1MDUyZDUyNjAyYiAxMDA2NDQKPiA+ Pj4+PiAtLS0gYS9kcml2ZXJzL2RtYS1idWYvZG1hLWJ1Zi5jCj4gPj4+Pj4gKysrIGIvZHJpdmVy cy9kbWEtYnVmL2RtYS1idWYuYwo+ID4+Pj4+IEBAIC01MjUsNiArNTI1LDEwIEBAIHN0cnVjdCBk bWFfYnVmICpkbWFfYnVmX2V4cG9ydChjb25zdCBzdHJ1Y3QKPiA+Pj4+PiBkbWFfYnVmX2V4cG9y dF9pbmZvICpleHBfaW5mbykKPiA+Pj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBFUlJf UFRSKC1FSU5WQUwpOwo+ID4+Pj4+ICDCoMKgwqDCoMKgIH0KPiA+Pj4+PiAgwqAgK8KgwqDCoCBp ZiAoV0FSTl9PTihleHBfaW5mby0+b3BzLT5jYWNoZV9zZ3RfbWFwcGluZyAmJgo+ID4+Pj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGV4cF9pbmZvLT5vcHMtPmR5bmFtaWNfbWFwcGluZykpCj4g Pj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwo+ID4+Pj4+ICsK PiA+Pj4+PiAgwqDCoMKgwqDCoCBpZiAoIXRyeV9tb2R1bGVfZ2V0KGV4cF9pbmZvLT5vd25lcikp Cj4gPj4+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKPiA+ Pj4+PiAgwqAgQEAgLTY0NSwxMCArNjQ5LDExIEBAIHZvaWQgZG1hX2J1Zl9wdXQoc3RydWN0IGRt YV9idWYgKmRtYWJ1ZikKPiA+Pj4+PiAgwqAgRVhQT1JUX1NZTUJPTF9HUEwoZG1hX2J1Zl9wdXQp Owo+ID4+Pj4+ICDCoCDCoCAvKioKPiA+Pj4+PiAtICogZG1hX2J1Zl9hdHRhY2ggLSBBZGQgdGhl IGRldmljZSB0byBkbWFfYnVmJ3MgYXR0YWNobWVudHMKPiA+Pj4+PiBsaXN0OyBvcHRpb25hbGx5 LAo+ID4+Pj4+ICsgKiBkbWFfYnVmX2R5bmFtaWNfYXR0YWNoIC0gQWRkIHRoZSBkZXZpY2UgdG8g ZG1hX2J1ZidzCj4gPj4+Pj4gYXR0YWNobWVudHMgbGlzdDsgb3B0aW9uYWxseSwKPiA+Pj4+PiAg wqDCoCAqIGNhbGxzIGF0dGFjaCgpIG9mIGRtYV9idWZfb3BzIHRvIGFsbG93IGRldmljZS1zcGVj aWZpYwo+ID4+Pj4+IGF0dGFjaCBmdW5jdGlvbmFsaXR5Cj4gPj4+Pj4gLSAqIEBkbWFidWY6wqDC oMKgIFtpbl3CoMKgwqAgYnVmZmVyIHRvIGF0dGFjaCBkZXZpY2UgdG8uCj4gPj4+Pj4gLSAqIEBk ZXY6wqDCoMKgIFtpbl3CoMKgwqAgZGV2aWNlIHRvIGJlIGF0dGFjaGVkLgo+ID4+Pj4+ICsgKiBA ZG1hYnVmOsKgwqDCoMKgwqDCoMKgIFtpbl3CoMKgwqAgYnVmZmVyIHRvIGF0dGFjaCBkZXZpY2Ug dG8uCj4gPj4+Pj4gKyAqIEBkZXY6wqDCoMKgwqDCoMKgwqAgW2luXcKgwqDCoCBkZXZpY2UgdG8g YmUgYXR0YWNoZWQuCj4gPj4+Pj4gKyAqIEBkeW5hbWljX21hcHBpbmc6wqDCoMKgIFtpbl3CoMKg wqAgY2FsbGluZyBjb252ZW50aW9uIGZvciBtYXAvdW5tYXAKPiA+Pj4+PiAgwqDCoCAqCj4gPj4+ Pj4gIMKgwqAgKiBSZXR1cm5zIHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgcG9pbnRlciBmb3Ig dGhpcwo+ID4+Pj4+IGF0dGFjaG1lbnQuIEF0dGFjaG1lbnRzCj4gPj4+Pj4gIMKgwqAgKiBtdXN0 IGJlIGNsZWFuZWQgdXAgYnkgY2FsbGluZyBkbWFfYnVmX2RldGFjaCgpLgo+ID4+Pj4+IEBAIC02 NjIsOCArNjY3LDkgQEAgRVhQT1JUX1NZTUJPTF9HUEwoZG1hX2J1Zl9wdXQpOwo+ID4+Pj4+ICDC oMKgICogYWNjZXNzaWJsZSB0byBAZGV2LCBhbmQgY2Fubm90IGJlIG1vdmVkIHRvIGEgbW9yZSBz dWl0YWJsZQo+ID4+Pj4+IHBsYWNlLiBUaGlzIGlzCj4gPj4+Pj4gIMKgwqAgKiBpbmRpY2F0ZWQg d2l0aCB0aGUgZXJyb3IgY29kZSAtRUJVU1kuCj4gPj4+Pj4gIMKgwqAgKi8KPiA+Pj4+PiAtc3Ry dWN0IGRtYV9idWZfYXR0YWNobWVudCAqZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRt YWJ1ZiwKPiA+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHN0cnVjdCBkZXZpY2UgKmRldikKPiA+Pj4+PiArc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAq Cj4gPj4+Pj4gK2RtYV9idWZfZHluYW1pY19hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1Ziwg c3RydWN0IGRldmljZSAqZGV2LAo+ID4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGJvb2wgZHluYW1pY19tYXBwaW5nKQo+ID4+Pj4+ICDCoCB7Cj4gPj4+Pj4gIMKgwqDCoMKgwqAg c3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoOwo+ID4+Pj4+ICDCoMKgwqDCoMKgIGlu dCByZXQ7Cj4gPj4+Pj4gQEAgLTY3Nyw2ICs2ODMsNyBAQCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2ht ZW50Cj4gPj4+Pj4gKmRtYV9idWZfYXR0YWNoKHN0cnVjdCBkbWFfYnVmICpkbWFidWYsCj4gPj4+ Pj4gIMKgIMKgwqDCoMKgwqAgYXR0YWNoLT5kZXYgPSBkZXY7Cj4gPj4+Pj4gIMKgwqDCoMKgwqAg YXR0YWNoLT5kbWFidWYgPSBkbWFidWY7Cj4gPj4+Pj4gK8KgwqDCoCBhdHRhY2gtPmR5bmFtaWNf bWFwcGluZyA9IGR5bmFtaWNfbWFwcGluZzsKPiA+Pj4+PiAgwqAgwqDCoMKgwqDCoCBtdXRleF9s b2NrKCZkbWFidWYtPmxvY2spOwo+ID4+Pj4+ICDCoCBAQCAtNjg1LDE2ICs2OTIsNjQgQEAgc3Ry dWN0IGRtYV9idWZfYXR0YWNobWVudAo+ID4+Pj4+ICpkbWFfYnVmX2F0dGFjaChzdHJ1Y3QgZG1h X2J1ZiAqZG1hYnVmLAo+ID4+Pj4+ICDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHJldCkKPiA+Pj4+ PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byBlcnJfYXR0YWNoOwo+ID4+Pj4+ICDC oMKgwqDCoMKgIH0KPiA+Pj4+PiArwqDCoMKgIGRtYV9yZXN2X2xvY2soZG1hYnVmLT5yZXN2LCBO VUxMKTsKPiA+Pj4+PiAgwqDCoMKgwqDCoCBsaXN0X2FkZCgmYXR0YWNoLT5ub2RlLCAmZG1hYnVm LT5hdHRhY2htZW50cyk7Cj4gPj4+Pj4gK8KgwqDCoCBkbWFfcmVzdl91bmxvY2soZG1hYnVmLT5y ZXN2KTsKPiA+Pj4+PiAgwqAgwqDCoMKgwqDCoCBtdXRleF91bmxvY2soJmRtYWJ1Zi0+bG9jayk7 Cj4gPj4+Pj4gIMKgICvCoMKgwqAgLyogV2hlbiBlaXRoZXIgdGhlIGltcG9ydGVyIG9yIHRoZSBl eHBvcnRlciBjYW4ndCBoYW5kbGUgZHluYW1pYwo+ID4+Pj4+ICvCoMKgwqDCoCAqIG1hcHBpbmdz IHdlIGNhY2hlIHRoZSBtYXBwaW5nIGhlcmUgdG8gYXZvaWQgaXNzdWVzIHdpdGggdGhlCj4gPj4+ Pj4gK8KgwqDCoMKgICogcmVzZXJ2YXRpb24gb2JqZWN0IGxvY2suCj4gPj4+Pj4gK8KgwqDCoMKg ICovCj4gPj4+Pj4gK8KgwqDCoCBpZiAoZG1hX2J1Zl9hdHRhY2htZW50X2lzX2R5bmFtaWMoYXR0 YWNoKSAhPQo+ID4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBkbWFfYnVmX2lzX2R5bmFtaWMoZG1hYnVm KSkgewo+ID4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBzdHJ1Y3Qgc2dfdGFibGUgKnNndDsKPiA+Pj4+ PiArCj4gPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChkbWFfYnVmX2lzX2R5bmFtaWMoYXR0YWNo LT5kbWFidWYpKQo+ID4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGRtYV9yZXN2X2xvY2so YXR0YWNoLT5kbWFidWYtPnJlc3YsIE5VTEwpOwo+ID4+Pj4+ICsKPiA+Pj4+PiArwqDCoMKgwqDC oMKgwqAgc2d0ID0gZG1hYnVmLT5vcHMtPm1hcF9kbWFfYnVmKGF0dGFjaCwgRE1BX0JJRElSRUNU SU9OQUwpOwo+ID4+Pj4gTm93IHdlJ3JlIGJhY2sgdG8gZW5mb3JjaW5nIERNQV9CSURJLCB3aGlj aCB3b3JrcyBuaWNlbHkgYXJvdW5kIHRoZQo+ID4+Pj4gbG9ja2luZyBwYWluLCBidXQgYXBwYXJl bnRseSB1cHNldHMgdGhlIGFybS1zb2MgZm9sa3Mgd2hvIHdhbnQgdG8KPiA+Pj4+IGNvbnRyb2wK PiA+Pj4+IHRoaXMgYmV0dGVyLgo+ID4+PiBUYWtlIGFub3RoZXIgbG9vayBhdCBkbWFfYnVmX21h cF9hdHRhY2htZW50KCksIHdlIHN0aWxsIHRyeSB0byBnZXQgdGhlCj4gPj4+IGNhY2hpbmcgdGhl cmUgZm9yIEFSTS4KPiA+Pj4KPiA+Pj4gV2hhdCB3ZSBkbyBoZXJlIGlzIHRvIGJpZGlyZWN0aW9u YWxseSBtYXAgdGhlIGJ1ZmZlciB0byBhdm9pZCB0aGUKPiA+Pj4gbG9ja2luZyBoeWRyYSB3aGVu IGltcG9ydGVyIGFuZCBleHBvcnRlciBkaXNhZ3JlZSBvbiBsb2NraW5nLgo+ID4+Pgo+ID4+PiBT byB0aGUgQVJNIGZvbGtzIGNhbiBlYXNpbHkgYXZvaWQgdGhhdCBieSBzd2l0Y2hpbmcgdG8gZHlu YW1pYyBsb2NraW5nCj4gPj4+IGZvciBib3RoLgo+ID4gU28geW91IHN0aWxsIGJyZWFrIHRoZSBj b250cmFjdCBiZXR3ZWVuIGltcG9ydGVyIGFuZCBleHBvcnRlciwgZXhjZXB0IG5vdAo+ID4gZm9y IGFueXRoaW5nIHRoYXQncyBydW4gaW4gaW50ZWwtZ2Z4LWNpIHNvIGFsbCBpcyBnb29kPwo+IAo+ IE5vLCB0aGUgY29udHJhY3QgYmV0d2VlbiBpbXBvcnRlciBhbmQgZXhwb3J0ZXIgc3RheXMgZXhh Y3RseSB0aGUgc2FtZSBpdCAKPiBpcyBjdXJyZW50bHkgYXMgbG9uZyBhcyB5b3UgZG9uJ3Qgc3dp dGNoIHRvIGR5bmFtaWMgZG1hLWJ1ZiBoYW5kbGluZy4KPiAKPiBUaGVyZSBpcyBubyBmdW5jdGlv bmFsIGNoYW5nZSBmb3IgdGhlIEFSTSBmb2xrcyBoZXJlLiBUaGUgb25seSBjaGFuZ2UgCj4gd2hp Y2ggdGFrZXMgZWZmZWN0IGlzIGJldHdlZW4gaTkxNSBhbmQgYW1kZ3B1IGFuZCB0aGF0IGlzIHBl cmZlY3RseSAKPiBjb3ZlcmVkIGJ5IGludGVsLWdmeC1jaS4KClRoZXJlJ3MgcGVvcGxlIHdobyB3 YW50IHRvIHJ1biBhbWRncHUgb24gQVJNPyBBbHNvLCB4ODYgZG9lc24ndCBoYXZlIGNhY2hlCmZs dXNoaW5nIGluIHRoZSBkbWEtYXBpLCBzbyBuYXR1cmFsbHkgdGhpcyBpc24ndCBhbnkgaXNzdWUg Zm9yIHVzICh3ZQpzdGlsbCBoYXZlIGNhY2hlIGZsdXNoaW5nIGluIGFjdHVhbCBodywgYnV0IHRo YXQncyBhIGRpZmZlcmVudCB0b3BpYykuIFNvCiJ3b3JrcyBvbiB4ODYiIGlzbid0IHJlYWxseSBh IGdyZWF0IHdheSB0byBqdXN0aWZ5IHdoYXQgd2UgZG8gaGVyZSBJCnRoaW5rLgotRGFuaWVsCgo+ IAo+IFJlZ2FyZHMsCj4gQ2hyaXN0aWFuLgo+IAo+ID4KPiA+IFRoZSBvdGhlciBpc3N1ZSB3aXRo ICJ3ZSBzb2x2ZSB0aGlzIHdpdGggY2FjaGluZyB0aGUgbWFwcGluZyI6IEN1cnJlbnRseQo+ID4g bWFwL3VubWFwIGZsdXNoIChhdCBsZWFzdCBvbiBhcm0sIGF0IGxlYXN0IG9uIGNhc2VzIHdoZXJl IGl0IG1hdHRlcnMpLiBJZgo+ID4geW91IGp1c3QgcmV0dXJuIHRoZSBjYWNoZWQgc2csIHRoZW4g d2UgZG9uJ3QgZG8gdGhlIGZsdXNoaW5nIGFueW1vcmUsCj4gPiB3aGljaCBtaWdodCBicmVhayBp bXBvcnRlcnMvZXhwb3J0ZXJzIGluIGV4YWN0bHkgdGhlIHNhbWUgd2F5IGFzIGp1c3QKPiA+IGdp dmluZyB0aGVtIHRoZSB3cm9uZyBtYXBwaW5nLiBUaGVyZSdzIHplcm8gZGlmZmVyZW5jZXMgYmV0 d2VlbiBhIEJJREksCj4gPiBUT19DUFUsIG9yIFRPX0RFVklDRSBtYXBwaW5nLCB0aGUgb25seSBw bGFjZXMgd2hlcmUgdGhpcyBtYXR0ZXJzIGlzIGZvcgo+ID4gY2FjaGUgZmx1c2hpbmcuCj4gPgo+ ID4gU28gaGVyZSdzIHNvbWV0aGluZyB0aGF0IGNvdWxkIGFjdHVhbGx5IHdvcms6Cj4gPiAtIFdl IGNhY2hlIHRoZSBtYXBwaW5nLgo+ID4gLSBXZSBjYWNoZSBhIGJpZGlyZWN0aW9uYWwgbWFwcGlu Zy4KPiA+IC0gV2UgcHV0IHRoZSByaWdodCBkbWFfc2dfc3luY19mb3JfY3B1L2RldmljZSBjYWxs cyBpbiBwbGFjZSBmb3IgbWFwL3VubWFwCj4gPiAgICB0byBnaXZlIGN1cnJlbnQgaW1wb3J0ZXJz L2V4cG9ydGVycyB0aGUgc2FtZSBiZWhhdmlvdXIgdGhleSdyZSB1c2VkIHRvCj4gPiAgICBub3cu Cj4gPgo+ID4gQW5kIHllcyB0aGUgY2FjaGluZyB3ZSd2ZSBsaWZ0ZWQgbWlnaHQgaGF2ZSBicm9r ZW4gc29tZXRoaW5nIHNvbWV3aGVyZQo+ID4gYWxyZWFkeS4gQnV0IGdlbmVyYWxseSB5b3Ugb25s eSBoZWFyIGFib3V0IHRoYXQgbG9uZyB0aW1lIGFmdGVyIGJlY2F1c2UKPiA+IGFybSB2ZW5kb3Jz IHJvbGwgZm9yd2FyZCBvbmNlIGV2ZXJ5IGZldyB5ZWFycy4gT3Igc29tZXRoaW5nIGxpa2UgdGhh dC4KPiA+IC1EYW5pZWwKPiA+Cj4gPj4+IFJlZ2FyZHMsCj4gPj4+IENocmlzdGlhbi4KPiA+Pj4K PiA+Pj4+IFRoYXQncyB3aHkgeW91ciBwcmV2aW91cyB2ZXJzaW9uIG1vdmVkIHRoZSBjYWNoaW5n IGludG8KPiA+Pj4+IG1hcC91bm1hcF9zZywgd2hpY2ggcmVzdXJyZWN0ZWQgdGhlIGxvY2tpbmcg aHlkcmEuCj4gPj4+Pgo+ID4+Pj4gSSB0aGluayB3ZSdyZSBnb2luZyBhIGJpdCBpbiBjaXJjbGVz IGhlcmUsIGFuZCBJIGRvbid0IGhhdmUgYSBnb29kIGlkZWEKPiA+Pj4+IGVpdGhlciA6LS8KPiA+ Pj4+IC1EYW5pZWwKPiA+Pj4+Cj4gPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmICghc2d0KQo+ID4+ Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHNndCA9IEVSUl9QVFIoLUVOT01FTSk7Cj4gPj4+ Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChJU19FUlIoc2d0KSkgewo+ID4+Pj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHJldCA9IFBUUl9FUlIoc2d0KTsKPiA+Pj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBnb3RvIGVycl91bmxvY2s7Cj4gPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIH0KPiA+Pj4+ PiArwqDCoMKgwqDCoMKgwqAgaWYgKGRtYV9idWZfaXNfZHluYW1pYyhhdHRhY2gtPmRtYWJ1Zikp Cj4gPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZG1hX3Jlc3ZfdW5sb2NrKGF0dGFjaC0+ ZG1hYnVmLT5yZXN2KTsKPiA+Pj4+PiArwqDCoMKgwqDCoMKgwqAgYXR0YWNoLT5zZ3QgPSBzZ3Q7 Cj4gPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGF0dGFjaC0+ZGlyID0gRE1BX0JJRElSRUNUSU9OQUw7 Cj4gPj4+Pj4gK8KgwqDCoCB9Cj4gPj4+Pj4gKwo+ID4+Pj4+ICDCoMKgwqDCoMKgIHJldHVybiBh dHRhY2g7Cj4gPj4+Pj4gIMKgIMKgIGVycl9hdHRhY2g6Cj4gPj4+Pj4gIMKgwqDCoMKgwqAga2Zy ZWUoYXR0YWNoKTsKPiA+Pj4+PiAgwqDCoMKgwqDCoCBtdXRleF91bmxvY2soJmRtYWJ1Zi0+bG9j ayk7Cj4gPj4+Pj4gIMKgwqDCoMKgwqAgcmV0dXJuIEVSUl9QVFIocmV0KTsKPiA+Pj4+PiArCj4g Pj4+Pj4gK2Vycl91bmxvY2s6Cj4gPj4+Pj4gK8KgwqDCoCBpZiAoZG1hX2J1Zl9pc19keW5hbWlj KGF0dGFjaC0+ZG1hYnVmKSkKPiA+Pj4+PiArwqDCoMKgwqDCoMKgwqAgZG1hX3Jlc3ZfdW5sb2Nr KGF0dGFjaC0+ZG1hYnVmLT5yZXN2KTsKPiA+Pj4+PiArCj4gPj4+Pj4gK8KgwqDCoCBkbWFfYnVm X2RldGFjaChkbWFidWYsIGF0dGFjaCk7Cj4gPj4+Pj4gK8KgwqDCoCByZXR1cm4gRVJSX1BUUihy ZXQpOwo+ID4+Pj4+ICt9Cj4gPj4+Pj4gK0VYUE9SVF9TWU1CT0xfR1BMKGRtYV9idWZfZHluYW1p Y19hdHRhY2gpOwo+ID4+Pj4+ICsKPiA+Pj4+PiArLyoqCj4gPj4+Pj4gKyAqIGRtYV9idWZfYXR0 YWNoIC0gV3JhcHBlciBmb3IgZG1hX2J1Zl9keW5hbWljX2F0dGFjaAo+ID4+Pj4+ICsgKiBAZG1h YnVmOsKgwqDCoCBbaW5dwqDCoMKgIGJ1ZmZlciB0byBhdHRhY2ggZGV2aWNlIHRvLgo+ID4+Pj4+ ICsgKiBAZGV2OsKgwqDCoCBbaW5dwqDCoMKgIGRldmljZSB0byBiZSBhdHRhY2hlZC4KPiA+Pj4+ PiArICoKPiA+Pj4+PiArICogV3JhcHBlciB0byBjYWxsIGRtYV9idWZfZHluYW1pY19hdHRhY2go KSBmb3IgZHJpdmVycyB3aGljaAo+ID4+Pj4+IHN0aWxsIHVzZSBhIHN0YXRpYwo+ID4+Pj4+ICsg KiBtYXBwaW5nLgo+ID4+Pj4+ICsgKi8KPiA+Pj4+PiArc3RydWN0IGRtYV9idWZfYXR0YWNobWVu dCAqZG1hX2J1Zl9hdHRhY2goc3RydWN0IGRtYV9idWYgKmRtYWJ1ZiwKPiA+Pj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkZXZpY2UgKmRldikK PiA+Pj4+PiArewo+ID4+Pj4+ICvCoMKgwqAgcmV0dXJuIGRtYV9idWZfZHluYW1pY19hdHRhY2go ZG1hYnVmLCBkZXYsIGZhbHNlKTsKPiA+Pj4+PiAgwqAgfQo+ID4+Pj4+ICDCoCBFWFBPUlRfU1lN Qk9MX0dQTChkbWFfYnVmX2F0dGFjaCk7Cj4gPj4+Pj4gIMKgIEBAIC03MTEsMTEgKzc2NiwyMCBA QCB2b2lkIGRtYV9idWZfZGV0YWNoKHN0cnVjdCBkbWFfYnVmCj4gPj4+Pj4gKmRtYWJ1Ziwgc3Ry dWN0IGRtYV9idWZfYXR0YWNobWVudCAqYXR0YWNoKQo+ID4+Pj4+ICDCoMKgwqDCoMKgIGlmIChX QVJOX09OKCFkbWFidWYgfHwgIWF0dGFjaCkpCj4gPj4+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoCBy ZXR1cm47Cj4gPj4+Pj4gIMKgIC3CoMKgwqAgaWYgKGF0dGFjaC0+c2d0KQo+ID4+Pj4+ICvCoMKg wqAgaWYgKGF0dGFjaC0+c2d0KSB7Cj4gPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChkbWFfYnVm X2lzX2R5bmFtaWMoYXR0YWNoLT5kbWFidWYpKQo+ID4+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIGRtYV9yZXN2X2xvY2soYXR0YWNoLT5kbWFidWYtPnJlc3YsIE5VTEwpOwo+ID4+Pj4+ICsK PiA+Pj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgIGRtYWJ1Zi0+b3BzLT51bm1hcF9kbWFfYnVmKGF0 dGFjaCwgYXR0YWNoLT5zZ3QsIGF0dGFjaC0+ZGlyKTsKPiA+Pj4+PiAgwqAgK8KgwqDCoMKgwqDC oMKgIGlmIChkbWFfYnVmX2lzX2R5bmFtaWMoYXR0YWNoLT5kbWFidWYpKQo+ID4+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGRtYV9yZXN2X3VubG9jayhhdHRhY2gtPmRtYWJ1Zi0+cmVzdik7 Cj4gPj4+Pj4gK8KgwqDCoCB9Cj4gPj4+Pj4gKwo+ID4+Pj4+ICDCoMKgwqDCoMKgIG11dGV4X2xv Y2soJmRtYWJ1Zi0+bG9jayk7Cj4gPj4+Pj4gK8KgwqDCoCBkbWFfcmVzdl9sb2NrKGRtYWJ1Zi0+ cmVzdiwgTlVMTCk7Cj4gPj4+Pj4gIMKgwqDCoMKgwqAgbGlzdF9kZWwoJmF0dGFjaC0+bm9kZSk7 Cj4gPj4+Pj4gK8KgwqDCoCBkbWFfcmVzdl91bmxvY2soZG1hYnVmLT5yZXN2KTsKPiA+Pj4+PiAg wqDCoMKgwqDCoCBpZiAoZG1hYnVmLT5vcHMtPmRldGFjaCkKPiA+Pj4+PiAgwqDCoMKgwqDCoMKg wqDCoMKgIGRtYWJ1Zi0+b3BzLT5kZXRhY2goZG1hYnVmLCBhdHRhY2gpOwo+ID4+Pj4+ICDCoCBA QCAtNzQ5LDYgKzgxMyw5IEBAIHN0cnVjdCBzZ190YWJsZQo+ID4+Pj4+ICpkbWFfYnVmX21hcF9h dHRhY2htZW50KHN0cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKmF0dGFjaCwKPiA+Pj4+PiAgwqDC oMKgwqDCoCBpZiAoV0FSTl9PTighYXR0YWNoIHx8ICFhdHRhY2gtPmRtYWJ1ZikpCj4gPj4+Pj4g IMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKPiA+Pj4+PiAgwqAg K8KgwqDCoCBpZiAoZG1hX2J1Zl9hdHRhY2htZW50X2lzX2R5bmFtaWMoYXR0YWNoKSkKPiA+Pj4+ PiArwqDCoMKgwqDCoMKgwqAgZG1hX3Jlc3ZfYXNzZXJ0X2hlbGQoYXR0YWNoLT5kbWFidWYtPnJl c3YpOwo+ID4+Pj4+ICsKPiA+Pj4+PiAgwqDCoMKgwqDCoCBpZiAoYXR0YWNoLT5zZ3QpIHsKPiA+ Pj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgIC8qCj4gPj4+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoMKg ICogVHdvIG1hcHBpbmdzIHdpdGggZGlmZmVyZW50IGRpcmVjdGlvbnMgZm9yIHRoZSBzYW1lCj4g Pj4+Pj4gQEAgLTc2MSw2ICs4MjgsOSBAQCBzdHJ1Y3Qgc2dfdGFibGUKPiA+Pj4+PiAqZG1hX2J1 Zl9tYXBfYXR0YWNobWVudChzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gsCj4gPj4+ Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gYXR0YWNoLT5zZ3Q7Cj4gPj4+Pj4gIMKgwqDC oMKgwqAgfQo+ID4+Pj4+ICDCoCArwqDCoMKgIGlmIChkbWFfYnVmX2lzX2R5bmFtaWMoYXR0YWNo LT5kbWFidWYpKQo+ID4+Pj4+ICvCoMKgwqDCoMKgwqDCoCBkbWFfcmVzdl9hc3NlcnRfaGVsZChh dHRhY2gtPmRtYWJ1Zi0+cmVzdik7Cj4gPj4+Pj4gKwo+ID4+Pj4+ICDCoMKgwqDCoMKgIHNnX3Rh YmxlID0gYXR0YWNoLT5kbWFidWYtPm9wcy0+bWFwX2RtYV9idWYoYXR0YWNoLCBkaXJlY3Rpb24p Owo+ID4+Pj4+ICDCoMKgwqDCoMKgIGlmICghc2dfdGFibGUpCj4gPj4+Pj4gIMKgwqDCoMKgwqDC oMKgwqDCoCBzZ190YWJsZSA9IEVSUl9QVFIoLUVOT01FTSk7Cj4gPj4+Pj4gQEAgLTc5Myw5ICs4 NjMsMTUgQEAgdm9pZCBkbWFfYnVmX3VubWFwX2F0dGFjaG1lbnQoc3RydWN0Cj4gPj4+Pj4gZG1h X2J1Zl9hdHRhY2htZW50ICphdHRhY2gsCj4gPj4+Pj4gIMKgwqDCoMKgwqAgaWYgKFdBUk5fT04o IWF0dGFjaCB8fCAhYXR0YWNoLT5kbWFidWYgfHwgIXNnX3RhYmxlKSkKPiA+Pj4+PiAgwqDCoMKg wqDCoMKgwqDCoMKgIHJldHVybjsKPiA+Pj4+PiAgwqAgK8KgwqDCoCBpZiAoZG1hX2J1Zl9hdHRh Y2htZW50X2lzX2R5bmFtaWMoYXR0YWNoKSkKPiA+Pj4+PiArwqDCoMKgwqDCoMKgwqAgZG1hX3Jl c3ZfYXNzZXJ0X2hlbGQoYXR0YWNoLT5kbWFidWYtPnJlc3YpOwo+ID4+Pj4+ICsKPiA+Pj4+PiAg wqDCoMKgwqDCoCBpZiAoYXR0YWNoLT5zZ3QgPT0gc2dfdGFibGUpCj4gPj4+Pj4gIMKgwqDCoMKg wqDCoMKgwqDCoCByZXR1cm47Cj4gPj4+Pj4gIMKgICvCoMKgwqAgaWYgKGRtYV9idWZfaXNfZHlu YW1pYyhhdHRhY2gtPmRtYWJ1ZikpCj4gPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGRtYV9yZXN2X2Fz c2VydF9oZWxkKGF0dGFjaC0+ZG1hYnVmLT5yZXN2KTsKPiA+Pj4+PiArCj4gPj4+Pj4gIMKgwqDC oMKgwqAgYXR0YWNoLT5kbWFidWYtPm9wcy0+dW5tYXBfZG1hX2J1ZihhdHRhY2gsIHNnX3RhYmxl LCBkaXJlY3Rpb24pOwo+ID4+Pj4+ICDCoCB9Cj4gPj4+Pj4gIMKgIEVYUE9SVF9TWU1CT0xfR1BM KGRtYV9idWZfdW5tYXBfYXR0YWNobWVudCk7Cj4gPj4+Pj4gQEAgLTEyMTksMTAgKzEyOTUsMTIg QEAgc3RhdGljIGludCBkbWFfYnVmX2RlYnVnX3Nob3coc3RydWN0Cj4gPj4+Pj4gc2VxX2ZpbGUg KnMsIHZvaWQgKnVudXNlZCkKPiA+Pj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgIHNlcV9wdXRzKHMs ICJcdEF0dGFjaGVkIERldmljZXM6XG4iKTsKPiA+Pj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgIGF0 dGFjaF9jb3VudCA9IDA7Cj4gPj4+Pj4gIMKgICvCoMKgwqDCoMKgwqDCoCBkbWFfcmVzdl9sb2Nr KGJ1Zl9vYmotPnJlc3YsIE5VTEwpOwo+ID4+Pj4+ICDCoMKgwqDCoMKgwqDCoMKgwqAgbGlzdF9m b3JfZWFjaF9lbnRyeShhdHRhY2hfb2JqLCAmYnVmX29iai0+YXR0YWNobWVudHMsCj4gPj4+Pj4g bm9kZSkgewo+ID4+Pj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzZXFfcHJpbnRmKHMs ICJcdCVzXG4iLCBkZXZfbmFtZShhdHRhY2hfb2JqLT5kZXYpKTsKPiA+Pj4+PiAgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgYXR0YWNoX2NvdW50Kys7Cj4gPj4+Pj4gIMKgwqDCoMKgwqDCoMKg wqDCoCB9Cj4gPj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGRtYV9yZXN2X3VubG9jayhidWZfb2JqLT5y ZXN2KTsKPiA+Pj4+PiAgwqAgwqDCoMKgwqDCoMKgwqDCoMKgIHNlcV9wcmludGYocywgIlRvdGFs ICVkIGRldmljZXMgYXR0YWNoZWRcblxuIiwKPiA+Pj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBhdHRhY2hfY291bnQpOwo+ID4+Pj4+IGRpZmYgLS1naXQgYS9pbmNsdWRl L2xpbnV4L2RtYS1idWYuaCBiL2luY2x1ZGUvbGludXgvZG1hLWJ1Zi5oCj4gPj4+Pj4gaW5kZXgg ZWMyMTJjYjI3ZmRjLi5hOGY4YjJiODEyZmQgMTAwNjQ0Cj4gPj4+Pj4gLS0tIGEvaW5jbHVkZS9s aW51eC9kbWEtYnVmLmgKPiA+Pj4+PiArKysgYi9pbmNsdWRlL2xpbnV4L2RtYS1idWYuaAo+ID4+ Pj4+IEBAIC00Miw2ICs0MiwxNyBAQCBzdHJ1Y3QgZG1hX2J1Zl9vcHMgewo+ID4+Pj4+ICDCoMKg wqDCoMKgwqDCoCAqLwo+ID4+Pj4+ICDCoMKgwqDCoMKgIGJvb2wgY2FjaGVfc2d0X21hcHBpbmc7 Cj4gPj4+Pj4gIMKgICvCoMKgwqAgLyoqCj4gPj4+Pj4gK8KgwqDCoMKgICogQGR5bmFtaWNfbWFw cGluZzoKPiA+Pj4+PiArwqDCoMKgwqAgKgo+ID4+Pj4+ICvCoMKgwqDCoCAqIElmIHRydWUgdGhl IGZyYW1ld29yayBtYWtlcyBzdXJlIHRoYXQgdGhlIG1hcC91bm1hcF9kbWFfYnVmCj4gPj4+Pj4g K8KgwqDCoMKgICogY2FsbGJhY2tzIGFyZSBhbHdheXMgY2FsbGVkIHdpdGggdGhlIGRtYV9yZXN2 IG9iamVjdCBsb2NrZWQuCj4gPj4+Pj4gK8KgwqDCoMKgICoKPiA+Pj4+PiArwqDCoMKgwqAgKiBJ ZiBmYWxzZSB0aGUgZnJhbWV3b3JrIG1ha2VzIHVyZSB0aGF0IHRoZSBtYXAvdW5tYXBfZG1hX2J1 Zgo+ID4+Pj4+ICvCoMKgwqDCoCAqIGNhbGxiYWNrcyBhcmUgYWx3YXlzIGNhbGxlZCB3aXRob3V0 IHRoZSBkbWFfcmVzdiBvYmplY3QgbG9ja2VkLgo+ID4+Pj4+ICvCoMKgwqDCoCAqLwo+ID4+Pj4+ ICvCoMKgwqAgYm9vbCBkeW5hbWljX21hcHBpbmc7Cj4gPj4+Pj4gKwo+ID4+Pj4+ICDCoMKgwqDC oMKgIC8qKgo+ID4+Pj4+ICDCoMKgwqDCoMKgwqAgKiBAYXR0YWNoOgo+ID4+Pj4+ICDCoMKgwqDC oMKgwqAgKgo+ID4+Pj4+IEBAIC0xMDksNiArMTIwLDkgQEAgc3RydWN0IGRtYV9idWZfb3BzIHsK PiA+Pj4+PiAgwqDCoMKgwqDCoMKgICogYW55IG90aGVyIGtpbmQgb2Ygc2hhcmluZyB0aGF0IHRo ZSBleHBvcnRlciBtaWdodCB3aXNoIHRvIG1ha2UKPiA+Pj4+PiAgwqDCoMKgwqDCoMKgICogYXZh aWxhYmxlIHRvIGJ1ZmZlci11c2Vycy4KPiA+Pj4+PiAgwqDCoMKgwqDCoMKgICoKPiA+Pj4+PiAr wqDCoMKgwqAgKiBUaGlzIGlzIGFsd2F5cyBjYWxsZWQgd2l0aCB0aGUgZG1hYnVmLT5yZXN2IG9i amVjdCBsb2NrZWQgd2hlbgo+ID4+Pj4+ICvCoMKgwqDCoCAqIHRoZSBkeW5hbWljX21hcHBpbmcg ZmxhZyBpcyB0cnVlLgo+ID4+Pj4+ICvCoMKgwqDCoCAqCj4gPj4+Pj4gIMKgwqDCoMKgwqDCoCAq IFJldHVybnM6Cj4gPj4+Pj4gIMKgwqDCoMKgwqDCoCAqCj4gPj4+Pj4gIMKgwqDCoMKgwqDCoCAq IEEgJnNnX3RhYmxlIHNjYXR0ZXIgbGlzdCBvZiBvciB0aGUgYmFja2luZyBzdG9yYWdlIG9mCj4g Pj4+Pj4gdGhlIERNQSBidWZmZXIsCj4gPj4+Pj4gQEAgLTMyNyw2ICszNDEsOCBAQCBzdHJ1Y3Qg ZG1hX2J1ZiB7Cj4gPj4+Pj4gIMKgwqAgKiBAc2d0OiBjYWNoZWQgbWFwcGluZy4KPiA+Pj4+PiAg wqDCoCAqIEBkaXI6IGRpcmVjdGlvbiBvZiBjYWNoZWQgbWFwcGluZy4KPiA+Pj4+PiAgwqDCoCAq IEBwcml2OiBleHBvcnRlciBzcGVjaWZpYyBhdHRhY2htZW50IGRhdGEuCj4gPj4+Pj4gKyAqIEBk eW5hbWljX21hcHBpbmc6IHRydWUgaWYgZG1hX2J1Zl9tYXAvdW5tYXBfYXR0YWNobWVudCgpIGlz Cj4gPj4+Pj4gY2FsbGVkIHdpdGggdGhlCj4gPj4+Pj4gKyAqIGRtYV9yZXN2IGxvY2sgaGVsZC4K PiA+Pj4+PiAgwqDCoCAqCj4gPj4+Pj4gIMKgwqAgKiBUaGlzIHN0cnVjdHVyZSBob2xkcyB0aGUg YXR0YWNobWVudCBpbmZvcm1hdGlvbiBiZXR3ZWVuIHRoZQo+ID4+Pj4+IGRtYV9idWYgYnVmZmVy Cj4gPj4+Pj4gIMKgwqAgKiBhbmQgaXRzIHVzZXIgZGV2aWNlKHMpLiBUaGUgbGlzdCBjb250YWlu cyBvbmUgYXR0YWNobWVudAo+ID4+Pj4+IHN0cnVjdCBwZXIgZGV2aWNlCj4gPj4+Pj4gQEAgLTM0 Myw2ICszNTksNyBAQCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50IHsKPiA+Pj4+PiAgwqDCoMKg wqDCoCBzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Cj4gPj4+Pj4gIMKgwqDCoMKgwqAgc3RydWN0IHNn X3RhYmxlICpzZ3Q7Cj4gPj4+Pj4gIMKgwqDCoMKgwqAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24g ZGlyOwo+ID4+Pj4+ICvCoMKgwqAgYm9vbCBkeW5hbWljX21hcHBpbmc7Cj4gPj4+Pj4gIMKgwqDC oMKgwqAgdm9pZCAqcHJpdjsKPiA+Pj4+PiAgwqAgfTsKPiA+Pj4+PiAgwqAgQEAgLTM5NCwxMCAr NDExLDM5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfZG1hX2J1ZihzdHJ1Y3QKPiA+Pj4+PiBk bWFfYnVmICpkbWFidWYpCj4gPj4+Pj4gIMKgwqDCoMKgwqAgZ2V0X2ZpbGUoZG1hYnVmLT5maWxl KTsKPiA+Pj4+PiAgwqAgfQo+ID4+Pj4+ICDCoCArLyoqCj4gPj4+Pj4gKyAqIGRtYV9idWZfaXNf ZHluYW1pYyAtIGNoZWNrIGlmIGEgRE1BLWJ1ZiB1c2VzIGR5bmFtaWMgbWFwcGluZ3MuCj4gPj4+ Pj4gKyAqIEBkbWFidWY6IHRoZSBETUEtYnVmIHRvIGNoZWNrCj4gPj4+Pj4gKyAqCj4gPj4+Pj4g KyAqIFJldHVybnMgdHJ1ZSBpZiBhIERNQS1idWYgZXhwb3J0ZXIgd2FudHMgdG8gYmUgY2FsbGVk IHdpdGgKPiA+Pj4+PiB0aGUgZG1hX3Jlc3YKPiA+Pj4+PiArICogbG9ja2VkLCBmYWxzZSBpZiBp dCBkb2Vzbid0IHdhbnRzIHRvIGJlIGNhbGxlZCB3aXRoIHRoZSBsb2NrIGhlbGQuCj4gPj4+Pj4g KyAqLwo+ID4+Pj4+ICtzdGF0aWMgaW5saW5lIGJvb2wgZG1hX2J1Zl9pc19keW5hbWljKHN0cnVj dCBkbWFfYnVmICpkbWFidWYpCj4gPj4+Pj4gK3sKPiA+Pj4+PiArwqDCoMKgIHJldHVybiBkbWFi dWYtPm9wcy0+ZHluYW1pY19tYXBwaW5nOwo+ID4+Pj4+ICt9Cj4gPj4+Pj4gKwo+ID4+Pj4+ICsv KioKPiA+Pj4+PiArICogZG1hX2J1Zl9hdHRhY2htZW50X2lzX2R5bmFtaWMgLSBjaGVjayBpZiBh IERNQS1idWYKPiA+Pj4+PiBhdHRhY2htZW50IHVzZXMgZHluYW1pYwo+ID4+Pj4+ICsgKiBtYXBw aW5zZwo+ID4+Pj4+ICsgKiBAYXR0YWNoOiB0aGUgRE1BLWJ1ZiBhdHRhY2htZW50IHRvIGNoZWNr Cj4gPj4+Pj4gKyAqCj4gPj4+Pj4gKyAqIFJldHVybnMgdHJ1ZSBpZiBhIERNQS1idWYgaW1wb3J0 ZXIgd2FudHMgdG8gY2FsbCB0aGUKPiA+Pj4+PiBtYXAvdW5tYXAgZnVuY3Rpb25zIHdpdGgKPiA+ Pj4+PiArICogdGhlIGRtYV9yZXN2IGxvY2sgaGVsZC4KPiA+Pj4+PiArICovCj4gPj4+Pj4gK3N0 YXRpYyBpbmxpbmUgYm9vbAo+ID4+Pj4+ICtkbWFfYnVmX2F0dGFjaG1lbnRfaXNfZHluYW1pYyhz dHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpCj4gPj4+Pj4gK3sKPiA+Pj4+PiArwqDC oMKgIHJldHVybiBhdHRhY2gtPmR5bmFtaWNfbWFwcGluZzsKPiA+Pj4+PiArfQo+ID4+Pj4+ICsK PiA+Pj4+PiAgwqAgc3RydWN0IGRtYV9idWZfYXR0YWNobWVudCAqZG1hX2J1Zl9hdHRhY2goc3Ry dWN0IGRtYV9idWYgKmRtYWJ1ZiwKPiA+Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCBkZXZpY2UgKmRldik7Cj4gPj4+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgZGV2aWNl ICpkZXYpOwo+ID4+Pj4+ICtzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICoKPiA+Pj4+PiArZG1h X2J1Zl9keW5hbWljX2F0dGFjaChzdHJ1Y3QgZG1hX2J1ZiAqZG1hYnVmLCBzdHJ1Y3QgZGV2aWNl ICpkZXYsCj4gPj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYm9vbCBkeW5hbWlj X21hcHBpbmcpOwo+ID4+Pj4+ICDCoCB2b2lkIGRtYV9idWZfZGV0YWNoKHN0cnVjdCBkbWFfYnVm ICpkbWFidWYsCj4gPj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3Qg ZG1hX2J1Zl9hdHRhY2htZW50ICpkbWFidWZfYXR0YWNoKTsKPiA+Pj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBzdHJ1Y3QgZG1hX2J1Zl9hdHRhY2htZW50ICphdHRhY2gpOwo+ID4+Pj4+ICDC oCDCoCBzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1Zl9leHBvcnQoY29uc3Qgc3RydWN0Cj4gPj4+Pj4g ZG1hX2J1Zl9leHBvcnRfaW5mbyAqZXhwX2luZm8pOwo+ID4+Pj4+ICDCoCBAQCAtNDA5LDYgKzQ1 NSw3IEBAIHN0cnVjdCBzZ190YWJsZQo+ID4+Pj4+ICpkbWFfYnVmX21hcF9hdHRhY2htZW50KHN0 cnVjdCBkbWFfYnVmX2F0dGFjaG1lbnQgKiwKPiA+Pj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKPiA+Pj4+PiAg wqAgdm9pZCBkbWFfYnVmX3VubWFwX2F0dGFjaG1lbnQoc3RydWN0IGRtYV9idWZfYXR0YWNobWVu dCAqLAo+ID4+Pj4+IHN0cnVjdCBzZ190YWJsZSAqLAo+ID4+Pj4+ICDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uKTsKPiA+Pj4+PiArdm9p ZCBkbWFfYnVmX21vdmVfbm90aWZ5KHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmKTsKPiA+Pj4+PiAg wqAgaW50IGRtYV9idWZfYmVnaW5fY3B1X2FjY2VzcyhzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1ZiwK PiA+Pj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGVudW0gZG1hX2Rh dGFfZGlyZWN0aW9uIGRpcik7Cj4gPj4+Pj4gIMKgIGludCBkbWFfYnVmX2VuZF9jcHVfYWNjZXNz KHN0cnVjdCBkbWFfYnVmICpkbWFfYnVmLAo+ID4+Pj4+IC0tIAo+ID4+Pj4+IDIuMTcuMQo+ID4+ Pj4+Cj4gCgotLSAKRGFuaWVsIFZldHRlcgpTb2Z0d2FyZSBFbmdpbmVlciwgSW50ZWwgQ29ycG9y YXRpb24KaHR0cDovL2Jsb2cuZmZ3bGwuY2gKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vZHJpLWRldmVs