From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 09/10] drm/i915: Replace hangcheck by heartbeats Date: Fri, 11 Oct 2019 15:24:21 +0100 Message-ID: References: <20191010071434.31195-1-chris@chris-wilson.co.uk> <20191010071434.31195-9-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga05.intel.com (mga05.intel.com [192.55.52.43]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4AFB96EC4C for ; Fri, 11 Oct 2019 14:24:26 +0000 (UTC) In-Reply-To: <20191010071434.31195-9-chris@chris-wilson.co.uk> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDEwLzEwLzIwMTkgMDg6MTQsIENocmlzIFdpbHNvbiB3cm90ZToKPiBSZXBsYWNlIHNhbXBs aW5nIHRoZSBlbmdpbmUgc3RhdGUgZXZlcnkgc28gb2Z0ZW4gd2l0aCBhIHBlcmlvZGljCj4gaGVh cnRiZWF0IHJlcXVlc3QgdG8gbWVhc3VyZSB0aGUgaGVhbHRoIG9mIGFuIGVuZ2luZS4gVGhpcyBp cyBjb3VwbGVkCj4gd2l0aCB0aGUgZm9yY2VkLXByZWVtcHRpb24gdG8gYWxsb3cgbG9uZyBydW5u aW5nIHJlcXVlc3RzIHRvIHN1cnZpdmUgc28KPiBsb25nIGFzIHRoZXkgZG8gbm90IGJsb2NrIG90 aGVyIHVzZXJzLgo+IAo+IFRoZSBoZWFydGJlYXQgaW50ZXJ2YWwgY2FuIGJlIGFkanVzdGVkIHBl ci1lbmdpbmUgdXNpbmcsCj4gCj4gCS9zeXMvY2xhc3MvZHJtL2NhcmQ/L2VuZ2luZS8qL2hlYXJ0 YmVhdF9pbnRlcnZhbF9tcwo+IAo+IHYyOiBDb3VwbGUgaW4gc3lzZnMgY29udHJvbHMKPiAKPiBT aWduZWQtb2ZmLWJ5OiBDaHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiBD YzogSm9vbmFzIExhaHRpbmVuIDxqb29uYXMubGFodGluZW5AbGludXguaW50ZWwuY29tPgo+IENj OiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgo+IENjOiBKb24gQmxv b21maWVsZCA8am9uLmJsb29tZmllbGRAaW50ZWwuY29tPgo+IFJldmlld2VkLWJ5OiBKb24gQmxv b21maWVsZCA8am9uLmJsb29tZmllbGRAaW50ZWwuY29tPgo+IC0tLQo+ICAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvS2NvbmZpZy5wcm9maWxlICAgICAgICAgIHwgIDE0ICsKPiAgIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L01ha2VmaWxlICAgICAgICAgICAgICAgICB8ICAgMSAtCj4gICBkcml2ZXJzL2dw dS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYyAgfCAgIDIgKy0KPiAgIGRyaXZlcnMv Z3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuaCAgICB8ICAgMSAtCj4gICBkcml2ZXJz L2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcG0uYyAgICAgICAgfCAgIDIgLQo+ICAgZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lLmggICAgICAgIHwgIDMyIC0tCj4gICBkcml2 ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfY3MuYyAgICAgfCAgMTEgKy0KPiAgIC4u Li9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX2hlYXJ0YmVhdC5jICB8IDExNSArKysrKysK PiAgIC4uLi9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX2hlYXJ0YmVhdC5oICB8ICAgNSAr Cj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfcG0uYyAgICAgfCAgIDUg Ky0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV9zeXNmcy5jICB8ICAy OSArKwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX3R5cGVzLmggIHwg IDE3ICstCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndC5jICAgICAgICAgICAg fCAgIDEgLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3QuaCAgICAgICAgICAg IHwgICA0IC0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X3BtLmMgICAgICAg ICB8ICAgMSAtCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF90eXBlcy5oICAg ICAgfCAgIDkgLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfaGFuZ2NoZWNrLmMg ICAgIHwgMzYxIC0tLS0tLS0tLS0tLS0tLS0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv aW50ZWxfcmVzZXQuYyAgICAgICAgIHwgICAzICstCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9zZWxmdGVzdF9oYW5nY2hlY2suYyAgfCAgIDQgLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kZWJ1Z2ZzLmMgICAgICAgICAgIHwgIDg3IC0tLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2Rydi5jICAgICAgICAgICAgICAgfCAgIDMgLQo+ICAgZHJpdmVycy9ncHUvZHJt L2k5MTUvaTkxNV9kcnYuaCAgICAgICAgICAgICAgIHwgICAxIC0KPiAgIGRyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMgICAgICAgICB8ICAzMyArLQo+ICAgZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuaCAgICAgICAgIHwgICAyIC0KPiAgIGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfcHJpb2xpc3RfdHlwZXMuaCAgICB8ICAgNiArCj4gICAyNSBmaWxlcyBj aGFuZ2VkLCAxOTQgaW5zZXJ0aW9ucygrKSwgNTU1IGRlbGV0aW9ucygtKQo+ICAgZGVsZXRlIG1v ZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2hhbmdjaGVjay5jCj4gCj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L0tjb25maWcucHJvZmlsZSBiL2RyaXZl cnMvZ3B1L2RybS9pOTE1L0tjb25maWcucHJvZmlsZQo+IGluZGV4IDhmY2VlYTg1OTM3Yi4uZDM5 NTBhYWJiNDk3IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L0tjb25maWcucHJv ZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L0tjb25maWcucHJvZmlsZQo+IEBAIC00 MCwzICs0MCwxNyBAQCBjb25maWcgRFJNX0k5MTVfUFJFRU1QVF9USU1FT1VUCj4gICAJICAvc3lz L2NsYXNzL2RybS9jYXJkPy9lbmdpbmUvKi9wcmVlbXB0X3RpbWVvdXRfbXMKPiAgIAo+ICAgCSAg TWF5IGJlIDAgdG8gZGlzYWJsZSB0aGUgdGltZW91dC4KPiArCj4gK2NvbmZpZyBEUk1fSTkxNV9I RUFSVEJFQVRfSU5URVJWQUwKPiArCWludCAiSW50ZXJ2YWwgYmV0d2VlbiBoZWFydGJlYXQgcHVs c2VzIChtcykiCj4gKwlkZWZhdWx0IDI1MDAgIyBtaWxsaXNlY29uZHMKPiArCWhlbHAKPiArCSAg V2hpbGUgYWN0aXZlIHRoZSBkcml2ZXIgdXNlcyBhIHBlcmlvZGljIHJlcXVlc3QsIGEgaGVhcnRi ZWF0LCB0bwo+ICsJICBjaGVjayB0aGUgd2VsbG5lc3Mgb2YgdGhlIEdQVSBhbmQgdG8gcmVndWxh cmx5IGZsdXNoIHN0YXRlIGNoYW5nZXMKPiArCSAgKGlkbGUgYmFycmllcnMpLgoKU2hvdWxkIHRo aXMgYmUgc29tZWhvdyByZXdvcmRlZCB0byBiZSBtb3JlIGVuZCB1c2VyIGZyaWVuZGx5PyBNeSBp ZGVhLCAKbWF5IG5lZWQgdG8gYmUgY29ycmVjdGVkIGZvciBiYWQgRW5nbGlzaDoKClRoZSBkcml2 ZXIgc2VuZHMgYSBwZXJpb2RpYyBoZWFydGJlYXQgZG93biBhbGwgYWN0aXZlIEdUIGVuZ2luZXMg dG8gCmNoZWNrIHRoZSBoZWFsdGggb2YgdGhlIEdQVSBhbmQgdW5kZXJ0YWtlIHJlZ3VsYXIgaG91 c2Uta2VlcGluZyBvZiAKaW50ZXJuYWwgZHJpdmVyIHN0YXRlLgoKTWFpbiBwb2ludHMgZnJvbSB0 aGUgdXNlciBwZXJzcGVjdGl2ZTogInJlcXVlc3QiIC0gd2hhYXQ/ICJpZGxlIApiYXJyaWVycyIg LSBkaXR0by4gIldlbGxuZXNzIiAtIGEgYml0IHVudXN1YWwgaW4gdGhpcyBjb250ZXh0LCBubz8K Cj4gKwo+ICsJICBUaGlzIGlzIGFkanVzdGFibGUgdmlhCj4gKwkgIC9zeXMvY2xhc3MvZHJtL2Nh cmQ/L2VuZ2luZS8qL2hlYXJ0YmVhdF9pbnRlcnZhbF9tcwo+ICsKPiArCSAgTWF5IGJlIDAgdG8g ZGlzYWJsZSBoZWFydGJlYXRzIGFuZCB0aGVyZWZvcmUgZGlzYWJsZSBhdXRvbWF0aWMgR1BVCj4g KwkgIGhhbmcgZGV0ZWN0aW9uLgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9N YWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L01ha2VmaWxlCj4gaW5kZXggY2ZhYjdjODU4 NWIzLi41OWQzNTZjYzQwNmMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvTWFr ZWZpbGUKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9NYWtlZmlsZQo+IEBAIC04OCw3ICs4 OCw2IEBAIGd0LXkgKz0gXAo+ICAgCWd0L2ludGVsX2d0X3BtLm8gXAo+ICAgCWd0L2ludGVsX2d0 X3BtX2lycS5vIFwKPiAgIAlndC9pbnRlbF9ndF9yZXF1ZXN0cy5vIFwKPiAtCWd0L2ludGVsX2hh bmdjaGVjay5vIFwKPiAgIAlndC9pbnRlbF9scmMubyBcCj4gICAJZ3QvaW50ZWxfcmM2Lm8gXAo+ ICAgCWd0L2ludGVsX3JlbmRlcnN0YXRlLm8gXAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2Rp c3BsYXkvaW50ZWxfZGlzcGxheS5jCj4gaW5kZXggMWE1MzNjY2RiNTRmLi41ZTVkZTMwODFmNDgg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZGlzcGxheS9pbnRlbF9kaXNwbGF5 LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9kaXNwbGF5L2ludGVsX2Rpc3BsYXkuYwo+ IEBAIC0xNDMzOCw3ICsxNDMzOCw3IEBAIHN0YXRpYyB2b2lkIGludGVsX3BsYW5lX3VucGluX2Zi KHN0cnVjdCBpbnRlbF9wbGFuZV9zdGF0ZSAqb2xkX3BsYW5lX3N0YXRlKQo+ICAgc3RhdGljIHZv aWQgZmJfb2JqX2J1bXBfcmVuZGVyX3ByaW9yaXR5KHN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0 ICpvYmopCj4gICB7Cj4gICAJc3RydWN0IGk5MTVfc2NoZWRfYXR0ciBhdHRyID0gewo+IC0JCS5w cmlvcml0eSA9IEk5MTVfUFJJT1JJVFlfRElTUExBWSwKPiArCQkucHJpb3JpdHkgPSBJOTE1X1VT RVJfUFJJT1JJVFkoSTkxNV9QUklPUklUWV9ESVNQTEFZKSwKPiAgIAl9Owo+ICAgCj4gICAJaTkx NV9nZW1fb2JqZWN0X3dhaXRfcHJpb3JpdHkob2JqLCAwLCAmYXR0cik7Cj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuaCBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmplY3QuaAo+IGluZGV4IGM1ZTE0YzljODA1Yy4uNWJk NTFlMzk3MzcxIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dl bV9vYmplY3QuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dlbS9pOTE1X2dlbV9vYmpl Y3QuaAo+IEBAIC00NjAsNiArNDYwLDUgQEAgaW50IGk5MTVfZ2VtX29iamVjdF93YWl0KHN0cnVj dCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmosCj4gICBpbnQgaTkxNV9nZW1fb2JqZWN0X3dhaXRf cHJpb3JpdHkoc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iaiwKPiAgIAkJCQkgIHVuc2ln bmVkIGludCBmbGFncywKPiAgIAkJCQkgIGNvbnN0IHN0cnVjdCBpOTE1X3NjaGVkX2F0dHIgKmF0 dHIpOwo+IC0jZGVmaW5lIEk5MTVfUFJJT1JJVFlfRElTUExBWSBJOTE1X1VTRVJfUFJJT1JJVFko STkxNV9QUklPUklUWV9NQVgpCj4gICAKPiAgICNlbmRpZgo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcG0uYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2dl bS9pOTE1X2dlbV9wbS5jCj4gaW5kZXggNzk4N2I1NGZiMWY1Li4wZTk3NTIwY2IxYmIgMTAwNjQ0 Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ2VtL2k5MTVfZ2VtX3BtLmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9nZW0vaTkxNV9nZW1fcG0uYwo+IEBAIC0xMDAsOCArMTAwLDYg QEAgdm9pZCBpOTE1X2dlbV9zdXNwZW5kKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ ICAgCWludGVsX2d0X3N1c3BlbmQoJmk5MTUtPmd0KTsKPiAgIAlpbnRlbF91Y19zdXNwZW5kKCZp OTE1LT5ndC51Yyk7Cj4gICAKPiAtCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmaTkxNS0+Z3Qu aGFuZ2NoZWNrLndvcmspOwo+IC0KPiAgIAlpOTE1X2dlbV9kcmFpbl9mcmVlZF9vYmplY3RzKGk5 MTUpOwo+ICAgfQo+ICAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2lu dGVsX2VuZ2luZS5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lLmgKPiBp bmRleCA5M2VhMzY3ZmU2MjQuLjhhZDU3ZWFjZTM1MSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmUuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2ludGVsX2VuZ2luZS5oCj4gQEAgLTg5LDM4ICs4OSw2IEBAIHN0cnVjdCBkcm1fcHJpbnRl cjsKPiAgIC8qIHNlcW5vIHNpemUgaXMgYWN0dWFsbHkgb25seSBhIHVpbnQzMiwgYnV0IHNpbmNl IHdlIHBsYW4gdG8gdXNlIE1JX0ZMVVNIX0RXIHRvCj4gICAgKiBkbyB0aGUgd3JpdGVzLCBhbmQg dGhhdCBtdXN0IGhhdmUgcXcgYWxpZ25lZCBvZmZzZXRzLCBzaW1wbHkgcHJldGVuZCBpdCdzIDhi Lgo+ICAgICovCj4gLWVudW0gaW50ZWxfZW5naW5lX2hhbmdjaGVja19hY3Rpb24gewo+IC0JRU5H SU5FX0lETEUgPSAwLAo+IC0JRU5HSU5FX1dBSVQsCj4gLQlFTkdJTkVfQUNUSVZFX1NFUU5PLAo+ IC0JRU5HSU5FX0FDVElWRV9IRUFELAo+IC0JRU5HSU5FX0FDVElWRV9TVUJVTklUUywKPiAtCUVO R0lORV9XQUlUX0tJQ0ssCj4gLQlFTkdJTkVfREVBRCwKPiAtfTsKPiAtCj4gLXN0YXRpYyBpbmxp bmUgY29uc3QgY2hhciAqCj4gLWhhbmdjaGVja19hY3Rpb25fdG9fc3RyKGNvbnN0IGVudW0gaW50 ZWxfZW5naW5lX2hhbmdjaGVja19hY3Rpb24gYSkKPiAtewo+IC0Jc3dpdGNoIChhKSB7Cj4gLQlj YXNlIEVOR0lORV9JRExFOgo+IC0JCXJldHVybiAiaWRsZSI7Cj4gLQljYXNlIEVOR0lORV9XQUlU Ogo+IC0JCXJldHVybiAid2FpdCI7Cj4gLQljYXNlIEVOR0lORV9BQ1RJVkVfU0VRTk86Cj4gLQkJ cmV0dXJuICJhY3RpdmUgc2Vxbm8iOwo+IC0JY2FzZSBFTkdJTkVfQUNUSVZFX0hFQUQ6Cj4gLQkJ cmV0dXJuICJhY3RpdmUgaGVhZCI7Cj4gLQljYXNlIEVOR0lORV9BQ1RJVkVfU1VCVU5JVFM6Cj4g LQkJcmV0dXJuICJhY3RpdmUgc3VidW5pdHMiOwo+IC0JY2FzZSBFTkdJTkVfV0FJVF9LSUNLOgo+ IC0JCXJldHVybiAid2FpdCBraWNrIjsKPiAtCWNhc2UgRU5HSU5FX0RFQUQ6Cj4gLQkJcmV0dXJu ICJkZWFkIjsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gInVua25vd24iOwo+IC19Cj4gICAKPiAgIHN0 YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50Cj4gICBleGVjbGlzdHNfbnVtX3BvcnRzKGNvbnN0IHN0 cnVjdCBpbnRlbF9lbmdpbmVfZXhlY2xpc3RzICogY29uc3QgZXhlY2xpc3RzKQo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfY3MuYyBiL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV9jcy5jCj4gaW5kZXggMWViNTExNDc4MzlhLi5k ODI5YWQzNDBjYTAgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxf ZW5naW5lX2NzLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVf Y3MuYwo+IEBAIC0zMDUsNiArMzA1LDcgQEAgc3RhdGljIGludCBpbnRlbF9lbmdpbmVfc2V0dXAo c3RydWN0IGludGVsX2d0ICpndCwgZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQpCj4gICAJX19zcHJp bnRfZW5naW5lX25hbWUoZW5naW5lKTsKPiAgIAo+ICAgCWVuZ2luZS0+cHJvcHMucHJlZW1wdF90 aW1lb3V0ID0gQ09ORklHX0RSTV9JOTE1X1BSRUVNUFRfVElNRU9VVDsKPiArCWVuZ2luZS0+cHJv cHMuaGVhcnRiZWF0X2ludGVydmFsID0gQ09ORklHX0RSTV9JOTE1X0hFQVJUQkVBVF9JTlRFUlZB TDsKPiAgIAo+ICAgCS8qCj4gICAJICogVG8gYmUgb3ZlcnJpZGRlbiBieSB0aGUgYmFja2VuZCBv biBzZXR1cC4gSG93ZXZlciB0byBmYWNpbGl0YXRlCj4gQEAgLTU5OSw3ICs2MDAsNiBAQCBzdGF0 aWMgaW50IGludGVsX2VuZ2luZV9zZXR1cF9jb21tb24oc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lKQo+ICAgCWludGVsX2VuZ2luZV9pbml0X2FjdGl2ZShlbmdpbmUsIEVOR0lORV9QSFlT SUNBTCk7Cj4gICAJaW50ZWxfZW5naW5lX2luaXRfYnJlYWRjcnVtYnMoZW5naW5lKTsKPiAgIAlp bnRlbF9lbmdpbmVfaW5pdF9leGVjbGlzdHMoZW5naW5lKTsKPiAtCWludGVsX2VuZ2luZV9pbml0 X2hhbmdjaGVjayhlbmdpbmUpOwo+ICAgCWludGVsX2VuZ2luZV9pbml0X2NtZF9wYXJzZXIoZW5n aW5lKTsKPiAgIAlpbnRlbF9lbmdpbmVfaW5pdF9fcG0oZW5naW5lKTsKPiAgIAo+IEBAIC0xNDMy LDggKzE0MzIsMTMgQEAgdm9pZCBpbnRlbF9lbmdpbmVfZHVtcChzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUsCj4gICAJCWRybV9wcmludGYobSwgIioqKiBXRURHRUQgKioqXG4iKTsKPiAg IAo+ICAgCWRybV9wcmludGYobSwgIlx0QXdha2U/ICVkXG4iLCBhdG9taWNfcmVhZCgmZW5naW5l LT53YWtlcmVmLmNvdW50KSk7Cj4gLQlkcm1fcHJpbnRmKG0sICJcdEhhbmdjaGVjazogJWQgbXMg YWdvXG4iLAo+IC0JCSAgIGppZmZpZXNfdG9fbXNlY3MoamlmZmllcyAtIGVuZ2luZS0+aGFuZ2No ZWNrLmFjdGlvbl90aW1lc3RhbXApKTsKPiArCj4gKwlyY3VfcmVhZF9sb2NrKCk7Cj4gKwlycSA9 IFJFQURfT05DRShlbmdpbmUtPmhlYXJ0YmVhdC5zeXN0b2xlKTsKPiArCWlmIChycSkKPiArCQlk cm1fcHJpbnRmKG0sICJcdEhlYXJ0YmVhdDogJWQgbXMgYWdvXG4iLAo+ICsJCQkgICBqaWZmaWVz X3RvX21zZWNzKGppZmZpZXMgLSBycS0+ZW1pdHRlZF9qaWZmaWVzKSk7Cj4gKwlyY3VfcmVhZF91 bmxvY2soKTsKPiAgIAlkcm1fcHJpbnRmKG0sICJcdFJlc2V0IGNvdW50OiAlZCAoZ2xvYmFsICVk KVxuIiwKPiAgIAkJICAgaTkxNV9yZXNldF9lbmdpbmVfY291bnQoZXJyb3IsIGVuZ2luZSksCj4g ICAJCSAgIGk5MTVfcmVzZXRfY291bnQoZXJyb3IpKTsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX2hlYXJ0YmVhdC5jIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvaW50ZWxfZW5naW5lX2hlYXJ0YmVhdC5jCj4gaW5kZXggMmZjNDEzZjlkNTA2Li5m NjhhY2Y5MTE4ZjMgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxf ZW5naW5lX2hlYXJ0YmVhdC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxf ZW5naW5lX2hlYXJ0YmVhdC5jCj4gQEAgLTExLDYgKzExLDI3IEBACj4gICAjaW5jbHVkZSAiaW50 ZWxfZW5naW5lX3BtLmgiCj4gICAjaW5jbHVkZSAiaW50ZWxfZW5naW5lLmgiCj4gICAjaW5jbHVk ZSAiaW50ZWxfZ3QuaCIKPiArI2luY2x1ZGUgImludGVsX3Jlc2V0LmgiCj4gKwo+ICsvKgo+ICsg KiBXaGlsZSB0aGUgZW5naW5lIGlzIGFjdGl2ZSwgd2Ugc2VuZCBhIHBlcmlvZGljIHB1bHNlIGFs b25nIHRoZSBlbmdpbmUKPiArICogdG8gY2hlY2sgb24gaXRzIGhlYWx0aCBhbmQgdG8gZmx1c2gg YW55IGlkbGUtYmFycmllcnMuIElmIHRoYXQgcmVxdWVzdAo+ICsgKiBpcyBzdHVjaywgYW5kIHdl IGZhaWwgdG8gcHJlZW1wdCBpdCwgd2UgZGVjbGFyZSB0aGUgZW5naW5lIGh1bmcgYW5kCj4gKyAq IGlzc3VlIGEgcmVzZXQgLS0gaW4gdGhlIGhvcGUgdGhhdCByZXN0b3JlcyBwcm9ncmVzcy4KPiAr ICovCj4gKwo+ICtzdGF0aWMgdm9pZCBuZXh0X2hlYXJ0YmVhdChzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpCj4gK3sKPiArCWxvbmcgZGVsYXk7Cj4gKwo+ICsJZGVsYXkgPSBSRUFEX09O Q0UoZW5naW5lLT5wcm9wcy5oZWFydGJlYXRfaW50ZXJ2YWwpOwo+ICsJaWYgKCFkZWxheSkKPiAr CQlyZXR1cm47Cj4gKwo+ICsJZGVsYXkgPSBtc2Vjc190b19qaWZmaWVzX3RpbWVvdXQoZGVsYXkp Owo+ICsJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZlbmdpbmUtPmhlYXJ0YmVhdC53b3JrLAo+ICsJ CQkgICAgICByb3VuZF9qaWZmaWVzX3VwX3JlbGF0aXZlKGRlbGF5KSk7Cj4gK30KPiAgIAo+ICAg c3RhdGljIHZvaWQgaWRsZV9wdWxzZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHN0 cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQo+ICAgewo+IEBAIC0xOCw2ICszOSwxMDAgQEAgc3RhdGlj IHZvaWQgaWRsZV9wdWxzZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHN0cnVjdCBp OTE1X3JlcXVlc3QgKnJxKQo+ICAgCWk5MTVfcmVxdWVzdF9hZGRfYWN0aXZlX2JhcnJpZXJzKHJx KTsKPiAgIH0KPiAgIAo+ICtzdGF0aWMgdm9pZCBoZWFydGJlYXQoc3RydWN0IHdvcmtfc3RydWN0 ICp3cmspCj4gK3sKPiArCXN0cnVjdCBpOTE1X3NjaGVkX2F0dHIgYXR0ciA9IHsKPiArCQkucHJp b3JpdHkgPSBJOTE1X1VTRVJfUFJJT1JJVFkoSTkxNV9QUklPUklUWV9NSU4pLAoKWW91IHdlcmUg c2F5aW5nIGl0J3MgYmV0dGVyIHRvIHN0YXJ0IGZyb20gemVybywgcmlnaHQ/Cgo+ICsJfTsKPiAr CXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9Cj4gKwkJY29udGFpbmVyX29mKHdyaywg dHlwZW9mKCplbmdpbmUpLCBoZWFydGJlYXQud29yay53b3JrKTsKPiArCXN0cnVjdCBpbnRlbF9j b250ZXh0ICpjZSA9IGVuZ2luZS0+a2VybmVsX2NvbnRleHQ7Cj4gKwlzdHJ1Y3QgaTkxNV9yZXF1 ZXN0ICpycTsKPiArCj4gKwlpZiAoIWludGVsX2VuZ2luZV9wbV9nZXRfaWZfYXdha2UoZW5naW5l KSkKPiArCQlyZXR1cm47Cj4gKwo+ICsJcnEgPSBlbmdpbmUtPmhlYXJ0YmVhdC5zeXN0b2xlOwo+ ICsJaWYgKHJxICYmIGk5MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEpKSB7Cj4gKwkJaTkxNV9yZXF1 ZXN0X3B1dChycSk7Cj4gKwkJZW5naW5lLT5oZWFydGJlYXQuc3lzdG9sZSA9IE5VTEw7Cj4gKwl9 Cj4gKwo+ICsJaWYgKGludGVsX2d0X2lzX3dlZGdlZChlbmdpbmUtPmd0KSkKPiArCQlnb3RvIG91 dDsKPiArCj4gKwlpZiAoZW5naW5lLT5oZWFydGJlYXQuc3lzdG9sZSkgewo+ICsJCWlmIChJU19F TkFCTEVEKENPTkZJR19EUk1fSTkxNV9ERUJVR19HRU0pKSB7Cj4gKwkJCXN0cnVjdCBkcm1fcHJp bnRlciBwID0gZHJtX2RlYnVnX3ByaW50ZXIoX19mdW5jX18pOwo+ICsKPiArCQkJaW50ZWxfZW5n aW5lX2R1bXAoZW5naW5lLCAmcCwKPiArCQkJCQkgICIlcyBoZWFydGJlYXQgbm90IHRpY2tpbmdc biIsCj4gKwkJCQkJICBlbmdpbmUtPm5hbWUpOwoKVGhpcyBjb3VsZCBwZXJoYXBzIGJlIGJldHRl ciBvbmx5IHdoZW4gd2UgaGF2ZSByZWFjaGVkIGEgaGlnaGVyIHByaW9yaXR5IAphdHRlbXB0LiBP a2F5IGl0J3MgdW5kZXIgREVCVUdfR0VNIGJ1dCBzdGlsbCwgbm90IHN1cmUgdGhlcmUgaXMgdmFs dWUgaW4gCmJlaW5nIHNvIHBhbmlja3kgaWYgZm9yIGFueSByZWFzb24gcHJlZW1wdGlvbiBkb2Vz IG5vdCB3b3JrLiBIZWFydGJlYXQgCmRvZXMgbm90IGRlcGVuZCBvbiBwcmVlbXB0aW9uIGFzIGZh ciBhcyBJIGNvdWxkIHNwb3QsIHJpZ2h0PwoKPiArCQl9Cj4gKwo+ICsJCWlmIChlbmdpbmUtPnNj aGVkdWxlICYmCj4gKwkJICAgIHJxLT5zY2hlZC5hdHRyLnByaW9yaXR5IDwgSTkxNV9QUklPUklU WV9CQVJSSUVSKSB7Cj4gKwkJCWF0dHIucHJpb3JpdHkgPQo+ICsJCQkJSTkxNV9VU0VSX1BSSU9S SVRZKEk5MTVfUFJJT1JJVFlfSEVBUlRCRUFUKTsKPiArCQkJaWYgKHJxLT5zY2hlZC5hdHRyLnBy aW9yaXR5ID49IGF0dHIucHJpb3JpdHkpCj4gKwkJCQlhdHRyLnByaW9yaXR5ID0gSTkxNV9QUklP UklUWV9CQVJSSUVSOwo+ICsKPiArCQkJbG9jYWxfYmhfZGlzYWJsZSgpOwo+ICsJCQllbmdpbmUt PnNjaGVkdWxlKHJxLCAmYXR0cik7Cj4gKwkJCWxvY2FsX2JoX2VuYWJsZSgpOwo+ICsJCX0gZWxz ZSB7Cj4gKwkJCWludGVsX2d0X2hhbmRsZV9lcnJvcihlbmdpbmUtPmd0LCBlbmdpbmUtPm1hc2ss Cj4gKwkJCQkJICAgICAgSTkxNV9FUlJPUl9DQVBUVVJFLAo+ICsJCQkJCSAgICAgICJzdG9wcGVk IGhlYXJ0YmVhdCBvbiAlcyIsCj4gKwkJCQkJICAgICAgZW5naW5lLT5uYW1lKTsKPiArCQl9Cj4g KwkJZ290byBvdXQ7Cj4gKwl9Cj4gKwo+ICsJaWYgKGVuZ2luZS0+d2FrZXJlZl9zZXJpYWwgPT0g ZW5naW5lLT5zZXJpYWwpCj4gKwkJZ290byBvdXQ7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmY2UtPnRp bWVsaW5lLT5tdXRleCk7Cj4gKwo+ICsJaW50ZWxfY29udGV4dF9lbnRlcihjZSk7Cj4gKwlycSA9 IF9faTkxNV9yZXF1ZXN0X2NyZWF0ZShjZSwgR0ZQX05PV0FJVCB8IF9fR0ZQX05PV0FSTik7Cj4g KwlpbnRlbF9jb250ZXh0X2V4aXQoY2UpOwo+ICsJaWYgKElTX0VSUihycSkpCj4gKwkJZ290byB1 bmxvY2s7Cj4gKwo+ICsJaWRsZV9wdWxzZShlbmdpbmUsIHJxKTsKPiArCWlmIChpOTE1X21vZHBh cmFtcy5lbmFibGVfaGFuZ2NoZWNrKQo+ICsJCWVuZ2luZS0+aGVhcnRiZWF0LnN5c3RvbGUgPSBp OTE1X3JlcXVlc3RfZ2V0KHJxKTsKPiArCj4gKwlfX2k5MTVfcmVxdWVzdF9jb21taXQocnEpOwo+ ICsJX19pOTE1X3JlcXVlc3RfcXVldWUocnEsICZhdHRyKTsKPiArCj4gK3VubG9jazoKPiArCW11 dGV4X3VubG9jaygmY2UtPnRpbWVsaW5lLT5tdXRleCk7Cj4gK291dDoKPiArCW5leHRfaGVhcnRi ZWF0KGVuZ2luZSk7Cj4gKwlpbnRlbF9lbmdpbmVfcG1fcHV0KGVuZ2luZSk7Cj4gK30KPiArCj4g K3ZvaWQgaW50ZWxfZW5naW5lX3VucGFya19oZWFydGJlYXQoc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lKQo+ICt7Cj4gKwlpZiAoIUNPTkZJR19EUk1fSTkxNV9IRUFSVEJFQVRfSU5URVJW QUwpCj4gKwkJcmV0dXJuOwo+ICsKPiArCW5leHRfaGVhcnRiZWF0KGVuZ2luZSk7Cj4gK30KPiAr Cj4gK3ZvaWQgaW50ZWxfZW5naW5lX3BhcmtfaGVhcnRiZWF0KHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSkKPiArewo+ICsJY2FuY2VsX2RlbGF5ZWRfd29yaygmZW5naW5lLT5oZWFydGJl YXQud29yayk7Cj4gKwlpOTE1X3JlcXVlc3RfcHV0KGZldGNoX2FuZF96ZXJvKCZlbmdpbmUtPmhl YXJ0YmVhdC5zeXN0b2xlKSk7Cj4gK30KPiArCj4gK3ZvaWQgaW50ZWxfZW5naW5lX2luaXRfaGVh cnRiZWF0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiArewo+ICsJSU5JVF9ERUxB WUVEX1dPUksoJmVuZ2luZS0+aGVhcnRiZWF0LndvcmssIGhlYXJ0YmVhdCk7Cj4gK30KPiArCj4g ICBpbnQgaW50ZWxfZW5naW5lX3B1bHNlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkK PiAgIHsKPiAgIAlzdHJ1Y3QgaTkxNV9zY2hlZF9hdHRyIGF0dHIgPSB7IC5wcmlvcml0eSA9IEk5 MTVfUFJJT1JJVFlfQkFSUklFUiB9Owo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9pbnRlbF9lbmdpbmVfaGVhcnRiZWF0LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9p bnRlbF9lbmdpbmVfaGVhcnRiZWF0LmgKPiBpbmRleCBiOTUwNDUxYjU5OTguLjM5MzkxMDA0NTU0 ZCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfaGVh cnRiZWF0LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfaGVh cnRiZWF0LmgKPiBAQCAtOSw2ICs5LDExIEBACj4gICAKPiAgIHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3M7Cj4gICAKPiArdm9pZCBpbnRlbF9lbmdpbmVfaW5pdF9oZWFydGJlYXQoc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lKTsKPiArCj4gK3ZvaWQgaW50ZWxfZW5naW5lX3BhcmtfaGVhcnRi ZWF0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7Cj4gK3ZvaWQgaW50ZWxfZW5naW5l X3VucGFya19oZWFydGJlYXQoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKTsKPiArCj4g ICBpbnQgaW50ZWxfZW5naW5lX3B1bHNlKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSk7 Cj4gICAKPiAgICNlbmRpZiAvKiBJTlRFTF9FTkdJTkVfSEVBUlRCRUFUX0ggKi8KPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX3BtLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfcG0uYwo+IGluZGV4IDdkNzY2MTFkOWRmMS4u NmZiZmEyMTYyZTU0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X2VuZ2luZV9wbS5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5l X3BtLmMKPiBAQCAtNyw2ICs3LDcgQEAKPiAgICNpbmNsdWRlICJpOTE1X2Rydi5oIgo+ICAgCj4g ICAjaW5jbHVkZSAiaW50ZWxfZW5naW5lLmgiCj4gKyNpbmNsdWRlICJpbnRlbF9lbmdpbmVfaGVh cnRiZWF0LmgiCj4gICAjaW5jbHVkZSAiaW50ZWxfZW5naW5lX3BtLmgiCj4gICAjaW5jbHVkZSAi aW50ZWxfZW5naW5lX3Bvb2wuaCIKPiAgICNpbmNsdWRlICJpbnRlbF9ndC5oIgo+IEBAIC0zNCw3 ICszNSw3IEBAIHN0YXRpYyBpbnQgX19lbmdpbmVfdW5wYXJrKHN0cnVjdCBpbnRlbF93YWtlcmVm ICp3ZikKPiAgIAlpZiAoZW5naW5lLT51bnBhcmspCj4gICAJCWVuZ2luZS0+dW5wYXJrKGVuZ2lu ZSk7Cj4gICAKPiAtCWludGVsX2VuZ2luZV9pbml0X2hhbmdjaGVjayhlbmdpbmUpOwo+ICsJaW50 ZWxfZW5naW5lX3VucGFya19oZWFydGJlYXQoZW5naW5lKTsKPiAgIAlyZXR1cm4gMDsKPiAgIH0K PiAgIAo+IEBAIC0xNTgsNiArMTU5LDcgQEAgc3RhdGljIGludCBfX2VuZ2luZV9wYXJrKHN0cnVj dCBpbnRlbF93YWtlcmVmICp3ZikKPiAgIAo+ICAgCWNhbGxfaWRsZV9iYXJyaWVycyhlbmdpbmUp OyAvKiBjbGVhbnVwIGFmdGVyIHdlZGdpbmcgKi8KPiAgIAo+ICsJaW50ZWxfZW5naW5lX3Bhcmtf aGVhcnRiZWF0KGVuZ2luZSk7Cj4gICAJaW50ZWxfZW5naW5lX2Rpc2FybV9icmVhZGNydW1icyhl bmdpbmUpOwo+ICAgCWludGVsX2VuZ2luZV9wb29sX3BhcmsoJmVuZ2luZS0+cG9vbCk7Cj4gICAK PiBAQCAtMTg4LDYgKzE5MCw3IEBAIHZvaWQgaW50ZWxfZW5naW5lX2luaXRfX3BtKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkKPiAgIAlzdHJ1Y3QgaW50ZWxfcnVudGltZV9wbSAqcnBt ID0gZW5naW5lLT51bmNvcmUtPnJwbTsKPiAgIAo+ICAgCWludGVsX3dha2VyZWZfaW5pdCgmZW5n aW5lLT53YWtlcmVmLCBycG0sICZ3Zl9vcHMpOwo+ICsJaW50ZWxfZW5naW5lX2luaXRfaGVhcnRi ZWF0KGVuZ2luZSk7Cj4gICB9Cj4gICAKPiAgICNpZiBJU19FTkFCTEVEKENPTkZJR19EUk1fSTkx NV9TRUxGVEVTVCkKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxf ZW5naW5lX3N5c2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfc3lz ZnMuYwo+IGluZGV4IGFhYzI2MDk3YzkxNi4uODUzMmY5Y2RjODg1IDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV9zeXNmcy5jCj4gKysrIGIvZHJpdmVy cy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX3N5c2ZzLmMKPiBAQCAtNzAsMTIgKzcwLDM4 IEBAIHByZWVtcHRfdGltZW91dF9zdG9yZShzdHJ1Y3Qga29iamVjdCAqa29iaiwgc3RydWN0IGtv YmpfYXR0cmlidXRlICphdHRyLAo+ICAgCXJldHVybiBjb3VudDsKPiAgIH0KPiAgIAo+ICtzdGF0 aWMgc3NpemVfdAo+ICtoZWFydGJlYXRfaW50ZXJ2YWxfc2hvdyhzdHJ1Y3Qga29iamVjdCAqa29i aiwgc3RydWN0IGtvYmpfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCj4gK3sKPiArCXN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSA9IGtvYmpfdG9fZW5naW5lKGtvYmopOwo+ICsKPiAr CXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsdVxuIiwgZW5naW5lLT5wcm9wcy5oZWFydGJlYXRfaW50 ZXJ2YWwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgc3NpemVfdAo+ICtoZWFydGJlYXRfaW50ZXJ2YWxf c3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0ciwK PiArCQkJIGNvbnN0IGNoYXIgKmJ1Ziwgc2l6ZV90IGNvdW50KQo+ICt7Cj4gKwlzdHJ1Y3QgaW50 ZWxfZW5naW5lX2NzICplbmdpbmUgPSBrb2JqX3RvX2VuZ2luZShrb2JqKTsKPiArCXVuc2lnbmVk IGxvbmcgZGVsYXk7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCWVyciA9IGtzdHJ0b3VsKGJ1ZiwgMCwg JmRlbGF5KTsKPiArCWlmIChlcnIpCj4gKwkJcmV0dXJuIGVycjsKPiArCj4gKwllbmdpbmUtPnBy b3BzLmhlYXJ0YmVhdF9pbnRlcnZhbCA9IGRlbGF5Owo+ICsJcmV0dXJuIGNvdW50Owo+ICt9Cj4g Kwo+ICAgc3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBuYW1lX2F0dHIgPSBfX0FUVFIobmFt ZSwgMDQ0NCwgbmFtZV9zaG93LCBOVUxMKTsKPiAgIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1 dGUgY2xhc3NfYXR0ciA9IF9fQVRUUihjbGFzcywgMDQ0NCwgY2xhc3Nfc2hvdywgTlVMTCk7Cj4g ICBzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGluc3RfYXR0ciA9IF9fQVRUUihpbnN0YW5j ZSwgMDQ0NCwgaW5zdF9zaG93LCBOVUxMKTsKPiAgIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1 dGUgbW1pb19hdHRyID0gX19BVFRSKG1taW9fYmFzZSwgMDQ0NCwgbW1pb19zaG93LCBOVUxMKTsK PiAgIHN0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgcHJlZW1wdF90aW1lb3V0X2F0dHIgPQo+ ICAgX19BVFRSKHByZWVtcHRfdGltZW91dF9tcywgMDYwMCwgcHJlZW1wdF90aW1lb3V0X3Nob3cs IHByZWVtcHRfdGltZW91dF9zdG9yZSk7Cj4gK3N0YXRpYyBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUg aGVhcnRiZWF0X2ludGVydmFsX2F0dHIgPQo+ICtfX0FUVFIoaGVhcnRiZWF0X2ludGVydmFsX21z LCAwNjAwLCBoZWFydGJlYXRfaW50ZXJ2YWxfc2hvdywgaGVhcnRiZWF0X2ludGVydmFsX3N0b3Jl KTsKPiAgIAo+ICAgc3RhdGljIHZvaWQga29ial9lbmdpbmVfcmVsZWFzZShzdHJ1Y3Qga29iamVj dCAqa29iaikKPiAgIHsKPiBAQCAtMTE1LDYgKzE0MSw5IEBAIHZvaWQgaW50ZWxfZW5naW5lc19h ZGRfc3lzZnMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gICAJCSZjbGFzc19hdHRy LmF0dHIsCj4gICAJCSZpbnN0X2F0dHIuYXR0ciwKPiAgIAkJJm1taW9fYXR0ci5hdHRyLAo+ICsj aWYgQ09ORklHX0RSTV9JOTE1X0hFQVJUQkVBVF9JTlRFUlZBTAo+ICsJCSZoZWFydGJlYXRfaW50 ZXJ2YWxfYXR0ci5hdHRyLAo+ICsjZW5kaWYKClByZXN1bWFibHkgY29tcGlsZXIgaXMgaGFwcHkg KG9yIHRoZSBsaW5rZXIpIHdpdGggb25seSB0aGlzIHBhcnQgZ2V0dGluZyAKdGhlICNpZmRlZiB0 cmVhdG1lbnQ/IChUaGUgc2hvdy9zdG9yZSBmdW5jdGlvbnMgYWJvdmUgZG9uJ3QgaGF2ZSBpdC4p Cgo+ICAgCQlOVUxMCj4gICAJfTsKPiAgIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9ndC9pbnRlbF9lbmdpbmVfdHlwZXMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2lu dGVsX2VuZ2luZV90eXBlcy5oCj4gaW5kZXggNmFmOWIwMDk2OTc1Li5hZDNiZTJmYmQ3MWEgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lX3R5cGVzLmgK PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmVfdHlwZXMuaAo+IEBA IC0xNSw2ICsxNSw3IEBACj4gICAjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+Cj4gICAjaW5jbHVk ZSA8bGludXgvdGltZXIuaD4KPiAgICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgo+ICsjaW5jbHVk ZSA8bGludXgvd29ya3F1ZXVlLmg+Cj4gICAKPiAgICNpbmNsdWRlICJpOTE1X2dlbS5oIgo+ICAg I2luY2x1ZGUgImk5MTVfcG11LmgiCj4gQEAgLTc2LDE0ICs3Nyw2IEBAIHN0cnVjdCBpbnRlbF9p bnN0ZG9uZSB7Cj4gICAJdTMyIHJvd1tJOTE1X01BWF9TTElDRVNdW0k5MTVfTUFYX1NVQlNMSUNF U107Cj4gICB9Owo+ICAgCj4gLXN0cnVjdCBpbnRlbF9lbmdpbmVfaGFuZ2NoZWNrIHsKPiAtCXU2 NCBhY3RoZDsKPiAtCXUzMiBsYXN0X3Jpbmc7Cj4gLQl1MzIgbGFzdF9oZWFkOwo+IC0JdW5zaWdu ZWQgbG9uZyBhY3Rpb25fdGltZXN0YW1wOwo+IC0Jc3RydWN0IGludGVsX2luc3Rkb25lIGluc3Rk b25lOwo+IC19Owo+IC0KPiAgIHN0cnVjdCBpbnRlbF9yaW5nIHsKPiAgIAlzdHJ1Y3Qga3JlZiBy ZWY7Cj4gICAJc3RydWN0IGk5MTVfdm1hICp2bWE7Cj4gQEAgLTMzMCw2ICszMjMsMTEgQEAgc3Ry dWN0IGludGVsX2VuZ2luZV9jcyB7Cj4gICAKPiAgIAlpbnRlbF9lbmdpbmVfbWFza190IHNhdHVy YXRlZDsgLyogc3VibWl0dGluZyBzZW1hcGhvcmVzIHRvbyBsYXRlPyAqLwo+ICAgCj4gKwlzdHJ1 Y3Qgewo+ICsJCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKPiArCQlzdHJ1Y3QgaTkxNV9yZXF1 ZXN0ICpzeXN0b2xlOwo+ICsJfSBoZWFydGJlYXQ7Cj4gKwo+ICAgCXVuc2lnbmVkIGxvbmcgc2Vy aWFsOwo+ICAgCj4gICAJdW5zaWduZWQgbG9uZyB3YWtlcmVmX3NlcmlhbDsKPiBAQCAtNDgwLDgg KzQ3OCw2IEBAIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3Mgewo+ICAgCS8qIHN0YXR1c19ub3RpZmll cjogbGlzdCBvZiBjYWxsYmFja3MgZm9yIGNvbnRleHQtc3dpdGNoIGNoYW5nZXMgKi8KPiAgIAlz dHJ1Y3QgYXRvbWljX25vdGlmaWVyX2hlYWQgY29udGV4dF9zdGF0dXNfbm90aWZpZXI7Cj4gICAK PiAtCXN0cnVjdCBpbnRlbF9lbmdpbmVfaGFuZ2NoZWNrIGhhbmdjaGVjazsKPiAtCj4gICAjZGVm aW5lIEk5MTVfRU5HSU5FX05FRURTX0NNRF9QQVJTRVIgQklUKDApCj4gICAjZGVmaW5lIEk5MTVf RU5HSU5FX1NVUFBPUlRTX1NUQVRTICAgQklUKDEpCj4gICAjZGVmaW5lIEk5MTVfRU5HSU5FX0hB U19QUkVFTVBUSU9OICAgQklUKDIpCj4gQEAgLTU0OSw2ICs1NDUsNyBAQCBzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzIHsKPiAgIAo+ICAgCXN0cnVjdCB7Cj4gICAJCXVuc2lnbmVkIGxvbmcgcHJlZW1w dF90aW1lb3V0Owo+ICsJCXVuc2lnbmVkIGxvbmcgaGVhcnRiZWF0X2ludGVydmFsOwo+ICAgCX0g cHJvcHM7Cj4gICB9Owo+ICAgCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L2ludGVsX2d0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndC5jCj4gaW5kZXgg YjM2MTlhMmE1ZDBlLi5mM2UxOTI1OTg3ZTEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvaW50ZWxfZ3QuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVs X2d0LmMKPiBAQCAtMjIsNyArMjIsNiBAQCB2b2lkIGludGVsX2d0X2luaXRfZWFybHkoc3RydWN0 IGludGVsX2d0ICpndCwgc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gICAJSU5JVF9M SVNUX0hFQUQoJmd0LT5jbG9zZWRfdm1hKTsKPiAgIAlzcGluX2xvY2tfaW5pdCgmZ3QtPmNsb3Nl ZF9sb2NrKTsKPiAgIAo+IC0JaW50ZWxfZ3RfaW5pdF9oYW5nY2hlY2soZ3QpOwo+ICAgCWludGVs X2d0X2luaXRfcmVzZXQoZ3QpOwo+ICAgCWludGVsX2d0X2luaXRfcmVxdWVzdHMoZ3QpOwo+ICAg CWludGVsX2d0X3BtX2luaXRfZWFybHkoZ3QpOwo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9k cm0vaTkxNS9ndC9pbnRlbF9ndC5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3Qu aAo+IGluZGV4IGU2YWIwYmZmMGVmYi4uNWI2ZWZmZWQzNzEzIDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0LmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9pbnRlbF9ndC5oCj4gQEAgLTQ2LDggKzQ2LDYgQEAgdm9pZCBpbnRlbF9ndF9jbGVhcl9l cnJvcl9yZWdpc3RlcnMoc3RydWN0IGludGVsX2d0ICpndCwKPiAgIHZvaWQgaW50ZWxfZ3RfZmx1 c2hfZ2d0dF93cml0ZXMoc3RydWN0IGludGVsX2d0ICpndCk7Cj4gICB2b2lkIGludGVsX2d0X2No aXBzZXRfZmx1c2goc3RydWN0IGludGVsX2d0ICpndCk7Cj4gICAKPiAtdm9pZCBpbnRlbF9ndF9p bml0X2hhbmdjaGVjayhzdHJ1Y3QgaW50ZWxfZ3QgKmd0KTsKPiAtCj4gICBzdGF0aWMgaW5saW5l IHUzMiBpbnRlbF9ndF9zY3JhdGNoX29mZnNldChjb25zdCBzdHJ1Y3QgaW50ZWxfZ3QgKmd0LAo+ ICAgCQkJCQkgIGVudW0gaW50ZWxfZ3Rfc2NyYXRjaF9maWVsZCBmaWVsZCkKPiAgIHsKPiBAQCAt NTksNiArNTcsNCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaW50ZWxfZ3RfaXNfd2VkZ2VkKHN0cnVj dCBpbnRlbF9ndCAqZ3QpCj4gICAJcmV0dXJuIF9faW50ZWxfcmVzZXRfZmFpbGVkKCZndC0+cmVz ZXQpOwo+ICAgfQo+ICAgCj4gLXZvaWQgaW50ZWxfZ3RfcXVldWVfaGFuZ2NoZWNrKHN0cnVjdCBp bnRlbF9ndCAqZ3QpOwo+IC0KPiAgICNlbmRpZiAvKiBfX0lOVEVMX0dUX0hfXyAqLwo+IGRpZmYg LS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9wbS5jIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfcG0uYwo+IGluZGV4IDg3ZTM0ZTBiNjQyNy4uODVhZjBk MTZmODY5IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X3Bt LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF9wbS5jCj4gQEAgLTUy LDcgKzUyLDYgQEAgc3RhdGljIGludCBfX2d0X3VucGFyayhzdHJ1Y3QgaW50ZWxfd2FrZXJlZiAq d2YpCj4gICAKPiAgIAlpOTE1X3BtdV9ndF91bnBhcmtlZChpOTE1KTsKPiAgIAo+IC0JaW50ZWxf Z3RfcXVldWVfaGFuZ2NoZWNrKGd0KTsKPiAgIAlpbnRlbF9ndF91bnBhcmtfcmVxdWVzdHMoZ3Qp Owo+ICAgCj4gICAJcG1fbm90aWZ5KGd0LCBJTlRFTF9HVF9VTlBBUkspOwo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF90eXBlcy5oIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3QvaW50ZWxfZ3RfdHlwZXMuaAo+IGluZGV4IDgwMmY1MTZhMzQzMC4uNTlmOGVl MGFhMTUxIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2d0X3R5 cGVzLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9ndF90eXBlcy5oCj4g QEAgLTI2LDE0ICsyNiw2IEBAIHN0cnVjdCBpOTE1X2dndHQ7Cj4gICBzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzOwo+ICAgc3RydWN0IGludGVsX3VuY29yZTsKPiAgIAo+IC1zdHJ1Y3QgaW50ZWxfaGFu Z2NoZWNrIHsKPiAtCS8qIEZvciBoYW5nY2hlY2sgdGltZXIgKi8KPiAtI2RlZmluZSBEUk1fSTkx NV9IQU5HQ0hFQ0tfUEVSSU9EIDE1MDAgLyogaW4gbXMgKi8KPiAtI2RlZmluZSBEUk1fSTkxNV9I QU5HQ0hFQ0tfSklGRklFUyBtc2Vjc190b19qaWZmaWVzKERSTV9JOTE1X0hBTkdDSEVDS19QRVJJ T0QpCj4gLQo+IC0Jc3RydWN0IGRlbGF5ZWRfd29yayB3b3JrOwo+IC19Owo+IC0KPiAgIHN0cnVj dCBpbnRlbF9ndCB7Cj4gICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7Cj4gICAJc3Ry dWN0IGludGVsX3VuY29yZSAqdW5jb3JlOwo+IEBAIC02Nyw3ICs1OSw2IEBAIHN0cnVjdCBpbnRl bF9ndCB7Cj4gICAJc3RydWN0IGxpc3RfaGVhZCBjbG9zZWRfdm1hOwo+ICAgCXNwaW5sb2NrX3Qg Y2xvc2VkX2xvY2s7IC8qIGd1YXJkcyB0aGUgbGlzdCBvZiBjbG9zZWRfdm1hICovCj4gICAKPiAt CXN0cnVjdCBpbnRlbF9oYW5nY2hlY2sgaGFuZ2NoZWNrOwo+ICAgCXN0cnVjdCBpbnRlbF9yZXNl dCByZXNldDsKPiAgIAo+ICAgCS8qKgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9pbnRlbF9oYW5nY2hlY2suYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2hh bmdjaGVjay5jCj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggYzE0ZGJlYjNjY2Mz Li4wMDAwMDAwMDAwMDAKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9oYW5n Y2hlY2suYwo+ICsrKyAvZGV2L251bGwKPiBAQCAtMSwzNjEgKzAsMCBAQAo+IC0vKgo+IC0gKiBD b3B5cmlnaHQgwqkgMjAxNiBJbnRlbCBDb3Jwb3JhdGlvbgo+IC0gKgo+IC0gKiBQZXJtaXNzaW9u IGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5p bmcgYQo+IC0gKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRh dGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAo+IC0gKiB0byBkZWFsIGluIHRoZSBTb2Z0d2Fy ZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCj4gLSAq IHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmli dXRlLCBzdWJsaWNlbnNlLAo+IC0gKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJl LCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKPiAtICogU29mdHdhcmUgaXMgZnVy bmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKPiAt ICoKPiAtICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu b3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAo+IC0gKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1 ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCj4gLSAqIFNv ZnR3YXJlLgo+IC0gKgo+IC0gKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lU SE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgo+IC0gKiBJTVBMSUVELCBJTkNM VURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSwKPiAtICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCj4gLSAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBI T0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCj4gLSAqIExJ QUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJX SVNFLCBBUklTSU5HCj4gLSAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhF IFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKPiAtICogSU4gVEhFIFNPRlRX QVJFLgo+IC0gKgo+IC0gKi8KPiAtCj4gLSNpbmNsdWRlICJpOTE1X2Rydi5oIgo+IC0jaW5jbHVk ZSAiaW50ZWxfZW5naW5lLmgiCj4gLSNpbmNsdWRlICJpbnRlbF9ndC5oIgo+IC0jaW5jbHVkZSAi aW50ZWxfcmVzZXQuaCIKPiAtCj4gLXN0cnVjdCBoYW5nY2hlY2sgewo+IC0JdTY0IGFjdGhkOwo+ IC0JdTMyIHJpbmc7Cj4gLQl1MzIgaGVhZDsKPiAtCWVudW0gaW50ZWxfZW5naW5lX2hhbmdjaGVj a19hY3Rpb24gYWN0aW9uOwo+IC0JdW5zaWduZWQgbG9uZyBhY3Rpb25fdGltZXN0YW1wOwo+IC0J aW50IGRlYWRsb2NrOwo+IC0Jc3RydWN0IGludGVsX2luc3Rkb25lIGluc3Rkb25lOwo+IC0JYm9v bCB3ZWRnZWQ6MTsKPiAtCWJvb2wgc3RhbGxlZDoxOwo+IC19Owo+IC0KPiAtc3RhdGljIGJvb2wg aW5zdGRvbmVfdW5jaGFuZ2VkKHUzMiBjdXJyZW50X2luc3Rkb25lLCB1MzIgKm9sZF9pbnN0ZG9u ZSkKPiAtewo+IC0JdTMyIHRtcCA9IGN1cnJlbnRfaW5zdGRvbmUgfCAqb2xkX2luc3Rkb25lOwo+ IC0JYm9vbCB1bmNoYW5nZWQ7Cj4gLQo+IC0JdW5jaGFuZ2VkID0gdG1wID09ICpvbGRfaW5zdGRv bmU7Cj4gLQkqb2xkX2luc3Rkb25lIHw9IHRtcDsKPiAtCj4gLQlyZXR1cm4gdW5jaGFuZ2VkOwo+ IC19Cj4gLQo+IC1zdGF0aWMgYm9vbCBzdWJ1bml0c19zdHVjayhzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmUpCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9 IGVuZ2luZS0+aTkxNTsKPiAtCWNvbnN0IHN0cnVjdCBzc2V1X2Rldl9pbmZvICpzc2V1ID0gJlJV TlRJTUVfSU5GTyhkZXZfcHJpdiktPnNzZXU7Cj4gLQlzdHJ1Y3QgaW50ZWxfaW5zdGRvbmUgaW5z dGRvbmU7Cj4gLQlzdHJ1Y3QgaW50ZWxfaW5zdGRvbmUgKmFjY3VfaW5zdGRvbmUgPSAmZW5naW5l LT5oYW5nY2hlY2suaW5zdGRvbmU7Cj4gLQlib29sIHN0dWNrOwo+IC0JaW50IHNsaWNlOwo+IC0J aW50IHN1YnNsaWNlOwo+IC0KPiAtCWludGVsX2VuZ2luZV9nZXRfaW5zdGRvbmUoZW5naW5lLCAm aW5zdGRvbmUpOwo+IC0KPiAtCS8qIFRoZXJlIG1pZ2h0IGJlIHVuc3RhYmxlIHN1YnVuaXQgc3Rh dGVzIGV2ZW4gd2hlbgo+IC0JICogYWN0dWFsIGhlYWQgaXMgbm90IG1vdmluZy4gRmlsdGVyIG91 dCB0aGUgdW5zdGFibGUgb25lcyBieQo+IC0JICogYWNjdW11bGF0aW5nIHRoZSB1bmRvbmUgLT4g ZG9uZSB0cmFuc2l0aW9ucyBhbmQgb25seQo+IC0JICogY29uc2lkZXIgdGhvc2UgYXMgcHJvZ3Jl c3MuCj4gLQkgKi8KPiAtCXN0dWNrID0gaW5zdGRvbmVfdW5jaGFuZ2VkKGluc3Rkb25lLmluc3Rk b25lLAo+IC0JCQkJICAgJmFjY3VfaW5zdGRvbmUtPmluc3Rkb25lKTsKPiAtCXN0dWNrICY9IGlu c3Rkb25lX3VuY2hhbmdlZChpbnN0ZG9uZS5zbGljZV9jb21tb24sCj4gLQkJCQkgICAgJmFjY3Vf aW5zdGRvbmUtPnNsaWNlX2NvbW1vbik7Cj4gLQo+IC0JZm9yX2VhY2hfaW5zdGRvbmVfc2xpY2Vf c3Vic2xpY2UoZGV2X3ByaXYsIHNzZXUsIHNsaWNlLCBzdWJzbGljZSkgewo+IC0JCXN0dWNrICY9 IGluc3Rkb25lX3VuY2hhbmdlZChpbnN0ZG9uZS5zYW1wbGVyW3NsaWNlXVtzdWJzbGljZV0sCj4g LQkJCQkJICAgICZhY2N1X2luc3Rkb25lLT5zYW1wbGVyW3NsaWNlXVtzdWJzbGljZV0pOwo+IC0J CXN0dWNrICY9IGluc3Rkb25lX3VuY2hhbmdlZChpbnN0ZG9uZS5yb3dbc2xpY2VdW3N1YnNsaWNl XSwKPiAtCQkJCQkgICAgJmFjY3VfaW5zdGRvbmUtPnJvd1tzbGljZV1bc3Vic2xpY2VdKTsKPiAt CX0KPiAtCj4gLQlyZXR1cm4gc3R1Y2s7Cj4gLX0KPiAtCj4gLXN0YXRpYyBlbnVtIGludGVsX2Vu Z2luZV9oYW5nY2hlY2tfYWN0aW9uCj4gLWhlYWRfc3R1Y2soc3RydWN0IGludGVsX2VuZ2luZV9j cyAqZW5naW5lLCB1NjQgYWN0aGQpCj4gLXsKPiAtCWlmIChhY3RoZCAhPSBlbmdpbmUtPmhhbmdj aGVjay5hY3RoZCkgewo+IC0KPiAtCQkvKiBDbGVhciBzdWJ1bml0IHN0YXRlcyBvbiBoZWFkIG1v dmVtZW50ICovCj4gLQkJbWVtc2V0KCZlbmdpbmUtPmhhbmdjaGVjay5pbnN0ZG9uZSwgMCwKPiAt CQkgICAgICAgc2l6ZW9mKGVuZ2luZS0+aGFuZ2NoZWNrLmluc3Rkb25lKSk7Cj4gLQo+IC0JCXJl dHVybiBFTkdJTkVfQUNUSVZFX0hFQUQ7Cj4gLQl9Cj4gLQo+IC0JaWYgKCFzdWJ1bml0c19zdHVj ayhlbmdpbmUpKQo+IC0JCXJldHVybiBFTkdJTkVfQUNUSVZFX1NVQlVOSVRTOwo+IC0KPiAtCXJl dHVybiBFTkdJTkVfREVBRDsKPiAtfQo+IC0KPiAtc3RhdGljIGVudW0gaW50ZWxfZW5naW5lX2hh bmdjaGVja19hY3Rpb24KPiAtZW5naW5lX3N0dWNrKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSwgdTY0IGFjdGhkKQo+IC17Cj4gLQllbnVtIGludGVsX2VuZ2luZV9oYW5nY2hlY2tfYWN0 aW9uIGhhOwo+IC0JdTMyIHRtcDsKPiAtCj4gLQloYSA9IGhlYWRfc3R1Y2soZW5naW5lLCBhY3Ro ZCk7Cj4gLQlpZiAoaGEgIT0gRU5HSU5FX0RFQUQpCj4gLQkJcmV0dXJuIGhhOwo+IC0KPiAtCWlm IChJU19HRU4oZW5naW5lLT5pOTE1LCAyKSkKPiAtCQlyZXR1cm4gRU5HSU5FX0RFQUQ7Cj4gLQo+ IC0JLyogSXMgdGhlIGNoaXAgaGFuZ2luZyBvbiBhIFdBSVRfRk9SX0VWRU5UPwo+IC0JICogSWYg c28gd2UgY2FuIHNpbXBseSBwb2tlIHRoZSBSQl9XQUlUIGJpdAo+IC0JICogYW5kIGJyZWFrIHRo ZSBoYW5nLiBUaGlzIHNob3VsZCB3b3JrIG9uCj4gLQkgKiBhbGwgYnV0IHRoZSBzZWNvbmQgZ2Vu ZXJhdGlvbiBjaGlwc2V0cy4KPiAtCSAqLwo+IC0JdG1wID0gRU5HSU5FX1JFQUQoZW5naW5lLCBS SU5HX0NUTCk7Cj4gLQlpZiAodG1wICYgUklOR19XQUlUKSB7Cj4gLQkJaW50ZWxfZ3RfaGFuZGxl X2Vycm9yKGVuZ2luZS0+Z3QsIGVuZ2luZS0+bWFzaywgMCwKPiAtCQkJCSAgICAgICJzdHVjayB3 YWl0IG9uICVzIiwgZW5naW5lLT5uYW1lKTsKPiAtCQlFTkdJTkVfV1JJVEUoZW5naW5lLCBSSU5H X0NUTCwgdG1wKTsKPiAtCQlyZXR1cm4gRU5HSU5FX1dBSVRfS0lDSzsKPiAtCX0KPiAtCj4gLQly ZXR1cm4gRU5HSU5FX0RFQUQ7Cj4gLX0KPiAtCj4gLXN0YXRpYyB2b2lkIGhhbmdjaGVja19sb2Fk X3NhbXBsZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4gLQkJCQkgIHN0cnVjdCBo YW5nY2hlY2sgKmhjKQo+IC17Cj4gLQloYy0+YWN0aGQgPSBpbnRlbF9lbmdpbmVfZ2V0X2FjdGl2 ZV9oZWFkKGVuZ2luZSk7Cj4gLQloYy0+cmluZyA9IEVOR0lORV9SRUFEKGVuZ2luZSwgUklOR19T VEFSVCk7Cj4gLQloYy0+aGVhZCA9IEVOR0lORV9SRUFEKGVuZ2luZSwgUklOR19IRUFEKTsKPiAt fQo+IC0KPiAtc3RhdGljIHZvaWQgaGFuZ2NoZWNrX3N0b3JlX3NhbXBsZShzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUsCj4gLQkJCQkgICBjb25zdCBzdHJ1Y3QgaGFuZ2NoZWNrICpoYykK PiAtewo+IC0JZW5naW5lLT5oYW5nY2hlY2suYWN0aGQgPSBoYy0+YWN0aGQ7Cj4gLQllbmdpbmUt PmhhbmdjaGVjay5sYXN0X3JpbmcgPSBoYy0+cmluZzsKPiAtCWVuZ2luZS0+aGFuZ2NoZWNrLmxh c3RfaGVhZCA9IGhjLT5oZWFkOwo+IC19Cj4gLQo+IC1zdGF0aWMgZW51bSBpbnRlbF9lbmdpbmVf aGFuZ2NoZWNrX2FjdGlvbgo+IC1oYW5nY2hlY2tfZ2V0X2FjdGlvbihzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUsCj4gLQkJICAgICBjb25zdCBzdHJ1Y3QgaGFuZ2NoZWNrICpoYykKPiAt ewo+IC0JaWYgKGludGVsX2VuZ2luZV9pc19pZGxlKGVuZ2luZSkpCj4gLQkJcmV0dXJuIEVOR0lO RV9JRExFOwo+IC0KPiAtCWlmIChlbmdpbmUtPmhhbmdjaGVjay5sYXN0X3JpbmcgIT0gaGMtPnJp bmcpCj4gLQkJcmV0dXJuIEVOR0lORV9BQ1RJVkVfU0VRTk87Cj4gLQo+IC0JaWYgKGVuZ2luZS0+ aGFuZ2NoZWNrLmxhc3RfaGVhZCAhPSBoYy0+aGVhZCkKPiAtCQlyZXR1cm4gRU5HSU5FX0FDVElW RV9TRVFOTzsKPiAtCj4gLQlyZXR1cm4gZW5naW5lX3N0dWNrKGVuZ2luZSwgaGMtPmFjdGhkKTsK PiAtfQo+IC0KPiAtc3RhdGljIHZvaWQgaGFuZ2NoZWNrX2FjY3VtdWxhdGVfc2FtcGxlKHN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAtCQkJCQlzdHJ1Y3QgaGFuZ2NoZWNrICpoYykK PiAtewo+IC0JdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gSTkxNV9FTkdJTkVfREVBRF9USU1FT1VU Owo+IC0KPiAtCWhjLT5hY3Rpb24gPSBoYW5nY2hlY2tfZ2V0X2FjdGlvbihlbmdpbmUsIGhjKTsK PiAtCj4gLQkvKiBXZSBhbHdheXMgaW5jcmVtZW50IHRoZSBwcm9ncmVzcwo+IC0JICogaWYgdGhl IGVuZ2luZSBpcyBidXN5IGFuZCBzdGlsbCBwcm9jZXNzaW5nCj4gLQkgKiB0aGUgc2FtZSByZXF1 ZXN0LCBzbyB0aGF0IG5vIHNpbmdsZSByZXF1ZXN0Cj4gLQkgKiBjYW4gcnVuIGluZGVmaW5pdGVs eSAoc3VjaCBhcyBhIGNoYWluIG9mCj4gLQkgKiBiYXRjaGVzKS4gVGhlIG9ubHkgdGltZSB3ZSBk byBub3QgaW5jcmVtZW50Cj4gLQkgKiB0aGUgaGFuZ2NoZWNrIHNjb3JlIG9uIHRoaXMgcmluZywg aWYgdGhpcwo+IC0JICogZW5naW5lIGlzIGluIGEgbGVnaXRpbWF0ZSB3YWl0IGZvciBhbm90aGVy Cj4gLQkgKiBlbmdpbmUuIEluIHRoYXQgY2FzZSB0aGUgd2FpdGluZyBlbmdpbmUgaXMgYQo+IC0J ICogdmljdGltIGFuZCB3ZSB3YW50IHRvIGJlIHN1cmUgd2UgY2F0Y2ggdGhlCj4gLQkgKiByaWdo dCBjdWxwcml0LiBUaGVuIGV2ZXJ5IHRpbWUgd2UgZG8ga2ljawo+IC0JICogdGhlIHJpbmcsIG1h a2UgaXQgYXMgYSBwcm9ncmVzcyBhcyB0aGUgc2Vxbm8KPiAtCSAqIGFkdmFuY2VtZW50IG1pZ2h0 IGVuc3VyZSBhbmQgaWYgbm90LCBpdAo+IC0JICogd2lsbCBjYXRjaCB0aGUgaGFuZ2luZyBlbmdp bmUuCj4gLQkgKi8KPiAtCj4gLQlzd2l0Y2ggKGhjLT5hY3Rpb24pIHsKPiAtCWNhc2UgRU5HSU5F X0lETEU6Cj4gLQljYXNlIEVOR0lORV9BQ1RJVkVfU0VRTk86Cj4gLQkJLyogQ2xlYXIgaGVhZCBh bmQgc3VidW5pdCBzdGF0ZXMgb24gc2Vxbm8gbW92ZW1lbnQgKi8KPiAtCQloYy0+YWN0aGQgPSAw Owo+IC0KPiAtCQltZW1zZXQoJmVuZ2luZS0+aGFuZ2NoZWNrLmluc3Rkb25lLCAwLAo+IC0JCSAg ICAgICBzaXplb2YoZW5naW5lLT5oYW5nY2hlY2suaW5zdGRvbmUpKTsKPiAtCj4gLQkJLyogSW50 ZW50aW9uYWwgZmFsbCB0aHJvdWdoICovCj4gLQljYXNlIEVOR0lORV9XQUlUX0tJQ0s6Cj4gLQlj YXNlIEVOR0lORV9XQUlUOgo+IC0JCWVuZ2luZS0+aGFuZ2NoZWNrLmFjdGlvbl90aW1lc3RhbXAg PSBqaWZmaWVzOwo+IC0JCWJyZWFrOwo+IC0KPiAtCWNhc2UgRU5HSU5FX0FDVElWRV9IRUFEOgo+ IC0JY2FzZSBFTkdJTkVfQUNUSVZFX1NVQlVOSVRTOgo+IC0JCS8qCj4gLQkJICogU2Vxbm8gc3R1 Y2sgd2l0aCBzdGlsbCBhY3RpdmUgZW5naW5lIGdldHMgbGVld2F5LAo+IC0JCSAqIGluIGhvcGVz IHRoYXQgaXQgaXMganVzdCBhIGxvbmcgc2hhZGVyLgo+IC0JCSAqLwo+IC0JCXRpbWVvdXQgPSBJ OTE1X1NFUU5PX0RFQURfVElNRU9VVDsKPiAtCQlicmVhazsKPiAtCj4gLQljYXNlIEVOR0lORV9E RUFEOgo+IC0JCWJyZWFrOwo+IC0KPiAtCWRlZmF1bHQ6Cj4gLQkJTUlTU0lOR19DQVNFKGhjLT5h Y3Rpb24pOwo+IC0JfQo+IC0KPiAtCWhjLT5zdGFsbGVkID0gdGltZV9hZnRlcihqaWZmaWVzLAo+ IC0JCQkJIGVuZ2luZS0+aGFuZ2NoZWNrLmFjdGlvbl90aW1lc3RhbXAgKyB0aW1lb3V0KTsKPiAt CWhjLT53ZWRnZWQgPSB0aW1lX2FmdGVyKGppZmZpZXMsCj4gLQkJCQkgZW5naW5lLT5oYW5nY2hl Y2suYWN0aW9uX3RpbWVzdGFtcCArCj4gLQkJCQkgSTkxNV9FTkdJTkVfV0VER0VEX1RJTUVPVVQp Owo+IC19Cj4gLQo+IC1zdGF0aWMgdm9pZCBoYW5nY2hlY2tfZGVjbGFyZV9oYW5nKHN0cnVjdCBp bnRlbF9ndCAqZ3QsCj4gLQkJCQkgICBpbnRlbF9lbmdpbmVfbWFza190IGh1bmcsCj4gLQkJCQkg ICBpbnRlbF9lbmdpbmVfbWFza190IHN0dWNrKQo+IC17Cj4gLQlzdHJ1Y3QgaW50ZWxfZW5naW5l X2NzICplbmdpbmU7Cj4gLQlpbnRlbF9lbmdpbmVfbWFza190IHRtcDsKPiAtCWNoYXIgbXNnWzgw XTsKPiAtCWludCBsZW47Cj4gLQo+IC0JLyogSWYgc29tZSByaW5ncyBodW5nIGJ1dCBvdGhlcnMg d2VyZSBzdGlsbCBidXN5LCBvbmx5Cj4gLQkgKiBibGFtZSB0aGUgaGFuZ2luZyByaW5ncyBpbiB0 aGUgc3lub3BzaXMuCj4gLQkgKi8KPiAtCWlmIChzdHVjayAhPSBodW5nKQo+IC0JCWh1bmcgJj0g fnN0dWNrOwo+IC0JbGVuID0gc2NucHJpbnRmKG1zZywgc2l6ZW9mKG1zZyksCj4gLQkJCSIlcyBv biAiLCBzdHVjayA9PSBodW5nID8gIm5vIHByb2dyZXNzIiA6ICJoYW5nIik7Cj4gLQlmb3JfZWFj aF9lbmdpbmVfbWFza2VkKGVuZ2luZSwgZ3QtPmk5MTUsIGh1bmcsIHRtcCkKPiAtCQlsZW4gKz0g c2NucHJpbnRmKG1zZyArIGxlbiwgc2l6ZW9mKG1zZykgLSBsZW4sCj4gLQkJCQkgIiVzLCAiLCBl bmdpbmUtPm5hbWUpOwo+IC0JbXNnW2xlbi0yXSA9ICdcMCc7Cj4gLQo+IC0JcmV0dXJuIGludGVs X2d0X2hhbmRsZV9lcnJvcihndCwgaHVuZywgSTkxNV9FUlJPUl9DQVBUVVJFLCAiJXMiLCBtc2cp Owo+IC19Cj4gLQo+IC0vKgo+IC0gKiBUaGlzIGlzIGNhbGxlZCB3aGVuIHRoZSBjaGlwIGhhc24n dCByZXBvcnRlZCBiYWNrIHdpdGggY29tcGxldGVkCj4gLSAqIGJhdGNoYnVmZmVycyBpbiBhIGxv bmcgdGltZS4gV2Uga2VlcCB0cmFjayBwZXIgcmluZyBzZXFubyBwcm9ncmVzcyBhbmQKPiAtICog aWYgdGhlcmUgYXJlIG5vIHByb2dyZXNzLCBoYW5nY2hlY2sgc2NvcmUgZm9yIHRoYXQgcmluZyBp cyBpbmNyZWFzZWQuCj4gLSAqIEZ1cnRoZXIsIGFjdGhkIGlzIGluc3BlY3RlZCB0byBzZWUgaWYg dGhlIHJpbmcgaXMgc3R1Y2suIE9uIHN0dWNrIGNhc2UKPiAtICogd2Uga2ljayB0aGUgcmluZy4g SWYgd2Ugc2VlIG5vIHByb2dyZXNzIG9uIHRocmVlIHN1YnNlcXVlbnQgY2FsbHMKPiAtICogd2Ug YXNzdW1lIGNoaXAgaXMgd2VkZ2VkIGFuZCB0cnkgdG8gZml4IGl0IGJ5IHJlc2V0dGluZyB0aGUg Y2hpcC4KPiAtICovCj4gLXN0YXRpYyB2b2lkIGhhbmdjaGVja19lbGFwc2VkKHN0cnVjdCB3b3Jr X3N0cnVjdCAqd29yaykKPiAtewo+IC0Jc3RydWN0IGludGVsX2d0ICpndCA9Cj4gLQkJY29udGFp bmVyX29mKHdvcmssIHR5cGVvZigqZ3QpLCBoYW5nY2hlY2sud29yay53b3JrKTsKPiAtCWludGVs X2VuZ2luZV9tYXNrX3QgaHVuZyA9IDAsIHN0dWNrID0gMCwgd2VkZ2VkID0gMDsKPiAtCXN0cnVj dCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiAtCWVudW0gaW50ZWxfZW5naW5lX2lkIGlkOwo+ IC0JaW50ZWxfd2FrZXJlZl90IHdha2VyZWY7Cj4gLQo+IC0JaWYgKCFpOTE1X21vZHBhcmFtcy5l bmFibGVfaGFuZ2NoZWNrKQo+IC0JCXJldHVybjsKPiAtCj4gLQlpZiAoIVJFQURfT05DRShndC0+ YXdha2UpKQo+IC0JCXJldHVybjsKPiAtCj4gLQlpZiAoaW50ZWxfZ3RfaXNfd2VkZ2VkKGd0KSkK PiAtCQlyZXR1cm47Cj4gLQo+IC0Jd2FrZXJlZiA9IGludGVsX3J1bnRpbWVfcG1fZ2V0X2lmX2lu X3VzZShndC0+dW5jb3JlLT5ycG0pOwo+IC0JaWYgKCF3YWtlcmVmKQo+IC0JCXJldHVybjsKPiAt Cj4gLQkvKiBBcyBlbmFibGluZyB0aGUgR1BVIHJlcXVpcmVzIGZhaXJseSBleHRlbnNpdmUgbW1p byBhY2Nlc3MsCj4gLQkgKiBwZXJpb2RpY2FsbHkgYXJtIHRoZSBtbWlvIGNoZWNrZXIgdG8gc2Vl IGlmIHdlIGFyZSB0cmlnZ2VyaW5nCj4gLQkgKiBhbnkgaW52YWxpZCBhY2Nlc3MuCj4gLQkgKi8K PiAtCWludGVsX3VuY29yZV9hcm1fdW5jbGFpbWVkX21taW9fZGV0ZWN0aW9uKGd0LT51bmNvcmUp Owo+IC0KPiAtCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGd0LT5pOTE1LCBpZCkgewo+IC0JCXN0 cnVjdCBoYW5nY2hlY2sgaGM7Cj4gLQo+IC0JCWludGVsX2VuZ2luZV9icmVhZGNydW1ic19pcnEo ZW5naW5lKTsKPiAtCj4gLQkJaGFuZ2NoZWNrX2xvYWRfc2FtcGxlKGVuZ2luZSwgJmhjKTsKPiAt CQloYW5nY2hlY2tfYWNjdW11bGF0ZV9zYW1wbGUoZW5naW5lLCAmaGMpOwo+IC0JCWhhbmdjaGVj a19zdG9yZV9zYW1wbGUoZW5naW5lLCAmaGMpOwo+IC0KPiAtCQlpZiAoaGMuc3RhbGxlZCkgewo+ IC0JCQlodW5nIHw9IGVuZ2luZS0+bWFzazsKPiAtCQkJaWYgKGhjLmFjdGlvbiAhPSBFTkdJTkVf REVBRCkKPiAtCQkJCXN0dWNrIHw9IGVuZ2luZS0+bWFzazsKPiAtCQl9Cj4gLQo+IC0JCWlmICho Yy53ZWRnZWQpCj4gLQkJCXdlZGdlZCB8PSBlbmdpbmUtPm1hc2s7Cj4gLQl9Cj4gLQo+IC0JaWYg KEdFTV9TSE9XX0RFQlVHKCkgJiYgKGh1bmcgfCBzdHVjaykpIHsKPiAtCQlzdHJ1Y3QgZHJtX3By aW50ZXIgcCA9IGRybV9kZWJ1Z19wcmludGVyKCJoYW5nY2hlY2siKTsKPiAtCj4gLQkJZm9yX2Vh Y2hfZW5naW5lKGVuZ2luZSwgZ3QtPmk5MTUsIGlkKSB7Cj4gLQkJCWlmIChpbnRlbF9lbmdpbmVf aXNfaWRsZShlbmdpbmUpKQo+IC0JCQkJY29udGludWU7Cj4gLQo+IC0JCQlpbnRlbF9lbmdpbmVf ZHVtcChlbmdpbmUsICZwLCAiJXNcbiIsIGVuZ2luZS0+bmFtZSk7Cj4gLQkJfQo+IC0JfQo+IC0K PiAtCWlmICh3ZWRnZWQpIHsKPiAtCQlkZXZfZXJyKGd0LT5pOTE1LT5kcm0uZGV2LAo+IC0JCQki R1BVIHJlY292ZXJ5IHRpbWVkIG91dCwiCj4gLQkJCSIgY2FuY2VsbGluZyBhbGwgaW4tZmxpZ2h0 IHJlbmRlcmluZy5cbiIpOwo+IC0JCUdFTV9UUkFDRV9EVU1QKCk7Cj4gLQkJaW50ZWxfZ3Rfc2V0 X3dlZGdlZChndCk7Cj4gLQl9Cj4gLQo+IC0JaWYgKGh1bmcpCj4gLQkJaGFuZ2NoZWNrX2RlY2xh cmVfaGFuZyhndCwgaHVuZywgc3R1Y2spOwo+IC0KPiAtCWludGVsX3J1bnRpbWVfcG1fcHV0KGd0 LT51bmNvcmUtPnJwbSwgd2FrZXJlZik7Cj4gLQo+IC0JLyogUmVzZXQgdGltZXIgaW4gY2FzZSBH UFUgaGFuZ3Mgd2l0aG91dCBhbm90aGVyIHJlcXVlc3QgYmVpbmcgYWRkZWQgKi8KPiAtCWludGVs X2d0X3F1ZXVlX2hhbmdjaGVjayhndCk7Cj4gLX0KPiAtCj4gLXZvaWQgaW50ZWxfZ3RfcXVldWVf aGFuZ2NoZWNrKHN0cnVjdCBpbnRlbF9ndCAqZ3QpCj4gLXsKPiAtCXVuc2lnbmVkIGxvbmcgZGVs YXk7Cj4gLQo+IC0JaWYgKHVubGlrZWx5KCFpOTE1X21vZHBhcmFtcy5lbmFibGVfaGFuZ2NoZWNr KSkKPiAtCQlyZXR1cm47Cj4gLQo+IC0JLyoKPiAtCSAqIERvbid0IGNvbnRpbnVhbGx5IGRlZmVy IHRoZSBoYW5nY2hlY2sgc28gdGhhdCBpdCBpcyBhbHdheXMgcnVuIGF0Cj4gLQkgKiBsZWFzdCBv bmNlIGFmdGVyIHdvcmsgaGFzIGJlZW4gc2NoZWR1bGVkIG9uIGFueSByaW5nLiBPdGhlcndpc2Us Cj4gLQkgKiB3ZSB3aWxsIGlnbm9yZSBhIGh1bmcgcmluZyBpZiBhIHNlY29uZCByaW5nIGlzIGtl cHQgYnVzeS4KPiAtCSAqLwo+IC0KPiAtCWRlbGF5ID0gcm91bmRfamlmZmllc191cF9yZWxhdGl2 ZShEUk1fSTkxNV9IQU5HQ0hFQ0tfSklGRklFUyk7Cj4gLQlxdWV1ZV9kZWxheWVkX3dvcmsoc3lz dGVtX2xvbmdfd3EsICZndC0+aGFuZ2NoZWNrLndvcmssIGRlbGF5KTsKPiAtfQo+IC0KPiAtdm9p ZCBpbnRlbF9lbmdpbmVfaW5pdF9oYW5nY2hlY2soc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5n aW5lKQo+IC17Cj4gLQltZW1zZXQoJmVuZ2luZS0+aGFuZ2NoZWNrLCAwLCBzaXplb2YoZW5naW5l LT5oYW5nY2hlY2spKTsKPiAtCWVuZ2luZS0+aGFuZ2NoZWNrLmFjdGlvbl90aW1lc3RhbXAgPSBq aWZmaWVzOwo+IC19Cj4gLQo+IC12b2lkIGludGVsX2d0X2luaXRfaGFuZ2NoZWNrKHN0cnVjdCBp bnRlbF9ndCAqZ3QpCj4gLXsKPiAtCUlOSVRfREVMQVlFRF9XT1JLKCZndC0+aGFuZ2NoZWNrLndv cmssIGhhbmdjaGVja19lbGFwc2VkKTsKPiAtfQo+IC0KPiAtI2lmIElTX0VOQUJMRUQoQ09ORklH X0RSTV9JOTE1X1NFTEZURVNUKQo+IC0jaW5jbHVkZSAic2VsZnRlc3RfaGFuZ2NoZWNrLmMiCj4g LSNlbmRpZgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9yZXNl dC5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmVzZXQuYwo+IGluZGV4IDM0Nzkx ZmM3OWRlYS4uOWVkMmNmOTFhNDZkIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2d0L2ludGVsX3Jlc2V0LmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9y ZXNldC5jCj4gQEAgLTEwMTgsOCArMTAxOCw2IEBAIHZvaWQgaW50ZWxfZ3RfcmVzZXQoc3RydWN0 IGludGVsX2d0ICpndCwKPiAgIAlpZiAocmV0KQo+ICAgCQlnb3RvIHRhaW50Owo+ICAgCj4gLQlp bnRlbF9ndF9xdWV1ZV9oYW5nY2hlY2soZ3QpOwo+IC0KPiAgIGZpbmlzaDoKPiAgIAlyZXNldF9m aW5pc2goZ3QsIGF3YWtlKTsKPiAgIHVubG9jazoKPiBAQCAtMTM0Nyw0ICsxMzQ1LDUgQEAgdm9p ZCBfX2ludGVsX2Zpbmlfd2VkZ2Uoc3RydWN0IGludGVsX3dlZGdlX21lICp3KQo+ICAgCj4gICAj aWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX0k5MTVfU0VMRlRFU1QpCj4gICAjaW5jbHVkZSAic2Vs ZnRlc3RfcmVzZXQuYyIKPiArI2luY2x1ZGUgInNlbGZ0ZXN0X2hhbmdjaGVjay5jIgo+ICAgI2Vu ZGlmCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2hhbmdj aGVjay5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qvc2VsZnRlc3RfaGFuZ2NoZWNrLmMKPiBp bmRleCA1NjlhNDEwNWQ0OWUuLjU3MDU0NmVkYTVlOCAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9oYW5nY2hlY2suYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L3NlbGZ0ZXN0X2hhbmdjaGVjay5jCj4gQEAgLTE2ODYsNyArMTY4Niw2IEBAIGlu dCBpbnRlbF9oYW5nY2hlY2tfbGl2ZV9zZWxmdGVzdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUpCj4gICAJfTsKPiAgIAlzdHJ1Y3QgaW50ZWxfZ3QgKmd0ID0gJmk5MTUtPmd0Owo+ICAg CWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+IC0JYm9vbCBzYXZlZF9oYW5nY2hlY2s7Cj4gICAJ aW50IGVycjsKPiAgIAo+ICAgCWlmICghaW50ZWxfaGFzX2dwdV9yZXNldChndCkpCj4gQEAgLTE2 OTYsMTIgKzE2OTUsOSBAQCBpbnQgaW50ZWxfaGFuZ2NoZWNrX2xpdmVfc2VsZnRlc3RzKHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICAgCQlyZXR1cm4gLUVJTzsgLyogd2UncmUgbG9u ZyBwYXN0IGhvcGUgb2YgYSBzdWNjZXNzZnVsIHJlc2V0ICovCj4gICAKPiAgIAl3YWtlcmVmID0g aW50ZWxfcnVudGltZV9wbV9nZXQoZ3QtPnVuY29yZS0+cnBtKTsKPiAtCXNhdmVkX2hhbmdjaGVj ayA9IGZldGNoX2FuZF96ZXJvKCZpOTE1X21vZHBhcmFtcy5lbmFibGVfaGFuZ2NoZWNrKTsKPiAt CWRyYWluX2RlbGF5ZWRfd29yaygmZ3QtPmhhbmdjaGVjay53b3JrKTsgLyogZmx1c2ggcGFyYW0g Ki8KPiAgIAo+ICAgCWVyciA9IGludGVsX2d0X2xpdmVfc3VidGVzdHModGVzdHMsIGd0KTsKPiAg IAo+IC0JaTkxNV9tb2RwYXJhbXMuZW5hYmxlX2hhbmdjaGVjayA9IHNhdmVkX2hhbmdjaGVjazsK PiAgIAlpbnRlbF9ydW50aW1lX3BtX3B1dChndC0+dW5jb3JlLT5ycG0sIHdha2VyZWYpOwo+ICAg Cj4gICAJcmV0dXJuIGVycjsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9kZWJ1Z2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RlYnVnZnMuYwo+IGluZGV4 IDI3N2YzMTI5N2YyOS4uNTU4NTJlMDQ1YzNhIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZGVidWdmcy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9k ZWJ1Z2ZzLmMKPiBAQCAtMTAxMSw5MiArMTAxMSw2IEBAIHN0YXRpYyBpbnQgaTkxNV9mcmVxdWVu Y3lfaW5mbyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnVudXNlZCkKPiAgIAlyZXR1cm4gcmV0 Owo+ICAgfQo+ICAgCj4gLXN0YXRpYyB2b2lkIGk5MTVfaW5zdGRvbmVfaW5mbyhzdHJ1Y3QgZHJt X2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJCSAgICAgICBzdHJ1Y3Qgc2VxX2ZpbGUgKm0s Cj4gLQkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfaW5zdGRvbmUgKmluc3Rkb25lKQo+IC17Cj4gLQlj b25zdCBzdHJ1Y3Qgc3NldV9kZXZfaW5mbyAqc3NldSA9ICZSVU5USU1FX0lORk8oZGV2X3ByaXYp LT5zc2V1Owo+IC0JaW50IHNsaWNlOwo+IC0JaW50IHN1YnNsaWNlOwo+IC0KPiAtCXNlcV9wcmlu dGYobSwgIlx0XHRJTlNURE9ORTogMHglMDh4XG4iLAo+IC0JCSAgIGluc3Rkb25lLT5pbnN0ZG9u ZSk7Cj4gLQo+IC0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikgPD0gMykKPiAtCQlyZXR1cm47Cj4g LQo+IC0Jc2VxX3ByaW50ZihtLCAiXHRcdFNDX0lOU1RET05FOiAweCUwOHhcbiIsCj4gLQkJICAg aW5zdGRvbmUtPnNsaWNlX2NvbW1vbik7Cj4gLQo+IC0JaWYgKElOVEVMX0dFTihkZXZfcHJpdikg PD0gNikKPiAtCQlyZXR1cm47Cj4gLQo+IC0JZm9yX2VhY2hfaW5zdGRvbmVfc2xpY2Vfc3Vic2xp Y2UoZGV2X3ByaXYsIHNzZXUsIHNsaWNlLCBzdWJzbGljZSkKPiAtCQlzZXFfcHJpbnRmKG0sICJc dFx0U0FNUExFUl9JTlNURE9ORVslZF1bJWRdOiAweCUwOHhcbiIsCj4gLQkJCSAgIHNsaWNlLCBz dWJzbGljZSwgaW5zdGRvbmUtPnNhbXBsZXJbc2xpY2VdW3N1YnNsaWNlXSk7Cj4gLQo+IC0JZm9y X2VhY2hfaW5zdGRvbmVfc2xpY2Vfc3Vic2xpY2UoZGV2X3ByaXYsIHNzZXUsIHNsaWNlLCBzdWJz bGljZSkKPiAtCQlzZXFfcHJpbnRmKG0sICJcdFx0Uk9XX0lOU1RET05FWyVkXVslZF06IDB4JTA4 eFxuIiwKPiAtCQkJICAgc2xpY2UsIHN1YnNsaWNlLCBpbnN0ZG9uZS0+cm93W3NsaWNlXVtzdWJz bGljZV0pOwo+IC19Cj4gLQo+IC1zdGF0aWMgaW50IGk5MTVfaGFuZ2NoZWNrX2luZm8oc3RydWN0 IHNlcV9maWxlICptLCB2b2lkICp1bnVzZWQpCj4gLXsKPiAtCXN0cnVjdCBkcm1faTkxNV9wcml2 YXRlICppOTE1ID0gbm9kZV90b19pOTE1KG0tPnByaXZhdGUpOwo+IC0Jc3RydWN0IGludGVsX2d0 ICpndCA9ICZpOTE1LT5ndDsKPiAtCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiAt CWludGVsX3dha2VyZWZfdCB3YWtlcmVmOwo+IC0JZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Cj4g LQo+IC0Jc2VxX3ByaW50ZihtLCAiUmVzZXQgZmxhZ3M6ICVseFxuIiwgZ3QtPnJlc2V0LmZsYWdz KTsKPiAtCWlmICh0ZXN0X2JpdChJOTE1X1dFREdFRCwgJmd0LT5yZXNldC5mbGFncykpCj4gLQkJ c2VxX3B1dHMobSwgIlx0V2VkZ2VkXG4iKTsKPiAtCWlmICh0ZXN0X2JpdChJOTE1X1JFU0VUX0JB Q0tPRkYsICZndC0+cmVzZXQuZmxhZ3MpKQo+IC0JCXNlcV9wdXRzKG0sICJcdERldmljZSAoZ2xv YmFsKSByZXNldCBpbiBwcm9ncmVzc1xuIik7Cj4gLQo+IC0JaWYgKCFpOTE1X21vZHBhcmFtcy5l bmFibGVfaGFuZ2NoZWNrKSB7Cj4gLQkJc2VxX3B1dHMobSwgIkhhbmdjaGVjayBkaXNhYmxlZFxu Iik7Cj4gLQkJcmV0dXJuIDA7Cj4gLQl9Cj4gLQo+IC0JaWYgKHRpbWVyX3BlbmRpbmcoJmd0LT5o YW5nY2hlY2sud29yay50aW1lcikpCj4gLQkJc2VxX3ByaW50ZihtLCAiSGFuZ2NoZWNrIGFjdGl2 ZSwgdGltZXIgZmlyZXMgaW4gJWRtc1xuIiwKPiAtCQkJICAgamlmZmllc190b19tc2VjcyhndC0+ aGFuZ2NoZWNrLndvcmsudGltZXIuZXhwaXJlcyAtCj4gLQkJCQkJICAgIGppZmZpZXMpKTsKPiAt CWVsc2UgaWYgKGRlbGF5ZWRfd29ya19wZW5kaW5nKCZndC0+aGFuZ2NoZWNrLndvcmspKQo+IC0J CXNlcV9wdXRzKG0sICJIYW5nY2hlY2sgYWN0aXZlLCB3b3JrIHBlbmRpbmdcbiIpOwo+IC0JZWxz ZQo+IC0JCXNlcV9wdXRzKG0sICJIYW5nY2hlY2sgaW5hY3RpdmVcbiIpOwo+IC0KPiAtCXNlcV9w cmludGYobSwgIkdUIGFjdGl2ZT8gJXNcbiIsIHllc25vKGd0LT5hd2FrZSkpOwo+IC0KPiAtCXdp dGhfaW50ZWxfcnVudGltZV9wbSgmaTkxNS0+cnVudGltZV9wbSwgd2FrZXJlZikgewo+IC0JCWZv cl9lYWNoX2VuZ2luZShlbmdpbmUsIGk5MTUsIGlkKSB7Cj4gLQkJCXN0cnVjdCBpbnRlbF9pbnN0 ZG9uZSBpbnN0ZG9uZTsKPiAtCj4gLQkJCXNlcV9wcmludGYobSwgIiVzOiAlZCBtcyBhZ29cbiIs Cj4gLQkJCQkgICBlbmdpbmUtPm5hbWUsCj4gLQkJCQkgICBqaWZmaWVzX3RvX21zZWNzKGppZmZp ZXMgLQo+IC0JCQkJCQkgICAgZW5naW5lLT5oYW5nY2hlY2suYWN0aW9uX3RpbWVzdGFtcCkpOwo+ IC0KPiAtCQkJc2VxX3ByaW50ZihtLCAiXHRBQ1RIRCA9IDB4JTA4bGx4IFtjdXJyZW50IDB4JTA4 bGx4XVxuIiwKPiAtCQkJCSAgIChsb25nIGxvbmcpZW5naW5lLT5oYW5nY2hlY2suYWN0aGQsCj4g LQkJCQkgICBpbnRlbF9lbmdpbmVfZ2V0X2FjdGl2ZV9oZWFkKGVuZ2luZSkpOwo+IC0KPiAtCQkJ aW50ZWxfZW5naW5lX2dldF9pbnN0ZG9uZShlbmdpbmUsICZpbnN0ZG9uZSk7Cj4gLQo+IC0JCQlz ZXFfcHV0cyhtLCAiXHRpbnN0ZG9uZSByZWFkID1cbiIpOwo+IC0JCQlpOTE1X2luc3Rkb25lX2lu Zm8oaTkxNSwgbSwgJmluc3Rkb25lKTsKPiAtCj4gLQkJCXNlcV9wdXRzKG0sICJcdGluc3Rkb25l IGFjY3UgPVxuIik7Cj4gLQkJCWk5MTVfaW5zdGRvbmVfaW5mbyhpOTE1LCBtLAo+IC0JCQkJCSAg ICZlbmdpbmUtPmhhbmdjaGVjay5pbnN0ZG9uZSk7Cj4gLQkJfQo+IC0JfQo+IC0KPiAtCXJldHVy biAwOwo+IC19Cj4gLQo+ICAgc3RhdGljIGludCBpcm9ubGFrZV9kcnBjX2luZm8oc3RydWN0IHNl cV9maWxlICptKQo+ICAgewo+ICAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gbm9k ZV90b19pOTE1KG0tPnByaXZhdGUpOwo+IEBAIC00MzAzLDcgKzQyMTcsNiBAQCBzdGF0aWMgY29u c3Qgc3RydWN0IGRybV9pbmZvX2xpc3QgaTkxNV9kZWJ1Z2ZzX2xpc3RbXSA9IHsKPiAgIAl7Imk5 MTVfZ3VjX3N0YWdlX3Bvb2wiLCBpOTE1X2d1Y19zdGFnZV9wb29sLCAwfSwKPiAgIAl7Imk5MTVf aHVjX2xvYWRfc3RhdHVzIiwgaTkxNV9odWNfbG9hZF9zdGF0dXNfaW5mbywgMH0sCj4gICAJeyJp OTE1X2ZyZXF1ZW5jeV9pbmZvIiwgaTkxNV9mcmVxdWVuY3lfaW5mbywgMH0sCj4gLQl7Imk5MTVf aGFuZ2NoZWNrX2luZm8iLCBpOTE1X2hhbmdjaGVja19pbmZvLCAwfSwKPiAgIAl7Imk5MTVfZHJw Y19pbmZvIiwgaTkxNV9kcnBjX2luZm8sIDB9LAo+ICAgCXsiaTkxNV9yaW5nX2ZyZXFfdGFibGUi LCBpOTE1X3JpbmdfZnJlcV90YWJsZSwgMH0sCj4gICAJeyJpOTE1X2Zyb250YnVmZmVyX3RyYWNr aW5nIiwgaTkxNV9mcm9udGJ1ZmZlcl90cmFja2luZywgMH0sCj4gZGlmZiAtLWdpdCBhL2RyaXZl cnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Ry di5jCj4gaW5kZXggZjAyYTM0NzIyMjE3Li4xZGFlNDNlZDRjNDggMTAwNjQ0Cj4gLS0tIGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmMKPiBAQCAtMTU0NiwxMCArMTU0Niw3IEBAIHZvaWQgaTkxNV9kcml2ZXJfcmVt b3ZlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICAgCj4gICAJaTkxNV9kcml2ZXJf bW9kZXNldF9yZW1vdmUoaTkxNSk7Cj4gICAKPiAtCS8qIEZyZWUgZXJyb3Igc3RhdGUgYWZ0ZXIg aW50ZXJydXB0cyBhcmUgZnVsbHkgZGlzYWJsZWQuICovCj4gLQljYW5jZWxfZGVsYXllZF93b3Jr X3N5bmMoJmk5MTUtPmd0LmhhbmdjaGVjay53b3JrKTsKPiAgIAlpOTE1X3Jlc2V0X2Vycm9yX3N0 YXRlKGk5MTUpOwo+IC0KPiAgIAlpOTE1X2dlbV9kcml2ZXJfcmVtb3ZlKGk5MTUpOwo+ICAgCj4g ICAJaW50ZWxfcG93ZXJfZG9tYWluc19kcml2ZXJfcmVtb3ZlKGk5MTUpOwo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv aTkxNV9kcnYuaAo+IGluZGV4IGQyODRiMDRjNDkyYi4uNTgzNDBjOTlhZjAyIDEwMDY0NAo+IC0t LSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiArKysgYi9kcml2ZXJzL2dwdS9k cm0vaTkxNS9pOTE1X2Rydi5oCj4gQEAgLTE4NDUsNyArMTg0NSw2IEBAIHZvaWQgaTkxNV9kcml2 ZXJfcmVtb3ZlKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKPiAgIGludCBpOTE1X3Jl c3VtZV9zd2l0Y2hlcm9vKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KTsKPiAgIGludCBp OTE1X3N1c3BlbmRfc3dpdGNoZXJvbyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSwgcG1f bWVzc2FnZV90IHN0YXRlKTsKPiAgIAo+IC12b2lkIGludGVsX2VuZ2luZV9pbml0X2hhbmdjaGVj ayhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpOwo+ICAgaW50IHZsdl9mb3JjZV9nZnhf Y2xvY2soc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2LCBib29sIG9uKTsKPiAgIAo+ ICAgc3RhdGljIGlubGluZSBib29sIGludGVsX2d2dF9hY3RpdmUoc3RydWN0IGRybV9pOTE1X3By aXZhdGUgKmRldl9wcml2KQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1 X2dwdV9lcnJvci5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuYwo+IGlu ZGV4IDVjZjRlZWQ1YWRkOC4uNDcyMzlkZjY1M2YyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dwdV9lcnJvci5jCj4gQEAgLTUzNCwxMCArNTM0LDYgQEAgc3RhdGljIHZvaWQgZXJyb3Jf cHJpbnRfZW5naW5lKHN0cnVjdCBkcm1faTkxNV9lcnJvcl9zdGF0ZV9idWYgKm0sCj4gICAJfQo+ ICAgCWVycl9wcmludGYobSwgIiAgcmluZy0+aGVhZDogMHglMDh4XG4iLCBlZS0+Y3B1X3Jpbmdf aGVhZCk7Cj4gICAJZXJyX3ByaW50ZihtLCAiICByaW5nLT50YWlsOiAweCUwOHhcbiIsIGVlLT5j cHVfcmluZ190YWlsKTsKPiAtCWVycl9wcmludGYobSwgIiAgaGFuZ2NoZWNrIHRpbWVzdGFtcDog JWRtcyAoJWx1JXMpXG4iLAo+IC0JCSAgIGppZmZpZXNfdG9fbXNlY3MoZWUtPmhhbmdjaGVja190 aW1lc3RhbXAgLSBlcG9jaCksCj4gLQkJICAgZWUtPmhhbmdjaGVja190aW1lc3RhbXAsCj4gLQkJ ICAgZWUtPmhhbmdjaGVja190aW1lc3RhbXAgPT0gZXBvY2ggPyAiOyBlcG9jaCIgOiAiIik7Cj4g ICAJZXJyX3ByaW50ZihtLCAiICBlbmdpbmUgcmVzZXQgY291bnQ6ICV1XG4iLCBlZS0+cmVzZXRf Y291bnQpOwo+ICAgCj4gICAJZm9yIChuID0gMDsgbiA8IGVlLT5udW1fcG9ydHM7IG4rKykgewo+ IEBAIC02NzksMTEgKzY3NSw4IEBAIHN0YXRpYyB2b2lkIF9fZXJyX3ByaW50X3RvX3NnbChzdHJ1 Y3QgZHJtX2k5MTVfZXJyb3Jfc3RhdGVfYnVmICptLAo+ICAgCXRzID0ga3RpbWVfdG9fdGltZXNw ZWM2NChlcnJvci0+dXB0aW1lKTsKPiAgIAllcnJfcHJpbnRmKG0sICJVcHRpbWU6ICVsbGQgcyAl bGQgdXNcbiIsCj4gICAJCSAgIChzNjQpdHMudHZfc2VjLCB0cy50dl9uc2VjIC8gTlNFQ19QRVJf VVNFQyk7Cj4gLQllcnJfcHJpbnRmKG0sICJFcG9jaDogJWx1IGppZmZpZXMgKCV1IEhaKVxuIiwg ZXJyb3ItPmVwb2NoLCBIWik7Cj4gLQllcnJfcHJpbnRmKG0sICJDYXB0dXJlOiAlbHUgamlmZmll czsgJWQgbXMgYWdvLCAlZCBtcyBhZnRlciBlcG9jaFxuIiwKPiAtCQkgICBlcnJvci0+Y2FwdHVy ZSwKPiAtCQkgICBqaWZmaWVzX3RvX21zZWNzKGppZmZpZXMgLSBlcnJvci0+Y2FwdHVyZSksCj4g LQkJICAgamlmZmllc190b19tc2VjcyhlcnJvci0+Y2FwdHVyZSAtIGVycm9yLT5lcG9jaCkpOwo+ ICsJZXJyX3ByaW50ZihtLCAiQ2FwdHVyZTogJWx1IGppZmZpZXM7ICVkIG1zIGFnb1xuIiwKPiAr CQkgICBlcnJvci0+Y2FwdHVyZSwgamlmZmllc190b19tc2VjcyhqaWZmaWVzIC0gZXJyb3ItPmNh cHR1cmUpKTsKPiAgIAo+ICAgCWZvciAoZWUgPSBlcnJvci0+ZW5naW5lOyBlZTsgZWUgPSBlZS0+ bmV4dCkKPiAgIAkJZXJyX3ByaW50ZihtLCAiQWN0aXZlIHByb2Nlc3MgKG9uIHJpbmcgJXMpOiAl cyBbJWRdXG4iLAo+IEBAIC03NDIsNyArNzM1LDcgQEAgc3RhdGljIHZvaWQgX19lcnJfcHJpbnRf dG9fc2dsKHN0cnVjdCBkcm1faTkxNV9lcnJvcl9zdGF0ZV9idWYgKm0sCj4gICAJCWVycl9wcmlu dGYobSwgIkdUVF9DQUNIRV9FTjogMHglMDh4XG4iLCBlcnJvci0+Z3R0X2NhY2hlKTsKPiAgIAo+ ICAgCWZvciAoZWUgPSBlcnJvci0+ZW5naW5lOyBlZTsgZWUgPSBlZS0+bmV4dCkKPiAtCQllcnJv cl9wcmludF9lbmdpbmUobSwgZWUsIGVycm9yLT5lcG9jaCk7Cj4gKwkJZXJyb3JfcHJpbnRfZW5n aW5lKG0sIGVlLCBlcnJvci0+Y2FwdHVyZSk7Cj4gICAKPiAgIAlmb3IgKGVlID0gZXJyb3ItPmVu Z2luZTsgZWU7IGVlID0gZWUtPm5leHQpIHsKPiAgIAkJY29uc3Qgc3RydWN0IGRybV9pOTE1X2Vy cm9yX29iamVjdCAqb2JqOwo+IEBAIC03NzAsNyArNzYzLDcgQEAgc3RhdGljIHZvaWQgX19lcnJf cHJpbnRfdG9fc2dsKHN0cnVjdCBkcm1faTkxNV9lcnJvcl9zdGF0ZV9idWYgKm0sCj4gICAJCQlm b3IgKGogPSAwOyBqIDwgZWUtPm51bV9yZXF1ZXN0czsgaisrKQo+ICAgCQkJCWVycm9yX3ByaW50 X3JlcXVlc3QobSwgIiAiLAo+ICAgCQkJCQkJICAgICZlZS0+cmVxdWVzdHNbal0sCj4gLQkJCQkJ CSAgICBlcnJvci0+ZXBvY2gpOwo+ICsJCQkJCQkgICAgZXJyb3ItPmNhcHR1cmUpOwo+ICAgCQl9 Cj4gICAKPiAgIAkJcHJpbnRfZXJyb3Jfb2JqKG0sIGVlLT5lbmdpbmUsICJyaW5nYnVmZmVyIiwg ZWUtPnJpbmdidWZmZXIpOwo+IEBAIC0xMTQ0LDggKzExMzcsNiBAQCBzdGF0aWMgdm9pZCBlcnJv cl9yZWNvcmRfZW5naW5lX3JlZ2lzdGVycyhzdHJ1Y3QgaTkxNV9ncHVfc3RhdGUgKmVycm9yLAo+ ICAgCX0KPiAgIAo+ICAgCWVlLT5pZGxlID0gaW50ZWxfZW5naW5lX2lzX2lkbGUoZW5naW5lKTsK PiAtCWlmICghZWUtPmlkbGUpCj4gLQkJZWUtPmhhbmdjaGVja190aW1lc3RhbXAgPSBlbmdpbmUt PmhhbmdjaGVjay5hY3Rpb25fdGltZXN0YW1wOwo+ICAgCWVlLT5yZXNldF9jb3VudCA9IGk5MTVf cmVzZXRfZW5naW5lX2NvdW50KCZkZXZfcHJpdi0+Z3B1X2Vycm9yLAo+ICAgCQkJCQkJICBlbmdp bmUpOwo+ICAgCj4gQEAgLTE2NTcsMjAgKzE2NDgsNiBAQCBzdGF0aWMgdm9pZCBjYXB0dXJlX3Bh cmFtcyhzdHJ1Y3QgaTkxNV9ncHVfc3RhdGUgKmVycm9yKQo+ICAgCWk5MTVfcGFyYW1zX2NvcHko JmVycm9yLT5wYXJhbXMsICZpOTE1X21vZHBhcmFtcyk7Cj4gICB9Cj4gICAKPiAtc3RhdGljIHVu c2lnbmVkIGxvbmcgY2FwdHVyZV9maW5kX2Vwb2NoKGNvbnN0IHN0cnVjdCBpOTE1X2dwdV9zdGF0 ZSAqZXJyb3IpCj4gLXsKPiAtCWNvbnN0IHN0cnVjdCBkcm1faTkxNV9lcnJvcl9lbmdpbmUgKmVl Owo+IC0JdW5zaWduZWQgbG9uZyBlcG9jaCA9IGVycm9yLT5jYXB0dXJlOwo+IC0KPiAtCWZvciAo ZWUgPSBlcnJvci0+ZW5naW5lOyBlZTsgZWUgPSBlZS0+bmV4dCkgewo+IC0JCWlmIChlZS0+aGFu Z2NoZWNrX3RpbWVzdGFtcCAmJgo+IC0JCSAgICB0aW1lX2JlZm9yZShlZS0+aGFuZ2NoZWNrX3Rp bWVzdGFtcCwgZXBvY2gpKQo+IC0JCQllcG9jaCA9IGVlLT5oYW5nY2hlY2tfdGltZXN0YW1wOwo+ IC0JfQo+IC0KPiAtCXJldHVybiBlcG9jaDsKPiAtfQo+IC0KPiAgIHN0YXRpYyB2b2lkIGNhcHR1 cmVfZmluaXNoKHN0cnVjdCBpOTE1X2dwdV9zdGF0ZSAqZXJyb3IpCj4gICB7Cj4gICAJc3RydWN0 IGk5MTVfZ2d0dCAqZ2d0dCA9ICZlcnJvci0+aTkxNS0+Z2d0dDsKPiBAQCAtMTcyMiw4ICsxNjk5 LDYgQEAgaTkxNV9jYXB0dXJlX2dwdV9zdGF0ZShzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkx NSkKPiAgIAllcnJvci0+b3ZlcmxheSA9IGludGVsX292ZXJsYXlfY2FwdHVyZV9lcnJvcl9zdGF0 ZShpOTE1KTsKPiAgIAllcnJvci0+ZGlzcGxheSA9IGludGVsX2Rpc3BsYXlfY2FwdHVyZV9lcnJv cl9zdGF0ZShpOTE1KTsKPiAgIAo+IC0JZXJyb3ItPmVwb2NoID0gY2FwdHVyZV9maW5kX2Vwb2No KGVycm9yKTsKPiAtCj4gICAJY2FwdHVyZV9maW5pc2goZXJyb3IpOwo+ICAgCWNvbXByZXNzX2Zp bmkoJmNvbXByZXNzKTsKPiAgIAo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p OTE1X2dwdV9lcnJvci5oIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9ncHVfZXJyb3IuaAo+ IGluZGV4IDdmMWNkMGIxZmVmNy4uNGRjMzZkNmVlM2EyIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2k5MTVfZ3B1X2Vycm9yLmgKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dwdV9lcnJvci5oCj4gQEAgLTM0LDcgKzM0LDYgQEAgc3RydWN0IGk5MTVfZ3B1X3N0 YXRlIHsKPiAgIAlrdGltZV90IGJvb3R0aW1lOwo+ICAgCWt0aW1lX3QgdXB0aW1lOwo+ICAgCXVu c2lnbmVkIGxvbmcgY2FwdHVyZTsKPiAtCXVuc2lnbmVkIGxvbmcgZXBvY2g7Cj4gICAKPiAgIAlz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNTsKPiAgIAo+IEBAIC04Niw3ICs4NSw2IEBAIHN0 cnVjdCBpOTE1X2dwdV9zdGF0ZSB7Cj4gICAKPiAgIAkJLyogU29mdHdhcmUgdHJhY2tlZCBzdGF0 ZSAqLwo+ICAgCQlib29sIGlkbGU7Cj4gLQkJdW5zaWduZWQgbG9uZyBoYW5nY2hlY2tfdGltZXN0 YW1wOwo+ICAgCQlpbnQgbnVtX3JlcXVlc3RzOwo+ICAgCQl1MzIgcmVzZXRfY291bnQ7Cj4gICAK PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wcmlvbGlzdF90eXBlcy5o IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9wcmlvbGlzdF90eXBlcy5oCj4gaW5kZXggYWU4 YmIzY2I2MjdlLi43MzJhYWQxNDg4ODEgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9wcmlvbGlzdF90eXBlcy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9wcmlvbGlzdF90eXBlcy5oCj4gQEAgLTE2LDYgKzE2LDEyIEBAIGVudW0gewo+ICAgCUk5MTVf UFJJT1JJVFlfTUlOID0gSTkxNV9DT05URVhUX01JTl9VU0VSX1BSSU9SSVRZIC0gMSwKPiAgIAlJ OTE1X1BSSU9SSVRZX05PUk1BTCA9IEk5MTVfQ09OVEVYVF9ERUZBVUxUX1BSSU9SSVRZLAo+ICAg CUk5MTVfUFJJT1JJVFlfTUFYID0gSTkxNV9DT05URVhUX01BWF9VU0VSX1BSSU9SSVRZICsgMSwK PiArCj4gKwkvKiBBIHByZWVtcHRpdmUgcHVsc2UgdXNlZCB0byBtb25pdG9yIHRoZSBoZWFsdGgg b2YgZWFjaCBlbmdpbmUgKi8KPiArCUk5MTVfUFJJT1JJVFlfSEVBUlRCRUFULAo+ICsKPiArCS8q IEludGVyYWN0aXZlIHdvcmtsb2FkLCBzY2hlZHVsZWQgZm9yIGltbWVkaWF0ZSBwYWdlZmxpcHBp bmcgKi8KPiArCUk5MTVfUFJJT1JJVFlfRElTUExBWSwKPiAgIH07Cj4gICAKPiAgICNkZWZpbmUg STkxNV9VU0VSX1BSSU9SSVRZX1NISUZUIDIKPiAKClJlZ2FyZHMsCgpUdnJ0a28KX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcg bGlzdApJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRl c2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4