From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga17.intel.com (mga17.intel.com [192.55.52.151]) by gabe.freedesktop.org (Postfix) with ESMTPS id D38806E861 for ; Fri, 21 Jun 2019 10:01:45 +0000 (UTC) From: Ramalingam C Date: Fri, 21 Jun 2019 15:33:27 +0530 Message-Id: <20190621100345.20019-26-ramalingam.c@intel.com> In-Reply-To: <20190621100345.20019-1-ramalingam.c@intel.com> References: <20190621100345.20019-1-ramalingam.c@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [RFC v2 25/43] tests/i915/gem_exec_schedule: use the gem_engine_topology library List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , 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, tvrtko.ursulin@linux.intel.com, andi@etezian.org List-ID: UmVwbGFjZSB0aGUgbGVnYWN5IGZvcl9lYWNoX2VuZ2luZSogZGVmaW5lcyB3aXRoIHRoZSBvbmVz CmltcGxlbWVudGVkIGluIHRoZSBnZW1fZW5naW5lX3RvcG9sb2d5IGxpYnJhcnkuCgpTaWduZWQt b2ZmLWJ5OiBSYW1hbGluZ2FtIEMgPHJhbWFsaW5nYW0uY0BpbnRlbC5jb20+Ci0tLQogdGVzdHMv aTkxNS9nZW1fZXhlY19zY2hlZHVsZS5jIHwgMzU0ICsrKysrKysrKysrKysrKystLS0tLS0tLS0t LS0tLS0tLQogMSBmaWxlIGNoYW5nZWQsIDE3NyBpbnNlcnRpb25zKCspLCAxNzcgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvdGVzdHMvaTkxNS9nZW1fZXhlY19zY2hlZHVsZS5jIGIvdGVzdHMv aTkxNS9nZW1fZXhlY19zY2hlZHVsZS5jCmluZGV4IDdiNDE4NjIyOGYwOS4uMjFiMGQ5MzU1OWUw IDEwMDY0NAotLS0gYS90ZXN0cy9pOTE1L2dlbV9leGVjX3NjaGVkdWxlLmMKKysrIGIvdGVzdHMv aTkxNS9nZW1fZXhlY19zY2hlZHVsZS5jCkBAIC04Myw3ICs4Myw4IEBAIHZvaWQgX19zeW5jX3Jl YWRfdTMyX2NvdW50KGludCBmZCwgdWludDMyX3QgaGFuZGxlLCB1aW50MzJfdCAqZHN0LCB1aW50 NjRfdCBzaXplCiAJZ2VtX3JlYWQoZmQsIGhhbmRsZSwgMCwgZHN0LCBzaXplKTsKIH0KIAotc3Rh dGljIHVpbnQzMl90IF9fc3RvcmVfZHdvcmQoaW50IGZkLCB1aW50MzJfdCBjdHgsIHVuc2lnbmVk IHJpbmcsCitzdGF0aWMgdWludDMyX3QgX19zdG9yZV9kd29yZChpbnQgZmQsIHVpbnQzMl90IGN0 eCwKKwkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSwKIAkJ CSAgICAgIHVpbnQzMl90IHRhcmdldCwgdWludDMyX3Qgb2Zmc2V0LCB1aW50MzJfdCB2YWx1ZSwK IAkJCSAgICAgIHVpbnQzMl90IGNvcmssIHVuc2lnbmVkIHdyaXRlX2RvbWFpbikKIHsKQEAgLTk3 LDcgKzk4LDcgQEAgc3RhdGljIHVpbnQzMl90IF9fc3RvcmVfZHdvcmQoaW50IGZkLCB1aW50MzJf dCBjdHgsIHVuc2lnbmVkIHJpbmcsCiAJbWVtc2V0KCZleGVjYnVmLCAwLCBzaXplb2YoZXhlY2J1 ZikpOwogCWV4ZWNidWYuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIob2JqICsgIWNvcmsp OwogCWV4ZWNidWYuYnVmZmVyX2NvdW50ID0gMiArICEhY29yazsKLQlleGVjYnVmLmZsYWdzID0g cmluZzsKKwlleGVjYnVmLmZsYWdzID0gZS0+ZmxhZ3M7CiAJaWYgKGdlbiA8IDYpCiAJCWV4ZWNi dWYuZmxhZ3MgfD0gSTkxNV9FWEVDX1NFQ1VSRTsKIAlleGVjYnVmLnJzdmQxID0gY3R4OwpAQCAt MTM4LDExICsxMzksMTIgQEAgc3RhdGljIHVpbnQzMl90IF9fc3RvcmVfZHdvcmQoaW50IGZkLCB1 aW50MzJfdCBjdHgsIHVuc2lnbmVkIHJpbmcsCiAJcmV0dXJuIG9ialsyXS5oYW5kbGU7CiB9CiAK LXN0YXRpYyB2b2lkIHN0b3JlX2R3b3JkKGludCBmZCwgdWludDMyX3QgY3R4LCB1bnNpZ25lZCBy aW5nLAorc3RhdGljIHZvaWQgc3RvcmVfZHdvcmQoaW50IGZkLCB1aW50MzJfdCBjdHgsCisJCQlj b25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUsCiAJCQl1aW50MzJfdCB0YXJn ZXQsIHVpbnQzMl90IG9mZnNldCwgdWludDMyX3QgdmFsdWUsCiAJCQl1aW50MzJfdCBjb3JrLCB1 bnNpZ25lZCB3cml0ZV9kb21haW4pCiB7Ci0JZ2VtX2Nsb3NlKGZkLCBfX3N0b3JlX2R3b3JkKGZk LCBjdHgsIHJpbmcsCisJZ2VtX2Nsb3NlKGZkLCBfX3N0b3JlX2R3b3JkKGZkLCBjdHgsIGUsCiAJ CQkJICAgIHRhcmdldCwgb2Zmc2V0LCB2YWx1ZSwKIAkJCQkgICAgY29yaywgd3JpdGVfZG9tYWlu KSk7CiB9CkBAIC0xNjEsMTQgKzE2MywxNSBAQCBzdGF0aWMgdWludDMyX3QgY3JlYXRlX2hpZ2hl c3RfcHJpb3JpdHkoaW50IGZkKQogCXJldHVybiBjdHg7CiB9CiAKLXN0YXRpYyB2b2lkIHVucGx1 Z19zaG93X3F1ZXVlKGludCBmZCwgc3RydWN0IGlndF9jb3JrICpjLCB1bnNpZ25lZCBpbnQgZW5n aW5lKQorc3RhdGljIHZvaWQgdW5wbHVnX3Nob3dfcXVldWUoaW50IGZkLCBzdHJ1Y3QgaWd0X2Nv cmsgKmMsCisJCQkgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUp CiB7CiAJaWd0X3NwaW5fdCAqc3BpbltNQVhfRUxTUF9RTEVOXTsKIAogCWZvciAoaW50IG4gPSAw OyBuIDwgQVJSQVlfU0laRShzcGluKTsgbisrKSB7CiAJCWNvbnN0IHN0cnVjdCBpZ3Rfc3Bpbl9m YWN0b3J5IG9wdHMgPSB7CiAJCQkuY3R4ID0gY3JlYXRlX2hpZ2hlc3RfcHJpb3JpdHkoZmQpLAot CQkJLmVuZ2luZSA9IGVuZ2luZSwKKwkJCS5lbmdpbmUgPSBlLT5mbGFncywKIAkJfTsKIAkJc3Bp bltuXSA9IF9faWd0X3NwaW5fZmFjdG9yeShmZCwgJm9wdHMpOwogCQlnZW1fY29udGV4dF9kZXN0 cm95KGZkLCBvcHRzLmN0eCk7CkBAIC0xODIsNyArMTg1LDcgQEAgc3RhdGljIHZvaWQgdW5wbHVn X3Nob3dfcXVldWUoaW50IGZkLCBzdHJ1Y3QgaWd0X2NvcmsgKmMsIHVuc2lnbmVkIGludCBlbmdp bmUpCiAKIH0KIAotc3RhdGljIHZvaWQgZmlmbyhpbnQgZmQsIHVuc2lnbmVkIHJpbmcpCitzdGF0 aWMgdm9pZCBmaWZvKGludCBmZCwgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUy ICplKQogewogCUlHVF9DT1JLX0hBTkRMRShjb3JrKTsKIAl1aW50MzJfdCBzY3JhdGNoLCBwbHVn OwpAQCAtMTkzLDEwICsxOTYsMTAgQEAgc3RhdGljIHZvaWQgZmlmbyhpbnQgZmQsIHVuc2lnbmVk IHJpbmcpCiAJcGx1ZyA9IGlndF9jb3JrX3BsdWcoJmNvcmssIGZkKTsKIAogCS8qIFNhbWUgcHJp b3JpdHksIHNhbWUgdGltZWxpbmUsIGZpbmFsIHJlc3VsdCB3aWxsIGJlIHRoZSBzZWNvbmQgZWIg Ki8KLQlzdG9yZV9kd29yZChmZCwgMCwgcmluZywgc2NyYXRjaCwgMCwgMSwgcGx1ZywgMCk7Ci0J c3RvcmVfZHdvcmQoZmQsIDAsIHJpbmcsIHNjcmF0Y2gsIDAsIDIsIHBsdWcsIDApOworCXN0b3Jl X2R3b3JkKGZkLCAwLCBlLCBzY3JhdGNoLCAwLCAxLCBwbHVnLCAwKTsKKwlzdG9yZV9kd29yZChm ZCwgMCwgZSwgc2NyYXRjaCwgMCwgMiwgcGx1ZywgMCk7CiAKLQl1bnBsdWdfc2hvd19xdWV1ZShm ZCwgJmNvcmssIHJpbmcpOworCXVucGx1Z19zaG93X3F1ZXVlKGZkLCAmY29yaywgZSk7CiAJZ2Vt X2Nsb3NlKGZkLCBwbHVnKTsKIAogCXJlc3VsdCA9ICBfX3N5bmNfcmVhZF91MzIoZmQsIHNjcmF0 Y2gsIDApOwpAQCAtMjA1LDE1ICsyMDgsMTUgQEAgc3RhdGljIHZvaWQgZmlmbyhpbnQgZmQsIHVu c2lnbmVkIHJpbmcpCiAJaWd0X2Fzc2VydF9lcV91MzIocmVzdWx0LCAyKTsKIH0KIAotc3RhdGlj IHZvaWQgaW5kZXBlbmRlbnQoaW50IGZkLCB1bnNpZ25lZCBpbnQgZW5naW5lKQorc3RhdGljIHZv aWQgaW5kZXBlbmRlbnQoaW50IGZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2lu ZTIgKmUpCiB7CiAJSUdUX0NPUktfSEFORExFKGNvcmspOwogCXVpbnQzMl90IHNjcmF0Y2gsIHBs dWcsIGJhdGNoOwogCWlndF9zcGluX3QgKnNwaW4gPSBOVUxMOwotCXVuc2lnbmVkIGludCBvdGhl cjsKKwljb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKm90aGVyOwogCXVpbnQz Ml90ICpwdHI7CiAKLQlpZ3RfcmVxdWlyZShlbmdpbmUgIT0gMCk7CisJaWd0X3JlcXVpcmUoZSk7 CiAKIAlzY3JhdGNoID0gZ2VtX2NyZWF0ZShmZCwgNDA5Nik7CiAJcHRyID0gZ2VtX21tYXBfX2d0 dChmZCwgc2NyYXRjaCwgNDA5NiwgUFJPVF9SRUFEKTsKQEAgLTIyMiwzMiArMjI1LDMyIEBAIHN0 YXRpYyB2b2lkIGluZGVwZW5kZW50KGludCBmZCwgdW5zaWduZWQgaW50IGVuZ2luZSkKIAlwbHVn ID0gaWd0X2NvcmtfcGx1ZygmY29yaywgZmQpOwogCiAJLyogQ2hlY2sgdGhhdCB3ZSBjYW4gc3Vi bWl0IHRvIGVuZ2luZSB3aGlsZSBhbGwgb3RoZXJzIGFyZSBibG9ja2VkICovCi0JZm9yX2VhY2hf cGh5c2ljYWxfZW5naW5lKGZkLCBvdGhlcikgewotCQlpZiAob3RoZXIgPT0gZW5naW5lKQorCV9f Zm9yX2VhY2hfcGh5c2ljYWxfZW5naW5lKGZkLCBvdGhlcikgeworCQlpZiAob3RoZXIgPT0gZSkK IAkJCWNvbnRpbnVlOwogCi0JCWlmICghZ2VtX2Nhbl9zdG9yZV9kd29yZChmZCwgb3RoZXIpKQor CQlpZiAoIWdlbV9jbGFzc19jYW5fc3RvcmVfZHdvcmQoZmQsIG90aGVyLT5jbGFzcykpCiAJCQlj b250aW51ZTsKIAogCQlpZiAoc3BpbiA9PSBOVUxMKSB7Ci0JCQlzcGluID0gX19pZ3Rfc3Bpbl9u ZXcoZmQsIC5lbmdpbmUgPSBvdGhlcik7CisJCQlzcGluID0gX19pZ3Rfc3Bpbl9uZXcoZmQsIC5l bmdpbmUgPSBvdGhlci0+ZmxhZ3MpOwogCQl9IGVsc2UgewogCQkJc3RydWN0IGRybV9pOTE1X2dl bV9leGVjYnVmZmVyMiBlYiA9IHsKIAkJCQkuYnVmZmVyX2NvdW50ID0gMSwKIAkJCQkuYnVmZmVy c19wdHIgPSB0b191c2VyX3BvaW50ZXIoJnNwaW4tPm9ialtJR1RfU1BJTl9CQVRDSF0pLAotCQkJ CS5mbGFncyA9IG90aGVyLAorCQkJCS5mbGFncyA9IG90aGVyLT5mbGFncywKIAkJCX07CiAJCQln ZW1fZXhlY2J1ZihmZCwgJmViKTsKIAkJfQogCi0JCXN0b3JlX2R3b3JkKGZkLCAwLCBvdGhlciwg c2NyYXRjaCwgMCwgb3RoZXIsIHBsdWcsIDApOworCQlzdG9yZV9kd29yZChmZCwgMCwgb3RoZXIs IHNjcmF0Y2gsIDAsIG90aGVyLT5mbGFncywgcGx1ZywgMCk7CiAJfQogCWlndF9yZXF1aXJlKHNw aW4pOwogCiAJLyogU2FtZSBwcmlvcml0eSwgYnV0IGRpZmZlcmVudCB0aW1lbGluZSAoYXMgZGlm ZmVyZW50IGVuZ2luZSkgKi8KLQliYXRjaCA9IF9fc3RvcmVfZHdvcmQoZmQsIDAsIGVuZ2luZSwg c2NyYXRjaCwgMCwgZW5naW5lLCBwbHVnLCAwKTsKKwliYXRjaCA9IF9fc3RvcmVfZHdvcmQoZmQs IDAsIGUsIHNjcmF0Y2gsIDAsIGUtPmZsYWdzLCBwbHVnLCAwKTsKIAotCXVucGx1Z19zaG93X3F1 ZXVlKGZkLCAmY29yaywgZW5naW5lKTsKKwl1bnBsdWdfc2hvd19xdWV1ZShmZCwgJmNvcmssIGUp OwogCWdlbV9jbG9zZShmZCwgcGx1Zyk7CiAKIAlnZW1fc3luYyhmZCwgYmF0Y2gpOwpAQCAtMjU3 LDM0ICsyNjAsMzUgQEAgc3RhdGljIHZvaWQgaW5kZXBlbmRlbnQoaW50IGZkLCB1bnNpZ25lZCBp bnQgZW5naW5lKQogCiAJLyogT25seSB0aGUgbG9jYWwgZW5naW5lIHNob3VsZCBiZSBmcmVlIHRv IGNvbXBsZXRlLiAqLwogCWlndF9hc3NlcnQoZ2VtX2JvX2J1c3koZmQsIHNjcmF0Y2gpKTsKLQlp Z3RfYXNzZXJ0X2VxKHB0clswXSwgZW5naW5lKTsKKwlpZ3RfYXNzZXJ0X2VxKHB0clswXSwgZS0+ ZmxhZ3MpOwogCiAJaWd0X3NwaW5fZnJlZShmZCwgc3Bpbik7CiAJZ2VtX3F1aWVzY2VudF9ncHUo ZmQpOwogCiAJLyogQW5kIHdlIGV4cGVjdCB0aGUgb3RoZXJzIHRvIGhhdmUgb3ZlcndyaXR0ZW4g dXMsIG9yZGVyIHVuc3BlY2lmaWVkICovCiAJaWd0X2Fzc2VydCghZ2VtX2JvX2J1c3koZmQsIHNj cmF0Y2gpKTsKLQlpZ3RfYXNzZXJ0X25lcShwdHJbMF0sIGVuZ2luZSk7CisJaWd0X2Fzc2VydF9u ZXEocHRyWzBdLCBlLT5mbGFncyk7CiAKIAltdW5tYXAocHRyLCA0MDk2KTsKIAlnZW1fY2xvc2Uo ZmQsIHNjcmF0Y2gpOwogfQogCi1zdGF0aWMgdm9pZCBzbW9rZXRlc3QoaW50IGZkLCB1bnNpZ25l ZCByaW5nLCB1bnNpZ25lZCB0aW1lb3V0KQorc3RhdGljIHZvaWQgc21va2V0ZXN0KGludCBmZCwg Y29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplLAorCQkgICAgICB1bnNpZ25l ZCB0aW1lb3V0KQogewogCWNvbnN0IGludCBuY3B1cyA9IHN5c2NvbmYoX1NDX05QUk9DRVNTT1JT X09OTE4pOwotCXVuc2lnbmVkIGVuZ2luZXNbTUFYX0VOR0lORVNdOworCWNvbnN0IHN0cnVjdCBp bnRlbF9leGVjdXRpb25fZW5naW5lMiAqZW5naW5lc1tNQVhfRU5HSU5FU107CiAJdW5zaWduZWQg bmVuZ2luZTsKLQl1bnNpZ25lZCBlbmdpbmU7CisJY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlv bl9lbmdpbmUyICpvdGhlcjsKIAl1aW50MzJfdCBzY3JhdGNoOwogCXVpbnQzMl90IHJlc3VsdFsy ICogbmNwdXNdOwogCiAJbmVuZ2luZSA9IDA7Ci0JaWYgKHJpbmcgPT0gQUxMX0VOR0lORVMpIHsK LQkJZm9yX2VhY2hfcGh5c2ljYWxfZW5naW5lKGZkLCBlbmdpbmUpCi0JCQllbmdpbmVzW25lbmdp bmUrK10gPSBlbmdpbmU7CisJaWYgKCFlKSB7CisJCV9fZm9yX2VhY2hfcGh5c2ljYWxfZW5naW5l KGZkLCBvdGhlcikKKwkJCWVuZ2luZXNbbmVuZ2luZSsrXSA9IG90aGVyOwogCX0gZWxzZSB7Ci0J CWVuZ2luZXNbbmVuZ2luZSsrXSA9IHJpbmc7CisJCWVuZ2luZXNbbmVuZ2luZSsrXSA9IGU7CiAJ fQogCWlndF9yZXF1aXJlKG5lbmdpbmUpOwogCkBAIC0zMDIsMTIgKzMwNiwxMiBAQCBzdGF0aWMg dm9pZCBzbW9rZXRlc3QoaW50IGZkLCB1bnNpZ25lZCByaW5nLCB1bnNpZ25lZCB0aW1lb3V0KQog CQkJcHJpbyA9IGhhcnNfcGV0cnVza2FfZjU0XzFfcmFuZG9tX3Vuc2FmZV9tYXgoTUFYX1BSSU8g LSBNSU5fUFJJTykgKyBNSU5fUFJJTzsKIAkJCWdlbV9jb250ZXh0X3NldF9wcmlvcml0eShmZCwg Y3R4LCBwcmlvKTsKIAotCQkJZW5naW5lID0gZW5naW5lc1toYXJzX3BldHJ1c2thX2Y1NF8xX3Jh bmRvbV91bnNhZmVfbWF4KG5lbmdpbmUpXTsKLQkJCXN0b3JlX2R3b3JkKGZkLCBjdHgsIGVuZ2lu ZSwgc2NyYXRjaCwKKwkJCW90aGVyID0gZW5naW5lc1toYXJzX3BldHJ1c2thX2Y1NF8xX3JhbmRv bV91bnNhZmVfbWF4KG5lbmdpbmUpXTsKKwkJCXN0b3JlX2R3b3JkKGZkLCBjdHgsIG90aGVyLCBz Y3JhdGNoLAogCQkJCSAgICA4KmNoaWxkICsgMCwgfmNoaWxkLAogCQkJCSAgICAwLCAwKTsKIAkJ CWZvciAodW5zaWduZWQgaW50IHN0ZXAgPSAwOyBzdGVwIDwgODsgc3RlcCsrKQotCQkJCXN0b3Jl X2R3b3JkKGZkLCBjdHgsIGVuZ2luZSwgc2NyYXRjaCwKKwkJCQlzdG9yZV9kd29yZChmZCwgY3R4 LCBvdGhlciwgc2NyYXRjaCwKIAkJCQkJICAgIDgqY2hpbGQgKyA0LCBjb3VudCsrLAogCQkJCQkg ICAgMCwgMCk7CiAJCX0KQEAgLTM1Miw3ICszNTYsNyBAQCBzdGF0aWMgdm9pZCBzZW1hcGhvcmVf dXNlcmxvY2soaW50IGk5MTUpCiAJCS5oYW5kbGUgPSBiYXRjaF9jcmVhdGUoaTkxNSksCiAJfTsK IAlpZ3Rfc3Bpbl90ICpzcGluID0gTlVMTDsKLQl1bnNpZ25lZCBpbnQgZW5naW5lOworCWNvbnN0 IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZTsKIAl1aW50MzJfdCBzY3JhdGNoOwog CiAJaWd0X3JlcXVpcmUoZ2VtX3NjaGVkdWxlcl9oYXNfc2VtYXBob3JlcyhpOTE1KSk7CkBAIC0z NjUsMTYgKzM2OSwxNiBAQCBzdGF0aWMgdm9pZCBzZW1hcGhvcmVfdXNlcmxvY2soaW50IGk5MTUp CiAJICovCiAKIAlzY3JhdGNoID0gZ2VtX2NyZWF0ZShpOTE1LCA0MDk2KTsKLQlmb3JfZWFjaF9w aHlzaWNhbF9lbmdpbmUoaTkxNSwgZW5naW5lKSB7CisJX19mb3JfZWFjaF9waHlzaWNhbF9lbmdp bmUoaTkxNSwgZSkgewogCQlpZiAoIXNwaW4pIHsKIAkJCXNwaW4gPSBpZ3Rfc3Bpbl9uZXcoaTkx NSwKIAkJCQkJICAgIC5kZXBlbmRlbmN5ID0gc2NyYXRjaCwKLQkJCQkJICAgIC5lbmdpbmUgPSBl bmdpbmUpOworCQkJCQkgICAgLmVuZ2luZSA9IGUtPmZsYWdzKTsKIAkJfSBlbHNlIHsKIAkJCXVp bnQ2NF90IHNhdmVkID0gc3Bpbi0+ZXhlY2J1Zi5mbGFnczsKIAogCQkJc3Bpbi0+ZXhlY2J1Zi5m bGFncyAmPSB+RU5HSU5FX01BU0s7Ci0JCQlzcGluLT5leGVjYnVmLmZsYWdzIHw9IGVuZ2luZTsK KwkJCXNwaW4tPmV4ZWNidWYuZmxhZ3MgfD0gZS0+ZmxhZ3M7CiAKIAkJCWdlbV9leGVjYnVmKGk5 MTUsICZzcGluLT5leGVjYnVmKTsKIApAQCAtMzkwLDE1ICszOTQsMTUgQEAgc3RhdGljIHZvaWQg c2VtYXBob3JlX3VzZXJsb2NrKGludCBpOTE1KQogCSAqIHRha2luZyBwcmVjZWRlbmNlLgogCSAq LwogCXNjcmF0Y2ggPSBnZW1fY29udGV4dF9jcmVhdGUoaTkxNSk7Ci0JZm9yX2VhY2hfcGh5c2lj YWxfZW5naW5lKGk5MTUsIGVuZ2luZSkgeworCV9fZm9yX2VhY2hfcGh5c2ljYWxfZW5naW5lKGk5 MTUsIGUpIHsKIAkJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBleGVjYnVmID0gewog CQkJLmJ1ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZvYmopLAogCQkJLmJ1ZmZlcl9jb3Vu dCA9IDEsCi0JCQkuZmxhZ3MgPSBlbmdpbmUsCisJCQkuZmxhZ3MgPSBlLT5mbGFncywKIAkJCS5y c3ZkMSA9IHNjcmF0Y2gsCiAJCX07CiAKLQkJaWYgKGVuZ2luZSA9PSAoc3Bpbi0+ZXhlY2J1Zi5m bGFncyAmIEVOR0lORV9NQVNLKSkKKwkJaWYgKGUtPmZsYWdzID09IChzcGluLT5leGVjYnVmLmZs YWdzICYgRU5HSU5FX01BU0spKQogCQkJY29udGludWU7CiAKIAkJZ2VtX2V4ZWNidWYoaTkxNSwg JmV4ZWNidWYpOwpAQCAtNDE1LDcgKzQxOSw3IEBAIHN0YXRpYyB2b2lkIHNlbWFwaG9yZV9jb2Rl cGVuZGVuY3koaW50IGk5MTUpCiAJc3RydWN0IHsKIAkJaWd0X3NwaW5fdCAqeGNzLCAqcmNzOwog CX0gdGFza1syXTsKLQl1bnNpZ25lZCBpbnQgZW5naW5lOworCWNvbnN0IHN0cnVjdCBpbnRlbF9l eGVjdXRpb25fZW5naW5lMiAqZSwgKm90aGVyOwogCWludCBpOwogCiAJLyoKQEAgLTQyOSwxMyAr NDMzLDEzIEBAIHN0YXRpYyB2b2lkIHNlbWFwaG9yZV9jb2RlcGVuZGVuY3koaW50IGk5MTUpCiAJ ICovCiAKIAlpID0gMDsKLQlmb3JfZWFjaF9waHlzaWNhbF9lbmdpbmUoaTkxNSwgZW5naW5lKSB7 CisJX19mb3JfZWFjaF9waHlzaWNhbF9lbmdpbmUoaTkxNSwgZSkgewogCQl1aW50MzJfdCBjdHg7 CiAKLQkJaWYgKGVuZ2luZSA9PSBJOTE1X0VYRUNfUkVOREVSKQorCQlpZiAoZS0+Y2xhc3MgPT0g STkxNV9FTkdJTkVfQ0xBU1NfUkVOREVSKQogCQkJY29udGludWU7CiAKLQkJaWYgKCFnZW1fY2Fu X3N0b3JlX2R3b3JkKGk5MTUsIGVuZ2luZSkpCisJCWlmICghZ2VtX2NsYXNzX2Nhbl9zdG9yZV9k d29yZChpOTE1LCBlLT5jbGFzcykpCiAJCQljb250aW51ZTsKIAogCQljdHggPSBnZW1fY29udGV4 dF9jcmVhdGUoaTkxNSk7CkBAIC00NDMsMTYgKzQ0NywxOSBAQCBzdGF0aWMgdm9pZCBzZW1hcGhv cmVfY29kZXBlbmRlbmN5KGludCBpOTE1KQogCQl0YXNrW2ldLnhjcyA9CiAJCQlfX2lndF9zcGlu X25ldyhpOTE1LAogCQkJCSAgICAgICAuY3R4ID0gY3R4LAotCQkJCSAgICAgICAuZW5naW5lID0g ZW5naW5lLAorCQkJCSAgICAgICAuZW5naW5lID0gZS0+ZmxhZ3MsCiAJCQkJICAgICAgIC5mbGFn cyA9IElHVF9TUElOX1BPTExfUlVOKTsKIAkJaWd0X3NwaW5fYnVzeXdhaXRfdW50aWxfc3RhcnRl ZCh0YXNrW2ldLnhjcyk7CiAKLQkJLyogQ29tbW9uIHJjcyB0YXNrcyB3aWxsIGJlIHF1ZXVlZCBp biBGSUZPICovCi0JCXRhc2tbaV0ucmNzID0KLQkJCV9faWd0X3NwaW5fbmV3KGk5MTUsCi0JCQkJ ICAgICAgIC5jdHggPSBjdHgsCi0JCQkJICAgICAgIC5lbmdpbmUgPSBJOTE1X0VYRUNfUkVOREVS LAotCQkJCSAgICAgICAuZGVwZW5kZW5jeSA9IHRhc2tbaV0ueGNzLT5oYW5kbGUpOworCQlfX2Zv cl9lYWNoX3BoeXNpY2FsX2VuZ2luZShpOTE1LCBvdGhlcikgeworCQkJaWYgKG90aGVyLT5jbGFz cyA9PSBJOTE1X0VOR0lORV9DTEFTU19SRU5ERVIpCisJCQkJLyogQ29tbW9uIHJjcyB0YXNrcyB3 aWxsIGJlIHF1ZXVlZCBpbiBGSUZPICovCisJCQkJdGFza1tpXS5yY3MgPQorCQkJCQlfX2lndF9z cGluX25ldyhpOTE1LAorCQkJCQkgICAgICAgLmN0eCA9IGN0eCwKKwkJCQkJICAgICAgIC5lbmdp bmUgPSBvdGhlci0+ZmxhZ3MsIAorCQkJCQkgICAgICAgLmRlcGVuZGVuY3kgPSB0YXNrW2ldLnhj cy0+aGFuZGxlKTsKKwkJfQogCiAJCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgY3R4KTsKIApA QCAtNDgxLDcgKzQ4OCw3IEBAIHN0YXRpYyB2b2lkIHNlbWFwaG9yZV9yZXNvbHZlKGludCBpOTE1 KQogewogCWNvbnN0IHVpbnQzMl90IFNFTUFQSE9SRV9BRERSID0gNjQgPDwgMTA7CiAJdWludDMy X3Qgc2VtYXBob3JlLCBvdXRlciwgaW5uZXIsICpzZW1hOwotCXVuc2lnbmVkIGludCBlbmdpbmU7 CisJY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICplOwogCiAJLyoKIAkgKiBV c2Vyc3BhY2UgbWF5IHN1Ym1pdCBiYXRjaGVzIHRoYXQgd2FpdCB1cG9uIHVucmVzb2x2ZWQKQEAg LTUwMSw3ICs1MDgsNyBAQCBzdGF0aWMgdm9pZCBzZW1hcGhvcmVfcmVzb2x2ZShpbnQgaTkxNSkK IAlzZW1hcGhvcmUgPSBnZW1fY3JlYXRlKGk5MTUsIDQwOTYpOwogCXNlbWEgPSBnZW1fbW1hcF9f d2MoaTkxNSwgc2VtYXBob3JlLCAwLCA0MDk2LCBQUk9UX1dSSVRFKTsKIAotCWZvcl9lYWNoX3Bo eXNpY2FsX2VuZ2luZShpOTE1LCBlbmdpbmUpIHsKKwlfX2Zvcl9lYWNoX3BoeXNpY2FsX2VuZ2lu ZShpOTE1LCBlKSB7CiAJCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9ialszXTsK IAkJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBlYjsKIAkJdWludDMyX3QgaGFuZGxl LCBjYW5jZWw7CkBAIC01MDksMTAgKzUxNiwxMCBAQCBzdGF0aWMgdm9pZCBzZW1hcGhvcmVfcmVz b2x2ZShpbnQgaTkxNSkKIAkJaWd0X3NwaW5fdCAqc3BpbjsKIAkJaW50NjRfdCBwb2tlID0gMTsK IAotCQlpZiAoIWdlbV9jYW5fc3RvcmVfZHdvcmQoaTkxNSwgZW5naW5lKSkKKwkJaWYgKCFnZW1f Y2xhc3NfY2FuX3N0b3JlX2R3b3JkKGk5MTUsIGUtPmNsYXNzKSkKIAkJCWNvbnRpbnVlOwogCi0J CXNwaW4gPSBfX2lndF9zcGluX25ldyhpOTE1LCAuZW5naW5lID0gZW5naW5lKTsKKwkJc3BpbiA9 IF9faWd0X3NwaW5fbmV3KGk5MTUsIC5lbmdpbmUgPSBlLT5mbGFncyk7CiAJCWlndF9zcGluX2Vu ZChzcGluKTsgLyogd2UganVzdCB3YW50IGl0cyBhZGRyZXNzIGZvciBsYXRlciAqLwogCQlnZW1f c3luYyhpOTE1LCBzcGluLT5oYW5kbGUpOwogCQlpZ3Rfc3Bpbl9yZXNldChzcGluKTsKQEAgLTYw OSwyNiArNjE2LDI2IEBAIHN0YXRpYyB2b2lkIHNlbWFwaG9yZV9yZXNvbHZlKGludCBpOTE1KQog c3RhdGljIHZvaWQgc2VtYXBob3JlX25vc2tpcChpbnQgaTkxNSkKIHsKIAljb25zdCBpbnQgZ2Vu ID0gaW50ZWxfZ2VuKGludGVsX2dldF9kcm1fZGV2aWQoaTkxNSkpOwotCXVuc2lnbmVkIGludCBl bmdpbmUsIG90aGVyOworCWNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZW5n aW5lLCAqb3RoZXI7CiAJdWludDMyX3QgY3R4OwogCiAJaWd0X3JlcXVpcmUoZ2VuID49IDYpOyAv KiBNSV9TVE9SRV9EV09SRF9JTU0gY29udmVuaWVuY2UgKi8KIAogCWN0eCA9IGdlbV9jb250ZXh0 X2NyZWF0ZShpOTE1KTsKIAotCWZvcl9lYWNoX3BoeXNpY2FsX2VuZ2luZShpOTE1LCBlbmdpbmUp IHsKLQlmb3JfZWFjaF9waHlzaWNhbF9lbmdpbmUoaTkxNSwgb3RoZXIpIHsKKwlfX2Zvcl9lYWNo X3BoeXNpY2FsX2VuZ2luZShpOTE1LCBlbmdpbmUpIHsKKwlfX2Zvcl9lYWNoX3BoeXNpY2FsX2Vu Z2luZShpOTE1LCBvdGhlcikgewogCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNfb2JqZWN0MiBv YmpbM107CiAJCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZlcjIgZWI7CiAJCXVpbnQzMl90 IGhhbmRsZSwgKmNzLCAqbWFwOwogCQlpZ3Rfc3Bpbl90ICpjaGFpbiwgKnNwaW47CiAKLQkJaWYg KG90aGVyID09IGVuZ2luZSB8fCAhZ2VtX2Nhbl9zdG9yZV9kd29yZChpOTE1LCBvdGhlcikpCisJ CWlmIChvdGhlciA9PSBlbmdpbmUgfHwgIWdlbV9jbGFzc19jYW5fc3RvcmVfZHdvcmQoaTkxNSwg b3RoZXItPmNsYXNzKSkKIAkJCWNvbnRpbnVlOwogCi0JCWNoYWluID0gX19pZ3Rfc3Bpbl9uZXco aTkxNSwgLmVuZ2luZSA9IGVuZ2luZSk7CisJCWNoYWluID0gX19pZ3Rfc3Bpbl9uZXcoaTkxNSwg LmVuZ2luZSA9IGVuZ2luZS0+ZmxhZ3MpOwogCi0JCXNwaW4gPSBfX2lndF9zcGluX25ldyhpOTE1 LCAuZW5naW5lID0gb3RoZXIpOworCQlzcGluID0gX19pZ3Rfc3Bpbl9uZXcoaTkxNSwgLmVuZ2lu ZSA9IG90aGVyLT5mbGFncyk7CiAJCWlndF9zcGluX2VuZChzcGluKTsgLyogd2UganVzdCB3YW50 IGl0cyBhZGRyZXNzIGZvciBsYXRlciAqLwogCQlnZW1fc3luYyhpOTE1LCBzcGluLT5oYW5kbGUp OwogCQlpZ3Rfc3Bpbl9yZXNldChzcGluKTsKQEAgLTY2Miw3ICs2NjksNyBAQCBzdGF0aWMgdm9p ZCBzZW1hcGhvcmVfbm9za2lwKGludCBpOTE1KQogCQllYi5idWZmZXJfY291bnQgPSAzOwogCQll Yi5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihvYmopOwogCQllYi5yc3ZkMSA9IGN0eDsK LQkJZWIuZmxhZ3MgPSBvdGhlcjsKKwkJZWIuZmxhZ3MgPSBvdGhlci0+ZmxhZ3M7CiAJCWdlbV9l eGVjYnVmKGk5MTUsICZlYik7CiAKIAkJLyogcG9ydDE6IGRlcGVuZGVuY3kgY2hhaW4gZnJvbSBw b3J0MCAqLwpAQCAtNjczLDcgKzY4MCw3IEBAIHN0YXRpYyB2b2lkIHNlbWFwaG9yZV9ub3NraXAo aW50IGk5MTUpCiAJCW1lbXNldCgmZWIsIDAsIHNpemVvZihlYikpOwogCQllYi5idWZmZXJfY291 bnQgPSAyOwogCQllYi5idWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihvYmopOwotCQllYi5m bGFncyA9IG90aGVyOworCQllYi5mbGFncyA9IG90aGVyLT5mbGFnczsKIAkJZ2VtX2V4ZWNidWYo aTkxNSwgJmViKTsKIAogCQlpZ3Rfc3Bpbl9zZXRfdGltZW91dChjaGFpbiwgTlNFQ19QRVJfU0VD IC8gMTAwKTsKQEAgLTY4OCw3ICs2OTUsOCBAQCBzdGF0aWMgdm9pZCBzZW1hcGhvcmVfbm9za2lw KGludCBpOTE1KQogCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgY3R4KTsKIH0KIAotc3RhdGlj IHZvaWQgcmVvcmRlcihpbnQgZmQsIHVuc2lnbmVkIHJpbmcsIHVuc2lnbmVkIGZsYWdzKQorc3Rh dGljIHZvaWQgcmVvcmRlcihpbnQgZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5n aW5lMiAqZSwKKwkJICAgIHVuc2lnbmVkIGZsYWdzKQogI2RlZmluZSBFUVVBTCAxCiB7CiAJSUdU X0NPUktfSEFORExFKGNvcmspOwpAQCAtNzA4LDEwICs3MTYsMTAgQEAgc3RhdGljIHZvaWQgcmVv cmRlcihpbnQgZmQsIHVuc2lnbmVkIHJpbmcsIHVuc2lnbmVkIGZsYWdzKQogCS8qIFdlIGV4cGVj dCB0aGUgaGlnaCBwcmlvcml0eSBjb250ZXh0IHRvIGJlIGV4ZWN1dGVkIGZpcnN0LCBhbmQKIAkg KiBzbyB0aGUgZmluYWwgcmVzdWx0IHdpbGwgYmUgdmFsdWUgZnJvbSB0aGUgbG93IHByaW9yaXR5 IGNvbnRleHQuCiAJICovCi0Jc3RvcmVfZHdvcmQoZmQsIGN0eFtMT10sIHJpbmcsIHNjcmF0Y2gs IDAsIGN0eFtMT10sIHBsdWcsIDApOwotCXN0b3JlX2R3b3JkKGZkLCBjdHhbSEldLCByaW5nLCBz Y3JhdGNoLCAwLCBjdHhbSEldLCBwbHVnLCAwKTsKKwlzdG9yZV9kd29yZChmZCwgY3R4W0xPXSwg ZSwgc2NyYXRjaCwgMCwgY3R4W0xPXSwgcGx1ZywgMCk7CisJc3RvcmVfZHdvcmQoZmQsIGN0eFtI SV0sIGUsIHNjcmF0Y2gsIDAsIGN0eFtISV0sIHBsdWcsIDApOwogCi0JdW5wbHVnX3Nob3dfcXVl dWUoZmQsICZjb3JrLCByaW5nKTsKKwl1bnBsdWdfc2hvd19xdWV1ZShmZCwgJmNvcmssIGUpOwog CWdlbV9jbG9zZShmZCwgcGx1Zyk7CiAKIAlnZW1fY29udGV4dF9kZXN0cm95KGZkLCBjdHhbTE9d KTsKQEAgLTcyNiw3ICs3MzQsNyBAQCBzdGF0aWMgdm9pZCByZW9yZGVyKGludCBmZCwgdW5zaWdu ZWQgcmluZywgdW5zaWduZWQgZmxhZ3MpCiAJCWlndF9hc3NlcnRfZXFfdTMyKHJlc3VsdCwgY3R4 W0xPXSk7CiB9CiAKLXN0YXRpYyB2b2lkIHByb21vdGlvbihpbnQgZmQsIHVuc2lnbmVkIHJpbmcp CitzdGF0aWMgdm9pZCBwcm9tb3Rpb24oaW50IGZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0 aW9uX2VuZ2luZTIgKmUpCiB7CiAJSUdUX0NPUktfSEFORExFKGNvcmspOwogCXVpbnQzMl90IHJl c3VsdCwgZGVwOwpAQCAtNzUzLDE2ICs3NjEsMTYgQEAgc3RhdGljIHZvaWQgcHJvbW90aW9uKGlu dCBmZCwgdW5zaWduZWQgcmluZykKIAkgKiBmaWZvIHdvdWxkIGJlIE5PSVNFLCBMTywgSEkuCiAJ ICogc3RyaWN0IHByaW9yaXR5IHdvdWxkIGJlICBISSwgTk9JU0UsIExPCiAJICovCi0Jc3RvcmVf ZHdvcmQoZmQsIGN0eFtOT0lTRV0sIHJpbmcsIHJlc3VsdCwgMCwgY3R4W05PSVNFXSwgcGx1Zywg MCk7Ci0Jc3RvcmVfZHdvcmQoZmQsIGN0eFtMT10sIHJpbmcsIHJlc3VsdCwgMCwgY3R4W0xPXSwg cGx1ZywgMCk7CisJc3RvcmVfZHdvcmQoZmQsIGN0eFtOT0lTRV0sIGUsIHJlc3VsdCwgMCwgY3R4 W05PSVNFXSwgcGx1ZywgMCk7CisJc3RvcmVfZHdvcmQoZmQsIGN0eFtMT10sIGUsIHJlc3VsdCwg MCwgY3R4W0xPXSwgcGx1ZywgMCk7CiAKIAkvKiBsaW5rIExPIDwtPiBISSB2aWEgYSBkZXBlbmRl bmN5IG9uIGFub3RoZXIgYnVmZmVyICovCi0Jc3RvcmVfZHdvcmQoZmQsIGN0eFtMT10sIHJpbmcs IGRlcCwgMCwgY3R4W0xPXSwgMCwgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OKTsKLQlzdG9y ZV9kd29yZChmZCwgY3R4W0hJXSwgcmluZywgZGVwLCAwLCBjdHhbSEldLCAwLCAwKTsKKwlzdG9y ZV9kd29yZChmZCwgY3R4W0xPXSwgZSwgZGVwLCAwLCBjdHhbTE9dLCAwLCBJOTE1X0dFTV9ET01B SU5fSU5TVFJVQ1RJT04pOworCXN0b3JlX2R3b3JkKGZkLCBjdHhbSEldLCBlLCBkZXAsIDAsIGN0 eFtISV0sIDAsIDApOwogCi0Jc3RvcmVfZHdvcmQoZmQsIGN0eFtISV0sIHJpbmcsIHJlc3VsdCwg MCwgY3R4W0hJXSwgMCwgMCk7CisJc3RvcmVfZHdvcmQoZmQsIGN0eFtISV0sIGUsIHJlc3VsdCwg MCwgY3R4W0hJXSwgMCwgMCk7CiAKLQl1bnBsdWdfc2hvd19xdWV1ZShmZCwgJmNvcmssIHJpbmcp OworCXVucGx1Z19zaG93X3F1ZXVlKGZkLCAmY29yaywgZSk7CiAJZ2VtX2Nsb3NlKGZkLCBwbHVn KTsKIAogCWdlbV9jb250ZXh0X2Rlc3Ryb3koZmQsIGN0eFtOT0lTRV0pOwpAQCAtNzgxLDcgKzc4 OSw4IEBAIHN0YXRpYyB2b2lkIHByb21vdGlvbihpbnQgZmQsIHVuc2lnbmVkIHJpbmcpCiAKICNk ZWZpbmUgTkVXX0NUWCAoMHgxIDw8IDApCiAjZGVmaW5lIEhBTkdfTFAgKDB4MSA8PCAxKQotc3Rh dGljIHZvaWQgcHJlZW1wdChpbnQgZmQsIHVuc2lnbmVkIHJpbmcsIHVuc2lnbmVkIGZsYWdzKQor c3RhdGljIHZvaWQgcHJlZW1wdChpbnQgZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25f ZW5naW5lMiAqZSwKKwkJICAgIHVuc2lnbmVkIGZsYWdzKQogewogCXVpbnQzMl90IHJlc3VsdCA9 IGdlbV9jcmVhdGUoZmQsIDQwOTYpOwogCXVpbnQzMl90IHJlc3VsdF9yZWFkOwpAQCAtNzk2LDcg KzgwNSw3IEBAIHN0YXRpYyB2b2lkIHByZWVtcHQoaW50IGZkLCB1bnNpZ25lZCByaW5nLCB1bnNp Z25lZCBmbGFncykKIAlnZW1fY29udGV4dF9zZXRfcHJpb3JpdHkoZmQsIGN0eFtISV0sIE1BWF9Q UklPKTsKIAogCWlmIChmbGFncyAmIEhBTkdfTFApCi0JCWhhbmcgPSBpZ3RfaGFuZ19jdHgoZmQs IGN0eFtMT10sIHJpbmcsIDApOworCQloYW5nID0gaWd0X2hhbmdfY3R4KGZkLCBjdHhbTE9dLCBl LT5mbGFncywgMCk7CiAKIAlmb3IgKGludCBuID0gMDsgbiA8IEFSUkFZX1NJWkUoc3Bpbik7IG4r KykgewogCQlpZiAoZmxhZ3MgJiBORVdfQ1RYKSB7CkBAIC04MDYsMTAgKzgxNSwxMCBAQCBzdGF0 aWMgdm9pZCBwcmVlbXB0KGludCBmZCwgdW5zaWduZWQgcmluZywgdW5zaWduZWQgZmxhZ3MpCiAJ CX0KIAkJc3BpbltuXSA9IF9faWd0X3NwaW5fbmV3KGZkLAogCQkJCQkgLmN0eCA9IGN0eFtMT10s Ci0JCQkJCSAuZW5naW5lID0gcmluZyk7CisJCQkJCSAuZW5naW5lID0gZS0+ZmxhZ3MpOwogCQlp Z3RfZGVidWcoInNwaW5bJWRdLmhhbmRsZT0lZFxuIiwgbiwgc3BpbltuXS0+aGFuZGxlKTsKIAot CQlzdG9yZV9kd29yZChmZCwgY3R4W0hJXSwgcmluZywgcmVzdWx0LCAwLCBuICsgMSwgMCwgSTkx NV9HRU1fRE9NQUlOX1JFTkRFUik7CisJCXN0b3JlX2R3b3JkKGZkLCBjdHhbSEldLCBlLCByZXN1 bHQsIDAsIG4gKyAxLCAwLCBJOTE1X0dFTV9ET01BSU5fUkVOREVSKTsKIAogCQlyZXN1bHRfcmVh ZCA9IF9fc3luY19yZWFkX3UzMihmZCwgcmVzdWx0LCAwKTsKIAkJaWd0X2Fzc2VydF9lcV91MzIo cmVzdWx0X3JlYWQsIG4gKyAxKTsKQEAgLTgzMywyMSArODQyLDIxIEBAIHN0YXRpYyB2b2lkIHBy ZWVtcHQoaW50IGZkLCB1bnNpZ25lZCByaW5nLCB1bnNpZ25lZCBmbGFncykKIAogc3RhdGljIGln dF9zcGluX3QgKl9fbm9pc2UoaW50IGZkLCB1aW50MzJfdCBjdHgsIGludCBwcmlvLCBpZ3Rfc3Bp bl90ICpzcGluKQogewotCXVuc2lnbmVkIG90aGVyOworCWNvbnN0IHN0cnVjdCBpbnRlbF9leGVj dXRpb25fZW5naW5lMiAqb3RoZXI7CiAKIAlnZW1fY29udGV4dF9zZXRfcHJpb3JpdHkoZmQsIGN0 eCwgcHJpbyk7CiAKLQlmb3JfZWFjaF9waHlzaWNhbF9lbmdpbmUoZmQsIG90aGVyKSB7CisJX19m b3JfZWFjaF9waHlzaWNhbF9lbmdpbmUoZmQsIG90aGVyKSB7CiAJCWlmIChzcGluID09IE5VTEwp IHsKIAkJCXNwaW4gPSBfX2lndF9zcGluX25ldyhmZCwKIAkJCQkJICAgICAgLmN0eCA9IGN0eCwK LQkJCQkJICAgICAgLmVuZ2luZSA9IG90aGVyKTsKKwkJCQkJICAgICAgLmVuZ2luZSA9IG90aGVy LT5mbGFncyk7CiAJCX0gZWxzZSB7CiAJCQlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIy IGViID0gewogCQkJCS5idWZmZXJfY291bnQgPSAxLAogCQkJCS5idWZmZXJzX3B0ciA9IHRvX3Vz ZXJfcG9pbnRlcigmc3Bpbi0+b2JqW0lHVF9TUElOX0JBVENIXSksCiAJCQkJLnJzdmQxID0gY3R4 LAotCQkJCS5mbGFncyA9IG90aGVyLAorCQkJCS5mbGFncyA9IG90aGVyLT5mbGFncywKIAkJCX07 CiAJCQlnZW1fZXhlY2J1ZihmZCwgJmViKTsKIAkJfQpAQCAtODU4LDIxICs4NjcsMjMgQEAgc3Rh dGljIGlndF9zcGluX3QgKl9fbm9pc2UoaW50IGZkLCB1aW50MzJfdCBjdHgsIGludCBwcmlvLCBp Z3Rfc3Bpbl90ICpzcGluKQogCiBzdGF0aWMgdm9pZCBfX3ByZWVtcHRfb3RoZXIoaW50IGZkLAog CQkJICAgIHVpbnQzMl90ICpjdHgsCi0JCQkgICAgdW5zaWduZWQgaW50IHRhcmdldCwgdW5zaWdu ZWQgaW50IHByaW1hcnksCisJCQkgICAgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdp bmUyICp0YXJnZXRfZSwKKwkJCSAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2lu ZTIgKnByaW1hcnlfZSwKIAkJCSAgICB1bnNpZ25lZCBmbGFncykKIHsKIAl1aW50MzJfdCByZXN1 bHQgPSBnZW1fY3JlYXRlKGZkLCA0MDk2KTsKIAl1aW50MzJfdCByZXN1bHRfcmVhZFs0MDk2IC8g c2l6ZW9mKHVpbnQzMl90KV07Ci0JdW5zaWduZWQgaW50IG4sIGksIG90aGVyOworCXVuc2lnbmVk IGludCBuLCBpOworCWNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqb3RoZXI7 CiAKIAluID0gMDsKLQlzdG9yZV9kd29yZChmZCwgY3R4W0xPXSwgcHJpbWFyeSwKKwlzdG9yZV9k d29yZChmZCwgY3R4W0xPXSwgcHJpbWFyeV9lLAogCQkgICAgcmVzdWx0LCAobiArIDEpKnNpemVv Zih1aW50MzJfdCksIG4gKyAxLAogCQkgICAgMCwgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUik7CiAJ bisrOwogCiAJaWYgKGZsYWdzICYgQ0hBSU4pIHsKLQkJZm9yX2VhY2hfcGh5c2ljYWxfZW5naW5l KGZkLCBvdGhlcikgeworCQlfX2Zvcl9lYWNoX3BoeXNpY2FsX2VuZ2luZShmZCwgb3RoZXIpIHsK IAkJCXN0b3JlX2R3b3JkKGZkLCBjdHhbTE9dLCBvdGhlciwKIAkJCQkgICAgcmVzdWx0LCAobiAr IDEpKnNpemVvZih1aW50MzJfdCksIG4gKyAxLAogCQkJCSAgICAwLCBJOTE1X0dFTV9ET01BSU5f UkVOREVSKTsKQEAgLTg4MCw3ICs4OTEsNyBAQCBzdGF0aWMgdm9pZCBfX3ByZWVtcHRfb3RoZXIo aW50IGZkLAogCQl9CiAJfQogCi0Jc3RvcmVfZHdvcmQoZmQsIGN0eFtISV0sIHRhcmdldCwKKwlz dG9yZV9kd29yZChmZCwgY3R4W0hJXSwgdGFyZ2V0X2UsCiAJCSAgICByZXN1bHQsIChuICsgMSkq c2l6ZW9mKHVpbnQzMl90KSwgbiArIDEsCiAJCSAgICAwLCBJOTE1X0dFTV9ET01BSU5fUkVOREVS KTsKIApAQCAtODk2LDkgKzkwNywxMCBAQCBzdGF0aWMgdm9pZCBfX3ByZWVtcHRfb3RoZXIoaW50 IGZkLAogCWdlbV9jbG9zZShmZCwgcmVzdWx0KTsKIH0KIAotc3RhdGljIHZvaWQgcHJlZW1wdF9v dGhlcihpbnQgZmQsIHVuc2lnbmVkIHJpbmcsIHVuc2lnbmVkIGludCBmbGFncykKK3N0YXRpYyB2 b2lkIHByZWVtcHRfb3RoZXIoaW50IGZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2Vu Z2luZTIgKmUsCisJCQkgIHVuc2lnbmVkIGludCBmbGFncykKIHsKLQl1bnNpZ25lZCBpbnQgcHJp bWFyeTsKKwljb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKnByaW1hcnk7CiAJ aWd0X3NwaW5fdCAqc3BpbiA9IE5VTEw7CiAJdWludDMyX3QgY3R4WzNdOwogCkBAIC05MjEsMTAg KzkzMyw5IEBAIHN0YXRpYyB2b2lkIHByZWVtcHRfb3RoZXIoaW50IGZkLCB1bnNpZ25lZCByaW5n LCB1bnNpZ25lZCBpbnQgZmxhZ3MpCiAJY3R4W0hJXSA9IGdlbV9jb250ZXh0X2NyZWF0ZShmZCk7 CiAJZ2VtX2NvbnRleHRfc2V0X3ByaW9yaXR5KGZkLCBjdHhbSEldLCBNQVhfUFJJTyk7CiAKLQlm b3JfZWFjaF9waHlzaWNhbF9lbmdpbmUoZmQsIHByaW1hcnkpIHsKLQkJaWd0X2RlYnVnKCJQcmlt YXJ5IGVuZ2luZTogJXNcbiIsIGVfXy0+bmFtZSk7Ci0JCV9fcHJlZW1wdF9vdGhlcihmZCwgY3R4 LCByaW5nLCBwcmltYXJ5LCBmbGFncyk7Ci0KKwlfX2Zvcl9lYWNoX3BoeXNpY2FsX2VuZ2luZShm ZCwgcHJpbWFyeSkgeworCQlpZ3RfZGVidWcoIlByaW1hcnkgZW5naW5lOiAlc1xuIiwgZS0+bmFt ZSk7CisJCV9fcHJlZW1wdF9vdGhlcihmZCwgY3R4LCBlLCBwcmltYXJ5LCBmbGFncyk7CiAJfQog CiAJaWd0X2Fzc2VydChnZW1fYm9fYnVzeShmZCwgc3Bpbi0+aGFuZGxlKSk7CkBAIC05MzYsMTMg Kzk0NywxNSBAQCBzdGF0aWMgdm9pZCBwcmVlbXB0X290aGVyKGludCBmZCwgdW5zaWduZWQgcmlu ZywgdW5zaWduZWQgaW50IGZsYWdzKQogfQogCiBzdGF0aWMgdm9pZCBfX3ByZWVtcHRfcXVldWUo aW50IGZkLAotCQkJICAgIHVuc2lnbmVkIHRhcmdldCwgdW5zaWduZWQgcHJpbWFyeSwKKwkJCSAg ICBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKnRhcmdldF9lLAorCQkJICAg IGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqcHJpbWFyeV9lLAogCQkJICAg IHVuc2lnbmVkIGRlcHRoLCB1bnNpZ25lZCBmbGFncykKIHsKIAl1aW50MzJfdCByZXN1bHQgPSBn ZW1fY3JlYXRlKGZkLCA0MDk2KTsKIAl1aW50MzJfdCByZXN1bHRfcmVhZFs0MDk2IC8gc2l6ZW9m KHVpbnQzMl90KV07CiAJaWd0X3NwaW5fdCAqYWJvdmUgPSBOVUxMLCAqYmVsb3cgPSBOVUxMOwot CXVuc2lnbmVkIGludCBvdGhlciwgbiwgaTsKKwl1bnNpZ25lZCBpbnQgbiwgaTsKKwljb25zdCBz dHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKm90aGVyOwogCWludCBwcmlvID0gTUFYX1BS SU87CiAJdWludDMyX3QgY3R4WzNdID0gewogCQlnZW1fY29udGV4dF9jcmVhdGUoZmQpLApAQCAt OTcxLDEzICs5ODQsMTMgQEAgc3RhdGljIHZvaWQgX19wcmVlbXB0X3F1ZXVlKGludCBmZCwKIAln ZW1fY29udGV4dF9zZXRfcHJpb3JpdHkoZmQsIGN0eFtMT10sIHByaW8tLSk7CiAKIAluID0gMDsK LQlzdG9yZV9kd29yZChmZCwgY3R4W0xPXSwgcHJpbWFyeSwKKwlzdG9yZV9kd29yZChmZCwgY3R4 W0xPXSwgcHJpbWFyeV9lLAogCQkgICAgcmVzdWx0LCAobiArIDEpKnNpemVvZih1aW50MzJfdCks IG4gKyAxLAogCQkgICAgMCwgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUik7CiAJbisrOwogCiAJaWYg KGZsYWdzICYgQ0hBSU4pIHsKLQkJZm9yX2VhY2hfcGh5c2ljYWxfZW5naW5lKGZkLCBvdGhlcikg eworCQlfX2Zvcl9lYWNoX3BoeXNpY2FsX2VuZ2luZShmZCwgb3RoZXIpIHsKIAkJCXN0b3JlX2R3 b3JkKGZkLCBjdHhbTE9dLCBvdGhlciwKIAkJCQkgICAgcmVzdWx0LCAobiArIDEpKnNpemVvZih1 aW50MzJfdCksIG4gKyAxLAogCQkJCSAgICAwLCBJOTE1X0dFTV9ET01BSU5fUkVOREVSKTsKQEAg LTk4NSw3ICs5OTgsNyBAQCBzdGF0aWMgdm9pZCBfX3ByZWVtcHRfcXVldWUoaW50IGZkLAogCQl9 CiAJfQogCi0Jc3RvcmVfZHdvcmQoZmQsIGN0eFtISV0sIHRhcmdldCwKKwlzdG9yZV9kd29yZChm ZCwgY3R4W0hJXSwgdGFyZ2V0X2UsCiAJCSAgICByZXN1bHQsIChuICsgMSkqc2l6ZW9mKHVpbnQz Ml90KSwgbiArIDEsCiAJCSAgICAwLCBJOTE1X0dFTV9ET01BSU5fUkVOREVSKTsKIApAQCAtMTAx NiwyMiArMTAyOSwyMyBAQCBzdGF0aWMgdm9pZCBfX3ByZWVtcHRfcXVldWUoaW50IGZkLAogCWdl bV9jbG9zZShmZCwgcmVzdWx0KTsKIH0KIAotc3RhdGljIHZvaWQgcHJlZW1wdF9xdWV1ZShpbnQg ZmQsIHVuc2lnbmVkIHJpbmcsIHVuc2lnbmVkIGludCBmbGFncykKK3N0YXRpYyB2b2lkIHByZWVt cHRfcXVldWUoaW50IGZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmUs CisJCQkgIHVuc2lnbmVkIGludCBmbGFncykKIHsKLQl1bnNpZ25lZCBvdGhlcjsKKwljb25zdCBz dHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKm90aGVyOwogCi0JZm9yX2VhY2hfcGh5c2lj YWxfZW5naW5lKGZkLCBvdGhlcikgeworCV9fZm9yX2VhY2hfcGh5c2ljYWxfZW5naW5lKGZkLCBv dGhlcikgewogCQlmb3IgKHVuc2lnbmVkIGRlcHRoID0gMDsgZGVwdGggPD0gTUFYX0VMU1BfUUxF TjsgZGVwdGgrKykKLQkJCV9fcHJlZW1wdF9xdWV1ZShmZCwgcmluZywgb3RoZXIsIGRlcHRoLCBm bGFncyk7CisJCQlfX3ByZWVtcHRfcXVldWUoZmQsIGUsIG90aGVyLCBkZXB0aCwgZmxhZ3MpOwog CX0KIH0KIAotc3RhdGljIHZvaWQgcHJlZW1wdF9zZWxmKGludCBmZCwgdW5zaWduZWQgcmluZykK K3N0YXRpYyB2b2lkIHByZWVtcHRfc2VsZihpbnQgZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVj dXRpb25fZW5naW5lMiAqZSkKIHsKIAl1aW50MzJfdCByZXN1bHQgPSBnZW1fY3JlYXRlKGZkLCA0 MDk2KTsKIAl1aW50MzJfdCByZXN1bHRfcmVhZFs0MDk2IC8gc2l6ZW9mKHVpbnQzMl90KV07CiAJ aWd0X3NwaW5fdCAqc3BpbltNQVhfRUxTUF9RTEVOXTsKLQl1bnNpZ25lZCBpbnQgb3RoZXI7CisJ Y29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUyICpvdGhlcjsKIAl1bnNpZ25lZCBp bnQgbiwgaTsKIAl1aW50MzJfdCBjdHhbM107CiAKQEAgLTEwNDksMTcgKzEwNjMsMTcgQEAgc3Rh dGljIHZvaWQgcHJlZW1wdF9zZWxmKGludCBmZCwgdW5zaWduZWQgcmluZykKIAogCW4gPSAwOwog CWdlbV9jb250ZXh0X3NldF9wcmlvcml0eShmZCwgY3R4W0hJXSwgTUlOX1BSSU8pOwotCWZvcl9l YWNoX3BoeXNpY2FsX2VuZ2luZShmZCwgb3RoZXIpIHsKKwlfX2Zvcl9lYWNoX3BoeXNpY2FsX2Vu Z2luZShmZCwgb3RoZXIpIHsKIAkJc3BpbltuXSA9IF9faWd0X3NwaW5fbmV3KGZkLAogCQkJCQkg LmN0eCA9IGN0eFtOT0lTRV0sCi0JCQkJCSAuZW5naW5lID0gb3RoZXIpOworCQkJCQkgLmVuZ2lu ZSA9IG90aGVyLT5mbGFncyk7CiAJCXN0b3JlX2R3b3JkKGZkLCBjdHhbSEldLCBvdGhlciwKIAkJ CSAgICByZXN1bHQsIChuICsgMSkqc2l6ZW9mKHVpbnQzMl90KSwgbiArIDEsCiAJCQkgICAgMCwg STkxNV9HRU1fRE9NQUlOX1JFTkRFUik7CiAJCW4rKzsKIAl9CiAJZ2VtX2NvbnRleHRfc2V0X3By aW9yaXR5KGZkLCBjdHhbSEldLCBNQVhfUFJJTyk7Ci0Jc3RvcmVfZHdvcmQoZmQsIGN0eFtISV0s IHJpbmcsCisJc3RvcmVfZHdvcmQoZmQsIGN0eFtISV0sIGUsCiAJCSAgICByZXN1bHQsIChuICsg MSkqc2l6ZW9mKHVpbnQzMl90KSwgbiArIDEsCiAJCSAgICAwLCBJOTE1X0dFTV9ET01BSU5fUkVO REVSKTsKIApAQCAtMTA4Miw3ICsxMDk2LDcgQEAgc3RhdGljIHZvaWQgcHJlZW1wdF9zZWxmKGlu dCBmZCwgdW5zaWduZWQgcmluZykKIAlnZW1fY2xvc2UoZmQsIHJlc3VsdCk7CiB9CiAKLXN0YXRp YyB2b2lkIHByZWVtcHRpdmVfaGFuZyhpbnQgZmQsIHVuc2lnbmVkIHJpbmcpCitzdGF0aWMgdm9p ZCBwcmVlbXB0aXZlX2hhbmcoaW50IGZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2Vu Z2luZTIgKmUpCiB7CiAJaWd0X3NwaW5fdCAqc3BpbltNQVhfRUxTUF9RTEVOXTsKIAlpZ3RfaGFu Z190IGhhbmc7CkBAIC0xMDk3LDEyICsxMTExLDEyIEBAIHN0YXRpYyB2b2lkIHByZWVtcHRpdmVf aGFuZyhpbnQgZmQsIHVuc2lnbmVkIHJpbmcpCiAKIAkJc3BpbltuXSA9IF9faWd0X3NwaW5fbmV3 KGZkLAogCQkJCQkgLmN0eCA9IGN0eFtMT10sCi0JCQkJCSAuZW5naW5lID0gcmluZyk7CisJCQkJ CSAuZW5naW5lID0gZS0+ZmxhZ3MpOwogCiAJCWdlbV9jb250ZXh0X2Rlc3Ryb3koZmQsIGN0eFtM T10pOwogCX0KIAotCWhhbmcgPSBpZ3RfaGFuZ19jdHgoZmQsIGN0eFtISV0sIHJpbmcsIDApOwor CWhhbmcgPSBpZ3RfaGFuZ19jdHgoZmQsIGN0eFtISV0sIGUtPmZsYWdzLCAwKTsKIAlpZ3RfcG9z dF9oYW5nX3JpbmcoZmQsIGhhbmcpOwogCiAJZm9yIChpbnQgbiA9IDA7IG4gPCBBUlJBWV9TSVpF KHNwaW4pOyBuKyspIHsKQEAgLTExMTcsNyArMTEzMSw3IEBAIHN0YXRpYyB2b2lkIHByZWVtcHRp dmVfaGFuZyhpbnQgZmQsIHVuc2lnbmVkIHJpbmcpCiAJZ2VtX2NvbnRleHRfZGVzdHJveShmZCwg Y3R4W0hJXSk7CiB9CiAKLXN0YXRpYyB2b2lkIGRlZXAoaW50IGZkLCB1bnNpZ25lZCByaW5nKQor c3RhdGljIHZvaWQgZGVlcChpbnQgZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5n aW5lMiAqZSkKIHsKICNkZWZpbmUgWFMgOAogCWNvbnN0IHVuc2lnbmVkIGludCBtYXhfcmVxID0g TUFYX1BSSU8gLSBNSU5fUFJJTzsKQEAgLTExMzgsMTAgKzExNTIsMTAgQEAgc3RhdGljIHZvaWQg ZGVlcChpbnQgZmQsIHVuc2lnbmVkIHJpbmcpCiAJCWN0eFtuXSA9IGdlbV9jb250ZXh0X2NyZWF0 ZShmZCk7CiAJfQogCi0JbnJlcSA9IGdlbV9tZWFzdXJlX3JpbmdfaW5mbGlnaHQoZmQsIHJpbmcs IDApIC8gKDQgKiBYUykgKiBNQVhfQ09OVEVYVFM7CisJbnJlcSA9IGdlbV9tZWFzdXJlX3Jpbmdf aW5mbGlnaHQoZmQsIGUtPmZsYWdzLCAwKSAvICg0ICogWFMpICogTUFYX0NPTlRFWFRTOwogCWlm IChucmVxID4gbWF4X3JlcSkKIAkJbnJlcSA9IG1heF9yZXE7Ci0JaWd0X2luZm8oIlVzaW5nICVk IHJlcXVlc3RzIChwcmlvIHJhbmdlICVkKVxuIiwgbnJlcSwgbWF4X3JlcSk7CisJCWlndF9pbmZv KCJVc2luZyAlZCByZXF1ZXN0cyAocHJpbyByYW5nZSAlZClcbiIsIG5yZXEsIG1heF9yZXEpOwog CiAJcmVzdWx0ID0gZ2VtX2NyZWF0ZShmZCwgc2l6ZSk7CiAJZm9yIChpbnQgbSA9IDA7IG0gPCBY UzsgbSArKykKQEAgLTExNjMsNyArMTE3Nyw3IEBAIHN0YXRpYyB2b2lkIGRlZXAoaW50IGZkLCB1 bnNpZ25lZCByaW5nKQogCQltZW1zZXQoJmV4ZWNidWYsIDAsIHNpemVvZihleGVjYnVmKSk7CiAJ CWV4ZWNidWYuYnVmZmVyc19wdHIgPSB0b191c2VyX3BvaW50ZXIob2JqKTsKIAkJZXhlY2J1Zi5i dWZmZXJfY291bnQgPSBYUyArIDI7Ci0JCWV4ZWNidWYuZmxhZ3MgPSByaW5nOworCQlleGVjYnVm LmZsYWdzID0gZS0+ZmxhZ3M7CiAJCWZvciAobiA9IDA7IG4gPCBNQVhfQ09OVEVYVFM7IG4rKykg ewogCQkJZXhlY2J1Zi5yc3ZkMSA9IGN0eFtuXTsKIAkJCWdlbV9leGVjYnVmKGZkLCAmZXhlY2J1 Zik7CkBAIC0xMTgyLDcgKzExOTYsNyBAQCBzdGF0aWMgdm9pZCBkZWVwKGludCBmZCwgdW5zaWdu ZWQgcmluZykKIAkJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVmZmVyMiBlYiA9IHsKIAkJCS5i dWZmZXJzX3B0ciA9IHRvX3VzZXJfcG9pbnRlcihvYmopLAogCQkJLmJ1ZmZlcl9jb3VudCA9IDMs Ci0JCQkuZmxhZ3MgPSByaW5nIHwgKGdlbiA8IDYgPyBJOTE1X0VYRUNfU0VDVVJFIDogMCksCisJ CQkuZmxhZ3MgPSBlLT5mbGFncyB8IChnZW4gPCA2ID8gSTkxNV9FWEVDX1NFQ1VSRSA6IDApLAog CQkJLnJzdmQxID0gY3R4W24gJSBNQVhfQ09OVEVYVFNdLAogCQl9OwogCQl1aW50MzJfdCBiYXRj aFsxNl07CkBAIC0xMjM1LDE1ICsxMjQ5LDE1IEBAIHN0YXRpYyB2b2lkIGRlZXAoaW50IGZkLCB1 bnNpZ25lZCByaW5nKQogCQlnZW1fY29udGV4dF9zZXRfcHJpb3JpdHkoZmQsIGNvbnRleHQsIE1B WF9QUklPIC0gbnJlcSArIG4pOwogCiAJCWZvciAoaW50IG0gPSAwOyBtIDwgWFM7IG0rKykgewot CQkJc3RvcmVfZHdvcmQoZmQsIGNvbnRleHQsIHJpbmcsIHJlc3VsdCwgNCpuLCBjb250ZXh0LCBk ZXBbbV0sIDApOwotCQkJc3RvcmVfZHdvcmQoZmQsIGNvbnRleHQsIHJpbmcsIHJlc3VsdCwgNCpt LCBjb250ZXh0LCAwLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04pOworCQkJc3RvcmVfZHdv cmQoZmQsIGNvbnRleHQsIGUsIHJlc3VsdCwgNCpuLCBjb250ZXh0LCBkZXBbbV0sIDApOworCQkJ c3RvcmVfZHdvcmQoZmQsIGNvbnRleHQsIGUsIHJlc3VsdCwgNCptLCBjb250ZXh0LCAwLCBJOTE1 X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04pOwogCQl9CiAJCWV4cGVjdGVkID0gY29udGV4dDsKIAl9 CiAJaWd0X2luZm8oIlNlY29uZCBkZXB0cmVlOiAlZCByZXF1ZXN0cyBbJS4zZnNdXG4iLAogCQkg biAqIFhTLCAxZS05KmlndF9uc2VjX2VsYXBzZWQoJnR2KSk7CiAKLQl1bnBsdWdfc2hvd19xdWV1 ZShmZCwgJmNvcmssIHJpbmcpOworCXVucGx1Z19zaG93X3F1ZXVlKGZkLCAmY29yaywgZSk7CiAJ Z2VtX2Nsb3NlKGZkLCBwbHVnKTsKIAlpZ3RfcmVxdWlyZShleHBlY3RlZCk7IC8qIHRvbyBzbG93 ICovCiAKQEAgLTEyODEsMTAgKzEyOTUsMTAgQEAgc3RhdGljIGludCBfX2V4ZWNidWYoaW50IGZk LCBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZmZXIyICpleGVjYnVmKQogCXJldHVybiBlcnI7 CiB9CiAKLXN0YXRpYyB2b2lkIHdpZGUoaW50IGZkLCB1bnNpZ25lZCByaW5nKQorc3RhdGljIHZv aWQgd2lkZShpbnQgZmQsIGNvbnN0IHN0cnVjdCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSkK IHsKIAlzdHJ1Y3QgdGltZXNwZWMgdHYgPSB7fTsKLQl1bnNpZ25lZCBpbnQgcmluZ19zaXplID0g Z2VtX21lYXN1cmVfcmluZ19pbmZsaWdodChmZCwgcmluZywgTUVBU1VSRV9SSU5HX05FV19DVFgp OworCXVuc2lnbmVkIGludCByaW5nX3NpemUgPSBnZW1fbWVhc3VyZV9yaW5nX2luZmxpZ2h0KGZk LCBlLT5mbGFncywgTUVBU1VSRV9SSU5HX05FV19DVFgpOwogCiAJSUdUX0NPUktfSEFORExFKGNv cmspOwogCXVpbnQzMl90IHBsdWc7CkBAIC0xMzA2LDEzICsxMzIwLDEzIEBAIHN0YXRpYyB2b2lk IHdpZGUoaW50IGZkLCB1bnNpZ25lZCByaW5nKQogCSAgICAgaWd0X3NlY29uZHNfZWxhcHNlZCgm dHYpIDwgNSAmJiBjb3VudCA8IHJpbmdfc2l6ZTsKIAkgICAgIGNvdW50KyspIHsKIAkJZm9yIChp bnQgbiA9IDA7IG4gPCBNQVhfQ09OVEVYVFM7IG4rKykgewotCQkJc3RvcmVfZHdvcmQoZmQsIGN0 eFtuXSwgcmluZywgcmVzdWx0LCA0Km4sIGN0eFtuXSwgcGx1ZywgSTkxNV9HRU1fRE9NQUlOX0lO U1RSVUNUSU9OKTsKKwkJCXN0b3JlX2R3b3JkKGZkLCBjdHhbbl0sIGUsIHJlc3VsdCwgNCpuLCBj dHhbbl0sIHBsdWcsIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTik7CiAJCX0KIAl9CiAJaWd0 X2luZm8oIlN1Ym1pdHRlZCAlZCByZXF1ZXN0cyBvdmVyICVkIGNvbnRleHRzIGluICUuMWZtc1xu IiwKIAkJIGNvdW50LCBNQVhfQ09OVEVYVFMsIGlndF9uc2VjX2VsYXBzZWQoJnR2KSAqIDFlLTYp OwogCi0JdW5wbHVnX3Nob3dfcXVldWUoZmQsICZjb3JrLCByaW5nKTsKKwl1bnBsdWdfc2hvd19x dWV1ZShmZCwgJmNvcmssIGUpOwogCWdlbV9jbG9zZShmZCwgcGx1Zyk7CiAKIAlmb3IgKGludCBu ID0gMDsgbiA8IE1BWF9DT05URVhUUzsgbisrKQpAQCAtMTMyNiwxNCArMTM0MCwxNCBAQCBzdGF0 aWMgdm9pZCB3aWRlKGludCBmZCwgdW5zaWduZWQgcmluZykKIAlmcmVlKGN0eCk7CiB9CiAKLXN0 YXRpYyB2b2lkIHJlb3JkZXJfd2lkZShpbnQgZmQsIHVuc2lnbmVkIHJpbmcpCitzdGF0aWMgdm9p ZCByZW9yZGVyX3dpZGUoaW50IGZkLCBjb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2lu ZTIgKmUpCiB7CiAJY29uc3QgaW50IGdlbiA9IGludGVsX2dlbihpbnRlbF9nZXRfZHJtX2Rldmlk KGZkKSk7CiAJc3RydWN0IGRybV9pOTE1X2dlbV9yZWxvY2F0aW9uX2VudHJ5IHJlbG9jOwogCXN0 cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIG9ialszXTsKIAlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2V4ZWNidWZmZXIyIGV4ZWNidWY7CiAJc3RydWN0IHRpbWVzcGVjIHR2ID0ge307Ci0JdW5z aWduZWQgaW50IHJpbmdfc2l6ZSA9IGdlbV9tZWFzdXJlX3JpbmdfaW5mbGlnaHQoZmQsIHJpbmcs IE1FQVNVUkVfUklOR19ORVdfQ1RYKTsKKwl1bnNpZ25lZCBpbnQgcmluZ19zaXplID0gZ2VtX21l YXN1cmVfcmluZ19pbmZsaWdodChmZCwgZS0+ZmxhZ3MsIE1FQVNVUkVfUklOR19ORVdfQ1RYKTsK IAlJR1RfQ09SS19IQU5ETEUoY29yayk7CiAJdWludDMyX3QgcmVzdWx0LCB0YXJnZXQsIHBsdWc7 CiAJdWludDMyX3QgcmVzdWx0X3JlYWRbMTAyNF07CkBAIC0xMzYwLDcgKzEzNzQsNyBAQCBzdGF0 aWMgdm9pZCByZW9yZGVyX3dpZGUoaW50IGZkLCB1bnNpZ25lZCByaW5nKQogCW1lbXNldCgmZXhl Y2J1ZiwgMCwgc2l6ZW9mKGV4ZWNidWYpKTsKIAlleGVjYnVmLmJ1ZmZlcnNfcHRyID0gdG9fdXNl cl9wb2ludGVyKG9iaik7CiAJZXhlY2J1Zi5idWZmZXJfY291bnQgPSAzOwotCWV4ZWNidWYuZmxh Z3MgPSByaW5nOworCWV4ZWNidWYuZmxhZ3MgPSBlLT5mbGFnczsKIAlpZiAoZ2VuIDwgNikKIAkJ ZXhlY2J1Zi5mbGFncyB8PSBJOTE1X0VYRUNfU0VDVVJFOwogCkBAIC0xNDE0LDcgKzE0MjgsNyBA QCBzdGF0aWMgdm9pZCByZW9yZGVyX3dpZGUoaW50IGZkLCB1bnNpZ25lZCByaW5nKQogCQlnZW1f Y29udGV4dF9kZXN0cm95KGZkLCBleGVjYnVmLnJzdmQxKTsKIAl9CiAKLQl1bnBsdWdfc2hvd19x dWV1ZShmZCwgJmNvcmssIHJpbmcpOworCXVucGx1Z19zaG93X3F1ZXVlKGZkLCAmY29yaywgZSk7 CiAJZ2VtX2Nsb3NlKGZkLCBwbHVnKTsKIAogCV9fc3luY19yZWFkX3UzMl9jb3VudChmZCwgcmVz dWx0LCByZXN1bHRfcmVhZCwgc2l6ZW9mKHJlc3VsdF9yZWFkKSk7CkBAIC0xNDQwLDcgKzE0NTQs NyBAQCBzdGF0aWMgdm9pZCBiaW5kX3RvX2NwdShpbnQgY3B1KQogCWlndF9hc3NlcnQoc2NoZWRf c2V0YWZmaW5pdHkoZ2V0cGlkKCksIHNpemVvZihjcHVfc2V0X3QpLCAmYWxsb3dlZCkgPT0gMCk7 CiB9CiAKLXN0YXRpYyB2b2lkIHRlc3RfcGlfcmluZ2Z1bGwoaW50IGZkLCB1bnNpZ25lZCBpbnQg ZW5naW5lKQorc3RhdGljIHZvaWQgdGVzdF9waV9yaW5nZnVsbChpbnQgZmQsIGNvbnN0IHN0cnVj dCBpbnRlbF9leGVjdXRpb25fZW5naW5lMiAqZSkKIHsKIAljb25zdCB1aW50MzJfdCBiYmUgPSBN SV9CQVRDSF9CVUZGRVJfRU5EOwogCXN0cnVjdCBzaWdhY3Rpb24gc2EgPSB7IC5zYV9oYW5kbGVy ID0gYWxhcm1faGFuZGxlciB9OwpAQCAtMTQ2Myw3ICsxNDc3LDcgQEAgc3RhdGljIHZvaWQgdGVz dF9waV9yaW5nZnVsbChpbnQgZmQsIHVuc2lnbmVkIGludCBlbmdpbmUpCiAKIAlleGVjYnVmLmJ1 ZmZlcnNfcHRyID0gdG9fdXNlcl9wb2ludGVyKCZvYmpbMV0pOwogCWV4ZWNidWYuYnVmZmVyX2Nv dW50ID0gMTsKLQlleGVjYnVmLmZsYWdzID0gZW5naW5lOworCWV4ZWNidWYuZmxhZ3MgPSBlLT5m bGFnczsKIAogCS8qIFdhcm0gdXAgYm90aCAoaGkvbG8pIGNvbnRleHRzICovCiAJZXhlY2J1Zi5y c3ZkMSA9IGdlbV9jb250ZXh0X2NyZWF0ZShmZCk7CkBAIC0xNTcxLDExICsxNTg1LDExIEBAIHN0 YXRpYyB2b2lkIHRlc3RfcGlfcmluZ2Z1bGwoaW50IGZkLCB1bnNpZ25lZCBpbnQgZW5naW5lKQog c3RhdGljIHZvaWQgbWVhc3VyZV9zZW1hcGhvcmVfcG93ZXIoaW50IGk5MTUpCiB7CiAJc3RydWN0 IGdwdV9wb3dlciBwb3dlcjsKLQl1bnNpZ25lZCBpbnQgZW5naW5lLCBzaWduYWxlcjsKKwljb25z dCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZTIgKmVuZ2luZSwgKnNpZ25hbGVyOwogCiAJ aWd0X3JlcXVpcmUoZ3B1X3Bvd2VyX29wZW4oJnBvd2VyKSA9PSAwKTsKIAotCWZvcl9lYWNoX3Bo eXNpY2FsX2VuZ2luZShpOTE1LCBzaWduYWxlcikgeworCV9fZm9yX2VhY2hfcGh5c2ljYWxfZW5n aW5lKGk5MTUsIHNpZ25hbGVyKSB7CiAJCXN0cnVjdCBncHVfcG93ZXJfc2FtcGxlIHNfc3Bpblsy XTsKIAkJc3RydWN0IGdwdV9wb3dlcl9zYW1wbGUgc19zZW1hWzJdOwogCQlkb3VibGUgYmFzZWxp bmUsIHRvdGFsOwpAQCAtMTU4Myw3ICsxNTk3LDcgQEAgc3RhdGljIHZvaWQgbWVhc3VyZV9zZW1h cGhvcmVfcG93ZXIoaW50IGk5MTUpCiAJCWlndF9zcGluX3QgKnNwaW47CiAKIAkJc3BpbiA9IF9f aWd0X3NwaW5fbmV3KGk5MTUsCi0JCQkJICAgICAgLmVuZ2luZSA9IHNpZ25hbGVyLAorCQkJCSAg ICAgIC5lbmdpbmUgPSBzaWduYWxlci0+ZmxhZ3MsCiAJCQkJICAgICAgLmZsYWdzID0gSUdUX1NQ SU5fUE9MTF9SVU4pOwogCQlnZW1fd2FpdChpOTE1LCBzcGluLT5oYW5kbGUsICZqaWZmaWUpOyAv KiB3YWl0Ym9vc3QgKi8KIAkJaWd0X3NwaW5fYnVzeXdhaXRfdW50aWxfc3RhcnRlZChzcGluKTsK QEAgLTE1OTMsMTQgKzE2MDcsMTQgQEAgc3RhdGljIHZvaWQgbWVhc3VyZV9zZW1hcGhvcmVfcG93 ZXIoaW50IGk5MTUpCiAJCWdwdV9wb3dlcl9yZWFkKCZwb3dlciwgJnNfc3BpblsxXSk7CiAKIAkJ LyogQWRkIGEgd2FpdGVyIHRvIGVhY2ggZW5naW5lICovCi0JCWZvcl9lYWNoX3BoeXNpY2FsX2Vu Z2luZShpOTE1LCBlbmdpbmUpIHsKKwkJX19mb3JfZWFjaF9waHlzaWNhbF9lbmdpbmUoaTkxNSwg ZW5naW5lKSB7CiAJCQlpZ3Rfc3Bpbl90ICpzZW1hOwogCiAJCQlpZiAoZW5naW5lID09IHNpZ25h bGVyKQogCQkJCWNvbnRpbnVlOwogCiAJCQlzZW1hID0gX19pZ3Rfc3Bpbl9uZXcoaTkxNSwKLQkJ CQkJICAgICAgLmVuZ2luZSA9IGVuZ2luZSwKKwkJCQkJICAgICAgLmVuZ2luZSA9IGVuZ2luZS0+ ZmxhZ3MsCiAJCQkJCSAgICAgIC5kZXBlbmRlbmN5ID0gc3Bpbi0+aGFuZGxlKTsKIAogCQkJaWd0 X3NwaW5fZnJlZShpOTE1LCBzZW1hKTsKQEAgLTE2MTcsNyArMTYzMSw3IEBAIHN0YXRpYyB2b2lk IG1lYXN1cmVfc2VtYXBob3JlX3Bvd2VyKGludCBpOTE1KQogCQl0b3RhbCA9IGdwdV9wb3dlcl9X KCZwb3dlciwgJnNfc2VtYVswXSwgJnNfc2VtYVsxXSk7CiAKIAkJaWd0X2luZm8oIiVzOiAlLjFm bVcgKyAlLjFmbVcgKHRvdGFsICUxLmZtVylcbiIsCi0JCQkgZV9fLT5uYW1lLAorCQkJIGVuZ2lu ZS0+bmFtZSwKIAkJCSAxZTMgKiBiYXNlbGluZSwKIAkJCSAxZTMgKiAodG90YWwgLSBiYXNlbGlu ZSksCiAJCQkgMWUzICogdG90YWwpOwpAQCAtMTYyOCw3ICsxNjQyLDcgQEAgc3RhdGljIHZvaWQg bWVhc3VyZV9zZW1hcGhvcmVfcG93ZXIoaW50IGk5MTUpCiAKIGlndF9tYWluCiB7Ci0JY29uc3Qg c3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUgKmU7CisJY29uc3Qgc3RydWN0IGludGVsX2V4 ZWN1dGlvbl9lbmdpbmUyICplOwogCWludCBmZCA9IC0xOwogCiAJaWd0X3NraXBfb25fc2ltdWxh dGlvbigpOwpAQCAtMTY0NiwyMSArMTY2MCwxNSBAQCBpZ3RfbWFpbgogCX0KIAogCWlndF9zdWJ0 ZXN0X2dyb3VwIHsKLQkJZm9yIChlID0gaW50ZWxfZXhlY3V0aW9uX2VuZ2luZXM7IGUtPm5hbWU7 IGUrKykgewotCQkJLyogZGVmYXVsdCBleGVjLWlkIGlzIHB1cmVseSBzeW1ib2xpYyAqLwotCQkJ aWYgKGUtPmV4ZWNfaWQgPT0gMCkKLQkJCQljb250aW51ZTsKLQorCQlfX2Zvcl9lYWNoX3BoeXNp Y2FsX2VuZ2luZShmZCwgZSkgewogCQkJaWd0X3N1YnRlc3RfZigiZmlmby0lcyIsIGUtPm5hbWUp IHsKLQkJCQlpZ3RfcmVxdWlyZShnZW1fcmluZ19oYXNfcGh5c2ljYWxfZW5naW5lKGZkLCBlLT5l eGVjX2lkIHwgZS0+ZmxhZ3MpKTsKLQkJCQlpZ3RfcmVxdWlyZShnZW1fY2FuX3N0b3JlX2R3b3Jk KGZkLCBlLT5leGVjX2lkIHwgZS0+ZmxhZ3MpKTsKLQkJCQlmaWZvKGZkLCBlLT5leGVjX2lkIHwg ZS0+ZmxhZ3MpOworCQkJCWlndF9yZXF1aXJlKGdlbV9jbGFzc19jYW5fc3RvcmVfZHdvcmQoZmQs IGUtPmNsYXNzKSk7CisJCQkJZmlmbyhmZCwgZSk7CiAJCQl9CiAKIAkJCWlndF9zdWJ0ZXN0X2Yo ImluZGVwZW5kZW50LSVzIiwgZS0+bmFtZSkgewotCQkJCWlndF9yZXF1aXJlKGdlbV9yaW5nX2hh c19waHlzaWNhbF9lbmdpbmUoZmQsIGUtPmV4ZWNfaWQgfCBlLT5mbGFncykpOwotCQkJCWlndF9y ZXF1aXJlKGdlbV9jYW5fc3RvcmVfZHdvcmQoZmQsIGUtPmV4ZWNfaWQgfCBlLT5mbGFncykpOwot CQkJCWluZGVwZW5kZW50KGZkLCBlLT5leGVjX2lkIHwgZS0+ZmxhZ3MpOworCQkJCWlndF9yZXF1 aXJlKGdlbV9jbGFzc19jYW5fc3RvcmVfZHdvcmQoZmQsIGUtPmNsYXNzKSk7CisJCQkJaW5kZXBl bmRlbnQoZmQsIGUpOwogCQkJfQogCQl9CiAJfQpAQCAtMTY4MSwyNiArMTY4OSwyMiBAQCBpZ3Rf bWFpbgogCQkJc2VtYXBob3JlX25vc2tpcChmZCk7CiAKIAkJaWd0X3N1YnRlc3QoInNtb2tldGVz dC1hbGwiKQotCQkJc21va2V0ZXN0KGZkLCBBTExfRU5HSU5FUywgMzApOwotCi0JCWZvciAoZSA9 IGludGVsX2V4ZWN1dGlvbl9lbmdpbmVzOyBlLT5uYW1lOyBlKyspIHsKLQkJCWlmIChlLT5leGVj X2lkID09IDApCi0JCQkJY29udGludWU7CisJCQlzbW9rZXRlc3QoZmQsIE5VTEwsIDMwKTsKIAor CQlfX2Zvcl9lYWNoX3BoeXNpY2FsX2VuZ2luZShmZCwgZSkgewogCQkJaWd0X3N1YnRlc3RfZ3Jv dXAgewogCQkJCWlndF9maXh0dXJlIHsKLQkJCQkJaWd0X3JlcXVpcmUoZ2VtX3JpbmdfaGFzX3Bo eXNpY2FsX2VuZ2luZShmZCwgZS0+ZXhlY19pZCB8IGUtPmZsYWdzKSk7Ci0JCQkJCWlndF9yZXF1 aXJlKGdlbV9jYW5fc3RvcmVfZHdvcmQoZmQsIGUtPmV4ZWNfaWQgfCBlLT5mbGFncykpOworCQkJ CQlpZ3RfcmVxdWlyZShnZW1fY2xhc3NfY2FuX3N0b3JlX2R3b3JkKGZkLCBlLT5jbGFzcykpOwog CQkJCX0KIAogCQkJCWlndF9zdWJ0ZXN0X2YoImluLW9yZGVyLSVzIiwgZS0+bmFtZSkKLQkJCQkJ cmVvcmRlcihmZCwgZS0+ZXhlY19pZCB8IGUtPmZsYWdzLCBFUVVBTCk7CisJCQkJCXJlb3JkZXIo ZmQsIGUsIEVRVUFMKTsKIAogCQkJCWlndF9zdWJ0ZXN0X2YoIm91dC1vcmRlci0lcyIsIGUtPm5h bWUpCi0JCQkJCXJlb3JkZXIoZmQsIGUtPmV4ZWNfaWQgfCBlLT5mbGFncywgMCk7CisJCQkJCXJl b3JkZXIoZmQsIGUsIDApOwogCiAJCQkJaWd0X3N1YnRlc3RfZigicHJvbW90aW9uLSVzIiwgZS0+ bmFtZSkKLQkJCQkJcHJvbW90aW9uKGZkLCBlLT5leGVjX2lkIHwgZS0+ZmxhZ3MpOworCQkJCQlw cm9tb3Rpb24oZmQsIGUpOwogCiAJCQkJaWd0X3N1YnRlc3RfZ3JvdXAgewogCQkJCQlpZ3RfZml4 dHVyZSB7CkBAIC0xNzA4LDMwICsxNzEyLDMwIEBAIGlndF9tYWluCiAJCQkJCX0KIAogCQkJCQlp Z3Rfc3VidGVzdF9mKCJwcmVlbXB0LSVzIiwgZS0+bmFtZSkKLQkJCQkJCXByZWVtcHQoZmQsIGUt PmV4ZWNfaWQgfCBlLT5mbGFncywgMCk7CisJCQkJCQlwcmVlbXB0KGZkLCBlLCAwKTsKIAogCQkJ CQlpZ3Rfc3VidGVzdF9mKCJwcmVlbXB0LWNvbnRleHRzLSVzIiwgZS0+bmFtZSkKLQkJCQkJCXBy ZWVtcHQoZmQsIGUtPmV4ZWNfaWQgfCBlLT5mbGFncywgTkVXX0NUWCk7CisJCQkJCQlwcmVlbXB0 KGZkLCBlLCBORVdfQ1RYKTsKIAogCQkJCQlpZ3Rfc3VidGVzdF9mKCJwcmVlbXB0LXNlbGYtJXMi LCBlLT5uYW1lKQotCQkJCQkJcHJlZW1wdF9zZWxmKGZkLCBlLT5leGVjX2lkIHwgZS0+ZmxhZ3Mp OworCQkJCQkJcHJlZW1wdF9zZWxmKGZkLCBlKTsKIAogCQkJCQlpZ3Rfc3VidGVzdF9mKCJwcmVl bXB0LW90aGVyLSVzIiwgZS0+bmFtZSkKLQkJCQkJCXByZWVtcHRfb3RoZXIoZmQsIGUtPmV4ZWNf aWQgfCBlLT5mbGFncywgMCk7CisJCQkJCQlwcmVlbXB0X290aGVyKGZkLCBlLCAwKTsKIAogCQkJ CQlpZ3Rfc3VidGVzdF9mKCJwcmVlbXB0LW90aGVyLWNoYWluLSVzIiwgZS0+bmFtZSkKLQkJCQkJ CXByZWVtcHRfb3RoZXIoZmQsIGUtPmV4ZWNfaWQgfCBlLT5mbGFncywgQ0hBSU4pOworCQkJCQkJ cHJlZW1wdF9vdGhlcihmZCwgZSwgQ0hBSU4pOwogCiAJCQkJCWlndF9zdWJ0ZXN0X2YoInByZWVt cHQtcXVldWUtJXMiLCBlLT5uYW1lKQotCQkJCQkJcHJlZW1wdF9xdWV1ZShmZCwgZS0+ZXhlY19p ZCB8IGUtPmZsYWdzLCAwKTsKKwkJCQkJCXByZWVtcHRfcXVldWUoZmQsIGUsIDApOwogCiAJCQkJ CWlndF9zdWJ0ZXN0X2YoInByZWVtcHQtcXVldWUtY2hhaW4tJXMiLCBlLT5uYW1lKQotCQkJCQkJ cHJlZW1wdF9xdWV1ZShmZCwgZS0+ZXhlY19pZCB8IGUtPmZsYWdzLCBDSEFJTik7CisJCQkJCQlw cmVlbXB0X3F1ZXVlKGZkLCBlLCBDSEFJTik7CiAJCQkJCWlndF9zdWJ0ZXN0X2YoInByZWVtcHQt cXVldWUtY29udGV4dHMtJXMiLCBlLT5uYW1lKQotCQkJCQkJcHJlZW1wdF9xdWV1ZShmZCwgZS0+ ZXhlY19pZCB8IGUtPmZsYWdzLCBDT05URVhUUyk7CisJCQkJCQlwcmVlbXB0X3F1ZXVlKGZkLCBl LCBDT05URVhUUyk7CiAKIAkJCQkJaWd0X3N1YnRlc3RfZigicHJlZW1wdC1xdWV1ZS1jb250ZXh0 cy1jaGFpbi0lcyIsIGUtPm5hbWUpCi0JCQkJCQlwcmVlbXB0X3F1ZXVlKGZkLCBlLT5leGVjX2lk IHwgZS0+ZmxhZ3MsIENPTlRFWFRTIHwgQ0hBSU4pOworCQkJCQkJcHJlZW1wdF9xdWV1ZShmZCwg ZSwgQ09OVEVYVFMgfCBDSEFJTik7CiAKIAkJCQkJaWd0X3N1YnRlc3RfZ3JvdXAgewogCQkJCQkJ aWd0X2hhbmdfdCBoYW5nOwpAQCAtMTc0MiwxMSArMTc0NiwxMSBAQCBpZ3RfbWFpbgogCQkJCQkJ fQogCiAJCQkJCQlpZ3Rfc3VidGVzdF9mKCJwcmVlbXB0LWhhbmctJXMiLCBlLT5uYW1lKSB7Ci0J CQkJCQkJcHJlZW1wdChmZCwgZS0+ZXhlY19pZCB8IGUtPmZsYWdzLCBORVdfQ1RYIHwgSEFOR19M UCk7CisJCQkJCQkJcHJlZW1wdChmZCwgZSwgTkVXX0NUWCB8IEhBTkdfTFApOwogCQkJCQkJfQog CiAJCQkJCQlpZ3Rfc3VidGVzdF9mKCJwcmVlbXB0aXZlLWhhbmctJXMiLCBlLT5uYW1lKQotCQkJ CQkJCXByZWVtcHRpdmVfaGFuZyhmZCwgZS0+ZXhlY19pZCB8IGUtPmZsYWdzKTsKKwkJCQkJCQlw cmVlbXB0aXZlX2hhbmcoZmQsIGUpOwogCiAJCQkJCQlpZ3RfZml4dHVyZSB7CiAJCQkJCQkJaWd0 X2Rpc2FsbG93X2hhbmcoZmQsIGhhbmcpOwpAQCAtMTc1NiwxNiArMTc2MCwxNiBAQCBpZ3RfbWFp bgogCQkJCX0KIAogCQkJCWlndF9zdWJ0ZXN0X2YoImRlZXAtJXMiLCBlLT5uYW1lKQotCQkJCQlk ZWVwKGZkLCBlLT5leGVjX2lkIHwgZS0+ZmxhZ3MpOworCQkJCQlkZWVwKGZkLCBlKTsKIAogCQkJ CWlndF9zdWJ0ZXN0X2YoIndpZGUtJXMiLCBlLT5uYW1lKQotCQkJCQl3aWRlKGZkLCBlLT5leGVj X2lkIHwgZS0+ZmxhZ3MpOworCQkJCQl3aWRlKGZkLCBlKTsKIAogCQkJCWlndF9zdWJ0ZXN0X2Yo InJlb3JkZXItd2lkZS0lcyIsIGUtPm5hbWUpCi0JCQkJCXJlb3JkZXJfd2lkZShmZCwgZS0+ZXhl Y19pZCB8IGUtPmZsYWdzKTsKKwkJCQkJcmVvcmRlcl93aWRlKGZkLCBlKTsKIAogCQkJCWlndF9z dWJ0ZXN0X2YoInNtb2tldGVzdC0lcyIsIGUtPm5hbWUpCi0JCQkJCXNtb2tldGVzdChmZCwgZS0+ ZXhlY19pZCB8IGUtPmZsYWdzLCA1KTsKKwkJCQkJc21va2V0ZXN0KGZkLCBlLCA1KTsKIAkJCX0K IAkJfQogCX0KQEAgLTE3NzksMTggKzE3ODMsMTQgQEAgaWd0X21haW4KIAkJCWlndF9yZXF1aXJl KGdlbV9oYXNfZXhlY2xpc3RzKGZkKSk7CiAJCX0KIAotCQlmb3IgKGUgPSBpbnRlbF9leGVjdXRp b25fZW5naW5lczsgZS0+bmFtZTsgZSsrKSB7Ci0JCQlpZiAoZS0+ZXhlY19pZCA9PSAwKQotCQkJ CWNvbnRpbnVlOwotCisJCV9fZm9yX2VhY2hfcGh5c2ljYWxfZW5naW5lKGZkLCBlKSB7CiAJCQlp Z3Rfc3VidGVzdF9ncm91cCB7CiAJCQkJaWd0X2ZpeHR1cmUgewotCQkJCQlpZ3RfcmVxdWlyZShn ZW1fcmluZ19oYXNfcGh5c2ljYWxfZW5naW5lKGZkLCBlLT5leGVjX2lkIHwgZS0+ZmxhZ3MpKTsK IAkJCQkJaWd0X3JlcXVpcmUoZ2VtX3NjaGVkdWxlcl9oYXNfcHJlZW1wdGlvbihmZCkpOwogCQkJ CX0KIAogCQkJCWlndF9zdWJ0ZXN0X2YoInBpLXJpbmdmdWxsLSVzIiwgZS0+bmFtZSkKLQkJCQkJ dGVzdF9waV9yaW5nZnVsbChmZCwgZS0+ZXhlY19pZCB8IGUtPmZsYWdzKTsKKwkJCQkJdGVzdF9w aV9yaW5nZnVsbChmZCwgZSk7CiAJCQl9CiAJCX0KIAl9Ci0tIAoyLjE5LjEKCl9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmlndC1kZXYgbWFpbGluZyBsaXN0 CmlndC1kZXZAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaWd0LWRldg==