From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: [PATCH v4 1/2] drm/i915: Tidy workaround batch buffer emission Date: Thu, 16 Feb 2017 13:51:19 +0000 Message-ID: <20170216135119.22816-1-tvrtko.ursulin@linux.intel.com> References: <98bd8579-7429-e3f7-069a-9cbd21b979ea@linux.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wr0-x243.google.com (mail-wr0-x243.google.com [IPv6:2a00:1450:400c:c0c::243]) by gabe.freedesktop.org (Postfix) with ESMTPS id 961576EB34 for ; Thu, 16 Feb 2017 13:51:28 +0000 (UTC) Received: by mail-wr0-x243.google.com with SMTP id c4so2137587wrd.1 for ; Thu, 16 Feb 2017 05:51:28 -0800 (PST) In-Reply-To: <98bd8579-7429-e3f7-069a-9cbd21b979ea@linux.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KClVzZSB0aGUg IipiYXRjaCsrID0gIiBzdHlsZSBhcyBpbiB0aGUgcmluZyBlbWlzc2lvbiBmb3IgYmV0dGVyCnJl YWRhYmlsaXR5IGFuZCBhbHNvIHNpbXBsaWZ5IHRoZSBsb2dpYyBhIGJpdCBieSBjb25zb2xpZGF0 aW5nCnRoZSBvZmZzZXQgYW5kIHNpemUgY2FsY3VsYXRpb25zIGFuZCBvdmVyZmxvdyBjaGVja2lu Zy4gVGhlCmxhdHRlciBpcyBhIHByb2dyYW1taW5nIGVycm9yIHNvIGl0IGlzIG5vdCByZXF1aXJl ZCB0byBjaGVjawpmb3IgaXQgYWZ0ZXIgZWFjaCB3cml0ZSB0byB0aGUgb2JqZWN0LCBidXQgcmF0 aGVyIGRvIGl0IG9uY2UgdGhlCndob2xlIHN0YXRlIGhhcyBiZWVuIHdyaXR0ZW4gYW5kIGZhaWwg dGhlIGRyaXZlciBpZiBzb21ldGhpbmcKd2VudCB3cm9uZy4KCnYyOiBSZWJhc2UuCgp2MzogS2Vl cCB0cmFjayBvZiBvZmZzZXRzIGFuZCBzaXplcyBpbiBieXRlcyBmb3Igc2ltcGxpY2l0eQogICAg YW5kIHJlbmFtZSBmdW5jdGlvbiBwb2ludGVyIHZhcmlhYmxlIHRvIF9mbiBzdWZmaXguCiAgICAo Q2hyaXMgV2lsc29uKQoKdjQ6IEZpeCBzaXplIGNhbGMgYnJva2VuIGluIHYzIGFuZCBhZGQgYWxp Z25tZW50IHdhcm5pbmcuIChDaHJpcyBXaWxzb24pCgpTaWduZWQtb2ZmLWJ5OiBUdnJ0a28gVXJz dWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgpSZXZpZXdlZC1ieTogQ2hyaXMgV2lsc29u IDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+ICh2MikKQ2M6IENocmlzIFdpbHNvbiA8Y2hyaXNA Y2hyaXMtd2lsc29uLmNvLnVrPgotLS0KIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2xyYy5j IHwgMzE2ICsrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogMSBmaWxlIGNo YW5nZWQsIDExNSBpbnNlcnRpb25zKCspLCAyMDEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9p bnRlbF9scmMuYwppbmRleCBlZTQzMWQzOWNlMDYuLjJkODM5ZjM2NGViNCAxMDA2NDQKLS0tIGEv ZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfbHJjLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvaW50ZWxfbHJjLmMKQEAgLTg5MCwxOCArODkwLDYgQEAgc3RhdGljIGludCBleGVjbGlzdHNf cmVxdWVzdF9hbGxvYyhzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJlcXVlc3QpCiAJcmV0 dXJuIHJldDsKIH0KIAotI2RlZmluZSB3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIGNtZCkJCQkJ CVwKLQlkbyB7CQkJCQkJCQlcCi0JCWludCBfX2luZGV4ID0gKGluZGV4KSsrOwkJCQlcCi0JCWlm IChXQVJOX09OKF9faW5kZXggPj0gKFBBR0VfU0laRSAvIHNpemVvZih1aW50MzJfdCkpKSkgeyBc Ci0JCQlyZXR1cm4gLUVOT1NQQzsJCQkJCVwKLQkJfQkJCQkJCQlcCi0JCWJhdGNoW19faW5kZXhd ID0gKGNtZCk7CQkJCQlcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmluZSB3YV9jdHhfZW1pdF9yZWco YmF0Y2gsIGluZGV4LCByZWcpIFwKLQl3YV9jdHhfZW1pdCgoYmF0Y2gpLCAoaW5kZXgpLCBpOTE1 X21taW9fcmVnX29mZnNldChyZWcpKQotCiAvKgogICogSW4gdGhpcyBXQSB3ZSBuZWVkIHRvIHNl dCBHRU44X0wzU1FDUkVHNFsyMToyMV0gYW5kIHJlc2V0IGl0IGFmdGVyCiAgKiBQSVBFX0NPTlRS T0wgaW5zdHJ1Y3Rpb24uIFRoaXMgaXMgcmVxdWlyZWQgZm9yIHRoZSBmbHVzaCB0byBoYXBwZW4g Y29ycmVjdGx5CkBAIC05MTgsNTYgKzkwNiwzMSBAQCBzdGF0aWMgaW50IGV4ZWNsaXN0c19yZXF1 ZXN0X2FsbG9jKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcmVxdWVzdCkKICAqIFRoaXMg V0EgaXMgYWxzbyByZXF1aXJlZCBmb3IgR2VuOSBzbyBleHRyYWN0aW5nIGFzIGEgZnVuY3Rpb24g YXZvaWRzCiAgKiBjb2RlIGR1cGxpY2F0aW9uLgogICovCi1zdGF0aWMgaW5saW5lIGludCBnZW44 X2VtaXRfZmx1c2hfY29oZXJlbnRsM193YShzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUs Ci0JCQkJCQl1aW50MzJfdCAqYmF0Y2gsCi0JCQkJCQl1aW50MzJfdCBpbmRleCkKLXsKLQl1aW50 MzJfdCBsM3NxYzRfZmx1c2ggPSAoMHg0MDQwMDAwMCB8IEdFTjhfTFFTQ19GTFVTSF9DT0hFUkVO VF9MSU5FUyk7Ci0KLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIChNSV9TVE9SRV9SRUdJU1RF Ul9NRU1fR0VOOCB8Ci0JCQkJICAgTUlfU1JNX0xSTV9HTE9CQUxfR1RUKSk7Ci0Jd2FfY3R4X2Vt aXRfcmVnKGJhdGNoLCBpbmRleCwgR0VOOF9MM1NRQ1JFRzQpOwotCXdhX2N0eF9lbWl0KGJhdGNo LCBpbmRleCwgaTkxNV9nZ3R0X29mZnNldChlbmdpbmUtPnNjcmF0Y2gpICsgMjU2KTsKLQl3YV9j dHhfZW1pdChiYXRjaCwgaW5kZXgsIDApOwotCi0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBN SV9MT0FEX1JFR0lTVEVSX0lNTSgxKSk7Ci0Jd2FfY3R4X2VtaXRfcmVnKGJhdGNoLCBpbmRleCwg R0VOOF9MM1NRQ1JFRzQpOwotCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgbDNzcWM0X2ZsdXNo KTsKLQotCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgR0ZYX09QX1BJUEVfQ09OVFJPTCg2KSk7 Ci0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCAoUElQRV9DT05UUk9MX0NTX1NUQUxMIHwKLQkJ CQkgICBQSVBFX0NPTlRST0xfRENfRkxVU0hfRU5BQkxFKSk7Ci0Jd2FfY3R4X2VtaXQoYmF0Y2gs IGluZGV4LCAwKTsKLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIDApOwotCXdhX2N0eF9lbWl0 KGJhdGNoLCBpbmRleCwgMCk7Ci0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCAwKTsKLQotCXdh X2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgKE1JX0xPQURfUkVHSVNURVJfTUVNX0dFTjggfAotCQkJ CSAgIE1JX1NSTV9MUk1fR0xPQkFMX0dUVCkpOwotCXdhX2N0eF9lbWl0X3JlZyhiYXRjaCwgaW5k ZXgsIEdFTjhfTDNTUUNSRUc0KTsKLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIGk5MTVfZ2d0 dF9vZmZzZXQoZW5naW5lLT5zY3JhdGNoKSArIDI1Nik7Ci0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGlu ZGV4LCAwKTsKLQotCXJldHVybiBpbmRleDsKLX0KLQotc3RhdGljIGlubGluZSB1aW50MzJfdCB3 YV9jdHhfc3RhcnQoc3RydWN0IGk5MTVfd2FfY3R4X2JiICp3YV9jdHgsCi0JCQkJICAgIHVpbnQz Ml90IG9mZnNldCwKLQkJCQkgICAgdWludDMyX3Qgc3RhcnRfYWxpZ25tZW50KQotewotCXJldHVy biB3YV9jdHgtPm9mZnNldCA9IEFMSUdOKG9mZnNldCwgc3RhcnRfYWxpZ25tZW50KTsKLX0KLQot c3RhdGljIGlubGluZSBpbnQgd2FfY3R4X2VuZChzdHJ1Y3QgaTkxNV93YV9jdHhfYmIgKndhX2N0 eCwKLQkJCSAgICAgdWludDMyX3Qgb2Zmc2V0LAotCQkJICAgICB1aW50MzJfdCBzaXplX2FsaWdu bWVudCkKK3N0YXRpYyB1MzIgKgorZ2VuOF9lbWl0X2ZsdXNoX2NvaGVyZW50bDNfd2Eoc3RydWN0 IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1MzIgKmJhdGNoKQogewotCXdhX2N0eC0+c2l6ZSA9 IG9mZnNldCAtIHdhX2N0eC0+b2Zmc2V0OwotCi0JV0FSTih3YV9jdHgtPnNpemUgJSBzaXplX2Fs aWdubWVudCwKLQkgICAgICJ3YV9jdHhfYmIgZmFpbGVkIHNhbml0eSBjaGVja3M6IHNpemUgJWQg aXMgbm90IGFsaWduZWQgdG8gJWRcbiIsCi0JICAgICB3YV9jdHgtPnNpemUsIHNpemVfYWxpZ25t ZW50KTsKLQlyZXR1cm4gMDsKKwkqYmF0Y2grKyA9IE1JX1NUT1JFX1JFR0lTVEVSX01FTV9HRU44 IHwgTUlfU1JNX0xSTV9HTE9CQUxfR1RUOworCSpiYXRjaCsrID0gaTkxNV9tbWlvX3JlZ19vZmZz ZXQoR0VOOF9MM1NRQ1JFRzQpOworCSpiYXRjaCsrID0gaTkxNV9nZ3R0X29mZnNldChlbmdpbmUt PnNjcmF0Y2gpICsgMjU2OworCSpiYXRjaCsrID0gMDsKKworCSpiYXRjaCsrID0gTUlfTE9BRF9S RUdJU1RFUl9JTU0oMSk7CisJKmJhdGNoKysgPSBpOTE1X21taW9fcmVnX29mZnNldChHRU44X0wz U1FDUkVHNCk7CisJKmJhdGNoKysgPSAweDQwNDAwMDAwIHwgR0VOOF9MUVNDX0ZMVVNIX0NPSEVS RU5UX0xJTkVTOworCisJKmJhdGNoKysgPSBHRlhfT1BfUElQRV9DT05UUk9MKDYpOworCSpiYXRj aCsrID0gUElQRV9DT05UUk9MX0NTX1NUQUxMIHwgUElQRV9DT05UUk9MX0RDX0ZMVVNIX0VOQUJM RTsKKwkqYmF0Y2grKyA9IDA7CisJKmJhdGNoKysgPSAwOworCSpiYXRjaCsrID0gMDsKKwkqYmF0 Y2grKyA9IDA7CisKKwkqYmF0Y2grKyA9IE1JX0xPQURfUkVHSVNURVJfTUVNX0dFTjggfCBNSV9T Uk1fTFJNX0dMT0JBTF9HVFQ7CisJKmJhdGNoKysgPSBpOTE1X21taW9fcmVnX29mZnNldChHRU44 X0wzU1FDUkVHNCk7CisJKmJhdGNoKysgPSBpOTE1X2dndHRfb2Zmc2V0KGVuZ2luZS0+c2NyYXRj aCkgKyAyNTY7CisJKmJhdGNoKysgPSAwOworCisJcmV0dXJuIGJhdGNoOwogfQogCiAvKgpAQCAt OTg1LDQyICs5NDgsMjggQEAgc3RhdGljIGlubGluZSBpbnQgd2FfY3R4X2VuZChzdHJ1Y3QgaTkx NV93YV9jdHhfYmIgKndhX2N0eCwKICAqIE1JX0JBVENIX0JVRkZFUl9FTkQgd2lsbCBiZSBhZGRl ZCB0byBwZXJjdHggYmF0Y2ggYW5kIGJvdGggb2YgdGhlbSB0b2dldGhlcgogICogbWFrZXMgYSBj b21wbGV0ZSBiYXRjaCBidWZmZXIuCiAgKi8KLXN0YXRpYyBpbnQgZ2VuOF9pbml0X2luZGlyZWN0 Y3R4X2JiKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKLQkJCQkgICAgc3RydWN0IGk5 MTVfd2FfY3R4X2JiICp3YV9jdHgsCi0JCQkJICAgIHVpbnQzMl90ICpiYXRjaCwKLQkJCQkgICAg dWludDMyX3QgKm9mZnNldCkKK3N0YXRpYyB1MzIgKmdlbjhfaW5pdF9pbmRpcmVjdGN0eF9iYihz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHUzMiAqYmF0Y2gpCiB7Ci0JdWludDMyX3Qg c2NyYXRjaF9hZGRyOwotCXVpbnQzMl90IGluZGV4ID0gd2FfY3R4X3N0YXJ0KHdhX2N0eCwgKm9m ZnNldCwgQ0FDSEVMSU5FX0RXT1JEUyk7Ci0KIAkvKiBXYURpc2FibGVDdHhSZXN0b3JlQXJiaXRy YXRpb246YmR3LGNodiAqLwotCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgTUlfQVJCX09OX09G RiB8IE1JX0FSQl9ESVNBQkxFKTsKKwkqYmF0Y2grKyA9IE1JX0FSQl9PTl9PRkYgfCBNSV9BUkJf RElTQUJMRTsKIAogCS8qIFdhRmx1c2hDb2hlcmVudEwzQ2FjaGVMaW5lc0F0Q29udGV4dFN3aXRj aDpiZHcgKi8KLQlpZiAoSVNfQlJPQURXRUxMKGVuZ2luZS0+aTkxNSkpIHsKLQkJaW50IHJjID0g Z2VuOF9lbWl0X2ZsdXNoX2NvaGVyZW50bDNfd2EoZW5naW5lLCBiYXRjaCwgaW5kZXgpOwotCQlp ZiAocmMgPCAwKQotCQkJcmV0dXJuIHJjOwotCQlpbmRleCA9IHJjOwotCX0KKwlpZiAoSVNfQlJP QURXRUxMKGVuZ2luZS0+aTkxNSkpCisJCWJhdGNoID0gZ2VuOF9lbWl0X2ZsdXNoX2NvaGVyZW50 bDNfd2EoZW5naW5lLCBiYXRjaCk7CiAKKwkqYmF0Y2grKyA9IEdGWF9PUF9QSVBFX0NPTlRST0wo Nik7CisJKmJhdGNoKysgPSBQSVBFX0NPTlRST0xfRkxVU0hfTDMgfCBQSVBFX0NPTlRST0xfR0xP QkFMX0dUVF9JVkIgfAorCQkgICBQSVBFX0NPTlRST0xfQ1NfU1RBTEwgfCBQSVBFX0NPTlRST0xf UVdfV1JJVEU7CiAJLyogV2FDbGVhclNsbVNwYWNlQXRDb250ZXh0U3dpdGNoOmJkdyxjaHYgKi8K IAkvKiBBY3R1YWwgc2NyYXRjaCBsb2NhdGlvbiBpcyBhdCAxMjggYnl0ZXMgb2Zmc2V0ICovCi0J c2NyYXRjaF9hZGRyID0gaTkxNV9nZ3R0X29mZnNldChlbmdpbmUtPnNjcmF0Y2gpICsgMiAqIENB Q0hFTElORV9CWVRFUzsKLQotCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgR0ZYX09QX1BJUEVf Q09OVFJPTCg2KSk7Ci0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCAoUElQRV9DT05UUk9MX0ZM VVNIX0wzIHwKLQkJCQkgICBQSVBFX0NPTlRST0xfR0xPQkFMX0dUVF9JVkIgfAotCQkJCSAgIFBJ UEVfQ09OVFJPTF9DU19TVEFMTCB8Ci0JCQkJICAgUElQRV9DT05UUk9MX1FXX1dSSVRFKSk7Ci0J d2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBzY3JhdGNoX2FkZHIpOwotCXdhX2N0eF9lbWl0KGJh dGNoLCBpbmRleCwgMCk7Ci0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCAwKTsKLQl3YV9jdHhf ZW1pdChiYXRjaCwgaW5kZXgsIDApOworCSpiYXRjaCsrID0gaTkxNV9nZ3R0X29mZnNldChlbmdp bmUtPnNjcmF0Y2gpICsgMiAqIENBQ0hFTElORV9CWVRFUzsKKwkqYmF0Y2grKyA9IDA7CisJKmJh dGNoKysgPSAwOworCSpiYXRjaCsrID0gMDsKIAogCS8qIFBhZCB0byBlbmQgb2YgY2FjaGVsaW5l ICovCi0Jd2hpbGUgKGluZGV4ICUgQ0FDSEVMSU5FX0RXT1JEUykKLQkJd2FfY3R4X2VtaXQoYmF0 Y2gsIGluZGV4LCBNSV9OT09QKTsKKwl3aGlsZSAoKHVuc2lnbmVkIGxvbmcpYmF0Y2ggJSBDQUNI RUxJTkVfQllURVMpCisJCSpiYXRjaCsrID0gTUlfTk9PUDsKIAogCS8qCiAJICogTUlfQkFUQ0hf QlVGRkVSX0VORCBpcyBub3QgcmVxdWlyZWQgaW4gSW5kaXJlY3QgY3R4IEJCIGJlY2F1c2UKQEAg LTEwMjgsNyArOTc3LDcgQEAgc3RhdGljIGludCBnZW44X2luaXRfaW5kaXJlY3RjdHhfYmIoc3Ry dWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAogCSAqIGluIHRoZSByZWdpc3RlciBDVFhfUkNT X0lORElSRUNUX0NUWAogCSAqLwogCi0JcmV0dXJuIHdhX2N0eF9lbmQod2FfY3R4LCAqb2Zmc2V0 ID0gaW5kZXgsIENBQ0hFTElORV9EV09SRFMpOworCXJldHVybiBiYXRjaDsKIH0KIAogLyoKQEAg LTEwNDAsNTggKzk4OSwzOCBAQCBzdGF0aWMgaW50IGdlbjhfaW5pdF9pbmRpcmVjdGN0eF9iYihz dHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsCiAgKiAgVGhpcyBiYXRjaCBpcyB0ZXJtaW5h dGVkIHdpdGggTUlfQkFUQ0hfQlVGRkVSX0VORCBhbmQgc28gd2UgbmVlZCBub3QgYWRkIHBhZGRp bmcKICAqICB0byBhbGlnbiBpdCB3aXRoIGNhY2hlbGluZSBhcyBwYWRkaW5nIGFmdGVyIE1JX0JB VENIX0JVRkZFUl9FTkQgaXMgcmVkdW5kYW50LgogICovCi1zdGF0aWMgaW50IGdlbjhfaW5pdF9w ZXJjdHhfYmIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAotCQkJICAgICAgIHN0cnVj dCBpOTE1X3dhX2N0eF9iYiAqd2FfY3R4LAotCQkJICAgICAgIHVpbnQzMl90ICpiYXRjaCwKLQkJ CSAgICAgICB1aW50MzJfdCAqb2Zmc2V0KQorc3RhdGljIHUzMiAqZ2VuOF9pbml0X3BlcmN0eF9i YihzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUsIHUzMiAqYmF0Y2gpCiB7Ci0JdWludDMy X3QgaW5kZXggPSB3YV9jdHhfc3RhcnQod2FfY3R4LCAqb2Zmc2V0LCBDQUNIRUxJTkVfRFdPUkRT KTsKLQogCS8qIFdhRGlzYWJsZUN0eFJlc3RvcmVBcmJpdHJhdGlvbjpiZHcsY2h2ICovCi0Jd2Ff Y3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBNSV9BUkJfT05fT0ZGIHwgTUlfQVJCX0VOQUJMRSk7CisJ KmJhdGNoKysgPSBNSV9BUkJfT05fT0ZGIHwgTUlfQVJCX0VOQUJMRTsKKwkqYmF0Y2grKyA9IE1J X0JBVENIX0JVRkZFUl9FTkQ7CiAKLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIE1JX0JBVENI X0JVRkZFUl9FTkQpOwotCi0JcmV0dXJuIHdhX2N0eF9lbmQod2FfY3R4LCAqb2Zmc2V0ID0gaW5k ZXgsIDEpOworCXJldHVybiBiYXRjaDsKIH0KIAotc3RhdGljIGludCBnZW45X2luaXRfaW5kaXJl Y3RjdHhfYmIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLAotCQkJCSAgICBzdHJ1Y3Qg aTkxNV93YV9jdHhfYmIgKndhX2N0eCwKLQkJCQkgICAgdWludDMyX3QgKmJhdGNoLAotCQkJCSAg ICB1aW50MzJfdCAqb2Zmc2V0KQorc3RhdGljIHUzMiAqZ2VuOV9pbml0X2luZGlyZWN0Y3R4X2Ji KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgdTMyICpiYXRjaCkKIHsKLQlpbnQgcmV0 OwotCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGVuZ2luZS0+aTkxNTsKLQl1 aW50MzJfdCBpbmRleCA9IHdhX2N0eF9zdGFydCh3YV9jdHgsICpvZmZzZXQsIENBQ0hFTElORV9E V09SRFMpOwotCiAJLyogV2FGbHVzaENvaGVyZW50TDNDYWNoZUxpbmVzQXRDb250ZXh0U3dpdGNo OnNrbCxieHQsZ2xrICovCi0JcmV0ID0gZ2VuOF9lbWl0X2ZsdXNoX2NvaGVyZW50bDNfd2EoZW5n aW5lLCBiYXRjaCwgaW5kZXgpOwotCWlmIChyZXQgPCAwKQotCQlyZXR1cm4gcmV0OwotCWluZGV4 ID0gcmV0OworCWJhdGNoID0gZ2VuOF9lbWl0X2ZsdXNoX2NvaGVyZW50bDNfd2EoZW5naW5lLCBi YXRjaCk7CiAKIAkvKiBXYURpc2FibGVHYXRoZXJBdFNldFNoYWRlckNvbW1vblNsaWNlOnNrbCxi eHQsa2JsLGdsayAqLwotCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgTUlfTE9BRF9SRUdJU1RF Ul9JTU0oMSkpOwotCXdhX2N0eF9lbWl0X3JlZyhiYXRjaCwgaW5kZXgsIENPTU1PTl9TTElDRV9D SElDS0VOMik7Ci0Jd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBfTUFTS0VEX0JJVF9ESVNBQkxF KAotCQkJICAgIEdFTjlfRElTQUJMRV9HQVRIRVJfQVRfU0VUX1NIQURFUl9DT01NT05fU0xJQ0Up KTsKLQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIE1JX05PT1ApOworCSpiYXRjaCsrID0gTUlf TE9BRF9SRUdJU1RFUl9JTU0oMSk7CisJKmJhdGNoKysgPSBpOTE1X21taW9fcmVnX29mZnNldChD T01NT05fU0xJQ0VfQ0hJQ0tFTjIpOworCSpiYXRjaCsrID0gX01BU0tFRF9CSVRfRElTQUJMRSgK KwkJCUdFTjlfRElTQUJMRV9HQVRIRVJfQVRfU0VUX1NIQURFUl9DT01NT05fU0xJQ0UpOworCSpi YXRjaCsrID0gTUlfTk9PUDsKIAogCS8qIFdhQ2xlYXJTbG1TcGFjZUF0Q29udGV4dFN3aXRjaDpr YmwgKi8KIAkvKiBBY3R1YWwgc2NyYXRjaCBsb2NhdGlvbiBpcyBhdCAxMjggYnl0ZXMgb2Zmc2V0 ICovCi0JaWYgKElTX0tCTF9SRVZJRChkZXZfcHJpdiwgMCwgS0JMX1JFVklEX0EwKSkgewotCQl1 MzIgc2NyYXRjaF9hZGRyID0KLQkJCWk5MTVfZ2d0dF9vZmZzZXQoZW5naW5lLT5zY3JhdGNoKSAr IDIgKiBDQUNIRUxJTkVfQllURVM7Ci0KLQkJd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCBHRlhf T1BfUElQRV9DT05UUk9MKDYpKTsKLQkJd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCAoUElQRV9D T05UUk9MX0ZMVVNIX0wzIHwKLQkJCQkJICAgUElQRV9DT05UUk9MX0dMT0JBTF9HVFRfSVZCIHwK LQkJCQkJICAgUElQRV9DT05UUk9MX0NTX1NUQUxMIHwKLQkJCQkJICAgUElQRV9DT05UUk9MX1FX X1dSSVRFKSk7Ci0JCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgc2NyYXRjaF9hZGRyKTsKLQkJ d2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCAwKTsKLQkJd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4 LCAwKTsKLQkJd2FfY3R4X2VtaXQoYmF0Y2gsIGluZGV4LCAwKTsKKwlpZiAoSVNfS0JMX1JFVklE KGVuZ2luZS0+aTkxNSwgMCwgS0JMX1JFVklEX0EwKSkgeworCQkqYmF0Y2grKyA9IEdGWF9PUF9Q SVBFX0NPTlRST0woNik7CisJCSpiYXRjaCsrID0gUElQRV9DT05UUk9MX0ZMVVNIX0wzIHwgUElQ RV9DT05UUk9MX0dMT0JBTF9HVFRfSVZCIHwKKwkJCSAgIFBJUEVfQ09OVFJPTF9DU19TVEFMTCB8 IFBJUEVfQ09OVFJPTF9RV19XUklURTsKKwkJKmJhdGNoKysgPSBpOTE1X2dndHRfb2Zmc2V0KGVu Z2luZS0+c2NyYXRjaCkgKworCQkJICAgMiAqIENBQ0hFTElORV9CWVRFUzsKKwkJKmJhdGNoKysg PSAwOworCQkqYmF0Y2grKyA9IDA7CisJCSpiYXRjaCsrID0gMDsKIAl9CiAKIAkvKiBXYU1lZGlh UG9vbFN0YXRlQ21kSW5XQUJCOmJ4dCxnbGsgKi8KQEAgLTExMDksNDEgKzEwMzgsMzcgQEAgc3Rh dGljIGludCBnZW45X2luaXRfaW5kaXJlY3RjdHhfYmIoc3RydWN0IGludGVsX2VuZ2luZV9jcyAq ZW5naW5lLAogCQkgKiBwb3NzaWJsZSBjb25maWd1cmF0aW9ucywgdG8gYXZvaWQgZHVwbGljYXRp b24gdGhleSBhcmUKIAkJICogbm90IHNob3duIGhlcmUgYWdhaW4uCiAJCSAqLwotCQl1MzIgZXVf cG9vbF9jb25maWcgPSAweDAwNzc3MDAwOwotCQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIEdF TjlfTUVESUFfUE9PTF9TVEFURSk7Ci0JCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgR0VOOV9N RURJQV9QT09MX0VOQUJMRSk7Ci0JCXdhX2N0eF9lbWl0KGJhdGNoLCBpbmRleCwgZXVfcG9vbF9j b25maWcpOwotCQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIDApOwotCQl3YV9jdHhfZW1pdChi YXRjaCwgaW5kZXgsIDApOwotCQl3YV9jdHhfZW1pdChiYXRjaCwgaW5kZXgsIDApOworCQkqYmF0 Y2grKyA9IEdFTjlfTUVESUFfUE9PTF9TVEFURTsKKwkJKmJhdGNoKysgPSBHRU45X01FRElBX1BP T0xfRU5BQkxFOworCQkqYmF0Y2grKyA9IDB4MDA3NzcwMDA7CisJCSpiYXRjaCsrID0gMDsKKwkJ KmJhdGNoKysgPSAwOworCQkqYmF0Y2grKyA9IDA7CiAJfQogCiAJLyogUGFkIHRvIGVuZCBvZiBj YWNoZWxpbmUgKi8KLQl3aGlsZSAoaW5kZXggJSBDQUNIRUxJTkVfRFdPUkRTKQotCQl3YV9jdHhf ZW1pdChiYXRjaCwgaW5kZXgsIE1JX05PT1ApOworCXdoaWxlICgodW5zaWduZWQgbG9uZyliYXRj aCAlIENBQ0hFTElORV9CWVRFUykKKwkJKmJhdGNoKysgPSBNSV9OT09QOwogCi0JcmV0dXJuIHdh X2N0eF9lbmQod2FfY3R4LCAqb2Zmc2V0ID0gaW5kZXgsIENBQ0hFTElORV9EV09SRFMpOworCXJl dHVybiBiYXRjaDsKIH0KIAotc3RhdGljIGludCBnZW45X2luaXRfcGVyY3R4X2JiKHN0cnVjdCBp bnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKLQkJCSAgICAgICBzdHJ1Y3QgaTkxNV93YV9jdHhfYmIg KndhX2N0eCwKLQkJCSAgICAgICB1aW50MzJfdCAqYmF0Y2gsCi0JCQkgICAgICAgdWludDMyX3Qg Km9mZnNldCkKK3N0YXRpYyB1MzIgKmdlbjlfaW5pdF9wZXJjdHhfYmIoc3RydWN0IGludGVsX2Vu Z2luZV9jcyAqZW5naW5lLCB1MzIgKmJhdGNoKQogewotCXVpbnQzMl90IGluZGV4ID0gd2FfY3R4 X3N0YXJ0KHdhX2N0eCwgKm9mZnNldCwgQ0FDSEVMSU5FX0RXT1JEUyk7Ci0KLQl3YV9jdHhfZW1p dChiYXRjaCwgaW5kZXgsIE1JX0JBVENIX0JVRkZFUl9FTkQpOworCSpiYXRjaCsrID0gTUlfQkFU Q0hfQlVGRkVSX0VORDsKIAotCXJldHVybiB3YV9jdHhfZW5kKHdhX2N0eCwgKm9mZnNldCA9IGlu ZGV4LCAxKTsKKwlyZXR1cm4gYmF0Y2g7CiB9CiAKLXN0YXRpYyBpbnQgbHJjX3NldHVwX3dhX2N0 eF9vYmooc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lLCB1MzIgc2l6ZSkKKyNkZWZpbmUg Q1RYX1dBX0JCX09CSl9TSVpFIChQQUdFX1NJWkUpCisKK3N0YXRpYyBpbnQgbHJjX3NldHVwX3dh X2N0eChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiB7CiAJc3RydWN0IGRybV9pOTE1 X2dlbV9vYmplY3QgKm9iajsKIAlzdHJ1Y3QgaTkxNV92bWEgKnZtYTsKIAlpbnQgZXJyOwogCi0J b2JqID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZShlbmdpbmUtPmk5MTUsIFBBR0VfQUxJR04oc2l6 ZSkpOworCW9iaiA9IGk5MTVfZ2VtX29iamVjdF9jcmVhdGUoZW5naW5lLT5pOTE1LCBDVFhfV0Ff QkJfT0JKX1NJWkUpOwogCWlmIChJU19FUlIob2JqKSkKIAkJcmV0dXJuIFBUUl9FUlIob2JqKTsK IApAQCAtMTE2NSw4MCArMTA5MCw3MCBAQCBzdGF0aWMgaW50IGxyY19zZXR1cF93YV9jdHhfb2Jq KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgdTMyIHNpemUpCiAJcmV0dXJuIGVycjsK IH0KIAotc3RhdGljIHZvaWQgbHJjX2Rlc3Ryb3lfd2FfY3R4X29iaihzdHJ1Y3QgaW50ZWxfZW5n aW5lX2NzICplbmdpbmUpCitzdGF0aWMgdm9pZCBscmNfZGVzdHJveV93YV9jdHgoc3RydWN0IGlu dGVsX2VuZ2luZV9jcyAqZW5naW5lKQogewogCWk5MTVfdm1hX3VucGluX2FuZF9yZWxlYXNlKCZl bmdpbmUtPndhX2N0eC52bWEpOwogfQogCit0eXBlZGVmIHUzMiAqKCp3YV9iYl9mdW5jX3QpKHN0 cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwgdTMyICpiYXRjaCk7CisKIHN0YXRpYyBpbnQg aW50ZWxfaW5pdF93b3JrYXJvdW5kX2JiKHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSkK IHsKIAlzdHJ1Y3QgaTkxNV9jdHhfd29ya2Fyb3VuZHMgKndhX2N0eCA9ICZlbmdpbmUtPndhX2N0 eDsKLQl1aW50MzJfdCAqYmF0Y2g7Ci0JdWludDMyX3Qgb2Zmc2V0OworCXN0cnVjdCBpOTE1X3dh X2N0eF9iYiAqd2FfYmJbMl0gPSB7ICZ3YV9jdHgtPmluZGlyZWN0X2N0eCwKKwkJCQkJICAgICZ3 YV9jdHgtPnBlcl9jdHggfTsKKwl3YV9iYl9mdW5jX3Qgd2FfYmJfZm5bMl07CiAJc3RydWN0IHBh Z2UgKnBhZ2U7CisJdm9pZCAqYmF0Y2gsICpiYXRjaF9wdHI7CisJdW5zaWduZWQgaW50IGk7CiAJ aW50IHJldDsKIAotCVdBUk5fT04oZW5naW5lLT5pZCAhPSBSQ1MpOworCWlmIChXQVJOX09OKGVu Z2luZS0+aWQgIT0gUkNTIHx8ICFlbmdpbmUtPnNjcmF0Y2gpKQorCQlyZXR1cm4gLUVJTlZBTDsK IAotCS8qIHVwZGF0ZSB0aGlzIHdoZW4gV0EgZm9yIGhpZ2hlciBHZW4gYXJlIGFkZGVkICovCi0J aWYgKElOVEVMX0dFTihlbmdpbmUtPmk5MTUpID4gOSkgewotCQlEUk1fRVJST1IoIldBIGJhdGNo IGJ1ZmZlciBpcyBub3QgaW5pdGlhbGl6ZWQgZm9yIEdlbiVkXG4iLAotCQkJICBJTlRFTF9HRU4o ZW5naW5lLT5pOTE1KSk7CisJc3dpdGNoIChJTlRFTF9HRU4oZW5naW5lLT5pOTE1KSkgeworCWNh c2UgOToKKwkJd2FfYmJfZm5bMF0gPSBnZW45X2luaXRfaW5kaXJlY3RjdHhfYmI7CisJCXdhX2Ji X2ZuWzFdID0gZ2VuOV9pbml0X3BlcmN0eF9iYjsKKwkJYnJlYWs7CisJY2FzZSA4OgorCQl3YV9i Yl9mblswXSA9IGdlbjhfaW5pdF9pbmRpcmVjdGN0eF9iYjsKKwkJd2FfYmJfZm5bMV0gPSBnZW44 X2luaXRfcGVyY3R4X2JiOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlNSVNTSU5HX0NBU0UoSU5U RUxfR0VOKGVuZ2luZS0+aTkxNSkpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQkvKiBzb21lIFdBIHBl cmZvcm0gd3JpdGVzIHRvIHNjcmF0Y2ggcGFnZSwgZW5zdXJlIGl0IGlzIHZhbGlkICovCi0JaWYg KCFlbmdpbmUtPnNjcmF0Y2gpIHsKLQkJRFJNX0VSUk9SKCJzY3JhdGNoIHBhZ2Ugbm90IGFsbG9j YXRlZCBmb3IgJXNcbiIsIGVuZ2luZS0+bmFtZSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQot CXJldCA9IGxyY19zZXR1cF93YV9jdHhfb2JqKGVuZ2luZSwgUEFHRV9TSVpFKTsKKwlyZXQgPSBs cmNfc2V0dXBfd2FfY3R4KGVuZ2luZSk7CiAJaWYgKHJldCkgewogCQlEUk1fREVCVUdfRFJJVkVS KCJGYWlsZWQgdG8gc2V0dXAgY29udGV4dCBXQSBwYWdlOiAlZFxuIiwgcmV0KTsKIAkJcmV0dXJu IHJldDsKIAl9CiAKIAlwYWdlID0gaTkxNV9nZW1fb2JqZWN0X2dldF9kaXJ0eV9wYWdlKHdhX2N0 eC0+dm1hLT5vYmosIDApOwotCWJhdGNoID0ga21hcF9hdG9taWMocGFnZSk7Ci0Jb2Zmc2V0ID0g MDsKLQotCWlmIChJU19HRU44KGVuZ2luZS0+aTkxNSkpIHsKLQkJcmV0ID0gZ2VuOF9pbml0X2lu ZGlyZWN0Y3R4X2JiKGVuZ2luZSwKLQkJCQkJICAgICAgICZ3YV9jdHgtPmluZGlyZWN0X2N0eCwK LQkJCQkJICAgICAgIGJhdGNoLAotCQkJCQkgICAgICAgJm9mZnNldCk7Ci0JCWlmIChyZXQpCi0J CQlnb3RvIG91dDsKLQotCQlyZXQgPSBnZW44X2luaXRfcGVyY3R4X2JiKGVuZ2luZSwKLQkJCQkJ ICAmd2FfY3R4LT5wZXJfY3R4LAotCQkJCQkgIGJhdGNoLAotCQkJCQkgICZvZmZzZXQpOwotCQlp ZiAocmV0KQotCQkJZ290byBvdXQ7Ci0JfSBlbHNlIGlmIChJU19HRU45KGVuZ2luZS0+aTkxNSkp IHsKLQkJcmV0ID0gZ2VuOV9pbml0X2luZGlyZWN0Y3R4X2JiKGVuZ2luZSwKLQkJCQkJICAgICAg ICZ3YV9jdHgtPmluZGlyZWN0X2N0eCwKLQkJCQkJICAgICAgIGJhdGNoLAotCQkJCQkgICAgICAg Jm9mZnNldCk7Ci0JCWlmIChyZXQpCi0JCQlnb3RvIG91dDsKKwliYXRjaCA9IGJhdGNoX3B0ciA9 IGttYXBfYXRvbWljKHBhZ2UpOwogCi0JCXJldCA9IGdlbjlfaW5pdF9wZXJjdHhfYmIoZW5naW5l LAotCQkJCQkgICZ3YV9jdHgtPnBlcl9jdHgsCi0JCQkJCSAgYmF0Y2gsCi0JCQkJCSAgJm9mZnNl dCk7Ci0JCWlmIChyZXQpCisJLyoKKwkgKiBFbWl0IHRoZSB0d28gd29ya2Fyb3VuZCBiYXRjaCBi dWZmZXJzLCByZWNvcmRpbmcgdGhlIG9mZnNldCBmcm9tIHRoZQorCSAqIHN0YXJ0IG9mIHRoZSB3 b3JrYXJvdW5kIGJhdGNoIGJ1ZmZlciBvYmplY3QgZm9yIGVhY2ggYW5kIHRoZWlyCisJICogcmVz cGVjdGl2ZSBzaXplcy4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh3YV9iYl9m bik7IGkrKykgeworCQl3YV9iYltpXS0+b2Zmc2V0ID0gYmF0Y2hfcHRyIC0gYmF0Y2g7CisJCWlm IChXQVJOX09OKCFJU19BTElHTkVEKHdhX2JiW2ldLT5vZmZzZXQsIENBQ0hFTElORV9CWVRFUykp KSB7CisJCQlyZXQgPSAtRUlOVkFMOwogCQkJZ290byBvdXQ7CisJCX0KKwkJYmF0Y2hfcHRyID0g d2FfYmJfZm5baV0oZW5naW5lLCBiYXRjaF9wdHIpOworCQl3YV9iYltpXS0+c2l6ZSA9IGJhdGNo X3B0ciAtIChiYXRjaCArIHdhX2JiW2ldLT5vZmZzZXQpOwogCX0KIAorCUJVR19PTihiYXRjaF9w dHIgLSBiYXRjaCA+IENUWF9XQV9CQl9PQkpfU0laRSk7CiBvdXQ6CiAJa3VubWFwX2F0b21pYyhi YXRjaCk7Ci0JaWYgKHJldCkKLQkJbHJjX2Rlc3Ryb3lfd2FfY3R4X29iaihlbmdpbmUpOwogCi0J cmV0dXJuIHJldDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHUzMiBwb3J0X3NlcW5vKHN0cnVj dCBleGVjbGlzdF9wb3J0ICpwb3J0KQpAQCAtMTY4NSw3ICsxNjAwLDcgQEAgdm9pZCBpbnRlbF9s b2dpY2FsX3JpbmdfY2xlYW51cChzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUpCiAKIAlp bnRlbF9lbmdpbmVfY2xlYW51cF9jb21tb24oZW5naW5lKTsKIAotCWxyY19kZXN0cm95X3dhX2N0 eF9vYmooZW5naW5lKTsKKwlscmNfZGVzdHJveV93YV9jdHgoZW5naW5lKTsKIAllbmdpbmUtPmk5 MTUgPSBOVUxMOwogCWRldl9wcml2LT5lbmdpbmVbZW5naW5lLT5pZF0gPSBOVUxMOwogCWtmcmVl KGVuZ2luZSk7CkBAIC0xOTcxLDE1ICsxODg2LDE0IEBAIHN0YXRpYyB2b2lkIGV4ZWNsaXN0c19p bml0X3JlZ19zdGF0ZSh1MzIgKnJlZ19zdGF0ZSwKIAkJCXUzMiBnZ3R0X29mZnNldCA9IGk5MTVf Z2d0dF9vZmZzZXQod2FfY3R4LT52bWEpOwogCiAJCQlyZWdfc3RhdGVbQ1RYX1JDU19JTkRJUkVD VF9DVFgrMV0gPQotCQkJCShnZ3R0X29mZnNldCArIHdhX2N0eC0+aW5kaXJlY3RfY3R4Lm9mZnNl dCAqIHNpemVvZih1aW50MzJfdCkpIHwKLQkJCQkod2FfY3R4LT5pbmRpcmVjdF9jdHguc2l6ZSAv IENBQ0hFTElORV9EV09SRFMpOworCQkJCShnZ3R0X29mZnNldCArIHdhX2N0eC0+aW5kaXJlY3Rf Y3R4Lm9mZnNldCkgfAorCQkJCSh3YV9jdHgtPmluZGlyZWN0X2N0eC5zaXplIC8gQ0FDSEVMSU5F X0JZVEVTKTsKIAogCQkJcmVnX3N0YXRlW0NUWF9SQ1NfSU5ESVJFQ1RfQ1RYX09GRlNFVCsxXSA9 CiAJCQkJaW50ZWxfbHJfaW5kaXJlY3RfY3R4X29mZnNldChlbmdpbmUpIDw8IDY7CiAKIAkJCXJl Z19zdGF0ZVtDVFhfQkJfUEVSX0NUWF9QVFIrMV0gPQotCQkJCShnZ3R0X29mZnNldCArIHdhX2N0 eC0+cGVyX2N0eC5vZmZzZXQgKiBzaXplb2YodWludDMyX3QpKSB8Ci0JCQkJMHgwMTsKKwkJCQko Z2d0dF9vZmZzZXQgKyB3YV9jdHgtPnBlcl9jdHgub2Zmc2V0KSB8IDB4MDE7CiAJCX0KIAl9CiAJ cmVnX3N0YXRlW0NUWF9MUklfSEVBREVSXzFdID0gTUlfTE9BRF9SRUdJU1RFUl9JTU0oOSkgfCBN SV9MUklfRk9SQ0VfUE9TVEVEOwotLSAKMi45LjMKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ludGVsLWdmeAo=