From mboxrd@z Thu Jan 1 00:00:00 1970 From: Liviu Dudau Subject: Re: [RFC 1/4] drm: Add writeback connector type Date: Fri, 23 Feb 2018 16:21:05 +0000 Message-ID: <20180223162104.GX9111@e110455-lin.cambridge.arm.com> References: <20180223131758.18362-1-robdclark@gmail.com> <20180223131758.18362-2-robdclark@gmail.com> <20180223155935.GJ223881@art_vandelay> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Content-Disposition: inline In-Reply-To: <20180223155935.GJ223881@art_vandelay> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Sean Paul Cc: Jonathan Corbet , David Airlie , linux-arm-msm@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, Mihail Atanassov , freedreno@lists.freedesktop.org List-Id: linux-arm-msm@vger.kernel.org T24gRnJpLCBGZWIgMjMsIDIwMTggYXQgMTA6NTk6MzVBTSAtMDUwMCwgU2VhbiBQYXVsIHdyb3Rl Ogo+IE9uIEZyaSwgRmViIDIzLCAyMDE4IGF0IDA4OjE3OjUxQU0gLTA1MDAsIFJvYiBDbGFyayB3 cm90ZToKPiA+IEZyb206IEJyaWFuIFN0YXJrZXkgPGJyaWFuLnN0YXJrZXlAYXJtLmNvbT4KPiA+ IAo+ID4gV3JpdGViYWNrIGNvbm5lY3RvcnMgcmVwcmVzZW50IHdyaXRlYmFjayBlbmdpbmVzIHdo aWNoIGNhbiB3cml0ZSB0aGUKPiA+IENSVEMgb3V0cHV0IHRvIGEgbWVtb3J5IGZyYW1lYnVmZmVy LiBBZGQgYSB3cml0ZWJhY2sgY29ubmVjdG9yIHR5cGUgYW5kCj4gPiByZWxhdGVkIHN1cHBvcnQg ZnVuY3Rpb25zLgo+ID4gCj4gPiBEcml2ZXJzIHNob3VsZCBpbml0aWFsaXplIGEgd3JpdGViYWNr IGNvbm5lY3RvciB3aXRoCj4gPiBkcm1fd3JpdGViYWNrX2Nvbm5lY3Rvcl9pbml0KCkgd2hpY2gg dGFrZXMgY2FyZSBvZiBzZXR0aW5nIHVwIGFsbCB0aGUKPiA+IHdyaXRlYmFjay1zcGVjaWZpYyBk ZXRhaWxzIG9uIHRvcCBvZiB0aGUgbm9ybWFsIGZ1bmN0aW9uYWxpdHkgb2YKPiA+IGRybV9jb25u ZWN0b3JfaW5pdCgpLgo+ID4gCj4gPiBXcml0ZWJhY2sgY29ubmVjdG9ycyBoYXZlIGEgV1JJVEVC QUNLX0ZCX0lEIHByb3BlcnR5LCB1c2VkIHRvIHNldCB0aGUKPiA+IG91dHB1dCBmcmFtZWJ1ZmZl ciwgYW5kIGEgV1JJVEVCQUNLX1BJWEVMX0ZPUk1BVFMgYmxvYiB1c2VkIHRvIGV4cG9zZSB0aGUK PiA+IHN1cHBvcnRlZCB3cml0ZWJhY2sgZm9ybWF0cyB0byB1c2Vyc3BhY2UuCj4gPiAKPiA+IFdo ZW4gYSBmcmFtZWJ1ZmZlciBpcyBhdHRhY2hlZCB0byBhIHdyaXRlYmFjayBjb25uZWN0b3Igd2l0 aCB0aGUKPiA+IFdSSVRFQkFDS19GQl9JRCBwcm9wZXJ0eSwgaXQgaXMgdXNlZCBvbmx5IG9uY2Ug KGZvciB0aGUgY29tbWl0IGluIHdoaWNoCj4gPiBpdCB3YXMgaW5jbHVkZWQpLCBhbmQgdXNlcnNw YWNlIGNhbiBuZXZlciByZWFkIGJhY2sgdGhlIHZhbHVlIG9mCj4gPiBXUklURUJBQ0tfRkJfSUQu IFdSSVRFQkFDS19GQl9JRCBjYW4gb25seSBiZSBzZXQgaWYgdGhlIGNvbm5lY3RvciBpcwo+ID4g YXR0YWNoZWQgdG8gYSBDUlRDLgo+ID4gCj4gPiBDaGFuZ2VzIHNpbmNlIHYxOgo+ID4gIC0gQWRk ZWQgZHJtX3dyaXRlYmFjay5jICsgZG9jdW1lbnRhdGlvbgo+ID4gIC0gQWRkZWQgaGVscGVyIHRv IGluaXRpYWxpemUgd3JpdGViYWNrIGNvbm5lY3RvciBpbiBvbmUgZ28KPiA+ICAtIEFkZGVkIGNv cmUgY2hlY2tzCj4gPiAgLSBTcXVhc2hlZCBpbnRvIGEgc2luZ2xlIGNvbW1pdAo+ID4gIC0gRHJv cHBlZCB0aGUgY2xpZW50IGNhcAo+ID4gIC0gV3JpdGViYWNrIGZyYW1lYnVmZmVycyBhcmUgbm8g bG9uZ2VyIHBlcnNpc3RlbnQKPiA+IAo+ID4gQ2hhbmdlcyBzaW5jZSB2MjoKPiA+ICBEYW5pZWwg VmV0dGVyOgo+ID4gIC0gU3ViY2xhc3MgZHJtX2Nvbm5lY3RvciB0byBkcm1fd3JpdGViYWNrX2Nv bm5lY3Rvcgo+ID4gIC0gUmVsYXggY2hlY2sgdG8gYWxsb3cgQ1JUQyB0byBiZSBzZXQgd2l0aG91 dCBhbiBGQgo+ID4gIC0gQWRkIHNvbWUgd3JpdGViYWNrXyBwcmVmaXhlcwo+ID4gIC0gRHJvcCBQ SVhFTF9GT1JNQVRTX1NJWkUgcHJvcGVydHksIGFzIGl0IHdhcyB1bm5lY2Vzc2FyeQo+ID4gIEd1 c3Rhdm8gUGFkb3ZhbjoKPiA+ICAtIEFkZCBkcm1fd3JpdGViYWNrX2pvYiB0byBoYW5kbGUgd3Jp dGViYWNrIHNpZ25hbGxpbmcgY2VudHJhbGx5Cj4gPiAKPiA+IENoYW5nZXMgc2luY2UgdjM6Cj4g PiAgLSBSZWJhc2VkCj4gPiAgLSBSZW5hbWUgUElYRUxfRk9STUFUUyAtPiBXUklURUJBQ0tfUElY RUxfRk9STUFUUwo+ID4gCj4gPiBDaGFuZ2VzIHNpbmNlIHY0Ogo+ID4gIC0gQWRkZWQgYXRvbWlj X2NvbW1pdCgpIHZmdW5jIHRvIGNvbm5lY3RvciBoZWxwZXIgZnVuY3MsIHNvIHRoYXQKPiA+ICAg IHdyaXRlYmFjayBqb2JzIGFyZSBjb21taXR0ZWQgZnJvbSBhdG9taWMgaGVscGVycwo+ID4gCj4g PiBTaWduZWQtb2ZmLWJ5OiBCcmlhbiBTdGFya2V5IDxicmlhbi5zdGFya2V5QGFybS5jb20+Cj4g PiBbcmViYXNlZCBhbmQgZml4ZWQgY29uZmxpY3RzXQo+ID4gU2lnbmVkLW9mZi1ieTogTWloYWls IEF0YW5hc3NvdiA8bWloYWlsLmF0YW5hc3NvdkBhcm0uY29tPgo+ID4gU2lnbmVkLW9mZi1ieTog TGl2aXUgRHVkYXUgPGxpdml1LmR1ZGF1QGFybS5jb20+Cj4gPiBbcmViYXNlZCBhbmQgYWRkZWQg YXRvbWljX2NvbW1pdCgpIHZmdW5jIGZvciB3cml0ZWJhY2sgam9ic10KPiA+IFNpZ25lZC1vZmYt Ynk6IFJvYiBDbGFyayA8cm9iZGNsYXJrQGdtYWlsLmNvbT4KPiA+IC0tLQo+ID4gIERvY3VtZW50 YXRpb24vZ3B1L2RybS1rbXMucnN0ICAgICAgICAgICAgfCAgIDkgKysKPiA+ICBkcml2ZXJzL2dw dS9kcm0vTWFrZWZpbGUgICAgICAgICAgICAgICAgIHwgICAyICstCj4gPiAgZHJpdmVycy9ncHUv ZHJtL2RybV9hdG9taWMuYyAgICAgICAgICAgICB8IDEzMCArKysrKysrKysrKysrKysrCj4gPiAg ZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMgICAgICB8ICAzMCArKysrCj4gPiAg ZHJpdmVycy9ncHUvZHJtL2RybV9jb25uZWN0b3IuYyAgICAgICAgICB8ICAgNCArLQo+ID4gIGRy aXZlcnMvZ3B1L2RybS9kcm1fd3JpdGViYWNrLmMgICAgICAgICAgfCAyNTcgKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKwo+ID4gIGluY2x1ZGUvZHJtL2RybV9hdG9taWMuaCAgICAgICAg ICAgICAgICAgfCAgIDMgKwo+ID4gIGluY2x1ZGUvZHJtL2RybV9jb25uZWN0b3IuaCAgICAgICAg ICAgICAgfCAgMTMgKysKPiA+ICBpbmNsdWRlL2RybS9kcm1fbW9kZV9jb25maWcuaCAgICAgICAg ICAgIHwgIDE0ICsrCj4gPiAgaW5jbHVkZS9kcm0vZHJtX21vZGVzZXRfaGVscGVyX3Z0YWJsZXMu aCB8ICAxMSArKwo+ID4gIGluY2x1ZGUvZHJtL2RybV93cml0ZWJhY2suaCAgICAgICAgICAgICAg fCAgODkgKysrKysrKysrKysKPiA+ICBpbmNsdWRlL3VhcGkvZHJtL2RybV9tb2RlLmggICAgICAg ICAgICAgIHwgICAxICsKPiA+ICAxMiBmaWxlcyBjaGFuZ2VkLCA1NjEgaW5zZXJ0aW9ucygrKSwg MiBkZWxldGlvbnMoLSkKPiA+ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9ncHUvZHJtL2Ry bV93cml0ZWJhY2suYwo+ID4gIGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNsdWRlL2RybS9kcm1fd3Jp dGViYWNrLmgKPiA+IAo+ID4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vZ3B1L2RybS1rbXMu cnN0IGIvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLWttcy5yc3QKPiA+IGluZGV4IDJkY2Y1YjQyMDE1 ZC4uZTc1OTBkZDJmNzFlIDEwMDY0NAo+ID4gLS0tIGEvRG9jdW1lbnRhdGlvbi9ncHUvZHJtLWtt cy5yc3QKPiA+ICsrKyBiL0RvY3VtZW50YXRpb24vZ3B1L2RybS1rbXMucnN0Cj4gPiBAQCAtMzcw LDYgKzM3MCwxNSBAQCBDb25uZWN0b3IgRnVuY3Rpb25zIFJlZmVyZW5jZQo+ID4gIC4uIGtlcm5l bC1kb2M6OiBkcml2ZXJzL2dwdS9kcm0vZHJtX2Nvbm5lY3Rvci5jCj4gPiAgICAgOmV4cG9ydDoK PiA+ICAKPiA+ICtXcml0ZWJhY2sgQ29ubmVjdG9ycwo+ID4gKy0tLS0tLS0tLS0tLS0tLS0tLS0t Cj4gPiArCj4gPiArLi4ga2VybmVsLWRvYzo6IGRyaXZlcnMvZ3B1L2RybS9kcm1fd3JpdGViYWNr LmMKPiA+ICsgIDpkb2M6IG92ZXJ2aWV3Cj4gPiArCj4gPiArLi4ga2VybmVsLWRvYzo6IGRyaXZl cnMvZ3B1L2RybS9kcm1fd3JpdGViYWNrLmMKPiA+ICsgIDpleHBvcnQ6Cj4gPiArCj4gPiAgRW5j b2RlciBBYnN0cmFjdGlvbgo+ID4gID09PT09PT09PT09PT09PT09PT0KPiA+ICAKPiA+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vTWFrZWZpbGUgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZp bGUKPiA+IGluZGV4IDUwMDkzZmY0NDc5Yi4uM2Q3MDg5NTliMjI0IDEwMDY0NAo+ID4gLS0tIGEv ZHJpdmVycy9ncHUvZHJtL01ha2VmaWxlCj4gPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vTWFrZWZp bGUKPiA+IEBAIC0xOCw3ICsxOCw3IEBAIGRybS15ICAgICAgIDo9CWRybV9hdXRoLm8gZHJtX2J1 ZnMubyBkcm1fY2FjaGUubyBcCj4gPiAgCQlkcm1fZW5jb2Rlci5vIGRybV9tb2RlX29iamVjdC5v IGRybV9wcm9wZXJ0eS5vIFwKPiA+ICAJCWRybV9wbGFuZS5vIGRybV9jb2xvcl9tZ210Lm8gZHJt X3ByaW50Lm8gXAo+ID4gIAkJZHJtX2R1bWJfYnVmZmVycy5vIGRybV9tb2RlX2NvbmZpZy5vIGRy bV92YmxhbmsubyBcCj4gPiAtCQlkcm1fc3luY29iai5vIGRybV9sZWFzZS5vCj4gPiArCQlkcm1f c3luY29iai5vIGRybV9sZWFzZS5vIGRybV93cml0ZWJhY2subwo+ID4gIAo+ID4gIGRybS0kKENP TkZJR19EUk1fTElCX1JBTkRPTSkgKz0gbGliL2RybV9yYW5kb20ubwo+ID4gIGRybS0kKENPTkZJ R19EUk1fVk0pICs9IGRybV92bS5vCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2Ry bV9hdG9taWMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljLmMKPiA+IGluZGV4IDQ2NzMz ZDUzNDU4Ny4uMDE5ZjEzMWZlOGJlIDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2Ry bV9hdG9taWMuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWMuYwo+ID4gQEAg LTMwLDYgKzMwLDcgQEAKPiA+ICAjaW5jbHVkZSA8ZHJtL2RybV9hdG9taWMuaD4KPiA+ICAjaW5j bHVkZSA8ZHJtL2RybV9tb2RlLmg+Cj4gPiAgI2luY2x1ZGUgPGRybS9kcm1fcHJpbnQuaD4KPiA+ ICsjaW5jbHVkZSA8ZHJtL2RybV93cml0ZWJhY2suaD4KPiA+ICAjaW5jbHVkZSA8bGludXgvc3lu Y19maWxlLmg+Cj4gPiAgCj4gPiAgI2luY2x1ZGUgImRybV9jcnRjX2ludGVybmFsLmgiCj4gPiBA QCAtNjM4LDYgKzYzOSw0NiBAQCBzdGF0aWMgdm9pZCBkcm1fYXRvbWljX2NydGNfcHJpbnRfc3Rh dGUoc3RydWN0IGRybV9wcmludGVyICpwLAo+ID4gIAkJY3J0Yy0+ZnVuY3MtPmF0b21pY19wcmlu dF9zdGF0ZShwLCBzdGF0ZSk7Cj4gPiAgfQo+ID4gIAo+ID4gKy8qKgo+ID4gKyAqIGRybV9hdG9t aWNfY29ubmVjdG9yX2NoZWNrIC0gY2hlY2sgY29ubmVjdG9yIHN0YXRlCj4gPiArICogQGNvbm5l Y3RvcjogY29ubmVjdG9yIHRvIGNoZWNrCj4gPiArICogQHN0YXRlOiBjb25uZWN0b3Igc3RhdGUg dG8gY2hlY2sKPiA+ICsgKgo+ID4gKyAqIFByb3ZpZGVzIGNvcmUgc2FuaXR5IGNoZWNrcyBmb3Ig Y29ubmVjdG9yIHN0YXRlLgo+ID4gKyAqCj4gPiArICogUkVUVVJOUzoKPiA+ICsgKiBaZXJvIG9u IHN1Y2Nlc3MsIGVycm9yIGNvZGUgb24gZmFpbHVyZQo+ID4gKyAqLwo+ID4gK3N0YXRpYyBpbnQg ZHJtX2F0b21pY19jb25uZWN0b3JfY2hlY2soc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rv ciwKPiA+ICsJCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpzdGF0ZSkKPiA+ICt7Cj4gPiAr CXN0cnVjdCBkcm1fY3J0Y19zdGF0ZSAqY3J0Y19zdGF0ZTsKPiA+ICsJc3RydWN0IGRybV93cml0 ZWJhY2tfam9iICp3cml0ZWJhY2tfam9iID0gc3RhdGUtPndyaXRlYmFja19qb2I7Cj4gPiArCj4g PiArCWlmICgoY29ubmVjdG9yLT5jb25uZWN0b3JfdHlwZSAhPSBEUk1fTU9ERV9DT05ORUNUT1Jf V1JJVEVCQUNLKSB8fAo+ID4gKwkgICAgIXdyaXRlYmFja19qb2IpCj4gPiArCQlyZXR1cm4gMDsK PiA+ICsKPiA+ICsJaWYgKHdyaXRlYmFja19qb2ItPmZiICYmICFzdGF0ZS0+Y3J0Yykgewo+ID4g KwkJRFJNX0RFQlVHX0FUT01JQygiW0NPTk5FQ1RPUjolZDolc10gZnJhbWVidWZmZXIgd2l0aG91 dCBDUlRDXG4iLAo+ID4gKwkJCQkgY29ubmVjdG9yLT5iYXNlLmlkLCBjb25uZWN0b3ItPm5hbWUp Owo+ID4gKwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiArCX0KPiA+ICsKPiA+ICsJaWYgKHN0YXRlLT5j cnRjKQo+ID4gKwkJY3J0Y19zdGF0ZSA9IGRybV9hdG9taWNfZ2V0X2V4aXN0aW5nX2NydGNfc3Rh dGUoc3RhdGUtPnN0YXRlLAo+ID4gKwkJCQkJCQkJc3RhdGUtPmNydGMpOwo+ID4gKwo+ID4gKwlp ZiAod3JpdGViYWNrX2pvYi0+ZmIgJiYgIWNydGNfc3RhdGUtPmFjdGl2ZSkgewo+IAo+IENoZWNr aW5nIGZvciB3cml0ZWJhY2tfam9iLT5mYiBpcyByZWR1bmRhbnQgaGVyZSBhbmQgYWJvdmUgc2lu Y2UgaXQncyBjaGVja2VkCj4gZmlyc3QgdGhpbmcgYXMgZWFybHkgZXhpdCBjcml0ZXJpYS4KCkkg c29tZWhvdyBkb24ndCBzZWUgdGhhdCBjaGVjay4gV2UgY2hlY2sgaWYgKCF3cml0ZWJhY19qb2Ip IGFuZCB0aGVuIGFsbApvdGhlciBjaGVja3MgYXJlIGxvZ2ljIGFuZHMgd2l0aCBvdGhlciBjb25k aXRpb25zLCBzbyBJIHRoaW5rIHRoZSBjaGVjawpoZXJlIGlzIHN0aWxsIHJlbGV2YW50LgoKPiAK PiA+ICsJCURSTV9ERUJVR19BVE9NSUMoIltDT05ORUNUT1I6JWQ6JXNdIGhhcyBmcmFtZWJ1ZmZl ciwgYnV0IFtDUlRDOiVkXSBpcyBvZmZcbiIsCj4gPiArCQkJCSBjb25uZWN0b3ItPmJhc2UuaWQs IGNvbm5lY3Rvci0+bmFtZSwKPiA+ICsJCQkJIHN0YXRlLT5jcnRjLT5iYXNlLmlkKTsKPiA+ICsJ CXJldHVybiAtRUlOVkFMOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ ICsKPiA+ICAvKioKPiA+ICAgKiBkcm1fYXRvbWljX2dldF9wbGFuZV9zdGF0ZSAtIGdldCBwbGFu ZSBzdGF0ZQo+ID4gICAqIEBzdGF0ZTogZ2xvYmFsIGF0b21pYyBzdGF0ZSBvYmplY3QKPiA+IEBA IC0xMjMwLDYgKzEyNzEsMTIgQEAgc3RhdGljIGludCBkcm1fYXRvbWljX2Nvbm5lY3Rvcl9zZXRf cHJvcGVydHkoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+ICAJCQlyZXR1cm4g LUVJTlZBTDsKPiA+ICAJCX0KPiA+ICAJCXN0YXRlLT5jb250ZW50X3Byb3RlY3Rpb24gPSB2YWw7 Cj4gPiArCX0gZWxzZSBpZiAocHJvcGVydHkgPT0gY29uZmlnLT53cml0ZWJhY2tfZmJfaWRfcHJv cGVydHkpIHsKPiA+ICsJCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgKmZiID0gZHJtX2ZyYW1lYnVm ZmVyX2xvb2t1cChkZXYsIE5VTEwsIHZhbCk7Cj4gPiArCQlpbnQgcmV0ID0gZHJtX2F0b21pY19z ZXRfd3JpdGViYWNrX2ZiX2Zvcl9jb25uZWN0b3Ioc3RhdGUsIGZiKTsKPiA+ICsJCWlmIChmYikK PiA+ICsJCQlkcm1fZnJhbWVidWZmZXJfdW5yZWZlcmVuY2UoZmIpOwo+ID4gKwkJcmV0dXJuIHJl dDsKPiA+ICAJfSBlbHNlIGlmIChjb25uZWN0b3ItPmZ1bmNzLT5hdG9taWNfc2V0X3Byb3BlcnR5 KSB7Cj4gPiAgCQlyZXR1cm4gY29ubmVjdG9yLT5mdW5jcy0+YXRvbWljX3NldF9wcm9wZXJ0eShj b25uZWN0b3IsCj4gPiAgCQkJCXN0YXRlLCBwcm9wZXJ0eSwgdmFsKTsKPiA+IEBAIC0xMzExLDYg KzEzNTgsOSBAQCBkcm1fYXRvbWljX2Nvbm5lY3Rvcl9nZXRfcHJvcGVydHkoc3RydWN0IGRybV9j b25uZWN0b3IgKmNvbm5lY3RvciwKPiA+ICAJCSp2YWwgPSBzdGF0ZS0+c2NhbGluZ19tb2RlOwo+ ID4gIAl9IGVsc2UgaWYgKHByb3BlcnR5ID09IGNvbm5lY3Rvci0+Y29udGVudF9wcm90ZWN0aW9u X3Byb3BlcnR5KSB7Cj4gPiAgCQkqdmFsID0gc3RhdGUtPmNvbnRlbnRfcHJvdGVjdGlvbjsKPiA+ ICsJfSBlbHNlIGlmIChwcm9wZXJ0eSA9PSBjb25maWctPndyaXRlYmFja19mYl9pZF9wcm9wZXJ0 eSkgewo+ID4gKwkJLyogV3JpdGViYWNrIGZyYW1lYnVmZmVyIGlzIG9uZS1zaG90LCB3cml0ZSBh bmQgZm9yZ2V0ICovCj4gPiArCQkqdmFsID0gMDsKPiA+ICAJfSBlbHNlIGlmIChjb25uZWN0b3It PmZ1bmNzLT5hdG9taWNfZ2V0X3Byb3BlcnR5KSB7Cj4gPiAgCQlyZXR1cm4gY29ubmVjdG9yLT5m dW5jcy0+YXRvbWljX2dldF9wcm9wZXJ0eShjb25uZWN0b3IsCj4gPiAgCQkJCXN0YXRlLCBwcm9w ZXJ0eSwgdmFsKTsKPiA+IEBAIC0xNTE4LDYgKzE1NjgsNzUgQEAgZHJtX2F0b21pY19zZXRfY3J0 Y19mb3JfY29ubmVjdG9yKHN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlLAo+ ID4gIH0KPiA+ICBFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNfc2V0X2NydGNfZm9yX2Nvbm5lY3Rv cik7Cj4gPiAgCj4gPiArLyoKPiA+ICsgKiBkcm1fYXRvbWljX2dldF93cml0ZWJhY2tfam9iIC0g cmV0dXJuIG9yIGFsbG9jYXRlIGEgd3JpdGViYWNrIGpvYgo+ID4gKyAqIEBjb25uX3N0YXRlOiBD b25uZWN0b3Igc3RhdGUgdG8gZ2V0IHRoZSBqb2IgZm9yCj4gPiArICoKPiA+ICsgKiBXcml0ZWJh Y2sgam9icyBoYXZlIGEgZGlmZmVyZW50IGxpZmV0aW1lIHRvIHRoZSBhdG9taWMgc3RhdGUgdGhl eSBhcmUKPiA+ICsgKiBhc3NvY2lhdGVkIHdpdGguIFRoaXMgY29udmVuaWVuY2UgZnVuY3Rpb24g dGFrZXMgY2FyZSBvZiBhbGxvY2F0aW5nIGEgam9iCj4gPiArICogaWYgdGhlcmUgaXNuJ3QgeWV0 IG9uZSBhc3NvY2lhdGVkIHdpdGggdGhlIGNvbm5lY3RvciBzdGF0ZSwgb3RoZXJ3aXNlCj4gPiAr ICogaXQganVzdCByZXR1cm5zIHRoZSBleGlzdGluZyBqb2IuCj4gPiArICoKPiA+ICsgKiBSZXR1 cm5zOiBUaGUgd3JpdGViYWNrIGpvYiBmb3IgdGhlIGdpdmVuIGNvbm5lY3RvciBzdGF0ZQo+ID4g KyAqLwo+ID4gK3N0YXRpYyBzdHJ1Y3QgZHJtX3dyaXRlYmFja19qb2IgKgo+ID4gK2RybV9hdG9t aWNfZ2V0X3dyaXRlYmFja19qb2Ioc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKmNvbm5fc3Rh dGUpCj4gPiArewo+ID4gKwlXQVJOX09OKGNvbm5fc3RhdGUtPmNvbm5lY3Rvci0+Y29ubmVjdG9y X3R5cGUgIT0KPiA+ICsJCURSTV9NT0RFX0NPTk5FQ1RPUl9XUklURUJBQ0spOwo+ID4gKwo+ID4g KwlpZiAoIWNvbm5fc3RhdGUtPndyaXRlYmFja19qb2IpCj4gPiArCQljb25uX3N0YXRlLT53cml0 ZWJhY2tfam9iID0KPiA+ICsJCQlremFsbG9jKHNpemVvZigqY29ubl9zdGF0ZS0+d3JpdGViYWNr X2pvYiksIEdGUF9LRVJORUwpOwo+ID4gKwo+ID4gKwlyZXR1cm4gY29ubl9zdGF0ZS0+d3JpdGVi YWNrX2pvYjsKPiA+ICt9Cj4gPiArCj4gPiArLyoqCj4gPiArICogZHJtX2F0b21pY19zZXRfd3Jp dGViYWNrX2ZiX2Zvcl9jb25uZWN0b3IgLSBzZXQgd3JpdGViYWNrIGZyYW1lYnVmZmVyCj4gPiAr ICogQGNvbm5fc3RhdGU6IGF0b21pYyBzdGF0ZSBvYmplY3QgZm9yIHRoZSBjb25uZWN0b3IKPiA+ ICsgKiBAZmI6IGZiIHRvIHVzZSBmb3IgdGhlIGNvbm5lY3Rvcgo+ID4gKyAqCj4gPiArICogVGhp cyBpcyB1c2VkIHRvIHNldCB0aGUgZnJhbWVidWZmZXIgZm9yIGEgd3JpdGViYWNrIGNvbm5lY3Rv ciwgd2hpY2ggb3V0cHV0cwo+ID4gKyAqIHRvIGEgYnVmZmVyIGluc3RlYWQgb2YgYW4gYWN0dWFs IHBoeXNpY2FsIGNvbm5lY3Rvci4KPiA+ICsgKiBDaGFuZ2luZyB0aGUgYXNzaWduZWQgZnJhbWVi dWZmZXIgcmVxdWlyZXMgdXMgdG8gZ3JhYiBhIHJlZmVyZW5jZSB0byB0aGUgbmV3Cj4gPiArICog ZmIgYW5kIGRyb3AgdGhlIHJlZmVyZW5jZSB0byB0aGUgb2xkIGZiLCBpZiB0aGVyZSBpcyBvbmUu IFRoaXMgZnVuY3Rpb24KPiA+ICsgKiB0YWtlcyBjYXJlIG9mIGFsbCB0aGVzZSBkZXRhaWxzIGJl c2lkZXMgdXBkYXRpbmcgdGhlIHBvaW50ZXIgaW4gdGhlCj4gPiArICogc3RhdGUgb2JqZWN0IGl0 c2VsZi4KPiA+ICsgKgo+ID4gKyAqIE5vdGU6IFRoZSBvbmx5IHdheSBjb25uX3N0YXRlIGNhbiBh bHJlYWR5IGhhdmUgYW4gZmIgc2V0IGlzIGlmIHRoZSBjb21taXQKPiA+ICsgKiBzZXRzIHRoZSBw cm9wZXJ0eSBtb3JlIHRoYW4gb25jZS4KPiA+ICsgKgo+ID4gKyAqIFNlZSBhbHNvOiBkcm1fd3Jp dGViYWNrX2Nvbm5lY3Rvcl9pbml0KCkKPiA+ICsgKgo+ID4gKyAqIFJldHVybnM6IDAgb24gc3Vj Y2Vzcwo+ID4gKyAqLwo+ID4gK2ludCBkcm1fYXRvbWljX3NldF93cml0ZWJhY2tfZmJfZm9yX2Nv bm5lY3RvcigKPiA+ICsJCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpjb25uX3N0YXRlLAo+ ID4gKwkJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciAqZmIpCj4gPiArewo+ID4gKwlzdHJ1Y3QgZHJt X3dyaXRlYmFja19qb2IgKmpvYiA9Cj4gPiArCQlkcm1fYXRvbWljX2dldF93cml0ZWJhY2tfam9i KGNvbm5fc3RhdGUpOwo+ID4gKwlpZiAoIWpvYikKPiA+ICsJCXJldHVybiAtRU5PTUVNOwo+ID4g Kwo+ID4gKwlpZiAoam9iLT5mYikKPiA+ICsJCWRybV9mcmFtZWJ1ZmZlcl91bnJlZmVyZW5jZShq b2ItPmZiKTsKPiA+ICsJaWYgKGZiKQo+ID4gKwkJZHJtX2ZyYW1lYnVmZmVyX3JlZmVyZW5jZShm Yik7Cj4gPiArCWpvYi0+ZmIgPSBmYjsKPiA+ICsKPiA+ICsJaWYgKGZiKQo+ID4gKwkJRFJNX0RF QlVHX0FUT01JQygiU2V0IFtGQjolZF0gZm9yIGNvbm5lY3RvciBzdGF0ZSAlcFxuIiwKPiA+ICsJ CQkJIGZiLT5iYXNlLmlkLCBjb25uX3N0YXRlKTsKPiA+ICsJZWxzZQo+ID4gKwkJRFJNX0RFQlVH X0FUT01JQygiU2V0IFtOT0ZCXSBmb3IgY29ubmVjdG9yIHN0YXRlICVwXG4iLAo+ID4gKwkJCQkg Y29ubl9zdGF0ZSk7Cj4gPiArCj4gPiArCXJldHVybiAwOwo+ID4gK30KPiA+ICtFWFBPUlRfU1lN Qk9MKGRybV9hdG9taWNfc2V0X3dyaXRlYmFja19mYl9mb3JfY29ubmVjdG9yKTsKPiA+ICsKPiA+ ICAvKioKPiA+ICAgKiBkcm1fYXRvbWljX2FkZF9hZmZlY3RlZF9jb25uZWN0b3JzIC0gYWRkIGNv bm5lY3RvcnMgZm9yIGNydGMKPiA+ICAgKiBAc3RhdGU6IGF0b21pYyBzdGF0ZQo+ID4gQEAgLTE2 MzYsNiArMTc1NSw4IEBAIGludCBkcm1fYXRvbWljX2NoZWNrX29ubHkoc3RydWN0IGRybV9hdG9t aWNfc3RhdGUgKnN0YXRlKQo+ID4gIAlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpwbGFuZV9zdGF0 ZTsKPiA+ICAJc3RydWN0IGRybV9jcnRjICpjcnRjOwo+ID4gIAlzdHJ1Y3QgZHJtX2NydGNfc3Rh dGUgKmNydGNfc3RhdGU7Cj4gPiArCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uOwo+ID4gKwlz dHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZTsKPiA+ICAJaW50IGksIHJldCA9 IDA7Cj4gPiAgCj4gPiAgCURSTV9ERUJVR19BVE9NSUMoImNoZWNraW5nICVwXG4iLCBzdGF0ZSk7 Cj4gPiBAQCAtMTY1OCw2ICsxNzc5LDE1IEBAIGludCBkcm1fYXRvbWljX2NoZWNrX29ubHkoc3Ry dWN0IGRybV9hdG9taWNfc3RhdGUgKnN0YXRlKQo+ID4gIAkJfQo+ID4gIAl9Cj4gPiAgCj4gPiAr CWZvcl9lYWNoX25ld19jb25uZWN0b3JfaW5fc3RhdGUoc3RhdGUsIGNvbm4sIGNvbm5fc3RhdGUs IGkpIHsKPiA+ICsJCXJldCA9IGRybV9hdG9taWNfY29ubmVjdG9yX2NoZWNrKGNvbm4sIGNvbm5f c3RhdGUpOwo+ID4gKwkJaWYgKHJldCkgewo+ID4gKwkJCURSTV9ERUJVR19BVE9NSUMoIltDT05O RUNUT1I6JWQ6JXNdIGF0b21pYyBjb3JlIGNoZWNrIGZhaWxlZFxuIiwKPiA+ICsJCQkJCSBjb25u LT5iYXNlLmlkLCBjb25uLT5uYW1lKTsKPiA+ICsJCQlyZXR1cm4gcmV0Owo+ID4gKwkJfQo+ID4g Kwl9Cj4gPiArCj4gPiAgCWlmIChjb25maWctPmZ1bmNzLT5hdG9taWNfY2hlY2spCj4gPiAgCQly ZXQgPSBjb25maWctPmZ1bmNzLT5hdG9taWNfY2hlY2soc3RhdGUtPmRldiwgc3RhdGUpOwo+ID4g IAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBlci5jIGIv ZHJpdmVycy9ncHUvZHJtL2RybV9hdG9taWNfaGVscGVyLmMKPiA+IGluZGV4IGFlM2NiZmU5ZTAx Yy4uMTJiOTEwNzU1ZDg0IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9hdG9t aWNfaGVscGVyLmMKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fYXRvbWljX2hlbHBlci5j Cj4gPiBAQCAtMzAsNiArMzAsNyBAQAo+ID4gICNpbmNsdWRlIDxkcm0vZHJtX3BsYW5lX2hlbHBl ci5oPgo+ID4gICNpbmNsdWRlIDxkcm0vZHJtX2NydGNfaGVscGVyLmg+Cj4gPiAgI2luY2x1ZGUg PGRybS9kcm1fYXRvbWljX2hlbHBlci5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX3dyaXRlYmFj ay5oPgo+ID4gICNpbmNsdWRlIDxsaW51eC9kbWEtZmVuY2UuaD4KPiA+ICAKPiA+ICAjaW5jbHVk ZSAiZHJtX2NydGNfaGVscGVyX2ludGVybmFsLmgiCj4gPiBAQCAtMTE1OSw2ICsxMTYwLDI3IEBA IHZvaWQgZHJtX2F0b21pY19oZWxwZXJfY29tbWl0X21vZGVzZXRfZGlzYWJsZXMoc3RydWN0IGRy bV9kZXZpY2UgKmRldiwKPiA+ICB9Cj4gPiAgRVhQT1JUX1NZTUJPTChkcm1fYXRvbWljX2hlbHBl cl9jb21taXRfbW9kZXNldF9kaXNhYmxlcyk7Cj4gPiAgCj4gPiArc3RhdGljIHZvaWQgY29tbWl0 X3dyaXRlYmFja3Moc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9hdG9taWNfc3Rh dGUgKm9sZF9zdGF0ZSkKPiA+ICt7Cj4gPiArCXN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0 b3I7Cj4gPiArCXN0cnVjdCBkcm1fY29ubmVjdG9yX3N0YXRlICpuZXdfY29ubl9zdGF0ZTsKPiA+ ICsJaW50IGk7Cj4gPiArCj4gPiArCWZvcl9lYWNoX25ld19jb25uZWN0b3JfaW5fc3RhdGUob2xk X3N0YXRlLCBjb25uZWN0b3IsIG5ld19jb25uX3N0YXRlLCBpKSB7Cj4gPiArCQljb25zdCBzdHJ1 Y3QgZHJtX2Nvbm5lY3Rvcl9oZWxwZXJfZnVuY3MgKmZ1bmNzOwo+ID4gKwo+ID4gKwkJZnVuY3Mg PSBjb25uZWN0b3ItPmhlbHBlcl9wcml2YXRlOwo+ID4gKwo+ID4gKwkJaWYgKG5ld19jb25uX3N0 YXRlLT53cml0ZWJhY2tfam9iICYmCj4gPiArCQkgICAgbmV3X2Nvbm5fc3RhdGUtPndyaXRlYmFj a19qb2ItPmZiKSB7Cj4gPiArCQkJV0FSTl9PTihjb25uZWN0b3ItPmNvbm5lY3Rvcl90eXBlICE9 Cj4gPiArCQkJCURSTV9NT0RFX0NPTk5FQ1RPUl9XUklURUJBQ0spOwo+ID4gKwkJCWZ1bmNzLT5h dG9taWNfY29tbWl0KGNvbm5lY3RvciwKPiA+ICsJCQkJCSAgICAgbmV3X2Nvbm5fc3RhdGUtPndy aXRlYmFja19qb2IpOwo+ID4gKwkJfQo+ID4gKwl9Cj4gPiArfQo+ID4gKwo+ID4gIC8qKgo+ID4g ICAqIGRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9tb2Rlc2V0X2VuYWJsZXMgLSBtb2Rlc2V0IGNv bW1pdCB0byBlbmFibGUgb3V0cHV0cwo+ID4gICAqIEBkZXY6IERSTSBkZXZpY2UKPiA+IEBAIC0x MjM4LDYgKzEyNjAsOCBAQCB2b2lkIGRybV9hdG9taWNfaGVscGVyX2NvbW1pdF9tb2Rlc2V0X2Vu YWJsZXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKPiA+ICAKPiA+ICAJCWRybV9icmlkZ2VfZW5h YmxlKGVuY29kZXItPmJyaWRnZSk7Cj4gPiAgCX0KPiA+ICsKPiA+ICsJY29tbWl0X3dyaXRlYmFj a3MoZGV2LCBvbGRfc3RhdGUpOwo+ID4gIH0KPiA+ICBFWFBPUlRfU1lNQk9MKGRybV9hdG9taWNf aGVscGVyX2NvbW1pdF9tb2Rlc2V0X2VuYWJsZXMpOwo+ID4gIAo+ID4gQEAgLTM2MjcsNiArMzY1 MSw5IEBAIF9fZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1cGxpY2F0ZV9zdGF0ZShzdHJ1 Y3QgZHJtX2Nvbm5lY3RvciAqY29ubmVjdG9yLAo+ID4gIAlpZiAoc3RhdGUtPmNydGMpCj4gPiAg CQlkcm1fY29ubmVjdG9yX2dldChjb25uZWN0b3IpOwo+ID4gIAlzdGF0ZS0+Y29tbWl0ID0gTlVM TDsKPiA+ICsKPiA+ICsJLyogRG9uJ3QgY29weSBvdmVyIGEgd3JpdGViYWNrIGpvYiwgdGhleSBh cmUgdXNlZCBvbmx5IG9uY2UgKi8KPiA+ICsJc3RhdGUtPndyaXRlYmFja19qb2IgPSBOVUxMOwo+ ID4gIH0KPiA+ICBFWFBPUlRfU1lNQk9MKF9fZHJtX2F0b21pY19oZWxwZXJfY29ubmVjdG9yX2R1 cGxpY2F0ZV9zdGF0ZSk7Cj4gPiAgCj4gPiBAQCAtMzc1Niw2ICszNzgzLDkgQEAgX19kcm1fYXRv bWljX2hlbHBlcl9jb25uZWN0b3JfZGVzdHJveV9zdGF0ZShzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9z dGF0ZSAqc3RhdGUpCj4gPiAgCj4gPiAgCWlmIChzdGF0ZS0+Y29tbWl0KQo+ID4gIAkJZHJtX2Ny dGNfY29tbWl0X3B1dChzdGF0ZS0+Y29tbWl0KTsKPiA+ICsKPiA+ICsJaWYgKHN0YXRlLT53cml0 ZWJhY2tfam9iKQo+ID4gKwkJZHJtX3dyaXRlYmFja19jbGVhbnVwX2pvYihzdGF0ZS0+d3JpdGVi YWNrX2pvYik7Cj4gPiAgfQo+ID4gIEVYUE9SVF9TWU1CT0woX19kcm1fYXRvbWljX2hlbHBlcl9j b25uZWN0b3JfZGVzdHJveV9zdGF0ZSk7Cj4gPiAgCj4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2RybV9jb25uZWN0b3IuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY29ubmVjdG9yLmMK PiA+IGluZGV4IDE2YjljMzgxMGFmMi4uYWRkNDdmMDZhZTcwIDEwMDY0NAo+ID4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2RybV9jb25uZWN0b3IuYwo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2Ry bV9jb25uZWN0b3IuYwo+ID4gQEAgLTg3LDYgKzg3LDcgQEAgc3RhdGljIHN0cnVjdCBkcm1fY29u bl9wcm9wX2VudW1fbGlzdCBkcm1fY29ubmVjdG9yX2VudW1fbGlzdFtdID0gewo+ID4gIAl7IERS TV9NT0RFX0NPTk5FQ1RPUl9WSVJUVUFMLCAiVmlydHVhbCIgfSwKPiA+ICAJeyBEUk1fTU9ERV9D T05ORUNUT1JfRFNJLCAiRFNJIiB9LAo+ID4gIAl7IERSTV9NT0RFX0NPTk5FQ1RPUl9EUEksICJE UEkiIH0sCj4gPiArCXsgRFJNX01PREVfQ09OTkVDVE9SX1dSSVRFQkFDSywgIldyaXRlYmFjayIg fSwKPiA+ICB9Owo+ID4gIAo+ID4gIHZvaWQgZHJtX2Nvbm5lY3Rvcl9pZGFfaW5pdCh2b2lkKQo+ ID4gQEAgLTI0OSw3ICsyNTAsOCBAQCBpbnQgZHJtX2Nvbm5lY3Rvcl9pbml0KHN0cnVjdCBkcm1f ZGV2aWNlICpkZXYsCj4gPiAgCWNvbmZpZy0+bnVtX2Nvbm5lY3RvcisrOwo+ID4gIAlzcGluX3Vu bG9ja19pcnEoJmNvbmZpZy0+Y29ubmVjdG9yX2xpc3RfbG9jayk7Cj4gPiAgCj4gPiAtCWlmIChj b25uZWN0b3JfdHlwZSAhPSBEUk1fTU9ERV9DT05ORUNUT1JfVklSVFVBTCkKPiA+ICsJaWYgKGNv bm5lY3Rvcl90eXBlICE9IERSTV9NT0RFX0NPTk5FQ1RPUl9WSVJUVUFMICYmCj4gPiArCSAgICBj b25uZWN0b3JfdHlwZSAhPSBEUk1fTU9ERV9DT05ORUNUT1JfV1JJVEVCQUNLKQo+ID4gIAkJZHJt X29iamVjdF9hdHRhY2hfcHJvcGVydHkoJmNvbm5lY3Rvci0+YmFzZSwKPiA+ICAJCQkJCSAgICAg IGNvbmZpZy0+ZWRpZF9wcm9wZXJ0eSwKPiA+ICAJCQkJCSAgICAgIDApOwo+ID4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fd3JpdGViYWNrLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJt X3dyaXRlYmFjay5jCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ID4gaW5kZXggMDAwMDAwMDAw MDAwLi5kYTYxZjkyOWNiYzMKPiA+IC0tLSAvZGV2L251bGwKPiA+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9kcm1fd3JpdGViYWNrLmMKPiA+IEBAIC0wLDAgKzEsMjU3IEBACj4gPiArLyoKPiA+ICsg KiAoQykgQ09QWVJJR0hUIDIwMTYgQVJNIExpbWl0ZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCj4g PiArICogQXV0aG9yOiBCcmlhbiBTdGFya2V5IDxicmlhbi5zdGFya2V5QGFybS5jb20+Cj4gPiAr ICoKPiA+ICsgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZSBhbmQgaXMgcHJvdmlkZWQg dG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKPiA+ICsgKiBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSB2ZXJzaW9uIDIgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCj4gPiAr ICogRm91bmRhdGlvbiwgYW5kIGFueSB1c2UgYnkgeW91IG9mIHRoaXMgcHJvZ3JhbSBpcyBzdWJq ZWN0IHRvIHRoZSB0ZXJtcwo+ID4gKyAqIG9mIHN1Y2ggR05VIGxpY2VuY2UuCj4gPiArICovCj4g PiArCj4gPiArI2luY2x1ZGUgPGRybS9kcm1fY3J0Yy5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJt X21vZGVzZXRfaGVscGVyX3Z0YWJsZXMuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9wcm9wZXJ0 eS5oPgo+ID4gKyNpbmNsdWRlIDxkcm0vZHJtX3dyaXRlYmFjay5oPgo+ID4gKyNpbmNsdWRlIDxk cm0vZHJtUC5oPgo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIERPQzogb3ZlcnZpZXcKPiA+ICsgKgo+ ID4gKyAqIFdyaXRlYmFjayBjb25uZWN0b3JzIGFyZSB1c2VkIHRvIGV4cG9zZSBoYXJkd2FyZSB3 aGljaCBjYW4gd3JpdGUgdGhlIG91dHB1dAo+ID4gKyAqIGZyb20gYSBDUlRDIHRvIGEgbWVtb3J5 IGJ1ZmZlci4gVGhleSBhcmUgdXNlZCBhbmQgYWN0IHNpbWlsYXJseSB0byBvdGhlcgo+ID4gKyAq IHR5cGVzIG9mIGNvbm5lY3RvcnMsIHdpdGggc29tZSBpbXBvcnRhbnQgZGlmZmVyZW5jZXM6Cj4g PiArICogIC0gV3JpdGViYWNrIGNvbm5lY3RvcnMgZG9uJ3QgcHJvdmlkZSBhIHdheSB0byBvdXRw dXQgdmlzdWFsbHkgdG8gdGhlIHVzZXIuCj4gPiArICogIC0gV3JpdGViYWNrIGNvbm5lY3RvcnMg c2hvdWxkIGFsd2F5cyByZXBvcnQgYXMgImRpc2Nvbm5lY3RlZCIgKHNvIHRoYXQKPiA+ICsgKiAg ICBjbGllbnRzIHdoaWNoIGRvbid0IHVuZGVyc3RhbmQgdGhlbSB3aWxsIGlnbm9yZSB0aGVtKS4K PiAKPiBIYXZlIHdlIGNvbnNpZGVyZWQgaGlkaW5nIHdyaXRlYmFjayBiZWhpbmQgYSBjbGllbnQg Y2FwIGluc3RlYWQ/CgpZZXMsIGNoYW5nZWxvZyBzYXlzIHRoYXQgdGhlIGNsaWVudCBjYXAgd2Fz IGRyb3BwZWQgaW4gdjIgYmFzZWQgb24KZmVlZGJhY2sgKGFzIGZhciBhcyBJIHJlbWVtYmVyKS4g Cgo+IAo+ID4gKyAqICAtIFdyaXRlYmFjayBjb25uZWN0b3JzIGRvbid0IGhhdmUgRURJRC4KPiA+ ICsgKgo+ID4gKyAqIEEgZnJhbWVidWZmZXIgbWF5IG9ubHkgYmUgYXR0YWNoZWQgdG8gYSB3cml0 ZWJhY2sgY29ubmVjdG9yIHdoZW4gdGhlCj4gPiArICogY29ubmVjdG9yIGlzIGF0dGFjaGVkIHRv IGEgQ1JUQy4gVGhlIFdSSVRFQkFDS19GQl9JRCBwcm9wZXJ0eSB3aGljaCBzZXRzIHRoZQo+ID4g KyAqIGZyYW1lYnVmZmVyIGFwcGxpZXMgb25seSB0byBhIHNpbmdsZSBjb21taXQgKHNlZSBiZWxv dykuIEEgZnJhbWVidWZmZXIgbWF5Cj4gPiArICogbm90IGJlIGF0dGFjaGVkIHdoaWxlIHRoZSBD UlRDIGlzIG9mZi4KPiA+ICsgKgo+ID4gKyAqIFdyaXRlYmFjayBjb25uZWN0b3JzIGhhdmUgc29t ZSBhZGRpdGlvbmFsIHByb3BlcnRpZXMsIHdoaWNoIHVzZXJzcGFjZQo+ID4gKyAqIGNhbiB1c2Ug dG8gcXVlcnkgYW5kIGNvbnRyb2wgdGhlbToKPiA+ICsgKgo+ID4gKyAqICAiV1JJVEVCQUNLX0ZC X0lEIjoKPiA+ICsgKglXcml0ZS1vbmx5IG9iamVjdCBwcm9wZXJ0eSBzdG9yaW5nIGEgRFJNX01P REVfT0JKRUNUX0ZCOiBpdCBzdG9yZXMgdGhlCj4gPiArICoJZnJhbWVidWZmZXIgdG8gYmUgd3Jp dHRlbiBieSB0aGUgd3JpdGViYWNrIGNvbm5lY3Rvci4gVGhpcyBwcm9wZXJ0eSBpcwo+ID4gKyAq CXNpbWlsYXIgdG8gdGhlIEZCX0lEIHByb3BlcnR5IG9uIHBsYW5lcywgYnV0IHdpbGwgYWx3YXlz IHJlYWQgYXMgemVybwo+ID4gKyAqCWFuZCBpcyBub3QgcHJlc2VydmVkIGFjcm9zcyBjb21taXRz Lgo+ID4gKyAqCVVzZXJzcGFjZSBtdXN0IHNldCB0aGlzIHByb3BlcnR5IHRvIGFuIG91dHB1dCBi dWZmZXIgZXZlcnkgdGltZSBpdAo+ID4gKyAqCXdpc2hlcyB0aGUgYnVmZmVyIHRvIGdldCBmaWxs ZWQuCj4gPiArICoKPiA+ICsgKiAgIldSSVRFQkFDS19QSVhFTF9GT1JNQVRTIjoKPiA+ICsgKglJ bW11dGFibGUgYmxvYiBwcm9wZXJ0eSB0byBzdG9yZSB0aGUgc3VwcG9ydGVkIHBpeGVsIGZvcm1h dHMgdGFibGUuIFRoZQo+ID4gKyAqCWRhdGEgaXMgYW4gYXJyYXkgb2YgdTMyIERSTV9GT1JNQVRf KiBmb3VyY2MgdmFsdWVzLgo+ID4gKyAqCVVzZXJzcGFjZSBjYW4gdXNlIHRoaXMgYmxvYiB0byBm aW5kIG91dCB3aGF0IHBpeGVsIGZvcm1hdHMgYXJlIHN1cHBvcnRlZAo+ID4gKyAqCWJ5IHRoZSBj b25uZWN0b3IncyB3cml0ZWJhY2sgZW5naW5lLgo+ID4gKyAqLwo+ID4gKwo+ID4gK3N0YXRpYyBi b29sIGNyZWF0ZV93cml0ZWJhY2tfcHJvcGVydGllcyhzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQo+ ID4gK3sKPiA+ICsJc3RydWN0IGRybV9wcm9wZXJ0eSAqcHJvcDsKPiA+ICsKPiA+ICsJaWYgKCFk ZXYtPm1vZGVfY29uZmlnLndyaXRlYmFja19mYl9pZF9wcm9wZXJ0eSkgewo+IAo+IFNvbWV3aGF0 IGFuIGFzaWRlLCBidXQgd2Ugc2hvdWxkIHByb2JhYmx5IGNvbWUgdXAgd2l0aCBtb3JlIGZvcm1h bCBydWxlcyBvbgo+IHdoZXJlIHRvIHN0aWNrIHByb3BlcnRpZXMuIFdlIGhhdmUgc29tZSBpbiBk cm1fY29ubmVjdG9yLCB3aGljaCBJIGludGVycHJldCBhcwo+ICJjb25uZWN0b3Itb25seSBwcm9w ZXJ0aWVzIiwgYnV0IHdlIGFsc28gaGF2ZSBhIGJ1bmNoIGluIG1vZGVfY29uZmlnLgo+IAo+IEZv ciBvcHRpb25hbCBwcm9wZXJ0aWVzIHdoaWNoIHdpbGwgZ2VuZXJhbGx5IG9ubHkgYXBwbHkgdG8g b25lIGNvbm5lY3RvciBvbiBhCj4gc3lzdGVtLCBJJ2QgYmUgaW5jbGluZWQgdG8gcHV0IGl0IGlu IGNvbm5lY3Rvci4gCgpJIGNhbiBtb3ZlIHRoZSB3cml0ZWJhY2stcmVsYXRlZCBwcm9wZXJ0aWVz IGludG8gdGhlIGNvbm5lY3RvciBpbiB0aGUKbmV4dCBzZXJpZXMuCgoKPiAKPiA+ICsJCXByb3Ag PSBkcm1fcHJvcGVydHlfY3JlYXRlX29iamVjdChkZXYsIERSTV9NT0RFX1BST1BfQVRPTUlDLAo+ ID4gKwkJCQkJCSAgIldSSVRFQkFDS19GQl9JRCIsCj4gPiArCQkJCQkJICBEUk1fTU9ERV9PQkpF Q1RfRkIpOwo+ID4gKwkJaWYgKCFwcm9wKQo+ID4gKwkJCXJldHVybiBmYWxzZTsKPiA+ICsJCWRl di0+bW9kZV9jb25maWcud3JpdGViYWNrX2ZiX2lkX3Byb3BlcnR5ID0gcHJvcDsKPiA+ICsJfQo+ ID4gKwo+ID4gKwlpZiAoIWRldi0+bW9kZV9jb25maWcud3JpdGViYWNrX3BpeGVsX2Zvcm1hdHNf cHJvcGVydHkpIHsKPiA+ICsJCXByb3AgPSBkcm1fcHJvcGVydHlfY3JlYXRlKGRldiwgRFJNX01P REVfUFJPUF9CTE9CIHwgRFJNX01PREVfUFJPUF9JTU1VVEFCTEUsCj4gPiArCQkJCQkgICAiV1JJ VEVCQUNLX1BJWEVMX0ZPUk1BVFMiLCAwKTsKPiAKPiBEb2VzIGl0IG1ha2Ugc2Vuc2UgdG8gZXhw b3NlIHRoZSBmb3JtYXRzIGlmIHUvcyBkb2Vzbid0IHN1cHBvcnQgYXRvbWljIGFuZCBjYW4ndAo+ IHVzZSB3cml0ZWJhY2s/IFBlcmhhcHMgdGhpcyBzaG91bGQgYWxzbyBiZSBEUk1fTU9ERV9QUk9Q X0FUT01JQy4KCkFncmVlLCBwcm9iYWJseSBhbGwgdGhlIHdyaXRlYmFjayBwcm9wZXJ0aWVzIHNo b3VsZCBvbmx5IGJlIGF2YWlsYWJsZSBpZgp0aGUgY2xpZW50IHNlbGVjdHMgRFJNX01PREVfUFJP UF9BVE9NSUMuCgo+IAo+IAo+ID4gKwkJaWYgKCFwcm9wKQo+ID4gKwkJCXJldHVybiBmYWxzZTsK PiA+ICsJCWRldi0+bW9kZV9jb25maWcud3JpdGViYWNrX3BpeGVsX2Zvcm1hdHNfcHJvcGVydHkg PSBwcm9wOwo+ID4gKwl9Cj4gPiArCj4gPiArCXJldHVybiB0cnVlOwo+ID4gK30KPiA+ICsKPiA+ ICtzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2Z1bmNzIGRybV93cml0ZWJhY2tfZW5j b2Rlcl9mdW5jcyA9IHsKPiA+ICsJLmRlc3Ryb3kgPSBkcm1fZW5jb2Rlcl9jbGVhbnVwLAo+ID4g K307Cj4gPiArCj4gPiArLyoqCj4gPiArICogZHJtX3dyaXRlYmFja19jb25uZWN0b3JfaW5pdCAt IEluaXRpYWxpemUgYSB3cml0ZWJhY2sgY29ubmVjdG9yIGFuZCBpdHMgcHJvcGVydGllcwo+ID4g KyAqIEBkZXY6IERSTSBkZXZpY2UKPiA+ICsgKiBAd2JfY29ubmVjdG9yOiBXcml0ZWJhY2sgY29u bmVjdG9yIHRvIGluaXRpYWxpemUKPiA+ICsgKiBAY29uX2Z1bmNzOiBDb25uZWN0b3IgZnVuY3Mg dnRhYmxlCj4gPiArICogQGVuY19oZWxwZXJfZnVuY3M6IEVuY29kZXIgaGVscGVyIGZ1bmNzIHZ0 YWJsZSB0byBiZSB1c2VkIGJ5IHRoZSBpbnRlcm5hbCBlbmNvZGVyCj4gPiArICogQGZvcm1hdHM6 IEFycmF5IG9mIHN1cHBvcnRlZCBwaXhlbCBmb3JtYXRzIGZvciB0aGUgd3JpdGViYWNrIGVuZ2lu ZQo+ID4gKyAqIEBuX2Zvcm1hdHM6IExlbmd0aCBvZiB0aGUgZm9ybWF0cyBhcnJheQo+ID4gKyAq Cj4gPiArICogVGhpcyBmdW5jdGlvbiBjcmVhdGVzIHRoZSB3cml0ZWJhY2stY29ubmVjdG9yLXNw ZWNpZmljIHByb3BlcnRpZXMgaWYgdGhleQo+ID4gKyAqIGhhdmUgbm90IGJlZW4gYWxyZWFkeSBj cmVhdGVkLCBpbml0aWFsaXplcyB0aGUgY29ubmVjdG9yIGFzCj4gPiArICogdHlwZSBEUk1fTU9E RV9DT05ORUNUT1JfV1JJVEVCQUNLLCBhbmQgY29ycmVjdGx5IGluaXRpYWxpemVzIHRoZSBwcm9w ZXJ0eQo+ID4gKyAqIHZhbHVlcy4gSXQgd2lsbCBhbHNvIGNyZWF0ZSBhbiBpbnRlcm5hbCBlbmNv ZGVyIGFzc29jaWF0ZWQgd2l0aCB0aGUKPiA+ICsgKiBkcm1fd3JpdGViYWNrX2Nvbm5lY3RvciBh bmQgc2V0IGl0IHRvIHVzZSB0aGUgQGVuY19oZWxwZXJfZnVuY3MgdnRhYmxlIGZvcgo+ID4gKyAq IHRoZSBlbmNvZGVyIGhlbHBlci4KPiA+ICsgKgo+ID4gKyAqIERyaXZlcnMgc2hvdWxkIGFsd2F5 cyB1c2UgdGhpcyBmdW5jdGlvbiBpbnN0ZWFkIG9mIGRybV9jb25uZWN0b3JfaW5pdCgpIHRvCj4g PiArICogc2V0IHVwIHdyaXRlYmFjayBjb25uZWN0b3JzLgo+ID4gKyAqCj4gPiArICogUmV0dXJu czogMCBvbiBzdWNjZXNzLCBvciBhIG5lZ2F0aXZlIGVycm9yIGNvZGUKPiA+ICsgKi8KPiA+ICtp bnQgZHJtX3dyaXRlYmFja19jb25uZWN0b3JfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAo+ ID4gKwkJCQkgc3RydWN0IGRybV93cml0ZWJhY2tfY29ubmVjdG9yICp3Yl9jb25uZWN0b3IsCj4g PiArCQkJCSBjb25zdCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9mdW5jcyAqY29uX2Z1bmNzLAo+ID4g KwkJCQkgY29uc3Qgc3RydWN0IGRybV9lbmNvZGVyX2hlbHBlcl9mdW5jcyAqZW5jX2hlbHBlcl9m dW5jcywKPiA+ICsJCQkJIGNvbnN0IHUzMiAqZm9ybWF0cywgaW50IG5fZm9ybWF0cykKPiA+ICt7 Cj4gPiArCWludCByZXQ7Cj4gPiArCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiAqYmxvYjsKPiA+ ICsJc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciA9ICZ3Yl9jb25uZWN0b3ItPmJhc2U7 Cj4gPiArCXN0cnVjdCBkcm1fbW9kZV9jb25maWcgKmNvbmZpZyA9ICZkZXYtPm1vZGVfY29uZmln Owo+ID4gKwo+ID4gKwlpZiAoIWNyZWF0ZV93cml0ZWJhY2tfcHJvcGVydGllcyhkZXYpKQo+ID4g KwkJcmV0dXJuIC1FSU5WQUw7Cj4gPiArCj4gPiArCWJsb2IgPSBkcm1fcHJvcGVydHlfY3JlYXRl X2Jsb2IoZGV2LCBuX2Zvcm1hdHMgKiBzaXplb2YoKmZvcm1hdHMpLAo+ID4gKwkJCQkJZm9ybWF0 cyk7Cj4gPiArCWlmIChJU19FUlIoYmxvYikpCj4gPiArCQlyZXR1cm4gUFRSX0VSUihibG9iKTsK PiA+ICsKPiA+ICsJZHJtX2VuY29kZXJfaGVscGVyX2FkZCgmd2JfY29ubmVjdG9yLT5lbmNvZGVy LCBlbmNfaGVscGVyX2Z1bmNzKTsKPiA+ICsJcmV0ID0gZHJtX2VuY29kZXJfaW5pdChkZXYsICZ3 Yl9jb25uZWN0b3ItPmVuY29kZXIsCj4gPiArCQkJICAgICAgICZkcm1fd3JpdGViYWNrX2VuY29k ZXJfZnVuY3MsCj4gPiArCQkJICAgICAgIERSTV9NT0RFX0VOQ09ERVJfVklSVFVBTCwgTlVMTCk7 Cj4gPiArCWlmIChyZXQpCj4gPiArCQlnb3RvIGZhaWw7Cj4gPiArCj4gPiArCWNvbm5lY3Rvci0+ aW50ZXJsYWNlX2FsbG93ZWQgPSAwOwo+ID4gKwo+ID4gKwlyZXQgPSBkcm1fY29ubmVjdG9yX2lu aXQoZGV2LCBjb25uZWN0b3IsIGNvbl9mdW5jcywKPiA+ICsJCQkJIERSTV9NT0RFX0NPTk5FQ1RP Ul9XUklURUJBQ0spOwo+ID4gKwlpZiAocmV0KQo+ID4gKwkJZ290byBjb25uZWN0b3JfZmFpbDsK PiA+ICsKPiA+ICsJcmV0ID0gZHJtX21vZGVfY29ubmVjdG9yX2F0dGFjaF9lbmNvZGVyKGNvbm5l Y3RvciwKPiA+ICsJCQkJCQkmd2JfY29ubmVjdG9yLT5lbmNvZGVyKTsKPiA+ICsJaWYgKHJldCkK PiA+ICsJCWdvdG8gYXR0YWNoX2ZhaWw7Cj4gPiArCj4gPiArCUlOSVRfTElTVF9IRUFEKCZ3Yl9j b25uZWN0b3ItPmpvYl9xdWV1ZSk7Cj4gPiArCXNwaW5fbG9ja19pbml0KCZ3Yl9jb25uZWN0b3It PmpvYl9sb2NrKTsKPiA+ICsKPiA+ICsJZHJtX29iamVjdF9hdHRhY2hfcHJvcGVydHkoJmNvbm5l Y3Rvci0+YmFzZSwKPiA+ICsJCQkJICAgY29uZmlnLT53cml0ZWJhY2tfZmJfaWRfcHJvcGVydHks IDApOwo+ID4gKwo+ID4gKwlkcm1fb2JqZWN0X2F0dGFjaF9wcm9wZXJ0eSgmY29ubmVjdG9yLT5i YXNlLAo+ID4gKwkJCQkgICBjb25maWctPndyaXRlYmFja19waXhlbF9mb3JtYXRzX3Byb3BlcnR5 LAo+ID4gKwkJCQkgICBibG9iLT5iYXNlLmlkKTsKPiA+ICsJd2JfY29ubmVjdG9yLT5waXhlbF9m b3JtYXRzX2Jsb2JfcHRyID0gYmxvYjsKPiA+ICsKPiA+ICsJcmV0dXJuIDA7Cj4gPiArCj4gPiAr YXR0YWNoX2ZhaWw6Cj4gPiArCWRybV9jb25uZWN0b3JfY2xlYW51cChjb25uZWN0b3IpOwo+ID4g K2Nvbm5lY3Rvcl9mYWlsOgo+ID4gKwlkcm1fZW5jb2Rlcl9jbGVhbnVwKCZ3Yl9jb25uZWN0b3It PmVuY29kZXIpOwo+ID4gK2ZhaWw6Cj4gPiArCWRybV9wcm9wZXJ0eV91bnJlZmVyZW5jZV9ibG9i KGJsb2IpOwo+ID4gKwlyZXR1cm4gcmV0Owo+ID4gK30KPiA+ICtFWFBPUlRfU1lNQk9MKGRybV93 cml0ZWJhY2tfY29ubmVjdG9yX2luaXQpOwo+ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGRybV93cml0 ZWJhY2tfcXVldWVfam9iIC0gUXVldWUgYSB3cml0ZWJhY2sgam9iIGZvciBsYXRlciBzaWduYWxs aW5nCj4gPiArICogQHdiX2Nvbm5lY3RvcjogVGhlIHdyaXRlYmFjayBjb25uZWN0b3IgdG8gcXVl dWUgYSBqb2Igb24KPiA+ICsgKiBAam9iOiBUaGUgam9iIHRvIHF1ZXVlCj4gPiArICoKPiA+ICsg KiBUaGlzIGZ1bmN0aW9uIGFkZHMgYSBqb2IgdG8gdGhlIGpvYl9xdWV1ZSBmb3IgYSB3cml0ZWJh Y2sgY29ubmVjdG9yLiBJdAo+ID4gKyAqIHNob3VsZCBiZSBjb25zaWRlcmVkIHRvIHRha2Ugb3du ZXJzaGlwIG9mIHRoZSB3cml0ZWJhY2sgam9iLCBhbmQgc28gYW55IG90aGVyCj4gPiArICogcmVm ZXJlbmNlcyB0byB0aGUgam9iIG11c3QgYmUgY2xlYXJlZCBhZnRlciBjYWxsaW5nIHRoaXMgZnVu Y3Rpb24uCj4gPiArICoKPiA+ICsgKiBEcml2ZXJzIG11c3QgZW5zdXJlIHRoYXQgZm9yIGEgZ2l2 ZW4gd3JpdGViYWNrIGNvbm5lY3Rvciwgam9icyBhcmUgcXVldWVkIGluCj4gPiArICogZXhhY3Rs eSB0aGUgc2FtZSBvcmRlciBhcyB0aGV5IHdpbGwgYmUgY29tcGxldGVkIGJ5IHRoZSBoYXJkd2Fy ZSAoYW5kCj4gPiArICogc2lnbmFsZWQgdmlhIGRybV93cml0ZWJhY2tfc2lnbmFsX2NvbXBsZXRp b24pLgo+ID4gKyAqCj4gPiArICogRm9yIGV2ZXJ5IGNhbGwgdG8gZHJtX3dyaXRlYmFja19xdWV1 ZV9qb2IoKSB0aGVyZSBtdXN0IGJlIGV4YWN0bHkgb25lIGNhbGwgdG8KPiA+ICsgKiBkcm1fd3Jp dGViYWNrX3NpZ25hbF9jb21wbGV0aW9uKCkKPiA+ICsgKgo+ID4gKyAqIFNlZSBhbHNvOiBkcm1f d3JpdGViYWNrX3NpZ25hbF9jb21wbGV0aW9uKCkKPiA+ICsgKi8KPiA+ICt2b2lkIGRybV93cml0 ZWJhY2tfcXVldWVfam9iKHN0cnVjdCBkcm1fd3JpdGViYWNrX2Nvbm5lY3RvciAqd2JfY29ubmVj dG9yLAo+ID4gKwkJCSAgICAgc3RydWN0IGRybV93cml0ZWJhY2tfam9iICpqb2IpCj4gPiArewo+ ID4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ID4gKwo+ID4gKwlzcGluX2xvY2tfaXJxc2F2ZSgm d2JfY29ubmVjdG9yLT5qb2JfbG9jaywgZmxhZ3MpOwo+ID4gKwlsaXN0X2FkZF90YWlsKCZqb2It Pmxpc3RfZW50cnksICZ3Yl9jb25uZWN0b3ItPmpvYl9xdWV1ZSk7Cj4gPiArCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJndiX2Nvbm5lY3Rvci0+am9iX2xvY2ssIGZsYWdzKTsKPiA+ICt9Cj4gPiAr RVhQT1JUX1NZTUJPTChkcm1fd3JpdGViYWNrX3F1ZXVlX2pvYik7Cj4gPiArCj4gPiArLyoqCj4g PiArICogZHJtX3dyaXRlYmFja19jbGVhbnVwX2pvYiAtIENsZWFudXAgYW5kIGZyZWUgYSB3cml0 ZWJhY2sgam9iCj4gPiArICogQGpvYjogVGhlIHdyaXRlYmFjayBqb2IgdG8gZnJlZQo+ID4gKyAq Cj4gPiArICogRHJvcHMgYW55IHJlZmVyZW5jZXMgaGVsZCBieSB0aGUgd3JpdGViYWNrIGpvYiwg YW5kIGZyZWVzIHRoZSBzdHJ1Y3R1cmUuCj4gPiArICovCj4gPiArdm9pZCBkcm1fd3JpdGViYWNr X2NsZWFudXBfam9iKHN0cnVjdCBkcm1fd3JpdGViYWNrX2pvYiAqam9iKQo+ID4gK3sKPiA+ICsJ aWYgKCFqb2IpCj4gPiArCQlyZXR1cm47Cj4gPiArCj4gPiArCWlmIChqb2ItPmZiKQo+ID4gKwkJ ZHJtX2ZyYW1lYnVmZmVyX3VucmVmZXJlbmNlKGpvYi0+ZmIpOwo+ID4gKwlrZnJlZShqb2IpOwo+ ID4gK30KPiA+ICtFWFBPUlRfU1lNQk9MKGRybV93cml0ZWJhY2tfY2xlYW51cF9qb2IpOwo+ID4g Kwo+ID4gKy8qCj4gPiArICogQGNsZWFudXBfd29yazogZGVmZXJyZWQgY2xlYW51cCBvZiBhIHdy aXRlYmFjayBqb2IKPiA+ICsgKgo+ID4gKyAqIFRoZSBqb2IgY2Fubm90IGJlIGNsZWFuZWQgdXAg ZGlyZWN0bHkgaW4gZHJtX3dyaXRlYmFja19zaWduYWxfY29tcGxldGlvbiwKPiA+ICsgKiBiZWNh dXNlIGl0IG1heSBiZSBjYWxsZWQgaW4gaW50ZXJydXB0IGNvbnRleHQuIERyb3BwaW5nIHRoZSBm cmFtZWJ1ZmZlcgo+ID4gKyAqIHJlZmVyZW5jZSBjYW4gc2xlZXAsIGFuZCBzbyB0aGUgY2xlYW51 cCBpcyBkZWZlcnJlZCB0byBhIHdvcmtxdWV1ZS4KPiA+ICsgKi8KPiA+ICtzdGF0aWMgdm9pZCBj bGVhbnVwX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQo+ID4gK3sKPiA+ICsJc3RydWN0 IGRybV93cml0ZWJhY2tfam9iICpqb2IgPSBjb250YWluZXJfb2Yod29yaywKPiA+ICsJCQkJCQkg ICAgIHN0cnVjdCBkcm1fd3JpdGViYWNrX2pvYiwKPiA+ICsJCQkJCQkgICAgIGNsZWFudXBfd29y ayk7Cj4gPiArCWRybV93cml0ZWJhY2tfY2xlYW51cF9qb2Ioam9iKTsKPiAKPiBUSUwgdGhhdCB5 b3UgY2FuIGZyZWUgd29yayB3aGlsZSB1c2luZyBpdC4KCldhcyBub3QgYXdhcmUgdGhhdCBpdCBp cyBwb3NzaWJsZS4gSSBjYW4gdXBkYXRlIHRoZSBjb2RlIHRvIGRvIGl0LgoKVGhhbmtzIGZvciB0 aGUgZmVlZGJhY2sgYW5kIHJldmlldyEKCkJlc3QgcmVnYXJkcywKTGl2aXUKCj4gCj4gPiArfQo+ ID4gKwo+ID4gKy8qKgo+ID4gKyAqIGRybV93cml0ZWJhY2tfc2lnbmFsX2NvbXBsZXRpb24gLSBT aWduYWwgdGhlIGNvbXBsZXRpb24gb2YgYSB3cml0ZWJhY2sgam9iCj4gPiArICogQHdiX2Nvbm5l Y3RvcjogVGhlIHdyaXRlYmFjayBjb25uZWN0b3Igd2hvc2Ugam9iIGlzIGNvbXBsZXRlCj4gPiAr ICoKPiA+ICsgKiBEcml2ZXJzIHNob3VsZCBjYWxsIHRoaXMgdG8gc2lnbmFsIHRoZSBjb21wbGV0 aW9uIG9mIGEgcHJldmlvdXNseSBxdWV1ZWQKPiA+ICsgKiB3cml0ZWJhY2sgam9iLiBJdCBzaG91 bGQgYmUgY2FsbGVkIGFzIHNvb24gYXMgcG9zc2libGUgYWZ0ZXIgdGhlIGhhcmR3YXJlCj4gPiAr ICogaGFzIGZpbmlzaGVkIHdyaXRpbmcsIGFuZCBtYXkgYmUgY2FsbGVkIGZyb20gaW50ZXJydXB0 IGNvbnRleHQuCj4gPiArICogSXQgaXMgdGhlIGRyaXZlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGVu c3VyZSB0aGF0IGZvciBhIGdpdmVuIGNvbm5lY3RvciwgdGhlCj4gPiArICogaGFyZHdhcmUgY29t cGxldGVzIHdyaXRlYmFjayBqb2JzIGluIHRoZSBzYW1lIG9yZGVyIGFzIHRoZXkgYXJlIHF1ZXVl ZC4KPiA+ICsgKgo+ID4gKyAqIFVubGVzcyB0aGUgZHJpdmVyIGlzIGhvbGRpbmcgaXRzIG93biBy ZWZlcmVuY2UgdG8gdGhlIGZyYW1lYnVmZmVyLCBpdCBtdXN0Cj4gPiArICogbm90IGJlIGFjY2Vz c2VkIGFmdGVyIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4KPiA+ICsgKgo+ID4gKyAqIFNlZSBhbHNv OiBkcm1fd3JpdGViYWNrX3F1ZXVlX2pvYigpCj4gPiArICovCj4gPiArdm9pZAo+ID4gK2RybV93 cml0ZWJhY2tfc2lnbmFsX2NvbXBsZXRpb24oc3RydWN0IGRybV93cml0ZWJhY2tfY29ubmVjdG9y ICp3Yl9jb25uZWN0b3IpCj4gPiArewo+ID4gKwl1bnNpZ25lZCBsb25nIGZsYWdzOwo+ID4gKwlz dHJ1Y3QgZHJtX3dyaXRlYmFja19qb2IgKmpvYjsKPiA+ICsKPiA+ICsJc3Bpbl9sb2NrX2lycXNh dmUoJndiX2Nvbm5lY3Rvci0+am9iX2xvY2ssIGZsYWdzKTsKPiA+ICsJam9iID0gbGlzdF9maXJz dF9lbnRyeV9vcl9udWxsKCZ3Yl9jb25uZWN0b3ItPmpvYl9xdWV1ZSwKPiA+ICsJCQkJICAgICAg IHN0cnVjdCBkcm1fd3JpdGViYWNrX2pvYiwKPiA+ICsJCQkJICAgICAgIGxpc3RfZW50cnkpOwo+ ID4gKwlpZiAoam9iKQo+ID4gKwkJbGlzdF9kZWwoJmpvYi0+bGlzdF9lbnRyeSk7Cj4gPiArCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJndiX2Nvbm5lY3Rvci0+am9iX2xvY2ssIGZsYWdzKTsKPiA+ ICsKPiA+ICsJaWYgKFdBUk5fT04oIWpvYikpCj4gPiArCQlyZXR1cm47Cj4gPiArCj4gPiArCUlO SVRfV09SSygmam9iLT5jbGVhbnVwX3dvcmssIGNsZWFudXBfd29yayk7Cj4gPiArCXF1ZXVlX3dv cmsoc3lzdGVtX2xvbmdfd3EsICZqb2ItPmNsZWFudXBfd29yayk7Cj4gPiArfQo+ID4gK0VYUE9S VF9TWU1CT0woZHJtX3dyaXRlYmFja19zaWduYWxfY29tcGxldGlvbik7Cj4gPiBkaWZmIC0tZ2l0 IGEvaW5jbHVkZS9kcm0vZHJtX2F0b21pYy5oIGIvaW5jbHVkZS9kcm0vZHJtX2F0b21pYy5oCj4g PiBpbmRleCBjZjEzODQyYTZkYmQuLmQ3YjAyNjNjYzVjZiAxMDA2NDQKPiA+IC0tLSBhL2luY2x1 ZGUvZHJtL2RybV9hdG9taWMuaAo+ID4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2F0b21pYy5oCj4g PiBAQCAtNTk0LDYgKzU5NCw5IEBAIHZvaWQgZHJtX2F0b21pY19zZXRfZmVuY2VfZm9yX3BsYW5l KHN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgKnBsYW5lX3N0YXRlLAo+ID4gIGludCBfX211c3RfY2hl Y2sKPiA+ICBkcm1fYXRvbWljX3NldF9jcnRjX2Zvcl9jb25uZWN0b3Ioc3RydWN0IGRybV9jb25u ZWN0b3Jfc3RhdGUgKmNvbm5fc3RhdGUsCj4gPiAgCQkJCSAgc3RydWN0IGRybV9jcnRjICpjcnRj KTsKPiA+ICtpbnQgZHJtX2F0b21pY19zZXRfd3JpdGViYWNrX2ZiX2Zvcl9jb25uZWN0b3IoCj4g PiArCQlzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0ZSAqY29ubl9zdGF0ZSwKPiA+ICsJCXN0cnVj dCBkcm1fZnJhbWVidWZmZXIgKmZiKTsKPiA+ICBpbnQgX19tdXN0X2NoZWNrCj4gPiAgZHJtX2F0 b21pY19hZGRfYWZmZWN0ZWRfY29ubmVjdG9ycyhzdHJ1Y3QgZHJtX2F0b21pY19zdGF0ZSAqc3Rh dGUsCj4gPiAgCQkJCSAgIHN0cnVjdCBkcm1fY3J0YyAqY3J0Yyk7Cj4gPiBkaWZmIC0tZ2l0IGEv aW5jbHVkZS9kcm0vZHJtX2Nvbm5lY3Rvci5oIGIvaW5jbHVkZS9kcm0vZHJtX2Nvbm5lY3Rvci5o Cj4gPiBpbmRleCA3NThhMTc2ZTdiNTcuLjg3MDFlYmNjNjhiMyAxMDA2NDQKPiA+IC0tLSBhL2lu Y2x1ZGUvZHJtL2RybV9jb25uZWN0b3IuaAo+ID4gKysrIGIvaW5jbHVkZS9kcm0vZHJtX2Nvbm5l Y3Rvci5oCj4gPiBAQCAtNDI1LDYgKzQyNSwxOSBAQCBzdHJ1Y3QgZHJtX2Nvbm5lY3Rvcl9zdGF0 ZSB7Cj4gPiAgCSAqIHByb3RlY3Rpb24uIFRoaXMgaXMgbW9zdCBjb21tb25seSB1c2VkIGZvciBI RENQLgo+ID4gIAkgKi8KPiA+ICAJdW5zaWduZWQgaW50IGNvbnRlbnRfcHJvdGVjdGlvbjsKPiA+ ICsKPiA+ICsJLyoqCj4gPiArCSAqIEB3cml0ZWJhY2tfam9iOiBXcml0ZWJhY2sgam9iIGZvciB3 cml0ZWJhY2sgY29ubmVjdG9ycwo+ID4gKwkgKgo+ID4gKwkgKiBIb2xkcyB0aGUgZnJhbWVidWZm ZXIgZm9yIGEgd3JpdGViYWNrIGNvbm5lY3Rvci4gQXMgdGhlIHdyaXRlYmFjawo+ID4gKwkgKiBj b21wbGV0aW9uIG1heSBiZSBhc3luY2hyb25vdXMgdG8gdGhlIG5vcm1hbCBjb21taXQgY3ljbGUs IHRoZQo+ID4gKwkgKiB3cml0ZWJhY2sgam9iIGxpZmV0aW1lIGlzIG1hbmFnZWQgc2VwYXJhdGVs eSBmcm9tIHRoZSBub3JtYWwgYXRvbWljCj4gPiArCSAqIHN0YXRlIGJ5IHRoaXMgb2JqZWN0Lgo+ ID4gKwkgKgo+ID4gKwkgKiBTZWUgYWxzbzogZHJtX3dyaXRlYmFja19xdWV1ZV9qb2IoKSBhbmQK PiA+ICsJICogZHJtX3dyaXRlYmFja19zaWduYWxfY29tcGxldGlvbigpCj4gPiArCSAqLwo+ID4g KwlzdHJ1Y3QgZHJtX3dyaXRlYmFja19qb2IgKndyaXRlYmFja19qb2I7Cj4gPiAgfTsKPiA+ICAK PiA+ICAvKioKPiA+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9kcm1fbW9kZV9jb25maWcuaCBi L2luY2x1ZGUvZHJtL2RybV9tb2RlX2NvbmZpZy5oCj4gPiBpbmRleCA3NTY5ZjIyZmZlZjYuLmMw MTJlMTE0OGVjMCAxMDA2NDQKPiA+IC0tLSBhL2luY2x1ZGUvZHJtL2RybV9tb2RlX2NvbmZpZy5o Cj4gPiArKysgYi9pbmNsdWRlL2RybS9kcm1fbW9kZV9jb25maWcuaAo+ID4gQEAgLTc3OSw2ICs3 NzksMjAgQEAgc3RydWN0IGRybV9tb2RlX2NvbmZpZyB7Cj4gPiAgCSAqLwo+ID4gIAlzdHJ1Y3Qg ZHJtX3Byb3BlcnR5ICpwYW5lbF9vcmllbnRhdGlvbl9wcm9wZXJ0eTsKPiA+ICAKPiA+ICsJLyoq Cj4gPiArCSAqIEB3cml0ZWJhY2tfZmJfaWRfcHJvcGVydHk6IFByb3BlcnR5IGZvciB3cml0ZWJh Y2sgY29ubmVjdG9ycywgc3RvcmluZwo+ID4gKwkgKiB0aGUgSUQgb2YgdGhlIG91dHB1dCBmcmFt ZWJ1ZmZlci4KPiA+ICsJICogU2VlIGFsc286IGRybV93cml0ZWJhY2tfY29ubmVjdG9yX2luaXQo KQo+ID4gKwkgKi8KPiA+ICsJc3RydWN0IGRybV9wcm9wZXJ0eSAqd3JpdGViYWNrX2ZiX2lkX3By b3BlcnR5Owo+ID4gKwkvKioKPiA+ICsJICogQHdyaXRlYmFja19waXhlbF9mb3JtYXRzX3Byb3Bl cnR5OiBQcm9wZXJ0eSBmb3Igd3JpdGViYWNrIGNvbm5lY3RvcnMsCj4gPiArCSAqIHN0b3Jpbmcg YW4gYXJyYXkgb2YgdGhlIHN1cHBvcnRlZCBwaXhlbCBmb3JtYXRzIGZvciB0aGUgd3JpdGViYWNr Cj4gPiArCSAqIGVuZ2luZSAocmVhZC1vbmx5KS4KPiA+ICsJICogU2VlIGFsc286IGRybV93cml0 ZWJhY2tfY29ubmVjdG9yX2luaXQoKQo+ID4gKwkgKi8KPiA+ICsJc3RydWN0IGRybV9wcm9wZXJ0 eSAqd3JpdGViYWNrX3BpeGVsX2Zvcm1hdHNfcHJvcGVydHk7Cj4gPiArCj4gPiAgCS8qIGR1bWIg aW9jdGwgcGFyYW1ldGVycyAqLwo+ID4gIAl1aW50MzJfdCBwcmVmZXJyZWRfZGVwdGgsIHByZWZl cl9zaGFkb3c7Cj4gPiAgCj4gPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX21vZGVzZXRf aGVscGVyX3Z0YWJsZXMuaCBiL2luY2x1ZGUvZHJtL2RybV9tb2Rlc2V0X2hlbHBlcl92dGFibGVz LmgKPiA+IGluZGV4IDNlNzZjYTgwNWIwZi4uOTdkM2E4MTBiYzg1IDEwMDY0NAo+ID4gLS0tIGEv aW5jbHVkZS9kcm0vZHJtX21vZGVzZXRfaGVscGVyX3Z0YWJsZXMuaAo+ID4gKysrIGIvaW5jbHVk ZS9kcm0vZHJtX21vZGVzZXRfaGVscGVyX3Z0YWJsZXMuaAo+ID4gQEAgLTk3NCw2ICs5NzQsMTcg QEAgc3RydWN0IGRybV9jb25uZWN0b3JfaGVscGVyX2Z1bmNzIHsKPiA+ICAJICovCj4gPiAgCWlu dCAoKmF0b21pY19jaGVjaykoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKPiA+ICAJ CQkgICAgc3RydWN0IGRybV9jb25uZWN0b3Jfc3RhdGUgKnN0YXRlKTsKPiA+ICsKPiA+ICsJLyoq Cj4gPiArCSAqIEBhdG9taWNfY29tbWl0Ogo+ID4gKwkgKgo+ID4gKwkgKiBGb3Igd3JpdGUtYmFj ayBjb25uZWN0b3JzLCB0aGlzIGlzIHRoZSBwb2ludCB0byBjb21taXQgdGhlIHdyaXRlLQo+ID4g KwkgKiBiYWNrIGpvYiB0byBody4KPiA+ICsJICoKPiA+ICsJICogVGhpcyBjYWxsYmFjayBpcyB1 c2VkIGJ5IHRoZSBhdG9taWMgbW9kZXNldCBoZWxwZXJzLgo+ID4gKwkgKi8KPiA+ICsJdm9pZCAo KmF0b21pY19jb21taXQpKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCj4gPiArCQkJ ICAgICAgc3RydWN0IGRybV93cml0ZWJhY2tfam9iICp3cml0ZWJhY2tfam9iKTsKPiA+ICB9Owo+ ID4gIAo+ID4gIC8qKgo+ID4gZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV93cml0ZWJhY2su aCBiL2luY2x1ZGUvZHJtL2RybV93cml0ZWJhY2suaAo+ID4gbmV3IGZpbGUgbW9kZSAxMDA2NDQK PiA+IGluZGV4IDAwMDAwMDAwMDAwMC4uMGJiOTVmZDQ5MDdkCj4gPiAtLS0gL2Rldi9udWxsCj4g PiArKysgYi9pbmNsdWRlL2RybS9kcm1fd3JpdGViYWNrLmgKPiA+IEBAIC0wLDAgKzEsODkgQEAK PiA+ICsvKgo+ID4gKyAqIChDKSBDT1BZUklHSFQgMjAxNiBBUk0gTGltaXRlZC4gQWxsIHJpZ2h0 cyByZXNlcnZlZC4KPiA+ICsgKiBBdXRob3I6IEJyaWFuIFN0YXJrZXkgPGJyaWFuLnN0YXJrZXlA YXJtLmNvbT4KPiA+ICsgKgo+ID4gKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlIGFu ZCBpcyBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQo+ID4gKyAqIEdOVSBH ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUKPiA+ICsgKiBGb3VuZGF0aW9uLCBhbmQgYW55IHVzZSBieSB5b3Ugb2YgdGhpcyBw cm9ncmFtIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zCj4gPiArICogb2Ygc3VjaCBHTlUgbGljZW5j ZS4KPiA+ICsgKi8KPiA+ICsKPiA+ICsjaWZuZGVmIF9fRFJNX1dSSVRFQkFDS19IX18KPiA+ICsj ZGVmaW5lIF9fRFJNX1dSSVRFQkFDS19IX18KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9jb25uZWN0 b3IuaD4KPiA+ICsjaW5jbHVkZSA8ZHJtL2RybV9lbmNvZGVyLmg+Cj4gPiArI2luY2x1ZGUgPGxp bnV4L3dvcmtxdWV1ZS5oPgo+ID4gKwo+ID4gK3N0cnVjdCBkcm1fd3JpdGViYWNrX2Nvbm5lY3Rv ciB7Cj4gPiArCXN0cnVjdCBkcm1fY29ubmVjdG9yIGJhc2U7Cj4gPiArCj4gPiArCS8qKgo+ID4g KwkgKiBAZW5jb2RlcjogSW50ZXJuYWwgZW5jb2RlciB1c2VkIGJ5IHRoZSBjb25uZWN0b3IgdG8g ZnVsZmlsbAo+ID4gKwkgKiB0aGUgRFJNIGZyYW1ld29yayByZXF1aXJlbWVudHMuIFRoZSB1c2Vy cyBvZiB0aGUKPiA+ICsJICogQGRybV93cml0ZWJhY2tfY29ubmVjdG9yIGNvbnRyb2wgdGhlIGJl aGF2aW91ciBvZiB0aGUgQGVuY29kZXIKPiA+ICsJICogYnkgcGFzc2luZyB0aGUgQGVuY19mdW5j cyBwYXJhbWV0ZXIgdG8gZHJtX3dyaXRlYmFja19jb25uZWN0b3JfaW5pdCgpCj4gPiArCSAqIGZ1 bmN0aW9uLgo+ID4gKwkgKi8KPiA+ICsJc3RydWN0IGRybV9lbmNvZGVyIGVuY29kZXI7Cj4gPiAr Cj4gPiArCS8qKgo+ID4gKwkgKiBAcGl4ZWxfZm9ybWF0c19ibG9iX3B0cjoKPiA+ICsJICoKPiA+ ICsJICogRFJNIGJsb2IgcHJvcGVydHkgZGF0YSBmb3IgdGhlIHBpeGVsIGZvcm1hdHMgbGlzdCBv biB3cml0ZWJhY2sKPiA+ICsJICogY29ubmVjdG9ycwo+ID4gKwkgKiBTZWUgYWxzbyBkcm1fd3Jp dGViYWNrX2Nvbm5lY3Rvcl9pbml0KCkKPiA+ICsJICovCj4gPiArCXN0cnVjdCBkcm1fcHJvcGVy dHlfYmxvYiAqcGl4ZWxfZm9ybWF0c19ibG9iX3B0cjsKPiA+ICsKPiA+ICsJLyoqIEBqb2JfbG9j azogUHJvdGVjdHMgam9iX3F1ZXVlICovCj4gPiArCXNwaW5sb2NrX3Qgam9iX2xvY2s7Cj4gPiAr Cj4gPiArCS8qKgo+ID4gKwkgKiBAam9iX3F1ZXVlOgo+ID4gKwkgKgo+ID4gKwkgKiBIb2xkcyBh IGxpc3Qgb2YgYSBjb25uZWN0b3IncyB3cml0ZWJhY2sgam9iczsgdGhlIGxhc3QgaXRlbSBpcyB0 aGUKPiA+ICsJICogbW9zdCByZWNlbnQuIFRoZSBmaXJzdCBpdGVtIG1heSBiZSBlaXRoZXIgd2Fp dGluZyBmb3IgdGhlIGhhcmR3YXJlCj4gPiArCSAqIHRvIGJlZ2luIHdyaXRpbmcsIG9yIGN1cnJl bnRseSBiZWluZyB3cml0dGVuLgo+ID4gKwkgKgo+ID4gKwkgKiBTZWUgYWxzbzogZHJtX3dyaXRl YmFja19xdWV1ZV9qb2IoKSBhbmQKPiA+ICsJICogZHJtX3dyaXRlYmFja19zaWduYWxfY29tcGxl dGlvbigpCj4gPiArCSAqLwo+ID4gKwlzdHJ1Y3QgbGlzdF9oZWFkIGpvYl9xdWV1ZTsKPiA+ICt9 Owo+ID4gKyNkZWZpbmUgdG9fd2JfY29ubmVjdG9yKHgpIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3Qg ZHJtX3dyaXRlYmFja19jb25uZWN0b3IsIGJhc2UpCj4gPiArCj4gPiArc3RydWN0IGRybV93cml0 ZWJhY2tfam9iIHsKPiA+ICsJLyoqCj4gPiArCSAqIEBjbGVhbnVwX3dvcms6Cj4gPiArCSAqCj4g PiArCSAqIFVzZWQgdG8gYWxsb3cgZHJtX3dyaXRlYmFja19zaWduYWxfY29tcGxldGlvbiB0byBk ZWZlciBkcm9wcGluZyB0aGUKPiA+ICsJICogZnJhbWVidWZmZXIgcmVmZXJlbmNlIHRvIGEgd29y a3F1ZXVlLgo+ID4gKwkgKi8KPiA+ICsJc3RydWN0IHdvcmtfc3RydWN0IGNsZWFudXBfd29yazsK PiA+ICsJLyoqCj4gPiArCSAqIEBsaXN0X2VudHJ5Ogo+ID4gKwkgKgo+ID4gKwkgKiBMaXN0IGl0 ZW0gZm9yIHRoZSBjb25uZWN0b3IncyBAam9iX3F1ZXVlCj4gPiArCSAqLwo+ID4gKwlzdHJ1Y3Qg bGlzdF9oZWFkIGxpc3RfZW50cnk7Cj4gPiArCS8qKgo+ID4gKwkgKiBAZmI6Cj4gPiArCSAqCj4g PiArCSAqIEZyYW1lYnVmZmVyIHRvIGJlIHdyaXR0ZW4gdG8gYnkgdGhlIHdyaXRlYmFjayBjb25u ZWN0b3IuIERvIG5vdCBzZXQKPiA+ICsJICogZGlyZWN0bHksIHVzZSBkcm1fYXRvbWljX3NldF93 cml0ZWJhY2tfZmJfZm9yX2Nvbm5lY3RvcigpCj4gPiArCSAqLwo+ID4gKwlzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyICpmYjsKPiA+ICt9Owo+ID4gKwo+ID4gK2ludCBkcm1fd3JpdGViYWNrX2Nvbm5l Y3Rvcl9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCj4gPiArCQkJCSBzdHJ1Y3QgZHJtX3dy aXRlYmFja19jb25uZWN0b3IgKndiX2Nvbm5lY3RvciwKPiA+ICsJCQkJIGNvbnN0IHN0cnVjdCBk cm1fY29ubmVjdG9yX2Z1bmNzICpjb25fZnVuY3MsCj4gPiArCQkJCSBjb25zdCBzdHJ1Y3QgZHJt X2VuY29kZXJfaGVscGVyX2Z1bmNzICplbmNfaGVscGVyX2Z1bmNzLAo+ID4gKwkJCQkgY29uc3Qg dTMyICpmb3JtYXRzLCBpbnQgbl9mb3JtYXRzKTsKPiA+ICsKPiA+ICt2b2lkIGRybV93cml0ZWJh Y2tfcXVldWVfam9iKHN0cnVjdCBkcm1fd3JpdGViYWNrX2Nvbm5lY3RvciAqd2JfY29ubmVjdG9y LAo+ID4gKwkJCSAgICAgc3RydWN0IGRybV93cml0ZWJhY2tfam9iICpqb2IpOwo+ID4gKwo+ID4g K3ZvaWQgZHJtX3dyaXRlYmFja19jbGVhbnVwX2pvYihzdHJ1Y3QgZHJtX3dyaXRlYmFja19qb2Ig KmpvYik7Cj4gPiArdm9pZCBkcm1fd3JpdGViYWNrX3NpZ25hbF9jb21wbGV0aW9uKHN0cnVjdCBk cm1fd3JpdGViYWNrX2Nvbm5lY3RvciAqd2JfY29ubmVjdG9yKTsKPiA+ICsjZW5kaWYKPiA+IGRp ZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvZHJtL2RybV9tb2RlLmggYi9pbmNsdWRlL3VhcGkvZHJt L2RybV9tb2RlLmgKPiA+IGluZGV4IDJjNTc1Nzk0ZmI1Mi4uN2I0N2UxODRlOTVlIDEwMDY0NAo+ ID4gLS0tIGEvaW5jbHVkZS91YXBpL2RybS9kcm1fbW9kZS5oCj4gPiArKysgYi9pbmNsdWRlL3Vh cGkvZHJtL2RybV9tb2RlLmgKPiA+IEBAIC0zMzgsNiArMzM4LDcgQEAgZW51bSBkcm1fbW9kZV9z dWJjb25uZWN0b3Igewo+ID4gICNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX1ZJUlRVQUwgICAg ICAxNQo+ID4gICNkZWZpbmUgRFJNX01PREVfQ09OTkVDVE9SX0RTSQkJMTYKPiA+ICAjZGVmaW5l IERSTV9NT0RFX0NPTk5FQ1RPUl9EUEkJCTE3Cj4gPiArI2RlZmluZSBEUk1fTU9ERV9DT05ORUNU T1JfV1JJVEVCQUNLCTE4Cj4gPiAgCj4gPiAgc3RydWN0IGRybV9tb2RlX2dldF9jb25uZWN0b3Ig ewo+ID4gIAo+ID4gLS0gCj4gPiAyLjE0LjMKPiA+IAo+IAo+IC0tIAo+IFNlYW4gUGF1bCwgU29m dHdhcmUgRW5naW5lZXIsIEdvb2dsZSAvIENocm9taXVtIE9TCgotLSAKPT09PT09PT09PT09PT09 PT09PT0KfCBJIHdvdWxkIGxpa2UgdG8gfAp8IGZpeCB0aGUgd29ybGQsICB8CnwgYnV0IHRoZXkn cmUgbm90IHwKfCBnaXZpbmcgbWUgdGhlICAgfAogXCBzb3VyY2UgY29kZSEgIC8KICAtLS0tLS0t LS0tLS0tLS0KICAgIMKvXF8o44OEKV8vwq8KX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vZHJpLWRldmVsCg==