From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH i-g-t] tests/gem_buffered_svm: Buffered SVM tests Date: Wed, 24 Feb 2016 13:17:44 +0000 Message-ID: <56CDAD78.5000100@linux.intel.com> References: <1455127263-25631-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 mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTP id 61E576E6E2 for ; Wed, 24 Feb 2016 14:03:18 +0000 (UTC) In-Reply-To: <1455127263-25631-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 CkhpLAoKT24gMTAvMDIvMTYgMTg6MDEsIFZpbmF5IEJlbGdhdW1rYXIgd3JvdGU6Cj4gVGhlc2Ug dGVzdHMgd2VyZSBpbml0aWFsbHkgcmV2aWV3ZWQvbWVyZ2VkIHVuZGVyIHRoZSBnZW1fc29mdHBp biB0aXRsZS4KPiBUaGV5IHVzZSBzb2Z0cGlubmluZyBhbmQgdXNlcnB0ciBtZWNoYW5pc20gdG8g c2hhcmUgYnVmZmVycyBiZXR3ZWVuCj4gQ1BVIGFuZCBHUFUuCj4KPiBUaGUgdXNlcnB0ciBwYXJ0 IHdhcyBkZWNvdXBsZWQgZnJvbSB0aGVtIHJlY2VudGx5LiBBZGRpbmcgdGhlc2UgdGVzdHMKPiB1 bmRlciBhIGRpZmZlcmVudCBuYW1lIHRvIGVuc3VyZSBidWZmZXJlZCBTVk0gdXNhZ2UgdGVzdGlu Zy4KPgo+IFRoZSBvbmx5IGNoYW5nZSBtYWRlIHdhcyB0byBpbnN0YW50aWF0ZSB0aGUgZHJtIGZk IGluIHRoZSBtYWluIGluc3RlYWQKPiBvZiBldmVyeSBzdWJ0ZXN0Lgo+Cj4gQ2M6IE1pY2hlbCBU aGllcnJ5IDxtaWNoZWwudGhpZXJyeUBpbnRlbC5jb20+Cj4gQ2M6IFR2cnRrbyBVcnN1bGluIDx0 dnJ0a28udXJzdWxpbkBpbnRlbC5jb20+Cj4gLS0tCj4gICB0ZXN0cy9NYWtlZmlsZS5zb3VyY2Vz ICAgfCAgICAxICsKPiAgIHRlc3RzL2dlbV9idWZmZXJlZF9zdm0uYyB8IDEwNTEgKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwo+ICAgMiBmaWxlcyBjaGFuZ2Vk LCAxMDUyIGluc2VydGlvbnMoKykKPiAgIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9nZW1fYnVm ZmVyZWRfc3ZtLmMKPgo+IGRpZmYgLS1naXQgYS90ZXN0cy9NYWtlZmlsZS5zb3VyY2VzIGIvdGVz dHMvTWFrZWZpbGUuc291cmNlcwo+IGluZGV4IGRmOTI1ODYuLmU2ZWM2ZjggMTAwNjQ0Cj4gLS0t IGEvdGVzdHMvTWFrZWZpbGUuc291cmNlcwo+ICsrKyBiL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMK PiBAQCAtMTcsNiArMTcsNyBAQCBURVNUU19wcm9nc19NID0gXAo+ICAgCWRydl9oYW5nbWFuIFwK PiAgIAlnZW1fYmFkX3JlbG9jIFwKPiAgIAlnZW1fYmFzaWMgXAo+ICsJZ2VtX2J1ZmZlcmVkX3N2 bSBcCj4gICAJZ2VtX2J1c3kgXAo+ICAgCWdlbV9jYWNoaW5nIFwKPiAgIAlnZW1fY2xvc2VfcmFj ZSBcCj4gZGlmZiAtLWdpdCBhL3Rlc3RzL2dlbV9idWZmZXJlZF9zdm0uYyBiL3Rlc3RzL2dlbV9i dWZmZXJlZF9zdm0uYwo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMC4uOTBl NjNjNAo+IC0tLSAvZGV2L251bGwKPiArKysgYi90ZXN0cy9nZW1fYnVmZmVyZWRfc3ZtLmMKPiBA QCAtMCwwICsxLDEwNTEgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTUgSW50ZWwgQ29y cG9yYXRpb24KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBv ZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBvZiB0aGlzIHNv ZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUi KSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5j bHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwg bW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKPiArICogYW5k L29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRv IHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0 byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92ZSBjb3B5cmln aHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQK PiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0 YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiArICogVEhFIFNP RlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs IEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBU SEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAo+ ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBD TEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNU SU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ICsgKiBGUk9NLCBP VVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9U SEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiArICoKPiArICogQXV0aG9yczoK PiArICogICAgVmluYXkgQmVsZ2F1bWthciA8dmluYXkuYmVsZ2F1bWthckBpbnRlbC5jb20+Cj4g KyAqICAgIFRob21hcyBEYW5pZWwgPHRob21hcy5kYW5pZWxAaW50ZWwuY29tPgo+ICsgKgo+ICsg Ki8KPiArCj4gKyNpbmNsdWRlIDx1bmlzdGQuaD4KPiArI2luY2x1ZGUgPHN0ZGxpYi5oPgo+ICsj aW5jbHVkZSA8c3RkaW50Lmg+Cj4gKyNpbmNsdWRlIDxzdGRpby5oPgo+ICsjaW5jbHVkZSA8c3Ry aW5nLmg+Cj4gKyNpbmNsdWRlIDxmY250bC5oPgo+ICsjaW5jbHVkZSA8aW50dHlwZXMuaD4KPiAr I2luY2x1ZGUgPGVycm5vLmg+Cj4gKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgo+ICsjaW5jbHVkZSA8 c3lzL2lvY3RsLmg+Cj4gKyNpbmNsdWRlIDxzeXMvdGltZS5oPgo+ICsjaW5jbHVkZSA8bWFsbG9j Lmg+Cj4gKyNpbmNsdWRlICJkcm0uaCIKPiArI2luY2x1ZGUgImlvY3RsX3dyYXBwZXJzLmgiCj4g KyNpbmNsdWRlICJkcm10ZXN0LmgiCj4gKyNpbmNsdWRlICJpbnRlbF9jaGlwc2V0LmgiCj4gKyNp bmNsdWRlICJpbnRlbF9pby5oIgo+ICsjaW5jbHVkZSAiaTkxNV9kcm0uaCIKPiArI2luY2x1ZGUg PGFzc2VydC5oPgo+ICsjaW5jbHVkZSA8c3lzL3dhaXQuaD4KPiArI2luY2x1ZGUgPHN5cy9pcGMu aD4KPiArI2luY2x1ZGUgPHN5cy9zaG0uaD4KPiArI2luY2x1ZGUgImlndF9rbXMuaCIKPiArI2lu Y2x1ZGUgPGludHR5cGVzLmg+Cj4gKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KPiArI2luY2x1ZGUg PHN5cy9zdGF0Lmg+Cj4gKyNpbmNsdWRlICJpZ3QuaCIKPiArCj4gKyNkZWZpbmUgQk9fU0laRSA0 MDk2Cj4gKyNkZWZpbmUgTVVMVElQQUdFX0JPX1NJWkUgMiAqIEJPX1NJWkUKPiArI2RlZmluZSBT VE9SRV9CQVRDSF9CVUZGRVJfU0laRSA0Cj4gKyNkZWZpbmUgRVhFQ19PQkpFQ1RfUElOTkVECSgx PDw0KQo+ICsjZGVmaW5lIEVYRUNfT0JKRUNUX1NVUFBPUlRTXzQ4Ql9BRERSRVNTICgxPDwzKQo+ ICsjZGVmaW5lIFNIQVJFRF9CVUZGRVJfU0laRSA0MDk2Cj4gKwo+ICt0eXBlZGVmIHN0cnVjdCBk cm1faTkxNV9nZW1fdXNlcnB0ciBpOTE1X2dlbV91c2VycHRyOwo+ICsKPiArc3RhdGljIHVpbnQz Ml90IGluaXRfdXNlcnB0cihpbnQgZmQsIGk5MTVfZ2VtX3VzZXJwdHIgKiwgdm9pZCAqcHRyLCB1 aW50NjRfdCBzaXplKTsKPiArc3RhdGljIHZvaWQgKmNyZWF0ZV9tZW1fYnVmZmVyKHVpbnQ2NF90 IHNpemUpOwo+ICtzdGF0aWMgaW50IGdlbV9jYWxsX3VzZXJwdHJfaW9jdGwoaW50IGZkLCBpOTE1 X2dlbV91c2VycHRyICp1c2VycHRyKTsKPiArc3RhdGljIHZvaWQgZ2VtX3Bpbl91c2VycHRyX3Rl c3QoaW50IGZkKTsKPiArc3RhdGljIHZvaWQgZ2VtX3Bpbl9ib190ZXN0KGludCBmZCk7Cj4gK3N0 YXRpYyB2b2lkIGdlbV9waW5faW52YWxpZF92bWFfdGVzdChpbnQgZmQsIGJvb2wgdGVzdF9kZWNv dXBsZV9mbGFncywgYm9vbCB0ZXN0X2Nhbm9uaWNhbF9vZmZzZXQpOwo+ICtzdGF0aWMgdm9pZCBn ZW1fcGluX292ZXJsYXBfdGVzdChpbnQgZmQpOwo+ICtzdGF0aWMgdm9pZCBnZW1fcGluX2hpZ2hf YWRkcmVzc190ZXN0KGludCBmZCk7Cj4gKwo+ICsjZGVmaW5lIE5PX1BQR1RUIDAKPiArI2RlZmlu ZSBBTElBU0lOR19QUEdUVCAxCj4gKyNkZWZpbmUgRlVMTF8zMl9CSVRfUFBHVFQgMgo+ICsjZGVm aW5lIEZVTExfNDhfQklUX1BQR1RUIDMKPiArLyogdXNlc19mdWxsX3BwZ3R0Cj4gKyAqIEZpbmRz IHN1cHBvcnRlZCBQUEdUVCBkZXRhaWxzLgo+ICsgKiBAZmQgRFJNIGZkCj4gKyAqIEBtaW4gY2Fu IGJlCj4gKyAqIDAgLSBObyBQUEdUVAo+ICsgKiAxIC0gQWxpYXNpbmcgUFBHVFQKPiArICogMiAt IEZ1bGwgUFBHVFQgKDMyYikKPiArICogMyAtIEZ1bGwgUFBHVFQgKDQ4YikKPiArICogUkVUVVJO UyB0cnVlL2ZhbHNlIGlmIG1pbiBzdXBwb3J0IGlzIHByZXNlbnQKPiArKi8KPiArc3RhdGljIGJv b2wgdXNlc19mdWxsX3BwZ3R0KGludCBmZCwgaW50IG1pbikKPiArewo+ICsJc3RydWN0IGRybV9p OTE1X2dldHBhcmFtIGdwOwo+ICsJaW50IHZhbCA9IDA7Cj4gKwo+ICsJbWVtc2V0KCZncCwgMCwg c2l6ZW9mKGdwKSk7Cj4gKwlncC5wYXJhbSA9IDE4OyAvKiBIQVNfQUxJQVNJTkdfUFBHVFQgKi8K PiArCWdwLnZhbHVlID0gJnZhbDsKPiArCj4gKwlpZiAoZHJtSW9jdGwoZmQsIERSTV9JT0NUTF9J OTE1X0dFVFBBUkFNLCAmZ3ApKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWVycm5vID0gMDsKPiAr CXJldHVybiB2YWwgPj0gbWluOwo+ICt9CgpnZW1fZ3R0X3R5cGUgZ290IGFkZGVkIHRvIGlndCBp biB0aGUgbWVhbnRpbWUgc28gdGhpcyBjYW4gYmUgcmVkdWNlZCB0bzoKCnN0YXRpYyBib29sIHVz ZXNfZnVsbF9wcGd0dChpbnQgZmQsIGludCBtaW4pCnsKCXJldHVybiBnZW1fZ3R0X3R5cGUoZmQp ID49IG1pbjsKfQoKPiArCj4gKy8qIGdlbV9jYWxsX3VzZXJwdHJfaW9jdGwKPiArICogSGVscGVy IHRvIGNhbGwgaW9jdGwgLSBUT0RPOiBtb3ZlIHRvIGxpYgo+ICsgKiBAZmQgLSBkcm0gZmQKPiAr ICogQHVzZXJwdHIgLSBwb2ludGVyIHRvIGluaXRpYWxpc2VkIHVzZXJwdHIKPiArICogUkVUVVJO UyBzdGF0dXMgb2YgaW9jdGwgY2FsbAo+ICsqLwo+ICtzdGF0aWMgaW50IGdlbV9jYWxsX3VzZXJw dHJfaW9jdGwoaW50IGZkLCBpOTE1X2dlbV91c2VycHRyICp1c2VycHRyKQo+ICt7Cj4gKwlpbnQg cmV0Owo+ICsKPiArCXJldCA9IGRybUlvY3RsKGZkLCBEUk1fSU9DVExfSTkxNV9HRU1fVVNFUlBU UiwgdXNlcnB0cik7Cj4gKwo+ICsJaWYgKHJldCkKPiArCQlyZXQgPSBlcnJubzsKPiArCj4gKwly ZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICsvKiBpbml0X3VzZXJwdHIKPiArICogSGVscGVyIHRoYXQg aW5pdHMgdXNlcnB0ciBhbiByZXR1cm5zIGhhbmRsZQo+ICsgKiBAZmQgLSBkcm0gZmQKPiArICog QHVzZXJwdHIgLSBwb2ludGVyIHRvIGVtcHR5IHVzZXJwdHIKPiArICogQHB0ciAtIGJ1ZmZlciB0 byBiZSBzaGFyZWQKPiArICogQHNpemUgLSBzaXplIG9mIGJ1ZmZlcgo+ICsgKiBAcm8gLSByZWFk IG9ubHkgZmxhZwo+ICsgKiBSRVRVUk5TIGhhbmRsZSB0byBzaGFyZWQgYnVmZmVyCj4gKyovCj4g K3N0YXRpYyB1aW50MzJfdCBpbml0X3VzZXJwdHIoaW50IGZkLCBpOTE1X2dlbV91c2VycHRyICp1 c2VycHRyLCB2b2lkICpwdHIsCj4gKwkJCSAgICAgdWludDY0X3Qgc2l6ZSkKPiArewo+ICsJaW50 IHJldDsKPiArCj4gKwltZW1zZXQoKHZvaWQqKXVzZXJwdHIsIDAsIHNpemVvZihpOTE1X2dlbV91 c2VycHRyKSk7Cj4gKwo+ICsJdXNlcnB0ci0+dXNlcl9wdHIgPSAodW5zaWduZWQgbG9uZylwdHI7 IC8qIE5lZWQgdGhlIGNhc3QgdG8gb3ZlcmNvbWUgY29tcGlsZXIgd2FybmluZyAqLwo+ICsJdXNl cnB0ci0+dXNlcl9zaXplID0gc2l6ZTsKPiArCXVzZXJwdHItPmZsYWdzID0gMDsgLyogdXNlIHN5 bmNocm9uaXplZCBvcGVyYXRpb24gKi8KPiArCj4gKwlyZXQgPSBnZW1fY2FsbF91c2VycHRyX2lv Y3RsKGZkLCB1c2VycHRyKTsKPiArCWlndF9hc3NlcnRfZXEocmV0LCAwKTsKPiArCj4gKwlyZXR1 cm4gdXNlcnB0ci0+aGFuZGxlOwo+ICt9CgpDb3VsZCBnZXQgcmlkIG9mIHRoZSB0aGUgYWJvdmUg dHdvIGJ5IGNhbGxpbmcgZ2VtX3VzZXJwdHIgaW5zdGVhZC4gClVubGVzcyBJIGFtIG1pc3Npbmcg c29tZXRoaW5nIGl0IGxvb2tzIGNvbXBhdGlibGUuIFByb2JhYmx5IGV2ZW4gYmV0dGVyIAp0byBz a2lwIHJhdGhlciB0aGFuIGZhaWwgb24ga2VybmVscyB3aXRoIG5vIHN5bmNocm9uaXplZCB1c2Vy cHRyIApzdXBwb3J0LCB3aGljaCB0aGUgbGlicmFyeSBoZWxwZXIgd2lsbCBkbyBmb3IgeW91IGF1 dG9tYXRpY2FsbHkuCgo+ICsKPiArLyogY3JlYXRlX21lbV9idWZmZXIKPiArICogQ3JlYXRlcyBh IDRLIGFsaWduZWQgQ1BVIGJ1ZmZlcgo+ICsgKiBAc2l6ZSAtIHNpemUgb2YgYnVmZmVyCj4gKyAq IFJFVFVSTlMgcG9pbnRlciB0byBidWZmZXIgb2YgQHNpemUKPiArKi8KPiArc3RhdGljIHZvaWQg KmNyZWF0ZV9tZW1fYnVmZmVyKHVpbnQ2NF90IHNpemUpCj4gK3sKPiArCXZvaWQgKmFkZHI7Cj4g KwlpbnQgcmV0Owo+ICsKPiArCXJldCA9IHBvc2l4X21lbWFsaWduKCZhZGRyLCA0MDk2LCBzaXpl KTsKPiArCWlndF9hc3NlcnQocmV0ID09IDApOwo+ICsKPiArCXJldHVybiBhZGRyOwo+ICt9Cj4g Kwo+ICsvKiBzZXR1cF9leGVjX29iago+ICsgKiBwb3B1bGF0ZSBleGVjIG9iamVjdAo+ICsgKiBA ZXhlYyAtIGV4ZWMgb2JqZWN0Cj4gKyAqIEBoYW5kbGUgLSBoYW5kbGUgdG8gZ2VtIGJ1ZmZlcgo+ ICsgKiBAZmxhZ3MgLSBhbnkgZmxhZ3MKPiArICogQG9mZnNldCAtIHJlcXVlc3RlZCBWTUEKPiAr Ki8KPiArc3RhdGljIHZvaWQgc2V0dXBfZXhlY19vYmooc3RydWN0IGRybV9pOTE1X2dlbV9leGVj X29iamVjdDIgKmV4ZWMsCj4gKwkJCSAgIHVpbnQzMl90IGhhbmRsZSwgdWludDMyX3QgZmxhZ3Ms Cj4gKwkJCSAgIHVpbnQ2NF90IG9mZnNldCkKPiArewo+ICsJbWVtc2V0KGV4ZWMsIDAsIHNpemVv ZihzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MikpOwo+ICsJZXhlYy0+aGFuZGxlID0g aGFuZGxlOwo+ICsJZXhlYy0+ZmxhZ3MgPSBmbGFnczsKPiArCWV4ZWMtPm9mZnNldCA9IG9mZnNl dDsKPiArfQo+ICsKPiArLyogZ2VuOF9jYW5vbmljYWxfYWRkcgo+ICsgKiBVc2VkIHRvIGNvbnZl cnQgYW55IGFkZHJlc3MgaW50byBjYW5vbmljYWwgZm9ybSwgaS5lLiBbNjM6NDhdID09IFs0N10u Cj4gKyAqIEJhc2VkIG9uIGtlcm5lbCdzIHNpZ25fZXh0ZW5kNjQgaW1wbGVtZW50YXRpb24uCj4g KyAqIEBhZGRyZXNzIC0gYSB2aXJ0dWFsIGFkZHJlc3MKPiArKi8KPiArI2RlZmluZSBHRU44X0hJ R0hfQUREUkVTU19CSVQgNDcKPiArc3RhdGljIHVpbnQ2NF90IGdlbjhfY2Fub25pY2FsX2FkZHIo dWludDY0X3QgYWRkcmVzcykKPiArewo+ICsJX191OCBzaGlmdCA9IDYzIC0gR0VOOF9ISUdIX0FE RFJFU1NfQklUOwo+ICsJcmV0dXJuIChfX3M2NCkoYWRkcmVzcyA8PCBzaGlmdCkgPj4gc2hpZnQ7 Cj4gK30KPiArCj4gKy8qIGdlbV9zdG9yZV9kYXRhX3N2bQo+ICsgKiBwb3B1bGF0ZSBiYXRjaCBi dWZmZXIgd2l0aCBNSV9TVE9SRV9EV09SRF9JTU0gY29tbWFuZAo+ICsgKiBAZmQ6IGRybSBmaWxl IGRlc2NyaXB0b3IKPiArICogQGNtZF9idWY6IGJhdGNoIGJ1ZmZlcgo+ICsgKiBAdmFkZHI6IGRl c3RpbmF0aW9uIFZpcnR1YWwgYWRkcmVzcwo+ICsgKiBAZGF0YTogZGF0YSB0byBiZSBzdG9yZSBh dCBkZXN0aW5hdGlvbgo+ICsgKiBAZW5kOiB3aGV0aGVyIHRvIGVuZCBiYXRjaCBidWZmZXIgb3Ig bm90Cj4gKyovCj4gK3N0YXRpYyBpbnQgZ2VtX3N0b3JlX2RhdGFfc3ZtKGludCBmZCwgdWludDMy X3QgKmNtZF9idWYsIHVpbnQ2NF90IHZhZGRyLAo+ICsJCQkgICAgICB1aW50MzJfdCBkYXRhLCBi b29sIGVuZCkKPiArewo+ICsJaW50IGkgPSAwOwo+ICsKPiArCWNtZF9idWZbaSsrXSA9IE1JX1NU T1JFX0RXT1JEX0lNTTsKPiArCWNtZF9idWZbaSsrXSA9IHZhZGRyICYgMHhGRkZGRkZGQzsKPiAr CWNtZF9idWZbaSsrXSA9ICh2YWRkciA+PiAzMikgJiAweEZGRkY7IC8qIGJpdHMgMzI6NDcgKi8K PiArCj4gKwljbWRfYnVmW2krK10gPSBkYXRhOwo+ICsJaWYgKGVuZCkgewo+ICsJCWNtZF9idWZb aSsrXSA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7Cj4gKwkJY21kX2J1ZltpKytdID0gMDsKPiArCX0K PiArCj4gKwlyZXR1cm4oaSAqIHNpemVvZih1aW50MzJfdCkpOwo+ICt9Cj4gKwo+ICsvKiBnZW1f c3RvcmVfZGF0YQo+ICsgKiBwb3B1bGF0ZSBiYXRjaCBidWZmZXIgd2l0aCBNSV9TVE9SRV9EV09S RF9JTU0gY29tbWFuZAo+ICsgKiBUaGlzIG9uZSBmaWxscyB1cCByZWxvYyBidWZmZXIgYXMgd2Vs bAo+ICsgKiBAZmQ6IGRybSBmaWxlIGRlc2NyaXB0b3IKPiArICogQGNtZF9idWY6IGJhdGNoIGJ1 ZmZlcgo+ICsgKiBAZGF0YTogZGF0YSB0byBiZSBzdG9yZSBhdCBkZXN0aW5hdGlvbgo+ICsgKiBA cmVsb2MgLSByZWxvY2F0aW9uIGVudHJ5Cj4gKyAqIEBlbmQ6IHdoZXRoZXIgdG8gZW5kIGJhdGNo IGJ1ZmZlciBvciBub3QKPiArKi8KPiArc3RhdGljIGludCBnZW1fc3RvcmVfZGF0YShpbnQgZmQs IHVpbnQzMl90ICpjbWRfYnVmLAo+ICsJCQkgIHVpbnQzMl90IGhhbmRsZSwgdWludDMyX3QgZGF0 YSwKPiArCQkJICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKnJlbG9jLAo+ ICsJCQkgIGJvb2wgZW5kKQo+ICt7Cj4gKwlpbnQgaSA9IDA7Cj4gKwo+ICsJY21kX2J1ZltpKytd ID0gTUlfU1RPUkVfRFdPUkRfSU1NOwo+ICsJY21kX2J1ZltpKytdID0gMDsgLyogbG93ZXIgMzEg Yml0cyBvZiA0OCBiaXQgYWRkcmVzcyAtIDAgcmVsb2MgbmVlZGVkICovCj4gKwljbWRfYnVmW2kr K10gPSAwOyAvKiB1cHBlciAxNSBiaXRzIG9mIDQ4IGJpdCBhZGRyZXNzIC0gMCByZWxvYyBuZWVk ZWQgKi8KPiArCXJlbG9jLT5vZmZzZXQgPSAxICogc2l6ZW9mKHVpbnQzMl90KTsKPiArCXJlbG9j LT5kZWx0YSA9IDA7Cj4gKwlyZWxvYy0+dGFyZ2V0X2hhbmRsZSA9IGhhbmRsZTsKPiArCXJlbG9j LT5yZWFkX2RvbWFpbnMgPSBJOTE1X0dFTV9ET01BSU5fUkVOREVSOwo+ICsJcmVsb2MtPndyaXRl X2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVI7Cj4gKwlyZWxvYy0+cHJlc3VtZWRfb2Zm c2V0ID0gMDsKPiArCWNtZF9idWZbaSsrXSA9IGRhdGE7Cj4gKwlpZiAoZW5kKSB7Cj4gKwkJY21k X2J1ZltpKytdID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKPiArCQljbWRfYnVmW2krK10gPSAwOwo+ ICsJfQo+ICsKPiArCXJldHVybiAoaSAqIHNpemVvZih1aW50MzJfdCkpOwo+ICt9Cj4gKwo+ICsv KiBzZXR1cF9leGVjYnVmZmVyCj4gKyAqIGhlbHBlciBmb3IgYnVmZmVyIGV4ZWN1dGlvbgo+ICsg KiBAZXhlY2J1ZiAtIHBvaW50ZXIgdG8gZXhlY2J1ZmZlcgo+ICsgKiBAZXhlY19vYmplY3QgLSBw b2ludGVyIHRvIGV4ZWMgb2JqZWN0MiBzdHJ1Y3QKPiArICogQHJpbmcgLSByaW5nIHRvIGJlIHVz ZWQKPiArICogQGJ1ZmZlcl9jb3VudCAtIGhvdyBtYW51IGJ1ZmZlcnMgdG8gc3VibWl0Cj4gKyAq IEBiYXRjaF9sZW5ndGggLSBsZW5ndGggb2YgYmF0Y2ggYnVmZmVyCj4gKyovCj4gK3N0YXRpYyB2 b2lkIHNldHVwX2V4ZWNidWZmZXIoc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiAqZXhl Y2J1ZiwKPiArCQkJICAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqZXhlY19v YmplY3QsCj4gKwkJCSAgICAgaW50IHJpbmcsIGludCBidWZmZXJfY291bnQsIGludCBiYXRjaF9s ZW5ndGgpCj4gK3sKPiArCWV4ZWNidWYtPmJ1ZmZlcnNfcHRyID0gKHVuc2lnbmVkIGxvbmcpZXhl Y19vYmplY3Q7Cj4gKwlleGVjYnVmLT5idWZmZXJfY291bnQgPSBidWZmZXJfY291bnQ7Cj4gKwll eGVjYnVmLT5iYXRjaF9zdGFydF9vZmZzZXQgPSAwOwo+ICsJZXhlY2J1Zi0+YmF0Y2hfbGVuID0g YmF0Y2hfbGVuZ3RoOwo+ICsJZXhlY2J1Zi0+Y2xpcHJlY3RzX3B0ciA9IDA7Cj4gKwlleGVjYnVm LT5udW1fY2xpcHJlY3RzID0gMDsKPiArCWV4ZWNidWYtPkRSMSA9IDA7Cj4gKwlleGVjYnVmLT5E UjQgPSAwOwo+ICsJZXhlY2J1Zi0+ZmxhZ3MgPSByaW5nOwo+ICsJaTkxNV9leGVjYnVmZmVyMl9z ZXRfY29udGV4dF9pZCgqZXhlY2J1ZiwgMCk7Cj4gKwlleGVjYnVmLT5yc3ZkMiA9IDA7Cj4gK30K PiArCj4gKy8qIHN1Ym1pdF9hbmRfc3luYwo+ICsgKiBIZWxwZXIgZnVuY3Rpb24gZm9yIGV4ZWMg YW5kIHN5bmMgZnVuY3Rpb25zCj4gKyAqIEBmZCAtIGRybSBmZAo+ICsgKiBAZXhlY2J1ZiAtIHBv aW50ZXIgdG8gZXhlY2J1ZmZlcgo+ICsgKiBAYmF0Y2hfYnVmX2hhbmRsZSAtIGJhdGNoIGJ1ZmZl ciBoYW5kbGUKPiArKi8KPiArc3RhdGljIHZvaWQgc3VibWl0X2FuZF9zeW5jKGludCBmZCwgc3Ry dWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiAqZXhlY2J1ZiwKPiArCQkJICAgIHVpbnQzMl90 IGJhdGNoX2J1Zl9oYW5kbGUpCj4gK3sKPiArCWdlbV9leGVjYnVmKGZkLCBleGVjYnVmKTsKPiAr CWdlbV9zeW5jKGZkLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArfQo+ICsKPiArLyogZ2VtX3VzZXJw dHJfc3luYwo+ICsgKiBoZWxwZXIgZm9yIHN5bmNpbmcgdG8gQ1BVIGRvbWFpbiAtIGNvcHkvcGFz dGUgZnJvbSB1c2VyYmxpdAo+ICsgKiBAZmQgLSBkcm0gZmQKPiArICogQGhhbmRsZSAtIGJ1ZmZl ciBoYW5kbGUgdG8gc3luYwo+ICsqLwo+ICtzdGF0aWMgdm9pZCBnZW1fdXNlcnB0cl9zeW5jKGlu dCBmZCwgdWludDMyX3QgaGFuZGxlKQo+ICt7Cj4gKwlnZW1fc2V0X2RvbWFpbihmZCwgaGFuZGxl LCBJOTE1X0dFTV9ET01BSU5fQ1BVLCBJOTE1X0dFTV9ET01BSU5fQ1BVKTsKPiArfQo+ICsKPiAr Cj4gKy8qIGdlbV9waW5fdXNlcnB0cl90ZXN0Cj4gKyAqIFRoaXMgdGVzdCB3aWxsIGNyZWF0ZSBh IHNoYXJlZCBidWZmZXIsIGFuZCBjcmVhdGUgYSBjb21tYW5kCj4gKyAqIGZvciBHUFUgdG8gd3Jp dGUgZGF0YSBpbiBpdAo+ICsgKiBDUFUgd2lsbCByZWFkIGFuZCBtYWtlIHN1cmUgZXhwZWN0ZWQg dmFsdWUgaXMgb2J0YWluZWQKPiArICogTWFsbG9jIGEgNEsgYnVmZmVyCj4gKyAqIFNoYXJlIGJ1 ZmZlciB3aXRoIHdpdGggR1BVIGJ5IHVzaW5nIHVzZXJwdHIgaW9jdGwKPiArICogQ3JlYXRlIGJh dGNoIGJ1ZmZlciB0byB3cml0ZSBEQVRBIHRvIGZpcnN0IGR3b3JkIG9mIGJ1ZmZlcgo+ICsgKiBV c2UgMHgxMDAwIGFkZHJlc3MgYXMgZGVzdGluYXRpb24gYWRkcmVzcyBpbiBiYXRjaCBidWZmZXIK PiArICogU2V0IEVYRUNfT0JKRUNUX1BJTk5FRCBmbGFnIGluIGV4ZWMgb2JqZWN0Cj4gKyAqIFNl dCAnb2Zmc2V0JyBpbiBleGVjIG9iamVjdCB0byAweDEwMDAKPiArICogU3VibWl0IGV4ZWNidWZm ZXIKPiArICogVmVyaWZ5IHZhbHVlIG9mIGZpcnN0IERXT1JEIGluIHNoYXJlZCBidWZmZXIgbWF0 Y2hlcyBEQVRBCj4gKyovCj4gK3N0YXRpYyB2b2lkIGdlbV9waW5fdXNlcnB0cl90ZXN0KGludCBm ZCkKPiArewo+ICsJaTkxNV9nZW1fdXNlcnB0ciB1c2VycHRyOwo+ICsJdWludDMyX3QgKnNoYXJl ZF9idWZmZXI7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7Cj4g KwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBleGVjX29iamVjdDJbMl07Cj4gKwl1 aW50MzJfdCBiYXRjaF9idWZmZXJbU1RPUkVfQkFUQ0hfQlVGRkVSX1NJWkUgKyAyXTsKPiArCXVp bnQzMl90IGJhdGNoX2J1Zl9oYW5kbGUsIHNoYXJlZF9idWZfaGFuZGxlOwo+ICsJaW50IHJpbmcs IGxlbjsKPiArCWNvbnN0IHVpbnQzMl90IGRhdGEgPSAweDEyMzQ1Njc4Owo+ICsJdWludDY0X3Qg cGlubmluZ19vZmZzZXQgPSAweDEwMDA7Cj4gKwo+ICsJaWd0X3JlcXVpcmUodXNlc19mdWxsX3Bw Z3R0KGZkLCBBTElBU0lOR19QUEdUVCkpOwo+ICsJYmF0Y2hfYnVmX2hhbmRsZSA9IGdlbV9jcmVh dGUoZmQsIEJPX1NJWkUpOwo+ICsKPiArCS8qIGNyZWF0ZSBjcHUgYnVmZmVyICovCj4gKwlzaGFy ZWRfYnVmZmVyID0gY3JlYXRlX21lbV9idWZmZXIoQk9fU0laRSk7Cj4gKwo+ICsJLyogc2hhcmUg d2l0aCBHUFUgKi8KPiArCXNoYXJlZF9idWZfaGFuZGxlID0gaW5pdF91c2VycHRyKGZkLCAmdXNl cnB0ciwgc2hhcmVkX2J1ZmZlciwKPiArCQkJCQkgQk9fU0laRSk7Cj4gKwo+ICsJLyogY3JlYXRl IGNvbW1hbmQgYnVmZmVyIHdpdGggd3JpdGUgY29tbWFuZCAqLwo+ICsJbGVuID0gZ2VtX3N0b3Jl X2RhdGFfc3ZtKGZkLCBiYXRjaF9idWZmZXIsIHBpbm5pbmdfb2Zmc2V0LCBkYXRhLCB0cnVlKTsK PiArCWdlbV93cml0ZShmZCwgYmF0Y2hfYnVmX2hhbmRsZSwgMCwgYmF0Y2hfYnVmZmVyLCBsZW4p Owo+ICsKPiArCS8qIHN1Ym1pdCBjb21tYW5kIGJ1ZmZlciAqLwo+ICsJc2V0dXBfZXhlY19vYmoo JmV4ZWNfb2JqZWN0MlswXSwgc2hhcmVkX2J1Zl9oYW5kbGUsCj4gKwkJICAgICAgIEVYRUNfT0JK RUNUX1BJTk5FRCwgcGlubmluZ19vZmZzZXQpOwo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2Jq ZWN0MlsxXSwgYmF0Y2hfYnVmX2hhbmRsZSwgMCwgMCk7Cj4gKwo+ICsJcmluZyA9IEk5MTVfRVhF Q19SRU5ERVI7Cj4gKwo+ICsJc2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmplY3Qy LCByaW5nLCAyLCBsZW4pOwo+ICsJc3VibWl0X2FuZF9zeW5jKGZkLCAmZXhlY2J1ZiwgYmF0Y2hf YnVmX2hhbmRsZSk7Cj4gKwlnZW1fdXNlcnB0cl9zeW5jKGZkLCBzaGFyZWRfYnVmX2hhbmRsZSk7 Cj4gKwo+ICsJLyogQ2hlY2sgaWYgZHJpdmVyIHBpbm5lZCB0aGUgYnVmZmVyIGFzIHJlcXVlc3Rl ZCAqLwo+ICsJaWd0X2ZhaWxfb25fZihleGVjX29iamVjdDJbMF0ub2Zmc2V0ICE9IHBpbm5pbmdf b2Zmc2V0LAo+ICsJCQkiXG5GYWlsZWQgdG8gcGluIGF0IHJlcXVlc3RlZCBvZmZzZXQiKTsKPiAr CS8qIGNoZWNrIG9uIENQVSB0byBzZWUgaWYgdmFsdWUgY2hhbmdlcyAqLwo+ICsJaWd0X2ZhaWxf b25fZihzaGFyZWRfYnVmZmVyWzBdICE9IGRhdGEsCj4gKwkJICAgICAgIlxuQ1BVIHJlYWQgZG9l cyBub3QgbWF0Y2ggR1BVIHdyaXRlLFwKPiArCQkJZXhwZWN0ZWQ6IDB4JXgsIGdvdDogMHgleFxu IiwKPiArCQkJZGF0YSwgc2hhcmVkX2J1ZmZlclswXSk7Cj4gKwo+ICsJZ2VtX2Nsb3NlKGZkLCBi YXRjaF9idWZfaGFuZGxlKTsKPiArCWdlbV9jbG9zZShmZCwgc2hhcmVkX2J1Zl9oYW5kbGUpOwo+ ICsJZnJlZShzaGFyZWRfYnVmZmVyKTsKPiArfQo+ICsKPiArLyogZ2VtX3Bpbl9ibwo+ICsgKiBU aGlzIHRlc3Qgd2lsbCB0ZXN0IHNvZnRwaW5uaW5nIG9mIGEgZ2VtIGJ1ZmZlciBvYmplY3QKPiAr ICogTWFsbG9jIGEgNEsgYnVmZmVyCj4gKyAqIENyZWF0ZSBiYXRjaCBidWZmZXIgdG8gd3JpdGUg REFUQSB0byBmaXJzdCBkd29yZCBvZiBidWZmZXIKPiArICogVXNlIDB4MTAwMCBhZGRyZXNzIGFz IGRlc3RpbmF0aW9uIGFkZHJlc3MgaW4gYmF0Y2ggYnVmZmVyCj4gKyAqIFNldCBFWEVDX09CSkVD VF9QSU5ORUQgZmxhZyBpbiBleGVjIG9iamVjdAo+ICsgKiBTZXQgJ29mZnNldCcgaW4gZXhlYyBv YmplY3QgdG8gMHgxMDAwCj4gKyAqIFN1Ym1pdCBleGVjYnVmZmVyCj4gKyAqIFZlcmlmeSB2YWx1 ZSBwaW5uZWQgb2Zmc2V0IG1hdGNoZXMgdGhlIHJlcXVlc3QKPiArKi8KPiArc3RhdGljIHZvaWQg Z2VtX3Bpbl9ib190ZXN0KGludCBmZCkKClRoaXMgdGVzdCBpcyBub3Qgc28gaW50ZXJlc3Rpbmcg Zm9yIGJ1ZmZlcmVkIFNWTSBJIHRoaW5rIGFuZCBpZiB5b3UgCnJlbW92ZSBpdCwgeW91IGNvdWxk IGFsc28gZ2V0IHJpZCBvZiB0aGUgZ2VtX3N0b3JlX2RhdGEgaGVscGVyLgoKPiArewo+ICsJc3Ry dWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmOwo+ICsJc3RydWN0IGRybV9pOTE1 X2dlbV9leGVjX29iamVjdDIgZXhlY19vYmplY3QyWzJdOwo+ICsJdWludDMyX3QgYmF0Y2hfYnVm ZmVyW1NUT1JFX0JBVENIX0JVRkZFUl9TSVpFICsgMl07Cj4gKwl1aW50MzJfdCBiYXRjaF9idWZf aGFuZGxlLCB1bnNoYXJlZF9idWZfaGFuZGxlOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxv Y2F0aW9uX2VudHJ5IHJlbG9jWzRdOwo+ICsJaW50IHJpbmcsIGxlbjsKPiArCXVpbnQzMl90IHZh bHVlOwo+ICsJY29uc3QgdWludDMyX3QgZGF0YSA9IDB4MTIzNDU2Nzg7Cj4gKwl1aW50NjRfdCBw aW5uaW5nX29mZnNldCA9IDB4MTAwMDsKPiArCj4gKwlpZ3RfcmVxdWlyZSh1c2VzX2Z1bGxfcHBn dHQoZmQsIEFMSUFTSU5HX1BQR1RUKSk7Cj4gKwo+ICsJYmF0Y2hfYnVmX2hhbmRsZSA9IGdlbV9j cmVhdGUoZmQsIEJPX1NJWkUpOwo+ICsKPiArCS8qIGNyZWF0ZSBnZW0gYnVmZmVyICovCj4gKwl1 bnNoYXJlZF9idWZfaGFuZGxlID0gZ2VtX2NyZWF0ZShmZCwgQk9fU0laRSk7Cj4gKwo+ICsJLyog Y3JlYXRlIGNvbW1hbmQgYnVmZmVyIHdpdGggd3JpdGUgY29tbWFuZCAqLwo+ICsJbGVuID0gZ2Vt X3N0b3JlX2RhdGEoZmQsIGJhdGNoX2J1ZmZlciwgdW5zaGFyZWRfYnVmX2hhbmRsZSwgZGF0YSwK PiArCQkJCXJlbG9jLCB0cnVlKTsKPiArCWdlbV93cml0ZShmZCwgYmF0Y2hfYnVmX2hhbmRsZSwg MCwgYmF0Y2hfYnVmZmVyLCBsZW4pOwo+ICsKPiArCS8qIHN1Ym1pdCBjb21tYW5kIGJ1ZmZlciAq Lwo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlswXSwgdW5zaGFyZWRfYnVmX2hhbmRs ZSwKPiArCQkgICAgICAgRVhFQ19PQkpFQ1RfUElOTkVELCBwaW5uaW5nX29mZnNldCk7Cj4gKwlz ZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzFdLCBiYXRjaF9idWZfaGFuZGxlLCAwLCAwKTsK PiArCWV4ZWNfb2JqZWN0MlsxXS5yZWxvY2F0aW9uX2NvdW50ID0gMTsKPiArCWV4ZWNfb2JqZWN0 MlsxXS5yZWxvY3NfcHRyID0gKHVuc2lnbmVkIGxvbmcpcmVsb2M7Cj4gKwo+ICsJcmluZyA9IEk5 MTVfRVhFQ19SRU5ERVI7Cj4gKwo+ICsJc2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19v YmplY3QyLCByaW5nLCAyLCBsZW4pOwo+ICsJc3VibWl0X2FuZF9zeW5jKGZkLCAmZXhlY2J1Ziwg YmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwo+ICsJLyogQ2hlY2sgaWYgZHJpdmVyIHBpbm5lZCB0aGUg YnVmZmVyIGFzIHJlcXVlc3RlZCAqLwo+ICsJaWd0X2ZhaWxfb25fZihleGVjX29iamVjdDJbMF0u b2Zmc2V0ICE9IHBpbm5pbmdfb2Zmc2V0LAo+ICsJCQkiXG5GYWlsZWQgdG8gcGluIGF0IHJlcXVl c3RlZCBvZmZzZXQiKTsKPiArCWdlbV9yZWFkKGZkLCB1bnNoYXJlZF9idWZfaGFuZGxlLCAwLCAo dm9pZCopJnZhbHVlLCA0KTsKPiArCWlndF9hc3NlcnQodmFsdWUgPT0gZGF0YSk7Cj4gKwo+ICsJ Z2VtX2Nsb3NlKGZkLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCWdlbV9jbG9zZShmZCwgdW5zaGFy ZWRfYnVmX2hhbmRsZSk7Cj4gK30KPiArCj4gKwo+ICsvKiBnZW1fbXVsdGlwbGVfcHJvY2Vzc190 ZXN0Cj4gKyAqIFJ1biBiYXNpYyB0ZXN0IHNpbXVsdGFuZW91c2x5IHdpdGggbXVsdGlwbGUgcHJv Y2Vzc2VzCj4gKyAqIFRoaXMgd2lsbCB0ZXN0IHBpbm5pbmcgc2FtZSBWQSBzZXBhcmF0ZWx5IGlu IGVhY2ggcHJvY2Vzcwo+ICsKPiArICogZm9yaygpOwo+ICsgKiBFeGVjdXRlIGJhc2ljIHRlc3Qg aW4gcGFyZW50L2NoaWxkIHByb2Nlc3Nlcwo+ICsqLwo+ICsjZGVmaW5lIE1BWF9OVU1fUFJPQ0VT U0VTIDEwCj4gKwo+ICtzdGF0aWMgdm9pZCBnZW1fbXVsdGlwbGVfcHJvY2Vzc190ZXN0KGludCBm ZCkKPiArewo+ICsJaWd0X3JlcXVpcmUodXNlc19mdWxsX3BwZ3R0KGZkLCBBTElBU0lOR19QUEdU VCkpOwo+ICsKPiArCWlndF9mb3JrKGNoaWxkLCBNQVhfTlVNX1BST0NFU1NFUykgewo+ICsJCWdl bV9waW5fdXNlcnB0cl90ZXN0KGZkKTsKPiArCX0KPiArCWlndF93YWl0Y2hpbGRyZW4oKTsKPiAr Cj4gK30KCkFzIGFuIG9ic2VydmF0aW9uLCBhYm92ZSBhbmQgYmVsb3cgYXJlIHF1aXRlIHNpbWls YXIgaW4gdGhhdCB0aGV5IGRvIHRoZSAKcmVwaW5uaW5nIGF0IHRoZSBzYW1lIG9mZnNldC4gRm9y a2luZyBpcyBqdXN0IHNlcmlhbGl6ZWQgYnkgdGhlIHN0cnVjdCAKbXV0ZXggaW1wbGljaXRseSwg d2hpbGUgdGhlIGJlbG93IGlzIGxhaWQgb3V0IGluIHRoZSBjb2RlLiBCdXQgaXQgbWFrZXMgCnNl bnNlIHRvIGtlZXAgYm90aCBJIHRoaW5rIGluIGNhc2UgaW1wb3NzaWJsZSBoYXBwZW5zIGFuZCBz dHJ1Y3QgbXV0ZXggCmdvZXMgYXdheSBvbmUgZGF5LgoKPiArCj4gKy8qIGdlbV9yZXBpbl90ZXN0 Cj4gKyAqIFRoaXMgdGVzdCB0cmllcyB0byByZXBpbiBhIGJ1ZmZlciBhdCBhIHByZXZpb3VzbHkg cGlubmVkIHZtYQo+ICsgKiBmcm9tIGEgZGlmZmVyZW50IGV4ZWNidWYuCj4gKyAqIE1hbGxvYyBh IDRLIGJ1ZmZlcgo+ICsgKiBTaGFyZSBidWZmZXIgd2l0aCB3aXRoIEdQVSBieSB1c2luZyB1c2Vy cHRyIGlvY3RsCj4gKyAqIENyZWF0ZSBiYXRjaCBidWZmZXIgdG8gd3JpdGUgREFUQSB0byBmaXJz dCBkd29yZCBvZiBidWZmZXIKPiArICogVXNlIDB4MTAwMCBhZGRyZXNzIGFzIGRlc3RpbmF0aW9u IGFkZHJlc3MgaW4gYmF0Y2ggYnVmZmVyCj4gKyAqIFNldCBFWEVDX09CSkVDVF9QSU5ORUQgZmxh ZyBpbiBleGVjIG9iamVjdAo+ICsgKiBTZXQgJ29mZnNldCcgaW4gZXhlYyBvYmplY3QgdG8gMHgx MDAwIFZNQQo+ICsgKiBTdWJtaXQgZXhlY2J1ZmZlcgo+ICsgKiBWZXJpZnkgdmFsdWUgb2YgZmly c3QgRFdPUkQgaW4gc2hhcmVkIGJ1ZmZlciBtYXRjaGVzIERBVEEKPiArCj4gKyAqIENyZWF0ZSBz ZWNvbmQgc2hhcmVkIGJ1ZmZlcgo+ICsgKiBGb2xsb3cgYWxsIHN0ZXBzIGFib3ZlCj4gKyAqIEV4 ZWNwdCwgZm9yIG9mZnNldCwgdXNlIFZNQSBvZiBmaXJzdCBidWZmZXIgYWJvdmUKPiArICogU3Vi bWl0IGV4ZWNidWZmZXIKPiArICogVmVyaWZ5IHZhbHVlIG9mIGZpcnN0IERXT1JEIGluIHNlY29u ZCBzaGFyZWQgYnVmZmVyIG1hdGNoZXMgREFUQQo+ICsqLwo+ICtzdGF0aWMgdm9pZCBnZW1fcmVw aW5fdGVzdChpbnQgZmQpCj4gK3sKPiArCWk5MTVfZ2VtX3VzZXJwdHIgdXNlcnB0cjsKPiArCWk5 MTVfZ2VtX3VzZXJwdHIgdXNlcnB0cjE7Cj4gKwl1aW50MzJfdCAqc2hhcmVkX2J1ZmZlcjsKPiAr CXVpbnQzMl90ICpzaGFyZWRfYnVmZmVyMTsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1 ZmZlcjIgZXhlY2J1ZjsKPiArCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIGV4ZWNf b2JqZWN0MlsyXTsKPiArCXVpbnQzMl90IGJhdGNoX2J1ZmZlcltTVE9SRV9CQVRDSF9CVUZGRVJf U0laRSArIDJdOwo+ICsJdWludDMyX3QgYmF0Y2hfYnVmX2hhbmRsZSwgc2hhcmVkX2J1Zl9oYW5k bGUsIHNoYXJlZF9idWZfaGFuZGxlMTsKPiArCWludCByaW5nLCBsZW47Cj4gKwljb25zdCB1aW50 MzJfdCBkYXRhID0gMHgxMjM0NTY3ODsKPiArCXVpbnQ2NF90IHBpbm5pbmdfb2Zmc2V0ID0gMHgx MDAwOwo+ICsKPiArCS8qIENyZWF0ZSBnZW0gb2JqZWN0ICovCj4gKwlpZ3RfcmVxdWlyZSh1c2Vz X2Z1bGxfcHBndHQoZmQsIEFMSUFTSU5HX1BQR1RUKSk7Cj4gKwo+ICsJYmF0Y2hfYnVmX2hhbmRs ZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUpOwo+ICsKPiArCS8qIGNyZWF0ZSBjcHUgYnVmZmVy LCBzZXQgZmlyc3QgZWxlbWVudHMgdG8gMHgwICovCj4gKwlzaGFyZWRfYnVmZmVyID0gY3JlYXRl X21lbV9idWZmZXIoQk9fU0laRSk7Cj4gKwlzaGFyZWRfYnVmZmVyMSA9IGNyZWF0ZV9tZW1fYnVm ZmVyKEJPX1NJWkUpOwo+ICsJc2hhcmVkX2J1ZmZlclswXSA9IDB4MDsKPiArCXNoYXJlZF9idWZm ZXIxWzBdID0gMHgwOwo+ICsKPiArCS8qIHNoYXJlIHdpdGggR1BVIGFuZCBnZXQgaGFuZGxlcyAq Lwo+ICsJc2hhcmVkX2J1Zl9oYW5kbGUgPSBpbml0X3VzZXJwdHIoZmQsICZ1c2VycHRyLCBzaGFy ZWRfYnVmZmVyLAo+ICsJCQkJCSBCT19TSVpFKTsKPiArCXNoYXJlZF9idWZfaGFuZGxlMSA9IGlu aXRfdXNlcnB0cihmZCwgJnVzZXJwdHIxLCBzaGFyZWRfYnVmZmVyMSwKPiArCQkJCQkgIEJPX1NJ WkUpOwo+ICsKPiArCS8qIGNyZWF0ZSBjb21tYW5kIGJ1ZmZlciB3aXRoIHdyaXRlIGNvbW1hbmQg Ki8KPiArCWxlbiA9IGdlbV9zdG9yZV9kYXRhX3N2bShmZCwgYmF0Y2hfYnVmZmVyLCBwaW5uaW5n X29mZnNldCwgZGF0YSwgdHJ1ZSk7Cj4gKwlnZW1fd3JpdGUoZmQsIGJhdGNoX2J1Zl9oYW5kbGUs IDAsIGJhdGNoX2J1ZmZlciwgbGVuKTsKPiArCj4gKwkvKiBzdWJtaXQgY29tbWFuZCBidWZmZXIg Ki8KPiArCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMF0sIHNoYXJlZF9idWZfaGFuZGxl LAo+ICsJCSAgICAgICBFWEVDX09CSkVDVF9QSU5ORUQsIHBpbm5pbmdfb2Zmc2V0KTsKPiArCXNl dHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMV0sIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIDApOwo+ ICsKPiArCXJpbmcgPSBJOTE1X0VYRUNfUkVOREVSOwo+ICsKPiArCXNldHVwX2V4ZWNidWZmZXIo JmV4ZWNidWYsIGV4ZWNfb2JqZWN0MiwgcmluZywgMiwgbGVuKTsKPiArCXN1Ym1pdF9hbmRfc3lu YyhmZCwgJmV4ZWNidWYsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJZ2VtX3VzZXJwdHJfc3luYyhm ZCwgc2hhcmVkX2J1Zl9oYW5kbGUpOwo+ICsKPiArCWlndF9hc3NlcnQoZXhlY19vYmplY3QyWzBd Lm9mZnNldCA9PSBwaW5uaW5nX29mZnNldCk7Cj4gKwlpZ3RfYXNzZXJ0KCpzaGFyZWRfYnVmZmVy ID09IGRhdGEpOwo+ICsKPiArCS8qIFNlY29uZCBidWZmZXIgKi8KPiArCS8qIGNyZWF0ZSBjb21t YW5kIGJ1ZmZlciB3aXRoIHdyaXRlIGNvbW1hbmQgKi8KPiArCXBpbm5pbmdfb2Zmc2V0ID0gZXhl Y19vYmplY3QyWzBdLm9mZnNldDsKPiArCWxlbiA9IGdlbV9zdG9yZV9kYXRhX3N2bShmZCwgYmF0 Y2hfYnVmZmVyLCBwaW5uaW5nX29mZnNldCwgZGF0YSwgdHJ1ZSk7Cj4gKwlnZW1fd3JpdGUoZmQs IGJhdGNoX2J1Zl9oYW5kbGUsIDAsIGJhdGNoX2J1ZmZlciwgbGVuKTsKPiArCj4gKwkvKiBzdWJt aXQgY29tbWFuZCBidWZmZXIgKi8KPiArCS8qIFBpbiBhdCBzaGFyZWRfYnVmZmVyLCBub3Qgc2hh cmVkX2J1ZmZlcjEgKi8KPiArCS8qIFdlIGFyZSByZXF1ZXN0aW5nIGFkZHJlc3Mgd2hlcmUgYW5v dGhlciBidWZmZXIgd2FzIHBpbm5lZCBwcmV2aW91c2x5ICovCj4gKwlzZXR1cF9leGVjX29iaigm ZXhlY19vYmplY3QyWzBdLCBzaGFyZWRfYnVmX2hhbmRsZTEsCj4gKwkJICAgICAgIEVYRUNfT0JK RUNUX1BJTk5FRCwgcGlubmluZ19vZmZzZXQpOwo+ICsJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2Jq ZWN0MlsxXSwgYmF0Y2hfYnVmX2hhbmRsZSwgMCwgMCk7Cj4gKwo+ICsJcmluZyA9IEk5MTVfRVhF Q19SRU5ERVI7Cj4gKwo+ICsJc2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmplY3Qy LCByaW5nLCAyLCBsZW4pOwo+ICsJc3VibWl0X2FuZF9zeW5jKGZkLCAmZXhlY2J1ZiwgYmF0Y2hf YnVmX2hhbmRsZSk7Cj4gKwlnZW1fdXNlcnB0cl9zeW5jKGZkLCBzaGFyZWRfYnVmX2hhbmRsZTEp Owo+ICsKPiArCWlndF9hc3NlcnQoZXhlY19vYmplY3QyWzBdLm9mZnNldCA9PSBwaW5uaW5nX29m ZnNldCk7Cj4gKwlpZ3RfYXNzZXJ0KCpzaGFyZWRfYnVmZmVyMSA9PSBkYXRhKTsKPiArCj4gKwln ZW1fY2xvc2UoZmQsIGJhdGNoX2J1Zl9oYW5kbGUpOwo+ICsJZ2VtX2Nsb3NlKGZkLCBzaGFyZWRf YnVmX2hhbmRsZSk7Cj4gKwo+ICsJZnJlZShzaGFyZWRfYnVmZmVyKTsKPiArCWZyZWUoc2hhcmVk X2J1ZmZlcjEpOwo+ICt9Cj4gKwo+ICsKPiArLyogZ2VtX3JlcGluX292ZXJsYXBfdGVzdAo+ICsg KiBUaGlzIHRlc3Qgd2lsbCBhdHRlbXB0IHRvIHBpbiB0d28gYnVmZmVycyBhdCB0aGUgc2FtZSBW TUEgYXMgcGFydCBvZiB0aGUgc2FtZQo+ICsgICBleGVjYnVmZmVyIG9iamVjdAo+ICsKPiArICog TWFsbG9jIGEgNEsgYnVmZmVyCj4gKyAqIFNoYXJlIGJ1ZmZlciB3aXRoIHdpdGggR1BVIGJ5IHVz aW5nIHVzZXJwdHIgaW9jdGwKPiArICogQ3JlYXRlIHNlY29uZCBzaGFyZWQgYnVmZmVyCj4gKyAq IENyZWF0ZSBiYXRjaCBidWZmZXIgdG8gd3JpdGUgREFUQSB0byBmaXJzdCBkd29yZCBvZiBlYWNo IGJ1ZmZlcgo+ICsgKiBVc2Ugc2FtZSB2aXJ0dWFsIGFkZHJlc3MgYXMgZGVzdGluYXRpb24gYWRk cmVzc2VzIGluIGJhdGNoIGJ1ZmZlcgo+ICsgKiBTZXQgRVhFQ19PQkpFQ1RfUElOTkVEIGZsYWcg aW4gYm90aCBleGVjIG9iamVjdHMKPiArICogU2V0ICdvZmZzZXQnIGluIGJvdGggZXhlYyBvYmpl Y3RzIHRvIHNhbWUgVk1BCj4gKyAqIFN1Ym1pdCBleGVjYnVmZmVyCj4gKyAqIENvbW1hbmQgc2hv dWxkIHJldHVybiBFSU5WQUwsIHNpbmNlIHdlIGFyZSB0cnlpbmcgdG8gcGluIHRvIHNhbWUgVk1B Cj4gKyovCj4gK3N0YXRpYyB2b2lkIGdlbV9waW5fb3ZlcmxhcF90ZXN0KGludCBmZCkKCkNvdWxk IHBvdGVudGlhbGx5IHJlbW92ZSB0aGlzIG9uZSBzaW5jZSBnZW1fc29mdHBpbiBjb3ZlcnMgaXQu Cgo+ICt7Cj4gKwlpOTE1X2dlbV91c2VycHRyIHVzZXJwdHI7Cj4gKwlpOTE1X2dlbV91c2VycHRy IHVzZXJwdHIxOwo+ICsJaW50IHJldDsKPiArCXVpbnQzMl90ICpzaGFyZWRfYnVmZmVyOwo+ICsJ dWludDMyX3QgKnNoYXJlZF9idWZmZXIxOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVm ZmVyMiBleGVjYnVmOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgZXhlY19v YmplY3QyWzNdOwo+ICsJdWludDMyX3Qgc2hhcmVkX2J1Zl9oYW5kbGUsIHNoYXJlZF9idWZfaGFu ZGxlMTsKPiArCWludCByaW5nLCBsZW47Cj4gKwl1aW50NjRfdCBwaW5uaW5nX29mZnNldCA9IDB4 MTAwMDsKPiArCj4gKwlpZ3RfcmVxdWlyZSh1c2VzX2Z1bGxfcHBndHQoZmQsIEFMSUFTSU5HX1BQ R1RUKSk7Cj4gKwo+ICsJc2hhcmVkX2J1ZmZlciA9IGNyZWF0ZV9tZW1fYnVmZmVyKEJPX1NJWkUp Owo+ICsJc2hhcmVkX2J1ZmZlcjEgPSBjcmVhdGVfbWVtX2J1ZmZlcihCT19TSVpFICogMik7Cj4g Kwo+ICsJLyogc2hhcmUgd2l0aCBHUFUgKi8KPiArCXNoYXJlZF9idWZfaGFuZGxlID0gaW5pdF91 c2VycHRyKGZkLCAmdXNlcnB0ciwgc2hhcmVkX2J1ZmZlciwKPiArCQkJCQkgQk9fU0laRSk7Cj4g KwlzaGFyZWRfYnVmX2hhbmRsZTEgPSBpbml0X3VzZXJwdHIoZmQsICZ1c2VycHRyMSwgc2hhcmVk X2J1ZmZlcjEsCj4gKwkJCQkJICBCT19TSVpFICogMik7Cj4gKwo+ICsJLyogc3VibWl0IGNvbW1h bmQgYnVmZmVyICovCj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzBdLCBzaGFyZWRf YnVmX2hhbmRsZSwKPiArCQkgICAgICAgRVhFQ19PQkpFQ1RfUElOTkVELCBwaW5uaW5nX29mZnNl dCk7Cj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzFdLCBzaGFyZWRfYnVmX2hhbmRs ZTEsCj4gKwkJICAgICAgIEVYRUNfT0JKRUNUX1BJTk5FRCwgcGlubmluZ19vZmZzZXQpOwo+ICsK PiArCXJpbmcgPSBJOTE1X0VYRUNfUkVOREVSOwo+ICsKPiArCXNldHVwX2V4ZWNidWZmZXIoJmV4 ZWNidWYsIGV4ZWNfb2JqZWN0MiwgcmluZywgMiwgbGVuKTsKPiArCj4gKwlyZXQgPSBkcm1Jb2N0 bChmZCwgRFJNX0lPQ1RMX0k5MTVfR0VNX0VYRUNCVUZGRVIyLCAmZXhlY2J1Zik7Cj4gKwo+ICsJ LyogZXhwZWN0IHRvIGZhaWwgKi8KPiArCWlndF9hc3NlcnRfbmVxKHJldCwgMCk7Cj4gKwlpZ3Rf YXNzZXJ0KGVycm5vID09IEVJTlZBTCk7Cj4gKwo+ICsJZnJlZShzaGFyZWRfYnVmZmVyKTsKPiAr CWZyZWUoc2hhcmVkX2J1ZmZlcjEpOwo+ICt9Cj4gKwo+ICsvKiBnZW1fc29mdHBpbl9zdHJlc3Nf dGVzdAo+ICsgKiBTdHJlc3MgdGVzdCB3aGljaCBjcmVhdGVzIDEwSyBidWZmZXJzIGFuZCBzaGFy ZXMgd2l0aCBHUFUKPiArICogQ3JlYXRlIDEwMEsgdWludDMyIGJ1ZmZlcnMgb2Ygc2l6ZSA0SyBl YWNoCj4gKyAqIFNoYXJlIHdpdGggR1BVIHVzaW5nIHVzZXJwdHIgaW9jdGwKPiArICogQ3JlYXRl IGJhdGNoIGJ1ZmZlciB0byB3cml0ZSBEQVRBIGluIGZpcnN0IGVsZW1lbnQgb2YgZWFjaCBidWZm ZXIKPiArICogUGluIGVhY2ggYnVmZmVyIHRvIHZhcnlpbmcgYWRkcmVzc2VzIHN0YXJ0aW5nIGZy b20gMHg4MDAwMDAwMDAwMDAgZ29pbmcgYmVsb3cKPiArICogKHJlcXVpcmVzIG9mZnNldHMgaW4g Y2Fub25pY2FsIGZvcm0pCj4gKyAqIEV4ZWN1dGUgQmF0Y2ggQnVmZmVyIG9uIEJsaXQgcmluZyBT VFJFU1NfTlVNX0xPT1BTIHRpbWVzCj4gKyAqIFZhbGlkYXRlIGV2ZXJ5IGJ1ZmZlciBoYXMgREFU QSBpbiBmaXJzdCBlbGVtZW50Cj4gKyAqIFJpbnNlIGFuZCBSZXBlYXQgb24gUmVuZGVyIHJpbmcK PiArKi8KPiArI2RlZmluZSBTVFJFU1NfTlVNX0JVRkZFUlMgMTAwMDAwCj4gKyNkZWZpbmUgU1RS RVNTX05VTV9MT09QUyAxMDAKPiArI2RlZmluZSBTVFJFU1NfU1RPUkVfQ09NTUFORFMgNCAqIFNU UkVTU19OVU1fQlVGRkVSUwo+ICsjZGVmaW5lIFNUUkVTU19TVEFSVF9BRERSRVNTIDB4ODAwMDAw MDAwMDAwCj4gK3N0YXRpYyB2b2lkIGdlbV9zb2Z0cGluX3N0cmVzc190ZXN0KGludCBmZCkKPiAr ewo+ICsJaTkxNV9nZW1fdXNlcnB0ciB1c2VycHRyOwo+ICsJdWludDMyX3QgKipzaGFyZWRfYnVm ZmVyOwo+ICsJdWludDMyX3QgKnNoYXJlZF9oYW5kbGU7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X2V4ZWNidWZmZXIyIGV4ZWNidWY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0 MiAqZXhlY19vYmplY3QyOwo+ICsJdWludDMyX3QgKmJhdGNoX2J1ZmZlcjsKPiArCXVpbnQzMl90 IGJhdGNoX2J1Zl9oYW5kbGU7Cj4gKwlpbnQgcmluZywgbGVuOwo+ICsJaW50IGJ1ZiwgbG9vcDsK PiArCXVpbnQ2NF90IHBpbm5pbmdfb2Zmc2V0ID0gU1RSRVNTX1NUQVJUX0FERFJFU1M7Cj4gKwo+ ICsJaWd0X3JlcXVpcmUodXNlc19mdWxsX3BwZ3R0KGZkLCBGVUxMXzQ4X0JJVF9QUEdUVCkpOwo+ ICsKPiArCS8qIEFsbG9jYXRlIGJsb2JzIGZvciBhbGwgZGF0YSBzdHJ1Y3R1cmVzICovCj4gKwlz aGFyZWRfaGFuZGxlID0gY2FsbG9jKFNUUkVTU19OVU1fQlVGRkVSUywgc2l6ZW9mKHVpbnQzMl90 KSk7Cj4gKwlzaGFyZWRfYnVmZmVyID0gY2FsbG9jKFNUUkVTU19OVU1fQlVGRkVSUywgc2l6ZW9m KHVpbnQzMl90ICopKTsKPiArCWV4ZWNfb2JqZWN0MiA9IGNhbGxvYyhTVFJFU1NfTlVNX0JVRkZF UlMgKyAxLAo+ICsJCQkJc2l6ZW9mKHN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyKSk7 Cj4gKwkvKiA0IGR3b3JkcyBwZXIgYnVmZmVyICsgMiBmb3IgdGhlIGVuZCBvZiBiYXRjaGJ1ZmZl ciAqLwo+ICsJYmF0Y2hfYnVmZmVyID0gY2FsbG9jKFNUUkVTU19TVE9SRV9DT01NQU5EUyArIDIs IHNpemVvZih1aW50MzJfdCkpOwo+ICsJYmF0Y2hfYnVmX2hhbmRsZSA9IGdlbV9jcmVhdGUoZmQs IChTVFJFU1NfU1RPUkVfQ09NTUFORFMgKyAyKSo0KTsKPiArCj4gKwkvKiBjcmVhdGUgY29tbWFu ZCBidWZmZXIgd2l0aCB3cml0ZSBjb21tYW5kcyAqLwo+ICsJbGVuID0gMDsKPiArCWZvcihidWYg PSAwOyBidWYgPCBTVFJFU1NfTlVNX0JVRkZFUlM7IGJ1ZisrKSB7Cj4gKwkJc2hhcmVkX2J1ZmZl cltidWZdID0gY3JlYXRlX21lbV9idWZmZXIoQk9fU0laRSk7Cj4gKwkJKnNoYXJlZF9idWZmZXJb YnVmXSA9IDB4RkZGRkZGRkY7Cj4gKwo+ICsJCS8qIHNoYXJlIHdpdGggR1BVICovCj4gKwkJc2hh cmVkX2hhbmRsZVtidWZdID0gaW5pdF91c2VycHRyKGZkLCAmdXNlcnB0ciwKPiArCQkJCQkJICBz aGFyZWRfYnVmZmVyW2J1Zl0sCj4gKwkJCQkJCSAgQk9fU0laRSk7Cj4gKwo+ICsJCXNldHVwX2V4 ZWNfb2JqKCZleGVjX29iamVjdDJbYnVmXSwgc2hhcmVkX2hhbmRsZVtidWZdLAo+ICsJCQkgICAg ICAgRVhFQ19PQkpFQ1RfUElOTkVEIHwKPiArCQkJICAgICAgIEVYRUNfT0JKRUNUX1NVUFBPUlRT XzQ4Ql9BRERSRVNTLAo+ICsJCQkgICAgICAgZ2VuOF9jYW5vbmljYWxfYWRkcihwaW5uaW5nX29m ZnNldCkpOwo+ICsJCWxlbiArPSBnZW1fc3RvcmVfZGF0YV9zdm0oZmQsIGJhdGNoX2J1ZmZlciAr IChsZW4vNCksCj4gKwkJCQkJICBnZW44X2Nhbm9uaWNhbF9hZGRyKHBpbm5pbmdfb2Zmc2V0KSwK PiArCQkJCQkgIGJ1ZiwgKGJ1ZiA9PSBTVFJFU1NfTlVNX0JVRkZFUlMtMSk/IFwKPiArCQkJCQkg IHRydWU6ZmFsc2UpOwo+ICsKPiArCQkvKiBkZWNyZW1lbnRhbCA0SyBhbGlnbmVkIGFkZHJlc3Mg Ki8KPiArCQlwaW5uaW5nX29mZnNldCAtPSBBTElHTihCT19TSVpFLCA0MDk2KTsKPiArCX0KPiAr Cj4gKwkvKiBzZXR1cCBjb21tYW5kIGJ1ZmZlciAqLwo+ICsJZ2VtX3dyaXRlKGZkLCBiYXRjaF9i dWZfaGFuZGxlLCAwLCBiYXRjaF9idWZmZXIsIGxlbik7Cj4gKwlzZXR1cF9leGVjX29iaigmZXhl Y19vYmplY3QyW1NUUkVTU19OVU1fQlVGRkVSU10sIGJhdGNoX2J1Zl9oYW5kbGUsCj4gKwkJICAg ICAgIDAsIDApOwo+ICsKPiArCS8qIFdlIHdhbnQgdG8gcnVuIHRoaXMgb24gQkxUIHJpbmcgaWYg cG9zc2libGUgKi8KPiArCWlmIChIQVNfQkxUX1JJTkcoaW50ZWxfZ2V0X2RybV9kZXZpZChmZCkp KSB7Cj4gKwkJcmluZyA9IEk5MTVfRVhFQ19CTFQ7Cj4gKwo+ICsJCXNldHVwX2V4ZWNidWZmZXIo JmV4ZWNidWYsIGV4ZWNfb2JqZWN0MiwgcmluZywKPiArCQkJCSBTVFJFU1NfTlVNX0JVRkZFUlMg KyAxLCBsZW4pOwo+ICsKPiArCQlmb3IgKGxvb3AgPSAwOyBsb29wIDwgU1RSRVNTX05VTV9MT09Q UzsgbG9vcCsrKSB7Cj4gKwkJCXN1Ym1pdF9hbmRfc3luYyhmZCwgJmV4ZWNidWYsIGJhdGNoX2J1 Zl9oYW5kbGUpOwo+ICsJCQkvKiBTZXQgcGlubmluZyBvZmZzZXQgYmFjayB0byBvcmlnaW5hbCB2 YWx1ZSAqLwo+ICsJCQlwaW5uaW5nX29mZnNldCA9IFNUUkVTU19TVEFSVF9BRERSRVNTOwo+ICsJ CQlmb3IoYnVmID0gMDsgYnVmIDwgU1RSRVNTX05VTV9CVUZGRVJTOyBidWYrKykgewo+ICsJCQkJ Z2VtX3VzZXJwdHJfc3luYyhmZCwgc2hhcmVkX2hhbmRsZVtidWZdKTsKPiArCQkJCWlndF9hc3Nl cnQoZXhlY19vYmplY3QyW2J1Zl0ub2Zmc2V0ID09Cj4gKwkJCQkJZ2VuOF9jYW5vbmljYWxfYWRk cihwaW5uaW5nX29mZnNldCkpOwo+ICsJCQkJaWd0X2ZhaWxfb25fZigqc2hhcmVkX2J1ZmZlclti dWZdICE9IGJ1ZiwgXAo+ICsJCQkJIk1pc21hdGNoIGluIGJ1ZmZlciAlZCwgaXRlcmF0aW9uICVk OiAweCUwOFhcbiIsIFwKPiArCQkJCWJ1ZiwgbG9vcCwgKnNoYXJlZF9idWZmZXJbYnVmXSk7Cj4g KwkJCQlwaW5uaW5nX29mZnNldCAtPSBBTElHTihCT19TSVpFLCA0MDk2KTsKPiArCQkJfQo+ICsJ CQkvKiBSZXNldCB0aGUgYnVmZmVyIGVudHJpZXMgZm9yIG5leHQgaXRlcmF0aW9uICovCj4gKwkJ CWZvcihidWYgPSAwOyBidWYgPCBTVFJFU1NfTlVNX0JVRkZFUlM7IGJ1ZisrKSB7Cj4gKwkJCQkq c2hhcmVkX2J1ZmZlcltidWZdID0gMHhGRkZGRkZGRjsKPiArCQkJfQo+ICsJCX0KPiArCX0KPiAr Cj4gKwkvKiBOb3cgUmVuZGVyIFJpbmcgKi8KPiArCXJpbmcgPSBJOTE1X0VYRUNfUkVOREVSOwo+ ICsJc2V0dXBfZXhlY2J1ZmZlcigmZXhlY2J1ZiwgZXhlY19vYmplY3QyLCByaW5nLAo+ICsJCQkg U1RSRVNTX05VTV9CVUZGRVJTICsgMSwgbGVuKTsKPiArCWZvciAobG9vcCA9IDA7IGxvb3AgPCBT VFJFU1NfTlVNX0xPT1BTOyBsb29wKyspIHsKPiArCQlzdWJtaXRfYW5kX3N5bmMoZmQsICZleGVj YnVmLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCQlwaW5uaW5nX29mZnNldCA9IFNUUkVTU19TVEFS VF9BRERSRVNTOwo+ICsJCWZvcihidWYgPSAwOyBidWYgPCBTVFJFU1NfTlVNX0JVRkZFUlM7IGJ1 ZisrKSB7Cj4gKwkJCWdlbV91c2VycHRyX3N5bmMoZmQsIHNoYXJlZF9oYW5kbGVbYnVmXSk7Cj4g KwkJCWlndF9hc3NlcnQoZXhlY19vYmplY3QyW2J1Zl0ub2Zmc2V0ID09Cj4gKwkJCQlnZW44X2Nh bm9uaWNhbF9hZGRyKHBpbm5pbmdfb2Zmc2V0KSk7Cj4gKwkJCWlndF9mYWlsX29uX2YoKnNoYXJl ZF9idWZmZXJbYnVmXSAhPSBidWYsIFwKPiArCQkJIk1pc21hdGNoIGluIGJ1ZmZlciAlZCwgXAo+ ICsJCQlpdGVyYXRpb24gJWQ6IDB4JTA4WFxuIiwgYnVmLCBsb29wLCAqc2hhcmVkX2J1ZmZlclti dWZdKTsKPiArCQkJcGlubmluZ19vZmZzZXQgLT0gQUxJR04oQk9fU0laRSwgNDA5Nik7Cj4gKwkJ fQo+ICsJCS8qIFJlc2V0IHRoZSBidWZmZXIgZW50cmllcyBmb3IgbmV4dCBpdGVyYXRpb24gKi8K PiArCQlmb3IoYnVmID0gMDsgYnVmIDwgU1RSRVNTX05VTV9CVUZGRVJTOyBidWYrKykgewo+ICsJ CQkqc2hhcmVkX2J1ZmZlcltidWZdID0gMHhGRkZGRkZGRjsKPiArCQl9Cj4gKwl9Cj4gKwo+ICsJ Zm9yKGJ1ZiA9IDA7IGJ1ZiA8IFNUUkVTU19OVU1fQlVGRkVSUzsgYnVmKyspIHsKPiArCQlnZW1f Y2xvc2UoZmQsIHNoYXJlZF9oYW5kbGVbYnVmXSk7Cj4gKwkJZnJlZShzaGFyZWRfYnVmZmVyW2J1 Zl0pOwo+ICsJfQo+ICsJZ2VtX2Nsb3NlKGZkLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCj4gKwlm cmVlKHNoYXJlZF9oYW5kbGUpOwo+ICsJZnJlZShzaGFyZWRfYnVmZmVyKTsKPiArCWZyZWUoZXhl Y19vYmplY3QyKTsKPiArCWZyZWUoYmF0Y2hfYnVmZmVyKTsKPiArfQo+ICsKPiArLyogZ2VtX3dy aXRlX211bHRpcGFnZV9idWZmZXIKPiArICogQ3JlYXRlIGEgYnVmZmVyIHNwYW5uaW5nIG11bHRp cGxlIHBhZ2VzLCBhbmQgc2hhcmUgd2l0aCBHUFUuCj4gKyAqIFdyaXRlIHRvIGV2ZXJ5IGVsZW1l bnQgb2YgdGhlIGJ1ZmZlcgo+ICsgKiBhbmQgdmVyaWZ5IGNvcnJlY3QgY29udGVudHMuCj4gKwo+ ICsgKiBDcmVhdGUgOEsgYnVmZmVyCj4gKyAqIFNoYXJlIHdpdGggR1BVIHVzaW5nIHVzZXJwdHIg aW9jdGwKPiArICogQ3JlYXRlIGJhdGNoIGJ1ZmZlciB0byB3cml0ZSBEQVRBIGluIGFsbCBlbGVt ZW50cyBvZiBidWZmZXIKPiArICogRXhlY3V0ZSBCYXRjaCBCdWZmZXIKPiArICogVmFsaWRhdGUg ZXZlcnkgZWxlbWVudCBoYXMgREFUQQo+ICsqLwo+ICsKPiArI2RlZmluZSBEV09SRF9TSVpFIHNp emVvZih1aW50MzJfdCkKPiArI2RlZmluZSBCQl9TSVpFICgoTVVMVElQQUdFX0JPX1NJWkUgLyBE V09SRF9TSVpFKSAqIFNUT1JFX0JBVENIX0JVRkZFUl9TSVpFKSArIDIKPiArI2RlZmluZSBOVU1f RFdPUkRTIChNVUxUSVBBR0VfQk9fU0laRS9zaXplb2YodWludDMyX3QpKQo+ICtzdGF0aWMgdm9p ZCBnZW1fd3JpdGVfbXVsdGlwYWdlX2J1ZmZlcl90ZXN0KGludCBmZCkKPiArewo+ICsJaTkxNV9n ZW1fdXNlcnB0ciB1c2VycHRyOwo+ICsJdWludDMyX3QgKnNoYXJlZF9idWZmZXI7Cj4gKwl1aW50 MzJfdCBzaGFyZWRfaGFuZGxlOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBl eGVjYnVmOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgZXhlY19vYmplY3Qy WzJdOwo+ICsJdWludDMyX3QgYmF0Y2hfYnVmZmVyW0JCX1NJWkVdOwo+ICsJdWludDMyX3QgYmF0 Y2hfYnVmX2hhbmRsZTsKPiArCWludCByaW5nLCBsZW4sIGo7Cj4gKwl1aW50NjRfdCBwaW5uaW5n X29mZnNldD0weDEwMDA7Cj4gKwl1aW50NjRfdCB2YWRkcjsKPiArCj4gKwlpZ3RfcmVxdWlyZSh1 c2VzX2Z1bGxfcHBndHQoZmQsIEFMSUFTSU5HX1BQR1RUKSk7Cj4gKwo+ICsJYmF0Y2hfYnVmX2hh bmRsZSA9IGdlbV9jcmVhdGUoZmQsIHNpemVvZihiYXRjaF9idWZmZXIpKTsKPiArCXNoYXJlZF9i dWZmZXIgPSBjcmVhdGVfbWVtX2J1ZmZlcihNVUxUSVBBR0VfQk9fU0laRSk7Cj4gKwo+ICsJbGVu ID0gMDsKPiArCW1lbXNldChiYXRjaF9idWZmZXIsIDAsIHNpemVvZihiYXRjaF9idWZmZXIpKTsK PiArCW1lbXNldChzaGFyZWRfYnVmZmVyLCAwLCBNVUxUSVBBR0VfQk9fU0laRSk7Cj4gKwo+ICsJ Lyogc2hhcmUgd2l0aCBHUFUgKi8KPiArCXNoYXJlZF9oYW5kbGUgPSBpbml0X3VzZXJwdHIoZmQs ICZ1c2VycHRyLCBzaGFyZWRfYnVmZmVyLAo+ICsJCQkJICAgICBNVUxUSVBBR0VfQk9fU0laRSk7 Cj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzBdLCBzaGFyZWRfaGFuZGxlLAo+ICsJ CSAgICAgICBFWEVDX09CSkVDVF9QSU5ORUQsIHBpbm5pbmdfb2Zmc2V0KTsKPiArCj4gKwkvKiBj cmVhdGUgY29tbWFuZCBidWZmZXIgd2l0aCB3cml0ZSBjb21tYW5kcyAqLwo+ICsJdmFkZHIgPSBw aW5uaW5nX29mZnNldDsKPiArCWZvcihqPTA7IGo8IE5VTV9EV09SRFM7IGorKykgewo+ICsJCWxl biArPSBnZW1fc3RvcmVfZGF0YV9zdm0oZmQsIGJhdGNoX2J1ZmZlciArIChsZW4vNCksIHZhZGRy LAo+ICsJCQkJCSAgaiwKPiArCQkJCQkgIChqID09IE5VTV9EV09SRFMgLSAxKSA/IHRydWU6ZmFs c2UpOwo+ICsJCXZhZGRyICs9IHNpemVvZihzaGFyZWRfYnVmZmVyWzBdKTsgIC8qIDQgYnl0ZXMg Ki8KPiArCX0KPiArCj4gKwlnZW1fd3JpdGUoZmQsIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIGJhdGNo X2J1ZmZlciwgbGVuKTsKPiArCj4gKwkvKiBzdWJtaXQgY29tbWFuZCBidWZmZXIgKi8KPiArCXNl dHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMV0sIGJhdGNoX2J1Zl9oYW5kbGUsIDAsIDApOwo+ ICsKPiArCXJpbmcgPSBJOTE1X0VYRUNfUkVOREVSOwo+ICsJc2V0dXBfZXhlY2J1ZmZlcigmZXhl Y2J1ZiwgZXhlY19vYmplY3QyLCByaW5nLCAyLCBsZW4pOwo+ICsJc3VibWl0X2FuZF9zeW5jKGZk LCAmZXhlY2J1ZiwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwlnZW1fdXNlcnB0cl9zeW5jKGZkLCBz aGFyZWRfaGFuZGxlKTsKPiArCj4gKwlpZ3RfYXNzZXJ0KGV4ZWNfb2JqZWN0MlswXS5vZmZzZXQg PT0gcGlubmluZ19vZmZzZXQpOwo+ICsJZm9yKGogPSAwOyBqIDwgKE1VTFRJUEFHRV9CT19TSVpF L3NpemVvZih1aW50MzJfdCkpOyBqKyspIHsKPiArCQlpZ3RfZmFpbF9vbl9mKHNoYXJlZF9idWZm ZXJbal0gIT0gaiwKPiArCQkiTWlzbWF0Y2ggaW4gaW5kZXggJWQ6IDB4JTA4WFxuIiwgaiwgc2hh cmVkX2J1ZmZlcltqXSk7Cj4gKwl9Cj4gKwo+ICsJZ2VtX2Nsb3NlKGZkLCBiYXRjaF9idWZfaGFu ZGxlKTsKPiArCWdlbV9jbG9zZShmZCwgc2hhcmVkX2hhbmRsZSk7Cj4gKwo+ICsJZnJlZShzaGFy ZWRfYnVmZmVyKTsKPiArfQo+ICsKPiArLyogZ2VtX3Bpbl9pbnZhbGlkX3ZtYV90ZXN0Cj4gKyAq IFRoaXMgdGVzdCB3aWxsIHJlcXVlc3QgdG8gcGluIGEgc2hhcmVkIGJ1ZmZlciB0byBhbiBpbnZh bGlkCj4gKyAqIFZNQSAgPiA0OC1iaXQgYWRkcmVzcyBpZiBzeXN0ZW0gc3VwcG9ydHMgNDhCIFBQ R1RUOyBpdCBhbHNvCj4gKyAqIHdpbGwgdGVzdCB0aGF0IGFueSBhdHRlbXB0IG9mIHVzaW5nIGEg NDgtYml0IGFkZHJlc3MgcmVxdWlyZXMKPiArICogdGhlIFNVUFBPUlRTXzQ4Ql9BRERSRVNTIGZs YWcsIGFuZCB0aGF0IDQ4LWJpdCBhZGRyZXNzIG5lZWQgdG8gYmUKPiArICogaW4gY2Fub25pY2Fs IGZvcm0gKGJpdHMgWzYzOjQ4XSA9PSBbNDddKS4KPiArICogSWYgc3lzdGVtIHN1cHBvcnRzIDMy QiBQUEdUVCwgaXQgd2lsbCB0ZXN0IHRoZSBlcXVpdmFsZW50IGludmFsaWQgVk1BCj4gKyAqIENy ZWF0ZSBzaGFyZWQgYnVmZmVyIG9mIHNpemUgNEsKPiArICogVHJ5IGFuZCBQaW4gb2JqZWN0IHRv IGludmFsaWQgYWRkcmVzcwo+ICsqLwo+ICtzdGF0aWMgdm9pZCBnZW1fcGluX2ludmFsaWRfdm1h X3Rlc3QoaW50IGZkLCBib29sIHRlc3RfZGVjb3VwbGVfZmxhZ3MsCj4gKwkJCQkgICAgIGJvb2wg dGVzdF9jYW5vbmljYWxfb2Zmc2V0KQo+ICt7CgpDYW4gYmUgcmVtb3ZlZCBJIHRoaW5rLCBzaG91 bGQgYmUgY292ZXJlZCBieSBnZW1fc29mdHBpbi4KCj4gKwlpOTE1X2dlbV91c2VycHRyIHVzZXJw dHI7Cj4gKwlpbnQgcmV0Owo+ICsJdWludDMyX3QgKnNoYXJlZF9idWZmZXI7Cj4gKwlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X2V4ZWNfb2JqZWN0MiBleGVjX29iamVjdDJbMV07Cj4gKwl1aW50MzJfdCBzaGFyZWRfYnVmX2hh bmRsZTsKPiArCWludCByaW5nOwo+ICsJdWludDY0X3QgaW52YWxpZF9hZGRyZXNzX2Zvcl80OGIg PSAweDkwMDAwMDAwMDAwMDA7IC8qIDUyIGJpdCBhZGRyZXNzICovCj4gKwl1aW50NjRfdCBub25j YW5vbmljYWxfYWRkcmVzc19mb3JfNDhiID0gMHhGRjAwMDAwMDAwMDA7IC8qIDQ4IGJpdCBhZGRy ZXNzIGluIG5vbmNhbm9uaWNhbCBmb3JtICovCj4gKwl1aW50NjRfdCBpbnZhbGlkX2FkZHJlc3Nf Zm9yXzMyYiA9IDB4OTAwMDAwMDAwOyAvKiAzNiBiaXQgYWRkcmVzcyAqLwo+ICsKPiArCWlndF9y ZXF1aXJlKHVzZXNfZnVsbF9wcGd0dChmZCwgRlVMTF80OF9CSVRfUFBHVFQpIHx8Cj4gKwkJICAg IHVzZXNfZnVsbF9wcGd0dChmZCwgRlVMTF8zMl9CSVRfUFBHVFQpKTsKPiArCj4gKwlzaGFyZWRf YnVmZmVyID0gY3JlYXRlX21lbV9idWZmZXIoQk9fU0laRSk7Cj4gKwkqc2hhcmVkX2J1ZmZlciA9 IDB4RkZGRkZGRkY7Cj4gKwo+ICsJLyogc2hhcmUgd2l0aCBHUFUgKi8KPiArCXNoYXJlZF9idWZf aGFuZGxlID0gaW5pdF91c2VycHRyKGZkLCAmdXNlcnB0ciwgc2hhcmVkX2J1ZmZlciwgQk9fU0la RSk7Cj4gKwo+ICsJaWYgKHVzZXNfZnVsbF9wcGd0dChmZCwgRlVMTF80OF9CSVRfUFBHVFQpICYm IHRlc3RfY2Fub25pY2FsX29mZnNldCkgewo+ICsJCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVj dDJbMF0sIHNoYXJlZF9idWZfaGFuZGxlLAo+ICsJCQkgICAgICAgRVhFQ19PQkpFQ1RfUElOTkVE IHwgRVhFQ19PQkpFQ1RfU1VQUE9SVFNfNDhCX0FERFJFU1MsCj4gKwkJCSAgICAgICBub25jYW5v bmljYWxfYWRkcmVzc19mb3JfNDhiKTsKPiArCX0gZWxzZSBpZiAodXNlc19mdWxsX3BwZ3R0KGZk LCBGVUxMXzQ4X0JJVF9QUEdUVCkgJiYgIXRlc3RfZGVjb3VwbGVfZmxhZ3MpIHsKPiArCQlzZXR1 cF9leGVjX29iaigmZXhlY19vYmplY3QyWzBdLCBzaGFyZWRfYnVmX2hhbmRsZSwKPiArCQkJICAg ICAgIEVYRUNfT0JKRUNUX1BJTk5FRCB8IEVYRUNfT0JKRUNUX1NVUFBPUlRTXzQ4Ql9BRERSRVNT LAo+ICsJCQkgICAgICAgaW52YWxpZF9hZGRyZXNzX2Zvcl80OGIpOwo+ICsJfSBlbHNlIHsKPiAr CQkvKiBUaGlzIGFsc28gZmFpbHMgaW4gNDhiIHdpdGhvdXQgNDhCX0FERFJFU1Mgc3VwcG9ydCBm bGFnICovCj4gKwkJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlswXSwgc2hhcmVkX2J1Zl9o YW5kbGUsCj4gKwkJCSAgICAgICBFWEVDX09CSkVDVF9QSU5ORUQsIGludmFsaWRfYWRkcmVzc19m b3JfMzJiKTsKPiArCX0KPiArCj4gKwlyaW5nID0gSTkxNV9FWEVDX1JFTkRFUjsKPiArCj4gKwlz ZXR1cF9leGVjYnVmZmVyKCZleGVjYnVmLCBleGVjX29iamVjdDIsIHJpbmcsIDEsIDApOwo+ICsK PiArCS8qIEV4cGVjdCBleGVjYnVmIHRvIGZhaWwgKi8KPiArCXJldCA9IGRybUlvY3RsKGZkLAo+ ICsJCSAgICAgICBEUk1fSU9DVExfSTkxNV9HRU1fRVhFQ0JVRkZFUjIsCj4gKwkJICAgICAgICZl eGVjYnVmKTsKPiArCj4gKwlpZ3RfYXNzZXJ0KGVycm5vID09IEVJTlZBTCk7Cj4gKwlpZ3RfYXNz ZXJ0X25lcShyZXQsIDApOwo+ICsKPiArCWdlbV9jbG9zZShmZCwgc2hhcmVkX2J1Zl9oYW5kbGUp Owo+ICsJZnJlZShzaGFyZWRfYnVmZmVyKTsKPiArfQo+ICsKPiArCj4gKy8qIGdlbV9waW5faGln aF9hZGRyZXNzX3Rlc3QKPiArICogVGhpcyB0ZXN0IHdpbGwgY3JlYXRlIGEgc2hhcmVkIGJ1ZmZl ciwgYW5kIGNyZWF0ZSBhIGNvbW1hbmQKPiArICogZm9yIEdQVSB0byB3cml0ZSBkYXRhIGluIGl0 LiBJdCB3aWxsIGF0dGVtcHQgdG8gcGluIHRoZSBidWZmZXIgYXQgYWRkcmVzcyA+IDMyIGJpdHMu Cj4gKyAqIENQVSB3aWxsIHJlYWQgYW5kIG1ha2Ugc3VyZSBleHBlY3RlZCB2YWx1ZSBpcyBvYnRh aW5lZAo+ICsKPiArICogTWFsbG9jIGEgNEsgYnVmZmVyCj4gKyAqIFNoYXJlIGJ1ZmZlciB3aXRo IHdpdGggR1BVIGJ5IHVzaW5nIHVzZXJwdHIgaW9jdGwKPiArICogQ3JlYXRlIGJhdGNoIGJ1ZmZl ciB0byB3cml0ZSBEQVRBIHRvIGZpcnN0IGR3b3JkIG9mIGJ1ZmZlcgo+ICsgKiBVc2UgdmlydHVh bCBhZGRyZXNzIG9mIGJ1ZmZlciBhcyAweDExMDAwMDAwMDAgKD4gMzIgYml0KQo+ICsgKiBTZXQg RVhFQ19PQkpFQ1RfUElOTkVEIGZsYWcgaW4gZXhlYyBvYmplY3QKPiArICogU2V0ICdvZmZzZXQn IGluIGV4ZWMgb2JqZWN0IHRvIHNoYXJlZCBidWZmZXIgVk1BCj4gKyAqIFN1Ym1pdCBleGVjYnVm ZmVyCj4gKyAqIFZlcmlmeSB2YWx1ZSBvZiBmaXJzdCBEV09SRCBpbiBzaGFyZWQgYnVmZmVyIG1h dGNoZXMgREFUQQo+ICsqLwo+ICsKPiArc3RhdGljIHZvaWQgZ2VtX3Bpbl9oaWdoX2FkZHJlc3Nf dGVzdChpbnQgZmQpCj4gK3sKPiArCWk5MTVfZ2VtX3VzZXJwdHIgdXNlcnB0cjsKPiArCXVpbnQz Ml90ICpzaGFyZWRfYnVmZmVyOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBl eGVjYnVmOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgZXhlY19vYmplY3Qy WzJdOwo+ICsJdWludDMyX3QgYmF0Y2hfYnVmZmVyW1NUT1JFX0JBVENIX0JVRkZFUl9TSVpFICsg Ml07Cj4gKwl1aW50MzJfdCBiYXRjaF9idWZfaGFuZGxlLCBzaGFyZWRfYnVmX2hhbmRsZTsKPiAr CWludCByaW5nLCBsZW47Cj4gKwljb25zdCB1aW50MzJfdCBkYXRhID0gMHgxMjM0NTY3ODsKPiAr CXVpbnQ2NF90IGhpZ2hfYWRkcmVzcyA9IDB4MTExMUZGRkYwMDA7IC8qIDQ0IGJpdCBhZGRyZXNz ICovCj4gKwo+ICsJaWd0X3JlcXVpcmUodXNlc19mdWxsX3BwZ3R0KGZkLCBGVUxMXzQ4X0JJVF9Q UEdUVCkpOwo+ICsKPiArCWJhdGNoX2J1Zl9oYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCBCT19TSVpF KTsKPiArCj4gKwkvKiBjcmVhdGUgY3B1IGJ1ZmZlciwgc2V0IHRvIGFsbCAweEYncyAqLwo+ICsJ c2hhcmVkX2J1ZmZlciA9IGNyZWF0ZV9tZW1fYnVmZmVyKEJPX1NJWkUpOwo+ICsJKnNoYXJlZF9i dWZmZXIgPSAweEZGRkZGRkZGOwo+ICsKPiArCS8qIHNoYXJlIHdpdGggR1BVICovCj4gKwlzaGFy ZWRfYnVmX2hhbmRsZSA9IGluaXRfdXNlcnB0cihmZCwgJnVzZXJwdHIsIHNoYXJlZF9idWZmZXIs IEJPX1NJWkUpOwo+ICsKPiArCS8qIGNyZWF0ZSBjb21tYW5kIGJ1ZmZlciB3aXRoIHdyaXRlIGNv bW1hbmQgKi8KPiArCWxlbiA9IGdlbV9zdG9yZV9kYXRhX3N2bShmZCwgYmF0Y2hfYnVmZmVyLCBo aWdoX2FkZHJlc3MsIGRhdGEsIHRydWUpOwo+ICsJZ2VtX3dyaXRlKGZkLCBiYXRjaF9idWZfaGFu ZGxlLCAwLCBiYXRjaF9idWZmZXIsIGxlbik7Cj4gKwo+ICsJLyogc3VibWl0IGNvbW1hbmQgYnVm ZmVyICovCj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19vYmplY3QyWzBdLCBzaGFyZWRfYnVmX2hh bmRsZSwKPiArCQkgICAgICAgRVhFQ19PQkpFQ1RfUElOTkVEIHwgRVhFQ19PQkpFQ1RfU1VQUE9S VFNfNDhCX0FERFJFU1MsIGhpZ2hfYWRkcmVzcyk7Cj4gKwlzZXR1cF9leGVjX29iaigmZXhlY19v YmplY3QyWzFdLCBiYXRjaF9idWZfaGFuZGxlLCAwLCAwKTsKPiArCj4gKwlyaW5nID0gSTkxNV9F WEVDX1JFTkRFUjsKPiArCj4gKwlzZXR1cF9leGVjYnVmZmVyKCZleGVjYnVmLCBleGVjX29iamVj dDIsIHJpbmcsIDIsIGxlbik7Cj4gKwlzdWJtaXRfYW5kX3N5bmMoZmQsICZleGVjYnVmLCBiYXRj aF9idWZfaGFuZGxlKTsKPiArCWdlbV91c2VycHRyX3N5bmMoZmQsIHNoYXJlZF9idWZfaGFuZGxl KTsKPiArCj4gKwlpZ3RfYXNzZXJ0KGV4ZWNfb2JqZWN0MlswXS5vZmZzZXQgPT0gaGlnaF9hZGRy ZXNzKTsKPiArCS8qIGNoZWNrIG9uIENQVSB0byBzZWUgaWYgdmFsdWUgY2hhbmdlcyAqLwo+ICsJ aWd0X2ZhaWxfb25fZihzaGFyZWRfYnVmZmVyWzBdICE9IGRhdGEsCj4gKwkJIlxuQ1BVIHJlYWQg ZG9lcyBub3QgbWF0Y2ggR1BVIHdyaXRlLCBcCj4gKwkJZXhwZWN0ZWQ6IDB4JXgsIGdvdDogMHgl eFxuIiwgZGF0YSwgc2hhcmVkX2J1ZmZlclswXSk7Cj4gKwo+ICsJZ2VtX2Nsb3NlKGZkLCBiYXRj aF9idWZfaGFuZGxlKTsKPiArCWdlbV9jbG9zZShmZCwgc2hhcmVkX2J1Zl9oYW5kbGUpOwo+ICsJ ZnJlZShzaGFyZWRfYnVmZmVyKTsKPiArfQo+ICsKPiArLyogZ2VtX3Bpbl9uZWFyXzQ4Qml0X3Rl c3QKPiArICogVGhpcyB0ZXN0IHdpbGwgY3JlYXRlIGEgc2hhcmVkIGJ1ZmZlciwKPiArICogYW5k IGNyZWF0ZSBhIGNvbW1hbmQgZm9yIEdQVSB0byB3cml0ZSBkYXRhIGluIGl0LiBJdCB3aWxsIGF0 dGVtcHQKPiArICogdG8gcGluIHRoZSBidWZmZXIgYXQgYWRkcmVzcyA+IDQ3IGJpdHMgPD0gNDgt Yml0Lgo+ICsgKiBDUFUgd2lsbCByZWFkIGFuZCBtYWtlIHN1cmUgZXhwZWN0ZWQgdmFsdWUgaXMg b2J0YWluZWQuCj4gKyAqIE5vdGUgdGhhdCB3ZSBtdXN0IHN1Ym1pdCBhZGRyZXNzZXMgaW4gY2Fu b25pY2FsIGZvcm0sIG5vdCBvbmx5Cj4gKyAqIGJlY2F1c2UgdGhlIGFkZHJlc3NzIHdpbGwgYmUg dmFsaWRhdGVkLCBidXQgYWxzbyB0aGUgcmV0dXJuZWQgb2Zmc2V0Cj4gKyAqIHdpbGwgYmUgaW4g dGhpcyBmb3JtYXQuCj4gKwo+ICsgKiBNYWxsb2MgYSA0SyBidWZmZXIKPiArICogU2hhcmUgYnVm ZmVyIHdpdGggd2l0aCBHUFUgYnkgdXNpbmcgdXNlcnB0ciBpb2N0bAo+ICsgKiBDcmVhdGUgYmF0 Y2ggYnVmZmVyIHRvIHdyaXRlIERBVEEgdG8gZmlyc3QgZHdvcmQgb2YgYnVmZmVyCj4gKyAqIFVz ZSB2aXJ0dWFsIGFkZHJlc3Mgb2YgYnVmZmVyIGFzIHJhbmdlIGJldHdlZW4gNDctYml0IGFuZCA0 OC1iaXQKPiArICogU2V0IEVYRUNfT0JKRUNUX1BJTk5FRCBmbGFnIGluIGV4ZWMgb2JqZWN0Cj4g KyAqIFNldCAnb2Zmc2V0JyBpbiBleGVjIG9iamVjdCB0byBzaGFyZWQgYnVmZmVyIFZNQQo+ICsg KiBTdWJtaXQgZXhlY2J1ZmZlcgo+ICsgKiBWZXJpZnkgdmFsdWUgb2YgZmlyc3QgRFdPUkQgaW4g c2hhcmVkIGJ1ZmZlciBtYXRjaGVzIERBVEEKPiArKi8KPiArI2RlZmluZSBCRUdJTl9ISUdIX0FE RFJFU1MgMHg3RkZGRkZGRkYwMDAKPiArI2RlZmluZSBFTkRfSElHSF9BRERSRVNTIDB4RkZGRkZG RkZDMDAwCj4gKyNkZWZpbmUgQUREUkVTU19JTkNSRU1FTlQgMHgyMDAwMDAwMDAwCj4gK3N0YXRp YyB2b2lkIGdlbV9waW5fbmVhcl80OEJpdF90ZXN0KGludCBmZCkKPiArewo+ICsJaTkxNV9nZW1f dXNlcnB0ciB1c2VycHRyOwo+ICsJdWludDMyX3QgKnNoYXJlZF9idWZmZXI7Cj4gKwlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X2V4ZWNfb2JqZWN0MiBleGVjX29iamVjdDJbMl07Cj4gKwl1aW50MzJfdCBiYXRjaF9idWZmZXJb Qk9fU0laRV07Cj4gKwl1aW50MzJfdCBiYXRjaF9idWZfaGFuZGxlLCBzaGFyZWRfYnVmX2hhbmRs ZTsKPiArCWludCByaW5nLCBsZW47Cj4gKwljb25zdCB1aW50MzJfdCBkYXRhID0gMHgxMjM0NTY3 ODsKPiArCXVpbnQ2NF90IGhpZ2hfYWRkcmVzcywgY2FuX2hpZ2hfYWRkcmVzczsKPiArCj4gKwlp Z3RfcmVxdWlyZSh1c2VzX2Z1bGxfcHBndHQoZmQsIEZVTExfNDhfQklUX1BQR1RUKSk7Cj4gKwo+ ICsJYmF0Y2hfYnVmX2hhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIEJPX1NJWkUpOwo+ICsKPiArCS8q IGNyZWF0ZSBjcHUgYnVmZmVyLCBzZXQgdG8gYWxsIDB4RidzICovCj4gKwlzaGFyZWRfYnVmZmVy ID0gY3JlYXRlX21lbV9idWZmZXIoQk9fU0laRSk7Cj4gKwkqc2hhcmVkX2J1ZmZlciA9IDB4RkZG RkZGRkY7Cj4gKwo+ICsJLyogc2hhcmUgd2l0aCBHUFUgKi8KPiArCXNoYXJlZF9idWZfaGFuZGxl ID0gaW5pdF91c2VycHRyKGZkLCAmdXNlcnB0ciwgc2hhcmVkX2J1ZmZlciwgQk9fU0laRSk7Cj4g Kwo+ICsJZm9yIChoaWdoX2FkZHJlc3MgPSBCRUdJTl9ISUdIX0FERFJFU1M7IGhpZ2hfYWRkcmVz cyA8PSBFTkRfSElHSF9BRERSRVNTOwo+ICsJCQkJCQloaWdoX2FkZHJlc3MrPUFERFJFU1NfSU5D UkVNRU5UKSB7Cj4gKwkJY2FuX2hpZ2hfYWRkcmVzcyA9IGdlbjhfY2Fub25pY2FsX2FkZHIoaGln aF9hZGRyZXNzKTsKPiArCQkvKiBjcmVhdGUgY29tbWFuZCBidWZmZXIgd2l0aCB3cml0ZSBjb21t YW5kICovCj4gKwkJbGVuID0gZ2VtX3N0b3JlX2RhdGFfc3ZtKGZkLCBiYXRjaF9idWZmZXIsIGNh bl9oaWdoX2FkZHJlc3MsCj4gKwkJCQkJZGF0YSwgdHJ1ZSk7Cj4gKwkJZ2VtX3dyaXRlKGZkLCBi YXRjaF9idWZfaGFuZGxlLCAwLCBiYXRjaF9idWZmZXIsIGxlbik7Cj4gKwkJLyogc3VibWl0IGNv bW1hbmQgYnVmZmVyICovCj4gKwkJc2V0dXBfZXhlY19vYmooJmV4ZWNfb2JqZWN0MlswXSwgc2hh cmVkX2J1Zl9oYW5kbGUsCj4gKwkJCSAgICAgICBFWEVDX09CSkVDVF9QSU5ORUQgfCBFWEVDX09C SkVDVF9TVVBQT1JUU180OEJfQUREUkVTUywKPiArCQkJICAgICAgIGNhbl9oaWdoX2FkZHJlc3Mp Owo+ICsJCXNldHVwX2V4ZWNfb2JqKCZleGVjX29iamVjdDJbMV0sIGJhdGNoX2J1Zl9oYW5kbGUs IDAsIDApOwo+ICsKPiArCQlyaW5nID0gSTkxNV9FWEVDX1JFTkRFUjsKPiArCQlzZXR1cF9leGVj YnVmZmVyKCZleGVjYnVmLCBleGVjX29iamVjdDIsIHJpbmcsIDIsIGxlbik7Cj4gKwkJc3VibWl0 X2FuZF9zeW5jKGZkLCAmZXhlY2J1ZiwgYmF0Y2hfYnVmX2hhbmRsZSk7Cj4gKwkJZ2VtX3VzZXJw dHJfc3luYyhmZCwgc2hhcmVkX2J1Zl9oYW5kbGUpOwo+ICsKPiArCQlpZ3RfYXNzZXJ0KGV4ZWNf b2JqZWN0MlswXS5vZmZzZXQgPT0gY2FuX2hpZ2hfYWRkcmVzcyk7Cj4gKwkJLyogY2hlY2sgb24g Q1BVIHRvIHNlZSBpZiB2YWx1ZSBjaGFuZ2VzICovCj4gKwkJaWd0X2ZhaWxfb25fZihzaGFyZWRf YnVmZmVyWzBdICE9IGRhdGEsCj4gKwkJIlxuQ1BVIHJlYWQgZG9lcyBub3QgbWF0Y2ggR1BVIHdy aXRlLCBleHBlY3RlZDogMHgleCwgXAo+ICsJCWdvdDogMHgleFxuLCAweCUiUFJJeDY0IiIsIGRh dGEsIHNoYXJlZF9idWZmZXJbMF0sIGhpZ2hfYWRkcmVzcyk7Cj4gKwl9Cj4gKwo+ICsJZ2VtX2Ns b3NlKGZkLCBiYXRjaF9idWZfaGFuZGxlKTsKPiArCWdlbV9jbG9zZShmZCwgc2hhcmVkX2J1Zl9o YW5kbGUpOwo+ICsJZnJlZShzaGFyZWRfYnVmZmVyKTsKPiArfQo+ICsKPiArCj4gK2lndF9tYWlu Cj4gK3sKPiArCWludCBmZCA9IC0xOwo+ICsKPiArCWlndF9za2lwX29uX3NpbXVsYXRpb24oKTsK PiArCj4gKwlpZ3RfZml4dHVyZSB7Cj4gKwkJZmQgPSBkcm1fb3Blbl9kcml2ZXIoRFJJVkVSX0lO VEVMKTsKPiArCQlpZ3RfcmVxdWlyZShnZW1faGFzX3NvZnRwaW4oZmQpKTsKPiArCX0KPiArCj4g KwkvKiBBbGwgdGVzdHMgbmVlZCBQUEdUVCBzdXBwb3J0ICovCj4gKwlpZ3Rfc3VidGVzdCgiZ2Vt X3Bpbl91c2VycHRyIikKPiArCQlnZW1fcGluX3VzZXJwdHJfdGVzdChmZCk7Cj4gKwlpZ3Rfc3Vi dGVzdCgiZ2VtX3Bpbl9ibyIpCj4gKwkJZ2VtX3Bpbl9ib190ZXN0KGZkKTsKPiArCWlndF9zdWJ0 ZXN0KCJnZW1fbXVsdGlwbGVfcHJvY2VzcyIpCj4gKwkJZ2VtX211bHRpcGxlX3Byb2Nlc3NfdGVz dChmZCk7Cj4gKwlpZ3Rfc3VidGVzdCgiZ2VtX3JlcGluIikKPiArCQlnZW1fcmVwaW5fdGVzdChm ZCk7Cj4gKwlpZ3Rfc3VidGVzdCgiZ2VtX3Bpbl9vdmVybGFwIikKPiArCQlnZW1fcGluX292ZXJs YXBfdGVzdChmZCk7Cj4gKwlpZ3Rfc3VidGVzdCgiZ2VtX3dyaXRlX211bHRpcGFnZV9idWZmZXIi KQo+ICsJCWdlbV93cml0ZV9tdWx0aXBhZ2VfYnVmZmVyX3Rlc3QoZmQpOwo+ICsKPiArCS8qIEZv bGxvd2luZyB0ZXN0cyBuZWVkIDMyLzQ4IEJpdCBQUEdUVCBzdXBwb3J0ICovCj4gKwlpZ3Rfc3Vi dGVzdCgiZ2VtX3Bpbl9pbnZhbGlkX3ZtYSIpCj4gKwkJZ2VtX3Bpbl9pbnZhbGlkX3ZtYV90ZXN0 KGZkLCBmYWxzZSwgZmFsc2UpOwo+ICsKPiArCS8qIEZvbGxvd2luZyB0ZXN0cyBuZWVkIDQ4IEJp dCBQUEdUVCBzdXBwb3J0ICovCj4gKwlpZ3Rfc3VidGVzdCgiZ2VuX3Bpbl9ub25jYW5vbmljYWxf aGlnaF9hZGRyZXNzIikKPiArCQlnZW1fcGluX2ludmFsaWRfdm1hX3Rlc3QoZmQsIGZhbHNlLCB0 cnVlKTsKPiArCWlndF9zdWJ0ZXN0KCJnZW1fcGluX2hpZ2hfYWRkcmVzc193aXRob3V0X2NvcnJl Y3RfZmxhZyIpCj4gKwkJZ2VtX3Bpbl9pbnZhbGlkX3ZtYV90ZXN0KGZkLCB0cnVlLCBmYWxzZSk7 Cj4gKwlpZ3Rfc3VidGVzdCgiZ2VtX3NvZnRwaW5fc3RyZXNzIikKPiArCQlnZW1fc29mdHBpbl9z dHJlc3NfdGVzdChmZCk7Cj4gKwlpZ3Rfc3VidGVzdCgiZ2VtX3Bpbl9oaWdoX2FkZHJlc3MiKQo+ ICsJCWdlbV9waW5faGlnaF9hZGRyZXNzX3Rlc3QoZmQpOwo+ICsJaWd0X3N1YnRlc3QoImdlbV9w aW5fbmVhcl80OEJpdCIpCj4gKwkJZ2VtX3Bpbl9uZWFyXzQ4Qml0X3Rlc3QoZmQpOwo+ICsKPiAr CWlndF9maXh0dXJlCj4gKwkJY2xvc2UoZmQpOwo+ICsKPiArCWlndF9leGl0KCk7Cj4gK30KPgoK TG9va3Mgb2theWlzaCB0byBtZS4gWW91IGNvdWxkIHRpZHkgdGhlIGNvdXBsZSB0aGluZ3MgSSd2 ZSBub3RpY2VkLCBidXQgCmVpdGhlciB3YXk6CgpSZXZpZXdlZC1ieTogVHZydGtvIFVyc3VsaW4g PHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KCkFub3RoZXIgdGhpbmcgd2hpY2ggSSBub3RpY2Vk IGlzIHRoYXQgYWxsIHRoZSB0ZXN0cyBhcmUgIndyaXRlIGJ5IHRoZSAKR1BVLCByZWFkIGJ5IHRo ZSBDUFUiLiBQZXJoYXBzIGFzIGEgZm9sbG93IHVwIHlvdSBzaG91bGQgYWRkIHNvbWUgd2hpY2gg Cm9wZXJhdGUgaW4gdGhlIG9wcG9zaXRlIGZhc2hpb24sIGlmIHRoYXQgaXMgaW50ZXJlc3Rpbmcg Zm9yIHRoZSBidWZmZXJlZCAKU1ZNIHVzZSBjYXNlcy4gU2hvdWxkIGJlIEkgdGhpbmsuCgpSZWdh cmRzLAoKVHZydGtvCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVsLWdm eAo=