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: Thu, 3 Dec 2015 16:42:37 +0000 Message-ID: <566070FD.5090800@linux.intel.com> References: <1449131792-10008-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 mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTP id B4F0F721C6 for ; Thu, 3 Dec 2015 08:42:39 -0800 (PST) In-Reply-To: <1449131792-10008-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 CkhpLAoKT24gMDMvMTIvMTUgMDg6MzYsIFZpbmF5IEJlbGdhdW1rYXIgd3JvdGU6Cj4gVGhlc2Ug 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+IHY1OiBNb3Jl IGZpeGVzLiBSZW1vdmVkIHRoZSBmaWxlIGJhc2VkIHRlc3RzLCB3aWxsIG1vdmUgdGhlbSB0byB1 c2VycHRyIHRlc3RzLgo+IEFkZGVkIGEgZnVuY3Rpb24gdGhhdCB2YWxpZGF0ZXMgYXBwcm9wcmlh dGUgUFBHVFQgc3VwcG9ydCBiZWZvcmUgcnVubmluZyB0ZXN0cy4KPiBPcHRpbWl6ZWQgc3RhY2sg c3BhY2UgYW5kIG1lbW9yeSBmb290cHJpbnQgaW4gc3RyZXNzIHRlc3QuIFJlbW92ZWQgdGhlIGV2 aWN0aW9uCj4gdGVzdCwgd2lsbCBhZGQgaXQgYmFjayBhZnRlciB2ZXJpZnlpbmcgcHJvcGVyIGZ1 bmN0aW9uYWxpdHkuCj4KPiB2NjogU3BsaXQgYmFzaWMgdGVzdCBpbnRvIHVzZXJwdHIgYW5kIGJv Cj4gRml4ZWQgc29tZSBjb2Rpbmcgc3R5bGUgaXNzdWVzLgo+Cj4gdjc6IEVuaGFuY2VkIGludmFs aWQgdm1hIHBpbm5pbmcgdGVzdCB0byB2ZXJpZnkgMzItYml0IFBQR1RUIGZ1bmN0aW9uYWxpdHku Cj4gRW5hYmxlZCB0aGUgdGVzdCBmb3IgMzItYml0IFBQR1RUIHN5c3RlbXMsIGFuZCB2ZXJpZnkg cGlubmluZyBmYWlscyBhYm92ZQo+IDMyLWJpdCBhZGRyZXNzZXMuIEVuaGFuY2VkIHRoZSBoaWdo IGFkcmVzcyBwaW5uaW5nIHRlc3QgdG8gZW5zdXJlIHBpbm5pbmcKPiBmYWlscyB3aGVuIEVYRUNf T0JKRUNUX1BJTk5FRCBmbGFnIGlzIG5vdCB1c2VkLiBTb21lIG1vcmUgY29zbWV0aWMgZml4ZXMg dG8KPiBjbG9zZSBidWZmZXIgaGFuZGxlcy4gQ2hhbmdlZCB1c2VycHRyIGZ1bmN0aW9uIHRvIHVz ZWQgc3luY2hyb25pemVkIG9wZXJhdGlvbnMuCj4KPiB2ODogTWlub3IgY2hhbmdlIHRvIGhpZ2gg YWRkcmVzcyBwaW5uaW5nIHRlc3QgYXMgcGVyIGNvbW1lbnQuCj4KPiB2OTogU2tpcCB0aGUgdGVz dHMgaWYgc29mdHBpbiBzdXBwb3J0IGlzIG5vdCBwcmVzZW50Lgo+Cj4gdjEwOiBSZW1vdmVkIHRy YWlsaW5nIHdoaXRlIHNwYWNlcy4KPgo+IENjOiBNaWNoZWwgVGhpZXJyeSA8bWljaGVsLnRoaWVy cnlAaW50ZWwuY29tPgo+IENjOiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwu Y29tPgo+IFNpZ25lZC1vZmYtYnk6IFZpbmF5IEJlbGdhdW1rYXIgPHZpbmF5LmJlbGdhdW1rYXJA aW50ZWwuY29tPgo+IC0tLQo+ICAgdGVzdHMvLmdpdGlnbm9yZSAgICAgICB8ICAgIDEgKwo+ICAg dGVzdHMvTWFrZWZpbGUuc291cmNlcyB8ICAgIDEgKwo+ICAgdGVzdHMvZ2VtX3NvZnRwaW4uYyAg ICB8IDEwODYgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr Cj4gICAzIGZpbGVzIGNoYW5nZWQsIDEwODggaW5zZXJ0aW9ucygrKQo+ICAgY3JlYXRlIG1vZGUg MTAwNjQ0IHRlc3RzL2dlbV9zb2Z0cGluLmMKClJldmlld2VkLWJ5OiBUdnJ0a28gVXJzdWxpbiA8 dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgoKUmVnYXJkcywKClR2cnRrbwoKPiBkaWZmIC0tZ2l0 IGEvdGVzdHMvLmdpdGlnbm9yZSBiL3Rlc3RzLy5naXRpZ25vcmUKPiBpbmRleCA4MGFmOWE3Li40 MjQ4NzBiIDEwMDY0NAo+IC0tLSBhL3Rlc3RzLy5naXRpZ25vcmUKPiArKysgYi90ZXN0cy8uZ2l0 aWdub3JlCj4gQEAgLTIxLDYgKzIxLDcgQEAgZ2VtX2JhZF9ibGl0Cj4gICBnZW1fYmFkX2xlbmd0 aAo+ICAgZ2VtX2JhZF9yZWxvYwo+ICAgZ2VtX2Jhc2ljCj4gK2dlbV9zb2Z0cGluCj4gICBnZW1f Y2FjaGluZwo+ICAgZ2VtX2Nsb3NlX3JhY2UKPiAgIGdlbV9jb25jdXJyZW50X2FsbAo+IGRpZmYg LS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ IGluZGV4IDhmYjJkZTguLjIwMDhkNGEgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMvTWFrZWZpbGUuc291 cmNlcwo+ICsrKyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMKPiBAQCAtMTEsNiArMTEsNyBAQCBU RVNUU19wcm9nc19NID0gXAo+ICAgCWRydl9oYW5nbWFuIFwKPiAgIAlnZW1fYmFkX3JlbG9jIFwK PiAgIAlnZW1fYmFzaWMgXAo+ICsJZ2VtX3NvZnRwaW4gXAo+ICAgCWdlbV9jYWNoaW5nIFwKPiAg IAlnZW1fY2xvc2VfcmFjZSBcCj4gICAJZ2VtX2NvbmN1cnJlbnRfYmxpdCBcCj4gZGlmZiAtLWdp dCBhL3Rlc3RzL2dlbV9zb2Z0cGluLmMgYi90ZXN0cy9nZW1fc29mdHBpbi5jCj4gbmV3IGZpbGUg bW9kZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwLi5hNWQzNjk0Cj4gLS0tIC9kZXYvbnVsbAo+ICsr KyBiL3Rlc3RzL2dlbV9zb2Z0cGluLmMKPiBAQCAtMCwwICsxLDEwODYgQEAKPiArLyoKPiArICog Q29weXJpZ2h0IMKpIDIwMTUgSW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVybWlzc2lv biBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWlu aW5nIGEKPiArICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdh cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsg KiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1 cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4g KyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24g bm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNs dWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBT b2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJ VEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5D TFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ VFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5H RU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQg SE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVS V0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRI RSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZU V0FSRS4KPiArICoKPiArICogQXV0aG9yczoKPiArICogICAgVmluYXkgQmVsZ2F1bWthciA8dmlu YXkuYmVsZ2F1bWthckBpbnRlbC5jb20+Cj4gKyAqICAgIFRob21hcyBEYW5pZWwgPHRob21hcy5k YW5pZWxAaW50ZWwuY29tPgo+ICsgKgo+ICsgKi8KPiArCj4gKyNpbmNsdWRlIDx1bmlzdGQuaD4K PiArI2luY2x1ZGUgPHN0ZGxpYi5oPgo+ICsjaW5jbHVkZSA8c3RkaW50Lmg+Cj4gKyNpbmNsdWRl IDxzdGRpby5oPgo+ICsjaW5jbHVkZSA8c3RyaW5nLmg+Cj4gKyNpbmNsdWRlIDxmY250bC5oPgo+ ICsjaW5jbHVkZSA8aW50dHlwZXMuaD4KPiArI2luY2x1ZGUgPGVycm5vLmg+Cj4gKyNpbmNsdWRl IDxzeXMvc3RhdC5oPgo+ICsjaW5jbHVkZSA8c3lzL2lvY3RsLmg+Cj4gKyNpbmNsdWRlIDxzeXMv dGltZS5oPgo+ICsjaW5jbHVkZSA8bWFsbG9jLmg+Cj4gKyNpbmNsdWRlICJkcm0uaCIKPiArI2lu Y2x1ZGUgImlvY3RsX3dyYXBwZXJzLmgiCj4gKyNpbmNsdWRlICJkcm10ZXN0LmgiCj4gKyNpbmNs dWRlICJpbnRlbF9jaGlwc2V0LmgiCj4gKyNpbmNsdWRlICJpbnRlbF9pby5oIgo+ICsjaW5jbHVk ZSAiaTkxNV9kcm0uaCIKPiArI2luY2x1ZGUgPGFzc2VydC5oPgo+ICsjaW5jbHVkZSA8c3lzL3dh aXQuaD4KPiArI2luY2x1ZGUgPHN5cy9pcGMuaD4KPiArI2luY2x1ZGUgPHN5cy9zaG0uaD4KPiAr I2luY2x1ZGUgImlndF9rbXMuaCIKPiArI2luY2x1ZGUgPGludHR5cGVzLmg+Cj4gKyNpbmNsdWRl IDxzeXMvdHlwZXMuaD4KPiArI2luY2x1ZGUgPHN5cy9zdGF0Lmg+Cj4gKwo+ICsjZGVmaW5lIEJP X1NJWkUgNDA5Ngo+ICsjZGVmaW5lIE1VTFRJUEFHRV9CT19TSVpFIDIgKiBCT19TSVpFCj4gKyNk ZWZpbmUgU1RPUkVfQkFUQ0hfQlVGRkVSX1NJWkUgNAo+ICsjZGVmaW5lIEVYRUNfT0JKRUNUX1BJ Tk5FRAkoMTw8NCkKPiArI2RlZmluZSBFWEVDX09CSkVDVF9TVVBQT1JUU180OEJfQUREUkVTUyAo MTw8MykKPiArI2RlZmluZSBTSEFSRURfQlVGRkVSX1NJWkUgNDA5Ngo+ICsKPiArdHlwZWRlZiBz dHJ1Y3QgZHJtX2k5MTVfZ2VtX3VzZXJwdHIgaTkxNV9nZW1fdXNlcnB0cjsKPiArCj4gK3N0YXRp YyB1aW50MzJfdCBpbml0X3VzZXJwdHIoaW50IGZkLCBpOTE1X2dlbV91c2VycHRyICosIHZvaWQg KnB0ciwgdWludDY0X3Qgc2l6ZSk7Cj4gK3N0YXRpYyB2b2lkICpjcmVhdGVfbWVtX2J1ZmZlcih1 aW50NjRfdCBzaXplKTsKPiArc3RhdGljIGludCBnZW1fY2FsbF91c2VycHRyX2lvY3RsKGludCBm ZCwgaTkxNV9nZW1fdXNlcnB0ciAqdXNlcnB0cik7Cj4gK3N0YXRpYyB2b2lkIGdlbV9waW5fdXNl cnB0cl90ZXN0KHZvaWQpOwo+ICtzdGF0aWMgdm9pZCBnZW1fcGluX2JvX3Rlc3Qodm9pZCk7Cj4g K3N0YXRpYyB2b2lkIGdlbV9waW5faW52YWxpZF92bWFfdGVzdCh2b2lkKTsKPiArc3RhdGljIHZv aWQgZ2VtX3Bpbl9vdmVybGFwX3Rlc3Qodm9pZCk7Cj4gK3N0YXRpYyB2b2lkIGdlbV9waW5faGln aF9hZGRyZXNzX3Rlc3Qodm9pZCk7Cj4gKwo+ICsjZGVmaW5lIE5PX1BQR1RUIDAKPiArI2RlZmlu ZSBBTElBU0lOR19QUEdUVCAxCj4gKyNkZWZpbmUgRlVMTF8zMl9CSVRfUFBHVFQgMgo+ICsjZGVm aW5lIEZVTExfNDhfQklUX1BQR1RUIDMKPiArLyogdXNlc19mdWxsX3BwZ3R0Cj4gKyAqIEZpbmRz IHN1cHBvcnRlZCBQUEdUVCBkZXRhaWxzLgo+ICsgKiBAZmQgRFJNIGZkCj4gKyAqIEBtaW4gY2Fu IGJlCj4gKyAqIDAgLSBObyBQUEdUVAo+ICsgKiAxIC0gQWxpYXNpbmcgUFBHVFQKPiArICogMiAt IEZ1bGwgUFBHVFQgKDMyYikKPiArICogMyAtIEZ1bGwgUFBHVFQgKDQ4YikKPiArICogUkVUVVJO UyB0cnVlL2ZhbHNlIGlmIG1pbiBzdXBwb3J0IGlzIHByZXNlbnQKPiArKi8KPiArc3RhdGljIGJv b2wgdXNlc19mdWxsX3BwZ3R0KGludCBmZCwgaW50IG1pbikKPiArewo+ICsJc3RydWN0IGRybV9p OTE1X2dldHBhcmFtIGdwOwo+ICsJaW50IHZhbCA9IDA7Cj4gKwo+ICsJbWVtc2V0KCZncCwgMCwg c2l6ZW9mKGdwKSk7Cj4gKwlncC5wYXJhbSA9IDE4OyAvKiBIQVNfQUxJQVNJTkdfUFBHVFQgKi8K PiArCWdwLnZhbHVlID0gJnZhbDsKPiArCj4gKwlpZiAoZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9J OTE1X0dFVFBBUkFNLCAmZ3ApKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWVycm5vID0gMDsKPiAr CXJldHVybiB2YWwgPj0gbWluOwo+ICt9Cj4gKwo+ICsvKiBoYXNfc29mdHBpbl9zdXBwb3J0Cj4g KyAqIEZpbmRzIGlmIHNvZnRwaW4gZmVhdHVyZSBpcyBzdXBwb3J0ZWQKPiArICogQGZkIERSTSBm ZAo+ICsqLwo+ICtzdGF0aWMgYm9vbCBoYXNfc29mdHBpbl9zdXBwb3J0KGludCBmZCkKPiArewo+ ICsJc3RydWN0IGRybV9pOTE1X2dldHBhcmFtIGdwOwo+ICsJaW50IHZhbCA9IDA7Cj4gKwo+ICsJ bWVtc2V0KCZncCwgMCwgc2l6ZW9mKGdwKSk7Cj4gKwlncC5wYXJhbSA9IDM3OyAvKiBJOTE1X1BB UkFNX0hBU19FWEVDX1NPRlRQSU4gKi8KPiArCWdwLnZhbHVlID0gJnZhbDsKPiArCj4gKwlpZiAo ZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9JOTE1X0dFVFBBUkFNLCAmZ3ApKQo+ICsJCXJldHVybiAw Owo+ICsKPiArCWVycm5vID0gMDsKPiArCXJldHVybiAodmFsID09IDEpOwo+ICt9Cj4gKwo+ICsv KiBnZW1fY2FsbF91c2VycHRyX2lvY3RsCj4gKyAqIEhlbHBlciB0byBjYWxsIGlvY3RsIC0gVE9E TzogbW92ZSB0byBsaWIKPiArICogQGZkIC0gZHJtIGZkCj4gKyAqIEB1c2VycHRyIC0gcG9pbnRl ciB0byBpbml0aWFsaXNlZCB1c2VycHRyCj4gKyAqIFJFVFVSTlMgc3RhdHVzIG9mIGlvY3RsIGNh bGwKPiArKi8KPiArc3RhdGljIGludCBnZW1fY2FsbF91c2VycHRyX2lvY3RsKGludCBmZCwgaTkx NV9nZW1fdXNlcnB0ciAqdXNlcnB0cikKPiArewo+ICsJaW50IHJldDsKPiArCj4gKwlyZXQgPSBk cm1Jb2N0bChmZCwgRFJNX0lPQ1RMX0k5MTVfR0VNX1VTRVJQVFIsIHVzZXJwdHIpOwo+ICsKPiAr CWlmIChyZXQpCj4gKwkJcmV0ID0gZXJybm87Cj4gKwo+ICsJcmV0dXJuIHJldDsKPiArfQo+ICsK PiArLyogaW5pdF91c2VycHRyCj4gKyAqIEhlbHBlciB0aGF0IGluaXRzIHVzZXJwdHIgYW4gcmV0 dXJucyBoYW5kbGUKPiArICogQGZkIC0gZHJtIGZkCj4gKyAqIEB1c2VycHRyIC0gcG9pbnRlciB0 byBlbXB0eSB1c2VycHRyCj4gKyAqIEBwdHIgLSBidWZmZXIgdG8gYmUgc2hhcmVkCj4gKyAqIEBz aXplIC0gc2l6ZSBvZiBidWZmZXIKPiArICogQHJvIC0gcmVhZCBvbmx5IGZsYWcKPiArICogUkVU VVJOUyBoYW5kbGUgdG8gc2hhcmVkIGJ1ZmZlcgo+ICsqLwo+ICtzdGF0aWMgdWludDMyX3QgaW5p dF91c2VycHRyKGludCBmZCwgaTkxNV9nZW1fdXNlcnB0ciAqdXNlcnB0ciwgdm9pZCAqcHRyLAo+ ICsJCQkgICAgIHVpbnQ2NF90IHNpemUpCj4gK3sKPiArCWludCByZXQ7Cj4gKwo+ICsJbWVtc2V0 KCh2b2lkKil1c2VycHRyLCAwLCBzaXplb2YoaTkxNV9nZW1fdXNlcnB0cikpOwo+ICsKPiArCXVz ZXJwdHItPnVzZXJfcHRyID0gKHVpbnQ2NF90KXB0cjsgLyogTmVlZCB0aGUgY2FzdCB0byBvdmVy Y29tZSBjb21waWxlciB3YXJuaW5nICovCj4gKwl1c2VycHRyLT51c2VyX3NpemUgPSBzaXplOwo+ ICsJdXNlcnB0ci0+ZmxhZ3MgPSAwOyAvKiB1c2Ugc3luY2hyb25pemVkIG9wZXJhdGlvbiAqLwo+ ICsKPiArCXJldCA9IGdlbV9jYWxsX3VzZXJwdHJfaW9jdGwoZmQsIHVzZXJwdHIpOwo+ICsJaWd0 X2Fzc2VydF9lcShyZXQsIDApOwo+ICsKPiArCXJldHVybiB1c2VycHRyLT5oYW5kbGU7Cj4gK30K PiArCj4gKy8qIGNyZWF0ZV9tZW1fYnVmZmVyCj4gKyAqIENyZWF0ZXMgYSA0SyBhbGlnbmVkIENQ VSBidWZmZXIKPiArICogQHNpemUgLSBzaXplIG9mIGJ1ZmZlcgo+ICsgKiBSRVRVUk5TIHBvaW50 ZXIgdG8gYnVmZmVyIG9mIEBzaXplCj4gKyovCj4gK3N0YXRpYyB2b2lkICpjcmVhdGVfbWVtX2J1 ZmZlcih1aW50NjRfdCBzaXplKQo+ICt7Cj4gKwl2b2lkICphZGRyOwo+ICsJaW50IHJldDsKPiAr Cj4gKwlyZXQgPSBwb3NpeF9tZW1hbGlnbigmYWRkciwgNDA5Niwgc2l6ZSk7Cj4gKwlpZ3RfYXNz ZXJ0KHJldCA9PSAwKTsKPiArCj4gKwlyZXR1cm4gYWRkcjsKPiArfQo+ICsKPiArLyogc2V0dXBf ZXhlY19vYmoKPiArICogcG9wdWxhdGUgZXhlYyBvYmplY3QKPiArICogQGV4ZWMgLSBleGVjIG9i amVjdAo+ICsgKiBAaGFuZGxlIC0gaGFuZGxlIHRvIGdlbSBidWZmZXIKPiArICogQGZsYWdzIC0g YW55IGZsYWdzCj4gKyAqIEBvZmZzZXQgLSByZXF1ZXN0ZWQgVk1BCj4gKyovCj4gK3N0YXRpYyB2 b2lkIHNldHVwX2V4ZWNfb2JqKHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyICpleGVj LAo+ICsJCQkgICB1aW50MzJfdCBoYW5kbGUsIHVpbnQzMl90IGZsYWdzLAo+ICsJCQkgICB1aW50 NjRfdCBvZmZzZXQpCj4gK3sKPiArCW1lbXNldChleGVjLCAwLCBzaXplb2Yoc3RydWN0IGRybV9p OTE1X2dlbV9leGVjX29iamVjdDIpKTsKPiArCWV4ZWMtPmhhbmRsZSA9IGhhbmRsZTsKPiArCWV4 ZWMtPmZsYWdzID0gZmxhZ3M7Cj4gKwlleGVjLT5vZmZzZXQgPSBvZmZzZXQ7Cj4gK30KPiArCj4g Ky8qIGdlbV9zdG9yZV9kYXRhX3N2bQo+ICsgKiBwb3B1bGF0ZSBiYXRjaCBidWZmZXIgd2l0aCBN SV9TVE9SRV9EV09SRF9JTU0gY29tbWFuZAo+ICsgKiBAZmQ6IGRybSBmaWxlIGRlc2NyaXB0b3IK PiArICogQGNtZF9idWY6IGJhdGNoIGJ1ZmZlcgo+ICsgKiBAdmFkZHI6IGRlc3RpbmF0aW9uIFZp cnR1YWwgYWRkcmVzcwo+ICsgKiBAZGF0YTogZGF0YSB0byBiZSBzdG9yZSBhdCBkZXN0aW5hdGlv bgo+ICsgKiBAZW5kOiB3aGV0aGVyIHRvIGVuZCBiYXRjaCBidWZmZXIgb3Igbm90Cj4gKyovCj4g K3N0YXRpYyBpbnQgZ2VtX3N0b3JlX2RhdGFfc3ZtKGludCBmZCwgdWludDMyX3QgKmNtZF9idWYs IHVpbnQ2NF90IHZhZGRyLAo+ICsJCQkgICAgICB1aW50MzJfdCBkYXRhLCBib29sIGVuZCkKPiAr ewo+ICsJaW50IGkgPSAwOwo+ICsKPiArCWNtZF9idWZbaSsrXSA9IE1JX1NUT1JFX0RXT1JEX0lN TTsKPiArCWNtZF9idWZbaSsrXSA9IHZhZGRyICYgMHhGRkZGRkZGQzsKPiArCWNtZF9idWZbaSsr XSA9ICh2YWRkciA+PiAzMikgJiAweEZGRkY7IC8qIGJpdHMgMzI6NDcgKi8KPiArCj4gKwljbWRf YnVmW2krK10gPSBkYXRhOwo+ICsJaWYgKGVuZCkgewo+ICsJCWNtZF9idWZbaSsrXSA9IE1JX0JB VENIX0JVRkZFUl9FTkQ7Cj4gKwkJY21kX2J1ZltpKytdID0gMDsKPiArCX0KPiArCj4gKwlyZXR1 cm4oaSAqIHNpemVvZih1aW50MzJfdCkpOwo+ICt9Cj4gKwo+ICsvKiBnZW1fc3RvcmVfZGF0YQo+ ICsgKiBwb3B1bGF0ZSBiYXRjaCBidWZmZXIgd2l0aCBNSV9TVE9SRV9EV09SRF9JTU0gY29tbWFu ZAo+ICsgKiBUaGlzIG9uZSBmaWxscyB1cCByZWxvYyBidWZmZXIgYXMgd2VsbAo+ICsgKiBAZmQ6 IGRybSBmaWxlIGRlc2NyaXB0b3IKPiArICogQGNtZF9idWY6IGJhdGNoIGJ1ZmZlcgo+ICsgKiBA ZGF0YTogZGF0YSB0byBiZSBzdG9yZSBhdCBkZXN0aW5hdGlvbgo+ICsgKiBAcmVsb2MgLSByZWxv Y2F0aW9uIGVudHJ5Cj4gKyAqIEBlbmQ6IHdoZXRoZXIgdG8gZW5kIGJhdGNoIGJ1ZmZlciBvciBu b3QKPiArKi8KPiArc3RhdGljIGludCBnZW1fc3RvcmVfZGF0YShpbnQgZmQsIHVpbnQzMl90ICpj bWRfYnVmLAo+ICsJCQkgIHVpbnQzMl90IGhhbmRsZSwgdWludDMyX3QgZGF0YSwKPiArCQkJICBz dHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKnJlbG9jLAo+ICsJCQkgIGJvb2wg ZW5kKQo+ICt7Cj4gKwlpbnQgaSA9IDA7Cj4gKwo+ICsJY21kX2J1ZltpKytdID0gTUlfU1RPUkVf RFdPUkRfSU1NOwo+ICsJY21kX2J1ZltpKytdID0gMDsgLyogbG93ZXIgMzEgYml0cyBvZiA0OCBi aXQgYWRkcmVzcyAtIDAgcmVsb2MgbmVlZGVkICovCj4gKwljbWRfYnVmW2krK10gPSAwOyAvKiB1 cHBlciAxNSBiaXRzIG9mIDQ4IGJpdCBhZGRyZXNzIC0gMCByZWxvYyBuZWVkZWQgKi8KPiArCXJl bG9jLT5vZmZzZXQgPSAxICogc2l6ZW9mKHVpbnQzMl90KTsKPiArCXJlbG9jLT5kZWx0YSA9IDA7 Cj4gKwlyZWxvYy0+dGFyZ2V0X2hhbmRsZSA9IGhhbmRsZTsKPiArCXJlbG9jLT5yZWFkX2RvbWFp bnMgPSBJOTE1X0dFTV9ET01BSU5fUkVOREVSOwo+ICsJcmVsb2MtPndyaXRlX2RvbWFpbiA9IEk5 MTVfR0VNX0RPTUFJTl9SRU5ERVI7Cj4gKwlyZWxvYy0+cHJlc3VtZWRfb2Zmc2V0ID0gMDsKPiAr CWNtZF9idWZbaSsrXSA9IGRhdGE7Cj4gKwlpZiAoZW5kKSB7Cj4gKwkJY21kX2J1ZltpKytdID0g TUlfQkFUQ0hfQlVGRkVSX0VORDsKPiArCQljbWRfYnVmW2krK10gPSAwOwo+ICsJfQo+ICsKPiAr CXJldHVybiAoaSAqIHNpemVvZih1aW50MzJfdCkpOwo+ICt9Cj4gKwo+ICsvKiBzZXR1cF9leGVj YnVmZmVyCj4gKyAqIGhlbHBlciBmb3IgYnVmZmVyIGV4ZWN1dGlvbgo+ICsgKiBAZXhlY2J1ZiAt IHBvaW50ZXIgdG8gZXhlY2J1ZmZlcgo+ICsgKiBAZXhlY19vYmplY3QgLSBwb2ludGVyIHRvIGV4 ZWMgb2JqZWN0MiBzdHJ1Y3QKPiArICogQHJpbmcgLSByaW5nIHRvIGJlIHVzZWQKPiArICogQGJ1 ZmZlcl9jb3VudCAtIGhvdyBtYW51IGJ1ZmZlcnMgdG8gc3VibWl0Cj4gKyAqIEBiYXRjaF9sZW5n dGggLSBsZW5ndGggb2YgYmF0Y2ggYnVmZmVyCj4gKyovCj4gK3N0YXRpYyB2b2lkIHNldHVwX2V4 ZWNidWZmZXIoc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiAqZXhlY2J1ZiwKPiArCQkJ ICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZXhlY19vYmplY3QsCj4gKwkJ CSAgICAgaW50IHJpbmcsIGludCBidWZmZXJfY291bnQsIGludCBiYXRjaF9sZW5ndGgpCj4gK3sK PiArCWV4ZWNidWYtPmJ1ZmZlcnNfcHRyID0gKHVpbnQ2NF90KWV4ZWNfb2JqZWN0Owo+ICsJZXhl Y2J1Zi0+YnVmZmVyX2NvdW50ID0gYnVmZmVyX2NvdW50Owo+ICsJZXhlY2J1Zi0+YmF0Y2hfc3Rh cnRfb2Zmc2V0ID0gMDsKPiArCWV4ZWNidWYtPmJhdGNoX2xlbiA9IGJhdGNoX2xlbmd0aDsKPiAr CWV4ZWNidWYtPmNsaXByZWN0c19wdHIgPSAwOwo+ICsJZXhlY2J1Zi0+bnVtX2NsaXByZWN0cyA9 IDA7Cj4gKwlleGVjYnVmLT5EUjEgPSAwOwo+ICsJZXhlY2J1Zi0+RFI0ID0gMDsKPiArCWV4ZWNi dWYtPmZsYWdzID0gcmluZzsKPiArCWk5MTVfZXhlY2J1ZmZlcjJfc2V0X2NvbnRleHRfaWQoKmV4 ZWNidWYsIDApOwo+ICsJZXhlY2J1Zi0+cnN2ZDIgPSAwOwo+ICt9Cj4gKwo+ICsvKiBzdWJtaXRf YW5kX3N5bmMKPiArICogSGVscGVyIGZ1bmN0aW9uIGZvciBleGVjIGFuZCBzeW5jIGZ1bmN0aW9u cwo+ICsgKiBAZmQgLSBkcm0gZmQKPiArICogQGV4ZWNidWYgLSBwb2ludGVyIHRvIGV4ZWNidWZm ZXIKPiArICogQGJhdGNoX2J1Zl9oYW5kbGUgLSBiYXRjaCBidWZmZXIgaGFuZGxlCj4gKyovCj4g K3N0YXRpYyB2b2lkIHN1Ym1pdF9hbmRfc3luYyhpbnQgZmQsIHN0cnVjdCBkcm1faTkxNV9nZW1f ZXhlY2J1ZmZlcjIgKmV4ZWNidWYsCj4gKwkJCSAgICB1aW50MzJfdCBiYXRjaF9idWZfaGFuZGxl KQo+ICt7Cj4gKwlnZW1fZXhlY2J1ZihmZCwgZXhlY2J1Zik7Cj4gKwlnZW1fc3luYyhmZCwgYmF0 Y2hfYnVmX2hhbmRsZSk7Cj4gK30KPiArCj4gKy8qIGdlbV91c2VycHRyX3N5bmMKPiArICogaGVs cGVyIGZvciBzeW5jaW5nIHRvIENQVSBkb21haW4gLSBjb3B5L3Bhc3RlIGZyb20gdXNlcmJsaXQK PiArICogQGZkIC0gZHJtIGZkCj4gKyAqIEBoYW5kbGUgLSBidWZmZXIgaGFuZGxlIHRvIHN5bmMK PiArKi8KPiArc3RhdGljIHZvaWQgZ2VtX3VzZXJwdHJfc3luYyhpbnQgZmQsIHVpbnQzMl90IGhh bmRsZSkKPiArewo+ICsJZ2VtX3NldF9kb21haW4oZmQsIGhhbmRsZSwgSTkxNV9HRU1fRE9NQUlO X0NQVSwgSTkxNV9HRU1fRE9NQUlOX0NQVSk7Cj4gK30KPiArCj4gKwo+ICsvKiBnZW1fcGluX3Vz ZXJwdHJfdGVzdAo+ICsgKiBUaGlzIHRlc3Qgd2lsbCBjcmVhdGUgYSBzaGFyZWQgYnVmZmVyLCBh bmQgY3JlYXRlIGEgY29tbWFuZAo+ICsgKiBmb3IgR1BVIHRvIHdyaXRlIGRhdGEgaW4gaXQKPiAr ICogQ1BVIHdpbGwgcmVhZCBhbmQgbWFrZSBzdXJlIGV4cGVjdGVkIHZhbHVlIGlzIG9idGFpbmVk Cj4gKyAqIE1hbGxvYyBhIDRLIGJ1ZmZlcgo+ICsgKiBTaGFyZSBidWZmZXIgd2l0aCB3aXRoIEdQ VSBieSB1c2luZyB1c2VycHRyIGlvY3RsCj4gKyAqIENyZWF0ZSBiYXRjaCBidWZmZXIgdG8gd3Jp dGUgREFUQSB0byBmaXJzdCBkd29yZCBvZiBidWZmZXIKPiArICogVXNlIDB4MTAwMCBhZGRyZXNz IGFzIGRlc3RpbmF0aW9uIGFkZHJlc3MgaW4gYmF0Y2ggYnVmZmVyCj4gKyAqIFNldCBFWEVDX09C SkVDVF9QSU5ORUQgZmxhZyBpbiBleGVjIG9iamVjdAo+ICsgKiBTZXQgJ29mZnNldCcgaW4gZXhl YyBvYmplY3QgdG8gMHgxMDAwCj4gKyAqIFN1Ym1pdCBleGVjYnVmZmVyCj4gKyAqIFZlcmlmeSB2 YWx1ZSBvZiBmaXJzdCBEV09SRCBpbiBzaGFyZWQgYnVmZmVyIG1hdGNoZXMgREFUQQo+ICsqLwo+ ICtzdGF0aWMgdm9pZCBnZW1fcGluX3VzZXJwdHJfdGVzdCh2b2lkKQo+ICt7Cj4gKwlpOTE1X2dl bV91c2VycHRyIHVzZXJwdHI7Cj4gKwlpbnQgZmQ7Cj4gKwl1aW50MzJfdCAqc2hhcmVkX2J1ZmZl cjsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKPiArCXN0cnVj dCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIGV4ZWNfb2JqZWN0MlsyXTsKPiArCXVpbnQzMl90 IGJhdGNoX2J1ZmZlcltTVE9SRV9CQVRDSF9CVUZGRVJfU0laRSArIDJdOwo+ICsJdWludDMyX3Qg YmF0Y2hfYnVmX2hhbmRsZSwgc2hhcmVkX2J1Zl9oYW5kbGU7Cj4gKwlpbnQgcmluZywgbGVuOwo+ ICsJY29uc3QgdWludDMyX3QgZGF0YSA9IDB4MTIzNDU2Nzg7Cj4gKwl1aW50NjRfdCBwaW5uaW5n X29mZnNldCA9IDB4MTAwMDsKPiArCj4gKwlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5U RUwpOwo+ICsJaWd0X3JlcXVpcmUodXNlc19mdWxsX3BwZ3R0KGZkLCBBTElBU0lOR19QUEdUVCkp Owo+ICsJaWd0X3JlcXVpcmUoaGFzX3NvZnRwaW5fc3VwcG9ydChmZCkpOwo+ICsJYmF0Y2hfYnVm X2hhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUpOwo+ICsKPiArCS8qIGNyZWF0ZSBjcHUg YnVmZmVyICovCj4gKwlzaGFyZWRfYnVmZmVyID0gY3JlYXRlX21lbV9idWZmZXIoQk9fU0laRSk7 Cj4gKwo+ICsJLyogc2hhcmUgd2l0aCBHUFUgKi8KPiArCXNoYXJlZF9idWZfaGFuZGxlID0gaW5p dF91c2VycHRyKGZkLCAmdXNlcnB0ciwgc2hhcmVkX2J1ZmZlciwKPiArCQkJCQkgQk9fU0laRSk7 Cj4gKwo+ICsJLyogY3JlYXRlIGNvbW1hbmQgYnVmZmVyIHdpdGggd3JpdGUgY29tbWFuZCAqLwo+ ICsJbGVuID0gZ2VtX3N0b3JlX2RhdGFfc3ZtKGZkLCBiYXRjaF9idWZmZXIsIHBpbm5pbmdfb2Zm c2V0LCBkYXRhLCB0cnVlKTsKPiArCWdlbV93cml0ZShmZCwgYmF0Y2hfYnVmX2hhbmRsZSwgMCwg YmF0Y2hfYnVmZmVyLCBsZW4pOwo+ICsKPiArCS8qIHN1Ym1pdCBjb21tYW5kIGJ1ZmZlciAqLwo+ ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlswXSwgc2hhcmVkX2J1Zl9oYW5kbGUsCj4g KwkJICAgICAgIEVYRUNfT0JKRUNUX1BJTk5FRCwgcGlubmluZ19vZmZzZXQpOwo+ICsJc2V0dXBf ZXhlY19vYmooJmV4ZWNfb2JqZWN0MlsxXSwgYmF0Y2hfYnVmX2hhbmRsZSwgMCwgMCk7Cj4gKwo+ ICsJcmluZyA9IEk5MTVfRVhFQ19SRU5ERVI7Cj4gKwo+ICsJc2V0dXBfZXhlY2J1ZmZlcigmZXhl Y2J1ZiwgZXhlY19vYmplY3QyLCByaW5nLCAyLCBsZW4pOwo+ICsJc3VibWl0X2FuZF9zeW5jKGZk LCAmZXhlY2J1ZiwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwlnZW1fdXNlcnB0cl9zeW5jKGZkLCBz aGFyZWRfYnVmX2hhbmRsZSk7Cj4gKwo+ICsJLyogQ2hlY2sgaWYgZHJpdmVyIHBpbm5lZCB0aGUg YnVmZmVyIGFzIHJlcXVlc3RlZCAqLwo+ICsJaWd0X2ZhaWxfb25fZihleGVjX29iamVjdDJbMF0u b2Zmc2V0ICE9IHBpbm5pbmdfb2Zmc2V0LAo+ICsJCQkiXG5GYWlsZWQgdG8gcGluIGF0IHJlcXVl c3RlZCBvZmZzZXQiKTsKPiArCS8qIGNoZWNrIG9uIENQVSB0byBzZWUgaWYgdmFsdWUgY2hhbmdl cyAqLwo+ICsJaWd0X2ZhaWxfb25fZihzaGFyZWRfYnVmZmVyWzBdICE9IGRhdGEsCj4gKwkJICAg ICAgIlxuQ1BVIHJlYWQgZG9lcyBub3QgbWF0Y2ggR1BVIHdyaXRlLFwKPiArCQkJZXhwZWN0ZWQ6 IDB4JXgsIGdvdDogMHgleFxuIiwKPiArCQkJZGF0YSwgc2hhcmVkX2J1ZmZlclswXSk7Cj4gKwo+ ICsJZ2VtX2Nsb3NlKGZkLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCWdlbV9jbG9zZShmZCwgc2hh cmVkX2J1Zl9oYW5kbGUpOwo+ICsJY2xvc2UoZmQpOwo+ICsJZnJlZShzaGFyZWRfYnVmZmVyKTsK PiArfQo+ICsKPiArLyogZ2VtX3Bpbl9ibwo+ICsgKiBUaGlzIHRlc3Qgd2lsbCB0ZXN0IHNvZnRw aW5uaW5nIG9mIGEgZ2VtIGJ1ZmZlciBvYmplY3QKPiArICogTWFsbG9jIGEgNEsgYnVmZmVyCj4g KyAqIENyZWF0ZSBiYXRjaCBidWZmZXIgdG8gd3JpdGUgREFUQSB0byBmaXJzdCBkd29yZCBvZiBi dWZmZXIKPiArICogVXNlIDB4MTAwMCBhZGRyZXNzIGFzIGRlc3RpbmF0aW9uIGFkZHJlc3MgaW4g YmF0Y2ggYnVmZmVyCj4gKyAqIFNldCBFWEVDX09CSkVDVF9QSU5ORUQgZmxhZyBpbiBleGVjIG9i amVjdAo+ICsgKiBTZXQgJ29mZnNldCcgaW4gZXhlYyBvYmplY3QgdG8gMHgxMDAwCj4gKyAqIFN1 Ym1pdCBleGVjYnVmZmVyCj4gKyAqIFZlcmlmeSB2YWx1ZSBwaW5uZWQgb2Zmc2V0IG1hdGNoZXMg dGhlIHJlcXVlc3QKPiArKi8KPiArc3RhdGljIHZvaWQgZ2VtX3Bpbl9ib190ZXN0KHZvaWQpCj4g K3sKPiArCWludCBmZDsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1 ZjsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIGV4ZWNfb2JqZWN0MlsyXTsK PiArCXVpbnQzMl90IGJhdGNoX2J1ZmZlcltTVE9SRV9CQVRDSF9CVUZGRVJfU0laRSArIDJdOwo+ ICsJdWludDMyX3QgYmF0Y2hfYnVmX2hhbmRsZSwgdW5zaGFyZWRfYnVmX2hhbmRsZTsKPiArCXN0 cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSByZWxvY1s0XTsKPiArCWludCByaW5n LCBsZW47Cj4gKwl1aW50MzJfdCB2YWx1ZTsKPiArCWNvbnN0IHVpbnQzMl90IGRhdGEgPSAweDEy MzQ1Njc4Owo+ICsJdWludDY0X3QgcGlubmluZ19vZmZzZXQgPSAweDEwMDA7Cj4gKwo+ICsJZmQg PSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKPiArCWlndF9yZXF1aXJlKHVzZXNfZnVs bF9wcGd0dChmZCwgQUxJQVNJTkdfUFBHVFQpKTsKPiArCWlndF9yZXF1aXJlKGhhc19zb2Z0cGlu X3N1cHBvcnQoZmQpKTsKPiArCj4gKwliYXRjaF9idWZfaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwg Qk9fU0laRSk7Cj4gKwo+ICsJLyogY3JlYXRlIGdlbSBidWZmZXIgKi8KPiArCXVuc2hhcmVkX2J1 Zl9oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCBCT19TSVpFKTsKPiArCj4gKwkvKiBjcmVhdGUgY29t bWFuZCBidWZmZXIgd2l0aCB3cml0ZSBjb21tYW5kICovCj4gKwlsZW4gPSBnZW1fc3RvcmVfZGF0 YShmZCwgYmF0Y2hfYnVmZmVyLCB1bnNoYXJlZF9idWZfaGFuZGxlLCBkYXRhLAo+ICsJCQkJcmVs b2MsIHRydWUpOwo+ICsJZ2VtX3dyaXRlKGZkLCBiYXRjaF9idWZfaGFuZGxlLCAwLCBiYXRjaF9i dWZmZXIsIGxlbik7Cj4gKwo+ICsJLyogc3VibWl0IGNvbW1hbmQgYnVmZmVyICovCj4gKwlzZXR1 cF9leGVjX29iaigmZXhlY19vYmplY3QyWzBdLCB1bnNoYXJlZF9idWZfaGFuZGxlLAo+ICsJCSAg ICAgICBFWEVDX09CSkVDVF9QSU5ORUQsIHBpbm5pbmdfb2Zmc2V0KTsKPiArCXNldHVwX2V4ZWNf b2JqKCZleGVjX29iamVjdDJbMV0sIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIDApOwo+ICsJZXhlY19v YmplY3QyWzFdLnJlbG9jYXRpb25fY291bnQgPSAxOwo+ICsJZXhlY19vYmplY3QyWzFdLnJlbG9j c19wdHIgPSAodWludDY0X3QpcmVsb2M7Cj4gKwo+ICsJcmluZyA9IEk5MTVfRVhFQ19SRU5ERVI7 Cj4gKwo+ICsJc2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmplY3QyLCByaW5nLCAy LCBsZW4pOwo+ICsJc3VibWl0X2FuZF9zeW5jKGZkLCAmZXhlY2J1ZiwgYmF0Y2hfYnVmX2hhbmRs ZSk7Cj4gKwo+ICsJLyogQ2hlY2sgaWYgZHJpdmVyIHBpbm5lZCB0aGUgYnVmZmVyIGFzIHJlcXVl c3RlZCAqLwo+ICsJaWd0X2ZhaWxfb25fZihleGVjX29iamVjdDJbMF0ub2Zmc2V0ICE9IHBpbm5p bmdfb2Zmc2V0LAo+ICsJCQkiXG5GYWlsZWQgdG8gcGluIGF0IHJlcXVlc3RlZCBvZmZzZXQiKTsK PiArCWdlbV9yZWFkKGZkLCB1bnNoYXJlZF9idWZfaGFuZGxlLCAwLCAodm9pZCopJnZhbHVlLCA0 KTsKPiArCWlndF9hc3NlcnQodmFsdWUgPT0gZGF0YSk7Cj4gKwo+ICsJZ2VtX2Nsb3NlKGZkLCBi YXRjaF9idWZfaGFuZGxlKTsKPiArCWdlbV9jbG9zZShmZCwgdW5zaGFyZWRfYnVmX2hhbmRsZSk7 Cj4gKwljbG9zZShmZCk7Cj4gK30KPiArCj4gKwo+ICsvKiBnZW1fbXVsdGlwbGVfcHJvY2Vzc190 ZXN0Cj4gKyAqIFJ1biBiYXNpYyB0ZXN0IHNpbXVsdGFuZW91c2x5IHdpdGggbXVsdGlwbGUgcHJv Y2Vzc2VzCj4gKyAqIFRoaXMgd2lsbCB0ZXN0IHBpbm5pbmcgc2FtZSBWQSBzZXBhcmF0ZWx5IGlu IGVhY2ggcHJvY2Vzcwo+ICsKPiArICogZm9yaygpOwo+ICsgKiBFeGVjdXRlIGJhc2ljIHRlc3Qg aW4gcGFyZW50L2NoaWxkIHByb2Nlc3Nlcwo+ICsqLwo+ICsjZGVmaW5lIE1BWF9OVU1fUFJPQ0VT U0VTIDEwCj4gKwo+ICtzdGF0aWMgdm9pZCBnZW1fbXVsdGlwbGVfcHJvY2Vzc190ZXN0KHZvaWQp Cj4gK3sKPiArCWludCBmZDsKPiArCj4gKwlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5U RUwpOwo+ICsJaWd0X3JlcXVpcmUodXNlc19mdWxsX3BwZ3R0KGZkLCBBTElBU0lOR19QUEdUVCkp Owo+ICsJaWd0X3JlcXVpcmUoaGFzX3NvZnRwaW5fc3VwcG9ydChmZCkpOwo+ICsKPiArCWlndF9m b3JrKGNoaWxkLCBNQVhfTlVNX1BST0NFU1NFUykgewo+ICsJCWdlbV9waW5fdXNlcnB0cl90ZXN0 KCk7Cj4gKwl9Cj4gKwlpZ3Rfd2FpdGNoaWxkcmVuKCk7Cj4gKwo+ICsJY2xvc2UoZmQpOwo+ICt9 Cj4gKwo+ICsKPiArLyogZ2VtX3JlcGluX3Rlc3QKPiArICogVGhpcyB0ZXN0IHRyaWVzIHRvIHJl cGluIGEgYnVmZmVyIGF0IGEgcHJldmlvdXNseSBwaW5uZWQgdm1hCj4gKyAqIGZyb20gYSBkaWZm ZXJlbnQgZXhlY2J1Zi4KPiArICogTWFsbG9jIGEgNEsgYnVmZmVyCj4gKyAqIFNoYXJlIGJ1ZmZl ciB3aXRoIHdpdGggR1BVIGJ5IHVzaW5nIHVzZXJwdHIgaW9jdGwKPiArICogQ3JlYXRlIGJhdGNo IGJ1ZmZlciB0byB3cml0ZSBEQVRBIHRvIGZpcnN0IGR3b3JkIG9mIGJ1ZmZlcgo+ICsgKiBVc2Ug MHgxMDAwIGFkZHJlc3MgYXMgZGVzdGluYXRpb24gYWRkcmVzcyBpbiBiYXRjaCBidWZmZXIKPiAr ICogU2V0IEVYRUNfT0JKRUNUX1BJTk5FRCBmbGFnIGluIGV4ZWMgb2JqZWN0Cj4gKyAqIFNldCAn b2Zmc2V0JyBpbiBleGVjIG9iamVjdCB0byAweDEwMDAgVk1BCj4gKyAqIFN1Ym1pdCBleGVjYnVm ZmVyCj4gKyAqIFZlcmlmeSB2YWx1ZSBvZiBmaXJzdCBEV09SRCBpbiBzaGFyZWQgYnVmZmVyIG1h dGNoZXMgREFUQQo+ICsKPiArICogQ3JlYXRlIHNlY29uZCBzaGFyZWQgYnVmZmVyCj4gKyAqIEZv bGxvdyBhbGwgc3RlcHMgYWJvdmUKPiArICogRXhlY3B0LCBmb3Igb2Zmc2V0LCB1c2UgVk1BIG9m IGZpcnN0IGJ1ZmZlciBhYm92ZQo+ICsgKiBTdWJtaXQgZXhlY2J1ZmZlcgo+ICsgKiBWZXJpZnkg dmFsdWUgb2YgZmlyc3QgRFdPUkQgaW4gc2Vjb25kIHNoYXJlZCBidWZmZXIgbWF0Y2hlcyBEQVRB Cj4gKyovCj4gK3N0YXRpYyB2b2lkIGdlbV9yZXBpbl90ZXN0KHZvaWQpCj4gK3sKPiArCWk5MTVf Z2VtX3VzZXJwdHIgdXNlcnB0cjsKPiArCWk5MTVfZ2VtX3VzZXJwdHIgdXNlcnB0cjE7Cj4gKwlp bnQgZmQ7Cj4gKwl1aW50MzJfdCAqc2hhcmVkX2J1ZmZlcjsKPiArCXVpbnQzMl90ICpzaGFyZWRf YnVmZmVyMTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKPiAr CXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIGV4ZWNfb2JqZWN0MlsyXTsKPiArCXVp bnQzMl90IGJhdGNoX2J1ZmZlcltTVE9SRV9CQVRDSF9CVUZGRVJfU0laRSArIDJdOwo+ICsJdWlu dDMyX3QgYmF0Y2hfYnVmX2hhbmRsZSwgc2hhcmVkX2J1Zl9oYW5kbGUsIHNoYXJlZF9idWZfaGFu ZGxlMTsKPiArCWludCByaW5nLCBsZW47Cj4gKwljb25zdCB1aW50MzJfdCBkYXRhID0gMHgxMjM0 NTY3ODsKPiArCXVpbnQ2NF90IHBpbm5pbmdfb2Zmc2V0ID0gMHgxMDAwOwo+ICsKPiArCS8qIENy ZWF0ZSBnZW0gb2JqZWN0ICovCj4gKwlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5URUwp Owo+ICsJaWd0X3JlcXVpcmUodXNlc19mdWxsX3BwZ3R0KGZkLCBBTElBU0lOR19QUEdUVCkpOwo+ ICsJaWd0X3JlcXVpcmUoaGFzX3NvZnRwaW5fc3VwcG9ydChmZCkpOwo+ICsKPiArCWJhdGNoX2J1 Zl9oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCBCT19TSVpFKTsKPiArCj4gKwkvKiBjcmVhdGUgY3B1 IGJ1ZmZlciwgc2V0IGZpcnN0IGVsZW1lbnRzIHRvIDB4MCAqLwo+ICsJc2hhcmVkX2J1ZmZlciA9 IGNyZWF0ZV9tZW1fYnVmZmVyKEJPX1NJWkUpOwo+ICsJc2hhcmVkX2J1ZmZlcjEgPSBjcmVhdGVf bWVtX2J1ZmZlcihCT19TSVpFKTsKPiArCXNoYXJlZF9idWZmZXJbMF0gPSAweDA7Cj4gKwlzaGFy ZWRfYnVmZmVyMVswXSA9IDB4MDsKPiArCj4gKwkvKiBzaGFyZSB3aXRoIEdQVSBhbmQgZ2V0IGhh bmRsZXMgKi8KPiArCXNoYXJlZF9idWZfaGFuZGxlID0gaW5pdF91c2VycHRyKGZkLCAmdXNlcnB0 ciwgc2hhcmVkX2J1ZmZlciwKPiArCQkJCQkgQk9fU0laRSk7Cj4gKwlzaGFyZWRfYnVmX2hhbmRs ZTEgPSBpbml0X3VzZXJwdHIoZmQsICZ1c2VycHRyMSwgc2hhcmVkX2J1ZmZlcjEsCj4gKwkJCQkJ ICBCT19TSVpFKTsKPiArCj4gKwkvKiBjcmVhdGUgY29tbWFuZCBidWZmZXIgd2l0aCB3cml0ZSBj b21tYW5kICovCj4gKwlsZW4gPSBnZW1fc3RvcmVfZGF0YV9zdm0oZmQsIGJhdGNoX2J1ZmZlciwg cGlubmluZ19vZmZzZXQsIGRhdGEsIHRydWUpOwo+ICsJZ2VtX3dyaXRlKGZkLCBiYXRjaF9idWZf aGFuZGxlLCAwLCBiYXRjaF9idWZmZXIsIGxlbik7Cj4gKwo+ICsJLyogc3VibWl0IGNvbW1hbmQg YnVmZmVyICovCj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzBdLCBzaGFyZWRfYnVm X2hhbmRsZSwKPiArCQkgICAgICAgRVhFQ19PQkpFQ1RfUElOTkVELCBwaW5uaW5nX29mZnNldCk7 Cj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzFdLCBiYXRjaF9idWZfaGFuZGxlLCAw LCAwKTsKPiArCj4gKwlyaW5nID0gSTkxNV9FWEVDX1JFTkRFUjsKPiArCj4gKwlzZXR1cF9leGVj YnVmZmVyKCZleGVjYnVmLCBleGVjX29iamVjdDIsIHJpbmcsIDIsIGxlbik7Cj4gKwlzdWJtaXRf YW5kX3N5bmMoZmQsICZleGVjYnVmLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCWdlbV91c2VycHRy X3N5bmMoZmQsIHNoYXJlZF9idWZfaGFuZGxlKTsKPiArCj4gKwlpZ3RfYXNzZXJ0KGV4ZWNfb2Jq ZWN0MlswXS5vZmZzZXQgPT0gcGlubmluZ19vZmZzZXQpOwo+ICsJaWd0X2Fzc2VydCgqc2hhcmVk X2J1ZmZlciA9PSBkYXRhKTsKPiArCj4gKwkvKiBTZWNvbmQgYnVmZmVyICovCj4gKwkvKiBjcmVh dGUgY29tbWFuZCBidWZmZXIgd2l0aCB3cml0ZSBjb21tYW5kICovCj4gKwlwaW5uaW5nX29mZnNl dCA9IGV4ZWNfb2JqZWN0MlswXS5vZmZzZXQ7Cj4gKwlsZW4gPSBnZW1fc3RvcmVfZGF0YV9zdm0o ZmQsIGJhdGNoX2J1ZmZlciwgcGlubmluZ19vZmZzZXQsIGRhdGEsIHRydWUpOwo+ICsJZ2VtX3dy aXRlKGZkLCBiYXRjaF9idWZfaGFuZGxlLCAwLCBiYXRjaF9idWZmZXIsIGxlbik7Cj4gKwo+ICsJ Lyogc3VibWl0IGNvbW1hbmQgYnVmZmVyICovCj4gKwkvKiBQaW4gYXQgc2hhcmVkX2J1ZmZlciwg bm90IHNoYXJlZF9idWZmZXIxICovCj4gKwkvKiBXZSBhcmUgcmVxdWVzdGluZyBhZGRyZXNzIHdo ZXJlIGFub3RoZXIgYnVmZmVyIHdhcyBwaW5uZWQgcHJldmlvdXNseSAqLwo+ICsJc2V0dXBfZXhl Y19vYmooJmV4ZWNfb2JqZWN0MlswXSwgc2hhcmVkX2J1Zl9oYW5kbGUxLAo+ICsJCSAgICAgICBF WEVDX09CSkVDVF9QSU5ORUQsIHBpbm5pbmdfb2Zmc2V0KTsKPiArCXNldHVwX2V4ZWNfb2JqKCZl eGVjX29iamVjdDJbMV0sIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIDApOwo+ICsKPiArCXJpbmcgPSBJ OTE1X0VYRUNfUkVOREVSOwo+ICsKPiArCXNldHVwX2V4ZWNidWZmZXIoJmV4ZWNidWYsIGV4ZWNf b2JqZWN0MiwgcmluZywgMiwgbGVuKTsKPiArCXN1Ym1pdF9hbmRfc3luYyhmZCwgJmV4ZWNidWYs IGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJZ2VtX3VzZXJwdHJfc3luYyhmZCwgc2hhcmVkX2J1Zl9o YW5kbGUxKTsKPiArCj4gKwlpZ3RfYXNzZXJ0KGV4ZWNfb2JqZWN0MlswXS5vZmZzZXQgPT0gcGlu bmluZ19vZmZzZXQpOwo+ICsJaWd0X2Fzc2VydCgqc2hhcmVkX2J1ZmZlcjEgPT0gZGF0YSk7Cj4g Kwo+ICsJZ2VtX2Nsb3NlKGZkLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCWdlbV9jbG9zZShmZCwg c2hhcmVkX2J1Zl9oYW5kbGUpOwo+ICsJY2xvc2UoZmQpOwo+ICsKPiArCWZyZWUoc2hhcmVkX2J1 ZmZlcik7Cj4gKwlmcmVlKHNoYXJlZF9idWZmZXIxKTsKPiArfQo+ICsKPiArCj4gKy8qIGdlbV9y ZXBpbl9vdmVybGFwX3Rlc3QKPiArICogVGhpcyB0ZXN0IHdpbGwgYXR0ZW1wdCB0byBwaW4gdHdv IGJ1ZmZlcnMgYXQgdGhlIHNhbWUgVk1BIGFzIHBhcnQgb2YgdGhlIHNhbWUKPiArICAgZXhlY2J1 ZmZlciBvYmplY3QKPiArCj4gKyAqIE1hbGxvYyBhIDRLIGJ1ZmZlcgo+ICsgKiBTaGFyZSBidWZm ZXIgd2l0aCB3aXRoIEdQVSBieSB1c2luZyB1c2VycHRyIGlvY3RsCj4gKyAqIENyZWF0ZSBzZWNv bmQgc2hhcmVkIGJ1ZmZlcgo+ICsgKiBDcmVhdGUgYmF0Y2ggYnVmZmVyIHRvIHdyaXRlIERBVEEg dG8gZmlyc3QgZHdvcmQgb2YgZWFjaCBidWZmZXIKPiArICogVXNlIHNhbWUgdmlydHVhbCBhZGRy ZXNzIGFzIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyBpbiBiYXRjaCBidWZmZXIKPiArICogU2V0IEVY RUNfT0JKRUNUX1BJTk5FRCBmbGFnIGluIGJvdGggZXhlYyBvYmplY3RzCj4gKyAqIFNldCAnb2Zm c2V0JyBpbiBib3RoIGV4ZWMgb2JqZWN0cyB0byBzYW1lIFZNQQo+ICsgKiBTdWJtaXQgZXhlY2J1 ZmZlcgo+ICsgKiBDb21tYW5kIHNob3VsZCByZXR1cm4gRUlOVkFMLCBzaW5jZSB3ZSBhcmUgdHJ5 aW5nIHRvIHBpbiB0byBzYW1lIFZNQQo+ICsqLwo+ICtzdGF0aWMgdm9pZCBnZW1fcGluX292ZXJs YXBfdGVzdCh2b2lkKQo+ICt7Cj4gKwlpOTE1X2dlbV91c2VycHRyIHVzZXJwdHI7Cj4gKwlpOTE1 X2dlbV91c2VycHRyIHVzZXJwdHIxOwo+ICsJaW50IGZkLCByZXQ7Cj4gKwl1aW50MzJfdCAqc2hh cmVkX2J1ZmZlcjsKPiArCXVpbnQzMl90ICpzaGFyZWRfYnVmZmVyMTsKPiArCXN0cnVjdCBkcm1f aTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhl Y19vYmplY3QyIGV4ZWNfb2JqZWN0MlszXTsKPiArCXVpbnQzMl90IHNoYXJlZF9idWZfaGFuZGxl LCBzaGFyZWRfYnVmX2hhbmRsZTE7Cj4gKwlpbnQgcmluZywgbGVuOwo+ICsJdWludDY0X3QgcGlu bmluZ19vZmZzZXQgPSAweDEwMDA7Cj4gKwo+ICsJZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVS X0lOVEVMKTsKPiArCWlndF9yZXF1aXJlKHVzZXNfZnVsbF9wcGd0dChmZCwgQUxJQVNJTkdfUFBH VFQpKTsKPiArCWlndF9yZXF1aXJlKGhhc19zb2Z0cGluX3N1cHBvcnQoZmQpKTsKPiArCj4gKwlz aGFyZWRfYnVmZmVyID0gY3JlYXRlX21lbV9idWZmZXIoQk9fU0laRSk7Cj4gKwlzaGFyZWRfYnVm ZmVyMSA9IGNyZWF0ZV9tZW1fYnVmZmVyKEJPX1NJWkUgKiAyKTsKPiArCj4gKwkvKiBzaGFyZSB3 aXRoIEdQVSAqLwo+ICsJc2hhcmVkX2J1Zl9oYW5kbGUgPSBpbml0X3VzZXJwdHIoZmQsICZ1c2Vy cHRyLCBzaGFyZWRfYnVmZmVyLAo+ICsJCQkJCSBCT19TSVpFKTsKPiArCXNoYXJlZF9idWZfaGFu ZGxlMSA9IGluaXRfdXNlcnB0cihmZCwgJnVzZXJwdHIxLCBzaGFyZWRfYnVmZmVyMSwKPiArCQkJ CQkgIEJPX1NJWkUgKiAyKTsKPiArCj4gKwkvKiBzdWJtaXQgY29tbWFuZCBidWZmZXIgKi8KPiAr CXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMF0sIHNoYXJlZF9idWZfaGFuZGxlLAo+ICsJ CSAgICAgICBFWEVDX09CSkVDVF9QSU5ORUQsIHBpbm5pbmdfb2Zmc2V0KTsKPiArCXNldHVwX2V4 ZWNfb2JqKCZleGVjX29iamVjdDJbMV0sIHNoYXJlZF9idWZfaGFuZGxlMSwKPiArCQkgICAgICAg RVhFQ19PQkpFQ1RfUElOTkVELCBwaW5uaW5nX29mZnNldCk7Cj4gKwo+ICsJcmluZyA9IEk5MTVf RVhFQ19SRU5ERVI7Cj4gKwo+ICsJc2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmpl Y3QyLCByaW5nLCAyLCBsZW4pOwo+ICsKPiArCXJldCA9IGRybUlvY3RsKGZkLCBEUk1fSU9DVExf STkxNV9HRU1fRVhFQ0JVRkZFUjIsICZleGVjYnVmKTsKPiArCj4gKwkvKiBleHBlY3QgdG8gZmFp bCAqLwo+ICsJaWd0X2Fzc2VydF9uZXEocmV0LCAwKTsKPiArCWlndF9hc3NlcnQoZXJybm8gPT0g RUlOVkFMKTsKPiArCj4gKwljbG9zZShmZCk7Cj4gKwlmcmVlKHNoYXJlZF9idWZmZXIpOwo+ICsJ ZnJlZShzaGFyZWRfYnVmZmVyMSk7Cj4gK30KPiArCj4gKy8qIGdlbV9zb2Z0cGluX3N0cmVzc190 ZXN0Cj4gKyAqIFN0cmVzcyB0ZXN0IHdoaWNoIGNyZWF0ZXMgMTBLIGJ1ZmZlcnMgYW5kIHNoYXJl cyB3aXRoIEdQVQo+ICsgKiBDcmVhdGUgMTAwSyB1aW50MzIgYnVmZmVycyBvZiBzaXplIDRLIGVh Y2gKPiArICogU2hhcmUgd2l0aCBHUFUgdXNpbmcgdXNlcnB0ciBpb2N0bAo+ICsgKiBDcmVhdGUg YmF0Y2ggYnVmZmVyIHRvIHdyaXRlIERBVEEgaW4gZmlyc3QgZWxlbWVudCBvZiBlYWNoIGJ1ZmZl cgo+ICsgKiBQaW4gZWFjaCBidWZmZXIgdG8gdmFyeWluZyBhZGRyZXNzZXMgc3RhcnRpbmcgZnJv bSAweDgwMDAwMDAwMDAwMCBnb2luZyBiZWxvdwo+ICsgKiBFeGVjdXRlIEJhdGNoIEJ1ZmZlciBv biBCbGl0IHJpbmcgU1RSRVNTX05VTV9MT09QUyB0aW1lcwo+ICsgKiBWYWxpZGF0ZSBldmVyeSBi dWZmZXIgaGFzIERBVEEgaW4gZmlyc3QgZWxlbWVudAo+ICsgKiBSaW5zZSBhbmQgUmVwZWF0IG9u IFJlbmRlciByaW5nCj4gKyovCj4gKyNkZWZpbmUgU1RSRVNTX05VTV9CVUZGRVJTIDEwMDAwMAo+ ICsjZGVmaW5lIFNUUkVTU19OVU1fTE9PUFMgMTAwCj4gKyNkZWZpbmUgU1RSRVNTX1NUT1JFX0NP TU1BTkRTIDQgKiBTVFJFU1NfTlVNX0JVRkZFUlMKPiArCj4gK3N0YXRpYyB2b2lkIGdlbV9zb2Z0 cGluX3N0cmVzc190ZXN0KHZvaWQpCj4gK3sKPiArCWk5MTVfZ2VtX3VzZXJwdHIgdXNlcnB0cjsK PiArCWludCBmZDsKPiArCXVpbnQzMl90ICoqc2hhcmVkX2J1ZmZlcjsKPiArCXVpbnQzMl90ICpz aGFyZWRfaGFuZGxlOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVm Owo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgKmV4ZWNfb2JqZWN0MjsKPiAr CXVpbnQzMl90ICpiYXRjaF9idWZmZXI7Cj4gKwl1aW50MzJfdCBiYXRjaF9idWZfaGFuZGxlOwo+ ICsJaW50IHJpbmcsIGxlbjsKPiArCWludCBidWYsIGxvb3A7Cj4gKwl1aW50NjRfdCBwaW5uaW5n X29mZnNldCA9IDB4ODAwMDAwMDAwMDAwOwo+ICsKPiArCWZkID0gZHJtX29wZW5fZHJpdmVyKERS SVZFUl9JTlRFTCk7Cj4gKwlpZ3RfcmVxdWlyZSh1c2VzX2Z1bGxfcHBndHQoZmQsIEZVTExfNDhf QklUX1BQR1RUKSk7Cj4gKwlpZ3RfcmVxdWlyZShoYXNfc29mdHBpbl9zdXBwb3J0KGZkKSk7Cj4g Kwo+ICsKPiArCS8qIEFsbG9jYXRlIGJsb2JzIGZvciBhbGwgZGF0YSBzdHJ1Y3R1cmVzICovCj4g KwlzaGFyZWRfaGFuZGxlID0gY2FsbG9jKFNUUkVTU19OVU1fQlVGRkVSUywgc2l6ZW9mKHVpbnQz Ml90KSk7Cj4gKwlzaGFyZWRfYnVmZmVyID0gY2FsbG9jKFNUUkVTU19OVU1fQlVGRkVSUywgc2l6 ZW9mKHVpbnQzMl90ICopKTsKPiArCWV4ZWNfb2JqZWN0MiA9IGNhbGxvYyhTVFJFU1NfTlVNX0JV RkZFUlMgKyAxLAo+ICsJCQkJc2l6ZW9mKHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3Qy KSk7Cj4gKwkvKiA0IGR3b3JkcyBwZXIgYnVmZmVyICsgMiBmb3IgdGhlIGVuZCBvZiBiYXRjaGJ1 ZmZlciAqLwo+ICsJYmF0Y2hfYnVmZmVyID0gY2FsbG9jKFNUUkVTU19TVE9SRV9DT01NQU5EUyAr IDIsIHNpemVvZih1aW50MzJfdCkpOwo+ICsJYmF0Y2hfYnVmX2hhbmRsZSA9IGdlbV9jcmVhdGUo ZmQsIChTVFJFU1NfU1RPUkVfQ09NTUFORFMgKyAyKSo0KTsKPiArCj4gKwkvKiBjcmVhdGUgY29t bWFuZCBidWZmZXIgd2l0aCB3cml0ZSBjb21tYW5kcyAqLwo+ICsJbGVuID0gMDsKPiArCWZvcihi dWYgPSAwOyBidWYgPCBTVFJFU1NfTlVNX0JVRkZFUlM7IGJ1ZisrKSB7Cj4gKwkJc2hhcmVkX2J1 ZmZlcltidWZdID0gY3JlYXRlX21lbV9idWZmZXIoQk9fU0laRSk7Cj4gKwkJKnNoYXJlZF9idWZm ZXJbYnVmXSA9IDB4RkZGRkZGRkY7Cj4gKwo+ICsJCS8qIHNoYXJlIHdpdGggR1BVICovCj4gKwkJ c2hhcmVkX2hhbmRsZVtidWZdID0gaW5pdF91c2VycHRyKGZkLCAmdXNlcnB0ciwKPiArCQkJCQkJ ICBzaGFyZWRfYnVmZmVyW2J1Zl0sCj4gKwkJCQkJCSAgQk9fU0laRSk7Cj4gKwo+ICsJCXNldHVw X2V4ZWNfb2JqKCZleGVjX29iamVjdDJbYnVmXSwgc2hhcmVkX2hhbmRsZVtidWZdLAo+ICsJCQkg ICAgICAgRVhFQ19PQkpFQ1RfUElOTkVELCBwaW5uaW5nX29mZnNldCk7Cj4gKwkJbGVuICs9IGdl bV9zdG9yZV9kYXRhX3N2bShmZCwgYmF0Y2hfYnVmZmVyICsgKGxlbi80KSwKPiArCQkJCQkgIHBp bm5pbmdfb2Zmc2V0LCBidWYsCj4gKwkJCQkJICAoYnVmID09IFNUUkVTU19OVU1fQlVGRkVSUy0x KT8gXAo+ICsJCQkJCSAgdHJ1ZTpmYWxzZSk7Cj4gKwo+ICsJCS8qIGRlY3JlbWVudGFsIDRLIGFs aWduZWQgYWRkcmVzcyAqLwo+ICsJCXBpbm5pbmdfb2Zmc2V0IC09IEFMSUdOKEJPX1NJWkUsIDQw OTYpOwo+ICsJfQo+ICsKPiArCS8qIHNldHVwIGNvbW1hbmQgYnVmZmVyICovCj4gKwlnZW1fd3Jp dGUoZmQsIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIGJhdGNoX2J1ZmZlciwgbGVuKTsKPiArCXNldHVw X2V4ZWNfb2JqKCZleGVjX29iamVjdDJbU1RSRVNTX05VTV9CVUZGRVJTXSwgYmF0Y2hfYnVmX2hh bmRsZSwKPiArCQkgICAgICAgMCwgMCk7Cj4gKwo+ICsJLyogV2Ugd2FudCB0byBydW4gdGhpcyBv biBCTFQgcmluZyBpZiBwb3NzaWJsZSAqLwo+ICsJaWYgKEhBU19CTFRfUklORyhpbnRlbF9nZXRf ZHJtX2RldmlkKGZkKSkpIHsKPiArCQlyaW5nID0gSTkxNV9FWEVDX0JMVDsKPiArCj4gKwkJc2V0 dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmplY3QyLCByaW5nLAo+ICsJCQkJIFNUUkVT U19OVU1fQlVGRkVSUyArIDEsIGxlbik7Cj4gKwo+ICsJCWZvciAobG9vcCA9IDA7IGxvb3AgPCBT VFJFU1NfTlVNX0xPT1BTOyBsb29wKyspIHsKPiArCQkJc3VibWl0X2FuZF9zeW5jKGZkLCAmZXhl Y2J1ZiwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwkJCS8qIFNldCBwaW5uaW5nIG9mZnNldCBiYWNr IHRvIG9yaWdpbmFsIHZhbHVlICovCj4gKwkJCXBpbm5pbmdfb2Zmc2V0ID0gMHg4MDAwMDAwMDAw MDA7Cj4gKwkJCWZvcihidWYgPSAwOyBidWYgPCBTVFJFU1NfTlVNX0JVRkZFUlM7IGJ1ZisrKSB7 Cj4gKwkJCQlnZW1fdXNlcnB0cl9zeW5jKGZkLCBzaGFyZWRfaGFuZGxlW2J1Zl0pOwo+ICsJCQkJ aWd0X2Fzc2VydChleGVjX29iamVjdDJbYnVmXS5vZmZzZXQgPT0gcGlubmluZ19vZmZzZXQpOwo+ ICsJCQkJaWd0X2ZhaWxfb25fZigqc2hhcmVkX2J1ZmZlcltidWZdICE9IGJ1ZiwgXAo+ICsJCQkJ Ik1pc21hdGNoIGluIGJ1ZmZlciAlZCwgaXRlcmF0aW9uICVkOiAweCUwOFhcbiIsIFwKPiArCQkJ CWJ1ZiwgbG9vcCwgKnNoYXJlZF9idWZmZXJbYnVmXSk7Cj4gKwkJCQlwaW5uaW5nX29mZnNldCAt PSBBTElHTihCT19TSVpFLCA0MDk2KTsKPiArCQkJfQo+ICsJCQkvKiBSZXNldCB0aGUgYnVmZmVy IGVudHJpZXMgZm9yIG5leHQgaXRlcmF0aW9uICovCj4gKwkJCWZvcihidWYgPSAwOyBidWYgPCBT VFJFU1NfTlVNX0JVRkZFUlM7IGJ1ZisrKSB7Cj4gKwkJCQkqc2hhcmVkX2J1ZmZlcltidWZdID0g MHhGRkZGRkZGRjsKPiArCQkJfQo+ICsJCX0KPiArCX0KPiArCj4gKwkvKiBOb3cgUmVuZGVyIFJp bmcgKi8KPiArCXJpbmcgPSBJOTE1X0VYRUNfUkVOREVSOwo+ICsJc2V0dXBfZXhlY2J1ZmZlcigm ZXhlY2J1ZiwgZXhlY19vYmplY3QyLCByaW5nLAo+ICsJCQkgU1RSRVNTX05VTV9CVUZGRVJTICsg MSwgbGVuKTsKPiArCWZvciAobG9vcCA9IDA7IGxvb3AgPCBTVFJFU1NfTlVNX0xPT1BTOyBsb29w KyspIHsKPiArCQlzdWJtaXRfYW5kX3N5bmMoZmQsICZleGVjYnVmLCBiYXRjaF9idWZfaGFuZGxl KTsKPiArCQlwaW5uaW5nX29mZnNldCA9IDB4ODAwMDAwMDAwMDAwOwo+ICsJCWZvcihidWYgPSAw OyBidWYgPCBTVFJFU1NfTlVNX0JVRkZFUlM7IGJ1ZisrKSB7Cj4gKwkJCWdlbV91c2VycHRyX3N5 bmMoZmQsIHNoYXJlZF9oYW5kbGVbYnVmXSk7Cj4gKwkJCWlndF9hc3NlcnQoZXhlY19vYmplY3Qy W2J1Zl0ub2Zmc2V0ID09IHBpbm5pbmdfb2Zmc2V0KTsKPiArCQkJaWd0X2ZhaWxfb25fZigqc2hh cmVkX2J1ZmZlcltidWZdICE9IGJ1ZiwgXAo+ICsJCQkiTWlzbWF0Y2ggaW4gYnVmZmVyICVkLCBc Cj4gKwkJCWl0ZXJhdGlvbiAlZDogMHglMDhYXG4iLCBidWYsIGxvb3AsICpzaGFyZWRfYnVmZmVy W2J1Zl0pOwo+ICsJCQlwaW5uaW5nX29mZnNldCAtPSBBTElHTihCT19TSVpFLCA0MDk2KTsKPiAr CQl9Cj4gKwkJLyogUmVzZXQgdGhlIGJ1ZmZlciBlbnRyaWVzIGZvciBuZXh0IGl0ZXJhdGlvbiAq Lwo+ICsJCWZvcihidWYgPSAwOyBidWYgPCBTVFJFU1NfTlVNX0JVRkZFUlM7IGJ1ZisrKSB7Cj4g KwkJCSpzaGFyZWRfYnVmZmVyW2J1Zl0gPSAweEZGRkZGRkZGOwo+ICsJCX0KPiArCX0KPiArCj4g Kwlmb3IoYnVmID0gMDsgYnVmIDwgU1RSRVNTX05VTV9CVUZGRVJTOyBidWYrKykgewo+ICsJCWdl bV9jbG9zZShmZCwgc2hhcmVkX2hhbmRsZVtidWZdKTsKPiArCQlmcmVlKHNoYXJlZF9idWZmZXJb YnVmXSk7Cj4gKwl9Cj4gKwlnZW1fY2xvc2UoZmQsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJY2xv c2UoZmQpOwo+ICsKPiArCWZyZWUoc2hhcmVkX2hhbmRsZSk7Cj4gKwlmcmVlKHNoYXJlZF9idWZm ZXIpOwo+ICsJZnJlZShleGVjX29iamVjdDIpOwo+ICsJZnJlZShiYXRjaF9idWZmZXIpOwo+ICt9 Cj4gKwo+ICsvKiBnZW1fd3JpdGVfbXVsdGlwYWdlX2J1ZmZlcgo+ICsgKiBDcmVhdGUgYSBidWZm ZXIgc3Bhbm5pbmcgbXVsdGlwbGUgcGFnZXMsIGFuZCBzaGFyZSB3aXRoIEdQVS4KPiArICogV3Jp dGUgdG8gZXZlcnkgZWxlbWVudCBvZiB0aGUgYnVmZmVyCj4gKyAqIGFuZCB2ZXJpZnkgY29ycmVj dCBjb250ZW50cy4KPiArCj4gKyAqIENyZWF0ZSA4SyBidWZmZXIKPiArICogU2hhcmUgd2l0aCBH UFUgdXNpbmcgdXNlcnB0ciBpb2N0bAo+ICsgKiBDcmVhdGUgYmF0Y2ggYnVmZmVyIHRvIHdyaXRl IERBVEEgaW4gYWxsIGVsZW1lbnRzIG9mIGJ1ZmZlcgo+ICsgKiBFeGVjdXRlIEJhdGNoIEJ1ZmZl cgo+ICsgKiBWYWxpZGF0ZSBldmVyeSBlbGVtZW50IGhhcyBEQVRBCj4gKyovCj4gKwo+ICsjZGVm aW5lIERXT1JEX1NJWkUgc2l6ZW9mKHVpbnQzMl90KQo+ICsjZGVmaW5lIEJCX1NJWkUgKChNVUxU SVBBR0VfQk9fU0laRSAvIERXT1JEX1NJWkUpICogU1RPUkVfQkFUQ0hfQlVGRkVSX1NJWkUpICsg Mgo+ICsjZGVmaW5lIE5VTV9EV09SRFMgKE1VTFRJUEFHRV9CT19TSVpFL3NpemVvZih1aW50MzJf dCkpCj4gK3N0YXRpYyB2b2lkIGdlbV93cml0ZV9tdWx0aXBhZ2VfYnVmZmVyX3Rlc3Qodm9pZCkK PiArewo+ICsJaTkxNV9nZW1fdXNlcnB0ciB1c2VycHRyOwo+ICsJaW50IGZkOwo+ICsJdWludDMy X3QgKnNoYXJlZF9idWZmZXI7Cj4gKwl1aW50MzJfdCBzaGFyZWRfaGFuZGxlOwo+ICsJc3RydWN0 IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmOwo+ICsJc3RydWN0IGRybV9pOTE1X2dl bV9leGVjX29iamVjdDIgZXhlY19vYmplY3QyWzJdOwo+ICsJdWludDMyX3QgYmF0Y2hfYnVmZmVy W0JCX1NJWkVdOwo+ICsJdWludDMyX3QgYmF0Y2hfYnVmX2hhbmRsZTsKPiArCWludCByaW5nLCBs ZW4sIGo7Cj4gKwl1aW50NjRfdCBwaW5uaW5nX29mZnNldD0weDEwMDA7Cj4gKwl1aW50NjRfdCB2 YWRkcjsKPiArCj4gKwlmZCA9IGRybV9vcGVuX2RyaXZlcihEUklWRVJfSU5URUwpOwo+ICsJaWd0 X3JlcXVpcmUodXNlc19mdWxsX3BwZ3R0KGZkLCBBTElBU0lOR19QUEdUVCkpOwo+ICsJaWd0X3Jl cXVpcmUoaGFzX3NvZnRwaW5fc3VwcG9ydChmZCkpOwo+ICsKPiArCWJhdGNoX2J1Zl9oYW5kbGUg PSBnZW1fY3JlYXRlKGZkLCBzaXplb2YoYmF0Y2hfYnVmZmVyKSk7Cj4gKwlzaGFyZWRfYnVmZmVy ID0gY3JlYXRlX21lbV9idWZmZXIoTVVMVElQQUdFX0JPX1NJWkUpOwo+ICsKPiArCWxlbiA9IDA7 Cj4gKwltZW1zZXQoYmF0Y2hfYnVmZmVyLCAwLCBzaXplb2YoYmF0Y2hfYnVmZmVyKSk7Cj4gKwlt ZW1zZXQoc2hhcmVkX2J1ZmZlciwgMCwgTVVMVElQQUdFX0JPX1NJWkUpOwo+ICsKPiArCS8qIHNo YXJlIHdpdGggR1BVICovCj4gKwlzaGFyZWRfaGFuZGxlID0gaW5pdF91c2VycHRyKGZkLCAmdXNl cnB0ciwgc2hhcmVkX2J1ZmZlciwKPiArCQkJCSAgICAgTVVMVElQQUdFX0JPX1NJWkUpOwo+ICsJ c2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlswXSwgc2hhcmVkX2hhbmRsZSwKPiArCQkgICAg ICAgRVhFQ19PQkpFQ1RfUElOTkVELCBwaW5uaW5nX29mZnNldCk7Cj4gKwo+ICsJLyogY3JlYXRl IGNvbW1hbmQgYnVmZmVyIHdpdGggd3JpdGUgY29tbWFuZHMgKi8KPiArCXZhZGRyID0gcGlubmlu Z19vZmZzZXQ7Cj4gKwlmb3Ioaj0wOyBqPCBOVU1fRFdPUkRTOyBqKyspIHsKPiArCQlsZW4gKz0g Z2VtX3N0b3JlX2RhdGFfc3ZtKGZkLCBiYXRjaF9idWZmZXIgKyAobGVuLzQpLCB2YWRkciwKPiAr CQkJCQkgIGosCj4gKwkJCQkJICAoaiA9PSBOVU1fRFdPUkRTIC0gMSkgPyB0cnVlOmZhbHNlKTsK PiArCQl2YWRkciArPSBzaXplb2Yoc2hhcmVkX2J1ZmZlclswXSk7ICAvKiA0IGJ5dGVzICovCj4g Kwl9Cj4gKwo+ICsJZ2VtX3dyaXRlKGZkLCBiYXRjaF9idWZfaGFuZGxlLCAwLCBiYXRjaF9idWZm ZXIsIGxlbik7Cj4gKwo+ICsJLyogc3VibWl0IGNvbW1hbmQgYnVmZmVyICovCj4gKwlzZXR1cF9l eGVjX29iaigmZXhlY19vYmplY3QyWzFdLCBiYXRjaF9idWZfaGFuZGxlLCAwLCAwKTsKPiArCj4g KwlyaW5nID0gSTkxNV9FWEVDX1JFTkRFUjsKPiArCXNldHVwX2V4ZWNidWZmZXIoJmV4ZWNidWYs IGV4ZWNfb2JqZWN0MiwgcmluZywgMiwgbGVuKTsKPiArCXN1Ym1pdF9hbmRfc3luYyhmZCwgJmV4 ZWNidWYsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJZ2VtX3VzZXJwdHJfc3luYyhmZCwgc2hhcmVk X2hhbmRsZSk7Cj4gKwo+ICsJaWd0X2Fzc2VydChleGVjX29iamVjdDJbMF0ub2Zmc2V0ID09IHBp bm5pbmdfb2Zmc2V0KTsKPiArCWZvcihqID0gMDsgaiA8IChNVUxUSVBBR0VfQk9fU0laRS9zaXpl b2YodWludDMyX3QpKTsgaisrKSB7Cj4gKwkJaWd0X2ZhaWxfb25fZihzaGFyZWRfYnVmZmVyW2pd ICE9IGosCj4gKwkJIk1pc21hdGNoIGluIGluZGV4ICVkOiAweCUwOFhcbiIsIGosIHNoYXJlZF9i dWZmZXJbal0pOwo+ICsJfQo+ICsKPiArCWdlbV9jbG9zZShmZCwgYmF0Y2hfYnVmX2hhbmRsZSk7 Cj4gKwlnZW1fY2xvc2UoZmQsIHNoYXJlZF9oYW5kbGUpOwo+ICsJY2xvc2UoZmQpOwo+ICsKPiAr CWZyZWUoc2hhcmVkX2J1ZmZlcik7Cj4gK30KPiArCj4gKy8qIGdlbV9waW5faW52YWxpZF92bWFf dGVzdAo+ICsgKiBUaGlzIHRlc3Qgd2lsbCByZXF1ZXN0IHRvIHBpbiBhIHNoYXJlZCBidWZmZXIg dG8gYW4gaW52YWxpZAo+ICsgKiBWTUEgID4gNDgtYml0IGFkZHJlc3MgaWYgc3lzdGVtIHN1cHBv cnRzIDQ4QiBQUEdUVAo+ICsgKiBJZiBzeXN0ZW0gc3VwcG9ydHMgMzJCIFBQR1RULCBpdCB3aWxs IHRlc3QgdGhlIGVxdWl2YWxlbnQgaW52YWxpZCBWTUEKPiArICogQ3JlYXRlIHNoYXJlZCBidWZm ZXIgb2Ygc2l6ZSA0Swo+ICsgKiBUcnkgYW5kIFBpbiBvYmplY3QgdG8gaW52YWxpZCBhZGRyZXNz Cj4gKyovCj4gK3N0YXRpYyB2b2lkIGdlbV9waW5faW52YWxpZF92bWFfdGVzdCh2b2lkKQo+ICt7 Cj4gKwlpOTE1X2dlbV91c2VycHRyIHVzZXJwdHI7Cj4gKwlpbnQgZmQsIHJldDsKPiArCXVpbnQz Ml90ICpzaGFyZWRfYnVmZmVyOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBl eGVjYnVmOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgZXhlY19vYmplY3Qy WzFdOwo+ICsJdWludDMyX3Qgc2hhcmVkX2J1Zl9oYW5kbGU7Cj4gKwlpbnQgcmluZzsKPiArCXVp bnQ2NF90IGludmFsaWRfYWRkcmVzc19mb3JfNDhiID0gMHg5MDAwMDAwMDAwMDAwOyAvKiA1MiBi aXQgYWRkcmVzcyAqLwo+ICsJdWludDY0X3QgaW52YWxpZF9hZGRyZXNzX2Zvcl8zMmIgPSAweDkw MDAwMDAwMDsgLyogMzYgYml0IGFkZHJlc3MgKi8KPiArCj4gKwlmZCA9IGRybV9vcGVuX2RyaXZl cihEUklWRVJfSU5URUwpOwo+ICsJaWd0X3JlcXVpcmUodXNlc19mdWxsX3BwZ3R0KGZkLCBGVUxM XzQ4X0JJVF9QUEdUVCkgfHwKPiArCQkgICAgdXNlc19mdWxsX3BwZ3R0KGZkLCBGVUxMXzMyX0JJ VF9QUEdUVCkpOwo+ICsJaWd0X3JlcXVpcmUoaGFzX3NvZnRwaW5fc3VwcG9ydChmZCkpOwo+ICsK PiArCXNoYXJlZF9idWZmZXIgPSBjcmVhdGVfbWVtX2J1ZmZlcihCT19TSVpFKTsKPiArCSpzaGFy ZWRfYnVmZmVyID0gMHhGRkZGRkZGRjsKPiArCj4gKwkvKiBzaGFyZSB3aXRoIEdQVSAqLwo+ICsJ c2hhcmVkX2J1Zl9oYW5kbGUgPSBpbml0X3VzZXJwdHIoZmQsICZ1c2VycHRyLCBzaGFyZWRfYnVm ZmVyLCBCT19TSVpFKTsKPiArCj4gKwlpZiAodXNlc19mdWxsX3BwZ3R0KGZkLCBGVUxMXzQ4X0JJ VF9QUEdUVCkpIHsKPiArCQlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzBdLCBzaGFyZWRf YnVmX2hhbmRsZSwKPiArCQkJICAgICAgIEVYRUNfT0JKRUNUX1BJTk5FRCwgaW52YWxpZF9hZGRy ZXNzX2Zvcl80OGIpOwo+ICsJfSBlbHNlIHsKPiArCQlzZXR1cF9leGVjX29iaigmZXhlY19vYmpl Y3QyWzBdLCBzaGFyZWRfYnVmX2hhbmRsZSwKPiArCQkJICAgICAgIEVYRUNfT0JKRUNUX1BJTk5F RCwgaW52YWxpZF9hZGRyZXNzX2Zvcl8zMmIpOwo+ICsJfQo+ICsKPiArCXJpbmcgPSBJOTE1X0VY RUNfUkVOREVSOwo+ICsKPiArCXNldHVwX2V4ZWNidWZmZXIoJmV4ZWNidWYsIGV4ZWNfb2JqZWN0 MiwgcmluZywgMSwgMCk7Cj4gKwo+ICsJLyogRXhwZWN0IGV4ZWNidWYgdG8gZmFpbCAqLwo+ICsJ cmV0ID0gZHJtSW9jdGwoZmQsCj4gKwkJICAgICAgIERSTV9JT0NUTF9JOTE1X0dFTV9FWEVDQlVG RkVSMiwKPiArCQkgICAgICAgJmV4ZWNidWYpOwo+ICsKPiArCWlndF9hc3NlcnQoZXJybm8gPT0g RU5PU1BDKTsKPiArCWlndF9hc3NlcnRfbmVxKHJldCwgMCk7Cj4gKwo+ICsJZ2VtX2Nsb3NlKGZk LCBzaGFyZWRfYnVmX2hhbmRsZSk7Cj4gKwljbG9zZShmZCk7Cj4gKwlmcmVlKHNoYXJlZF9idWZm ZXIpOwo+ICt9Cj4gKwo+ICsKPiArLyogZ2VtX3Bpbl9oaWdoX2FkZHJlc3NfdGVzdAo+ICsgKiBU aGlzIHRlc3Qgd2lsbCBjcmVhdGUgYSBzaGFyZWQgYnVmZmVyLCBhbmQgY3JlYXRlIGEgY29tbWFu ZAo+ICsgKiBmb3IgR1BVIHRvIHdyaXRlIGRhdGEgaW4gaXQuIEl0IHdpbGwgYXR0ZW1wdCB0byBw aW4gdGhlIGJ1ZmZlciBhdCBhZGRyZXNzID4gMzIgYml0cy4KPiArICogQ1BVIHdpbGwgcmVhZCBh bmQgbWFrZSBzdXJlIGV4cGVjdGVkIHZhbHVlIGlzIG9idGFpbmVkCj4gKwo+ICsgKiBNYWxsb2Mg YSA0SyBidWZmZXIKPiArICogU2hhcmUgYnVmZmVyIHdpdGggd2l0aCBHUFUgYnkgdXNpbmcgdXNl cnB0ciBpb2N0bAo+ICsgKiBDcmVhdGUgYmF0Y2ggYnVmZmVyIHRvIHdyaXRlIERBVEEgdG8gZmly c3QgZHdvcmQgb2YgYnVmZmVyCj4gKyAqIFVzZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgYnVmZmVyIGFz IDB4MTEwMDAwMDAwMCAoPiAzMiBiaXQpCj4gKyAqIFNldCBFWEVDX09CSkVDVF9QSU5ORUQgZmxh ZyBpbiBleGVjIG9iamVjdAo+ICsgKiBTZXQgJ29mZnNldCcgaW4gZXhlYyBvYmplY3QgdG8gc2hh cmVkIGJ1ZmZlciBWTUEKPiArICogU3VibWl0IGV4ZWNidWZmZXIKPiArICogVmVyaWZ5IHZhbHVl IG9mIGZpcnN0IERXT1JEIGluIHNoYXJlZCBidWZmZXIgbWF0Y2hlcyBEQVRBCj4gKyAqIE5vdyB0 cnkgc2FtZSB0ZXN0IHdpdGhvdXQgdXNpbmcgNDhCSVQgZmxhZwo+ICsgKiB0ZXN0IHNob3VsZCBw YXNzIHdpdGggcmVxdWVzdGVkIHBpbm5pbmcgYWRkcmVzcwo+ICsqLwo+ICsKPiArc3RhdGljIHZv aWQgZ2VtX3Bpbl9oaWdoX2FkZHJlc3NfdGVzdCh2b2lkKQo+ICt7Cj4gKwlpOTE1X2dlbV91c2Vy cHRyIHVzZXJwdHI7Cj4gKwlpbnQgZmQ7Cj4gKwl1aW50MzJfdCAqc2hhcmVkX2J1ZmZlcjsKPiAr CXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZXhlY2J1ZjsKPiArCXN0cnVjdCBkcm1f aTkxNV9nZW1fZXhlY19vYmplY3QyIGV4ZWNfb2JqZWN0MlsyXTsKPiArCXVpbnQzMl90IGJhdGNo X2J1ZmZlcltTVE9SRV9CQVRDSF9CVUZGRVJfU0laRSArIDJdOwo+ICsJdWludDMyX3QgYmF0Y2hf YnVmX2hhbmRsZSwgc2hhcmVkX2J1Zl9oYW5kbGU7Cj4gKwlpbnQgcmluZywgbGVuOwo+ICsJY29u c3QgdWludDMyX3QgZGF0YSA9IDB4MTIzNDU2Nzg7Cj4gKwl1aW50NjRfdCBoaWdoX2FkZHJlc3Mg PSAweDExMTFGRkZGMDAwOyAvKiA0NCBiaXQgYWRkcmVzcyAqLwo+ICsKPiArCWZkID0gZHJtX29w ZW5fZHJpdmVyKERSSVZFUl9JTlRFTCk7Cj4gKwlpZ3RfcmVxdWlyZSh1c2VzX2Z1bGxfcHBndHQo ZmQsIEZVTExfNDhfQklUX1BQR1RUKSk7Cj4gKwlpZ3RfcmVxdWlyZShoYXNfc29mdHBpbl9zdXBw b3J0KGZkKSk7Cj4gKwo+ICsJYmF0Y2hfYnVmX2hhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJ WkUpOwo+ICsKPiArCS8qIGNyZWF0ZSBjcHUgYnVmZmVyLCBzZXQgdG8gYWxsIDB4RidzICovCj4g KwlzaGFyZWRfYnVmZmVyID0gY3JlYXRlX21lbV9idWZmZXIoQk9fU0laRSk7Cj4gKwkqc2hhcmVk X2J1ZmZlciA9IDB4RkZGRkZGRkY7Cj4gKwo+ICsJLyogc2hhcmUgd2l0aCBHUFUgKi8KPiArCXNo YXJlZF9idWZfaGFuZGxlID0gaW5pdF91c2VycHRyKGZkLCAmdXNlcnB0ciwgc2hhcmVkX2J1ZmZl ciwgQk9fU0laRSk7Cj4gKwo+ICsJLyogY3JlYXRlIGNvbW1hbmQgYnVmZmVyIHdpdGggd3JpdGUg Y29tbWFuZCAqLwo+ICsJbGVuID0gZ2VtX3N0b3JlX2RhdGFfc3ZtKGZkLCBiYXRjaF9idWZmZXIs IGhpZ2hfYWRkcmVzcywgZGF0YSwgdHJ1ZSk7Cj4gKwlnZW1fd3JpdGUoZmQsIGJhdGNoX2J1Zl9o YW5kbGUsIDAsIGJhdGNoX2J1ZmZlciwgbGVuKTsKPiArCj4gKwkvKiBzdWJtaXQgY29tbWFuZCBi dWZmZXIgKi8KPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMF0sIHNoYXJlZF9idWZf aGFuZGxlLAo+ICsJCSAgICAgICBFWEVDX09CSkVDVF9QSU5ORUQgfCBFWEVDX09CSkVDVF9TVVBQ T1JUU180OEJfQUREUkVTUywgaGlnaF9hZGRyZXNzKTsKPiArCXNldHVwX2V4ZWNfb2JqKCZleGVj X29iamVjdDJbMV0sIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIDApOwo+ICsKPiArCXJpbmcgPSBJOTE1 X0VYRUNfUkVOREVSOwo+ICsKPiArCXNldHVwX2V4ZWNidWZmZXIoJmV4ZWNidWYsIGV4ZWNfb2Jq ZWN0MiwgcmluZywgMiwgbGVuKTsKPiArCXN1Ym1pdF9hbmRfc3luYyhmZCwgJmV4ZWNidWYsIGJh dGNoX2J1Zl9oYW5kbGUpOwo+ICsJZ2VtX3VzZXJwdHJfc3luYyhmZCwgc2hhcmVkX2J1Zl9oYW5k bGUpOwo+ICsKPiArCWlndF9hc3NlcnQoZXhlY19vYmplY3QyWzBdLm9mZnNldCA9PSBoaWdoX2Fk ZHJlc3MpOwo+ICsJLyogY2hlY2sgb24gQ1BVIHRvIHNlZSBpZiB2YWx1ZSBjaGFuZ2VzICovCj4g KwlpZ3RfZmFpbF9vbl9mKHNoYXJlZF9idWZmZXJbMF0gIT0gZGF0YSwKPiArCQkiXG5DUFUgcmVh ZCBkb2VzIG5vdCBtYXRjaCBHUFUgd3JpdGUsIFwKPiArCQlleHBlY3RlZDogMHgleCwgZ290OiAw eCV4XG4iLCBkYXRhLCBzaGFyZWRfYnVmZmVyWzBdKTsKPiArCj4gKwkvKiBOb3cgdHJ5IHBpbm5p bmcgdG8gaGlnaCBhZGRyZXNzIHdpdGhvdXQgNDhCSVQgZmxhZyAqLwo+ICsJc2V0dXBfZXhlY19v YmooJmV4ZWNfb2JqZWN0MlswXSwgc2hhcmVkX2J1Zl9oYW5kbGUsCj4gKwkJICAgICAgIEVYRUNf T0JKRUNUX1BJTk5FRCwgaGlnaF9hZGRyZXNzKTsKPiArCXNldHVwX2V4ZWNidWZmZXIoJmV4ZWNi dWYsIGV4ZWNfb2JqZWN0MiwgcmluZywgMiwgbGVuKTsKPiArCXN1Ym1pdF9hbmRfc3luYyhmZCwg JmV4ZWNidWYsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJZ2VtX3VzZXJwdHJfc3luYyhmZCwgc2hh cmVkX2J1Zl9oYW5kbGUpOwo+ICsKPiArCWlndF9hc3NlcnQoZXhlY19vYmplY3QyWzBdLm9mZnNl dCA9PSBoaWdoX2FkZHJlc3MpOwo+ICsKPiArCWdlbV9jbG9zZShmZCwgYmF0Y2hfYnVmX2hhbmRs ZSk7Cj4gKwlnZW1fY2xvc2UoZmQsIHNoYXJlZF9idWZfaGFuZGxlKTsKPiArCWNsb3NlKGZkKTsK PiArCWZyZWUoc2hhcmVkX2J1ZmZlcik7Cj4gK30KPiArCj4gKy8qIGdlbV9waW5fbmVhcl80OEJp dF90ZXN0Cj4gKyAqIFRoaXMgdGVzdCB3aWxsIGNyZWF0ZSBhIHNoYXJlZCBidWZmZXIsCj4gKyAq IGFuZCBjcmVhdGUgYSBjb21tYW5kIGZvciBHUFUgdG8gd3JpdGUgZGF0YSBpbiBpdC4gSXQgd2ls bCBhdHRlbXB0Cj4gKyAqIHRvIHBpbiB0aGUgYnVmZmVyIGF0IGFkZHJlc3MgPiA0NyBiaXRzIDw9 IDQ4LWJpdC4KPiArICogQ1BVIHdpbGwgcmVhZCBhbmQgbWFrZSBzdXJlIGV4cGVjdGVkIHZhbHVl IGlzIG9idGFpbmVkCj4gKwo+ICsgKiBNYWxsb2MgYSA0SyBidWZmZXIKPiArICogU2hhcmUgYnVm ZmVyIHdpdGggd2l0aCBHUFUgYnkgdXNpbmcgdXNlcnB0ciBpb2N0bAo+ICsgKiBDcmVhdGUgYmF0 Y2ggYnVmZmVyIHRvIHdyaXRlIERBVEEgdG8gZmlyc3QgZHdvcmQgb2YgYnVmZmVyCj4gKyAqIFVz ZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgYnVmZmVyIGFzIHJhbmdlIGJldHdlZW4gNDctYml0IGFuZCA0 OC1iaXQKPiArICogU2V0IEVYRUNfT0JKRUNUX1BJTk5FRCBmbGFnIGluIGV4ZWMgb2JqZWN0Cj4g KyAqIFNldCAnb2Zmc2V0JyBpbiBleGVjIG9iamVjdCB0byBzaGFyZWQgYnVmZmVyIFZNQQo+ICsg KiBTdWJtaXQgZXhlY2J1ZmZlcgo+ICsgKiBWZXJpZnkgdmFsdWUgb2YgZmlyc3QgRFdPUkQgaW4g c2hhcmVkIGJ1ZmZlciBtYXRjaGVzIERBVEEKPiArKi8KPiArI2RlZmluZSBCRUdJTl9ISUdIX0FE RFJFU1MgMHg3RkZGRkZGRkYwMDAKPiArI2RlZmluZSBFTkRfSElHSF9BRERSRVNTIDB4RkZGRkZG RkZDMDAwCj4gKyNkZWZpbmUgQUREUkVTU19JTkNSRU1FTlQgMHgyMDAwMDAwMDAwCj4gK3N0YXRp YyB2b2lkIGdlbV9waW5fbmVhcl80OEJpdF90ZXN0KHZvaWQpCj4gK3sKPiArCWk5MTVfZ2VtX3Vz ZXJwdHIgdXNlcnB0cjsKPiArCWludCBmZDsKPiArCXVpbnQzMl90ICpzaGFyZWRfYnVmZmVyOwo+ ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmOwo+ICsJc3RydWN0IGRy bV9pOTE1X2dlbV9leGVjX29iamVjdDIgZXhlY19vYmplY3QyWzJdOwo+ICsJdWludDMyX3QgYmF0 Y2hfYnVmZmVyW0JPX1NJWkVdOwo+ICsJdWludDMyX3QgYmF0Y2hfYnVmX2hhbmRsZSwgc2hhcmVk X2J1Zl9oYW5kbGU7Cj4gKwlpbnQgcmluZywgbGVuOwo+ICsJY29uc3QgdWludDMyX3QgZGF0YSA9 IDB4MTIzNDU2Nzg7Cj4gKwl1aW50NjRfdCBoaWdoX2FkZHJlc3M7Cj4gKwo+ICsJZmQgPSBkcm1f b3Blbl9kcml2ZXIoRFJJVkVSX0lOVEVMKTsKPiArCWlndF9yZXF1aXJlKHVzZXNfZnVsbF9wcGd0 dChmZCwgRlVMTF80OF9CSVRfUFBHVFQpKTsKPiArCWlndF9yZXF1aXJlKGhhc19zb2Z0cGluX3N1 cHBvcnQoZmQpKTsKPiArCj4gKwliYXRjaF9idWZfaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgQk9f U0laRSk7Cj4gKwo+ICsJLyogY3JlYXRlIGNwdSBidWZmZXIsIHNldCB0byBhbGwgMHhGJ3MgKi8K PiArCXNoYXJlZF9idWZmZXIgPSBjcmVhdGVfbWVtX2J1ZmZlcihCT19TSVpFKTsKPiArCSpzaGFy ZWRfYnVmZmVyID0gMHhGRkZGRkZGRjsKPiArCj4gKwkvKiBzaGFyZSB3aXRoIEdQVSAqLwo+ICsJ c2hhcmVkX2J1Zl9oYW5kbGUgPSBpbml0X3VzZXJwdHIoZmQsICZ1c2VycHRyLCBzaGFyZWRfYnVm ZmVyLCBCT19TSVpFKTsKPiArCj4gKwlmb3IgKGhpZ2hfYWRkcmVzcyA9IEJFR0lOX0hJR0hfQURE UkVTUzsgaGlnaF9hZGRyZXNzIDw9IEVORF9ISUdIX0FERFJFU1M7Cj4gKwkJCQkJCWhpZ2hfYWRk cmVzcys9QUREUkVTU19JTkNSRU1FTlQpIHsKPiArCQkvKiBjcmVhdGUgY29tbWFuZCBidWZmZXIg d2l0aCB3cml0ZSBjb21tYW5kICovCj4gKwkJbGVuID0gZ2VtX3N0b3JlX2RhdGFfc3ZtKGZkLCBi YXRjaF9idWZmZXIsIGhpZ2hfYWRkcmVzcywKPiArCQkJCQlkYXRhLCB0cnVlKTsKPiArCQlnZW1f d3JpdGUoZmQsIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIGJhdGNoX2J1ZmZlciwgbGVuKTsKPiArCQkv KiBzdWJtaXQgY29tbWFuZCBidWZmZXIgKi8KPiArCQlzZXR1cF9leGVjX29iaigmZXhlY19vYmpl Y3QyWzBdLCBzaGFyZWRfYnVmX2hhbmRsZSwKPiArCQkJICAgICAgIEVYRUNfT0JKRUNUX1BJTk5F RCB8IEVYRUNfT0JKRUNUX1NVUFBPUlRTXzQ4Ql9BRERSRVNTLAo+ICsJCQkgICAgICAgaGlnaF9h ZGRyZXNzKTsKPiArCQlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzFdLCBiYXRjaF9idWZf aGFuZGxlLCAwLCAwKTsKPiArCj4gKwkJcmluZyA9IEk5MTVfRVhFQ19SRU5ERVI7Cj4gKwkJc2V0 dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmplY3QyLCByaW5nLCAyLCBsZW4pOwo+ICsJ CXN1Ym1pdF9hbmRfc3luYyhmZCwgJmV4ZWNidWYsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJCWdl bV91c2VycHRyX3N5bmMoZmQsIHNoYXJlZF9idWZfaGFuZGxlKTsKPiArCj4gKwkJaWd0X2Fzc2Vy dChleGVjX29iamVjdDJbMF0ub2Zmc2V0ID09IGhpZ2hfYWRkcmVzcyk7Cj4gKwkJLyogY2hlY2sg b24gQ1BVIHRvIHNlZSBpZiB2YWx1ZSBjaGFuZ2VzICovCj4gKwkJaWd0X2ZhaWxfb25fZihzaGFy ZWRfYnVmZmVyWzBdICE9IGRhdGEsCj4gKwkJIlxuQ1BVIHJlYWQgZG9lcyBub3QgbWF0Y2ggR1BV IHdyaXRlLCBleHBlY3RlZDogMHgleCwgXAo+ICsJCWdvdDogMHgleFxuLCAweCUiUFJJeDY0IiIs IGRhdGEsIHNoYXJlZF9idWZmZXJbMF0sIGhpZ2hfYWRkcmVzcyk7Cj4gKwl9Cj4gKwo+ICsJZ2Vt X2Nsb3NlKGZkLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCWdlbV9jbG9zZShmZCwgc2hhcmVkX2J1 Zl9oYW5kbGUpOwo+ICsJY2xvc2UoZmQpOwo+ICsJZnJlZShzaGFyZWRfYnVmZmVyKTsKPiArfQo+ ICsKPiArCj4gK2ludCBtYWluKGludCBhcmdjLCBjaGFyKiBhcmd2W10pCj4gK3sKPiArCWlndF9z dWJ0ZXN0X2luaXQoYXJnYywgYXJndik7Cj4gKwlpZ3Rfc2tpcF9vbl9zaW11bGF0aW9uKCk7Cj4g Kwo+ICsJLyogQWxsIHRlc3RzIG5lZWQgUFBHVFQgc3VwcG9ydCAqLwo+ICsJaWd0X3N1YnRlc3Qo ImdlbV9waW5fdXNlcnB0ciIpIHsKPiArCQlnZW1fcGluX3VzZXJwdHJfdGVzdCgpOwo+ICsJfQo+ ICsJaWd0X3N1YnRlc3QoImdlbV9waW5fYm8iKSB7Cj4gKwkJZ2VtX3Bpbl9ib190ZXN0KCk7Cj4g Kwl9Cj4gKwlpZ3Rfc3VidGVzdCgiZ2VtX211bHRpcGxlX3Byb2Nlc3MiKSB7Cj4gKwkJZ2VtX211 bHRpcGxlX3Byb2Nlc3NfdGVzdCgpOwo+ICsJfQo+ICsJaWd0X3N1YnRlc3QoImdlbV9yZXBpbiIp IHsKPiArCQlnZW1fcmVwaW5fdGVzdCgpOwo+ICsJfQo+ICsJaWd0X3N1YnRlc3QoImdlbV9waW5f b3ZlcmxhcCIpIHsKPiArCQlnZW1fcGluX292ZXJsYXBfdGVzdCgpOwo+ICsJfQo+ICsJaWd0X3N1 YnRlc3QoImdlbV93cml0ZV9tdWx0aXBhZ2VfYnVmZmVyIikgewo+ICsJCWdlbV93cml0ZV9tdWx0 aXBhZ2VfYnVmZmVyX3Rlc3QoKTsKPiArCX0KPiArCj4gKwkvKiBGb2xsb3dpbmcgdGVzdHMgbmVl ZCAzMi80OCBCaXQgUFBHVFQgc3VwcG9ydCAqLwo+ICsJaWd0X3N1YnRlc3QoImdlbV9waW5faW52 YWxpZF92bWEiKSB7Cj4gKwkJZ2VtX3Bpbl9pbnZhbGlkX3ZtYV90ZXN0KCk7Cj4gKwl9Cj4gKwo+ ICsJLyogRm9sbG93aW5nIHRlc3RzIG5lZWQgNDggQml0IFBQR1RUIHN1cHBvcnQgKi8KPiArCWln dF9zdWJ0ZXN0KCJnZW1fc29mdHBpbl9zdHJlc3MiKSB7Cj4gKwkJZ2VtX3NvZnRwaW5fc3RyZXNz X3Rlc3QoKTsKPiArCX0KPiArCWlndF9zdWJ0ZXN0KCJnZW1fcGluX2hpZ2hfYWRkcmVzcyIpIHsK PiArCQlnZW1fcGluX2hpZ2hfYWRkcmVzc190ZXN0KCk7Cj4gKwl9Cj4gKwlpZ3Rfc3VidGVzdCgi Z2VtX3Bpbl9uZWFyXzQ4Qml0Iikgewo+ICsJCWdlbV9waW5fbmVhcl80OEJpdF90ZXN0KCk7Cj4g Kwl9Cj4gKwo+ICsJaWd0X2V4aXQoKTsKPiArfQo+Cl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vaW50ZWwtZ2Z4Cg==