From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 09/60] drm/bridge: Add connector-related bridge operations and data Date: Wed, 14 Aug 2019 19:02:29 +0200 Message-ID: <20190814170229.GJ7444@phenom.ffwll.local> References: <20190707180852.5512-1-laurent.pinchart@ideasonboard.com> <20190707181937.6250-1-laurent.pinchart@ideasonboard.com> <20190707181937.6250-6-laurent.pinchart@ideasonboard.com> <1f98e5f0-d513-d3f2-420d-80e0e0c3c71b@samsung.com> <20190711073548.GD15868@phenom.ffwll.local> <20190808181948.GW6055@pendragon.ideasonboard.com> <20190808183631.GX6055@pendragon.ideasonboard.com> <20190814130329.GF7444@phenom.ffwll.local> <20190814133057.GN5009@pendragon.ideasonboard.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x541.google.com (mail-ed1-x541.google.com [IPv6:2a00:1450:4864:20::541]) by gabe.freedesktop.org (Postfix) with ESMTPS id 21E716E780 for ; Wed, 14 Aug 2019 17:02:35 +0000 (UTC) Received: by mail-ed1-x541.google.com with SMTP id w5so7677968edl.8 for ; Wed, 14 Aug 2019 10:02:35 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20190814133057.GN5009@pendragon.ideasonboard.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Laurent Pinchart Cc: Maxime Ripard , Sebastian Reichel , dri-devel@lists.freedesktop.org, Tomi Valkeinen , Sean Paul List-Id: dri-devel@lists.freedesktop.org T24gV2VkLCBBdWcgMTQsIDIwMTkgYXQgMDQ6MzA6NTdQTSArMDMwMCwgTGF1cmVudCBQaW5jaGFy dCB3cm90ZToKPiBIaSBEYW5pZWwsCj4gCj4gT24gV2VkLCBBdWcgMTQsIDIwMTkgYXQgMDM6MDM6 MjlQTSArMDIwMCwgRGFuaWVsIFZldHRlciB3cm90ZToKPiA+IE9uIFRodSwgQXVnIDA4LCAyMDE5 IGF0IDA5OjM2OjMxUE0gKzAzMDAsIExhdXJlbnQgUGluY2hhcnQgd3JvdGU6Cj4gPiA+IE9uIFRo dSwgQXVnIDA4LCAyMDE5IGF0IDA5OjE5OjQ4UE0gKzAzMDAsIExhdXJlbnQgUGluY2hhcnQgd3Jv dGU6Cj4gPiA+PiBPbiBUaHUsIEp1bCAxMSwgMjAxOSBhdCAwOTozNTo0OEFNICswMjAwLCBEYW5p ZWwgVmV0dGVyIHdyb3RlOgo+ID4gPj4+IE9uIFdlZCwgSnVsIDEwLCAyMDE5IGF0IDAyOjEyOjE0 UE0gKzAyMDAsIEFuZHJ6ZWogSGFqZGEgd3JvdGU6Cj4gPiA+Pj4+IEhpIExhdXJlbnQsCj4gPiA+ Pj4+IAo+ID4gPj4+PiBJIGxpa2UgdGhlIGFwcHJvYWNoLCBjdXJyZW50IHByYWN0aWNlIHdoZW4g YWxtb3N0IGV2ZXJ5IGJyaWRnZSBzaG91bGQKPiA+ID4+Pj4gb3B0aW9uYWxseSBpbXBsZW1lbnQg Y29ubmVjdG9yLCBvciBhbHRlcm5hdGl2ZWx5IGRvd25zdHJlYW0gYnJpZGdlIG9yCj4gPiA+Pj4+ IHBhbmVsIGlzIHZlcnkgcGFpbmZ1bC4KPiA+ID4+PiAKPiA+ID4+PiBZZWFoIEkgdGhpbmsgdGhp cyBsb29rcyBtb3N0bHkgcmVhc29uYWJsZS4gU29tZSBhcGkgZGVzaWduIGNvbW1lbnRzIG9uIHRv cAo+ID4gPj4+IG9mIEFuZHJ6ZWonLCB3aXRoIHRoZSBmYWlyIHdhcm5pbmcgdGhhdCBJIGRpZG4n dCBib3RoZXIgdG8gcmVhZCB1cCBvbiBob3cKPiA+ID4+PiBpdCdzIGFsbCB1c2VkIGluIHRoZSBl bmQuIEkgcHJvYmFibHkgc2hvdWxkIGdvIGFuZCBkbyB0aGF0LCBhdCBsZWFzdCB0bwo+ID4gPj4+ IGdldCBhIGZlZWxpbmcgZm9yIHdoYXQgeW91ciBocGRfY2IgdXN1YWxseSBkb2VzLgo+ID4gPj4+ IAo+ID4gPj4+PiBNb3JlIGNvbW1lbnRzIGlubGluZWQuCj4gPiA+Pj4+IAo+ID4gPj4+PiBPbiAw Ny4wNy4yMDE5IDIwOjE4LCBMYXVyZW50IFBpbmNoYXJ0IHdyb3RlOgo+ID4gPj4+Pj4gVG8gc3Vw cG9ydCBpbXBsZW1lbnRhdGlvbiBvZiBEUk0gY29ubmVjdG9ycyBvbiB0b3Agb2YgRFJNIGJyaWRn ZXMKPiA+ID4+Pj4+IGluc3RlYWQgb2YgYnkgYnJpZGdlcywgdGhlIGRybV9icmlkZ2UgbmVlZHMg dG8gZXhwb3NlIG5ldyBvcGVyYXRpb25zIGFuZAo+ID4gPj4+Pj4gZGF0YToKPiA+ID4+Pj4+Cj4g PiA+Pj4+PiAtIE91dHB1dCBkZXRlY3Rpb24sIGhvdC1wbHVnIG5vdGlmaWNhdGlvbiwgbW9kZSBy ZXRyaWV2YWwgYW5kIEVESUQKPiA+ID4+Pj4+ICAgcmV0cmlldmFsIG9wZXJhdGlvbnMKPiA+ID4+ Pj4+IC0gQml0bWFzayBvZiBzdXBwb3J0ZWQgb3BlcmF0aW9ucwo+ID4gPj4+PiAKPiA+ID4+Pj4g Cj4gPiA+Pj4+IFdoeSBkbyB3ZSBuZWVkIHRoZXNlIGJpdG1hc2sgYXQgYWxsPyBXaHkgY2Fubm90 IHdlIHJlbHkgb24gcHJlc2VuY2Ugb2YKPiA+ID4+Pj4gb3BlcmF0aW9uJ3MgY2FsbGJhY2s/Cj4g PiA+Pj4gCj4gPiA+Pj4gWWVhaCBhbHNvIG5vdCBhIGh1Z2UgZmFuIG9mIHRoZXNlIGJpdG1hc2tz LiBTbWVsbHMgbGlrZQo+ID4gPj4+IERSSVZFUl9HRU18RFJJVkVSX01PREVTRVQsIGFuZCBJIHBl cnNvbmFsbHkgcmVhbGx5IGhhdGUgdGhvc2UuIEVhc3kgdG8KPiA+ID4+PiBhZGQsIGdlbmVyYWxs eSBnb29kIGV4Y3VzZSB0byBub3QgaGF2ZSB0byB0aGluayB0aHJvdWdoIHRoZSBkZXNpZ24gYmV0 d2Vlbgo+ID4gPj4+IGRpZmZlcmVudCBwYXJ0cyBvZiBkcml2ZXJzIC0gImp1c3QiIGFkZCBhbm90 aGVyIGZsYWcuCj4gPiA+PiAKPiA+ID4+IFRoZSByZWFzb24gaXMgdGhhdCBhIGJyaWRnZSBtYXkg c3VwcG9ydCBhbiBvcGVyYXRpb24gKGFzIGluIGltcGxlbWVudGVkCj4gPiA+PiBpbiB0aGUgYnJp ZGdlIGhhcmR3YXJlKSwgYnV0IHRoYXQgb3BlcmF0aW9uIG1heSBub3QgYmUgc3VwcG9ydGVkIG9u IGEKPiA+ID4+IHBhcnRpY3VsYXIgYm9hcmQuIEZvciBpbnN0YW5jZSBhbiBIRE1JIGVuY29kZXIg bWF5IHN1cHBvcnQgcmVhZGluZyBFRElECj4gPiA+PiB3aGVuIHRoZSBEREMgbGluZXMgYXJlIGNv bm5lY3RlZCB0byB0aGUgZW5jb2RlciwgYnV0IGEgYm9hcmQgbWF5IGNvbm5lY3QKPiA+ID4+IHRo ZSBEREMgbGluZXMgdG8gYW4gSTJDIHBvcnQgb2YgdGhlIFNvQy4gV2UgdGh1cyBuZWVkIHRvIGRl Y291cGxlCj4gPiA+PiBpZiBhIHBhcnRpY3VsYXIgaW5zdGFuY2Ugb2YgdGhlIGRldmljZSBzdXBw b3J0cyB0aGUgb3BlcmF0aW9uIChleHBvc2VkCj4gPiA+PiBieSB0aGUgb3BzIGZsYWdzKSBmcm9t IHRoZSBmdW5jdGlvbiBwb2ludGVycy4KPiA+ID4+IAo+ID4gPj4gV2UgY291bGQgb2YgY291cnNl IGFsbG9jYXRlIHRoZSBkcm1fYnJpZGdlX2Z1bmNzIHN0cnVjdHVyZSBkeW5hbWljYWxseQo+ID4g Pj4gZm9yIGVhY2ggYnJpZGdlIGluc3RhbmNlLCBhbmQgZmlsbCBpdCB3aXRoIGZ1bmN0aW9uIHBv aW50ZXJzIG1hbnVhbGx5LAo+ID4gPj4gbGVhdmluZyB0aGUgdW51c2VkIG9wcyBhbHdheXMgTlVM TCwgYnV0IHRoYXQgd291bGQgcmVxdWlyZSBtYWtpbmcgdGhlCj4gPiA+PiBzdHJ1Y3R1cmUgd3Jp dGFibGUsIHdoaWNoIGlzIGNvbnNpZGVyZWQgYSBzZWN1cml0eSBpc3N1ZS4gVGhhdCdzIHdoeSBJ Cj4gPiA+PiBkZWNpZGVkIHRvIGtlZXAgdGhlIGRybV9icmlkZ2VfZnVuY3Mgc3RydWN0dXJlIGFz IGEgZ2xvYmFsIHN0YXRpYyBjb25zdAo+ID4gPj4gc3RydWN0dXJlLCBhbmQgYWRkIGFuIG9wcyBi aXRtYXNrLgo+ID4gPj4gCj4gPiA+Pj4+PiAtIEJyaWRnZSBvdXRwdXQgdHlwZQo+ID4gPj4+Pj4K PiA+ID4+Pj4+IEFkZCBhbmQgZG9jdW1lbnQgdGhlc2UuCj4gPiA+Pj4+Pgo+ID4gPj4+Pj4gVGhy ZWUgbmV3IGJyaWRnZSBoZWxwZXIgZnVuY3Rpb25zIGFyZSBhbHNvIGFkZGVkIHRvIGhhbmRsZSBo b3QgcGx1Zwo+ID4gPj4+Pj4gbm90aWZpY2F0aW9uIGluIGEgd2F5IHRoYXQgaXMgYXMgdHJhbnNw YXJlbnQgYXMgcG9zc2libGUgZm9yIHRoZQo+ID4gPj4+Pj4gYnJpZGdlcy4KPiA+ID4+Pj4gCj4g PiA+Pj4+IERvY3VtZW50YXRpb24gb2YgbmV3IG9wc2VzIGRvZXMgbm90IGV4cGxhaW4gaG93IGl0 IHNob3VsZCBjb29wZXJhdGUgd2l0aAo+ID4gPj4+PiBicmlkZ2UgY2hhaW5pbmcsIEkgc3VwcG9z ZSB0aGV5IHNob3VsZCBiZSBjaGFpbmVkIGV4cGxpY2l0bHksIGFtIEkKPiA+ID4+Pj4gcmlnaHQ/ IE1vcmUgY29tbWVudHMgYWJvdXQgaXQgbGF0ZXIuCj4gPiA+PiAKPiA+ID4+IE5vLCB0aGUgd2hv bGUgcG9pbnQgaXMgdGhhdCB0aGV5IHNob3VsZCBub3QgYmUgY2hhaW5lZCBhdCBhbGwuIEEgYnJp ZGdlCj4gPiA+PiBkb2VzIG5vdCBoYXZlIHRvIHByb3BhZ2F0ZSwgZm9yIGluc3RhbmNlLCAuZ2V0 X2VkaWQoKSB0byB0aGUgbmV4dAo+ID4gPj4gYnJpZGdlLiBUaGF0J3Mgb25lIG9mIHRoZSBjb3Jl IGRlc2lnbiBwcmluY2lwbGVzIGluIHRoaXMgc2VyaWVzLCBJIHdhbnQKPiA+ID4+IHRvIGtlZXAg dGhlIGJyaWRnZXMgYXMgc2ltcGxlIGFzIHBvc3NpYmxlLCBhbmQgbW92ZSB0aGUgY29tcGxleGl0 eSBvZgo+ID4gPj4gdGhlIGJvaWxlcnBsYXRlIGNvZGUgdGhhdCBpcyBjdXJyZW50bHkgY29waWVk IGFsbCBhcm91bmQgdG8gaGVscGVycy4gU2VlCj4gPiA+PiBwYXRjaCAiZHJtOiBBZGQgaGVscGVy IHRvIGNyZWF0ZSBhIGNvbm5lY3RvciBmb3IgYSBjaGFpbiBvZiBicmlkZ2VzIiBmb3IKPiA+ID4+ IG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRoaXMgaXMgdXNlZCwgd2l0aCBhIGhlbHBlciB0 aGF0IGRlbGVnYXRlcwo+ID4gPj4gdGhlIGNvbm5lY3RvciBvcGVyYXRpb25zIHRvIHRoZSBjb3Jy ZWN0IGJyaWRnZSBpbiB0aGUgY2hhaW4gYmFzZWQgb24gdGhlCj4gPiA+PiBvcHMgcmVwb3J0ZWQg YnkgZWFjaCBicmlkZ2UuCj4gPiA+PiAKPiA+ID4+Pj4+IFNpZ25lZC1vZmYtYnk6IExhdXJlbnQg UGluY2hhcnQgPGxhdXJlbnQucGluY2hhcnRAaWRlYXNvbmJvYXJkLmNvbT4KPiA+ID4+Pj4+IC0t LQo+ID4gPj4+Pj4gIGRyaXZlcnMvZ3B1L2RybS9kcm1fYnJpZGdlLmMgfCAgOTIgKysrKysrKysr KysrKysrKysrKwo+ID4gPj4+Pj4gIGluY2x1ZGUvZHJtL2RybV9icmlkZ2UuaCAgICAgfCAxNzAg KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KPiA+ID4+Pj4+ICAyIGZpbGVzIGNo YW5nZWQsIDI2MSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCj4gPiA+Pj4+Pgo+ID4gPj4+ Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnJpZGdlLmMgYi9kcml2ZXJzL2dw dS9kcm0vZHJtX2JyaWRnZS5jCj4gPiA+Pj4+PiBpbmRleCA1MTk1NzdmMzYzZTMuLjNjMmEyNTVk ZjdhZiAxMDA2NDQKPiA+ID4+Pj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnJpZGdlLmMK PiA+ID4+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnJpZGdlLmMKPiA+ID4+Pj4+IEBA IC03MCw2ICs3MCw4IEBAIHN0YXRpYyBMSVNUX0hFQUQoYnJpZGdlX2xpc3QpOwo+ID4gPj4+Pj4g ICAqLwo+ID4gPj4+Pj4gIHZvaWQgZHJtX2JyaWRnZV9hZGQoc3RydWN0IGRybV9icmlkZ2UgKmJy aWRnZSkKPiA+ID4+Pj4+ICB7Cj4gPiA+Pj4+PiArCW11dGV4X2luaXQoJmJyaWRnZS0+aHBkX211 dGV4KTsKPiA+ID4+Pj4+ICsKPiA+ID4+Pj4+ICAJbXV0ZXhfbG9jaygmYnJpZGdlX2xvY2spOwo+ ID4gPj4+Pj4gIAlsaXN0X2FkZF90YWlsKCZicmlkZ2UtPmxpc3QsICZicmlkZ2VfbGlzdCk7Cj4g PiA+Pj4+PiAgCW11dGV4X3VubG9jaygmYnJpZGdlX2xvY2spOwo+ID4gPj4+Pj4gQEAgLTg2LDYg Kzg4LDggQEAgdm9pZCBkcm1fYnJpZGdlX3JlbW92ZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdl KQo+ID4gPj4+Pj4gIAltdXRleF9sb2NrKCZicmlkZ2VfbG9jayk7Cj4gPiA+Pj4+PiAgCWxpc3Rf ZGVsX2luaXQoJmJyaWRnZS0+bGlzdCk7Cj4gPiA+Pj4+PiAgCW11dGV4X3VubG9jaygmYnJpZGdl X2xvY2spOwo+ID4gPj4+Pj4gKwo+ID4gPj4+Pj4gKwltdXRleF9kZXN0cm95KCZicmlkZ2UtPmhw ZF9tdXRleCk7Cj4gPiA+Pj4+PiAgfQo+ID4gPj4+Pj4gIEVYUE9SVF9TWU1CT0woZHJtX2JyaWRn ZV9yZW1vdmUpOwo+ID4gPj4+Pj4gIAo+ID4gPj4+Pj4gQEAgLTQ2Myw2ICs0NjcsOTQgQEAgdm9p ZCBkcm1fYXRvbWljX2JyaWRnZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKPiA+ ID4+Pj4+ICB9Cj4gPiA+Pj4+PiAgRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2JyaWRnZV9lbmFi bGUpOwo+ID4gPj4+Pj4gIAo+ID4gPj4+Pj4gKy8qKgo+ID4gPj4+Pj4gKyAqIGRybV9icmlkZ2Vf aHBkX2VuYWJsZSAtIGVuYWJsZSBob3QgcGx1ZyBkZXRlY3Rpb24gZm9yIHRoZSBicmlkZ2UKPiA+ ID4+Pj4+ICsgKiBAYnJpZGdlOiBicmlkZ2UgY29udHJvbCBzdHJ1Y3R1cmUKPiA+ID4+Pj4+ICsg KiBAY2I6IGhvdC1wbHVnIGRldGVjdGlvbiBjYWxsYmFjawo+ID4gPj4+Pj4gKyAqIEBkYXRhOiBk YXRhIHRvIGJlIHBhc3NlZCB0byB0aGUgaG90LXBsdWcgZGV0ZWN0aW9uIGNhbGxiYWNrCj4gPiA+ Pj4+PiArICoKPiA+ID4+Pj4+ICsgKiBDYWxsICZkcm1fYnJpZGdlX2Z1bmNzLmhwZF9lbmFibGUg YW5kIHJlZ2lzdGVyIHRoZSBnaXZlbiBAY2IgYW5kIEBkYXRhIGFzCj4gPiA+Pj4+PiArICogaG90 IHBsdWcgbm90aWZpY2F0aW9uIGNhbGxiYWNrLiBGcm9tIG5vdyBvbiB0aGUgQGNiIHdpbGwgYmUg Y2FsbGVkIHdpdGgKPiA+ID4+Pj4+ICsgKiBAZGF0YSB3aGVuIGFuIG91dHB1dCBzdGF0dXMgY2hh bmdlIGlzIGRldGVjdGVkIGJ5IHRoZSBicmlkZ2UsIHVudGlsIGhvdCBwbHVnCj4gPiA+Pj4+PiAr ICogbm90aWZpY2F0aW9uIGdldHMgZGlzYWJsZWQgd2l0aCBkcm1fYnJpZGdlX2hwZF9kaXNhYmxl KCkuCj4gPiA+Pj4+PiArICoKPiA+ID4+Pj4+ICsgKiBIb3QgcGx1ZyBkZXRlY3Rpb24gaXMgc3Vw cG9ydGVkIG9ubHkgaWYgdGhlIERSTV9CUklER0VfT1BfSFBEIGZsYWcgaXMgc2V0IGluCj4gPiA+ Pj4+PiArICogYnJpZGdlLT5vcHMuIFRoaXMgZnVuY3Rpb24gc2hhbGwgbm90IGJlIGNhbGxlZCB3 aGVuIHRoZSBmbGFnIGlzIG5vdCBzZXQuCj4gPiA+Pj4+PiArICoKPiA+ID4+Pj4+ICsgKiBPbmx5 IG9uZSBob3QgcGx1ZyBkZXRlY3Rpb24gY2FsbGJhY2sgY2FuIGJlIHJlZ2lzdGVyZWQgYXQgYSB0 aW1lLCBpdCBpcyBhbgo+ID4gPj4+Pj4gKyAqIGVycm9yIHRvIGNhbGwgdGhpcyBmdW5jdGlvbiB3 aGVuIGhvdCBwbHVnIGRldGVjdGlvbiBpcyBhbHJlYWR5IGVuYWJsZWQgZm9yCj4gPiA+Pj4+PiAr ICogdGhlIGJyaWRnZS4KPiA+ID4+Pj4+ICsgKi8KPiA+ID4+Pj4gCj4gPiA+Pj4+IFRvIHNpbXBs aWZ5IGFyY2hpdGVjdHVyZSBtYXliZSB3b3VsZCBiZSBiZXR0ZXIgdG8gZW5hYmxlIGhwZCBqdXN0 IG9uCj4gPiA+Pj4+IGJyaWRnZSBhdHRhY2g6Cj4gPiA+Pj4+IAo+ID4gPj4+PiBicmlkZ2UtPmhw ZF9jYiA9IGNiOwo+ID4gPj4+PiAKPiA+ID4+Pj4gYnJpZGdlLT5ocGRfZGF0YSA9IGRhdGE7Cj4g PiA+Pj4+IAo+ID4gPj4+PiByZXQgPSBkcm1fYnJpZGdlX2F0dGFjaCguLi4pOwo+ID4gPj4+IAo+ ID4gPj4+IFllYWggSSBsaWtlIHRoaXMgbW9yZS4gVGhlIG90aGVyIHByb2JsZW0gaGVyZSBpcywg d2hhdCBpZiB5b3UgbmVlZCBtb3JlCj4gPiA+Pj4gdGhhbiAxIGNhbGxiYWNrIHJlZ2lzdGVycyBv biB0aGUgc2FtZSBicmlkZ2UgaGRwIHNpZ25hbD8KPiA+ID4+IAo+ID4gPj4gVGhhdCdzIHdoeSBJ IGRlY2lkZWQgdG8gaGlkZSBoaWRlIEhQRCB0aHJvdWdoIGhlbHBlcnMsCj4gPiA+PiBkcm1fYnJp ZGdlX2hwZF9lbmFibGUoKSBhbmQgZHJtX2JyaWRnZV9ocGRfZGlzYWJsZSgpIG9uIHRoZSBsaXN0 ZW5lcgo+ID4gPj4gc2lkZSwgYW5kIGRybV9icmlkZ2VfaHBkX25vdGlmeSgpIG9uIHRoZSBldmVu dCByZXBvcnRlciBzaWRlLiBXaGlsZSB0aGUKPiA+ID4+IGN1cnJlbnQgaW1wbGVtZW50YXRpb24g aXMgbGltaXRlZCB0byBhIHNpbmdsZSBsaXN0ZW5lciwgb25seSB0aGUgaGVscGVycwo+ID4gPj4g d291bGQgbmVlZCB0byBiZSBjaGFuZ2VkIHRvIGV4dGVuZCB0aGF0IHRvIG11bHRpcGxlIGxpc3Rl bmVycy4KPiA+ID4+IAo+ID4gPj4gTm90ZSB0aGF0IHRoZSAuaHBkX2VuYWJsZSgpIGFuZCAuaHBk X2Rpc2FibGUoKSBvcGVyYXRpb25zIGFsc28gYWxsb3cgdGhlCj4gPiA+PiBicmlkZ2UgdG8gZGlz YWJsZSBIUEQgZGV0ZWN0aW9uIHdoZW4gbm90IHVzZWQuIERvaW5nIHNvIGtlZXBzIHRoZSBicmlk Z2UKPiA+ID4+IHNpbXBsZSwgaXQgb25seSBuZWVkcyB0byBjYXJlIGFib3V0IHJlcG9ydGluZyBI UEQgZXZlbnRzIHdoZW4gdGhleSdyZQo+ID4gPj4gZW5hYmxlZCwgd2l0aG91dCBjYXJpbmcgd2hv IChpZiBhbnlvbmUpIGlzIGxpc3RlbmluZywgYW5kIGdldHMgY2xlYXIKPiA+ID4+IGluc3RydWN0 aW9ucyBvbiB3aGV0aGVyIHRvIGVuYWJsZSBvciBkaXNhYmxlIHRoZSBIUEQgaGFyZHdhcmUgKGlu IGNhc2UKPiA+ID4+IGl0IGNhbiBiZSBkaXNhYmxlZCkuCj4gPiA+PiAKPiA+ID4+Pj4gVGhpcyB3 YXkgd2UgY291bGQgYXZvaWQgYWRkaW5nIG5ldyBjYWxsYmFja3MgaHBkXyhlbmFibGV8ZGlzYWJs ZSkKPiA+ID4+Pj4gd2l0aG91dCBiaWcgc2FjcmlmaWNlcy4KPiA+ID4+Pj4gCj4gPiA+Pj4+IE9u ZSBtb3JlIHRoaW5nOiBIUEQgaW4gRGlzcGxheVBvcnQvSERNSSBiZXNpZGUgc2lnbmFsbGluZyBw bHVnL3VucGx1ZywKPiA+ID4+Pj4gbm90aWZpZXMgYWJvdXQgc2luayBzdGF0dXMgY2hhbmdlLCBo b3cgaXQgdHJhbnNsYXRlcyB0byB0aGlzIGNiPwo+ID4gPj4gCj4gPiA+PiBUaGlzIGlzIHNvbWV0 aGluZyB0aGlzIHNlcmllcyBkb2Vzbid0IGltcGxlbWVudC4gSSBkb24ndCB0aGluayBpdCB3b3Vs ZAo+ID4gPj4gYmUgYSBiaWcgZGVhbCwgYnV0IG15IGtub3dsZWRnZSBvZiBIUEQgKGVzcGVjaWFs bHkgZm9yIERpc3BsYXlQb3J0KSBlbmRzCj4gPiA+PiBoZXJlLiBJZiB5b3UgY2FuIGVsYWJvcmF0 ZSBvbiB3aGF0IHdvdWxkIGJlIG5lZWRlZCwgSSBjYW4gaW1wbGVtZW50Cj4gPiA+PiB0aGF0Lgo+ ID4gPj4gCj4gPiA+Pj4+PiArdm9pZCBkcm1fYnJpZGdlX2hwZF9lbmFibGUoc3RydWN0IGRybV9i cmlkZ2UgKmJyaWRnZSwKPiA+ID4+Pj4+ICsJCQkgICB2b2lkICgqY2IpKHZvaWQgKmRhdGEsCj4g PiA+Pj4+PiArCQkJCSAgICAgIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzKSwKPiA+ ID4+Pj4+ICsJCQkgICB2b2lkICpkYXRhKQo+ID4gPj4+Pj4gK3sKPiA+ID4+Pj4+ICsJaWYgKCFi cmlkZ2UgfHwgIWJyaWRnZS0+ZnVuY3MtPmhwZF9lbmFibGUpCj4gPiA+Pj4+PiArCQlyZXR1cm47 Cj4gPiA+Pj4+PiArCj4gPiA+Pj4+PiArCW11dGV4X2xvY2soJmJyaWRnZS0+aHBkX211dGV4KTsK PiA+ID4+Pj4+ICsKPiA+ID4+Pj4+ICsJaWYgKFdBUk4oYnJpZGdlLT5ocGRfY2IsICJIb3QgcGx1 ZyBkZXRlY3Rpb24gYWxyZWFkeSBlbmFibGVkXG4iKSkKPiA+ID4+Pj4+ICsJCWdvdG8gdW5sb2Nr Owo+ID4gPj4+Pj4gKwo+ID4gPj4+Pj4gKwlicmlkZ2UtPmhwZF9jYiA9IGNiOwo+ID4gPj4+Pj4g KwlicmlkZ2UtPmhwZF9kYXRhID0gZGF0YTsKPiA+ID4+Pj4+ICsKPiA+ID4+Pj4+ICsJYnJpZGdl LT5mdW5jcy0+aHBkX2VuYWJsZShicmlkZ2UpOwo+ID4gPj4+Pj4gKwo+ID4gPj4+Pj4gK3VubG9j azoKPiA+ID4+Pj4+ICsJbXV0ZXhfdW5sb2NrKCZicmlkZ2UtPmhwZF9tdXRleCk7Cj4gPiA+Pj4+ PiArfQo+ID4gPj4+Pj4gK0VYUE9SVF9TWU1CT0xfR1BMKGRybV9icmlkZ2VfaHBkX2VuYWJsZSk7 Cj4gPiA+Pj4+PiArCj4gPiA+Pj4+PiArLyoqCj4gPiA+Pj4+PiArICogZHJtX2JyaWRnZV9ocGRf ZGlzYWJsZSAtIGRpc2FibGUgaG90IHBsdWcgZGV0ZWN0aW9uIGZvciB0aGUgYnJpZGdlCj4gPiA+ Pj4+PiArICogQGJyaWRnZTogYnJpZGdlIGNvbnRyb2wgc3RydWN0dXJlCj4gPiA+Pj4+PiArICoK PiA+ID4+Pj4+ICsgKiBDYWxsICZkcm1fYnJpZGdlX2Z1bmNzLmhwZF9kaXNhYmxlIGFuZCB1bnJl Z2lzdGVyIHRoZSBob3QgcGx1ZyBkZXRlY3Rpb24KPiA+ID4+Pj4+ICsgKiBjYWxsYmFjayBwcmV2 aW91c2x5IHJlZ2lzdGVyZWQgd2l0aCBkcm1fYnJpZGdlX2hwZF9lbmFibGUoKS4gT25jZSB0aGlz Cj4gPiA+Pj4+PiArICogZnVuY3Rpb24gcmV0dXJucyB0aGUgY2FsbGJhY2sgd2lsbCBub3QgYmUg Y2FsbGVkIGJ5IHRoZSBicmlkZ2Ugd2hlbiBhbgo+ID4gPj4+Pj4gKyAqIG91dHB1dCBzdGF0dXMg Y2hhbmdlIG9jY3Vycy4KPiA+ID4+Pj4+ICsgKgo+ID4gPj4+Pj4gKyAqIEhvdCBwbHVnIGRldGVj dGlvbiBpcyBzdXBwb3J0ZWQgb25seSBpZiB0aGUgRFJNX0JSSURHRV9PUF9IUEQgZmxhZyBpcyBz ZXQgaW4KPiA+ID4+Pj4+ICsgKiBicmlkZ2UtPm9wcy4gVGhpcyBmdW5jdGlvbiBzaGFsbCBub3Qg YmUgY2FsbGVkIHdoZW4gdGhlIGZsYWcgaXMgbm90IHNldC4KPiA+ID4+Pj4+ICsgKi8KPiA+ID4+ Pj4+ICt2b2lkIGRybV9icmlkZ2VfaHBkX2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRn ZSkKPiA+ID4+Pj4+ICt7Cj4gPiA+Pj4+PiArCWlmICghYnJpZGdlIHx8ICFicmlkZ2UtPmZ1bmNz LT5ocGRfZGlzYWJsZSkKPiA+ID4+Pj4+ICsJCXJldHVybjsKPiA+ID4+Pj4+ICsKPiA+ID4+Pj4+ ICsJbXV0ZXhfbG9jaygmYnJpZGdlLT5ocGRfbXV0ZXgpOwo+ID4gPj4+Pj4gKwlicmlkZ2UtPmZ1 bmNzLT5ocGRfZGlzYWJsZShicmlkZ2UpOwo+ID4gPj4+Pj4gKwo+ID4gPj4+Pj4gKwlicmlkZ2Ut PmhwZF9jYiA9IE5VTEw7Cj4gPiA+Pj4+PiArCWJyaWRnZS0+aHBkX2RhdGEgPSBOVUxMOwo+ID4g Pj4+Pj4gKwltdXRleF91bmxvY2soJmJyaWRnZS0+aHBkX211dGV4KTsKPiA+ID4+Pj4+ICt9Cj4g PiA+Pj4+PiArRVhQT1JUX1NZTUJPTF9HUEwoZHJtX2JyaWRnZV9ocGRfZGlzYWJsZSk7Cj4gPiA+ Pj4+PiArCj4gPiA+Pj4+PiArLyoqCj4gPiA+Pj4+PiArICogZHJtX2JyaWRnZV9ocGRfbm90aWZ5 IC0gbm90aWZ5IGhvdCBwbHVnIGRldGVjdGlvbiBldmVudHMKPiA+ID4+Pj4+ICsgKiBAYnJpZGdl OiBicmlkZ2UgY29udHJvbCBzdHJ1Y3R1cmUKPiA+ID4+Pj4+ICsgKiBAc3RhdHVzOiBvdXRwdXQg Y29ubmVjdGlvbiBzdGF0dXMKPiA+ID4+Pj4+ICsgKgo+ID4gPj4+Pj4gKyAqIEJyaWRnZSBkcml2 ZXJzIHNoYWxsIGNhbGwgdGhpcyBmdW5jdGlvbiB0byByZXBvcnQgaG90IHBsdWcgZXZlbnRzIHdo ZW4gdGhleQo+ID4gPj4+Pj4gKyAqIGRldGVjdCBhIGNoYW5nZSBpbiB0aGUgb3V0cHV0IHN0YXR1 cywgd2hlbiBob3QgcGx1ZyBkZXRlY3Rpb24gaGFzIGJlZW4KPiA+ID4+Pj4+ICsgKiBlbmFibGVk IGJ5IHRoZSAmZHJtX2JyaWRnZV9mdW5jcy5ocGRfZW5hYmxlIGNhbGxiYWNrLgo+ID4gPj4+Pj4g KyAqCj4gPiA+Pj4+PiArICogVGhpcyBmdW5jdGlvbiBzaGFsbCBiZSBjYWxsZWQgaW4gYSBjb250 ZXh0IHRoYXQgY2FuIHNsZWVwLgo+ID4gPj4+Pj4gKyAqLwo+ID4gPj4+Pj4gK3ZvaWQgZHJtX2Jy aWRnZV9ocGRfbm90aWZ5KHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4gPiA+Pj4+PiArCQkJ ICAgZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0dXMpCj4gPiA+Pj4+PiArewo+ID4gPj4+ Pj4gKwltdXRleF9sb2NrKCZicmlkZ2UtPmhwZF9tdXRleCk7Cj4gPiA+Pj4+PiArCWlmIChicmlk Z2UtPmhwZF9jYikKPiA+ID4+Pj4+ICsJCWJyaWRnZS0+aHBkX2NiKGJyaWRnZS0+aHBkX2RhdGEs IHN0YXR1cyk7Cj4gPiA+Pj4gCj4gPiA+Pj4gU28gdGhpcyBpc24ndCBxdWl0ZSB3aGF0IEkgaGFk IGluIG1pbmQuIEluc3RlYWQgc29tZXRoaW5nIGxpa2UgdGhpczoKPiA+ID4+PiAKPiA+ID4+PiAJ LyogaXRlcmF0ZXMgb3ZlciBhbGwgYnJpZGdlcyBpbiB0aGUgY2hhaW4gY29udGFpbmluZyBAYnJp ZGdlICovCj4gPiA+Pj4gCWZvcl9lYWNoX2JyaWRnZSh0bXBfYnJpZGdlLCBicmlkZ2UpIHsKPiA+ ID4+PiAJCWlmICh0bXBfYnJpZGdlID09IGJyaWRnZSkKPiA+ID4+PiAJCQljb250aW51ZTsKPiA+ ID4+PiAJCWlmIChicmlkZ2UtPmhwZF9ub3RpZnkpOwo+ID4gPj4+IAkJCWJyaWRnZS0+aHBkX25v dGlmeSh0bXBfYnJpZGdlLCBicmlkZ2UsIHN0YXR1cyk7Cj4gPiA+Pj4gCX0KPiA+ID4+PiAKPiA+ ID4+PiAJZW5jb2RlciA9IGVuY29kZXJfZm9yX2JyaWRnZShicmlkZ2UpOwo+ID4gPj4+IAlpZiAo ZW5jb2Rlci0+aGVscGVyX3ByaXZhdGUtPmJyaWRnZV9ocGRfbm90aWZ5KQo+ID4gPj4+IAkJZW5j b2Rlci0+aGVscGVyX3ByaXZhdGUtPmJyaWRnZV9ocGRfbm90aWZ5KGVuY29kZXIsIGJyaWRnZSwg c3RhdHVzKTsKPiA+ID4+PiAKPiA+ID4+PiAJZGV2ID0gYnJpZGdlLT5kZXYKPiA+ID4+PiAJaWYg KGRldi0+bW9kZV9jb25maWcuaGVscGVyX3ByaXZhdGUtPmJyaWRnZV9ocGRfbm90aWZ5KQo+ID4g Pj4+IAkJZGV2LT5tb2RlX2NvbmZpZy5oZWxwZXJfcHJpdmF0ZS0+YnJpZGdlX2hwZF9ub3RpZnko ZGV2LCBicmlkZ2UsIHN0YXR1cykKPiA+ID4+PiAKPiA+ID4+PiBObyByZWdpc3RlciBjYWxsYmFj ayBuZWVkZWQsIG5vIGxvY2tpbmcgbmVlZGVkLCBldmVyeW9uZSBnZXRzIGV4YWN0bHkgdGhlCj4g PiA+Pj4gaHBkIHRoZXkgd2FudC9uZWVkLgo+ID4gPj4gCj4gPiA+PiBJJ2xsIHJlcGx5IHRvIHRo aXMgZnVydGhlciBkb3duIHRoZSBtYWlsIHRocmVhZCwgdG8gYWRkcmVzcyBhZGRpdGlvbmFsCj4g PiA+PiBjb21tZW50cy4KPiA+ID4+IAo+ID4gPj4+Pj4gKwltdXRleF91bmxvY2soJmJyaWRnZS0+ aHBkX211dGV4KTsKPiA+ID4+Pj4+ICt9Cj4gPiA+Pj4+PiArRVhQT1JUX1NZTUJPTF9HUEwoZHJt X2JyaWRnZV9ocGRfbm90aWZ5KTsKPiA+ID4+Pj4+ICsKPiA+ID4+Pj4+ICAjaWZkZWYgQ09ORklH X09GCj4gPiA+Pj4+PiAgLyoqCj4gPiA+Pj4+PiAgICogb2ZfZHJtX2ZpbmRfYnJpZGdlIC0gZmlu ZCB0aGUgYnJpZGdlIGNvcnJlc3BvbmRpbmcgdG8gdGhlIGRldmljZSBub2RlIGluCj4gPiA+Pj4+ PiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2JyaWRnZS5oIGIvaW5jbHVkZS9kcm0vZHJt X2JyaWRnZS5oCj4gPiA+Pj4+PiBpbmRleCAwOGRjMTVmOTNkZWQuLmI5NDQ1YWE1YjFlZiAxMDA2 NDQKPiA+ID4+Pj4+IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9icmlkZ2UuaAo+ID4gPj4+Pj4gKysr IGIvaW5jbHVkZS9kcm0vZHJtX2JyaWRnZS5oCj4gPiA+Pj4+PiBAQCAtMjMsOCArMjMsOSBAQAo+ ID4gPj4+Pj4gICNpZm5kZWYgX19EUk1fQlJJREdFX0hfXwo+ID4gPj4+Pj4gICNkZWZpbmUgX19E Uk1fQlJJREdFX0hfXwo+ID4gPj4+Pj4gIAo+ID4gPj4+Pj4gLSNpbmNsdWRlIDxsaW51eC9saXN0 Lmg+Cj4gPiA+Pj4+PiAgI2luY2x1ZGUgPGxpbnV4L2N0eXBlLmg+Cj4gPiA+Pj4+PiArI2luY2x1 ZGUgPGxpbnV4L2xpc3QuaD4KPiA+ID4+Pj4+ICsjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KPiA+ ID4+Pj4+ICAjaW5jbHVkZSA8ZHJtL2RybV9tb2RlX29iamVjdC5oPgo+ID4gPj4+Pj4gICNpbmNs dWRlIDxkcm0vZHJtX21vZGVzLmg+Cj4gPiA+Pj4+PiAgCj4gPiA+Pj4+PiBAQCAtMzM0LDYgKzMz NSwxMTAgQEAgc3RydWN0IGRybV9icmlkZ2VfZnVuY3Mgewo+ID4gPj4+Pj4gIAkgKi8KPiA+ID4+ Pj4+ICAJdm9pZCAoKmF0b21pY19wb3N0X2Rpc2FibGUpKHN0cnVjdCBkcm1fYnJpZGdlICpicmlk Z2UsCj4gPiA+Pj4+PiAgCQkJCSAgICBzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3RhdGUpOwo+ ID4gPj4+Pj4gKwo+ID4gPj4+Pj4gKwkvKioKPiA+ID4+Pj4+ICsJICogQGRldGVjdDoKPiA+ID4+ Pj4+ICsJICoKPiA+ID4+Pj4+ICsJICogQ2hlY2sgaWYgYW55dGhpbmcgaXMgYXR0YWNoZWQgdG8g dGhlIGJyaWRnZSBvdXRwdXQuCj4gPiA+Pj4+PiArCSAqCj4gPiA+Pj4+PiArCSAqIFRoaXMgY2Fs bGJhY2sgaXMgb3B0aW9uYWwsIGlmIG5vdCBpbXBsZW1lbnRlZCB0aGUgYnJpZGdlIHdpbGwgYmUK PiA+ID4+Pj4+ICsJICogY29uc2lkZXJlZCBhcyBhbHdheXMgaGF2aW5nIGEgY29tcG9uZW50IGF0 dGFjaGVkIHRvIGl0cyBvdXRwdXQuCj4gPiA+Pj4+PiArCSAqIEJyaWRnZXMgdGhhdCBpbXBsZW1l bnQgdGhpcyBjYWxsYmFjayBzaGFsbCBzZXQgdGhlCj4gPiA+Pj4+PiArCSAqIERSTV9CUklER0Vf T1BfREVURUNUIGZsYWcgaW4gdGhlaXIgJmRybV9icmlkZ2UtPm9wcy4KPiA+ID4+Pj4+ICsJICoK PiA+ID4+Pj4+ICsJICogUkVUVVJOUzoKPiA+ID4+Pj4+ICsJICoKPiA+ID4+Pj4+ICsJICogZHJt X2Nvbm5lY3Rvcl9zdGF0dXMgaW5kaWNhdGluZyB0aGUgYnJpZGdlIG91dHB1dCBzdGF0dXMuCj4g PiA+Pj4+PiArCSAqLwo+ID4gPj4+Pj4gKwllbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzICgqZGV0 ZWN0KShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKTsKPiA+ID4+Pj4+ICsKPiA+ID4+Pj4+ICsJ LyoqCj4gPiA+Pj4+PiArCSAqIEBnZXRfbW9kZXM6Cj4gPiA+Pj4+PiArCSAqCj4gPiA+Pj4+PiAr CSAqIEZpbGwgYWxsIG1vZGVzIGN1cnJlbnRseSB2YWxpZCBmb3IgdGhlIHNpbmsgaW50byB0aGUg JmRybV9jb25uZWN0b3IKPiA+ID4+Pj4+ICsJICogd2l0aCBkcm1fbW9kZV9wcm9iZWRfYWRkKCku Cj4gPiA+Pj4+PiArCSAqCj4gPiA+Pj4+PiArCSAqIFRoZSBAZ2V0X21vZGVzIGNhbGxiYWNrIGlz IG1vc3RseSBpbnRlbmRlZCB0byBzdXBwb3J0IG5vbi1wcm9iYWJsZQo+ID4gPj4+Pj4gKwkgKiBk aXNwbGF5cyBzdWNoIGFzIG1hbnkgZml4ZWQgcGFuZWxzLiBCcmlkZ2VzIHRoYXQgc3VwcG9ydCBy ZWFkaW5nCj4gPiA+Pj4+PiArCSAqIEVESUQgc2hhbGwgbGVhdmUgQGdldF9tb2RlcyB1bmltcGxl bWVudGVkIGFuZCBpbXBsZW1lbnQgdGhlCj4gPiA+Pj4+PiArCSAqICZkcm1fYnJpZGdlX2Z1bmNz LT5nZXRfZWRpZCBjYWxsYmFjayBpbnN0ZWFkLgo+ID4gPj4+Pj4gKwkgKgo+ID4gPj4+Pj4gKwkg KiBUaGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsLiBCcmlkZ2VzIHRoYXQgaW1wbGVtZW50IGl0IHNo YWxsIHNldCB0aGUKPiA+ID4+Pj4+ICsJICogRFJNX0JSSURHRV9PUF9NT0RFUyBmbGFnIGluIHRo ZWlyICZkcm1fYnJpZGdlLT5vcHMuCj4gPiA+Pj4+PiArCSAqCj4gPiA+Pj4+PiArCSAqIFJFVFVS TlM6Cj4gPiA+Pj4+PiArCSAqCj4gPiA+Pj4+PiArCSAqIFRoZSBudW1iZXIgb2YgbW9kZXMgYWRk ZWQgYnkgY2FsbGluZyBkcm1fbW9kZV9wcm9iZWRfYWRkKCkuCj4gPiA+Pj4+PiArCSAqLwo+ID4g Pj4+Pj4gKwlpbnQgKCpnZXRfbW9kZXMpKHN0cnVjdCBkcm1fYnJpZGdlICpicmlkZ2UsCj4gPiA+ Pj4+PiArCQkJIHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IpOwo+ID4gPj4+Pj4gKwo+ ID4gPj4+Pj4gKwkvKioKPiA+ID4+Pj4+ICsJICogQGdldF9lZGlkOgo+ID4gPj4+Pj4gKwkgKgo+ ID4gPj4+Pj4gKwkgKiBSZWFkIGFuZCBwYXJzZSB0aGUgRURJRCBkYXRhIG9mIHRoZSBjb25uZWN0 ZWQgZGlzcGxheS4KPiA+ID4+Pj4+ICsJICoKPiA+ID4+Pj4+ICsJICogVGhlIEBnZXRfZWRpZCBj YWxsYmFjayBpcyB0aGUgcHJlZmVycmVkIHdheSBvZiByZXBvcnRpbmcgbW9kZQo+ID4gPj4+Pj4g KwkgKiBpbmZvcm1hdGlvbiBmb3IgYSBkaXNwbGF5IGNvbm5lY3RlZCB0byB0aGUgYnJpZGdlIG91 dHB1dC4gQnJpZGdlcwo+ID4gPj4+Pj4gKwkgKiB0aGF0IHN1cHBvcnQgcmVhZGluZCBFRElEIHNo YWxsIGltcGxlbWVudCB0aGlzIGNhbGxiYWNrIGFuZCBsZWF2ZQo+ID4gPj4+Pj4gKwkgKiB0aGUg QGdldF9tb2RlcyBjYWxsYmFjayB1bmltcGxlbWVudGVkLgo+ID4gPj4+Pj4gKwkgKgo+ID4gPj4+ Pj4gKwkgKiBUaGUgY2FsbGVyIG9mIHRoaXMgb3BlcmF0aW9uIHNoYWxsIGZpcnN0IHZlcmlmeSB0 aGUgb3V0cHV0Cj4gPiA+Pj4+PiArCSAqIGNvbm5lY3Rpb24gc3RhdHVzIGFuZCByZWZyYWluIGZy b20gcmVhZGluZyBFRElEIGZyb20gYSBkaXNjb25uZWN0ZWQKPiA+ID4+Pj4+ICsJICogb3V0cHV0 Lgo+ID4gPj4+Pj4gKwkgKgo+ID4gPj4+Pj4gKwkgKiBUaGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFs LiBCcmlkZ2VzIHRoYXQgaW1wbGVtZW50IGl0IHNoYWxsIHNldCB0aGUKPiA+ID4+Pj4+ICsJICog RFJNX0JSSURHRV9PUF9FRElEIGZsYWcgaW4gdGhlaXIgJmRybV9icmlkZ2UtPm9wcy4KPiA+ID4+ Pj4+ICsJICoKPiA+ID4+Pj4+ICsJICogUkVUVVJOUzoKPiA+ID4+Pj4+ICsJICoKPiA+ID4+Pj4+ ICsJICogQW4gZWRpZCBzdHJ1Y3R1cmUgbmV3bHkgYWxsb2NhdGVkIHdpdGgga21hbGxvYygpIChv ciBzaW1pbGFyKSBvbgo+ID4gPj4+Pj4gKwkgKiBzdWNjZXNzLCBvciBOVUxMIG90aGVyd2lzZS4g VGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZnJlZWluZwo+ID4gPj4+Pj4gKwkgKiB0aGUg cmV0dXJuZWQgZWRpZCBzdHJ1Y3R1cmUgd2l0aCBrZnJlZSgpLgo+ID4gPj4+Pj4gKwkgKi8KPiA+ ID4+Pj4+ICsJc3RydWN0IGVkaWQgKigqZ2V0X2VkaWQpKHN0cnVjdCBkcm1fYnJpZGdlICpicmlk Z2UsCj4gPiA+Pj4+PiArCQkJCSBzdHJ1Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yKTsKPiA+ ID4+Pj4gCj4gPiA+Pj4+IEl0IG92ZXJsYXBzIHdpdGggZ2V0X21vZGVzLCBJIGd1ZXNzIHByZXNl bmNlIG9mIG9uZSBvcHMgc2hvdWxkIGRpc2FsbG93Cj4gPiA+Pj4+IHByZXNlbmNlIG9mIGFub3Ro ZXIgb25lPwo+ID4gPj4+PiAKPiA+ID4+Pj4gSSBhbSBub3QgcmVhbGx5IGNvbnZpbmNlZCB3ZSBu ZWVkIHRoaXMgb3AgYXQgYWxsLCBjYW5ub3Qgd2UganVzdCBhc3NpZ24KPiA+ID4+Pj4gc29tZSBo ZWxwZXIgZnVuY3Rpb24gdG8gLmdldF9tb2RlcyBjYiwgd2hpY2ggd2lsbCBkbyB0aGUgc2FtZT8K PiA+ID4+PiAKPiA+ID4+PiBQbGFuIEIpOiBkaXRjaCAtPmdldF9lZGlkLCByZXF1aXJlIHRoYXQg dGhlIGRyaXZlciBoYXMgLT5nZXRfbW9kZXMgaW4gdGhhdAo+ID4gPj4+IGNhc2UsIGFuZCByZXF1 aXJlIHRoYXQgaWYgaXQgaGFzIGFuIGVkaWQgaXQgbXVzdCBmaWxsIG91dCBjb25uZWN0b3ItPmlu Zm8KPiA+ID4+PiBhbmQgY29ubmVjdG9yLT5lZGlkIGNvcnJlY3RseS4KPiA+ID4+IAo+ID4gPj4g SSB0aGluayB0aGF0J3MgZG9hYmxlLCBJJ2xsIGhhdmUgYSBsb29rLgo+ID4gPiAKPiA+ID4gU28g SSBoYWQgYSBsb29rLCBhbmQgd2hpbGUgdGhpcyBpcyBkb2FibGUsIGl0IHdvdWxkIGVzc2VudGlh bGx5IG1lYW4KPiA+ID4gdGhhdCBhbGwgYnJpZGdlcyB0aGF0IHJldHJpZXZlIG1vZGVzIGZyb20g RURJRCB3b3VsZCBoYXZlIHRvIHJvbGwgb3V0Cj4gPiA+IHRoZWlyIG93biB2ZXJzaW9uIG9mIHRo ZSBmb2xsb3dpbmcgY29kZToKPiA+ID4gCj4gPiA+IHN0YXRpYyBpbnQgZHJtX2JyaWRnZV9jb25u ZWN0b3JfZ2V0X21vZGVzX2VkaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+ ID4gCQkJCQkgICAgICAgc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSkKPiA+ID4gewo+ID4gPiAJ ZW51bSBkcm1fY29ubmVjdG9yX3N0YXR1cyBzdGF0dXM7Cj4gPiA+IAlzdHJ1Y3QgZWRpZCAqZWRp ZDsKPiA+ID4gCWludCBuOwo+ID4gPiAKPiA+ID4gCXN0YXR1cyA9IGRybV9icmlkZ2VfY29ubmVj dG9yX2RldGVjdChjb25uZWN0b3IsIGZhbHNlKTsKPiA+ID4gCWlmIChzdGF0dXMgIT0gY29ubmVj dG9yX3N0YXR1c19jb25uZWN0ZWQpCj4gPiA+IAkJZ290byBub19lZGlkOwo+ID4gPiAKPiA+ID4g CWVkaWQgPSBicmlkZ2UtPmZ1bmNzLT5nZXRfZWRpZChicmlkZ2UsIGNvbm5lY3Rvcik7Cj4gPiA+ IAlpZiAoIWVkaWQgfHwgIWRybV9lZGlkX2lzX3ZhbGlkKGVkaWQpKSB7Cj4gPiA+IAkJa2ZyZWUo ZWRpZCk7Cj4gPiA+IAkJZ290byBub19lZGlkOwo+ID4gPiAJfQo+ID4gPiAKPiA+ID4gCWRybV9j b25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29ubmVjdG9yLCBlZGlkKTsKPiA+ID4gCW4g PSBkcm1fYWRkX2VkaWRfbW9kZXMoY29ubmVjdG9yLCBlZGlkKTsKPiA+ID4gCj4gPiA+IAlrZnJl ZShlZGlkKTsKPiA+ID4gCXJldHVybiBuOwo+ID4gPiAKPiA+ID4gbm9fZWRpZDoKPiA+ID4gCWRy bV9jb25uZWN0b3JfdXBkYXRlX2VkaWRfcHJvcGVydHkoY29ubmVjdG9yLCBOVUxMKTsKPiA+ID4g CXJldHVybiAwOwo+ID4gPiB9Cj4gPiA+IAo+ID4gPiBJcyB0aGlzIGRlc2lyZWQgPwo+ID4gCj4g PiBXZSBzdG9yZSB0aGUgZWRpZCwgYW5kIHdlIHN0b3JlIGEgbG90IG9mIGRlY29kZWQgaW5mb3Jt YXRpb24gaW4KPiA+IGRybV9jb25uZWN0b3ItPmRpc3BsYXlfaW5mby4gQ2FuJ3QgdGhleSBqdXN0 IGxvb2sgdGhlcmU/IFJlLWZldGNoaW5nIHRoZQo+ID4gZWRpZCBkZWZpbml0ZWx5IHNvdW5kcyBs aWtlIHRoZSB3cm9uZyB0aGluZyB0byBkby4KPiA+IAo+ID4gV2UgbWlnaHQgcnVuIGludG8gc29t ZSBvcmRlcmluZyBpc3N1ZSBoZXJlIEkgZ3Vlc3Mgd2l0aCBob3RwbHVncyBhbmQgd2hvJ3MKPiA+ IGZldGNoaW5nIHRoZSBlZGlkIGFuZCBldmVyeXRoaW5nIGxpa2UgdGhhdC4KPiAKPiBUaGF0J3Mg ZXhhY3RseSB3aGF0IEkgd2FzIGFib3V0IHRvIGFuc3dlciBhZnRlciByZWFkaW5nIHlvdXIgZmly c3QKPiBwYXJhZ3JhcGggOi0pIEkgYmVsaWV2ZSBjYWNoaW5nIEVESUQgaXMgYSBnb29kIGlkZWEs IGJ1dCBteSBmYW1pbGlhcml0eQo+IHdpdGggaG90cGx1Zy1yZWxhdGVkIGlzc3VlcyBpcyBsaW1p dGVkIHRvIGEgaGFuZGZ1bCBvZiBzeXN0ZW1zLCBhbmQgSSdtCj4gc3VyZSBJJ20gbWlzc2luZyBz b21lIGNvbW1vbiBwcm9ibGVtcy4gSWYgeW91IGNhbiB0ZWxsIG1lIGhvdyB5b3UgdGhpbmsKPiB0 aGlzIHNob3VsZCBiZSBkb25lLCBJIGNhbiBnaXZlIGl0IGEgdHJ5LgoKSSB0aGluayBhbGwgeW91 IG5lZWQgdG8gZG8gaXMgbWFrZSBzdXJlIHRoYXQgd2hlbiBoYW5kbGluZyBhIGhwZCwgdGhlIGVk aWQKaXMgZmV0Y2hlZCBmaXJzdC4gQmVmb3JlIG90aGVyIHBhcnRzIG9mIHRoZSBicmlkZ2UgdHJ5 IHRvIHJlY29uZmlndXJlCnRoZW1zZWx2ZXMgLi4uCgo+ID4gQWxzbyBtYXliZSBJJ20gbWlzc2lu ZyB0aGUgcG9pbnQgaGVyZSwgYW5kIHRoaW5raW5nIHRvbyBtdWNoIG9mCj4gPiAtPmdldF9tb2Rl cyBvbiB0aGUgY29ubmVjdG9yLiBCdXQgdGhlbiBJJ20gbm90IGNsZWFyIG9uIHdoeSB0aGUgYnJp ZGdlCj4gPiBuZWVkcyB0aGUgY29ubmVjdG9yLCBhbmQgd2h5IGl0IGluc3RlYWQgY2FuJ3QganVz dCByZXR1cm4gdGhlIGVkaWQgaXQgY2FuCj4gPiByZWFkIGFuZCBsZXQgdGhlIGNhbGxlci9jb3Jl IGZpZ3VyZSBvdXQgZXZlcnl0aGluZyBlbHNlPwo+IAo+IFRoYXQncyBleGFjdGx5IHdoYXQgdGhl IC5nZXRfZWRpZCgpIG9wZXJhdGlvbiB0aGF0IHlvdSBhc2tlZCBtZSB0bwo+IHJlbW92ZSBkaWQu Li4gOi0pIFlvdSBkaWRuJ3QgbGlrZSB0aGUgZmFjdCB0aGF0IGl0IGR1cGxpY2F0ZWQgdGhlCj4g LmdldF9tb2RlcygpIGxvZ2ljLiBTaG91bGQgSSBhZGQgaXQgYmFjaywgYW5kIGNsZWFybHkgZG9j dW1lbnQKPiAuZ2V0X21vZGVzKCkgYXMgYSBmYWxsYmFjayB1c2VkIG9ubHkgd2hlbiB0aGUgY29u bmVjdG9yIGRvZXNuJ3QgdXNlIEVESUQKPiA/CgpJIGd1ZXNzIEknbSBtYWtpbmcgYSBiaXQgYSBm b29sIG9mIG15c2VsZiBoZXJlLiBXaGF0IEkgbWVhbnQgaXMgdGhhdCBpZiB3ZQpkbyB3YW50IHRv IGtlZXAgLT5nZXRfZWRpZCwgdGhlbiB3aHkgZG8geW91IG5lZWQgdG8gcGFzcyB0aGUgY29ubmVj dG9yPwpKdXN0IHJldHVybiB0aGUgZWRpZCBibG9iLCBhbmQgbGV0IHRoZSBjYWxsZXIgcGFyc2Ug aXQsIGFuZCBzdHVmZiBhbGwKcmVsZXZhbnQgZGF0YSBpbnRvIGRybV9jb25uZWN0b3IuIEp1c3Qg dGhpbmtpbmcgYWxvbmcgdGhlIGxpbmVzIG9mIHlvdXIKZ29hbCBvZiBtYWtpbmcgdGhlIGJyaWRn ZSBkcml2ZXJzIGFzIGR1bWIgYXMgcG9zc2libGUuCgpTYW1lIHRoaW5nIGZvciAtPmdldF9tb2Rl cyB3b3VsZCBiZSBuZWF0IHRvbywgYnV0IHdlIGRvbid0IGhhdmUgYSBuaWNlCmRhdGFzdHJ1Y3R1 cmUgZm9yIHRoaXMuIFdlJ2QgbmVlZCB0byBwYXNzIGJvdGggYSBsaXN0X2hlYWQgYW5kIGEgcG9p bnRlcgp0byB0aGUgZHJtX2Rpc3BsYXlfaW5mbyBJIHRoaW5rLgoKVGhhdCB3b3VsZCBkZWNvdXBs ZSBicmlkZ2VzIGV2ZW4gbW9yZSBmcm9tIGNvbm5lY3Rvciwgd2hpY2ggSSB0aGluayBpcwpzb21l d2hlcmUgb24geW91ciBnb2FsIGxpc3QgLi4uCi1EYW5pZWwKCj4gCj4gPiA+Pj4gQnR3IGlmIGEg aHBkIGhhcHBlbnMsIHdobydzIHJlc3BvbmlibGUgZm9yIG1ha2luZyBzdXJlIHRoZSBlZGlkL21v ZGUgbGlzdAo+ID4gPj4+IGluIHRoZSBjb25uZWN0b3IgaXMgdXAtdG8tZGF0ZT8gV2l0aCB5b3Vy IGN1cnJlbnQgY2FsbGJhY2sgZGVzaWduIHRoYXQncwo+ID4gPj4+IHVwIHRvIHRoZSBjYWxsYmFj aywgd2hpY2ggZG9lc24ndCBmZWVsIGdyZWF0LiBNYXliZSAgZHJtX2JyaWRnZV9ocGRfbm90aWZ5 Cj4gPiA+Pj4gc2hvdWxkIGd1YXJhbnRlZSB0aGF0IGl0J2xsIGZpcnN0IHdhbGsgdGhlIGNvbm5l Y3RvcnMgdG8gdXBkYXRlIHN0YXR1cyBhbmQKPiA+ID4+PiBlZGlkL21vZGUgbGlzdCBmb3IgdGhl IGZpbmFsIGRybV9jb25uZWN0b3IuIEFuZCB0aGVuIGluc3RlYWQgb2YganVzdAo+ID4gPj4+IHBh c3NpbmcgdGhlIHNpbXBsZSAic3RhdHVzIiwgaXQnbGwgcGFzcyB0aGUgY29ubmVjdG9yLCB3aXRo IGV2ZXJ5dGhpbmcKPiA+ID4+PiBjb3JyZWN0bHkgdXBkYXRlZC4KPiA+ID4+PiAKPiA+ID4+PiBP dGhlcndpc2UgZXZlcnlvbmUgaW50ZXJlc3RlZCBpbiB0aGF0IGhwZCBzaWduYWwgd2lsbCBnbyBh bmQgcmUtZmV0Y2ggdGhlCj4gPiA+Pj4gZWRpZCwgd2hpY2ggaXMgbm90IHNvIGF3ZXNvbWUgOi0p Cj4gPiA+PiAKPiA+ID4+IFdpdGggdGhlIGN1cnJlbnQgZGVzaWduIHRoZXJlJ3MgYSBzaW5nbGUg bGlzdGVuZXIsIHNvIGl0J3Mgbm90IGEgYmlnCj4gPiA+PiBkZWFsIDotKSBGdXJ0aGVybW9yZSwg dGhlIGxpc3RlbmVyIGlzIHRoZSBoZWxwZXIgdGhhdCBjcmVhdGVzIGEKPiA+ID4+IGNvbm5lY3Rv ciBvbiB0b3Agb2YgYSBjaGFpbiBvZiBicmlkZ2VzLCBzbyBpdCdzIGEgcHJldHR5IGdvb2QgcGxh Y2UgdG8KPiA+ID4+IGhhbmRsZSB0aGlzLiBTZWUgdGhlIGNhbGwgdG8gZHJtX2ttc19oZWxwZXJf aG90cGx1Z19ldmVudCgpIGluCj4gPiA+PiBkcm1fYnJpZGdlX2Nvbm5lY3Rvcl9ocGRfY2IoKS4K PiA+ID4+IAo+ID4gPj4gSSdtIGFsbCBmb3IgcmV3b3JraW5nIEhQRCBhbmQgbW9kZSBmZXRjaGlu ZywgYnV0IEkgdGhpbmsgaXQncyBhIGJpdCB0b28KPiA+ID4+IGJpZyBvZiBhIHJlcXVpcmVtZW50 IGFzIGEgcHJlcmVxdWlzaXRlIGZvciB0aGlzIHNlcmllcyAob3IgYXMgcGFydCBvZgo+ID4gPj4g dGhpcyBzZXJpZXMpLiBXZSBoYXZlIGhhcmR3YXJlIHRoYXQgY2FuIHJlcG9ydCBIUEQgd2l0aCB2 YXJpb3VzIGxldmVsIG9mCj4gPiA+PiBkZXRhaWxzIChmcm9tICJzb21ldGhpbmcgaGFwcGVuZWQg b24gYSBjb25uZWN0b3IiIHRvICJ0aGlzIHBhcnRpY3VsYXIKPiA+ID4+IGV2ZW50IGhhcHBlbmVk IG9uIHRoaXMgcGFydGljdWxhciBjb25uZWN0b3IiKSwgYW5kIHdlIGNoYW5uZWwgdGhhdAo+ID4g Pj4gdGhyb3VnaCBoZWxwZXJzIHN1Y2ggYXMgZHJtX2ttc19oZWxwZXJfaG90cGx1Z19ldmVudCgp IHRoYXQgbG9zZSB0aGUKPiA+ID4+IGRldGFpbHMgYW5kIGdvIHRocm91Z2ggYSBoZWF2eSBtZWNo YW5pc20gdG8gcmVmZXRjaCBldmVyeXRoaW5nLiBJCj4gPiA+PiB1bmRlcnN0YW5kIHRoaXMgaXMg bmVlZGVkIGluIG1hbnkgY2FzZXMsIGJ1dCBJIHRoaW5rIHRoZXJlJ3Mgcm9vbSBmb3IKPiA+ID4+ IGltcHJvdmVtZW50LiBUaGlzIHNlcmllcywgaW4gbXkgb3BpbmlvbiwgZG9lc24ndCBnbyBpbiB0 aGUgd3JvbmcKPiA+ID4+IGRpcmVjdGlvbiBpbiB0aGF0IHJlZ2FyZCwgYXMgaXQgZXZlbnR1YWxs eSBjYWxscwo+ID4gPj4gZHJtX2ttc19oZWxwZXJfaG90cGx1Z19ldmVudCgpLCBzbyBJIHRoaW5r IGltcHJvdmVtZW50cyB3b3VsZCBtYWtlIHNlbnNlCj4gPiA+PiBvbiB0b3Agb2YgaXQuIEknbSBl dmVuIHdpbGxpbmcgdG8gd29yayBvbiB0aGlzLCBwcm92aWRlZCBJIGdldCBmZWVkYmFjawo+ID4g Pj4gb24gd2hhdCBpcyBkZXNpcmVkLgo+ID4gPj4gCj4gPiA+Pj4+PiArCS8qKgo+ID4gPj4+Pj4g KwkgKiBAbG9zdF9ob3RwbHVnOgo+ID4gPj4+Pj4gKwkgKgo+ID4gPj4+Pj4gKwkgKiBOb3RpZnkg dGhlIGJyaWRnZSBvZiBkaXNwbGF5IGRpc2Nvbm5lY3Rpb24uCj4gPiA+Pj4+PiArCSAqCj4gPiA+ Pj4+PiArCSAqIFRoaXMgY2FsbGJhY2sgaXMgb3B0aW9uYWwsIGl0IG1heSBiZSBpbXBsZW1lbnRl ZCBieSBicmlkZ2VzIHRoYXQKPiA+ID4+Pj4+ICsJICogbmVlZCB0byBiZSBub3RpZmllZCBvZiBk aXNwbGF5IGRpc2Nvbm5lY3Rpb24gZm9yIGludGVybmFsIHJlYXNvbnMuCj4gPiA+Pj4+PiArCSAq IE9uZSB1c2UgY2FzZSBpcyB0byByZXNldCB0aGUgaW50ZXJuYWwgc3RhdGUgb2YgQ0VDIGNvbnRy b2xsZXJzIGZvcgo+ID4gPj4+Pj4gKwkgKiBIRE1JIGJyaWRnZXMuCj4gPiA+Pj4+PiArCSAqLwo+ ID4gPj4+Pj4gKwl2b2lkICgqbG9zdF9ob3RwbHVnKShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdl KTsKPiA+ID4+Pj4+ICsKPiA+ID4+Pj4+ICsJLyoqCj4gPiA+Pj4+PiArCSAqIEBocGRfZW5hYmxl Ogo+ID4gPj4+Pj4gKwkgKgo+ID4gPj4+Pj4gKwkgKiBFbmFibGUgaG90IHBsdWcgZGV0ZWN0aW9u LiBGcm9tIG5vdyBvbiB0aGUgYnJpZGdlIHNoYWxsIGNhbGwKPiA+ID4+Pj4+ICsJICogZHJtX2Jy aWRnZV9ocGRfbm90aWZ5KCkgZWFjaCB0aW1lIGEgY2hhbmdlIGlzIGRldGVjdGVkIGluIHRoZSBv dXRwdXQKPiA+ID4+Pj4+ICsJICogY29ubmVjdGlvbiBzdGF0dXMsIHVudGlsIGhvdCBwbHVnIGRl dGVjdGlvbiBnZXRzIGRpc2FibGVkIHdpdGgKPiA+ID4+Pj4+ICsJICogQGhwZF9kaXNhYmxlLgo+ ID4gPj4+Pj4gKwkgKgo+ID4gPj4+Pj4gKwkgKiBUaGlzIGNhbGxiYWNrIGlzIG9wdGlvbmFsIGFu ZCBzaGFsbCBvbmx5IGJlIGltcGxlbWVudGVkIGJ5IGJyaWRnZXMKPiA+ID4+Pj4+ICsJICogdGhh dCBzdXBwb3J0IGhvdC1wbHVnIG5vdGlmaWNhdGlvbiB3aXRob3V0IHBvbGxpbmcuIEJyaWRnZXMg dGhhdAo+ID4gPj4+Pj4gKwkgKiBpbXBsZW1lbnQgaXQgc2hhbGwgYWxzbyBpbXBsZW1lbnQgdGhl IEBocGRfZGlzYWJsZSBjYWxsYmFjayBhbmQgc2V0Cj4gPiA+Pj4+PiArCSAqIHRoZSBEUk1fQlJJ REdFX09QX0hQRCBmbGFnIGluIHRoZWlyICZkcm1fYnJpZGdlLT5vcHMuCj4gPiA+Pj4+PiArCSAq Lwo+ID4gPj4+Pj4gKwl2b2lkICgqaHBkX2VuYWJsZSkoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRn ZSk7Cj4gPiA+Pj4+PiArCj4gPiA+Pj4+PiArCS8qKgo+ID4gPj4+Pj4gKwkgKiBAaHBkX2Rpc2Fi bGU6Cj4gPiA+Pj4+PiArCSAqCj4gPiA+Pj4+PiArCSAqIERpc2FibGUgaG90IHBsdWcgZGV0ZWN0 aW9uLiBPbmNlIHRoaXMgZnVuY3Rpb24gcmV0dXJucyB0aGUgYnJpZGdlCj4gPiA+Pj4+PiArCSAq IHNoYWxsIG5vdCBjYWxsIGRybV9icmlkZ2VfaHBkX25vdGlmeSgpIHdoZW4gYSBjaGFuZ2UgaW4g dGhlIG91dHB1dAo+ID4gPj4+Pj4gKwkgKiBjb25uZWN0aW9uIHN0YXR1cyBvY2N1cnMuCj4gPiA+ Pj4+PiArCSAqCj4gPiA+Pj4+PiArCSAqIFRoaXMgY2FsbGJhY2sgaXMgb3B0aW9uYWwgYW5kIHNo YWxsIG9ubHkgYmUgaW1wbGVtZW50ZWQgYnkgYnJpZGdlcwo+ID4gPj4+Pj4gKwkgKiB0aGF0IHN1 cHBvcnQgaG90LXBsdWcgbm90aWZpY2F0aW9uIHdpdGhvdXQgcG9sbGluZy4gQnJpZGdlcyB0aGF0 Cj4gPiA+Pj4+PiArCSAqIGltcGxlbWVudCBpdCBzaGFsbCBhbHNvIGltcGxlbWVudCB0aGUgQGhw ZF9lbmFibGUgY2FsbGJhY2sgYW5kIHNldAo+ID4gPj4+Pj4gKwkgKiB0aGUgRFJNX0JSSURHRV9P UF9IUEQgZmxhZyBpbiB0aGVpciAmZHJtX2JyaWRnZS0+b3BzLgo+ID4gPj4+Pj4gKwkgKi8KPiA+ ID4+Pj4+ICsJdm9pZCAoKmhwZF9kaXNhYmxlKShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdlKTsK PiA+ID4+Pj4+ICB9Owo+ID4gPj4+Pj4gIAo+ID4gPj4+Pj4gIC8qKgo+ID4gPj4+Pj4gQEAgLTM3 Miw2ICs0NzcsMzggQEAgc3RydWN0IGRybV9icmlkZ2VfdGltaW5ncyB7Cj4gPiA+Pj4+PiAgCWJv b2wgZHVhbF9saW5rOwo+ID4gPj4+Pj4gIH07Cj4gPiA+Pj4+PiAgCj4gPiA+Pj4+PiArLyoqCj4g PiA+Pj4+PiArICogZW51bSBkcm1fYnJpZGdlX29wcyAtIEJpdG1hc2sgb2Ygb3BlcmF0aW9ucyBz dXBwb3J0ZWQgYnkgdGhlIGJyaWRnZQo+ID4gPj4+Pj4gKyAqLwo+ID4gPj4+Pj4gK2VudW0gZHJt X2JyaWRnZV9vcHMgewo+ID4gPj4+Pj4gKwkvKioKPiA+ID4+Pj4+ICsJICogQERSTV9CUklER0Vf T1BfREVURUNUOiBUaGUgYnJpZGdlIGNhbiBkZXRlY3QgZGlzcGxheXMgY29ubmVjdGVkIHRvCj4g PiA+Pj4+PiArCSAqIGl0cyBvdXRwdXQuIEJyaWRnZXMgdGhhdCBzZXQgdGhpcyBmbGFnIHNoYWxs IGltcGxlbWVudCB0aGUKPiA+ID4+Pj4+ICsJICogJmRybV9icmlkZ2VfZnVuY3MtPmRldGVjdCBj YWxsYmFjay4KPiA+ID4+Pj4+ICsJICovCj4gPiA+Pj4+PiArCURSTV9CUklER0VfT1BfREVURUNU ID0gQklUKDApLAo+ID4gPj4+Pj4gKwkvKioKPiA+ID4+Pj4+ICsJICogQERSTV9CUklER0VfT1Bf RURJRDogVGhlIGJyaWRnZSBjYW4gcmV0cmlldmUgdGhlIEVESUQgb2YgdGhlIGRpc3BsYXkKPiA+ ID4+Pj4+ICsJICogY29ubmVjdGVkIHRvIGl0cyBvdXRwdXQuIEJyaWRnZXMgdGhhdCBzZXQgdGhp cyBmbGFnIHNoYWxsIGltcGxlbWVudAo+ID4gPj4+Pj4gKwkgKiB0aGUgJmRybV9icmlkZ2VfZnVu Y3MtPmdldF9lZGlkIGNhbGxiYWNrLgo+ID4gPj4+Pj4gKwkgKi8KPiA+ID4+Pj4+ICsJRFJNX0JS SURHRV9PUF9FRElEID0gQklUKDEpLAo+ID4gPj4+Pj4gKwkvKioKPiA+ID4+Pj4+ICsJICogQERS TV9CUklER0VfT1BfSFBEOiBUaGUgYnJpZGdlIGNhbiBkZXRlY3QgaG90LXBsdWcgYW5kIGhvdC11 bnBsdWcKPiA+ID4+Pj4+ICsJICogd2l0aG91dCByZXF1aXJpbmcgcG9sbGluZy4gQnJpZGdlcyB0 aGF0IHNldCB0aGlzIGZsYWcgc2hhbGwKPiA+ID4+Pj4+ICsJICogaW1wbGVtZW50IHRoZSAmZHJt X2JyaWRnZV9mdW5jcy0+aHBkX2VuYWJsZSBhbmQKPiA+ID4+Pj4+ICsJICogJmRybV9icmlkZ2Vf ZnVuY3MtPmRpc2FibGVfaHBkX2NiIGNhbGxiYWNrcy4KPiA+ID4+Pj4+ICsJICovCj4gPiA+Pj4+ PiArCURSTV9CUklER0VfT1BfSFBEID0gQklUKDIpLAo+ID4gPj4+Pj4gKwkvKioKPiA+ID4+Pj4+ ICsJICogQERSTV9CUklER0VfT1BfTU9ERVM6IFRoZSBicmlkZ2UgY2FuIHJldHJpZXZpbmcgdGhl IG1vZGVzIHN1cHBvcnRlZAo+ID4gPj4+Pj4gKwkgKiBieSB0aGUgZGlzcGxheSBhdCBpdHMgb3V0 cHV0LiBUaGlzIGRvZXMgbm90IGluY2x1ZGUgcmVhZGluZCBFRElECj4gPiA+Pj4+PiArCSAqIHdo aWNoIGlzIHNlcGFyYXRlbHkgY292ZXJlZCBieSBARFJNX0JSSURHRV9PUF9FRElELiBCcmlkZ2Vz IHRoYXQgc2V0Cj4gPiA+Pj4+PiArCSAqIHRoaXMgZmxhZyBzaGFsbCBpbXBsZW1lbnQgdGhlICZk cm1fYnJpZGdlX2Z1bmNzLT5nZXRfbW9kZXMgY2FsbGJhY2suCj4gPiA+Pj4+PiArCSAqLwo+ID4g Pj4+Pj4gKwlEUk1fQlJJREdFX09QX01PREVTID0gQklUKDMpLAo+ID4gPj4+Pj4gK307Cj4gPiA+ Pj4+PiArCj4gPiA+Pj4+PiAgLyoqCj4gPiA+Pj4+PiAgICogc3RydWN0IGRybV9icmlkZ2UgLSBj ZW50cmFsIERSTSBicmlkZ2UgY29udHJvbCBzdHJ1Y3R1cmUKPiA+ID4+Pj4+ICAgKi8KPiA+ID4+ Pj4+IEBAIC0zOTgsNiArNTM1LDI5IEBAIHN0cnVjdCBkcm1fYnJpZGdlIHsKPiA+ID4+Pj4+ICAJ Y29uc3Qgc3RydWN0IGRybV9icmlkZ2VfZnVuY3MgKmZ1bmNzOwo+ID4gPj4+Pj4gIAkvKiogQGRy aXZlcl9wcml2YXRlOiBwb2ludGVyIHRvIHRoZSBicmlkZ2UgZHJpdmVyJ3MgaW50ZXJuYWwgY29u dGV4dCAqLwo+ID4gPj4+Pj4gIAl2b2lkICpkcml2ZXJfcHJpdmF0ZTsKPiA+ID4+Pj4+ICsJLyoq IEBvcHM6IGJpdG1hc2sgb2Ygb3BlcmF0aW9ucyBzdXBwb3J0ZWQgYnkgdGhlIGJyaWRnZSAqLwo+ ID4gPj4+Pj4gKwllbnVtIGRybV9icmlkZ2Vfb3BzIG9wczsKPiA+ID4+Pj4+ICsJLyoqCj4gPiA+ Pj4+PiArCSAqIEB0eXBlOiBUeXBlIG9mIHRoZSBjb25uZWN0aW9uIGF0IHRoZSBicmlkZ2Ugb3V0 cHV0Cj4gPiA+Pj4+PiArCSAqIChEUk1fTU9ERV9DT05ORUNUT1JfKikuIEZvciBicmlkZ2VzIGF0 IHRoZSBlbmQgb2YgdGhpcyBjaGFpbiB0aGlzCj4gPiA+Pj4+PiArCSAqIGlkZW50aWZpZXMgdGhl IHR5cGUgb2YgY29ubmVjdGVkIGRpc3BsYXkuCj4gPiA+Pj4+PiArCSAqLwo+ID4gPj4+Pj4gKwlp bnQgdHlwZTsKPiA+ID4+Pj4+ICsJLyoqIHByaXZhdGU6ICovCj4gPiA+Pj4+PiArCS8qKgo+ID4g Pj4+Pj4gKwkgKiBAaHBkX211dGV4OiBQcm90ZWN0cyB0aGUgQGhwZF9jYiBhbmQgQGhwZF9kYXRh IGZpZWxkcy4KPiA+ID4+Pj4+ICsJICovCj4gPiA+Pj4+PiArCXN0cnVjdCBtdXRleCBocGRfbXV0 ZXg7Cj4gPiA+Pj4+PiArCS8qKgo+ID4gPj4+Pj4gKwkgKiBAaHBkX2NiOiBIb3QgcGx1ZyBkZXRl Y3Rpb24gY2FsbGJhY2ssIHJlZ2lzdGVyZWQgd2l0aAo+ID4gPj4+Pj4gKwkgKiBkcm1fYnJpZGdl X2hwZF9lbmFibGUoKS4KPiA+ID4+Pj4+ICsJICovCj4gPiA+Pj4+PiArCXZvaWQgKCpocGRfY2Ip KHZvaWQgKmRhdGEsIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzKTsKPiA+ID4+Pj4+ ICsJLyoqCj4gPiA+Pj4+PiArCSAqIEBocGRfZGF0YTogUHJpdmF0ZSBkYXRhIHBhc3NlZCB0byB0 aGUgSG90IHBsdWcgZGV0ZWN0aW9uIGNhbGxiYWNrCj4gPiA+Pj4+PiArCSAqIEBocGRfY2IuCj4g PiA+Pj4+PiArCSAqLwo+ID4gPj4+Pj4gKwl2b2lkICpocGRfZGF0YTsKPiA+ID4+Pj4+ICB9Owo+ ID4gPj4+Pj4gIAo+ID4gPj4+Pj4gIHZvaWQgZHJtX2JyaWRnZV9hZGQoc3RydWN0IGRybV9icmlk Z2UgKmJyaWRnZSk7Cj4gPiA+Pj4+PiBAQCAtNDI4LDYgKzU4OCwxNCBAQCB2b2lkIGRybV9hdG9t aWNfYnJpZGdlX3ByZV9lbmFibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKPiA+ID4+Pj4+ ICB2b2lkIGRybV9hdG9taWNfYnJpZGdlX2VuYWJsZShzdHJ1Y3QgZHJtX2JyaWRnZSAqYnJpZGdl LAo+ID4gPj4+Pj4gIAkJCSAgICAgIHN0cnVjdCBkcm1fYXRvbWljX3N0YXRlICpzdGF0ZSk7Cj4g PiA+Pj4+PiAgCj4gPiA+Pj4+PiArdm9pZCBkcm1fYnJpZGdlX2hwZF9lbmFibGUoc3RydWN0IGRy bV9icmlkZ2UgKmJyaWRnZSwKPiA+ID4+Pj4+ICsJCQkgICB2b2lkICgqY2IpKHZvaWQgKmRhdGEs Cj4gPiA+Pj4+PiArCQkJCSAgICAgIGVudW0gZHJtX2Nvbm5lY3Rvcl9zdGF0dXMgc3RhdHVzKSwK PiA+ID4+Pj4+ICsJCQkgICB2b2lkICpkYXRhKTsKPiA+ID4+Pj4+ICt2b2lkIGRybV9icmlkZ2Vf aHBkX2Rpc2FibGUoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSk7Cj4gPiA+Pj4+PiArdm9pZCBk cm1fYnJpZGdlX2hwZF9ub3RpZnkoc3RydWN0IGRybV9icmlkZ2UgKmJyaWRnZSwKPiA+ID4+Pj4+ ICsJCQkgICBlbnVtIGRybV9jb25uZWN0b3Jfc3RhdHVzIHN0YXR1cyk7Cj4gPiA+Pj4+PiArCj4g PiA+Pj4+PiAgI2lmZGVmIENPTkZJR19EUk1fUEFORUxfQlJJREdFCj4gPiA+Pj4+PiAgc3RydWN0 IGRybV9icmlkZ2UgKmRybV9wYW5lbF9icmlkZ2VfYWRkKHN0cnVjdCBkcm1fcGFuZWwgKnBhbmVs LAo+ID4gPj4+Pj4gIAkJCQkJdTMyIGNvbm5lY3Rvcl90eXBlKTsKPiAKPiAtLSAKPiBSZWdhcmRz LAo+IAo+IExhdXJlbnQgUGluY2hhcnQKCi0tIApEYW5pZWwgVmV0dGVyClNvZnR3YXJlIEVuZ2lu ZWVyLCBJbnRlbCBDb3Jwb3JhdGlvbgpodHRwOi8vYmxvZy5mZndsbC5jaApfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0 CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3Rv cC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWw=