From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr0-x22f.google.com (mail-wr0-x22f.google.com [IPv6:2a00:1450:400c:c0c::22f]) by gabe.freedesktop.org (Postfix) with ESMTPS id 252AD6E759 for ; Tue, 20 Mar 2018 13:52:00 +0000 (UTC) Received: by mail-wr0-x22f.google.com with SMTP id 80so685158wrb.2 for ; Tue, 20 Mar 2018 06:52:00 -0700 (PDT) From: Tvrtko Ursulin Date: Tue, 20 Mar 2018 13:51:50 +0000 Message-Id: <20180320135150.8155-1-tvrtko.ursulin@linux.intel.com> In-Reply-To: <20180319165947.18234-1-tvrtko.ursulin@linux.intel.com> References: <20180319165947.18234-1-tvrtko.ursulin@linux.intel.com> Subject: [igt-dev] [PATCH i-g-t v9] tests/perf_pmu: Improve accuracy by waiting on spinner to start List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: igt-dev-bounces@lists.freedesktop.org Sender: "igt-dev" To: igt-dev@lists.freedesktop.org Cc: Intel-gfx@lists.freedesktop.org, Tvrtko Ursulin List-ID: RnJvbTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1bGluQGludGVsLmNvbT4KCk1vcmUgdGhh biBvbmUgdGVzdCBhc3N1bWVzIHRoYXQgdGhlIHNwaW5uZXIgaXMgcnVubmluZyBwcmV0dHkgbXVj aAppbW1lZGlhdGVseSBhZnRlciB3ZSBoYXZlIGNyZWF0ZSBvciBzdWJtaXR0ZWQgaXQuCgpJbiBh Y3R1YWxpdHkgdGhlcmUgaXMgYSB2YXJpYWJsZSBkZWxheSwgZXNwZWNpYWxseSBvbiBleGVjbGlz dHMgcGxhdGZvcm1zLApiZXR3ZWVuIHN1Ym1pc3Npb24gYW5kIHNwaW4gYmF0Y2ggc3RhcnRpbmcg dG8gcnVuIG9uIHRoZSBoYXJkd2FyZS4KClRvIGVuYWJsZSB0ZXN0cyB3aGljaCBjYXJlIGFib3V0 IHRoaXMgbGV2ZWwgb2YgdGltaW5nIHRvIGFjY291bnQgZm9yIHRoaXMsCndlIGFkZCBhIG5ldyBz cGluIGJhdGNoIGNvbnN0cnVjdG9yIHdoaWNoIHByb3ZpZGVzIGFuIG91dHB1dCBmaWVsZCB3aGlj aApjYW4gYmUgcG9sbGVkIHRvIGRldGVybWluZSB3aGVuIHRoZSBiYXRjaCBhY3R1YWxseSBzdGFy dGVkIHJ1bm5pbmcuCgpUaGlzIGlzIGltcGxlbWVudGVkIHZpYSBNSV9TVE9SRURXX0lNTSBmcm9t IHRoZSBzcGluIGJhdGNoLCB3cml0aW5nIGludG8KbWVtb3J5IG1hcHBlZCBwYWdlIHNoYXJlZCB3 aXRoIHVzZXJzcGFjZS4KClVzaW5nIHRoaXMgZmFjaWxpdHkgZnJvbSBwZXJmX3BtdSwgd2hlcmUg YXBwbGljYWJsZSwgc2hvdWxkIGltcHJvdmUgdmVyeQpvY2Nhc2lvbmFsIHRlc3QgZmFpbHMgYWNy b3NzIHRoZSBzZXQgYW5kIHBsYXRmb3Jtcy4KCnYyOgogQ2hyaXMgV2lsc29uOgogKiBVc2UgY2Fj aGluZyBtYXBwaW5nIGlmIGF2YWlsYWJsZS4KICogSGFuZGxlIG9sZCBnZW5zIGJldHRlci4KICog VXNlIGdlbV9jYW5fc3RvcmVfZHdvcmQuCiAqIENhY2hlIGV4ZWMgb2JqIGFycmF5IGluIHNwaW5f YmF0Y2hfdCBmb3IgZWFzaWVyIHJlc3VibWl0LgoKdjM6CiAqIEZvcmdvdCBJOTE1X0VYRUNfTk9f UkVMT0MuIChDaHJpcyBXaWxzb24pCgp2NDoKICogTWFzayBvdXQgYWxsIG5vbi1lbmdpbmUgZmxh Z3MgaW4gZ2VtX2Nhbl9zdG9yZV9kd29yZC4KICogQWRkZWQgc29tZSBkZWJ1ZyBsb2dnaW5nLgoK djU6CiAqIEZpeCByZWxvY3MgYW5kIGJhdGNoIG11bm1hcC4gKENocmlzKQogKiBBZGRlZCBhc3Nl cnQgaWRsZSBzcGlubmVyIGJhdGNoIGxvb2tzIGFzIGV4cGVjdGVkLgoKdjY6CiAqIFNraXAgYWNj dXJhY3kgdGVzdHMgd2hlbiAhZ2VtX2Nhbl9zdG9yZV9kd29yZC4KCnY3OgogKiBGaXggYmF0Y2gg cmVjdXJzaW9uIHJlbG9jIGFkZHJlc3MuCgp2ODoKIENocmlzIFdpbHNvbjoKICogUHVsbCB1cCBn ZW1fY2FuX3N0b3JlX2R3b3JkIGNoZWNrIGJlZm9yZSB3ZSBzdGFydCBzdWJtaXR0aW5nLgogKiBC dWlsZCBzcGlubmVyIGJhdGNoIGluIGEgd2F5IHdlIGNhbiBza2lwIHN0b3JlIGR3b3JkIHdoZW4g bm90CiAgIG5lZWRlZCBzbyB3ZSBjYW4gcnVuIG9uIFNhbmR5QnJpZGdlLgoKdjk6CiAqIEZpeCB3 YWl0IG9uIHNwaW5uZXIuCiAqIE1vcmUgdHdlYWtzIHRvIGFjY3VyYWN5IHRlc3QuCgpTaWduZWQt b2ZmLWJ5OiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29tPgpTdWdnZXN0 ZWQtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgotLS0KIGxpYi9p Z3RfZHVtbXlsb2FkLmMgIHwgMTkyICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKy0tLS0tLS0tLS0KIGxpYi9pZ3RfZHVtbXlsb2FkLmggIHwgIDExICsrKwogbGliL2lndF9n dC5jICAgICAgICAgfCAgIDIgKy0KIGxpYi9pb2N0bF93cmFwcGVycy5jIHwgICAyICstCiBsaWIv aW9jdGxfd3JhcHBlcnMuaCB8ICAgMSArCiB0ZXN0cy9wZXJmX3BtdS5jICAgICB8IDE5OSArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0KIDYgZmlsZXMg Y2hhbmdlZCwgMzA2IGluc2VydGlvbnMoKyksIDEwMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9saWIvaWd0X2R1bW15bG9hZC5jIGIvbGliL2lndF9kdW1teWxvYWQuYwppbmRleCA0YjIwZjIz ZGZlMjYuLmNlODQ2MjgwOTViNSAxMDA2NDQKLS0tIGEvbGliL2lndF9kdW1teWxvYWQuYworKysg Yi9saWIvaWd0X2R1bW15bG9hZC5jCkBAIC03NCwzNSArNzQsNDggQEAgZmlsbF9yZWxvYyhzdHJ1 Y3QgZHJtX2k5MTVfZ2VtX3JlbG9jYXRpb25fZW50cnkgKnJlbG9jLAogCXJlbG9jLT53cml0ZV9k b21haW4gPSB3cml0ZV9kb21haW5zOwogfQogCi1zdGF0aWMgaW50IGVtaXRfcmVjdXJzaXZlX2Jh dGNoKGlndF9zcGluX3QgKnNwaW4sCi0JCQkJaW50IGZkLCB1aW50MzJfdCBjdHgsIHVuc2lnbmVk IGVuZ2luZSwKLQkJCQl1aW50MzJfdCBkZXAsIGJvb2wgb3V0X2ZlbmNlKQorI2RlZmluZSBPVVRf RkVOQ0UJKDEgPDwgMCkKKyNkZWZpbmUgUE9MTF9SVU4JKDEgPDwgMSkKKworc3RhdGljIGludAor ZW1pdF9yZWN1cnNpdmVfYmF0Y2goaWd0X3NwaW5fdCAqc3BpbiwgaW50IGZkLCB1aW50MzJfdCBj dHgsIHVuc2lnbmVkIGVuZ2luZSwKKwkJICAgICB1aW50MzJfdCBkZXAsIHVuc2lnbmVkIGludCBm bGFncykKIHsKICNkZWZpbmUgU0NSQVRDSCAwCiAjZGVmaW5lIEJBVENIIDEKIAljb25zdCBpbnQg Z2VuID0gaW50ZWxfZ2VuKGludGVsX2dldF9kcm1fZGV2aWQoZmQpKTsKLQlzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX2V4ZWNfb2JqZWN0MiBvYmpbMl07Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0 aW9uX2VudHJ5IHJlbG9jc1syXTsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGV4 ZWNidWY7CisJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IHJlbG9jc1syXSwg KnI7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiAqZXhlY2J1ZjsKKwlzdHJ1Y3Qg ZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiAqb2JqOwogCXVuc2lnbmVkIGludCBlbmdpbmVzWzE2 XTsKIAl1bnNpZ25lZCBpbnQgbmVuZ2luZTsKIAlpbnQgZmVuY2VfZmQgPSAtMTsKLQl1aW50MzJf dCAqYmF0Y2g7CisJdWludDMyX3QgKmJhdGNoLCAqYmF0Y2hfc3RhcnQ7CiAJaW50IGk7CiAKIAlu ZW5naW5lID0gMDsKIAlpZiAoZW5naW5lID09IC0xKSB7Ci0JCWZvcl9lYWNoX2VuZ2luZShmZCwg ZW5naW5lKQotCQkJaWYgKGVuZ2luZSkKKwkJZm9yX2VhY2hfZW5naW5lKGZkLCBlbmdpbmUpIHsK KwkJCWlmIChlbmdpbmUpIHsKKwkJCWlmIChmbGFncyAmIFBPTExfUlVOKQorCQkJCWlndF9yZXF1 aXJlKCEoZmxhZ3MgJiBQT0xMX1JVTikgfHwKKwkJCQkJICAgIGdlbV9jYW5fc3RvcmVfZHdvcmQo ZmQsIGVuZ2luZSkpOworCiAJCQkJZW5naW5lc1tuZW5naW5lKytdID0gZW5naW5lOworCQkJfQor CQl9CiAJfSBlbHNlIHsKIAkJZ2VtX3JlcXVpcmVfcmluZyhmZCwgZW5naW5lKTsKKwkJaWd0X3Jl cXVpcmUoIShmbGFncyAmIFBPTExfUlVOKSB8fAorCQkJICAgIGdlbV9jYW5fc3RvcmVfZHdvcmQo ZmQsIGVuZ2luZSkpOwogCQllbmdpbmVzW25lbmdpbmUrK10gPSBlbmdpbmU7CiAJfQogCWlndF9y ZXF1aXJlKG5lbmdpbmUpOwogCi0JbWVtc2V0KCZleGVjYnVmLCAwLCBzaXplb2YoZXhlY2J1Zikp OwotCW1lbXNldChvYmosIDAsIHNpemVvZihvYmopKTsKKwltZW1zZXQoJnNwaW4tPmV4ZWNidWYs IDAsIHNpemVvZihzcGluLT5leGVjYnVmKSk7CisJZXhlY2J1ZiA9ICZzcGluLT5leGVjYnVmOwor CW1lbXNldChzcGluLT5vYmosIDAsIHNpemVvZihzcGluLT5vYmopKTsKKwlvYmogPSBzcGluLT5v Ymo7CiAJbWVtc2V0KHJlbG9jcywgMCwgc2l6ZW9mKHJlbG9jcykpOwogCiAJb2JqW0JBVENIXS5o YW5kbGUgPSBnZW1fY3JlYXRlKGZkLCBCQVRDSF9TSVpFKTsKQEAgLTExMywxOSArMTI2LDY2IEBA IHN0YXRpYyBpbnQgZW1pdF9yZWN1cnNpdmVfYmF0Y2goaWd0X3NwaW5fdCAqc3BpbiwKIAkJCQkg ICAgICAgCUJBVENIX1NJWkUsIFBST1RfV1JJVEUpOwogCWdlbV9zZXRfZG9tYWluKGZkLCBvYmpb QkFUQ0hdLmhhbmRsZSwKIAkJCUk5MTVfR0VNX0RPTUFJTl9HVFQsIEk5MTVfR0VNX0RPTUFJTl9H VFQpOwotCWV4ZWNidWYuYnVmZmVyX2NvdW50Kys7CisJZXhlY2J1Zi0+YnVmZmVyX2NvdW50Kys7 CisJYmF0Y2hfc3RhcnQgPSBiYXRjaDsKIAogCWlmIChkZXApIHsKKwkJaWd0X2Fzc2VydCghKGZs YWdzICYgUE9MTF9SVU4pKTsKKwogCQkvKiBkdW1teSB3cml0ZSB0byBkZXBlbmRlbmN5ICovCiAJ CW9ialtTQ1JBVENIXS5oYW5kbGUgPSBkZXA7CiAJCWZpbGxfcmVsb2MoJnJlbG9jc1tvYmpbQkFU Q0hdLnJlbG9jYXRpb25fY291bnQrK10sCiAJCQkgICBkZXAsIDEwMjAsCiAJCQkgICBJOTE1X0dF TV9ET01BSU5fUkVOREVSLAogCQkJICAgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUik7Ci0JCWV4ZWNi dWYuYnVmZmVyX2NvdW50Kys7CisJCWV4ZWNidWYtPmJ1ZmZlcl9jb3VudCsrOworCX0gZWxzZSBp ZiAoZmxhZ3MgJiBQT0xMX1JVTikgeworCQl1bnNpZ25lZCBpbnQgb2Zmc2V0OworCisJCWlndF9h c3NlcnQoIWRlcCk7CisKKwkJaWYgKGdlbiA9PSA0IHx8IGdlbiA9PSA1KQorCQkJZXhlY2J1Zi0+ ZmxhZ3MgfD0gSTkxNV9FWEVDX1NFQ1VSRTsKKworCQlzcGluLT5wb2xsX2hhbmRsZSA9IGdlbV9j cmVhdGUoZmQsIDQwOTYpOworCisJCWlmIChfX2dlbV9zZXRfY2FjaGluZyhmZCwgc3Bpbi0+cG9s bF9oYW5kbGUsCisJCQkJICAgICAgSTkxNV9DQUNISU5HX0NBQ0hFRCkgPT0gMCkKKwkJCXNwaW4t PnJ1bm5pbmcgPSBfX2dlbV9tbWFwX19jcHUoZmQsIHNwaW4tPnBvbGxfaGFuZGxlLAorCQkJCQkJ CTAsIDQwOTYsCisJCQkJCQkJUFJPVF9SRUFEIHwgUFJPVF9XUklURSk7CisJCWVsc2UKKwkJCXNw aW4tPnJ1bm5pbmcgPSBfX2dlbV9tbWFwX193YyhmZCwgc3Bpbi0+cG9sbF9oYW5kbGUsCisJCQkJ CQkgICAgICAgMCwgNDA5NiwKKwkJCQkJCSAgICAgICBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFKTsK KwkJaWd0X2Fzc2VydChzcGluLT5ydW5uaW5nKTsKKwkJaWd0X2Fzc2VydF9lcSgqc3Bpbi0+cnVu bmluZywgMCk7CisKKwkJKmJhdGNoKysgPSBNSV9TVE9SRV9EV09SRF9JTU0gfCAoZ2VuIDwgNiA/ IDEgPDwgMjIgOiAwKTsKKworCQlpZiAoZ2VuID49IDgpIHsKKwkJCW9mZnNldCA9IDE7CisJCQkq YmF0Y2grKyA9IDA7CisJCQkqYmF0Y2grKyA9IDA7CisJCX0gZWxzZSBpZiAoZ2VuID49IDQpIHsK KwkJCW9mZnNldCA9IDI7CisJCQkqYmF0Y2grKyA9IDA7CisJCQkqYmF0Y2grKyA9IDA7CisJCX0g ZWxzZSB7CisJCQlvZmZzZXQgPSAxOworCQkJYmF0Y2hbLTFdLS07CisJCQkqYmF0Y2grKyA9IDA7 CisJCX0KKworCQkqYmF0Y2grKyA9IDE7CisKKwkJb2JqW1NDUkFUQ0hdLmhhbmRsZSA9IHNwaW4t PnBvbGxfaGFuZGxlOworCQlmaWxsX3JlbG9jKCZyZWxvY3Nbb2JqW0JBVENIXS5yZWxvY2F0aW9u X2NvdW50KytdLAorCQkJICAgc3Bpbi0+cG9sbF9oYW5kbGUsIG9mZnNldCwgMCwgMCk7CisJCWV4 ZWNidWYtPmJ1ZmZlcl9jb3VudCsrOwogCX0KIAotCXNwaW4tPmJhdGNoID0gYmF0Y2g7CisJc3Bp bi0+YmF0Y2ggPSBiYXRjaCA9IGJhdGNoX3N0YXJ0ICsgNjQgLyBzaXplb2YoKmJhdGNoKTsKIAlz cGluLT5oYW5kbGUgPSBvYmpbQkFUQ0hdLmhhbmRsZTsKIAogCS8qIEFsbG93IG91cnNlbHZlcyB0 byBiZSBwcmVlbXB0ZWQgKi8KQEAgLTE0NSw0MCArMjA1LDQyIEBAIHN0YXRpYyBpbnQgZW1pdF9y ZWN1cnNpdmVfYmF0Y2goaWd0X3NwaW5fdCAqc3BpbiwKIAliYXRjaCArPSAxMDAwOwogCiAJLyog cmVjdXJzZSAqLwotCWZpbGxfcmVsb2MoJnJlbG9jc1tvYmpbQkFUQ0hdLnJlbG9jYXRpb25fY291 bnRdLAotCQkgICBvYmpbQkFUQ0hdLmhhbmRsZSwgKGJhdGNoIC0gc3Bpbi0+YmF0Y2gpICsgMSwK LQkJICAgSTkxNV9HRU1fRE9NQUlOX0NPTU1BTkQsIDApOworCXIgPSAmcmVsb2NzW29ialtCQVRD SF0ucmVsb2NhdGlvbl9jb3VudCsrXTsKKwlyLT50YXJnZXRfaGFuZGxlID0gb2JqW0JBVENIXS5o YW5kbGU7CisJci0+b2Zmc2V0ID0gKGJhdGNoICsgMSAtIGJhdGNoX3N0YXJ0KSAqIHNpemVvZigq YmF0Y2gpOworCXItPnJlYWRfZG9tYWlucyA9IEk5MTVfR0VNX0RPTUFJTl9DT01NQU5EOworCXIt PmRlbHRhID0gNjQ7CiAJaWYgKGdlbiA+PSA4KSB7CiAJCSpiYXRjaCsrID0gTUlfQkFUQ0hfQlVG RkVSX1NUQVJUIHwgMSA8PCA4IHwgMTsKLQkJKmJhdGNoKysgPSAwOworCQkqYmF0Y2grKyA9IHIt PmRlbHRhOwogCQkqYmF0Y2grKyA9IDA7CiAJfSBlbHNlIGlmIChnZW4gPj0gNikgewogCQkqYmF0 Y2grKyA9IE1JX0JBVENIX0JVRkZFUl9TVEFSVCB8IDEgPDwgODsKLQkJKmJhdGNoKysgPSAwOwor CQkqYmF0Y2grKyA9IHItPmRlbHRhOwogCX0gZWxzZSB7CiAJCSpiYXRjaCsrID0gTUlfQkFUQ0hf QlVGRkVSX1NUQVJUIHwgMiA8PCA2OwotCQkqYmF0Y2ggPSAwOwotCQlpZiAoZ2VuIDwgNCkgewot CQkJKmJhdGNoIHw9IDE7Ci0JCQlyZWxvY3Nbb2JqW0JBVENIXS5yZWxvY2F0aW9uX2NvdW50XS5k ZWx0YSA9IDE7Ci0JCX0KKwkJaWYgKGdlbiA8IDQpCisJCQlyLT5kZWx0YSB8PSAxOworCQkqYmF0 Y2ggPSByLT5kZWx0YTsKIAkJYmF0Y2grKzsKIAl9Ci0Jb2JqW0JBVENIXS5yZWxvY2F0aW9uX2Nv dW50Kys7CiAJb2JqW0JBVENIXS5yZWxvY3NfcHRyID0gdG9fdXNlcl9wb2ludGVyKHJlbG9jcyk7 CiAKLQlleGVjYnVmLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKG9iaiArICgyIC0gZXhl Y2J1Zi5idWZmZXJfY291bnQpKTsKLQlleGVjYnVmLnJzdmQxID0gY3R4OworCWV4ZWNidWYtPmJ1 ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKG9iaiArCisJCQkJCSAgICAgICAoMiAtIGV4ZWNi dWYtPmJ1ZmZlcl9jb3VudCkpOworCWV4ZWNidWYtPnJzdmQxID0gY3R4OwogCi0JaWYgKG91dF9m ZW5jZSkKLQkJZXhlY2J1Zi5mbGFncyB8PSBJOTE1X0VYRUNfRkVOQ0VfT1VUOworCWlmIChmbGFn cyAmIE9VVF9GRU5DRSkKKwkJZXhlY2J1Zi0+ZmxhZ3MgfD0gSTkxNV9FWEVDX0ZFTkNFX09VVDsK IAogCWZvciAoaSA9IDA7IGkgPCBuZW5naW5lOyBpKyspIHsKLQkJZXhlY2J1Zi5mbGFncyAmPSB+ RU5HSU5FX01BU0s7Ci0JCWV4ZWNidWYuZmxhZ3MgfD0gZW5naW5lc1tpXTsKLQkJZ2VtX2V4ZWNi dWZfd3IoZmQsICZleGVjYnVmKTsKLQkJaWYgKG91dF9mZW5jZSkgewotCQkJaW50IF9mZCA9IGV4 ZWNidWYucnN2ZDIgPj4gMzI7CisJCWV4ZWNidWYtPmZsYWdzICY9IH5FTkdJTkVfTUFTSzsKKwkJ ZXhlY2J1Zi0+ZmxhZ3MgfD0gZW5naW5lc1tpXTsKKworCQlnZW1fZXhlY2J1Zl93cihmZCwgZXhl Y2J1Zik7CisKKwkJaWYgKGZsYWdzICYgT1VUX0ZFTkNFKSB7CisJCQlpbnQgX2ZkID0gZXhlY2J1 Zi0+cnN2ZDIgPj4gMzI7CiAKIAkJCWlndF9hc3NlcnQoX2ZkID49IDApOwogCQkJaWYgKGZlbmNl X2ZkID09IC0xKSB7CkBAIC0xOTQsMTIgKzI1NiwyMCBAQCBzdGF0aWMgaW50IGVtaXRfcmVjdXJz aXZlX2JhdGNoKGlndF9zcGluX3QgKnNwaW4sCiAJCX0KIAl9CiAKKwkvKiBNYWtlIGl0IGVhc2ll ciBmb3IgY2FsbGVycyB0byByZXN1Ym1pdC4gKi8KKworCW9ialtCQVRDSF0ucmVsb2NhdGlvbl9j b3VudCA9IDA7CisJb2JqW0JBVENIXS5yZWxvY3NfcHRyID0gMDsKKworCW9ialtTQ1JBVENIXS5m bGFncyA9IEVYRUNfT0JKRUNUX1BJTk5FRDsKKwlvYmpbQkFUQ0hdLmZsYWdzID0gRVhFQ19PQkpF Q1RfUElOTkVEOworCiAJcmV0dXJuIGZlbmNlX2ZkOwogfQogCiBzdGF0aWMgaWd0X3NwaW5fdCAq CiBfX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoaW50IGZkLCB1aW50MzJfdCBjdHgsIHVuc2lnbmVkIGVu Z2luZSwgdWludDMyX3QgZGVwLAotCQkgICAgICBpbnQgb3V0X2ZlbmNlKQorCQkgICAgICB1bnNp Z25lZCBpbnQgZmxhZ3MpCiB7CiAJaWd0X3NwaW5fdCAqc3BpbjsKIApAQCAtMjA3LDcgKzI3Nyw3 IEBAIF9fX2lndF9zcGluX2JhdGNoX25ldyhpbnQgZmQsIHVpbnQzMl90IGN0eCwgdW5zaWduZWQg ZW5naW5lLCB1aW50MzJfdCBkZXAsCiAJaWd0X2Fzc2VydChzcGluKTsKIAogCXNwaW4tPm91dF9m ZW5jZSA9IGVtaXRfcmVjdXJzaXZlX2JhdGNoKHNwaW4sIGZkLCBjdHgsIGVuZ2luZSwgZGVwLAot CQkJCQkgICAgICAgb3V0X2ZlbmNlKTsKKwkJCQkJICAgICAgIGZsYWdzKTsKIAogCXB0aHJlYWRf bXV0ZXhfbG9jaygmbGlzdF9sb2NrKTsKIAlpZ3RfbGlzdF9hZGQoJnNwaW4tPmxpbmssICZzcGlu X2xpc3QpOwpAQCAtMjE5LDcgKzI4OSw3IEBAIF9fX2lndF9zcGluX2JhdGNoX25ldyhpbnQgZmQs IHVpbnQzMl90IGN0eCwgdW5zaWduZWQgZW5naW5lLCB1aW50MzJfdCBkZXAsCiBpZ3Rfc3Bpbl90 ICoKIF9faWd0X3NwaW5fYmF0Y2hfbmV3KGludCBmZCwgdWludDMyX3QgY3R4LCB1bnNpZ25lZCBl bmdpbmUsIHVpbnQzMl90IGRlcCkKIHsKLQlyZXR1cm4gX19faWd0X3NwaW5fYmF0Y2hfbmV3KGZk LCBjdHgsIGVuZ2luZSwgZGVwLCBmYWxzZSk7CisJcmV0dXJuIF9fX2lndF9zcGluX2JhdGNoX25l dyhmZCwgY3R4LCBlbmdpbmUsIGRlcCwgMCk7CiB9CiAKIC8qKgpAQCAtMjUzLDcgKzMyMyw3IEBA IGlndF9zcGluX2JhdGNoX25ldyhpbnQgZmQsIHVpbnQzMl90IGN0eCwgdW5zaWduZWQgZW5naW5l LCB1aW50MzJfdCBkZXApCiBpZ3Rfc3Bpbl90ICoKIF9faWd0X3NwaW5fYmF0Y2hfbmV3X2ZlbmNl KGludCBmZCwgdWludDMyX3QgY3R4LCB1bnNpZ25lZCBlbmdpbmUpCiB7Ci0JcmV0dXJuIF9fX2ln dF9zcGluX2JhdGNoX25ldyhmZCwgY3R4LCBlbmdpbmUsIDAsIHRydWUpOworCXJldHVybiBfX19p Z3Rfc3Bpbl9iYXRjaF9uZXcoZmQsIGN0eCwgZW5naW5lLCAwLCBPVVRfRkVOQ0UpOwogfQogCiAv KioKQEAgLTI4Niw2ICszNTYsNDIgQEAgaWd0X3NwaW5fYmF0Y2hfbmV3X2ZlbmNlKGludCBmZCwg dWludDMyX3QgY3R4LCB1bnNpZ25lZCBlbmdpbmUpCiAJcmV0dXJuIHNwaW47CiB9CiAKK2lndF9z cGluX3QgKgorX19pZ3Rfc3Bpbl9iYXRjaF9uZXdfcG9sbChpbnQgZmQsIHVpbnQzMl90IGN0eCwg dW5zaWduZWQgZW5naW5lKQoreworCXJldHVybiBfX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQsIGN0 eCwgZW5naW5lLCAwLCBQT0xMX1JVTik7Cit9CisKKy8qKgorICogaWd0X3NwaW5fYmF0Y2hfbmV3 X3BvbGw6CisgKiBAZmQ6IG9wZW4gaTkxNSBkcm0gZmlsZSBkZXNjcmlwdG9yCisgKiBAZW5naW5l OiBSaW5nIHRvIGV4ZWN1dGUgYmF0Y2ggT1InZCB3aXRoIGV4ZWNidWYgZmxhZ3MuIElmIHZhbHVl IGlzIGxlc3MKKyAqICAgICAgICAgIHRoYW4gMCwgZXhlY3V0ZSBvbiBhbGwgYXZhaWxhYmxlIHJp bmdzLgorICoKKyAqIFN0YXJ0IGEgcmVjdXJzaXZlIGJhdGNoIG9uIGEgcmluZy4gSW1tZWRpYXRl bHkgcmV0dXJucyBhICNpZ3Rfc3Bpbl90IHRoYXQKKyAqIGNvbnRhaW5zIHRoZSBiYXRjaCdzIGhh bmRsZSB0aGF0IGNhbiBiZSB3YWl0ZWQgdXBvbi4gVGhlIHJldHVybmVkIHN0cnVjdHVyZQorICog bXVzdCBiZSBwYXNzZWQgdG8gaWd0X3NwaW5fYmF0Y2hfZnJlZSgpIGZvciBwb3N0LXByb2Nlc3Np bmcuCisgKgorICogaWd0X3NwaW5fdC0+cnVubmluZyB3aWxsIGNvbnRhaW50IGEgcG9pbnRlciB3 aGljaCB0YXJnZXQgd2lsbCBjaGFuZ2UgZnJvbQorICogemVybyB0byBvbmUgb25jZSB0aGUgc3Bp bm5lciBhY3R1YWxseSBzdGFydHMgZXhlY3V0aW5nIG9uIHRoZSBHUFUuCisgKgorICogUmV0dXJu czoKKyAqIFN0cnVjdHVyZSB3aXRoIGhlbHBlciBpbnRlcm5hbCBzdGF0ZSBmb3IgaWd0X3NwaW5f YmF0Y2hfZnJlZSgpLgorICovCitpZ3Rfc3Bpbl90ICoKK2lndF9zcGluX2JhdGNoX25ld19wb2xs KGludCBmZCwgdWludDMyX3QgY3R4LCB1bnNpZ25lZCBlbmdpbmUpCit7CisJaWd0X3NwaW5fdCAq c3BpbjsKKworCWlndF9yZXF1aXJlX2dlbShmZCk7CisJaWd0X3JlcXVpcmUoZ2VtX21tYXBfX2hh c193YyhmZCkpOworCisJc3BpbiA9IF9faWd0X3NwaW5fYmF0Y2hfbmV3X3BvbGwoZmQsIGN0eCwg ZW5naW5lKTsKKwlpZ3RfYXNzZXJ0KGdlbV9ib19idXN5KGZkLCBzcGluLT5oYW5kbGUpKTsKKwor CXJldHVybiBzcGluOworfQorCiBzdGF0aWMgdm9pZCBub3RpZnkodW5pb24gc2lndmFsIGFyZykK IHsKIAlpZ3Rfc3Bpbl90ICpzcGluID0gYXJnLnNpdmFsX3B0cjsKQEAgLTM0MCw2ICs0NDYsOCBA QCB2b2lkIGlndF9zcGluX2JhdGNoX2VuZChpZ3Rfc3Bpbl90ICpzcGluKQogCWlmICghc3BpbikK IAkJcmV0dXJuOwogCisJaWd0X2Fzc2VydCgqc3Bpbi0+YmF0Y2ggPT0gTUlfQVJCX0NISyB8fAor CQkgICAqc3Bpbi0+YmF0Y2ggPT0gTUlfQkFUQ0hfQlVGRkVSX0VORCk7CiAJKnNwaW4tPmJhdGNo ID0gTUlfQkFUQ0hfQlVGRkVSX0VORDsKIAlfX3N5bmNfc3luY2hyb25pemUoKTsKIH0KQEAgLTM2 NSw3ICs0NzMsMTMgQEAgdm9pZCBpZ3Rfc3Bpbl9iYXRjaF9mcmVlKGludCBmZCwgaWd0X3NwaW5f dCAqc3BpbikKIAkJdGltZXJfZGVsZXRlKHNwaW4tPnRpbWVyKTsKIAogCWlndF9zcGluX2JhdGNo X2VuZChzcGluKTsKLQlnZW1fbXVubWFwKHNwaW4tPmJhdGNoLCBCQVRDSF9TSVpFKTsKKwlnZW1f bXVubWFwKCh2b2lkICopKCh1bnNpZ25lZCBsb25nKXNwaW4tPmJhdGNoICYgKH40MDk1VUwpKSwK KwkJICAgQkFUQ0hfU0laRSk7CisKKwlpZiAoc3Bpbi0+cnVubmluZykgeworCQlnZW1fbXVubWFw KHNwaW4tPnJ1bm5pbmcsIDQwOTYpOworCQlnZW1fY2xvc2UoZmQsIHNwaW4tPnBvbGxfaGFuZGxl KTsKKwl9CiAKIAlnZW1fY2xvc2UoZmQsIHNwaW4tPmhhbmRsZSk7CiAKZGlmZiAtLWdpdCBhL2xp Yi9pZ3RfZHVtbXlsb2FkLmggYi9saWIvaWd0X2R1bW15bG9hZC5oCmluZGV4IDQxMDNlNGFiOWUz Ni4uMzEwMzkzNWEzMDliIDEwMDY0NAotLS0gYS9saWIvaWd0X2R1bW15bG9hZC5oCisrKyBiL2xp Yi9pZ3RfZHVtbXlsb2FkLmgKQEAgLTM2LDYgKzM2LDEwIEBAIHR5cGVkZWYgc3RydWN0IGlndF9z cGluIHsKIAlzdHJ1Y3QgaWd0X2xpc3QgbGluazsKIAl1aW50MzJfdCAqYmF0Y2g7CiAJaW50IG91 dF9mZW5jZTsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBvYmpbMl07CisJc3Ry dWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmOworCXVpbnQzMl90IHBvbGxfaGFu ZGxlOworCWJvb2wgKnJ1bm5pbmc7CiB9IGlndF9zcGluX3Q7CiAKIGlndF9zcGluX3QgKl9faWd0 X3NwaW5fYmF0Y2hfbmV3KGludCBmZCwKQEAgLTU1LDYgKzU5LDEzIEBAIGlndF9zcGluX3QgKmln dF9zcGluX2JhdGNoX25ld19mZW5jZShpbnQgZmQsCiAJCQkJICAgICB1aW50MzJfdCBjdHgsCiAJ CQkJICAgICB1bnNpZ25lZCBlbmdpbmUpOwogCitpZ3Rfc3Bpbl90ICpfX2lndF9zcGluX2JhdGNo X25ld19wb2xsKGludCBmZCwKKwkJCQkgICAgICAgdWludDMyX3QgY3R4LAorCQkJCSAgICAgICB1 bnNpZ25lZCBlbmdpbmUpOworaWd0X3NwaW5fdCAqaWd0X3NwaW5fYmF0Y2hfbmV3X3BvbGwoaW50 IGZkLAorCQkJCSAgICB1aW50MzJfdCBjdHgsCisJCQkJICAgIHVuc2lnbmVkIGVuZ2luZSk7CisK IHZvaWQgaWd0X3NwaW5fYmF0Y2hfc2V0X3RpbWVvdXQoaWd0X3NwaW5fdCAqc3BpbiwgaW50NjRf dCBucyk7CiB2b2lkIGlndF9zcGluX2JhdGNoX2VuZChpZ3Rfc3Bpbl90ICpzcGluKTsKIHZvaWQg aWd0X3NwaW5fYmF0Y2hfZnJlZShpbnQgZmQsIGlndF9zcGluX3QgKnNwaW4pOwpkaWZmIC0tZ2l0 IGEvbGliL2lndF9ndC5jIGIvbGliL2lndF9ndC5jCmluZGV4IDAxYWViYzY3MDg2Mi4uNDU2OWZk MzZiZDg1IDEwMDY0NAotLS0gYS9saWIvaWd0X2d0LmMKKysrIGIvbGliL2lndF9ndC5jCkBAIC02 MDksNyArNjA5LDcgQEAgYm9vbCBnZW1fY2FuX3N0b3JlX2R3b3JkKGludCBmZCwgdW5zaWduZWQg aW50IGVuZ2luZSkKIAlpZiAoZ2VuID09IDMgJiYgKGluZm8tPmlzX2dyYW50c2RhbGUgfHwgaW5m by0+aXNfYWx2aXNvKSkKIAkJcmV0dXJuIGZhbHNlOyAvKiBvbmx5IHN1cHBvcnRzIHBoeXNpY2Fs IGFkZHJlc3NlcyAqLwogCi0JaWYgKGdlbiA9PSA2ICYmIChlbmdpbmUgJiB+KDM8PDEzKSkgPT0g STkxNV9FWEVDX0JTRCkKKwlpZiAoZ2VuID09IDYgJiYgKChlbmdpbmUgJiAweDNmKSA9PSBJOTE1 X0VYRUNfQlNEKSkKIAkJcmV0dXJuIGZhbHNlOyAvKiBraWxscyB0aGUgbWFjaGluZSEgKi8KIAog CWlmIChpbmZvLT5pc19icm9hZHdhdGVyKQpkaWZmIC0tZ2l0IGEvbGliL2lvY3RsX3dyYXBwZXJz LmMgYi9saWIvaW9jdGxfd3JhcHBlcnMuYwppbmRleCA4NzQ4Y2ZjZmMwNGYuLjRlMWEwOGJmMDZi NCAxMDA2NDQKLS0tIGEvbGliL2lvY3RsX3dyYXBwZXJzLmMKKysrIGIvbGliL2lvY3RsX3dyYXBw ZXJzLmMKQEAgLTE5OCw3ICsxOTgsNyBAQCB2b2lkIGdlbV9zZXRfdGlsaW5nKGludCBmZCwgdWlu dDMyX3QgaGFuZGxlLCB1aW50MzJfdCB0aWxpbmcsIHVpbnQzMl90IHN0cmlkZSkKIAlpZ3RfYXNz ZXJ0KF9fZ2VtX3NldF90aWxpbmcoZmQsIGhhbmRsZSwgdGlsaW5nLCBzdHJpZGUpID09IDApOwog fQogCi1zdGF0aWMgaW50IF9fZ2VtX3NldF9jYWNoaW5nKGludCBmZCwgdWludDMyX3QgaGFuZGxl LCB1aW50MzJfdCBjYWNoaW5nKQoraW50IF9fZ2VtX3NldF9jYWNoaW5nKGludCBmZCwgdWludDMy X3QgaGFuZGxlLCB1aW50MzJfdCBjYWNoaW5nKQogewogCXN0cnVjdCBkcm1faTkxNV9nZW1fY2Fj aGluZyBhcmc7CiAJaW50IGVycjsKZGlmZiAtLWdpdCBhL2xpYi9pb2N0bF93cmFwcGVycy5oIGIv bGliL2lvY3RsX3dyYXBwZXJzLmgKaW5kZXggMTNmYmUzYzEwM2MwLi5iOTY2ZjcyYzkwYTggMTAw NjQ0Ci0tLSBhL2xpYi9pb2N0bF93cmFwcGVycy5oCisrKyBiL2xpYi9pb2N0bF93cmFwcGVycy5o CkBAIC02MSw2ICs2MSw3IEBAIGJvb2wgZ2VtX2dldF90aWxpbmcoaW50IGZkLCB1aW50MzJfdCBo YW5kbGUsIHVpbnQzMl90ICp0aWxpbmcsIHVpbnQzMl90ICpzd2l6emxlCiB2b2lkIGdlbV9zZXRf dGlsaW5nKGludCBmZCwgdWludDMyX3QgaGFuZGxlLCB1aW50MzJfdCB0aWxpbmcsIHVpbnQzMl90 IHN0cmlkZSk7CiBpbnQgX19nZW1fc2V0X3RpbGluZyhpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSwg dWludDMyX3QgdGlsaW5nLCB1aW50MzJfdCBzdHJpZGUpOwogCitpbnQgX19nZW1fc2V0X2NhY2hp bmcoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQzMl90IGNhY2hpbmcpOwogdm9pZCBnZW1f c2V0X2NhY2hpbmcoaW50IGZkLCB1aW50MzJfdCBoYW5kbGUsIHVpbnQzMl90IGNhY2hpbmcpOwog dWludDMyX3QgZ2VtX2dldF9jYWNoaW5nKGludCBmZCwgdWludDMyX3QgaGFuZGxlKTsKIHVpbnQz Ml90IGdlbV9mbGluayhpbnQgZmQsIHVpbnQzMl90IGhhbmRsZSk7CmRpZmYgLS1naXQgYS90ZXN0 cy9wZXJmX3BtdS5jIGIvdGVzdHMvcGVyZl9wbXUuYwppbmRleCAxOWZjYzk1ZmZjN2YuLjVlYWFh ZWNhYjM5OSAxMDA2NDQKLS0tIGEvdGVzdHMvcGVyZl9wbXUuYworKysgYi90ZXN0cy9wZXJmX3Bt dS5jCkBAIC0xNzAsNiArMTcwLDU2IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZTJyaW5nKGludCBn ZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSkKICNkZWZpbmUg RkxBR19MT05HICgxNikKICNkZWZpbmUgRkxBR19IQU5HICgzMikKIAorc3RhdGljIGlndF9zcGlu X3QgKiBfX3NwaW5fcG9sbChpbnQgZmQsIHVpbnQzMl90IGN0eCwgdW5zaWduZWQgbG9uZyBmbGFn cykKK3sKKwlpZiAoZ2VtX2Nhbl9zdG9yZV9kd29yZChmZCwgZmxhZ3MpKQorCQlyZXR1cm4gX19p Z3Rfc3Bpbl9iYXRjaF9uZXdfcG9sbChmZCwgY3R4LCBmbGFncyk7CisJZWxzZQorCQlyZXR1cm4g X19pZ3Rfc3Bpbl9iYXRjaF9uZXcoZmQsIGN0eCwgZmxhZ3MsIDApOworfQorCitzdGF0aWMgdW5z aWduZWQgbG9uZyBfX3NwaW5fd2FpdChpbnQgZmQsIGlndF9zcGluX3QgKnNwaW4pCit7CisJc3Ry dWN0IHRpbWVzcGVjIHN0YXJ0ID0geyB9OworCisJaWd0X25zZWNfZWxhcHNlZCgmc3RhcnQpOwor CisJaWYgKHNwaW4tPnJ1bm5pbmcpIHsKKwkJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gMDsKKwor CQl3aGlsZSAoISooKHZvbGF0aWxlIGJvb2wgKilzcGluLT5ydW5uaW5nKSkgeworCQkJdW5zaWdu ZWQgbG9uZyB0ID0gaWd0X25zZWNfZWxhcHNlZCgmc3RhcnQpOworCisJCQlpZiAoKHQgLSB0aW1l b3V0KSA+IDI1MGU2KSB7CisJCQkJdGltZW91dCA9IHQ7CisJCQkJaWd0X3dhcm4oIlNwaW5uZXIg bm90IHJ1bm5pbmcgYWZ0ZXIgJS4yZm1zXG4iLAorCQkJCQkgKGRvdWJsZSl0IC8gMWU2KTsKKwkJ CX0KKwkJfQorCX0gZWxzZSB7CisJCWlndF9kZWJ1ZygiX19zcGluX3dhaXQgLSB1c2xlZXAgbW9k ZVxuIik7CisJCXVzbGVlcCg1MDBlMyk7IC8qIEJldHRlciB0aGFuIG5vdGhpbmchICovCisJfQor CisJcmV0dXJuIGlndF9uc2VjX2VsYXBzZWQoJnN0YXJ0KTsKK30KKworc3RhdGljIGlndF9zcGlu X3QgKiBfX3NwaW5fc3luYyhpbnQgZmQsIHVpbnQzMl90IGN0eCwgdW5zaWduZWQgbG9uZyBmbGFn cykKK3sKKwlpZ3Rfc3Bpbl90ICpzcGluID0gX19zcGluX3BvbGwoZmQsIGN0eCwgZmxhZ3MpOwor CisJX19zcGluX3dhaXQoZmQsIHNwaW4pOworCisJcmV0dXJuIHNwaW47Cit9CisKK3N0YXRpYyBp Z3Rfc3Bpbl90ICogc3Bpbl9zeW5jKGludCBmZCwgdWludDMyX3QgY3R4LCB1bnNpZ25lZCBsb25n IGZsYWdzKQoreworCWlndF9yZXF1aXJlX2dlbShmZCk7CisKKwlyZXR1cm4gX19zcGluX3N5bmMo ZmQsIGN0eCwgZmxhZ3MpOworfQorCiBzdGF0aWMgdm9pZCBlbmRfc3BpbihpbnQgZmQsIGlndF9z cGluX3QgKnNwaW4sIHVuc2lnbmVkIGludCBmbGFncykKIHsKIAlpZiAoIXNwaW4pCkBAIC0xODAs OCArMjMwLDI1IEBAIHN0YXRpYyB2b2lkIGVuZF9zcGluKGludCBmZCwgaWd0X3NwaW5fdCAqc3Bp biwgdW5zaWduZWQgaW50IGZsYWdzKQogCWlmIChmbGFncyAmIEZMQUdfU1lOQykKIAkJZ2VtX3N5 bmMoZmQsIHNwaW4tPmhhbmRsZSk7CiAKLQlpZiAoZmxhZ3MgJiBURVNUX1RSQUlMSU5HX0lETEUp Ci0JCXVzbGVlcChiYXRjaF9kdXJhdGlvbl9ucyAvIDUwMDApOworCWlmIChmbGFncyAmIFRFU1Rf VFJBSUxJTkdfSURMRSkgeworCQl1bnNpZ25lZCBsb25nIHQsIHRpbWVvdXQgPSAwOworCQlzdHJ1 Y3QgdGltZXNwZWMgc3RhcnQgPSB7IH07CisKKwkJaWd0X25zZWNfZWxhcHNlZCgmc3RhcnQpOwor CisJCWRvIHsKKwkJCXQgPSBpZ3RfbnNlY19lbGFwc2VkKCZzdGFydCk7CisKKwkJCWlmIChnZW1f Ym9fYnVzeShmZCwgc3Bpbi0+aGFuZGxlKSAmJgorCQkJICAgICh0IC0gdGltZW91dCkgPiAxMGU2 KSB7CisJCQkJdGltZW91dCA9IHQ7CisJCQkJaWd0X3dhcm4oIlNwaW5uZXIgbm90IGlkbGUgYWZ0 ZXIgJS4yZm1zXG4iLAorCQkJCQkgKGRvdWJsZSl0IC8gMWU2KTsKKwkJCX0KKworCQkJdXNsZWVw KDFlMyk7CisJCX0gd2hpbGUgKHQgPCBiYXRjaF9kdXJhdGlvbl9ucyAvIDUpOworCX0KIH0KIAog c3RhdGljIHZvaWQKQEAgLTE5NSw3ICsyNjIsNyBAQCBzaW5nbGUoaW50IGdlbV9mZCwgY29uc3Qg c3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiAJ ZmQgPSBvcGVuX3BtdShJOTE1X1BNVV9FTkdJTkVfQlVTWShlLT5jbGFzcywgZS0+aW5zdGFuY2Up KTsKIAogCWlmIChmbGFncyAmIFRFU1RfQlVTWSkKLQkJc3BpbiA9IGlndF9zcGluX2JhdGNoX25l dyhnZW1fZmQsIDAsIGUycmluZyhnZW1fZmQsIGUpLCAwKTsKKwkJc3BpbiA9IHNwaW5fc3luYyhn ZW1fZmQsIDAsIGUycmluZyhnZW1fZmQsIGUpKTsKIAllbHNlCiAJCXNwaW4gPSBOVUxMOwogCkBA IC0yNTEsMTMgKzMxOCw3IEBAIGJ1c3lfc3RhcnQoaW50IGdlbV9mZCwgY29uc3Qgc3RydWN0IGlu dGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplKQogCSAqLwogCXNsZWVwKDIpOwogCi0Jc3BpbiA9IF9f aWd0X3NwaW5fYmF0Y2hfbmV3KGdlbV9mZCwgMCwgZTJyaW5nKGdlbV9mZCwgZSksIDApOwotCi0J LyoKLQkgKiBTbGVlcCBmb3IgYSBiaXQgYWZ0ZXIgbWFraW5nIHRoZSBlbmdpbmUgYnVzeSB0byBt YWtlIHN1cmUgdGhlIFBNVQotCSAqIGdldHMgZW5hYmxlZCB3aGVuIHRoZSBiYXRjaCBpcyBhbHJl YWR5IHJ1bm5pbmcuCi0JICovCi0JdXNsZWVwKDUwMGUzKTsKKwlzcGluID0gX19zcGluX3N5bmMo Z2VtX2ZkLCAwLCBlMnJpbmcoZ2VtX2ZkLCBlKSk7CiAKIAlmZCA9IG9wZW5fcG11KEk5MTVfUE1V X0VOR0lORV9CVVNZKGUtPmNsYXNzLCBlLT5pbnN0YW5jZSkpOwogCkBAIC0zMDAsNyArMzYxLDcg QEAgYnVzeV9kb3VibGVfc3RhcnQoaW50IGdlbV9mZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1 dGlvbl9lbmdpbmUyICplKQogCSAqIHJlLXN1Ym1pc3Npb24gaW4gZXhlY2xpc3RzIG1vZGUuIE1h a2Ugc3VyZSBidXN5bmVzcyBpcyBjb3JyZWN0bHkKIAkgKiByZXBvcnRlZCB3aXRoIHRoZSBlbmdp bmUgYnVzeSwgYW5kIGFmdGVyIHRoZSBlbmdpbmUgd2VudCBpZGxlLgogCSAqLwotCXNwaW5bMF0g PSBfX2lndF9zcGluX2JhdGNoX25ldyhnZW1fZmQsIDAsIGUycmluZyhnZW1fZmQsIGUpLCAwKTsK KwlzcGluWzBdID0gX19zcGluX3N5bmMoZ2VtX2ZkLCAwLCBlMnJpbmcoZ2VtX2ZkLCBlKSk7CiAJ dXNsZWVwKDUwMGUzKTsKIAlzcGluWzFdID0gX19pZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCBj dHgsIGUycmluZyhnZW1fZmQsIGUpLCAwKTsKIApAQCAtMzg2LDcgKzQ0Nyw3IEBAIGJ1c3lfY2hl Y2tfYWxsKGludCBnZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAq ZSwKIAogCWlndF9hc3NlcnRfZXEoaSwgbnVtX2VuZ2luZXMpOwogCi0Jc3BpbiA9IGlndF9zcGlu X2JhdGNoX25ldyhnZW1fZmQsIDAsIGUycmluZyhnZW1fZmQsIGUpLCAwKTsKKwlzcGluID0gc3Bp bl9zeW5jKGdlbV9mZCwgMCwgZTJyaW5nKGdlbV9mZCwgZSkpOwogCXBtdV9yZWFkX211bHRpKGZk WzBdLCBudW1fZW5naW5lcywgdHZhbFswXSk7CiAJc2xlcHQgPSBtZWFzdXJlZF91c2xlZXAoYmF0 Y2hfZHVyYXRpb25fbnMgLyAxMDAwKTsKIAlpZiAoZmxhZ3MgJiBURVNUX1RSQUlMSU5HX0lETEUp CkBAIC00MTIsMTUgKzQ3MywxNSBAQCBidXN5X2NoZWNrX2FsbChpbnQgZ2VtX2ZkLCBjb25zdCBz dHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUsCiB9CiAKIHN0YXRpYyB2b2lkCi1fX3N1 Ym1pdF9zcGluX2JhdGNoKGludCBnZW1fZmQsCi0JCSAgICBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4 ZWNfb2JqZWN0MiAqb2JqLAotCQkgICAgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdp bmUyICplKQorX19zdWJtaXRfc3Bpbl9iYXRjaChpbnQgZ2VtX2ZkLCBpZ3Rfc3Bpbl90ICpzcGlu LAorCQkgICAgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLAorCQkgICAg aW50IG9mZnNldCkKIHsKLQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyIGViID0gewot CQkuYnVmZmVyX2NvdW50ID0gMSwKLQkJLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKG9i aiksCi0JCS5mbGFncyA9IGUycmluZyhnZW1fZmQsIGUpLAotCX07CisJc3RydWN0IGRybV9pOTE1 X2dlbV9leGVjYnVmZmVyMiBlYiA9IHNwaW4tPmV4ZWNidWY7CisKKwllYi5mbGFncyAmPSB+KDB4 M2YgfCBJOTE1X0VYRUNfQlNEX01BU0spOworCWViLmZsYWdzIHw9IGUycmluZyhnZW1fZmQsIGUp IHwgSTkxNV9FWEVDX05PX1JFTE9DOworCWViLmJhdGNoX3N0YXJ0X29mZnNldCArPSBvZmZzZXQ7 CiAKIAlnZW1fZXhlY2J1ZihnZW1fZmQsICZlYik7CiB9CkBAIC00MjksNyArNDkwLDYgQEAgc3Rh dGljIHZvaWQKIG1vc3RfYnVzeV9jaGVja19hbGwoaW50IGdlbV9mZCwgY29uc3Qgc3RydWN0IGlu dGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLAogCQkgICAgY29uc3QgdW5zaWduZWQgaW50IG51bV9l bmdpbmVzLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9leGVj X29iamVjdDIgb2JqID0ge307CiAJY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUy ICplXzsKIAl1aW50NjRfdCB0dmFsWzJdW251bV9lbmdpbmVzXTsKIAl1aW50NjRfdCB2YWxbbnVt X2VuZ2luZXNdOwpAQCAtNDQzLDE1ICs1MDMsMTIgQEAgbW9zdF9idXN5X2NoZWNrX2FsbChpbnQg Z2VtX2ZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUsCiAJCWlmICgh Z2VtX2hhc19lbmdpbmUoZ2VtX2ZkLCBlXy0+Y2xhc3MsIGVfLT5pbnN0YW5jZSkpCiAJCQljb250 aW51ZTsKIAotCQlpZiAoZSA9PSBlXykgeworCQlpZiAoZSA9PSBlXykKIAkJCWlkbGVfaWR4ID0g aTsKLQkJfSBlbHNlIGlmIChzcGluKSB7Ci0JCQlfX3N1Ym1pdF9zcGluX2JhdGNoKGdlbV9mZCwg Jm9iaiwgZV8pOwotCQl9IGVsc2UgewotCQkJc3BpbiA9IGlndF9zcGluX2JhdGNoX25ldyhnZW1f ZmQsIDAsCi0JCQkJCQkgIGUycmluZyhnZW1fZmQsIGVfKSwgMCk7Ci0JCQlvYmouaGFuZGxlID0g c3Bpbi0+aGFuZGxlOwotCQl9CisJCWVsc2UgaWYgKHNwaW4pCisJCQlfX3N1Ym1pdF9zcGluX2Jh dGNoKGdlbV9mZCwgc3BpbiwgZV8sIDY0KTsKKwkJZWxzZQorCQkJc3BpbiA9IF9fc3Bpbl9wb2xs KGdlbV9mZCwgMCwgZTJyaW5nKGdlbV9mZCwgZV8pKTsKIAogCQl2YWxbaSsrXSA9IEk5MTVfUE1V X0VOR0lORV9CVVNZKGVfLT5jbGFzcywgZV8tPmluc3RhbmNlKTsKIAl9CkBAIC00NjEsNiArNTE4 LDkgQEAgbW9zdF9idXN5X2NoZWNrX2FsbChpbnQgZ2VtX2ZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxf ZXhlY3V0aW9uX2VuZ2luZTIgKmUsCiAJZm9yIChpID0gMDsgaSA8IG51bV9lbmdpbmVzOyBpKysp CiAJCWZkW2ldID0gb3Blbl9ncm91cCh2YWxbaV0sIGZkWzBdKTsKIAorCS8qIFNtYWxsIGRlbGF5 IHRvIGFsbG93IGVuZ2luZXMgdG8gc3RhcnQuICovCisJdXNsZWVwKF9fc3Bpbl93YWl0KGdlbV9m ZCwgc3BpbikgKiBudW1fZW5naW5lcyAvIDFlMyk7CisKIAlwbXVfcmVhZF9tdWx0aShmZFswXSwg bnVtX2VuZ2luZXMsIHR2YWxbMF0pOwogCXNsZXB0ID0gbWVhc3VyZWRfdXNsZWVwKGJhdGNoX2R1 cmF0aW9uX25zIC8gMTAwMCk7CiAJaWYgKGZsYWdzICYgVEVTVF9UUkFJTElOR19JRExFKQpAQCAt NDg5LDcgKzU0OSw2IEBAIHN0YXRpYyB2b2lkCiBhbGxfYnVzeV9jaGVja19hbGwoaW50IGdlbV9m ZCwgY29uc3QgdW5zaWduZWQgaW50IG51bV9lbmdpbmVzLAogCQkgICB1bnNpZ25lZCBpbnQgZmxh Z3MpCiB7Ci0Jc3RydWN0IGRybV9pOTE1X2dlbV9leGVjX29iamVjdDIgb2JqID0ge307CiAJY29u c3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplOwogCXVpbnQ2NF90IHR2YWxbMl1b bnVtX2VuZ2luZXNdOwogCXVpbnQ2NF90IHZhbFtudW1fZW5naW5lc107CkBAIC01MDMsMTMgKzU2 MiwxMCBAQCBhbGxfYnVzeV9jaGVja19hbGwoaW50IGdlbV9mZCwgY29uc3QgdW5zaWduZWQgaW50 IG51bV9lbmdpbmVzLAogCQlpZiAoIWdlbV9oYXNfZW5naW5lKGdlbV9mZCwgZS0+Y2xhc3MsIGUt Pmluc3RhbmNlKSkKIAkJCWNvbnRpbnVlOwogCi0JCWlmIChzcGluKSB7Ci0JCQlfX3N1Ym1pdF9z cGluX2JhdGNoKGdlbV9mZCwgJm9iaiwgZSk7Ci0JCX0gZWxzZSB7Ci0JCQlzcGluID0gaWd0X3Nw aW5fYmF0Y2hfbmV3KGdlbV9mZCwgMCwKLQkJCQkJCSAgZTJyaW5nKGdlbV9mZCwgZSksIDApOwot CQkJb2JqLmhhbmRsZSA9IHNwaW4tPmhhbmRsZTsKLQkJfQorCQlpZiAoc3BpbikKKwkJCV9fc3Vi bWl0X3NwaW5fYmF0Y2goZ2VtX2ZkLCBzcGluLCBlLCA2NCk7CisJCWVsc2UKKwkJCXNwaW4gPSBf X3NwaW5fcG9sbChnZW1fZmQsIDAsIGUycmluZyhnZW1fZmQsIGUpKTsKIAogCQl2YWxbaSsrXSA9 IEk5MTVfUE1VX0VOR0lORV9CVVNZKGUtPmNsYXNzLCBlLT5pbnN0YW5jZSk7CiAJfQpAQCAtNTE5 LDYgKzU3NSw5IEBAIGFsbF9idXN5X2NoZWNrX2FsbChpbnQgZ2VtX2ZkLCBjb25zdCB1bnNpZ25l ZCBpbnQgbnVtX2VuZ2luZXMsCiAJZm9yIChpID0gMDsgaSA8IG51bV9lbmdpbmVzOyBpKyspCiAJ CWZkW2ldID0gb3Blbl9ncm91cCh2YWxbaV0sIGZkWzBdKTsKIAorCS8qIFNtYWxsIGRlbGF5IHRv IGFsbG93IGVuZ2luZXMgdG8gc3RhcnQuICovCisJdXNsZWVwKF9fc3Bpbl93YWl0KGdlbV9mZCwg c3BpbikgKiBudW1fZW5naW5lcyAvIDFlMyk7CisKIAlwbXVfcmVhZF9tdWx0aShmZFswXSwgbnVt X2VuZ2luZXMsIHR2YWxbMF0pOwogCXNsZXB0ID0gbWVhc3VyZWRfdXNsZWVwKGJhdGNoX2R1cmF0 aW9uX25zIC8gMTAwMCk7CiAJaWYgKGZsYWdzICYgVEVTVF9UUkFJTElOR19JRExFKQpAQCAtNTUw LDcgKzYwOSw3IEBAIG5vX3NlbWEoaW50IGdlbV9mZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1 dGlvbl9lbmdpbmUyICplLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiAJb3Blbl9ncm91cChJOTE1X1BN VV9FTkdJTkVfV0FJVChlLT5jbGFzcywgZS0+aW5zdGFuY2UpLCBmZCk7CiAKIAlpZiAoZmxhZ3Mg JiBURVNUX0JVU1kpCi0JCXNwaW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCAwLCBlMnJp bmcoZ2VtX2ZkLCBlKSwgMCk7CisJCXNwaW4gPSBzcGluX3N5bmMoZ2VtX2ZkLCAwLCBlMnJpbmco Z2VtX2ZkLCBlKSk7CiAJZWxzZQogCQlzcGluID0gTlVMTDsKIApAQCAtODg0LDcgKzk0Myw3IEBA IG11bHRpX2NsaWVudChpbnQgZ2VtX2ZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2Vu Z2luZTIgKmUpCiAJICovCiAJZmRbMV0gPSBvcGVuX3BtdShjb25maWcpOwogCi0Jc3BpbiA9IGln dF9zcGluX2JhdGNoX25ldyhnZW1fZmQsIDAsIGUycmluZyhnZW1fZmQsIGUpLCAwKTsKKwlzcGlu ID0gc3Bpbl9zeW5jKGdlbV9mZCwgMCwgZTJyaW5nKGdlbV9mZCwgZSkpOwogCiAJdmFsWzBdID0g dmFsWzFdID0gX19wbXVfcmVhZF9zaW5nbGUoZmRbMF0sICZ0c1swXSk7CiAJc2xlcHRbMV0gPSBt ZWFzdXJlZF91c2xlZXAoYmF0Y2hfZHVyYXRpb25fbnMgLyAxMDAwKTsKQEAgLTEyNDgsNyArMTMw Nyw3IEBAIHRlc3RfZnJlcXVlbmN5KGludCBnZW1fZmQpCiAJaWd0X3JlcXVpcmUoaWd0X3N5c2Zz X2dldF91MzIoc3lzZnMsICJndF9ib29zdF9mcmVxX21oeiIpID09IG1pbl9mcmVxKTsKIAogCWdl bV9xdWllc2NlbnRfZ3B1KGdlbV9mZCk7IC8qIElkbGUgdG8gYmUgc3VyZSB0aGUgY2hhbmdlIHRh a2VzIGVmZmVjdCAqLwotCXNwaW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCAwLCBJOTE1 X0VYRUNfUkVOREVSLCAwKTsKKwlzcGluID0gc3Bpbl9zeW5jKGdlbV9mZCwgMCwgSTkxNV9FWEVD X1JFTkRFUik7CiAKIAlzbGVwdCA9IHBtdV9yZWFkX211bHRpKGZkLCAyLCBzdGFydCk7CiAJbWVh c3VyZWRfdXNsZWVwKGJhdGNoX2R1cmF0aW9uX25zIC8gMTAwMCk7CkBAIC0xMjc0LDcgKzEzMzMs NyBAQCB0ZXN0X2ZyZXF1ZW5jeShpbnQgZ2VtX2ZkKQogCWlndF9yZXF1aXJlKGlndF9zeXNmc19n ZXRfdTMyKHN5c2ZzLCAiZ3RfbWluX2ZyZXFfbWh6IikgPT0gbWF4X2ZyZXEpOwogCiAJZ2VtX3F1 aWVzY2VudF9ncHUoZ2VtX2ZkKTsKLQlzcGluID0gaWd0X3NwaW5fYmF0Y2hfbmV3KGdlbV9mZCwg MCwgSTkxNV9FWEVDX1JFTkRFUiwgMCk7CisJc3BpbiA9IHNwaW5fc3luYyhnZW1fZmQsIDAsIEk5 MTVfRVhFQ19SRU5ERVIpOwogCiAJc2xlcHQgPSBwbXVfcmVhZF9tdWx0aShmZCwgMiwgc3RhcnQp OwogCW1lYXN1cmVkX3VzbGVlcChiYXRjaF9kdXJhdGlvbl9ucyAvIDEwMDApOwpAQCAtMTQ1NSw2 ICsxNTE0LDExIEBAIHN0YXRpYyB2b2lkIF9fcmVhcm1fc3Bpbl9iYXRjaChpZ3Rfc3Bpbl90ICpz cGluKQogewogCWNvbnN0IHVpbnQzMl90IG1pX2FyYl9jaGsgPSAweDUgPDwgMjM7CiAKKwlpZiAo c3Bpbi0+cnVubmluZykgeworCQlpZ3RfYXNzZXJ0KCpzcGluLT5ydW5uaW5nKTsKKwkJKnNwaW4t PnJ1bm5pbmcgPSAwOworCX0KKwlpZ3RfYXNzZXJ0X2VxKCpzcGluLT5iYXRjaCwgTUlfQkFUQ0hf QlVGRkVSX0VORCk7CiAgICAgICAgKnNwaW4tPmJhdGNoID0gbWlfYXJiX2NoazsKICAgICAgICBf X3N5bmNfc3luY2hyb25pemUoKTsKIH0KQEAgLTE0ODksNiArMTU1Myw5IEBAIGFjY3VyYWN5KGlu dCBnZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSwKIAkvKiBT YW1wbGluZyBwbGF0Zm9ybXMgY2Fubm90IHJlYWNoIHRoZSBoaWdoIGFjY3VyYWN5IGNyaXRlcmlh LiAqLwogCWlndF9yZXF1aXJlKGdlbV9oYXNfZXhlY2xpc3RzKGdlbV9mZCkpOwogCisJLyogTmVl ZCBzdG9yZSBkd29yZCBmb3IgYWNjdXJhdGUgUFdNLiAqLworCWlndF9yZXF1aXJlKGdlbV9jYW5f c3RvcmVfZHdvcmQoZ2VtX2ZkLCBlMnJpbmcoZ2VtX2ZkLCBlKSkpOworCiAJd2hpbGUgKGlkbGVf dXMgPCAyNTAwKSB7CiAJCWJ1c3lfdXMgKj0gMjsKIAkJaWRsZV91cyAqPSAyOwpAQCAtMTUxNyw4 ICsxNTg0LDggQEAgYWNjdXJhY3koaW50IGdlbV9mZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1 dGlvbl9lbmdpbmUyICplLAogCQljb25zdCB1bnNpZ25lZCBsb25nIHRpbWVvdXRbXSA9IHsKIAkJ CXB3bV9jYWxpYnJhdGlvbl91cyAqIDEwMDAsIHRlc3RfdXMgKiAxMDAwCiAJCX07Ci0JCXN0cnVj dCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9iaiA9IHt9OwogCQl1aW50NjRfdCB0b3RhbF9i dXN5X25zID0gMCwgdG90YWxfaWRsZV9ucyA9IDA7CisJCXVpbnQ2NF90IHRhcmdldF9pZGxlX3Vz ID0gaWRsZV91czsKIAkJaWd0X3NwaW5fdCAqc3BpbjsKIAkJaW50IHJldDsKIApAQCAtMTUzMCwx MiArMTU5Nyw5IEBAIGFjY3VyYWN5KGludCBnZW1fZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVj dXRpb25fZW5naW5lMiAqZSwKIAkJCWlndF93YXJuKCJGYWlsZWQgdG8gc2V0IHNjaGVkdWxpbmcg cG9saWN5IVxuIik7CiAKIAkJLyogQWxsb2NhdGUgb3VyIHNwaW4gYmF0Y2ggYW5kIGlkbGUgaXQu ICovCi0JCXNwaW4gPSBpZ3Rfc3Bpbl9iYXRjaF9uZXcoZ2VtX2ZkLCAwLCBlMnJpbmcoZ2VtX2Zk LCBlKSwgMCk7Ci0JCW9iai5oYW5kbGUgPSBzcGluLT5oYW5kbGU7Ci0JCV9fc3VibWl0X3NwaW5f YmF0Y2goZ2VtX2ZkLCAmb2JqLCBlKTsgLyogcmVjb3JkIGl0cyBsb2NhdGlvbiAqLworCQlzcGlu ID0gc3Bpbl9zeW5jKGdlbV9mZCwgMCwgZTJyaW5nKGdlbV9mZCwgZSkpOwogCQlpZ3Rfc3Bpbl9i YXRjaF9lbmQoc3Bpbik7Ci0JCWdlbV9zeW5jKGdlbV9mZCwgb2JqLmhhbmRsZSk7Ci0JCW9iai5m bGFncyB8PSBFWEVDX09CSkVDVF9QSU5ORUQ7CisJCWdlbV9zeW5jKGdlbV9mZCwgc3Bpbi0+aGFu ZGxlKTsKIAogCQkvKiAxc3QgcGFzcyBpcyBjYWxpYnJhdGlvbiwgc2Vjb25kIHBhc3MgaXMgdGhl IHRlc3QuICovCiAJCWZvciAoaW50IHBhc3MgPSAwOyBwYXNzIDwgQVJSQVlfU0laRSh0aW1lb3V0 KTsgcGFzcysrKSB7CkBAIC0xNTQ1LDI3ICsxNjA5LDQyIEBAIGFjY3VyYWN5KGludCBnZW1fZmQs IGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSwKIAogCQkJaWd0X25zZWNf ZWxhcHNlZCgmdGVzdF9zdGFydCk7CiAJCQlkbyB7Ci0JCQkJdW5zaWduZWQgaW50IHRhcmdldF9p ZGxlX3VzLCB0X2J1c3k7CisJCQkJdW5zaWduZWQgbG9uZyBwcmVwX2RlbGF5X25zLCBydW5fZGVs YXlfbnM7CisJCQkJc3RydWN0IHRpbWVzcGVjIHN0YXJ0ID0geyB9OworCQkJCWRvdWJsZSBlcnJv cjsKIAogCQkJCS8qIFJlc3RhcnQgdGhlIHNwaW5iYXRjaC4gKi8KKwkJCQlpZ3RfbnNlY19lbGFw c2VkKCZzdGFydCk7CisKIAkJCQlfX3JlYXJtX3NwaW5fYmF0Y2goc3Bpbik7Ci0JCQkJX19zdWJt aXRfc3Bpbl9iYXRjaChnZW1fZmQsICZvYmosIGUpOworCQkJCV9fc3VibWl0X3NwaW5fYmF0Y2go Z2VtX2ZkLCBzcGluLCBlLCAwKTsKIAotCQkJCS8qCi0JCQkJICogTm90ZSB0aGF0IHRoZSBzdWJt aXNzaW9uIG1heSBiZSBkZWxheWVkIHRvIGEKLQkJCQkgKiB0YXNrbGV0IChrc29mdGlycWQpIHdo aWNoIGNhbm5vdCBydW4gdW50aWwgd2UKLQkJCQkgKiBzbGVlcCBhcyB3ZSBob2cgdGhlIGNwdSAo d2UgYXJlIFJUKS4KLQkJCQkgKi8KKwkJCQlwcmVwX2RlbGF5X25zID0gaWd0X25zZWNfZWxhcHNl ZCgmc3RhcnQpOworCQkJCXJ1bl9kZWxheV9ucyA9IF9fc3Bpbl93YWl0KGdlbV9mZCwgc3Bpbik7 CisKKwkJCQkvKiBQV00gYnVzeSBzbGVlcC4gKi8KKwkJCQltZWFzdXJlZF91c2xlZXAoYnVzeV91 cyk7CiAKLQkJCQl0X2J1c3kgPSBtZWFzdXJlZF91c2xlZXAoYnVzeV91cyk7CiAJCQkJaWd0X3Nw aW5fYmF0Y2hfZW5kKHNwaW4pOwotCQkJCWdlbV9zeW5jKGdlbV9mZCwgb2JqLmhhbmRsZSk7CiAK LQkJCQl0b3RhbF9idXN5X25zICs9IHRfYnVzeTsKKwkJCQl0b3RhbF9idXN5X25zICs9IGlndF9u c2VjX2VsYXBzZWQoJnN0YXJ0KSAtCisJCQkJCQkgcHJlcF9kZWxheV9ucyAtIHJ1bl9kZWxheV9u czsKKworCQkJCS8qIFBXTSBpZGxlIHNsZWVwLiAqLworCQkJCW1lbXNldCgmc3RhcnQsIDAsIHNp emVvZihzdGFydCkpOworCQkJCWlndF9uc2VjX2VsYXBzZWQoJnN0YXJ0KTsKKwkJCQlnZW1fc3lu YyhnZW1fZmQsIHNwaW4tPmhhbmRsZSk7CisJCQkJbWVhc3VyZWRfdXNsZWVwKHRhcmdldF9pZGxl X3VzIC0KKwkJCQkJCXByZXBfZGVsYXlfbnMgLyAxMDAwKTsKKwkJCQl0b3RhbF9pZGxlX25zICs9 IGlndF9uc2VjX2VsYXBzZWQoJnN0YXJ0KTsKKworCQkJCS8qIFJlLWNhbGlicmF0ZS4gKi8KKwkJ CQllcnJvciA9IChkb3VibGUpdG90YWxfYnVzeV9ucyAvCisJCQkJCSh0b3RhbF9idXN5X25zICsg dG90YWxfaWRsZV9ucykgLQorCQkJCQkoZG91YmxlKXRhcmdldF9idXN5X3BjdCAvIDEwMC4wOwog Ci0JCQkJdGFyZ2V0X2lkbGVfdXMgPQotCQkJCQkoMTAwICogdG90YWxfYnVzeV9ucyAvIHRhcmdl dF9idXN5X3BjdCAtICh0b3RhbF9idXN5X25zICsgdG90YWxfaWRsZV9ucykpIC8gMTAwMDsKLQkJ CQl0b3RhbF9pZGxlX25zICs9IG1lYXN1cmVkX3VzbGVlcCh0YXJnZXRfaWRsZV91cyk7CisJCQkJ dGFyZ2V0X2lkbGVfdXMgPSAoZG91YmxlKXRhcmdldF9pZGxlX3VzICoKKwkJCQkJCSAoMS4wICsg ZXJyb3IpOwogCQkJfSB3aGlsZSAoaWd0X25zZWNfZWxhcHNlZCgmdGVzdF9zdGFydCkgPCB0aW1l b3V0W3Bhc3NdKTsKIAogCQkJYnVzeV9ucyArPSB0b3RhbF9idXN5X25zOwotLSAKMi4xNC4xCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2IG1h aWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZy ZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXYK