From mboxrd@z Thu Jan 1 00:00:00 1970 From: Daniel Vetter Subject: Re: [PATCH 04/18] drm/selftest: Add drm damage helper selftest Date: Mon, 1 Oct 2018 10:12:49 +0200 Message-ID: <20181001081249.GU11082@phenom.ffwll.local> References: <20180928003020.1737-1-drawat@vmware.com> <20180928003020.1737-4-drawat@vmware.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-ed1-x544.google.com (mail-ed1-x544.google.com [IPv6:2a00:1450:4864:20::544]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0EB8589240 for ; Mon, 1 Oct 2018 08:12:54 +0000 (UTC) Received: by mail-ed1-x544.google.com with SMTP id y19-v6so2216284edd.2 for ; Mon, 01 Oct 2018 01:12:53 -0700 (PDT) Content-Disposition: inline In-Reply-To: <20180928003020.1737-4-drawat@vmware.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Deepak Rawat Cc: thellstrom@vmware.com, Daniel Vetter , dri-devel@lists.freedesktop.org, linux-graphics-maintainer@vmware.com List-Id: dri-devel@lists.freedesktop.org T24gVGh1LCBTZXAgMjcsIDIwMTggYXQgMDU6MzA6MDZQTSAtMDcwMCwgRGVlcGFrIFJhd2F0IHdy b3RlOgo+IFNlbGZ0ZXN0IGZvciBkcm0gZGFtYWdlIGhlbHBlciBpdGVyYXRvciBmdW5jdGlvbnMu Cj4gCj4gQ2M6IHZpbGxlLnN5cmphbGFAbGludXguaW50ZWwuY29tCj4gQ2M6IERhbmllbCBWZXR0 ZXIgPGRhbmllbC52ZXR0ZXJAZmZ3bGwuY2g+Cj4gQ2M6IFBla2thIFBhYWxhbmVuIDxwcGFhbGFu ZW5AZ21haWwuY29tPgo+IFNpZ25lZC1vZmYtYnk6IERlZXBhayBSYXdhdCA8ZHJhd2F0QHZtd2Fy ZS5jb20+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9zZWxmdGVzdHMvTWFrZWZpbGUgICAgICAg ICAgICB8ICAgMyArLQo+ICAuLi4vc2VsZnRlc3RzL2RybV9kYW1hZ2VfaGVscGVyX3NlbGZ0ZXN0 cy5oICAgfCAgMjIgKwo+ICAuLi4vZHJtL3NlbGZ0ZXN0cy90ZXN0LWRybV9kYW1hZ2VfaGVscGVy LmMgICAgfCA4NDQgKysrKysrKysrKysrKysrKysrCj4gIDMgZmlsZXMgY2hhbmdlZCwgODY4IGlu c2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkKPiAgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMv Z3B1L2RybS9zZWxmdGVzdHMvZHJtX2RhbWFnZV9oZWxwZXJfc2VsZnRlc3RzLmgKPiAgY3JlYXRl IG1vZGUgMTAwNjQ0IGRyaXZlcnMvZ3B1L2RybS9zZWxmdGVzdHMvdGVzdC1kcm1fZGFtYWdlX2hl bHBlci5jCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9zZWxmdGVzdHMvTWFrZWZp bGUgYi9kcml2ZXJzL2dwdS9kcm0vc2VsZnRlc3RzL01ha2VmaWxlCj4gaW5kZXggOWZjMzQ5ZmEx OGU5Li44OGFjMjE2ZjU5NjIgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3NlbGZ0ZXN0 cy9NYWtlZmlsZQo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9zZWxmdGVzdHMvTWFrZWZpbGUKPiBA QCAtMSArMSwyIEBACj4gLW9iai0kKENPTkZJR19EUk1fREVCVUdfU0VMRlRFU1QpICs9IHRlc3Qt ZHJtX21tLm8gdGVzdC1kcm0taGVscGVyLm8KPiArb2JqLSQoQ09ORklHX0RSTV9ERUJVR19TRUxG VEVTVCkgKz0gdGVzdC1kcm1fbW0ubyB0ZXN0LWRybS1oZWxwZXIubyBcCj4gKwkJCQkgICAgdGVz dC1kcm1fZGFtYWdlX2hlbHBlci5vCgpJIHRoaW5rIGl0J2QgYmUgYmV0dGVyIHRvIGFkZCB0aGUg ZGFtYWdlIHRlc3RzIHRvIHRoZSBleGlzdGluZyBkcm0taGVscGVyCnNlbGZ0ZXN0IChidXQgYXMg YSBzZXBhcmF0ZSBmaWxlIG9mYyksIHVzaW5nIHRoZQoKdGVzdC1kcm0taGVscGVyLSQoQ09ORklH X0RSTV9ERUJVR19TRUxGVEVTVCkgKz0KCnN5bnRheC4gVGhhdCBhdm9pZHMgaGF2aW5nIHRvIHdy aXRlIHlldCBhbm90aGVyIGlndCB3cmFwcGVyIHRlc3QgZm9yIHRoaXMuCkFsc28sIGlmIHlvdSBj YyBpbnRlbC1nZnhAbGlzdHMuZmQubyB3aXRoIHRoaXMgb3VyIENJIHdpbGwgcnVuIHRoZSBuZXcK dGVzdHMgZm9yIHlvdSBhdXRvbWF0aWNhbGx5LgoKQ2hlZXJzLCBEYW5pZWwKCgo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vc2VsZnRlc3RzL2RybV9kYW1hZ2VfaGVscGVyX3NlbGZ0ZXN0 cy5oIGIvZHJpdmVycy9ncHUvZHJtL3NlbGZ0ZXN0cy9kcm1fZGFtYWdlX2hlbHBlcl9zZWxmdGVz dHMuaAo+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi4zYTFjYmUw NWJlZjAKPiAtLS0gL2Rldi9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL3NlbGZ0ZXN0cy9k cm1fZGFtYWdlX2hlbHBlcl9zZWxmdGVzdHMuaAo+IEBAIC0wLDAgKzEsMjIgQEAKPiArLyogU1BE WC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8KPiArc2VsZnRlc3QoZGFtYWdlX2l0ZXJf bm9fZGFtYWdlLCBpZ3RfZGFtYWdlX2l0ZXJfbm9fZGFtYWdlKQo+ICtzZWxmdGVzdChkYW1hZ2Vf aXRlcl9ub19kYW1hZ2VfZnJhY3Rpb25hbF9zcmMsIGlndF9kYW1hZ2VfaXRlcl9ub19kYW1hZ2Vf ZnJhY3Rpb25hbF9zcmMpCj4gK3NlbGZ0ZXN0KGRhbWFnZV9pdGVyX25vX2RhbWFnZV9zcmNfbW92 ZWQsIGlndF9kYW1hZ2VfaXRlcl9ub19kYW1hZ2Vfc3JjX21vdmVkKQo+ICtzZWxmdGVzdChkYW1h Z2VfaXRlcl9ub19kYW1hZ2VfZnJhY3Rpb25hbF9zcmNfbW92ZWQsIGlndF9kYW1hZ2VfaXRlcl9u b19kYW1hZ2VfZnJhY3Rpb25hbF9zcmNfbW92ZWQpCj4gK3NlbGZ0ZXN0KGRhbWFnZV9pdGVyX25v X2RhbWFnZV9ub3RfdmlzaWJsZSwgaWd0X2RhbWFnZV9pdGVyX25vX2RhbWFnZV9ub3RfdmlzaWJs ZSkKPiArc2VsZnRlc3QoZGFtYWdlX2l0ZXJfbm9fZGFtYWdlX25vX2NydGMsIGlndF9kYW1hZ2Vf aXRlcl9ub19kYW1hZ2Vfbm9fY3J0YykKPiArc2VsZnRlc3QoZGFtYWdlX2l0ZXJfbm9fZGFtYWdl X25vX2ZiLCBpZ3RfZGFtYWdlX2l0ZXJfbm9fZGFtYWdlX25vX2ZiKQo+ICtzZWxmdGVzdChkYW1h Z2VfaXRlcl9zaW1wbGVfZGFtYWdlLCBpZ3RfZGFtYWdlX2l0ZXJfc2ltcGxlX2RhbWFnZSkKPiAr c2VsZnRlc3QoZGFtYWdlX2l0ZXJfc2luZ2xlX2RhbWFnZSwgaWd0X2RhbWFnZV9pdGVyX3Npbmds ZV9kYW1hZ2UpCj4gK3NlbGZ0ZXN0KGRhbWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2VfaW50ZXJzZWN0 X3NyYywgaWd0X2RhbWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2VfaW50ZXJzZWN0X3NyYykKPiArc2Vs ZnRlc3QoZGFtYWdlX2l0ZXJfc2luZ2xlX2RhbWFnZV9vdXRzaWRlX3NyYywgaWd0X2RhbWFnZV9p dGVyX3NpbmdsZV9kYW1hZ2Vfb3V0c2lkZV9zcmMpCj4gK3NlbGZ0ZXN0KGRhbWFnZV9pdGVyX3Np bmdsZV9kYW1hZ2VfZnJhY3Rpb25hbF9zcmMsIGlndF9kYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdl X2ZyYWN0aW9uYWxfc3JjKQo+ICtzZWxmdGVzdChkYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdlX2lu dGVyc2VjdF9mcmFjdGlvbmFsX3NyYywgaWd0X2RhbWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2VfaW50 ZXJzZWN0X2ZyYWN0aW9uYWxfc3JjKQo+ICtzZWxmdGVzdChkYW1hZ2VfaXRlcl9zaW5nbGVfZGFt YWdlX291dHNpZGVfZnJhY3Rpb25hbF9zcmMsIGlndF9kYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdl X291dHNpZGVfZnJhY3Rpb25hbF9zcmMpCj4gK3NlbGZ0ZXN0KGRhbWFnZV9pdGVyX3NpbmdsZV9k YW1hZ2Vfc3JjX21vdmVkLCBpZ3RfZGFtYWdlX2l0ZXJfc2luZ2xlX2RhbWFnZV9zcmNfbW92ZWQp Cj4gK3NlbGZ0ZXN0KGRhbWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2VfZnJhY3Rpb25hbF9zcmNfbW92 ZWQsIGlndF9kYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdlX2ZyYWN0aW9uYWxfc3JjX21vdmVkKQo+ ICtzZWxmdGVzdChkYW1hZ2VfaXRlcl9kYW1hZ2UsIGlndF9kYW1hZ2VfaXRlcl9kYW1hZ2UpCj4g K3NlbGZ0ZXN0KGRhbWFnZV9pdGVyX2RhbWFnZV9vbmVfaW50ZXJzZWN0LCBpZ3RfZGFtYWdlX2l0 ZXJfZGFtYWdlX29uZV9pbnRlcnNlY3QpCj4gK3NlbGZ0ZXN0KGRhbWFnZV9pdGVyX2RhbWFnZV9v bmVfb3V0c2lkZSwgaWd0X2RhbWFnZV9pdGVyX2RhbWFnZV9vbmVfb3V0c2lkZSkKPiArc2VsZnRl c3QoZGFtYWdlX2l0ZXJfZGFtYWdlX3NyY19tb3ZlZCwgaWd0X2RhbWFnZV9pdGVyX2RhbWFnZV9z cmNfbW92ZWQpCj4gK3NlbGZ0ZXN0KGRhbWFnZV9pdGVyX2RhbWFnZV9ub3RfdmlzaWJsZSwgaWd0 X2RhbWFnZV9pdGVyX2RhbWFnZV9ub3RfdmlzaWJsZSkKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL3NlbGZ0ZXN0cy90ZXN0LWRybV9kYW1hZ2VfaGVscGVyLmMgYi9kcml2ZXJzL2dwdS9k cm0vc2VsZnRlc3RzL3Rlc3QtZHJtX2RhbWFnZV9oZWxwZXIuYwo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi4xNzc1NDczNGM0N2EKPiAtLS0gL2Rldi9udWxsCj4g KysrIGIvZHJpdmVycy9ncHUvZHJtL3NlbGZ0ZXN0cy90ZXN0LWRybV9kYW1hZ2VfaGVscGVyLmMK PiBAQCAtMCwwICsxLDg0NCBAQAo+ICsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIu MCAqLwo+ICsvKgo+ICsgKiBUZXN0IGNhc2UgZm9yIGRybV9kYW1hZ2VfaGVscGVyIGZ1bmN0aW9u cwo+ICsgKi8KPiArCj4gKyNkZWZpbmUgcHJfZm10KGZtdCkgImRybV9kYW1hZ2VfaGVscGVyOiAi IGZtdAo+ICsKPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ICsjaW5jbHVkZSA8ZHJtL2Ry bV9kYW1hZ2VfaGVscGVyLmg+Cj4gKwo+ICsjZGVmaW5lIFRFU1RTICJkcm1fZGFtYWdlX2hlbHBl cl9zZWxmdGVzdHMuaCIKPiArI2luY2x1ZGUgImRybV9zZWxmdGVzdC5oIgo+ICsKPiArI2RlZmlu ZSBGQUlMKHRlc3QsIG1zZywgLi4uKSBcCj4gKwlkbyB7IFwKPiArCQlpZiAodGVzdCkgeyBcCj4g KwkJCXByX2VycigiJXMvJXU6ICIgbXNnLCBfX0ZVTkNUSU9OX18sIF9fTElORV9fLCAjI19fVkFf QVJHU19fKTsgXAo+ICsJCQlyZXR1cm4gLUVJTlZBTDsgXAo+ICsJCX0gXAo+ICsJfSB3aGlsZSAo MCkKPiArCj4gKyNkZWZpbmUgRkFJTF9PTih4KSBGQUlMKCh4KSwgIiVzIiwgIkZBSUxfT04oIiBf X3N0cmluZ2lmeSh4KSAiKVxuIikKPiArCj4gK3N0YXRpYyB2b2lkIHNldF9wbGFuZV9zcmMoc3Ry dWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUsIGludCB4MSwgaW50IHkxLCBpbnQgeDIsCj4gKwkJ CSAgaW50IHkyKQo+ICt7Cj4gKwlzdGF0ZS0+c3JjLngxID0geDE7Cj4gKwlzdGF0ZS0+c3JjLnkx ID0geTE7Cj4gKwlzdGF0ZS0+c3JjLngyID0geDI7Cj4gKwlzdGF0ZS0+c3JjLnkyID0geTI7Cj4g K30KPiArCj4gK3N0YXRpYyB2b2lkIHNldF9kYW1hZ2VfY2xpcChzdHJ1Y3QgZHJtX21vZGVfcmVj dCAqciwgaW50IHgxLCBpbnQgeTEsIGludCB4MiwKPiArCQkJICAgIGludCB5MikKPiArewo+ICsJ ci0+eDEgPSB4MTsKPiArCXItPnkxID0geTE7Cj4gKwlyLT54MiA9IHgyOwo+ICsJci0+eTIgPSB5 MjsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgc2V0X2RhbWFnZV9ibG9iKHN0cnVjdCBkcm1fcHJv cGVydHlfYmxvYiAqZGFtYWdlX2Jsb2IsCj4gKwkJCSAgICBzdHJ1Y3QgZHJtX21vZGVfcmVjdCAq ciwgdWludDMyX3Qgc2l6ZSkKPiArewo+ICsJZGFtYWdlX2Jsb2ItPmxlbmd0aCA9IHNpemU7Cj4g KwlkYW1hZ2VfYmxvYi0+ZGF0YSA9IHI7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIHNldF9wbGFu ZV9kYW1hZ2Uoc3RydWN0IGRybV9wbGFuZV9zdGF0ZSAqc3RhdGUsCj4gKwkJCSAgICAgc3RydWN0 IGRybV9wcm9wZXJ0eV9ibG9iICpkYW1hZ2VfYmxvYikKPiArewo+ICsJc3RhdGUtPmZiX2RhbWFn ZV9jbGlwcyA9IGRhbWFnZV9ibG9iOwo+ICt9Cj4gKwo+ICtzdGF0aWMgYm9vbCBjaGVja19kYW1h Z2VfY2xpcChzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlICpzdGF0ZSwgc3RydWN0IGRybV9yZWN0ICpy LAo+ICsJCQkgICAgICBpbnQgeDEsIGludCB5MSwgaW50IHgyLCBpbnQgeTIpCj4gK3sKPiArCS8q Cj4gKwkgKiBSb3VuZCBkb3duIHgxL3kxIGFuZCByb3VuZCB1cCB4Mi95Mi4gVGhpcyBpcyBiZWNh dXNlIGRhbWFnZSBpcyBub3QgaW4KPiArCSAqIDE2LjE2IGZpeGVkIHBvaW50IHNvIHRvIGNhdGNo IGFsbCBwaXhlbHMuCj4gKwkgKi8KPiArCWludCBzcmNfeDEgPSBzdGF0ZS0+c3JjLngxID4+IDE2 Owo+ICsJaW50IHNyY195MSA9IHN0YXRlLT5zcmMueTEgPj4gMTY7Cj4gKwlpbnQgc3JjX3gyID0g KHN0YXRlLT5zcmMueDIgPj4gMTYpICsgISEoc3RhdGUtPnNyYy54MiAmIDB4RkZGRik7Cj4gKwlp bnQgc3JjX3kyID0gKHN0YXRlLT5zcmMueTIgPj4gMTYpICsgISEoc3RhdGUtPnNyYy55MiAmIDB4 RkZGRik7Cj4gKwo+ICsJaWYgKHgxID49IHgyIHx8IHkxID49IHkyKSB7Cj4gKwkJcHJfZXJyKCJD YW5ub3QgaGF2ZSBkYW1hZ2UgY2xpcCB3aXRoIG5vIGRpbWVudGlvbi5cbiIpOwo+ICsJCXJldHVy biBmYWxzZTsKPiArCX0KPiArCj4gKwlpZiAoeDEgPCBzcmNfeDEgfHwgeTEgPCBzcmNfeTEgfHwg eDIgPiBzcmNfeDIgfHwgeTIgPiBzcmNfeTIpIHsKPiArCQlwcl9lcnIoIkRhbWFnZSBjYW5ub3Qg YmUgb3V0c2lkZSByb3VuZGVkIHBsYW5lIHNyYy5cbiIpOwo+ICsJCXJldHVybiBmYWxzZTsKPiAr CX0KPiArCj4gKwlpZiAoci0+eDEgIT0geDEgfHwgci0+eTEgIT0geTEgfHwgci0+eDIgIT0geDIg fHwgci0+eTIgIT0geTIpIHsKPiArCQlwcl9lcnIoIkRhbWFnZSA9ICVkICVkICVkICVkXG4iLCBy LT54MSwgci0+eTEsIHItPngyLCByLT55Mik7Cj4gKwkJcmV0dXJuIGZhbHNlOwo+ICsJfQo+ICsK PiArCXJldHVybiB0cnVlOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGlndF9kYW1hZ2VfaXRlcl9u b19kYW1hZ2Uodm9pZCAqaWdub3JlZCkKPiArewo+ICsJc3RydWN0IGRybV9hdG9taWNfaGVscGVy X2RhbWFnZV9pdGVyIGl0ZXI7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIG9sZF9zdGF0ZTsK PiArCXN0cnVjdCBkcm1fcmVjdCBjbGlwOwo+ICsJdWludDMyX3QgbnVtX2hpdHMgPSAwOwo+ICsK PiArCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgZmIgPSB7Cj4gKwkJLndpZHRoID0gMjA0OCwKPiAr CQkuaGVpZ2h0ID0gMjA0OAo+ICsJfTsKPiArCj4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIHN0 YXRlID0gewo+ICsJCS5jcnRjID0gWkVST19TSVpFX1BUUiwKPiArCQkuZmIgPSAmZmIsCj4gKwkJ LnZpc2libGUgPSB0cnVlLAo+ICsJfTsKPiArCj4gKwkvKiBQbGFuZSBzcmMgc2FtZSBhcyBmYiBz aXplLiAqLwo+ICsJc2V0X3BsYW5lX3NyYygmb2xkX3N0YXRlLCAwLCAwLCBmYi53aWR0aCA8PCAx NiwgZmIuaGVpZ2h0IDw8IDE2KTsKPiArCXNldF9wbGFuZV9zcmMoJnN0YXRlLCAwLCAwLCBmYi53 aWR0aCA8PCAxNiwgZmIuaGVpZ2h0IDw8IDE2KTsKPiArCWRybV9hdG9taWNfaGVscGVyX2RhbWFn ZV9pdGVyX2luaXQoJml0ZXIsICZvbGRfc3RhdGUsICZzdGF0ZSk7Cj4gKwlkcm1fYXRvbWljX2Zv cl9lYWNoX3BsYW5lX2RhbWFnZSgmaXRlciwgJmNsaXApCj4gKwkJbnVtX2hpdHMrKzsKPiArCj4g KwlGQUlMKG51bV9oaXRzICE9IDEsICJTaG91bGQgcmV0dXJuIHBsYW5lIHNyYyBhcyBkYW1hZ2Uu Iik7Cj4gKwlGQUlMX09OKCFjaGVja19kYW1hZ2VfY2xpcCgmc3RhdGUsICZjbGlwLCAwLCAwLCAy MDQ4LCAyMDQ4KSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaWd0 X2RhbWFnZV9pdGVyX25vX2RhbWFnZV9mcmFjdGlvbmFsX3NyYyh2b2lkICppZ25vcmVkKQo+ICt7 Cj4gKwlzdHJ1Y3QgZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXIgaXRlcjsKPiArCXN0cnVj dCBkcm1fcGxhbmVfc3RhdGUgb2xkX3N0YXRlOwo+ICsJc3RydWN0IGRybV9yZWN0IGNsaXA7Cj4g Kwl1aW50MzJfdCBudW1faGl0cyA9IDA7Cj4gKwo+ICsJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciBm YiA9IHsKPiArCQkud2lkdGggPSAyMDQ4LAo+ICsJCS5oZWlnaHQgPSAyMDQ4Cj4gKwl9Owo+ICsK PiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgc3RhdGUgPSB7Cj4gKwkJLmNydGMgPSBaRVJPX1NJ WkVfUFRSLAo+ICsJCS5mYiA9ICZmYiwKPiArCQkudmlzaWJsZSA9IHRydWUsCj4gKwl9Owo+ICsK PiArCS8qIFBsYW5lIHNyYyBoYXMgZnJhY3Rpb25hbCBwYXJ0LiAqLwo+ICsJc2V0X3BsYW5lX3Ny Yygmb2xkX3N0YXRlLCAweDNmZmZlLCAweDNmZmZlLAo+ICsJCSAgICAgIDB4M2ZmZmUgKyAoMTAy NCA8PCAxNiksIDB4M2ZmZmUgKyAoNzY4IDw8IDE2KSk7Cj4gKwlzZXRfcGxhbmVfc3JjKCZzdGF0 ZSwgMHgzZmZmZSwgMHgzZmZmZSwKPiArCQkgICAgICAweDNmZmZlICsgKDEwMjQgPDwgMTYpLCAw eDNmZmZlICsgKDc2OCA8PCAxNikpOwo+ICsJZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXJf aW5pdCgmaXRlciwgJm9sZF9zdGF0ZSwgJnN0YXRlKTsKPiArCWRybV9hdG9taWNfZm9yX2VhY2hf cGxhbmVfZGFtYWdlKCZpdGVyLCAmY2xpcCkKPiArCQludW1faGl0cysrOwo+ICsKPiArCUZBSUwo bnVtX2hpdHMgIT0gMSwgIlNob3VsZCByZXR1cm4gcm91bmRlZCBvZmYgcGxhbmUgc3JjIGFzIGRh bWFnZS4iKTsKPiArCUZBSUxfT04oIWNoZWNrX2RhbWFnZV9jbGlwKCZzdGF0ZSwgJmNsaXAsIDMs IDMsIDEwMjgsIDc3MikpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IGlndF9kYW1hZ2VfaXRlcl9ub19kYW1hZ2Vfc3JjX21vdmVkKHZvaWQgKmlnbm9yZWQpCj4gK3sK PiArCXN0cnVjdCBkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlciBpdGVyOwo+ICsJc3RydWN0 IGRybV9wbGFuZV9zdGF0ZSBvbGRfc3RhdGU7Cj4gKwlzdHJ1Y3QgZHJtX3JlY3QgY2xpcDsKPiAr CXVpbnQzMl90IG51bV9oaXRzID0gMDsKPiArCj4gKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyIGZi ID0gewo+ICsJCS53aWR0aCA9IDIwNDgsCj4gKwkJLmhlaWdodCA9IDIwNDgKPiArCX07Cj4gKwo+ ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBzdGF0ZSA9IHsKPiArCQkuY3J0YyA9IFpFUk9fU0la RV9QVFIsCj4gKwkJLmZiID0gJmZiLAo+ICsJCS52aXNpYmxlID0gdHJ1ZSwKPiArCX07Cj4gKwo+ ICsJLyogUGxhbmUgc3JjIG1vdmVkIHNpbmNlIG9sZCBwbGFuZSBzdGF0ZS4gKi8KPiArCXNldF9w bGFuZV9zcmMoJm9sZF9zdGF0ZSwgMCwgMCwgMTAyNCA8PCAxNiwgNzY4IDw8IDE2KTsKPiArCXNl dF9wbGFuZV9zcmMoJnN0YXRlLCAxMCA8PCAxNiwgMTAgPDwgMTYsCj4gKwkJICAgICAgKDEwICsg MTAyNCkgPDwgMTYsICgxMCArIDc2OCkgPDwgMTYpOwo+ICsJZHJtX2F0b21pY19oZWxwZXJfZGFt YWdlX2l0ZXJfaW5pdCgmaXRlciwgJm9sZF9zdGF0ZSwgJnN0YXRlKTsKPiArCWRybV9hdG9taWNf Zm9yX2VhY2hfcGxhbmVfZGFtYWdlKCZpdGVyLCAmY2xpcCkKPiArCQludW1faGl0cysrOwo+ICsK PiArCUZBSUwobnVtX2hpdHMgIT0gMSwgIlNob3VsZCByZXR1cm4gcGxhbmUgc3JjIGFzIGRhbWFn ZS4iKTsKPiArCUZBSUxfT04oIWNoZWNrX2RhbWFnZV9jbGlwKCZzdGF0ZSwgJmNsaXAsIDEwLCAx MCwgMTAzNCwgNzc4KSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg aWd0X2RhbWFnZV9pdGVyX25vX2RhbWFnZV9mcmFjdGlvbmFsX3NyY19tb3ZlZCh2b2lkICppZ25v cmVkKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXIgaXRlcjsK PiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xkX3N0YXRlOwo+ICsJc3RydWN0IGRybV9yZWN0 IGNsaXA7Cj4gKwl1aW50MzJfdCBudW1faGl0cyA9IDA7Cj4gKwo+ICsJc3RydWN0IGRybV9mcmFt ZWJ1ZmZlciBmYiA9IHsKPiArCQkud2lkdGggPSAyMDQ4LAo+ICsJCS5oZWlnaHQgPSAyMDQ4Cj4g Kwl9Owo+ICsKPiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgc3RhdGUgPSB7Cj4gKwkJLmNydGMg PSBaRVJPX1NJWkVfUFRSLAo+ICsJCS5mYiA9ICZmYiwKPiArCQkudmlzaWJsZSA9IHRydWUsCj4g Kwl9Owo+ICsKPiArCS8qIFBsYW5lIHNyYyBoYXMgZnJhY3Rpb25hbCBwYXJ0IGFuZCBpdCBtb3Zl ZCBzaW5jZSBvbGQgcGxhbmUgc3RhdGUuICovCj4gKwlzZXRfcGxhbmVfc3JjKCZvbGRfc3RhdGUs IDB4M2ZmZmUsIDB4M2ZmZmUsCj4gKwkJICAgICAgMHgzZmZmZSArICgxMDI0IDw8IDE2KSwgMHgz ZmZmZSArICg3NjggPDwgMTYpKTsKPiArCXNldF9wbGFuZV9zcmMoJnN0YXRlLCAweDQwMDAyLCAw eDQwMDAyLAo+ICsJCSAgICAgIDB4NDAwMDIgKyAoMTAyNCA8PCAxNiksIDB4NDAwMDIgKyAoNzY4 IDw8IDE2KSk7Cj4gKwlkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlcl9pbml0KCZpdGVyLCAm b2xkX3N0YXRlLCAmc3RhdGUpOwo+ICsJZHJtX2F0b21pY19mb3JfZWFjaF9wbGFuZV9kYW1hZ2Uo Jml0ZXIsICZjbGlwKQo+ICsJCW51bV9oaXRzKys7Cj4gKwo+ICsJRkFJTChudW1faGl0cyAhPSAx LCAiU2hvdWxkIHJldHVybiBwbGFuZSBzcmMgYXMgZGFtYWdlLiIpOwo+ICsJRkFJTF9PTighY2hl Y2tfZGFtYWdlX2NsaXAoJnN0YXRlLCAmY2xpcCwgNCwgNCwgMTAyOSwgNzczKSk7Cj4gKwo+ICsJ cmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaWd0X2RhbWFnZV9pdGVyX25vX2RhbWFn ZV9ub3RfdmlzaWJsZSh2b2lkICppZ25vcmVkKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2F0b21pY19o ZWxwZXJfZGFtYWdlX2l0ZXIgaXRlcjsKPiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xkX3N0 YXRlOwo+ICsJc3RydWN0IGRybV9yZWN0IGNsaXA7Cj4gKwl1aW50MzJfdCBudW1faGl0cyA9IDA7 Cj4gKwo+ICsJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciBmYiA9IHsKPiArCQkud2lkdGggPSAyMDQ4 LAo+ICsJCS5oZWlnaHQgPSAyMDQ4Cj4gKwl9Owo+ICsKPiArCXN0cnVjdCBkcm1fcGxhbmVfc3Rh dGUgc3RhdGUgPSB7Cj4gKwkJLmNydGMgPSBaRVJPX1NJWkVfUFRSLAo+ICsJCS5mYiA9ICZmYiwK PiArCQkudmlzaWJsZSA9IGZhbHNlLAo+ICsJfTsKPiArCj4gKwlzZXRfcGxhbmVfc3JjKCZvbGRf c3RhdGUsIDAsIDAsIDEwMjQgPDwgMTYsIDc2OCA8PCAxNik7Cj4gKwlzZXRfcGxhbmVfc3JjKCZz dGF0ZSwgMCwgMCwgMTAyNCA8PCAxNiwgNzY4IDw8IDE2KTsKPiArCWRybV9hdG9taWNfaGVscGVy X2RhbWFnZV9pdGVyX2luaXQoJml0ZXIsICZvbGRfc3RhdGUsICZzdGF0ZSk7Cj4gKwlkcm1fYXRv bWljX2Zvcl9lYWNoX3BsYW5lX2RhbWFnZSgmaXRlciwgJmNsaXApCj4gKwkJbnVtX2hpdHMrKzsK PiArCj4gKwlGQUlMKG51bV9oaXRzICE9IDAsICJTaG91bGQgaGF2ZSBubyBkYW1hZ2UuIik7Cj4g Kwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaWd0X2RhbWFnZV9pdGVyX25v X2RhbWFnZV9ub19jcnRjKHZvaWQgKmlnbm9yZWQpCj4gK3sKPiArCXN0cnVjdCBkcm1fYXRvbWlj X2hlbHBlcl9kYW1hZ2VfaXRlciBpdGVyOwo+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBvbGRf c3RhdGU7Cj4gKwlzdHJ1Y3QgZHJtX3JlY3QgY2xpcDsKPiArCXVpbnQzMl90IG51bV9oaXRzID0g MDsKPiArCj4gKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyIGZiID0gewo+ICsJCS53aWR0aCA9IDIw NDgsCj4gKwkJLmhlaWdodCA9IDIwNDgKPiArCX07Cj4gKwo+ICsJc3RydWN0IGRybV9wbGFuZV9z dGF0ZSBzdGF0ZSA9IHsKPiArCQkuY3J0YyA9IDAsCj4gKwkJLmZiID0gJmZiLAo+ICsJfTsKPiAr Cj4gKwlzZXRfcGxhbmVfc3JjKCZvbGRfc3RhdGUsIDAsIDAsIDEwMjQgPDwgMTYsIDc2OCA8PCAx Nik7Cj4gKwlzZXRfcGxhbmVfc3JjKCZzdGF0ZSwgMCwgMCwgMTAyNCA8PCAxNiwgNzY4IDw8IDE2 KTsKPiArCWRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyX2luaXQoJml0ZXIsICZvbGRfc3Rh dGUsICZzdGF0ZSk7Cj4gKwlkcm1fYXRvbWljX2Zvcl9lYWNoX3BsYW5lX2RhbWFnZSgmaXRlciwg JmNsaXApCj4gKwkJbnVtX2hpdHMrKzsKPiArCj4gKwlGQUlMKG51bV9oaXRzICE9IDAsICJTaG91 bGQgaGF2ZSBubyBkYW1hZ2UuIik7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgaWd0X2RhbWFnZV9pdGVyX25vX2RhbWFnZV9ub19mYih2b2lkICppZ25vcmVkKQo+ICt7 Cj4gKwlzdHJ1Y3QgZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXIgaXRlcjsKPiArCXN0cnVj dCBkcm1fcGxhbmVfc3RhdGUgb2xkX3N0YXRlOwo+ICsJc3RydWN0IGRybV9yZWN0IGNsaXA7Cj4g Kwl1aW50MzJfdCBudW1faGl0cyA9IDA7Cj4gKwo+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBz dGF0ZSA9IHsKPiArCQkuY3J0YyA9IFpFUk9fU0laRV9QVFIsCj4gKwkJLmZiID0gMCwKPiArCX07 Cj4gKwo+ICsJc2V0X3BsYW5lX3NyYygmb2xkX3N0YXRlLCAwLCAwLCAxMDI0IDw8IDE2LCA3Njgg PDwgMTYpOwo+ICsJc2V0X3BsYW5lX3NyYygmc3RhdGUsIDAsIDAsIDEwMjQgPDwgMTYsIDc2OCA8 PCAxNik7Cj4gKwlkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlcl9pbml0KCZpdGVyLCAmb2xk X3N0YXRlLCAmc3RhdGUpOwo+ICsJZHJtX2F0b21pY19mb3JfZWFjaF9wbGFuZV9kYW1hZ2UoJml0 ZXIsICZjbGlwKQo+ICsJCW51bV9oaXRzKys7Cj4gKwo+ICsJRkFJTChudW1faGl0cyAhPSAwLCAi U2hvdWxkIGhhdmUgbm8gZGFtYWdlLiIpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtz dGF0aWMgaW50IGlndF9kYW1hZ2VfaXRlcl9zaW1wbGVfZGFtYWdlKHZvaWQgKmlnbm9yZWQpCj4g K3sKPiArCXN0cnVjdCBkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlciBpdGVyOwo+ICsJc3Ry dWN0IGRybV9wbGFuZV9zdGF0ZSBvbGRfc3RhdGU7Cj4gKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Js b2IgZGFtYWdlX2Jsb2I7Cj4gKwlzdHJ1Y3QgZHJtX21vZGVfcmVjdCBkYW1hZ2U7Cj4gKwlzdHJ1 Y3QgZHJtX3JlY3QgY2xpcDsKPiArCXVpbnQzMl90IG51bV9oaXRzID0gMDsKPiArCj4gKwlzdHJ1 Y3QgZHJtX2ZyYW1lYnVmZmVyIGZiID0gewo+ICsJCS53aWR0aCA9IDIwNDgsCj4gKwkJLmhlaWdo dCA9IDIwNDgKPiArCX07Cj4gKwo+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBzdGF0ZSA9IHsK PiArCQkuY3J0YyA9IFpFUk9fU0laRV9QVFIsCj4gKwkJLmZiID0gJmZiLAo+ICsJCS52aXNpYmxl ID0gdHJ1ZSwKPiArCX07Cj4gKwo+ICsJc2V0X3BsYW5lX3NyYygmb2xkX3N0YXRlLCAwLCAwLCAx MDI0IDw8IDE2LCA3NjggPDwgMTYpOwo+ICsJc2V0X3BsYW5lX3NyYygmc3RhdGUsIDAsIDAsIDEw MjQgPDwgMTYsIDc2OCA8PCAxNik7Cj4gKwkvKiBEYW1hZ2Ugc2V0IHRvIHBsYW5lIHNyYyAqLwo+ ICsJc2V0X2RhbWFnZV9jbGlwKCZkYW1hZ2UsIDAsIDAsIDEwMjQsIDc2OCk7Cj4gKwlzZXRfZGFt YWdlX2Jsb2IoJmRhbWFnZV9ibG9iLCAmZGFtYWdlLCBzaXplb2YoZGFtYWdlKSk7Cj4gKwlzZXRf cGxhbmVfZGFtYWdlKCZzdGF0ZSwgJmRhbWFnZV9ibG9iKTsKPiArCWRybV9hdG9taWNfaGVscGVy X2RhbWFnZV9pdGVyX2luaXQoJml0ZXIsICZvbGRfc3RhdGUsICZzdGF0ZSk7Cj4gKwlkcm1fYXRv bWljX2Zvcl9lYWNoX3BsYW5lX2RhbWFnZSgmaXRlciwgJmNsaXApCj4gKwkJbnVtX2hpdHMrKzsK PiArCj4gKwlGQUlMKG51bV9oaXRzICE9IDEsICJTaG91bGQgcmV0dXJuIGRhbWFnZSB3aGVuIHNl dC4iKTsKPiArCUZBSUxfT04oIWNoZWNrX2RhbWFnZV9jbGlwKCZzdGF0ZSwgJmNsaXAsIDAsIDAs IDEwMjQsIDc2OCkpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGln dF9kYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdlKHZvaWQgKmlnbm9yZWQpCj4gK3sKPiArCXN0cnVj dCBkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlciBpdGVyOwo+ICsJc3RydWN0IGRybV9wbGFu ZV9zdGF0ZSBvbGRfc3RhdGU7Cj4gKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgZGFtYWdlX2Js b2I7Cj4gKwlzdHJ1Y3QgZHJtX21vZGVfcmVjdCBkYW1hZ2U7Cj4gKwlzdHJ1Y3QgZHJtX3JlY3Qg Y2xpcDsKPiArCXVpbnQzMl90IG51bV9oaXRzID0gMDsKPiArCj4gKwlzdHJ1Y3QgZHJtX2ZyYW1l YnVmZmVyIGZiID0gewo+ICsJCS53aWR0aCA9IDIwNDgsCj4gKwkJLmhlaWdodCA9IDIwNDgKPiAr CX07Cj4gKwo+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBzdGF0ZSA9IHsKPiArCQkuY3J0YyA9 IFpFUk9fU0laRV9QVFIsCj4gKwkJLmZiID0gJmZiLAo+ICsJCS52aXNpYmxlID0gdHJ1ZSwKPiAr CX07Cj4gKwo+ICsJc2V0X3BsYW5lX3NyYygmb2xkX3N0YXRlLCAwLCAwLCAxMDI0IDw8IDE2LCA3 NjggPDwgMTYpOwo+ICsJc2V0X3BsYW5lX3NyYygmc3RhdGUsIDAsIDAsIDEwMjQgPDwgMTYsIDc2 OCA8PCAxNik7Cj4gKwlzZXRfZGFtYWdlX2NsaXAoJmRhbWFnZSwgMjU2LCAxOTIsIDc2OCwgNTc2 KTsKPiArCXNldF9kYW1hZ2VfYmxvYigmZGFtYWdlX2Jsb2IsICZkYW1hZ2UsIHNpemVvZihkYW1h Z2UpKTsKPiArCXNldF9wbGFuZV9kYW1hZ2UoJnN0YXRlLCAmZGFtYWdlX2Jsb2IpOwo+ICsJZHJt X2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXJfaW5pdCgmaXRlciwgJm9sZF9zdGF0ZSwgJnN0YXRl KTsKPiArCWRybV9hdG9taWNfZm9yX2VhY2hfcGxhbmVfZGFtYWdlKCZpdGVyLCAmY2xpcCkKPiAr CQludW1faGl0cysrOwo+ICsKPiArCUZBSUwobnVtX2hpdHMgIT0gMSwgIlNob3VsZCByZXR1cm4g ZGFtYWdlIHdoZW4gc2V0LiIpOwo+ICsJRkFJTF9PTighY2hlY2tfZGFtYWdlX2NsaXAoJnN0YXRl LCAmY2xpcCwgMjU2LCAxOTIsIDc2OCwgNTc2KSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgaWd0X2RhbWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2VfaW50ZXJzZWN0X3Ny Yyh2b2lkICppZ25vcmVkKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2F0b21pY19oZWxwZXJfZGFtYWdl X2l0ZXIgaXRlcjsKPiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xkX3N0YXRlOwo+ICsJc3Ry dWN0IGRybV9wcm9wZXJ0eV9ibG9iIGRhbWFnZV9ibG9iOwo+ICsJc3RydWN0IGRybV9tb2RlX3Jl Y3QgZGFtYWdlOwo+ICsJc3RydWN0IGRybV9yZWN0IGNsaXA7Cj4gKwl1aW50MzJfdCBudW1faGl0 cyA9IDA7Cj4gKwo+ICsJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciBmYiA9IHsKPiArCQkud2lkdGgg PSAyMDQ4LAo+ICsJCS5oZWlnaHQgPSAyMDQ4Cj4gKwl9Owo+ICsKPiArCXN0cnVjdCBkcm1fcGxh bmVfc3RhdGUgc3RhdGUgPSB7Cj4gKwkJLmNydGMgPSBaRVJPX1NJWkVfUFRSLAo+ICsJCS5mYiA9 ICZmYiwKPiArCQkudmlzaWJsZSA9IHRydWUsCj4gKwl9Owo+ICsKPiArCXNldF9wbGFuZV9zcmMo Jm9sZF9zdGF0ZSwgMCwgMCwgMTAyNCA8PCAxNiwgNzY4IDw8IDE2KTsKPiArCXNldF9wbGFuZV9z cmMoJnN0YXRlLCAwLCAwLCAxMDI0IDw8IDE2LCA3NjggPDwgMTYpOwo+ICsJLyogRGFtYWdlIGlu dGVyc2VjdCB3aXRoIHBsYW5lIHNyYy4gKi8KPiArCXNldF9kYW1hZ2VfY2xpcCgmZGFtYWdlLCAy NTYsIDE5MiwgMTM2MCwgNzY4KTsKPiArCXNldF9kYW1hZ2VfYmxvYigmZGFtYWdlX2Jsb2IsICZk YW1hZ2UsIHNpemVvZihkYW1hZ2UpKTsKPiArCXNldF9wbGFuZV9kYW1hZ2UoJnN0YXRlLCAmZGFt YWdlX2Jsb2IpOwo+ICsJZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXJfaW5pdCgmaXRlciwg Jm9sZF9zdGF0ZSwgJnN0YXRlKTsKPiArCWRybV9hdG9taWNfZm9yX2VhY2hfcGxhbmVfZGFtYWdl KCZpdGVyLCAmY2xpcCkKPiArCQludW1faGl0cysrOwo+ICsKPiArCUZBSUwobnVtX2hpdHMgIT0g MSwgIlNob3VsZCByZXR1cm4gZGFtYWdlIGNsaXBwZWQgdG8gc3JjLiIpOwo+ICsJRkFJTF9PTigh Y2hlY2tfZGFtYWdlX2NsaXAoJnN0YXRlLCAmY2xpcCwgMjU2LCAxOTIsIDEwMjQsIDc2OCkpOwo+ ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGlndF9kYW1hZ2VfaXRlcl9z aW5nbGVfZGFtYWdlX291dHNpZGVfc3JjKHZvaWQgKmlnbm9yZWQpCj4gK3sKPiArCXN0cnVjdCBk cm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlciBpdGVyOwo+ICsJc3RydWN0IGRybV9wbGFuZV9z dGF0ZSBvbGRfc3RhdGU7Cj4gKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgZGFtYWdlX2Jsb2I7 Cj4gKwlzdHJ1Y3QgZHJtX21vZGVfcmVjdCBkYW1hZ2U7Cj4gKwlzdHJ1Y3QgZHJtX3JlY3QgY2xp cDsKPiArCXVpbnQzMl90IG51bV9oaXRzID0gMDsKPiArCj4gKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyIGZiID0gewo+ICsJCS53aWR0aCA9IDIwNDgsCj4gKwkJLmhlaWdodCA9IDIwNDgKPiArCX07 Cj4gKwo+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBzdGF0ZSA9IHsKPiArCQkuY3J0YyA9IFpF Uk9fU0laRV9QVFIsCj4gKwkJLmZiID0gJmZiLAo+ICsJCS52aXNpYmxlID0gdHJ1ZSwKPiArCX07 Cj4gKwo+ICsJc2V0X3BsYW5lX3NyYygmb2xkX3N0YXRlLCAwLCAwLCAxMDI0IDw8IDE2LCA3Njgg PDwgMTYpOwo+ICsJc2V0X3BsYW5lX3NyYygmc3RhdGUsIDAsIDAsIDEwMjQgPDwgMTYsIDc2OCA8 PCAxNik7Cj4gKwkvKiBEYW1hZ2UgY2xpcCBvdXRzaWRlIHBsYW5lIHNyYyAqLwo+ICsJc2V0X2Rh bWFnZV9jbGlwKCZkYW1hZ2UsIDEzNjAsIDEzNjAsIDEzODAsIDEzODApOwo+ICsJc2V0X2RhbWFn ZV9ibG9iKCZkYW1hZ2VfYmxvYiwgJmRhbWFnZSwgc2l6ZW9mKGRhbWFnZSkpOwo+ICsJc2V0X3Bs YW5lX2RhbWFnZSgmc3RhdGUsICZkYW1hZ2VfYmxvYik7Cj4gKwlkcm1fYXRvbWljX2hlbHBlcl9k YW1hZ2VfaXRlcl9pbml0KCZpdGVyLCAmb2xkX3N0YXRlLCAmc3RhdGUpOwo+ICsJZHJtX2F0b21p Y19mb3JfZWFjaF9wbGFuZV9kYW1hZ2UoJml0ZXIsICZjbGlwKQo+ICsJCW51bV9oaXRzKys7Cj4g Kwo+ICsJRkFJTChudW1faGl0cyAhPSAwLCAiU2hvdWxkIGhhdmUgbm8gZGFtYWdlLiIpOwo+ICsK PiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGlndF9kYW1hZ2VfaXRlcl9zaW5n bGVfZGFtYWdlX2ZyYWN0aW9uYWxfc3JjKHZvaWQgKmlnbm9yZWQpCj4gK3sKPiArCXN0cnVjdCBk cm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlciBpdGVyOwo+ICsJc3RydWN0IGRybV9wbGFuZV9z dGF0ZSBvbGRfc3RhdGU7Cj4gKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgZGFtYWdlX2Jsb2I7 Cj4gKwlzdHJ1Y3QgZHJtX21vZGVfcmVjdCBkYW1hZ2U7Cj4gKwlzdHJ1Y3QgZHJtX3JlY3QgY2xp cDsKPiArCXVpbnQzMl90IG51bV9oaXRzID0gMDsKPiArCj4gKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVm ZmVyIGZiID0gewo+ICsJCS53aWR0aCA9IDIwNDgsCj4gKwkJLmhlaWdodCA9IDIwNDgKPiArCX07 Cj4gKwo+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBzdGF0ZSA9IHsKPiArCQkuY3J0YyA9IFpF Uk9fU0laRV9QVFIsCj4gKwkJLmZiID0gJmZiLAo+ICsJCS52aXNpYmxlID0gdHJ1ZSwKPiArCX07 Cj4gKwo+ICsJLyogUGxhbmUgc3JjIGhhcyBmcmFjdGlvbmFsIHBhcnQuICovCj4gKwlzZXRfcGxh bmVfc3JjKCZvbGRfc3RhdGUsIDB4NDAwMDIsIDB4NDAwMDIsCj4gKwkJICAgICAgMHg0MDAwMiAr ICgxMDI0IDw8IDE2KSwgMHg0MDAwMiArICg3NjggPDwgMTYpKTsKPiArCXNldF9wbGFuZV9zcmMo JnN0YXRlLCAweDQwMDAyLCAweDQwMDAyLAo+ICsJCSAgICAgIDB4NDAwMDIgKyAoMTAyNCA8PCAx NiksIDB4NDAwMDIgKyAoNzY4IDw8IDE2KSk7Cj4gKwlzZXRfZGFtYWdlX2NsaXAoJmRhbWFnZSwg MTAsIDEwLCAyNTYsIDMzMCk7Cj4gKwlzZXRfZGFtYWdlX2Jsb2IoJmRhbWFnZV9ibG9iLCAmZGFt YWdlLCBzaXplb2YoZGFtYWdlKSk7Cj4gKwlzZXRfcGxhbmVfZGFtYWdlKCZzdGF0ZSwgJmRhbWFn ZV9ibG9iKTsKPiArCWRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyX2luaXQoJml0ZXIsICZv bGRfc3RhdGUsICZzdGF0ZSk7Cj4gKwlkcm1fYXRvbWljX2Zvcl9lYWNoX3BsYW5lX2RhbWFnZSgm aXRlciwgJmNsaXApCj4gKwkJbnVtX2hpdHMrKzsKPiArCj4gKwlGQUlMKG51bV9oaXRzICE9IDEs ICJTaG91bGQgcmV0dXJuIGRhbWFnZSB3aGVuIHNldC4iKTsKPiArCUZBSUxfT04oIWNoZWNrX2Rh bWFnZV9jbGlwKCZzdGF0ZSwgJmNsaXAsIDEwLCAxMCwgMjU2LCAzMzApKTsKPiArCj4gKwlyZXR1 cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBpZ3RfZGFtYWdlX2l0ZXJfc2luZ2xlX2RhbWFn ZV9pbnRlcnNlY3RfZnJhY3Rpb25hbF9zcmModm9pZCAqaWdub3JlZCkKPiArewo+ICsJc3RydWN0 IGRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyIGl0ZXI7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5l X3N0YXRlIG9sZF9zdGF0ZTsKPiArCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiBkYW1hZ2VfYmxv YjsKPiArCXN0cnVjdCBkcm1fbW9kZV9yZWN0IGRhbWFnZTsKPiArCXN0cnVjdCBkcm1fcmVjdCBj bGlwOwo+ICsJdWludDMyX3QgbnVtX2hpdHMgPSAwOwo+ICsKPiArCXN0cnVjdCBkcm1fZnJhbWVi dWZmZXIgZmIgPSB7Cj4gKwkJLndpZHRoID0gMjA0OCwKPiArCQkuaGVpZ2h0ID0gMjA0OAo+ICsJ fTsKPiArCj4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIHN0YXRlID0gewo+ICsJCS5jcnRjID0g WkVST19TSVpFX1BUUiwKPiArCQkuZmIgPSAmZmIsCj4gKwkJLnZpc2libGUgPSB0cnVlLAo+ICsJ fTsKPiArCj4gKwkvKiBQbGFuZSBzcmMgaGFzIGZyYWN0aW9uYWwgcGFydC4gKi8KPiArCXNldF9w bGFuZV9zcmMoJm9sZF9zdGF0ZSwgMHg0MDAwMiwgMHg0MDAwMiwKPiArCQkgICAgICAweDQwMDAy ICsgKDEwMjQgPDwgMTYpLCAweDQwMDAyICsgKDc2OCA8PCAxNikpOwo+ICsJc2V0X3BsYW5lX3Ny Yygmc3RhdGUsIDB4NDAwMDIsIDB4NDAwMDIsCj4gKwkJICAgICAgMHg0MDAwMiArICgxMDI0IDw8 IDE2KSwgMHg0MDAwMiArICg3NjggPDwgMTYpKTsKPiArCS8qIERhbWFnZSBpbnRlcnNlY3Qgd2l0 aCBwbGFuZSBzcmMuICovCj4gKwlzZXRfZGFtYWdlX2NsaXAoJmRhbWFnZSwgMTAsIDEsIDEzNjAs IDMzMCk7Cj4gKwlzZXRfZGFtYWdlX2Jsb2IoJmRhbWFnZV9ibG9iLCAmZGFtYWdlLCBzaXplb2Yo ZGFtYWdlKSk7Cj4gKwlzZXRfcGxhbmVfZGFtYWdlKCZzdGF0ZSwgJmRhbWFnZV9ibG9iKTsKPiAr CWRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyX2luaXQoJml0ZXIsICZvbGRfc3RhdGUsICZz dGF0ZSk7Cj4gKwlkcm1fYXRvbWljX2Zvcl9lYWNoX3BsYW5lX2RhbWFnZSgmaXRlciwgJmNsaXAp Cj4gKwkJbnVtX2hpdHMrKzsKPiArCj4gKwlGQUlMKG51bV9oaXRzICE9IDEsICJTaG91bGQgcmV0 dXJuIGRhbWFnZSBjbGlwcGVkIHRvIHJvdW5kZWQgb2ZmIHNyYy4iKTsKPiArCUZBSUxfT04oIWNo ZWNrX2RhbWFnZV9jbGlwKCZzdGF0ZSwgJmNsaXAsIDEwLCA0LCAxMDI5LCAzMzApKTsKPiArCj4g KwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBpZ3RfZGFtYWdlX2l0ZXJfc2luZ2xl X2RhbWFnZV9vdXRzaWRlX2ZyYWN0aW9uYWxfc3JjKHZvaWQgKmlnbm9yZWQpCj4gK3sKPiArCXN0 cnVjdCBkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlciBpdGVyOwo+ICsJc3RydWN0IGRybV9w bGFuZV9zdGF0ZSBvbGRfc3RhdGU7Cj4gKwlzdHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgZGFtYWdl X2Jsb2I7Cj4gKwlzdHJ1Y3QgZHJtX21vZGVfcmVjdCBkYW1hZ2U7Cj4gKwlzdHJ1Y3QgZHJtX3Jl Y3QgY2xpcDsKPiArCXVpbnQzMl90IG51bV9oaXRzID0gMDsKPiArCj4gKwlzdHJ1Y3QgZHJtX2Zy YW1lYnVmZmVyIGZiID0gewo+ICsJCS53aWR0aCA9IDIwNDgsCj4gKwkJLmhlaWdodCA9IDIwNDgK PiArCX07Cj4gKwo+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBzdGF0ZSA9IHsKPiArCQkuY3J0 YyA9IFpFUk9fU0laRV9QVFIsCj4gKwkJLmZiID0gJmZiLAo+ICsJCS52aXNpYmxlID0gdHJ1ZSwK PiArCX07Cj4gKwo+ICsJLyogUGxhbmUgc3JjIGhhcyBmcmFjdGlvbmFsIHBhcnQuICovCj4gKwlz ZXRfcGxhbmVfc3JjKCZvbGRfc3RhdGUsIDB4NDAwMDIsIDB4NDAwMDIsCj4gKwkJICAgICAgMHg0 MDAwMiArICgxMDI0IDw8IDE2KSwgMHg0MDAwMiArICg3NjggPDwgMTYpKTsKPiArCXNldF9wbGFu ZV9zcmMoJnN0YXRlLCAweDQwMDAyLCAweDQwMDAyLAo+ICsJCSAgICAgIDB4NDAwMDIgKyAoMTAy NCA8PCAxNiksIDB4NDAwMDIgKyAoNzY4IDw8IDE2KSk7Cj4gKwkvKiBEYW1hZ2UgY2xpcCBvdXRz aWRlIHBsYW5lIHNyYyAqLwo+ICsJc2V0X2RhbWFnZV9jbGlwKCZkYW1hZ2UsIDEzNjAsIDEzNjAs IDEzODAsIDEzODApOwo+ICsJc2V0X2RhbWFnZV9ibG9iKCZkYW1hZ2VfYmxvYiwgJmRhbWFnZSwg c2l6ZW9mKGRhbWFnZSkpOwo+ICsJc2V0X3BsYW5lX2RhbWFnZSgmc3RhdGUsICZkYW1hZ2VfYmxv Yik7Cj4gKwlkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlcl9pbml0KCZpdGVyLCAmb2xkX3N0 YXRlLCAmc3RhdGUpOwo+ICsJZHJtX2F0b21pY19mb3JfZWFjaF9wbGFuZV9kYW1hZ2UoJml0ZXIs ICZjbGlwKQo+ICsJCW51bV9oaXRzKys7Cj4gKwo+ICsJRkFJTChudW1faGl0cyAhPSAwLCAiU2hv dWxkIGhhdmUgbm8gZGFtYWdlLiIpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0 aWMgaW50IGlndF9kYW1hZ2VfaXRlcl9zaW5nbGVfZGFtYWdlX3NyY19tb3ZlZCh2b2lkICppZ25v cmVkKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXIgaXRlcjsK PiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xkX3N0YXRlOwo+ICsJc3RydWN0IGRybV9wcm9w ZXJ0eV9ibG9iIGRhbWFnZV9ibG9iOwo+ICsJc3RydWN0IGRybV9tb2RlX3JlY3QgZGFtYWdlOwo+ ICsJc3RydWN0IGRybV9yZWN0IGNsaXA7Cj4gKwl1aW50MzJfdCBudW1faGl0cyA9IDA7Cj4gKwo+ ICsJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciBmYiA9IHsKPiArCQkud2lkdGggPSAyMDQ4LAo+ICsJ CS5oZWlnaHQgPSAyMDQ4Cj4gKwl9Owo+ICsKPiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgc3Rh dGUgPSB7Cj4gKwkJLmNydGMgPSBaRVJPX1NJWkVfUFRSLAo+ICsJCS5mYiA9ICZmYiwKPiArCQku dmlzaWJsZSA9IHRydWUsCj4gKwl9Owo+ICsKPiArCS8qIFBsYW5lIHNyYyBtb3ZlZCBzaW5jZSBv bGQgcGxhbmUgc3RhdGUuICovCj4gKwlzZXRfcGxhbmVfc3JjKCZvbGRfc3RhdGUsIDAsIDAsIDEw MjQgPDwgMTYsIDc2OCA8PCAxNik7Cj4gKwlzZXRfcGxhbmVfc3JjKCZzdGF0ZSwgMTAgPDwgMTYs IDEwIDw8IDE2LAo+ICsJCSAgICAgICgxMCArIDEwMjQpIDw8IDE2LCAoMTAgKyA3NjgpIDw8IDE2 KTsKPiArCXNldF9kYW1hZ2VfY2xpcCgmZGFtYWdlLCAyMCwgMzAsIDI1NiwgMjU2KTsKPiArCXNl dF9kYW1hZ2VfYmxvYigmZGFtYWdlX2Jsb2IsICZkYW1hZ2UsIHNpemVvZihkYW1hZ2UpKTsKPiAr CXNldF9wbGFuZV9kYW1hZ2UoJnN0YXRlLCAmZGFtYWdlX2Jsb2IpOwo+ICsJZHJtX2F0b21pY19o ZWxwZXJfZGFtYWdlX2l0ZXJfaW5pdCgmaXRlciwgJm9sZF9zdGF0ZSwgJnN0YXRlKTsKPiArCWRy bV9hdG9taWNfZm9yX2VhY2hfcGxhbmVfZGFtYWdlKCZpdGVyLCAmY2xpcCkKPiArCQludW1faGl0 cysrOwo+ICsKPiArCUZBSUwobnVtX2hpdHMgIT0gMSwgIlNob3VsZCByZXR1cm4gcGxhbmUgc3Jj IGFzIGRhbWFnZS4iKTsKPiArCUZBSUxfT04oIWNoZWNrX2RhbWFnZV9jbGlwKCZzdGF0ZSwgJmNs aXAsIDEwLCAxMCwgMTAzNCwgNzc4KSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgaWd0X2RhbWFnZV9pdGVyX3NpbmdsZV9kYW1hZ2VfZnJhY3Rpb25hbF9zcmNfbW92 ZWQodm9pZCAqaWdub3JlZCkKPiArewo+ICsJc3RydWN0IGRybV9hdG9taWNfaGVscGVyX2RhbWFn ZV9pdGVyIGl0ZXI7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIG9sZF9zdGF0ZTsKPiArCXN0 cnVjdCBkcm1fcHJvcGVydHlfYmxvYiBkYW1hZ2VfYmxvYjsKPiArCXN0cnVjdCBkcm1fbW9kZV9y ZWN0IGRhbWFnZTsKPiArCXN0cnVjdCBkcm1fcmVjdCBjbGlwOwo+ICsJdWludDMyX3QgbnVtX2hp dHMgPSAwOwo+ICsKPiArCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgZmIgPSB7Cj4gKwkJLndpZHRo ID0gMjA0OCwKPiArCQkuaGVpZ2h0ID0gMjA0OAo+ICsJfTsKPiArCj4gKwlzdHJ1Y3QgZHJtX3Bs YW5lX3N0YXRlIHN0YXRlID0gewo+ICsJCS5jcnRjID0gWkVST19TSVpFX1BUUiwKPiArCQkuZmIg PSAmZmIsCj4gKwkJLnZpc2libGUgPSB0cnVlLAo+ICsJfTsKPiArCj4gKwkvKiBQbGFuZSBzcmMg d2l0aCBmcmFjdGlvbmFsIHBhcnQgbW92ZWQgc2luY2Ugb2xkIHBsYW5lIHN0YXRlLiAqLwo+ICsJ c2V0X3BsYW5lX3NyYygmb2xkX3N0YXRlLCAweDNmZmZlLCAweDNmZmZlLAo+ICsJCSAgICAgIDB4 M2ZmZmUgKyAoMTAyNCA8PCAxNiksIDB4M2ZmZmUgKyAoNzY4IDw8IDE2KSk7Cj4gKwlzZXRfcGxh bmVfc3JjKCZzdGF0ZSwgMHg0MDAwMiwgMHg0MDAwMiwKPiArCQkgICAgICAweDQwMDAyICsgKDEw MjQgPDwgMTYpLCAweDQwMDAyICsgKDc2OCA8PCAxNikpOwo+ICsJLyogRGFtYWdlIGludGVyc2Vj dCB3aXRoIHBsYW5lIHNyYy4gKi8KPiArCXNldF9kYW1hZ2VfY2xpcCgmZGFtYWdlLCAyMCwgMzAs IDEzNjAsIDI1Nik7Cj4gKwlzZXRfZGFtYWdlX2Jsb2IoJmRhbWFnZV9ibG9iLCAmZGFtYWdlLCBz aXplb2YoZGFtYWdlKSk7Cj4gKwlzZXRfcGxhbmVfZGFtYWdlKCZzdGF0ZSwgJmRhbWFnZV9ibG9i KTsKPiArCWRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyX2luaXQoJml0ZXIsICZvbGRfc3Rh dGUsICZzdGF0ZSk7Cj4gKwlkcm1fYXRvbWljX2Zvcl9lYWNoX3BsYW5lX2RhbWFnZSgmaXRlciwg JmNsaXApCj4gKwkJbnVtX2hpdHMrKzsKPiArCj4gKwlGQUlMKG51bV9oaXRzICE9IDEsICJTaG91 bGQgcmV0dXJuIHJvdW5kZWQgb2ZmIHBsYW5lIHNyYyBhcyBkYW1hZ2UuIik7Cj4gKwlGQUlMX09O KCFjaGVja19kYW1hZ2VfY2xpcCgmc3RhdGUsICZjbGlwLCA0LCA0LCAxMDI5LCA3NzMpKTsKPiAr Cj4gKwlyZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBpZ3RfZGFtYWdlX2l0ZXJfZGFt YWdlKHZvaWQgKmlnbm9yZWQpCj4gK3sKPiArCXN0cnVjdCBkcm1fYXRvbWljX2hlbHBlcl9kYW1h Z2VfaXRlciBpdGVyOwo+ICsJc3RydWN0IGRybV9wbGFuZV9zdGF0ZSBvbGRfc3RhdGU7Cj4gKwlz dHJ1Y3QgZHJtX3Byb3BlcnR5X2Jsb2IgZGFtYWdlX2Jsb2I7Cj4gKwlzdHJ1Y3QgZHJtX21vZGVf cmVjdCBkYW1hZ2VbMl07Cj4gKwlzdHJ1Y3QgZHJtX3JlY3QgY2xpcDsKPiArCXVpbnQzMl90IG51 bV9oaXRzID0gMDsKPiArCj4gKwlzdHJ1Y3QgZHJtX2ZyYW1lYnVmZmVyIGZiID0gewo+ICsJCS53 aWR0aCA9IDIwNDgsCj4gKwkJLmhlaWdodCA9IDIwNDgKPiArCX07Cj4gKwo+ICsJc3RydWN0IGRy bV9wbGFuZV9zdGF0ZSBzdGF0ZSA9IHsKPiArCQkuY3J0YyA9IFpFUk9fU0laRV9QVFIsCj4gKwkJ LmZiID0gJmZiLAo+ICsJCS52aXNpYmxlID0gdHJ1ZSwKPiArCX07Cj4gKwo+ICsJc2V0X3BsYW5l X3NyYygmb2xkX3N0YXRlLCAwLCAwLCAxMDI0IDw8IDE2LCA3NjggPDwgMTYpOwo+ICsJc2V0X3Bs YW5lX3NyYygmc3RhdGUsIDAsIDAsIDEwMjQgPDwgMTYsIDc2OCA8PCAxNik7Cj4gKwkvKiAyIGRh bWFnZSBjbGlwcy4gKi8KPiArCXNldF9kYW1hZ2VfY2xpcCgmZGFtYWdlWzBdLCAyMCwgMzAsIDIw MCwgMTgwKTsKPiArCXNldF9kYW1hZ2VfY2xpcCgmZGFtYWdlWzFdLCAyNDAsIDIwMCwgMjgwLCAy NTApOwo+ICsJc2V0X2RhbWFnZV9ibG9iKCZkYW1hZ2VfYmxvYiwgJmRhbWFnZVswXSwgc2l6ZW9m KGRhbWFnZSkpOwo+ICsJc2V0X3BsYW5lX2RhbWFnZSgmc3RhdGUsICZkYW1hZ2VfYmxvYik7Cj4g Kwlkcm1fYXRvbWljX2hlbHBlcl9kYW1hZ2VfaXRlcl9pbml0KCZpdGVyLCAmb2xkX3N0YXRlLCAm c3RhdGUpOwo+ICsJZHJtX2F0b21pY19mb3JfZWFjaF9wbGFuZV9kYW1hZ2UoJml0ZXIsICZjbGlw KSB7Cj4gKwkJaWYgKG51bV9oaXRzID09IDApCj4gKwkJCUZBSUxfT04oIWNoZWNrX2RhbWFnZV9j bGlwKCZzdGF0ZSwgJmNsaXAsIDIwLCAzMCwgMjAwLCAxODApKTsKPiArCQlpZiAobnVtX2hpdHMg PT0gMSkKPiArCQkJRkFJTF9PTighY2hlY2tfZGFtYWdlX2NsaXAoJnN0YXRlLCAmY2xpcCwgMjQw LCAyMDAsIDI4MCwgMjUwKSk7Cj4gKwkJbnVtX2hpdHMrKzsKPiArCX0KPiArCj4gKwlGQUlMKG51 bV9oaXRzICE9IDIsICJTaG91bGQgcmV0dXJuIGRhbWFnZSB3aGVuIHNldC4iKTsKPiArCj4gKwly ZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBpZ3RfZGFtYWdlX2l0ZXJfZGFtYWdlX29u ZV9pbnRlcnNlY3Qodm9pZCAqaWdub3JlZCkKPiArewo+ICsJc3RydWN0IGRybV9hdG9taWNfaGVs cGVyX2RhbWFnZV9pdGVyIGl0ZXI7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIG9sZF9zdGF0 ZTsKPiArCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiBkYW1hZ2VfYmxvYjsKPiArCXN0cnVjdCBk cm1fbW9kZV9yZWN0IGRhbWFnZVsyXTsKPiArCXN0cnVjdCBkcm1fcmVjdCBjbGlwOwo+ICsJdWlu dDMyX3QgbnVtX2hpdHMgPSAwOwo+ICsKPiArCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIgZmIgPSB7 Cj4gKwkJLndpZHRoID0gMjA0OCwKPiArCQkuaGVpZ2h0ID0gMjA0OAo+ICsJfTsKPiArCj4gKwlz dHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIHN0YXRlID0gewo+ICsJCS5jcnRjID0gWkVST19TSVpFX1BU UiwKPiArCQkuZmIgPSAmZmIsCj4gKwkJLnZpc2libGUgPSB0cnVlLAo+ICsJfTsKPiArCj4gKwlz ZXRfcGxhbmVfc3JjKCZvbGRfc3RhdGUsIDB4NDAwMDIsIDB4NDAwMDIsCj4gKwkJICAgICAgMHg0 MDAwMiArICgxMDI0IDw8IDE2KSwgMHg0MDAwMiArICg3NjggPDwgMTYpKTsKPiArCXNldF9wbGFu ZV9zcmMoJnN0YXRlLCAweDQwMDAyLCAweDQwMDAyLAo+ICsJCSAgICAgIDB4NDAwMDIgKyAoMTAy NCA8PCAxNiksIDB4NDAwMDIgKyAoNzY4IDw8IDE2KSk7Cj4gKwkvKiAyIGRhbWFnZSBjbGlwcywg b25lIGludGVyc2VjdCBwbGFuZSBzcmMuICovCj4gKwlzZXRfZGFtYWdlX2NsaXAoJmRhbWFnZVsw XSwgMjAsIDMwLCAyMDAsIDE4MCk7Cj4gKwlzZXRfZGFtYWdlX2NsaXAoJmRhbWFnZVsxXSwgMiwg MiwgMTM2MCwgMTM2MCk7Cj4gKwlzZXRfZGFtYWdlX2Jsb2IoJmRhbWFnZV9ibG9iLCAmZGFtYWdl WzBdLCBzaXplb2YoZGFtYWdlKSk7Cj4gKwlzZXRfcGxhbmVfZGFtYWdlKCZzdGF0ZSwgJmRhbWFn ZV9ibG9iKTsKPiArCWRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyX2luaXQoJml0ZXIsICZv bGRfc3RhdGUsICZzdGF0ZSk7Cj4gKwlkcm1fYXRvbWljX2Zvcl9lYWNoX3BsYW5lX2RhbWFnZSgm aXRlciwgJmNsaXApIHsKPiArCQlpZiAobnVtX2hpdHMgPT0gMCkKPiArCQkJRkFJTF9PTighY2hl Y2tfZGFtYWdlX2NsaXAoJnN0YXRlLCAmY2xpcCwgMjAsIDMwLCAyMDAsIDE4MCkpOwo+ICsJCWlm IChudW1faGl0cyA9PSAxKQo+ICsJCQlGQUlMX09OKCFjaGVja19kYW1hZ2VfY2xpcCgmc3RhdGUs ICZjbGlwLCA0LCA0LCAxMDI5LCA3NzMpKTsKPiArCQludW1faGl0cysrOwo+ICsJfQo+ICsKPiAr CUZBSUwobnVtX2hpdHMgIT0gMiwgIlNob3VsZCByZXR1cm4gZGFtYWdlIHdoZW4gc2V0LiIpOwo+ ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGlndF9kYW1hZ2VfaXRlcl9k YW1hZ2Vfb25lX291dHNpZGUodm9pZCAqaWdub3JlZCkKPiArewo+ICsJc3RydWN0IGRybV9hdG9t aWNfaGVscGVyX2RhbWFnZV9pdGVyIGl0ZXI7Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIG9s ZF9zdGF0ZTsKPiArCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxvYiBkYW1hZ2VfYmxvYjsKPiArCXN0 cnVjdCBkcm1fbW9kZV9yZWN0IGRhbWFnZVsyXTsKPiArCXN0cnVjdCBkcm1fcmVjdCBjbGlwOwo+ ICsJdWludDMyX3QgbnVtX2hpdHMgPSAwOwo+ICsKPiArCXN0cnVjdCBkcm1fZnJhbWVidWZmZXIg ZmIgPSB7Cj4gKwkJLndpZHRoID0gMjA0OCwKPiArCQkuaGVpZ2h0ID0gMjA0OAo+ICsJfTsKPiAr Cj4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIHN0YXRlID0gewo+ICsJCS5jcnRjID0gWkVST19T SVpFX1BUUiwKPiArCQkuZmIgPSAmZmIsCj4gKwkJLnZpc2libGUgPSB0cnVlLAo+ICsJfTsKPiAr Cj4gKwlzZXRfcGxhbmVfc3JjKCZvbGRfc3RhdGUsIDAsIDAsIDEwMjQgPDwgMTYsIDc2OCA8PCAx Nik7Cj4gKwlzZXRfcGxhbmVfc3JjKCZzdGF0ZSwgMCwgMCwgMTAyNCA8PCAxNiwgNzY4IDw8IDE2 KTsKPiArCS8qIDIgZGFtYWdlIGNsaXBzLCBvbmUgb3V0c2lkZSBwbGFuZSBzcmMuICovCj4gKwlz ZXRfZGFtYWdlX2NsaXAoJmRhbWFnZVswXSwgMTM2MCwgMTM2MCwgMTM4MCwgMTM4MCk7Cj4gKwlz ZXRfZGFtYWdlX2NsaXAoJmRhbWFnZVsxXSwgMjQwLCAyMDAsIDI4MCwgMjUwKTsKPiArCXNldF9k YW1hZ2VfYmxvYigmZGFtYWdlX2Jsb2IsICZkYW1hZ2VbMF0sIHNpemVvZihkYW1hZ2UpKTsKPiAr CXNldF9wbGFuZV9kYW1hZ2UoJnN0YXRlLCAmZGFtYWdlX2Jsb2IpOwo+ICsJZHJtX2F0b21pY19o ZWxwZXJfZGFtYWdlX2l0ZXJfaW5pdCgmaXRlciwgJm9sZF9zdGF0ZSwgJnN0YXRlKTsKPiArCWRy bV9hdG9taWNfZm9yX2VhY2hfcGxhbmVfZGFtYWdlKCZpdGVyLCAmY2xpcCkKPiArCQludW1faGl0 cysrOwo+ICsKPiArCUZBSUwobnVtX2hpdHMgIT0gMSwgIlNob3VsZCByZXR1cm4gZGFtYWdlIHdo ZW4gc2V0LiIpOwo+ICsJRkFJTF9PTighY2hlY2tfZGFtYWdlX2NsaXAoJnN0YXRlLCAmY2xpcCwg MjQwLCAyMDAsIDI4MCwgMjUwKSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRp YyBpbnQgaWd0X2RhbWFnZV9pdGVyX2RhbWFnZV9zcmNfbW92ZWQodm9pZCAqaWdub3JlZCkKPiAr ewo+ICsJc3RydWN0IGRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyIGl0ZXI7Cj4gKwlzdHJ1 Y3QgZHJtX3BsYW5lX3N0YXRlIG9sZF9zdGF0ZTsKPiArCXN0cnVjdCBkcm1fcHJvcGVydHlfYmxv YiBkYW1hZ2VfYmxvYjsKPiArCXN0cnVjdCBkcm1fbW9kZV9yZWN0IGRhbWFnZVsyXTsKPiArCXN0 cnVjdCBkcm1fcmVjdCBjbGlwOwo+ICsJdWludDMyX3QgbnVtX2hpdHMgPSAwOwo+ICsKPiArCXN0 cnVjdCBkcm1fZnJhbWVidWZmZXIgZmIgPSB7Cj4gKwkJLndpZHRoID0gMjA0OCwKPiArCQkuaGVp Z2h0ID0gMjA0OAo+ICsJfTsKPiArCj4gKwlzdHJ1Y3QgZHJtX3BsYW5lX3N0YXRlIHN0YXRlID0g ewo+ICsJCS5jcnRjID0gWkVST19TSVpFX1BUUiwKPiArCQkuZmIgPSAmZmIsCj4gKwkJLnZpc2li bGUgPSB0cnVlLAo+ICsJfTsKPiArCj4gKwlzZXRfcGxhbmVfc3JjKCZvbGRfc3RhdGUsIDB4NDAw MDIsIDB4NDAwMDIsCj4gKwkJICAgICAgMHg0MDAwMiArICgxMDI0IDw8IDE2KSwgMHg0MDAwMiAr ICg3NjggPDwgMTYpKTsKPiArCXNldF9wbGFuZV9zcmMoJnN0YXRlLCAweDNmZmZlLCAweDNmZmZl LAo+ICsJCSAgICAgIDB4M2ZmZmUgKyAoMTAyNCA8PCAxNiksIDB4M2ZmZmUgKyAoNzY4IDw8IDE2 KSk7Cj4gKwkvKiAyIGRhbWFnZSBjbGlwcywgb25lIG91dHNpZGUgcGxhbmUgc3JjLiAqLwo+ICsJ c2V0X2RhbWFnZV9jbGlwKCZkYW1hZ2VbMF0sIDEzNjAsIDEzNjAsIDEzODAsIDEzODApOwo+ICsJ c2V0X2RhbWFnZV9jbGlwKCZkYW1hZ2VbMV0sIDI0MCwgMjAwLCAyODAsIDI1MCk7Cj4gKwlzZXRf ZGFtYWdlX2Jsb2IoJmRhbWFnZV9ibG9iLCAmZGFtYWdlWzBdLCBzaXplb2YoZGFtYWdlKSk7Cj4g KwlzZXRfcGxhbmVfZGFtYWdlKCZzdGF0ZSwgJmRhbWFnZV9ibG9iKTsKPiArCWRybV9hdG9taWNf aGVscGVyX2RhbWFnZV9pdGVyX2luaXQoJml0ZXIsICZvbGRfc3RhdGUsICZzdGF0ZSk7Cj4gKwlk cm1fYXRvbWljX2Zvcl9lYWNoX3BsYW5lX2RhbWFnZSgmaXRlciwgJmNsaXApCj4gKwkJbnVtX2hp dHMrKzsKPiArCj4gKwlGQUlMKG51bV9oaXRzICE9IDEsICJTaG91bGQgcmV0dXJuIHJvdW5kIG9m ZiBwbGFuZSBzcmMgYXMgZGFtYWdlLiIpOwo+ICsJRkFJTF9PTighY2hlY2tfZGFtYWdlX2NsaXAo JnN0YXRlLCAmY2xpcCwgMywgMywgMTAyOCwgNzcyKSk7Cj4gKwo+ICsJcmV0dXJuIDA7Cj4gK30K PiArCj4gK3N0YXRpYyBpbnQgaWd0X2RhbWFnZV9pdGVyX2RhbWFnZV9ub3RfdmlzaWJsZSh2b2lk ICppZ25vcmVkKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2F0b21pY19oZWxwZXJfZGFtYWdlX2l0ZXIg aXRlcjsKPiArCXN0cnVjdCBkcm1fcGxhbmVfc3RhdGUgb2xkX3N0YXRlOwo+ICsJc3RydWN0IGRy bV9wcm9wZXJ0eV9ibG9iIGRhbWFnZV9ibG9iOwo+ICsJc3RydWN0IGRybV9tb2RlX3JlY3QgZGFt YWdlWzJdOwo+ICsJc3RydWN0IGRybV9yZWN0IGNsaXA7Cj4gKwl1aW50MzJfdCBudW1faGl0cyA9 IDA7Cj4gKwo+ICsJc3RydWN0IGRybV9mcmFtZWJ1ZmZlciBmYiA9IHsKPiArCQkud2lkdGggPSAy MDQ4LAo+ICsJCS5oZWlnaHQgPSAyMDQ4Cj4gKwl9Owo+ICsKPiArCXN0cnVjdCBkcm1fcGxhbmVf c3RhdGUgc3RhdGUgPSB7Cj4gKwkJLmNydGMgPSBaRVJPX1NJWkVfUFRSLAo+ICsJCS5mYiA9ICZm YiwKPiArCQkudmlzaWJsZSA9IGZhbHNlLAo+ICsJfTsKPiArCj4gKwlzZXRfcGxhbmVfc3JjKCZv bGRfc3RhdGUsIDB4NDAwMDIsIDB4NDAwMDIsCj4gKwkJICAgICAgMHg0MDAwMiArICgxMDI0IDw8 IDE2KSwgMHg0MDAwMiArICg3NjggPDwgMTYpKTsKPiArCXNldF9wbGFuZV9zcmMoJnN0YXRlLCAw eDNmZmZlLCAweDNmZmZlLAo+ICsJCSAgICAgIDB4M2ZmZmUgKyAoMTAyNCA8PCAxNiksIDB4M2Zm ZmUgKyAoNzY4IDw8IDE2KSk7Cj4gKwkvKiAyIGRhbWFnZSBjbGlwcywgb25lIG91dHNpZGUgcGxh bmUgc3JjLiAqLwo+ICsJc2V0X2RhbWFnZV9jbGlwKCZkYW1hZ2VbMF0sIDEzNjAsIDEzNjAsIDEz ODAsIDEzODApOwo+ICsJc2V0X2RhbWFnZV9jbGlwKCZkYW1hZ2VbMV0sIDI0MCwgMjAwLCAyODAs IDI1MCk7Cj4gKwlzZXRfZGFtYWdlX2Jsb2IoJmRhbWFnZV9ibG9iLCAmZGFtYWdlWzBdLCBzaXpl b2YoZGFtYWdlKSk7Cj4gKwlzZXRfcGxhbmVfZGFtYWdlKCZzdGF0ZSwgJmRhbWFnZV9ibG9iKTsK PiArCWRybV9hdG9taWNfaGVscGVyX2RhbWFnZV9pdGVyX2luaXQoJml0ZXIsICZvbGRfc3RhdGUs ICZzdGF0ZSk7Cj4gKwlkcm1fYXRvbWljX2Zvcl9lYWNoX3BsYW5lX2RhbWFnZSgmaXRlciwgJmNs aXApCj4gKwkJbnVtX2hpdHMrKzsKPiArCj4gKwlGQUlMKG51bV9oaXRzICE9IDAsICJTaG91bGQg bm90IHJldHVybiBhbnkgZGFtYWdlLiIpOwo+ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICsj aW5jbHVkZSAiZHJtX3NlbGZ0ZXN0LmMiCj4gKwo+ICtzdGF0aWMgaW50IF9faW5pdCB0ZXN0X2Ry bV9kYW1hZ2VfaGVscGVyX2luaXQodm9pZCkKPiArewo+ICsJaW50IGVycjsKPiArCj4gKwllcnIg PSBydW5fc2VsZnRlc3RzKHNlbGZ0ZXN0cywgQVJSQVlfU0laRShzZWxmdGVzdHMpLCBOVUxMKTsK PiArCj4gKwlyZXR1cm4gZXJyID4gMCA/IDAgOiBlcnI7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IF9fZXhpdCB0ZXN0X2RybV9kYW1hZ2VfaGVscGVyX2V4aXQodm9pZCkKPiArewo+ICt9Cj4gKwo+ ICttb2R1bGVfaW5pdCh0ZXN0X2RybV9kYW1hZ2VfaGVscGVyX2luaXQpOwo+ICttb2R1bGVfZXhp dCh0ZXN0X2RybV9kYW1hZ2VfaGVscGVyX2V4aXQpOwo+ICsKPiArTU9EVUxFX0FVVEhPUigiVk13 YXJlIEluYy4iKTsKPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwo+IC0tIAo+IDIuMTcuMQo+IAoK LS0gCkRhbmllbCBWZXR0ZXIKU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCmh0 dHA6Ly9ibG9nLmZmd2xsLmNoCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxpc3RzLmZyZWVkZXNr dG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2Ry aS1kZXZlbAo=