From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga09.intel.com (mga09.intel.com [134.134.136.24]) by gabe.freedesktop.org (Postfix) with ESMTPS id DA6F36E4B0 for ; Fri, 24 Jul 2020 06:40:59 +0000 (UTC) From: =?UTF-8?q?Zbigniew=20Kempczy=C5=84ski?= Date: Fri, 24 Jul 2020 08:40:35 +0200 Message-Id: <20200724064043.10172-5-zbigniew.kempczynski@intel.com> In-Reply-To: <20200724064043.10172-1-zbigniew.kempczynski@intel.com> References: <20200724064043.10172-1-zbigniew.kempczynski@intel.com> MIME-Version: 1.0 Subject: [igt-dev] [PATCH i-g-t v2 04/12] 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+Ci0tLQogbGliL2ludGVs X2F1eF9wZ3RhYmxlLmMgfCAgMzI1ICsrKysrLS0tLS0tCiBsaWIvaW50ZWxfYXV4X3BndGFibGUu aCB8ICAgMjkgKy0KIGxpYi9pbnRlbF9iYXRjaGJ1ZmZlci5oIHwgICA0MiArLQogbGliL3JlbmRl cmNvcHkuaCAgICAgICAgfCAgMTAyICsrLS0KIGxpYi9yZW5kZXJjb3B5X2dlbjQuYyAgIHwgIDU2 OCArKysrKysrKysrLS0tLS0tLS0tCiBsaWIvcmVuZGVyY29weV9nZW42LmMgICB8ICA1OTAgKysr KysrKysrKy0tLS0tLS0tLS0KIGxpYi9yZW5kZXJjb3B5X2dlbjcuYyAgIHwgIDYxMiArKysrKysr KysrLS0tLS0tLS0tLS0KIGxpYi9yZW5kZXJjb3B5X2dlbjguYyAgIHwgMTAzMCArKysrKysrKysr KysrKystLS0tLS0tLS0tLS0tLS0tLS0tLQogbGliL3JlbmRlcmNvcHlfZ2VuOS5jICAgfCAxMTQ1 ICsrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogbGliL3JlbmRlcmNvcHlf aTgzMC5jICAgfCAgMjc4ICsrKysrLS0tLS0KIGxpYi9yZW5kZXJjb3B5X2k5MTUuYyAgIHwgIDI4 MSArKysrKy0tLS0tCiBsaWIvdmVib3hjb3B5LmggICAgICAgICB8ICAgIDggKy0KIGxpYi92ZWJv eGNvcHlfZ2VuMTIuYyAgIHwgIDExNyArKy0tCiAxMyBmaWxlcyBjaGFuZ2VkLCAyNDIzIGluc2Vy dGlvbnMoKyksIDI3MDQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvbGliL2ludGVsX2F1eF9w Z3RhYmxlLmMgYi9saWIvaW50ZWxfYXV4X3BndGFibGUuYwppbmRleCBkYjUwNTVjOC4uYjQzYTM2 NmIgMTAwNjQ0Ci0tLSBhL2xpYi9pbnRlbF9hdXhfcGd0YWJsZS5jCisrKyBiL2xpYi9pbnRlbF9h dXhfcGd0YWJsZS5jCkBAIC00LDcgKzQsNyBAQAogI2luY2x1ZGUgImRybXRlc3QuaCIKICNpbmNs dWRlICJpbnRlbF9hdXhfcGd0YWJsZS5oIgogI2luY2x1ZGUgImludGVsX2JhdGNoYnVmZmVyLmgi Ci0jaW5jbHVkZSAiaW50ZWxfYnVmbWdyLmgiCisjaW5jbHVkZSAiaW50ZWxfYnVmb3BzLmgiCiAj aW5jbHVkZSAiaW9jdGxfd3JhcHBlcnMuaCIKIAogI2luY2x1ZGUgImk5MTUvZ2VtX21tYW4uaCIK QEAgLTMxLDggKzMxLDYgQEAKIAogI2RlZmluZSBHRlhfQUREUkVTU19CSVRTCTQ4CiAKLSNkZWZp bmUgbWF4KGEsIGIpCQkoKGEpID4gKGIpID8gKGEpIDogKGIpKQotCiAjZGVmaW5lIEFVWF9GT1JN QVRfWUNSQ0IJMHgwMwogI2RlZmluZSBBVVhfRk9STUFUX1AwMTAJCTB4MDcKICNkZWZpbmUgQVVY X0ZPUk1BVF9QMDE2CQkweDA4CkBAIC01OCwxMCArNTYsMTIgQEAgc3RydWN0IHBndGFibGUgewog CXN0cnVjdCBwZ3RhYmxlX2xldmVsX2luZm8gKmxldmVsX2luZm87CiAJaW50IHNpemU7CiAJaW50 IG1heF9hbGlnbjsKLQlkcm1faW50ZWxfYm8gKmJvOworCXN0cnVjdCBpbnRlbF9iYiAqaWJiOwor CXN0cnVjdCBpbnRlbF9idWYgKmJ1ZjsKKwl2b2lkICpwdHI7CiB9OwogCi1zdGF0aWMgdWludDY0 X3QgbGFzdF9idWZfc3VyZmFjZV9lbmQoY29uc3Qgc3RydWN0IGlndF9idWYgKmJ1ZikKK3N0YXRp YyB1aW50NjRfdCBsYXN0X2J1Zl9zdXJmYWNlX2VuZChzdHJ1Y3QgaW50ZWxfYnVmICpidWYpCiB7 CiAJdWludDY0X3QgZW5kX29mZnNldCA9IDA7CiAJaW50IG51bV9zdXJmYWNlcyA9IGJ1Zi0+Zm9y bWF0X2lzX3l1dl9zZW1pcGxhbmFyID8gMiA6IDE7CkBAIC03OSw3ICs3OSw3IEBAIHN0YXRpYyB1 aW50NjRfdCBsYXN0X2J1Zl9zdXJmYWNlX2VuZChjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmKQog fQogCiBzdGF0aWMgaW50Ci1wZ3RfdGFibGVfY291bnQoaW50IGFkZHJlc3NfYml0cywgY29uc3Qg c3RydWN0IGlndF9idWYgKipidWZzLCBpbnQgYnVmX2NvdW50KQorcGd0X3RhYmxlX2NvdW50KGlu dCBhZGRyZXNzX2JpdHMsIHN0cnVjdCBpbnRlbF9idWYgKipidWZzLCBpbnQgYnVmX2NvdW50KQog ewogCXVpbnQ2NF90IGVuZDsKIAlpbnQgY291bnQ7CkBAIC04OCwxOSArODgsMTkgQEAgcGd0X3Rh YmxlX2NvdW50KGludCBhZGRyZXNzX2JpdHMsIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICoqYnVmcywg aW50IGJ1Zl9jb3VudCkKIAljb3VudCA9IDA7CiAJZW5kID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwg YnVmX2NvdW50OyBpKyspIHsKLQkJY29uc3Qgc3RydWN0IGlndF9idWYgKmJ1ZiA9IGJ1ZnNbaV07 CisJCXN0cnVjdCBpbnRlbF9idWYgKmJ1ZiA9IGJ1ZnNbaV07CiAJCXVpbnQ2NF90IHN0YXJ0Owog CiAJCS8qIFdlIHJlcXVpcmUgYnVmcyB0byBiZSBzb3J0ZWQuICovCiAJCWlndF9hc3NlcnQoaSA9 PSAwIHx8Ci0JCQkgICBidWYtPmJvLT5vZmZzZXQ2NCA+PSBidWZzW2kgLSAxXS0+Ym8tPm9mZnNl dDY0ICsKLQkJCQkJCWJ1ZnNbaSAtIDFdLT5iby0+c2l6ZSk7CisJCQkgICBidWYtPmFkZHIub2Zm c2V0ID49IGJ1ZnNbaSAtIDFdLT5hZGRyLm9mZnNldCArCisJCQkJCSAgICAgICBpbnRlbF9idWZf Ym9fc2l6ZShidWZzW2kgLSAxXSkpOwogCi0JCXN0YXJ0ID0gQUxJR05fRE9XTihidWYtPmJvLT5v ZmZzZXQ2NCwgMVVMIDw8IGFkZHJlc3NfYml0cyk7CisJCXN0YXJ0ID0gQUxJR05fRE9XTihidWYt PmFkZHIub2Zmc2V0LCAxVUwgPDwgYWRkcmVzc19iaXRzKTsKIAkJLyogQXZvaWQgZG91YmxlIGNv dW50aW5nIGZvciBvdmVybGFwcGluZyBhbGlnbmVkIGJ1ZnMuICovCiAJCXN0YXJ0ID0gbWF4KHN0 YXJ0LCBlbmQpOwogCi0JCWVuZCA9IEFMSUdOKGJ1Zi0+Ym8tPm9mZnNldDY0ICsgbGFzdF9idWZf c3VyZmFjZV9lbmQoYnVmKSwKKwkJZW5kID0gQUxJR04oYnVmLT5hZGRyLm9mZnNldCArIGxhc3Rf YnVmX3N1cmZhY2VfZW5kKGJ1ZiksCiAJCQkgICAgMVVMIDw8IGFkZHJlc3NfYml0cyk7CiAJCWln dF9hc3NlcnQoZW5kID49IHN0YXJ0KTsKIApAQCAtMTExLDcgKzExMSw3IEBAIHBndF90YWJsZV9j b3VudChpbnQgYWRkcmVzc19iaXRzLCBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqKmJ1ZnMsIGludCBi dWZfY291bnQpCiB9CiAKIHN0YXRpYyB2b2lkCi1wZ3RfY2FsY19zaXplKHN0cnVjdCBwZ3RhYmxl ICpwZ3QsIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICoqYnVmcywgaW50IGJ1Zl9jb3VudCkKK3BndF9j YWxjX3NpemUoc3RydWN0IHBndGFibGUgKnBndCwgc3RydWN0IGludGVsX2J1ZiAqKmJ1ZnMsIGlu dCBidWZfY291bnQpCiB7CiAJaW50IGxldmVsOwogCkBAIC0xNzEsMjggKzE3MSwzMyBAQCBwZ3Rf Z2V0X2NoaWxkX3RhYmxlKHN0cnVjdCBwZ3RhYmxlICpwZ3QsIHVpbnQ2NF90IHBhcmVudF90YWJs ZSwKIAl1aW50NjRfdCAqY2hpbGRfZW50cnlfcHRyOwogCXVpbnQ2NF90IGNoaWxkX3RhYmxlOwog Ci0JcGFyZW50X3RhYmxlX3B0ciA9IHBndC0+Ym8tPnZpcnR1YWwgKyBwYXJlbnRfdGFibGU7CisJ cGFyZW50X3RhYmxlX3B0ciA9IHBndC0+cHRyICsgcGFyZW50X3RhYmxlOwogCWNoaWxkX2VudHJ5 X2lkeCA9IHBndF9lbnRyeV9pbmRleChwZ3QsIGxldmVsLCBhZGRyZXNzKTsKIAljaGlsZF9lbnRy eV9wdHIgPSAmcGFyZW50X3RhYmxlX3B0cltjaGlsZF9lbnRyeV9pZHhdOwogCiAJaWYgKCEqY2hp bGRfZW50cnlfcHRyKSB7CiAJCXVpbnQ2NF90IHB0ZTsKKwkJdWludDMyX3Qgb2Zmc2V0OwogCiAJ CWNoaWxkX3RhYmxlID0gcGd0X2FsbG9jX3RhYmxlKHBndCwgbGV2ZWwgLSAxKTsKLQkJaWd0X2Fz c2VydCghKChjaGlsZF90YWJsZSArIHBndC0+Ym8tPm9mZnNldDY0KSAmCisJCWlndF9hc3NlcnQo ISgoY2hpbGRfdGFibGUgKyBwZ3QtPmJ1Zi0+YWRkci5vZmZzZXQpICYKIAkJCSAgICAgfnB0cl9t YXNrKHBndCwgbGV2ZWwpKSk7CiAKIAkJcHRlID0gY2hpbGRfdGFibGUgfCBmbGFnczsKLQkJKmNo aWxkX2VudHJ5X3B0ciA9IHBndC0+Ym8tPm9mZnNldDY0ICsgcHRlOworCQkqY2hpbGRfZW50cnlf cHRyID0gcGd0LT5idWYtPmFkZHIub2Zmc2V0ICsgcHRlOwogCiAJCWlndF9hc3NlcnQocHRlIDw9 IElOVDMyX01BWCk7Ci0JCWRybV9pbnRlbF9ib19lbWl0X3JlbG9jKHBndC0+Ym8sCi0JCQkJCXBh cmVudF90YWJsZSArCi0JCQkJCQljaGlsZF9lbnRyeV9pZHggKiBzaXplb2YodWludDY0X3QpLAot CQkJCQlwZ3QtPmJvLCBwdGUsIDAsIDApOworCisJCW9mZnNldCA9IHBhcmVudF90YWJsZSArIGNo aWxkX2VudHJ5X2lkeCAqIHNpemVvZih1aW50NjRfdCk7CisJCWludGVsX2JiX29mZnNldF9yZWxv Y190b19vYmplY3QocGd0LT5pYmIsCisJCQkJCQlwZ3QtPmJ1Zi0+aGFuZGxlLAorCQkJCQkJcGd0 LT5idWYtPmhhbmRsZSwKKwkJCQkJCTAsIDAsCisJCQkJCQlwdGUsIG9mZnNldCwKKwkJCQkJCXBn dC0+YnVmLT5hZGRyLm9mZnNldCk7CiAJfSBlbHNlIHsKIAkJY2hpbGRfdGFibGUgPSAoKmNoaWxk X2VudHJ5X3B0ciAmIHB0cl9tYXNrKHBndCwgbGV2ZWwpKSAtCi0JCQkgICAgICBwZ3QtPmJvLT5v ZmZzZXQ2NDsKKwkJCSAgICAgIHBndC0+YnVmLT5hZGRyLm9mZnNldDsKIAl9CiAKIAlyZXR1cm4g Y2hpbGRfdGFibGU7CkBAIC0yMDUsNyArMjEwLDcgQEAgcGd0X3NldF9sMV9lbnRyeShzdHJ1Y3Qg cGd0YWJsZSAqcGd0LCB1aW50NjRfdCBsMV90YWJsZSwKIAl1aW50NjRfdCAqbDFfdGFibGVfcHRy OwogCXVpbnQ2NF90ICpsMV9lbnRyeV9wdHI7CiAKLQlsMV90YWJsZV9wdHIgPSBwZ3QtPmJvLT52 aXJ0dWFsICsgbDFfdGFibGU7CisJbDFfdGFibGVfcHRyID0gcGd0LT5wdHIgKyBsMV90YWJsZTsK IAlsMV9lbnRyeV9wdHIgPSAmbDFfdGFibGVfcHRyW3BndF9lbnRyeV9pbmRleChwZ3QsIDAsIGFk ZHJlc3MpXTsKIAogCWlndF9hc3NlcnQoIShwdHIgJiB+cHRyX21hc2socGd0LCAwKSkpOwpAQCAt MjM0LDcgKzIzOSw3IEBAIHN0YXRpYyBpbnQgYnBwX3RvX2RlcHRoX3ZhbChpbnQgYnBwKQogCX0K IH0KIAotc3RhdGljIHVpbnQ2NF90IHBndF9nZXRfbDFfZmxhZ3MoY29uc3Qgc3RydWN0IGlndF9i dWYgKmJ1ZiwgaW50IHN1cmZhY2VfaWR4KQorc3RhdGljIHVpbnQ2NF90IHBndF9nZXRfbDFfZmxh Z3MoY29uc3Qgc3RydWN0IGludGVsX2J1ZiAqYnVmLCBpbnQgc3VyZmFjZV9pZHgpCiB7CiAJLyoK IAkgKiBUaGUgb2Zmc2V0IG9mIC50aWxlX21vZGUgaXNuJ3Qgc3BlY2lmZWQgYnkgYnNwZWMsIGl0 J3Mgd2hhdCBNZXNhCkBAIC0zMzcsMTUgKzM0MiwxNSBAQCBzdGF0aWMgdWludDY0X3QgcGd0X2dl dF9seF9mbGFncyh2b2lkKQogCiBzdGF0aWMgdm9pZAogcGd0X3BvcHVsYXRlX2VudHJpZXNfZm9y X2J1ZihzdHJ1Y3QgcGd0YWJsZSAqcGd0LAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBpZ3RfYnVm ICpidWYsCi0JCQkgICAgICAgdWludDY0X3QgdG9wX3RhYmxlLAotCQkJICAgICAgIGludCBzdXJm YWNlX2lkeCkKKwkJCSAgICAgc3RydWN0IGludGVsX2J1ZiAqYnVmLAorCQkJICAgICB1aW50NjRf dCB0b3BfdGFibGUsCisJCQkgICAgIGludCBzdXJmYWNlX2lkeCkKIHsKLQl1aW50NjRfdCBzdXJm YWNlX2FkZHIgPSBidWYtPmJvLT5vZmZzZXQ2NCArCisJdWludDY0X3Qgc3VyZmFjZV9hZGRyID0g YnVmLT5hZGRyLm9mZnNldCArCiAJCQkJYnVmLT5zdXJmYWNlW3N1cmZhY2VfaWR4XS5vZmZzZXQ7 CiAJdWludDY0X3Qgc3VyZmFjZV9lbmQgPSBzdXJmYWNlX2FkZHIgKwogCQkJICAgICAgIGJ1Zi0+ c3VyZmFjZVtzdXJmYWNlX2lkeF0uc2l6ZTsKLQl1aW50NjRfdCBhdXhfYWRkciA9IGJ1Zi0+Ym8t Pm9mZnNldDY0ICsgYnVmLT5jY3Nbc3VyZmFjZV9pZHhdLm9mZnNldDsKKwl1aW50NjRfdCBhdXhf YWRkciA9IGJ1Zi0+YWRkci5vZmZzZXQgKyBidWYtPmNjc1tzdXJmYWNlX2lkeF0ub2Zmc2V0Owog CXVpbnQ2NF90IGwxX2ZsYWdzID0gcGd0X2dldF9sMV9mbGFncyhidWYsIHN1cmZhY2VfaWR4KTsK IAl1aW50NjRfdCBseF9mbGFncyA9IHBndF9nZXRfbHhfZmxhZ3MoKTsKIApAQCAtMzY3LDE5ICsz NzIsMjQgQEAgcGd0X3BvcHVsYXRlX2VudHJpZXNfZm9yX2J1ZihzdHJ1Y3QgcGd0YWJsZSAqcGd0 LAogCX0KIH0KIAorc3RhdGljIHZvaWQgcGd0X21hcChpbnQgaTkxNSwgc3RydWN0IHBndGFibGUg KnBndCkKK3sKKwlwZ3QtPnB0ciA9IGdlbV9tbWFwX19kZXZpY2VfY29oZXJlbnQoaTkxNSwgcGd0 LT5idWYtPmhhbmRsZSwgMCwKKwkJCQkJICAgICBwZ3QtPnNpemUsIFBST1RfUkVBRCB8IFBST1Rf V1JJVEUpOworfQorCitzdGF0aWMgdm9pZCBwZ3RfdW5tYXAoc3RydWN0IHBndGFibGUgKnBndCkK K3sKKwltdW5tYXAocGd0LT5wdHIsIHBndC0+c2l6ZSk7Cit9CisKIHN0YXRpYyB2b2lkIHBndF9w b3B1bGF0ZV9lbnRyaWVzKHN0cnVjdCBwZ3RhYmxlICpwZ3QsCi0JCQkJIGNvbnN0IHN0cnVjdCBp Z3RfYnVmICoqYnVmcywKLQkJCQkgaW50IGJ1Zl9jb3VudCwKLQkJCQkgZHJtX2ludGVsX2JvICpw Z3RfYm8pCisJCQkJIHN0cnVjdCBpbnRlbF9idWYgKipidWZzLAorCQkJCSBpbnQgYnVmX2NvdW50 KQogewogCXVpbnQ2NF90IHRvcF90YWJsZTsKIAlpbnQgaTsKIAotCXBndC0+Ym8gPSBwZ3RfYm87 Ci0KLQlpZ3RfYXNzZXJ0KHBndF9iby0+c2l6ZSA+PSBwZ3QtPnNpemUpOwotCW1lbXNldChwZ3Rf Ym8tPnZpcnR1YWwsIDAsIHBndC0+c2l6ZSk7Ci0KIAl0b3BfdGFibGUgPSBwZ3RfYWxsb2NfdGFi bGUocGd0LCBwZ3QtPmxldmVscyAtIDEpOwogCS8qIFRvcCBsZXZlbCB0YWJsZSBtdXN0IGJlIGF0 IG9mZnNldCAwLiAqLwogCWlndF9hc3NlcnQodG9wX3RhYmxlID09IDApOwpAQCAtMzk1LDcgKzQw NSw3IEBAIHN0YXRpYyB2b2lkIHBndF9wb3B1bGF0ZV9lbnRyaWVzKHN0cnVjdCBwZ3RhYmxlICpw Z3QsCiAKIHN0YXRpYyBzdHJ1Y3QgcGd0YWJsZSAqCiBwZ3RfY3JlYXRlKGNvbnN0IHN0cnVjdCBw Z3RhYmxlX2xldmVsX2Rlc2MgKmxldmVsX2Rlc2NzLCBpbnQgbGV2ZWxzLAotCSAgIGNvbnN0IHN0 cnVjdCBpZ3RfYnVmICoqYnVmcywgaW50IGJ1Zl9jb3VudCkKKwkgICBzdHJ1Y3QgaW50ZWxfYnVm ICoqYnVmcywgaW50IGJ1Zl9jb3VudCkKIHsKIAlzdHJ1Y3QgcGd0YWJsZSAqcGd0OwogCWludCBs ZXZlbDsKQEAgLTQyNywxMCArNDM3LDExIEBAIHN0YXRpYyB2b2lkIHBndF9kZXN0cm95KHN0cnVj dCBwZ3RhYmxlICpwZ3QpCiAJZnJlZShwZ3QpOwogfQogCi1kcm1faW50ZWxfYm8gKgotaW50ZWxf YXV4X3BndGFibGVfY3JlYXRlKGRybV9pbnRlbF9idWZtZ3IgKmJ1Zm1nciwKLQkJICAgICAgIGNv bnN0IHN0cnVjdCBpZ3RfYnVmICoqYnVmcywgaW50IGJ1Zl9jb3VudCkKK3N0cnVjdCBpbnRlbF9i dWYgKgoraW50ZWxfYXV4X3BndGFibGVfY3JlYXRlKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAorCQkJ IHN0cnVjdCBpbnRlbF9idWYgKipidWZzLCBpbnQgYnVmX2NvdW50KQogeworCXN0cnVjdCBkcm1f aTkxNV9nZW1fZXhlY19vYmplY3QyICpvYmo7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCBwZ3RhYmxl X2xldmVsX2Rlc2MgbGV2ZWxfZGVzY1tdID0gewogCQl7CiAJCQkuaWR4X3NoaWZ0ID0gMTYsCkBA IC00NTIsOTkgKzQ2Myw0MyBAQCBpbnRlbF9hdXhfcGd0YWJsZV9jcmVhdGUoZHJtX2ludGVsX2J1 Zm1nciAqYnVmbWdyLAogCQl9LAogCX07CiAJc3RydWN0IHBndGFibGUgKnBndDsKLQlkcm1faW50 ZWxfYm8gKnBndF9ibzsKLQotCXBndCA9IHBndF9jcmVhdGUobGV2ZWxfZGVzYywgQVJSQVlfU0la RShsZXZlbF9kZXNjKSwgYnVmcywgYnVmX2NvdW50KTsKKwlzdHJ1Y3QgYnVmX29wcyAqYm9wczsK KwlzdHJ1Y3QgaW50ZWxfYnVmICpidWY7CisJdWludDY0X3QgcHJldl9hbGlnbm1lbnQ7CiAKLQlw Z3RfYm8gPSBkcm1faW50ZWxfYm9fYWxsb2NfZm9yX3JlbmRlcihidWZtZ3IsICJhdXggcGd0IiwK LQkJCQkJICAgICAgIHBndC0+c2l6ZSwgcGd0LT5tYXhfYWxpZ24pOwotCWlndF9hc3NlcnQocGd0 X2JvKTsKLQotCWlndF9hc3NlcnQoZHJtX2ludGVsX2JvX21hcChwZ3RfYm8sIHRydWUpID09IDAp OwotCXBndF9wb3B1bGF0ZV9lbnRyaWVzKHBndCwgYnVmcywgYnVmX2NvdW50LCBwZ3RfYm8pOwot CWlndF9hc3NlcnQoZHJtX2ludGVsX2JvX3VubWFwKHBndF9ibykgPT0gMCk7CisJaWd0X2Fzc2Vy dChidWZfY291bnQpOworCWJvcHMgPSBidWZzWzBdLT5ib3BzOwogCisJcGd0ID0gcGd0X2NyZWF0 ZShsZXZlbF9kZXNjLCBBUlJBWV9TSVpFKGxldmVsX2Rlc2MpLCBidWZzLCBidWZfY291bnQpOwor CXBndC0+aWJiID0gaWJiOworCXBndC0+YnVmID0gaW50ZWxfYnVmX2NyZWF0ZShib3BzLCBwZ3Qt PnNpemUsIDEsIDgsIDAsIEk5MTVfVElMSU5HX05PTkUsCisJCQkJICAgIEk5MTVfQ09NUFJFU1NJ T05fTk9ORSk7CisKKwkvKiBXZSBuZWVkIHRvIHVzZSBwZ3QtPm1heF9hbGlnbiBmb3IgYXV4IHRh YmxlICovCisJcHJldl9hbGlnbm1lbnQgPSBpbnRlbF9iYl9zZXRfZGVmYXVsdF9vYmplY3RfYWxp Z25tZW50KGliYiwKKwkJCQkJCQkgICAgICAgcGd0LT5tYXhfYWxpZ24pOworCW9iaiA9IGludGVs X2JiX2FkZF9pbnRlbF9idWYoaWJiLCBwZ3QtPmJ1ZiwgZmFsc2UpOworCWludGVsX2JiX3NldF9k ZWZhdWx0X29iamVjdF9hbGlnbm1lbnQoaWJiLCBwcmV2X2FsaWdubWVudCk7CisJb2JqLT5hbGln bm1lbnQgPSBwZ3QtPm1heF9hbGlnbjsKKworCXBndF9tYXAoaWJiLT5pOTE1LCBwZ3QpOworCXBn dF9wb3B1bGF0ZV9lbnRyaWVzKHBndCwgYnVmcywgYnVmX2NvdW50KTsKKwlwZ3RfdW5tYXAocGd0 KTsKKworCWJ1ZiA9IHBndC0+YnVmOwogCXBndF9kZXN0cm95KHBndCk7CiAKLQlyZXR1cm4gcGd0 X2JvOwotfQotCi1zdGF0aWMgdm9pZAotYXV4X3BndGFibGVfZmluZF9tYXhfZnJlZV9yYW5nZShj b25zdCBzdHJ1Y3QgaWd0X2J1ZiAqKmJ1ZnMsIGludCBidWZfY291bnQsCi0JCQkJdWludDY0X3Qg KnJhbmdlX3N0YXJ0LCB1aW50NjRfdCAqcmFuZ2Vfc2l6ZSkKLXsKLQkvKgotCSAqIEtlZXAgdGhl IGZpcnN0IHBhZ2UgcmVzZXJ2ZWQsIHNvIHdlIGNhbiBkaWZmZXJlbnRpYXRlIHBpbm5lZAotCSAq IG9iamVjdHMgYmFzZWQgb24gYSBub24tTlVMTCBvZmZzZXQuCi0JICovCi0JdWludDY0X3Qgc3Rh cnQgPSAweDEwMDA7Ci0JLyogRm9yIG5vdyBhbGxvYyBvbmx5IGZyb20gdGhlIGZpcnN0IDRHQiBh ZGRyZXNzIHNwYWNlLiAqLwotCWNvbnN0IHVpbnQ2NF90IGVuZCA9IDFVTEwgPDwgMzI7Ci0JdWlu dDY0X3QgbWF4X3JhbmdlX3N0YXJ0ID0gMDsKLQl1aW50NjRfdCBtYXhfcmFuZ2Vfc2l6ZSA9IDA7 Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgYnVmX2NvdW50OyBpKyspIHsKLQkJaWYgKGJ1 ZnNbaV0tPmJvLT5vZmZzZXQ2NCA+PSBlbmQpCi0JCQlicmVhazsKLQotCQlpZiAoYnVmc1tpXS0+ Ym8tPm9mZnNldDY0IC0gc3RhcnQgPiBtYXhfcmFuZ2Vfc2l6ZSkgewotCQkJbWF4X3JhbmdlX3N0 YXJ0ID0gc3RhcnQ7Ci0JCQltYXhfcmFuZ2Vfc2l6ZSA9IGJ1ZnNbaV0tPmJvLT5vZmZzZXQ2NCAt IHN0YXJ0OwotCQl9Ci0JCXN0YXJ0ID0gYnVmc1tpXS0+Ym8tPm9mZnNldDY0ICsgYnVmc1tpXS0+ Ym8tPnNpemU7Ci0JfQotCi0JaWYgKHN0YXJ0IDwgZW5kICYmIGVuZCAtIHN0YXJ0ID4gbWF4X3Jh bmdlX3NpemUpIHsKLQkJbWF4X3JhbmdlX3N0YXJ0ID0gc3RhcnQ7Ci0JCW1heF9yYW5nZV9zaXpl ID0gZW5kIC0gc3RhcnQ7Ci0JfQotCi0JKnJhbmdlX3N0YXJ0ID0gbWF4X3JhbmdlX3N0YXJ0Owot CSpyYW5nZV9zaXplID0gbWF4X3JhbmdlX3NpemU7Ci19Ci0KLXN0YXRpYyB1aW50NjRfdAotYXV4 X3BndGFibGVfZmluZF9mcmVlX3JhbmdlKGNvbnN0IHN0cnVjdCBpZ3RfYnVmICoqYnVmcywgaW50 IGJ1Zl9jb3VudCwKLQkJCSAgICB1aW50MzJfdCBzaXplKQotewotCXVpbnQ2NF90IHJhbmdlX3N0 YXJ0OwotCXVpbnQ2NF90IHJhbmdlX3NpemU7Ci0JLyogQSBjb21wcmVzc2VkIHN1cmZhY2UgbXVz dCBiZSA2NGtCIGFsaWduZWQuICovCi0JY29uc3QgdWludDMyX3QgYWxpZ24gPSAweDEwMDAwOwot CWludCBwYWQ7Ci0KLQlhdXhfcGd0YWJsZV9maW5kX21heF9mcmVlX3JhbmdlKGJ1ZnMsIGJ1Zl9j b3VudCwKLQkJCQkJJnJhbmdlX3N0YXJ0LCAmcmFuZ2Vfc2l6ZSk7Ci0KLQlwYWQgPSBBTElHTihy YW5nZV9zdGFydCwgYWxpZ24pIC0gcmFuZ2Vfc3RhcnQ7Ci0JcmFuZ2Vfc3RhcnQgKz0gcGFkOwot CXJhbmdlX3NpemUgLT0gcGFkOwotCWlndF9hc3NlcnQocmFuZ2Vfc2l6ZSA+PSBzaXplKTsKLQot CXJldHVybiByYW5nZV9zdGFydCArCi0JICAgICAgIEFMSUdOX0RPV04ocmFuZCgpICUgKChyYW5n ZV9zaXplIC0gc2l6ZSkgKyAxKSwgYWxpZ24pOworCXJldHVybiBidWY7CiB9CiAKIHN0YXRpYyB2 b2lkCi1hdXhfcGd0YWJsZV9yZXNlcnZlX3JhbmdlKGNvbnN0IHN0cnVjdCBpZ3RfYnVmICoqYnVm cywgaW50IGJ1Zl9jb3VudCwKLQkJCSAgY29uc3Qgc3RydWN0IGlndF9idWYgKm5ld19idWYpCith dXhfcGd0YWJsZV9yZXNlcnZlX2J1Zl9zbG90KHN0cnVjdCBpbnRlbF9idWYgKipidWZzLCBpbnQg YnVmX2NvdW50LAorCQkJICAgICBzdHJ1Y3QgaW50ZWxfYnVmICpuZXdfYnVmKQogewogCWludCBp OwogCi0JaWYgKGlndF9idWZfY29tcHJlc3NlZChuZXdfYnVmKSkgewotCQl1aW50NjRfdCBwaW5f b2Zmc2V0ID0gbmV3X2J1Zi0+Ym8tPm9mZnNldDY0OwotCi0JCWlmICghcGluX29mZnNldCkKLQkJ CXBpbl9vZmZzZXQgPSBhdXhfcGd0YWJsZV9maW5kX2ZyZWVfcmFuZ2UoYnVmcywKLQkJCQkJCQkJ IGJ1Zl9jb3VudCwKLQkJCQkJCQkJIG5ld19idWYtPmJvLT5zaXplKTsKLQkJZHJtX2ludGVsX2Jv X3NldF9zb2Z0cGluX29mZnNldChuZXdfYnVmLT5ibywgcGluX29mZnNldCk7Ci0JCWlndF9hc3Nl cnQobmV3X2J1Zi0+Ym8tPm9mZnNldDY0ID09IHBpbl9vZmZzZXQpOwotCX0KLQogCWZvciAoaSA9 IDA7IGkgPCBidWZfY291bnQ7IGkrKykKLQkJaWYgKGJ1ZnNbaV0tPmJvLT5vZmZzZXQ2NCA+IG5l d19idWYtPmJvLT5vZmZzZXQ2NCkKKwkJaWYgKGJ1ZnNbaV0tPmFkZHIub2Zmc2V0ID4gbmV3X2J1 Zi0+YWRkci5vZmZzZXQpCiAJCQlicmVhazsKIAogCW1lbW1vdmUoJmJ1ZnNbaSArIDFdLCAmYnVm c1tpXSwgc2l6ZW9mKGJ1ZnNbMF0pICogKGJ1Zl9jb3VudCAtIGkpKTsKQEAgLTU1NCwxMDcgKzUw OSwxMTUgQEAgYXV4X3BndGFibGVfcmVzZXJ2ZV9yYW5nZShjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAq KmJ1ZnMsIGludCBidWZfY291bnQsCiAKIHZvaWQKIGdlbjEyX2F1eF9wZ3RhYmxlX2luaXQoc3Ry dWN0IGF1eF9wZ3RhYmxlX2luZm8gKmluZm8sCi0JCSAgICAgICBkcm1faW50ZWxfYnVmbWdyICpi dWZtZ3IsCi0JCSAgICAgICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqc3JjX2J1ZiwKLQkJICAgICAg IGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpkc3RfYnVmKQorCQkgICAgICAgc3RydWN0IGludGVsX2Ji ICppYmIsCisJCSAgICAgICBzdHJ1Y3QgaW50ZWxfYnVmICpzcmNfYnVmLAorCQkgICAgICAgc3Ry dWN0IGludGVsX2J1ZiAqZHN0X2J1ZikKIHsKLQljb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmc1sy XTsKLQljb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqcmVzZXJ2ZWRfYnVmc1syXTsKKwlzdHJ1Y3QgaW50 ZWxfYnVmICpidWZzWzJdOworCXN0cnVjdCBpbnRlbF9idWYgKnJlc2VydmVkX2J1ZnNbMl07CiAJ aW50IHJlc2VydmVkX2J1Zl9jb3VudDsKIAlpbnQgaTsKIAotCWlmICghaWd0X2J1Zl9jb21wcmVz c2VkKHNyY19idWYpICYmICFpZ3RfYnVmX2NvbXByZXNzZWQoZHN0X2J1ZikpCisJaWd0X2Fzc2Vy dF9mKGliYi0+ZW5mb3JjZV9yZWxvY3MgPT0gZmFsc2UsCisJCSAgICAgIldlIHN1cHBvcnQgYXV4 IHBndGFibGVzIGZvciBub24tZm9yY2VkIHJlbG9jcyB5ZXQhIik7CisKKwlpZiAoIWludGVsX2J1 Zl9jb21wcmVzc2VkKHNyY19idWYpICYmICFpbnRlbF9idWZfY29tcHJlc3NlZChkc3RfYnVmKSkK IAkJcmV0dXJuOwogCiAJYnVmc1swXSA9IHNyY19idWY7CiAJYnVmc1sxXSA9IGRzdF9idWY7CiAK IAkvKgotCSAqIElkZWFsbHkgd2UnZCBuZWVkIGFuIElHVC13aWRlIEdGWCBhZGRyZXNzIHNwYWNl IGFsbG9jYXRvciwgd2hpY2gKLQkgKiB3b3VsZCBjb25zaWRlciBhbGwgYWxsb2NhdGlvbnMgYW5k IHRodXMgYXZvaWQgZXZpY3Rpb25zLiBGb3Igbm93IHVzZQotCSAqIGEgc2ltcGxlciBzY2hlbWUg aGVyZSwgd2hpY2ggb25seSBjb25zaWRlcnMgdGhlIGJ1ZmZlcnMgaW52b2x2ZWQgaW4KLQkgKiB0 aGUgYmxpdCwgd2hpY2ggc2hvdWxkIGF0IGxlYXN0IG1pbmltaXplIHRoZSBjaGFuY2UgZm9yIGV2 aWN0aW9ucwotCSAqIGluIHRoZSBjYXNlIG9mIHN1YnNlcXVlbnQgYmxpdHM6Ci0JICogICAxLiBJ ZiB0aGV5IHdlcmUgYWxyZWFkeSBib3VuZCAoYm8tPm9mZnNldDY0ICE9IDApLCB1c2UgdGhpcwot CSAqICAgICAgYWRkcmVzcy4KLQkgKiAgIDIuIFBpY2sgYSByYW5nZSByYW5kb21seSBmcm9tIHRo ZSA0R0IgYWRkcmVzcyBzcGFjZSwgdGhhdCBpcyBub3QKLQkgKiAgICAgIGFscmVhZHkgb2NjdXBp ZWQgYnkgYSBib3VuZCBvYmplY3QsIG9yIGFuIG9iamVjdCB3ZSBwaW5uZWQuCisJICogU3VyZmFj ZSBpbmRleCBpbiBwZ3QgdGFibGUgZGVwZW5kIG9uIGl0cyBhZGRyZXNzIHNvOgorCSAqICAgMS4g aWYgaGFuZGxlIHdhcyBwcmV2aW91c2x5IGV4ZWN1dGVkIGluIGJhdGNoIHVzZSB0aGF0IGFkZHJl c3MKKwkgKiAgIDIuIGFkZCBvYmplY3QgdG8gYmF0Y2gsIHRoaXMgd2lsbCBnZW5lcmF0ZSByYW5k b20gYWRkcmVzcworCSAqCisJICogUmFuZG9taXppbmcgYWRkcmVzc2VzIGNhbiBsZWFkIHRvIG92 ZXJsYXBwaW5nLCBidXQgd2UgZG9uJ3QgaGF2ZQorCSAqIGdsb2JhbCBhZGRyZXNzIHNwYWNlIGdl bmVyYXRvciBpbiBJR1QuIEN1cnJlbnRseSBhc3N1bXB0aW9uIGlzCisJICogcmFuZG9taXppbmcg YWRkcmVzcyBpcyBzcHJlYWQgb3ZlciA0OC1iaXQgYWRkcmVzcyBzcGFjZSBlcXVhbGx5CisJICog c28gcmlzayB3aXRoIG92ZXJsYXBwaW5nIGlzIG1pbmltYWwuIE9mIGNvdXJzZSBpdCBpcyBncm93 aW5nCisJICogd2l0aCBudW1iZXIgb2Ygb2JqZWN0cyAoK2l0cyBzaXplcykgaW52b2x2ZWQgaW4g YmxpdC4KKwkgKiBUbyBhdm9pZCByZWxvY2F0aW9uIEVYRUNfT0JKRUNUX1BJTk5FRCBmbGFnIGlz IHNldCBmb3IgY29tcHJlc3NlZAorCSAqIHN1cmZhY2VzLgogCSAqLworCisJaW50ZWxfYmJfYWRk X2ludGVsX2J1ZihpYmIsIHNyY19idWYsIGZhbHNlKTsKKwlpZiAoaW50ZWxfYnVmX2NvbXByZXNz ZWQoc3JjX2J1ZikpCisJCWludGVsX2JiX29iamVjdF9zZXRfZmxhZyhpYmIsIHNyY19idWYtPmhh bmRsZSwgRVhFQ19PQkpFQ1RfUElOTkVEKTsKKworCWludGVsX2JiX2FkZF9pbnRlbF9idWYoaWJi LCBkc3RfYnVmLCB0cnVlKTsKKwlpZiAoaW50ZWxfYnVmX2NvbXByZXNzZWQoZHN0X2J1ZikpCisJ CWludGVsX2JiX29iamVjdF9zZXRfZmxhZyhpYmIsIGRzdF9idWYtPmhhbmRsZSwgRVhFQ19PQkpF Q1RfUElOTkVEKTsKKwogCXJlc2VydmVkX2J1Zl9jb3VudCA9IDA7CiAJLyogRmlyc3QgcmVzZXJ2 ZSBzcGFjZSBmb3IgYW55IGJ1ZnMgdGhhdCBhcmUgYm91bmQgYWxyZWFkeS4gKi8KLQlmb3IgKGkg PSAwOyBpIDwgQVJSQVlfU0laRShidWZzKTsgaSsrKQotCQlpZiAoYnVmc1tpXS0+Ym8tPm9mZnNl dDY0KQotCQkJYXV4X3BndGFibGVfcmVzZXJ2ZV9yYW5nZShyZXNlcnZlZF9idWZzLAotCQkJCQkJ ICByZXNlcnZlZF9idWZfY291bnQrKywKLQkJCQkJCSAgYnVmc1tpXSk7Ci0KLQkvKiBOZXh0LCBy ZXNlcnZlIHNwYWNlIGZvciB1bmJvdW5kIGJ1ZnMgd2l0aCBhbiBBVVggc3VyZmFjZS4gKi8KLQlm b3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShidWZzKTsgaSsrKQotCQlpZiAoIWJ1ZnNbaV0tPmJv LT5vZmZzZXQ2NCAmJiBpZ3RfYnVmX2NvbXByZXNzZWQoYnVmc1tpXSkpCi0JCQlhdXhfcGd0YWJs ZV9yZXNlcnZlX3JhbmdlKHJlc2VydmVkX2J1ZnMsCi0JCQkJCQkgIHJlc2VydmVkX2J1Zl9jb3Vu dCsrLAotCQkJCQkJICBidWZzW2ldKTsKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShidWZz KTsgaSsrKSB7CisJCWlndF9hc3NlcnQoYnVmc1tpXS0+YWRkci5vZmZzZXQgIT0gSU5URUxfQlVG X0lOVkFMSURfQUREUkVTUyk7CisJCWF1eF9wZ3RhYmxlX3Jlc2VydmVfYnVmX3Nsb3QocmVzZXJ2 ZWRfYnVmcywKKwkJCQkJICAgICByZXNlcnZlZF9idWZfY291bnQrKywKKwkJCQkJICAgICBidWZz W2ldKTsKKwl9CiAKIAkvKiBDcmVhdGUgQVVYIHBndGFibGUgZW50cmllcyBvbmx5IGZvciBidWZz IHdpdGggYW4gQVVYIHN1cmZhY2UgKi8KIAlpbmZvLT5idWZfY291bnQgPSAwOwogCWZvciAoaSA9 IDA7IGkgPCByZXNlcnZlZF9idWZfY291bnQ7IGkrKykgewotCQlpZiAoIWlndF9idWZfY29tcHJl c3NlZChyZXNlcnZlZF9idWZzW2ldKSkKKwkJaWYgKCFpbnRlbF9idWZfY29tcHJlc3NlZChyZXNl cnZlZF9idWZzW2ldKSkKIAkJCWNvbnRpbnVlOwogCiAJCWluZm8tPmJ1ZnNbaW5mby0+YnVmX2Nv dW50XSA9IHJlc2VydmVkX2J1ZnNbaV07CiAJCWluZm8tPmJ1Zl9waW5fb2Zmc2V0c1tpbmZvLT5i dWZfY291bnRdID0KLQkJCXJlc2VydmVkX2J1ZnNbaV0tPmJvLT5vZmZzZXQ2NDsKKwkJCXJlc2Vy dmVkX2J1ZnNbaV0tPmFkZHIub2Zmc2V0OworCiAJCWluZm8tPmJ1Zl9jb3VudCsrOwogCX0KIAot CWluZm8tPnBndGFibGVfYm8gPSBpbnRlbF9hdXhfcGd0YWJsZV9jcmVhdGUoYnVmbWdyLAotCQkJ CQkJICAgIGluZm8tPmJ1ZnMsCi0JCQkJCQkgICAgaW5mby0+YnVmX2NvdW50KTsKLQlpZ3RfYXNz ZXJ0KGluZm8tPnBndGFibGVfYm8pOworCWluZm8tPnBndGFibGVfYnVmID0gaW50ZWxfYXV4X3Bn dGFibGVfY3JlYXRlKGliYiwKKwkJCQkJCSAgICAgaW5mby0+YnVmcywKKwkJCQkJCSAgICAgaW5m by0+YnVmX2NvdW50KTsKKworCWlndF9hc3NlcnQoaW5mby0+cGd0YWJsZV9idWYpOwogfQogCiB2 b2lkCi1nZW4xMl9hdXhfcGd0YWJsZV9jbGVhbnVwKHN0cnVjdCBhdXhfcGd0YWJsZV9pbmZvICpp bmZvKQorZ2VuMTJfYXV4X3BndGFibGVfY2xlYW51cChzdHJ1Y3QgaW50ZWxfYmIgKmliYiwgc3Ry dWN0IGF1eF9wZ3RhYmxlX2luZm8gKmluZm8pCiB7CiAJaW50IGk7CiAKIAkvKiBDaGVjayB0aGF0 IHRoZSBwaW5uZWQgYnVmcyBrZXB0IHRoZWlyIG9mZnNldCBhZnRlciB0aGUgZXhlYy4gKi8KLQlm b3IgKGkgPSAwOyBpIDwgaW5mby0+YnVmX2NvdW50OyBpKyspCi0JCWlndF9hc3NlcnRfZXFfdTY0 KGluZm8tPmJ1ZnNbaV0tPmJvLT5vZmZzZXQ2NCwKLQkJCQkgIGluZm8tPmJ1Zl9waW5fb2Zmc2V0 c1tpXSk7CisJZm9yIChpID0gMDsgaSA8IGluZm8tPmJ1Zl9jb3VudDsgaSsrKSB7CisJCXVpbnQ2 NF90IGFkZHI7CisKKwkJYWRkciA9IGludGVsX2JiX2dldF9vYmplY3Rfb2Zmc2V0KGliYiwgaW5m by0+YnVmc1tpXS0+aGFuZGxlKTsKKwkJaWd0X2Fzc2VydF9lcV91NjQoYWRkciwgaW5mby0+YnVm X3Bpbl9vZmZzZXRzW2ldKTsKKwl9CiAKLQlkcm1faW50ZWxfYm9fdW5yZWZlcmVuY2UoaW5mby0+ cGd0YWJsZV9ibyk7CisJaWYgKGluZm8tPnBndGFibGVfYnVmKQorCQlpbnRlbF9idWZfZGVzdHJv eShpbmZvLT5wZ3RhYmxlX2J1Zik7CiB9CiAKIHVpbnQzMl90Ci1nZW4xMl9jcmVhdGVfYXV4X3Bn dGFibGVfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCSAgICAgICBk cm1faW50ZWxfYm8gKmF1eF9wZ3RhYmxlX2JvKQorZ2VuMTJfY3JlYXRlX2F1eF9wZ3RhYmxlX3N0 YXRlKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAorCQkJICAgICAgIHN0cnVjdCBpbnRlbF9idWYgKmF1 eF9wZ3RhYmxlX2J1ZikKIHsKIAl1aW50NjRfdCAqcGd0YWJsZV9wdHI7CiAJdWludDMyX3QgcGd0 YWJsZV9wdHJfb2Zmc2V0OwotCWludCByZXQ7CiAKLQlpZiAoIWF1eF9wZ3RhYmxlX2JvKQorCWlm ICghYXV4X3BndGFibGVfYnVmKQogCQlyZXR1cm4gMDsKIAotCXBndGFibGVfcHRyID0gaW50ZWxf YmF0Y2hidWZmZXJfc3ViZGF0YV9hbGxvYyhiYXRjaCwKLQkJCQkJCSAgICAgIHNpemVvZigqcGd0 YWJsZV9wdHIpLAotCQkJCQkJICAgICAgc2l6ZW9mKCpwZ3RhYmxlX3B0cikpOwotCXBndGFibGVf cHRyX29mZnNldCA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLAotCQkJ CQkJCSAgICAgIHBndGFibGVfcHRyKTsKKwlwZ3RhYmxlX3B0ciA9IGludGVsX2JiX3B0cihpYmIp OworCXBndGFibGVfcHRyX29mZnNldCA9IGludGVsX2JiX29mZnNldChpYmIpOwogCi0JKnBndGFi bGVfcHRyID0gYXV4X3BndGFibGVfYm8tPm9mZnNldDY0OwotCXJldCA9IGRybV9pbnRlbF9ib19l bWl0X3JlbG9jKGJhdGNoLT5ibywgcGd0YWJsZV9wdHJfb2Zmc2V0LAotCQkJCSAgICAgIGF1eF9w Z3RhYmxlX2JvLCAwLAotCQkJCSAgICAgIDAsIDApOwotCWFzc2VydChyZXQgPT0gMCk7CisJKnBn dGFibGVfcHRyID0gaW50ZWxfYmJfb2Zmc2V0X3JlbG9jKGliYiwgYXV4X3BndGFibGVfYnVmLT5o YW5kbGUsCisJCQkJCSAgICAgMCwgMCwKKwkJCQkJICAgICBwZ3RhYmxlX3B0cl9vZmZzZXQsIC0x KTsKKwlpbnRlbF9iYl9wdHJfYWRkKGliYiwgc2l6ZW9mKCpwZ3RhYmxlX3B0cikpOwogCiAJcmV0 dXJuIHBndGFibGVfcHRyX29mZnNldDsKIH0KIAogdm9pZAotZ2VuMTJfZW1pdF9hdXhfcGd0YWJs ZV9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBzdGF0ZSwK LQkJCSAgICAgYm9vbCByZW5kZXIpCitnZW4xMl9lbWl0X2F1eF9wZ3RhYmxlX3N0YXRlKHN0cnVj dCBpbnRlbF9iYiAqaWJiLCB1aW50MzJfdCBzdGF0ZSwgYm9vbCByZW5kZXIpCiB7CiAJdWludDMy X3QgdGFibGVfYmFzZV9yZWcgPSByZW5kZXIgPyBHRU4xMl9HRlhfQVVYX1RBQkxFX0JBU0VfQURE UiA6CiAJCQkJCSAgIEdFTjEyX1ZFQk9YX0FVWF9UQUJMRV9CQVNFX0FERFI7CkBAIC02NjIsMTEg KzYyNSwxMSBAQCBnZW4xMl9lbWl0X2F1eF9wZ3RhYmxlX3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRj aGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IHN0YXRlLAogCWlmICghc3RhdGUpCiAJCXJldHVybjsK IAotCU9VVF9CQVRDSChNSV9MT0FEX1JFR0lTVEVSX01FTV9HRU44IHwgTUlfTU1JT19SRU1BUF9F TkFCTEVfR0VOMTIpOwotCU9VVF9CQVRDSCh0YWJsZV9iYXNlX3JlZyk7Ci0JT1VUX1JFTE9DKGJh dGNoLT5ibywgMCwgMCwgc3RhdGUpOworCWludGVsX2JiX291dChpYmIsIE1JX0xPQURfUkVHSVNU RVJfTUVNX0dFTjggfCBNSV9NTUlPX1JFTUFQX0VOQUJMRV9HRU4xMik7CisJaW50ZWxfYmJfb3V0 KGliYiwgdGFibGVfYmFzZV9yZWcpOworCWludGVsX2JiX2VtaXRfcmVsb2MoaWJiLCBpYmItPmhh bmRsZSwgMCwgMCwgc3RhdGUsIGliYi0+YmF0Y2hfb2Zmc2V0KTsKIAotCU9VVF9CQVRDSChNSV9M T0FEX1JFR0lTVEVSX01FTV9HRU44IHwgTUlfTU1JT19SRU1BUF9FTkFCTEVfR0VOMTIpOwotCU9V VF9CQVRDSCh0YWJsZV9iYXNlX3JlZyArIDQpOwotCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIDAsIDAs IHN0YXRlICsgNCk7CisJaW50ZWxfYmJfb3V0KGliYiwgTUlfTE9BRF9SRUdJU1RFUl9NRU1fR0VO OCB8IE1JX01NSU9fUkVNQVBfRU5BQkxFX0dFTjEyKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCB0YWJs ZV9iYXNlX3JlZyArIDQpOworCWludGVsX2JiX2VtaXRfcmVsb2MoaWJiLCBpYmItPmhhbmRsZSwg MCwgMCwgc3RhdGUgKyA0LCBpYmItPmJhdGNoX29mZnNldCk7CiB9CmRpZmYgLS1naXQgYS9saWIv aW50ZWxfYXV4X3BndGFibGUuaCBiL2xpYi9pbnRlbF9hdXhfcGd0YWJsZS5oCmluZGV4IGFjODJi N2QyLi5lOTk3NmU1MiAxMDA2NDQKLS0tIGEvbGliL2ludGVsX2F1eF9wZ3RhYmxlLmgKKysrIGIv bGliL2ludGVsX2F1eF9wZ3RhYmxlLmgKQEAgLTEsMzYgKzEsMzMgQEAKICNpZm5kZWYgX19JTlRF TF9BVVhfUEdUQUJMRV9IX18KICNkZWZpbmUgX19JTlRFTF9BVVhfUEdUQUJMRV9IX18KIAotI2lu Y2x1ZGUgImludGVsX2J1Zm1nci5oIgotCi1zdHJ1Y3QgaWd0X2J1ZjsKLXN0cnVjdCBpbnRlbF9i YXRjaGJ1ZmZlcjsKKyNpbmNsdWRlICJpbnRlbF9idWZvcHMuaCIKIAogc3RydWN0IGF1eF9wZ3Rh YmxlX2luZm8gewogCWludCBidWZfY291bnQ7Ci0JY29uc3Qgc3RydWN0IGlndF9idWYgKmJ1ZnNb Ml07CisJc3RydWN0IGludGVsX2J1ZiAqYnVmc1syXTsKIAl1aW50NjRfdCBidWZfcGluX29mZnNl dHNbMl07Ci0JZHJtX2ludGVsX2JvICpwZ3RhYmxlX2JvOworCXN0cnVjdCBpbnRlbF9idWYgKnBn dGFibGVfYnVmOwogfTsKIAotZHJtX2ludGVsX2JvICoKLWludGVsX2F1eF9wZ3RhYmxlX2NyZWF0 ZShkcm1faW50ZWxfYnVmbWdyICpidWZtZ3IsCi0JCQkgY29uc3Qgc3RydWN0IGlndF9idWYgKipi dWZzLCBpbnQgYnVmX2NvdW50KTsKK3N0cnVjdCBpbnRlbF9idWYgKgoraW50ZWxfYXV4X3BndGFi bGVfY3JlYXRlKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAorCQkJIHN0cnVjdCBpbnRlbF9idWYgKipi dWZzLCBpbnQgYnVmX2NvdW50KTsKIAogdm9pZAogZ2VuMTJfYXV4X3BndGFibGVfaW5pdChzdHJ1 Y3QgYXV4X3BndGFibGVfaW5mbyAqaW5mbywKLQkJICAgICAgIGRybV9pbnRlbF9idWZtZ3IgKmJ1 Zm1nciwKLQkJICAgICAgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpzcmNfYnVmLAotCQkgICAgICAg Y29uc3Qgc3RydWN0IGlndF9idWYgKmRzdF9idWYpOworCQkgICAgICAgc3RydWN0IGludGVsX2Ji ICppYmIsCisJCSAgICAgICBzdHJ1Y3QgaW50ZWxfYnVmICpzcmNfYnVmLAorCQkgICAgICAgc3Ry dWN0IGludGVsX2J1ZiAqZHN0X2J1Zik7CiAKIHZvaWQKLWdlbjEyX2F1eF9wZ3RhYmxlX2NsZWFu dXAoc3RydWN0IGF1eF9wZ3RhYmxlX2luZm8gKmluZm8pOworZ2VuMTJfYXV4X3BndGFibGVfY2xl YW51cChzdHJ1Y3QgaW50ZWxfYmIgKmliYiwgc3RydWN0IGF1eF9wZ3RhYmxlX2luZm8gKmluZm8p OwogCiB1aW50MzJfdAotZ2VuMTJfY3JlYXRlX2F1eF9wZ3RhYmxlX3N0YXRlKHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCQkgICAgICAgZHJtX2ludGVsX2JvICphdXhfcGd0YWJs ZV9ibyk7CitnZW4xMl9jcmVhdGVfYXV4X3BndGFibGVfc3RhdGUoc3RydWN0IGludGVsX2JiICpi YXRjaCwKKwkJCSAgICAgICBzdHJ1Y3QgaW50ZWxfYnVmICphdXhfcGd0YWJsZV9idWYpOwogdm9p ZAotZ2VuMTJfZW1pdF9hdXhfcGd0YWJsZV9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoLCB1aW50MzJfdCBzdGF0ZSwKK2dlbjEyX2VtaXRfYXV4X3BndGFibGVfc3RhdGUoc3Ry dWN0IGludGVsX2JiICpiYXRjaCwgdWludDMyX3Qgc3RhdGUsCiAJCQkgICAgIGJvb2wgcmVuZGVy KTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9saWIvaW50ZWxfYmF0Y2hidWZmZXIuaCBiL2xpYi9p bnRlbF9iYXRjaGJ1ZmZlci5oCmluZGV4IGNjOGM4NGI2Li40NzdlYTQyMyAxMDA2NDQKLS0tIGEv bGliL2ludGVsX2JhdGNoYnVmZmVyLmgKKysrIGIvbGliL2ludGVsX2JhdGNoYnVmZmVyLmgKQEAg LTMxOCwxNCArMzE4LDE0IEBAIHZvaWQgaWd0X2JsaXR0ZXJfZmFzdF9jb3B5X19yYXcoaW50IGZk LAogCiAvKioKICAqIGlndF9yZW5kZXJfY29weWZ1bmNfdDoKLSAqIEBiYXRjaDogYmF0Y2hidWZm ZXIgb2JqZWN0Ci0gKiBAY29udGV4dDogbGliZHJtIGhhcmR3YXJlIGNvbnRleHQgdG8gdXNlCi0g KiBAc3JjOiBzb3VyY2UgaS1nLXQgYnVmZmVyIG9iamVjdAorICogQGliYjogYmF0Y2hidWZmZXIK KyAqIEBjdHg6IGNvbnRleHQgdG8gdXNlCisgKiBAc3JjOiBpbnRlbF9idWYgc291cmNlIG9iamVj dAogICogQHNyY194OiBzb3VyY2UgcGl4ZWwgeC1jb29yZGluYXRpb24KICAqIEBzcmNfeTogc291 cmNlIHBpeGVsIHktY29vcmRpbmF0aW9uCiAgKiBAd2lkdGg6IHdpZHRoIG9mIHRoZSBjb3BpZWQg cmVjdGFuZ2xlCiAgKiBAaGVpZ2h0OiBoZWlnaHQgb2YgdGhlIGNvcGllZCByZWN0YW5nbGUKLSAq IEBkc3Q6IGRlc3RpbmF0aW9uIGktZy10IGJ1ZmZlciBvYmplY3QKKyAqIEBkc3Q6IGludGVsX2J1 ZiBkZXN0aW5hdGlvbiBvYmplY3QKICAqIEBkc3RfeDogZGVzdGluYXRpb24gcGl4ZWwgeC1jb29y ZGluYXRpb24KICAqIEBkc3RfeTogZGVzdGluYXRpb24gcGl4ZWwgeS1jb29yZGluYXRpb24KICAq CkBAIC0zMzQsMjUgKzMzNCwzMCBAQCB2b2lkIGlndF9ibGl0dGVyX2Zhc3RfY29weV9fcmF3KGlu dCBmZCwKICAqIGlndF9nZXRfcmVuZGVyX2NvcHlmdW5jKCkuCiAgKgogICogQSByZW5kZXIgY29w eSBmdW5jdGlvbiB3aWxsIGVtaXQgYSBiYXRjaGJ1ZmZlciB0byB0aGUga2VybmVsIHdoaWNoIGV4 ZWN1dGVzCi0gKiB0aGUgc3BlY2lmaWVkIGJsaXQgY29weSBvcGVyYXRpb24gdXNpbmcgdGhlIHJl bmRlciBlbmdpbmUuIEBjb250ZXh0IGlzCi0gKiBvcHRpb25hbCBhbmQgY2FuIGJlIE5VTEwuCisg KiB0aGUgc3BlY2lmaWVkIGJsaXQgY29weSBvcGVyYXRpb24gdXNpbmcgdGhlIHJlbmRlciBlbmdp bmUuIEBjdHggaXMKKyAqIG9wdGlvbmFsIGFuZCBjYW4gYmUgMC4KICAqLwotdHlwZWRlZiB2b2lk ICgqaWd0X3JlbmRlcl9jb3B5ZnVuY190KShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNo LAotCQkJCSAgICAgIGRybV9pbnRlbF9jb250ZXh0ICpjb250ZXh0LAotCQkJCSAgICAgIGNvbnN0 IHN0cnVjdCBpZ3RfYnVmICpzcmMsIHVuc2lnbmVkIHNyY194LCB1bnNpZ25lZCBzcmNfeSwKLQkJ CQkgICAgICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LAotCQkJCSAgICAgIGNvbnN0 IHN0cnVjdCBpZ3RfYnVmICpkc3QsIHVuc2lnbmVkIGRzdF94LCB1bnNpZ25lZCBkc3RfeSk7Citz dHJ1Y3QgaW50ZWxfYmI7CitzdHJ1Y3QgaW50ZWxfYnVmOworCit0eXBlZGVmIHZvaWQgKCppZ3Rf cmVuZGVyX2NvcHlmdW5jX3QpKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAorCQkJCSAgICAgIHVpbnQz Ml90IGN0eCwKKwkJCQkgICAgICBzdHJ1Y3QgaW50ZWxfYnVmICpzcmMsCisJCQkJICAgICAgdWlu dDMyX3Qgc3JjX3gsIHVpbnQzMl90IHNyY195LAorCQkJCSAgICAgIHVpbnQzMl90IHdpZHRoLCB1 aW50MzJfdCBoZWlnaHQsCisJCQkJICAgICAgc3RydWN0IGludGVsX2J1ZiAqZHN0LAorCQkJCSAg ICAgIHVpbnQzMl90IGRzdF94LCB1aW50MzJfdCBkc3RfeSk7CiAKIGlndF9yZW5kZXJfY29weWZ1 bmNfdCBpZ3RfZ2V0X3JlbmRlcl9jb3B5ZnVuYyhpbnQgZGV2aWQpOwogCiAKIC8qKgogICogaWd0 X3ZlYm94X2NvcHlmdW5jX3Q6Ci0gKiBAYmF0Y2g6IGJhdGNoYnVmZmVyIG9iamVjdAotICogQHNy Yzogc291cmNlIGktZy10IGJ1ZmZlciBvYmplY3QKKyAqIEBpYmI6IGJhdGNoYnVmZmVyCisgKiBA c3JjOiBpbnRlbF9idWYgc291cmNlIG9iamVjdAogICogQHdpZHRoOiB3aWR0aCBvZiB0aGUgY29w aWVkIHJlY3RhbmdsZQogICogQGhlaWdodDogaGVpZ2h0IG9mIHRoZSBjb3BpZWQgcmVjdGFuZ2xl Ci0gKiBAZHN0OiBkZXN0aW5hdGlvbiBpLWctdCBidWZmZXIgb2JqZWN0CisgKiBAZHN0OiBpbnRl bF9idWYgZGVzdGluYXRpb24gb2JqZWN0CiAgKgogICogVGhpcyBpcyB0aGUgdHlwZSBvZiB0aGUg cGVyLXBsYXRmb3JtIHZlYm94IGNvcHkgZnVuY3Rpb25zLiBUaGUKICAqIHBsYXRmb3JtLXNwZWNp ZmljIGltcGxlbWVudGF0aW9uIGNhbiBiZSBvYnRhaW5lZCBieSBjYWxsaW5nCkBAIC0zNjEsMTAg KzM2NiwxMCBAQCBpZ3RfcmVuZGVyX2NvcHlmdW5jX3QgaWd0X2dldF9yZW5kZXJfY29weWZ1bmMo aW50IGRldmlkKTsKICAqIEEgdmVib3ggY29weSBmdW5jdGlvbiB3aWxsIGVtaXQgYSBiYXRjaGJ1 ZmZlciB0byB0aGUga2VybmVsIHdoaWNoIGV4ZWN1dGVzCiAgKiB0aGUgc3BlY2lmaWVkIGJsaXQg Y29weSBvcGVyYXRpb24gdXNpbmcgdGhlIHZlYm94IGVuZ2luZS4KICAqLwotdHlwZWRlZiB2b2lk ICgqaWd0X3ZlYm94X2NvcHlmdW5jX3QpKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gs Ci0JCQkJICAgICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqc3JjLAotCQkJCSAgICAgdW5zaWduZWQg d2lkdGgsIHVuc2lnbmVkIGhlaWdodCwKLQkJCQkgICAgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpk c3QpOwordHlwZWRlZiB2b2lkICgqaWd0X3ZlYm94X2NvcHlmdW5jX3QpKHN0cnVjdCBpbnRlbF9i YiAqaWJiLAorCQkJCSAgICAgc3RydWN0IGludGVsX2J1ZiAqc3JjLAorCQkJCSAgICAgdW5zaWdu ZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQgaGVpZ2h0LAorCQkJCSAgICAgc3RydWN0IGludGVs X2J1ZiAqZHN0KTsKIAogaWd0X3ZlYm94X2NvcHlmdW5jX3QgaWd0X2dldF92ZWJveF9jb3B5ZnVu YyhpbnQgZGV2aWQpOwogCkBAIC0zODUsNyArMzkwLDYgQEAgaWd0X3ZlYm94X2NvcHlmdW5jX3Qg aWd0X2dldF92ZWJveF9jb3B5ZnVuYyhpbnQgZGV2aWQpOwogICogQSBmaWxsIGZ1bmN0aW9uIHdp bGwgZW1pdCBhIGJhdGNoYnVmZmVyIHRvIHRoZSBrZXJuZWwgd2hpY2ggZXhlY3V0ZXMKICAqIHRo ZSBzcGVjaWZpZWQgYmxpdCBmaWxsIG9wZXJhdGlvbiB1c2luZyB0aGUgbWVkaWEvZ3BncHUgZW5n aW5lLgogICovCi1zdHJ1Y3QgaW50ZWxfYnVmOwogdHlwZWRlZiB2b2lkICgqaWd0X2ZpbGxmdW5j X3QpKGludCBpOTE1LAogCQkJICAgICAgIHN0cnVjdCBpbnRlbF9idWYgKmJ1ZiwKIAkJCSAgICAg ICB1bnNpZ25lZCB4LCB1bnNpZ25lZCB5LApkaWZmIC0tZ2l0IGEvbGliL3JlbmRlcmNvcHkuaCBi L2xpYi9yZW5kZXJjb3B5LmgKaW5kZXggZTA1NzdjYWMuLjhkZDg2N2JjIDEwMDY0NAotLS0gYS9s aWIvcmVuZGVyY29weS5oCisrKyBiL2xpYi9yZW5kZXJjb3B5LmgKQEAgLTEsNzAgKzEsNzAgQEAK ICNpbmNsdWRlICJpbnRlbF9iYXRjaGJ1ZmZlci5oIgogCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBl bWl0X3ZlcnRleF8ycyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorc3RhdGljIGlu bGluZSB2b2lkIGVtaXRfdmVydGV4XzJzKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAogCQkJCSAgaW50 MTZfdCB4LCBpbnQxNl90IHkpCiB7Ci0JT1VUX0JBVENIKCh1aW50MTZfdCl5IDw8IDE2IHwgKHVp bnQxNl90KXgpOworCWludGVsX2JiX291dChpYmIsICgodWludDE2X3QpeSA8PCAxNiB8ICh1aW50 MTZfdCl4KSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBlbWl0X3ZlcnRleChzdHJ1Y3QgaW50 ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorc3RhdGljIGlubGluZSB2b2lkIGVtaXRfdmVydGV4KHN0 cnVjdCBpbnRlbF9iYiAqaWJiLAogCQkJICAgICAgIGZsb2F0IGYpCiB7CiAJdW5pb24geyBmbG9h dCBmOyB1aW50MzJfdCB1aTsgfSB1OwogCXUuZiA9IGY7Ci0JT1VUX0JBVENIKHUudWkpOworCWlu dGVsX2JiX291dChpYmIsIHUudWkpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZW1pdF92ZXJ0 ZXhfbm9ybWFsaXplZChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorc3RhdGljIGlu bGluZSB2b2lkIGVtaXRfdmVydGV4X25vcm1hbGl6ZWQoc3RydWN0IGludGVsX2JiICppYmIsCiAJ CQkJCSAgZmxvYXQgZiwgZmxvYXQgdG90YWwpCiB7CiAJdW5pb24geyBmbG9hdCBmOyB1aW50MzJf dCB1aTsgfSB1OwogCXUuZiA9IGYgLyB0b3RhbDsKLQlPVVRfQkFUQ0godS51aSk7CisJaW50ZWxf YmJfb3V0KGliYiwgdS51aSk7CiB9CiAKLXZvaWQgZ2VuMTJfcmVuZGVyX2NvcHlmdW5jKHN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCQkgICBkcm1faW50ZWxfY29udGV4dCAqY29u dGV4dCwKLQkJCSAgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpzcmMsIHVuc2lnbmVkIHNyY194LCB1 bnNpZ25lZCBzcmNfeSwKLQkJCSAgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsCi0J CQkgICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0LCB1bnNpZ25lZCBkc3RfeCwgdW5zaWduZWQg ZHN0X3kpOwotdm9pZCBnZW4xMV9yZW5kZXJfY29weWZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVm ZmVyICpiYXRjaCwKLQkJCSAgZHJtX2ludGVsX2NvbnRleHQgKmNvbnRleHQsCi0JCQkgIGNvbnN0 IHN0cnVjdCBpZ3RfYnVmICpzcmMsIHVuc2lnbmVkIHNyY194LCB1bnNpZ25lZCBzcmNfeSwKLQkJ CSAgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwKLQkJCSAgY29uc3Qgc3RydWN0IGln dF9idWYgKmRzdCwgdW5zaWduZWQgZHN0X3gsIHVuc2lnbmVkIGRzdF95KTsKLXZvaWQgZ2VuOV9y ZW5kZXJfY29weWZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCSAgZHJt X2ludGVsX2NvbnRleHQgKmNvbnRleHQsCi0JCQkgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpzcmMs IHVuc2lnbmVkIHNyY194LCB1bnNpZ25lZCBzcmNfeSwKLQkJCSAgdW5zaWduZWQgd2lkdGgsIHVu c2lnbmVkIGhlaWdodCwKLQkJCSAgY29uc3Qgc3RydWN0IGlndF9idWYgKmRzdCwgdW5zaWduZWQg ZHN0X3gsIHVuc2lnbmVkIGRzdF95KTsKLXZvaWQgZ2VuOF9yZW5kZXJfY29weWZ1bmMoc3RydWN0 IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCSAgZHJtX2ludGVsX2NvbnRleHQgKmNvbnRl eHQsCi0JCQkgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpzcmMsIHVuc2lnbmVkIHNyY194LCB1bnNp Z25lZCBzcmNfeSwKLQkJCSAgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwKLQkJCSAg Y29uc3Qgc3RydWN0IGlndF9idWYgKmRzdCwgdW5zaWduZWQgZHN0X3gsIHVuc2lnbmVkIGRzdF95 KTsKLXZvaWQgZ2VuN19yZW5kZXJfY29weWZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaCwKLQkJCSAgZHJtX2ludGVsX2NvbnRleHQgKmNvbnRleHQsCi0JCQkgIGNvbnN0IHN0cnVj dCBpZ3RfYnVmICpzcmMsIHVuc2lnbmVkIHNyY194LCB1bnNpZ25lZCBzcmNfeSwKLQkJCSAgdW5z aWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwKLQkJCSAgY29uc3Qgc3RydWN0IGlndF9idWYg KmRzdCwgdW5zaWduZWQgZHN0X3gsIHVuc2lnbmVkIGRzdF95KTsKLXZvaWQgZ2VuNl9yZW5kZXJf Y29weWZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCSAgZHJtX2ludGVs X2NvbnRleHQgKmNvbnRleHQsCi0JCQkgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpzcmMsIHVuc2ln bmVkIHNyY194LCB1bnNpZ25lZCBzcmNfeSwKLQkJCSAgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVk IGhlaWdodCwKLQkJCSAgY29uc3Qgc3RydWN0IGlndF9idWYgKmRzdCwgdW5zaWduZWQgZHN0X3gs IHVuc2lnbmVkIGRzdF95KTsKLXZvaWQgZ2VuNF9yZW5kZXJfY29weWZ1bmMoc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCSAgZHJtX2ludGVsX2NvbnRleHQgKmNvbnRleHQsCi0J CQkgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpzcmMsIHVuc2lnbmVkIHNyY194LCB1bnNpZ25lZCBz cmNfeSwKLQkJCSAgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwKLQkJCSAgY29uc3Qg c3RydWN0IGlndF9idWYgKmRzdCwgdW5zaWduZWQgZHN0X3gsIHVuc2lnbmVkIGRzdF95KTsKLXZv aWQgZ2VuM19yZW5kZXJfY29weWZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwK LQkJCSAgZHJtX2ludGVsX2NvbnRleHQgKmNvbnRleHQsCi0JCQkgIGNvbnN0IHN0cnVjdCBpZ3Rf YnVmICpzcmMsIHVuc2lnbmVkIHNyY194LCB1bnNpZ25lZCBzcmNfeSwKLQkJCSAgdW5zaWduZWQg d2lkdGgsIHVuc2lnbmVkIGhlaWdodCwKLQkJCSAgY29uc3Qgc3RydWN0IGlndF9idWYgKmRzdCwg dW5zaWduZWQgZHN0X3gsIHVuc2lnbmVkIGRzdF95KTsKLXZvaWQgZ2VuMl9yZW5kZXJfY29weWZ1 bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCSAgZHJtX2ludGVsX2NvbnRl eHQgKmNvbnRleHQsCi0JCQkgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpzcmMsIHVuc2lnbmVkIHNy Y194LCB1bnNpZ25lZCBzcmNfeSwKLQkJCSAgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdo dCwKLQkJCSAgY29uc3Qgc3RydWN0IGlndF9idWYgKmRzdCwgdW5zaWduZWQgZHN0X3gsIHVuc2ln bmVkIGRzdF95KTsKK3ZvaWQgZ2VuMTJfcmVuZGVyX2NvcHlmdW5jKHN0cnVjdCBpbnRlbF9iYiAq aWJiLAorCQkJICAgdWludDMyX3QgY3R4LAorCQkJICAgc3RydWN0IGludGVsX2J1ZiAqc3JjLCB1 aW50MzJfdCBzcmNfeCwgdWludDMyX3Qgc3JjX3ksCisJCQkgICB1aW50MzJfdCB3aWR0aCwgdWlu dDMyX3QgaGVpZ2h0LAorCQkJICAgc3RydWN0IGludGVsX2J1ZiAqZHN0LCB1aW50MzJfdCBkc3Rf eCwgdWludDMyX3QgZHN0X3kpOwordm9pZCBnZW4xMV9yZW5kZXJfY29weWZ1bmMoc3RydWN0IGlu dGVsX2JiICppYmIsCisJCQkgIHVpbnQzMl90IGN0eCwKKwkJCSAgc3RydWN0IGludGVsX2J1ZiAq c3JjLCB1aW50MzJfdCBzcmNfeCwgdWludDMyX3Qgc3JjX3ksCisJCQkgIHVpbnQzMl90IHdpZHRo LCB1aW50MzJfdCBoZWlnaHQsCisJCQkgIHN0cnVjdCBpbnRlbF9idWYgKmRzdCwgdWludDMyX3Qg ZHN0X3gsIHVpbnQzMl90IGRzdF95KTsKK3ZvaWQgZ2VuOV9yZW5kZXJfY29weWZ1bmMoc3RydWN0 IGludGVsX2JiICppYmIsCisJCQkgIHVpbnQzMl90IGN0eCwKKwkJCSAgc3RydWN0IGludGVsX2J1 ZiAqc3JjLCB1aW50MzJfdCBzcmNfeCwgdWludDMyX3Qgc3JjX3ksCisJCQkgIHVpbnQzMl90IHdp ZHRoLCB1aW50MzJfdCBoZWlnaHQsCisJCQkgIHN0cnVjdCBpbnRlbF9idWYgKmRzdCwgdWludDMy X3QgZHN0X3gsIHVpbnQzMl90IGRzdF95KTsKK3ZvaWQgZ2VuOF9yZW5kZXJfY29weWZ1bmMoc3Ry dWN0IGludGVsX2JiICppYmIsCisJCQkgIHVpbnQzMl90IGN0eCwKKwkJCSAgc3RydWN0IGludGVs X2J1ZiAqc3JjLCB1aW50MzJfdCBzcmNfeCwgdWludDMyX3Qgc3JjX3ksCisJCQkgIHVpbnQzMl90 IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsCisJCQkgIHN0cnVjdCBpbnRlbF9idWYgKmRzdCwgdWlu dDMyX3QgZHN0X3gsIHVpbnQzMl90IGRzdF95KTsKK3ZvaWQgZ2VuN19yZW5kZXJfY29weWZ1bmMo c3RydWN0IGludGVsX2JiICppYmIsCisJCQkgIHVpbnQzMl90IGN0eCwKKwkJCSAgc3RydWN0IGlu dGVsX2J1ZiAqc3JjLCB1aW50MzJfdCBzcmNfeCwgdWludDMyX3Qgc3JjX3ksCisJCQkgIHVpbnQz Ml90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsCisJCQkgIHN0cnVjdCBpbnRlbF9idWYgKmRzdCwg dWludDMyX3QgZHN0X3gsIHVpbnQzMl90IGRzdF95KTsKK3ZvaWQgZ2VuNl9yZW5kZXJfY29weWZ1 bmMoc3RydWN0IGludGVsX2JiICppYmIsCisJCQkgIHVpbnQzMl90IGN0eCwKKwkJCSAgc3RydWN0 IGludGVsX2J1ZiAqc3JjLCB1aW50MzJfdCBzcmNfeCwgdWludDMyX3Qgc3JjX3ksCisJCQkgIHVp bnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsCisJCQkgIHN0cnVjdCBpbnRlbF9idWYgKmRz dCwgdWludDMyX3QgZHN0X3gsIHVpbnQzMl90IGRzdF95KTsKK3ZvaWQgZ2VuNF9yZW5kZXJfY29w eWZ1bmMoc3RydWN0IGludGVsX2JiICppYmIsCisJCQkgIHVpbnQzMl90IGN0eCwKKwkJCSAgc3Ry dWN0IGludGVsX2J1ZiAqc3JjLCB1aW50MzJfdCBzcmNfeCwgdWludDMyX3Qgc3JjX3ksCisJCQkg IHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsCisJCQkgIHN0cnVjdCBpbnRlbF9idWYg KmRzdCwgdWludDMyX3QgZHN0X3gsIHVpbnQzMl90IGRzdF95KTsKK3ZvaWQgZ2VuM19yZW5kZXJf Y29weWZ1bmMoc3RydWN0IGludGVsX2JiICppYmIsCisJCQkgIHVpbnQzMl90IGN0eCwKKwkJCSAg c3RydWN0IGludGVsX2J1ZiAqc3JjLCB1aW50MzJfdCBzcmNfeCwgdWludDMyX3Qgc3JjX3ksCisJ CQkgIHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsCisJCQkgIHN0cnVjdCBpbnRlbF9i dWYgKmRzdCwgdWludDMyX3QgZHN0X3gsIHVpbnQzMl90IGRzdF95KTsKK3ZvaWQgZ2VuMl9yZW5k ZXJfY29weWZ1bmMoc3RydWN0IGludGVsX2JiICppYmIsCisJCQkgIHVpbnQzMl90IGN0eCwKKwkJ CSAgc3RydWN0IGludGVsX2J1ZiAqc3JjLCB1aW50MzJfdCBzcmNfeCwgdWludDMyX3Qgc3JjX3ks CisJCQkgIHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQsCisJCQkgIHN0cnVjdCBpbnRl bF9idWYgKmRzdCwgdWludDMyX3QgZHN0X3gsIHVpbnQzMl90IGRzdF95KTsKZGlmZiAtLWdpdCBh L2xpYi9yZW5kZXJjb3B5X2dlbjQuYyBiL2xpYi9yZW5kZXJjb3B5X2dlbjQuYwppbmRleCA0MTNl MzM1Ny4uMDI3YWI1NzEgMTAwNjQ0Ci0tLSBhL2xpYi9yZW5kZXJjb3B5X2dlbjQuYworKysgYi9s aWIvcmVuZGVyY29weV9nZW40LmMKQEAgLTIsNiArMiw3IEBACiAjaW5jbHVkZSAiaW50ZWxfY2hp cHNldC5oIgogI2luY2x1ZGUgImdlbjRfcmVuZGVyLmgiCiAjaW5jbHVkZSAic3VyZmFjZWZvcm1h dC5oIgorI2luY2x1ZGUgImludGVsX2J1Zm9wcy5oIgogCiAjaW5jbHVkZSA8YXNzZXJ0Lmg+CiAK QEAgLTgwLDE4ICs4MSwxMyBAQCBzdGF0aWMgY29uc3QgdWludDMyX3QgZ2VuNV9wc19rZXJuZWxf bm9tYXNrX2FmZmluZVtdWzRdID0gewogfTsKIAogc3RhdGljIHVpbnQzMl90Ci1iYXRjaF91c2Vk KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitiYXRjaF9yb3VuZF91cHRvKHN0cnVj dCBpbnRlbF9iYiAqaWJiLCB1aW50MzJfdCBkaXZpc29yKQogewotCXJldHVybiBiYXRjaC0+cHRy IC0gYmF0Y2gtPmJ1ZmZlcjsKLX0KLQotc3RhdGljIHVpbnQzMl90Ci1iYXRjaF9yb3VuZF91cHRv KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IGRpdmlzb3IpCi17Ci0J dWludDMyX3Qgb2Zmc2V0ID0gYmF0Y2hfdXNlZChiYXRjaCk7CisJdWludDMyX3Qgb2Zmc2V0ID0g aW50ZWxfYmJfb2Zmc2V0KGliYik7CiAKIAlvZmZzZXQgPSAob2Zmc2V0ICsgZGl2aXNvciAtIDEp IC8gZGl2aXNvciAqIGRpdmlzb3I7Ci0JYmF0Y2gtPnB0ciA9IGJhdGNoLT5idWZmZXIgKyBvZmZz ZXQ7CisJaW50ZWxfYmJfcHRyX3NldChpYmIsIG9mZnNldCk7CisKIAlyZXR1cm4gb2Zmc2V0Owog fQogCkBAIC0xMjAsMzAgKzExNiwxNiBAQCBzdGF0aWMgaW50IGdlbjRfbWF4X3dtX3RocmVhZHMo dWludDMyX3QgZGV2aWQpCiAJcmV0dXJuIElTX0dFTjUoZGV2aWQpID8gNzIgOiBJU19HNFgoZGV2 aWQpID8gNTAgOiAzMjsKIH0KIAotc3RhdGljIHZvaWQKLWdlbjRfcmVuZGVyX2ZsdXNoKHN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCSAgZHJtX2ludGVsX2NvbnRleHQgKmNvbnRl eHQsIHVpbnQzMl90IGJhdGNoX2VuZCkKLXsKLQlpZ3RfYXNzZXJ0X2VxKGRybV9pbnRlbF9ib19z dWJkYXRhKGJhdGNoLT5ibywKLQkJCQkJICAgMCwgNDA5NiwgYmF0Y2gtPmJ1ZmZlciksCi0JCSAg ICAgIDApOwotCWlndF9hc3NlcnRfZXEoZHJtX2ludGVsX2dlbV9ib19jb250ZXh0X2V4ZWMoYmF0 Y2gtPmJvLCBjb250ZXh0LAotCQkJCQkJICAgIGJhdGNoX2VuZCwgMCksCi0JCSAgICAgIDApOwot fQotCiBzdGF0aWMgdWludDMyX3QKLWdlbjRfYmluZF9idWYoc3RydWN0IGludGVsX2JhdGNoYnVm ZmVyICpiYXRjaCwKLQkgICAgICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAotCSAgICAgIGlu dCBpc19kc3QpCitnZW40X2JpbmRfYnVmKHN0cnVjdCBpbnRlbF9iYiAqaWJiLCBjb25zdCBzdHJ1 Y3QgaW50ZWxfYnVmICpidWYsIGludCBpc19kc3QpCiB7CiAJc3RydWN0IGdlbjRfc3VyZmFjZV9z dGF0ZSAqc3M7CiAJdWludDMyX3Qgd3JpdGVfZG9tYWluLCByZWFkX2RvbWFpbjsKLQlpbnQgcmV0 OworCXVpbnQ2NF90IGFkZHJlc3M7CiAKIAlpZ3RfYXNzZXJ0X2x0ZShidWYtPnN1cmZhY2VbMF0u c3RyaWRlLCAxMjgqMTAyNCk7Ci0JaWd0X2Fzc2VydF9sdGUoaWd0X2J1Zl93aWR0aChidWYpLCA4 MTkyKTsKLQlpZ3RfYXNzZXJ0X2x0ZShpZ3RfYnVmX2hlaWdodChidWYpLCA4MTkyKTsKKwlpZ3Rf YXNzZXJ0X2x0ZShpbnRlbF9idWZfd2lkdGgoYnVmKSwgODE5Mik7CisJaWd0X2Fzc2VydF9sdGUo aW50ZWxfYnVmX2hlaWdodChidWYpLCA4MTkyKTsKIAogCWlmIChpc19kc3QpIHsKIAkJd3JpdGVf ZG9tYWluID0gcmVhZF9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5fUkVOREVSOwpAQCAtMTUyLDcg KzEzNCw3IEBAIGdlbjRfYmluZF9idWYoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwK IAkJcmVhZF9kb21haW4gPSBJOTE1X0dFTV9ET01BSU5fU0FNUExFUjsKIAl9CiAKLQlzcyA9IGlu dGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfYWxsb2MoYmF0Y2gsIHNpemVvZigqc3MpLCAzMik7CisJ c3MgPSBpbnRlbF9iYl9wdHJfYWxpZ24oaWJiLCAzMik7CiAKIAlzcy0+c3MwLnN1cmZhY2VfdHlw ZSA9IFNVUkZBQ0VfMkQ7CiAJc3dpdGNoIChidWYtPmJwcCkgewpAQCAtMTY1LDEwMiArMTQ3LDEw MiBAQCBnZW40X2JpbmRfYnVmKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCiAKIAlz cy0+c3MwLmRhdGFfcmV0dXJuX2Zvcm1hdCA9IFNVUkZBQ0VSRVRVUk5GT1JNQVRfRkxPQVQzMjsK IAlzcy0+c3MwLmNvbG9yX2JsZW5kID0gMTsKLQlzcy0+c3MxLmJhc2VfYWRkciA9IGJ1Zi0+Ym8t Pm9mZnNldDsKIAotCXJldCA9IGRybV9pbnRlbF9ib19lbWl0X3JlbG9jKGJhdGNoLT5ibywKLQkJ CQkgICAgICBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX29mZnNldChiYXRjaCwgc3MpICsgNCwK LQkJCQkgICAgICBidWYtPmJvLCAwLAotCQkJCSAgICAgIHJlYWRfZG9tYWluLCB3cml0ZV9kb21h aW4pOwotCWFzc2VydChyZXQgPT0gMCk7CisJYWRkcmVzcyA9IGludGVsX2JiX29mZnNldF9yZWxv YyhpYmIsIGJ1Zi0+aGFuZGxlLAorCQkJCQlyZWFkX2RvbWFpbiwgd3JpdGVfZG9tYWluLAorCQkJ CQlpbnRlbF9iYl9vZmZzZXQoaWJiKSArIDQsCisJCQkJCWJ1Zi0+YWRkci5vZmZzZXQpOworCXNz LT5zczEuYmFzZV9hZGRyID0gKHVpbnQzMl90KSBhZGRyZXNzOwogCi0Jc3MtPnNzMi5oZWlnaHQg PSBpZ3RfYnVmX2hlaWdodChidWYpIC0gMTsKLQlzcy0+c3MyLndpZHRoICA9IGlndF9idWZfd2lk dGgoYnVmKSAtIDE7CisJc3MtPnNzMi5oZWlnaHQgPSBpbnRlbF9idWZfaGVpZ2h0KGJ1ZikgLSAx OworCXNzLT5zczIud2lkdGggID0gaW50ZWxfYnVmX3dpZHRoKGJ1ZikgLSAxOwogCXNzLT5zczMu cGl0Y2ggID0gYnVmLT5zdXJmYWNlWzBdLnN0cmlkZSAtIDE7CiAJc3MtPnNzMy50aWxlZF9zdXJm YWNlID0gYnVmLT50aWxpbmcgIT0gSTkxNV9USUxJTkdfTk9ORTsKIAlzcy0+c3MzLnRpbGVfd2Fs ayAgICAgPSBidWYtPnRpbGluZyA9PSBJOTE1X1RJTElOR19ZOwogCi0JcmV0dXJuIGludGVsX2Jh dGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCBzcyk7CisJcmV0dXJuIGludGVsX2JiX3B0 cl9hZGRfcmV0dXJuX3ByZXZfb2Zmc2V0KGliYiwgc2l6ZW9mKCpzcykpOwogfQogCiBzdGF0aWMg dWludDMyX3QKLWdlbjRfYmluZF9zdXJmYWNlcyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJh dGNoLAotCQkgICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqc3JjLAotCQkgICBjb25zdCBzdHJ1Y3Qg aWd0X2J1ZiAqZHN0KQorZ2VuNF9iaW5kX3N1cmZhY2VzKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAor CQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfYnVmICpzcmMsCisJCSAgIGNvbnN0IHN0cnVjdCBpbnRl bF9idWYgKmRzdCkKIHsKLQl1aW50MzJfdCAqYmluZGluZ190YWJsZTsKKwl1aW50MzJfdCAqYmlu ZGluZ190YWJsZSwgYmluZGluZ190YWJsZV9vZmZzZXQ7CiAKLQliaW5kaW5nX3RhYmxlID0gaW50 ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9hbGxvYyhiYXRjaCwgMzIsIDMyKTsKKwliaW5kaW5nX3Rh YmxlID0gaW50ZWxfYmJfcHRyX2FsaWduKGliYiwgMzIpOworCWJpbmRpbmdfdGFibGVfb2Zmc2V0 ID0gaW50ZWxfYmJfcHRyX2FkZF9yZXR1cm5fcHJldl9vZmZzZXQoaWJiLCAzMik7CiAKLQliaW5k aW5nX3RhYmxlWzBdID0gZ2VuNF9iaW5kX2J1ZihiYXRjaCwgZHN0LCAxKTsKLQliaW5kaW5nX3Rh YmxlWzFdID0gZ2VuNF9iaW5kX2J1ZihiYXRjaCwgc3JjLCAwKTsKKwliaW5kaW5nX3RhYmxlWzBd ID0gZ2VuNF9iaW5kX2J1ZihpYmIsIGRzdCwgMSk7CisJYmluZGluZ190YWJsZVsxXSA9IGdlbjRf YmluZF9idWYoaWJiLCBzcmMsIDApOwogCi0JcmV0dXJuIGludGVsX2JhdGNoYnVmZmVyX3N1YmRh dGFfb2Zmc2V0KGJhdGNoLCBiaW5kaW5nX3RhYmxlKTsKKwlyZXR1cm4gYmluZGluZ190YWJsZV9v ZmZzZXQ7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW40X2VtaXRfc2lwKHN0cnVjdCBpbnRlbF9iYXRj aGJ1ZmZlciAqYmF0Y2gpCitnZW40X2VtaXRfc2lwKHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewot CU9VVF9CQVRDSChHRU40X1NUQVRFX1NJUCB8ICgyIC0gMikpOwotCU9VVF9CQVRDSCgwKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCBHRU40X1NUQVRFX1NJUCB8ICgyIC0gMikpOworCWludGVsX2JiX291 dChpYmIsIDApOwogfQogCiBzdGF0aWMgdm9pZAotZ2VuNF9lbWl0X3N0YXRlX2Jhc2VfYWRkcmVz cyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorZ2VuNF9lbWl0X3N0YXRlX2Jhc2Vf YWRkcmVzcyhzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKLQlpZiAoSVNfR0VONShiYXRjaC0+ZGV2 aWQpKSB7Ci0JCU9VVF9CQVRDSChHRU40X1NUQVRFX0JBU0VfQUREUkVTUyB8ICg4IC0gMikpOwot CQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCAvKiBnZW5lcmFsICovCi0JCQkgIEk5MTVfR0VNX0RPTUFJ Tl9JTlNUUlVDVElPTiwgMCwKLQkJCSAgQkFTRV9BRERSRVNTX01PRElGWSk7Ci0JCU9VVF9SRUxP QyhiYXRjaC0+Ym8sIC8qIHN1cmZhY2UgKi8KLQkJCSAgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNU SU9OLCAwLAotCQkJICBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQkJT1VUX0JBVENIKDApOyAvKiBt ZWRpYSAqLwotCQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCAvKiBpbnN0cnVjdGlvbiAqLwotCQkJICBJ OTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsCi0JCQkgIEJBU0VfQUREUkVTU19NT0RJRlkp OworCWlmIChJU19HRU41KGliYi0+ZGV2aWQpKSB7CisJCWludGVsX2JiX291dChpYmIsIEdFTjRf U1RBVEVfQkFTRV9BRERSRVNTIHwgKDggLSAyKSk7CisJCWludGVsX2JiX2VtaXRfcmVsb2MoaWJi LCBpYmItPmhhbmRsZSwgLyogZ2VuZXJhbCAqLworCQkJCSAgICBJOTE1X0dFTV9ET01BSU5fSU5T VFJVQ1RJT04sIDAsCisJCQkJICAgIEJBU0VfQUREUkVTU19NT0RJRlksIGliYi0+YmF0Y2hfb2Zm c2V0KTsKKwkJaW50ZWxfYmJfZW1pdF9yZWxvYyhpYmIsIGliYi0+aGFuZGxlLCAvKiBzdXJmYWNl ICovCisJCQkJICAgIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgMCwKKwkJCQkgICAgQkFT RV9BRERSRVNTX01PRElGWSwgaWJiLT5iYXRjaF9vZmZzZXQpOworCQlpbnRlbF9iYl9vdXQoaWJi LCAwKTsgLyogbWVkaWEgKi8KKwkJaW50ZWxfYmJfZW1pdF9yZWxvYyhpYmIsIGliYi0+aGFuZGxl LCAvKiBpbnN0cnVjdGlvbiAqLworCQkJCSAgICBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04s IDAsCisJCQkJICAgIEJBU0VfQUREUkVTU19NT0RJRlksIGliYi0+YmF0Y2hfb2Zmc2V0KTsKIAog CQkvKiB1cHBlciBib3VuZHMsIGRpc2FibGUgKi8KLQkJT1VUX0JBVENIKEJBU0VfQUREUkVTU19N T0RJRlkpOyAvKiBnZW5lcmFsICovCi0JCU9VVF9CQVRDSCgwKTsgLyogbWVkaWEgKi8KLQkJT1VU X0JBVENIKEJBU0VfQUREUkVTU19NT0RJRlkpOyAvKiBpbnN0cnVjdGlvbiAqLworCQlpbnRlbF9i Yl9vdXQoaWJiLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsgLyogZ2VuZXJhbCAqLworCQlpbnRlbF9i Yl9vdXQoaWJiLCAwKTsgLyogbWVkaWEgKi8KKwkJaW50ZWxfYmJfb3V0KGliYiwgQkFTRV9BRERS RVNTX01PRElGWSk7IC8qIGluc3RydWN0aW9uICovCiAJfSBlbHNlIHsKLQkJT1VUX0JBVENIKEdF TjRfU1RBVEVfQkFTRV9BRERSRVNTIHwgKDYgLSAyKSk7Ci0JCU9VVF9SRUxPQyhiYXRjaC0+Ym8s IC8qIGdlbmVyYWwgKi8KLQkJCSAgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCAwLAotCQkJ ICBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQkJT1VUX1JFTE9DKGJhdGNoLT5ibywgLyogc3VyZmFj ZSAqLwotCQkJICBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsCi0JCQkgIEJBU0VfQURE UkVTU19NT0RJRlkpOwotCQlPVVRfQkFUQ0goMCk7IC8qIG1lZGlhICovCisJCWludGVsX2JiX291 dChpYmIsIEdFTjRfU1RBVEVfQkFTRV9BRERSRVNTIHwgKDYgLSAyKSk7CisJCWludGVsX2JiX2Vt aXRfcmVsb2MoaWJiLCBpYmItPmhhbmRsZSwgLyogZ2VuZXJhbCAqLworCQkJCSAgICBJOTE1X0dF TV9ET01BSU5fSU5TVFJVQ1RJT04sIDAsCisJCQkJICAgIEJBU0VfQUREUkVTU19NT0RJRlksIGli Yi0+YmF0Y2hfb2Zmc2V0KTsKKwkJaW50ZWxfYmJfZW1pdF9yZWxvYyhpYmIsIGliYi0+aGFuZGxl LCAvKiBzdXJmYWNlICovCisJCQkJICAgIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgMCwK KwkJCQkgICAgQkFTRV9BRERSRVNTX01PRElGWSwgaWJiLT5iYXRjaF9vZmZzZXQpOworCQlpbnRl bF9iYl9vdXQoaWJiLCAwKTsgLyogbWVkaWEgKi8KIAogCQkvKiB1cHBlciBib3VuZHMsIGRpc2Fi bGUgKi8KLQkJT1VUX0JBVENIKEJBU0VfQUREUkVTU19NT0RJRlkpOyAvKiBnZW5lcmFsICovCi0J CU9VVF9CQVRDSCgwKTsgLyogbWVkaWEgKi8KKwkJaW50ZWxfYmJfb3V0KGliYiwgQkFTRV9BRERS RVNTX01PRElGWSk7IC8qIGdlbmVyYWwgKi8KKwkJaW50ZWxfYmJfb3V0KGliYiwgMCk7IC8qIG1l ZGlhICovCiAJfQogfQogCiBzdGF0aWMgdm9pZAotZ2VuNF9lbWl0X3BpcGVsaW5lZF9wb2ludGVy cyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorZ2VuNF9lbWl0X3BpcGVsaW5lZF9w b2ludGVycyhzdHJ1Y3QgaW50ZWxfYmIgKmliYiwKIAkJCSAgICAgdWludDMyX3QgdnMsIHVpbnQz Ml90IHNmLAogCQkJICAgICB1aW50MzJfdCB3bSwgdWludDMyX3QgY2MpCiB7Ci0JT1VUX0JBVENI KEdFTjRfM0RTVEFURV9QSVBFTElORURfUE9JTlRFUlMgfCAoNyAtIDIpKTsKLQlPVVRfQkFUQ0go dnMpOwotCU9VVF9CQVRDSChHRU40X0dTX0RJU0FCTEUpOwotCU9VVF9CQVRDSChHRU40X0NMSVBf RElTQUJMRSk7Ci0JT1VUX0JBVENIKHNmKTsKLQlPVVRfQkFUQ0god20pOwotCU9VVF9CQVRDSChj Yyk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONF8zRFNUQVRFX1BJUEVMSU5FRF9QT0lOVEVSUyB8 ICg3IC0gMikpOworCWludGVsX2JiX291dChpYmIsIHZzKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBH RU40X0dTX0RJU0FCTEUpOworCWludGVsX2JiX291dChpYmIsIEdFTjRfQ0xJUF9ESVNBQkxFKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCBzZik7CisJaW50ZWxfYmJfb3V0KGliYiwgd20pOworCWludGVs X2JiX291dChpYmIsIGNjKTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjRfZW1pdF91cmIoc3RydWN0 IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2dlbjRfZW1pdF91cmIoc3RydWN0IGludGVsX2Ji ICppYmIpCiB7Ci0JaW50IHZzX2VudHJpZXMgPSBnZW40X21heF92c19ucl91cmJfZW50cmllcyhi YXRjaC0+ZGV2aWQpOworCWludCB2c19lbnRyaWVzID0gZ2VuNF9tYXhfdnNfbnJfdXJiX2VudHJp ZXMoaWJiLT5kZXZpZCk7CiAJaW50IGdzX2VudHJpZXMgPSAwOwogCWludCBjbF9lbnRyaWVzID0g MDsKLQlpbnQgc2ZfZW50cmllcyA9IGdlbjRfbWF4X3NmX25yX3VyYl9lbnRyaWVzKGJhdGNoLT5k ZXZpZCk7CisJaW50IHNmX2VudHJpZXMgPSBnZW40X21heF9zZl9ucl91cmJfZW50cmllcyhpYmIt PmRldmlkKTsKIAlpbnQgY3NfZW50cmllcyA9IDA7CiAKIAlpbnQgdXJiX3ZzX2VuZCA9ICAgICAg ICAgICAgICB2c19lbnRyaWVzICogVVJCX1ZTX0VOVFJZX1NJWkU7CkBAIC0yNjksOTEgKzI1MSw5 MSBAQCBnZW40X2VtaXRfdXJiKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCiAJaW50 IHVyYl9zZl9lbmQgPSB1cmJfY2xfZW5kICsgc2ZfZW50cmllcyAqIFVSQl9TRl9FTlRSWV9TSVpF OwogCWludCB1cmJfY3NfZW5kID0gdXJiX3NmX2VuZCArIGNzX2VudHJpZXMgKiBVUkJfQ1NfRU5U UllfU0laRTsKIAotCWFzc2VydCh1cmJfY3NfZW5kIDw9IGdlbjRfdXJiX3NpemUoYmF0Y2gtPmRl dmlkKSk7Ci0KLQlpbnRlbF9iYXRjaGJ1ZmZlcl9hbGlnbihiYXRjaCwgMTYpOwotCi0JT1VUX0JB VENIKEdFTjRfVVJCX0ZFTkNFIHwKLQkJICBVRjBfQ1NfUkVBTExPQyB8Ci0JCSAgVUYwX1NGX1JF QUxMT0MgfAotCQkgIFVGMF9DTElQX1JFQUxMT0MgfAotCQkgIFVGMF9HU19SRUFMTE9DIHwKLQkJ ICBVRjBfVlNfUkVBTExPQyB8Ci0JCSAgKDMgLSAyKSk7Ci0JT1VUX0JBVENIKHVyYl9jbF9lbmQg PDwgVUYxX0NMSVBfRkVOQ0VfU0hJRlQgfAotCQkgIHVyYl9nc19lbmQgPDwgVUYxX0dTX0ZFTkNF X1NISUZUIHwKLQkJICB1cmJfdnNfZW5kIDw8IFVGMV9WU19GRU5DRV9TSElGVCk7Ci0JT1VUX0JB VENIKHVyYl9jc19lbmQgPDwgVUYyX0NTX0ZFTkNFX1NISUZUIHwKLQkJICB1cmJfc2ZfZW5kIDw8 IFVGMl9TRl9GRU5DRV9TSElGVCk7Ci0KLQlPVVRfQkFUQ0goR0VONF9DU19VUkJfU1RBVEUgfCAo MiAtIDIpKTsKLQlPVVRfQkFUQ0goKFVSQl9DU19FTlRSWV9TSVpFIC0gMSkgPDwgNCB8IGNzX2Vu dHJpZXMgPDwgMCk7CisJYXNzZXJ0KHVyYl9jc19lbmQgPD0gZ2VuNF91cmJfc2l6ZShpYmItPmRl dmlkKSk7CisKKwlpbnRlbF9iYl9wdHJfYWxpZ24oaWJiLCAxNik7CisKKwlpbnRlbF9iYl9vdXQo aWJiLCBHRU40X1VSQl9GRU5DRSB8CisJCSAgICAgVUYwX0NTX1JFQUxMT0MgfAorCQkgICAgIFVG MF9TRl9SRUFMTE9DIHwKKwkJICAgICBVRjBfQ0xJUF9SRUFMTE9DIHwKKwkJICAgICBVRjBfR1Nf UkVBTExPQyB8CisJCSAgICAgVUYwX1ZTX1JFQUxMT0MgfAorCQkgICAgICgzIC0gMikpOworCWlu dGVsX2JiX291dChpYmIsIHVyYl9jbF9lbmQgPDwgVUYxX0NMSVBfRkVOQ0VfU0hJRlQgfAorCQkg ICAgIHVyYl9nc19lbmQgPDwgVUYxX0dTX0ZFTkNFX1NISUZUIHwKKwkJICAgICB1cmJfdnNfZW5k IDw8IFVGMV9WU19GRU5DRV9TSElGVCk7CisJaW50ZWxfYmJfb3V0KGliYiwgdXJiX2NzX2VuZCA8 PCBVRjJfQ1NfRkVOQ0VfU0hJRlQgfAorCQkgICAgIHVyYl9zZl9lbmQgPDwgVUYyX1NGX0ZFTkNF X1NISUZUKTsKKworCWludGVsX2JiX291dChpYmIsIEdFTjRfQ1NfVVJCX1NUQVRFIHwgKDIgLSAy KSk7CisJaW50ZWxfYmJfb3V0KGliYiwgKFVSQl9DU19FTlRSWV9TSVpFIC0gMSkgPDwgNCB8IGNz X2VudHJpZXMgPDwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW40X2VtaXRfbnVsbF9kZXB0aF9i dWZmZXIoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2dlbjRfZW1pdF9udWxsX2Rl cHRoX2J1ZmZlcihzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKLQlpZiAoSVNfRzRYKGJhdGNoLT5k ZXZpZCkgfHwgSVNfR0VONShiYXRjaC0+ZGV2aWQpKSB7Ci0JCU9VVF9CQVRDSChHRU40XzNEU1RB VEVfREVQVEhfQlVGRkVSIHwgKDYgLSAyKSk7Ci0JCU9VVF9CQVRDSChTVVJGQUNFX05VTEwgPDwg R0VONF8zRFNUQVRFX0RFUFRIX0JVRkZFUl9UWVBFX1NISUZUIHwKLQkJCSAgR0VONF9ERVBUSEZP Uk1BVF9EMzJfRkxPQVQgPDwgR0VONF8zRFNUQVRFX0RFUFRIX0JVRkZFUl9GT1JNQVRfU0hJRlQp OwotCQlPVVRfQkFUQ0goMCk7Ci0JCU9VVF9CQVRDSCgwKTsKLQkJT1VUX0JBVENIKDApOwotCQlP VVRfQkFUQ0goMCk7CisJaWYgKElTX0c0WChpYmItPmRldmlkKSB8fCBJU19HRU41KGliYi0+ZGV2 aWQpKSB7CisJCWludGVsX2JiX291dChpYmIsIEdFTjRfM0RTVEFURV9ERVBUSF9CVUZGRVIgfCAo NiAtIDIpKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgU1VSRkFDRV9OVUxMIDw8IEdFTjRfM0RTVEFU RV9ERVBUSF9CVUZGRVJfVFlQRV9TSElGVCB8CisJCQkgICAgIEdFTjRfREVQVEhGT1JNQVRfRDMy X0ZMT0FUIDw8IEdFTjRfM0RTVEFURV9ERVBUSF9CVUZGRVJfRk9STUFUX1NISUZUKTsKKwkJaW50 ZWxfYmJfb3V0KGliYiwgMCk7CisJCWludGVsX2JiX291dChpYmIsIDApOworCQlpbnRlbF9iYl9v dXQoaWJiLCAwKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiAJfSBlbHNlIHsKLQkJT1VUX0JB VENIKEdFTjRfM0RTVEFURV9ERVBUSF9CVUZGRVIgfCAoNSAtIDIpKTsKLQkJT1VUX0JBVENIKFNV UkZBQ0VfTlVMTCA8PCBHRU40XzNEU1RBVEVfREVQVEhfQlVGRkVSX1RZUEVfU0hJRlQgfAotCQkJ ICBHRU40X0RFUFRIRk9STUFUX0QzMl9GTE9BVCA8PCBHRU40XzNEU1RBVEVfREVQVEhfQlVGRkVS X0ZPUk1BVF9TSElGVCk7Ci0JCU9VVF9CQVRDSCgwKTsKLQkJT1VUX0JBVENIKDApOwotCQlPVVRf QkFUQ0goMCk7CisJCWludGVsX2JiX291dChpYmIsIEdFTjRfM0RTVEFURV9ERVBUSF9CVUZGRVIg fCAoNSAtIDIpKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgU1VSRkFDRV9OVUxMIDw8IEdFTjRfM0RT VEFURV9ERVBUSF9CVUZGRVJfVFlQRV9TSElGVCB8CisJCQkgICAgIEdFTjRfREVQVEhGT1JNQVRf RDMyX0ZMT0FUIDw8IEdFTjRfM0RTVEFURV9ERVBUSF9CVUZGRVJfRk9STUFUX1NISUZUKTsKKwkJ aW50ZWxfYmJfb3V0KGliYiwgMCk7CisJCWludGVsX2JiX291dChpYmIsIDApOworCQlpbnRlbF9i Yl9vdXQoaWJiLCAwKTsKIAl9CiAKLQlpZiAoSVNfR0VONShiYXRjaC0+ZGV2aWQpKSB7Ci0JCU9V VF9CQVRDSChHRU40XzNEU1RBVEVfQ0xFQVJfUEFSQU1TIHwgKDIgLSAyKSk7Ci0JCU9VVF9CQVRD SCgwKTsKKwlpZiAoSVNfR0VONShpYmItPmRldmlkKSkgeworCQlpbnRlbF9iYl9vdXQoaWJiLCBH RU40XzNEU1RBVEVfQ0xFQVJfUEFSQU1TIHwgKDIgLSAyKSk7CisJCWludGVsX2JiX291dChpYmIs IDApOwogCX0KIH0KIAogc3RhdGljIHZvaWQKLWdlbjRfZW1pdF9pbnZhcmlhbnQoc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2dlbjRfZW1pdF9pbnZhcmlhbnQoc3RydWN0IGludGVs X2JiICppYmIpCiB7Ci0JT1VUX0JBVENIKE1JX0ZMVVNIIHwgTUlfSU5ISUJJVF9SRU5ERVJfQ0FD SEVfRkxVU0gpOworCWludGVsX2JiX291dChpYmIsIE1JX0ZMVVNIIHwgTUlfSU5ISUJJVF9SRU5E RVJfQ0FDSEVfRkxVU0gpOwogCi0JaWYgKElTX0dFTjUoYmF0Y2gtPmRldmlkKSB8fCBJU19HNFgo YmF0Y2gtPmRldmlkKSkKLQkJT1VUX0JBVENIKEc0WF9QSVBFTElORV9TRUxFQ1QgfCBQSVBFTElO RV9TRUxFQ1RfM0QpOworCWlmIChJU19HRU41KGliYi0+ZGV2aWQpIHx8IElTX0c0WChpYmItPmRl dmlkKSkKKwkJaW50ZWxfYmJfb3V0KGliYiwgRzRYX1BJUEVMSU5FX1NFTEVDVCB8IFBJUEVMSU5F X1NFTEVDVF8zRCk7CiAJZWxzZQotCQlPVVRfQkFUQ0goR0VONF9QSVBFTElORV9TRUxFQ1QgfCBQ SVBFTElORV9TRUxFQ1RfM0QpOworCQlpbnRlbF9iYl9vdXQoaWJiLCBHRU40X1BJUEVMSU5FX1NF TEVDVCB8IFBJUEVMSU5FX1NFTEVDVF8zRCk7CiB9CiAKIHN0YXRpYyB1aW50MzJfdAotZ2VuNF9j cmVhdGVfdnNfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2dlbjRfY3Jl YXRlX3ZzX3N0YXRlKHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewogCXN0cnVjdCBnZW40X3ZzX3N0 YXRlICp2czsKIAlpbnQgbnJfdXJiX2VudHJpZXM7CiAKLQl2cyA9IGludGVsX2JhdGNoYnVmZmVy X3N1YmRhdGFfYWxsb2MoYmF0Y2gsIHNpemVvZigqdnMpLCAzMik7CisJdnMgPSBpbnRlbF9iYl9w dHJfYWxpZ24oaWJiLCAzMik7CiAKIAkvKiBTZXQgdXAgdGhlIHZlcnRleCBzaGFkZXIgdG8gYmUg ZGlzYWJsZWQgKHBhc3N0aHJvdWdoKSAqLwotCW5yX3VyYl9lbnRyaWVzID0gZ2VuNF9tYXhfdnNf bnJfdXJiX2VudHJpZXMoYmF0Y2gtPmRldmlkKTsKLQlpZiAoSVNfR0VONShiYXRjaC0+ZGV2aWQp KQorCW5yX3VyYl9lbnRyaWVzID0gZ2VuNF9tYXhfdnNfbnJfdXJiX2VudHJpZXMoaWJiLT5kZXZp ZCk7CisJaWYgKElTX0dFTjUoaWJiLT5kZXZpZCkpCiAJCW5yX3VyYl9lbnRyaWVzID4+PSAyOwog CXZzLT52czQubnJfdXJiX2VudHJpZXMgPSBucl91cmJfZW50cmllczsKIAl2cy0+dnM0LnVyYl9l bnRyeV9hbGxvY2F0aW9uX3NpemUgPSBVUkJfVlNfRU5UUllfU0laRSAtIDE7CiAJdnMtPnZzNi52 c19lbmFibGUgPSAwOwogCXZzLT52czYudmVydF9jYWNoZV9kaXNhYmxlID0gMTsKIAotCXJldHVy biBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX29mZnNldChiYXRjaCwgdnMpOworCXJldHVybiBp bnRlbF9iYl9wdHJfYWRkX3JldHVybl9wcmV2X29mZnNldChpYmIsIHNpemVvZigqdnMpKTsKIH0K IAogc3RhdGljIHVpbnQzMl90Ci1nZW40X2NyZWF0ZV9zZl9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0 Y2hidWZmZXIgKmJhdGNoLAorZ2VuNF9jcmVhdGVfc2Zfc3RhdGUoc3RydWN0IGludGVsX2JiICpp YmIsCiAJCSAgICAgdWludDMyX3Qga2VybmVsKQogewogCXN0cnVjdCBnZW40X3NmX3N0YXRlICpz ZjsKIAotCXNmID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9hbGxvYyhiYXRjaCwgc2l6ZW9m KCpzZiksIDMyKTsKKwlzZiA9IGludGVsX2JiX3B0cl9hbGlnbihpYmIsIDMyKTsKIAogCXNmLT5z ZjAuZ3JmX3JlZ19jb3VudCA9IEdFTjRfR1JGX0JMT0NLUyhTRl9LRVJORUxfTlVNX0dSRik7CiAJ c2YtPnNmMC5rZXJuZWxfc3RhcnRfcG9pbnRlciA9IGtlcm5lbCA+PiA2OwpAQCAtMzYzLDI1ICsz NDUsMjUgQEAgZ2VuNF9jcmVhdGVfc2Zfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaCwKIAlzZi0+c2YzLnVyYl9lbnRyeV9yZWFkX29mZnNldCA9IDE7CiAJc2YtPnNmMy5kaXNw YXRjaF9ncmZfc3RhcnRfcmVnID0gMzsKIAotCXNmLT5zZjQubWF4X3RocmVhZHMgPSBnZW40X21h eF9zZl90aHJlYWRzKGJhdGNoLT5kZXZpZCkgLSAxOworCXNmLT5zZjQubWF4X3RocmVhZHMgPSBn ZW40X21heF9zZl90aHJlYWRzKGliYi0+ZGV2aWQpIC0gMTsKIAlzZi0+c2Y0LnVyYl9lbnRyeV9h bGxvY2F0aW9uX3NpemUgPSBVUkJfU0ZfRU5UUllfU0laRSAtIDE7Ci0Jc2YtPnNmNC5ucl91cmJf ZW50cmllcyA9IGdlbjRfbWF4X3NmX25yX3VyYl9lbnRyaWVzKGJhdGNoLT5kZXZpZCk7CisJc2Yt PnNmNC5ucl91cmJfZW50cmllcyA9IGdlbjRfbWF4X3NmX25yX3VyYl9lbnRyaWVzKGliYi0+ZGV2 aWQpOwogCiAJc2YtPnNmNi5jdWxsX21vZGUgPSBHRU40X0NVTExNT0RFX05PTkU7CiAJc2YtPnNm Ni5kZXN0X29yZ192YmlhcyA9IDB4ODsKIAlzZi0+c2Y2LmRlc3Rfb3JnX2hiaWFzID0gMHg4Owog Ci0JcmV0dXJuIGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCBzZik7CisJ cmV0dXJuIGludGVsX2JiX3B0cl9hZGRfcmV0dXJuX3ByZXZfb2Zmc2V0KGliYiwgc2l6ZW9mKCpz ZikpOwogfQogCiBzdGF0aWMgdWludDMyX3QKLWdlbjRfY3JlYXRlX3dtX3N0YXRlKHN0cnVjdCBp bnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCitnZW40X2NyZWF0ZV93bV9zdGF0ZShzdHJ1Y3QgaW50 ZWxfYmIgKmliYiwKIAkJICAgICB1aW50MzJfdCBrZXJuZWwsCiAJCSAgICAgdWludDMyX3Qgc2Ft cGxlcikKIHsKIAlzdHJ1Y3QgZ2VuNF93bV9zdGF0ZSAqd207CiAKLQl3bSA9IGludGVsX2JhdGNo YnVmZmVyX3N1YmRhdGFfYWxsb2MoYmF0Y2gsIHNpemVvZigqd20pLCAzMik7CisJd20gPSBpbnRl bF9iYl9wdHJfYWxpZ24oaWJiLCAzMik7CiAKIAlhc3NlcnQoKGtlcm5lbCAmIDYzKSA9PSAwKTsK IAl3bS0+d20wLmtlcm5lbF9zdGFydF9wb2ludGVyID0ga2VybmVsID4+IDY7CkBAIC0zOTQsNDgg KzM3Niw0OCBAQCBnZW40X2NyZWF0ZV93bV9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoLAogCXdtLT53bTQuc2FtcGxlcl9zdGF0ZV9wb2ludGVyID0gc2FtcGxlciA+PiA1Owog CXdtLT53bTQuc2FtcGxlcl9jb3VudCA9IDE7CiAKLQl3bS0+d201Lm1heF90aHJlYWRzID0gZ2Vu NF9tYXhfd21fdGhyZWFkcyhiYXRjaC0+ZGV2aWQpOworCXdtLT53bTUubWF4X3RocmVhZHMgPSBn ZW40X21heF93bV90aHJlYWRzKGliYi0+ZGV2aWQpOwogCXdtLT53bTUudGhyZWFkX2Rpc3BhdGNo X2VuYWJsZSA9IDE7CiAJd20tPndtNS5lbmFibGVfMTZfcGl4ID0gMTsKIAl3bS0+d201LmVhcmx5 X2RlcHRoX3Rlc3QgPSAxOwogCi0JaWYgKElTX0dFTjUoYmF0Y2gtPmRldmlkKSkKKwlpZiAoSVNf R0VONShpYmItPmRldmlkKSkKIAkJd20tPndtMS5iaW5kaW5nX3RhYmxlX2VudHJ5X2NvdW50ID0g MDsKIAllbHNlCiAJCXdtLT53bTEuYmluZGluZ190YWJsZV9lbnRyeV9jb3VudCA9IDI7CiAJd20t PndtMy51cmJfZW50cnlfcmVhZF9sZW5ndGggPSAyOwogCi0JcmV0dXJuIGludGVsX2JhdGNoYnVm ZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCB3bSk7CisJcmV0dXJuIGludGVsX2JiX3B0cl9hZGRf cmV0dXJuX3ByZXZfb2Zmc2V0KGliYiwgc2l6ZW9mKCp3bSkpOwogfQogCiBzdGF0aWMgdm9pZAot Z2VuNF9lbWl0X2JpbmRpbmdfdGFibGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwK K2dlbjRfZW1pdF9iaW5kaW5nX3RhYmxlKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAogCQkJdWludDMy X3Qgd21fdGFibGUpCiB7Ci0JT1VUX0JBVENIKEdFTjRfM0RTVEFURV9CSU5ESU5HX1RBQkxFX1BP SU5URVJTIHwgKDYgLSAyKSk7Ci0JT1VUX0JBVENIKDApOwkJLyogdnMgKi8KLQlPVVRfQkFUQ0go MCk7CQkvKiBncyAqLwotCU9VVF9CQVRDSCgwKTsJCS8qIGNsaXAgKi8KLQlPVVRfQkFUQ0goMCk7 CQkvKiBzZiAqLwotCU9VVF9CQVRDSCh3bV90YWJsZSk7ICAgIC8qIHBzICovCisJaW50ZWxfYmJf b3V0KGliYiwgR0VONF8zRFNUQVRFX0JJTkRJTkdfVEFCTEVfUE9JTlRFUlMgfCAoNiAtIDIpKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsJCS8qIHZzICovCisJaW50ZWxfYmJfb3V0KGliYiwgMCk7 CQkvKiBncyAqLworCWludGVsX2JiX291dChpYmIsIDApOwkJLyogY2xpcCAqLworCWludGVsX2Ji X291dChpYmIsIDApOwkJLyogc2YgKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCB3bV90YWJsZSk7ICAg IC8qIHBzICovCiB9CiAKIHN0YXRpYyB2b2lkCi1nZW40X2VtaXRfZHJhd2luZ19yZWN0YW5nbGUo c3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCSAgICBjb25zdCBzdHJ1Y3QgaWd0 X2J1ZiAqZHN0KQorZ2VuNF9lbWl0X2RyYXdpbmdfcmVjdGFuZ2xlKHN0cnVjdCBpbnRlbF9iYiAq aWJiLAorCQkJICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9idWYgKmRzdCkKIHsKLQlPVVRfQkFUQ0go R0VONF8zRFNUQVRFX0RSQVdJTkdfUkVDVEFOR0xFIHwgKDQgLSAyKSk7Ci0JT1VUX0JBVENIKDAp OwotCU9VVF9CQVRDSCgoaWd0X2J1Zl9oZWlnaHQoZHN0KSAtIDEpIDw8IDE2IHwKLQkJICAoaWd0 X2J1Zl93aWR0aChkc3QpIC0gMSkpOwotCU9VVF9CQVRDSCgwKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCBHRU40XzNEU1RBVEVfRFJBV0lOR19SRUNUQU5HTEUgfCAoNCAtIDIpKTsKKwlpbnRlbF9iYl9v dXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAoaW50ZWxfYnVmX2hlaWdodChkc3QpIC0g MSkgPDwgMTYgfAorCQkgICAgIChpbnRlbF9idWZfd2lkdGgoZHN0KSAtIDEpKTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCAwKTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjRfZW1pdF92ZXJ0ZXhfZWxlbWVu dHMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2dlbjRfZW1pdF92ZXJ0ZXhfZWxl bWVudHMoc3RydWN0IGludGVsX2JiICppYmIpCiB7CiAKLQlpZiAoSVNfR0VONShiYXRjaC0+ZGV2 aWQpKSB7CisJaWYgKElTX0dFTjUoaWJiLT5kZXZpZCkpIHsKIAkJLyogVGhlIFZVRSBsYXlvdXQK IAkJICogICAgZHdvcmQgMC0zOiBwYWQgKDAuMCwgMC4wLCAwLjAsIDAuMCksCiAJCSAqICAgIGR3 b3JkIDQtNzogcG9zaXRpb24gKHgsIHksIDEuMCwgMS4wKSwKQEAgLTQ0MywzNCArNDI1LDM0IEBA IGdlbjRfZW1pdF92ZXJ0ZXhfZWxlbWVudHMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRj aCkKIAkJICoKIAkJICogZHdvcmQgNC0xMSBhcmUgZmV0Y2hlZCBmcm9tIHZlcnRleCBidWZmZXIK IAkJICovCi0JCU9VVF9CQVRDSChHRU40XzNEU1RBVEVfVkVSVEVYX0VMRU1FTlRTIHwgKDMgKiAy ICsgMSAtIDIpKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgR0VONF8zRFNUQVRFX1ZFUlRFWF9FTEVN RU5UUyB8ICgzICogMiArIDEgLSAyKSk7CiAKIAkJLyogcGFkICovCi0JCU9VVF9CQVRDSCgwIDw8 IEdFTjRfVkUwX1ZFUlRFWF9CVUZGRVJfSU5ERVhfU0hJRlQgfCBHRU40X1ZFMF9WQUxJRCB8Ci0J CQkgIFNVUkZBQ0VGT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FUIDw8IFZFMF9GT1JNQVRfU0hJRlQg fAotCQkJICAwIDw8IFZFMF9PRkZTRVRfU0hJRlQpOwotCQlPVVRfQkFUQ0goR0VONF9WRkNPTVBP TkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8wX1NISUZUIHwKLQkJCSAgR0VONF9WRkNP TVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8xX1NISUZUIHwKLQkJCSAgR0VONF9W RkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8yX1NISUZUIHwKLQkJCSAgR0VO NF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8zX1NISUZUKTsKKwkJaW50 ZWxfYmJfb3V0KGliYiwgMCA8PCBHRU40X1ZFMF9WRVJURVhfQlVGRkVSX0lOREVYX1NISUZUIHwg R0VONF9WRTBfVkFMSUQgfAorCQkJICAgICBTVVJGQUNFRk9STUFUX1IzMkczMkIzMkEzMl9GTE9B VCA8PCBWRTBfRk9STUFUX1NISUZUIHwKKwkJCSAgICAgMCA8PCBWRTBfT0ZGU0VUX1NISUZUKTsK KwkJaW50ZWxfYmJfb3V0KGliYiwgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNP TVBPTkVOVF8wX1NISUZUIHwKKwkJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZF MV9WRkNPTVBPTkVOVF8xX1NISUZUIHwKKwkJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8w IDw8IFZFMV9WRkNPTVBPTkVOVF8yX1NISUZUIHwKKwkJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9T VE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8zX1NISUZUKTsKIAogCQkvKiB4LHkgKi8KLQkJT1VU X0JBVENIKDAgPDwgR0VONF9WRTBfVkVSVEVYX0JVRkZFUl9JTkRFWF9TSElGVCB8IEdFTjRfVkUw X1ZBTElEIHwKLQkJCSAgU1VSRkFDRUZPUk1BVF9SMTZHMTZfU1NDQUxFRCA8PCBWRTBfRk9STUFU X1NISUZUIHwKLQkJCSAgMCA8PCBWRTBfT0ZGU0VUX1NISUZUKTsKLQkJT1VUX0JBVENIKEdFTjRf VkZDT01QT05FTlRfU1RPUkVfU1JDIDw8IFZFMV9WRkNPTVBPTkVOVF8wX1NISUZUIHwKLQkJCSAg R0VONF9WRkNPTVBPTkVOVF9TVE9SRV9TUkMgPDwgVkUxX1ZGQ09NUE9ORU5UXzFfU0hJRlQgfAot CQkJICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzFfRkxUIDw8IFZFMV9WRkNPTVBPTkVOVF8yX1NI SUZUIHwKLQkJCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8xX0ZMVCA8PCBWRTFfVkZDT01QT05F TlRfM19TSElGVCk7CisJCWludGVsX2JiX291dChpYmIsIDAgPDwgR0VONF9WRTBfVkVSVEVYX0JV RkZFUl9JTkRFWF9TSElGVCB8IEdFTjRfVkUwX1ZBTElEIHwKKwkJCSAgICAgU1VSRkFDRUZPUk1B VF9SMTZHMTZfU1NDQUxFRCA8PCBWRTBfRk9STUFUX1NISUZUIHwKKwkJCSAgICAgMCA8PCBWRTBf T0ZGU0VUX1NISUZUKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgR0VONF9WRkNPTVBPTkVOVF9TVE9S RV9TUkMgPDwgVkUxX1ZGQ09NUE9ORU5UXzBfU0hJRlQgfAorCQkJICAgICBHRU40X1ZGQ09NUE9O RU5UX1NUT1JFX1NSQyA8PCBWRTFfVkZDT01QT05FTlRfMV9TSElGVCB8CisJCQkgICAgIEdFTjRf VkZDT01QT05FTlRfU1RPUkVfMV9GTFQgPDwgVkUxX1ZGQ09NUE9ORU5UXzJfU0hJRlQgfAorCQkJ ICAgICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzFfRkxUIDw8IFZFMV9WRkNPTVBPTkVOVF8zX1NI SUZUKTsKIAogCQkvKiB1MCwgdjAgKi8KLQkJT1VUX0JBVENIKDAgPDwgR0VONF9WRTBfVkVSVEVY X0JVRkZFUl9JTkRFWF9TSElGVCB8IEdFTjRfVkUwX1ZBTElEIHwKLQkJCSAgU1VSRkFDRUZPUk1B VF9SMzJHMzJfRkxPQVQgPDwgVkUwX0ZPUk1BVF9TSElGVCB8Ci0JCQkgIDQgPDwgVkUwX09GRlNF VF9TSElGVCk7Ci0JCU9VVF9CQVRDSChHRU40X1ZGQ09NUE9ORU5UX1NUT1JFX1NSQyA8PCBWRTFf VkZDT01QT05FTlRfMF9TSElGVCB8Ci0JCQkgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfU1JDIDw8 IFZFMV9WRkNPTVBPTkVOVF8xX1NISUZUIHwKLQkJCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8w IDw8IFZFMV9WRkNPTVBPTkVOVF8yX1NISUZUIHwKLQkJCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9S RV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8zX1NISUZUKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgMCA8 PCBHRU40X1ZFMF9WRVJURVhfQlVGRkVSX0lOREVYX1NISUZUIHwgR0VONF9WRTBfVkFMSUQgfAor CQkJICAgICBTVVJGQUNFRk9STUFUX1IzMkczMl9GTE9BVCA8PCBWRTBfRk9STUFUX1NISUZUIHwK KwkJCSAgICAgNCA8PCBWRTBfT0ZGU0VUX1NISUZUKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgR0VO NF9WRkNPTVBPTkVOVF9TVE9SRV9TUkMgPDwgVkUxX1ZGQ09NUE9ORU5UXzBfU0hJRlQgfAorCQkJ ICAgICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFX1NSQyA8PCBWRTFfVkZDT01QT05FTlRfMV9TSElG VCB8CisJCQkgICAgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMCA8PCBWRTFfVkZDT01QT05FTlRf Ml9TSElGVCB8CisJCQkgICAgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMCA8PCBWRTFfVkZDT01Q T05FTlRfM19TSElGVCk7CiAJfSBlbHNlIHsKIAkJLyogVGhlIFZVRSBsYXlvdXQKIAkJICogICAg ZHdvcmQgMC0zOiBwb3NpdGlvbiAoeCwgeSwgMS4wLCAxLjApLApAQCAtNDc4LDkwICs0NjAsODgg QEAgZ2VuNF9lbWl0X3ZlcnRleF9lbGVtZW50cyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJh dGNoKQogCQkgKgogCQkgKiBkd29yZCAwLTcgYXJlIGZldGNoZWQgZnJvbSB2ZXJ0ZXggYnVmZmVy CiAJCSAqLwotCQlPVVRfQkFUQ0goR0VONF8zRFNUQVRFX1ZFUlRFWF9FTEVNRU5UUyB8ICgyICog MiArIDEgLSAyKSk7CisJCWludGVsX2JiX291dChpYmIsIEdFTjRfM0RTVEFURV9WRVJURVhfRUxF TUVOVFMgfCAoMiAqIDIgKyAxIC0gMikpOwogCiAJCS8qIHgseSAqLwotCQlPVVRfQkFUQ0goMCA8 PCBHRU40X1ZFMF9WRVJURVhfQlVGRkVSX0lOREVYX1NISUZUIHwgR0VONF9WRTBfVkFMSUQgfAot CQkJICBTVVJGQUNFRk9STUFUX1IxNkcxNl9TU0NBTEVEIDw8IFZFMF9GT1JNQVRfU0hJRlQgfAot CQkJICAwIDw8IFZFMF9PRkZTRVRfU0hJRlQpOwotCQlPVVRfQkFUQ0goR0VONF9WRkNPTVBPTkVO VF9TVE9SRV9TUkMgPDwgVkUxX1ZGQ09NUE9ORU5UXzBfU0hJRlQgfAotCQkJICBHRU40X1ZGQ09N UE9ORU5UX1NUT1JFX1NSQyA8PCBWRTFfVkZDT01QT05FTlRfMV9TSElGVCB8Ci0JCQkgIEdFTjRf VkZDT01QT05FTlRfU1RPUkVfMV9GTFQgPDwgVkUxX1ZGQ09NUE9ORU5UXzJfU0hJRlQgfAotCQkJ ICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzFfRkxUIDw8IFZFMV9WRkNPTVBPTkVOVF8zX1NISUZU IHwKLQkJCSAgNCA8PCBWRTFfREVTVElOQVRJT05fRUxFTUVOVF9PRkZTRVRfU0hJRlQpOworCQlp bnRlbF9iYl9vdXQoaWJiLCAwIDw8IEdFTjRfVkUwX1ZFUlRFWF9CVUZGRVJfSU5ERVhfU0hJRlQg fCBHRU40X1ZFMF9WQUxJRCB8CisJCQkgICAgIFNVUkZBQ0VGT1JNQVRfUjE2RzE2X1NTQ0FMRUQg PDwgVkUwX0ZPUk1BVF9TSElGVCB8CisJCQkgICAgIDAgPDwgVkUwX09GRlNFVF9TSElGVCk7CisJ CWludGVsX2JiX291dChpYmIsIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfU1JDIDw8IFZFMV9WRkNP TVBPTkVOVF8wX1NISUZUIHwKKwkJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV9TUkMgPDwg VkUxX1ZGQ09NUE9ORU5UXzFfU0hJRlQgfAorCQkJICAgICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JF XzFfRkxUIDw8IFZFMV9WRkNPTVBPTkVOVF8yX1NISUZUIHwKKwkJCSAgICAgR0VONF9WRkNPTVBP TkVOVF9TVE9SRV8xX0ZMVCA8PCBWRTFfVkZDT01QT05FTlRfM19TSElGVCB8CisJCQkgICAgIDQg PDwgVkUxX0RFU1RJTkFUSU9OX0VMRU1FTlRfT0ZGU0VUX1NISUZUKTsKIAogCQkvKiB1MCwgdjAg Ki8KLQkJT1VUX0JBVENIKDAgPDwgR0VONF9WRTBfVkVSVEVYX0JVRkZFUl9JTkRFWF9TSElGVCB8 IEdFTjRfVkUwX1ZBTElEIHwKLQkJCSAgU1VSRkFDRUZPUk1BVF9SMzJHMzJfRkxPQVQgPDwgVkUw X0ZPUk1BVF9TSElGVCB8Ci0JCQkgIDQgPDwgVkUwX09GRlNFVF9TSElGVCk7Ci0JCU9VVF9CQVRD SChHRU40X1ZGQ09NUE9ORU5UX1NUT1JFX1NSQyA8PCBWRTFfVkZDT01QT05FTlRfMF9TSElGVCB8 Ci0JCQkgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfU1JDIDw8IFZFMV9WRkNPTVBPTkVOVF8xX1NI SUZUIHwKLQkJCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8y X1NISUZUIHwKLQkJCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVO VF8zX1NISUZUIHwKLQkJCSAgOCA8PCBWRTFfREVTVElOQVRJT05fRUxFTUVOVF9PRkZTRVRfU0hJ RlQpOworCQlpbnRlbF9iYl9vdXQoaWJiLCAwIDw8IEdFTjRfVkUwX1ZFUlRFWF9CVUZGRVJfSU5E RVhfU0hJRlQgfCBHRU40X1ZFMF9WQUxJRCB8CisJCQkgICAgIFNVUkZBQ0VGT1JNQVRfUjMyRzMy X0ZMT0FUIDw8IFZFMF9GT1JNQVRfU0hJRlQgfAorCQkJICAgICA0IDw8IFZFMF9PRkZTRVRfU0hJ RlQpOworCQlpbnRlbF9iYl9vdXQoaWJiLCBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFX1NSQyA8PCBW RTFfVkZDT01QT05FTlRfMF9TSElGVCB8CisJCQkgICAgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVf U1JDIDw8IFZFMV9WRkNPTVBPTkVOVF8xX1NISUZUIHwKKwkJCSAgICAgR0VONF9WRkNPTVBPTkVO VF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8yX1NISUZUIHwKKwkJCSAgICAgR0VONF9WRkNP TVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8zX1NISUZUIHwKKwkJCSAgICAgOCA8 PCBWRTFfREVTVElOQVRJT05fRUxFTUVOVF9PRkZTRVRfU0hJRlQpOwogCX0KIH0KIAogc3RhdGlj IHVpbnQzMl90Ci1nZW40X2NyZWF0ZV9jY192aWV3cG9ydChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoKQorZ2VuNF9jcmVhdGVfY2Nfdmlld3BvcnQoc3RydWN0IGludGVsX2JiICppYmIp CiB7CiAJc3RydWN0IGdlbjRfY2Nfdmlld3BvcnQgKnZwOwogCi0JdnAgPSBpbnRlbF9iYXRjaGJ1 ZmZlcl9zdWJkYXRhX2FsbG9jKGJhdGNoLCBzaXplb2YoKnZwKSwgMzIpOworCXZwID0gaW50ZWxf YmJfcHRyX2FsaWduKGliYiwgMzIpOwogCiAJdnAtPm1pbl9kZXB0aCA9IC0xLmUzNTsKIAl2cC0+ bWF4X2RlcHRoID0gMS5lMzU7CiAKLQlyZXR1cm4gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9v ZmZzZXQoYmF0Y2gsIHZwKTsKKwlyZXR1cm4gaW50ZWxfYmJfcHRyX2FkZF9yZXR1cm5fcHJldl9v ZmZzZXQoaWJiLCBzaXplb2YoKnZwKSk7CiB9CiAKIHN0YXRpYyB1aW50MzJfdAotZ2VuNF9jcmVh dGVfY2Nfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKK2dlbjRfY3JlYXRl X2NjX3N0YXRlKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAogCQkgICAgIHVpbnQzMl90IGNjX3ZwKQog ewogCXN0cnVjdCBnZW40X2NvbG9yX2NhbGNfc3RhdGUgKmNjOwogCi0JY2MgPSBpbnRlbF9iYXRj aGJ1ZmZlcl9zdWJkYXRhX2FsbG9jKGJhdGNoLCBzaXplb2YoKmNjKSwgNjQpOworCWNjID0gaW50 ZWxfYmJfcHRyX2FsaWduKGliYiwgNjQpOwogCiAJY2MtPmNjNC5jY192aWV3cG9ydF9zdGF0ZV9v ZmZzZXQgPSBjY192cDsKIAotCXJldHVybiBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX29mZnNl dChiYXRjaCwgY2MpOworCXJldHVybiBpbnRlbF9iYl9wdHJfYWRkX3JldHVybl9wcmV2X29mZnNl dChpYmIsIHNpemVvZigqY2MpKTsKIH0KIAogc3RhdGljIHVpbnQzMl90Ci1nZW40X2NyZWF0ZV9z Zl9rZXJuZWwoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2dlbjRfY3JlYXRlX3Nm X2tlcm5lbChzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKLQlpZiAoSVNfR0VONShiYXRjaC0+ZGV2 aWQpKQotCQlyZXR1cm4gaW50ZWxfYmF0Y2hidWZmZXJfY29weV9kYXRhKGJhdGNoLCBnZW41X3Nm X2tlcm5lbF9ub21hc2ssCi0JCQkJCQkgICBzaXplb2YoZ2VuNV9zZl9rZXJuZWxfbm9tYXNrKSwK LQkJCQkJCSAgIDY0KTsKKwlpZiAoSVNfR0VONShpYmItPmRldmlkKSkKKwkJcmV0dXJuIGludGVs X2JiX2NvcHlfZGF0YShpYmIsIGdlbjVfc2Zfa2VybmVsX25vbWFzaywKKwkJCQkJICBzaXplb2Yo Z2VuNV9zZl9rZXJuZWxfbm9tYXNrKSwgNjQpOwogCWVsc2UKLQkJcmV0dXJuIGludGVsX2JhdGNo YnVmZmVyX2NvcHlfZGF0YShiYXRjaCwgZ2VuNF9zZl9rZXJuZWxfbm9tYXNrLAotCQkJCQkJICAg c2l6ZW9mKGdlbjRfc2Zfa2VybmVsX25vbWFzayksCi0JCQkJCQkgICA2NCk7CisJCXJldHVybiBp bnRlbF9iYl9jb3B5X2RhdGEoaWJiLCBnZW40X3NmX2tlcm5lbF9ub21hc2ssCisJCQkJCSAgc2l6 ZW9mKGdlbjRfc2Zfa2VybmVsX25vbWFzayksIDY0KTsKIH0KIAogc3RhdGljIHVpbnQzMl90Ci1n ZW40X2NyZWF0ZV9wc19rZXJuZWwoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2dl bjRfY3JlYXRlX3BzX2tlcm5lbChzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKLQlpZiAoSVNfR0VO NShiYXRjaC0+ZGV2aWQpKQotCQlyZXR1cm4gaW50ZWxfYmF0Y2hidWZmZXJfY29weV9kYXRhKGJh dGNoLCBnZW41X3BzX2tlcm5lbF9ub21hc2tfYWZmaW5lLAotCQkJCQkJICAgc2l6ZW9mKGdlbjVf cHNfa2VybmVsX25vbWFza19hZmZpbmUpLAotCQkJCQkJICAgNjQpOworCWlmIChJU19HRU41KGli Yi0+ZGV2aWQpKQorCQlyZXR1cm4gaW50ZWxfYmJfY29weV9kYXRhKGliYiwgZ2VuNV9wc19rZXJu ZWxfbm9tYXNrX2FmZmluZSwKKwkJCQkJICBzaXplb2YoZ2VuNV9wc19rZXJuZWxfbm9tYXNrX2Fm ZmluZSksCisJCQkJCSAgNjQpOwogCWVsc2UKLQkJcmV0dXJuIGludGVsX2JhdGNoYnVmZmVyX2Nv cHlfZGF0YShiYXRjaCwgZ2VuNF9wc19rZXJuZWxfbm9tYXNrX2FmZmluZSwKLQkJCQkJCSAgIHNp emVvZihnZW40X3BzX2tlcm5lbF9ub21hc2tfYWZmaW5lKSwKLQkJCQkJCSAgIDY0KTsKKwkJcmV0 dXJuIGludGVsX2JiX2NvcHlfZGF0YShpYmIsIGdlbjRfcHNfa2VybmVsX25vbWFza19hZmZpbmUs CisJCQkJCSAgc2l6ZW9mKGdlbjRfcHNfa2VybmVsX25vbWFza19hZmZpbmUpLAorCQkJCQkgIDY0 KTsKIH0KIAogc3RhdGljIHVpbnQzMl90Ci1nZW40X2NyZWF0ZV9zYW1wbGVyKHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCitnZW40X2NyZWF0ZV9zYW1wbGVyKHN0cnVjdCBpbnRlbF9i YiAqaWJiLAogCQkgICAgc2FtcGxlcl9maWx0ZXJfdCBmaWx0ZXIsCiAJCSAgICBzYW1wbGVyX2V4 dGVuZF90IGV4dGVuZCkKIHsKIAlzdHJ1Y3QgZ2VuNF9zYW1wbGVyX3N0YXRlICpzczsKIAotCXNz ID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9hbGxvYyhiYXRjaCwgc2l6ZW9mKCpzcyksIDMy KTsKKwlzcyA9IGludGVsX2JiX3B0cl9hbGlnbihpYmIsIDMyKTsKIAogCXNzLT5zczAubG9kX3By ZWNsYW1wID0gR0VONF9MT0RfUFJFQ0xBTVBfT0dMOwogCkBAIC02MDYsNTAgKzU4Niw1MiBAQCBn ZW40X2NyZWF0ZV9zYW1wbGVyKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCiAJCWJy ZWFrOwogCX0KIAotCXJldHVybiBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX29mZnNldChiYXRj aCwgc3MpOworCXJldHVybiBpbnRlbF9iYl9wdHJfYWRkX3JldHVybl9wcmV2X29mZnNldChpYmIs IHNpemVvZigqc3MpKTsKIH0KIAotc3RhdGljIHZvaWQgZ2VuNF9lbWl0X3ZlcnRleF9idWZmZXIo c3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK3N0YXRpYyB2b2lkIGdlbjRfZW1pdF92 ZXJ0ZXhfYnVmZmVyKHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewotCU9VVF9CQVRDSChHRU40XzNE U1RBVEVfVkVSVEVYX0JVRkZFUlMgfCAoNSAtIDIpKTsKLQlPVVRfQkFUQ0goR0VONF9WQjBfVkVS VEVYREFUQSB8Ci0JCSAgMCA8PCBHRU40X1ZCMF9CVUZGRVJfSU5ERVhfU0hJRlQgfAotCQkgIFZF UlRFWF9TSVpFIDw8IFZCMF9CVUZGRVJfUElUQ0hfU0hJRlQpOwotCU9VVF9SRUxPQyhiYXRjaC0+ Ym8sIEk5MTVfR0VNX0RPTUFJTl9WRVJURVgsIDAsIDApOwotCWlmIChJU19HRU41KGJhdGNoLT5k ZXZpZCkpCi0JCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9WRVJURVgsIDAs Ci0JCQkgIGJhdGNoLT5iby0+c2l6ZSAtIDEpOworCWludGVsX2JiX291dChpYmIsIEdFTjRfM0RT VEFURV9WRVJURVhfQlVGRkVSUyB8ICg1IC0gMikpOworCWludGVsX2JiX291dChpYmIsIEdFTjRf VkIwX1ZFUlRFWERBVEEgfAorCQkgICAgIDAgPDwgR0VONF9WQjBfQlVGRkVSX0lOREVYX1NISUZU IHwKKwkJICAgICBWRVJURVhfU0laRSA8PCBWQjBfQlVGRkVSX1BJVENIX1NISUZUKTsKKwlpbnRl bF9iYl9lbWl0X3JlbG9jKGliYiwgaWJiLT5oYW5kbGUsCisJCQkgICAgSTkxNV9HRU1fRE9NQUlO X1ZFUlRFWCwgMCwgMCwgaWJiLT5iYXRjaF9vZmZzZXQpOworCWlmIChJU19HRU41KGliYi0+ZGV2 aWQpKQorCQlpbnRlbF9iYl9lbWl0X3JlbG9jKGliYiwgaWJiLT5oYW5kbGUsCisJCQkJICAgIEk5 MTVfR0VNX0RPTUFJTl9WRVJURVgsIDAsCisJCQkJICAgIGliYi0+c2l6ZSAtIDEsIGliYi0+YmF0 Y2hfb2Zmc2V0KTsKIAllbHNlCi0JCU9VVF9CQVRDSChiYXRjaC0+Ym8tPnNpemUgLyBWRVJURVhf U0laRSAtIDEpOwotCU9VVF9CQVRDSCgwKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgaWJiLT5zaXpl IC8gVkVSVEVYX1NJWkUgLSAxKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIH0KIAotc3RhdGlj IHVpbnQzMl90IGdlbjRfZW1pdF9wcmltaXRpdmUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaCkKK3N0YXRpYyB1aW50MzJfdCBnZW40X2VtaXRfcHJpbWl0aXZlKHN0cnVjdCBpbnRlbF9i YiAqaWJiKQogewogCXVpbnQzMl90IG9mZnNldDsKIAotCU9VVF9CQVRDSChHRU40XzNEUFJJTUlU SVZFIHwKLQkJICBHRU40XzNEUFJJTUlUSVZFX1ZFUlRFWF9TRVFVRU5USUFMIHwKLQkJICBfM0RQ UklNX1JFQ1RMSVNUIDw8IEdFTjRfM0RQUklNSVRJVkVfVE9QT0xPR1lfU0hJRlQgfAotCQkgIDAg PDwgOSB8Ci0JCSAgKDYgLSAyKSk7Ci0JT1VUX0JBVENIKDMpOwkvKiB2ZXJ0ZXggY291bnQgKi8K LQlvZmZzZXQgPSBiYXRjaF91c2VkKGJhdGNoKTsKLQlPVVRfQkFUQ0goMCk7CS8qIHZlcnRleF9p bmRleCAqLwotCU9VVF9CQVRDSCgxKTsJLyogc2luZ2xlIGluc3RhbmNlICovCi0JT1VUX0JBVENI KDApOwkvKiBzdGFydCBpbnN0YW5jZSBsb2NhdGlvbiAqLwotCU9VVF9CQVRDSCgwKTsJLyogaW5k ZXggYnVmZmVyIG9mZnNldCwgaWdub3JlZCAqLworCWludGVsX2JiX291dChpYmIsIEdFTjRfM0RQ UklNSVRJVkUgfAorCQkgICAgIEdFTjRfM0RQUklNSVRJVkVfVkVSVEVYX1NFUVVFTlRJQUwgfAor CQkgICAgIF8zRFBSSU1fUkVDVExJU1QgPDwgR0VONF8zRFBSSU1JVElWRV9UT1BPTE9HWV9TSElG VCB8CisJCSAgICAgMCA8PCA5IHwKKwkJICAgICAoNiAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCAzKTsJLyogdmVydGV4IGNvdW50ICovCisJb2Zmc2V0ID0gaW50ZWxfYmJfb2Zmc2V0KGliYik7 CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CS8qIHZlcnRleF9pbmRleCAqLworCWludGVsX2JiX291 dChpYmIsIDEpOwkvKiBzaW5nbGUgaW5zdGFuY2UgKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsJ Lyogc3RhcnQgaW5zdGFuY2UgbG9jYXRpb24gKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsJLyog aW5kZXggYnVmZmVyIG9mZnNldCwgaWdub3JlZCAqLwogCiAJcmV0dXJuIG9mZnNldDsKIH0KIAot dm9pZCBnZW40X3JlbmRlcl9jb3B5ZnVuYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNo LAotCQkJICBkcm1faW50ZWxfY29udGV4dCAqY29udGV4dCwKLQkJCSAgY29uc3Qgc3RydWN0IGln dF9idWYgKnNyYywKLQkJCSAgdW5zaWduZWQgc3JjX3gsIHVuc2lnbmVkIHNyY195LAotCQkJICB1 bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LAotCQkJICBjb25zdCBzdHJ1Y3QgaWd0X2J1 ZiAqZHN0LAotCQkJICB1bnNpZ25lZCBkc3RfeCwgdW5zaWduZWQgZHN0X3kpCit2b2lkIGdlbjRf cmVuZGVyX2NvcHlmdW5jKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAorCQkJICB1aW50MzJfdCBjdHgs CisJCQkgIHN0cnVjdCBpbnRlbF9idWYgKnNyYywKKwkJCSAgdWludDMyX3Qgc3JjX3gsIHVpbnQz Ml90IHNyY195LAorCQkJICB1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVpZ2h0LAorCQkJICBz dHJ1Y3QgaW50ZWxfYnVmICpkc3QsCisJCQkgIHVpbnQzMl90IGRzdF94LCB1aW50MzJfdCBkc3Rf eSkKIHsKIAl1aW50MzJfdCBjYywgY2NfdnA7CiAJdWludDMyX3Qgd20sIHdtX3NhbXBsZXIsIHdt X2tlcm5lbCwgd21fdGFibGU7CkBAIC02NTgsNjAgKzY0MCw2NCBAQCB2b2lkIGdlbjRfcmVuZGVy X2NvcHlmdW5jKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCiAJdWludDMyX3Qgb2Zm c2V0LCBiYXRjaF9lbmQ7CiAKIAlpZ3RfYXNzZXJ0KHNyYy0+YnBwID09IGRzdC0+YnBwKTsKLQlp bnRlbF9iYXRjaGJ1ZmZlcl9mbHVzaF93aXRoX2NvbnRleHQoYmF0Y2gsIGNvbnRleHQpOwogCi0J YmF0Y2gtPnB0ciA9IGJhdGNoLT5idWZmZXIgKyAxMDI0OwotCWludGVsX2JhdGNoYnVmZmVyX3N1 YmRhdGFfYWxsb2MoYmF0Y2gsIDY0LCA2NCk7CisJaW50ZWxfYmJfZmx1c2hfcmVuZGVyX3dpdGhf Y29udGV4dChpYmIsIGN0eCk7CisKKwlpbnRlbF9iYl9hZGRfaW50ZWxfYnVmKGliYiwgZHN0LCB0 cnVlKTsKKwlpbnRlbF9iYl9hZGRfaW50ZWxfYnVmKGliYiwgc3JjLCBmYWxzZSk7CisKKwlpbnRl bF9iYl9wdHJfc2V0KGliYiwgMTAyNCArIDY0KTsKIAotCXZzID0gZ2VuNF9jcmVhdGVfdnNfc3Rh dGUoYmF0Y2gpOworCXZzID0gZ2VuNF9jcmVhdGVfdnNfc3RhdGUoaWJiKTsKIAotCXNmX2tlcm5l bCA9IGdlbjRfY3JlYXRlX3NmX2tlcm5lbChiYXRjaCk7Ci0Jc2YgPSBnZW40X2NyZWF0ZV9zZl9z dGF0ZShiYXRjaCwgc2Zfa2VybmVsKTsKKwlzZl9rZXJuZWwgPSBnZW40X2NyZWF0ZV9zZl9rZXJu ZWwoaWJiKTsKKwlzZiA9IGdlbjRfY3JlYXRlX3NmX3N0YXRlKGliYiwgc2Zfa2VybmVsKTsKIAot CXdtX3RhYmxlID0gZ2VuNF9iaW5kX3N1cmZhY2VzKGJhdGNoLCBzcmMsIGRzdCk7Ci0Jd21fa2Vy bmVsID0gZ2VuNF9jcmVhdGVfcHNfa2VybmVsKGJhdGNoKTsKLQl3bV9zYW1wbGVyID0gZ2VuNF9j cmVhdGVfc2FtcGxlcihiYXRjaCwKKwl3bV90YWJsZSA9IGdlbjRfYmluZF9zdXJmYWNlcyhpYmIs IHNyYywgZHN0KTsKKwl3bV9rZXJuZWwgPSBnZW40X2NyZWF0ZV9wc19rZXJuZWwoaWJiKTsKKwl3 bV9zYW1wbGVyID0gZ2VuNF9jcmVhdGVfc2FtcGxlcihpYmIsCiAJCQkJCSBTQU1QTEVSX0ZJTFRF Ul9ORUFSRVNULAogCQkJCQkgU0FNUExFUl9FWFRFTkRfTk9ORSk7Ci0Jd20gPSBnZW40X2NyZWF0 ZV93bV9zdGF0ZShiYXRjaCwgd21fa2VybmVsLCB3bV9zYW1wbGVyKTsKKwl3bSA9IGdlbjRfY3Jl YXRlX3dtX3N0YXRlKGliYiwgd21fa2VybmVsLCB3bV9zYW1wbGVyKTsKIAotCWNjX3ZwID0gZ2Vu NF9jcmVhdGVfY2Nfdmlld3BvcnQoYmF0Y2gpOwotCWNjID0gZ2VuNF9jcmVhdGVfY2Nfc3RhdGUo YmF0Y2gsIGNjX3ZwKTsKKwljY192cCA9IGdlbjRfY3JlYXRlX2NjX3ZpZXdwb3J0KGliYik7CisJ Y2MgPSBnZW40X2NyZWF0ZV9jY19zdGF0ZShpYmIsIGNjX3ZwKTsKIAotCWJhdGNoLT5wdHIgPSBi YXRjaC0+YnVmZmVyOworCWludGVsX2JiX3B0cl9zZXQoaWJiLCAwKTsKIAotCWdlbjRfZW1pdF9p bnZhcmlhbnQoYmF0Y2gpOwotCWdlbjRfZW1pdF9zdGF0ZV9iYXNlX2FkZHJlc3MoYmF0Y2gpOwot CWdlbjRfZW1pdF9zaXAoYmF0Y2gpOwotCWdlbjRfZW1pdF9udWxsX2RlcHRoX2J1ZmZlcihiYXRj aCk7CisJZ2VuNF9lbWl0X2ludmFyaWFudChpYmIpOworCWdlbjRfZW1pdF9zdGF0ZV9iYXNlX2Fk ZHJlc3MoaWJiKTsKKwlnZW40X2VtaXRfc2lwKGliYik7CisJZ2VuNF9lbWl0X251bGxfZGVwdGhf YnVmZmVyKGliYik7CiAKLQlnZW40X2VtaXRfZHJhd2luZ19yZWN0YW5nbGUoYmF0Y2gsIGRzdCk7 Ci0JZ2VuNF9lbWl0X2JpbmRpbmdfdGFibGUoYmF0Y2gsIHdtX3RhYmxlKTsKLQlnZW40X2VtaXRf dmVydGV4X2VsZW1lbnRzKGJhdGNoKTsKLQlnZW40X2VtaXRfcGlwZWxpbmVkX3BvaW50ZXJzKGJh dGNoLCB2cywgc2YsIHdtLCBjYyk7Ci0JZ2VuNF9lbWl0X3VyYihiYXRjaCk7CisJZ2VuNF9lbWl0 X2RyYXdpbmdfcmVjdGFuZ2xlKGliYiwgZHN0KTsKKwlnZW40X2VtaXRfYmluZGluZ190YWJsZShp YmIsIHdtX3RhYmxlKTsKKwlnZW40X2VtaXRfdmVydGV4X2VsZW1lbnRzKGliYik7CisJZ2VuNF9l bWl0X3BpcGVsaW5lZF9wb2ludGVycyhpYmIsIHZzLCBzZiwgd20sIGNjKTsKKwlnZW40X2VtaXRf dXJiKGliYik7CiAKLQlnZW40X2VtaXRfdmVydGV4X2J1ZmZlcihiYXRjaCk7Ci0Jb2Zmc2V0ID0g Z2VuNF9lbWl0X3ByaW1pdGl2ZShiYXRjaCk7CisJZ2VuNF9lbWl0X3ZlcnRleF9idWZmZXIoaWJi KTsKKwlvZmZzZXQgPSBnZW40X2VtaXRfcHJpbWl0aXZlKGliYik7CiAKLQlPVVRfQkFUQ0goTUlf QkFUQ0hfQlVGRkVSX0VORCk7Ci0JYmF0Y2hfZW5kID0gaW50ZWxfYmF0Y2hidWZmZXJfYWxpZ24o YmF0Y2gsIDgpOworCWJhdGNoX2VuZCA9IGludGVsX2JiX2VtaXRfYmJlKGliYik7CiAKLQkqKHVp bnQzMl90ICopKGJhdGNoLT5idWZmZXIgKyBvZmZzZXQpID0KLQkJYmF0Y2hfcm91bmRfdXB0byhi YXRjaCwgVkVSVEVYX1NJWkUpL1ZFUlRFWF9TSVpFOworCWliYi0+YmF0Y2hbb2Zmc2V0IC8gc2l6 ZW9mKHVpbnQzMl90KV0gPQorCQkJYmF0Y2hfcm91bmRfdXB0byhpYmIsIFZFUlRFWF9TSVpFKS9W RVJURVhfU0laRTsKIAotCWVtaXRfdmVydGV4XzJzKGJhdGNoLCBkc3RfeCArIHdpZHRoLCBkc3Rf eSArIGhlaWdodCk7Ci0JZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChiYXRjaCwgc3JjX3ggKyB3aWR0 aCwgaWd0X2J1Zl93aWR0aChzcmMpKTsKLQllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGJhdGNoLCBz cmNfeSArIGhlaWdodCwgaWd0X2J1Zl9oZWlnaHQoc3JjKSk7CisJZW1pdF92ZXJ0ZXhfMnMoaWJi LCBkc3RfeCArIHdpZHRoLCBkc3RfeSArIGhlaWdodCk7CisJZW1pdF92ZXJ0ZXhfbm9ybWFsaXpl ZChpYmIsIHNyY194ICsgd2lkdGgsIGludGVsX2J1Zl93aWR0aChzcmMpKTsKKwllbWl0X3ZlcnRl eF9ub3JtYWxpemVkKGliYiwgc3JjX3kgKyBoZWlnaHQsIGludGVsX2J1Zl9oZWlnaHQoc3JjKSk7 CiAKLQllbWl0X3ZlcnRleF8ycyhiYXRjaCwgZHN0X3gsIGRzdF95ICsgaGVpZ2h0KTsKLQllbWl0 X3ZlcnRleF9ub3JtYWxpemVkKGJhdGNoLCBzcmNfeCwgaWd0X2J1Zl93aWR0aChzcmMpKTsKLQll bWl0X3ZlcnRleF9ub3JtYWxpemVkKGJhdGNoLCBzcmNfeSArIGhlaWdodCwgaWd0X2J1Zl9oZWln aHQoc3JjKSk7CisJZW1pdF92ZXJ0ZXhfMnMoaWJiLCBkc3RfeCwgZHN0X3kgKyBoZWlnaHQpOwor CWVtaXRfdmVydGV4X25vcm1hbGl6ZWQoaWJiLCBzcmNfeCwgaW50ZWxfYnVmX3dpZHRoKHNyYykp OworCWVtaXRfdmVydGV4X25vcm1hbGl6ZWQoaWJiLCBzcmNfeSArIGhlaWdodCwgaW50ZWxfYnVm X2hlaWdodChzcmMpKTsKIAotCWVtaXRfdmVydGV4XzJzKGJhdGNoLCBkc3RfeCwgZHN0X3kpOwot CWVtaXRfdmVydGV4X25vcm1hbGl6ZWQoYmF0Y2gsIHNyY194LCBpZ3RfYnVmX3dpZHRoKHNyYykp OwotCWVtaXRfdmVydGV4X25vcm1hbGl6ZWQoYmF0Y2gsIHNyY195LCBpZ3RfYnVmX2hlaWdodChz cmMpKTsKKwllbWl0X3ZlcnRleF8ycyhpYmIsIGRzdF94LCBkc3RfeSk7CisJZW1pdF92ZXJ0ZXhf bm9ybWFsaXplZChpYmIsIHNyY194LCBpbnRlbF9idWZfd2lkdGgoc3JjKSk7CisJZW1pdF92ZXJ0 ZXhfbm9ybWFsaXplZChpYmIsIHNyY195LCBpbnRlbF9idWZfaGVpZ2h0KHNyYykpOwogCi0JZ2Vu NF9yZW5kZXJfZmx1c2goYmF0Y2gsIGNvbnRleHQsIGJhdGNoX2VuZCk7Ci0JaW50ZWxfYmF0Y2hi dWZmZXJfcmVzZXQoYmF0Y2gpOworCWludGVsX2JiX2V4ZWNfd2l0aF9jb250ZXh0KGliYiwgYmF0 Y2hfZW5kLCBjdHgsCisJCQkJICAgSTkxNV9FWEVDX0RFRkFVTFQgfCBJOTE1X0VYRUNfTk9fUkVM T0MsCisJCQkJICAgZmFsc2UpOworCWludGVsX2JiX3Jlc2V0KGliYiwgZmFsc2UpOwogfQpkaWZm IC0tZ2l0IGEvbGliL3JlbmRlcmNvcHlfZ2VuNi5jIGIvbGliL3JlbmRlcmNvcHlfZ2VuNi5jCmlu ZGV4IDE2Y2JiNjc5Li4yMjdiZGUwNSAxMDA2NDQKLS0tIGEvbGliL3JlbmRlcmNvcHlfZ2VuNi5j CisrKyBiL2xpYi9yZW5kZXJjb3B5X2dlbjYuYwpAQCAtMTIsNyArMTIsNyBAQAogI2luY2x1ZGUg ImRybS5oIgogI2luY2x1ZGUgImk5MTVfZHJtLmgiCiAjaW5jbHVkZSAiZHJtdGVzdC5oIgotI2lu Y2x1ZGUgImludGVsX2J1Zm1nci5oIgorI2luY2x1ZGUgImludGVsX2J1Zm9wcy5oIgogI2luY2x1 ZGUgImludGVsX2JhdGNoYnVmZmVyLmgiCiAjaW5jbHVkZSAiaW50ZWxfaW8uaCIKICNpbmNsdWRl ICJyZW5kZXJjb3B5LmgiCkBAIC00OSwzOCArNDksMjYgQEAgc3RhdGljIGNvbnN0IHVpbnQzMl90 IHBzX2tlcm5lbF9ub21hc2tfYWZmaW5lW11bNF0gPSB7CiB9OwogCiBzdGF0aWMgdWludDMyX3QK LWJhdGNoX3JvdW5kX3VwdG8oc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMy X3QgZGl2aXNvcikKK2JhdGNoX3JvdW5kX3VwdG8oc3RydWN0IGludGVsX2JiICppYmIsIHVpbnQz Ml90IGRpdmlzb3IpCiB7Ci0JdWludDMyX3Qgb2Zmc2V0ID0gYmF0Y2gtPnB0ciAtIGJhdGNoLT5i dWZmZXI7CisJdWludDMyX3Qgb2Zmc2V0ID0gaW50ZWxfYmJfb2Zmc2V0KGliYik7CiAKLQlvZmZz ZXQgPSAob2Zmc2V0ICsgZGl2aXNvci0xKSAvIGRpdmlzb3IgKiBkaXZpc29yOwotCWJhdGNoLT5w dHIgPSBiYXRjaC0+YnVmZmVyICsgb2Zmc2V0OwotCXJldHVybiBvZmZzZXQ7Ci19CisJb2Zmc2V0 ID0gKG9mZnNldCArIGRpdmlzb3IgLSAxKSAvIGRpdmlzb3IgKiBkaXZpc29yOworCWludGVsX2Ji X3B0cl9zZXQoaWJiLCBvZmZzZXQpOwogCi1zdGF0aWMgdm9pZAotZ2VuNl9yZW5kZXJfZmx1c2go c3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJICBkcm1faW50ZWxfY29udGV4dCAq Y29udGV4dCwgdWludDMyX3QgYmF0Y2hfZW5kKQotewotCWlndF9hc3NlcnRfZXEoZHJtX2ludGVs X2JvX3N1YmRhdGEoYmF0Y2gtPmJvLAotCQkJCQkgICAwLCA0MDk2LCBiYXRjaC0+YnVmZmVyKSwK LQkJICAgICAgMCk7Ci0JaWd0X2Fzc2VydF9lcShkcm1faW50ZWxfZ2VtX2JvX2NvbnRleHRfZXhl YyhiYXRjaC0+Ym8sCi0JCQkJCQkgICAgY29udGV4dCwgYmF0Y2hfZW5kLCAwKSwKLQkJICAgICAg MCk7CisJcmV0dXJuIG9mZnNldDsKIH0KIAogc3RhdGljIHVpbnQzMl90Ci1nZW42X2JpbmRfYnVm KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpi dWYsCi0JICAgICAgaW50IGlzX2RzdCkKK2dlbjZfYmluZF9idWYoc3RydWN0IGludGVsX2JiICpp YmIsIGNvbnN0IHN0cnVjdCBpbnRlbF9idWYgKmJ1ZiwgaW50IGlzX2RzdCkKIHsKIAlzdHJ1Y3Qg Z2VuNl9zdXJmYWNlX3N0YXRlICpzczsKIAl1aW50MzJfdCB3cml0ZV9kb21haW4sIHJlYWRfZG9t YWluOwotCWludCByZXQ7CisJdWludDY0X3QgYWRkcmVzczsKIAogCWlndF9hc3NlcnRfbHRlKGJ1 Zi0+c3VyZmFjZVswXS5zdHJpZGUsIDEyOCoxMDI0KTsKLQlpZ3RfYXNzZXJ0X2x0ZShpZ3RfYnVm X3dpZHRoKGJ1ZiksIDgxOTIpOwotCWlndF9hc3NlcnRfbHRlKGlndF9idWZfaGVpZ2h0KGJ1Ziks IDgxOTIpOworCWlndF9hc3NlcnRfbHRlKGludGVsX2J1Zl93aWR0aChidWYpLCA4MTkyKTsKKwlp Z3RfYXNzZXJ0X2x0ZShpbnRlbF9idWZfaGVpZ2h0KGJ1ZiksIDgxOTIpOwogCiAJaWYgKGlzX2Rz dCkgewogCQl3cml0ZV9kb21haW4gPSByZWFkX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9SRU5E RVI7CkBAIC04OSw3ICs3Nyw3IEBAIGdlbjZfYmluZF9idWYoc3RydWN0IGludGVsX2JhdGNoYnVm ZmVyICpiYXRjaCwgY29uc3Qgc3RydWN0IGlndF9idWYgKmJ1ZiwKIAkJcmVhZF9kb21haW4gPSBJ OTE1X0dFTV9ET01BSU5fU0FNUExFUjsKIAl9CiAKLQlzcyA9IGludGVsX2JhdGNoYnVmZmVyX3N1 YmRhdGFfYWxsb2MoYmF0Y2gsIHNpemVvZigqc3MpLCAzMik7CisJc3MgPSBpbnRlbF9iYl9wdHJf YWxpZ24oaWJiLCAzMik7CiAJc3MtPnNzMC5zdXJmYWNlX3R5cGUgPSBTVVJGQUNFXzJEOwogCiAJ c3dpdGNoIChidWYtPmJwcCkgewpAQCAtMTAyLDI2NSArOTAsMjY1IEBAIGdlbjZfYmluZF9idWYo c3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgY29uc3Qgc3RydWN0IGlndF9idWYgKmJ1 ZiwKIAogCXNzLT5zczAuZGF0YV9yZXR1cm5fZm9ybWF0ID0gU1VSRkFDRVJFVFVSTkZPUk1BVF9G TE9BVDMyOwogCXNzLT5zczAuY29sb3JfYmxlbmQgPSAxOwotCXNzLT5zczEuYmFzZV9hZGRyID0g YnVmLT5iby0+b2Zmc2V0OwogCi0JcmV0ID0gZHJtX2ludGVsX2JvX2VtaXRfcmVsb2MoYmF0Y2gt PmJvLAotCQkJCSAgICAgIGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCAm c3MtPnNzMSksCi0JCQkJICAgICAgYnVmLT5ibywgMCwKLQkJCQkgICAgICByZWFkX2RvbWFpbiwg d3JpdGVfZG9tYWluKTsKLQlpZ3RfYXNzZXJ0KHJldCA9PSAwKTsKKwlhZGRyZXNzID0gaW50ZWxf YmJfb2Zmc2V0X3JlbG9jKGliYiwgYnVmLT5oYW5kbGUsCisJCQkJCXJlYWRfZG9tYWluLCB3cml0 ZV9kb21haW4sCisJCQkJCWludGVsX2JiX29mZnNldChpYmIpICsgNCwKKwkJCQkJYnVmLT5hZGRy Lm9mZnNldCk7CisJc3MtPnNzMS5iYXNlX2FkZHIgPSAodWludDMyX3QpIGFkZHJlc3M7CiAKLQlz cy0+c3MyLmhlaWdodCA9IGlndF9idWZfaGVpZ2h0KGJ1ZikgLSAxOwotCXNzLT5zczIud2lkdGgg ID0gaWd0X2J1Zl93aWR0aChidWYpIC0gMTsKKwlzcy0+c3MyLmhlaWdodCA9IGludGVsX2J1Zl9o ZWlnaHQoYnVmKSAtIDE7CisJc3MtPnNzMi53aWR0aCAgPSBpbnRlbF9idWZfd2lkdGgoYnVmKSAt IDE7CiAJc3MtPnNzMy5waXRjaCAgPSBidWYtPnN1cmZhY2VbMF0uc3RyaWRlIC0gMTsKIAlzcy0+ c3MzLnRpbGVkX3N1cmZhY2UgPSBidWYtPnRpbGluZyAhPSBJOTE1X1RJTElOR19OT05FOwogCXNz LT5zczMudGlsZV93YWxrICAgICA9IGJ1Zi0+dGlsaW5nID09IEk5MTVfVElMSU5HX1k7CiAKIAlz cy0+c3M1Lm1lbW9yeV9vYmplY3RfY29udHJvbCA9IEdFTjZfTU9DU19QVEU7CiAKLQlyZXR1cm4g aW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9vZmZzZXQoYmF0Y2gsIHNzKTsKKwlyZXR1cm4gaW50 ZWxfYmJfcHRyX2FkZF9yZXR1cm5fcHJldl9vZmZzZXQoaWJiLCBzaXplb2YoKnNzKSk7CiB9CiAK IHN0YXRpYyB1aW50MzJfdAotZ2VuNl9iaW5kX3N1cmZhY2VzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1 ZmZlciAqYmF0Y2gsCi0JCSAgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpzcmMsCi0JCSAgIGNvbnN0 IHN0cnVjdCBpZ3RfYnVmICpkc3QpCitnZW42X2JpbmRfc3VyZmFjZXMoc3RydWN0IGludGVsX2Ji ICppYmIsCisJCSAgIGNvbnN0IHN0cnVjdCBpbnRlbF9idWYgKnNyYywKKwkJICAgY29uc3Qgc3Ry dWN0IGludGVsX2J1ZiAqZHN0KQogewotCXVpbnQzMl90ICpiaW5kaW5nX3RhYmxlOworCXVpbnQz Ml90ICpiaW5kaW5nX3RhYmxlLCBiaW5kaW5nX3RhYmxlX29mZnNldDsKIAotCWJpbmRpbmdfdGFi bGUgPSBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX2FsbG9jKGJhdGNoLCAzMiwgMzIpOworCWJp bmRpbmdfdGFibGUgPSBpbnRlbF9iYl9wdHJfYWxpZ24oaWJiLCAzMik7CisJYmluZGluZ190YWJs ZV9vZmZzZXQgPSBpbnRlbF9iYl9wdHJfYWRkX3JldHVybl9wcmV2X29mZnNldChpYmIsIDMyKTsK IAotCWJpbmRpbmdfdGFibGVbMF0gPSBnZW42X2JpbmRfYnVmKGJhdGNoLCBkc3QsIDEpOwotCWJp bmRpbmdfdGFibGVbMV0gPSBnZW42X2JpbmRfYnVmKGJhdGNoLCBzcmMsIDApOworCWJpbmRpbmdf dGFibGVbMF0gPSBnZW42X2JpbmRfYnVmKGliYiwgZHN0LCAxKTsKKwliaW5kaW5nX3RhYmxlWzFd ID0gZ2VuNl9iaW5kX2J1ZihpYmIsIHNyYywgMCk7CiAKLQlyZXR1cm4gaW50ZWxfYmF0Y2hidWZm ZXJfc3ViZGF0YV9vZmZzZXQoYmF0Y2gsIGJpbmRpbmdfdGFibGUpOworCXJldHVybiBiaW5kaW5n X3RhYmxlX29mZnNldDsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjZfZW1pdF9zaXAoc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2dlbjZfZW1pdF9zaXAoc3RydWN0IGludGVsX2JiICpp YmIpCiB7Ci0JT1VUX0JBVENIKEdFTjRfU1RBVEVfU0lQIHwgMCk7Ci0JT1VUX0JBVENIKDApOwor CWludGVsX2JiX291dChpYmIsIEdFTjRfU1RBVEVfU0lQIHwgMCk7CisJaW50ZWxfYmJfb3V0KGli YiwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW42X2VtaXRfdXJiKHN0cnVjdCBpbnRlbF9iYXRj aGJ1ZmZlciAqYmF0Y2gpCitnZW42X2VtaXRfdXJiKHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewot CU9VVF9CQVRDSChHRU42XzNEU1RBVEVfVVJCIHwgKDMgLSAyKSk7Ci0JT1VUX0JBVENIKCgxIC0g MSkgPDwgR0VONl8zRFNUQVRFX1VSQl9WU19TSVpFX1NISUZUIHwKLQkJICAyNCA8PCBHRU42XzNE U1RBVEVfVVJCX1ZTX0VOVFJJRVNfU0hJRlQpOyAvKiBhdCBsZWFzdCAyNCBvbiBHRU42ICovCi0J T1VUX0JBVENIKDAgPDwgR0VONl8zRFNUQVRFX1VSQl9HU19TSVpFX1NISUZUIHwKLQkJICAwIDw8 IEdFTjZfM0RTVEFURV9VUkJfR1NfRU5UUklFU19TSElGVCk7IC8qIG5vIEdTIHRocmVhZCAqLwor CWludGVsX2JiX291dChpYmIsIEdFTjZfM0RTVEFURV9VUkIgfCAoMyAtIDIpKTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCAoMSAtIDEpIDw8IEdFTjZfM0RTVEFURV9VUkJfVlNfU0laRV9TSElGVCB8CisJ CSAgICAgMjQgPDwgR0VONl8zRFNUQVRFX1VSQl9WU19FTlRSSUVTX1NISUZUKTsgLyogYXQgbGVh c3QgMjQgb24gR0VONiAqLworCWludGVsX2JiX291dChpYmIsIDAgPDwgR0VONl8zRFNUQVRFX1VS Ql9HU19TSVpFX1NISUZUIHwKKwkJICAgICAwIDw8IEdFTjZfM0RTVEFURV9VUkJfR1NfRU5UUklF U19TSElGVCk7IC8qIG5vIEdTIHRocmVhZCAqLwogfQogCiBzdGF0aWMgdm9pZAotZ2VuNl9lbWl0 X3N0YXRlX2Jhc2VfYWRkcmVzcyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorZ2Vu Nl9lbWl0X3N0YXRlX2Jhc2VfYWRkcmVzcyhzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKLQlPVVRf QkFUQ0goR0VONF9TVEFURV9CQVNFX0FERFJFU1MgfCAoMTAgLSAyKSk7Ci0JT1VUX0JBVENIKDAp OyAvKiBnZW5lcmFsICovCi0JT1VUX1JFTE9DKGJhdGNoLT5ibywgLyogc3VyZmFjZSAqLwotCQkg IEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgMCwKLQkJICBCQVNFX0FERFJFU1NfTU9ESUZZ KTsKLQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCAvKiBpbnN0cnVjdGlvbiAqLwotCQkgIEk5MTVfR0VN X0RPTUFJTl9JTlNUUlVDVElPTiwgMCwKLQkJICBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQlPVVRf QkFUQ0goMCk7IC8qIGluZGlyZWN0ICovCi0JT1VUX1JFTE9DKGJhdGNoLT5ibywgLyogZHluYW1p YyAqLwotCQkgIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgMCwKLQkJICBCQVNFX0FERFJF U1NfTU9ESUZZKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU40X1NUQVRFX0JBU0VfQUREUkVTUyB8 ICgxMCAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsgLyogZ2VuZXJhbCAqLworCWludGVs X2JiX2VtaXRfcmVsb2MoaWJiLCBpYmItPmhhbmRsZSwgLyogc3VyZmFjZSAqLworCQkJICAgIEk5 MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElPTiwgMCwKKwkJCSAgICBCQVNFX0FERFJFU1NfTU9ESUZZ LCBpYmItPmJhdGNoX29mZnNldCk7CisJaW50ZWxfYmJfZW1pdF9yZWxvYyhpYmIsIGliYi0+aGFu ZGxlLCAvKiBpbnN0cnVjdGlvbiAqLworCQkJICAgIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElP TiwgMCwKKwkJCSAgICBCQVNFX0FERFJFU1NfTU9ESUZZLCBpYmItPmJhdGNoX29mZnNldCk7CisJ aW50ZWxfYmJfb3V0KGliYiwgMCk7IC8qIGluZGlyZWN0ICovCisJaW50ZWxfYmJfZW1pdF9yZWxv YyhpYmIsIGliYi0+aGFuZGxlLCAvKiBkeW5hbWljICovCisJCQkgICAgSTkxNV9HRU1fRE9NQUlO X0lOU1RSVUNUSU9OLCAwLAorCQkJICAgIEJBU0VfQUREUkVTU19NT0RJRlksIGliYi0+YmF0Y2hf b2Zmc2V0KTsKIAogCS8qIHVwcGVyIGJvdW5kcywgZGlzYWJsZSAqLwotCU9VVF9CQVRDSCgwKTsK LQlPVVRfQkFUQ0goQkFTRV9BRERSRVNTX01PRElGWSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9C QVRDSChCQVNFX0FERFJFU1NfTU9ESUZZKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRl bF9iYl9vdXQoaWJiLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAw KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKIH0KIAogc3RhdGlj IHZvaWQKLWdlbjZfZW1pdF92aWV3cG9ydHMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRj aCwgdWludDMyX3QgY2NfdnApCitnZW42X2VtaXRfdmlld3BvcnRzKHN0cnVjdCBpbnRlbF9iYiAq aWJiLCB1aW50MzJfdCBjY192cCkKIHsKLQlPVVRfQkFUQ0goR0VONl8zRFNUQVRFX1ZJRVdQT1JU X1NUQVRFX1BPSU5URVJTIHwKLQkJICBHRU42XzNEU1RBVEVfVklFV1BPUlRfU1RBVEVfTU9ESUZZ X0NDIHwKLQkJICAoNCAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9V VF9CQVRDSChjY192cCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRFX1ZJRVdQT1JU X1NUQVRFX1BPSU5URVJTIHwKKwkJICAgICBHRU42XzNEU1RBVEVfVklFV1BPUlRfU1RBVEVfTU9E SUZZX0NDIHwKKwkJICAgICAoNCAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRl bF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBjY192cCk7CiB9CiAKIHN0YXRp YyB2b2lkCi1nZW42X2VtaXRfdnMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2dl bjZfZW1pdF92cyhzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKIAkvKiBkaXNhYmxlIFZTIGNvbnN0 YW50IGJ1ZmZlciAqLwotCU9VVF9CQVRDSChHRU42XzNEU1RBVEVfQ09OU1RBTlRfVlMgfCAoNSAt IDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlP VVRfQkFUQ0goMCk7Ci0KLQlPVVRfQkFUQ0goR0VONl8zRFNUQVRFX1ZTIHwgKDYgLSAyKSk7Ci0J T1VUX0JBVENIKDApOyAvKiBubyBWUyBrZXJuZWwgKi8KLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JB VENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7IC8qIHBhc3MtdGhyb3VnaCAq LworCWludGVsX2JiX291dChpYmIsIEdFTjZfM0RTVEFURV9DT05TVEFOVF9WUyB8ICg1IC0gMikp OworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVs X2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCisJaW50ZWxfYmJfb3V0 KGliYiwgR0VONl8zRFNUQVRFX1ZTIHwgKDYgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7 IC8qIG5vIFZTIGtlcm5lbCAqLworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291 dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDAp OyAvKiBwYXNzLXRocm91Z2ggKi8KIH0KIAogc3RhdGljIHZvaWQKLWdlbjZfZW1pdF9ncyhzdHJ1 Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorZ2VuNl9lbWl0X2dzKHN0cnVjdCBpbnRlbF9i YiAqaWJiKQogewogCS8qIGRpc2FibGUgR1MgY29uc3RhbnQgYnVmZmVyICovCi0JT1VUX0JBVENI KEdFTjZfM0RTVEFURV9DT05TVEFOVF9HUyB8ICg1IC0gMikpOwotCU9VVF9CQVRDSCgwKTsKLQlP VVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQotCU9VVF9CQVRD SChHRU42XzNEU1RBVEVfR1MgfCAoNyAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7IC8qIG5vIEdTIGtl cm5lbCAqLwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwot CU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7IC8qIHBhc3MtdGhyb3VnaCAqLworCWludGVs X2JiX291dChpYmIsIEdFTjZfM0RTVEFURV9DT05TVEFOVF9HUyB8ICg1IC0gMikpOworCWludGVs X2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChp YmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VO Nl8zRFNUQVRFX0dTIHwgKDcgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7IC8qIG5vIEdT IGtlcm5lbCAqLworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDAp OworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVs X2JiX291dChpYmIsIDApOyAvKiBwYXNzLXRocm91Z2ggKi8KIH0KIAogc3RhdGljIHZvaWQKLWdl bjZfZW1pdF9jbGlwKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitnZW42X2VtaXRf Y2xpcChzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKLQlPVVRfQkFUQ0goR0VONl8zRFNUQVRFX0NM SVAgfCAoNCAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOyAvKiBwYXNzLXRo cm91Z2ggKi8KLQlPVVRfQkFUQ0goMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRF X0NMSVAgfCAoNCAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQo aWJiLCAwKTsgLyogcGFzcy10aHJvdWdoICovCisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiB9CiAK IHN0YXRpYyB2b2lkCi1nZW42X2VtaXRfd21fY29uc3RhbnRzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1 ZmZlciAqYmF0Y2gpCitnZW42X2VtaXRfd21fY29uc3RhbnRzKHN0cnVjdCBpbnRlbF9iYiAqaWJi KQogewogCS8qIGRpc2FibGUgV00gY29uc3RhbnQgYnVmZmVyICovCi0JT1VUX0JBVENIKEdFTjZf M0RTVEFURV9DT05TVEFOVF9QUyB8ICg1IC0gMikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFU Q0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCBHRU42XzNEU1RBVEVfQ09OU1RBTlRfUFMgfCAoNSAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCAwKTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjZfZW1pdF9udWxsX2Rl cHRoX2J1ZmZlcihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorZ2VuNl9lbWl0X251 bGxfZGVwdGhfYnVmZmVyKHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewotCU9VVF9CQVRDSChHRU40 XzNEU1RBVEVfREVQVEhfQlVGRkVSIHwgKDcgLSAyKSk7Ci0JT1VUX0JBVENIKFNVUkZBQ0VfTlVM TCA8PCBHRU40XzNEU1RBVEVfREVQVEhfQlVGRkVSX1RZUEVfU0hJRlQgfAotCQkgIEdFTjRfREVQ VEhGT1JNQVRfRDMyX0ZMT0FUIDw8IEdFTjRfM0RTVEFURV9ERVBUSF9CVUZGRVJfRk9STUFUX1NI SUZUKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlP VVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCi0JT1VUX0JBVENIKEdFTjRfM0RTVEFURV9D TEVBUl9QQVJBTVMgfCAoMiAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7CisJaW50ZWxfYmJfb3V0KGli YiwgR0VONF8zRFNUQVRFX0RFUFRIX0JVRkZFUiB8ICg3IC0gMikpOworCWludGVsX2JiX291dChp YmIsIFNVUkZBQ0VfTlVMTCA8PCBHRU40XzNEU1RBVEVfREVQVEhfQlVGRkVSX1RZUEVfU0hJRlQg fAorCQkgICAgIEdFTjRfREVQVEhGT1JNQVRfRDMyX0ZMT0FUIDw8IEdFTjRfM0RTVEFURV9ERVBU SF9CVUZGRVJfRk9STUFUX1NISUZUKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKworCWludGVsX2JiX291dChpYmIsIEdFTjRf M0RTVEFURV9DTEVBUl9QQVJBTVMgfCAoMiAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsK IH0KIAogc3RhdGljIHZvaWQKLWdlbjZfZW1pdF9pbnZhcmlhbnQoc3RydWN0IGludGVsX2JhdGNo YnVmZmVyICpiYXRjaCkKK2dlbjZfZW1pdF9pbnZhcmlhbnQoc3RydWN0IGludGVsX2JiICppYmIp CiB7Ci0JT1VUX0JBVENIKEc0WF9QSVBFTElORV9TRUxFQ1QgfCBQSVBFTElORV9TRUxFQ1RfM0Qp OworCWludGVsX2JiX291dChpYmIsIEc0WF9QSVBFTElORV9TRUxFQ1QgfCBQSVBFTElORV9TRUxF Q1RfM0QpOwogCi0JT1VUX0JBVENIKEdFTjZfM0RTVEFURV9NVUxUSVNBTVBMRSB8ICgzIC0gMikp OwotCU9VVF9CQVRDSChHRU42XzNEU1RBVEVfTVVMVElTQU1QTEVfUElYRUxfTE9DQVRJT05fQ0VO VEVSIHwKLQkJICBHRU42XzNEU1RBVEVfTVVMVElTQU1QTEVfTlVNU0FNUExFU18xKTsgLyogMSBz YW1wbGUvcGl4ZWwgKi8KLQlPVVRfQkFUQ0goMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8z RFNUQVRFX01VTFRJU0FNUExFIHwgKDMgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8z RFNUQVRFX01VTFRJU0FNUExFX1BJWEVMX0xPQ0FUSU9OX0NFTlRFUiB8CisJCSAgICAgR0VONl8z RFNUQVRFX01VTFRJU0FNUExFX05VTVNBTVBMRVNfMSk7IC8qIDEgc2FtcGxlL3BpeGVsICovCisJ aW50ZWxfYmJfb3V0KGliYiwgMCk7CiAKLQlPVVRfQkFUQ0goR0VONl8zRFNUQVRFX1NBTVBMRV9N QVNLIHwgKDIgLSAyKSk7Ci0JT1VUX0JBVENIKDEpOworCWludGVsX2JiX291dChpYmIsIEdFTjZf M0RTVEFURV9TQU1QTEVfTUFTSyB8ICgyIC0gMikpOworCWludGVsX2JiX291dChpYmIsIDEpOwog fQogCiBzdGF0aWMgdm9pZAotZ2VuNl9lbWl0X2NjKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gsIHVpbnQzMl90IGJsZW5kKQorZ2VuNl9lbWl0X2NjKHN0cnVjdCBpbnRlbF9iYiAqaWJi LCB1aW50MzJfdCBibGVuZCkKIHsKLQlPVVRfQkFUQ0goR0VONl8zRFNUQVRFX0NDX1NUQVRFX1BP SU5URVJTIHwgKDQgLSAyKSk7Ci0JT1VUX0JBVENIKGJsZW5kIHwgMSk7Ci0JT1VUX0JBVENIKDEw MjQgfCAxKTsKLQlPVVRfQkFUQ0goMTAyNCB8IDEpOworCWludGVsX2JiX291dChpYmIsIEdFTjZf M0RTVEFURV9DQ19TVEFURV9QT0lOVEVSUyB8ICg0IC0gMikpOworCWludGVsX2JiX291dChpYmIs IGJsZW5kIHwgMSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMTAyNCB8IDEpOworCWludGVsX2JiX291 dChpYmIsIDEwMjQgfCAxKTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjZfZW1pdF9zYW1wbGVyKHN0 cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IHN0YXRlKQorZ2VuNl9lbWl0 X3NhbXBsZXIoc3RydWN0IGludGVsX2JiICppYmIsIHVpbnQzMl90IHN0YXRlKQogewotCU9VVF9C QVRDSChHRU42XzNEU1RBVEVfU0FNUExFUl9TVEFURV9QT0lOVEVSUyB8Ci0JCSAgR0VONl8zRFNU QVRFX1NBTVBMRVJfU1RBVEVfTU9ESUZZX1BTIHwKLQkJICAoNCAtIDIpKTsKLQlPVVRfQkFUQ0go MCk7IC8qIFZTICovCi0JT1VUX0JBVENIKDApOyAvKiBHUyAqLwotCU9VVF9CQVRDSChzdGF0ZSk7 CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRFX1NBTVBMRVJfU1RBVEVfUE9JTlRFUlMg fAorCQkgICAgIEdFTjZfM0RTVEFURV9TQU1QTEVSX1NUQVRFX01PRElGWV9QUyB8CisJCSAgICAg KDQgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7IC8qIFZTICovCisJaW50ZWxfYmJfb3V0 KGliYiwgMCk7IC8qIEdTICovCisJaW50ZWxfYmJfb3V0KGliYiwgc3RhdGUpOwogfQogCiBzdGF0 aWMgdm9pZAotZ2VuNl9lbWl0X3NmKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitn ZW42X2VtaXRfc2Yoc3RydWN0IGludGVsX2JiICppYmIpCiB7Ci0JT1VUX0JBVENIKEdFTjZfM0RT VEFURV9TRiB8ICgyMCAtIDIpKTsKLQlPVVRfQkFUQ0goMSA8PCBHRU42XzNEU1RBVEVfU0ZfTlVN X09VVFBVVFNfU0hJRlQgfAotCQkgIDEgPDwgR0VONl8zRFNUQVRFX1NGX1VSQl9FTlRSWV9SRUFE X0xFTkdUSF9TSElGVCB8Ci0JCSAgMSA8PCBHRU42XzNEU1RBVEVfU0ZfVVJCX0VOVFJZX1JFQURf T0ZGU0VUX1NISUZUKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKEdFTjZfM0RTVEFURV9T Rl9DVUxMX05PTkUpOwotCU9VVF9CQVRDSCgyIDw8IEdFTjZfM0RTVEFURV9TRl9UUklGQU5fUFJP Vk9LRV9TSElGVCk7IC8qIERXNCAqLwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0J T1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7IC8qIERXOSAqLwot CU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRD SCgwKTsKLQlPVVRfQkFUQ0goMCk7IC8qIERXMTQgKi8KLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JB VENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOyAv KiBEVzE5ICovCisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRFX1NGIHwgKDIwIC0gMikp OworCWludGVsX2JiX291dChpYmIsIDEgPDwgR0VONl8zRFNUQVRFX1NGX05VTV9PVVRQVVRTX1NI SUZUIHwKKwkJICAgICAxIDw8IEdFTjZfM0RTVEFURV9TRl9VUkJfRU5UUllfUkVBRF9MRU5HVEhf U0hJRlQgfAorCQkgICAgIDEgPDwgR0VONl8zRFNUQVRFX1NGX1VSQl9FTlRSWV9SRUFEX09GRlNF VF9TSElGVCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VO Nl8zRFNUQVRFX1NGX0NVTExfTk9ORSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMiA8PCBHRU42XzNE U1RBVEVfU0ZfVFJJRkFOX1BST1ZPS0VfU0hJRlQpOyAvKiBEVzQgKi8KKwlpbnRlbF9iYl9vdXQo aWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsgLyogRFc5ICov CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxf YmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGli YiwgMCk7IC8qIERXMTQgKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQo aWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsgLyogRFcxOSAqLwogfQogCiBzdGF0aWMgdm9pZAotZ2Vu Nl9lbWl0X3dtKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIGludCBrZXJuZWwpCitn ZW42X2VtaXRfd20oc3RydWN0IGludGVsX2JiICppYmIsIGludCBrZXJuZWwpCiB7Ci0JT1VUX0JB VENIKEdFTjZfM0RTVEFURV9XTSB8ICg5IC0gMikpOwotCU9VVF9CQVRDSChrZXJuZWwpOwotCU9V VF9CQVRDSCgxIDw8IEdFTjZfM0RTVEFURV9XTV9TQU1QTEVSX0NPVU5UX1NISUZUIHwKLQkJICAy IDw8IEdFTjZfM0RTVEFURV9XTV9CSU5ESU5HX1RBQkxFX0VOVFJZX0NPVU5UX1NISUZUKTsKLQlP VVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDYgPDwgR0VONl8zRFNUQVRFX1dNX0RJU1BBVENIX1NU QVJUX0dSRl8wX1NISUZUKTsgLyogRFc0ICovCi0JT1VUX0JBVENIKCg0MCAtIDEpIDw8IEdFTjZf M0RTVEFURV9XTV9NQVhfVEhSRUFEU19TSElGVCB8Ci0JCSAgR0VONl8zRFNUQVRFX1dNX0RJU1BB VENIX0VOQUJMRSB8Ci0JCSAgR0VONl8zRFNUQVRFX1dNXzE2X0RJU1BBVENIX0VOQUJMRSk7Ci0J T1VUX0JBVENIKDEgPDwgR0VONl8zRFNUQVRFX1dNX05VTV9TRl9PVVRQVVRTX1NISUZUIHwKLQkJ ICBHRU42XzNEU1RBVEVfV01fUEVSU1BFQ1RJVkVfUElYRUxfQkFSWUNFTlRSSUMpOwotCU9VVF9C QVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRF X1dNIHwgKDkgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwga2VybmVsKTsKKwlpbnRlbF9iYl9v dXQoaWJiLCAxIDw8IEdFTjZfM0RTVEFURV9XTV9TQU1QTEVSX0NPVU5UX1NISUZUIHwKKwkJICAg ICAyIDw8IEdFTjZfM0RTVEFURV9XTV9CSU5ESU5HX1RBQkxFX0VOVFJZX0NPVU5UX1NISUZUKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCA2IDw8IEdFTjZfM0RT VEFURV9XTV9ESVNQQVRDSF9TVEFSVF9HUkZfMF9TSElGVCk7IC8qIERXNCAqLworCWludGVsX2Ji X291dChpYmIsICg0MCAtIDEpIDw8IEdFTjZfM0RTVEFURV9XTV9NQVhfVEhSRUFEU19TSElGVCB8 CisJCSAgICAgR0VONl8zRFNUQVRFX1dNX0RJU1BBVENIX0VOQUJMRSB8CisJCSAgICAgR0VONl8z RFNUQVRFX1dNXzE2X0RJU1BBVENIX0VOQUJMRSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMSA8PCBH RU42XzNEU1RBVEVfV01fTlVNX1NGX09VVFBVVFNfU0hJRlQgfAorCQkgICAgIEdFTjZfM0RTVEFU RV9XTV9QRVJTUEVDVElWRV9QSVhFTF9CQVJZQ0VOVFJJQyk7CisJaW50ZWxfYmJfb3V0KGliYiwg MCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW42X2VtaXRf YmluZGluZ190YWJsZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCB3 bV90YWJsZSkKK2dlbjZfZW1pdF9iaW5kaW5nX3RhYmxlKHN0cnVjdCBpbnRlbF9iYiAqaWJiLCB1 aW50MzJfdCB3bV90YWJsZSkKIHsKLQlPVVRfQkFUQ0goR0VONF8zRFNUQVRFX0JJTkRJTkdfVEFC TEVfUE9JTlRFUlMgfAotCQkgIEdFTjZfM0RTVEFURV9CSU5ESU5HX1RBQkxFX01PRElGWV9QUyB8 Ci0JCSAgKDQgLSAyKSk7Ci0JT1VUX0JBVENIKDApOwkJLyogdnMgKi8KLQlPVVRfQkFUQ0goMCk7 CQkvKiBncyAqLwotCU9VVF9CQVRDSCh3bV90YWJsZSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VO NF8zRFNUQVRFX0JJTkRJTkdfVEFCTEVfUE9JTlRFUlMgfAorCQkgICAgIEdFTjZfM0RTVEFURV9C SU5ESU5HX1RBQkxFX01PRElGWV9QUyB8CisJCSAgICAgKDQgLSAyKSk7CisJaW50ZWxfYmJfb3V0 KGliYiwgMCk7CQkvKiB2cyAqLworCWludGVsX2JiX291dChpYmIsIDApOwkJLyogZ3MgKi8KKwlp bnRlbF9iYl9vdXQoaWJiLCB3bV90YWJsZSk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW42X2VtaXRf ZHJhd2luZ19yZWN0YW5nbGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgY29uc3Qg c3RydWN0IGlndF9idWYgKmRzdCkKK2dlbjZfZW1pdF9kcmF3aW5nX3JlY3RhbmdsZShzdHJ1Y3Qg aW50ZWxfYmIgKmliYiwgY29uc3Qgc3RydWN0IGludGVsX2J1ZiAqZHN0KQogewotCU9VVF9CQVRD SChHRU40XzNEU1RBVEVfRFJBV0lOR19SRUNUQU5HTEUgfCAoNCAtIDIpKTsKLQlPVVRfQkFUQ0go MCk7Ci0JT1VUX0JBVENIKChpZ3RfYnVmX2hlaWdodChkc3QpIC0gMSkgPDwgMTYgfCAoaWd0X2J1 Zl93aWR0aChkc3QpIC0gMSkpOwotCU9VVF9CQVRDSCgwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBH RU40XzNEU1RBVEVfRFJBV0lOR19SRUNUQU5HTEUgfCAoNCAtIDIpKTsKKwlpbnRlbF9iYl9vdXQo aWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAoaW50ZWxfYnVmX2hlaWdodChkc3QpIC0gMSkg PDwgMTYgfCAoaW50ZWxfYnVmX3dpZHRoKGRzdCkgLSAxKSk7CisJaW50ZWxfYmJfb3V0KGliYiwg MCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW42X2VtaXRfdmVydGV4X2VsZW1lbnRzKHN0cnVjdCBp bnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitnZW42X2VtaXRfdmVydGV4X2VsZW1lbnRzKHN0cnVj dCBpbnRlbF9iYiAqaWJiKQogewogCS8qIFRoZSBWVUUgbGF5b3V0CiAJICogICAgZHdvcmQgMC0z OiBwYWQgKDAuMCwgMC4wLCAwLjAuIDAuMCkKQEAgLTM2OSw1NCArMzU3LDU0IEBAIGdlbjZfZW1p dF92ZXJ0ZXhfZWxlbWVudHMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKIAkgKgog CSAqIGR3b3JkIDQtMTEgYXJlIGZldGNoZWQgZnJvbSB2ZXJ0ZXggYnVmZmVyCiAJICovCi0JT1VU X0JBVENIKEdFTjRfM0RTVEFURV9WRVJURVhfRUxFTUVOVFMgfCAoMiAqIDMgKyAxIC0gMikpOwor CWludGVsX2JiX291dChpYmIsIEdFTjRfM0RTVEFURV9WRVJURVhfRUxFTUVOVFMgfCAoMiAqIDMg KyAxIC0gMikpOwogCi0JT1VUX0JBVENIKDAgPDwgR0VONl9WRTBfVkVSVEVYX0JVRkZFUl9JTkRF WF9TSElGVCB8IEdFTjZfVkUwX1ZBTElEIHwKLQkJICBTVVJGQUNFRk9STUFUX1IzMkczMkIzMkEz Ml9GTE9BVCA8PCBWRTBfRk9STUFUX1NISUZUIHwKLQkJICAwIDw8IFZFMF9PRkZTRVRfU0hJRlQp OwotCU9VVF9CQVRDSChHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5U XzBfU0hJRlQgfAotCQkgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMCA8PCBWRTFfVkZDT01QT05F TlRfMV9TSElGVCB8Ci0JCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBP TkVOVF8yX1NISUZUIHwKLQkJICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09N UE9ORU5UXzNfU0hJRlQpOworCWludGVsX2JiX291dChpYmIsIDAgPDwgR0VONl9WRTBfVkVSVEVY X0JVRkZFUl9JTkRFWF9TSElGVCB8IEdFTjZfVkUwX1ZBTElEIHwKKwkJICAgICBTVVJGQUNFRk9S TUFUX1IzMkczMkIzMkEzMl9GTE9BVCA8PCBWRTBfRk9STUFUX1NISUZUIHwKKwkJICAgICAwIDw8 IFZFMF9PRkZTRVRfU0hJRlQpOworCWludGVsX2JiX291dChpYmIsIEdFTjRfVkZDT01QT05FTlRf U1RPUkVfMCA8PCBWRTFfVkZDT01QT05FTlRfMF9TSElGVCB8CisJCSAgICAgR0VONF9WRkNPTVBP TkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8xX1NISUZUIHwKKwkJICAgICBHRU40X1ZG Q09NUE9ORU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzJfU0hJRlQgfAorCQkgICAgIEdF TjRfVkZDT01QT05FTlRfU1RPUkVfMCA8PCBWRTFfVkZDT01QT05FTlRfM19TSElGVCk7CiAKIAkv KiB4LHkgKi8KLQlPVVRfQkFUQ0goMCA8PCBHRU42X1ZFMF9WRVJURVhfQlVGRkVSX0lOREVYX1NI SUZUIHwgR0VONl9WRTBfVkFMSUQgfAotCQkgIFNVUkZBQ0VGT1JNQVRfUjE2RzE2X1NTQ0FMRUQg PDwgVkUwX0ZPUk1BVF9TSElGVCB8Ci0JCSAgMCA8PCBWRTBfT0ZGU0VUX1NISUZUKTsgLyogb2Zm c2V0cyB2YiBpbiBieXRlcyAqLwotCU9VVF9CQVRDSChHRU40X1ZGQ09NUE9ORU5UX1NUT1JFX1NS QyA8PCBWRTFfVkZDT01QT05FTlRfMF9TSElGVCB8Ci0JCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9S RV9TUkMgPDwgVkUxX1ZGQ09NUE9ORU5UXzFfU0hJRlQgfAotCQkgIEdFTjRfVkZDT01QT05FTlRf U1RPUkVfMV9GTFQgPDwgVkUxX1ZGQ09NUE9ORU5UXzJfU0hJRlQgfAotCQkgIEdFTjRfVkZDT01Q T05FTlRfU1RPUkVfMV9GTFQgPDwgVkUxX1ZGQ09NUE9ORU5UXzNfU0hJRlQpOworCWludGVsX2Ji X291dChpYmIsIDAgPDwgR0VONl9WRTBfVkVSVEVYX0JVRkZFUl9JTkRFWF9TSElGVCB8IEdFTjZf VkUwX1ZBTElEIHwKKwkJICAgICBTVVJGQUNFRk9STUFUX1IxNkcxNl9TU0NBTEVEIDw8IFZFMF9G T1JNQVRfU0hJRlQgfAorCQkgICAgIDAgPDwgVkUwX09GRlNFVF9TSElGVCk7IC8qIG9mZnNldHMg dmIgaW4gYnl0ZXMgKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU40X1ZGQ09NUE9ORU5UX1NUT1JF X1NSQyA8PCBWRTFfVkZDT01QT05FTlRfMF9TSElGVCB8CisJCSAgICAgR0VONF9WRkNPTVBPTkVO VF9TVE9SRV9TUkMgPDwgVkUxX1ZGQ09NUE9ORU5UXzFfU0hJRlQgfAorCQkgICAgIEdFTjRfVkZD T01QT05FTlRfU1RPUkVfMV9GTFQgPDwgVkUxX1ZGQ09NUE9ORU5UXzJfU0hJRlQgfAorCQkgICAg IEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMV9GTFQgPDwgVkUxX1ZGQ09NUE9ORU5UXzNfU0hJRlQp OwogCiAJLyogdTAsIHYwICovCi0JT1VUX0JBVENIKDAgPDwgR0VONl9WRTBfVkVSVEVYX0JVRkZF Ul9JTkRFWF9TSElGVCB8IEdFTjZfVkUwX1ZBTElEIHwKLQkJICBTVVJGQUNFRk9STUFUX1IzMkcz Ml9GTE9BVCA8PCBWRTBfRk9STUFUX1NISUZUIHwKLQkJICA0IDw8IFZFMF9PRkZTRVRfU0hJRlQp OwkvKiBvZmZzZXQgdmIgaW4gYnl0ZXMgKi8KLQlPVVRfQkFUQ0goR0VONF9WRkNPTVBPTkVOVF9T VE9SRV9TUkMgPDwgVkUxX1ZGQ09NUE9ORU5UXzBfU0hJRlQgfAotCQkgIEdFTjRfVkZDT01QT05F TlRfU1RPUkVfU1JDIDw8IFZFMV9WRkNPTVBPTkVOVF8xX1NISUZUIHwKLQkJICBHRU40X1ZGQ09N UE9ORU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzJfU0hJRlQgfAotCQkgIEdFTjRfVkZD T01QT05FTlRfU1RPUkVfMCA8PCBWRTFfVkZDT01QT05FTlRfM19TSElGVCk7CisJaW50ZWxfYmJf b3V0KGliYiwgMCA8PCBHRU42X1ZFMF9WRVJURVhfQlVGRkVSX0lOREVYX1NISUZUIHwgR0VONl9W RTBfVkFMSUQgfAorCQkgICAgIFNVUkZBQ0VGT1JNQVRfUjMyRzMyX0ZMT0FUIDw8IFZFMF9GT1JN QVRfU0hJRlQgfAorCQkgICAgIDQgPDwgVkUwX09GRlNFVF9TSElGVCk7CS8qIG9mZnNldCB2YiBp biBieXRlcyAqLworCWludGVsX2JiX291dChpYmIsIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfU1JD IDw8IFZFMV9WRkNPTVBPTkVOVF8wX1NISUZUIHwKKwkJICAgICBHRU40X1ZGQ09NUE9ORU5UX1NU T1JFX1NSQyA8PCBWRTFfVkZDT01QT05FTlRfMV9TSElGVCB8CisJCSAgICAgR0VONF9WRkNPTVBP TkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8yX1NISUZUIHwKKwkJICAgICBHRU40X1ZG Q09NUE9ORU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzNfU0hJRlQpOwogfQogCiBzdGF0 aWMgdWludDMyX3QKLWdlbjZfY3JlYXRlX2NjX3ZpZXdwb3J0KHN0cnVjdCBpbnRlbF9iYXRjaGJ1 ZmZlciAqYmF0Y2gpCitnZW42X2NyZWF0ZV9jY192aWV3cG9ydChzdHJ1Y3QgaW50ZWxfYmIgKmli YikKIHsKIAlzdHJ1Y3QgZ2VuNF9jY192aWV3cG9ydCAqdnA7CiAKLQl2cCA9IGludGVsX2JhdGNo YnVmZmVyX3N1YmRhdGFfYWxsb2MoYmF0Y2gsIHNpemVvZigqdnApLCAzMik7CisJdnAgPSBpbnRl bF9iYl9wdHJfYWxpZ24oaWJiLCAzMik7CiAKIAl2cC0+bWluX2RlcHRoID0gLTEuZTM1OwogCXZw LT5tYXhfZGVwdGggPSAxLmUzNTsKIAotCXJldHVybiBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRh X29mZnNldChiYXRjaCwgdnApOworCXJldHVybiBpbnRlbF9iYl9wdHJfYWRkX3JldHVybl9wcmV2 X29mZnNldChpYmIsIHNpemVvZigqdnApKTsKIH0KIAogc3RhdGljIHVpbnQzMl90Ci1nZW42X2Ny ZWF0ZV9jY19ibGVuZChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorZ2VuNl9jcmVh dGVfY2NfYmxlbmQoc3RydWN0IGludGVsX2JiICppYmIpCiB7CiAJc3RydWN0IGdlbjZfYmxlbmRf c3RhdGUgKmJsZW5kOwogCi0JYmxlbmQgPSBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX2FsbG9j KGJhdGNoLCBzaXplb2YoKmJsZW5kKSwgNjQpOworCWJsZW5kID0gaW50ZWxfYmJfcHRyX2FsaWdu KGliYiwgNjQpOwogCiAJYmxlbmQtPmJsZW5kMC5kZXN0X2JsZW5kX2ZhY3RvciA9IEdFTjZfQkxF TkRGQUNUT1JfWkVSTzsKIAlibGVuZC0+YmxlbmQwLnNvdXJjZV9ibGVuZF9mYWN0b3IgPSBHRU42 X0JMRU5ERkFDVE9SX09ORTsKQEAgLTQyNiwyNSArNDE0LDI0IEBAIGdlbjZfY3JlYXRlX2NjX2Js ZW5kKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCiAJYmxlbmQtPmJsZW5kMS5wb3N0 X2JsZW5kX2NsYW1wX2VuYWJsZSA9IDE7CiAJYmxlbmQtPmJsZW5kMS5wcmVfYmxlbmRfY2xhbXBf ZW5hYmxlID0gMTsKIAotCXJldHVybiBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX29mZnNldChi YXRjaCwgYmxlbmQpOworCXJldHVybiBpbnRlbF9iYl9wdHJfYWRkX3JldHVybl9wcmV2X29mZnNl dChpYmIsIHNpemVvZigqYmxlbmQpKTsKIH0KIAogc3RhdGljIHVpbnQzMl90Ci1nZW42X2NyZWF0 ZV9rZXJuZWwoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2dlbjZfY3JlYXRlX2tl cm5lbChzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKLQlyZXR1cm4gaW50ZWxfYmF0Y2hidWZmZXJf Y29weV9kYXRhKGJhdGNoLCBwc19rZXJuZWxfbm9tYXNrX2FmZmluZSwKLQkJCSAgc2l6ZW9mKHBz X2tlcm5lbF9ub21hc2tfYWZmaW5lKSwKLQkJCSAgNjQpOworCXJldHVybiBpbnRlbF9iYl9jb3B5 X2RhdGEoaWJiLCBwc19rZXJuZWxfbm9tYXNrX2FmZmluZSwKKwkJCQkgIHNpemVvZihwc19rZXJu ZWxfbm9tYXNrX2FmZmluZSksIDY0KTsKIH0KIAogc3RhdGljIHVpbnQzMl90Ci1nZW42X2NyZWF0 ZV9zYW1wbGVyKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCitnZW42X2NyZWF0ZV9z YW1wbGVyKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAogCQkgICAgc2FtcGxlcl9maWx0ZXJfdCBmaWx0 ZXIsCi0JCSAgIHNhbXBsZXJfZXh0ZW5kX3QgZXh0ZW5kKQorCQkgICAgc2FtcGxlcl9leHRlbmRf dCBleHRlbmQpCiB7CiAJc3RydWN0IGdlbjZfc2FtcGxlcl9zdGF0ZSAqc3M7CiAKLQlzcyA9IGlu dGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfYWxsb2MoYmF0Y2gsIHNpemVvZigqc3MpLCAzMik7CisJ c3MgPSBpbnRlbF9iYl9wdHJfYWxpZ24oaWJiLCAzMik7CiAJc3MtPnNzMC5sb2RfcHJlY2xhbXAg PSAxOwkvKiBHTCBtb2RlICovCiAKIAkvKiBXZSB1c2UgdGhlIGxlZ2FjeSBtb2RlIHRvIGdldCB0 aGUgc2VtYW50aWNzIHNwZWNpZmllZCBieQpAQCAtNDg3LDEwNyArNDc0LDExNiBAQCBnZW42X2Ny ZWF0ZV9zYW1wbGVyKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCiAJCWJyZWFrOwog CX0KIAotCXJldHVybiBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX29mZnNldChiYXRjaCwgc3Mp OworCXJldHVybiBpbnRlbF9iYl9wdHJfYWRkX3JldHVybl9wcmV2X29mZnNldChpYmIsIHNpemVv Zigqc3MpKTsKIH0KIAotc3RhdGljIHZvaWQgZ2VuNl9lbWl0X3ZlcnRleF9idWZmZXIoc3RydWN0 IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK3N0YXRpYyB2b2lkIGdlbjZfZW1pdF92ZXJ0ZXhf YnVmZmVyKHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewotCU9VVF9CQVRDSChHRU40XzNEU1RBVEVf VkVSVEVYX0JVRkZFUlMgfCAzKTsKLQlPVVRfQkFUQ0goR0VONl9WQjBfVkVSVEVYREFUQSB8Ci0J CSAgMCA8PCBHRU42X1ZCMF9CVUZGRVJfSU5ERVhfU0hJRlQgfAotCQkgIFZFUlRFWF9TSVpFIDw8 IFZCMF9CVUZGRVJfUElUQ0hfU0hJRlQpOwotCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VN X0RPTUFJTl9WRVJURVgsIDAsIDApOwotCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RP TUFJTl9WRVJURVgsIDAsIGJhdGNoLT5iby0+c2l6ZS0xKTsKLQlPVVRfQkFUQ0goMCk7CisJaW50 ZWxfYmJfb3V0KGliYiwgR0VONF8zRFNUQVRFX1ZFUlRFWF9CVUZGRVJTIHwgMyk7CisJaW50ZWxf YmJfb3V0KGliYiwgR0VONl9WQjBfVkVSVEVYREFUQSB8CisJCSAgICAgMCA8PCBHRU42X1ZCMF9C VUZGRVJfSU5ERVhfU0hJRlQgfAorCQkgICAgIFZFUlRFWF9TSVpFIDw8IFZCMF9CVUZGRVJfUElU Q0hfU0hJRlQpOworCWludGVsX2JiX2VtaXRfcmVsb2MoaWJiLCBpYmItPmhhbmRsZSwgSTkxNV9H RU1fRE9NQUlOX1ZFUlRFWCwgMCwKKwkJCSAgICAwLCBpYmItPmJhdGNoX29mZnNldCk7CisJaW50 ZWxfYmJfZW1pdF9yZWxvYyhpYmIsIGliYi0+aGFuZGxlLCBJOTE1X0dFTV9ET01BSU5fVkVSVEVY LCAwLAorCQkJICAgIGliYi0+c2l6ZSAtIDEsIGliYi0+YmF0Y2hfb2Zmc2V0KTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCAwKTsKIH0KIAotc3RhdGljIHVpbnQzMl90IGdlbjZfZW1pdF9wcmltaXRpdmUo c3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK3N0YXRpYyB1aW50MzJfdCBnZW42X2Vt aXRfcHJpbWl0aXZlKHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewogCXVpbnQzMl90IG9mZnNldDsK IAotCU9VVF9CQVRDSChHRU40XzNEUFJJTUlUSVZFIHwKLQkJICBHRU40XzNEUFJJTUlUSVZFX1ZF UlRFWF9TRVFVRU5USUFMIHwKLQkJICBfM0RQUklNX1JFQ1RMSVNUIDw8IEdFTjRfM0RQUklNSVRJ VkVfVE9QT0xPR1lfU0hJRlQgfAotCQkgIDAgPDwgOSB8Ci0JCSAgNCk7Ci0JT1VUX0JBVENIKDMp OwkvKiB2ZXJ0ZXggY291bnQgKi8KLQlvZmZzZXQgPSBiYXRjaC0+cHRyIC0gYmF0Y2gtPmJ1ZmZl cjsKLQlPVVRfQkFUQ0goMCk7CS8qIHZlcnRleF9pbmRleCAqLwotCU9VVF9CQVRDSCgxKTsJLyog c2luZ2xlIGluc3RhbmNlICovCi0JT1VUX0JBVENIKDApOwkvKiBzdGFydCBpbnN0YW5jZSBsb2Nh dGlvbiAqLwotCU9VVF9CQVRDSCgwKTsJLyogaW5kZXggYnVmZmVyIG9mZnNldCwgaWdub3JlZCAq LworCWludGVsX2JiX291dChpYmIsIEdFTjRfM0RQUklNSVRJVkUgfAorCQkgICAgIEdFTjRfM0RQ UklNSVRJVkVfVkVSVEVYX1NFUVVFTlRJQUwgfAorCQkgICAgIF8zRFBSSU1fUkVDVExJU1QgPDwg R0VONF8zRFBSSU1JVElWRV9UT1BPTE9HWV9TSElGVCB8CisJCSAgICAgMCA8PCA5IHwKKwkJICAg ICA0KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAzKTsJLyogdmVydGV4IGNvdW50ICovCisJb2Zmc2V0 ID0gaW50ZWxfYmJfb2Zmc2V0KGliYik7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CS8qIHZlcnRl eF9pbmRleCAqLworCWludGVsX2JiX291dChpYmIsIDEpOwkvKiBzaW5nbGUgaW5zdGFuY2UgKi8K KwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsJLyogc3RhcnQgaW5zdGFuY2UgbG9jYXRpb24gKi8KKwlp bnRlbF9iYl9vdXQoaWJiLCAwKTsJLyogaW5kZXggYnVmZmVyIG9mZnNldCwgaWdub3JlZCAqLwog CiAJcmV0dXJuIG9mZnNldDsKIH0KIAotdm9pZCBnZW42X3JlbmRlcl9jb3B5ZnVuYyhzdHJ1Y3Qg aW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJICBkcm1faW50ZWxfY29udGV4dCAqY29udGV4 dCwKLQkJCSAgY29uc3Qgc3RydWN0IGlndF9idWYgKnNyYywgdW5zaWduZWQgc3JjX3gsIHVuc2ln bmVkIHNyY195LAotCQkJICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LAotCQkJICBj b25zdCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0LCB1bnNpZ25lZCBkc3RfeCwgdW5zaWduZWQgZHN0X3kp Cit2b2lkIGdlbjZfcmVuZGVyX2NvcHlmdW5jKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAorCQkJICB1 aW50MzJfdCBjdHgsCisJCQkgIHN0cnVjdCBpbnRlbF9idWYgKnNyYywKKwkJCSAgdWludDMyX3Qg c3JjX3gsIHVpbnQzMl90IHNyY195LAorCQkJICB1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVp Z2h0LAorCQkJICBzdHJ1Y3QgaW50ZWxfYnVmICpkc3QsCisJCQkgIHVpbnQzMl90IGRzdF94LCB1 aW50MzJfdCBkc3RfeSkKIHsKIAl1aW50MzJfdCB3bV9zdGF0ZSwgd21fa2VybmVsLCB3bV90YWJs ZTsKIAl1aW50MzJfdCBjY192cCwgY2NfYmxlbmQsIG9mZnNldDsKIAl1aW50MzJfdCBiYXRjaF9l bmQ7CiAKIAlpZ3RfYXNzZXJ0KHNyYy0+YnBwID09IGRzdC0+YnBwKTsKLQlpbnRlbF9iYXRjaGJ1 ZmZlcl9mbHVzaF93aXRoX2NvbnRleHQoYmF0Y2gsIGNvbnRleHQpOwogCi0JYmF0Y2gtPnB0ciA9 IGJhdGNoLT5idWZmZXIgKyAxMDI0OwotCWludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfYWxsb2Mo YmF0Y2gsIDY0LCA2NCk7Ci0Jd21fdGFibGUgID0gZ2VuNl9iaW5kX3N1cmZhY2VzKGJhdGNoLCBz cmMsIGRzdCk7Ci0Jd21fa2VybmVsID0gZ2VuNl9jcmVhdGVfa2VybmVsKGJhdGNoKTsKLQl3bV9z dGF0ZSAgPSBnZW42X2NyZWF0ZV9zYW1wbGVyKGJhdGNoLAorCWludGVsX2JiX2ZsdXNoX3JlbmRl cl93aXRoX2NvbnRleHQoaWJiLCBjdHgpOworCisJaW50ZWxfYmJfYWRkX2ludGVsX2J1ZihpYmIs IGRzdCwgdHJ1ZSk7CisJaW50ZWxfYmJfYWRkX2ludGVsX2J1ZihpYmIsIHNyYywgZmFsc2UpOwor CisJaW50ZWxfYmJfcHRyX3NldChpYmIsIDEwMjQgKyA2NCk7CisKKwl3bV90YWJsZSAgPSBnZW42 X2JpbmRfc3VyZmFjZXMoaWJiLCBzcmMsIGRzdCk7CisJd21fa2VybmVsID0gZ2VuNl9jcmVhdGVf a2VybmVsKGliYik7CisJd21fc3RhdGUgID0gZ2VuNl9jcmVhdGVfc2FtcGxlcihpYmIsCiAJCQkJ CVNBTVBMRVJfRklMVEVSX05FQVJFU1QsCiAJCQkJCVNBTVBMRVJfRVhURU5EX05PTkUpOwogCi0J Y2NfdnAgPSBnZW42X2NyZWF0ZV9jY192aWV3cG9ydChiYXRjaCk7Ci0JY2NfYmxlbmQgPSBnZW42 X2NyZWF0ZV9jY19ibGVuZChiYXRjaCk7CisJY2NfdnAgPSBnZW42X2NyZWF0ZV9jY192aWV3cG9y dChpYmIpOworCWNjX2JsZW5kID0gZ2VuNl9jcmVhdGVfY2NfYmxlbmQoaWJiKTsKIAotCWJhdGNo LT5wdHIgPSBiYXRjaC0+YnVmZmVyOworCWludGVsX2JiX3B0cl9zZXQoaWJiLCAwKTsKIAotCWdl bjZfZW1pdF9pbnZhcmlhbnQoYmF0Y2gpOwotCWdlbjZfZW1pdF9zdGF0ZV9iYXNlX2FkZHJlc3Mo YmF0Y2gpOworCWdlbjZfZW1pdF9pbnZhcmlhbnQoaWJiKTsKKwlnZW42X2VtaXRfc3RhdGVfYmFz ZV9hZGRyZXNzKGliYik7CiAKLQlnZW42X2VtaXRfc2lwKGJhdGNoKTsKLQlnZW42X2VtaXRfdXJi KGJhdGNoKTsKKwlnZW42X2VtaXRfc2lwKGliYik7CisJZ2VuNl9lbWl0X3VyYihpYmIpOwogCi0J Z2VuNl9lbWl0X3ZpZXdwb3J0cyhiYXRjaCwgY2NfdnApOwotCWdlbjZfZW1pdF92cyhiYXRjaCk7 Ci0JZ2VuNl9lbWl0X2dzKGJhdGNoKTsKLQlnZW42X2VtaXRfY2xpcChiYXRjaCk7Ci0JZ2VuNl9l bWl0X3dtX2NvbnN0YW50cyhiYXRjaCk7Ci0JZ2VuNl9lbWl0X251bGxfZGVwdGhfYnVmZmVyKGJh dGNoKTsKKwlnZW42X2VtaXRfdmlld3BvcnRzKGliYiwgY2NfdnApOworCWdlbjZfZW1pdF92cyhp YmIpOworCWdlbjZfZW1pdF9ncyhpYmIpOworCWdlbjZfZW1pdF9jbGlwKGliYik7CisJZ2VuNl9l bWl0X3dtX2NvbnN0YW50cyhpYmIpOworCWdlbjZfZW1pdF9udWxsX2RlcHRoX2J1ZmZlcihpYmIp OwogCi0JZ2VuNl9lbWl0X2RyYXdpbmdfcmVjdGFuZ2xlKGJhdGNoLCBkc3QpOwotCWdlbjZfZW1p dF9jYyhiYXRjaCwgY2NfYmxlbmQpOwotCWdlbjZfZW1pdF9zYW1wbGVyKGJhdGNoLCB3bV9zdGF0 ZSk7Ci0JZ2VuNl9lbWl0X3NmKGJhdGNoKTsKLQlnZW42X2VtaXRfd20oYmF0Y2gsIHdtX2tlcm5l bCk7Ci0JZ2VuNl9lbWl0X3ZlcnRleF9lbGVtZW50cyhiYXRjaCk7Ci0JZ2VuNl9lbWl0X2JpbmRp bmdfdGFibGUoYmF0Y2gsIHdtX3RhYmxlKTsKKwlnZW42X2VtaXRfZHJhd2luZ19yZWN0YW5nbGUo aWJiLCBkc3QpOworCWdlbjZfZW1pdF9jYyhpYmIsIGNjX2JsZW5kKTsKKwlnZW42X2VtaXRfc2Ft cGxlcihpYmIsIHdtX3N0YXRlKTsKKwlnZW42X2VtaXRfc2YoaWJiKTsKKwlnZW42X2VtaXRfd20o aWJiLCB3bV9rZXJuZWwpOworCWdlbjZfZW1pdF92ZXJ0ZXhfZWxlbWVudHMoaWJiKTsKKwlnZW42 X2VtaXRfYmluZGluZ190YWJsZShpYmIsIHdtX3RhYmxlKTsKIAotCWdlbjZfZW1pdF92ZXJ0ZXhf YnVmZmVyKGJhdGNoKTsKLQlvZmZzZXQgPSBnZW42X2VtaXRfcHJpbWl0aXZlKGJhdGNoKTsKKwln ZW42X2VtaXRfdmVydGV4X2J1ZmZlcihpYmIpOworCW9mZnNldCA9IGdlbjZfZW1pdF9wcmltaXRp dmUoaWJiKTsKIAotCU9VVF9CQVRDSChNSV9CQVRDSF9CVUZGRVJfRU5EKTsKLQliYXRjaF9lbmQg PSBpbnRlbF9iYXRjaGJ1ZmZlcl9hbGlnbihiYXRjaCwgOCk7CisJYmF0Y2hfZW5kID0gaW50ZWxf YmJfZW1pdF9iYmUoaWJiKTsKIAotCSoodWludDMyX3QqKShiYXRjaC0+YnVmZmVyICsgb2Zmc2V0 KSA9Ci0JCWJhdGNoX3JvdW5kX3VwdG8oYmF0Y2gsIFZFUlRFWF9TSVpFKS9WRVJURVhfU0laRTsK KwlpYmItPmJhdGNoW29mZnNldCAvIHNpemVvZih1aW50MzJfdCldID0KKwkJCWJhdGNoX3JvdW5k X3VwdG8oaWJiLCBWRVJURVhfU0laRSkvVkVSVEVYX1NJWkU7CiAKLQllbWl0X3ZlcnRleF8ycyhi YXRjaCwgZHN0X3ggKyB3aWR0aCwgZHN0X3kgKyBoZWlnaHQpOwotCWVtaXRfdmVydGV4X25vcm1h bGl6ZWQoYmF0Y2gsIHNyY194ICsgd2lkdGgsIGlndF9idWZfd2lkdGgoc3JjKSk7Ci0JZW1pdF92 ZXJ0ZXhfbm9ybWFsaXplZChiYXRjaCwgc3JjX3kgKyBoZWlnaHQsIGlndF9idWZfaGVpZ2h0KHNy YykpOworCWVtaXRfdmVydGV4XzJzKGliYiwgZHN0X3ggKyB3aWR0aCwgZHN0X3kgKyBoZWlnaHQp OworCWVtaXRfdmVydGV4X25vcm1hbGl6ZWQoaWJiLCBzcmNfeCArIHdpZHRoLCBpbnRlbF9idWZf d2lkdGgoc3JjKSk7CisJZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChpYmIsIHNyY195ICsgaGVpZ2h0 LCBpbnRlbF9idWZfaGVpZ2h0KHNyYykpOwogCi0JZW1pdF92ZXJ0ZXhfMnMoYmF0Y2gsIGRzdF94 LCBkc3RfeSArIGhlaWdodCk7Ci0JZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChiYXRjaCwgc3JjX3gs IGlndF9idWZfd2lkdGgoc3JjKSk7Ci0JZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChiYXRjaCwgc3Jj X3kgKyBoZWlnaHQsIGlndF9idWZfaGVpZ2h0KHNyYykpOworCWVtaXRfdmVydGV4XzJzKGliYiwg ZHN0X3gsIGRzdF95ICsgaGVpZ2h0KTsKKwllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGliYiwgc3Jj X3gsIGludGVsX2J1Zl93aWR0aChzcmMpKTsKKwllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGliYiwg c3JjX3kgKyBoZWlnaHQsIGludGVsX2J1Zl9oZWlnaHQoc3JjKSk7CiAKLQllbWl0X3ZlcnRleF8y cyhiYXRjaCwgZHN0X3gsIGRzdF95KTsKLQllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGJhdGNoLCBz cmNfeCwgaWd0X2J1Zl93aWR0aChzcmMpKTsKLQllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGJhdGNo LCBzcmNfeSwgaWd0X2J1Zl9oZWlnaHQoc3JjKSk7CisJZW1pdF92ZXJ0ZXhfMnMoaWJiLCBkc3Rf eCwgZHN0X3kpOworCWVtaXRfdmVydGV4X25vcm1hbGl6ZWQoaWJiLCBzcmNfeCwgaW50ZWxfYnVm X3dpZHRoKHNyYykpOworCWVtaXRfdmVydGV4X25vcm1hbGl6ZWQoaWJiLCBzcmNfeSwgaW50ZWxf YnVmX2hlaWdodChzcmMpKTsKIAotCWdlbjZfcmVuZGVyX2ZsdXNoKGJhdGNoLCBjb250ZXh0LCBi YXRjaF9lbmQpOwotCWludGVsX2JhdGNoYnVmZmVyX3Jlc2V0KGJhdGNoKTsKKwlpbnRlbF9iYl9l eGVjX3dpdGhfY29udGV4dChpYmIsIGJhdGNoX2VuZCwgY3R4LAorCQkJCSAgIEk5MTVfRVhFQ19E RUZBVUxUIHwgSTkxNV9FWEVDX05PX1JFTE9DLAorCQkJCSAgIGZhbHNlKTsKKwlpbnRlbF9iYl9y ZXNldChpYmIsIGZhbHNlKTsKIH0KZGlmZiAtLWdpdCBhL2xpYi9yZW5kZXJjb3B5X2dlbjcuYyBi L2xpYi9yZW5kZXJjb3B5X2dlbjcuYwppbmRleCA5M2I0ZGE3Mi4uNjJlZjQzMjUgMTAwNjQ0Ci0t LSBhL2xpYi9yZW5kZXJjb3B5X2dlbjcuYworKysgYi9saWIvcmVuZGVyY29weV9nZW43LmMKQEAg LTEyLDcgKzEyLDcgQEAKICNpbmNsdWRlICJkcm0uaCIKICNpbmNsdWRlICJpOTE1X2RybS5oIgog I2luY2x1ZGUgImRybXRlc3QuaCIKLSNpbmNsdWRlICJpbnRlbF9idWZtZ3IuaCIKKyNpbmNsdWRl ICJpbnRlbF9idWZvcHMuaCIKICNpbmNsdWRlICJpbnRlbF9iYXRjaGJ1ZmZlci5oIgogI2luY2x1 ZGUgImludGVsX2lvLmgiCiAjaW5jbHVkZSAiaW50ZWxfY2hpcHNldC5oIgpAQCAtMjAsNiArMjAs MTQgQEAKICNpbmNsdWRlICJnZW43X3JlbmRlci5oIgogI2luY2x1ZGUgImludGVsX3JlZy5oIgog CisjaWYgREVCVUdfUkVOREVSQ1BZCitzdGF0aWMgdm9pZCBkdW1wX2JhdGNoKHN0cnVjdCBpbnRl bF9iYiAqaWJiKQoreworCWludGVsX2JiX2R1bXAoaWJiLCAiL3RtcC9nZW43LWJhdGNoYnVmZmVy cy5kdW1wIik7Cit9CisjZWxzZQorI2RlZmluZSBkdW1wX2JhdGNoKHgpIGRvIHsgfSB3aGlsZSAo MCkKKyNlbmRpZgogCiBzdGF0aWMgY29uc3QgdWludDMyX3QgcHNfa2VybmVsW11bNF0gPSB7CiAJ eyAweDAwODAwMDVhLCAweDJlMjA3N2JkLCAweDAwMDAwMGMwLCAweDAwOGQwMDQwIH0sCkBAIC0z MiwxNyArNDAsNiBAQCBzdGF0aWMgY29uc3QgdWludDMyX3QgcHNfa2VybmVsW11bNF0gPSB7CiAJ eyAweDA1ODAwMDMxLCAweDIwMDAxZmE4LCAweDAwOGQwZTIwLCAweDkwMDMxMDAwIH0sCiB9Owog Ci1zdGF0aWMgdm9pZAotZ2VuN19yZW5kZXJfZmx1c2goc3RydWN0IGludGVsX2JhdGNoYnVmZmVy ICpiYXRjaCwKLQkJICBkcm1faW50ZWxfY29udGV4dCAqY29udGV4dCwgdWludDMyX3QgYmF0Y2hf ZW5kKQotewotCWlndF9hc3NlcnRfZXEoZHJtX2ludGVsX2JvX3N1YmRhdGEoYmF0Y2gtPmJvLAot CQkJCQkgICAwLCA0MDk2LCBiYXRjaC0+YnVmZmVyKSwKLQkJICAgICAgMCk7Ci0JaWd0X2Fzc2Vy dF9lcShkcm1faW50ZWxfZ2VtX2JvX2NvbnRleHRfZXhlYyhiYXRjaC0+Ym8sIGNvbnRleHQsCi0J CQkJCQkgICAgYmF0Y2hfZW5kLCAwKSwKLQkJICAgICAgMCk7Ci19CiAKIHN0YXRpYyB1aW50MzJf dAogZ2VuN190aWxpbmdfYml0cyh1aW50MzJfdCB0aWxpbmcpCkBAIC01NiwxNyArNTMsMTcgQEAg Z2VuN190aWxpbmdfYml0cyh1aW50MzJfdCB0aWxpbmcpCiB9CiAKIHN0YXRpYyB1aW50MzJfdAot Z2VuN19iaW5kX2J1ZihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCSAgICAgIGNv bnN0IHN0cnVjdCBpZ3RfYnVmICpidWYsCitnZW43X2JpbmRfYnVmKHN0cnVjdCBpbnRlbF9iYiAq aWJiLAorCSAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9idWYgKmJ1ZiwKIAkgICAgICBpbnQgaXNf ZHN0KQogewogCXVpbnQzMl90IGZvcm1hdCwgKnNzOwogCXVpbnQzMl90IHdyaXRlX2RvbWFpbiwg cmVhZF9kb21haW47Ci0JaW50IHJldDsKKwl1aW50NjRfdCBhZGRyZXNzOwogCiAJaWd0X2Fzc2Vy dF9sdGUoYnVmLT5zdXJmYWNlWzBdLnN0cmlkZSwgMjU2KjEwMjQpOwotCWlndF9hc3NlcnRfbHRl KGlndF9idWZfd2lkdGgoYnVmKSwgMTYzODQpOwotCWlndF9hc3NlcnRfbHRlKGlndF9idWZfaGVp Z2h0KGJ1ZiksIDE2Mzg0KTsKKwlpZ3RfYXNzZXJ0X2x0ZShpbnRlbF9idWZfd2lkdGgoYnVmKSwg MTYzODQpOworCWlndF9hc3NlcnRfbHRlKGludGVsX2J1Zl9oZWlnaHQoYnVmKSwgMTYzODQpOwog CiAJc3dpdGNoIChidWYtPmJwcCkgewogCQljYXNlIDg6IGZvcm1hdCA9IFNVUkZBQ0VGT1JNQVRf UjhfVU5PUk07IGJyZWFrOwpAQCAtODMsNzcgKzgwLDc2IEBAIGdlbjdfYmluZF9idWYoc3RydWN0 IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKIAkJcmVhZF9kb21haW4gPSBJOTE1X0dFTV9ET01B SU5fU0FNUExFUjsKIAl9CiAKLQlzcyA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfYWxsb2Mo YmF0Y2gsIDggKiBzaXplb2YoKnNzKSwgMzIpOworCXNzID0gaW50ZWxfYmJfcHRyX2FsaWduKGli YiwgMzIpOwogCiAJc3NbMF0gPSAoU1VSRkFDRV8yRCA8PCBHRU43X1NVUkZBQ0VfVFlQRV9TSElG VCB8CiAJCSBnZW43X3RpbGluZ19iaXRzKGJ1Zi0+dGlsaW5nKSB8CiAJCWZvcm1hdCA8PCBHRU43 X1NVUkZBQ0VfRk9STUFUX1NISUZUKTsKLQlzc1sxXSA9IGJ1Zi0+Ym8tPm9mZnNldDsKLQlzc1sy XSA9ICgoaWd0X2J1Zl93aWR0aChidWYpIC0gMSkgIDw8IEdFTjdfU1VSRkFDRV9XSURUSF9TSElG VCB8Ci0JCSAoaWd0X2J1Zl9oZWlnaHQoYnVmKSAtIDEpIDw8IEdFTjdfU1VSRkFDRV9IRUlHSFRf U0hJRlQpOworCisJYWRkcmVzcyA9IGludGVsX2JiX29mZnNldF9yZWxvYyhpYmIsIGJ1Zi0+aGFu ZGxlLAorCQkJCQlyZWFkX2RvbWFpbiwgd3JpdGVfZG9tYWluLAorCQkJCQlpbnRlbF9iYl9vZmZz ZXQoaWJiKSArIDQsCisJCQkJCWJ1Zi0+YWRkci5vZmZzZXQpOworCXNzWzFdID0gYWRkcmVzczsK Kwlzc1syXSA9ICgoaW50ZWxfYnVmX3dpZHRoKGJ1ZikgLSAxKSAgPDwgR0VON19TVVJGQUNFX1dJ RFRIX1NISUZUIHwKKwkJIChpbnRlbF9idWZfaGVpZ2h0KGJ1ZikgLSAxKSA8PCBHRU43X1NVUkZB Q0VfSEVJR0hUX1NISUZUKTsKIAlzc1szXSA9IChidWYtPnN1cmZhY2VbMF0uc3RyaWRlIC0gMSkg PDwgR0VON19TVVJGQUNFX1BJVENIX1NISUZUOwogCXNzWzRdID0gMDsKLQlpZiAoSVNfVkFMTEVZ VklFVyhiYXRjaC0+ZGV2aWQpKQorCWlmIChJU19WQUxMRVlWSUVXKGliYi0+ZGV2aWQpKQogCQlz c1s1XSA9IFZMVl9NT0NTX0wzIDw8IDE2OwogCWVsc2UKIAkJc3NbNV0gPSAoSVZCX01PQ1NfTDMg fCBJVkJfTU9DU19QVEUpIDw8IDE2OwogCXNzWzZdID0gMDsKIAlzc1s3XSA9IDA7Ci0JaWYgKElT X0hBU1dFTEwoYmF0Y2gtPmRldmlkKSkKKwlpZiAoSVNfSEFTV0VMTChpYmItPmRldmlkKSkKIAkJ c3NbN10gfD0gSFNXX1NVUkZBQ0VfU1dJWlpMRShSRUQsIEdSRUVOLCBCTFVFLCBBTFBIQSk7CiAK LQlyZXQgPSBkcm1faW50ZWxfYm9fZW1pdF9yZWxvYyhiYXRjaC0+Ym8sCi0JCQkJICAgICAgaW50 ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9vZmZzZXQoYmF0Y2gsICZzc1sxXSksCi0JCQkJICAgICAg YnVmLT5ibywgMCwKLQkJCQkgICAgICByZWFkX2RvbWFpbiwgd3JpdGVfZG9tYWluKTsKLQlpZ3Rf YXNzZXJ0KHJldCA9PSAwKTsKLQotCXJldHVybiBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX29m ZnNldChiYXRjaCwgc3MpOworCXJldHVybiBpbnRlbF9iYl9wdHJfYWRkX3JldHVybl9wcmV2X29m ZnNldChpYmIsIDggKiBzaXplb2YoKnNzKSk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW43X2VtaXRf dmVydGV4X2VsZW1lbnRzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitnZW43X2Vt aXRfdmVydGV4X2VsZW1lbnRzKHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewotCU9VVF9CQVRDSChH RU40XzNEU1RBVEVfVkVSVEVYX0VMRU1FTlRTIHwKLQkJICAoKDIgKiAoMSArIDIpKSArIDEgLSAy KSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONF8zRFNUQVRFX1ZFUlRFWF9FTEVNRU5UUyB8CisJ CSAgICAgKCgyICogKDEgKyAyKSkgKyAxIC0gMikpOwogCi0JT1VUX0JBVENIKDAgPDwgR0VONl9W RTBfVkVSVEVYX0JVRkZFUl9JTkRFWF9TSElGVCB8IEdFTjZfVkUwX1ZBTElEIHwKLQkJICBTVVJG QUNFRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCA8PCBWRTBfRk9STUFUX1NISUZUIHwKLQkJICAw IDw8IFZFMF9PRkZTRVRfU0hJRlQpOworCWludGVsX2JiX291dChpYmIsIDAgPDwgR0VONl9WRTBf VkVSVEVYX0JVRkZFUl9JTkRFWF9TSElGVCB8IEdFTjZfVkUwX1ZBTElEIHwKKwkJICAgICBTVVJG QUNFRk9STUFUX1IzMkczMkIzMkEzMl9GTE9BVCA8PCBWRTBfRk9STUFUX1NISUZUIHwKKwkJICAg ICAwIDw8IFZFMF9PRkZTRVRfU0hJRlQpOwogCi0JT1VUX0JBVENIKEdFTjRfVkZDT01QT05FTlRf U1RPUkVfMCA8PCBWRTFfVkZDT01QT05FTlRfMF9TSElGVCB8Ci0JCSAgR0VONF9WRkNPTVBPTkVO VF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8xX1NISUZUIHwKLQkJICBHRU40X1ZGQ09NUE9O RU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzJfU0hJRlQgfAotCQkgIEdFTjRfVkZDT01Q T05FTlRfU1RPUkVfMCA8PCBWRTFfVkZDT01QT05FTlRfM19TSElGVCk7CisJaW50ZWxfYmJfb3V0 KGliYiwgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8wX1NISUZU IHwKKwkJICAgICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzFf U0hJRlQgfAorCQkgICAgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMCA8PCBWRTFfVkZDT01QT05F TlRfMl9TSElGVCB8CisJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNP TVBPTkVOVF8zX1NISUZUKTsKIAogCS8qIHgseSAqLwotCU9VVF9CQVRDSCgwIDw8IEdFTjZfVkUw X1ZFUlRFWF9CVUZGRVJfSU5ERVhfU0hJRlQgfCBHRU42X1ZFMF9WQUxJRCB8Ci0JCSAgU1VSRkFD RUZPUk1BVF9SMTZHMTZfU1NDQUxFRCA8PCBWRTBfRk9STUFUX1NISUZUIHwKLQkJICAwIDw8IFZF MF9PRkZTRVRfU0hJRlQpOyAvKiBvZmZzZXRzIHZiIGluIGJ5dGVzICovCi0JT1VUX0JBVENIKEdF TjRfVkZDT01QT05FTlRfU1RPUkVfU1JDIDw8IFZFMV9WRkNPTVBPTkVOVF8wX1NISUZUIHwKLQkJ ICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFX1NSQyA8PCBWRTFfVkZDT01QT05FTlRfMV9TSElGVCB8 Ci0JCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8yX1NISUZU IHwKLQkJICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzFfRkxUIDw8IFZFMV9WRkNPTVBPTkVOVF8z X1NISUZUKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwIDw8IEdFTjZfVkUwX1ZFUlRFWF9CVUZGRVJf SU5ERVhfU0hJRlQgfCBHRU42X1ZFMF9WQUxJRCB8CisJCSAgICAgU1VSRkFDRUZPUk1BVF9SMTZH MTZfU1NDQUxFRCA8PCBWRTBfRk9STUFUX1NISUZUIHwKKwkJICAgICAwIDw8IFZFMF9PRkZTRVRf U0hJRlQpOyAvKiBvZmZzZXRzIHZiIGluIGJ5dGVzICovCisJaW50ZWxfYmJfb3V0KGliYiwgR0VO NF9WRkNPTVBPTkVOVF9TVE9SRV9TUkMgPDwgVkUxX1ZGQ09NUE9ORU5UXzBfU0hJRlQgfAorCQkg ICAgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfU1JDIDw8IFZFMV9WRkNPTVBPTkVOVF8xX1NISUZU IHwKKwkJICAgICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzJf U0hJRlQgfAorCQkgICAgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMV9GTFQgPDwgVkUxX1ZGQ09N UE9ORU5UXzNfU0hJRlQpOwogCiAJLyogcyx0ICovCi0JT1VUX0JBVENIKDAgPDwgR0VONl9WRTBf VkVSVEVYX0JVRkZFUl9JTkRFWF9TSElGVCB8IEdFTjZfVkUwX1ZBTElEIHwKLQkJICBTVVJGQUNF Rk9STUFUX1IxNkcxNl9TU0NBTEVEIDw8IFZFMF9GT1JNQVRfU0hJRlQgfAotCQkgIDQgPDwgVkUw X09GRlNFVF9TSElGVCk7ICAvKiBvZmZzZXQgdmIgaW4gYnl0ZXMgKi8KLQlPVVRfQkFUQ0goR0VO NF9WRkNPTVBPTkVOVF9TVE9SRV9TUkMgPDwgVkUxX1ZGQ09NUE9ORU5UXzBfU0hJRlQgfAotCQkg IEdFTjRfVkZDT01QT05FTlRfU1RPUkVfU1JDIDw8IFZFMV9WRkNPTVBPTkVOVF8xX1NISUZUIHwK LQkJICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzJfU0hJRlQg fAotCQkgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMV9GTFQgPDwgVkUxX1ZGQ09NUE9ORU5UXzNf U0hJRlQpOworCWludGVsX2JiX291dChpYmIsIDAgPDwgR0VONl9WRTBfVkVSVEVYX0JVRkZFUl9J TkRFWF9TSElGVCB8IEdFTjZfVkUwX1ZBTElEIHwKKwkJICAgICBTVVJGQUNFRk9STUFUX1IxNkcx Nl9TU0NBTEVEIDw8IFZFMF9GT1JNQVRfU0hJRlQgfAorCQkgICAgIDQgPDwgVkUwX09GRlNFVF9T SElGVCk7ICAvKiBvZmZzZXQgdmIgaW4gYnl0ZXMgKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU40 X1ZGQ09NUE9ORU5UX1NUT1JFX1NSQyA8PCBWRTFfVkZDT01QT05FTlRfMF9TSElGVCB8CisJCSAg ICAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV9TUkMgPDwgVkUxX1ZGQ09NUE9ORU5UXzFfU0hJRlQg fAorCQkgICAgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMCA8PCBWRTFfVkZDT01QT05FTlRfMl9T SElGVCB8CisJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8xX0ZMVCA8PCBWRTFfVkZDT01Q T05FTlRfM19TSElGVCk7CiB9CiAKIHN0YXRpYyB1aW50MzJfdAotZ2VuN19jcmVhdGVfdmVydGV4 X2J1ZmZlcihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAorZ2VuN19jcmVhdGVfdmVy dGV4X2J1ZmZlcihzdHJ1Y3QgaW50ZWxfYmIgKmliYiwKIAkJCSAgdWludDMyX3Qgc3JjX3gsIHVp bnQzMl90IHNyY195LAogCQkJICB1aW50MzJfdCBkc3RfeCwgdWludDMyX3QgZHN0X3ksCiAJCQkg IHVpbnQzMl90IHdpZHRoLCB1aW50MzJfdCBoZWlnaHQpCiB7CiAJdWludDE2X3QgKnY7CiAKLQl2 ID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9hbGxvYyhiYXRjaCwgMTIgKiBzaXplb2YoKnYp LCA4KTsKKwl2ID0gaW50ZWxfYmJfcHRyX2FsaWduKGliYiwgOCk7CiAKIAl2WzBdID0gZHN0X3gg KyB3aWR0aDsKIAl2WzFdID0gZHN0X3kgKyBoZWlnaHQ7CkBAIC0xNzAsNjYgKzE2Niw2OCBAQCBn ZW43X2NyZWF0ZV92ZXJ0ZXhfYnVmZmVyKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gs CiAJdlsxMF0gPSBzcmNfeDsKIAl2WzExXSA9IHNyY195OwogCi0JcmV0dXJuIGludGVsX2JhdGNo YnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCB2KTsKKwlyZXR1cm4gaW50ZWxfYmJfcHRyX2Fk ZF9yZXR1cm5fcHJldl9vZmZzZXQoaWJiLCAxMiAqIHNpemVvZigqdikpOwogfQogCi1zdGF0aWMg dm9pZCBnZW43X2VtaXRfdmVydGV4X2J1ZmZlcihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJh dGNoLAorc3RhdGljIHZvaWQgZ2VuN19lbWl0X3ZlcnRleF9idWZmZXIoc3RydWN0IGludGVsX2Ji ICppYmIsCiAJCQkJICAgIGludCBzcmNfeCwgaW50IHNyY195LAogCQkJCSAgICBpbnQgZHN0X3gs IGludCBkc3RfeSwKIAkJCQkgICAgaW50IHdpZHRoLCBpbnQgaGVpZ2h0LAogCQkJCSAgICB1aW50 MzJfdCBvZmZzZXQpCiB7Ci0JT1VUX0JBVENIKEdFTjRfM0RTVEFURV9WRVJURVhfQlVGRkVSUyB8 ICg1IC0gMikpOwotCU9VVF9CQVRDSCgwIDw8IEdFTjZfVkIwX0JVRkZFUl9JTkRFWF9TSElGVCB8 Ci0JCSAgR0VONl9WQjBfVkVSVEVYREFUQSB8Ci0JCSAgR0VON19WQjBfQUREUkVTU19NT0RJRllf RU5BQkxFIHwKLQkJICA0ICogMiA8PCBWQjBfQlVGRkVSX1BJVENIX1NISUZUKTsKLQotCU9VVF9S RUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9WRVJURVgsIDAsIG9mZnNldCk7Ci0JT1VU X0JBVENIKH4wKTsKLQlPVVRfQkFUQ0goMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONF8zRFNU QVRFX1ZFUlRFWF9CVUZGRVJTIHwgKDUgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCA8PCBH RU42X1ZCMF9CVUZGRVJfSU5ERVhfU0hJRlQgfAorCQkgICAgIEdFTjZfVkIwX1ZFUlRFWERBVEEg fAorCQkgICAgIEdFTjdfVkIwX0FERFJFU1NfTU9ESUZZX0VOQUJMRSB8CisJCSAgICAgNCAqIDIg PDwgVkIwX0JVRkZFUl9QSVRDSF9TSElGVCk7CisKKwlpbnRlbF9iYl9lbWl0X3JlbG9jKGliYiwg aWJiLT5oYW5kbGUsIEk5MTVfR0VNX0RPTUFJTl9WRVJURVgsIDAsCisJCQkgICAgb2Zmc2V0LCBp YmItPmJhdGNoX29mZnNldCk7CisJaW50ZWxfYmJfb3V0KGliYiwgfjApOworCWludGVsX2JiX291 dChpYmIsIDApOwogfQogCiBzdGF0aWMgdWludDMyX3QKLWdlbjdfYmluZF9zdXJmYWNlcyhzdHJ1 Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkgICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAq c3JjLAotCQkgICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0KQorZ2VuN19iaW5kX3N1cmZhY2Vz KHN0cnVjdCBpbnRlbF9iYiAqaWJiLAorCQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfYnVmICpzcmMs CisJCSAgIGNvbnN0IHN0cnVjdCBpbnRlbF9idWYgKmRzdCkKIHsKLQl1aW50MzJfdCAqYmluZGlu Z190YWJsZTsKKwl1aW50MzJfdCAqYmluZGluZ190YWJsZSwgYmluZGluZ190YWJsZV9vZmZzZXQ7 CiAKLQliaW5kaW5nX3RhYmxlID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9hbGxvYyhiYXRj aCwgOCwgMzIpOworCWJpbmRpbmdfdGFibGUgPSBpbnRlbF9iYl9wdHJfYWxpZ24oaWJiLCAzMik7 CisJYmluZGluZ190YWJsZV9vZmZzZXQgPSBpbnRlbF9iYl9wdHJfYWRkX3JldHVybl9wcmV2X29m ZnNldChpYmIsIDgpOwogCi0JYmluZGluZ190YWJsZVswXSA9IGdlbjdfYmluZF9idWYoYmF0Y2gs IGRzdCwgMSk7Ci0JYmluZGluZ190YWJsZVsxXSA9IGdlbjdfYmluZF9idWYoYmF0Y2gsIHNyYywg MCk7CisJYmluZGluZ190YWJsZVswXSA9IGdlbjdfYmluZF9idWYoaWJiLCBkc3QsIDEpOworCWJp bmRpbmdfdGFibGVbMV0gPSBnZW43X2JpbmRfYnVmKGliYiwgc3JjLCAwKTsKIAotCXJldHVybiBp bnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX29mZnNldChiYXRjaCwgYmluZGluZ190YWJsZSk7CisJ cmV0dXJuIGJpbmRpbmdfdGFibGVfb2Zmc2V0OwogfQogCiBzdGF0aWMgdm9pZAotZ2VuN19lbWl0 X2JpbmRpbmdfdGFibGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCWNvbnN0 IHN0cnVjdCBpZ3RfYnVmICpzcmMsCi0JCQljb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0LAorZ2Vu N19lbWl0X2JpbmRpbmdfdGFibGUoc3RydWN0IGludGVsX2JiICppYmIsCisJCQljb25zdCBzdHJ1 Y3QgaW50ZWxfYnVmICpzcmMsCisJCQljb25zdCBzdHJ1Y3QgaW50ZWxfYnVmICpkc3QsCiAJCQl1 aW50MzJfdCBiaW5kX3N1cmZfb2ZmKQogewotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfQklORElO R19UQUJMRV9QT0lOVEVSU19QUyB8ICgyIC0gMikpOwotCU9VVF9CQVRDSChiaW5kX3N1cmZfb2Zm KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfQklORElOR19UQUJMRV9QT0lOVEVS U19QUyB8ICgyIC0gMikpOworCWludGVsX2JiX291dChpYmIsIGJpbmRfc3VyZl9vZmYpOwogfQog CiBzdGF0aWMgdm9pZAotZ2VuN19lbWl0X2RyYXdpbmdfcmVjdGFuZ2xlKHN0cnVjdCBpbnRlbF9i YXRjaGJ1ZmZlciAqYmF0Y2gsIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpkc3QpCitnZW43X2VtaXRf ZHJhd2luZ19yZWN0YW5nbGUoc3RydWN0IGludGVsX2JiICppYmIsIGNvbnN0IHN0cnVjdCBpbnRl bF9idWYgKmRzdCkKIHsKLQlPVVRfQkFUQ0goR0VONF8zRFNUQVRFX0RSQVdJTkdfUkVDVEFOR0xF IHwgKDQgLSAyKSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgoaWd0X2J1Zl9oZWlnaHQo ZHN0KSAtIDEpIDw8IDE2IHwgKGlndF9idWZfd2lkdGgoZHN0KSAtIDEpKTsKLQlPVVRfQkFUQ0go MCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONF8zRFNUQVRFX0RSQVdJTkdfUkVDVEFOR0xFIHwg KDQgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgKGlu dGVsX2J1Zl9oZWlnaHQoZHN0KSAtIDEpIDw8IDE2IHwgKGludGVsX2J1Zl93aWR0aChkc3QpIC0g MSkpOworCWludGVsX2JiX291dChpYmIsIDApOwogfQogCiBzdGF0aWMgdWludDMyX3QKLWdlbjdf Y3JlYXRlX2JsZW5kX3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitnZW43 X2NyZWF0ZV9ibGVuZF9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKIAlzdHJ1Y3QgZ2Vu Nl9ibGVuZF9zdGF0ZSAqYmxlbmQ7CiAKLQlibGVuZCA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRh dGFfYWxsb2MoYmF0Y2gsIHNpemVvZigqYmxlbmQpLCA2NCk7CisJYmxlbmQgPSBpbnRlbF9iYl9w dHJfYWxpZ24oaWJiLCA2NCk7CiAKIAlibGVuZC0+YmxlbmQwLmRlc3RfYmxlbmRfZmFjdG9yID0g R0VONl9CTEVOREZBQ1RPUl9aRVJPOwogCWJsZW5kLT5ibGVuZDAuc291cmNlX2JsZW5kX2ZhY3Rv ciA9IEdFTjZfQkxFTkRGQUNUT1JfT05FOwpAQCAtMjM3LDU0ICsyMzUsNjEgQEAgZ2VuN19jcmVh dGVfYmxlbmRfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKIAlibGVuZC0+ YmxlbmQxLnBvc3RfYmxlbmRfY2xhbXBfZW5hYmxlID0gMTsKIAlibGVuZC0+YmxlbmQxLnByZV9i bGVuZF9jbGFtcF9lbmFibGUgPSAxOwogCi0JcmV0dXJuIGludGVsX2JhdGNoYnVmZmVyX3N1YmRh dGFfb2Zmc2V0KGJhdGNoLCBibGVuZCk7CisJcmV0dXJuIGludGVsX2JiX3B0cl9hZGRfcmV0dXJu X3ByZXZfb2Zmc2V0KGliYiwgc2l6ZW9mKCpibGVuZCkpOwogfQogCiBzdGF0aWMgdm9pZAotZ2Vu N19lbWl0X3N0YXRlX2Jhc2VfYWRkcmVzcyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNo KQorZ2VuN19lbWl0X3N0YXRlX2Jhc2VfYWRkcmVzcyhzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsK LQlPVVRfQkFUQ0goR0VONF9TVEFURV9CQVNFX0FERFJFU1MgfCAoMTAgLSAyKSk7Ci0JT1VUX0JB VENIKDApOwotCU9VVF9SRUxPQyhiYXRjaC0+Ym8sIEk5MTVfR0VNX0RPTUFJTl9JTlNUUlVDVElP TiwgMCwgQkFTRV9BRERSRVNTX01PRElGWSk7Ci0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9H RU1fRE9NQUlOX0lOU1RSVUNUSU9OLCAwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQlPVVRfQkFU Q0goMCk7Ci0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9O LCAwLCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKLQotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0go MCB8IEJBU0VfQUREUkVTU19NT0RJRlkpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCB8 IEJBU0VfQUREUkVTU19NT0RJRlkpOworCWludGVsX2JiX291dChpYmIsIEdFTjRfU1RBVEVfQkFT RV9BRERSRVNTIHwgKDEwIC0gMikpOworCWludGVsX2JiX291dChpYmIsIDApOworCisJaW50ZWxf YmJfZW1pdF9yZWxvYyhpYmIsIGliYi0+aGFuZGxlLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJ T04sIDAsCisJCQkgICAgQkFTRV9BRERSRVNTX01PRElGWSwKKwkJCSAgICBpYmItPmJhdGNoX29m ZnNldCk7CisJaW50ZWxfYmJfZW1pdF9yZWxvYyhpYmIsIGliYi0+aGFuZGxlLCBJOTE1X0dFTV9E T01BSU5fSU5TVFJVQ1RJT04sIDAsCisJCQkgICAgQkFTRV9BRERSRVNTX01PRElGWSwKKwkJCSAg ICBpYmItPmJhdGNoX29mZnNldCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJf ZW1pdF9yZWxvYyhpYmIsIGliYi0+aGFuZGxlLCBJOTE1X0dFTV9ET01BSU5fSU5TVFJVQ1RJT04s IDAsCisJCQkgICAgQkFTRV9BRERSRVNTX01PRElGWSwKKwkJCSAgICBpYmItPmJhdGNoX29mZnNl dCk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwIHwgQkFT RV9BRERSRVNTX01PRElGWSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0 KGliYiwgMCB8IEJBU0VfQUREUkVTU19NT0RJRlkpOwogfQogCiBzdGF0aWMgdWludDMyX3QKLWdl bjdfY3JlYXRlX2NjX3ZpZXdwb3J0KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitn ZW43X2NyZWF0ZV9jY192aWV3cG9ydChzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKIAlzdHJ1Y3Qg Z2VuNF9jY192aWV3cG9ydCAqdnA7CiAKLQl2cCA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFf YWxsb2MoYmF0Y2gsIHNpemVvZigqdnApLCAzMik7CisJdnAgPSBpbnRlbF9iYl9wdHJfYWxpZ24o aWJiLCAzMik7CiAJdnAtPm1pbl9kZXB0aCA9IC0xLmUzNTsKIAl2cC0+bWF4X2RlcHRoID0gMS5l MzU7CiAKLQlyZXR1cm4gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9vZmZzZXQoYmF0Y2gsIHZw KTsKKwlyZXR1cm4gaW50ZWxfYmJfcHRyX2FkZF9yZXR1cm5fcHJldl9vZmZzZXQoaWJiLCBzaXpl b2YoKnZwKSk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW43X2VtaXRfY2Moc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3QgYmxlbmRfc3RhdGUsCitnZW43X2VtaXRfY2Moc3Ry dWN0IGludGVsX2JiICppYmIsIHVpbnQzMl90IGJsZW5kX3N0YXRlLAogCSAgICAgdWludDMyX3Qg Y2Nfdmlld3BvcnQpCiB7Ci0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9CTEVORF9TVEFURV9QT0lO VEVSUyB8ICgyIC0gMikpOwotCU9VVF9CQVRDSChibGVuZF9zdGF0ZSk7CisJaW50ZWxfYmJfb3V0 KGliYiwgR0VON18zRFNUQVRFX0JMRU5EX1NUQVRFX1BPSU5URVJTIHwgKDIgLSAyKSk7CisJaW50 ZWxfYmJfb3V0KGliYiwgYmxlbmRfc3RhdGUpOwogCi0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9W SUVXUE9SVF9TVEFURV9QT0lOVEVSU19DQyB8ICgyIC0gMikpOwotCU9VVF9CQVRDSChjY192aWV3 cG9ydCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX1ZJRVdQT1JUX1NUQVRFX1BP SU5URVJTX0NDIHwgKDIgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgY2Nfdmlld3BvcnQpOwog fQogCiBzdGF0aWMgdWludDMyX3QKLWdlbjdfY3JlYXRlX3NhbXBsZXIoc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCkKK2dlbjdfY3JlYXRlX3NhbXBsZXIoc3RydWN0IGludGVsX2JiICpp YmIpCiB7CiAJc3RydWN0IGdlbjdfc2FtcGxlcl9zdGF0ZSAqc3M7CiAKLQlzcyA9IGludGVsX2Jh dGNoYnVmZmVyX3N1YmRhdGFfYWxsb2MoYmF0Y2gsIHNpemVvZigqc3MpLCAzMik7CisJc3MgPSBp bnRlbF9iYl9wdHJfYWxpZ24oaWJiLCAzMik7CiAKIAlzcy0+c3MwLm1pbl9maWx0ZXIgPSBHRU40 X01BUEZJTFRFUl9ORUFSRVNUOwogCXNzLT5zczAubWFnX2ZpbHRlciA9IEdFTjRfTUFQRklMVEVS X05FQVJFU1Q7CkBAIC0yOTUsMjgzICszMDAsMjg0IEBAIGdlbjdfY3JlYXRlX3NhbXBsZXIoc3Ry dWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKIAogCXNzLT5zczMubm9uX25vcm1hbGl6ZWRf Y29vcmQgPSAxOwogCi0JcmV0dXJuIGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJh dGNoLCBzcyk7CisJcmV0dXJuIGludGVsX2JiX3B0cl9hZGRfcmV0dXJuX3ByZXZfb2Zmc2V0KGli Yiwgc2l6ZW9mKCpzcykpOwogfQogCiBzdGF0aWMgdm9pZAotZ2VuN19lbWl0X3NhbXBsZXIoc3Ry dWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3Qgc2FtcGxlcl9vZmYpCitnZW43 X2VtaXRfc2FtcGxlcihzdHJ1Y3QgaW50ZWxfYmIgKmliYiwgdWludDMyX3Qgc2FtcGxlcl9vZmYp CiB7Ci0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9TQU1QTEVSX1NUQVRFX1BPSU5URVJTX1BTIHwg KDIgLSAyKSk7Ci0JT1VUX0JBVENIKHNhbXBsZXJfb2ZmKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBH RU43XzNEU1RBVEVfU0FNUExFUl9TVEFURV9QT0lOVEVSU19QUyB8ICgyIC0gMikpOworCWludGVs X2JiX291dChpYmIsIHNhbXBsZXJfb2ZmKTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjdfZW1pdF9t dWx0aXNhbXBsZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorZ2VuN19lbWl0X211 bHRpc2FtcGxlKHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewotCU9VVF9CQVRDSChHRU42XzNEU1RB VEVfTVVMVElTQU1QTEUgfCAoNCAtIDIpKTsKLQlPVVRfQkFUQ0goR0VONl8zRFNUQVRFX01VTFRJ U0FNUExFX1BJWEVMX0xPQ0FUSU9OX0NFTlRFUiB8Ci0JCSAgR0VONl8zRFNUQVRFX01VTFRJU0FN UExFX05VTVNBTVBMRVNfMSk7IC8qIDEgc2FtcGxlL3BpeGVsICovCi0JT1VUX0JBVENIKDApOwot CU9VVF9CQVRDSCgwKTsKLQotCU9VVF9CQVRDSChHRU42XzNEU1RBVEVfU0FNUExFX01BU0sgfCAo MiAtIDIpKTsKLQlPVVRfQkFUQ0goMSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRF X01VTFRJU0FNUExFIHwgKDQgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRF X01VTFRJU0FNUExFX1BJWEVMX0xPQ0FUSU9OX0NFTlRFUiB8CisJCSAgICAgR0VONl8zRFNUQVRF X01VTFRJU0FNUExFX05VTVNBTVBMRVNfMSk7IC8qIDEgc2FtcGxlL3BpeGVsICovCisJaW50ZWxf YmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisKKwlpbnRlbF9iYl9vdXQo aWJiLCBHRU42XzNEU1RBVEVfU0FNUExFX01BU0sgfCAoMiAtIDIpKTsKKwlpbnRlbF9iYl9vdXQo aWJiLCAxKTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjdfZW1pdF91cmIoc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCkKK2dlbjdfZW1pdF91cmIoc3RydWN0IGludGVsX2JiICppYmIpCiB7 Ci0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9QVVNIX0NPTlNUQU5UX0FMTE9DX1BTIHwgKDIgLSAy KSk7Ci0JT1VUX0JBVENIKDgpOyAvKiBpbiAxS0JzICovCisJaW50ZWxfYmJfb3V0KGliYiwgR0VO N18zRFNUQVRFX1BVU0hfQ09OU1RBTlRfQUxMT0NfUFMgfCAoMiAtIDIpKTsKKwlpbnRlbF9iYl9v dXQoaWJiLCA4KTsgLyogaW4gMUtCcyAqLwogCiAJLyogbnVtIG9mIFZTIGVudHJpZXMgbXVzdCBi ZSBkaXZpc2libGUgYnkgOCBpZiBzaXplIDwgOSAqLwotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVf VVJCX1ZTIHwgKDIgLSAyKSk7Ci0JT1VUX0JBVENIKCg2NCA8PCBHRU43X1VSQl9FTlRSWV9OVU1C RVJfU0hJRlQpIHwKLQkJICAoMiAtIDEpIDw8IEdFTjdfVVJCX0VOVFJZX1NJWkVfU0hJRlQgfAot CQkgICgxIDw8IEdFTjdfVVJCX1NUQVJUSU5HX0FERFJFU1NfU0hJRlQpKTsKLQotCU9VVF9CQVRD SChHRU43XzNEU1RBVEVfVVJCX0hTIHwgKDIgLSAyKSk7Ci0JT1VUX0JBVENIKCgwIDw8IEdFTjdf VVJCX0VOVFJZX1NJWkVfU0hJRlQpIHwKLQkJICAoMiA8PCBHRU43X1VSQl9TVEFSVElOR19BRERS RVNTX1NISUZUKSk7Ci0KLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX1VSQl9EUyB8ICgyIC0gMikp OwotCU9VVF9CQVRDSCgoMCA8PCBHRU43X1VSQl9FTlRSWV9TSVpFX1NISUZUKSB8Ci0JCSAgKDIg PDwgR0VON19VUkJfU1RBUlRJTkdfQUREUkVTU19TSElGVCkpOwotCi0JT1VUX0JBVENIKEdFTjdf M0RTVEFURV9VUkJfR1MgfCAoMiAtIDIpKTsKLQlPVVRfQkFUQ0goKDAgPDwgR0VON19VUkJfRU5U UllfU0laRV9TSElGVCkgfAotCQkgICgxIDw8IEdFTjdfVVJCX1NUQVJUSU5HX0FERFJFU1NfU0hJ RlQpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfVVJCX1ZTIHwgKDIgLSAyKSk7 CisJaW50ZWxfYmJfb3V0KGliYiwgKDY0IDw8IEdFTjdfVVJCX0VOVFJZX05VTUJFUl9TSElGVCkg fAorCQkgICAgICgyIC0gMSkgPDwgR0VON19VUkJfRU5UUllfU0laRV9TSElGVCB8CisJCSAgICAg KDEgPDwgR0VON19VUkJfU1RBUlRJTkdfQUREUkVTU19TSElGVCkpOworCisJaW50ZWxfYmJfb3V0 KGliYiwgR0VON18zRFNUQVRFX1VSQl9IUyB8ICgyIC0gMikpOworCWludGVsX2JiX291dChpYmIs ICgwIDw8IEdFTjdfVVJCX0VOVFJZX1NJWkVfU0hJRlQpIHwKKwkJICAgICAoMiA8PCBHRU43X1VS Ql9TVEFSVElOR19BRERSRVNTX1NISUZUKSk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNE U1RBVEVfVVJCX0RTIHwgKDIgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgKDAgPDwgR0VON19V UkJfRU5UUllfU0laRV9TSElGVCkgfAorCQkgICAgICgyIDw8IEdFTjdfVVJCX1NUQVJUSU5HX0FE RFJFU1NfU0hJRlQpKTsKKworCWludGVsX2JiX291dChpYmIsIEdFTjdfM0RTVEFURV9VUkJfR1Mg fCAoMiAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAoMCA8PCBHRU43X1VSQl9FTlRSWV9TSVpF X1NISUZUKSB8CisJCSAgICAgKDEgPDwgR0VON19VUkJfU1RBUlRJTkdfQUREUkVTU19TSElGVCkp OwogfQogCiBzdGF0aWMgdm9pZAotZ2VuN19lbWl0X3ZzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZl ciAqYmF0Y2gpCitnZW43X2VtaXRfdnMoc3RydWN0IGludGVsX2JiICppYmIpCiB7Ci0JT1VUX0JB VENIKEdFTjZfM0RTVEFURV9WUyB8ICg2IC0gMikpOwotCU9VVF9CQVRDSCgwKTsgLyogbm8gVlMg a2VybmVsICovCi0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7 Ci0JT1VUX0JBVENIKDApOyAvKiBwYXNzLXRocm91Z2ggKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCBH RU42XzNEU1RBVEVfVlMgfCAoNiAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsgLyogbm8g VlMga2VybmVsICovCisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwg MCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7IC8qIHBh c3MtdGhyb3VnaCAqLwogfQogCiBzdGF0aWMgdm9pZAotZ2VuN19lbWl0X2hzKHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitnZW43X2VtaXRfaHMoc3RydWN0IGludGVsX2JiICppYmIp CiB7Ci0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9IUyB8ICg3IC0gMikpOwotCU9VVF9CQVRDSCgw KTsgLyogbm8gSFMga2VybmVsICovCi0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlP VVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsgLyogcGFzcy10aHJv dWdoICovCisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX0hTIHwgKDcgLSAyKSk7CisJ aW50ZWxfYmJfb3V0KGliYiwgMCk7IC8qIG5vIEhTIGtlcm5lbCAqLworCWludGVsX2JiX291dChp YmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOwor CWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOyAvKiBwYXNzLXRo cm91Z2ggKi8KIH0KIAogc3RhdGljIHZvaWQKLWdlbjdfZW1pdF90ZShzdHJ1Y3QgaW50ZWxfYmF0 Y2hidWZmZXIgKmJhdGNoKQorZ2VuN19lbWl0X3RlKHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewot CU9VVF9CQVRDSChHRU43XzNEU1RBVEVfVEUgfCAoNCAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0J T1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNE U1RBVEVfVEUgfCAoNCAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9v dXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIH0KIAogc3RhdGljIHZvaWQKLWdl bjdfZW1pdF9kcyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorZ2VuN19lbWl0X2Rz KHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfRFMgfCAo NiAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsK LQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOworCWludGVsX2JiX291dChpYmIsIEdFTjdf M0RTVEFURV9EUyB8ICg2IC0gMikpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2Ji X291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIs IDApOworCWludGVsX2JiX291dChpYmIsIDApOwogfQogCiBzdGF0aWMgdm9pZAotZ2VuN19lbWl0 X2dzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitnZW43X2VtaXRfZ3Moc3RydWN0 IGludGVsX2JiICppYmIpCiB7Ci0JT1VUX0JBVENIKEdFTjZfM0RTVEFURV9HUyB8ICg3IC0gMikp OwotCU9VVF9CQVRDSCgwKTsgLyogbm8gR1Mga2VybmVsICovCi0JT1VUX0JBVENIKDApOwotCU9V VF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgw KTsgLyogcGFzcy10aHJvdWdoICAqLworCWludGVsX2JiX291dChpYmIsIEdFTjZfM0RTVEFURV9H UyB8ICg3IC0gMikpOworCWludGVsX2JiX291dChpYmIsIDApOyAvKiBubyBHUyBrZXJuZWwgKi8K KwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCAwKTsgLyogcGFzcy10aHJvdWdoICAqLwogfQogCiBzdGF0aWMgdm9pZAotZ2VuN19lbWl0X3N0 cmVhbW91dChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorZ2VuN19lbWl0X3N0cmVh bW91dChzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX1NU UkVBTU9VVCB8ICgzIC0gMikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7CisJaW50 ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX1NUUkVBTU9VVCB8ICgzIC0gMikpOworCWludGVs X2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOwogfQogCiBzdGF0aWMgdm9p ZAotZ2VuN19lbWl0X3NmKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitnZW43X2Vt aXRfc2Yoc3RydWN0IGludGVsX2JiICppYmIpCiB7Ci0JT1VUX0JBVENIKEdFTjZfM0RTVEFURV9T RiB8ICg3IC0gMikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goR0VONl8zRFNUQVRFX1NG X0NVTExfTk9ORSk7Ci0JT1VUX0JBVENIKDIgPDwgR0VONl8zRFNUQVRFX1NGX1RSSUZBTl9QUk9W T0tFX1NISUZUKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgw KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU42XzNEU1RBVEVfU0YgfCAoNyAtIDIpKTsKKwlpbnRl bF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU42XzNEU1RBVEVfU0ZfQ1VM TF9OT05FKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAyIDw8IEdFTjZfM0RTVEFURV9TRl9UUklGQU5f UFJPVk9LRV9TSElGVCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGli YiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW43X2Vt aXRfc2JlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitnZW43X2VtaXRfc2JlKHN0 cnVjdCBpbnRlbF9iYiAqaWJiKQogewotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfU0JFIHwgKDE0 IC0gMikpOwotCU9VVF9CQVRDSCgxIDw8IEdFTjdfU0JFX05VTV9PVVRQVVRTX1NISUZUIHwKLQkJ ICAxIDw8IEdFTjdfU0JFX1VSQl9FTlRSWV9SRUFEX0xFTkdUSF9TSElGVCB8Ci0JCSAgMSA8PCBH RU43X1NCRV9VUkJfRU5UUllfUkVBRF9PRkZTRVRfU0hJRlQpOwotCU9VVF9CQVRDSCgwKTsKLQlP VVRfQkFUQ0goMCk7IC8qIGR3NCAqLwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0J T1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsgLyogZHc4ICovCi0JT1VUX0JBVENIKDApOwot CU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOyAvKiBkdzEyICov Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43 XzNEU1RBVEVfU0JFIHwgKDE0IC0gMikpOworCWludGVsX2JiX291dChpYmIsIDEgPDwgR0VON19T QkVfTlVNX09VVFBVVFNfU0hJRlQgfAorCQkgICAgIDEgPDwgR0VON19TQkVfVVJCX0VOVFJZX1JF QURfTEVOR1RIX1NISUZUIHwKKwkJICAgICAxIDw8IEdFTjdfU0JFX1VSQl9FTlRSWV9SRUFEX09G RlNFVF9TSElGVCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwg MCk7IC8qIGR3NCAqLworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIs IDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOyAvKiBk dzggKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsgLyogZHcxMiAqLwor CWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOwogfQogCiBzdGF0 aWMgdm9pZAotZ2VuN19lbWl0X3BzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVp bnQzMl90IGtlcm5lbF9vZmYpCitnZW43X2VtaXRfcHMoc3RydWN0IGludGVsX2JiICppYmIsIHVp bnQzMl90IGtlcm5lbF9vZmYpCiB7CiAJaW50IHRocmVhZHM7CiAKLQlpZiAoSVNfSEFTV0VMTChi YXRjaC0+ZGV2aWQpKQorCWlmIChJU19IQVNXRUxMKGliYi0+ZGV2aWQpKQogCQl0aHJlYWRzID0g NDAgPDwgSFNXX1BTX01BWF9USFJFQURTX1NISUZUIHwgMSA8PCBIU1dfUFNfU0FNUExFX01BU0tf U0hJRlQ7CiAJZWxzZQogCQl0aHJlYWRzID0gNDAgPDwgSVZCX1BTX01BWF9USFJFQURTX1NISUZU OwogCi0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9QUyB8ICg4IC0gMikpOwotCU9VVF9CQVRDSChr ZXJuZWxfb2ZmKTsKLQlPVVRfQkFUQ0goMSA8PCBHRU43X1BTX1NBTVBMRVJfQ09VTlRfU0hJRlQg fAotCQkgIDIgPDwgR0VON19QU19CSU5ESU5HX1RBQkxFX0VOVFJZX0NPVU5UX1NISUZUKTsKLQlP VVRfQkFUQ0goMCk7IC8qIHNjcmF0Y2ggYWRkcmVzcyAqLwotCU9VVF9CQVRDSCh0aHJlYWRzIHwK LQkJICBHRU43X1BTXzE2X0RJU1BBVENIX0VOQUJMRSB8Ci0JCSAgR0VON19QU19BVFRSSUJVVEVf RU5BQkxFKTsKLQlPVVRfQkFUQ0goNiA8PCBHRU43X1BTX0RJU1BBVENIX1NUQVJUX0dSRl9TSElG VF8wKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOworCWludGVsX2JiX291dChpYmIs IEdFTjdfM0RTVEFURV9QUyB8ICg4IC0gMikpOworCWludGVsX2JiX291dChpYmIsIGtlcm5lbF9v ZmYpOworCWludGVsX2JiX291dChpYmIsIDEgPDwgR0VON19QU19TQU1QTEVSX0NPVU5UX1NISUZU IHwKKwkJICAgICAyIDw8IEdFTjdfUFNfQklORElOR19UQUJMRV9FTlRSWV9DT1VOVF9TSElGVCk7 CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7IC8qIHNjcmF0Y2ggYWRkcmVzcyAqLworCWludGVsX2Ji X291dChpYmIsIHRocmVhZHMgfAorCQkgICAgIEdFTjdfUFNfMTZfRElTUEFUQ0hfRU5BQkxFIHwK KwkJICAgICBHRU43X1BTX0FUVFJJQlVURV9FTkFCTEUpOworCWludGVsX2JiX291dChpYmIsIDYg PDwgR0VON19QU19ESVNQQVRDSF9TVEFSVF9HUkZfU0hJRlRfMCk7CisJaW50ZWxfYmJfb3V0KGli YiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW43X2Vt aXRfY2xpcChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorZ2VuN19lbWl0X2NsaXAo c3RydWN0IGludGVsX2JiICppYmIpCiB7Ci0JT1VUX0JBVENIKEdFTjZfM0RTVEFURV9DTElQIHwg KDQgLSAyKSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsgLyogcGFzcy10aHJvdWdo ICovCi0JT1VUX0JBVENIKDApOworCWludGVsX2JiX291dChpYmIsIEdFTjZfM0RTVEFURV9DTElQ IHwgKDQgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwg MCk7IC8qIHBhc3MtdGhyb3VnaCAqLworCWludGVsX2JiX291dChpYmIsIDApOwogCi0JT1VUX0JB VENIKEdFTjdfM0RTVEFURV9WSUVXUE9SVF9TVEFURV9QT0lOVEVSU19TRl9DTCB8ICgyIC0gMikp OwotCU9VVF9CQVRDSCgwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfVklFV1BP UlRfU1RBVEVfUE9JTlRFUlNfU0ZfQ0wgfCAoMiAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAw KTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjdfZW1pdF93bShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoKQorZ2VuN19lbWl0X3dtKHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewotCU9VVF9C QVRDSChHRU42XzNEU1RBVEVfV00gfCAoMyAtIDIpKTsKLQlPVVRfQkFUQ0goR0VON19XTV9ESVNQ QVRDSF9FTkFCTEUgfAotCQlHRU43X1dNX1BFUlNQRUNUSVZFX1BJWEVMX0JBUllDRU5UUklDKTsK LQlPVVRfQkFUQ0goMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRFX1dNIHwgKDMg LSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VON19XTV9ESVNQQVRDSF9FTkFCTEUgfAorCQkg ICAgIEdFTjdfV01fUEVSU1BFQ1RJVkVfUElYRUxfQkFSWUNFTlRSSUMpOworCWludGVsX2JiX291 dChpYmIsIDApOwogfQogCiBzdGF0aWMgdm9pZAotZ2VuN19lbWl0X251bGxfZGVwdGhfYnVmZmVy KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitnZW43X2VtaXRfbnVsbF9kZXB0aF9i dWZmZXIoc3RydWN0IGludGVsX2JiICppYmIpCiB7Ci0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9E RVBUSF9CVUZGRVIgfCAoNyAtIDIpKTsKLQlPVVRfQkFUQ0goU1VSRkFDRV9OVUxMIDw8IEdFTjRf M0RTVEFURV9ERVBUSF9CVUZGRVJfVFlQRV9TSElGVCB8Ci0JCSAgR0VONF9ERVBUSEZPUk1BVF9E MzJfRkxPQVQgPDwgR0VONF8zRFNUQVRFX0RFUFRIX0JVRkZFUl9GT1JNQVRfU0hJRlQpOwotCU9V VF9CQVRDSCgwKTsgLyogZGlzYWJsZSBkZXB0aCwgc3RlbmNpbCBhbmQgaGl6ICovCi0JT1VUX0JB VENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwot Ci0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9DTEVBUl9QQVJBTVMgfCAoMyAtIDIpKTsKLQlPVVRf QkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOworCWludGVsX2JiX291dChpYmIsIEdFTjdfM0RTVEFU RV9ERVBUSF9CVUZGRVIgfCAoNyAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBTVVJGQUNFX05V TEwgPDwgR0VONF8zRFNUQVRFX0RFUFRIX0JVRkZFUl9UWVBFX1NISUZUIHwKKwkJICAgICBHRU40 X0RFUFRIRk9STUFUX0QzMl9GTE9BVCA8PCBHRU40XzNEU1RBVEVfREVQVEhfQlVGRkVSX0ZPUk1B VF9TSElGVCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7IC8qIGRpc2FibGUgZGVwdGgsIHN0ZW5j aWwgYW5kIGhpeiAqLworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIs IDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCisJ aW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX0NMRUFSX1BBUkFNUyB8ICgzIC0gMikpOwor CWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOwogfQogCiAjZGVm aW5lIEJBVENIX1NUQVRFX1NQTElUIDIwNDgKLXZvaWQgZ2VuN19yZW5kZXJfY29weWZ1bmMoc3Ry dWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCSAgZHJtX2ludGVsX2NvbnRleHQgKmNv bnRleHQsCi0JCQkgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpzcmMsIHVuc2lnbmVkIHNyY194LCB1 bnNpZ25lZCBzcmNfeSwKLQkJCSAgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwKLQkJ CSAgY29uc3Qgc3RydWN0IGlndF9idWYgKmRzdCwgdW5zaWduZWQgZHN0X3gsIHVuc2lnbmVkIGRz dF95KQordm9pZCBnZW43X3JlbmRlcl9jb3B5ZnVuYyhzdHJ1Y3QgaW50ZWxfYmIgKmliYiwKKwkJ CSAgdWludDMyX3QgY3R4LAorCQkJICBzdHJ1Y3QgaW50ZWxfYnVmICpzcmMsCisJCQkgIHVpbnQz Ml90IHNyY194LCB1aW50MzJfdCBzcmNfeSwKKwkJCSAgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90 IGhlaWdodCwKKwkJCSAgc3RydWN0IGludGVsX2J1ZiAqZHN0LAorCQkJICB1aW50MzJfdCBkc3Rf eCwgdWludDMyX3QgZHN0X3kpCiB7CiAJdWludDMyX3QgcHNfYmluZGluZ190YWJsZSwgcHNfc2Ft cGxlcl9vZmYsIHBzX2tlcm5lbF9vZmY7CiAJdWludDMyX3QgYmxlbmRfc3RhdGUsIGNjX3ZpZXdw b3J0OwogCXVpbnQzMl90IHZlcnRleF9idWZmZXI7Ci0JdWludDMyX3QgYmF0Y2hfZW5kOwogCiAJ aWd0X2Fzc2VydChzcmMtPmJwcCA9PSBkc3QtPmJwcCk7Ci0JaW50ZWxfYmF0Y2hidWZmZXJfZmx1 c2hfd2l0aF9jb250ZXh0KGJhdGNoLCBjb250ZXh0KTsKIAotCWJhdGNoLT5wdHIgPSAmYmF0Y2gt PmJ1ZmZlcltCQVRDSF9TVEFURV9TUExJVF07CisJaW50ZWxfYmJfZmx1c2hfcmVuZGVyX3dpdGhf Y29udGV4dChpYmIsIGN0eCk7CisKKwlpbnRlbF9iYl9hZGRfaW50ZWxfYnVmKGliYiwgZHN0LCB0 cnVlKTsKKwlpbnRlbF9iYl9hZGRfaW50ZWxfYnVmKGliYiwgc3JjLCBmYWxzZSk7CiAKKwlpbnRl bF9iYl9wdHJfc2V0KGliYiwgQkFUQ0hfU1RBVEVfU1BMSVQpOwogCi0JYmxlbmRfc3RhdGUgPSBn ZW43X2NyZWF0ZV9ibGVuZF9zdGF0ZShiYXRjaCk7Ci0JY2Nfdmlld3BvcnQgPSBnZW43X2NyZWF0 ZV9jY192aWV3cG9ydChiYXRjaCk7Ci0JcHNfc2FtcGxlcl9vZmYgPSBnZW43X2NyZWF0ZV9zYW1w bGVyKGJhdGNoKTsKLQlwc19rZXJuZWxfb2ZmID0gaW50ZWxfYmF0Y2hidWZmZXJfY29weV9kYXRh KGJhdGNoLCBwc19rZXJuZWwsCi0JCQkJCQkgICAgc2l6ZW9mKHBzX2tlcm5lbCksIDY0KTsKLQl2 ZXJ0ZXhfYnVmZmVyID0gZ2VuN19jcmVhdGVfdmVydGV4X2J1ZmZlcihiYXRjaCwKKwlibGVuZF9z dGF0ZSA9IGdlbjdfY3JlYXRlX2JsZW5kX3N0YXRlKGliYik7CisJY2Nfdmlld3BvcnQgPSBnZW43 X2NyZWF0ZV9jY192aWV3cG9ydChpYmIpOworCXBzX3NhbXBsZXJfb2ZmID0gZ2VuN19jcmVhdGVf c2FtcGxlcihpYmIpOworCXBzX2tlcm5lbF9vZmYgPSBpbnRlbF9iYl9jb3B5X2RhdGEoaWJiLCBw c19rZXJuZWwsCisJCQkJCSAgIHNpemVvZihwc19rZXJuZWwpLCA2NCk7CisJdmVydGV4X2J1ZmZl ciA9IGdlbjdfY3JlYXRlX3ZlcnRleF9idWZmZXIoaWJiLAogCQkJCQkJICBzcmNfeCwgc3JjX3ks CiAJCQkJCQkgIGRzdF94LCBkc3RfeSwKIAkJCQkJCSAgd2lkdGgsIGhlaWdodCk7Ci0JcHNfYmlu ZGluZ190YWJsZSA9IGdlbjdfYmluZF9zdXJmYWNlcyhiYXRjaCwgc3JjLCBkc3QpOwotCi0JaWd0 X2Fzc2VydChiYXRjaC0+cHRyIDwgJmJhdGNoLT5idWZmZXJbNDA5NV0pOwotCi0JYmF0Y2gtPnB0 ciA9IGJhdGNoLT5idWZmZXI7Ci0JT1VUX0JBVENIKEc0WF9QSVBFTElORV9TRUxFQ1QgfCBQSVBF TElORV9TRUxFQ1RfM0QpOwotCi0JZ2VuN19lbWl0X3N0YXRlX2Jhc2VfYWRkcmVzcyhiYXRjaCk7 Ci0JZ2VuN19lbWl0X211bHRpc2FtcGxlKGJhdGNoKTsKLQlnZW43X2VtaXRfdXJiKGJhdGNoKTsK LQlnZW43X2VtaXRfdnMoYmF0Y2gpOwotCWdlbjdfZW1pdF9ocyhiYXRjaCk7Ci0JZ2VuN19lbWl0 X3RlKGJhdGNoKTsKLQlnZW43X2VtaXRfZHMoYmF0Y2gpOwotCWdlbjdfZW1pdF9ncyhiYXRjaCk7 Ci0JZ2VuN19lbWl0X2NsaXAoYmF0Y2gpOwotCWdlbjdfZW1pdF9zZihiYXRjaCk7Ci0JZ2VuN19l bWl0X3dtKGJhdGNoKTsKLQlnZW43X2VtaXRfc3RyZWFtb3V0KGJhdGNoKTsKLQlnZW43X2VtaXRf bnVsbF9kZXB0aF9idWZmZXIoYmF0Y2gpOwotCWdlbjdfZW1pdF9jYyhiYXRjaCwgYmxlbmRfc3Rh dGUsIGNjX3ZpZXdwb3J0KTsKLQlnZW43X2VtaXRfc2FtcGxlcihiYXRjaCwgcHNfc2FtcGxlcl9v ZmYpOwotCWdlbjdfZW1pdF9zYmUoYmF0Y2gpOwotCWdlbjdfZW1pdF9wcyhiYXRjaCwgcHNfa2Vy bmVsX29mZik7Ci0JZ2VuN19lbWl0X3ZlcnRleF9lbGVtZW50cyhiYXRjaCk7Ci0JZ2VuN19lbWl0 X3ZlcnRleF9idWZmZXIoYmF0Y2gsIHNyY194LCBzcmNfeSwKKwlwc19iaW5kaW5nX3RhYmxlID0g Z2VuN19iaW5kX3N1cmZhY2VzKGliYiwgc3JjLCBkc3QpOworCisJaW50ZWxfYmJfcHRyX3NldChp YmIsIDApOworCisJaW50ZWxfYmJfb3V0KGliYiwgRzRYX1BJUEVMSU5FX1NFTEVDVCB8IFBJUEVM SU5FX1NFTEVDVF8zRCk7CisKKwlnZW43X2VtaXRfc3RhdGVfYmFzZV9hZGRyZXNzKGliYik7CisJ Z2VuN19lbWl0X211bHRpc2FtcGxlKGliYik7CisJZ2VuN19lbWl0X3VyYihpYmIpOworCWdlbjdf ZW1pdF92cyhpYmIpOworCWdlbjdfZW1pdF9ocyhpYmIpOworCWdlbjdfZW1pdF90ZShpYmIpOwor CWdlbjdfZW1pdF9kcyhpYmIpOworCWdlbjdfZW1pdF9ncyhpYmIpOworCWdlbjdfZW1pdF9jbGlw KGliYik7CisJZ2VuN19lbWl0X3NmKGliYik7CisJZ2VuN19lbWl0X3dtKGliYik7CisJZ2VuN19l bWl0X3N0cmVhbW91dChpYmIpOworCWdlbjdfZW1pdF9udWxsX2RlcHRoX2J1ZmZlcihpYmIpOwor CWdlbjdfZW1pdF9jYyhpYmIsIGJsZW5kX3N0YXRlLCBjY192aWV3cG9ydCk7CisJZ2VuN19lbWl0 X3NhbXBsZXIoaWJiLCBwc19zYW1wbGVyX29mZik7CisJZ2VuN19lbWl0X3NiZShpYmIpOworCWdl bjdfZW1pdF9wcyhpYmIsIHBzX2tlcm5lbF9vZmYpOworCWdlbjdfZW1pdF92ZXJ0ZXhfZWxlbWVu dHMoaWJiKTsKKwlnZW43X2VtaXRfdmVydGV4X2J1ZmZlcihpYmIsIHNyY194LCBzcmNfeSwKIAkJ CQlkc3RfeCwgZHN0X3ksIHdpZHRoLAogCQkJCWhlaWdodCwgdmVydGV4X2J1ZmZlcik7Ci0JZ2Vu N19lbWl0X2JpbmRpbmdfdGFibGUoYmF0Y2gsIHNyYywgZHN0LCBwc19iaW5kaW5nX3RhYmxlKTsK LQlnZW43X2VtaXRfZHJhd2luZ19yZWN0YW5nbGUoYmF0Y2gsIGRzdCk7Ci0KLQlPVVRfQkFUQ0go R0VONF8zRFBSSU1JVElWRSB8ICg3IC0gMikpOwotCU9VVF9CQVRDSChHRU40XzNEUFJJTUlUSVZF X1ZFUlRFWF9TRVFVRU5USUFMIHwgXzNEUFJJTV9SRUNUTElTVCk7Ci0JT1VUX0JBVENIKDMpOwot CU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMSk7ICAgLyogc2luZ2xlIGluc3RhbmNlICovCi0J T1VUX0JBVENIKDApOyAgIC8qIHN0YXJ0IGluc3RhbmNlIGxvY2F0aW9uICovCi0JT1VUX0JBVENI KDApOyAgIC8qIGluZGV4IGJ1ZmZlciBvZmZzZXQsIGlnbm9yZWQgKi8KLQotCU9VVF9CQVRDSChN SV9CQVRDSF9CVUZGRVJfRU5EKTsKLQotCWJhdGNoX2VuZCA9IGJhdGNoLT5wdHIgLSBiYXRjaC0+ YnVmZmVyOwotCWJhdGNoX2VuZCA9IEFMSUdOKGJhdGNoX2VuZCwgOCk7Ci0JaWd0X2Fzc2VydChi YXRjaF9lbmQgPCBCQVRDSF9TVEFURV9TUExJVCk7Ci0KLQlnZW43X3JlbmRlcl9mbHVzaChiYXRj aCwgY29udGV4dCwgYmF0Y2hfZW5kKTsKLQlpbnRlbF9iYXRjaGJ1ZmZlcl9yZXNldChiYXRjaCk7 CisJZ2VuN19lbWl0X2JpbmRpbmdfdGFibGUoaWJiLCBzcmMsIGRzdCwgcHNfYmluZGluZ190YWJs ZSk7CisJZ2VuN19lbWl0X2RyYXdpbmdfcmVjdGFuZ2xlKGliYiwgZHN0KTsKKworCWludGVsX2Ji X291dChpYmIsIEdFTjRfM0RQUklNSVRJVkUgfCAoNyAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCBHRU40XzNEUFJJTUlUSVZFX1ZFUlRFWF9TRVFVRU5USUFMIHwgXzNEUFJJTV9SRUNUTElTVCk7 CisJaW50ZWxfYmJfb3V0KGliYiwgMyk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxf YmJfb3V0KGliYiwgMSk7ICAgLyogc2luZ2xlIGluc3RhbmNlICovCisJaW50ZWxfYmJfb3V0KGli YiwgMCk7ICAgLyogc3RhcnQgaW5zdGFuY2UgbG9jYXRpb24gKi8KKwlpbnRlbF9iYl9vdXQoaWJi LCAwKTsgICAvKiBpbmRleCBidWZmZXIgb2Zmc2V0LCBpZ25vcmVkICovCisKKwlpbnRlbF9iYl9l bWl0X2JiZShpYmIpOworCWludGVsX2JiX2V4ZWNfd2l0aF9jb250ZXh0KGliYiwgaW50ZWxfYmJf b2Zmc2V0KGliYiksIGN0eCwKKwkJCQkgICBJOTE1X0VYRUNfREVGQVVMVCB8IEk5MTVfRVhFQ19O T19SRUxPQywKKwkJCQkgICBmYWxzZSk7CisJZHVtcF9iYXRjaChpYmIpOworCWludGVsX2JiX3Jl c2V0KGliYiwgZmFsc2UpOwogfQpkaWZmIC0tZ2l0IGEvbGliL3JlbmRlcmNvcHlfZ2VuOC5jIGIv bGliL3JlbmRlcmNvcHlfZ2VuOC5jCmluZGV4IDc1MDA1ZDBiLi45NWMzYzQ5NyAxMDA2NDQKLS0t IGEvbGliL3JlbmRlcmNvcHlfZ2VuOC5jCisrKyBiL2xpYi9yZW5kZXJjb3B5X2dlbjguYwpAQCAt MTQsNyArMTQsNyBAQAogI2luY2x1ZGUgPGk5MTVfZHJtLmg+CiAKICNpbmNsdWRlICJkcm10ZXN0 LmgiCi0jaW5jbHVkZSAiaW50ZWxfYnVmbWdyLmgiCisjaW5jbHVkZSAiaW50ZWxfYnVmb3BzLmgi CiAjaW5jbHVkZSAiaW50ZWxfYmF0Y2hidWZmZXIuaCIKICNpbmNsdWRlICJpbnRlbF9jaGlwc2V0 LmgiCiAjaW5jbHVkZSAiaW50ZWxfaW8uaCIKQEAgLTIzLDE3ICsyMywxMiBAQAogI2luY2x1ZGUg ImludGVsX3JlZy5oIgogI2luY2x1ZGUgImlndF9hdXguaCIKIAotI2luY2x1ZGUgImludGVsX2F1 Yi5oIgotCiAjZGVmaW5lIFZFUlRFWF9TSVpFICgzKjQpCiAKICNpZiBERUJVR19SRU5ERVJDUFkK LXN0YXRpYyB2b2lkIGR1bXBfYmF0Y2goc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkg ewotCWludCBmZCA9IG9wZW4oIi90bXAvaTk2NS1iYXRjaGJ1ZmZlcnMuZHVtcCIsIE9fV1JPTkxZ IHwgT19DUkVBVCwgIDA2NjYpOwotCWlmIChmZCAhPSAtMSkgewotCQlpZ3RfYXNzZXJ0X2VxKHdy aXRlKGZkLCBiYXRjaC0+YnVmZmVyLCA0MDk2KSwgNDA5Nik7Ci0JCWZkID0gY2xvc2UoZmQpOwot CX0KK3N0YXRpYyB2b2lkIGR1bXBfYmF0Y2goc3RydWN0IGludGVsX2JiICppYmIpCit7CisJaW50 ZWxfYmJfZHVtcChpYmIsICIvdG1wL2dlbjgtYmF0Y2hidWZmZXJzLmR1bXAiKTsKIH0KICNlbHNl CiAjZGVmaW5lIGR1bXBfYmF0Y2goeCkgZG8geyB9IHdoaWxlKDApCkBAIC03MCw4OSArNjUsMTgg QEAgc3RhdGljIGNvbnN0IHVpbnQzMl90IHBzX2tlcm5lbFtdWzRdID0gewogI2VuZGlmCiB9Owog Ci0vKiBBVUIgYW5ub3RhdGlvbiBzdXBwb3J0ICovCi0jZGVmaW5lIE1BWF9BTk5PVEFUSU9OUwkz Mwotc3RydWN0IGFubm90YXRpb25zX2NvbnRleHQgewotCWRybV9pbnRlbF9hdWJfYW5ub3RhdGlv biBhbm5vdGF0aW9uc1tNQVhfQU5OT1RBVElPTlNdOwotCWludCBpbmRleDsKLQl1aW50MzJfdCBv ZmZzZXQ7Ci19OwotCi1zdGF0aWMgdm9pZCBhbm5vdGF0aW9uX2luaXQoc3RydWN0IGFubm90YXRp b25zX2NvbnRleHQgKmF1YikKLXsKLQkvKiBhdWItPmFubm90YXRpb25zIGlzIGFuIGFycmF5IGtl ZXBpbmcgYSBsaXN0IG9mIGFubm90YXRpb25zIG9mIHRoZQotCSAqIGJhdGNoIGJ1ZmZlciBvcmRl cmVkIGJ5IG9mZnNldC4gYXViLT5hbm5vdGF0aW9uc1swXSBpcyB0aHVzIGxlZnQKLQkgKiBmb3Ig dGhlIGNvbW1hbmQgc3RyZWFtIGFuZCB3aWxsIGJlIGZpbGxlZCBqdXN0IGJlZm9yZSBleGVjdXRp bmcKLQkgKiB0aGUgYmF0Y2ggYnVmZmVyIHdpdGggYW5ub3RhdGlvbnNfYWRkX2JhdGNoKCkgKi8K LQlhdWItPmluZGV4ID0gMTsKLX0KLQotc3RhdGljIHZvaWQgYWRkX2Fubm90YXRpb24oZHJtX2lu dGVsX2F1Yl9hbm5vdGF0aW9uICphLAotCQkJICAgdWludDMyX3QgdHlwZSwgdWludDMyX3Qgc3Vi dHlwZSwKLQkJCSAgIHVpbnQzMl90IGVuZGluZ19vZmZzZXQpCi17Ci0JYS0+dHlwZSA9IHR5cGU7 Ci0JYS0+c3VidHlwZSA9IHN1YnR5cGU7Ci0JYS0+ZW5kaW5nX29mZnNldCA9IGVuZGluZ19vZmZz ZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGFubm90YXRpb25fYWRkX2JhdGNoKHN0cnVjdCBhbm5vdGF0 aW9uc19jb250ZXh0ICphdWIsIHNpemVfdCBzaXplKQotewotCWFkZF9hbm5vdGF0aW9uKCZhdWIt PmFubm90YXRpb25zWzBdLCBBVUJfVFJBQ0VfVFlQRV9CQVRDSCwgMCwgc2l6ZSk7Ci19Ci0KLXN0 YXRpYyB2b2lkIGFubm90YXRpb25fYWRkX3N0YXRlKHN0cnVjdCBhbm5vdGF0aW9uc19jb250ZXh0 ICphdWIsCi0JCQkJIHVpbnQzMl90IHN0YXRlX3R5cGUsCi0JCQkJIHVpbnQzMl90IHN0YXJ0X29m ZnNldCwKLQkJCQkgc2l6ZV90ICAgc2l6ZSkKLXsKLQlpZ3RfYXNzZXJ0KGF1Yi0+aW5kZXggPCBN QVhfQU5OT1RBVElPTlMpOwotCi0JYWRkX2Fubm90YXRpb24oJmF1Yi0+YW5ub3RhdGlvbnNbYXVi LT5pbmRleCsrXSwKLQkJICAgICAgIEFVQl9UUkFDRV9UWVBFX05PVFlQRSwgMCwKLQkJICAgICAg IHN0YXJ0X29mZnNldCk7Ci0JYWRkX2Fubm90YXRpb24oJmF1Yi0+YW5ub3RhdGlvbnNbYXViLT5p bmRleCsrXSwKLQkJICAgICAgIEFVQl9UUkFDRV9UWVBFKHN0YXRlX3R5cGUpLAotCQkgICAgICAg QVVCX1RSQUNFX1NVQlRZUEUoc3RhdGVfdHlwZSksCi0JCSAgICAgICBzdGFydF9vZmZzZXQgKyBz aXplKTsKLX0KLQotc3RhdGljIHZvaWQgYW5ub3RhdGlvbl9mbHVzaChzdHJ1Y3QgYW5ub3RhdGlv bnNfY29udGV4dCAqYXViLAotCQkJICAgICBzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNo KQotewotCWlmICghaWd0X2F1Yl9kdW1wX2VuYWJsZWQoKSkKLQkJcmV0dXJuOwotCi0JZHJtX2lu dGVsX2J1Zm1ncl9nZW1fc2V0X2F1Yl9hbm5vdGF0aW9ucyhiYXRjaC0+Ym8sCi0JCQkJCQkgYXVi LT5hbm5vdGF0aW9ucywKLQkJCQkJCSBhdWItPmluZGV4KTsKLX0KLQotc3RhdGljIHZvaWQKLWdl bjZfcmVuZGVyX2ZsdXNoKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCSAgZHJt X2ludGVsX2NvbnRleHQgKmNvbnRleHQsIHVpbnQzMl90IGJhdGNoX2VuZCkKLXsKLQlpZ3RfYXNz ZXJ0X2VxKGRybV9pbnRlbF9ib19zdWJkYXRhKGJhdGNoLT5ibywKLQkJCQkJICAgMCwgNDA5Niwg YmF0Y2gtPmJ1ZmZlciksCi0JCSAgICAgIDApOwotCWlndF9hc3NlcnRfZXEoZHJtX2ludGVsX2dl bV9ib19jb250ZXh0X2V4ZWMoYmF0Y2gtPmJvLCBjb250ZXh0LAotCQkJCQkJICAgIGJhdGNoX2Vu ZCwgMCksCi0JCSAgICAgIDApOwotfQotCiAvKiBNb3N0bHkgY29weStwYXN0ZSBmcm9tIGdlbjYs IGV4Y2VwdCBoZWlnaHQsIHdpZHRoLCBwaXRjaCBtb3ZlZCAqLwogc3RhdGljIHVpbnQzMl90Ci1n ZW44X2JpbmRfYnVmKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JICAgICAgc3Ry dWN0IGFubm90YXRpb25zX2NvbnRleHQgKmF1YiwKLQkgICAgICBjb25zdCBzdHJ1Y3QgaWd0X2J1 ZiAqYnVmLCBpbnQgaXNfZHN0KQorZ2VuOF9iaW5kX2J1ZihzdHJ1Y3QgaW50ZWxfYmIgKmliYiwK KwkgICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfYnVmICpidWYsIGludCBpc19kc3QpCiB7CiAJc3Ry dWN0IGdlbjhfc3VyZmFjZV9zdGF0ZSAqc3M7Ci0JdWludDMyX3Qgd3JpdGVfZG9tYWluLCByZWFk X2RvbWFpbiwgb2Zmc2V0OwotCWludCByZXQ7CisJdWludDMyX3Qgd3JpdGVfZG9tYWluLCByZWFk X2RvbWFpbjsKKwl1aW50NjRfdCBhZGRyZXNzOwogCiAJaWd0X2Fzc2VydF9sdGUoYnVmLT5zdXJm YWNlWzBdLnN0cmlkZSwgMjU2KjEwMjQpOwotCWlndF9hc3NlcnRfbHRlKGlndF9idWZfd2lkdGgo YnVmKSwgMTYzODQpOwotCWlndF9hc3NlcnRfbHRlKGlndF9idWZfaGVpZ2h0KGJ1ZiksIDE2Mzg0 KTsKKwlpZ3RfYXNzZXJ0X2x0ZShpbnRlbF9idWZfd2lkdGgoYnVmKSwgMTYzODQpOworCWlndF9h c3NlcnRfbHRlKGludGVsX2J1Zl9oZWlnaHQoYnVmKSwgMTYzODQpOwogCiAJaWYgKGlzX2RzdCkg ewogCQl3cml0ZV9kb21haW4gPSByZWFkX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9SRU5ERVI7 CkBAIC0xNjEsOSArODUsNyBAQCBnZW44X2JpbmRfYnVmKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZl ciAqYmF0Y2gsCiAJCXJlYWRfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVI7CiAJfQog Ci0Jc3MgPSBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX2FsbG9jKGJhdGNoLCBzaXplb2YoKnNz KSwgNjQpOwotCW9mZnNldCA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNo LCBzcyk7Ci0JYW5ub3RhdGlvbl9hZGRfc3RhdGUoYXViLCBBVUJfVFJBQ0VfU1VSRkFDRV9TVEFU RSwgb2Zmc2V0LCBzaXplb2YoKnNzKSk7CisJc3MgPSBpbnRlbF9iYl9wdHJfYWxpZ24oaWJiLCA2 NCk7CiAKIAlzcy0+c3MwLnN1cmZhY2VfdHlwZSA9IFNVUkZBQ0VfMkQ7CiAJc3dpdGNoIChidWYt PmJwcCkgewpAQCAtMTgxLDIzICsxMDMsMjEgQEAgZ2VuOF9iaW5kX2J1ZihzdHJ1Y3QgaW50ZWxf YmF0Y2hidWZmZXIgKmJhdGNoLAogCWVsc2UgaWYgKGJ1Zi0+dGlsaW5nID09IEk5MTVfVElMSU5H X1kpCiAJCXNzLT5zczAudGlsZWRfbW9kZSA9IDM7CiAKLQlpZiAoSVNfQ0hFUlJZVklFVyhiYXRj aC0+ZGV2aWQpKQorCWlmIChJU19DSEVSUllWSUVXKGliYi0+ZGV2aWQpKQogCQlzcy0+c3MxLm1l bW9yeV9vYmplY3RfY29udHJvbCA9IENIVl9NT0NTX1dCIHwgQ0hWX01PQ1NfTDM7CiAJZWxzZQog CQlzcy0+c3MxLm1lbW9yeV9vYmplY3RfY29udHJvbCA9IEJEV19NT0NTX1BURSB8CiAJCQlCRFdf TU9DU19UQ19MM19QVEUgfCBCRFdfTU9DU19BR0UoMCk7CiAKLQlzcy0+c3M4LmJhc2VfYWRkciA9 IGJ1Zi0+Ym8tPm9mZnNldDY0OwotCXNzLT5zczkuYmFzZV9hZGRyX2hpID0gYnVmLT5iby0+b2Zm c2V0NjQgPj4gMzI7Ci0KLQlyZXQgPSBkcm1faW50ZWxfYm9fZW1pdF9yZWxvYyhiYXRjaC0+Ym8s Ci0JCQkJICAgICAgaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9vZmZzZXQoYmF0Y2gsICZzcy0+ c3M4KSwKLQkJCQkgICAgICBidWYtPmJvLCAwLAotCQkJCSAgICAgIHJlYWRfZG9tYWluLCB3cml0 ZV9kb21haW4pOwotCWlndF9hc3NlcnQocmV0ID09IDApOworCWFkZHJlc3MgPSBpbnRlbF9iYl9v ZmZzZXRfcmVsb2MoaWJiLCBidWYtPmhhbmRsZSwKKwkJCQkJcmVhZF9kb21haW4sIHdyaXRlX2Rv bWFpbiwKKwkJCQkJaW50ZWxfYmJfb2Zmc2V0KGliYikgKyA0ICogOCwKKwkJCQkJYnVmLT5hZGRy Lm9mZnNldCk7CisJc3MtPnNzOC5iYXNlX2FkZHIgPSBhZGRyZXNzOworCXNzLT5zczkuYmFzZV9h ZGRyX2hpID0gYWRkcmVzcyA+PiAzMjsKIAotCXNzLT5zczIuaGVpZ2h0ID0gaWd0X2J1Zl9oZWln aHQoYnVmKSAtIDE7Ci0Jc3MtPnNzMi53aWR0aCAgPSBpZ3RfYnVmX3dpZHRoKGJ1ZikgLSAxOwor CXNzLT5zczIuaGVpZ2h0ID0gaW50ZWxfYnVmX2hlaWdodChidWYpIC0gMTsKKwlzcy0+c3MyLndp ZHRoICA9IGludGVsX2J1Zl93aWR0aChidWYpIC0gMTsKIAlzcy0+c3MzLnBpdGNoICA9IGJ1Zi0+ c3VyZmFjZVswXS5zdHJpZGUgLSAxOwogCiAJc3MtPnNzNy5zaGFkZXJfY2hhbmVsX3NlbGVjdF9y ID0gNDsKQEAgLTIwNSwzOSArMTI1LDMyIEBAIGdlbjhfYmluZF9idWYoc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCwKIAlzcy0+c3M3LnNoYWRlcl9jaGFuZWxfc2VsZWN0X2IgPSA2Owog CXNzLT5zczcuc2hhZGVyX2NoYW5lbF9zZWxlY3RfYSA9IDc7CiAKLQlyZXR1cm4gb2Zmc2V0Owor CXJldHVybiBpbnRlbF9iYl9wdHJfYWRkX3JldHVybl9wcmV2X29mZnNldChpYmIsIHNpemVvZigq c3MpKTsKIH0KIAogc3RhdGljIHVpbnQzMl90Ci1nZW44X2JpbmRfc3VyZmFjZXMoc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJICAgc3RydWN0IGFubm90YXRpb25zX2NvbnRleHQg KmF1YiwKLQkJICAgY29uc3Qgc3RydWN0IGlndF9idWYgKnNyYywKLQkJICAgY29uc3Qgc3RydWN0 IGlndF9idWYgKmRzdCkKK2dlbjhfYmluZF9zdXJmYWNlcyhzdHJ1Y3QgaW50ZWxfYmIgKmliYiwK KwkJICAgY29uc3Qgc3RydWN0IGludGVsX2J1ZiAqc3JjLAorCQkgICBjb25zdCBzdHJ1Y3QgaW50 ZWxfYnVmICpkc3QpCiB7Ci0JdWludDMyX3QgKmJpbmRpbmdfdGFibGUsIG9mZnNldDsKKwl1aW50 MzJfdCAqYmluZGluZ190YWJsZSwgYmluZGluZ190YWJsZV9vZmZzZXQ7CiAKLQliaW5kaW5nX3Rh YmxlID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9hbGxvYyhiYXRjaCwgOCwgMzIpOwotCW9m ZnNldCA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCBiaW5kaW5nX3Rh YmxlKTsKLQlhbm5vdGF0aW9uX2FkZF9zdGF0ZShhdWIsIEFVQl9UUkFDRV9CSU5ESU5HX1RBQkxF LCBvZmZzZXQsIDgpOworCWJpbmRpbmdfdGFibGUgPSBpbnRlbF9iYl9wdHJfYWxpZ24oaWJiLCAz Mik7CisJYmluZGluZ190YWJsZV9vZmZzZXQgPSBpbnRlbF9iYl9wdHJfYWRkX3JldHVybl9wcmV2 X29mZnNldChpYmIsIDgpOwogCi0JYmluZGluZ190YWJsZVswXSA9IGdlbjhfYmluZF9idWYoYmF0 Y2gsIGF1YiwgZHN0LCAxKTsKLQliaW5kaW5nX3RhYmxlWzFdID0gZ2VuOF9iaW5kX2J1ZihiYXRj aCwgYXViLCBzcmMsIDApOworCWJpbmRpbmdfdGFibGVbMF0gPSBnZW44X2JpbmRfYnVmKGliYiwg ZHN0LCAxKTsKKwliaW5kaW5nX3RhYmxlWzFdID0gZ2VuOF9iaW5kX2J1ZihpYmIsIHNyYywgMCk7 CiAKLQlyZXR1cm4gb2Zmc2V0OworCXJldHVybiBiaW5kaW5nX3RhYmxlX29mZnNldDsKIH0KIAog LyogTW9zdGx5IGNvcHkrcGFzdGUgZnJvbSBnZW42LCBleGNlcHQgd3JhcCBtb2RlcyBtb3ZlZCAq Lwogc3RhdGljIHVpbnQzMl90Ci1nZW44X2NyZWF0ZV9zYW1wbGVyKHN0cnVjdCBpbnRlbF9iYXRj aGJ1ZmZlciAqYmF0Y2gsCi0JCSAgICBzdHJ1Y3QgYW5ub3RhdGlvbnNfY29udGV4dCAqYXViKQor Z2VuOF9jcmVhdGVfc2FtcGxlcihzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKIAlzdHJ1Y3QgZ2Vu OF9zYW1wbGVyX3N0YXRlICpzczsKLQl1aW50MzJfdCBvZmZzZXQ7CiAKLQlzcyA9IGludGVsX2Jh dGNoYnVmZmVyX3N1YmRhdGFfYWxsb2MoYmF0Y2gsIHNpemVvZigqc3MpLCA2NCk7Ci0Jb2Zmc2V0 ID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9vZmZzZXQoYmF0Y2gsIHNzKTsKLQlhbm5vdGF0 aW9uX2FkZF9zdGF0ZShhdWIsIEFVQl9UUkFDRV9TQU1QTEVSX1NUQVRFLAotCQkJICAgICBvZmZz ZXQsIHNpemVvZigqc3MpKTsKKwlzcyA9IGludGVsX2JiX3B0cl9hbGlnbihpYmIsIDY0KTsKIAog CXNzLT5zczAubWluX2ZpbHRlciA9IEdFTjRfTUFQRklMVEVSX05FQVJFU1Q7CiAJc3MtPnNzMC5t YWdfZmlsdGVyID0gR0VONF9NQVBGSUxURVJfTkVBUkVTVDsKQEAgLTI0OSwyMSArMTYyLDE1IEBA IGdlbjhfY3JlYXRlX3NhbXBsZXIoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKIAkg KiBzYW1wbGVyIGZldGNoLCBidXQgY291bGRuJ3QgbWFrZSBpdCB3b3JrLiAqLwogCXNzLT5zczMu bm9uX25vcm1hbGl6ZWRfY29vcmQgPSAwOwogCi0JcmV0dXJuIG9mZnNldDsKKwlyZXR1cm4gaW50 ZWxfYmJfcHRyX2FkZF9yZXR1cm5fcHJldl9vZmZzZXQoaWJiLCBzaXplb2YoKnNzKSk7CiB9CiAK IHN0YXRpYyB1aW50MzJfdAotZ2VuOF9maWxsX3BzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gsCi0JICAgICBzdHJ1Y3QgYW5ub3RhdGlvbnNfY29udGV4dCAqYXViLAorZ2VuOF9maWxs X3BzKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAogCSAgICAgY29uc3QgdWludDMyX3Qga2VybmVsW11b NF0sCiAJICAgICBzaXplX3Qgc2l6ZSkKIHsKLQl1aW50MzJfdCBvZmZzZXQ7Ci0KLQlvZmZzZXQg PSBpbnRlbF9iYXRjaGJ1ZmZlcl9jb3B5X2RhdGEoYmF0Y2gsIGtlcm5lbCwgc2l6ZSwgNjQpOwot CWFubm90YXRpb25fYWRkX3N0YXRlKGF1YiwgQVVCX1RSQUNFX0tFUk5FTF9JTlNUUlVDVElPTlMs IG9mZnNldCwgc2l6ZSk7Ci0KLQlyZXR1cm4gb2Zmc2V0OworCXJldHVybiBpbnRlbF9iYl9jb3B5 X2RhdGEoaWJiLCBrZXJuZWwsIHNpemUsIDY0KTsKIH0KIAogLyoKQEAgLTI3NywzNCArMTg0LDI5 IEBAIGdlbjhfZmlsbF9wcyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAogICogc2Vl IGdlbjZfZW1pdF92ZXJ0ZXhfZWxlbWVudHMKICAqLwogc3RhdGljIHVpbnQzMl90Ci1nZW43X2Zp bGxfdmVydGV4X2J1ZmZlcl9kYXRhKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0J CQkgICAgIHN0cnVjdCBhbm5vdGF0aW9uc19jb250ZXh0ICphdWIsCi0JCQkgICAgIGNvbnN0IHN0 cnVjdCBpZ3RfYnVmICpzcmMsCitnZW43X2ZpbGxfdmVydGV4X2J1ZmZlcl9kYXRhKHN0cnVjdCBp bnRlbF9iYiAqaWJiLAorCQkJICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfYnVmICpzcmMsCiAJCQkg ICAgIHVpbnQzMl90IHNyY194LCB1aW50MzJfdCBzcmNfeSwKIAkJCSAgICAgdWludDMyX3QgZHN0 X3gsIHVpbnQzMl90IGRzdF95LAogCQkJICAgICB1aW50MzJfdCB3aWR0aCwgdWludDMyX3QgaGVp Z2h0KQogewotCXZvaWQgKnN0YXJ0OwogCXVpbnQzMl90IG9mZnNldDsKIAotCWludGVsX2JhdGNo YnVmZmVyX2FsaWduKGJhdGNoLCA4KTsKLQlzdGFydCA9IGJhdGNoLT5wdHI7CisJaW50ZWxfYmJf cHRyX2FsaWduKGliYiwgOCk7CisJb2Zmc2V0ID0gaW50ZWxfYmJfb2Zmc2V0KGliYik7CiAKLQll bWl0X3ZlcnRleF8ycyhiYXRjaCwgZHN0X3ggKyB3aWR0aCwgZHN0X3kgKyBoZWlnaHQpOwotCWVt aXRfdmVydGV4X25vcm1hbGl6ZWQoYmF0Y2gsIHNyY194ICsgd2lkdGgsIGlndF9idWZfd2lkdGgo c3JjKSk7Ci0JZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChiYXRjaCwgc3JjX3kgKyBoZWlnaHQsIGln dF9idWZfaGVpZ2h0KHNyYykpOworCWVtaXRfdmVydGV4XzJzKGliYiwgZHN0X3ggKyB3aWR0aCwg ZHN0X3kgKyBoZWlnaHQpOworCWVtaXRfdmVydGV4X25vcm1hbGl6ZWQoaWJiLCBzcmNfeCArIHdp ZHRoLCBpbnRlbF9idWZfd2lkdGgoc3JjKSk7CisJZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChpYmIs IHNyY195ICsgaGVpZ2h0LCBpbnRlbF9idWZfaGVpZ2h0KHNyYykpOwogCi0JZW1pdF92ZXJ0ZXhf MnMoYmF0Y2gsIGRzdF94LCBkc3RfeSArIGhlaWdodCk7Ci0JZW1pdF92ZXJ0ZXhfbm9ybWFsaXpl ZChiYXRjaCwgc3JjX3gsIGlndF9idWZfd2lkdGgoc3JjKSk7Ci0JZW1pdF92ZXJ0ZXhfbm9ybWFs aXplZChiYXRjaCwgc3JjX3kgKyBoZWlnaHQsIGlndF9idWZfaGVpZ2h0KHNyYykpOworCWVtaXRf dmVydGV4XzJzKGliYiwgZHN0X3gsIGRzdF95ICsgaGVpZ2h0KTsKKwllbWl0X3ZlcnRleF9ub3Jt YWxpemVkKGliYiwgc3JjX3gsIGludGVsX2J1Zl93aWR0aChzcmMpKTsKKwllbWl0X3ZlcnRleF9u b3JtYWxpemVkKGliYiwgc3JjX3kgKyBoZWlnaHQsIGludGVsX2J1Zl9oZWlnaHQoc3JjKSk7CiAK LQllbWl0X3ZlcnRleF8ycyhiYXRjaCwgZHN0X3gsIGRzdF95KTsKLQllbWl0X3ZlcnRleF9ub3Jt YWxpemVkKGJhdGNoLCBzcmNfeCwgaWd0X2J1Zl93aWR0aChzcmMpKTsKLQllbWl0X3ZlcnRleF9u b3JtYWxpemVkKGJhdGNoLCBzcmNfeSwgaWd0X2J1Zl9oZWlnaHQoc3JjKSk7CisJZW1pdF92ZXJ0 ZXhfMnMoaWJiLCBkc3RfeCwgZHN0X3kpOworCWVtaXRfdmVydGV4X25vcm1hbGl6ZWQoaWJiLCBz cmNfeCwgaW50ZWxfYnVmX3dpZHRoKHNyYykpOworCWVtaXRfdmVydGV4X25vcm1hbGl6ZWQoaWJi LCBzcmNfeSwgaW50ZWxfYnVmX2hlaWdodChzcmMpKTsKIAotCW9mZnNldCA9IGludGVsX2JhdGNo YnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCBzdGFydCk7Ci0JYW5ub3RhdGlvbl9hZGRfc3Rh dGUoYXViLCBBVUJfVFJBQ0VfVkVSVEVYX0JVRkZFUiwKLQkJCSAgICAgb2Zmc2V0LCAzICogVkVS VEVYX1NJWkUpOwogCXJldHVybiBvZmZzZXQ7CiB9CiAKQEAgLTMxOCwyNSArMjIwLDI1IEBAIGdl bjdfZmlsbF92ZXJ0ZXhfYnVmZmVyX2RhdGEoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRj aCwKICAqIHBhY2tlZC4KICAqLwogc3RhdGljIHZvaWQKLWdlbjZfZW1pdF92ZXJ0ZXhfZWxlbWVu dHMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkgeworZ2VuNl9lbWl0X3ZlcnRleF9l bGVtZW50cyhzdHJ1Y3QgaW50ZWxfYmIgKmliYikgewogCS8qCiAJICogVGhlIFZVRSBsYXlvdXQK IAkgKiAgICBkd29yZCAwLTM6IHBhZCAoMCwgMCwgMC4gMCkKIAkgKiAgICBkd29yZCA0LTc6IHBv c2l0aW9uICh4LCB5LCAwLCAxLjApLAogCSAqICAgIGR3b3JkIDgtMTE6IHRleHR1cmUgY29vcmRp bmF0ZSAwICh1MCwgdjAsIDAsIDEuMCkKIAkgKi8KLQlPVVRfQkFUQ0goR0VONF8zRFNUQVRFX1ZF UlRFWF9FTEVNRU5UUyB8ICgzICogMiArIDEgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VO NF8zRFNUQVRFX1ZFUlRFWF9FTEVNRU5UUyB8ICgzICogMiArIDEgLSAyKSk7CiAKIAkvKiBFbGVt ZW50IHN0YXRlIDAuIFRoZXNlIGFyZSA0IGR3b3JkcyBvZiAwIHJlcXVpcmVkIGZvciB0aGUgVlVF IGZvcm1hdC4KIAkgKiBXZSBkb24ndCByZWFsbHkga25vdyBvciBjYXJlIHdoYXQgdGhleSBkby4K IAkgKi8KLQlPVVRfQkFUQ0goMCA8PCBHRU42X1ZFMF9WRVJURVhfQlVGRkVSX0lOREVYX1NISUZU IHwgR0VONl9WRTBfVkFMSUQgfAotCQkgIFNVUkZBQ0VGT1JNQVRfUjMyRzMyQjMyQTMyX0ZMT0FU IDw8IFZFMF9GT1JNQVRfU0hJRlQgfAotCQkgIDAgPDwgVkUwX09GRlNFVF9TSElGVCk7IC8qIHdl IHNwZWNpZnkgMCwgYnV0IGl0J3MgcmVhbGx5IGRvZXMgbm90IGV4aXN0ICovCi0JT1VUX0JBVENI KEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMCA8PCBWRTFfVkZDT01QT05FTlRfMF9TSElGVCB8Ci0J CSAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8xX1NISUZUIHwK LQkJICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzJfU0hJRlQg fAotCQkgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMCA8PCBWRTFfVkZDT01QT05FTlRfM19TSElG VCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCA8PCBHRU42X1ZFMF9WRVJURVhfQlVGRkVSX0lOREVY X1NISUZUIHwgR0VONl9WRTBfVkFMSUQgfAorCQkgICAgIFNVUkZBQ0VGT1JNQVRfUjMyRzMyQjMy QTMyX0ZMT0FUIDw8IFZFMF9GT1JNQVRfU0hJRlQgfAorCQkgICAgIDAgPDwgVkUwX09GRlNFVF9T SElGVCk7IC8qIHdlIHNwZWNpZnkgMCwgYnV0IGl0J3MgcmVhbGx5IGRvZXMgbm90IGV4aXN0ICov CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNP TVBPTkVOVF8wX1NISUZUIHwKKwkJICAgICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwgVkUx X1ZGQ09NUE9ORU5UXzFfU0hJRlQgfAorCQkgICAgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMCA8 PCBWRTFfVkZDT01QT05FTlRfMl9TSElGVCB8CisJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9TVE9S RV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8zX1NISUZUKTsKIAogCS8qIEVsZW1lbnQgc3RhdGUgMSAt IE91ciAiZGVzdGluYXRpb24iIHZlcnRpY2VzLiBUaGVzZSBhcmUgcGFzc2VkIGRvd24KIAkgKiB0 aHJvdWdoIHRoZSBwaXBlbGluZSwgYW5kIGV2ZW50dWFsbHkgbWFrZSBpdCB0byB0aGUgcGl4ZWwg c2hhZGVyIGFzCkBAIC0zNDQsMjUgKzI0NiwyNSBAQCBnZW42X2VtaXRfdmVydGV4X2VsZW1lbnRz KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpIHsKIAkgKiBzaWduZWQvc2NhbGVkIGJl Y2F1c2Ugb2YgZ2VuNiByZW5kZXJjb3B5LiBJIHNlZSBubyBwYXJ0aWN1bGFyIHJlYXNvbgogCSAq IGZvciBkb2luZyB0aGlzIHRob3VnaC4KIAkgKi8KLQlPVVRfQkFUQ0goMCA8PCBHRU42X1ZFMF9W RVJURVhfQlVGRkVSX0lOREVYX1NISUZUIHwgR0VONl9WRTBfVkFMSUQgfAotCQkgIFNVUkZBQ0VG T1JNQVRfUjE2RzE2X1NTQ0FMRUQgPDwgVkUwX0ZPUk1BVF9TSElGVCB8Ci0JCSAgMCA8PCBWRTBf T0ZGU0VUX1NISUZUKTsgLyogb2Zmc2V0cyB2YiBpbiBieXRlcyAqLwotCU9VVF9CQVRDSChHRU40 X1ZGQ09NUE9ORU5UX1NUT1JFX1NSQyA8PCBWRTFfVkZDT01QT05FTlRfMF9TSElGVCB8Ci0JCSAg R0VONF9WRkNPTVBPTkVOVF9TVE9SRV9TUkMgPDwgVkUxX1ZGQ09NUE9ORU5UXzFfU0hJRlQgfAot CQkgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMCA8PCBWRTFfVkZDT01QT05FTlRfMl9TSElGVCB8 Ci0JCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8xX0ZMVCA8PCBWRTFfVkZDT01QT05FTlRfM19T SElGVCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCA8PCBHRU42X1ZFMF9WRVJURVhfQlVGRkVSX0lO REVYX1NISUZUIHwgR0VONl9WRTBfVkFMSUQgfAorCQkgICAgIFNVUkZBQ0VGT1JNQVRfUjE2RzE2 X1NTQ0FMRUQgPDwgVkUwX0ZPUk1BVF9TSElGVCB8CisJCSAgICAgMCA8PCBWRTBfT0ZGU0VUX1NI SUZUKTsgLyogb2Zmc2V0cyB2YiBpbiBieXRlcyAqLworCWludGVsX2JiX291dChpYmIsIEdFTjRf VkZDT01QT05FTlRfU1RPUkVfU1JDIDw8IFZFMV9WRkNPTVBPTkVOVF8wX1NISUZUIHwKKwkJICAg ICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFX1NSQyA8PCBWRTFfVkZDT01QT05FTlRfMV9TSElGVCB8 CisJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8yX1NI SUZUIHwKKwkJICAgICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzFfRkxUIDw8IFZFMV9WRkNPTVBP TkVOVF8zX1NISUZUKTsKIAogCS8qIEVsZW1lbnQgc3RhdGUgMi4gTGFzdCBidXQgbm90IGxlYXN0 IHdlIHN0b3JlIHRoZSBVLFYgY29tcG9uZW50cyBhcwogCSAqIG5vcm1hbGl6ZWQgZmxvYXRzLiBU aGVzZSB3aWxsIGJlIHVzZWQgaW4gdGhlIHBpeGVsIHNoYWRlciB0byBzYW1wbGUKIAkgKiBmcm9t IHRoZSBzb3VyY2UgYnVmZmVyLgogCSAqLwotCU9VVF9CQVRDSCgwIDw8IEdFTjZfVkUwX1ZFUlRF WF9CVUZGRVJfSU5ERVhfU0hJRlQgfCBHRU42X1ZFMF9WQUxJRCB8Ci0JCSAgU1VSRkFDRUZPUk1B VF9SMzJHMzJfRkxPQVQgPDwgVkUwX0ZPUk1BVF9TSElGVCB8Ci0JCSAgNCA8PCBWRTBfT0ZGU0VU X1NISUZUKTsJLyogb2Zmc2V0IHZiIGluIGJ5dGVzICovCi0JT1VUX0JBVENIKEdFTjRfVkZDT01Q T05FTlRfU1RPUkVfU1JDIDw8IFZFMV9WRkNPTVBPTkVOVF8wX1NISUZUIHwKLQkJICBHRU40X1ZG Q09NUE9ORU5UX1NUT1JFX1NSQyA8PCBWRTFfVkZDT01QT05FTlRfMV9TSElGVCB8Ci0JCSAgR0VO NF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8yX1NISUZUIHwKLQkJICBH RU40X1ZGQ09NUE9ORU5UX1NUT1JFXzFfRkxUIDw8IFZFMV9WRkNPTVBPTkVOVF8zX1NISUZUKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCAwIDw8IEdFTjZfVkUwX1ZFUlRFWF9CVUZGRVJfSU5ERVhfU0hJ RlQgfCBHRU42X1ZFMF9WQUxJRCB8CisJCSAgICAgU1VSRkFDRUZPUk1BVF9SMzJHMzJfRkxPQVQg PDwgVkUwX0ZPUk1BVF9TSElGVCB8CisJCSAgICAgNCA8PCBWRTBfT0ZGU0VUX1NISUZUKTsJLyog b2Zmc2V0IHZiIGluIGJ5dGVzICovCisJaW50ZWxfYmJfb3V0KGliYiwgR0VONF9WRkNPTVBPTkVO VF9TVE9SRV9TUkMgPDwgVkUxX1ZGQ09NUE9ORU5UXzBfU0hJRlQgfAorCQkgICAgIEdFTjRfVkZD T01QT05FTlRfU1RPUkVfU1JDIDw8IFZFMV9WRkNPTVBPTkVOVF8xX1NISUZUIHwKKwkJICAgICBH RU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzJfU0hJRlQgfAorCQkg ICAgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMV9GTFQgPDwgVkUxX1ZGQ09NUE9ORU5UXzNfU0hJ RlQpOwogfQogCiAvKgpAQCAtMzcxLDQ0ICsyNzMsMzUgQEAgZ2VuNl9lbWl0X3ZlcnRleF9lbGVt ZW50cyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKSB7CiAgKiBAYmF0Y2gKICAqIEBv ZmZzZXQgLSBieXR3IG9mZnNldCB3aXRoaW4gdGhlIEBiYXRjaCB3aGVyZSB0aGUgdmVydGV4IGJ1 ZmZlciBzdGFydHMuCiAgKi8KLXN0YXRpYyB2b2lkIGdlbjhfZW1pdF92ZXJ0ZXhfYnVmZmVyKHN0 cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCQkJICAgIHVpbnQzMl90IG9mZnNldCkg ewotCU9VVF9CQVRDSChHRU40XzNEU1RBVEVfVkVSVEVYX0JVRkZFUlMgfCAoMSArICg0ICogMSkg LSAyKSk7Ci0JT1VUX0JBVENIKDAgPDwgR0VONl9WQjBfQlVGRkVSX0lOREVYX1NISUZUIHwgLyog VkIgMHRoIGluZGV4ICovCi0JCSAgR0VOOF9WQjBfQlVGRkVSX0FERFJfTU9EX0VOIHwgLyogQWRk cmVzcyBNb2RpZnkgRW5hYmxlICovCi0JCSAgVkVSVEVYX1NJWkUgPDwgVkIwX0JVRkZFUl9QSVRD SF9TSElGVCk7Ci0JT1VUX1JFTE9DKGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX1ZFUlRFWCwg MCwgb2Zmc2V0KTsKLQlPVVRfQkFUQ0goMyAqIFZFUlRFWF9TSVpFKTsKK3N0YXRpYyB2b2lkIGdl bjhfZW1pdF92ZXJ0ZXhfYnVmZmVyKHN0cnVjdCBpbnRlbF9iYiAqaWJiLCB1aW50MzJfdCBvZmZz ZXQpCit7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONF8zRFNUQVRFX1ZFUlRFWF9CVUZGRVJTIHwg KDEgKyAoNCAqIDEpIC0gMikpOworCWludGVsX2JiX291dChpYmIsIDAgPDwgR0VONl9WQjBfQlVG RkVSX0lOREVYX1NISUZUIHwgLyogVkIgMHRoIGluZGV4ICovCisJCSAgICAgR0VOOF9WQjBfQlVG RkVSX0FERFJfTU9EX0VOIHwgLyogQWRkcmVzcyBNb2RpZnkgRW5hYmxlICovCisJCSAgICAgVkVS VEVYX1NJWkUgPDwgVkIwX0JVRkZFUl9QSVRDSF9TSElGVCk7CisJaW50ZWxfYmJfZW1pdF9yZWxv YyhpYmIsIGliYi0+aGFuZGxlLAorCQkJICAgIEk5MTVfR0VNX0RPTUFJTl9WRVJURVgsIDAsCisJ CQkgICAgb2Zmc2V0LCBpYmItPmJhdGNoX29mZnNldCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMyAq IFZFUlRFWF9TSVpFKTsKIH0KIAogc3RhdGljIHVpbnQzMl90Ci1nZW42X2NyZWF0ZV9jY19zdGF0 ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkgICAgIHN0cnVjdCBhbm5vdGF0 aW9uc19jb250ZXh0ICphdWIpCitnZW42X2NyZWF0ZV9jY19zdGF0ZShzdHJ1Y3QgaW50ZWxfYmIg KmliYikKIHsKIAlzdHJ1Y3QgZ2VuNl9jb2xvcl9jYWxjX3N0YXRlICpjY19zdGF0ZTsKLQl1aW50 MzJfdCBvZmZzZXQ7CiAKLQljY19zdGF0ZSA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfYWxs b2MoYmF0Y2gsCi0JCQkJCQkgICBzaXplb2YoKmNjX3N0YXRlKSwgNjQpOwotCW9mZnNldCA9IGlu dGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCBjY19zdGF0ZSk7Ci0JYW5ub3Rh dGlvbl9hZGRfc3RhdGUoYXViLCBBVUJfVFJBQ0VfQ0NfU1RBVEUsCi0JCQkgICAgIG9mZnNldCwg c2l6ZW9mKCpjY19zdGF0ZSkpOworCWNjX3N0YXRlID0gaW50ZWxfYmJfcHRyX2FsaWduKGliYiwg NjQpOwogCi0JcmV0dXJuIG9mZnNldDsKKwlyZXR1cm4gaW50ZWxfYmJfcHRyX2FkZF9yZXR1cm5f cHJldl9vZmZzZXQoaWJiLCBzaXplb2YoKmNjX3N0YXRlKSk7CiB9CiAKIHN0YXRpYyB1aW50MzJf dAotZ2VuOF9jcmVhdGVfYmxlbmRfc3RhdGUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRj aCwKLQkJCXN0cnVjdCBhbm5vdGF0aW9uc19jb250ZXh0ICphdWIpCitnZW44X2NyZWF0ZV9ibGVu ZF9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKIAlzdHJ1Y3QgZ2VuOF9ibGVuZF9zdGF0 ZSAqYmxlbmQ7CiAJaW50IGk7Ci0JdWludDMyX3Qgb2Zmc2V0OwogCi0JYmxlbmQgPSBpbnRlbF9i YXRjaGJ1ZmZlcl9zdWJkYXRhX2FsbG9jKGJhdGNoLCBzaXplb2YoKmJsZW5kKSwgNjQpOwotCW9m ZnNldCA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCBibGVuZCk7Ci0J YW5ub3RhdGlvbl9hZGRfc3RhdGUoYXViLCBBVUJfVFJBQ0VfQkxFTkRfU1RBVEUsCi0JCQkgICAg IG9mZnNldCwgc2l6ZW9mKCpibGVuZCkpOworCWJsZW5kID0gaW50ZWxfYmJfcHRyX2FsaWduKGli YiwgNjQpOwogCiAJZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHsKIAkJYmxlbmQtPmJzW2ldLmRl c3RfYmxlbmRfZmFjdG9yID0gR0VONl9CTEVOREZBQ1RPUl9aRVJPOwpAQCAtNDE4LDQ1MSArMzEx LDQ0MCBAQCBnZW44X2NyZWF0ZV9ibGVuZF9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoLAogCQlibGVuZC0+YnNbaV0uY29sb3JfYnVmZmVyX2JsZW5kID0gMDsKIAl9CiAKLQly ZXR1cm4gb2Zmc2V0OworCXJldHVybiBpbnRlbF9iYl9wdHJfYWRkX3JldHVybl9wcmV2X29mZnNl dChpYmIsIHNpemVvZigqYmxlbmQpKTsKIH0KIAogc3RhdGljIHVpbnQzMl90Ci1nZW42X2NyZWF0 ZV9jY192aWV3cG9ydChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJc3RydWN0 IGFubm90YXRpb25zX2NvbnRleHQgKmF1YikKK2dlbjZfY3JlYXRlX2NjX3ZpZXdwb3J0KHN0cnVj dCBpbnRlbF9iYiAqaWJiKQogewogCXN0cnVjdCBnZW40X2NjX3ZpZXdwb3J0ICp2cDsKLQl1aW50 MzJfdCBvZmZzZXQ7CiAKLQl2cCA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfYWxsb2MoYmF0 Y2gsIHNpemVvZigqdnApLCAzMik7Ci0Jb2Zmc2V0ID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0 YV9vZmZzZXQoYmF0Y2gsIHZwKTsKLQlhbm5vdGF0aW9uX2FkZF9zdGF0ZShhdWIsIEFVQl9UUkFD RV9DQ19WUF9TVEFURSwKLQkJCSAgICAgb2Zmc2V0LCBzaXplb2YoKnZwKSk7CisJdnAgPSBpbnRl bF9iYl9wdHJfYWxpZ24oaWJiLCAzMik7CiAKIAkvKiBYWFggSSBkb24ndCB1bmRlcnN0YW5kIHRo aXMgKi8KIAl2cC0+bWluX2RlcHRoID0gLTEuZTM1OwogCXZwLT5tYXhfZGVwdGggPSAxLmUzNTsK IAotCXJldHVybiBvZmZzZXQ7CisJcmV0dXJuIGludGVsX2JiX3B0cl9hZGRfcmV0dXJuX3ByZXZf b2Zmc2V0KGliYiwgc2l6ZW9mKCp2cCkpOwogfQogCiBzdGF0aWMgdWludDMyX3QKLWdlbjdfY3Jl YXRlX3NmX2NsaXBfdmlld3BvcnQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJ CXN0cnVjdCBhbm5vdGF0aW9uc19jb250ZXh0ICphdWIpCitnZW43X2NyZWF0ZV9zZl9jbGlwX3Zp ZXdwb3J0KHN0cnVjdCBpbnRlbF9iYiAqaWJiKQogewogCS8qIFhYWCB0aGVzZSBhcmUgbGlrZWx5 IG5vdCBuZWVkZWQgKi8KIAlzdHJ1Y3QgZ2VuN19zZl9jbGlwX3ZpZXdwb3J0ICpzY3Zfc3RhdGU7 Ci0JdWludDMyX3Qgb2Zmc2V0OwogCi0Jc2N2X3N0YXRlID0gaW50ZWxfYmF0Y2hidWZmZXJfc3Vi ZGF0YV9hbGxvYyhiYXRjaCwKLQkJCQkJCSAgICBzaXplb2YoKnNjdl9zdGF0ZSksIDY0KTsKLQlv ZmZzZXQgPSBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX29mZnNldChiYXRjaCwgc2N2X3N0YXRl KTsKLQlhbm5vdGF0aW9uX2FkZF9zdGF0ZShhdWIsIEFVQl9UUkFDRV9DTElQX1ZQX1NUQVRFLAot CQkJICAgICBvZmZzZXQsIHNpemVvZigqc2N2X3N0YXRlKSk7CisJc2N2X3N0YXRlID0gaW50ZWxf YmJfcHRyX2FsaWduKGliYiwgNjQpOwogCiAJc2N2X3N0YXRlLT5ndWFyZGJhbmQueG1pbiA9IDA7 CiAJc2N2X3N0YXRlLT5ndWFyZGJhbmQueG1heCA9IDEuMGY7CiAJc2N2X3N0YXRlLT5ndWFyZGJh bmQueW1pbiA9IDA7CiAJc2N2X3N0YXRlLT5ndWFyZGJhbmQueW1heCA9IDEuMGY7CiAKLQlyZXR1 cm4gb2Zmc2V0OworCXJldHVybiBpbnRlbF9iYl9wdHJfYWRkX3JldHVybl9wcmV2X29mZnNldChp YmIsIHNpemVvZigqc2N2X3N0YXRlKSk7CiB9CiAKIHN0YXRpYyB1aW50MzJfdAotZ2VuNl9jcmVh dGVfc2Npc3Nvcl9yZWN0KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCQlzdHJ1 Y3QgYW5ub3RhdGlvbnNfY29udGV4dCAqYXViKQorZ2VuNl9jcmVhdGVfc2Npc3Nvcl9yZWN0KHN0 cnVjdCBpbnRlbF9iYiAqaWJiKQogewogCXN0cnVjdCBnZW42X3NjaXNzb3JfcmVjdCAqc2Npc3Nv cjsKLQl1aW50MzJfdCBvZmZzZXQ7CiAKLQlzY2lzc29yID0gaW50ZWxfYmF0Y2hidWZmZXJfc3Vi ZGF0YV9hbGxvYyhiYXRjaCwgc2l6ZW9mKCpzY2lzc29yKSwgNjQpOwotCW9mZnNldCA9IGludGVs X2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCBzY2lzc29yKTsKLQlhbm5vdGF0aW9u X2FkZF9zdGF0ZShhdWIsIEFVQl9UUkFDRV9TQ0lTU09SX1NUQVRFLAotCQkJICAgICBvZmZzZXQs IHNpemVvZigqc2Npc3NvcikpOworCXNjaXNzb3IgPSBpbnRlbF9iYl9wdHJfYWxpZ24oaWJiLCA2 NCk7CiAKLQlyZXR1cm4gb2Zmc2V0OworCXJldHVybiBpbnRlbF9iYl9wdHJfYWRkX3JldHVybl9w cmV2X29mZnNldChpYmIsIHNpemVvZigqc2Npc3NvcikpOwogfQogCiBzdGF0aWMgdm9pZAotZ2Vu OF9lbWl0X3NpcChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKSB7Ci0JT1VUX0JBVENI KEdFTjRfU1RBVEVfU0lQIHwgKDMgLSAyKSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgw KTsKK2dlbjhfZW1pdF9zaXAoc3RydWN0IGludGVsX2JiICppYmIpIHsKKwlpbnRlbF9iYl9vdXQo aWJiLCBHRU40X1NUQVRFX1NJUCB8ICgzIC0gMikpOworCWludGVsX2JiX291dChpYmIsIDApOwor CWludGVsX2JiX291dChpYmIsIDApOwogfQogCiBzdGF0aWMgdm9pZAotZ2VuN19lbWl0X3B1c2hf Y29uc3RhbnRzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpIHsKLQlPVVRfQkFUQ0go R0VON18zRFNUQVRFX1BVU0hfQ09OU1RBTlRfQUxMT0NfVlMpOwotCU9VVF9CQVRDSCgwKTsKLQlP VVRfQkFUQ0goR0VOOF8zRFNUQVRFX1BVU0hfQ09OU1RBTlRfQUxMT0NfSFMpOwotCU9VVF9CQVRD SCgwKTsKLQlPVVRfQkFUQ0goR0VOOF8zRFNUQVRFX1BVU0hfQ09OU1RBTlRfQUxMT0NfRFMpOwot CU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goR0VOOF8zRFNUQVRFX1BVU0hfQ09OU1RBTlRfQUxM T0NfR1MpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX1BVU0hfQ09O U1RBTlRfQUxMT0NfUFMpOwotCU9VVF9CQVRDSCgwKTsKK2dlbjdfZW1pdF9wdXNoX2NvbnN0YW50 cyhzdHJ1Y3QgaW50ZWxfYmIgKmliYikgeworCWludGVsX2JiX291dChpYmIsIEdFTjdfM0RTVEFU RV9QVVNIX0NPTlNUQU5UX0FMTE9DX1ZTKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRl bF9iYl9vdXQoaWJiLCBHRU44XzNEU1RBVEVfUFVTSF9DT05TVEFOVF9BTExPQ19IUyk7CisJaW50 ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VOOF8zRFNUQVRFX1BVU0hf Q09OU1RBTlRfQUxMT0NfRFMpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291 dChpYmIsIEdFTjhfM0RTVEFURV9QVVNIX0NPTlNUQU5UX0FMTE9DX0dTKTsKKwlpbnRlbF9iYl9v dXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfUFVTSF9DT05TVEFO VF9BTExPQ19QUyk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1n ZW44X2VtaXRfc3RhdGVfYmFzZV9hZGRyZXNzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0 Y2gpIHsKLQlPVVRfQkFUQ0goR0VONF9TVEFURV9CQVNFX0FERFJFU1MgfCAoMTYgLSAyKSk7Citn ZW44X2VtaXRfc3RhdGVfYmFzZV9hZGRyZXNzKHN0cnVjdCBpbnRlbF9iYiAqaWJiKSB7CisJaW50 ZWxfYmJfb3V0KGliYiwgR0VONF9TVEFURV9CQVNFX0FERFJFU1MgfCAoMTYgLSAyKSk7CiAKIAkv 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 KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAxIDw8IDEyIHwgMSk7CiB9CiAKIHN0YXRpYyB2b2lkCi1n ZW43X2VtaXRfdXJiKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpIHsKK2dlbjdfZW1p dF91cmIoc3RydWN0IGludGVsX2JiICppYmIpIHsKIAkvKiBYWFg6IE1pbiB2YWxpZCB2YWx1ZXMg ZnJvbSBtZXNhICovCiAJY29uc3QgaW50IHZzX2VudHJpZXMgPSA2NDsKIAljb25zdCBpbnQgdnNf c2l6ZSA9IDI7CiAJY29uc3QgaW50IHZzX3N0YXJ0ID0gMjsKIAotCU9VVF9CQVRDSChHRU43XzNE U1RBVEVfVVJCX1ZTKTsKLQlPVVRfQkFUQ0godnNfZW50cmllcyB8ICgodnNfc2l6ZSAtIDEpIDw8 IDE2KSB8ICh2c19zdGFydCA8PCAyNSkpOwotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfVVJCX0dT KTsKLQlPVVRfQkFUQ0godnNfc3RhcnQgPDwgMjUpOwotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVf VVJCX0hTKTsKLQlPVVRfQkFUQ0godnNfc3RhcnQgPDwgMjUpOwotCU9VVF9CQVRDSChHRU43XzNE U1RBVEVfVVJCX0RTKTsKLQlPVVRfQkFUQ0godnNfc3RhcnQgPDwgMjUpOworCWludGVsX2JiX291 dChpYmIsIEdFTjdfM0RTVEFURV9VUkJfVlMpOworCWludGVsX2JiX291dChpYmIsIHZzX2VudHJp ZXMgfCAoKHZzX3NpemUgLSAxKSA8PCAxNikgfCAodnNfc3RhcnQgPDwgMjUpKTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfVVJCX0dTKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCB2c19z dGFydCA8PCAyNSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX1VSQl9IUyk7CisJ aW50ZWxfYmJfb3V0KGliYiwgdnNfc3RhcnQgPDwgMjUpOworCWludGVsX2JiX291dChpYmIsIEdF TjdfM0RTVEFURV9VUkJfRFMpOworCWludGVsX2JiX291dChpYmIsIHZzX3N0YXJ0IDw8IDI1KTsK IH0KIAogc3RhdGljIHZvaWQKLWdlbjhfZW1pdF9jYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIg KmJhdGNoKSB7Ci0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9CTEVORF9TVEFURV9QT0lOVEVSUyk7 Ci0JT1VUX0JBVENIKGNjLmJsZW5kX3N0YXRlIHwgMSk7CitnZW44X2VtaXRfY2Moc3RydWN0IGlu dGVsX2JiICppYmIpIHsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfQkxFTkRfU1RB VEVfUE9JTlRFUlMpOworCWludGVsX2JiX291dChpYmIsIGNjLmJsZW5kX3N0YXRlIHwgMSk7CiAK LQlPVVRfQkFUQ0goR0VONl8zRFNUQVRFX0NDX1NUQVRFX1BPSU5URVJTKTsKLQlPVVRfQkFUQ0go Y2MuY2Nfc3RhdGUgfCAxKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU42XzNEU1RBVEVfQ0NfU1RB VEVfUE9JTlRFUlMpOworCWludGVsX2JiX291dChpYmIsIGNjLmNjX3N0YXRlIHwgMSk7CiB9CiAK IHN0YXRpYyB2b2lkCi1nZW44X2VtaXRfbXVsdGlzYW1wbGUoc3RydWN0IGludGVsX2JhdGNoYnVm ZmVyICpiYXRjaCkgewotCU9VVF9CQVRDSChHRU44XzNEU1RBVEVfTVVMVElTQU1QTEUpOwotCU9V VF9CQVRDSCgwKTsKK2dlbjhfZW1pdF9tdWx0aXNhbXBsZShzdHJ1Y3QgaW50ZWxfYmIgKmliYikg eworCWludGVsX2JiX291dChpYmIsIEdFTjhfM0RTVEFURV9NVUxUSVNBTVBMRSk7CisJaW50ZWxf YmJfb3V0KGliYiwgMCk7CiAKLQlPVVRfQkFUQ0goR0VONl8zRFNUQVRFX1NBTVBMRV9NQVNLKTsK LQlPVVRfQkFUQ0goMSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRFX1NBTVBMRV9N QVNLKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAxKTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjhfZW1p dF92cyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKSB7Ci0JT1VUX0JBVENIKEdFTjdf M0RTVEFURV9CSU5ESU5HX1RBQkxFX1BPSU5URVJTX1ZTKTsKLQlPVVRfQkFUQ0goMCk7Ci0KLQlP VVRfQkFUQ0goR0VON18zRFNUQVRFX1NBTVBMRVJfU1RBVEVfUE9JTlRFUlNfVlMpOwotCU9VVF9C QVRDSCgwKTsKLQotCU9VVF9CQVRDSChHRU42XzNEU1RBVEVfQ09OU1RBTlRfVlMgfCAoMTEgLSAy KSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VU X0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDAp OwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCi0JT1VU X0JBVENIKEdFTjZfM0RTVEFURV9WUyB8ICg5LTIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JB VENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwot CU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOworZ2VuOF9lbWl0 X3ZzKHN0cnVjdCBpbnRlbF9iYiAqaWJiKSB7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNU QVRFX0JJTkRJTkdfVEFCTEVfUE9JTlRFUlNfVlMpOworCWludGVsX2JiX291dChpYmIsIDApOwor CisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX1NBTVBMRVJfU1RBVEVfUE9JTlRFUlNf VlMpOworCWludGVsX2JiX291dChpYmIsIDApOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8z RFNUQVRFX0NPTlNUQU5UX1ZTIHwgKDExIC0gMikpOworCWludGVsX2JiX291dChpYmIsIDApOwor CWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2Ji X291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIs IDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWlu dGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCisJaW50ZWxfYmJf b3V0KGliYiwgR0VONl8zRFNUQVRFX1ZTIHwgKDktMikpOworCWludGVsX2JiX291dChpYmIsIDAp OworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVs X2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChp YmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOwog fQogCiBzdGF0aWMgdm9pZAotZ2VuOF9lbWl0X2hzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gpIHsKLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX0NPTlNUQU5UX0hTIHwgKDExIC0gMikp OwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9C QVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsK LQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQotCU9VVF9C QVRDSChHRU43XzNEU1RBVEVfSFMgfCAoOS0yKSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRD SCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlP VVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQotCU9VVF9CQVRD SChHRU43XzNEU1RBVEVfQklORElOR19UQUJMRV9QT0lOVEVSU19IUyk7Ci0JT1VUX0JBVENIKDAp OwotCi0JT1VUX0JBVENIKEdFTjhfM0RTVEFURV9TQU1QTEVSX1NUQVRFX1BPSU5URVJTX0hTKTsK LQlPVVRfQkFUQ0goMCk7CitnZW44X2VtaXRfaHMoc3RydWN0IGludGVsX2JiICppYmIpIHsKKwlp bnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfQ09OU1RBTlRfSFMgfCAoMTEgLSAyKSk7CisJ aW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJf b3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwg MCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50 ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0 KGliYiwgMCk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfSFMgfCAoOS0yKSk7 CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxf YmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGli YiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJ aW50ZWxfYmJfb3V0KGliYiwgMCk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVf QklORElOR19UQUJMRV9QT0lOVEVSU19IUyk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisKKwlp bnRlbF9iYl9vdXQoaWJiLCBHRU44XzNEU1RBVEVfU0FNUExFUl9TVEFURV9QT0lOVEVSU19IUyk7 CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW44X2VtaXRfZ3Mo c3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkgewotCU9VVF9CQVRDSChHRU42XzNEU1RB VEVfQ09OU1RBTlRfR1MgfCAoMTEgLSAyKSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgw KTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRf QkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7 Ci0JT1VUX0JBVENIKDApOwotCi0JT1VUX0JBVENIKEdFTjZfM0RTVEFURV9HUyB8ICgxMC0yKSk7 Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JB VENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwot CU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0KLQlPVVRfQkFUQ0goR0VON18zRFNUQVRF X0JJTkRJTkdfVEFCTEVfUE9JTlRFUlNfR1MpOwotCU9VVF9CQVRDSCgwKTsKLQotCU9VVF9CQVRD SChHRU43XzNEU1RBVEVfU0FNUExFUl9TVEFURV9QT0lOVEVSU19HUyk7Ci0JT1VUX0JBVENIKDAp OworZ2VuOF9lbWl0X2dzKHN0cnVjdCBpbnRlbF9iYiAqaWJiKSB7CisJaW50ZWxfYmJfb3V0KGli YiwgR0VONl8zRFNUQVRFX0NPTlNUQU5UX0dTIHwgKDExIC0gMikpOworCWludGVsX2JiX291dChp YmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOwor CWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2Ji X291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIs IDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCisJ aW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRFX0dTIHwgKDEwLTIpKTsKKwlpbnRlbF9iYl9v dXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAw KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRl bF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQo aWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKworCWludGVsX2JiX291dChpYmIsIEdF TjdfM0RTVEFURV9CSU5ESU5HX1RBQkxFX1BPSU5URVJTX0dTKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCAwKTsKKworCWludGVsX2JiX291dChpYmIsIEdFTjdfM0RTVEFURV9TQU1QTEVSX1NUQVRFX1BP SU5URVJTX0dTKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIH0KIAogc3RhdGljIHZvaWQKLWdl bjhfZW1pdF9kcyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKSB7Ci0JT1VUX0JBVENI KEdFTjdfM0RTVEFURV9DT05TVEFOVF9EUyB8ICgxMSAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0J T1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENI KDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9V VF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0KLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX0RT IHwgKDktMikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDAp OwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9C QVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0KLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX0JJTkRJ TkdfVEFCTEVfUE9JTlRFUlNfRFMpOwotCU9VVF9CQVRDSCgwKTsKLQotCU9VVF9CQVRDSChHRU44 XzNEU1RBVEVfU0FNUExFUl9TVEFURV9QT0lOVEVSU19EUyk7Ci0JT1VUX0JBVENIKDApOworZ2Vu OF9lbWl0X2RzKHN0cnVjdCBpbnRlbF9iYiAqaWJiKSB7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VO N18zRFNUQVRFX0NPTlNUQU5UX0RTIHwgKDExIC0gMikpOworCWludGVsX2JiX291dChpYmIsIDAp OworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVs X2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChp YmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOwor CWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCisJaW50ZWxf YmJfb3V0KGliYiwgR0VON18zRFNUQVRFX0RTIHwgKDktMikpOworCWludGVsX2JiX291dChpYmIs IDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWlu dGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291 dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDAp OworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX0JJTkRJTkdfVEFCTEVfUE9JTlRF UlNfRFMpOworCWludGVsX2JiX291dChpYmIsIDApOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VO OF8zRFNUQVRFX1NBTVBMRVJfU1RBVEVfUE9JTlRFUlNfRFMpOworCWludGVsX2JiX291dChpYmIs IDApOwogfQogCiBzdGF0aWMgdm9pZAotZ2VuOF9lbWl0X3dtX2h6X29wKHN0cnVjdCBpbnRlbF9i YXRjaGJ1ZmZlciAqYmF0Y2gpIHsKLQlPVVRfQkFUQ0goR0VOOF8zRFNUQVRFX1dNX0haX09QIHwg KDUtMikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwot CU9VVF9CQVRDSCgwKTsKK2dlbjhfZW1pdF93bV9oel9vcChzdHJ1Y3QgaW50ZWxfYmIgKmliYikg eworCWludGVsX2JiX291dChpYmIsIEdFTjhfM0RTVEFURV9XTV9IWl9PUCB8ICg1LTIpKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9v dXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIH0KIAogc3RhdGljIHZvaWQKLWdl bjhfZW1pdF9udWxsX3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpIHsKLQln ZW44X2VtaXRfd21faHpfb3AoYmF0Y2gpOwotCWdlbjhfZW1pdF9ocyhiYXRjaCk7Ci0JT1VUX0JB VENIKEdFTjdfM0RTVEFURV9URSB8ICg0LTIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENI KDApOwotCU9VVF9CQVRDSCgwKTsKLQlnZW44X2VtaXRfZ3MoYmF0Y2gpOwotCWdlbjhfZW1pdF9k cyhiYXRjaCk7Ci0JZ2VuOF9lbWl0X3ZzKGJhdGNoKTsKK2dlbjhfZW1pdF9udWxsX3N0YXRlKHN0 cnVjdCBpbnRlbF9iYiAqaWJiKSB7CisJZ2VuOF9lbWl0X3dtX2h6X29wKGliYik7CisJZ2VuOF9l bWl0X2hzKGliYik7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX1RFIHwgKDQtMikp OworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVs X2JiX291dChpYmIsIDApOworCWdlbjhfZW1pdF9ncyhpYmIpOworCWdlbjhfZW1pdF9kcyhpYmIp OworCWdlbjhfZW1pdF92cyhpYmIpOwogfQogCiBzdGF0aWMgdm9pZAotZ2VuN19lbWl0X2NsaXAo c3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkgewotCU9VVF9CQVRDSChHRU42XzNEU1RB VEVfQ0xJUCB8ICg0IC0gMikpOwotCU9VVF9CQVRDSCgwKTsgCi0JT1VUX0JBVENIKDApOyAvKiAg cGFzcy10aHJvdWdoICovCi0JT1VUX0JBVENIKDApOworZ2VuN19lbWl0X2NsaXAoc3RydWN0IGlu dGVsX2JiICppYmIpIHsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU42XzNEU1RBVEVfQ0xJUCB8ICg0 IC0gMikpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOyAv KiAgcGFzcy10aHJvdWdoICovCisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiB9CiAKIHN0YXRpYyB2 b2lkCi1nZW44X2VtaXRfc2Yoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2dlbjhf ZW1pdF9zZihzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKIAlpbnQgaTsKIAotCU9VVF9CQVRDSChH RU43XzNEU1RBVEVfU0JFIHwgKDQgLSAyKSk7Ci0JT1VUX0JBVENIKDEgPDwgR0VON19TQkVfTlVN X09VVFBVVFNfU0hJRlQgfAotCQkgIEdFTjhfU0JFX0ZPUkNFX1VSQl9FTlRSWV9SRUFEX0xFTkdU SCB8Ci0JCSAgR0VOOF9TQkVfRk9SQ0VfVVJCX0VOVFJZX1JFQURfT0ZGU0VUIHwKLQkJICAxIDw8 IEdFTjdfU0JFX1VSQl9FTlRSWV9SRUFEX0xFTkdUSF9TSElGVCB8Ci0JCSAgMSA8PCBHRU44X1NC RV9VUkJfRU5UUllfUkVBRF9PRkZTRVRfU0hJRlQpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFU Q0goMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX1NCRSB8ICg0IC0gMikpOwor CWludGVsX2JiX291dChpYmIsIDEgPDwgR0VON19TQkVfTlVNX09VVFBVVFNfU0hJRlQgfAorCQkg ICAgIEdFTjhfU0JFX0ZPUkNFX1VSQl9FTlRSWV9SRUFEX0xFTkdUSCB8CisJCSAgICAgR0VOOF9T QkVfRk9SQ0VfVVJCX0VOVFJZX1JFQURfT0ZGU0VUIHwKKwkJICAgICAxIDw8IEdFTjdfU0JFX1VS Ql9FTlRSWV9SRUFEX0xFTkdUSF9TSElGVCB8CisJCSAgICAgMSA8PCBHRU44X1NCRV9VUkJfRU5U UllfUkVBRF9PRkZTRVRfU0hJRlQpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2Ji X291dChpYmIsIDApOwogCi0JT1VUX0JBVENIKEdFTjhfM0RTVEFURV9TQkVfU1dJWiB8ICgxMSAt IDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU44XzNEU1RBVEVfU0JFX1NXSVogfCAoMTEgLSAy KSk7CiAJZm9yIChpID0gMDsgaSA8IDg7IGkrKykKLQkJT1VUX0JBVENIKDApOwotCU9VVF9CQVRD SCgwKTsKLQlPVVRfQkFUQ0goMCk7CisJCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2Ji X291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOwogCi0JT1VUX0JBVENIKEdFTjhf M0RTVEFURV9SQVNURVIgfCAoNSAtIDIpKTsKLQlPVVRfQkFUQ0goR0VOOF9SQVNURVJfRlJPTlRf V0lORElOR19DQ1cgfCBHRU44X1JBU1RFUl9DVUxMX05PTkUpOwotCU9VVF9CQVRDSCgwKTsKLQlP VVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOworCWludGVsX2JiX291dChpYmIsIEdFTjhfM0RT VEFURV9SQVNURVIgfCAoNSAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU44X1JBU1RFUl9G Uk9OVF9XSU5ESU5HX0NDVyB8IEdFTjhfUkFTVEVSX0NVTExfTk9ORSk7CisJaW50ZWxfYmJfb3V0 KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7 CiAKLQlPVVRfQkFUQ0goR0VONl8zRFNUQVRFX1NGIHwgKDQgLSAyKSk7Ci0JT1VUX0JBVENIKDAp OwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VO Nl8zRFNUQVRFX1NGIHwgKDQgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxf YmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiB9CiAKIHN0YXRpYyB2b2lk Ci1nZW44X2VtaXRfcHMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3Qg a2VybmVsKSB7CitnZW44X2VtaXRfcHMoc3RydWN0IGludGVsX2JiICppYmIsIHVpbnQzMl90IGtl cm5lbCkgewogCWNvbnN0IGludCBtYXhfdGhyZWFkcyA9IDYzOwogCi0JT1VUX0JBVENIKEdFTjZf M0RTVEFURV9XTSB8ICgyIC0gMikpOwotCU9VVF9CQVRDSCgvKiBYWFg6IEkgZG9uJ3QgdW5kZXJz dGFuZCB0aGUgQkFSWUNFTlRSSUMgc3R1ZmYsIGJ1dCBpdAorCWludGVsX2JiX291dChpYmIsIEdF TjZfM0RTVEFURV9XTSB8ICgyIC0gMikpOworCWludGVsX2JiX291dChpYmIsIC8qIFhYWDogSSBk b24ndCB1bmRlcnN0YW5kIHRoZSBCQVJZQ0VOVFJJQyBzdHVmZiwgYnV0IGl0CiAJCSAgICogYXBw ZWFycyB3ZSBuZWVkIGl0IHRvIHB1dCBvdXIgc2V0dXAgZGF0YSBpbiB0aGUgcGxhY2Ugd2UKIAkJ ICAgKiBleHBlY3QgKGc2LCBzZWUgYmVsb3cpICovCi0JCSAgR0VOOF8zRFNUQVRFX1BTX1BFUlNQ RUNUSVZFX1BJWEVMX0JBUllDRU5UUklDKTsKLQotCU9VVF9CQVRDSChHRU42XzNEU1RBVEVfQ09O U1RBTlRfUFMgfCAoMTEtMikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VU X0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDAp OwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9C QVRDSCgwKTsKLQotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfUFMgfCAoMTItMikpOwotCU9VVF9C QVRDSChrZXJuZWwpOwotCU9VVF9CQVRDSCgwKTsgLyoga2VybmVsIGhpICovCi0JT1VUX0JBVENI KDEgPDwgR0VONl8zRFNUQVRFX1dNX1NBTVBMRVJfQ09VTlRfU0hJRlQgfAotCQkgIDIgPDwgR0VO Nl8zRFNUQVRFX1dNX0JJTkRJTkdfVEFCTEVfRU5UUllfQ09VTlRfU0hJRlQpOwotCU9VVF9CQVRD SCgwKTsgLyogc2NyYXRjaCBzcGFjZSBzdHVmZiAqLwotCU9VVF9CQVRDSCgwKTsgLyogc2NyYXRj aCBoaSAqLwotCU9VVF9CQVRDSCgobWF4X3RocmVhZHMgLSAxKSA8PCBHRU44XzNEU1RBVEVfUFNf TUFYX1RIUkVBRFNfU0hJRlQgfAotCQkgIEdFTjZfM0RTVEFURV9XTV8xNl9ESVNQQVRDSF9FTkFC TEUpOwotCU9VVF9CQVRDSCg2IDw8IEdFTjZfM0RTVEFURV9XTV9ESVNQQVRDSF9TVEFSVF9HUkZf MF9TSElGVCk7Ci0JT1VUX0JBVENIKDApOyAvLyBrZXJuZWwgMQotCU9VVF9CQVRDSCgwKTsgLyog a2VybmVsIDEgaGkgKi8KLQlPVVRfQkFUQ0goMCk7IC8vIGtlcm5lbCAyCi0JT1VUX0JBVENIKDAp OyAvKiBrZXJuZWwgMiBoaSAqLwotCi0JT1VUX0JBVENIKEdFTjhfM0RTVEFURV9QU19CTEVORCB8 ICgyIC0gMikpOwotCU9VVF9CQVRDSChHRU44X1BTX0JMRU5EX0hBU19XUklURUFCTEVfUlQpOwot Ci0JT1VUX0JBVENIKEdFTjhfM0RTVEFURV9QU19FWFRSQSB8ICgyIC0gMikpOwotCU9VVF9CQVRD SChHRU44X1BTWF9QSVhFTF9TSEFERVJfVkFMSUQgfCBHRU44X1BTWF9BVFRSSUJVVEVfRU5BQkxF KTsKKwkJICAgICBHRU44XzNEU1RBVEVfUFNfUEVSU1BFQ1RJVkVfUElYRUxfQkFSWUNFTlRSSUMp OworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRFX0NPTlNUQU5UX1BTIHwgKDExLTIp KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRl bF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQo aWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCAwKTsKKworCWludGVsX2JiX291dChpYmIsIEdFTjdfM0RTVEFURV9QUyB8ICgx Mi0yKSk7CisJaW50ZWxfYmJfb3V0KGliYiwga2VybmVsKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAw KTsgLyoga2VybmVsIGhpICovCisJaW50ZWxfYmJfb3V0KGliYiwgMSA8PCBHRU42XzNEU1RBVEVf V01fU0FNUExFUl9DT1VOVF9TSElGVCB8CisJCSAgICAgMiA8PCBHRU42XzNEU1RBVEVfV01fQklO RElOR19UQUJMRV9FTlRSWV9DT1VOVF9TSElGVCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7IC8q IHNjcmF0Y2ggc3BhY2Ugc3R1ZmYgKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsgLyogc2NyYXRj aCBoaSAqLworCWludGVsX2JiX291dChpYmIsIChtYXhfdGhyZWFkcyAtIDEpIDw8IEdFTjhfM0RT VEFURV9QU19NQVhfVEhSRUFEU19TSElGVCB8CisJCSAgICAgR0VONl8zRFNUQVRFX1dNXzE2X0RJ U1BBVENIX0VOQUJMRSk7CisJaW50ZWxfYmJfb3V0KGliYiwgNiA8PCBHRU42XzNEU1RBVEVfV01f RElTUEFUQ0hfU1RBUlRfR1JGXzBfU0hJRlQpOworCWludGVsX2JiX291dChpYmIsIDApOyAvLyBr ZXJuZWwgMQorCWludGVsX2JiX291dChpYmIsIDApOyAvKiBrZXJuZWwgMSBoaSAqLworCWludGVs X2JiX291dChpYmIsIDApOyAvLyBrZXJuZWwgMgorCWludGVsX2JiX291dChpYmIsIDApOyAvKiBr ZXJuZWwgMiBoaSAqLworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VOOF8zRFNUQVRFX1BTX0JMRU5E IHwgKDIgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VOOF9QU19CTEVORF9IQVNfV1JJVEVB QkxFX1JUKTsKKworCWludGVsX2JiX291dChpYmIsIEdFTjhfM0RTVEFURV9QU19FWFRSQSB8ICgy IC0gMikpOworCWludGVsX2JiX291dChpYmIsIEdFTjhfUFNYX1BJWEVMX1NIQURFUl9WQUxJRCB8 IEdFTjhfUFNYX0FUVFJJQlVURV9FTkFCTEUpOwogfQogCiBzdGF0aWMgdm9pZAotZ2VuOF9lbWl0 X2RlcHRoKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpIHsKLQlPVVRfQkFUQ0goR0VO OF8zRFNUQVRFX1dNX0RFUFRIX1NURU5DSUwgfCAoMyAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0J T1VUX0JBVENIKDApOwotCi0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9ERVBUSF9CVUZGRVIgfCAo OC0yKSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0J T1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENI KDApOwotCi0JT1VUX0JBVENIKEdFTjhfM0RTVEFURV9ISUVSX0RFUFRIX0JVRkZFUiB8ICg1IC0g MikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9V VF9CQVRDSCgwKTsKLQotCU9VVF9CQVRDSChHRU44XzNEU1RBVEVfU1RFTkNJTF9CVUZGRVIgfCAo NSAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsK LQlPVVRfQkFUQ0goMCk7CitnZW44X2VtaXRfZGVwdGgoc3RydWN0IGludGVsX2JiICppYmIpIHsK KwlpbnRlbF9iYl9vdXQoaWJiLCBHRU44XzNEU1RBVEVfV01fREVQVEhfU1RFTkNJTCB8ICgzIC0g MikpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCisJ aW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX0RFUFRIX0JVRkZFUiB8ICg4LTIpKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9v dXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAw KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKworCWlu dGVsX2JiX291dChpYmIsIEdFTjhfM0RTVEFURV9ISUVSX0RFUFRIX0JVRkZFUiB8ICg1IC0gMikp OworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVs X2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCisJaW50ZWxfYmJfb3V0 KGliYiwgR0VOOF8zRFNUQVRFX1NURU5DSUxfQlVGRkVSIHwgKDUgLSAyKSk7CisJaW50ZWxfYmJf b3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwg MCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW43X2VtaXRf Y2xlYXIoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkgewotCU9VVF9CQVRDSChHRU43 XzNEU1RBVEVfQ0xFQVJfUEFSQU1TIHwgKDMtMikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFU Q0goMSk7IC8vIGNsZWFyIHZhbGlkCitnZW43X2VtaXRfY2xlYXIoc3RydWN0IGludGVsX2JiICpp YmIpIHsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfQ0xFQVJfUEFSQU1TIHwgKDMt MikpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDEpOyAvLyBj bGVhciB2YWxpZAogfQogCiBzdGF0aWMgdm9pZAotZ2VuNl9lbWl0X2RyYXdpbmdfcmVjdGFuZ2xl KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpk c3QpCitnZW42X2VtaXRfZHJhd2luZ19yZWN0YW5nbGUoc3RydWN0IGludGVsX2JiICppYmIsIGNv bnN0IHN0cnVjdCBpbnRlbF9idWYgKmRzdCkKIHsKLQlPVVRfQkFUQ0goR0VONF8zRFNUQVRFX0RS QVdJTkdfUkVDVEFOR0xFIHwgKDQgLSAyKSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgo aWd0X2J1Zl9oZWlnaHQoZHN0KSAtIDEpIDw8IDE2IHwgKGlndF9idWZfd2lkdGgoZHN0KSAtIDEp KTsKLQlPVVRfQkFUQ0goMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONF8zRFNUQVRFX0RSQVdJ TkdfUkVDVEFOR0xFIHwgKDQgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxf YmJfb3V0KGliYiwgKGludGVsX2J1Zl9oZWlnaHQoZHN0KSAtIDEpIDw8IDE2IHwgKGludGVsX2J1 Zl93aWR0aChkc3QpIC0gMSkpOworCWludGVsX2JiX291dChpYmIsIDApOwogfQogCi1zdGF0aWMg dm9pZCBnZW44X2VtaXRfdmZfdG9wb2xvZ3koc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRj aCkKK3N0YXRpYyB2b2lkIGdlbjhfZW1pdF92Zl90b3BvbG9neShzdHJ1Y3QgaW50ZWxfYmIgKmli YikKIHsKLQlPVVRfQkFUQ0goR0VOOF8zRFNUQVRFX1ZGX1RPUE9MT0dZKTsKLQlPVVRfQkFUQ0go XzNEUFJJTV9SRUNUTElTVCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VOOF8zRFNUQVRFX1ZGX1RP UE9MT0dZKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBfM0RQUklNX1JFQ1RMSVNUKTsKIH0KIAogLyog VmVydGV4IGVsZW1lbnRzIE1VU1QgYmUgZGVmaW5lZCBiZWZvcmUgdGhpcyBhY2NvcmRpbmcgdG8g c3BlYyAqLwotc3RhdGljIHZvaWQgZ2VuOF9lbWl0X3ByaW1pdGl2ZShzdHJ1Y3QgaW50ZWxfYmF0 Y2hidWZmZXIgKmJhdGNoLCB1aW50MzJfdCBvZmZzZXQpCitzdGF0aWMgdm9pZCBnZW44X2VtaXRf cHJpbWl0aXZlKHN0cnVjdCBpbnRlbF9iYiAqaWJiLCB1aW50MzJfdCBvZmZzZXQpCiB7Ci0JT1VU X0JBVENIKEdFTjhfM0RTVEFURV9WRl9JTlNUQU5DSU5HIHwgKDMgLSAyKSk7Ci0JT1VUX0JBVENI KDApOwotCU9VVF9CQVRDSCgwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU44XzNEU1RBVEVfVkZf SU5TVEFOQ0lORyB8ICgzIC0gMikpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2Ji X291dChpYmIsIDApOwogCi0JT1VUX0JBVENIKEdFTjRfM0RQUklNSVRJVkUgfCAoNy0yKSk7Ci0J T1VUX0JBVENIKDApOwkvKiBnZW44KyBpZ25vcmUgdGhlIHRvcG9sb2d5IHR5cGUgZmllbGQgKi8K LQlPVVRfQkFUQ0goMyk7CS8qIHZlcnRleCBjb3VudCAqLwotCU9VVF9CQVRDSCgwKTsJLyogIFdl J3JlIHNwZWNpZnlpbmcgdGhpcyBpbnN0ZWFkIHdpdGggb2Zmc2V0IGluIEdFTjZfM0RTVEFURV9W RVJURVhfQlVGRkVSUyAqLwotCU9VVF9CQVRDSCgxKTsJLyogc2luZ2xlIGluc3RhbmNlICovCi0J T1VUX0JBVENIKDApOwkvKiBzdGFydCBpbnN0YW5jZSBsb2NhdGlvbiAqLwotCU9VVF9CQVRDSCgw KTsJLyogaW5kZXggYnVmZmVyIG9mZnNldCwgaWdub3JlZCAqLworCWludGVsX2JiX291dChpYmIs IEdFTjRfM0RQUklNSVRJVkUgfCAoNy0yKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CS8qIGdl bjgrIGlnbm9yZSB0aGUgdG9wb2xvZ3kgdHlwZSBmaWVsZCAqLworCWludGVsX2JiX291dChpYmIs IDMpOwkvKiB2ZXJ0ZXggY291bnQgKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsJLyogIFdlJ3Jl IHNwZWNpZnlpbmcgdGhpcyBpbnN0ZWFkIHdpdGggb2Zmc2V0IGluIEdFTjZfM0RTVEFURV9WRVJU RVhfQlVGRkVSUyAqLworCWludGVsX2JiX291dChpYmIsIDEpOwkvKiBzaW5nbGUgaW5zdGFuY2Ug Ki8KKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsJLyogc3RhcnQgaW5zdGFuY2UgbG9jYXRpb24gKi8K KwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsJLyogaW5kZXggYnVmZmVyIG9mZnNldCwgaWdub3JlZCAq LwogfQogCiAvKiBUaGUgZ2VuZXJhbCBydWxlIGlzIGlmIGl0J3MgbmFtZWQgZ2VuNiBpdCBpcyBk aXJlY3RseSBjb3BpZWQgZnJvbQpAQCAtODk3LDExNCArNzc5LDEwNCBAQCBzdGF0aWMgdm9pZCBn ZW44X2VtaXRfcHJpbWl0aXZlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQz Ml90IG9mZnNldAogCiAjZGVmaW5lIEJBVENIX1NUQVRFX1NQTElUIDIwNDgKIAotdm9pZCBnZW44 X3JlbmRlcl9jb3B5ZnVuYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJICBk cm1faW50ZWxfY29udGV4dCAqY29udGV4dCwKLQkJCSAgY29uc3Qgc3RydWN0IGlndF9idWYgKnNy YywgdW5zaWduZWQgc3JjX3gsIHVuc2lnbmVkIHNyY195LAotCQkJICB1bnNpZ25lZCB3aWR0aCwg dW5zaWduZWQgaGVpZ2h0LAotCQkJICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0LCB1bnNpZ25l ZCBkc3RfeCwgdW5zaWduZWQgZHN0X3kpCit2b2lkIGdlbjhfcmVuZGVyX2NvcHlmdW5jKHN0cnVj dCBpbnRlbF9iYiAqaWJiLAorCQkJICB1aW50MzJfdCBjdHgsCisJCQkgIHN0cnVjdCBpbnRlbF9i dWYgKnNyYywKKwkJCSAgdW5zaWduZWQgaW50IHNyY194LCB1bnNpZ25lZCBpbnQgc3JjX3ksCisJ CQkgIHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhlaWdodCwKKwkJCSAgc3RydWN0 IGludGVsX2J1ZiAqZHN0LAorCQkJICB1bnNpZ25lZCBpbnQgZHN0X3gsIHVuc2lnbmVkIGludCBk c3RfeSkKIHsKLQlzdHJ1Y3QgYW5ub3RhdGlvbnNfY29udGV4dCBhdWJfYW5ub3RhdGlvbnM7CiAJ dWludDMyX3QgcHNfc2FtcGxlcl9zdGF0ZSwgcHNfa2VybmVsX29mZiwgcHNfYmluZGluZ190YWJs ZTsKIAl1aW50MzJfdCBzY2lzc29yX3N0YXRlOwogCXVpbnQzMl90IHZlcnRleF9idWZmZXI7Ci0J dWludDMyX3QgYmF0Y2hfZW5kOwogCiAJaWd0X2Fzc2VydChzcmMtPmJwcCA9PSBkc3QtPmJwcCk7 Ci0JaW50ZWxfYmF0Y2hidWZmZXJfZmx1c2hfd2l0aF9jb250ZXh0KGJhdGNoLCBjb250ZXh0KTsK IAotCWludGVsX2JhdGNoYnVmZmVyX2FsaWduKGJhdGNoLCA4KTsKKwlpbnRlbF9iYl9mbHVzaF9y ZW5kZXJfd2l0aF9jb250ZXh0KGliYiwgY3R4KTsKIAotCWJhdGNoLT5wdHIgPSAmYmF0Y2gtPmJ1 ZmZlcltCQVRDSF9TVEFURV9TUExJVF07CisJaW50ZWxfYmJfYWRkX2ludGVsX2J1ZihpYmIsIGRz dCwgdHJ1ZSk7CisJaW50ZWxfYmJfYWRkX2ludGVsX2J1ZihpYmIsIHNyYywgZmFsc2UpOwogCi0J YW5ub3RhdGlvbl9pbml0KCZhdWJfYW5ub3RhdGlvbnMpOworCWludGVsX2JiX3B0cl9zZXQoaWJi LCBCQVRDSF9TVEFURV9TUExJVCk7CiAKLQlwc19iaW5kaW5nX3RhYmxlICA9IGdlbjhfYmluZF9z dXJmYWNlcyhiYXRjaCwgJmF1Yl9hbm5vdGF0aW9ucywKLQkJCQkJICAgICAgIHNyYywgZHN0KTsK LQlwc19zYW1wbGVyX3N0YXRlICA9IGdlbjhfY3JlYXRlX3NhbXBsZXIoYmF0Y2gsICZhdWJfYW5u b3RhdGlvbnMpOwotCXBzX2tlcm5lbF9vZmYgPSBnZW44X2ZpbGxfcHMoYmF0Y2gsICZhdWJfYW5u b3RhdGlvbnMsCi0JCQkJICAgICBwc19rZXJuZWwsIHNpemVvZihwc19rZXJuZWwpKTsKLQl2ZXJ0 ZXhfYnVmZmVyID0gZ2VuN19maWxsX3ZlcnRleF9idWZmZXJfZGF0YShiYXRjaCwgJmF1Yl9hbm5v dGF0aW9ucywKKwlwc19iaW5kaW5nX3RhYmxlICA9IGdlbjhfYmluZF9zdXJmYWNlcyhpYmIsIHNy YywgZHN0KTsKKwlwc19zYW1wbGVyX3N0YXRlICA9IGdlbjhfY3JlYXRlX3NhbXBsZXIoaWJiKTsK Kwlwc19rZXJuZWxfb2ZmID0gZ2VuOF9maWxsX3BzKGliYiwgcHNfa2VybmVsLCBzaXplb2YocHNf a2VybmVsKSk7CisJdmVydGV4X2J1ZmZlciA9IGdlbjdfZmlsbF92ZXJ0ZXhfYnVmZmVyX2RhdGEo aWJiLAogCQkJCQkJICAgICBzcmMsCiAJCQkJCQkgICAgIHNyY194LCBzcmNfeSwKIAkJCQkJCSAg ICAgZHN0X3gsIGRzdF95LAogCQkJCQkJICAgICB3aWR0aCwgaGVpZ2h0KTsKLQljYy5jY19zdGF0 ZSA9IGdlbjZfY3JlYXRlX2NjX3N0YXRlKGJhdGNoLCAmYXViX2Fubm90YXRpb25zKTsKLQljYy5i bGVuZF9zdGF0ZSA9IGdlbjhfY3JlYXRlX2JsZW5kX3N0YXRlKGJhdGNoLCAmYXViX2Fubm90YXRp b25zKTsKLQl2aWV3cG9ydC5jY19zdGF0ZSA9IGdlbjZfY3JlYXRlX2NjX3ZpZXdwb3J0KGJhdGNo LCAmYXViX2Fubm90YXRpb25zKTsKLQl2aWV3cG9ydC5zZl9jbGlwX3N0YXRlID0gZ2VuN19jcmVh dGVfc2ZfY2xpcF92aWV3cG9ydChiYXRjaCwgJmF1Yl9hbm5vdGF0aW9ucyk7Ci0Jc2Npc3Nvcl9z dGF0ZSA9IGdlbjZfY3JlYXRlX3NjaXNzb3JfcmVjdChiYXRjaCwgJmF1Yl9hbm5vdGF0aW9ucyk7 CisJY2MuY2Nfc3RhdGUgPSBnZW42X2NyZWF0ZV9jY19zdGF0ZShpYmIpOworCWNjLmJsZW5kX3N0 YXRlID0gZ2VuOF9jcmVhdGVfYmxlbmRfc3RhdGUoaWJiKTsKKwl2aWV3cG9ydC5jY19zdGF0ZSA9 IGdlbjZfY3JlYXRlX2NjX3ZpZXdwb3J0KGliYik7CisJdmlld3BvcnQuc2ZfY2xpcF9zdGF0ZSA9 IGdlbjdfY3JlYXRlX3NmX2NsaXBfdmlld3BvcnQoaWJiKTsKKwlzY2lzc29yX3N0YXRlID0gZ2Vu Nl9jcmVhdGVfc2Npc3Nvcl9yZWN0KGliYik7CiAJLyogVE9ETzogdGhlcmVlIGlzIG90aGVyIHN0 YXRlIHdoaWNoIGlzbid0IHNldHVwICovCiAKLQlpZ3RfYXNzZXJ0KGJhdGNoLT5wdHIgPCAmYmF0 Y2gtPmJ1ZmZlcls0MDk1XSk7Ci0KLQliYXRjaC0+cHRyID0gYmF0Y2gtPmJ1ZmZlcjsKKwlpbnRl bF9iYl9wdHJfc2V0KGliYiwgMCk7CiAKIAkvKiBTdGFydCBlbWl0dGluZyB0aGUgY29tbWFuZHMu IFRoZSBvcmRlciByb3VnaGx5IGZvbGxvd3MgdGhlIG1lc2EgYmxvcnAKIAkgKiBvcmRlciAqLwot CU9VVF9CQVRDSChHNFhfUElQRUxJTkVfU0VMRUNUIHwgUElQRUxJTkVfU0VMRUNUXzNEKTsKLQot CWdlbjhfZW1pdF9zaXAoYmF0Y2gpOwotCi0JZ2VuN19lbWl0X3B1c2hfY29uc3RhbnRzKGJhdGNo KTsKLQotCWdlbjhfZW1pdF9zdGF0ZV9iYXNlX2FkZHJlc3MoYmF0Y2gpOwotCi0JT1VUX0JBVENI KEdFTjdfM0RTVEFURV9WSUVXUE9SVF9TVEFURV9QT0lOVEVSU19DQyk7Ci0JT1VUX0JBVENIKHZp ZXdwb3J0LmNjX3N0YXRlKTsKLQlPVVRfQkFUQ0goR0VOOF8zRFNUQVRFX1ZJRVdQT1JUX1NUQVRF X1BPSU5URVJTX1NGX0NMSVApOwotCU9VVF9CQVRDSCh2aWV3cG9ydC5zZl9jbGlwX3N0YXRlKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCBHNFhfUElQRUxJTkVfU0VMRUNUIHwgUElQRUxJTkVfU0VMRUNU XzNEKTsKIAotCWdlbjdfZW1pdF91cmIoYmF0Y2gpOworCWdlbjhfZW1pdF9zaXAoaWJiKTsKIAot CWdlbjhfZW1pdF9jYyhiYXRjaCk7CisJZ2VuN19lbWl0X3B1c2hfY29uc3RhbnRzKGliYik7CiAK LQlnZW44X2VtaXRfbXVsdGlzYW1wbGUoYmF0Y2gpOworCWdlbjhfZW1pdF9zdGF0ZV9iYXNlX2Fk ZHJlc3MoaWJiKTsKIAotCWdlbjhfZW1pdF9udWxsX3N0YXRlKGJhdGNoKTsKKwlpbnRlbF9iYl9v dXQoaWJiLCBHRU43XzNEU1RBVEVfVklFV1BPUlRfU1RBVEVfUE9JTlRFUlNfQ0MpOworCWludGVs X2JiX291dChpYmIsIHZpZXdwb3J0LmNjX3N0YXRlKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU44 XzNEU1RBVEVfVklFV1BPUlRfU1RBVEVfUE9JTlRFUlNfU0ZfQ0xJUCk7CisJaW50ZWxfYmJfb3V0 KGliYiwgdmlld3BvcnQuc2ZfY2xpcF9zdGF0ZSk7CiAKLQlPVVRfQkFUQ0goR0VON18zRFNUQVRF X1NUUkVBTU9VVCB8ICg1LTIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9V VF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7CisJZ2VuN19lbWl0X3VyYihpYmIpOwogCi0JZ2Vu N19lbWl0X2NsaXAoYmF0Y2gpOworCWdlbjhfZW1pdF9jYyhpYmIpOwogCi0JZ2VuOF9lbWl0X3Nm KGJhdGNoKTsKKwlnZW44X2VtaXRfbXVsdGlzYW1wbGUoaWJiKTsKIAotCU9VVF9CQVRDSChHRU43 XzNEU1RBVEVfQklORElOR19UQUJMRV9QT0lOVEVSU19QUyk7Ci0JT1VUX0JBVENIKHBzX2JpbmRp bmdfdGFibGUpOworCWdlbjhfZW1pdF9udWxsX3N0YXRlKGliYik7CiAKLQlPVVRfQkFUQ0goR0VO N18zRFNUQVRFX1NBTVBMRVJfU1RBVEVfUE9JTlRFUlNfUFMpOwotCU9VVF9CQVRDSChwc19zYW1w bGVyX3N0YXRlKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfU1RSRUFNT1VUIHwg KDUtMikpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOwor CWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOwogCi0JZ2VuOF9l bWl0X3BzKGJhdGNoLCBwc19rZXJuZWxfb2ZmKTsKKwlnZW43X2VtaXRfY2xpcChpYmIpOwogCi0J T1VUX0JBVENIKEdFTjhfM0RTVEFURV9TQ0lTU09SX1NUQVRFX1BPSU5URVJTKTsKLQlPVVRfQkFU Q0goc2Npc3Nvcl9zdGF0ZSk7CisJZ2VuOF9lbWl0X3NmKGliYik7CiAKLQlnZW44X2VtaXRfZGVw dGgoYmF0Y2gpOworCWludGVsX2JiX291dChpYmIsIEdFTjdfM0RTVEFURV9CSU5ESU5HX1RBQkxF X1BPSU5URVJTX1BTKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBwc19iaW5kaW5nX3RhYmxlKTsKIAot CWdlbjdfZW1pdF9jbGVhcihiYXRjaCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRF X1NBTVBMRVJfU1RBVEVfUE9JTlRFUlNfUFMpOworCWludGVsX2JiX291dChpYmIsIHBzX3NhbXBs ZXJfc3RhdGUpOwogCi0JZ2VuNl9lbWl0X2RyYXdpbmdfcmVjdGFuZ2xlKGJhdGNoLCBkc3QpOwor CWdlbjhfZW1pdF9wcyhpYmIsIHBzX2tlcm5lbF9vZmYpOwogCi0JZ2VuOF9lbWl0X3ZlcnRleF9i dWZmZXIoYmF0Y2gsIHZlcnRleF9idWZmZXIpOwotCWdlbjZfZW1pdF92ZXJ0ZXhfZWxlbWVudHMo YmF0Y2gpOworCWludGVsX2JiX291dChpYmIsIEdFTjhfM0RTVEFURV9TQ0lTU09SX1NUQVRFX1BP SU5URVJTKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBzY2lzc29yX3N0YXRlKTsKIAotCWdlbjhfZW1p dF92Zl90b3BvbG9neShiYXRjaCk7Ci0JZ2VuOF9lbWl0X3ByaW1pdGl2ZShiYXRjaCwgdmVydGV4 X2J1ZmZlcik7CisJZ2VuOF9lbWl0X2RlcHRoKGliYik7CiAKLQlPVVRfQkFUQ0goTUlfQkFUQ0hf QlVGRkVSX0VORCk7CisJZ2VuN19lbWl0X2NsZWFyKGliYik7CiAKLQliYXRjaF9lbmQgPSBpbnRl bF9iYXRjaGJ1ZmZlcl9hbGlnbihiYXRjaCwgOCk7Ci0JaWd0X2Fzc2VydChiYXRjaF9lbmQgPCBC QVRDSF9TVEFURV9TUExJVCk7Ci0JYW5ub3RhdGlvbl9hZGRfYmF0Y2goJmF1Yl9hbm5vdGF0aW9u cywgYmF0Y2hfZW5kKTsKKwlnZW42X2VtaXRfZHJhd2luZ19yZWN0YW5nbGUoaWJiLCBkc3QpOwog Ci0JZHVtcF9iYXRjaChiYXRjaCk7CisJZ2VuOF9lbWl0X3ZlcnRleF9idWZmZXIoaWJiLCB2ZXJ0 ZXhfYnVmZmVyKTsKKwlnZW42X2VtaXRfdmVydGV4X2VsZW1lbnRzKGliYik7CiAKLQlhbm5vdGF0 aW9uX2ZsdXNoKCZhdWJfYW5ub3RhdGlvbnMsIGJhdGNoKTsKKwlnZW44X2VtaXRfdmZfdG9wb2xv Z3koaWJiKTsKKwlnZW44X2VtaXRfcHJpbWl0aXZlKGliYiwgdmVydGV4X2J1ZmZlcik7CiAKLQln ZW42X3JlbmRlcl9mbHVzaChiYXRjaCwgY29udGV4dCwgYmF0Y2hfZW5kKTsKLQlpbnRlbF9iYXRj aGJ1ZmZlcl9yZXNldChiYXRjaCk7CisJaW50ZWxfYmJfZW1pdF9iYmUoaWJiKTsKKwlpbnRlbF9i Yl9leGVjX3dpdGhfY29udGV4dChpYmIsIGludGVsX2JiX29mZnNldChpYmIpLCBjdHgsCisJCQkJ ICAgSTkxNV9FWEVDX0RFRkFVTFQgfCBJOTE1X0VYRUNfTk9fUkVMT0MsCisJCQkJICAgZmFsc2Up OworCWR1bXBfYmF0Y2goaWJiKTsKKwlpbnRlbF9iYl9yZXNldChpYmIsIGZhbHNlKTsKIH0KZGlm ZiAtLWdpdCBhL2xpYi9yZW5kZXJjb3B5X2dlbjkuYyBiL2xpYi9yZW5kZXJjb3B5X2dlbjkuYwpp bmRleCA4NWFlNGNhYi4uNmJhZDdiYjYgMTAwNjQ0Ci0tLSBhL2xpYi9yZW5kZXJjb3B5X2dlbjku YworKysgYi9saWIvcmVuZGVyY29weV9nZW45LmMKQEAgLTE2LDcgKzE2LDcgQEAKIAogI2luY2x1 ZGUgImRybXRlc3QuaCIKICNpbmNsdWRlICJpbnRlbF9hdXhfcGd0YWJsZS5oIgotI2luY2x1ZGUg ImludGVsX2J1Zm1nci5oIgorI2luY2x1ZGUgImludGVsX2J1Zm9wcy5oIgogI2luY2x1ZGUgImlu dGVsX2JhdGNoYnVmZmVyLmgiCiAjaW5jbHVkZSAiaW50ZWxfaW8uaCIKICNpbmNsdWRlICJyZW5k ZXJjb3B5LmgiCkBAIC0yNCwxNyArMjQsMTIgQEAKICNpbmNsdWRlICJpbnRlbF9yZWcuaCIKICNp bmNsdWRlICJpZ3RfYXV4LmgiCiAKLSNpbmNsdWRlICJpbnRlbF9hdWIuaCIKLQogI2RlZmluZSBW RVJURVhfU0laRSAoMyo0KQogCiAjaWYgREVCVUdfUkVOREVSQ1BZCi1zdGF0aWMgdm9pZCBkdW1w X2JhdGNoKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpIHsKLQlpbnQgZmQgPSBvcGVu KCIvdG1wL2k5NjUtYmF0Y2hidWZmZXJzLmR1bXAiLCBPX1dST05MWSB8IE9fQ1JFQVQsICAwNjY2 KTsKLQlpZiAoZmQgIT0gLTEpIHsKLQkJaWd0X2Fzc2VydF9lcSh3cml0ZShmZCwgYmF0Y2gtPmJ1 ZmZlciwgNDA5NiksIDQwOTYpOwotCQlmZCA9IGNsb3NlKGZkKTsKLQl9CitzdGF0aWMgdm9pZCBk dW1wX2JhdGNoKHN0cnVjdCBpbnRlbF9iYiAqaWJiKQoreworCWludGVsX2JiX2R1bXAoaWJiLCAi L3RtcC9nZW45LWJhdGNoYnVmZmVycy5kdW1wIik7CiB9CiAjZWxzZQogI2RlZmluZSBkdW1wX2Jh dGNoKHgpIGRvIHsgfSB3aGlsZSgwKQpAQCAtMTIwLDg3ICsxMTUsMTYgQEAgc3RhdGljIGNvbnN0 IHVpbnQzMl90IGdlbjEyX3JlbmRlcl9jb3B5W11bNF0gPSB7CiAJeyAweDgwMDQwMTMxLCAweDAw MDAwMDA0LCAweDUwMDA3MTQ0LCAweDAwYzQwMDAwIH0sCiB9OwogCi0vKiBBVUIgYW5ub3RhdGlv biBzdXBwb3J0ICovCi0jZGVmaW5lIE1BWF9BTk5PVEFUSU9OUwkzMwotc3RydWN0IGFubm90YXRp b25zX2NvbnRleHQgewotCWRybV9pbnRlbF9hdWJfYW5ub3RhdGlvbiBhbm5vdGF0aW9uc1tNQVhf QU5OT1RBVElPTlNdOwotCWludCBpbmRleDsKLQl1aW50MzJfdCBvZmZzZXQ7Ci19IGF1Yl9hbm5v dGF0aW9uczsKLQotc3RhdGljIHZvaWQgYW5ub3RhdGlvbl9pbml0KHN0cnVjdCBhbm5vdGF0aW9u c19jb250ZXh0ICpjdHgpCi17Ci0JLyogY3R4LT5hbm5vdGF0aW9ucyBpcyBhbiBhcnJheSBrZWVw aW5nIGEgbGlzdCBvZiBhbm5vdGF0aW9ucyBvZiB0aGUKLQkgKiBiYXRjaCBidWZmZXIgb3JkZXJl ZCBieSBvZmZzZXQuIGN0eC0+YW5ub3RhdGlvbnNbMF0gaXMgdGh1cyBsZWZ0Ci0JICogZm9yIHRo ZSBjb21tYW5kIHN0cmVhbSBhbmQgd2lsbCBiZSBmaWxsZWQganVzdCBiZWZvcmUgZXhlY3V0aW5n Ci0JICogdGhlIGJhdGNoIGJ1ZmZlciB3aXRoIGFubm90YXRpb25zX2FkZF9iYXRjaCgpICovCi0J Y3R4LT5pbmRleCA9IDE7Ci19Ci0KLXN0YXRpYyB2b2lkIGFkZF9hbm5vdGF0aW9uKGRybV9pbnRl bF9hdWJfYW5ub3RhdGlvbiAqYSwKLQkJCSAgIHVpbnQzMl90IHR5cGUsIHVpbnQzMl90IHN1YnR5 cGUsCi0JCQkgICB1aW50MzJfdCBlbmRpbmdfb2Zmc2V0KQotewotCWEtPnR5cGUgPSB0eXBlOwot CWEtPnN1YnR5cGUgPSBzdWJ0eXBlOwotCWEtPmVuZGluZ19vZmZzZXQgPSBlbmRpbmdfb2Zmc2V0 OwotfQotCi1zdGF0aWMgdm9pZCBhbm5vdGF0aW9uX2FkZF9iYXRjaChzdHJ1Y3QgYW5ub3RhdGlv bnNfY29udGV4dCAqY3R4LCBzaXplX3Qgc2l6ZSkKLXsKLQlhZGRfYW5ub3RhdGlvbigmY3R4LT5h bm5vdGF0aW9uc1swXSwgQVVCX1RSQUNFX1RZUEVfQkFUQ0gsIDAsIHNpemUpOwotfQotCi1zdGF0 aWMgdm9pZCBhbm5vdGF0aW9uX2FkZF9zdGF0ZShzdHJ1Y3QgYW5ub3RhdGlvbnNfY29udGV4dCAq Y3R4LAotCQkJCSB1aW50MzJfdCBzdGF0ZV90eXBlLAotCQkJCSB1aW50MzJfdCBzdGFydF9vZmZz ZXQsCi0JCQkJIHNpemVfdCAgIHNpemUpCi17Ci0JYXNzZXJ0KGN0eC0+aW5kZXggPCBNQVhfQU5O T1RBVElPTlMpOwotCi0JYWRkX2Fubm90YXRpb24oJmN0eC0+YW5ub3RhdGlvbnNbY3R4LT5pbmRl eCsrXSwKLQkJICAgICAgIEFVQl9UUkFDRV9UWVBFX05PVFlQRSwgMCwKLQkJICAgICAgIHN0YXJ0 X29mZnNldCk7Ci0JYWRkX2Fubm90YXRpb24oJmN0eC0+YW5ub3RhdGlvbnNbY3R4LT5pbmRleCsr XSwKLQkJICAgICAgIEFVQl9UUkFDRV9UWVBFKHN0YXRlX3R5cGUpLAotCQkgICAgICAgQVVCX1RS QUNFX1NVQlRZUEUoc3RhdGVfdHlwZSksCi0JCSAgICAgICBzdGFydF9vZmZzZXQgKyBzaXplKTsK LX0KLQotc3RhdGljIHZvaWQgYW5ub3RhdGlvbl9mbHVzaChzdHJ1Y3QgYW5ub3RhdGlvbnNfY29u dGV4dCAqY3R4LAotCQkJICAgICBzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQotewot CWlmICghaWd0X2F1Yl9kdW1wX2VuYWJsZWQoKSkKLQkJcmV0dXJuOwotCi0JZHJtX2ludGVsX2J1 Zm1ncl9nZW1fc2V0X2F1Yl9hbm5vdGF0aW9ucyhiYXRjaC0+Ym8sCi0JCQkJCQkgY3R4LT5hbm5v dGF0aW9ucywKLQkJCQkJCSBjdHgtPmluZGV4KTsKLX0KLQotc3RhdGljIHZvaWQKLWdlbjZfcmVu ZGVyX2ZsdXNoKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCSAgZHJtX2ludGVs X2NvbnRleHQgKmNvbnRleHQsIHVpbnQzMl90IGJhdGNoX2VuZCkKLXsKLQlpZ3RfYXNzZXJ0X2Vx KGRybV9pbnRlbF9ib19zdWJkYXRhKGJhdGNoLT5ibywKLQkJCQkJICAgMCwgNDA5NiwgYmF0Y2gt PmJ1ZmZlciksCi0JCSAgICAgIDApOwotCWlndF9hc3NlcnRfZXEoZHJtX2ludGVsX2dlbV9ib19j b250ZXh0X2V4ZWMoYmF0Y2gtPmJvLAotCQkJCQkJICAgIGNvbnRleHQsIGJhdGNoX2VuZCwgMCks Ci0JCSAgICAgIDApOwotfQotCiAvKiBNb3N0bHkgY29weStwYXN0ZSBmcm9tIGdlbjYsIGV4Y2Vw dCBoZWlnaHQsIHdpZHRoLCBwaXRjaCBtb3ZlZCAqLwogc3RhdGljIHVpbnQzMl90Ci1nZW44X2Jp bmRfYnVmKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsIGNvbnN0IHN0cnVjdCBpZ3Rf YnVmICpidWYsCi0JICAgICAgaW50IGlzX2RzdCkgeworZ2VuOF9iaW5kX2J1ZihzdHJ1Y3QgaW50 ZWxfYmIgKmliYiwgY29uc3Qgc3RydWN0IGludGVsX2J1ZiAqYnVmLCBpbnQgaXNfZHN0KSB7CiAJ c3RydWN0IGdlbjlfc3VyZmFjZV9zdGF0ZSAqc3M7Ci0JdWludDMyX3Qgd3JpdGVfZG9tYWluLCBy ZWFkX2RvbWFpbiwgb2Zmc2V0OwotCWludCByZXQ7CisJdWludDMyX3Qgd3JpdGVfZG9tYWluLCBy ZWFkX2RvbWFpbjsKKwl1aW50NjRfdCBhZGRyZXNzOwogCiAJaWd0X2Fzc2VydF9sdGUoYnVmLT5z dXJmYWNlWzBdLnN0cmlkZSwgMjU2KjEwMjQpOwotCWlndF9hc3NlcnRfbHRlKGlndF9idWZfd2lk dGgoYnVmKSwgMTYzODQpOwotCWlndF9hc3NlcnRfbHRlKGlndF9idWZfaGVpZ2h0KGJ1ZiksIDE2 Mzg0KTsKKwlpZ3RfYXNzZXJ0X2x0ZShpbnRlbF9idWZfd2lkdGgoYnVmKSwgMTYzODQpOworCWln dF9hc3NlcnRfbHRlKGludGVsX2J1Zl9oZWlnaHQoYnVmKSwgMTYzODQpOwogCiAJaWYgKGlzX2Rz dCkgewogCQl3cml0ZV9kb21haW4gPSByZWFkX2RvbWFpbiA9IEk5MTVfR0VNX0RPTUFJTl9SRU5E RVI7CkBAIC0yMDksMTAgKzEzMyw3IEBAIGdlbjhfYmluZF9idWYoc3RydWN0IGludGVsX2JhdGNo YnVmZmVyICpiYXRjaCwgY29uc3Qgc3RydWN0IGlndF9idWYgKmJ1ZiwKIAkJcmVhZF9kb21haW4g PSBJOTE1X0dFTV9ET01BSU5fU0FNUExFUjsKIAl9CiAKLQlzcyA9IGludGVsX2JhdGNoYnVmZmVy X3N1YmRhdGFfYWxsb2MoYmF0Y2gsIHNpemVvZigqc3MpLCA2NCk7Ci0Jb2Zmc2V0ID0gaW50ZWxf YmF0Y2hidWZmZXJfc3ViZGF0YV9vZmZzZXQoYmF0Y2gsIHNzKTsKLQlhbm5vdGF0aW9uX2FkZF9z dGF0ZSgmYXViX2Fubm90YXRpb25zLCBBVUJfVFJBQ0VfU1VSRkFDRV9TVEFURSwKLQkJCSAgICAg b2Zmc2V0LCBzaXplb2YoKnNzKSk7CisJc3MgPSBpbnRlbF9iYl9wdHJfYWxpZ24oaWJiLCA2NCk7 CiAKIAlzcy0+c3MwLnN1cmZhY2VfdHlwZSA9IFNVUkZBQ0VfMkQ7CiAJc3dpdGNoIChidWYtPmJw cCkgewpAQCAtMjM4LDE3ICsxNTksMTUgQEAgZ2VuOF9iaW5kX2J1ZihzdHJ1Y3QgaW50ZWxfYmF0 Y2hidWZmZXIgKmJhdGNoLCBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAogCQlzcy0+c3M1LnRy bW9kZSA9IDI7CiAJc3MtPnNzNS5taXBfdGFpbF9zdGFydF9sb2QgPSAxOyAvKiBuZWVkZWQgd2l0 aCB0cm1vZGUgKi8KIAotCXNzLT5zczguYmFzZV9hZGRyID0gYnVmLT5iby0+b2Zmc2V0NjQ7Ci0J c3MtPnNzOS5iYXNlX2FkZHJfaGkgPSBidWYtPmJvLT5vZmZzZXQ2NCA+PiAzMjsKKwlhZGRyZXNz ID0gaW50ZWxfYmJfb2Zmc2V0X3JlbG9jKGliYiwgYnVmLT5oYW5kbGUsCisJCQkJCXJlYWRfZG9t YWluLCB3cml0ZV9kb21haW4sCisJCQkJCWludGVsX2JiX29mZnNldChpYmIpICsgNCAqIDgsCisJ CQkJCWJ1Zi0+YWRkci5vZmZzZXQpOworCXNzLT5zczguYmFzZV9hZGRyID0gYWRkcmVzczsKKwlz cy0+c3M5LmJhc2VfYWRkcl9oaSA9IGFkZHJlc3MgPj4gMzI7CiAKLQlyZXQgPSBkcm1faW50ZWxf Ym9fZW1pdF9yZWxvYyhiYXRjaC0+Ym8sCi0JCQkJICAgICAgaW50ZWxfYmF0Y2hidWZmZXJfc3Vi ZGF0YV9vZmZzZXQoYmF0Y2gsICZzcy0+c3M4KSwKLQkJCQkgICAgICBidWYtPmJvLCAwLAotCQkJ CSAgICAgIHJlYWRfZG9tYWluLCB3cml0ZV9kb21haW4pOwotCWFzc2VydChyZXQgPT0gMCk7Ci0K LQlzcy0+c3MyLmhlaWdodCA9IGlndF9idWZfaGVpZ2h0KGJ1ZikgLSAxOwotCXNzLT5zczIud2lk dGggID0gaWd0X2J1Zl93aWR0aChidWYpIC0gMTsKKwlzcy0+c3MyLmhlaWdodCA9IGludGVsX2J1 Zl9oZWlnaHQoYnVmKSAtIDE7CisJc3MtPnNzMi53aWR0aCAgPSBpbnRlbF9idWZfd2lkdGgoYnVm KSAtIDE7CiAJc3MtPnNzMy5waXRjaCAgPSBidWYtPnN1cmZhY2VbMF0uc3RyaWRlIC0gMTsKIAog CXNzLT5zczcuc2tsLnNoYWRlcl9jaGFuZWxfc2VsZWN0X3IgPSA0OwpAQCAtMjY0LDYwICsxODMs NTIgQEAgZ2VuOF9iaW5kX2J1ZihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCBjb25z dCBzdHJ1Y3QgaWd0X2J1ZiAqYnVmLAogCQlzcy0+c3M2LmF1eF9tb2RlID0gMHg1OyAvKiBBVVhf Q0NTX0UgKi8KIAkJc3MtPnNzNi5hdXhfcGl0Y2ggPSAoYnVmLT5jY3NbMF0uc3RyaWRlIC8gMTI4 KSAtIDE7CiAKLQkJc3MtPnNzMTAuYXV4X2Jhc2VfYWRkciA9IGJ1Zi0+Ym8tPm9mZnNldDY0ICsg YnVmLT5jY3NbMF0ub2Zmc2V0OwotCQlzcy0+c3MxMS5hdXhfYmFzZV9hZGRyX2hpID0gKGJ1Zi0+ Ym8tPm9mZnNldDY0ICsgYnVmLT5jY3NbMF0ub2Zmc2V0KSA+PiAzMjsKLQotCQlyZXQgPSBkcm1f aW50ZWxfYm9fZW1pdF9yZWxvYyhiYXRjaC0+Ym8sCi0JCQkJCSAgICAgIGludGVsX2JhdGNoYnVm ZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCAmc3MtPnNzMTApLAotCQkJCQkgICAgICBidWYtPmJv LCBidWYtPmNjc1swXS5vZmZzZXQsCi0JCQkJCSAgICAgIHJlYWRfZG9tYWluLCB3cml0ZV9kb21h aW4pOwotCQlhc3NlcnQocmV0ID09IDApOworCQlhZGRyZXNzID0gaW50ZWxfYmJfb2Zmc2V0X3Jl bG9jX3dpdGhfZGVsdGEoaWJiLCBidWYtPmhhbmRsZSwKKwkJCQkJCQkgICByZWFkX2RvbWFpbiwg d3JpdGVfZG9tYWluLAorCQkJCQkJCSAgIGJ1Zi0+Y2NzWzBdLm9mZnNldCwKKwkJCQkJCQkgICBp bnRlbF9iYl9vZmZzZXQoaWJiKSArIDQgKiAxMCwKKwkJCQkJCQkgICBidWYtPmFkZHIub2Zmc2V0 KTsKKwkJc3MtPnNzMTAuYXV4X2Jhc2VfYWRkciA9IChhZGRyZXNzICsgYnVmLT5jY3NbMF0ub2Zm c2V0KTsKKwkJc3MtPnNzMTEuYXV4X2Jhc2VfYWRkcl9oaSA9IChhZGRyZXNzICsgYnVmLT5jY3Nb MF0ub2Zmc2V0KSA+PiAzMjsKIAl9CiAKIAlpZiAoYnVmLT5jYy5vZmZzZXQpIHsKIAkJaWd0X2Fz c2VydChidWYtPmNvbXByZXNzaW9uID09IEk5MTVfQ09NUFJFU1NJT05fUkVOREVSKTsKIAotCQlz cy0+c3MxMi5jbGVhcl9hZGRyZXNzID0gYnVmLT5iby0+b2Zmc2V0NjQgKyBidWYtPmNjLm9mZnNl dDsKLQkJc3MtPnNzMTMuY2xlYXJfYWRkcmVzc19oaSA9IChidWYtPmJvLT5vZmZzZXQ2NCArIGJ1 Zi0+Y2Mub2Zmc2V0KSA+PiAzMjsKLQotCQlyZXQgPSBkcm1faW50ZWxfYm9fZW1pdF9yZWxvYyhi YXRjaC0+Ym8sCi0JCQkJCSAgICAgIGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJh dGNoLCAmc3MtPnNzMTIpLAotCQkJCQkgICAgICBidWYtPmJvLCBidWYtPmNjLm9mZnNldCwKLQkJ CQkJICAgICAgcmVhZF9kb21haW4sIHdyaXRlX2RvbWFpbik7Ci0JCWFzc2VydChyZXQgPT0gMCk7 CisJCWFkZHJlc3MgPSBpbnRlbF9iYl9vZmZzZXRfcmVsb2Nfd2l0aF9kZWx0YShpYmIsIGJ1Zi0+ aGFuZGxlLAorCQkJCQkJCSAgIHJlYWRfZG9tYWluLCB3cml0ZV9kb21haW4sCisJCQkJCQkJICAg YnVmLT5jYy5vZmZzZXQsCisJCQkJCQkJICAgaW50ZWxfYmJfb2Zmc2V0KGliYikgKyA0ICogMTIs CisJCQkJCQkJICAgYnVmLT5hZGRyLm9mZnNldCk7CisJCXNzLT5zczEyLmNsZWFyX2FkZHJlc3Mg PSBhZGRyZXNzICsgYnVmLT5jYy5vZmZzZXQ7CisJCXNzLT5zczEzLmNsZWFyX2FkZHJlc3NfaGkg PSAoYWRkcmVzcyArIGJ1Zi0+Y2Mub2Zmc2V0KSA+PiAzMjsKIAl9CiAKLQlyZXR1cm4gb2Zmc2V0 OworCXJldHVybiBpbnRlbF9iYl9wdHJfYWRkX3JldHVybl9wcmV2X29mZnNldChpYmIsIHNpemVv Zigqc3MpKTsKIH0KIAogc3RhdGljIHVpbnQzMl90Ci1nZW44X2JpbmRfc3VyZmFjZXMoc3RydWN0 IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJICAgY29uc3Qgc3RydWN0IGlndF9idWYgKnNy YywKLQkJICAgY29uc3Qgc3RydWN0IGlndF9idWYgKmRzdCkKK2dlbjhfYmluZF9zdXJmYWNlcyhz dHJ1Y3QgaW50ZWxfYmIgKmliYiwKKwkJICAgY29uc3Qgc3RydWN0IGludGVsX2J1ZiAqc3JjLAor CQkgICBjb25zdCBzdHJ1Y3QgaW50ZWxfYnVmICpkc3QpCiB7Ci0JdWludDMyX3QgKmJpbmRpbmdf dGFibGUsIG9mZnNldDsKKwl1aW50MzJfdCAqYmluZGluZ190YWJsZSwgYmluZGluZ190YWJsZV9v ZmZzZXQ7CiAKLQliaW5kaW5nX3RhYmxlID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9hbGxv YyhiYXRjaCwgOCwgMzIpOwotCW9mZnNldCA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zm c2V0KGJhdGNoLCBiaW5kaW5nX3RhYmxlKTsKLQlhbm5vdGF0aW9uX2FkZF9zdGF0ZSgmYXViX2Fu bm90YXRpb25zLCBBVUJfVFJBQ0VfQklORElOR19UQUJMRSwKLQkJCSAgICAgb2Zmc2V0LCA4KTsK KwliaW5kaW5nX3RhYmxlID0gaW50ZWxfYmJfcHRyX2FsaWduKGliYiwgMzIpOworCWJpbmRpbmdf dGFibGVfb2Zmc2V0ID0gaW50ZWxfYmJfcHRyX2FkZF9yZXR1cm5fcHJldl9vZmZzZXQoaWJiLCAz Mik7CiAKLQliaW5kaW5nX3RhYmxlWzBdID0gZ2VuOF9iaW5kX2J1ZihiYXRjaCwgZHN0LCAxKTsK LQliaW5kaW5nX3RhYmxlWzFdID0gZ2VuOF9iaW5kX2J1ZihiYXRjaCwgc3JjLCAwKTsKKwliaW5k aW5nX3RhYmxlWzBdID0gZ2VuOF9iaW5kX2J1ZihpYmIsIGRzdCwgMSk7CisJYmluZGluZ190YWJs ZVsxXSA9IGdlbjhfYmluZF9idWYoaWJiLCBzcmMsIDApOwogCi0JcmV0dXJuIG9mZnNldDsKKwly ZXR1cm4gYmluZGluZ190YWJsZV9vZmZzZXQ7CiB9CiAKIC8qIE1vc3RseSBjb3B5K3Bhc3RlIGZy b20gZ2VuNiwgZXhjZXB0IHdyYXAgbW9kZXMgbW92ZWQgKi8KIHN0YXRpYyB1aW50MzJfdAotZ2Vu OF9jcmVhdGVfc2FtcGxlcihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKSB7CitnZW44 X2NyZWF0ZV9zYW1wbGVyKHN0cnVjdCBpbnRlbF9iYiAqaWJiKSB7CiAJc3RydWN0IGdlbjhfc2Ft cGxlcl9zdGF0ZSAqc3M7Ci0JdWludDMyX3Qgb2Zmc2V0OwogCi0Jc3MgPSBpbnRlbF9iYXRjaGJ1 ZmZlcl9zdWJkYXRhX2FsbG9jKGJhdGNoLCBzaXplb2YoKnNzKSwgNjQpOwotCW9mZnNldCA9IGlu dGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNoLCBzcyk7Ci0JYW5ub3RhdGlvbl9h ZGRfc3RhdGUoJmF1Yl9hbm5vdGF0aW9ucywgQVVCX1RSQUNFX1NBTVBMRVJfU1RBVEUsCi0JCQkg ICAgIG9mZnNldCwgc2l6ZW9mKCpzcykpOworCXNzID0gaW50ZWxfYmJfcHRyX2FsaWduKGliYiwg NjQpOwogCiAJc3MtPnNzMC5taW5fZmlsdGVyID0gR0VONF9NQVBGSUxURVJfTkVBUkVTVDsKIAlz cy0+c3MwLm1hZ19maWx0ZXIgPSBHRU40X01BUEZJTFRFUl9ORUFSRVNUOwpAQCAtMzI5LDIxICsy NDAsMTUgQEAgZ2VuOF9jcmVhdGVfc2FtcGxlcihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJh dGNoKSB7CiAJICogc2FtcGxlciBmZXRjaCwgYnV0IGNvdWxkbid0IG1ha2UgaXQgd29yay4gKi8K IAlzcy0+c3MzLm5vbl9ub3JtYWxpemVkX2Nvb3JkID0gMDsKIAotCXJldHVybiBvZmZzZXQ7CisJ cmV0dXJuIGludGVsX2JiX3B0cl9hZGRfcmV0dXJuX3ByZXZfb2Zmc2V0KGliYiwgc2l6ZW9mKCpz cykpOwogfQogCiBzdGF0aWMgdWludDMyX3QKLWdlbjhfZmlsbF9wcyhzdHJ1Y3QgaW50ZWxfYmF0 Y2hidWZmZXIgKmJhdGNoLAorZ2VuOF9maWxsX3BzKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAogCSAg ICAgY29uc3QgdWludDMyX3Qga2VybmVsW11bNF0sCiAJICAgICBzaXplX3Qgc2l6ZSkKIHsKLQl1 aW50MzJfdCBvZmZzZXQ7Ci0KLQlvZmZzZXQgPSBpbnRlbF9iYXRjaGJ1ZmZlcl9jb3B5X2RhdGEo YmF0Y2gsIGtlcm5lbCwgc2l6ZSwgNjQpOwotCWFubm90YXRpb25fYWRkX3N0YXRlKCZhdWJfYW5u b3RhdGlvbnMsIEFVQl9UUkFDRV9LRVJORUxfSU5TVFJVQ1RJT05TLAotCQkJICAgICBvZmZzZXQs IHNpemUpOwotCi0JcmV0dXJuIG9mZnNldDsKKwlyZXR1cm4gaW50ZWxfYmJfY29weV9kYXRhKGli Yiwga2VybmVsLCBzaXplLCA2NCk7CiB9CiAKIC8qCkBAIC0zNTcsMzMgKzI2MiwyOSBAQCBnZW44 X2ZpbGxfcHMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKICAqIHNlZSBnZW42X2Vt aXRfdmVydGV4X2VsZW1lbnRzCiAgKi8KIHN0YXRpYyB1aW50MzJfdAotZ2VuN19maWxsX3ZlcnRl eF9idWZmZXJfZGF0YShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAotCQkJICAgICBj b25zdCBzdHJ1Y3QgaWd0X2J1ZiAqc3JjLAorZ2VuN19maWxsX3ZlcnRleF9idWZmZXJfZGF0YShz dHJ1Y3QgaW50ZWxfYmIgKmliYiwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGludGVsX2J1ZiAqc3Jj LAogCQkJICAgICB1aW50MzJfdCBzcmNfeCwgdWludDMyX3Qgc3JjX3ksCiAJCQkgICAgIHVpbnQz Ml90IGRzdF94LCB1aW50MzJfdCBkc3RfeSwKIAkJCSAgICAgdWludDMyX3Qgd2lkdGgsIHVpbnQz Ml90IGhlaWdodCkKIHsKLQl2b2lkICpzdGFydDsKIAl1aW50MzJfdCBvZmZzZXQ7CiAKLQlpbnRl bF9iYXRjaGJ1ZmZlcl9hbGlnbihiYXRjaCwgOCk7Ci0Jc3RhcnQgPSBiYXRjaC0+cHRyOworCWlu dGVsX2JiX3B0cl9hbGlnbihpYmIsIDgpOworCW9mZnNldCA9IGludGVsX2JiX29mZnNldChpYmIp OwogCi0JZW1pdF92ZXJ0ZXhfMnMoYmF0Y2gsIGRzdF94ICsgd2lkdGgsIGRzdF95ICsgaGVpZ2h0 KTsKLQllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGJhdGNoLCBzcmNfeCArIHdpZHRoLCBpZ3RfYnVm X3dpZHRoKHNyYykpOwotCWVtaXRfdmVydGV4X25vcm1hbGl6ZWQoYmF0Y2gsIHNyY195ICsgaGVp Z2h0LCBpZ3RfYnVmX2hlaWdodChzcmMpKTsKKwllbWl0X3ZlcnRleF8ycyhpYmIsIGRzdF94ICsg d2lkdGgsIGRzdF95ICsgaGVpZ2h0KTsKKwllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGliYiwgc3Jj X3ggKyB3aWR0aCwgaW50ZWxfYnVmX3dpZHRoKHNyYykpOworCWVtaXRfdmVydGV4X25vcm1hbGl6 ZWQoaWJiLCBzcmNfeSArIGhlaWdodCwgaW50ZWxfYnVmX2hlaWdodChzcmMpKTsKIAotCWVtaXRf dmVydGV4XzJzKGJhdGNoLCBkc3RfeCwgZHN0X3kgKyBoZWlnaHQpOwotCWVtaXRfdmVydGV4X25v cm1hbGl6ZWQoYmF0Y2gsIHNyY194LCBpZ3RfYnVmX3dpZHRoKHNyYykpOwotCWVtaXRfdmVydGV4 X25vcm1hbGl6ZWQoYmF0Y2gsIHNyY195ICsgaGVpZ2h0LCBpZ3RfYnVmX2hlaWdodChzcmMpKTsK KwllbWl0X3ZlcnRleF8ycyhpYmIsIGRzdF94LCBkc3RfeSArIGhlaWdodCk7CisJZW1pdF92ZXJ0 ZXhfbm9ybWFsaXplZChpYmIsIHNyY194LCBpbnRlbF9idWZfd2lkdGgoc3JjKSk7CisJZW1pdF92 ZXJ0ZXhfbm9ybWFsaXplZChpYmIsIHNyY195ICsgaGVpZ2h0LCBpbnRlbF9idWZfaGVpZ2h0KHNy YykpOwogCi0JZW1pdF92ZXJ0ZXhfMnMoYmF0Y2gsIGRzdF94LCBkc3RfeSk7Ci0JZW1pdF92ZXJ0 ZXhfbm9ybWFsaXplZChiYXRjaCwgc3JjX3gsIGlndF9idWZfd2lkdGgoc3JjKSk7Ci0JZW1pdF92 ZXJ0ZXhfbm9ybWFsaXplZChiYXRjaCwgc3JjX3ksIGlndF9idWZfaGVpZ2h0KHNyYykpOworCWVt aXRfdmVydGV4XzJzKGliYiwgZHN0X3gsIGRzdF95KTsKKwllbWl0X3ZlcnRleF9ub3JtYWxpemVk KGliYiwgc3JjX3gsIGludGVsX2J1Zl93aWR0aChzcmMpKTsKKwllbWl0X3ZlcnRleF9ub3JtYWxp emVkKGliYiwgc3JjX3ksIGludGVsX2J1Zl9oZWlnaHQoc3JjKSk7CiAKLQlvZmZzZXQgPSBpbnRl bF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX29mZnNldChiYXRjaCwgc3RhcnQpOwotCWFubm90YXRpb25f YWRkX3N0YXRlKCZhdWJfYW5ub3RhdGlvbnMsIEFVQl9UUkFDRV9WRVJURVhfQlVGRkVSLAotCQkJ ICAgICBvZmZzZXQsIDMgKiBWRVJURVhfU0laRSk7CiAJcmV0dXJuIG9mZnNldDsKIH0KIApAQCAt Mzk3LDI1ICsyOTgsMjUgQEAgZ2VuN19maWxsX3ZlcnRleF9idWZmZXJfZGF0YShzdHJ1Y3QgaW50 ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAogICogcGFja2VkLgogICovCiBzdGF0aWMgdm9pZAotZ2Vu Nl9lbWl0X3ZlcnRleF9lbGVtZW50cyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKSB7 CitnZW42X2VtaXRfdmVydGV4X2VsZW1lbnRzKHN0cnVjdCBpbnRlbF9iYiAqaWJiKSB7CiAJLyoK IAkgKiBUaGUgVlVFIGxheW91dAogCSAqICAgIGR3b3JkIDAtMzogcGFkICgwLCAwLCAwLiAwKQog CSAqICAgIGR3b3JkIDQtNzogcG9zaXRpb24gKHgsIHksIDAsIDEuMCksCiAJICogICAgZHdvcmQg OC0xMTogdGV4dHVyZSBjb29yZGluYXRlIDAgKHUwLCB2MCwgMCwgMS4wKQogCSAqLwotCU9VVF9C QVRDSChHRU40XzNEU1RBVEVfVkVSVEVYX0VMRU1FTlRTIHwgKDMgKiAyICsgMSAtIDIpKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCBHRU40XzNEU1RBVEVfVkVSVEVYX0VMRU1FTlRTIHwgKDMgKiAyICsg MSAtIDIpKTsKIAogCS8qIEVsZW1lbnQgc3RhdGUgMC4gVGhlc2UgYXJlIDQgZHdvcmRzIG9mIDAg cmVxdWlyZWQgZm9yIHRoZSBWVUUgZm9ybWF0LgogCSAqIFdlIGRvbid0IHJlYWxseSBrbm93IG9y IGNhcmUgd2hhdCB0aGV5IGRvLgogCSAqLwotCU9VVF9CQVRDSCgwIDw8IEdFTjZfVkUwX1ZFUlRF WF9CVUZGRVJfSU5ERVhfU0hJRlQgfCBHRU42X1ZFMF9WQUxJRCB8Ci0JCSAgU1VSRkFDRUZPUk1B VF9SMzJHMzJCMzJBMzJfRkxPQVQgPDwgVkUwX0ZPUk1BVF9TSElGVCB8Ci0JCSAgMCA8PCBWRTBf T0ZGU0VUX1NISUZUKTsgLyogd2Ugc3BlY2lmeSAwLCBidXQgaXQncyByZWFsbHkgZG9lcyBub3Qg ZXhpc3QgKi8KLQlPVVRfQkFUQ0goR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNP TVBPTkVOVF8wX1NISUZUIHwKLQkJICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwgVkUxX1ZG Q09NUE9ORU5UXzFfU0hJRlQgfAotCQkgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMCA8PCBWRTFf VkZDT01QT05FTlRfMl9TSElGVCB8Ci0JCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZF MV9WRkNPTVBPTkVOVF8zX1NISUZUKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwIDw8IEdFTjZfVkUw X1ZFUlRFWF9CVUZGRVJfSU5ERVhfU0hJRlQgfCBHRU42X1ZFMF9WQUxJRCB8CisJCSAgICAgU1VS RkFDRUZPUk1BVF9SMzJHMzJCMzJBMzJfRkxPQVQgPDwgVkUwX0ZPUk1BVF9TSElGVCB8CisJCSAg ICAgMCA8PCBWRTBfT0ZGU0VUX1NISUZUKTsgLyogd2Ugc3BlY2lmeSAwLCBidXQgaXQncyByZWFs bHkgZG9lcyBub3QgZXhpc3QgKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU40X1ZGQ09NUE9ORU5U X1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzBfU0hJRlQgfAorCQkgICAgIEdFTjRfVkZDT01Q T05FTlRfU1RPUkVfMCA8PCBWRTFfVkZDT01QT05FTlRfMV9TSElGVCB8CisJCSAgICAgR0VONF9W RkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9WRkNPTVBPTkVOVF8yX1NISUZUIHwKKwkJICAgICBH RU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9ORU5UXzNfU0hJRlQpOwogCiAJ LyogRWxlbWVudCBzdGF0ZSAxIC0gT3VyICJkZXN0aW5hdGlvbiIgdmVydGljZXMuIFRoZXNlIGFy ZSBwYXNzZWQgZG93bgogCSAqIHRocm91Z2ggdGhlIHBpcGVsaW5lLCBhbmQgZXZlbnR1YWxseSBt YWtlIGl0IHRvIHRoZSBwaXhlbCBzaGFkZXIgYXMKQEAgLTQyMywyNSArMzI0LDI1IEBAIGdlbjZf ZW1pdF92ZXJ0ZXhfZWxlbWVudHMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkgewog CSAqIHNpZ25lZC9zY2FsZWQgYmVjYXVzZSBvZiBnZW42IHJlbmRlcmNvcHkuIEkgc2VlIG5vIHBh cnRpY3VsYXIgcmVhc29uCiAJICogZm9yIGRvaW5nIHRoaXMgdGhvdWdoLgogCSAqLwotCU9VVF9C QVRDSCgwIDw8IEdFTjZfVkUwX1ZFUlRFWF9CVUZGRVJfSU5ERVhfU0hJRlQgfCBHRU42X1ZFMF9W QUxJRCB8Ci0JCSAgU1VSRkFDRUZPUk1BVF9SMTZHMTZfU1NDQUxFRCA8PCBWRTBfRk9STUFUX1NI SUZUIHwKLQkJICAwIDw8IFZFMF9PRkZTRVRfU0hJRlQpOyAvKiBvZmZzZXRzIHZiIGluIGJ5dGVz ICovCi0JT1VUX0JBVENIKEdFTjRfVkZDT01QT05FTlRfU1RPUkVfU1JDIDw8IFZFMV9WRkNPTVBP TkVOVF8wX1NISUZUIHwKLQkJICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFX1NSQyA8PCBWRTFfVkZD T01QT05FTlRfMV9TSElGVCB8Ci0JCSAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8wIDw8IFZFMV9W RkNPTVBPTkVOVF8yX1NISUZUIHwKLQkJICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzFfRkxUIDw8 IFZFMV9WRkNPTVBPTkVOVF8zX1NISUZUKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwIDw8IEdFTjZf VkUwX1ZFUlRFWF9CVUZGRVJfSU5ERVhfU0hJRlQgfCBHRU42X1ZFMF9WQUxJRCB8CisJCSAgICAg U1VSRkFDRUZPUk1BVF9SMTZHMTZfU1NDQUxFRCA8PCBWRTBfRk9STUFUX1NISUZUIHwKKwkJICAg ICAwIDw8IFZFMF9PRkZTRVRfU0hJRlQpOyAvKiBvZmZzZXRzIHZiIGluIGJ5dGVzICovCisJaW50 ZWxfYmJfb3V0KGliYiwgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV9TUkMgPDwgVkUxX1ZGQ09NUE9O RU5UXzBfU0hJRlQgfAorCQkgICAgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfU1JDIDw8IFZFMV9W RkNPTVBPTkVOVF8xX1NISUZUIHwKKwkJICAgICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwg VkUxX1ZGQ09NUE9ORU5UXzJfU0hJRlQgfAorCQkgICAgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVf MV9GTFQgPDwgVkUxX1ZGQ09NUE9ORU5UXzNfU0hJRlQpOwogCiAJLyogRWxlbWVudCBzdGF0ZSAy LiBMYXN0IGJ1dCBub3QgbGVhc3Qgd2Ugc3RvcmUgdGhlIFUsViBjb21wb25lbnRzIGFzCiAJICog bm9ybWFsaXplZCBmbG9hdHMuIFRoZXNlIHdpbGwgYmUgdXNlZCBpbiB0aGUgcGl4ZWwgc2hhZGVy IHRvIHNhbXBsZQogCSAqIGZyb20gdGhlIHNvdXJjZSBidWZmZXIuCiAJICovCi0JT1VUX0JBVENI KDAgPDwgR0VONl9WRTBfVkVSVEVYX0JVRkZFUl9JTkRFWF9TSElGVCB8IEdFTjZfVkUwX1ZBTElE IHwKLQkJICBTVVJGQUNFRk9STUFUX1IzMkczMl9GTE9BVCA8PCBWRTBfRk9STUFUX1NISUZUIHwK LQkJICA0IDw8IFZFMF9PRkZTRVRfU0hJRlQpOwkvKiBvZmZzZXQgdmIgaW4gYnl0ZXMgKi8KLQlP VVRfQkFUQ0goR0VONF9WRkNPTVBPTkVOVF9TVE9SRV9TUkMgPDwgVkUxX1ZGQ09NUE9ORU5UXzBf U0hJRlQgfAotCQkgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfU1JDIDw8IFZFMV9WRkNPTVBPTkVO VF8xX1NISUZUIHwKLQkJICBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFXzAgPDwgVkUxX1ZGQ09NUE9O RU5UXzJfU0hJRlQgfAotCQkgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMV9GTFQgPDwgVkUxX1ZG Q09NUE9ORU5UXzNfU0hJRlQpOworCWludGVsX2JiX291dChpYmIsIDAgPDwgR0VONl9WRTBfVkVS VEVYX0JVRkZFUl9JTkRFWF9TSElGVCB8IEdFTjZfVkUwX1ZBTElEIHwKKwkJICAgICBTVVJGQUNF Rk9STUFUX1IzMkczMl9GTE9BVCA8PCBWRTBfRk9STUFUX1NISUZUIHwKKwkJICAgICA0IDw8IFZF MF9PRkZTRVRfU0hJRlQpOwkvKiBvZmZzZXQgdmIgaW4gYnl0ZXMgKi8KKwlpbnRlbF9iYl9vdXQo aWJiLCBHRU40X1ZGQ09NUE9ORU5UX1NUT1JFX1NSQyA8PCBWRTFfVkZDT01QT05FTlRfMF9TSElG VCB8CisJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV9TUkMgPDwgVkUxX1ZGQ09NUE9ORU5U XzFfU0hJRlQgfAorCQkgICAgIEdFTjRfVkZDT01QT05FTlRfU1RPUkVfMCA8PCBWRTFfVkZDT01Q T05FTlRfMl9TSElGVCB8CisJCSAgICAgR0VONF9WRkNPTVBPTkVOVF9TVE9SRV8xX0ZMVCA8PCBW RTFfVkZDT01QT05FTlRfM19TSElGVCk7CiB9CiAKIC8qCkBAIC00NTAsNDIgKzM1MSwzNSBAQCBn ZW42X2VtaXRfdmVydGV4X2VsZW1lbnRzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gp IHsKICAqIEBiYXRjaAogICogQG9mZnNldCAtIGJ5dHcgb2Zmc2V0IHdpdGhpbiB0aGUgQGJhdGNo IHdoZXJlIHRoZSB2ZXJ0ZXggYnVmZmVyIHN0YXJ0cy4KICAqLwotc3RhdGljIHZvaWQgZ2VuN19l bWl0X3ZlcnRleF9idWZmZXIoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCQkg ICAgdWludDMyX3Qgb2Zmc2V0KSB7Ci0JT1VUX0JBVENIKEdFTjRfM0RTVEFURV9WRVJURVhfQlVG RkVSUyB8ICgxICsgKDQgKiAxKSAtIDIpKTsKLQlPVVRfQkFUQ0goMCA8PCBHRU42X1ZCMF9CVUZG RVJfSU5ERVhfU0hJRlQgfCAvKiBWQiAwdGggaW5kZXggKi8KLQkJICBHRU44X1ZCMF9CVUZGRVJf QUREUl9NT0RfRU4gfCAvKiBBZGRyZXNzIE1vZGlmeSBFbmFibGUgKi8KLQkJICBWRVJURVhfU0la RSA8PCBWQjBfQlVGRkVSX1BJVENIX1NISUZUKTsKLQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1 X0dFTV9ET01BSU5fVkVSVEVYLCAwLCBvZmZzZXQpOwotCU9VVF9CQVRDSCgzICogVkVSVEVYX1NJ WkUpOworc3RhdGljIHZvaWQgZ2VuN19lbWl0X3ZlcnRleF9idWZmZXIoc3RydWN0IGludGVsX2Ji ICppYmIsIHVpbnQzMl90IG9mZnNldCkKK3sKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU40XzNEU1RB VEVfVkVSVEVYX0JVRkZFUlMgfCAoMSArICg0ICogMSkgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGli YiwgMCA8PCBHRU42X1ZCMF9CVUZGRVJfSU5ERVhfU0hJRlQgfCAvKiBWQiAwdGggaW5kZXggKi8K KwkJICAgICBHRU44X1ZCMF9CVUZGRVJfQUREUl9NT0RfRU4gfCAvKiBBZGRyZXNzIE1vZGlmeSBF bmFibGUgKi8KKwkJICAgICBWRVJURVhfU0laRSA8PCBWQjBfQlVGRkVSX1BJVENIX1NISUZUKTsK KwlpbnRlbF9iYl9lbWl0X3JlbG9jKGliYiwgaWJiLT5oYW5kbGUsCisJCQkgICAgSTkxNV9HRU1f RE9NQUlOX1ZFUlRFWCwgMCwKKwkJCSAgICBvZmZzZXQsIGliYi0+YmF0Y2hfb2Zmc2V0KTsKKwlp bnRlbF9iYl9vdXQoaWJiLCAzICogVkVSVEVYX1NJWkUpOwogfQogCiBzdGF0aWMgdWludDMyX3QK LWdlbjZfY3JlYXRlX2NjX3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitn ZW42X2NyZWF0ZV9jY19zdGF0ZShzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKIAlzdHJ1Y3QgZ2Vu Nl9jb2xvcl9jYWxjX3N0YXRlICpjY19zdGF0ZTsKLQl1aW50MzJfdCBvZmZzZXQ7CiAKLQljY19z dGF0ZSA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfYWxsb2MoYmF0Y2gsCi0JCQkJCQkgICBz aXplb2YoKmNjX3N0YXRlKSwgNjQpOwotCW9mZnNldCA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRh dGFfb2Zmc2V0KGJhdGNoLCBjY19zdGF0ZSk7Ci0JYW5ub3RhdGlvbl9hZGRfc3RhdGUoJmF1Yl9h bm5vdGF0aW9ucywgQVVCX1RSQUNFX0NDX1NUQVRFLAotCQkJICAgICBvZmZzZXQsIHNpemVvZigq Y2Nfc3RhdGUpKTsKKwljY19zdGF0ZSA9IGludGVsX2JiX3B0cl9hbGlnbihpYmIsIDY0KTsKIAot CXJldHVybiBvZmZzZXQ7CisJcmV0dXJuIGludGVsX2JiX3B0cl9hZGRfcmV0dXJuX3ByZXZfb2Zm c2V0KGliYiwgc2l6ZW9mKCpjY19zdGF0ZSkpOwogfQogCiBzdGF0aWMgdWludDMyX3QKLWdlbjhf Y3JlYXRlX2JsZW5kX3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpCitnZW44 X2NyZWF0ZV9ibGVuZF9zdGF0ZShzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKIAlzdHJ1Y3QgZ2Vu OF9ibGVuZF9zdGF0ZSAqYmxlbmQ7CiAJaW50IGk7Ci0JdWludDMyX3Qgb2Zmc2V0OwogCi0JYmxl bmQgPSBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX2FsbG9jKGJhdGNoLCBzaXplb2YoKmJsZW5k KSwgNjQpOwotCW9mZnNldCA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfb2Zmc2V0KGJhdGNo LCBibGVuZCk7Ci0JYW5ub3RhdGlvbl9hZGRfc3RhdGUoJmF1Yl9hbm5vdGF0aW9ucywgQVVCX1RS QUNFX0JMRU5EX1NUQVRFLAotCQkJICAgICBvZmZzZXQsIHNpemVvZigqYmxlbmQpKTsKKwlibGVu ZCA9IGludGVsX2JiX3B0cl9hbGlnbihpYmIsIDY0KTsKIAogCWZvciAoaSA9IDA7IGkgPCAxNjsg aSsrKSB7CiAJCWJsZW5kLT5ic1tpXS5kZXN0X2JsZW5kX2ZhY3RvciA9IEdFTjZfQkxFTkRGQUNU T1JfWkVSTzsKQEAgLTQ5NSw0NjYgKzM4OSw0NTggQEAgZ2VuOF9jcmVhdGVfYmxlbmRfc3RhdGUo c3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKIAkJYmxlbmQtPmJzW2ldLmNvbG9yX2J1 ZmZlcl9ibGVuZCA9IDA7CiAJfQogCi0JcmV0dXJuIG9mZnNldDsKKwlyZXR1cm4gaW50ZWxfYmJf cHRyX2FkZF9yZXR1cm5fcHJldl9vZmZzZXQoaWJiLCBzaXplb2YoKmJsZW5kKSk7CiB9CiAKIHN0 YXRpYyB1aW50MzJfdAotZ2VuNl9jcmVhdGVfY2Nfdmlld3BvcnQoc3RydWN0IGludGVsX2JhdGNo YnVmZmVyICpiYXRjaCkKK2dlbjZfY3JlYXRlX2NjX3ZpZXdwb3J0KHN0cnVjdCBpbnRlbF9iYiAq aWJiKQogewogCXN0cnVjdCBnZW40X2NjX3ZpZXdwb3J0ICp2cDsKLQl1aW50MzJfdCBvZmZzZXQ7 CiAKLQl2cCA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfYWxsb2MoYmF0Y2gsIHNpemVvZigq dnApLCAzMik7Ci0Jb2Zmc2V0ID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9vZmZzZXQoYmF0 Y2gsIHZwKTsKLQlhbm5vdGF0aW9uX2FkZF9zdGF0ZSgmYXViX2Fubm90YXRpb25zLCBBVUJfVFJB Q0VfQ0NfVlBfU1RBVEUsCi0JCQkgICAgIG9mZnNldCwgc2l6ZW9mKCp2cCkpOworCXZwID0gaW50 ZWxfYmJfcHRyX2FsaWduKGliYiwgMzIpOwogCiAJLyogWFhYIEkgZG9uJ3QgdW5kZXJzdGFuZCB0 aGlzICovCiAJdnAtPm1pbl9kZXB0aCA9IC0xLmUzNTsKIAl2cC0+bWF4X2RlcHRoID0gMS5lMzU7 CiAKLQlyZXR1cm4gb2Zmc2V0OworCXJldHVybiBpbnRlbF9iYl9wdHJfYWRkX3JldHVybl9wcmV2 X29mZnNldChpYmIsIHNpemVvZigqdnApKTsKIH0KIAogc3RhdGljIHVpbnQzMl90Ci1nZW43X2Ny ZWF0ZV9zZl9jbGlwX3ZpZXdwb3J0KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpIHsK K2dlbjdfY3JlYXRlX3NmX2NsaXBfdmlld3BvcnQoc3RydWN0IGludGVsX2JiICppYmIpIHsKIAkv KiBYWFggdGhlc2UgYXJlIGxpa2VseSBub3QgbmVlZGVkICovCiAJc3RydWN0IGdlbjdfc2ZfY2xp cF92aWV3cG9ydCAqc2N2X3N0YXRlOwotCXVpbnQzMl90IG9mZnNldDsKIAotCXNjdl9zdGF0ZSA9 IGludGVsX2JhdGNoYnVmZmVyX3N1YmRhdGFfYWxsb2MoYmF0Y2gsCi0JCQkJCQkgICAgc2l6ZW9m KCpzY3Zfc3RhdGUpLCA2NCk7Ci0Jb2Zmc2V0ID0gaW50ZWxfYmF0Y2hidWZmZXJfc3ViZGF0YV9v ZmZzZXQoYmF0Y2gsIHNjdl9zdGF0ZSk7Ci0JYW5ub3RhdGlvbl9hZGRfc3RhdGUoJmF1Yl9hbm5v dGF0aW9ucywgQVVCX1RSQUNFX0NMSVBfVlBfU1RBVEUsCi0JCQkgICAgIG9mZnNldCwgc2l6ZW9m KCpzY3Zfc3RhdGUpKTsKKwlzY3Zfc3RhdGUgPSBpbnRlbF9iYl9wdHJfYWxpZ24oaWJiLCA2NCk7 CiAKIAlzY3Zfc3RhdGUtPmd1YXJkYmFuZC54bWluID0gMDsKIAlzY3Zfc3RhdGUtPmd1YXJkYmFu ZC54bWF4ID0gMS4wZjsKIAlzY3Zfc3RhdGUtPmd1YXJkYmFuZC55bWluID0gMDsKIAlzY3Zfc3Rh dGUtPmd1YXJkYmFuZC55bWF4ID0gMS4wZjsKIAotCXJldHVybiBvZmZzZXQ7CisJcmV0dXJuIGlu dGVsX2JiX3B0cl9hZGRfcmV0dXJuX3ByZXZfb2Zmc2V0KGliYiwgc2l6ZW9mKCpzY3Zfc3RhdGUp KTsKIH0KIAogc3RhdGljIHVpbnQzMl90Ci1nZW42X2NyZWF0ZV9zY2lzc29yX3JlY3Qoc3RydWN0 IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkKK2dlbjZfY3JlYXRlX3NjaXNzb3JfcmVjdChzdHJ1 Y3QgaW50ZWxfYmIgKmliYikKIHsKIAlzdHJ1Y3QgZ2VuNl9zY2lzc29yX3JlY3QgKnNjaXNzb3I7 Ci0JdWludDMyX3Qgb2Zmc2V0OwogCi0Jc2Npc3NvciA9IGludGVsX2JhdGNoYnVmZmVyX3N1YmRh dGFfYWxsb2MoYmF0Y2gsIHNpemVvZigqc2Npc3NvciksIDY0KTsKLQlvZmZzZXQgPSBpbnRlbF9i YXRjaGJ1ZmZlcl9zdWJkYXRhX29mZnNldChiYXRjaCwgc2Npc3Nvcik7Ci0JYW5ub3RhdGlvbl9h ZGRfc3RhdGUoJmF1Yl9hbm5vdGF0aW9ucywgQVVCX1RSQUNFX1NDSVNTT1JfU1RBVEUsCi0JCQkg ICAgIG9mZnNldCwgc2l6ZW9mKCpzY2lzc29yKSk7CisJc2Npc3NvciA9IGludGVsX2JiX3B0cl9h bGlnbihpYmIsIDY0KTsKIAotCXJldHVybiBvZmZzZXQ7CisJcmV0dXJuIGludGVsX2JiX3B0cl9h ZGRfcmV0dXJuX3ByZXZfb2Zmc2V0KGliYiwgc2l6ZW9mKCpzY2lzc29yKSk7CiB9CiAKIHN0YXRp YyB2b2lkCi1nZW44X2VtaXRfc2lwKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpIHsK LQlPVVRfQkFUQ0goR0VONF9TVEFURV9TSVAgfCAoMyAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0J T1VUX0JBVENIKDApOworZ2VuOF9lbWl0X3NpcChzdHJ1Y3QgaW50ZWxfYmIgKmliYikgeworCWlu dGVsX2JiX291dChpYmIsIEdFTjRfU1RBVEVfU0lQIHwgKDMgLSAyKSk7CisJaW50ZWxfYmJfb3V0 KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW43 X2VtaXRfcHVzaF9jb25zdGFudHMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCkgewot CU9VVF9CQVRDSChHRU43XzNEU1RBVEVfUFVTSF9DT05TVEFOVF9BTExPQ19WUyk7Ci0JT1VUX0JB VENIKDApOwotCU9VVF9CQVRDSChHRU44XzNEU1RBVEVfUFVTSF9DT05TVEFOVF9BTExPQ19IUyk7 Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSChHRU44XzNEU1RBVEVfUFVTSF9DT05TVEFOVF9B TExPQ19EUyk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSChHRU44XzNEU1RBVEVfUFVTSF9D T05TVEFOVF9BTExPQ19HUyk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSChHRU43XzNEU1RB VEVfUFVTSF9DT05TVEFOVF9BTExPQ19QUyk7Ci0JT1VUX0JBVENIKDApOworZ2VuN19lbWl0X3B1 c2hfY29uc3RhbnRzKHN0cnVjdCBpbnRlbF9iYiAqaWJiKSB7CisJaW50ZWxfYmJfb3V0KGliYiwg R0VON18zRFNUQVRFX1BVU0hfQ09OU1RBTlRfQUxMT0NfVlMpOworCWludGVsX2JiX291dChpYmIs IDApOworCWludGVsX2JiX291dChpYmIsIEdFTjhfM0RTVEFURV9QVVNIX0NPTlNUQU5UX0FMTE9D X0hTKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU44XzNE U1RBVEVfUFVTSF9DT05TVEFOVF9BTExPQ19EUyk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJ aW50ZWxfYmJfb3V0KGliYiwgR0VOOF8zRFNUQVRFX1BVU0hfQ09OU1RBTlRfQUxMT0NfR1MpOwor CWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIEdFTjdfM0RTVEFURV9Q VVNIX0NPTlNUQU5UX0FMTE9DX1BTKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIH0KIAogc3Rh dGljIHZvaWQKLWdlbjlfZW1pdF9zdGF0ZV9iYXNlX2FkZHJlc3Moc3RydWN0IGludGVsX2JhdGNo YnVmZmVyICpiYXRjaCkgeworZ2VuOV9lbWl0X3N0YXRlX2Jhc2VfYWRkcmVzcyhzdHJ1Y3QgaW50 ZWxfYmIgKmliYikgewogCiAJLyogV2FCaW5kbGVzc1N1cmZhY2VTdGF0ZU1vZGlmeUVuYWJsZTpz a2wsYnh0ICovCiAJLyogVGhlIGxlbmd0aCBoYXMgdG8gYmUgb25lIGxlc3MgaWYgd2UgZG9udCBt b2RpZnkKIAkgICBiaW5kbGVzcyBzdGF0ZSAqLwotCU9VVF9CQVRDSChHRU40X1NUQVRFX0JBU0Vf QUREUkVTUyB8ICgxOSAtIDEgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONF9TVEFURV9C QVNFX0FERFJFU1MgfCAoMTkgLSAxIC0gMikpOwogCiAJLyogZ2VuZXJhbCAqLwotCU9VVF9CQVRD SCgwIHwgQkFTRV9BRERSRVNTX01PRElGWSk7Ci0JT1VUX0JBVENIKDApOworCWludGVsX2JiX291 dChpYmIsIDAgfCBCQVNFX0FERFJFU1NfTU9ESUZZKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsK IAogCS8qIHN0YXRlbGVzcyBkYXRhIHBvcnQgKi8KLQlPVVRfQkFUQ0goMCB8IEJBU0VfQUREUkVT U19NT0RJRlkpOworCWludGVsX2JiX291dChpYmIsIDAgfCBCQVNFX0FERFJFU1NfTU9ESUZZKTsK IAogCS8qIHN1cmZhY2UgKi8KLQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5f U0FNUExFUiwgMCwgQkFTRV9BRERSRVNTX01PRElGWSk7CisJaW50ZWxfYmJfZW1pdF9yZWxvYyhp YmIsIGliYi0+aGFuZGxlLAorCQkJICAgIEk5MTVfR0VNX0RPTUFJTl9TQU1QTEVSLCAwLAorCQkJ ICAgIEJBU0VfQUREUkVTU19NT0RJRlksIGliYi0+YmF0Y2hfb2Zmc2V0KTsKIAogCS8qIGR5bmFt aWMgKi8KLQlPVVRfUkVMT0MoYmF0Y2gtPmJvLCBJOTE1X0dFTV9ET01BSU5fUkVOREVSIHwgSTkx NV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLAotCQkgIDAsIEJBU0VfQUREUkVTU19NT0RJRlkpOwor CWludGVsX2JiX2VtaXRfcmVsb2MoaWJiLCBpYmItPmhhbmRsZSwKKwkJCSAgICBJOTE1X0dFTV9E T01BSU5fUkVOREVSIHwgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCAwLAorCQkJICAgIEJB U0VfQUREUkVTU19NT0RJRlksIGliYi0+YmF0Y2hfb2Zmc2V0KTsKIAogCS8qIGluZGlyZWN0ICov Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIAogCS8qIGluc3RydWN0aW9uICovCi0JT1VUX1JFTE9D KGJhdGNoLT5ibywgSTkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCAwLCBCQVNFX0FERFJFU1Nf TU9ESUZZKTsKKwlpbnRlbF9iYl9lbWl0X3JlbG9jKGliYiwgaWJiLT5oYW5kbGUsCisJCQkgICAg STkxNV9HRU1fRE9NQUlOX0lOU1RSVUNUSU9OLCAwLAorCQkJICAgIEJBU0VfQUREUkVTU19NT0RJ RlksIGliYi0+YmF0Y2hfb2Zmc2V0KTsKIAogCS8qIGdlbmVyYWwgc3RhdGUgYnVmZmVyIHNpemUg Ki8KLQlPVVRfQkFUQ0goMHhmZmZmZjAwMCB8IDEpOworCWludGVsX2JiX291dChpYmIsIDB4ZmZm ZmYwMDAgfCAxKTsKIAkvKiBkeW5hbWljIHN0YXRlIGJ1ZmZlciBzaXplICovCi0JT1VUX0JBVENI KDEgPDwgMTIgfCAxKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAxIDw8IDEyIHwgMSk7CiAJLyogaW5k aXJlY3Qgb2JqZWN0IGJ1ZmZlciBzaXplICovCi0JT1VUX0JBVENIKDB4ZmZmZmYwMDAgfCAxKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCAweGZmZmZmMDAwIHwgMSk7CiAJLyogaW50cnVjdGlvbiBidWZm ZXIgc2l6ZSAqLwotCU9VVF9CQVRDSCgxIDw8IDEyIHwgMSk7CisJaW50ZWxfYmJfb3V0KGliYiwg MSA8PCAxMiB8IDEpOwogCiAJLyogQmluZGxlc3Mgc3VyZmFjZSBzdGF0ZSBiYXNlIGFkZHJlc3Mg Ki8KLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKKwlpbnRl bF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQo aWJiLCAwKTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjdfZW1pdF91cmIoc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCkgeworZ2VuN19lbWl0X3VyYihzdHJ1Y3QgaW50ZWxfYmIgKmliYikg ewogCS8qIFhYWDogTWluIHZhbGlkIHZhbHVlcyBmcm9tIG1lc2EgKi8KIAljb25zdCBpbnQgdnNf ZW50cmllcyA9IDY0OwogCWNvbnN0IGludCB2c19zaXplID0gMjsKIAljb25zdCBpbnQgdnNfc3Rh cnQgPSA0OwogCi0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9VUkJfVlMpOwotCU9VVF9CQVRDSCh2 c19lbnRyaWVzIHwgKCh2c19zaXplIC0gMSkgPDwgMTYpIHwgKHZzX3N0YXJ0IDw8IDI1KSk7Ci0J T1VUX0JBVENIKEdFTjdfM0RTVEFURV9VUkJfR1MpOwotCU9VVF9CQVRDSCh2c19zdGFydCA8PCAy NSk7Ci0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9VUkJfSFMpOwotCU9VVF9CQVRDSCh2c19zdGFy dCA8PCAyNSk7Ci0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9VUkJfRFMpOwotCU9VVF9CQVRDSCh2 c19zdGFydCA8PCAyNSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX1VSQl9WUyk7 CisJaW50ZWxfYmJfb3V0KGliYiwgdnNfZW50cmllcyB8ICgodnNfc2l6ZSAtIDEpIDw8IDE2KSB8 ICh2c19zdGFydCA8PCAyNSkpOworCWludGVsX2JiX291dChpYmIsIEdFTjdfM0RTVEFURV9VUkJf R1MpOworCWludGVsX2JiX291dChpYmIsIHZzX3N0YXJ0IDw8IDI1KTsKKwlpbnRlbF9iYl9vdXQo aWJiLCBHRU43XzNEU1RBVEVfVVJCX0hTKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCB2c19zdGFydCA8 PCAyNSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX1VSQl9EUyk7CisJaW50ZWxf YmJfb3V0KGliYiwgdnNfc3RhcnQgPDwgMjUpOwogfQogCiBzdGF0aWMgdm9pZAotZ2VuOF9lbWl0 X2NjKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpIHsKLQlPVVRfQkFUQ0goR0VON18z RFNUQVRFX0JMRU5EX1NUQVRFX1BPSU5URVJTKTsKLQlPVVRfQkFUQ0goY2MuYmxlbmRfc3RhdGUg fCAxKTsKK2dlbjhfZW1pdF9jYyhzdHJ1Y3QgaW50ZWxfYmIgKmliYikgeworCWludGVsX2JiX291 dChpYmIsIEdFTjdfM0RTVEFURV9CTEVORF9TVEFURV9QT0lOVEVSUyk7CisJaW50ZWxfYmJfb3V0 KGliYiwgY2MuYmxlbmRfc3RhdGUgfCAxKTsKIAotCU9VVF9CQVRDSChHRU42XzNEU1RBVEVfQ0Nf U1RBVEVfUE9JTlRFUlMpOwotCU9VVF9CQVRDSChjYy5jY19zdGF0ZSB8IDEpOworCWludGVsX2Ji X291dChpYmIsIEdFTjZfM0RTVEFURV9DQ19TVEFURV9QT0lOVEVSUyk7CisJaW50ZWxfYmJfb3V0 KGliYiwgY2MuY2Nfc3RhdGUgfCAxKTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjhfZW1pdF9tdWx0 aXNhbXBsZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKSB7Ci0JT1VUX0JBVENIKEdF TjhfM0RTVEFURV9NVUxUSVNBTVBMRSB8IDApOwotCU9VVF9CQVRDSCgwKTsKK2dlbjhfZW1pdF9t dWx0aXNhbXBsZShzdHJ1Y3QgaW50ZWxfYmIgKmliYikgeworCWludGVsX2JiX291dChpYmIsIEdF TjhfM0RTVEFURV9NVUxUSVNBTVBMRSB8IDApOworCWludGVsX2JiX291dChpYmIsIDApOwogCi0J T1VUX0JBVENIKEdFTjZfM0RTVEFURV9TQU1QTEVfTUFTSyk7Ci0JT1VUX0JBVENIKDEpOworCWlu dGVsX2JiX291dChpYmIsIEdFTjZfM0RTVEFURV9TQU1QTEVfTUFTSyk7CisJaW50ZWxfYmJfb3V0 KGliYiwgMSk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW44X2VtaXRfdnMoc3RydWN0IGludGVsX2Jh dGNoYnVmZmVyICpiYXRjaCkgewotCU9VVF9CQVRDSChHRU42XzNEU1RBVEVfQ09OU1RBTlRfVlMg fCAoMTEtMikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDAp OwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9C QVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsK LQotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfQklORElOR19UQUJMRV9QT0lOVEVSU19WUyk7Ci0J T1VUX0JBVENIKDApOwotCi0JT1VUX0JBVENIKEdFTjdfM0RTVEFURV9TQU1QTEVSX1NUQVRFX1BP SU5URVJTX1ZTKTsKLQlPVVRfQkFUQ0goMCk7Ci0KLQlPVVRfQkFUQ0goR0VONl8zRFNUQVRFX1ZT IHwgKDktMikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDAp OwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9C QVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7CitnZW44X2VtaXRfdnMoc3RydWN0IGludGVsX2JiICpp YmIpIHsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU42XzNEU1RBVEVfQ09OU1RBTlRfVlMgfCAoMTEt MikpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWlu dGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291 dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDAp OworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVs X2JiX291dChpYmIsIDApOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX0JJTkRJ TkdfVEFCTEVfUE9JTlRFUlNfVlMpOworCWludGVsX2JiX291dChpYmIsIDApOworCisJaW50ZWxf YmJfb3V0KGliYiwgR0VON18zRFNUQVRFX1NBTVBMRVJfU1RBVEVfUE9JTlRFUlNfVlMpOworCWlu dGVsX2JiX291dChpYmIsIDApOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRFX1ZT IHwgKDktMikpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDAp OworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVs X2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChp YmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOwogfQogCiBzdGF0aWMgdm9pZAotZ2VuOF9l bWl0X2hzKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpIHsKLQlPVVRfQkFUQ0goR0VO N18zRFNUQVRFX0NPTlNUQU5UX0hTIHwgKDExLTIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JB VENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwot CU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRD SCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0KLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX0hTIHwgKDkt MikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9V VF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgw KTsKLQlPVVRfQkFUQ0goMCk7Ci0KLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX0JJTkRJTkdfVEFC TEVfUE9JTlRFUlNfSFMpOwotCU9VVF9CQVRDSCgwKTsKLQotCU9VVF9CQVRDSChHRU44XzNEU1RB VEVfU0FNUExFUl9TVEFURV9QT0lOVEVSU19IUyk7Ci0JT1VUX0JBVENIKDApOworZ2VuOF9lbWl0 X2hzKHN0cnVjdCBpbnRlbF9iYiAqaWJiKSB7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNU QVRFX0NPTlNUQU5UX0hTIHwgKDExLTIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRl bF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQo aWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKworCWludGVsX2JiX291dChp YmIsIEdFTjdfM0RTVEFURV9IUyB8ICg5LTIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9v dXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAw KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKworCWlu dGVsX2JiX291dChpYmIsIEdFTjdfM0RTVEFURV9CSU5ESU5HX1RBQkxFX1BPSU5URVJTX0hTKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKworCWludGVsX2JiX291dChpYmIsIEdFTjhfM0RTVEFU RV9TQU1QTEVSX1NUQVRFX1BPSU5URVJTX0hTKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIH0K IAogc3RhdGljIHZvaWQKLWdlbjhfZW1pdF9ncyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJh dGNoKSB7Ci0JT1VUX0JBVENIKEdFTjZfM0RTVEFURV9DT05TVEFOVF9HUyB8ICgxMS0yKSk7Ci0J T1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENI KDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9V VF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCi0JT1VUX0JBVENI KEdFTjZfM0RTVEFURV9HUyB8ICgxMC0yKSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgw KTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRf QkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7 Ci0KLQlPVVRfQkFUQ0goR0VON18zRFNUQVRFX0JJTkRJTkdfVEFCTEVfUE9JTlRFUlNfR1MpOwot CU9VVF9CQVRDSCgwKTsKLQotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfU0FNUExFUl9TVEFURV9Q T0lOVEVSU19HUyk7Ci0JT1VUX0JBVENIKDApOworZ2VuOF9lbWl0X2dzKHN0cnVjdCBpbnRlbF9i YiAqaWJiKSB7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRFX0NPTlNUQU5UX0dTIHwg KDExLTIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCAwKTsKKworCWludGVsX2JiX291dChpYmIsIEdFTjZfM0RTVEFURV9H UyB8ICgxMC0yKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwg MCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50 ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0 KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7 CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfQklORElOR19UQUJMRV9QT0lOVEVS U19HUyk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43 XzNEU1RBVEVfU0FNUExFUl9TVEFURV9QT0lOVEVSU19HUyk7CisJaW50ZWxfYmJfb3V0KGliYiwg MCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW45X2VtaXRfZHMoc3RydWN0IGludGVsX2JhdGNoYnVm ZmVyICpiYXRjaCkgewotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfQ09OU1RBTlRfRFMgfCAoMTEt MikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9V VF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgw KTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQotCU9V VF9CQVRDSChHRU43XzNEU1RBVEVfRFMgfCAoMTEtMikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRf QkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7 Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JB VENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfQklORElO R19UQUJMRV9QT0lOVEVSU19EUyk7Ci0JT1VUX0JBVENIKDApOwotCi0JT1VUX0JBVENIKEdFTjhf M0RTVEFURV9TQU1QTEVSX1NUQVRFX1BPSU5URVJTX0RTKTsKLQlPVVRfQkFUQ0goMCk7CitnZW45 X2VtaXRfZHMoc3RydWN0IGludGVsX2JiICppYmIpIHsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43 XzNEU1RBVEVfQ09OU1RBTlRfRFMgfCAoMTEtMikpOworCWludGVsX2JiX291dChpYmIsIDApOwor CWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2Ji X291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIs IDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWlu dGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCisJaW50ZWxfYmJf b3V0KGliYiwgR0VON18zRFNUQVRFX0RTIHwgKDExLTIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAw KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRl bF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQo aWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKworCWludGVs X2JiX291dChpYmIsIEdFTjdfM0RTVEFURV9CSU5ESU5HX1RBQkxFX1BPSU5URVJTX0RTKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCAwKTsKKworCWludGVsX2JiX291dChpYmIsIEdFTjhfM0RTVEFURV9T QU1QTEVSX1NUQVRFX1BPSU5URVJTX0RTKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIH0KIAog CiBzdGF0aWMgdm9pZAotZ2VuOF9lbWl0X3dtX2h6X29wKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZl ciAqYmF0Y2gpIHsKLQlPVVRfQkFUQ0goR0VOOF8zRFNUQVRFX1dNX0haX09QIHwgKDUtMikpOwot CU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRD SCgwKTsKK2dlbjhfZW1pdF93bV9oel9vcChzdHJ1Y3QgaW50ZWxfYmIgKmliYikgeworCWludGVs X2JiX291dChpYmIsIEdFTjhfM0RTVEFURV9XTV9IWl9PUCB8ICg1LTIpKTsKKwlpbnRlbF9iYl9v dXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAw KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjhfZW1pdF9u dWxsX3N0YXRlKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpIHsKLQlnZW44X2VtaXRf d21faHpfb3AoYmF0Y2gpOwotCWdlbjhfZW1pdF9ocyhiYXRjaCk7Ci0JT1VUX0JBVENIKEdFTjdf M0RTVEFURV9URSB8ICg0LTIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9V VF9CQVRDSCgwKTsKLQlnZW44X2VtaXRfZ3MoYmF0Y2gpOwotCWdlbjlfZW1pdF9kcyhiYXRjaCk7 Ci0JZ2VuOF9lbWl0X3ZzKGJhdGNoKTsKK2dlbjhfZW1pdF9udWxsX3N0YXRlKHN0cnVjdCBpbnRl bF9iYiAqaWJiKSB7CisJZ2VuOF9lbWl0X3dtX2h6X29wKGliYik7CisJZ2VuOF9lbWl0X2hzKGli Yik7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX1RFIHwgKDQtMikpOworCWludGVs X2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChp YmIsIDApOworCWdlbjhfZW1pdF9ncyhpYmIpOworCWdlbjlfZW1pdF9kcyhpYmIpOworCWdlbjhf ZW1pdF92cyhpYmIpOwogfQogCiBzdGF0aWMgdm9pZAotZ2VuN19lbWl0X2NsaXAoc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCkgewotCU9VVF9CQVRDSChHRU42XzNEU1RBVEVfQ0xJUCB8 ICg0IC0gMikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7IC8qICBwYXNzLXRocm91 Z2ggKi8KLQlPVVRfQkFUQ0goMCk7CitnZW43X2VtaXRfY2xpcChzdHJ1Y3QgaW50ZWxfYmIgKmli YikgeworCWludGVsX2JiX291dChpYmIsIEdFTjZfM0RTVEFURV9DTElQIHwgKDQgLSAyKSk7CisJ aW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7IC8qICBwYXNzLXRo cm91Z2ggKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIH0KIAogc3RhdGljIHZvaWQKLWdlbjhf ZW1pdF9zZihzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorZ2VuOF9lbWl0X3NmKHN0 cnVjdCBpbnRlbF9iYiAqaWJiKQogewogCWludCBpOwogCi0JT1VUX0JBVENIKEdFTjdfM0RTVEFU RV9TQkUgfCAoNiAtIDIpKTsKLQlPVVRfQkFUQ0goMSA8PCBHRU43X1NCRV9OVU1fT1VUUFVUU19T SElGVCB8Ci0JCSAgR0VOOF9TQkVfRk9SQ0VfVVJCX0VOVFJZX1JFQURfTEVOR1RIIHwKLQkJICBH RU44X1NCRV9GT1JDRV9VUkJfRU5UUllfUkVBRF9PRkZTRVQgfAotCQkgIDEgPDwgR0VON19TQkVf VVJCX0VOVFJZX1JFQURfTEVOR1RIX1NISUZUIHwKLQkJICAxIDw8IEdFTjhfU0JFX1VSQl9FTlRS WV9SRUFEX09GRlNFVF9TSElGVCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlP VVRfQkFUQ0goR0VOOV9TQkVfQUNUSVZFX0NPTVBPTkVOVF9YWVpXIDw8IDApOwotCU9VVF9CQVRD SCgwKTsKLQotCU9VVF9CQVRDSChHRU44XzNEU1RBVEVfU0JFX1NXSVogfCAoMTEgLSAyKSk7CisJ aW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX1NCRSB8ICg2IC0gMikpOworCWludGVsX2Ji X291dChpYmIsIDEgPDwgR0VON19TQkVfTlVNX09VVFBVVFNfU0hJRlQgfAorCQkgICAgIEdFTjhf U0JFX0ZPUkNFX1VSQl9FTlRSWV9SRUFEX0xFTkdUSCB8CisJCSAgICAgR0VOOF9TQkVfRk9SQ0Vf VVJCX0VOVFJZX1JFQURfT0ZGU0VUIHwKKwkJICAgICAxIDw8IEdFTjdfU0JFX1VSQl9FTlRSWV9S RUFEX0xFTkdUSF9TSElGVCB8CisJCSAgICAgMSA8PCBHRU44X1NCRV9VUkJfRU5UUllfUkVBRF9P RkZTRVRfU0hJRlQpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIs IDApOworCWludGVsX2JiX291dChpYmIsIEdFTjlfU0JFX0FDVElWRV9DT01QT05FTlRfWFlaVyA8 PCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKworCWludGVsX2JiX291dChpYmIsIEdFTjhf M0RTVEFURV9TQkVfU1dJWiB8ICgxMSAtIDIpKTsKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQot CQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQotCU9VVF9C QVRDSChHRU44XzNEU1RBVEVfUkFTVEVSIHwgKDUgLSAyKSk7Ci0JT1VUX0JBVENIKEdFTjhfUkFT VEVSX0ZST05UX1dJTkRJTkdfQ0NXIHwgR0VOOF9SQVNURVJfQ1VMTF9OT05FKTsKLQlPVVRfQkFU Q0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQotCU9VVF9CQVRDSChHRU42 XzNEU1RBVEVfU0YgfCAoNCAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwot CU9VVF9CQVRDSCgwKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGli YiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU44 XzNEU1RBVEVfUkFTVEVSIHwgKDUgLSAyKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VOOF9SQVNU RVJfRlJPTlRfV0lORElOR19DQ1cgfCBHRU44X1JBU1RFUl9DVUxMX05PTkUpOworCWludGVsX2Ji X291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIs IDApOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VONl8zRFNUQVRFX1NGIHwgKDQgLSAyKSk7CisJ aW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJf b3V0KGliYiwgMCk7CiB9CiAKIHN0YXRpYyB2b2lkCi1nZW44X2VtaXRfcHMoc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3Qga2VybmVsKSB7CitnZW44X2VtaXRfcHMoc3Ry dWN0IGludGVsX2JiICppYmIsIHVpbnQzMl90IGtlcm5lbCkgewogCWNvbnN0IGludCBtYXhfdGhy ZWFkcyA9IDYzOwogCi0JT1VUX0JBVENIKEdFTjZfM0RTVEFURV9XTSB8ICgyIC0gMikpOwotCU9V VF9CQVRDSCgvKiBYWFg6IEkgZG9uJ3QgdW5kZXJzdGFuZCB0aGUgQkFSWUNFTlRSSUMgc3R1ZmYs IGJ1dCBpdAorCWludGVsX2JiX291dChpYmIsIEdFTjZfM0RTVEFURV9XTSB8ICgyIC0gMikpOwor CWludGVsX2JiX291dChpYmIsIC8qIFhYWDogSSBkb24ndCB1bmRlcnN0YW5kIHRoZSBCQVJZQ0VO VFJJQyBzdHVmZiwgYnV0IGl0CiAJCSAgICogYXBwZWFycyB3ZSBuZWVkIGl0IHRvIHB1dCBvdXIg c2V0dXAgZGF0YSBpbiB0aGUgcGxhY2Ugd2UKIAkJICAgKiBleHBlY3QgKGc2LCBzZWUgYmVsb3cp ICovCi0JCSAgR0VOOF8zRFNUQVRFX1BTX1BFUlNQRUNUSVZFX1BJWEVMX0JBUllDRU5UUklDKTsK LQotCU9VVF9CQVRDSChHRU42XzNEU1RBVEVfQ09OU1RBTlRfUFMgfCAoMTEtMikpOwotCU9VVF9C QVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsK LQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFU Q0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQotCU9VVF9CQVRDSChHRU43 XzNEU1RBVEVfUFMgfCAoMTItMikpOwotCU9VVF9CQVRDSChrZXJuZWwpOwotCU9VVF9CQVRDSCgw KTsgLyoga2VybmVsIGhpICovCi0JT1VUX0JBVENIKDEgPDwgR0VONl8zRFNUQVRFX1dNX1NBTVBM RVJfQ09VTlRfU0hJRlQgfAotCQkgIDIgPDwgR0VONl8zRFNUQVRFX1dNX0JJTkRJTkdfVEFCTEVf RU5UUllfQ09VTlRfU0hJRlQpOwotCU9VVF9CQVRDSCgwKTsgLyogc2NyYXRjaCBzcGFjZSBzdHVm ZiAqLwotCU9VVF9CQVRDSCgwKTsgLyogc2NyYXRjaCBoaSAqLwotCU9VVF9CQVRDSCgobWF4X3Ro cmVhZHMgLSAxKSA8PCBHRU44XzNEU1RBVEVfUFNfTUFYX1RIUkVBRFNfU0hJRlQgfAotCQkgIEdF TjZfM0RTVEFURV9XTV8xNl9ESVNQQVRDSF9FTkFCTEUpOwotCU9VVF9CQVRDSCg2IDw8IEdFTjZf M0RTVEFURV9XTV9ESVNQQVRDSF9TVEFSVF9HUkZfMF9TSElGVCk7Ci0JT1VUX0JBVENIKDApOyAv LyBrZXJuZWwgMQotCU9VVF9CQVRDSCgwKTsgLyoga2VybmVsIDEgaGkgKi8KLQlPVVRfQkFUQ0go MCk7IC8vIGtlcm5lbCAyCi0JT1VUX0JBVENIKDApOyAvKiBrZXJuZWwgMiBoaSAqLwotCi0JT1VU X0JBVENIKEdFTjhfM0RTVEFURV9QU19CTEVORCB8ICgyIC0gMikpOwotCU9VVF9CQVRDSChHRU44 X1BTX0JMRU5EX0hBU19XUklURUFCTEVfUlQpOwotCi0JT1VUX0JBVENIKEdFTjhfM0RTVEFURV9Q U19FWFRSQSB8ICgyIC0gMikpOwotCU9VVF9CQVRDSChHRU44X1BTWF9QSVhFTF9TSEFERVJfVkFM SUQgfCBHRU44X1BTWF9BVFRSSUJVVEVfRU5BQkxFKTsKKwkJICAgICBHRU44XzNEU1RBVEVfUFNf UEVSU1BFQ1RJVkVfUElYRUxfQkFSWUNFTlRSSUMpOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VO Nl8zRFNUQVRFX0NPTlNUQU5UX1BTIHwgKDExLTIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsK KwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9i Yl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlp bnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKworCWludGVsX2Ji X291dChpYmIsIEdFTjdfM0RTVEFURV9QUyB8ICgxMi0yKSk7CisJaW50ZWxfYmJfb3V0KGliYiwg a2VybmVsKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsgLyoga2VybmVsIGhpICovCisJaW50ZWxf YmJfb3V0KGliYiwgMSA8PCBHRU42XzNEU1RBVEVfV01fU0FNUExFUl9DT1VOVF9TSElGVCB8CisJ CSAgICAgMiA8PCBHRU42XzNEU1RBVEVfV01fQklORElOR19UQUJMRV9FTlRSWV9DT1VOVF9TSElG VCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7IC8qIHNjcmF0Y2ggc3BhY2Ugc3R1ZmYgKi8KKwlp bnRlbF9iYl9vdXQoaWJiLCAwKTsgLyogc2NyYXRjaCBoaSAqLworCWludGVsX2JiX291dChpYmIs IChtYXhfdGhyZWFkcyAtIDEpIDw8IEdFTjhfM0RTVEFURV9QU19NQVhfVEhSRUFEU19TSElGVCB8 CisJCSAgICAgR0VONl8zRFNUQVRFX1dNXzE2X0RJU1BBVENIX0VOQUJMRSk7CisJaW50ZWxfYmJf b3V0KGliYiwgNiA8PCBHRU42XzNEU1RBVEVfV01fRElTUEFUQ0hfU1RBUlRfR1JGXzBfU0hJRlQp OworCWludGVsX2JiX291dChpYmIsIDApOyAvLyBrZXJuZWwgMQorCWludGVsX2JiX291dChpYmIs IDApOyAvKiBrZXJuZWwgMSBoaSAqLworCWludGVsX2JiX291dChpYmIsIDApOyAvLyBrZXJuZWwg MgorCWludGVsX2JiX291dChpYmIsIDApOyAvKiBrZXJuZWwgMiBoaSAqLworCisJaW50ZWxfYmJf b3V0KGliYiwgR0VOOF8zRFNUQVRFX1BTX0JMRU5EIHwgKDIgLSAyKSk7CisJaW50ZWxfYmJfb3V0 KGliYiwgR0VOOF9QU19CTEVORF9IQVNfV1JJVEVBQkxFX1JUKTsKKworCWludGVsX2JiX291dChp YmIsIEdFTjhfM0RTVEFURV9QU19FWFRSQSB8ICgyIC0gMikpOworCWludGVsX2JiX291dChpYmIs IEdFTjhfUFNYX1BJWEVMX1NIQURFUl9WQUxJRCB8IEdFTjhfUFNYX0FUVFJJQlVURV9FTkFCTEUp OwogfQogCiBzdGF0aWMgdm9pZAotZ2VuOV9lbWl0X2RlcHRoKHN0cnVjdCBpbnRlbF9iYXRjaGJ1 ZmZlciAqYmF0Y2gpCitnZW45X2VtaXRfZGVwdGgoc3RydWN0IGludGVsX2JiICppYmIpCiB7Ci0J T1VUX0JBVENIKEdFTjhfM0RTVEFURV9XTV9ERVBUSF9TVEVOQ0lMIHwgKDQgLSAyKSk7Ci0JT1VU X0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0KLQlPVVRfQkFUQ0go R0VON18zRFNUQVRFX0RFUFRIX0JVRkZFUiB8ICg4LTIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VU X0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDAp OwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0KLQlPVVRfQkFUQ0goR0VOOF8zRFNU QVRFX0hJRVJfREVQVEhfQlVGRkVSIHwgKDUtMikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFU Q0goMCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQotCU9VVF9CQVRDSChHRU44 XzNEU1RBVEVfU1RFTkNJTF9CVUZGRVIgfCAoNS0yKSk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9C QVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOworCWludGVsX2JiX291dChp YmIsIEdFTjhfM0RTVEFURV9XTV9ERVBUSF9TVEVOQ0lMIHwgKDQgLSAyKSk7CisJaW50ZWxfYmJf b3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwg MCk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfREVQVEhfQlVGRkVSIHwgKDgt MikpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWlu dGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291 dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDAp OworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VOOF8zRFNUQVRFX0hJRVJfREVQVEhfQlVGRkVSIHwg KDUtMikpOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOwor CWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCisJaW50ZWxf YmJfb3V0KGliYiwgR0VOOF8zRFNUQVRFX1NURU5DSUxfQlVGRkVSIHwgKDUtMikpOworCWludGVs X2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOworCWludGVsX2JiX291dChp YmIsIDApOworCWludGVsX2JiX291dChpYmIsIDApOwogfQogCiBzdGF0aWMgdm9pZAotZ2VuN19l bWl0X2NsZWFyKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gpIHsKLQlPVVRfQkFUQ0go R0VON18zRFNUQVRFX0NMRUFSX1BBUkFNUyB8ICgzLTIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VU X0JBVENIKDEpOyAvLyBjbGVhciB2YWxpZAorZ2VuN19lbWl0X2NsZWFyKHN0cnVjdCBpbnRlbF9i YiAqaWJiKSB7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX0NMRUFSX1BBUkFNUyB8 ICgzLTIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAxKTsg Ly8gY2xlYXIgdmFsaWQKIH0KIAogc3RhdGljIHZvaWQKLWdlbjZfZW1pdF9kcmF3aW5nX3JlY3Rh bmdsZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLCBjb25zdCBzdHJ1Y3QgaWd0X2J1 ZiAqZHN0KQorZ2VuNl9lbWl0X2RyYXdpbmdfcmVjdGFuZ2xlKHN0cnVjdCBpbnRlbF9iYiAqaWJi LCBjb25zdCBzdHJ1Y3QgaW50ZWxfYnVmICpkc3QpCiB7Ci0JT1VUX0JBVENIKEdFTjRfM0RTVEFU RV9EUkFXSU5HX1JFQ1RBTkdMRSB8ICg0IC0gMikpOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFU Q0goKGlndF9idWZfaGVpZ2h0KGRzdCkgLSAxKSA8PCAxNiB8IChpZ3RfYnVmX3dpZHRoKGRzdCkg LSAxKSk7Ci0JT1VUX0JBVENIKDApOworCWludGVsX2JiX291dChpYmIsIEdFTjRfM0RTVEFURV9E UkFXSU5HX1JFQ1RBTkdMRSB8ICg0IC0gMikpOworCWludGVsX2JiX291dChpYmIsIDApOworCWlu dGVsX2JiX291dChpYmIsIChpbnRlbF9idWZfaGVpZ2h0KGRzdCkgLSAxKSA8PCAxNiB8IChpbnRl bF9idWZfd2lkdGgoZHN0KSAtIDEpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIH0KIAotc3Rh dGljIHZvaWQgZ2VuOF9lbWl0X3ZmX3RvcG9sb2d5KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2gpCitzdGF0aWMgdm9pZCBnZW44X2VtaXRfdmZfdG9wb2xvZ3koc3RydWN0IGludGVsX2Ji ICppYmIpCiB7Ci0JT1VUX0JBVENIKEdFTjhfM0RTVEFURV9WRl9UT1BPTE9HWSk7Ci0JT1VUX0JB VENIKF8zRFBSSU1fUkVDVExJU1QpOworCWludGVsX2JiX291dChpYmIsIEdFTjhfM0RTVEFURV9W Rl9UT1BPTE9HWSk7CisJaW50ZWxfYmJfb3V0KGliYiwgXzNEUFJJTV9SRUNUTElTVCk7CiB9CiAK IC8qIFZlcnRleCBlbGVtZW50cyBNVVNUIGJlIGRlZmluZWQgYmVmb3JlIHRoaXMgYWNjb3JkaW5n IHRvIHNwZWMgKi8KLXN0YXRpYyB2b2lkIGdlbjhfZW1pdF9wcmltaXRpdmUoc3RydWN0IGludGVs X2JhdGNoYnVmZmVyICpiYXRjaCwgdWludDMyX3Qgb2Zmc2V0KQorc3RhdGljIHZvaWQgZ2VuOF9l bWl0X3ByaW1pdGl2ZShzdHJ1Y3QgaW50ZWxfYmIgKmliYiwgdWludDMyX3Qgb2Zmc2V0KQogewot CU9VVF9CQVRDSChHRU44XzNEU1RBVEVfVkYgfCAoMiAtIDIpKTsKLQlPVVRfQkFUQ0goMCk7Ci0K LQlPVVRfQkFUQ0goR0VOOF8zRFNUQVRFX1ZGX0lOU1RBTkNJTkcgfCAoMyAtIDIpKTsKLQlPVVRf QkFUQ0goMCk7Ci0JT1VUX0JBVENIKDApOwotCi0JT1VUX0JBVENIKEdFTjRfM0RQUklNSVRJVkUg fCAoNy0yKSk7Ci0JT1VUX0JBVENIKDApOwkvKiBnZW44KyBpZ25vcmUgdGhlIHRvcG9sb2d5IHR5 cGUgZmllbGQgKi8KLQlPVVRfQkFUQ0goMyk7CS8qIHZlcnRleCBjb3VudCAqLwotCU9VVF9CQVRD SCgwKTsJLyogIFdlJ3JlIHNwZWNpZnlpbmcgdGhpcyBpbnN0ZWFkIHdpdGggb2Zmc2V0IGluIEdF TjZfM0RTVEFURV9WRVJURVhfQlVGRkVSUyAqLwotCU9VVF9CQVRDSCgxKTsJLyogc2luZ2xlIGlu c3RhbmNlICovCi0JT1VUX0JBVENIKDApOwkvKiBzdGFydCBpbnN0YW5jZSBsb2NhdGlvbiAqLwot CU9VVF9CQVRDSCgwKTsJLyogaW5kZXggYnVmZmVyIG9mZnNldCwgaWdub3JlZCAqLworCWludGVs X2JiX291dChpYmIsIEdFTjhfM0RTVEFURV9WRiB8ICgyIC0gMikpOworCWludGVsX2JiX291dChp YmIsIDApOworCisJaW50ZWxfYmJfb3V0KGliYiwgR0VOOF8zRFNUQVRFX1ZGX0lOU1RBTkNJTkcg fCAoMyAtIDIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAw KTsKKworCWludGVsX2JiX291dChpYmIsIEdFTjRfM0RQUklNSVRJVkUgfCAoNy0yKSk7CisJaW50 ZWxfYmJfb3V0KGliYiwgMCk7CS8qIGdlbjgrIGlnbm9yZSB0aGUgdG9wb2xvZ3kgdHlwZSBmaWVs ZCAqLworCWludGVsX2JiX291dChpYmIsIDMpOwkvKiB2ZXJ0ZXggY291bnQgKi8KKwlpbnRlbF9i Yl9vdXQoaWJiLCAwKTsJLyogIFdlJ3JlIHNwZWNpZnlpbmcgdGhpcyBpbnN0ZWFkIHdpdGggb2Zm c2V0IGluIEdFTjZfM0RTVEFURV9WRVJURVhfQlVGRkVSUyAqLworCWludGVsX2JiX291dChpYmIs IDEpOwkvKiBzaW5nbGUgaW5zdGFuY2UgKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsJLyogc3Rh cnQgaW5zdGFuY2UgbG9jYXRpb24gKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCAwKTsJLyogaW5kZXgg YnVmZmVyIG9mZnNldCwgaWdub3JlZCAqLwogfQogCiAvKiBUaGUgZ2VuZXJhbCBydWxlIGlzIGlm IGl0J3MgbmFtZWQgZ2VuNiBpdCBpcyBkaXJlY3RseSBjb3BpZWQgZnJvbQpAQCAtOTkwLDE2NiAr ODc2LDE1OSBAQCBzdGF0aWMgdm9pZCBnZW44X2VtaXRfcHJpbWl0aXZlKHN0cnVjdCBpbnRlbF9i YXRjaGJ1ZmZlciAqYmF0Y2gsIHVpbnQzMl90IG9mZnNldAogI2RlZmluZSBCQVRDSF9TVEFURV9T UExJVCAyMDQ4CiAKIHN0YXRpYwotdm9pZCBfZ2VuOV9yZW5kZXJfY29weWZ1bmMoc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCSAgZHJtX2ludGVsX2NvbnRleHQgKmNvbnRleHQs Ci0JCQkgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpzcmMsIHVuc2lnbmVkIHNyY194LAotCQkJICB1 bnNpZ25lZCBzcmNfeSwgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwKLQkJCSAgY29u c3Qgc3RydWN0IGlndF9idWYgKmRzdCwgdW5zaWduZWQgZHN0X3gsCi0JCQkgIHVuc2lnbmVkIGRz dF95LAotCQkJICBkcm1faW50ZWxfYm8gKmF1eF9wZ3RhYmxlX2JvLAotCQkJICBjb25zdCB1aW50 MzJfdCBwc19rZXJuZWxbXVs0XSwKLQkJCSAgdWludDMyX3QgcHNfa2VybmVsX3NpemUpCit2b2lk IF9nZW45X3JlbmRlcl9jb3B5ZnVuYyhzdHJ1Y3QgaW50ZWxfYmIgKmliYiwKKwkJCSAgIHVpbnQz Ml90IGN0eCwKKwkJCSAgIHN0cnVjdCBpbnRlbF9idWYgKnNyYywKKwkJCSAgIHVuc2lnbmVkIGlu dCBzcmNfeCwgdW5zaWduZWQgaW50IHNyY195LAorCQkJICAgdW5zaWduZWQgaW50IHdpZHRoLCB1 bnNpZ25lZCBpbnQgaGVpZ2h0LAorCQkJICAgc3RydWN0IGludGVsX2J1ZiAqZHN0LAorCQkJICAg dW5zaWduZWQgaW50IGRzdF94LCB1bnNpZ25lZCBpbnQgZHN0X3ksCisJCQkgICBzdHJ1Y3QgaW50 ZWxfYnVmICphdXhfcGd0YWJsZV9idWYsCisJCQkgICBjb25zdCB1aW50MzJfdCBwc19rZXJuZWxb XVs0XSwKKwkJCSAgIHVpbnQzMl90IHBzX2tlcm5lbF9zaXplKQogewogCXVpbnQzMl90IHBzX3Nh bXBsZXJfc3RhdGUsIHBzX2tlcm5lbF9vZmYsIHBzX2JpbmRpbmdfdGFibGU7CiAJdWludDMyX3Qg c2Npc3Nvcl9zdGF0ZTsKIAl1aW50MzJfdCB2ZXJ0ZXhfYnVmZmVyOwotCXVpbnQzMl90IGJhdGNo X2VuZDsKIAl1aW50MzJfdCBhdXhfcGd0YWJsZV9zdGF0ZTsKIAogCWlndF9hc3NlcnQoc3JjLT5i cHAgPT0gZHN0LT5icHApOwotCWludGVsX2JhdGNoYnVmZmVyX2ZsdXNoX3dpdGhfY29udGV4dChi YXRjaCwgY29udGV4dCk7CiAKLQlpbnRlbF9iYXRjaGJ1ZmZlcl9hbGlnbihiYXRjaCwgOCk7CisJ aW50ZWxfYmJfZmx1c2hfcmVuZGVyX3dpdGhfY29udGV4dChpYmIsIGN0eCk7CiAKLQliYXRjaC0+ cHRyID0gJmJhdGNoLT5idWZmZXJbQkFUQ0hfU1RBVEVfU1BMSVRdOworCWludGVsX2JiX2FkZF9p bnRlbF9idWYoaWJiLCBkc3QsIHRydWUpOworCWludGVsX2JiX2FkZF9pbnRlbF9idWYoaWJiLCBz cmMsIGZhbHNlKTsKIAotCWFubm90YXRpb25faW5pdCgmYXViX2Fubm90YXRpb25zKTsKKwlpbnRl bF9iYl9wdHJfc2V0KGliYiwgQkFUQ0hfU1RBVEVfU1BMSVQpOwogCi0JcHNfYmluZGluZ190YWJs ZSAgPSBnZW44X2JpbmRfc3VyZmFjZXMoYmF0Y2gsIHNyYywgZHN0KTsKLQlwc19zYW1wbGVyX3N0 YXRlICA9IGdlbjhfY3JlYXRlX3NhbXBsZXIoYmF0Y2gpOwotCXBzX2tlcm5lbF9vZmYgPSBnZW44 X2ZpbGxfcHMoYmF0Y2gsIHBzX2tlcm5lbCwgcHNfa2VybmVsX3NpemUpOwotCXZlcnRleF9idWZm ZXIgPSBnZW43X2ZpbGxfdmVydGV4X2J1ZmZlcl9kYXRhKGJhdGNoLCBzcmMsCisJcHNfYmluZGlu Z190YWJsZSAgPSBnZW44X2JpbmRfc3VyZmFjZXMoaWJiLCBzcmMsIGRzdCk7CisJcHNfc2FtcGxl cl9zdGF0ZSAgPSBnZW44X2NyZWF0ZV9zYW1wbGVyKGliYik7CisJcHNfa2VybmVsX29mZiA9IGdl bjhfZmlsbF9wcyhpYmIsIHBzX2tlcm5lbCwgcHNfa2VybmVsX3NpemUpOworCXZlcnRleF9idWZm ZXIgPSBnZW43X2ZpbGxfdmVydGV4X2J1ZmZlcl9kYXRhKGliYiwgc3JjLAogCQkJCQkJICAgICBz cmNfeCwgc3JjX3ksCiAJCQkJCQkgICAgIGRzdF94LCBkc3RfeSwKIAkJCQkJCSAgICAgd2lkdGgs IGhlaWdodCk7Ci0JY2MuY2Nfc3RhdGUgPSBnZW42X2NyZWF0ZV9jY19zdGF0ZShiYXRjaCk7Ci0J Y2MuYmxlbmRfc3RhdGUgPSBnZW44X2NyZWF0ZV9ibGVuZF9zdGF0ZShiYXRjaCk7Ci0Jdmlld3Bv cnQuY2Nfc3RhdGUgPSBnZW42X2NyZWF0ZV9jY192aWV3cG9ydChiYXRjaCk7Ci0Jdmlld3BvcnQu c2ZfY2xpcF9zdGF0ZSA9IGdlbjdfY3JlYXRlX3NmX2NsaXBfdmlld3BvcnQoYmF0Y2gpOwotCXNj aXNzb3Jfc3RhdGUgPSBnZW42X2NyZWF0ZV9zY2lzc29yX3JlY3QoYmF0Y2gpOwotCi0JYXV4X3Bn dGFibGVfc3RhdGUgPSBnZW4xMl9jcmVhdGVfYXV4X3BndGFibGVfc3RhdGUoYmF0Y2gsCi0JCQkJ CQkJICAgYXV4X3BndGFibGVfYm8pOwotCi0JLyogVE9ETzogdGhlcmVlIGlzIG90aGVyIHN0YXRl IHdoaWNoIGlzbid0IHNldHVwICovCisJY2MuY2Nfc3RhdGUgPSBnZW42X2NyZWF0ZV9jY19zdGF0 ZShpYmIpOworCWNjLmJsZW5kX3N0YXRlID0gZ2VuOF9jcmVhdGVfYmxlbmRfc3RhdGUoaWJiKTsK Kwl2aWV3cG9ydC5jY19zdGF0ZSA9IGdlbjZfY3JlYXRlX2NjX3ZpZXdwb3J0KGliYik7CisJdmll d3BvcnQuc2ZfY2xpcF9zdGF0ZSA9IGdlbjdfY3JlYXRlX3NmX2NsaXBfdmlld3BvcnQoaWJiKTsK KwlzY2lzc29yX3N0YXRlID0gZ2VuNl9jcmVhdGVfc2Npc3Nvcl9yZWN0KGliYik7CisJYXV4X3Bn dGFibGVfc3RhdGUgPSBnZW4xMl9jcmVhdGVfYXV4X3BndGFibGVfc3RhdGUoaWJiLCBhdXhfcGd0 YWJsZV9idWYpOwogCi0JYXNzZXJ0KGJhdGNoLT5wdHIgPCAmYmF0Y2gtPmJ1ZmZlcls0MDk1XSk7 Ci0KLQliYXRjaC0+cHRyID0gYmF0Y2gtPmJ1ZmZlcjsKKwkvKiBUT0RPOiB0aGVyZSBpcyBvdGhl ciBzdGF0ZSB3aGljaCBpc24ndCBzZXR1cCAqLworCWludGVsX2JiX3B0cl9zZXQoaWJiLCAwKTsK IAogCS8qIFN0YXJ0IGVtaXR0aW5nIHRoZSBjb21tYW5kcy4gVGhlIG9yZGVyIHJvdWdobHkgZm9s bG93cyB0aGUgbWVzYSBibG9ycAogCSAqIG9yZGVyICovCi0JT1VUX0JBVENIKEc0WF9QSVBFTElO RV9TRUxFQ1QgfCBQSVBFTElORV9TRUxFQ1RfM0QgfAotCQkJCUdFTjlfUElQRUxJTkVfU0VMRUNU SU9OX01BU0spOwotCi0JZ2VuMTJfZW1pdF9hdXhfcGd0YWJsZV9zdGF0ZShiYXRjaCwgYXV4X3Bn dGFibGVfc3RhdGUsIHRydWUpOwotCi0JZ2VuOF9lbWl0X3NpcChiYXRjaCk7Ci0KLQlnZW43X2Vt aXRfcHVzaF9jb25zdGFudHMoYmF0Y2gpOworCWludGVsX2JiX291dChpYmIsIEc0WF9QSVBFTElO RV9TRUxFQ1QgfCBQSVBFTElORV9TRUxFQ1RfM0QgfAorCQkgICAgIEdFTjlfUElQRUxJTkVfU0VM RUNUSU9OX01BU0spOwogCi0JZ2VuOV9lbWl0X3N0YXRlX2Jhc2VfYWRkcmVzcyhiYXRjaCk7CisJ Z2VuMTJfZW1pdF9hdXhfcGd0YWJsZV9zdGF0ZShpYmIsIGF1eF9wZ3RhYmxlX3N0YXRlLCB0cnVl KTsKIAotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfVklFV1BPUlRfU1RBVEVfUE9JTlRFUlNfQ0Mp OwotCU9VVF9CQVRDSCh2aWV3cG9ydC5jY19zdGF0ZSk7Ci0JT1VUX0JBVENIKEdFTjhfM0RTVEFU RV9WSUVXUE9SVF9TVEFURV9QT0lOVEVSU19TRl9DTElQKTsKLQlPVVRfQkFUQ0godmlld3BvcnQu c2ZfY2xpcF9zdGF0ZSk7CisJZ2VuOF9lbWl0X3NpcChpYmIpOwogCi0JZ2VuN19lbWl0X3VyYihi YXRjaCk7CisJZ2VuN19lbWl0X3B1c2hfY29uc3RhbnRzKGliYik7CiAKLQlnZW44X2VtaXRfY2Mo YmF0Y2gpOworCWdlbjlfZW1pdF9zdGF0ZV9iYXNlX2FkZHJlc3MoaWJiKTsKIAotCWdlbjhfZW1p dF9tdWx0aXNhbXBsZShiYXRjaCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX1ZJ RVdQT1JUX1NUQVRFX1BPSU5URVJTX0NDKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCB2aWV3cG9ydC5j Y19zdGF0ZSk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VOOF8zRFNUQVRFX1ZJRVdQT1JUX1NUQVRF X1BPSU5URVJTX1NGX0NMSVApOworCWludGVsX2JiX291dChpYmIsIHZpZXdwb3J0LnNmX2NsaXBf c3RhdGUpOwogCi0JZ2VuOF9lbWl0X251bGxfc3RhdGUoYmF0Y2gpOworCWdlbjdfZW1pdF91cmIo aWJiKTsKIAotCU9VVF9CQVRDSChHRU43XzNEU1RBVEVfU1RSRUFNT1VUIHwgKDUgLSAyKSk7Ci0J T1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsKLQlPVVRfQkFUQ0goMCk7Ci0JT1VUX0JBVENI KDApOworCWdlbjhfZW1pdF9jYyhpYmIpOwogCi0JZ2VuN19lbWl0X2NsaXAoYmF0Y2gpOworCWdl bjhfZW1pdF9tdWx0aXNhbXBsZShpYmIpOwogCi0JZ2VuOF9lbWl0X3NmKGJhdGNoKTsKKwlnZW44 X2VtaXRfbnVsbF9zdGF0ZShpYmIpOwogCi0JZ2VuOF9lbWl0X3BzKGJhdGNoLCBwc19rZXJuZWxf b2ZmKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfU1RSRUFNT1VUIHwgKDUgLSAy KSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50 ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiAKLQlPVVRfQkFUQ0go R0VON18zRFNUQVRFX0JJTkRJTkdfVEFCTEVfUE9JTlRFUlNfUFMpOwotCU9VVF9CQVRDSChwc19i aW5kaW5nX3RhYmxlKTsKKwlnZW43X2VtaXRfY2xpcChpYmIpOwogCi0JT1VUX0JBVENIKEdFTjdf M0RTVEFURV9TQU1QTEVSX1NUQVRFX1BPSU5URVJTX1BTKTsKLQlPVVRfQkFUQ0gocHNfc2FtcGxl cl9zdGF0ZSk7CisJZ2VuOF9lbWl0X3NmKGliYik7CiAKLQlPVVRfQkFUQ0goR0VOOF8zRFNUQVRF X1NDSVNTT1JfU1RBVEVfUE9JTlRFUlMpOwotCU9VVF9CQVRDSChzY2lzc29yX3N0YXRlKTsKKwln ZW44X2VtaXRfcHMoaWJiLCBwc19rZXJuZWxfb2ZmKTsKIAotCWdlbjlfZW1pdF9kZXB0aChiYXRj aCk7CisJaW50ZWxfYmJfb3V0KGliYiwgR0VON18zRFNUQVRFX0JJTkRJTkdfVEFCTEVfUE9JTlRF UlNfUFMpOworCWludGVsX2JiX291dChpYmIsIHBzX2JpbmRpbmdfdGFibGUpOwogCi0JZ2VuN19l bWl0X2NsZWFyKGJhdGNoKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBHRU43XzNEU1RBVEVfU0FNUExF Ul9TVEFURV9QT0lOVEVSU19QUyk7CisJaW50ZWxfYmJfb3V0KGliYiwgcHNfc2FtcGxlcl9zdGF0 ZSk7CiAKLQlnZW42X2VtaXRfZHJhd2luZ19yZWN0YW5nbGUoYmF0Y2gsIGRzdCk7CisJaW50ZWxf YmJfb3V0KGliYiwgR0VOOF8zRFNUQVRFX1NDSVNTT1JfU1RBVEVfUE9JTlRFUlMpOworCWludGVs X2JiX291dChpYmIsIHNjaXNzb3Jfc3RhdGUpOwogCi0JZ2VuN19lbWl0X3ZlcnRleF9idWZmZXIo YmF0Y2gsIHZlcnRleF9idWZmZXIpOwotCWdlbjZfZW1pdF92ZXJ0ZXhfZWxlbWVudHMoYmF0Y2gp OworCWdlbjlfZW1pdF9kZXB0aChpYmIpOwogCi0JZ2VuOF9lbWl0X3ZmX3RvcG9sb2d5KGJhdGNo KTsKLQlnZW44X2VtaXRfcHJpbWl0aXZlKGJhdGNoLCB2ZXJ0ZXhfYnVmZmVyKTsKKwlnZW43X2Vt aXRfY2xlYXIoaWJiKTsKIAotCU9VVF9CQVRDSChNSV9CQVRDSF9CVUZGRVJfRU5EKTsKKwlnZW42 X2VtaXRfZHJhd2luZ19yZWN0YW5nbGUoaWJiLCBkc3QpOwogCi0JYmF0Y2hfZW5kID0gaW50ZWxf YmF0Y2hidWZmZXJfYWxpZ24oYmF0Y2gsIDgpOwotCWFzc2VydChiYXRjaF9lbmQgPCBCQVRDSF9T VEFURV9TUExJVCk7Ci0JYW5ub3RhdGlvbl9hZGRfYmF0Y2goJmF1Yl9hbm5vdGF0aW9ucywgYmF0 Y2hfZW5kKTsKKwlnZW43X2VtaXRfdmVydGV4X2J1ZmZlcihpYmIsIHZlcnRleF9idWZmZXIpOwor CWdlbjZfZW1pdF92ZXJ0ZXhfZWxlbWVudHMoaWJiKTsKIAotCWR1bXBfYmF0Y2goYmF0Y2gpOwor CWdlbjhfZW1pdF92Zl90b3BvbG9neShpYmIpOworCWdlbjhfZW1pdF9wcmltaXRpdmUoaWJiLCB2 ZXJ0ZXhfYnVmZmVyKTsKIAotCWFubm90YXRpb25fZmx1c2goJmF1Yl9hbm5vdGF0aW9ucywgYmF0 Y2gpOwotCi0JZ2VuNl9yZW5kZXJfZmx1c2goYmF0Y2gsIGNvbnRleHQsIGJhdGNoX2VuZCk7Ci0J aW50ZWxfYmF0Y2hidWZmZXJfcmVzZXQoYmF0Y2gpOworCWludGVsX2JiX2VtaXRfYmJlKGliYik7 CisJaW50ZWxfYmJfZXhlY193aXRoX2NvbnRleHQoaWJiLCBpbnRlbF9iYl9vZmZzZXQoaWJiKSwg Y3R4LAorCQkJCSAgIEk5MTVfRVhFQ19SRU5ERVIgfCBJOTE1X0VYRUNfTk9fUkVMT0MsCisJCQkJ ICAgZmFsc2UpOworCWR1bXBfYmF0Y2goaWJiKTsKKwlpbnRlbF9iYl9yZXNldChpYmIsIGZhbHNl KTsKIH0KIAotdm9pZCBnZW45X3JlbmRlcl9jb3B5ZnVuYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZm ZXIgKmJhdGNoLAotCQkJICBkcm1faW50ZWxfY29udGV4dCAqY29udGV4dCwKLQkJCSAgY29uc3Qg c3RydWN0IGlndF9idWYgKnNyYywgdW5zaWduZWQgc3JjX3gsIHVuc2lnbmVkIHNyY195LAotCQkJ ICB1bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LAotCQkJICBjb25zdCBzdHJ1Y3QgaWd0 X2J1ZiAqZHN0LCB1bnNpZ25lZCBkc3RfeCwgdW5zaWduZWQgZHN0X3kpCit2b2lkIGdlbjlfcmVu ZGVyX2NvcHlmdW5jKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAorCQkJICB1aW50MzJfdCBjdHgsCisJ CQkgIHN0cnVjdCBpbnRlbF9idWYgKnNyYywKKwkJCSAgdW5zaWduZWQgaW50IHNyY194LCB1bnNp Z25lZCBpbnQgc3JjX3ksCisJCQkgIHVuc2lnbmVkIGludCB3aWR0aCwgdW5zaWduZWQgaW50IGhl aWdodCwKKwkJCSAgc3RydWN0IGludGVsX2J1ZiAqZHN0LAorCQkJICB1bnNpZ25lZCBpbnQgZHN0 X3gsIHVuc2lnbmVkIGludCBkc3RfeSkKIAogewotCV9nZW45X3JlbmRlcl9jb3B5ZnVuYyhiYXRj aCwgY29udGV4dCwgc3JjLCBzcmNfeCwgc3JjX3ksCisJX2dlbjlfcmVuZGVyX2NvcHlmdW5jKGli YiwgY3R4LCBzcmMsIHNyY194LCBzcmNfeSwKIAkJCSAgd2lkdGgsIGhlaWdodCwgZHN0LCBkc3Rf eCwgZHN0X3ksIE5VTEwsCiAJCQkgIHBzX2tlcm5lbF9nZW45LCBzaXplb2YocHNfa2VybmVsX2dl bjkpKTsKIH0KIAotdm9pZCBnZW4xMV9yZW5kZXJfY29weWZ1bmMoc3RydWN0IGludGVsX2JhdGNo YnVmZmVyICpiYXRjaCwKLQkJCSAgZHJtX2ludGVsX2NvbnRleHQgKmNvbnRleHQsCi0JCQkgIGNv bnN0IHN0cnVjdCBpZ3RfYnVmICpzcmMsIHVuc2lnbmVkIHNyY194LCB1bnNpZ25lZCBzcmNfeSwK LQkJCSAgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwKLQkJCSAgY29uc3Qgc3RydWN0 IGlndF9idWYgKmRzdCwgdW5zaWduZWQgZHN0X3gsIHVuc2lnbmVkIGRzdF95KQotCit2b2lkIGdl bjExX3JlbmRlcl9jb3B5ZnVuYyhzdHJ1Y3QgaW50ZWxfYmIgKmliYiwKKwkJCSAgIHVpbnQzMl90 IGN0eCwKKwkJCSAgIHN0cnVjdCBpbnRlbF9idWYgKnNyYywKKwkJCSAgIHVuc2lnbmVkIGludCBz cmNfeCwgdW5zaWduZWQgaW50IHNyY195LAorCQkJICAgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNp Z25lZCBpbnQgaGVpZ2h0LAorCQkJICAgc3RydWN0IGludGVsX2J1ZiAqZHN0LAorCQkJICAgdW5z aWduZWQgaW50IGRzdF94LCB1bnNpZ25lZCBpbnQgZHN0X3kpCiB7Ci0JX2dlbjlfcmVuZGVyX2Nv cHlmdW5jKGJhdGNoLCBjb250ZXh0LCBzcmMsIHNyY194LCBzcmNfeSwKKwlfZ2VuOV9yZW5kZXJf Y29weWZ1bmMoaWJiLCBjdHgsIHNyYywgc3JjX3gsIHNyY195LAogCQkJICB3aWR0aCwgaGVpZ2h0 LCBkc3QsIGRzdF94LCBkc3RfeSwgTlVMTCwKIAkJCSAgcHNfa2VybmVsX2dlbjExLCBzaXplb2Yo cHNfa2VybmVsX2dlbjExKSk7CiB9CiAKLXZvaWQgZ2VuMTJfcmVuZGVyX2NvcHlmdW5jKHN0cnVj dCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCQkgICBkcm1faW50ZWxfY29udGV4dCAqY29u dGV4dCwKLQkJCSAgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpzcmMsIHVuc2lnbmVkIHNyY194LCB1 bnNpZ25lZCBzcmNfeSwKLQkJCSAgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25lZCBoZWlnaHQsCi0J CQkgICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqZHN0LCB1bnNpZ25lZCBkc3RfeCwgdW5zaWduZWQg ZHN0X3kpCi0KK3ZvaWQgZ2VuMTJfcmVuZGVyX2NvcHlmdW5jKHN0cnVjdCBpbnRlbF9iYiAqaWJi LAorCQkJICAgdWludDMyX3QgY3R4LAorCQkJICAgc3RydWN0IGludGVsX2J1ZiAqc3JjLAorCQkJ ICAgdW5zaWduZWQgaW50IHNyY194LCB1bnNpZ25lZCBpbnQgc3JjX3ksCisJCQkgICB1bnNpZ25l ZCBpbnQgd2lkdGgsIHVuc2lnbmVkIGludCBoZWlnaHQsCisJCQkgICBzdHJ1Y3QgaW50ZWxfYnVm ICpkc3QsCisJCQkgICB1bnNpZ25lZCBpbnQgZHN0X3gsIHVuc2lnbmVkIGludCBkc3RfeSkKIHsK IAlzdHJ1Y3QgYXV4X3BndGFibGVfaW5mbyBwZ3RhYmxlX2luZm8gPSB7IH07CiAKLQlnZW4xMl9h dXhfcGd0YWJsZV9pbml0KCZwZ3RhYmxlX2luZm8sIGJhdGNoLT5idWZtZ3IsIHNyYywgZHN0KTsK KwlnZW4xMl9hdXhfcGd0YWJsZV9pbml0KCZwZ3RhYmxlX2luZm8sIGliYiwgc3JjLCBkc3QpOwog Ci0JX2dlbjlfcmVuZGVyX2NvcHlmdW5jKGJhdGNoLCBjb250ZXh0LCBzcmMsIHNyY194LCBzcmNf eSwKKwlfZ2VuOV9yZW5kZXJfY29weWZ1bmMoaWJiLCBjdHgsIHNyYywgc3JjX3gsIHNyY195LAog CQkJICB3aWR0aCwgaGVpZ2h0LCBkc3QsIGRzdF94LCBkc3RfeSwKLQkJCSAgcGd0YWJsZV9pbmZv LnBndGFibGVfYm8sCisJCQkgIHBndGFibGVfaW5mby5wZ3RhYmxlX2J1ZiwKIAkJCSAgZ2VuMTJf cmVuZGVyX2NvcHksCiAJCQkgIHNpemVvZihnZW4xMl9yZW5kZXJfY29weSkpOwogCi0JZ2VuMTJf YXV4X3BndGFibGVfY2xlYW51cCgmcGd0YWJsZV9pbmZvKTsKKwlnZW4xMl9hdXhfcGd0YWJsZV9j bGVhbnVwKGliYiwgJnBndGFibGVfaW5mbyk7CiB9CmRpZmYgLS1naXQgYS9saWIvcmVuZGVyY29w eV9pODMwLmMgYi9saWIvcmVuZGVyY29weV9pODMwLmMKaW5kZXggY2E4MTUxMjIuLmU3NTU3MDZl IDEwMDY0NAotLS0gYS9saWIvcmVuZGVyY29weV9pODMwLmMKKysrIGIvbGliL3JlbmRlcmNvcHlf aTgzMC5jCkBAIC0xMSw3ICsxMSw3IEBACiAjaW5jbHVkZSAiZHJtLmgiCiAjaW5jbHVkZSAiaTkx NV9kcm0uaCIKICNpbmNsdWRlICJkcm10ZXN0LmgiCi0jaW5jbHVkZSAiaW50ZWxfYnVmbWdyLmgi CisjaW5jbHVkZSAiaW50ZWxfYnVmb3BzLmgiCiAjaW5jbHVkZSAiaW50ZWxfYmF0Y2hidWZmZXIu aCIKICNpbmNsdWRlICJpbnRlbF9pby5oIgogCkBAIC03Miw3NSArNzIsNzUgQEAKICNkZWZpbmUg VEIwQV9BUkcxX1NFTF9URVhFTDMJCSg5IDw8IDYpCiAKIAotc3RhdGljIHZvaWQgZ2VuMl9lbWl0 X2ludmFyaWFudChzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorc3RhdGljIHZvaWQg Z2VuMl9lbWl0X2ludmFyaWFudChzdHJ1Y3QgaW50ZWxfYmIgKmliYikKIHsKIAlpbnQgaTsKIAog CWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJT1VUX0JBVENIKF8zRFNUQVRFX01BUF9DVUJF IHwgTUFQX1VOSVQoaSkpOwotCQlPVVRfQkFUQ0goXzNEU1RBVEVfTUFQX1RFWF9TVFJFQU1fQ01E IHwgTUFQX1VOSVQoaSkgfAotCQkJICBESVNBQkxFX1RFWF9TVFJFQU1fQlVNUCB8Ci0JCQkgIEVO QUJMRV9URVhfU1RSRUFNX0NPT1JEX1NFVCB8IFRFWF9TVFJFQU1fQ09PUkRfU0VUKGkpIHwKLQkJ CSAgRU5BQkxFX1RFWF9TVFJFQU1fTUFQX0lEWCB8IFRFWF9TVFJFQU1fTUFQX0lEWChpKSk7Ci0J CU9VVF9CQVRDSChfM0RTVEFURV9NQVBfQ09PUkRfVFJBTlNGT1JNKTsKLQkJT1VUX0JBVENIKERJ U0FCTEVfVEVYX1RSQU5TRk9STSB8IFRFWFRVUkVfU0VUKGkpKTsKKwkJaW50ZWxfYmJfb3V0KGli YiwgXzNEU1RBVEVfTUFQX0NVQkUgfCBNQVBfVU5JVChpKSk7CisJCWludGVsX2JiX291dChpYmIs IF8zRFNUQVRFX01BUF9URVhfU1RSRUFNX0NNRCB8IE1BUF9VTklUKGkpIHwKKwkJCSAgICAgRElT QUJMRV9URVhfU1RSRUFNX0JVTVAgfAorCQkJICAgICBFTkFCTEVfVEVYX1NUUkVBTV9DT09SRF9T RVQgfCBURVhfU1RSRUFNX0NPT1JEX1NFVChpKSB8CisJCQkgICAgIEVOQUJMRV9URVhfU1RSRUFN X01BUF9JRFggfCBURVhfU1RSRUFNX01BUF9JRFgoaSkpOworCQlpbnRlbF9iYl9vdXQoaWJiLCBf M0RTVEFURV9NQVBfQ09PUkRfVFJBTlNGT1JNKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgRElTQUJM RV9URVhfVFJBTlNGT1JNIHwgVEVYVFVSRV9TRVQoaSkpOwogCX0KIAotCU9VVF9CQVRDSChfM0RT VEFURV9NQVBfQ09PUkRfU0VUQklORF9DTUQpOwotCU9VVF9CQVRDSChURVhCSU5EX1NFVDMoVEVY Q09PUkRTUkNfVlRYU0VUXzMpIHwKLQkJICBURVhCSU5EX1NFVDIoVEVYQ09PUkRTUkNfVlRYU0VU XzIpIHwKLQkJICBURVhCSU5EX1NFVDEoVEVYQ09PUkRTUkNfVlRYU0VUXzEpIHwKLQkJICBURVhC SU5EX1NFVDAoVEVYQ09PUkRTUkNfVlRYU0VUXzApKTsKLQotCU9VVF9CQVRDSChfM0RTVEFURV9T Q0lTU09SX0VOQUJMRV9DTUQgfCBESVNBQkxFX1NDSVNTT1JfUkVDVCk7Ci0KLQlPVVRfQkFUQ0go XzNEU1RBVEVfVkVSVEVYX1RSQU5TRk9STSk7Ci0JT1VUX0JBVENIKERJU0FCTEVfVklFV1BPUlRf VFJBTlNGT1JNIHwgRElTQUJMRV9QRVJTUEVDVElWRV9ESVZJREUpOwotCi0JT1VUX0JBVENIKF8z RFNUQVRFX1dfU1RBVEVfQ01EKTsKLQlPVVRfQkFUQ0goTUFHSUNfV19TVEFURV9EV09SRDEpOwot CU9VVF9CQVRDSCgweDNmODAwMDAwIC8qIDEuMCBpbiBJRUVFIGZsb2F0ICovICk7Ci0KLQlPVVRf QkFUQ0goXzNEU1RBVEVfSU5EUFRfQUxQSEFfQkxFTkRfQ01EIHwKLQkJICBESVNBQkxFX0lORFBU X0FMUEhBX0JMRU5EIHwKLQkJICBFTkFCTEVfQUxQSEFfQkxFTkRGVU5DIHwgQUJMRU5ERlVOQ19B REQpOwotCi0JT1VUX0JBVENIKF8zRFNUQVRFX0NPTlNUX0JMRU5EX0NPTE9SX0NNRCk7Ci0JT1VU X0JBVENIKDApOwotCi0JT1VUX0JBVENIKF8zRFNUQVRFX01PREVTXzFfQ01EIHwKLQkJICBFTkFC TEVfQ09MUl9CTE5EX0ZVTkMgfCBCTEVOREZVTkNfQUREIHwKLQkJICBFTkFCTEVfU1JDX0JMTkRf RkFDVE9SIHwgU1JDX0JMTkRfRkFDVChCTEVOREZBQ1RPUl9PTkUpIHwKLQkJICBFTkFCTEVfRFNU X0JMTkRfRkFDVE9SIHwgRFNUX0JMTkRfRkFDVChCTEVOREZBQ1RPUl9aRVJPKSk7Ci0KLQlPVVRf QkFUQ0goXzNEU1RBVEVfRU5BQkxFU18xX0NNRCB8Ci0JCSAgRElTQUJMRV9MT0dJQ19PUCB8Ci0J CSAgRElTQUJMRV9TVEVOQ0lMX1RFU1QgfAotCQkgIERJU0FCTEVfREVQVEhfQklBUyB8Ci0JCSAg RElTQUJMRV9TUEVDX0FERCB8Ci0JCSAgRElTQUJMRV9GT0cgfAotCQkgIERJU0FCTEVfQUxQSEFf VEVTVCB8Ci0JCSAgRElTQUJMRV9ERVBUSF9URVNUIHwKLQkJICBFTkFCTEVfQ09MT1JfQkxFTkQp OwotCi0JT1VUX0JBVENIKF8zRFNUQVRFX0VOQUJMRVNfMl9DTUQgfAotCQkgIERJU0FCTEVfU1RF TkNJTF9XUklURSB8Ci0JCSAgRElTQUJMRV9ESVRIRVIgfAotCQkgIERJU0FCTEVfREVQVEhfV1JJ VEUgfAotCQkgIEVOQUJMRV9DT0xPUl9NQVNLIHwKLQkJICBFTkFCTEVfQ09MT1JfV1JJVEUgfAot CQkgIEVOQUJMRV9URVhfQ0FDSEUpOworCWludGVsX2JiX291dChpYmIsIF8zRFNUQVRFX01BUF9D T09SRF9TRVRCSU5EX0NNRCk7CisJaW50ZWxfYmJfb3V0KGliYiwgVEVYQklORF9TRVQzKFRFWENP T1JEU1JDX1ZUWFNFVF8zKSB8CisJCSAgICAgVEVYQklORF9TRVQyKFRFWENPT1JEU1JDX1ZUWFNF VF8yKSB8CisJCSAgICAgVEVYQklORF9TRVQxKFRFWENPT1JEU1JDX1ZUWFNFVF8xKSB8CisJCSAg ICAgVEVYQklORF9TRVQwKFRFWENPT1JEU1JDX1ZUWFNFVF8wKSk7CisKKwlpbnRlbF9iYl9vdXQo aWJiLCBfM0RTVEFURV9TQ0lTU09SX0VOQUJMRV9DTUQgfCBESVNBQkxFX1NDSVNTT1JfUkVDVCk7 CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBfM0RTVEFURV9WRVJURVhfVFJBTlNGT1JNKTsKKwlpbnRl bF9iYl9vdXQoaWJiLCBESVNBQkxFX1ZJRVdQT1JUX1RSQU5TRk9STSB8IERJU0FCTEVfUEVSU1BF Q1RJVkVfRElWSURFKTsKKworCWludGVsX2JiX291dChpYmIsIF8zRFNUQVRFX1dfU1RBVEVfQ01E KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBNQUdJQ19XX1NUQVRFX0RXT1JEMSk7CisJaW50ZWxfYmJf b3V0KGliYiwgMHgzZjgwMDAwMCAvKiAxLjAgaW4gSUVFRSBmbG9hdCAqLyk7CisKKwlpbnRlbF9i Yl9vdXQoaWJiLCBfM0RTVEFURV9JTkRQVF9BTFBIQV9CTEVORF9DTUQgfAorCQkgICAgIERJU0FC TEVfSU5EUFRfQUxQSEFfQkxFTkQgfAorCQkgICAgIEVOQUJMRV9BTFBIQV9CTEVOREZVTkMgfCBB QkxFTkRGVU5DX0FERCk7CisKKwlpbnRlbF9iYl9vdXQoaWJiLCBfM0RTVEFURV9DT05TVF9CTEVO RF9DT0xPUl9DTUQpOworCWludGVsX2JiX291dChpYmIsIDApOworCisJaW50ZWxfYmJfb3V0KGli YiwgXzNEU1RBVEVfTU9ERVNfMV9DTUQgfAorCQkgICAgIEVOQUJMRV9DT0xSX0JMTkRfRlVOQyB8 IEJMRU5ERlVOQ19BREQgfAorCQkgICAgIEVOQUJMRV9TUkNfQkxORF9GQUNUT1IgfCBTUkNfQkxO RF9GQUNUKEJMRU5ERkFDVE9SX09ORSkgfAorCQkgICAgIEVOQUJMRV9EU1RfQkxORF9GQUNUT1Ig fCBEU1RfQkxORF9GQUNUKEJMRU5ERkFDVE9SX1pFUk8pKTsKKworCWludGVsX2JiX291dChpYmIs IF8zRFNUQVRFX0VOQUJMRVNfMV9DTUQgfAorCQkgICAgIERJU0FCTEVfTE9HSUNfT1AgfAorCQkg ICAgIERJU0FCTEVfU1RFTkNJTF9URVNUIHwKKwkJICAgICBESVNBQkxFX0RFUFRIX0JJQVMgfAor CQkgICAgIERJU0FCTEVfU1BFQ19BREQgfAorCQkgICAgIERJU0FCTEVfRk9HIHwKKwkJICAgICBE SVNBQkxFX0FMUEhBX1RFU1QgfAorCQkgICAgIERJU0FCTEVfREVQVEhfVEVTVCB8CisJCSAgICAg RU5BQkxFX0NPTE9SX0JMRU5EKTsKKworCWludGVsX2JiX291dChpYmIsIF8zRFNUQVRFX0VOQUJM RVNfMl9DTUQgfAorCQkgICAgIERJU0FCTEVfU1RFTkNJTF9XUklURSB8CisJCSAgICAgRElTQUJM RV9ESVRIRVIgfAorCQkgICAgIERJU0FCTEVfREVQVEhfV1JJVEUgfAorCQkgICAgIEVOQUJMRV9D T0xPUl9NQVNLIHwKKwkJICAgICBFTkFCTEVfQ09MT1JfV1JJVEUgfAorCQkgICAgIEVOQUJMRV9U RVhfQ0FDSEUpOwogfQogCi1zdGF0aWMgdm9pZCBnZW4yX2VtaXRfdGFyZ2V0KHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCQkgICAgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpkc3Qp CitzdGF0aWMgdm9pZCBnZW4yX2VtaXRfdGFyZ2V0KHN0cnVjdCBpbnRlbF9iYiAqaWJiLAorCQkJ ICAgICBjb25zdCBzdHJ1Y3QgaW50ZWxfYnVmICpkc3QpCiB7CiAJdWludDMyX3QgdGlsaW5nOwog CXVpbnQzMl90IGZvcm1hdDsKIAogCWlndF9hc3NlcnRfbHRlKGRzdC0+c3VyZmFjZVswXS5zdHJp ZGUsIDgxOTIpOwotCWlndF9hc3NlcnRfbHRlKGlndF9idWZfd2lkdGgoZHN0KSwgMjA0OCk7Ci0J aWd0X2Fzc2VydF9sdGUoaWd0X2J1Zl9oZWlnaHQoZHN0KSwgMjA0OCk7CisJaWd0X2Fzc2VydF9s dGUoaW50ZWxfYnVmX3dpZHRoKGRzdCksIDIwNDgpOworCWlndF9hc3NlcnRfbHRlKGludGVsX2J1 Zl9oZWlnaHQoZHN0KSwgMjA0OCk7CiAKIAlzd2l0Y2ggKGRzdC0+YnBwKSB7CiAJCWNhc2UgODog Zm9ybWF0ID0gQ09MUl9CVUZfOEJJVDsgYnJlYWs7CkBAIC0xNTUsMzMgKzE1NSwzNSBAQCBzdGF0 aWMgdm9pZCBnZW4yX2VtaXRfdGFyZ2V0KHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gs CiAJaWYgKGRzdC0+dGlsaW5nID09IEk5MTVfVElMSU5HX1kpCiAJCXRpbGluZyB8PSBCVUZfM0Rf VElMRV9XQUxLX1k7CiAKLQlPVVRfQkFUQ0goXzNEU1RBVEVfQlVGX0lORk9fQ01EKTsKLQlPVVRf QkFUQ0goQlVGXzNEX0lEX0NPTE9SX0JBQ0sgfCB0aWxpbmcgfCBCVUZfM0RfUElUQ0goZHN0LT5z dXJmYWNlWzBdLnN0cmlkZSkpOwotCU9VVF9SRUxPQyhkc3QtPmJvLCBJOTE1X0dFTV9ET01BSU5f UkVOREVSLCBJOTE1X0dFTV9ET01BSU5fUkVOREVSLCAwKTsKLQotCU9VVF9CQVRDSChfM0RTVEFU RV9EU1RfQlVGX1ZBUlNfQ01EKTsKLQlPVVRfQkFUQ0goZm9ybWF0IHwKLQkJICBEU1RPUkdfSE9S VF9CSUFTKDB4OCkgfAotCQkgIERTVE9SR19WRVJUX0JJQVMoMHg4KSk7Ci0KLQlPVVRfQkFUQ0go XzNEU1RBVEVfRFJBV19SRUNUX0NNRCk7Ci0JT1VUX0JBVENIKDApOwotCU9VVF9CQVRDSCgwKTsJ CS8qIHltaW4sIHhtaW4gKi8KLQlPVVRfQkFUQ0goRFJBV19ZTUFYKGlndF9idWZfaGVpZ2h0KGRz dCkgLSAxKSB8Ci0JCSAgRFJBV19YTUFYKGlndF9idWZfd2lkdGgoZHN0KSAtIDEpKTsKLQlPVVRf QkFUQ0goMCk7CQkvKiB5b3JpZywgeG9yaWcgKi8KKwlpbnRlbF9iYl9vdXQoaWJiLCBfM0RTVEFU RV9CVUZfSU5GT19DTUQpOworCWludGVsX2JiX291dChpYmIsIEJVRl8zRF9JRF9DT0xPUl9CQUNL IHwgdGlsaW5nIHwKKwkJICAgICBCVUZfM0RfUElUQ0goZHN0LT5zdXJmYWNlWzBdLnN0cmlkZSkp OworCWludGVsX2JiX2VtaXRfcmVsb2MoaWJiLCBkc3QtPmhhbmRsZSwgSTkxNV9HRU1fRE9NQUlO X1JFTkRFUiwKKwkJCSAgICBJOTE1X0dFTV9ET01BSU5fUkVOREVSLCAwLCBkc3QtPmFkZHIub2Zm c2V0KTsKKworCWludGVsX2JiX291dChpYmIsIF8zRFNUQVRFX0RTVF9CVUZfVkFSU19DTUQpOwor CWludGVsX2JiX291dChpYmIsIGZvcm1hdCB8CisJCSAgICAgRFNUT1JHX0hPUlRfQklBUygweDgp IHwKKwkJICAgICBEU1RPUkdfVkVSVF9CSUFTKDB4OCkpOworCisJaW50ZWxfYmJfb3V0KGliYiwg XzNEU1RBVEVfRFJBV19SRUNUX0NNRCk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJaW50ZWxf YmJfb3V0KGliYiwgMCk7CQkvKiB5bWluLCB4bWluICovCisJaW50ZWxfYmJfb3V0KGliYiwgRFJB V19ZTUFYKGludGVsX2J1Zl9oZWlnaHQoZHN0KSAtIDEpIHwKKwkJICAgICBEUkFXX1hNQVgoaW50 ZWxfYnVmX3dpZHRoKGRzdCkgLSAxKSk7CisJaW50ZWxfYmJfb3V0KGliYiwgMCk7CQkvKiB5b3Jp ZywgeG9yaWcgKi8KIH0KIAotc3RhdGljIHZvaWQgZ2VuMl9lbWl0X3RleHR1cmUoc3RydWN0IGlu dGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCSAgICAgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpz cmMsCitzdGF0aWMgdm9pZCBnZW4yX2VtaXRfdGV4dHVyZShzdHJ1Y3QgaW50ZWxfYmIgKmliYiwK KwkJCSAgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9idWYgKnNyYywKIAkJCSAgICAgIGludCB1bml0 KQogewogCXVpbnQzMl90IHRpbGluZzsKIAl1aW50MzJfdCBmb3JtYXQ7CiAKIAlpZ3RfYXNzZXJ0 X2x0ZShzcmMtPnN1cmZhY2VbMF0uc3RyaWRlLCA4MTkyKTsKLQlpZ3RfYXNzZXJ0X2x0ZShpZ3Rf YnVmX3dpZHRoKHNyYyksIDIwNDgpOwotCWlndF9hc3NlcnRfbHRlKGlndF9idWZfaGVpZ2h0KHNy YyksIDIwNDgpOworCWlndF9hc3NlcnRfbHRlKGludGVsX2J1Zl93aWR0aChzcmMpLCAyMDQ4KTsK KwlpZ3RfYXNzZXJ0X2x0ZShpbnRlbF9idWZfaGVpZ2h0KHNyYyksIDIwNDgpOwogCiAJc3dpdGNo IChzcmMtPmJwcCkgewogCQljYXNlIDg6IGZvcm1hdCA9IE1BUFNVUkZfOEJJVCB8IE1UXzhCSVRf TDg7IGJyZWFrOwpAQCAtMTk2LDc4ICsxOTgsODQgQEAgc3RhdGljIHZvaWQgZ2VuMl9lbWl0X3Rl eHR1cmUoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKIAlpZiAoc3JjLT50aWxpbmcg PT0gSTkxNV9USUxJTkdfWSkKIAkJdGlsaW5nIHw9IFRNMFMxX1RJTEVfV0FMSzsKIAotCU9VVF9C QVRDSChfM0RTVEFURV9MT0FEX1NUQVRFX0lNTUVESUFURV8yIHwgTE9BRF9URVhUVVJFX01BUCh1 bml0KSB8IDQpOwotCU9VVF9SRUxPQyhzcmMtPmJvLCBJOTE1X0dFTV9ET01BSU5fU0FNUExFUiwg MCwgMCk7Ci0JT1VUX0JBVENIKChpZ3RfYnVmX2hlaWdodChzcmMpIC0gMSkgPDwgVE0wUzFfSEVJ R0hUX1NISUZUIHwKLQkJICAoaWd0X2J1Zl93aWR0aChzcmMpIC0gMSkgPDwgVE0wUzFfV0lEVEhf U0hJRlQgfAotCQkgIGZvcm1hdCB8IHRpbGluZyk7Ci0JT1VUX0JBVENIKChzcmMtPnN1cmZhY2Vb MF0uc3RyaWRlIC8gNCAtIDEpIDw8IFRNMFMyX1BJVENIX1NISUZUIHwgVE0wUzJfTUFQXzJEKTsK LQlPVVRfQkFUQ0goRklMVEVSX05FQVJFU1QgPDwgVE0wUzNfTUFHX0ZJTFRFUl9TSElGVCB8Ci0J CSAgRklMVEVSX05FQVJFU1QgPDwgVE0wUzNfTUlOX0ZJTFRFUl9TSElGVCB8Ci0JCSAgTUlQRklM VEVSX05PTkUgPDwgVE0wUzNfTUlQX0ZJTFRFUl9TSElGVCk7Ci0JT1VUX0JBVENIKDApOwkvKiBk ZWZhdWx0IGNvbG9yICovCi0KLQlPVVRfQkFUQ0goXzNEU1RBVEVfTUFQX0NPT1JEX1NFVF9DTUQg fCBURVhDT09SRF9TRVQodW5pdCkgfAotCQkgIEVOQUJMRV9URVhDT09SRF9QQVJBTVMgfCBURVhD T09SRFNfQVJFX05PUk1BTCB8Ci0JCSAgVEVYQ09PUkRUWVBFX0NBUlRFU0lBTiB8Ci0JCSAgRU5B QkxFX0FERFJfVl9DTlRMIHwgVEVYQ09PUkRfQUREUl9WX01PREUoVEVYQ09PUkRNT0RFX0NMQU1Q X0JPUkRFUikgfAotCQkgIEVOQUJMRV9BRERSX1VfQ05UTCB8IFRFWENPT1JEX0FERFJfVV9NT0RF KFRFWENPT1JETU9ERV9DTEFNUF9CT1JERVIpKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBfM0RTVEFU RV9MT0FEX1NUQVRFX0lNTUVESUFURV8yIHwgTE9BRF9URVhUVVJFX01BUCh1bml0KSB8IDQpOwor CWludGVsX2JiX2VtaXRfcmVsb2MoaWJiLCBzcmMtPmhhbmRsZSwgSTkxNV9HRU1fRE9NQUlOX1NB TVBMRVIsIDAsIDAsCisJCQkgICAgc3JjLT5hZGRyLm9mZnNldCk7CisJaW50ZWxfYmJfb3V0KGli YiwgKGludGVsX2J1Zl9oZWlnaHQoc3JjKSAtIDEpIDw8IFRNMFMxX0hFSUdIVF9TSElGVCB8CisJ CSAgICAgKGludGVsX2J1Zl93aWR0aChzcmMpIC0gMSkgPDwgVE0wUzFfV0lEVEhfU0hJRlQgfAor CQkgICAgIGZvcm1hdCB8IHRpbGluZyk7CisJaW50ZWxfYmJfb3V0KGliYiwgKHNyYy0+c3VyZmFj ZVswXS5zdHJpZGUgLyA0IC0gMSkgPDwgVE0wUzJfUElUQ0hfU0hJRlQgfCBUTTBTMl9NQVBfMkQp OworCWludGVsX2JiX291dChpYmIsIEZJTFRFUl9ORUFSRVNUIDw8IFRNMFMzX01BR19GSUxURVJf U0hJRlQgfAorCQkgICAgIEZJTFRFUl9ORUFSRVNUIDw8IFRNMFMzX01JTl9GSUxURVJfU0hJRlQg fAorCQkgICAgIE1JUEZJTFRFUl9OT05FIDw8IFRNMFMzX01JUF9GSUxURVJfU0hJRlQpOworCWlu dGVsX2JiX291dChpYmIsIDApOwkvKiBkZWZhdWx0IGNvbG9yICovCisKKwlpbnRlbF9iYl9vdXQo aWJiLCBfM0RTVEFURV9NQVBfQ09PUkRfU0VUX0NNRCB8IFRFWENPT1JEX1NFVCh1bml0KSB8CisJ CSAgICAgRU5BQkxFX1RFWENPT1JEX1BBUkFNUyB8IFRFWENPT1JEU19BUkVfTk9STUFMIHwKKwkJ ICAgICBURVhDT09SRFRZUEVfQ0FSVEVTSUFOIHwKKwkJICAgICBFTkFCTEVfQUREUl9WX0NOVEwg fCBURVhDT09SRF9BRERSX1ZfTU9ERShURVhDT09SRE1PREVfQ0xBTVBfQk9SREVSKSB8CisJCSAg ICAgRU5BQkxFX0FERFJfVV9DTlRMIHwgVEVYQ09PUkRfQUREUl9VX01PREUoVEVYQ09PUkRNT0RF X0NMQU1QX0JPUkRFUikpOwogfQogCi1zdGF0aWMgdm9pZCBnZW4yX2VtaXRfY29weV9waXBlbGlu ZShzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoKQorc3RhdGljIHZvaWQgZ2VuMl9lbWl0 X2NvcHlfcGlwZWxpbmUoc3RydWN0IGludGVsX2JiICppYmIpCiB7Ci0JT1VUX0JBVENIKF8zRFNU QVRFX0lORFBUX0FMUEhBX0JMRU5EX0NNRCB8IERJU0FCTEVfSU5EUFRfQUxQSEFfQkxFTkQpOwot CU9VVF9CQVRDSChfM0RTVEFURV9FTkFCTEVTXzFfQ01EIHwgRElTQUJMRV9MT0dJQ19PUCB8Ci0J CSAgRElTQUJMRV9TVEVOQ0lMX1RFU1QgfCBESVNBQkxFX0RFUFRIX0JJQVMgfAotCQkgIERJU0FC TEVfU1BFQ19BREQgfCBESVNBQkxFX0ZPRyB8IERJU0FCTEVfQUxQSEFfVEVTVCB8Ci0JCSAgRElT QUJMRV9DT0xPUl9CTEVORCB8IERJU0FCTEVfREVQVEhfVEVTVCk7Ci0KLQlPVVRfQkFUQ0goXzNE U1RBVEVfTE9BRF9TVEFURV9JTU1FRElBVEVfMiB8Ci0JCSAgTE9BRF9URVhUVVJFX0JMRU5EX1NU QUdFKDApIHwgMSk7Ci0JT1VUX0JBVENIKFRCMENfTEFTVF9TVEFHRSB8IFRCMENfUkVTVUxUX1ND QUxFXzFYIHwKLQkJICBUQjBDX09VVFBVVF9XUklURV9DVVJSRU5UIHwKLQkJICBUQjBDX09QX0FS RzEgfCBUQjBDX0FSRzFfU0VMX1RFWEVMMCk7Ci0JT1VUX0JBVENIKFRCMEFfUkVTVUxUX1NDQUxF XzFYIHwgVEIwQV9PVVRQVVRfV1JJVEVfQ1VSUkVOVCB8Ci0JCSAgVEIwQV9PUF9BUkcxIHwgVEIw QV9BUkcxX1NFTF9URVhFTDApOworCWludGVsX2JiX291dChpYmIsIF8zRFNUQVRFX0lORFBUX0FM UEhBX0JMRU5EX0NNRCB8IERJU0FCTEVfSU5EUFRfQUxQSEFfQkxFTkQpOworCWludGVsX2JiX291 dChpYmIsIF8zRFNUQVRFX0VOQUJMRVNfMV9DTUQgfCBESVNBQkxFX0xPR0lDX09QIHwKKwkJICAg ICBESVNBQkxFX1NURU5DSUxfVEVTVCB8IERJU0FCTEVfREVQVEhfQklBUyB8CisJCSAgICAgRElT QUJMRV9TUEVDX0FERCB8IERJU0FCTEVfRk9HIHwgRElTQUJMRV9BTFBIQV9URVNUIHwKKwkJICAg ICBESVNBQkxFX0NPTE9SX0JMRU5EIHwgRElTQUJMRV9ERVBUSF9URVNUKTsKKworCWludGVsX2Ji X291dChpYmIsIF8zRFNUQVRFX0xPQURfU1RBVEVfSU1NRURJQVRFXzIgfAorCQkgICAgIExPQURf VEVYVFVSRV9CTEVORF9TVEFHRSgwKSB8IDEpOworCWludGVsX2JiX291dChpYmIsIFRCMENfTEFT VF9TVEFHRSB8IFRCMENfUkVTVUxUX1NDQUxFXzFYIHwKKwkJICAgICBUQjBDX09VVFBVVF9XUklU RV9DVVJSRU5UIHwKKwkJICAgICBUQjBDX09QX0FSRzEgfCBUQjBDX0FSRzFfU0VMX1RFWEVMMCk7 CisJaW50ZWxfYmJfb3V0KGliYiwgVEIwQV9SRVNVTFRfU0NBTEVfMVggfCBUQjBBX09VVFBVVF9X UklURV9DVVJSRU5UIHwKKwkJICAgICBUQjBBX09QX0FSRzEgfCBUQjBBX0FSRzFfU0VMX1RFWEVM MCk7CiB9CiAKLXZvaWQgZ2VuMl9yZW5kZXJfY29weWZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVm ZmVyICpiYXRjaCwKLQkJCSAgZHJtX2ludGVsX2NvbnRleHQgKmNvbnRleHQsCi0JCQkgIGNvbnN0 IHN0cnVjdCBpZ3RfYnVmICpzcmMsIHVuc2lnbmVkIHNyY194LCB1bnNpZ25lZCBzcmNfeSwKLQkJ CSAgdW5zaWduZWQgd2lkdGgsIHVuc2lnbmVkIGhlaWdodCwKLQkJCSAgY29uc3Qgc3RydWN0IGln dF9idWYgKmRzdCwgdW5zaWduZWQgZHN0X3gsIHVuc2lnbmVkIGRzdF95KQordm9pZCBnZW4yX3Jl bmRlcl9jb3B5ZnVuYyhzdHJ1Y3QgaW50ZWxfYmIgKmliYiwKKwkJCSAgdWludDMyX3QgY3R4LAor CQkJICBzdHJ1Y3QgaW50ZWxfYnVmICpzcmMsCisJCQkgIHVpbnQzMl90IHNyY194LCB1aW50MzJf dCBzcmNfeSwKKwkJCSAgdWludDMyX3Qgd2lkdGgsIHVpbnQzMl90IGhlaWdodCwKKwkJCSAgc3Ry dWN0IGludGVsX2J1ZiAqZHN0LAorCQkJICB1aW50MzJfdCBkc3RfeCwgdWludDMyX3QgZHN0X3kp CiB7CiAJaWd0X2Fzc2VydChzcmMtPmJwcCA9PSBkc3QtPmJwcCk7CiAKLQlnZW4yX2VtaXRfaW52 YXJpYW50KGJhdGNoKTsKLQlnZW4yX2VtaXRfY29weV9waXBlbGluZShiYXRjaCk7CisJaW50ZWxf YmJfYWRkX2ludGVsX2J1ZihpYmIsIGRzdCwgdHJ1ZSk7CisJaW50ZWxfYmJfYWRkX2ludGVsX2J1 ZihpYmIsIHNyYywgZmFsc2UpOwogCi0JZ2VuMl9lbWl0X3RhcmdldChiYXRjaCwgZHN0KTsKLQln ZW4yX2VtaXRfdGV4dHVyZShiYXRjaCwgc3JjLCAwKTsKKwlnZW4yX2VtaXRfaW52YXJpYW50KGli Yik7CisJZ2VuMl9lbWl0X2NvcHlfcGlwZWxpbmUoaWJiKTsKIAotCU9VVF9CQVRDSChfM0RTVEFU RV9MT0FEX1NUQVRFX0lNTUVESUFURV8xIHwKLQkJICBJMV9MT0FEX1MoMikgfCBJMV9MT0FEX1Mo MykgfCBJMV9MT0FEX1MoOCkgfCAyKTsKLQlPVVRfQkFUQ0goMTw8MTIpOwotCU9VVF9CQVRDSChT M19DVUxMTU9ERV9OT05FIHwgUzNfVkVSVEVYSEFTX1hZKTsKLQlPVVRfQkFUQ0goUzhfRU5BQkxF X0NPTE9SX0JVRkZFUl9XUklURSk7CisJZ2VuMl9lbWl0X3RhcmdldChpYmIsIGRzdCk7CisJZ2Vu Ml9lbWl0X3RleHR1cmUoaWJiLCBzcmMsIDApOwogCi0JT1VUX0JBVENIKF8zRFNUQVRFX1ZFUlRF WF9GT1JNQVRfMl9DTUQgfCBURVhDT09SREZNVF8yRCA8PCAwKTsKKwlpbnRlbF9iYl9vdXQoaWJi LCBfM0RTVEFURV9MT0FEX1NUQVRFX0lNTUVESUFURV8xIHwKKwkJICAgICBJMV9MT0FEX1MoMikg fCBJMV9MT0FEX1MoMykgfCBJMV9MT0FEX1MoOCkgfCAyKTsKKwlpbnRlbF9iYl9vdXQoaWJiLCAx PDwxMik7CisJaW50ZWxfYmJfb3V0KGliYiwgUzNfQ1VMTE1PREVfTk9ORSB8IFMzX1ZFUlRFWEhB U19YWSk7CisJaW50ZWxfYmJfb3V0KGliYiwgUzhfRU5BQkxFX0NPTE9SX0JVRkZFUl9XUklURSk7 CiAKLQlPVVRfQkFUQ0goUFJJTTNEX0lOTElORSB8IFBSSU0zRF9SRUNUTElTVCB8ICgzKjQgLTEp KTsKLQllbWl0X3ZlcnRleChiYXRjaCwgZHN0X3ggKyB3aWR0aCk7Ci0JZW1pdF92ZXJ0ZXgoYmF0 Y2gsIGRzdF95ICsgaGVpZ2h0KTsKLQllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGJhdGNoLCBzcmNf eCArIHdpZHRoLCBpZ3RfYnVmX3dpZHRoKHNyYykpOwotCWVtaXRfdmVydGV4X25vcm1hbGl6ZWQo YmF0Y2gsIHNyY195ICsgaGVpZ2h0LCBpZ3RfYnVmX2hlaWdodChzcmMpKTsKKwlpbnRlbF9iYl9v dXQoaWJiLCBfM0RTVEFURV9WRVJURVhfRk9STUFUXzJfQ01EIHwgVEVYQ09PUkRGTVRfMkQgPDwg MCk7CiAKLQllbWl0X3ZlcnRleChiYXRjaCwgZHN0X3gpOwotCWVtaXRfdmVydGV4KGJhdGNoLCBk c3RfeSArIGhlaWdodCk7Ci0JZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChiYXRjaCwgc3JjX3gsIGln dF9idWZfd2lkdGgoc3JjKSk7Ci0JZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChiYXRjaCwgc3JjX3kg KyBoZWlnaHQsIGlndF9idWZfaGVpZ2h0KHNyYykpOworCWludGVsX2JiX291dChpYmIsIFBSSU0z RF9JTkxJTkUgfCBQUklNM0RfUkVDVExJU1QgfCAoMyo0IC0gMSkpOworCWVtaXRfdmVydGV4KGli YiwgZHN0X3ggKyB3aWR0aCk7CisJZW1pdF92ZXJ0ZXgoaWJiLCBkc3RfeSArIGhlaWdodCk7CisJ ZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChpYmIsIHNyY194ICsgd2lkdGgsIGludGVsX2J1Zl93aWR0 aChzcmMpKTsKKwllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGliYiwgc3JjX3kgKyBoZWlnaHQsIGlu dGVsX2J1Zl9oZWlnaHQoc3JjKSk7CiAKLQllbWl0X3ZlcnRleChiYXRjaCwgZHN0X3gpOwotCWVt aXRfdmVydGV4KGJhdGNoLCBkc3RfeSk7Ci0JZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChiYXRjaCwg c3JjX3gsIGlndF9idWZfd2lkdGgoc3JjKSk7Ci0JZW1pdF92ZXJ0ZXhfbm9ybWFsaXplZChiYXRj aCwgc3JjX3ksIGlndF9idWZfaGVpZ2h0KHNyYykpOworCWVtaXRfdmVydGV4KGliYiwgZHN0X3gp OworCWVtaXRfdmVydGV4KGliYiwgZHN0X3kgKyBoZWlnaHQpOworCWVtaXRfdmVydGV4X25vcm1h bGl6ZWQoaWJiLCBzcmNfeCwgaW50ZWxfYnVmX3dpZHRoKHNyYykpOworCWVtaXRfdmVydGV4X25v cm1hbGl6ZWQoaWJiLCBzcmNfeSArIGhlaWdodCwgaW50ZWxfYnVmX2hlaWdodChzcmMpKTsKIAot CWludGVsX2JhdGNoYnVmZmVyX2ZsdXNoKGJhdGNoKTsKKwllbWl0X3ZlcnRleChpYmIsIGRzdF94 KTsKKwllbWl0X3ZlcnRleChpYmIsIGRzdF95KTsKKwllbWl0X3ZlcnRleF9ub3JtYWxpemVkKGli Yiwgc3JjX3gsIGludGVsX2J1Zl93aWR0aChzcmMpKTsKKwllbWl0X3ZlcnRleF9ub3JtYWxpemVk KGliYiwgc3JjX3ksIGludGVsX2J1Zl9oZWlnaHQoc3JjKSk7CisKKwlpbnRlbF9iYl9mbHVzaF9i bGl0X3dpdGhfY29udGV4dChpYmIsIGN0eCk7CiB9CmRpZmYgLS1naXQgYS9saWIvcmVuZGVyY29w eV9pOTE1LmMgYi9saWIvcmVuZGVyY29weV9pOTE1LmMKaW5kZXggNTZlMTg2M2UuLmIxNmQ0ZjEy IDEwMDY0NAotLS0gYS9saWIvcmVuZGVyY29weV9pOTE1LmMKKysrIGIvbGliL3JlbmRlcmNvcHlf aTkxNS5jCkBAIC0xMSw3ICsxMSw3IEBACiAjaW5jbHVkZSAiZHJtLmgiCiAjaW5jbHVkZSAiaTkx NV9kcm0uaCIKICNpbmNsdWRlICJkcm10ZXN0LmgiCi0jaW5jbHVkZSAiaW50ZWxfYnVmbWdyLmgi CisjaW5jbHVkZSAiaW50ZWxfYnVmb3BzLmgiCiAjaW5jbHVkZSAiaW50ZWxfYmF0Y2hidWZmZXIu aCIKICNpbmNsdWRlICJpbnRlbF9pby5oIgogCkBAIC0xOSw2OCArMTksNzMgQEAKICNpbmNsdWRl ICJpOTE1XzNkLmgiCiAjaW5jbHVkZSAicmVuZGVyY29weS5oIgogCi12b2lkIGdlbjNfcmVuZGVy X2NvcHlmdW5jKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCi0JCQkgIGRybV9pbnRl bF9jb250ZXh0ICpjb250ZXh0LAotCQkJICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqc3JjLCB1bnNp Z25lZCBzcmNfeCwgdW5zaWduZWQgc3JjX3ksCi0JCQkgIHVuc2lnbmVkIHdpZHRoLCB1bnNpZ25l ZCBoZWlnaHQsCi0JCQkgIGNvbnN0IHN0cnVjdCBpZ3RfYnVmICpkc3QsIHVuc2lnbmVkIGRzdF94 LCB1bnNpZ25lZCBkc3RfeSkKK3ZvaWQgZ2VuM19yZW5kZXJfY29weWZ1bmMoc3RydWN0IGludGVs X2JiICppYmIsCisJCQkgIHVpbnQzMl90IGN0eCwKKwkJCSAgc3RydWN0IGludGVsX2J1ZiAqc3Jj LAorCQkJICB1aW50MzJfdCBzcmNfeCwgdWludDMyX3Qgc3JjX3ksCisJCQkgIHVpbnQzMl90IHdp ZHRoLCB1aW50MzJfdCBoZWlnaHQsCisJCQkgIHN0cnVjdCBpbnRlbF9idWYgKmRzdCwKKwkJCSAg dWludDMyX3QgZHN0X3gsIHVpbnQzMl90IGRzdF95KQogewogCWlndF9hc3NlcnQoc3JjLT5icHAg PT0gZHN0LT5icHApOwogCisJaW50ZWxfYmJfYWRkX2ludGVsX2J1ZihpYmIsIGRzdCwgdHJ1ZSk7 CisJaW50ZWxfYmJfYWRkX2ludGVsX2J1ZihpYmIsIHNyYywgZmFsc2UpOworCiAJLyogaW52YXJp YW50IHN0YXRlICovCiAJewotCQlPVVRfQkFUQ0goXzNEU1RBVEVfQUFfQ01EIHwKLQkJCSAgQUFf TElORV9FQ0FBUl9XSURUSF9FTkFCTEUgfAotCQkJICBBQV9MSU5FX0VDQUFSX1dJRFRIXzFfMCB8 Ci0JCQkgIEFBX0xJTkVfUkVHSU9OX1dJRFRIX0VOQUJMRSB8IEFBX0xJTkVfUkVHSU9OX1dJRFRI XzFfMCk7Ci0JCU9VVF9CQVRDSChfM0RTVEFURV9JTkRFUEVOREVOVF9BTFBIQV9CTEVORF9DTUQg fAotCQkJICBJQUJfTU9ESUZZX0VOQUJMRSB8Ci0JCQkgIElBQl9NT0RJRllfRlVOQyB8IChCTEVO REZVTkNfQUREIDw8IElBQl9GVU5DX1NISUZUKSB8Ci0JCQkgIElBQl9NT0RJRllfU1JDX0ZBQ1RP UiB8IChCTEVOREZBQ1RfT05FIDw8Ci0JCQkJCQkgICBJQUJfU1JDX0ZBQ1RPUl9TSElGVCkgfAot CQkJICBJQUJfTU9ESUZZX0RTVF9GQUNUT1IgfCAoQkxFTkRGQUNUX1pFUk8gPDwKLQkJCQkJCSAg IElBQl9EU1RfRkFDVE9SX1NISUZUKSk7Ci0JCU9VVF9CQVRDSChfM0RTVEFURV9ERkxUX0RJRkZV U0VfQ01EKTsKLQkJT1VUX0JBVENIKDApOwotCQlPVVRfQkFUQ0goXzNEU1RBVEVfREZMVF9TUEVD X0NNRCk7Ci0JCU9VVF9CQVRDSCgwKTsKLQkJT1VUX0JBVENIKF8zRFNUQVRFX0RGTFRfWl9DTUQp OwotCQlPVVRfQkFUQ0goMCk7Ci0JCU9VVF9CQVRDSChfM0RTVEFURV9DT09SRF9TRVRfQklORElO R1MgfAotCQkJICBDU0JfVENCKDAsIDApIHwKLQkJCSAgQ1NCX1RDQigxLCAxKSB8Ci0JCQkgIENT Ql9UQ0IoMiwgMikgfAotCQkJICBDU0JfVENCKDMsIDMpIHwKLQkJCSAgQ1NCX1RDQig0LCA0KSB8 Ci0JCQkgIENTQl9UQ0IoNSwgNSkgfCBDU0JfVENCKDYsIDYpIHwgQ1NCX1RDQig3LCA3KSk7Ci0J CU9VVF9CQVRDSChfM0RTVEFURV9SQVNURVJfUlVMRVNfQ01EIHwKLQkJCSAgRU5BQkxFX1BPSU5U X1JBU1RFUl9SVUxFIHwKLQkJCSAgT0dMX1BPSU5UX1JBU1RFUl9SVUxFIHwKLQkJCSAgRU5BQkxF X0xJTkVfU1RSSVBfUFJPVk9LRV9WUlRYIHwKLQkJCSAgRU5BQkxFX1RSSV9GQU5fUFJPVk9LRV9W UlRYIHwKLQkJCSAgTElORV9TVFJJUF9QUk9WT0tFX1ZSVFgoMSkgfAotCQkJICBUUklfRkFOX1BS T1ZPS0VfVlJUWCgyKSB8IEVOQUJMRV9URVhLSUxMXzNEXzREIHwgVEVYS0lMTF80RCk7Ci0JCU9V VF9CQVRDSChfM0RTVEFURV9NT0RFU180X0NNRCB8Ci0JCQkgIEVOQUJMRV9MT0dJQ19PUF9GVU5D IHwgTE9HSUNfT1BfRlVOQyhMT0dJQ09QX0NPUFkpIHwKLQkJCSAgRU5BQkxFX1NURU5DSUxfV1JJ VEVfTUFTSyB8IFNURU5DSUxfV1JJVEVfTUFTSygweGZmKSB8Ci0JCQkgIEVOQUJMRV9TVEVOQ0lM X1RFU1RfTUFTSyB8IFNURU5DSUxfVEVTVF9NQVNLKDB4ZmYpKTsKLQkJT1VUX0JBVENIKF8zRFNU QVRFX0xPQURfU1RBVEVfSU1NRURJQVRFXzEgfCBJMV9MT0FEX1MoMykgfCBJMV9MT0FEX1MoNCkg fCBJMV9MT0FEX1MoNSkgfCAyKTsKLQkJT1VUX0JBVENIKDB4MDAwMDAwMDApOwkvKiBEaXNhYmxl IHRleHR1cmUgY29vcmRpbmF0ZSB3cmFwLXNob3J0ZXN0ICovCi0JCU9VVF9CQVRDSCgoMSA8PCBT NF9QT0lOVF9XSURUSF9TSElGVCkgfAotCQkJICBTNF9MSU5FX1dJRFRIX09ORSB8Ci0JCQkgIFM0 X0NVTExNT0RFX05PTkUgfAotCQkJICBTNF9WRk1UX1hZKTsKLQkJT1VUX0JBVENIKDB4MDAwMDAw MDApOwkvKiBTdGVuY2lsLiAqLwotCQlPVVRfQkFUQ0goXzNEU1RBVEVfU0NJU1NPUl9FTkFCTEVf Q01EIHwgRElTQUJMRV9TQ0lTU09SX1JFQ1QpOwotCQlPVVRfQkFUQ0goXzNEU1RBVEVfU0NJU1NP Ul9SRUNUXzBfQ01EKTsKLQkJT1VUX0JBVENIKDApOwotCQlPVVRfQkFUQ0goMCk7Ci0JCU9VVF9C QVRDSChfM0RTVEFURV9ERVBUSF9TVUJSRUNUX0RJU0FCTEUpOwotCQlPVVRfQkFUQ0goXzNEU1RB VEVfTE9BRF9JTkRJUkVDVCB8IDApOwkvKiBkaXNhYmxlIGluZGlyZWN0IHN0YXRlICovCi0JCU9V VF9CQVRDSCgwKTsKLQkJT1VUX0JBVENIKF8zRFNUQVRFX1NUSVBQTEUpOwotCQlPVVRfQkFUQ0go MHgwMDAwMDAwMCk7Ci0JCU9VVF9CQVRDSChfM0RTVEFURV9CQUNLRkFDRV9TVEVOQ0lMX09QUyB8 IEJGT19FTkFCTEVfU1RFTkNJTF9UV09fU0lERSB8IDApOworCQlpbnRlbF9iYl9vdXQoaWJiLCBf M0RTVEFURV9BQV9DTUQgfAorCQkJICAgICBBQV9MSU5FX0VDQUFSX1dJRFRIX0VOQUJMRSB8CisJ CQkgICAgIEFBX0xJTkVfRUNBQVJfV0lEVEhfMV8wIHwKKwkJCSAgICAgQUFfTElORV9SRUdJT05f V0lEVEhfRU5BQkxFIHwgQUFfTElORV9SRUdJT05fV0lEVEhfMV8wKTsKKwkJaW50ZWxfYmJfb3V0 KGliYiwgXzNEU1RBVEVfSU5ERVBFTkRFTlRfQUxQSEFfQkxFTkRfQ01EIHwKKwkJCSAgICAgSUFC X01PRElGWV9FTkFCTEUgfAorCQkJICAgICBJQUJfTU9ESUZZX0ZVTkMgfCAoQkxFTkRGVU5DX0FE RCA8PCBJQUJfRlVOQ19TSElGVCkgfAorCQkJICAgICBJQUJfTU9ESUZZX1NSQ19GQUNUT1IgfCAo QkxFTkRGQUNUX09ORSA8PAorCQkJCQkJICAgICAgSUFCX1NSQ19GQUNUT1JfU0hJRlQpIHwKKwkJ CSAgICAgSUFCX01PRElGWV9EU1RfRkFDVE9SIHwgKEJMRU5ERkFDVF9aRVJPIDw8CisJCQkJCQkg ICAgICBJQUJfRFNUX0ZBQ1RPUl9TSElGVCkpOworCQlpbnRlbF9iYl9vdXQoaWJiLCBfM0RTVEFU RV9ERkxUX0RJRkZVU0VfQ01EKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgMCk7CisJCWludGVsX2Ji X291dChpYmIsIF8zRFNUQVRFX0RGTFRfU1BFQ19DTUQpOworCQlpbnRlbF9iYl9vdXQoaWJiLCAw KTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgXzNEU1RBVEVfREZMVF9aX0NNRCk7CisJCWludGVsX2Ji X291dChpYmIsIDApOworCQlpbnRlbF9iYl9vdXQoaWJiLCBfM0RTVEFURV9DT09SRF9TRVRfQklO RElOR1MgfAorCQkJICAgICBDU0JfVENCKDAsIDApIHwKKwkJCSAgICAgQ1NCX1RDQigxLCAxKSB8 CisJCQkgICAgIENTQl9UQ0IoMiwgMikgfAorCQkJICAgICBDU0JfVENCKDMsIDMpIHwKKwkJCSAg ICAgQ1NCX1RDQig0LCA0KSB8CisJCQkgICAgIENTQl9UQ0IoNSwgNSkgfCBDU0JfVENCKDYsIDYp IHwgQ1NCX1RDQig3LCA3KSk7CisJCWludGVsX2JiX291dChpYmIsIF8zRFNUQVRFX1JBU1RFUl9S VUxFU19DTUQgfAorCQkJICAgICBFTkFCTEVfUE9JTlRfUkFTVEVSX1JVTEUgfAorCQkJICAgICBP R0xfUE9JTlRfUkFTVEVSX1JVTEUgfAorCQkJICAgICBFTkFCTEVfTElORV9TVFJJUF9QUk9WT0tF X1ZSVFggfAorCQkJICAgICBFTkFCTEVfVFJJX0ZBTl9QUk9WT0tFX1ZSVFggfAorCQkJICAgICBM SU5FX1NUUklQX1BST1ZPS0VfVlJUWCgxKSB8CisJCQkgICAgIFRSSV9GQU5fUFJPVk9LRV9WUlRY KDIpIHwgRU5BQkxFX1RFWEtJTExfM0RfNEQgfCBURVhLSUxMXzREKTsKKwkJaW50ZWxfYmJfb3V0 KGliYiwgXzNEU1RBVEVfTU9ERVNfNF9DTUQgfAorCQkJICAgICBFTkFCTEVfTE9HSUNfT1BfRlVO QyB8IExPR0lDX09QX0ZVTkMoTE9HSUNPUF9DT1BZKSB8CisJCQkgICAgIEVOQUJMRV9TVEVOQ0lM X1dSSVRFX01BU0sgfCBTVEVOQ0lMX1dSSVRFX01BU0soMHhmZikgfAorCQkJICAgICBFTkFCTEVf U1RFTkNJTF9URVNUX01BU0sgfCBTVEVOQ0lMX1RFU1RfTUFTSygweGZmKSk7CisJCWludGVsX2Ji X291dChpYmIsIF8zRFNUQVRFX0xPQURfU1RBVEVfSU1NRURJQVRFXzEgfCBJMV9MT0FEX1MoMykg fCBJMV9MT0FEX1MoNCkgfCBJMV9MT0FEX1MoNSkgfCAyKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwg MHgwMDAwMDAwMCk7CS8qIERpc2FibGUgdGV4dHVyZSBjb29yZGluYXRlIHdyYXAtc2hvcnRlc3Qg Ki8KKwkJaW50ZWxfYmJfb3V0KGliYiwgKDEgPDwgUzRfUE9JTlRfV0lEVEhfU0hJRlQpIHwKKwkJ CSAgICAgUzRfTElORV9XSURUSF9PTkUgfAorCQkJICAgICBTNF9DVUxMTU9ERV9OT05FIHwKKwkJ CSAgICAgUzRfVkZNVF9YWSk7CisJCWludGVsX2JiX291dChpYmIsIDB4MDAwMDAwMDApOwkvKiBT dGVuY2lsLiAqLworCQlpbnRlbF9iYl9vdXQoaWJiLCBfM0RTVEFURV9TQ0lTU09SX0VOQUJMRV9D TUQgfCBESVNBQkxFX1NDSVNTT1JfUkVDVCk7CisJCWludGVsX2JiX291dChpYmIsIF8zRFNUQVRF X1NDSVNTT1JfUkVDVF8wX0NNRCk7CisJCWludGVsX2JiX291dChpYmIsIDApOworCQlpbnRlbF9i Yl9vdXQoaWJiLCAwKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgXzNEU1RBVEVfREVQVEhfU1VCUkVD VF9ESVNBQkxFKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgXzNEU1RBVEVfTE9BRF9JTkRJUkVDVCB8 IDApOwkvKiBkaXNhYmxlIGluZGlyZWN0IHN0YXRlICovCisJCWludGVsX2JiX291dChpYmIsIDAp OworCQlpbnRlbF9iYl9vdXQoaWJiLCBfM0RTVEFURV9TVElQUExFKTsKKwkJaW50ZWxfYmJfb3V0 KGliYiwgMHgwMDAwMDAwMCk7CisJCWludGVsX2JiX291dChpYmIsIF8zRFNUQVRFX0JBQ0tGQUNF X1NURU5DSUxfT1BTIHwgQkZPX0VOQUJMRV9TVEVOQ0lMX1RXT19TSURFIHwgMCk7CiAJfQogCiAJ Lyogc2FtbGVyIHN0YXRlICovCkBAIC04OSw4ICs5NCw4IEBAIHZvaWQgZ2VuM19yZW5kZXJfY29w eWZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKIAkJdWludDMyX3QgZm9ybWF0 X2JpdHMsIHRpbGluZ19iaXRzID0gMDsKIAogCQlpZ3RfYXNzZXJ0X2x0ZShzcmMtPnN1cmZhY2Vb MF0uc3RyaWRlLCA4MTkyKTsKLQkJaWd0X2Fzc2VydF9sdGUoaWd0X2J1Zl93aWR0aChzcmMpLCAy MDQ4KTsKLQkJaWd0X2Fzc2VydF9sdGUoaWd0X2J1Zl9oZWlnaHQoc3JjKSwgMjA0OCk7CisJCWln dF9hc3NlcnRfbHRlKGludGVsX2J1Zl93aWR0aChzcmMpLCAyMDQ4KTsKKwkJaWd0X2Fzc2VydF9s dGUoaW50ZWxfYnVmX2hlaWdodChzcmMpLCAyMDQ4KTsKIAogCQlpZiAoc3JjLT50aWxpbmcgIT0g STkxNV9USUxJTkdfTk9ORSkKIAkJCXRpbGluZ19iaXRzID0gTVMzX1RJTEVEX1NVUkZBQ0U7CkBA IC0xMDQsMjMgKzEwOSwyNSBAQCB2b2lkIGdlbjNfcmVuZGVyX2NvcHlmdW5jKHN0cnVjdCBpbnRl bF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCiAJCQlkZWZhdWx0OiBpZ3RfYXNzZXJ0KDApOwogCQl9CiAK LQkJT1VUX0JBVENIKF8zRFNUQVRFX01BUF9TVEFURSB8ICgzICogVEVYX0NPVU5UKSk7Ci0JCU9V VF9CQVRDSCgoMSA8PCBURVhfQ09VTlQpIC0gMSk7Ci0JCU9VVF9SRUxPQyhzcmMtPmJvLCBJOTE1 X0dFTV9ET01BSU5fU0FNUExFUiwgMCwgMCk7Ci0JCU9VVF9CQVRDSChmb3JtYXRfYml0cyB8IHRp bGluZ19iaXRzIHwKLQkJCSAgKGlndF9idWZfaGVpZ2h0KHNyYykgLSAxKSA8PCBNUzNfSEVJR0hU X1NISUZUIHwKLQkJCSAgKGlndF9idWZfd2lkdGgoc3JjKSAtIDEpIDw8IE1TM19XSURUSF9TSElG VCk7Ci0JCU9VVF9CQVRDSCgoc3JjLT5zdXJmYWNlWzBdLnN0cmlkZS80LTEpIDw8IE1TNF9QSVRD SF9TSElGVCk7Ci0KLQkJT1VUX0JBVENIKF8zRFNUQVRFX1NBTVBMRVJfU1RBVEUgfCAoMyAqIFRF WF9DT1VOVCkpOwotCQlPVVRfQkFUQ0goKDEgPDwgVEVYX0NPVU5UKSAtIDEpOwotCQlPVVRfQkFU Q0goTUlQRklMVEVSX05PTkUgPDwgU1MyX01JUF9GSUxURVJfU0hJRlQgfAotCQkJICBGSUxURVJf TkVBUkVTVCA8PCBTUzJfTUFHX0ZJTFRFUl9TSElGVCB8Ci0JCQkgIEZJTFRFUl9ORUFSRVNUIDw8 IFNTMl9NSU5fRklMVEVSX1NISUZUKTsKLQkJT1VUX0JBVENIKFRFWENPT1JETU9ERV9XUkFQIDw8 IFNTM19UQ1hfQUREUl9NT0RFX1NISUZUIHwKLQkJCSAgVEVYQ09PUkRNT0RFX1dSQVAgPDwgU1Mz X1RDWV9BRERSX01PREVfU0hJRlQgfAotCQkJICAwIDw8IFNTM19URVhUVVJFTUFQX0lOREVYX1NI SUZUKTsKLQkJT1VUX0JBVENIKDB4MDAwMDAwMDApOworCQlpbnRlbF9iYl9vdXQoaWJiLCBfM0RT VEFURV9NQVBfU1RBVEUgfCAoMyAqIFRFWF9DT1VOVCkpOworCQlpbnRlbF9iYl9vdXQoaWJiLCAo MSA8PCBURVhfQ09VTlQpIC0gMSk7CisJCWludGVsX2JiX2VtaXRfcmVsb2MoaWJiLCBzcmMtPmhh bmRsZSwKKwkJCQkgICAgSTkxNV9HRU1fRE9NQUlOX1NBTVBMRVIsIDAsCisJCQkJICAgIDAsIHNy Yy0+YWRkci5vZmZzZXQpOworCQlpbnRlbF9iYl9vdXQoaWJiLCBmb3JtYXRfYml0cyB8IHRpbGlu Z19iaXRzIHwKKwkJCSAgICAgKGludGVsX2J1Zl9oZWlnaHQoc3JjKSAtIDEpIDw8IE1TM19IRUlH SFRfU0hJRlQgfAorCQkJICAgICAoaW50ZWxfYnVmX3dpZHRoKHNyYykgLSAxKSA8PCBNUzNfV0lE VEhfU0hJRlQpOworCQlpbnRlbF9iYl9vdXQoaWJiLCAoc3JjLT5zdXJmYWNlWzBdLnN0cmlkZS80 LTEpIDw8IE1TNF9QSVRDSF9TSElGVCk7CisKKwkJaW50ZWxfYmJfb3V0KGliYiwgXzNEU1RBVEVf U0FNUExFUl9TVEFURSB8ICgzICogVEVYX0NPVU5UKSk7CisJCWludGVsX2JiX291dChpYmIsICgx IDw8IFRFWF9DT1VOVCkgLSAxKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgTUlQRklMVEVSX05PTkUg PDwgU1MyX01JUF9GSUxURVJfU0hJRlQgfAorCQkJICAgICBGSUxURVJfTkVBUkVTVCA8PCBTUzJf TUFHX0ZJTFRFUl9TSElGVCB8CisJCQkgICAgIEZJTFRFUl9ORUFSRVNUIDw8IFNTMl9NSU5fRklM VEVSX1NISUZUKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgVEVYQ09PUkRNT0RFX1dSQVAgPDwgU1Mz X1RDWF9BRERSX01PREVfU0hJRlQgfAorCQkJICAgICBURVhDT09SRE1PREVfV1JBUCA8PCBTUzNf VENZX0FERFJfTU9ERV9TSElGVCB8CisJCQkgICAgIDAgPDwgU1MzX1RFWFRVUkVNQVBfSU5ERVhf U0hJRlQpOworCQlpbnRlbF9iYl9vdXQoaWJiLCAweDAwMDAwMDAwKTsKIAl9CiAKIAkvKiByZW5k ZXIgdGFyZ2V0IHN0YXRlICovCkBAIC0xMjksOCArMTM2LDggQEAgdm9pZCBnZW4zX3JlbmRlcl9j b3B5ZnVuYyhzdHJ1Y3QgaW50ZWxfYmF0Y2hidWZmZXIgKmJhdGNoLAogCQl1aW50MzJfdCBmb3Jt YXRfYml0czsKIAogCQlpZ3RfYXNzZXJ0X2x0ZShkc3QtPnN1cmZhY2VbMF0uc3RyaWRlLCA4MTky KTsKLQkJaWd0X2Fzc2VydF9sdGUoaWd0X2J1Zl93aWR0aChkc3QpLCAyMDQ4KTsKLQkJaWd0X2Fz c2VydF9sdGUoaWd0X2J1Zl9oZWlnaHQoZHN0KSwgMjA0OCk7CisJCWlndF9hc3NlcnRfbHRlKGlu dGVsX2J1Zl93aWR0aChkc3QpLCAyMDQ4KTsKKwkJaWd0X2Fzc2VydF9sdGUoaW50ZWxfYnVmX2hl aWdodChkc3QpLCAyMDQ4KTsKIAogCQlzd2l0Y2ggKGRzdC0+YnBwKSB7CiAJCQljYXNlIDg6IGZv cm1hdF9iaXRzID0gQ09MUl9CVUZfOEJJVDsgYnJlYWs7CkBAIC0xNDQsODEgKzE1MSw4MyBAQCB2 b2lkIGdlbjNfcmVuZGVyX2NvcHlmdW5jKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gs CiAJCWlmIChkc3QtPnRpbGluZyA9PSBJOTE1X1RJTElOR19ZKQogCQkJdGlsaW5nX2JpdHMgfD0g QlVGXzNEX1RJTEVfV0FMS19ZOwogCi0JCU9VVF9CQVRDSChfM0RTVEFURV9CVUZfSU5GT19DTUQp OwotCQlPVVRfQkFUQ0goQlVGXzNEX0lEX0NPTE9SX0JBQ0sgfCB0aWxpbmdfYml0cyB8Ci0JCQkg IEJVRl8zRF9QSVRDSChkc3QtPnN1cmZhY2VbMF0uc3RyaWRlKSk7Ci0JCU9VVF9SRUxPQyhkc3Qt PmJvLCBJOTE1X0dFTV9ET01BSU5fUkVOREVSLCBJOTE1X0dFTV9ET01BSU5fUkVOREVSLCAwKTsK KwkJaW50ZWxfYmJfb3V0KGliYiwgXzNEU1RBVEVfQlVGX0lORk9fQ01EKTsKKwkJaW50ZWxfYmJf b3V0KGliYiwgQlVGXzNEX0lEX0NPTE9SX0JBQ0sgfCB0aWxpbmdfYml0cyB8CisJCQkgICAgIEJV Rl8zRF9QSVRDSChkc3QtPnN1cmZhY2VbMF0uc3RyaWRlKSk7CisJCWludGVsX2JiX2VtaXRfcmVs b2MoaWJiLCBkc3QtPmhhbmRsZSwKKwkJCQkgICAgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiwgSTkx NV9HRU1fRE9NQUlOX1JFTkRFUiwKKwkJCQkgICAgMCwgZHN0LT5hZGRyLm9mZnNldCk7CiAKLQkJ T1VUX0JBVENIKF8zRFNUQVRFX0RTVF9CVUZfVkFSU19DTUQpOwotCQlPVVRfQkFUQ0goZm9ybWF0 X2JpdHMgfAotCQkJICBEU1RPUkdfSE9SVF9CSUFTKDB4OCkgfAotCQkJICBEU1RPUkdfVkVSVF9C SUFTKDB4OCkpOworCQlpbnRlbF9iYl9vdXQoaWJiLCBfM0RTVEFURV9EU1RfQlVGX1ZBUlNfQ01E KTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgZm9ybWF0X2JpdHMgfAorCQkJICAgICBEU1RPUkdfSE9S VF9CSUFTKDB4OCkgfAorCQkJICAgICBEU1RPUkdfVkVSVF9CSUFTKDB4OCkpOwogCiAJCS8qIGRy YXcgcmVjdCBpcyB1bmNvbmRpdGlvbmFsICovCi0JCU9VVF9CQVRDSChfM0RTVEFURV9EUkFXX1JF Q1RfQ01EKTsKLQkJT1VUX0JBVENIKDB4MDAwMDAwMDApOwotCQlPVVRfQkFUQ0goMHgwMDAwMDAw MCk7CS8qIHltaW4sIHhtaW4gKi8KLQkJT1VUX0JBVENIKERSQVdfWU1BWChpZ3RfYnVmX2hlaWdo dChkc3QpIC0gMSkgfAotCQkJICBEUkFXX1hNQVgoaWd0X2J1Zl93aWR0aChkc3QpIC0gMSkpOwor CQlpbnRlbF9iYl9vdXQoaWJiLCBfM0RTVEFURV9EUkFXX1JFQ1RfQ01EKTsKKwkJaW50ZWxfYmJf b3V0KGliYiwgMHgwMDAwMDAwMCk7CisJCWludGVsX2JiX291dChpYmIsIDB4MDAwMDAwMDApOwkv KiB5bWluLCB4bWluICovCisJCWludGVsX2JiX291dChpYmIsIERSQVdfWU1BWChpbnRlbF9idWZf aGVpZ2h0KGRzdCkgLSAxKSB8CisJCQkgICAgIERSQVdfWE1BWChpbnRlbF9idWZfd2lkdGgoZHN0 KSAtIDEpKTsKIAkJLyogeW9yaWcsIHhvcmlnIChyZWxhdGUgdG8gY29sb3IgYnVmZmVyPykgKi8K LQkJT1VUX0JBVENIKDB4MDAwMDAwMDApOworCQlpbnRlbF9iYl9vdXQoaWJiLCAweDAwMDAwMDAw KTsKIAl9CiAKIAkvKiB0ZXhmbXQgKi8KIAl7Ci0JCU9VVF9CQVRDSChfM0RTVEFURV9MT0FEX1NU QVRFX0lNTUVESUFURV8xIHwKLQkJCSAgSTFfTE9BRF9TKDEpIHwgSTFfTE9BRF9TKDIpIHwgSTFf TE9BRF9TKDYpIHwgMik7Ci0JCU9VVF9CQVRDSCgoNCA8PCBTMV9WRVJURVhfV0lEVEhfU0hJRlQp IHwKLQkJCSAgKDQgPDwgUzFfVkVSVEVYX1BJVENIX1NISUZUKSk7Ci0JCU9VVF9CQVRDSCh+UzJf VEVYQ09PUkRfRk1UKDAsIFRFWENPT1JERk1UX05PVF9QUkVTRU5UKSB8IFMyX1RFWENPT1JEX0ZN VCgwLCBURVhDT09SREZNVF8yRCkpOwotCQlPVVRfQkFUQ0goUzZfQ0JVRl9CTEVORF9FTkFCTEUg fCBTNl9DT0xPUl9XUklURV9FTkFCTEUgfAotCQkJICBCTEVOREZVTkNfQUREIDw8IFM2X0NCVUZf QkxFTkRfRlVOQ19TSElGVCB8Ci0JCQkgIEJMRU5ERkFDVF9PTkUgPDwgUzZfQ0JVRl9TUkNfQkxF TkRfRkFDVF9TSElGVCB8Ci0JCQkgIEJMRU5ERkFDVF9aRVJPIDw8IFM2X0NCVUZfRFNUX0JMRU5E X0ZBQ1RfU0hJRlQpOworCQlpbnRlbF9iYl9vdXQoaWJiLCBfM0RTVEFURV9MT0FEX1NUQVRFX0lN TUVESUFURV8xIHwKKwkJCSAgICAgSTFfTE9BRF9TKDEpIHwgSTFfTE9BRF9TKDIpIHwgSTFfTE9B RF9TKDYpIHwgMik7CisJCWludGVsX2JiX291dChpYmIsICg0IDw8IFMxX1ZFUlRFWF9XSURUSF9T SElGVCkgfAorCQkJICAgICAoNCA8PCBTMV9WRVJURVhfUElUQ0hfU0hJRlQpKTsKKwkJaW50ZWxf YmJfb3V0KGliYiwgflMyX1RFWENPT1JEX0ZNVCgwLCBURVhDT09SREZNVF9OT1RfUFJFU0VOVCkg fCBTMl9URVhDT09SRF9GTVQoMCwgVEVYQ09PUkRGTVRfMkQpKTsKKwkJaW50ZWxfYmJfb3V0KGli YiwgUzZfQ0JVRl9CTEVORF9FTkFCTEUgfCBTNl9DT0xPUl9XUklURV9FTkFCTEUgfAorCQkJICAg ICBCTEVOREZVTkNfQUREIDw8IFM2X0NCVUZfQkxFTkRfRlVOQ19TSElGVCB8CisJCQkgICAgIEJM RU5ERkFDVF9PTkUgPDwgUzZfQ0JVRl9TUkNfQkxFTkRfRkFDVF9TSElGVCB8CisJCQkgICAgIEJM RU5ERkFDVF9aRVJPIDw8IFM2X0NCVUZfRFNUX0JMRU5EX0ZBQ1RfU0hJRlQpOwogCX0KIAogCS8q IGZyYWdlIHNoYWRlciAqLwogCXsKLQkJT1VUX0JBVENIKF8zRFNUQVRFX1BJWEVMX1NIQURFUl9Q Uk9HUkFNIHwgKDEgKyAzKjMgLSAyKSk7CisJCWludGVsX2JiX291dChpYmIsIF8zRFNUQVRFX1BJ WEVMX1NIQURFUl9QUk9HUkFNIHwgKDEgKyAzKjMgLSAyKSk7CiAJCS8qIGRlY2wgRlNfVDAgKi8K LQkJT1VUX0JBVENIKEQwX0RDTCB8Ci0JCQkgIFJFR19UWVBFKEZTX1QwKSA8PCBEMF9UWVBFX1NI SUZUIHwKLQkJCSAgUkVHX05SKEZTX1QwKSA8PCBEMF9OUl9TSElGVCB8Ci0JCQkgICgoUkVHX1RZ UEUoRlNfVDApICE9IFJFR19UWVBFX1MpID8gRDBfQ0hBTk5FTF9BTEwgOiAwKSk7Ci0JCU9VVF9C QVRDSCgwKTsKLQkJT1VUX0JBVENIKDApOworCQlpbnRlbF9iYl9vdXQoaWJiLCBEMF9EQ0wgfAor CQkJICAgICBSRUdfVFlQRShGU19UMCkgPDwgRDBfVFlQRV9TSElGVCB8CisJCQkgICAgIFJFR19O UihGU19UMCkgPDwgRDBfTlJfU0hJRlQgfAorCQkJICAgICAoKFJFR19UWVBFKEZTX1QwKSAhPSBS RUdfVFlQRV9TKSA/IEQwX0NIQU5ORUxfQUxMIDogMCkpOworCQlpbnRlbF9iYl9vdXQoaWJiLCAw KTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgMCk7CiAJCS8qIGRlY2wgRlNfUzAgKi8KLQkJT1VUX0JB VENIKEQwX0RDTCB8Ci0JCQkgIChSRUdfVFlQRShGU19TMCkgPDwgRDBfVFlQRV9TSElGVCkgfAot CQkJICAoUkVHX05SKEZTX1MwKSA8PCBEMF9OUl9TSElGVCkgfAotCQkJICAoKFJFR19UWVBFKEZT X1MwKSAhPSBSRUdfVFlQRV9TKSA/IEQwX0NIQU5ORUxfQUxMIDogMCkpOwotCQlPVVRfQkFUQ0go MCk7Ci0JCU9VVF9CQVRDSCgwKTsKKwkJaW50ZWxfYmJfb3V0KGliYiwgRDBfRENMIHwKKwkJCSAg ICAgKFJFR19UWVBFKEZTX1MwKSA8PCBEMF9UWVBFX1NISUZUKSB8CisJCQkgICAgIChSRUdfTlIo RlNfUzApIDw8IEQwX05SX1NISUZUKSB8CisJCQkgICAgICgoUkVHX1RZUEUoRlNfUzApICE9IFJF R19UWVBFX1MpID8gRDBfQ0hBTk5FTF9BTEwgOiAwKSk7CisJCWludGVsX2JiX291dChpYmIsIDAp OworCQlpbnRlbF9iYl9vdXQoaWJiLCAwKTsKIAkJLyogdGV4bGQoRlNfT0MsIEZTX1MwLCBGU19U MCAqLwotCQlPVVRfQkFUQ0goVDBfVEVYTEQgfAotCQkJICAoUkVHX1RZUEUoRlNfT0MpIDw8IFQw X0RFU1RfVFlQRV9TSElGVCkgfAotCQkJICAoUkVHX05SKEZTX09DKSA8PCBUMF9ERVNUX05SX1NI SUZUKSB8Ci0JCQkgIChSRUdfTlIoRlNfUzApIDw8IFQwX1NBTVBMRVJfTlJfU0hJRlQpKTsKLQkJ T1VUX0JBVENIKChSRUdfVFlQRShGU19UMCkgPDwgVDFfQUREUkVTU19SRUdfVFlQRV9TSElGVCkg fAotCQkJICAoUkVHX05SKEZTX1QwKSA8PCBUMV9BRERSRVNTX1JFR19OUl9TSElGVCkpOwotCQlP VVRfQkFUQ0goMCk7CisJCWludGVsX2JiX291dChpYmIsIFQwX1RFWExEIHwKKwkJCSAgICAgKFJF R19UWVBFKEZTX09DKSA8PCBUMF9ERVNUX1RZUEVfU0hJRlQpIHwKKwkJCSAgICAgKFJFR19OUihG U19PQykgPDwgVDBfREVTVF9OUl9TSElGVCkgfAorCQkJICAgICAoUkVHX05SKEZTX1MwKSA8PCBU MF9TQU1QTEVSX05SX1NISUZUKSk7CisJCWludGVsX2JiX291dChpYmIsIChSRUdfVFlQRShGU19U MCkgPDwgVDFfQUREUkVTU19SRUdfVFlQRV9TSElGVCkgfAorCQkJICAgICAoUkVHX05SKEZTX1Qw KSA8PCBUMV9BRERSRVNTX1JFR19OUl9TSElGVCkpOworCQlpbnRlbF9iYl9vdXQoaWJiLCAwKTsK IAl9CiAKLQlPVVRfQkFUQ0goUFJJTTNEX1JFQ1RMSVNUIHwgKDMqNCAtIDEpKTsKLQllbWl0X3Zl cnRleChiYXRjaCwgZHN0X3ggKyB3aWR0aCk7Ci0JZW1pdF92ZXJ0ZXgoYmF0Y2gsIGRzdF95ICsg aGVpZ2h0KTsKLQllbWl0X3ZlcnRleChiYXRjaCwgc3JjX3ggKyB3aWR0aCk7Ci0JZW1pdF92ZXJ0 ZXgoYmF0Y2gsIHNyY195ICsgaGVpZ2h0KTsKKwlpbnRlbF9iYl9vdXQoaWJiLCBQUklNM0RfUkVD VExJU1QgfCAoMyo0IC0gMSkpOworCWVtaXRfdmVydGV4KGliYiwgZHN0X3ggKyB3aWR0aCk7CisJ ZW1pdF92ZXJ0ZXgoaWJiLCBkc3RfeSArIGhlaWdodCk7CisJZW1pdF92ZXJ0ZXgoaWJiLCBzcmNf eCArIHdpZHRoKTsKKwllbWl0X3ZlcnRleChpYmIsIHNyY195ICsgaGVpZ2h0KTsKIAotCWVtaXRf dmVydGV4KGJhdGNoLCBkc3RfeCk7Ci0JZW1pdF92ZXJ0ZXgoYmF0Y2gsIGRzdF95ICsgaGVpZ2h0 KTsKLQllbWl0X3ZlcnRleChiYXRjaCwgc3JjX3gpOwotCWVtaXRfdmVydGV4KGJhdGNoLCBzcmNf eSArIGhlaWdodCk7CisJZW1pdF92ZXJ0ZXgoaWJiLCBkc3RfeCk7CisJZW1pdF92ZXJ0ZXgoaWJi LCBkc3RfeSArIGhlaWdodCk7CisJZW1pdF92ZXJ0ZXgoaWJiLCBzcmNfeCk7CisJZW1pdF92ZXJ0 ZXgoaWJiLCBzcmNfeSArIGhlaWdodCk7CiAKLQllbWl0X3ZlcnRleChiYXRjaCwgZHN0X3gpOwot CWVtaXRfdmVydGV4KGJhdGNoLCBkc3RfeSk7Ci0JZW1pdF92ZXJ0ZXgoYmF0Y2gsIHNyY194KTsK LQllbWl0X3ZlcnRleChiYXRjaCwgc3JjX3kpOworCWVtaXRfdmVydGV4KGliYiwgZHN0X3gpOwor CWVtaXRfdmVydGV4KGliYiwgZHN0X3kpOworCWVtaXRfdmVydGV4KGliYiwgc3JjX3gpOworCWVt aXRfdmVydGV4KGliYiwgc3JjX3kpOwogCi0JaW50ZWxfYmF0Y2hidWZmZXJfZmx1c2goYmF0Y2gp OworCWludGVsX2JiX2ZsdXNoX2JsaXRfd2l0aF9jb250ZXh0KGliYiwgY3R4KTsKIH0KZGlmZiAt LWdpdCBhL2xpYi92ZWJveGNvcHkuaCBiL2xpYi92ZWJveGNvcHkuaAppbmRleCA5NDlkODNiZi4u OTI1YjhmNTIgMTAwNjQ0Ci0tLSBhL2xpYi92ZWJveGNvcHkuaAorKysgYi9saWIvdmVib3hjb3B5 LmgKQEAgLTEsOSArMSw5IEBACiAjaWZuZGVmIF9fVkVCT1hDT1BZX0hfXwogI2RlZmluZSBfX1ZF Qk9YQ09QWV9IX18KIAotdm9pZCBnZW4xMl92ZWJveF9jb3B5ZnVuYyhzdHJ1Y3QgaW50ZWxfYmF0 Y2hidWZmZXIgKmJhdGNoLAotCQkJICBjb25zdCBzdHJ1Y3QgaWd0X2J1ZiAqc3JjLAotCQkJICB1 bnNpZ25lZCB3aWR0aCwgdW5zaWduZWQgaGVpZ2h0LAotCQkJICBjb25zdCBzdHJ1Y3QgaWd0X2J1 ZiAqZHN0KTsKK3ZvaWQgZ2VuMTJfdmVib3hfY29weWZ1bmMoc3RydWN0IGludGVsX2JiICppYmIs CisJCQkgIHN0cnVjdCBpbnRlbF9idWYgKnNyYywKKwkJCSAgdW5zaWduZWQgaW50IHdpZHRoLCB1 bnNpZ25lZCBpbnQgaGVpZ2h0LAorCQkJICBzdHJ1Y3QgaW50ZWxfYnVmICpkc3QpOwogCiAjZW5k aWYKZGlmZiAtLWdpdCBhL2xpYi92ZWJveGNvcHlfZ2VuMTIuYyBiL2xpYi92ZWJveGNvcHlfZ2Vu MTIuYwppbmRleCAyMzdjNDNmMi4uYTQ0ZTJiZmYgMTAwNjQ0Ci0tLSBhL2xpYi92ZWJveGNvcHlf Z2VuMTIuYworKysgYi9saWIvdmVib3hjb3B5X2dlbjEyLmMKQEAgLTE0NCw3ICsxNDQsNyBAQCBz dGF0aWMgYm9vbCBmb3JtYXRfaXNfaW50ZXJsZWF2ZWRfeXV2KGludCBmb3JtYXQpCiAJcmV0dXJu IGZhbHNlOwogfQogCi1zdGF0aWMgdm9pZCBlbWl0X3N1cmZhY2Vfc3RhdGVfY21kKHN0cnVjdCBp bnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCitzdGF0aWMgdm9pZCBlbWl0X3N1cmZhY2Vfc3RhdGVf Y21kKHN0cnVjdCBpbnRlbF9iYiAqaWJiLAogCQkJCSAgIGludCBzdXJmYWNlX2lkLAogCQkJCSAg IGludCB3aWR0aCwgaW50IGhlaWdodCwgaW50IGJwcCwKIAkJCQkgICBpbnQgcGl0Y2gsIHVpbnQz Ml90IHRpbGluZywgaW50IGZvcm1hdCwKQEAgLTE1Miw3ICsxNTIsNyBAQCBzdGF0aWMgdm9pZCBl bWl0X3N1cmZhY2Vfc3RhdGVfY21kKHN0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAqYmF0Y2gsCiB7 CiAJc3RydWN0IHZlYm94X3N1cmZhY2Vfc3RhdGUgKnNzOwogCi0Jc3MgPSBpbnRlbF9iYXRjaGJ1 ZmZlcl9zdWJkYXRhX2FsbG9jKGJhdGNoLCBzaXplb2YoKnNzKSwgNCk7CisJc3MgPSBpbnRlbF9i Yl9wdHJfYWxpZ24oaWJiLCA0KTsKIAogCXNzLT5zczAuY21kX3R5cGUgPSAzOwogCXNzLT5zczAu bWVkaWFfY21kX3BpcGVsaW5lID0gMjsKQEAgLTE3NSwyMSArMTc1LDE5IEBAIHN0YXRpYyB2b2lk IGVtaXRfc3VyZmFjZV9zdGF0ZV9jbWQoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwK IAlzcy0+c3M0LnVfeV9vZmZzZXQgPSB1dl9vZmZzZXQgLyBwaXRjaDsKIAogCXNzLT5zczcuZGVy aXZlZF9zdXJmYWNlX3BpdGNoID0gcGl0Y2ggLSAxOworCisJaW50ZWxfYmJfcHRyX2FkZChpYmIs IHNpemVvZigqc3MpKTsKIH0KIAotc3RhdGljIHZvaWQgZW1pdF90aWxpbmdfY29udmVydF9jbWQo c3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpiYXRjaCwKLQkJCQkgICAgZHJtX2ludGVsX2JvICpp bnB1dF9ibywKLQkJCQkgICAgdWludDMyX3QgaW5wdXRfdGlsaW5nLAotCQkJCSAgICB1aW50MzJf dCBpbnB1dF9jb21wcmVzc2lvbiwKLQkJCQkgICAgZHJtX2ludGVsX2JvICpvdXRwdXRfYm8sCi0J CQkJICAgIHVpbnQzMl90IG91dHB1dF90aWxpbmcsCi0JCQkJICAgIHVpbnQzMl90IG91dHB1dF9j b21wcmVzc2lvbikKK3N0YXRpYyB2b2lkIGVtaXRfdGlsaW5nX2NvbnZlcnRfY21kKHN0cnVjdCBp bnRlbF9iYiAqaWJiLAorCQkJCSAgICBzdHJ1Y3QgaW50ZWxfYnVmICpzcmMsCisJCQkJICAgIHN0 cnVjdCBpbnRlbF9idWYgKmRzdCkKIHsKLQl1aW50MzJfdCByZWxvY19kZWx0YTsKKwl1aW50MzJf dCByZWxvY19kZWx0YSwgdGNfb2Zmc2V0LCBvZmZzZXQ7CiAJc3RydWN0IHZlYm94X3RpbGluZ19j b252ZXJ0ICp0YzsKLQlpbnQgcmV0OwogCi0JdGMgPSBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRh X2FsbG9jKGJhdGNoLCBzaXplb2YoKnRjKSwgOCk7CisJdGMgPSBpbnRlbF9iYl9wdHJfYWxpZ24o aWJiLCA4KTsKKwl0Y19vZmZzZXQgPSBpbnRlbF9iYl9vZmZzZXQoaWJiKTsKIAogCXRjLT50YzAu Y21kX3R5cGUgPSAzOwogCXRjLT50YzAucGlwZWxpbmUgPSAyOwpAQCAtMTk4LDcxICsxOTYsNzAg QEAgc3RhdGljIHZvaWQgZW1pdF90aWxpbmdfY29udmVydF9jbWQoc3RydWN0IGludGVsX2JhdGNo YnVmZmVyICpiYXRjaCwKIAogCXRjLT50YzAuZHdfY291bnQgPSAzOwogCi0JaWYgKGlucHV0X2Nv bXByZXNzaW9uICE9IEk5MTVfQ09NUFJFU1NJT05fTk9ORSkgeworCWlmIChzcmMtPmNvbXByZXNz aW9uICE9IEk5MTVfQ09NUFJFU1NJT05fTk9ORSkgewogCQl0Yy0+dGMxXzIuaW5wdXRfbWVtb3J5 X2NvbXByZXNzaW9uX2VuYWJsZSA9IDE7CiAJCXRjLT50YzFfMi5pbnB1dF9jb21wcmVzc2lvbl90 eXBlID0KLQkJCWlucHV0X2NvbXByZXNzaW9uID09IEk5MTVfQ09NUFJFU1NJT05fUkVOREVSOwor CQkJc3JjLT5jb21wcmVzc2lvbiA9PSBJOTE1X0NPTVBSRVNTSU9OX1JFTkRFUjsKIAl9Ci0JdGMt PnRjMV8yLmlucHV0X3RpbGVkX3Jlc291cmNlX21vZGUgPSBpbnB1dF90aWxpbmcgPT0gSTkxNV9U SUxJTkdfWWY7CisJdGMtPnRjMV8yLmlucHV0X3RpbGVkX3Jlc291cmNlX21vZGUgPSBzcmMtPnRp bGluZyA9PSBJOTE1X1RJTElOR19ZZjsKIAlyZWxvY19kZWx0YSA9IHRjLT50YzFfMl9sOwogCi0J aWd0X2Fzc2VydChpbnB1dF9iby0+b2Zmc2V0NjQgPT0gQUxJR04oaW5wdXRfYm8tPm9mZnNldDY0 LCAweDEwMDApKTsKLQl0Yy0+dGMxXzIuaW5wdXRfYWRkcmVzcyA9IGlucHV0X2JvLT5vZmZzZXQ2 NCA+PiAxMjsKKwlpZ3RfYXNzZXJ0KHNyYy0+YWRkci5vZmZzZXQgPT0gQUxJR04oc3JjLT5hZGRy Lm9mZnNldCwgMHgxMDAwKSk7CisJdGMtPnRjMV8yLmlucHV0X2FkZHJlc3MgPSBzcmMtPmFkZHIu b2Zmc2V0ID4+IDEyOwogCWlndF9hc3NlcnQocmVsb2NfZGVsdGEgPD0gSU5UMzJfTUFYKTsKLQly ZXQgPSBkcm1faW50ZWxfYm9fZW1pdF9yZWxvYyhiYXRjaC0+Ym8sCi0JCQkJICAgICAgaW50ZWxf YmF0Y2hidWZmZXJfc3ViZGF0YV9vZmZzZXQoYmF0Y2gsIHRjKSArCi0JCQkJCW9mZnNldG9mKHR5 cGVvZigqdGMpLCB0YzFfMiksCi0JCQkJICAgICAgaW5wdXRfYm8sIHJlbG9jX2RlbHRhLAotCQkJ CSAgICAgIDAsIDApOwotCWlndF9hc3NlcnQocmV0ID09IDApOwotCi0JaWYgKG91dHB1dF9jb21w cmVzc2lvbiAhPSBJOTE1X0NPTVBSRVNTSU9OX05PTkUpIHsKKworCW9mZnNldCA9IHRjX29mZnNl dCArIG9mZnNldG9mKHR5cGVvZigqdGMpLCB0YzFfMik7CisJaW50ZWxfYmJfb2Zmc2V0X3JlbG9j X3dpdGhfZGVsdGEoaWJiLCBzcmMtPmhhbmRsZSwgMCwgMCwKKwkJCQkJIHJlbG9jX2RlbHRhLCBv ZmZzZXQsCisJCQkJCSBzcmMtPmFkZHIub2Zmc2V0KTsKKworCWlmIChkc3QtPmNvbXByZXNzaW9u ICE9IEk5MTVfQ09NUFJFU1NJT05fTk9ORSkgewogCQl0Yy0+dGMzXzQub3V0cHV0X21lbW9yeV9j b21wcmVzc2lvbl9lbmFibGUgPSAxOwogCQl0Yy0+dGMzXzQub3V0cHV0X2NvbXByZXNzaW9uX3R5 cGUgPQotCQkJb3V0cHV0X2NvbXByZXNzaW9uID09IEk5MTVfQ09NUFJFU1NJT05fUkVOREVSOwor CQkJZHN0LT5jb21wcmVzc2lvbiA9PSBJOTE1X0NPTVBSRVNTSU9OX1JFTkRFUjsKIAl9Ci0JdGMt PnRjM180Lm91dHB1dF90aWxlZF9yZXNvdXJjZV9tb2RlID0gb3V0cHV0X3RpbGluZyA9PSBJOTE1 X1RJTElOR19ZZjsKKwl0Yy0+dGMzXzQub3V0cHV0X3RpbGVkX3Jlc291cmNlX21vZGUgPSBkc3Qt PnRpbGluZyA9PSBJOTE1X1RJTElOR19ZZjsKIAlyZWxvY19kZWx0YSA9IHRjLT50YzNfNF9sOwog Ci0JaWd0X2Fzc2VydChvdXRwdXRfYm8tPm9mZnNldDY0ID09IEFMSUdOKG91dHB1dF9iby0+b2Zm c2V0NjQsIDB4MTAwMCkpOwotCXRjLT50YzNfNC5vdXRwdXRfYWRkcmVzcyA9IG91dHB1dF9iby0+ b2Zmc2V0NjQgPj4gMTI7CisJaWd0X2Fzc2VydChkc3QtPmFkZHIub2Zmc2V0ID09IEFMSUdOKGRz dC0+YWRkci5vZmZzZXQsIDB4MTAwMCkpOworCXRjLT50YzNfNC5vdXRwdXRfYWRkcmVzcyA9IGRz dC0+YWRkci5vZmZzZXQgPj4gMTI7CiAJaWd0X2Fzc2VydChyZWxvY19kZWx0YSA8PSBJTlQzMl9N QVgpOwotCXJldCA9IGRybV9pbnRlbF9ib19lbWl0X3JlbG9jKGJhdGNoLT5ibywKLQkJCQkgICAg ICBpbnRlbF9iYXRjaGJ1ZmZlcl9zdWJkYXRhX29mZnNldChiYXRjaCwgdGMpICsKLQkJCQkJb2Zm c2V0b2YodHlwZW9mKCp0YyksIHRjM180KSwKLQkJCQkgICAgICBvdXRwdXRfYm8sIHJlbG9jX2Rl bHRhLAotCQkJCSAgICAgIDAsIEk5MTVfR0VNX0RPTUFJTl9SRU5ERVIpOwotCWlndF9hc3NlcnQo cmV0ID09IDApOwogCisJb2Zmc2V0ID0gdGNfb2Zmc2V0ICsgb2Zmc2V0b2YodHlwZW9mKCp0Yyks IHRjM180KTsKKwlpbnRlbF9iYl9vZmZzZXRfcmVsb2Nfd2l0aF9kZWx0YShpYmIsIGRzdC0+aGFu ZGxlLAorCQkJCQkgMCwgSTkxNV9HRU1fRE9NQUlOX1JFTkRFUiwKKwkJCQkJIHJlbG9jX2RlbHRh LCBvZmZzZXQsCisJCQkJCSBkc3QtPmFkZHIub2Zmc2V0KTsKKworCWludGVsX2JiX3B0cl9hZGQo aWJiLCBzaXplb2YoKnRjKSk7CiB9CiAKIC8qIEJvcnJvd2luZyB0aGUgaWRlYSBmcm9tIHRoZSBy ZW5kZXJjb3B5IHN0YXRlIHNldHVwLiAqLwogI2RlZmluZSBCQVRDSF9TVEFURV9TUExJVCAyMDQ4 CiAKLXZvaWQgZ2VuMTJfdmVib3hfY29weWZ1bmMoc3RydWN0IGludGVsX2JhdGNoYnVmZmVyICpi YXRjaCwKLQkJCSAgY29uc3Qgc3RydWN0IGlndF9idWYgKnNyYywKLQkJCSAgdW5zaWduZWQgd2lk dGgsIHVuc2lnbmVkIGhlaWdodCwKLQkJCSAgY29uc3Qgc3RydWN0IGlndF9idWYgKmRzdCkKK3Zv aWQgZ2VuMTJfdmVib3hfY29weWZ1bmMoc3RydWN0IGludGVsX2JiICppYmIsCisJCQkgIHN0cnVj dCBpbnRlbF9idWYgKnNyYywKKwkJCSAgdW5zaWduZWQgaW50IHdpZHRoLCB1bnNpZ25lZCBpbnQg aGVpZ2h0LAorCQkJICBzdHJ1Y3QgaW50ZWxfYnVmICpkc3QpCiB7CiAJc3RydWN0IGF1eF9wZ3Rh YmxlX2luZm8gYXV4X3BndGFibGVfaW5mbyA9IHsgfTsKIAl1aW50MzJfdCBhdXhfcGd0YWJsZV9z dGF0ZTsKIAlpbnQgZm9ybWF0OwogCi0JaW50ZWxfYmF0Y2hidWZmZXJfZmx1c2hfb25fcmluZyhi YXRjaCwgSTkxNV9FWEVDX1ZFQk9YKTsKKwlpZ3RfYXNzZXJ0KHNyYy0+YnBwID09IGRzdC0+YnBw KTsKIAotCWludGVsX2JhdGNoYnVmZmVyX2FsaWduKGJhdGNoLCA4KTsKKwlpbnRlbF9iYl9mbHVz aChpYmIsIGliYi0+Y3R4LCBJOTE1X0VYRUNfVkVCT1gpOwogCi0JYmF0Y2gtPnB0ciA9ICZiYXRj aC0+YnVmZmVyW0JBVENIX1NUQVRFX1NQTElUXTsKKwlpbnRlbF9iYl9hZGRfaW50ZWxfYnVmKGli YiwgZHN0LCB0cnVlKTsKKwlpbnRlbF9iYl9hZGRfaW50ZWxfYnVmKGliYiwgc3JjLCBmYWxzZSk7 CiAKLQlnZW4xMl9hdXhfcGd0YWJsZV9pbml0KCZhdXhfcGd0YWJsZV9pbmZvLCBiYXRjaC0+YnVm bWdyLCBzcmMsIGRzdCk7CisJaW50ZWxfYmJfcHRyX3NldChpYmIsIEJBVENIX1NUQVRFX1NQTElU KTsKKwlnZW4xMl9hdXhfcGd0YWJsZV9pbml0KCZhdXhfcGd0YWJsZV9pbmZvLCBpYmIsIHNyYywg ZHN0KTsKKwlhdXhfcGd0YWJsZV9zdGF0ZSA9IGdlbjEyX2NyZWF0ZV9hdXhfcGd0YWJsZV9zdGF0 ZShpYmIsCisJCQkJCQkJICAgYXV4X3BndGFibGVfaW5mby5wZ3RhYmxlX2J1Zik7CiAKLQlhdXhf cGd0YWJsZV9zdGF0ZSA9IGdlbjEyX2NyZWF0ZV9hdXhfcGd0YWJsZV9zdGF0ZShiYXRjaCwKLQkJ CQkJCQkgICBhdXhfcGd0YWJsZV9pbmZvLnBndGFibGVfYm8pOwotCi0JYXNzZXJ0KGJhdGNoLT5w dHIgPCAmYmF0Y2gtPmJ1ZmZlcls0MDk1XSk7Ci0JYmF0Y2gtPnB0ciA9IGJhdGNoLT5idWZmZXI7 Ci0KLQlnZW4xMl9lbWl0X2F1eF9wZ3RhYmxlX3N0YXRlKGJhdGNoLCBhdXhfcGd0YWJsZV9zdGF0 ZSwgZmFsc2UpOworCWludGVsX2JiX3B0cl9zZXQoaWJiLCAwKTsKKwlnZW4xMl9lbWl0X2F1eF9w Z3RhYmxlX3N0YXRlKGliYiwgYXV4X3BndGFibGVfc3RhdGUsIGZhbHNlKTsKIAogCS8qIFRoZSB0 aWxpbmcgY29udmVydCBjb21tYW5kIGNhbid0IGNvbnZlcnQgZm9ybWF0cy4gKi8KIAlpZ3RfYXNz ZXJ0X2VxKHNyYy0+Zm9ybWF0X2lzX3l1diwgZHN0LT5mb3JtYXRfaXNfeXV2KTsKQEAgLTI5Miwy NCArMjg5LDI2IEBAIHZvaWQgZ2VuMTJfdmVib3hfY29weWZ1bmMoc3RydWN0IGludGVsX2JhdGNo YnVmZmVyICpiYXRjaCwKIAogCWlndF9hc3NlcnQoIXNyYy0+Zm9ybWF0X2lzX3l1dl9zZW1pcGxh bmFyIHx8CiAJCSAgIChzcmMtPnN1cmZhY2VbMV0ub2Zmc2V0ICYmIGRzdC0+c3VyZmFjZVsxXS5v ZmZzZXQpKTsKLQllbWl0X3N1cmZhY2Vfc3RhdGVfY21kKGJhdGNoLCBWRUJPWF9TVVJGQUNFX0lO UFVULAorCWVtaXRfc3VyZmFjZV9zdGF0ZV9jbWQoaWJiLCBWRUJPWF9TVVJGQUNFX0lOUFVULAog CQkJICAgICAgIHdpZHRoLCBoZWlnaHQsIHNyYy0+YnBwLAogCQkJICAgICAgIHNyYy0+c3VyZmFj ZVswXS5zdHJpZGUsCiAJCQkgICAgICAgc3JjLT50aWxpbmcsIGZvcm1hdCwgc3JjLT5zdXJmYWNl WzFdLm9mZnNldCk7CiAKLQllbWl0X3N1cmZhY2Vfc3RhdGVfY21kKGJhdGNoLCBWRUJPWF9TVVJG QUNFX09VVFBVVCwKKwllbWl0X3N1cmZhY2Vfc3RhdGVfY21kKGliYiwgVkVCT1hfU1VSRkFDRV9P VVRQVVQsCiAJCQkgICAgICAgd2lkdGgsIGhlaWdodCwgZHN0LT5icHAsCiAJCQkgICAgICAgZHN0 LT5zdXJmYWNlWzBdLnN0cmlkZSwKIAkJCSAgICAgICBkc3QtPnRpbGluZywgZm9ybWF0LCBkc3Qt PnN1cmZhY2VbMV0ub2Zmc2V0KTsKIAotCWVtaXRfdGlsaW5nX2NvbnZlcnRfY21kKGJhdGNoLAot CQkJCXNyYy0+Ym8sIHNyYy0+dGlsaW5nLCBzcmMtPmNvbXByZXNzaW9uLAotCQkJCWRzdC0+Ym8s IGRzdC0+dGlsaW5nLCBkc3QtPmNvbXByZXNzaW9uKTsKKwllbWl0X3RpbGluZ19jb252ZXJ0X2Nt ZChpYmIsIHNyYywgZHN0KTsKKworCWludGVsX2JiX291dChpYmIsIE1JX0JBVENIX0JVRkZFUl9F TkQpOworCWludGVsX2JiX3B0cl9hbGlnbihpYmIsIDgpOwogCi0JT1VUX0JBVENIKE1JX0JBVENI X0JVRkZFUl9FTkQpOworCWludGVsX2JiX2V4ZWNfd2l0aF9jb250ZXh0KGliYiwgaW50ZWxfYmJf b2Zmc2V0KGliYiksIDAsCisJCQkJICAgSTkxNV9FWEVDX1ZFQk9YIHwgSTkxNV9FWEVDX05PX1JF TE9DLAorCQkJCSAgIGZhbHNlKTsKIAotCWludGVsX2JhdGNoYnVmZmVyX2ZsdXNoX29uX3Jpbmco YmF0Y2gsIEk5MTVfRVhFQ19WRUJPWCk7CisJaW50ZWxfYmJfcmVzZXQoaWJiLCBmYWxzZSk7CiAK LQlnZW4xMl9hdXhfcGd0YWJsZV9jbGVhbnVwKCZhdXhfcGd0YWJsZV9pbmZvKTsKLQlpbnRlbF9i YXRjaGJ1ZmZlcl9yZXNldChiYXRjaCk7CisJZ2VuMTJfYXV4X3BndGFibGVfY2xlYW51cChpYmIs ICZhdXhfcGd0YWJsZV9pbmZvKTsKIH0KLS0gCjIuMjYuMAoKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KaWd0LWRldiBtYWlsaW5nIGxpc3QKaWd0LWRldkBs aXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1h bi9saXN0aW5mby9pZ3QtZGV2Cg==