From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH 46/46] drm/i915: Add initial selftests for hang detection and resets Date: Thu, 02 Feb 2017 15:28:01 +0200 Message-ID: <87d1f090ym.fsf@gaia.fi.intel.com> References: <20170202090905.29028-1-chris@chris-wilson.co.uk> <20170202090905.29028-47-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 771246E9F3 for ; Thu, 2 Feb 2017 13:29:23 +0000 (UTC) In-Reply-To: <20170202090905.29028-47-chris@chris-wilson.co.uk> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+IHdyaXRlczoKCj4gQ2hlY2sg dGhhdCB3ZSBjYW4gcmVzZXQgdGhlIEdQVSBhbmQgY29udGludWUgZXhlY3V0aW5nIGZyb20gdGhl IG5leHQKPiByZXF1ZXN0Lgo+Cj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0Bj aHJpcy13aWxzb24uY28udWs+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2 LmggICAgICAgICAgICAgICAgICAgIHwgICA0ICstCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2lu dGVsX2hhbmdjaGVjay5jICAgICAgICAgICAgIHwgICA0ICsKPiAgLi4uL2dwdS9kcm0vaTkxNS9z ZWxmdGVzdHMvaTkxNV9saXZlX3NlbGZ0ZXN0cy5oICAgfCAgIDEgKwo+ICBkcml2ZXJzL2dwdS9k cm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfaGFuZ2NoZWNrLmMgICB8IDUzMSArKysrKysrKysrKysr KysrKysrKysKPiAgNCBmaWxlcyBjaGFuZ2VkLCA1MzggaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlv bnMoLSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0 cy9pbnRlbF9oYW5nY2hlY2suYwo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2k5MTVfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oCj4gaW5kZXggNGE3 ZTRiMTBjMGE5Li5mODJjNTk3NjhmNjUgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaTkxNV9kcnYuaAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmgKPiBA QCAtMzM1Niw4ICszMzU2LDggQEAgaW50IF9fbXVzdF9jaGVjayBpOTE1X2dlbV9pbml0KHN0cnVj dCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7Cj4gIGludCBfX211c3RfY2hlY2sgaTkxNV9n ZW1faW5pdF9odyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYpOwo+ICB2b2lkIGk5 MTVfZ2VtX2luaXRfc3dpenpsaW5nKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdik7 Cj4gIHZvaWQgaTkxNV9nZW1fY2xlYW51cF9lbmdpbmVzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICpkZXZfcHJpdik7Cj4gLWludCBfX211c3RfY2hlY2sgaTkxNV9nZW1fd2FpdF9mb3JfaWRsZShz dHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4gLQkJCQkJdW5zaWduZWQgaW50IGZs YWdzKTsKPiAraW50IGk5MTVfZ2VtX3dhaXRfZm9yX2lkbGUoc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmRldl9wcml2LAo+ICsJCQkgICB1bnNpZ25lZCBpbnQgZmxhZ3MpOwo+ICBpbnQgX19tdXN0 X2NoZWNrIGk5MTVfZ2VtX3N1c3BlbmQoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9wcml2 KTsKPiAgdm9pZCBpOTE1X2dlbV9yZXN1bWUoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmRldl9w cml2KTsKPiAgaW50IGk5MTVfZ2VtX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBz dHJ1Y3Qgdm1fZmF1bHQgKnZtZik7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L2ludGVsX2hhbmdjaGVjay5jIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGFuZ2NoZWNr LmMKPiBpbmRleCBmMDU5NzFmNTU4NmYuLmRjZTc0MjI0M2JhNiAxMDA2NDQKPiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oYW5nY2hlY2suYwo+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2ludGVsX2hhbmdjaGVjay5jCj4gQEAgLTQ4MCwzICs0ODAsNyBAQCB2b2lkIGludGVs X2hhbmdjaGVja19pbml0KHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICAJSU5JVF9E RUxBWUVEX1dPUksoJmk5MTUtPmdwdV9lcnJvci5oYW5nY2hlY2tfd29yaywKPiAgCQkJICBpOTE1 X2hhbmdjaGVja19lbGFwc2VkKTsKPiAgfQo+ICsKPiArI2lmIElTX0VOQUJMRUQoQ09ORklHX0RS TV9JOTE1X1NFTEZURVNUKQo+ICsjaW5jbHVkZSAic2VsZnRlc3RzL2ludGVsX2hhbmdjaGVjay5j Igo+ICsjZW5kaWYKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3Rz L2k5MTVfbGl2ZV9zZWxmdGVzdHMuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9p OTE1X2xpdmVfc2VsZnRlc3RzLmgKPiBpbmRleCAxNWZiNGUwZGQ1MDMuLmQwZDRmNGJjZDgzNyAx MDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9saXZlX3Nl bGZ0ZXN0cy5oCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfbGl2 ZV9zZWxmdGVzdHMuaAo+IEBAIC0xNiwzICsxNiw0IEBAIHNlbGZ0ZXN0KGRtYWJ1ZiwgaTkxNV9n ZW1fZG1hYnVmX2xpdmVfc2VsZnRlc3RzKQo+ICBzZWxmdGVzdChjb2hlcmVuY3ksIGk5MTVfZ2Vt X2NvaGVyZW5jeV9saXZlX3NlbGZ0ZXN0cykKPiAgc2VsZnRlc3QoZ3R0LCBpOTE1X2dlbV9ndHRf bGl2ZV9zZWxmdGVzdHMpCj4gIHNlbGZ0ZXN0KGNvbnRleHQsIGk5MTVfZ2VtX2NvbnRleHRfbGl2 ZV9zZWxmdGVzdHMpCj4gK3NlbGZ0ZXN0KGhhbmdjaGVjaywgaW50ZWxfaGFuZ2NoZWNrX2xpdmVf c2VsZnRlc3RzKQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMv aW50ZWxfaGFuZ2NoZWNrLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxf aGFuZ2NoZWNrLmMKPiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+IGluZGV4IDAwMDAwMDAwMDAwMC4u MjEzMWQ4NzA3ZGZkCj4gLS0tIC9kZXYvbnVsbAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1 L3NlbGZ0ZXN0cy9pbnRlbF9oYW5nY2hlY2suYwo+IEBAIC0wLDAgKzEsNTMxIEBACj4gKy8qCj4g KyAqIENvcHlyaWdodCDCqSAyMDE2IEludGVsIENvcnBvcmF0aW9uCj4gKyAqCj4gKyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhCj4gKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1 bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCj4gKyAqIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24K PiArICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRp c3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCj4gKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29m dHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQo+ICsgKiBTb2Z0d2FyZSBp cyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25z Ogo+ICsgKgo+ICsgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz aW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0Cj4gKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUg aW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKPiAr ICogU29mdHdhcmUuCj4gKyAqCj4gKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMi LCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCj4gKyAqIElNUExJRUQs IElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZLAo+ICsgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G UklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKPiArICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJ R0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKPiAr ICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBP VEhFUldJU0UsIEFSSVNJTkcKPiArICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lU SCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUwo+ICsgKiBJTiBUSEUg U09GVFdBUkUuCj4gKyAqCj4gKyAqLwo+ICsKPiArI2luY2x1ZGUgIi4uL2k5MTVfc2VsZnRlc3Qu aCIKPiArCj4gK3N0cnVjdCBoYW5nIHsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1 Owo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmh3czsKPiArCXN0cnVjdCBkcm1faTkx NV9nZW1fb2JqZWN0ICpvYmo7Cj4gKwl1MzIgKnNlcW5vOwo+ICsJdTMyICpiYXRjaDsKPiArfTsK PiArCj4gK3N0YXRpYyBpbnQgaGFuZ19pbml0KHN0cnVjdCBoYW5nICpoLCBzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqaTkxNSkKPiArewo+ICsJdm9pZCAqdmFkZHI7Cj4gKwlpbnQgZXJyOwo+ICsK PiArCW1lbXNldChoLCAwLCBzaXplb2YoKmgpKTsKPiArCWgtPmk5MTUgPSBpOTE1Owo+ICsKPiAr CWgtPmh3cyA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfaW50ZXJuYWwoaTkxNSwgUEFHRV9TSVpF KTsKPiArCWlmIChJU19FUlIoaC0+aHdzKSkKPiArCQlyZXR1cm4gUFRSX0VSUihoLT5od3MpOwo+ ICsKPiArCWgtPm9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfaW50ZXJuYWwoaTkxNSwgUEFH RV9TSVpFKTsKPiArCWlmIChJU19FUlIoaC0+b2JqKSkgewo+ICsJCWVyciA9IFBUUl9FUlIoaC0+ b2JqKTsKPiArCQlnb3RvIGVycl9od3M7CgpQZXJzb25hbGx5IEkgbGlrZSB0aGUgdmVyYiBhZGRl ZCB0byB0aGUgZ290by4gTGlrZSBnb3RvIGZyZWVfaHdzLApwdXRfaHdzIG9yIGlmIHlvdSBwcmVm ZXIsIGVycl9mcmVlX2h3cy4gVGhlIHVwc2lkZSBpcwp0aGF0IGNvbXBhcmluZyB0aGlzIGNvZGUg dG8gd2hhdCBoYXBwZW5zIGFib3ZlIGFuZCByZXZpZXdpbmcKdGhlIGFjdHVhbCBlcnJvciBjbGVh bnVwcyBpbiB0aGUgZW5kIG9mIGZ1bmN0aW9uIGNhbgpiZSBtYWRlIGluIHNlcGFyYXRlIHBoYXNl cywgd2l0aG91dCBqdW1waW5nIGJhY2sgYW5kCmZvcnRoIGluIGVkaXRvciAoaW4gbW9zdCBjYXNl cykuCgpSZXZpZXdlZC1ieTogTWlrYSBLdW9wcGFsYSA8bWlrYS5rdW9wcGFsYUBpbnRlbC5jb20+ Cgo+ICsJfQo+ICsKPiArCWk5MTVfZ2VtX29iamVjdF9zZXRfY2FjaGVfbGV2ZWwoaC0+aHdzLCBJ OTE1X0NBQ0hFX0xMQyk7Cj4gKwl2YWRkciA9IGk5MTVfZ2VtX29iamVjdF9waW5fbWFwKGgtPmh3 cywgSTkxNV9NQVBfV0IpOwo+ICsJaWYgKElTX0VSUih2YWRkcikpIHsKPiArCQllcnIgPSBQVFJf RVJSKHZhZGRyKTsKPiArCQlnb3RvIGVycl9vYmo7Cj4gKwl9Cj4gKwloLT5zZXFubyA9IG1lbXNl dCh2YWRkciwgMHhmZiwgUEFHRV9TSVpFKTsKPiArCj4gKwl2YWRkciA9IGk5MTVfZ2VtX29iamVj dF9waW5fbWFwKGgtPm9iaiwKPiArCQkJCQlIQVNfTExDKGk5MTUpID8gSTkxNV9NQVBfV0IgOiBJ OTE1X01BUF9XQyk7Cj4gKwlpZiAoSVNfRVJSKHZhZGRyKSkgewo+ICsJCWVyciA9IFBUUl9FUlIo dmFkZHIpOwo+ICsJCWdvdG8gZXJyX3VucGluX2h3czsKPiArCX0KPiArCWgtPmJhdGNoID0gdmFk ZHI7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gKwo+ICtlcnJfdW5waW5faHdzOgo+ICsJaTkxNV9nZW1f b2JqZWN0X3VucGluX21hcChoLT5od3MpOwo+ICtlcnJfb2JqOgo+ICsJaTkxNV9nZW1fb2JqZWN0 X3B1dChoLT5vYmopOwo+ICtlcnJfaHdzOgo+ICsJaTkxNV9nZW1fb2JqZWN0X3B1dChoLT5od3Mp Owo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsKPiArc3RhdGljIHU2NCBod3NfYWRkcmVzcyhjb25z dCBzdHJ1Y3QgaTkxNV92bWEgKmh3cywKPiArCQkgICAgICAgY29uc3Qgc3RydWN0IGRybV9pOTE1 X2dlbV9yZXF1ZXN0ICpycSkKPiArewo+ICsJcmV0dXJuIGh3cy0+bm9kZS5zdGFydCArIG9mZnNl dF9pbl9wYWdlKHNpemVvZih1MzIpKnJxLT5mZW5jZS5jb250ZXh0KTsKPiArfQo+ICsKPiArc3Rh dGljIGludCBlbWl0X3JlY3Vyc2VfYmF0Y2goc3RydWN0IGhhbmcgKmgsCj4gKwkJCSAgICAgIHN0 cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcnEpCj4gK3sKPiArCXN0cnVjdCBkcm1faTkxNV9w cml2YXRlICppOTE1ID0gaC0+aTkxNTsKPiArCXN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2UgKnZt ID0gcnEtPmN0eC0+cHBndHQgPyAmcnEtPmN0eC0+cHBndHQtPmJhc2UgOiAmaTkxNS0+Z2d0dC5i YXNlOwo+ICsJc3RydWN0IGk5MTVfdm1hICpod3MsICp2bWE7Cj4gKwl1bnNpZ25lZCBpbnQgZmxh Z3M7Cj4gKwl1MzIgKmJhdGNoOwo+ICsJaW50IGVycjsKPiArCj4gKwl2bWEgPSBpOTE1X3ZtYV9p bnN0YW5jZShoLT5vYmosIHZtLCBOVUxMKTsKPiArCWlmIChJU19FUlIodm1hKSkKPiArCQlyZXR1 cm4gUFRSX0VSUih2bWEpOwo+ICsKPiArCWh3cyA9IGk5MTVfdm1hX2luc3RhbmNlKGgtPmh3cywg dm0sIE5VTEwpOwo+ICsJaWYgKElTX0VSUihod3MpKQo+ICsJCXJldHVybiBQVFJfRVJSKGh3cyk7 Cj4gKwo+ICsJZXJyID0gaTkxNV92bWFfcGluKHZtYSwgMCwgMCwgUElOX1VTRVIpOwo+ICsJaWYg KGVycikKPiArCQlyZXR1cm4gZXJyOwo+ICsKPiArCWVyciA9IGk5MTVfdm1hX3Bpbihod3MsIDAs IDAsIFBJTl9VU0VSKTsKPiArCWlmIChlcnIpCj4gKwkJZ290byB1bnBpbl92bWE7Cj4gKwo+ICsJ ZXJyID0gcnEtPmVuZ2luZS0+ZW1pdF9mbHVzaChycSwgRU1JVF9JTlZBTElEQVRFKTsKPiArCWlm IChlcnIpCj4gKwkJZ290byB1bnBpbl9od3M7Cj4gKwo+ICsJZXJyID0gaTkxNV9zd2l0Y2hfY29u dGV4dChycSk7Cj4gKwlpZiAoZXJyKQo+ICsJCWdvdG8gdW5waW5faHdzOwo+ICsKPiArCWk5MTVf dm1hX21vdmVfdG9fYWN0aXZlKHZtYSwgcnEsIDApOwo+ICsJaWYgKCFpOTE1X2dlbV9vYmplY3Rf aGFzX2FjdGl2ZV9yZWZlcmVuY2Uodm1hLT5vYmopKSB7Cj4gKwkJaTkxNV9nZW1fb2JqZWN0X2dl dCh2bWEtPm9iaik7Cj4gKwkJaTkxNV9nZW1fb2JqZWN0X3NldF9hY3RpdmVfcmVmZXJlbmNlKHZt YS0+b2JqKTsKPiArCX0KPiArCj4gKwlpOTE1X3ZtYV9tb3ZlX3RvX2FjdGl2ZShod3MsIHJxLCAw KTsKPiArCWlmICghaTkxNV9nZW1fb2JqZWN0X2hhc19hY3RpdmVfcmVmZXJlbmNlKGh3cy0+b2Jq KSkgewo+ICsJCWk5MTVfZ2VtX29iamVjdF9nZXQoaHdzLT5vYmopOwo+ICsJCWk5MTVfZ2VtX29i amVjdF9zZXRfYWN0aXZlX3JlZmVyZW5jZShod3MtPm9iaik7Cj4gKwl9Cj4gKwo+ICsJYmF0Y2gg PSBoLT5iYXRjaDsKPiArCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOCkgewo+ICsJCSpiYXRjaCsr ID0gTUlfU1RPUkVfRFdPUkRfSU1NX0dFTjQ7Cj4gKwkJKmJhdGNoKysgPSBsb3dlcl8zMl9iaXRz KGh3c19hZGRyZXNzKGh3cywgcnEpKTsKPiArCQkqYmF0Y2grKyA9IHVwcGVyXzMyX2JpdHMoaHdz X2FkZHJlc3MoaHdzLCBycSkpOwo+ICsJCSpiYXRjaCsrID0gcnEtPmZlbmNlLnNlcW5vOwo+ICsJ CSpiYXRjaCsrID0gTUlfQkFUQ0hfQlVGRkVSX1NUQVJUIHwgMSA8PCA4IHwgMTsKPiArCQkqYmF0 Y2grKyA9IGxvd2VyXzMyX2JpdHModm1hLT5ub2RlLnN0YXJ0KTsKPiArCQkqYmF0Y2grKyA9IHVw cGVyXzMyX2JpdHModm1hLT5ub2RlLnN0YXJ0KTsKPiArCX0gZWxzZSBpZiAoSU5URUxfR0VOKGk5 MTUpID49IDYpIHsKPiArCQkqYmF0Y2grKyA9IE1JX1NUT1JFX0RXT1JEX0lNTV9HRU40Owo+ICsJ CSpiYXRjaCsrID0gMDsKPiArCQkqYmF0Y2grKyA9IGxvd2VyXzMyX2JpdHMoaHdzX2FkZHJlc3Mo aHdzLCBycSkpOwo+ICsJCSpiYXRjaCsrID0gcnEtPmZlbmNlLnNlcW5vOwo+ICsJCSpiYXRjaCsr ID0gTUlfQkFUQ0hfQlVGRkVSX1NUQVJUIHwgMSA8PCA4Owo+ICsJCSpiYXRjaCsrID0gbG93ZXJf MzJfYml0cyh2bWEtPm5vZGUuc3RhcnQpOwo+ICsJfSBlbHNlIGlmIChJTlRFTF9HRU4oaTkxNSkg Pj0gNCkgewo+ICsJCSpiYXRjaCsrID0gTUlfU1RPUkVfRFdPUkRfSU1NX0dFTjQgfCAxIDw8IDIy Owo+ICsJCSpiYXRjaCsrID0gMDsKPiArCQkqYmF0Y2grKyA9IGxvd2VyXzMyX2JpdHMoaHdzX2Fk ZHJlc3MoaHdzLCBycSkpOwo+ICsJCSpiYXRjaCsrID0gcnEtPmZlbmNlLnNlcW5vOwo+ICsJCSpi YXRjaCsrID0gTUlfQkFUQ0hfQlVGRkVSX1NUQVJUIHwgMiA8PCA2Owo+ICsJCSpiYXRjaCsrID0g bG93ZXJfMzJfYml0cyh2bWEtPm5vZGUuc3RhcnQpOwo+ICsJfSBlbHNlIHsKPiArCQkqYmF0Y2gr KyA9IE1JX1NUT1JFX0RXT1JEX0lNTTsKPiArCQkqYmF0Y2grKyA9IGxvd2VyXzMyX2JpdHMoaHdz X2FkZHJlc3MoaHdzLCBycSkpOwo+ICsJCSpiYXRjaCsrID0gcnEtPmZlbmNlLnNlcW5vOwo+ICsJ CSpiYXRjaCsrID0gTUlfQkFUQ0hfQlVGRkVSX1NUQVJUIHwgMiA8PCA2IHwgMTsKPiArCQkqYmF0 Y2grKyA9IGxvd2VyXzMyX2JpdHModm1hLT5ub2RlLnN0YXJ0KTsKPiArCX0KPiArCSpiYXRjaCsr ID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsgLyogbm90IHJlYWNoZWQgKi8KPiArCj4gKwlmbGFncyA9 IDA7Cj4gKwlpZiAoSU5URUxfR0VOKHZtLT5pOTE1KSA8PSA1KQo+ICsJCWZsYWdzIHw9IEk5MTVf RElTUEFUQ0hfU0VDVVJFOwo+ICsKPiArCWVyciA9IHJxLT5lbmdpbmUtPmVtaXRfYmJfc3RhcnQo cnEsIHZtYS0+bm9kZS5zdGFydCwgUEFHRV9TSVpFLCBmbGFncyk7Cj4gKwo+ICt1bnBpbl9od3M6 Cj4gKwlpOTE1X3ZtYV91bnBpbihod3MpOwo+ICt1bnBpbl92bWE6Cj4gKwlpOTE1X3ZtYV91bnBp bih2bWEpOwo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsKPiArc3RhdGljIHN0cnVjdCBkcm1faTkx NV9nZW1fcmVxdWVzdCAqCj4gK2hhbmdfY3JlYXRlX3JlcXVlc3Qoc3RydWN0IGhhbmcgKmgsCj4g KwkJICAgIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiArCQkgICAgc3RydWN0IGk5 MTVfZ2VtX2NvbnRleHQgKmN0eCkKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0 ICpycTsKPiArCWludCBlcnI7Cj4gKwo+ICsJaWYgKGk5MTVfZ2VtX29iamVjdF9pc19hY3RpdmUo aC0+b2JqKSkgewo+ICsJCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmo7Cj4gKwkJdm9p ZCAqdmFkZHI7Cj4gKwo+ICsJCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGVfaW50ZXJuYWwo aC0+aTkxNSwgUEFHRV9TSVpFKTsKPiArCQlpZiAoSVNfRVJSKG9iaikpCj4gKwkJCXJldHVybiBF UlJfQ0FTVChvYmopOwo+ICsKPiArCQl2YWRkciA9IGk5MTVfZ2VtX29iamVjdF9waW5fbWFwKG9i aiwKPiArCQkJCQkJSEFTX0xMQyhoLT5pOTE1KSA/IEk5MTVfTUFQX1dCIDogSTkxNV9NQVBfV0Mp Owo+ICsJCWlmIChJU19FUlIodmFkZHIpKSB7Cj4gKwkJCWk5MTVfZ2VtX29iamVjdF9wdXQob2Jq KTsKPiArCQkJcmV0dXJuIEVSUl9DQVNUKHZhZGRyKTsKPiArCQl9Cj4gKwo+ICsJCWk5MTVfZ2Vt X29iamVjdF91bnBpbl9tYXAoaC0+b2JqKTsKPiArCQlpOTE1X2dlbV9vYmplY3RfcHV0KGgtPm9i aik7Cj4gKwo+ICsJCWgtPm9iaiA9IG9iajsKPiArCQloLT5iYXRjaCA9IHZhZGRyOwo+ICsJfQo+ ICsKPiArCXJxID0gaTkxNV9nZW1fcmVxdWVzdF9hbGxvYyhlbmdpbmUsIGN0eCk7Cj4gKwlpZiAo SVNfRVJSKHJxKSkKPiArCQlyZXR1cm4gcnE7Cj4gKwo+ICsJZXJyID0gZW1pdF9yZWN1cnNlX2Jh dGNoKGgsIHJxKTsKPiArCWlmIChlcnIpIHsKPiArCQlfX2k5MTVfYWRkX3JlcXVlc3QocnEsIGZh bHNlKTsKPiArCQlyZXR1cm4gRVJSX1BUUihlcnIpOwo+ICsJfQo+ICsKPiArCXJldHVybiBycTsK PiArfQo+ICsKPiArc3RhdGljIHUzMiBod3Nfc2Vxbm8oY29uc3Qgc3RydWN0IGhhbmcgKmgsCj4g KwkJICAgICBjb25zdCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJxKQo+ICt7Cj4gKwly ZXR1cm4gUkVBRF9PTkNFKGgtPnNlcW5vW3JxLT5mZW5jZS5jb250ZXh0ICUgKFBBR0VfU0laRS9z aXplb2YodTMyKSldKTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgaGFuZ19maW5pKHN0cnVjdCBo YW5nICpoKQo+ICt7Cj4gKwkqaC0+YmF0Y2ggPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwo+ICsJd21i KCk7Cj4gKwo+ICsJaTkxNV9nZW1fb2JqZWN0X3VucGluX21hcChoLT5vYmopOwo+ICsJaTkxNV9n ZW1fb2JqZWN0X3B1dChoLT5vYmopOwo+ICsKPiArCWk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAo aC0+aHdzKTsKPiArCWk5MTVfZ2VtX29iamVjdF9wdXQoaC0+aHdzKTsKPiArCj4gKwlpOTE1X2dl bV93YWl0X2Zvcl9pZGxlKGgtPmk5MTUsIEk5MTVfV0FJVF9MT0NLRUQpOwo+ICsJaTkxNV9nZW1f cmV0aXJlX3JlcXVlc3RzKGgtPmk5MTUpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGlndF9oYW5n X3Nhbml0eWNoZWNrKHZvaWQgKmFyZykKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUgPSBhcmc7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJxOwo+ICsJc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lOwo+ICsJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7 Cj4gKwlzdHJ1Y3QgaGFuZyBoOwo+ICsJaW50IGVycjsKPiArCj4gKwkvKiBCYXNpYyBjaGVjayB0 aGF0IHdlIGNhbiBleGVjdXRlIG91ciBoYW5naW5nIGJhdGNoICovCj4gKwo+ICsJbXV0ZXhfbG9j aygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwllcnIgPSBoYW5nX2luaXQoJmgsIGk5MTUp Owo+ICsJaWYgKGVycikKPiArCQlnb3RvIHVubG9jazsKPiArCj4gKwlmb3JfZWFjaF9lbmdpbmUo ZW5naW5lLCBpOTE1LCBpZCkgewo+ICsJCWxvbmcgdGltZW91dDsKPiArCj4gKwkJcnEgPSBoYW5n X2NyZWF0ZV9yZXF1ZXN0KCZoLCBlbmdpbmUsIGk5MTUtPmtlcm5lbF9jb250ZXh0KTsKPiArCQlp ZiAoSVNfRVJSKHJxKSkgewo+ICsJCQllcnIgPSBQVFJfRVJSKHJxKTsKPiArCQkJcHJfZXJyKCJG YWlsZWQgdG8gY3JlYXRlIHJlcXVlc3QgZm9yICVzLCBlcnI9JWRcbiIsCj4gKwkJCSAgICAgICBl bmdpbmUtPm5hbWUsIGVycik7Cj4gKwkJCWdvdG8gZmluaTsKPiArCQl9Cj4gKwo+ICsJCWk5MTVf Z2VtX3JlcXVlc3RfZ2V0KHJxKTsKPiArCj4gKwkJKmguYmF0Y2ggPSBNSV9CQVRDSF9CVUZGRVJf RU5EOwo+ICsJCV9faTkxNV9hZGRfcmVxdWVzdChycSwgdHJ1ZSk7Cj4gKwo+ICsJCXRpbWVvdXQg PSBpOTE1X3dhaXRfcmVxdWVzdChycSwKPiArCQkJCQkgICAgSTkxNV9XQUlUX0xPQ0tFRCwKPiAr CQkJCQkgICAgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwo+ICsJCWk5MTVfZ2VtX3JlcXVlc3RfcHV0 KHJxKTsKPiArCj4gKwkJaWYgKHRpbWVvdXQgPCAwKSB7Cj4gKwkJCWVyciA9IHRpbWVvdXQ7Cj4g KwkJCXByX2VycigiV2FpdCBmb3IgcmVxdWVzdCBmYWlsZWQgb24gJXMsIGVycj0lZFxuIiwKPiAr CQkJICAgICAgIGVuZ2luZS0+bmFtZSwgZXJyKTsKPiArCQkJZ290byBmaW5pOwo+ICsJCX0KPiAr CX0KPiArCj4gK2Zpbmk6Cj4gKwloYW5nX2ZpbmkoJmgpOwo+ICt1bmxvY2s6Cj4gKwltdXRleF91 bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsK PiArc3RhdGljIGludCBpZ3RfZ2xvYmFsX3Jlc2V0KHZvaWQgKmFyZykKPiArewo+ICsJc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBhcmc7Cj4gKwl1bnNpZ25lZCBpbnQgcmVzZXRfY291 bnQ7Cj4gKwlpbnQgZXJyID0gMDsKPiArCj4gKwkvKiBDaGVjayB0aGF0IHdlIGNhbiBpc3N1ZSBh IGdsb2JhbCBHUFUgcmVzZXQgKi8KPiArCj4gKwlzZXRfYml0KEk5MTVfUkVTRVRfSU5fUFJPR1JF U1MsICZpOTE1LT5ncHVfZXJyb3IuZmxhZ3MpOwo+ICsKPiArCW11dGV4X2xvY2soJmk5MTUtPmRy bS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJcmVzZXRfY291bnQgPSBpOTE1X3Jlc2V0X2NvdW50KCZpOTE1 LT5ncHVfZXJyb3IpOwo+ICsKPiArCWk5MTVfcmVzZXQoaTkxNSk7Cj4gKwo+ICsJaWYgKGk5MTVf cmVzZXRfY291bnQoJmk5MTUtPmdwdV9lcnJvcikgPT0gcmVzZXRfY291bnQpIHsKPiArCQlwcl9l cnIoIk5vIEdQVSByZXNldCByZWNvcmRlZCFcbiIpOwo+ICsJCWVyciA9IC1FSU5WQUw7Cj4gKwl9 Cj4gKwltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsKPiArCUdFTV9C VUdfT04odGVzdF9iaXQoSTkxNV9SRVNFVF9JTl9QUk9HUkVTUywgJmk5MTUtPmdwdV9lcnJvci5m bGFncykpOwo+ICsJaWYgKGk5MTVfdGVybWluYWxseV93ZWRnZWQoJmk5MTUtPmdwdV9lcnJvcikp Cj4gKwkJZXJyID0gLUVJTzsKPiArCj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dTMyIGZha2VfaGFuZ2NoZWNrKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcnEpCj4gK3sK PiArCXUzMiByZXNldF9jb3VudDsKPiArCj4gKwlycS0+ZW5naW5lLT5oYW5nY2hlY2suc3RhbGxl ZCA9IHRydWU7Cj4gKwlycS0+ZW5naW5lLT5oYW5nY2hlY2suc2Vxbm8gPSBpbnRlbF9lbmdpbmVf Z2V0X3NlcW5vKHJxLT5lbmdpbmUpOwo+ICsKPiArCXJlc2V0X2NvdW50ID0gaTkxNV9yZXNldF9j b3VudCgmcnEtPmk5MTUtPmdwdV9lcnJvcik7Cj4gKwo+ICsJc2V0X2JpdChJOTE1X1JFU0VUX0lO X1BST0dSRVNTLCAmcnEtPmk5MTUtPmdwdV9lcnJvci5mbGFncyk7Cj4gKwl3YWtlX3VwX2FsbCgm cnEtPmk5MTUtPmdwdV9lcnJvci53YWl0X3F1ZXVlKTsKPiArCj4gKwlyZXR1cm4gcmVzZXRfY291 bnQ7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIHdhaXRfZm9yX2hhbmcoc3RydWN0IGhhbmcgKmgs IHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcnEpCj4gK3sKPiArCXJldHVybiAhKHdhaXRf Zm9yX3VzKGk5MTVfc2Vxbm9fcGFzc2VkKGh3c19zZXFubyhoLCBycSksCj4gKwkJCQkJICAgICAg IHJxLT5mZW5jZS5zZXFubyksCj4gKwkJCSAgICAgMTApICYmCj4gKwkJIHdhaXRfZm9yKGk5MTVf c2Vxbm9fcGFzc2VkKGh3c19zZXFubyhoLCBycSksCj4gKwkJCQkJICAgIHJxLT5mZW5jZS5zZXFu byksCj4gKwkJCSAgMTAwMCkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGlndF93YWl0X3Jlc2V0 KHZvaWQgKmFyZykKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBhcmc7 Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJxOwo+ICsJdW5zaWduZWQgaW50IHJl c2V0X2NvdW50Owo+ICsJc3RydWN0IGhhbmcgaDsKPiArCWxvbmcgdGltZW91dDsKPiArCWludCBl cnI7Cj4gKwo+ICsJLyogQ2hlY2sgdGhhdCB3ZSBkZXRlY3QgYSBzdHVjayB3YWl0ZXIgYW5kIGlz c3VlIGEgcmVzZXQgKi8KPiArCj4gKwlzZXRfYml0KEk5MTVfUkVTRVRfSU5fUFJPR1JFU1MsICZp OTE1LT5ncHVfZXJyb3IuZmxhZ3MpOwo+ICsKPiArCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1 Y3RfbXV0ZXgpOwo+ICsJZXJyID0gaGFuZ19pbml0KCZoLCBpOTE1KTsKPiArCWlmIChlcnIpCj4g KwkJZ290byB1bmxvY2s7Cj4gKwo+ICsJcnEgPSBoYW5nX2NyZWF0ZV9yZXF1ZXN0KCZoLCBpOTE1 LT5lbmdpbmVbUkNTXSwgaTkxNS0+a2VybmVsX2NvbnRleHQpOwo+ICsJaWYgKElTX0VSUihycSkp IHsKPiArCQllcnIgPSBQVFJfRVJSKHJxKTsKPiArCQlnb3RvIGZpbmk7Cj4gKwl9Cj4gKwo+ICsJ aTkxNV9nZW1fcmVxdWVzdF9nZXQocnEpOwo+ICsJX19pOTE1X2FkZF9yZXF1ZXN0KHJxLCB0cnVl KTsKPiArCj4gKwlpZiAoIXdhaXRfZm9yX2hhbmcoJmgsIHJxKSkgewo+ICsJCXByX2VycigiRmFp bGVkIHRvIHN0YXJ0IHJlcXVlc3QgJXhcbiIsIHJxLT5mZW5jZS5zZXFubyk7Cj4gKwkJZXJyID0g LUVJTzsKPiArCQlnb3RvIG91dF9ycTsKPiArCX0KPiArCj4gKwlyZXNldF9jb3VudCA9IGZha2Vf aGFuZ2NoZWNrKHJxKTsKPiArCj4gKwl0aW1lb3V0ID0gaTkxNV93YWl0X3JlcXVlc3QocnEsIEk5 MTVfV0FJVF9MT0NLRUQsIDEwKTsKPiArCWlmICh0aW1lb3V0IDwgMCkgewo+ICsJCXByX2Vycigi aTkxNV93YWl0X3JlcXVlc3QgZmFpbGVkIG9uIGEgc3R1Y2sgcmVxdWVzdDogZXJyPSVsZFxuIiwK PiArCQkgICAgICAgdGltZW91dCk7Cj4gKwkJZXJyID0gdGltZW91dDsKPiArCQlnb3RvIG91dF9y cTsKPiArCX0KPiArCUdFTV9CVUdfT04odGVzdF9iaXQoSTkxNV9SRVNFVF9JTl9QUk9HUkVTUywg Jmk5MTUtPmdwdV9lcnJvci5mbGFncykpOwo+ICsKPiArCWlmIChpOTE1X3Jlc2V0X2NvdW50KCZp OTE1LT5ncHVfZXJyb3IpID09IHJlc2V0X2NvdW50KSB7Cj4gKwkJcHJfZXJyKCJObyBHUFUgcmVz ZXQgcmVjb3JkZWQhXG4iKTsKPiArCQllcnIgPSAtRUlOVkFMOwo+ICsJCWdvdG8gb3V0X3JxOwo+ ICsJfQo+ICsKPiArb3V0X3JxOgo+ICsJaTkxNV9nZW1fcmVxdWVzdF9wdXQocnEpOwo+ICtmaW5p Ogo+ICsJaGFuZ19maW5pKCZoKTsKPiArdW5sb2NrOgo+ICsJbXV0ZXhfdW5sb2NrKCZpOTE1LT5k cm0uc3RydWN0X211dGV4KTsKPiArCj4gKwlpZiAoaTkxNV90ZXJtaW5hbGx5X3dlZGdlZCgmaTkx NS0+Z3B1X2Vycm9yKSkKPiArCQlyZXR1cm4gLUVJTzsKPiArCj4gKwlyZXR1cm4gZXJyOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgaW50IGlndF9yZXNldF9xdWV1ZSh2b2lkICphcmcpCj4gK3sKPiArCXN0 cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gYXJnOwo+ICsJc3RydWN0IGludGVsX2VuZ2lu ZV9jcyAqZW5naW5lOwo+ICsJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Cj4gKwlzdHJ1Y3QgaGFu ZyBoOwo+ICsJaW50IGVycjsKPiArCj4gKwkvKiBDaGVjayB0aGF0IHdlIHJlcGxheSBwZW5kaW5n IHJlcXVlc3RzIGZvbGxvd2luZyBhIGhhbmcgKi8KPiArCj4gKwltdXRleF9sb2NrKCZpOTE1LT5k cm0uc3RydWN0X211dGV4KTsKPiArCWVyciA9IGhhbmdfaW5pdCgmaCwgaTkxNSk7Cj4gKwlpZiAo ZXJyKQo+ICsJCWdvdG8gdW5sb2NrOwo+ICsKPiArCWZvcl9lYWNoX2VuZ2luZShlbmdpbmUsIGk5 MTUsIGlkKSB7Cj4gKwkJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpwcmV2Owo+ICsJCUlH VF9USU1FT1VUKGVuZF90aW1lKTsKPiArCQl1bnNpZ25lZCBpbnQgY291bnQ7Cj4gKwo+ICsJCXBy ZXYgPSBoYW5nX2NyZWF0ZV9yZXF1ZXN0KCZoLCBlbmdpbmUsIGk5MTUtPmtlcm5lbF9jb250ZXh0 KTsKPiArCQlpZiAoSVNfRVJSKHByZXYpKSB7Cj4gKwkJCWVyciA9IFBUUl9FUlIocHJldik7Cj4g KwkJCWdvdG8gZmluaTsKPiArCQl9Cj4gKwo+ICsJCWk5MTVfZ2VtX3JlcXVlc3RfZ2V0KHByZXYp Owo+ICsJCV9faTkxNV9hZGRfcmVxdWVzdChwcmV2LCB0cnVlKTsKPiArCj4gKwkJY291bnQgPSAw Owo+ICsJCWRvIHsKPiArCQkJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpycTsKPiArCQkJ dW5zaWduZWQgaW50IHJlc2V0X2NvdW50Owo+ICsKPiArCQkJcnEgPSBoYW5nX2NyZWF0ZV9yZXF1 ZXN0KCZoLAo+ICsJCQkJCQkgZW5naW5lLAo+ICsJCQkJCQkgaTkxNS0+a2VybmVsX2NvbnRleHQp Owo+ICsJCQlpZiAoSVNfRVJSKHJxKSkgewo+ICsJCQkJZXJyID0gUFRSX0VSUihycSk7Cj4gKwkJ CQlnb3RvIGZpbmk7Cj4gKwkJCX0KPiArCj4gKwkJCWk5MTVfZ2VtX3JlcXVlc3RfZ2V0KHJxKTsK PiArCQkJX19pOTE1X2FkZF9yZXF1ZXN0KHJxLCB0cnVlKTsKPiArCj4gKwkJCWlmICghd2FpdF9m b3JfaGFuZygmaCwgcHJldikpIHsKPiArCQkJCXByX2VycigiRmFpbGVkIHRvIHN0YXJ0IHJlcXVl c3QgJXhcbiIsCj4gKwkJCQkgICAgICAgcHJldi0+ZmVuY2Uuc2Vxbm8pOwo+ICsJCQkJaTkxNV9n ZW1fcmVxdWVzdF9wdXQocnEpOwo+ICsJCQkJaTkxNV9nZW1fcmVxdWVzdF9wdXQocHJldik7Cj4g KwkJCQllcnIgPSAtRUlPOwo+ICsJCQkJZ290byBmaW5pOwo+ICsJCQl9Cj4gKwo+ICsJCQlyZXNl dF9jb3VudCA9IGZha2VfaGFuZ2NoZWNrKHByZXYpOwo+ICsKPiArCQkJaTkxNV9yZXNldChpOTE1 KTsKPiArCj4gKwkJCUdFTV9CVUdfT04odGVzdF9iaXQoSTkxNV9SRVNFVF9JTl9QUk9HUkVTUywK PiArCQkJCQkgICAgJmk5MTUtPmdwdV9lcnJvci5mbGFncykpOwo+ICsJCQlpZiAocHJldi0+ZmVu Y2UuZXJyb3IgIT0gLUVJTykgewo+ICsJCQkJcHJfZXJyKCJHUFUgcmVzZXQgbm90IHJlY29yZGVk IG9uIGhhbmdpbmcgcmVxdWVzdCBbZmVuY2UuZXJyb3I9JWRdIVxuIiwKPiArCQkJCSAgICAgICBw cmV2LT5mZW5jZS5lcnJvcik7Cj4gKwkJCQlpOTE1X2dlbV9yZXF1ZXN0X3B1dChycSk7Cj4gKwkJ CQlpOTE1X2dlbV9yZXF1ZXN0X3B1dChwcmV2KTsKPiArCQkJCWVyciA9IC1FSU5WQUw7Cj4gKwkJ CQlnb3RvIGZpbmk7Cj4gKwkJCX0KPiArCj4gKwkJCWlmIChycS0+ZmVuY2UuZXJyb3IpIHsKPiAr CQkJCXByX2VycigiRmVuY2UgZXJyb3Igc3RhdHVzIG5vdCB6ZXJvIFslZF0gYWZ0ZXIgdW5yZWxh dGVkIHJlc2V0XG4iLAo+ICsJCQkJICAgICAgIHJxLT5mZW5jZS5lcnJvcik7Cj4gKwkJCQlpOTE1 X2dlbV9yZXF1ZXN0X3B1dChycSk7Cj4gKwkJCQlpOTE1X2dlbV9yZXF1ZXN0X3B1dChwcmV2KTsK PiArCQkJCWVyciA9IC1FSU5WQUw7Cj4gKwkJCQlnb3RvIGZpbmk7Cj4gKwkJCX0KPiArCj4gKwkJ CWlmIChpOTE1X3Jlc2V0X2NvdW50KCZpOTE1LT5ncHVfZXJyb3IpID09IHJlc2V0X2NvdW50KSB7 Cj4gKwkJCQlwcl9lcnIoIk5vIEdQVSByZXNldCByZWNvcmRlZCFcbiIpOwo+ICsJCQkJaTkxNV9n ZW1fcmVxdWVzdF9wdXQocnEpOwo+ICsJCQkJaTkxNV9nZW1fcmVxdWVzdF9wdXQocHJldik7Cj4g KwkJCQllcnIgPSAtRUlOVkFMOwo+ICsJCQkJZ290byBmaW5pOwo+ICsJCQl9Cj4gKwo+ICsJCQlp OTE1X2dlbV9yZXF1ZXN0X3B1dChwcmV2KTsKPiArCQkJcHJldiA9IHJxOwo+ICsJCQljb3VudCsr Owo+ICsJCX0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIGVuZF90aW1lKSk7Cj4gKwkJcHJf aW5mbygiJXM6IENvbXBsZXRlZCAlZCByZXNldHNcbiIsIGVuZ2luZS0+bmFtZSwgY291bnQpOwo+ ICsKPiArCQkqaC5iYXRjaCA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7Cj4gKwkJd21iKCk7Cj4gKwo+ ICsJCWk5MTVfZ2VtX3JlcXVlc3RfcHV0KHByZXYpOwo+ICsJfQo+ICsKPiArZmluaToKPiArCWhh bmdfZmluaSgmaCk7Cj4gK3VubG9jazoKPiArCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVj dF9tdXRleCk7Cj4gKwo+ICsJaWYgKGk5MTVfdGVybWluYWxseV93ZWRnZWQoJmk5MTUtPmdwdV9l cnJvcikpCj4gKwkJcmV0dXJuIC1FSU87Cj4gKwo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsKPiAr aW50IGludGVsX2hhbmdjaGVja19saXZlX3NlbGZ0ZXN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0 ZSAqaTkxNSkKPiArewo+ICsJc3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3N1YnRlc3QgdGVzdHNb XSA9IHsKPiArCQlTVUJURVNUKGlndF9oYW5nX3Nhbml0eWNoZWNrKSwKPiArCQlTVUJURVNUKGln dF9nbG9iYWxfcmVzZXQpLAo+ICsJCVNVQlRFU1QoaWd0X3dhaXRfcmVzZXQpLAo+ICsJCVNVQlRF U1QoaWd0X3Jlc2V0X3F1ZXVlKSwKPiArCX07Cj4gKwo+ICsJaWYgKCFpbnRlbF9oYXNfZ3B1X3Jl c2V0KGk5MTUpKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCXJldHVybiBpOTE1X3N1YnRlc3RzKHRl c3RzLCBpOTE1KTsKPiArfQo+IC0tIAo+IDIuMTEuMAo+Cj4gX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gSW50 ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ludGVsLWdmeAo=