From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH] drm/i915: Engine relative MMIO Date: Thu, 20 Jun 2019 17:33:12 +0100 Message-ID: <43ff893f-a53a-a808-676b-ea5b2eed2ff3@linux.intel.com> References: <20190513194552.6600-1-John.C.Harrison@Intel.com> <20190620072444.GA6272@sdutt> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga04.intel.com (mga04.intel.com [192.55.52.120]) by gabe.freedesktop.org (Postfix) with ESMTPS id D20436E5D4 for ; Thu, 20 Jun 2019 16:33:15 +0000 (UTC) In-Reply-To: <20190620072444.GA6272@sdutt> 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: Matthew Brost , John.C.Harrison@Intel.com, Intel-GFX@Lists.FreeDesktop.Org, Chris Wilson , Chris P List-Id: intel-gfx@lists.freedesktop.org CltmaXhlZCBDaHJpcycgZW1haWxdCgpPbiAyMC8wNi8yMDE5IDA4OjI0LCBNYXR0aGV3IEJyb3N0 IHdyb3RlOgo+IE9uIE1vbiwgTWF5IDEzLCAyMDE5IGF0IDEyOjQ1OjUyUE0gLTA3MDAsIEpvaG4u Qy5IYXJyaXNvbkBJbnRlbC5jb20gd3JvdGU6Cj4+IEZyb206IEpvaG4gSGFycmlzb24gPEpvaG4u Qy5IYXJyaXNvbkBJbnRlbC5jb20+Cj4+Cj4+IFdpdGggdmlydHVhbCBlbmdpbmVzLCBpdCBpcyBu byBsb25nZXIgcG9zc2libGUgdG8ga25vdyB3aGljaCBzcGVjaWZpYwo+PiBwaHlzaWNhbCBlbmdp bmUgYSBnaXZlbiByZXF1ZXN0IHdpbGwgYmUgZXhlY3V0ZWQgb24gYXQgdGhlIHRpbWUgdGhhdAo+ PiByZXF1ZXN0IGlzIGdlbmVyYXRlZC4gVGhpcyBtZWFucyB0aGF0IHRoZSByZXF1ZXN0IGl0c2Vs ZiBtdXN0IGJlIGVuZ2luZQo+PiBhZ25vc3RpYyAtIGFueSBkaXJlY3QgcmVnaXN0ZXIgd3JpdGVz IG11c3QgYmUgcmVsYXRpdmUgdG8gdGhlIGVuZ2luZQo+PiBhbmQgbm90IGFic29sdXRlIGFkZHJl c3Nlcy4KPj4KPj4gVGhlIExSSSBjb21tYW5kIGhhcyBzdXBwb3J0IGZvciBlbmdpbmUgcmVsYXRp dmUgYWRkcmVzc2luZy4gSG93ZXZlciwKPj4gdGhlIG1lY2hhbmlzbSBpcyBub3QgdHJhbnNwYXJl bnQgdG8gdGhlIGRyaXZlci4gVGhlIHNjaGVtZSBmb3IgR2VuMTEKPj4gKE1JX0xSSV9BRERfQ1Nf TU1JT19TVEFSVCkgcmVxdWlyZXMgdGhlIExSSSBhZGRyZXNzIHRvIGhhdmUgbm8KPj4gYWJzb2x1 dGUgZW5naW5lIGJhc2UgY29tcG9uZW50LiBUaGUgaGFyZHdhcmUgdGhlbiBhZGRzIG9uIHRoZSBj b3JyZWN0Cj4+IGVuZ2luZSBvZmZzZXQgYXQgZXhlY3V0aW9uIHRpbWUuCj4+Cj4+IER1ZSB0byB0 aGUgbm9uLXRyaXZpYWwgYW5kIGRpZmZlcmluZyBzY2hlbWVzIG9uIGRpZmZlcmVudCBoYXJkd2Fy ZSwgaXQKPj4gaXMgbm90IHBvc3NpYmxlIHRvIHNpbXBseSB1cGRhdGUgdGhlIGNvZGUgdGhhdCBj cmVhdGVzIHRoZSBMUkkKPj4gY29tbWFuZHMgdG8gc2V0IGEgcmVtYXAgZmxhZyBhbmQgbGV0IHRo ZSBoYXJkd2FyZSBnZXQgb24gd2l0aCBpdC4KPj4gSW5zdGVhZCwgdGhpcyBwYXRjaCBhZGRzIGZ1 bmN0aW9uIHdyYXBwZXJzIGZvciBnZW5lcmF0aW5nIHRoZSBMUkkKPj4gY29tbWFuZCBpdHNlbGYg YW5kIHRoZW4gZm9yIGNvbnN0cnVjdGluZyB0aGUgY29ycmVjdCBhZGRyZXNzIHRvIHVzZQo+PiB3 aXRoIHRoZSBMUkkuCj4+Cj4+IHYyOiBGaXggYnVpbGQgYnJlYWsgaW4gR1ZULiBSZW1vdmUgZmxh Z3MgcGFyYW1ldGVyIFtyZXZpZXcgZmVlZGJhY2sKPj4gZnJvbSBDaHJpcyBXXS4KPj4KPj4gdjM6 IEZpeCBidWlsZCBicmVhayBpbiBzZWxmdGVzdC4gUmViYXNlIHRvIG5ld2VyIGJhc2UgdHJlZSBh bmQgZml4Cj4+IG1lcmdlIGNvbmZsaWN0Lgo+Pgo+PiB2NDogTW9yZSByZWJhc2luZy4gUm1vdmVk IHJlbGF0aXZlIGFkZHJlc3Npbmcgc3VwcG9ydCBmcm9tIEdlbjctOSBvbmx5Cj4+IGNvZGUgcGF0 aHMgW3JldmlldyBmZWVkYmFjayBmcm9tIENocmlzIFddLgo+Pgo+PiB2NTogTW9yZSByZWJhc2lu ZyAobmV3ICdndCcgZGlyZWN0b3J5KS4gRml4IHdoaXRlIHNwYWNlIGlzc3VlLiBVc2UKPj4gQ09Q WSBjbGFzcyByYXRoZXIgdGhhbiBCQ1MwIGlkIGZvciBjaGVja2luZyBhZ2FpbnN0IEJDUyBlbmdp bmUuCj4+Cj4+IFNpZ25lZC1vZmYtYnk6IEpvaG4gSGFycmlzb24gPEpvaG4uQy5IYXJyaXNvbkBJ bnRlbC5jb20+Cj4+IENDOiBSb2RyaWdvIFZpdmkgPHJvZHJpZ28udml2aUBpbnRlbC5jb20+Cj4+ IENDOiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AbGludXguaW50ZWwuY29tPgo+PiBD QzogV2lsc29uLCBDaHJpcyBQIDxjaHJpcy5wLndpbHNvbkBpbnRlbC5jb20+Cj4gCj4gSSd2ZSBy ZXZpZXdlZCB0aGlzIHNlcmllcyBhbmQgdG8gbWUgaXQgbG9va3MgbGlrZSBhbGwgdGhlIGNvbmNl cm5zIGhhdmUgCj4gYmVlbgo+IGFkZHJlc3NlZCArIENJIGlzIHBhc3NpbmcuIERvIG5vdCBmZWVs IGNvbWZvcnRhYmxlIGdpdmUgYSBSLUIgYnV0IHRoaXMgCj4gcGF0Y2ggaXMKPiBuZWVkZWQgZm9y IGEgc2VyaWVzIEknbSB3b3JraW5nIG9uIHNvIEknZCBsaWtlIHRvIHNlZSBpdCBtZXJnZWQuIEdl bnRsZSAKPiBwaW5nIHRvCj4gZ2V0IHRoaXMgbWVyZ2VkLgoKQUZBSVIgdGhlIGNvbmNsdXNpb24g YmV0d2VlbiBSb2RyaWdvIGFuZCBtZSB3YXMgdG8gbGVhdmUgdGhlIGV4aXN0aW5nIAptYWNybyBh cyBpcyBhbmQgbGVhdmUgYSBuZXcgb25lIChpbiB1cHBlcmNhc2UpIGZvciByZWxhdGl2ZSBhZGRy ZXNzaW5nLgoKU28gbGVhdmUgTUlfTE9BRF9SRUdJU1RFUl9JTU0gYXMgaXMsIGFkZCBNSV9MT0FE X1JFR0lTVEVSX0lNTV9SRUwgZm9yIAp1c2FnZSBvbiByZWxldmFudCAobmV3KSBwYXRocy4KCkNo cmlzIGRpZCBub3Qgc2F5IGFueXRoaW5nIGJ1dCBJIGV4cGVjdCB0aGlzIHdvdWxkIGFsc28gc2F0 aXNmeSBoaXMgd2lzaCAKdG8ga2VlcCB0aGUgcGF0Y2ggYXMgc21hbGwgYXMgcG9zc2libGUgZWcg bm90IHRvdWNoIGxlZ2FjeSBjb2RlIHBhdGhzLgoKUmVnYXJkcywKClR2cnRrbwoKPiAKPiBUaGFu a3MsCj4gTWF0dAo+IAo+PiAtLS0KPj4gZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5n aW5lLmjCoMKgwqDCoMKgwqDCoCB8wqAgNCArCj4+IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2lu dGVsX2VuZ2luZV9jcy5jwqDCoMKgwqAgfCAxMSArKysKPj4gZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvaW50ZWxfZ3B1X2NvbW1hbmRzLmjCoCB8wqAgNiArLQo+PiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9pbnRlbF9scmMuY8KgwqDCoMKgwqDCoMKgwqDCoMKgIHwgNzkgKysrKysrKysrKy0tLS0t LS0tLQo+PiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmNfcmVnLmjCoMKgwqDCoMKg wqAgfMKgIDQgKy0KPj4gZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbW9jcy5jwqDCoMKg wqDCoMKgwqDCoMKgIHwgMTcgKystLQo+PiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9y aW5nYnVmZmVyLmPCoMKgwqAgfCA0NSArKysrKysrKystLQo+PiBkcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9pbnRlbF93b3JrYXJvdW5kcy5jwqDCoCB8wqAgNCArLQo+PiAuLi4vZ3B1L2RybS9pOTE1 L2d0L3NlbGZ0ZXN0X3dvcmthcm91bmRzLmPCoMKgwqAgfMKgIDkgKystCj4+IGRyaXZlcnMvZ3B1 L2RybS9pOTE1L2d2dC9tbWlvX2NvbnRleHQuY8KgwqDCoMKgwqDCoCB8IDE2ICsrKy0KPj4gZHJp dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9jbWRfcGFyc2VyLmPCoMKgwqDCoMKgwqDCoCB8wqAgNCAr LQo+PiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmPCoMKgwqDCoMKgwqAg fCAxMiArLS0KPj4gZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jwqDC oMKgIHzCoCAzICstCj4+IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgfCAxOSArKystLQo+PiAxNCBmaWxlcyBjaGFuZ2VkLCAxNTQgaW5z ZXJ0aW9ucygrKSwgNzkgZGVsZXRpb25zKC0pCj4+Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vaTkxNS9ndC9pbnRlbF9lbmdpbmUuaCAKPj4gYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9pbnRlbF9lbmdpbmUuaAo+PiBpbmRleCA5MzU5YjNhN2FkOWMuLjM1MDZjOTkyMTgyYyAxMDA2 NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lLmgKPj4gKysr IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfZW5naW5lLmgKPj4gQEAgLTU0Niw0ICs1 NDYsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaW5qZWN0X3ByZWVtcHRfaGFuZyhzdHJ1Y3QgCj4+ IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKmV4ZWNsaXN0cykKPj4KPj4gI2VuZGlmCj4+Cj4+ICti b29sIGk5MTVfZW5naW5lX2hhc19yZWxhdGl2ZV9scmkoY29uc3Qgc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lKTsKPj4gK3UzMiBpOTE1X2dldF9scmlfY21kKGNvbnN0IHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKmVuZ2luZSwgdTMyIAo+PiB3b3JkX2NvdW50KTsKPj4gK3UzMiBpOTE1X2dl dF9scmlfcmVnKGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgaTkxNV9yZWdf dCAKPj4gcmVnKTsKPj4gKwo+PiAjZW5kaWYgLyogX0lOVEVMX1JJTkdCVUZGRVJfSF8gKi8KPj4g ZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV9jcy5jIAo+ PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2VuZ2luZV9jcy5jCj4+IGluZGV4IDRj Mzc1M2MxYjU3My4uMjMzMjk1ZDY4OWQyIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9ndC9pbnRlbF9lbmdpbmVfY3MuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9pbnRlbF9lbmdpbmVfY3MuYwo+PiBAQCAtMjUzLDYgKzI1MywxNyBAQCBzdGF0aWMgdTMyIF9f ZW5naW5lX21taW9fYmFzZShzdHJ1Y3QgCj4+IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUsCj4+IMKg wqDCoMKgcmV0dXJuIGJhc2VzW2ldLmJhc2U7Cj4+IH0KPj4KPj4gK2Jvb2wgaTkxNV9lbmdpbmVf aGFzX3JlbGF0aXZlX2xyaShjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4+ ICt7Cj4+ICvCoMKgwqAgaWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpIDwgMTEpCj4+ICvCoMKg wqDCoMKgwqDCoCByZXR1cm4gZmFsc2U7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoZW5naW5lLT5jbGFz cyA9PSBDT1BZX0VOR0lORV9DTEFTUykKPj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiBmYWxzZTsK Pj4gKwo+PiArwqDCoMKgIHJldHVybiB0cnVlOwo+PiArfQo+PiArCj4+IHN0YXRpYyB2b2lkIF9f c3ByaW50X2VuZ2luZV9uYW1lKGNoYXIgKm5hbWUsIGNvbnN0IHN0cnVjdCBlbmdpbmVfaW5mbyAK Pj4gKmluZm8pCj4+IHsKPj4gwqDCoMKgwqBXQVJOX09OKHNucHJpbnRmKG5hbWUsIElOVEVMX0VO R0lORV9DU19NQVhfTkFNRSwgIiVzJXUiLAo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvaW50ZWxfZ3B1X2NvbW1hbmRzLmggCj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUv Z3QvaW50ZWxfZ3B1X2NvbW1hbmRzLmgKPj4gaW5kZXggYTM0ZWNlNTNhNzcxLi5lNzc4NGIzZmI3 NTkgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2dwdV9jb21t YW5kcy5oCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2dwdV9jb21tYW5k cy5oCj4+IEBAIC0xMjMsOSArMTIzLDEzIEBACj4+IMKgKsKgwqAgc2ltcGx5IGlnbm9yZXMgdGhl IHJlZ2lzdGVyIGxvYWQgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLgo+PiDCoCogLSBPbmUgY2Fu IGFjdHVhbGx5IGxvYWQgYXJiaXRyYXJ5IG1hbnkgYXJiaXRyYXJ5IHJlZ2lzdGVyczogU2ltcGx5 IAo+PiBpc3N1ZSB4Cj4+IMKgKsKgwqAgYWRkcmVzcy92YWx1ZSBwYWlycy4gRG9uJ3Qgb3ZlcmR1 ZSBpdCwgdGhvdWdoLCB4IDw9IDJeNCBtdXN0IGhvbGQhCj4+ICsgKiAtIE5ld2VyIGhhcmR3YXJl IHN1cHBvcnRzIGVuZ2luZSByZWxhdGl2ZSBhZGRyZXNzZXMgYnV0IG9sZGVyIAo+PiBoYXJkd2Fy ZSBkb2VzCj4+ICsgKsKgwqAgbm90LiBTbyBuZXZlciBjYWxsIE1JX0xSSSBkaXJlY3RseSwgYWx3 YXlzIHVzZSB0aGUgCj4+IGk5MTVfZ2V0X2xyaV9jbWQoKQo+PiArICrCoMKgIGFuZCBpOTE1X2dl dF9scmlfcmVnKCkgaGVscGVyIGZ1bmN0aW9ucy4KPj4gwqAqLwo+PiAtI2RlZmluZSBNSV9MT0FE X1JFR0lTVEVSX0lNTSh4KcKgwqDCoCBNSV9JTlNUUigweDIyLCAyKih4KS0xKQo+PiArI2RlZmlu ZSBfX01JX0xPQURfUkVHSVNURVJfSU1NKHgpwqDCoMKgIE1JX0lOU1RSKDB4MjIsIDIqKHgpLTEp Cj4+ICNkZWZpbmXCoMKgIE1JX0xSSV9GT1JDRV9QT1NURUTCoMKgwqDCoMKgwqDCoCAoMTw8MTIp Cj4+ICsjZGVmaW5lwqDCoCBNSV9MUklfQUREX0NTX01NSU9fU1RBUlRfR0VOMTHCoMKgwqAgKDE8 PDE5KQo+PiAjZGVmaW5lIE1JX1NUT1JFX1JFR0lTVEVSX01FTcKgwqDCoMKgwqDCoMKgIE1JX0lO U1RSKDB4MjQsIDEpCj4+ICNkZWZpbmUgTUlfU1RPUkVfUkVHSVNURVJfTUVNX0dFTjjCoMKgIE1J X0lOU1RSKDB4MjQsIDIpCj4+ICNkZWZpbmXCoMKgIE1JX1NSTV9MUk1fR0xPQkFMX0dUVMKgwqDC oMKgwqDCoMKgICgxPDwyMikKPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0 L2ludGVsX2xyYy5jIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xyYy5jCj4+ IGluZGV4IGUxODYyM2RlZjI4Mi4uNDlhOWE2NjQ4YjljIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmMuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9ndC9pbnRlbF9scmMuYwo+PiBAQCAtMTM4OCwxNCArMTM4OCwxNSBAQCBzdGF0aWMgaW50IGVt aXRfcGRwcyhzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKPj4gwqDCoMKgwqDCoMKgwqAgcmV0dXJu IFBUUl9FUlIoY3MpOwo+Pgo+PiDCoMKgwqDCoC8qIEVuc3VyZSB0aGUgTFJJIGhhdmUgbGFuZGVk IGJlZm9yZSB3ZSBpbnZhbGlkYXRlICYgY29udGludWUgKi8KPj4gLcKgwqDCoCAqY3MrKyA9IE1J X0xPQURfUkVHSVNURVJfSU1NKDIgKiBHRU44XzNMVkxfUERQRVMpIHwgCj4+IE1JX0xSSV9GT1JD RV9QT1NURUQ7Cj4+ICvCoMKgwqAgKmNzKysgPSBpOTE1X2dldF9scmlfY21kKGVuZ2luZSwgMiAq IEdFTjhfM0xWTF9QRFBFUykgfAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg TUlfTFJJX0ZPUkNFX1BPU1RFRDsKPj4gwqDCoMKgwqBmb3IgKGkgPSBHRU44XzNMVkxfUERQRVM7 IGktLTsgKSB7Cj4+IMKgwqDCoMKgwqDCoMKgIGNvbnN0IGRtYV9hZGRyX3QgcGRfZGFkZHIgPSBp OTE1X3BhZ2VfZGlyX2RtYV9hZGRyKHBwZ3R0LCBpKTsKPj4gwqDCoMKgwqDCoMKgwqAgdTMyIGJh c2UgPSBlbmdpbmUtPm1taW9fYmFzZTsKPj4KPj4gLcKgwqDCoMKgwqDCoMKgICpjcysrID0gaTkx NV9tbWlvX3JlZ19vZmZzZXQoR0VOOF9SSU5HX1BEUF9VRFcoYmFzZSwgaSkpOwo+PiArwqDCoMKg wqDCoMKgwqAgKmNzKysgPSBpOTE1X2dldF9scmlfcmVnKGVuZ2luZSwgR0VOOF9SSU5HX1BEUF9V RFcoYmFzZSwgaSkpOwo+PiDCoMKgwqDCoMKgwqDCoCAqY3MrKyA9IHVwcGVyXzMyX2JpdHMocGRf ZGFkZHIpOwo+PiAtwqDCoMKgwqDCoMKgwqAgKmNzKysgPSBpOTE1X21taW9fcmVnX29mZnNldChH RU44X1JJTkdfUERQX0xEVyhiYXNlLCBpKSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCAqY3MrKyA9IGk5 MTVfZ2V0X2xyaV9yZWcoZW5naW5lLCBHRU44X1JJTkdfUERQX0xEVyhiYXNlLCBpKSk7Cj4+IMKg wqDCoMKgwqDCoMKgICpjcysrID0gbG93ZXJfMzJfYml0cyhwZF9kYWRkcik7Cj4+IMKgwqDCoMKg fQo+PiDCoMKgwqDCoCpjcysrID0gTUlfTk9PUDsKPj4gQEAgLTE0NjksNyArMTQ3MCw4IEBAIGdl bjhfZW1pdF9mbHVzaF9jb2hlcmVudGwzX3dhKHN0cnVjdCAKPj4gaW50ZWxfZW5naW5lX2NzICpl bmdpbmUsIHUzMiAqYmF0Y2gpCj4+IMKgwqDCoMKgKmJhdGNoKysgPSBpOTE1X3NjcmF0Y2hfb2Zm c2V0KGVuZ2luZS0+aTkxNSkgKyAyNTY7Cj4+IMKgwqDCoMKgKmJhdGNoKysgPSAwOwo+Pgo+PiAt wqDCoMKgICpiYXRjaCsrID0gTUlfTE9BRF9SRUdJU1RFUl9JTU0oMSk7Cj4+ICvCoMKgwqAgLyog R2VuOC85IG9ubHkgc28gbm8gbmVlZCB0byBzdXBwb3J0IHJlbGF0aXZlIG9mZnNldHMgKi8KPj4g K8KgwqDCoCAqYmF0Y2grKyA9IF9fTUlfTE9BRF9SRUdJU1RFUl9JTU0oMSk7Cj4+IMKgwqDCoMKg KmJhdGNoKysgPSBpOTE1X21taW9fcmVnX29mZnNldChHRU44X0wzU1FDUkVHNCk7Cj4+IMKgwqDC oMKgKmJhdGNoKysgPSAweDQwNDAwMDAwIHwgR0VOOF9MUVNDX0ZMVVNIX0NPSEVSRU5UX0xJTkVT Owo+Pgo+PiBAQCAtMTU0MCwxMyArMTU0MiwxNCBAQCBzdHJ1Y3QgbHJpIHsKPj4gwqDCoMKgwqB1 MzIgdmFsdWU7Cj4+IH07Cj4+Cj4+IC1zdGF0aWMgdTMyICplbWl0X2xyaSh1MzIgKmJhdGNoLCBj b25zdCBzdHJ1Y3QgbHJpICpscmksIHVuc2lnbmVkIGludCAKPj4gY291bnQpCj4+ICtzdGF0aWMg dTMyICplbWl0X2xyaShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHUzMiAqYmF0Y2gs Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3Qgc3RydWN0IGxyaSAqbHJpLCB1bnNp Z25lZCBpbnQgY291bnQpCj4+IHsKPj4gwqDCoMKgwqBHRU1fQlVHX09OKCFjb3VudCB8fCBjb3Vu dCA+IDYzKTsKPj4KPj4gLcKgwqDCoCAqYmF0Y2grKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NKGNv dW50KTsKPj4gK8KgwqDCoCAqYmF0Y2grKyA9IGk5MTVfZ2V0X2xyaV9jbWQoZW5naW5lLCBjb3Vu dCk7Cj4+IMKgwqDCoMKgZG8gewo+PiAtwqDCoMKgwqDCoMKgwqAgKmJhdGNoKysgPSBpOTE1X21t aW9fcmVnX29mZnNldChscmktPnJlZyk7Cj4+ICvCoMKgwqDCoMKgwqDCoCAqYmF0Y2grKyA9IGk5 MTVfZ2V0X2xyaV9yZWcoZW5naW5lLCBscmktPnJlZyk7Cj4+IMKgwqDCoMKgwqDCoMKgICpiYXRj aCsrID0gbHJpLT52YWx1ZTsKPj4gwqDCoMKgwqB9IHdoaWxlIChscmkrKywgLS1jb3VudCk7Cj4+ IMKgwqDCoMKgKmJhdGNoKysgPSBNSV9OT09QOwo+PiBAQCAtMTU4NCw3ICsxNTg3LDcgQEAgc3Rh dGljIHUzMiAqZ2VuOV9pbml0X2luZGlyZWN0Y3R4X2JiKHN0cnVjdCAKPj4gaW50ZWxfZW5naW5l X2NzICplbmdpbmUsIHUzMiAqYmF0Y2gpCj4+IMKgwqDCoMKgLyogV2FGbHVzaENvaGVyZW50TDND YWNoZUxpbmVzQXRDb250ZXh0U3dpdGNoOnNrbCxieHQsZ2xrICovCj4+IMKgwqDCoMKgYmF0Y2gg PSBnZW44X2VtaXRfZmx1c2hfY29oZXJlbnRsM193YShlbmdpbmUsIGJhdGNoKTsKPj4KPj4gLcKg wqDCoCBiYXRjaCA9IGVtaXRfbHJpKGJhdGNoLCBscmksIEFSUkFZX1NJWkUobHJpKSk7Cj4+ICvC oMKgwqAgYmF0Y2ggPSBlbWl0X2xyaShlbmdpbmUsIGJhdGNoLCBscmksIEFSUkFZX1NJWkUobHJp KSk7Cj4+Cj4+IMKgwqDCoMKgLyogV2FNZWRpYVBvb2xTdGF0ZUNtZEluV0FCQjpieHQsZ2xrICov Cj4+IMKgwqDCoMKgaWYgKEhBU19QT09MRURfRVUoZW5naW5lLT5pOTE1KSkgewo+PiBAQCAtMjUz NywxMCArMjU0MCwxMCBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfaW5pdF9yZWdfc3RhdGUodTMy ICpyZWdzLAo+PiDCoMKgwqDCoCAqIHZhbHVlcyAoaW5jbHVkaW5nIGFsbCB0aGUgbWlzc2luZyBN SV9MT0FEX1JFR0lTVEVSX0lNTSBjb21tYW5kcyAKPj4gdGhhdAo+PiDCoMKgwqDCoCAqIHdlIGFy ZSBub3QgaW5pdGlhbGl6aW5nIGhlcmUpLgo+PiDCoMKgwqDCoCAqLwo+PiAtwqDCoMKgIHJlZ3Nb Q1RYX0xSSV9IRUFERVJfMF0gPSBNSV9MT0FEX1JFR0lTVEVSX0lNTShyY3MgPyAxNCA6IDExKSB8 Cj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBNSV9MUklfRk9SQ0VfUE9TVEVE Owo+PiArwqDCoMKgIHJlZ3NbQ1RYX0xSSV9IRUFERVJfMF0gPSBpOTE1X2dldF9scmlfY21kKGVu Z2luZSwgcmNzID8gMTQgOiAxMSkgfAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgTUlfTFJJX0ZPUkNFX1BPU1RFRDsKPj4KPj4gLcKgwqDCoCBD VFhfUkVHKHJlZ3MsIENUWF9DT05URVhUX0NPTlRST0wsIFJJTkdfQ09OVEVYVF9DT05UUk9MKGJh c2UpLAo+PiArwqDCoMKgIENUWF9SRUcoZW5naW5lLCByZWdzLCBDVFhfQ09OVEVYVF9DT05UUk9M LCAKPj4gUklOR19DT05URVhUX0NPTlRST0woYmFzZSksCj4+IMKgwqDCoMKgwqDCoMKgIF9NQVNL RURfQklUX0RJU0FCTEUoQ1RYX0NUUkxfRU5HSU5FX0NUWF9SRVNUT1JFX0lOSElCSVQpIHwKPj4g wqDCoMKgwqDCoMKgwqAgX01BU0tFRF9CSVRfRU5BQkxFKENUWF9DVFJMX0lOSElCSVRfU1lOX0NU WF9TV0lUQ0gpKTsKPj4gwqDCoMKgwqBpZiAoSU5URUxfR0VOKGVuZ2luZS0+aTkxNSkgPCAxMSkg ewo+PiBAQCAtMjU0OCwyMiArMjU1MSwyMyBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfaW5pdF9y ZWdfc3RhdGUodTMyICpyZWdzLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIF9NQVNLRURfQklU X0RJU0FCTEUoQ1RYX0NUUkxfRU5HSU5FX0NUWF9TQVZFX0lOSElCSVQgfAo+PiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIENUWF9DVFJMX1JTX0NUWF9FTkFC TEUpOwo+PiDCoMKgwqDCoH0KPj4gLcKgwqDCoCBDVFhfUkVHKHJlZ3MsIENUWF9SSU5HX0hFQUQs IFJJTkdfSEVBRChiYXNlKSwgMCk7Cj4+IC3CoMKgwqAgQ1RYX1JFRyhyZWdzLCBDVFhfUklOR19U QUlMLCBSSU5HX1RBSUwoYmFzZSksIDApOwo+PiAtwqDCoMKgIENUWF9SRUcocmVncywgQ1RYX1JJ TkdfQlVGRkVSX1NUQVJULCBSSU5HX1NUQVJUKGJhc2UpLCAwKTsKPj4gLcKgwqDCoCBDVFhfUkVH KHJlZ3MsIENUWF9SSU5HX0JVRkZFUl9DT05UUk9MLCBSSU5HX0NUTChiYXNlKSwKPj4gK8KgwqDC oCBDVFhfUkVHKGVuZ2luZSwgcmVncywgQ1RYX1JJTkdfSEVBRCwgUklOR19IRUFEKGJhc2UpLCAw KTsKPj4gK8KgwqDCoCBDVFhfUkVHKGVuZ2luZSwgcmVncywgQ1RYX1JJTkdfVEFJTCwgUklOR19U QUlMKGJhc2UpLCAwKTsKPj4gK8KgwqDCoCBDVFhfUkVHKGVuZ2luZSwgcmVncywgQ1RYX1JJTkdf QlVGRkVSX1NUQVJULCBSSU5HX1NUQVJUKGJhc2UpLCAwKTsKPj4gK8KgwqDCoCBDVFhfUkVHKGVu Z2luZSwgcmVncywgQ1RYX1JJTkdfQlVGRkVSX0NPTlRST0wsIFJJTkdfQ1RMKGJhc2UpLAo+PiDC oMKgwqDCoMKgwqDCoCBSSU5HX0NUTF9TSVpFKHJpbmctPnNpemUpIHwgUklOR19WQUxJRCk7Cj4+ IC3CoMKgwqAgQ1RYX1JFRyhyZWdzLCBDVFhfQkJfSEVBRF9VLCBSSU5HX0JCQUREUl9VRFcoYmFz ZSksIDApOwo+PiAtwqDCoMKgIENUWF9SRUcocmVncywgQ1RYX0JCX0hFQURfTCwgUklOR19CQkFE RFIoYmFzZSksIDApOwo+PiAtwqDCoMKgIENUWF9SRUcocmVncywgQ1RYX0JCX1NUQVRFLCBSSU5H X0JCU1RBVEUoYmFzZSksIFJJTkdfQkJfUFBHVFQpOwo+PiAtwqDCoMKgIENUWF9SRUcocmVncywg Q1RYX1NFQ09ORF9CQl9IRUFEX1UsIFJJTkdfU0JCQUREUl9VRFcoYmFzZSksIDApOwo+PiAtwqDC oMKgIENUWF9SRUcocmVncywgQ1RYX1NFQ09ORF9CQl9IRUFEX0wsIFJJTkdfU0JCQUREUihiYXNl KSwgMCk7Cj4+IC3CoMKgwqAgQ1RYX1JFRyhyZWdzLCBDVFhfU0VDT05EX0JCX1NUQVRFLCBSSU5H X1NCQlNUQVRFKGJhc2UpLCAwKTsKPj4gK8KgwqDCoCBDVFhfUkVHKGVuZ2luZSwgcmVncywgQ1RY X0JCX0hFQURfVSwgUklOR19CQkFERFJfVURXKGJhc2UpLCAwKTsKPj4gK8KgwqDCoCBDVFhfUkVH KGVuZ2luZSwgcmVncywgQ1RYX0JCX0hFQURfTCwgUklOR19CQkFERFIoYmFzZSksIDApOwo+PiAr wqDCoMKgIENUWF9SRUcoZW5naW5lLCByZWdzLCBDVFhfQkJfU1RBVEUsIFJJTkdfQkJTVEFURShi YXNlKSwgCj4+IFJJTkdfQkJfUFBHVFQpOwo+PiArwqDCoMKgIENUWF9SRUcoZW5naW5lLCByZWdz LCBDVFhfU0VDT05EX0JCX0hFQURfVSwgCj4+IFJJTkdfU0JCQUREUl9VRFcoYmFzZSksIDApOwo+ PiArwqDCoMKgIENUWF9SRUcoZW5naW5lLCByZWdzLCBDVFhfU0VDT05EX0JCX0hFQURfTCwgUklO R19TQkJBRERSKGJhc2UpLCAwKTsKPj4gK8KgwqDCoCBDVFhfUkVHKGVuZ2luZSwgcmVncywgQ1RY X1NFQ09ORF9CQl9TVEFURSwgUklOR19TQkJTVEFURShiYXNlKSwgMCk7Cj4+IMKgwqDCoMKgaWYg KHJjcykgewo+PiDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaTkxNV9jdHhfd29ya2Fyb3VuZHMgKndh X2N0eCA9ICZlbmdpbmUtPndhX2N0eDsKPj4KPj4gLcKgwqDCoMKgwqDCoMKgIENUWF9SRUcocmVn cywgQ1RYX1JDU19JTkRJUkVDVF9DVFgsIFJJTkdfSU5ESVJFQ1RfQ1RYKGJhc2UpLCAwKTsKPj4g LcKgwqDCoMKgwqDCoMKgIENUWF9SRUcocmVncywgQ1RYX1JDU19JTkRJUkVDVF9DVFhfT0ZGU0VU LAo+PiArwqDCoMKgwqDCoMKgwqAgQ1RYX1JFRyhlbmdpbmUsIHJlZ3MsIENUWF9SQ1NfSU5ESVJF Q1RfQ1RYLAo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBSSU5HX0lORElSRUNUX0NUWChiYXNl KSwgMCk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBDVFhfUkVHKGVuZ2luZSwgcmVncywgQ1RYX1JDU19J TkRJUkVDVF9DVFhfT0ZGU0VULAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFJJTkdfSU5ESVJF Q1RfQ1RYX09GRlNFVChiYXNlKSwgMCk7Cj4+IMKgwqDCoMKgwqDCoMKgIGlmICh3YV9jdHgtPmlu ZGlyZWN0X2N0eC5zaXplKSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgdTMyIGdndHRfb2Zm c2V0ID0gaTkxNV9nZ3R0X29mZnNldCh3YV9jdHgtPnZtYSk7Cj4+IEBAIC0yNTc2LDcgKzI1ODAs OCBAQCBzdGF0aWMgdm9pZCBleGVjbGlzdHNfaW5pdF9yZWdfc3RhdGUodTMyICpyZWdzLAo+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaW50ZWxfbHJfaW5kaXJlY3RfY3R4X29mZnNl dChlbmdpbmUpIDw8IDY7Cj4+IMKgwqDCoMKgwqDCoMKgIH0KPj4KPj4gLcKgwqDCoMKgwqDCoMKg IENUWF9SRUcocmVncywgQ1RYX0JCX1BFUl9DVFhfUFRSLCBSSU5HX0JCX1BFUl9DVFhfUFRSKGJh c2UpLCAwKTsKPj4gK8KgwqDCoMKgwqDCoMKgIENUWF9SRUcoZW5naW5lLCByZWdzLCBDVFhfQkJf UEVSX0NUWF9QVFIsCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFJJTkdfQkJfUEVSX0NUWF9Q VFIoYmFzZSksIDApOwo+PiDCoMKgwqDCoMKgwqDCoCBpZiAod2FfY3R4LT5wZXJfY3R4LnNpemUp IHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1MzIgZ2d0dF9vZmZzZXQgPSBpOTE1X2dndHRf b2Zmc2V0KHdhX2N0eC0+dm1hKTsKPj4KPj4gQEAgLTI1ODUsMTggKzI1OTAsMTkgQEAgc3RhdGlj IHZvaWQgZXhlY2xpc3RzX2luaXRfcmVnX3N0YXRlKHUzMiAqcmVncywKPj4gwqDCoMKgwqDCoMKg wqAgfQo+PiDCoMKgwqDCoH0KPj4KPj4gLcKgwqDCoCByZWdzW0NUWF9MUklfSEVBREVSXzFdID0g TUlfTE9BRF9SRUdJU1RFUl9JTU0oOSkgfCAKPj4gTUlfTFJJX0ZPUkNFX1BPU1RFRDsKPj4gK8Kg wqDCoCByZWdzW0NUWF9MUklfSEVBREVSXzFdID0gaTkxNV9nZXRfbHJpX2NtZChlbmdpbmUsIDkp IHwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IE1JX0xSSV9GT1JDRV9QT1NURUQ7Cj4+Cj4+IC3CoMKgwqAgQ1RYX1JFRyhyZWdzLCBDVFhfQ1RY X1RJTUVTVEFNUCwgUklOR19DVFhfVElNRVNUQU1QKGJhc2UpLCAwKTsKPj4gK8KgwqDCoCBDVFhf UkVHKGVuZ2luZSwgcmVncywgQ1RYX0NUWF9USU1FU1RBTVAsIAo+PiBSSU5HX0NUWF9USU1FU1RB TVAoYmFzZSksIDApOwo+PiDCoMKgwqDCoC8qIFBEUCB2YWx1ZXMgd2VsbCBiZSBhc3NpZ25lZCBs YXRlciBpZiBuZWVkZWQgKi8KPj4gLcKgwqDCoCBDVFhfUkVHKHJlZ3MsIENUWF9QRFAzX1VEVywg R0VOOF9SSU5HX1BEUF9VRFcoYmFzZSwgMyksIDApOwo+PiAtwqDCoMKgIENUWF9SRUcocmVncywg Q1RYX1BEUDNfTERXLCBHRU44X1JJTkdfUERQX0xEVyhiYXNlLCAzKSwgMCk7Cj4+IC3CoMKgwqAg Q1RYX1JFRyhyZWdzLCBDVFhfUERQMl9VRFcsIEdFTjhfUklOR19QRFBfVURXKGJhc2UsIDIpLCAw KTsKPj4gLcKgwqDCoCBDVFhfUkVHKHJlZ3MsIENUWF9QRFAyX0xEVywgR0VOOF9SSU5HX1BEUF9M RFcoYmFzZSwgMiksIDApOwo+PiAtwqDCoMKgIENUWF9SRUcocmVncywgQ1RYX1BEUDFfVURXLCBH RU44X1JJTkdfUERQX1VEVyhiYXNlLCAxKSwgMCk7Cj4+IC3CoMKgwqAgQ1RYX1JFRyhyZWdzLCBD VFhfUERQMV9MRFcsIEdFTjhfUklOR19QRFBfTERXKGJhc2UsIDEpLCAwKTsKPj4gLcKgwqDCoCBD VFhfUkVHKHJlZ3MsIENUWF9QRFAwX1VEVywgR0VOOF9SSU5HX1BEUF9VRFcoYmFzZSwgMCksIDAp Owo+PiAtwqDCoMKgIENUWF9SRUcocmVncywgQ1RYX1BEUDBfTERXLCBHRU44X1JJTkdfUERQX0xE VyhiYXNlLCAwKSwgMCk7Cj4+ICvCoMKgwqAgQ1RYX1JFRyhlbmdpbmUsIHJlZ3MsIENUWF9QRFAz X1VEVywgR0VOOF9SSU5HX1BEUF9VRFcoYmFzZSwgMyksIDApOwo+PiArwqDCoMKgIENUWF9SRUco ZW5naW5lLCByZWdzLCBDVFhfUERQM19MRFcsIEdFTjhfUklOR19QRFBfTERXKGJhc2UsIDMpLCAw KTsKPj4gK8KgwqDCoCBDVFhfUkVHKGVuZ2luZSwgcmVncywgQ1RYX1BEUDJfVURXLCBHRU44X1JJ TkdfUERQX1VEVyhiYXNlLCAyKSwgMCk7Cj4+ICvCoMKgwqAgQ1RYX1JFRyhlbmdpbmUsIHJlZ3Ms IENUWF9QRFAyX0xEVywgR0VOOF9SSU5HX1BEUF9MRFcoYmFzZSwgMiksIDApOwo+PiArwqDCoMKg IENUWF9SRUcoZW5naW5lLCByZWdzLCBDVFhfUERQMV9VRFcsIEdFTjhfUklOR19QRFBfVURXKGJh c2UsIDEpLCAwKTsKPj4gK8KgwqDCoCBDVFhfUkVHKGVuZ2luZSwgcmVncywgQ1RYX1BEUDFfTERX LCBHRU44X1JJTkdfUERQX0xEVyhiYXNlLCAxKSwgMCk7Cj4+ICvCoMKgwqAgQ1RYX1JFRyhlbmdp bmUsIHJlZ3MsIENUWF9QRFAwX1VEVywgR0VOOF9SSU5HX1BEUF9VRFcoYmFzZSwgMCksIDApOwo+ PiArwqDCoMKgIENUWF9SRUcoZW5naW5lLCByZWdzLCBDVFhfUERQMF9MRFcsIEdFTjhfUklOR19Q RFBfTERXKGJhc2UsIDApLCAwKTsKPj4KPj4gwqDCoMKgwqBpZiAoaTkxNV92bV9pc180bHZsKCZw cGd0dC0+dm0pKSB7Cj4+IMKgwqDCoMKgwqDCoMKgIC8qIDY0YiBQUEdUVCAoNDhiaXQgY2Fub25p Y2FsKQo+PiBAQCAtMjYxMiw4ICsyNjE4LDkgQEAgc3RhdGljIHZvaWQgZXhlY2xpc3RzX2luaXRf cmVnX3N0YXRlKHUzMiAqcmVncywKPj4gwqDCoMKgwqB9Cj4+Cj4+IMKgwqDCoMKgaWYgKHJjcykg ewo+PiAtwqDCoMKgwqDCoMKgwqAgcmVnc1tDVFhfTFJJX0hFQURFUl8yXSA9IE1JX0xPQURfUkVH SVNURVJfSU1NKDEpOwo+PiAtwqDCoMKgwqDCoMKgwqAgQ1RYX1JFRyhyZWdzLCBDVFhfUl9QV1Jf Q0xLX1NUQVRFLCBHRU44X1JfUFdSX0NMS19TVEFURSwgMCk7Cj4+ICvCoMKgwqDCoMKgwqDCoCBy ZWdzW0NUWF9MUklfSEVBREVSXzJdID0gaTkxNV9nZXRfbHJpX2NtZChlbmdpbmUsIDEpOwo+PiAr wqDCoMKgwqDCoMKgwqAgQ1RYX1JFRyhlbmdpbmUsIHJlZ3MsIENUWF9SX1BXUl9DTEtfU1RBVEUs Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEdFTjhfUl9QV1JfQ0xLX1NUQVRFLCAwKTsKPj4K Pj4gwqDCoMKgwqDCoMKgwqAgaTkxNV9vYV9pbml0X3JlZ19zdGF0ZShlbmdpbmUsIGNlLCByZWdz KTsKPj4gwqDCoMKgwqB9Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9p bnRlbF9scmNfcmVnLmggCj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjX3Jl Zy5oCj4+IGluZGV4IDVlZjkzMmQ4MTBhNy4uNDBiMTE0MmQwZDc0IDEwMDY0NAo+PiAtLS0gYS9k cml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9scmNfcmVnLmgKPj4gKysrIGIvZHJpdmVycy9n cHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjX3JlZy5oCj4+IEBAIC0zOSwxMCArMzksMTAgQEAKPj4g I2RlZmluZSBDVFhfUl9QV1JfQ0xLX1NUQVRFwqDCoMKgwqDCoMKgwqAgMHg0Mgo+PiAjZGVmaW5l IENUWF9FTkTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgMHg0NAo+Pgo+PiAtI2RlZmlu ZSBDVFhfUkVHKHJlZ19zdGF0ZSwgcG9zLCByZWcsIHZhbCkgZG8geyBcCj4+ICsjZGVmaW5lIENU WF9SRUcoZW5naW5lLCByZWdfc3RhdGUsIHBvcywgcmVnLCB2YWwpIGRvIHsgXAo+PiDCoMKgwqDC oHUzMiAqcmVnX3N0YXRlX18gPSAocmVnX3N0YXRlKTsgXAo+PiDCoMKgwqDCoGNvbnN0IHUzMiBw b3NfXyA9IChwb3MpOyBcCj4+IC3CoMKgwqAgKHJlZ19zdGF0ZV9fKVsocG9zX18pICsgMF0gPSBp OTE1X21taW9fcmVnX29mZnNldChyZWcpOyBcCj4+ICvCoMKgwqAgKHJlZ19zdGF0ZV9fKVsocG9z X18pICsgMF0gPSBpOTE1X2dldF9scmlfcmVnKChlbmdpbmUpLCAocmVnKSk7IFwKPj4gwqDCoMKg wqAocmVnX3N0YXRlX18pWyhwb3NfXykgKyAxXSA9ICh2YWwpOyBcCj4+IH0gd2hpbGUgKDApCj4+ Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9tb2NzLmMgCj4+ IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbW9jcy5jCj4+IGluZGV4IDc5ZGY2NjAy MmQzYS4uNWRhZTYzMzM0ODFkIDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9n dC9pbnRlbF9tb2NzLmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbW9j cy5jCj4+IEBAIC0zMjQsOSArMzI0LDYgQEAgc3RhdGljIHUzMiBnZXRfZW50cnlfY29udHJvbChj b25zdCBzdHJ1Y3QgCj4+IGRybV9pOTE1X21vY3NfdGFibGUgKnRhYmxlLAo+PiAvKioKPj4gwqAq IGludGVsX21vY3NfaW5pdF9lbmdpbmUoKSAtIGVtaXQgdGhlIG1vY3MgY29udHJvbCB0YWJsZQo+ PiDCoCogQGVuZ2luZTrCoMKgwqAgVGhlIGVuZ2luZSBmb3Igd2hvbSB0byBlbWl0IHRoZSByZWdp c3RlcnMuCj4+IC0gKgo+PiAtICogVGhpcyBmdW5jdGlvbiBzaW1wbHkgZW1pdHMgYSBNSV9MT0FE X1JFR0lTVEVSX0lNTSBjb21tYW5kIGZvciB0aGUKPj4gLSAqIGdpdmVuIHRhYmxlIHN0YXJ0aW5n IGF0IHRoZSBnaXZlbiBhZGRyZXNzLgo+PiDCoCovCj4+IHZvaWQgaW50ZWxfbW9jc19pbml0X2Vu Z2luZShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCj4+IHsKPj4gQEAgLTM4MCwxOCAr Mzc3LDIwIEBAIHN0YXRpYyBpbnQgZW1pdF9tb2NzX2NvbnRyb2xfdGFibGUoc3RydWN0IAo+PiBp OTE1X3JlcXVlc3QgKnJxLAo+PiDCoMKgwqDCoGlmIChJU19FUlIoY3MpKQo+PiDCoMKgwqDCoMKg wqDCoCByZXR1cm4gUFRSX0VSUihjcyk7Cj4+Cj4+IC3CoMKgwqAgKmNzKysgPSBNSV9MT0FEX1JF R0lTVEVSX0lNTSh0YWJsZS0+bl9lbnRyaWVzKTsKPj4gK8KgwqDCoCAqY3MrKyA9IGk5MTVfZ2V0 X2xyaV9jbWQocnEtPmVuZ2luZSwgdGFibGUtPm5fZW50cmllcyk7Cj4+Cj4+IMKgwqDCoMKgZm9y IChpbmRleCA9IDA7IGluZGV4IDwgdGFibGUtPnNpemU7IGluZGV4KyspIHsKPj4gwqDCoMKgwqDC oMKgwqAgdTMyIHZhbHVlID0gZ2V0X2VudHJ5X2NvbnRyb2wodGFibGUsIGluZGV4KTsKPj4KPj4g LcKgwqDCoMKgwqDCoMKgICpjcysrID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQobW9jc19yZWdpc3Rl cihlbmdpbmUsIGluZGV4KSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCAqY3MrKyA9IGk5MTVfZ2V0X2xy aV9yZWcocnEtPmVuZ2luZSwKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgbW9jc19yZWdpc3RlcihlbmdpbmUsIGluZGV4KSk7Cj4+IMKgwqDCoMKgwqDCoMKgICpj cysrID0gdmFsdWU7Cj4+IMKgwqDCoMKgfQo+Pgo+PiDCoMKgwqDCoC8qIEFsbCByZW1haW5pbmcg ZW50cmllcyBhcmUgYWxzbyB1bnVzZWQgKi8KPj4gwqDCoMKgwqBmb3IgKDsgaW5kZXggPCB0YWJs ZS0+bl9lbnRyaWVzOyBpbmRleCsrKSB7Cj4+IC3CoMKgwqDCoMKgwqDCoCAqY3MrKyA9IGk5MTVf bW1pb19yZWdfb2Zmc2V0KG1vY3NfcmVnaXN0ZXIoZW5naW5lLCBpbmRleCkpOwo+PiArwqDCoMKg wqDCoMKgwqAgKmNzKysgPSBpOTE1X2dldF9scmlfcmVnKHJxLT5lbmdpbmUsCj4+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG1vY3NfcmVnaXN0ZXIoZW5naW5lLCBp bmRleCkpOwo+PiDCoMKgwqDCoMKgwqDCoCAqY3MrKyA9IHVudXNlZF92YWx1ZTsKPj4gwqDCoMKg wqB9Cj4+Cj4+IEBAIC00NDksNyArNDQ4LDExIEBAIHN0YXRpYyBpbnQgZW1pdF9tb2NzX2wzY2Nf dGFibGUoc3RydWN0IAo+PiBpOTE1X3JlcXVlc3QgKnJxLAo+PiDCoMKgwqDCoGlmIChJU19FUlIo Y3MpKQo+PiDCoMKgwqDCoMKgwqDCoCByZXR1cm4gUFRSX0VSUihjcyk7Cj4+Cj4+IC3CoMKgwqAg KmNzKysgPSBNSV9MT0FEX1JFR0lTVEVSX0lNTSh0YWJsZS0+bl9lbnRyaWVzIC8gMik7Cj4+ICvC oMKgwqAgLyoKPj4gK8KgwqDCoMKgICogR0VOOV9MTkNGQ01PQ1MgaXMgbm90IGVuZ2luZSByZWxh dGl2ZSwgdGhlcmVmb3JlIHRoZXJlIGlzIG5vCj4+ICvCoMKgwqDCoCAqIG5lZWQgZm9yIHJlbGF0 aXZlIGFkZHJlc3Npbmc/Cj4+ICvCoMKgwqDCoCAqLwo+PiArwqDCoMKgICpjcysrID0gX19NSV9M T0FEX1JFR0lTVEVSX0lNTSh0YWJsZS0+bl9lbnRyaWVzIC8gMik7Cj4+Cj4+IMKgwqDCoMKgZm9y IChpID0gMDsgaSA8IHRhYmxlLT5zaXplIC8gMjsgaSsrKSB7Cj4+IMKgwqDCoMKgwqDCoMKgIHUx NiBsb3cgPSBnZXRfZW50cnlfbDNjYyh0YWJsZSwgMiAqIGkpOwo+PiBkaWZmIC0tZ2l0IGEvZHJp dmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfcmluZ2J1ZmZlci5jIAo+PiBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d0L2ludGVsX3JpbmdidWZmZXIuYwo+PiBpbmRleCBmMGQ2MGFmZmRiYTMuLmU5 OGMyZmU3MjdhNSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxf cmluZ2J1ZmZlci5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3Jpbmdi dWZmZXIuYwo+PiBAQCAtMTUxNiwxMiArMTUxNiwxMyBAQCBzdGF0aWMgaW50IGxvYWRfcGRfZGly KHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxLAo+PiDCoMKgwqDCoGlmIChJU19FUlIoY3MpKQo+PiDC oMKgwqDCoMKgwqDCoCByZXR1cm4gUFRSX0VSUihjcyk7Cj4+Cj4+IC3CoMKgwqAgKmNzKysgPSBN SV9MT0FEX1JFR0lTVEVSX0lNTSgxKTsKPj4gLcKgwqDCoCAqY3MrKyA9IGk5MTVfbW1pb19yZWdf b2Zmc2V0KFJJTkdfUFBfRElSX0RDTFYoZW5naW5lLT5tbWlvX2Jhc2UpKTsKPj4gK8KgwqDCoCAv KiBDYW4gdGhlc2Ugbm90IGJlIG1lcmdlZCBpbnRvIGEgc2luZ2xlIExSST8/PyAqLwo+PiArwqDC oMKgICpjcysrID0gaTkxNV9nZXRfbHJpX2NtZChlbmdpbmUsIDEpOwo+PiArwqDCoMKgICpjcysr ID0gaTkxNV9nZXRfbHJpX3JlZyhlbmdpbmUsIAo+PiBSSU5HX1BQX0RJUl9EQ0xWKGVuZ2luZS0+ bW1pb19iYXNlKSk7Cj4+IMKgwqDCoMKgKmNzKysgPSBQUF9ESVJfRENMVl8yRzsKPj4KPj4gLcKg wqDCoCAqY3MrKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NKDEpOwo+PiAtwqDCoMKgICpjcysrID0g aTkxNV9tbWlvX3JlZ19vZmZzZXQoUklOR19QUF9ESVJfQkFTRShlbmdpbmUtPm1taW9fYmFzZSkp Owo+PiArwqDCoMKgICpjcysrID0gaTkxNV9nZXRfbHJpX2NtZChlbmdpbmUsIDEpOwo+PiArwqDC oMKgICpjcysrID0gaTkxNV9nZXRfbHJpX3JlZyhlbmdpbmUsIAo+PiBSSU5HX1BQX0RJUl9CQVNF KGVuZ2luZS0+bW1pb19iYXNlKSk7Cj4+IMKgwqDCoMKgKmNzKysgPSBwcGd0dC0+cGQuYmFzZS5n Z3R0X29mZnNldCA8PCAxMDsKPj4KPj4gwqDCoMKgwqBpbnRlbF9yaW5nX2FkdmFuY2UocnEsIGNz KTsKPj4gQEAgLTE1ODksNyArMTU5MCwxMSBAQCBzdGF0aWMgaW5saW5lIGludCBtaV9zZXRfY29u dGV4dChzdHJ1Y3QgCj4+IGk5MTVfcmVxdWVzdCAqcnEsIHUzMiBmbGFncykKPj4gwqDCoMKgwqDC oMKgwqAgaWYgKG51bV9lbmdpbmVzKSB7Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqc2lnbmFsbGVyOwo+Pgo+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAqY3MrKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NKG51bV9lbmdpbmVzKTsKPj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgLyoKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIE11c3QgdXNl IGFic29sdXRlIGVuZ2luZSBhZGRyZXNzIGFzIHRoZSByZWdpc3Rlcgo+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgICogd3JpdGUgaXMgdGFyZ2V0aW5nIGEgZGlmZmVyZW50IGVuZ2luZS4KPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqLwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAq Y3MrKyA9IF9fTUlfTE9BRF9SRUdJU1RFUl9JTU0obnVtX2VuZ2luZXMpOwo+PiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGZvcl9lYWNoX2VuZ2luZShzaWduYWxsZXIsIGk5MTUsIGlkKSB7Cj4+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoc2lnbmFsbGVyID09IGVuZ2luZSkKPj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29udGludWU7Cj4+IEBAIC0x NjQzLDcgKzE2NDgsMTEgQEAgc3RhdGljIGlubGluZSBpbnQgbWlfc2V0X2NvbnRleHQoc3RydWN0 IAo+PiBpOTE1X3JlcXVlc3QgKnJxLCB1MzIgZmxhZ3MpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqc2lnbmFsbGVyOwo+PiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGk5MTVfcmVnX3QgbGFzdF9yZWcgPSB7fTsgLyoga2VlcCBnY2MgcXVpZXQgKi8KPj4K Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKmNzKysgPSBNSV9MT0FEX1JFR0lTVEVSX0lNTShu dW1fZW5naW5lcyk7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qCj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgKiBNdXN0IHVzZSBhYnNvbHV0ZSBlbmdpbmUgYWRkcmVzcyBhcyB0aGUg cmVnaXN0ZXIKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqIHdyaXRlIGlzIHRhcmdldGlu ZyBhIGRpZmZlcmVudCBlbmdpbmUuCj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKi8KPj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKmNzKysgPSBfX01JX0xPQURfUkVHSVNURVJfSU1NKG51 bV9lbmdpbmVzKTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmb3JfZWFjaF9lbmdpbmUoc2ln bmFsbGVyLCBpOTE1LCBpZCkgewo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYg KHNpZ25hbGxlciA9PSBlbmdpbmUpCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGNvbnRpbnVlOwo+PiBAQCAtMTY4Nyw5ICsxNjk2LDkgQEAgc3RhdGljIGludCByZW1h cF9sMyhzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSwgaW50IAo+PiBzbGljZSkKPj4gwqDCoMKgwqAg KiBoZXJlIGJlY2F1c2Ugbm8gb3RoZXIgY29kZSBzaG91bGQgYWNjZXNzIHRoZXNlIHJlZ2lzdGVy cyBvdGhlciAKPj4gdGhhbgo+PiDCoMKgwqDCoCAqIGF0IGluaXRpYWxpemF0aW9uIHRpbWUuCj4+ IMKgwqDCoMKgICovCj4+IC3CoMKgwqAgKmNzKysgPSBNSV9MT0FEX1JFR0lTVEVSX0lNTShHRU43 X0wzTE9HX1NJWkUvNCk7Cj4+ICvCoMKgwqAgKmNzKysgPSBpOTE1X2dldF9scmlfY21kKHJxLT5l bmdpbmUsIEdFTjdfTDNMT0dfU0laRS80KTsKPj4gwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgR0VO N19MM0xPR19TSVpFLzQ7IGkrKykgewo+PiAtwqDCoMKgwqDCoMKgwqAgKmNzKysgPSBpOTE1X21t aW9fcmVnX29mZnNldChHRU43X0wzTE9HKHNsaWNlLCBpKSk7Cj4+ICvCoMKgwqDCoMKgwqDCoCAq Y3MrKyA9IGk5MTVfZ2V0X2xyaV9yZWcocnEtPmVuZ2luZSwgR0VON19MM0xPRyhzbGljZSwgaSkp Owo+PiDCoMKgwqDCoMKgwqDCoCAqY3MrKyA9IHJlbWFwX2luZm9baV07Cj4+IMKgwqDCoMKgfQo+ PiDCoMKgwqDCoCpjcysrID0gTUlfTk9PUDsKPj4gQEAgLTIzMzUsMyArMjM0NCwyMyBAQCBpbnQg aW50ZWxfcmluZ19zdWJtaXNzaW9uX2luaXQoc3RydWN0IAo+PiBpbnRlbF9lbmdpbmVfY3MgKmVu Z2luZSkKPj4gwqDCoMKgwqBpbnRlbF9lbmdpbmVfY2xlYW51cF9jb21tb24oZW5naW5lKTsKPj4g wqDCoMKgwqByZXR1cm4gZXJyOwo+PiB9Cj4+ICsKPj4gK3UzMiBpOTE1X2dldF9scmlfY21kKGNv bnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgdTMyIAo+PiB3b3JkX2NvdW50KQo+ PiArewo+PiArwqDCoMKgIHUzMiB3b3JkOwo+PiArCj4+ICvCoMKgwqAgd29yZCA9IF9fTUlfTE9B RF9SRUdJU1RFUl9JTU0od29yZF9jb3VudCk7Cj4+ICsKPj4gK8KgwqDCoCBpZiAoaTkxNV9lbmdp bmVfaGFzX3JlbGF0aXZlX2xyaShlbmdpbmUpKQo+PiArwqDCoMKgwqDCoMKgwqAgd29yZCB8PSBN SV9MUklfQUREX0NTX01NSU9fU1RBUlRfR0VOMTE7Cj4+ICsKPj4gK8KgwqDCoCByZXR1cm4gd29y ZDsKPj4gK30KPj4gKwo+PiArdTMyIGk5MTVfZ2V0X2xyaV9yZWcoY29uc3Qgc3RydWN0IGludGVs X2VuZ2luZV9jcyAqZW5naW5lLCBpOTE1X3JlZ190IAo+PiByZWcpCj4+ICt7Cj4+ICvCoMKgwqAg aWYgKCFpOTE1X2VuZ2luZV9oYXNfcmVsYXRpdmVfbHJpKGVuZ2luZSkpCj4+ICvCoMKgwqDCoMKg wqDCoCByZXR1cm4gaTkxNV9tbWlvX3JlZ19vZmZzZXQocmVnKTsKPj4gKwo+PiArwqDCoMKgIHJl dHVybiBpOTE1X21taW9fcmVnX29mZnNldChyZWcpIC0gZW5naW5lLT5tbWlvX2Jhc2U7Cj4+ICt9 Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF93b3JrYXJvdW5k cy5jIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX3dvcmthcm91bmRzLmMKPj4g aW5kZXggNDNlMjkwMzA2NTUxLi5kNWVkYzEwYzg2MGMgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L2ludGVsX3dvcmthcm91bmRzLmMKPj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3QvaW50ZWxfd29ya2Fyb3VuZHMuYwo+PiBAQCAtNjI1LDkgKzYyNSw5IEBAIGlu dCBpbnRlbF9lbmdpbmVfZW1pdF9jdHhfd2Eoc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4+IMKg wqDCoMKgaWYgKElTX0VSUihjcykpCj4+IMKgwqDCoMKgwqDCoMKgIHJldHVybiBQVFJfRVJSKGNz KTsKPj4KPj4gLcKgwqDCoCAqY3MrKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NKHdhbC0+Y291bnQp Owo+PiArwqDCoMKgICpjcysrID0gaTkxNV9nZXRfbHJpX2NtZChycS0+ZW5naW5lLCB3YWwtPmNv dW50KTsKPj4gwqDCoMKgwqBmb3IgKGkgPSAwLCB3YSA9IHdhbC0+bGlzdDsgaSA8IHdhbC0+Y291 bnQ7IGkrKywgd2ErKykgewo+PiAtwqDCoMKgwqDCoMKgwqAgKmNzKysgPSBpOTE1X21taW9fcmVn X29mZnNldCh3YS0+cmVnKTsKPj4gK8KgwqDCoMKgwqDCoMKgICpjcysrID0gaTkxNV9nZXRfbHJp X3JlZyhycS0+ZW5naW5lLCB3YS0+cmVnKTsKPj4gwqDCoMKgwqDCoMKgwqAgKmNzKysgPSB3YS0+ dmFsOwo+PiDCoMKgwqDCoH0KPj4gwqDCoMKgwqAqY3MrKyA9IE1JX05PT1A7Cj4+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF93b3JrYXJvdW5kcy5jIAo+PiBi L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X3dvcmthcm91bmRzLmMKPj4gaW5kZXgg OWY3NjgwYjk5ODRiLi5iMDUxM2MxZGU1M2MgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2d0L3NlbGZ0ZXN0X3dvcmthcm91bmRzLmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3Qvc2VsZnRlc3Rfd29ya2Fyb3VuZHMuYwo+PiBAQCAtNDQyLDYgKzQ0Miw3IEBAIHN0 YXRpYyBpbnQgY2hlY2tfZGlydHlfd2hpdGVsaXN0KHN0cnVjdCAKPj4gaTkxNV9nZW1fY29udGV4 dCAqY3R4LAo+Pgo+PiDCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCBlbmdpbmUtPndoaXRlbGlzdC5j b3VudDsgaSsrKSB7Cj4+IMKgwqDCoMKgwqDCoMKgIHUzMiByZWcgPSBpOTE1X21taW9fcmVnX29m ZnNldChlbmdpbmUtPndoaXRlbGlzdC5saXN0W2ldLnJlZyk7Cj4+ICvCoMKgwqDCoMKgwqDCoCB1 MzIgcmVnTFJJID0gaTkxNV9nZXRfbHJpX3JlZyhlbmdpbmUsIAo+PiBlbmdpbmUtPndoaXRlbGlz dC5saXN0W2ldLnJlZyk7Cj4+IMKgwqDCoMKgwqDCoMKgIHU2NCBhZGRyID0gc2NyYXRjaC0+bm9k ZS5zdGFydDsKPj4gwqDCoMKgwqDCoMKgwqAgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7Cj4+IMKg wqDCoMKgwqDCoMKgIHUzMiBzcm0sIGxybSwgcnN2ZDsKPj4gQEAgLTQ3NCw4ICs0NzUsOCBAQCBz dGF0aWMgaW50IGNoZWNrX2RpcnR5X3doaXRlbGlzdChzdHJ1Y3QgCj4+IGk5MTVfZ2VtX2NvbnRl eHQgKmN0eCwKPj4gwqDCoMKgwqDCoMKgwqAgaWR4ID0gMTsKPj4gwqDCoMKgwqDCoMKgwqAgZm9y ICh2ID0gMDsgdiA8IEFSUkFZX1NJWkUodmFsdWVzKTsgdisrKSB7Cj4+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgLyogTFJJIGdhcmJhZ2UgKi8KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKmNz KysgPSBNSV9MT0FEX1JFR0lTVEVSX0lNTSgxKTsKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg KmNzKysgPSByZWc7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICpjcysrID0gaTkxNV9nZXRf bHJpX2NtZChlbmdpbmUsIDEpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqY3MrKyA9IHJl Z0xSSTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqY3MrKyA9IHZhbHVlc1t2XTsKPj4KPj4g wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKiBTUk0gcmVzdWx0ICovCj4+IEBAIC00ODcsOCArNDg4 LDggQEAgc3RhdGljIGludCBjaGVja19kaXJ0eV93aGl0ZWxpc3Qoc3RydWN0IAo+PiBpOTE1X2dl bV9jb250ZXh0ICpjdHgsCj4+IMKgwqDCoMKgwqDCoMKgIH0KPj4gwqDCoMKgwqDCoMKgwqAgZm9y ICh2ID0gMDsgdiA8IEFSUkFZX1NJWkUodmFsdWVzKTsgdisrKSB7Cj4+IMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgLyogTFJJIGdhcmJhZ2UgKi8KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKmNz KysgPSBNSV9MT0FEX1JFR0lTVEVSX0lNTSgxKTsKPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg KmNzKysgPSByZWc7Cj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICpjcysrID0gaTkxNV9nZXRf bHJpX2NtZChlbmdpbmUsIDEpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqY3MrKyA9IHJl Z0xSSTsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqY3MrKyA9IH52YWx1ZXNbdl07Cj4+Cj4+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyogU1JNIHJlc3VsdCAqLwo+PiBkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L21taW9fY29udGV4dC5jIAo+PiBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2d2dC9tbWlvX2NvbnRleHQuYwo+PiBpbmRleCBhMjdiZGQzOTUxZjYuLjM4MDdj ZTVmZTU2NCAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Z0L21taW9fY29u dGV4dC5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2d2dC9tbWlvX2NvbnRleHQuYwo+ PiBAQCAtMjAwLDE0ICsyMDAsMTQgQEAgcmVzdG9yZV9jb250ZXh0X21taW9fZm9yX2luaGliaXQo c3RydWN0IAo+PiBpbnRlbF92Z3B1ICp2Z3B1LAo+PiDCoMKgwqDCoGlmIChJU19FUlIoY3MpKQo+ PiDCoMKgwqDCoMKgwqDCoCByZXR1cm4gUFRSX0VSUihjcyk7Cj4+Cj4+IC3CoMKgwqAgKmNzKysg PSBNSV9MT0FEX1JFR0lTVEVSX0lNTShjb3VudCk7Cj4+ICvCoMKgwqAgKmNzKysgPSBpOTE1X2dl dF9scmlfY21kKHJlcS0+ZW5naW5lLCBjb3VudCk7Cj4+IMKgwqDCoMKgZm9yIChtbWlvID0gZ3Z0 LT5lbmdpbmVfbW1pb19saXN0Lm1taW87Cj4+IMKgwqDCoMKgwqDCoMKgwqAgaTkxNV9tbWlvX3Jl Z192YWxpZChtbWlvLT5yZWcpOyBtbWlvKyspIHsKPj4gwqDCoMKgwqDCoMKgwqAgaWYgKG1taW8t PnJpbmdfaWQgIT0gcmluZ19pZCB8fAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICFtbWlvLT5p bl9jb250ZXh0KQo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+Pgo+PiAtwqDC oMKgwqDCoMKgwqAgKmNzKysgPSBpOTE1X21taW9fcmVnX29mZnNldChtbWlvLT5yZWcpOwo+PiAr wqDCoMKgwqDCoMKgwqAgKmNzKysgPSBpOTE1X2dldF9scmlfcmVnKHJlcS0+ZW5naW5lLCBtbWlv LT5yZWcpOwo+PiDCoMKgwqDCoMKgwqDCoCAqY3MrKyA9IHZncHVfdnJlZ190KHZncHUsIG1taW8t PnJlZykgfAo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKG1taW8tPm1hc2sgPDwg MTYpOwo+PiDCoMKgwqDCoMKgwqDCoCBndnRfZGJnX2NvcmUoImFkZCBscmkgcmVnIHBhaXIgMHgl eDoweCV4IGluIGluaGliaXQgY3R4LCAKPj4gdmdwdTolZCwgcmluZF9pZDolZFxuIiwKPj4gQEAg LTIzNSw3ICsyMzUsMTEgQEAgcmVzdG9yZV9yZW5kZXJfbW9jc19jb250cm9sX2Zvcl9pbmhpYml0 KHN0cnVjdCAKPj4gaW50ZWxfdmdwdSAqdmdwdSwKPj4gwqDCoMKgwqBpZiAoSVNfRVJSKGNzKSkK Pj4gwqDCoMKgwqDCoMKgwqAgcmV0dXJuIFBUUl9FUlIoY3MpOwo+Pgo+PiAtwqDCoMKgICpjcysr ID0gTUlfTE9BRF9SRUdJU1RFUl9JTU0oR0VOOV9NT0NTX1NJWkUpOwo+PiArwqDCoMKgIC8qCj4+ ICvCoMKgwqDCoCAqIEdFTjlfR0ZYX01PQ1MgaXMgbm90IGVuZ2luZSByZWxhdGl2ZSwgdGhlcmVm b3JlIHRoZXJlIGlzIG5vCj4+ICvCoMKgwqDCoCAqIG5lZWQgZm9yIHJlbGF0aXZlIGFkZHJlc3Np bmcuCj4+ICvCoMKgwqDCoCAqLwo+PiArwqDCoMKgICpjcysrID0gX19NSV9MT0FEX1JFR0lTVEVS X0lNTShHRU45X01PQ1NfU0laRSk7Cj4+Cj4+IMKgwqDCoMKgZm9yIChpbmRleCA9IDA7IGluZGV4 IDwgR0VOOV9NT0NTX1NJWkU7IGluZGV4KyspIHsKPj4gwqDCoMKgwqDCoMKgwqAgKmNzKysgPSBp OTE1X21taW9fcmVnX29mZnNldChHRU45X0dGWF9NT0NTKGluZGV4KSk7Cj4+IEBAIC0yNjIsNyAr MjY2LDExIEBAIHJlc3RvcmVfcmVuZGVyX21vY3NfbDNjY19mb3JfaW5oaWJpdChzdHJ1Y3QgCj4+ IGludGVsX3ZncHUgKnZncHUsCj4+IMKgwqDCoMKgaWYgKElTX0VSUihjcykpCj4+IMKgwqDCoMKg wqDCoMKgIHJldHVybiBQVFJfRVJSKGNzKTsKPj4KPj4gLcKgwqDCoCAqY3MrKyA9IE1JX0xPQURf UkVHSVNURVJfSU1NKEdFTjlfTU9DU19TSVpFIC8gMik7Cj4+ICvCoMKgwqAgLyoKPj4gK8KgwqDC oMKgICogR0VOOV9MTkNGQ01PQ1MgaXMgbm90IGVuZ2luZSByZWxhdGl2ZSwgdGhlcmVmb3JlIHRo ZXJlIGlzIG5vCj4+ICvCoMKgwqDCoCAqIG5lZWQgZm9yIHJlbGF0aXZlIGFkZHJlc3NpbmcuCj4+ ICvCoMKgwqDCoCAqLwo+PiArwqDCoMKgICpjcysrID0gX19NSV9MT0FEX1JFR0lTVEVSX0lNTShH RU45X01PQ1NfU0laRSAvIDIpOwo+Pgo+PiDCoMKgwqDCoGZvciAoaW5kZXggPSAwOyBpbmRleCA8 IEdFTjlfTU9DU19TSVpFIC8gMjsgaW5kZXgrKykgewo+PiDCoMKgwqDCoMKgwqDCoCAqY3MrKyA9 IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjlfTE5DRkNNT0NTKGluZGV4KSk7Cj4+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2NtZF9wYXJzZXIuYyAKPj4gYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2NtZF9wYXJzZXIuYwo+PiBpbmRleCBlOWZhZGNiNGQ1OTIuLmZk MTgzZTcyZGFjZSAxMDA2NDQKPj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9jbWRf cGFyc2VyLmMKPj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9jbWRfcGFyc2VyLmMK Pj4gQEAgLTIyMSw3ICsyMjEsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRybV9pOTE1X2NtZF9k ZXNjcmlwdG9yIAo+PiBjb21tb25fY21kc1tdID0gewo+PiDCoMKgwqDCoENNRCjCoCBNSV9TVVNQ RU5EX0ZMVVNILMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFNNSSzCoMKgwqAgRizC oCAxLMKgwqDCoMKgwqAgU8KgICksCj4+IMKgwqDCoMKgQ01EKMKgIE1JX1NFTUFQSE9SRV9NQk9Y LMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBTTUkswqDCoCAhRizCoCAweEZGLMKgwqAg UsKgICksCj4+IMKgwqDCoMKgQ01EKMKgIE1JX1NUT1JFX0RXT1JEX0lOREVYLMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBTTUkswqDCoCAhRizCoCAweEZGLMKgwqAgUsKgICksCj4+IC3CoMKgwqAg Q01EKMKgIE1JX0xPQURfUkVHSVNURVJfSU1NKDEpLMKgwqDCoMKgwqDCoMKgwqDCoCBTTUkswqDC oCAhRizCoCAweEZGLMKgwqAgVywKPj4gK8KgwqDCoCBDTUQowqAgX19NSV9MT0FEX1JFR0lTVEVS X0lNTSgxKSzCoMKgwqDCoMKgwqDCoCBTTUkswqDCoCAhRizCoCAweEZGLMKgwqAgVywKPj4gwqDC oMKgwqDCoMKgwqDCoMKgIC5yZWcgPSB7IC5vZmZzZXQgPSAxLCAubWFzayA9IDB4MDA3RkZGRkMs IC5zdGVwID0gMiB9wqDCoMKgICksCj4+IMKgwqDCoMKgQ01EKMKgIE1JX1NUT1JFX1JFR0lTVEVS X01FTSzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIFNNSSzCoMKgwqAgRizCoCAzLMKgwqDCoMKgIFcg fCBCLAo+PiDCoMKgwqDCoMKgwqDCoMKgwqAgLnJlZyA9IHsgLm9mZnNldCA9IDEsIC5tYXNrID0g MHgwMDdGRkZGQyB9LAo+PiBAQCAtMTE4Myw3ICsxMTgzLDcgQEAgc3RhdGljIGJvb2wgY2hlY2tf Y21kKGNvbnN0IHN0cnVjdCAKPj4gaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCj4+IMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiBmYWxzZTsKPj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBpZiAoZGVzYy0+Y21kLnZhbHVlID09IE1JX0xPQURfUkVHSVNURVJfSU1NKDEpICYmCj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGRlc2MtPmNtZC52YWx1ZSA9PSBf X01JX0xPQURfUkVHSVNURVJfSU1NKDEpICYmCj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIChvZmZzZXQgKyAyID4gbGVuZ3RoIHx8Cj4+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKGNtZFtvZmZzZXQgKyAxXSAmIHJlZy0+bWFzaykgIT0g cmVnLT52YWx1ZSkpIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg RFJNX0RFQlVHX0RSSVZFUigiQ01EOiBSZWplY3RlZCBMUkkgdG8gbWFza2VkIAo+PiByZWdpc3Rl ciAweCUwOFhcbiIsCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bV9jb250ZXh0LmMgCj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5j Cj4+IGluZGV4IDY1Y2VmYzUyMGU3OS4uOTgyNjBkOGE0NWJlIDEwMDY0NAo+PiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9jb250ZXh0LmMKPj4gKysrIGIvZHJpdmVycy9ncHUv ZHJtL2k5MTUvaTkxNV9nZW1fY29udGV4dC5jCj4+IEBAIC0xMDI2LDExICsxMDI2LDExIEBAIHN0 YXRpYyBpbnQgZW1pdF9wcGd0dF91cGRhdGUoc3RydWN0IAo+PiBpOTE1X3JlcXVlc3QgKnJxLCB2 b2lkICpkYXRhKQo+PiDCoMKgwqDCoMKgwqDCoCBpZiAoSVNfRVJSKGNzKSkKPj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCByZXR1cm4gUFRSX0VSUihjcyk7Cj4+Cj4+IC3CoMKgwqDCoMKgwqDCoCAq Y3MrKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NKDIpOwo+PiArwqDCoMKgwqDCoMKgwqAgKmNzKysg PSBpOTE1X2dldF9scmlfY21kKGVuZ2luZSwgMik7Cj4+Cj4+IC3CoMKgwqDCoMKgwqDCoCAqY3Mr KyA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjhfUklOR19QRFBfVURXKGJhc2UsIDApKTsKPj4g K8KgwqDCoMKgwqDCoMKgICpjcysrID0gaTkxNV9nZXRfbHJpX3JlZyhlbmdpbmUsIEdFTjhfUklO R19QRFBfVURXKGJhc2UsIDApKTsKPj4gwqDCoMKgwqDCoMKgwqAgKmNzKysgPSB1cHBlcl8zMl9i aXRzKHBkX2RhZGRyKTsKPj4gLcKgwqDCoMKgwqDCoMKgICpjcysrID0gaTkxNV9tbWlvX3JlZ19v ZmZzZXQoR0VOOF9SSU5HX1BEUF9MRFcoYmFzZSwgMCkpOwo+PiArwqDCoMKgwqDCoMKgwqAgKmNz KysgPSBpOTE1X2dldF9scmlfcmVnKGVuZ2luZSwgR0VOOF9SSU5HX1BEUF9MRFcoYmFzZSwgMCkp Owo+PiDCoMKgwqDCoMKgwqDCoCAqY3MrKyA9IGxvd2VyXzMyX2JpdHMocGRfZGFkZHIpOwo+Pgo+ PiDCoMKgwqDCoMKgwqDCoCAqY3MrKyA9IE1JX05PT1A7Cj4+IEBAIC0xMDQwLDEzICsxMDQwLDEz IEBAIHN0YXRpYyBpbnQgZW1pdF9wcGd0dF91cGRhdGUoc3RydWN0IAo+PiBpOTE1X3JlcXVlc3Qg KnJxLCB2b2lkICpkYXRhKQo+PiDCoMKgwqDCoMKgwqDCoCBpZiAoSVNfRVJSKGNzKSkKPj4gwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gUFRSX0VSUihjcyk7Cj4+Cj4+IC3CoMKgwqDCoMKg wqDCoCAqY3MrKyA9IE1JX0xPQURfUkVHSVNURVJfSU1NKDIgKiBHRU44XzNMVkxfUERQRVMpOwo+ PiArwqDCoMKgwqDCoMKgwqAgKmNzKysgPSBpOTE1X2dldF9scmlfY21kKGVuZ2luZSwgMiAqIEdF TjhfM0xWTF9QRFBFUyk7Cj4+IMKgwqDCoMKgwqDCoMKgIGZvciAoaSA9IEdFTjhfM0xWTF9QRFBF UzsgaS0tOyApIHsKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCBkbWFfYWRkcl90IHBk X2RhZGRyID0gaTkxNV9wYWdlX2Rpcl9kbWFfYWRkcihwcGd0dCwgaSk7Cj4+Cj4+IC3CoMKgwqDC oMKgwqDCoMKgwqDCoMKgICpjcysrID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VOOF9SSU5HX1BE UF9VRFcoYmFzZSwgaSkpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqY3MrKyA9IGk5MTVf Z2V0X2xyaV9yZWcoZW5naW5lLCBHRU44X1JJTkdfUERQX1VEVyhiYXNlLCAKPj4gaSkpOwo+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgICpjcysrID0gdXBwZXJfMzJfYml0cyhwZF9kYWRkcik7Cj4+ IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgICpjcysrID0gaTkxNV9tbWlvX3JlZ19vZmZzZXQoR0VO OF9SSU5HX1BEUF9MRFcoYmFzZSwgaSkpOwo+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqY3Mr KyA9IGk5MTVfZ2V0X2xyaV9yZWcoZW5naW5lLCBHRU44X1JJTkdfUERQX0xEVyhiYXNlLCAKPj4g aSkpOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICpjcysrID0gbG93ZXJfMzJfYml0cyhwZF9k YWRkcik7Cj4+IMKgwqDCoMKgwqDCoMKgIH0KPj4gwqDCoMKgwqDCoMKgwqAgKmNzKysgPSBNSV9O T09QOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1 ZmZlci5jIAo+PiBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwo+ PiBpbmRleCA2NzlmN2MxNTYxYmEuLmFjNWIwNmQyZmZkYyAxMDA2NDQKPj4gLS0tIGEvZHJpdmVy cy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZXhlY2J1ZmZlci5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfZ2VtX2V4ZWNidWZmZXIuYwo+PiBAQCAtMTk2Myw3ICsxOTYzLDggQEAg c3RhdGljIGludCBpOTE1X3Jlc2V0X2dlbjdfc29sX29mZnNldHMoc3RydWN0IAo+PiBpOTE1X3Jl cXVlc3QgKnJxKQo+PiDCoMKgwqDCoGlmIChJU19FUlIoY3MpKQo+PiDCoMKgwqDCoMKgwqDCoCBy ZXR1cm4gUFRSX0VSUihjcyk7Cj4+Cj4+IC3CoMKgwqAgKmNzKysgPSBNSV9MT0FEX1JFR0lTVEVS X0lNTSg0KTsKPj4gK8KgwqDCoCAvKiBHZW43IG9ubHkgc28gbm8gbmVlZCB0byBzdXBwb3J0IHJl bGF0aXZlIG9mZnNldHMgKi8KPj4gK8KgwqDCoCAqY3MrKyA9IF9fTUlfTE9BRF9SRUdJU1RFUl9J TU0oNCk7Cj4+IMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewo+PiDCoMKgwqDCoMKg wqDCoCAqY3MrKyA9IGk5MTVfbW1pb19yZWdfb2Zmc2V0KEdFTjdfU09fV1JJVEVfT0ZGU0VUKGkp KTsKPj4gwqDCoMKgwqDCoMKgwqAgKmNzKysgPSAwOwo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9wZXJmLmMgCj4+IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9w ZXJmLmMKPj4gaW5kZXggYzQ5OTVkNWExNmQyLi44NmZhY2JjY2RiMDIgMTAwNjQ0Cj4+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfcGVyZi5jCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfcGVyZi5jCj4+IEBAIC0xNjM2LDcgKzE2MzYsOCBAQCBzdGF0aWMgdm9pZCBo c3dfZGlzYWJsZV9tZXRyaWNfc2V0KHN0cnVjdCAKPj4gZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3By aXYpCj4+IMKgKiBpbiB0aGUgY2FzZSB0aGF0IHRoZSBPQSB1bml0IGhhcyBiZWVuIGRpc2FibGVk Lgo+PiDCoCovCj4+IHN0YXRpYyB2b2lkCj4+IC1nZW44X3VwZGF0ZV9yZWdfc3RhdGVfdW5sb2Nr ZWQoc3RydWN0IGludGVsX2NvbnRleHQgKmNlLAo+PiArZ2VuOF91cGRhdGVfcmVnX3N0YXRlX3Vu bG9ja2VkKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgaW50ZWxfY29udGV4dCAqY2UsCj4+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1MzIgKnJlZ19zdGF0ZSwKPj4gwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IHN0cnVjdCBpOTE1X29hX2NvbmZp ZyAqb2FfY29uZmlnKQo+PiB7Cj4+IEBAIC0xNjU1LDcgKzE2NTYsMTIgQEAgZ2VuOF91cGRhdGVf cmVnX3N0YXRlX3VubG9ja2VkKHN0cnVjdCAKPj4gaW50ZWxfY29udGV4dCAqY2UsCj4+IMKgwqDC oMKgfTsKPj4gwqDCoMKgwqBpbnQgaTsKPj4KPj4gLcKgwqDCoCBDVFhfUkVHKHJlZ19zdGF0ZSwg Y3R4X29hY3R4Y3RybCwgR0VOOF9PQUNUWENPTlRST0wsCj4+ICvCoMKgwqAgLyoKPj4gK8KgwqDC oMKgICogTkI6IFRoZSBMUkkgaW5zdHJ1Y3Rpb24gaXMgZ2VuZXJhdGVkIGJ5IHRoZSBoYXJkd2Fy ZS4KPj4gK8KgwqDCoMKgICogU2hvdWxkIHdlIHJlYWQgaXQgaW4gYW5kIGFzc2VydCB0aGF0IHRo ZSBvZmZzZXQgZmxhZyBpcyBzZXQ/Cj4+ICvCoMKgwqDCoCAqLwo+PiArCj4+ICvCoMKgwqAgQ1RY X1JFRyhlbmdpbmUsIHJlZ19zdGF0ZSwgY3R4X29hY3R4Y3RybCwgR0VOOF9PQUNUWENPTlRST0ws Cj4+IMKgwqDCoMKgwqDCoMKgIChpOTE1LT5wZXJmLm9hLnBlcmlvZF9leHBvbmVudCA8PCBHRU44 X09BX1RJTUVSX1BFUklPRF9TSElGVCkgfAo+PiDCoMKgwqDCoMKgwqDCoCAoaTkxNS0+cGVyZi5v YS5wZXJpb2RpYyA/IEdFTjhfT0FfVElNRVJfRU5BQkxFIDogMCkgfAo+PiDCoMKgwqDCoMKgwqDC oCBHRU44X09BX0NPVU5URVJfUkVTVU1FKTsKPj4gQEAgLTE2ODIsMTAgKzE2ODgsMTAgQEAgZ2Vu OF91cGRhdGVfcmVnX3N0YXRlX3VubG9ja2VkKHN0cnVjdCAKPj4gaW50ZWxfY29udGV4dCAqY2Us Cj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+PiDCoMKgwqDCoMKgwqDCoCB9Cj4+Cj4+IC3C oMKgwqDCoMKgwqDCoCBDVFhfUkVHKHJlZ19zdGF0ZSwgc3RhdGVfb2Zmc2V0LCBmbGV4X3JlZ3Nb aV0sIHZhbHVlKTsKPj4gK8KgwqDCoMKgwqDCoMKgIENUWF9SRUcoZW5naW5lLCByZWdfc3RhdGUs IHN0YXRlX29mZnNldCwgZmxleF9yZWdzW2ldLCB2YWx1ZSk7Cj4+IMKgwqDCoMKgfQo+Pgo+PiAt wqDCoMKgIENUWF9SRUcocmVnX3N0YXRlLAo+PiArwqDCoMKgIENUWF9SRUcoZW5naW5lLCByZWdf c3RhdGUsCj4+IMKgwqDCoMKgwqDCoMKgIENUWF9SX1BXUl9DTEtfU1RBVEUsIEdFTjhfUl9QV1Jf Q0xLX1NUQVRFLAo+PiDCoMKgwqDCoMKgwqDCoCBpbnRlbF9zc2V1X21ha2VfcnBjcyhpOTE1LCAm Y2UtPnNzZXUpKTsKPj4gfQo+PiBAQCAtMTc3MCw3ICsxNzc2LDcgQEAgc3RhdGljIGludCBnZW44 X2NvbmZpZ3VyZV9hbGxfY29udGV4dHMoc3RydWN0IAo+PiBkcm1faTkxNV9wcml2YXRlICpkZXZf cHJpdiwKPj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjZS0+c3RhdGUtPm9iai0+bW0uZGlydHkg PSB0cnVlOwo+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJlZ3MgKz0gTFJDX1NUQVRFX1BOICog UEFHRV9TSVpFIC8gc2l6ZW9mKCpyZWdzKTsKPj4KPj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg Z2VuOF91cGRhdGVfcmVnX3N0YXRlX3VubG9ja2VkKGNlLCByZWdzLCBvYV9jb25maWcpOwo+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBnZW44X3VwZGF0ZV9yZWdfc3RhdGVfdW5sb2NrZWQoZGV2 X3ByaXYtPmVuZ2luZVtSQ1MwXSwgCj4+IGNlLCByZWdzLCBvYV9jb25maWcpOwo+Pgo+PiDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIGk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAoY2UtPnN0YXRlLT5v YmopOwo+PiDCoMKgwqDCoMKgwqDCoCB9Cj4+IEBAIC0yMTY2LDcgKzIxNzIsOCBAQCB2b2lkIGk5 MTVfb2FfaW5pdF9yZWdfc3RhdGUoc3RydWN0IAo+PiBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwK Pj4KPj4gwqDCoMKgwqBzdHJlYW0gPSBlbmdpbmUtPmk5MTUtPnBlcmYub2EuZXhjbHVzaXZlX3N0 cmVhbTsKPj4gwqDCoMKgwqBpZiAoc3RyZWFtKQo+PiAtwqDCoMKgwqDCoMKgwqAgZ2VuOF91cGRh dGVfcmVnX3N0YXRlX3VubG9ja2VkKGNlLCByZWdzLCBzdHJlYW0tPm9hX2NvbmZpZyk7Cj4+ICvC oMKgwqDCoMKgwqDCoCBnZW44X3VwZGF0ZV9yZWdfc3RhdGVfdW5sb2NrZWQoZW5naW5lLCBjZSwg cmVncywKPj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgc3RyZWFtLT5vYV9jb25maWcpOwo+PiB9Cj4+Cj4+IC8qKgo+PiAtLSAKPj4gMi4yMS4w LjUuZ2FlYjU4MmE5ODMKPj4KPj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KPj4gSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdAo+PiBJbnRlbC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCj4+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vaW50ZWwtZ2Z4Cj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gSW50ZWwtZ2Z4QGxpc3RzLmZy ZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlz dGluZm8vaW50ZWwtZ2Z4Cl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVs LWdmeA==