From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id CB5476E10A for ; Mon, 31 Aug 2020 13:31:23 +0000 (UTC) From: =?UTF-8?q?Zbigniew=20Kempczy=C5=84ski?= Date: Mon, 31 Aug 2020 15:30:19 +0200 Message-Id: <20200831133049.37017-11-zbigniew.kempczynski@intel.com> In-Reply-To: <20200831133049.37017-1-zbigniew.kempczynski@intel.com> References: <20200831133049.37017-1-zbigniew.kempczynski@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v33 10/40] lib/rendercopy: remove libdrm dependency 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 Cc: Chris Wilson List-ID: VXNlIGludGVsX2JiIGFzIG1haW4gYmF0Y2ggaW1wbGVtZW50YXRpb24gdG8gcmVtb3ZlIGxpYmRy bSBkZXBlbmRlbmN5LgpSZXdyaXRlIGFsbCBwaXBlbGluZXMgdG8gdXNlIGludGVsX2JiIGFuZCB1 cGRhdGUgcmVuZGVyfHZlYm94X2NvcHkKZnVuY3Rpb24gcHJvdG90eXBlcy4KClNpZ25lZC1vZmYt Ynk6IFpiaWduaWV3IEtlbXBjennFhHNraSA8emJpZ25pZXcua2VtcGN6eW5za2lAaW50ZWwuY29t PgpDYzogRG9taW5payBHcnplZ29yemVrIDxkb21pbmlrLmdyemVnb3J6ZWtAaW50ZWwuY29tPgpD YzogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+ClJldmlld2VkLWJ5OiBD aHJpcyBXaWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KLS0tCiBsaWIvaW50ZWxfYXV4 X3BndGFibGUuYyB8ICAzMjUgKysrKystLS0tLS0KIGxpYi9pbnRlbF9hdXhfcGd0YWJsZS5oIHwg ICAyOSArLQogbGliL2ludGVsX2JhdGNoYnVmZmVyLmggfCAgIDQyICstCiBsaWIvcmVuZGVyY29w eS5oICAgICAgICB8ICAxMDIgKystLQogbGliL3JlbmRlcmNvcHlfZ2VuNC5jICAgfCAgNTcxICsr KysrKysrKystLS0tLS0tLS0KIGxpYi9yZW5kZXJjb3B5X2dlbjYuYyAgIHwgIDU5MyArKysrKysr KysrLS0tLS0tLS0tLQogbGliL3JlbmRlcmNvcHlfZ2VuNy5jICAgfCAgNjEyICsrKysrKysrKyst LS0tLS0tLS0tLQogbGliL3JlbmRlcmNvcHlfZ2VuOC5jICAgfCAxMDMwICsrKysrKysrKysrKysr Ky0tLS0tLS0tLS0tLS0tLS0tLS0tCiBsaWIvcmVuZGVyY29weV9nZW45LmMgICB8IDExNDUgKysr KysrKysrKysrKysrKystLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBsaWIvcmVuZGVyY29weV9pODMw LmMgICB8ICAyNzggKysrKystLS0tLQogbGliL3JlbmRlcmNvcHlfaTkxNS5jICAgfCAgMjgxICsr KysrLS0tLS0KIGxpYi92ZWJveGNvcHkuaCAgICAgICAgIHwgICAgOCArLQogbGliL3ZlYm94Y29w eV9nZW4xMi5jICAgfCAgMTE3ICsrLS0KIDEzIGZpbGVzIGNoYW5nZWQsIDI0MjkgaW5zZXJ0aW9u cygrKSwgMjcwNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9saWIvaW50ZWxfYXV4X3BndGFi bGUuYyBiL2xpYi9pbnRlbF9hdXhfcGd0YWJsZS5jCmluZGV4IGRiNTA1NWM4Li5iNDNhMzY2YiAx MDA2NDQKLS0tIGEvbGliL2ludGVsX2F1eF9wZ3RhYmxlLmMKKysrIGIvbGliL2ludGVsX2F1eF9w Z3RhYmxlLmMKQEAgLTQsNyArNCw3IEBACiAjaW5jbHVkZSAiZHJtdGVzdC5oIgogI2luY2x1ZGUg ImludGVsX2F1eF9wZ3RhYmxlLmgiCiAjaW5jbHVkZSAiaW50ZWxfYmF0Y2hidWZmZXIuaCIKLSNp bmNsdWRlICJpbnRlbF9idWZtZ3IuaCIKKyNpbmNsdWRlICJpbnRlbF9idWZvcHMuaCIKICNpbmNs dWRlICJpb2N0bF93cmFwcGVycy5oIgogCiAjaW5jbHVkZSAiaTkxNS9nZW1fbW1hbi5oIgpAQCAt MzEsOCArMzEsNiBAQAogCiAjZGVmaW5lIEdGWF9BRERSRVNTX0JJVFMJNDgKIAotI2RlZmluZSBt YXgoYSwgYikJCSgoYSkgPiAoYikgPyAoYSkgOiAoYikpCi0KICNkZWZpbmUgQVVYX0ZPUk1BVF9Z Q1JDQgkweDAzCiAjZGVmaW5lIEFVWF9GT1JNQVRfUDAxMAkJMHgwNwogI2RlZmluZSBBVVhfRk9S TUFUX1AwMTYJCTB4MDgKQEAgLTU4LDEwICs1NiwxMiBAQCBzdHJ1Y3QgcGd0YWJsZSB7CiAJc3Ry dWN0IHBndGFibGVfbGV2ZWxfaW5mbyAqbGV2ZWxfaW5mbzsKIAlpbnQgc2l6ZTsKIAlpbnQgbWF4 X2FsaWduOwotCWRybV9pbnRlbF9ibyAqYm87CisJc3RydWN0IGludGVsX2JiICppYmI7CisJc3Ry dWN0IGludGVsX2J1ZiAqYnVmOworCXZvaWQgKnB0cjsKIH07CiAKLXN0YXRpYyB1aW50NjRfdCBs YXN0X2J1Zl9zdXJmYWNlX2VuZChjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmKQorc3RhdGljIHVp bnQ2NF90IGxhc3RfYnVmX3N1cmZhY2VfZW5kKHN0cnVjdCBpbnRlbF9idWYgKmJ1ZikKIHsKIAl1 aW50NjRfdCBlbmRfb2Zmc2V0ID0gMDsKIAlpbnQgbnVtX3N1cmZhY2VzID0gYnVmLT5mb3JtYXRf aXNfeXV2X3NlbWlwbGFuYXIgPyAyIDogMTsKQEAgLTc5LDcgKzc5LDcgQEAgc3RhdGljIHVpbnQ2 NF90IGxhc3RfYnVmX3N1cmZhY2VfZW5kKGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpidWYpCiB9CiAK IHN0YXRpYyBpbnQKLXBndF90YWJsZV9jb3VudChpbnQgYWRkcmVzc19iaXRzLCBjb25zdCBzdHJ1 Y3QgaWd0X2J1ZiAqKmJ1ZnMsIGludCBidWZfY291bnQpCitwZ3RfdGFibGVfY291bnQoaW50IGFk ZHJlc3NfYml0cywgc3RydWN0IGludGVsX2J1ZiAqKmJ1ZnMsIGludCBidWZfY291bnQpCiB7CiAJ dWludDY0X3QgZW5kOwogCWludCBjb3VudDsKQEAgLTg4LDE5ICs4OCwxOSBAQCBwZ3RfdGFibGVf Y291bnQoaW50IGFkZHJlc3NfYml0cywgY29uc3Qgc3RydWN0IGlndF9idWYgKipidWZzLCBpbnQg YnVmX2NvdW50KQogCWNvdW50ID0gMDsKIAllbmQgPSAwOwogCWZvciAoaSA9IDA7IGkgPCBidWZf Y291bnQ7IGkrKykgewotCQljb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmID0gYnVmc1tpXTsKKwkJ c3RydWN0IGludGVsX2J1ZiAqYnVmID0gYnVmc1tpXTsKIAkJdWludDY0X3Qgc3RhcnQ7CiAKIAkJ LyogV2UgcmVxdWlyZSBidWZzIHRvIGJlIHNvcnRlZC4gKi8KIAkJaWd0X2Fzc2VydChpID09IDAg fHwKLQkJCSAgIGJ1Zi0+Ym8tPm9mZnNldDY0ID49IGJ1ZnNbaSAtIDFdLT5iby0+b2Zmc2V0NjQg KwotCQkJCQkJYnVmc1tpIC0gMV0tPmJvLT5zaXplKTsKKwkJCSAgIGJ1Zi0+YWRkci5vZmZzZXQg Pj0gYnVmc1tpIC0gMV0tPmFkZHIub2Zmc2V0ICsKKwkJCQkJICAgICAgIGludGVsX2J1Zl9ib19z aXplKGJ1ZnNbaSAtIDFdKSk7CiAKLQkJc3RhcnQgPSBBTElHTl9ET1dOKGJ1Zi0+Ym8tPm9mZnNl dDY0LCAxVUwgPDwgYWRkcmVzc19iaXRzKTsKKwkJc3RhcnQgPSBBTElHTl9ET1dOKGJ1Zi0+YWRk ci5vZmZzZXQsIDFVTCA8PCBhZGRyZXNzX2JpdHMpOwogCQkvKiBBdm9pZCBkb3VibGUgY291bnRp bmcgZm9yIG92ZXJsYXBwaW5nIGFsaWduZWQgYnVmcy4gKi8KIAkJc3RhcnQgPSBtYXgoc3RhcnQs IGVuZCk7CiAKLQkJZW5kID0gQUxJR04oYnVmLT5iby0+b2Zmc2V0NjQgKyBsYXN0X2J1Zl9zdXJm YWNlX2VuZChidWYpLAorCQllbmQgPSBBTElHTihidWYtPmFkZHIub2Zmc2V0ICsgbGFzdF9idWZf c3VyZmFjZV9lbmQoYnVmKSwKIAkJCSAgICAxVUwgPDwgYWRkcmVzc19iaXRzKTsKIAkJaWd0X2Fz c2VydChlbmQgPj0gc3RhcnQpOwogCkBAIC0xMTEsNyArMTExLDcgQEAgcGd0X3RhYmxlX2NvdW50 KGludCBhZGRyZXNzX2JpdHMsIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICoqYnVmcywgaW50IGJ1Zl9j b3VudCkKIH0KIAogc3RhdGljIHZvaWQKLXBndF9jYWxjX3NpemUoc3RydWN0IHBndGFibGUgKnBn dCwgY29uc3Qgc3RydWN0IGlndF9idWYgKipidWZzLCBpbnQgYnVmX2NvdW50KQorcGd0X2NhbGNf c2l6ZShzdHJ1Y3QgcGd0YWJsZSAqcGd0LCBzdHJ1Y3QgaW50ZWxfYnVmICoqYnVmcywgaW50IGJ1 Zl9jb3VudCkKIHsKIAlpbnQgbGV2ZWw7CiAKQEAgLTE3MSwyOCArMTcxLDMzIEBAIHBndF9nZXRf Y2hpbGRfdGFibGUoc3RydWN0IHBndGFibGUgKnBndCwgdWludDY0X3QgcGFyZW50X3RhYmxlLAog CXVpbnQ2NF90ICpjaGlsZF9lbnRyeV9wdHI7CiAJdWludDY0X3QgY2hpbGRfdGFibGU7CiAKLQlw YXJlbnRfdGFibGVfcHRyID0gcGd0LT5iby0+dmlydHVhbCArIHBhcmVudF90YWJsZTsKKwlwYXJl bnRfdGFibGVfcHRyID0gcGd0LT5wdHIgKyBwYXJlbnRfdGFibGU7CiAJY2hpbGRfZW50cnlfaWR4 ID0gcGd0X2VudHJ5X2luZGV4KHBndCwgbGV2ZWwsIGFkZHJlc3MpOwogCWNoaWxkX2VudHJ5X3B0 ciA9ICZwYXJlbnRfdGFibGVfcHRyW2NoaWxkX2VudHJ5X2lkeF07CiAKIAlpZiAoISpjaGlsZF9l bnRyeV9wdHIpIHsKIAkJdWludDY0X3QgcHRlOworCQl1aW50MzJfdCBvZmZzZXQ7CiAKIAkJY2hp bGRfdGFibGUgPSBwZ3RfYWxsb2NfdGFibGUocGd0LCBsZXZlbCAtIDEpOwotCQlpZ3RfYXNzZXJ0 KCEoKGNoaWxkX3RhYmxlICsgcGd0LT5iby0+b2Zmc2V0NjQpICYKKwkJaWd0X2Fzc2VydCghKChj aGlsZF90YWJsZSArIHBndC0+YnVmLT5hZGRyLm9mZnNldCkgJgogCQkJICAgICB+cHRyX21hc2so cGd0LCBsZXZlbCkpKTsKIAogCQlwdGUgPSBjaGlsZF90YWJsZSB8IGZsYWdzOwotCQkqY2hpbGRf ZW50cnlfcHRyID0gcGd0LT5iby0+b2Zmc2V0NjQgKyBwdGU7CisJCSpjaGlsZF9lbnRyeV9wdHIg PSBwZ3QtPmJ1Zi0+YWRkci5vZmZzZXQgKyBwdGU7CiAKIAkJaWd0X2Fzc2VydChwdGUgPD0gSU5U MzJfTUFYKTsKLQkJZHJtX2ludGVsX2JvX2VtaXRfcmVsb2MocGd0LT5ibywKLQkJCQkJcGFyZW50 X3RhYmxlICsKLQkJCQkJCWNoaWxkX2VudHJ5X2lkeCAqIHNpemVvZih1aW50NjRfdCksCi0JCQkJ CXBndC0+Ym8sIHB0ZSwgMCwgMCk7CisKKwkJb2Zmc2V0ID0gcGFyZW50X3RhYmxlICsgY2hpbGRf ZW50cnlfaWR4ICogc2l6ZW9mKHVpbnQ2NF90KTsKKwkJaW50ZWxfYmJfb2Zmc2V0X3JlbG9jX3Rv X29iamVjdChwZ3QtPmliYiwKKwkJCQkJCXBndC0+YnVmLT5oYW5kbGUsCisJCQkJCQlwZ3QtPmJ1 Zi0+aGFuZGxlLAorCQkJCQkJMCwgMCwKKwkJCQkJCXB0ZSwgb2Zmc2V0LAorCQkJCQkJcGd0LT5i dWYtPmFkZHIub2Zmc2V0KTsKIAl9IGVsc2UgewogCQljaGlsZF90YWJsZSA9ICgqY2hpbGRfZW50 cnlfcHRyICYgcHRyX21hc2socGd0LCBsZXZlbCkpIC0KLQkJCSAgICAgIHBndC0+Ym8tPm9mZnNl dDY0OworCQkJICAgICAgcGd0LT5idWYtPmFkZHIub2Zmc2V0OwogCX0KIAogCXJldHVybiBjaGls ZF90YWJsZTsKQEAgLTIwNSw3ICsyMTAsNyBAQCBwZ3Rfc2V0X2wxX2VudHJ5KHN0cnVjdCBwZ3Rh YmxlICpwZ3QsIHVpbnQ2NF90IGwxX3RhYmxlLAogCXVpbnQ2NF90ICpsMV90YWJsZV9wdHI7CiAJ dWludDY0X3QgKmwxX2VudHJ5X3B0cjsKIAotCWwxX3RhYmxlX3B0ciA9IHBndC0+Ym8tPnZpcnR1 YWwgKyBsMV90YWJsZTsKKwlsMV90YWJsZV9wdHIgPSBwZ3QtPnB0ciArIGwxX3RhYmxlOwogCWwx X2VudHJ5X3B0ciA9ICZsMV90YWJsZV9wdHJbcGd0X2VudHJ5X2luZGV4KHBndCwgMCwgYWRkcmVz cyldOwogCiAJaWd0X2Fzc2VydCghKHB0ciAmIH5wdHJfbWFzayhwZ3QsIDApKSk7CkBAIC0yMzQs NyArMjM5LDcgQEAgc3RhdGljIGludCBicHBfdG9fZGVwdGhfdmFsKGludCBicHApCiAJfQogfQog Ci1zdGF0aWMgdWludDY0X3QgcGd0X2dldF9sMV9mbGFncyhjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAq YnVmLCBpbnQgc3VyZmFjZV9pZHgpCitzdGF0aWMgdWludDY0X3QgcGd0X2dldF9sMV9mbGFncyhj b25zdCBzdHJ1Y3QgaW50ZWxfYnVmICpidWYsIGludCBzdXJmYWNlX2lkeCkKIHsKIAkvKgogCSAq IFRoZSBvZmZzZXQgb2YgLnRpbGVfbW9kZSBpc24ndCBzcGVjaWZlZCBieSBic3BlYywgaXQncyB3 aGF0IE1lc2EKQEAgLTMzNywxNSArMzQyLDE1IEBAIHN0YXRpYyB1aW50NjRfdCBwZ3RfZ2V0X2x4 X2ZsYWdzKHZvaWQpCiAKIHN0YXRpYyB2b2lkCiBwZ3RfcG9wdWxhdGVfZW50cmllc19mb3JfYnVm KHN0cnVjdCBwZ3RhYmxlICpwZ3QsCi0JCQkgICAgICAgY29uc3Qgc3RydWN0IGlndF9idWYgKmJ1 ZiwKLQkJCSAgICAgICB1aW50NjRfdCB0b3BfdGFibGUsCi0JCQkgICAgICAgaW50IHN1cmZhY2Vf aWR4KQorCQkJICAgICBzdHJ1Y3QgaW50ZWxfYnVmICpidWYsCisJCQkgICAgIHVpbnQ2NF90IHRv cF90YWJsZSwKKwkJCSAgICAgaW50IHN1cmZhY2VfaWR4KQogewotCXVpbnQ2NF90IHN1cmZhY2Vf YWRkciA9IGJ1Zi0+Ym8tPm9mZnNldDY0ICsKKwl1aW50NjRfdCBzdXJmYWNlX2FkZHIgPSBidWYt PmFkZHIub2Zmc2V0ICsKIAkJCQlidWYtPnN1cmZhY2Vbc3VyZmFjZV9pZHhdLm9mZnNldDsKIAl1 aW50NjRfdCBzdXJmYWNlX2VuZCA9IHN1cmZhY2VfYWRkciArCiAJCQkgICAgICAgYnVmLT5zdXJm YWNlW3N1cmZhY2VfaWR4XS5zaXplOwotCXVpbnQ2NF90IGF1eF9hZGRyID0gYnVmLT5iby0+b2Zm c2V0NjQgKyBidWYtPmNjc1tzdXJmYWNlX2lkeF0ub2Zmc2V0OworCXVpbnQ2NF90IGF1eF9hZGRy ID0gYnVmLT5hZGRyLm9mZnNldCArIGJ1Zi0+Y2NzW3N1cmZhY2VfaWR4XS5vZmZzZXQ7CiAJdWlu dDY0X3QgbDFfZmxhZ3MgPSBwZ3RfZ2V0X2wxX2ZsYWdzKGJ1Ziwgc3VyZmFjZV9pZHgpOwogCXVp bnQ2NF90IGx4X2ZsYWdzID0gcGd0X2dldF9seF9mbGFncygpOwogCkBAIC0zNjcsMTkgKzM3Miwy NCBAQCBwZ3RfcG9wdWxhdGVfZW50cmllc19mb3JfYnVmKHN0cnVjdCBwZ3RhYmxlICpwZ3QsCiAJ fQogfQogCitzdGF0aWMgdm9pZCBwZ3RfbWFwKGludCBpOTE1LCBzdHJ1Y3QgcGd0YWJsZSAqcGd0 KQoreworCXBndC0+cHRyID0gZ2VtX21tYXBfX2RldmljZV9jb2hlcmVudChpOTE1LCBwZ3QtPmJ1 Zi0+aGFuZGxlLCAwLAorCQkJCQkgICAgIHBndC0+c2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklU RSk7Cit9CisKK3N0YXRpYyB2b2lkIHBndF91bm1hcChzdHJ1Y3QgcGd0YWJsZSAqcGd0KQorewor CW11bm1hcChwZ3QtPnB0ciwgcGd0LT5zaXplKTsKK30KKwogc3RhdGljIHZvaWQgcGd0X3BvcHVs YXRlX2VudHJpZXMoc3RydWN0IHBndGFibGUgKnBndCwKLQkJCQkgY29uc3Qgc3RydWN0IGlndF9i dWYgKipidWZzLAotCQkJCSBpbnQgYnVmX2NvdW50LAotCQkJCSBkcm1faW50ZWxfYm8gKnBndF9i bykKKwkJCQkgc3RydWN0IGludGVsX2J1ZiAqKmJ1ZnMsCisJCQkJIGludCBidWZfY291bnQpCiB7 CiAJdWludDY0X3QgdG9wX3RhYmxlOwogCWludCBpOwogCi0JcGd0LT5ibyA9IHBndF9ibzsKLQot CWlndF9hc3NlcnQocGd0X2JvLT5zaXplID49IHBndC0+c2l6ZSk7Ci0JbWVtc2V0KHBndF9iby0+ dmlydHVhbCwgMCwgcGd0LT5zaXplKTsKLQogCXRvcF90YWJsZSA9IHBndF9hbGxvY190YWJsZShw Z3QsIHBndC0+bGV2ZWxzIC0gMSk7CiAJLyogVG9wIGxldmVsIHRhYmxlIG11c3QgYmUgYXQgb2Zm c2V0IDAuICovCiAJaWd0X2Fzc2VydCh0b3BfdGFibGUgPT0gMCk7CkBAIC0zOTUsNyArNDA1LDcg QEAgc3RhdGljIHZvaWQgcGd0X3BvcHVsYXRlX2VudHJpZXMoc3RydWN0IHBndGFibGUgKnBndCwK IAogc3RhdGljIHN0cnVjdCBwZ3RhYmxlICoKIHBndF9jcmVhdGUoY29uc3Qgc3RydWN0IHBndGFi bGVfbGV2ZWxfZGVzYyAqbGV2ZWxfZGVzY3MsIGludCBsZXZlbHMsCi0JICAgY29uc3Qgc3RydWN0 IGlndF9idWYgKipidWZzLCBpbnQgYnVmX2NvdW50KQorCSAgIHN0cnVjdCBpbnRlbF9idWYgKipi dWZzLCBpbnQgYnVmX2NvdW50KQogewogCXN0cnVjdCBwZ3RhYmxlICpwZ3Q7CiAJaW50IGxldmVs OwpAQCAtNDI3LDEwICs0MzcsMTEgQEAgc3RhdGljIHZvaWQgcGd0X2Rlc3Ryb3koc3RydWN0IHBn dGFibGUgKnBndCkKIAlmcmVlKHBndCk7CiB9CiAKLWRybV9pbnRlbF9ibyAqCi1pbnRlbF9hdXhf cGd0YWJsZV9jcmVhdGUoZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdyLAotCQkgICAgICAgY29uc3Qg c3RydWN0IGlndF9idWYgKipidWZzLCBpbnQgYnVmX2NvdW50KQorc3RydWN0IGludGVsX2J1ZiAq CitpbnRlbF9hdXhfcGd0YWJsZV9jcmVhdGUoc3RydWN0IGludGVsX2JiICppYmIsCisJCQkgc3Ry dWN0IGludGVsX2J1ZiAqKmJ1ZnMsIGludCBidWZfY291bnQpCiB7CisJc3RydWN0IGRybV9pOTE1 X2dlbV9leGVjX29iamVjdDIgKm9iajsKIAlzdGF0aWMgY29uc3Qgc3RydWN0IHBndGFibGVfbGV2 ZWxfZGVzYyBsZXZlbF9kZXNjW10gPSB7CiAJCXsKIAkJCS5pZHhfc2hpZnQgPSAxNiwKQEAgLTQ1 Miw5OSArNDYzLDQzIEBAIGludGVsX2F1eF9wZ3RhYmxlX2NyZWF0ZShkcm1faW50ZWxfYnVmbWdy ICpidWZtZ3IsCiAJCX0sCiAJfTsKIAlzdHJ1Y3QgcGd0YWJsZSAqcGd0OwotCWRybV9pbnRlbF9i byAqcGd0X2JvOwotCi0JcGd0ID0gcGd0X2NyZWF0ZShsZXZlbF9kZXNjLCBBUlJBWV9TSVpFKGxl dmVsX2Rlc2MpLCBidWZzLCBidWZfY291bnQpOworCXN0cnVjdCBidWZfb3BzICpib3BzOworCXN0 cnVjdCBpbnRlbF9idWYgKmJ1ZjsKKwl1aW50NjRfdCBwcmV2X2FsaWdubWVudDsKIAotCXBndF9i byA9IGRybV9pbnRlbF9ib19hbGxvY19mb3JfcmVuZGVyKGJ1Zm1nciwgImF1eCBwZ3QiLAotCQkJ CQkgICAgICAgcGd0LT5zaXplLCBwZ3QtPm1heF9hbGlnbik7Ci0JaWd0X2Fzc2VydChwZ3RfYm8p OwotCi0JaWd0X2Fzc2VydChkcm1faW50ZWxfYm9fbWFwKHBndF9ibywgdHJ1ZSkgPT0gMCk7Ci0J cGd0X3BvcHVsYXRlX2VudHJpZXMocGd0LCBidWZzLCBidWZfY291bnQsIHBndF9ibyk7Ci0JaWd0 X2Fzc2VydChkcm1faW50ZWxfYm9fdW5tYXAocGd0X2JvKSA9PSAwKTsKKwlpZ3RfYXNzZXJ0KGJ1 Zl9jb3VudCk7CisJYm9wcyA9IGJ1ZnNbMF0tPmJvcHM7CiAKKwlwZ3QgPSBwZ3RfY3JlYXRlKGxl dmVsX2Rlc2MsIEFSUkFZX1NJWkUobGV2ZWxfZGVzYyksIGJ1ZnMsIGJ1Zl9jb3VudCk7CisJcGd0 LT5pYmIgPSBpYmI7CisJcGd0LT5idWYgPSBpbnRlbF9idWZfY3JlYXRlKGJvcHMsIHBndC0+c2l6 ZSwgMSwgOCwgMCwgSTkxNV9USUxJTkdfTk9ORSwKKwkJCQkgICAgSTkxNV9DT01QUkVTU0lPTl9O T05FKTsKKworCS8qIFdlIG5lZWQgdG8gdXNlIHBndC0+bWF4X2FsaWduIGZvciBhdXggdGFibGUg Ki8KKwlwcmV2X2FsaWdubWVudCA9IGludGVsX2JiX3NldF9kZWZhdWx0X29iamVjdF9hbGlnbm1l bnQoaWJiLAorCQkJCQkJCSAgICAgICBwZ3QtPm1heF9hbGlnbik7CisJb2JqID0gaW50ZWxfYmJf YWRkX2ludGVsX2J1ZihpYmIsIHBndC0+YnVmLCBmYWxzZSk7CisJaW50ZWxfYmJfc2V0X2RlZmF1 bHRfb2JqZWN0X2FsaWdubWVudChpYmIsIHByZXZfYWxpZ25tZW50KTsKKwlvYmotPmFsaWdubWVu dCA9IHBndC0+bWF4X2FsaWduOworCisJcGd0X21hcChpYmItPmk5MTUsIHBndCk7CisJcGd0X3Bv cHVsYXRlX2VudHJpZXMocGd0LCBidWZzLCBidWZfY291bnQpOworCXBndF91bm1hcChwZ3QpOwor CisJYnVmID0gcGd0LT5idWY7CiAJcGd0X2Rlc3Ryb3kocGd0KTsKIAotCXJldHVybiBwZ3RfYm87 Ci19Ci0KLXN0YXRpYyB2b2lkCi1hdXhfcGd0YWJsZV9maW5kX21heF9mcmVlX3JhbmdlKGNvbnN0 IHN0cnVjdCBpZ3RfYnVmICoqYnVmcywgaW50IGJ1Zl9jb3VudCwKLQkJCQl1aW50NjRfdCAqcmFu Z2Vfc3RhcnQsIHVpbnQ2NF90ICpyYW5nZV9zaXplKQotewotCS8qCi0JICogS2VlcCB0aGUgZmly c3QgcGFnZSByZXNlcnZlZCwgc28gd2UgY2FuIGRpZmZlcmVudGlhdGUgcGlubmVkCi0JICogb2Jq ZWN0cyBiYXNlZCBvbiBhIG5vbi1OVUxMIG9mZnNldC4KLQkgKi8KLQl1aW50NjRfdCBzdGFydCA9 IDB4MTAwMDsKLQkvKiBGb3Igbm93IGFsbG9jIG9ubHkgZnJvbSB0aGUgZmlyc3QgNEdCIGFkZHJl c3Mgc3BhY2UuICovCi0JY29uc3QgdWludDY0X3QgZW5kID0gMVVMTCA8PCAzMjsKLQl1aW50NjRf dCBtYXhfcmFuZ2Vfc3RhcnQgPSAwOwotCXVpbnQ2NF90IG1heF9yYW5nZV9zaXplID0gMDsKLQlp bnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBidWZfY291bnQ7IGkrKykgewotCQlpZiAoYnVmc1tp XS0+Ym8tPm9mZnNldDY0ID49IGVuZCkKLQkJCWJyZWFrOwotCi0JCWlmIChidWZzW2ldLT5iby0+ b2Zmc2V0NjQgLSBzdGFydCA+IG1heF9yYW5nZV9zaXplKSB7Ci0JCQltYXhfcmFuZ2Vfc3RhcnQg PSBzdGFydDsKLQkJCW1heF9yYW5nZV9zaXplID0gYnVmc1tpXS0+Ym8tPm9mZnNldDY0IC0gc3Rh cnQ7Ci0JCX0KLQkJc3RhcnQgPSBidWZzW2ldLT5iby0+b2Zmc2V0NjQgKyBidWZzW2ldLT5iby0+ c2l6ZTsKLQl9Ci0KLQlpZiAoc3RhcnQgPCBlbmQgJiYgZW5kIC0gc3RhcnQgPiBtYXhfcmFuZ2Vf c2l6ZSkgewotCQltYXhfcmFuZ2Vfc3RhcnQgPSBzdGFydDsKLQkJbWF4X3JhbmdlX3NpemUgPSBl bmQgLSBzdGFydDsKLQl9Ci0KLQkqcmFuZ2Vfc3RhcnQgPSBtYXhfcmFuZ2Vfc3RhcnQ7Ci0JKnJh bmdlX3NpemUgPSBtYXhfcmFuZ2Vfc2l6ZTsKLX0KLQotc3RhdGljIHVpbnQ2NF90Ci1hdXhfcGd0 YWJsZV9maW5kX2ZyZWVfcmFuZ2UoY29uc3Qgc3RydWN0IGlndF9idWYgKipidWZzLCBpbnQgYnVm X2NvdW50LAotCQkJICAgIHVpbnQzMl90IHNpemUpCi17Ci0JdWludDY0X3QgcmFuZ2Vfc3RhcnQ7 Ci0JdWludDY0X3QgcmFuZ2Vfc2l6ZTsKLQkvKiBBIGNvbXByZXNzZWQgc3VyZmFjZSBtdXN0IGJl IDY0a0IgYWxpZ25lZC4gKi8KLQljb25zdCB1aW50MzJfdCBhbGlnbiA9IDB4MTAwMDA7Ci0JaW50 IHBhZDsKLQotCWF1eF9wZ3RhYmxlX2ZpbmRfbWF4X2ZyZWVfcmFuZ2UoYnVmcywgYnVmX2NvdW50 LAotCQkJCQkmcmFuZ2Vfc3RhcnQsICZyYW5nZV9zaXplKTsKLQotCXBhZCA9IEFMSUdOKHJhbmdl X3N0YXJ0LCBhbGlnbikgLSByYW5nZV9zdGFydDsKLQlyYW5nZV9zdGFydCArPSBwYWQ7Ci0JcmFu Z2Vfc2l6ZSAtPSBwYWQ7Ci0JaWd0X2Fzc2VydChyYW5nZV9zaXplID49IHNpemUpOwotCi0JcmV0 dXJuIHJhbmdlX3N0YXJ0ICsKLQkgICAgICAgQUxJR05fRE9XTihyYW5kKCkgJSAoKHJhbmdlX3Np emUgLSBzaXplKSArIDEpLCBhbGlnbik7CisJcmV0dXJuIGJ1ZjsKIH0KIAogc3RhdGljIHZvaWQK LWF1eF9wZ3RhYmxlX3Jlc2VydmVfcmFuZ2UoY29uc3Qgc3RydWN0IGlndF9idWYgKipidWZzLCBp bnQgYnVmX2NvdW50LAotCQkJICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqbmV3X2J1ZikKK2F1eF9w Z3RhYmxlX3Jlc2VydmVfYnVmX3Nsb3Qoc3RydWN0IGludGVsX2J1ZiAqKmJ1ZnMsIGludCBidWZf Y291bnQsCisJCQkgICAgIHN0cnVjdCBpbnRlbF9idWYgKm5ld19idWYpCiB7CiAJaW50IGk7CiAK LQlpZiAoaWd0X2J1Zl9jb21wcmVzc2VkKG5ld19idWYpKSB7Ci0JCXVpbnQ2NF90IHBpbl9vZmZz ZXQgPSBuZXdfYnVmLT5iby0+b2Zmc2V0NjQ7Ci0KLQkJaWYgKCFwaW5fb2Zmc2V0KQotCQkJcGlu X29mZnNldCA9IGF1eF9wZ3RhYmxlX2ZpbmRfZnJlZV9yYW5nZShidWZzLAotCQkJCQkJCQkgYnVm X2NvdW50LAotCQkJCQkJCQkgbmV3X2J1Zi0+Ym8tPnNpemUpOwotCQlkcm1faW50ZWxfYm9fc2V0 X3NvZnRwaW5fb2Zmc2V0KG5ld19idWYtPmJvLCBwaW5fb2Zmc2V0KTsKLQkJaWd0X2Fzc2VydChu ZXdfYnVmLT5iby0+b2Zmc2V0NjQgPT0gcGluX29mZnNldCk7Ci0JfQotCiAJZm9yIChpID0gMDsg aSA8IGJ1Zl9jb3VudDsgaSsrKQotCQlpZiAoYnVmc1tpXS0+Ym8tPm9mZnNldDY0ID4gbmV3X2J1 Zi0+Ym8tPm9mZnNldDY0KQorCQlpZiAoYnVmc1tpXS0+YWRkci5vZmZzZXQgPiBuZXdfYnVmLT5h ZGRyLm9mZnNldCkKIAkJCWJyZWFrOwogCiAJbWVtbW92ZSgmYnVmc1tpICsgMV0sICZidWZzW2ld LCBzaXplb2YoYnVmc1swXSkgKiAoYnVmX2NvdW50IC0gaSkpOwpAQCAtNTU0LDEwNyArNTA5LDEx NSBAQCBhdXhfcGd0YWJsZV9yZXNlcnZlX3JhbmdlKGNvbnN0IHN0cnVjdCBpZ3RfYnVmICoqYnVm cywgaW50IGJ1Zl9jb3VudCwKIAogdm9pZAogZ2VuMTJfYXV4X3BndGFibGVfaW5pdChzdHJ1Y3Qg YXV4X3BndGFibGVfaW5mbyAqaW5mbywKLQkJICAgICAgIGRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1n ciwKLQkJICAgICAgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpzcmNfYnVmLAotCQkgICAgICAgY29u c3Qgc3RydWN0IGlndF9idWYgKmRzdF9idWYpCisJCSAgICAgICBzdHJ1Y3QgaW50ZWxfYmIgKmli YiwKKwkJICAgICAgIHN0cnVjdCBpbnRlbF9idWYgKnNyY19idWYsCisJCSAgICAgICBzdHJ1Y3Qg aW50ZWxfYnVmICpkc3RfYnVmKQogewotCWNvbnN0IHN0cnVjdCBpZ3RfYnVmICpidWZzWzJdOwot CWNvbnN0IHN0cnVjdCBpZ3RfYnVmICpyZXNlcnZlZF9idWZzWzJdOworCXN0cnVjdCBpbnRlbF9i dWYgKmJ1ZnNbMl07CisJc3RydWN0IGludGVsX2J1ZiAqcmVzZXJ2ZWRfYnVmc1syXTsKIAlpbnQg cmVzZXJ2ZWRfYnVmX2NvdW50OwogCWludCBpOwogCi0JaWYgKCFpZ3RfYnVmX2NvbXByZXNzZWQo c3JjX2J1ZikgJiYgIWlndF9idWZfY29tcHJlc3NlZChkc3RfYnVmKSkKKwlpZ3RfYXNzZXJ0X2Yo aWJiLT5lbmZvcmNlX3JlbG9jcyA9PSBmYWxzZSwKKwkJICAgICAiV2Ugc3VwcG9ydCBhdXggcGd0 YWJsZXMgZm9yIG5vbi1mb3JjZWQgcmVsb2NzIHlldCEiKTsKKworCWlmICghaW50ZWxfYnVmX2Nv bXByZXNzZWQoc3JjX2J1ZikgJiYgIWludGVsX2J1Zl9jb21wcmVzc2VkKGRzdF9idWYpKQogCQly ZXR1cm47CiAKIAlidWZzWzBdID0gc3JjX2J1ZjsKIAlidWZzWzFdID0gZHN0X2J1ZjsKIAogCS8q Ci0JICogSWRlYWxseSB3ZSdkIG5lZWQgYW4gSUdULXdpZGUgR0ZYIGFkZHJlc3Mgc3BhY2UgYWxs b2NhdG9yLCB3aGljaAotCSAqIHdvdWxkIGNvbnNpZGVyIGFsbCBhbGxvY2F0aW9ucyBhbmQgdGh1 cyBhdm9pZCBldmljdGlvbnMuIEZvciBub3cgdXNlCi0JICogYSBzaW1wbGVyIHNjaGVtZSBoZXJl LCB3aGljaCBvbmx5IGNvbnNpZGVycyB0aGUgYnVmZmVycyBpbnZvbHZlZCBpbgotCSAqIHRoZSBi bGl0LCB3aGljaCBzaG91bGQgYXQgbGVhc3QgbWluaW1pemUgdGhlIGNoYW5jZSBmb3IgZXZpY3Rp b25zCi0JICogaW4gdGhlIGNhc2Ugb2Ygc3Vic2VxdWVudCBibGl0czoKLQkgKiAgIDEuIElmIHRo ZXkgd2VyZSBhbHJlYWR5IGJvdW5kIChiby0+b2Zmc2V0NjQgIT0gMCksIHVzZSB0aGlzCi0JICog ICAgICBhZGRyZXNzLgotCSAqICAgMi4gUGljayBhIHJhbmdlIHJhbmRvbWx5IGZyb20gdGhlIDRH QiBhZGRyZXNzIHNwYWNlLCB0aGF0IGlzIG5vdAotCSAqICAgICAgYWxyZWFkeSBvY2N1cGllZCBi eSBhIGJvdW5kIG9iamVjdCwgb3IgYW4gb2JqZWN0IHdlIHBpbm5lZC4KKwkgKiBTdXJmYWNlIGlu ZGV4IGluIHBndCB0YWJsZSBkZXBlbmQgb24gaXRzIGFkZHJlc3Mgc286CisJICogICAxLiBpZiBo YW5kbGUgd2FzIHByZXZpb3VzbHkgZXhlY3V0ZWQgaW4gYmF0Y2ggdXNlIHRoYXQgYWRkcmVzcwor CSAqICAgMi4gYWRkIG9iamVjdCB0byBiYXRjaCwgdGhpcyB3aWxsIGdlbmVyYXRlIHJhbmRvbSBh ZGRyZXNzCisJICoKKwkgKiBSYW5kb21pemluZyBhZGRyZXNzZXMgY2FuIGxlYWQgdG8gb3Zlcmxh cHBpbmcsIGJ1dCB3ZSBkb24ndCBoYXZlCisJICogZ2xvYmFsIGFkZHJlc3Mgc3BhY2UgZ2VuZXJh dG9yIGluIElHVC4gQ3VycmVudGx5IGFzc3VtcHRpb24gaXMKKwkgKiByYW5kb21pemluZyBhZGRy ZXNzIGlzIHNwcmVhZCBvdmVyIDQ4LWJpdCBhZGRyZXNzIHNwYWNlIGVxdWFsbHkKKwkgKiBzbyBy aXNrIHdpdGggb3ZlcmxhcHBpbmcgaXMgbWluaW1hbC4gT2YgY291cnNlIGl0IGlzIGdyb3dpbmcK KwkgKiB3aXRoIG51bWJlciBvZiBvYmplY3RzICgraXRzIHNpemVzKSBpbnZvbHZlZCBpbiBibGl0 LgorCSAqIFRvIGF2b2lkIHJlbG9jYXRpb24gRVhFQ19PQkpFQ1RfUElOTkVEIGZsYWcgaXMgc2V0 IGZvciBjb21wcmVzc2VkCisJICogc3VyZmFjZXMuCiAJICovCisKKwlpbnRlbF9iYl9hZGRfaW50 ZWxfYnVmKGliYiwgc3JjX2J1ZiwgZmFsc2UpOworCWlmIChpbnRlbF9idWZfY29tcHJlc3NlZChz cmNfYnVmKSkKKwkJaW50ZWxfYmJfb2JqZWN0X3NldF9mbGFnKGliYiwgc3JjX2J1Zi0+aGFuZGxl LCBFWEVDX09CSkVDVF9QSU5ORUQpOworCisJaW50ZWxfYmJfYWRkX2ludGVsX2J1ZihpYmIsIGRz dF9idWYsIHRydWUpOworCWlmIChpbnRlbF9idWZfY29tcHJlc3NlZChkc3RfYnVmKSkKKwkJaW50 ZWxfYmJfb2JqZWN0X3NldF9mbGFnKGliYiwgZHN0X2J1Zi0+aGFuZGxlLCBFWEVDX09CSkVDVF9Q SU5ORUQpOworCiAJcmVzZXJ2ZWRfYnVmX2NvdW50ID0gMDsKIAkvKiBGaXJzdCByZXNlcnZlIHNw YWNlIGZvciBhbnkgYnVmcyB0aGF0IGFyZSBib3VuZCBhbHJlYWR5LiAqLwotCWZvciAoaSA9IDA7 IGkgPCBBUlJBWV9TSVpFKGJ1ZnMpOyBpKyspCi0JCWlmIChidWZzW2ldLT5iby0+b2Zmc2V0NjQp Ci0JCQlhdXhfcGd0YWJsZV9yZXNlcnZlX3JhbmdlKHJlc2VydmVkX2J1ZnMsCi0JCQkJCQkgIHJl c2VydmVkX2J1Zl9jb3VudCsrLAotCQkJCQkJICBidWZzW2ldKTsKLQotCS8qIE5leHQsIHJlc2Vy dmUgc3BhY2UgZm9yIHVuYm91bmQgYnVmcyB3aXRoIGFuIEFVWCBzdXJmYWNlLiAqLwotCWZvciAo aSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJ1ZnMpOyBpKyspCi0JCWlmICghYnVmc1tpXS0+Ym8tPm9m ZnNldDY0ICYmIGlndF9idWZfY29tcHJlc3NlZChidWZzW2ldKSkKLQkJCWF1eF9wZ3RhYmxlX3Jl c2VydmVfcmFuZ2UocmVzZXJ2ZWRfYnVmcywKLQkJCQkJCSAgcmVzZXJ2ZWRfYnVmX2NvdW50Kyss Ci0JCQkJCQkgIGJ1ZnNbaV0pOworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGJ1ZnMpOyBp KyspIHsKKwkJaWd0X2Fzc2VydChidWZzW2ldLT5hZGRyLm9mZnNldCAhPSBJTlRFTF9CVUZfSU5W QUxJRF9BRERSRVNTKTsKKwkJYXV4X3BndGFibGVfcmVzZXJ2ZV9idWZfc2xvdChyZXNlcnZlZF9i dWZzLAorCQkJCQkgICAgIHJlc2VydmVkX2J1Zl9jb3VudCsrLAorCQkJCQkgICAgIGJ1ZnNbaV0p OworCX0KIAogCS8qIENyZWF0ZSBBVVggcGd0YWJsZSBlbnRyaWVzIG9ubHkgZm9yIGJ1ZnMgd2l0 aCBhbiBBVVggc3VyZmFjZSAqLwogCWluZm8tPmJ1Zl9jb3VudCA9IDA7CiAJZm9yIChpID0gMDsg aSA8IHJlc2VydmVkX2J1Zl9jb3VudDsgaSsrKSB7Ci0JCWlmICghaWd0X2J1Zl9jb21wcmVzc2Vk KHJlc2VydmVkX2J1ZnNbaV0pKQorCQlpZiAoIWludGVsX2J1Zl9jb21wcmVzc2VkKHJlc2VydmVk X2J1ZnNbaV0pKQogCQkJY29udGludWU7CiAKIAkJaW5mby0+YnVmc1tpbmZvLT5idWZfY291bnRd ID0gcmVzZXJ2ZWRfYnVmc1tpXTsKIAkJaW5mby0+YnVmX3Bpbl9vZmZzZXRzW2luZm8tPmJ1Zl9j b3VudF0gPQotCQkJcmVzZXJ2ZWRfYnVmc1tpXS0+Ym8tPm9mZnNldDY0OworCQkJcmVzZXJ2ZWRf YnVmc1tpXS0+YWRkci5vZmZzZXQ7CisKIAkJaW5mby0+YnVmX2NvdW50Kys7CiAJfQogCi0JaW5m by0+cGd0YWJsZV9ibyA9IGludGVsX2F1eF9wZ3RhYmxlX2NyZWF0ZShidWZtZ3IsCi0JCQkJCQkg ICAgaW5mby0+YnVmcywKLQkJCQkJCSAgICBpbmZvLT5idWZfY291bnQpOwotCWlndF9hc3NlcnQo aW5mby0+cGd0YWJsZV9ibyk7CisJaW5mby0+cGd0YWJsZV9idWYgPSBpbnRlbF9hdXhfcGd0YWJs ZV9jcmVhdGUoaWJiLAorCQkJCQkJICAgICBpbmZvLT5idWZzLAorCQkJCQkJICAgICBpbmZvLT5i dWZfY291bnQpOworCisJaWd0X2Fzc2VydChpbmZvLT5wZ3RhYmxlX2J1Zik7CiB9CiAKIHZvaWQK LWdlbjEyX2F1eF9wZ3RhYmxlX2NsZWFudXAoc3RydWN0IGF1eF9wZ3RhYmxlX2luZm8gKmluZm8p CitnZW4xMl9hdXhfcGd0YWJsZV9jbGVhbnVwKHN0cnVjdCBpbnRlbF9iYiAqaWJiLCBzdHJ1Y3Qg YXV4X3BndGFibGVfaW5mbyAqaW5mbykKIHsKIAlpbnQgaTsKIAogCS8qIENoZWNrIHRoYXQgdGhl IHBpbm5lZCBidWZzIGtlcHQgdGhlaXIgb2Zmc2V0IGFmdGVyIHRoZSBleGVjLiAqLwotCWZvciAo aSA9IDA7IGkgPCBpbmZvLT5idWZfY291bnQ7IGkrKykKLQkJaWd0X2Fzc2VydF9lcV91NjQoaW5m by0+YnVmc1tpXS0+Ym8tPm9mZnNldDY0LAotCQkJCSAgaW5mby0+YnVmX3Bpbl9vZmZzZXRzW2ld KTsKKwlmb3IgKGkgPSAwOyBpIDwgaW5mby0+YnVmX2NvdW50OyBpKyspIHsKKwkJdWludDY0X3Qg YWRkcjsKKworCQlhZGRyID0gaW50ZWxfYmJfZ2V0X29iamVjdF9vZmZzZXQoaWJiLCBpbmZvLT5i dWZzW2ldLT5oYW5kbGUpOworCQlpZ3RfYXNzZXJ0X2VxX3U2NChhZGRyLCBpbmZvLT5idWZfcGlu X29mZnNldHNbaV0pOworCX0KIAotCWRybV9pbnRlbF9ib191bnJlZmVyZW5jZShpbmZvLT5wZ3Rh YmxlX2JvKTsKKwlpZiAoaW5mby0+cGd0YWJsZV9idWYpCisJCWludGVsX2J1Zl9kZXN0cm95KGlu Zm8tPnBndGFibGVfYnVmKTsKIH0KIAogdWludDMyX3QKLWdlbjEyX2NyZWF0ZV9hdXhfcGd0YWJs ZV9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJICAgICAgIGRybV9p bnRlbF9ibyAqYXV4X3BndGFibGVfYm8pCitnZW4xMl9jcmVhdGVfYXV4X3BndGFibGVfc3RhdGUo c3RydWN0IGludGVsX2JiICppYmIsCisJCQkgICAgICAgc3RydWN0IGludGVsX2J1ZiAqYXV4X3Bn dGFibGVfYnVmKQogewogCXVpbnQ2NF90ICpwZ3RhYmxlX3B0cjsKIAl1aW50MzJfdCBwZ3RhYmxl X3B0cl9vZmZzZXQ7Ci0JaW50IHJldDsKIAotCWlmICghYXV4X3BndGFibGVfYm8pCisJaWYgKCFh dXhfcGd0YWJsZV9idWYpCiAJCXJldHVybiAwOwogCi0JcGd0YWJsZV9wdHIgPSBpbnRlbF9iYXRj aGJ1ZmZlcl9zdWJkYXRhX2FsbG9jKGJhdGNoLAotCQkJCQkJICAgICAgc2l6ZW9mKCpwZ3RhYmxl X3B0ciksCi0JCQkJCQkgICAgICBzaXplb2YoKnBndGFibGVfcHRyKSk7Ci0JcGd0YWJsZV9wdHJf b2Zmc2V0ID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9vZmZzZXQoYmF0Y2gsCi0JCQkJCQkJ ICAgICAgcGd0YWJsZV9wdHIpOworCXBndGFibGVfcHRyID0gaW50ZWxfYmJfcHRyKGliYik7CisJ cGd0YWJsZV9wdHJfb2Zmc2V0ID0gaW50ZWxfYmJfb2Zmc2V0KGliYik7CiAKLQkqcGd0YWJsZV9w dHIgPSBhdXhfcGd0YWJsZV9iby0+b2Zmc2V0NjQ7Ci0JcmV0ID0gZHJtX2ludGVsX2JvX2VtaXRf cmVsb2MoYmF0Y2gtPmJvLCBwZ3RhYmxlX3B0cl9vZmZzZXQsCi0JCQkJICAgICAgYXV4X3BndGFi bGVfYm8sIDAsCi0JCQkJICAgICAgMCwgMCk7Ci0JYXNzZXJ0KHJldCA9PSAwKTsKKwkqcGd0YWJs ZV9wdHIgPSBpbnRlbF9iYl9vZmZzZXRfcmVsb2MoaWJiLCBhdXhfcGd0YWJsZV9idWYtPmhhbmRs ZSwKKwkJCQkJICAgICAwLCAwLAorCQkJCQkgICAgIHBndGFibGVfcHRyX29mZnNldCwgLTEpOwor CWludGVsX2JiX3B0cl9hZGQoaWJiLCBzaXplb2YoKnBndGFibGVfcHRyKSk7CiAKIAlyZXR1cm4g cGd0YWJsZV9wdHJfb2Zmc2V0OwogfQogCiB2b2lkCi1nZW4xMl9lbWl0X2F1eF9wZ3RhYmxlX3N0 YXRlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IHN0YXRlLAotCQkJ ICAgICBib29sIHJlbmRlcikKK2dlbjEyX2VtaXRfYXV4X3BndGFibGVfc3RhdGUoc3RydWN0IGlu dGVsX2JiICppYmIsIHVpbnQzMl90IHN0YXRlLCBib29sIHJlbmRlcikKIHsKIAl1aW50MzJfdCB0 YWJsZV9iYXNlX3JlZyA9IHJlbmRlciA/IEdFTjEyX0dGWF9BVVhfVEFCTEVfQkFTRV9BRERSIDoK IAkJCQkJICAgR0VOMTJfVkVCT1hfQVVYX1RBQkxFX0JBU0VfQUREUjsKQEAgLTY2MiwxMSArNjI1 LDExIEBAIGdlbjEyX2VtaXRfYXV4X3BndGFibGVfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVm ZmVyICpiYXRjaCwgdWludDMyX3Qgc3RhdGUsCiAJaWYgKCFzdGF0ZSkKIAkJcmV0dXJuOwogCi0J T1VUX0JBVENIKE1JX0xPQURfUkVHSVNURVJfTUVNX0dFTjggfCBNSV9NTUlPX1JFTUFQX0VOQUJM RV9HRU4xMik7Ci0JT1VUX0JBVENIKHRhYmxlX2Jhc2VfcmVnKTsKLQlPVVRfUkVMT0MoYmF0Y2gt PmJvLCAwLCAwLCBzdGF0ZSk7CisJaW50ZWxfYmJfb3V0KGliYiwgTUlfTE9BRF9SRUdJU1RFUl9N RU1fR0VOOCB8IE1JX01NSU9fUkVNQVBfRU5BQkxFX0dFTjEyKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCB0YWJsZV9iYXNlX3JlZyk7CisJaW50ZWxfYmJfZW1pdF9yZWxvYyhpYmIsIGliYi0+aGFuZGxl LCAwLCAwLCBzdGF0ZSwgaWJiLT5iYXRjaF9vZmZzZXQpOwogCi0JT1VUX0JBVENIKE1JX0xPQURf UkVHSVNURVJfTUVNX0dFTjggfCBNSV9NTUlPX1JFTUFQX0VOQUJMRV9HRU4xMik7Ci0JT1VUX0JB VENIKHRhYmxlX2Jhc2VfcmVnICsgNCk7Ci0JT1VUX1JFTE9DKGJhdGNoLT5ibywgMCwgMCwgc3Rh dGUgKyA0KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBNSV9MT0FEX1JFR0lTVEVSX01FTV9HRU44IHwg TUlfTU1JT19SRU1BUF9FTkFCTEVfR0VOMTIpOworCWludGVsX2JiX291dChpYmIsIHRhYmxlX2Jh c2VfcmVnICsgNCk7CisJaW50ZWxfYmJfZW1pdF9yZWxvYyhpYmIsIGliYi0+aGFuZGxlLCAwLCAw LCBzdGF0ZSArIDQsIGliYi0+YmF0Y2hfb2Zmc2V0KTsKIH0KZGlmZiAtLWdpdCBhL2xpYi9pbnRl bF9hdXhfcGd0YWJsZS5oIGIvbGliL2ludGVsX2F1eF9wZ3RhYmxlLmgKaW5kZXggYWM4MmI3ZDIu LmU5OTc2ZTUyIDEwMDY0NAotLS0gYS9saWIvaW50ZWxfYXV4X3BndGFibGUuaAorKysgYi9saWIv aW50ZWxfYXV4X3BndGFibGUuaApAQCAtMSwzNiArMSwzMyBAQAogI2lmbmRlZiBfX0lOVEVMX0FV WF9QR1RBQkxFX0hfXwogI2RlZmluZSBfX0lOVEVMX0FVWF9QR1RBQkxFX0hfXwogCi0jaW5jbHVk ZSAiaW50ZWxfYnVmbWdyLmgiCi0KLXN0cnVjdCBpZ3RfYnVmOwotc3RydWN0IGludGVsX2JhdGNo YnVmZmVyOworI2luY2x1ZGUgImludGVsX2J1Zm9wcy5oIgogCiBzdHJ1Y3QgYXV4X3BndGFibGVf aW5mbyB7CiAJaW50IGJ1Zl9jb3VudDsKLQljb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmc1syXTsK KwlzdHJ1Y3QgaW50ZWxfYnVmICpidWZzWzJdOwogCXVpbnQ2NF90IGJ1Zl9waW5fb2Zmc2V0c1sy XTsKLQlkcm1faW50ZWxfYm8gKnBndGFibGVfYm87CisJc3RydWN0IGludGVsX2J1ZiAqcGd0YWJs ZV9idWY7CiB9OwogCi1kcm1faW50ZWxfYm8gKgotaW50ZWxfYXV4X3BndGFibGVfY3JlYXRlKGRy bV9pbnRlbF9idWZtZ3IgKmJ1Zm1nciwKLQkJCSBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqKmJ1ZnMs IGludCBidWZfY291bnQpOworc3RydWN0IGludGVsX2J1ZiAqCitpbnRlbF9hdXhfcGd0YWJsZV9j cmVhdGUoc3RydWN0IGludGVsX2JiICppYmIsCisJCQkgc3RydWN0IGludGVsX2J1ZiAqKmJ1ZnMs IGludCBidWZfY291bnQpOwogCiB2b2lkCiBnZW4xMl9hdXhfcGd0YWJsZV9pbml0KHN0cnVjdCBh dXhfcGd0YWJsZV9pbmZvICppbmZvLAotCQkgICAgICAgZHJtX2ludGVsX2J1Zm1nciAqYnVmbWdy LAotCQkgICAgICAgY29uc3Qgc3RydWN0IGlndF9idWYgKnNyY19idWYsCi0JCSAgICAgICBjb25z dCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0X2J1Zik7CisJCSAgICAgICBzdHJ1Y3QgaW50ZWxfYmIgKmli YiwKKwkJICAgICAgIHN0cnVjdCBpbnRlbF9idWYgKnNyY19idWYsCisJCSAgICAgICBzdHJ1Y3Qg aW50ZWxfYnVmICpkc3RfYnVmKTsKIAogdm9pZAotZ2VuMTJfYXV4X3BndGFibGVfY2xlYW51cChz dHJ1Y3QgYXV4X3BndGFibGVfaW5mbyAqaW5mbyk7CitnZW4xMl9hdXhfcGd0YWJsZV9jbGVhbnVw KHN0cnVjdCBpbnRlbF9iYiAqaWJiLCBzdHJ1Y3QgYXV4X3BndGFibGVfaW5mbyAqaW5mbyk7CiAK IHVpbnQzMl90Ci1nZW4xMl9jcmVhdGVfYXV4X3BndGFibGVfc3RhdGUoc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCwKLQkJCSAgICAgICBkcm1faW50ZWxfYm8gKmF1eF9wZ3RhYmxlX2Jv KTsKK2dlbjEyX2NyZWF0ZV9hdXhfcGd0YWJsZV9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmIgKmJhdGNo LAorCQkJICAgICAgIHN0cnVjdCBpbnRlbF9idWYgKmF1eF9wZ3RhYmxlX2J1Zik7CiB2b2lkCi1n ZW4xMl9lbWl0X2F1eF9wZ3RhYmxlX3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0 Y2gsIHVpbnQzMl90IHN0YXRlLAorZ2VuMTJfZW1pdF9hdXhfcGd0YWJsZV9zdGF0ZShzdHJ1Y3Qg aW50ZWxfYmIgKmJhdGNoLCB1aW50MzJfdCBzdGF0ZSwKIAkJCSAgICAgYm9vbCByZW5kZXIpOwog CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYi9pbnRlbF9iYXRjaGJ1ZmZlci5oIGIvbGliL2ludGVs X2JhdGNoYnVmZmVyLmgKaW5kZXggY2FhODlkYzYuLjljMTZlMzlmIDEwMDY0NAotLS0gYS9saWIv aW50ZWxfYmF0Y2hidWZmZXIuaAorKysgYi9saWIvaW50ZWxfYmF0Y2hidWZmZXIuaApAQCAtMzE4 LDE0ICszMTgsMTQgQEAgdm9pZCBpZ3RfYmxpdHRlcl9mYXN0X2NvcHlfX3JhdyhpbnQgZmQsCiAK IC8qKgogICogaWd0X3JlbmRlcl9jb3B5ZnVuY190OgotICogQGJhdGNoOiBiYXRjaGJ1ZmZlciBv YmplY3QKLSAqIEBjb250ZXh0OiBsaWJkcm0gaGFyZHdhcmUgY29udGV4dCB0byB1c2UKLSAqIEBz cmM6IHNvdXJjZSBpLWctdCBidWZmZXIgb2JqZWN0CisgKiBAaWJiOiBiYXRjaGJ1ZmZlcgorICog QGN0eDogY29udGV4dCB0byB1c2UKKyAqIEBzcmM6IGludGVsX2J1ZiBzb3VyY2Ugb2JqZWN0CiAg KiBAc3JjX3g6IHNvdXJjZSBwaXhlbCB4LWNvb3JkaW5hdGlvbgogICogQHNyY195OiBzb3VyY2Ug cGl4ZWwgeS1jb29yZGluYXRpb24KICAqIEB3aWR0aDogd2lkdGggb2YgdGhlIGNvcGllZCByZWN0 YW5nbGUKICAqIEBoZWlnaHQ6IGhlaWdodCBvZiB0aGUgY29waWVkIHJlY3RhbmdsZQotICogQGRz dDogZGVzdGluYXRpb24gaS1nLXQgYnVmZmVyIG9iamVjdAorICogQGRzdDogaW50ZWxfYnVmIGRl c3RpbmF0aW9uIG9iamVjdAogICogQGRzdF94OiBkZXN0aW5hdGlvbiBwaXhlbCB4LWNvb3JkaW5h dGlvbgogICogQGRzdF95OiBkZXN0aW5hdGlvbiBwaXhlbCB5LWNvb3JkaW5hdGlvbgogICoKQEAg LTMzNCwyNSArMzM0LDMwIEBAIHZvaWQgaWd0X2JsaXR0ZXJfZmFzdF9jb3B5X19yYXcoaW50IGZk LAogICogaWd0X2dldF9yZW5kZXJfY29weWZ1bmMoKS4KICAqCiAgKiBBIHJlbmRlciBjb3B5IGZ1 bmN0aW9uIHdpbGwgZW1pdCBhIGJhdGNoYnVmZmVyIHRvIHRoZSBrZXJuZWwgd2hpY2ggZXhlY3V0 ZXMKLSAqIHRoZSBzcGVjaWZpZWQgYmxpdCBjb3B5IG9wZXJhdGlvbiB1c2luZyB0aGUgcmVuZGVy IGVuZ2luZS4gQGNvbnRleHQgaXMKLSAqIG9wdGlvbmFsIGFuZCBjYW4gYmUgTlVMTC4KKyAqIHRo ZSBzcGVjaWZpZWQgYmxpdCBjb3B5IG9wZXJhdGlvbiB1c2luZyB0aGUgcmVuZGVyIGVuZ2luZS4g QGN0eCBpcworICogb3B0aW9uYWwgYW5kIGNhbiBiZSAwLgogICovCi10eXBlZGVmIHZvaWQgKCpp Z3RfcmVuZGVyX2NvcHlmdW5jX3QpKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0J CQkJICAgICAgZHJtX2ludGVsX2NvbnRleHQgKmNvbnRleHQsCi0JCQkJICAgICAgY29uc3Qgc3Ry dWN0IGlndF9idWYgKnNyYywgdW5zaWduZWQgc3JjX3gsIHVuc2lnbmVkIHNyY195LAotCQkJCSAg ICAgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsCi0JCQkJICAgICAgY29uc3Qgc3Ry dWN0IGlndF9idWYgKmRzdCwgdW5zaWduZWQgZHN0X3gsIHVuc2lnbmVkIGRzdF95KTsKK3N0cnVj dCBpbnRlbF9iYjsKK3N0cnVjdCBpbnRlbF9idWY7CisKK3R5cGVkZWYgdm9pZCAoKmlndF9yZW5k ZXJfY29weWZ1bmNfdCkoc3RydWN0IGludGVsX2JiICppYmIsCisJCQkJICAgICAgdWludDMyX3Qg Y3R4LAorCQkJCSAgICAgIHN0cnVjdCBpbnRlbF9idWYgKnNyYywKKwkJCQkgICAgICB1aW50MzJf dCBzcmNfeCwgdWludDMyX3Qgc3JjX3ksCisJCQkJICAgICAgdWludDMyX3Qgd2lkdGgsIHVpbnQz Ml90IGhlaWdodCwKKwkJCQkgICAgICBzdHJ1Y3QgaW50ZWxfYnVmICpkc3QsCisJCQkJICAgICAg dWludDMyX3QgZHN0X3gsIHVpbnQzMl90IGRzdF95KTsKIAogaWd0X3JlbmRlcl9jb3B5ZnVuY190 IGlndF9nZXRfcmVuZGVyX2NvcHlmdW5jKGludCBkZXZpZCk7CiAKIAogLyoqCiAgKiBpZ3RfdmVi b3hfY29weWZ1bmNfdDoKLSAqIEBiYXRjaDogYmF0Y2hidWZmZXIgb2JqZWN0Ci0gKiBAc3JjOiBz b3VyY2UgaS1nLXQgYnVmZmVyIG9iamVjdAorICogQGliYjogYmF0Y2hidWZmZXIKKyAqIEBzcmM6 IGludGVsX2J1ZiBzb3VyY2Ugb2JqZWN0CiAgKiBAd2lkdGg6IHdpZHRoIG9mIHRoZSBjb3BpZWQg cmVjdGFuZ2xlCiAgKiBAaGVpZ2h0OiBoZWlnaHQgb2YgdGhlIGNvcGllZCByZWN0YW5nbGUKLSAq IEBkc3Q6IGRlc3RpbmF0aW9uIGktZy10IGJ1ZmZlciBvYmplY3QKKyAqIEBkc3Q6IGludGVsX2J1 ZiBkZXN0aW5hdGlvbiBvYmplY3QKICAqCiAgKiBUaGlzIGlzIHRoZSB0eXBlIG9mIHRoZSBwZXIt cGxhdGZvcm0gdmVib3ggY29weSBmdW5jdGlvbnMuIFRoZQogICogcGxhdGZvcm0tc3BlY2lmaWMg aW1wbGVtZW50YXRpb24gY2FuIGJlIG9idGFpbmVkIGJ5IGNhbGxpbmcKQEAgLTM2MSwxMCArMzY2 LDEwIEBAIGlndF9yZW5kZXJfY29weWZ1bmNfdCBpZ3RfZ2V0X3JlbmRlcl9jb3B5ZnVuYyhpbnQg ZGV2aWQpOwogICogQSB2ZWJveCBjb3B5IGZ1bmN0aW9uIHdpbGwgZW1pdCBhIGJhdGNoYnVmZmVy IHRvIHRoZSBrZXJuZWwgd2hpY2ggZXhlY3V0ZXMKICAqIHRoZSBzcGVjaWZpZWQgYmxpdCBjb3B5 IG9wZXJhdGlvbiB1c2luZyB0aGUgdmVib3ggZW5naW5lLgogICovCi10eXBlZGVmIHZvaWQgKCpp Z3RfdmVib3hfY29weWZ1bmNfdCkoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJ CQkgICAgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpzcmMsCi0JCQkJICAgICB1bnNpZ25lZCB3aWR0 aCwgdW5zaWduZWQgaGVpZ2h0LAotCQkJCSAgICAgY29uc3Qgc3RydWN0IGlndF9idWYgKmRzdCk7 Cit0eXBlZGVmIHZvaWQgKCppZ3RfdmVib3hfY29weWZ1bmNfdCkoc3RydWN0IGludGVsX2JiICpp YmIsCisJCQkJICAgICBzdHJ1Y3QgaW50ZWxfYnVmICpzcmMsCisJCQkJICAgICB1bnNpZ25lZCBp bnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQsCisJCQkJICAgICBzdHJ1Y3QgaW50ZWxfYnVm ICpkc3QpOwogCiBpZ3RfdmVib3hfY29weWZ1bmNfdCBpZ3RfZ2V0X3ZlYm94X2NvcHlmdW5jKGlu dCBkZXZpZCk7CiAKQEAgLTM4NSw3ICszOTAsNiBAQCBpZ3RfdmVib3hfY29weWZ1bmNfdCBpZ3Rf Z2V0X3ZlYm94X2NvcHlmdW5jKGludCBkZXZpZCk7CiAgKiBBIGZpbGwgZnVuY3Rpb24gd2lsbCBl bWl0IGEgYmF0Y2hidWZmZXIgdG8gdGhlIGtlcm5lbCB3aGljaCBleGVjdXRlcwogICogdGhlIHNw ZWNpZmllZCBibGl0IGZpbGwgb3BlcmF0aW9uIHVzaW5nIHRoZSBtZWRpYS9ncGdwdSBlbmdpbmUu CiAgKi8KLXN0cnVjdCBpbnRlbF9idWY7CiB0eXBlZGVmIHZvaWQgKCppZ3RfZmlsbGZ1bmNfdCko aW50IGk5MTUsCiAJCQkgICAgICAgc3RydWN0IGludGVsX2J1ZiAqYnVmLAogCQkJICAgICAgIHVu c2lnbmVkIHgsIHVuc2lnbmVkIHksCmRpZmYgLS1naXQgYS9saWIvcmVuZGVyY29weS5oIGIvbGli L3JlbmRlcmNvcHkuaAppbmRleCBlMDU3N2NhYy4uMWJmODg1OWMgMTAwNjQ0Ci0tLSBhL2xpYi9y ZW5kZXJjb3B5LmgKKysrIGIvbGliL3JlbmRlcmNvcHkuaApAQCAtMSw3MCArMSw3MCBAQAogI2lu Y2x1ZGUgImludGVsX2JhdGNoYnVmZmVyLmgiCiAKIAotc3RhdGljIGlubGluZSB2b2lkIGVtaXRf dmVydGV4XzJzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCitzdGF0aWMgaW5saW5l IHZvaWQgZW1pdF92ZXJ0ZXhfMnMoc3RydWN0IGludGVsX2JiICppYmIsCiAJCQkJICBpbnQxNl90 IHgsIGludDE2X3QgeSkKIHsKLQlPVVRfQkFUQ0goKHVpbnQxNl90KXkgPDwgMTYgfCAodWludDE2 X3QpeCk7CisJaW50ZWxfYmJfb3V0KGliYiwgKHVpbnQzMl90KSB5IDw8IDE2IHwgKHVpbnQzMl90 KSB4KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGVtaXRfdmVydGV4KHN0cnVjdCBpbnRlbF9i YXRjaGJ1ZmZlciAqYmF0Y2gsCitzdGF0aWMgaW5saW5lIHZvaWQgZW1pdF92ZXJ0ZXgoc3RydWN0 IGludGVsX2JiICppYmIsCiAJCQkgICAgICAgZmxvYXQgZikKIHsKIAl1bmlvbiB7IGZsb2F0IGY7 IHVpbnQzMl90IHVpOyB9IHU7CiAJdS5mID0gZjsKLQlPVVRfQkFUQ0godS51aSk7CisJaW50ZWxf YmJfb3V0KGliYiwgdS51aSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBlbWl0X3ZlcnRleF9u b3JtYWxpemVkKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCitzdGF0aWMgaW5saW5l IHZvaWQgZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChzdHJ1Y3QgaW50ZWxfYmIgKmliYiwKIAkJCQkJ ICBmbG9hdCBmLCBmbG9hdCB0b3RhbCkKIHsKIAl1bmlvbiB7IGZsb2F0IGY7IHVpbnQzMl90IHVp OyB9IHU7CiAJdS5mID0gZiAvIHRvdGFsOwotCU9VVF9CQVRDSCh1LnVpKTsKKwlpbnRlbF9iYl9v dXQoaWJiLCB1LnVpKTsKIH0KIAotdm9pZCBnZW4xMl9yZW5kZXJfY29weWZ1bmMoc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCSAgIGRybV9pbnRlbF9jb250ZXh0ICpjb250ZXh0 LAotCQkJICAgY29uc3Qgc3RydWN0IGlndF9idWYgKnNyYywgdW5zaWduZWQgc3JjX3gsIHVuc2ln bmVkIHNyY195LAotCQkJICAgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwKLQkJCSAg IGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpkc3QsIHVuc2lnbmVkIGRzdF94LCB1bnNpZ25lZCBkc3Rf eSk7Ci12b2lkIGdlbjExX3JlbmRlcl9jb3B5ZnVuYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoLAotCQkJICBkcm1faW50ZWxfY29udGV4dCAqY29udGV4dCwKLQkJCSAgY29uc3Qgc3Ry dWN0IGlndF9idWYgKnNyYywgdW5zaWduZWQgc3JjX3gsIHVuc2lnbmVkIHNyY195LAotCQkJICB1 bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LAotCQkJICBjb25zdCBzdHJ1Y3QgaWd0X2J1 ZiAqZHN0LCB1bnNpZ25lZCBkc3RfeCwgdW5zaWduZWQgZHN0X3kpOwotdm9pZCBnZW45X3JlbmRl cl9jb3B5ZnVuYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJICBkcm1faW50 ZWxfY29udGV4dCAqY29udGV4dCwKLQkJCSAgY29uc3Qgc3RydWN0IGlndF9idWYgKnNyYywgdW5z aWduZWQgc3JjX3gsIHVuc2lnbmVkIHNyY195LAotCQkJICB1bnNpZ25lZCB3aWR0aCwgdW5zaWdu ZWQgaGVpZ2h0LAotCQkJICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0LCB1bnNpZ25lZCBkc3Rf eCwgdW5zaWduZWQgZHN0X3kpOwotdm9pZCBnZW44X3JlbmRlcl9jb3B5ZnVuYyhzdHJ1Y3QgaW50 ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJICBkcm1faW50ZWxfY29udGV4dCAqY29udGV4dCwK LQkJCSAgY29uc3Qgc3RydWN0IGlndF9idWYgKnNyYywgdW5zaWduZWQgc3JjX3gsIHVuc2lnbmVk IHNyY195LAotCQkJICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LAotCQkJICBjb25z dCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0LCB1bnNpZ25lZCBkc3RfeCwgdW5zaWduZWQgZHN0X3kpOwot dm9pZCBnZW43X3JlbmRlcl9jb3B5ZnVuYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNo LAotCQkJICBkcm1faW50ZWxfY29udGV4dCAqY29udGV4dCwKLQkJCSAgY29uc3Qgc3RydWN0IGln dF9idWYgKnNyYywgdW5zaWduZWQgc3JjX3gsIHVuc2lnbmVkIHNyY195LAotCQkJICB1bnNpZ25l ZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LAotCQkJICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0 LCB1bnNpZ25lZCBkc3RfeCwgdW5zaWduZWQgZHN0X3kpOwotdm9pZCBnZW42X3JlbmRlcl9jb3B5 ZnVuYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJICBkcm1faW50ZWxfY29u dGV4dCAqY29udGV4dCwKLQkJCSAgY29uc3Qgc3RydWN0IGlndF9idWYgKnNyYywgdW5zaWduZWQg c3JjX3gsIHVuc2lnbmVkIHNyY195LAotCQkJICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVp Z2h0LAotCQkJICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0LCB1bnNpZ25lZCBkc3RfeCwgdW5z aWduZWQgZHN0X3kpOwotdm9pZCBnZW40X3JlbmRlcl9jb3B5ZnVuYyhzdHJ1Y3QgaW50ZWxfYmF0 Y2hidWZmZXIgKmJhdGNoLAotCQkJICBkcm1faW50ZWxfY29udGV4dCAqY29udGV4dCwKLQkJCSAg Y29uc3Qgc3RydWN0IGlndF9idWYgKnNyYywgdW5zaWduZWQgc3JjX3gsIHVuc2lnbmVkIHNyY195 LAotCQkJICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LAotCQkJICBjb25zdCBzdHJ1 Y3QgaWd0X2J1ZiAqZHN0LCB1bnNpZ25lZCBkc3RfeCwgdW5zaWduZWQgZHN0X3kpOwotdm9pZCBn ZW4zX3JlbmRlcl9jb3B5ZnVuYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJ ICBkcm1faW50ZWxfY29udGV4dCAqY29udGV4dCwKLQkJCSAgY29uc3Qgc3RydWN0IGlndF9idWYg KnNyYywgdW5zaWduZWQgc3JjX3gsIHVuc2lnbmVkIHNyY195LAotCQkJICB1bnNpZ25lZCB3aWR0 aCwgdW5zaWduZWQgaGVpZ2h0LAotCQkJICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0LCB1bnNp Z25lZCBkc3RfeCwgdW5zaWduZWQgZHN0X3kpOwotdm9pZCBnZW4yX3JlbmRlcl9jb3B5ZnVuYyhz dHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJICBkcm1faW50ZWxfY29udGV4dCAq Y29udGV4dCwKLQkJCSAgY29uc3Qgc3RydWN0IGlndF9idWYgKnNyYywgdW5zaWduZWQgc3JjX3gs IHVuc2lnbmVkIHNyY195LAotCQkJICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LAot CQkJICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0LCB1bnNpZ25lZCBkc3RfeCwgdW5zaWduZWQg ZHN0X3kpOwordm9pZCBnZW4xMl9yZW5kZXJfY29weWZ1bmMoc3RydWN0IGludGVsX2JiICppYmIs CisJCQkgICB1aW50MzJfdCBjdHgsCisJCQkgICBzdHJ1Y3QgaW50ZWxfYnVmICpzcmMsIHVpbnQz Ml90IHNyY194LCB1aW50MzJfdCBzcmNfeSwKKwkJCSAgIHVpbnQzMl90IHdpZHRoLCB1aW50MzJf dCBoZWlnaHQsCisJCQkgICBzdHJ1Y3QgaW50ZWxfYnVmICpkc3QsIHVpbnQzMl90IGRzdF94LCB1 aW50MzJfdCBkc3RfeSk7Cit2b2lkIGdlbjExX3JlbmRlcl9jb3B5ZnVuYyhzdHJ1Y3QgaW50ZWxf YmIgKmliYiwKKwkJCSAgdWludDMyX3QgY3R4LAorCQkJICBzdHJ1Y3QgaW50ZWxfYnVmICpzcmMs IHVpbnQzMl90IHNyY194LCB1aW50MzJfdCBzcmNfeSwKKwkJCSAgdWludDMyX3Qgd2lkdGgsIHVp bnQzMl90IGhlaWdodCwKKwkJCSAgc3RydWN0IGludGVsX2J1ZiAqZHN0LCB1aW50MzJfdCBkc3Rf eCwgdWludDMyX3QgZHN0X3kpOwordm9pZCBnZW45X3JlbmRlcl9jb3B5ZnVuYyhzdHJ1Y3QgaW50 ZWxfYmIgKmliYiwKKwkJCSAgdWludDMyX3QgY3R4LAorCQkJICBzdHJ1Y3QgaW50ZWxfYnVmICpz cmMsIHVpbnQzMl90IHNyY194LCB1aW50MzJfdCBzcmNfeSwKKwkJCSAgdWludDMyX3Qgd2lkdGgs IHVpbnQzMl90IGhlaWdodCwKKwkJCSAgc3RydWN0IGludGVsX2J1ZiAqZHN0LCB1aW50MzJfdCBk c3RfeCwgdWludDMyX3QgZHN0X3kpOwordm9pZCBnZW44X3JlbmRlcl9jb3B5ZnVuYyhzdHJ1Y3Qg aW50ZWxfYmIgKmliYiwKKwkJCSAgdWludDMyX3QgY3R4LAorCQkJICBzdHJ1Y3QgaW50ZWxfYnVm ICpzcmMsIHVpbnQzMl90IHNyY194LCB1aW50MzJfdCBzcmNfeSwKKwkJCSAgdWludDMyX3Qgd2lk dGgsIHVpbnQzMl90IGhlaWdodCwKKwkJCSAgc3RydWN0IGludGVsX2J1ZiAqZHN0LCB1aW50MzJf dCBkc3RfeCwgdWludDMyX3QgZHN0X3kpOwordm9pZCBnZW43X3JlbmRlcl9jb3B5ZnVuYyhzdHJ1 Y3QgaW50ZWxfYmIgKmliYiwKKwkJCSAgdWludDMyX3QgY3R4LAorCQkJICBzdHJ1Y3QgaW50ZWxf YnVmICpzcmMsIHVpbnQzMl90IHNyY194LCB1aW50MzJfdCBzcmNfeSwKKwkJCSAgdWludDMyX3Qg d2lkdGgsIHVpbnQzMl90IGhlaWdodCwKKwkJCSAgc3RydWN0IGludGVsX2J1ZiAqZHN0LCB1aW50 MzJfdCBkc3RfeCwgdWludDMyX3QgZHN0X3kpOwordm9pZCBnZW42X3JlbmRlcl9jb3B5ZnVuYyhz dHJ1Y3QgaW50ZWxfYmIgKmliYiwKKwkJCSAgdWludDMyX3QgY3R4LAorCQkJICBzdHJ1Y3QgaW50 ZWxfYnVmICpzcmMsIHVpbnQzMl90IHNyY194LCB1aW50MzJfdCBzcmNfeSwKKwkJCSAgdWludDMy X3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwKKwkJCSAgc3RydWN0IGludGVsX2J1ZiAqZHN0LCB1 aW50MzJfdCBkc3RfeCwgdWludDMyX3QgZHN0X3kpOwordm9pZCBnZW40X3JlbmRlcl9jb3B5ZnVu YyhzdHJ1Y3QgaW50ZWxfYmIgKmliYiwKKwkJCSAgdWludDMyX3QgY3R4LAorCQkJICBzdHJ1Y3Qg aW50ZWxfYnVmICpzcmMsIHVpbnQzMl90IHNyY194LCB1aW50MzJfdCBzcmNfeSwKKwkJCSAgdWlu dDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwKKwkJCSAgc3RydWN0IGludGVsX2J1ZiAqZHN0 LCB1aW50MzJfdCBkc3RfeCwgdWludDMyX3QgZHN0X3kpOwordm9pZCBnZW4zX3JlbmRlcl9jb3B5 ZnVuYyhzdHJ1Y3QgaW50ZWxfYmIgKmliYiwKKwkJCSAgdWludDMyX3QgY3R4LAorCQkJICBzdHJ1 Y3QgaW50ZWxfYnVmICpzcmMsIHVpbnQzMl90IHNyY194LCB1aW50MzJfdCBzcmNfeSwKKwkJCSAg dWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwKKwkJCSAgc3RydWN0IGludGVsX2J1ZiAq ZHN0LCB1aW50MzJfdCBkc3RfeCwgdWludDMyX3QgZHN0X3kpOwordm9pZCBnZW4yX3JlbmRlcl9j b3B5ZnVuYyhzdHJ1Y3QgaW50ZWxfYmIgKmliYiwKKwkJCSAgdWludDMyX3QgY3R4LAorCQkJICBz dHJ1Y3QgaW50ZWxfYnVmICpzcmMsIHVpbnQzMl90IHNyY194LCB1aW50MzJfdCBzcmNfeSwKKwkJ CSAgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwKKwkJCSAgc3RydWN0IGludGVsX2J1 ZiAqZHN0LCB1aW50MzJfdCBkc3RfeCwgdWludDMyX3QgZHN0X3kpOwpkaWZmIC0tZ2l0IGEvbGli L3JlbmRlcmNvcHlfZ2VuNC5jIGIvbGliL3JlbmRlcmNvcHlfZ2VuNC5jCmluZGV4IDQxM2UzMzU3 Li4yNzkwNjdjZSAxMDA2NDQKLS0tIGEvbGliL3JlbmRlcmNvcHlfZ2VuNC5jCisrKyBiL2xpYi9y ZW5kZXJjb3B5X2dlbjQuYwpAQCAtMiw2ICsyLDcgQEAKICNpbmNsdWRlICJpbnRlbF9jaGlwc2V0 LmgiCiAjaW5jbHVkZSAiZ2VuNF9yZW5kZXIuaCIKICNpbmNsdWRlICJzdXJmYWNlZm9ybWF0Lmgi CisjaW5jbHVkZSAiaW50ZWxfYnVmb3BzLmgiCiAKICNpbmNsdWRlIDxhc3NlcnQuaD4KIApAQCAt ODAsMTggKzgxLDEzIEBAIHN0YXRpYyBjb25zdCB1aW50MzJfdCBnZW41X3BzX2tlcm5lbF9ub21h c2tfYWZmaW5lW11bNF0gPSB7CiB9OwogCiBzdGF0aWMgdWludDMyX3QKLWJhdGNoX3VzZWQoc3Ry dWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2JhdGNoX3JvdW5kX3VwdG8oc3RydWN0IGlu dGVsX2JiICppYmIsIHVpbnQzMl90IGRpdmlzb3IpCiB7Ci0JcmV0dXJuIGJhdGNoLT5wdHIgLSBi YXRjaC0+YnVmZmVyOwotfQotCi1zdGF0aWMgdWludDMyX3QKLWJhdGNoX3JvdW5kX3VwdG8oc3Ry dWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgZGl2aXNvcikKLXsKLQl1aW50 MzJfdCBvZmZzZXQgPSBiYXRjaF91c2VkKGJhdGNoKTsKKwl1aW50MzJfdCBvZmZzZXQgPSBpbnRl bF9iYl9vZmZzZXQoaWJiKTsKIAogCW9mZnNldCA9IChvZmZzZXQgKyBkaXZpc29yIC0gMSkgLyBk aXZpc29yICogZGl2aXNvcjsKLQliYXRjaC0+cHRyID0gYmF0Y2gtPmJ1ZmZlciArIG9mZnNldDsK KwlpbnRlbF9iYl9wdHJfc2V0KGliYiwgb2Zmc2V0KTsKKwogCXJldHVybiBvZmZzZXQ7CiB9CiAK QEAgLTEyMCwzMCArMTE2LDE2IEBAIHN0YXRpYyBpbnQgZ2VuNF9tYXhfd21fdGhyZWFkcyh1aW50 MzJfdCBkZXZpZCkKIAlyZXR1cm4gSVNfR0VONShkZXZpZCkgPyA3MiA6IElTX0c0WChkZXZpZCkg PyA1MCA6IDMyOwogfQogCi1zdGF0aWMgdm9pZAotZ2VuNF9yZW5kZXJfZmx1c2goc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJICBkcm1faW50ZWxfY29udGV4dCAqY29udGV4dCwg dWludDMyX3QgYmF0Y2hfZW5kKQotewotCWlndF9hc3NlcnRfZXEoZHJtX2ludGVsX2JvX3N1YmRh dGEoYmF0Y2gtPmJvLAotCQkJCQkgICAwLCA0MDk2LCBiYXRjaC0+YnVmZmVyKSwKLQkJICAgICAg MCk7Ci0JaWd0X2Fzc2VydF9lcShkcm1faW50ZWxfZ2VtX2JvX2NvbnRleHRfZXhlYyhiYXRjaC0+ Ym8sIGNvbnRleHQsCi0JCQkJCQkgICAgYmF0Y2hfZW5kLCAwKSwKLQkJICAgICAgMCk7Ci19Ci0K IHN0YXRpYyB1aW50MzJfdAotZ2VuNF9iaW5kX2J1ZihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoLAotCSAgICAgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpidWYsCi0JICAgICAgaW50IGlz X2RzdCkKK2dlbjRfYmluZF9idWYoc3RydWN0IGludGVsX2JiICppYmIsIGNvbnN0IHN0cnVjdCBp bnRlbF9idWYgKmJ1ZiwgaW50IGlzX2RzdCkKIHsKIAlzdHJ1Y3QgZ2VuNF9zdXJmYWNlX3N0YXRl ICpzczsKIAl1aW50MzJfdCB3cml0ZV9kb21haW4sIHJlYWRfZG9tYWluOwotCWludCByZXQ7CisJ dWludDY0X3QgYWRkcmVzczsKIAogCWlndF9hc3NlcnRfbHRlKGJ1Zi0+c3VyZmFjZVswXS5zdHJp ZGUsIDEyOCoxMDI0KTsKLQlpZ3RfYXNzZXJ0X2x0ZShpZ3RfYnVmX3dpZHRoKGJ1ZiksIDgxOTIp OwotCWlndF9hc3NlcnRfbHRlKGlndF9idWZfaGVpZ2h0KGJ1ZiksIDgxOTIpOworCWlndF9hc3Nl cnRfbHRlKGludGVsX2J1Zl93aWR0aChidWYpLCA4MTkyKTsKKwlpZ3RfYXNzZXJ0X2x0ZShpbnRl bF9idWZfaGVpZ2h0KGJ1ZiksIDgxOTIpOwogCiAJaWYgKGlzX2RzdCkgewogCQl3cml0ZV9kb21h aW4gPSByZWFkX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVI7CkBAIC0xNTIsNyArMTM0 LDcgQEAgZ2VuNF9iaW5kX2J1ZihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAogCQly ZWFkX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9TQU1QTEVSOwogCX0KIAotCXNzID0gaW50ZWxf YmF0Y2hidWZmZXJfc3ViZGF0YV9hbGxvYyhiYXRjaCwgc2l6ZW9mKCpzcyksIDMyKTsKKwlzcyA9 IGludGVsX2JiX3B0cl9hbGlnbihpYmIsIDMyKTsKIAogCXNzLT5zczAuc3VyZmFjZV90eXBlID0g U1VSRkFDRV8yRDsKIAlzd2l0Y2ggKGJ1Zi0+YnBwKSB7CkBAIC0xNjUsMTAyICsxNDcsMTAyIEBA IGdlbjRfYmluZF9idWYoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKIAogCXNzLT5z czAuZGF0YV9yZXR1cm5fZm9ybWF0ID0gU1VSRkFDRVJFVFVSTkZPUk1BVF9GTE9BVDMyOwogCXNz LT5zczAuY29sb3JfYmxlbmQgPSAxOwotCXNzLT5zczEuYmFzZV9hZGRyID0gYnVmLT5iby0+b2Zm c2V0OwogCi0JcmV0ID0gZHJtX2ludGVsX2JvX2VtaXRfcmVsb2MoYmF0Y2gtPmJvLAotCQkJCSAg ICAgIGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCBzcykgKyA0LAotCQkJ CSAgICAgIGJ1Zi0+Ym8sIDAsCi0JCQkJICAgICAgcmVhZF9kb21haW4sIHdyaXRlX2RvbWFpbik7 Ci0JYXNzZXJ0KHJldCA9PSAwKTsKKwlhZGRyZXNzID0gaW50ZWxfYmJfb2Zmc2V0X3JlbG9jKGli YiwgYnVmLT5oYW5kbGUsCisJCQkJCXJlYWRfZG9tYWluLCB3cml0ZV9kb21haW4sCisJCQkJCWlu dGVsX2JiX29mZnNldChpYmIpICsgNCwKKwkJCQkJYnVmLT5hZGRyLm9mZnNldCk7CisJc3MtPnNz MS5iYXNlX2FkZHIgPSAodWludDMyX3QpIGFkZHJlc3M7CiAKLQlzcy0+c3MyLmhlaWdodCA9IGln dF9idWZfaGVpZ2h0KGJ1ZikgLSAxOwotCXNzLT5zczIud2lkdGggID0gaWd0X2J1Zl93aWR0aChi dWYpIC0gMTsKKwlzcy0+c3MyLmhlaWdodCA9IGludGVsX2J1Zl9oZWlnaHQoYnVmKSAtIDE7CisJ c3MtPnNzMi53aWR0aCAgPSBpbnRlbF9idWZfd2lkdGgoYnVmKSAtIDE7CiAJc3MtPnNzMy5waXRj aCAgPSBidWYtPnN1cmZhY2VbMF0uc3RyaWRlIC0gMTsKIAlzcy0+c3MzLnRpbGVkX3N1cmZhY2Ug PSBidWYtPnRpbGluZyAhPSBJOTE1X1RJTElOR19OT05FOwogCXNzLT5zczMudGlsZV93YWxrICAg ICA9IGJ1Zi0+dGlsaW5nID09IEk5MTVfVElMSU5HX1k7CiAKLQlyZXR1cm4gaW50ZWxfYmF0Y2hi dWZmZXJfc3ViZGF0YV9vZmZzZXQoYmF0Y2gsIHNzKTsKKwlyZXR1cm4gaW50ZWxfYmJfcHRyX2Fk ZF9yZXR1cm5fcHJldl9vZmZzZXQoaWJiLCBzaXplb2YoKnNzKSk7CiB9CiAKIHN0YXRpYyB1aW50 MzJfdAotZ2VuNF9iaW5kX3N1cmZhY2VzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gs Ci0JCSAgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpzcmMsCi0JCSAgIGNvbnN0IHN0cnVjdCBpZ3Rf YnVmICpkc3QpCitnZW40X2JpbmRfc3VyZmFjZXMoc3RydWN0IGludGVsX2JiICppYmIsCisJCSAg IGNvbnN0IHN0cnVjdCBpbnRlbF9idWYgKnNyYywKKwkJICAgY29uc3Qgc3RydWN0IGludGVsX2J1 ZiAqZHN0KQogewotCXVpbnQzMl90ICpiaW5kaW5nX3RhYmxlOworCXVpbnQzMl90ICpiaW5kaW5n X3RhYmxlLCBiaW5kaW5nX3RhYmxlX29mZnNldDsKIAotCWJpbmRpbmdfdGFibGUgPSBpbnRlbF9i YXRjaGJ1ZmZlcl9zdWJkYXRhX2FsbG9jKGJhdGNoLCAzMiwgMzIpOworCWJpbmRpbmdfdGFibGUg PSBpbnRlbF9iYl9wdHJfYWxpZ24oaWJiLCAzMik7CisJYmluZGluZ190YWJsZV9vZmZzZXQgPSBp bnRlbF9iYl9wdHJfYWRkX3JldHVybl9wcmV2X29mZnNldChpYmIsIDMyKTsKIAotCWJpbmRpbmdf dGFibGVbMF0gPSBnZW40X2JpbmRfYnVmKGJhdGNoLCBkc3QsIDEpOwotCWJpbmRpbmdfdGFibGVb MV0gPSBnZW40X2JpbmRfYnVmKGJhdGNoLCBzcmMsIDApOworCWJpbmRpbmdfdGFibGVbMF0gPSBn ZW40X2JpbmRfYnVmKGliYiwgZHN0LCAxKTsKKwliaW5kaW5nX3RhYmxlWzFdID0gZ2VuNF9iaW5k X2J1ZihpYmIsIHNyYywgMCk7CiAKLQlyZXR1cm4gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9v ZmZzZXQoYmF0Y2gsIGJpbmRpbmdfdGFibGUpOworCXJldHVybiBiaW5kaW5nX3RhYmxlX29mZnNl dDsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjRfZW1pdF9zaXAoc3RydWN0IGludGVsX2JhdGNoYnVm ZmVyICpiYXRjaCkKK2dlbjRfZW1pdF9zaXAoc3RydWN0IGludGVsX2JiICppYmIpCiB7Ci0JT1VU X0JBVENIKEdFTjRfU1RBVEVfU0lQIHwgKDIgLSAyKSk7Ci0JT1VUX0JBVENIKDApOworCWludGVs X2JiX291dChpYmIsIEdFTjRfU1RBVEVfU0lQIHwgKDIgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGli YiwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW40X2VtaXRfc3RhdGVfYmFzZV9hZGRyZXNzKHN0 cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitnZW40X2VtaXRfc3RhdGVfYmFzZV9hZGRy ZXNzKHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewotCWlmIChJU19HRU41KGJhdGNoLT5kZXZpZCkp IHsKLQkJT1VUX0JBVENIKEdFTjRfU1RBVEVfQkFTRV9BRERSRVNTIHwgKDggLSAyKSk7Ci0JCU9V VF9SRUxPQyhiYXRjaC0+Ym8sIC8qIGdlbmVyYWwgKi8KLQkJCSAgSTkxNV9HRU1fRE9NQUlOX0lO U1RSVUNUSU9OLCAwLAotCQkJICBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQkJT1VUX1JFTE9DKGJh dGNoLT5ibywgLyogc3VyZmFjZSAqLwotCQkJICBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04s IDAsCi0JCQkgIEJBU0VfQUREUkVTU19NT0RJRlkpOwotCQlPVVRfQkFUQ0goMCk7IC8qIG1lZGlh ICovCi0JCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIC8qIGluc3RydWN0aW9uICovCi0JCQkgIEk5MTVf R0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgMCwKLQkJCSAgQkFTRV9BRERSRVNTX01PRElGWSk7CisJ aWYgKElTX0dFTjUoaWJiLT5kZXZpZCkpIHsKKwkJaW50ZWxfYmJfb3V0KGliYiwgR0VONF9TVEFU RV9CQVNFX0FERFJFU1MgfCAoOCAtIDIpKTsKKwkJaW50ZWxfYmJfZW1pdF9yZWxvYyhpYmIsIGli Yi0+aGFuZGxlLCAvKiBnZW5lcmFsICovCisJCQkJICAgIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVD VElPTiwgMCwKKwkJCQkgICAgQkFTRV9BRERSRVNTX01PRElGWSwgaWJiLT5iYXRjaF9vZmZzZXQp OworCQlpbnRlbF9iYl9lbWl0X3JlbG9jKGliYiwgaWJiLT5oYW5kbGUsIC8qIHN1cmZhY2UgKi8K KwkJCQkgICAgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCAwLAorCQkJCSAgICBCQVNFX0FE RFJFU1NfTU9ESUZZLCBpYmItPmJhdGNoX29mZnNldCk7CisJCWludGVsX2JiX291dChpYmIsIDAp OyAvKiBtZWRpYSAqLworCQlpbnRlbF9iYl9lbWl0X3JlbG9jKGliYiwgaWJiLT5oYW5kbGUsIC8q IGluc3RydWN0aW9uICovCisJCQkJICAgIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgMCwK KwkJCQkgICAgQkFTRV9BRERSRVNTX01PRElGWSwgaWJiLT5iYXRjaF9vZmZzZXQpOwogCiAJCS8q IHVwcGVyIGJvdW5kcywgZGlzYWJsZSAqLwotCQlPVVRfQkFUQ0goQkFTRV9BRERSRVNTX01PRElG WSk7IC8qIGdlbmVyYWwgKi8KLQkJT1VUX0JBVENIKDApOyAvKiBtZWRpYSAqLwotCQlPVVRfQkFU Q0goQkFTRV9BRERSRVNTX01PRElGWSk7IC8qIGluc3RydWN0aW9uICovCisJCWludGVsX2JiX291 dChpYmIsIEJBU0VfQUREUkVTU19NT0RJRlkpOyAvKiBnZW5lcmFsICovCisJCWludGVsX2JiX291 dChpYmIsIDApOyAvKiBtZWRpYSAqLworCQlpbnRlbF9iYl9vdXQoaWJiLCBCQVNFX0FERFJFU1Nf TU9ESUZZKTsgLyogaW5zdHJ1Y3Rpb24gKi8KIAl9IGVsc2UgewotCQlPVVRfQkFUQ0goR0VONF9T VEFURV9CQVNFX0FERFJFU1MgfCAoNiAtIDIpKTsKLQkJT1VUX1JFTE9DKGJhdGNoLT5ibywgLyog Z2VuZXJhbCAqLwotCQkJICBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsCi0JCQkgIEJB U0VfQUREUkVTU19NT0RJRlkpOwotCQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCAvKiBzdXJmYWNlICov Ci0JCQkgIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgMCwKLQkJCSAgQkFTRV9BRERSRVNT X01PRElGWSk7Ci0JCU9VVF9CQVRDSCgwKTsgLyogbWVkaWEgKi8KKwkJaW50ZWxfYmJfb3V0KGli YiwgR0VONF9TVEFURV9CQVNFX0FERFJFU1MgfCAoNiAtIDIpKTsKKwkJaW50ZWxfYmJfZW1pdF9y ZWxvYyhpYmIsIGliYi0+aGFuZGxlLCAvKiBnZW5lcmFsICovCisJCQkJICAgIEk5MTVfR0VNX0RP TUFJTl9JTlNUUlVDVElPTiwgMCwKKwkJCQkgICAgQkFTRV9BRERSRVNTX01PRElGWSwgaWJiLT5i YXRjaF9vZmZzZXQpOworCQlpbnRlbF9iYl9lbWl0X3JlbG9jKGliYiwgaWJiLT5oYW5kbGUsIC8q IHN1cmZhY2UgKi8KKwkJCQkgICAgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCAwLAorCQkJ CSAgICBCQVNFX0FERFJFU1NfTU9ESUZZLCBpYmItPmJhdGNoX29mZnNldCk7CisJCWludGVsX2Ji X291dChpYmIsIDApOyAvKiBtZWRpYSAqLwogCiAJCS8qIHVwcGVyIGJvdW5kcywgZGlzYWJsZSAq LwotCQlPVVRfQkFUQ0goQkFTRV9BRERSRVNTX01PRElGWSk7IC8qIGdlbmVyYWwgKi8KLQkJT1VU X0JBVENIKDApOyAvKiBtZWRpYSAqLworCQlpbnRlbF9iYl9vdXQoaWJiLCBCQVNFX0FERFJFU1Nf TU9ESUZZKTsgLyogZ2VuZXJhbCAqLworCQlpbnRlbF9iYl9vdXQoaWJiLCAwKTsgLyogbWVkaWEg Ki8KIAl9CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW40X2VtaXRfcGlwZWxpbmVkX3BvaW50ZXJzKHN0 cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCitnZW40X2VtaXRfcGlwZWxpbmVkX3BvaW50 ZXJzKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAogCQkJICAgICB1aW50MzJfdCB2cywgdWludDMyX3Qg c2YsCiAJCQkgICAgIHVpbnQzMl90IHdtLCB1aW50MzJfdCBjYykKIHsKLQlPVVRfQkFUQ0goR0VO NF8zRFNUQVRFX1BJUEVMSU5FRF9QT0lOVEVSUyB8ICg3IC0gMikpOwotCU9VVF9CQVRDSCh2cyk7 Ci0JT1VUX0JBVENIKEdFTjRfR1NfRElTQUJMRSk7Ci0JT1VUX0JBVENIKEdFTjRfQ0xJUF9ESVNB QkxFKTsKLQlPVVRfQkFUQ0goc2YpOwotCU9VVF9CQVRDSCh3bSk7Ci0JT1VUX0JBVENIKGNjKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCBHRU40XzNEU1RBVEVfUElQRUxJTkVEX1BPSU5URVJTIHwgKDcg LSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgdnMpOworCWludGVsX2JiX291dChpYmIsIEdFTjRf R1NfRElTQUJMRSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONF9DTElQX0RJU0FCTEUpOworCWlu dGVsX2JiX291dChpYmIsIHNmKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCB3bSk7CisJaW50ZWxfYmJf b3V0KGliYiwgY2MpOwogfQogCiBzdGF0aWMgdm9pZAotZ2VuNF9lbWl0X3VyYihzdHJ1Y3QgaW50 ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorZ2VuNF9lbWl0X3VyYihzdHJ1Y3QgaW50ZWxfYmIgKmli YikKIHsKLQlpbnQgdnNfZW50cmllcyA9IGdlbjRfbWF4X3ZzX25yX3VyYl9lbnRyaWVzKGJhdGNo LT5kZXZpZCk7CisJaW50IHZzX2VudHJpZXMgPSBnZW40X21heF92c19ucl91cmJfZW50cmllcyhp YmItPmRldmlkKTsKIAlpbnQgZ3NfZW50cmllcyA9IDA7CiAJaW50IGNsX2VudHJpZXMgPSAwOwot CWludCBzZl9lbnRyaWVzID0gZ2VuNF9tYXhfc2ZfbnJfdXJiX2VudHJpZXMoYmF0Y2gtPmRldmlk KTsKKwlpbnQgc2ZfZW50cmllcyA9IGdlbjRfbWF4X3NmX25yX3VyYl9lbnRyaWVzKGliYi0+ZGV2 aWQpOwogCWludCBjc19lbnRyaWVzID0gMDsKIAogCWludCB1cmJfdnNfZW5kID0gICAgICAgICAg ICAgIHZzX2VudHJpZXMgKiBVUkJfVlNfRU5UUllfU0laRTsKQEAgLTI2OSw5MSArMjUxLDkxIEBA IGdlbjRfZW1pdF91cmIoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKIAlpbnQgdXJi X3NmX2VuZCA9IHVyYl9jbF9lbmQgKyBzZl9lbnRyaWVzICogVVJCX1NGX0VOVFJZX1NJWkU7CiAJ aW50IHVyYl9jc19lbmQgPSB1cmJfc2ZfZW5kICsgY3NfZW50cmllcyAqIFVSQl9DU19FTlRSWV9T SVpFOwogCi0JYXNzZXJ0KHVyYl9jc19lbmQgPD0gZ2VuNF91cmJfc2l6ZShiYXRjaC0+ZGV2aWQp KTsKLQotCWludGVsX2JhdGNoYnVmZmVyX2FsaWduKGJhdGNoLCAxNik7Ci0KLQlPVVRfQkFUQ0go R0VONF9VUkJfRkVOQ0UgfAotCQkgIFVGMF9DU19SRUFMTE9DIHwKLQkJICBVRjBfU0ZfUkVBTExP QyB8Ci0JCSAgVUYwX0NMSVBfUkVBTExPQyB8Ci0JCSAgVUYwX0dTX1JFQUxMT0MgfAotCQkgIFVG MF9WU19SRUFMTE9DIHwKLQkJICAoMyAtIDIpKTsKLQlPVVRfQkFUQ0godXJiX2NsX2VuZCA8PCBV RjFfQ0xJUF9GRU5DRV9TSElGVCB8Ci0JCSAgdXJiX2dzX2VuZCA8PCBVRjFfR1NfRkVOQ0VfU0hJ RlQgfAotCQkgIHVyYl92c19lbmQgPDwgVUYxX1ZTX0ZFTkNFX1NISUZUKTsKLQlPVVRfQkFUQ0go dXJiX2NzX2VuZCA8PCBVRjJfQ1NfRkVOQ0VfU0hJRlQgfAotCQkgIHVyYl9zZl9lbmQgPDwgVUYy X1NGX0ZFTkNFX1NISUZUKTsKLQotCU9VVF9CQVRDSChHRU40X0NTX1VSQl9TVEFURSB8ICgyIC0g MikpOwotCU9VVF9CQVRDSCgoVVJCX0NTX0VOVFJZX1NJWkUgLSAxKSA8PCA0IHwgY3NfZW50cmll cyA8PCAwKTsKKwlhc3NlcnQodXJiX2NzX2VuZCA8PSBnZW40X3VyYl9zaXplKGliYi0+ZGV2aWQp KTsKKworCWludGVsX2JiX3B0cl9hbGlnbihpYmIsIDE2KTsKKworCWludGVsX2JiX291dChpYmIs IEdFTjRfVVJCX0ZFTkNFIHwKKwkJICAgICBVRjBfQ1NfUkVBTExPQyB8CisJCSAgICAgVUYwX1NG X1JFQUxMT0MgfAorCQkgICAgIFVGMF9DTElQX1JFQUxMT0MgfAorCQkgICAgIFVGMF9HU19SRUFM TE9DIHwKKwkJICAgICBVRjBfVlNfUkVBTExPQyB8CisJCSAgICAgKDMgLSAyKSk7CisJaW50ZWxf YmJfb3V0KGliYiwgdXJiX2NsX2VuZCA8PCBVRjFfQ0xJUF9GRU5DRV9TSElGVCB8CisJCSAgICAg dXJiX2dzX2VuZCA8PCBVRjFfR1NfRkVOQ0VfU0hJRlQgfAorCQkgICAgIHVyYl92c19lbmQgPDwg VUYxX1ZTX0ZFTkNFX1NISUZUKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCB1cmJfY3NfZW5kIDw8IFVG Ml9DU19GRU5DRV9TSElGVCB8CisJCSAgICAgdXJiX3NmX2VuZCA8PCBVRjJfU0ZfRkVOQ0VfU0hJ RlQpOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VONF9DU19VUkJfU1RBVEUgfCAoMiAtIDIpKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCAoVVJCX0NTX0VOVFJZX1NJWkUgLSAxKSA8PCA0IHwgY3NfZW50 cmllcyA8PCAwKTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjRfZW1pdF9udWxsX2RlcHRoX2J1ZmZl cihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorZ2VuNF9lbWl0X251bGxfZGVwdGhf YnVmZmVyKHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewotCWlmIChJU19HNFgoYmF0Y2gtPmRldmlk KSB8fCBJU19HRU41KGJhdGNoLT5kZXZpZCkpIHsKLQkJT1VUX0JBVENIKEdFTjRfM0RTVEFURV9E RVBUSF9CVUZGRVIgfCAoNiAtIDIpKTsKLQkJT1VUX0JBVENIKFNVUkZBQ0VfTlVMTCA8PCBHRU40 XzNEU1RBVEVfREVQVEhfQlVGRkVSX1RZUEVfU0hJRlQgfAotCQkJICBHRU40X0RFUFRIRk9STUFU X0QzMl9GTE9BVCA8PCBHRU40XzNEU1RBVEVfREVQVEhfQlVGRkVSX0ZPUk1BVF9TSElGVCk7Ci0J CU9VVF9CQVRDSCgwKTsKLQkJT1VUX0JBVENIKDApOwotCQlPVVRfQkFUQ0goMCk7Ci0JCU9VVF9C QVRDSCgwKTsKKwlpZiAoSVNfRzRYKGliYi0+ZGV2aWQpIHx8IElTX0dFTjUoaWJiLT5kZXZpZCkp IHsKKwkJaW50ZWxfYmJfb3V0KGliYiwgR0VONF8zRFNUQVRFX0RFUFRIX0JVRkZFUiB8ICg2IC0g MikpOworCQlpbnRlbF9iYl9vdXQoaWJiLCBTVVJGQUNFX05VTEwgPDwgR0VONF8zRFNUQVRFX0RF UFRIX0JVRkZFUl9UWVBFX1NISUZUIHwKKwkJCSAgICAgR0VONF9ERVBUSEZPUk1BVF9EMzJfRkxP QVQgPDwgR0VONF8zRFNUQVRFX0RFUFRIX0JVRkZFUl9GT1JNQVRfU0hJRlQpOworCQlpbnRlbF9i Yl9vdXQoaWJiLCAwKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJCWludGVsX2JiX291dChp YmIsIDApOworCQlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIAl9IGVsc2UgewotCQlPVVRfQkFUQ0go R0VONF8zRFNUQVRFX0RFUFRIX0JVRkZFUiB8ICg1IC0gMikpOwotCQlPVVRfQkFUQ0goU1VSRkFD RV9OVUxMIDw8IEdFTjRfM0RTVEFURV9ERVBUSF9CVUZGRVJfVFlQRV9TSElGVCB8Ci0JCQkgIEdF TjRfREVQVEhGT1JNQVRfRDMyX0ZMT0FUIDw8IEdFTjRfM0RTVEFURV9ERVBUSF9CVUZGRVJfRk9S TUFUX1NISUZUKTsKLQkJT1VUX0JBVENIKDApOwotCQlPVVRfQkFUQ0goMCk7Ci0JCU9VVF9CQVRD SCgwKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgR0VONF8zRFNUQVRFX0RFUFRIX0JVRkZFUiB8ICg1 IC0gMikpOworCQlpbnRlbF9iYl9vdXQoaWJiLCBTVVJGQUNFX05VTEwgPDwgR0VONF8zRFNUQVRF X0RFUFRIX0JVRkZFUl9UWVBFX1NISUZUIHwKKwkJCSAgICAgR0VONF9ERVBUSEZPUk1BVF9EMzJf RkxPQVQgPDwgR0VONF8zRFNUQVRFX0RFUFRIX0JVRkZFUl9GT1JNQVRfU0hJRlQpOworCQlpbnRl bF9iYl9vdXQoaWJiLCAwKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJCWludGVsX2JiX291 dChpYmIsIDApOwogCX0KIAotCWlmIChJU19HRU41KGJhdGNoLT5kZXZpZCkpIHsKLQkJT1VUX0JB VENIKEdFTjRfM0RTVEFURV9DTEVBUl9QQVJBTVMgfCAoMiAtIDIpKTsKLQkJT1VUX0JBVENIKDAp OworCWlmIChJU19HRU41KGliYi0+ZGV2aWQpKSB7CisJCWludGVsX2JiX291dChpYmIsIEdFTjRf M0RTVEFURV9DTEVBUl9QQVJBTVMgfCAoMiAtIDIpKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgMCk7 CiAJfQogfQogCiBzdGF0aWMgdm9pZAotZ2VuNF9lbWl0X2ludmFyaWFudChzdHJ1Y3QgaW50ZWxf YmF0Y2hidWZmZXIgKmJhdGNoKQorZ2VuNF9lbWl0X2ludmFyaWFudChzdHJ1Y3QgaW50ZWxfYmIg KmliYikKIHsKLQlPVVRfQkFUQ0goTUlfRkxVU0ggfCBNSV9JTkhJQklUX1JFTkRFUl9DQUNIRV9G TFVTSCk7CisJaW50ZWxfYmJfb3V0KGliYiwgTUlfRkxVU0ggfCBNSV9JTkhJQklUX1JFTkRFUl9D QUNIRV9GTFVTSCk7CiAKLQlpZiAoSVNfR0VONShiYXRjaC0+ZGV2aWQpIHx8IElTX0c0WChiYXRj aC0+ZGV2aWQpKQotCQlPVVRfQkFUQ0goRzRYX1BJUEVMSU5FX1NFTEVDVCB8IFBJUEVMSU5FX1NF TEVDVF8zRCk7CisJaWYgKElTX0dFTjUoaWJiLT5kZXZpZCkgfHwgSVNfRzRYKGliYi0+ZGV2aWQp KQorCQlpbnRlbF9iYl9vdXQoaWJiLCBHNFhfUElQRUxJTkVfU0VMRUNUIHwgUElQRUxJTkVfU0VM RUNUXzNEKTsKIAllbHNlCi0JCU9VVF9CQVRDSChHRU40X1BJUEVMSU5FX1NFTEVDVCB8IFBJUEVM SU5FX1NFTEVDVF8zRCk7CisJCWludGVsX2JiX291dChpYmIsIEdFTjRfUElQRUxJTkVfU0VMRUNU IHwgUElQRUxJTkVfU0VMRUNUXzNEKTsKIH0KIAogc3RhdGljIHVpbnQzMl90Ci1nZW40X2NyZWF0 ZV92c19zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorZ2VuNF9jcmVhdGVf dnNfc3RhdGUoc3RydWN0IGludGVsX2JiICppYmIpCiB7CiAJc3RydWN0IGdlbjRfdnNfc3RhdGUg KnZzOwogCWludCBucl91cmJfZW50cmllczsKIAotCXZzID0gaW50ZWxfYmF0Y2hidWZmZXJfc3Vi ZGF0YV9hbGxvYyhiYXRjaCwgc2l6ZW9mKCp2cyksIDMyKTsKKwl2cyA9IGludGVsX2JiX3B0cl9h bGlnbihpYmIsIDMyKTsKIAogCS8qIFNldCB1cCB0aGUgdmVydGV4IHNoYWRlciB0byBiZSBkaXNh YmxlZCAocGFzc3Rocm91Z2gpICovCi0JbnJfdXJiX2VudHJpZXMgPSBnZW40X21heF92c19ucl91 cmJfZW50cmllcyhiYXRjaC0+ZGV2aWQpOwotCWlmIChJU19HRU41KGJhdGNoLT5kZXZpZCkpCisJ bnJfdXJiX2VudHJpZXMgPSBnZW40X21heF92c19ucl91cmJfZW50cmllcyhpYmItPmRldmlkKTsK KwlpZiAoSVNfR0VONShpYmItPmRldmlkKSkKIAkJbnJfdXJiX2VudHJpZXMgPj49IDI7CiAJdnMt PnZzNC5ucl91cmJfZW50cmllcyA9IG5yX3VyYl9lbnRyaWVzOwogCXZzLT52czQudXJiX2VudHJ5 X2FsbG9jYXRpb25fc2l6ZSA9IFVSQl9WU19FTlRSWV9TSVpFIC0gMTsKIAl2cy0+dnM2LnZzX2Vu YWJsZSA9IDA7CiAJdnMtPnZzNi52ZXJ0X2NhY2hlX2Rpc2FibGUgPSAxOwogCi0JcmV0dXJuIGlu dGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCB2cyk7CisJcmV0dXJuIGludGVs X2JiX3B0cl9hZGRfcmV0dXJuX3ByZXZfb2Zmc2V0KGliYiwgc2l6ZW9mKCp2cykpOwogfQogCiBz dGF0aWMgdWludDMyX3QKLWdlbjRfY3JlYXRlX3NmX3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1 ZmZlciAqYmF0Y2gsCitnZW40X2NyZWF0ZV9zZl9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmIgKmliYiwK IAkJICAgICB1aW50MzJfdCBrZXJuZWwpCiB7CiAJc3RydWN0IGdlbjRfc2Zfc3RhdGUgKnNmOwog Ci0Jc2YgPSBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX2FsbG9jKGJhdGNoLCBzaXplb2YoKnNm KSwgMzIpOworCXNmID0gaW50ZWxfYmJfcHRyX2FsaWduKGliYiwgMzIpOwogCiAJc2YtPnNmMC5n cmZfcmVnX2NvdW50ID0gR0VONF9HUkZfQkxPQ0tTKFNGX0tFUk5FTF9OVU1fR1JGKTsKIAlzZi0+ c2YwLmtlcm5lbF9zdGFydF9wb2ludGVyID0ga2VybmVsID4+IDY7CkBAIC0zNjMsMjUgKzM0NSwy NSBAQCBnZW40X2NyZWF0ZV9zZl9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNo LAogCXNmLT5zZjMudXJiX2VudHJ5X3JlYWRfb2Zmc2V0ID0gMTsKIAlzZi0+c2YzLmRpc3BhdGNo X2dyZl9zdGFydF9yZWcgPSAzOwogCi0Jc2YtPnNmNC5tYXhfdGhyZWFkcyA9IGdlbjRfbWF4X3Nm X3RocmVhZHMoYmF0Y2gtPmRldmlkKSAtIDE7CisJc2YtPnNmNC5tYXhfdGhyZWFkcyA9IGdlbjRf bWF4X3NmX3RocmVhZHMoaWJiLT5kZXZpZCkgLSAxOwogCXNmLT5zZjQudXJiX2VudHJ5X2FsbG9j YXRpb25fc2l6ZSA9IFVSQl9TRl9FTlRSWV9TSVpFIC0gMTsKLQlzZi0+c2Y0Lm5yX3VyYl9lbnRy aWVzID0gZ2VuNF9tYXhfc2ZfbnJfdXJiX2VudHJpZXMoYmF0Y2gtPmRldmlkKTsKKwlzZi0+c2Y0 Lm5yX3VyYl9lbnRyaWVzID0gZ2VuNF9tYXhfc2ZfbnJfdXJiX2VudHJpZXMoaWJiLT5kZXZpZCk7 CiAKIAlzZi0+c2Y2LmN1bGxfbW9kZSA9IEdFTjRfQ1VMTE1PREVfTk9ORTsKIAlzZi0+c2Y2LmRl c3Rfb3JnX3ZiaWFzID0gMHg4OwogCXNmLT5zZjYuZGVzdF9vcmdfaGJpYXMgPSAweDg7CiAKLQly ZXR1cm4gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9vZmZzZXQoYmF0Y2gsIHNmKTsKKwlyZXR1 cm4gaW50ZWxfYmJfcHRyX2FkZF9yZXR1cm5fcHJldl9vZmZzZXQoaWJiLCBzaXplb2YoKnNmKSk7 CiB9CiAKIHN0YXRpYyB1aW50MzJfdAotZ2VuNF9jcmVhdGVfd21fc3RhdGUoc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCwKK2dlbjRfY3JlYXRlX3dtX3N0YXRlKHN0cnVjdCBpbnRlbF9i YiAqaWJiLAogCQkgICAgIHVpbnQzMl90IGtlcm5lbCwKIAkJICAgICB1aW50MzJfdCBzYW1wbGVy KQogewogCXN0cnVjdCBnZW40X3dtX3N0YXRlICp3bTsKIAotCXdtID0gaW50ZWxfYmF0Y2hidWZm ZXJfc3ViZGF0YV9hbGxvYyhiYXRjaCwgc2l6ZW9mKCp3bSksIDMyKTsKKwl3bSA9IGludGVsX2Ji X3B0cl9hbGlnbihpYmIsIDMyKTsKIAogCWFzc2VydCgoa2VybmVsICYgNjMpID09IDApOwogCXdt LT53bTAua2VybmVsX3N0YXJ0X3BvaW50ZXIgPSBrZXJuZWwgPj4gNjsKQEAgLTM5NCw0OCArMzc2 LDQ4IEBAIGdlbjRfY3JlYXRlX3dtX3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0 Y2gsCiAJd20tPndtNC5zYW1wbGVyX3N0YXRlX3BvaW50ZXIgPSBzYW1wbGVyID4+IDU7CiAJd20t PndtNC5zYW1wbGVyX2NvdW50ID0gMTsKIAotCXdtLT53bTUubWF4X3RocmVhZHMgPSBnZW40X21h eF93bV90aHJlYWRzKGJhdGNoLT5kZXZpZCk7CisJd20tPndtNS5tYXhfdGhyZWFkcyA9IGdlbjRf bWF4X3dtX3RocmVhZHMoaWJiLT5kZXZpZCk7CiAJd20tPndtNS50aHJlYWRfZGlzcGF0Y2hfZW5h YmxlID0gMTsKIAl3bS0+d201LmVuYWJsZV8xNl9waXggPSAxOwogCXdtLT53bTUuZWFybHlfZGVw dGhfdGVzdCA9IDE7CiAKLQlpZiAoSVNfR0VONShiYXRjaC0+ZGV2aWQpKQorCWlmIChJU19HRU41 KGliYi0+ZGV2aWQpKQogCQl3bS0+d20xLmJpbmRpbmdfdGFibGVfZW50cnlfY291bnQgPSAwOwog CWVsc2UKIAkJd20tPndtMS5iaW5kaW5nX3RhYmxlX2VudHJ5X2NvdW50ID0gMjsKIAl3bS0+d20z LnVyYl9lbnRyeV9yZWFkX2xlbmd0aCA9IDI7CiAKLQlyZXR1cm4gaW50ZWxfYmF0Y2hidWZmZXJf c3ViZGF0YV9vZmZzZXQoYmF0Y2gsIHdtKTsKKwlyZXR1cm4gaW50ZWxfYmJfcHRyX2FkZF9yZXR1 cm5fcHJldl9vZmZzZXQoaWJiLCBzaXplb2YoKndtKSk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW40 X2VtaXRfYmluZGluZ190YWJsZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorZ2Vu NF9lbWl0X2JpbmRpbmdfdGFibGUoc3RydWN0IGludGVsX2JiICppYmIsCiAJCQl1aW50MzJfdCB3 bV90YWJsZSkKIHsKLQlPVVRfQkFUQ0goR0VONF8zRFNUQVRFX0JJTkRJTkdfVEFCTEVfUE9JTlRF UlMgfCAoNiAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7CQkvKiB2cyAqLwotCU9VVF9CQVRDSCgwKTsJ CS8qIGdzICovCi0JT1VUX0JBVENIKDApOwkJLyogY2xpcCAqLwotCU9VVF9CQVRDSCgwKTsJCS8q IHNmICovCi0JT1VUX0JBVENIKHdtX3RhYmxlKTsgICAgLyogcHMgKi8KKwlpbnRlbF9iYl9vdXQo aWJiLCBHRU40XzNEU1RBVEVfQklORElOR19UQUJMRV9QT0lOVEVSUyB8ICg2IC0gMikpOworCWlu dGVsX2JiX291dChpYmIsIDApOwkJLyogdnMgKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsJCS8q IGdzICovCisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CQkvKiBjbGlwICovCisJaW50ZWxfYmJfb3V0 KGliYiwgMCk7CQkvKiBzZiAqLworCWludGVsX2JiX291dChpYmIsIHdtX3RhYmxlKTsgICAgLyog cHMgKi8KIH0KIAogc3RhdGljIHZvaWQKLWdlbjRfZW1pdF9kcmF3aW5nX3JlY3RhbmdsZShzdHJ1 Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJICAgIGNvbnN0IHN0cnVjdCBpZ3RfYnVm ICpkc3QpCitnZW40X2VtaXRfZHJhd2luZ19yZWN0YW5nbGUoc3RydWN0IGludGVsX2JiICppYmIs CisJCQkgICAgY29uc3Qgc3RydWN0IGludGVsX2J1ZiAqZHN0KQogewotCU9VVF9CQVRDSChHRU40 XzNEU1RBVEVfRFJBV0lOR19SRUNUQU5HTEUgfCAoNCAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0J T1VUX0JBVENIKChpZ3RfYnVmX2hlaWdodChkc3QpIC0gMSkgPDwgMTYgfAotCQkgIChpZ3RfYnVm X3dpZHRoKGRzdCkgLSAxKSk7Ci0JT1VUX0JBVENIKDApOworCWludGVsX2JiX291dChpYmIsIEdF TjRfM0RTVEFURV9EUkFXSU5HX1JFQ1RBTkdMRSB8ICg0IC0gMikpOworCWludGVsX2JiX291dChp YmIsIDApOworCWludGVsX2JiX291dChpYmIsIChpbnRlbF9idWZfaGVpZ2h0KGRzdCkgLSAxKSA8 PCAxNiB8CisJCSAgICAgKGludGVsX2J1Zl93aWR0aChkc3QpIC0gMSkpOworCWludGVsX2JiX291 dChpYmIsIDApOwogfQogCiBzdGF0aWMgdm9pZAotZ2VuNF9lbWl0X3ZlcnRleF9lbGVtZW50cyhz dHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorZ2VuNF9lbWl0X3ZlcnRleF9lbGVtZW50 cyhzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKIAotCWlmIChJU19HRU41KGJhdGNoLT5kZXZpZCkp IHsKKwlpZiAoSVNfR0VONShpYmItPmRldmlkKSkgewogCQkvKiBUaGUgVlVFIGxheW91dAogCQkg KiAgICBkd29yZCAwLTM6IHBhZCAoMC4wLCAwLjAsIDAuMCwgMC4wKSwKIAkJICogICAgZHdvcmQg NC03OiBwb3NpdGlvbiAoeCwgeSwgMS4wLCAxLjApLApAQCAtNDQzLDM0ICs0MjUsMzQgQEAgZ2Vu NF9lbWl0X3ZlcnRleF9lbGVtZW50cyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQog CQkgKgogCQkgKiBkd29yZCA0LTExIGFyZSBmZXRjaGVkIGZyb20gdmVydGV4IGJ1ZmZlcgogCQkg Ki8KLQkJT1VUX0JBVENIKEdFTjRfM0RTVEFURV9WRVJURVhfRUxFTUVOVFMgfCAoMyAqIDIgKyAx IC0gMikpOworCQlpbnRlbF9iYl9vdXQoaWJiLCBHRU40XzNEU1RBVEVfVkVSVEVYX0VMRU1FTlRT IHwgKDMgKiAyICsgMSAtIDIpKTsKIAogCQkvKiBwYWQgKi8KLQkJT1VUX0JBVENIKDAgPDwgR0VO NF9WRTBfVkVSVEVYX0JVRkZFUl9JTkRFWF9TSElGVCB8IEdFTjRfVkUwX1ZBTElEIHwKLQkJCSAg U1VSRkFDRUZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQgPDwgVkUwX0ZPUk1BVF9TSElGVCB8Ci0J CQkgIDAgPDwgVkUwX09GRlNFVF9TSElGVCk7Ci0JCU9VVF9CQVRDSChHRU40X1ZGQ09NUE9ORU5U X1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzBfU0hJRlQgfAotCQkJICBHRU40X1ZGQ09NUE9O RU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzFfU0hJRlQgfAotCQkJICBHRU40X1ZGQ09N UE9ORU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzJfU0hJRlQgfAotCQkJICBHRU40X1ZG Q09NUE9ORU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzNfU0hJRlQpOworCQlpbnRlbF9i Yl9vdXQoaWJiLCAwIDw8IEdFTjRfVkUwX1ZFUlRFWF9CVUZGRVJfSU5ERVhfU0hJRlQgfCBHRU40 X1ZFMF9WQUxJRCB8CisJCQkgICAgIFNVUkZBQ0VGT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUIDw8 IFZFMF9GT1JNQVRfU0hJRlQgfAorCQkJICAgICAwIDw8IFZFMF9PRkZTRVRfU0hJRlQpOworCQlp bnRlbF9iYl9vdXQoaWJiLCBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9O RU5UXzBfU0hJRlQgfAorCQkJICAgICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwgVkUxX1ZG Q09NUE9ORU5UXzFfU0hJRlQgfAorCQkJICAgICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwg VkUxX1ZGQ09NUE9ORU5UXzJfU0hJRlQgfAorCQkJICAgICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JF XzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzNfU0hJRlQpOwogCiAJCS8qIHgseSAqLwotCQlPVVRfQkFU Q0goMCA8PCBHRU40X1ZFMF9WRVJURVhfQlVGRkVSX0lOREVYX1NISUZUIHwgR0VONF9WRTBfVkFM SUQgfAotCQkJICBTVVJGQUNFRk9STUFUX1IxNkcxNl9TU0NBTEVEIDw8IFZFMF9GT1JNQVRfU0hJ RlQgfAotCQkJICAwIDw8IFZFMF9PRkZTRVRfU0hJRlQpOwotCQlPVVRfQkFUQ0goR0VONF9WRkNP TVBPTkVOVF9TVE9SRV9TUkMgPDwgVkUxX1ZGQ09NUE9ORU5UXzBfU0hJRlQgfAotCQkJICBHRU40 X1ZGQ09NUE9ORU5UX1NUT1JFX1NSQyA8PCBWRTFfVkZDT01QT05FTlRfMV9TSElGVCB8Ci0JCQkg IEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMV9GTFQgPDwgVkUxX1ZGQ09NUE9ORU5UXzJfU0hJRlQg fAotCQkJICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzFfRkxUIDw8IFZFMV9WRkNPTVBPTkVOVF8z X1NISUZUKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgMCA8PCBHRU40X1ZFMF9WRVJURVhfQlVGRkVS X0lOREVYX1NISUZUIHwgR0VONF9WRTBfVkFMSUQgfAorCQkJICAgICBTVVJGQUNFRk9STUFUX1Ix NkcxNl9TU0NBTEVEIDw8IFZFMF9GT1JNQVRfU0hJRlQgfAorCQkJICAgICAwIDw8IFZFMF9PRkZT RVRfU0hJRlQpOworCQlpbnRlbF9iYl9vdXQoaWJiLCBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFX1NS QyA8PCBWRTFfVkZDT01QT05FTlRfMF9TSElGVCB8CisJCQkgICAgIEdFTjRfVkZDT01QT05FTlRf U1RPUkVfU1JDIDw8IFZFMV9WRkNPTVBPTkVOVF8xX1NISUZUIHwKKwkJCSAgICAgR0VONF9WRkNP TVBPTkVOVF9TVE9SRV8xX0ZMVCA8PCBWRTFfVkZDT01QT05FTlRfMl9TSElGVCB8CisJCQkgICAg IEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMV9GTFQgPDwgVkUxX1ZGQ09NUE9ORU5UXzNfU0hJRlQp OwogCiAJCS8qIHUwLCB2MCAqLwotCQlPVVRfQkFUQ0goMCA8PCBHRU40X1ZFMF9WRVJURVhfQlVG RkVSX0lOREVYX1NISUZUIHwgR0VONF9WRTBfVkFMSUQgfAotCQkJICBTVVJGQUNFRk9STUFUX1Iz MkczMl9GTE9BVCA8PCBWRTBfRk9STUFUX1NISUZUIHwKLQkJCSAgNCA8PCBWRTBfT0ZGU0VUX1NI SUZUKTsKLQkJT1VUX0JBVENIKEdFTjRfVkZDT01QT05FTlRfU1RPUkVfU1JDIDw8IFZFMV9WRkNP TVBPTkVOVF8wX1NISUZUIHwKLQkJCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV9TUkMgPDwgVkUx X1ZGQ09NUE9ORU5UXzFfU0hJRlQgfAotCQkJICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwg VkUxX1ZGQ09NUE9ORU5UXzJfU0hJRlQgfAotCQkJICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAg PDwgVkUxX1ZGQ09NUE9ORU5UXzNfU0hJRlQpOworCQlpbnRlbF9iYl9vdXQoaWJiLCAwIDw8IEdF TjRfVkUwX1ZFUlRFWF9CVUZGRVJfSU5ERVhfU0hJRlQgfCBHRU40X1ZFMF9WQUxJRCB8CisJCQkg ICAgIFNVUkZBQ0VGT1JNQVRfUjMyRzMyX0ZMT0FUIDw8IFZFMF9GT1JNQVRfU0hJRlQgfAorCQkJ ICAgICA0IDw8IFZFMF9PRkZTRVRfU0hJRlQpOworCQlpbnRlbF9iYl9vdXQoaWJiLCBHRU40X1ZG Q09NUE9ORU5UX1NUT1JFX1NSQyA8PCBWRTFfVkZDT01QT05FTlRfMF9TSElGVCB8CisJCQkgICAg IEdFTjRfVkZDT01QT05FTlRfU1RPUkVfU1JDIDw8IFZFMV9WRkNPTVBPTkVOVF8xX1NISUZUIHwK KwkJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8yX1NI SUZUIHwKKwkJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVO VF8zX1NISUZUKTsKIAl9IGVsc2UgewogCQkvKiBUaGUgVlVFIGxheW91dAogCQkgKiAgICBkd29y ZCAwLTM6IHBvc2l0aW9uICh4LCB5LCAxLjAsIDEuMCksCkBAIC00NzgsOTAgKzQ2MCw4OCBAQCBn ZW40X2VtaXRfdmVydGV4X2VsZW1lbnRzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gp CiAJCSAqCiAJCSAqIGR3b3JkIDAtNyBhcmUgZmV0Y2hlZCBmcm9tIHZlcnRleCBidWZmZXIKIAkJ ICovCi0JCU9VVF9CQVRDSChHRU40XzNEU1RBVEVfVkVSVEVYX0VMRU1FTlRTIHwgKDIgKiAyICsg MSAtIDIpKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgR0VONF8zRFNUQVRFX1ZFUlRFWF9FTEVNRU5U UyB8ICgyICogMiArIDEgLSAyKSk7CiAKIAkJLyogeCx5ICovCi0JCU9VVF9CQVRDSCgwIDw8IEdF TjRfVkUwX1ZFUlRFWF9CVUZGRVJfSU5ERVhfU0hJRlQgfCBHRU40X1ZFMF9WQUxJRCB8Ci0JCQkg IFNVUkZBQ0VGT1JNQVRfUjE2RzE2X1NTQ0FMRUQgPDwgVkUwX0ZPUk1BVF9TSElGVCB8Ci0JCQkg IDAgPDwgVkUwX09GRlNFVF9TSElGVCk7Ci0JCU9VVF9CQVRDSChHRU40X1ZGQ09NUE9ORU5UX1NU T1JFX1NSQyA8PCBWRTFfVkZDT01QT05FTlRfMF9TSElGVCB8Ci0JCQkgIEdFTjRfVkZDT01QT05F TlRfU1RPUkVfU1JDIDw8IFZFMV9WRkNPTVBPTkVOVF8xX1NISUZUIHwKLQkJCSAgR0VONF9WRkNP TVBPTkVOVF9TVE9SRV8xX0ZMVCA8PCBWRTFfVkZDT01QT05FTlRfMl9TSElGVCB8Ci0JCQkgIEdF TjRfVkZDT01QT05FTlRfU1RPUkVfMV9GTFQgPDwgVkUxX1ZGQ09NUE9ORU5UXzNfU0hJRlQgfAot CQkJICA0IDw8IFZFMV9ERVNUSU5BVElPTl9FTEVNRU5UX09GRlNFVF9TSElGVCk7CisJCWludGVs X2JiX291dChpYmIsIDAgPDwgR0VONF9WRTBfVkVSVEVYX0JVRkZFUl9JTkRFWF9TSElGVCB8IEdF TjRfVkUwX1ZBTElEIHwKKwkJCSAgICAgU1VSRkFDRUZPUk1BVF9SMTZHMTZfU1NDQUxFRCA8PCBW RTBfRk9STUFUX1NISUZUIHwKKwkJCSAgICAgMCA8PCBWRTBfT0ZGU0VUX1NISUZUKTsKKwkJaW50 ZWxfYmJfb3V0KGliYiwgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV9TUkMgPDwgVkUxX1ZGQ09NUE9O RU5UXzBfU0hJRlQgfAorCQkJICAgICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFX1NSQyA8PCBWRTFf VkZDT01QT05FTlRfMV9TSElGVCB8CisJCQkgICAgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMV9G TFQgPDwgVkUxX1ZGQ09NUE9ORU5UXzJfU0hJRlQgfAorCQkJICAgICBHRU40X1ZGQ09NUE9ORU5U X1NUT1JFXzFfRkxUIDw8IFZFMV9WRkNPTVBPTkVOVF8zX1NISUZUIHwKKwkJCSAgICAgNCA8PCBW RTFfREVTVElOQVRJT05fRUxFTUVOVF9PRkZTRVRfU0hJRlQpOwogCiAJCS8qIHUwLCB2MCAqLwot CQlPVVRfQkFUQ0goMCA8PCBHRU40X1ZFMF9WRVJURVhfQlVGRkVSX0lOREVYX1NISUZUIHwgR0VO NF9WRTBfVkFMSUQgfAotCQkJICBTVVJGQUNFRk9STUFUX1IzMkczMl9GTE9BVCA8PCBWRTBfRk9S TUFUX1NISUZUIHwKLQkJCSAgNCA8PCBWRTBfT0ZGU0VUX1NISUZUKTsKLQkJT1VUX0JBVENIKEdF TjRfVkZDT01QT05FTlRfU1RPUkVfU1JDIDw8IFZFMV9WRkNPTVBPTkVOVF8wX1NISUZUIHwKLQkJ CSAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV9TUkMgPDwgVkUxX1ZGQ09NUE9ORU5UXzFfU0hJRlQg fAotCQkJICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzJfU0hJ RlQgfAotCQkJICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzNf U0hJRlQgfAotCQkJICA4IDw8IFZFMV9ERVNUSU5BVElPTl9FTEVNRU5UX09GRlNFVF9TSElGVCk7 CisJCWludGVsX2JiX291dChpYmIsIDAgPDwgR0VONF9WRTBfVkVSVEVYX0JVRkZFUl9JTkRFWF9T SElGVCB8IEdFTjRfVkUwX1ZBTElEIHwKKwkJCSAgICAgU1VSRkFDRUZPUk1BVF9SMzJHMzJfRkxP QVQgPDwgVkUwX0ZPUk1BVF9TSElGVCB8CisJCQkgICAgIDQgPDwgVkUwX09GRlNFVF9TSElGVCk7 CisJCWludGVsX2JiX291dChpYmIsIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfU1JDIDw8IFZFMV9W RkNPTVBPTkVOVF8wX1NISUZUIHwKKwkJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV9TUkMg PDwgVkUxX1ZGQ09NUE9ORU5UXzFfU0hJRlQgfAorCQkJICAgICBHRU40X1ZGQ09NUE9ORU5UX1NU T1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzJfU0hJRlQgfAorCQkJICAgICBHRU40X1ZGQ09NUE9O RU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzNfU0hJRlQgfAorCQkJICAgICA4IDw8IFZF MV9ERVNUSU5BVElPTl9FTEVNRU5UX09GRlNFVF9TSElGVCk7CiAJfQogfQogCiBzdGF0aWMgdWlu dDMyX3QKLWdlbjRfY3JlYXRlX2NjX3ZpZXdwb3J0KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gpCitnZW40X2NyZWF0ZV9jY192aWV3cG9ydChzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsK IAlzdHJ1Y3QgZ2VuNF9jY192aWV3cG9ydCAqdnA7CiAKLQl2cCA9IGludGVsX2JhdGNoYnVmZmVy X3N1YmRhdGFfYWxsb2MoYmF0Y2gsIHNpemVvZigqdnApLCAzMik7CisJdnAgPSBpbnRlbF9iYl9w dHJfYWxpZ24oaWJiLCAzMik7CiAKIAl2cC0+bWluX2RlcHRoID0gLTEuZTM1OwogCXZwLT5tYXhf ZGVwdGggPSAxLmUzNTsKIAotCXJldHVybiBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX29mZnNl dChiYXRjaCwgdnApOworCXJldHVybiBpbnRlbF9iYl9wdHJfYWRkX3JldHVybl9wcmV2X29mZnNl dChpYmIsIHNpemVvZigqdnApKTsKIH0KIAogc3RhdGljIHVpbnQzMl90Ci1nZW40X2NyZWF0ZV9j Y19zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorZ2VuNF9jcmVhdGVfY2Nf c3RhdGUoc3RydWN0IGludGVsX2JiICppYmIsCiAJCSAgICAgdWludDMyX3QgY2NfdnApCiB7CiAJ c3RydWN0IGdlbjRfY29sb3JfY2FsY19zdGF0ZSAqY2M7CiAKLQljYyA9IGludGVsX2JhdGNoYnVm ZmVyX3N1YmRhdGFfYWxsb2MoYmF0Y2gsIHNpemVvZigqY2MpLCA2NCk7CisJY2MgPSBpbnRlbF9i Yl9wdHJfYWxpZ24oaWJiLCA2NCk7CiAKIAljYy0+Y2M0LmNjX3ZpZXdwb3J0X3N0YXRlX29mZnNl dCA9IGNjX3ZwOwogCi0JcmV0dXJuIGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJh dGNoLCBjYyk7CisJcmV0dXJuIGludGVsX2JiX3B0cl9hZGRfcmV0dXJuX3ByZXZfb2Zmc2V0KGli Yiwgc2l6ZW9mKCpjYykpOwogfQogCiBzdGF0aWMgdWludDMyX3QKLWdlbjRfY3JlYXRlX3NmX2tl cm5lbChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorZ2VuNF9jcmVhdGVfc2Zfa2Vy bmVsKHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewotCWlmIChJU19HRU41KGJhdGNoLT5kZXZpZCkp Ci0JCXJldHVybiBpbnRlbF9iYXRjaGJ1ZmZlcl9jb3B5X2RhdGEoYmF0Y2gsIGdlbjVfc2Zfa2Vy bmVsX25vbWFzaywKLQkJCQkJCSAgIHNpemVvZihnZW41X3NmX2tlcm5lbF9ub21hc2spLAotCQkJ CQkJICAgNjQpOworCWlmIChJU19HRU41KGliYi0+ZGV2aWQpKQorCQlyZXR1cm4gaW50ZWxfYmJf Y29weV9kYXRhKGliYiwgZ2VuNV9zZl9rZXJuZWxfbm9tYXNrLAorCQkJCQkgIHNpemVvZihnZW41 X3NmX2tlcm5lbF9ub21hc2spLCA2NCk7CiAJZWxzZQotCQlyZXR1cm4gaW50ZWxfYmF0Y2hidWZm ZXJfY29weV9kYXRhKGJhdGNoLCBnZW40X3NmX2tlcm5lbF9ub21hc2ssCi0JCQkJCQkgICBzaXpl b2YoZ2VuNF9zZl9rZXJuZWxfbm9tYXNrKSwKLQkJCQkJCSAgIDY0KTsKKwkJcmV0dXJuIGludGVs X2JiX2NvcHlfZGF0YShpYmIsIGdlbjRfc2Zfa2VybmVsX25vbWFzaywKKwkJCQkJICBzaXplb2Yo Z2VuNF9zZl9rZXJuZWxfbm9tYXNrKSwgNjQpOwogfQogCiBzdGF0aWMgdWludDMyX3QKLWdlbjRf Y3JlYXRlX3BzX2tlcm5lbChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorZ2VuNF9j cmVhdGVfcHNfa2VybmVsKHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewotCWlmIChJU19HRU41KGJh dGNoLT5kZXZpZCkpCi0JCXJldHVybiBpbnRlbF9iYXRjaGJ1ZmZlcl9jb3B5X2RhdGEoYmF0Y2gs IGdlbjVfcHNfa2VybmVsX25vbWFza19hZmZpbmUsCi0JCQkJCQkgICBzaXplb2YoZ2VuNV9wc19r ZXJuZWxfbm9tYXNrX2FmZmluZSksCi0JCQkJCQkgICA2NCk7CisJaWYgKElTX0dFTjUoaWJiLT5k ZXZpZCkpCisJCXJldHVybiBpbnRlbF9iYl9jb3B5X2RhdGEoaWJiLCBnZW41X3BzX2tlcm5lbF9u b21hc2tfYWZmaW5lLAorCQkJCQkgIHNpemVvZihnZW41X3BzX2tlcm5lbF9ub21hc2tfYWZmaW5l KSwKKwkJCQkJICA2NCk7CiAJZWxzZQotCQlyZXR1cm4gaW50ZWxfYmF0Y2hidWZmZXJfY29weV9k YXRhKGJhdGNoLCBnZW40X3BzX2tlcm5lbF9ub21hc2tfYWZmaW5lLAotCQkJCQkJICAgc2l6ZW9m KGdlbjRfcHNfa2VybmVsX25vbWFza19hZmZpbmUpLAotCQkJCQkJICAgNjQpOworCQlyZXR1cm4g aW50ZWxfYmJfY29weV9kYXRhKGliYiwgZ2VuNF9wc19rZXJuZWxfbm9tYXNrX2FmZmluZSwKKwkJ CQkJICBzaXplb2YoZ2VuNF9wc19rZXJuZWxfbm9tYXNrX2FmZmluZSksCisJCQkJCSAgNjQpOwog fQogCiBzdGF0aWMgdWludDMyX3QKLWdlbjRfY3JlYXRlX3NhbXBsZXIoc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCwKK2dlbjRfY3JlYXRlX3NhbXBsZXIoc3RydWN0IGludGVsX2JiICpp YmIsCiAJCSAgICBzYW1wbGVyX2ZpbHRlcl90IGZpbHRlciwKIAkJICAgIHNhbXBsZXJfZXh0ZW5k X3QgZXh0ZW5kKQogewogCXN0cnVjdCBnZW40X3NhbXBsZXJfc3RhdGUgKnNzOwogCi0Jc3MgPSBp bnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX2FsbG9jKGJhdGNoLCBzaXplb2YoKnNzKSwgMzIpOwor CXNzID0gaW50ZWxfYmJfcHRyX2FsaWduKGliYiwgMzIpOwogCiAJc3MtPnNzMC5sb2RfcHJlY2xh bXAgPSBHRU40X0xPRF9QUkVDTEFNUF9PR0w7CiAKQEAgLTYwNiw1MCArNTg2LDUyIEBAIGdlbjRf Y3JlYXRlX3NhbXBsZXIoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKIAkJYnJlYWs7 CiAJfQogCi0JcmV0dXJuIGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCBz cyk7CisJcmV0dXJuIGludGVsX2JiX3B0cl9hZGRfcmV0dXJuX3ByZXZfb2Zmc2V0KGliYiwgc2l6 ZW9mKCpzcykpOwogfQogCi1zdGF0aWMgdm9pZCBnZW40X2VtaXRfdmVydGV4X2J1ZmZlcihzdHJ1 Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorc3RhdGljIHZvaWQgZ2VuNF9lbWl0X3ZlcnRl eF9idWZmZXIoc3RydWN0IGludGVsX2JiICppYmIpCiB7Ci0JT1VUX0JBVENIKEdFTjRfM0RTVEFU RV9WRVJURVhfQlVGRkVSUyB8ICg1IC0gMikpOwotCU9VVF9CQVRDSChHRU40X1ZCMF9WRVJURVhE QVRBIHwKLQkJICAwIDw8IEdFTjRfVkIwX0JVRkZFUl9JTkRFWF9TSElGVCB8Ci0JCSAgVkVSVEVY X1NJWkUgPDwgVkIwX0JVRkZFUl9QSVRDSF9TSElGVCk7Ci0JT1VUX1JFTE9DKGJhdGNoLT5ibywg STkxNV9HRU1fRE9NQUlOX1ZFUlRFWCwgMCwgMCk7Ci0JaWYgKElTX0dFTjUoYmF0Y2gtPmRldmlk KSkKLQkJT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX1ZFUlRFWCwgMCwKLQkJ CSAgYmF0Y2gtPmJvLT5zaXplIC0gMSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONF8zRFNUQVRF X1ZFUlRFWF9CVUZGRVJTIHwgKDUgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONF9WQjBf VkVSVEVYREFUQSB8CisJCSAgICAgMCA8PCBHRU40X1ZCMF9CVUZGRVJfSU5ERVhfU0hJRlQgfAor CQkgICAgIFZFUlRFWF9TSVpFIDw8IFZCMF9CVUZGRVJfUElUQ0hfU0hJRlQpOworCWludGVsX2Ji X2VtaXRfcmVsb2MoaWJiLCBpYmItPmhhbmRsZSwKKwkJCSAgICBJOTE1X0dFTV9ET01BSU5fVkVS VEVYLCAwLCAwLCBpYmItPmJhdGNoX29mZnNldCk7CisJaWYgKElTX0dFTjUoaWJiLT5kZXZpZCkp CisJCWludGVsX2JiX2VtaXRfcmVsb2MoaWJiLCBpYmItPmhhbmRsZSwKKwkJCQkgICAgSTkxNV9H RU1fRE9NQUlOX1ZFUlRFWCwgMCwKKwkJCQkgICAgaWJiLT5zaXplIC0gMSwgaWJiLT5iYXRjaF9v ZmZzZXQpOwogCWVsc2UKLQkJT1VUX0JBVENIKGJhdGNoLT5iby0+c2l6ZSAvIFZFUlRFWF9TSVpF IC0gMSk7Ci0JT1VUX0JBVENIKDApOworCQlpbnRlbF9iYl9vdXQoaWJiLCBpYmItPnNpemUgLyBW RVJURVhfU0laRSAtIDEpOworCWludGVsX2JiX291dChpYmIsIDApOwogfQogCi1zdGF0aWMgdWlu dDMyX3QgZ2VuNF9lbWl0X3ByaW1pdGl2ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNo KQorc3RhdGljIHVpbnQzMl90IGdlbjRfZW1pdF9wcmltaXRpdmUoc3RydWN0IGludGVsX2JiICpp YmIpCiB7CiAJdWludDMyX3Qgb2Zmc2V0OwogCi0JT1VUX0JBVENIKEdFTjRfM0RQUklNSVRJVkUg fAotCQkgIEdFTjRfM0RQUklNSVRJVkVfVkVSVEVYX1NFUVVFTlRJQUwgfAotCQkgIF8zRFBSSU1f UkVDVExJU1QgPDwgR0VONF8zRFBSSU1JVElWRV9UT1BPTE9HWV9TSElGVCB8Ci0JCSAgMCA8PCA5 IHwKLQkJICAoNiAtIDIpKTsKLQlPVVRfQkFUQ0goMyk7CS8qIHZlcnRleCBjb3VudCAqLwotCW9m ZnNldCA9IGJhdGNoX3VzZWQoYmF0Y2gpOwotCU9VVF9CQVRDSCgwKTsJLyogdmVydGV4X2luZGV4 ICovCi0JT1VUX0JBVENIKDEpOwkvKiBzaW5nbGUgaW5zdGFuY2UgKi8KLQlPVVRfQkFUQ0goMCk7 CS8qIHN0YXJ0IGluc3RhbmNlIGxvY2F0aW9uICovCi0JT1VUX0JBVENIKDApOwkvKiBpbmRleCBi dWZmZXIgb2Zmc2V0LCBpZ25vcmVkICovCisJaW50ZWxfYmJfb3V0KGliYiwgR0VONF8zRFBSSU1J VElWRSB8CisJCSAgICAgR0VONF8zRFBSSU1JVElWRV9WRVJURVhfU0VRVUVOVElBTCB8CisJCSAg ICAgXzNEUFJJTV9SRUNUTElTVCA8PCBHRU40XzNEUFJJTUlUSVZFX1RPUE9MT0dZX1NISUZUIHwK KwkJICAgICAwIDw8IDkgfAorCQkgICAgICg2IC0gMikpOworCWludGVsX2JiX291dChpYmIsIDMp OwkvKiB2ZXJ0ZXggY291bnQgKi8KKwlvZmZzZXQgPSBpbnRlbF9iYl9vZmZzZXQoaWJiKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCAwKTsJLyogdmVydGV4X2luZGV4ICovCisJaW50ZWxfYmJfb3V0KGli YiwgMSk7CS8qIHNpbmdsZSBpbnN0YW5jZSAqLworCWludGVsX2JiX291dChpYmIsIDApOwkvKiBz dGFydCBpbnN0YW5jZSBsb2NhdGlvbiAqLworCWludGVsX2JiX291dChpYmIsIDApOwkvKiBpbmRl eCBidWZmZXIgb2Zmc2V0LCBpZ25vcmVkICovCiAKIAlyZXR1cm4gb2Zmc2V0OwogfQogCi12b2lk IGdlbjRfcmVuZGVyX2NvcHlmdW5jKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0J CQkgIGRybV9pbnRlbF9jb250ZXh0ICpjb250ZXh0LAotCQkJICBjb25zdCBzdHJ1Y3QgaWd0X2J1 ZiAqc3JjLAotCQkJICB1bnNpZ25lZCBzcmNfeCwgdW5zaWduZWQgc3JjX3ksCi0JCQkgIHVuc2ln bmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsCi0JCQkgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpk c3QsCi0JCQkgIHVuc2lnbmVkIGRzdF94LCB1bnNpZ25lZCBkc3RfeSkKK3ZvaWQgZ2VuNF9yZW5k ZXJfY29weWZ1bmMoc3RydWN0IGludGVsX2JiICppYmIsCisJCQkgIHVpbnQzMl90IGN0eCwKKwkJ CSAgc3RydWN0IGludGVsX2J1ZiAqc3JjLAorCQkJICB1aW50MzJfdCBzcmNfeCwgdWludDMyX3Qg c3JjX3ksCisJCQkgIHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsCisJCQkgIHN0cnVj dCBpbnRlbF9idWYgKmRzdCwKKwkJCSAgdWludDMyX3QgZHN0X3gsIHVpbnQzMl90IGRzdF95KQog ewogCXVpbnQzMl90IGNjLCBjY192cDsKIAl1aW50MzJfdCB3bSwgd21fc2FtcGxlciwgd21fa2Vy bmVsLCB3bV90YWJsZTsKQEAgLTY1OCw2MCArNjQwLDY3IEBAIHZvaWQgZ2VuNF9yZW5kZXJfY29w eWZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKIAl1aW50MzJfdCBvZmZzZXQs IGJhdGNoX2VuZDsKIAogCWlndF9hc3NlcnQoc3JjLT5icHAgPT0gZHN0LT5icHApOwotCWludGVs X2JhdGNoYnVmZmVyX2ZsdXNoX3dpdGhfY29udGV4dChiYXRjaCwgY29udGV4dCk7CiAKLQliYXRj aC0+cHRyID0gYmF0Y2gtPmJ1ZmZlciArIDEwMjQ7Ci0JaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0 YV9hbGxvYyhiYXRjaCwgNjQsIDY0KTsKKwlpbnRlbF9iYl9mbHVzaF9yZW5kZXJfd2l0aF9jb250 ZXh0KGliYiwgY3R4KTsKIAotCXZzID0gZ2VuNF9jcmVhdGVfdnNfc3RhdGUoYmF0Y2gpOworCWlu dGVsX2JiX2FkZF9pbnRlbF9idWYoaWJiLCBkc3QsIHRydWUpOworCWludGVsX2JiX2FkZF9pbnRl bF9idWYoaWJiLCBzcmMsIGZhbHNlKTsKIAotCXNmX2tlcm5lbCA9IGdlbjRfY3JlYXRlX3NmX2tl cm5lbChiYXRjaCk7Ci0Jc2YgPSBnZW40X2NyZWF0ZV9zZl9zdGF0ZShiYXRjaCwgc2Zfa2VybmVs KTsKKwlpbnRlbF9iYl9wdHJfc2V0KGliYiwgMTAyNCArIDY0KTsKIAotCXdtX3RhYmxlID0gZ2Vu NF9iaW5kX3N1cmZhY2VzKGJhdGNoLCBzcmMsIGRzdCk7Ci0Jd21fa2VybmVsID0gZ2VuNF9jcmVh dGVfcHNfa2VybmVsKGJhdGNoKTsKLQl3bV9zYW1wbGVyID0gZ2VuNF9jcmVhdGVfc2FtcGxlcihi YXRjaCwKKwl2cyA9IGdlbjRfY3JlYXRlX3ZzX3N0YXRlKGliYik7CisKKwlzZl9rZXJuZWwgPSBn ZW40X2NyZWF0ZV9zZl9rZXJuZWwoaWJiKTsKKwlzZiA9IGdlbjRfY3JlYXRlX3NmX3N0YXRlKGli Yiwgc2Zfa2VybmVsKTsKKworCXdtX3RhYmxlID0gZ2VuNF9iaW5kX3N1cmZhY2VzKGliYiwgc3Jj LCBkc3QpOworCXdtX2tlcm5lbCA9IGdlbjRfY3JlYXRlX3BzX2tlcm5lbChpYmIpOworCXdtX3Nh bXBsZXIgPSBnZW40X2NyZWF0ZV9zYW1wbGVyKGliYiwKIAkJCQkJIFNBTVBMRVJfRklMVEVSX05F QVJFU1QsCiAJCQkJCSBTQU1QTEVSX0VYVEVORF9OT05FKTsKLQl3bSA9IGdlbjRfY3JlYXRlX3dt X3N0YXRlKGJhdGNoLCB3bV9rZXJuZWwsIHdtX3NhbXBsZXIpOworCXdtID0gZ2VuNF9jcmVhdGVf d21fc3RhdGUoaWJiLCB3bV9rZXJuZWwsIHdtX3NhbXBsZXIpOworCisJY2NfdnAgPSBnZW40X2Ny ZWF0ZV9jY192aWV3cG9ydChpYmIpOworCWNjID0gZ2VuNF9jcmVhdGVfY2Nfc3RhdGUoaWJiLCBj Y192cCk7CiAKLQljY192cCA9IGdlbjRfY3JlYXRlX2NjX3ZpZXdwb3J0KGJhdGNoKTsKLQljYyA9 IGdlbjRfY3JlYXRlX2NjX3N0YXRlKGJhdGNoLCBjY192cCk7CisJaW50ZWxfYmJfcHRyX3NldChp YmIsIDApOwogCi0JYmF0Y2gtPnB0ciA9IGJhdGNoLT5idWZmZXI7CisJZ2VuNF9lbWl0X2ludmFy aWFudChpYmIpOworCWdlbjRfZW1pdF9zdGF0ZV9iYXNlX2FkZHJlc3MoaWJiKTsKKwlnZW40X2Vt aXRfc2lwKGliYik7CisJZ2VuNF9lbWl0X251bGxfZGVwdGhfYnVmZmVyKGliYik7CiAKLQlnZW40 X2VtaXRfaW52YXJpYW50KGJhdGNoKTsKLQlnZW40X2VtaXRfc3RhdGVfYmFzZV9hZGRyZXNzKGJh dGNoKTsKLQlnZW40X2VtaXRfc2lwKGJhdGNoKTsKLQlnZW40X2VtaXRfbnVsbF9kZXB0aF9idWZm ZXIoYmF0Y2gpOworCWdlbjRfZW1pdF9kcmF3aW5nX3JlY3RhbmdsZShpYmIsIGRzdCk7CisJZ2Vu NF9lbWl0X2JpbmRpbmdfdGFibGUoaWJiLCB3bV90YWJsZSk7CisJZ2VuNF9lbWl0X3ZlcnRleF9l bGVtZW50cyhpYmIpOworCWdlbjRfZW1pdF9waXBlbGluZWRfcG9pbnRlcnMoaWJiLCB2cywgc2Ys IHdtLCBjYyk7CisJZ2VuNF9lbWl0X3VyYihpYmIpOwogCi0JZ2VuNF9lbWl0X2RyYXdpbmdfcmVj dGFuZ2xlKGJhdGNoLCBkc3QpOwotCWdlbjRfZW1pdF9iaW5kaW5nX3RhYmxlKGJhdGNoLCB3bV90 YWJsZSk7Ci0JZ2VuNF9lbWl0X3ZlcnRleF9lbGVtZW50cyhiYXRjaCk7Ci0JZ2VuNF9lbWl0X3Bp cGVsaW5lZF9wb2ludGVycyhiYXRjaCwgdnMsIHNmLCB3bSwgY2MpOwotCWdlbjRfZW1pdF91cmIo YmF0Y2gpOworCWdlbjRfZW1pdF92ZXJ0ZXhfYnVmZmVyKGliYik7CisJb2Zmc2V0ID0gZ2VuNF9l bWl0X3ByaW1pdGl2ZShpYmIpOwogCi0JZ2VuNF9lbWl0X3ZlcnRleF9idWZmZXIoYmF0Y2gpOwot CW9mZnNldCA9IGdlbjRfZW1pdF9wcmltaXRpdmUoYmF0Y2gpOworCWJhdGNoX2VuZCA9IGludGVs X2JiX2VtaXRfYmJlKGliYik7CiAKLQlPVVRfQkFUQ0goTUlfQkFUQ0hfQlVGRkVSX0VORCk7Ci0J YmF0Y2hfZW5kID0gaW50ZWxfYmF0Y2hidWZmZXJfYWxpZ24oYmF0Y2gsIDgpOworCWliYi0+YmF0 Y2hbb2Zmc2V0IC8gc2l6ZW9mKHVpbnQzMl90KV0gPQorCQkJYmF0Y2hfcm91bmRfdXB0byhpYmIs IFZFUlRFWF9TSVpFKS9WRVJURVhfU0laRTsKIAotCSoodWludDMyX3QgKikoYmF0Y2gtPmJ1ZmZl ciArIG9mZnNldCkgPQotCQliYXRjaF9yb3VuZF91cHRvKGJhdGNoLCBWRVJURVhfU0laRSkvVkVS VEVYX1NJWkU7CisJZW1pdF92ZXJ0ZXhfMnMoaWJiLCBkc3RfeCArIHdpZHRoLCBkc3RfeSArIGhl aWdodCk7CisJZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChpYmIsIHNyY194ICsgd2lkdGgsIGludGVs X2J1Zl93aWR0aChzcmMpKTsKKwllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGliYiwgc3JjX3kgKyBo ZWlnaHQsIGludGVsX2J1Zl9oZWlnaHQoc3JjKSk7CiAKLQllbWl0X3ZlcnRleF8ycyhiYXRjaCwg ZHN0X3ggKyB3aWR0aCwgZHN0X3kgKyBoZWlnaHQpOwotCWVtaXRfdmVydGV4X25vcm1hbGl6ZWQo YmF0Y2gsIHNyY194ICsgd2lkdGgsIGlndF9idWZfd2lkdGgoc3JjKSk7Ci0JZW1pdF92ZXJ0ZXhf bm9ybWFsaXplZChiYXRjaCwgc3JjX3kgKyBoZWlnaHQsIGlndF9idWZfaGVpZ2h0KHNyYykpOwor CWVtaXRfdmVydGV4XzJzKGliYiwgZHN0X3gsIGRzdF95ICsgaGVpZ2h0KTsKKwllbWl0X3ZlcnRl eF9ub3JtYWxpemVkKGliYiwgc3JjX3gsIGludGVsX2J1Zl93aWR0aChzcmMpKTsKKwllbWl0X3Zl cnRleF9ub3JtYWxpemVkKGliYiwgc3JjX3kgKyBoZWlnaHQsIGludGVsX2J1Zl9oZWlnaHQoc3Jj KSk7CiAKLQllbWl0X3ZlcnRleF8ycyhiYXRjaCwgZHN0X3gsIGRzdF95ICsgaGVpZ2h0KTsKLQll bWl0X3ZlcnRleF9ub3JtYWxpemVkKGJhdGNoLCBzcmNfeCwgaWd0X2J1Zl93aWR0aChzcmMpKTsK LQllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGJhdGNoLCBzcmNfeSArIGhlaWdodCwgaWd0X2J1Zl9o ZWlnaHQoc3JjKSk7CisJZW1pdF92ZXJ0ZXhfMnMoaWJiLCBkc3RfeCwgZHN0X3kpOworCWVtaXRf dmVydGV4X25vcm1hbGl6ZWQoaWJiLCBzcmNfeCwgaW50ZWxfYnVmX3dpZHRoKHNyYykpOworCWVt aXRfdmVydGV4X25vcm1hbGl6ZWQoaWJiLCBzcmNfeSwgaW50ZWxfYnVmX2hlaWdodChzcmMpKTsK IAotCWVtaXRfdmVydGV4XzJzKGJhdGNoLCBkc3RfeCwgZHN0X3kpOwotCWVtaXRfdmVydGV4X25v cm1hbGl6ZWQoYmF0Y2gsIHNyY194LCBpZ3RfYnVmX3dpZHRoKHNyYykpOwotCWVtaXRfdmVydGV4 X25vcm1hbGl6ZWQoYmF0Y2gsIHNyY195LCBpZ3RfYnVmX2hlaWdodChzcmMpKTsKKwkvKiBQb3Np dGlvbiB0byB2YWxpZCBiYXRjaCBlbmQgcG9zaXRpb24gZm9yIGJhdGNoIHJldXNlICovCisJaW50 ZWxfYmJfcHRyX3NldChpYmIsIGJhdGNoX2VuZCk7CiAKLQlnZW40X3JlbmRlcl9mbHVzaChiYXRj aCwgY29udGV4dCwgYmF0Y2hfZW5kKTsKLQlpbnRlbF9iYXRjaGJ1ZmZlcl9yZXNldChiYXRjaCk7 CisJaW50ZWxfYmJfZXhlY193aXRoX2NvbnRleHQoaWJiLCBiYXRjaF9lbmQsIGN0eCwKKwkJCQkg ICBJOTE1X0VYRUNfREVGQVVMVCB8IEk5MTVfRVhFQ19OT19SRUxPQywKKwkJCQkgICBmYWxzZSk7 CisJaW50ZWxfYmJfcmVzZXQoaWJiLCBmYWxzZSk7CiB9CmRpZmYgLS1naXQgYS9saWIvcmVuZGVy Y29weV9nZW42LmMgYi9saWIvcmVuZGVyY29weV9nZW42LmMKaW5kZXggMTZjYmI2NzkuLjRiN2Vk OTY2IDEwMDY0NAotLS0gYS9saWIvcmVuZGVyY29weV9nZW42LmMKKysrIGIvbGliL3JlbmRlcmNv cHlfZ2VuNi5jCkBAIC0xMiw3ICsxMiw3IEBACiAjaW5jbHVkZSAiZHJtLmgiCiAjaW5jbHVkZSAi aTkxNV9kcm0uaCIKICNpbmNsdWRlICJkcm10ZXN0LmgiCi0jaW5jbHVkZSAiaW50ZWxfYnVmbWdy LmgiCisjaW5jbHVkZSAiaW50ZWxfYnVmb3BzLmgiCiAjaW5jbHVkZSAiaW50ZWxfYmF0Y2hidWZm ZXIuaCIKICNpbmNsdWRlICJpbnRlbF9pby5oIgogI2luY2x1ZGUgInJlbmRlcmNvcHkuaCIKQEAg LTQ5LDM4ICs0OSwyNiBAQCBzdGF0aWMgY29uc3QgdWludDMyX3QgcHNfa2VybmVsX25vbWFza19h ZmZpbmVbXVs0XSA9IHsKIH07CiAKIHN0YXRpYyB1aW50MzJfdAotYmF0Y2hfcm91bmRfdXB0byhz dHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBkaXZpc29yKQorYmF0Y2hf cm91bmRfdXB0byhzdHJ1Y3QgaW50ZWxfYmIgKmliYiwgdWludDMyX3QgZGl2aXNvcikKIHsKLQl1 aW50MzJfdCBvZmZzZXQgPSBiYXRjaC0+cHRyIC0gYmF0Y2gtPmJ1ZmZlcjsKKwl1aW50MzJfdCBv ZmZzZXQgPSBpbnRlbF9iYl9vZmZzZXQoaWJiKTsKIAotCW9mZnNldCA9IChvZmZzZXQgKyBkaXZp c29yLTEpIC8gZGl2aXNvciAqIGRpdmlzb3I7Ci0JYmF0Y2gtPnB0ciA9IGJhdGNoLT5idWZmZXIg KyBvZmZzZXQ7Ci0JcmV0dXJuIG9mZnNldDsKLX0KKwlvZmZzZXQgPSAob2Zmc2V0ICsgZGl2aXNv ciAtIDEpIC8gZGl2aXNvciAqIGRpdmlzb3I7CisJaW50ZWxfYmJfcHRyX3NldChpYmIsIG9mZnNl dCk7CiAKLXN0YXRpYyB2b2lkCi1nZW42X3JlbmRlcl9mbHVzaChzdHJ1Y3QgaW50ZWxfYmF0Y2hi dWZmZXIgKmJhdGNoLAotCQkgIGRybV9pbnRlbF9jb250ZXh0ICpjb250ZXh0LCB1aW50MzJfdCBi YXRjaF9lbmQpCi17Ci0JaWd0X2Fzc2VydF9lcShkcm1faW50ZWxfYm9fc3ViZGF0YShiYXRjaC0+ Ym8sCi0JCQkJCSAgIDAsIDQwOTYsIGJhdGNoLT5idWZmZXIpLAotCQkgICAgICAwKTsKLQlpZ3Rf YXNzZXJ0X2VxKGRybV9pbnRlbF9nZW1fYm9fY29udGV4dF9leGVjKGJhdGNoLT5ibywKLQkJCQkJ CSAgICBjb250ZXh0LCBiYXRjaF9lbmQsIDApLAotCQkgICAgICAwKTsKKwlyZXR1cm4gb2Zmc2V0 OwogfQogCiBzdGF0aWMgdWludDMyX3QKLWdlbjZfYmluZF9idWYoc3RydWN0IGludGVsX2JhdGNo YnVmZmVyICpiYXRjaCwgY29uc3Qgc3RydWN0IGlndF9idWYgKmJ1ZiwKLQkgICAgICBpbnQgaXNf ZHN0KQorZ2VuNl9iaW5kX2J1ZihzdHJ1Y3QgaW50ZWxfYmIgKmliYiwgY29uc3Qgc3RydWN0IGlu dGVsX2J1ZiAqYnVmLCBpbnQgaXNfZHN0KQogewogCXN0cnVjdCBnZW42X3N1cmZhY2Vfc3RhdGUg KnNzOwogCXVpbnQzMl90IHdyaXRlX2RvbWFpbiwgcmVhZF9kb21haW47Ci0JaW50IHJldDsKKwl1 aW50NjRfdCBhZGRyZXNzOwogCiAJaWd0X2Fzc2VydF9sdGUoYnVmLT5zdXJmYWNlWzBdLnN0cmlk ZSwgMTI4KjEwMjQpOwotCWlndF9hc3NlcnRfbHRlKGlndF9idWZfd2lkdGgoYnVmKSwgODE5Mik7 Ci0JaWd0X2Fzc2VydF9sdGUoaWd0X2J1Zl9oZWlnaHQoYnVmKSwgODE5Mik7CisJaWd0X2Fzc2Vy dF9sdGUoaW50ZWxfYnVmX3dpZHRoKGJ1ZiksIDgxOTIpOworCWlndF9hc3NlcnRfbHRlKGludGVs X2J1Zl9oZWlnaHQoYnVmKSwgODE5Mik7CiAKIAlpZiAoaXNfZHN0KSB7CiAJCXdyaXRlX2RvbWFp biA9IHJlYWRfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX1JFTkRFUjsKQEAgLTg5LDcgKzc3LDcg QEAgZ2VuNl9iaW5kX2J1ZihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCBjb25zdCBz dHJ1Y3QgaWd0X2J1ZiAqYnVmLAogCQlyZWFkX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9TQU1Q TEVSOwogCX0KIAotCXNzID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9hbGxvYyhiYXRjaCwg c2l6ZW9mKCpzcyksIDMyKTsKKwlzcyA9IGludGVsX2JiX3B0cl9hbGlnbihpYmIsIDMyKTsKIAlz cy0+c3MwLnN1cmZhY2VfdHlwZSA9IFNVUkZBQ0VfMkQ7CiAKIAlzd2l0Y2ggKGJ1Zi0+YnBwKSB7 CkBAIC0xMDIsMjY1ICs5MCwyNjUgQEAgZ2VuNl9iaW5kX2J1ZihzdHJ1Y3QgaW50ZWxfYmF0Y2hi dWZmZXIgKmJhdGNoLCBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAogCiAJc3MtPnNzMC5kYXRh X3JldHVybl9mb3JtYXQgPSBTVVJGQUNFUkVUVVJORk9STUFUX0ZMT0FUMzI7CiAJc3MtPnNzMC5j b2xvcl9ibGVuZCA9IDE7Ci0Jc3MtPnNzMS5iYXNlX2FkZHIgPSBidWYtPmJvLT5vZmZzZXQ7CiAK LQlyZXQgPSBkcm1faW50ZWxfYm9fZW1pdF9yZWxvYyhiYXRjaC0+Ym8sCi0JCQkJICAgICAgaW50 ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9vZmZzZXQoYmF0Y2gsICZzcy0+c3MxKSwKLQkJCQkgICAg ICBidWYtPmJvLCAwLAotCQkJCSAgICAgIHJlYWRfZG9tYWluLCB3cml0ZV9kb21haW4pOwotCWln dF9hc3NlcnQocmV0ID09IDApOworCWFkZHJlc3MgPSBpbnRlbF9iYl9vZmZzZXRfcmVsb2MoaWJi LCBidWYtPmhhbmRsZSwKKwkJCQkJcmVhZF9kb21haW4sIHdyaXRlX2RvbWFpbiwKKwkJCQkJaW50 ZWxfYmJfb2Zmc2V0KGliYikgKyA0LAorCQkJCQlidWYtPmFkZHIub2Zmc2V0KTsKKwlzcy0+c3Mx LmJhc2VfYWRkciA9ICh1aW50MzJfdCkgYWRkcmVzczsKIAotCXNzLT5zczIuaGVpZ2h0ID0gaWd0 X2J1Zl9oZWlnaHQoYnVmKSAtIDE7Ci0Jc3MtPnNzMi53aWR0aCAgPSBpZ3RfYnVmX3dpZHRoKGJ1 ZikgLSAxOworCXNzLT5zczIuaGVpZ2h0ID0gaW50ZWxfYnVmX2hlaWdodChidWYpIC0gMTsKKwlz cy0+c3MyLndpZHRoICA9IGludGVsX2J1Zl93aWR0aChidWYpIC0gMTsKIAlzcy0+c3MzLnBpdGNo ICA9IGJ1Zi0+c3VyZmFjZVswXS5zdHJpZGUgLSAxOwogCXNzLT5zczMudGlsZWRfc3VyZmFjZSA9 IGJ1Zi0+dGlsaW5nICE9IEk5MTVfVElMSU5HX05PTkU7CiAJc3MtPnNzMy50aWxlX3dhbGsgICAg ID0gYnVmLT50aWxpbmcgPT0gSTkxNV9USUxJTkdfWTsKIAogCXNzLT5zczUubWVtb3J5X29iamVj dF9jb250cm9sID0gR0VONl9NT0NTX1BURTsKIAotCXJldHVybiBpbnRlbF9iYXRjaGJ1ZmZlcl9z dWJkYXRhX29mZnNldChiYXRjaCwgc3MpOworCXJldHVybiBpbnRlbF9iYl9wdHJfYWRkX3JldHVy bl9wcmV2X29mZnNldChpYmIsIHNpemVvZigqc3MpKTsKIH0KIAogc3RhdGljIHVpbnQzMl90Ci1n ZW42X2JpbmRfc3VyZmFjZXMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJICAg Y29uc3Qgc3RydWN0IGlndF9idWYgKnNyYywKLQkJICAgY29uc3Qgc3RydWN0IGlndF9idWYgKmRz dCkKK2dlbjZfYmluZF9zdXJmYWNlcyhzdHJ1Y3QgaW50ZWxfYmIgKmliYiwKKwkJICAgY29uc3Qg c3RydWN0IGludGVsX2J1ZiAqc3JjLAorCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfYnVmICpkc3Qp CiB7Ci0JdWludDMyX3QgKmJpbmRpbmdfdGFibGU7CisJdWludDMyX3QgKmJpbmRpbmdfdGFibGUs IGJpbmRpbmdfdGFibGVfb2Zmc2V0OwogCi0JYmluZGluZ190YWJsZSA9IGludGVsX2JhdGNoYnVm ZmVyX3N1YmRhdGFfYWxsb2MoYmF0Y2gsIDMyLCAzMik7CisJYmluZGluZ190YWJsZSA9IGludGVs X2JiX3B0cl9hbGlnbihpYmIsIDMyKTsKKwliaW5kaW5nX3RhYmxlX29mZnNldCA9IGludGVsX2Ji X3B0cl9hZGRfcmV0dXJuX3ByZXZfb2Zmc2V0KGliYiwgMzIpOwogCi0JYmluZGluZ190YWJsZVsw XSA9IGdlbjZfYmluZF9idWYoYmF0Y2gsIGRzdCwgMSk7Ci0JYmluZGluZ190YWJsZVsxXSA9IGdl bjZfYmluZF9idWYoYmF0Y2gsIHNyYywgMCk7CisJYmluZGluZ190YWJsZVswXSA9IGdlbjZfYmlu ZF9idWYoaWJiLCBkc3QsIDEpOworCWJpbmRpbmdfdGFibGVbMV0gPSBnZW42X2JpbmRfYnVmKGli Yiwgc3JjLCAwKTsKIAotCXJldHVybiBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX29mZnNldChi YXRjaCwgYmluZGluZ190YWJsZSk7CisJcmV0dXJuIGJpbmRpbmdfdGFibGVfb2Zmc2V0OwogfQog CiBzdGF0aWMgdm9pZAotZ2VuNl9lbWl0X3NpcChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJh dGNoKQorZ2VuNl9lbWl0X3NpcChzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKLQlPVVRfQkFUQ0go R0VONF9TVEFURV9TSVAgfCAwKTsKLQlPVVRfQkFUQ0goMCk7CisJaW50ZWxfYmJfb3V0KGliYiwg R0VONF9TVEFURV9TSVAgfCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIH0KIAogc3RhdGlj IHZvaWQKLWdlbjZfZW1pdF91cmIoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2dl bjZfZW1pdF91cmIoc3RydWN0IGludGVsX2JiICppYmIpCiB7Ci0JT1VUX0JBVENIKEdFTjZfM0RT VEFURV9VUkIgfCAoMyAtIDIpKTsKLQlPVVRfQkFUQ0goKDEgLSAxKSA8PCBHRU42XzNEU1RBVEVf VVJCX1ZTX1NJWkVfU0hJRlQgfAotCQkgIDI0IDw8IEdFTjZfM0RTVEFURV9VUkJfVlNfRU5UUklF U19TSElGVCk7IC8qIGF0IGxlYXN0IDI0IG9uIEdFTjYgKi8KLQlPVVRfQkFUQ0goMCA8PCBHRU42 XzNEU1RBVEVfVVJCX0dTX1NJWkVfU0hJRlQgfAotCQkgIDAgPDwgR0VONl8zRFNUQVRFX1VSQl9H U19FTlRSSUVTX1NISUZUKTsgLyogbm8gR1MgdGhyZWFkICovCisJaW50ZWxfYmJfb3V0KGliYiwg R0VONl8zRFNUQVRFX1VSQiB8ICgzIC0gMikpOworCWludGVsX2JiX291dChpYmIsICgxIC0gMSkg PDwgR0VONl8zRFNUQVRFX1VSQl9WU19TSVpFX1NISUZUIHwKKwkJICAgICAyNCA8PCBHRU42XzNE U1RBVEVfVVJCX1ZTX0VOVFJJRVNfU0hJRlQpOyAvKiBhdCBsZWFzdCAyNCBvbiBHRU42ICovCisJ aW50ZWxfYmJfb3V0KGliYiwgMCA8PCBHRU42XzNEU1RBVEVfVVJCX0dTX1NJWkVfU0hJRlQgfAor CQkgICAgIDAgPDwgR0VONl8zRFNUQVRFX1VSQl9HU19FTlRSSUVTX1NISUZUKTsgLyogbm8gR1Mg dGhyZWFkICovCiB9CiAKIHN0YXRpYyB2b2lkCi1nZW42X2VtaXRfc3RhdGVfYmFzZV9hZGRyZXNz KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitnZW42X2VtaXRfc3RhdGVfYmFzZV9h ZGRyZXNzKHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewotCU9VVF9CQVRDSChHRU40X1NUQVRFX0JB U0VfQUREUkVTUyB8ICgxMCAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7IC8qIGdlbmVyYWwgKi8KLQlP VVRfUkVMT0MoYmF0Y2gtPmJvLCAvKiBzdXJmYWNlICovCi0JCSAgSTkxNV9HRU1fRE9NQUlOX0lO U1RSVUNUSU9OLCAwLAotCQkgIEJBU0VfQUREUkVTU19NT0RJRlkpOwotCU9VVF9SRUxPQyhiYXRj aC0+Ym8sIC8qIGluc3RydWN0aW9uICovCi0JCSAgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9O LCAwLAotCQkgIEJBU0VfQUREUkVTU19NT0RJRlkpOwotCU9VVF9CQVRDSCgwKTsgLyogaW5kaXJl Y3QgKi8KLQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCAvKiBkeW5hbWljICovCi0JCSAgSTkxNV9HRU1f RE9NQUlOX0lOU1RSVUNUSU9OLCAwLAotCQkgIEJBU0VfQUREUkVTU19NT0RJRlkpOworCWludGVs X2JiX291dChpYmIsIEdFTjRfU1RBVEVfQkFTRV9BRERSRVNTIHwgKDEwIC0gMikpOworCWludGVs X2JiX291dChpYmIsIDApOyAvKiBnZW5lcmFsICovCisJaW50ZWxfYmJfZW1pdF9yZWxvYyhpYmIs IGliYi0+aGFuZGxlLCAvKiBzdXJmYWNlICovCisJCQkgICAgSTkxNV9HRU1fRE9NQUlOX0lOU1RS VUNUSU9OLCAwLAorCQkJICAgIEJBU0VfQUREUkVTU19NT0RJRlksIGliYi0+YmF0Y2hfb2Zmc2V0 KTsKKwlpbnRlbF9iYl9lbWl0X3JlbG9jKGliYiwgaWJiLT5oYW5kbGUsIC8qIGluc3RydWN0aW9u ICovCisJCQkgICAgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCAwLAorCQkJICAgIEJBU0Vf QUREUkVTU19NT0RJRlksIGliYi0+YmF0Y2hfb2Zmc2V0KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAw KTsgLyogaW5kaXJlY3QgKi8KKwlpbnRlbF9iYl9lbWl0X3JlbG9jKGliYiwgaWJiLT5oYW5kbGUs IC8qIGR5bmFtaWMgKi8KKwkJCSAgICBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsCisJ CQkgICAgQkFTRV9BRERSRVNTX01PRElGWSwgaWJiLT5iYXRjaF9vZmZzZXQpOwogCiAJLyogdXBw ZXIgYm91bmRzLCBkaXNhYmxlICovCi0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSChCQVNFX0FE RFJFU1NfTU9ESUZZKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKEJBU0VfQUREUkVTU19N T0RJRlkpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIEJBU0Vf QUREUkVTU19NT0RJRlkpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChp YmIsIEJBU0VfQUREUkVTU19NT0RJRlkpOwogfQogCiBzdGF0aWMgdm9pZAotZ2VuNl9lbWl0X3Zp ZXdwb3J0cyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBjY192cCkK K2dlbjZfZW1pdF92aWV3cG9ydHMoc3RydWN0IGludGVsX2JiICppYmIsIHVpbnQzMl90IGNjX3Zw KQogewotCU9VVF9CQVRDSChHRU42XzNEU1RBVEVfVklFV1BPUlRfU1RBVEVfUE9JTlRFUlMgfAot CQkgIEdFTjZfM0RTVEFURV9WSUVXUE9SVF9TVEFURV9NT0RJRllfQ0MgfAotCQkgICg0IC0gMikp OwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKGNjX3ZwKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCBHRU42XzNEU1RBVEVfVklFV1BPUlRfU1RBVEVfUE9JTlRFUlMgfAor CQkgICAgIEdFTjZfM0RTVEFURV9WSUVXUE9SVF9TVEFURV9NT0RJRllfQ0MgfAorCQkgICAgICg0 IC0gMikpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOwor CWludGVsX2JiX291dChpYmIsIGNjX3ZwKTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjZfZW1pdF92 cyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorZ2VuNl9lbWl0X3ZzKHN0cnVjdCBp bnRlbF9iYiAqaWJiKQogewogCS8qIGRpc2FibGUgVlMgY29uc3RhbnQgYnVmZmVyICovCi0JT1VU X0JBVENIKEdFTjZfM0RTVEFURV9DT05TVEFOVF9WUyB8ICg1IC0gMikpOwotCU9VVF9CQVRDSCgw KTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQotCU9V VF9CQVRDSChHRU42XzNEU1RBVEVfVlMgfCAoNiAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7IC8qIG5v IFZTIGtlcm5lbCAqLwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENI KDApOwotCU9VVF9CQVRDSCgwKTsgLyogcGFzcy10aHJvdWdoICovCisJaW50ZWxfYmJfb3V0KGli YiwgR0VONl8zRFNUQVRFX0NPTlNUQU5UX1ZTIHwgKDUgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGli YiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJ aW50ZWxfYmJfb3V0KGliYiwgMCk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU42XzNEU1RBVEVf VlMgfCAoNiAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsgLyogbm8gVlMga2VybmVsICov CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxf YmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7IC8qIHBhc3MtdGhyb3VnaCAq LwogfQogCiBzdGF0aWMgdm9pZAotZ2VuNl9lbWl0X2dzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZl ciAqYmF0Y2gpCitnZW42X2VtaXRfZ3Moc3RydWN0IGludGVsX2JiICppYmIpCiB7CiAJLyogZGlz YWJsZSBHUyBjb25zdGFudCBidWZmZXIgKi8KLQlPVVRfQkFUQ0goR0VONl8zRFNUQVRFX0NPTlNU QU5UX0dTIHwgKDUgLSAyKSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRf QkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCi0JT1VUX0JBVENIKEdFTjZfM0RTVEFURV9HUyB8 ICg3IC0gMikpOwotCU9VVF9CQVRDSCgwKTsgLyogbm8gR1Mga2VybmVsICovCi0JT1VUX0JBVENI KDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9V VF9CQVRDSCgwKTsgLyogcGFzcy10aHJvdWdoICovCisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8z RFNUQVRFX0NPTlNUQU5UX0dTIHwgKDUgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJ aW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJf b3V0KGliYiwgMCk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU42XzNEU1RBVEVfR1MgfCAoNyAt IDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsgLyogbm8gR1Mga2VybmVsICovCisJaW50ZWxf YmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGli YiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7IC8q IHBhc3MtdGhyb3VnaCAqLwogfQogCiBzdGF0aWMgdm9pZAotZ2VuNl9lbWl0X2NsaXAoc3RydWN0 IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2dlbjZfZW1pdF9jbGlwKHN0cnVjdCBpbnRlbF9i YiAqaWJiKQogewotCU9VVF9CQVRDSChHRU42XzNEU1RBVEVfQ0xJUCB8ICg0IC0gMikpOwotCU9V VF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7IC8qIHBhc3MtdGhyb3VnaCAqLwotCU9VVF9CQVRD SCgwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU42XzNEU1RBVEVfQ0xJUCB8ICg0IC0gMikpOwor CWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOyAvKiBwYXNzLXRo cm91Z2ggKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjZf ZW1pdF93bV9jb25zdGFudHMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2dlbjZf ZW1pdF93bV9jb25zdGFudHMoc3RydWN0IGludGVsX2JiICppYmIpCiB7CiAJLyogZGlzYWJsZSBX TSBjb25zdGFudCBidWZmZXIgKi8KLQlPVVRfQkFUQ0goR0VONl8zRFNUQVRFX0NPTlNUQU5UX1BT IHwgKDUgLSAyKSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0go MCk7Ci0JT1VUX0JBVENIKDApOworCWludGVsX2JiX291dChpYmIsIEdFTjZfM0RTVEFURV9DT05T VEFOVF9QUyB8ICg1IC0gMikpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291 dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDAp OwogfQogCiBzdGF0aWMgdm9pZAotZ2VuNl9lbWl0X251bGxfZGVwdGhfYnVmZmVyKHN0cnVjdCBp bnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitnZW42X2VtaXRfbnVsbF9kZXB0aF9idWZmZXIoc3Ry dWN0IGludGVsX2JiICppYmIpCiB7Ci0JT1VUX0JBVENIKEdFTjRfM0RTVEFURV9ERVBUSF9CVUZG RVIgfCAoNyAtIDIpKTsKLQlPVVRfQkFUQ0goU1VSRkFDRV9OVUxMIDw8IEdFTjRfM0RTVEFURV9E RVBUSF9CVUZGRVJfVFlQRV9TSElGVCB8Ci0JCSAgR0VONF9ERVBUSEZPUk1BVF9EMzJfRkxPQVQg PDwgR0VONF8zRFNUQVRFX0RFUFRIX0JVRkZFUl9GT1JNQVRfU0hJRlQpOwotCU9VVF9CQVRDSCgw KTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRf QkFUQ0goMCk7Ci0KLQlPVVRfQkFUQ0goR0VONF8zRFNUQVRFX0NMRUFSX1BBUkFNUyB8ICgyIC0g MikpOwotCU9VVF9CQVRDSCgwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU40XzNEU1RBVEVfREVQ VEhfQlVGRkVSIHwgKDcgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgU1VSRkFDRV9OVUxMIDw8 IEdFTjRfM0RTVEFURV9ERVBUSF9CVUZGRVJfVFlQRV9TSElGVCB8CisJCSAgICAgR0VONF9ERVBU SEZPUk1BVF9EMzJfRkxPQVQgPDwgR0VONF8zRFNUQVRFX0RFUFRIX0JVRkZFUl9GT1JNQVRfU0hJ RlQpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWlu dGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291 dChpYmIsIDApOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VONF8zRFNUQVRFX0NMRUFSX1BBUkFN UyB8ICgyIC0gMikpOworCWludGVsX2JiX291dChpYmIsIDApOwogfQogCiBzdGF0aWMgdm9pZAot Z2VuNl9lbWl0X2ludmFyaWFudChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorZ2Vu Nl9lbWl0X2ludmFyaWFudChzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKLQlPVVRfQkFUQ0goRzRY X1BJUEVMSU5FX1NFTEVDVCB8IFBJUEVMSU5FX1NFTEVDVF8zRCk7CisJaW50ZWxfYmJfb3V0KGli YiwgRzRYX1BJUEVMSU5FX1NFTEVDVCB8IFBJUEVMSU5FX1NFTEVDVF8zRCk7CiAKLQlPVVRfQkFU Q0goR0VONl8zRFNUQVRFX01VTFRJU0FNUExFIHwgKDMgLSAyKSk7Ci0JT1VUX0JBVENIKEdFTjZf M0RTVEFURV9NVUxUSVNBTVBMRV9QSVhFTF9MT0NBVElPTl9DRU5URVIgfAotCQkgIEdFTjZfM0RT VEFURV9NVUxUSVNBTVBMRV9OVU1TQU1QTEVTXzEpOyAvKiAxIHNhbXBsZS9waXhlbCAqLwotCU9V VF9CQVRDSCgwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU42XzNEU1RBVEVfTVVMVElTQU1QTEUg fCAoMyAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU42XzNEU1RBVEVfTVVMVElTQU1QTEVf UElYRUxfTE9DQVRJT05fQ0VOVEVSIHwKKwkJICAgICBHRU42XzNEU1RBVEVfTVVMVElTQU1QTEVf TlVNU0FNUExFU18xKTsgLyogMSBzYW1wbGUvcGl4ZWwgKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCAw KTsKIAotCU9VVF9CQVRDSChHRU42XzNEU1RBVEVfU0FNUExFX01BU0sgfCAoMiAtIDIpKTsKLQlP VVRfQkFUQ0goMSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRFX1NBTVBMRV9NQVNL IHwgKDIgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMSk7CiB9CiAKIHN0YXRpYyB2b2lkCi1n ZW42X2VtaXRfY2Moc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgYmxl bmQpCitnZW42X2VtaXRfY2Moc3RydWN0IGludGVsX2JiICppYmIsIHVpbnQzMl90IGJsZW5kKQog ewotCU9VVF9CQVRDSChHRU42XzNEU1RBVEVfQ0NfU1RBVEVfUE9JTlRFUlMgfCAoNCAtIDIpKTsK LQlPVVRfQkFUQ0goYmxlbmQgfCAxKTsKLQlPVVRfQkFUQ0goMTAyNCB8IDEpOwotCU9VVF9CQVRD SCgxMDI0IHwgMSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRFX0NDX1NUQVRFX1BP SU5URVJTIHwgKDQgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgYmxlbmQgfCAxKTsKKwlpbnRl bF9iYl9vdXQoaWJiLCAxMDI0IHwgMSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMTAyNCB8IDEpOwog fQogCiBzdGF0aWMgdm9pZAotZ2VuNl9lbWl0X3NhbXBsZXIoc3RydWN0IGludGVsX2JhdGNoYnVm ZmVyICpiYXRjaCwgdWludDMyX3Qgc3RhdGUpCitnZW42X2VtaXRfc2FtcGxlcihzdHJ1Y3QgaW50 ZWxfYmIgKmliYiwgdWludDMyX3Qgc3RhdGUpCiB7Ci0JT1VUX0JBVENIKEdFTjZfM0RTVEFURV9T QU1QTEVSX1NUQVRFX1BPSU5URVJTIHwKLQkJICBHRU42XzNEU1RBVEVfU0FNUExFUl9TVEFURV9N T0RJRllfUFMgfAotCQkgICg0IC0gMikpOwotCU9VVF9CQVRDSCgwKTsgLyogVlMgKi8KLQlPVVRf QkFUQ0goMCk7IC8qIEdTICovCi0JT1VUX0JBVENIKHN0YXRlKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCBHRU42XzNEU1RBVEVfU0FNUExFUl9TVEFURV9QT0lOVEVSUyB8CisJCSAgICAgR0VONl8zRFNU QVRFX1NBTVBMRVJfU1RBVEVfTU9ESUZZX1BTIHwKKwkJICAgICAoNCAtIDIpKTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCAwKTsgLyogVlMgKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsgLyogR1MgKi8K KwlpbnRlbF9iYl9vdXQoaWJiLCBzdGF0ZSk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW42X2VtaXRf c2Yoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2dlbjZfZW1pdF9zZihzdHJ1Y3Qg aW50ZWxfYmIgKmliYikKIHsKLQlPVVRfQkFUQ0goR0VONl8zRFNUQVRFX1NGIHwgKDIwIC0gMikp OwotCU9VVF9CQVRDSCgxIDw8IEdFTjZfM0RTVEFURV9TRl9OVU1fT1VUUFVUU19TSElGVCB8Ci0J CSAgMSA8PCBHRU42XzNEU1RBVEVfU0ZfVVJCX0VOVFJZX1JFQURfTEVOR1RIX1NISUZUIHwKLQkJ ICAxIDw8IEdFTjZfM0RTVEFURV9TRl9VUkJfRU5UUllfUkVBRF9PRkZTRVRfU0hJRlQpOwotCU9V VF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goR0VONl8zRFNUQVRFX1NGX0NVTExfTk9ORSk7Ci0JT1VU X0JBVENIKDIgPDwgR0VONl8zRFNUQVRFX1NGX1RSSUZBTl9QUk9WT0tFX1NISUZUKTsgLyogRFc0 ICovCi0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VU X0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsgLyogRFc5ICovCi0JT1VUX0JBVENIKDApOwotCU9V VF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgw KTsgLyogRFcxNCAqLwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENI KDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7IC8qIERXMTkgKi8KKwlpbnRlbF9i Yl9vdXQoaWJiLCBHRU42XzNEU1RBVEVfU0YgfCAoMjAgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGli YiwgMSA8PCBHRU42XzNEU1RBVEVfU0ZfTlVNX09VVFBVVFNfU0hJRlQgfAorCQkgICAgIDEgPDwg R0VONl8zRFNUQVRFX1NGX1VSQl9FTlRSWV9SRUFEX0xFTkdUSF9TSElGVCB8CisJCSAgICAgMSA8 PCBHRU42XzNEU1RBVEVfU0ZfVVJCX0VOVFJZX1JFQURfT0ZGU0VUX1NISUZUKTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU42XzNEU1RBVEVfU0ZfQ1VMTF9O T05FKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAyIDw8IEdFTjZfM0RTVEFURV9TRl9UUklGQU5fUFJP Vk9LRV9TSElGVCk7IC8qIERXNCAqLworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2Ji X291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIs IDApOworCWludGVsX2JiX291dChpYmIsIDApOyAvKiBEVzkgKi8KKwlpbnRlbF9iYl9vdXQoaWJi LCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsgLyogRFcxNCAqLwor CWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2Ji X291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIs IDApOyAvKiBEVzE5ICovCiB9CiAKIHN0YXRpYyB2b2lkCi1nZW42X2VtaXRfd20oc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgaW50IGtlcm5lbCkKK2dlbjZfZW1pdF93bShzdHJ1Y3Qg aW50ZWxfYmIgKmliYiwgaW50IGtlcm5lbCkKIHsKLQlPVVRfQkFUQ0goR0VONl8zRFNUQVRFX1dN IHwgKDkgLSAyKSk7Ci0JT1VUX0JBVENIKGtlcm5lbCk7Ci0JT1VUX0JBVENIKDEgPDwgR0VONl8z RFNUQVRFX1dNX1NBTVBMRVJfQ09VTlRfU0hJRlQgfAotCQkgIDIgPDwgR0VONl8zRFNUQVRFX1dN X0JJTkRJTkdfVEFCTEVfRU5UUllfQ09VTlRfU0hJRlQpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRf QkFUQ0goNiA8PCBHRU42XzNEU1RBVEVfV01fRElTUEFUQ0hfU1RBUlRfR1JGXzBfU0hJRlQpOyAv KiBEVzQgKi8KLQlPVVRfQkFUQ0goKDQwIC0gMSkgPDwgR0VONl8zRFNUQVRFX1dNX01BWF9USFJF QURTX1NISUZUIHwKLQkJICBHRU42XzNEU1RBVEVfV01fRElTUEFUQ0hfRU5BQkxFIHwKLQkJICBH RU42XzNEU1RBVEVfV01fMTZfRElTUEFUQ0hfRU5BQkxFKTsKLQlPVVRfQkFUQ0goMSA8PCBHRU42 XzNEU1RBVEVfV01fTlVNX1NGX09VVFBVVFNfU0hJRlQgfAotCQkgIEdFTjZfM0RTVEFURV9XTV9Q RVJTUEVDVElWRV9QSVhFTF9CQVJZQ0VOVFJJQyk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRD SCgwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU42XzNEU1RBVEVfV00gfCAoOSAtIDIpKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCBrZXJuZWwpOworCWludGVsX2JiX291dChpYmIsIDEgPDwgR0VONl8z RFNUQVRFX1dNX1NBTVBMRVJfQ09VTlRfU0hJRlQgfAorCQkgICAgIDIgPDwgR0VONl8zRFNUQVRF X1dNX0JJTkRJTkdfVEFCTEVfRU5UUllfQ09VTlRfU0hJRlQpOworCWludGVsX2JiX291dChpYmIs IDApOworCWludGVsX2JiX291dChpYmIsIDYgPDwgR0VONl8zRFNUQVRFX1dNX0RJU1BBVENIX1NU QVJUX0dSRl8wX1NISUZUKTsgLyogRFc0ICovCisJaW50ZWxfYmJfb3V0KGliYiwgKDQwIC0gMSkg PDwgR0VONl8zRFNUQVRFX1dNX01BWF9USFJFQURTX1NISUZUIHwKKwkJICAgICBHRU42XzNEU1RB VEVfV01fRElTUEFUQ0hfRU5BQkxFIHwKKwkJICAgICBHRU42XzNEU1RBVEVfV01fMTZfRElTUEFU Q0hfRU5BQkxFKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAxIDw8IEdFTjZfM0RTVEFURV9XTV9OVU1f U0ZfT1VUUFVUU19TSElGVCB8CisJCSAgICAgR0VONl8zRFNUQVRFX1dNX1BFUlNQRUNUSVZFX1BJ WEVMX0JBUllDRU5UUklDKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQo aWJiLCAwKTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjZfZW1pdF9iaW5kaW5nX3RhYmxlKHN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IHdtX3RhYmxlKQorZ2VuNl9lbWl0 X2JpbmRpbmdfdGFibGUoc3RydWN0IGludGVsX2JiICppYmIsIHVpbnQzMl90IHdtX3RhYmxlKQog ewotCU9VVF9CQVRDSChHRU40XzNEU1RBVEVfQklORElOR19UQUJMRV9QT0lOVEVSUyB8Ci0JCSAg R0VONl8zRFNUQVRFX0JJTkRJTkdfVEFCTEVfTU9ESUZZX1BTIHwKLQkJICAoNCAtIDIpKTsKLQlP VVRfQkFUQ0goMCk7CQkvKiB2cyAqLwotCU9VVF9CQVRDSCgwKTsJCS8qIGdzICovCi0JT1VUX0JB VENIKHdtX3RhYmxlKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU40XzNEU1RBVEVfQklORElOR19U QUJMRV9QT0lOVEVSUyB8CisJCSAgICAgR0VONl8zRFNUQVRFX0JJTkRJTkdfVEFCTEVfTU9ESUZZ X1BTIHwKKwkJICAgICAoNCAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsJCS8qIHZzICov CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CQkvKiBncyAqLworCWludGVsX2JiX291dChpYmIsIHdt X3RhYmxlKTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjZfZW1pdF9kcmF3aW5nX3JlY3RhbmdsZShz dHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0 KQorZ2VuNl9lbWl0X2RyYXdpbmdfcmVjdGFuZ2xlKHN0cnVjdCBpbnRlbF9iYiAqaWJiLCBjb25z dCBzdHJ1Y3QgaW50ZWxfYnVmICpkc3QpCiB7Ci0JT1VUX0JBVENIKEdFTjRfM0RTVEFURV9EUkFX SU5HX1JFQ1RBTkdMRSB8ICg0IC0gMikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goKGln dF9idWZfaGVpZ2h0KGRzdCkgLSAxKSA8PCAxNiB8IChpZ3RfYnVmX3dpZHRoKGRzdCkgLSAxKSk7 Ci0JT1VUX0JBVENIKDApOworCWludGVsX2JiX291dChpYmIsIEdFTjRfM0RTVEFURV9EUkFXSU5H X1JFQ1RBTkdMRSB8ICg0IC0gMikpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2Ji X291dChpYmIsIChpbnRlbF9idWZfaGVpZ2h0KGRzdCkgLSAxKSA8PCAxNiB8IChpbnRlbF9idWZf d2lkdGgoZHN0KSAtIDEpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIH0KIAogc3RhdGljIHZv aWQKLWdlbjZfZW1pdF92ZXJ0ZXhfZWxlbWVudHMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaCkKK2dlbjZfZW1pdF92ZXJ0ZXhfZWxlbWVudHMoc3RydWN0IGludGVsX2JiICppYmIpCiB7 CiAJLyogVGhlIFZVRSBsYXlvdXQKIAkgKiAgICBkd29yZCAwLTM6IHBhZCAoMC4wLCAwLjAsIDAu MC4gMC4wKQpAQCAtMzY5LDU0ICszNTcsNTQgQEAgZ2VuNl9lbWl0X3ZlcnRleF9lbGVtZW50cyhz dHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQogCSAqCiAJICogZHdvcmQgNC0xMSBhcmUg ZmV0Y2hlZCBmcm9tIHZlcnRleCBidWZmZXIKIAkgKi8KLQlPVVRfQkFUQ0goR0VONF8zRFNUQVRF X1ZFUlRFWF9FTEVNRU5UUyB8ICgyICogMyArIDEgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwg R0VONF8zRFNUQVRFX1ZFUlRFWF9FTEVNRU5UUyB8ICgyICogMyArIDEgLSAyKSk7CiAKLQlPVVRf QkFUQ0goMCA8PCBHRU42X1ZFMF9WRVJURVhfQlVGRkVSX0lOREVYX1NISUZUIHwgR0VONl9WRTBf VkFMSUQgfAotCQkgIFNVUkZBQ0VGT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUIDw8IFZFMF9GT1JN QVRfU0hJRlQgfAotCQkgIDAgPDwgVkUwX09GRlNFVF9TSElGVCk7Ci0JT1VUX0JBVENIKEdFTjRf VkZDT01QT05FTlRfU1RPUkVfMCA8PCBWRTFfVkZDT01QT05FTlRfMF9TSElGVCB8Ci0JCSAgR0VO NF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8xX1NISUZUIHwKLQkJICBH RU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzJfU0hJRlQgfAotCQkg IEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMCA8PCBWRTFfVkZDT01QT05FTlRfM19TSElGVCk7CisJ aW50ZWxfYmJfb3V0KGliYiwgMCA8PCBHRU42X1ZFMF9WRVJURVhfQlVGRkVSX0lOREVYX1NISUZU IHwgR0VONl9WRTBfVkFMSUQgfAorCQkgICAgIFNVUkZBQ0VGT1JNQVRfUjMyRzMyQjMyQTMyX0ZM T0FUIDw8IFZFMF9GT1JNQVRfU0hJRlQgfAorCQkgICAgIDAgPDwgVkUwX09GRlNFVF9TSElGVCk7 CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNP TVBPTkVOVF8wX1NISUZUIHwKKwkJICAgICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwgVkUx X1ZGQ09NUE9ORU5UXzFfU0hJRlQgfAorCQkgICAgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMCA8 PCBWRTFfVkZDT01QT05FTlRfMl9TSElGVCB8CisJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9TVE9S RV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8zX1NISUZUKTsKIAogCS8qIHgseSAqLwotCU9VVF9CQVRD SCgwIDw8IEdFTjZfVkUwX1ZFUlRFWF9CVUZGRVJfSU5ERVhfU0hJRlQgfCBHRU42X1ZFMF9WQUxJ RCB8Ci0JCSAgU1VSRkFDRUZPUk1BVF9SMTZHMTZfU1NDQUxFRCA8PCBWRTBfRk9STUFUX1NISUZU IHwKLQkJICAwIDw8IFZFMF9PRkZTRVRfU0hJRlQpOyAvKiBvZmZzZXRzIHZiIGluIGJ5dGVzICov Ci0JT1VUX0JBVENIKEdFTjRfVkZDT01QT05FTlRfU1RPUkVfU1JDIDw8IFZFMV9WRkNPTVBPTkVO VF8wX1NISUZUIHwKLQkJICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFX1NSQyA8PCBWRTFfVkZDT01Q T05FTlRfMV9TSElGVCB8Ci0JCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8xX0ZMVCA8PCBWRTFf VkZDT01QT05FTlRfMl9TSElGVCB8Ci0JCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8xX0ZMVCA8 PCBWRTFfVkZDT01QT05FTlRfM19TSElGVCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCA8PCBHRU42 X1ZFMF9WRVJURVhfQlVGRkVSX0lOREVYX1NISUZUIHwgR0VONl9WRTBfVkFMSUQgfAorCQkgICAg IFNVUkZBQ0VGT1JNQVRfUjE2RzE2X1NTQ0FMRUQgPDwgVkUwX0ZPUk1BVF9TSElGVCB8CisJCSAg ICAgMCA8PCBWRTBfT0ZGU0VUX1NISUZUKTsgLyogb2Zmc2V0cyB2YiBpbiBieXRlcyAqLworCWlu dGVsX2JiX291dChpYmIsIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfU1JDIDw8IFZFMV9WRkNPTVBP TkVOVF8wX1NISUZUIHwKKwkJICAgICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFX1NSQyA8PCBWRTFf VkZDT01QT05FTlRfMV9TSElGVCB8CisJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8xX0ZM VCA8PCBWRTFfVkZDT01QT05FTlRfMl9TSElGVCB8CisJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9T VE9SRV8xX0ZMVCA8PCBWRTFfVkZDT01QT05FTlRfM19TSElGVCk7CiAKIAkvKiB1MCwgdjAgKi8K LQlPVVRfQkFUQ0goMCA8PCBHRU42X1ZFMF9WRVJURVhfQlVGRkVSX0lOREVYX1NISUZUIHwgR0VO Nl9WRTBfVkFMSUQgfAotCQkgIFNVUkZBQ0VGT1JNQVRfUjMyRzMyX0ZMT0FUIDw8IFZFMF9GT1JN QVRfU0hJRlQgfAotCQkgIDQgPDwgVkUwX09GRlNFVF9TSElGVCk7CS8qIG9mZnNldCB2YiBpbiBi eXRlcyAqLwotCU9VVF9CQVRDSChHRU40X1ZGQ09NUE9ORU5UX1NUT1JFX1NSQyA8PCBWRTFfVkZD T01QT05FTlRfMF9TSElGVCB8Ci0JCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV9TUkMgPDwgVkUx X1ZGQ09NUE9ORU5UXzFfU0hJRlQgfAotCQkgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMCA8PCBW RTFfVkZDT01QT05FTlRfMl9TSElGVCB8Ci0JCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8 IFZFMV9WRkNPTVBPTkVOVF8zX1NISUZUKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwIDw8IEdFTjZf VkUwX1ZFUlRFWF9CVUZGRVJfSU5ERVhfU0hJRlQgfCBHRU42X1ZFMF9WQUxJRCB8CisJCSAgICAg U1VSRkFDRUZPUk1BVF9SMzJHMzJfRkxPQVQgPDwgVkUwX0ZPUk1BVF9TSElGVCB8CisJCSAgICAg NCA8PCBWRTBfT0ZGU0VUX1NISUZUKTsJLyogb2Zmc2V0IHZiIGluIGJ5dGVzICovCisJaW50ZWxf YmJfb3V0KGliYiwgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV9TUkMgPDwgVkUxX1ZGQ09NUE9ORU5U XzBfU0hJRlQgfAorCQkgICAgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfU1JDIDw8IFZFMV9WRkNP TVBPTkVOVF8xX1NISUZUIHwKKwkJICAgICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwgVkUx X1ZGQ09NUE9ORU5UXzJfU0hJRlQgfAorCQkgICAgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMCA8 PCBWRTFfVkZDT01QT05FTlRfM19TSElGVCk7CiB9CiAKIHN0YXRpYyB1aW50MzJfdAotZ2VuNl9j cmVhdGVfY2Nfdmlld3BvcnQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2dlbjZf Y3JlYXRlX2NjX3ZpZXdwb3J0KHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewogCXN0cnVjdCBnZW40 X2NjX3ZpZXdwb3J0ICp2cDsKIAotCXZwID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9hbGxv YyhiYXRjaCwgc2l6ZW9mKCp2cCksIDMyKTsKKwl2cCA9IGludGVsX2JiX3B0cl9hbGlnbihpYmIs IDMyKTsKIAogCXZwLT5taW5fZGVwdGggPSAtMS5lMzU7CiAJdnAtPm1heF9kZXB0aCA9IDEuZTM1 OwogCi0JcmV0dXJuIGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCB2cCk7 CisJcmV0dXJuIGludGVsX2JiX3B0cl9hZGRfcmV0dXJuX3ByZXZfb2Zmc2V0KGliYiwgc2l6ZW9m KCp2cCkpOwogfQogCiBzdGF0aWMgdWludDMyX3QKLWdlbjZfY3JlYXRlX2NjX2JsZW5kKHN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitnZW42X2NyZWF0ZV9jY19ibGVuZChzdHJ1Y3Qg aW50ZWxfYmIgKmliYikKIHsKIAlzdHJ1Y3QgZ2VuNl9ibGVuZF9zdGF0ZSAqYmxlbmQ7CiAKLQli bGVuZCA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfYWxsb2MoYmF0Y2gsIHNpemVvZigqYmxl bmQpLCA2NCk7CisJYmxlbmQgPSBpbnRlbF9iYl9wdHJfYWxpZ24oaWJiLCA2NCk7CiAKIAlibGVu ZC0+YmxlbmQwLmRlc3RfYmxlbmRfZmFjdG9yID0gR0VONl9CTEVOREZBQ1RPUl9aRVJPOwogCWJs ZW5kLT5ibGVuZDAuc291cmNlX2JsZW5kX2ZhY3RvciA9IEdFTjZfQkxFTkRGQUNUT1JfT05FOwpA QCAtNDI2LDI1ICs0MTQsMjQgQEAgZ2VuNl9jcmVhdGVfY2NfYmxlbmQoc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCkKIAlibGVuZC0+YmxlbmQxLnBvc3RfYmxlbmRfY2xhbXBfZW5hYmxl ID0gMTsKIAlibGVuZC0+YmxlbmQxLnByZV9ibGVuZF9jbGFtcF9lbmFibGUgPSAxOwogCi0JcmV0 dXJuIGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCBibGVuZCk7CisJcmV0 dXJuIGludGVsX2JiX3B0cl9hZGRfcmV0dXJuX3ByZXZfb2Zmc2V0KGliYiwgc2l6ZW9mKCpibGVu ZCkpOwogfQogCiBzdGF0aWMgdWludDMyX3QKLWdlbjZfY3JlYXRlX2tlcm5lbChzdHJ1Y3QgaW50 ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorZ2VuNl9jcmVhdGVfa2VybmVsKHN0cnVjdCBpbnRlbF9i YiAqaWJiKQogewotCXJldHVybiBpbnRlbF9iYXRjaGJ1ZmZlcl9jb3B5X2RhdGEoYmF0Y2gsIHBz X2tlcm5lbF9ub21hc2tfYWZmaW5lLAotCQkJICBzaXplb2YocHNfa2VybmVsX25vbWFza19hZmZp bmUpLAotCQkJICA2NCk7CisJcmV0dXJuIGludGVsX2JiX2NvcHlfZGF0YShpYmIsIHBzX2tlcm5l bF9ub21hc2tfYWZmaW5lLAorCQkJCSAgc2l6ZW9mKHBzX2tlcm5lbF9ub21hc2tfYWZmaW5lKSwg NjQpOwogfQogCiBzdGF0aWMgdWludDMyX3QKLWdlbjZfY3JlYXRlX3NhbXBsZXIoc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKK2dlbjZfY3JlYXRlX3NhbXBsZXIoc3RydWN0IGludGVs X2JiICppYmIsCiAJCSAgICBzYW1wbGVyX2ZpbHRlcl90IGZpbHRlciwKLQkJICAgc2FtcGxlcl9l eHRlbmRfdCBleHRlbmQpCisJCSAgICBzYW1wbGVyX2V4dGVuZF90IGV4dGVuZCkKIHsKIAlzdHJ1 Y3QgZ2VuNl9zYW1wbGVyX3N0YXRlICpzczsKIAotCXNzID0gaW50ZWxfYmF0Y2hidWZmZXJfc3Vi ZGF0YV9hbGxvYyhiYXRjaCwgc2l6ZW9mKCpzcyksIDMyKTsKKwlzcyA9IGludGVsX2JiX3B0cl9h bGlnbihpYmIsIDMyKTsKIAlzcy0+c3MwLmxvZF9wcmVjbGFtcCA9IDE7CS8qIEdMIG1vZGUgKi8K IAogCS8qIFdlIHVzZSB0aGUgbGVnYWN5IG1vZGUgdG8gZ2V0IHRoZSBzZW1hbnRpY3Mgc3BlY2lm aWVkIGJ5CkBAIC00ODcsMTA3ICs0NzQsMTE5IEBAIGdlbjZfY3JlYXRlX3NhbXBsZXIoc3RydWN0 IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKIAkJYnJlYWs7CiAJfQogCi0JcmV0dXJuIGludGVs X2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCBzcyk7CisJcmV0dXJuIGludGVsX2Ji X3B0cl9hZGRfcmV0dXJuX3ByZXZfb2Zmc2V0KGliYiwgc2l6ZW9mKCpzcykpOwogfQogCi1zdGF0 aWMgdm9pZCBnZW42X2VtaXRfdmVydGV4X2J1ZmZlcihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoKQorc3RhdGljIHZvaWQgZ2VuNl9lbWl0X3ZlcnRleF9idWZmZXIoc3RydWN0IGludGVs X2JiICppYmIpCiB7Ci0JT1VUX0JBVENIKEdFTjRfM0RTVEFURV9WRVJURVhfQlVGRkVSUyB8IDMp OwotCU9VVF9CQVRDSChHRU42X1ZCMF9WRVJURVhEQVRBIHwKLQkJICAwIDw8IEdFTjZfVkIwX0JV RkZFUl9JTkRFWF9TSElGVCB8Ci0JCSAgVkVSVEVYX1NJWkUgPDwgVkIwX0JVRkZFUl9QSVRDSF9T SElGVCk7Ci0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX1ZFUlRFWCwgMCwg MCk7Ci0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX1ZFUlRFWCwgMCwgYmF0 Y2gtPmJvLT5zaXplLTEpOwotCU9VVF9CQVRDSCgwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU40 XzNEU1RBVEVfVkVSVEVYX0JVRkZFUlMgfCAzKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU42X1ZC MF9WRVJURVhEQVRBIHwKKwkJICAgICAwIDw8IEdFTjZfVkIwX0JVRkZFUl9JTkRFWF9TSElGVCB8 CisJCSAgICAgVkVSVEVYX1NJWkUgPDwgVkIwX0JVRkZFUl9QSVRDSF9TSElGVCk7CisJaW50ZWxf YmJfZW1pdF9yZWxvYyhpYmIsIGliYi0+aGFuZGxlLCBJOTE1X0dFTV9ET01BSU5fVkVSVEVYLCAw LAorCQkJICAgIDAsIGliYi0+YmF0Y2hfb2Zmc2V0KTsKKwlpbnRlbF9iYl9lbWl0X3JlbG9jKGli YiwgaWJiLT5oYW5kbGUsIEk5MTVfR0VNX0RPTUFJTl9WRVJURVgsIDAsCisJCQkgICAgaWJiLT5z aXplIC0gMSwgaWJiLT5iYXRjaF9vZmZzZXQpOworCWludGVsX2JiX291dChpYmIsIDApOwogfQog Ci1zdGF0aWMgdWludDMyX3QgZ2VuNl9lbWl0X3ByaW1pdGl2ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hi dWZmZXIgKmJhdGNoKQorc3RhdGljIHVpbnQzMl90IGdlbjZfZW1pdF9wcmltaXRpdmUoc3RydWN0 IGludGVsX2JiICppYmIpCiB7CiAJdWludDMyX3Qgb2Zmc2V0OwogCi0JT1VUX0JBVENIKEdFTjRf M0RQUklNSVRJVkUgfAotCQkgIEdFTjRfM0RQUklNSVRJVkVfVkVSVEVYX1NFUVVFTlRJQUwgfAot CQkgIF8zRFBSSU1fUkVDVExJU1QgPDwgR0VONF8zRFBSSU1JVElWRV9UT1BPTE9HWV9TSElGVCB8 Ci0JCSAgMCA8PCA5IHwKLQkJICA0KTsKLQlPVVRfQkFUQ0goMyk7CS8qIHZlcnRleCBjb3VudCAq LwotCW9mZnNldCA9IGJhdGNoLT5wdHIgLSBiYXRjaC0+YnVmZmVyOwotCU9VVF9CQVRDSCgwKTsJ LyogdmVydGV4X2luZGV4ICovCi0JT1VUX0JBVENIKDEpOwkvKiBzaW5nbGUgaW5zdGFuY2UgKi8K LQlPVVRfQkFUQ0goMCk7CS8qIHN0YXJ0IGluc3RhbmNlIGxvY2F0aW9uICovCi0JT1VUX0JBVENI KDApOwkvKiBpbmRleCBidWZmZXIgb2Zmc2V0LCBpZ25vcmVkICovCisJaW50ZWxfYmJfb3V0KGli YiwgR0VONF8zRFBSSU1JVElWRSB8CisJCSAgICAgR0VONF8zRFBSSU1JVElWRV9WRVJURVhfU0VR VUVOVElBTCB8CisJCSAgICAgXzNEUFJJTV9SRUNUTElTVCA8PCBHRU40XzNEUFJJTUlUSVZFX1RP UE9MT0dZX1NISUZUIHwKKwkJICAgICAwIDw8IDkgfAorCQkgICAgIDQpOworCWludGVsX2JiX291 dChpYmIsIDMpOwkvKiB2ZXJ0ZXggY291bnQgKi8KKwlvZmZzZXQgPSBpbnRlbF9iYl9vZmZzZXQo aWJiKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsJLyogdmVydGV4X2luZGV4ICovCisJaW50ZWxf YmJfb3V0KGliYiwgMSk7CS8qIHNpbmdsZSBpbnN0YW5jZSAqLworCWludGVsX2JiX291dChpYmIs IDApOwkvKiBzdGFydCBpbnN0YW5jZSBsb2NhdGlvbiAqLworCWludGVsX2JiX291dChpYmIsIDAp OwkvKiBpbmRleCBidWZmZXIgb2Zmc2V0LCBpZ25vcmVkICovCiAKIAlyZXR1cm4gb2Zmc2V0Owog fQogCi12b2lkIGdlbjZfcmVuZGVyX2NvcHlmdW5jKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gsCi0JCQkgIGRybV9pbnRlbF9jb250ZXh0ICpjb250ZXh0LAotCQkJICBjb25zdCBzdHJ1 Y3QgaWd0X2J1ZiAqc3JjLCB1bnNpZ25lZCBzcmNfeCwgdW5zaWduZWQgc3JjX3ksCi0JCQkgIHVu c2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsCi0JCQkgIGNvbnN0IHN0cnVjdCBpZ3RfYnVm ICpkc3QsIHVuc2lnbmVkIGRzdF94LCB1bnNpZ25lZCBkc3RfeSkKK3ZvaWQgZ2VuNl9yZW5kZXJf Y29weWZ1bmMoc3RydWN0IGludGVsX2JiICppYmIsCisJCQkgIHVpbnQzMl90IGN0eCwKKwkJCSAg c3RydWN0IGludGVsX2J1ZiAqc3JjLAorCQkJICB1aW50MzJfdCBzcmNfeCwgdWludDMyX3Qgc3Jj X3ksCisJCQkgIHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsCisJCQkgIHN0cnVjdCBp bnRlbF9idWYgKmRzdCwKKwkJCSAgdWludDMyX3QgZHN0X3gsIHVpbnQzMl90IGRzdF95KQogewog CXVpbnQzMl90IHdtX3N0YXRlLCB3bV9rZXJuZWwsIHdtX3RhYmxlOwogCXVpbnQzMl90IGNjX3Zw LCBjY19ibGVuZCwgb2Zmc2V0OwogCXVpbnQzMl90IGJhdGNoX2VuZDsKIAogCWlndF9hc3NlcnQo c3JjLT5icHAgPT0gZHN0LT5icHApOwotCWludGVsX2JhdGNoYnVmZmVyX2ZsdXNoX3dpdGhfY29u dGV4dChiYXRjaCwgY29udGV4dCk7CiAKLQliYXRjaC0+cHRyID0gYmF0Y2gtPmJ1ZmZlciArIDEw MjQ7Ci0JaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9hbGxvYyhiYXRjaCwgNjQsIDY0KTsKLQl3 bV90YWJsZSAgPSBnZW42X2JpbmRfc3VyZmFjZXMoYmF0Y2gsIHNyYywgZHN0KTsKLQl3bV9rZXJu ZWwgPSBnZW42X2NyZWF0ZV9rZXJuZWwoYmF0Y2gpOwotCXdtX3N0YXRlICA9IGdlbjZfY3JlYXRl X3NhbXBsZXIoYmF0Y2gsCisJaW50ZWxfYmJfZmx1c2hfcmVuZGVyX3dpdGhfY29udGV4dChpYmIs IGN0eCk7CisKKwlpbnRlbF9iYl9hZGRfaW50ZWxfYnVmKGliYiwgZHN0LCB0cnVlKTsKKwlpbnRl bF9iYl9hZGRfaW50ZWxfYnVmKGliYiwgc3JjLCBmYWxzZSk7CisKKwlpbnRlbF9iYl9wdHJfc2V0 KGliYiwgMTAyNCArIDY0KTsKKworCXdtX3RhYmxlICA9IGdlbjZfYmluZF9zdXJmYWNlcyhpYmIs IHNyYywgZHN0KTsKKwl3bV9rZXJuZWwgPSBnZW42X2NyZWF0ZV9rZXJuZWwoaWJiKTsKKwl3bV9z dGF0ZSAgPSBnZW42X2NyZWF0ZV9zYW1wbGVyKGliYiwKIAkJCQkJU0FNUExFUl9GSUxURVJfTkVB UkVTVCwKIAkJCQkJU0FNUExFUl9FWFRFTkRfTk9ORSk7CiAKLQljY192cCA9IGdlbjZfY3JlYXRl X2NjX3ZpZXdwb3J0KGJhdGNoKTsKLQljY19ibGVuZCA9IGdlbjZfY3JlYXRlX2NjX2JsZW5kKGJh dGNoKTsKKwljY192cCA9IGdlbjZfY3JlYXRlX2NjX3ZpZXdwb3J0KGliYik7CisJY2NfYmxlbmQg PSBnZW42X2NyZWF0ZV9jY19ibGVuZChpYmIpOworCisJaW50ZWxfYmJfcHRyX3NldChpYmIsIDAp OwogCi0JYmF0Y2gtPnB0ciA9IGJhdGNoLT5idWZmZXI7CisJZ2VuNl9lbWl0X2ludmFyaWFudChp YmIpOworCWdlbjZfZW1pdF9zdGF0ZV9iYXNlX2FkZHJlc3MoaWJiKTsKIAotCWdlbjZfZW1pdF9p bnZhcmlhbnQoYmF0Y2gpOwotCWdlbjZfZW1pdF9zdGF0ZV9iYXNlX2FkZHJlc3MoYmF0Y2gpOwor CWdlbjZfZW1pdF9zaXAoaWJiKTsKKwlnZW42X2VtaXRfdXJiKGliYik7CiAKLQlnZW42X2VtaXRf c2lwKGJhdGNoKTsKLQlnZW42X2VtaXRfdXJiKGJhdGNoKTsKKwlnZW42X2VtaXRfdmlld3BvcnRz KGliYiwgY2NfdnApOworCWdlbjZfZW1pdF92cyhpYmIpOworCWdlbjZfZW1pdF9ncyhpYmIpOwor CWdlbjZfZW1pdF9jbGlwKGliYik7CisJZ2VuNl9lbWl0X3dtX2NvbnN0YW50cyhpYmIpOworCWdl bjZfZW1pdF9udWxsX2RlcHRoX2J1ZmZlcihpYmIpOwogCi0JZ2VuNl9lbWl0X3ZpZXdwb3J0cyhi YXRjaCwgY2NfdnApOwotCWdlbjZfZW1pdF92cyhiYXRjaCk7Ci0JZ2VuNl9lbWl0X2dzKGJhdGNo KTsKLQlnZW42X2VtaXRfY2xpcChiYXRjaCk7Ci0JZ2VuNl9lbWl0X3dtX2NvbnN0YW50cyhiYXRj aCk7Ci0JZ2VuNl9lbWl0X251bGxfZGVwdGhfYnVmZmVyKGJhdGNoKTsKKwlnZW42X2VtaXRfZHJh d2luZ19yZWN0YW5nbGUoaWJiLCBkc3QpOworCWdlbjZfZW1pdF9jYyhpYmIsIGNjX2JsZW5kKTsK KwlnZW42X2VtaXRfc2FtcGxlcihpYmIsIHdtX3N0YXRlKTsKKwlnZW42X2VtaXRfc2YoaWJiKTsK KwlnZW42X2VtaXRfd20oaWJiLCB3bV9rZXJuZWwpOworCWdlbjZfZW1pdF92ZXJ0ZXhfZWxlbWVu dHMoaWJiKTsKKwlnZW42X2VtaXRfYmluZGluZ190YWJsZShpYmIsIHdtX3RhYmxlKTsKIAotCWdl bjZfZW1pdF9kcmF3aW5nX3JlY3RhbmdsZShiYXRjaCwgZHN0KTsKLQlnZW42X2VtaXRfY2MoYmF0 Y2gsIGNjX2JsZW5kKTsKLQlnZW42X2VtaXRfc2FtcGxlcihiYXRjaCwgd21fc3RhdGUpOwotCWdl bjZfZW1pdF9zZihiYXRjaCk7Ci0JZ2VuNl9lbWl0X3dtKGJhdGNoLCB3bV9rZXJuZWwpOwotCWdl bjZfZW1pdF92ZXJ0ZXhfZWxlbWVudHMoYmF0Y2gpOwotCWdlbjZfZW1pdF9iaW5kaW5nX3RhYmxl KGJhdGNoLCB3bV90YWJsZSk7CisJZ2VuNl9lbWl0X3ZlcnRleF9idWZmZXIoaWJiKTsKKwlvZmZz ZXQgPSBnZW42X2VtaXRfcHJpbWl0aXZlKGliYik7CiAKLQlnZW42X2VtaXRfdmVydGV4X2J1ZmZl cihiYXRjaCk7Ci0Jb2Zmc2V0ID0gZ2VuNl9lbWl0X3ByaW1pdGl2ZShiYXRjaCk7CisJYmF0Y2hf ZW5kID0gaW50ZWxfYmJfZW1pdF9iYmUoaWJiKTsKIAotCU9VVF9CQVRDSChNSV9CQVRDSF9CVUZG RVJfRU5EKTsKLQliYXRjaF9lbmQgPSBpbnRlbF9iYXRjaGJ1ZmZlcl9hbGlnbihiYXRjaCwgOCk7 CisJaWJiLT5iYXRjaFtvZmZzZXQgLyBzaXplb2YodWludDMyX3QpXSA9CisJCQliYXRjaF9yb3Vu ZF91cHRvKGliYiwgVkVSVEVYX1NJWkUpL1ZFUlRFWF9TSVpFOwogCi0JKih1aW50MzJfdCopKGJh dGNoLT5idWZmZXIgKyBvZmZzZXQpID0KLQkJYmF0Y2hfcm91bmRfdXB0byhiYXRjaCwgVkVSVEVY X1NJWkUpL1ZFUlRFWF9TSVpFOworCWVtaXRfdmVydGV4XzJzKGliYiwgZHN0X3ggKyB3aWR0aCwg ZHN0X3kgKyBoZWlnaHQpOworCWVtaXRfdmVydGV4X25vcm1hbGl6ZWQoaWJiLCBzcmNfeCArIHdp ZHRoLCBpbnRlbF9idWZfd2lkdGgoc3JjKSk7CisJZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChpYmIs IHNyY195ICsgaGVpZ2h0LCBpbnRlbF9idWZfaGVpZ2h0KHNyYykpOwogCi0JZW1pdF92ZXJ0ZXhf MnMoYmF0Y2gsIGRzdF94ICsgd2lkdGgsIGRzdF95ICsgaGVpZ2h0KTsKLQllbWl0X3ZlcnRleF9u b3JtYWxpemVkKGJhdGNoLCBzcmNfeCArIHdpZHRoLCBpZ3RfYnVmX3dpZHRoKHNyYykpOwotCWVt aXRfdmVydGV4X25vcm1hbGl6ZWQoYmF0Y2gsIHNyY195ICsgaGVpZ2h0LCBpZ3RfYnVmX2hlaWdo dChzcmMpKTsKKwllbWl0X3ZlcnRleF8ycyhpYmIsIGRzdF94LCBkc3RfeSArIGhlaWdodCk7CisJ ZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChpYmIsIHNyY194LCBpbnRlbF9idWZfd2lkdGgoc3JjKSk7 CisJZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChpYmIsIHNyY195ICsgaGVpZ2h0LCBpbnRlbF9idWZf aGVpZ2h0KHNyYykpOwogCi0JZW1pdF92ZXJ0ZXhfMnMoYmF0Y2gsIGRzdF94LCBkc3RfeSArIGhl aWdodCk7Ci0JZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChiYXRjaCwgc3JjX3gsIGlndF9idWZfd2lk dGgoc3JjKSk7Ci0JZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChiYXRjaCwgc3JjX3kgKyBoZWlnaHQs IGlndF9idWZfaGVpZ2h0KHNyYykpOworCWVtaXRfdmVydGV4XzJzKGliYiwgZHN0X3gsIGRzdF95 KTsKKwllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGliYiwgc3JjX3gsIGludGVsX2J1Zl93aWR0aChz cmMpKTsKKwllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGliYiwgc3JjX3ksIGludGVsX2J1Zl9oZWln aHQoc3JjKSk7CiAKLQllbWl0X3ZlcnRleF8ycyhiYXRjaCwgZHN0X3gsIGRzdF95KTsKLQllbWl0 X3ZlcnRleF9ub3JtYWxpemVkKGJhdGNoLCBzcmNfeCwgaWd0X2J1Zl93aWR0aChzcmMpKTsKLQll bWl0X3ZlcnRleF9ub3JtYWxpemVkKGJhdGNoLCBzcmNfeSwgaWd0X2J1Zl9oZWlnaHQoc3JjKSk7 CisJLyogUG9zaXRpb24gdG8gdmFsaWQgYmF0Y2ggZW5kIHBvc2l0aW9uIGZvciBiYXRjaCByZXVz ZSAqLworCWludGVsX2JiX3B0cl9zZXQoaWJiLCBiYXRjaF9lbmQpOwogCi0JZ2VuNl9yZW5kZXJf Zmx1c2goYmF0Y2gsIGNvbnRleHQsIGJhdGNoX2VuZCk7Ci0JaW50ZWxfYmF0Y2hidWZmZXJfcmVz ZXQoYmF0Y2gpOworCWludGVsX2JiX2V4ZWNfd2l0aF9jb250ZXh0KGliYiwgYmF0Y2hfZW5kLCBj dHgsCisJCQkJICAgSTkxNV9FWEVDX0RFRkFVTFQgfCBJOTE1X0VYRUNfTk9fUkVMT0MsCisJCQkJ ICAgZmFsc2UpOworCWludGVsX2JiX3Jlc2V0KGliYiwgZmFsc2UpOwogfQpkaWZmIC0tZ2l0IGEv bGliL3JlbmRlcmNvcHlfZ2VuNy5jIGIvbGliL3JlbmRlcmNvcHlfZ2VuNy5jCmluZGV4IDkzYjRk YTcyLi42MmVmNDMyNSAxMDA2NDQKLS0tIGEvbGliL3JlbmRlcmNvcHlfZ2VuNy5jCisrKyBiL2xp Yi9yZW5kZXJjb3B5X2dlbjcuYwpAQCAtMTIsNyArMTIsNyBAQAogI2luY2x1ZGUgImRybS5oIgog I2luY2x1ZGUgImk5MTVfZHJtLmgiCiAjaW5jbHVkZSAiZHJtdGVzdC5oIgotI2luY2x1ZGUgImlu dGVsX2J1Zm1nci5oIgorI2luY2x1ZGUgImludGVsX2J1Zm9wcy5oIgogI2luY2x1ZGUgImludGVs X2JhdGNoYnVmZmVyLmgiCiAjaW5jbHVkZSAiaW50ZWxfaW8uaCIKICNpbmNsdWRlICJpbnRlbF9j aGlwc2V0LmgiCkBAIC0yMCw2ICsyMCwxNCBAQAogI2luY2x1ZGUgImdlbjdfcmVuZGVyLmgiCiAj aW5jbHVkZSAiaW50ZWxfcmVnLmgiCiAKKyNpZiBERUJVR19SRU5ERVJDUFkKK3N0YXRpYyB2b2lk IGR1bXBfYmF0Y2goc3RydWN0IGludGVsX2JiICppYmIpCit7CisJaW50ZWxfYmJfZHVtcChpYmIs ICIvdG1wL2dlbjctYmF0Y2hidWZmZXJzLmR1bXAiKTsKK30KKyNlbHNlCisjZGVmaW5lIGR1bXBf YmF0Y2goeCkgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCiAKIHN0YXRpYyBjb25zdCB1aW50MzJf dCBwc19rZXJuZWxbXVs0XSA9IHsKIAl7IDB4MDA4MDAwNWEsIDB4MmUyMDc3YmQsIDB4MDAwMDAw YzAsIDB4MDA4ZDAwNDAgfSwKQEAgLTMyLDE3ICs0MCw2IEBAIHN0YXRpYyBjb25zdCB1aW50MzJf dCBwc19rZXJuZWxbXVs0XSA9IHsKIAl7IDB4MDU4MDAwMzEsIDB4MjAwMDFmYTgsIDB4MDA4ZDBl MjAsIDB4OTAwMzEwMDAgfSwKIH07CiAKLXN0YXRpYyB2b2lkCi1nZW43X3JlbmRlcl9mbHVzaChz dHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkgIGRybV9pbnRlbF9jb250ZXh0ICpj b250ZXh0LCB1aW50MzJfdCBiYXRjaF9lbmQpCi17Ci0JaWd0X2Fzc2VydF9lcShkcm1faW50ZWxf Ym9fc3ViZGF0YShiYXRjaC0+Ym8sCi0JCQkJCSAgIDAsIDQwOTYsIGJhdGNoLT5idWZmZXIpLAot CQkgICAgICAwKTsKLQlpZ3RfYXNzZXJ0X2VxKGRybV9pbnRlbF9nZW1fYm9fY29udGV4dF9leGVj KGJhdGNoLT5ibywgY29udGV4dCwKLQkJCQkJCSAgICBiYXRjaF9lbmQsIDApLAotCQkgICAgICAw KTsKLX0KIAogc3RhdGljIHVpbnQzMl90CiBnZW43X3RpbGluZ19iaXRzKHVpbnQzMl90IHRpbGlu ZykKQEAgLTU2LDE3ICs1MywxNyBAQCBnZW43X3RpbGluZ19iaXRzKHVpbnQzMl90IHRpbGluZykK IH0KIAogc3RhdGljIHVpbnQzMl90Ci1nZW43X2JpbmRfYnVmKHN0cnVjdCBpbnRlbF9iYXRjaGJ1 ZmZlciAqYmF0Y2gsCi0JICAgICAgY29uc3Qgc3RydWN0IGlndF9idWYgKmJ1ZiwKK2dlbjdfYmlu ZF9idWYoc3RydWN0IGludGVsX2JiICppYmIsCisJICAgICAgY29uc3Qgc3RydWN0IGludGVsX2J1 ZiAqYnVmLAogCSAgICAgIGludCBpc19kc3QpCiB7CiAJdWludDMyX3QgZm9ybWF0LCAqc3M7CiAJ dWludDMyX3Qgd3JpdGVfZG9tYWluLCByZWFkX2RvbWFpbjsKLQlpbnQgcmV0OworCXVpbnQ2NF90 IGFkZHJlc3M7CiAKIAlpZ3RfYXNzZXJ0X2x0ZShidWYtPnN1cmZhY2VbMF0uc3RyaWRlLCAyNTYq MTAyNCk7Ci0JaWd0X2Fzc2VydF9sdGUoaWd0X2J1Zl93aWR0aChidWYpLCAxNjM4NCk7Ci0JaWd0 X2Fzc2VydF9sdGUoaWd0X2J1Zl9oZWlnaHQoYnVmKSwgMTYzODQpOworCWlndF9hc3NlcnRfbHRl KGludGVsX2J1Zl93aWR0aChidWYpLCAxNjM4NCk7CisJaWd0X2Fzc2VydF9sdGUoaW50ZWxfYnVm X2hlaWdodChidWYpLCAxNjM4NCk7CiAKIAlzd2l0Y2ggKGJ1Zi0+YnBwKSB7CiAJCWNhc2UgODog Zm9ybWF0ID0gU1VSRkFDRUZPUk1BVF9SOF9VTk9STTsgYnJlYWs7CkBAIC04Myw3NyArODAsNzYg QEAgZ2VuN19iaW5kX2J1ZihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAogCQlyZWFk X2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9TQU1QTEVSOwogCX0KIAotCXNzID0gaW50ZWxfYmF0 Y2hidWZmZXJfc3ViZGF0YV9hbGxvYyhiYXRjaCwgOCAqIHNpemVvZigqc3MpLCAzMik7CisJc3Mg PSBpbnRlbF9iYl9wdHJfYWxpZ24oaWJiLCAzMik7CiAKIAlzc1swXSA9IChTVVJGQUNFXzJEIDw8 IEdFTjdfU1VSRkFDRV9UWVBFX1NISUZUIHwKIAkJIGdlbjdfdGlsaW5nX2JpdHMoYnVmLT50aWxp bmcpIHwKIAkJZm9ybWF0IDw8IEdFTjdfU1VSRkFDRV9GT1JNQVRfU0hJRlQpOwotCXNzWzFdID0g YnVmLT5iby0+b2Zmc2V0OwotCXNzWzJdID0gKChpZ3RfYnVmX3dpZHRoKGJ1ZikgLSAxKSAgPDwg R0VON19TVVJGQUNFX1dJRFRIX1NISUZUIHwKLQkJIChpZ3RfYnVmX2hlaWdodChidWYpIC0gMSkg PDwgR0VON19TVVJGQUNFX0hFSUdIVF9TSElGVCk7CisKKwlhZGRyZXNzID0gaW50ZWxfYmJfb2Zm c2V0X3JlbG9jKGliYiwgYnVmLT5oYW5kbGUsCisJCQkJCXJlYWRfZG9tYWluLCB3cml0ZV9kb21h aW4sCisJCQkJCWludGVsX2JiX29mZnNldChpYmIpICsgNCwKKwkJCQkJYnVmLT5hZGRyLm9mZnNl dCk7CisJc3NbMV0gPSBhZGRyZXNzOworCXNzWzJdID0gKChpbnRlbF9idWZfd2lkdGgoYnVmKSAt IDEpICA8PCBHRU43X1NVUkZBQ0VfV0lEVEhfU0hJRlQgfAorCQkgKGludGVsX2J1Zl9oZWlnaHQo YnVmKSAtIDEpIDw8IEdFTjdfU1VSRkFDRV9IRUlHSFRfU0hJRlQpOwogCXNzWzNdID0gKGJ1Zi0+ c3VyZmFjZVswXS5zdHJpZGUgLSAxKSA8PCBHRU43X1NVUkZBQ0VfUElUQ0hfU0hJRlQ7CiAJc3Nb NF0gPSAwOwotCWlmIChJU19WQUxMRVlWSUVXKGJhdGNoLT5kZXZpZCkpCisJaWYgKElTX1ZBTExF WVZJRVcoaWJiLT5kZXZpZCkpCiAJCXNzWzVdID0gVkxWX01PQ1NfTDMgPDwgMTY7CiAJZWxzZQog CQlzc1s1XSA9IChJVkJfTU9DU19MMyB8IElWQl9NT0NTX1BURSkgPDwgMTY7CiAJc3NbNl0gPSAw OwogCXNzWzddID0gMDsKLQlpZiAoSVNfSEFTV0VMTChiYXRjaC0+ZGV2aWQpKQorCWlmIChJU19I QVNXRUxMKGliYi0+ZGV2aWQpKQogCQlzc1s3XSB8PSBIU1dfU1VSRkFDRV9TV0laWkxFKFJFRCwg R1JFRU4sIEJMVUUsIEFMUEhBKTsKIAotCXJldCA9IGRybV9pbnRlbF9ib19lbWl0X3JlbG9jKGJh dGNoLT5ibywKLQkJCQkgICAgICBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX29mZnNldChiYXRj aCwgJnNzWzFdKSwKLQkJCQkgICAgICBidWYtPmJvLCAwLAotCQkJCSAgICAgIHJlYWRfZG9tYWlu LCB3cml0ZV9kb21haW4pOwotCWlndF9hc3NlcnQocmV0ID09IDApOwotCi0JcmV0dXJuIGludGVs X2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCBzcyk7CisJcmV0dXJuIGludGVsX2Ji X3B0cl9hZGRfcmV0dXJuX3ByZXZfb2Zmc2V0KGliYiwgOCAqIHNpemVvZigqc3MpKTsKIH0KIAog c3RhdGljIHZvaWQKLWdlbjdfZW1pdF92ZXJ0ZXhfZWxlbWVudHMoc3RydWN0IGludGVsX2JhdGNo YnVmZmVyICpiYXRjaCkKK2dlbjdfZW1pdF92ZXJ0ZXhfZWxlbWVudHMoc3RydWN0IGludGVsX2Ji ICppYmIpCiB7Ci0JT1VUX0JBVENIKEdFTjRfM0RTVEFURV9WRVJURVhfRUxFTUVOVFMgfAotCQkg ICgoMiAqICgxICsgMikpICsgMSAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU40XzNEU1RB VEVfVkVSVEVYX0VMRU1FTlRTIHwKKwkJICAgICAoKDIgKiAoMSArIDIpKSArIDEgLSAyKSk7CiAK LQlPVVRfQkFUQ0goMCA8PCBHRU42X1ZFMF9WRVJURVhfQlVGRkVSX0lOREVYX1NISUZUIHwgR0VO Nl9WRTBfVkFMSUQgfAotCQkgIFNVUkZBQ0VGT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUIDw8IFZF MF9GT1JNQVRfU0hJRlQgfAotCQkgIDAgPDwgVkUwX09GRlNFVF9TSElGVCk7CisJaW50ZWxfYmJf b3V0KGliYiwgMCA8PCBHRU42X1ZFMF9WRVJURVhfQlVGRkVSX0lOREVYX1NISUZUIHwgR0VONl9W RTBfVkFMSUQgfAorCQkgICAgIFNVUkZBQ0VGT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUIDw8IFZF MF9GT1JNQVRfU0hJRlQgfAorCQkgICAgIDAgPDwgVkUwX09GRlNFVF9TSElGVCk7CiAKLQlPVVRf QkFUQ0goR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8wX1NISUZU IHwKLQkJICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzFfU0hJ RlQgfAotCQkgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMCA8PCBWRTFfVkZDT01QT05FTlRfMl9T SElGVCB8Ci0JCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8z X1NISUZUKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwg VkUxX1ZGQ09NUE9ORU5UXzBfU0hJRlQgfAorCQkgICAgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVf MCA8PCBWRTFfVkZDT01QT05FTlRfMV9TSElGVCB8CisJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9T VE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8yX1NISUZUIHwKKwkJICAgICBHRU40X1ZGQ09NUE9O RU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzNfU0hJRlQpOwogCiAJLyogeCx5ICovCi0J T1VUX0JBVENIKDAgPDwgR0VONl9WRTBfVkVSVEVYX0JVRkZFUl9JTkRFWF9TSElGVCB8IEdFTjZf VkUwX1ZBTElEIHwKLQkJICBTVVJGQUNFRk9STUFUX1IxNkcxNl9TU0NBTEVEIDw8IFZFMF9GT1JN QVRfU0hJRlQgfAotCQkgIDAgPDwgVkUwX09GRlNFVF9TSElGVCk7IC8qIG9mZnNldHMgdmIgaW4g Ynl0ZXMgKi8KLQlPVVRfQkFUQ0goR0VONF9WRkNPTVBPTkVOVF9TVE9SRV9TUkMgPDwgVkUxX1ZG Q09NUE9ORU5UXzBfU0hJRlQgfAotCQkgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfU1JDIDw8IFZF MV9WRkNPTVBPTkVOVF8xX1NISUZUIHwKLQkJICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwg VkUxX1ZGQ09NUE9ORU5UXzJfU0hJRlQgfAotCQkgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMV9G TFQgPDwgVkUxX1ZGQ09NUE9ORU5UXzNfU0hJRlQpOworCWludGVsX2JiX291dChpYmIsIDAgPDwg R0VONl9WRTBfVkVSVEVYX0JVRkZFUl9JTkRFWF9TSElGVCB8IEdFTjZfVkUwX1ZBTElEIHwKKwkJ ICAgICBTVVJGQUNFRk9STUFUX1IxNkcxNl9TU0NBTEVEIDw8IFZFMF9GT1JNQVRfU0hJRlQgfAor CQkgICAgIDAgPDwgVkUwX09GRlNFVF9TSElGVCk7IC8qIG9mZnNldHMgdmIgaW4gYnl0ZXMgKi8K KwlpbnRlbF9iYl9vdXQoaWJiLCBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFX1NSQyA8PCBWRTFfVkZD T01QT05FTlRfMF9TSElGVCB8CisJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV9TUkMgPDwg VkUxX1ZGQ09NUE9ORU5UXzFfU0hJRlQgfAorCQkgICAgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVf MCA8PCBWRTFfVkZDT01QT05FTlRfMl9TSElGVCB8CisJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9T VE9SRV8xX0ZMVCA8PCBWRTFfVkZDT01QT05FTlRfM19TSElGVCk7CiAKIAkvKiBzLHQgKi8KLQlP VVRfQkFUQ0goMCA8PCBHRU42X1ZFMF9WRVJURVhfQlVGRkVSX0lOREVYX1NISUZUIHwgR0VONl9W RTBfVkFMSUQgfAotCQkgIFNVUkZBQ0VGT1JNQVRfUjE2RzE2X1NTQ0FMRUQgPDwgVkUwX0ZPUk1B VF9TSElGVCB8Ci0JCSAgNCA8PCBWRTBfT0ZGU0VUX1NISUZUKTsgIC8qIG9mZnNldCB2YiBpbiBi eXRlcyAqLwotCU9VVF9CQVRDSChHRU40X1ZGQ09NUE9ORU5UX1NUT1JFX1NSQyA8PCBWRTFfVkZD T01QT05FTlRfMF9TSElGVCB8Ci0JCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV9TUkMgPDwgVkUx X1ZGQ09NUE9ORU5UXzFfU0hJRlQgfAotCQkgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMCA8PCBW RTFfVkZDT01QT05FTlRfMl9TSElGVCB8Ci0JCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8xX0ZM VCA8PCBWRTFfVkZDT01QT05FTlRfM19TSElGVCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCA8PCBH RU42X1ZFMF9WRVJURVhfQlVGRkVSX0lOREVYX1NISUZUIHwgR0VONl9WRTBfVkFMSUQgfAorCQkg ICAgIFNVUkZBQ0VGT1JNQVRfUjE2RzE2X1NTQ0FMRUQgPDwgVkUwX0ZPUk1BVF9TSElGVCB8CisJ CSAgICAgNCA8PCBWRTBfT0ZGU0VUX1NISUZUKTsgIC8qIG9mZnNldCB2YiBpbiBieXRlcyAqLwor CWludGVsX2JiX291dChpYmIsIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfU1JDIDw8IFZFMV9WRkNP TVBPTkVOVF8wX1NISUZUIHwKKwkJICAgICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFX1NSQyA8PCBW RTFfVkZDT01QT05FTlRfMV9TSElGVCB8CisJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8w IDw8IFZFMV9WRkNPTVBPTkVOVF8yX1NISUZUIHwKKwkJICAgICBHRU40X1ZGQ09NUE9ORU5UX1NU T1JFXzFfRkxUIDw8IFZFMV9WRkNPTVBPTkVOVF8zX1NISUZUKTsKIH0KIAogc3RhdGljIHVpbnQz Ml90Ci1nZW43X2NyZWF0ZV92ZXJ0ZXhfYnVmZmVyKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gsCitnZW43X2NyZWF0ZV92ZXJ0ZXhfYnVmZmVyKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAog CQkJICB1aW50MzJfdCBzcmNfeCwgdWludDMyX3Qgc3JjX3ksCiAJCQkgIHVpbnQzMl90IGRzdF94 LCB1aW50MzJfdCBkc3RfeSwKIAkJCSAgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCkK IHsKIAl1aW50MTZfdCAqdjsKIAotCXYgPSBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX2FsbG9j KGJhdGNoLCAxMiAqIHNpemVvZigqdiksIDgpOworCXYgPSBpbnRlbF9iYl9wdHJfYWxpZ24oaWJi LCA4KTsKIAogCXZbMF0gPSBkc3RfeCArIHdpZHRoOwogCXZbMV0gPSBkc3RfeSArIGhlaWdodDsK QEAgLTE3MCw2NiArMTY2LDY4IEBAIGdlbjdfY3JlYXRlX3ZlcnRleF9idWZmZXIoc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKIAl2WzEwXSA9IHNyY194OwogCXZbMTFdID0gc3JjX3k7 CiAKLQlyZXR1cm4gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9vZmZzZXQoYmF0Y2gsIHYpOwor CXJldHVybiBpbnRlbF9iYl9wdHJfYWRkX3JldHVybl9wcmV2X29mZnNldChpYmIsIDEyICogc2l6 ZW9mKCp2KSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdlbjdfZW1pdF92ZXJ0ZXhfYnVmZmVyKHN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCitzdGF0aWMgdm9pZCBnZW43X2VtaXRfdmVydGV4 X2J1ZmZlcihzdHJ1Y3QgaW50ZWxfYmIgKmliYiwKIAkJCQkgICAgaW50IHNyY194LCBpbnQgc3Jj X3ksCiAJCQkJICAgIGludCBkc3RfeCwgaW50IGRzdF95LAogCQkJCSAgICBpbnQgd2lkdGgsIGlu dCBoZWlnaHQsCiAJCQkJICAgIHVpbnQzMl90IG9mZnNldCkKIHsKLQlPVVRfQkFUQ0goR0VONF8z RFNUQVRFX1ZFUlRFWF9CVUZGRVJTIHwgKDUgLSAyKSk7Ci0JT1VUX0JBVENIKDAgPDwgR0VONl9W QjBfQlVGRkVSX0lOREVYX1NISUZUIHwKLQkJICBHRU42X1ZCMF9WRVJURVhEQVRBIHwKLQkJICBH RU43X1ZCMF9BRERSRVNTX01PRElGWV9FTkFCTEUgfAotCQkgIDQgKiAyIDw8IFZCMF9CVUZGRVJf UElUQ0hfU0hJRlQpOwotCi0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX1ZF UlRFWCwgMCwgb2Zmc2V0KTsKLQlPVVRfQkFUQ0gofjApOwotCU9VVF9CQVRDSCgwKTsKKwlpbnRl bF9iYl9vdXQoaWJiLCBHRU40XzNEU1RBVEVfVkVSVEVYX0JVRkZFUlMgfCAoNSAtIDIpKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCAwIDw8IEdFTjZfVkIwX0JVRkZFUl9JTkRFWF9TSElGVCB8CisJCSAg ICAgR0VONl9WQjBfVkVSVEVYREFUQSB8CisJCSAgICAgR0VON19WQjBfQUREUkVTU19NT0RJRllf RU5BQkxFIHwKKwkJICAgICA0ICogMiA8PCBWQjBfQlVGRkVSX1BJVENIX1NISUZUKTsKKworCWlu dGVsX2JiX2VtaXRfcmVsb2MoaWJiLCBpYmItPmhhbmRsZSwgSTkxNV9HRU1fRE9NQUlOX1ZFUlRF WCwgMCwKKwkJCSAgICBvZmZzZXQsIGliYi0+YmF0Y2hfb2Zmc2V0KTsKKwlpbnRlbF9iYl9vdXQo aWJiLCB+MCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiB9CiAKIHN0YXRpYyB1aW50MzJfdAot Z2VuN19iaW5kX3N1cmZhY2VzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCSAg IGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpzcmMsCi0JCSAgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpk c3QpCitnZW43X2JpbmRfc3VyZmFjZXMoc3RydWN0IGludGVsX2JiICppYmIsCisJCSAgIGNvbnN0 IHN0cnVjdCBpbnRlbF9idWYgKnNyYywKKwkJICAgY29uc3Qgc3RydWN0IGludGVsX2J1ZiAqZHN0 KQogewotCXVpbnQzMl90ICpiaW5kaW5nX3RhYmxlOworCXVpbnQzMl90ICpiaW5kaW5nX3RhYmxl LCBiaW5kaW5nX3RhYmxlX29mZnNldDsKIAotCWJpbmRpbmdfdGFibGUgPSBpbnRlbF9iYXRjaGJ1 ZmZlcl9zdWJkYXRhX2FsbG9jKGJhdGNoLCA4LCAzMik7CisJYmluZGluZ190YWJsZSA9IGludGVs X2JiX3B0cl9hbGlnbihpYmIsIDMyKTsKKwliaW5kaW5nX3RhYmxlX29mZnNldCA9IGludGVsX2Ji X3B0cl9hZGRfcmV0dXJuX3ByZXZfb2Zmc2V0KGliYiwgOCk7CiAKLQliaW5kaW5nX3RhYmxlWzBd ID0gZ2VuN19iaW5kX2J1ZihiYXRjaCwgZHN0LCAxKTsKLQliaW5kaW5nX3RhYmxlWzFdID0gZ2Vu N19iaW5kX2J1ZihiYXRjaCwgc3JjLCAwKTsKKwliaW5kaW5nX3RhYmxlWzBdID0gZ2VuN19iaW5k X2J1ZihpYmIsIGRzdCwgMSk7CisJYmluZGluZ190YWJsZVsxXSA9IGdlbjdfYmluZF9idWYoaWJi LCBzcmMsIDApOwogCi0JcmV0dXJuIGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJh dGNoLCBiaW5kaW5nX3RhYmxlKTsKKwlyZXR1cm4gYmluZGluZ190YWJsZV9vZmZzZXQ7CiB9CiAK IHN0YXRpYyB2b2lkCi1nZW43X2VtaXRfYmluZGluZ190YWJsZShzdHJ1Y3QgaW50ZWxfYmF0Y2hi dWZmZXIgKmJhdGNoLAotCQkJY29uc3Qgc3RydWN0IGlndF9idWYgKnNyYywKLQkJCWNvbnN0IHN0 cnVjdCBpZ3RfYnVmICpkc3QsCitnZW43X2VtaXRfYmluZGluZ190YWJsZShzdHJ1Y3QgaW50ZWxf YmIgKmliYiwKKwkJCWNvbnN0IHN0cnVjdCBpbnRlbF9idWYgKnNyYywKKwkJCWNvbnN0IHN0cnVj dCBpbnRlbF9idWYgKmRzdCwKIAkJCXVpbnQzMl90IGJpbmRfc3VyZl9vZmYpCiB7Ci0JT1VUX0JB VENIKEdFTjdfM0RTVEFURV9CSU5ESU5HX1RBQkxFX1BPSU5URVJTX1BTIHwgKDIgLSAyKSk7Ci0J T1VUX0JBVENIKGJpbmRfc3VyZl9vZmYpOworCWludGVsX2JiX291dChpYmIsIEdFTjdfM0RTVEFU RV9CSU5ESU5HX1RBQkxFX1BPSU5URVJTX1BTIHwgKDIgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGli YiwgYmluZF9zdXJmX29mZik7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW43X2VtaXRfZHJhd2luZ19y ZWN0YW5nbGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgY29uc3Qgc3RydWN0IGln dF9idWYgKmRzdCkKK2dlbjdfZW1pdF9kcmF3aW5nX3JlY3RhbmdsZShzdHJ1Y3QgaW50ZWxfYmIg KmliYiwgY29uc3Qgc3RydWN0IGludGVsX2J1ZiAqZHN0KQogewotCU9VVF9CQVRDSChHRU40XzNE U1RBVEVfRFJBV0lOR19SRUNUQU5HTEUgfCAoNCAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VU X0JBVENIKChpZ3RfYnVmX2hlaWdodChkc3QpIC0gMSkgPDwgMTYgfCAoaWd0X2J1Zl93aWR0aChk c3QpIC0gMSkpOwotCU9VVF9CQVRDSCgwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU40XzNEU1RB VEVfRFJBV0lOR19SRUNUQU5HTEUgfCAoNCAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCAoaW50ZWxfYnVmX2hlaWdodChkc3QpIC0gMSkgPDwgMTYgfCAo aW50ZWxfYnVmX3dpZHRoKGRzdCkgLSAxKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiB9CiAK IHN0YXRpYyB1aW50MzJfdAotZ2VuN19jcmVhdGVfYmxlbmRfc3RhdGUoc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCkKK2dlbjdfY3JlYXRlX2JsZW5kX3N0YXRlKHN0cnVjdCBpbnRlbF9i YiAqaWJiKQogewogCXN0cnVjdCBnZW42X2JsZW5kX3N0YXRlICpibGVuZDsKIAotCWJsZW5kID0g aW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9hbGxvYyhiYXRjaCwgc2l6ZW9mKCpibGVuZCksIDY0 KTsKKwlibGVuZCA9IGludGVsX2JiX3B0cl9hbGlnbihpYmIsIDY0KTsKIAogCWJsZW5kLT5ibGVu ZDAuZGVzdF9ibGVuZF9mYWN0b3IgPSBHRU42X0JMRU5ERkFDVE9SX1pFUk87CiAJYmxlbmQtPmJs ZW5kMC5zb3VyY2VfYmxlbmRfZmFjdG9yID0gR0VONl9CTEVOREZBQ1RPUl9PTkU7CkBAIC0yMzcs NTQgKzIzNSw2MSBAQCBnZW43X2NyZWF0ZV9ibGVuZF9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hi dWZmZXIgKmJhdGNoKQogCWJsZW5kLT5ibGVuZDEucG9zdF9ibGVuZF9jbGFtcF9lbmFibGUgPSAx OwogCWJsZW5kLT5ibGVuZDEucHJlX2JsZW5kX2NsYW1wX2VuYWJsZSA9IDE7CiAKLQlyZXR1cm4g aW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9vZmZzZXQoYmF0Y2gsIGJsZW5kKTsKKwlyZXR1cm4g aW50ZWxfYmJfcHRyX2FkZF9yZXR1cm5fcHJldl9vZmZzZXQoaWJiLCBzaXplb2YoKmJsZW5kKSk7 CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW43X2VtaXRfc3RhdGVfYmFzZV9hZGRyZXNzKHN0cnVjdCBp bnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitnZW43X2VtaXRfc3RhdGVfYmFzZV9hZGRyZXNzKHN0 cnVjdCBpbnRlbF9iYiAqaWJiKQogewotCU9VVF9CQVRDSChHRU40X1NUQVRFX0JBU0VfQUREUkVT UyB8ICgxMCAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkx NV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCAwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQlPVVRf UkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsIEJBU0VfQURE UkVTU19NT0RJRlkpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1 X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsIEJBU0VfQUREUkVTU19NT0RJRlkpOwotCi0JT1VU X0JBVENIKDApOwotCU9VVF9CQVRDSCgwIHwgQkFTRV9BRERSRVNTX01PRElGWSk7Ci0JT1VUX0JB VENIKDApOwotCU9VVF9CQVRDSCgwIHwgQkFTRV9BRERSRVNTX01PRElGWSk7CisJaW50ZWxfYmJf b3V0KGliYiwgR0VONF9TVEFURV9CQVNFX0FERFJFU1MgfCAoMTAgLSAyKSk7CisJaW50ZWxfYmJf b3V0KGliYiwgMCk7CisKKwlpbnRlbF9iYl9lbWl0X3JlbG9jKGliYiwgaWJiLT5oYW5kbGUsIEk5 MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgMCwKKwkJCSAgICBCQVNFX0FERFJFU1NfTU9ESUZZ LAorCQkJICAgIGliYi0+YmF0Y2hfb2Zmc2V0KTsKKwlpbnRlbF9iYl9lbWl0X3JlbG9jKGliYiwg aWJiLT5oYW5kbGUsIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgMCwKKwkJCSAgICBCQVNF X0FERFJFU1NfTU9ESUZZLAorCQkJICAgIGliYi0+YmF0Y2hfb2Zmc2V0KTsKKwlpbnRlbF9iYl9v dXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9lbWl0X3JlbG9jKGliYiwgaWJiLT5oYW5kbGUsIEk5MTVf R0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgMCwKKwkJCSAgICBCQVNFX0FERFJFU1NfTU9ESUZZLAor CQkJICAgIGliYi0+YmF0Y2hfb2Zmc2V0KTsKKworCWludGVsX2JiX291dChpYmIsIDApOworCWlu dGVsX2JiX291dChpYmIsIDAgfCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKKwlpbnRlbF9iYl9vdXQo aWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwIHwgQkFTRV9BRERSRVNTX01PRElGWSk7CiB9 CiAKIHN0YXRpYyB1aW50MzJfdAotZ2VuN19jcmVhdGVfY2Nfdmlld3BvcnQoc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCkKK2dlbjdfY3JlYXRlX2NjX3ZpZXdwb3J0KHN0cnVjdCBpbnRl bF9iYiAqaWJiKQogewogCXN0cnVjdCBnZW40X2NjX3ZpZXdwb3J0ICp2cDsKIAotCXZwID0gaW50 ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9hbGxvYyhiYXRjaCwgc2l6ZW9mKCp2cCksIDMyKTsKKwl2 cCA9IGludGVsX2JiX3B0cl9hbGlnbihpYmIsIDMyKTsKIAl2cC0+bWluX2RlcHRoID0gLTEuZTM1 OwogCXZwLT5tYXhfZGVwdGggPSAxLmUzNTsKIAotCXJldHVybiBpbnRlbF9iYXRjaGJ1ZmZlcl9z dWJkYXRhX29mZnNldChiYXRjaCwgdnApOworCXJldHVybiBpbnRlbF9iYl9wdHJfYWRkX3JldHVy bl9wcmV2X29mZnNldChpYmIsIHNpemVvZigqdnApKTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjdf ZW1pdF9jYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBibGVuZF9z dGF0ZSwKK2dlbjdfZW1pdF9jYyhzdHJ1Y3QgaW50ZWxfYmIgKmliYiwgdWludDMyX3QgYmxlbmRf c3RhdGUsCiAJICAgICB1aW50MzJfdCBjY192aWV3cG9ydCkKIHsKLQlPVVRfQkFUQ0goR0VON18z RFNUQVRFX0JMRU5EX1NUQVRFX1BPSU5URVJTIHwgKDIgLSAyKSk7Ci0JT1VUX0JBVENIKGJsZW5k X3N0YXRlKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfQkxFTkRfU1RBVEVfUE9J TlRFUlMgfCAoMiAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBibGVuZF9zdGF0ZSk7CiAKLQlP VVRfQkFUQ0goR0VON18zRFNUQVRFX1ZJRVdQT1JUX1NUQVRFX1BPSU5URVJTX0NDIHwgKDIgLSAy KSk7Ci0JT1VUX0JBVENIKGNjX3ZpZXdwb3J0KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNE U1RBVEVfVklFV1BPUlRfU1RBVEVfUE9JTlRFUlNfQ0MgfCAoMiAtIDIpKTsKKwlpbnRlbF9iYl9v dXQoaWJiLCBjY192aWV3cG9ydCk7CiB9CiAKIHN0YXRpYyB1aW50MzJfdAotZ2VuN19jcmVhdGVf c2FtcGxlcihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorZ2VuN19jcmVhdGVfc2Ft cGxlcihzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKIAlzdHJ1Y3QgZ2VuN19zYW1wbGVyX3N0YXRl ICpzczsKIAotCXNzID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9hbGxvYyhiYXRjaCwgc2l6 ZW9mKCpzcyksIDMyKTsKKwlzcyA9IGludGVsX2JiX3B0cl9hbGlnbihpYmIsIDMyKTsKIAogCXNz LT5zczAubWluX2ZpbHRlciA9IEdFTjRfTUFQRklMVEVSX05FQVJFU1Q7CiAJc3MtPnNzMC5tYWdf ZmlsdGVyID0gR0VONF9NQVBGSUxURVJfTkVBUkVTVDsKQEAgLTI5NSwyODMgKzMwMCwyODQgQEAg Z2VuN19jcmVhdGVfc2FtcGxlcihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQogCiAJ c3MtPnNzMy5ub25fbm9ybWFsaXplZF9jb29yZCA9IDE7CiAKLQlyZXR1cm4gaW50ZWxfYmF0Y2hi dWZmZXJfc3ViZGF0YV9vZmZzZXQoYmF0Y2gsIHNzKTsKKwlyZXR1cm4gaW50ZWxfYmJfcHRyX2Fk ZF9yZXR1cm5fcHJldl9vZmZzZXQoaWJiLCBzaXplb2YoKnNzKSk7CiB9CiAKIHN0YXRpYyB2b2lk Ci1nZW43X2VtaXRfc2FtcGxlcihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50 MzJfdCBzYW1wbGVyX29mZikKK2dlbjdfZW1pdF9zYW1wbGVyKHN0cnVjdCBpbnRlbF9iYiAqaWJi LCB1aW50MzJfdCBzYW1wbGVyX29mZikKIHsKLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX1NBTVBM RVJfU1RBVEVfUE9JTlRFUlNfUFMgfCAoMiAtIDIpKTsKLQlPVVRfQkFUQ0goc2FtcGxlcl9vZmYp OworCWludGVsX2JiX291dChpYmIsIEdFTjdfM0RTVEFURV9TQU1QTEVSX1NUQVRFX1BPSU5URVJT X1BTIHwgKDIgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgc2FtcGxlcl9vZmYpOwogfQogCiBz dGF0aWMgdm9pZAotZ2VuN19lbWl0X211bHRpc2FtcGxlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZl ciAqYmF0Y2gpCitnZW43X2VtaXRfbXVsdGlzYW1wbGUoc3RydWN0IGludGVsX2JiICppYmIpCiB7 Ci0JT1VUX0JBVENIKEdFTjZfM0RTVEFURV9NVUxUSVNBTVBMRSB8ICg0IC0gMikpOwotCU9VVF9C QVRDSChHRU42XzNEU1RBVEVfTVVMVElTQU1QTEVfUElYRUxfTE9DQVRJT05fQ0VOVEVSIHwKLQkJ ICBHRU42XzNEU1RBVEVfTVVMVElTQU1QTEVfTlVNU0FNUExFU18xKTsgLyogMSBzYW1wbGUvcGl4 ZWwgKi8KLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCi0JT1VUX0JBVENIKEdFTjZf M0RTVEFURV9TQU1QTEVfTUFTSyB8ICgyIC0gMikpOwotCU9VVF9CQVRDSCgxKTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCBHRU42XzNEU1RBVEVfTVVMVElTQU1QTEUgfCAoNCAtIDIpKTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCBHRU42XzNEU1RBVEVfTVVMVElTQU1QTEVfUElYRUxfTE9DQVRJT05fQ0VOVEVS IHwKKwkJICAgICBHRU42XzNEU1RBVEVfTVVMVElTQU1QTEVfTlVNU0FNUExFU18xKTsgLyogMSBz YW1wbGUvcGl4ZWwgKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCAwKTsKKworCWludGVsX2JiX291dChpYmIsIEdFTjZfM0RTVEFURV9TQU1QTEVfTUFTSyB8ICgy IC0gMikpOworCWludGVsX2JiX291dChpYmIsIDEpOwogfQogCiBzdGF0aWMgdm9pZAotZ2VuN19l bWl0X3VyYihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorZ2VuN19lbWl0X3VyYihz dHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX1BVU0hfQ09O U1RBTlRfQUxMT0NfUFMgfCAoMiAtIDIpKTsKLQlPVVRfQkFUQ0goOCk7IC8qIGluIDFLQnMgKi8K KwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfUFVTSF9DT05TVEFOVF9BTExPQ19QUyB8 ICgyIC0gMikpOworCWludGVsX2JiX291dChpYmIsIDgpOyAvKiBpbiAxS0JzICovCiAKIAkvKiBu dW0gb2YgVlMgZW50cmllcyBtdXN0IGJlIGRpdmlzaWJsZSBieSA4IGlmIHNpemUgPCA5ICovCi0J T1VUX0JBVENIKEdFTjdfM0RTVEFURV9VUkJfVlMgfCAoMiAtIDIpKTsKLQlPVVRfQkFUQ0goKDY0 IDw8IEdFTjdfVVJCX0VOVFJZX05VTUJFUl9TSElGVCkgfAotCQkgICgyIC0gMSkgPDwgR0VON19V UkJfRU5UUllfU0laRV9TSElGVCB8Ci0JCSAgKDEgPDwgR0VON19VUkJfU1RBUlRJTkdfQUREUkVT U19TSElGVCkpOwotCi0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9VUkJfSFMgfCAoMiAtIDIpKTsK LQlPVVRfQkFUQ0goKDAgPDwgR0VON19VUkJfRU5UUllfU0laRV9TSElGVCkgfAotCQkgICgyIDw8 IEdFTjdfVVJCX1NUQVJUSU5HX0FERFJFU1NfU0hJRlQpKTsKLQotCU9VVF9CQVRDSChHRU43XzNE U1RBVEVfVVJCX0RTIHwgKDIgLSAyKSk7Ci0JT1VUX0JBVENIKCgwIDw8IEdFTjdfVVJCX0VOVFJZ X1NJWkVfU0hJRlQpIHwKLQkJICAoMiA8PCBHRU43X1VSQl9TVEFSVElOR19BRERSRVNTX1NISUZU KSk7Ci0KLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX1VSQl9HUyB8ICgyIC0gMikpOwotCU9VVF9C QVRDSCgoMCA8PCBHRU43X1VSQl9FTlRSWV9TSVpFX1NISUZUKSB8Ci0JCSAgKDEgPDwgR0VON19V UkJfU1RBUlRJTkdfQUREUkVTU19TSElGVCkpOworCWludGVsX2JiX291dChpYmIsIEdFTjdfM0RT VEFURV9VUkJfVlMgfCAoMiAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAoNjQgPDwgR0VON19V UkJfRU5UUllfTlVNQkVSX1NISUZUKSB8CisJCSAgICAgKDIgLSAxKSA8PCBHRU43X1VSQl9FTlRS WV9TSVpFX1NISUZUIHwKKwkJICAgICAoMSA8PCBHRU43X1VSQl9TVEFSVElOR19BRERSRVNTX1NI SUZUKSk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfVVJCX0hTIHwgKDIgLSAy KSk7CisJaW50ZWxfYmJfb3V0KGliYiwgKDAgPDwgR0VON19VUkJfRU5UUllfU0laRV9TSElGVCkg fAorCQkgICAgICgyIDw8IEdFTjdfVVJCX1NUQVJUSU5HX0FERFJFU1NfU0hJRlQpKTsKKworCWlu dGVsX2JiX291dChpYmIsIEdFTjdfM0RTVEFURV9VUkJfRFMgfCAoMiAtIDIpKTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCAoMCA8PCBHRU43X1VSQl9FTlRSWV9TSVpFX1NISUZUKSB8CisJCSAgICAgKDIg PDwgR0VON19VUkJfU1RBUlRJTkdfQUREUkVTU19TSElGVCkpOworCisJaW50ZWxfYmJfb3V0KGli YiwgR0VON18zRFNUQVRFX1VSQl9HUyB8ICgyIC0gMikpOworCWludGVsX2JiX291dChpYmIsICgw IDw8IEdFTjdfVVJCX0VOVFJZX1NJWkVfU0hJRlQpIHwKKwkJICAgICAoMSA8PCBHRU43X1VSQl9T VEFSVElOR19BRERSRVNTX1NISUZUKSk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW43X2VtaXRfdnMo c3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2dlbjdfZW1pdF92cyhzdHJ1Y3QgaW50 ZWxfYmIgKmliYikKIHsKLQlPVVRfQkFUQ0goR0VONl8zRFNUQVRFX1ZTIHwgKDYgLSAyKSk7Ci0J T1VUX0JBVENIKDApOyAvKiBubyBWUyBrZXJuZWwgKi8KLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JB VENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7IC8qIHBhc3MtdGhyb3VnaCAq LworCWludGVsX2JiX291dChpYmIsIEdFTjZfM0RTVEFURV9WUyB8ICg2IC0gMikpOworCWludGVs X2JiX291dChpYmIsIDApOyAvKiBubyBWUyBrZXJuZWwgKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCAw KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRl bF9iYl9vdXQoaWJiLCAwKTsgLyogcGFzcy10aHJvdWdoICovCiB9CiAKIHN0YXRpYyB2b2lkCi1n ZW43X2VtaXRfaHMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2dlbjdfZW1pdF9o cyhzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX0hTIHwg KDcgLSAyKSk7Ci0JT1VUX0JBVENIKDApOyAvKiBubyBIUyBrZXJuZWwgKi8KLQlPVVRfQkFUQ0go MCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VU X0JBVENIKDApOyAvKiBwYXNzLXRocm91Z2ggKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNE U1RBVEVfSFMgfCAoNyAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsgLyogbm8gSFMga2Vy bmVsICovCisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJ aW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJf b3V0KGliYiwgMCk7IC8qIHBhc3MtdGhyb3VnaCAqLwogfQogCiBzdGF0aWMgdm9pZAotZ2VuN19l bWl0X3RlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitnZW43X2VtaXRfdGUoc3Ry dWN0IGludGVsX2JiICppYmIpCiB7Ci0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9URSB8ICg0IC0g MikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOworCWlu dGVsX2JiX291dChpYmIsIEdFTjdfM0RTVEFURV9URSB8ICg0IC0gMikpOworCWludGVsX2JiX291 dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDAp OwogfQogCiBzdGF0aWMgdm9pZAotZ2VuN19lbWl0X2RzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZl ciAqYmF0Y2gpCitnZW43X2VtaXRfZHMoc3RydWN0IGludGVsX2JiICppYmIpCiB7Ci0JT1VUX0JB VENIKEdFTjdfM0RTVEFURV9EUyB8ICg2IC0gMikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFU Q0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7CisJ aW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX0RTIHwgKDYgLSAyKSk7CisJaW50ZWxfYmJf b3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwg MCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiB9CiAK IHN0YXRpYyB2b2lkCi1nZW43X2VtaXRfZ3Moc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRj aCkKK2dlbjdfZW1pdF9ncyhzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKLQlPVVRfQkFUQ0goR0VO Nl8zRFNUQVRFX0dTIHwgKDcgLSAyKSk7Ci0JT1VUX0JBVENIKDApOyAvKiBubyBHUyBrZXJuZWwg Ki8KLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRf QkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOyAvKiBwYXNzLXRocm91Z2ggICovCisJaW50ZWxfYmJf b3V0KGliYiwgR0VONl8zRFNUQVRFX0dTIHwgKDcgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwg MCk7IC8qIG5vIEdTIGtlcm5lbCAqLworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2Ji X291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIs IDApOworCWludGVsX2JiX291dChpYmIsIDApOyAvKiBwYXNzLXRocm91Z2ggICovCiB9CiAKIHN0 YXRpYyB2b2lkCi1nZW43X2VtaXRfc3RyZWFtb3V0KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gpCitnZW43X2VtaXRfc3RyZWFtb3V0KHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewotCU9V VF9CQVRDSChHRU43XzNEU1RBVEVfU1RSRUFNT1VUIHwgKDMgLSAyKSk7Ci0JT1VUX0JBVENIKDAp OwotCU9VVF9CQVRDSCgwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfU1RSRUFN T1VUIHwgKDMgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGli YiwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW43X2VtaXRfc2Yoc3RydWN0IGludGVsX2JhdGNo YnVmZmVyICpiYXRjaCkKK2dlbjdfZW1pdF9zZihzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKLQlP VVRfQkFUQ0goR0VONl8zRFNUQVRFX1NGIHwgKDcgLSAyKSk7Ci0JT1VUX0JBVENIKDApOwotCU9V VF9CQVRDSChHRU42XzNEU1RBVEVfU0ZfQ1VMTF9OT05FKTsKLQlPVVRfQkFUQ0goMiA8PCBHRU42 XzNEU1RBVEVfU0ZfVFJJRkFOX1BST1ZPS0VfU0hJRlQpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRf QkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOworCWludGVsX2JiX291dChpYmIsIEdFTjZfM0RTVEFU RV9TRiB8ICg3IC0gMikpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChp YmIsIEdFTjZfM0RTVEFURV9TRl9DVUxMX05PTkUpOworCWludGVsX2JiX291dChpYmIsIDIgPDwg R0VONl8zRFNUQVRFX1NGX1RSSUZBTl9QUk9WT0tFX1NISUZUKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIH0K IAogc3RhdGljIHZvaWQKLWdlbjdfZW1pdF9zYmUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaCkKK2dlbjdfZW1pdF9zYmUoc3RydWN0IGludGVsX2JiICppYmIpCiB7Ci0JT1VUX0JBVENI KEdFTjdfM0RTVEFURV9TQkUgfCAoMTQgLSAyKSk7Ci0JT1VUX0JBVENIKDEgPDwgR0VON19TQkVf TlVNX09VVFBVVFNfU0hJRlQgfAotCQkgIDEgPDwgR0VON19TQkVfVVJCX0VOVFJZX1JFQURfTEVO R1RIX1NISUZUIHwKLQkJICAxIDw8IEdFTjdfU0JFX1VSQl9FTlRSWV9SRUFEX09GRlNFVF9TSElG VCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsgLyogZHc0ICovCi0JT1VUX0JBVENI KDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOyAvKiBk dzggKi8KLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlP VVRfQkFUQ0goMCk7IC8qIGR3MTIgKi8KLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwor CWludGVsX2JiX291dChpYmIsIEdFTjdfM0RTVEFURV9TQkUgfCAoMTQgLSAyKSk7CisJaW50ZWxf YmJfb3V0KGliYiwgMSA8PCBHRU43X1NCRV9OVU1fT1VUUFVUU19TSElGVCB8CisJCSAgICAgMSA8 PCBHRU43X1NCRV9VUkJfRU5UUllfUkVBRF9MRU5HVEhfU0hJRlQgfAorCQkgICAgIDEgPDwgR0VO N19TQkVfVVJCX0VOVFJZX1JFQURfT0ZGU0VUX1NISUZUKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAw KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsgLyogZHc0ICovCisJaW50ZWxfYmJfb3V0KGliYiwg MCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50 ZWxfYmJfb3V0KGliYiwgMCk7IC8qIGR3OCAqLworCWludGVsX2JiX291dChpYmIsIDApOworCWlu dGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291 dChpYmIsIDApOyAvKiBkdzEyICovCisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJf b3V0KGliYiwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW43X2VtaXRfcHMoc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3Qga2VybmVsX29mZikKK2dlbjdfZW1pdF9wcyhz dHJ1Y3QgaW50ZWxfYmIgKmliYiwgdWludDMyX3Qga2VybmVsX29mZikKIHsKIAlpbnQgdGhyZWFk czsKIAotCWlmIChJU19IQVNXRUxMKGJhdGNoLT5kZXZpZCkpCisJaWYgKElTX0hBU1dFTEwoaWJi LT5kZXZpZCkpCiAJCXRocmVhZHMgPSA0MCA8PCBIU1dfUFNfTUFYX1RIUkVBRFNfU0hJRlQgfCAx IDw8IEhTV19QU19TQU1QTEVfTUFTS19TSElGVDsKIAllbHNlCiAJCXRocmVhZHMgPSA0MCA8PCBJ VkJfUFNfTUFYX1RIUkVBRFNfU0hJRlQ7CiAKLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX1BTIHwg KDggLSAyKSk7Ci0JT1VUX0JBVENIKGtlcm5lbF9vZmYpOwotCU9VVF9CQVRDSCgxIDw8IEdFTjdf UFNfU0FNUExFUl9DT1VOVF9TSElGVCB8Ci0JCSAgMiA8PCBHRU43X1BTX0JJTkRJTkdfVEFCTEVf RU5UUllfQ09VTlRfU0hJRlQpOwotCU9VVF9CQVRDSCgwKTsgLyogc2NyYXRjaCBhZGRyZXNzICov Ci0JT1VUX0JBVENIKHRocmVhZHMgfAotCQkgIEdFTjdfUFNfMTZfRElTUEFUQ0hfRU5BQkxFIHwK LQkJICBHRU43X1BTX0FUVFJJQlVURV9FTkFCTEUpOwotCU9VVF9CQVRDSCg2IDw8IEdFTjdfUFNf RElTUEFUQ0hfU1RBUlRfR1JGX1NISUZUXzApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0go MCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX1BTIHwgKDggLSAyKSk7CisJaW50 ZWxfYmJfb3V0KGliYiwga2VybmVsX29mZik7CisJaW50ZWxfYmJfb3V0KGliYiwgMSA8PCBHRU43 X1BTX1NBTVBMRVJfQ09VTlRfU0hJRlQgfAorCQkgICAgIDIgPDwgR0VON19QU19CSU5ESU5HX1RB QkxFX0VOVFJZX0NPVU5UX1NISUZUKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsgLyogc2NyYXRj aCBhZGRyZXNzICovCisJaW50ZWxfYmJfb3V0KGliYiwgdGhyZWFkcyB8CisJCSAgICAgR0VON19Q U18xNl9ESVNQQVRDSF9FTkFCTEUgfAorCQkgICAgIEdFTjdfUFNfQVRUUklCVVRFX0VOQUJMRSk7 CisJaW50ZWxfYmJfb3V0KGliYiwgNiA8PCBHRU43X1BTX0RJU1BBVENIX1NUQVJUX0dSRl9TSElG VF8wKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIH0K IAogc3RhdGljIHZvaWQKLWdlbjdfZW1pdF9jbGlwKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gpCitnZW43X2VtaXRfY2xpcChzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKLQlPVVRfQkFU Q0goR0VONl8zRFNUQVRFX0NMSVAgfCAoNCAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JB VENIKDApOyAvKiBwYXNzLXRocm91Z2ggKi8KLQlPVVRfQkFUQ0goMCk7CisJaW50ZWxfYmJfb3V0 KGliYiwgR0VONl8zRFNUQVRFX0NMSVAgfCAoNCAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAw KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsgLyogcGFzcy10aHJvdWdoICovCisJaW50ZWxfYmJf b3V0KGliYiwgMCk7CiAKLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX1ZJRVdQT1JUX1NUQVRFX1BP SU5URVJTX1NGX0NMIHwgKDIgLSAyKSk7Ci0JT1VUX0JBVENIKDApOworCWludGVsX2JiX291dChp YmIsIEdFTjdfM0RTVEFURV9WSUVXUE9SVF9TVEFURV9QT0lOVEVSU19TRl9DTCB8ICgyIC0gMikp OworCWludGVsX2JiX291dChpYmIsIDApOwogfQogCiBzdGF0aWMgdm9pZAotZ2VuN19lbWl0X3dt KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitnZW43X2VtaXRfd20oc3RydWN0IGlu dGVsX2JiICppYmIpCiB7Ci0JT1VUX0JBVENIKEdFTjZfM0RTVEFURV9XTSB8ICgzIC0gMikpOwot CU9VVF9CQVRDSChHRU43X1dNX0RJU1BBVENIX0VOQUJMRSB8Ci0JCUdFTjdfV01fUEVSU1BFQ1RJ VkVfUElYRUxfQkFSWUNFTlRSSUMpOwotCU9VVF9CQVRDSCgwKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCBHRU42XzNEU1RBVEVfV00gfCAoMyAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43X1dN X0RJU1BBVENIX0VOQUJMRSB8CisJCSAgICAgR0VON19XTV9QRVJTUEVDVElWRV9QSVhFTF9CQVJZ Q0VOVFJJQyk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW43 X2VtaXRfbnVsbF9kZXB0aF9idWZmZXIoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkK K2dlbjdfZW1pdF9udWxsX2RlcHRoX2J1ZmZlcihzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKLQlP VVRfQkFUQ0goR0VON18zRFNUQVRFX0RFUFRIX0JVRkZFUiB8ICg3IC0gMikpOwotCU9VVF9CQVRD SChTVVJGQUNFX05VTEwgPDwgR0VONF8zRFNUQVRFX0RFUFRIX0JVRkZFUl9UWVBFX1NISUZUIHwK LQkJICBHRU40X0RFUFRIRk9STUFUX0QzMl9GTE9BVCA8PCBHRU40XzNEU1RBVEVfREVQVEhfQlVG RkVSX0ZPUk1BVF9TSElGVCk7Ci0JT1VUX0JBVENIKDApOyAvKiBkaXNhYmxlIGRlcHRoLCBzdGVu Y2lsIGFuZCBoaXogKi8KLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRD SCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0KLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX0NMRUFSX1BB UkFNUyB8ICgzIC0gMikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7CisJaW50ZWxf YmJfb3V0KGliYiwgR0VON18zRFNUQVRFX0RFUFRIX0JVRkZFUiB8ICg3IC0gMikpOworCWludGVs X2JiX291dChpYmIsIFNVUkZBQ0VfTlVMTCA8PCBHRU40XzNEU1RBVEVfREVQVEhfQlVGRkVSX1RZ UEVfU0hJRlQgfAorCQkgICAgIEdFTjRfREVQVEhGT1JNQVRfRDMyX0ZMT0FUIDw8IEdFTjRfM0RT VEFURV9ERVBUSF9CVUZGRVJfRk9STUFUX1NISUZUKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsg LyogZGlzYWJsZSBkZXB0aCwgc3RlbmNpbCBhbmQgaGl6ICovCisJaW50ZWxfYmJfb3V0KGliYiwg MCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50 ZWxfYmJfb3V0KGliYiwgMCk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfQ0xF QVJfUEFSQU1TIHwgKDMgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJf b3V0KGliYiwgMCk7CiB9CiAKICNkZWZpbmUgQkFUQ0hfU1RBVEVfU1BMSVQgMjA0OAotdm9pZCBn ZW43X3JlbmRlcl9jb3B5ZnVuYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJ ICBkcm1faW50ZWxfY29udGV4dCAqY29udGV4dCwKLQkJCSAgY29uc3Qgc3RydWN0IGlndF9idWYg KnNyYywgdW5zaWduZWQgc3JjX3gsIHVuc2lnbmVkIHNyY195LAotCQkJICB1bnNpZ25lZCB3aWR0 aCwgdW5zaWduZWQgaGVpZ2h0LAotCQkJICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0LCB1bnNp Z25lZCBkc3RfeCwgdW5zaWduZWQgZHN0X3kpCit2b2lkIGdlbjdfcmVuZGVyX2NvcHlmdW5jKHN0 cnVjdCBpbnRlbF9iYiAqaWJiLAorCQkJICB1aW50MzJfdCBjdHgsCisJCQkgIHN0cnVjdCBpbnRl bF9idWYgKnNyYywKKwkJCSAgdWludDMyX3Qgc3JjX3gsIHVpbnQzMl90IHNyY195LAorCQkJICB1 aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0LAorCQkJICBzdHJ1Y3QgaW50ZWxfYnVmICpk c3QsCisJCQkgIHVpbnQzMl90IGRzdF94LCB1aW50MzJfdCBkc3RfeSkKIHsKIAl1aW50MzJfdCBw c19iaW5kaW5nX3RhYmxlLCBwc19zYW1wbGVyX29mZiwgcHNfa2VybmVsX29mZjsKIAl1aW50MzJf dCBibGVuZF9zdGF0ZSwgY2Nfdmlld3BvcnQ7CiAJdWludDMyX3QgdmVydGV4X2J1ZmZlcjsKLQl1 aW50MzJfdCBiYXRjaF9lbmQ7CiAKIAlpZ3RfYXNzZXJ0KHNyYy0+YnBwID09IGRzdC0+YnBwKTsK LQlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaF93aXRoX2NvbnRleHQoYmF0Y2gsIGNvbnRleHQpOwog Ci0JYmF0Y2gtPnB0ciA9ICZiYXRjaC0+YnVmZmVyW0JBVENIX1NUQVRFX1NQTElUXTsKKwlpbnRl bF9iYl9mbHVzaF9yZW5kZXJfd2l0aF9jb250ZXh0KGliYiwgY3R4KTsKKworCWludGVsX2JiX2Fk ZF9pbnRlbF9idWYoaWJiLCBkc3QsIHRydWUpOworCWludGVsX2JiX2FkZF9pbnRlbF9idWYoaWJi LCBzcmMsIGZhbHNlKTsKIAorCWludGVsX2JiX3B0cl9zZXQoaWJiLCBCQVRDSF9TVEFURV9TUExJ VCk7CiAKLQlibGVuZF9zdGF0ZSA9IGdlbjdfY3JlYXRlX2JsZW5kX3N0YXRlKGJhdGNoKTsKLQlj Y192aWV3cG9ydCA9IGdlbjdfY3JlYXRlX2NjX3ZpZXdwb3J0KGJhdGNoKTsKLQlwc19zYW1wbGVy X29mZiA9IGdlbjdfY3JlYXRlX3NhbXBsZXIoYmF0Y2gpOwotCXBzX2tlcm5lbF9vZmYgPSBpbnRl bF9iYXRjaGJ1ZmZlcl9jb3B5X2RhdGEoYmF0Y2gsIHBzX2tlcm5lbCwKLQkJCQkJCSAgICBzaXpl b2YocHNfa2VybmVsKSwgNjQpOwotCXZlcnRleF9idWZmZXIgPSBnZW43X2NyZWF0ZV92ZXJ0ZXhf YnVmZmVyKGJhdGNoLAorCWJsZW5kX3N0YXRlID0gZ2VuN19jcmVhdGVfYmxlbmRfc3RhdGUoaWJi KTsKKwljY192aWV3cG9ydCA9IGdlbjdfY3JlYXRlX2NjX3ZpZXdwb3J0KGliYik7CisJcHNfc2Ft cGxlcl9vZmYgPSBnZW43X2NyZWF0ZV9zYW1wbGVyKGliYik7CisJcHNfa2VybmVsX29mZiA9IGlu dGVsX2JiX2NvcHlfZGF0YShpYmIsIHBzX2tlcm5lbCwKKwkJCQkJICAgc2l6ZW9mKHBzX2tlcm5l bCksIDY0KTsKKwl2ZXJ0ZXhfYnVmZmVyID0gZ2VuN19jcmVhdGVfdmVydGV4X2J1ZmZlcihpYmIs CiAJCQkJCQkgIHNyY194LCBzcmNfeSwKIAkJCQkJCSAgZHN0X3gsIGRzdF95LAogCQkJCQkJICB3 aWR0aCwgaGVpZ2h0KTsKLQlwc19iaW5kaW5nX3RhYmxlID0gZ2VuN19iaW5kX3N1cmZhY2VzKGJh dGNoLCBzcmMsIGRzdCk7Ci0KLQlpZ3RfYXNzZXJ0KGJhdGNoLT5wdHIgPCAmYmF0Y2gtPmJ1ZmZl cls0MDk1XSk7Ci0KLQliYXRjaC0+cHRyID0gYmF0Y2gtPmJ1ZmZlcjsKLQlPVVRfQkFUQ0goRzRY X1BJUEVMSU5FX1NFTEVDVCB8IFBJUEVMSU5FX1NFTEVDVF8zRCk7Ci0KLQlnZW43X2VtaXRfc3Rh dGVfYmFzZV9hZGRyZXNzKGJhdGNoKTsKLQlnZW43X2VtaXRfbXVsdGlzYW1wbGUoYmF0Y2gpOwot CWdlbjdfZW1pdF91cmIoYmF0Y2gpOwotCWdlbjdfZW1pdF92cyhiYXRjaCk7Ci0JZ2VuN19lbWl0 X2hzKGJhdGNoKTsKLQlnZW43X2VtaXRfdGUoYmF0Y2gpOwotCWdlbjdfZW1pdF9kcyhiYXRjaCk7 Ci0JZ2VuN19lbWl0X2dzKGJhdGNoKTsKLQlnZW43X2VtaXRfY2xpcChiYXRjaCk7Ci0JZ2VuN19l bWl0X3NmKGJhdGNoKTsKLQlnZW43X2VtaXRfd20oYmF0Y2gpOwotCWdlbjdfZW1pdF9zdHJlYW1v dXQoYmF0Y2gpOwotCWdlbjdfZW1pdF9udWxsX2RlcHRoX2J1ZmZlcihiYXRjaCk7Ci0JZ2VuN19l bWl0X2NjKGJhdGNoLCBibGVuZF9zdGF0ZSwgY2Nfdmlld3BvcnQpOwotCWdlbjdfZW1pdF9zYW1w bGVyKGJhdGNoLCBwc19zYW1wbGVyX29mZik7Ci0JZ2VuN19lbWl0X3NiZShiYXRjaCk7Ci0JZ2Vu N19lbWl0X3BzKGJhdGNoLCBwc19rZXJuZWxfb2ZmKTsKLQlnZW43X2VtaXRfdmVydGV4X2VsZW1l bnRzKGJhdGNoKTsKLQlnZW43X2VtaXRfdmVydGV4X2J1ZmZlcihiYXRjaCwgc3JjX3gsIHNyY195 LAorCXBzX2JpbmRpbmdfdGFibGUgPSBnZW43X2JpbmRfc3VyZmFjZXMoaWJiLCBzcmMsIGRzdCk7 CisKKwlpbnRlbF9iYl9wdHJfc2V0KGliYiwgMCk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBHNFhf UElQRUxJTkVfU0VMRUNUIHwgUElQRUxJTkVfU0VMRUNUXzNEKTsKKworCWdlbjdfZW1pdF9zdGF0 ZV9iYXNlX2FkZHJlc3MoaWJiKTsKKwlnZW43X2VtaXRfbXVsdGlzYW1wbGUoaWJiKTsKKwlnZW43 X2VtaXRfdXJiKGliYik7CisJZ2VuN19lbWl0X3ZzKGliYik7CisJZ2VuN19lbWl0X2hzKGliYik7 CisJZ2VuN19lbWl0X3RlKGliYik7CisJZ2VuN19lbWl0X2RzKGliYik7CisJZ2VuN19lbWl0X2dz KGliYik7CisJZ2VuN19lbWl0X2NsaXAoaWJiKTsKKwlnZW43X2VtaXRfc2YoaWJiKTsKKwlnZW43 X2VtaXRfd20oaWJiKTsKKwlnZW43X2VtaXRfc3RyZWFtb3V0KGliYik7CisJZ2VuN19lbWl0X251 bGxfZGVwdGhfYnVmZmVyKGliYik7CisJZ2VuN19lbWl0X2NjKGliYiwgYmxlbmRfc3RhdGUsIGNj X3ZpZXdwb3J0KTsKKwlnZW43X2VtaXRfc2FtcGxlcihpYmIsIHBzX3NhbXBsZXJfb2ZmKTsKKwln ZW43X2VtaXRfc2JlKGliYik7CisJZ2VuN19lbWl0X3BzKGliYiwgcHNfa2VybmVsX29mZik7CisJ Z2VuN19lbWl0X3ZlcnRleF9lbGVtZW50cyhpYmIpOworCWdlbjdfZW1pdF92ZXJ0ZXhfYnVmZmVy KGliYiwgc3JjX3gsIHNyY195LAogCQkJCWRzdF94LCBkc3RfeSwgd2lkdGgsCiAJCQkJaGVpZ2h0 LCB2ZXJ0ZXhfYnVmZmVyKTsKLQlnZW43X2VtaXRfYmluZGluZ190YWJsZShiYXRjaCwgc3JjLCBk c3QsIHBzX2JpbmRpbmdfdGFibGUpOwotCWdlbjdfZW1pdF9kcmF3aW5nX3JlY3RhbmdsZShiYXRj aCwgZHN0KTsKLQotCU9VVF9CQVRDSChHRU40XzNEUFJJTUlUSVZFIHwgKDcgLSAyKSk7Ci0JT1VU X0JBVENIKEdFTjRfM0RQUklNSVRJVkVfVkVSVEVYX1NFUVVFTlRJQUwgfCBfM0RQUklNX1JFQ1RM SVNUKTsKLQlPVVRfQkFUQ0goMyk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgxKTsgICAv KiBzaW5nbGUgaW5zdGFuY2UgKi8KLQlPVVRfQkFUQ0goMCk7ICAgLyogc3RhcnQgaW5zdGFuY2Ug bG9jYXRpb24gKi8KLQlPVVRfQkFUQ0goMCk7ICAgLyogaW5kZXggYnVmZmVyIG9mZnNldCwgaWdu b3JlZCAqLwotCi0JT1VUX0JBVENIKE1JX0JBVENIX0JVRkZFUl9FTkQpOwotCi0JYmF0Y2hfZW5k ID0gYmF0Y2gtPnB0ciAtIGJhdGNoLT5idWZmZXI7Ci0JYmF0Y2hfZW5kID0gQUxJR04oYmF0Y2hf ZW5kLCA4KTsKLQlpZ3RfYXNzZXJ0KGJhdGNoX2VuZCA8IEJBVENIX1NUQVRFX1NQTElUKTsKLQot CWdlbjdfcmVuZGVyX2ZsdXNoKGJhdGNoLCBjb250ZXh0LCBiYXRjaF9lbmQpOwotCWludGVsX2Jh dGNoYnVmZmVyX3Jlc2V0KGJhdGNoKTsKKwlnZW43X2VtaXRfYmluZGluZ190YWJsZShpYmIsIHNy YywgZHN0LCBwc19iaW5kaW5nX3RhYmxlKTsKKwlnZW43X2VtaXRfZHJhd2luZ19yZWN0YW5nbGUo aWJiLCBkc3QpOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VONF8zRFBSSU1JVElWRSB8ICg3IC0g MikpOworCWludGVsX2JiX291dChpYmIsIEdFTjRfM0RQUklNSVRJVkVfVkVSVEVYX1NFUVVFTlRJ QUwgfCBfM0RQUklNX1JFQ1RMSVNUKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAzKTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAxKTsgICAvKiBzaW5nbGUgaW5zdGFu Y2UgKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsgICAvKiBzdGFydCBpbnN0YW5jZSBsb2NhdGlv biAqLworCWludGVsX2JiX291dChpYmIsIDApOyAgIC8qIGluZGV4IGJ1ZmZlciBvZmZzZXQsIGln bm9yZWQgKi8KKworCWludGVsX2JiX2VtaXRfYmJlKGliYik7CisJaW50ZWxfYmJfZXhlY193aXRo X2NvbnRleHQoaWJiLCBpbnRlbF9iYl9vZmZzZXQoaWJiKSwgY3R4LAorCQkJCSAgIEk5MTVfRVhF Q19ERUZBVUxUIHwgSTkxNV9FWEVDX05PX1JFTE9DLAorCQkJCSAgIGZhbHNlKTsKKwlkdW1wX2Jh dGNoKGliYik7CisJaW50ZWxfYmJfcmVzZXQoaWJiLCBmYWxzZSk7CiB9CmRpZmYgLS1naXQgYS9s aWIvcmVuZGVyY29weV9nZW44LmMgYi9saWIvcmVuZGVyY29weV9nZW44LmMKaW5kZXggNzUwMDVk MGIuLjk1YzNjNDk3IDEwMDY0NAotLS0gYS9saWIvcmVuZGVyY29weV9nZW44LmMKKysrIGIvbGli L3JlbmRlcmNvcHlfZ2VuOC5jCkBAIC0xNCw3ICsxNCw3IEBACiAjaW5jbHVkZSA8aTkxNV9kcm0u aD4KIAogI2luY2x1ZGUgImRybXRlc3QuaCIKLSNpbmNsdWRlICJpbnRlbF9idWZtZ3IuaCIKKyNp bmNsdWRlICJpbnRlbF9idWZvcHMuaCIKICNpbmNsdWRlICJpbnRlbF9iYXRjaGJ1ZmZlci5oIgog I2luY2x1ZGUgImludGVsX2NoaXBzZXQuaCIKICNpbmNsdWRlICJpbnRlbF9pby5oIgpAQCAtMjMs MTcgKzIzLDEyIEBACiAjaW5jbHVkZSAiaW50ZWxfcmVnLmgiCiAjaW5jbHVkZSAiaWd0X2F1eC5o IgogCi0jaW5jbHVkZSAiaW50ZWxfYXViLmgiCi0KICNkZWZpbmUgVkVSVEVYX1NJWkUgKDMqNCkK IAogI2lmIERFQlVHX1JFTkRFUkNQWQotc3RhdGljIHZvaWQgZHVtcF9iYXRjaChzdHJ1Y3QgaW50 ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKSB7Ci0JaW50IGZkID0gb3BlbigiL3RtcC9pOTY1LWJhdGNo YnVmZmVycy5kdW1wIiwgT19XUk9OTFkgfCBPX0NSRUFULCAgMDY2Nik7Ci0JaWYgKGZkICE9IC0x KSB7Ci0JCWlndF9hc3NlcnRfZXEod3JpdGUoZmQsIGJhdGNoLT5idWZmZXIsIDQwOTYpLCA0MDk2 KTsKLQkJZmQgPSBjbG9zZShmZCk7Ci0JfQorc3RhdGljIHZvaWQgZHVtcF9iYXRjaChzdHJ1Y3Qg aW50ZWxfYmIgKmliYikKK3sKKwlpbnRlbF9iYl9kdW1wKGliYiwgIi90bXAvZ2VuOC1iYXRjaGJ1 ZmZlcnMuZHVtcCIpOwogfQogI2Vsc2UKICNkZWZpbmUgZHVtcF9iYXRjaCh4KSBkbyB7IH0gd2hp bGUoMCkKQEAgLTcwLDg5ICs2NSwxOCBAQCBzdGF0aWMgY29uc3QgdWludDMyX3QgcHNfa2VybmVs W11bNF0gPSB7CiAjZW5kaWYKIH07CiAKLS8qIEFVQiBhbm5vdGF0aW9uIHN1cHBvcnQgKi8KLSNk ZWZpbmUgTUFYX0FOTk9UQVRJT05TCTMzCi1zdHJ1Y3QgYW5ub3RhdGlvbnNfY29udGV4dCB7Ci0J ZHJtX2ludGVsX2F1Yl9hbm5vdGF0aW9uIGFubm90YXRpb25zW01BWF9BTk5PVEFUSU9OU107Ci0J aW50IGluZGV4OwotCXVpbnQzMl90IG9mZnNldDsKLX07Ci0KLXN0YXRpYyB2b2lkIGFubm90YXRp b25faW5pdChzdHJ1Y3QgYW5ub3RhdGlvbnNfY29udGV4dCAqYXViKQotewotCS8qIGF1Yi0+YW5u b3RhdGlvbnMgaXMgYW4gYXJyYXkga2VlcGluZyBhIGxpc3Qgb2YgYW5ub3RhdGlvbnMgb2YgdGhl Ci0JICogYmF0Y2ggYnVmZmVyIG9yZGVyZWQgYnkgb2Zmc2V0LiBhdWItPmFubm90YXRpb25zWzBd IGlzIHRodXMgbGVmdAotCSAqIGZvciB0aGUgY29tbWFuZCBzdHJlYW0gYW5kIHdpbGwgYmUgZmls bGVkIGp1c3QgYmVmb3JlIGV4ZWN1dGluZwotCSAqIHRoZSBiYXRjaCBidWZmZXIgd2l0aCBhbm5v dGF0aW9uc19hZGRfYmF0Y2goKSAqLwotCWF1Yi0+aW5kZXggPSAxOwotfQotCi1zdGF0aWMgdm9p ZCBhZGRfYW5ub3RhdGlvbihkcm1faW50ZWxfYXViX2Fubm90YXRpb24gKmEsCi0JCQkgICB1aW50 MzJfdCB0eXBlLCB1aW50MzJfdCBzdWJ0eXBlLAotCQkJICAgdWludDMyX3QgZW5kaW5nX29mZnNl dCkKLXsKLQlhLT50eXBlID0gdHlwZTsKLQlhLT5zdWJ0eXBlID0gc3VidHlwZTsKLQlhLT5lbmRp bmdfb2Zmc2V0ID0gZW5kaW5nX29mZnNldDsKLX0KLQotc3RhdGljIHZvaWQgYW5ub3RhdGlvbl9h ZGRfYmF0Y2goc3RydWN0IGFubm90YXRpb25zX2NvbnRleHQgKmF1Yiwgc2l6ZV90IHNpemUpCi17 Ci0JYWRkX2Fubm90YXRpb24oJmF1Yi0+YW5ub3RhdGlvbnNbMF0sIEFVQl9UUkFDRV9UWVBFX0JB VENILCAwLCBzaXplKTsKLX0KLQotc3RhdGljIHZvaWQgYW5ub3RhdGlvbl9hZGRfc3RhdGUoc3Ry dWN0IGFubm90YXRpb25zX2NvbnRleHQgKmF1YiwKLQkJCQkgdWludDMyX3Qgc3RhdGVfdHlwZSwK LQkJCQkgdWludDMyX3Qgc3RhcnRfb2Zmc2V0LAotCQkJCSBzaXplX3QgICBzaXplKQotewotCWln dF9hc3NlcnQoYXViLT5pbmRleCA8IE1BWF9BTk5PVEFUSU9OUyk7Ci0KLQlhZGRfYW5ub3RhdGlv bigmYXViLT5hbm5vdGF0aW9uc1thdWItPmluZGV4KytdLAotCQkgICAgICAgQVVCX1RSQUNFX1RZ UEVfTk9UWVBFLCAwLAotCQkgICAgICAgc3RhcnRfb2Zmc2V0KTsKLQlhZGRfYW5ub3RhdGlvbigm YXViLT5hbm5vdGF0aW9uc1thdWItPmluZGV4KytdLAotCQkgICAgICAgQVVCX1RSQUNFX1RZUEUo c3RhdGVfdHlwZSksCi0JCSAgICAgICBBVUJfVFJBQ0VfU1VCVFlQRShzdGF0ZV90eXBlKSwKLQkJ ICAgICAgIHN0YXJ0X29mZnNldCArIHNpemUpOwotfQotCi1zdGF0aWMgdm9pZCBhbm5vdGF0aW9u X2ZsdXNoKHN0cnVjdCBhbm5vdGF0aW9uc19jb250ZXh0ICphdWIsCi0JCQkgICAgIHN0cnVjdCBp bnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCi17Ci0JaWYgKCFpZ3RfYXViX2R1bXBfZW5hYmxlZCgp KQotCQlyZXR1cm47Ci0KLQlkcm1faW50ZWxfYnVmbWdyX2dlbV9zZXRfYXViX2Fubm90YXRpb25z KGJhdGNoLT5ibywKLQkJCQkJCSBhdWItPmFubm90YXRpb25zLAotCQkJCQkJIGF1Yi0+aW5kZXgp OwotfQotCi1zdGF0aWMgdm9pZAotZ2VuNl9yZW5kZXJfZmx1c2goc3RydWN0IGludGVsX2JhdGNo YnVmZmVyICpiYXRjaCwKLQkJICBkcm1faW50ZWxfY29udGV4dCAqY29udGV4dCwgdWludDMyX3Qg YmF0Y2hfZW5kKQotewotCWlndF9hc3NlcnRfZXEoZHJtX2ludGVsX2JvX3N1YmRhdGEoYmF0Y2gt PmJvLAotCQkJCQkgICAwLCA0MDk2LCBiYXRjaC0+YnVmZmVyKSwKLQkJICAgICAgMCk7Ci0JaWd0 X2Fzc2VydF9lcShkcm1faW50ZWxfZ2VtX2JvX2NvbnRleHRfZXhlYyhiYXRjaC0+Ym8sIGNvbnRl eHQsCi0JCQkJCQkgICAgYmF0Y2hfZW5kLCAwKSwKLQkJICAgICAgMCk7Ci19Ci0KIC8qIE1vc3Rs eSBjb3B5K3Bhc3RlIGZyb20gZ2VuNiwgZXhjZXB0IGhlaWdodCwgd2lkdGgsIHBpdGNoIG1vdmVk ICovCiBzdGF0aWMgdWludDMyX3QKLWdlbjhfYmluZF9idWYoc3RydWN0IGludGVsX2JhdGNoYnVm ZmVyICpiYXRjaCwKLQkgICAgICBzdHJ1Y3QgYW5ub3RhdGlvbnNfY29udGV4dCAqYXViLAotCSAg ICAgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpidWYsIGludCBpc19kc3QpCitnZW44X2JpbmRfYnVm KHN0cnVjdCBpbnRlbF9iYiAqaWJiLAorCSAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9idWYgKmJ1 ZiwgaW50IGlzX2RzdCkKIHsKIAlzdHJ1Y3QgZ2VuOF9zdXJmYWNlX3N0YXRlICpzczsKLQl1aW50 MzJfdCB3cml0ZV9kb21haW4sIHJlYWRfZG9tYWluLCBvZmZzZXQ7Ci0JaW50IHJldDsKKwl1aW50 MzJfdCB3cml0ZV9kb21haW4sIHJlYWRfZG9tYWluOworCXVpbnQ2NF90IGFkZHJlc3M7CiAKIAlp Z3RfYXNzZXJ0X2x0ZShidWYtPnN1cmZhY2VbMF0uc3RyaWRlLCAyNTYqMTAyNCk7Ci0JaWd0X2Fz c2VydF9sdGUoaWd0X2J1Zl93aWR0aChidWYpLCAxNjM4NCk7Ci0JaWd0X2Fzc2VydF9sdGUoaWd0 X2J1Zl9oZWlnaHQoYnVmKSwgMTYzODQpOworCWlndF9hc3NlcnRfbHRlKGludGVsX2J1Zl93aWR0 aChidWYpLCAxNjM4NCk7CisJaWd0X2Fzc2VydF9sdGUoaW50ZWxfYnVmX2hlaWdodChidWYpLCAx NjM4NCk7CiAKIAlpZiAoaXNfZHN0KSB7CiAJCXdyaXRlX2RvbWFpbiA9IHJlYWRfZG9tYWluID0g STkxNV9HRU1fRE9NQUlOX1JFTkRFUjsKQEAgLTE2MSw5ICs4NSw3IEBAIGdlbjhfYmluZF9idWYo c3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKIAkJcmVhZF9kb21haW4gPSBJOTE1X0dF TV9ET01BSU5fU0FNUExFUjsKIAl9CiAKLQlzcyA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFf YWxsb2MoYmF0Y2gsIHNpemVvZigqc3MpLCA2NCk7Ci0Jb2Zmc2V0ID0gaW50ZWxfYmF0Y2hidWZm ZXJfc3ViZGF0YV9vZmZzZXQoYmF0Y2gsIHNzKTsKLQlhbm5vdGF0aW9uX2FkZF9zdGF0ZShhdWIs IEFVQl9UUkFDRV9TVVJGQUNFX1NUQVRFLCBvZmZzZXQsIHNpemVvZigqc3MpKTsKKwlzcyA9IGlu dGVsX2JiX3B0cl9hbGlnbihpYmIsIDY0KTsKIAogCXNzLT5zczAuc3VyZmFjZV90eXBlID0gU1VS RkFDRV8yRDsKIAlzd2l0Y2ggKGJ1Zi0+YnBwKSB7CkBAIC0xODEsMjMgKzEwMywyMSBAQCBnZW44 X2JpbmRfYnVmKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCiAJZWxzZSBpZiAoYnVm LT50aWxpbmcgPT0gSTkxNV9USUxJTkdfWSkKIAkJc3MtPnNzMC50aWxlZF9tb2RlID0gMzsKIAot CWlmIChJU19DSEVSUllWSUVXKGJhdGNoLT5kZXZpZCkpCisJaWYgKElTX0NIRVJSWVZJRVcoaWJi LT5kZXZpZCkpCiAJCXNzLT5zczEubWVtb3J5X29iamVjdF9jb250cm9sID0gQ0hWX01PQ1NfV0Ig fCBDSFZfTU9DU19MMzsKIAllbHNlCiAJCXNzLT5zczEubWVtb3J5X29iamVjdF9jb250cm9sID0g QkRXX01PQ1NfUFRFIHwKIAkJCUJEV19NT0NTX1RDX0wzX1BURSB8IEJEV19NT0NTX0FHRSgwKTsK IAotCXNzLT5zczguYmFzZV9hZGRyID0gYnVmLT5iby0+b2Zmc2V0NjQ7Ci0Jc3MtPnNzOS5iYXNl X2FkZHJfaGkgPSBidWYtPmJvLT5vZmZzZXQ2NCA+PiAzMjsKLQotCXJldCA9IGRybV9pbnRlbF9i b19lbWl0X3JlbG9jKGJhdGNoLT5ibywKLQkJCQkgICAgICBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJk YXRhX29mZnNldChiYXRjaCwgJnNzLT5zczgpLAotCQkJCSAgICAgIGJ1Zi0+Ym8sIDAsCi0JCQkJ ICAgICAgcmVhZF9kb21haW4sIHdyaXRlX2RvbWFpbik7Ci0JaWd0X2Fzc2VydChyZXQgPT0gMCk7 CisJYWRkcmVzcyA9IGludGVsX2JiX29mZnNldF9yZWxvYyhpYmIsIGJ1Zi0+aGFuZGxlLAorCQkJ CQlyZWFkX2RvbWFpbiwgd3JpdGVfZG9tYWluLAorCQkJCQlpbnRlbF9iYl9vZmZzZXQoaWJiKSAr IDQgKiA4LAorCQkJCQlidWYtPmFkZHIub2Zmc2V0KTsKKwlzcy0+c3M4LmJhc2VfYWRkciA9IGFk ZHJlc3M7CisJc3MtPnNzOS5iYXNlX2FkZHJfaGkgPSBhZGRyZXNzID4+IDMyOwogCi0Jc3MtPnNz Mi5oZWlnaHQgPSBpZ3RfYnVmX2hlaWdodChidWYpIC0gMTsKLQlzcy0+c3MyLndpZHRoICA9IGln dF9idWZfd2lkdGgoYnVmKSAtIDE7CisJc3MtPnNzMi5oZWlnaHQgPSBpbnRlbF9idWZfaGVpZ2h0 KGJ1ZikgLSAxOworCXNzLT5zczIud2lkdGggID0gaW50ZWxfYnVmX3dpZHRoKGJ1ZikgLSAxOwog CXNzLT5zczMucGl0Y2ggID0gYnVmLT5zdXJmYWNlWzBdLnN0cmlkZSAtIDE7CiAKIAlzcy0+c3M3 LnNoYWRlcl9jaGFuZWxfc2VsZWN0X3IgPSA0OwpAQCAtMjA1LDM5ICsxMjUsMzIgQEAgZ2VuOF9i aW5kX2J1ZihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAogCXNzLT5zczcuc2hhZGVy X2NoYW5lbF9zZWxlY3RfYiA9IDY7CiAJc3MtPnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVjdF9hID0g NzsKIAotCXJldHVybiBvZmZzZXQ7CisJcmV0dXJuIGludGVsX2JiX3B0cl9hZGRfcmV0dXJuX3By ZXZfb2Zmc2V0KGliYiwgc2l6ZW9mKCpzcykpOwogfQogCiBzdGF0aWMgdWludDMyX3QKLWdlbjhf YmluZF9zdXJmYWNlcyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkgICBzdHJ1 Y3QgYW5ub3RhdGlvbnNfY29udGV4dCAqYXViLAotCQkgICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAq c3JjLAotCQkgICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0KQorZ2VuOF9iaW5kX3N1cmZhY2Vz KHN0cnVjdCBpbnRlbF9iYiAqaWJiLAorCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfYnVmICpzcmMs CisJCSAgIGNvbnN0IHN0cnVjdCBpbnRlbF9idWYgKmRzdCkKIHsKLQl1aW50MzJfdCAqYmluZGlu Z190YWJsZSwgb2Zmc2V0OworCXVpbnQzMl90ICpiaW5kaW5nX3RhYmxlLCBiaW5kaW5nX3RhYmxl X29mZnNldDsKIAotCWJpbmRpbmdfdGFibGUgPSBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX2Fs bG9jKGJhdGNoLCA4LCAzMik7Ci0Jb2Zmc2V0ID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9v ZmZzZXQoYmF0Y2gsIGJpbmRpbmdfdGFibGUpOwotCWFubm90YXRpb25fYWRkX3N0YXRlKGF1Yiwg QVVCX1RSQUNFX0JJTkRJTkdfVEFCTEUsIG9mZnNldCwgOCk7CisJYmluZGluZ190YWJsZSA9IGlu dGVsX2JiX3B0cl9hbGlnbihpYmIsIDMyKTsKKwliaW5kaW5nX3RhYmxlX29mZnNldCA9IGludGVs X2JiX3B0cl9hZGRfcmV0dXJuX3ByZXZfb2Zmc2V0KGliYiwgOCk7CiAKLQliaW5kaW5nX3RhYmxl WzBdID0gZ2VuOF9iaW5kX2J1ZihiYXRjaCwgYXViLCBkc3QsIDEpOwotCWJpbmRpbmdfdGFibGVb MV0gPSBnZW44X2JpbmRfYnVmKGJhdGNoLCBhdWIsIHNyYywgMCk7CisJYmluZGluZ190YWJsZVsw XSA9IGdlbjhfYmluZF9idWYoaWJiLCBkc3QsIDEpOworCWJpbmRpbmdfdGFibGVbMV0gPSBnZW44 X2JpbmRfYnVmKGliYiwgc3JjLCAwKTsKIAotCXJldHVybiBvZmZzZXQ7CisJcmV0dXJuIGJpbmRp bmdfdGFibGVfb2Zmc2V0OwogfQogCiAvKiBNb3N0bHkgY29weStwYXN0ZSBmcm9tIGdlbjYsIGV4 Y2VwdCB3cmFwIG1vZGVzIG1vdmVkICovCiBzdGF0aWMgdWludDMyX3QKLWdlbjhfY3JlYXRlX3Nh bXBsZXIoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJICAgIHN0cnVjdCBhbm5v dGF0aW9uc19jb250ZXh0ICphdWIpCitnZW44X2NyZWF0ZV9zYW1wbGVyKHN0cnVjdCBpbnRlbF9i YiAqaWJiKQogewogCXN0cnVjdCBnZW44X3NhbXBsZXJfc3RhdGUgKnNzOwotCXVpbnQzMl90IG9m ZnNldDsKIAotCXNzID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9hbGxvYyhiYXRjaCwgc2l6 ZW9mKCpzcyksIDY0KTsKLQlvZmZzZXQgPSBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX29mZnNl dChiYXRjaCwgc3MpOwotCWFubm90YXRpb25fYWRkX3N0YXRlKGF1YiwgQVVCX1RSQUNFX1NBTVBM RVJfU1RBVEUsCi0JCQkgICAgIG9mZnNldCwgc2l6ZW9mKCpzcykpOworCXNzID0gaW50ZWxfYmJf cHRyX2FsaWduKGliYiwgNjQpOwogCiAJc3MtPnNzMC5taW5fZmlsdGVyID0gR0VONF9NQVBGSUxU RVJfTkVBUkVTVDsKIAlzcy0+c3MwLm1hZ19maWx0ZXIgPSBHRU40X01BUEZJTFRFUl9ORUFSRVNU OwpAQCAtMjQ5LDIxICsxNjIsMTUgQEAgZ2VuOF9jcmVhdGVfc2FtcGxlcihzdHJ1Y3QgaW50ZWxf YmF0Y2hidWZmZXIgKmJhdGNoLAogCSAqIHNhbXBsZXIgZmV0Y2gsIGJ1dCBjb3VsZG4ndCBtYWtl IGl0IHdvcmsuICovCiAJc3MtPnNzMy5ub25fbm9ybWFsaXplZF9jb29yZCA9IDA7CiAKLQlyZXR1 cm4gb2Zmc2V0OworCXJldHVybiBpbnRlbF9iYl9wdHJfYWRkX3JldHVybl9wcmV2X29mZnNldChp YmIsIHNpemVvZigqc3MpKTsKIH0KIAogc3RhdGljIHVpbnQzMl90Ci1nZW44X2ZpbGxfcHMoc3Ry dWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkgICAgIHN0cnVjdCBhbm5vdGF0aW9uc19j b250ZXh0ICphdWIsCitnZW44X2ZpbGxfcHMoc3RydWN0IGludGVsX2JiICppYmIsCiAJICAgICBj b25zdCB1aW50MzJfdCBrZXJuZWxbXVs0XSwKIAkgICAgIHNpemVfdCBzaXplKQogewotCXVpbnQz Ml90IG9mZnNldDsKLQotCW9mZnNldCA9IGludGVsX2JhdGNoYnVmZmVyX2NvcHlfZGF0YShiYXRj aCwga2VybmVsLCBzaXplLCA2NCk7Ci0JYW5ub3RhdGlvbl9hZGRfc3RhdGUoYXViLCBBVUJfVFJB Q0VfS0VSTkVMX0lOU1RSVUNUSU9OUywgb2Zmc2V0LCBzaXplKTsKLQotCXJldHVybiBvZmZzZXQ7 CisJcmV0dXJuIGludGVsX2JiX2NvcHlfZGF0YShpYmIsIGtlcm5lbCwgc2l6ZSwgNjQpOwogfQog CiAvKgpAQCAtMjc3LDM0ICsxODQsMjkgQEAgZ2VuOF9maWxsX3BzKHN0cnVjdCBpbnRlbF9iYXRj aGJ1ZmZlciAqYmF0Y2gsCiAgKiBzZWUgZ2VuNl9lbWl0X3ZlcnRleF9lbGVtZW50cwogICovCiBz dGF0aWMgdWludDMyX3QKLWdlbjdfZmlsbF92ZXJ0ZXhfYnVmZmVyX2RhdGEoc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCSAgICAgc3RydWN0IGFubm90YXRpb25zX2NvbnRleHQg KmF1YiwKLQkJCSAgICAgY29uc3Qgc3RydWN0IGlndF9idWYgKnNyYywKK2dlbjdfZmlsbF92ZXJ0 ZXhfYnVmZmVyX2RhdGEoc3RydWN0IGludGVsX2JiICppYmIsCisJCQkgICAgIGNvbnN0IHN0cnVj dCBpbnRlbF9idWYgKnNyYywKIAkJCSAgICAgdWludDMyX3Qgc3JjX3gsIHVpbnQzMl90IHNyY195 LAogCQkJICAgICB1aW50MzJfdCBkc3RfeCwgdWludDMyX3QgZHN0X3ksCiAJCQkgICAgIHVpbnQz Ml90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQpCiB7Ci0Jdm9pZCAqc3RhcnQ7CiAJdWludDMyX3Qg b2Zmc2V0OwogCi0JaW50ZWxfYmF0Y2hidWZmZXJfYWxpZ24oYmF0Y2gsIDgpOwotCXN0YXJ0ID0g YmF0Y2gtPnB0cjsKKwlpbnRlbF9iYl9wdHJfYWxpZ24oaWJiLCA4KTsKKwlvZmZzZXQgPSBpbnRl bF9iYl9vZmZzZXQoaWJiKTsKIAotCWVtaXRfdmVydGV4XzJzKGJhdGNoLCBkc3RfeCArIHdpZHRo LCBkc3RfeSArIGhlaWdodCk7Ci0JZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChiYXRjaCwgc3JjX3gg KyB3aWR0aCwgaWd0X2J1Zl93aWR0aChzcmMpKTsKLQllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGJh dGNoLCBzcmNfeSArIGhlaWdodCwgaWd0X2J1Zl9oZWlnaHQoc3JjKSk7CisJZW1pdF92ZXJ0ZXhf MnMoaWJiLCBkc3RfeCArIHdpZHRoLCBkc3RfeSArIGhlaWdodCk7CisJZW1pdF92ZXJ0ZXhfbm9y bWFsaXplZChpYmIsIHNyY194ICsgd2lkdGgsIGludGVsX2J1Zl93aWR0aChzcmMpKTsKKwllbWl0 X3ZlcnRleF9ub3JtYWxpemVkKGliYiwgc3JjX3kgKyBoZWlnaHQsIGludGVsX2J1Zl9oZWlnaHQo c3JjKSk7CiAKLQllbWl0X3ZlcnRleF8ycyhiYXRjaCwgZHN0X3gsIGRzdF95ICsgaGVpZ2h0KTsK LQllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGJhdGNoLCBzcmNfeCwgaWd0X2J1Zl93aWR0aChzcmMp KTsKLQllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGJhdGNoLCBzcmNfeSArIGhlaWdodCwgaWd0X2J1 Zl9oZWlnaHQoc3JjKSk7CisJZW1pdF92ZXJ0ZXhfMnMoaWJiLCBkc3RfeCwgZHN0X3kgKyBoZWln aHQpOworCWVtaXRfdmVydGV4X25vcm1hbGl6ZWQoaWJiLCBzcmNfeCwgaW50ZWxfYnVmX3dpZHRo KHNyYykpOworCWVtaXRfdmVydGV4X25vcm1hbGl6ZWQoaWJiLCBzcmNfeSArIGhlaWdodCwgaW50 ZWxfYnVmX2hlaWdodChzcmMpKTsKIAotCWVtaXRfdmVydGV4XzJzKGJhdGNoLCBkc3RfeCwgZHN0 X3kpOwotCWVtaXRfdmVydGV4X25vcm1hbGl6ZWQoYmF0Y2gsIHNyY194LCBpZ3RfYnVmX3dpZHRo KHNyYykpOwotCWVtaXRfdmVydGV4X25vcm1hbGl6ZWQoYmF0Y2gsIHNyY195LCBpZ3RfYnVmX2hl aWdodChzcmMpKTsKKwllbWl0X3ZlcnRleF8ycyhpYmIsIGRzdF94LCBkc3RfeSk7CisJZW1pdF92 ZXJ0ZXhfbm9ybWFsaXplZChpYmIsIHNyY194LCBpbnRlbF9idWZfd2lkdGgoc3JjKSk7CisJZW1p dF92ZXJ0ZXhfbm9ybWFsaXplZChpYmIsIHNyY195LCBpbnRlbF9idWZfaGVpZ2h0KHNyYykpOwog Ci0Jb2Zmc2V0ID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9vZmZzZXQoYmF0Y2gsIHN0YXJ0 KTsKLQlhbm5vdGF0aW9uX2FkZF9zdGF0ZShhdWIsIEFVQl9UUkFDRV9WRVJURVhfQlVGRkVSLAot CQkJICAgICBvZmZzZXQsIDMgKiBWRVJURVhfU0laRSk7CiAJcmV0dXJuIG9mZnNldDsKIH0KIApA QCAtMzE4LDI1ICsyMjAsMjUgQEAgZ2VuN19maWxsX3ZlcnRleF9idWZmZXJfZGF0YShzdHJ1Y3Qg aW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAogICogcGFja2VkLgogICovCiBzdGF0aWMgdm9pZAot Z2VuNl9lbWl0X3ZlcnRleF9lbGVtZW50cyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNo KSB7CitnZW42X2VtaXRfdmVydGV4X2VsZW1lbnRzKHN0cnVjdCBpbnRlbF9iYiAqaWJiKSB7CiAJ LyoKIAkgKiBUaGUgVlVFIGxheW91dAogCSAqICAgIGR3b3JkIDAtMzogcGFkICgwLCAwLCAwLiAw KQogCSAqICAgIGR3b3JkIDQtNzogcG9zaXRpb24gKHgsIHksIDAsIDEuMCksCiAJICogICAgZHdv cmQgOC0xMTogdGV4dHVyZSBjb29yZGluYXRlIDAgKHUwLCB2MCwgMCwgMS4wKQogCSAqLwotCU9V VF9CQVRDSChHRU40XzNEU1RBVEVfVkVSVEVYX0VMRU1FTlRTIHwgKDMgKiAyICsgMSAtIDIpKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCBHRU40XzNEU1RBVEVfVkVSVEVYX0VMRU1FTlRTIHwgKDMgKiAy ICsgMSAtIDIpKTsKIAogCS8qIEVsZW1lbnQgc3RhdGUgMC4gVGhlc2UgYXJlIDQgZHdvcmRzIG9m IDAgcmVxdWlyZWQgZm9yIHRoZSBWVUUgZm9ybWF0LgogCSAqIFdlIGRvbid0IHJlYWxseSBrbm93 IG9yIGNhcmUgd2hhdCB0aGV5IGRvLgogCSAqLwotCU9VVF9CQVRDSCgwIDw8IEdFTjZfVkUwX1ZF UlRFWF9CVUZGRVJfSU5ERVhfU0hJRlQgfCBHRU42X1ZFMF9WQUxJRCB8Ci0JCSAgU1VSRkFDRUZP Uk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQgPDwgVkUwX0ZPUk1BVF9TSElGVCB8Ci0JCSAgMCA8PCBW RTBfT0ZGU0VUX1NISUZUKTsgLyogd2Ugc3BlY2lmeSAwLCBidXQgaXQncyByZWFsbHkgZG9lcyBu b3QgZXhpc3QgKi8KLQlPVVRfQkFUQ0goR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9W RkNPTVBPTkVOVF8wX1NISUZUIHwKLQkJICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwgVkUx X1ZGQ09NUE9ORU5UXzFfU0hJRlQgfAotCQkgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMCA8PCBW RTFfVkZDT01QT05FTlRfMl9TSElGVCB8Ci0JCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8 IFZFMV9WRkNPTVBPTkVOVF8zX1NISUZUKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwIDw8IEdFTjZf VkUwX1ZFUlRFWF9CVUZGRVJfSU5ERVhfU0hJRlQgfCBHRU42X1ZFMF9WQUxJRCB8CisJCSAgICAg U1VSRkFDRUZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQgPDwgVkUwX0ZPUk1BVF9TSElGVCB8CisJ CSAgICAgMCA8PCBWRTBfT0ZGU0VUX1NISUZUKTsgLyogd2Ugc3BlY2lmeSAwLCBidXQgaXQncyBy ZWFsbHkgZG9lcyBub3QgZXhpc3QgKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU40X1ZGQ09NUE9O RU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzBfU0hJRlQgfAorCQkgICAgIEdFTjRfVkZD T01QT05FTlRfU1RPUkVfMCA8PCBWRTFfVkZDT01QT05FTlRfMV9TSElGVCB8CisJCSAgICAgR0VO NF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8yX1NISUZUIHwKKwkJICAg ICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzNfU0hJRlQpOwog CiAJLyogRWxlbWVudCBzdGF0ZSAxIC0gT3VyICJkZXN0aW5hdGlvbiIgdmVydGljZXMuIFRoZXNl IGFyZSBwYXNzZWQgZG93bgogCSAqIHRocm91Z2ggdGhlIHBpcGVsaW5lLCBhbmQgZXZlbnR1YWxs eSBtYWtlIGl0IHRvIHRoZSBwaXhlbCBzaGFkZXIgYXMKQEAgLTM0NCwyNSArMjQ2LDI1IEBAIGdl bjZfZW1pdF92ZXJ0ZXhfZWxlbWVudHMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkg ewogCSAqIHNpZ25lZC9zY2FsZWQgYmVjYXVzZSBvZiBnZW42IHJlbmRlcmNvcHkuIEkgc2VlIG5v IHBhcnRpY3VsYXIgcmVhc29uCiAJICogZm9yIGRvaW5nIHRoaXMgdGhvdWdoLgogCSAqLwotCU9V VF9CQVRDSCgwIDw8IEdFTjZfVkUwX1ZFUlRFWF9CVUZGRVJfSU5ERVhfU0hJRlQgfCBHRU42X1ZF MF9WQUxJRCB8Ci0JCSAgU1VSRkFDRUZPUk1BVF9SMTZHMTZfU1NDQUxFRCA8PCBWRTBfRk9STUFU X1NISUZUIHwKLQkJICAwIDw8IFZFMF9PRkZTRVRfU0hJRlQpOyAvKiBvZmZzZXRzIHZiIGluIGJ5 dGVzICovCi0JT1VUX0JBVENIKEdFTjRfVkZDT01QT05FTlRfU1RPUkVfU1JDIDw8IFZFMV9WRkNP TVBPTkVOVF8wX1NISUZUIHwKLQkJICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFX1NSQyA8PCBWRTFf VkZDT01QT05FTlRfMV9TSElGVCB8Ci0JCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZF MV9WRkNPTVBPTkVOVF8yX1NISUZUIHwKLQkJICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzFfRkxU IDw8IFZFMV9WRkNPTVBPTkVOVF8zX1NISUZUKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwIDw8IEdF TjZfVkUwX1ZFUlRFWF9CVUZGRVJfSU5ERVhfU0hJRlQgfCBHRU42X1ZFMF9WQUxJRCB8CisJCSAg ICAgU1VSRkFDRUZPUk1BVF9SMTZHMTZfU1NDQUxFRCA8PCBWRTBfRk9STUFUX1NISUZUIHwKKwkJ ICAgICAwIDw8IFZFMF9PRkZTRVRfU0hJRlQpOyAvKiBvZmZzZXRzIHZiIGluIGJ5dGVzICovCisJ aW50ZWxfYmJfb3V0KGliYiwgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV9TUkMgPDwgVkUxX1ZGQ09N UE9ORU5UXzBfU0hJRlQgfAorCQkgICAgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfU1JDIDw8IFZF MV9WRkNPTVBPTkVOVF8xX1NISUZUIHwKKwkJICAgICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAg PDwgVkUxX1ZGQ09NUE9ORU5UXzJfU0hJRlQgfAorCQkgICAgIEdFTjRfVkZDT01QT05FTlRfU1RP UkVfMV9GTFQgPDwgVkUxX1ZGQ09NUE9ORU5UXzNfU0hJRlQpOwogCiAJLyogRWxlbWVudCBzdGF0 ZSAyLiBMYXN0IGJ1dCBub3QgbGVhc3Qgd2Ugc3RvcmUgdGhlIFUsViBjb21wb25lbnRzIGFzCiAJ ICogbm9ybWFsaXplZCBmbG9hdHMuIFRoZXNlIHdpbGwgYmUgdXNlZCBpbiB0aGUgcGl4ZWwgc2hh ZGVyIHRvIHNhbXBsZQogCSAqIGZyb20gdGhlIHNvdXJjZSBidWZmZXIuCiAJICovCi0JT1VUX0JB VENIKDAgPDwgR0VONl9WRTBfVkVSVEVYX0JVRkZFUl9JTkRFWF9TSElGVCB8IEdFTjZfVkUwX1ZB TElEIHwKLQkJICBTVVJGQUNFRk9STUFUX1IzMkczMl9GTE9BVCA8PCBWRTBfRk9STUFUX1NISUZU IHwKLQkJICA0IDw8IFZFMF9PRkZTRVRfU0hJRlQpOwkvKiBvZmZzZXQgdmIgaW4gYnl0ZXMgKi8K LQlPVVRfQkFUQ0goR0VONF9WRkNPTVBPTkVOVF9TVE9SRV9TUkMgPDwgVkUxX1ZGQ09NUE9ORU5U XzBfU0hJRlQgfAotCQkgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfU1JDIDw8IFZFMV9WRkNPTVBP TkVOVF8xX1NISUZUIHwKLQkJICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09N UE9ORU5UXzJfU0hJRlQgfAotCQkgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMV9GTFQgPDwgVkUx X1ZGQ09NUE9ORU5UXzNfU0hJRlQpOworCWludGVsX2JiX291dChpYmIsIDAgPDwgR0VONl9WRTBf VkVSVEVYX0JVRkZFUl9JTkRFWF9TSElGVCB8IEdFTjZfVkUwX1ZBTElEIHwKKwkJICAgICBTVVJG QUNFRk9STUFUX1IzMkczMl9GTE9BVCA8PCBWRTBfRk9STUFUX1NISUZUIHwKKwkJICAgICA0IDw8 IFZFMF9PRkZTRVRfU0hJRlQpOwkvKiBvZmZzZXQgdmIgaW4gYnl0ZXMgKi8KKwlpbnRlbF9iYl9v dXQoaWJiLCBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFX1NSQyA8PCBWRTFfVkZDT01QT05FTlRfMF9T SElGVCB8CisJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV9TUkMgPDwgVkUxX1ZGQ09NUE9O RU5UXzFfU0hJRlQgfAorCQkgICAgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMCA8PCBWRTFfVkZD T01QT05FTlRfMl9TSElGVCB8CisJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8xX0ZMVCA8 PCBWRTFfVkZDT01QT05FTlRfM19TSElGVCk7CiB9CiAKIC8qCkBAIC0zNzEsNDQgKzI3MywzNSBA QCBnZW42X2VtaXRfdmVydGV4X2VsZW1lbnRzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0 Y2gpIHsKICAqIEBiYXRjaAogICogQG9mZnNldCAtIGJ5dHcgb2Zmc2V0IHdpdGhpbiB0aGUgQGJh dGNoIHdoZXJlIHRoZSB2ZXJ0ZXggYnVmZmVyIHN0YXJ0cy4KICAqLwotc3RhdGljIHZvaWQgZ2Vu OF9lbWl0X3ZlcnRleF9idWZmZXIoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJ CQkgICAgdWludDMyX3Qgb2Zmc2V0KSB7Ci0JT1VUX0JBVENIKEdFTjRfM0RTVEFURV9WRVJURVhf QlVGRkVSUyB8ICgxICsgKDQgKiAxKSAtIDIpKTsKLQlPVVRfQkFUQ0goMCA8PCBHRU42X1ZCMF9C VUZGRVJfSU5ERVhfU0hJRlQgfCAvKiBWQiAwdGggaW5kZXggKi8KLQkJICBHRU44X1ZCMF9CVUZG RVJfQUREUl9NT0RfRU4gfCAvKiBBZGRyZXNzIE1vZGlmeSBFbmFibGUgKi8KLQkJICBWRVJURVhf U0laRSA8PCBWQjBfQlVGRkVSX1BJVENIX1NISUZUKTsKLQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJ OTE1X0dFTV9ET01BSU5fVkVSVEVYLCAwLCBvZmZzZXQpOwotCU9VVF9CQVRDSCgzICogVkVSVEVY X1NJWkUpOworc3RhdGljIHZvaWQgZ2VuOF9lbWl0X3ZlcnRleF9idWZmZXIoc3RydWN0IGludGVs X2JiICppYmIsIHVpbnQzMl90IG9mZnNldCkKK3sKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU40XzNE U1RBVEVfVkVSVEVYX0JVRkZFUlMgfCAoMSArICg0ICogMSkgLSAyKSk7CisJaW50ZWxfYmJfb3V0 KGliYiwgMCA8PCBHRU42X1ZCMF9CVUZGRVJfSU5ERVhfU0hJRlQgfCAvKiBWQiAwdGggaW5kZXgg Ki8KKwkJICAgICBHRU44X1ZCMF9CVUZGRVJfQUREUl9NT0RfRU4gfCAvKiBBZGRyZXNzIE1vZGlm eSBFbmFibGUgKi8KKwkJICAgICBWRVJURVhfU0laRSA8PCBWQjBfQlVGRkVSX1BJVENIX1NISUZU KTsKKwlpbnRlbF9iYl9lbWl0X3JlbG9jKGliYiwgaWJiLT5oYW5kbGUsCisJCQkgICAgSTkxNV9H RU1fRE9NQUlOX1ZFUlRFWCwgMCwKKwkJCSAgICBvZmZzZXQsIGliYi0+YmF0Y2hfb2Zmc2V0KTsK KwlpbnRlbF9iYl9vdXQoaWJiLCAzICogVkVSVEVYX1NJWkUpOwogfQogCiBzdGF0aWMgdWludDMy X3QKLWdlbjZfY3JlYXRlX2NjX3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gs Ci0JCSAgICAgc3RydWN0IGFubm90YXRpb25zX2NvbnRleHQgKmF1YikKK2dlbjZfY3JlYXRlX2Nj X3N0YXRlKHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewogCXN0cnVjdCBnZW42X2NvbG9yX2NhbGNf c3RhdGUgKmNjX3N0YXRlOwotCXVpbnQzMl90IG9mZnNldDsKIAotCWNjX3N0YXRlID0gaW50ZWxf YmF0Y2hidWZmZXJfc3ViZGF0YV9hbGxvYyhiYXRjaCwKLQkJCQkJCSAgIHNpemVvZigqY2Nfc3Rh dGUpLCA2NCk7Ci0Jb2Zmc2V0ID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9vZmZzZXQoYmF0 Y2gsIGNjX3N0YXRlKTsKLQlhbm5vdGF0aW9uX2FkZF9zdGF0ZShhdWIsIEFVQl9UUkFDRV9DQ19T VEFURSwKLQkJCSAgICAgb2Zmc2V0LCBzaXplb2YoKmNjX3N0YXRlKSk7CisJY2Nfc3RhdGUgPSBp bnRlbF9iYl9wdHJfYWxpZ24oaWJiLCA2NCk7CiAKLQlyZXR1cm4gb2Zmc2V0OworCXJldHVybiBp bnRlbF9iYl9wdHJfYWRkX3JldHVybl9wcmV2X29mZnNldChpYmIsIHNpemVvZigqY2Nfc3RhdGUp KTsKIH0KIAogc3RhdGljIHVpbnQzMl90Ci1nZW44X2NyZWF0ZV9ibGVuZF9zdGF0ZShzdHJ1Y3Qg aW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJc3RydWN0IGFubm90YXRpb25zX2NvbnRleHQg KmF1YikKK2dlbjhfY3JlYXRlX2JsZW5kX3N0YXRlKHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewog CXN0cnVjdCBnZW44X2JsZW5kX3N0YXRlICpibGVuZDsKIAlpbnQgaTsKLQl1aW50MzJfdCBvZmZz ZXQ7CiAKLQlibGVuZCA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfYWxsb2MoYmF0Y2gsIHNp emVvZigqYmxlbmQpLCA2NCk7Ci0Jb2Zmc2V0ID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9v ZmZzZXQoYmF0Y2gsIGJsZW5kKTsKLQlhbm5vdGF0aW9uX2FkZF9zdGF0ZShhdWIsIEFVQl9UUkFD RV9CTEVORF9TVEFURSwKLQkJCSAgICAgb2Zmc2V0LCBzaXplb2YoKmJsZW5kKSk7CisJYmxlbmQg PSBpbnRlbF9iYl9wdHJfYWxpZ24oaWJiLCA2NCk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgMTY7IGkr KykgewogCQlibGVuZC0+YnNbaV0uZGVzdF9ibGVuZF9mYWN0b3IgPSBHRU42X0JMRU5ERkFDVE9S X1pFUk87CkBAIC00MTgsNDUxICszMTEsNDQwIEBAIGdlbjhfY3JlYXRlX2JsZW5kX3N0YXRlKHN0 cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCiAJCWJsZW5kLT5ic1tpXS5jb2xvcl9idWZm ZXJfYmxlbmQgPSAwOwogCX0KIAotCXJldHVybiBvZmZzZXQ7CisJcmV0dXJuIGludGVsX2JiX3B0 cl9hZGRfcmV0dXJuX3ByZXZfb2Zmc2V0KGliYiwgc2l6ZW9mKCpibGVuZCkpOwogfQogCiBzdGF0 aWMgdWludDMyX3QKLWdlbjZfY3JlYXRlX2NjX3ZpZXdwb3J0KHN0cnVjdCBpbnRlbF9iYXRjaGJ1 ZmZlciAqYmF0Y2gsCi0JCQlzdHJ1Y3QgYW5ub3RhdGlvbnNfY29udGV4dCAqYXViKQorZ2VuNl9j cmVhdGVfY2Nfdmlld3BvcnQoc3RydWN0IGludGVsX2JiICppYmIpCiB7CiAJc3RydWN0IGdlbjRf Y2Nfdmlld3BvcnQgKnZwOwotCXVpbnQzMl90IG9mZnNldDsKIAotCXZwID0gaW50ZWxfYmF0Y2hi dWZmZXJfc3ViZGF0YV9hbGxvYyhiYXRjaCwgc2l6ZW9mKCp2cCksIDMyKTsKLQlvZmZzZXQgPSBp bnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX29mZnNldChiYXRjaCwgdnApOwotCWFubm90YXRpb25f YWRkX3N0YXRlKGF1YiwgQVVCX1RSQUNFX0NDX1ZQX1NUQVRFLAotCQkJICAgICBvZmZzZXQsIHNp emVvZigqdnApKTsKKwl2cCA9IGludGVsX2JiX3B0cl9hbGlnbihpYmIsIDMyKTsKIAogCS8qIFhY WCBJIGRvbid0IHVuZGVyc3RhbmQgdGhpcyAqLwogCXZwLT5taW5fZGVwdGggPSAtMS5lMzU7CiAJ dnAtPm1heF9kZXB0aCA9IDEuZTM1OwogCi0JcmV0dXJuIG9mZnNldDsKKwlyZXR1cm4gaW50ZWxf YmJfcHRyX2FkZF9yZXR1cm5fcHJldl9vZmZzZXQoaWJiLCBzaXplb2YoKnZwKSk7CiB9CiAKIHN0 YXRpYyB1aW50MzJfdAotZ2VuN19jcmVhdGVfc2ZfY2xpcF92aWV3cG9ydChzdHJ1Y3QgaW50ZWxf YmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJc3RydWN0IGFubm90YXRpb25zX2NvbnRleHQgKmF1YikK K2dlbjdfY3JlYXRlX3NmX2NsaXBfdmlld3BvcnQoc3RydWN0IGludGVsX2JiICppYmIpCiB7CiAJ LyogWFhYIHRoZXNlIGFyZSBsaWtlbHkgbm90IG5lZWRlZCAqLwogCXN0cnVjdCBnZW43X3NmX2Ns aXBfdmlld3BvcnQgKnNjdl9zdGF0ZTsKLQl1aW50MzJfdCBvZmZzZXQ7CiAKLQlzY3Zfc3RhdGUg PSBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX2FsbG9jKGJhdGNoLAotCQkJCQkJICAgIHNpemVv Zigqc2N2X3N0YXRlKSwgNjQpOwotCW9mZnNldCA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFf b2Zmc2V0KGJhdGNoLCBzY3Zfc3RhdGUpOwotCWFubm90YXRpb25fYWRkX3N0YXRlKGF1YiwgQVVC X1RSQUNFX0NMSVBfVlBfU1RBVEUsCi0JCQkgICAgIG9mZnNldCwgc2l6ZW9mKCpzY3Zfc3RhdGUp KTsKKwlzY3Zfc3RhdGUgPSBpbnRlbF9iYl9wdHJfYWxpZ24oaWJiLCA2NCk7CiAKIAlzY3Zfc3Rh dGUtPmd1YXJkYmFuZC54bWluID0gMDsKIAlzY3Zfc3RhdGUtPmd1YXJkYmFuZC54bWF4ID0gMS4w ZjsKIAlzY3Zfc3RhdGUtPmd1YXJkYmFuZC55bWluID0gMDsKIAlzY3Zfc3RhdGUtPmd1YXJkYmFu ZC55bWF4ID0gMS4wZjsKIAotCXJldHVybiBvZmZzZXQ7CisJcmV0dXJuIGludGVsX2JiX3B0cl9h ZGRfcmV0dXJuX3ByZXZfb2Zmc2V0KGliYiwgc2l6ZW9mKCpzY3Zfc3RhdGUpKTsKIH0KIAogc3Rh dGljIHVpbnQzMl90Ci1nZW42X2NyZWF0ZV9zY2lzc29yX3JlY3Qoc3RydWN0IGludGVsX2JhdGNo YnVmZmVyICpiYXRjaCwKLQkJCXN0cnVjdCBhbm5vdGF0aW9uc19jb250ZXh0ICphdWIpCitnZW42 X2NyZWF0ZV9zY2lzc29yX3JlY3Qoc3RydWN0IGludGVsX2JiICppYmIpCiB7CiAJc3RydWN0IGdl bjZfc2Npc3Nvcl9yZWN0ICpzY2lzc29yOwotCXVpbnQzMl90IG9mZnNldDsKIAotCXNjaXNzb3Ig PSBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX2FsbG9jKGJhdGNoLCBzaXplb2YoKnNjaXNzb3Ip LCA2NCk7Ci0Jb2Zmc2V0ID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9vZmZzZXQoYmF0Y2gs IHNjaXNzb3IpOwotCWFubm90YXRpb25fYWRkX3N0YXRlKGF1YiwgQVVCX1RSQUNFX1NDSVNTT1Jf U1RBVEUsCi0JCQkgICAgIG9mZnNldCwgc2l6ZW9mKCpzY2lzc29yKSk7CisJc2Npc3NvciA9IGlu dGVsX2JiX3B0cl9hbGlnbihpYmIsIDY0KTsKIAotCXJldHVybiBvZmZzZXQ7CisJcmV0dXJuIGlu dGVsX2JiX3B0cl9hZGRfcmV0dXJuX3ByZXZfb2Zmc2V0KGliYiwgc2l6ZW9mKCpzY2lzc29yKSk7 CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW44X2VtaXRfc2lwKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZl ciAqYmF0Y2gpIHsKLQlPVVRfQkFUQ0goR0VONF9TVEFURV9TSVAgfCAoMyAtIDIpKTsKLQlPVVRf QkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOworZ2VuOF9lbWl0X3NpcChzdHJ1Y3QgaW50ZWxfYmIg KmliYikgeworCWludGVsX2JiX291dChpYmIsIEdFTjRfU1RBVEVfU0lQIHwgKDMgLSAyKSk7CisJ aW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiB9CiAKIHN0YXRp YyB2b2lkCi1nZW43X2VtaXRfcHVzaF9jb25zdGFudHMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVy ICpiYXRjaCkgewotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfUFVTSF9DT05TVEFOVF9BTExPQ19W Uyk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSChHRU44XzNEU1RBVEVfUFVTSF9DT05TVEFO VF9BTExPQ19IUyk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSChHRU44XzNEU1RBVEVfUFVT SF9DT05TVEFOVF9BTExPQ19EUyk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSChHRU44XzNE U1RBVEVfUFVTSF9DT05TVEFOVF9BTExPQ19HUyk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRD SChHRU43XzNEU1RBVEVfUFVTSF9DT05TVEFOVF9BTExPQ19QUyk7Ci0JT1VUX0JBVENIKDApOwor Z2VuN19lbWl0X3B1c2hfY29uc3RhbnRzKHN0cnVjdCBpbnRlbF9iYiAqaWJiKSB7CisJaW50ZWxf YmJfb3V0KGliYiwgR0VON18zRFNUQVRFX1BVU0hfQ09OU1RBTlRfQUxMT0NfVlMpOworCWludGVs X2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIEdFTjhfM0RTVEFURV9QVVNIX0NP TlNUQU5UX0FMTE9DX0hTKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQo aWJiLCBHRU44XzNEU1RBVEVfUFVTSF9DT05TVEFOVF9BTExPQ19EUyk7CisJaW50ZWxfYmJfb3V0 KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VOOF8zRFNUQVRFX1BVU0hfQ09OU1RBTlRf QUxMT0NfR1MpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIEdF TjdfM0RTVEFURV9QVVNIX0NPTlNUQU5UX0FMTE9DX1BTKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAw KTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjhfZW1pdF9zdGF0ZV9iYXNlX2FkZHJlc3Moc3RydWN0 IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkgewotCU9VVF9CQVRDSChHRU40X1NUQVRFX0JBU0Vf QUREUkVTUyB8ICgxNiAtIDIpKTsKK2dlbjhfZW1pdF9zdGF0ZV9iYXNlX2FkZHJlc3Moc3RydWN0 IGludGVsX2JiICppYmIpIHsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU40X1NUQVRFX0JBU0VfQURE UkVTUyB8ICgxNiAtIDIpKTsKIAogCS8qIGdlbmVyYWwgKi8KLQlPVVRfQkFUQ0goMCB8IEJBU0Vf QUREUkVTU19NT0RJRlkpOwotCU9VVF9CQVRDSCgwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwIHwg QkFTRV9BRERSRVNTX01PRElGWSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiAKIAkvKiBzdGF0 ZWxlc3MgZGF0YSBwb3J0ICovCi0JT1VUX0JBVENIKDAgfCBCQVNFX0FERFJFU1NfTU9ESUZZKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCAwIHwgQkFTRV9BRERSRVNTX01PRElGWSk7CiAKIAkvKiBzdXJm YWNlICovCi0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVIsIDAs IEJBU0VfQUREUkVTU19NT0RJRlkpOworCWludGVsX2JiX2VtaXRfcmVsb2MoaWJiLCBpYmItPmhh bmRsZSwKKwkJCSAgICBJOTE1X0dFTV9ET01BSU5fU0FNUExFUiwgMCwKKwkJCSAgICBCQVNFX0FE RFJFU1NfTU9ESUZZLCBpYmItPmJhdGNoX29mZnNldCk7CiAKIAkvKiBkeW5hbWljICovCi0JT1VU X1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiB8IEk5MTVfR0VNX0RPTUFJ Tl9JTlNUUlVDVElPTiwKLQkJICAwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKKwlpbnRlbF9iYl9l bWl0X3JlbG9jKGliYiwgaWJiLT5oYW5kbGUsCisJCQkgICAgSTkxNV9HRU1fRE9NQUlOX1JFTkRF UiB8IEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgMCwKKwkJCSAgICBCQVNFX0FERFJFU1Nf TU9ESUZZLCBpYmItPmJhdGNoX29mZnNldCk7CiAKIAkvKiBpbmRpcmVjdCAqLwotCU9VVF9CQVRD SCgwKTsKLQlPVVRfQkFUQ0goMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJf b3V0KGliYiwgMCk7CiAKIAkvKiBpbnN0cnVjdGlvbiAqLwotCU9VVF9SRUxPQyhiYXRjaC0+Ym8s IEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgMCwgQkFTRV9BRERSRVNTX01PRElGWSk7CisJ aW50ZWxfYmJfZW1pdF9yZWxvYyhpYmIsIGliYi0+aGFuZGxlLAorCQkJICAgIEk5MTVfR0VNX0RP TUFJTl9JTlNUUlVDVElPTiwgMCwKKwkJCSAgICBCQVNFX0FERFJFU1NfTU9ESUZZLCBpYmItPmJh dGNoX29mZnNldCk7CiAKIAkvKiBnZW5lcmFsIHN0YXRlIGJ1ZmZlciBzaXplICovCi0JT1VUX0JB VENIKDB4ZmZmZmYwMDAgfCAxKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAweGZmZmZmMDAwIHwgMSk7 CiAJLyogZHluYW1pYyBzdGF0ZSBidWZmZXIgc2l6ZSAqLwotCU9VVF9CQVRDSCgxIDw8IDEyIHwg MSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMSA8PCAxMiB8IDEpOwogCS8qIGluZGlyZWN0IG9iamVj dCBidWZmZXIgc2l6ZSAqLwotCU9VVF9CQVRDSCgweGZmZmZmMDAwIHwgMSk7CisJaW50ZWxfYmJf b3V0KGliYiwgMHhmZmZmZjAwMCB8IDEpOwogCS8qIGludHJ1Y3Rpb24gYnVmZmVyIHNpemUgKi8K LQlPVVRfQkFUQ0goMSA8PCAxMiB8IDEpOworCWludGVsX2JiX291dChpYmIsIDEgPDwgMTIgfCAx KTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjdfZW1pdF91cmIoc3RydWN0IGludGVsX2JhdGNoYnVm ZmVyICpiYXRjaCkgeworZ2VuN19lbWl0X3VyYihzdHJ1Y3QgaW50ZWxfYmIgKmliYikgewogCS8q IFhYWDogTWluIHZhbGlkIHZhbHVlcyBmcm9tIG1lc2EgKi8KIAljb25zdCBpbnQgdnNfZW50cmll cyA9IDY0OwogCWNvbnN0IGludCB2c19zaXplID0gMjsKIAljb25zdCBpbnQgdnNfc3RhcnQgPSAy OwogCi0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9VUkJfVlMpOwotCU9VVF9CQVRDSCh2c19lbnRy aWVzIHwgKCh2c19zaXplIC0gMSkgPDwgMTYpIHwgKHZzX3N0YXJ0IDw8IDI1KSk7Ci0JT1VUX0JB VENIKEdFTjdfM0RTVEFURV9VUkJfR1MpOwotCU9VVF9CQVRDSCh2c19zdGFydCA8PCAyNSk7Ci0J T1VUX0JBVENIKEdFTjdfM0RTVEFURV9VUkJfSFMpOwotCU9VVF9CQVRDSCh2c19zdGFydCA8PCAy NSk7Ci0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9VUkJfRFMpOwotCU9VVF9CQVRDSCh2c19zdGFy dCA8PCAyNSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX1VSQl9WUyk7CisJaW50 ZWxfYmJfb3V0KGliYiwgdnNfZW50cmllcyB8ICgodnNfc2l6ZSAtIDEpIDw8IDE2KSB8ICh2c19z dGFydCA8PCAyNSkpOworCWludGVsX2JiX291dChpYmIsIEdFTjdfM0RTVEFURV9VUkJfR1MpOwor CWludGVsX2JiX291dChpYmIsIHZzX3N0YXJ0IDw8IDI1KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBH RU43XzNEU1RBVEVfVVJCX0hTKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCB2c19zdGFydCA8PCAyNSk7 CisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX1VSQl9EUyk7CisJaW50ZWxfYmJfb3V0 KGliYiwgdnNfc3RhcnQgPDwgMjUpOwogfQogCiBzdGF0aWMgdm9pZAotZ2VuOF9lbWl0X2NjKHN0 cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpIHsKLQlPVVRfQkFUQ0goR0VON18zRFNUQVRF X0JMRU5EX1NUQVRFX1BPSU5URVJTKTsKLQlPVVRfQkFUQ0goY2MuYmxlbmRfc3RhdGUgfCAxKTsK K2dlbjhfZW1pdF9jYyhzdHJ1Y3QgaW50ZWxfYmIgKmliYikgeworCWludGVsX2JiX291dChpYmIs IEdFTjdfM0RTVEFURV9CTEVORF9TVEFURV9QT0lOVEVSUyk7CisJaW50ZWxfYmJfb3V0KGliYiwg Y2MuYmxlbmRfc3RhdGUgfCAxKTsKIAotCU9VVF9CQVRDSChHRU42XzNEU1RBVEVfQ0NfU1RBVEVf UE9JTlRFUlMpOwotCU9VVF9CQVRDSChjYy5jY19zdGF0ZSB8IDEpOworCWludGVsX2JiX291dChp YmIsIEdFTjZfM0RTVEFURV9DQ19TVEFURV9QT0lOVEVSUyk7CisJaW50ZWxfYmJfb3V0KGliYiwg Y2MuY2Nfc3RhdGUgfCAxKTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjhfZW1pdF9tdWx0aXNhbXBs ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKSB7Ci0JT1VUX0JBVENIKEdFTjhfM0RT VEFURV9NVUxUSVNBTVBMRSk7Ci0JT1VUX0JBVENIKDApOworZ2VuOF9lbWl0X211bHRpc2FtcGxl KHN0cnVjdCBpbnRlbF9iYiAqaWJiKSB7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VOOF8zRFNUQVRF X01VTFRJU0FNUExFKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIAotCU9VVF9CQVRDSChHRU42 XzNEU1RBVEVfU0FNUExFX01BU0spOwotCU9VVF9CQVRDSCgxKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCBHRU42XzNEU1RBVEVfU0FNUExFX01BU0spOworCWludGVsX2JiX291dChpYmIsIDEpOwogfQog CiBzdGF0aWMgdm9pZAotZ2VuOF9lbWl0X3ZzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0 Y2gpIHsKLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX0JJTkRJTkdfVEFCTEVfUE9JTlRFUlNfVlMp OwotCU9VVF9CQVRDSCgwKTsKLQotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfU0FNUExFUl9TVEFU RV9QT0lOVEVSU19WUyk7Ci0JT1VUX0JBVENIKDApOwotCi0JT1VUX0JBVENIKEdFTjZfM0RTVEFU RV9DT05TVEFOVF9WUyB8ICgxMSAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDAp OwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9C QVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsK LQlPVVRfQkFUQ0goMCk7Ci0KLQlPVVRfQkFUQ0goR0VONl8zRFNUQVRFX1ZTIHwgKDktMikpOwot CU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRD SCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlP VVRfQkFUQ0goMCk7CitnZW44X2VtaXRfdnMoc3RydWN0IGludGVsX2JiICppYmIpIHsKKwlpbnRl bF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfQklORElOR19UQUJMRV9QT0lOVEVSU19WUyk7CisJ aW50ZWxfYmJfb3V0KGliYiwgMCk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVf U0FNUExFUl9TVEFURV9QT0lOVEVSU19WUyk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisKKwlp bnRlbF9iYl9vdXQoaWJiLCBHRU42XzNEU1RBVEVfQ09OU1RBTlRfVlMgfCAoMTEgLSAyKSk7CisJ aW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJf b3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwg MCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50 ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0 KGliYiwgMCk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU42XzNEU1RBVEVfVlMgfCAoOS0yKSk7 CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxf YmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGli YiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJ aW50ZWxfYmJfb3V0KGliYiwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW44X2VtaXRfaHMoc3Ry dWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkgewotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVf Q09OU1RBTlRfSFMgfCAoMTEgLSAyKSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsK LQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFU Q0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0J T1VUX0JBVENIKDApOwotCi0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9IUyB8ICg5LTIpKTsKLQlP VVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0go MCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VU X0JBVENIKDApOwotCi0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9CSU5ESU5HX1RBQkxFX1BPSU5U RVJTX0hTKTsKLQlPVVRfQkFUQ0goMCk7Ci0KLQlPVVRfQkFUQ0goR0VOOF8zRFNUQVRFX1NBTVBM RVJfU1RBVEVfUE9JTlRFUlNfSFMpOwotCU9VVF9CQVRDSCgwKTsKK2dlbjhfZW1pdF9ocyhzdHJ1 Y3QgaW50ZWxfYmIgKmliYikgeworCWludGVsX2JiX291dChpYmIsIEdFTjdfM0RTVEFURV9DT05T VEFOVF9IUyB8ICgxMSAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9v dXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAw KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRl bF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQo aWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKworCWludGVsX2JiX291dChpYmIsIEdF TjdfM0RTVEFURV9IUyB8ICg5LTIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKworCWludGVsX2Ji X291dChpYmIsIEdFTjdfM0RTVEFURV9CSU5ESU5HX1RBQkxFX1BPSU5URVJTX0hTKTsKKwlpbnRl bF9iYl9vdXQoaWJiLCAwKTsKKworCWludGVsX2JiX291dChpYmIsIEdFTjhfM0RTVEFURV9TQU1Q TEVSX1NUQVRFX1BPSU5URVJTX0hTKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIH0KIAogc3Rh dGljIHZvaWQKLWdlbjhfZW1pdF9ncyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKSB7 Ci0JT1VUX0JBVENIKEdFTjZfM0RTVEFURV9DT05TVEFOVF9HUyB8ICgxMSAtIDIpKTsKLQlPVVRf QkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7 Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JB VENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0KLQlPVVRfQkFUQ0goR0VO Nl8zRFNUQVRFX0dTIHwgKDEwLTIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwot CU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRD SCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQot CU9VVF9CQVRDSChHRU43XzNEU1RBVEVfQklORElOR19UQUJMRV9QT0lOVEVSU19HUyk7Ci0JT1VU X0JBVENIKDApOwotCi0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9TQU1QTEVSX1NUQVRFX1BPSU5U RVJTX0dTKTsKLQlPVVRfQkFUQ0goMCk7CitnZW44X2VtaXRfZ3Moc3RydWN0IGludGVsX2JiICpp YmIpIHsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU42XzNEU1RBVEVfQ09OU1RBTlRfR1MgfCAoMTEg LSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJ aW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJf b3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwg MCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50 ZWxfYmJfb3V0KGliYiwgMCk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU42XzNEU1RBVEVfR1Mg fCAoMTAtMikpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDAp OworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVs X2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChp YmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOwor CisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX0JJTkRJTkdfVEFCTEVfUE9JTlRFUlNf R1MpOworCWludGVsX2JiX291dChpYmIsIDApOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18z RFNUQVRFX1NBTVBMRVJfU1RBVEVfUE9JTlRFUlNfR1MpOworCWludGVsX2JiX291dChpYmIsIDAp OwogfQogCiBzdGF0aWMgdm9pZAotZ2VuOF9lbWl0X2RzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZl ciAqYmF0Y2gpIHsKLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX0NPTlNUQU5UX0RTIHwgKDExIC0g MikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9V VF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgw KTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQotCU9V VF9CQVRDSChHRU43XzNEU1RBVEVfRFMgfCAoOS0yKSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9C QVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsK LQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQotCU9VVF9C QVRDSChHRU43XzNEU1RBVEVfQklORElOR19UQUJMRV9QT0lOVEVSU19EUyk7Ci0JT1VUX0JBVENI KDApOwotCi0JT1VUX0JBVENIKEdFTjhfM0RTVEFURV9TQU1QTEVSX1NUQVRFX1BPSU5URVJTX0RT KTsKLQlPVVRfQkFUQ0goMCk7CitnZW44X2VtaXRfZHMoc3RydWN0IGludGVsX2JiICppYmIpIHsK KwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfQ09OU1RBTlRfRFMgfCAoMTEgLSAyKSk7 CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxf YmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGli YiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJ aW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJf b3V0KGliYiwgMCk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfRFMgfCAoOS0y KSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50 ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0 KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7 CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RB VEVfQklORElOR19UQUJMRV9QT0lOVEVSU19EUyk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisK KwlpbnRlbF9iYl9vdXQoaWJiLCBHRU44XzNEU1RBVEVfU0FNUExFUl9TVEFURV9QT0lOVEVSU19E Uyk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW44X2VtaXRf d21faHpfb3Aoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkgewotCU9VVF9CQVRDSChH RU44XzNEU1RBVEVfV01fSFpfT1AgfCAoNS0yKSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRD SCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOworZ2VuOF9lbWl0X3dtX2h6X29w KHN0cnVjdCBpbnRlbF9iYiAqaWJiKSB7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VOOF8zRFNUQVRF X1dNX0haX09QIHwgKDUtMikpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291 dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDAp OwogfQogCiBzdGF0aWMgdm9pZAotZ2VuOF9lbWl0X251bGxfc3RhdGUoc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCkgewotCWdlbjhfZW1pdF93bV9oel9vcChiYXRjaCk7Ci0JZ2VuOF9l bWl0X2hzKGJhdGNoKTsKLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX1RFIHwgKDQtMikpOwotCU9V VF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCWdlbjhfZW1pdF9n cyhiYXRjaCk7Ci0JZ2VuOF9lbWl0X2RzKGJhdGNoKTsKLQlnZW44X2VtaXRfdnMoYmF0Y2gpOwor Z2VuOF9lbWl0X251bGxfc3RhdGUoc3RydWN0IGludGVsX2JiICppYmIpIHsKKwlnZW44X2VtaXRf d21faHpfb3AoaWJiKTsKKwlnZW44X2VtaXRfaHMoaWJiKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBH RU43XzNEU1RBVEVfVEUgfCAoNC0yKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxf YmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJZ2VuOF9lbWl0X2dzKGli Yik7CisJZ2VuOF9lbWl0X2RzKGliYik7CisJZ2VuOF9lbWl0X3ZzKGliYik7CiB9CiAKIHN0YXRp YyB2b2lkCi1nZW43X2VtaXRfY2xpcChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKSB7 Ci0JT1VUX0JBVENIKEdFTjZfM0RTVEFURV9DTElQIHwgKDQgLSAyKSk7Ci0JT1VUX0JBVENIKDAp OyAKLQlPVVRfQkFUQ0goMCk7IC8qICBwYXNzLXRocm91Z2ggKi8KLQlPVVRfQkFUQ0goMCk7Citn ZW43X2VtaXRfY2xpcChzdHJ1Y3QgaW50ZWxfYmIgKmliYikgeworCWludGVsX2JiX291dChpYmIs IEdFTjZfM0RTVEFURV9DTElQIHwgKDQgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJ aW50ZWxfYmJfb3V0KGliYiwgMCk7IC8qICBwYXNzLXRocm91Z2ggKi8KKwlpbnRlbF9iYl9vdXQo aWJiLCAwKTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjhfZW1pdF9zZihzdHJ1Y3QgaW50ZWxfYmF0 Y2hidWZmZXIgKmJhdGNoKQorZ2VuOF9lbWl0X3NmKHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewog CWludCBpOwogCi0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9TQkUgfCAoNCAtIDIpKTsKLQlPVVRf QkFUQ0goMSA8PCBHRU43X1NCRV9OVU1fT1VUUFVUU19TSElGVCB8Ci0JCSAgR0VOOF9TQkVfRk9S Q0VfVVJCX0VOVFJZX1JFQURfTEVOR1RIIHwKLQkJICBHRU44X1NCRV9GT1JDRV9VUkJfRU5UUllf UkVBRF9PRkZTRVQgfAotCQkgIDEgPDwgR0VON19TQkVfVVJCX0VOVFJZX1JFQURfTEVOR1RIX1NI SUZUIHwKLQkJICAxIDw8IEdFTjhfU0JFX1VSQl9FTlRSWV9SRUFEX09GRlNFVF9TSElGVCk7Ci0J T1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNE U1RBVEVfU0JFIHwgKDQgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMSA8PCBHRU43X1NCRV9O VU1fT1VUUFVUU19TSElGVCB8CisJCSAgICAgR0VOOF9TQkVfRk9SQ0VfVVJCX0VOVFJZX1JFQURf TEVOR1RIIHwKKwkJICAgICBHRU44X1NCRV9GT1JDRV9VUkJfRU5UUllfUkVBRF9PRkZTRVQgfAor CQkgICAgIDEgPDwgR0VON19TQkVfVVJCX0VOVFJZX1JFQURfTEVOR1RIX1NISUZUIHwKKwkJICAg ICAxIDw8IEdFTjhfU0JFX1VSQl9FTlRSWV9SRUFEX09GRlNFVF9TSElGVCk7CisJaW50ZWxfYmJf b3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiAKLQlPVVRfQkFUQ0goR0VOOF8z RFNUQVRFX1NCRV9TV0laIHwgKDExIC0gMikpOworCWludGVsX2JiX291dChpYmIsIEdFTjhfM0RT VEFURV9TQkVfU1dJWiB8ICgxMSAtIDIpKTsKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQotCQlP VVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKKwkJaW50ZWxfYmJf b3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwg MCk7CiAKLQlPVVRfQkFUQ0goR0VOOF8zRFNUQVRFX1JBU1RFUiB8ICg1IC0gMikpOwotCU9VVF9C QVRDSChHRU44X1JBU1RFUl9GUk9OVF9XSU5ESU5HX0NDVyB8IEdFTjhfUkFTVEVSX0NVTExfTk9O RSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7CisJaW50 ZWxfYmJfb3V0KGliYiwgR0VOOF8zRFNUQVRFX1JBU1RFUiB8ICg1IC0gMikpOworCWludGVsX2Ji X291dChpYmIsIEdFTjhfUkFTVEVSX0ZST05UX1dJTkRJTkdfQ0NXIHwgR0VOOF9SQVNURVJfQ1VM TF9OT05FKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIAotCU9VVF9CQVRDSChHRU42XzNEU1RBVEVfU0YgfCAo NCAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCBHRU42XzNEU1RBVEVfU0YgfCAoNCAtIDIpKTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCAwKTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjhfZW1pdF9wcyhzdHJ1Y3QgaW50ZWxfYmF0Y2hi dWZmZXIgKmJhdGNoLCB1aW50MzJfdCBrZXJuZWwpIHsKK2dlbjhfZW1pdF9wcyhzdHJ1Y3QgaW50 ZWxfYmIgKmliYiwgdWludDMyX3Qga2VybmVsKSB7CiAJY29uc3QgaW50IG1heF90aHJlYWRzID0g NjM7CiAKLQlPVVRfQkFUQ0goR0VONl8zRFNUQVRFX1dNIHwgKDIgLSAyKSk7Ci0JT1VUX0JBVENI KC8qIFhYWDogSSBkb24ndCB1bmRlcnN0YW5kIHRoZSBCQVJZQ0VOVFJJQyBzdHVmZiwgYnV0IGl0 CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRFX1dNIHwgKDIgLSAyKSk7CisJaW50ZWxf YmJfb3V0KGliYiwgLyogWFhYOiBJIGRvbid0IHVuZGVyc3RhbmQgdGhlIEJBUllDRU5UUklDIHN0 dWZmLCBidXQgaXQKIAkJICAgKiBhcHBlYXJzIHdlIG5lZWQgaXQgdG8gcHV0IG91ciBzZXR1cCBk YXRhIGluIHRoZSBwbGFjZSB3ZQogCQkgICAqIGV4cGVjdCAoZzYsIHNlZSBiZWxvdykgKi8KLQkJ ICBHRU44XzNEU1RBVEVfUFNfUEVSU1BFQ1RJVkVfUElYRUxfQkFSWUNFTlRSSUMpOwotCi0JT1VU X0JBVENIKEdFTjZfM0RTVEFURV9DT05TVEFOVF9QUyB8ICgxMS0yKSk7Ci0JT1VUX0JBVENIKDAp OwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9C QVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsK LQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCi0JT1VUX0JBVENIKEdFTjdfM0RTVEFU RV9QUyB8ICgxMi0yKSk7Ci0JT1VUX0JBVENIKGtlcm5lbCk7Ci0JT1VUX0JBVENIKDApOyAvKiBr ZXJuZWwgaGkgKi8KLQlPVVRfQkFUQ0goMSA8PCBHRU42XzNEU1RBVEVfV01fU0FNUExFUl9DT1VO VF9TSElGVCB8Ci0JCSAgMiA8PCBHRU42XzNEU1RBVEVfV01fQklORElOR19UQUJMRV9FTlRSWV9D T1VOVF9TSElGVCk7Ci0JT1VUX0JBVENIKDApOyAvKiBzY3JhdGNoIHNwYWNlIHN0dWZmICovCi0J T1VUX0JBVENIKDApOyAvKiBzY3JhdGNoIGhpICovCi0JT1VUX0JBVENIKChtYXhfdGhyZWFkcyAt IDEpIDw8IEdFTjhfM0RTVEFURV9QU19NQVhfVEhSRUFEU19TSElGVCB8Ci0JCSAgR0VONl8zRFNU QVRFX1dNXzE2X0RJU1BBVENIX0VOQUJMRSk7Ci0JT1VUX0JBVENIKDYgPDwgR0VONl8zRFNUQVRF X1dNX0RJU1BBVENIX1NUQVJUX0dSRl8wX1NISUZUKTsKLQlPVVRfQkFUQ0goMCk7IC8vIGtlcm5l bCAxCi0JT1VUX0JBVENIKDApOyAvKiBrZXJuZWwgMSBoaSAqLwotCU9VVF9CQVRDSCgwKTsgLy8g a2VybmVsIDIKLQlPVVRfQkFUQ0goMCk7IC8qIGtlcm5lbCAyIGhpICovCi0KLQlPVVRfQkFUQ0go R0VOOF8zRFNUQVRFX1BTX0JMRU5EIHwgKDIgLSAyKSk7Ci0JT1VUX0JBVENIKEdFTjhfUFNfQkxF TkRfSEFTX1dSSVRFQUJMRV9SVCk7Ci0KLQlPVVRfQkFUQ0goR0VOOF8zRFNUQVRFX1BTX0VYVFJB IHwgKDIgLSAyKSk7Ci0JT1VUX0JBVENIKEdFTjhfUFNYX1BJWEVMX1NIQURFUl9WQUxJRCB8IEdF TjhfUFNYX0FUVFJJQlVURV9FTkFCTEUpOworCQkgICAgIEdFTjhfM0RTVEFURV9QU19QRVJTUEVD VElWRV9QSVhFTF9CQVJZQ0VOVFJJQyk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU42XzNEU1RB VEVfQ09OU1RBTlRfUFMgfCAoMTEtMikpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVs X2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChp YmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOwor CWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2Ji X291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCisJaW50ZWxfYmJfb3V0KGli YiwgR0VON18zRFNUQVRFX1BTIHwgKDEyLTIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBrZXJuZWwp OworCWludGVsX2JiX291dChpYmIsIDApOyAvKiBrZXJuZWwgaGkgKi8KKwlpbnRlbF9iYl9vdXQo aWJiLCAxIDw8IEdFTjZfM0RTVEFURV9XTV9TQU1QTEVSX0NPVU5UX1NISUZUIHwKKwkJICAgICAy IDw8IEdFTjZfM0RTVEFURV9XTV9CSU5ESU5HX1RBQkxFX0VOVFJZX0NPVU5UX1NISUZUKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCAwKTsgLyogc2NyYXRjaCBzcGFjZSBzdHVmZiAqLworCWludGVsX2Ji X291dChpYmIsIDApOyAvKiBzY3JhdGNoIGhpICovCisJaW50ZWxfYmJfb3V0KGliYiwgKG1heF90 aHJlYWRzIC0gMSkgPDwgR0VOOF8zRFNUQVRFX1BTX01BWF9USFJFQURTX1NISUZUIHwKKwkJICAg ICBHRU42XzNEU1RBVEVfV01fMTZfRElTUEFUQ0hfRU5BQkxFKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCA2IDw8IEdFTjZfM0RTVEFURV9XTV9ESVNQQVRDSF9TVEFSVF9HUkZfMF9TSElGVCk7CisJaW50 ZWxfYmJfb3V0KGliYiwgMCk7IC8vIGtlcm5lbCAxCisJaW50ZWxfYmJfb3V0KGliYiwgMCk7IC8q IGtlcm5lbCAxIGhpICovCisJaW50ZWxfYmJfb3V0KGliYiwgMCk7IC8vIGtlcm5lbCAyCisJaW50 ZWxfYmJfb3V0KGliYiwgMCk7IC8qIGtlcm5lbCAyIGhpICovCisKKwlpbnRlbF9iYl9vdXQoaWJi LCBHRU44XzNEU1RBVEVfUFNfQkxFTkQgfCAoMiAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBH RU44X1BTX0JMRU5EX0hBU19XUklURUFCTEVfUlQpOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VO OF8zRFNUQVRFX1BTX0VYVFJBIHwgKDIgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VOOF9Q U1hfUElYRUxfU0hBREVSX1ZBTElEIHwgR0VOOF9QU1hfQVRUUklCVVRFX0VOQUJMRSk7CiB9CiAK IHN0YXRpYyB2b2lkCi1nZW44X2VtaXRfZGVwdGgoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaCkgewotCU9VVF9CQVRDSChHRU44XzNEU1RBVEVfV01fREVQVEhfU1RFTkNJTCB8ICgzIC0g MikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0KLQlPVVRfQkFUQ0goR0VON18z RFNUQVRFX0RFUFRIX0JVRkZFUiB8ICg4LTIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENI KDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9V VF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0KLQlPVVRfQkFUQ0goR0VOOF8zRFNUQVRFX0hJ RVJfREVQVEhfQlVGRkVSIHwgKDUgLSAyKSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgw KTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCi0JT1VUX0JBVENIKEdFTjhfM0RT VEFURV9TVEVOQ0lMX0JVRkZFUiB8ICg1IC0gMikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFU Q0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKK2dlbjhfZW1pdF9kZXB0aChz dHJ1Y3QgaW50ZWxfYmIgKmliYikgeworCWludGVsX2JiX291dChpYmIsIEdFTjhfM0RTVEFURV9X TV9ERVBUSF9TVEVOQ0lMIHwgKDMgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50 ZWxfYmJfb3V0KGliYiwgMCk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfREVQ VEhfQlVGRkVSIHwgKDgtMikpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291 dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDAp OworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVs X2JiX291dChpYmIsIDApOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VOOF8zRFNUQVRFX0hJRVJf REVQVEhfQlVGRkVSIHwgKDUgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxf YmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGli YiwgMCk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU44XzNEU1RBVEVfU1RFTkNJTF9CVUZGRVIg fCAoNSAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAw KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIH0KIAog c3RhdGljIHZvaWQKLWdlbjdfZW1pdF9jbGVhcihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJh dGNoKSB7Ci0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9DTEVBUl9QQVJBTVMgfCAoMy0yKSk7Ci0J T1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgxKTsgLy8gY2xlYXIgdmFsaWQKK2dlbjdfZW1pdF9j bGVhcihzdHJ1Y3QgaW50ZWxfYmIgKmliYikgeworCWludGVsX2JiX291dChpYmIsIEdFTjdfM0RT VEFURV9DTEVBUl9QQVJBTVMgfCAoMy0yKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50 ZWxfYmJfb3V0KGliYiwgMSk7IC8vIGNsZWFyIHZhbGlkCiB9CiAKIHN0YXRpYyB2b2lkCi1nZW42 X2VtaXRfZHJhd2luZ19yZWN0YW5nbGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwg Y29uc3Qgc3RydWN0IGlndF9idWYgKmRzdCkKK2dlbjZfZW1pdF9kcmF3aW5nX3JlY3RhbmdsZShz dHJ1Y3QgaW50ZWxfYmIgKmliYiwgY29uc3Qgc3RydWN0IGludGVsX2J1ZiAqZHN0KQogewotCU9V VF9CQVRDSChHRU40XzNEU1RBVEVfRFJBV0lOR19SRUNUQU5HTEUgfCAoNCAtIDIpKTsKLQlPVVRf QkFUQ0goMCk7Ci0JT1VUX0JBVENIKChpZ3RfYnVmX2hlaWdodChkc3QpIC0gMSkgPDwgMTYgfCAo aWd0X2J1Zl93aWR0aChkc3QpIC0gMSkpOwotCU9VVF9CQVRDSCgwKTsKKwlpbnRlbF9iYl9vdXQo aWJiLCBHRU40XzNEU1RBVEVfRFJBV0lOR19SRUNUQU5HTEUgfCAoNCAtIDIpKTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAoaW50ZWxfYnVmX2hlaWdodChkc3Qp IC0gMSkgPDwgMTYgfCAoaW50ZWxfYnVmX3dpZHRoKGRzdCkgLSAxKSk7CisJaW50ZWxfYmJfb3V0 KGliYiwgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIGdlbjhfZW1pdF92Zl90b3BvbG9neShzdHJ1Y3Qg aW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorc3RhdGljIHZvaWQgZ2VuOF9lbWl0X3ZmX3RvcG9s b2d5KHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewotCU9VVF9CQVRDSChHRU44XzNEU1RBVEVfVkZf VE9QT0xPR1kpOwotCU9VVF9CQVRDSChfM0RQUklNX1JFQ1RMSVNUKTsKKwlpbnRlbF9iYl9vdXQo aWJiLCBHRU44XzNEU1RBVEVfVkZfVE9QT0xPR1kpOworCWludGVsX2JiX291dChpYmIsIF8zRFBS SU1fUkVDVExJU1QpOwogfQogCiAvKiBWZXJ0ZXggZWxlbWVudHMgTVVTVCBiZSBkZWZpbmVkIGJl Zm9yZSB0aGlzIGFjY29yZGluZyB0byBzcGVjICovCi1zdGF0aWMgdm9pZCBnZW44X2VtaXRfcHJp bWl0aXZlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IG9mZnNldCkK K3N0YXRpYyB2b2lkIGdlbjhfZW1pdF9wcmltaXRpdmUoc3RydWN0IGludGVsX2JiICppYmIsIHVp bnQzMl90IG9mZnNldCkKIHsKLQlPVVRfQkFUQ0goR0VOOF8zRFNUQVRFX1ZGX0lOU1RBTkNJTkcg fCAoMyAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOworCWludGVsX2JiX291 dChpYmIsIEdFTjhfM0RTVEFURV9WRl9JTlNUQU5DSU5HIHwgKDMgLSAyKSk7CisJaW50ZWxfYmJf b3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiAKLQlPVVRfQkFUQ0goR0VONF8z RFBSSU1JVElWRSB8ICg3LTIpKTsKLQlPVVRfQkFUQ0goMCk7CS8qIGdlbjgrIGlnbm9yZSB0aGUg dG9wb2xvZ3kgdHlwZSBmaWVsZCAqLwotCU9VVF9CQVRDSCgzKTsJLyogdmVydGV4IGNvdW50ICov Ci0JT1VUX0JBVENIKDApOwkvKiAgV2UncmUgc3BlY2lmeWluZyB0aGlzIGluc3RlYWQgd2l0aCBv ZmZzZXQgaW4gR0VONl8zRFNUQVRFX1ZFUlRFWF9CVUZGRVJTICovCi0JT1VUX0JBVENIKDEpOwkv KiBzaW5nbGUgaW5zdGFuY2UgKi8KLQlPVVRfQkFUQ0goMCk7CS8qIHN0YXJ0IGluc3RhbmNlIGxv Y2F0aW9uICovCi0JT1VUX0JBVENIKDApOwkvKiBpbmRleCBidWZmZXIgb2Zmc2V0LCBpZ25vcmVk ICovCisJaW50ZWxfYmJfb3V0KGliYiwgR0VONF8zRFBSSU1JVElWRSB8ICg3LTIpKTsKKwlpbnRl bF9iYl9vdXQoaWJiLCAwKTsJLyogZ2VuOCsgaWdub3JlIHRoZSB0b3BvbG9neSB0eXBlIGZpZWxk ICovCisJaW50ZWxfYmJfb3V0KGliYiwgMyk7CS8qIHZlcnRleCBjb3VudCAqLworCWludGVsX2Ji X291dChpYmIsIDApOwkvKiAgV2UncmUgc3BlY2lmeWluZyB0aGlzIGluc3RlYWQgd2l0aCBvZmZz ZXQgaW4gR0VONl8zRFNUQVRFX1ZFUlRFWF9CVUZGRVJTICovCisJaW50ZWxfYmJfb3V0KGliYiwg MSk7CS8qIHNpbmdsZSBpbnN0YW5jZSAqLworCWludGVsX2JiX291dChpYmIsIDApOwkvKiBzdGFy dCBpbnN0YW5jZSBsb2NhdGlvbiAqLworCWludGVsX2JiX291dChpYmIsIDApOwkvKiBpbmRleCBi dWZmZXIgb2Zmc2V0LCBpZ25vcmVkICovCiB9CiAKIC8qIFRoZSBnZW5lcmFsIHJ1bGUgaXMgaWYg aXQncyBuYW1lZCBnZW42IGl0IGlzIGRpcmVjdGx5IGNvcGllZCBmcm9tCkBAIC04OTcsMTE0ICs3 NzksMTA0IEBAIHN0YXRpYyB2b2lkIGdlbjhfZW1pdF9wcmltaXRpdmUoc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3Qgb2Zmc2V0CiAKICNkZWZpbmUgQkFUQ0hfU1RBVEVf U1BMSVQgMjA0OAogCi12b2lkIGdlbjhfcmVuZGVyX2NvcHlmdW5jKHN0cnVjdCBpbnRlbF9iYXRj aGJ1ZmZlciAqYmF0Y2gsCi0JCQkgIGRybV9pbnRlbF9jb250ZXh0ICpjb250ZXh0LAotCQkJICBj b25zdCBzdHJ1Y3QgaWd0X2J1ZiAqc3JjLCB1bnNpZ25lZCBzcmNfeCwgdW5zaWduZWQgc3JjX3ks Ci0JCQkgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsCi0JCQkgIGNvbnN0IHN0cnVj dCBpZ3RfYnVmICpkc3QsIHVuc2lnbmVkIGRzdF94LCB1bnNpZ25lZCBkc3RfeSkKK3ZvaWQgZ2Vu OF9yZW5kZXJfY29weWZ1bmMoc3RydWN0IGludGVsX2JiICppYmIsCisJCQkgIHVpbnQzMl90IGN0 eCwKKwkJCSAgc3RydWN0IGludGVsX2J1ZiAqc3JjLAorCQkJICB1bnNpZ25lZCBpbnQgc3JjX3gs IHVuc2lnbmVkIGludCBzcmNfeSwKKwkJCSAgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBp bnQgaGVpZ2h0LAorCQkJICBzdHJ1Y3QgaW50ZWxfYnVmICpkc3QsCisJCQkgIHVuc2lnbmVkIGlu dCBkc3RfeCwgdW5zaWduZWQgaW50IGRzdF95KQogewotCXN0cnVjdCBhbm5vdGF0aW9uc19jb250 ZXh0IGF1Yl9hbm5vdGF0aW9uczsKIAl1aW50MzJfdCBwc19zYW1wbGVyX3N0YXRlLCBwc19rZXJu ZWxfb2ZmLCBwc19iaW5kaW5nX3RhYmxlOwogCXVpbnQzMl90IHNjaXNzb3Jfc3RhdGU7CiAJdWlu dDMyX3QgdmVydGV4X2J1ZmZlcjsKLQl1aW50MzJfdCBiYXRjaF9lbmQ7CiAKIAlpZ3RfYXNzZXJ0 KHNyYy0+YnBwID09IGRzdC0+YnBwKTsKLQlpbnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaF93aXRoX2Nv bnRleHQoYmF0Y2gsIGNvbnRleHQpOwogCi0JaW50ZWxfYmF0Y2hidWZmZXJfYWxpZ24oYmF0Y2gs IDgpOworCWludGVsX2JiX2ZsdXNoX3JlbmRlcl93aXRoX2NvbnRleHQoaWJiLCBjdHgpOwogCi0J YmF0Y2gtPnB0ciA9ICZiYXRjaC0+YnVmZmVyW0JBVENIX1NUQVRFX1NQTElUXTsKKwlpbnRlbF9i Yl9hZGRfaW50ZWxfYnVmKGliYiwgZHN0LCB0cnVlKTsKKwlpbnRlbF9iYl9hZGRfaW50ZWxfYnVm KGliYiwgc3JjLCBmYWxzZSk7CiAKLQlhbm5vdGF0aW9uX2luaXQoJmF1Yl9hbm5vdGF0aW9ucyk7 CisJaW50ZWxfYmJfcHRyX3NldChpYmIsIEJBVENIX1NUQVRFX1NQTElUKTsKIAotCXBzX2JpbmRp bmdfdGFibGUgID0gZ2VuOF9iaW5kX3N1cmZhY2VzKGJhdGNoLCAmYXViX2Fubm90YXRpb25zLAot CQkJCQkgICAgICAgc3JjLCBkc3QpOwotCXBzX3NhbXBsZXJfc3RhdGUgID0gZ2VuOF9jcmVhdGVf c2FtcGxlcihiYXRjaCwgJmF1Yl9hbm5vdGF0aW9ucyk7Ci0JcHNfa2VybmVsX29mZiA9IGdlbjhf ZmlsbF9wcyhiYXRjaCwgJmF1Yl9hbm5vdGF0aW9ucywKLQkJCQkgICAgIHBzX2tlcm5lbCwgc2l6 ZW9mKHBzX2tlcm5lbCkpOwotCXZlcnRleF9idWZmZXIgPSBnZW43X2ZpbGxfdmVydGV4X2J1ZmZl cl9kYXRhKGJhdGNoLCAmYXViX2Fubm90YXRpb25zLAorCXBzX2JpbmRpbmdfdGFibGUgID0gZ2Vu OF9iaW5kX3N1cmZhY2VzKGliYiwgc3JjLCBkc3QpOworCXBzX3NhbXBsZXJfc3RhdGUgID0gZ2Vu OF9jcmVhdGVfc2FtcGxlcihpYmIpOworCXBzX2tlcm5lbF9vZmYgPSBnZW44X2ZpbGxfcHMoaWJi LCBwc19rZXJuZWwsIHNpemVvZihwc19rZXJuZWwpKTsKKwl2ZXJ0ZXhfYnVmZmVyID0gZ2VuN19m aWxsX3ZlcnRleF9idWZmZXJfZGF0YShpYmIsCiAJCQkJCQkgICAgIHNyYywKIAkJCQkJCSAgICAg c3JjX3gsIHNyY195LAogCQkJCQkJICAgICBkc3RfeCwgZHN0X3ksCiAJCQkJCQkgICAgIHdpZHRo LCBoZWlnaHQpOwotCWNjLmNjX3N0YXRlID0gZ2VuNl9jcmVhdGVfY2Nfc3RhdGUoYmF0Y2gsICZh dWJfYW5ub3RhdGlvbnMpOwotCWNjLmJsZW5kX3N0YXRlID0gZ2VuOF9jcmVhdGVfYmxlbmRfc3Rh dGUoYmF0Y2gsICZhdWJfYW5ub3RhdGlvbnMpOwotCXZpZXdwb3J0LmNjX3N0YXRlID0gZ2VuNl9j cmVhdGVfY2Nfdmlld3BvcnQoYmF0Y2gsICZhdWJfYW5ub3RhdGlvbnMpOwotCXZpZXdwb3J0LnNm X2NsaXBfc3RhdGUgPSBnZW43X2NyZWF0ZV9zZl9jbGlwX3ZpZXdwb3J0KGJhdGNoLCAmYXViX2Fu bm90YXRpb25zKTsKLQlzY2lzc29yX3N0YXRlID0gZ2VuNl9jcmVhdGVfc2Npc3Nvcl9yZWN0KGJh dGNoLCAmYXViX2Fubm90YXRpb25zKTsKKwljYy5jY19zdGF0ZSA9IGdlbjZfY3JlYXRlX2NjX3N0 YXRlKGliYik7CisJY2MuYmxlbmRfc3RhdGUgPSBnZW44X2NyZWF0ZV9ibGVuZF9zdGF0ZShpYmIp OworCXZpZXdwb3J0LmNjX3N0YXRlID0gZ2VuNl9jcmVhdGVfY2Nfdmlld3BvcnQoaWJiKTsKKwl2 aWV3cG9ydC5zZl9jbGlwX3N0YXRlID0gZ2VuN19jcmVhdGVfc2ZfY2xpcF92aWV3cG9ydChpYmIp OworCXNjaXNzb3Jfc3RhdGUgPSBnZW42X2NyZWF0ZV9zY2lzc29yX3JlY3QoaWJiKTsKIAkvKiBU T0RPOiB0aGVyZWUgaXMgb3RoZXIgc3RhdGUgd2hpY2ggaXNuJ3Qgc2V0dXAgKi8KIAotCWlndF9h c3NlcnQoYmF0Y2gtPnB0ciA8ICZiYXRjaC0+YnVmZmVyWzQwOTVdKTsKLQotCWJhdGNoLT5wdHIg PSBiYXRjaC0+YnVmZmVyOworCWludGVsX2JiX3B0cl9zZXQoaWJiLCAwKTsKIAogCS8qIFN0YXJ0 IGVtaXR0aW5nIHRoZSBjb21tYW5kcy4gVGhlIG9yZGVyIHJvdWdobHkgZm9sbG93cyB0aGUgbWVz YSBibG9ycAogCSAqIG9yZGVyICovCi0JT1VUX0JBVENIKEc0WF9QSVBFTElORV9TRUxFQ1QgfCBQ SVBFTElORV9TRUxFQ1RfM0QpOwotCi0JZ2VuOF9lbWl0X3NpcChiYXRjaCk7Ci0KLQlnZW43X2Vt aXRfcHVzaF9jb25zdGFudHMoYmF0Y2gpOwotCi0JZ2VuOF9lbWl0X3N0YXRlX2Jhc2VfYWRkcmVz cyhiYXRjaCk7Ci0KLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX1ZJRVdQT1JUX1NUQVRFX1BPSU5U RVJTX0NDKTsKLQlPVVRfQkFUQ0godmlld3BvcnQuY2Nfc3RhdGUpOwotCU9VVF9CQVRDSChHRU44 XzNEU1RBVEVfVklFV1BPUlRfU1RBVEVfUE9JTlRFUlNfU0ZfQ0xJUCk7Ci0JT1VUX0JBVENIKHZp ZXdwb3J0LnNmX2NsaXBfc3RhdGUpOworCWludGVsX2JiX291dChpYmIsIEc0WF9QSVBFTElORV9T RUxFQ1QgfCBQSVBFTElORV9TRUxFQ1RfM0QpOwogCi0JZ2VuN19lbWl0X3VyYihiYXRjaCk7CisJ Z2VuOF9lbWl0X3NpcChpYmIpOwogCi0JZ2VuOF9lbWl0X2NjKGJhdGNoKTsKKwlnZW43X2VtaXRf cHVzaF9jb25zdGFudHMoaWJiKTsKIAotCWdlbjhfZW1pdF9tdWx0aXNhbXBsZShiYXRjaCk7CisJ Z2VuOF9lbWl0X3N0YXRlX2Jhc2VfYWRkcmVzcyhpYmIpOwogCi0JZ2VuOF9lbWl0X251bGxfc3Rh dGUoYmF0Y2gpOworCWludGVsX2JiX291dChpYmIsIEdFTjdfM0RTVEFURV9WSUVXUE9SVF9TVEFU RV9QT0lOVEVSU19DQyk7CisJaW50ZWxfYmJfb3V0KGliYiwgdmlld3BvcnQuY2Nfc3RhdGUpOwor CWludGVsX2JiX291dChpYmIsIEdFTjhfM0RTVEFURV9WSUVXUE9SVF9TVEFURV9QT0lOVEVSU19T Rl9DTElQKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCB2aWV3cG9ydC5zZl9jbGlwX3N0YXRlKTsKIAot CU9VVF9CQVRDSChHRU43XzNEU1RBVEVfU1RSRUFNT1VUIHwgKDUtMikpOwotCU9VVF9CQVRDSCgw KTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKKwlnZW43 X2VtaXRfdXJiKGliYik7CiAKLQlnZW43X2VtaXRfY2xpcChiYXRjaCk7CisJZ2VuOF9lbWl0X2Nj KGliYik7CiAKLQlnZW44X2VtaXRfc2YoYmF0Y2gpOworCWdlbjhfZW1pdF9tdWx0aXNhbXBsZShp YmIpOwogCi0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9CSU5ESU5HX1RBQkxFX1BPSU5URVJTX1BT KTsKLQlPVVRfQkFUQ0gocHNfYmluZGluZ190YWJsZSk7CisJZ2VuOF9lbWl0X251bGxfc3RhdGUo aWJiKTsKIAotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfU0FNUExFUl9TVEFURV9QT0lOVEVSU19Q Uyk7Ci0JT1VUX0JBVENIKHBzX3NhbXBsZXJfc3RhdGUpOworCWludGVsX2JiX291dChpYmIsIEdF TjdfM0RTVEFURV9TVFJFQU1PVVQgfCAoNS0yKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJ aW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJf b3V0KGliYiwgMCk7CiAKLQlnZW44X2VtaXRfcHMoYmF0Y2gsIHBzX2tlcm5lbF9vZmYpOworCWdl bjdfZW1pdF9jbGlwKGliYik7CiAKLQlPVVRfQkFUQ0goR0VOOF8zRFNUQVRFX1NDSVNTT1JfU1RB VEVfUE9JTlRFUlMpOwotCU9VVF9CQVRDSChzY2lzc29yX3N0YXRlKTsKKwlnZW44X2VtaXRfc2Yo aWJiKTsKIAotCWdlbjhfZW1pdF9kZXB0aChiYXRjaCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VO N18zRFNUQVRFX0JJTkRJTkdfVEFCTEVfUE9JTlRFUlNfUFMpOworCWludGVsX2JiX291dChpYmIs IHBzX2JpbmRpbmdfdGFibGUpOwogCi0JZ2VuN19lbWl0X2NsZWFyKGJhdGNoKTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfU0FNUExFUl9TVEFURV9QT0lOVEVSU19QUyk7CisJaW50 ZWxfYmJfb3V0KGliYiwgcHNfc2FtcGxlcl9zdGF0ZSk7CiAKLQlnZW42X2VtaXRfZHJhd2luZ19y ZWN0YW5nbGUoYmF0Y2gsIGRzdCk7CisJZ2VuOF9lbWl0X3BzKGliYiwgcHNfa2VybmVsX29mZik7 CiAKLQlnZW44X2VtaXRfdmVydGV4X2J1ZmZlcihiYXRjaCwgdmVydGV4X2J1ZmZlcik7Ci0JZ2Vu Nl9lbWl0X3ZlcnRleF9lbGVtZW50cyhiYXRjaCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VOOF8z RFNUQVRFX1NDSVNTT1JfU1RBVEVfUE9JTlRFUlMpOworCWludGVsX2JiX291dChpYmIsIHNjaXNz b3Jfc3RhdGUpOwogCi0JZ2VuOF9lbWl0X3ZmX3RvcG9sb2d5KGJhdGNoKTsKLQlnZW44X2VtaXRf cHJpbWl0aXZlKGJhdGNoLCB2ZXJ0ZXhfYnVmZmVyKTsKKwlnZW44X2VtaXRfZGVwdGgoaWJiKTsK IAotCU9VVF9CQVRDSChNSV9CQVRDSF9CVUZGRVJfRU5EKTsKKwlnZW43X2VtaXRfY2xlYXIoaWJi KTsKIAotCWJhdGNoX2VuZCA9IGludGVsX2JhdGNoYnVmZmVyX2FsaWduKGJhdGNoLCA4KTsKLQlp Z3RfYXNzZXJ0KGJhdGNoX2VuZCA8IEJBVENIX1NUQVRFX1NQTElUKTsKLQlhbm5vdGF0aW9uX2Fk ZF9iYXRjaCgmYXViX2Fubm90YXRpb25zLCBiYXRjaF9lbmQpOworCWdlbjZfZW1pdF9kcmF3aW5n X3JlY3RhbmdsZShpYmIsIGRzdCk7CiAKLQlkdW1wX2JhdGNoKGJhdGNoKTsKKwlnZW44X2VtaXRf dmVydGV4X2J1ZmZlcihpYmIsIHZlcnRleF9idWZmZXIpOworCWdlbjZfZW1pdF92ZXJ0ZXhfZWxl bWVudHMoaWJiKTsKIAotCWFubm90YXRpb25fZmx1c2goJmF1Yl9hbm5vdGF0aW9ucywgYmF0Y2gp OworCWdlbjhfZW1pdF92Zl90b3BvbG9neShpYmIpOworCWdlbjhfZW1pdF9wcmltaXRpdmUoaWJi LCB2ZXJ0ZXhfYnVmZmVyKTsKIAotCWdlbjZfcmVuZGVyX2ZsdXNoKGJhdGNoLCBjb250ZXh0LCBi YXRjaF9lbmQpOwotCWludGVsX2JhdGNoYnVmZmVyX3Jlc2V0KGJhdGNoKTsKKwlpbnRlbF9iYl9l bWl0X2JiZShpYmIpOworCWludGVsX2JiX2V4ZWNfd2l0aF9jb250ZXh0KGliYiwgaW50ZWxfYmJf b2Zmc2V0KGliYiksIGN0eCwKKwkJCQkgICBJOTE1X0VYRUNfREVGQVVMVCB8IEk5MTVfRVhFQ19O T19SRUxPQywKKwkJCQkgICBmYWxzZSk7CisJZHVtcF9iYXRjaChpYmIpOworCWludGVsX2JiX3Jl c2V0KGliYiwgZmFsc2UpOwogfQpkaWZmIC0tZ2l0IGEvbGliL3JlbmRlcmNvcHlfZ2VuOS5jIGIv bGliL3JlbmRlcmNvcHlfZ2VuOS5jCmluZGV4IDg1YWU0Y2FiLi42YmFkN2JiNiAxMDA2NDQKLS0t IGEvbGliL3JlbmRlcmNvcHlfZ2VuOS5jCisrKyBiL2xpYi9yZW5kZXJjb3B5X2dlbjkuYwpAQCAt MTYsNyArMTYsNyBAQAogCiAjaW5jbHVkZSAiZHJtdGVzdC5oIgogI2luY2x1ZGUgImludGVsX2F1 eF9wZ3RhYmxlLmgiCi0jaW5jbHVkZSAiaW50ZWxfYnVmbWdyLmgiCisjaW5jbHVkZSAiaW50ZWxf YnVmb3BzLmgiCiAjaW5jbHVkZSAiaW50ZWxfYmF0Y2hidWZmZXIuaCIKICNpbmNsdWRlICJpbnRl bF9pby5oIgogI2luY2x1ZGUgInJlbmRlcmNvcHkuaCIKQEAgLTI0LDE3ICsyNCwxMiBAQAogI2lu Y2x1ZGUgImludGVsX3JlZy5oIgogI2luY2x1ZGUgImlndF9hdXguaCIKIAotI2luY2x1ZGUgImlu dGVsX2F1Yi5oIgotCiAjZGVmaW5lIFZFUlRFWF9TSVpFICgzKjQpCiAKICNpZiBERUJVR19SRU5E RVJDUFkKLXN0YXRpYyB2b2lkIGR1bXBfYmF0Y2goc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaCkgewotCWludCBmZCA9IG9wZW4oIi90bXAvaTk2NS1iYXRjaGJ1ZmZlcnMuZHVtcCIsIE9f V1JPTkxZIHwgT19DUkVBVCwgIDA2NjYpOwotCWlmIChmZCAhPSAtMSkgewotCQlpZ3RfYXNzZXJ0 X2VxKHdyaXRlKGZkLCBiYXRjaC0+YnVmZmVyLCA0MDk2KSwgNDA5Nik7Ci0JCWZkID0gY2xvc2Uo ZmQpOwotCX0KK3N0YXRpYyB2b2lkIGR1bXBfYmF0Y2goc3RydWN0IGludGVsX2JiICppYmIpCit7 CisJaW50ZWxfYmJfZHVtcChpYmIsICIvdG1wL2dlbjktYmF0Y2hidWZmZXJzLmR1bXAiKTsKIH0K ICNlbHNlCiAjZGVmaW5lIGR1bXBfYmF0Y2goeCkgZG8geyB9IHdoaWxlKDApCkBAIC0xMjAsODcg KzExNSwxNiBAQCBzdGF0aWMgY29uc3QgdWludDMyX3QgZ2VuMTJfcmVuZGVyX2NvcHlbXVs0XSA9 IHsKIAl7IDB4ODAwNDAxMzEsIDB4MDAwMDAwMDQsIDB4NTAwMDcxNDQsIDB4MDBjNDAwMDAgfSwK IH07CiAKLS8qIEFVQiBhbm5vdGF0aW9uIHN1cHBvcnQgKi8KLSNkZWZpbmUgTUFYX0FOTk9UQVRJ T05TCTMzCi1zdHJ1Y3QgYW5ub3RhdGlvbnNfY29udGV4dCB7Ci0JZHJtX2ludGVsX2F1Yl9hbm5v dGF0aW9uIGFubm90YXRpb25zW01BWF9BTk5PVEFUSU9OU107Ci0JaW50IGluZGV4OwotCXVpbnQz Ml90IG9mZnNldDsKLX0gYXViX2Fubm90YXRpb25zOwotCi1zdGF0aWMgdm9pZCBhbm5vdGF0aW9u X2luaXQoc3RydWN0IGFubm90YXRpb25zX2NvbnRleHQgKmN0eCkKLXsKLQkvKiBjdHgtPmFubm90 YXRpb25zIGlzIGFuIGFycmF5IGtlZXBpbmcgYSBsaXN0IG9mIGFubm90YXRpb25zIG9mIHRoZQot CSAqIGJhdGNoIGJ1ZmZlciBvcmRlcmVkIGJ5IG9mZnNldC4gY3R4LT5hbm5vdGF0aW9uc1swXSBp cyB0aHVzIGxlZnQKLQkgKiBmb3IgdGhlIGNvbW1hbmQgc3RyZWFtIGFuZCB3aWxsIGJlIGZpbGxl ZCBqdXN0IGJlZm9yZSBleGVjdXRpbmcKLQkgKiB0aGUgYmF0Y2ggYnVmZmVyIHdpdGggYW5ub3Rh dGlvbnNfYWRkX2JhdGNoKCkgKi8KLQljdHgtPmluZGV4ID0gMTsKLX0KLQotc3RhdGljIHZvaWQg YWRkX2Fubm90YXRpb24oZHJtX2ludGVsX2F1Yl9hbm5vdGF0aW9uICphLAotCQkJICAgdWludDMy X3QgdHlwZSwgdWludDMyX3Qgc3VidHlwZSwKLQkJCSAgIHVpbnQzMl90IGVuZGluZ19vZmZzZXQp Ci17Ci0JYS0+dHlwZSA9IHR5cGU7Ci0JYS0+c3VidHlwZSA9IHN1YnR5cGU7Ci0JYS0+ZW5kaW5n X29mZnNldCA9IGVuZGluZ19vZmZzZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGFubm90YXRpb25fYWRk X2JhdGNoKHN0cnVjdCBhbm5vdGF0aW9uc19jb250ZXh0ICpjdHgsIHNpemVfdCBzaXplKQotewot CWFkZF9hbm5vdGF0aW9uKCZjdHgtPmFubm90YXRpb25zWzBdLCBBVUJfVFJBQ0VfVFlQRV9CQVRD SCwgMCwgc2l6ZSk7Ci19Ci0KLXN0YXRpYyB2b2lkIGFubm90YXRpb25fYWRkX3N0YXRlKHN0cnVj dCBhbm5vdGF0aW9uc19jb250ZXh0ICpjdHgsCi0JCQkJIHVpbnQzMl90IHN0YXRlX3R5cGUsCi0J CQkJIHVpbnQzMl90IHN0YXJ0X29mZnNldCwKLQkJCQkgc2l6ZV90ICAgc2l6ZSkKLXsKLQlhc3Nl cnQoY3R4LT5pbmRleCA8IE1BWF9BTk5PVEFUSU9OUyk7Ci0KLQlhZGRfYW5ub3RhdGlvbigmY3R4 LT5hbm5vdGF0aW9uc1tjdHgtPmluZGV4KytdLAotCQkgICAgICAgQVVCX1RSQUNFX1RZUEVfTk9U WVBFLCAwLAotCQkgICAgICAgc3RhcnRfb2Zmc2V0KTsKLQlhZGRfYW5ub3RhdGlvbigmY3R4LT5h bm5vdGF0aW9uc1tjdHgtPmluZGV4KytdLAotCQkgICAgICAgQVVCX1RSQUNFX1RZUEUoc3RhdGVf dHlwZSksCi0JCSAgICAgICBBVUJfVFJBQ0VfU1VCVFlQRShzdGF0ZV90eXBlKSwKLQkJICAgICAg IHN0YXJ0X29mZnNldCArIHNpemUpOwotfQotCi1zdGF0aWMgdm9pZCBhbm5vdGF0aW9uX2ZsdXNo KHN0cnVjdCBhbm5vdGF0aW9uc19jb250ZXh0ICpjdHgsCi0JCQkgICAgIHN0cnVjdCBpbnRlbF9i YXRjaGJ1ZmZlciAqYmF0Y2gpCi17Ci0JaWYgKCFpZ3RfYXViX2R1bXBfZW5hYmxlZCgpKQotCQly ZXR1cm47Ci0KLQlkcm1faW50ZWxfYnVmbWdyX2dlbV9zZXRfYXViX2Fubm90YXRpb25zKGJhdGNo LT5ibywKLQkJCQkJCSBjdHgtPmFubm90YXRpb25zLAotCQkJCQkJIGN0eC0+aW5kZXgpOwotfQot Ci1zdGF0aWMgdm9pZAotZ2VuNl9yZW5kZXJfZmx1c2goc3RydWN0IGludGVsX2JhdGNoYnVmZmVy ICpiYXRjaCwKLQkJICBkcm1faW50ZWxfY29udGV4dCAqY29udGV4dCwgdWludDMyX3QgYmF0Y2hf ZW5kKQotewotCWlndF9hc3NlcnRfZXEoZHJtX2ludGVsX2JvX3N1YmRhdGEoYmF0Y2gtPmJvLAot CQkJCQkgICAwLCA0MDk2LCBiYXRjaC0+YnVmZmVyKSwKLQkJICAgICAgMCk7Ci0JaWd0X2Fzc2Vy dF9lcShkcm1faW50ZWxfZ2VtX2JvX2NvbnRleHRfZXhlYyhiYXRjaC0+Ym8sCi0JCQkJCQkgICAg Y29udGV4dCwgYmF0Y2hfZW5kLCAwKSwKLQkJICAgICAgMCk7Ci19Ci0KIC8qIE1vc3RseSBjb3B5 K3Bhc3RlIGZyb20gZ2VuNiwgZXhjZXB0IGhlaWdodCwgd2lkdGgsIHBpdGNoIG1vdmVkICovCiBz dGF0aWMgdWludDMyX3QKLWdlbjhfYmluZF9idWYoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaCwgY29uc3Qgc3RydWN0IGlndF9idWYgKmJ1ZiwKLQkgICAgICBpbnQgaXNfZHN0KSB7Citn ZW44X2JpbmRfYnVmKHN0cnVjdCBpbnRlbF9iYiAqaWJiLCBjb25zdCBzdHJ1Y3QgaW50ZWxfYnVm ICpidWYsIGludCBpc19kc3QpIHsKIAlzdHJ1Y3QgZ2VuOV9zdXJmYWNlX3N0YXRlICpzczsKLQl1 aW50MzJfdCB3cml0ZV9kb21haW4sIHJlYWRfZG9tYWluLCBvZmZzZXQ7Ci0JaW50IHJldDsKKwl1 aW50MzJfdCB3cml0ZV9kb21haW4sIHJlYWRfZG9tYWluOworCXVpbnQ2NF90IGFkZHJlc3M7CiAK IAlpZ3RfYXNzZXJ0X2x0ZShidWYtPnN1cmZhY2VbMF0uc3RyaWRlLCAyNTYqMTAyNCk7Ci0JaWd0 X2Fzc2VydF9sdGUoaWd0X2J1Zl93aWR0aChidWYpLCAxNjM4NCk7Ci0JaWd0X2Fzc2VydF9sdGUo aWd0X2J1Zl9oZWlnaHQoYnVmKSwgMTYzODQpOworCWlndF9hc3NlcnRfbHRlKGludGVsX2J1Zl93 aWR0aChidWYpLCAxNjM4NCk7CisJaWd0X2Fzc2VydF9sdGUoaW50ZWxfYnVmX2hlaWdodChidWYp LCAxNjM4NCk7CiAKIAlpZiAoaXNfZHN0KSB7CiAJCXdyaXRlX2RvbWFpbiA9IHJlYWRfZG9tYWlu ID0gSTkxNV9HRU1fRE9NQUlOX1JFTkRFUjsKQEAgLTIwOSwxMCArMTMzLDcgQEAgZ2VuOF9iaW5k X2J1ZihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCBjb25zdCBzdHJ1Y3QgaWd0X2J1 ZiAqYnVmLAogCQlyZWFkX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9TQU1QTEVSOwogCX0KIAot CXNzID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9hbGxvYyhiYXRjaCwgc2l6ZW9mKCpzcyks IDY0KTsKLQlvZmZzZXQgPSBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX29mZnNldChiYXRjaCwg c3MpOwotCWFubm90YXRpb25fYWRkX3N0YXRlKCZhdWJfYW5ub3RhdGlvbnMsIEFVQl9UUkFDRV9T VVJGQUNFX1NUQVRFLAotCQkJICAgICBvZmZzZXQsIHNpemVvZigqc3MpKTsKKwlzcyA9IGludGVs X2JiX3B0cl9hbGlnbihpYmIsIDY0KTsKIAogCXNzLT5zczAuc3VyZmFjZV90eXBlID0gU1VSRkFD RV8yRDsKIAlzd2l0Y2ggKGJ1Zi0+YnBwKSB7CkBAIC0yMzgsMTcgKzE1OSwxNSBAQCBnZW44X2Jp bmRfYnVmKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIGNvbnN0IHN0cnVjdCBpZ3Rf YnVmICpidWYsCiAJCXNzLT5zczUudHJtb2RlID0gMjsKIAlzcy0+c3M1Lm1pcF90YWlsX3N0YXJ0 X2xvZCA9IDE7IC8qIG5lZWRlZCB3aXRoIHRybW9kZSAqLwogCi0Jc3MtPnNzOC5iYXNlX2FkZHIg PSBidWYtPmJvLT5vZmZzZXQ2NDsKLQlzcy0+c3M5LmJhc2VfYWRkcl9oaSA9IGJ1Zi0+Ym8tPm9m ZnNldDY0ID4+IDMyOworCWFkZHJlc3MgPSBpbnRlbF9iYl9vZmZzZXRfcmVsb2MoaWJiLCBidWYt PmhhbmRsZSwKKwkJCQkJcmVhZF9kb21haW4sIHdyaXRlX2RvbWFpbiwKKwkJCQkJaW50ZWxfYmJf b2Zmc2V0KGliYikgKyA0ICogOCwKKwkJCQkJYnVmLT5hZGRyLm9mZnNldCk7CisJc3MtPnNzOC5i YXNlX2FkZHIgPSBhZGRyZXNzOworCXNzLT5zczkuYmFzZV9hZGRyX2hpID0gYWRkcmVzcyA+PiAz MjsKIAotCXJldCA9IGRybV9pbnRlbF9ib19lbWl0X3JlbG9jKGJhdGNoLT5ibywKLQkJCQkgICAg ICBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX29mZnNldChiYXRjaCwgJnNzLT5zczgpLAotCQkJ CSAgICAgIGJ1Zi0+Ym8sIDAsCi0JCQkJICAgICAgcmVhZF9kb21haW4sIHdyaXRlX2RvbWFpbik7 Ci0JYXNzZXJ0KHJldCA9PSAwKTsKLQotCXNzLT5zczIuaGVpZ2h0ID0gaWd0X2J1Zl9oZWlnaHQo YnVmKSAtIDE7Ci0Jc3MtPnNzMi53aWR0aCAgPSBpZ3RfYnVmX3dpZHRoKGJ1ZikgLSAxOworCXNz LT5zczIuaGVpZ2h0ID0gaW50ZWxfYnVmX2hlaWdodChidWYpIC0gMTsKKwlzcy0+c3MyLndpZHRo ICA9IGludGVsX2J1Zl93aWR0aChidWYpIC0gMTsKIAlzcy0+c3MzLnBpdGNoICA9IGJ1Zi0+c3Vy ZmFjZVswXS5zdHJpZGUgLSAxOwogCiAJc3MtPnNzNy5za2wuc2hhZGVyX2NoYW5lbF9zZWxlY3Rf ciA9IDQ7CkBAIC0yNjQsNjAgKzE4Myw1MiBAQCBnZW44X2JpbmRfYnVmKHN0cnVjdCBpbnRlbF9i YXRjaGJ1ZmZlciAqYmF0Y2gsIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpidWYsCiAJCXNzLT5zczYu YXV4X21vZGUgPSAweDU7IC8qIEFVWF9DQ1NfRSAqLwogCQlzcy0+c3M2LmF1eF9waXRjaCA9IChi dWYtPmNjc1swXS5zdHJpZGUgLyAxMjgpIC0gMTsKIAotCQlzcy0+c3MxMC5hdXhfYmFzZV9hZGRy ID0gYnVmLT5iby0+b2Zmc2V0NjQgKyBidWYtPmNjc1swXS5vZmZzZXQ7Ci0JCXNzLT5zczExLmF1 eF9iYXNlX2FkZHJfaGkgPSAoYnVmLT5iby0+b2Zmc2V0NjQgKyBidWYtPmNjc1swXS5vZmZzZXQp ID4+IDMyOwotCi0JCXJldCA9IGRybV9pbnRlbF9ib19lbWl0X3JlbG9jKGJhdGNoLT5ibywKLQkJ CQkJICAgICAgaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9vZmZzZXQoYmF0Y2gsICZzcy0+c3Mx MCksCi0JCQkJCSAgICAgIGJ1Zi0+Ym8sIGJ1Zi0+Y2NzWzBdLm9mZnNldCwKLQkJCQkJICAgICAg cmVhZF9kb21haW4sIHdyaXRlX2RvbWFpbik7Ci0JCWFzc2VydChyZXQgPT0gMCk7CisJCWFkZHJl c3MgPSBpbnRlbF9iYl9vZmZzZXRfcmVsb2Nfd2l0aF9kZWx0YShpYmIsIGJ1Zi0+aGFuZGxlLAor CQkJCQkJCSAgIHJlYWRfZG9tYWluLCB3cml0ZV9kb21haW4sCisJCQkJCQkJICAgYnVmLT5jY3Nb MF0ub2Zmc2V0LAorCQkJCQkJCSAgIGludGVsX2JiX29mZnNldChpYmIpICsgNCAqIDEwLAorCQkJ CQkJCSAgIGJ1Zi0+YWRkci5vZmZzZXQpOworCQlzcy0+c3MxMC5hdXhfYmFzZV9hZGRyID0gKGFk ZHJlc3MgKyBidWYtPmNjc1swXS5vZmZzZXQpOworCQlzcy0+c3MxMS5hdXhfYmFzZV9hZGRyX2hp ID0gKGFkZHJlc3MgKyBidWYtPmNjc1swXS5vZmZzZXQpID4+IDMyOwogCX0KIAogCWlmIChidWYt PmNjLm9mZnNldCkgewogCQlpZ3RfYXNzZXJ0KGJ1Zi0+Y29tcHJlc3Npb24gPT0gSTkxNV9DT01Q UkVTU0lPTl9SRU5ERVIpOwogCi0JCXNzLT5zczEyLmNsZWFyX2FkZHJlc3MgPSBidWYtPmJvLT5v ZmZzZXQ2NCArIGJ1Zi0+Y2Mub2Zmc2V0OwotCQlzcy0+c3MxMy5jbGVhcl9hZGRyZXNzX2hpID0g KGJ1Zi0+Ym8tPm9mZnNldDY0ICsgYnVmLT5jYy5vZmZzZXQpID4+IDMyOwotCi0JCXJldCA9IGRy bV9pbnRlbF9ib19lbWl0X3JlbG9jKGJhdGNoLT5ibywKLQkJCQkJICAgICAgaW50ZWxfYmF0Y2hi dWZmZXJfc3ViZGF0YV9vZmZzZXQoYmF0Y2gsICZzcy0+c3MxMiksCi0JCQkJCSAgICAgIGJ1Zi0+ Ym8sIGJ1Zi0+Y2Mub2Zmc2V0LAotCQkJCQkgICAgICByZWFkX2RvbWFpbiwgd3JpdGVfZG9tYWlu KTsKLQkJYXNzZXJ0KHJldCA9PSAwKTsKKwkJYWRkcmVzcyA9IGludGVsX2JiX29mZnNldF9yZWxv Y193aXRoX2RlbHRhKGliYiwgYnVmLT5oYW5kbGUsCisJCQkJCQkJICAgcmVhZF9kb21haW4sIHdy aXRlX2RvbWFpbiwKKwkJCQkJCQkgICBidWYtPmNjLm9mZnNldCwKKwkJCQkJCQkgICBpbnRlbF9i Yl9vZmZzZXQoaWJiKSArIDQgKiAxMiwKKwkJCQkJCQkgICBidWYtPmFkZHIub2Zmc2V0KTsKKwkJ c3MtPnNzMTIuY2xlYXJfYWRkcmVzcyA9IGFkZHJlc3MgKyBidWYtPmNjLm9mZnNldDsKKwkJc3Mt PnNzMTMuY2xlYXJfYWRkcmVzc19oaSA9IChhZGRyZXNzICsgYnVmLT5jYy5vZmZzZXQpID4+IDMy OwogCX0KIAotCXJldHVybiBvZmZzZXQ7CisJcmV0dXJuIGludGVsX2JiX3B0cl9hZGRfcmV0dXJu X3ByZXZfb2Zmc2V0KGliYiwgc2l6ZW9mKCpzcykpOwogfQogCiBzdGF0aWMgdWludDMyX3QKLWdl bjhfYmluZF9zdXJmYWNlcyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkgICBj b25zdCBzdHJ1Y3QgaWd0X2J1ZiAqc3JjLAotCQkgICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0 KQorZ2VuOF9iaW5kX3N1cmZhY2VzKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAorCQkgICBjb25zdCBz dHJ1Y3QgaW50ZWxfYnVmICpzcmMsCisJCSAgIGNvbnN0IHN0cnVjdCBpbnRlbF9idWYgKmRzdCkK IHsKLQl1aW50MzJfdCAqYmluZGluZ190YWJsZSwgb2Zmc2V0OworCXVpbnQzMl90ICpiaW5kaW5n X3RhYmxlLCBiaW5kaW5nX3RhYmxlX29mZnNldDsKIAotCWJpbmRpbmdfdGFibGUgPSBpbnRlbF9i YXRjaGJ1ZmZlcl9zdWJkYXRhX2FsbG9jKGJhdGNoLCA4LCAzMik7Ci0Jb2Zmc2V0ID0gaW50ZWxf YmF0Y2hidWZmZXJfc3ViZGF0YV9vZmZzZXQoYmF0Y2gsIGJpbmRpbmdfdGFibGUpOwotCWFubm90 YXRpb25fYWRkX3N0YXRlKCZhdWJfYW5ub3RhdGlvbnMsIEFVQl9UUkFDRV9CSU5ESU5HX1RBQkxF LAotCQkJICAgICBvZmZzZXQsIDgpOworCWJpbmRpbmdfdGFibGUgPSBpbnRlbF9iYl9wdHJfYWxp Z24oaWJiLCAzMik7CisJYmluZGluZ190YWJsZV9vZmZzZXQgPSBpbnRlbF9iYl9wdHJfYWRkX3Jl dHVybl9wcmV2X29mZnNldChpYmIsIDMyKTsKIAotCWJpbmRpbmdfdGFibGVbMF0gPSBnZW44X2Jp bmRfYnVmKGJhdGNoLCBkc3QsIDEpOwotCWJpbmRpbmdfdGFibGVbMV0gPSBnZW44X2JpbmRfYnVm KGJhdGNoLCBzcmMsIDApOworCWJpbmRpbmdfdGFibGVbMF0gPSBnZW44X2JpbmRfYnVmKGliYiwg ZHN0LCAxKTsKKwliaW5kaW5nX3RhYmxlWzFdID0gZ2VuOF9iaW5kX2J1ZihpYmIsIHNyYywgMCk7 CiAKLQlyZXR1cm4gb2Zmc2V0OworCXJldHVybiBiaW5kaW5nX3RhYmxlX29mZnNldDsKIH0KIAog LyogTW9zdGx5IGNvcHkrcGFzdGUgZnJvbSBnZW42LCBleGNlcHQgd3JhcCBtb2RlcyBtb3ZlZCAq Lwogc3RhdGljIHVpbnQzMl90Ci1nZW44X2NyZWF0ZV9zYW1wbGVyKHN0cnVjdCBpbnRlbF9iYXRj aGJ1ZmZlciAqYmF0Y2gpIHsKK2dlbjhfY3JlYXRlX3NhbXBsZXIoc3RydWN0IGludGVsX2JiICpp YmIpIHsKIAlzdHJ1Y3QgZ2VuOF9zYW1wbGVyX3N0YXRlICpzczsKLQl1aW50MzJfdCBvZmZzZXQ7 CiAKLQlzcyA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfYWxsb2MoYmF0Y2gsIHNpemVvZigq c3MpLCA2NCk7Ci0Jb2Zmc2V0ID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9vZmZzZXQoYmF0 Y2gsIHNzKTsKLQlhbm5vdGF0aW9uX2FkZF9zdGF0ZSgmYXViX2Fubm90YXRpb25zLCBBVUJfVFJB Q0VfU0FNUExFUl9TVEFURSwKLQkJCSAgICAgb2Zmc2V0LCBzaXplb2YoKnNzKSk7CisJc3MgPSBp bnRlbF9iYl9wdHJfYWxpZ24oaWJiLCA2NCk7CiAKIAlzcy0+c3MwLm1pbl9maWx0ZXIgPSBHRU40 X01BUEZJTFRFUl9ORUFSRVNUOwogCXNzLT5zczAubWFnX2ZpbHRlciA9IEdFTjRfTUFQRklMVEVS X05FQVJFU1Q7CkBAIC0zMjksMjEgKzI0MCwxNSBAQCBnZW44X2NyZWF0ZV9zYW1wbGVyKHN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpIHsKIAkgKiBzYW1wbGVyIGZldGNoLCBidXQgY291 bGRuJ3QgbWFrZSBpdCB3b3JrLiAqLwogCXNzLT5zczMubm9uX25vcm1hbGl6ZWRfY29vcmQgPSAw OwogCi0JcmV0dXJuIG9mZnNldDsKKwlyZXR1cm4gaW50ZWxfYmJfcHRyX2FkZF9yZXR1cm5fcHJl dl9vZmZzZXQoaWJiLCBzaXplb2YoKnNzKSk7CiB9CiAKIHN0YXRpYyB1aW50MzJfdAotZ2VuOF9m aWxsX3BzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCitnZW44X2ZpbGxfcHMoc3Ry dWN0IGludGVsX2JiICppYmIsCiAJICAgICBjb25zdCB1aW50MzJfdCBrZXJuZWxbXVs0XSwKIAkg ICAgIHNpemVfdCBzaXplKQogewotCXVpbnQzMl90IG9mZnNldDsKLQotCW9mZnNldCA9IGludGVs X2JhdGNoYnVmZmVyX2NvcHlfZGF0YShiYXRjaCwga2VybmVsLCBzaXplLCA2NCk7Ci0JYW5ub3Rh dGlvbl9hZGRfc3RhdGUoJmF1Yl9hbm5vdGF0aW9ucywgQVVCX1RSQUNFX0tFUk5FTF9JTlNUUlVD VElPTlMsCi0JCQkgICAgIG9mZnNldCwgc2l6ZSk7Ci0KLQlyZXR1cm4gb2Zmc2V0OworCXJldHVy biBpbnRlbF9iYl9jb3B5X2RhdGEoaWJiLCBrZXJuZWwsIHNpemUsIDY0KTsKIH0KIAogLyoKQEAg LTM1NywzMyArMjYyLDI5IEBAIGdlbjhfZmlsbF9wcyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoLAogICogc2VlIGdlbjZfZW1pdF92ZXJ0ZXhfZWxlbWVudHMKICAqLwogc3RhdGljIHVp bnQzMl90Ci1nZW43X2ZpbGxfdmVydGV4X2J1ZmZlcl9kYXRhKHN0cnVjdCBpbnRlbF9iYXRjaGJ1 ZmZlciAqYmF0Y2gsCi0JCQkgICAgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpzcmMsCitnZW43X2Zp bGxfdmVydGV4X2J1ZmZlcl9kYXRhKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAorCQkJICAgICBjb25z dCBzdHJ1Y3QgaW50ZWxfYnVmICpzcmMsCiAJCQkgICAgIHVpbnQzMl90IHNyY194LCB1aW50MzJf dCBzcmNfeSwKIAkJCSAgICAgdWludDMyX3QgZHN0X3gsIHVpbnQzMl90IGRzdF95LAogCQkJICAg ICB1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0KQogewotCXZvaWQgKnN0YXJ0OwogCXVp bnQzMl90IG9mZnNldDsKIAotCWludGVsX2JhdGNoYnVmZmVyX2FsaWduKGJhdGNoLCA4KTsKLQlz dGFydCA9IGJhdGNoLT5wdHI7CisJaW50ZWxfYmJfcHRyX2FsaWduKGliYiwgOCk7CisJb2Zmc2V0 ID0gaW50ZWxfYmJfb2Zmc2V0KGliYik7CiAKLQllbWl0X3ZlcnRleF8ycyhiYXRjaCwgZHN0X3gg KyB3aWR0aCwgZHN0X3kgKyBoZWlnaHQpOwotCWVtaXRfdmVydGV4X25vcm1hbGl6ZWQoYmF0Y2gs IHNyY194ICsgd2lkdGgsIGlndF9idWZfd2lkdGgoc3JjKSk7Ci0JZW1pdF92ZXJ0ZXhfbm9ybWFs aXplZChiYXRjaCwgc3JjX3kgKyBoZWlnaHQsIGlndF9idWZfaGVpZ2h0KHNyYykpOworCWVtaXRf dmVydGV4XzJzKGliYiwgZHN0X3ggKyB3aWR0aCwgZHN0X3kgKyBoZWlnaHQpOworCWVtaXRfdmVy dGV4X25vcm1hbGl6ZWQoaWJiLCBzcmNfeCArIHdpZHRoLCBpbnRlbF9idWZfd2lkdGgoc3JjKSk7 CisJZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChpYmIsIHNyY195ICsgaGVpZ2h0LCBpbnRlbF9idWZf aGVpZ2h0KHNyYykpOwogCi0JZW1pdF92ZXJ0ZXhfMnMoYmF0Y2gsIGRzdF94LCBkc3RfeSArIGhl aWdodCk7Ci0JZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChiYXRjaCwgc3JjX3gsIGlndF9idWZfd2lk dGgoc3JjKSk7Ci0JZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChiYXRjaCwgc3JjX3kgKyBoZWlnaHQs IGlndF9idWZfaGVpZ2h0KHNyYykpOworCWVtaXRfdmVydGV4XzJzKGliYiwgZHN0X3gsIGRzdF95 ICsgaGVpZ2h0KTsKKwllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGliYiwgc3JjX3gsIGludGVsX2J1 Zl93aWR0aChzcmMpKTsKKwllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGliYiwgc3JjX3kgKyBoZWln aHQsIGludGVsX2J1Zl9oZWlnaHQoc3JjKSk7CiAKLQllbWl0X3ZlcnRleF8ycyhiYXRjaCwgZHN0 X3gsIGRzdF95KTsKLQllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGJhdGNoLCBzcmNfeCwgaWd0X2J1 Zl93aWR0aChzcmMpKTsKLQllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGJhdGNoLCBzcmNfeSwgaWd0 X2J1Zl9oZWlnaHQoc3JjKSk7CisJZW1pdF92ZXJ0ZXhfMnMoaWJiLCBkc3RfeCwgZHN0X3kpOwor CWVtaXRfdmVydGV4X25vcm1hbGl6ZWQoaWJiLCBzcmNfeCwgaW50ZWxfYnVmX3dpZHRoKHNyYykp OworCWVtaXRfdmVydGV4X25vcm1hbGl6ZWQoaWJiLCBzcmNfeSwgaW50ZWxfYnVmX2hlaWdodChz cmMpKTsKIAotCW9mZnNldCA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNo LCBzdGFydCk7Ci0JYW5ub3RhdGlvbl9hZGRfc3RhdGUoJmF1Yl9hbm5vdGF0aW9ucywgQVVCX1RS QUNFX1ZFUlRFWF9CVUZGRVIsCi0JCQkgICAgIG9mZnNldCwgMyAqIFZFUlRFWF9TSVpFKTsKIAly ZXR1cm4gb2Zmc2V0OwogfQogCkBAIC0zOTcsMjUgKzI5OCwyNSBAQCBnZW43X2ZpbGxfdmVydGV4 X2J1ZmZlcl9kYXRhKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCiAgKiBwYWNrZWQu CiAgKi8KIHN0YXRpYyB2b2lkCi1nZW42X2VtaXRfdmVydGV4X2VsZW1lbnRzKHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gpIHsKK2dlbjZfZW1pdF92ZXJ0ZXhfZWxlbWVudHMoc3RydWN0 IGludGVsX2JiICppYmIpIHsKIAkvKgogCSAqIFRoZSBWVUUgbGF5b3V0CiAJICogICAgZHdvcmQg MC0zOiBwYWQgKDAsIDAsIDAuIDApCiAJICogICAgZHdvcmQgNC03OiBwb3NpdGlvbiAoeCwgeSwg MCwgMS4wKSwKIAkgKiAgICBkd29yZCA4LTExOiB0ZXh0dXJlIGNvb3JkaW5hdGUgMCAodTAsIHYw LCAwLCAxLjApCiAJICovCi0JT1VUX0JBVENIKEdFTjRfM0RTVEFURV9WRVJURVhfRUxFTUVOVFMg fCAoMyAqIDIgKyAxIC0gMikpOworCWludGVsX2JiX291dChpYmIsIEdFTjRfM0RTVEFURV9WRVJU RVhfRUxFTUVOVFMgfCAoMyAqIDIgKyAxIC0gMikpOwogCiAJLyogRWxlbWVudCBzdGF0ZSAwLiBU aGVzZSBhcmUgNCBkd29yZHMgb2YgMCByZXF1aXJlZCBmb3IgdGhlIFZVRSBmb3JtYXQuCiAJICog V2UgZG9uJ3QgcmVhbGx5IGtub3cgb3IgY2FyZSB3aGF0IHRoZXkgZG8uCiAJICovCi0JT1VUX0JB VENIKDAgPDwgR0VONl9WRTBfVkVSVEVYX0JVRkZFUl9JTkRFWF9TSElGVCB8IEdFTjZfVkUwX1ZB TElEIHwKLQkJICBTVVJGQUNFRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCA8PCBWRTBfRk9STUFU X1NISUZUIHwKLQkJICAwIDw8IFZFMF9PRkZTRVRfU0hJRlQpOyAvKiB3ZSBzcGVjaWZ5IDAsIGJ1 dCBpdCdzIHJlYWxseSBkb2VzIG5vdCBleGlzdCAqLwotCU9VVF9CQVRDSChHRU40X1ZGQ09NUE9O RU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzBfU0hJRlQgfAotCQkgIEdFTjRfVkZDT01Q T05FTlRfU1RPUkVfMCA8PCBWRTFfVkZDT01QT05FTlRfMV9TSElGVCB8Ci0JCSAgR0VONF9WRkNP TVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8yX1NISUZUIHwKLQkJICBHRU40X1ZG Q09NUE9ORU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzNfU0hJRlQpOworCWludGVsX2Ji X291dChpYmIsIDAgPDwgR0VONl9WRTBfVkVSVEVYX0JVRkZFUl9JTkRFWF9TSElGVCB8IEdFTjZf VkUwX1ZBTElEIHwKKwkJICAgICBTVVJGQUNFRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCA8PCBW RTBfRk9STUFUX1NISUZUIHwKKwkJICAgICAwIDw8IFZFMF9PRkZTRVRfU0hJRlQpOyAvKiB3ZSBz cGVjaWZ5IDAsIGJ1dCBpdCdzIHJlYWxseSBkb2VzIG5vdCBleGlzdCAqLworCWludGVsX2JiX291 dChpYmIsIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMCA8PCBWRTFfVkZDT01QT05FTlRfMF9TSElG VCB8CisJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8x X1NISUZUIHwKKwkJICAgICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9O RU5UXzJfU0hJRlQgfAorCQkgICAgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMCA8PCBWRTFfVkZD T01QT05FTlRfM19TSElGVCk7CiAKIAkvKiBFbGVtZW50IHN0YXRlIDEgLSBPdXIgImRlc3RpbmF0 aW9uIiB2ZXJ0aWNlcy4gVGhlc2UgYXJlIHBhc3NlZCBkb3duCiAJICogdGhyb3VnaCB0aGUgcGlw ZWxpbmUsIGFuZCBldmVudHVhbGx5IG1ha2UgaXQgdG8gdGhlIHBpeGVsIHNoYWRlciBhcwpAQCAt NDIzLDI1ICszMjQsMjUgQEAgZ2VuNl9lbWl0X3ZlcnRleF9lbGVtZW50cyhzdHJ1Y3QgaW50ZWxf YmF0Y2hidWZmZXIgKmJhdGNoKSB7CiAJICogc2lnbmVkL3NjYWxlZCBiZWNhdXNlIG9mIGdlbjYg cmVuZGVyY29weS4gSSBzZWUgbm8gcGFydGljdWxhciByZWFzb24KIAkgKiBmb3IgZG9pbmcgdGhp cyB0aG91Z2guCiAJICovCi0JT1VUX0JBVENIKDAgPDwgR0VONl9WRTBfVkVSVEVYX0JVRkZFUl9J TkRFWF9TSElGVCB8IEdFTjZfVkUwX1ZBTElEIHwKLQkJICBTVVJGQUNFRk9STUFUX1IxNkcxNl9T U0NBTEVEIDw8IFZFMF9GT1JNQVRfU0hJRlQgfAotCQkgIDAgPDwgVkUwX09GRlNFVF9TSElGVCk7 IC8qIG9mZnNldHMgdmIgaW4gYnl0ZXMgKi8KLQlPVVRfQkFUQ0goR0VONF9WRkNPTVBPTkVOVF9T VE9SRV9TUkMgPDwgVkUxX1ZGQ09NUE9ORU5UXzBfU0hJRlQgfAotCQkgIEdFTjRfVkZDT01QT05F TlRfU1RPUkVfU1JDIDw8IFZFMV9WRkNPTVBPTkVOVF8xX1NISUZUIHwKLQkJICBHRU40X1ZGQ09N UE9ORU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzJfU0hJRlQgfAotCQkgIEdFTjRfVkZD T01QT05FTlRfU1RPUkVfMV9GTFQgPDwgVkUxX1ZGQ09NUE9ORU5UXzNfU0hJRlQpOworCWludGVs X2JiX291dChpYmIsIDAgPDwgR0VONl9WRTBfVkVSVEVYX0JVRkZFUl9JTkRFWF9TSElGVCB8IEdF TjZfVkUwX1ZBTElEIHwKKwkJICAgICBTVVJGQUNFRk9STUFUX1IxNkcxNl9TU0NBTEVEIDw8IFZF MF9GT1JNQVRfU0hJRlQgfAorCQkgICAgIDAgPDwgVkUwX09GRlNFVF9TSElGVCk7IC8qIG9mZnNl dHMgdmIgaW4gYnl0ZXMgKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU40X1ZGQ09NUE9ORU5UX1NU T1JFX1NSQyA8PCBWRTFfVkZDT01QT05FTlRfMF9TSElGVCB8CisJCSAgICAgR0VONF9WRkNPTVBP TkVOVF9TVE9SRV9TUkMgPDwgVkUxX1ZGQ09NUE9ORU5UXzFfU0hJRlQgfAorCQkgICAgIEdFTjRf VkZDT01QT05FTlRfU1RPUkVfMCA8PCBWRTFfVkZDT01QT05FTlRfMl9TSElGVCB8CisJCSAgICAg R0VONF9WRkNPTVBPTkVOVF9TVE9SRV8xX0ZMVCA8PCBWRTFfVkZDT01QT05FTlRfM19TSElGVCk7 CiAKIAkvKiBFbGVtZW50IHN0YXRlIDIuIExhc3QgYnV0IG5vdCBsZWFzdCB3ZSBzdG9yZSB0aGUg VSxWIGNvbXBvbmVudHMgYXMKIAkgKiBub3JtYWxpemVkIGZsb2F0cy4gVGhlc2Ugd2lsbCBiZSB1 c2VkIGluIHRoZSBwaXhlbCBzaGFkZXIgdG8gc2FtcGxlCiAJICogZnJvbSB0aGUgc291cmNlIGJ1 ZmZlci4KIAkgKi8KLQlPVVRfQkFUQ0goMCA8PCBHRU42X1ZFMF9WRVJURVhfQlVGRkVSX0lOREVY X1NISUZUIHwgR0VONl9WRTBfVkFMSUQgfAotCQkgIFNVUkZBQ0VGT1JNQVRfUjMyRzMyX0ZMT0FU IDw8IFZFMF9GT1JNQVRfU0hJRlQgfAotCQkgIDQgPDwgVkUwX09GRlNFVF9TSElGVCk7CS8qIG9m ZnNldCB2YiBpbiBieXRlcyAqLwotCU9VVF9CQVRDSChHRU40X1ZGQ09NUE9ORU5UX1NUT1JFX1NS QyA8PCBWRTFfVkZDT01QT05FTlRfMF9TSElGVCB8Ci0JCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9S RV9TUkMgPDwgVkUxX1ZGQ09NUE9ORU5UXzFfU0hJRlQgfAotCQkgIEdFTjRfVkZDT01QT05FTlRf U1RPUkVfMCA8PCBWRTFfVkZDT01QT05FTlRfMl9TSElGVCB8Ci0JCSAgR0VONF9WRkNPTVBPTkVO VF9TVE9SRV8xX0ZMVCA8PCBWRTFfVkZDT01QT05FTlRfM19TSElGVCk7CisJaW50ZWxfYmJfb3V0 KGliYiwgMCA8PCBHRU42X1ZFMF9WRVJURVhfQlVGRkVSX0lOREVYX1NISUZUIHwgR0VONl9WRTBf VkFMSUQgfAorCQkgICAgIFNVUkZBQ0VGT1JNQVRfUjMyRzMyX0ZMT0FUIDw8IFZFMF9GT1JNQVRf U0hJRlQgfAorCQkgICAgIDQgPDwgVkUwX09GRlNFVF9TSElGVCk7CS8qIG9mZnNldCB2YiBpbiBi eXRlcyAqLworCWludGVsX2JiX291dChpYmIsIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfU1JDIDw8 IFZFMV9WRkNPTVBPTkVOVF8wX1NISUZUIHwKKwkJICAgICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JF X1NSQyA8PCBWRTFfVkZDT01QT05FTlRfMV9TSElGVCB8CisJCSAgICAgR0VONF9WRkNPTVBPTkVO VF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8yX1NISUZUIHwKKwkJICAgICBHRU40X1ZGQ09N UE9ORU5UX1NUT1JFXzFfRkxUIDw8IFZFMV9WRkNPTVBPTkVOVF8zX1NISUZUKTsKIH0KIAogLyoK QEAgLTQ1MCw0MiArMzUxLDM1IEBAIGdlbjZfZW1pdF92ZXJ0ZXhfZWxlbWVudHMoc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCkgewogICogQGJhdGNoCiAgKiBAb2Zmc2V0IC0gYnl0dyBv ZmZzZXQgd2l0aGluIHRoZSBAYmF0Y2ggd2hlcmUgdGhlIHZlcnRleCBidWZmZXIgc3RhcnRzLgog ICovCi1zdGF0aWMgdm9pZCBnZW43X2VtaXRfdmVydGV4X2J1ZmZlcihzdHJ1Y3QgaW50ZWxfYmF0 Y2hidWZmZXIgKmJhdGNoLAotCQkJCSAgICB1aW50MzJfdCBvZmZzZXQpIHsKLQlPVVRfQkFUQ0go R0VONF8zRFNUQVRFX1ZFUlRFWF9CVUZGRVJTIHwgKDEgKyAoNCAqIDEpIC0gMikpOwotCU9VVF9C QVRDSCgwIDw8IEdFTjZfVkIwX0JVRkZFUl9JTkRFWF9TSElGVCB8IC8qIFZCIDB0aCBpbmRleCAq LwotCQkgIEdFTjhfVkIwX0JVRkZFUl9BRERSX01PRF9FTiB8IC8qIEFkZHJlc3MgTW9kaWZ5IEVu YWJsZSAqLwotCQkgIFZFUlRFWF9TSVpFIDw8IFZCMF9CVUZGRVJfUElUQ0hfU0hJRlQpOwotCU9V VF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9WRVJURVgsIDAsIG9mZnNldCk7Ci0J T1VUX0JBVENIKDMgKiBWRVJURVhfU0laRSk7CitzdGF0aWMgdm9pZCBnZW43X2VtaXRfdmVydGV4 X2J1ZmZlcihzdHJ1Y3QgaW50ZWxfYmIgKmliYiwgdWludDMyX3Qgb2Zmc2V0KQoreworCWludGVs X2JiX291dChpYmIsIEdFTjRfM0RTVEFURV9WRVJURVhfQlVGRkVSUyB8ICgxICsgKDQgKiAxKSAt IDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwIDw8IEdFTjZfVkIwX0JVRkZFUl9JTkRFWF9TSElG VCB8IC8qIFZCIDB0aCBpbmRleCAqLworCQkgICAgIEdFTjhfVkIwX0JVRkZFUl9BRERSX01PRF9F TiB8IC8qIEFkZHJlc3MgTW9kaWZ5IEVuYWJsZSAqLworCQkgICAgIFZFUlRFWF9TSVpFIDw8IFZC MF9CVUZGRVJfUElUQ0hfU0hJRlQpOworCWludGVsX2JiX2VtaXRfcmVsb2MoaWJiLCBpYmItPmhh bmRsZSwKKwkJCSAgICBJOTE1X0dFTV9ET01BSU5fVkVSVEVYLCAwLAorCQkJICAgIG9mZnNldCwg aWJiLT5iYXRjaF9vZmZzZXQpOworCWludGVsX2JiX291dChpYmIsIDMgKiBWRVJURVhfU0laRSk7 CiB9CiAKIHN0YXRpYyB1aW50MzJfdAotZ2VuNl9jcmVhdGVfY2Nfc3RhdGUoc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCkKK2dlbjZfY3JlYXRlX2NjX3N0YXRlKHN0cnVjdCBpbnRlbF9i YiAqaWJiKQogewogCXN0cnVjdCBnZW42X2NvbG9yX2NhbGNfc3RhdGUgKmNjX3N0YXRlOwotCXVp bnQzMl90IG9mZnNldDsKIAotCWNjX3N0YXRlID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9h bGxvYyhiYXRjaCwKLQkJCQkJCSAgIHNpemVvZigqY2Nfc3RhdGUpLCA2NCk7Ci0Jb2Zmc2V0ID0g aW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9vZmZzZXQoYmF0Y2gsIGNjX3N0YXRlKTsKLQlhbm5v dGF0aW9uX2FkZF9zdGF0ZSgmYXViX2Fubm90YXRpb25zLCBBVUJfVFJBQ0VfQ0NfU1RBVEUsCi0J CQkgICAgIG9mZnNldCwgc2l6ZW9mKCpjY19zdGF0ZSkpOworCWNjX3N0YXRlID0gaW50ZWxfYmJf cHRyX2FsaWduKGliYiwgNjQpOwogCi0JcmV0dXJuIG9mZnNldDsKKwlyZXR1cm4gaW50ZWxfYmJf cHRyX2FkZF9yZXR1cm5fcHJldl9vZmZzZXQoaWJiLCBzaXplb2YoKmNjX3N0YXRlKSk7CiB9CiAK IHN0YXRpYyB1aW50MzJfdAotZ2VuOF9jcmVhdGVfYmxlbmRfc3RhdGUoc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCkKK2dlbjhfY3JlYXRlX2JsZW5kX3N0YXRlKHN0cnVjdCBpbnRlbF9i YiAqaWJiKQogewogCXN0cnVjdCBnZW44X2JsZW5kX3N0YXRlICpibGVuZDsKIAlpbnQgaTsKLQl1 aW50MzJfdCBvZmZzZXQ7CiAKLQlibGVuZCA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfYWxs b2MoYmF0Y2gsIHNpemVvZigqYmxlbmQpLCA2NCk7Ci0Jb2Zmc2V0ID0gaW50ZWxfYmF0Y2hidWZm ZXJfc3ViZGF0YV9vZmZzZXQoYmF0Y2gsIGJsZW5kKTsKLQlhbm5vdGF0aW9uX2FkZF9zdGF0ZSgm YXViX2Fubm90YXRpb25zLCBBVUJfVFJBQ0VfQkxFTkRfU1RBVEUsCi0JCQkgICAgIG9mZnNldCwg c2l6ZW9mKCpibGVuZCkpOworCWJsZW5kID0gaW50ZWxfYmJfcHRyX2FsaWduKGliYiwgNjQpOwog CiAJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKIAkJYmxlbmQtPmJzW2ldLmRlc3RfYmxlbmRf ZmFjdG9yID0gR0VONl9CTEVOREZBQ1RPUl9aRVJPOwpAQCAtNDk1LDQ2NiArMzg5LDQ1OCBAQCBn ZW44X2NyZWF0ZV9ibGVuZF9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQog CQlibGVuZC0+YnNbaV0uY29sb3JfYnVmZmVyX2JsZW5kID0gMDsKIAl9CiAKLQlyZXR1cm4gb2Zm c2V0OworCXJldHVybiBpbnRlbF9iYl9wdHJfYWRkX3JldHVybl9wcmV2X29mZnNldChpYmIsIHNp emVvZigqYmxlbmQpKTsKIH0KIAogc3RhdGljIHVpbnQzMl90Ci1nZW42X2NyZWF0ZV9jY192aWV3 cG9ydChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorZ2VuNl9jcmVhdGVfY2Nfdmll d3BvcnQoc3RydWN0IGludGVsX2JiICppYmIpCiB7CiAJc3RydWN0IGdlbjRfY2Nfdmlld3BvcnQg KnZwOwotCXVpbnQzMl90IG9mZnNldDsKIAotCXZwID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0 YV9hbGxvYyhiYXRjaCwgc2l6ZW9mKCp2cCksIDMyKTsKLQlvZmZzZXQgPSBpbnRlbF9iYXRjaGJ1 ZmZlcl9zdWJkYXRhX29mZnNldChiYXRjaCwgdnApOwotCWFubm90YXRpb25fYWRkX3N0YXRlKCZh dWJfYW5ub3RhdGlvbnMsIEFVQl9UUkFDRV9DQ19WUF9TVEFURSwKLQkJCSAgICAgb2Zmc2V0LCBz aXplb2YoKnZwKSk7CisJdnAgPSBpbnRlbF9iYl9wdHJfYWxpZ24oaWJiLCAzMik7CiAKIAkvKiBY WFggSSBkb24ndCB1bmRlcnN0YW5kIHRoaXMgKi8KIAl2cC0+bWluX2RlcHRoID0gLTEuZTM1Owog CXZwLT5tYXhfZGVwdGggPSAxLmUzNTsKIAotCXJldHVybiBvZmZzZXQ7CisJcmV0dXJuIGludGVs X2JiX3B0cl9hZGRfcmV0dXJuX3ByZXZfb2Zmc2V0KGliYiwgc2l6ZW9mKCp2cCkpOwogfQogCiBz dGF0aWMgdWludDMyX3QKLWdlbjdfY3JlYXRlX3NmX2NsaXBfdmlld3BvcnQoc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCkgeworZ2VuN19jcmVhdGVfc2ZfY2xpcF92aWV3cG9ydChzdHJ1 Y3QgaW50ZWxfYmIgKmliYikgewogCS8qIFhYWCB0aGVzZSBhcmUgbGlrZWx5IG5vdCBuZWVkZWQg Ki8KIAlzdHJ1Y3QgZ2VuN19zZl9jbGlwX3ZpZXdwb3J0ICpzY3Zfc3RhdGU7Ci0JdWludDMyX3Qg b2Zmc2V0OwogCi0Jc2N2X3N0YXRlID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9hbGxvYyhi YXRjaCwKLQkJCQkJCSAgICBzaXplb2YoKnNjdl9zdGF0ZSksIDY0KTsKLQlvZmZzZXQgPSBpbnRl bF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX29mZnNldChiYXRjaCwgc2N2X3N0YXRlKTsKLQlhbm5vdGF0 aW9uX2FkZF9zdGF0ZSgmYXViX2Fubm90YXRpb25zLCBBVUJfVFJBQ0VfQ0xJUF9WUF9TVEFURSwK LQkJCSAgICAgb2Zmc2V0LCBzaXplb2YoKnNjdl9zdGF0ZSkpOworCXNjdl9zdGF0ZSA9IGludGVs X2JiX3B0cl9hbGlnbihpYmIsIDY0KTsKIAogCXNjdl9zdGF0ZS0+Z3VhcmRiYW5kLnhtaW4gPSAw OwogCXNjdl9zdGF0ZS0+Z3VhcmRiYW5kLnhtYXggPSAxLjBmOwogCXNjdl9zdGF0ZS0+Z3VhcmRi YW5kLnltaW4gPSAwOwogCXNjdl9zdGF0ZS0+Z3VhcmRiYW5kLnltYXggPSAxLjBmOwogCi0JcmV0 dXJuIG9mZnNldDsKKwlyZXR1cm4gaW50ZWxfYmJfcHRyX2FkZF9yZXR1cm5fcHJldl9vZmZzZXQo aWJiLCBzaXplb2YoKnNjdl9zdGF0ZSkpOwogfQogCiBzdGF0aWMgdWludDMyX3QKLWdlbjZfY3Jl YXRlX3NjaXNzb3JfcmVjdChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorZ2VuNl9j cmVhdGVfc2Npc3Nvcl9yZWN0KHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewogCXN0cnVjdCBnZW42 X3NjaXNzb3JfcmVjdCAqc2Npc3NvcjsKLQl1aW50MzJfdCBvZmZzZXQ7CiAKLQlzY2lzc29yID0g aW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9hbGxvYyhiYXRjaCwgc2l6ZW9mKCpzY2lzc29yKSwg NjQpOwotCW9mZnNldCA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCBz Y2lzc29yKTsKLQlhbm5vdGF0aW9uX2FkZF9zdGF0ZSgmYXViX2Fubm90YXRpb25zLCBBVUJfVFJB Q0VfU0NJU1NPUl9TVEFURSwKLQkJCSAgICAgb2Zmc2V0LCBzaXplb2YoKnNjaXNzb3IpKTsKKwlz Y2lzc29yID0gaW50ZWxfYmJfcHRyX2FsaWduKGliYiwgNjQpOwogCi0JcmV0dXJuIG9mZnNldDsK KwlyZXR1cm4gaW50ZWxfYmJfcHRyX2FkZF9yZXR1cm5fcHJldl9vZmZzZXQoaWJiLCBzaXplb2Yo KnNjaXNzb3IpKTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjhfZW1pdF9zaXAoc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCkgewotCU9VVF9CQVRDSChHRU40X1NUQVRFX1NJUCB8ICgzIC0g MikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7CitnZW44X2VtaXRfc2lwKHN0cnVj dCBpbnRlbF9iYiAqaWJiKSB7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONF9TVEFURV9TSVAgfCAo MyAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsK IH0KIAogc3RhdGljIHZvaWQKLWdlbjdfZW1pdF9wdXNoX2NvbnN0YW50cyhzdHJ1Y3QgaW50ZWxf YmF0Y2hidWZmZXIgKmJhdGNoKSB7Ci0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9QVVNIX0NPTlNU QU5UX0FMTE9DX1ZTKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKEdFTjhfM0RTVEFURV9Q VVNIX0NPTlNUQU5UX0FMTE9DX0hTKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKEdFTjhf M0RTVEFURV9QVVNIX0NPTlNUQU5UX0FMTE9DX0RTKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JB VENIKEdFTjhfM0RTVEFURV9QVVNIX0NPTlNUQU5UX0FMTE9DX0dTKTsKLQlPVVRfQkFUQ0goMCk7 Ci0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9QVVNIX0NPTlNUQU5UX0FMTE9DX1BTKTsKLQlPVVRf QkFUQ0goMCk7CitnZW43X2VtaXRfcHVzaF9jb25zdGFudHMoc3RydWN0IGludGVsX2JiICppYmIp IHsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfUFVTSF9DT05TVEFOVF9BTExPQ19W Uyk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VOOF8zRFNU QVRFX1BVU0hfQ09OU1RBTlRfQUxMT0NfSFMpOworCWludGVsX2JiX291dChpYmIsIDApOworCWlu dGVsX2JiX291dChpYmIsIEdFTjhfM0RTVEFURV9QVVNIX0NPTlNUQU5UX0FMTE9DX0RTKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU44XzNEU1RBVEVfUFVT SF9DT05TVEFOVF9BTExPQ19HUyk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJf b3V0KGliYiwgR0VON18zRFNUQVRFX1BVU0hfQ09OU1RBTlRfQUxMT0NfUFMpOworCWludGVsX2Ji X291dChpYmIsIDApOwogfQogCiBzdGF0aWMgdm9pZAotZ2VuOV9lbWl0X3N0YXRlX2Jhc2VfYWRk cmVzcyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKSB7CitnZW45X2VtaXRfc3RhdGVf YmFzZV9hZGRyZXNzKHN0cnVjdCBpbnRlbF9iYiAqaWJiKSB7CiAKIAkvKiBXYUJpbmRsZXNzU3Vy ZmFjZVN0YXRlTW9kaWZ5RW5hYmxlOnNrbCxieHQgKi8KIAkvKiBUaGUgbGVuZ3RoIGhhcyB0byBi ZSBvbmUgbGVzcyBpZiB3ZSBkb250IG1vZGlmeQogCSAgIGJpbmRsZXNzIHN0YXRlICovCi0JT1VU X0JBVENIKEdFTjRfU1RBVEVfQkFTRV9BRERSRVNTIHwgKDE5IC0gMSAtIDIpKTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCBHRU40X1NUQVRFX0JBU0VfQUREUkVTUyB8ICgxOSAtIDEgLSAyKSk7CiAKIAkv KiBnZW5lcmFsICovCi0JT1VUX0JBVENIKDAgfCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQlPVVRf QkFUQ0goMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCB8IEJBU0VfQUREUkVTU19NT0RJRlkpOwor CWludGVsX2JiX291dChpYmIsIDApOwogCiAJLyogc3RhdGVsZXNzIGRhdGEgcG9ydCAqLwotCU9V VF9CQVRDSCgwIHwgQkFTRV9BRERSRVNTX01PRElGWSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCB8 IEJBU0VfQUREUkVTU19NT0RJRlkpOwogCiAJLyogc3VyZmFjZSAqLwotCU9VVF9SRUxPQyhiYXRj aC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9TQU1QTEVSLCAwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsK KwlpbnRlbF9iYl9lbWl0X3JlbG9jKGliYiwgaWJiLT5oYW5kbGUsCisJCQkgICAgSTkxNV9HRU1f RE9NQUlOX1NBTVBMRVIsIDAsCisJCQkgICAgQkFTRV9BRERSRVNTX01PRElGWSwgaWJiLT5iYXRj aF9vZmZzZXQpOwogCiAJLyogZHluYW1pYyAqLwotCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVf R0VNX0RPTUFJTl9SRU5ERVIgfCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sCi0JCSAgMCwg QkFTRV9BRERSRVNTX01PRElGWSk7CisJaW50ZWxfYmJfZW1pdF9yZWxvYyhpYmIsIGliYi0+aGFu ZGxlLAorCQkJICAgIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIgfCBJOTE1X0dFTV9ET01BSU5fSU5T VFJVQ1RJT04sIDAsCisJCQkgICAgQkFTRV9BRERSRVNTX01PRElGWSwgaWJiLT5iYXRjaF9vZmZz ZXQpOwogCiAJLyogaW5kaXJlY3QgKi8KLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwor CWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOwogCiAJLyogaW5z dHJ1Y3Rpb24gKi8KLQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJV Q1RJT04sIDAsIEJBU0VfQUREUkVTU19NT0RJRlkpOworCWludGVsX2JiX2VtaXRfcmVsb2MoaWJi LCBpYmItPmhhbmRsZSwKKwkJCSAgICBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsCisJ CQkgICAgQkFTRV9BRERSRVNTX01PRElGWSwgaWJiLT5iYXRjaF9vZmZzZXQpOwogCiAJLyogZ2Vu ZXJhbCBzdGF0ZSBidWZmZXIgc2l6ZSAqLwotCU9VVF9CQVRDSCgweGZmZmZmMDAwIHwgMSk7CisJ aW50ZWxfYmJfb3V0KGliYiwgMHhmZmZmZjAwMCB8IDEpOwogCS8qIGR5bmFtaWMgc3RhdGUgYnVm ZmVyIHNpemUgKi8KLQlPVVRfQkFUQ0goMSA8PCAxMiB8IDEpOworCWludGVsX2JiX291dChpYmIs IDEgPDwgMTIgfCAxKTsKIAkvKiBpbmRpcmVjdCBvYmplY3QgYnVmZmVyIHNpemUgKi8KLQlPVVRf QkFUQ0goMHhmZmZmZjAwMCB8IDEpOworCWludGVsX2JiX291dChpYmIsIDB4ZmZmZmYwMDAgfCAx KTsKIAkvKiBpbnRydWN0aW9uIGJ1ZmZlciBzaXplICovCi0JT1VUX0JBVENIKDEgPDwgMTIgfCAx KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAxIDw8IDEyIHwgMSk7CiAKIAkvKiBCaW5kbGVzcyBzdXJm YWNlIHN0YXRlIGJhc2UgYWRkcmVzcyAqLwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7 Ci0JT1VUX0JBVENIKDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChp YmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOwogfQogCiBzdGF0aWMgdm9pZAotZ2VuN19l bWl0X3VyYihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKSB7CitnZW43X2VtaXRfdXJi KHN0cnVjdCBpbnRlbF9iYiAqaWJiKSB7CiAJLyogWFhYOiBNaW4gdmFsaWQgdmFsdWVzIGZyb20g bWVzYSAqLwogCWNvbnN0IGludCB2c19lbnRyaWVzID0gNjQ7CiAJY29uc3QgaW50IHZzX3NpemUg PSAyOwogCWNvbnN0IGludCB2c19zdGFydCA9IDQ7CiAKLQlPVVRfQkFUQ0goR0VON18zRFNUQVRF X1VSQl9WUyk7Ci0JT1VUX0JBVENIKHZzX2VudHJpZXMgfCAoKHZzX3NpemUgLSAxKSA8PCAxNikg fCAodnNfc3RhcnQgPDwgMjUpKTsKLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX1VSQl9HUyk7Ci0J T1VUX0JBVENIKHZzX3N0YXJ0IDw8IDI1KTsKLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX1VSQl9I Uyk7Ci0JT1VUX0JBVENIKHZzX3N0YXJ0IDw8IDI1KTsKLQlPVVRfQkFUQ0goR0VON18zRFNUQVRF X1VSQl9EUyk7Ci0JT1VUX0JBVENIKHZzX3N0YXJ0IDw8IDI1KTsKKwlpbnRlbF9iYl9vdXQoaWJi LCBHRU43XzNEU1RBVEVfVVJCX1ZTKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCB2c19lbnRyaWVzIHwg KCh2c19zaXplIC0gMSkgPDwgMTYpIHwgKHZzX3N0YXJ0IDw8IDI1KSk7CisJaW50ZWxfYmJfb3V0 KGliYiwgR0VON18zRFNUQVRFX1VSQl9HUyk7CisJaW50ZWxfYmJfb3V0KGliYiwgdnNfc3RhcnQg PDwgMjUpOworCWludGVsX2JiX291dChpYmIsIEdFTjdfM0RTVEFURV9VUkJfSFMpOworCWludGVs X2JiX291dChpYmIsIHZzX3N0YXJ0IDw8IDI1KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNE U1RBVEVfVVJCX0RTKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCB2c19zdGFydCA8PCAyNSk7CiB9CiAK IHN0YXRpYyB2b2lkCi1nZW44X2VtaXRfY2Moc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRj aCkgewotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfQkxFTkRfU1RBVEVfUE9JTlRFUlMpOwotCU9V VF9CQVRDSChjYy5ibGVuZF9zdGF0ZSB8IDEpOworZ2VuOF9lbWl0X2NjKHN0cnVjdCBpbnRlbF9i YiAqaWJiKSB7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX0JMRU5EX1NUQVRFX1BP SU5URVJTKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBjYy5ibGVuZF9zdGF0ZSB8IDEpOwogCi0JT1VU X0JBVENIKEdFTjZfM0RTVEFURV9DQ19TVEFURV9QT0lOVEVSUyk7Ci0JT1VUX0JBVENIKGNjLmNj X3N0YXRlIHwgMSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRFX0NDX1NUQVRFX1BP SU5URVJTKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBjYy5jY19zdGF0ZSB8IDEpOwogfQogCiBzdGF0 aWMgdm9pZAotZ2VuOF9lbWl0X211bHRpc2FtcGxlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gpIHsKLQlPVVRfQkFUQ0goR0VOOF8zRFNUQVRFX01VTFRJU0FNUExFIHwgMCk7Ci0JT1VU X0JBVENIKDApOworZ2VuOF9lbWl0X211bHRpc2FtcGxlKHN0cnVjdCBpbnRlbF9iYiAqaWJiKSB7 CisJaW50ZWxfYmJfb3V0KGliYiwgR0VOOF8zRFNUQVRFX01VTFRJU0FNUExFIHwgMCk7CisJaW50 ZWxfYmJfb3V0KGliYiwgMCk7CiAKLQlPVVRfQkFUQ0goR0VONl8zRFNUQVRFX1NBTVBMRV9NQVNL KTsKLQlPVVRfQkFUQ0goMSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRFX1NBTVBM RV9NQVNLKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAxKTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjhf ZW1pdF92cyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKSB7Ci0JT1VUX0JBVENIKEdF TjZfM0RTVEFURV9DT05TVEFOVF9WUyB8ICgxMS0yKSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9C QVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsK LQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFU Q0goMCk7Ci0JT1VUX0JBVENIKDApOwotCi0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9CSU5ESU5H X1RBQkxFX1BPSU5URVJTX1ZTKTsKLQlPVVRfQkFUQ0goMCk7Ci0KLQlPVVRfQkFUQ0goR0VON18z RFNUQVRFX1NBTVBMRVJfU1RBVEVfUE9JTlRFUlNfVlMpOwotCU9VVF9CQVRDSCgwKTsKLQotCU9V VF9CQVRDSChHRU42XzNEU1RBVEVfVlMgfCAoOS0yKSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9C QVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsK LQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKK2dlbjhfZW1p dF92cyhzdHJ1Y3QgaW50ZWxfYmIgKmliYikgeworCWludGVsX2JiX291dChpYmIsIEdFTjZfM0RT VEFURV9DT05TVEFOVF9WUyB8ICgxMS0yKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50 ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0 KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7 CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxf YmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisKKwlpbnRlbF9iYl9vdXQo aWJiLCBHRU43XzNEU1RBVEVfQklORElOR19UQUJMRV9QT0lOVEVSU19WUyk7CisJaW50ZWxfYmJf b3V0KGliYiwgMCk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfU0FNUExFUl9T VEFURV9QT0lOVEVSU19WUyk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisKKwlpbnRlbF9iYl9v dXQoaWJiLCBHRU42XzNEU1RBVEVfVlMgfCAoOS0yKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7 CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxf YmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGli YiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiB9 CiAKIHN0YXRpYyB2b2lkCi1nZW44X2VtaXRfaHMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaCkgewotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfQ09OU1RBTlRfSFMgfCAoMTEtMikpOwot CU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRD SCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlP VVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQotCU9VVF9CQVRD SChHRU43XzNEU1RBVEVfSFMgfCAoOS0yKSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgw KTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRf QkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQotCU9VVF9CQVRDSChH RU43XzNEU1RBVEVfQklORElOR19UQUJMRV9QT0lOVEVSU19IUyk7Ci0JT1VUX0JBVENIKDApOwot Ci0JT1VUX0JBVENIKEdFTjhfM0RTVEFURV9TQU1QTEVSX1NUQVRFX1BPSU5URVJTX0hTKTsKLQlP VVRfQkFUQ0goMCk7CitnZW44X2VtaXRfaHMoc3RydWN0IGludGVsX2JiICppYmIpIHsKKwlpbnRl bF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfQ09OU1RBTlRfSFMgfCAoMTEtMikpOworCWludGVs X2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChp YmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOwor CWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2Ji X291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIs IDApOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX0hTIHwgKDktMikpOworCWlu dGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291 dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDAp OworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVs X2JiX291dChpYmIsIDApOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX0JJTkRJ TkdfVEFCTEVfUE9JTlRFUlNfSFMpOworCWludGVsX2JiX291dChpYmIsIDApOworCisJaW50ZWxf YmJfb3V0KGliYiwgR0VOOF8zRFNUQVRFX1NBTVBMRVJfU1RBVEVfUE9JTlRFUlNfSFMpOworCWlu dGVsX2JiX291dChpYmIsIDApOwogfQogCiBzdGF0aWMgdm9pZAotZ2VuOF9lbWl0X2dzKHN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpIHsKLQlPVVRfQkFUQ0goR0VONl8zRFNUQVRFX0NP TlNUQU5UX0dTIHwgKDExLTIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9V VF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgw KTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRf QkFUQ0goMCk7Ci0KLQlPVVRfQkFUQ0goR0VONl8zRFNUQVRFX0dTIHwgKDEwLTIpKTsKLQlPVVRf QkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7 Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JB VENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfQklORElO R19UQUJMRV9QT0lOVEVSU19HUyk7Ci0JT1VUX0JBVENIKDApOwotCi0JT1VUX0JBVENIKEdFTjdf M0RTVEFURV9TQU1QTEVSX1NUQVRFX1BPSU5URVJTX0dTKTsKLQlPVVRfQkFUQ0goMCk7CitnZW44 X2VtaXRfZ3Moc3RydWN0IGludGVsX2JiICppYmIpIHsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU42 XzNEU1RBVEVfQ09OU1RBTlRfR1MgfCAoMTEtMikpOworCWludGVsX2JiX291dChpYmIsIDApOwor CWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2Ji X291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIs IDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWlu dGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCisJaW50ZWxfYmJf b3V0KGliYiwgR0VONl8zRFNUQVRFX0dTIHwgKDEwLTIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAw KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRl bF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQo aWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKworCWludGVsX2JiX291dChpYmIsIEdFTjdfM0RTVEFU RV9CSU5ESU5HX1RBQkxFX1BPSU5URVJTX0dTKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwor CWludGVsX2JiX291dChpYmIsIEdFTjdfM0RTVEFURV9TQU1QTEVSX1NUQVRFX1BPSU5URVJTX0dT KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjlfZW1pdF9k cyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKSB7Ci0JT1VUX0JBVENIKEdFTjdfM0RT VEFURV9DT05TVEFOVF9EUyB8ICgxMS0yKSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgw KTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRf QkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7 Ci0JT1VUX0JBVENIKDApOwotCi0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9EUyB8ICgxMS0yKSk7 Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JB VENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwot CU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCi0JT1VUX0JB VENIKEdFTjdfM0RTVEFURV9CSU5ESU5HX1RBQkxFX1BPSU5URVJTX0RTKTsKLQlPVVRfQkFUQ0go MCk7Ci0KLQlPVVRfQkFUQ0goR0VOOF8zRFNUQVRFX1NBTVBMRVJfU1RBVEVfUE9JTlRFUlNfRFMp OwotCU9VVF9CQVRDSCgwKTsKK2dlbjlfZW1pdF9kcyhzdHJ1Y3QgaW50ZWxfYmIgKmliYikgewor CWludGVsX2JiX291dChpYmIsIEdFTjdfM0RTVEFURV9DT05TVEFOVF9EUyB8ICgxMS0yKSk7CisJ aW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJf b3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwg MCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50 ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0 KGliYiwgMCk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfRFMgfCAoMTEtMikp OworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVs X2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChp YmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOwor CWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2Ji X291dChpYmIsIDApOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX0JJTkRJTkdf VEFCTEVfUE9JTlRFUlNfRFMpOworCWludGVsX2JiX291dChpYmIsIDApOworCisJaW50ZWxfYmJf b3V0KGliYiwgR0VOOF8zRFNUQVRFX1NBTVBMRVJfU1RBVEVfUE9JTlRFUlNfRFMpOworCWludGVs X2JiX291dChpYmIsIDApOwogfQogCiAKIHN0YXRpYyB2b2lkCi1nZW44X2VtaXRfd21faHpfb3Ao c3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkgewotCU9VVF9CQVRDSChHRU44XzNEU1RB VEVfV01fSFpfT1AgfCAoNS0yKSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlP VVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOworZ2VuOF9lbWl0X3dtX2h6X29wKHN0cnVjdCBp bnRlbF9iYiAqaWJiKSB7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VOOF8zRFNUQVRFX1dNX0haX09Q IHwgKDUtMikpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDAp OworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOwogfQogCiBz dGF0aWMgdm9pZAotZ2VuOF9lbWl0X251bGxfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVy ICpiYXRjaCkgewotCWdlbjhfZW1pdF93bV9oel9vcChiYXRjaCk7Ci0JZ2VuOF9lbWl0X2hzKGJh dGNoKTsKLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX1RFIHwgKDQtMikpOwotCU9VVF9CQVRDSCgw KTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCWdlbjhfZW1pdF9ncyhiYXRjaCk7 Ci0JZ2VuOV9lbWl0X2RzKGJhdGNoKTsKLQlnZW44X2VtaXRfdnMoYmF0Y2gpOworZ2VuOF9lbWl0 X251bGxfc3RhdGUoc3RydWN0IGludGVsX2JiICppYmIpIHsKKwlnZW44X2VtaXRfd21faHpfb3Ao aWJiKTsKKwlnZW44X2VtaXRfaHMoaWJiKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RB VEVfVEUgfCAoNC0yKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGli YiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJZ2VuOF9lbWl0X2dzKGliYik7CisJZ2Vu OV9lbWl0X2RzKGliYik7CisJZ2VuOF9lbWl0X3ZzKGliYik7CiB9CiAKIHN0YXRpYyB2b2lkCi1n ZW43X2VtaXRfY2xpcChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKSB7Ci0JT1VUX0JB VENIKEdFTjZfM0RTVEFURV9DTElQIHwgKDQgLSAyKSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9C QVRDSCgwKTsgLyogIHBhc3MtdGhyb3VnaCAqLwotCU9VVF9CQVRDSCgwKTsKK2dlbjdfZW1pdF9j bGlwKHN0cnVjdCBpbnRlbF9iYiAqaWJiKSB7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNU QVRFX0NMSVAgfCAoNCAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9v dXQoaWJiLCAwKTsgLyogIHBhc3MtdGhyb3VnaCAqLworCWludGVsX2JiX291dChpYmIsIDApOwog fQogCiBzdGF0aWMgdm9pZAotZ2VuOF9lbWl0X3NmKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gpCitnZW44X2VtaXRfc2Yoc3RydWN0IGludGVsX2JiICppYmIpCiB7CiAJaW50IGk7CiAK LQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX1NCRSB8ICg2IC0gMikpOwotCU9VVF9CQVRDSCgxIDw8 IEdFTjdfU0JFX05VTV9PVVRQVVRTX1NISUZUIHwKLQkJICBHRU44X1NCRV9GT1JDRV9VUkJfRU5U UllfUkVBRF9MRU5HVEggfAotCQkgIEdFTjhfU0JFX0ZPUkNFX1VSQl9FTlRSWV9SRUFEX09GRlNF VCB8Ci0JCSAgMSA8PCBHRU43X1NCRV9VUkJfRU5UUllfUkVBRF9MRU5HVEhfU0hJRlQgfAotCQkg IDEgPDwgR0VOOF9TQkVfVVJCX0VOVFJZX1JFQURfT0ZGU0VUX1NISUZUKTsKLQlPVVRfQkFUQ0go MCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSChHRU45X1NCRV9BQ1RJVkVfQ09NUE9ORU5U X1hZWlcgPDwgMCk7Ci0JT1VUX0JBVENIKDApOwotCi0JT1VUX0JBVENIKEdFTjhfM0RTVEFURV9T QkVfU1dJWiB8ICgxMSAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfU0JF IHwgKDYgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMSA8PCBHRU43X1NCRV9OVU1fT1VUUFVU U19TSElGVCB8CisJCSAgICAgR0VOOF9TQkVfRk9SQ0VfVVJCX0VOVFJZX1JFQURfTEVOR1RIIHwK KwkJICAgICBHRU44X1NCRV9GT1JDRV9VUkJfRU5UUllfUkVBRF9PRkZTRVQgfAorCQkgICAgIDEg PDwgR0VON19TQkVfVVJCX0VOVFJZX1JFQURfTEVOR1RIX1NISUZUIHwKKwkJICAgICAxIDw8IEdF TjhfU0JFX1VSQl9FTlRSWV9SRUFEX09GRlNFVF9TSElGVCk7CisJaW50ZWxfYmJfb3V0KGliYiwg MCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VOOV9TQkVf QUNUSVZFX0NPTVBPTkVOVF9YWVpXIDw8IDApOworCWludGVsX2JiX291dChpYmIsIDApOworCisJ aW50ZWxfYmJfb3V0KGliYiwgR0VOOF8zRFNUQVRFX1NCRV9TV0laIHwgKDExIC0gMikpOwogCWZv ciAoaSA9IDA7IGkgPCA4OyBpKyspCi0JCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0J T1VUX0JBVENIKDApOwotCi0JT1VUX0JBVENIKEdFTjhfM0RTVEFURV9SQVNURVIgfCAoNSAtIDIp KTsKLQlPVVRfQkFUQ0goR0VOOF9SQVNURVJfRlJPTlRfV0lORElOR19DQ1cgfCBHRU44X1JBU1RF Ul9DVUxMX05PTkUpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENI KDApOwotCi0JT1VUX0JBVENIKEdFTjZfM0RTVEFURV9TRiB8ICg0IC0gMikpOwotCU9VVF9CQVRD SCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOworCQlpbnRlbF9iYl9vdXQoaWJi LCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwor CWludGVsX2JiX291dChpYmIsIEdFTjhfM0RTVEFURV9SQVNURVIgfCAoNSAtIDIpKTsKKwlpbnRl bF9iYl9vdXQoaWJiLCBHRU44X1JBU1RFUl9GUk9OVF9XSU5ESU5HX0NDVyB8IEdFTjhfUkFTVEVS X0NVTExfTk9ORSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwg MCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU42XzNE U1RBVEVfU0YgfCAoNCAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9v dXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIH0KIAogc3RhdGljIHZvaWQKLWdl bjhfZW1pdF9wcyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBrZXJu ZWwpIHsKK2dlbjhfZW1pdF9wcyhzdHJ1Y3QgaW50ZWxfYmIgKmliYiwgdWludDMyX3Qga2VybmVs KSB7CiAJY29uc3QgaW50IG1heF90aHJlYWRzID0gNjM7CiAKLQlPVVRfQkFUQ0goR0VONl8zRFNU QVRFX1dNIHwgKDIgLSAyKSk7Ci0JT1VUX0JBVENIKC8qIFhYWDogSSBkb24ndCB1bmRlcnN0YW5k IHRoZSBCQVJZQ0VOVFJJQyBzdHVmZiwgYnV0IGl0CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8z RFNUQVRFX1dNIHwgKDIgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgLyogWFhYOiBJIGRvbid0 IHVuZGVyc3RhbmQgdGhlIEJBUllDRU5UUklDIHN0dWZmLCBidXQgaXQKIAkJICAgKiBhcHBlYXJz IHdlIG5lZWQgaXQgdG8gcHV0IG91ciBzZXR1cCBkYXRhIGluIHRoZSBwbGFjZSB3ZQogCQkgICAq IGV4cGVjdCAoZzYsIHNlZSBiZWxvdykgKi8KLQkJICBHRU44XzNEU1RBVEVfUFNfUEVSU1BFQ1RJ VkVfUElYRUxfQkFSWUNFTlRSSUMpOwotCi0JT1VUX0JBVENIKEdFTjZfM0RTVEFURV9DT05TVEFO VF9QUyB8ICgxMS0yKSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFU Q0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0J T1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENI KDApOwotCi0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9QUyB8ICgxMi0yKSk7Ci0JT1VUX0JBVENI KGtlcm5lbCk7Ci0JT1VUX0JBVENIKDApOyAvKiBrZXJuZWwgaGkgKi8KLQlPVVRfQkFUQ0goMSA8 PCBHRU42XzNEU1RBVEVfV01fU0FNUExFUl9DT1VOVF9TSElGVCB8Ci0JCSAgMiA8PCBHRU42XzNE U1RBVEVfV01fQklORElOR19UQUJMRV9FTlRSWV9DT1VOVF9TSElGVCk7Ci0JT1VUX0JBVENIKDAp OyAvKiBzY3JhdGNoIHNwYWNlIHN0dWZmICovCi0JT1VUX0JBVENIKDApOyAvKiBzY3JhdGNoIGhp ICovCi0JT1VUX0JBVENIKChtYXhfdGhyZWFkcyAtIDEpIDw8IEdFTjhfM0RTVEFURV9QU19NQVhf VEhSRUFEU19TSElGVCB8Ci0JCSAgR0VONl8zRFNUQVRFX1dNXzE2X0RJU1BBVENIX0VOQUJMRSk7 Ci0JT1VUX0JBVENIKDYgPDwgR0VONl8zRFNUQVRFX1dNX0RJU1BBVENIX1NUQVJUX0dSRl8wX1NI SUZUKTsKLQlPVVRfQkFUQ0goMCk7IC8vIGtlcm5lbCAxCi0JT1VUX0JBVENIKDApOyAvKiBrZXJu ZWwgMSBoaSAqLwotCU9VVF9CQVRDSCgwKTsgLy8ga2VybmVsIDIKLQlPVVRfQkFUQ0goMCk7IC8q IGtlcm5lbCAyIGhpICovCi0KLQlPVVRfQkFUQ0goR0VOOF8zRFNUQVRFX1BTX0JMRU5EIHwgKDIg LSAyKSk7Ci0JT1VUX0JBVENIKEdFTjhfUFNfQkxFTkRfSEFTX1dSSVRFQUJMRV9SVCk7Ci0KLQlP VVRfQkFUQ0goR0VOOF8zRFNUQVRFX1BTX0VYVFJBIHwgKDIgLSAyKSk7Ci0JT1VUX0JBVENIKEdF TjhfUFNYX1BJWEVMX1NIQURFUl9WQUxJRCB8IEdFTjhfUFNYX0FUVFJJQlVURV9FTkFCTEUpOwor CQkgICAgIEdFTjhfM0RTVEFURV9QU19QRVJTUEVDVElWRV9QSVhFTF9CQVJZQ0VOVFJJQyk7CisK KwlpbnRlbF9iYl9vdXQoaWJiLCBHRU42XzNEU1RBVEVfQ09OU1RBTlRfUFMgfCAoMTEtMikpOwor CWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2Ji X291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIs IDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWlu dGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291 dChpYmIsIDApOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX1BTIHwgKDEyLTIp KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBrZXJuZWwpOworCWludGVsX2JiX291dChpYmIsIDApOyAv KiBrZXJuZWwgaGkgKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCAxIDw8IEdFTjZfM0RTVEFURV9XTV9T QU1QTEVSX0NPVU5UX1NISUZUIHwKKwkJICAgICAyIDw8IEdFTjZfM0RTVEFURV9XTV9CSU5ESU5H X1RBQkxFX0VOVFJZX0NPVU5UX1NISUZUKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsgLyogc2Ny YXRjaCBzcGFjZSBzdHVmZiAqLworCWludGVsX2JiX291dChpYmIsIDApOyAvKiBzY3JhdGNoIGhp ICovCisJaW50ZWxfYmJfb3V0KGliYiwgKG1heF90aHJlYWRzIC0gMSkgPDwgR0VOOF8zRFNUQVRF X1BTX01BWF9USFJFQURTX1NISUZUIHwKKwkJICAgICBHRU42XzNEU1RBVEVfV01fMTZfRElTUEFU Q0hfRU5BQkxFKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCA2IDw8IEdFTjZfM0RTVEFURV9XTV9ESVNQ QVRDSF9TVEFSVF9HUkZfMF9TSElGVCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7IC8vIGtlcm5l bCAxCisJaW50ZWxfYmJfb3V0KGliYiwgMCk7IC8qIGtlcm5lbCAxIGhpICovCisJaW50ZWxfYmJf b3V0KGliYiwgMCk7IC8vIGtlcm5lbCAyCisJaW50ZWxfYmJfb3V0KGliYiwgMCk7IC8qIGtlcm5l bCAyIGhpICovCisKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU44XzNEU1RBVEVfUFNfQkxFTkQgfCAo MiAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU44X1BTX0JMRU5EX0hBU19XUklURUFCTEVf UlQpOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VOOF8zRFNUQVRFX1BTX0VYVFJBIHwgKDIgLSAy KSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VOOF9QU1hfUElYRUxfU0hBREVSX1ZBTElEIHwgR0VO OF9QU1hfQVRUUklCVVRFX0VOQUJMRSk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW45X2VtaXRfZGVw dGgoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2dlbjlfZW1pdF9kZXB0aChzdHJ1 Y3QgaW50ZWxfYmIgKmliYikKIHsKLQlPVVRfQkFUQ0goR0VOOF8zRFNUQVRFX1dNX0RFUFRIX1NU RU5DSUwgfCAoNCAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9C QVRDSCgwKTsKLQotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfREVQVEhfQlVGRkVSIHwgKDgtMikp OwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9C QVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsK LQotCU9VVF9CQVRDSChHRU44XzNEU1RBVEVfSElFUl9ERVBUSF9CVUZGRVIgfCAoNS0yKSk7Ci0J T1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENI KDApOwotCi0JT1VUX0JBVENIKEdFTjhfM0RTVEFURV9TVEVOQ0lMX0JVRkZFUiB8ICg1LTIpKTsK LQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFU Q0goMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VOOF8zRFNUQVRFX1dNX0RFUFRIX1NURU5DSUwg fCAoNCAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAw KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKworCWludGVsX2JiX291dChpYmIsIEdFTjdfM0RT VEFURV9ERVBUSF9CVUZGRVIgfCAoOC0yKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50 ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0 KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7 CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU44XzNEU1RB VEVfSElFUl9ERVBUSF9CVUZGRVIgfCAoNS0yKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJ aW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJf b3V0KGliYiwgMCk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU44XzNEU1RBVEVfU1RFTkNJTF9C VUZGRVIgfCAoNS0yKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGli YiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiB9 CiAKIHN0YXRpYyB2b2lkCi1nZW43X2VtaXRfY2xlYXIoc3RydWN0IGludGVsX2JhdGNoYnVmZmVy ICpiYXRjaCkgewotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfQ0xFQVJfUEFSQU1TIHwgKDMtMikp OwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMSk7IC8vIGNsZWFyIHZhbGlkCitnZW43X2Vt aXRfY2xlYXIoc3RydWN0IGludGVsX2JiICppYmIpIHsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43 XzNEU1RBVEVfQ0xFQVJfUEFSQU1TIHwgKDMtMikpOworCWludGVsX2JiX291dChpYmIsIDApOwor CWludGVsX2JiX291dChpYmIsIDEpOyAvLyBjbGVhciB2YWxpZAogfQogCiBzdGF0aWMgdm9pZAot Z2VuNl9lbWl0X2RyYXdpbmdfcmVjdGFuZ2xlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0 Y2gsIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpkc3QpCitnZW42X2VtaXRfZHJhd2luZ19yZWN0YW5n bGUoc3RydWN0IGludGVsX2JiICppYmIsIGNvbnN0IHN0cnVjdCBpbnRlbF9idWYgKmRzdCkKIHsK LQlPVVRfQkFUQ0goR0VONF8zRFNUQVRFX0RSQVdJTkdfUkVDVEFOR0xFIHwgKDQgLSAyKSk7Ci0J T1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgoaWd0X2J1Zl9oZWlnaHQoZHN0KSAtIDEpIDw8IDE2 IHwgKGlndF9idWZfd2lkdGgoZHN0KSAtIDEpKTsKLQlPVVRfQkFUQ0goMCk7CisJaW50ZWxfYmJf b3V0KGliYiwgR0VONF8zRFNUQVRFX0RSQVdJTkdfUkVDVEFOR0xFIHwgKDQgLSAyKSk7CisJaW50 ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgKGludGVsX2J1Zl9oZWlnaHQo ZHN0KSAtIDEpIDw8IDE2IHwgKGludGVsX2J1Zl93aWR0aChkc3QpIC0gMSkpOworCWludGVsX2Ji X291dChpYmIsIDApOwogfQogCi1zdGF0aWMgdm9pZCBnZW44X2VtaXRfdmZfdG9wb2xvZ3koc3Ry dWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK3N0YXRpYyB2b2lkIGdlbjhfZW1pdF92Zl90 b3BvbG9neShzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKLQlPVVRfQkFUQ0goR0VOOF8zRFNUQVRF X1ZGX1RPUE9MT0dZKTsKLQlPVVRfQkFUQ0goXzNEUFJJTV9SRUNUTElTVCk7CisJaW50ZWxfYmJf b3V0KGliYiwgR0VOOF8zRFNUQVRFX1ZGX1RPUE9MT0dZKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBf M0RQUklNX1JFQ1RMSVNUKTsKIH0KIAogLyogVmVydGV4IGVsZW1lbnRzIE1VU1QgYmUgZGVmaW5l ZCBiZWZvcmUgdGhpcyBhY2NvcmRpbmcgdG8gc3BlYyAqLwotc3RhdGljIHZvaWQgZ2VuOF9lbWl0 X3ByaW1pdGl2ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBvZmZz ZXQpCitzdGF0aWMgdm9pZCBnZW44X2VtaXRfcHJpbWl0aXZlKHN0cnVjdCBpbnRlbF9iYiAqaWJi LCB1aW50MzJfdCBvZmZzZXQpCiB7Ci0JT1VUX0JBVENIKEdFTjhfM0RTVEFURV9WRiB8ICgyIC0g MikpOwotCU9VVF9CQVRDSCgwKTsKLQotCU9VVF9CQVRDSChHRU44XzNEU1RBVEVfVkZfSU5TVEFO Q0lORyB8ICgzIC0gMikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0KLQlPVVRf QkFUQ0goR0VONF8zRFBSSU1JVElWRSB8ICg3LTIpKTsKLQlPVVRfQkFUQ0goMCk7CS8qIGdlbjgr IGlnbm9yZSB0aGUgdG9wb2xvZ3kgdHlwZSBmaWVsZCAqLwotCU9VVF9CQVRDSCgzKTsJLyogdmVy dGV4IGNvdW50ICovCi0JT1VUX0JBVENIKDApOwkvKiAgV2UncmUgc3BlY2lmeWluZyB0aGlzIGlu c3RlYWQgd2l0aCBvZmZzZXQgaW4gR0VONl8zRFNUQVRFX1ZFUlRFWF9CVUZGRVJTICovCi0JT1VU X0JBVENIKDEpOwkvKiBzaW5nbGUgaW5zdGFuY2UgKi8KLQlPVVRfQkFUQ0goMCk7CS8qIHN0YXJ0 IGluc3RhbmNlIGxvY2F0aW9uICovCi0JT1VUX0JBVENIKDApOwkvKiBpbmRleCBidWZmZXIgb2Zm c2V0LCBpZ25vcmVkICovCisJaW50ZWxfYmJfb3V0KGliYiwgR0VOOF8zRFNUQVRFX1ZGIHwgKDIg LSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU44 XzNEU1RBVEVfVkZfSU5TVEFOQ0lORyB8ICgzIC0gMikpOworCWludGVsX2JiX291dChpYmIsIDAp OworCWludGVsX2JiX291dChpYmIsIDApOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VONF8zRFBS SU1JVElWRSB8ICg3LTIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsJLyogZ2VuOCsgaWdub3Jl IHRoZSB0b3BvbG9neSB0eXBlIGZpZWxkICovCisJaW50ZWxfYmJfb3V0KGliYiwgMyk7CS8qIHZl cnRleCBjb3VudCAqLworCWludGVsX2JiX291dChpYmIsIDApOwkvKiAgV2UncmUgc3BlY2lmeWlu ZyB0aGlzIGluc3RlYWQgd2l0aCBvZmZzZXQgaW4gR0VONl8zRFNUQVRFX1ZFUlRFWF9CVUZGRVJT ICovCisJaW50ZWxfYmJfb3V0KGliYiwgMSk7CS8qIHNpbmdsZSBpbnN0YW5jZSAqLworCWludGVs X2JiX291dChpYmIsIDApOwkvKiBzdGFydCBpbnN0YW5jZSBsb2NhdGlvbiAqLworCWludGVsX2Ji X291dChpYmIsIDApOwkvKiBpbmRleCBidWZmZXIgb2Zmc2V0LCBpZ25vcmVkICovCiB9CiAKIC8q IFRoZSBnZW5lcmFsIHJ1bGUgaXMgaWYgaXQncyBuYW1lZCBnZW42IGl0IGlzIGRpcmVjdGx5IGNv cGllZCBmcm9tCkBAIC05OTAsMTY2ICs4NzYsMTU5IEBAIHN0YXRpYyB2b2lkIGdlbjhfZW1pdF9w cmltaXRpdmUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3Qgb2Zmc2V0 CiAjZGVmaW5lIEJBVENIX1NUQVRFX1NQTElUIDIwNDgKIAogc3RhdGljCi12b2lkIF9nZW45X3Jl bmRlcl9jb3B5ZnVuYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJICBkcm1f aW50ZWxfY29udGV4dCAqY29udGV4dCwKLQkJCSAgY29uc3Qgc3RydWN0IGlndF9idWYgKnNyYywg dW5zaWduZWQgc3JjX3gsCi0JCQkgIHVuc2lnbmVkIHNyY195LCB1bnNpZ25lZCB3aWR0aCwgdW5z aWduZWQgaGVpZ2h0LAotCQkJICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0LCB1bnNpZ25lZCBk c3RfeCwKLQkJCSAgdW5zaWduZWQgZHN0X3ksCi0JCQkgIGRybV9pbnRlbF9ibyAqYXV4X3BndGFi bGVfYm8sCi0JCQkgIGNvbnN0IHVpbnQzMl90IHBzX2tlcm5lbFtdWzRdLAotCQkJICB1aW50MzJf dCBwc19rZXJuZWxfc2l6ZSkKK3ZvaWQgX2dlbjlfcmVuZGVyX2NvcHlmdW5jKHN0cnVjdCBpbnRl bF9iYiAqaWJiLAorCQkJICAgdWludDMyX3QgY3R4LAorCQkJICAgc3RydWN0IGludGVsX2J1ZiAq c3JjLAorCQkJICAgdW5zaWduZWQgaW50IHNyY194LCB1bnNpZ25lZCBpbnQgc3JjX3ksCisJCQkg ICB1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQsCisJCQkgICBzdHJ1Y3Qg aW50ZWxfYnVmICpkc3QsCisJCQkgICB1bnNpZ25lZCBpbnQgZHN0X3gsIHVuc2lnbmVkIGludCBk c3RfeSwKKwkJCSAgIHN0cnVjdCBpbnRlbF9idWYgKmF1eF9wZ3RhYmxlX2J1ZiwKKwkJCSAgIGNv bnN0IHVpbnQzMl90IHBzX2tlcm5lbFtdWzRdLAorCQkJICAgdWludDMyX3QgcHNfa2VybmVsX3Np emUpCiB7CiAJdWludDMyX3QgcHNfc2FtcGxlcl9zdGF0ZSwgcHNfa2VybmVsX29mZiwgcHNfYmlu ZGluZ190YWJsZTsKIAl1aW50MzJfdCBzY2lzc29yX3N0YXRlOwogCXVpbnQzMl90IHZlcnRleF9i dWZmZXI7Ci0JdWludDMyX3QgYmF0Y2hfZW5kOwogCXVpbnQzMl90IGF1eF9wZ3RhYmxlX3N0YXRl OwogCiAJaWd0X2Fzc2VydChzcmMtPmJwcCA9PSBkc3QtPmJwcCk7Ci0JaW50ZWxfYmF0Y2hidWZm ZXJfZmx1c2hfd2l0aF9jb250ZXh0KGJhdGNoLCBjb250ZXh0KTsKIAotCWludGVsX2JhdGNoYnVm ZmVyX2FsaWduKGJhdGNoLCA4KTsKKwlpbnRlbF9iYl9mbHVzaF9yZW5kZXJfd2l0aF9jb250ZXh0 KGliYiwgY3R4KTsKIAotCWJhdGNoLT5wdHIgPSAmYmF0Y2gtPmJ1ZmZlcltCQVRDSF9TVEFURV9T UExJVF07CisJaW50ZWxfYmJfYWRkX2ludGVsX2J1ZihpYmIsIGRzdCwgdHJ1ZSk7CisJaW50ZWxf YmJfYWRkX2ludGVsX2J1ZihpYmIsIHNyYywgZmFsc2UpOwogCi0JYW5ub3RhdGlvbl9pbml0KCZh dWJfYW5ub3RhdGlvbnMpOworCWludGVsX2JiX3B0cl9zZXQoaWJiLCBCQVRDSF9TVEFURV9TUExJ VCk7CiAKLQlwc19iaW5kaW5nX3RhYmxlICA9IGdlbjhfYmluZF9zdXJmYWNlcyhiYXRjaCwgc3Jj LCBkc3QpOwotCXBzX3NhbXBsZXJfc3RhdGUgID0gZ2VuOF9jcmVhdGVfc2FtcGxlcihiYXRjaCk7 Ci0JcHNfa2VybmVsX29mZiA9IGdlbjhfZmlsbF9wcyhiYXRjaCwgcHNfa2VybmVsLCBwc19rZXJu ZWxfc2l6ZSk7Ci0JdmVydGV4X2J1ZmZlciA9IGdlbjdfZmlsbF92ZXJ0ZXhfYnVmZmVyX2RhdGEo YmF0Y2gsIHNyYywKKwlwc19iaW5kaW5nX3RhYmxlICA9IGdlbjhfYmluZF9zdXJmYWNlcyhpYmIs IHNyYywgZHN0KTsKKwlwc19zYW1wbGVyX3N0YXRlICA9IGdlbjhfY3JlYXRlX3NhbXBsZXIoaWJi KTsKKwlwc19rZXJuZWxfb2ZmID0gZ2VuOF9maWxsX3BzKGliYiwgcHNfa2VybmVsLCBwc19rZXJu ZWxfc2l6ZSk7CisJdmVydGV4X2J1ZmZlciA9IGdlbjdfZmlsbF92ZXJ0ZXhfYnVmZmVyX2RhdGEo aWJiLCBzcmMsCiAJCQkJCQkgICAgIHNyY194LCBzcmNfeSwKIAkJCQkJCSAgICAgZHN0X3gsIGRz dF95LAogCQkJCQkJICAgICB3aWR0aCwgaGVpZ2h0KTsKLQljYy5jY19zdGF0ZSA9IGdlbjZfY3Jl YXRlX2NjX3N0YXRlKGJhdGNoKTsKLQljYy5ibGVuZF9zdGF0ZSA9IGdlbjhfY3JlYXRlX2JsZW5k X3N0YXRlKGJhdGNoKTsKLQl2aWV3cG9ydC5jY19zdGF0ZSA9IGdlbjZfY3JlYXRlX2NjX3ZpZXdw b3J0KGJhdGNoKTsKLQl2aWV3cG9ydC5zZl9jbGlwX3N0YXRlID0gZ2VuN19jcmVhdGVfc2ZfY2xp cF92aWV3cG9ydChiYXRjaCk7Ci0Jc2Npc3Nvcl9zdGF0ZSA9IGdlbjZfY3JlYXRlX3NjaXNzb3Jf cmVjdChiYXRjaCk7Ci0KLQlhdXhfcGd0YWJsZV9zdGF0ZSA9IGdlbjEyX2NyZWF0ZV9hdXhfcGd0 YWJsZV9zdGF0ZShiYXRjaCwKLQkJCQkJCQkgICBhdXhfcGd0YWJsZV9ibyk7Ci0KLQkvKiBUT0RP OiB0aGVyZWUgaXMgb3RoZXIgc3RhdGUgd2hpY2ggaXNuJ3Qgc2V0dXAgKi8KKwljYy5jY19zdGF0 ZSA9IGdlbjZfY3JlYXRlX2NjX3N0YXRlKGliYik7CisJY2MuYmxlbmRfc3RhdGUgPSBnZW44X2Ny ZWF0ZV9ibGVuZF9zdGF0ZShpYmIpOworCXZpZXdwb3J0LmNjX3N0YXRlID0gZ2VuNl9jcmVhdGVf Y2Nfdmlld3BvcnQoaWJiKTsKKwl2aWV3cG9ydC5zZl9jbGlwX3N0YXRlID0gZ2VuN19jcmVhdGVf c2ZfY2xpcF92aWV3cG9ydChpYmIpOworCXNjaXNzb3Jfc3RhdGUgPSBnZW42X2NyZWF0ZV9zY2lz c29yX3JlY3QoaWJiKTsKKwlhdXhfcGd0YWJsZV9zdGF0ZSA9IGdlbjEyX2NyZWF0ZV9hdXhfcGd0 YWJsZV9zdGF0ZShpYmIsIGF1eF9wZ3RhYmxlX2J1Zik7CiAKLQlhc3NlcnQoYmF0Y2gtPnB0ciA8 ICZiYXRjaC0+YnVmZmVyWzQwOTVdKTsKLQotCWJhdGNoLT5wdHIgPSBiYXRjaC0+YnVmZmVyOwor CS8qIFRPRE86IHRoZXJlIGlzIG90aGVyIHN0YXRlIHdoaWNoIGlzbid0IHNldHVwICovCisJaW50 ZWxfYmJfcHRyX3NldChpYmIsIDApOwogCiAJLyogU3RhcnQgZW1pdHRpbmcgdGhlIGNvbW1hbmRz LiBUaGUgb3JkZXIgcm91Z2hseSBmb2xsb3dzIHRoZSBtZXNhIGJsb3JwCiAJICogb3JkZXIgKi8K LQlPVVRfQkFUQ0goRzRYX1BJUEVMSU5FX1NFTEVDVCB8IFBJUEVMSU5FX1NFTEVDVF8zRCB8Ci0J CQkJR0VOOV9QSVBFTElORV9TRUxFQ1RJT05fTUFTSyk7Ci0KLQlnZW4xMl9lbWl0X2F1eF9wZ3Rh YmxlX3N0YXRlKGJhdGNoLCBhdXhfcGd0YWJsZV9zdGF0ZSwgdHJ1ZSk7Ci0KLQlnZW44X2VtaXRf c2lwKGJhdGNoKTsKLQotCWdlbjdfZW1pdF9wdXNoX2NvbnN0YW50cyhiYXRjaCk7CisJaW50ZWxf YmJfb3V0KGliYiwgRzRYX1BJUEVMSU5FX1NFTEVDVCB8IFBJUEVMSU5FX1NFTEVDVF8zRCB8CisJ CSAgICAgR0VOOV9QSVBFTElORV9TRUxFQ1RJT05fTUFTSyk7CiAKLQlnZW45X2VtaXRfc3RhdGVf YmFzZV9hZGRyZXNzKGJhdGNoKTsKKwlnZW4xMl9lbWl0X2F1eF9wZ3RhYmxlX3N0YXRlKGliYiwg YXV4X3BndGFibGVfc3RhdGUsIHRydWUpOwogCi0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9WSUVX UE9SVF9TVEFURV9QT0lOVEVSU19DQyk7Ci0JT1VUX0JBVENIKHZpZXdwb3J0LmNjX3N0YXRlKTsK LQlPVVRfQkFUQ0goR0VOOF8zRFNUQVRFX1ZJRVdQT1JUX1NUQVRFX1BPSU5URVJTX1NGX0NMSVAp OwotCU9VVF9CQVRDSCh2aWV3cG9ydC5zZl9jbGlwX3N0YXRlKTsKKwlnZW44X2VtaXRfc2lwKGli Yik7CiAKLQlnZW43X2VtaXRfdXJiKGJhdGNoKTsKKwlnZW43X2VtaXRfcHVzaF9jb25zdGFudHMo aWJiKTsKIAotCWdlbjhfZW1pdF9jYyhiYXRjaCk7CisJZ2VuOV9lbWl0X3N0YXRlX2Jhc2VfYWRk cmVzcyhpYmIpOwogCi0JZ2VuOF9lbWl0X211bHRpc2FtcGxlKGJhdGNoKTsKKwlpbnRlbF9iYl9v dXQoaWJiLCBHRU43XzNEU1RBVEVfVklFV1BPUlRfU1RBVEVfUE9JTlRFUlNfQ0MpOworCWludGVs X2JiX291dChpYmIsIHZpZXdwb3J0LmNjX3N0YXRlKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU44 XzNEU1RBVEVfVklFV1BPUlRfU1RBVEVfUE9JTlRFUlNfU0ZfQ0xJUCk7CisJaW50ZWxfYmJfb3V0 KGliYiwgdmlld3BvcnQuc2ZfY2xpcF9zdGF0ZSk7CiAKLQlnZW44X2VtaXRfbnVsbF9zdGF0ZShi YXRjaCk7CisJZ2VuN19lbWl0X3VyYihpYmIpOwogCi0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9T VFJFQU1PVVQgfCAoNSAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9V VF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7CisJZ2VuOF9lbWl0X2NjKGliYik7CiAKLQlnZW43 X2VtaXRfY2xpcChiYXRjaCk7CisJZ2VuOF9lbWl0X211bHRpc2FtcGxlKGliYik7CiAKLQlnZW44 X2VtaXRfc2YoYmF0Y2gpOworCWdlbjhfZW1pdF9udWxsX3N0YXRlKGliYik7CiAKLQlnZW44X2Vt aXRfcHMoYmF0Y2gsIHBzX2tlcm5lbF9vZmYpOworCWludGVsX2JiX291dChpYmIsIEdFTjdfM0RT VEFURV9TVFJFQU1PVVQgfCAoNSAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRl bF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQo aWJiLCAwKTsKIAotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfQklORElOR19UQUJMRV9QT0lOVEVS U19QUyk7Ci0JT1VUX0JBVENIKHBzX2JpbmRpbmdfdGFibGUpOworCWdlbjdfZW1pdF9jbGlwKGli Yik7CiAKLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX1NBTVBMRVJfU1RBVEVfUE9JTlRFUlNfUFMp OwotCU9VVF9CQVRDSChwc19zYW1wbGVyX3N0YXRlKTsKKwlnZW44X2VtaXRfc2YoaWJiKTsKIAot CU9VVF9CQVRDSChHRU44XzNEU1RBVEVfU0NJU1NPUl9TVEFURV9QT0lOVEVSUyk7Ci0JT1VUX0JB VENIKHNjaXNzb3Jfc3RhdGUpOworCWdlbjhfZW1pdF9wcyhpYmIsIHBzX2tlcm5lbF9vZmYpOwog Ci0JZ2VuOV9lbWl0X2RlcHRoKGJhdGNoKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RB VEVfQklORElOR19UQUJMRV9QT0lOVEVSU19QUyk7CisJaW50ZWxfYmJfb3V0KGliYiwgcHNfYmlu ZGluZ190YWJsZSk7CiAKLQlnZW43X2VtaXRfY2xlYXIoYmF0Y2gpOworCWludGVsX2JiX291dChp YmIsIEdFTjdfM0RTVEFURV9TQU1QTEVSX1NUQVRFX1BPSU5URVJTX1BTKTsKKwlpbnRlbF9iYl9v dXQoaWJiLCBwc19zYW1wbGVyX3N0YXRlKTsKIAotCWdlbjZfZW1pdF9kcmF3aW5nX3JlY3Rhbmds ZShiYXRjaCwgZHN0KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU44XzNEU1RBVEVfU0NJU1NPUl9T VEFURV9QT0lOVEVSUyk7CisJaW50ZWxfYmJfb3V0KGliYiwgc2Npc3Nvcl9zdGF0ZSk7CiAKLQln ZW43X2VtaXRfdmVydGV4X2J1ZmZlcihiYXRjaCwgdmVydGV4X2J1ZmZlcik7Ci0JZ2VuNl9lbWl0 X3ZlcnRleF9lbGVtZW50cyhiYXRjaCk7CisJZ2VuOV9lbWl0X2RlcHRoKGliYik7CiAKLQlnZW44 X2VtaXRfdmZfdG9wb2xvZ3koYmF0Y2gpOwotCWdlbjhfZW1pdF9wcmltaXRpdmUoYmF0Y2gsIHZl cnRleF9idWZmZXIpOworCWdlbjdfZW1pdF9jbGVhcihpYmIpOwogCi0JT1VUX0JBVENIKE1JX0JB VENIX0JVRkZFUl9FTkQpOworCWdlbjZfZW1pdF9kcmF3aW5nX3JlY3RhbmdsZShpYmIsIGRzdCk7 CiAKLQliYXRjaF9lbmQgPSBpbnRlbF9iYXRjaGJ1ZmZlcl9hbGlnbihiYXRjaCwgOCk7Ci0JYXNz ZXJ0KGJhdGNoX2VuZCA8IEJBVENIX1NUQVRFX1NQTElUKTsKLQlhbm5vdGF0aW9uX2FkZF9iYXRj aCgmYXViX2Fubm90YXRpb25zLCBiYXRjaF9lbmQpOworCWdlbjdfZW1pdF92ZXJ0ZXhfYnVmZmVy KGliYiwgdmVydGV4X2J1ZmZlcik7CisJZ2VuNl9lbWl0X3ZlcnRleF9lbGVtZW50cyhpYmIpOwog Ci0JZHVtcF9iYXRjaChiYXRjaCk7CisJZ2VuOF9lbWl0X3ZmX3RvcG9sb2d5KGliYik7CisJZ2Vu OF9lbWl0X3ByaW1pdGl2ZShpYmIsIHZlcnRleF9idWZmZXIpOwogCi0JYW5ub3RhdGlvbl9mbHVz aCgmYXViX2Fubm90YXRpb25zLCBiYXRjaCk7Ci0KLQlnZW42X3JlbmRlcl9mbHVzaChiYXRjaCwg Y29udGV4dCwgYmF0Y2hfZW5kKTsKLQlpbnRlbF9iYXRjaGJ1ZmZlcl9yZXNldChiYXRjaCk7CisJ aW50ZWxfYmJfZW1pdF9iYmUoaWJiKTsKKwlpbnRlbF9iYl9leGVjX3dpdGhfY29udGV4dChpYmIs IGludGVsX2JiX29mZnNldChpYmIpLCBjdHgsCisJCQkJICAgSTkxNV9FWEVDX1JFTkRFUiB8IEk5 MTVfRVhFQ19OT19SRUxPQywKKwkJCQkgICBmYWxzZSk7CisJZHVtcF9iYXRjaChpYmIpOworCWlu dGVsX2JiX3Jlc2V0KGliYiwgZmFsc2UpOwogfQogCi12b2lkIGdlbjlfcmVuZGVyX2NvcHlmdW5j KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCQkgIGRybV9pbnRlbF9jb250ZXh0 ICpjb250ZXh0LAotCQkJICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqc3JjLCB1bnNpZ25lZCBzcmNf eCwgdW5zaWduZWQgc3JjX3ksCi0JCQkgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQs Ci0JCQkgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpkc3QsIHVuc2lnbmVkIGRzdF94LCB1bnNpZ25l ZCBkc3RfeSkKK3ZvaWQgZ2VuOV9yZW5kZXJfY29weWZ1bmMoc3RydWN0IGludGVsX2JiICppYmIs CisJCQkgIHVpbnQzMl90IGN0eCwKKwkJCSAgc3RydWN0IGludGVsX2J1ZiAqc3JjLAorCQkJICB1 bnNpZ25lZCBpbnQgc3JjX3gsIHVuc2lnbmVkIGludCBzcmNfeSwKKwkJCSAgdW5zaWduZWQgaW50 IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0LAorCQkJICBzdHJ1Y3QgaW50ZWxfYnVmICpkc3Qs CisJCQkgIHVuc2lnbmVkIGludCBkc3RfeCwgdW5zaWduZWQgaW50IGRzdF95KQogCiB7Ci0JX2dl bjlfcmVuZGVyX2NvcHlmdW5jKGJhdGNoLCBjb250ZXh0LCBzcmMsIHNyY194LCBzcmNfeSwKKwlf Z2VuOV9yZW5kZXJfY29weWZ1bmMoaWJiLCBjdHgsIHNyYywgc3JjX3gsIHNyY195LAogCQkJICB3 aWR0aCwgaGVpZ2h0LCBkc3QsIGRzdF94LCBkc3RfeSwgTlVMTCwKIAkJCSAgcHNfa2VybmVsX2dl bjksIHNpemVvZihwc19rZXJuZWxfZ2VuOSkpOwogfQogCi12b2lkIGdlbjExX3JlbmRlcl9jb3B5 ZnVuYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJICBkcm1faW50ZWxfY29u dGV4dCAqY29udGV4dCwKLQkJCSAgY29uc3Qgc3RydWN0IGlndF9idWYgKnNyYywgdW5zaWduZWQg c3JjX3gsIHVuc2lnbmVkIHNyY195LAotCQkJICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVp Z2h0LAotCQkJICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0LCB1bnNpZ25lZCBkc3RfeCwgdW5z aWduZWQgZHN0X3kpCi0KK3ZvaWQgZ2VuMTFfcmVuZGVyX2NvcHlmdW5jKHN0cnVjdCBpbnRlbF9i YiAqaWJiLAorCQkJICAgdWludDMyX3QgY3R4LAorCQkJICAgc3RydWN0IGludGVsX2J1ZiAqc3Jj LAorCQkJICAgdW5zaWduZWQgaW50IHNyY194LCB1bnNpZ25lZCBpbnQgc3JjX3ksCisJCQkgICB1 bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQsCisJCQkgICBzdHJ1Y3QgaW50 ZWxfYnVmICpkc3QsCisJCQkgICB1bnNpZ25lZCBpbnQgZHN0X3gsIHVuc2lnbmVkIGludCBkc3Rf eSkKIHsKLQlfZ2VuOV9yZW5kZXJfY29weWZ1bmMoYmF0Y2gsIGNvbnRleHQsIHNyYywgc3JjX3gs IHNyY195LAorCV9nZW45X3JlbmRlcl9jb3B5ZnVuYyhpYmIsIGN0eCwgc3JjLCBzcmNfeCwgc3Jj X3ksCiAJCQkgIHdpZHRoLCBoZWlnaHQsIGRzdCwgZHN0X3gsIGRzdF95LCBOVUxMLAogCQkJICBw c19rZXJuZWxfZ2VuMTEsIHNpemVvZihwc19rZXJuZWxfZ2VuMTEpKTsKIH0KIAotdm9pZCBnZW4x Ml9yZW5kZXJfY29weWZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCSAg IGRybV9pbnRlbF9jb250ZXh0ICpjb250ZXh0LAotCQkJICAgY29uc3Qgc3RydWN0IGlndF9idWYg KnNyYywgdW5zaWduZWQgc3JjX3gsIHVuc2lnbmVkIHNyY195LAotCQkJICAgdW5zaWduZWQgd2lk dGgsIHVuc2lnbmVkIGhlaWdodCwKLQkJCSAgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpkc3QsIHVu c2lnbmVkIGRzdF94LCB1bnNpZ25lZCBkc3RfeSkKLQordm9pZCBnZW4xMl9yZW5kZXJfY29weWZ1 bmMoc3RydWN0IGludGVsX2JiICppYmIsCisJCQkgICB1aW50MzJfdCBjdHgsCisJCQkgICBzdHJ1 Y3QgaW50ZWxfYnVmICpzcmMsCisJCQkgICB1bnNpZ25lZCBpbnQgc3JjX3gsIHVuc2lnbmVkIGlu dCBzcmNfeSwKKwkJCSAgIHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdodCwK KwkJCSAgIHN0cnVjdCBpbnRlbF9idWYgKmRzdCwKKwkJCSAgIHVuc2lnbmVkIGludCBkc3RfeCwg dW5zaWduZWQgaW50IGRzdF95KQogewogCXN0cnVjdCBhdXhfcGd0YWJsZV9pbmZvIHBndGFibGVf aW5mbyA9IHsgfTsKIAotCWdlbjEyX2F1eF9wZ3RhYmxlX2luaXQoJnBndGFibGVfaW5mbywgYmF0 Y2gtPmJ1Zm1nciwgc3JjLCBkc3QpOworCWdlbjEyX2F1eF9wZ3RhYmxlX2luaXQoJnBndGFibGVf aW5mbywgaWJiLCBzcmMsIGRzdCk7CiAKLQlfZ2VuOV9yZW5kZXJfY29weWZ1bmMoYmF0Y2gsIGNv bnRleHQsIHNyYywgc3JjX3gsIHNyY195LAorCV9nZW45X3JlbmRlcl9jb3B5ZnVuYyhpYmIsIGN0 eCwgc3JjLCBzcmNfeCwgc3JjX3ksCiAJCQkgIHdpZHRoLCBoZWlnaHQsIGRzdCwgZHN0X3gsIGRz dF95LAotCQkJICBwZ3RhYmxlX2luZm8ucGd0YWJsZV9ibywKKwkJCSAgcGd0YWJsZV9pbmZvLnBn dGFibGVfYnVmLAogCQkJICBnZW4xMl9yZW5kZXJfY29weSwKIAkJCSAgc2l6ZW9mKGdlbjEyX3Jl bmRlcl9jb3B5KSk7CiAKLQlnZW4xMl9hdXhfcGd0YWJsZV9jbGVhbnVwKCZwZ3RhYmxlX2luZm8p OworCWdlbjEyX2F1eF9wZ3RhYmxlX2NsZWFudXAoaWJiLCAmcGd0YWJsZV9pbmZvKTsKIH0KZGlm ZiAtLWdpdCBhL2xpYi9yZW5kZXJjb3B5X2k4MzAuYyBiL2xpYi9yZW5kZXJjb3B5X2k4MzAuYwpp bmRleCBjYTgxNTEyMi4uZTc1NTcwNmUgMTAwNjQ0Ci0tLSBhL2xpYi9yZW5kZXJjb3B5X2k4MzAu YworKysgYi9saWIvcmVuZGVyY29weV9pODMwLmMKQEAgLTExLDcgKzExLDcgQEAKICNpbmNsdWRl ICJkcm0uaCIKICNpbmNsdWRlICJpOTE1X2RybS5oIgogI2luY2x1ZGUgImRybXRlc3QuaCIKLSNp bmNsdWRlICJpbnRlbF9idWZtZ3IuaCIKKyNpbmNsdWRlICJpbnRlbF9idWZvcHMuaCIKICNpbmNs dWRlICJpbnRlbF9iYXRjaGJ1ZmZlci5oIgogI2luY2x1ZGUgImludGVsX2lvLmgiCiAKQEAgLTcy LDc1ICs3Miw3NSBAQAogI2RlZmluZSBUQjBBX0FSRzFfU0VMX1RFWEVMMwkJKDkgPDwgNikKIAog Ci1zdGF0aWMgdm9pZCBnZW4yX2VtaXRfaW52YXJpYW50KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZl ciAqYmF0Y2gpCitzdGF0aWMgdm9pZCBnZW4yX2VtaXRfaW52YXJpYW50KHN0cnVjdCBpbnRlbF9i YiAqaWJiKQogewogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQlPVVRf QkFUQ0goXzNEU1RBVEVfTUFQX0NVQkUgfCBNQVBfVU5JVChpKSk7Ci0JCU9VVF9CQVRDSChfM0RT VEFURV9NQVBfVEVYX1NUUkVBTV9DTUQgfCBNQVBfVU5JVChpKSB8Ci0JCQkgIERJU0FCTEVfVEVY X1NUUkVBTV9CVU1QIHwKLQkJCSAgRU5BQkxFX1RFWF9TVFJFQU1fQ09PUkRfU0VUIHwgVEVYX1NU UkVBTV9DT09SRF9TRVQoaSkgfAotCQkJICBFTkFCTEVfVEVYX1NUUkVBTV9NQVBfSURYIHwgVEVY X1NUUkVBTV9NQVBfSURYKGkpKTsKLQkJT1VUX0JBVENIKF8zRFNUQVRFX01BUF9DT09SRF9UUkFO U0ZPUk0pOwotCQlPVVRfQkFUQ0goRElTQUJMRV9URVhfVFJBTlNGT1JNIHwgVEVYVFVSRV9TRVQo aSkpOworCQlpbnRlbF9iYl9vdXQoaWJiLCBfM0RTVEFURV9NQVBfQ1VCRSB8IE1BUF9VTklUKGkp KTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgXzNEU1RBVEVfTUFQX1RFWF9TVFJFQU1fQ01EIHwgTUFQ X1VOSVQoaSkgfAorCQkJICAgICBESVNBQkxFX1RFWF9TVFJFQU1fQlVNUCB8CisJCQkgICAgIEVO QUJMRV9URVhfU1RSRUFNX0NPT1JEX1NFVCB8IFRFWF9TVFJFQU1fQ09PUkRfU0VUKGkpIHwKKwkJ CSAgICAgRU5BQkxFX1RFWF9TVFJFQU1fTUFQX0lEWCB8IFRFWF9TVFJFQU1fTUFQX0lEWChpKSk7 CisJCWludGVsX2JiX291dChpYmIsIF8zRFNUQVRFX01BUF9DT09SRF9UUkFOU0ZPUk0pOworCQlp bnRlbF9iYl9vdXQoaWJiLCBESVNBQkxFX1RFWF9UUkFOU0ZPUk0gfCBURVhUVVJFX1NFVChpKSk7 CiAJfQogCi0JT1VUX0JBVENIKF8zRFNUQVRFX01BUF9DT09SRF9TRVRCSU5EX0NNRCk7Ci0JT1VU X0JBVENIKFRFWEJJTkRfU0VUMyhURVhDT09SRFNSQ19WVFhTRVRfMykgfAotCQkgIFRFWEJJTkRf U0VUMihURVhDT09SRFNSQ19WVFhTRVRfMikgfAotCQkgIFRFWEJJTkRfU0VUMShURVhDT09SRFNS Q19WVFhTRVRfMSkgfAotCQkgIFRFWEJJTkRfU0VUMChURVhDT09SRFNSQ19WVFhTRVRfMCkpOwot Ci0JT1VUX0JBVENIKF8zRFNUQVRFX1NDSVNTT1JfRU5BQkxFX0NNRCB8IERJU0FCTEVfU0NJU1NP Ul9SRUNUKTsKLQotCU9VVF9CQVRDSChfM0RTVEFURV9WRVJURVhfVFJBTlNGT1JNKTsKLQlPVVRf QkFUQ0goRElTQUJMRV9WSUVXUE9SVF9UUkFOU0ZPUk0gfCBESVNBQkxFX1BFUlNQRUNUSVZFX0RJ VklERSk7Ci0KLQlPVVRfQkFUQ0goXzNEU1RBVEVfV19TVEFURV9DTUQpOwotCU9VVF9CQVRDSChN QUdJQ19XX1NUQVRFX0RXT1JEMSk7Ci0JT1VUX0JBVENIKDB4M2Y4MDAwMDAgLyogMS4wIGluIElF RUUgZmxvYXQgKi8gKTsKLQotCU9VVF9CQVRDSChfM0RTVEFURV9JTkRQVF9BTFBIQV9CTEVORF9D TUQgfAotCQkgIERJU0FCTEVfSU5EUFRfQUxQSEFfQkxFTkQgfAotCQkgIEVOQUJMRV9BTFBIQV9C TEVOREZVTkMgfCBBQkxFTkRGVU5DX0FERCk7Ci0KLQlPVVRfQkFUQ0goXzNEU1RBVEVfQ09OU1Rf QkxFTkRfQ09MT1JfQ01EKTsKLQlPVVRfQkFUQ0goMCk7Ci0KLQlPVVRfQkFUQ0goXzNEU1RBVEVf TU9ERVNfMV9DTUQgfAotCQkgIEVOQUJMRV9DT0xSX0JMTkRfRlVOQyB8IEJMRU5ERlVOQ19BREQg fAotCQkgIEVOQUJMRV9TUkNfQkxORF9GQUNUT1IgfCBTUkNfQkxORF9GQUNUKEJMRU5ERkFDVE9S X09ORSkgfAotCQkgIEVOQUJMRV9EU1RfQkxORF9GQUNUT1IgfCBEU1RfQkxORF9GQUNUKEJMRU5E RkFDVE9SX1pFUk8pKTsKLQotCU9VVF9CQVRDSChfM0RTVEFURV9FTkFCTEVTXzFfQ01EIHwKLQkJ ICBESVNBQkxFX0xPR0lDX09QIHwKLQkJICBESVNBQkxFX1NURU5DSUxfVEVTVCB8Ci0JCSAgRElT QUJMRV9ERVBUSF9CSUFTIHwKLQkJICBESVNBQkxFX1NQRUNfQUREIHwKLQkJICBESVNBQkxFX0ZP RyB8Ci0JCSAgRElTQUJMRV9BTFBIQV9URVNUIHwKLQkJICBESVNBQkxFX0RFUFRIX1RFU1QgfAot CQkgIEVOQUJMRV9DT0xPUl9CTEVORCk7Ci0KLQlPVVRfQkFUQ0goXzNEU1RBVEVfRU5BQkxFU18y X0NNRCB8Ci0JCSAgRElTQUJMRV9TVEVOQ0lMX1dSSVRFIHwKLQkJICBESVNBQkxFX0RJVEhFUiB8 Ci0JCSAgRElTQUJMRV9ERVBUSF9XUklURSB8Ci0JCSAgRU5BQkxFX0NPTE9SX01BU0sgfAotCQkg IEVOQUJMRV9DT0xPUl9XUklURSB8Ci0JCSAgRU5BQkxFX1RFWF9DQUNIRSk7CisJaW50ZWxfYmJf b3V0KGliYiwgXzNEU1RBVEVfTUFQX0NPT1JEX1NFVEJJTkRfQ01EKTsKKwlpbnRlbF9iYl9vdXQo aWJiLCBURVhCSU5EX1NFVDMoVEVYQ09PUkRTUkNfVlRYU0VUXzMpIHwKKwkJICAgICBURVhCSU5E X1NFVDIoVEVYQ09PUkRTUkNfVlRYU0VUXzIpIHwKKwkJICAgICBURVhCSU5EX1NFVDEoVEVYQ09P UkRTUkNfVlRYU0VUXzEpIHwKKwkJICAgICBURVhCSU5EX1NFVDAoVEVYQ09PUkRTUkNfVlRYU0VU XzApKTsKKworCWludGVsX2JiX291dChpYmIsIF8zRFNUQVRFX1NDSVNTT1JfRU5BQkxFX0NNRCB8 IERJU0FCTEVfU0NJU1NPUl9SRUNUKTsKKworCWludGVsX2JiX291dChpYmIsIF8zRFNUQVRFX1ZF UlRFWF9UUkFOU0ZPUk0pOworCWludGVsX2JiX291dChpYmIsIERJU0FCTEVfVklFV1BPUlRfVFJB TlNGT1JNIHwgRElTQUJMRV9QRVJTUEVDVElWRV9ESVZJREUpOworCisJaW50ZWxfYmJfb3V0KGli YiwgXzNEU1RBVEVfV19TVEFURV9DTUQpOworCWludGVsX2JiX291dChpYmIsIE1BR0lDX1dfU1RB VEVfRFdPUkQxKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAweDNmODAwMDAwIC8qIDEuMCBpbiBJRUVF IGZsb2F0ICovKTsKKworCWludGVsX2JiX291dChpYmIsIF8zRFNUQVRFX0lORFBUX0FMUEhBX0JM RU5EX0NNRCB8CisJCSAgICAgRElTQUJMRV9JTkRQVF9BTFBIQV9CTEVORCB8CisJCSAgICAgRU5B QkxFX0FMUEhBX0JMRU5ERlVOQyB8IEFCTEVOREZVTkNfQUREKTsKKworCWludGVsX2JiX291dChp YmIsIF8zRFNUQVRFX0NPTlNUX0JMRU5EX0NPTE9SX0NNRCk7CisJaW50ZWxfYmJfb3V0KGliYiwg MCk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBfM0RTVEFURV9NT0RFU18xX0NNRCB8CisJCSAgICAg RU5BQkxFX0NPTFJfQkxORF9GVU5DIHwgQkxFTkRGVU5DX0FERCB8CisJCSAgICAgRU5BQkxFX1NS Q19CTE5EX0ZBQ1RPUiB8IFNSQ19CTE5EX0ZBQ1QoQkxFTkRGQUNUT1JfT05FKSB8CisJCSAgICAg RU5BQkxFX0RTVF9CTE5EX0ZBQ1RPUiB8IERTVF9CTE5EX0ZBQ1QoQkxFTkRGQUNUT1JfWkVSTykp OworCisJaW50ZWxfYmJfb3V0KGliYiwgXzNEU1RBVEVfRU5BQkxFU18xX0NNRCB8CisJCSAgICAg RElTQUJMRV9MT0dJQ19PUCB8CisJCSAgICAgRElTQUJMRV9TVEVOQ0lMX1RFU1QgfAorCQkgICAg IERJU0FCTEVfREVQVEhfQklBUyB8CisJCSAgICAgRElTQUJMRV9TUEVDX0FERCB8CisJCSAgICAg RElTQUJMRV9GT0cgfAorCQkgICAgIERJU0FCTEVfQUxQSEFfVEVTVCB8CisJCSAgICAgRElTQUJM RV9ERVBUSF9URVNUIHwKKwkJICAgICBFTkFCTEVfQ09MT1JfQkxFTkQpOworCisJaW50ZWxfYmJf b3V0KGliYiwgXzNEU1RBVEVfRU5BQkxFU18yX0NNRCB8CisJCSAgICAgRElTQUJMRV9TVEVOQ0lM X1dSSVRFIHwKKwkJICAgICBESVNBQkxFX0RJVEhFUiB8CisJCSAgICAgRElTQUJMRV9ERVBUSF9X UklURSB8CisJCSAgICAgRU5BQkxFX0NPTE9SX01BU0sgfAorCQkgICAgIEVOQUJMRV9DT0xPUl9X UklURSB8CisJCSAgICAgRU5BQkxFX1RFWF9DQUNIRSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdlbjJf ZW1pdF90YXJnZXQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCSAgICAgY29u c3Qgc3RydWN0IGlndF9idWYgKmRzdCkKK3N0YXRpYyB2b2lkIGdlbjJfZW1pdF90YXJnZXQoc3Ry dWN0IGludGVsX2JiICppYmIsCisJCQkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9idWYgKmRzdCkK IHsKIAl1aW50MzJfdCB0aWxpbmc7CiAJdWludDMyX3QgZm9ybWF0OwogCiAJaWd0X2Fzc2VydF9s dGUoZHN0LT5zdXJmYWNlWzBdLnN0cmlkZSwgODE5Mik7Ci0JaWd0X2Fzc2VydF9sdGUoaWd0X2J1 Zl93aWR0aChkc3QpLCAyMDQ4KTsKLQlpZ3RfYXNzZXJ0X2x0ZShpZ3RfYnVmX2hlaWdodChkc3Qp LCAyMDQ4KTsKKwlpZ3RfYXNzZXJ0X2x0ZShpbnRlbF9idWZfd2lkdGgoZHN0KSwgMjA0OCk7CisJ aWd0X2Fzc2VydF9sdGUoaW50ZWxfYnVmX2hlaWdodChkc3QpLCAyMDQ4KTsKIAogCXN3aXRjaCAo ZHN0LT5icHApIHsKIAkJY2FzZSA4OiBmb3JtYXQgPSBDT0xSX0JVRl84QklUOyBicmVhazsKQEAg LTE1NSwzMyArMTU1LDM1IEBAIHN0YXRpYyB2b2lkIGdlbjJfZW1pdF90YXJnZXQoc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKIAlpZiAoZHN0LT50aWxpbmcgPT0gSTkxNV9USUxJTkdf WSkKIAkJdGlsaW5nIHw9IEJVRl8zRF9USUxFX1dBTEtfWTsKIAotCU9VVF9CQVRDSChfM0RTVEFU RV9CVUZfSU5GT19DTUQpOwotCU9VVF9CQVRDSChCVUZfM0RfSURfQ09MT1JfQkFDSyB8IHRpbGlu ZyB8IEJVRl8zRF9QSVRDSChkc3QtPnN1cmZhY2VbMF0uc3RyaWRlKSk7Ci0JT1VUX1JFTE9DKGRz dC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIsIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIsIDAp OwotCi0JT1VUX0JBVENIKF8zRFNUQVRFX0RTVF9CVUZfVkFSU19DTUQpOwotCU9VVF9CQVRDSChm b3JtYXQgfAotCQkgIERTVE9SR19IT1JUX0JJQVMoMHg4KSB8Ci0JCSAgRFNUT1JHX1ZFUlRfQklB UygweDgpKTsKLQotCU9VVF9CQVRDSChfM0RTVEFURV9EUkFXX1JFQ1RfQ01EKTsKLQlPVVRfQkFU Q0goMCk7Ci0JT1VUX0JBVENIKDApOwkJLyogeW1pbiwgeG1pbiAqLwotCU9VVF9CQVRDSChEUkFX X1lNQVgoaWd0X2J1Zl9oZWlnaHQoZHN0KSAtIDEpIHwKLQkJICBEUkFXX1hNQVgoaWd0X2J1Zl93 aWR0aChkc3QpIC0gMSkpOwotCU9VVF9CQVRDSCgwKTsJCS8qIHlvcmlnLCB4b3JpZyAqLworCWlu dGVsX2JiX291dChpYmIsIF8zRFNUQVRFX0JVRl9JTkZPX0NNRCk7CisJaW50ZWxfYmJfb3V0KGli YiwgQlVGXzNEX0lEX0NPTE9SX0JBQ0sgfCB0aWxpbmcgfAorCQkgICAgIEJVRl8zRF9QSVRDSChk c3QtPnN1cmZhY2VbMF0uc3RyaWRlKSk7CisJaW50ZWxfYmJfZW1pdF9yZWxvYyhpYmIsIGRzdC0+ aGFuZGxlLCBJOTE1X0dFTV9ET01BSU5fUkVOREVSLAorCQkJICAgIEk5MTVfR0VNX0RPTUFJTl9S RU5ERVIsIDAsIGRzdC0+YWRkci5vZmZzZXQpOworCisJaW50ZWxfYmJfb3V0KGliYiwgXzNEU1RB VEVfRFNUX0JVRl9WQVJTX0NNRCk7CisJaW50ZWxfYmJfb3V0KGliYiwgZm9ybWF0IHwKKwkJICAg ICBEU1RPUkdfSE9SVF9CSUFTKDB4OCkgfAorCQkgICAgIERTVE9SR19WRVJUX0JJQVMoMHg4KSk7 CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBfM0RTVEFURV9EUkFXX1JFQ1RfQ01EKTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsJCS8qIHltaW4sIHhtaW4gKi8K KwlpbnRlbF9iYl9vdXQoaWJiLCBEUkFXX1lNQVgoaW50ZWxfYnVmX2hlaWdodChkc3QpIC0gMSkg fAorCQkgICAgIERSQVdfWE1BWChpbnRlbF9idWZfd2lkdGgoZHN0KSAtIDEpKTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCAwKTsJCS8qIHlvcmlnLCB4b3JpZyAqLwogfQogCi1zdGF0aWMgdm9pZCBnZW4y X2VtaXRfdGV4dHVyZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJICAgICAg Y29uc3Qgc3RydWN0IGlndF9idWYgKnNyYywKK3N0YXRpYyB2b2lkIGdlbjJfZW1pdF90ZXh0dXJl KHN0cnVjdCBpbnRlbF9iYiAqaWJiLAorCQkJICAgICAgY29uc3Qgc3RydWN0IGludGVsX2J1ZiAq c3JjLAogCQkJICAgICAgaW50IHVuaXQpCiB7CiAJdWludDMyX3QgdGlsaW5nOwogCXVpbnQzMl90 IGZvcm1hdDsKIAogCWlndF9hc3NlcnRfbHRlKHNyYy0+c3VyZmFjZVswXS5zdHJpZGUsIDgxOTIp OwotCWlndF9hc3NlcnRfbHRlKGlndF9idWZfd2lkdGgoc3JjKSwgMjA0OCk7Ci0JaWd0X2Fzc2Vy dF9sdGUoaWd0X2J1Zl9oZWlnaHQoc3JjKSwgMjA0OCk7CisJaWd0X2Fzc2VydF9sdGUoaW50ZWxf YnVmX3dpZHRoKHNyYyksIDIwNDgpOworCWlndF9hc3NlcnRfbHRlKGludGVsX2J1Zl9oZWlnaHQo c3JjKSwgMjA0OCk7CiAKIAlzd2l0Y2ggKHNyYy0+YnBwKSB7CiAJCWNhc2UgODogZm9ybWF0ID0g TUFQU1VSRl84QklUIHwgTVRfOEJJVF9MODsgYnJlYWs7CkBAIC0xOTYsNzggKzE5OCw4NCBAQCBz dGF0aWMgdm9pZCBnZW4yX2VtaXRfdGV4dHVyZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJh dGNoLAogCWlmIChzcmMtPnRpbGluZyA9PSBJOTE1X1RJTElOR19ZKQogCQl0aWxpbmcgfD0gVE0w UzFfVElMRV9XQUxLOwogCi0JT1VUX0JBVENIKF8zRFNUQVRFX0xPQURfU1RBVEVfSU1NRURJQVRF XzIgfCBMT0FEX1RFWFRVUkVfTUFQKHVuaXQpIHwgNCk7Ci0JT1VUX1JFTE9DKHNyYy0+Ym8sIEk5 MTVfR0VNX0RPTUFJTl9TQU1QTEVSLCAwLCAwKTsKLQlPVVRfQkFUQ0goKGlndF9idWZfaGVpZ2h0 KHNyYykgLSAxKSA8PCBUTTBTMV9IRUlHSFRfU0hJRlQgfAotCQkgIChpZ3RfYnVmX3dpZHRoKHNy YykgLSAxKSA8PCBUTTBTMV9XSURUSF9TSElGVCB8Ci0JCSAgZm9ybWF0IHwgdGlsaW5nKTsKLQlP VVRfQkFUQ0goKHNyYy0+c3VyZmFjZVswXS5zdHJpZGUgLyA0IC0gMSkgPDwgVE0wUzJfUElUQ0hf U0hJRlQgfCBUTTBTMl9NQVBfMkQpOwotCU9VVF9CQVRDSChGSUxURVJfTkVBUkVTVCA8PCBUTTBT M19NQUdfRklMVEVSX1NISUZUIHwKLQkJICBGSUxURVJfTkVBUkVTVCA8PCBUTTBTM19NSU5fRklM VEVSX1NISUZUIHwKLQkJICBNSVBGSUxURVJfTk9ORSA8PCBUTTBTM19NSVBfRklMVEVSX1NISUZU KTsKLQlPVVRfQkFUQ0goMCk7CS8qIGRlZmF1bHQgY29sb3IgKi8KLQotCU9VVF9CQVRDSChfM0RT VEFURV9NQVBfQ09PUkRfU0VUX0NNRCB8IFRFWENPT1JEX1NFVCh1bml0KSB8Ci0JCSAgRU5BQkxF X1RFWENPT1JEX1BBUkFNUyB8IFRFWENPT1JEU19BUkVfTk9STUFMIHwKLQkJICBURVhDT09SRFRZ UEVfQ0FSVEVTSUFOIHwKLQkJICBFTkFCTEVfQUREUl9WX0NOVEwgfCBURVhDT09SRF9BRERSX1Zf TU9ERShURVhDT09SRE1PREVfQ0xBTVBfQk9SREVSKSB8Ci0JCSAgRU5BQkxFX0FERFJfVV9DTlRM IHwgVEVYQ09PUkRfQUREUl9VX01PREUoVEVYQ09PUkRNT0RFX0NMQU1QX0JPUkRFUikpOworCWlu dGVsX2JiX291dChpYmIsIF8zRFNUQVRFX0xPQURfU1RBVEVfSU1NRURJQVRFXzIgfCBMT0FEX1RF WFRVUkVfTUFQKHVuaXQpIHwgNCk7CisJaW50ZWxfYmJfZW1pdF9yZWxvYyhpYmIsIHNyYy0+aGFu ZGxlLCBJOTE1X0dFTV9ET01BSU5fU0FNUExFUiwgMCwgMCwKKwkJCSAgICBzcmMtPmFkZHIub2Zm c2V0KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAoaW50ZWxfYnVmX2hlaWdodChzcmMpIC0gMSkgPDwg VE0wUzFfSEVJR0hUX1NISUZUIHwKKwkJICAgICAoaW50ZWxfYnVmX3dpZHRoKHNyYykgLSAxKSA8 PCBUTTBTMV9XSURUSF9TSElGVCB8CisJCSAgICAgZm9ybWF0IHwgdGlsaW5nKTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCAoc3JjLT5zdXJmYWNlWzBdLnN0cmlkZSAvIDQgLSAxKSA8PCBUTTBTMl9QSVRD SF9TSElGVCB8IFRNMFMyX01BUF8yRCk7CisJaW50ZWxfYmJfb3V0KGliYiwgRklMVEVSX05FQVJF U1QgPDwgVE0wUzNfTUFHX0ZJTFRFUl9TSElGVCB8CisJCSAgICAgRklMVEVSX05FQVJFU1QgPDwg VE0wUzNfTUlOX0ZJTFRFUl9TSElGVCB8CisJCSAgICAgTUlQRklMVEVSX05PTkUgPDwgVE0wUzNf TUlQX0ZJTFRFUl9TSElGVCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CS8qIGRlZmF1bHQgY29s b3IgKi8KKworCWludGVsX2JiX291dChpYmIsIF8zRFNUQVRFX01BUF9DT09SRF9TRVRfQ01EIHwg VEVYQ09PUkRfU0VUKHVuaXQpIHwKKwkJICAgICBFTkFCTEVfVEVYQ09PUkRfUEFSQU1TIHwgVEVY Q09PUkRTX0FSRV9OT1JNQUwgfAorCQkgICAgIFRFWENPT1JEVFlQRV9DQVJURVNJQU4gfAorCQkg ICAgIEVOQUJMRV9BRERSX1ZfQ05UTCB8IFRFWENPT1JEX0FERFJfVl9NT0RFKFRFWENPT1JETU9E RV9DTEFNUF9CT1JERVIpIHwKKwkJICAgICBFTkFCTEVfQUREUl9VX0NOVEwgfCBURVhDT09SRF9B RERSX1VfTU9ERShURVhDT09SRE1PREVfQ0xBTVBfQk9SREVSKSk7CiB9CiAKLXN0YXRpYyB2b2lk IGdlbjJfZW1pdF9jb3B5X3BpcGVsaW5lKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gp CitzdGF0aWMgdm9pZCBnZW4yX2VtaXRfY29weV9waXBlbGluZShzdHJ1Y3QgaW50ZWxfYmIgKmli YikKIHsKLQlPVVRfQkFUQ0goXzNEU1RBVEVfSU5EUFRfQUxQSEFfQkxFTkRfQ01EIHwgRElTQUJM RV9JTkRQVF9BTFBIQV9CTEVORCk7Ci0JT1VUX0JBVENIKF8zRFNUQVRFX0VOQUJMRVNfMV9DTUQg fCBESVNBQkxFX0xPR0lDX09QIHwKLQkJICBESVNBQkxFX1NURU5DSUxfVEVTVCB8IERJU0FCTEVf REVQVEhfQklBUyB8Ci0JCSAgRElTQUJMRV9TUEVDX0FERCB8IERJU0FCTEVfRk9HIHwgRElTQUJM RV9BTFBIQV9URVNUIHwKLQkJICBESVNBQkxFX0NPTE9SX0JMRU5EIHwgRElTQUJMRV9ERVBUSF9U RVNUKTsKLQotCU9VVF9CQVRDSChfM0RTVEFURV9MT0FEX1NUQVRFX0lNTUVESUFURV8yIHwKLQkJ ICBMT0FEX1RFWFRVUkVfQkxFTkRfU1RBR0UoMCkgfCAxKTsKLQlPVVRfQkFUQ0goVEIwQ19MQVNU X1NUQUdFIHwgVEIwQ19SRVNVTFRfU0NBTEVfMVggfAotCQkgIFRCMENfT1VUUFVUX1dSSVRFX0NV UlJFTlQgfAotCQkgIFRCMENfT1BfQVJHMSB8IFRCMENfQVJHMV9TRUxfVEVYRUwwKTsKLQlPVVRf QkFUQ0goVEIwQV9SRVNVTFRfU0NBTEVfMVggfCBUQjBBX09VVFBVVF9XUklURV9DVVJSRU5UIHwK LQkJICBUQjBBX09QX0FSRzEgfCBUQjBBX0FSRzFfU0VMX1RFWEVMMCk7CisJaW50ZWxfYmJfb3V0 KGliYiwgXzNEU1RBVEVfSU5EUFRfQUxQSEFfQkxFTkRfQ01EIHwgRElTQUJMRV9JTkRQVF9BTFBI QV9CTEVORCk7CisJaW50ZWxfYmJfb3V0KGliYiwgXzNEU1RBVEVfRU5BQkxFU18xX0NNRCB8IERJ U0FCTEVfTE9HSUNfT1AgfAorCQkgICAgIERJU0FCTEVfU1RFTkNJTF9URVNUIHwgRElTQUJMRV9E RVBUSF9CSUFTIHwKKwkJICAgICBESVNBQkxFX1NQRUNfQUREIHwgRElTQUJMRV9GT0cgfCBESVNB QkxFX0FMUEhBX1RFU1QgfAorCQkgICAgIERJU0FCTEVfQ09MT1JfQkxFTkQgfCBESVNBQkxFX0RF UFRIX1RFU1QpOworCisJaW50ZWxfYmJfb3V0KGliYiwgXzNEU1RBVEVfTE9BRF9TVEFURV9JTU1F RElBVEVfMiB8CisJCSAgICAgTE9BRF9URVhUVVJFX0JMRU5EX1NUQUdFKDApIHwgMSk7CisJaW50 ZWxfYmJfb3V0KGliYiwgVEIwQ19MQVNUX1NUQUdFIHwgVEIwQ19SRVNVTFRfU0NBTEVfMVggfAor CQkgICAgIFRCMENfT1VUUFVUX1dSSVRFX0NVUlJFTlQgfAorCQkgICAgIFRCMENfT1BfQVJHMSB8 IFRCMENfQVJHMV9TRUxfVEVYRUwwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBUQjBBX1JFU1VMVF9T Q0FMRV8xWCB8IFRCMEFfT1VUUFVUX1dSSVRFX0NVUlJFTlQgfAorCQkgICAgIFRCMEFfT1BfQVJH MSB8IFRCMEFfQVJHMV9TRUxfVEVYRUwwKTsKIH0KIAotdm9pZCBnZW4yX3JlbmRlcl9jb3B5ZnVu YyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJICBkcm1faW50ZWxfY29udGV4 dCAqY29udGV4dCwKLQkJCSAgY29uc3Qgc3RydWN0IGlndF9idWYgKnNyYywgdW5zaWduZWQgc3Jj X3gsIHVuc2lnbmVkIHNyY195LAotCQkJICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0 LAotCQkJICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0LCB1bnNpZ25lZCBkc3RfeCwgdW5zaWdu ZWQgZHN0X3kpCit2b2lkIGdlbjJfcmVuZGVyX2NvcHlmdW5jKHN0cnVjdCBpbnRlbF9iYiAqaWJi LAorCQkJICB1aW50MzJfdCBjdHgsCisJCQkgIHN0cnVjdCBpbnRlbF9idWYgKnNyYywKKwkJCSAg dWludDMyX3Qgc3JjX3gsIHVpbnQzMl90IHNyY195LAorCQkJICB1aW50MzJfdCB3aWR0aCwgdWlu dDMyX3QgaGVpZ2h0LAorCQkJICBzdHJ1Y3QgaW50ZWxfYnVmICpkc3QsCisJCQkgIHVpbnQzMl90 IGRzdF94LCB1aW50MzJfdCBkc3RfeSkKIHsKIAlpZ3RfYXNzZXJ0KHNyYy0+YnBwID09IGRzdC0+ YnBwKTsKIAotCWdlbjJfZW1pdF9pbnZhcmlhbnQoYmF0Y2gpOwotCWdlbjJfZW1pdF9jb3B5X3Bp cGVsaW5lKGJhdGNoKTsKKwlpbnRlbF9iYl9hZGRfaW50ZWxfYnVmKGliYiwgZHN0LCB0cnVlKTsK KwlpbnRlbF9iYl9hZGRfaW50ZWxfYnVmKGliYiwgc3JjLCBmYWxzZSk7CiAKLQlnZW4yX2VtaXRf dGFyZ2V0KGJhdGNoLCBkc3QpOwotCWdlbjJfZW1pdF90ZXh0dXJlKGJhdGNoLCBzcmMsIDApOwor CWdlbjJfZW1pdF9pbnZhcmlhbnQoaWJiKTsKKwlnZW4yX2VtaXRfY29weV9waXBlbGluZShpYmIp OwogCi0JT1VUX0JBVENIKF8zRFNUQVRFX0xPQURfU1RBVEVfSU1NRURJQVRFXzEgfAotCQkgIEkx X0xPQURfUygyKSB8IEkxX0xPQURfUygzKSB8IEkxX0xPQURfUyg4KSB8IDIpOwotCU9VVF9CQVRD SCgxPDwxMik7Ci0JT1VUX0JBVENIKFMzX0NVTExNT0RFX05PTkUgfCBTM19WRVJURVhIQVNfWFkp OwotCU9VVF9CQVRDSChTOF9FTkFCTEVfQ09MT1JfQlVGRkVSX1dSSVRFKTsKKwlnZW4yX2VtaXRf dGFyZ2V0KGliYiwgZHN0KTsKKwlnZW4yX2VtaXRfdGV4dHVyZShpYmIsIHNyYywgMCk7CiAKLQlP VVRfQkFUQ0goXzNEU1RBVEVfVkVSVEVYX0ZPUk1BVF8yX0NNRCB8IFRFWENPT1JERk1UXzJEIDw8 IDApOworCWludGVsX2JiX291dChpYmIsIF8zRFNUQVRFX0xPQURfU1RBVEVfSU1NRURJQVRFXzEg fAorCQkgICAgIEkxX0xPQURfUygyKSB8IEkxX0xPQURfUygzKSB8IEkxX0xPQURfUyg4KSB8IDIp OworCWludGVsX2JiX291dChpYmIsIDE8PDEyKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBTM19DVUxM TU9ERV9OT05FIHwgUzNfVkVSVEVYSEFTX1hZKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBTOF9FTkFC TEVfQ09MT1JfQlVGRkVSX1dSSVRFKTsKIAotCU9VVF9CQVRDSChQUklNM0RfSU5MSU5FIHwgUFJJ TTNEX1JFQ1RMSVNUIHwgKDMqNCAtMSkpOwotCWVtaXRfdmVydGV4KGJhdGNoLCBkc3RfeCArIHdp ZHRoKTsKLQllbWl0X3ZlcnRleChiYXRjaCwgZHN0X3kgKyBoZWlnaHQpOwotCWVtaXRfdmVydGV4 X25vcm1hbGl6ZWQoYmF0Y2gsIHNyY194ICsgd2lkdGgsIGlndF9idWZfd2lkdGgoc3JjKSk7Ci0J ZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChiYXRjaCwgc3JjX3kgKyBoZWlnaHQsIGlndF9idWZfaGVp Z2h0KHNyYykpOworCWludGVsX2JiX291dChpYmIsIF8zRFNUQVRFX1ZFUlRFWF9GT1JNQVRfMl9D TUQgfCBURVhDT09SREZNVF8yRCA8PCAwKTsKIAotCWVtaXRfdmVydGV4KGJhdGNoLCBkc3RfeCk7 Ci0JZW1pdF92ZXJ0ZXgoYmF0Y2gsIGRzdF95ICsgaGVpZ2h0KTsKLQllbWl0X3ZlcnRleF9ub3Jt YWxpemVkKGJhdGNoLCBzcmNfeCwgaWd0X2J1Zl93aWR0aChzcmMpKTsKLQllbWl0X3ZlcnRleF9u b3JtYWxpemVkKGJhdGNoLCBzcmNfeSArIGhlaWdodCwgaWd0X2J1Zl9oZWlnaHQoc3JjKSk7CisJ aW50ZWxfYmJfb3V0KGliYiwgUFJJTTNEX0lOTElORSB8IFBSSU0zRF9SRUNUTElTVCB8ICgzKjQg LSAxKSk7CisJZW1pdF92ZXJ0ZXgoaWJiLCBkc3RfeCArIHdpZHRoKTsKKwllbWl0X3ZlcnRleChp YmIsIGRzdF95ICsgaGVpZ2h0KTsKKwllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGliYiwgc3JjX3gg KyB3aWR0aCwgaW50ZWxfYnVmX3dpZHRoKHNyYykpOworCWVtaXRfdmVydGV4X25vcm1hbGl6ZWQo aWJiLCBzcmNfeSArIGhlaWdodCwgaW50ZWxfYnVmX2hlaWdodChzcmMpKTsKIAotCWVtaXRfdmVy dGV4KGJhdGNoLCBkc3RfeCk7Ci0JZW1pdF92ZXJ0ZXgoYmF0Y2gsIGRzdF95KTsKLQllbWl0X3Zl cnRleF9ub3JtYWxpemVkKGJhdGNoLCBzcmNfeCwgaWd0X2J1Zl93aWR0aChzcmMpKTsKLQllbWl0 X3ZlcnRleF9ub3JtYWxpemVkKGJhdGNoLCBzcmNfeSwgaWd0X2J1Zl9oZWlnaHQoc3JjKSk7CisJ ZW1pdF92ZXJ0ZXgoaWJiLCBkc3RfeCk7CisJZW1pdF92ZXJ0ZXgoaWJiLCBkc3RfeSArIGhlaWdo dCk7CisJZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChpYmIsIHNyY194LCBpbnRlbF9idWZfd2lkdGgo c3JjKSk7CisJZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChpYmIsIHNyY195ICsgaGVpZ2h0LCBpbnRl bF9idWZfaGVpZ2h0KHNyYykpOwogCi0JaW50ZWxfYmF0Y2hidWZmZXJfZmx1c2goYmF0Y2gpOwor CWVtaXRfdmVydGV4KGliYiwgZHN0X3gpOworCWVtaXRfdmVydGV4KGliYiwgZHN0X3kpOworCWVt aXRfdmVydGV4X25vcm1hbGl6ZWQoaWJiLCBzcmNfeCwgaW50ZWxfYnVmX3dpZHRoKHNyYykpOwor CWVtaXRfdmVydGV4X25vcm1hbGl6ZWQoaWJiLCBzcmNfeSwgaW50ZWxfYnVmX2hlaWdodChzcmMp KTsKKworCWludGVsX2JiX2ZsdXNoX2JsaXRfd2l0aF9jb250ZXh0KGliYiwgY3R4KTsKIH0KZGlm ZiAtLWdpdCBhL2xpYi9yZW5kZXJjb3B5X2k5MTUuYyBiL2xpYi9yZW5kZXJjb3B5X2k5MTUuYwpp bmRleCA1NmUxODYzZS4uYjE2ZDRmMTIgMTAwNjQ0Ci0tLSBhL2xpYi9yZW5kZXJjb3B5X2k5MTUu YworKysgYi9saWIvcmVuZGVyY29weV9pOTE1LmMKQEAgLTExLDcgKzExLDcgQEAKICNpbmNsdWRl ICJkcm0uaCIKICNpbmNsdWRlICJpOTE1X2RybS5oIgogI2luY2x1ZGUgImRybXRlc3QuaCIKLSNp bmNsdWRlICJpbnRlbF9idWZtZ3IuaCIKKyNpbmNsdWRlICJpbnRlbF9idWZvcHMuaCIKICNpbmNs dWRlICJpbnRlbF9iYXRjaGJ1ZmZlci5oIgogI2luY2x1ZGUgImludGVsX2lvLmgiCiAKQEAgLTE5 LDY4ICsxOSw3MyBAQAogI2luY2x1ZGUgImk5MTVfM2QuaCIKICNpbmNsdWRlICJyZW5kZXJjb3B5 LmgiCiAKLXZvaWQgZ2VuM19yZW5kZXJfY29weWZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVy ICpiYXRjaCwKLQkJCSAgZHJtX2ludGVsX2NvbnRleHQgKmNvbnRleHQsCi0JCQkgIGNvbnN0IHN0 cnVjdCBpZ3RfYnVmICpzcmMsIHVuc2lnbmVkIHNyY194LCB1bnNpZ25lZCBzcmNfeSwKLQkJCSAg dW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwKLQkJCSAgY29uc3Qgc3RydWN0IGlndF9i dWYgKmRzdCwgdW5zaWduZWQgZHN0X3gsIHVuc2lnbmVkIGRzdF95KQordm9pZCBnZW4zX3JlbmRl cl9jb3B5ZnVuYyhzdHJ1Y3QgaW50ZWxfYmIgKmliYiwKKwkJCSAgdWludDMyX3QgY3R4LAorCQkJ ICBzdHJ1Y3QgaW50ZWxfYnVmICpzcmMsCisJCQkgIHVpbnQzMl90IHNyY194LCB1aW50MzJfdCBz cmNfeSwKKwkJCSAgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwKKwkJCSAgc3RydWN0 IGludGVsX2J1ZiAqZHN0LAorCQkJICB1aW50MzJfdCBkc3RfeCwgdWludDMyX3QgZHN0X3kpCiB7 CiAJaWd0X2Fzc2VydChzcmMtPmJwcCA9PSBkc3QtPmJwcCk7CiAKKwlpbnRlbF9iYl9hZGRfaW50 ZWxfYnVmKGliYiwgZHN0LCB0cnVlKTsKKwlpbnRlbF9iYl9hZGRfaW50ZWxfYnVmKGliYiwgc3Jj LCBmYWxzZSk7CisKIAkvKiBpbnZhcmlhbnQgc3RhdGUgKi8KIAl7Ci0JCU9VVF9CQVRDSChfM0RT VEFURV9BQV9DTUQgfAotCQkJICBBQV9MSU5FX0VDQUFSX1dJRFRIX0VOQUJMRSB8Ci0JCQkgIEFB X0xJTkVfRUNBQVJfV0lEVEhfMV8wIHwKLQkJCSAgQUFfTElORV9SRUdJT05fV0lEVEhfRU5BQkxF IHwgQUFfTElORV9SRUdJT05fV0lEVEhfMV8wKTsKLQkJT1VUX0JBVENIKF8zRFNUQVRFX0lOREVQ RU5ERU5UX0FMUEhBX0JMRU5EX0NNRCB8Ci0JCQkgIElBQl9NT0RJRllfRU5BQkxFIHwKLQkJCSAg SUFCX01PRElGWV9GVU5DIHwgKEJMRU5ERlVOQ19BREQgPDwgSUFCX0ZVTkNfU0hJRlQpIHwKLQkJ CSAgSUFCX01PRElGWV9TUkNfRkFDVE9SIHwgKEJMRU5ERkFDVF9PTkUgPDwKLQkJCQkJCSAgIElB Ql9TUkNfRkFDVE9SX1NISUZUKSB8Ci0JCQkgIElBQl9NT0RJRllfRFNUX0ZBQ1RPUiB8IChCTEVO REZBQ1RfWkVSTyA8PAotCQkJCQkJICAgSUFCX0RTVF9GQUNUT1JfU0hJRlQpKTsKLQkJT1VUX0JB VENIKF8zRFNUQVRFX0RGTFRfRElGRlVTRV9DTUQpOwotCQlPVVRfQkFUQ0goMCk7Ci0JCU9VVF9C QVRDSChfM0RTVEFURV9ERkxUX1NQRUNfQ01EKTsKLQkJT1VUX0JBVENIKDApOwotCQlPVVRfQkFU Q0goXzNEU1RBVEVfREZMVF9aX0NNRCk7Ci0JCU9VVF9CQVRDSCgwKTsKLQkJT1VUX0JBVENIKF8z RFNUQVRFX0NPT1JEX1NFVF9CSU5ESU5HUyB8Ci0JCQkgIENTQl9UQ0IoMCwgMCkgfAotCQkJICBD U0JfVENCKDEsIDEpIHwKLQkJCSAgQ1NCX1RDQigyLCAyKSB8Ci0JCQkgIENTQl9UQ0IoMywgMykg fAotCQkJICBDU0JfVENCKDQsIDQpIHwKLQkJCSAgQ1NCX1RDQig1LCA1KSB8IENTQl9UQ0IoNiwg NikgfCBDU0JfVENCKDcsIDcpKTsKLQkJT1VUX0JBVENIKF8zRFNUQVRFX1JBU1RFUl9SVUxFU19D TUQgfAotCQkJICBFTkFCTEVfUE9JTlRfUkFTVEVSX1JVTEUgfAotCQkJICBPR0xfUE9JTlRfUkFT VEVSX1JVTEUgfAotCQkJICBFTkFCTEVfTElORV9TVFJJUF9QUk9WT0tFX1ZSVFggfAotCQkJICBF TkFCTEVfVFJJX0ZBTl9QUk9WT0tFX1ZSVFggfAotCQkJICBMSU5FX1NUUklQX1BST1ZPS0VfVlJU WCgxKSB8Ci0JCQkgIFRSSV9GQU5fUFJPVk9LRV9WUlRYKDIpIHwgRU5BQkxFX1RFWEtJTExfM0Rf NEQgfCBURVhLSUxMXzREKTsKLQkJT1VUX0JBVENIKF8zRFNUQVRFX01PREVTXzRfQ01EIHwKLQkJ CSAgRU5BQkxFX0xPR0lDX09QX0ZVTkMgfCBMT0dJQ19PUF9GVU5DKExPR0lDT1BfQ09QWSkgfAot CQkJICBFTkFCTEVfU1RFTkNJTF9XUklURV9NQVNLIHwgU1RFTkNJTF9XUklURV9NQVNLKDB4ZmYp IHwKLQkJCSAgRU5BQkxFX1NURU5DSUxfVEVTVF9NQVNLIHwgU1RFTkNJTF9URVNUX01BU0soMHhm ZikpOwotCQlPVVRfQkFUQ0goXzNEU1RBVEVfTE9BRF9TVEFURV9JTU1FRElBVEVfMSB8IEkxX0xP QURfUygzKSB8IEkxX0xPQURfUyg0KSB8IEkxX0xPQURfUyg1KSB8IDIpOwotCQlPVVRfQkFUQ0go MHgwMDAwMDAwMCk7CS8qIERpc2FibGUgdGV4dHVyZSBjb29yZGluYXRlIHdyYXAtc2hvcnRlc3Qg Ki8KLQkJT1VUX0JBVENIKCgxIDw8IFM0X1BPSU5UX1dJRFRIX1NISUZUKSB8Ci0JCQkgIFM0X0xJ TkVfV0lEVEhfT05FIHwKLQkJCSAgUzRfQ1VMTE1PREVfTk9ORSB8Ci0JCQkgIFM0X1ZGTVRfWFkp OwotCQlPVVRfQkFUQ0goMHgwMDAwMDAwMCk7CS8qIFN0ZW5jaWwuICovCi0JCU9VVF9CQVRDSChf M0RTVEFURV9TQ0lTU09SX0VOQUJMRV9DTUQgfCBESVNBQkxFX1NDSVNTT1JfUkVDVCk7Ci0JCU9V VF9CQVRDSChfM0RTVEFURV9TQ0lTU09SX1JFQ1RfMF9DTUQpOwotCQlPVVRfQkFUQ0goMCk7Ci0J CU9VVF9CQVRDSCgwKTsKLQkJT1VUX0JBVENIKF8zRFNUQVRFX0RFUFRIX1NVQlJFQ1RfRElTQUJM RSk7Ci0JCU9VVF9CQVRDSChfM0RTVEFURV9MT0FEX0lORElSRUNUIHwgMCk7CS8qIGRpc2FibGUg aW5kaXJlY3Qgc3RhdGUgKi8KLQkJT1VUX0JBVENIKDApOwotCQlPVVRfQkFUQ0goXzNEU1RBVEVf U1RJUFBMRSk7Ci0JCU9VVF9CQVRDSCgweDAwMDAwMDAwKTsKLQkJT1VUX0JBVENIKF8zRFNUQVRF X0JBQ0tGQUNFX1NURU5DSUxfT1BTIHwgQkZPX0VOQUJMRV9TVEVOQ0lMX1RXT19TSURFIHwgMCk7 CisJCWludGVsX2JiX291dChpYmIsIF8zRFNUQVRFX0FBX0NNRCB8CisJCQkgICAgIEFBX0xJTkVf RUNBQVJfV0lEVEhfRU5BQkxFIHwKKwkJCSAgICAgQUFfTElORV9FQ0FBUl9XSURUSF8xXzAgfAor CQkJICAgICBBQV9MSU5FX1JFR0lPTl9XSURUSF9FTkFCTEUgfCBBQV9MSU5FX1JFR0lPTl9XSURU SF8xXzApOworCQlpbnRlbF9iYl9vdXQoaWJiLCBfM0RTVEFURV9JTkRFUEVOREVOVF9BTFBIQV9C TEVORF9DTUQgfAorCQkJICAgICBJQUJfTU9ESUZZX0VOQUJMRSB8CisJCQkgICAgIElBQl9NT0RJ RllfRlVOQyB8IChCTEVOREZVTkNfQUREIDw8IElBQl9GVU5DX1NISUZUKSB8CisJCQkgICAgIElB Ql9NT0RJRllfU1JDX0ZBQ1RPUiB8IChCTEVOREZBQ1RfT05FIDw8CisJCQkJCQkgICAgICBJQUJf U1JDX0ZBQ1RPUl9TSElGVCkgfAorCQkJICAgICBJQUJfTU9ESUZZX0RTVF9GQUNUT1IgfCAoQkxF TkRGQUNUX1pFUk8gPDwKKwkJCQkJCSAgICAgIElBQl9EU1RfRkFDVE9SX1NISUZUKSk7CisJCWlu dGVsX2JiX291dChpYmIsIF8zRFNUQVRFX0RGTFRfRElGRlVTRV9DTUQpOworCQlpbnRlbF9iYl9v dXQoaWJiLCAwKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgXzNEU1RBVEVfREZMVF9TUEVDX0NNRCk7 CisJCWludGVsX2JiX291dChpYmIsIDApOworCQlpbnRlbF9iYl9vdXQoaWJiLCBfM0RTVEFURV9E RkxUX1pfQ01EKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJCWludGVsX2JiX291dChpYmIs IF8zRFNUQVRFX0NPT1JEX1NFVF9CSU5ESU5HUyB8CisJCQkgICAgIENTQl9UQ0IoMCwgMCkgfAor CQkJICAgICBDU0JfVENCKDEsIDEpIHwKKwkJCSAgICAgQ1NCX1RDQigyLCAyKSB8CisJCQkgICAg IENTQl9UQ0IoMywgMykgfAorCQkJICAgICBDU0JfVENCKDQsIDQpIHwKKwkJCSAgICAgQ1NCX1RD Qig1LCA1KSB8IENTQl9UQ0IoNiwgNikgfCBDU0JfVENCKDcsIDcpKTsKKwkJaW50ZWxfYmJfb3V0 KGliYiwgXzNEU1RBVEVfUkFTVEVSX1JVTEVTX0NNRCB8CisJCQkgICAgIEVOQUJMRV9QT0lOVF9S QVNURVJfUlVMRSB8CisJCQkgICAgIE9HTF9QT0lOVF9SQVNURVJfUlVMRSB8CisJCQkgICAgIEVO QUJMRV9MSU5FX1NUUklQX1BST1ZPS0VfVlJUWCB8CisJCQkgICAgIEVOQUJMRV9UUklfRkFOX1BS T1ZPS0VfVlJUWCB8CisJCQkgICAgIExJTkVfU1RSSVBfUFJPVk9LRV9WUlRYKDEpIHwKKwkJCSAg ICAgVFJJX0ZBTl9QUk9WT0tFX1ZSVFgoMikgfCBFTkFCTEVfVEVYS0lMTF8zRF80RCB8IFRFWEtJ TExfNEQpOworCQlpbnRlbF9iYl9vdXQoaWJiLCBfM0RTVEFURV9NT0RFU180X0NNRCB8CisJCQkg ICAgIEVOQUJMRV9MT0dJQ19PUF9GVU5DIHwgTE9HSUNfT1BfRlVOQyhMT0dJQ09QX0NPUFkpIHwK KwkJCSAgICAgRU5BQkxFX1NURU5DSUxfV1JJVEVfTUFTSyB8IFNURU5DSUxfV1JJVEVfTUFTSygw eGZmKSB8CisJCQkgICAgIEVOQUJMRV9TVEVOQ0lMX1RFU1RfTUFTSyB8IFNURU5DSUxfVEVTVF9N QVNLKDB4ZmYpKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgXzNEU1RBVEVfTE9BRF9TVEFURV9JTU1F RElBVEVfMSB8IEkxX0xPQURfUygzKSB8IEkxX0xPQURfUyg0KSB8IEkxX0xPQURfUyg1KSB8IDIp OworCQlpbnRlbF9iYl9vdXQoaWJiLCAweDAwMDAwMDAwKTsJLyogRGlzYWJsZSB0ZXh0dXJlIGNv b3JkaW5hdGUgd3JhcC1zaG9ydGVzdCAqLworCQlpbnRlbF9iYl9vdXQoaWJiLCAoMSA8PCBTNF9Q T0lOVF9XSURUSF9TSElGVCkgfAorCQkJICAgICBTNF9MSU5FX1dJRFRIX09ORSB8CisJCQkgICAg IFM0X0NVTExNT0RFX05PTkUgfAorCQkJICAgICBTNF9WRk1UX1hZKTsKKwkJaW50ZWxfYmJfb3V0 KGliYiwgMHgwMDAwMDAwMCk7CS8qIFN0ZW5jaWwuICovCisJCWludGVsX2JiX291dChpYmIsIF8z RFNUQVRFX1NDSVNTT1JfRU5BQkxFX0NNRCB8IERJU0FCTEVfU0NJU1NPUl9SRUNUKTsKKwkJaW50 ZWxfYmJfb3V0KGliYiwgXzNEU1RBVEVfU0NJU1NPUl9SRUNUXzBfQ01EKTsKKwkJaW50ZWxfYmJf b3V0KGliYiwgMCk7CisJCWludGVsX2JiX291dChpYmIsIDApOworCQlpbnRlbF9iYl9vdXQoaWJi LCBfM0RTVEFURV9ERVBUSF9TVUJSRUNUX0RJU0FCTEUpOworCQlpbnRlbF9iYl9vdXQoaWJiLCBf M0RTVEFURV9MT0FEX0lORElSRUNUIHwgMCk7CS8qIGRpc2FibGUgaW5kaXJlY3Qgc3RhdGUgKi8K KwkJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJCWludGVsX2JiX291dChpYmIsIF8zRFNUQVRFX1NU SVBQTEUpOworCQlpbnRlbF9iYl9vdXQoaWJiLCAweDAwMDAwMDAwKTsKKwkJaW50ZWxfYmJfb3V0 KGliYiwgXzNEU1RBVEVfQkFDS0ZBQ0VfU1RFTkNJTF9PUFMgfCBCRk9fRU5BQkxFX1NURU5DSUxf VFdPX1NJREUgfCAwKTsKIAl9CiAKIAkvKiBzYW1sZXIgc3RhdGUgKi8KQEAgLTg5LDggKzk0LDgg QEAgdm9pZCBnZW4zX3JlbmRlcl9jb3B5ZnVuYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJh dGNoLAogCQl1aW50MzJfdCBmb3JtYXRfYml0cywgdGlsaW5nX2JpdHMgPSAwOwogCiAJCWlndF9h c3NlcnRfbHRlKHNyYy0+c3VyZmFjZVswXS5zdHJpZGUsIDgxOTIpOwotCQlpZ3RfYXNzZXJ0X2x0 ZShpZ3RfYnVmX3dpZHRoKHNyYyksIDIwNDgpOwotCQlpZ3RfYXNzZXJ0X2x0ZShpZ3RfYnVmX2hl aWdodChzcmMpLCAyMDQ4KTsKKwkJaWd0X2Fzc2VydF9sdGUoaW50ZWxfYnVmX3dpZHRoKHNyYyks IDIwNDgpOworCQlpZ3RfYXNzZXJ0X2x0ZShpbnRlbF9idWZfaGVpZ2h0KHNyYyksIDIwNDgpOwog CiAJCWlmIChzcmMtPnRpbGluZyAhPSBJOTE1X1RJTElOR19OT05FKQogCQkJdGlsaW5nX2JpdHMg PSBNUzNfVElMRURfU1VSRkFDRTsKQEAgLTEwNCwyMyArMTA5LDI1IEBAIHZvaWQgZ2VuM19yZW5k ZXJfY29weWZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKIAkJCWRlZmF1bHQ6 IGlndF9hc3NlcnQoMCk7CiAJCX0KIAotCQlPVVRfQkFUQ0goXzNEU1RBVEVfTUFQX1NUQVRFIHwg KDMgKiBURVhfQ09VTlQpKTsKLQkJT1VUX0JBVENIKCgxIDw8IFRFWF9DT1VOVCkgLSAxKTsKLQkJ T1VUX1JFTE9DKHNyYy0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9TQU1QTEVSLCAwLCAwKTsKLQkJT1VU X0JBVENIKGZvcm1hdF9iaXRzIHwgdGlsaW5nX2JpdHMgfAotCQkJICAoaWd0X2J1Zl9oZWlnaHQo c3JjKSAtIDEpIDw8IE1TM19IRUlHSFRfU0hJRlQgfAotCQkJICAoaWd0X2J1Zl93aWR0aChzcmMp IC0gMSkgPDwgTVMzX1dJRFRIX1NISUZUKTsKLQkJT1VUX0JBVENIKChzcmMtPnN1cmZhY2VbMF0u c3RyaWRlLzQtMSkgPDwgTVM0X1BJVENIX1NISUZUKTsKLQotCQlPVVRfQkFUQ0goXzNEU1RBVEVf U0FNUExFUl9TVEFURSB8ICgzICogVEVYX0NPVU5UKSk7Ci0JCU9VVF9CQVRDSCgoMSA8PCBURVhf Q09VTlQpIC0gMSk7Ci0JCU9VVF9CQVRDSChNSVBGSUxURVJfTk9ORSA8PCBTUzJfTUlQX0ZJTFRF Ul9TSElGVCB8Ci0JCQkgIEZJTFRFUl9ORUFSRVNUIDw8IFNTMl9NQUdfRklMVEVSX1NISUZUIHwK LQkJCSAgRklMVEVSX05FQVJFU1QgPDwgU1MyX01JTl9GSUxURVJfU0hJRlQpOwotCQlPVVRfQkFU Q0goVEVYQ09PUkRNT0RFX1dSQVAgPDwgU1MzX1RDWF9BRERSX01PREVfU0hJRlQgfAotCQkJICBU RVhDT09SRE1PREVfV1JBUCA8PCBTUzNfVENZX0FERFJfTU9ERV9TSElGVCB8Ci0JCQkgIDAgPDwg U1MzX1RFWFRVUkVNQVBfSU5ERVhfU0hJRlQpOwotCQlPVVRfQkFUQ0goMHgwMDAwMDAwMCk7CisJ CWludGVsX2JiX291dChpYmIsIF8zRFNUQVRFX01BUF9TVEFURSB8ICgzICogVEVYX0NPVU5UKSk7 CisJCWludGVsX2JiX291dChpYmIsICgxIDw8IFRFWF9DT1VOVCkgLSAxKTsKKwkJaW50ZWxfYmJf ZW1pdF9yZWxvYyhpYmIsIHNyYy0+aGFuZGxlLAorCQkJCSAgICBJOTE1X0dFTV9ET01BSU5fU0FN UExFUiwgMCwKKwkJCQkgICAgMCwgc3JjLT5hZGRyLm9mZnNldCk7CisJCWludGVsX2JiX291dChp YmIsIGZvcm1hdF9iaXRzIHwgdGlsaW5nX2JpdHMgfAorCQkJICAgICAoaW50ZWxfYnVmX2hlaWdo dChzcmMpIC0gMSkgPDwgTVMzX0hFSUdIVF9TSElGVCB8CisJCQkgICAgIChpbnRlbF9idWZfd2lk dGgoc3JjKSAtIDEpIDw8IE1TM19XSURUSF9TSElGVCk7CisJCWludGVsX2JiX291dChpYmIsIChz cmMtPnN1cmZhY2VbMF0uc3RyaWRlLzQtMSkgPDwgTVM0X1BJVENIX1NISUZUKTsKKworCQlpbnRl bF9iYl9vdXQoaWJiLCBfM0RTVEFURV9TQU1QTEVSX1NUQVRFIHwgKDMgKiBURVhfQ09VTlQpKTsK KwkJaW50ZWxfYmJfb3V0KGliYiwgKDEgPDwgVEVYX0NPVU5UKSAtIDEpOworCQlpbnRlbF9iYl9v dXQoaWJiLCBNSVBGSUxURVJfTk9ORSA8PCBTUzJfTUlQX0ZJTFRFUl9TSElGVCB8CisJCQkgICAg IEZJTFRFUl9ORUFSRVNUIDw8IFNTMl9NQUdfRklMVEVSX1NISUZUIHwKKwkJCSAgICAgRklMVEVS X05FQVJFU1QgPDwgU1MyX01JTl9GSUxURVJfU0hJRlQpOworCQlpbnRlbF9iYl9vdXQoaWJiLCBU RVhDT09SRE1PREVfV1JBUCA8PCBTUzNfVENYX0FERFJfTU9ERV9TSElGVCB8CisJCQkgICAgIFRF WENPT1JETU9ERV9XUkFQIDw8IFNTM19UQ1lfQUREUl9NT0RFX1NISUZUIHwKKwkJCSAgICAgMCA8 PCBTUzNfVEVYVFVSRU1BUF9JTkRFWF9TSElGVCk7CisJCWludGVsX2JiX291dChpYmIsIDB4MDAw MDAwMDApOwogCX0KIAogCS8qIHJlbmRlciB0YXJnZXQgc3RhdGUgKi8KQEAgLTEyOSw4ICsxMzYs OCBAQCB2b2lkIGdlbjNfcmVuZGVyX2NvcHlmdW5jKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gsCiAJCXVpbnQzMl90IGZvcm1hdF9iaXRzOwogCiAJCWlndF9hc3NlcnRfbHRlKGRzdC0+ c3VyZmFjZVswXS5zdHJpZGUsIDgxOTIpOwotCQlpZ3RfYXNzZXJ0X2x0ZShpZ3RfYnVmX3dpZHRo KGRzdCksIDIwNDgpOwotCQlpZ3RfYXNzZXJ0X2x0ZShpZ3RfYnVmX2hlaWdodChkc3QpLCAyMDQ4 KTsKKwkJaWd0X2Fzc2VydF9sdGUoaW50ZWxfYnVmX3dpZHRoKGRzdCksIDIwNDgpOworCQlpZ3Rf YXNzZXJ0X2x0ZShpbnRlbF9idWZfaGVpZ2h0KGRzdCksIDIwNDgpOwogCiAJCXN3aXRjaCAoZHN0 LT5icHApIHsKIAkJCWNhc2UgODogZm9ybWF0X2JpdHMgPSBDT0xSX0JVRl84QklUOyBicmVhazsK QEAgLTE0NCw4MSArMTUxLDgzIEBAIHZvaWQgZ2VuM19yZW5kZXJfY29weWZ1bmMoc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKIAkJaWYgKGRzdC0+dGlsaW5nID09IEk5MTVfVElMSU5H X1kpCiAJCQl0aWxpbmdfYml0cyB8PSBCVUZfM0RfVElMRV9XQUxLX1k7CiAKLQkJT1VUX0JBVENI KF8zRFNUQVRFX0JVRl9JTkZPX0NNRCk7Ci0JCU9VVF9CQVRDSChCVUZfM0RfSURfQ09MT1JfQkFD SyB8IHRpbGluZ19iaXRzIHwKLQkJCSAgQlVGXzNEX1BJVENIKGRzdC0+c3VyZmFjZVswXS5zdHJp ZGUpKTsKLQkJT1VUX1JFTE9DKGRzdC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIsIEk5MTVf R0VNX0RPTUFJTl9SRU5ERVIsIDApOworCQlpbnRlbF9iYl9vdXQoaWJiLCBfM0RTVEFURV9CVUZf SU5GT19DTUQpOworCQlpbnRlbF9iYl9vdXQoaWJiLCBCVUZfM0RfSURfQ09MT1JfQkFDSyB8IHRp bGluZ19iaXRzIHwKKwkJCSAgICAgQlVGXzNEX1BJVENIKGRzdC0+c3VyZmFjZVswXS5zdHJpZGUp KTsKKwkJaW50ZWxfYmJfZW1pdF9yZWxvYyhpYmIsIGRzdC0+aGFuZGxlLAorCQkJCSAgICBJOTE1 X0dFTV9ET01BSU5fUkVOREVSLCBJOTE1X0dFTV9ET01BSU5fUkVOREVSLAorCQkJCSAgICAwLCBk c3QtPmFkZHIub2Zmc2V0KTsKIAotCQlPVVRfQkFUQ0goXzNEU1RBVEVfRFNUX0JVRl9WQVJTX0NN RCk7Ci0JCU9VVF9CQVRDSChmb3JtYXRfYml0cyB8Ci0JCQkgIERTVE9SR19IT1JUX0JJQVMoMHg4 KSB8Ci0JCQkgIERTVE9SR19WRVJUX0JJQVMoMHg4KSk7CisJCWludGVsX2JiX291dChpYmIsIF8z RFNUQVRFX0RTVF9CVUZfVkFSU19DTUQpOworCQlpbnRlbF9iYl9vdXQoaWJiLCBmb3JtYXRfYml0 cyB8CisJCQkgICAgIERTVE9SR19IT1JUX0JJQVMoMHg4KSB8CisJCQkgICAgIERTVE9SR19WRVJU X0JJQVMoMHg4KSk7CiAKIAkJLyogZHJhdyByZWN0IGlzIHVuY29uZGl0aW9uYWwgKi8KLQkJT1VU X0JBVENIKF8zRFNUQVRFX0RSQVdfUkVDVF9DTUQpOwotCQlPVVRfQkFUQ0goMHgwMDAwMDAwMCk7 Ci0JCU9VVF9CQVRDSCgweDAwMDAwMDAwKTsJLyogeW1pbiwgeG1pbiAqLwotCQlPVVRfQkFUQ0go RFJBV19ZTUFYKGlndF9idWZfaGVpZ2h0KGRzdCkgLSAxKSB8Ci0JCQkgIERSQVdfWE1BWChpZ3Rf YnVmX3dpZHRoKGRzdCkgLSAxKSk7CisJCWludGVsX2JiX291dChpYmIsIF8zRFNUQVRFX0RSQVdf UkVDVF9DTUQpOworCQlpbnRlbF9iYl9vdXQoaWJiLCAweDAwMDAwMDAwKTsKKwkJaW50ZWxfYmJf b3V0KGliYiwgMHgwMDAwMDAwMCk7CS8qIHltaW4sIHhtaW4gKi8KKwkJaW50ZWxfYmJfb3V0KGli YiwgRFJBV19ZTUFYKGludGVsX2J1Zl9oZWlnaHQoZHN0KSAtIDEpIHwKKwkJCSAgICAgRFJBV19Y TUFYKGludGVsX2J1Zl93aWR0aChkc3QpIC0gMSkpOwogCQkvKiB5b3JpZywgeG9yaWcgKHJlbGF0 ZSB0byBjb2xvciBidWZmZXI/KSAqLwotCQlPVVRfQkFUQ0goMHgwMDAwMDAwMCk7CisJCWludGVs X2JiX291dChpYmIsIDB4MDAwMDAwMDApOwogCX0KIAogCS8qIHRleGZtdCAqLwogCXsKLQkJT1VU X0JBVENIKF8zRFNUQVRFX0xPQURfU1RBVEVfSU1NRURJQVRFXzEgfAotCQkJICBJMV9MT0FEX1Mo MSkgfCBJMV9MT0FEX1MoMikgfCBJMV9MT0FEX1MoNikgfCAyKTsKLQkJT1VUX0JBVENIKCg0IDw8 IFMxX1ZFUlRFWF9XSURUSF9TSElGVCkgfAotCQkJICAoNCA8PCBTMV9WRVJURVhfUElUQ0hfU0hJ RlQpKTsKLQkJT1VUX0JBVENIKH5TMl9URVhDT09SRF9GTVQoMCwgVEVYQ09PUkRGTVRfTk9UX1BS RVNFTlQpIHwgUzJfVEVYQ09PUkRfRk1UKDAsIFRFWENPT1JERk1UXzJEKSk7Ci0JCU9VVF9CQVRD SChTNl9DQlVGX0JMRU5EX0VOQUJMRSB8IFM2X0NPTE9SX1dSSVRFX0VOQUJMRSB8Ci0JCQkgIEJM RU5ERlVOQ19BREQgPDwgUzZfQ0JVRl9CTEVORF9GVU5DX1NISUZUIHwKLQkJCSAgQkxFTkRGQUNU X09ORSA8PCBTNl9DQlVGX1NSQ19CTEVORF9GQUNUX1NISUZUIHwKLQkJCSAgQkxFTkRGQUNUX1pF Uk8gPDwgUzZfQ0JVRl9EU1RfQkxFTkRfRkFDVF9TSElGVCk7CisJCWludGVsX2JiX291dChpYmIs IF8zRFNUQVRFX0xPQURfU1RBVEVfSU1NRURJQVRFXzEgfAorCQkJICAgICBJMV9MT0FEX1MoMSkg fCBJMV9MT0FEX1MoMikgfCBJMV9MT0FEX1MoNikgfCAyKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwg KDQgPDwgUzFfVkVSVEVYX1dJRFRIX1NISUZUKSB8CisJCQkgICAgICg0IDw8IFMxX1ZFUlRFWF9Q SVRDSF9TSElGVCkpOworCQlpbnRlbF9iYl9vdXQoaWJiLCB+UzJfVEVYQ09PUkRfRk1UKDAsIFRF WENPT1JERk1UX05PVF9QUkVTRU5UKSB8IFMyX1RFWENPT1JEX0ZNVCgwLCBURVhDT09SREZNVF8y RCkpOworCQlpbnRlbF9iYl9vdXQoaWJiLCBTNl9DQlVGX0JMRU5EX0VOQUJMRSB8IFM2X0NPTE9S X1dSSVRFX0VOQUJMRSB8CisJCQkgICAgIEJMRU5ERlVOQ19BREQgPDwgUzZfQ0JVRl9CTEVORF9G VU5DX1NISUZUIHwKKwkJCSAgICAgQkxFTkRGQUNUX09ORSA8PCBTNl9DQlVGX1NSQ19CTEVORF9G QUNUX1NISUZUIHwKKwkJCSAgICAgQkxFTkRGQUNUX1pFUk8gPDwgUzZfQ0JVRl9EU1RfQkxFTkRf RkFDVF9TSElGVCk7CiAJfQogCiAJLyogZnJhZ2Ugc2hhZGVyICovCiAJewotCQlPVVRfQkFUQ0go XzNEU1RBVEVfUElYRUxfU0hBREVSX1BST0dSQU0gfCAoMSArIDMqMyAtIDIpKTsKKwkJaW50ZWxf YmJfb3V0KGliYiwgXzNEU1RBVEVfUElYRUxfU0hBREVSX1BST0dSQU0gfCAoMSArIDMqMyAtIDIp KTsKIAkJLyogZGVjbCBGU19UMCAqLwotCQlPVVRfQkFUQ0goRDBfRENMIHwKLQkJCSAgUkVHX1RZ UEUoRlNfVDApIDw8IEQwX1RZUEVfU0hJRlQgfAotCQkJICBSRUdfTlIoRlNfVDApIDw8IEQwX05S X1NISUZUIHwKLQkJCSAgKChSRUdfVFlQRShGU19UMCkgIT0gUkVHX1RZUEVfUykgPyBEMF9DSEFO TkVMX0FMTCA6IDApKTsKLQkJT1VUX0JBVENIKDApOwotCQlPVVRfQkFUQ0goMCk7CisJCWludGVs X2JiX291dChpYmIsIEQwX0RDTCB8CisJCQkgICAgIFJFR19UWVBFKEZTX1QwKSA8PCBEMF9UWVBF X1NISUZUIHwKKwkJCSAgICAgUkVHX05SKEZTX1QwKSA8PCBEMF9OUl9TSElGVCB8CisJCQkgICAg ICgoUkVHX1RZUEUoRlNfVDApICE9IFJFR19UWVBFX1MpID8gRDBfQ0hBTk5FTF9BTEwgOiAwKSk7 CisJCWludGVsX2JiX291dChpYmIsIDApOworCQlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIAkJLyog ZGVjbCBGU19TMCAqLwotCQlPVVRfQkFUQ0goRDBfRENMIHwKLQkJCSAgKFJFR19UWVBFKEZTX1Mw KSA8PCBEMF9UWVBFX1NISUZUKSB8Ci0JCQkgIChSRUdfTlIoRlNfUzApIDw8IEQwX05SX1NISUZU KSB8Ci0JCQkgICgoUkVHX1RZUEUoRlNfUzApICE9IFJFR19UWVBFX1MpID8gRDBfQ0hBTk5FTF9B TEwgOiAwKSk7Ci0JCU9VVF9CQVRDSCgwKTsKLQkJT1VUX0JBVENIKDApOworCQlpbnRlbF9iYl9v dXQoaWJiLCBEMF9EQ0wgfAorCQkJICAgICAoUkVHX1RZUEUoRlNfUzApIDw8IEQwX1RZUEVfU0hJ RlQpIHwKKwkJCSAgICAgKFJFR19OUihGU19TMCkgPDwgRDBfTlJfU0hJRlQpIHwKKwkJCSAgICAg KChSRUdfVFlQRShGU19TMCkgIT0gUkVHX1RZUEVfUykgPyBEMF9DSEFOTkVMX0FMTCA6IDApKTsK KwkJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJCWludGVsX2JiX291dChpYmIsIDApOwogCQkvKiB0 ZXhsZChGU19PQywgRlNfUzAsIEZTX1QwICovCi0JCU9VVF9CQVRDSChUMF9URVhMRCB8Ci0JCQkg IChSRUdfVFlQRShGU19PQykgPDwgVDBfREVTVF9UWVBFX1NISUZUKSB8Ci0JCQkgIChSRUdfTlIo RlNfT0MpIDw8IFQwX0RFU1RfTlJfU0hJRlQpIHwKLQkJCSAgKFJFR19OUihGU19TMCkgPDwgVDBf U0FNUExFUl9OUl9TSElGVCkpOwotCQlPVVRfQkFUQ0goKFJFR19UWVBFKEZTX1QwKSA8PCBUMV9B RERSRVNTX1JFR19UWVBFX1NISUZUKSB8Ci0JCQkgIChSRUdfTlIoRlNfVDApIDw8IFQxX0FERFJF U1NfUkVHX05SX1NISUZUKSk7Ci0JCU9VVF9CQVRDSCgwKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwg VDBfVEVYTEQgfAorCQkJICAgICAoUkVHX1RZUEUoRlNfT0MpIDw8IFQwX0RFU1RfVFlQRV9TSElG VCkgfAorCQkJICAgICAoUkVHX05SKEZTX09DKSA8PCBUMF9ERVNUX05SX1NISUZUKSB8CisJCQkg ICAgIChSRUdfTlIoRlNfUzApIDw8IFQwX1NBTVBMRVJfTlJfU0hJRlQpKTsKKwkJaW50ZWxfYmJf b3V0KGliYiwgKFJFR19UWVBFKEZTX1QwKSA8PCBUMV9BRERSRVNTX1JFR19UWVBFX1NISUZUKSB8 CisJCQkgICAgIChSRUdfTlIoRlNfVDApIDw8IFQxX0FERFJFU1NfUkVHX05SX1NISUZUKSk7CisJ CWludGVsX2JiX291dChpYmIsIDApOwogCX0KIAotCU9VVF9CQVRDSChQUklNM0RfUkVDVExJU1Qg fCAoMyo0IC0gMSkpOwotCWVtaXRfdmVydGV4KGJhdGNoLCBkc3RfeCArIHdpZHRoKTsKLQllbWl0 X3ZlcnRleChiYXRjaCwgZHN0X3kgKyBoZWlnaHQpOwotCWVtaXRfdmVydGV4KGJhdGNoLCBzcmNf eCArIHdpZHRoKTsKLQllbWl0X3ZlcnRleChiYXRjaCwgc3JjX3kgKyBoZWlnaHQpOworCWludGVs X2JiX291dChpYmIsIFBSSU0zRF9SRUNUTElTVCB8ICgzKjQgLSAxKSk7CisJZW1pdF92ZXJ0ZXgo aWJiLCBkc3RfeCArIHdpZHRoKTsKKwllbWl0X3ZlcnRleChpYmIsIGRzdF95ICsgaGVpZ2h0KTsK KwllbWl0X3ZlcnRleChpYmIsIHNyY194ICsgd2lkdGgpOworCWVtaXRfdmVydGV4KGliYiwgc3Jj X3kgKyBoZWlnaHQpOwogCi0JZW1pdF92ZXJ0ZXgoYmF0Y2gsIGRzdF94KTsKLQllbWl0X3ZlcnRl eChiYXRjaCwgZHN0X3kgKyBoZWlnaHQpOwotCWVtaXRfdmVydGV4KGJhdGNoLCBzcmNfeCk7Ci0J ZW1pdF92ZXJ0ZXgoYmF0Y2gsIHNyY195ICsgaGVpZ2h0KTsKKwllbWl0X3ZlcnRleChpYmIsIGRz dF94KTsKKwllbWl0X3ZlcnRleChpYmIsIGRzdF95ICsgaGVpZ2h0KTsKKwllbWl0X3ZlcnRleChp YmIsIHNyY194KTsKKwllbWl0X3ZlcnRleChpYmIsIHNyY195ICsgaGVpZ2h0KTsKIAotCWVtaXRf dmVydGV4KGJhdGNoLCBkc3RfeCk7Ci0JZW1pdF92ZXJ0ZXgoYmF0Y2gsIGRzdF95KTsKLQllbWl0 X3ZlcnRleChiYXRjaCwgc3JjX3gpOwotCWVtaXRfdmVydGV4KGJhdGNoLCBzcmNfeSk7CisJZW1p dF92ZXJ0ZXgoaWJiLCBkc3RfeCk7CisJZW1pdF92ZXJ0ZXgoaWJiLCBkc3RfeSk7CisJZW1pdF92 ZXJ0ZXgoaWJiLCBzcmNfeCk7CisJZW1pdF92ZXJ0ZXgoaWJiLCBzcmNfeSk7CiAKLQlpbnRlbF9i YXRjaGJ1ZmZlcl9mbHVzaChiYXRjaCk7CisJaW50ZWxfYmJfZmx1c2hfYmxpdF93aXRoX2NvbnRl eHQoaWJiLCBjdHgpOwogfQpkaWZmIC0tZ2l0IGEvbGliL3ZlYm94Y29weS5oIGIvbGliL3ZlYm94 Y29weS5oCmluZGV4IDk0OWQ4M2JmLi45MjViOGY1MiAxMDA2NDQKLS0tIGEvbGliL3ZlYm94Y29w eS5oCisrKyBiL2xpYi92ZWJveGNvcHkuaApAQCAtMSw5ICsxLDkgQEAKICNpZm5kZWYgX19WRUJP WENPUFlfSF9fCiAjZGVmaW5lIF9fVkVCT1hDT1BZX0hfXwogCi12b2lkIGdlbjEyX3ZlYm94X2Nv cHlmdW5jKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCQkgIGNvbnN0IHN0cnVj dCBpZ3RfYnVmICpzcmMsCi0JCQkgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsCi0J CQkgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpkc3QpOwordm9pZCBnZW4xMl92ZWJveF9jb3B5ZnVu YyhzdHJ1Y3QgaW50ZWxfYmIgKmliYiwKKwkJCSAgc3RydWN0IGludGVsX2J1ZiAqc3JjLAorCQkJ ICB1bnNpZ25lZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQsCisJCQkgIHN0cnVjdCBp bnRlbF9idWYgKmRzdCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliL3ZlYm94Y29weV9nZW4x Mi5jIGIvbGliL3ZlYm94Y29weV9nZW4xMi5jCmluZGV4IDIzN2M0M2YyLi5hNDRlMmJmZiAxMDA2 NDQKLS0tIGEvbGliL3ZlYm94Y29weV9nZW4xMi5jCisrKyBiL2xpYi92ZWJveGNvcHlfZ2VuMTIu YwpAQCAtMTQ0LDcgKzE0NCw3IEBAIHN0YXRpYyBib29sIGZvcm1hdF9pc19pbnRlcmxlYXZlZF95 dXYoaW50IGZvcm1hdCkKIAlyZXR1cm4gZmFsc2U7CiB9CiAKLXN0YXRpYyB2b2lkIGVtaXRfc3Vy ZmFjZV9zdGF0ZV9jbWQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKK3N0YXRpYyB2 b2lkIGVtaXRfc3VyZmFjZV9zdGF0ZV9jbWQoc3RydWN0IGludGVsX2JiICppYmIsCiAJCQkJICAg aW50IHN1cmZhY2VfaWQsCiAJCQkJICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LCBpbnQgYnBwLAog CQkJCSAgIGludCBwaXRjaCwgdWludDMyX3QgdGlsaW5nLCBpbnQgZm9ybWF0LApAQCAtMTUyLDcg KzE1Miw3IEBAIHN0YXRpYyB2b2lkIGVtaXRfc3VyZmFjZV9zdGF0ZV9jbWQoc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCwKIHsKIAlzdHJ1Y3QgdmVib3hfc3VyZmFjZV9zdGF0ZSAqc3M7 CiAKLQlzcyA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfYWxsb2MoYmF0Y2gsIHNpemVvZigq c3MpLCA0KTsKKwlzcyA9IGludGVsX2JiX3B0cl9hbGlnbihpYmIsIDQpOwogCiAJc3MtPnNzMC5j bWRfdHlwZSA9IDM7CiAJc3MtPnNzMC5tZWRpYV9jbWRfcGlwZWxpbmUgPSAyOwpAQCAtMTc1LDIx ICsxNzUsMTkgQEAgc3RhdGljIHZvaWQgZW1pdF9zdXJmYWNlX3N0YXRlX2NtZChzdHJ1Y3QgaW50 ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAogCXNzLT5zczQudV95X29mZnNldCA9IHV2X29mZnNldCAv IHBpdGNoOwogCiAJc3MtPnNzNy5kZXJpdmVkX3N1cmZhY2VfcGl0Y2ggPSBwaXRjaCAtIDE7CisK KwlpbnRlbF9iYl9wdHJfYWRkKGliYiwgc2l6ZW9mKCpzcykpOwogfQogCi1zdGF0aWMgdm9pZCBl bWl0X3RpbGluZ19jb252ZXJ0X2NtZChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAot CQkJCSAgICBkcm1faW50ZWxfYm8gKmlucHV0X2JvLAotCQkJCSAgICB1aW50MzJfdCBpbnB1dF90 aWxpbmcsCi0JCQkJICAgIHVpbnQzMl90IGlucHV0X2NvbXByZXNzaW9uLAotCQkJCSAgICBkcm1f aW50ZWxfYm8gKm91dHB1dF9ibywKLQkJCQkgICAgdWludDMyX3Qgb3V0cHV0X3RpbGluZywKLQkJ CQkgICAgdWludDMyX3Qgb3V0cHV0X2NvbXByZXNzaW9uKQorc3RhdGljIHZvaWQgZW1pdF90aWxp bmdfY29udmVydF9jbWQoc3RydWN0IGludGVsX2JiICppYmIsCisJCQkJICAgIHN0cnVjdCBpbnRl bF9idWYgKnNyYywKKwkJCQkgICAgc3RydWN0IGludGVsX2J1ZiAqZHN0KQogewotCXVpbnQzMl90 IHJlbG9jX2RlbHRhOworCXVpbnQzMl90IHJlbG9jX2RlbHRhLCB0Y19vZmZzZXQsIG9mZnNldDsK IAlzdHJ1Y3QgdmVib3hfdGlsaW5nX2NvbnZlcnQgKnRjOwotCWludCByZXQ7CiAKLQl0YyA9IGlu dGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfYWxsb2MoYmF0Y2gsIHNpemVvZigqdGMpLCA4KTsKKwl0 YyA9IGludGVsX2JiX3B0cl9hbGlnbihpYmIsIDgpOworCXRjX29mZnNldCA9IGludGVsX2JiX29m ZnNldChpYmIpOwogCiAJdGMtPnRjMC5jbWRfdHlwZSA9IDM7CiAJdGMtPnRjMC5waXBlbGluZSA9 IDI7CkBAIC0xOTgsNzEgKzE5Niw3MCBAQCBzdGF0aWMgdm9pZCBlbWl0X3RpbGluZ19jb252ZXJ0 X2NtZChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAogCiAJdGMtPnRjMC5kd19jb3Vu dCA9IDM7CiAKLQlpZiAoaW5wdXRfY29tcHJlc3Npb24gIT0gSTkxNV9DT01QUkVTU0lPTl9OT05F KSB7CisJaWYgKHNyYy0+Y29tcHJlc3Npb24gIT0gSTkxNV9DT01QUkVTU0lPTl9OT05FKSB7CiAJ CXRjLT50YzFfMi5pbnB1dF9tZW1vcnlfY29tcHJlc3Npb25fZW5hYmxlID0gMTsKIAkJdGMtPnRj MV8yLmlucHV0X2NvbXByZXNzaW9uX3R5cGUgPQotCQkJaW5wdXRfY29tcHJlc3Npb24gPT0gSTkx NV9DT01QUkVTU0lPTl9SRU5ERVI7CisJCQlzcmMtPmNvbXByZXNzaW9uID09IEk5MTVfQ09NUFJF U1NJT05fUkVOREVSOwogCX0KLQl0Yy0+dGMxXzIuaW5wdXRfdGlsZWRfcmVzb3VyY2VfbW9kZSA9 IGlucHV0X3RpbGluZyA9PSBJOTE1X1RJTElOR19ZZjsKKwl0Yy0+dGMxXzIuaW5wdXRfdGlsZWRf cmVzb3VyY2VfbW9kZSA9IHNyYy0+dGlsaW5nID09IEk5MTVfVElMSU5HX1lmOwogCXJlbG9jX2Rl bHRhID0gdGMtPnRjMV8yX2w7CiAKLQlpZ3RfYXNzZXJ0KGlucHV0X2JvLT5vZmZzZXQ2NCA9PSBB TElHTihpbnB1dF9iby0+b2Zmc2V0NjQsIDB4MTAwMCkpOwotCXRjLT50YzFfMi5pbnB1dF9hZGRy ZXNzID0gaW5wdXRfYm8tPm9mZnNldDY0ID4+IDEyOworCWlndF9hc3NlcnQoc3JjLT5hZGRyLm9m ZnNldCA9PSBBTElHTihzcmMtPmFkZHIub2Zmc2V0LCAweDEwMDApKTsKKwl0Yy0+dGMxXzIuaW5w dXRfYWRkcmVzcyA9IHNyYy0+YWRkci5vZmZzZXQgPj4gMTI7CiAJaWd0X2Fzc2VydChyZWxvY19k ZWx0YSA8PSBJTlQzMl9NQVgpOwotCXJldCA9IGRybV9pbnRlbF9ib19lbWl0X3JlbG9jKGJhdGNo LT5ibywKLQkJCQkgICAgICBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX29mZnNldChiYXRjaCwg dGMpICsKLQkJCQkJb2Zmc2V0b2YodHlwZW9mKCp0YyksIHRjMV8yKSwKLQkJCQkgICAgICBpbnB1 dF9ibywgcmVsb2NfZGVsdGEsCi0JCQkJICAgICAgMCwgMCk7Ci0JaWd0X2Fzc2VydChyZXQgPT0g MCk7Ci0KLQlpZiAob3V0cHV0X2NvbXByZXNzaW9uICE9IEk5MTVfQ09NUFJFU1NJT05fTk9ORSkg eworCisJb2Zmc2V0ID0gdGNfb2Zmc2V0ICsgb2Zmc2V0b2YodHlwZW9mKCp0YyksIHRjMV8yKTsK KwlpbnRlbF9iYl9vZmZzZXRfcmVsb2Nfd2l0aF9kZWx0YShpYmIsIHNyYy0+aGFuZGxlLCAwLCAw LAorCQkJCQkgcmVsb2NfZGVsdGEsIG9mZnNldCwKKwkJCQkJIHNyYy0+YWRkci5vZmZzZXQpOwor CisJaWYgKGRzdC0+Y29tcHJlc3Npb24gIT0gSTkxNV9DT01QUkVTU0lPTl9OT05FKSB7CiAJCXRj LT50YzNfNC5vdXRwdXRfbWVtb3J5X2NvbXByZXNzaW9uX2VuYWJsZSA9IDE7CiAJCXRjLT50YzNf NC5vdXRwdXRfY29tcHJlc3Npb25fdHlwZSA9Ci0JCQlvdXRwdXRfY29tcHJlc3Npb24gPT0gSTkx NV9DT01QUkVTU0lPTl9SRU5ERVI7CisJCQlkc3QtPmNvbXByZXNzaW9uID09IEk5MTVfQ09NUFJF U1NJT05fUkVOREVSOwogCX0KLQl0Yy0+dGMzXzQub3V0cHV0X3RpbGVkX3Jlc291cmNlX21vZGUg PSBvdXRwdXRfdGlsaW5nID09IEk5MTVfVElMSU5HX1lmOworCXRjLT50YzNfNC5vdXRwdXRfdGls ZWRfcmVzb3VyY2VfbW9kZSA9IGRzdC0+dGlsaW5nID09IEk5MTVfVElMSU5HX1lmOwogCXJlbG9j X2RlbHRhID0gdGMtPnRjM180X2w7CiAKLQlpZ3RfYXNzZXJ0KG91dHB1dF9iby0+b2Zmc2V0NjQg PT0gQUxJR04ob3V0cHV0X2JvLT5vZmZzZXQ2NCwgMHgxMDAwKSk7Ci0JdGMtPnRjM180Lm91dHB1 dF9hZGRyZXNzID0gb3V0cHV0X2JvLT5vZmZzZXQ2NCA+PiAxMjsKKwlpZ3RfYXNzZXJ0KGRzdC0+ YWRkci5vZmZzZXQgPT0gQUxJR04oZHN0LT5hZGRyLm9mZnNldCwgMHgxMDAwKSk7CisJdGMtPnRj M180Lm91dHB1dF9hZGRyZXNzID0gZHN0LT5hZGRyLm9mZnNldCA+PiAxMjsKIAlpZ3RfYXNzZXJ0 KHJlbG9jX2RlbHRhIDw9IElOVDMyX01BWCk7Ci0JcmV0ID0gZHJtX2ludGVsX2JvX2VtaXRfcmVs b2MoYmF0Y2gtPmJvLAotCQkJCSAgICAgIGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0 KGJhdGNoLCB0YykgKwotCQkJCQlvZmZzZXRvZih0eXBlb2YoKnRjKSwgdGMzXzQpLAotCQkJCSAg ICAgIG91dHB1dF9ibywgcmVsb2NfZGVsdGEsCi0JCQkJICAgICAgMCwgSTkxNV9HRU1fRE9NQUlO X1JFTkRFUik7Ci0JaWd0X2Fzc2VydChyZXQgPT0gMCk7CiAKKwlvZmZzZXQgPSB0Y19vZmZzZXQg KyBvZmZzZXRvZih0eXBlb2YoKnRjKSwgdGMzXzQpOworCWludGVsX2JiX29mZnNldF9yZWxvY193 aXRoX2RlbHRhKGliYiwgZHN0LT5oYW5kbGUsCisJCQkJCSAwLCBJOTE1X0dFTV9ET01BSU5fUkVO REVSLAorCQkJCQkgcmVsb2NfZGVsdGEsIG9mZnNldCwKKwkJCQkJIGRzdC0+YWRkci5vZmZzZXQp OworCisJaW50ZWxfYmJfcHRyX2FkZChpYmIsIHNpemVvZigqdGMpKTsKIH0KIAogLyogQm9ycm93 aW5nIHRoZSBpZGVhIGZyb20gdGhlIHJlbmRlcmNvcHkgc3RhdGUgc2V0dXAuICovCiAjZGVmaW5l IEJBVENIX1NUQVRFX1NQTElUIDIwNDgKIAotdm9pZCBnZW4xMl92ZWJveF9jb3B5ZnVuYyhzdHJ1 Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAq c3JjLAotCQkJICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LAotCQkJICBjb25zdCBz dHJ1Y3QgaWd0X2J1ZiAqZHN0KQordm9pZCBnZW4xMl92ZWJveF9jb3B5ZnVuYyhzdHJ1Y3QgaW50 ZWxfYmIgKmliYiwKKwkJCSAgc3RydWN0IGludGVsX2J1ZiAqc3JjLAorCQkJICB1bnNpZ25lZCBp bnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQsCisJCQkgIHN0cnVjdCBpbnRlbF9idWYgKmRz dCkKIHsKIAlzdHJ1Y3QgYXV4X3BndGFibGVfaW5mbyBhdXhfcGd0YWJsZV9pbmZvID0geyB9Owog CXVpbnQzMl90IGF1eF9wZ3RhYmxlX3N0YXRlOwogCWludCBmb3JtYXQ7CiAKLQlpbnRlbF9iYXRj aGJ1ZmZlcl9mbHVzaF9vbl9yaW5nKGJhdGNoLCBJOTE1X0VYRUNfVkVCT1gpOworCWlndF9hc3Nl cnQoc3JjLT5icHAgPT0gZHN0LT5icHApOwogCi0JaW50ZWxfYmF0Y2hidWZmZXJfYWxpZ24oYmF0 Y2gsIDgpOworCWludGVsX2JiX2ZsdXNoKGliYiwgaWJiLT5jdHgsIEk5MTVfRVhFQ19WRUJPWCk7 CiAKLQliYXRjaC0+cHRyID0gJmJhdGNoLT5idWZmZXJbQkFUQ0hfU1RBVEVfU1BMSVRdOworCWlu dGVsX2JiX2FkZF9pbnRlbF9idWYoaWJiLCBkc3QsIHRydWUpOworCWludGVsX2JiX2FkZF9pbnRl bF9idWYoaWJiLCBzcmMsIGZhbHNlKTsKIAotCWdlbjEyX2F1eF9wZ3RhYmxlX2luaXQoJmF1eF9w Z3RhYmxlX2luZm8sIGJhdGNoLT5idWZtZ3IsIHNyYywgZHN0KTsKKwlpbnRlbF9iYl9wdHJfc2V0 KGliYiwgQkFUQ0hfU1RBVEVfU1BMSVQpOworCWdlbjEyX2F1eF9wZ3RhYmxlX2luaXQoJmF1eF9w Z3RhYmxlX2luZm8sIGliYiwgc3JjLCBkc3QpOworCWF1eF9wZ3RhYmxlX3N0YXRlID0gZ2VuMTJf Y3JlYXRlX2F1eF9wZ3RhYmxlX3N0YXRlKGliYiwKKwkJCQkJCQkgICBhdXhfcGd0YWJsZV9pbmZv LnBndGFibGVfYnVmKTsKIAotCWF1eF9wZ3RhYmxlX3N0YXRlID0gZ2VuMTJfY3JlYXRlX2F1eF9w Z3RhYmxlX3N0YXRlKGJhdGNoLAotCQkJCQkJCSAgIGF1eF9wZ3RhYmxlX2luZm8ucGd0YWJsZV9i byk7Ci0KLQlhc3NlcnQoYmF0Y2gtPnB0ciA8ICZiYXRjaC0+YnVmZmVyWzQwOTVdKTsKLQliYXRj aC0+cHRyID0gYmF0Y2gtPmJ1ZmZlcjsKLQotCWdlbjEyX2VtaXRfYXV4X3BndGFibGVfc3RhdGUo YmF0Y2gsIGF1eF9wZ3RhYmxlX3N0YXRlLCBmYWxzZSk7CisJaW50ZWxfYmJfcHRyX3NldChpYmIs IDApOworCWdlbjEyX2VtaXRfYXV4X3BndGFibGVfc3RhdGUoaWJiLCBhdXhfcGd0YWJsZV9zdGF0 ZSwgZmFsc2UpOwogCiAJLyogVGhlIHRpbGluZyBjb252ZXJ0IGNvbW1hbmQgY2FuJ3QgY29udmVy dCBmb3JtYXRzLiAqLwogCWlndF9hc3NlcnRfZXEoc3JjLT5mb3JtYXRfaXNfeXV2LCBkc3QtPmZv cm1hdF9pc195dXYpOwpAQCAtMjkyLDI0ICsyODksMjYgQEAgdm9pZCBnZW4xMl92ZWJveF9jb3B5 ZnVuYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAogCiAJaWd0X2Fzc2VydCghc3Jj LT5mb3JtYXRfaXNfeXV2X3NlbWlwbGFuYXIgfHwKIAkJICAgKHNyYy0+c3VyZmFjZVsxXS5vZmZz ZXQgJiYgZHN0LT5zdXJmYWNlWzFdLm9mZnNldCkpOwotCWVtaXRfc3VyZmFjZV9zdGF0ZV9jbWQo YmF0Y2gsIFZFQk9YX1NVUkZBQ0VfSU5QVVQsCisJZW1pdF9zdXJmYWNlX3N0YXRlX2NtZChpYmIs IFZFQk9YX1NVUkZBQ0VfSU5QVVQsCiAJCQkgICAgICAgd2lkdGgsIGhlaWdodCwgc3JjLT5icHAs CiAJCQkgICAgICAgc3JjLT5zdXJmYWNlWzBdLnN0cmlkZSwKIAkJCSAgICAgICBzcmMtPnRpbGlu ZywgZm9ybWF0LCBzcmMtPnN1cmZhY2VbMV0ub2Zmc2V0KTsKIAotCWVtaXRfc3VyZmFjZV9zdGF0 ZV9jbWQoYmF0Y2gsIFZFQk9YX1NVUkZBQ0VfT1VUUFVULAorCWVtaXRfc3VyZmFjZV9zdGF0ZV9j bWQoaWJiLCBWRUJPWF9TVVJGQUNFX09VVFBVVCwKIAkJCSAgICAgICB3aWR0aCwgaGVpZ2h0LCBk c3QtPmJwcCwKIAkJCSAgICAgICBkc3QtPnN1cmZhY2VbMF0uc3RyaWRlLAogCQkJICAgICAgIGRz dC0+dGlsaW5nLCBmb3JtYXQsIGRzdC0+c3VyZmFjZVsxXS5vZmZzZXQpOwogCi0JZW1pdF90aWxp bmdfY29udmVydF9jbWQoYmF0Y2gsCi0JCQkJc3JjLT5ibywgc3JjLT50aWxpbmcsIHNyYy0+Y29t cHJlc3Npb24sCi0JCQkJZHN0LT5ibywgZHN0LT50aWxpbmcsIGRzdC0+Y29tcHJlc3Npb24pOwor CWVtaXRfdGlsaW5nX2NvbnZlcnRfY21kKGliYiwgc3JjLCBkc3QpOworCisJaW50ZWxfYmJfb3V0 KGliYiwgTUlfQkFUQ0hfQlVGRkVSX0VORCk7CisJaW50ZWxfYmJfcHRyX2FsaWduKGliYiwgOCk7 CiAKLQlPVVRfQkFUQ0goTUlfQkFUQ0hfQlVGRkVSX0VORCk7CisJaW50ZWxfYmJfZXhlY193aXRo X2NvbnRleHQoaWJiLCBpbnRlbF9iYl9vZmZzZXQoaWJiKSwgMCwKKwkJCQkgICBJOTE1X0VYRUNf VkVCT1ggfCBJOTE1X0VYRUNfTk9fUkVMT0MsCisJCQkJICAgZmFsc2UpOwogCi0JaW50ZWxfYmF0 Y2hidWZmZXJfZmx1c2hfb25fcmluZyhiYXRjaCwgSTkxNV9FWEVDX1ZFQk9YKTsKKwlpbnRlbF9i Yl9yZXNldChpYmIsIGZhbHNlKTsKIAotCWdlbjEyX2F1eF9wZ3RhYmxlX2NsZWFudXAoJmF1eF9w Z3RhYmxlX2luZm8pOwotCWludGVsX2JhdGNoYnVmZmVyX3Jlc2V0KGJhdGNoKTsKKwlnZW4xMl9h dXhfcGd0YWJsZV9jbGVhbnVwKGliYiwgJmF1eF9wZ3RhYmxlX2luZm8pOwogfQotLSAKMi4yNi4w CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwppZ3QtZGV2 IG1haWxpbmcgbGlzdAppZ3QtZGV2QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2lndC1kZXYK