Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id ; Tue, 9 Oct 2001 12:18:22 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id ; Tue, 9 Oct 2001 12:18:05 -0400 Received: from ztxmail03.ztx.compaq.com ([161.114.1.207]:19726 "EHLO ztxmail03.ztx.compaq.com") by vger.kernel.org with ESMTP id ; Tue, 9 Oct 2001 12:17:44 -0400 X-MimeOLE: Produced By Microsoft Exchange V6.0.4712.0 content-class: urn:content-classes:message Subject: [PATCH] Update to the Compaq cpqarray driver... Date: Tue, 9 Oct 2001 11:17:01 -0500 Message-ID: MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----_=_NextPart_001_01C150DD.D3E62FC6" Thread-Topic: [PATCH] Update to the Compaq cpqarray driver... Thread-Index: AcFQ3cj4/+9lZLvyEdWu6wCAXw0PEA== From: "White, Charles" To: "Alan Cox (E-mail)" , Cc: "Jens Axboe" , "Cameron, Steve" X-OriginalArrivalTime: 09 Oct 2001 16:17:02.0274 (UTC) FILETIME=[D44AA220:01C150DD] Sender: linux-kernel-owner@vger.kernel.org X-Mailing-List: linux-kernel@vger.kernel.org This is a multi-part message in MIME format. ------_=_NextPart_001_01C150DD.D3E62FC6 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable This patch is for 2.4.10-ac8. This changes the driver to use the new 2.4 kernel PCI APIs. This changes how all our cards are detected.=20 This adds some new IOCTLs for adding/deleting volumes while the driver is online.=20 It have added code to request/release the io-region used by our cards. It has a small fix to the flush on unload. =20 <>=20 ------_=_NextPart_001_01C150DD.D3E62FC6 Content-Type: application/octet-stream; name="cpqarray_2.4.20D_for_2.4.10ac8.patch" Content-Transfer-Encoding: base64 Content-Description: cpqarray_2.4.20D_for_2.4.10ac8.patch Content-Disposition: attachment; filename="cpqarray_2.4.20D_for_2.4.10ac8.patch" ZGlmZiAtdXJOIGxpbnV4LTIuNC4xMC1hYzgub3JpZy9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMg bGludXgtMi40LjEwLWFjOGNwcWFycmF5MjQyMC9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMKLS0t IGxpbnV4LTIuNC4xMC1hYzgub3JpZy9kcml2ZXJzL2Jsb2NrL2NwcWFycmF5LmMJVHVlIFNlcCAx OCAxNjoxMDo0MyAyMDAxCisrKyBsaW51eC0yLjQuMTAtYWM4Y3BxYXJyYXkyNDIwL2RyaXZlcnMv YmxvY2svY3BxYXJyYXkuYwlNb24gT2N0ICA4IDA5OjU1OjE5IDIwMDEKQEAgLTQxLDEzICs0MSwx MyBAQAogCiAjZGVmaW5lIFNNQVJUMl9EUklWRVJfVkVSU0lPTihtYWosbWluLHN1Ym1pbikgKCht YWo8PDE2KXwobWluPDw4KXwoc3VibWluKSkKIAotI2RlZmluZSBEUklWRVJfTkFNRSAiQ29tcGFx IFNNQVJUMiBEcml2ZXIgKHYgMi40LjUpIgotI2RlZmluZSBEUklWRVJfVkVSU0lPTiBTTUFSVDJf RFJJVkVSX1ZFUlNJT04oMiw0LDUpCisjZGVmaW5lIERSSVZFUl9OQU1FICJDb21wYXEgU01BUlQy IERyaXZlciAodiAyLjQuMjApIgorI2RlZmluZSBEUklWRVJfVkVSU0lPTiBTTUFSVDJfRFJJVkVS X1ZFUlNJT04oMiw0LDIwKQogCiAvKiBFbWJlZGRlZCBtb2R1bGUgZG9jdW1lbnRhdGlvbiBtYWNy b3MgLSBzZWUgbW9kdWxlcy5oICovCiAvKiBPcmlnaW5hbCBhdXRob3IgQ2hyaXMgRnJhbnR6IC0g Q29tcGFxIENvbXB1dGVyIENvcnBvcmF0aW9uICovCiBNT0RVTEVfQVVUSE9SKCJDb21wYXEgQ29t cHV0ZXIgQ29ycG9yYXRpb24iKTsKLU1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBDb21w YXEgU21hcnQyIEFycmF5IENvbnRyb2xsZXJzIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZl ciBmb3IgQ29tcGFxIFNtYXJ0MiBBcnJheSBDb250cm9sbGVycyB2ZXJzaW9uIDIuNC4yMCIpOwog TU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAjZGVmaW5lIE1BSk9SX05SIENPTVBBUV9TTUFSVDJf TUFKT1IKQEAgLTY0LDEyICs2NCwxMSBAQAogI2RlZmluZSBOUl9DTURTCQkxMjggLyogVGhpcyBj b3VsZCBwcm9iYWJseSBnbyBhcyBoaWdoIGFzIH40MDAgKi8KIAogI2RlZmluZSBNQVhfQ1RMUgk4 Ci0jZGVmaW5lIENUTFJfU0hJRlQJOAogCiAjZGVmaW5lIENQUUFSUkFZX0RNQV9NQVNLCTB4RkZG RkZGRkYJLyogMzIgYml0IERNQSAqLwogCi1zdGF0aWMgaW50IG5yX2N0bHI7Ci1zdGF0aWMgY3Rs cl9pbmZvX3QgKmhiYVtNQVhfQ1RMUl07CitzdGF0aWMgY3Rscl9pbmZvX3QgKmhiYVtNQVhfQ1RM Ul0gPSAKKwl7IE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwsIE5VTEwg fTsKIAogc3RhdGljIGludCBlaXNhWzhdOwogCkBAIC05NywxMSArOTYsMzMgQEAKIAl7IDB4NDA1 ODBFMTEsICJTbWFydCBBcnJheSA0MzEiLAkmc21hcnQ0X2FjY2VzcyB9LAogfTsKIAotc3RhdGlj IHN0cnVjdCBoZF9zdHJ1Y3QgKiBpZGE7Ci1zdGF0aWMgaW50ICogaWRhX3NpemVzOwotc3RhdGlj IGludCAqIGlkYV9ibG9ja3NpemVzOwotc3RhdGljIGludCAqIGlkYV9oYXJkc2l6ZXM7Ci1zdGF0 aWMgc3RydWN0IGdlbmRpc2sgaWRhX2dlbmRpc2tbTUFYX0NUTFJdOworLyogZGVmaW5lIHRoZSBQ Q0kgaW5mbyBmb3IgdGhlIFBDSSBjYXJkcyB0aGlzIGRyaXZlciBjYW4gY29udHJvbCAqLworY29u c3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgY3BxYXJyYXlfcGNpX2RldmljZV9pZFtdID0gCit7CisJ eyBQQ0lfVkVORE9SX0lEX0RFQywgUENJX0RFVklDRV9JRF9DT01QQVFfNDJYWCwgCisJCTB4MEUx MSwgMHg0MDU4LCAwLCAwLCAwfSwJLyogU0E0MzEgKi8KKwl7IFBDSV9WRU5ET1JfSURfREVDLCBQ Q0lfREVWSUNFX0lEX0NPTVBBUV80MlhYLCAKKyAgICAgICAgICAgICAgICAweDBFMTEsIDB4NDA1 MSwgMCwgMCwgMH0sCS8qIFNBNDI1MEVTICovCisJeyBQQ0lfVkVORE9SX0lEX0RFQywgUENJX0RF VklDRV9JRF9DT01QQVFfNDJYWCwgCisgICAgICAgICAgICAgICAgMHgwRTExLCAweDQwNTAsIDAs IDAsIDB9LAkvKiBTQTQyMDAgKi8KKwl7IFBDSV9WRU5ET1JfSURfTkNSLCBQQ0lfREVWSUNFX0lE X05DUl81M0MxNTEwLAorCQkweDBFMTEsIDB4NDA0OCwgMCwgMCwgMH0sCS8qIExDMiAqLworCXsg UENJX1ZFTkRPUl9JRF9OQ1IsIFBDSV9ERVZJQ0VfSURfTkNSXzUzQzE1MTAsCisgICAgICAgICAg ICAgICAgMHgwRTExLCAweDQwNDAsIDAsIDAsIDB9LCAJLyogSW50ZWdyYXRlZCBBcnJheSAqLwor CXsgUENJX1ZFTkRPUl9JRF9DT01QQVEsIFBDSV9ERVZJQ0VfSURfQ09NUEFRX1NNQVJUMlAsIAor CQkweDBFMTEsIDB4NDAzNCwgMCwgMCwgMH0sCS8qIFNBIDIyMSAqLyAKKwl7IFBDSV9WRU5ET1Jf SURfQ09NUEFRLCBQQ0lfREVWSUNFX0lEX0NPTVBBUV9TTUFSVDJQLCAKKyAgICAgICAgICAgICAg ICAweDBFMTEsIDB4NDAzMywgMCwgMCwgMH0sICAgICAgIC8qIFNBIDMxMDBFUyovCisJeyBQQ0lf VkVORE9SX0lEX0NPTVBBUSwgUENJX0RFVklDRV9JRF9DT01QQVFfU01BUlQyUCwgCisgICAgICAg ICAgICAgICAgMHgwRTExLCAweDQwMzIsIDAsIDAsIDB9LCAgICAgICAvKiBTQSAzMjAwKi8KKwl7 IFBDSV9WRU5ET1JfSURfQ09NUEFRLCBQQ0lfREVWSUNFX0lEX0NPTVBBUV9TTUFSVDJQLCAKKyAg ICAgICAgICAgICAgICAweDBFMTEsIDB4NDAzMSwgMCwgMCwgMH0sICAgICAgIC8qIFNBIDJTTCov CisJeyBQQ0lfVkVORE9SX0lEX0NPTVBBUSwgUENJX0RFVklDRV9JRF9DT01QQVFfU01BUlQyUCwg CisgICAgICAgICAgICAgICAgMHgwRTExLCAweDQwMzAsIDAsIDAsIDB9LCAgICAgICAvKiBTQSAy UCAqLworCXsgMCB9Cit9OworCitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgY3BxYXJyYXlfcGNp X2RldmljZV9pZCk7CiAKIHN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnByb2NfYXJyYXk7 CiAKQEAgLTExNSw3ICsxMzYsNiBAQAogI2RlZmluZSBEQkdQWChzKSBkbyB7IH0gd2hpbGUoMCkK IAogaW50IGNwcWFycmF5X2luaXQodm9pZCk7Ci1zdGF0aWMgaW50IGNwcWFycmF5X3BjaV9kZXRl Y3Qodm9pZCk7CiBzdGF0aWMgaW50IGNwcWFycmF5X3BjaV9pbml0KGN0bHJfaW5mb190ICpjLCBz dHJ1Y3QgcGNpX2RldiAqcGRldik7CiBzdGF0aWMgdm9pZCAqcmVtYXBfcGNpX21lbSh1bG9uZyBi YXNlLCB1bG9uZyBzaXplKTsKIHN0YXRpYyBpbnQgY3BxYXJyYXlfZWlzYV9kZXRlY3Qodm9pZCk7 CkBAIC0xMjYsNiArMTQ2LDkgQEAKIHN0YXRpYyBjbWRsaXN0X3QgKiBjbWRfYWxsb2MoY3Rscl9p bmZvX3QgKmgsIGludCBnZXRfZnJvbV9wb29sKTsKIHN0YXRpYyB2b2lkIGNtZF9mcmVlKGN0bHJf aW5mb190ICpoLCBjbWRsaXN0X3QgKmMsIGludCBnb3RfZnJvbV9wb29sKTsKIAorc3RhdGljIHZv aWQgZnJlZV9oYmEoaW50IGkpOworc3RhdGljIGludCBhbGxvY19jcHFhcnJheV9oYmEodm9pZCk7 CisKIHN0YXRpYyBpbnQgc2VuZGNtZCgKIAlfX3U4CWNtZCwKIAlpbnQJY3RsciwKQEAgLTE1NCw2 ICsxNzcsOSBAQAogc3RhdGljIGludCByZXZhbGlkYXRlX2xvZ3ZvbChrZGV2X3QgZGV2LCBpbnQg bWF4dXNhZ2UpOwogc3RhdGljIGludCByZXZhbGlkYXRlX2FsbHZvbChrZGV2X3QgZGV2KTsKIAor c3RhdGljIGludCBkZXJlZ2lzdGVyX2Rpc2soaW50IGN0bHIsIGludCBsb2d2b2wpOworc3RhdGlj IGludCByZWdpc3Rlcl9uZXdfZGlzayhpbnQgY2x0cixpbnQgbG9ndm9sKTsKKwogI2lmZGVmIENP TkZJR19QUk9DX0ZTCiBzdGF0aWMgdm9pZCBpZGFfcHJvY2luaXQoaW50IGkpOwogc3RhdGljIGlu dCBpZGFfcHJvY19nZXRfaW5mbyhjaGFyICpidWZmZXIsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2Zm c2V0LCBpbnQgbGVuZ3RoLCBpbnQgKmVvZiwgdm9pZCAqZGF0YSk7CkBAIC0xNzIsMTggKzE5OCwx NSBAQAogCQlkcnYgPSAmaGJhW2N0bHJdLT5kcnZbaV07CiAJCWlmICghZHJ2LT5ucl9ibGtzKQog CQkJY29udGludWU7Ci0JCWlkYVsoY3Rscjw8Q1RMUl9TSElGVCkgKyAoaTw8TldEX1NISUZUKV0u bnJfc2VjdHMgPQotCQlpZGFfc2l6ZXNbKGN0bHI8PENUTFJfU0hJRlQpICsgKGk8PE5XRF9TSElG VCldID0KLQkJCQlkcnYtPm5yX2Jsa3M7CisJCWhiYVtjdGxyXS0+aGRbaTw8TldEX1NISUZUXS5u cl9zZWN0cyA9CisJCQloYmFbY3Rscl0tPnNpemVzW2k8PE5XRF9TSElGVF0gPSBkcnYtPm5yX2Js a3M7CiAKIAkJZm9yKGo9MDsgajwxNjsgaisrKSB7Ci0JCQlpZGFfYmxvY2tzaXplc1soY3Rscjw8 Q1RMUl9TSElGVCkgKyAoaTw8TldEX1NISUZUKStqXSA9Ci0JCQkJMTAyNDsKLQkJCWlkYV9oYXJk c2l6ZXNbKGN0bHI8PENUTFJfU0hJRlQpICsgKGk8PE5XRF9TSElGVCkral0gPQotCQkJCWRydi0+ YmxrX3NpemU7CisJCQloYmFbY3Rscl0tPmJsb2Nrc2l6ZXNbKGk8PE5XRF9TSElGVCkral0gPSAx MDI0OworCQkJaGJhW2N0bHJdLT5oYXJkc2l6ZXNbKGk8PE5XRF9TSElGVCkral0gPSBkcnYtPmJs a19zaXplOwogCQl9Ci0JCWlkYV9nZW5kaXNrW2N0bHJdLm5yX3JlYWwrKzsKIAl9CisJaGJhW2N0 bHJdLT5nZW5kaXNrLm5yX3JlYWwgPSBoYmFbY3Rscl0tPmhpZ2hlc3RfbHVuICsxOwogCiB9CiAK QEAgLTIzNSw2ICsyNTgsNyBAQAogCQkiICAgICAgIEkvTyBQb3J0OiAweCUwNHhcbiIKIAkJIiAg ICAgICBJUlE6ICVkXG4iCiAJCSIgICAgICAgTG9naWNhbCBkcml2ZXM6ICVkXG4iCisJCSIgICAg ICAgSGlnaGVzdCBMb2dpY2FsIElEOiAlZFxuIgogCQkiICAgICAgIFBoeXNpY2FsIGRyaXZlczog JWRcblxuIgogCQkiICAgICAgIEN1cnJlbnQgUSBkZXB0aDogJWRcbiIKIAkJIiAgICAgICBNYXgg USBkZXB0aCBzaW5jZSBpbml0OiAlZFxuXG4iLApAQCAtMjQzLDggKzI2Nyw4IEBACiAJCSh1bnNp Z25lZCBsb25nKWgtPmJvYXJkX2lkLAogCQloLT5maXJtX3JldlswXSwgaC0+ZmlybV9yZXZbMV0s IGgtPmZpcm1fcmV2WzJdLCBoLT5maXJtX3JldlszXSwKIAkJKHVuc2lnbmVkIGxvbmcpaC0+Y3Rs cl9zaWcsICh1bnNpZ25lZCBsb25nKWgtPnZhZGRyLAotCQkodW5zaWduZWQgaW50KSBoLT5pb2Fk ZHIsICh1bnNpZ25lZCBpbnQpaC0+aW50ciwKLQkJaC0+bG9nX2RyaXZlcywgaC0+cGh5c19kcml2 ZXMsCisJCSh1bnNpZ25lZCBpbnQpIGgtPmlvX21lbV9hZGRyLCAodW5zaWduZWQgaW50KWgtPmlu dHIsCisJCWgtPmxvZ19kcml2ZXMsIGgtPmhpZ2hlc3RfbHVuLCBoLT5waHlzX2RyaXZlcywKIAkJ aC0+UWRlcHRoLCBoLT5tYXhRc2luY2Vpbml0KTsKIAogCXBvcyArPSBzaXplOyBsZW4gKz0gc2l6 ZTsKQEAgLTI1MiwxMSArMjc2LDE0IEBACiAJc2l6ZSA9IHNwcmludGYoYnVmZmVyK2xlbiwgIkxv Z2ljYWwgRHJpdmUgSW5mbzpcbiIpOwogCXBvcyArPSBzaXplOyBsZW4gKz0gc2l6ZTsKIAotCWZv cihpPTA7IGk8aC0+bG9nX2RyaXZlczsgaSsrKSB7CisJZm9yKGk9MDsgaTw9aC0+aGlnaGVzdF9s dW47IGkrKykgewogCQlkcnYgPSAmaC0+ZHJ2W2ldOwotCQlzaXplID0gc3ByaW50ZihidWZmZXIr bGVuLCAiaWRhL2MlZGQlZDogYmxrc3o9JWQgbnJfYmxrcz0lZFxuIiwKKwkJaWYoZHJ2LT5ibGtf c2l6ZSAhPSAwKQorCQl7CisJCSAgICAJc2l6ZSA9IHNwcmludGYoYnVmZmVyK2xlbiwgImlkYS9j JWRkJWQ6IGJsa3N6PSVkIG5yX2Jsa3M9JWRcbiIsCiAJCQkJY3RsciwgaSwgZHJ2LT5ibGtfc2l6 ZSwgZHJ2LT5ucl9ibGtzKTsKLQkJcG9zICs9IHNpemU7IGxlbiArPSBzaXplOworCQkJcG9zICs9 IHNpemU7IGxlbiArPSBzaXplOworCQl9CiAJfQogCiAjaWZkZWYgQ1BRX1BST0NfUFJJTlRfUVVF VUVTCkBAIC0yOTYsNTUgKzMyMywxMTIgQEAKIH0KICNlbmRpZiAvKiBDT05GSUdfUFJPQ19GUyAq LwogCi0jaWZkZWYgTU9EVUxFCiAKIE1PRFVMRV9QQVJNKGVpc2EsICIxLThpIik7CiBFWFBPUlRf Tk9fU1lNQk9MUzsKIAogLyogVGhpcyBpcyBhIGJpdCBvZiBhIGhhY2suLi4gKi8KLWludCBfX2lu aXQgaW5pdF9tb2R1bGUodm9pZCkKK2ludCBfX2luaXQgaW5pdF9jcHFhcnJheV9tb2R1bGUodm9p ZCkKIHsKIAlpZiAoY3BxYXJyYXlfaW5pdCgpID09IDApIC8qIGFsbCB0aGUgYmxvY2sgZGV2IG51 bWJlcnMgYWxyZWFkeSB1c2VkICovCi0JCXJldHVybiAtRUlPOwkgIC8qIG9yIG5vIGNvbnRyb2xs ZXJzIHdlcmUgZm91bmQgKi8KKwkJcmV0dXJuIC1FTk9ERVY7CSAgLyogb3Igbm8gY29udHJvbGxl cnMgd2VyZSBmb3VuZCAqLwogCXJldHVybiAwOwogfQogCi12b2lkIGNsZWFudXBfbW9kdWxlKHZv aWQpCitzdGF0aWMgdm9pZCByZWxlYXNlX2lvX21lbShjdGxyX2luZm9fdCAqYykKK3sKKwkvKiBp ZiBJTyBtZW0gd2FzIG5vdCBwcm90ZWN0ZWQgZG8gbm90aGluZyAqLworCWlmKCBjLT5pb19tZW1f YWRkciA9PSAwKQorCQlyZXR1cm47CisJcmVsZWFzZV9yZWdpb24oYy0+aW9fbWVtX2FkZHIsIGMt PmlvX21lbV9sZW5ndGgpOworCWMtPmlvX21lbV9hZGRyID0gMDsKKwljLT5pb19tZW1fbGVuZ3Ro ID0gMDsKK30KKworc3RhdGljIHZvaWQgX19kZXZleGl0IGNwcWFycmF5X3JlbW92ZV9vbmUgKHN0 cnVjdCBwY2lfZGV2ICpwZGV2KQogewogCWludCBpOworCWN0bHJfaW5mb190ICp0bXBfcHRyOwog CWNoYXIgYnVmZls0XTsgCiAKLQlmb3IoaT0wOyBpPG5yX2N0bHI7IGkrKykgeworCQlpZiAocGRl di0+ZHJpdmVyX2RhdGEgPT0gTlVMTCkKKwl7CisJCXByaW50ayggS0VSTl9FUlIgImNwcWFycmF5 OiBVbmFibGUgdG8gcmVtb3ZlIGRldmljZSBcbiIpOworCQlyZXR1cm47CisJfQorCXRtcF9wdHIg PSAoY3Rscl9pbmZvX3QgKikgcGRldi0+ZHJpdmVyX2RhdGE7CisJaSA9IHRtcF9wdHItPmN0bHI7 CisJaWYgKGhiYVtpXSA9PSBOVUxMKSAKKwl7CisJCXByaW50ayhLRVJOX0VSUiAiY3BxYXJyYXk6 IGRldmljZSBhcHBlYXJzIHRvICIKKwkJCSJhbHJlYWR5IGJlIHJlbW92ZWQgXG4iKTsKKwkJcmV0 dXJuOworCX0KIAotCQkvKiBzZW5kY21kIHdpbGwgdHVybiBvZmYgaW50ZXJydXB0LCBhbmQgc2Vu ZCB0aGUgZmx1c2guLi4gCi0JCSAqIFRvIHdyaXRlIGFsbCBkYXRhIGluIHRoZSBiYXR0ZXJ5IGJh Y2tlZCBjYWNoZSB0byBkaXNrcyAgICAKLQkJICogbm8gZGF0YSByZXR1cm5lZCwgYnV0IGRvbid0 IHdhbnQgdG8gc2VuZCBOVUxMIHRvIHNlbmRjbWQgKi8JCi0JCWlmKCBzZW5kY21kKEZMVVNIX0NB Q0hFLCBpLCBidWZmLCA0LCAwLCAwLCAwKSkKLQkJewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAi VW5hYmxlIHRvIGZsdXNoIGNhY2hlIG9uICIKLQkJCQkiY29udHJvbGxlciAlZFxuIiwgaSk7CQot CQl9Ci0JCWZyZWVfaXJxKGhiYVtpXS0+aW50ciwgaGJhW2ldKTsKLQkJaW91bm1hcChoYmFbaV0t PnZhZGRyKTsKLQkJdW5yZWdpc3Rlcl9ibGtkZXYoTUFKT1JfTlIraSwgaGJhW2ldLT5kZXZuYW1l KTsKLQkJZGVsX3RpbWVyKCZoYmFbaV0tPnRpbWVyKTsKLQkJYmxrX2NsZWFudXBfcXVldWUoQkxL X0RFRkFVTFRfUVVFVUUoTUFKT1JfTlIgKyBpKSk7Ci0JCXJlbW92ZV9wcm9jX2VudHJ5KGhiYVtp XS0+ZGV2bmFtZSwgcHJvY19hcnJheSk7Ci0JCXBjaV9mcmVlX2NvbnNpc3RlbnQoaGJhW2ldLT5w Y2lfZGV2LCAKKwkvKiBzZW5kY21kIHdpbGwgdHVybiBvZmYgaW50ZXJydXB0LCBhbmQgc2VuZCB0 aGUgZmx1c2guLi4gCisJICogVG8gd3JpdGUgYWxsIGRhdGEgaW4gdGhlIGJhdHRlcnkgYmFja2Vk IGNhY2hlIHRvIGRpc2tzICAgICovCisJbWVtc2V0KGJ1ZmYsIDAgLCA0KTsKKwlpZiggc2VuZGNt ZChGTFVTSF9DQUNIRSwgaSwgYnVmZiwgNCwgMCwgMCwgMCkpCisJeworCQlwcmludGsoS0VSTl9X QVJOSU5HICJVbmFibGUgdG8gZmx1c2ggY2FjaGUgb24gY29udHJvbGxlciAlZFxuIiwKKwkJCSBp KTsJCisJfQorCWZyZWVfaXJxKGhiYVtpXS0+aW50ciwgaGJhW2ldKTsKKwlwZGV2LT5kcml2ZXJf ZGF0YSA9IE5VTEw7CisJLyogcmVtb3ZlIGl0IGZyb20gdGhlIGRpc2sgbGlzdCAqLworCWRlbF9n ZW5kaXNrKCYoaGJhW2ldLT5nZW5kaXNrKSk7CisKKwlpb3VubWFwKGhiYVtpXS0+dmFkZHIpOwor CXVucmVnaXN0ZXJfYmxrZGV2KE1BSk9SX05SK2ksIGhiYVtpXS0+ZGV2bmFtZSk7CisJZGVsX3Rp bWVyKCZoYmFbaV0tPnRpbWVyKTsKKwlibGtfY2xlYW51cF9xdWV1ZShCTEtfREVGQVVMVF9RVUVV RShNQUpPUl9OUiArIGkpKTsKKwlyZW1vdmVfcHJvY19lbnRyeShoYmFbaV0tPmRldm5hbWUsIHBy b2NfYXJyYXkpOworCXBjaV9mcmVlX2NvbnNpc3RlbnQoaGJhW2ldLT5wY2lfZGV2LCAKIAkJCU5S X0NNRFMgKiBzaXplb2YoY21kbGlzdF90KSwgKGhiYVtpXS0+Y21kX3Bvb2wpLCAKIAkJCWhiYVtp XS0+Y21kX3Bvb2xfZGhhbmRsZSk7Ci0JCWtmcmVlKGhiYVtpXS0+Y21kX3Bvb2xfYml0cyk7CisJ a2ZyZWUoaGJhW2ldLT5jbWRfcG9vbF9iaXRzKTsKKwlyZWxlYXNlX2lvX21lbShoYmFbaV0pOwor CWZyZWVfaGJhKGkpOworfQorCisvKiByZW1vdmluZyBhbiBpbnN0YW5jZSB0aGF0IHdhcyBub3Qg cmVtb3ZlZCBhdXRvbWF0aWNhbGx5Li4gCisgKiBtdXN0IGJlIGFuIGVpc2EgY2FyZC4gCisgKi8K K3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBjcHFhcnJheV9yZW1vdmVfb25lX2Vpc2EgKGludCBpKQor eworCWNoYXIgYnVmZls0XTsgCiAKLQkJZGVsX2dlbmRpc2soJmlkYV9nZW5kaXNrW2ldKTsKKwlp ZiAoaGJhW2ldID09IE5VTEwpIAorCXsKKwkJcHJpbnRrKEtFUk5fRVJSICJjcHFhcnJheTogZGV2 aWNlIGFwcGVhcnMgdG8gIgorCQkJImFscmVhZHkgYmUgcmVtb3ZlZCBcbiIpOworCQlyZXR1cm47 CiAJfQotCXJlbW92ZV9wcm9jX2VudHJ5KCJjcHFhcnJheSIsIHByb2Nfcm9vdF9kcml2ZXIpOwot CWtmcmVlKGlkYSk7Ci0Ja2ZyZWUoaWRhX3NpemVzKTsKLQlrZnJlZShpZGFfaGFyZHNpemVzKTsK LQlrZnJlZShpZGFfYmxvY2tzaXplcyk7Ci19Ci0jZW5kaWYgLyogTU9EVUxFICovCiAKKwkvKiBz ZW5kY21kIHdpbGwgdHVybiBvZmYgaW50ZXJydXB0LCBhbmQgc2VuZCB0aGUgZmx1c2guLi4gCisJ ICogVG8gd3JpdGUgYWxsIGRhdGEgaW4gdGhlIGJhdHRlcnkgYmFja2VkIGNhY2hlIHRvIGRpc2tz ICAgIAorCSAqIG5vIGRhdGEgcmV0dXJuZWQsIGJ1dCBkb24ndCB3YW50IHRvIHNlbmQgTlVMTCB0 byBzZW5kY21kICovCQorCWlmKCBzZW5kY21kKEZMVVNIX0NBQ0hFLCBpLCBidWZmLCA0LCAwLCAw LCAwKSkKKwl7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuYWJsZSB0byBmbHVzaCBjYWNoZSBv biBjb250cm9sbGVyICVkXG4iLAorCQkJIGkpOwkKKwl9CisJZnJlZV9pcnEoaGJhW2ldLT5pbnRy LCBoYmFbaV0pOworCS8qIHJlbW92ZSBpdCBmcm9tIHRoZSBkaXNrIGxpc3QgKi8KKwlkZWxfZ2Vu ZGlzaygmKGhiYVtpXS0+Z2VuZGlzaykpOworCisJaW91bm1hcChoYmFbaV0tPnZhZGRyKTsKKwl1 bnJlZ2lzdGVyX2Jsa2RldihNQUpPUl9OUitpLCBoYmFbaV0tPmRldm5hbWUpOworCWRlbF90aW1l cigmaGJhW2ldLT50aW1lcik7CisJYmxrX2NsZWFudXBfcXVldWUoQkxLX0RFRkFVTFRfUVVFVUUo TUFKT1JfTlIgKyBpKSk7CisJcmVtb3ZlX3Byb2NfZW50cnkoaGJhW2ldLT5kZXZuYW1lLCBwcm9j X2FycmF5KTsKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGhiYVtpXS0+cGNpX2RldiwgCisJCQlOUl9D TURTICogc2l6ZW9mKGNtZGxpc3RfdCksIChoYmFbaV0tPmNtZF9wb29sKSwgCisJCQloYmFbaV0t PmNtZF9wb29sX2RoYW5kbGUpOworCWtmcmVlKGhiYVtpXS0+Y21kX3Bvb2xfYml0cyk7CisJcmVs ZWFzZV9pb19tZW0oaGJhW2ldKTsKKwlmcmVlX2hiYShpKTsKK30KIHN0YXRpYyBpbmxpbmUgaW50 IGNwcV9uZXdfc2VnbWVudChyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCByZXF1ZXN0ICpycSwK IAkJCQkgIGludCBtYXhfc2VnbWVudHMpCiB7CkBAIC0zODYsMjQ2ICs0NzAsMTg2IEBACiAJcmV0 dXJuIDE7CiB9CiAKLS8qCi0gKiAgVGhpcyBpcyBpdC4gIEZpbmQgYWxsIHRoZSBjb250cm9sbGVy cyBhbmQgcmVnaXN0ZXIgdGhlbS4gIEkgcmVhbGx5IGhhdGUKLSAqICBzdGVhbGluZyBhbGwgdGhl c2UgbWFqb3IgZGV2aWNlIG51bWJlcnMuCi0gKiAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJsb2Nr IGRldmljZXMgcmVnaXN0ZXJlZC4KLSAqLwotaW50IF9faW5pdCBjcHFhcnJheV9pbml0KHZvaWQp CitzdGF0aWMgaW50IF9faW5pdCBjcHFhcnJheV9pbml0X29uZSggc3RydWN0IHBjaV9kZXYgKnBk ZXYsCisJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKIAlyZXF1ZXN0X3F1ZXVl X3QgKnE7Ci0JaW50IGksajsKLQlpbnQgbnVtX2NudGxyc19yZWcgPSAwOworICAgICAgICBpbnQg aSxqOwogCi0JLyogZGV0ZWN0IGNvbnRyb2xsZXJzICovCi0JY3BxYXJyYXlfcGNpX2RldGVjdCgp OwotCWNwcWFycmF5X2Vpc2FfZGV0ZWN0KCk7Ci0JCi0JaWYgKG5yX2N0bHIgPT0gMCkKLQkJcmV0 dXJuKG51bV9jbnRscnNfcmVnKTsKIAotCXByaW50ayhEUklWRVJfTkFNRSAiXG4iKTsKLQlwcmlu dGsoIkZvdW5kICVkIGNvbnRyb2xsZXIocylcbiIsIG5yX2N0bHIpOwotCi0JLyogYWxsb2NhdGUg c3BhY2UgZm9yIGRpc2sgc3RydWN0cyAqLwotCWlkYSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBo ZF9zdHJ1Y3QpKm5yX2N0bHIqTldEKjE2LCBHRlBfS0VSTkVMKTsKLQlpZihpZGE9PU5VTEwpCi0J ewotCQlwcmludGsoIEtFUk5fRVJSICJjcHFhcnJheTogb3V0IG9mIG1lbW9yeSIpOwotCQlyZXR1 cm4obnVtX2NudGxyc19yZWcpOwotCX0KLQkKLQlpZGFfc2l6ZXMgPSBrbWFsbG9jKHNpemVvZihp bnQpKm5yX2N0bHIqTldEKjE2LCBHRlBfS0VSTkVMKTsKLQlpZihpZGFfc2l6ZXM9PU5VTEwpCi0J ewotCQlrZnJlZShpZGEpOyAKLQkJcHJpbnRrKCBLRVJOX0VSUiAiY3BxYXJyYXk6IG91dCBvZiBt ZW1vcnkiKTsKLQkJcmV0dXJuKG51bV9jbnRscnNfcmVnKTsKLQl9Ci0KLQlpZGFfYmxvY2tzaXpl cyA9IGttYWxsb2Moc2l6ZW9mKGludCkqbnJfY3RscipOV0QqMTYsIEdGUF9LRVJORUwpOwotCWlm KGlkYV9ibG9ja3NpemVzPT1OVUxMKQotCXsKLQkJa2ZyZWUoaWRhKTsKLQkJa2ZyZWUoaWRhX3Np emVzKTsgCi0JCXByaW50ayggS0VSTl9FUlIgImNwcWFycmF5OiBvdXQgb2YgbWVtb3J5Iik7Ci0J CXJldHVybihudW1fY250bHJzX3JlZyk7Ci0JfQorCXByaW50ayhLRVJOX0RFQlVHICJjcHFhcnJh eTogRGV2aWNlIDB4JXggaGFzIGJlZW4gZm91bmQgYXQiCisJCSIgYnVzICVkIGRldiAlZCBmdW5j ICVkXG4iLAorCQlwZGV2LT5kZXZpY2UsIHBkZXYtPmJ1cy0+bnVtYmVyLCBQQ0lfU0xPVChwZGV2 LT5kZXZmbiksCisJCQlQQ0lfRlVOQyhwZGV2LT5kZXZmbikpOworCWkgPSBhbGxvY19jcHFhcnJh eV9oYmEoKTsKKwlpZiggaSA8IDAgKSAKKwkJcmV0dXJuICgtMSk7CisJbWVtc2V0KGhiYVtpXSwg MCwgc2l6ZW9mKGN0bHJfaW5mb190KSk7CisJc3ByaW50ZihoYmFbaV0tPmRldm5hbWUsICJpZGEl ZCIsIGkpOworICAgICAgICBoYmFbaV0tPmN0bHIgPSBpOworCS8qIEluaXRpYWxpemUgdGhlIHBk ZXYgZHJpdmVyIHByaXZhdGUgZGF0YSAqLworCXBkZXYtPmRyaXZlcl9kYXRhID0gaGJhW2ldOwog Ci0JaWRhX2hhcmRzaXplcyA9IGttYWxsb2Moc2l6ZW9mKGludCkqbnJfY3RscipOV0QqMTYsIEdG UF9LRVJORUwpOwotCWlmKGlkYV9oYXJkc2l6ZXM9PU5VTEwpCisJaWYgKGNwcWFycmF5X3BjaV9p bml0KGhiYVtpXSwgcGRldikgIT0gMCkKIAl7Ci0JCWtmcmVlKGlkYSk7Ci0JCWtmcmVlKGlkYV9z aXplcyk7IAotCQlrZnJlZShpZGFfYmxvY2tzaXplcyk7Ci0JCXByaW50ayggS0VSTl9FUlIgImNw cWFycmF5OiBvdXQgb2YgbWVtb3J5Iik7Ci0JCXJldHVybihudW1fY250bHJzX3JlZyk7CisJCXJl bGVhc2VfaW9fbWVtKGhiYVtpXSk7CisJCWZyZWVfaGJhKGkpOworCQlyZXR1cm4gKC0xKTsKIAl9 Ci0KLQltZW1zZXQoaWRhLCAwLCBzaXplb2Yoc3RydWN0IGhkX3N0cnVjdCkqbnJfY3RscipOV0Qq MTYpOwotCW1lbXNldChpZGFfc2l6ZXMsIDAsIHNpemVvZihpbnQpKm5yX2N0bHIqTldEKjE2KTsK LQltZW1zZXQoaWRhX2Jsb2Nrc2l6ZXMsIDAsIHNpemVvZihpbnQpKm5yX2N0bHIqTldEKjE2KTsK LQltZW1zZXQoaWRhX2hhcmRzaXplcywgMCwgc2l6ZW9mKGludCkqbnJfY3RscipOV0QqMTYpOwot CW1lbXNldChpZGFfZ2VuZGlzaywgMCwgc2l6ZW9mKHN0cnVjdCBnZW5kaXNrKSpNQVhfQ1RMUik7 Ci0KLQkJLyogCisJCQkKKwkvKiAKIAkgKiByZWdpc3RlciBibG9jayBkZXZpY2VzCiAJICogRmlu ZCBkaXNrcyBhbmQgZmlsbCBpbiBzdHJ1Y3RzCiAJICogR2V0IGFuIGludGVycnVwdCwgc2V0IHRo ZSBRIGRlcHRoIGFuZCBnZXQgaW50byAvcHJvYwogCSAqLwotCWZvcihpPTA7IGk8IG5yX2N0bHI7 IGkrKykgewotCSAgCS8qIElmIHRoaXMgc3VjY2Vzc2Z1bCBpdCBzaG91bGQgaW5zdXJlIHRoYXQg d2UgYXJlIHRoZSBvbmx5ICovCi0JCS8qIGluc3RhbmNlIG9mIHRoZSBkcml2ZXIgKi8JCi0JCWlm IChyZWdpc3Rlcl9ibGtkZXYoTUFKT1JfTlIraSwgaGJhW2ldLT5kZXZuYW1lLCAmaWRhX2ZvcHMp KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBwcmludGsoS0VSTl9FUlIgImNwcWFycmF5OiBV bmFibGUgdG8gZ2V0IG1ham9yIG51bWJlciAlZCBmb3IgaWRhXG4iLAorCQorCS8qIElmIHRoaXMg c3VjY2Vzc2Z1bCBpdCBzaG91bGQgaW5zdXJlIHRoYXQgd2UgYXJlIHRoZSBvbmx5ICovCisJLyog aW5zdGFuY2Ugb2YgdGhlIGRyaXZlciAqLwkKKwlpZiAocmVnaXN0ZXJfYmxrZGV2KE1BSk9SX05S K2ksIGhiYVtpXS0+ZGV2bmFtZSwgJmlkYV9mb3BzKSkgCisJeworICAgICAgICAJcHJpbnRrKEtF Uk5fRVJSICJjcHFhcnJheTogVW5hYmxlIHRvIGdldCBtYWpvciBudW1iZXIgJWQgZm9yIGlkYVxu IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTUFKT1JfTlIraSk7Ci0gICAgICAg ICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgcmVsZWFzZV9pb19tZW0oaGJhW2ldKTsKKyAgICAgICAgICAgICAgICBmcmVlX2hiYShp KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gKC0xKTsKKyAgICAgICAgfQogCiAJCi0JCWhiYVtp XS0+YWNjZXNzLnNldF9pbnRyX21hc2soaGJhW2ldLCAwKTsKLQkJaWYgKHJlcXVlc3RfaXJxKGhi YVtpXS0+aW50ciwgZG9faWRhX2ludHIsCi0JCQlTQV9JTlRFUlJVUFR8U0FfU0hJUlEsIGhiYVtp XS0+ZGV2bmFtZSwgaGJhW2ldKSkgeworCWhiYVtpXS0+YWNjZXNzLnNldF9pbnRyX21hc2soaGJh W2ldLCAwKTsKKwlpZiAocmVxdWVzdF9pcnEoaGJhW2ldLT5pbnRyLCBkb19pZGFfaW50ciwKKwkJ U0FfSU5URVJSVVBUfFNBX1NISVJRLCBoYmFbaV0tPmRldm5hbWUsIGhiYVtpXSkpIAorCXsKIAot CQkJcHJpbnRrKEtFUk5fRVJSICJjcHFhcnJheTogVW5hYmxlIHRvIGdldCBpcnEgJWQgZm9yICVz XG4iLCAKKwkJcHJpbnRrKEtFUk5fRVJSICJjcHFhcnJheTogVW5hYmxlIHRvIGdldCBpcnEgJWQg Zm9yICVzXG4iLCAKIAkJCQloYmFbaV0tPmludHIsIGhiYVtpXS0+ZGV2bmFtZSk7Ci0JCQl1bnJl Z2lzdGVyX2Jsa2RldihNQUpPUl9OUitpLCBoYmFbaV0tPmRldm5hbWUpOwotCQkJY29udGludWU7 Ci0JCX0KLQkJbnVtX2NudGxyc19yZWcrKzsKLQkJaGJhW2ldLT5jbWRfcG9vbCA9IChjbWRsaXN0 X3QgKilwY2lfYWxsb2NfY29uc2lzdGVudCgKLQkJCQloYmFbaV0tPnBjaV9kZXYsIE5SX0NNRFMg KiBzaXplb2YoY21kbGlzdF90KSwgCisJCXVucmVnaXN0ZXJfYmxrZGV2KE1BSk9SX05SK2ksIGhi YVtpXS0+ZGV2bmFtZSk7CisJCXJlbGVhc2VfaW9fbWVtKGhiYVtpXSk7CisgICAgICAgICAgICAg ICAgZnJlZV9oYmEoaSk7CisgICAgICAgICAgICAgICAgcmV0dXJuICgtMSk7CisJfQorCWhiYVtp XS0+Y21kX3Bvb2wgPSAoY21kbGlzdF90ICopcGNpX2FsbG9jX2NvbnNpc3RlbnQoCisJaGJhW2ld LT5wY2lfZGV2LCBOUl9DTURTICogc2l6ZW9mKGNtZGxpc3RfdCksIAogCQkJCSYoaGJhW2ldLT5j bWRfcG9vbF9kaGFuZGxlKSk7Ci0JCWhiYVtpXS0+Y21kX3Bvb2xfYml0cyA9IChfX3UzMiopa21h bGxvYygKKwloYmFbaV0tPmNtZF9wb29sX2JpdHMgPSAoX191MzIqKWttYWxsb2MoCiAJCQkJKChO Ul9DTURTKzMxKS8zMikqc2l6ZW9mKF9fdTMyKSwgR0ZQX0tFUk5FTCk7CiAJCQogCWlmKGhiYVtp XS0+Y21kX3Bvb2xfYml0cyA9PSBOVUxMIHx8IGhiYVtpXS0+Y21kX3Bvb2wgPT0gTlVMTCkKLQkJ ewotCQkJbnJfY3RsciA9IGk7IAotCQkJaWYoaGJhW2ldLT5jbWRfcG9vbF9iaXRzKQotCQkJCWtm cmVlKGhiYVtpXS0+Y21kX3Bvb2xfYml0cyk7Ci0JCQlpZihoYmFbaV0tPmNtZF9wb29sKQotCQkJ CXBjaV9mcmVlX2NvbnNpc3RlbnQoaGJhW2ldLT5wY2lfZGV2LCAKLQkJCQkJTlJfQ01EUyAqIHNp emVvZihjbWRsaXN0X3QpLCAKLQkJCQkJaGJhW2ldLT5jbWRfcG9vbCwgCi0JCQkJCWhiYVtpXS0+ Y21kX3Bvb2xfZGhhbmRsZSk7Ci0JCQlmcmVlX2lycShoYmFbaV0tPmludHIsIGhiYVtpXSk7Ci0J CQl1bnJlZ2lzdGVyX2Jsa2RldihNQUpPUl9OUitpLCBoYmFbaV0tPmRldm5hbWUpOwotCQkJbnVt X2NudGxyc19yZWctLTsKLSAgICAgICAgICAgICAgICAJcHJpbnRrKCBLRVJOX0VSUiAiY3BxYXJy YXk6IG91dCBvZiBtZW1vcnkiKTsKLQotCQkJLyogSWYgbnVtX2NudGxyc19yZWcgPT0gMCwgbm8g Y29udHJvbGxlcnMgd29ya2VkLiAKLQkJCSAqCWluaXRfbW9kdWxlIHdpbGwgZmFpbCwgc28gY2xl YW4gdXAgZ2xvYmFsIAotCQkJICoJbWVtb3J5IHRoYXQgY2xlYW5fbW9kdWxlIHdvdWxkIGRvLgot CQkJKi8JCi0JCi0JCQlpZiAobnVtX2NudGxyc19yZWcgPT0gMCkgCi0JCQl7Ci0JCQkJa2ZyZWUo aWRhKTsKLQkJCQlrZnJlZShpZGFfc2l6ZXMpOwotCQkJCWtmcmVlKGlkYV9oYXJkc2l6ZXMpOwot CQkJCWtmcmVlKGlkYV9ibG9ja3NpemVzKTsKLQkJCX0KLSAgICAgICAgICAgICAgICAJcmV0dXJu KG51bV9jbnRscnNfcmVnKTsKLQkKLQkJfQotCQltZW1zZXQoaGJhW2ldLT5jbWRfcG9vbCwgMCwg TlJfQ01EUyAqIHNpemVvZihjbWRsaXN0X3QpKTsKLQkJbWVtc2V0KGhiYVtpXS0+Y21kX3Bvb2xf Yml0cywgMCwgKChOUl9DTURTKzMxKS8zMikqc2l6ZW9mKF9fdTMyKSk7Ci0JCXByaW50ayhLRVJO X0lORk8gImNwcWFycmF5OiBGaW5kaW5nIGRyaXZlcyBvbiAlcyIsIAotCQkJaGJhW2ldLT5kZXZu YW1lKTsKLQkJZ2V0Z2VvbWV0cnkoaSk7Ci0JCXN0YXJ0X2Z3YmsoaSk7IAotCi0JCWhiYVtpXS0+ YWNjZXNzLnNldF9pbnRyX21hc2soaGJhW2ldLCBGSUZPX05PVF9FTVBUWSk7Ci0KLQkJaWRhX3By b2Npbml0KGkpOwotCi0JCXEgPSBCTEtfREVGQVVMVF9RVUVVRShNQUpPUl9OUiArIGkpOwotCQlx LT5xdWV1ZWRhdGEgPSBoYmFbaV07Ci0JCWJsa19pbml0X3F1ZXVlKHEsIGRvX2lkYV9yZXF1ZXN0 KTsKLQkJYmxrX3F1ZXVlX2hlYWRhY3RpdmUocSwgMCk7Ci0JCWJsa3NpemVfc2l6ZVtNQUpPUl9O UitpXSA9IGlkYV9ibG9ja3NpemVzICsgKGkqMjU2KTsKLQkJaGFyZHNlY3Rfc2l6ZVtNQUpPUl9O UitpXSA9IGlkYV9oYXJkc2l6ZXMgKyAoaSoyNTYpOwotCQlyZWFkX2FoZWFkW01BSk9SX05SK2ld ID0gUkVBRF9BSEVBRDsKLQotCQlxLT5iYWNrX21lcmdlX2ZuID0gY3BxX2JhY2tfbWVyZ2VfZm47 Ci0JCXEtPmZyb250X21lcmdlX2ZuID0gY3BxX2Zyb250X21lcmdlX2ZuOwotCQlxLT5tZXJnZV9y ZXF1ZXN0c19mbiA9IGNwcV9tZXJnZV9yZXF1ZXN0c19mbjsKLQotCQlpZGFfZ2VuZGlza1tpXS5t YWpvciA9IE1BSk9SX05SICsgaTsKLQkJaWRhX2dlbmRpc2tbaV0ubWFqb3JfbmFtZSA9ICJpZGEi OwotCQlpZGFfZ2VuZGlza1tpXS5taW5vcl9zaGlmdCA9IE5XRF9TSElGVDsKLQkJaWRhX2dlbmRp c2tbaV0ubWF4X3AgPSAxNjsKLQkJaWRhX2dlbmRpc2tbaV0ucGFydCA9IGlkYSArIChpKjI1Nik7 Ci0JCWlkYV9nZW5kaXNrW2ldLnNpemVzID0gaWRhX3NpemVzICsgKGkqMjU2KTsKLQkJaWRhX2dl bmRpc2tbaV0ubnJfcmVhbCA9IDA7IAorCXsKKwkJaWYoaGJhW2ldLT5jbWRfcG9vbF9iaXRzKQor CQkJa2ZyZWUoaGJhW2ldLT5jbWRfcG9vbF9iaXRzKTsKKwkJaWYoaGJhW2ldLT5jbWRfcG9vbCkK KwkJCXBjaV9mcmVlX2NvbnNpc3RlbnQoaGJhW2ldLT5wY2lfZGV2LCAKKwkJCQlOUl9DTURTICog c2l6ZW9mKGNtZGxpc3RfdCksIAorCQkJCWhiYVtpXS0+Y21kX3Bvb2wsIGhiYVtpXS0+Y21kX3Bv b2xfZGhhbmRsZSk7CisJCWZyZWVfaXJxKGhiYVtpXS0+aW50ciwgaGJhW2ldKTsKKwkJdW5yZWdp c3Rlcl9ibGtkZXYoTUFKT1JfTlIraSwgaGJhW2ldLT5kZXZuYW1lKTsKKyAgICAgICAgICAgICAg ICBwcmludGsoIEtFUk5fRVJSICJjcHFhcnJheTogb3V0IG9mIG1lbW9yeSIpOworCQlyZWxlYXNl X2lvX21lbShoYmFbaV0pOworICAgICAgICAgICAgICAgIGZyZWVfaGJhKGkpOworICAgICAgICAg ICAgICAgIHJldHVybiAoLTEpOworCX0KKwltZW1zZXQoaGJhW2ldLT5jbWRfcG9vbCwgMCwgTlJf Q01EUyAqIHNpemVvZihjbWRsaXN0X3QpKTsKKwltZW1zZXQoaGJhW2ldLT5jbWRfcG9vbF9iaXRz LCAwLCAoKE5SX0NNRFMrMzEpLzMyKSpzaXplb2YoX191MzIpKTsKKwlwcmludGsoS0VSTl9JTkZP ICJjcHFhcnJheTogRmluZGluZyBkcml2ZXMgb24gJXMiLCBoYmFbaV0tPmRldm5hbWUpOworCWdl dGdlb21ldHJ5KGkpOworCXN0YXJ0X2Z3YmsoaSk7IAorCisJaGJhW2ldLT5hY2Nlc3Muc2V0X2lu dHJfbWFzayhoYmFbaV0sIEZJRk9fTk9UX0VNUFRZKTsKKworCWlkYV9wcm9jaW5pdChpKTsKKwor CXEgPSBCTEtfREVGQVVMVF9RVUVVRShNQUpPUl9OUiArIGkpOworCXEtPnF1ZXVlZGF0YSA9IGhi YVtpXTsKKwlibGtfaW5pdF9xdWV1ZShxLCBkb19pZGFfcmVxdWVzdCk7CisJYmxrX3F1ZXVlX2hl YWRhY3RpdmUocSwgMCk7CisJYmxrc2l6ZV9zaXplW01BSk9SX05SK2ldID0gaGJhW2ldLT5ibG9j a3NpemVzOworCWhhcmRzZWN0X3NpemVbTUFKT1JfTlIraV0gPSBoYmFbaV0tPmhhcmRzaXplczsK KwlyZWFkX2FoZWFkW01BSk9SX05SK2ldID0gUkVBRF9BSEVBRDsKKworCXEtPmJhY2tfbWVyZ2Vf Zm4gPSBjcHFfYmFja19tZXJnZV9mbjsKKwlxLT5mcm9udF9tZXJnZV9mbiA9IGNwcV9mcm9udF9t ZXJnZV9mbjsKKwlxLT5tZXJnZV9yZXF1ZXN0c19mbiA9IGNwcV9tZXJnZV9yZXF1ZXN0c19mbjsK KworCWhiYVtpXS0+Z2VuZGlzay5tYWpvciA9IE1BSk9SX05SICsgaTsKKwloYmFbaV0tPmdlbmRp c2subWFqb3JfbmFtZSA9ICJpZGEiOworCWhiYVtpXS0+Z2VuZGlzay5taW5vcl9zaGlmdCA9IE5X RF9TSElGVDsKKwloYmFbaV0tPmdlbmRpc2subWF4X3AgPSAxNjsKKwloYmFbaV0tPmdlbmRpc2su cGFydCA9IGhiYVtpXS0+aGQ7CisJaGJhW2ldLT5nZW5kaXNrLnNpemVzID0gaGJhW2ldLT5zaXpl czsKKwloYmFbaV0tPmdlbmRpc2subnJfcmVhbCA9IGhiYVtpXS0+aGlnaGVzdF9sdW4rMTsgCiAJ CiAJCS8qIEdldCBvbiB0aGUgZGlzayBsaXN0ICovCi0JCWFkZF9nZW5kaXNrKCZpZGFfZ2VuZGlz a1tpXSk7CisJYWRkX2dlbmRpc2soJihoYmFbaV0tPmdlbmRpc2spKTsKIAotCQlpbml0X3RpbWVy KCZoYmFbaV0tPnRpbWVyKTsKLQkJaGJhW2ldLT50aW1lci5leHBpcmVzID0gamlmZmllcyArIElE QV9USU1FUjsKLQkJaGJhW2ldLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaGJhW2ldOwot CQloYmFbaV0tPnRpbWVyLmZ1bmN0aW9uID0gaWRhX3RpbWVyOwotCQlhZGRfdGltZXIoJmhiYVtp XS0+dGltZXIpOwotCi0JCWlkYV9nZW5pbml0KGkpOwotCQlmb3Ioaj0wOyBqPE5XRDsgaisrKQkK LQkJCXJlZ2lzdGVyX2Rpc2soJmlkYV9nZW5kaXNrW2ldLCAKLQkJCQlNS0RFVihNQUpPUl9OUitp LGo8PDQpLAotCQkJCTE2LCAmaWRhX2ZvcHMsIGhiYVtpXS0+ZHJ2W2pdLm5yX2Jsa3MpOworCWlu aXRfdGltZXIoJmhiYVtpXS0+dGltZXIpOworCWhiYVtpXS0+dGltZXIuZXhwaXJlcyA9IGppZmZp ZXMgKyBJREFfVElNRVI7CisJaGJhW2ldLT50aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpaGJh W2ldOworCWhiYVtpXS0+dGltZXIuZnVuY3Rpb24gPSBpZGFfdGltZXI7CisJYWRkX3RpbWVyKCZo YmFbaV0tPnRpbWVyKTsKKworCWlkYV9nZW5pbml0KGkpOworCWZvcihqPTA7IGo8TldEOyBqKysp CQorCQlyZWdpc3Rlcl9kaXNrKCYoaGJhW2ldLT5nZW5kaXNrKSwgTUtERVYoTUFKT1JfTlIraSxq PDw0KSwKKwkJCTE2LCAmaWRhX2ZvcHMsIGhiYVtpXS0+ZHJ2W2pdLm5yX2Jsa3MpOworCisJcmV0 dXJuKGkpOworfQorc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGNwcWFycmF5X3BjaV9kcml2ZXIg PSB7CisgICAgICAgIG5hbWU6ICAgImNwcWFycmF5IiwKKyAgICAgICAgcHJvYmU6ICBjcHFhcnJh eV9pbml0X29uZSwKKyAgICAgICAgcmVtb3ZlOiAgY3BxYXJyYXlfcmVtb3ZlX29uZSwKKyAgICAg ICAgaWRfdGFibGU6ICBjcHFhcnJheV9wY2lfZGV2aWNlX2lkLAorfTsKIAorLyoKKyAqICBUaGlz IGlzIGl0LiAgRmluZCBhbGwgdGhlIGNvbnRyb2xsZXJzIGFuZCByZWdpc3RlciB0aGVtLiAgSSBy ZWFsbHkgaGF0ZQorICogIHN0ZWFsaW5nIGFsbCB0aGVzZSBtYWpvciBkZXZpY2UgbnVtYmVycy4K KyAqICByZXR1cm5zIHRoZSBudW1iZXIgb2YgYmxvY2sgZGV2aWNlcyByZWdpc3RlcmVkLgorICov CitpbnQgX19pbml0IGNwcWFycmF5X2luaXQodm9pZCkKK3sKKwlpbnQgbnVtX2NudGxyc19yZWcg PSAwOworCWludCBpOworCisJLyogZGV0ZWN0IGNvbnRyb2xsZXJzICovCisJcHJpbnRrKERSSVZF Ul9OQU1FICJcbiIpOworCXBjaV9yZWdpc3Rlcl9kcml2ZXIoJmNwcWFycmF5X3BjaV9kcml2ZXIp OworCWNwcWFycmF5X2Vpc2FfZGV0ZWN0KCk7CisKKwlmb3IoaT0wOyBpPCBNQVhfQ1RMUjsgaSsr KQorICAgICAgICB7CisJCWlmIChoYmFbaV0gPT0gTlVMTCkKKwkJCW51bV9jbnRscnNfcmVnKys7 CiAJfQotCS8qIGRvbmUgISAqLwogCXJldHVybihudW1fY250bHJzX3JlZyk7CiB9Ci0KLS8qCi0g KiBGaW5kIHRoZSBjb250cm9sbGVyIGFuZCBpbml0aWFsaXplIGl0Ci0gKiAgQ2Fubm90IHVzZSB0 aGUgY2xhc3MgY29kZSB0byBzZWFyY2gsIGJlY2F1c2Ugb2xkZXIgYXJyYXkgY29udHJvbGxlcnMg dXNlCi0gKiAgICAweDAxODAwMCBhbmQgbmV3IG9uZXMgdXNlIDB4MDEwNDAwLiAgU28gSSBtaWdo dCBhcyB3ZWxsIHNlYXJjaCBmb3IgZWFjaAotICogICAgZWFjaCBkZXZpY2UgSURzLCBiZWluZyB0 aGVyZSBhcmUgb25seSBnb2luZyB0byBiZSB0aHJlZSBvZiB0aGVtLiAKLSAqLwotc3RhdGljIGlu dCBjcHFhcnJheV9wY2lfZGV0ZWN0KHZvaWQpCi17Ci0Jc3RydWN0IHBjaV9kZXYgKnBkZXY7Ci0K LSNkZWZpbmUgSURBX0JPQVJEX1RZUEVTIDMKLQlzdGF0aWMgaW50IGlkYV92ZW5kb3JfaWRbSURB X0JPQVJEX1RZUEVTXSA9IHsgUENJX1ZFTkRPUl9JRF9ERUMsIAotCQlQQ0lfVkVORE9SX0lEX05D UiwgUENJX1ZFTkRPUl9JRF9DT01QQVEgfTsKLQlzdGF0aWMgaW50IGlkYV9kZXZpY2VfaWRbSURB X0JPQVJEX1RZUEVTXSA9IHsgUENJX0RFVklDRV9JRF9DT01QQVFfNDJYWCwJCVBDSV9ERVZJQ0Vf SURfTkNSXzUzQzE1MTAsIFBDSV9ERVZJQ0VfSURfQ09NUEFRX1NNQVJUMlAgfTsKLQlpbnQgYnJk dHlwZTsKLQkKLQkvKiBzZWFyY2ggZm9yIGFsbCBQQ0kgYm9hcmQgdHlwZXMgdGhhdCBjb3VsZCBi ZSBmb3IgdGhpcyBkcml2ZXIgKi8KLQlmb3IoYnJkdHlwZT0wOyBicmR0eXBlPElEQV9CT0FSRF9U WVBFUzsgYnJkdHlwZSsrKQorLyogRnVuY3Rpb24gdG8gZmluZCB0aGUgZmlyc3QgZnJlZSBwb2lu dGVyIGludG8gb3VyIGhiYVtdIGFycmF5ICovCisvKiBSZXR1cm5zIC0xIGlmIG5vIGZyZWUgZW50 cmllcyBhcmUgbGVmdC4gICovCitzdGF0aWMgaW50IGFsbG9jX2NwcWFycmF5X2hiYSh2b2lkKQor eworCWludCBpOworCWZvcihpPTA7IGk8IE1BWF9DVExSOyBpKyspCiAJewotCQlwZGV2ID0gcGNp X2ZpbmRfZGV2aWNlKGlkYV92ZW5kb3JfaWRbYnJkdHlwZV0sCi0JCQkJICAgICAgIGlkYV9kZXZp Y2VfaWRbYnJkdHlwZV0sIE5VTEwpOwotCQl3aGlsZSAocGRldikgewotCQkJcHJpbnRrKEtFUk5f REVCVUcgImNwcWFycmF5OiBEZXZpY2UgMHgleCBoYXMiCi0JCQkJIiBiZWVuIGZvdW5kIGF0IGJ1 cyAlZCBkZXYgJWQgZnVuYyAlZFxuIiwKLQkJCQlpZGFfdmVuZG9yX2lkW2JyZHR5cGVdLAotCQkJ CXBkZXYtPmJ1cy0+bnVtYmVyLCBQQ0lfU0xPVChwZGV2LT5kZXZmbiksCi0JCQkJUENJX0ZVTkMo cGRldi0+ZGV2Zm4pKTsKLQkJCWlmIChucl9jdGxyID09IDgpIHsKLQkJCQlwcmludGsoS0VSTl9X QVJOSU5HICJjcHFhcnJheTogVGhpcyBkcml2ZXIiCi0JCQkJIiBzdXBwb3J0cyBhIG1heGltdW0g b2YgOCBjb250cm9sbGVycy5cbiIpOwotCQkJCWJyZWFrOwotCQkJfQotCQkJCi0vKiBpZiBpdCBp cyBhIFBDSV9ERVZJQ0VfSURfTkNSXzUzQzE1MTAsIG1ha2Ugc3VyZSBpdCdzIAkJCQl0aGUgQ29t cGFxIHZlcnNpb24gb2YgdGhlIGNoaXAgKi8gCi0KLQkJCWlmIChpZGFfZGV2aWNlX2lkW2JyZHR5 cGVdID09IFBDSV9ERVZJQ0VfSURfTkNSXzUzQzE1MTApCQkJewkKLQkJCQl1bnNpZ25lZCBzaG9y dCBzdWJ2ZW5kb3I9cGRldi0+c3Vic3lzdGVtX3ZlbmRvcjsKLQkJCQlpZihzdWJ2ZW5kb3IgIT0g IFBDSV9WRU5ET1JfSURfQ09NUEFRKQotCQkJCXsKLQkJCQkJcHJpbnRrKEtFUk5fREVCVUcgCi0J CQkJCQkiY3BxYXJyYXk6IG5vdCBhIENvbXBhcSBpbnRlZ3JhdGVkIGFycmF5IGNvbnRyb2xsZXJc biIpOwotCQkJCQljb250aW51ZTsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWhiYVtucl9jdGxyXSA9IGtt YWxsb2Moc2l6ZW9mKGN0bHJfaW5mb190KSwgR0ZQX0tFUk5FTCk7CQkJaWYoaGJhW25yX2N0bHJd PT1OVUxMKQorCQlpZiAoaGJhW2ldID09IE5VTEwpCisJCXsKKwkJCWhiYVtpXSA9IGttYWxsb2Mo c2l6ZW9mKGN0bHJfaW5mb190KSwgR0ZQX0tFUk5FTCk7CisJCQlpZihoYmFbaV09PU5VTEwpCiAJ CQl7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICJjcHFhcnJheTogb3V0IG9mIG1lbW9yeS5cbiIpOwot CQkJCWNvbnRpbnVlOworCQkJCXJldHVybiAoLTEpOwogCQkJfQotCQkJbWVtc2V0KGhiYVtucl9j dGxyXSwgMCwgc2l6ZW9mKGN0bHJfaW5mb190KSk7Ci0JCQlpZiAoY3BxYXJyYXlfcGNpX2luaXQo aGJhW25yX2N0bHJdLCBwZGV2KSAhPSAwKQotCQkJewotCQkJCWtmcmVlKGhiYVtucl9jdGxyXSk7 Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0JCQlzcHJpbnRmKGhiYVtucl9jdGxyXS0+ZGV2bmFtZSwg ImlkYSVkIiwgbnJfY3Rscik7Ci0JCQloYmFbbnJfY3Rscl0tPmN0bHIgPSBucl9jdGxyOwotCQkJ bnJfY3RscisrOwotCi0JCQlwZGV2ID0gcGNpX2ZpbmRfZGV2aWNlKGlkYV92ZW5kb3JfaWRbYnJk dHlwZV0sCi0JCQkJCSAgICAgICBpZGFfZGV2aWNlX2lkW2JyZHR5cGVdLCBwZGV2KTsKKwkJCXJl dHVybiAoaSk7CiAJCX0KIAl9CisJcHJpbnRrKEtFUk5fV0FSTklORyAiY3BxYXJyYXk6IFRoaXMg ZHJpdmVyIHN1cHBvcnRzIGEgbWF4aW11bSIKKwkJIiBvZiA4IGNvbnRyb2xsZXJzLlxuIik7CisJ cmV0dXJuKC0xKTsKK30KIAotCXJldHVybiBucl9jdGxyOworc3RhdGljIHZvaWQgZnJlZV9oYmEo aW50IGkpCit7CisJa2ZyZWUoaGJhW2ldKTsKKwloYmFbaV09TlVMTDsKIH0KIAogLyoKQEAgLTY0 Miw2ICs2NjYsMTQgQEAKIAogCWludCBpOwogCisJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwg UENJX0NPTU1BTkQsICZjb21tYW5kKTsKKwkvKiBjaGVjayB0byBzZWUgaWYgY29udHJvbGxlciBo YXMgYmVlbiBkaXNhYmxlZCAqLworCWlmKCEoY29tbWFuZCAmIDB4MDIpKQorCXsKKwkJcHJpbnRr KEtFUk5fV0FSTklORyAiY3BxYXJyYXk6IGNvbnRyb2xsZXIgYXBwZWFycyB0byBiZSBkaXNhYmxl ZFxuIik7CisJCXJldHVybigtMSk7CisJfQorCQogCWMtPnBjaV9kZXYgPSBwZGV2OwogCXZlbmRv cl9pZCA9IHBkZXYtPnZlbmRvcjsKIAlkZXZpY2VfaWQgPSBwZGV2LT5kZXZpY2U7CkBAIC02NjEs NyArNjkzLDYgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCXBjaV9yZWFkX2NvbmZpZ193b3JkKHBk ZXYsIFBDSV9DT01NQU5ELCAmY29tbWFuZCk7CiAJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwg UENJX0NMQVNTX1JFVklTSU9OLCAmcmV2aXNpb24pOwogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBk ZXYsIFBDSV9DQUNIRV9MSU5FX1NJWkUsICZjYWNoZV9saW5lX3NpemUpOwogCXBjaV9yZWFkX2Nv bmZpZ19ieXRlKHBkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAmbGF0ZW5jeV90aW1lcik7CkBAIC02 ODIsMTEgKzcxMywyOCBAQAogKTsKIAogCWMtPmludHIgPSBpcnE7Ci0JYy0+aW9hZGRyID0gYWRk clswXTsKLQorCWZvcihpPTA7IGk8NjsgaSsrKQorCXsKKwkJaWYgKHBjaV9yZXNvdXJjZV9mbGFn cyhwZGV2LCBpKSAmIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfSU8pCisJCXsgLyogSU8gc3BhY2Ug Ki8gIAorCQkJYy0+aW9fbWVtX2FkZHIgPSBhZGRyW2ldOworCQkJYy0+aW9fbWVtX2xlbmd0aCA9 IHBjaV9yZXNvdXJjZV9lbmQocGRldiwgaSkgCisJCQkJLSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRl diwgaSkgKzE7IAorCQkJLy8gcHJpbnRrKCJJTyBWYWx1ZSBmb3VuZCBhZGRyWyVkXSAlbHggJWx4 XG4iLAorCQkJLy8JCWksIGMtPmlvX21lbV9hZGRyLCBjLT5pb19tZW1fbGVuZ3RoKTsKKwkJCWlm KCFyZXF1ZXN0X3JlZ2lvbiggYy0+aW9fbWVtX2FkZHIsIGMtPmlvX21lbV9sZW5ndGgsCisJCQkJ ImNwcWFycmF5IikpCisJCQl7CisJCQkJcHJpbnRrKCBLRVJOX1dBUk5JTkcgImNwcWFycmF5IEkv TyBtZW1vcnkgcmFuZ2UgYWxyZWFkeSBpbiB1c2UgYWRkciAlbHggbGVuZ3RoID0gJWxkXG4iLCBj LT5pb19tZW1fYWRkciwgYy0+aW9fbWVtX2xlbmd0aCk7CisJCQkJYy0+aW9fbWVtX2FkZHIgPSAw OworCQkJCWMtPmlvX21lbV9sZW5ndGggPSAwOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9CQog CWMtPnBhZGRyID0gMDsKIAlmb3IoaT0wOyBpPDY7IGkrKykKLQkJaWYgKHBjaV9yZXNvdXJjZV9m bGFncyhwZGV2LCBpKSAmIElPUkVTT1VSQ0VfTUVNKSB7CisJCWlmICghKHBjaV9yZXNvdXJjZV9m bGFncyhwZGV2LCBpKSAmIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfSU8pKSB7CiAJCQljLT5wYWRk ciA9IHBjaV9yZXNvdXJjZV9zdGFydCAocGRldiwgaSk7CiAJCQlicmVhazsKIAkJfQpAQCAtNzY2 LDExICs4MTQsMTEgQEAKIAlpbnQgaT0wLCBqOwogCV9fdTMyIGJvYXJkX2lkOwogCWludCBpbnRy OwotCisJaW50IGN0bHI7CisJaW50IG51bV9jdGxyID0gMDsKIAl3aGlsZShpPDggJiYgZWlzYVtp XSkgewotCQlpZiAobnJfY3RsciA9PSA4KSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJjcHFh cnJheTogVGhpcyBkcml2ZXIgc3VwcG9ydHMiCi0JCQkJIiBhIG1heGltdW0gb2YgOCBjb250cm9s bGVycy5cbiIpOworCQljdGxyID0gYWxsb2NfY3BxYXJyYXlfaGJhKCk7CisJCWlmIChjdGxyID09 IC0xICkgewogCQkJYnJlYWs7CiAJCX0KIAkJYm9hcmRfaWQgPSBpbmwoZWlzYVtpXSsweEM4MCk7 CkBAIC03ODEsMTcgKzgyOSwyMSBAQAogCQlpZiAoaiA9PSBOUl9QUk9EVUNUUykgewogCQkJcHJp bnRrKEtFUk5fV0FSTklORyAiY3BxYXJyYXk6IFNvcnJ5LCBJIGRvbid0IGtub3cgaG93IgogCQkJ CSIgdG8gYWNjZXNzIHRoZSBTTUFSVCBBcnJheSBjb250cm9sbGVyICUwOGx4XG4iLAkJCQkgKHVu c2lnbmVkIGxvbmcpYm9hcmRfaWQpOworCQkJZnJlZV9oYmEoY3Rscik7CiAJCQljb250aW51ZTsK IAkJfQotCQloYmFbbnJfY3Rscl0gPSAoY3Rscl9pbmZvX3QgKikga21hbGxvYyhzaXplb2YoY3Rs cl9pbmZvX3QpLCBHRlBfS0VSTkVMKTsKLQkJaWYoaGJhW25yX2N0bHJdPT1OVUxMKQorCQltZW1z ZXQoaGJhW2N0bHJdLCAwLCBzaXplb2YoY3Rscl9pbmZvX3QpKTsKKwkJaGJhW2N0bHJdLT5pb19t ZW1fYWRkciA9IGVpc2FbaV07CisJCWhiYVtjdGxyXS0+aW9fbWVtX2xlbmd0aCA9IDB4N0ZGOwkJ CisJCWlmKCFyZXF1ZXN0X3JlZ2lvbiggaGJhW2N0bHJdLT5pb19tZW1fYWRkciwgCisJCQkJCWhi YVtjdGxyXS0+aW9fbWVtX2xlbmd0aCwgCisJCQkJImNwcWFycmF5IikpCiAJCXsKLQkJCXByaW50 ayhLRVJOX0VSUiAiY3BxYXJyYXk6IG91dCBvZiBtZW1vcnkuXG4iKTsKLQkJCWNvbnRpbnVlOwor CQkJcHJpbnRrKCBLRVJOX1dBUk5JTkcgImNwcWFycmF5OiBJLzAgcmFuZ2UgYWxyZWFkeSBpbiB1 c2UgYWRkciA9ICVseCBsZW5ndGg9JWxkXG4iLAorCQkJIGhiYVtjdGxyXS0+aW9fbWVtX2FkZHIs IGhiYVtjdGxyXS0+aW9fbWVtX2xlbmd0aCk7CisJCQlmcmVlX2hiYShjdGxyKTsKKwkJCWNvbnRp bnVlOwkKIAkJfQotCQltZW1zZXQoaGJhW25yX2N0bHJdLCAwLCBzaXplb2YoY3Rscl9pbmZvX3Qp KTsKLQkJaGJhW25yX2N0bHJdLT5pb2FkZHIgPSBlaXNhW2ldOwotCiAJCS8qCiAJCSAqIFJlYWQg dGhlIGNvbmZpZyByZWdpc3RlciB0byBmaW5kIG91ciBpbnRlcnJ1cHQKIAkJICovCkBAIC04MDEs MTMgKzg1MywxMyBAQAogCQllbHNlIGlmIChpbnRyICYgNCkgaW50ciA9IDE0OwogCQllbHNlIGlm IChpbnRyICYgOCkgaW50ciA9IDE1OwogCQkKLQkJaGJhW25yX2N0bHJdLT5pbnRyID0gaW50cjsK LQkJc3ByaW50ZihoYmFbbnJfY3Rscl0tPmRldm5hbWUsICJpZGElZCIsIG5yX2N0bHIpOwotCQlo YmFbbnJfY3Rscl0tPnByb2R1Y3RfbmFtZSA9IHByb2R1Y3RzW2pdLnByb2R1Y3RfbmFtZTsKLQkJ aGJhW25yX2N0bHJdLT5hY2Nlc3MgPSAqKHByb2R1Y3RzW2pdLmFjY2Vzcyk7Ci0JCWhiYVtucl9j dGxyXS0+Y3RsciA9IG5yX2N0bHI7Ci0JCWhiYVtucl9jdGxyXS0+Ym9hcmRfaWQgPSBib2FyZF9p ZDsKLQkJaGJhW25yX2N0bHJdLT5wY2lfZGV2ID0gTlVMTDsgLyogbm90IFBDSSAqLworCQloYmFb Y3Rscl0tPmludHIgPSBpbnRyOworCQlzcHJpbnRmKGhiYVtjdGxyXS0+ZGV2bmFtZSwgImlkYSVk IiwgY3Rscik7CisJCWhiYVtjdGxyXS0+cHJvZHVjdF9uYW1lID0gcHJvZHVjdHNbal0ucHJvZHVj dF9uYW1lOworCQloYmFbY3Rscl0tPmFjY2VzcyA9ICoocHJvZHVjdHNbal0uYWNjZXNzKTsKKwkJ aGJhW2N0bHJdLT5jdGxyID0gY3RscjsKKwkJaGJhW2N0bHJdLT5ib2FyZF9pZCA9IGJvYXJkX2lk OworCQloYmFbY3Rscl0tPnBjaV9kZXYgPSBOVUxMOyAvKiBub3QgUENJICovCiAKIERCR0lORk8o CiAJcHJpbnRrKCJpID0gJWQsIGogPSAlZFxuIiwgaSwgaik7CkBAIC04MTYsMTEgKzg2OCwxMSBA QAogCXByaW50aygiYm9hcmRfaWQgPSAleFxuIiwgYm9hcmRfaWQpOwogKTsKIAotCQlucl9jdGxy Kys7CisJCW51bV9jdGxyKys7CiAJCWkrKzsKIAl9CiAKLQlyZXR1cm4gbnJfY3RscjsKKwlyZXR1 cm4gbnVtX2N0bHI7CiB9CiAKIApAQCAtODM2LDggKzg4OCw3IEBACiAJaWYgKGN0bHIgPiBNQVhf Q1RMUiB8fCBoYmFbY3Rscl0gPT0gTlVMTCkKIAkJcmV0dXJuIC1FTlhJTzsKIAotCWlmICghc3Vz ZXIoKSAmJiBpZGFfc2l6ZXNbKGN0bHIgPDwgQ1RMUl9TSElGVCkgKwotCQkJCQkJTUlOT1IoaW5v ZGUtPmlfcmRldildID09IDApCisJaWYgKCFzdXNlcigpICYmIGhiYVtjdGxyXS0+c2l6ZXNbIE1J Tk9SKGlub2RlLT5pX3JkZXYpXSA9PSAwKQogCQlyZXR1cm4gLUVOWElPOwogCiAJLyoKQEAgLTg0 Nyw3ICs4OTgsNyBAQAogCSAqIGZvciAicmF3IGNvbnRyb2xsZXIiLgogCSAqLwogCWlmIChzdXNl cigpCi0JCSYmIGlkYV9zaXplc1soY3RsciA8PCBDVExSX1NISUZUKSArIE1JTk9SKGlub2RlLT5p X3JkZXYpXSA9PSAwIAorCQkmJiBoYmFbY3Rscl0tPnNpemVzWyBNSU5PUihpbm9kZS0+aV9yZGV2 KV0gPT0gMCAKIAkJJiYgTUlOT1IoaW5vZGUtPmlfcmRldikgIT0gMCkKIAkJcmV0dXJuIC1FTlhJ TzsKIApAQCAtOTMyLDcgKzk4Myw3IEBACiAJaWYgKGNyZXEtPm5yX3NlZ21lbnRzID4gU0dfTUFY KQogCQlCVUcoKTsKIAotCWlmIChoLT5jdGxyICE9IE1BSk9SKGNyZXEtPnJxX2RldiktTUFKT1Jf TlIgfHwgaC0+Y3RsciA+IG5yX2N0bHIpCisJaWYgKGgtPmN0bHIgIT0gTUFKT1IoY3JlcS0+cnFf ZGV2KS1NQUpPUl9OUiApCiAJewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJkb3JlcSBjbWQgZm9y ICVkLCAleCBhdCAlcFxuIiwKIAkJCQloLT5jdGxyLCBjcmVxLT5ycV9kZXYsIGNyZXEpOwpAQCAt OTU1LDkgKzEwMDYsMTEgQEAKIAljLT5oZHIuc2l6ZSA9IHNpemVvZihyYmxrX3QpID4+IDI7CiAJ Yy0+c2l6ZSArPSBzaXplb2YocmJsa190KTsKIAotCWMtPnJlcS5oZHIuYmxrID0gaWRhWyhoLT5j dGxyPDxDVExSX1NISUZUKSArIE1JTk9SKGNyZXEtPnJxX2RldildLnN0YXJ0X3NlY3QgKyBjcmVx LT5zZWN0b3I7CisJYy0+cmVxLmhkci5ibGsgPSBoYmFbaC0+Y3Rscl0tPmhkW01JTk9SKGNyZXEt PnJxX2RldildLnN0YXJ0X3NlY3QgCisJCQkJKyBjcmVxLT5zZWN0b3I7CiAJYy0+YmggPSBiaDsK LURCR1BYKAorREJHUFgKKwkJCQkoCiAJaWYgKGJoID09IE5VTEwpCiAJCXBhbmljKCJiaCA9PSBO VUxMPyIpOwogCQpAQCAtMTE5MywzMyArMTI0Niw1NiBAQAogCWludCBjdGxyID0gTUFKT1IoaW5v ZGUtPmlfcmRldikgLSBNQUpPUl9OUjsKIAlpbnQgZHNrICA9IE1JTk9SKGlub2RlLT5pX3JkZXYp ID4+IE5XRF9TSElGVDsKIAlpbnQgZXJyb3I7Ci0JaW50IGRpc2tpbmZvWzRdOwotCXN0cnVjdCBo ZF9nZW9tZXRyeSAqZ2VvID0gKHN0cnVjdCBoZF9nZW9tZXRyeSAqKWFyZzsKIAlpZGFfaW9jdGxf dCAqaW8gPSAoaWRhX2lvY3RsX3QqKWFyZzsKIAlpZGFfaW9jdGxfdCBteV9pbzsKIAogCXN3aXRj aChjbWQpIHsKIAljYXNlIEhESU9fR0VUR0VPOgotCQlpZiAoaGJhW2N0bHJdLT5kcnZbZHNrXS5j eWxpbmRlcnMpIHsKLQkJCWRpc2tpbmZvWzBdID0gaGJhW2N0bHJdLT5kcnZbZHNrXS5oZWFkczsK LQkJCWRpc2tpbmZvWzFdID0gaGJhW2N0bHJdLT5kcnZbZHNrXS5zZWN0b3JzOwotCQkJZGlza2lu Zm9bMl0gPSBoYmFbY3Rscl0tPmRydltkc2tdLmN5bGluZGVyczsKLQkJfSBlbHNlIHsKLQkJCWRp c2tpbmZvWzBdID0gMHhmZjsKLQkJCWRpc2tpbmZvWzFdID0gMHgzZjsKLQkJCWRpc2tpbmZvWzJd ID0gaGJhW2N0bHJdLT5kcnZbZHNrXS5ucl9ibGtzIC8gKDB4ZmYqMHgzZik7Ci0JCX0KLQkJcHV0 X3VzZXIoZGlza2luZm9bMF0sICZnZW8tPmhlYWRzKTsKLQkJcHV0X3VzZXIoZGlza2luZm9bMV0s ICZnZW8tPnNlY3RvcnMpOwotCQlwdXRfdXNlcihkaXNraW5mb1syXSwgJmdlby0+Y3lsaW5kZXJz KTsKLQkJcHV0X3VzZXIoaWRhWyhjdGxyPDxDVExSX1NISUZUKStNSU5PUihpbm9kZS0+aV9yZGV2 KV0uc3RhcnRfc2VjdCwgJmdlby0+c3RhcnQpOwotCQlyZXR1cm4gMDsKKwl7CisgICAgICAgICAg ICAgICAgc3RydWN0IGhkX2dlb21ldHJ5IGRyaXZlcl9nZW87CisgICAgICAgICAgICAgICAgaWYg KGhiYVtjdGxyXS0+ZHJ2W2Rza10uY3lsaW5kZXJzKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICBkcml2ZXJfZ2VvLmhlYWRzID0gaGJhW2N0bHJdLT5kcnZbZHNrXS5oZWFkczsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGRyaXZlcl9nZW8uc2VjdG9ycyA9IGhiYVtjdGxyXS0+ZHJ2W2Rza10u c2VjdG9yczsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlcl9nZW8uY3lsaW5kZXJzID0g aGJhW2N0bHJdLT5kcnZbZHNrXS5jeWxpbmRlcnM7CisgICAgICAgICAgICAgICAgfSBlbHNlIHsK KyAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlcl9nZW8uaGVhZHMgPSAweGZmOworICAgICAg ICAgICAgICAgICAgICAgICAgZHJpdmVyX2dlby5zZWN0b3JzID0gMHgzZjsKKyAgICAgICAgICAg ICAgICAgICAgICAgIGRyaXZlcl9nZW8uY3lsaW5kZXJzID0gaGJhW2N0bHJdLT5kcnZbZHNrXS5u cl9ibGtzIC8gKDB4ZmYqMHgzZik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg IGRyaXZlcl9nZW8uc3RhcnQ9CisgICAgICAgICAgICAgICAgICAgICAgICBoYmFbY3Rscl0tPmhk W01JTk9SKGlub2RlLT5pX3JkZXYpXS5zdGFydF9zZWN0OworICAgICAgICAgICAgICAgIGlmIChj b3B5X3RvX3VzZXIoKHZvaWQgKikgYXJnLCAmZHJpdmVyX2dlbywKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZW9mKCBzdHJ1Y3QgaGRfZ2VvbWV0cnkpKSkKKyAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiAgLUVGQVVMVDsKKyAgICAgICAgICAgICAgICByZXR1cm4oMCk7 CisJfQorCWNhc2UgSERJT19HRVRHRU9fQklHOgorICAgICAgICB7CisJCXN0cnVjdCBoZF9iaWdf Z2VvbWV0cnkgZHJpdmVyX2dlbzsKKyAgICAgICAgICAgICAgICBpZiAoaGJhW2N0bHJdLT5kcnZb ZHNrXS5jeWxpbmRlcnMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRyaXZlcl9nZW8uaGVh ZHMgPSBoYmFbY3Rscl0tPmRydltkc2tdLmhlYWRzOworICAgICAgICAgICAgICAgICAgICAgICAg ZHJpdmVyX2dlby5zZWN0b3JzID0gaGJhW2N0bHJdLT5kcnZbZHNrXS5zZWN0b3JzOworICAgICAg ICAgICAgICAgICAgICAgICAgZHJpdmVyX2dlby5jeWxpbmRlcnMgPSBoYmFbY3Rscl0tPmRydltk c2tdLmN5bGluZGVyczsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAg ICAgICAgICAgZHJpdmVyX2dlby5oZWFkcyA9IDB4ZmY7CisgICAgICAgICAgICAgICAgICAgICAg ICBkcml2ZXJfZ2VvLnNlY3RvcnMgPSAweDNmOworICAgICAgICAgICAgICAgICAgICAgICAgZHJp dmVyX2dlby5jeWxpbmRlcnMgPSBoYmFbY3Rscl0tPmRydltkc2tdLm5yX2Jsa3MgLyAoMHhmZiow eDNmKTsKKyAgICAgICAgICAgICAgCX0KKwkgICAgICAJZHJpdmVyX2dlby5zdGFydD0gCisJCQlo YmFbY3Rscl0tPmhkW01JTk9SKGlub2RlLT5pX3JkZXYpXS5zdGFydF9zZWN0OworCQlpZiAoY29w eV90b191c2VyKCh2b2lkICopIGFyZywgJmRyaXZlcl9nZW8sICAKKwkJCQlzaXplb2YoIHN0cnVj dCBoZF9iaWdfZ2VvbWV0cnkpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAgLUVG QVVMVDsKKyAgICAgICAgICAgICAgICByZXR1cm4oMCk7CisgICAgICAgIH0KIAljYXNlIElEQUdF VERSVklORk86CiAJCXJldHVybiBjb3B5X3RvX3VzZXIoJmlvLT5jLmRydiwmaGJhW2N0bHJdLT5k cnZbZHNrXSxzaXplb2YoZHJ2X2luZm9fdCkpOwogCWNhc2UgQkxLR0VUU0laRToKLQkJcmV0dXJu IHB1dF91c2VyKGlkYVsoY3Rscjw8Q1RMUl9TSElGVCkrTUlOT1IoaW5vZGUtPmlfcmRldildLm5y X3NlY3RzLCAobG9uZyopYXJnKTsKKwkJaWYgKCFhcmcpIHJldHVybiAtRUlOVkFMOworCQlyZXR1 cm4gcHV0X3VzZXIoaGJhW2N0bHJdLT5oZFtNSU5PUihpbm9kZS0+aV9yZGV2KV0ubnJfc2VjdHMs IAorCQkJCQkobG9uZyopYXJnKTsKIAljYXNlIEJMS0dFVFNJWkU2NDoKLQkJcmV0dXJuIHB1dF91 c2VyKCh1NjQpKGlkYVsoY3Rscjw8Q1RMUl9TSElGVCkrTUlOT1IoaW5vZGUtPmlfcmRldildLm5y X3NlY3RzKSA8PCA5LCAodTY0KilhcmcpOworCQlyZXR1cm4gcHV0X3VzZXIoKHU2NCkoaGJhW2N0 bHJdLT5oZFtNSU5PUihpbm9kZS0+aV9yZGV2KV0ubnJfc2VjdHMpIDw8IDksICh1NjQqKWFyZyk7 CiAJY2FzZSBCTEtSUlBBUlQ6CiAJCXJldHVybiByZXZhbGlkYXRlX2xvZ3ZvbChpbm9kZS0+aV9y ZGV2LCAxKTsKIAljYXNlIElEQVBBU1NUSFJVOgpAQCAtMTI1NCw2ICsxMzMwLDEzIEBACiAJCQkJ cmV0dXJuIC1FRkFVTFQ7CiAJCXJldHVybigwKTsKIAl9CQorCWNhc2UgSURBREVSRUdESVNLOgor CQkJcmV0dXJuKCBkZXJlZ2lzdGVyX2Rpc2soY3Rscixkc2spKTsKKwljYXNlIElEQVJFR05FV0RJ U0s6CisJeworCQlpbnQgbG9ndm9sID0gYXJnOyAKKwkJcmV0dXJuKHJlZ2lzdGVyX25ld19kaXNr KGN0bHIsIGxvZ3ZvbCkpOworCX0JCiAKIAljYXNlIEJMS0ZMU0JVRjoKIAljYXNlIEJMS0JTWlNF VDoKQEAgLTE1OTUsMTIgKzE2NzgsMTIgQEAKIAkgKiBTZXQgdGhlIHBhcnRpdGlvbiBhbmQgYmxv Y2sgc2l6ZSBzdHJ1Y3R1cmVzIGZvciBhbGwgdm9sdW1lcwogCSAqIG9uIHRoaXMgY29udHJvbGxl ciB0byB6ZXJvLiAgV2Ugd2lsbCByZXJlYWQgYWxsIG9mIHRoaXMgZGF0YQogCSAqLwotCW1lbXNl dChpZGErKGN0bHIqMjU2KSwgICAgICAgICAgICAwLCBzaXplb2Yoc3RydWN0IGhkX3N0cnVjdCkq TldEKjE2KTsKLQltZW1zZXQoaWRhX3NpemVzKyhjdGxyKjI1NiksICAgICAgMCwgc2l6ZW9mKGlu dCkqTldEKjE2KTsKLQltZW1zZXQoaWRhX2Jsb2Nrc2l6ZXMrKGN0bHIqMjU2KSwgMCwgc2l6ZW9m KGludCkqTldEKjE2KTsKLQltZW1zZXQoaWRhX2hhcmRzaXplcysoY3RscioyNTYpLCAgMCwgc2l6 ZW9mKGludCkqTldEKjE2KTsKLQltZW1zZXQoaGJhW2N0bHJdLT5kcnYsICAgICAgICAgICAgMCwg c2l6ZW9mKGRydl9pbmZvX3QpKk5XRCk7Ci0JaWRhX2dlbmRpc2tbY3Rscl0ubnJfcmVhbCA9IDA7 CisJbWVtc2V0KGhiYVtjdGxyXS0+aGQsICAgICAgICAgMCwgc2l6ZW9mKHN0cnVjdCBoZF9zdHJ1 Y3QpKk5XRCoxNik7CisJbWVtc2V0KGhiYVtjdGxyXS0+c2l6ZXMsICAgICAgMCwgc2l6ZW9mKGlu dCkqTldEKjE2KTsKKwltZW1zZXQoaGJhW2N0bHJdLT5ibG9ja3NpemVzLCAwLCBzaXplb2YoaW50 KSpOV0QqMTYpOworCW1lbXNldChoYmFbY3Rscl0tPmhhcmRzaXplcywgIDAsIHNpemVvZihpbnQp Kk5XRCoxNik7CisJbWVtc2V0KGhiYVtjdGxyXS0+ZHJ2LCAgICAgICAgMCwgc2l6ZW9mKGRydl9p bmZvX3QpKk5XRCk7CisJaGJhW2N0bHJdLT5nZW5kaXNrLm5yX3JlYWwgPSAwOwogCiAJLyoKIAkg KiBUZWxsIHRoZSBhcnJheSBjb250cm9sbGVyIG5vdCB0byBnaXZlIHVzIGFueSBpbnRlcnJ1cHRz IHdoaWxlCkBAIC0xNjEzLDEzICsxNjk2LDI1NyBAQAogCiAJaWRhX2dlbmluaXQoY3Rscik7CiAJ Zm9yKGk9MDsgaTxOV0Q7IGkrKykKLQkJaWYgKGlkYV9zaXplc1soY3Rscjw8Q1RMUl9TSElGVCkg KyAoaTw8TldEX1NISUZUKV0pCisJCWlmIChoYmFbY3Rscl0tPnNpemVzW2k8PE5XRF9TSElGVF0p CiAJCQlyZXZhbGlkYXRlX2xvZ3ZvbChkZXYrKGk8PE5XRF9TSElGVCksIDIpOwogCiAJaGJhW2N0 bHJdLT51c2FnZV9jb3VudC0tOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGRlcmVnaXN0 ZXJfZGlzayhpbnQgY3RsciwgaW50IGxvZ3ZvbCkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwor CXN0cnVjdCBnZW5kaXNrICpnZGV2ID0gJihoYmFbY3Rscl0tPmdlbmRpc2spOyAKKwljdGxyX2lu Zm9fdCAgKmggPSBoYmFbY3Rscl07CisJaW50IHN0YXJ0LCBtYXhfcCwgaTsJCisKKworCWlmICgh Y2FwYWJsZShDQVBfU1lTX1JBV0lPKSkKKwkJcmV0dXJuIC1FUEVSTTsKKworCXNwaW5fbG9ja19p cnFzYXZlKCZpb19yZXF1ZXN0X2xvY2ssIGZsYWdzKTsKKwkvKiBtYWtlIHN1cmUgbG9naWNhbCB2 b2x1bWUgaXMgTk9UIGlzIHVzZSAqLworCWlmKCBoLT5kcnZbbG9ndm9sXS51c2FnZV9jb3VudCA+ IDEpCisJeworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb19yZXF1ZXN0X2xvY2ssIGZsYWdz KTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLUVCVVNZOworCX0KKwloLT5kcnZbbG9ndm9sXS51 c2FnZV9jb3VudCsrOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvX3JlcXVlc3RfbG9jaywg ZmxhZ3MpOworCisJLyogaW52YWxpZGF0ZSB0aGUgZGV2aWNlcyBhbmQgZGVyZWdpc3RlciB0aGUg ZGlzayAqLyAKKwltYXhfcCA9IGdkZXYtPm1heF9wOworCXN0YXJ0ID0gbG9ndm9sIDw8IGdkZXYt Pm1pbm9yX3NoaWZ0OworCWZvciAoaT1tYXhfcC0xOyBpPj0wOyBpLS0pCisJeworCQlpbnQgbWlu b3IgPSBzdGFydCtpOworCQkvLyBwcmludGsoImludmFsaWRhdGluZyggJWQgJWQpXG4iLCBjdGxy LCBtaW5vcik7CisJCWludmFsaWRhdGVfZGV2aWNlKE1LREVWKE1BSk9SX05SK2N0bHIsIG1pbm9y KSwgMSk7CisJCS8qIHNvIG9wZW4gd2lsbCBub3cgZmFpbCAqLworCQloYmFbY3Rscl0tPnNpemVz W21pbm9yXSA9IDA7CisJfQorCS8qIGNoZWNrIHRvIHNlZSBpZiBpdCB3YXMgdGhlIGxhc3QgZGlz ayAqLworCWlmIChsb2d2b2wgPT0gaC0+aGlnaGVzdF9sdW4pCisJeworCQkvKiBpZiBzbywgZmlu ZCB0aGUgbmV3IGhpZ2h0ZXN0IGx1biAqLworCQlpbnQgaSwgbmV3aGlnaGVzdCA9LTE7CisJCWZv cihpPTA7IGk8aC0+aGlnaGVzdF9sdW47IGkrKykKKwkJeworCQkJLyogaWYgdGhlIGRpc2sgaGFz IHNpemUgPiAwLCBpdCBpcyBhdmFpbGFibGUgKi8KKwkJCWlmIChoYmFbY3Rscl0tPnNpemVzW2kg PDwgZ2Rldi0+bWlub3Jfc2hpZnRdICE9IDApCisJCQkJbmV3aGlnaGVzdCA9IGk7CisJCX0KKwkJ aC0+aGlnaGVzdF9sdW4gPSBuZXdoaWdoZXN0OworCQkJCQorCX0KKwktLWgtPmxvZ19kcml2ZXM7 CisJZ2Rldi0+bnJfcmVhbCA9IGgtPmhpZ2hlc3RfbHVuKzE7IAorCS8qIHplcm8gb3V0IHRoZSBk aXNrIHNpemUgaW5mbyAqLyAKKwloLT5kcnZbbG9ndm9sXS5ucl9ibGtzID0gMDsKKwloLT5kcnZb bG9ndm9sXS5ibGtfc2l6ZSA9IDA7CisJcmV0dXJuKDApOworCit9CisKK3N0YXRpYyBpbnQgc2Vu ZGNtZF93aXRoaXJxKAorCV9fdTgJY21kLAorCWludAljdGxyLAorCXZvaWQJKmJ1ZmYsCisJc2l6 ZV90CXNpemUsCisJdW5zaWduZWQgaW50IGJsaywKKwl1bnNpZ25lZCBpbnQgYmxrY250LAorCXVu c2lnbmVkIGludCBsb2dfdW5pdCApCit7CisJY21kbGlzdF90ICpjOworCXVuc2lnbmVkIGxvbmcg ZmxhZ3M7CisJY3Rscl9pbmZvX3QgKmluZm9fcCA9IGhiYVtjdGxyXTsKKworCWMgPSBjbWRfYWxs b2MoaW5mb19wLCAwKTsKKwlpZighYykKKwkJcmV0dXJuIElPX0VSUk9SOworCWMtPnR5cGUgPSBD TURfSU9DVExfUEVORDsKKwljLT5jdGxyID0gY3RscjsKKwljLT5oZHIudW5pdCA9IGxvZ191bml0 OworCWMtPmhkci5wcmlvID0gMDsKKwljLT5oZHIuc2l6ZSA9IHNpemVvZihyYmxrX3QpID4+IDI7 CisJYy0+c2l6ZSArPSBzaXplb2YocmJsa190KTsKKworCS8qIFRoZSByZXF1ZXN0IGluZm9ybWF0 aW9uLiAqLworCWMtPnJlcS5oZHIubmV4dCA9IDA7CisJYy0+cmVxLmhkci5yY29kZSA9IDA7CisJ Yy0+cmVxLmJwID0gMDsKKwljLT5yZXEuaGRyLnNnX2NudCA9IDE7CisJYy0+cmVxLmhkci5yZXNl cnZlZCA9IDA7CisKKwlpZiAoc2l6ZSA9PSAwKQorCQljLT5yZXEuc2dbMF0uc2l6ZSA9IDUxMjsK KwllbHNlCisJCWMtPnJlcS5zZ1swXS5zaXplID0gc2l6ZTsKKworCWMtPnJlcS5oZHIuYmxrID0g YmxrOworCWMtPnJlcS5oZHIuYmxrX2NudCA9IGJsa2NudDsKKwljLT5yZXEuaGRyLmNtZCA9ICh1 bnNpZ25lZCBjaGFyKSBjbWQ7CisJYy0+cmVxLnNnWzBdLmFkZHIgPSAoX191MzIpIHBjaV9tYXBf c2luZ2xlKGluZm9fcC0+cGNpX2RldiwgCisJCWJ1ZmYsIGMtPnJlcS5zZ1swXS5zaXplLCBQQ0lf RE1BX0JJRElSRUNUSU9OQUwpOworCisJLyogUHV0IHRoZSByZXF1ZXN0IG9uIHRoZSB0YWlsIG9m IHRoZSByZXF1ZXN0IHF1ZXVlICovCisJc3Bpbl9sb2NrX2lycXNhdmUoJmlvX3JlcXVlc3RfbG9j aywgZmxhZ3MpOworCWFkZFEoJmluZm9fcC0+cmVxUSwgYyk7CisJaW5mb19wLT5RZGVwdGgrKzsK KwlzdGFydF9pbyhpbmZvX3ApOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvX3JlcXVlc3Rf bG9jaywgZmxhZ3MpOworCisJLyogV2FpdCBmb3IgY29tcGxldGlvbiAqLworCXdoaWxlKGMtPnR5 cGUgIT0gQ01EX0lPQ1RMX0RPTkUpCisJCXNjaGVkdWxlKCk7CisKKwlpZiAoYy0+cmVxLmhkci5y Y29kZSAmIFJDT0RFX0ZBVEFMKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkZhdGFsIGVycm9y IG9uIGlkYS9jJWRkJWRcbiIsCisJCQkJYy0+Y3RsciwgYy0+aGRyLnVuaXQpOworCQljbWRfZnJl ZShpbmZvX3AsIGMsIDApOworCQlyZXR1cm4oSU9fRVJST1IpOworCX0KKwlpZiAoYy0+cmVxLmhk ci5yY29kZSAmIFJDT0RFX0lOVlJFUSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJJbnZhbGlk IHJlcXVlc3Qgb24gaWRhL2MlZGQlZCA9IChjbWQ9JXggc2VjdD0lZCBjbnQ9JWQgc2c9JWQgcmV0 PSV4KVxuIiwKKwkJCQljLT5jdGxyLCBjLT5oZHIudW5pdCwgYy0+cmVxLmhkci5jbWQsCisJCQkJ Yy0+cmVxLmhkci5ibGssIGMtPnJlcS5oZHIuYmxrX2NudCwKKwkJCQljLT5yZXEuaGRyLnNnX2Nu dCwgYy0+cmVxLmhkci5yY29kZSk7CisJCWNtZF9mcmVlKGluZm9fcCwgYywgMCk7CisJCXJldHVy bihJT19FUlJPUik7CQorCX0KKwljbWRfZnJlZShpbmZvX3AsIGMsIDApOworCXJldHVybihJT19P Syk7Cit9CisKK3N0YXRpYyBpbnQgcmVnaXN0ZXJfbmV3X2Rpc2soaW50IGN0bHIsIGludCBsb2d2 b2wpCit7CisJc3RydWN0IGdlbmRpc2sgKmdkZXYgPSAmKGhiYVtjdGxyXS0+Z2VuZGlzayk7CisJ Y3Rscl9pbmZvX3QgKmluZm9fcCA9IGhiYVtjdGxyXTsKKwlpbnQgcmV0X2NvZGUsIHNpemU7CisJ c2Vuc2VfbG9nX2Rydl9zdGF0X3QgKmlkX2xzdGF0dXNfYnVmOworCWlkX2xvZ19kcnZfdCAqaWRf bGRyaXZlOworCWRydl9pbmZvX3QgKmRydjsKKwlpbnQgbWF4X3A7CisJaW50IHN0YXJ0OworCWlu dCBpOwkKKworCWlmICghY2FwYWJsZShDQVBfU1lTX1JBV0lPKSkKKwkJcmV0dXJuIC1FUEVSTTsK KwlpZiggKGxvZ3ZvbCA8IDApIHx8IChsb2d2b2wgPj0gMTYpKQorCQlyZXR1cm4gLUVJTlZBTDsK KwkvKiBkaXNrIGlzIGFscmVhZHkgcmVnaXN0ZXJlZCAqLworCWlmKGhiYVtjdGxyXS0+c2l6ZXNb bG9ndm9sIDw8ICBnZGV2LT5taW5vcl9zaGlmdF0gIT0gMCApCisJCXJldHVybiAtRUlOVkFMOwor CisJaWRfbGRyaXZlID0gKGlkX2xvZ19kcnZfdCAqKWttYWxsb2Moc2l6ZW9mKGlkX2xvZ19kcnZf dCksIEdGUF9LRVJORUwpOworCWlmKGlkX2xkcml2ZSA9PSBOVUxMKQorCXsKKwkJcHJpbnRrKCBL RVJOX0VSUiAiY3BxYXJyYXk6ICBvdXQgb2YgbWVtb3J5LlxuIik7CisJCXJldHVybiAtMTsKKwl9 CisJaWRfbHN0YXR1c19idWYgPSAoc2Vuc2VfbG9nX2Rydl9zdGF0X3QgKilrbWFsbG9jKHNpemVv ZihzZW5zZV9sb2dfZHJ2X3N0YXRfdCksIEdGUF9LRVJORUwpOworCWlmKGlkX2xzdGF0dXNfYnVm ID09IE5VTEwpCisJeworCQlrZnJlZShpZF9sZHJpdmUpOworCQlwcmludGsoIEtFUk5fRVJSICJj cHFhcnJheTogIG91dCBvZiBtZW1vcnkuXG4iKTsKKwkJcmV0dXJuIC0xOworCX0KKworCXNpemUg PSBzaXplb2Yoc2Vuc2VfbG9nX2Rydl9zdGF0X3QpOworCisJLyoKKwkJU2VuZCAiSWRlbnRpZnkg bG9naWNhbCBkcml2ZSBzdGF0dXMiIGNtZAorCSAqLworCXJldF9jb2RlID0gc2VuZGNtZF93aXRo aXJxKFNFTlNFX0xPR19EUlZfU1RBVCwKKwkJY3RsciwgaWRfbHN0YXR1c19idWYsIHNpemUsIDAs IDAsIGxvZ3ZvbCk7CisJaWYgKHJldF9jb2RlID09IElPX0VSUk9SKSAKKwl7CisJCQkvKgorCQkJ ICAgSWYgY2FuJ3QgZ2V0IGxvZ2ljYWwgZHJpdmUgc3RhdHVzLCBzZXQKKwkJCSAgIHRoZSBsb2dp Y2FsIGRyaXZlIG1hcCB0byAwLCBzbyB0aGUKKwkJCSAgIGlkYXN0dWJvcGVuIHdpbGwgZmFpbCBm b3IgYWxsIGxvZ2ljYWwgZHJpdmVzCisJCQkgICBvbiB0aGUgY29udHJvbGxlci4gCisJCQkgKi8K KwkJCS8qIEZyZWUgYWxsIHRoZSBidWZmZXJzIGFuZCByZXR1cm4gKi8KKworICAgICAgICAgICAg ICAgIGtmcmVlKGlkX2xzdGF0dXNfYnVmKTsKKyAgICAgICAgICAgICAgICBrZnJlZShpZF9sZHJp dmUpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKwl9CisJLyoKKwkJICAgTWFrZSBzdXJl IHRoZSBsb2dpY2FsIGRyaXZlIGlzIGNvbmZpZ3VyZWQKKwkgKi8KKwlpZiAoaWRfbHN0YXR1c19i dWYtPnN0YXR1cyA9PSBMT0dfTk9UX0NPTkYpIAorCXsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAi Y3BxYXJyYXk6IGMlZGQlZCBhcnJheSBub3QgY29uZmlndXJlZFxuIiwKKwkJCWN0bHIsIGxvZ3Zv bCk7IAorCQlrZnJlZShpZF9sc3RhdHVzX2J1Zik7CisgICAgICAgICAgICAgICAga2ZyZWUoaWRf bGRyaXZlKTsKKwkJcmV0dXJuIC0xOworCX0KKwlyZXRfY29kZSA9IHNlbmRjbWRfd2l0aGlycShJ RF9MT0dfRFJWLCBjdGxyLCBpZF9sZHJpdmUsCisJCQkgICAgICAgc2l6ZW9mKGlkX2xvZ19kcnZf dCksIDAsIDAsIGxvZ3ZvbCk7CisJCQkvKgorCQkJICAgSWYgZXJyb3IsIHRoZSBiaXQgZm9yIHRo aXMKKwkJCSAgIGxvZ2ljYWwgZHJpdmUgd29uJ3QgYmUgc2V0IGFuZAorCQkJICAgaWRhc3R1Ym9w ZW4gd2lsbCByZXR1cm4gZXJyb3IuIAorCQkJICovCisJaWYgKHJldF9jb2RlID09IElPX0VSUk9S KSAKKwl7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImNwcWFycmF5OiBjJWRkJWQgdW5hYmxlIHRv IElEIGxvZ2ljYWwgdm9sdW1lXG4iLAorCQkJY3Rscixsb2d2b2wpOworCQlrZnJlZShpZF9sc3Rh dHVzX2J1Zik7CisgICAgICAgICAgICAgICAga2ZyZWUoaWRfbGRyaXZlKTsKKwkJcmV0dXJuIC0x OworCX0KKwlkcnYgPSAmaW5mb19wLT5kcnZbbG9ndm9sXTsKKwlkcnYtPmJsa19zaXplID0gaWRf bGRyaXZlLT5ibGtfc2l6ZTsKKwlkcnYtPm5yX2Jsa3MgPSBpZF9sZHJpdmUtPm5yX2Jsa3M7CisJ ZHJ2LT5jeWxpbmRlcnMgPSBpZF9sZHJpdmUtPmRydi5jeWw7CisJZHJ2LT5oZWFkcyA9IGlkX2xk cml2ZS0+ZHJ2LmhlYWRzOworCWRydi0+c2VjdG9ycyA9IGlkX2xkcml2ZS0+ZHJ2LnNlY3RfcGVy X3RyYWNrOworCWluZm9fcC0+bG9nX2Rydl9tYXAgfD0JKDEgPDwgbG9ndm9sKTsKKwlpZiAoaW5m b19wLT5oaWdoZXN0X2x1biA8IGxvZ3ZvbCkKKwkJaW5mb19wLT5oaWdoZXN0X2x1biA9IGxvZ3Zv bDsKKworCXByaW50ayhLRVJOX0lORk8gImNwcWFycmF5IGlkYS9jJWRkJWQ6IGJsa3N6PSVkIG5y X2Jsa3M9JWRcbiIsCisJCWN0bHIsIGxvZ3ZvbCwgZHJ2LT5ibGtfc2l6ZSwgZHJ2LT5ucl9ibGtz KTsKKworCWhiYVtjdGxyXS0+ZHJ2W2xvZ3ZvbF0udXNhZ2VfY291bnQgPSAwOwkKKwkKKwltYXhf cCA9IGdkZXYtPm1heF9wOworCXN0YXJ0ID0gbG9ndm9sPDwgZ2Rldi0+bWlub3Jfc2hpZnQ7CisJ CisJZm9yKGk9bWF4X3AtMTsgaT49MDsgaS0tKSAKKwl7CisJCWludCBtaW5vciA9IHN0YXJ0K2k7 CisJCWludmFsaWRhdGVfZGV2aWNlKE1LREVWKE1BSk9SX05SICsgY3RsciwgbWlub3IpLCAxKTsK KwkJZ2Rldi0+cGFydFttaW5vcl0uc3RhcnRfc2VjdCA9IDA7CisJCWdkZXYtPnBhcnRbbWlub3Jd Lm5yX3NlY3RzID0gMDsKKwkKKwkJLyogcmVzZXQgdGhlIGJsb2Nrc2l6ZSBzbyB3ZSBjYW4gcmVh ZCB0aGUgcGFydGl0aW9uIHRhYmxlICovCisJCWJsa3NpemVfc2l6ZVtNQUpPUl9OUitjdGxyXVtt aW5vcl0gPSAxMDI0OworCX0KKwkrK2hiYVtjdGxyXS0+bG9nX2RyaXZlczsKKwlnZGV2LT5ucl9y ZWFsID0gaW5mb19wLT5oaWdoZXN0X2x1biArIDE7CisJLyogc2V0dXAgcGFydGl0aW9ucyBwZXIg ZGlzayAqLworCWdyb2tfcGFydGl0aW9ucyhnZGV2LCBsb2d2b2wsIDE2LCBkcnYtPm5yX2Jsa3Mp OyAKKwkKKwlrZnJlZShpZF9sc3RhdHVzX2J1Zik7CisgICAgICAgIGtmcmVlKGlkX2xkcml2ZSk7 CisJcmV0dXJuICgwKTsKK30KKwogLyogQm9ycm93ZWQgYW5kIGFkYXB0ZWQgZnJvbSBzZC5jICov CiBzdGF0aWMgaW50IHJldmFsaWRhdGVfbG9ndm9sKGtkZXZfdCBkZXYsIGludCBtYXh1c2FnZSkK IHsKQEAgLTE2MzIsNyArMTk1OSw3IEBACiAKIAl0YXJnZXQgPSBERVZJQ0VfTlIoZGV2KTsKIAlj dGxyID0gTUFKT1IoZGV2KSAtIE1BSk9SX05SOwotCWdkZXYgPSAmaWRhX2dlbmRpc2tbY3Rscl07 CisJZ2RldiA9ICYoaGJhW2N0bHJdLT5nZW5kaXNrKTsKIAkKIAlzcGluX2xvY2tfaXJxc2F2ZSgm aW9fcmVxdWVzdF9sb2NrLCBmbGFncyk7CiAJaWYgKGhiYVtjdGxyXS0+ZHJ2W3RhcmdldF0udXNh Z2VfY291bnQgPiBtYXh1c2FnZSkgewpAQCAtMTg5Myw2ICsyMjIwLDggQEAKICAgICAgICAgICAg ICAgICAJCQlyZXR1cm47CiAKIAkJCQl9CisJCQkJaWYobG9nX3VuaXQgPiBpbmZvX3AtPmhpZ2hl c3RfbHVuKQorCQkJCQlpbmZvX3AtPmhpZ2hlc3RfbHVuID0gbG9nX3VuaXQ7CiAJCQkJaW5mb19w LT5waHlzX2RyaXZlcyA9CiAJCQkJICAgIHNlbnNlX2NvbmZpZ19idWYtPmN0bHJfcGh5c19kcnY7 CiAJCQkJaW5mb19wLT5kcnZfYXNzaWduX21hcApAQCAtMTkxMiwzICsyMjQxLDI2IEBACiAJcmV0 dXJuOwogCiB9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX2NwcWFycmF5X21vZHVsZSh2 b2lkKQoreworICAgICAgICBpbnQgaTsKKworICAgICAgICBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIo JmNwcWFycmF5X3BjaV9kcml2ZXIpOworICAgICAgICAvKiBkb3VibGUgY2hlY2sgdGhhdCBhbGwg Y29udHJvbGxlciBlbnRyeXMgaGF2ZSBiZWVuIHJlbW92ZWQgKi8KKyAgICAgICAgZm9yIChpPTA7 IGk8IE1BWF9DVExSOyBpKyspCisgICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoaGJhW2ld ICE9IE5VTEwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJp bnRrKEtFUk5fV0FSTklORyAiY3BxYXJyYXk6IGhhZCB0byByZW1vdmUiCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIiBjb250cm9sbGVyICVkXG4iLCBpKTsKKyAgICAg ICAgICAgICAgICAgICAgICAgIGNwcWFycmF5X3JlbW92ZV9vbmVfZWlzYShpKTsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmVtb3ZlX3Byb2NfZW50cnkoImNwcWFycmF5 IiwgcHJvY19yb290X2RyaXZlcik7Cit9CisKKworbW9kdWxlX2luaXQoaW5pdF9jcHFhcnJheV9t b2R1bGUpOworbW9kdWxlX2V4aXQoY2xlYW51cF9jcHFhcnJheV9tb2R1bGUpOworCmRpZmYgLXVy TiBsaW51eC0yLjQuMTAtYWM4Lm9yaWcvZHJpdmVycy9ibG9jay9jcHFhcnJheS5oIGxpbnV4LTIu NC4xMC1hYzhjcHFhcnJheTI0MjAvZHJpdmVycy9ibG9jay9jcHFhcnJheS5oCi0tLSBsaW51eC0y LjQuMTAtYWM4Lm9yaWcvZHJpdmVycy9ibG9jay9jcHFhcnJheS5oCVR1ZSBNYXkgMjIgMTI6MjM6 MTYgMjAwMQorKysgbGludXgtMi40LjEwLWFjOGNwcWFycmF5MjQyMC9kcml2ZXJzL2Jsb2NrL2Nw cWFycmF5LmgJTW9uIE9jdCAgOCAwOTo1NToxOSAyMDAxCkBAIC04Nyw5ICs4NywxMSBAQAogCV9f dTMyCW1wX2ZhaWxlZF9kcnZfbWFwOwogCiAJY2hhcglmaXJtX3Jldls0XTsKKwlzdHJ1Y3QgcGNp X2RldiAqcGRldjsKIAlpbnQJY3Rscl9zaWc7CiAKIAlpbnQJbG9nX2RyaXZlczsKKwlpbnQJaGln aGVzdF9sdW47CiAJaW50CXBoeXNfZHJpdmVzOwogCiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7 ICAgIC8qIE5VTEwgaWYgRUlTQSAqLwpAQCAtOTgsNyArMTAwLDggQEAKIAogCXZvaWQgKnZhZGRy OwogCXVuc2lnbmVkIGxvbmcgcGFkZHI7Ci0JdW5zaWduZWQgbG9uZyBpb2FkZHI7CisJdW5zaWdu ZWQgbG9uZyBpb19tZW1fYWRkcjsKKwl1bnNpZ25lZCBsb25nIGlvX21lbV9sZW5ndGg7CQogCWlu dAlpbnRyOwogCWludAl1c2FnZV9jb3VudDsKIAlkcnZfaW5mb190CWRydltOV0RdOwpAQCAtMTIw LDYgKzEyMywxMyBAQAogCXVuc2lnbmVkIGludCBucl9mcmVlczsKIAlzdHJ1Y3QgdGltZXJfbGlz dCB0aW1lcjsKIAl1bnNpZ25lZCBpbnQgbWlzY190ZmxhZ3M7CisJLy8gRGlzayBzdHJ1Y3R1cmVz IHdlIG5lZWQgdG8gcGFzcyBiYWNrCisJc3RydWN0IGdlbmRpc2sgZ2VuZGlzazsKKwkvLyBJbmRl eCBieSBNaW5vciBOdW1iZXJzCisJc3RydWN0IGhkX3N0cnVjdAloZFsyNTZdOworCWludAkJCXNp emVzWzI1Nl07CisJaW50CQkJYmxvY2tzaXplc1syNTZdOworCWludAkJCWhhcmRzaXplc1syNTZd OwogfTsKICNlbmRpZgogCmRpZmYgLXVyTiBsaW51eC0yLjQuMTAtYWM4Lm9yaWcvZHJpdmVycy9i bG9jay9nZW5oZC5jIGxpbnV4LTIuNC4xMC1hYzhjcHFhcnJheTI0MjAvZHJpdmVycy9ibG9jay9n ZW5oZC5jCi0tLSBsaW51eC0yLjQuMTAtYWM4Lm9yaWcvZHJpdmVycy9ibG9jay9nZW5oZC5jCU1v biBPY3QgIDggMDk6NDE6MTUgMjAwMQorKysgbGludXgtMi40LjEwLWFjOGNwcWFycmF5MjQyMC9k cml2ZXJzL2Jsb2NrL2dlbmhkLmMJTW9uIE9jdCAgOCAwOTo1NjowNCAyMDAxCkBAIC0xNjYsNyAr MTY2LDYgQEAKIGV4dGVybiB2b2lkIGNvbnNvbGVfbWFwX2luaXQodm9pZCk7CiBleHRlcm4gaW50 IGF0bWRldl9pbml0KHZvaWQpOwogZXh0ZXJuIGludCBpMm9faW5pdCh2b2lkKTsKLWV4dGVybiBp bnQgY3BxYXJyYXlfaW5pdCh2b2lkKTsKIAogaW50IF9faW5pdCBkZXZpY2VfaW5pdCh2b2lkKQog ewpAQCAtMTc5LDkgKzE3OCw2IEBACiAjaWZkZWYgQ09ORklHX0JMS19ERVZfREFDOTYwCiAJREFD OTYwX0luaXRpYWxpemUoKTsKICNlbmRpZgotI2lmZGVmIENPTkZJR19CTEtfQ1BRX0RBCi0JY3Bx YXJyYXlfaW5pdCgpOwotI2VuZGlmCiAjaWZkZWYgQ09ORklHX05FVAogCW5ldF9kZXZfaW5pdCgp OwogI2VuZGlmCmRpZmYgLXVyTiBsaW51eC0yLjQuMTAtYWM4Lm9yaWcvZHJpdmVycy9ibG9jay9p ZGFfaW9jdGwuaCBsaW51eC0yLjQuMTAtYWM4Y3BxYXJyYXkyNDIwL2RyaXZlcnMvYmxvY2svaWRh X2lvY3RsLmgKLS0tIGxpbnV4LTIuNC4xMC1hYzgub3JpZy9kcml2ZXJzL2Jsb2NrL2lkYV9pb2N0 bC5oCVdlZCBKdWwgMjUgMTY6MTI6MDEgMjAwMQorKysgbGludXgtMi40LjEwLWFjOGNwcWFycmF5 MjQyMC9kcml2ZXJzL2Jsb2NrL2lkYV9pb2N0bC5oCU1vbiBPY3QgIDggMDk6NTU6MTkgMjAwMQpA QCAtMzEsNiArMzEsOCBAQAogI2RlZmluZSBJREFSRVZBTElEQVRFVk9MUwkweDMwMzAzMTMxCiAj ZGVmaW5lIElEQURSSVZFUlZFUlNJT04JMHgzMTMxMzIzMgogI2RlZmluZSBJREFHRVRQQ0lJTkZP CQkweDMyMzIzMzMzCisjZGVmaW5lIElEQURFUkVHRElTSwkJMHgzMzMzMzQzNAorI2RlZmluZSBJ REFSRUdORVdESVNLCQkweDM0MzQzNTM1CiAKIHR5cGVkZWYgc3RydWN0IF9pZGFfcGNpX2luZm9f c3RydWN0CiB7CmRpZmYgLXVyTiBsaW51eC0yLjQuMTAtYWM4Lm9yaWcvZHJpdmVycy9ibG9jay9z bWFydDEsMi5oIGxpbnV4LTIuNC4xMC1hYzhjcHFhcnJheTI0MjAvZHJpdmVycy9ibG9jay9zbWFy dDEsMi5oCi0tLSBsaW51eC0yLjQuMTAtYWM4Lm9yaWcvZHJpdmVycy9ibG9jay9zbWFydDEsMi5o CVR1ZSBNYXkgIDEgMTg6MDU6MDAgMjAwMQorKysgbGludXgtMi40LjEwLWFjOGNwcWFycmF5MjQy MC9kcml2ZXJzL2Jsb2NrL3NtYXJ0MSwyLmgJTW9uIE9jdCAgOCAwOTo1NToxOSAyMDAxCkBAIC0x NTYsMjcgKzE1NiwyNyBAQAogICovCiBzdGF0aWMgdm9pZCBzbWFydDJlX3N1Ym1pdF9jb21tYW5k KGN0bHJfaW5mb190ICpoLCBjbWRsaXN0X3QgKmMpCiB7Ci0Jb3V0bChjLT5idXNhZGRyLCBoLT5p b2FkZHIgKyBDT01NQU5EX0ZJRk8pOworCW91dGwoYy0+YnVzYWRkciwgaC0+aW9fbWVtX2FkZHIr IENPTU1BTkRfRklGTyk7CiB9CiAKIHN0YXRpYyB2b2lkIHNtYXJ0MmVfaW50cl9tYXNrKGN0bHJf aW5mb190ICpoLCB1bnNpZ25lZCBsb25nIHZhbCkKIHsKLQlvdXRsKHZhbCwgaC0+aW9hZGRyICsg SU5UUl9NQVNLKTsKKwlvdXRsKHZhbCwgaC0+aW9fbWVtX2FkZHIrIElOVFJfTUFTSyk7CiB9CiAK IHN0YXRpYyB1bnNpZ25lZCBsb25nIHNtYXJ0MmVfZmlmb19mdWxsKGN0bHJfaW5mb190ICpoKQog ewotCXJldHVybiBpbmwoaC0+aW9hZGRyICsgQ09NTUFORF9GSUZPKTsKKwlyZXR1cm4gaW5sKGgt PmlvX21lbV9hZGRyKyBDT01NQU5EX0ZJRk8pOwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBz bWFydDJlX2NvbXBsZXRlZChjdGxyX2luZm9fdCAqaCkKIHsKLQlyZXR1cm4gaW5sKGgtPmlvYWRk ciArIENPTU1BTkRfQ09NUExFVEVfRklGTyk7CisJcmV0dXJuIGlubChoLT5pb19tZW1fYWRkcisg Q09NTUFORF9DT01QTEVURV9GSUZPKTsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgc21hcnQy ZV9pbnRyX3BlbmRpbmcoY3Rscl9pbmZvX3QgKmgpCiB7Ci0JcmV0dXJuIGlubChoLT5pb2FkZHIg KyBJTlRSX1BFTkRJTkcpOworCXJldHVybiBpbmwoaC0+aW9fbWVtX2FkZHIrIElOVFJfUEVORElO Ryk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgYWNjZXNzX21ldGhvZCBzbWFydDJlX2FjY2VzcyA9IHsK QEAgLTIxMiwzMCArMjEyLDMwIEBACiAJICovCiAJYy0+aGRyLnNpemUgPSAwOwogCi0Jb3V0YihD SEFOTkVMX0NMRUFSLCBoLT5pb2FkZHIgKyBTTUFSVDFfU1lTVEVNX0RPT1JCRUxMKTsKKwlvdXRi KENIQU5ORUxfQ0xFQVIsIGgtPmlvX21lbV9hZGRyICsgU01BUlQxX1NZU1RFTV9ET09SQkVMTCk7 CiAKLQlvdXRsKGMtPmJ1c2FkZHIsIGgtPmlvYWRkciArIFNNQVJUMV9MSVNUQUREUik7Ci0Jb3V0 dyhjLT5zaXplLCBoLT5pb2FkZHIgKyBTTUFSVDFfTElTVExFTik7CisJb3V0bChjLT5idXNhZGRy LCBoLT5pb19tZW1fYWRkciArIFNNQVJUMV9MSVNUQUREUik7CisJb3V0dyhjLT5zaXplLCBoLT5p b19tZW1fYWRkciArIFNNQVJUMV9MSVNUTEVOKTsKIAotCW91dGIoQ0hBTk5FTF9CVVNZLCBoLT5p b2FkZHIgKyBTTUFSVDFfTE9DQUxfRE9PUkJFTEwpOworCW91dGIoQ0hBTk5FTF9CVVNZLCBoLT5p b19tZW1fYWRkciArIFNNQVJUMV9MT0NBTF9ET09SQkVMTCk7CiB9CiAKIHN0YXRpYyB2b2lkIHNt YXJ0MV9pbnRyX21hc2soY3Rscl9pbmZvX3QgKmgsIHVuc2lnbmVkIGxvbmcgdmFsKQogewogCWlm ICh2YWwgPT0gMSkgewotCQlvdXRiKDB4RkQsIGgtPmlvYWRkciArIFNNQVJUMV9TWVNURU1fRE9P UkJFTEwpOwotCQlvdXRiKENIQU5ORUxfQlVTWSwgaC0+aW9hZGRyICsgU01BUlQxX0xPQ0FMX0RP T1JCRUxMKTsKLQkJb3V0YigweDAxLCBoLT5pb2FkZHIgKyBTTUFSVDFfSU5UUl9NQVNLKTsKLQkJ b3V0YigweDAxLCBoLT5pb2FkZHIgKyBTTUFSVDFfU1lTVEVNX01BU0spOworCQlvdXRiKDB4RkQs IGgtPmlvX21lbV9hZGRyICsgU01BUlQxX1NZU1RFTV9ET09SQkVMTCk7CisJCW91dGIoQ0hBTk5F TF9CVVNZLCBoLT5pb19tZW1fYWRkciArIFNNQVJUMV9MT0NBTF9ET09SQkVMTCk7CisJCW91dGIo MHgwMSwgaC0+aW9fbWVtX2FkZHIgKyBTTUFSVDFfSU5UUl9NQVNLKTsKKwkJb3V0YigweDAxLCBo LT5pb19tZW1fYWRkciArIFNNQVJUMV9TWVNURU1fTUFTSyk7CiAJfSBlbHNlIHsKLQkJb3V0Yigw LCBoLT5pb2FkZHIgKyAweEM4RSk7CisJCW91dGIoMCwgaC0+aW9fbWVtX2FkZHIgKyAweEM4RSk7 CiAJfQogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBzbWFydDFfZmlmb19mdWxsKGN0bHJfaW5m b190ICpoKQogewogCXVuc2lnbmVkIGNoYXIgY2hhbjsKLQljaGFuID0gaW5iKGgtPmlvYWRkciAr IFNNQVJUMV9TWVNURU1fRE9PUkJFTEwpICYgQ0hBTk5FTF9DTEVBUjsKKwljaGFuID0gaW5iKGgt PmlvX21lbV9hZGRyICsgU01BUlQxX1NZU1RFTV9ET09SQkVMTCkgJiBDSEFOTkVMX0NMRUFSOwog CXJldHVybiBjaGFuOwogfQogCkBAIC0yNDQsMTMgKzI0NCwxMyBAQAogCXVuc2lnbmVkIGNoYXIg c3RhdHVzOwogCXVuc2lnbmVkIGxvbmcgY21kOwogCi0JaWYgKGluYihoLT5pb2FkZHIgKyBTTUFS VDFfU1lTVEVNX0RPT1JCRUxMKSAmIENIQU5ORUxfQlVTWSkgewotCQlvdXRiKENIQU5ORUxfQlVT WSwgaC0+aW9hZGRyICsgU01BUlQxX1NZU1RFTV9ET09SQkVMTCk7CisJaWYgKGluYihoLT5pb19t ZW1fYWRkciArIFNNQVJUMV9TWVNURU1fRE9PUkJFTEwpICYgQ0hBTk5FTF9CVVNZKSB7CisJCW91 dGIoQ0hBTk5FTF9CVVNZLCBoLT5pb19tZW1fYWRkciArIFNNQVJUMV9TWVNURU1fRE9PUkJFTEwp OwogCi0JCWNtZCA9IGlubChoLT5pb2FkZHIgKyBTTUFSVDFfQ09NUExFVEVfQUREUik7Ci0JCXN0 YXR1cyA9IGluYihoLT5pb2FkZHIgKyBTTUFSVDFfTElTVFNUQVRVUyk7CisJCWNtZCA9IGlubCho LT5pb19tZW1fYWRkciArIFNNQVJUMV9DT01QTEVURV9BRERSKTsKKwkJc3RhdHVzID0gaW5iKGgt PmlvX21lbV9hZGRyICsgU01BUlQxX0xJU1RTVEFUVVMpOwogCi0JCW91dGIoQ0hBTk5FTF9DTEVB UiwgaC0+aW9hZGRyICsgU01BUlQxX0xPQ0FMX0RPT1JCRUxMKTsKKwkJb3V0YihDSEFOTkVMX0NM RUFSLCBoLT5pb19tZW1fYWRkciArIFNNQVJUMV9MT0NBTF9ET09SQkVMTCk7CiAKIAkJaWYgKGNt ZCkgKChjbWRsaXN0X3QqKWJ1c190b192aXJ0KGNtZCkpLT5yZXEuaGRyLnJjb2RlID0gc3RhdHVz OwogCX0gZWxzZSB7CkBAIC0yNjIsNyArMjYyLDcgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNt YXJ0MV9pbnRyX3BlbmRpbmcoY3Rscl9pbmZvX3QgKmgpCiB7CiAJdW5zaWduZWQgY2hhciBjaGFu OwotCWNoYW4gPSBpbmIoaC0+aW9hZGRyICsgU01BUlQxX1NZU1RFTV9ET09SQkVMTCkgJiBDSEFO TkVMX0JVU1k7CisJY2hhbiA9IGluYihoLT5pb19tZW1fYWRkciArIFNNQVJUMV9TWVNURU1fRE9P UkJFTEwpICYgQ0hBTk5FTF9CVVNZOwogCXJldHVybiBjaGFuOwogfQogCg== ------_=_NextPart_001_01C150DD.D3E62FC6-- - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/