From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH i-g-t] tests/gem_softpin: New tests for softpin feature Date: Fri, 20 Nov 2015 16:20:15 +0000 Message-ID: <564F483F.6040701@linux.intel.com> References: <1447972143-27118-1-git-send-email-vinay.belgaumkar@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga02.intel.com (mga02.intel.com [134.134.136.20]) by gabe.freedesktop.org (Postfix) with ESMTP id 272CF6E6D7 for ; Fri, 20 Nov 2015 08:20:18 -0800 (PST) In-Reply-To: <1447972143-27118-1-git-send-email-vinay.belgaumkar@intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Vinay Belgaumkar , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org CkhpLAoKT24gMTkvMTEvMTUgMjI6MjksIFZpbmF5IEJlbGdhdW1rYXIgd3JvdGU6Cj4gVGhlc2Ug dGVzdHMgZXhlcmNpc2UgdGhlIHVzZXJwdHIgaW9jdGwgdG8gY3JlYXRlIHNoYXJlZCBidWZmZXJz Cj4gYmV0d2VlbiBDUFUgYW5kIEdQVS4gVGhleSBjb250YWluIGVycm9yIGFuZCBub3JtYWwgdXNh Z2Ugc2NlbmFyaW9zLgo+IFRoZXkgYWxzbyBjb250YWluIGEgY291cGxlIG9mIHN0cmVzcyB0ZXN0 cyB3aGljaCBjb3B5IGJ1ZmZlcnMgYmV0d2Vlbgo+IENQVSBhbmQgR1BVLiBUaGVzZSB0ZXN0cyBy ZWx5IG9uIHRoZSBzb2Z0cGluIHBhdGNoIGluIG9yZGVyIHRvIHBpbiBidWZmZXJzCj4gdG8gYSBj ZXJ0YWluIFZBLgo+Cj4gQ2F2ZWF0OiBUaGVzZSB0ZXN0cyB3ZXJlIGRlc2lnbmVkIHRvIHJ1biBv biA2NC1iaXQgc3lzdGVtLiBGdXR1cmUgd29yawo+IGluY2x1ZGVzIGFkZGluZyBsb2dpYyB0byBl bnN1cmUgdGhlc2UgdGVzdHMgY2FuIHJ1biBvbiAzMi1iaXQgc3lzdGVtcyB3aXRoCj4gUFBHVFQg c3VwcG9ydC4gU29tZSB0ZXN0cyBhcmUgY3VycmVudGx5IGRpc2FibGVkIGZvciAzMi1iaXQgc3lz dGVtcyBmb3IgdGhhdAo+IHJlYXNvbi4KPgo+IHYyOiBBZGRlZCBjYyBhbmQgc2lnbmVkLW9mZi1i eSBmaWVsZHMKPgo+IHYzOiBGaXhlZCByZXZpZXcgY29tbWVudHMsIGFkZGVkIGhlbHBlciBmdW5j dGlvbnMuIFJlbW92ZWQgdXNlcnB0ciBlcnJvcgo+IHNjZW5hcmlvcyBjb3ZlcmVkIGJ5IGV4aXN0 aW5nIHVzZXJwdHIgdGVzdHMuIE1vZGlmaWVkIHN0cmVzcyB0ZXN0IHRvIGhhdmUKPiAxMDBLIGJ1 ZmZlcnMsIGl0IG5vdyBydW5zIGZvciB+MzAgbWlucywgY2hlY2tzIGV2ZXJ5IGVsZW1lbnQgaGFz IGJlZW4gd3JpdHRlbgo+IHRvIGNvcnJlY3RseSwgYW5kIHBpbnMgYnVmZmVycyBhdCBkaWZmZXJl bnQgVk1Bcy4KPgo+IHY0OiBDaGFuZ2VkIG5hbWUgdG8gZ2VtX3NvZnRwaW4KPgo+IENjOiBNaWNo ZWwgVGhpZXJyeSA8bWljaGVsLnRoaWVycnlAaW50ZWwuY29tPgoKQ29weSB5b3VyIHJldmlld2Vy cyBhcyB3ZWxsIHBsZWFzZS4gOikKCj4gU2lnbmVkLW9mZi1ieTogVmluYXkgQmVsZ2F1bWthciA8 dmluYXkuYmVsZ2F1bWthckBpbnRlbC5jb20+Cj4gLS0tCj4gICB0ZXN0cy8uZ2l0aWdub3JlICAg ICAgIHwgICAgMSArCj4gICB0ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIHwgICAgMSArCj4gICB0ZXN0 cy9nZW1fc29mdHBpbi5jICAgIHwgMTI1MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKPiAgIDMgZmlsZXMgY2hhbmdlZCwgMTI1NCBpbnNlcnRpb25zKCsp Cj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMvZ2VtX3NvZnRwaW4uYwo+Cj4gZGlmZiAtLWdp dCBhL3Rlc3RzLy5naXRpZ25vcmUgYi90ZXN0cy8uZ2l0aWdub3JlCj4gaW5kZXggODBhZjlhNy4u NDI0ODcwYiAxMDA2NDQKPiAtLS0gYS90ZXN0cy8uZ2l0aWdub3JlCj4gKysrIGIvdGVzdHMvLmdp dGlnbm9yZQo+IEBAIC0yMSw2ICsyMSw3IEBAIGdlbV9iYWRfYmxpdAo+ICAgZ2VtX2JhZF9sZW5n dGgKPiAgIGdlbV9iYWRfcmVsb2MKPiAgIGdlbV9iYXNpYwo+ICtnZW1fc29mdHBpbgo+ICAgZ2Vt X2NhY2hpbmcKPiAgIGdlbV9jbG9zZV9yYWNlCj4gICBnZW1fY29uY3VycmVudF9hbGwKPiBkaWZm IC0tZ2l0IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMK PiBpbmRleCA4ZmIyZGU4Li4yMDA4ZDRhIDEwMDY0NAo+IC0tLSBhL3Rlc3RzL01ha2VmaWxlLnNv dXJjZXMKPiArKysgYi90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzCj4gQEAgLTExLDYgKzExLDcgQEAg VEVTVFNfcHJvZ3NfTSA9IFwKPiAgIAlkcnZfaGFuZ21hbiBcCj4gICAJZ2VtX2JhZF9yZWxvYyBc Cj4gICAJZ2VtX2Jhc2ljIFwKPiArCWdlbV9zb2Z0cGluIFwKPiAgIAlnZW1fY2FjaGluZyBcCj4g ICAJZ2VtX2Nsb3NlX3JhY2UgXAo+ICAgCWdlbV9jb25jdXJyZW50X2JsaXQgXAo+IGRpZmYgLS1n aXQgYS90ZXN0cy9nZW1fc29mdHBpbi5jIGIvdGVzdHMvZ2VtX3NvZnRwaW4uYwo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uYWVkNjA3Ywo+IC0tLSAvZGV2L251bGwKPiAr KysgYi90ZXN0cy9nZW1fc29mdHBpbi5jCj4gQEAgLTAsMCArMSwxMjUyIEBACj4gKy8qCj4gKyAq IENvcHlyaWdodCDCqSAyMDE1IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1pc3Np b24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFp bmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu dGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3 YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KPiAr ICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3Ry aWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdh cmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBpcyBm dXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgo+ ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9u IG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5j bHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiArICog U29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBX SVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQsIElO Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO R0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hU IEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiArICog TElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhF UldJU0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBU SEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUgU09G VFdBUkUuCj4gKyAqCj4gKyAqIEF1dGhvcnM6Cj4gKyAqICAgIFZpbmF5IEJlbGdhdW1rYXIgPHZp bmF5LmJlbGdhdW1rYXJAaW50ZWwuY29tPgo+ICsgICAgICBUaG9tYXMgRGFuaWVsIDx0aG9tYXMu ZGFuaWVsQGludGVsLmNvbT4KPiArICoKPiArICovCj4gKwo+ICsjaW5jbHVkZSA8dW5pc3RkLmg+ Cj4gKyNpbmNsdWRlIDxzdGRsaWIuaD4KPiArI2luY2x1ZGUgPHN0ZGludC5oPgo+ICsjaW5jbHVk ZSA8c3RkaW8uaD4KPiArI2luY2x1ZGUgPHN0cmluZy5oPgo+ICsjaW5jbHVkZSA8ZmNudGwuaD4K PiArI2luY2x1ZGUgPGludHR5cGVzLmg+Cj4gKyNpbmNsdWRlIDxlcnJuby5oPgo+ICsjaW5jbHVk ZSA8c3lzL3N0YXQuaD4KPiArI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgo+ICsjaW5jbHVkZSA8c3lz L3RpbWUuaD4KPiArI2luY2x1ZGUgPG1hbGxvYy5oPgo+ICsjaW5jbHVkZSAiZHJtLmgiCj4gKyNp bmNsdWRlICJpb2N0bF93cmFwcGVycy5oIgo+ICsjaW5jbHVkZSAiZHJtdGVzdC5oIgo+ICsjaW5j bHVkZSAiaW50ZWxfY2hpcHNldC5oIgo+ICsjaW5jbHVkZSAiaW50ZWxfaW8uaCIKPiArI2luY2x1 ZGUgImk5MTVfZHJtLmgiCj4gKyNpbmNsdWRlIDxhc3NlcnQuaD4KPiArI2luY2x1ZGUgPHN5cy93 YWl0Lmg+Cj4gKyNpbmNsdWRlIDxzeXMvaXBjLmg+Cj4gKyNpbmNsdWRlIDxzeXMvc2htLmg+Cj4g KyNpbmNsdWRlICJpZ3Rfa21zLmgiCj4gKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgo+ICsjaW5jbHVk ZSA8c3lzL3R5cGVzLmg+Cj4gKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgo+ICsKPiArI2RlZmluZSBP QkpFQ1RfU0laRSAxNjM4NAoKVW51c2VkLgoKPiArI2RlZmluZSBCT19TSVpFIDQgKiA0MDk2CgpD b3VsZCBpdCBiZSBqdXN0IG9uZSBwYWdlIHRvIHNhdmUgcmVzb3VyY2VzPwoKPiArI2RlZmluZSBN VUxUSVBBR0VfQk9fU0laRSA0ICogQk9fU0laRQoKTmVlZCBtb3JlIHRoYW4gdHdvIHBhZ2VzPwoK PiArI2RlZmluZSBTVE9SRV9CQVRDSF9CVUZGRVJfU0laRSA2Cj4gKyNkZWZpbmUgU1RSRVNTX0JB VENIX0JVRkZFUl9TSVpFIDUKPiArI2RlZmluZSBFWEVDX09CSkVDVF9QSU5ORUQJKDE8PDQpCj4g KyNkZWZpbmUgRVhFQ19PQkpFQ1RfU1VQUE9SVFNfNDhCX0FERFJFU1MgKDE8PDMpCj4gKyNkZWZp bmUgU0hBUkVEX0JVRkZFUl9TSVpFIDQwOTYKPiArI2RlZmluZSBOVU1fRVhFQ19PQkpFQ1RTIDIK PiArCj4gK3R5cGVkZWYgc3RydWN0IGRybV9pOTE1X2dlbV91c2VycHRyIGk5MTVfZ2VtX3VzZXJw dHI7Cj4gKwo+ICtzdGF0aWMgdm9pZCBnZW1fY3JlYXRlX3VzZXJwdHJfc3RydWN0KGk5MTVfZ2Vt X3VzZXJwdHIqLCB2b2lkKiBwdHIsIF9fdTY0IHNpemUsIGJvb2wgcmVhZF9vbmx5KTsKCk9rYXkg SSBjb21tZW50ZWQgb24gbWl4aW5nIG9mIF9fdSBhbmQgc3RkaW50IHR5cGVzIGFuZCBub3cgeW91 IGhhdmUgCm9wdGVkIGZvciB0aGUgZm9ybWVyIHdoaWNoIGlzIHNsaWdodGx5IHVudXN1YWwgZm9y IHVzZXJzcGFjZS4gSSB3b3VsZCAKcmVjb21tZW5kIHlvdSB1c2Ugc3RkaW50LCBzaG91bGQgYmUg ZWFzeSB3aXRoIHNlYXJjaCAmIHJlcGxhY2UgaW4gYW55IAplZGl0b3IuCgpIbSBhY3R1YWxseSBv biBhIGNsb3NlciBsb29rIHlvdSBzdGlsbCB1c2UgYm90aC4gSSB3b3VsZCByZWFsbHkgCnJlY29t bWVuZCB0byBzdGljayB3aXRoIG9uZSBmb3IgcmVhZGFiaWxpdHkuCgo+ICtzdGF0aWMgdm9pZCAq Y3JlYXRlX21lbV9idWZmZXIoX191NjQgc2l6ZSk7Cj4gK3N0YXRpYyBpbnQgZ2VtX2NhbGxfdXNl cnB0cl9pb2N0bChpbnQgZmQsIGk5MTVfZ2VtX3VzZXJwdHIgKnVzZXJwdHIpOwo+ICtzdGF0aWMg dm9pZCBnZW1fYmFzaWNfdGVzdCh2b2lkKTsKPiArc3RhdGljIHZvaWQgZ2VtX3Bpbl9pbnZhbGlk X3ZtYV90ZXN0KHZvaWQpOwo+ICtzdGF0aWMgdm9pZCBnZW1fcGluX292ZXJsYXBfdGVzdCh2b2lk KTsKPiArc3RhdGljIHZvaWQgZ2VtX3NobWVtX3Rlc3Qodm9pZCk7Cj4gK3N0YXRpYyB2b2lkIGdl bV9waW5faGlnaF9hZGRyZXNzX3Rlc3Qodm9pZCk7Cj4gK3N0YXRpYyB2b2lkIGdlbV9waW5fbW1h cF9hbm9ueW1vdXNfdGVzdCh2b2lkKTsKPiArc3RhdGljIHZvaWQgZ2VtX3Bpbl9tbWFwX2ZpbGVf dGVzdCh2b2lkKTsKPiArCj4gK3N0YXRpYyBpbnQgZ2VtX2NhbGxfdXNlcnB0cl9pb2N0bChpbnQg ZmQsIGk5MTVfZ2VtX3VzZXJwdHIqIHVzZXJwdHIpCgpDb2Rpbmcgc3R5bGUsIGk5MTVfZ2VtX3Vz ZXJwdHIgKnVzZXJwdHIsIHByb2JhYmx5IHNvbWUgbW9yZSBvZiB0aGlzIGFyb3VuZC4KCj4gK3sK PiArCWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1X0dF TV9VU0VSUFRSLCB1c2VycHRyKTsKPiArCj4gKwlpZiAocmV0KQo+ICsJCXJldCA9IGVycm5vOwo+ ICsKPiArCXJldHVybiByZXQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGdlbV9jcmVhdGVfdXNl cnB0cl9zdHJ1Y3QoaTkxNV9nZW1fdXNlcnB0ciAqdXNlcnB0ciwgdm9pZCogcHRyLCBfX3U2NCBz aXplLCBib29sIHJlYWRfb25seSkKCmEpIGxvb2tzIGJ5IHRoZSBleWUgdG8gYmUgb3ZlciA4MCBj aGFyIGxvbmcuIEJ1dCBJIGFtIG5vdCBzdXJlIGlmIElHVCAKYWxsb3dzIHRoaXMsIHByb2JhYmx5 IGJldHRlciB0byB0YWtlIGNhcmUgb2YgdGhvc2UuCgpiKSBtYXliZSBjaGFuZ2UgdGhlIG5hbWUg c29tZWhvdyBzbyBpdCBkb2VzJ3QgaGF2ZSBjcmVhdGUgaW4gdGhlIG5hbWUgCnNpbmNlIGl0IGlz IG5vdCBjcmVhdGluZyB0aGUgc3RydWN0IGFueSBtb3JlLgoKQWN0dWFsbHkuLiBvbiBhIGNsb3Nl ciBsb29rIGFsbCBjYWxscyB0byB0aGlzIGFyZSBpbW1lZGlhdGVseSBmb2xsb3dlZCAKYnkgZ2Vt X2NhbGxfdXNlcnB0cl9pb2N0bCBzbyBJdCBtYXkgYmUgYmVzdCBmb3IgcmVhZGFiaWxpdHkgb2Yg dGVzdCAKY2FzZXMgdG8gbWVyZ2UgdGhlIHR3by4KCj4gK3sKPiArCW1lbXNldCgodm9pZCopdXNl cnB0ciwgMCwgc2l6ZW9mKGk5MTVfZ2VtX3VzZXJwdHIpKTsKPiArCj4gKwl1c2VycHRyLT51c2Vy X3B0ciA9ICh1aW50cHRyX3QpcHRyOwoKQmFkIGNhc3QgYW5kIG5vdCBldmVuIG5lZWRlZC4KCj4g Kwl1c2VycHRyLT51c2VyX3NpemUgPSBzaXplOwo+ICsJdXNlcnB0ci0+ZmxhZ3MgPSBJOTE1X1VT RVJQVFJfVU5TWU5DSFJPTklaRUQ7Cj4gKwo+ICsJaWYgKHJlYWRfb25seSkKPiArCQl1c2VycHRy LT5mbGFncyB8PSBJOTE1X1VTRVJQVFJfUkVBRF9PTkxZOwo+ICt9Cj4gKwo+ICsvKiAgQ3JlYXRl cyBhIDRLIGFsaWduZWQgQ1BVIGJ1ZmZlcgo+ICsgKiAgQHNpemUgLSBzaXplIG9mIGJ1ZmZlcgo+ ICsgKiAgUkVUVVJOUyBwb2ludGVyIHRvIGJ1ZmZlciBvZiBAc2l6ZQo+ICsqLwoKVW51c3VhbCBj b21tZW50IGZvcm1hdHRpbmcuCgo+ICsKPiArc3RhdGljIHZvaWQqIGNyZWF0ZV9tZW1fYnVmZmVy KF9fdTY0IHNpemUpCj4gK3sKPiArCXZvaWQqIGFkZHI7Cj4gKwlpbnQgcmV0Owo+ICsKPiArCXJl dCA9IHBvc2l4X21lbWFsaWduKCZhZGRyLCA0MDk2LCBzaXplKTsKPiArCWlndF9hc3NlcnQocmV0 ID09IDApOwo+ICsKPiArCXJldHVybiBhZGRyOwo+ICt9Cj4gKwo+ICsvKiAgc2V0dXBfZXhlY19v YmogLSBwb3B1bGF0ZSBleGVjIG9iamVjdAo+ICsgKiBAZXhlYyAtIGV4ZWMgb2JqZWN0Cj4gKyAq IEBoYW5kbGUgLSBoYW5kbGUgdG8gZ2VtIGJ1ZmZlcgo+ICsgKiBmbGFncyAtIGFueSBmbGFncwo+ ICsgKiBvZmZzZXQgLSByZXF1ZXN0ZWQgVk1BCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBzZXR1cF9l eGVjX29iaihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZXhlYywgX191MzIgaGFu ZGxlLCBfX3UzMiBmbGFncywgX191NjQgb2Zmc2V0KQo+ICt7Cj4gKwltZW1zZXQoZXhlYywgMCwg c2l6ZW9mKHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyKSk7Cj4gKwlleGVjLT5oYW5k bGUgPSBoYW5kbGU7Cj4gKwlleGVjLT5mbGFncyA9IGZsYWdzOwo+ICsJZXhlYy0+b2Zmc2V0ID0g b2Zmc2V0Owo+ICt9Cj4gKwo+ICsvKgo+ICsgKiBnZW1fc3RvcmVfZGF0YV9zdm0gLSBwb3B1bGF0 ZSBiYXRjaCBidWZmZXIgd2l0aCBNSV9TVE9SRV9EV09SRF9JTU0gY29tbWFuZAo+ICsgKiBAZmQ6 IGRybSBmaWxlIGRlc2NyaXB0b3IKPiArICogQGJ1ZjogYmF0Y2ggYnVmZmVyCj4gKyAqIEBidWZm ZXJfc2l6ZTogc2l6ZSBvZiBidWZmZXIKPiArICogQGFkZHI6IGRlc3RpbmF0aW9uIFZpcnR1YWwg YWRkcmVzcwo+ICsgKiBAZGF0YTogZGF0YSB0byBiZSBzdG9yZSBhdCBkZXN0aW5hdGlvbgo+ICsg KiBAZW5kOiB3aGV0aGVyIHRvIGVuZCBiYXRjaCBidWZmZXIgb3Igbm90Cj4gKyAqLwo+ICtzdGF0 aWMgaW50IGdlbV9zdG9yZV9kYXRhX3N2bShpbnQgZmQsIHVpbnQzMl90KiBjbWRfYnVmLCB1aW50 NjRfdCB2YWRkciwKPiArCQkJICAgICAgdWludDMyX3QgZGF0YSwgYm9vbCBlbmQpCj4gK3sKPiAr CWludCBpID0gMDsKPiArCj4gKwljbWRfYnVmW2krK10gPSBNSV9TVE9SRV9EV09SRF9JTU07Cj4g KwljbWRfYnVmW2krK10gPSB2YWRkciAmIDB4RkZGRkZGRkM7Cj4gKwljbWRfYnVmW2krK10gPSAo dmFkZHIgPj4gMzIpICYgMHhGRkZGOyAvKiBiaXRzIDMyOjQ3ICovCj4gKwo+ICsJY21kX2J1Zltp KytdID0gZGF0YTsKPiArCWlmIChlbmQpewo+ICsJCWNtZF9idWZbaSsrXSA9IE1JX0JBVENIX0JV RkZFUl9FTkQ7Cj4gKwkJY21kX2J1ZltpKytdID0gMDsKPiArCX0KPiArCj4gKwlyZXR1cm4gKGkg KiBzaXplb2YodWludDMyX3QpKTsKPiArfQo+ICsKPiArLyoKPiArICogZ2VtX3N0b3JlX2RhdGEg LSBwb3B1bGF0ZSBiYXRjaCBidWZmZXIgd2l0aCBNSV9TVE9SRV9EV09SRF9JTU0gY29tbWFuZAo+ ICsgKiBUaGlzIG9uZSBmaWxscyB1cCByZWxvYyBidWZmZXIgYXMgd2VsbAo+ICsgKiBAZmQ6IGRy bSBmaWxlIGRlc2NyaXB0b3IKPiArICogQGJ1ZjogYmF0Y2ggYnVmZmVyCj4gKyAqIEBidWZmZXJf c2l6ZTogc2l6ZSBvZiBidWZmZXIKPiArICogQGFkZHI6IGRlc3RpbmF0aW9uIFZpcnR1YWwgYWRk cmVzcwo+ICsgKiBAZGF0YTogZGF0YSB0byBiZSBzdG9yZSBhdCBkZXN0aW5hdGlvbgo+ICsgKiBA cmVsb2MgLSByZWxvY2F0aW9uIGVudHJ5Cj4gKyAqIEBlbmQ6IHdoZXRoZXIgdG8gZW5kIGJhdGNo IGJ1ZmZlciBvciBub3QKPiArICovCj4gKwo+ICtzdGF0aWMgaW50IGdlbV9zdG9yZV9kYXRhKGlu dCBmZCwgdWludDMyX3QqIGNtZF9idWYsCj4gKwkJCSAgICAgIHVpbnQzMl90IGhhbmRsZSwgdWlu dDMyX3QgZGF0YSwKPiArCQkJICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2Vu dHJ5ICpyZWxvYywKPiArCQkJICAgICAgYm9vbCBlbmQpCj4gK3sKPiArCWludCBpID0gMDsKPiAr Cj4gKwljbWRfYnVmW2krK10gPSBNSV9TVE9SRV9EV09SRF9JTU07Cj4gKwljbWRfYnVmW2krK10g PSAwOyAvKiBsb3dlciAzMSBiaXRzIG9mIDQ4IGJpdCBhZGRyZXNzIC0gMCBiZWNhdXNlIHJlbG9j IGlzIG5lZWRlZCAqLwo+ICsJY21kX2J1ZltpKytdID0gMDsgLyogdXBwZXIgMTUgYml0cyBvZiA0 OCBiaXQgYWRkcmVzcyAtIDAgYmVjYXVzZSByZWxvYyBpcyBuZWVkZWQgKi8KPiArCXJlbG9jLT5v ZmZzZXQgPSAxICogc2l6ZW9mKHVpbnQzMl90KTsKPiArCXJlbG9jLT5kZWx0YSA9IDA7Cj4gKwly ZWxvYy0+dGFyZ2V0X2hhbmRsZSA9IGhhbmRsZTsKPiArCXJlbG9jLT5yZWFkX2RvbWFpbnMgPSBJ OTE1X0dFTV9ET01BSU5fUkVOREVSOwo+ICsJcmVsb2MtPndyaXRlX2RvbWFpbiA9IEk5MTVfR0VN X0RPTUFJTl9SRU5ERVI7Cj4gKwlyZWxvYy0+cHJlc3VtZWRfb2Zmc2V0ID0gMDsKPiArCXJlbG9j Kys7CgpQb2ludGxlc3MgbGluZS4KCj4gKwljbWRfYnVmW2krK10gPSBkYXRhOwo+ICsJaWYgKGVu ZCl7Cj4gKwkJY21kX2J1ZltpKytdID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKPiArCQljbWRfYnVm W2krK10gPSAwOwo+ICsJfQo+ICsKPiArCXJldHVybiAoaSAqIHNpemVvZih1aW50MzJfdCkpOwo+ ICt9Cj4gKwo+ICsvKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGZpbGxpbmcgZXhlY2J1ZmZlciBzdHJ1 Y3QgKi8KPiArc3RhdGljIHZvaWQgc2V0dXBfZXhlY2J1ZmZlcihzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X2V4ZWNidWZmZXIyICpleGVjYnVmLCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAq ZXhlY19vYmplY3QsCj4gKwkJCQkJaW50IHJpbmcsIGludCBidWZmZXJfY291bnQsIGludCBiYXRj aF9sZW5ndGgpCj4gK3sKPiArCWV4ZWNidWYtPmJ1ZmZlcnNfcHRyID0gKHVpbnRwdHJfdClleGVj X29iamVjdDsKPiArCWV4ZWNidWYtPmJ1ZmZlcl9jb3VudCA9IGJ1ZmZlcl9jb3VudDsKPiArCWV4 ZWNidWYtPmJhdGNoX3N0YXJ0X29mZnNldCA9IDA7Cj4gKwlleGVjYnVmLT5iYXRjaF9sZW4gPSBi YXRjaF9sZW5ndGg7Cj4gKwlleGVjYnVmLT5jbGlwcmVjdHNfcHRyID0gMDsKPiArCWV4ZWNidWYt Pm51bV9jbGlwcmVjdHMgPSAwOwo+ICsJZXhlY2J1Zi0+RFIxID0gMDsKPiArCWV4ZWNidWYtPkRS NCA9IDA7Cj4gKwlleGVjYnVmLT5mbGFncyA9IHJpbmc7Cj4gKwlpOTE1X2V4ZWNidWZmZXIyX3Nl dF9jb250ZXh0X2lkKCpleGVjYnVmLCAwKTsKPiArCWV4ZWNidWYtPnJzdmQyID0gMDsKPiArfQo+ ICsKPiArLyogSGVscGVyIGZ1bmN0aW9uIGZvciBleGVjIGFuZCBzeW5jIGZ1bmN0aW9ucyAqLwo+ ICtzdGF0aWMgdm9pZCBzdWJtaXRfYW5kX3N5bmMoaW50IGZkLCBzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X2V4ZWNidWZmZXIyICpleGVjYnVmLCB1aW50MzJfdCBiYXRjaF9idWZfaGFuZGxlKQo+ICt7Cj4g KwlnZW1fZXhlY2J1ZihmZCwgZXhlY2J1Zik7Cj4gKwlnZW1fc3luYyhmZCwgYmF0Y2hfYnVmX2hh bmRsZSk7Cj4gK30KPiArCj4gKy8qICBnZW1fYmFzaWNfdGVzdCAtIFRoaXMgdGVzdCB3aWxsIGNy ZWF0ZSBhIHNoYXJlZCBidWZmZXIsIGFuZCBjcmVhdGUgYSBjb21tYW5kCj4gKyAqICBmb3IgR1BV IHRvIHdyaXRlIGRhdGEgaW4gaXQKPiArICogIENQVSB3aWxsIHJlYWQgYW5kIG1ha2Ugc3VyZSBl eHBlY3RlZCB2YWx1ZSBpcyBvYnRhaW5lZAo+ICsgKiAgQHZhbGlkX3NoYXJlZF9idWZmZXIgLSB3 aGV0aGVyIHRlc3Qgd2l0aCB2YWxpZCBtYWxsb2MnZCBidWZmZXIgb3Igbm90Cj4gKwo+ICsgICBp ZiAodmFsaWRfc2hhcmVkX2J1ZmZlciA9PSB0cnVlKQo+ICsgICBNYWxsb2MgYSA0SyBidWZmZXIK PiArICAgU2hhcmUgYnVmZmVyIHdpdGggd2l0aCBHUFUgYnkgdXNpbmcgdXNlcnB0ciBpb2N0bAo+ ICsgICBDcmVhdGUgYmF0Y2ggYnVmZmVyIHRvIHdyaXRlIERBVEEgdG8gZmlyc3QgZHdvcmQgb2Yg YnVmZmVyCj4gKyAgIFVzZSAweDEwMDAgYWRkcmVzcyBhcyBkZXN0aW5hdGlvbiBhZGRyZXNzIGlu IGJhdGNoIGJ1ZmZlcgo+ICsgICBTZXQgRVhFQ19PQkpFQ1RfUElOTkVEIGZsYWcgaW4gZXhlYyBv YmplY3QKPiArICAgU2V0ICdvZmZzZXQnIGluIGV4ZWMgb2JqZWN0IHRvIDB4MTAwMAo+ICsgICBT dWJtaXQgZXhlY2J1ZmZlcgo+ICsgICBWZXJpZnkgdmFsdWUgb2YgZmlyc3QgRFdPUkQgaW4gc2hh cmVkIGJ1ZmZlciBtYXRjaGVzIERBVEEKPiArCj4gKyAgIGlmICh2YWxpZF9zaGFyZWRfYnVmZmVy ID09IGZhbHNlKQo+ICsgICBEZWNsYXJlIG51bGwgYnVmZmVyCj4gKyAgIENhbGwgVXNlcnB0ciBp b2N0bCB3aXRoIG51bGwgYnVmZmVyCj4gKyAgIFJ1biBCYXNpYyBUZXN0Cj4gKyAgIFRlc3Qgc2hv dWxkIGZhaWwgYXQgc3VibWl0IGV4ZWNidWZmZXIKPiArKi8KPiArc3RhdGljIHZvaWQgZ2VtX2Jh c2ljX3Rlc3Qodm9pZCkKPiArewoKSXQgd291bGQgYmUgYmV0dGVyIGluIG15IG9waW5pb24gaWYg dGhlIGJhc2ljIHRlc3RzIGRpZG4ndCB1c2UgdXNlcnB0ciAKYnV0IGEgbm9ybWFsIGJvLgoKTm90 IHNheWluZyB5b3UgY2FuJ3QgaGF2ZSBib3RoLCBvbiB0aGUgY29udHJhcnksIEkgZXZlbiB0aGlu ayB3ZSBuZWVkIGJvdGguCgo+ICsJaTkxNV9nZW1fdXNlcnB0ciB1c2VycHRyOwo+ICsJaW50IGZk LCByZXQ7Cj4gKwl1aW50MzJfdCogc2hhcmVkX2J1ZmZlciA9IE5VTEw7Cj4gKwlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4 ZWNfb2JqZWN0MiBleGVjX29iamVjdDJbTlVNX0VYRUNfT0JKRUNUU107Cj4gKwl1aW50MzJfdCBi YXRjaF9idWZmZXJbU1RPUkVfQkFUQ0hfQlVGRkVSX1NJWkVdOwo+ICsJdWludDMyX3QgYmF0Y2hf YnVmX2hhbmRsZSwgc2hhcmVkX2J1Zl9oYW5kbGU7Cj4gKwlpbnQgcmluZywgbGVuOwo+ICsJY29u c3QgdWludDMyX3QgZGF0YSA9IDB4MTIzNDU2Nzg7Cj4gKwl1aW50NjRfdCBwaW5uaW5nX29mZnNl dCA9IDB4MTAwMDsKPiArCj4gKwlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5URUwpOwo+ ICsJYmF0Y2hfYnVmX2hhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUpOwo+ICsKPiArCS8q IGNyZWF0ZSBjcHUgYnVmZmVyLCBzZXQgdG8gYWxsIDB4RidzICovCj4gKwlzaGFyZWRfYnVmZmVy ID0gY3JlYXRlX21lbV9idWZmZXIoQk9fU0laRSk7CgpDb21tZW50IHNlZW1zIHdyb25nLCBvciBz b21ldGhpbmcsIEkgZG9uJ3Qgc2VlIHNldHRpbmcgdG8gMHhGcy4KCj4gKwkKPiArCS8qIHNoYXJl IHdpdGggR1BVICovCj4gKwlnZW1fY3JlYXRlX3VzZXJwdHJfc3RydWN0KCZ1c2VycHRyLCBzaGFy ZWRfYnVmZmVyLCBCT19TSVpFLCBmYWxzZSk7Cj4gKwlyZXQgPSBnZW1fY2FsbF91c2VycHRyX2lv Y3RsKGZkLCAmdXNlcnB0cik7Cj4gKwlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7CgpJIHJlY29tbWVu ZCBtb3ZpbmcgdGhpcyBhc3NlcnQgaW50byB0aGUgdXNlcnB0ciBoZWxwZXIgYW5kIGF0IHRoZSBz YW1lIAp0aW1lLi4uCgo+ICsKPiArCS8qIEdldCBoYW5kbGUgZm9yIHNoYXJlZCBidWZmZXIgKi8K PiArCXNoYXJlZF9idWZfaGFuZGxlID0gdXNlcnB0ci5oYW5kbGU7CgouLi4gbWFrZSB0aGUgaGVs cGVyIHJldHVybiB0aGUgaGFuZGxlLiBTYXZlIHNvbWUgbGluZXMgb2YgY29kZSBhbmQgbWFrZSAK dGhlIHRlc3QgY2FzZXMgbW9yZSByZWFkYWJsZS4KCj4gKwkvKiBjcmVhdGUgY29tbWFuZCBidWZm ZXIgd2l0aCB3cml0ZSBjb21tYW5kICovCj4gKwlsZW4gPSBnZW1fc3RvcmVfZGF0YV9zdm0oZmQs IGJhdGNoX2J1ZmZlciwgcGlubmluZ19vZmZzZXQsIGRhdGEsIHRydWUpOwo+ICsJaWd0X2Fzc2Vy dF9sdGUobGVuLCBTVE9SRV9CQVRDSF9CVUZGRVJfU0laRSAqIDQpOwoKUmFuZ2UgY2hlY2tpbmcg c2hvdWxkIGhhcHBlbiBpbiBnZW1fc3RvcmVfZGF0YV9zdm0gc2luY2UgaXQgaXMgcHJldHR5IAp3 ZWlyZCB0byBkbyBpdCBhZnRlciB0aGUgZmFjdC4KCj4gKwo+ICsJZ2VtX3dyaXRlKGZkLCBiYXRj aF9idWZfaGFuZGxlLCAwLCBiYXRjaF9idWZmZXIsIGxlbik7Cj4gKwo+ICsJLyogc3VibWl0IGNv bW1hbmQgYnVmZmVyICovCj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzBdLCBzaGFy ZWRfYnVmX2hhbmRsZSwgRVhFQ19PQkpFQ1RfUElOTkVELCBwaW5uaW5nX29mZnNldCk7Cj4gKwlz ZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzFdLCBiYXRjaF9idWZfaGFuZGxlLCAwLCAwKTsK PiArCj4gKwlyaW5nID0gMDsKPiArCWlmIChIQVNfQkxUX1JJTkcoaW50ZWxfZ2V0X2RybV9kZXZp ZChmZCkpKQo+ICsJCXJpbmcgPSBJOTE1X0VYRUNfQkxUOwoKSSd2ZSBhc2tlZCBhYm91dCB0aGlz IGluIHRoZSBwcmV2aW91cyByb3VuZCAtIHdoeSBpdCBpcyBpbnRlcmVzdGluZyB0byAKdXNlIHRo ZSBibGl0dGVyIHJpbmcgaWYgYXZhaWxhYmxlIGFuZCBub3QgYWx3YXlzIHRoZSByZW5kZXIgcmlu Zz8KCj4gKwo+ICsJc2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmplY3QyLCByaW5n LCBOVU1fRVhFQ19PQkpFQ1RTLCBsZW4pOwo+ICsJc3VibWl0X2FuZF9zeW5jKGZkLCAmZXhlY2J1 ZiwgYmF0Y2hfYnVmX2hhbmRsZSk7CgpJbiB0aGUgcHJldmlvdXMgcm91bmQgSSBzdWdnZXN0ZWQg dGhhdCB5b3UgY2hlY2sgdGhlIG9mZnNldCBhbmQgSSBzdGFuZCAKYnkgdGhhdC4gSXQgaXMgc3Ry b25nZXIgdG8gY2hlY2sgdGhlIG9mZnNldCBhcyByZXR1cm5lZCBieSB0aGUga2VybmVsIAphbmQg bm90IGp1c3QgdGhlIHdyaXR0ZW4gZGF0YS4KCj4gKwkvKiBjaGVjayBvbiBDUFUgdG8gc2VlIGlm IHZhbHVlIGNoYW5nZXMgKi8KPiArCWlndF9mYWlsX29uX2Yoc2hhcmVkX2J1ZmZlclswXSAhPSBk YXRhLAo+ICsJCSAgICAgICJcbkNQVSByZWFkIGRvZXMgbm90IG1hdGNoIEdQVSB3cml0ZSwgZXhw ZWN0ZWQ6IDB4JXgsIGdvdDogMHgleFxuIiwgZGF0YSwgc2hhcmVkX2J1ZmZlclswXSk7CgpXaHkg ZG9uJ3QgeW91IG5lZWQgdG8gbW92ZSB0aGUgc2hhcmVkX2J1Zl9oYW5kbGUgdG8gdGhlIENQVSBk b21haW4gCmJlZm9yZSBhY2Nlc3NpbmcgaXQ/IEkgdGhvdWdodCB0aGF0IGlzIHJlcXVpcmVkIHRv IGVuc3VyZSBHUFUgYXMgCmZpbmlzaGVkIHdyaXRpbmcgdG8gaXQgYW5kIHlvdSBkb24ndCBoaXQg Y2FjaGUgY29oZXJlbmN5IGlzc3Vlcz8KCj4gKwlnZW1fY2xvc2UoZmQsIGJhdGNoX2J1Zl9oYW5k bGUpOwo+ICsJY2xvc2UoZmQpOwo+ICsKPiArCWZyZWUoc2hhcmVkX2J1ZmZlcik7Cj4gK30KPiAr Cj4gKy8qICBnZW1fbXVsdGlwbGVfcHJvY2Vzc190ZXN0IC0gUnVuIGJhc2ljIHRlc3Qgc2ltdWx0 YW5lb3VzbHkgd2l0aCBtdWx0aXBsZSBwcm9jZXNzZXMKPiArKiAgIFRoaXMgd2lsbCB0ZXN0IHBp bm5pbmcgc2FtZSBWQSBzZXBhcmF0ZWx5IGluIGVhY2ggcHJvY2Vzcwo+ICsKPiArICAgIGZvcmso KTsKPiArICAgIEV4ZWN1dGUgYmFzaWMgdGVzdCBpbiBwYXJlbnQvY2hpbGQgcHJvY2Vzc2VzCj4g Kwo+ICsqLwo+ICsKPiArI2RlZmluZSBNQVhfTlVNX1BST0NFU1NFUyAxMAo+ICsKPiArc3RhdGlj IHZvaWQgZ2VtX211bHRpcGxlX3Byb2Nlc3NfdGVzdCh2b2lkKQo+ICt7Cj4gKwlpZ3RfZm9yayhj aGlsZCwgTUFYX05VTV9QUk9DRVNTRVMpIHsKPiArCQlnZW1fYmFzaWNfdGVzdCgpOwo+ICsJfQo+ ICsJaWd0X3dhaXRjaGlsZHJlbigpOwo+ICt9Cj4gKwo+ICsKPiArLyogZ2VtX3JlcGluX3Rlc3QK PiArICogVGhpcyB0ZXN0IHRyaWVzIHRvIHJlcGluIGEgYnVmZmVyIGF0IGEgcHJldmlvdXNseSBw aW5uZWQgdm1hCj4gKyAqIGZyb20gYSBkaWZmZXJlbnQgZXhlY2J1Zi4KPiArCj4gKyAqIE1hbGxv YyBhIDRLIGJ1ZmZlcgo+ICsgKiBTaGFyZSBidWZmZXIgd2l0aCB3aXRoIEdQVSBieSB1c2luZyB1 c2VycHRyIGlvY3RsCj4gKyAqIENyZWF0ZSBiYXRjaCBidWZmZXIgdG8gd3JpdGUgREFUQSB0byBm aXJzdCBkd29yZCBvZiBidWZmZXIKPiArICogVXNlIDB4MTAwMCBhZGRyZXNzIGFzIGRlc3RpbmF0 aW9uIGFkZHJlc3MgaW4gYmF0Y2ggYnVmZmVyCj4gKyAqIFNldCBFWEVDX09CSkVDVF9QSU5ORUQg ZmxhZyBpbiBleGVjIG9iamVjdAo+ICsgKiBTZXQgJ29mZnNldCcgaW4gZXhlYyBvYmplY3QgdG8g MHgxMDAwIFZNQQo+ICsgKiBTdWJtaXQgZXhlY2J1ZmZlcgo+ICsgKiBWZXJpZnkgdmFsdWUgb2Yg Zmlyc3QgRFdPUkQgaW4gc2hhcmVkIGJ1ZmZlciBtYXRjaGVzIERBVEEKPiArCj4gKyAqIENyZWF0 ZSBzZWNvbmQgc2hhcmVkIGJ1ZmZlcgo+ICsgKiBGb2xsb3cgYWxsIHN0ZXBzIGFib3ZlCj4gKyAq IEV4ZWNwdCwgZm9yIG9mZnNldCwgdXNlIFZNQSBvZiBmaXJzdCBidWZmZXIgYWJvdmUKPiArICog U3VibWl0IGV4ZWNidWZmZXIKPiArICogVmVyaWZ5IHZhbHVlIG9mIGZpcnN0IERXT1JEIGluIHNl Y29uZCBzaGFyZWQgYnVmZmVyIG1hdGNoZXMgREFUQQo+ICsqLwoKSSBoYXRlIGl0IGhvdyB5b3Ug aGF2ZSBhbGwgcG9zc2libGUgY29tbWVudCBzdHlsZXMgaW4gb25lIGZpbGUuCgovKioKICAqIEJs YWgKCi8qIEJsYWgKCi8qCiAgKiBibGFoCgovKgpAY29kZQpkZXNjcmlwdGlvbiBvZiBzdGVwcwoK LyoKICAqIGRlc2NyaXB0aW9uIG9mIHN0ZXBzCgovKgogIGRlc2NyaXB0aW9uIG9mIHN0ZXBzCgou Li4KCkl0IGlzIGp1c3QgdG9vIG11Y2guLgoKPiArc3RhdGljIHZvaWQgZ2VtX3JlcGluX3Rlc3Qo dm9pZCkKPiArewo+ICsJaTkxNV9nZW1fdXNlcnB0ciB1c2VycHRyOwo+ICsJaTkxNV9nZW1fdXNl cnB0ciB1c2VycHRyMTsKPiArCWludCBmZCwgcmV0Owo+ICsJdWludDMyX3QqIHNoYXJlZF9idWZm ZXIgPSBOVUxMOwo+ICsJdWludDMyX3QqIHNoYXJlZF9idWZmZXIxID0gTlVMTDsKPiArCXN0cnVj dCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKPiArCXN0cnVjdCBkcm1faTkxNV9n ZW1fZXhlY19vYmplY3QyIGV4ZWNfb2JqZWN0MltOVU1fRVhFQ19PQkpFQ1RTXTsKPiArCXVpbnQz Ml90IGJhdGNoX2J1ZmZlcltTVE9SRV9CQVRDSF9CVUZGRVJfU0laRV07Cj4gKwl1aW50MzJfdCBi YXRjaF9idWZfaGFuZGxlLCBzaGFyZWRfYnVmX2hhbmRsZSwgc2hhcmVkX2J1Zl9oYW5kbGUxOwo+ ICsJaW50IHJpbmcsIGxlbjsKPiArCWNvbnN0IHVpbnQzMl90IGRhdGEgPSAweDEyMzQ1Njc4Owo+ ICsJdWludDY0X3QgcGlubmluZ19vZmZzZXQgPSAweDEwMDA7Cj4gKwo+ICsJLyogQ3JlYXRlIGdl bSBvYmplY3QgKi8KPiArCWZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7Cj4gKwli YXRjaF9idWZfaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgQk9fU0laRSk7Cj4gKwo+ICsJLyogY3Jl YXRlIGNwdSBidWZmZXIsIHNldCB0byBhbGwgMHhGJ3MgKi8KPiArCXNoYXJlZF9idWZmZXIgPSBj cmVhdGVfbWVtX2J1ZmZlcihCT19TSVpFKTsKPiArCXNoYXJlZF9idWZmZXIxID0gY3JlYXRlX21l bV9idWZmZXIoQk9fU0laRSk7Cj4gKwlzaGFyZWRfYnVmZmVyWzBdID0gMHgwOwo+ICsJc2hhcmVk X2J1ZmZlcjFbMF0gPSAweDA7CgpPb3BzLgoKPiArCj4gKwkvKiBzaGFyZSB3aXRoIEdQVSAqLwo+ ICsJZ2VtX2NyZWF0ZV91c2VycHRyX3N0cnVjdCgmdXNlcnB0ciwgc2hhcmVkX2J1ZmZlciwgQk9f U0laRSwgZmFsc2UpOwo+ICsJcmV0ID0gZ2VtX2NhbGxfdXNlcnB0cl9pb2N0bChmZCwgJnVzZXJw dHIpOwo+ICsJaWd0X2Fzc2VydF9lcShyZXQsIDApOwo+ICsKPiArCS8vZ2VtX2NyZWF0ZV91c2Vy cHRyX3N0cnVjdCgmdXNlcnB0cjEsIHNoYXJlZF9idWZmZXIxLCBCT19TSVpFICogMiwgZmFsc2Up OwoKUmVtb3ZlPwoKPiArCWdlbV9jcmVhdGVfdXNlcnB0cl9zdHJ1Y3QoJnVzZXJwdHIxLCBzaGFy ZWRfYnVmZmVyMSwgQk9fU0laRSwgZmFsc2UpOwo+ICsJcmV0ID0gZ2VtX2NhbGxfdXNlcnB0cl9p b2N0bChmZCwgJnVzZXJwdHIxKTsKPiArCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKPiArCj4gKwkv KiBHZXQgaGFuZGxlIGZvciBzaGFyZWQgYnVmZmVyICovCj4gKwlzaGFyZWRfYnVmX2hhbmRsZSA9 IHVzZXJwdHIuaGFuZGxlOwo+ICsJc2hhcmVkX2J1Zl9oYW5kbGUxID0gdXNlcnB0cjEuaGFuZGxl Owo+ICsKPiArCS8qIGNyZWF0ZSBjb21tYW5kIGJ1ZmZlciB3aXRoIHdyaXRlIGNvbW1hbmQgKi8K PiArCWxlbiA9IGdlbV9zdG9yZV9kYXRhX3N2bShmZCwgYmF0Y2hfYnVmZmVyLCBwaW5uaW5nX29m ZnNldCwgZGF0YSwgdHJ1ZSk7Cj4gKwlnZW1fd3JpdGUoZmQsIGJhdGNoX2J1Zl9oYW5kbGUsIDAs IGJhdGNoX2J1ZmZlciwgbGVuKTsKPiArCj4gKwkvKiBzdWJtaXQgY29tbWFuZCBidWZmZXIgKi8K PiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMF0sIHNoYXJlZF9idWZfaGFuZGxlLCBF WEVDX09CSkVDVF9QSU5ORUQsIHBpbm5pbmdfb2Zmc2V0KTsKPiArCXNldHVwX2V4ZWNfb2JqKCZl eGVjX29iamVjdDJbMV0sIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIDApOwo+ICsKPiArCXJpbmcgPSAw Owo+ICsJaWYgKEhBU19CTFRfUklORyhpbnRlbF9nZXRfZHJtX2RldmlkKGZkKSkpCj4gKwkJcmlu ZyA9IEk5MTVfRVhFQ19CTFQ7Cj4gKwo+ICsJc2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhl Y19vYmplY3QyLCByaW5nLCBOVU1fRVhFQ19PQkpFQ1RTLCBsZW4pOwo+ICsJc3VibWl0X2FuZF9z eW5jKGZkLCAmZXhlY2J1ZiwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwo+ICsJaWd0X2Fzc2VydCgq c2hhcmVkX2J1ZmZlciA9PSBkYXRhKTsKPiArCj4gKwkvKiBTZWNvbmQgYnVmZmVyICovCj4gKwkv KiBjcmVhdGUgY29tbWFuZCBidWZmZXIgd2l0aCB3cml0ZSBjb21tYW5kICovCj4gKwlwaW5uaW5n X29mZnNldCA9IGV4ZWNfb2JqZWN0MlswXS5vZmZzZXQ7Cj4gKwlsZW4gPSBnZW1fc3RvcmVfZGF0 YV9zdm0oZmQsIGJhdGNoX2J1ZmZlciwgcGlubmluZ19vZmZzZXQsIGRhdGEsIHRydWUpOwo+ICsJ Z2VtX3dyaXRlKGZkLCBiYXRjaF9idWZfaGFuZGxlLCAwLCBiYXRjaF9idWZmZXIsIGxlbik7Cj4g Kwo+ICsJLyogc3VibWl0IGNvbW1hbmQgYnVmZmVyICovCj4gKwkvKiBQaW4gYXQgc2hhcmVkX2J1 ZmZlciwgbm90IHNoYXJlZF9idWZmZXIxICovCj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmpl Y3QyWzBdLCBzaGFyZWRfYnVmX2hhbmRsZTEsIEVYRUNfT0JKRUNUX1BJTk5FRCwgcGlubmluZ19v ZmZzZXQpOwo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlsxXSwgYmF0Y2hfYnVmX2hh bmRsZSwgMCwgMCk7Cj4gKwo+ICsJcmluZyA9IDA7Cj4gKwlpZiAoSEFTX0JMVF9SSU5HKGludGVs X2dldF9kcm1fZGV2aWQoZmQpKSkKPiArCQlyaW5nID0gSTkxNV9FWEVDX0JMVDsKPiArCj4gKwlz ZXR1cF9leGVjYnVmZmVyKCZleGVjYnVmLCBleGVjX29iamVjdDIsIHJpbmcsIE5VTV9FWEVDX09C SkVDVFMsIGxlbik7Cj4gKwlzdWJtaXRfYW5kX3N5bmMoZmQsICZleGVjYnVmLCBiYXRjaF9idWZf aGFuZGxlKTsKPiArCj4gKwlpZ3RfYXNzZXJ0KCpzaGFyZWRfYnVmZmVyMSA9PSBkYXRhKTsKPiAr Cj4gKwlnZW1fY2xvc2UoZmQsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJY2xvc2UoZmQpOwo+ICsK PiArCWZyZWUoc2hhcmVkX2J1ZmZlcik7Cj4gKwlmcmVlKHNoYXJlZF9idWZmZXIxKTsKPiArfQo+ ICsKPiArCj4gKy8qKiBnZW1fcmVwaW5fb3ZlcmxhcF90ZXN0Cj4gKyAqICBUaGlzIHRlc3Qgd2ls bCBhdHRlbXB0IHRvIHBpbiB0d28gYnVmZmVycyBhdCB0aGUgc2FtZSBWTUEgYXMgcGFydCBvZiB0 aGUgc2FtZQo+ICsgICAgZXhlY2J1ZmZlciBvYmplY3QKPiArCj4gK0Bjb2RlCj4gKyAgIE1hbGxv YyBhIDRLIGJ1ZmZlcgo+ICsgICBTaGFyZSBidWZmZXIgd2l0aCB3aXRoIEdQVSBieSB1c2luZyB1 c2VycHRyIGlvY3RsCj4gKyAgIENyZWF0ZSBzZWNvbmQgc2hhcmVkIGJ1ZmZlcgo+ICsgICBDcmVh dGUgYmF0Y2ggYnVmZmVyIHRvIHdyaXRlIERBVEEgdG8gZmlyc3QgZHdvcmQgb2YgZWFjaCBidWZm ZXIKPiArICAgVXNlIHNhbWUgdmlydHVhbCBhZGRyZXNzIGFzIGRlc3RpbmF0aW9uIGFkZHJlc3Nl cyBpbiBiYXRjaCBidWZmZXIKPiArICAgU2V0IEVYRUNfT0JKRUNUX1BJTk5FRCBmbGFnIGluIGJv dGggZXhlYyBvYmplY3RzCj4gKyAgIFNldCAnb2Zmc2V0JyBpbiBib3RoIGV4ZWMgb2JqZWN0cyB0 byBzYW1lIFZNQQo+ICsgICBTdWJtaXQgZXhlY2J1ZmZlcgo+ICsgICBDb21tYW5kIHNob3VsZCBy ZXR1cm4gRUlOVkFMLCBzaW5jZSB3ZSBhcmUgdHJ5aW5nIHRvIHBpbiB0byBzYW1lIFZNQQo+ICtA ZW5kY29kZQo+ICsqKi8KPiArc3RhdGljIHZvaWQgZ2VtX3Bpbl9vdmVybGFwX3Rlc3Qodm9pZCkK PiArewo+ICsJaTkxNV9nZW1fdXNlcnB0ciB1c2VycHRyOwo+ICsJaTkxNV9nZW1fdXNlcnB0ciB1 c2VycHRyMTsKPiArCWludCBmZCwgcmV0Owo+ICsJdWludDMyX3QqIHNoYXJlZF9idWZmZXIgPSBO VUxMOwo+ICsJdWludDMyX3QqIHNoYXJlZF9idWZmZXIxID0gTlVMTDsKPiArCXN0cnVjdCBkcm1f aTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhl Y19vYmplY3QyIGV4ZWNfb2JqZWN0MltOVU1fRVhFQ19PQkpFQ1RTICsgMV07Cj4gKwl1aW50MzJf dCBiYXRjaF9idWZmZXJbQk9fU0laRV07Cj4gKwl1aW50MzJfdCBiYXRjaF9idWZfaGFuZGxlLCBz aGFyZWRfYnVmX2hhbmRsZSwgc2hhcmVkX2J1Zl9oYW5kbGUxOwo+ICsJaW50IHJpbmcsIGxlbjsK PiArCWNvbnN0IHVpbnQzMl90IGRhdGEgPSAweDEyMzQ1Njc4Owo+ICsJdWludDY0X3QgcGlubmlu Z19vZmZzZXQgPSAweDEwMDA7Cj4gKwo+ICsJZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lO VEVMKTsKPiArCWJhdGNoX2J1Zl9oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCBCT19TSVpFKTsKPiAr Cj4gKwlzaGFyZWRfYnVmZmVyID0gY3JlYXRlX21lbV9idWZmZXIoQk9fU0laRSk7Cj4gKwlzaGFy ZWRfYnVmZmVyMSA9IGNyZWF0ZV9tZW1fYnVmZmVyKEJPX1NJWkUgKiAyKTsKPiArCj4gKwkvKiBz aGFyZSB3aXRoIEdQVSAqLwo+ICsJZ2VtX2NyZWF0ZV91c2VycHRyX3N0cnVjdCgmdXNlcnB0ciwg c2hhcmVkX2J1ZmZlciwgQk9fU0laRSwgZmFsc2UpOwo+ICsJcmV0ID0gZ2VtX2NhbGxfdXNlcnB0 cl9pb2N0bChmZCwgJnVzZXJwdHIpOwo+ICsJaWd0X2Fzc2VydF9lcShyZXQsIDApOwo+ICsKPiAr CWdlbV9jcmVhdGVfdXNlcnB0cl9zdHJ1Y3QoJnVzZXJwdHIxLCBzaGFyZWRfYnVmZmVyMSwgQk9f U0laRSAqIDIsIGZhbHNlKTsKPiArCXJldCA9IGdlbV9jYWxsX3VzZXJwdHJfaW9jdGwoZmQsICZ1 c2VycHRyMSk7Cj4gKwlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7Cj4gKwo+ICsJc2hhcmVkX2J1Zl9o YW5kbGUgPSB1c2VycHRyLmhhbmRsZTsKPiArCXNoYXJlZF9idWZfaGFuZGxlMSA9IHVzZXJwdHIx LmhhbmRsZTsKPiArCj4gKwlsZW4gPSBnZW1fc3RvcmVfZGF0YV9zdm0oZmQsIGJhdGNoX2J1ZmZl ciwgcGlubmluZ19vZmZzZXQsIGRhdGEsIGZhbHNlKTsKPiArCWxlbiArPSBnZW1fc3RvcmVfZGF0 YV9zdm0oZmQsIChiYXRjaF9idWZmZXIgKyBsZW4vNCksIHBpbm5pbmdfb2Zmc2V0LCBkYXRhLCB0 cnVlKTsKPiArCWdlbV93cml0ZShmZCwgYmF0Y2hfYnVmX2hhbmRsZSwgMCwgYmF0Y2hfYnVmZmVy LCBsZW4pOwo+ICsKPiArCS8qIHN1Ym1pdCBjb21tYW5kIGJ1ZmZlciAqLwo+ICsJc2V0dXBfZXhl Y19vYmooJmV4ZWNfb2JqZWN0MlswXSwgc2hhcmVkX2J1Zl9oYW5kbGUsIEVYRUNfT0JKRUNUX1BJ Tk5FRCwgcGlubmluZ19vZmZzZXQpOwo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0Mlsx XSwgc2hhcmVkX2J1Zl9oYW5kbGUxLCBFWEVDX09CSkVDVF9QSU5ORUQsIHBpbm5pbmdfb2Zmc2V0 KTsKPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMl0sIGJhdGNoX2J1Zl9oYW5kbGUs IDAsIDApOwo+ICsKPiArCXJpbmcgPSAwOwo+ICsJaWYgKEhBU19CTFRfUklORyhpbnRlbF9nZXRf ZHJtX2RldmlkKGZkKSkpCj4gKwkJcmluZyA9IEk5MTVfRVhFQ19CTFQ7Cj4gKwo+ICsJc2V0dXBf ZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmplY3QyLCByaW5nLCBOVU1fRVhFQ19PQkpFQ1RT KzEsIGxlbik7Cj4gKwo+ICsJcmV0ID0gZHJtSW9jdGwoZmQsCj4gKwkgICAgICBEUk1fSU9DVExf STkxNV9HRU1fRVhFQ0JVRkZFUjIsCj4gKwkgICAgICAmZXhlY2J1Zik7Cj4gKwo+ICsJLyogZXhw ZWN0IHRvIGZhaWwgKi8KPiArCWlndF9hc3NlcnRfbmVxKHJldCwgMCk7Cj4gKwlpZ3RfYXNzZXJ0 KGVycm5vID09IDIyKTsKPiArCj4gKwlnZW1fY2xvc2UoZmQsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ ICsJY2xvc2UoZmQpOwo+ICsKPiArCWZyZWUoc2hhcmVkX2J1ZmZlcik7Cj4gKwlmcmVlKHNoYXJl ZF9idWZmZXIxKTsKPiArfQo+ICsKPiArCj4gKy8qICBnZW1fZXZpY3RfdGVzdAo+ICsgKiAgY3Jl YXRlIHNoYXJlZCBidWZmZXIsIHBpbiBpdAo+ICsgKiAgY3JlYXRlIG5vcm1hbCBidWZmZXIKPiAr ICogIHRyeSBhbmQgcmVsb2NhdGUgdG8gc2hhcmVkIGxvY2F0aW9uCj4gKyAqICBPcGVuczogSG93 IHRvIGRldGVjdCBldmljdGlvbiBvY2N1cmVkPwo+ICsgKiAgaTkxNV9nZW1fZ3R0IC0gZGVidWdm cyBhcGkgLSBncmVwIGl0IGZvciB0aGUgcGFnZT8KPiArCj4gKyAgICBDcmVhdGUgYSBnZW0gYnVm ZmVyIG9mIDRLCj4gKyAgICBNYWxsb2MgYSA0SyBidWZmZXIKPiArICAgIFNoYXJlIGJ1ZmZlciB3 aXRoIEdQVSB1c2luZyB1c2VycHRyIGlvY3RsCj4gKyAgICBDcmVhdGUgYSBiYXRjaCBidWZmZXIg dG8gd3JpdGUgMHgxMTExMTExMSBhbmQgMHgyMjIyMjIyMiBpbiBhYm92ZSAyIGJ1ZmZlcnMKPiAr ICAgIFBpbiBTaGFyZWQgYnVmZmVyIHRvIG9mZnNldCAnMCcgaW4gR1RUCgpXaHkgYXQgemVybz8K Cj4gKyAgICBDcmVhdGUgcmVsb2MgYnVmZmVyIHRvIGVuc3VyZSBnZW0gYnVmZmVyIGlzIHJlbG9j YXRlZCB0byBHVFQKPiArICAgIFN1Ym1pdCBleGVjYnVmZmVyCj4gKyAgICBWZXJpZnkgc2hhcmVk IGJ1ZmZlciBoYXMgMHgyMjIyMjIyMiBhcyBleHBlY3RlZAo+ICsgICAgT2J0YWluIG9mZnNldCBv ZiB3aGVyZSBnZW0gb2JqZWN0IGhhcyBiZWVuIHBsYWNlZCBmcm9tIGV4ZWMgb2JqZWN0IGZpZWxk Cj4gKyAgICBUcnkgdG8gcGluIHNoYXJlZCBidWZmZXIgYXQgdGhhdCBhZGRyZXNzIHVzaW5nICdv ZmZzZXQnIGZpZWxkIGluIGV4ZWMgb2JqZWN0Cj4gKyAgICBQcmV2ZW50IHJlbG9jYXRpb24gYnkg c2V0dGluZyByZWxvY2F0aW9uX2NvdW50ID0gMAo+ICsgICAgU3VibWl0IGV4ZWNidWZmZXIKPiAr ICAgIFNoYXJlZCBidWZmZXIgd2lsbCBiZSBwaW5uZWQgdG8gcHJldmlvdXMgYWRkcmVzcyBvZiBn ZW0gb2JqZWN0Cj4gKyAgICBVbnNoYXJlZCBidWZmZXIgd2lsbCBiZSBldmljdGVkLCBzaW5jZSBy ZWxvY2F0aW9uIGlzIG5vdCBhbGxvd2VkCj4gKyAgICBTZWNvbmQgYmF0Y2ggYnVmZmVyIHdpbGwg d3JpdGUgMHgxMTExMTExMSB0byBzaGFyZWQgYnVmZmVyIGluc3RlYWQgb2YgdW5zaGFyZWQKPiAr ICAgIFZlcmlmeSBzaGFyZWQgYnVmZmVyIGNvbnRhaW5zIDB4MTExMTExMTEKPiArICAgIFJldmVy c2Ugb3JkZXIgb2YgaW5zdHJ1Y3Rpb25zIGluIGJhdGNoIGJ1ZmZlciB0byB3cml0ZSB0byB1bnNo YXJlZCBmaXJzdAo+ICsqLwo+ICsKPiArc3RhdGljIHZvaWQgZ2VtX2V2aWN0X3Rlc3Qodm9pZCkK PiArewo+ICsJaTkxNV9nZW1fdXNlcnB0ciB1c2VycHRyOwo+ICsJaW50IGZkLCByZXQ7Cj4gKwl1 aW50MzJfdCogc2hhcmVkX2J1ZmZlciA9IE5VTEw7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3Jl bG9jYXRpb25fZW50cnkgcmVsb2NbNF07Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZm ZXIyIGV4ZWNidWY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBleGVjX29i amVjdDJbTlVNX0VYRUNfT0JKRUNUUyArIDFdOwo+ICsJdWludDMyX3QgYmF0Y2hfYnVmZmVyW1NU T1JFX0JBVENIX0JVRkZFUl9TSVpFICogMl07Cj4gKwl1aW50MzJfdCBiYXRjaF9idWZfaGFuZGxl LCBzaGFyZWRfYnVmX2hhbmRsZSwgdW5zaGFyZWRfYnVmX2hhbmRsZTsKPiArCWludCByaW5nLCBs ZW47Cj4gKwl1aW50MzJfdCBkYXRhMSwgZGF0YTI7Cj4gKwl1aW50MzJfdCB2YWx1ZTsKPiArCXVp bnQ2NF90IHBpbm5pbmdfb2Zmc2V0ID0gMDsKPiArCj4gKwlmZCA9IGRybV9vcGVuX2RyaXZlcihE UklWRVJfSU5URUwpOwo+ICsJYmF0Y2hfYnVmX2hhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJ WkUpOwo+ICsJdW5zaGFyZWRfYnVmX2hhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUpOwo+ ICsKPiArCXNoYXJlZF9idWZmZXIgPSBjcmVhdGVfbWVtX2J1ZmZlcihCT19TSVpFKTsKPiArCSpz aGFyZWRfYnVmZmVyID0gMHhGRkZGRkZGRjsKCkhlcmUgaXMgc29tZSBzZXR0aW5nIHRvIGZmZmZz ISBCdXQgdGhpcyB0aW1lIG5vIGNvbW1lbnQuIEkgYW0gbm90IHNheWluZyAKaXQgbmVlZHMgYSBj b21tZW50IGp1c3QgdGhhdCBpdCBpcyBmdW5ueS4gOikKCj4gKwo+ICsJLyogc2hhcmUgd2l0aCBH UFUgKi8KPiArCWdlbV9jcmVhdGVfdXNlcnB0cl9zdHJ1Y3QoJnVzZXJwdHIsIHNoYXJlZF9idWZm ZXIsIEJPX1NJWkUsIGZhbHNlKTsKPiArCXJldCA9IGdlbV9jYWxsX3VzZXJwdHJfaW9jdGwoZmQs ICZ1c2VycHRyKTsKPiArCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKPiArCj4gKwkvKiBHZXQgaGFu ZGxlIGZvciBzaGFyZWQgYnVmZmVyICovCj4gKwlzaGFyZWRfYnVmX2hhbmRsZSA9IHVzZXJwdHIu aGFuZGxlOwo+ICsKPiArCS8qIGNyZWF0ZSBjb21tYW5kIGJ1ZmZlciB3aXRoIHdyaXRlIGNvbW1h bmRzICovCj4gKwlkYXRhMSA9IDB4MTExMTExMTE7Cj4gKwlkYXRhMiA9IDB4MjIyMjIyMjI7Cj4g KwlsZW4gPSBnZW1fc3RvcmVfZGF0YShmZCwgYmF0Y2hfYnVmZmVyLCB1bnNoYXJlZF9idWZfaGFu ZGxlLCBkYXRhMSwgcmVsb2MsIGZhbHNlKTsKPiArCWxlbiArPSBnZW1fc3RvcmVfZGF0YV9zdm0o ZmQsIGJhdGNoX2J1ZmZlciArIChsZW4vNCksIHBpbm5pbmdfb2Zmc2V0LCBkYXRhMiwgdHJ1ZSk7 Cj4gKwlpZ3RfYXNzZXJ0X2x0ZShsZW4sIFNUT1JFX0JBVENIX0JVRkZFUl9TSVpFICogMiAqIDQp Owo+ICsJZ2VtX3dyaXRlKGZkLCBiYXRjaF9idWZfaGFuZGxlLCAwLCBiYXRjaF9idWZmZXIsIGxl bik7Cj4gKwo+ICsJLyogc3VibWl0IGNvbW1hbmQgYnVmZmVyICovCj4gKwlzZXR1cF9leGVjX29i aigmZXhlY19vYmplY3QyWzBdLCBzaGFyZWRfYnVmX2hhbmRsZSwgRVhFQ19PQkpFQ1RfUElOTkVE LCBwaW5uaW5nX29mZnNldCk7Cj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzFdLCB1 bnNoYXJlZF9idWZfaGFuZGxlLCAwLCAwKTsKPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVj dDJbMl0sIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIDApOwo+ICsKPiArCWV4ZWNfb2JqZWN0MlsyXS5y ZWxvY2F0aW9uX2NvdW50ID0gMTsKPiArCWV4ZWNfb2JqZWN0MlsyXS5yZWxvY3NfcHRyID0gKHVp bnRwdHJfdClyZWxvYzsKPiArCXJpbmcgPSAwOwo+ICsJaWYgKEhBU19CTFRfUklORyhpbnRlbF9n ZXRfZHJtX2RldmlkKGZkKSkpCj4gKwkJcmluZyA9IEk5MTVfRVhFQ19CTFQ7Cj4gKwo+ICsJc2V0 dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmplY3QyLCByaW5nLCBOVU1fRVhFQ19PQkpF Q1RTKzEsIGxlbik7Cj4gKwlzdWJtaXRfYW5kX3N5bmMoZmQsICZleGVjYnVmLCBiYXRjaF9idWZf aGFuZGxlKTsKPiArCj4gKwlpZ3RfYXNzZXJ0KCpzaGFyZWRfYnVmZmVyID09IGRhdGEyKTsKPiAr CWdlbV9yZWFkKGZkLCB1bnNoYXJlZF9idWZfaGFuZGxlLCAwLCAodm9pZCopJnZhbHVlLCA0KTsK PiArCWlndF9hc3NlcnQodmFsdWUgPT0gZGF0YTEpOwo+ICsKPiArCj4gKwkqc2hhcmVkX2J1ZmZl ciA9IDB4ZmZmZmZmZmY7Cj4gKwkvKiBOb3cgY2F1c2UgZXZpY3Rpb24gb2YgdW5zaGFyZWQgYnVm ZmVyIGJ5IHBpbm5pbmcgc2hhcmVkIGJ1ZmZlciB0aGVyZSAqLwo+ICsJZXhlY19vYmplY3QyWzBd Lm9mZnNldCA9IGV4ZWNfb2JqZWN0MlsxXS5vZmZzZXQ7Cj4gKwkvKiBQcmV2ZW50IHJlbG9jYXRp b24gKi8KPiArCWV4ZWNfb2JqZWN0MlsyXS5yZWxvY2F0aW9uX2NvdW50ID0gMDsKPiArCXN1Ym1p dF9hbmRfc3luYyhmZCwgJmV4ZWNidWYsIGJhdGNoX2J1Zl9oYW5kbGUpOwoKRmlyc3QgTUlfU1RP UkVfREFUQV9JTU0gbm93IHdyaXRlcyB0byB3aGVyZT8gVG8gdGhlIHByZXZpb3VzbHkgcmVzb2x2 ZWQgCmFkZHJlc3MsIHdoZXJlIHVuc2hhcmVkIGJ1ZmZlciB3YXM/IFRoaXMgaXMgbm93IHNoYXJl ZCBzbyBpdCB3cml0ZXMgCmRhdGExIHRoZXJlLgoKU2Vjb25kIE1JX1NUT1JFX0RBVEFfSU1NIHdy aXRlcyBkYXRhMiB0byB0aGUgcGlubmluZ19vZmZzZXQuIEFuZCB3aGF0IGlzIAphdCB0aGF0IGFk ZHJlc3Mgbm93PyBTaGFyZWQgaXMgbm90IGFueSBtb3JlIHNpbmNlIGl0IGhhcyBiZWVuIG1vdmVk LiBJIApkb24ndCBnZXQgaXQuCgpJJ3ZlIGFza2VkIHRoaXMgaW4gdGhlIGxhc3Qgcm91bmQuLi4K Cj4gKwlpZ3RfYXNzZXJ0KCpzaGFyZWRfYnVmZmVyID09IGRhdGExKTsKID4KPiArCWlndF9hc3Nl cnQoZXhlY19vYmplY3QyWzBdLm9mZnNldCAhPSBleGVjX29iamVjdDJbMV0ub2Zmc2V0KTsKPiAr CS8qIFVuc2hhcmVkIGJ1ZmZlciBnZXRzIGV2aWN0ZWQsIGFuZCByZXRhaW5zIGl0cyB2YWx1ZSwg c2luY2Ugbm8gYmF0Y2ggYnVmZmVyIHdyaXRlcyB0byBpdCAqLwo+ICsJZ2VtX3JlYWQoZmQsIHVu c2hhcmVkX2J1Zl9oYW5kbGUsIDAsICh2b2lkKikmdmFsdWUsIDQpOwo+ICsJaWd0X2Fzc2VydCh2 YWx1ZSA9PSBkYXRhMSk7Cj4gKwo+ICsJLyogTm93IGxldHMgZG8gaXQgYWdhaW4gd2l0aCB0aGUg b2JqZWN0cyBsaXN0ZWQgaW4gcmV2ZXJzZSBvcmRlci4uLiAqLwo+ICsJKnNoYXJlZF9idWZmZXIg PSAweGZmZmZmZmZmOwo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlswXSwgdW5zaGFy ZWRfYnVmX2hhbmRsZSwgMCwgMCk7Cj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzFd LCBzaGFyZWRfYnVmX2hhbmRsZSwgRVhFQ19PQkpFQ1RfUElOTkVELCAwKTsKPiArCj4gKwlleGVj X29iamVjdDJbMl0ucmVsb2NhdGlvbl9jb3VudCA9IDE7Cj4gKwlzdWJtaXRfYW5kX3N5bmMoZmQs ICZleGVjYnVmLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCj4gKwlpZ3RfYXNzZXJ0KCpzaGFyZWRf YnVmZmVyID09IGRhdGEyKTsKPiArCSpzaGFyZWRfYnVmZmVyID0gMHhmZmZmZmZmZjsKPiArCS8q IE5vdyBjYXVzZSBldmljdGlvbiBvZiB1bnNoYXJlZCBidWZmZXIgYnkgcGlubmluZyBzaGFyZWQg YnVmZmVyIHRoZXJlICovCj4gKwlleGVjX29iamVjdDJbMV0ub2Zmc2V0ID0gZXhlY19vYmplY3Qy WzBdLm9mZnNldDsKPiArCS8qIFByZXZlbnQgcmVsb2NhdGlvbiAqLwo+ICsJZXhlY19vYmplY3Qy WzJdLnJlbG9jYXRpb25fY291bnQgPSAwOwo+ICsJc3VibWl0X2FuZF9zeW5jKGZkLCAmZXhlY2J1 ZiwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwo+ICsJaWd0X2Fzc2VydCgqc2hhcmVkX2J1ZmZlciA9 PSBkYXRhMSk7Cj4gKwlpZ3RfYXNzZXJ0KGV4ZWNfb2JqZWN0MlswXS5vZmZzZXQgIT0gZXhlY19v YmplY3QyWzFdLm9mZnNldCk7Cj4gKwlnZW1fcmVhZChmZCwgdW5zaGFyZWRfYnVmX2hhbmRsZSwg MCwgKHZvaWQqKSZ2YWx1ZSwgNCk7Cj4gKwlpZ3RfYXNzZXJ0KHZhbHVlID09IGRhdGExKTsKPiAr Cj4gKwlnZW1fY2xvc2UoZmQsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJY2xvc2UoZmQpOwo+ICsK PiArCWZyZWUoc2hhcmVkX2J1ZmZlcik7Cj4gK30KPiArCj4gKy8qKiBnZW1fc29mdHBpbl9zdHJl c3NfdGVzdCAtIFN0cmVzcyB0ZXN0IHdoaWNoIGNyZWF0ZXMgMTBLIGJ1ZmZlcnMgYW5kIHNoYXJl cyB3aXRoIEdQVQo+ICsgICBDcmVhdGUgMTAwSyB1aW50MzIgYnVmZmVycyBvZiBzaXplIDRLIGVh Y2gKPiArICAgU2hhcmUgd2l0aCBHUFUgdXNpbmcgdXNlcnB0ciBpb2N0bAo+ICsgICBDcmVhdGUg YmF0Y2ggYnVmZmVyIHRvIHdyaXRlIERBVEEgaW4gZmlyc3QgZWxlbWVudCBvZiBlYWNoIGJ1ZmZl cgo+ICsgICBQaW4gZWFjaCBidWZmZXIgdG8gdmFyeWluZyBhZGRyZXNzZXMgc3RhcnRpbmcgZnJv bSAweDgwMDAwMDAwMDAwMCBnb2luZyBiZWxvdwo+ICsgICBFeGVjdXRlIEJhdGNoIEJ1ZmZlciBv biBCbGl0IHJpbmcgU1RSRVNTX05VTV9MT09QUyB0aW1lcwo+ICsgICBWYWxpZGF0ZSBldmVyeSBi dWZmZXIgaGFzIERBVEEgaW4gZmlyc3QgZWxlbWVudAo+ICsgICBSaW5zZSBhbmQgUmVwZWF0IG9u IFJlbmRlciByaW5nCj4gKyoqLwo+ICsjZGVmaW5lIFNUUkVTU19OVU1fQlVGRkVSUyAxMDAyNDAK PiArI2RlZmluZSBTVFJFU1NfTlVNX0xPT1BTIDEKPiArI2RlZmluZSBTVE9SRV9DT01NQU5EUyA0 ICogU1RSRVNTX05VTV9CVUZGRVJTCj4gKwo+ICtzdGF0aWMgdm9pZCBnZW1fc29mdHBpbl9zdHJl c3NfdGVzdCh2b2lkKQo+ICt7Cj4gKwlpOTE1X2dlbV91c2VycHRyIHVzZXJwdHI7Cj4gKwlpbnQg ZmQsIHJldDsKPiArCXVpbnQzMl90KiBzaGFyZWRfYnVmZmVyW1NUUkVTU19OVU1fQlVGRkVSU107 Cj4gKwl1aW50MzJfdCBzaGFyZWRfaGFuZGxlW1NUUkVTU19OVU1fQlVGRkVSU107Cj4gKwlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2V4ZWNfb2JqZWN0MiBleGVjX29iamVjdDJbU1RSRVNTX05VTV9CVUZGRVJTICsgMV07Cj4g Kwl1aW50MzJfdCBiYXRjaF9idWZmZXJbU1RPUkVfQ09NTUFORFMgKyAyXTsgLyogNCBkd29yZHMg cGVyIGJ1ZmZlciArIDIgZm9yIHRoZSBlbmQgb2YgYmF0Y2hidWZmZXIgKi8KClRoaXMgdGVzdCB3 aWxsIGFsbG9jYXRlIDEuNUdpQiBvZiBidWZmZXJzIHdoaWNoIHdpbGwgZml0IGluIEdUVCBvbiBh bGwgCkdFTnMgYW5kIGFsbCBtZW0gY29uZmlnPyBMaWtlIHNvbWUgQW5kcm9pZCB0YWJsZXQgcmVm ZXJlbmNlIGRlc2lnbj8KCk1heWJlIHlvdSBuZWVkIHRvIGF1dG8tdHVuZSB0aGUgbnVtYmVycz8K CkFuZCBpdCB3aWxsIHVzZSBxdWl0ZSBhIGxvdCBvZiBzdGFjayAtIHNvbWUgcGVvcGxlIGNvbXBs YWluZWQgd2hlbiBJIAphbGxvY2F0ZWQgNDhrIG9mIGl0LiA6KQoKTGV0cyBzZWUuLiB5b3UnbGwg bmVlZCA0MDBrICsgNDAwayArIDEuNk1pQiArIDUuM01pYiA9IDcuM01pQiBvZiBzdGFjaywgCmRp ZCBJIGdldCB0aGF0IHJpZ2h0PwoKRWFzeSBmaXggaXMgdG8gYWxsb2NhdGUgYmxvYnMgZm9yIGVh Y2guIEZvciBleGFtcGxlOgoKCnN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICpleGVj X29iamVjdDIgPSBjYWxsb2MoIApTVFJFU1NfTlVNX0JVRkZFUlMgKyAxLCBzaXplb2Yoc3RydWN0 IC4uLmV4ZWNfb2JqZWN0MikpOwoKRXRjIGZvciB0aGUgcmVzdC4KCkV2ZW4gZm9yIHNoYXJlX2J1 ZmZlciwgeW91IGRvbid0IG5lZWQgc2VwYXJhdGUgcG9pbnRlcnMgYnV0IGNvdWxkIGFsc28gCmFs bG9jYXRlIHRoZSBodWdlIGJsb2IuCgo+ICsJdWludDMyX3QgYmF0Y2hfYnVmX2hhbmRsZTsKPiAr CWludCByaW5nLCBsZW4sIGksIGo7Cj4gKwl1aW50NjRfdCBwaW5uaW5nX29mZnNldCA9IDB4ODAw MDAwMDAwMDAwOwo+ICsKPiArCWZkID0gZHJtX29wZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7Cj4g KwliYXRjaF9idWZfaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgc2l6ZW9mKGJhdGNoX2J1ZmZlcikp Owo+ICsKPiArCS8qIGNyZWF0ZSBjb21tYW5kIGJ1ZmZlciB3aXRoIHdyaXRlIGNvbW1hbmRzICov Cj4gKwlsZW4gPSAwOwo+ICsJZm9yKGkgPSAwOyBpIDwgU1RSRVNTX05VTV9CVUZGRVJTOyBpKysp Cj4gKwl7Cj4gKwkJc2hhcmVkX2J1ZmZlcltpXSA9IGNyZWF0ZV9tZW1fYnVmZmVyKEJPX1NJWkUp Owo+ICsJCSpzaGFyZWRfYnVmZmVyW2ldID0gMHhGRkZGRkZGRjsKPiArCj4gKwkJLyogc2hhcmUg d2l0aCBHUFUgKi8KPiArCQlnZW1fY3JlYXRlX3VzZXJwdHJfc3RydWN0KCZ1c2VycHRyLCBzaGFy ZWRfYnVmZmVyW2ldLCBCT19TSVpFLCBmYWxzZSk7Cj4gKwkJcmV0ID0gZ2VtX2NhbGxfdXNlcnB0 cl9pb2N0bChmZCwgJnVzZXJwdHIpOwo+ICsJCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKPiArCj4g KwkJLyogR2V0IGhhbmRsZSBmb3Igc2hhcmVkIGJ1ZmZlciAqLwo+ICsJCXNoYXJlZF9oYW5kbGVb aV0gPSB1c2VycHRyLmhhbmRsZTsKPiArCj4gKwkJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0 MltpXSwgc2hhcmVkX2hhbmRsZVtpXSwgRVhFQ19PQkpFQ1RfUElOTkVELCBwaW5uaW5nX29mZnNl dCk7Cj4gKwkJbGVuICs9IGdlbV9zdG9yZV9kYXRhX3N2bShmZCwgYmF0Y2hfYnVmZmVyICsgKGxl bi80KSwgcGlubmluZ19vZmZzZXQsIGkgLCAoaSA9PSBTVFJFU1NfTlVNX0JVRkZFUlMtMSkgPyB0 cnVlOmZhbHNlKTsKPiArCQkKPiArCQlwaW5uaW5nX29mZnNldCAtPSAweDIwMDAwMDsgLyogaW5j cmVtZW50YWwgNEsgYWxpZ25lZCBhZGRyZXNzICovCgpBTElHTihCT19TSVpFLCA0MDk2KSBpbnN0 ZWFkIG9mIGhhcmRjb2RlZCBudW1iZXI/Cgo+ICsJfQo+ICsJZ2VtX3dyaXRlKGZkLCBiYXRjaF9i dWZfaGFuZGxlLCAwLCBiYXRjaF9idWZmZXIsIGxlbik7Cj4gKwo+ICsJLyogc3VibWl0IGNvbW1h bmQgYnVmZmVyICovCj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyW1NUUkVTU19OVU1f QlVGRkVSU10sIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIDApOwo+ICsKPiArCXJpbmcgPSAwOwo+ICsJ aWYgKEhBU19CTFRfUklORyhpbnRlbF9nZXRfZHJtX2RldmlkKGZkKSkpCj4gKwkJcmluZyA9IEk5 MTVfRVhFQ19CTFQ7Cj4gKwo+ICsJc2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmpl Y3QyLCByaW5nLCBTVFJFU1NfTlVNX0JVRkZFUlMgKyAxLCBsZW4pOwo+ICsKPiArCWZvciAoaSA9 IDA7IGkgPCBTVFJFU1NfTlVNX0xPT1BTOyBpKyspewo+ICsJCXN1Ym1pdF9hbmRfc3luYyhmZCwg JmV4ZWNidWYsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJCWZvcihqID0gMDsgaiA8IFNUUkVTU19O VU1fQlVGRkVSUzsgaisrKXsKPiArCQkJaWd0X2ZhaWxfb25fZigqc2hhcmVkX2J1ZmZlcltqXSAh PSBqLAo+ICsJCQkJICAgICAgIk1pc21hdGNoIGluIGJ1ZmZlciAlZCwgaXRlcmF0aW9uICVkOiAw eCUwOFhcbiIsIGosIGksICpzaGFyZWRfYnVmZmVyW2pdKTsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJ Ly8gTm93IFJlbmRlciBSaW5nCj4gKwlyaW5nID0gSTkxNV9FWEVDX1JFTkRFUjsKPiArCWV4ZWNi dWYuZmxhZ3MgPSByaW5nOwo+ICsJZm9yIChpID0gMDsgaSA8IFNUUkVTU19OVU1fTE9PUFM7IGkr Kyl7Cj4gKwkJc3VibWl0X2FuZF9zeW5jKGZkLCAmZXhlY2J1ZiwgYmF0Y2hfYnVmX2hhbmRsZSk7 Cj4gKwkJZm9yKGogPSAwOyBqIDwgU1RSRVNTX05VTV9CVUZGRVJTOyBqKyspewo+ICsJCQlpZ3Rf ZmFpbF9vbl9mKCpzaGFyZWRfYnVmZmVyW2pdICE9IGosCj4gKwkJCQkgICAgICAiTWlzbWF0Y2gg aW4gYnVmZmVyICVkLCBpdGVyYXRpb24gJWQ6IDB4JTA4WFxuIiwgaiwgaSwgKnNoYXJlZF9idWZm ZXJbal0pOwo+ICsJCX0KPiArCX0KPiArCj4gKwlnZW1fY2xvc2UoZmQsIGJhdGNoX2J1Zl9oYW5k bGUpOwo+ICsJY2xvc2UoZmQpOwo+ICsKPiArCWZvcihpID0gMDsgaSA8IFNUUkVTU19OVU1fQlVG RkVSUzsgaSsrKQo+ICsJewo+ICsJCWZyZWUoc2hhcmVkX2J1ZmZlcltpXSk7Cj4gKwl9CgpDb2Rp bmcgc3R5bGUuLiBvciB5b3UgY2FuIGp1c3QgcmVtb3ZlIHRoZSBicmFjZXMuCgo+ICt9Cj4gKwo+ ICsvKiAgZ2VtX3dyaXRlX211bHRpcGFnZV9idWZmZXIgLSBDcmVhdGUgYSBidWZmZXIgc3Bhbm5p bmcgbXVsdGlwbGUKPiArICAgIHBhZ2VzLCBhbmQgc2hhcmUgd2l0aCBHUFUuIFdyaXRlIHRvIGV2 ZXJ5IGVsZW1lbnQgb2YgdGhlIGJ1ZmZlcgo+ICsgICAgYW5kIHZlcmlmeSBjb3JyZWN0IGNvbnRl bnRzLgo+ICsKPiArICAgQ3JlYXRlIDE2SyB1aW50MzIgYnVmZmVyCj4gKyAgIFNoYXJlIHdpdGgg R1BVIHVzaW5nIHVzZXJwdHIgaW9jdGwKPiArICAgQ3JlYXRlIGJhdGNoIGJ1ZmZlciB0byB3cml0 ZSBEQVRBIGluIGFsbCBlbGVtZW50cyBvZiBidWZmZXIKPiArICAgRXhlY3V0ZSBCYXRjaCBCdWZm ZXIKPiArICAgVmFsaWRhdGUgZXZlcnkgZWxlbWVudCBoYXMgREFUQQo+ICsgKi8KPiArc3RhdGlj IHZvaWQgZ2VtX3dyaXRlX211bHRpcGFnZV9idWZmZXJfdGVzdCh2b2lkKQo+ICt7Cj4gKwlpOTE1 X2dlbV91c2VycHRyIHVzZXJwdHI7Cj4gKwlpbnQgZmQsIHJldDsKPiArCXVpbnQzMl90KiBzaGFy ZWRfYnVmZmVyOwo+ICsJdWludDMyX3Qgc2hhcmVkX2hhbmRsZTsKPiArCXN0cnVjdCBkcm1faTkx NV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19v YmplY3QyIGV4ZWNfb2JqZWN0MltOVU1fRVhFQ19PQkpFQ1RTXTsKPiArCXVpbnQzMl90IGJhdGNo X2J1ZmZlclsoNCAqIEJPX1NJWkUpICsgMl07CgpJdCBpcyBoYXJkIHRvIGZpZ3VyZSBvdXQgd2h5 IHRoYXQgbWFueSBlbGVtZW50cy4gWW91IGhhdmUgYSBzdG9yZSBiYiAKc2l6ZSBkZWZpbmVkIHNv bWV3aGVyZSBhbHJlYWR5IG5vPyBBbmQgdGhlbiB5b3UgbmVlZCBCT19TSVpFIC8gCnNpemVvZih1 aW50MzJfdCkgb2YgdGhvc2UgcGx1cyAyLCByaWdodD8KCj4gKwl1aW50MzJfdCBiYXRjaF9idWZf aGFuZGxlOwo+ICsJaW50IHJpbmcsIGxlbiwgajsKPiArCXVpbnQ2NF90IHBpbm5pbmdfb2Zmc2V0 PTB4MTAwMDsKPiArCj4gKwlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5URUwpOwo+ICsJ YmF0Y2hfYnVmX2hhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIHNpemVvZihiYXRjaF9idWZmZXIpKTsK PiArCj4gKwkvKiBjcmVhdGUgY29tbWFuZCBidWZmZXIgd2l0aCB3cml0ZSBjb21tYW5kcyAqLwo+ ICsJbGVuID0gMDsKPiArCXNoYXJlZF9idWZmZXIgPSBjcmVhdGVfbWVtX2J1ZmZlcihNVUxUSVBB R0VfQk9fU0laRSk7Cj4gKwltZW1zZXQoYmF0Y2hfYnVmZmVyLCAwLCBzaXplb2YoYmF0Y2hfYnVm ZmVyKSk7Cj4gKwo+ICsJbWVtc2V0KHNoYXJlZF9idWZmZXIsIDAsIE1VTFRJUEFHRV9CT19TSVpF KTsKCk1heWJlIGdyb3VwIHRoZSBidWZmZXJzIG9yIGxvZ2ljYWwgb3BlcmF0aW9ucyBtb3JlIGNs ZWFybHkuCgo+ICsKPiArCS8qIHNoYXJlIHdpdGggR1BVICovCj4gKwlnZW1fY3JlYXRlX3VzZXJw dHJfc3RydWN0KCZ1c2VycHRyLCBzaGFyZWRfYnVmZmVyLCBNVUxUSVBBR0VfQk9fU0laRSwgZmFs c2UpOwo+ICsJcmV0ID0gZ2VtX2NhbGxfdXNlcnB0cl9pb2N0bChmZCwgJnVzZXJwdHIpOwo+ICsJ aWd0X2Fzc2VydF9lcShyZXQsIDApOwo+ICsKPiArCS8qIEdldCBoYW5kbGUgZm9yIHNoYXJlZCBi dWZmZXIgKi8KPiArCXNoYXJlZF9oYW5kbGUgPSB1c2VycHRyLmhhbmRsZTsKPiArCj4gKwlzZXR1 cF9leGVjX29iaigmZXhlY19vYmplY3QyWzBdLCBzaGFyZWRfaGFuZGxlLCBFWEVDX09CSkVDVF9Q SU5ORUQsIHBpbm5pbmdfb2Zmc2V0KTsKPiArCj4gKwkvKiBFdmVyeSBlbGVtZW50IG9mIGJ1ZmZl ciAqLwo+ICsJZm9yKGo9MDsgajwgKEJPX1NJWkUpOyBqKyspIC8qIEJPX1NJWkUgYmVjYXVzZSBp dCBpcyAxNksgNCBieXRlIGVudHJpZXMgKi8KCk1VTFRJUEFHRV9CT19TSVpFIC8gc2l6ZW9mKHVp bnQzMl90KSBmb3IgY2xhcml0eSA/Cgo+ICsJewo+ICsJCWxlbiArPSBnZW1fc3RvcmVfZGF0YV9z dm0oZmQsIGJhdGNoX2J1ZmZlciArIChsZW4vNCksIHBpbm5pbmdfb2Zmc2V0LCBqLCAoaiA9PSAo KEJPX1NJWkUpLTEpKSA/IHRydWU6ZmFsc2UpOwoKVGhpcyBpcyBjb25mdXNpbmcgc2luY2UgaXQg ZG9lc24ndCB1c2UgU1ZNLCBJIG1lYW4gZG9lc24ndCBhdHRlbXB0IHRvIApwaW4gdGhlIGJ1ZmZl ciB0byBzaGFyZV9idWZmZXIgYWRkcmVzcy4KCj4gKwkJcGlubmluZ19vZmZzZXQgKz0gc2l6ZW9m KHNoYXJlZF9idWZmZXJbMF0pOyAgLyogNCBieXRlcyAqLwo+ICsJfQo+ICsJCj4gKwlnZW1fd3Jp dGUoZmQsIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIGJhdGNoX2J1ZmZlciwgbGVuKTsKPiArCj4gKwkv LyBzdWJtaXQgY29tbWFuZCBidWZmZXIKCkMrKyBjb21tZW50LgoKPiArCXNldHVwX2V4ZWNfb2Jq KCZleGVjX29iamVjdDJbMV0sIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIDApOwo+ICsKPiArCXJpbmcg PSAwOwo+ICsJaWYgKEhBU19CTFRfUklORyhpbnRlbF9nZXRfZHJtX2RldmlkKGZkKSkpCj4gKwkJ cmluZyA9IEk5MTVfRVhFQ19CTFQ7Cj4gKwo+ICsJc2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1Ziwg ZXhlY19vYmplY3QyLCByaW5nLCBOVU1fRVhFQ19PQkpFQ1RTLCBsZW4pOwo+ICsJc3VibWl0X2Fu ZF9zeW5jKGZkLCAmZXhlY2J1ZiwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwo+ICsJZm9yKGogPSAw OyBqIDwgKEJPX1NJWkUpOyBqKyspCj4gKwl7Cj4gKwkJaWd0X2ZhaWxfb25fZihzaGFyZWRfYnVm ZmVyW2pdICE9IGosCj4gKwkJCSAgICAgICJNaXNtYXRjaCBpbiBpbmRleCAlZDogMHglMDhYXG4i LCBqLCBzaGFyZWRfYnVmZmVyW2pdKTsKPiArCX0KPiArCj4gKwlnZW1fY2xvc2UoZmQsIGJhdGNo X2J1Zl9oYW5kbGUpOwo+ICsJY2xvc2UoZmQpOwo+ICsKPiArCWZyZWUoc2hhcmVkX2J1ZmZlcik7 Cj4gK30KPiArCj4gKy8qKiBUaGlzIHRlc3Qgd2lsbCByZXF1ZXN0IHRvIHBpbiBhIHNoYXJlZCBi dWZmZXIgdG8gYW4gaW52YWxpZAo+ICsgICAgVk1BICA+IDQ4LWJpdCBhZGRyZXNzCj4gKwo+ICsg ICBDcmVhdGUgc2hhcmVkIGJ1ZmZlciBvZiBzaXplIDRLCj4gKyAgIFRyeSBhbmQgUGluIG9iamVj dCB0byBhZGRyZXNzIDB4OTAwMDAwMDAwMDAwMAo+ICsqKi8KPiArc3RhdGljIHZvaWQgZ2VtX3Bp bl9pbnZhbGlkX3ZtYV90ZXN0KHZvaWQpCj4gK3sKPiArCWk5MTVfZ2VtX3VzZXJwdHIgdXNlcnB0 cjsKPiArCWludCBmZCwgcmV0Owo+ICsJdWludDMyX3QqIHNoYXJlZF9idWZmZXIgPSBOVUxMOwo+ ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmOwo+ICsJc3RydWN0IGRy bV9pOTE1X2dlbV9leGVjX29iamVjdDIgZXhlY19vYmplY3QyW05VTV9FWEVDX09CSkVDVFNdOwo+ ICsJdWludDMyX3QgYmF0Y2hfYnVmZmVyW0JPX1NJWkVdOwo+ICsJdWludDMyX3QgYmF0Y2hfYnVm X2hhbmRsZSwgc2hhcmVkX2J1Zl9oYW5kbGU7Cj4gKwlpbnQgcmluZywgbGVuOwo+ICsJY29uc3Qg dWludDMyX3QgZGF0YSA9IDB4MTIzNDU2Nzg7Cj4gKwl1aW50NjRfdCBpbnZhbGlkX2FkZHJlc3Mg PSAweDkwMDAwMDAwMDAwMDA7IC8qIDUyIGJpdCBhZGRyZXNzICovCj4gKwo+ICsJZmQgPSBkcm1f b3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKPiArCWJhdGNoX2J1Zl9oYW5kbGUgPSBnZW1fY3Jl YXRlKGZkLCBCT19TSVpFKTsKPiArCj4gKwlzaGFyZWRfYnVmZmVyID0gY3JlYXRlX21lbV9idWZm ZXIoQk9fU0laRSk7Cj4gKwkqc2hhcmVkX2J1ZmZlciA9IDB4RkZGRkZGRkY7Cj4gKwkKPiArCS8v IHNoYXJlIHdpdGggR1BVCj4gKwlnZW1fY3JlYXRlX3VzZXJwdHJfc3RydWN0KCZ1c2VycHRyLCBz aGFyZWRfYnVmZmVyLCBCT19TSVpFLCBmYWxzZSk7Cj4gKwlyZXQgPSBnZW1fY2FsbF91c2VycHRy X2lvY3RsKGZkLCAmdXNlcnB0cik7Cj4gKwlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7Cj4gKwo+ICsJ c2hhcmVkX2J1Zl9oYW5kbGUgPSB1c2VycHRyLmhhbmRsZTsKPiArCj4gKwlsZW4gPSBnZW1fc3Rv cmVfZGF0YV9zdm0oZmQsIGJhdGNoX2J1ZmZlciwgaW52YWxpZF9hZGRyZXNzLCBkYXRhLCB0cnVl KTsKCllvdSBkb24ndCBldmVuIG5lZWQgYW55dGhpbmcgaW4gdGhlIGJhdGNoIGluIHRoaXMgdGVz dCBzbyBjb3VsZCBmdXJ0aGVyIApzaW1wbGlmeSBpdC4KCj4gKwlnZW1fd3JpdGUoZmQsIGJhdGNo X2J1Zl9oYW5kbGUsIDAsIGJhdGNoX2J1ZmZlciwgbGVuKTsKPiArCj4gKwlzZXR1cF9leGVjX29i aigmZXhlY19vYmplY3QyWzBdLCBzaGFyZWRfYnVmX2hhbmRsZSwgRVhFQ19PQkpFQ1RfUElOTkVE LCBpbnZhbGlkX2FkZHJlc3MpOwo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlsxXSwg YmF0Y2hfYnVmX2hhbmRsZSwgMCwgMCk7Cj4gKwo+ICsJcmluZyA9IDA7Cj4gKwlpZiAoSEFTX0JM VF9SSU5HKGludGVsX2dldF9kcm1fZGV2aWQoZmQpKSkKPiArCQlyaW5nID0gSTkxNV9FWEVDX0JM VDsKPiArCj4gKwlzZXR1cF9leGVjYnVmZmVyKCZleGVjYnVmLCBleGVjX29iamVjdDIsIHJpbmcs IE5VTV9FWEVDX09CSkVDVFMsIGxlbik7Cj4gKwo+ICsJLyogRXhwZWN0IGV4ZWNidWYgdG8gZmFp bCAqLwo+ICsJcmV0ID0gZHJtSW9jdGwoZmQsCj4gKwkgICAgICAgRFJNX0lPQ1RMX0k5MTVfR0VN X0VYRUNCVUZGRVIyLAo+ICsJICAgICAgICZleGVjYnVmKTsKPiArCj4gKwlpZ3RfYXNzZXJ0X25l cShyZXQsIDApOwo+ICsJCj4gKwlnZW1fY2xvc2UoZmQsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJ Y2xvc2UoZmQpOwo+ICsKPiArCWZyZWUoc2hhcmVkX2J1ZmZlcik7Cj4gK30KPiArCj4gKyNkZWZp bmUgU0hNX0tFWSA1Njc4OQo+ICsjZGVmaW5lIFNITUVNX1NJWkUgNDA5Ngo+ICsvKiAgZ2VtX3No bWVtX3N2bV90ZXN0IC0gVGVzdCB1c2VycHRyIGlvY3RsIHdpdGggc2hhcmVkIG1lbW9yeQo+ICsg KiBUaGlzIHRlc3QgY3JlYXRlcyBhIHN5c1YgSVBDIGJ1ZmZlciBhbmQgc2hhcmVzIHdpdGggR1BV Lgo+ICsgKiBJdCB3aWxsIHNlbmQgR1BVIGNvbW1hbmRzIHRvIHdyaXRlIERBVEEgaW4gdGhlIGJ1 ZmZlciBhbmQKPiArICogdmFsaWRhdGUgaXQgb24gdGhlIENQVSBzaWRlIHdoZW4gdGhlIGNvbW1h bmQgY29tcGxldGVzLgo+ICsKPiArICogQ3JlYXRlIGFyYml0cmFyeSBzaG1lbSBpZAo+ICsgKiBV c2Ugc2htYXQgdG8gYXR0YWNoIGEgNEsgdWludDMyIGJ1ZmZlciB0byBhYm92ZSBpZAo+ICsgKiBT aGFyZSBidWZmZXIgd2l0aCBHUFUgdXNpbmcgdXNlcnB0ciBpb2N0bAo+ICsgKiBDcmVhdGUgQmF0 Y2ggYnVmZmVyIHRvIHdyaXRlIERBVEEgaW4gdGhlIGZpcnN0IGVsZW1lbnQKPiArICogc3VibWl0 IGV4ZWNidWZmZXIKPiArICogVmFsaWRhdGUgb24gQ1BVIHNpZGUgdGhhdCBEQVRBIHdhcyBpbmRl ZWQgd3JpdHRlbgo+ICsgKi8KPiArc3RhdGljIHZvaWQgZ2VtX3NobWVtX3Rlc3Qodm9pZCkKCk1v dmUgdG8gZ2VtX3VzZXJwdHJfYmxpdHMsIHdpdGhvdXQgdGhlIHNvZnRwaW4gcGFydC4KCj4gK3sK PiArCWludCBzaG1pZDsKPiArCWk5MTVfZ2VtX3VzZXJwdHIgdXNlcnB0cjsKPiArCWludCBmZCwg cmV0Owo+ICsJdWludDMyX3QqIHNoYXJlZF9idWZmZXIgPSBOVUxMOwo+ICsJc3RydWN0IGRybV9p OTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVj X29iamVjdDIgZXhlY19vYmplY3QyW05VTV9FWEVDX09CSkVDVFNdOwo+ICsJdWludDMyX3QgYmF0 Y2hfYnVmZmVyW0JPX1NJWkVdOwo+ICsJdWludDMyX3QgYmF0Y2hfYnVmX2hhbmRsZSwgc2hhcmVk X2J1Zl9oYW5kbGU7Cj4gKwlpbnQgcmluZywgbGVuOwo+ICsJY29uc3QgdWludDMyX3QgZGF0YSA9 IDB4MTIzNDU2Nzg7Cj4gKwl1aW50NjRfdCBwaW5uaW5nX29mZnNldCA9IDB4MTAwMDsKPiArCj4g KwlzaG1pZCA9IHNobWdldChTSE1fS0VZLCBTSE1FTV9TSVpFLCBJUENfQ1JFQVQpOwo+ICsJaWd0 X2Fzc2VydF9uZXEoc2htaWQsIC0xKTsKPiArCj4gKwlzaGFyZWRfYnVmZmVyID0gc2htYXQoc2ht aWQsIE5VTEwsIDApOwkKPiArCWlndF9hc3NlcnQoc2hhcmVkX2J1ZmZlciAhPSAodm9pZCopLTEp Owo+ICsKPiArCW1lbXNldChzaGFyZWRfYnVmZmVyLCAwLCBTSE1FTV9TSVpFKTsKPiArCXNoYXJl ZF9idWZmZXJbMF0gPSAweEZGRkZGRkZGOwo+ICsKPiArCWZkID0gZHJtX29wZW5fZHJpdmVyKERS SVZFUl9JTlRFTCk7Cj4gKwliYXRjaF9idWZfaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgQk9fU0la RSk7Cj4gKwo+ICsJZ2VtX2NyZWF0ZV91c2VycHRyX3N0cnVjdCgmdXNlcnB0ciwgc2hhcmVkX2J1 ZmZlciwgU0hNRU1fU0laRSwgZmFsc2UpOwo+ICsJcmV0ID0gZ2VtX2NhbGxfdXNlcnB0cl9pb2N0 bChmZCwgJnVzZXJwdHIpOwo+ICsJaWd0X2Fzc2VydF9lcShyZXQsIDApOwo+ICsKPiArCXNoYXJl ZF9idWZfaGFuZGxlID0gdXNlcnB0ci5oYW5kbGU7Cj4gKwkKPiArCS8qIGNyZWF0ZSBjb21tYW5k IGJ1ZmZlciB3aXRoIHdyaXRlIGNvbW1hbmQgKi8KPiArCWxlbiA9IGdlbV9zdG9yZV9kYXRhX3N2 bShmZCwgYmF0Y2hfYnVmZmVyLCBwaW5uaW5nX29mZnNldCwgZGF0YSwgdHJ1ZSk7Cj4gKwlnZW1f d3JpdGUoZmQsIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIGJhdGNoX2J1ZmZlciwgbGVuKTsKPiArCj4g KwkvKiBzdWJtaXQgY29tbWFuZCBidWZmZXIgKi8KPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29i amVjdDJbMF0sIHNoYXJlZF9idWZfaGFuZGxlLCBFWEVDX09CSkVDVF9QSU5ORUQsIHBpbm5pbmdf b2Zmc2V0KTsKPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMV0sIGJhdGNoX2J1Zl9o YW5kbGUsIDAsIDApOwo+ICsKPiArCXJpbmcgPSAwOwo+ICsJaWYgKEhBU19CTFRfUklORyhpbnRl bF9nZXRfZHJtX2RldmlkKGZkKSkpCj4gKwkJcmluZyA9IEk5MTVfRVhFQ19CTFQ7Cj4gKwo+ICsJ c2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmplY3QyLCByaW5nLCBOVU1fRVhFQ19P QkpFQ1RTLCBsZW4pOwo+ICsJc3VibWl0X2FuZF9zeW5jKGZkLCAmZXhlY2J1ZiwgYmF0Y2hfYnVm X2hhbmRsZSk7Cj4gKwo+ICsJZ2VtX2Nsb3NlKGZkLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCWNs b3NlKGZkKTsKPiArCj4gKwkvKiBjaGVjayBvbiBDUFUgdG8gc2VlIGlmIHZhbHVlIGNoYW5nZXMg Ki8KPiArCWlndF9mYWlsX29uX2Yoc2hhcmVkX2J1ZmZlclswXSAhPSBkYXRhLAo+ICsJCQkiXG5D UFUgcmVhZCBkb2VzIG5vdCBtYXRjaCBHUFUgd3JpdGUsIGV4cGVjdGVkOiAweCV4LCBnb3Q6IDB4 JXhcbiIsIGRhdGEsIHNoYXJlZF9idWZmZXJbMF0pOwo+ICsKPiArCXJldCA9IHNobWR0KHNoYXJl ZF9idWZmZXIpOwo+ICsJaWd0X2Fzc2VydF9lcShyZXQsIDApOwo+ICt9Cj4gKwo+ICsvKiAgZ2Vt X3Bpbl9oaWdoX2FkZHJlc3NfdGVzdCAtIFRoaXMgdGVzdCB3aWxsIGNyZWF0ZSBhIHNoYXJlZCBi dWZmZXIsIGFuZCBjcmVhdGUgYSBjb21tYW5kCj4gKyAqICBmb3IgR1BVIHRvIHdyaXRlIGRhdGEg aW4gaXQuIEl0IHdpbGwgYXR0ZW1wdCB0byBwaW4gdGhlIGJ1ZmZlciBhdCBhZGRyZXNzID4gMzIg Yml0cy4KPiArICogIENQVSB3aWxsIHJlYWQgYW5kIG1ha2Ugc3VyZSBleHBlY3RlZCB2YWx1ZSBp cyBvYnRhaW5lZAo+ICsKPiArICAgTWFsbG9jIGEgNEsgYnVmZmVyCj4gKyAgIFNoYXJlIGJ1ZmZl ciB3aXRoIHdpdGggR1BVIGJ5IHVzaW5nIHVzZXJwdHIgaW9jdGwKPiArICAgQ3JlYXRlIGJhdGNo IGJ1ZmZlciB0byB3cml0ZSBEQVRBIHRvIGZpcnN0IGR3b3JkIG9mIGJ1ZmZlcgo+ICsgICBVc2Ug dmlydHVhbCBhZGRyZXNzIG9mIGJ1ZmZlciBhcyAweDExMDAwMDAwMDAgKD4gMzIgYml0KQo+ICsg ICBTZXQgRVhFQ19PQkpFQ1RfUElOTkVEIGZsYWcgaW4gZXhlYyBvYmplY3QKPiArICAgU2V0ICdv ZmZzZXQnIGluIGV4ZWMgb2JqZWN0IHRvIHNoYXJlZCBidWZmZXIgVk1BCj4gKyAgIFN1Ym1pdCBl eGVjYnVmZmVyCj4gKyAgIFZlcmlmeSB2YWx1ZSBvZiBmaXJzdCBEV09SRCBpbiBzaGFyZWQgYnVm ZmVyIG1hdGNoZXMgREFUQQo+ICsqLwo+ICsKPiArc3RhdGljIHZvaWQgZ2VtX3Bpbl9oaWdoX2Fk ZHJlc3NfdGVzdCh2b2lkKQo+ICt7CgpZb3UgYWxzbyBuZWVkIGEgdmFyaWFudCBvZiB0aGlzIHRl c3Qgd2l0aCBhIG5vcm1hbCBCTywgbm90IHVzZXJwdHIuCgo+ICsJaTkxNV9nZW1fdXNlcnB0ciB1 c2VycHRyOwo+ICsJaW50IGZkLCByZXQ7Cj4gKwl1aW50MzJfdCogc2hhcmVkX2J1ZmZlciA9IE5V TEw7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7Cj4gKwlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBleGVjX29iamVjdDJbTlVNX0VYRUNfT0JKRUNU U107Cj4gKwl1aW50MzJfdCBiYXRjaF9idWZmZXJbQk9fU0laRV07Cj4gKwl1aW50MzJfdCBiYXRj aF9idWZfaGFuZGxlLCBzaGFyZWRfYnVmX2hhbmRsZTsKPiArCWludCByaW5nLCBsZW47Cj4gKwlj b25zdCB1aW50MzJfdCBkYXRhID0gMHgxMjM0NTY3ODsKPiArCXVpbnQ2NF90IGhpZ2hfYWRkcmVz cyA9IDB4MTExMUZGRkYwMDA7IC8qIDQ0IGJpdCBhZGRyZXNzICovCj4gKwo+ICsJZmQgPSBkcm1f b3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKPiArCWJhdGNoX2J1Zl9oYW5kbGUgPSBnZW1fY3Jl YXRlKGZkLCBCT19TSVpFKTsKPiArCj4gKwkvKiBjcmVhdGUgY3B1IGJ1ZmZlciwgc2V0IHRvIGFs bCAweEYncyAqLwo+ICsJc2hhcmVkX2J1ZmZlciA9IGNyZWF0ZV9tZW1fYnVmZmVyKEJPX1NJWkUp Owo+ICsJKnNoYXJlZF9idWZmZXIgPSAweEZGRkZGRkZGOwo+ICsKPiArCS8qIHNoYXJlIHdpdGgg R1BVICovCj4gKwlnZW1fY3JlYXRlX3VzZXJwdHJfc3RydWN0KCZ1c2VycHRyLCBzaGFyZWRfYnVm ZmVyLCBCT19TSVpFLCBmYWxzZSk7Cj4gKwlyZXQgPSBnZW1fY2FsbF91c2VycHRyX2lvY3RsKGZk LCAmdXNlcnB0cik7Cj4gKwlpZ3RfYXNzZXJ0X2VxKHJldCwgMCk7Cj4gKwo+ICsJLyogR2V0IGhh bmRsZSBmb3Igc2hhcmVkIGJ1ZmZlciAqLwo+ICsJc2hhcmVkX2J1Zl9oYW5kbGUgPSB1c2VycHRy LmhhbmRsZTsKPiArCj4gKwkvKiBjcmVhdGUgY29tbWFuZCBidWZmZXIgd2l0aCB3cml0ZSBjb21t YW5kICovCj4gKwlsZW4gPSBnZW1fc3RvcmVfZGF0YV9zdm0oZmQsIGJhdGNoX2J1ZmZlciwgaGln aF9hZGRyZXNzLCBkYXRhLCB0cnVlKTsKPiArCWdlbV93cml0ZShmZCwgYmF0Y2hfYnVmX2hhbmRs ZSwgMCwgYmF0Y2hfYnVmZmVyLCBsZW4pOwo+ICsKPiArCS8qIHN1Ym1pdCBjb21tYW5kIGJ1ZmZl ciAqLwo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlswXSwgc2hhcmVkX2J1Zl9oYW5k bGUsIEVYRUNfT0JKRUNUX1BJTk5FRCB8IEVYRUNfT0JKRUNUX1NVUFBPUlRTXzQ4Ql9BRERSRVNT LCBoaWdoX2FkZHJlc3MpOwo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlsxXSwgYmF0 Y2hfYnVmX2hhbmRsZSwgMCwgMCk7Cj4gKwo+ICsJcmluZyA9IDA7Cj4gKwlpZiAoSEFTX0JMVF9S SU5HKGludGVsX2dldF9kcm1fZGV2aWQoZmQpKSkKPiArCQlyaW5nID0gSTkxNV9FWEVDX0JMVDsK PiArCj4gKwlzZXR1cF9leGVjYnVmZmVyKCZleGVjYnVmLCBleGVjX29iamVjdDIsIHJpbmcsIE5V TV9FWEVDX09CSkVDVFMsIGxlbik7Cj4gKwlzdWJtaXRfYW5kX3N5bmMoZmQsICZleGVjYnVmLCBi YXRjaF9idWZfaGFuZGxlKTsKPiArCj4gKwkvKiBjaGVjayBvbiBDUFUgdG8gc2VlIGlmIHZhbHVl IGNoYW5nZXMgKi8KPiArCWlndF9mYWlsX29uX2Yoc2hhcmVkX2J1ZmZlclswXSAhPSBkYXRhLAo+ ICsJCSJcbkNQVSByZWFkIGRvZXMgbm90IG1hdGNoIEdQVSB3cml0ZSwgZXhwZWN0ZWQ6IDB4JXgs IGdvdDogMHgleFxuIiwgZGF0YSwgc2hhcmVkX2J1ZmZlclswXSk7Cj4gKwo+ICsJZ2VtX2Nsb3Nl KGZkLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCWNsb3NlKGZkKTsKPiArCWZyZWUoc2hhcmVkX2J1 ZmZlcik7Cj4gK30KPiArCj4gKy8qICBnZW1fcGluX25lYXJfNDhCaXRfdGVzdCAtIFRoaXMgdGVz dCB3aWxsIGNyZWF0ZSBhIHNoYXJlZCBidWZmZXIsIGFuZCBjcmVhdGUgYSBjb21tYW5kCj4gKyAq ICBmb3IgR1BVIHRvIHdyaXRlIGRhdGEgaW4gaXQuIEl0IHdpbGwgYXR0ZW1wdCB0byBwaW4gdGhl IGJ1ZmZlciBhdCBhZGRyZXNzID4gNDcgYml0cyA8PSA0OC1iaXQuCj4gKyAqICBDUFUgd2lsbCBy ZWFkIGFuZCBtYWtlIHN1cmUgZXhwZWN0ZWQgdmFsdWUgaXMgb2J0YWluZWQKPiArCj4gKyAgIE1h bGxvYyBhIDRLIGJ1ZmZlcgo+ICsgICBTaGFyZSBidWZmZXIgd2l0aCB3aXRoIEdQVSBieSB1c2lu ZyB1c2VycHRyIGlvY3RsCj4gKyAgIENyZWF0ZSBiYXRjaCBidWZmZXIgdG8gd3JpdGUgREFUQSB0 byBmaXJzdCBkd29yZCBvZiBidWZmZXIKPiArICAgVXNlIHZpcnR1YWwgYWRkcmVzcyBvZiBidWZm ZXIgYXMgcmFuZ2UgYmV0d2VlbiA0Ny1iaXQgYW5kIDQ4LWJpdAo+ICsgICBTZXQgRVhFQ19PQkpF Q1RfUElOTkVEIGZsYWcgaW4gZXhlYyBvYmplY3QKPiArICAgU2V0ICdvZmZzZXQnIGluIGV4ZWMg b2JqZWN0IHRvIHNoYXJlZCBidWZmZXIgVk1BCj4gKyAgIFN1Ym1pdCBleGVjYnVmZmVyCj4gKyAg IFZlcmlmeSB2YWx1ZSBvZiBmaXJzdCBEV09SRCBpbiBzaGFyZWQgYnVmZmVyIG1hdGNoZXMgREFU QQo+ICsqLwo+ICsjZGVmaW5lIEJFR0lOX0hJR0hfQUREUkVTUyAweDdGRkZGRkZGRjAwMAo+ICsj ZGVmaW5lIEVORF9ISUdIX0FERFJFU1MgMHhGRkZGRkZGRkMwMDAKPiArI2RlZmluZSBBRERSRVNT X0lOQ1JFTUVOVCAweDIwMDAwMDAwMDAKPiArc3RhdGljIHZvaWQgZ2VtX3Bpbl9uZWFyXzQ4Qml0 X3Rlc3Qodm9pZCkKPiArewo+ICsJaTkxNV9nZW1fdXNlcnB0ciB1c2VycHRyOwo+ICsJaW50IGZk LCByZXQ7Cj4gKwl1aW50MzJfdCogc2hhcmVkX2J1ZmZlciA9IE5VTEw7Cj4gKwlzdHJ1Y3QgZHJt X2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4 ZWNfb2JqZWN0MiBleGVjX29iamVjdDJbTlVNX0VYRUNfT0JKRUNUU107Cj4gKwl1aW50MzJfdCBi YXRjaF9idWZmZXJbQk9fU0laRV07Cj4gKwl1aW50MzJfdCBiYXRjaF9idWZfaGFuZGxlLCBzaGFy ZWRfYnVmX2hhbmRsZTsKPiArCWludCByaW5nLCBsZW47Cj4gKwljb25zdCB1aW50MzJfdCBkYXRh ID0gMHgxMjM0NTY3ODsKPiArCXVpbnQ2NF90IGhpZ2hfYWRkcmVzczsKPiArCj4gKwlmZCA9IGRy bV9vcGVuX2RyaXZlcihEUklWRVJfSU5URUwpOwo+ICsJYmF0Y2hfYnVmX2hhbmRsZSA9IGdlbV9j cmVhdGUoZmQsIEJPX1NJWkUpOwo+ICsKPiArCS8qIGNyZWF0ZSBjcHUgYnVmZmVyLCBzZXQgdG8g YWxsIDB4RidzICovCj4gKwlzaGFyZWRfYnVmZmVyID0gY3JlYXRlX21lbV9idWZmZXIoQk9fU0la RSk7Cj4gKwkqc2hhcmVkX2J1ZmZlciA9IDB4RkZGRkZGRkY7Cj4gKwo+ICsJLyogc2hhcmUgd2l0 aCBHUFUgKi8KPiArCWdlbV9jcmVhdGVfdXNlcnB0cl9zdHJ1Y3QoJnVzZXJwdHIsIHNoYXJlZF9i dWZmZXIsIEJPX1NJWkUsIGZhbHNlKTsKPiArCXJldCA9IGdlbV9jYWxsX3VzZXJwdHJfaW9jdGwo ZmQsICZ1c2VycHRyKTsKPiArCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKPiArCj4gKwkvKiBHZXQg aGFuZGxlIGZvciBzaGFyZWQgYnVmZmVyICovCj4gKwlzaGFyZWRfYnVmX2hhbmRsZSA9IHVzZXJw dHIuaGFuZGxlOwo+ICsKPiArCWZvciAoaGlnaF9hZGRyZXNzID0gQkVHSU5fSElHSF9BRERSRVNT OyBoaWdoX2FkZHJlc3MgPD0gRU5EX0hJR0hfQUREUkVTUzsKPiArCQkJCQkJaGlnaF9hZGRyZXNz Kz1BRERSRVNTX0lOQ1JFTUVOVCl7Cj4gKwkJLyogY3JlYXRlIGNvbW1hbmQgYnVmZmVyIHdpdGgg d3JpdGUgY29tbWFuZCAqLwo+ICsJCWxlbiA9IGdlbV9zdG9yZV9kYXRhX3N2bShmZCwgYmF0Y2hf YnVmZmVyLCBoaWdoX2FkZHJlc3MsCj4gKwkJCQkJZGF0YSwgdHJ1ZSk7Cj4gKwkJZ2VtX3dyaXRl KGZkLCBiYXRjaF9idWZfaGFuZGxlLCAwLCBiYXRjaF9idWZmZXIsIGxlbik7Cj4gKwo+ICsJCS8q IHN1Ym1pdCBjb21tYW5kIGJ1ZmZlciAqLwo+ICsJCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVj dDJbMF0sIHNoYXJlZF9idWZfaGFuZGxlLAo+ICsJCQkJRVhFQ19PQkpFQ1RfUElOTkVEIHwgRVhF Q19PQkpFQ1RfU1VQUE9SVFNfNDhCX0FERFJFU1MsCj4gKwkJCQloaWdoX2FkZHJlc3MpOwo+ICsJ CXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMV0sIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIDAp Owo+ICsKPiArCQlyaW5nID0gMDsKPiArCQlpZiAoSEFTX0JMVF9SSU5HKGludGVsX2dldF9kcm1f ZGV2aWQoZmQpKSkKPiArCQkJcmluZyA9IEk5MTVfRVhFQ19CTFQ7Cj4gKwo+ICsKPiArCQlzZXR1 cF9leGVjYnVmZmVyKCZleGVjYnVmLCBleGVjX29iamVjdDIsIHJpbmcsIE5VTV9FWEVDX09CSkVD VFMsIGxlbik7Cj4gKwkJc3VibWl0X2FuZF9zeW5jKGZkLCAmZXhlY2J1ZiwgYmF0Y2hfYnVmX2hh bmRsZSk7Cj4gKwo+ICsJCS8qIGNoZWNrIG9uIENQVSB0byBzZWUgaWYgdmFsdWUgY2hhbmdlcyAq Lwo+ICsJCWlndF9mYWlsX29uX2Yoc2hhcmVkX2J1ZmZlclswXSAhPSBkYXRhLAo+ICsJCSJcbkNQ VSByZWFkIGRvZXMgbm90IG1hdGNoIEdQVSB3cml0ZSwgZXhwZWN0ZWQ6IDB4JXgsIGdvdDogMHgl eFxuLCAweCUiUFJJeDY0IiIsIGRhdGEsIHNoYXJlZF9idWZmZXJbMF0sIGhpZ2hfYWRkcmVzcyk7 Cj4gKwl9Cj4gKwo+ICsJZ2VtX2Nsb3NlKGZkLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCWNsb3Nl KGZkKTsKPiArCWZyZWUoc2hhcmVkX2J1ZmZlcik7Cj4gK30KPiArCj4gKy8qICBnZW1fcGluX21t YXBfYW5vbnltb3VzX3Rlc3QgLSBUaGlzIHRlc3Qgd2lsbCBjcmVhdGUgYSBtbWFwIGFub255bW91 cyBidWZmZXIgYW5kCj4gKyAqICBzaGFyZSB3aXRoIEdQVS4gSXQgd2lsbCBydW4gYmFzaWMgdGVz dCBvbiB0aGlzIGJ1ZmZlci4KPiArCj4gKyAgIENyZWF0ZSBhIGFub255bW91cyBtbWFwIGJ1ZmZl cgo+ICsgICBTaGFyZSBidWZmZXIgd2l0aCB3aXRoIEdQVSBieSB1c2luZyB1c2VycHRyIGlvY3Rs Cj4gKyAgIENyZWF0ZSBiYXRjaCBidWZmZXIgdG8gd3JpdGUgREFUQSB0byBmaXJzdCBkd29yZCBv ZiBidWZmZXIKPiArICAgU2V0IEVYRUNfT0JKRUNUX1BJTk5FRCBmbGFnIGluIGV4ZWMgb2JqZWN0 Cj4gKyAgIFNldCAnb2Zmc2V0JyBpbiBleGVjIG9iamVjdCB0byBwaW5uaW5nX29mZnNldCBWTUEK PiArICAgU3VibWl0IGV4ZWNidWZmZXIKPiArICAgVmVyaWZ5IHZhbHVlIG9mIGZpcnN0IERXT1JE IGluIHNoYXJlZCBidWZmZXIgbWF0Y2hlcyBEQVRBCj4gKyovCj4gK3ZvaWQgZ2VtX3Bpbl9tbWFw X2Fub255bW91c190ZXN0KHZvaWQpCj4gK3sKClBsZWFzZSBtb3ZlIHRvIGdlbV91c2VycHRyX2Js aXRzLCB3aXRob3V0IHRoZSBzb2Z0cGluIHBhcnRzLgoKPiArCWk5MTVfZ2VtX3VzZXJwdHIgdXNl cnB0cjsKPiArCWludCBmZCwgcmV0Owo+ICsJdWludDMyX3QqIHNoYXJlZF9idWZmZXIgPSBOVUxM Owo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmOwo+ICsJc3RydWN0 IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgZXhlY19vYmplY3QyW05VTV9FWEVDX09CSkVDVFNd Owo+ICsJdWludDMyX3QgYmF0Y2hfYnVmZmVyW0JPX1NJWkVdOwo+ICsJdWludDMyX3QgYmF0Y2hf YnVmX2hhbmRsZSwgc2hhcmVkX2J1Zl9oYW5kbGU7Cj4gKwlpbnQgcmluZywgbGVuOwo+ICsJY29u c3QgdWludDMyX3QgZGF0YSA9IDB4MTIzNDU2Nzg7Cj4gKwl1aW50NjRfdCBwaW5uaW5nX29mZnNl dCA9IDB4MTAwMDsKPiArCj4gKwlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5URUwpOwo+ ICsJYmF0Y2hfYnVmX2hhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUpOwo+ICsKPiArCS8q IGNyZWF0ZSBhbm9ueW11cyBtbWFwIGJ1ZmZlciwgc2V0IHRvIGFsbCAweEYncyAqLwo+ICsJc2hh cmVkX2J1ZmZlciA9IG1tYXAoTlVMTCwgQk9fU0laRSwgUFJPVF9XUklURSwgTUFQX1BSSVZBVEUg fCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7Cj4gKwlpZ3RfZmFpbF9vbl9mKHNoYXJlZF9idWZmZXIg PT0gKHZvaWQgKiktMSwKPiArCQkgICAgICAibW1hcCBjYWxsIGZhaWxlZCB3aXRoICVzXG4iLCBz dHJlcnJvcihlcnJubykpOwoKTUFQX0ZBSUxFRCwgbm90IC0xLgoKPiArCj4gKwkqc2hhcmVkX2J1 ZmZlciA9IDB4RkZGRkZGRkY7Cj4gKwo+ICsJLyogc2hhcmUgd2l0aCBHUFUgKi8KPiArCWdlbV9j cmVhdGVfdXNlcnB0cl9zdHJ1Y3QoJnVzZXJwdHIsIHNoYXJlZF9idWZmZXIsIEJPX1NJWkUsIGZh bHNlKTsKPiArCXJldCA9IGdlbV9jYWxsX3VzZXJwdHJfaW9jdGwoZmQsICZ1c2VycHRyKTsKPiAr CWlndF9hc3NlcnRfZXEocmV0LCAwKTsKPiArCj4gKwkvKiBHZXQgaGFuZGxlIGZvciBzaGFyZWQg YnVmZmVyICovCj4gKwlzaGFyZWRfYnVmX2hhbmRsZSA9IHVzZXJwdHIuaGFuZGxlOwo+ICsKPiAr CS8qIGNyZWF0ZSBjb21tYW5kIGJ1ZmZlciB3aXRoIHdyaXRlIGNvbW1hbmQgKi8KPiArCWxlbiA9 IGdlbV9zdG9yZV9kYXRhX3N2bShmZCwgYmF0Y2hfYnVmZmVyLCBwaW5uaW5nX29mZnNldCwgZGF0 YSwgdHJ1ZSk7Cj4gKwlnZW1fd3JpdGUoZmQsIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIGJhdGNoX2J1 ZmZlciwgbGVuKTsKPiArCj4gKwkvKiBzdWJtaXQgY29tbWFuZCBidWZmZXIgKi8KPiArCXNldHVw X2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMF0sIHNoYXJlZF9idWZfaGFuZGxlLCBFWEVDX09CSkVD VF9QSU5ORUQsIHBpbm5pbmdfb2Zmc2V0KTsKPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVj dDJbMV0sIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIDApOwo+ICsKPiArCXJpbmcgPSAwOwo+ICsJaWYg KEhBU19CTFRfUklORyhpbnRlbF9nZXRfZHJtX2RldmlkKGZkKSkpCj4gKwkJcmluZyA9IEk5MTVf RVhFQ19CTFQ7Cj4gKwo+ICsJc2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmplY3Qy LCByaW5nLCBOVU1fRVhFQ19PQkpFQ1RTLCBsZW4pOwo+ICsJc3VibWl0X2FuZF9zeW5jKGZkLCAm ZXhlY2J1ZiwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwo+ICsJLy8gY2hlY2sgb24gQ1BVIHRvIHNl ZSBpZiB2YWx1ZSBjaGFuZ2VzCj4gKwlpZ3RfZmFpbF9vbl9mKHNoYXJlZF9idWZmZXJbMF0gIT0g ZGF0YSwKPiArCQkgICAgICAiXG5DUFUgcmVhZCBkb2VzIG5vdCBtYXRjaCBHUFUgd3JpdGUsIGV4 cGVjdGVkOiAweCV4LCBnb3Q6IDB4JXhcbiIsIGRhdGEsIHNoYXJlZF9idWZmZXJbMF0pOwo+ICsK PiArCWdlbV9jbG9zZShmZCwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwljbG9zZShmZCk7Cj4gKwlp Z3RfZmFpbF9vbl9mKG11bm1hcChzaGFyZWRfYnVmZmVyLCBCT19TSVpFKSAhPSAwLAo+ICsJCSAg ICAgICJtdW5tYXAgZmFpbGVkIHdpdGg6ICVzIiwgc3RyZXJyb3IoZXJybm8pKTsKPiArfQo+ICsK PiArLyogIGdlbV9waW5fbW1hcF9maWxlX3Rlc3QgLSBUaGlzIHRlc3Qgd2lsbCB1c2UgbW1hcCBj b21tYW5kIHRvIG1hcAo+ICsgKiAgYSBmaWxlIGluIG1lbW9yeS4gSXQgd2lsbCB0aGVuIGF0dGVt cHQgdG8gc2hhcmUgdGhlIGJ1ZmZlciB3aXRoIEdQVQo+ICsgKiAgdXNpbmcgdGhlIHVzZXJwdHIg aW9jdGwuIEl0IHdpbGwgdmVyaWZ5IGlmIENQVS9HUFUgd3JpdGVzIGFyZSBjb25zaXN0ZW50Cj4g Kwo+ICsgICBvcGVuL2NyZWF0ZSBhIGZpbGUKPiArICAgbHNlZWsgaW50byB0aGUgZmlsZSBhbmQg d3JpdGUgc29tZSBhcmJpdHJhcnkgZGF0YQo+ICsgICB0aGlzIGFsbG93cyB0aGUgbW1hcCdkIHBh Z2UgdG8gYmVjb21lIHJlc2lkZW50Cj4gKyAgIHVzZSBtbWFwIGNvbW1hbmQgdG8gbWFwIHRoZSBm aWxlIGludG8gbWVtb3J5Cj4gKyAgIFNoYXJlIGJ1ZmZlciB3aXRoIHdpdGggR1BVIGJ5IHVzaW5n IHVzZXJwdHIgaW9jdGwKPiArICAgQ3JlYXRlIGJhdGNoIGJ1ZmZlciB0byB3cml0ZSBEQVRBIHRv IGZpcnN0IGR3b3JkIG9mIGJ1ZmZlcgo+ICsgICBTZXQgRVhFQ19PQkpFQ1RfUElOTkVEIGZsYWcg aW4gZXhlYyBvYmplY3QKPiArICAgU2V0ICdvZmZzZXQnIGluIGV4ZWMgb2JqZWN0IHRvIHBpbm5p bmdfb2ZmZXN0IFZNQQo+ICsgICBTdWJtaXQgZXhlY2J1ZmZlcgo+ICsgICBWZXJpZnkgdmFsdWUg b2YgZmlyc3QgRFdPUkQgaW4gc2hhcmVkIGJ1ZmZlciBtYXRjaGVzIERBVEEKPiArICAgQ2xvc2Ug ZmlsZQo+ICsqLwo+ICt2b2lkIGdlbV9waW5fbW1hcF9maWxlX3Rlc3Qodm9pZCkKPiArewoKUGxl YXNlIG1vdmUgdG8gZ2VtX3VzZXJwdHJfYmxpdHMsIHdpdGhvdXQgdGhlIHNvZnRwaW4gcGFydHMu Cgo+ICsJaTkxNV9nZW1fdXNlcnB0ciB1c2VycHRyOwo+ICsJaW50IGZkLCByZXQ7Cj4gKwlzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2V4ZWNfb2JqZWN0MiBleGVjX29iamVjdDJbTlVNX0VYRUNfT0JKRUNUU107Cj4gKwl1aW50 MzJfdCBiYXRjaF9idWZmZXJbQk9fU0laRV07Cj4gKwl1aW50MzJfdCBiYXRjaF9idWZfaGFuZGxl LCBkZXN0X2J1Zl9oYW5kbGU7Cj4gKwlpbnQgcmluZywgbGVuOwo+ICsJY29uc3QgdWludDMyX3Qg ZGF0YSA9IDB4MTIzNDU2Nzg7Cj4gKyAgICAgICAgaW50IGZkb3V0Owo+ICsJdWludDMyX3QgKmRl c3Q7Cj4gKwljb25zdCBjaGFyIGZpbGVuYW1lW10gPSAiL3RtcC9zdm1fbW1hcC50eHQiOwo+ICsJ dWludDY0X3QgcGlubmluZ19vZmZzZXQgPSAweDEwMDA7Cj4gKwo+ICsJZmRvdXQgPSBvcGVuKGZp bGVuYW1lLCBPX1JEV1IgfCBPX0NSRUFUIHwgT19UUlVOQywgMDY0MCk7Cj4gKwlpZ3RfZmFpbF9v bl9mKGZkb3V0IDwgMCwgIkNhbm5vdCBvcGVuIG91dHB1dCBmaWxlXG4iKTsKPiArCj4gKwkvKiBE byB0aGlzIHRvIGVuc3VyZSBiYWNraW5nIHBoeXNpY2FsIG1lbW9yeSBmb3IgdGhlIGZpbGUgKi8K PiArCS8qIGdvIHRvIHRoZSBsb2NhdGlvbiBjb3JyZXNwb25kaW5nIHRvIHRoZSBsYXN0IGJ5dGUg Ki8KPiArCWlmIChsc2VlayAoZmRvdXQsIEJPX1NJWkUsIFNFRUtfU0VUKSA9PSAtMSkKPiArCQlp Z3RfaW5mbygibHNlZWsgZXJyb3IiKTsKPiArCj4gKwkvKiB3cml0ZSBhIGR1bW15IGJ5dGUgYXQg dGhlIGxhc3QgbG9jYXRpb24gKi8KPiArCWlmICh3cml0ZSAoZmRvdXQsICIiLCAxKSAhPSAxKQo+ ICsJCWlndF9pbmZvKCJ3cml0ZSBlcnJvciIpOwo+ICsKPiArCWZkID0gZHJtX29wZW5fZHJpdmVy KERSSVZFUl9JTlRFTCk7Cj4gKwliYXRjaF9idWZfaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgQk9f U0laRSk7Cj4gKwo+ICsJLyogY3JlYXRlIGFub255bXVzIG1tYXAgYnVmZmVyLCBzZXQgdG8gYWxs IDB4RidzICovCj4gKwlkZXN0ID0gbW1hcCgwLCBCT19TSVpFLCBQUk9UX1dSSVRFLCBNQVBfU0hB UkVELCBmZG91dCwgMCk7Cj4gKwlpZ3RfZmFpbF9vbl9mKGRlc3QgPT0gKHZvaWQgKiktMSwKPiAr CQkgICAgICAibW1hcCBjYWxsIGZhaWxlZCB3aXRoICVzXG4iLCBzdHJlcnJvcihlcnJubykpOwo+ ICsJKmRlc3QgPSAweDExMTExMTExOwo+ICsKPiArCWdlbV9jcmVhdGVfdXNlcnB0cl9zdHJ1Y3Qo JnVzZXJwdHIsIGRlc3QsIEJPX1NJWkUsIGZhbHNlKTsKPiArCXJldCA9IGdlbV9jYWxsX3VzZXJw dHJfaW9jdGwoZmQsICZ1c2VycHRyKTsKPiArCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKPiArCWRl c3RfYnVmX2hhbmRsZSA9IHVzZXJwdHIuaGFuZGxlOwo+ICsKPiArCS8qIGNyZWF0ZSBjb21tYW5k IGJ1ZmZlciB3aXRoIHdyaXRlIGNvbW1hbmQgKi8KPiArCWxlbiA9IGdlbV9zdG9yZV9kYXRhX3N2 bShmZCwgYmF0Y2hfYnVmZmVyLCBwaW5uaW5nX29mZnNldCwgZGF0YSwgdHJ1ZSk7Cj4gKwlnZW1f d3JpdGUoZmQsIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIGJhdGNoX2J1ZmZlciwgbGVuKTsKPiArCj4g KwkvKiBzdWJtaXQgY29tbWFuZCBidWZmZXIgKi8KPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29i amVjdDJbMF0sIGRlc3RfYnVmX2hhbmRsZSwgRVhFQ19PQkpFQ1RfUElOTkVELCBwaW5uaW5nX29m ZnNldCk7Cj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzFdLCBiYXRjaF9idWZfaGFu ZGxlLCAwLCAwKTsKPiArCj4gKwlyaW5nID0gMDsKPiArCWlmIChIQVNfQkxUX1JJTkcoaW50ZWxf Z2V0X2RybV9kZXZpZChmZCkpKQo+ICsJCXJpbmcgPSBJOTE1X0VYRUNfUkVOREVSOwo+ICsKPiAr CXNldHVwX2V4ZWNidWZmZXIoJmV4ZWNidWYsIGV4ZWNfb2JqZWN0MiwgcmluZywgTlVNX0VYRUNf T0JKRUNUUywgbGVuKTsKPiArCXN1Ym1pdF9hbmRfc3luYyhmZCwgJmV4ZWNidWYsIGJhdGNoX2J1 Zl9oYW5kbGUpOwo+ICsKPiArCS8qIGNoZWNrIG9uIENQVSB0byBzZWUgaWYgdmFsdWUgY2hhbmdl cyAqLwo+ICsJaWd0X2ZhaWxfb25fZigqZGVzdCAhPSBkYXRhLAo+ICsJCSAgICAgICJcbkNQVSBy ZWFkIGRvZXMgbm90IG1hdGNoIEdQVSB3cml0ZSwgZXhwZWN0ZWQ6IDB4JXgsIGdvdDogMHgleFxu IiwgZGF0YSwgZGVzdFswXSk7Cj4gKwo+ICsJZ2VtX2Nsb3NlKGZkLCBiYXRjaF9idWZfaGFuZGxl KTsKPiArCWNsb3NlKGZkKTsKPiArCWlndF9mYWlsX29uX2YobXVubWFwKGRlc3QsIEJPX1NJWkUp ICE9IDAsCj4gKwkJICAgICAgIm11bm1hcCBmYWlsZWQgd2l0aDogJXMiLCBzdHJlcnJvcihlcnJu bykpOwo+ICsJY2xvc2UoZmRvdXQpOwo+ICt9Cj4gKwo+ICsKPiAraW50IG1haW4oaW50IGFyZ2Ms IGNoYXIqIGFyZ3ZbXSkKPiArewo+ICsJaWd0X3N1YnRlc3RfaW5pdChhcmdjLCBhcmd2KTsKPiAr CWlndF9za2lwX29uX3NpbXVsYXRpb24oKTsKPiArCj4gKwlpZ3Rfc3VidGVzdCgiZ2VtX2Jhc2lj Iil7Cj4gKwkJZ2VtX2Jhc2ljX3Rlc3QoKTsKPiArCX0KPiArCWlndF9zdWJ0ZXN0KCJnZW1fbXVs dGlwbGVfcHJvY2VzcyIpewo+ICsJCWdlbV9tdWx0aXBsZV9wcm9jZXNzX3Rlc3QoKTsKPiArCX0K PiArCWlndF9zdWJ0ZXN0KCJnZW1fcmVwaW4iKXsKPiArCQlnZW1fcmVwaW5fdGVzdCgpOwo+ICsJ fQo+ICsJaWd0X3N1YnRlc3QoImdlbV9ldmljdCIpewo+ICsJCWdlbV9ldmljdF90ZXN0KCk7Cj4g Kwl9Cj4gKwlpZ3Rfc3VidGVzdCgiZ2VtX3NvZnRwaW5fc3RyZXNzIil7Cj4gKwkJZ2VtX3NvZnRw aW5fc3RyZXNzX3Rlc3QoKTsKPiArCX0KPiArCWlndF9zdWJ0ZXN0KCJnZW1fcGluX292ZXJsYXAi KXsKPiArCQlnZW1fcGluX292ZXJsYXBfdGVzdCgpOwo+ICsJfQo+ICsJaWd0X3N1YnRlc3QoImdl bV9zaG1lbSIpewo+ICsJCWdlbV9zaG1lbV90ZXN0KCk7Cj4gKwl9Cj4gKwlpZ3Rfc3VidGVzdCgi Z2VtX3dyaXRlX211bHRpcGFnZV9idWZmZXIiKXsKPiArCQlnZW1fd3JpdGVfbXVsdGlwYWdlX2J1 ZmZlcl90ZXN0KCk7Cj4gKwl9Cj4gKwlpZ3Rfc3VidGVzdCgiZ2VtX3Bpbl9oaWdoX2FkZHJlc3Mi KXsKPiArCQlnZW1fcGluX2hpZ2hfYWRkcmVzc190ZXN0KCk7Cj4gKwl9Cj4gKwlpZ3Rfc3VidGVz dCgiZ2VtX3Bpbl9uZWFyXzQ4Qml0Iil7Cj4gKwkJZ2VtX3Bpbl9uZWFyXzQ4Qml0X3Rlc3QoKTsK PiArCX0KPiArCWlndF9zdWJ0ZXN0KCJnZW1fcGluX2ludmFsaWRfdm1hIil7Cj4gKwkJZ2VtX3Bp bl9pbnZhbGlkX3ZtYV90ZXN0KCk7Cj4gKwl9Cj4gKwlpZ3Rfc3VidGVzdCgiZ2VtX3Bpbl9tbWFw X2Fub24iKXsKPiArCQlnZW1fcGluX21tYXBfYW5vbnltb3VzX3Rlc3QoKTsKPiArCX0KPiArCWln dF9zdWJ0ZXN0KCJnZW1fcGluX21tYXBfZmlsZSIpewo+ICsJCWdlbV9waW5fbW1hcF9maWxlX3Rl c3QoKTsKPiArCX0KPiArCj4gKwlpZ3RfZXhpdCgpOwo+ICt9CgpTYW1lIGNvbW1lbnRzIGFzIGJl Zm9yZSA6KAoKMS4gTW9yZSBjb2Rpbmcgc3R5bGUgY2xlYW51cCAoaW5jbHVkaW5nIGNvbW1lbnQg c3R5bGVzKS4KCjIuIE1vcmUgdGVzdHMgb24gbm9ybWFsIEJPcywgbm8gbmVlZCB0byB1c2UgdXNl cnB0ciBmb3IgZXZlcnl0aGluZy4KCjMuIE1vdmUgImNhbiB3ZSBjcmVhdGUgYW4gdXNlcnB0ciBm cm9tIHRoaXMgYmFja2luZyBzdG9yZSIgdGVzdHMgdG8gCmdlbV91c2VycHRyX2JsaXRzLgoKNC4g QW5kIHByb2JhYmx5IHNvbWUgbW9yZSBpbnRlcnN0aW5nIG5lZ2F0aXZlIHRlc3RzIGNhbiBiZSBh ZGRlZCBhYm91dCAKd2hlbiBzb2Z0cGluIGNhbi93aWxsIGZhaWwuIE5lZWQgdG8gYnJhaW5zdG9y bSBpdCBhIGJpdC4KClJlZ2FyZHMsCgpUdnJ0a28KX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlz dHMuZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9pbnRlbC1nZngK