From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id ; Sun, 27 Jan 2002 23:34:44 -0500 Received: (majordomo@vger.kernel.org) by vger.kernel.org id ; Sun, 27 Jan 2002 23:34:38 -0500 Received: from sombre.2ka.mipt.ru ([194.85.82.77]:32922 "EHLO sombre.2ka.mipt.ru") by vger.kernel.org with ESMTP id ; Sun, 27 Jan 2002 23:34:23 -0500 Date: Mon, 28 Jan 2002 07:33:57 +0300 From: Evgeniy Polyakov To: "Jens Axboe" , "Linus Torvalds" Cc: linux-kernel@vger.kernel.org Subject: [PATCH] scsi uodate to remove io_request_lock Message-Id: <20020128073357.53c9569f.johnpol@2ka.mipt.ru> Reply-To: johnpol@2ka.mipt.ru Organization: MIPT X-Mailer: Sylpheed version 0.7.0 (GTK+ 1.2.10; i686-pc-linux-gnu) Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Multipart_Mon__28_Jan_2002_07:33:57_+0300_082a52f8" Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org This is a multi-part message in MIME format. --Multipart_Mon__28_Jan_2002_07:33:57_+0300_082a52f8 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Hello, Jens Axboe, Linus Torvalds and other linux kernel hackers. Here is patch against 2.5.3-pre5 which removes io_request_lock. But unfortunnually here is 1 file (drivers/scsi/3w-xxxx.c), which still use spinning locks with io_request_lock because of detect() method, in which we cann't send Scsi_Host pointer. So this file must be corrected in some other way. Also ./drivers/mtd/mtdblock_ro.c file still use this lock. So, please check and apply. Thanks in advance for answers and suggestions. Evgeniy Polyakov ( s0mbre ). --Multipart_Mon__28_Jan_2002_07:33:57_+0300_082a52f8 Content-Type: application/octet-stream; name="scsi.diff" Content-Disposition: attachment; filename="scsi.diff" Content-Transfer-Encoding: base64 T25seSBpbiAuL2xpbnV4L2RyaXZlcnMvc2NzaS86IC5kZXBlbmQKZGlmZiAtdXIgLi9saW51eC5v cmlnL2RyaXZlcnMvc2NzaS8zdy14eHh4LmMgLi9saW51eC9kcml2ZXJzL3Njc2kvM3cteHh4eC5j Ci0tLSAuL2xpbnV4Lm9yaWcvZHJpdmVycy9zY3NpLzN3LXh4eHguYwlTYXQgTm92IDEwIDAxOjA1 OjAyIDIwMDEKKysrIC4vbGludXgvZHJpdmVycy9zY3NpLzN3LXh4eHguYwlNb24gSmFuIDI4IDA2 OjQzOjMwIDIwMDIKQEAgLTEzMjYsNyArMTMyNiw3IEBACiAJVFdfQ29tbWFuZCAqY29tbWFuZF9w YWNrZXQ7CiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoVFdfSU5fSU5UUiwgJnR3X2Rldi0+ZmxhZ3Mp KQogCQlyZXR1cm47Ci0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3Mp OworCXNwaW5fbG9ja19pcnFzYXZlKCZ0d19kZXYtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwog CiAJaWYgKHR3X2Rldi0+dHdfcGNpX2Rldi0+aXJxID09IGlycSkgewogCQlzcGluX2xvY2soJnR3 X2Rldi0+dHdfbG9jayk7CkBAIC0xNDc1LDcgKzE0NzUsNyBAQAogCQl9CiAJCXNwaW5fdW5sb2Nr KCZ0d19kZXYtPnR3X2xvY2spOwogCX0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb19yZXF1 ZXN0X2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ0d19kZXYtPmhvc3Qt Pmhvc3RfbG9jaywgZmxhZ3MpOwogCWNsZWFyX2JpdChUV19JTl9JTlRSLCAmdHdfZGV2LT5mbGFn cyk7CiB9CS8qIEVuZCB0d19pbnRlcnJ1cHQoKSAqLwogCkBAIC0xOTI5LDkgKzE5MjksOSBAQAog CX0KIAogCS8qIFdlIGhhdmUgdG8gbGV0IEFFTiByZXF1ZXN0cyB0aHJvdWdoIGJlZm9yZSB0aGUg cmVzZXQgKi8KLQlzcGluX3VubG9ja19pcnEoJmlvX3JlcXVlc3RfbG9jayk7CisJc3Bpbl91bmxv Y2tfaXJxKCZ0d19kZXYtPmhvc3QtPmhvc3RfbG9jayk7CiAJbWRlbGF5KFRXX0FFTl9XQUlUX1RJ TUUpOwotCXNwaW5fbG9ja19pcnEoJmlvX3JlcXVlc3RfbG9jayk7CisJc3Bpbl9sb2NrX2lycSgm dHdfZGV2LT5ob3N0LT5ob3N0X2xvY2spOwogCiAJc3Bpbl9sb2NrKCZ0d19kZXYtPnR3X2xvY2sp OwogCXR3X2Rldi0+bnVtX2Fib3J0cysrOwpAQCAtMTk5Myw5ICsxOTkzLDkgQEAKIAl9CiAKIAkv KiBXZSBoYXZlIHRvIGxldCBBRU4gcmVxdWVzdHMgdGhyb3VnaCBiZWZvcmUgdGhlIHJlc2V0ICov Ci0Jc3Bpbl91bmxvY2tfaXJxKCZpb19yZXF1ZXN0X2xvY2spOworCXNwaW5fdW5sb2NrX2lycSgm dHdfZGV2LT5ob3N0LT5ob3N0X2xvY2spOwogCW1kZWxheShUV19BRU5fV0FJVF9USU1FKTsKLQlz cGluX2xvY2tfaXJxKCZpb19yZXF1ZXN0X2xvY2spOworCXNwaW5fbG9ja19pcnEoJnR3X2Rldi0+ aG9zdC0+aG9zdF9sb2NrKTsKIAogCXNwaW5fbG9jaygmdHdfZGV2LT50d19sb2NrKTsKIAl0d19k ZXYtPm51bV9yZXNldHMrKzsKT25seSBpbiAuL2xpbnV4L2RyaXZlcnMvc2NzaS86IDN3LXh4eHgu Y34KZGlmZiAtdXIgLi9saW51eC5vcmlnL2RyaXZlcnMvc2NzaS81M2M3LDh4eC5jIC4vbGludXgv ZHJpdmVycy9zY3NpLzUzYzcsOHh4LmMKLS0tIC4vbGludXgub3JpZy9kcml2ZXJzL3Njc2kvNTNj Nyw4eHguYwlUdWUgTm92IDI3IDAxOjIzOjU4IDIwMDEKKysrIC4vbGludXgvZHJpdmVycy9zY3Np LzUzYzcsOHh4LmMJTW9uIEphbiAyOCAwNTo0MTo1NyAyMDAyCkBAIC0xMTA4LDkgKzExMDgsOSBA QAogCiAgICAgaWYgKCFzZWFyY2gpIHsKICNpZmRlZiBfX3Bvd2VycGNfXwotCWlmIChyZXF1ZXN0 X2lycShob3N0LT5pcnEsIGRvX05DUjUzYzd4MF9pbnRyLCBTQV9TSElSUSwgIjUzYzcsOHh4Iiwg TlVMTCkpIAorCWlmIChyZXF1ZXN0X2lycShob3N0LT5pcnEsIGRvX05DUjUzYzd4MF9pbnRyLCBT QV9TSElSUSwgIjUzYzcsOHh4IiwgaG9zdCkpIAogI2Vsc2UKLQlpZiAocmVxdWVzdF9pcnEoaG9z dC0+aXJxLCBkb19OQ1I1M2M3eDBfaW50ciwgU0FfSU5URVJSVVBULCAiNTNjNyw4eHgiLCBOVUxM KSkKKwlpZiAocmVxdWVzdF9pcnEoaG9zdC0+aXJxLCBkb19OQ1I1M2M3eDBfaW50ciwgU0FfSU5U RVJSVVBULCAiNTNjNyw4eHgiLCBob3N0KSkKICNlbmRpZgogCSAgewogCSAgCkBAIC00MzYwLDkg KzQzNjAsMTEgQEAKIGRvX05DUjUzYzd4MF9pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3Ry dWN0IHB0X3JlZ3MgKiByZWdzKSB7CiAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKIAotICAgIHNw aW5fbG9ja19pcnFzYXZlKCZpb19yZXF1ZXN0X2xvY2ssIGZsYWdzKTsKKyAgICBzdHJ1Y3QgU2Nz aV9Ib3N0ICpkZXYgPSBkZXZfaWQ7CisgICAgCisgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+ aG9zdF9sb2NrLCBmbGFncyk7CiAgICAgTkNSNTNjN3gwX2ludHIoaXJxLCBkZXZfaWQsIHJlZ3Mp OwotICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3MpOwor ICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+aG9zdF9sb2NrLCBmbGFncyk7CiB9CiAK IC8qCk9ubHkgaW4gLi9saW51eC9kcml2ZXJzL3Njc2kvOiA1M2M3LDh4eC5jfgpkaWZmIC11ciAu L2xpbnV4Lm9yaWcvZHJpdmVycy9zY3NpLzUzYzcwMC5jIC4vbGludXgvZHJpdmVycy9zY3NpLzUz YzcwMC5jCi0tLSAuL2xpbnV4Lm9yaWcvZHJpdmVycy9zY3NpLzUzYzcwMC5jCVdlZCBOb3YgMjgg MjE6MjI6MjcgMjAwMQorKysgLi9saW51eC9kcml2ZXJzL3Njc2kvNTNjNzAwLmMJTW9uIEphbiAy OCAwNjo0NzowNiAyMDAyCkBAIC0xNTA4LDE4ICsxNTA4LDcgQEAKIAlfX3U4IHB1biA9IDB4ZmYs IGx1biA9IDB4ZmY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCS8qIFVuZm9ydHVuYXRlbHks IHdlIGhhdmUgdG8gdGFrZSB0aGUgaW9fcmVxdWVzdF9sb2NrIGhlcmUKLQkgKiByYXRoZXIgdGhh biB0aGUgaG9zdCBsb2NrIGhvc3RkYXRhLT5sb2NrIGJlY2F1c2Ugd2UncmUKLQkgKiBsb29raW5n IHRvIGV4Y2x1ZGUgcXVldWVjb21tYW5kIGZyb20gbWVzc2luZyB3aXRoIHRoZQotCSAqIHJlZ2lz dGVycyB3aGlsZSB3ZSdyZSBwcm9jZXNzaW5nIHRoZSBpbnRlcnJ1cHQuICBTaW5jZQotCSAqIHF1 ZXVlY29tbWFuZCBpcyBjYWxsZWQgaG9sZGluZyBpb19yZXF1ZXN0X2xvY2ssIGFuZCB3ZSBoYXZl Ci0JICogdG8gdGFrZSBpb19yZXF1ZXN0X2xvY2sgYmVmb3JlIHdlIGNhbGwgdGhlIGNvbW1hbmQK LQkgKiBzY3NpX2RvbmUsIHdlIHdvdWxkIGdldCBhIGRlYWRsb2NrIGlmIHdlIHRvb2sKLQkgKiBo b3N0ZGF0YS0+bG9jayBoZXJlIGFuZCBpbiBxdWV1ZWNvbW1hbmQgKGJlY2F1c2UgdGhlIG9yZGVy Ci0JICogb2YgbG9ja2luZyBpbiBxdWV1ZWNvbW1hbmQ6IDEpIGlvX3JlcXVlc3RfbG9jayB0aGVu IDIpCi0JICogaG9zdGRhdGEtPmxvY2sgd291bGQgYmUgdGhlIHJldmVyc2Ugb2YgdGFraW5nIGl0 IGluIHRoaXMKLQkgKiByb3V0aW5lICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvX3JlcXVlc3Rf bG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZob3N0LT5ob3N0X2xvY2ssIGZsYWdz KTsKIAlpZigoaXN0YXQgPSBOQ1JfNzAwX3JlYWRiKGhvc3QsIElTVEFUX1JFRykpCiAJICAgICAg JiAoU0NTSV9JTlRfUEVORElORyB8IERNQV9JTlRfUEVORElORykpIHsKIAkJX191MzIgZHNwczsK QEAgLTE3NjQsNyArMTc1Myw3IEBACiAJCX0KIAl9CiAgb3V0X3VubG9jazoKLQlzcGluX3VubG9j a19pcnFyZXN0b3JlKCZpb19yZXF1ZXN0X2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZob3N0LT5ob3N0X2xvY2ssIGZsYWdzKTsKIH0KIAogLyogRklYTUU6IE5lZWQgdG8g cHV0IHNvbWUgcHJvYyBpbmZvcm1hdGlvbiBpbiBhbmQgcGx1bWIgaXQKT25seSBpbiAuL2xpbnV4 L2RyaXZlcnMvc2NzaS86IDUzYzcwMC5jfgpkaWZmIC11ciAuL2xpbnV4Lm9yaWcvZHJpdmVycy9z Y3NpL0FNNTNDOTc0LmMgLi9saW51eC9kcml2ZXJzL3Njc2kvQU01M0M5NzQuYwotLS0gLi9saW51 eC5vcmlnL2RyaXZlcnMvc2NzaS9BTTUzQzk3NC5jCVN1biBTZXAgMzAgMjM6MjY6MDcgMjAwMQor KysgLi9saW51eC9kcml2ZXJzL3Njc2kvQU01M0M5NzQuYwlNb24gSmFuIDI4IDA1OjU0OjA4IDIw MDIKQEAgLTEwMjEsMTAgKzEwMjEsMTEgQEAKIHN0YXRpYyB2b2lkIGRvX0FNNTNDOTc0X2ludHIo aW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl1bnNpZ25l ZCBsb25nIGZsYWdzOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvX3JlcXVlc3RfbG9jaywgZmxh Z3MpOworCXN0cnVjdCBTY3NpX0hvc3QgKmRldiA9IGRldl9pZDsKKwkKKwlzcGluX2xvY2tfaXJx c2F2ZSgmZGV2LT5ocHN0X2xvY2ssIGZsYWdzKTsKIAlBTTUzQzk3NF9pbnRyKGlycSwgZGV2X2lk LCByZWdzKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb19yZXF1ZXN0X2xvY2ssIGZsYWdz KTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmhvc3RfbG9jaywgZmxhZ3MpOwogfQog CiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqCk9ubHkgaW4gLi9saW51eC9kcml2ZXJzL3Njc2kvOiBBTTUzQzk3 NC5jfgpkaWZmIC11ciAuL2xpbnV4Lm9yaWcvZHJpdmVycy9zY3NpL05DUjUzODAuYyAuL2xpbnV4 L2RyaXZlcnMvc2NzaS9OQ1I1MzgwLmMKLS0tIC4vbGludXgub3JpZy9kcml2ZXJzL3Njc2kvTkNS NTM4MC5jCVNhdCBGZWIgMTcgMDM6MDI6MzYgMjAwMQorKysgLi9saW51eC9kcml2ZXJzL3Njc2kv TkNSNTM4MC5jCU1vbiBKYW4gMjggMDU6MjU6MzYgMjAwMgpAQCAtNjkyLDkgKzY5Miw5IEBACiAJ fQogCXJlc3RvcmVfZmxhZ3MoZmxhZ3MpOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvX3JlcXVl c3RfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZpbnN0YW5jZS0+aG9zdF9sb2Nr LCBmbGFncyk7CiAJcnVuX21haW4oKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb19yZXF1 ZXN0X2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+aG9z dF9sb2NrLCBmbGFncyk7CiB9CiAjZW5kaWYJCQkJLyogZGVmIFVTTEVFUCAqLwogCkBAIC03NDUs NyArNzQ1LDcgQEAKIAlOQ1I1MzgwX3NldHVwKGluc3RhbmNlKTsKIAogCWZvciAodHJ5aW5nX2ly cXMgPSBpID0gMCwgbWFzayA9IDE7IGkgPCAxNjsgKytpLCBtYXNrIDw8PSAxKQotCQlpZiAoKG1h c2sgJiBwb3NzaWJsZSkgJiYgKHJlcXVlc3RfaXJxKGksICZwcm9iZV9pbnRyLCBTQV9JTlRFUlJV UFQsICJOQ1ItcHJvYmUiLCBOVUxMKQorCQlpZiAoKG1hc2sgJiBwb3NzaWJsZSkgJiYgKHJlcXVl c3RfaXJxKGksICZwcm9iZV9pbnRyLCBTQV9JTlRFUlJVUFQsICJOQ1ItcHJvYmUiLCBpbnN0YW5j ZSkKIAkJCQkJICA9PSAwKSkKIAkJCXRyeWluZ19pcnFzIHw9IG1hc2s7CiAKQEAgLTEyNzEsNyAr MTI3MSw3IEBACiAJICogdGhpcyBzaG91bGQgcHJldmVudCBhbnkgcmFjZSBjb25kaXRpb25zLgog CSAqLwogCi0Jc3Bpbl91bmxvY2tfaXJxKCZpb19yZXF1ZXN0X2xvY2spOworCXNwaW5fdW5sb2Nr X2lycSgmaW5zdGFuY2UtPmhvc3RfbG9jayk7CiAJCiAJc2F2ZV9mbGFncyhmbGFncyk7CiAJCkBA IC0xNDI0LDcgKzE0MjQsNyBAQAogCQkJCWJyZWFrOwogCQl9CQkvKiBmb3IgaW5zdGFuY2UgKi8K IAl9IHdoaWxlICghZG9uZSk7Ci0Jc3Bpbl9sb2NrX2lycSgmaW9fcmVxdWVzdF9sb2NrKTsKKwlz cGluX2xvY2tfaXJxKCZpbnN0YW5jZS0+aG9zdF9sb2NrKTsKICAgLyogCWNsaSgpOyovCiAJbWFp bl9ydW5uaW5nID0gMDsKIH0KQEAgLTE1MjEsMTAgKzE1MjEsMTAgQEAKIAkJCQkJCQl7CiAJCQkJ CQkJCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBOQ1JfVElNRU9VVDsKIAotCQkJ CQkJCQlzcGluX3VubG9ja19pcnEoJmlvX3JlcXVlc3RfbG9jayk7CisJCQkJCQkJCXNwaW5fdW5s b2NrX2lycSgmaW5zdGFuY2UtPmhvc3RfbG9jayk7CiAJCQkJCQkJCXdoaWxlIChOQ1I1MzgwX3Jl YWQoQlVTX0FORF9TVEFUVVNfUkVHKSAmIEJBU1JfQUNLCiAJCQkJCQkJCSAgICAgICAmJiB0aW1l X2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSk7Ci0JCQkJCQkJCXNwaW5fbG9ja19pcnEoJmlvX3Jl cXVlc3RfbG9jayk7CisJCQkJCQkJCXNwaW5fbG9ja19pcnEoJmluc3RhbmNlLT5ob3N0X2xvY2sp OwogCQkJCQkJCQkKIAkJCQkJCQkJaWYgKHRpbWVfYWZ0ZXJfZXEoamlmZmllcywgdGltZW91dCkg KQogCQkJCQkJCQkJcHJpbnRrKCJzY3NpJWQ6IHRpbWVvdXQgYXQgTkNSNTM4MC5jOiVkXG4iLApA QCAtMTU1NCwxMCArMTU1NCwxMiBAQAogCiBzdGF0aWMgdm9pZCBkb19OQ1I1MzgwX2ludHIoaW50 IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykgewogCXVuc2lnbmVkIGxv bmcgZmxhZ3M7Ci0KLQkgc3Bpbl9sb2NrX2lycXNhdmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3Mp OworCSAKKwkgc3RydWN0IFNjc2lfSG9zdCAqZGV2ID0gZGV2X2lkOworCQorCSBzcGluX2xvY2tf aXJxc2F2ZSgmZGV2LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAkgTkNSNTM4MF9pbnRyKGlycSwgZGV2 X2lkLCByZWdzKTsKLQkgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9fcmVxdWVzdF9sb2NrLCBm bGFncyk7CisJIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+aG9zdF9sb2NrLCBmbGFncyk7 CiB9CiAKICNlbmRpZgpAQCAtMTY2OSwxMiArMTY3MSwxMiBAQAogCXsKIAkJdW5zaWduZWQgbG9u ZyB0aW1lb3V0ID0gamlmZmllcyArIDIgKiBOQ1JfVElNRU9VVDsKIAotCQlzcGluX3VubG9ja19p cnEoJmlvX3JlcXVlc3RfbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycSgmaW5zdGFuY2UtPmhvc3Rf bG9jayk7CiAKIAkJd2hpbGUgKCEoTkNSNTM4MF9yZWFkKElOSVRJQVRPUl9DT01NQU5EX1JFRykg JiBJQ1JfQVJCSVRSQVRJT05fUFJPR1JFU1MpCiAJCSAgICAgICAmJiB0aW1lX2JlZm9yZShqaWZm aWVzLHRpbWVvdXQpKTsKIAotCQlzcGluX2xvY2tfaXJxKCZpb19yZXF1ZXN0X2xvY2spOworCQlz cGluX2xvY2tfaXJxKCZpbnN0YW5jZS0+aG9zdF9sb2NrKTsKIAkJICAgICAgIAogCQlpZiAodGlt ZV9hZnRlcl9lcShqaWZmaWVzLHRpbWVvdXQpKSB7CiAJCQlwcmludGsoInNjc2k6IGFyYml0cmF0 aW9uIHRpbWVvdXQgYXQgJWRcbiIsIF9fTElORV9fKTsKQEAgLTE4MzQsMTAgKzE4MzYsMTAgQEAK IAlob3N0ZGF0YS0+c2VsZWN0aW5nID0gMDsgLyogY2xlYXIgdGhpcyBwb2ludGVyLCBiZWNhdXNl IHdlIHBhc3NlZCB0aGUKIAkJCQl3YWl0aW5nIHBlcmlvZCAqLwogI2Vsc2UKLQlzcGluX3VubG9j a19pcnEoJmlvX3JlcXVlc3RfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxKCZpbnN0YW5jZS0+aG9z dF9sb2NrKTsKIAl3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkgJiYgIShOQ1I1 MzgwX3JlYWQoU1RBVFVTX1JFRykgJgogCQkJCQkoU1JfQlNZIHwgU1JfSU8pKSk7Ci0Jc3Bpbl9s b2NrX2lycSgmaW9fcmVxdWVzdF9sb2NrKTsKKwlzcGluX2xvY2tfaXJxKCZpbnN0YW5jZS0+aG9z dF9sb2NrKTsKICNlbmRpZgogCWlmICgoTkNSNTM4MF9yZWFkKFNUQVRVU19SRUcpICYgKFNSX1NF TCB8IFNSX0lPKSkgPT0KIAkgICAgKFNSX1NFTCB8IFNSX0lPKSkgewpAQCAtMTkwNSw5ICsxOTA3 LDkgQEAKIAl7CiAJCXVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBOQ1JfVElNRU9V VDsKIAotCQlzcGluX3VubG9ja19pcnEoJmlvX3JlcXVlc3RfbG9jayk7CisJCXNwaW5fdW5sb2Nr X2lycSgmaW5zdGFuY2UtPmhvc3RfbG9jayk7CiAJCXdoaWxlICghKE5DUjUzODBfcmVhZChTVEFU VVNfUkVHKSAmIFNSX1JFUSkgJiYgdGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpOwotCQlz cGluX2xvY2tfaXJxKCZpb19yZXF1ZXN0X2xvY2spOworCQlzcGluX2xvY2tfaXJxKCZpbnN0YW5j ZS0+aG9zdF9sb2NrKTsKIAkJCiAJCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHRpbWVvdXQp KSB7CiAJCQlwcmludGsoInNjc2klZDogdGltZW91dCBhdCBOQ1I1MzgwLmM6JWRcbiIsIGluc3Rh bmNlLT5ob3N0X25vLCBfX0xJTkVfXyk7Ck9ubHkgaW4gLi9saW51eC9kcml2ZXJzL3Njc2kvOiBO Q1I1MzgwLmN+CmRpZmYgLXVyIC4vbGludXgub3JpZy9kcml2ZXJzL3Njc2kvTkNSNTNDOXguYyAu L2xpbnV4L2RyaXZlcnMvc2NzaS9OQ1I1M0M5eC5jCi0tLSAuL2xpbnV4Lm9yaWcvZHJpdmVycy9z Y3NpL05DUjUzQzl4LmMJU3VuIFNlcCAzMCAyMzoyNjowNyAyMDAxCisrKyAuL2xpbnV4L2RyaXZl cnMvc2NzaS9OQ1I1M0M5eC5jCU1vbiBKYW4gMjggMDY6MzA6NDQgMjAwMgpAQCAtMzU0Niw5ICsz NTQ2LDEwIEBACiAJc3RydWN0IE5DUl9FU1AgKmVzcDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwog CWludCBhZ2FpbjsKKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpkZXYgPSBkZXZfaWQ7CiAKIAkvKiBIYW5k bGUgYWxsIEVTUCBpbnRlcnJ1cHRzIHNob3dpbmcgYXQgdGhpcyBJUlEgbGV2ZWwuICovCi0Jc3Bp bl9sb2NrX2lycXNhdmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFz YXZlKCZkZXYtPmhvc3RfbG9jaywgZmxhZ3MpOwogcmVwZWF0OgogCWFnYWluID0gMDsKIAlmb3Jf ZWFjaF9lc3AoZXNwKSB7CkBAIC0zNTcyLDcgKzM1NzMsNyBAQAogCX0KIAlpZihhZ2FpbikKIAkJ Z290byByZXBlYXQ7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9fcmVxdWVzdF9sb2NrLCBm bGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ob3N0X2xvY2ssIGZsYWdzKTsK IH0KICNlbHNlCiAvKiBGb3IgU01QIHdlIG9ubHkgc2VydmljZSBvbmUgRVNQIG9uIHRoZSBsaXN0 IGxpc3QgYXQgb3VyIElSUSBsZXZlbCEgKi8KQEAgLTM1ODAsOSArMzU4MSwxMCBAQAogewogCXN0 cnVjdCBOQ1JfRVNQICplc3A7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQorCXN0cnVjdCBTY3Np X0hvc3QgKmRldiA9IGRldl9pZDsKKwkKIAkvKiBIYW5kbGUgYWxsIEVTUCBpbnRlcnJ1cHRzIHNo b3dpbmcgYXQgdGhpcyBJUlEgbGV2ZWwuICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvX3JlcXVl c3RfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmhvc3RfbG9jaywgZmxh Z3MpOwogCWZvcl9lYWNoX2VzcChlc3ApIHsKIAkJaWYoKChlc3ApLT5pcnEgJiAweGYpID09IGly cSkgewogCQkJaWYoZXNwLT5kbWFfaXJxX3AoZXNwKSkgewpAQCAtMzU5OSw3ICszNjAxLDcgQEAK IAkJfQogCX0KIG91dDoKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb19yZXF1ZXN0X2xvY2ss IGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmhvc3RfbG9jaywgZmxhZ3Mp OwogfQogI2VuZGlmCiAKT25seSBpbiAuL2xpbnV4L2RyaXZlcnMvc2NzaS86IE5DUjUzQzl4LmN+ CmRpZmYgLXVyIC4vbGludXgub3JpZy9kcml2ZXJzL3Njc2kvTkNSNTNjNDA2YS5jIC4vbGludXgv ZHJpdmVycy9zY3NpL05DUjUzYzQwNmEuYwotLS0gLi9saW51eC5vcmlnL2RyaXZlcnMvc2NzaS9O Q1I1M2M0MDZhLmMJU3VuIFNlcCAzMCAyMzoyNjowNyAyMDAxCisrKyAuL2xpbnV4L2RyaXZlcnMv c2NzaS9OQ1I1M2M0MDZhLmMJTW9uIEphbiAyOCAwNDo1MToyNiAyMDAyCkBAIC01MzcsNyArNTM3 LDcgQEAKICAgICBERUIocHJpbnRrKCJOQ1I1M2M0MDZhOiB1c2luZyBwb3J0X2Jhc2UgJXhcbiIs IHBvcnRfYmFzZSkpOwogICAgIAogICAgIGlmKGlycV9sZXZlbCA+IDApIHsKLSAgICAgICAgaWYo cmVxdWVzdF9pcnEoaXJxX2xldmVsLCBkb19OQ1I1M2M0MDZhX2ludHIsIDAsICJOQ1I1M2M0MDZh IiwgTlVMTCkpeworICAgICAgICBpZihyZXF1ZXN0X2lycShpcnFfbGV2ZWwsIGRvX05DUjUzYzQw NmFfaW50ciwgMCwgIk5DUjUzYzQwNmEiLCBzaHBudCkpewogICAgICAgICAgICAgcHJpbnRrKCJO Q1I1M2M0MDZhOiB1bmFibGUgdG8gYWxsb2NhdGUgSVJRICVkXG4iLCBpcnFfbGV2ZWwpOwogICAg ICAgICAgICAgZ290byBlcnJfcmVsZWFzZTsKICAgICAgICAgfQpAQCAtNzgwLDEwICs3ODAsMTEg QEAKICAgICAgc3RhdGljIHZvaWQKIGRvX05DUjUzYzQwNmFfaW50cihpbnQgdW51c2VkLCB2b2lk ICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKXsKICAgICB1bnNpZ25lZCBsb25nIGZsYWdz OwotCi0gICAgc3Bpbl9sb2NrX2lycXNhdmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3MpOworICAg IHN0cnVjdCBTY3NpX0hvc3QgKiBkZXYgPSBkZXZfaWQ7CisgICAgCisgICAgc3Bpbl9sb2NrX2ly cXNhdmUoJmRldi0+aG9zdF9sb2NrLCBmbGFncyk7CiAgICAgTkNSNTNjNDA2YV9pbnRyKDAsIGRl dl9pZCwgcmVncyk7Ci0gICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9fcmVxdWVzdF9sb2Nr LCBmbGFncyk7CisgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ob3N0X2xvY2ssIGZs YWdzKTsKIH0KIAogICAgICBzdGF0aWMgdm9pZApPbmx5IGluIC4vbGludXgvZHJpdmVycy9zY3Np LzogTkNSNTNjNDA2YS5jfgpkaWZmIC11ciAuL2xpbnV4Lm9yaWcvZHJpdmVycy9zY3NpL2EyMDkx LmMgLi9saW51eC9kcml2ZXJzL3Njc2kvYTIwOTEuYwotLS0gLi9saW51eC5vcmlnL2RyaXZlcnMv c2NzaS9hMjA5MS5jCUZyaSBPY3QgMjYgMDA6NTM6NDggMjAwMQorKysgLi9saW51eC9kcml2ZXJz L3Njc2kvYTIwOTEuYwlNb24gSmFuIDI4IDA1OjU3OjI0IDIwMDIKQEAgLTQwLDkgKzQwLDkgQEAK IAkJY29udGludWU7CiAKIAlpZiAoc3RhdHVzICYgSVNUUl9JTlRTKSB7Ci0JCXNwaW5fbG9ja19p cnFzYXZlKCZpb19yZXF1ZXN0X2xvY2ssIGZsYWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlu c3RhbmNlLT5ob3N0X2xvY2ssIGZsYWdzKTsKIAkJd2QzM2M5M19pbnRyIChpbnN0YW5jZSk7Ci0J CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3MpOworCQlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZpbnN0YW5jZS0+aG9zdF9sb2NrLCBmbGFncyk7CiAJfQogICAg IH0KIH0KT25seSBpbiAuL2xpbnV4L2RyaXZlcnMvc2NzaS86IGEyMDkxLmN+CmRpZmYgLXVyIC4v bGludXgub3JpZy9kcml2ZXJzL3Njc2kvYTMwMDAuYyAuL2xpbnV4L2RyaXZlcnMvc2NzaS9hMzAw MC5jCi0tLSAuL2xpbnV4Lm9yaWcvZHJpdmVycy9zY3NpL2EzMDAwLmMJRnJpIE9jdCAyNiAwMDo1 Mzo0OCAyMDAxCisrKyAuL2xpbnV4L2RyaXZlcnMvc2NzaS9hMzAwMC5jCU1vbiBKYW4gMjggMDU6 NTg6NTcgMjAwMgpAQCAtMzAsMTQgKzMwLDE1IEBACiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsK IAl1bnNpZ25lZCBpbnQgc3RhdHVzID0gRE1BKGEzMDAwX2hvc3QpLT5JU1RSOwotCisJc3RydWN0 IFNjc2lfSG9zdCAqZGV2ID0gZHVtbXk7CisJCiAJaWYgKCEoc3RhdHVzICYgSVNUUl9JTlRfUCkp CiAJCXJldHVybjsKIAlpZiAoc3RhdHVzICYgSVNUUl9JTlRTKQogCXsKLQkJc3Bpbl9sb2NrX2ly cXNhdmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3MpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2 LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAkJd2QzM2M5M19pbnRyIChhMzAwMF9ob3N0KTsKLQkJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJmRldi0+aG9zdF9sb2NrLCBmbGFncyk7CiAJfSBlbHNlCiAJCXByaW50 aygiTm9uLXNlcnZpY2VkIEEzMDAwIFNDU0ktaW50ZXJydXB0PyBJU1RSID0gJTAyeFxuIiwKIAkJ ICAgICAgIHN0YXR1cyk7Ck9ubHkgaW4gLi9saW51eC9kcml2ZXJzL3Njc2kvOiBhMzAwMC5jfgpP bmx5IGluIC4vbGludXgvZHJpdmVycy9zY3NpL2FpYzd4eHg6IC5kZXBlbmQKZGlmZiAtdXIgLi9s aW51eC5vcmlnL2RyaXZlcnMvc2NzaS9hdHA4NzB1LmMgLi9saW51eC9kcml2ZXJzL3Njc2kvYXRw ODcwdS5jCi0tLSAuL2xpbnV4Lm9yaWcvZHJpdmVycy9zY3NpL2F0cDg3MHUuYwlTdW4gU2VwIDMw IDIzOjI2OjA3IDIwMDEKKysrIC4vbGludXgvZHJpdmVycy9zY3NpL2F0cDg3MHUuYwlNb24gSmFu IDI4IDA2OjM2OjA4IDIwMDIKQEAgLTQzMyw3ICs0MzMsNyBAQAogCQkJLyoKIAkJCSAqCUNvbXBs ZXRlIHRoZSBjb21tYW5kCiAJCQkgKi8KLQkJCXNwaW5fbG9ja19pcnFzYXZlKCZpb19yZXF1ZXN0 X2xvY2ssIGZsYWdzKTsKKwkJCXNwaW5fbG9ja19pcnFzYXZlKCZ3b3JrcmVxdS0+aG9zdC0+aG9z dF9sb2NrLCBmbGFncyk7CiAJCQkoKndvcmtyZXF1LT5zY3NpX2RvbmUpICh3b3JrcmVxdSk7CiAK IAkJCS8qCkBAIC00NDEsNyArNDQxLDcgQEAKIAkJCSAqLwogCQkJZGV2LT5pZFt0YXJnZXRfaWRd LmN1cnJfcmVxID0gMDsKIAkJCWRldi0+d29ya2luZy0tOwotCQkJc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZ3b3JrcmVxdS0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJCQkvKgogCQkJICoJVGFrZSBp dCBiYWNrIHdpZGUKIAkJCSAqLwpPbmx5IGluIC4vbGludXgvZHJpdmVycy9zY3NpLzogYXRwODcw dS5jfgpkaWZmIC11ciAuL2xpbnV4Lm9yaWcvZHJpdmVycy9zY3NpL2JsejEyMzAuYyAuL2xpbnV4 L2RyaXZlcnMvc2NzaS9ibHoxMjMwLmMKLS0tIC4vbGludXgub3JpZy9kcml2ZXJzL3Njc2kvYmx6 MTIzMC5jCUZyaSBPY3QgMjYgMDA6NTM6NDkgMjAwMQorKysgLi9saW51eC9kcml2ZXJzL3Njc2kv Ymx6MTIzMC5jCU1vbiBKYW4gMjggMDY6Mjg6NDYgMjAwMgpAQCAtMTM3LDcgKzEzNyw3IEBACiAJ CWVzcC0+aXJxID0gSVJRX0FNSUdBX1BPUlRTOwogCQllc3AtPnNsb3QgPSBib2FyZCtSRUFMX0JM WjEyMzBfRVNQX0FERFI7CiAJCWlmIChyZXF1ZXN0X2lycShJUlFfQU1JR0FfUE9SVFMsIGVzcF9p bnRyLCBTQV9TSElSUSwKLQkJCQkgIkJsaXp6YXJkIDEyMzAgU0NTSSBJViIsIGVzcF9pbnRyKSkK KwkJCQkgIkJsaXp6YXJkIDEyMzAgU0NTSSBJViIsIGVzcC0+ZWhvc3QpKQogCQkJZ290byBlcnJf b3V0OwogCiAJCS8qIEZpZ3VyZSBvdXQgb3VyIHNjc2kgSUQgb24gdGhlIGJ1cyAqLwpPbmx5IGlu IC4vbGludXgvZHJpdmVycy9zY3NpLzogYmx6MTIzMC5jfgpkaWZmIC11ciAuL2xpbnV4Lm9yaWcv ZHJpdmVycy9zY3NpL2JsejIwNjAuYyAuL2xpbnV4L2RyaXZlcnMvc2NzaS9ibHoyMDYwLmMKLS0t IC4vbGludXgub3JpZy9kcml2ZXJzL3Njc2kvYmx6MjA2MC5jCUZyaSBPY3QgMjYgMDA6NTM6NDkg MjAwMQorKysgLi9saW51eC9kcml2ZXJzL3Njc2kvYmx6MjA2MC5jCU1vbiBKYW4gMjggMDY6Mjc6 NTcgMjAwMgpAQCAtMTE1LDcgKzExNSw3IEBACiAKIAkJZXNwLT5pcnEgPSBJUlFfQU1JR0FfUE9S VFM7CiAJCXJlcXVlc3RfaXJxKElSUV9BTUlHQV9QT1JUUywgZXNwX2ludHIsIFNBX1NISVJRLAot CQkJICAgICJCbGl6emFyZCAyMDYwIFNDU0kiLCBlc3BfaW50cik7CisJCQkgICAgIkJsaXp6YXJk IDIwNjAgU0NTSSIsIGVzcC0+ZWhvc3QpOwogCiAJCS8qIEZpZ3VyZSBvdXQgb3VyIHNjc2kgSUQg b24gdGhlIGJ1cyAqLwogCQllc3AtPnNjc2lfaWQgPSA3OwpPbmx5IGluIC4vbGludXgvZHJpdmVy cy9zY3NpLzogYmx6MjA2MC5jfgpkaWZmIC11ciAuL2xpbnV4Lm9yaWcvZHJpdmVycy9zY3NpL2N5 YmVyc3Rvcm0uYyAuL2xpbnV4L2RyaXZlcnMvc2NzaS9jeWJlcnN0b3JtLmMKLS0tIC4vbGludXgu b3JpZy9kcml2ZXJzL3Njc2kvY3liZXJzdG9ybS5jCUZyaSBPY3QgMjYgMDA6NTM6NTAgMjAwMQor KysgLi9saW51eC9kcml2ZXJzL3Njc2kvY3liZXJzdG9ybS5jCU1vbiBKYW4gMjggMDY6Mjc6MzQg MjAwMgpAQCAtMTM2LDcgKzEzNiw3IEBACiAKIAkJZXNwLT5pcnEgPSBJUlFfQU1JR0FfUE9SVFM7 CiAJCXJlcXVlc3RfaXJxKElSUV9BTUlHQV9QT1JUUywgZXNwX2ludHIsIFNBX1NISVJRLAotCQkJ ICAgICJDeWJlclN0b3JtIFNDU0kiLCBlc3BfaW50cik7CisJCQkgICAgIkN5YmVyU3Rvcm0gU0NT SSIsIGVzcC0+ZWhvc3QpOwogCQkvKiBGaWd1cmUgb3V0IG91ciBzY3NpIElEIG9uIHRoZSBidXMg Ki8KIAkJLyogVGhlIERNQSBjb25kIGZsYWcgY29udGFpbnMgYSBoYXJkY29kZWQganVtcGVyIGJp dAogCQkgKiB3aGljaCBjYW4gYmUgdXNlZCB0byBzZWxlY3QgaG9zdCBudW1iZXIgNiBvciA3LgpP bmx5IGluIC4vbGludXgvZHJpdmVycy9zY3NpLzogY3liZXJzdG9ybS5jfgpkaWZmIC11ciAuL2xp bnV4Lm9yaWcvZHJpdmVycy9zY3NpL2N5YmVyc3Rvcm1JSS5jIC4vbGludXgvZHJpdmVycy9zY3Np L2N5YmVyc3Rvcm1JSS5jCi0tLSAuL2xpbnV4Lm9yaWcvZHJpdmVycy9zY3NpL2N5YmVyc3Rvcm1J SS5jCUZyaSBPY3QgMjYgMDA6NTM6NTAgMjAwMQorKysgLi9saW51eC9kcml2ZXJzL3Njc2kvY3li ZXJzdG9ybUlJLmMJTW9uIEphbiAyOCAwNjoyNzoxMSAyMDAyCkBAIC0xMzAsNyArMTMwLDcgQEAK IAogCQllc3AtPmlycSA9IElSUV9BTUlHQV9QT1JUUzsKIAkJcmVxdWVzdF9pcnEoSVJRX0FNSUdB X1BPUlRTLCBlc3BfaW50ciwgU0FfU0hJUlEsCi0JCQkgICAgIkN5YmVyU3Rvcm0gU0NTSSBNayBJ SSIsIGVzcF9pbnRyKTsKKwkJCSAgICAiQ3liZXJTdG9ybSBTQ1NJIE1rIElJIiwgZXNwLT5laG9z dCk7CiAKIAkJLyogRmlndXJlIG91dCBvdXIgc2NzaSBJRCBvbiB0aGUgYnVzICovCiAJCWVzcC0+ c2NzaV9pZCA9IDc7Ck9ubHkgaW4gLi9saW51eC9kcml2ZXJzL3Njc2kvOiBjeWJlcnN0b3JtSUku Y34KZGlmZiAtdXIgLi9saW51eC5vcmlnL2RyaXZlcnMvc2NzaS9kZWNfZXNwLmMgLi9saW51eC9k cml2ZXJzL3Njc2kvZGVjX2VzcC5jCi0tLSAuL2xpbnV4Lm9yaWcvZHJpdmVycy9zY3NpL2RlY19l c3AuYwlTdW4gU2VwICA5IDIxOjUyOjM1IDIwMDEKKysrIC4vbGludXgvZHJpdmVycy9zY3NpL2Rl Y19lc3AuYwlNb24gSmFuIDI4IDA2OjIyOjU4IDIwMDIKQEAgLTE4OSwxMCArMTg5LDEwIEBACiAJ CWVzcF9pbml0aWFsaXplKGVzcCk7CiAKIAkJaWYgKHJlcXVlc3RfaXJxKGVzcC0+aXJxLCBlc3Bf aW50ciwgU0FfSU5URVJSVVBULCAKLQkJCQkiTkNSIDUzQzk0IFNDU0kiLCBOVUxMKSkKKwkJCQki TkNSIDUzQzk0IFNDU0kiLCBlc3AtPmVob3N0KSkKIAkJCWdvdG8gZXJyX2RlYWxsb2M7CiAJCWlm IChyZXF1ZXN0X2lycShTQ1NJX0RNQV9JTlQsIHNjc2lfZG1hX2ludCwgU0FfSU5URVJSVVBULCAK LQkJCQkiSlVOS0lPIFNDU0kgRE1BIiwgTlVMTCkpCisJCQkJIkpVTktJTyBTQ1NJIERNQSIsIGVz cC0+ZWhvc3QpKQogCQkJZ290byBlcnJfZnJlZV9pcnE7CiAgCQkJCiAJfQpAQCAtMjUzLDcgKzI1 Myw3IEBACiAJCQllc3AtPmRtYV9hZHZhbmNlX3NnID0gMDsKIAogIAkJCWlmIChyZXF1ZXN0X2ly cShlc3AtPmlycSwgZXNwX2ludHIsIFNBX0lOVEVSUlVQVCwgCi0gCQkJCQkgIlBNQVpfQUEiLCBO VUxMKSkgeworIAkJCQkJICJQTUFaX0FBIiwgZXNwLT5laG9zdCkpIHsKICAJCQkJZXNwX2RlYWxs b2NhdGUoZXNwKTsKICAJCQkJcmVsZWFzZV90Y19jYXJkKHNsb3QpOwogIAkJCQljb250aW51ZTsK T25seSBpbiAuL2xpbnV4L2RyaXZlcnMvc2NzaS86IGRlY19lc3AuY34KZGlmZiAtdXIgLi9saW51 eC5vcmlnL2RyaXZlcnMvc2NzaS9kdGMuYyAuL2xpbnV4L2RyaXZlcnMvc2NzaS9kdGMuYwotLS0g Li9saW51eC5vcmlnL2RyaXZlcnMvc2NzaS9kdGMuYwlTdW4gU2VwIDMwIDIzOjI2OjA3IDIwMDEK KysrIC4vbGludXgvZHJpdmVycy9zY3NpL2R0Yy5jCU1vbiBKYW4gMjggMDU6Mjk6MTMgMjAwMgpA QCAtMjU5LDcgKzI1OSw3IEBACiAvKiBXaXRoIGludGVycnVwdHMgZW5hYmxlZCwgaXQgd2lsbCBz b21ldGltZXMgaGFuZyB3aGVuIGRvaW5nIGhlYXZ5CiAgKiByZWFkcy4gU28gYmV0dGVyIG5vdCBl bmFibGUgdGhlbSB1bnRpbCBJIGZpbmdlciBpdCBvdXQuICovCiAgICAgICBpZiAoaW5zdGFuY2Ut PmlycSAhPSBJUlFfTk9ORSkKLQkgaWYgKHJlcXVlc3RfaXJxKGluc3RhbmNlLT5pcnEsIGRvX2R0 Y19pbnRyLCBTQV9JTlRFUlJVUFQsICJkdGMiKSkgeworCSBpZiAocmVxdWVzdF9pcnEoaW5zdGFu Y2UtPmlycSwgZG9fZHRjX2ludHIsIFNBX0lOVEVSUlVQVCwgImR0YyIsIGluc3RhbmNlKSkgewog CSBwcmludGsoInNjc2klZCA6IElSUSVkIG5vdCBmcmVlLCBpbnRlcnJ1cHRzIGRpc2FibGVkXG4i LAogCSAgICAgIGluc3RhbmNlLT5ob3N0X25vLCBpbnN0YW5jZS0+aXJxKTsKIAkgaW5zdGFuY2Ut PmlycSA9IElSUV9OT05FOwpPbmx5IGluIC4vbGludXgvZHJpdmVycy9zY3NpLzogZHRjLmN+CmRp ZmYgLXVyIC4vbGludXgub3JpZy9kcml2ZXJzL3Njc2kvZWF0YV9kbWEuYyAuL2xpbnV4L2RyaXZl cnMvc2NzaS9lYXRhX2RtYS5jCi0tLSAuL2xpbnV4Lm9yaWcvZHJpdmVycy9zY3NpL2VhdGFfZG1h LmMJU3VuIFNlcCAzMCAyMzoyNjowNyAyMDAxCisrKyAuL2xpbnV4L2RyaXZlcnMvc2NzaS9lYXRh X2RtYS5jCU1vbiBKYW4gMjggMDU6NDQ6NDEgMjAwMgpAQCAtMjI5LDEwICsyMjksMTEgQEAKIHZv aWQgZG9fZWF0YV9pbnRfaGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9y ZWdzICogcmVncykKIHsKICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0gICAgc3Bpbl9sb2Nr X2lycXNhdmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3MpOworICAgIHN0cnVjdCBTY3NpX0hvc3Qg KmRldiA9IGRldl9pZDsKKyAgICAKKyAgICBzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5ob3N0X2xv Y2ssIGZsYWdzKTsKICAgICBlYXRhX2ludF9oYW5kbGVyKGlycSwgZGV2X2lkLCByZWdzKTsKLSAg ICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb19yZXF1ZXN0X2xvY2ssIGZsYWdzKTsKKyAgICBz cGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmhvc3RfbG9jaywgZmxhZ3MpOwogfQogCiB2b2lk IGVhdGFfaW50X2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAq IHJlZ3MpCkBAIC0xNTAzLDcgKzE1MDQsNyBAQAogCWlmIChyZWdfSVJRW2ldID49IDEpeyAgICAg ICAvKiBleGNoYW5nZSB0aGUgaW50ZXJydXB0IGhhbmRsZXIgd2hpY2ggICovCiAJICAgIGZyZWVf aXJxKGksIE5VTEwpOyAgICAgIC8qIHdlIHVzZWQgZm9yIHByb2Jpbmcgd2l0aCB0aGUgcmVhbCBv bmUgKi8KIAkgICAgcmVxdWVzdF9pcnEoaSwgKHZvaWQgKikoZG9fZWF0YV9pbnRfaGFuZGxlciks IFNBX0lOVEVSUlVQVHxTQV9TSElSUSwgCi0JCQkiZWF0YV9kbWEiLCBOVUxMKTsKKwkJCSJlYXRh X2RtYSIsIGZpcnN0X0hCQSk7IC8qIENoZWNrIGl0ICovCiAJfQogICAgIH0KIApPbmx5IGluIC4v bGludXgvZHJpdmVycy9zY3NpLzogZWF0YV9kbWEuY34KZGlmZiAtdXIgLi9saW51eC5vcmlnL2Ry aXZlcnMvc2NzaS9lYXRhX3Bpby5jIC4vbGludXgvZHJpdmVycy9zY3NpL2VhdGFfcGlvLmMKLS0t IC4vbGludXgub3JpZy9kcml2ZXJzL3Njc2kvZWF0YV9waW8uYwlTdW4gU2VwIDMwIDIzOjI2OjA3 IDIwMDEKKysrIC4vbGludXgvZHJpdmVycy9zY3NpL2VhdGFfcGlvLmMJTW9uIEphbiAyOCAwNTo1 MzowOCAyMDAyCkBAIC0xMTAsMTAgKzExMCwxMSBAQAogdm9pZCBkb19lYXRhX3Bpb19pbnRfaGFu ZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICogcmVncykKIHsKICAg ICB1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0gICAgc3Bpbl9sb2NrX2lycXNhdmUoJmlvX3JlcXVl c3RfbG9jaywgZmxhZ3MpOworICAgIHN0cnVjdCBTY3NpX0hvc3QgKmRldiA9IGRldl9pZDsKKyAg ICAKKyAgICBzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5ob3N0X2xvY2ssIGZsYWdzKTsKICAgICBl YXRhX3Bpb19pbnRfaGFuZGxlcihpcnEsIGRldl9pZCwgcmVncyk7Ci0gICAgc3Bpbl91bmxvY2tf aXJxcmVzdG9yZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7CisgICAgc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmZGV2LT5ob3N0X2xvY2ssIGZsYWdzKTsKIH0KIAogdm9pZCBlYXRhX3Bpb19pbnRf aGFuZGxlcihpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICogcmVncykKQEAg LTcwNCwzNCArNzA1LDM2IEBACiAJcmV0dXJuIChGQUxTRSk7CiAgICAgfQogICAgIAorICAgIHJl cXVlc3RfcmVnaW9uKGJhc2UsIDgsICJlYXRhX3BpbyIpOworICAgIAorICAgIHNpemUgPSBzaXpl b2YoaG9zdGRhdGEpICsgKHNpemVvZihzdHJ1Y3QgZWF0YV9jY2IpICogbnRvaHMoZ2MtPnF1ZXVl c2l6KSk7CisgICAgCisgICAgc2ggPSBzY3NpX3JlZ2lzdGVyKHRwbnQsIHNpemUpOworICAgIGlm KHNoID09IE5VTEwpCisgICAgeworICAgIAlyZWxlYXNlX3JlZ2lvbihiYXNlLCA4KTsKKyAgICAJ cmV0dXJuIEZBTFNFOworICAgIH0KKyAgICAKICAgICBpZiAoIXJlZ19JUlFbZ2MtPklSUV0pIHsg ICAgLyogSW50ZXJydXB0IGFscmVhZHkgcmVnaXN0ZXJlZCA/ICovCiAJaWYgKCFyZXF1ZXN0X2ly cShnYy0+SVJRLCBkb19lYXRhX3Bpb19pbnRfaGFuZGxlciwgU0FfSU5URVJSVVBULCAKLQkJCSAi RUFUQS1QSU8iLCBOVUxMKSl7CisJCQkgIkVBVEEtUElPIiwgc2gpKXsKIAkgICAgcmVnX0lSUVtn Yy0+SVJRXSsrOwogCSAgICBpZiAoIWdjLT5JUlFfVFIpCiAJCXJlZ19JUlFMW2djLT5JUlFdID0g VFJVRTsgICAvKiBJUlEgaXMgZWRnZSB0cmlnZ2VyZWQgKi8KIAl9IGVsc2UgewogCSAgICBwcmlu dGsoIkNvdWxkbid0IGFsbG9jYXRlIElSUSAlZCwgU29ycnkuXG4iLCBnYy0+SVJRKTsKKwkgICAg cmVsZWFzZV9yZWdpb24oYmFzZSwgOCk7CiAJICAgIHJldHVybiAoRkFMU0UpOwogCX0KICAgICB9 IGVsc2UgeyAgICAgICAgICAgIC8qIE1vcmUgdGhhbiBvbmUgSEJBIG9uIHRoaXMgSVJRICovCiAJ aWYgKHJlZ19JUlFMW2djLT5JUlFdID09IFRSVUUpIHsKIAkgICAgcHJpbnRrKCJDYW4ndCBzdXBw b3J0IG1vcmUgdGhhbiBvbmUgSEJBIG9uIHRoaXMgSVJRLFxuIgogCQkgICAiICBpZiB0aGUgSVJR IGlzIGVkZ2UgdHJpZ2dlcmVkLiBTb3JyeS5cbiIpOworCSAgICByZWxlYXNlX3JlZ2lvbihiYXNl LCA4KTsKIAkgICAgcmV0dXJuIChGQUxTRSk7CiAJfSBlbHNlCiAJICAgIHJlZ19JUlFbZ2MtPklS UV0rKzsKLSAgICB9Ci0gICAgCi0gICAgcmVxdWVzdF9yZWdpb24oYmFzZSwgOCwgImVhdGFfcGlv Iik7Ci0gICAgCi0gICAgc2l6ZSA9IHNpemVvZihob3N0ZGF0YSkgKyAoc2l6ZW9mKHN0cnVjdCBl YXRhX2NjYikgKiBudG9ocyhnYy0+cXVldWVzaXopKTsKLSAgICAKLSAgICBzaCA9IHNjc2lfcmVn aXN0ZXIodHBudCwgc2l6ZSk7Ci0gICAgaWYoc2ggPT0gTlVMTCkKLSAgICB7Ci0gICAgCXJlbGVh c2VfcmVnaW9uKGJhc2UsIDgpOwotICAgIAlyZXR1cm4gRkFMU0U7CiAgICAgfQogICAgIAogICAg IGhkID0gU0Qoc2gpOyAgICAgICAgICAgICAgICAgICAKT25seSBpbiAuL2xpbnV4L2RyaXZlcnMv c2NzaS86IGVhdGFfcGlvLmN+CmRpZmYgLXVyIC4vbGludXgub3JpZy9kcml2ZXJzL3Njc2kvZXNw LmMgLi9saW51eC9kcml2ZXJzL3Njc2kvZXNwLmMKLS0tIC4vbGludXgub3JpZy9kcml2ZXJzL3Nj c2kvZXNwLmMJTW9uIEphbiAyOCAwNjo1NToxNiAyMDAyCisrKyAuL2xpbnV4L2RyaXZlcnMvc2Nz aS9lc3AuYwlNb24gSmFuIDI4IDA2OjI5OjI3IDIwMDIKQEAgLTgxMyw3ICs4MTMsNyBAQAogCSAq IHNhbmVseSBtYWludGFpbi4KIAkgKi8KIAlpZiAocmVxdWVzdF9pcnEoZXNwLT5laG9zdC0+aXJx LCBlc3BfaW50ciwKLQkJCVNBX1NISVJRLCAiRVNQIFNDU0kiLCBlc3ApKSB7CisJCQlTQV9TSElS USwgIkVTUCBTQ1NJIiwgZXNwLT5laG9zdCkpIHsKIAkJcHJpbnRrKCJlc3AlZDogQ2Fubm90IGFj cXVpcmUgaXJxIGxpbmVcbiIsCiAJCSAgICAgICBlc3AtPmVzcF9pZCk7CiAJCXJldHVybiAtMTsK T25seSBpbiAuL2xpbnV4L2RyaXZlcnMvc2NzaS86IGVzcC5jfgpkaWZmIC11ciAuL2xpbnV4Lm9y aWcvZHJpdmVycy9zY3NpL2Zhc3RsYW5lLmMgLi9saW51eC9kcml2ZXJzL3Njc2kvZmFzdGxhbmUu YwotLS0gLi9saW51eC5vcmlnL2RyaXZlcnMvc2NzaS9mYXN0bGFuZS5jCUZyaSBPY3QgMjYgMDA6 NTM6NTEgMjAwMQorKysgLi9saW51eC9kcml2ZXJzL3Njc2kvZmFzdGxhbmUuYwlNb24gSmFuIDI4 IDA2OjI4OjE1IDIwMDIKQEAgLTE2Nyw3ICsxNjcsNyBAQAogCQllc3AtPmlycSA9IElSUV9BTUlH QV9QT1JUUzsKIAkJZXNwLT5zbG90ID0gYm9hcmQrRkFTVExBTkVfRVNQX0FERFI7CiAJCWlmIChy ZXF1ZXN0X2lycShJUlFfQU1JR0FfUE9SVFMsIGVzcF9pbnRyLCBTQV9TSElSUSwKLQkJCQkiRmFz dGxhbmUgU0NTSSIsIGVzcF9pbnRyKSkgeworCQkJCSJGYXN0bGFuZSBTQ1NJIiwgZXNwLT5laG9z dCkpIHsKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhc3RsYW5lOiBDb3VsZCBub3QgZ2V0IElS USVkLCBhYm9ydGluZy5cbiIsIElSUV9BTUlHQV9QT1JUUyk7CiAJCQlnb3RvIGVycl91bm1hcDsK IAkJfQkJCQpPbmx5IGluIC4vbGludXgvZHJpdmVycy9zY3NpLzogZmFzdGxhbmUuY34KZGlmZiAt dXIgLi9saW51eC5vcmlnL2RyaXZlcnMvc2NzaS9mZF9tY3MuYyAuL2xpbnV4L2RyaXZlcnMvc2Nz aS9mZF9tY3MuYwotLS0gLi9saW51eC5vcmlnL2RyaXZlcnMvc2NzaS9mZF9tY3MuYwlTdW4gU2Vw IDMwIDIzOjI2OjA3IDIwMDEKKysrIC4vbGludXgvZHJpdmVycy9zY3NpL2ZkX21jcy5jCU1vbiBK YW4gMjggMDY6MzM6NDggMjAwMgpAQCAtNzQwLDkgKzc0MCw5IEBACiAjaWYgRVZFUllfQUNDRVNT CiAgICAgICBwcmludGsoICIgQUZBSUwgIiApOwogI2VuZGlmCi0gICAgICBzcGluX2xvY2tfaXJx c2F2ZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7CisgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgm c2hwbnQtPmhvc3RfbG9jaywgZmxhZ3MpOwogICAgICAgbXlfZG9uZSggc2hwbnQsIERJRF9CVVNf QlVTWSA8PCAxNiApOwotICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9fcmVxdWVzdF9s b2NrLCBmbGFncyk7CisgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzaHBudC0+aG9zdF9s b2NrLCBmbGFncyk7CiAgICAgICByZXR1cm47CiAgICAgfQogICAgIGN1cnJlbnRfU0MtPlNDcC5w aGFzZSA9IGluX3NlbGVjdGlvbjsKQEAgLTc2Niw5ICs3NjYsOSBAQAogI2lmIEVWRVJZX0FDQ0VT UwogCXByaW50ayggIiBTRkFJTCAiICk7CiAjZW5kaWYKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9f cmVxdWVzdF9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnNocG50LT5ob3N0X2xv Y2ssIGZsYWdzKTsKIAlteV9kb25lKCBzaHBudCwgRElEX05PX0NPTk5FQ1QgPDwgMTYgKTsKLQlz cGluX3VubG9ja19pcnFyZXN0b3JlKCZpb19yZXF1ZXN0X2xvY2ssIGZsYWdzKTsKKwlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZzaHBudC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJcmV0dXJuOwogICAg ICAgfSBlbHNlIHsKICNpZiBFVkVSWV9BQ0NFU1MKQEAgLTExMTcsMTEgKzExMTcsMTEgQEAKICNp ZiBFVkVSWV9BQ0NFU1MKICAgICBwcmludGsoICJCRUZPUkUgTVlfRE9ORS4gLiAuIiApOwogI2Vu ZGlmCi0gICAgc3Bpbl9sb2NrX2lycXNhdmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3MpOworICAg IHNwaW5fbG9ja19pcnFzYXZlKCZzaHBudC0+aG9zdF9sb2NrLCBmbGFncyk7CiAgICAgbXlfZG9u ZSggc2hwbnQsCiAJICAgICAoY3VycmVudF9TQy0+U0NwLlN0YXR1cyAmIDB4ZmYpCiAJICAgICB8 ICgoY3VycmVudF9TQy0+U0NwLk1lc3NhZ2UgJiAweGZmKSA8PCA4KSB8IChESURfT0sgPDwgMTYp ICk7Ci0gICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7 CisgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc2hwbnQtPmhvc3RfbG9jaywgZmxhZ3MpOwog I2lmIEVWRVJZX0FDQ0VTUwogICAgIHByaW50ayggIlJFVFVSTklORy5cbiIgKTsKICNlbmRpZgpA QCAtMTM0Miw5ICsxMzQyLDkgQEAKICAgcmVzdG9yZV9mbGFncyggZmxhZ3MgKTsKICAgIAogICAv KiBBYm9ydHMgYXJlIG5vdCBkb25lIHdlbGwuIC4gLiAqLwotICBzcGluX2xvY2tfaXJxc2F2ZSgm aW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7CisgIHNwaW5fbG9ja19pcnFzYXZlKCZzaHBudC0+aG9z dF9sb2NrLCBmbGFncyk7CiAgIG15X2RvbmUoIHNocG50LCBESURfQUJPUlQgPDwgMTYgKTsKLSAg c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7CisgIHNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJnNocG50LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAogICByZXR1cm4g U0NTSV9BQk9SVF9TVUNDRVNTOwogfQpPbmx5IGluIC4vbGludXgvZHJpdmVycy9zY3NpLzogZmRf bWNzLmN+CmRpZmYgLXVyIC4vbGludXgub3JpZy9kcml2ZXJzL3Njc2kvZ2R0aC5jIC4vbGludXgv ZHJpdmVycy9zY3NpL2dkdGguYwotLS0gLi9saW51eC5vcmlnL2RyaXZlcnMvc2NzaS9nZHRoLmMJ U2F0IE5vdiAxMCAwMTowNTowNiAyMDAxCisrKyAuL2xpbnV4L2RyaXZlcnMvc2NzaS9nZHRoLmMJ TW9uIEphbiAyOCAwNToxOTowNyAyMDAyCkBAIC02MjksMTkgKzYyOSwxOSBAQAogI2RlZmluZSBH RFRIX0xPQ0tfSEEoaGEsZmxhZ3MpICAgICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCYoaGEpLT5z bXBfbG9jayxmbGFncykKICNkZWZpbmUgR0RUSF9VTkxPQ0tfSEEoaGEsZmxhZ3MpICAgICAgICBz cGluX3VubG9ja19pcnFyZXN0b3JlKCYoaGEpLT5zbXBfbG9jayxmbGFncykKIAotI2RlZmluZSBH RFRIX0xPQ0tfU0NTSV9ET05FKGZsYWdzKSAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZpb19yZXF1 ZXN0X2xvY2ssZmxhZ3MpCi0jZGVmaW5lIEdEVEhfVU5MT0NLX1NDU0lfRE9ORShmbGFncykgICAg c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9fcmVxdWVzdF9sb2NrLGZsYWdzKQotI2RlZmluZSBH RFRIX0xPQ0tfU0NTSV9ET0NNRCgpICAgICAgICAgIHNwaW5fbG9ja19pcnEoJmlvX3JlcXVlc3Rf bG9jaykKLSNkZWZpbmUgR0RUSF9VTkxPQ0tfU0NTSV9ET0NNRCgpICAgICAgICBzcGluX3VubG9j a19pcnEoJmlvX3JlcXVlc3RfbG9jaykKKyNkZWZpbmUgR0RUSF9MT0NLX1NDU0lfRE9ORShkZXYs IGZsYWdzKSAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCYoKHN0cnVjdCBTY3NpX0hvc3QgKilkZXYp LT5ob3N0X2xvY2ssZmxhZ3MpCisjZGVmaW5lIEdEVEhfVU5MT0NLX1NDU0lfRE9ORShmbGFncykg ICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmKChzdHJ1Y3QgU2NzaV9Ib3N0ICopZGV2KS0+aG9z dF9sb2NrLGZsYWdzKQorI2RlZmluZSBHRFRIX0xPQ0tfU0NTSV9ET0NNRChkZXYpICAgICAgICAg IHNwaW5fbG9ja19pcnEoJigoc3RydWN0IFNjc2lfSG9zdCAqKWRldiktPmhvc3RfbG9jaykKKyNk ZWZpbmUgR0RUSF9VTkxPQ0tfU0NTSV9ET0NNRChkZXYpICAgICAgICBzcGluX3VubG9ja19pcnEo Jigoc3RydWN0IFNjc2lfSG9zdCAqKWRldiktPmhvc3RfbG9jaykKICNlbHNlCiAjZGVmaW5lIEdE VEhfSU5JVF9MT0NLX0hBKGhhKSAgICAgICAgICAgZG8ge30gd2hpbGUgKDApCiAjZGVmaW5lIEdE VEhfTE9DS19IQShoYSxmbGFncykgICAgICAgICAgZG8ge3NhdmVfZmxhZ3MoZmxhZ3MpOyBjbGko KTt9IHdoaWxlICgwKQogI2RlZmluZSBHRFRIX1VOTE9DS19IQShoYSxmbGFncykgICAgICAgIGRv IHtyZXN0b3JlX2ZsYWdzKGZsYWdzKTt9IHdoaWxlICgwKQogCi0jZGVmaW5lIEdEVEhfTE9DS19T Q1NJX0RPTkUoZmxhZ3MpICAgICAgZG8ge30gd2hpbGUgKDApCi0jZGVmaW5lIEdEVEhfVU5MT0NL X1NDU0lfRE9ORShmbGFncykgICAgZG8ge30gd2hpbGUgKDApCi0jZGVmaW5lIEdEVEhfTE9DS19T Q1NJX0RPQ01EKCkgICAgICAgICAgZG8ge30gd2hpbGUgKDApCi0jZGVmaW5lIEdEVEhfVU5MT0NL X1NDU0lfRE9DTUQoKSAgICAgICAgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIEdEVEhfTE9DS19T Q1NJX0RPTkUoZGV2LCBmbGFncykgICAgICBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgR0RUSF9V TkxPQ0tfU0NTSV9ET05FKGRldiwgZmxhZ3MpICAgIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBH RFRIX0xPQ0tfU0NTSV9ET0NNRChkZXYpICAgICAgICAgIGRvIHt9IHdoaWxlICgwKQorI2RlZmlu ZSBHRFRIX1VOTE9DS19TQ1NJX0RPQ01EKGRldikgICAgICAgIGRvIHt9IHdoaWxlICgwKQogI2Vu ZGlmCiAKIC8qIExJTE8gYW5kIG1vZHByb2JlL2luc21vZCBwYXJhbWV0ZXJzICovCkBAIC0zMzM5 LDkgKzMzMzksOSBAQAogICAgIGlmIChydmFsID09IDIpIHsKICAgICAgICAgZ2R0aF9wdXRxKGhh bnVtLHNjcCxzY3AtPlNDcC50aGlzX3Jlc2lkdWFsKTsKICAgICB9IGVsc2UgaWYgKHJ2YWwgPT0g MSkgewotICAgICAgICBHRFRIX0xPQ0tfU0NTSV9ET05FKGZsYWdzKTsKKyAgICAgICAgR0RUSF9M T0NLX1NDU0lfRE9ORShzY3AtPmhvc3QsIGZsYWdzKTsKICAgICAgICAgc2NwLT5zY3NpX2RvbmUo c2NwKTsKLSAgICAgICAgR0RUSF9VTkxPQ0tfU0NTSV9ET05FKGZsYWdzKTsKKyAgICAgICAgR0RU SF9VTkxPQ0tfU0NTSV9ET05FKHNjcC0+aG9zdCxmbGFncyk7CiAgICAgfQogICAgIGdkdGhfbmV4 dChoYW51bSk7CiB9Ck9ubHkgaW4gLi9saW51eC9kcml2ZXJzL3Njc2kvOiBnZHRoLmN+CmRpZmYg LXVyIC4vbGludXgub3JpZy9kcml2ZXJzL3Njc2kvZ3ZwMTEuYyAuL2xpbnV4L2RyaXZlcnMvc2Nz aS9ndnAxMS5jCi0tLSAuL2xpbnV4Lm9yaWcvZHJpdmVycy9zY3NpL2d2cDExLmMJRnJpIE9jdCAy NiAwMDo1Mzo1MSAyMDAxCisrKyAuL2xpbnV4L2RyaXZlcnMvc2NzaS9ndnAxMS5jCU1vbiBKYW4g MjggMDU6NTk6MjggMjAwMgpAQCAtNDAsOSArNDAsOSBAQAogCWlmICghKHN0YXR1cyAmIEdWUDEx X0RNQUNfSU5UX1BFTkRJTkcpKQogCSAgICBjb250aW51ZTsKIAotCXNwaW5fbG9ja19pcnFzYXZl KCZpb19yZXF1ZXN0X2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW5zdGFuY2Ut Pmhvc3RfbG9jaywgZmxhZ3MpOwogCXdkMzNjOTNfaW50ciAoaW5zdGFuY2UpOwotCXNwaW5fdW5s b2NrX2lycXJlc3RvcmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2ly cXJlc3RvcmUoJmluc3RhbmNlLT5ob3N0X2xvY2ssIGZsYWdzKTsKICAgICB9CiB9CiAKT25seSBp biAuL2xpbnV4L2RyaXZlcnMvc2NzaS86IGd2cDExLmN+CmRpZmYgLXVyIC4vbGludXgub3JpZy9k cml2ZXJzL3Njc2kvaWJtbWNhLmMgLi9saW51eC9kcml2ZXJzL3Njc2kvaWJtbWNhLmMKLS0tIC4v bGludXgub3JpZy9kcml2ZXJzL3Njc2kvaWJtbWNhLmMJV2VkIE1heSAgMiAwMzowNTowMCAyMDAx CisrKyAuL2xpbnV4L2RyaXZlcnMvc2NzaS9pYm1tY2EuYwlNb24gSmFuIDI4IDA1OjQwOjA4IDIw MDIKQEAgLTQxLDggKzQxLDggQEAKIC8qIGN1cnJlbnQgdmVyc2lvbiBvZiB0aGlzIGRyaXZlci1z b3VyY2U6ICovCiAjZGVmaW5lIElCTU1DQV9TQ1NJX0RSSVZFUl9WRVJTSU9OICI0LjBiIgogCi0j ZGVmaW5lIElCTUxPQ0sgc3Bpbl9sb2NrX2lycXNhdmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3Mp OwotI2RlZmluZSBJQk1VTkxPQ0sgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9fcmVxdWVzdF9s b2NrLCBmbGFncyk7CisjZGVmaW5lIElCTUxPQ0soZGV2KSBzcGluX2xvY2tfaXJxc2F2ZSgmKChz dHJ1Y3QgU2NzaV9Ib3N0ICopZGV2KS0+aG9zdF9sb2NrLCBmbGFncyk7CisjZGVmaW5lIElCTVVO TE9DSyhkZXYpIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJigoc3RydWN0IFNjc2lfSG9zdCAqKWRl diktPmhvc3RfbG9jaywgZmxhZ3MpOwogCiAvKiBkcml2ZXIgY29uZmlndXJhdGlvbiAqLwogI2Rl ZmluZSBJTV9NQVhfSE9TVFMgICAgIDggLyogbWF4aW11bSBudW1iZXIgb2YgaG9zdCBhZGFwdGVy cyAqLwpAQCAtNTA1LDE0ICs1MDUsMTQgQEAKICAgIFNjc2lfQ21uZCAqY21kOwogICAgaW50IGxh c3RTQ1NJOwogCi0gICBJQk1MT0NLCisgICBJQk1MT0NLKGRldl9pZCkKICAgIC8qIHNlYXJjaCBm b3Igb25lIGFkYXB0ZXItcmVzcG9uc2Ugb24gc2hhcmVkIGludGVycnVwdCAqLwogICAgZm9yICho b3N0X2luZGV4PTA7CiAJaG9zdHNbaG9zdF9pbmRleF0gJiYgIShpbmIoSU1fU1RBVF9SRUcoaG9z dF9pbmRleCkpICYgSU1fSU5UUl9SRVFVRVNUKTsKIAlob3N0X2luZGV4KyspOwogICAgLyogcmV0 dXJuIGlmIHNvbWUgb3RoZXIgZGV2aWNlIG9uIHRoaXMgSVJRIGNhdXNlZCB0aGUgaW50ZXJydXB0 ICovCiAgICBpZiAoIWhvc3RzW2hvc3RfaW5kZXhdKSB7Ci0gICAgICBJQk1VTkxPQ0sKKyAgICAg IElCTVVOTE9DSyhkZXZfaWQpCiAgICAgICByZXR1cm47CiAgICB9CiAKQEAgLTUyMSwxNSArNTIx LDE1IEBACiAgICBpZiAoKHJlc2V0X3N0YXR1cyhob3N0X2luZGV4KSA9PSBJTV9SRVNFVF9OT1Rf SU5fUFJPR1JFU1NfTk9fSU5UKXx8CiAgICAgICAgKHJlc2V0X3N0YXR1cyhob3N0X2luZGV4KSA9 PSBJTV9SRVNFVF9GSU5JU0hFRF9PS19OT19JTlQpKSB7CiAgICAgICByZXNldF9zdGF0dXMoaG9z dF9pbmRleCkgPSBJTV9SRVNFVF9OT1RfSU5fUFJPR1JFU1M7Ci0gICAgICBJQk1VTkxPQ0sKKyAg ICAgIElCTVVOTE9DSyhkZXZfaWQpCiAgICAgICByZXR1cm47CiAgICB9CiAKICAgIC8qbXVzdCB3 YWl0IGZvciBhdHRlbnRpb24gcmVnIG5vdCBidXN5LCB0aGVuIHNlbmQgRU9JIHRvIHN1YnN5c3Rl bSAqLwogICAgd2hpbGUgKDEpIHsKICAgICAgIGlmICghKGluYiAoSU1fU1RBVF9SRUcoaG9zdF9p bmRleCkpICYgSU1fQlVTWSkpIGJyZWFrOwotICAgICAgSUJNVU5MT0NLIC8qIGN5Y2xlIGludGVy cnVwdCAqLwotICAgICAgSUJNTE9DSworICAgICAgSUJNVU5MT0NLKGRldl9pZCkgLyogY3ljbGUg aW50ZXJydXB0ICovCisgICAgICBJQk1MT0NLKGRldl9pZCkKICAgIH0KICAgIGlob3N0X2luZGV4 PWhvc3RfaW5kZXg7CiAgICAvKmdldCBjb21tYW5kIHJlc3VsdCBhbmQgbG9naWNhbCBkZXZpY2Ug Ki8KQEAgLTUzOSw3ICs1MzksNyBAQAogICAgLyogZ2V0IHRoZSBsYXN0X3Njc2lfY29tbWFuZCBo ZXJlICovCiAgICBsYXN0U0NTSSA9IGxhc3Rfc2NzaV9jb21tYW5kKGlob3N0X2luZGV4KVtsZG5d OwogICAgb3V0YiAoSU1fRU9JIHwgbGRuLCBJTV9BVFROX1JFRyhpaG9zdF9pbmRleCkpOwotICAg SUJNVU5MT0NLCisgICBJQk1VTkxPQ0soZGV2X2lkKQogICAgLyp0aGVzZSBzaG91bGQgbmV2ZXIg aGFwcGVuIChodyBmYWlscywgb3IgYSBsb2NhbCBwcm9ncmFtbWluZyBidWcpICovCiAgICBpZiAo IWdsb2JhbF9jb21tYW5kX2Vycm9yX2V4Y3VzZSkgewogICAgICAgc3dpdGNoIChjbWRfcmVzdWx0 KSB7CkBAIC03MzEsMTQgKzczMSwxNCBAQAogICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgIC8q IG11c3Qgd2FpdCBmb3IgYXR0ZW50aW9uIHJlZyBub3QgYnVzeSAqLwogICAgd2hpbGUgKDEpIHsK LSAgICAgIElCTUxPQ0sKKyAgICAgIElCTUxPQ0soaG9zdHNbaG9zdF9pbmRleF0pCiAgICAgICBp ZiAoIShpbmIoSU1fU1RBVF9SRUcoaG9zdF9pbmRleCkpICYgSU1fQlVTWSkpIGJyZWFrOwotICAg ICAgSUJNVU5MT0NLCisgICAgICBJQk1VTkxPQ0soaG9zdHNbaG9zdF9pbmRleF0pCiAgICB9CiAg ICAvKiB3cml0ZSByZWdpc3RlcnMgYW5kIGVuYWJsZSBzeXN0ZW0gaW50ZXJydXB0cyAqLwogICAg b3V0bCAoY21kX3JlZywgSU1fQ01EX1JFRyhob3N0X2luZGV4KSk7CiAgICBvdXRiIChhdHRuX3Jl ZywgSU1fQVRUTl9SRUcoaG9zdF9pbmRleCkpOwotICAgSUJNVU5MT0NLCisgICBJQk1VTkxPQ0so aG9zdHNbaG9zdF9pbmRleF0pCiAgICByZXR1cm47CiB9CiAKQEAgLTE0NDIsNyArMTQ0Miw3IEBA CiAgICB1bnNpZ25lZCBpbnQgcG9zWzhdOwogICAgdW5zaWduZWQgbG9uZyBmbGFnczsKIAotICAg SUJNTE9DSworICAgSUJNTE9DSyhkZXYpCiAgICBzaHBudCA9IGRldjsgLyogYXNzaWduIGhvc3Qt c3RydWN0dXJlIHRvIGxvY2FsIHBvaW50ZXIgKi8KICAgIGxlbiA9IDA7IC8qIHNldCBmaWxsZWQg dGV4dC1idWZmZXIgaW5kZXggdG8gMCAqLwogICAgLyogZ2V0IHRoZSBfc3BlY2lhbCBjb250ZW50 cyBvZiB0aGUgaG9zdGRhdGEgc3RydWN0dXJlICovCkBAIC0xNDk2LDcgKzE0OTYsNyBAQAogICAg d2hpbGUgKCBsZW4gJSBzaXplb2YoIGludCApICE9ICggc2l6ZW9mICggaW50ICkgLSAxICkgKQog ICAgICBsZW4gKz0gc3ByaW50ZiAoYnVmK2xlbiwgIiAiKTsKICAgIGxlbiArPSBzcHJpbnRmIChi dWYrbGVuLCAiXG4iKTsKLSAgIElCTVVOTE9DSworICAgSUJNVU5MT0NLKHNocG50KQogICAgcmV0 dXJuIGxlbjsKIH0KIApAQCAtMjE5Miw3ICsyMTkyLDcgQEAKICNpZmRlZiBJTV9ERUJVR19QUk9C RQogICAgcHJpbnRrKCJJQk0gTUNBIFNDU0k6IEFib3J0IHN1YnJvdXRpbmUgY2FsbGVkLi4uXG4i KTsKICNlbmRpZgotICAgSUJNTE9DSworICAgSUJNTE9DSyhjbWQtPmhvc3QpCiAgICBzaHBudCA9 IGNtZC0+aG9zdDsKICAgIC8qIHNlYXJjaCBmb3IgdGhlIHJpZ2h0IGhvc3RhZGFwdGVyICovCiAg ICBmb3IgKGhvc3RfaW5kZXggPSAwOyBob3N0c1tob3N0X2luZGV4XSAmJiBob3N0c1tob3N0X2lu ZGV4XS0+aG9zdF9ubyAhPSBzaHBudC0+aG9zdF9ubzsgaG9zdF9pbmRleCsrKTsKQEAgLTIyMDEs NyArMjIwMSw3IEBACiAgICAgICBjbWQtPnJlc3VsdCA9IERJRF9OT19DT05ORUNUIDw8IDE2Owog ICAgICAgaWYgKGNtZC0+c2NzaV9kb25lKSAoY21kLT5zY3NpX2RvbmUpIChjbWQpOwogICAgICAg c2hwbnQgPSBjbWQtPmhvc3Q7Ci0gICAgICBJQk1VTkxPQ0sKKyAgICAgIElCTVVOTE9DSyhzaHBu dCkKICNpZmRlZiBJTV9ERUJVR19QUk9CRQogICAgICAgcHJpbnRrKCJJQk0gTUNBIFNDU0k6IEFi b3J0IGFkYXB0ZXIgc2VsZWN0aW9uIGZhaWxlZCFcbiIpOwogI2VuZGlmCkBAIC0yMjI0LDcgKzIy MjQsNyBAQAogCiAgICAvKmlmIGNtZCBmb3IgdGhpcyBsZG4gaGFzIGFscmVhZHkgZmluaXNoZWQs IG5vIG5lZWQgdG8gYWJvcnQgKi8KICAgIGlmICghbGQoaG9zdF9pbmRleClbbGRuXS5jbWQpIHsK LSAgICAgIElCTVVOTE9DSworICAgICAgSUJNVU5MT0NLKHNocG50KQogICAgICAgcmV0dXJuIFND U0lfQUJPUlRfTk9UX1JVTk5JTkc7CiAgICB9CiAKQEAgLTIyNDQsMTMgKzIyNDQsMTMgQEAKICAg IHdoaWxlICgxKSB7CiAgICAgICBpZiAoIShpbmIgKElNX1NUQVRfUkVHKGhvc3RfaW5kZXgpKSAm IElNX0JVU1kpKQogCWJyZWFrOwotICAgICAgSUJNVU5MT0NLCi0gICAgICBJQk1MT0NLCisgICAg ICBJQk1VTkxPQ0soc2hwbnQpCisgICAgICBJQk1MT0NLKHNocG50KQogICAgfQogICAgLyogd3Jp dGUgcmVnaXN0ZXJzIGFuZCBlbmFibGUgc3lzdGVtIGludGVycnVwdHMgKi8KICAgIG91dGwgKGlt bV9jb21tYW5kLCBJTV9DTURfUkVHKGhvc3RfaW5kZXgpKTsKICAgIG91dGIgKElNX0lNTV9DTUQg fCBsZG4sIElNX0FUVE5fUkVHKGhvc3RfaW5kZXgpKTsKLSAgIElCTVVOTE9DSworICAgSUJNVU5M T0NLKHNocG50KQogI2lmZGVmIElNX0RFQlVHX1BST0JFCiAgICBwcmludGsoIklCTSBNQ0EgU0NT STogQWJvcnQgcXVldWVkIHRvIGFkYXB0ZXIuLi5cbiIpOwogI2VuZGlmCkBAIC0yMjYyLDIxICsy MjYyLDIxIEBACiAKICAgIC8qaWYgYWJvcnQgd2VudCB3ZWxsLCBjYWxsIHNhdmVkIGRvbmUsIHRo ZW4gcmV0dXJuIHN1Y2Nlc3Mgb3IgZXJyb3IgKi8KICAgIGlmIChjbWQtPnJlc3VsdCA9PSAoRElE X0FCT1JUIDw8IDE2KSkgewotICAgICAgSUJNTE9DSworICAgICAgSUJNTE9DSyhzaHBudCkKICAg ICAgIGNtZC0+cmVzdWx0IHw9IERJRF9BQk9SVCA8PCAxNjsKICAgICAgIGlmIChjbWQtPnNjc2lf ZG9uZSkgKGNtZC0+c2NzaV9kb25lKSAoY21kKTsKICAgICAgIGxkKGhvc3RfaW5kZXgpW2xkbl0u Y21kID0gTlVMTDsKLSAgICAgIElCTVVOTE9DSworICAgICAgSUJNVU5MT0NLKHNocG50KQogI2lm ZGVmIElNX0RFQlVHX1BST0JFCiAgICAgICBwcmludGsoIklCTSBNQ0EgU0NTSTogQWJvcnQgZmlu aXNoZWQgd2l0aCBzdWNjZXNzLlxuIik7CiAjZW5kaWYKICAgICAgIHJldHVybiBTQ1NJX0FCT1JU X1NVQ0NFU1M7CiAgICB9IGVsc2UgewotICAgICAgSUJNTE9DSworICAgICAgSUJNTE9DSyhzaHBu dCkKICAgICAgIGNtZC0+cmVzdWx0IHw9IERJRF9OT19DT05ORUNUIDw8IDE2OwogICAgICAgaWYg KGNtZC0+c2NzaV9kb25lKSAoY21kLT5zY3NpX2RvbmUpIChjbWQpOwogICAgICAgbGQoaG9zdF9p bmRleClbbGRuXS5jbWQgPSBOVUxMOwotICAgICAgSUJNVU5MT0NLCisgICAgICBJQk1VTkxPQ0so c2hwbnQpCiAjaWZkZWYgSU1fREVCVUdfUFJPQkUKICAgICAgIHByaW50aygiSUJNIE1DQSBTQ1NJ OiBBYm9ydCBmYWlsZWQuXG4iKTsKICNlbmRpZgpAQCAtMjI5Nyw3ICsyMjk3LDcgQEAKICAgICAg IHByaW50aygiSUJNIE1DQSBTQ1NJOiBSZXNldCBjYWxsZWQgd2l0aCBOVUxMLWNvbW1hbmQhXG4i KTsKICAgICAgIHJldHVybihTQ1NJX1JFU0VUX1NOT09aRSk7CiAgICB9Ci0gICBJQk1MT0NLCisg ICBJQk1MT0NLKGNtZC0+aG9zdCkKICAgIHRpY2tzID0gSU1fUkVTRVRfREVMQVkqSFo7CiAgICBz aHBudCA9IGNtZC0+aG9zdDsKICAgIC8qIHNlYXJjaCBmb3IgdGhlIHJpZ2h0IGhvc3RhZGFwdGVy ICovCkBAIC0yMzA4LDcgKzIzMDgsNyBAQAogCiAgICBpZiAobG9jYWxfY2hlY2tpbmdfcGhhc2Vf ZmxhZyhob3N0X2luZGV4KSkgewogICAgICAgcHJpbnRrKCJJQk0gTUNBIFNDU0k6IHVuYWJsZSB0 byByZXNldCB3aGlsZSBjaGVja2luZyBkZXZpY2VzLlxuIik7Ci0gICAgICBJQk1VTkxPQ0sKKyAg ICAgIElCTVVOTE9DSyhzaHBudCkKICAgICAgIHJldHVybiBTQ1NJX1JFU0VUX1NOT09aRTsKICAg IH0KIApAQCAtMjMyNCw4ICsyMzI0LDggQEAKICAgIHdoaWxlICgxKSB7CiAgICAgICBpZiAoIShp bmIgKElNX1NUQVRfUkVHKGhvc3RfaW5kZXgpKSAmIElNX0JVU1kpKQogCWJyZWFrOwotICAgICAg SUJNVU5MT0NLCi0gICAgICBJQk1MT0NLCisgICAgICBJQk1VTkxPQ0soc2hwbnQpCisgICAgICBJ Qk1MT0NLKHNocG50KQogICAgfQogICAgLyp3cml0ZSByZWdpc3RlcnMgYW5kIGVuYWJsZSBzeXN0 ZW0gaW50ZXJydXB0cyAqLwogICAgb3V0bCAoaW1tX2NvbW1hbmQsIElNX0NNRF9SRUcoaG9zdF9p bmRleCkpOwpAQCAtMjM0Miw3ICsyMzQyLDcgQEAKICAgICAgIHByaW50aygiSUJNIE1DQSBTQ1NJ OiByZXNldCBkaWQgbm90IGNvbXBsZXRlIHdpdGhpbiAlZCBzZWNvbmRzLlxuIiwKIAkgICAgIElN X1JFU0VUX0RFTEFZKTsKICAgICAgIHJlc2V0X3N0YXR1cyhob3N0X2luZGV4KSA9IElNX1JFU0VU X0ZJTklTSEVEX0ZBSUw7Ci0gICAgICBJQk1VTkxPQ0sKKyAgICAgIElCTVVOTE9DSyhzaHBudCkK ICAgICAgIHJldHVybiBTQ1NJX1JFU0VUX0VSUk9SOwogICAgfQogCkBAIC0yMzYwLDEzICsyMzYw LDEzIEBACiAgICAvKiBpZiByZXNldCBmYWlsZWQsIGp1c3QgcmV0dXJuIGFuIGVycm9yICovCiAg ICBpZiAocmVzZXRfc3RhdHVzKGhvc3RfaW5kZXgpID09IElNX1JFU0VUX0ZJTklTSEVEX0ZBSUwp IHsKICAgICAgIHByaW50aygiSUJNIE1DQSBTQ1NJOiByZXNldCBmYWlsZWQuXG4iKTsKLSAgICAg IElCTVVOTE9DSworICAgICAgSUJNVU5MT0NLKHNocG50KQogICAgICAgcmV0dXJuIFNDU0lfUkVT RVRfRVJST1I7CiAgICB9CiAKICAgIC8qIHNvIHJlc2V0IGZpbmlzaGVkIG9rIC0gY2FsbCBvdXRz dGFuZGluZyBkb25lJ3MsIGFuZCByZXR1cm4gc3VjY2VzcyAqLwogICAgcHJpbnRrICgiSUJNIE1D QSBTQ1NJOiBSZXNldCBzdWNjZXNzZnVsbHkgY29tcGxldGVkLlxuIik7Ci0gICBJQk1VTkxPQ0sK KyAgIElCTVVOTE9DSyhzaHBudCkKICAgIGZvciAoaSA9IDA7IGkgPCBNQVhfTE9HX0RFVjsgaSsr KSB7CiAgICAgICBjbWRfYWlkID0gbGQoaG9zdF9pbmRleClbaV0uY21kOwogICAgICAgaWYgKGNt ZF9haWQgJiYgY21kX2FpZC0+c2NzaV9kb25lKSB7CkBAIC0yNDU0LDggKzI0NTQsOCBAQAogICAg dW5zaWduZWQgbG9uZyBmbGFnczsKICAgIGludCBtYXhfcHVuOwogCi0gICBJQk1MT0NLCiAgICBm b3IgKGkgPSAwOyBob3N0c1tpXSAmJiBob3N0c1tpXS0+aG9zdF9ubyAhPSBob3N0bm87IGkrKyk7 CisgICBJQk1MT0NLKGhvc3RzW2ldKSAvKiBDaGVjayBpdCAqLwogICAgc2hwbnQgPSBob3N0c1tp XTsKICAgIGhvc3RfaW5kZXggPSBpOwogICAgaWYgKCFzaHBudCkgewpAQCAtMjUzNyw3ICsyNTM3 LDcgQEAKICAgICpzdGFydCA9IGJ1ZmZlciArIG9mZnNldDsKICAgIGxlbiAtPSBvZmZzZXQ7CiAg ICBpZiAobGVuID4gbGVuZ3RoKSBsZW4gPSBsZW5ndGg7Ci0gICBJQk1VTkxPQ0sKKyAgIElCTVVO TE9DSyhzaHBudCkKICAgIHJldHVybiBsZW47CiB9CiAKT25seSBpbiAuL2xpbnV4L2RyaXZlcnMv c2NzaS86IGlibW1jYS5jfgpkaWZmIC11ciAuL2xpbnV4Lm9yaWcvZHJpdmVycy9zY3NpL2luaTkx MDB1LmMgLi9saW51eC9kcml2ZXJzL3Njc2kvaW5pOTEwMHUuYwotLS0gLi9saW51eC5vcmlnL2Ry aXZlcnMvc2NzaS9pbmk5MTAwdS5jCVN1biBTZXAgMzAgMjM6MjY6MDcgMjAwMQorKysgLi9saW51 eC9kcml2ZXJzL3Njc2kvaW5pOTEwMHUuYwlNb24gSmFuIDI4IDA2OjM4OjUxIDIwMDIKQEAgLTY5 OSwxMTMgKzY5OSwxMjEgQEAKIHN0YXRpYyB2b2lkIGk5MXVfaW50cjAoaW50IGlycW5vLCB2b2lk ICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7 Ci0KKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpkZXYgPSBkZXZfaWQ7CisJCiAJaWYgKHR1bF9oY3NbMF0u SENTX0ludHIgIT0gaXJxbm8pCiAJCXJldHVybjsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpb19y ZXF1ZXN0X2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5ob3N0X2xvY2ss IGZsYWdzKTsKIAogCXR1bF9pc3IoJnR1bF9oY3NbMF0pOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm ZGV2LT5ob3N0X2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgaTkxdV9pbnRyMShpbnQg aXJxbm8sIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQg bG9uZyBmbGFnczsKLQorCXN0cnVjdCBTY3NpX0hvc3QgKmRldiA9IGRldl9pZDsKKwkKIAlpZiAo dHVsX2hjc1sxXS5IQ1NfSW50ciAhPSBpcnFubykKIAkJcmV0dXJuOwogCi0Jc3Bpbl9sb2NrX2ly cXNhdmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYt Pmhvc3RfbG9jaywgZmxhZ3MpOwogCiAJdHVsX2lzcigmdHVsX2hjc1sxXSk7CiAKLQlzcGluX3Vu bG9ja19pcnFyZXN0b3JlKCZpb19yZXF1ZXN0X2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19p cnFyZXN0b3JlKCZkZXYtPmhvc3RfbG9jaywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBpOTF1 X2ludHIyKGludCBpcnFubywgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsK IAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCisJc3RydWN0IFNjc2lfSG9zdCAqZGV2ID0gZGV2X2lk OworCQogCWlmICh0dWxfaGNzWzJdLkhDU19JbnRyICE9IGlycW5vKQogCQlyZXR1cm47CiAKLQlz cGluX2xvY2tfaXJxc2F2ZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2ly cXNhdmUoJmRldi0+aG9zdF9sb2NrLCBmbGFncyk7CiAKIAl0dWxfaXNyKCZ0dWxfaGNzWzJdKTsK IAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3MpOworCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+aG9zdF9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRp YyB2b2lkIGk5MXVfaW50cjMoaW50IGlycW5vLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdz ICpyZWdzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpk ZXYgPSBkZXZfaWQ7CisJCiAJaWYgKHR1bF9oY3NbM10uSENTX0ludHIgIT0gaXJxbm8pCiAJCXJl dHVybjsKIAotCXNwaW5fbG9ja19pcnFzYXZlKCZpb19yZXF1ZXN0X2xvY2ssIGZsYWdzKTsKKwlz cGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAogCXR1bF9pc3IoJnR1 bF9oY3NbM10pOwogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9fcmVxdWVzdF9sb2NrLCBm bGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ob3N0X2xvY2ssIGZsYWdzKTsK IH0KIAogc3RhdGljIHZvaWQgaTkxdV9pbnRyNChpbnQgaXJxbm8sIHZvaWQgKmRldl9pZCwgc3Ry dWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQorCXN0cnVjdCBT Y3NpX0hvc3QgKmRldiA9IGRldl9pZDsKKwkKIAlpZiAodHVsX2hjc1s0XS5IQ1NfSW50ciAhPSBp cnFubykKIAkJcmV0dXJuOwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvX3JlcXVlc3RfbG9jaywg ZmxhZ3MpOworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmhvc3RfbG9jaywgZmxhZ3MpOwogCiAJ dHVsX2lzcigmdHVsX2hjc1s0XSk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb19yZXF1 ZXN0X2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmhvc3RfbG9j aywgZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZCBpOTF1X2ludHI1KGludCBpcnFubywgdm9pZCAq ZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwot CisJc3RydWN0IFNjc2lfSG9zdCAqZGV2ID0gZGV2X2lkOworCQogCWlmICh0dWxfaGNzWzVdLkhD U19JbnRyICE9IGlycW5vKQogCQlyZXR1cm47CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9fcmVx dWVzdF9sb2NrLCBmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+aG9zdF9sb2NrLCBm bGFncyk7CiAKIAl0dWxfaXNyKCZ0dWxfaGNzWzVdKTsKIAotCXNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRl di0+aG9zdF9sb2NrLCBmbGFncyk7CiB9CiAKIHN0YXRpYyB2b2lkIGk5MXVfaW50cjYoaW50IGly cW5vLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuc2lnbmVkIGxv bmcgZmxhZ3M7Ci0KKwlzdHJ1Y3QgU2NzaV9Ib3N0ICpkZXYgPSBkZXZfaWQ7CisJCiAJaWYgKHR1 bF9oY3NbNl0uSENTX0ludHIgIT0gaXJxbm8pCiAJCXJldHVybjsKIAotCXNwaW5fbG9ja19pcnFz YXZlKCZpb19yZXF1ZXN0X2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5o b3N0X2xvY2ssIGZsYWdzKTsKIAogCXR1bF9pc3IoJnR1bF9oY3NbNl0pOwogCi0Jc3Bpbl91bmxv Y2tfaXJxcmVzdG9yZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJx cmVzdG9yZSgmZGV2LT5ob3N0X2xvY2ssIGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgaTkxdV9p bnRyNyhpbnQgaXJxbm8sIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJ dW5zaWduZWQgbG9uZyBmbGFnczsKLQorCXN0cnVjdCBTY3NpX0hvc3QgKmRldiA9IGRldl9pZDsK KwkKIAlpZiAodHVsX2hjc1s3XS5IQ1NfSW50ciAhPSBpcnFubykKIAkJcmV0dXJuOwogCi0Jc3Bp bl9sb2NrX2lycXNhdmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3MpOworCXNwaW5fbG9ja19pcnFz YXZlKCZkZXYtPmhvc3RfbG9jaywgZmxhZ3MpOwogCiAJdHVsX2lzcigmdHVsX2hjc1s3XSk7CiAK LQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb19yZXF1ZXN0X2xvY2ssIGZsYWdzKTsKKwlzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmhvc3RfbG9jaywgZmxhZ3MpOwogfQogCiAvKiAKT25s eSBpbiAuL2xpbnV4L2RyaXZlcnMvc2NzaS86IGluaTkxMDB1LmN+CmRpZmYgLXVyIC4vbGludXgu b3JpZy9kcml2ZXJzL3Njc2kvaW5pYTEwMC5jIC4vbGludXgvZHJpdmVycy9zY3NpL2luaWExMDAu YwotLS0gLi9saW51eC5vcmlnL2RyaXZlcnMvc2NzaS9pbmlhMTAwLmMJU3VuIFNlcCAzMCAyMzoy NjowNyAyMDAxCisrKyAuL2xpbnV4L2RyaXZlcnMvc2NzaS9pbmlhMTAwLmMJTW9uIEphbiAyOCAw NTowMDozMyAyMDAyCkBAIC03MTcsMTkgKzcxNywxOSBAQAogfQogCiAKLXN0YXRpYyB2b2lkIHN1 YkludHIoT1JDX0hDUyAqIHBIQ0IsIGludCBpcnFubykKK3N0YXRpYyB2b2lkIHN1YkludHIoT1JD X0hDUyAqIHBIQ0IsIGludCBpcnFubywgc3RydWN0IFNjc2lfSG9zdCAqZGV2KQogewogCXVuc2ln bmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9fcmVxdWVzdF9sb2NrLCBm bGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+aG9zdF9sb2NrLCBmbGFncyk7CiAKIAlp ZiAocEhDQi0+SENTX0ludHIgIT0gaXJxbm8pIHsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgm aW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+ aG9zdF9sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9CiAJb3JjX2ludGVycnVwdChwSENCKTsK IAotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3MpOworCXNw aW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+aG9zdF9sb2NrLCBmbGFncyk7CiB9CiAKIC8qCkBA IC03MzcsNDIgKzczNyw0MiBAQAogICovCiBzdGF0aWMgdm9pZCBpbmlhMTAwX2ludHIwKGludCBp cnFubywgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlzdWJJbnRyKCZv cmNfaGNzWzBdLCBpcnFubyk7CisJc3ViSW50cigmb3JjX2hjc1swXSwgaXJxbm8sIGRldl9pZCk7 CiB9CiAKIHN0YXRpYyB2b2lkIGluaWExMDBfaW50cjEoaW50IGlycW5vLCB2b2lkICpkZXZfaWQs IHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXN1YkludHIoJm9yY19oY3NbMV0sIGlycW5vKTsK KwlzdWJJbnRyKCZvcmNfaGNzWzFdLCBpcnFubywgZGV2X2lkKTsKIH0KIAogc3RhdGljIHZvaWQg aW5pYTEwMF9pbnRyMihpbnQgaXJxbm8sIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJl Z3MpCiB7Ci0Jc3ViSW50cigmb3JjX2hjc1syXSwgaXJxbm8pOworCXN1YkludHIoJm9yY19oY3Nb Ml0sIGlycW5vLCBkZXZfaWQpOwogfQogCiBzdGF0aWMgdm9pZCBpbmlhMTAwX2ludHIzKGludCBp cnFubywgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlzdWJJbnRyKCZv cmNfaGNzWzNdLCBpcnFubyk7CisJc3ViSW50cigmb3JjX2hjc1szXSwgaXJxbm8sIGRldl9pZCk7 CiB9CiAKIHN0YXRpYyB2b2lkIGluaWExMDBfaW50cjQoaW50IGlycW5vLCB2b2lkICpkZXZfaWQs IHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXN1YkludHIoJm9yY19oY3NbNF0sIGlycW5vKTsK KwlzdWJJbnRyKCZvcmNfaGNzWzRdLCBpcnFubywgZGV2X2lkKTsKIH0KIAogc3RhdGljIHZvaWQg aW5pYTEwMF9pbnRyNShpbnQgaXJxbm8sIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJl Z3MpCiB7Ci0Jc3ViSW50cigmb3JjX2hjc1s1XSwgaXJxbm8pOworCXN1YkludHIoJm9yY19oY3Nb NV0sIGlycW5vLCBkZXZfaWQpOwogfQogCiBzdGF0aWMgdm9pZCBpbmlhMTAwX2ludHI2KGludCBp cnFubywgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKLQlzdWJJbnRyKCZv cmNfaGNzWzZdLCBpcnFubyk7CisJc3ViSW50cigmb3JjX2hjc1s2XSwgaXJxbm8sIGRldl9pZCk7 CiB9CiAKIHN0YXRpYyB2b2lkIGluaWExMDBfaW50cjcoaW50IGlycW5vLCB2b2lkICpkZXZfaWQs IHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewotCXN1YkludHIoJm9yY19oY3NbN10sIGlycW5vKTsK KwlzdWJJbnRyKCZvcmNfaGNzWzddLCBpcnFubywgZGV2X2lkKTsKIH0KIAogLyogCk9ubHkgaW4g Li9saW51eC9kcml2ZXJzL3Njc2kvOiBpbmlhMTAwLmN+CmRpZmYgLXVyIC4vbGludXgub3JpZy9k cml2ZXJzL3Njc2kvamF6el9lc3AuYyAuL2xpbnV4L2RyaXZlcnMvc2NzaS9qYXp6X2VzcC5jCi0t LSAuL2xpbnV4Lm9yaWcvZHJpdmVycy9zY3NpL2phenpfZXNwLmMJRnJpIE9jdCAyNiAwMDo1Mzo1 MSAyMDAxCisrKyAuL2xpbnV4L2RyaXZlcnMvc2NzaS9qYXp6X2VzcC5jCU1vbiBKYW4gMjggMDY6 MjY6NTIgMjAwMgpAQCAtMTIwLDcgKzEyMCw3IEBACiAJCiAJZXNwLT5pcnEgPSBKQVpaX1NDU0lf SVJROwogCXJlcXVlc3RfaXJxKEpBWlpfU0NTSV9JUlEsIGVzcF9pbnRyLCBTQV9JTlRFUlJVUFQs ICJKQVpaIFNDU0kiLAotCSAgICAgICAgICAgIE5VTEwpOworCSAgICAgICAgICAgIGVzcC0+ZWhv c3QpOwogCiAJLyoKIAkgKiBGSVhNRSwgbG9vayBpZiB0aGUgc2NzaSBpZCBpcyBhdmFpbGFiZSBm cm9tIE5WUkFNCk9ubHkgaW4gLi9saW51eC9kcml2ZXJzL3Njc2kvOiBqYXp6X2VzcC5jfgpkaWZm IC11ciAuL2xpbnV4Lm9yaWcvZHJpdmVycy9zY3NpL21hYzUzYzk0LmMgLi9saW51eC9kcml2ZXJz L3Njc2kvbWFjNTNjOTQuYwotLS0gLi9saW51eC5vcmlnL2RyaXZlcnMvc2NzaS9tYWM1M2M5NC5j CUZyaSBGZWIgIDkgMjI6MzA6MjMgMjAwMQorKysgLi9saW51eC9kcml2ZXJzL3Njc2kvbWFjNTNj OTQuYwlNb24gSmFuIDI4IDA2OjE4OjIwIDIwMDIKQEAgLTI5MiwxMCArMjkyLDExIEBACiBkb19t YWM1M2M5NF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAq cHRyZWdzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgm aW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7CisJc3RydWN0IFNjc2lfSG9zdCAqZGV2ID0gKChzdHJ1 Y3QgZnNjX3N0YXRlICopIGRldl9pZCktPmN1cnJlbnRfcmVxLT5ob3N0OworCQorCXNwaW5fbG9j a19pcnFzYXZlKCZkZXYtPmhvc3RfbG9jaywgZmxhZ3MpOwogCW1hYzUzYzk0X2ludGVycnVwdChp cnEsIGRldl9pZCwgcHRyZWdzKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb19yZXF1ZXN0 X2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXYtPmhvc3RfbG9jaywg ZmxhZ3MpOwogfQogCiBzdGF0aWMgdm9pZApPbmx5IGluIC4vbGludXgvZHJpdmVycy9zY3NpLzog bWFjNTNjOTQuY34KZGlmZiAtdXIgLi9saW51eC5vcmlnL2RyaXZlcnMvc2NzaS9tYWNfZXNwLmMg Li9saW51eC9kcml2ZXJzL3Njc2kvbWFjX2VzcC5jCi0tLSAuL2xpbnV4Lm9yaWcvZHJpdmVycy9z Y3NpL21hY19lc3AuYwlGcmkgT2N0IDI2IDAwOjUzOjUxIDIwMDEKKysrIC4vbGludXgvZHJpdmVy cy9zY3NpL21hY19lc3AuYwlNb24gSmFuIDI4IDA2OjI1OjU3IDIwMDIKQEAgLTQxNyw5ICs0MTcs OSBAQAogCiAJCQllc3AtPmlycSA9IElSUV9NQUNfU0NTSTsKIAotCQkJcmVxdWVzdF9pcnEoSVJR X01BQ19TQ1NJLCBlc3BfaW50ciwgMCwgIk1hYyBFU1AgU0NTSSIsIGVzcCk7CisJCQlyZXF1ZXN0 X2lycShJUlFfTUFDX1NDU0ksIGVzcF9pbnRyLCAwLCAiTWFjIEVTUCBTQ1NJIiwgZXNwLT5laG9z dCk7CiAjaWYgMAkvKiBjb25mbGljdHMgd2l0aCBJT1AgQURCICovCi0JCQlyZXF1ZXN0X2lycShJ UlFfTUFDX1NDU0lEUlEsIGZha2VfZHJxLCAwLCAiTWFjIEVTUCBEUlEiLCBlc3ApOworCQkJcmVx dWVzdF9pcnEoSVJRX01BQ19TQ1NJRFJRLCBmYWtlX2RycSwgMCwgIk1hYyBFU1AgRFJRIiwgZXNw LT5laG9zdCk7CiAjZW5kaWYKIAogCQkJaWYgKG1hY2ludG9zaF9jb25maWctPnNjc2lfdHlwZSA9 PSBNQUNfU0NTSV9RVUFEUkEpIHsKQEAgLTQzMyw3ICs0MzMsNyBAQAogCiAJCQllc3AtPmlycSA9 IElSUV9NQUNfU0NTSURSUTsKICNpZiAwCS8qIGNvbmZsaWN0cyB3aXRoIElPUCBBREIgKi8KLQkJ CXJlcXVlc3RfaXJxKElSUV9NQUNfU0NTSURSUSwgZXNwX2ludHIsIDAsICJNYWMgRVNQIFNDU0kg MiIsIGVzcCk7CisJCQlyZXF1ZXN0X2lycShJUlFfTUFDX1NDU0lEUlEsIGVzcF9pbnRyLCAwLCAi TWFjIEVTUCBTQ1NJIDIiLCBlc3AtPmVob3N0KTsKICNlbmRpZgogCiAJCQllc3AtPmNmcmVxID0g MjUwMDAwMDA7Ck9ubHkgaW4gLi9saW51eC9kcml2ZXJzL3Njc2kvOiBtYWNfZXNwLmN+CmRpZmYg LXVyIC4vbGludXgub3JpZy9kcml2ZXJzL3Njc2kvbWNhXzUzYzl4LmMgLi9saW51eC9kcml2ZXJz L3Njc2kvbWNhXzUzYzl4LmMKLS0tIC4vbGludXgub3JpZy9kcml2ZXJzL3Njc2kvbWNhXzUzYzl4 LmMJRnJpIE9jdCAyNiAwMDo1Mzo1MSAyMDAxCisrKyAuL2xpbnV4L2RyaXZlcnMvc2NzaS9tY2Ff NTNjOXguYwlNb24gSmFuIDI4IDA2OjI2OjMwIDIwMDIKQEAgLTE1Myw3ICsxNTMsNyBAQAogCQkJ ZXNwLT5zbG90ID0gc2xvdDsKIAogCQkJaWYgKHJlcXVlc3RfaXJxKGVzcC0+aXJxLCBlc3BfaW50 ciwgMCwKLQkJCSAiTkNSIDUzYzl4IFNDU0kiLCBlc3BfaW50cikpCisJCQkgIk5DUiA1M2M5eCBT Q1NJIiwgZXNwLT5laG9zdCkpCiAJCQl7CiAJCQkJcHJpbnRrKCJVbmFibGUgdG8gcmVxdWVzdCBJ UlEgJWQuXG4iLCBlc3AtPmlycSk7CiAJCQkJZXNwX2RlYWxsb2NhdGUoZXNwKTsKT25seSBpbiAu L2xpbnV4L2RyaXZlcnMvc2NzaS86IG1jYV81M2M5eC5jfgpkaWZmIC11ciAuL2xpbnV4Lm9yaWcv ZHJpdmVycy9zY3NpL21lZ2FyYWlkLmMgLi9saW51eC9kcml2ZXJzL3Njc2kvbWVnYXJhaWQuYwot LS0gLi9saW51eC5vcmlnL2RyaXZlcnMvc2NzaS9tZWdhcmFpZC5jCVRodSBEZWMgMjcgMTk6MTc6 NDMgMjAwMQorKysgLi9saW51eC9kcml2ZXJzL3Njc2kvbWVnYXJhaWQuYwlNb24gSmFuIDI4IDA1 OjU1OjU2IDIwMDIKQEAgLTYxNCw4ICs2MTQsOCBAQAogI2RlZmluZSBEUklWRVJfTE9DSyhwKQog I2RlZmluZSBEUklWRVJfVU5MT0NLKHApCiAjZGVmaW5lIElPX0xPQ0tfVCB1bnNpZ25lZCBsb25n IGlvX2ZsYWdzID0gMAotI2RlZmluZSBJT19MT0NLKGhvc3QpIHNwaW5fbG9ja19pcnFzYXZlKCZp b19yZXF1ZXN0X2xvY2ssaW9fZmxhZ3MpOwotI2RlZmluZSBJT19VTkxPQ0soaG9zdCkgc3Bpbl91 bmxvY2tfaXJxcmVzdG9yZSgmaW9fcmVxdWVzdF9sb2NrLGlvX2ZsYWdzKTsKKyNkZWZpbmUgSU9f TE9DSyhob3N0KSBzcGluX2xvY2tfaXJxc2F2ZSgmaG9zdC0+aG9zdF9sb2NrLGlvX2ZsYWdzKTsK KyNkZWZpbmUgSU9fVU5MT0NLKGhvc3QpIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhvc3QtPmhv c3RfbG9jayxpb19mbGFncyk7CiAKICNkZWZpbmUgcGNpX2ZyZWVfY29uc2lzdGVudChhLGIsYyxk KQogI2RlZmluZSBwY2lfdW5tYXBfc2luZ2xlKGEsYixjLGQpCk9ubHkgaW4gLi9saW51eC9kcml2 ZXJzL3Njc2kvOiBtZWdhcmFpZC5jfgpkaWZmIC11ciAuL2xpbnV4Lm9yaWcvZHJpdmVycy9zY3Np L21lc2guYyAuL2xpbnV4L2RyaXZlcnMvc2NzaS9tZXNoLmMKLS0tIC4vbGludXgub3JpZy9kcml2 ZXJzL3Njc2kvbWVzaC5jCVdlZCBTZXAgMTkgMDE6MjM6MTQgMjAwMQorKysgLi9saW51eC9kcml2 ZXJzL3Njc2kvbWVzaC5jCU1vbiBKYW4gMjggMDY6MTk6MjUgMjAwMgpAQCAtNzk1LDE1ICs3OTUs MTUgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZm9yICg7OykgewotCQlzcGluX2xvY2tf aXJxc2F2ZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZt cy0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAJCWNtZCA9IG1zLT5jb21wbGV0ZWRfcTsKIAkJ aWYgKGNtZCA9PSBOVUxMKSB7Ci0JCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb19yZXF1ZXN0 X2xvY2ssIGZsYWdzKTsKKwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJm1zLT5ob3N0LT5ob3N0 X2xvY2ssIGZsYWdzKTsKIAkJCWJyZWFrOwogCQl9CiAJCW1zLT5jb21wbGV0ZWRfcSA9IChTY3Np X0NtbmQgKikgY21kLT5ob3N0X3NjcmliYmxlOwogCQkoKmNtZC0+c2NzaV9kb25lKShjbWQpOwot CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb19yZXF1ZXN0X2xvY2ssIGZsYWdzKTsKKwkJc3Bp bl91bmxvY2tfaXJxcmVzdG9yZSgmbXMtPmhvc3QtPmhvc3RfbG9jaywgZmxhZ3MpOwogCX0KIH0K ICNlbmRpZiAvKiBNRVNIX05FV19TVFlMRV9FSCAqLwpAQCAtMTQ1OCwxMCArMTQ1OCwxMSBAQAog ZG9fbWVzaF9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAq cHRyZWdzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgm aW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7CisJc3RydWN0IFNjc2lfSG9zdCAqZGV2ID0gKChzdHJ1 Y3QgbWVjaF9zdGF0ZSAqKWRldl9pZCktPmhvc3Q7CisJCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRl di0+aG9zdF9sb2NrLCBmbGFncyk7CiAJbWVzaF9pbnRlcnJ1cHQoaXJxLCBkZXZfaWQsIHB0cmVn cyk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7CisJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ob3N0X2xvY2ssIGZsYWdzKTsKIH0KIAogc3Rh dGljIHZvaWQgaGFuZGxlX2Vycm9yKHN0cnVjdCBtZXNoX3N0YXRlICptcykKT25seSBpbiAuL2xp bnV4L2RyaXZlcnMvc2NzaS86IG1lc2guY34KZGlmZiAtdXIgLi9saW51eC5vcmlnL2RyaXZlcnMv c2NzaS9va3RhZ29uX2VzcC5jIC4vbGludXgvZHJpdmVycy9zY3NpL29rdGFnb25fZXNwLmMKLS0t IC4vbGludXgub3JpZy9kcml2ZXJzL3Njc2kvb2t0YWdvbl9lc3AuYwlGcmkgT2N0IDI2IDAwOjUz OjUxIDIwMDEKKysrIC4vbGludXgvZHJpdmVycy9zY3NpL29rdGFnb25fZXNwLmMJTW9uIEphbiAy OCAwNjoyNTowOSAyMDAyCkBAIC0xOTgsNyArMTk4LDcgQEAKIAogCQllc3AtPmlycSA9IElSUV9B TUlHQV9QT1JUUzsKIAkJcmVxdWVzdF9pcnEoSVJRX0FNSUdBX1BPUlRTLCBlc3BfaW50ciwgU0Ff U0hJUlEsCi0JCQkgICAgIkJTQyBPa3RhZ29uIFNDU0kiLCBlc3BfaW50cik7CisJCQkgICAgIkJT QyBPa3RhZ29uIFNDU0kiLCBlc3AtPmVob3N0KTsKIAogCQkvKiBGaWd1cmUgb3V0IG91ciBzY3Np IElEIG9uIHRoZSBidXMgKi8KIAkJZXNwLT5zY3NpX2lkID0gNzsKT25seSBpbiAuL2xpbnV4L2Ry aXZlcnMvc2NzaS86IG9rdGFnb25fZXNwLmN+CmRpZmYgLXVyIC4vbGludXgub3JpZy9kcml2ZXJz L3Njc2kvcGFzMTYuYyAuL2xpbnV4L2RyaXZlcnMvc2NzaS9wYXMxNi5jCi0tLSAuL2xpbnV4Lm9y aWcvZHJpdmVycy9zY3NpL3BhczE2LmMJU3VuIFNlcCAzMCAyMzoyNjowNyAyMDAxCisrKyAuL2xp bnV4L2RyaXZlcnMvc2NzaS9wYXMxNi5jCU1vbiBKYW4gMjggMDU6Mjc6MzQgMjAwMgpAQCAtNDUx LDcgKzQ1MSw3IEBACiAJICAgIGluc3RhbmNlLT5pcnEgPSBOQ1I1MzgwX3Byb2JlX2lycShpbnN0 YW5jZSwgUEFTMTZfSVJRUyk7CiAKIAlpZiAoaW5zdGFuY2UtPmlycSAhPSBJUlFfTk9ORSkgCi0J ICAgIGlmIChyZXF1ZXN0X2lycShpbnN0YW5jZS0+aXJxLCBkb19wYXMxNl9pbnRyLCBTQV9JTlRF UlJVUFQsICJwYXMxNiIsIE5VTEwpKSB7CisJICAgIGlmIChyZXF1ZXN0X2lycShpbnN0YW5jZS0+ aXJxLCBkb19wYXMxNl9pbnRyLCBTQV9JTlRFUlJVUFQsICJwYXMxNiIsIGluc3RhbmNlKSkgewog CQlwcmludGsoInNjc2klZCA6IElSUSVkIG5vdCBmcmVlLCBpbnRlcnJ1cHRzIGRpc2FibGVkXG4i LCAKIAkJICAgIGluc3RhbmNlLT5ob3N0X25vLCBpbnN0YW5jZS0+aXJxKTsKIAkJaW5zdGFuY2Ut PmlycSA9IElSUV9OT05FOwpPbmx5IGluIC4vbGludXgvZHJpdmVycy9zY3NpLzogcGFzMTYuY34K T25seSBpbiAuL2xpbnV4L2RyaXZlcnMvc2NzaS9wY21jaWE6IC5kZXBlbmQKZGlmZiAtdXIgLi9s aW51eC5vcmlnL2RyaXZlcnMvc2NzaS9wcGEuYyAuL2xpbnV4L2RyaXZlcnMvc2NzaS9wcGEuYwot LS0gLi9saW51eC5vcmlnL2RyaXZlcnMvc2NzaS9wcGEuYwlTdW4gU2VwIDMwIDIzOjI2OjA3IDIw MDEKKysrIC4vbGludXgvZHJpdmVycy9zY3NpL3BwYS5jCU1vbiBKYW4gMjggMDU6NDk6NDIgMjAw MgpAQCAtMTE5LDcgKzExOSw2IEBACiAgICAgICogdW5sb2NrIHRvIGFsbG93IHRoZSBsb3dsZXZl bCBwYXJwb3J0IGRyaXZlciB0byBwcm9iZQogICAgICAqIHRoZSBpcnFzCiAgICAgICovCi0gICAg c3Bpbl91bmxvY2tfaXJxKCZpb19yZXF1ZXN0X2xvY2spOwogICAgIHBiID0gcGFycG9ydF9lbnVt ZXJhdGUoKTsKIAogICAgIHByaW50aygicHBhOiBWZXJzaW9uICVzXG4iLCBQUEFfVkVSU0lPTik7 CkBAIC0xMjgsNyArMTI3LDYgQEAKIAogICAgIGlmICghcGIpIHsKIAlwcmludGsoInBwYTogcGFy cG9ydCByZXBvcnRzIG5vIGRldmljZXMuXG4iKTsKLQlzcGluX2xvY2tfaXJxKCZpb19yZXF1ZXN0 X2xvY2spOwogCXJldHVybiAwOwogICAgIH0KICAgcmV0cnlfZW50cnk6CkBAIC0xNTQsNyArMTUy LDcgQEAKIAkJICAgICAgInBhcmRldmljZSBpcyBvd25pbmcgdGhlIHBvcnQgZm9yIHRvbyBsb25n dGltZSFcbiIsCiAJCQkgICBpKTsKIAkJICAgIHBhcnBvcnRfdW5yZWdpc3Rlcl9kZXZpY2UocHBh X2hvc3RzW2ldLmRldik7Ci0JCSAgICBzcGluX2xvY2tfaXJxKCZpb19yZXF1ZXN0X2xvY2spOwor CQkgICAgc3Bpbl9sb2NrX2lycSgmcHBhX2hvc3RzW2ldLmN1cl9jbWQtPmhvc3QtPmhvc3RfbG9j ayk7CiAJCSAgICByZXR1cm4gMDsKIAkJfQogCSAgICB9CkBAIC0yMjMsMTMgKzIyMSwxMyBAQAog CSAgICBwcmludGsoIiAgc3VwcG9ydGVkIGJ5IHRoZSBpbW0gKFpJUCBQbHVzKSBkcml2ZXIuIElm IHRoZVxuIik7CiAJICAgIHByaW50aygiICBjYWJsZSBpcyBtYXJrZWQgd2l0aCBcIkF1dG9EZXRl Y3RcIiwgdGhpcyBpcyB3aGF0IGhhc1xuIik7CiAJICAgIHByaW50aygiICBoYXBwZW5lZC5cbiIp OwotCSAgICBzcGluX2xvY2tfaXJxKCZpb19yZXF1ZXN0X2xvY2spOworCSAgICBzcGluX2xvY2tf aXJxKCZocmVnLT5ob3N0X2xvY2spOwogCSAgICByZXR1cm4gMDsKIAl9CiAJdHJ5X2FnYWluID0g MTsKIAlnb3RvIHJldHJ5X2VudHJ5OwogICAgIH0gZWxzZSB7Ci0Jc3Bpbl9sb2NrX2lycSgmaW9f cmVxdWVzdF9sb2NrKTsKKwlzcGluX2xvY2tfaXJxKCZocmVnLT5ob3N0X2xvY2spOwogCXJldHVy biAxOwkJLyogcmV0dXJuIG51bWJlciBvZiBob3N0cyBkZXRlY3RlZCAqLwogICAgIH0KIH0KQEAg LTg0Nyw5ICs4NDUsOSBAQAogCiAgICAgdG1wLT5jdXJfY21kID0gMDsKICAgICAKLSAgICBzcGlu X2xvY2tfaXJxc2F2ZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7CisgICAgc3Bpbl9sb2NrX2ly cXNhdmUoJmNtZC0+aG9zdC0+aG9zdF9sb2NrLCBmbGFncyk7CiAgICAgY21kLT5zY3NpX2RvbmUo Y21kKTsKLSAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb19yZXF1ZXN0X2xvY2ssIGZsYWdz KTsKKyAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjbWQtPmhvc3QtPmhvc3RfbG9jaywgZmxh Z3MpOwogICAgIHJldHVybjsKIH0KIApPbmx5IGluIC4vbGludXgvZHJpdmVycy9zY3NpLzogcHBh LmN+CmRpZmYgLXVyIC4vbGludXgub3JpZy9kcml2ZXJzL3Njc2kvcHNpMjQwaS5jIC4vbGludXgv ZHJpdmVycy9zY3NpL3BzaTI0MGkuYwotLS0gLi9saW51eC5vcmlnL2RyaXZlcnMvc2NzaS9wc2ky NDBpLmMJU3VuIFNlcCAzMCAyMzoyNjowNyAyMDAxCisrKyAuL2xpbnV4L2RyaXZlcnMvc2NzaS9w c2kyNDBpLmMJTW9uIEphbiAyOCAwNjoxMjo0NyAyMDAyCkBAIC0zNzAsMTAgKzM3MCwxMSBAQAog c3RhdGljIHZvaWQgZG9fSXJxX0hhbmRsZXIgKGludCBpcnEsIHZvaWQgKmRldl9pZCwgc3RydWN0 IHB0X3JlZ3MgKnJlZ3MpCiAJewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tf aXJxc2F2ZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7CisJc3RydWN0IFNjc2lfSG9zdCAqZGV2 ID0gZGV2X2lkOworCQorCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmhvc3RfbG9jaywgZmxhZ3Mp OwogCUlycV9IYW5kbGVyKGlycSwgZGV2X2lkLCByZWdzKTsKLQlzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZpb19yZXF1ZXN0X2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZk ZXYtPmhvc3RfbG9jaywgZmxhZ3MpOwogCX0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKglOYW1lOglQc2kyNDBpX1F1 ZXVlQ29tbWFuZApAQCAtNjAyLDcgKzYwMyw3IEBACiAKIAkJc2F2ZV9mbGFncyAoZmxhZ3MpOwog CQljbGkgKCk7Ci0JCWlmICggcmVxdWVzdF9pcnEgKGNoaXBDb25maWcuaXJxLCBkb19JcnFfSGFu ZGxlciwgMCwgInBzaTI0MGkiLCBOVUxMKSApCisJCWlmICggcmVxdWVzdF9pcnEgKGNoaXBDb25m aWcuaXJxLCBkb19JcnFfSGFuZGxlciwgMCwgInBzaTI0MGkiLCBwc2hvc3QpICkKIAkJCXsKIAkJ CXByaW50ayAoIlVuYWJsZSB0byBhbGxvY2F0ZSBJUlEgZm9yIFBTSS0yNDBJIGNvbnRyb2xsZXIu XG4iKTsKIAkJCXJlc3RvcmVfZmxhZ3MgKGZsYWdzKTsKT25seSBpbiAuL2xpbnV4L2RyaXZlcnMv c2NzaS86IHBzaTI0MGkuY34KZGlmZiAtdXIgLi9saW51eC5vcmlnL2RyaXZlcnMvc2NzaS9xbGEx MjgwLmMgLi9saW51eC9kcml2ZXJzL3Njc2kvcWxhMTI4MC5jCi0tLSAuL2xpbnV4Lm9yaWcvZHJp dmVycy9zY3NpL3FsYTEyODAuYwlTdW4gRGVjIDMwIDIxOjMxOjUxIDIwMDEKKysrIC4vbGludXgv ZHJpdmVycy9zY3NpL3FsYTEyODAuYwlNb24gSmFuIDI4IDA2OjQxOjAyIDIwMDIKQEAgLTE1MjMs MTEgKzE1MjMsMTEgQEAKICAgICAgICAgcmV0dXJuOwogICAgIH0KICNpZiBMSU5VWF9WRVJTSU9O X0NPREUgPj0gS0VSTkVMX1ZFUlNJT04oMiwxLDk1KQotICAgIHNwaW5fbG9ja19pcnFzYXZlKCZp b19yZXF1ZXN0X2xvY2ssIGNwdV9mbGFncyk7CisgICAgc3Bpbl9sb2NrX2lycXNhdmUoJmhhLT5o b3N0LT5ob3N0X2xvY2ssIGNwdV9mbGFncyk7CiAgICAgaWYodGVzdF9hbmRfc2V0X2JpdChRTEEx MjgwX0lOX0lTUl9CSVQsICZoYS0+ZmxhZ3MpKQogICAgIHsKICAgICAgICAgQ09NVFJBQ0UoJ1gn KQotICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb19yZXF1ZXN0X2xvY2ssIGNwdV9m bGFncyk7CisgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmhhLT5ob3N0LT5ob3N0X2xv Y2ssIGNwdV9mbGFncyk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaGEtPmlzcl9jb3Vu dCsrOwpAQCAtMTU0OCw3ICsxNTQ4LDcgQEAKICAgICAgICAgcWxhMTI4MF9kb25lKGhhLCAoc3Ji X3QgKiopJmhhLT5kb25lX3FfZmlyc3QsIChzcmJfdCAqKikmaGEtPmRvbmVfcV9sYXN0KTsKIAog ICAgIGNsZWFyX2JpdChRTEExMjgwX0lOX0lTUl9CSVQsICZoYS0+ZmxhZ3MpOwotICAgIHNwaW5f dW5sb2NrX2lycXJlc3RvcmUoJmlvX3JlcXVlc3RfbG9jaywgY3B1X2ZsYWdzKTsKKyAgICBzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZoYS0+aG9zdC0+aG9zdF9sb2NrLCBjcHVfZmxhZ3MpOwogI2Vs c2UgIC8qIExJTlVYX1ZFUlNJT05fQ09ERSA8IEtFUk5FTF9WRVJTSU9OKDIsMSw5NSkgKi8KIAog ICAgIGlmKCB0ZXN0X2JpdChRTEExMjgwX0lOX0lTUl9CSVQsIChpbnQgKikmaGEtPmZsYWdzKSAp CkBAIC0xNjE5LDcgKzE2MTksNyBAQAogCiAgICAgQ09NVFJBQ0UoJ3AnKSAgCiAjaWYgTElOVVhf VkVSU0lPTl9DT0RFID4gS0VSTkVMX1ZFUlNJT04oMiwxLDk1KQotICAgIHNwaW5fbG9ja19pcnFz YXZlKCZpb19yZXF1ZXN0X2xvY2ssIGNwdV9mbGFncyk7CisgICAgc3Bpbl9sb2NrX2lycXNhdmUo JmhhLT5ob3N0LT5ob3N0X2xvY2ssIGNwdV9mbGFncyk7CiAjZW5kaWYKICAgICBpZiAoaGEtPmZs YWdzLmlzcF9hYm9ydF9uZWVkZWQpCiAgICAgICAgIHFsYTEyODBfYWJvcnRfaXNwKGhhKTsKQEAg LTE2MzEsNyArMTYzMSw3IEBACiAgICAgICAgIHFsYTEyODBfZG9uZShoYSwgKHNyYl90ICoqKSZo YS0+ZG9uZV9xX2ZpcnN0LCAoc3JiX3QgKiopJmhhLT5kb25lX3FfbGFzdCk7CiAgICAgaGEtPmZs YWdzLmRwY19zY2hlZCA9IEZBTFNFOwogI2lmIExJTlVYX1ZFUlNJT05fQ09ERSA+IEtFUk5FTF9W RVJTSU9OKDIsMSw5NSkKLSAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb19yZXF1ZXN0X2xv Y2ssIGNwdV9mbGFncyk7CisgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGEtPmhvc3QtPmhv c3RfbG9jaywgY3B1X2ZsYWdzKTsKICNlbmRpZgogfQogCk9ubHkgaW4gLi9saW51eC9kcml2ZXJz L3Njc2kvOiBxbGExMjgwLmN+CmRpZmYgLXVyIC4vbGludXgub3JpZy9kcml2ZXJzL3Njc2kvc2Vh Z2F0ZS5jIC4vbGludXgvZHJpdmVycy9zY3NpL3NlYWdhdGUuYwotLS0gLi9saW51eC5vcmlnL2Ry aXZlcnMvc2NzaS9zZWFnYXRlLmMJU3VuIFNlcCAzMCAyMzoyNjowNyAyMDAxCisrKyAuL2xpbnV4 L2RyaXZlcnMvc2NzaS9zZWFnYXRlLmMJTW9uIEphbiAyOCAwNjowMDo0NyAyMDAyCkBAIC01MDMs NyArNTAzLDcgQEAKIAlob3N0bm8gPSBpbnN0YW5jZS0+aG9zdF9ubzsKIAlpZiAocmVxdWVzdF9p cnEgKGlycSwgZG9fc2VhZ2F0ZV9yZWNvbm5lY3RfaW50ciwgU0FfSU5URVJSVVBULAogCQkJIChj b250cm9sbGVyX3R5cGUgPT0gU0VBR0FURSkgPyAic2VhZ2F0ZSIgOiAidG1jLTh4eCIsCi0JCQkg TlVMTCkpIHsKKwkJCSBpbnN0YW5jZSkpIHsKIAkJcHJpbnRrICgic2NzaSVkIDogdW5hYmxlIHRv IGFsbG9jYXRlIElSUSVkXG4iLCBob3N0bm8sIGlycSk7CiAJCXJldHVybiAwOwogCX0KQEAgLTYy OSwxMCArNjI5LDExIEBACiBzdGF0aWMgdm9pZCBkb19zZWFnYXRlX3JlY29ubmVjdF9pbnRyIChp bnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKQogewogCXVuc2lnbmVk IGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSAoJmlvX3JlcXVlc3RfbG9jaywgZmxh Z3MpOworCXN0cnVjdCBTY3NpX0hvc3QgKmRldiA9IGRldl9pZDsKKwkKKwlzcGluX2xvY2tfaXJx c2F2ZSAoJmRldi0+aG9zdF9sb2NrLCBmbGFncyk7CiAJc2VhZ2F0ZV9yZWNvbm5lY3RfaW50ciAo aXJxLCBkZXZfaWQsIHJlZ3MpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZpb19yZXF1ZXN0 X2xvY2ssIGZsYWdzKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZGV2LT5ob3N0X2xvY2ss IGZsYWdzKTsKIH0KIAogc3RhdGljIHZvaWQgc2VhZ2F0ZV9yZWNvbm5lY3RfaW50ciAoaW50IGly cSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKT25seSBpbiAuL2xpbnV4L2Ry aXZlcnMvc2NzaS86IHNlYWdhdGUuY34KZGlmZiAtdXIgLi9saW51eC5vcmlnL2RyaXZlcnMvc2Nz aS9zZ2l3ZDkzLmMgLi9saW51eC9kcml2ZXJzL3Njc2kvc2dpd2Q5My5jCi0tLSAuL2xpbnV4Lm9y aWcvZHJpdmVycy9zY3NpL3NnaXdkOTMuYwlTdW4gU2VwICA5IDIxOjUyOjM1IDIwMDEKKysrIC4v bGludXgvZHJpdmVycy9zY3NpL3NnaXdkOTMuYwlNb24gSmFuIDI4IDA2OjMxOjUyIDIwMDIKQEAg LTY2LDEwICs2NiwxMSBAQAogc3RhdGljIHZvaWQgc2dpd2Q5M19pbnRyKGludCBpcnEsIHZvaWQg KmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsK LQotCXNwaW5fbG9ja19pcnFzYXZlKCZpb19yZXF1ZXN0X2xvY2ssIGZsYWdzKTsKKwlzdHJ1Y3Qg U2NzaV9Ib3N0ICpkZXYgPSBkZXZfaWQ7CisJCisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+aG9z dF9sb2NrLCBmbGFncyk7CiAJd2QzM2M5M19pbnRyKChzdHJ1Y3QgU2NzaV9Ib3N0ICopIGRldl9p ZCk7Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7CisJ c3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ob3N0X2xvY2ssIGZsYWdzKTsKIH0KIAogI3Vu ZGVmIERFQlVHX0RNQQpPbmx5IGluIC4vbGludXgvZHJpdmVycy9zY3NpLzogc2dpd2Q5My5jfgpk aWZmIC11ciAuL2xpbnV4Lm9yaWcvZHJpdmVycy9zY3NpL3N1bjN4X2VzcC5jIC4vbGludXgvZHJp dmVycy9zY3NpL3N1bjN4X2VzcC5jCi0tLSAuL2xpbnV4Lm9yaWcvZHJpdmVycy9zY3NpL3N1bjN4 X2VzcC5jCUZyaSBPY3QgMjYgMDA6NTM6NTEgMjAwMQorKysgLi9saW51eC9kcml2ZXJzL3Njc2kv c3VuM3hfZXNwLmMJTW9uIEphbiAyOCAwNjoyMzo0MCAyMDAyCkBAIC0xMTIsNyArMTEyLDcgQEAK IAogCWVzcC0+aXJxID0gMjsKIAlpZiAocmVxdWVzdF9pcnEoZXNwLT5pcnEsIGVzcF9pbnRyLCBT QV9JTlRFUlJVUFQsIAotCQkJIlNVTjNYIFNDU0kiLCBOVUxMKSkgeworCQkJIlNVTjNYIFNDU0ki LCBlc3AtPmVob3N0KSkgewogCQllc3BfZGVhbGxvY2F0ZShlc3ApOwogCQlyZXR1cm4gMDsKIAl9 Ck9ubHkgaW4gLi9saW51eC9kcml2ZXJzL3Njc2kvOiBzdW4zeF9lc3AuY34KZGlmZiAtdXIgLi9s aW51eC5vcmlnL2RyaXZlcnMvc2NzaS9zeW01M2M0MTYuYyAuL2xpbnV4L2RyaXZlcnMvc2NzaS9z eW01M2M0MTYuYwotLS0gLi9saW51eC5vcmlnL2RyaXZlcnMvc2NzaS9zeW01M2M0MTYuYwlTdW4g U2VwIDMwIDIzOjI2OjA3IDIwMDEKKysrIC4vbGludXgvZHJpdmVycy9zY3NpL3N5bTUzYzQxNi5j CU1vbiBKYW4gMjggMDQ6MjY6NDggMjAwMgpAQCAtMzM3LDYgKzMzNyw3IEBACiAKIHN0YXRpYyB2 b2lkIHN5bTUzYzQxNl9pbnRyX2hhbmRsZShpbnQgaXJxLCB2b2lkICpkZXZfaWQsIHN0cnVjdCBw dF9yZWdzICpyZWdzKQogeworCXN0cnVjdCBTY3NpX0hvc3QgKmRldiA9IGRldl9pZDsKIAlpbnQg YmFzZSA9IDA7CiAJaW50IGk7CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IDA7CkBAIC0zNTksMTEg KzM2MCwxMSBAQAogCX0KIAkvKiBOb3cgd2UgaGF2ZSB0aGUgYmFzZSBhZGRyZXNzIGFuZCB3ZSBj YW4gc3RhcnQgaGFuZGxpbmcgdGhlIGludGVycnVwdCAqLwogCi0Jc3Bpbl9sb2NrX2lycXNhdmUo JmlvX3JlcXVlc3RfbG9jayxmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+aG9zdF9s b2NrLGZsYWdzKTsKIAlzdGF0dXNfcmVnID0gaW5iKGJhc2UgKyBTVEFUVVNfUkVHKTsKIAlwaW9f aW50X3JlZyA9IGluYihiYXNlICsgUElPX0lOVF9SRUcpOwogCWludF9yZWcgPSBpbmIoYmFzZSAr IElOVF9SRUcpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvX3JlcXVlc3RfbG9jaywgZmxh Z3MpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+aG9zdF9sb2NrLCBmbGFncyk7CiAK IAkvKiBGaXJzdCwgd2UgaGFuZGxlIGVycm9yIGNvbmRpdGlvbnMgKi8KIAlpZihpbnRfcmVnICYg U0NJKSAgICAgICAgIC8qIFNDU0kgUmVzZXQgKi8KQEAgLTM3MSw5ICszNzIsOSBAQAogCQlwcmlu dGsoS0VSTl9ERUJVRyAic3ltNTNjNDE2OiBSZXNldCByZWNlaXZlZFxuIik7CiAJCWN1cnJlbnRf Y29tbWFuZC0+U0NwLnBoYXNlID0gaWRsZTsKIAkJY3VycmVudF9jb21tYW5kLT5yZXN1bHQgPSBE SURfUkVTRVQgPDwgMTY7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZpb19yZXF1ZXN0X2xvY2ssIGZs YWdzKTsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmRldi0+aG9zdF9sb2NrLCBmbGFncyk7CiAJCWN1 cnJlbnRfY29tbWFuZC0+c2NzaV9kb25lKGN1cnJlbnRfY29tbWFuZCk7Ci0JCXNwaW5fdW5sb2Nr X2lycXJlc3RvcmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3MpOworCQlzcGluX3VubG9ja19pcnFy ZXN0b3JlKCZkZXYtPmhvc3RfbG9jaywgZmxhZ3MpOwogCQlyZXR1cm47CiAJfQogCWlmKGludF9y ZWcgJiBJTENNRCkgICAgICAgLyogSWxsZWdhbCBDb21tYW5kICovCkBAIC0zODEsOSArMzgyLDkg QEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAic3ltNTNjNDE2OiBJbGxlZ2FsIENvbW1hbmQ6IDB4 JTAyeC5cbiIsIGluYihiYXNlICsgQ09NTUFORF9SRUcpKTsKIAkJY3VycmVudF9jb21tYW5kLT5T Q3AucGhhc2UgPSBpZGxlOwogCQljdXJyZW50X2NvbW1hbmQtPnJlc3VsdCA9IERJRF9FUlJPUiA8 PCAxNjsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3MpOworCQlz cGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAkJY3VycmVudF9jb21t YW5kLT5zY3NpX2RvbmUoY3VycmVudF9jb21tYW5kKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9y ZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRl di0+aG9zdF9sb2NrLCBmbGFncyk7CiAJCXJldHVybjsKIAl9CiAJaWYoc3RhdHVzX3JlZyAmIEdF KSAgICAgICAgIC8qIEdyb3NzIEVycm9yICovCkBAIC0zOTEsOSArMzkyLDkgQEAKIAkJcHJpbnRr KEtFUk5fV0FSTklORyAic3ltNTNjNDE2OiBDb250cm9sbGVyIHJlcG9ydHMgZ3Jvc3MgZXJyb3Iu XG4iKTsKIAkJY3VycmVudF9jb21tYW5kLT5TQ3AucGhhc2UgPSBpZGxlOwogCQljdXJyZW50X2Nv bW1hbmQtPnJlc3VsdCA9IERJRF9FUlJPUiA8PCAxNjsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlv X3JlcXVlc3RfbG9jaywgZmxhZ3MpOworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5ob3N0X2xv Y2ssIGZsYWdzKTsKIAkJY3VycmVudF9jb21tYW5kLT5zY3NpX2RvbmUoY3VycmVudF9jb21tYW5k KTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7CisJ CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+aG9zdF9sb2NrLCBmbGFncyk7CiAJCXJldHVy bjsKIAl9CiAJaWYoc3RhdHVzX3JlZyAmIFBFKSAgICAgICAgIC8qIFBhcml0eSBFcnJvciAqLwpA QCAtNDAxLDkgKzQwMiw5IEBACiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInN5bTUzYzQxNjpTQ1NJ IHBhcml0eSBlcnJvci5cbiIpOwogCQljdXJyZW50X2NvbW1hbmQtPlNDcC5waGFzZSA9IGlkbGU7 CiAJCWN1cnJlbnRfY29tbWFuZC0+cmVzdWx0ID0gRElEX1BBUklUWSA8PCAxNjsKLQkJc3Bpbl9s b2NrX2lycXNhdmUoJmlvX3JlcXVlc3RfbG9jaywgZmxhZ3MpOworCQlzcGluX2xvY2tfaXJxc2F2 ZSgmZGV2LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAkJY3VycmVudF9jb21tYW5kLT5zY3NpX2RvbmUo Y3VycmVudF9jb21tYW5kKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9fcmVxdWVzdF9s b2NrLCBmbGFncyk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+aG9zdF9sb2NrLCBm bGFncyk7CiAJCXJldHVybjsKIAl9CiAJaWYocGlvX2ludF9yZWcgJiAoQ0UgfCBPVUUpKQpAQCAt NDExLDkgKzQxMiw5IEBACiAJCXByaW50ayhLRVJOX1dBUk5JTkcgInN5bTUzYzQxNjogUElPIGlu dGVycnVwdCBlcnJvci5cbiIpOwogCQljdXJyZW50X2NvbW1hbmQtPlNDcC5waGFzZSA9IGlkbGU7 CiAJCWN1cnJlbnRfY29tbWFuZC0+cmVzdWx0ID0gRElEX0VSUk9SIDw8IDE2OwotCQlzcGluX2xv Y2tfaXJxc2F2ZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZl KCZkZXYtPmhvc3RfbG9jaywgZmxhZ3MpOwogCQljdXJyZW50X2NvbW1hbmQtPnNjc2lfZG9uZShj dXJyZW50X2NvbW1hbmQpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb19yZXF1ZXN0X2xv Y2ssIGZsYWdzKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ob3N0X2xvY2ssIGZs YWdzKTsKIAkJcmV0dXJuOwogCX0KIAlpZihpbnRfcmVnICYgRElTKSAgICAgICAgICAgLyogRGlz Y29ubmVjdCAqLwpAQCAtNDIzLDkgKzQyNCw5IEBACiAJCWVsc2UKIAkJCWN1cnJlbnRfY29tbWFu ZC0+cmVzdWx0ID0gKGN1cnJlbnRfY29tbWFuZC0+U0NwLlN0YXR1cyAmIDB4RkYpIHwgKChjdXJy ZW50X2NvbW1hbmQtPlNDcC5NZXNzYWdlICYgMHhGRikgPDwgOCkgfCAoRElEX09LIDw8IDE2KTsK IAkJY3VycmVudF9jb21tYW5kLT5TQ3AucGhhc2UgPSBpZGxlOwotCQlzcGluX2xvY2tfaXJxc2F2 ZSgmaW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmhv c3RfbG9jaywgZmxhZ3MpOwogCQljdXJyZW50X2NvbW1hbmQtPnNjc2lfZG9uZShjdXJyZW50X2Nv bW1hbmQpOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb19yZXF1ZXN0X2xvY2ssIGZsYWdz KTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5ob3N0X2xvY2ssIGZsYWdzKTsKIAkJ cmV0dXJuOwogCX0KIAkvKiBOb3cgd2UgaGFuZGxlIFNDU0kgcGhhc2VzICAgICAgICAgKi8KQEAg LTcxOSw3ICs3MjAsNyBAQAogCQkJCWNsaSgpOwogCQkJCS8qIEZJWE1FOiBSZXF1ZXN0X2lycSB3 aXRoIENMSSBpcyBub3Qgc2FmZSAqLwogCQkJCS8qIFJlcXVlc3QgZm9yIHNwZWNpZmllZCBJUlEg Ki8KLQkJCQlpZihyZXF1ZXN0X2lycShob3N0c1tpXS5pcnEsIHN5bTUzYzQxNl9pbnRyX2hhbmRs ZSwgMCwgSUQsIE5VTEwpKQorCQkJCWlmKHJlcXVlc3RfaXJxKGhvc3RzW2ldLmlycSwgc3ltNTNj NDE2X2ludHJfaGFuZGxlLCAwLCBJRCwgc2hwbnQpKQogCQkJCXsKIAkJCQkJcmVzdG9yZV9mbGFn cyhmbGFncyk7CiAJCQkJCXByaW50ayhLRVJOX0VSUiAic3ltNTNjNDE2OiBVbmFibGUgdG8gYXNz aWduIElSUSAlZFxuIiwgaG9zdHNbaV0uaXJxKTsKT25seSBpbiAuL2xpbnV4L2RyaXZlcnMvc2Nz aS86IHN5bTUzYzQxNi5jfgpPbmx5IGluIC4vbGludXgvZHJpdmVycy9zY3NpL3N5bTUzYzh4eF8y OiAuZGVwZW5kCmRpZmYgLXVyIC4vbGludXgub3JpZy9kcml2ZXJzL3Njc2kvdDEyOC5jIC4vbGlu dXgvZHJpdmVycy9zY3NpL3QxMjguYwotLS0gLi9saW51eC5vcmlnL2RyaXZlcnMvc2NzaS90MTI4 LmMJU3VuIFNlcCAzMCAyMzoyNjowOCAyMDAxCisrKyAuL2xpbnV4L2RyaXZlcnMvc2NzaS90MTI4 LmMJTW9uIEphbiAyOCAwNToyODoxMCAyMDAyCkBAIC0yNDgsNyArMjQ4LDcgQEAKIAkgICAgaW5z dGFuY2UtPmlycSA9IE5DUjUzODBfcHJvYmVfaXJxKGluc3RhbmNlLCBUMTI4X0lSUVMpOwogCiAJ aWYgKGluc3RhbmNlLT5pcnEgIT0gSVJRX05PTkUpIAotCSAgICBpZiAocmVxdWVzdF9pcnEoaW5z dGFuY2UtPmlycSwgZG9fdDEyOF9pbnRyLCBTQV9JTlRFUlJVUFQsICJ0MTI4IiwgTlVMTCkpIHsK KwkgICAgaWYgKHJlcXVlc3RfaXJxKGluc3RhbmNlLT5pcnEsIGRvX3QxMjhfaW50ciwgU0FfSU5U RVJSVVBULCAidDEyOCIsIGluc3RhbmNlKSkgewogCQlwcmludGsoInNjc2klZCA6IElSUSVkIG5v dCBmcmVlLCBpbnRlcnJ1cHRzIGRpc2FibGVkXG4iLCAKIAkJICAgIGluc3RhbmNlLT5ob3N0X25v LCBpbnN0YW5jZS0+aXJxKTsKIAkJaW5zdGFuY2UtPmlycSA9IElSUV9OT05FOwpPbmx5IGluIC4v bGludXgvZHJpdmVycy9zY3NpLzogdDEyOC5jfgpkaWZmIC11ciAuL2xpbnV4Lm9yaWcvZHJpdmVy cy9zY3NpL3Rtc2NzaW0uYyAuL2xpbnV4L2RyaXZlcnMvc2NzaS90bXNjc2ltLmMKLS0tIC4vbGlu dXgub3JpZy9kcml2ZXJzL3Njc2kvdG1zY3NpbS5jCVRodSBEZWMgMjcgMTk6MTc6NDMgMjAwMQor KysgLi9saW51eC9kcml2ZXJzL3Njc2kvdG1zY3NpbS5jCU1vbiBKYW4gMjggMDY6MDk6MDcgMjAw MgpAQCAtMzA0LDggKzMwNCw4IEBACiAjICBkZWZpbmUgREMzOTBfSUZMQUdTIHVuc2lnbmVkIGxv bmcgaWZsYWdzOwogIyAgZGVmaW5lIERDMzkwX0RGTEFHUyB1bnNpZ25lZCBsb25nIGRmbGFnczsg CiAKLSMgIGRlZmluZSBEQzM5MF9MT0NLX0lPIHNwaW5fbG9ja19pcnFzYXZlICgmaW9fcmVxdWVz dF9sb2NrLCBpZmxhZ3MpCi0jICBkZWZpbmUgREMzOTBfVU5MT0NLX0lPIHNwaW5fdW5sb2NrX2ly cXJlc3RvcmUgKCZpb19yZXF1ZXN0X2xvY2ssIGlmbGFncykKKyMgIGRlZmluZSBEQzM5MF9MT0NL X0lPIHNwaW5fbG9ja19pcnFzYXZlICgmKChzdHJ1Y3QgU2NzaV9Ib3N0ICopZGV2KS0+aG9zdF9s b2NrLCBpZmxhZ3MpCisjICBkZWZpbmUgREMzOTBfVU5MT0NLX0lPIHNwaW5fdW5sb2NrX2lycXJl c3RvcmUgKCYoKHN0cnVjdCBTY3NpX0hvc3QgKilkZXYpLT5ob3N0X2xvY2ssIGlmbGFncykKIAog IyAgZGVmaW5lIERDMzkwX0xPQ0tfRFJWIHNwaW5fbG9ja19pcnFzYXZlICgmZGMzOTBfZHJ2bG9j aywgZGZsYWdzKQogIyAgZGVmaW5lIERDMzkwX1VOTE9DS19EUlYgc3Bpbl91bmxvY2tfaXJxcmVz dG9yZSAoJmRjMzkwX2RydmxvY2ssIGRmbGFncykKQEAgLTMzMSw4ICszMzEsOCBAQAogIyAgIGRl ZmluZSBEQzM5MF9BRkxBR1MgdW5zaWduZWQgbG9uZyBhZmxhZ3M7CiAjICAgZGVmaW5lIERDMzkw X0lGTEFHUyAKICMgIGRlZmluZSBEQzM5MF9ERkxBR1MgdW5zaWduZWQgbG9uZyBkZmxhZ3M7IAot IyAgIGRlZmluZSBEQzM5MF9MT0NLX0lPIC8qIHNwaW5fbG9ja19pcnFzYXZlICgmaW9fcmVxdWVz dF9sb2NrLCBpZmxhZ3MpICovCi0jICAgZGVmaW5lIERDMzkwX1VOTE9DS19JTyAvKiBzcGluX3Vu bG9ja19pcnFyZXN0b3JlICgmaW9fcmVxdWVzdF9sb2NrLCBpZmxhZ3MpICovCisjICAgZGVmaW5l IERDMzkwX0xPQ0tfSU8oZGV2KSAvKiBzcGluX2xvY2tfaXJxc2F2ZSAoJmlvX3JlcXVlc3RfbG9j aywgaWZsYWdzKSAqLworIyAgIGRlZmluZSBEQzM5MF9VTkxPQ0tfSU8oZGV2KSAvKiBzcGluX3Vu bG9ja19pcnFyZXN0b3JlICgmaW9fcmVxdWVzdF9sb2NrLCBpZmxhZ3MpICovCiAjICAgZGVmaW5l IERDMzkwX0xPQ0tfRFJWIHNwaW5fbG9ja19pcnFzYXZlICgmZGMzOTBfZHJ2bG9jaywgZGZsYWdz KQogIyAgIGRlZmluZSBEQzM5MF9VTkxPQ0tfRFJWIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUgKCZk YzM5MF9kcnZsb2NrLCBkZmxhZ3MpCiAjICAgZGVmaW5lIERDMzkwX0xPQ0tfRFJWX05JIHNwaW5f bG9jayAoJmRjMzkwX2RydmxvY2spCkBAIC0zNDksOCArMzQ5LDggQEAKICMgICBkZWZpbmUgREMz OTBfSUZMQUdTIHVuc2lnbmVkIGxvbmcgaWZsYWdzOwogIyAgIGRlZmluZSBEQzM5MF9ERkxBR1Mg dW5zaWduZWQgbG9uZyBkZmxhZ3M7IAogICAgIHNwaW5sb2NrX3QgZGMzOTBfZHJ2bG9jayA9IFNQ SU5fTE9DS19VTkxPQ0tFRDsKLSMgICBkZWZpbmUgREMzOTBfTE9DS19JTyBzcGluX2xvY2tfaXJx c2F2ZSAoJmlvX3JlcXVlc3RfbG9jaywgaWZsYWdzKQotIyAgIGRlZmluZSBEQzM5MF9VTkxPQ0tf SU8gc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJmlvX3JlcXVlc3RfbG9jaywgaWZsYWdzKQorIyAg IGRlZmluZSBEQzM5MF9MT0NLX0lPKGRldikgc3Bpbl9sb2NrX2lycXNhdmUgKCYoKHN0cnVjdCBT Y3NpX0hvc3QgKilkZXYpLT5ob3N0X2xvY2ssIGlmbGFncykKKyMgICBkZWZpbmUgREMzOTBfVU5M T0NLX0lPKGRldikgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSAoJigoc3RydWN0IFNjc2lfSG9zdCAq KWRldiktPmhvc3RfbG9jaywgaWZsYWdzKQogIyAgIGRlZmluZSBEQzM5MF9MT0NLX0RSViBzcGlu X2xvY2tfaXJxc2F2ZSAoJmRjMzkwX2RydmxvY2ssIGRmbGFncykKICMgICBkZWZpbmUgREMzOTBf VU5MT0NLX0RSViBzcGluX3VubG9ja19pcnFyZXN0b3JlICgmZGMzOTBfZHJ2bG9jaywgZGZsYWdz KQogIyAgIGRlZmluZSBEQzM5MF9MT0NLX0RSVl9OSSBzcGluX2xvY2sgKCZkYzM5MF9kcnZsb2Nr KQpAQCAtMTA3NCwxMSArMTA3NCwxMSBAQAogCURDMzkwX0lGTEFHUwogCURDMzkwX0FGTEFHUwog CURFQlVHMChwcmludGsgKCJEQzM5MDogRGVidWc6IFdhaXRpbmcgcXVldWUgd29rZW4gdXAgYnkg dGltZXIhXG4iKTspCi0JREMzOTBfTE9DS19JTzsKKwlEQzM5MF9MT0NLX0lPKHBBQ0IucFNjc2lI b3N0KTsKIAlEQzM5MF9MT0NLX0FDQjsKIAlkYzM5MF9XYWl0aW5nX3Byb2Nlc3MgKHBBQ0IpOwog CURDMzkwX1VOTE9DS19BQ0I7Ci0JREMzOTBfVU5MT0NLX0lPOworCURDMzkwX1VOTE9DS19JTyhw QUNCLnBTY3NpSG9zdCk7CiB9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtMjU1OCw3ICsyNTU4LDcg QEAKICAgREMzOTBfQUZMQUdTIAogICBwb3NbbGVuZ3RoXSA9IDA7CiAKLSAgREMzOTBfTE9DS19J TzsKKyAgREMzOTBfTE9DS19JTyhwQUNCLnBTY3NpSG9zdCk7CiAgIERDMzkwX0xPQ0tfQUNCOwog ICAvKiBVUFBFUkNBU0UgKi8gCiAgIC8qIERvbid0IHVzZSBrZXJuZWwgdG91cHBlciwgYmVjYXVz ZSBvZiAyLjAueCBidWc6IGN0bXAgdW5leHBvcnRlZCAqLwpAQCAtMjcyNiw3ICsyNzI2LDcgQEAK ICAgREMzOTBfVU5MT0NLX0FDQjsKICAgaWYgKG5lZWRzX2lucXVpcnkpIAogICAgICB7IGRjMzkw X3VwZGF0ZURDQiAocEFDQiwgcERDQik7IGRjMzkwX2lucXVpcnkgKHBBQ0IsIHBEQ0IpOyB9Owot ICBEQzM5MF9VTkxPQ0tfSU87CisgIERDMzkwX1VOTE9DS19JTyhwQUNCLnBTY3NpSG9zdCk7CiAg IHJldHVybiAobGVuZ3RoKTsKIAogIGVpbnYyOgpAQCAtMjczNCw3ICsyNzM0LDcgQEAKICBlaW52 OgogICAvKiBzcGluX3VubG9jayAoc3RydG9rX2xvY2spOyAqLwogICBEQzM5MF9VTkxPQ0tfQUNC OwotICBEQzM5MF9VTkxPQ0tfSU87CisgIERDMzkwX1VOTE9DS19JTyhwQUNCLnBTY3NpSG9zdCk7 CiAgIHByaW50ayAoS0VSTl9XQVJOSU5HICJEQzM5MDogcGFyc2UgZXJyb3IgbmVhciBcIiVzXCJc biIsIChwb3M/IHBvczogIk5VTEwiKSk7CiAgIHJldHVybiAoLUVJTlZBTCk7CiAgICAKQEAgLTI3 NDQsNyArMjc0NCw3IEBACiAJcHJpbnRrIChLRVJOX1dBUk5JTkcgIkRDMzkwOiBEcml2ZXIgcmVz ZXQgcmVxdWVzdGVkIVxuIik7CiAJREMzOTBfVU5MT0NLX0FDQjsKIAlEQzM5MF9yZXNldCAoJmNt ZCwgMCk7Ci0JREMzOTBfVU5MT0NLX0lPOworCURDMzkwX1VOTE9DS19JTyhwQUNCLnBTY3NpSG9z dCk7CiAgICAgIH07CiAgIHJldHVybiAobGVuZ3RoKTsKIApAQCAtMjc1Miw3ICsyNzUyLDcgQEAK ICAgICAgewogCWRjMzkwX2R1bXBpbmZvIChwQUNCLCAwLCAwKTsKIAlEQzM5MF9VTkxPQ0tfQUNC OwotCURDMzkwX1VOTE9DS19JTzsgICAgICAgCisJREMzOTBfVU5MT0NLX0lPKHBBQ0IucFNjc2lI b3N0KTsgICAgICAgCiAgICAgIH0KICAgcmV0dXJuIChsZW5ndGgpOwogCQpAQCAtMjc2Niw3ICsy NzY2LDcgQEAKIAkJZGV2LCBwRENCLT5UYXJnZXRJRCwgcERDQi0+VGFyZ2V0TFVOKTsKIAlEQzM5 MF9VTkxPQ0tfQUNCOwogCWRjMzkwX2lucXVpcnkgKHBBQ0IsIHBEQ0IpOwotCURDMzkwX1VOTE9D S19JTzsKKwlEQzM5MF9VTkxPQ0tfSU8ocEFDQi5wU2NzaUhvc3QpOwogICAgICB9OwogICAgcmV0 dXJuIChsZW5ndGgpOwogCkBAIC0yNzgxLDcgKzI3ODEsNyBAQAogCS8qIFRPIERPOiBXZSBzaG91 bGQgbWFrZSBzdXJlIG5vIHBlbmRpbmcgY29tbWFuZHMgYXJlIGxlZnQgKi8KIAlkYzM5MF9yZW1v dmVfZGV2IChwQUNCLCBwRENCKTsKIAlEQzM5MF9VTkxPQ0tfQUNCOwotCURDMzkwX1VOTE9DS19J TzsKKwlEQzM5MF9VTkxPQ0tfSU8ocEFDQi5wU2NzaUhvc3QpOwogICAgICB9OwogICAgcmV0dXJu IChsZW5ndGgpOwogCkBAIC0yNzk2LDcgKzI3OTYsNyBAQAogCWRjMzkwX2luaXREQ0IgKHBBQ0Is ICZwRENCLCBpZCwgbHVuKTsKIAlEQzM5MF9VTkxPQ0tfQUNCOwogCWRjMzkwX2lucXVpcnkgKHBB Q0IsIHBEQ0IpOwotCURDMzkwX1VOTE9DS19JTzsKKwlEQzM5MF9VTkxPQ0tfSU8ocEFDQi5wU2Nz aUhvc3QpOwogICAgICB9OwogICAgcmV0dXJuIChsZW5ndGgpOwogCkBAIC0yODEyLDcgKzI4MTIs NyBAQAogCURDMzkwX1VOTE9DS19BQ0I7CiAJZGMzOTBfc2VuZHN0YXJ0IChwQUNCLCBwRENCKTsK IAlkYzM5MF9pbnF1aXJ5IChwQUNCLCBwRENCKTsKLQlEQzM5MF9VTkxPQ0tfSU87CisJREMzOTBf VU5MT0NLX0lPKHBBQ0IucFNjc2lIb3N0KTsKICAgICAgfTsKICAgIHJldHVybiAobGVuZ3RoKTsK IApAQCAtMjgyMCw3ICsyODIwLDcgQEAKICAgIHByaW50ayAoS0VSTl9XQVJOSU5HICJEQzM5MDog SWdub3JlIGNtbmQgdG8gaWxsZWdhbCBEZXYoSWR4KSAlaS4gVmFsaWQgcmFuZ2U6IDAgLSAlaS5c biIsIAogCSAgIGRldiwgcEFDQi0+RENCQ250IC0gMSk7CiAgICBEQzM5MF9VTkxPQ0tfQUNCOwot ICAgREMzOTBfVU5MT0NLX0lPOworICAgREMzOTBfVU5MT0NLX0lPKHBBQ0IucFNjc2lIb3N0KTsK ICAgIHJldHVybiAoLUVJTlZBTCk7CiAJICAgICAKIAkgICAgIApAQCAtMzA0MSw3ICszMDQxLDcg QEAKICAgICBEQzM5MF9BRkxBR1MgREMzOTBfSUZMQUdTCiAgICAgUEFDQiBwQUNCID0gKFBBQ0Ip KGhvc3QtPmhvc3RkYXRhKTsKIAotICAgIERDMzkwX0xPQ0tfSU87CisgICAgREMzOTBfTE9DS19J Tyhob3N0KTsKICAgICBEQzM5MF9MT0NLX0FDQjsKIAogICAgIC8qIFRPIERPOiBXZSBzaG91bGQg Y2hlY2sgZm9yIG91dHN0YW5kaW5nIGNvbW1hbmRzIGZpcnN0LiAqLwpAQCAtMzA1Niw3ICszMDU2 LDcgQEAKICAgICByZWxlYXNlX3JlZ2lvbihob3N0LT5pb19wb3J0LGhvc3QtPm5faW9fcG9ydCk7 CiAgICAgZGMzOTBfZnJlZURDQnMgKGhvc3QpOwogICAgIERDMzkwX1VOTE9DS19BQ0I7Ci0gICAg REMzOTBfVU5MT0NLX0lPOworICAgIERDMzkwX1VOTE9DS19JTyhob3N0KTsKICAgICByZXR1cm4o IDEgKTsKIH0KICNlbmRpZiAvKiBkZWYgTU9EVUxFICovCi0tLSAuL2RyaXZlcnMvc2NzaS91bHRy YXN0b3IuY34JU3VuIFNlcCAzMCAyMzoyNjowOCAyMDAxCisrKyAuL2RyaXZlcnMvc2NzaS91bHRy YXN0b3IuYwlNb24gSmFuIDI4IDA3OjMwOjMzIDIwMDIKQEAgLTUwMCw3ICs1MDAsMTEgQEAKICAg ICBjb25maWcubXNjcF9mcmVlID0gfjA7CiAjZW5kaWYKIAotICAgIGlmIChyZXF1ZXN0X2lycShj b25maWcuaW50ZXJydXB0LCBkb191bHRyYXN0b3JfaW50ZXJydXB0LCAwLCAiVWx0cmFzdG9yIiwg TlVMTCkpIHsKKyAgICAvKgorICAgICAqIEJycnIsICZjb25maWcubXNjcFswXS5TQ2ludC0+aG9z dCkgaXQgaXMgc29tZXRoaW5nIG1hZ2ljYWwuLi4uCisgICAgICogWFhYIGFuZCBGSVhNRQorICAg ICAqLworICAgIGlmIChyZXF1ZXN0X2lycShjb25maWcuaW50ZXJydXB0LCBkb191bHRyYXN0b3Jf aW50ZXJydXB0LCAwLCAiVWx0cmFzdG9yIiwgJmNvbmZpZy5tc2NwWzBdLlNDaW50LT5ob3N0KSkg ewogCXByaW50aygiVW5hYmxlIHRvIGFsbG9jYXRlIElSUSV1IGZvciBVbHRyYVN0b3IgY29udHJv bGxlci5cbiIsCiAJICAgICAgIGNvbmZpZy5pbnRlcnJ1cHQpOwogCXJldHVybiBGQUxTRTsKQEAg LTU3MCwxMiArNTc0LDcgQEAKIAkgIHByaW50aygiVTI0RjogaW52YWxpZCBJUlFcbiIpOwogCSAg cmV0dXJuIEZBTFNFOwogCX0KLSAgICAgIGlmIChyZXF1ZXN0X2lycShjb25maWcuaW50ZXJydXB0 LCBkb191bHRyYXN0b3JfaW50ZXJydXB0LCAwLCAiVWx0cmFzdG9yIiwgTlVMTCkpCi0JewotCSAg cHJpbnRrKCJVbmFibGUgdG8gYWxsb2NhdGUgSVJRJXUgZm9yIFVsdHJhU3RvciBjb250cm9sbGVy LlxuIiwKLQkJIGNvbmZpZy5pbnRlcnJ1cHQpOwotCSAgcmV0dXJuIEZBTFNFOwotCX0KKwogICAg ICAgLyogQklPUyBhZGRyIHNldCAqLwogICAgICAgLyogYmFzZSBwb3J0IHNldCAqLwogICAgICAg Y29uZmlnLnBvcnRfYWRkcmVzcyA9IGFkZHI7CkBAIC02MDUsNiArNjA0LDEzIEBACiAgICAgICAg ICAgICAgZnJlZV9pcnEoY29uZmlnLmludGVycnVwdCwgZG9fdWx0cmFzdG9yX2ludGVycnVwdCk7 CiAgICAgICAgICAgICAgcmV0dXJuIEZBTFNFOwogICAgICAgfQorICAgICAgCisgICAgICBpZiAo cmVxdWVzdF9pcnEoY29uZmlnLmludGVycnVwdCwgZG9fdWx0cmFzdG9yX2ludGVycnVwdCwgMCwg IlVsdHJhc3RvciIsIHNocG50KSkKKwl7CisJICBwcmludGsoIlVuYWJsZSB0byBhbGxvY2F0ZSBJ UlEldSBmb3IgVWx0cmFTdG9yIGNvbnRyb2xsZXIuXG4iLAorCQkgY29uZmlnLmludGVycnVwdCk7 CisJICByZXR1cm4gRkFMU0U7CisJfQogCiAgICAgICBzaHBudC0+aXJxID0gY29uZmlnLmludGVy cnVwdDsKICAgICAgIHNocG50LT5kbWFfY2hhbm5lbCA9IGNvbmZpZy5kbWFfY2hhbm5lbDsKQEAg LTExNTksMTAgKzExNjUsMTEgQEAKIHN0YXRpYyB2b2lkIGRvX3VsdHJhc3Rvcl9pbnRlcnJ1cHQo aW50IGlycSwgdm9pZCAqZGV2X2lkLCBzdHJ1Y3QgcHRfcmVncyAqcmVncykKIHsKICAgICB1bnNp Z25lZCBsb25nIGZsYWdzOwotCi0gICAgc3Bpbl9sb2NrX2lycXNhdmUoJmlvX3JlcXVlc3RfbG9j aywgZmxhZ3MpOworICAgIHN0cnVjdCBTY3NpX0hvc3QgKmRldiA9IGRldl9pZDsKKyAgICAKKyAg ICBzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5ob3N0X2xvY2ssIGZsYWdzKTsKICAgICB1bHRyYXN0 b3JfaW50ZXJydXB0KGlycSwgZGV2X2lkLCByZWdzKTsKLSAgICBzcGluX3VubG9ja19pcnFyZXN0 b3JlKCZpb19yZXF1ZXN0X2xvY2ssIGZsYWdzKTsKKyAgICBzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZkZXYtPmhvc3RfbG9jaywgZmxhZ3MpOwogfQogCiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Cg== --Multipart_Mon__28_Jan_2002_07:33:57_+0300_082a52f8--