From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1KV8Pd-0004vU-9B for mharc-grub-devel@gnu.org; Mon, 18 Aug 2008 13:21:01 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KV8Pa-0004ue-IY for grub-devel@gnu.org; Mon, 18 Aug 2008 13:20:58 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KV8PW-0004rr-Q6 for grub-devel@gnu.org; Mon, 18 Aug 2008 13:20:56 -0400 Received: from [199.232.76.173] (port=54344 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KV8PV-0004rd-Gz for grub-devel@gnu.org; Mon, 18 Aug 2008 13:20:53 -0400 Received: from ti-out-0910.google.com ([209.85.142.190]:49998) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KV8PT-0005Qv-7c for grub-devel@gnu.org; Mon, 18 Aug 2008 13:20:53 -0400 Received: by ti-out-0910.google.com with SMTP id u5so994192tia.10 for ; Mon, 18 Aug 2008 10:20:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:to :subject:in-reply-to:mime-version:content-type:references; bh=GYQ7nkMAADtuyhup0Gifx1cqVcW0jFOPT1MB1jRyIcg=; b=GNybvHrZOQj8lWpKVAEHISKUCGrl47rufB9b5abF9xXZqgA3lb3ggFv7VdUGsm8+dY UT/PYOPejEpJF6rjyGF2g1JJvL9sej5H2ezkBUtu/hP+OvLwU19J60fl9wisrudhrm92 N7VVrhowDqwVqgHdNR0bKP7doD4d3Cd9P1hVw= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:in-reply-to:mime-version :content-type:references; b=t29d2/wJ6JwjVPRTo5/ND3Pw/tu0jwPQY+jK4LMyHI7k4Ht0LAbXLIgV1PIxHVoMBy qAQbUDvjG/RXiPf1W8JipAtSv50LJCMzYTlh+41yG64Ri6WYf7c5Tle5XYmmf8kzpX1I ereNTd0ulzKlHZHfw8kshWxxblGHJinMKPWyE= Received: by 10.110.28.15 with SMTP id b15mr5949614tib.26.1219080047315; Mon, 18 Aug 2008 10:20:47 -0700 (PDT) Received: by 10.110.16.5 with HTTP; Mon, 18 Aug 2008 10:20:47 -0700 (PDT) Message-ID: Date: Tue, 19 Aug 2008 01:20:47 +0800 From: Bean To: "The development of GRUB 2" In-Reply-To: <20080817152310.GA9696@thorin> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_Part_57823_14159231.1219080047293" References: <20080811203024.GA6883@thorin> <87skt99qn4.fsf@xs4all.nl> <20080816121654.GA6334@thorin> <20080817145234.GA9153@thorin> <20080817152310.GA9696@thorin> X-detected-kernel: by monty-python.gnu.org: Linux 2.6 (newer, 2) Subject: Re: [PATCH] Split of raid scan code X-BeenThere: grub-devel@gnu.org X-Mailman-Version: 2.1.5 Precedence: list Reply-To: The development of GRUB 2 List-Id: The development of GRUB 2 List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 18 Aug 2008 17:20:59 -0000 ------=_Part_57823_14159231.1219080047293 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline Hi, This patch fix a bug in total_devs and grub_raid_memberlist, it also resolve the conflict with current svn head. -- Bean ------=_Part_57823_14159231.1219080047293 Content-Type: text/x-diff; name=raid_11.diff Content-Transfer-Encoding: base64 X-Attachment-Id: f_fk1corss0 Content-Disposition: attachment; filename=raid_11.diff ZGlmZiAtLWdpdCBhL2NvbmYvY29tbW9uLnJtayBiL2NvbmYvY29tbW9uLnJtawppbmRleCA5Y2Ew M2Q0Li43NTg2MzgzIDEwMDY0NAotLS0gYS9jb25mL2NvbW1vbi5ybWsKKysrIGIvY29uZi9jb21t b24ucm1rCkBAIC0yMSw3ICsyMSw3IEBAIGdydWJfcHJvYmVfU09VUkNFUyA9IHV0aWwvZ3J1Yi1w cm9iZS5jCVwKIAlcCiAJcGFydG1hcC9wYy5jIHBhcnRtYXAvYXBwbGUuYyBwYXJ0bWFwL2dwdC5j IAkJXAogCWtlcm4vZnMuYyBrZXJuL2Vudi5jIGZzL2ZzaGVscC5jCQkJXAotCWRpc2svbHZtLmMg ZGlzay9yYWlkLmMgZ3J1Yl9wcm9iZV9pbml0LmMKKwlkaXNrL2x2bS5jIGRpc2svcmFpZC5jIGRp c2svbWRyYWlkX2xpbnV4LmMgZ3J1Yl9wcm9iZV9pbml0LmMKIAogaWZlcSAoJChlbmFibGVfZ3J1 Yl9mc3Rlc3QpLCB5ZXMpCiBiaW5fVVRJTElUSUVTICs9IGdydWItZnN0ZXN0CkBAIC0zMiw3ICsz Miw3IEBAIHV0aWwvZ3J1Yi1mc3Rlc3QuY19ERVBFTkRFTkNJRVMgPSBncnViX2ZzdGVzdF9pbml0 LmgKIGdydWJfZnN0ZXN0X1NPVVJDRVMgPSB1dGlsL2dydWItZnN0ZXN0LmMgdXRpbC9ob3N0ZnMu YyB1dGlsL21pc2MuYyAJXAogCWtlcm4vZmlsZS5jIGtlcm4vZGV2aWNlLmMga2Vybi9kaXNrLmMg a2Vybi9lcnIuYyBrZXJuL21pc2MuYwlcCiAJZGlzay9ob3N0LmMgZGlzay9sb29wYmFjay5jICBu b3JtYWwvYXJnLmMgbm9ybWFsL21pc2MuYwkJXAotCWlvL2d6aW8uYyBsaWIvaGV4ZHVtcC5jIGNv bW1hbmRzL2Jsb2NrbGlzdC5jIGNvbW1hbmRzL2xzLmMgXAorCWxpYi9oZXhkdW1wLmMgbGliL2Ny Yy5jIGNvbW1hbmRzL2Jsb2NrbGlzdC5jIGNvbW1hbmRzL2xzLmMgCVwKIAlcCiAJZnMvYWZmcy5j IGZzL2NwaW8uYyBmcy9leHQyLmMgZnMvZmF0LmMgZnMvaGZzLmMJCQlcCiAJZnMvaGZzcGx1cy5j IGZzL2lzbzk2NjAuYyBmcy91ZGYuYyBmcy9qZnMuYyBmcy9taW5peC5jCQlcCkBAIC00MCw3ICs0 MCw5IEBAIGdydWJfZnN0ZXN0X1NPVVJDRVMgPSB1dGlsL2dydWItZnN0ZXN0LmMgdXRpbC9ob3N0 ZnMuYyB1dGlsL21pc2MuYyAJXAogCWZzL3Vmcy5jIGZzL3hmcy5jIGZzL2Fmcy5jCQkJCQlcCiAJ XAogCWtlcm4vcGFydGl0aW9uLmMgcGFydG1hcC9wYy5jIHBhcnRtYXAvYXBwbGUuYyBwYXJ0bWFw L2dwdC5jIAlcCi0Ja2Vybi9mcy5jIGtlcm4vZW52LmMgZnMvZnNoZWxwLmMgZGlzay9sdm0uYyBk aXNrL3JhaWQuYwlcCisJa2Vybi9mcy5jIGtlcm4vZW52LmMgZnMvZnNoZWxwLmMgZGlzay9sdm0u YyBkaXNrL3JhaWQuYwkJXAorCWRpc2svcmFpZDVfcmVjb3Zlci5jIGRpc2svcmFpZDZfcmVjb3Zl ci5jIAkJCVwKKwlkaXNrL21kcmFpZF9saW51eC5jIGRpc2svZG1yYWlkX252aWRpYS5jIAkJCVwK IAlncnViX2ZzdGVzdF9pbml0LmMKIAogIyBGb3IgdGhlIHBhcnNlci4KQEAgLTI3MCwxNCArMjcy LDM1IEBAIGdwdF9tb2RfTERGTEFHUyA9ICQoQ09NTU9OX0xERkxBR1MpCiAKICMgU3BlY2lhbCBk aXNrIHN0cnVjdHVyZXMKIAotcGtnbGliX01PRFVMRVMgKz0gcmFpZC5tb2QgbHZtLm1vZAorcGtn bGliX01PRFVMRVMgKz0gcmFpZC5tb2QgcmFpZDVyZWMubW9kIHJhaWQ2cmVjLm1vZCBtZHJhaWQu bW9kIGRtX252Lm1vZCBcCisJbHZtLm1vZAogCiAjIEZvciByYWlkLm1vZAogcmFpZF9tb2RfU09V UkNFUyA9IGRpc2svcmFpZC5jCiByYWlkX21vZF9DRkxBR1MgPSAkKENPTU1PTl9DRkxBR1MpCiBy YWlkX21vZF9MREZMQUdTID0gJChDT01NT05fTERGTEFHUykKIAotIyBGb3IgcmFpZC5tb2QKKyMg Rm9yIHJhaWQ1cmVjLm1vZAorcmFpZDVyZWNfbW9kX1NPVVJDRVMgPSBkaXNrL3JhaWQ1X3JlY292 ZXIuYworcmFpZDVyZWNfbW9kX0NGTEFHUyA9ICQoQ09NTU9OX0NGTEFHUykKK3JhaWQ1cmVjX21v ZF9MREZMQUdTID0gJChDT01NT05fTERGTEFHUykKKworIyBGb3IgcmFpZDZyZWMubW9kCityYWlk NnJlY19tb2RfU09VUkNFUyA9IGRpc2svcmFpZDZfcmVjb3Zlci5jCityYWlkNnJlY19tb2RfQ0ZM QUdTID0gJChDT01NT05fQ0ZMQUdTKQorcmFpZDZyZWNfbW9kX0xERkxBR1MgPSAkKENPTU1PTl9M REZMQUdTKQorCisjIEZvciBtZHJhaWQubW9kCittZHJhaWRfbW9kX1NPVVJDRVMgPSBkaXNrL21k cmFpZF9saW51eC5jCittZHJhaWRfbW9kX0NGTEFHUyA9ICQoQ09NTU9OX0NGTEFHUykKK21kcmFp ZF9tb2RfTERGTEFHUyA9ICQoQ09NTU9OX0xERkxBR1MpCisKKyMgRm9yIGRtX252Lm1vZAorZG1f bnZfbW9kX1NPVVJDRVMgPSBkaXNrL2RtcmFpZF9udmlkaWEuYworZG1fbnZfbW9kX0NGTEFHUyA9 ICQoQ09NTU9OX0NGTEFHUykKK2RtX252X21vZF9MREZMQUdTID0gJChDT01NT05fTERGTEFHUykK KworIyBGb3IgbHZtLm1vZAogbHZtX21vZF9TT1VSQ0VTID0gZGlzay9sdm0uYwogbHZtX21vZF9D RkxBR1MgPSAkKENPTU1PTl9DRkxBR1MpCiBsdm1fbW9kX0xERkxBR1MgPSAkKENPTU1PTl9MREZM QUdTKQpkaWZmIC0tZ2l0IGEvY29uZi9pMzg2LWNvcmVib290LnJtayBiL2NvbmYvaTM4Ni1jb3Jl Ym9vdC5ybWsKaW5kZXggMzRiM2I0MC4uZjNlYWMwZCAxMDA2NDQKLS0tIGEvY29uZi9pMzg2LWNv cmVib290LnJtaworKysgYi9jb25mL2kzODYtY29yZWJvb3Qucm1rCkBAIC04NSw3ICs4NSw4IEBA IGdydWJfZW11X1NPVVJDRVMgPSBjb21tYW5kcy9ib290LmMgY29tbWFuZHMvY2F0LmMgY29tbWFu ZHMvY21wLmMJXAogCXV0aWwvYmlvc2Rpc2suYyB1dGlsL2dldHJvb3QuYwkJCQkJXAogCXV0aWwv aTM4Ni9wYy9taXNjLmMgCQkJCQkJXAogCVwKLQlkaXNrL3JhaWQuYyBkaXNrL2x2bS5jCQkJCQkJ XAorCWRpc2svcmFpZC5jIGRpc2svcmFpZDVfcmVjb3Zlci5jIGRpc2svcmFpZDZfcmVjb3Zlci5j CQlcCisJZGlzay9tZHJhaWRfbGludXguYyBkaXNrL2RtcmFpZF9udmlkaWEuYyBkaXNrL2x2bS5j CQlcCiAJZ3J1Yl9lbXVfaW5pdC5jCiAKIGdydWJfZW11X0xERkxBR1MgPSAkKExJQkNVUlNFUykK ZGlmZiAtLWdpdCBhL2NvbmYvaTM4Ni1lZmkucm1rIGIvY29uZi9pMzg2LWVmaS5ybWsKaW5kZXgg ZWY3ZDhhMi4uMGI5NjExZiAxMDA2NDQKLS0tIGEvY29uZi9pMzg2LWVmaS5ybWsKKysrIGIvY29u Zi9pMzg2LWVmaS5ybWsKQEAgLTYyLDcgKzYyLDggQEAgZ3J1Yl9lbXVfU09VUkNFUyA9IGNvbW1h bmRzL2Jvb3QuYyBjb21tYW5kcy9jYXQuYyBjb21tYW5kcy9jbXAuYyAJXAogCXV0aWwvYmlvc2Rp c2suYyB1dGlsL2dldHJvb3QuYwkJCQkJXAogCXV0aWwvaTM4Ni9wYy9taXNjLmMJCQkJCQlcCiAJ XAotCWRpc2svcmFpZC5jIGRpc2svbHZtLmMJCQkJCQlcCisJZGlzay9yYWlkLmMgZGlzay9yYWlk NV9yZWNvdmVyLmMgZGlzay9yYWlkNl9yZWNvdmVyLmMJCVwKKwlkaXNrL21kcmFpZF9saW51eC5j IGRpc2svZG1yYWlkX252aWRpYS5jIGRpc2svbHZtLmMJCVwKIAlncnViX2VtdV9pbml0LmMKIAog Z3J1Yl9lbXVfTERGTEFHUyA9ICQoTElCQ1VSU0VTKQpkaWZmIC0tZ2l0IGEvY29uZi9pMzg2LWll ZWUxMjc1LnJtayBiL2NvbmYvaTM4Ni1pZWVlMTI3NS5ybWsKaW5kZXggZDYyYTY1Ni4uNjQ3N2E2 ZiAxMDA2NDQKLS0tIGEvY29uZi9pMzg2LWllZWUxMjc1LnJtaworKysgYi9jb25mL2kzODYtaWVl ZTEyNzUucm1rCkBAIC04Myw3ICs4Myw4IEBAIGdydWJfZW11X1NPVVJDRVMgPSBjb21tYW5kcy9i b290LmMgY29tbWFuZHMvY2F0LmMgY29tbWFuZHMvY21wLmMJXAogCXV0aWwvYmlvc2Rpc2suYyB1 dGlsL2dldHJvb3QuYwkJCQkJXAogCXV0aWwvaTM4Ni9wYy9taXNjLmMJCQkJCQlcCiAJXAotCWRp c2svcmFpZC5jIGRpc2svbHZtLmMJCQkJCQlcCisJZGlzay9yYWlkLmMgZGlzay9yYWlkNV9yZWNv dmVyLmMgZGlzay9yYWlkNl9yZWNvdmVyLmMJCVwKKwlkaXNrL21kcmFpZF9saW51eC5jIGRpc2sv ZG1yYWlkX252aWRpYS5jIGRpc2svbHZtLmMJCVwKIAlncnViX2VtdV9pbml0LmMKIAogZ3J1Yl9l bXVfTERGTEFHUyA9ICQoTElCQ1VSU0VTKQpkaWZmIC0tZ2l0IGEvY29uZi9pMzg2LXBjLnJtayBi L2NvbmYvaTM4Ni1wYy5ybWsKaW5kZXggYTJhYjk0ZC4uZDI3NzNkYyAxMDA2NDQKLS0tIGEvY29u Zi9pMzg2LXBjLnJtaworKysgYi9jb25mL2kzODYtcGMucm1rCkBAIC0xMDMsNyArMTAzLDcgQEAg Z3J1Yl9zZXR1cF9TT1VSQ0VTID0gdXRpbC9pMzg2L3BjL2dydWItc2V0dXAuYyB1dGlsL2Jpb3Nk aXNrLmMJXAogCVwKIAlwYXJ0bWFwL3BjLmMgcGFydG1hcC9ncHQuYwkJCQlcCiAJXAotCWRpc2sv cmFpZC5jIGRpc2svbHZtLmMJCQkJCVwKKwlkaXNrL3JhaWQuYyBkaXNrL21kcmFpZF9saW51eC5j IGRpc2svbHZtLmMJCVwKIAl1dGlsL3JhaWQuYyB1dGlsL2x2bS5jCQkJCQlcCiAJZ3J1Yl9zZXR1 cF9pbml0LmMKIApAQCAtMTQzLDcgKzE0Myw4IEBAIGdydWJfZW11X1NPVVJDRVMgPSBjb21tYW5k cy9ib290LmMgY29tbWFuZHMvY2F0LmMgY29tbWFuZHMvY21wLmMJXAogCXV0aWwvYmlvc2Rpc2su YyB1dGlsL2dldHJvb3QuYwkJCQkJXAogCXV0aWwvaTM4Ni9wYy9taXNjLmMJCQkJCQlcCiAJXAot CWRpc2svcmFpZC5jIGRpc2svbHZtLmMJCQkJCQlcCisJZGlzay9yYWlkLmMgZGlzay9yYWlkNV9y ZWNvdmVyLmMgZGlzay9yYWlkNl9yZWNvdmVyLmMJCVwKKwlkaXNrL21kcmFpZF9saW51eC5jIGRp c2svZG1yYWlkX252aWRpYS5jIGRpc2svbHZtLmMJCVwKIAlncnViX2VtdV9pbml0LmMKIAogZ3J1 Yl9lbXVfTERGTEFHUyA9ICQoTElCQ1VSU0VTKQpkaWZmIC0tZ2l0IGEvY29uZi9wb3dlcnBjLWll ZWUxMjc1LnJtayBiL2NvbmYvcG93ZXJwYy1pZWVlMTI3NS5ybWsKaW5kZXggN2U0YWFhOS4uZDk3 MjA3ZCAxMDA2NDQKLS0tIGEvY29uZi9wb3dlcnBjLWllZWUxMjc1LnJtaworKysgYi9jb25mL3Bv d2VycGMtaWVlZTEyNzUucm1rCkBAIC02Nyw3ICs2Nyw4IEBAIGdydWJfZW11X1NPVVJDRVMgPSBj b21tYW5kcy9ib290LmMgY29tbWFuZHMvY2F0LmMgY29tbWFuZHMvY21wLmMgCVwKIAl1dGlsL2Jp b3NkaXNrLmMgdXRpbC9nZXRyb290LmMJCQkJCVwKIAl1dGlsL3Bvd2VycGMvaWVlZTEyNzUvbWlz Yy5jCQkJCQlcCiAJXAotCWRpc2svcmFpZC5jIGRpc2svbHZtLmMJCQkJCQlcCisJZGlzay9yYWlk LmMgZGlzay9yYWlkNV9yZWNvdmVyLmMgZGlzay9yYWlkNl9yZWNvdmVyLmMJCVwKKwlkaXNrL21k cmFpZF9saW51eC5jIGRpc2svZG1yYWlkX252aWRpYS5jIGRpc2svbHZtLmMJCVwKIAlncnViX3Nj cmlwdC50YWIuYyBncnViX2VtdV9pbml0LmMKIAogZ3J1Yl9lbXVfTERGTEFHUyA9ICQoTElCQ1VS U0VTKQpkaWZmIC0tZ2l0IGEvY29uZi94ODZfNjQtZWZpLnJtayBiL2NvbmYveDg2XzY0LWVmaS5y bWsKaW5kZXggNDczYzM0ZS4uNjZlOWU4NSAxMDA2NDQKLS0tIGEvY29uZi94ODZfNjQtZWZpLnJt aworKysgYi9jb25mL3g4Nl82NC1lZmkucm1rCkBAIC02NCw3ICs2NCw4IEBAIGdydWJfZW11X1NP VVJDRVMgPSBjb21tYW5kcy9ib290LmMgY29tbWFuZHMvY2F0LmMgY29tbWFuZHMvY21wLmMgCVwK IAl1dGlsL2Jpb3NkaXNrLmMgdXRpbC9nZXRyb290LmMJCQkJCVwKIAl1dGlsL2kzODYvcGMvbWlz Yy5jCQkJCQkJXAogCVwKLQlkaXNrL3JhaWQuYyBkaXNrL2x2bS5jCQkJCQkJXAorCWRpc2svcmFp ZC5jIGRpc2svcmFpZDVfcmVjb3Zlci5jIGRpc2svcmFpZDZfcmVjb3Zlci5jCQlcCisJZGlzay9t ZHJhaWRfbGludXguYyBkaXNrL2RtcmFpZF9udmlkaWEuYyBkaXNrL2x2bS5jCQlcCiAJZ3J1Yl9l bXVfaW5pdC5jCiAKIGdydWJfZW11X0xERkxBR1MgPSAkKExJQkNVUlNFUykKZGlmZiAtLWdpdCBh L2Rpc2svZG1yYWlkX252aWRpYS5jIGIvZGlzay9kbXJhaWRfbnZpZGlhLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJkNWVkMwotLS0gL2Rldi9udWxsCisrKyBiL2Rpc2sv ZG1yYWlkX252aWRpYS5jCkBAIC0wLDAgKzEsMTY2IEBACisvKiBkbXJhaWRfbnZpZGlhLmMgLSBt b2R1bGUgdG8gaGFuZGxlIE52aWRpYSBmYWtlcmFpZC4gICovCisvKgorICogIEdSVUIgIC0tICBH UmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDYsMjAwNywyMDA4 ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAqCisgKiAgR1JVQiBpcyBmcmVlIHNv ZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5k ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAz IG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp b24uCisgKgorICogIEdSVUIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2 ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdp dGggR1JVQi4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKyAq LworCisjaW5jbHVkZSA8Z3J1Yi9kbC5oPgorI2luY2x1ZGUgPGdydWIvZGlzay5oPgorI2luY2x1 ZGUgPGdydWIvbW0uaD4KKyNpbmNsdWRlIDxncnViL2Vyci5oPgorI2luY2x1ZGUgPGdydWIvbWlz Yy5oPgorI2luY2x1ZGUgPGdydWIvcmFpZC5oPgorCisjZGVmaW5lIE5WX1NJR05BVFVSRVMJCTQK KworI2RlZmluZSBOVl9JRExFCQkJMAorI2RlZmluZSBOVl9TQ0RCX0lOSVRfUkFJRAkyCisjZGVm aW5lIE5WX1NDREJfUkVCVUlMRF9SQUlECTMKKyNkZWZpbmUgTlZfU0NEQl9VUEdSQURFX1JBSUQJ NAorI2RlZmluZSBOVl9TQ0RCX1NZTkNfUkFJRAk1CisKKyNkZWZpbmUgTlZfTEVWRUxfVU5LTk9X TgkweDAwCisjZGVmaW5lIE5WX0xFVkVMX0pCT0QJCTB4RkYKKyNkZWZpbmUgTlZfTEVWRUxfMAkJ MHg4MAorI2RlZmluZSBOVl9MRVZFTF8xCQkweDgxCisjZGVmaW5lIE5WX0xFVkVMXzMJCTB4ODMK KyNkZWZpbmUgTlZfTEVWRUxfNQkJMHg4NQorI2RlZmluZSBOVl9MRVZFTF8xMAkJMHg4YQorI2Rl ZmluZSBOVl9MRVZFTF8xXzAJCTB4ODE4MAorCisjZGVmaW5lIE5WX0FSUkFZX0ZMQUdfQk9PVAkJ MSAvKiBCSU9TIHVzZSBvbmx5LiAgKi8KKyNkZWZpbmUgTlZfQVJSQVlfRkxBR19FUlJPUgkJMiAv KiBEZWdyYWRlZCBvciBvZmZsaW5nLiAgKi8KKyNkZWZpbmUgTlZfQVJSQVlfRkxBR19QQVJJVFlf VkFMSUQJNCAvKiBSQUlELTMvNSBwYXJpdHkgdmFsaWQuICAqLworCitzdHJ1Y3QgZ3J1Yl9udl9h cnJheQoreworICBncnViX3VpbnQzMl90IHZlcnNpb247CisgIGdydWJfdWludDMyX3Qgc2lnbmF0 dXJlW05WX1NJR05BVFVSRVNdOworICBncnViX3VpbnQ4X3QgcmFpZF9qb2JfY29kZTsKKyAgZ3J1 Yl91aW50OF90IHN0cmlwZV93aWR0aDsKKyAgZ3J1Yl91aW50OF90IHRvdGFsX3ZvbHVtZXM7Cisg IGdydWJfdWludDhfdCBvcmlnaW5hbF93aWR0aDsKKyAgZ3J1Yl91aW50MzJfdCByYWlkX2xldmVs OworICBncnViX3VpbnQzMl90IHN0cmlwZV9ibG9ja19zaXplOworICBncnViX3VpbnQzMl90IHN0 cmlwZV9ibG9ja19zaXplX2J5dGVzOworICBncnViX3VpbnQzMl90IHN0cmlwZV9ibG9ja19zaXpl X2xvZzI7CisgIGdydWJfdWludDMyX3Qgc3RyaXBlX21hc2s7CisgIGdydWJfdWludDMyX3Qgc3Ry aXBlX3NpemU7CisgIGdydWJfdWludDMyX3Qgc3RyaXBlX3NpemVfYnl0ZXM7CisgIGdydWJfdWlu dDMyX3QgcmFpZF9qb2JfbWFzazsKKyAgZ3J1Yl91aW50MzJfdCBvcmlnaW5hbF9jYXBhY2l0eTsK KyAgZ3J1Yl91aW50MzJfdCBmbGFnczsKK307CisKKyNkZWZpbmUgTlZfSURfTEVOCQk4CisjZGVm aW5lIE5WX0lEX1NUUklORwkJIk5WSURJQSIKKyNkZWZpbmUgTlZfVkVSU0lPTgkJMTAwCisKKyNk ZWZpbmUJTlZfUFJPRElEX0xFTgkJMTYKKyNkZWZpbmUJTlZfUFJPRFJFVl9MRU4JCTQKKworc3Ry dWN0IGdydWJfbnZfc3VwZXIKK3sKKyAgY2hhciB2ZW5kb3JbTlZfSURfTEVOXTsJLyogMHgwMCAt IDB4MDcgSUQgc3RyaW5nLiAgKi8KKyAgZ3J1Yl91aW50MzJfdCBzaXplOwkJLyogMHgwOCAtIDB4 MEIgU2l6ZSBvZiBtZXRhZGF0YSBpbiBkd29yZHMuICAqLworICBncnViX3VpbnQzMl90IGNoa3N1 bTsJCS8qIDB4MEMgLSAweDBGIENoZWNrc3VtIG9mIHRoaXMgc3RydWN0LiAgKi8KKyAgZ3J1Yl91 aW50MTZfdCB2ZXJzaW9uOwkvKiAweDEwIC0gMHgxMSBOViB2ZXJzaW9uLiAgKi8KKyAgZ3J1Yl91 aW50OF90IHVuaXRfbnVtYmVyOwkvKiAweDEyIERpc2sgaW5kZXggaW4gYXJyYXkuICAqLworICBn cnViX3VpbnQ4X3QgcmVzZXJ2ZWQ7CS8qIDB4MTMuICAqLworICBncnViX3VpbnQzMl90IGNhcGFj aXR5OwkvKiAweDE0IC0gMHgxNyBBcnJheSBjYXBhY2l0eSBpbiBzZWN0b3JzLiAgKi8KKyAgZ3J1 Yl91aW50MzJfdCBzZWN0b3Jfc2l6ZTsJLyogMHgxOCAtIDB4MUIgU2VjdG9yIHNpemUuICAqLwor ICBjaGFyIHByb2RpZFtOVl9QUk9ESURfTEVOXTsJLyogMHgxQyAtIDB4MkIgQXJyYXkgcHJvZHVj dCBJRC4gICovCisgIGNoYXIgcHJvZHJldltOVl9QUk9EUkVWX0xFTl07CS8qIDB4MkMgLSAweDJG IEFycmF5IHByb2R1Y3QgcmV2aXNpb24gKi8KKyAgZ3J1Yl91aW50MzJfdCB1bml0X2ZsYWdzOwkv KiAweDMwIC0gMHgzMyBGbGFncyBmb3IgdGhpcyBkaXNrICovCisgIHN0cnVjdCBncnViX252X2Fy cmF5IGFycmF5OwkvKiBBcnJheSBpbmZvcm1hdGlvbiAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFj a2VkKSk7CisKK3N0YXRpYyBncnViX2Vycl90CitncnViX2RtcmFpZF9udl9kZXRlY3QgKGdydWJf ZGlza190IGRpc2ssIHN0cnVjdCBncnViX3JhaWRfYXJyYXkgKmFycmF5KQoreworICBncnViX2Rp c2tfYWRkcl90IHNlY3RvcjsKKyAgc3RydWN0IGdydWJfbnZfc3VwZXIgc2I7CisgIGdydWJfdWlu dDMyX3QgKnV1aWQ7CisKKyAgaWYgKGRpc2stPnBhcnRpdGlvbikKKyAgICByZXR1cm4gZ3J1Yl9l cnJvciAoR1JVQl9FUlJfT1VUX09GX1JBTkdFLCAic2tpcCBwYXJ0aXRpb24iKTsKKworICBzZWN0 b3IgPSBncnViX2Rpc2tfZ2V0X3NpemUgKGRpc2spIC0gMjsKKworICBpZiAoZ3J1Yl9kaXNrX3Jl YWQgKGRpc2ssIHNlY3RvciwgMCwgc2l6ZW9mIChzYiksIChjaGFyICopICZzYikpCisgICAgcmV0 dXJuIGdydWJfZXJybm87CisKKyAgaWYgKGdydWJfbWVtY21wIChzYi52ZW5kb3IsIE5WX0lEX1NU UklORywgNikpCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9SQU5HRSwg Im5vdCByYWlkIik7CisKKyAgaWYgKHNiLnZlcnNpb24gIT0gTlZfVkVSU0lPTikKKyAgICByZXR1 cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfTk9UX0lNUExFTUVOVEVEX1lFVCwKKyAgICAgICAgICAg ICAgICAgICAgICAgIlVua25vd24gdmVyc2lvbjogJWQuJWQiLCBzYi52ZXJzaW9uKTsKKworICBz d2l0Y2ggKHNiLmFycmF5LnJhaWRfbGV2ZWwpCisgICAgeworICAgIGNhc2UgTlZfTEVWRUxfMDoK KyAgICAgIGFycmF5LT5sZXZlbCA9IDA7CisgICAgICBhcnJheS0+ZGlza19zaXplID0gc2IuY2Fw YWNpdHkgLyBzYi5hcnJheS50b3RhbF92b2x1bWVzOworICAgICAgYnJlYWs7CisKKyAgICBjYXNl IE5WX0xFVkVMXzE6CisgICAgICBhcnJheS0+bGV2ZWwgPSAxOworICAgICAgYXJyYXktPmRpc2tf c2l6ZSA9IHNiLmNhcGFjaXR5OworICAgICAgYnJlYWs7CisKKyAgICBjYXNlIE5WX0xFVkVMXzU6 CisgICAgICBhcnJheS0+bGV2ZWwgPSA1OworICAgICAgYXJyYXktPmxheW91dCA9IEdSVUJfUkFJ RF9MQVlPVVRfTEVGVF9BU1lNTUVUUklDOworICAgICAgYXJyYXktPmRpc2tfc2l6ZSA9IHNiLmNh cGFjaXR5IC8gKHNiLmFycmF5LnRvdGFsX3ZvbHVtZXMgLSAxKTsKKyAgICAgIGJyZWFrOworCisg ICAgZGVmYXVsdDoKKyAgICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9OT1RfSU1QTEVN RU5URURfWUVULAorICAgICAgICAgICAgICAgICAgICAgICAgICJVbnN1cHBvcnRlZCBSQUlEIGxl dmVsOiAlZCIsIHNiLmFycmF5LnJhaWRfbGV2ZWwpOworICAgIH0KKworICBhcnJheS0+bnVtYmVy ID0gMDsKKyAgYXJyYXktPnRvdGFsX2RldnMgPSBzYi5hcnJheS50b3RhbF92b2x1bWVzOworICBh cnJheS0+Y2h1bmtfc2l6ZSA9IHNiLmFycmF5LnN0cmlwZV9ibG9ja19zaXplOworICBhcnJheS0+ aW5kZXggPSBzYi51bml0X251bWJlcjsKKyAgYXJyYXktPnV1aWRfbGVuID0gc2l6ZW9mIChzYi5h cnJheS5zaWduYXR1cmUpOworICBhcnJheS0+dXVpZCA9IGdydWJfbWFsbG9jIChzaXplb2YgKHNi LmFycmF5LnNpZ25hdHVyZSkpOworICBpZiAoISBhcnJheS0+dXVpZCkKKyAgICByZXR1cm4gZ3J1 Yl9lcnJubzsKKworICBncnViX21lbWNweSAoYXJyYXktPnV1aWQsIChjaGFyICopICZzYi5hcnJh eS5zaWduYXR1cmUsCisgICAgICAgICAgICAgICBzaXplb2YgKHNiLmFycmF5LnNpZ25hdHVyZSkp OworCisgIHJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGdydWJfcmFpZCBncnViX2RtcmFp ZF9udl9kZXYgPQoreworICAubmFtZSA9ICJkbXJhaWRfbnYiLAorICAuZGV0ZWN0ID0gZ3J1Yl9k bXJhaWRfbnZfZGV0ZWN0LAorICAubmV4dCA9IDAKK307CisKK0dSVUJfTU9EX0lOSVQoZG1fbnYp Cit7CisgIGdydWJfcmFpZF9yZWdpc3RlciAoJmdydWJfZG1yYWlkX252X2Rldik7Cit9CisKK0dS VUJfTU9EX0ZJTkkoZG1fbnYpCit7CisgIGdydWJfcmFpZF9yZWdpc3RlciAoJmdydWJfZG1yYWlk X252X2Rldik7Cit9CmRpZmYgLS1naXQgYS9kaXNrL2kzODYvcGMvYmlvc2Rpc2suYyBiL2Rpc2sv aTM4Ni9wYy9iaW9zZGlzay5jCmluZGV4IGM4ZmQxNDIuLjhiN2Y1ZWQgMTAwNjQ0Ci0tLSBhL2Rp c2svaTM4Ni9wYy9iaW9zZGlzay5jCisrKyBiL2Rpc2svaTM4Ni9wYy9iaW9zZGlzay5jCkBAIC0x MjAsNyArMTIwLDcgQEAgZ3J1Yl9iaW9zZGlza19vcGVuIChjb25zdCBjaGFyICpuYW1lLCBncnVi X2Rpc2tfdCBkaXNrKQogICAgIHsKICAgICAgIGRhdGEtPmZsYWdzID0gR1JVQl9CSU9TRElTS19G TEFHX0xCQSB8IEdSVUJfQklPU0RJU0tfRkxBR19DRFJPTTsKICAgICAgIGRhdGEtPnNlY3RvcnMg PSAzMjsKLSAgICAgIHRvdGFsX3NlY3RvcnMgPSA5MDAwMDAwOyAgLyogVE9ETzogZ2V0IHRoZSBj b3JyZWN0IHNpemUuICAqLworICAgICAgdG90YWxfc2VjdG9ycyA9IFVMT05HX01BWDsgIC8qIFRP RE86IGdldCB0aGUgY29ycmVjdCBzaXplLiAgKi8KICAgICB9CiAgIGVsc2UgaWYgKGRyaXZlICYg MHg4MCkKICAgICB7CmRpZmYgLS1naXQgYS9kaXNrL21kcmFpZF9saW51eC5jIGIvZGlzay9tZHJh aWRfbGludXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjNmYWI3Ci0t LSAvZGV2L251bGwKKysrIGIvZGlzay9tZHJhaWRfbGludXguYwpAQCAtMCwwICsxLDIzMyBAQAor LyogbWRyYWlkX2xpbnV4LmMgLSBtb2R1bGUgdG8gaGFuZGxlIGxpbnV4IHNvZnRyYWlkLiAgKi8K Ky8qCisgKiAgR1JVQiAgLS0gIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlcgorICogIENvcHlyaWdo dCAoQykgMjAwOCAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogIEdSVUIg aXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQor ICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVy IHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgorICoKKyAqICBHUlVCIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAq ICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vu c2VzLz4uCisgKi8KKworI2luY2x1ZGUgPGdydWIvZGwuaD4KKyNpbmNsdWRlIDxncnViL2Rpc2su aD4KKyNpbmNsdWRlIDxncnViL21tLmg+CisjaW5jbHVkZSA8Z3J1Yi9lcnIuaD4KKyNpbmNsdWRl IDxncnViL21pc2MuaD4KKyNpbmNsdWRlIDxncnViL3JhaWQuaD4KKworLyogTGludXggUkFJRCBv biBkaXNrIHN0cnVjdHVyZXMgYW5kIGNvbnN0YW50cywKKyAgIGNvcGllZCBmcm9tIGluY2x1ZGUv bGludXgvcmFpZC9tZF9wLmguICAqLworCisjZGVmaW5lIFJFU0VSVkVEX0JZVEVTCQkJKDY0ICog MTAyNCkKKyNkZWZpbmUgUkVTRVJWRURfU0VDVE9SUwkJKFJFU0VSVkVEX0JZVEVTIC8gNTEyKQor CisjZGVmaW5lIE5FV19TSVpFX1NFQ1RPUlMoeCkJCSgoeCAmIH4oUkVTRVJWRURfU0VDVE9SUyAt IDEpKSBcCisJCQkJCS0gUkVTRVJWRURfU0VDVE9SUykKKworI2RlZmluZSBTQl9CWVRFUwkJCTQw OTYKKyNkZWZpbmUgU0JfV09SRFMJCQkoU0JfQllURVMgLyA0KQorI2RlZmluZSBTQl9TRUNUT1JT CQkJKFNCX0JZVEVTIC8gNTEyKQorCisvKgorICogVGhlIGZvbGxvd2luZyBhcmUgY291bnRlZCBp biAzMi1iaXQgd29yZHMKKyAqLworI2RlZmluZQlTQl9HRU5FUklDX09GRlNFVAkJMAorCisjZGVm aW5lIFNCX1BFUlNPTkFMSVRZX09GRlNFVAkJNjQKKyNkZWZpbmUgU0JfRElTS1NfT0ZGU0VUCQkJ MTI4CisjZGVmaW5lIFNCX0RFU0NSSVBUT1JfT0ZGU0VUCQk5OTIKKworI2RlZmluZSBTQl9HRU5F UklDX0NPTlNUQU5UX1dPUkRTCTMyCisjZGVmaW5lIFNCX0dFTkVSSUNfU1RBVEVfV09SRFMJCTMy CisjZGVmaW5lIFNCX0dFTkVSSUNfV09SRFMJCShTQl9HRU5FUklDX0NPTlNUQU5UX1dPUkRTICsg XAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTQl9HRU5FUklDX1NU QVRFX1dPUkRTKQorCisjZGVmaW5lIFNCX1BFUlNPTkFMSVRZX1dPUkRTCQk2NAorI2RlZmluZSBT Ql9ERVNDUklQVE9SX1dPUkRTCQkzMgorI2RlZmluZSBTQl9ESVNLUwkJCTI3CisjZGVmaW5lIFNC X0RJU0tTX1dPUkRTCQkJKFNCX0RJU0tTICogU0JfREVTQ1JJUFRPUl9XT1JEUykKKworI2RlZmlu ZSBTQl9SRVNFUlZFRF9XT1JEUwkJKDEwMjQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAtIFNCX0dFTkVSSUNfV09SRFMgXAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAtIFNCX1BFUlNPTkFMSVRZX1dPUkRTIFwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBTQl9ESVNLU19XT1JEUyBcCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gU0JfREVTQ1JJUFRPUl9XT1JEUykK KworI2RlZmluZSBTQl9FUVVBTF9XT1JEUwkJCShTQl9HRU5FUklDX1dPUkRTIFwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyBTQl9QRVJTT05BTElUWV9XT1JEUyBc CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsgU0JfRElTS1NfV09S RFMpCisKKy8qCisgKiBEZXZpY2UgIm9wZXJhdGlvbmFsIiBzdGF0ZSBiaXRzCisgKi8KKyNkZWZp bmUgRElTS19GQVVMVFkJCQkwCisjZGVmaW5lIERJU0tfQUNUSVZFCQkJMQorI2RlZmluZSBESVNL X1NZTkMJCQkyCisjZGVmaW5lIERJU0tfUkVNT1ZFRAkJCTMKKworI2RlZmluZQlESVNLX1dSSVRF TU9TVExZCQk5CisKKyNkZWZpbmUgU0JfTUFHSUMJCQkweGE5MmI0ZWZjCisKKy8qCisgKiBTdXBl cmJsb2NrIHN0YXRlIGJpdHMKKyAqLworI2RlZmluZSBTQl9DTEVBTgkJCTAKKyNkZWZpbmUgU0Jf RVJST1JTCQkJMQorCisjZGVmaW5lCVNCX0JJVE1BUF9QUkVTRU5UCQk4CisKK3N0cnVjdCBncnVi X3JhaWRfZGlza18wOQoreworICBncnViX3VpbnQzMl90IG51bWJlcjsJCS8qIERldmljZSBudW1i ZXIgaW4gdGhlIGVudGlyZSBzZXQuICAqLworICBncnViX3VpbnQzMl90IG1ham9yOwkJLyogRGV2 aWNlIG1ham9yIG51bWJlci4gICovCisgIGdydWJfdWludDMyX3QgbWlub3I7CQkvKiBEZXZpY2Ug bWlub3IgbnVtYmVyLiAgKi8KKyAgZ3J1Yl91aW50MzJfdCByYWlkX2Rpc2s7CS8qIFRoZSByb2xl IG9mIHRoZSBkZXZpY2UgaW4gdGhlIHJhaWQgc2V0LiAgKi8KKyAgZ3J1Yl91aW50MzJfdCBzdGF0 ZTsJCS8qIE9wZXJhdGlvbmFsIHN0YXRlLiAgKi8KKyAgZ3J1Yl91aW50MzJfdCByZXNlcnZlZFtT Ql9ERVNDUklQVE9SX1dPUkRTIC0gNV07Cit9OworCitzdHJ1Y3QgZ3J1Yl9yYWlkX3N1cGVyXzA5 Cit7CisgIC8qCisgICAqIENvbnN0YW50IGdlbmVyaWMgaW5mb3JtYXRpb24KKyAgICovCisgIGdy dWJfdWludDMyX3QgbWRfbWFnaWM7CS8qIE1EIGlkZW50aWZpZXIuICAqLworICBncnViX3VpbnQz Ml90IG1ham9yX3ZlcnNpb247CS8qIE1ham9yIHZlcnNpb24uICAqLworICBncnViX3VpbnQzMl90 IG1pbm9yX3ZlcnNpb247CS8qIE1pbm9yIHZlcnNpb24uICAqLworICBncnViX3VpbnQzMl90IHBh dGNoX3ZlcnNpb247CS8qIFBhdGNobGV2ZWwgdmVyc2lvbi4gICovCisgIGdydWJfdWludDMyX3Qg Z3ZhbGlkX3dvcmRzOwkvKiBOdW1iZXIgb2YgdXNlZCB3b3JkcyBpbiB0aGlzIHNlY3Rpb24uICAq LworICBncnViX3VpbnQzMl90IHNldF91dWlkMDsJLyogUmFpZCBzZXQgaWRlbnRpZmllci4gICov CisgIGdydWJfdWludDMyX3QgY3RpbWU7CQkvKiBDcmVhdGlvbiB0aW1lLiAgKi8KKyAgZ3J1Yl91 aW50MzJfdCBsZXZlbDsJCS8qIFJhaWQgcGVyc29uYWxpdHkuICAqLworICBncnViX3VpbnQzMl90 IHNpemU7CQkvKiBBcHBhcmVudCBzaXplIG9mIGVhY2ggaW5kaXZpZHVhbCBkaXNrLiAgKi8KKyAg Z3J1Yl91aW50MzJfdCBucl9kaXNrczsJLyogVG90YWwgZGlza3MgaW4gdGhlIHJhaWQgc2V0LiAg Ki8KKyAgZ3J1Yl91aW50MzJfdCByYWlkX2Rpc2tzOwkvKiBEaXNrcyBpbiBhIGZ1bGx5IGZ1bmN0 aW9uYWwgcmFpZCBzZXQuICAqLworICBncnViX3VpbnQzMl90IG1kX21pbm9yOwkvKiBQcmVmZXJy ZWQgTUQgbWlub3IgZGV2aWNlIG51bWJlci4gICovCisgIGdydWJfdWludDMyX3Qgbm90X3BlcnNp c3RlbnQ7CS8qIERvZXMgaXQgaGF2ZSBhIHBlcnNpc3RlbnQgc3VwZXJibG9jay4gICovCisgIGdy dWJfdWludDMyX3Qgc2V0X3V1aWQxOwkvKiBSYWlkIHNldCBpZGVudGlmaWVyICMyLiAgKi8KKyAg Z3J1Yl91aW50MzJfdCBzZXRfdXVpZDI7CS8qIFJhaWQgc2V0IGlkZW50aWZpZXIgIzMuICAqLwor ICBncnViX3VpbnQzMl90IHNldF91dWlkMzsJLyogUmFpZCBzZXQgaWRlbnRpZmllciAjNC4gICov CisgIGdydWJfdWludDMyX3QgZ3N0YXRlX2NyZXNlcnZlZFtTQl9HRU5FUklDX0NPTlNUQU5UX1dP UkRTIC0gMTZdOworCisgIC8qCisgICAqIEdlbmVyaWMgc3RhdGUgaW5mb3JtYXRpb24KKyAgICov CisgIGdydWJfdWludDMyX3QgdXRpbWU7CQkvKiBTdXBlcmJsb2NrIHVwZGF0ZSB0aW1lLiAgKi8K KyAgZ3J1Yl91aW50MzJfdCBzdGF0ZTsJCS8qIFN0YXRlIGJpdHMgKGNsZWFuLCAuLi4pLiAgKi8K KyAgZ3J1Yl91aW50MzJfdCBhY3RpdmVfZGlza3M7CS8qIE51bWJlciBvZiBjdXJyZW50bHkgYWN0 aXZlIGRpc2tzLiAgKi8KKyAgZ3J1Yl91aW50MzJfdCB3b3JraW5nX2Rpc2tzOwkvKiBOdW1iZXIg b2Ygd29ya2luZyBkaXNrcy4gICovCisgIGdydWJfdWludDMyX3QgZmFpbGVkX2Rpc2tzOwkvKiBO dW1iZXIgb2YgZmFpbGVkIGRpc2tzLiAgKi8KKyAgZ3J1Yl91aW50MzJfdCBzcGFyZV9kaXNrczsJ LyogTnVtYmVyIG9mIHNwYXJlIGRpc2tzLiAgKi8KKyAgZ3J1Yl91aW50MzJfdCBzYl9jc3VtOwkv KiBDaGVja3N1bSBvZiB0aGUgd2hvbGUgc3VwZXJibG9jay4gICovCisgIGdydWJfdWludDY0X3Qg ZXZlbnRzOwkJLyogU3VwZXJibG9jayB1cGRhdGUgY291bnQuICAqLworICBncnViX3VpbnQ2NF90 IGNwX2V2ZW50czsJLyogQ2hlY2twb2ludCB1cGRhdGUgY291bnQuICAqLworICBncnViX3VpbnQz Ml90IHJlY292ZXJ5X2NwOwkvKiBSZWNvdmVyeSBjaGVja3BvaW50IHNlY3RvciBjb3VudC4gICov CisgIGdydWJfdWludDMyX3QgZ3N0YXRlX3NyZXNlcnZlZFtTQl9HRU5FUklDX1NUQVRFX1dPUkRT IC0gMTJdOworCisgIC8qCisgICAqIFBlcnNvbmFsaXR5IGluZm9ybWF0aW9uCisgICAqLworICBn cnViX3VpbnQzMl90IGxheW91dDsJCS8qIFRoZSBhcnJheSdzIHBoeXNpY2FsIGxheW91dC4gICov CisgIGdydWJfdWludDMyX3QgY2h1bmtfc2l6ZTsJLyogQ2h1bmsgc2l6ZSBpbiBieXRlcy4gICov CisgIGdydWJfdWludDMyX3Qgcm9vdF9wdjsJLyogTFYgcm9vdCBQVi4gICovCisgIGdydWJfdWlu dDMyX3Qgcm9vdF9ibG9jazsJLyogTFYgcm9vdCBibG9jay4gICovCisgIGdydWJfdWludDMyX3Qg cHN0YXRlX3Jlc2VydmVkW1NCX1BFUlNPTkFMSVRZX1dPUkRTIC0gNF07CisKKyAgLyoKKyAgICog RGlza3MgaW5mb3JtYXRpb24KKyAgICovCisgIHN0cnVjdCBncnViX3JhaWRfZGlza18wOSBkaXNr c1tTQl9ESVNLU107CisKKyAgLyoKKyAgICogUmVzZXJ2ZWQKKyAgICovCisgIGdydWJfdWludDMy X3QgcmVzZXJ2ZWRbU0JfUkVTRVJWRURfV09SRFNdOworCisgIC8qCisgICAqIEFjdGl2ZSBkZXNj cmlwdG9yCisgICAqLworICBzdHJ1Y3QgZ3J1Yl9yYWlkX2Rpc2tfMDkgdGhpc19kaXNrOworfSBf X2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0YXRpYyBncnViX2Vycl90CitncnViX21kcmFp ZF9kZXRlY3QgKGdydWJfZGlza190IGRpc2ssIHN0cnVjdCBncnViX3JhaWRfYXJyYXkgKmFycmF5 KQoreworICBncnViX2Rpc2tfYWRkcl90IHNlY3RvcjsKKyAgZ3J1Yl91aW50NjRfdCBzaXplOwor ICBzdHJ1Y3QgZ3J1Yl9yYWlkX3N1cGVyXzA5IHNiOworICBncnViX3VpbnQzMl90ICp1dWlkOwor CisgIC8qIFRoZSBzZWN0b3Igd2hlcmUgdGhlIFJBSUQgc3VwZXJibG9jayBpcyBzdG9yZWQsIGlm IGF2YWlsYWJsZS4gKi8KKyAgc2l6ZSA9IGdydWJfZGlza19nZXRfc2l6ZSAoZGlzayk7CisgIHNl Y3RvciA9IE5FV19TSVpFX1NFQ1RPUlMgKHNpemUpOworCisgIGlmIChncnViX2Rpc2tfcmVhZCAo ZGlzaywgc2VjdG9yLCAwLCBTQl9CWVRFUywgKGNoYXIgKikgJnNiKSkKKyAgICByZXR1cm4gZ3J1 Yl9lcnJubzsKKworICAvKiBMb29rIHdoZXRoZXIgdGhlcmUgaXMgYSBSQUlEIHN1cGVyYmxvY2su ICovCisgIGlmIChzYi5tZF9tYWdpYyAhPSBTQl9NQUdJQykKKyAgICByZXR1cm4gZ3J1Yl9lcnJv ciAoR1JVQl9FUlJfT1VUX09GX1JBTkdFLCAibm90IHJhaWQiKTsKKworICAvKiBGSVhNRTogQWxz byBzdXBwb3J0IHZlcnNpb24gMS4wLiAqLworICBpZiAoc2IubWFqb3JfdmVyc2lvbiAhPSAwIHx8 IHNiLm1pbm9yX3ZlcnNpb24gIT0gOTApCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJS X05PVF9JTVBMRU1FTlRFRF9ZRVQsCisJCSAgICAgICAiVW5zdXBwb3J0ZWQgUkFJRCB2ZXJzaW9u OiAlZC4lZCIsCisJCSAgICAgICBzYi5tYWpvcl92ZXJzaW9uLCBzYi5taW5vcl92ZXJzaW9uKTsK KworICAvKiBGSVhNRTogQ2hlY2sgdGhlIGNoZWNrc3VtLiAqLworCisgIC8qIE11bHRpcGF0aC4g ICovCisgIGlmICgoaW50KSBzYi5sZXZlbCA9PSAtNCkKKyAgICBzYi5sZXZlbCA9IDE7CisKKyAg aWYgKHNiLmxldmVsICE9IDAgJiYgc2IubGV2ZWwgIT0gMSAmJiBzYi5sZXZlbCAhPSA0ICYmCisg ICAgICBzYi5sZXZlbCAhPSA1ICYmIHNiLmxldmVsICE9IDYgJiYgc2IubGV2ZWwgIT0gMTApCisg ICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX05PVF9JTVBMRU1FTlRFRF9ZRVQsCisJCSAg ICAgICAiVW5zdXBwb3J0ZWQgUkFJRCBsZXZlbDogJWQiLCBzYi5sZXZlbCk7CisKKyAgYXJyYXkt Pm51bWJlciA9IHNiLm1kX21pbm9yOworICBhcnJheS0+bGV2ZWwgPSBzYi5sZXZlbDsKKyAgYXJy YXktPmxheW91dCA9IHNiLmxheW91dDsKKyAgYXJyYXktPnRvdGFsX2RldnMgPSBzYi5yYWlkX2Rp c2s7CisgIGFycmF5LT5kaXNrX3NpemUgPSAoc2Iuc2l6ZSkgPyBzYi5zaXplICogMiA6IHNlY3Rv cjsKKyAgYXJyYXktPmNodW5rX3NpemUgPSBzYi5jaHVua19zaXplID4+IDk7CisgIGFycmF5LT5p bmRleCA9IHNiLnRoaXNfZGlzay5udW1iZXI7CisgIGFycmF5LT51dWlkX2xlbiA9IDE2OworICBh cnJheS0+dXVpZCA9IGdydWJfbWFsbG9jICgxNik7CisgIGlmICghYXJyYXktPnV1aWQpCisgICAg cmV0dXJuIGdydWJfZXJybm87CisKKyAgdXVpZCA9IChncnViX3VpbnQzMl90ICopIGFycmF5LT51 dWlkOworICB1dWlkWzBdID0gc2Iuc2V0X3V1aWQwOworICB1dWlkWzFdID0gc2Iuc2V0X3V1aWQx OworICB1dWlkWzJdID0gc2Iuc2V0X3V1aWQyOworICB1dWlkWzNdID0gc2Iuc2V0X3V1aWQzOwor CisgIHJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGdydWJfcmFpZCBncnViX21kcmFpZF9k ZXYgPSB7CisgIC5uYW1lID0gIm1kcmFpZCIsCisgIC5kZXRlY3QgPSBncnViX21kcmFpZF9kZXRl Y3QsCisgIC5uZXh0ID0gMAorfTsKKworR1JVQl9NT0RfSU5JVCAobWRyYWlkKQoreworICBncnVi X3JhaWRfcmVnaXN0ZXIgKCZncnViX21kcmFpZF9kZXYpOworfQorCitHUlVCX01PRF9GSU5JICht ZHJhaWQpCit7CisgIGdydWJfcmFpZF9yZWdpc3RlciAoJmdydWJfbWRyYWlkX2Rldik7Cit9CmRp ZmYgLS1naXQgYS9kaXNrL3JhaWQuYyBiL2Rpc2svcmFpZC5jCmluZGV4IDdhYTIzOTguLjUwYzA2 NzEgMTAwNjQ0Ci0tLSBhL2Rpc2svcmFpZC5jCisrKyBiL2Rpc2svcmFpZC5jCkBAIC0yNiw2ICsy Niw4IEBACiAKIC8qIExpbmtlZCBsaXN0IG9mIFJBSUQgYXJyYXlzLiAqLwogc3RhdGljIHN0cnVj dCBncnViX3JhaWRfYXJyYXkgKmFycmF5X2xpc3Q7CitncnViX3JhaWQ1X3JlY292ZXJfZnVuY190 IGdydWJfcmFpZDVfcmVjb3Zlcl9mdW5jOworZ3J1Yl9yYWlkNl9yZWNvdmVyX2Z1bmNfdCBncnVi X3JhaWQ2X3JlY292ZXJfZnVuYzsKIAogDAogc3RhdGljIGNoYXIKQEAgLTQzLDEwICs0NSwyOSBA QCBncnViX2lzX2FycmF5X3JlYWRhYmxlIChzdHJ1Y3QgZ3J1Yl9yYWlkX2FycmF5ICphcnJheSkK IAlyZXR1cm4gMTsKICAgICAgIGJyZWFrOwogCisgICAgY2FzZSA0OgogICAgIGNhc2UgNToKLSAg ICAgIGlmIChhcnJheS0+bnJfZGV2cyA+PSBhcnJheS0+dG90YWxfZGV2cyAtIDEpCi0JcmV0dXJu IDE7Ci0gICAgICBicmVhazsKKyAgICBjYXNlIDY6CisgICAgY2FzZSAxMDoKKyAgICAgIHsKKyAg ICAgICAgdW5zaWduZWQgaW50IG47CisKKyAgICAgICAgaWYgKGFycmF5LT5sZXZlbCA9PSAxMCkK KyAgICAgICAgICB7CisgICAgICAgICAgICBuID0gYXJyYXktPmxheW91dCAmIDB4RkY7CisgICAg ICAgICAgICBpZiAobiA9PSAxKQorICAgICAgICAgICAgICBuID0gKGFycmF5LT5sYXlvdXQgPj4g OCkgJiAweEZGOworCisgICAgICAgICAgICBuLS07CisgICAgICAgICAgfQorICAgICAgICBlbHNl CisgICAgICAgICAgbiA9IGFycmF5LT5sZXZlbCAvIDM7CisKKyAgICAgICAgaWYgKGFycmF5LT5u cl9kZXZzID49IGFycmF5LT50b3RhbF9kZXZzIC0gbikKKyAgICAgICAgICByZXR1cm4gMTsKKwor ICAgICAgICBicmVhazsKKyAgICAgIH0KICAgICB9CiAKICAgcmV0dXJuIDA7CkBAIC03NiwxMiAr OTcsMTMgQEAgZ3J1Yl9yYWlkX21lbWJlcmxpc3QgKGdydWJfZGlza190IGRpc2spCiAgIHVuc2ln bmVkIGludCBpOwogICAKICAgZm9yIChpID0gMDsgaSA8IGFycmF5LT50b3RhbF9kZXZzOyBpKysp Ci0gICAgewotICAgICAgdG1wID0gZ3J1Yl9tYWxsb2MgKHNpemVvZiAoKnRtcCkpOwotICAgICAg dG1wLT5kaXNrID0gYXJyYXktPmRldmljZVtpXTsKLSAgICAgIHRtcC0+bmV4dCA9IGxpc3Q7Ci0g ICAgICBsaXN0ID0gdG1wOwotICAgIH0KKyAgICBpZiAoYXJyYXktPmRldmljZVtpXSkKKyAgICAg IHsKKyAgICAgICAgdG1wID0gZ3J1Yl9tYWxsb2MgKHNpemVvZiAoKnRtcCkpOworICAgICAgICB0 bXAtPmRpc2sgPSBhcnJheS0+ZGV2aWNlW2ldOworICAgICAgICB0bXAtPm5leHQgPSBsaXN0Owor ICAgICAgICBsaXN0ID0gdG1wOworICAgICAgfQogICAKICAgcmV0dXJuIGxpc3Q7CiB9CkBAIC05 MSw2ICsxMTMsNyBAQCBzdGF0aWMgZ3J1Yl9lcnJfdAogZ3J1Yl9yYWlkX29wZW4gKGNvbnN0IGNo YXIgKm5hbWUsIGdydWJfZGlza190IGRpc2spCiB7CiAgIHN0cnVjdCBncnViX3JhaWRfYXJyYXkg KmFycmF5OworICB1bnNpZ25lZCBuOwogICAKICAgZm9yIChhcnJheSA9IGFycmF5X2xpc3Q7IGFy cmF5ICE9IE5VTEw7IGFycmF5ID0gYXJyYXktPm5leHQpCiAgICAgewpAQCAtMTAwLDcgKzEyMyw4 IEBAIGdydWJfcmFpZF9vcGVuIChjb25zdCBjaGFyICpuYW1lLCBncnViX2Rpc2tfdCBkaXNrKQog ICAgIH0KIAogICBpZiAoIWFycmF5KQotICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9V TktOT1dOX0RFVklDRSwgIlVua25vd24gUkFJRCBkZXZpY2UgJXMiLCBuYW1lKTsKKyAgICByZXR1 cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfVU5LTk9XTl9ERVZJQ0UsICJVbmtub3duIFJBSUQgZGV2 aWNlICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgbmFtZSk7CiAKICAgZGlzay0+aGFzX3Bh cnRpdGlvbnMgPSAxOwogICBkaXNrLT5pZCA9IGFycmF5LT5udW1iZXI7CkBAIC0xMTEsMTcgKzEz NSwyNyBAQCBncnViX3JhaWRfb3BlbiAoY29uc3QgY2hhciAqbmFtZSwgZ3J1Yl9kaXNrX3QgZGlz aykKIAogICBzd2l0Y2ggKGFycmF5LT5sZXZlbCkKICAgICB7Ci0gICAgY2FzZSAwOgotICAgICAg LyogRklYTUU6IFJBSUQwIGRpc2tzIGNhbiBoYXZlIGRpZmZlcmVudCBzaXplcyEgKi8KLSAgICAg IGRpc2stPnRvdGFsX3NlY3RvcnMgPSBhcnJheS0+dG90YWxfZGV2cyAqIGFycmF5LT5kaXNrX3Np emU7Ci0gICAgICBicmVhazsKLQogICAgIGNhc2UgMToKICAgICAgIGRpc2stPnRvdGFsX3NlY3Rv cnMgPSBhcnJheS0+ZGlza19zaXplOwogICAgICAgYnJlYWs7CiAKKyAgICBjYXNlIDEwOgorICAg ICAgbiA9IGFycmF5LT5sYXlvdXQgJiAweEZGOworICAgICAgaWYgKG4gPT0gMSkKKyAgICAgICAg biA9IChhcnJheS0+bGF5b3V0ID4+IDgpICYgMHhGRjsKKworICAgICAgZGlzay0+dG90YWxfc2Vj dG9ycyA9IGdydWJfZGl2bW9kNjQgKGFycmF5LT50b3RhbF9kZXZzICoKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnJheS0+ZGlza19zaXplLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG4sIDApOworICAgICAgYnJlYWs7CisK KyAgICBjYXNlIDA6CisgICAgY2FzZSA0OgogICAgIGNhc2UgNToKLSAgICAgIGRpc2stPnRvdGFs X3NlY3RvcnMgPSAoYXJyYXktPnRvdGFsX2RldnMgLSAxKSAqIGFycmF5LT5kaXNrX3NpemU7Cisg ICAgY2FzZSA2OgorICAgICAgbiA9IGFycmF5LT5sZXZlbCAvIDM7CisKKyAgICAgIGRpc2stPnRv dGFsX3NlY3RvcnMgPSAoYXJyYXktPnRvdGFsX2RldnMgLSBuKSAqIGFycmF5LT5kaXNrX3NpemU7 CiAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTEzNyw2ICsxNzEsMjIgQEAgZ3J1Yl9yYWlkX2Ns b3NlIChncnViX2Rpc2tfdCBkaXNrIF9fYXR0cmlidXRlICgodW51c2VkKSkpCiAgIHJldHVybjsK IH0KIAordm9pZAorZ3J1Yl9yYWlkX2Jsb2NrX3hvciAoY2hhciAqYnVmMSwgY2hhciAqYnVmMiwg aW50IHNpemUpCit7CisgIGdydWJfc2l6ZV90ICpwMSwgKnAyOworCisgIHAxID0gKGdydWJfc2l6 ZV90ICopIGJ1ZjE7CisgIHAyID0gKGdydWJfc2l6ZV90ICopIGJ1ZjI7CisgIHNpemUgLz0gR1JV Ql9DUFVfU0laRU9GX1ZPSURfUDsKKworICB3aGlsZSAoc2l6ZSkKKyAgICB7CisgICAgICAqKHAx KyspIF49ICoocDIrKyk7CisgICAgICBzaXplLS07CisgICAgfQorfQorCiBzdGF0aWMgZ3J1Yl9l cnJfdAogZ3J1Yl9yYWlkX3JlYWQgKGdydWJfZGlza190IGRpc2ssIGdydWJfZGlza19hZGRyX3Qg c2VjdG9yLAogCQlncnViX3NpemVfdCBzaXplLCBjaGFyICpidWYpCkBAIC0xNDcsMTkwICsxOTcs MjY0IEBAIGdydWJfcmFpZF9yZWFkIChncnViX2Rpc2tfdCBkaXNrLCBncnViX2Rpc2tfYWRkcl90 IHNlY3RvciwKICAgc3dpdGNoIChhcnJheS0+bGV2ZWwpCiAgICAgewogICAgIGNhc2UgMDoKKyAg ICBjYXNlIDE6CisgICAgY2FzZSAxMDoKICAgICAgIHsKLQlncnViX3VpbnQ2NF90IGE7Ci0JZ3J1 Yl91aW50MzJfdCBiOwotCXVuc2lnbmVkIGludCBkaXNrbnI7Ci0JZ3J1Yl9kaXNrX2FkZHJfdCBy ZWFkX3NlY3RvcjsKLQlncnViX3NpemVfdCByZWFkX3NpemU7Ci0KLQkvKiBGaW5kIHRoZSBmaXJz dCBzZWN0b3IgdG8gcmVhZC4gKi8KLQlhID0gZ3J1Yl9kaXZtb2Q2NCAoc2VjdG9yLCBhcnJheS0+ Y2h1bmtfc2l6ZSwgTlVMTCk7Ci0JZ3J1Yl9kaXZtb2Q2NCAoYSwgYXJyYXktPnRvdGFsX2RldnMs ICZkaXNrbnIpOwotCi0JYSA9IGdydWJfZGl2bW9kNjQgKHNlY3RvciwgYXJyYXktPmNodW5rX3Np emUgKiBhcnJheS0+dG90YWxfZGV2cywgTlVMTCk7Ci0JZ3J1Yl9kaXZtb2Q2NCAoc2VjdG9yLCBh cnJheS0+Y2h1bmtfc2l6ZSwgJmIpOwotCXJlYWRfc2VjdG9yID0gYSAqIGFycmF5LT5jaHVua19z aXplICsgYjsKLQotCWdydWJfZGl2bW9kNjQgKHJlYWRfc2VjdG9yLCBhcnJheS0+Y2h1bmtfc2l6 ZSwgJmIpOwotCXJlYWRfc2l6ZSA9IGFycmF5LT5jaHVua19zaXplIC0gYjsKLQkKLQlpZiAocmVh ZF9zaXplID4gc2l6ZSkKLQkgIHJlYWRfc2l6ZSA9IHNpemU7Ci0JCi0Jd2hpbGUgKDEpCi0JICB7 Ci0JICAgIGdydWJfdWludDMyX3QgaTsKLQotCSAgICBlcnIgPSBncnViX2Rpc2tfcmVhZCAoYXJy YXktPmRldmljZVtkaXNrbnJdLCByZWFkX3NlY3RvciwgMCwKLQkJCQkgIHJlYWRfc2l6ZSA8PCBH UlVCX0RJU0tfU0VDVE9SX0JJVFMsIGJ1Zik7Ci0JICAgIGlmIChlcnIpCi0JICAgICAgYnJlYWs7 Ci0KLQkgICAgYnVmICs9IHJlYWRfc2l6ZSA8PCBHUlVCX0RJU0tfU0VDVE9SX0JJVFM7CisgICAg ICAgIGdydWJfZGlza19hZGRyX3QgcmVhZF9zZWN0b3IsIGZhcl9vZnM7CisJZ3J1Yl91aW50MzJf dCBkaXNrbnIsIGIsIG5lYXIsIGZhciwgb2ZzOworCisgICAgICAgIHJlYWRfc2VjdG9yID0gZ3J1 Yl9kaXZtb2Q2NCAoc2VjdG9yLCBhcnJheS0+Y2h1bmtfc2l6ZSwgJmIpOworICAgICAgICBmYXIg PSBvZnMgPSBuZWFyID0gMTsKKyAgICAgICAgZmFyX29mcyA9IDA7CisKKyAgICAgICAgaWYgKGFy cmF5LT5sZXZlbCA9PSAxKQorICAgICAgICAgIG5lYXIgPSBhcnJheS0+dG90YWxfZGV2czsKKyAg ICAgICAgZWxzZSBpZiAoYXJyYXktPmxldmVsID09IDEwKQorICAgICAgICAgIHsKKyAgICAgICAg ICAgIG5lYXIgPSBhcnJheS0+bGF5b3V0ICYgMHhGRjsKKyAgICAgICAgICAgIGZhciA9IChhcnJh eS0+bGF5b3V0ID4+IDgpICYgMHhGRjsKKyAgICAgICAgICAgIGlmIChhcnJheS0+bGF5b3V0ID4+ IDE2KQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgb2ZzID0gZmFyOworICAgICAg ICAgICAgICAgIGZhcl9vZnMgPSAxOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNl CisgICAgICAgICAgICAgIGZhcl9vZnMgPSBncnViX2Rpdm1vZDY0IChhcnJheS0+ZGlza19zaXpl LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmFyICogYXJyYXktPmNo dW5rX3NpemUsIDApOworCisgICAgICAgICAgICBmYXJfb2ZzICo9IGFycmF5LT5jaHVua19zaXpl OworICAgICAgICAgIH0KKworICAgICAgICByZWFkX3NlY3RvciA9IGdydWJfZGl2bW9kNjQgKHJl YWRfc2VjdG9yICogbmVhciwgYXJyYXktPnRvdGFsX2RldnMsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgJmRpc2tucik7CisKKyAgICAgICAgb2ZzICo9IGFycmF5LT5jaHVu a19zaXplOworICAgICAgICByZWFkX3NlY3RvciAqPSBvZnM7CisKKyAgICAgICAgd2hpbGUgKDEp CisgICAgICAgICAgeworICAgICAgICAgICAgZ3J1Yl9zaXplX3QgcmVhZF9zaXplOworICAgICAg ICAgICAgdW5zaWduZWQgaW50IGksIGo7CisKKyAgICAgICAgICAgIHJlYWRfc2l6ZSA9IGFycmF5 LT5jaHVua19zaXplIC0gYjsKKyAgICAgICAgICAgIGlmIChyZWFkX3NpemUgPiBzaXplKQorICAg ICAgICAgICAgICByZWFkX3NpemUgPSBzaXplOworCisgICAgICAgICAgICBmb3IgKGkgPSAwOyBp IDwgbmVhcjsgaSsrKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQg aW50IGs7CisKKyAgICAgICAgICAgICAgICBrID0gZGlza25yOworICAgICAgICAgICAgICAgIGZv ciAoaiA9IDA7IGogPCBmYXI7IGorKykKKyAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg ICAgICAgICAgaWYgKGFycmF5LT5kZXZpY2Vba10pCisgICAgICAgICAgICAgICAgICAgICAgewor ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdydWJfZXJybm8gPT0gR1JVQl9FUlJfUkVBRF9F UlJPUikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgZ3J1Yl9lcnJubyA9IEdSVUJfRVJSX05P TkU7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IGdydWJfZGlza19yZWFkIChhcnJh eS0+ZGV2aWNlW2tdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJlYWRfc2VjdG9yICsgaiAqIGZhcl9vZnMgKyBiLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcmVhZF9zaXplIDw8IEdSVUJfRElTS19TRUNUT1JfQklUUywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYpOworICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKCEgZXJyKQorICAgICAgICAgICAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKGVyciAhPSBHUlVCX0VSUl9S RUFEX0VSUk9SKQorICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg ICAgICAgICAgIGVyciA9IGdydWJfZXJyb3IgKEdSVUJfRVJSX1JFQURfRVJST1IsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRpc2sgbWlzc2luZy4iKTsKKworICAg ICAgICAgICAgICAgICAgICBrKys7CisgICAgICAgICAgICAgICAgICAgIGlmIChrID09IGFycmF5 LT50b3RhbF9kZXZzKQorICAgICAgICAgICAgICAgICAgICAgIGsgPSAwOworICAgICAgICAgICAg ICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKCEgZXJyKQorICAgICAgICAgICAgICAgICAg YnJlYWs7CisKKyAgICAgICAgICAgICAgICBkaXNrbnIrKzsKKyAgICAgICAgICAgICAgICBpZiAo ZGlza25yID09IGFycmF5LT50b3RhbF9kZXZzKQorICAgICAgICAgICAgICAgICAgeworICAgICAg ICAgICAgICAgICAgICBkaXNrbnIgPSAwOworICAgICAgICAgICAgICAgICAgICByZWFkX3NlY3Rv ciArPSBvZnM7CisgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIH0KKworICAgICAg ICAgICAgaWYgKGVycikKKyAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKworICAgICAgICAgICAg YnVmICs9IHJlYWRfc2l6ZSA8PCBHUlVCX0RJU0tfU0VDVE9SX0JJVFM7CiAJICAgIHNpemUgLT0g cmVhZF9zaXplOwogCSAgICBpZiAoISBzaXplKQogCSAgICAgIGJyZWFrOwogCi0JICAgIGlmIChz aXplID4gYXJyYXktPmNodW5rX3NpemUpCi0JICAgICAgcmVhZF9zaXplID0gYXJyYXktPmNodW5r X3NpemU7Ci0JICAgIGVsc2UKLQkgICAgICByZWFkX3NpemUgPSBzaXplOwotCi0JICAgIC8qIENo ZWNrIHdoZXRoZXIgdGhlIHNlY3RvciB3YXMgYWxpZ25lZCBvbiBhIGNodW5rIHNpemUKLQkgICAg ICAgYm91bmRhcnkuIElmIHRoaXMgaXNuJ3QgdGhlIGNhc2UsIGl0J3MgdGhlIGZpcnN0IHJlYWQK LQkgICAgICAgYW5kIHRoZSBuZXh0IHJlYWQgc2hvdWxkIGJlIHNldCBiYWNrIHRvIHN0YXJ0IG9m IHRoZQotCSAgICAgICBib3VuZGFyeS4gICovCi0JICAgIGdydWJfZGl2bW9kNjQgKHJlYWRfc2Vj dG9yLCBhcnJheS0+Y2h1bmtfc2l6ZSwgJmkpOwotCSAgICByZWFkX3NlY3RvciAtPSBpOwotCi0J ICAgIGRpc2tucisrOwotCSAgICAvKiBTZWUgd2hldGhlciB0aGUgZGlzayB3YXMgdGhlIGxhc3Qg ZGlzaywgYW5kIHN0YXJ0Ci0JICAgICAgIHJlYWRpbmcgZnJvbSB0aGUgZmlyc3QgZGlzayBpbiB0 aGF0IGNhc2UuICovCi0JICAgIGlmIChkaXNrbnIgPT0gYXJyYXktPnRvdGFsX2RldnMpCi0JICAg ICAgewotCQlkaXNrbnIgPSAwOwotCQlyZWFkX3NlY3RvciArPSBhcnJheS0+Y2h1bmtfc2l6ZTsK LQkgICAgICB9Ci0JICB9Ci0gICAgICB9Ci0gICAgICBicmVhazsKLQotICAgIGNhc2UgMToKLSAg ICAgIC8qIFRoaXMgaXMgZWFzeSwgd2UgY2FuIHJlYWQgZnJvbSBhbnkgZGlzayB3ZSB3YW50LiBX ZSB3aWxsIGxvb3AKLQkgb3ZlciBhbGwgZGlza3MgdW50aWwgd2UndmUgZm91bmQgb25lIHRoYXQg aXMgYXZhaWxhYmxlLiBJbgotCSBjYXNlIG9mIGVycnMsIHdlIHdpbGwgdHJ5IHRoZSB0byByZWFk IHRoZSBuZXh0IGRpc2suICovCi0gICAgICB7Ci0JdW5zaWduZWQgaW50IGkgPSAwOwotCQotCWZv ciAoaSA9IDA7IGkgPCBhcnJheS0+dG90YWxfZGV2czsgaSsrKQotCSAgewotCSAgICBpZiAoYXJy YXktPmRldmljZVtpXSkKLQkgICAgICB7Ci0JCWVyciA9IGdydWJfZGlza19yZWFkIChhcnJheS0+ ZGV2aWNlW2ldLCBzZWN0b3IsIDAsCi0JCQkJICAgICAgc2l6ZSA8PCBHUlVCX0RJU0tfU0VDVE9S X0JJVFMsIGJ1Zik7Ci0KLQkJaWYgKCFlcnIpCi0JCSAgYnJlYWs7Ci0JICAgICAgfQotCSAgfQor ICAgICAgICAgICAgYiA9IDA7CisgICAgICAgICAgICBkaXNrbnIgKz0gKG5lYXIgLSBpKTsKKyAg ICAgICAgICAgIHdoaWxlIChkaXNrbnIgPj0gYXJyYXktPnRvdGFsX2RldnMpCisgICAgICAgICAg ICAgIHsKKyAgICAgICAgICAgICAgICBkaXNrbnIgLT0gYXJyYXktPnRvdGFsX2RldnM7CisgICAg ICAgICAgICAgICAgcmVhZF9zZWN0b3IgKz0gb2ZzOworICAgICAgICAgICAgICB9CisgICAgICAg ICAgfQorICAgICAgICBicmVhazsKICAgICAgIH0KLSAgICAgIGJyZWFrOwogCisgICAgY2FzZSA0 OgogICAgIGNhc2UgNToKKyAgICBjYXNlIDY6CiAgICAgICB7Ci0JZ3J1Yl91aW50NjRfdCBhOwot CWdydWJfdWludDMyX3QgYjsKLQlpbnQgZGlza25yOwogCWdydWJfZGlza19hZGRyX3QgcmVhZF9z ZWN0b3I7Ci0JZ3J1Yl9zaXplX3QgcmVhZF9zaXplOwotCi0JLyogRmluZCB0aGUgZmlyc3Qgc2Vj dG9yIHRvIHJlYWQuICovCi0JYSA9IGdydWJfZGl2bW9kNjQgKHNlY3RvciwgYXJyYXktPmNodW5r X3NpemUsIE5VTEwpOwotCWdydWJfZGl2bW9kNjQgKGEsIChhcnJheS0+dG90YWxfZGV2cyAtIDEp LCAmYik7Ci0JZGlza25yID0gYjsKKwlncnViX3VpbnQzMl90IGIsIHAsIG4sIGRpc2tuciwgZTsK IAotCWEgPSBncnViX2Rpdm1vZDY0IChzZWN0b3IsIGFycmF5LT5jaHVua19zaXplICogKGFycmF5 LT50b3RhbF9kZXZzIC0gMSksCi0JCQkgICBOVUxMKTsKLQlncnViX2Rpdm1vZDY0IChzZWN0b3Is IGFycmF5LT5jaHVua19zaXplLCAmYik7Ci0JcmVhZF9zZWN0b3IgPSBhICogYXJyYXktPmNodW5r X3NpemUgKyBiOworICAgICAgICAvKiBuID0gMSBmb3IgbGV2ZWwgNCBhbmQgNSwgMiBmb3IgbGV2 ZWwgNi4gICovCisgICAgICAgIG4gPSBhcnJheS0+bGV2ZWwgLyAzOwogCi0JZ3J1Yl9kaXZtb2Q2 NCAocmVhZF9zZWN0b3IsIGFycmF5LT5jaHVua19zaXplICogYXJyYXktPnRvdGFsX2RldnMsICZi KTsKLQlkaXNrbnIgLT0gKGIgLyBhcnJheS0+Y2h1bmtfc2l6ZSk7Ci0JaWYgKGRpc2tuciA8IDAp Ci0JICBkaXNrbnIgKz0gYXJyYXktPnRvdGFsX2RldnM7Ci0JICAKLQlncnViX2Rpdm1vZDY0IChy ZWFkX3NlY3RvciwgYXJyYXktPmNodW5rX3NpemUsICZiKTsKLQlyZWFkX3NpemUgPSBhcnJheS0+ Y2h1bmtfc2l6ZSAtIGI7Ci0KLQlpZiAocmVhZF9zaXplID4gc2l6ZSkKLQkgIHJlYWRfc2l6ZSA9 IHNpemU7CisJLyogRmluZCB0aGUgZmlyc3Qgc2VjdG9yIHRvIHJlYWQuICovCisJcmVhZF9zZWN0 b3IgPSBncnViX2Rpdm1vZDY0IChzZWN0b3IsIGFycmF5LT5jaHVua19zaXplLCAmYik7CisJcmVh ZF9zZWN0b3IgPSBncnViX2Rpdm1vZDY0IChyZWFkX3NlY3RvciwgYXJyYXktPnRvdGFsX2RldnMg LSBuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZkaXNrbnIpOworICAg ICAgICBpZiAoYXJyYXktPmxldmVsID49IDUpCisgICAgICAgICAgeworICAgICAgICAgICAgZ3J1 Yl9kaXZtb2Q2NCAocmVhZF9zZWN0b3IsIGFycmF5LT50b3RhbF9kZXZzLCAmcCk7CisKKyAgICAg ICAgICAgIGlmICghIChhcnJheS0+bGF5b3V0ICYgR1JVQl9SQUlEX0xBWU9VVF9SSUdIVF9NQVNL KSkKKyAgICAgICAgICAgICAgcCA9IGFycmF5LT50b3RhbF9kZXZzIC0gMSAtIHA7CisKKyAgICAg ICAgICAgIGlmIChhcnJheS0+bGF5b3V0ICYgR1JVQl9SQUlEX0xBWU9VVF9TWU1NRVRSSUNfTUFT SykKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGRpc2tuciArPSBwICsgbjsKKyAg ICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICB7CisgICAgICAg ICAgICAgICAgZ3J1Yl91aW50MzJfdCBxOworCisgICAgICAgICAgICAgICAgcSA9IHAgKyAobiAt IDEpOworICAgICAgICAgICAgICAgIGlmIChxID49IGFycmF5LT50b3RhbF9kZXZzKQorICAgICAg ICAgICAgICAgICAgcSAtPSBhcnJheS0+dG90YWxfZGV2czsKKworICAgICAgICAgICAgICAgIGlm IChkaXNrbnIgPj0gcCkKKyAgICAgICAgICAgICAgICAgIGRpc2tuciArPSBuOworICAgICAgICAg ICAgICAgIGVsc2UgaWYgKGRpc2tuciA+PSBxKQorICAgICAgICAgICAgICAgICAgZGlza25yICs9 IHEgKyAxOworICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChkaXNrbnIgPj0gYXJy YXktPnRvdGFsX2RldnMpCisgICAgICAgICAgICAgIGRpc2tuciAtPSBhcnJheS0+dG90YWxfZGV2 czsKKyAgICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBwID0gYXJyYXktPnRvdGFs X2RldnMgLSBuOworCisJcmVhZF9zZWN0b3IgKj0gYXJyYXktPmNodW5rX3NpemU7CiAJCiAJd2hp bGUgKDEpCiAJICB7Ci0JICAgIGdydWJfdWludDMyX3QgaTsKLQotCSAgICBpZiAoYXJyYXktPmRl dmljZVtkaXNrbnJdKQotCSAgICAgIGVyciA9IGdydWJfZGlza19yZWFkIChhcnJheS0+ZGV2aWNl W2Rpc2tucl0sIHJlYWRfc2VjdG9yLCAwLAotCQkJCSAgICByZWFkX3NpemUgPDwgR1JVQl9ESVNL X1NFQ1RPUl9CSVRTLCBidWYpOworICAgICAgICAgICAgZ3J1Yl9zaXplX3QgcmVhZF9zaXplOwor ICAgICAgICAgICAgaW50IG5leHRfbGV2ZWw7CisKKyAgICAgICAgICAgIHJlYWRfc2l6ZSA9IGFy cmF5LT5jaHVua19zaXplIC0gYjsKKyAgICAgICAgICAgIGlmIChyZWFkX3NpemUgPiBzaXplKQor ICAgICAgICAgICAgICByZWFkX3NpemUgPSBzaXplOworCisgICAgICAgICAgICBlID0gMDsKKyAg ICAgICAgICAgIGlmIChhcnJheS0+ZGV2aWNlW2Rpc2tucl0pCisgICAgICAgICAgICAgIHsKKyAg ICAgICAgICAgICAgICAvKiBSZXNldCByZWFkIGVycm9yLiAgKi8KKyAgICAgICAgICAgICAgICBp ZiAoZ3J1Yl9lcnJubyA9PSBHUlVCX0VSUl9SRUFEX0VSUk9SKQorICAgICAgICAgICAgICAgICAg Z3J1Yl9lcnJubyA9IEdSVUJfRVJSX05PTkU7CisKKyAgICAgICAgICAgICAgICBlcnIgPSBncnVi X2Rpc2tfcmVhZCAoYXJyYXktPmRldmljZVtkaXNrbnJdLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZWFkX3NlY3RvciArIGIsIDAsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHJlYWRfc2l6ZSA8PCBHUlVCX0RJU0tfU0VDVE9SX0JJVFMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Zik7CisKKyAgICAgICAgICAg ICAgICBpZiAoKGVycikgJiYgKGVyciAhPSBHUlVCX0VSUl9SRUFEX0VSUk9SKSkKKyAgICAgICAg ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGUrKzsKKyAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBlcnIgPSBHUlVCX0VSUl9SRUFEX0VSUk9S OwogCi0JICAgIC8qIElmIGFuIGVycm9yIG9jY3VycyB3aGVuIHdlIGFscmVhZHkgaGF2ZSBhbiBk ZWdyYWRlZAotCSAgICAgICBhcnJheSB3ZSBjYW4ndCByZWNvdmVyIGZyb20gdGhhdC4gKi8KLQkg ICAgaWYgKGVyciAmJiAoKGFycmF5LT50b3RhbF9kZXZzIC0gMSkgPT0gYXJyYXktPm5yX2RldnMp KQotCSAgICAgIGJyZWFrOworCSAgICBpZiAoZXJyKQorICAgICAgICAgICAgICB7CisgICAgICAg ICAgICAgICAgaWYgKGFycmF5LT5ucl9kZXZzIDwgYXJyYXktPnRvdGFsX2RldnMgLSBuICsgZSkK KyAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAgZ3J1Yl9lcnJubyA9 IEdSVUJfRVJSX05PTkU7CisgICAgICAgICAgICAgICAgaWYgKGFycmF5LT5sZXZlbCA9PSA2KQor ICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBlcnIgPSAoKGdydWJfcmFp ZDZfcmVjb3Zlcl9mdW5jKSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAoKmdydWJfcmFp ZDZfcmVjb3Zlcl9mdW5jKSAoYXJyYXksIGRpc2tuciwgcCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidWYsIHJlYWRfc2VjdG9yICsgYiwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBy ZWFkX3NpemUpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGdydWJfZXJyb3IgKEdSVUJf RVJSX0JBRF9ERVZJQ0UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAi cmFpZDZyZWMgaXMgbm90IGxvYWRlZCIpKTsKKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIGVy ciA9ICgoZ3J1Yl9yYWlkNV9yZWNvdmVyX2Z1bmMpID8KKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICgqZ3J1Yl9yYWlkNV9yZWNvdmVyX2Z1bmMpIChhcnJheSwgZGlza25yLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ1ZiwgcmVhZF9z ZWN0b3IgKyBiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHJlYWRfc2l6ZSkgOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3J1Yl9l cnJvciAoR1JVQl9FUlJfQkFEX0RFVklDRSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICJyYWlkNXJlYyBpcyBub3QgbG9hZGVkIikpOworICAgICAgICAgICAgICAgICAg fQorCisgICAgICAgICAgICAgICAgaWYgKGVycikKKyAgICAgICAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICAgICAgICB9CiAJICAgIAotCSAgICBpZiAoZXJyIHx8ICEgYXJyYXktPmRldmljZVtk aXNrbnJdKQotCSAgICAgIHsKLQkJLyogRWl0aGVyIGFuIGVycm9yIG9jY3VyZWQgb3IgdGhlIGRp c2sgaXMgbm90Ci0JCSAgIGF2YWlsYWJsZS4gIFdlIGhhdmUgdG8gY29tcHV0ZSB0aGlzIGJsb2Nr IGZyb20gdGhlCi0JCSAgIGJsb2NrcyBvbiB0aGUgb3RoZXIgaGFyZCBkaXNrcy4gKi8KLQkJZ3J1 Yl9zaXplX3QgYnVmX3NpemUgPSByZWFkX3NpemUgPDwgR1JVQl9ESVNLX1NFQ1RPUl9CSVRTOwot CQljaGFyIGJ1ZjJbYnVmX3NpemVdOwotCQl1bnNpZ25lZCBpbnQgajsKLQotCQlncnViX21lbXNl dCAoYnVmLCAwLCBidWZfc2l6ZSk7Ci0JCQotCQlmb3IgKGogPSAwOyBqIDwgYXJyYXktPnRvdGFs X2RldnM7IGorKykKLQkJICB7Ci0JCSAgICB1bnNpZ25lZCBpbnQgazsKLQotCQkgICAgaWYgKGog IT0gKHVuc2lnbmVkIGludCkgZGlza25yKQotCQkgICAgICB7Ci0JCQllcnIgPSBncnViX2Rpc2tf cmVhZCAoYXJyYXktPmRldmljZVtqXSwgcmVhZF9zZWN0b3IsCi0JCQkJCSAgICAgIDAsIGJ1Zl9z aXplLCBidWYyKTsKLQkJCWlmIChlcnIpCi0JCQkgIHJldHVybiBlcnI7Ci0JCQkKLQkJCWZvciAo ayA9IDA7IGsgPCBidWZfc2l6ZTsgaysrKQotCQkJICBidWZba10gPSBidWZba10gXiBidWYyW2td OwotCQkgICAgICB9Ci0JCSAgfQotCSAgICAgIH0KLQotCSAgICBidWYgKz0gKHJlYWRfc2l6ZSA8 PCBHUlVCX0RJU0tfU0VDVE9SX0JJVFMpOworCSAgICBidWYgKz0gcmVhZF9zaXplIDw8IEdSVUJf RElTS19TRUNUT1JfQklUUzsKIAkgICAgc2l6ZSAtPSByZWFkX3NpemU7CiAJICAgIGlmICghIHNp emUpCiAJICAgICAgYnJlYWs7CiAKLQkgICAgaWYgKHNpemUgPiBhcnJheS0+Y2h1bmtfc2l6ZSkK LQkgICAgICByZWFkX3NpemUgPSBhcnJheS0+Y2h1bmtfc2l6ZTsKLQkgICAgZWxzZQotCSAgICAg IHJlYWRfc2l6ZSA9IHNpemU7Ci0KLQkgICAgLyogQ2hlY2sgd2hldGhlciB0aGUgc2VjdG9yIHdh cyBhbGlnbmVkIG9uIGEgY2h1bmsgc2l6ZQotCSAgICAgICBib3VuZGFyeS4gSWYgdGhpcyBpc24n dCB0aGUgY2FzZSwgaXQncyB0aGUgZmlyc3QgcmVhZAotCSAgICAgICBhbmQgdGhlIG5leHQgcmVh ZCBzaG91bGQgYmUgc2V0IGJhY2sgdG8gc3RhcnQgb2YgdGhlCi0JICAgICAgIGJvdW5kYXJ5LiAg Ki8KLQkgICAgZ3J1Yl9kaXZtb2Q2NCAocmVhZF9zZWN0b3IsIGFycmF5LT5jaHVua19zaXplLCAm aSk7Ci0JICAgIHJlYWRfc2VjdG9yIC09IGk7Ci0KKyAgICAgICAgICAgIGIgPSAwOwogCSAgICBk aXNrbnIrKzsKLQkgICAgZ3J1Yl9kaXZtb2Q2NCAocmVhZF9zZWN0b3IsCi0JCQkgICBhcnJheS0+ Y2h1bmtfc2l6ZSAqIGFycmF5LT50b3RhbF9kZXZzLCAmaSk7Ci0JICAgIGlmICgodW5zaWduZWQg aW50KSBkaXNrbnIgPT0gKGFycmF5LT50b3RhbF9kZXZzIC0gKGkgLyBhcnJheS0+Y2h1bmtfc2l6 ZSkgLSAxKSkKLQkgICAgICBkaXNrbnIrKzsKLQkgICAgLyogU2VlIHdoZXRoZXIgdGhlIGRpc2sg d2FzIHRoZSBsYXN0IGRpc2ssIGFuZCBzdGFydAotCSAgICAgICByZWFkaW5nIGZyb20gdGhlIGZp cnN0IGRpc2sgaW4gdGhhdCBjYXNlLiAqLwotCSAgICBpZiAoKHVuc2lnbmVkIGludCkgZGlza25y ID09IGFycmF5LT50b3RhbF9kZXZzKQotCSAgICAgIHsKLQkJZGlza25yID0gMDsKLQkJcmVhZF9z ZWN0b3IgKz0gYXJyYXktPmNodW5rX3NpemU7Ci0JCWdydWJfZGl2bW9kNjQgKHJlYWRfc2VjdG9y LAotCQkJICAgICAgIGFycmF5LT5jaHVua19zaXplICogYXJyYXktPnRvdGFsX2RldnMsICZpKTsK LQotCQlpZiAoKGkgLyBhcnJheS0+Y2h1bmtfc2l6ZSkgPT0gKGFycmF5LT50b3RhbF9kZXZzIC0g MSkpCi0JCSAgZGlza25yKys7Ci0JICAgICAgfQorCisgICAgICAgICAgICBpZiAoYXJyYXktPmxh eW91dCAmIEdSVUJfUkFJRF9MQVlPVVRfU1lNTUVUUklDX01BU0spCisgICAgICAgICAgICAgIHsK KyAgICAgICAgICAgICAgICBpZiAoZGlza25yID09IGFycmF5LT50b3RhbF9kZXZzKQorICAgICAg ICAgICAgICAgICAgZGlza25yID0gMDsKKworICAgICAgICAgICAgICAgIG5leHRfbGV2ZWwgPSAo ZGlza25yID09IHApOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAg ICAgICAgIHsKKyAgICAgICAgICAgICAgICBpZiAoZGlza25yID09IHApCisgICAgICAgICAgICAg ICAgICBkaXNrbnIgKz0gbjsKKworICAgICAgICAgICAgICAgIG5leHRfbGV2ZWwgPSAoZGlza25y ID49IGFycmF5LT50b3RhbF9kZXZzKTsKKyAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICBp ZiAobmV4dF9sZXZlbCkKKyAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHJlYWRfc2Vj dG9yICs9IGFycmF5LT5jaHVua19zaXplOworCisgICAgICAgICAgICAgICAgaWYgKGFycmF5LT5s ZXZlbCA+PSA1KQorICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBpZiAo YXJyYXktPmxheW91dCAmIEdSVUJfUkFJRF9MQVlPVVRfUklHSFRfTUFTSykKKyAgICAgICAgICAg ICAgICAgICAgICBwID0gKHAgPT0gYXJyYXktPnRvdGFsX2RldnMgLSAxKSA/IDAgOiBwICsgMTsK KyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgIHAgPSAocCA9 PSAwKSA/IGFycmF5LT50b3RhbF9kZXZzIC0gMSA6IHAgLSAxOworCisgICAgICAgICAgICAgICAg ICAgIGlmIChhcnJheS0+bGF5b3V0ICYgR1JVQl9SQUlEX0xBWU9VVF9TWU1NRVRSSUNfTUFTSykK KyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBkaXNrbnIg PSBwICsgbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkaXNrbnIgPj0gYXJyYXktPnRv dGFsX2RldnMpCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2tuciAtPSBhcnJheS0+dG90 YWxfZGV2czsKKyAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGVs c2UKKyAgICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgICAgICBkaXNr bnIgLT0gYXJyYXktPnRvdGFsX2RldnM7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGlz a25yID09IHApCisgICAgICAgICAgICAgICAgICAgICAgICAgIGRpc2tuciArPSBuOworICAgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBl bHNlCisgICAgICAgICAgICAgICAgICBkaXNrbnIgPSAwOworICAgICAgICAgICAgICB9CiAJICB9 CiAgICAgICB9CiAgICAgICBicmVhazsKQEAgLTM0OCwxNjkgKzQ3MiwxMDUgQEAgZ3J1Yl9yYWlk X3dyaXRlIChncnViX2Rpc2tfdCBkaXNrIF9fYXR0cmlidXRlICgodW51c2VkKSksCiAgIHJldHVy biBHUlVCX0VSUl9OT1RfSU1QTEVNRU5URURfWUVUOwogfQogCi1zdGF0aWMgaW50Ci1ncnViX3Jh aWRfc2Nhbl9kZXZpY2UgKGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgZ3J1Yl9lcnJfdAoraW5z ZXJ0X2FycmF5IChncnViX2Rpc2tfdCBkaXNrLCBzdHJ1Y3QgZ3J1Yl9yYWlkX2FycmF5ICpuZXdf YXJyYXksCisgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnNjYW5uZXJfbmFtZSkKIHsKLSAgZ3J1 Yl9lcnJfdCBlcnI7Ci0gIGdydWJfZGlza190IGRpc2s7Ci0gIGdydWJfZGlza19hZGRyX3Qgc2Vj dG9yOwotICBncnViX3VpbnQ2NF90IHNpemU7Ci0gIHN0cnVjdCBncnViX3JhaWRfc3VwZXJfMDkg c2I7Ci0gIHN0cnVjdCBncnViX3JhaWRfYXJyYXkgKnAsICphcnJheSA9IE5VTEw7Ci0KLSAgZ3J1 Yl9kcHJpbnRmICgicmFpZCIsICJTY2FubmluZyBmb3IgUkFJRCBkZXZpY2VzXG4iKTsKLQotICBk aXNrID0gZ3J1Yl9kaXNrX29wZW4gKG5hbWUpOwotICBpZiAoIWRpc2spCi0gICAgcmV0dXJuIDA7 Ci0KLSAgLyogVGhlIHNlY3RvciB3aGVyZSB0aGUgUkFJRCBzdXBlcmJsb2NrIGlzIHN0b3JlZCwg aWYgYXZhaWxhYmxlLiAqLwotICBzaXplID0gZ3J1Yl9kaXNrX2dldF9zaXplIChkaXNrKTsKLSAg c2VjdG9yID0gR1JVQl9SQUlEX05FV19TSVpFX1NFQ1RPUlMoc2l6ZSk7Ci0KLSAgZXJyID0gZ3J1 Yl9kaXNrX3JlYWQgKGRpc2ssIHNlY3RvciwgMCwgR1JVQl9SQUlEX1NCX0JZVEVTLCAoY2hhciAq KSAmc2IpOwotICBncnViX2Rpc2tfY2xvc2UgKGRpc2spOwotICBpZiAoZXJyKQotICAgIHsKLSAg ICAgIGdydWJfZXJybm8gPSBHUlVCX0VSUl9OT05FOwotICAgICAgcmV0dXJuIDA7Ci0gICAgfQot Ci0gIC8qIExvb2sgd2hldGhlciB0aGVyZSBpcyBhIFJBSUQgc3VwZXJibG9jay4gKi8KLSAgaWYg KHNiLm1kX21hZ2ljICE9IEdSVUJfUkFJRF9TQl9NQUdJQykKLSAgICByZXR1cm4gMDsKLSAgCi0g IC8qIEZJWE1FOiBBbHNvIHN1cHBvcnQgdmVyc2lvbiAxLjAuICovCi0gIGlmIChzYi5tYWpvcl92 ZXJzaW9uICE9IDAgfHwgc2IubWlub3JfdmVyc2lvbiAhPSA5MCkKLSAgICB7Ci0gICAgICBncnVi X2Vycm9yIChHUlVCX0VSUl9OT1RfSU1QTEVNRU5URURfWUVULAotCQkgICJVbnN1cHBvcnRlZCBS QUlEIHZlcnNpb246ICVkLiVkIiwKLQkJICBzYi5tYWpvcl92ZXJzaW9uLCBzYi5taW5vcl92ZXJz aW9uKTsKLSAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAvKiBGSVhNRTogQ2hlY2sgdGhlIGNo ZWNrc3VtLiAqLwotCi0gIC8qIEZJWE1FOiBTdXBwb3J0IGFsbCBSQUlEIGxldmVscy4gICovCi0g IGlmIChzYi5sZXZlbCAhPSAwICYmIHNiLmxldmVsICE9IDEgJiYgc2IubGV2ZWwgIT0gNSkKLSAg ICB7Ci0gICAgICBncnViX2Vycm9yIChHUlVCX0VSUl9OT1RfSU1QTEVNRU5URURfWUVULAotCQkg ICJVbnN1cHBvcnRlZCBSQUlEIGxldmVsOiAlZCIsCi0JCSAgc2IubGV2ZWwpOwotICAgICAgcmV0 dXJuIDA7Ci0gICAgfQotCi0gIC8qIEZJWE1FOiBTdXBwb3J0IGFsbCBsYXlvdXRzLiAgKi8KLSAg aWYgKHNiLmxldmVsID09IDUgJiYgc2IubGF5b3V0ICE9IDIpCi0gICAgewotICAgICAgZ3J1Yl9l cnJvciAoR1JVQl9FUlJfTk9UX0lNUExFTUVOVEVEX1lFVCwKLQkJICAiVW5zdXBwb3J0ZWQgUkFJ RDUgbGF5b3V0OiAlZCIsCi0JCSAgc2IubGF5b3V0KTsKLSAgICAgIHJldHVybiAwOwotICAgIH0K KyAgc3RydWN0IGdydWJfcmFpZF9hcnJheSAqYXJyYXkgPSAwLCAqcDsKICAgCiAgIC8qIFNlZSB3 aGV0aGVyIHRoZSBkZXZpY2UgaXMgcGFydCBvZiBhbiBhcnJheSB3ZSBoYXZlIGFscmVhZHkgc2Vl biBhCiAgICAgIGRldmljZSBmcm9tLiAqLwogICBmb3IgKHAgPSBhcnJheV9saXN0OyBwICE9IE5V TEw7IHAgPSBwLT5uZXh0KQotICAgIHsKLSAgICAgIGlmIChwLT51dWlkWzBdID09IHNiLnNldF91 dWlkMCAmJiBwLT51dWlkWzFdID09IHNiLnNldF91dWlkMQotCSAgJiYgcC0+dXVpZFsyXSA9PSBz Yi5zZXRfdXVpZDIgJiYgcC0+dXVpZFszXSA9PSBzYi5zZXRfdXVpZDMpCi0JewotCSAgYXJyYXkg PSBwOwotCSAgYnJlYWs7Ci0JfQotICAgIH0KLQotICAvKiBEbyBzb21lIGNoZWNrcyBiZWZvcmUg YWRkaW5nIHRoZSBkZXZpY2UgdG8gdGhlIGFycmF5LiAgKi8KLSAgaWYgKGFycmF5KQotICAgIHsK LSAgICAgIC8qIEZJWE1FOiBDaGVjayB3aGV0aGVyIHRoZSB1cGRhdGUgdGltZSBvZiB0aGUgc3Vw ZXJibG9ja3MgYXJlCi0JIHRoZSBzYW1lLiAqLwotICAgICAgCi0gICAgICBpZiAoYXJyYXktPnRv dGFsX2RldnMgPT0gYXJyYXktPm5yX2RldnMpCi0JewotCSAgLyogV2UgZm91bmQgbW9yZSBtZW1i ZXJzIG9mIHRoZSBhcnJheSB0aGFuIHRoZSBhcnJheQotCSAgICAgYWN0dWFsbHkgaGFzIGFjY29y ZGluZyB0byBpdHMgc3VwZXJibG9jay4gIFRoaXMgc2hvdWxkbid0Ci0JICAgICBoYXBwZW4gbm9y bWFsbHksIGJ1dCB3aGF0IGlzIHRoZSBzYW5lc3QgdGhpbmdzIHRvIGRvIGluIHN1Y2gKLQkgICAg IGEgY2FzZT8gKi8KLQkgICAgIAotCSAgZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX05VTUJFUiwK LQkJICAgICAgImFycmF5LT5ucl9kZXZzID4gYXJyYXktPnRvdGFsX2RldnMgKCVkKT8hPyIsCi0J CSAgICAgIGFycmF5LT50b3RhbF9kZXZzKTsKLQotCSAgcmV0dXJuIDA7Ci0JfQotICAKLSAgICAg IGlmIChhcnJheS0+ZGV2aWNlW3NiLnRoaXNfZGlzay5udW1iZXJdICE9IE5VTEwpCi0JLyogV2Ug Zm91bmQgbXVsdGlwbGUgZGV2aWNlcyB3aXRoIHRoZSBzYW1lIG51bWJlci4gQWdhaW4sCi0JICAg dGhpcyBzaG91bGRuJ3QgaGFwcGVuLiovCi0JZ3J1Yl9kcHJpbnRmICgicmFpZCIsICJGb3VuZCB0 d28gZGlza3Mgd2l0aCB0aGUgbnVtYmVyICVkPyE/IiwKLQkJICAgICAgc2IudGhpc19kaXNrLm51 bWJlcik7Ci0gICAgfQorICAgIGlmICgocC0+dXVpZF9sZW4gPT0gbmV3X2FycmF5LT51dWlkX2xl bikgJiYKKyAgICAgICAgKCEgZ3J1Yl9tZW1jbXAgKHAtPnV1aWQsIG5ld19hcnJheS0+dXVpZCwg cC0+dXVpZF9sZW4pKSkKKyAgICAgIHsKKyAgICAgICAgZ3J1Yl9mcmVlIChuZXdfYXJyYXktPnV1 aWQpOworICAgICAgICBhcnJheSA9IHA7CisKKyAgICAgICAgLyogRG8gc29tZSBjaGVja3MgYmVm b3JlIGFkZGluZyB0aGUgZGV2aWNlIHRvIHRoZSBhcnJheS4gICovCisKKyAgICAgICAgLyogRklY TUU6IENoZWNrIHdoZXRoZXIgdGhlIHVwZGF0ZSB0aW1lIG9mIHRoZSBzdXBlcmJsb2NrcyBhcmUK KyAgICAgICAgICAgdGhlIHNhbWUuICovCisKKyAgICAgICAgaWYgKGFycmF5LT50b3RhbF9kZXZz ID09IGFycmF5LT5ucl9kZXZzKQorICAgICAgICAgIC8qIFdlIGZvdW5kIG1vcmUgbWVtYmVycyBv ZiB0aGUgYXJyYXkgdGhhbiB0aGUgYXJyYXkKKyAgICAgICAgICAgICBhY3R1YWxseSBoYXMgYWNj b3JkaW5nIHRvIGl0cyBzdXBlcmJsb2NrLiAgVGhpcyBzaG91bGRuJ3QKKyAgICAgICAgICAgICBo YXBwZW4gbm9ybWFsbHksIGJ1dCB3aGF0IGlzIHRoZSBzYW5lc3QgdGhpbmdzIHRvIGRvIGluIHN1 Y2gKKyAgICAgICAgICAgICBhIGNhc2U/ICovCisgICAgICAgICAgcmV0dXJuIGdydWJfZXJyb3Ig KEdSVUJfRVJSX0JBRF9OVU1CRVIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhcnJh eS0+bnJfZGV2cyA+IGFycmF5LT50b3RhbF9kZXZzICglZCk/IT8iLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhcnJheS0+dG90YWxfZGV2cyk7CisKKyAgICAgICAgaWYgKGFycmF5LT5k ZXZpY2VbbmV3X2FycmF5LT5pbmRleF0gIT0gTlVMTCkKKyAgICAgICAgICAvKiBXZSBmb3VuZCBt dWx0aXBsZSBkZXZpY2VzIHdpdGggdGhlIHNhbWUgbnVtYmVyLiBBZ2FpbiwKKyAgICAgICAgICAg ICB0aGlzIHNob3VsZG4ndCBoYXBwZW4uKi8KKyAgICAgICAgICByZXR1cm4gZ3J1Yl9lcnJvciAo R1JVQl9FUlJfQkFEX05VTUJFUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkZvdW5k IHR3byBkaXNrcyB3aXRoIHRoZSBudW1iZXIgJWQ/IT8iLAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBuZXdfYXJyYXktPm51bWJlcik7CisKKyAgICAgICAgaWYgKG5ld19hcnJheS0+ZGlz a19zaXplIDwgYXJyYXktPmRpc2tfc2l6ZSkKKyAgICAgICAgICBhcnJheS0+ZGlza19zaXplID0g bmV3X2FycmF5LT5kaXNrX3NpemU7CisgICAgICAgIGJyZWFrOworICAgICAgfQogCiAgIC8qIEFk ZCBhbiBhcnJheSB0byB0aGUgbGlzdCBpZiB3ZSBkaWRuJ3QgZmluZCBhbnkuICAqLwogICBpZiAo IWFycmF5KQogICAgIHsKICAgICAgIGFycmF5ID0gZ3J1Yl9tYWxsb2MgKHNpemVvZiAoKmFycmF5 KSk7CiAgICAgICBpZiAoIWFycmF5KQotCXJldHVybiAwOwotICAgICAgZ3J1Yl9tZW1zZXQgKGFy cmF5LCAwLCBzaXplb2YgKCphcnJheSkpOyAgICAgIAotICAgICAgYXJyYXktPm51bWJlciA9IHNi Lm1kX21pbm9yOwotICAgICAgYXJyYXktPnZlcnNpb24gPSBzYi5tYWpvcl92ZXJzaW9uOwotICAg ICAgYXJyYXktPmxldmVsID0gc2IubGV2ZWw7Ci0gICAgICBhcnJheS0+bGF5b3V0ID0gc2IubGF5 b3V0OwotICAgICAgYXJyYXktPnRvdGFsX2RldnMgPSBzYi5ucl9kaXNrczsKKyAgICAgICAgewor ICAgICAgICAgIGdydWJfZnJlZSAobmV3X2FycmF5LT51dWlkKTsKKyAgICAgICAgICByZXR1cm4g Z3J1Yl9lcnJubzsKKyAgICAgICAgfQorCisgICAgICAqYXJyYXkgPSAqbmV3X2FycmF5OwogICAg ICAgYXJyYXktPm5yX2RldnMgPSAwOwotICAgICAgYXJyYXktPnV1aWRbMF0gPSBzYi5zZXRfdXVp ZDA7Ci0gICAgICBhcnJheS0+dXVpZFsxXSA9IHNiLnNldF91dWlkMTsKLSAgICAgIGFycmF5LT51 dWlkWzJdID0gc2Iuc2V0X3V1aWQyOwotICAgICAgYXJyYXktPnV1aWRbM10gPSBzYi5zZXRfdXVp ZDM7Ci0gICAgICAvKiBUaGUgc3VwZXJibG9jayBzcGVjaWZpZXMgdGhlIHNpemUgaW4gMTAyNC1i eXRlIHNlY3RvcnMuICovCi0gICAgICBhcnJheS0+ZGlza19zaXplID0gc2Iuc2l6ZSAqIDI7Ci0g ICAgICBhcnJheS0+Y2h1bmtfc2l6ZSA9IHNiLmNodW5rX3NpemUgLyA1MTI7CisgICAgICBncnVi X21lbXNldCAoJmFycmF5LT5kZXZpY2UsIDAsIHNpemVvZiAoYXJyYXktPmRldmljZSkpOwogICAg ICAgCiAgICAgICAvKiBDaGVjayB3aGV0aGVyIHdlIGRvbid0IGhhdmUgbXVsdGlwbGUgYXJyYXlz IHdpdGggdGhlIHNhbWUgbnVtYmVyLiAqLwogICAgICAgZm9yIChwID0gYXJyYXlfbGlzdDsgcCAh PSBOVUxMOyBwID0gcC0+bmV4dCkKLQl7Ci0JICBpZiAocC0+bnVtYmVyID09IGFycmF5LT5udW1i ZXIpCi0JICAgIGJyZWFrOwotCX0KKyAgICAgICAgeworICAgICAgICAgIGlmIChwLT5udW1iZXIg PT0gYXJyYXktPm51bWJlcikKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAKICAgICAg IGlmIChwKQotCXsKLQkgIC8qIFRoZSBudW1iZXIgaXMgYWxyZWFkeSBpbiB1c2UsIHNvIHdlIG5l ZWQgdG8gZmluZCBhbiBuZXcgbnVtYmVyLiAqLwotCSAgaW50IGkgPSAwOwotCi0JICB3aGlsZSAo MSkKLQkgICAgewotCSAgICAgIGZvciAocCA9IGFycmF5X2xpc3Q7IHAgIT0gTlVMTDsgcCA9IHAt Pm5leHQpCi0JCXsKLQkJICBpZiAocC0+bnVtYmVyID09IGkpCi0JCSAgICBicmVhazsKLQkJfQot Ci0JICAgICAgaWYgKCFwKQotCQl7Ci0JCSAgLyogV2UgZm91bmQgYW4gdW51c2VkIG51bWJlci4g ICovCi0JCSAgYXJyYXktPm51bWJlciA9IGk7Ci0JCSAgYnJlYWs7Ci0JCX0KLQotCSAgICAgIGkr KzsKLQkgICAgfQotCX0KKyAgICAgICAgeworICAgICAgICAgIC8qIFRoZSBudW1iZXIgaXMgYWxy ZWFkeSBpbiB1c2UsIHNvIHdlIG5lZWQgdG8gZmluZCBhbiBuZXcgbnVtYmVyLiAqLworICAgICAg ICAgIGludCBpID0gMDsKKworICAgICAgICAgIHdoaWxlICgxKQorICAgICAgICAgICAgeworICAg ICAgICAgICAgICBmb3IgKHAgPSBhcnJheV9saXN0OyBwICE9IE5VTEw7IHAgPSBwLT5uZXh0KQor ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgIGlmIChwLT5udW1iZXIgPT0gaSkK KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg ICAgICAgIGlmICghcCkKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAvKiBX ZSBmb3VuZCBhbiB1bnVzZWQgbnVtYmVyLiAgKi8KKyAgICAgICAgICAgICAgICAgIGFycmF5LT5u dW1iZXIgPSBpOworICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQor CisgICAgICAgICAgICAgIGkrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogCiAgICAgICBh cnJheS0+bmFtZSA9IGdydWJfbWFsbG9jICgxMyk7CiAgICAgICBpZiAoISBhcnJheS0+bmFtZSkK LQl7Ci0JICBncnViX2ZyZWUgKGFycmF5KTsKKyAgICAgICAgeworICAgICAgICAgIGdydWJfZnJl ZSAoYXJyYXktPnV1aWQpOworICAgICAgICAgIGdydWJfZnJlZSAoYXJyYXkpOwogCi0JICByZXR1 cm4gMDsKLQl9CisgICAgICAgICAgcmV0dXJuIGdydWJfZXJybm87CisgICAgICAgIH0KIAogICAg ICAgZ3J1Yl9zcHJpbnRmIChhcnJheS0+bmFtZSwgIm1kJWQiLCBhcnJheS0+bnVtYmVyKTsKIAot ICAgICAgZ3J1Yl9kcHJpbnRmICgicmFpZCIsICJGb3VuZCBhcnJheTogJXNcbiIsIGFycmF5LT5u YW1lKTsKKyAgICAgIGdydWJfZHByaW50ZiAoInJhaWQiLCAiRm91bmQgYXJyYXkgJXMgKCVzKVxu IiwgYXJyYXktPm5hbWUsCisgICAgICAgICAgICAgICAgICAgIHNjYW5uZXJfbmFtZSk7CiAKICAg ICAgIC8qIEFkZCBvdXIgbmV3IGFycmF5IHRvIHRoZSBsaXN0LiAgKi8KICAgICAgIGFycmF5LT5u ZXh0ID0gYXJyYXlfbGlzdDsKQEAgLTUxOCw0NyArNTc4LDExNiBAQCBncnViX3JhaWRfc2Nhbl9k ZXZpY2UgKGNvbnN0IGNoYXIgKm5hbWUpCiAgICAgfQogCiAgIC8qIEFkZCB0aGUgZGV2aWNlIHRv IHRoZSBhcnJheS4gKi8KLSAgYXJyYXktPmRldmljZVtzYi50aGlzX2Rpc2subnVtYmVyXSA9IGdy dWJfZGlza19vcGVuIChuYW1lKTsKKyAgYXJyYXktPmRldmljZVtuZXdfYXJyYXktPmluZGV4XSA9 IGRpc2s7CisgIGFycmF5LT5ucl9kZXZzKys7CisKKyAgcmV0dXJuIDA7Cit9CiAKLSAgaWYgKGFy cmF5LT5kaXNrX3NpemUgIT0gYXJyYXktPmRldmljZVtzYi50aGlzX2Rpc2subnVtYmVyXS0+dG90 YWxfc2VjdG9ycykKK3N0YXRpYyBncnViX3JhaWRfdCBncnViX3JhaWRfbGlzdDsKKworc3RhdGlj IHZvaWQKK2dydWJfcmFpZF9zY2FuX2RldmljZSAoaW50IGhlYWRfb25seSkKK3sKKyAgYXV0byBp bnQgaG9vayAoY29uc3QgY2hhciAqbmFtZSk7CisgIGludCBob29rIChjb25zdCBjaGFyICpuYW1l KQogICAgIHsKLSAgICAgIGlmIChhcnJheS0+dG90YWxfZGV2cyA9PSAxKQotCXsKLQkgIGdydWJf ZHByaW50ZiAoInJhaWQiLCAiQXJyYXkgY29udGFpbnMgb25seSBvbmUgZGlzaywgYnV0IGl0cyBz aXplICgweCVsbHgpICIKLQkJCSJkb2Vzbid0IG1hdGNoIHdpdGggc2l6ZSBpbmRpY2F0ZWQgYnkg c3VwZXJibG9jayAoMHglbGx4KS4gICIKLQkJCSJBc3N1bWluZyBzdXBlcmJsb2NrIGlzIHdyb25n LlxuIiwKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGFycmF5LT5kZXZpY2Vbc2IudGhpc19kaXNr Lm51bWJlcl0tPnRvdGFsX3NlY3RvcnMsCi0JCQkodW5zaWduZWQgbG9uZyBsb25nKSBhcnJheS0+ ZGlza19zaXplKTsKLQkgIGFycmF5LT5kaXNrX3NpemUgPSBhcnJheS0+ZGV2aWNlW3NiLnRoaXNf ZGlzay5udW1iZXJdLT50b3RhbF9zZWN0b3JzOwotCX0KLSAgICAgIGVsc2UgaWYgKGFycmF5LT5s ZXZlbCA9PSAxKQotCXsKLQkgIGdydWJfZHByaW50ZiAoInJhaWQiLCAiQXJyYXkgaXMgUkFJRCBs ZXZlbCAxLCBidXQgdGhlIHNpemUgb2YgZGlzayAlZCAoMHglbGx4KSAiCi0JCQkiZG9lc24ndCBt YXRjaCB3aXRoIHNpemUgaW5kaWNhdGVkIGJ5IHN1cGVyYmxvY2sgKDB4JWxseCkuICAiCi0JCQki QXNzdW1pbmcgc3VwZXJibG9jayBpcyB3cm9uZy5cbiIsCi0JCQlzYi50aGlzX2Rpc2subnVtYmVy LAotCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgYXJyYXktPmRldmljZVtzYi50aGlzX2Rpc2subnVt YmVyXS0+dG90YWxfc2VjdG9ycywKLQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpIGFycmF5LT5kaXNr X3NpemUpOwotCSAgYXJyYXktPmRpc2tfc2l6ZSA9IGFycmF5LT5kZXZpY2Vbc2IudGhpc19kaXNr Lm51bWJlcl0tPnRvdGFsX3NlY3RvcnM7Ci0JfQorICAgICAgZ3J1Yl9kaXNrX3QgZGlzazsKKyAg ICAgIHN0cnVjdCBncnViX3JhaWRfYXJyYXkgYXJyYXk7CisgICAgICBzdHJ1Y3QgZ3J1Yl9yYWlk ICpwOworCisgICAgICBncnViX2RwcmludGYgKCJyYWlkIiwgIlNjYW5uaW5nIGZvciBSQUlEIGRl dmljZXNcbiIpOworCisgICAgICBkaXNrID0gZ3J1Yl9kaXNrX29wZW4gKG5hbWUpOworICAgICAg aWYgKCFkaXNrKQorICAgICAgICByZXR1cm4gMDsKKworICAgICAgaWYgKGRpc2stPnRvdGFsX3Nl Y3RvcnMgPT0gVUxPTkdfTUFYKQorICAgICAgICB7CisgICAgICAgICAgZ3J1Yl9kaXNrX2Nsb3Nl IChkaXNrKTsKKyAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICBmb3IgKHAg PSBncnViX3JhaWRfbGlzdDsgcDsgcCA9IHAtPm5leHQpCisgICAgICAgIHsKKyAgICAgICAgICBp ZiAoISBwLT5kZXRlY3QgKGRpc2ssICZhcnJheSkpCisgICAgICAgICAgICB7CisgICAgICAgICAg ICAgIGlmICghIGluc2VydF9hcnJheSAoZGlzaywgJmFycmF5LCBwLT5uYW1lKSkKKyAgICAgICAg ICAgICAgICByZXR1cm4gMDsKKworICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K KworICAgICAgICAgIC8qIFRoaXMgZXJyb3IgdXN1YWxseSBtZWFucyBpdCdzIG5vdCByYWlkLCBu byBuZWVkIHRvIGRpc3BsYXkKKyAgICAgICAgICAgICBpdC4gICovCisgICAgICAgICAgaWYgKGdy dWJfZXJybm8gIT0gR1JVQl9FUlJfT1VUX09GX1JBTkdFKQorICAgICAgICAgICAgZ3J1Yl9wcmlu dF9lcnJvciAoKTsKKworICAgICAgICAgIGdydWJfZXJybm8gPSBHUlVCX0VSUl9OT05FOworICAg ICAgICAgIGlmIChoZWFkX29ubHkpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisg ICAgICBncnViX2Rpc2tfY2xvc2UgKGRpc2spOworCisgICAgICByZXR1cm4gMDsKICAgICB9CiAg IAotICBpZiAoISBhcnJheS0+ZGV2aWNlW3NiLnRoaXNfZGlzay5udW1iZXJdKQorICBncnViX2Rl dmljZV9pdGVyYXRlICgmaG9vayk7Cit9CisKK3N0YXRpYyB2b2lkCitmcmVlX2FycmF5ICh2b2lk KQoreworICBzdHJ1Y3QgZ3J1Yl9yYWlkX2FycmF5ICphcnJheTsKKworICBhcnJheSA9IGFycmF5 X2xpc3Q7CisgIHdoaWxlIChhcnJheSkKICAgICB7Ci0gICAgICAvKiBSZW1vdmUgYXJyYXkgZnJv bSB0aGUgbGlzdCBpZiB3ZSBoYXZlIGp1c3QgYWRkZWQgaXQuICovCi0gICAgICBpZiAoYXJyYXkt Pm5yX2RldnMgPT0gMCkKLQl7Ci0JICBhcnJheV9saXN0ID0gYXJyYXktPm5leHQ7Ci0JICBncnVi X2ZyZWUgKGFycmF5LT5uYW1lKTsKLQkgIGdydWJfZnJlZSAoYXJyYXkpOwotCX0KKyAgICAgIHN0 cnVjdCBncnViX3JhaWRfYXJyYXkgKnA7CisgICAgICBpbnQgaTsKIAkgIAotICAgICAgcmV0dXJu IDA7CisgICAgICBwID0gYXJyYXk7CisgICAgICBhcnJheSA9IGFycmF5LT5uZXh0OworCisgICAg ICBmb3IgKGkgPSAwOyBpIDwgR1JVQl9SQUlEX01BWF9ERVZJQ0VTOyBpKyspCisgICAgICAgIGlm IChwLT5kZXZpY2VbaV0pCisgICAgICAgICAgZ3J1Yl9kaXNrX2Nsb3NlIChwLT5kZXZpY2VbaV0p OworCisgICAgICBncnViX2ZyZWUgKHAtPnV1aWQpOworICAgICAgZ3J1Yl9mcmVlIChwLT5uYW1l KTsKKyAgICAgIGdydWJfZnJlZSAocCk7CiAgICAgfQogCi0gIGFycmF5LT5ucl9kZXZzKys7Cisg IGFycmF5X2xpc3QgPSAwOworfQogICAKLSAgcmV0dXJuIDA7Cit2b2lkCitncnViX3JhaWRfcmVn aXN0ZXIgKGdydWJfcmFpZF90IHJhaWQpCit7CisgIHJhaWQtPm5leHQgPSBncnViX3JhaWRfbGlz dDsKKyAgZ3J1Yl9yYWlkX2xpc3QgPSByYWlkOworICBncnViX3JhaWRfc2Nhbl9kZXZpY2UgKDEp OworfQorCit2b2lkCitncnViX3JhaWRfdW5yZWdpc3RlciAoZ3J1Yl9yYWlkX3QgcmFpZCkKK3sK KyAgZ3J1Yl9yYWlkX3QgKnAsIHE7CisKKyAgZm9yIChwID0gJmdydWJfcmFpZF9saXN0LCBxID0g KnA7IHE7IHAgPSAmKHEtPm5leHQpLCBxID0gcS0+bmV4dCkKKyAgICBpZiAocSA9PSByYWlkKQor ICAgICAgeworCSpwID0gcS0+bmV4dDsKKwlicmVhazsKKyAgICAgIH0KK30KKwordm9pZAorZ3J1 Yl9yYWlkX3Jlc2NhbiAodm9pZCkKK3sKKyAgZnJlZV9hcnJheSAoKTsKKyAgZ3J1Yl9yYWlkX3Nj YW5fZGV2aWNlICgwKTsKIH0KIAogc3RhdGljIHN0cnVjdCBncnViX2Rpc2tfZGV2IGdydWJfcmFp ZF9kZXYgPQpAQCAtNTc5LDE4ICs3MDgsMTEgQEAgc3RhdGljIHN0cnVjdCBncnViX2Rpc2tfZGV2 IGdydWJfcmFpZF9kZXYgPQogDAogR1JVQl9NT0RfSU5JVChyYWlkKQogewotICBncnViX2Rldmlj ZV9pdGVyYXRlICgmZ3J1Yl9yYWlkX3NjYW5fZGV2aWNlKTsKLSAgaWYgKGdydWJfZXJybm8pCi0g ICAgewotICAgICAgZ3J1Yl9wcmludF9lcnJvciAoKTsKLSAgICAgIGdydWJfZXJybm8gPSBHUlVC X0VSUl9OT05FOwotICAgIH0KLQogICBncnViX2Rpc2tfZGV2X3JlZ2lzdGVyICgmZ3J1Yl9yYWlk X2Rldik7CiB9CiAKIEdSVUJfTU9EX0ZJTkkocmFpZCkKIHsKICAgZ3J1Yl9kaXNrX2Rldl91bnJl Z2lzdGVyICgmZ3J1Yl9yYWlkX2Rldik7Ci0gIC8qIEZJWE1FOiBmcmVlIHRoZSBhcnJheSBsaXN0 LiAqLworICBmcmVlX2FycmF5ICgpOwogfQpkaWZmIC0tZ2l0IGEvZGlzay9yYWlkNV9yZWNvdmVy LmMgYi9kaXNrL3JhaWQ1X3JlY292ZXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwLi4zMWNlZjg4Ci0tLSAvZGV2L251bGwKKysrIGIvZGlzay9yYWlkNV9yZWNvdmVyLmMKQEAg LTAsMCArMSw3MiBAQAorLyogcmFpZDVfcmVjb3Zlci5jIC0gbW9kdWxlIHRvIHJlY292ZXIgZnJv bSBmYXVsdHkgUkFJRDQvNSBhcnJheXMuICAqLworLyoKKyAqICBHUlVCICAtLSAgR1JhbmQgVW5p ZmllZCBCb290bG9hZGVyCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LDIwMDcsMjAwOCAgRnJlZSBT b2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogIEdSVUIgaXMgZnJlZSBzb2Z0d2FyZTog eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cisg KiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUg TGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK KyAqICBHUlVCIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w eSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIEdSVUIu ICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKworI2lu Y2x1ZGUgPGdydWIvZGwuaD4KKyNpbmNsdWRlIDxncnViL2Rpc2suaD4KKyNpbmNsdWRlIDxncnVi L21tLmg+CisjaW5jbHVkZSA8Z3J1Yi9lcnIuaD4KKyNpbmNsdWRlIDxncnViL21pc2MuaD4KKyNp bmNsdWRlIDxncnViL3JhaWQuaD4KKworc3RhdGljIGdydWJfZXJyX3QKK2dydWJfcmFpZDVfcmVj b3ZlciAoc3RydWN0IGdydWJfcmFpZF9hcnJheSAqYXJyYXksIGludCBkaXNrbnIsCisgICAgICAg ICAgICAgICAgICAgIGNoYXIgKmJ1ZiwgZ3J1Yl9kaXNrX2FkZHJfdCBzZWN0b3IsIGludCBzaXpl KQoreworICBjaGFyICpidWYyOworICBpbnQgaTsKKworICBzaXplIDw8PSBHUlVCX0RJU0tfU0VD VE9SX0JJVFM7CisgIGJ1ZjIgPSBncnViX21hbGxvYyAoc2l6ZSk7CisgIGlmICghYnVmMikKKyAg ICByZXR1cm4gZ3J1Yl9lcnJubzsKKworICBncnViX21lbXNldCAoYnVmLCAwLCBzaXplKTsKKwor ICBmb3IgKGkgPSAwOyBpIDwgKGludCkgYXJyYXktPnRvdGFsX2RldnM7IGkrKykKKyAgICB7Cisg ICAgICBncnViX2Vycl90IGVycjsKKworICAgICAgaWYgKGkgPT0gZGlza25yKQorICAgICAgICBj b250aW51ZTsKKworICAgICAgZXJyID0gZ3J1Yl9kaXNrX3JlYWQgKGFycmF5LT5kZXZpY2VbaV0s IHNlY3RvciwgMCwgc2l6ZSwgYnVmMik7CisKKyAgICAgIGlmIChlcnIpCisgICAgICAgIHsKKyAg ICAgICAgICBncnViX2ZyZWUgKGJ1ZjIpOworICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAg IH0KKworICAgICAgZ3J1Yl9yYWlkX2Jsb2NrX3hvciAoYnVmLCBidWYyLCBzaXplKTsKKyAgICB9 CisKKyAgZ3J1Yl9mcmVlIChidWYyKTsKKworICByZXR1cm4gR1JVQl9FUlJfTk9ORTsKK30KKwor R1JVQl9NT0RfSU5JVChyYWlkNXJlYykKK3sKKyAgZ3J1Yl9yYWlkNV9yZWNvdmVyX2Z1bmMgPSBn cnViX3JhaWQ1X3JlY292ZXI7Cit9CisKK0dSVUJfTU9EX0ZJTkkocmFpZDVyZWMpCit7CisgIGdy dWJfcmFpZDVfcmVjb3Zlcl9mdW5jID0gMDsKK30KZGlmZiAtLWdpdCBhL2Rpc2svcmFpZDZfcmVj b3Zlci5jIGIvZGlzay9yYWlkNl9yZWNvdmVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMC4uM2NiMDhhYgotLS0gL2Rldi9udWxsCisrKyBiL2Rpc2svcmFpZDZfcmVjb3Zlci5j CkBAIC0wLDAgKzEsMjE2IEBACisvKiByYWlkNl9yZWNvdmVyLmMgLSBtb2R1bGUgdG8gcmVjb3Zl ciBmcm9tIGZhdWx0eSBSQUlENiBhcnJheXMuICAqLworLyoKKyAqICBHUlVCICAtLSAgR1JhbmQg VW5pZmllZCBCb290bG9hZGVyCisgKiAgQ29weXJpZ2h0IChDKSAyMDA2LDIwMDcsMjAwOCAgRnJl ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgKgorICogIEdSVUIgaXMgZnJlZSBzb2Z0d2Fy ZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5 CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVyIHZlcnNpb24gMyBvZiB0 aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor ICoKKyAqICBHUlVCIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1 c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vu c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg Y29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIEdS VUIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisgKi8KKwor I2luY2x1ZGUgPGdydWIvZGwuaD4KKyNpbmNsdWRlIDxncnViL2Rpc2suaD4KKyNpbmNsdWRlIDxn cnViL21tLmg+CisjaW5jbHVkZSA8Z3J1Yi9lcnIuaD4KKyNpbmNsdWRlIDxncnViL21pc2MuaD4K KyNpbmNsdWRlIDxncnViL3JhaWQuaD4KKworc3RhdGljIGdydWJfdWludDhfdCByYWlkNl90YWJs ZTFbMjU2XVsyNTZdOworc3RhdGljIGdydWJfdWludDhfdCByYWlkNl90YWJsZTJbMjU2XVsyNTZd OworCitzdGF0aWMgdm9pZAorZ3J1Yl9yYWlkX2Jsb2NrX211bCAoZ3J1Yl91aW50OF90IG11bCwg Y2hhciAqYnVmLCBpbnQgc2l6ZSkKK3sKKyAgaW50IGk7CisgIGdydWJfdWludDhfdCAqcDsKKwor ICBwID0gKGdydWJfdWludDhfdCAqKSBidWY7CisgIGZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyss IHArKykKKyAgICAqcCA9IHJhaWQ2X3RhYmxlMVttdWxdWypwXTsKK30KKworc3RhdGljIHZvaWQK K2dydWJfcmFpZDZfaW5pdF90YWJsZSAodm9pZCkKK3sKKyAgaW50IGksIGo7CisKKyAgZm9yIChp ID0gMDsgaSA8IDI1NjsgaSsrKQorICAgIHJhaWQ2X3RhYmxlMVtpXVsxXSA9IHJhaWQ2X3RhYmxl MVsxXVtpXSA9IGk7CisKKyAgZm9yIChpID0gMjsgaSA8IDI1NjsgaSsrKQorICAgIGZvciAoaiA9 IGk7IGogPCAyNTY7IGorKykKKyAgICAgIHsKKyAgICAgICAgaW50IG47CisgICAgICAgIGdydWJf dWludDhfdCBjOworCisgICAgICAgIG4gPSBpID4+IDE7CisKKyAgICAgICAgYyA9IHJhaWQ2X3Rh YmxlMVtuXVtqXTsKKyAgICAgICAgYyA9IChjIDw8IDEpIF4gKChjICYgMHg4MCkgPyAweDFkIDog MCk7CisgICAgICAgIGlmIChpICYgMSkKKyAgICAgICAgICBjIF49IGo7CisKKyAgICAgICAgcmFp ZDZfdGFibGUxW2pdW2ldID0gcmFpZDZfdGFibGUxW2ldW2pdID0gYzsKKyAgICAgIH0KKworICBy YWlkNl90YWJsZTJbMF1bMF0gPSAxOworICBmb3IgKGkgPSAxOyBpIDwgMjU2OyBpKyspCisgICAg cmFpZDZfdGFibGUyW2ldW2ldID0gcmFpZDZfdGFibGUxW3JhaWQ2X3RhYmxlMltpIC0gMV1baSAt IDFdXVsyXTsKKworICBmb3IgKGkgPSAwOyBpIDwgMjU0OyBpKyspCisgICAgZm9yIChqID0gMDsg aiA8IDI1NDsgaisrKQorICAgICAgeworICAgICAgICBncnViX3VpbnQ4X3QgYywgbjsKKyAgICAg ICAgaW50IGs7CisKKyAgICAgICAgaWYgKGkgPT0gaikKKyAgICAgICAgICBjb250aW51ZTsKKwor ICAgICAgICBrID0gaSAtIGo7CisgICAgICAgIGlmIChrIDwgMCkKKyAgICAgICAgICBrICs9IDI1 NTsKKworICAgICAgICBjID0gbiA9IHJhaWQ2X3RhYmxlMltrXVtrXSBeIDE7CisgICAgICAgIGZv ciAoayA9IDA7IGsgPCAyNTM7IGsrKykKKyAgICAgICAgICBjID0gcmFpZDZfdGFibGUxW2NdW25d OworCisgICAgICAgIHJhaWQ2X3RhYmxlMltpXVtqXSA9IHJhaWQ2X3RhYmxlMVtyYWlkNl90YWJs ZTJbMjU1IC0gal1bMjU1IC0gal1dW2NdOworICAgICAgfQorfQorCitzdGF0aWMgZ3J1Yl9lcnJf dAorZ3J1Yl9yYWlkNl9yZWNvdmVyIChzdHJ1Y3QgZ3J1Yl9yYWlkX2FycmF5ICphcnJheSwgaW50 IGRpc2tuciwgaW50IHAsCisgICAgICAgICAgICAgICAgICAgIGNoYXIgKmJ1ZiwgZ3J1Yl9kaXNr X2FkZHJfdCBzZWN0b3IsIGludCBzaXplKQoreworICBpbnQgaSwgcSwgcG9zOworICBpbnQgZXJy WzJdLCBuZXJyOworICBjaGFyICpwYnVmID0gMCwgKnFidWYgPSAwOworCisgIHNpemUgPDw9IEdS VUJfRElTS19TRUNUT1JfQklUUzsKKyAgcGJ1ZiA9IGdydWJfbWFsbG9jIChzaXplKTsKKyAgaWYg KCFwYnVmKQorICAgIGdvdG8gcXVpdDsKKworICBxYnVmID0gZ3J1Yl9tYWxsb2MgKHNpemUpOwor ICBpZiAoIXFidWYpCisgICAgZ290byBxdWl0OworCisgIHEgPSBwICsgMTsKKyAgaWYgKHEgPT0g KGludCkgYXJyYXktPnRvdGFsX2RldnMpCisgICAgcSA9IDA7CisKKyAgZ3J1Yl9tZW1zZXQgKHBi dWYsIDAsIHNpemUpOworICBncnViX21lbXNldCAocWJ1ZiwgMCwgc2l6ZSk7CisKKyAgcG9zID0g cSArIDE7CisgIGlmIChwb3MgPT0gKGludCkgYXJyYXktPnRvdGFsX2RldnMpCisgICAgcG9zID0g MDsKKworICBuZXJyID0gMTsKKyAgZm9yIChpID0gMDsgaSA8IChpbnQpIGFycmF5LT50b3RhbF9k ZXZzIC0gMjsgaSsrKQorICAgIHsKKyAgICAgIGlmIChwb3MgPT0gZGlza25yKQorICAgICAgICBl cnJbMF0gPSBpOworICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgaWYgKChhcnJheS0+ ZGV2aWNlW3Bvc10pICYmCisgICAgICAgICAgICAgICghIGdydWJfZGlza19yZWFkIChhcnJheS0+ ZGV2aWNlW3Bvc10sIHNlY3RvciwgMCwgc2l6ZSwgYnVmKSkpCisgICAgICAgICAgICB7CisgICAg ICAgICAgICAgIGdydWJfcmFpZF9ibG9ja194b3IgKHBidWYsIGJ1Ziwgc2l6ZSk7CisgICAgICAg ICAgICAgIGdydWJfcmFpZF9ibG9ja19tdWwgKHJhaWQ2X3RhYmxlMltpXVtpXSwgYnVmLCBzaXpl KTsKKyAgICAgICAgICAgICAgZ3J1Yl9yYWlkX2Jsb2NrX3hvciAocWJ1ZiwgYnVmLCBzaXplKTsK KyAgICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAg ICAgIGlmIChuZXJyID49IDIpCisgICAgICAgICAgICAgICAgZ290byBxdWl0OworCisgICAgICAg ICAgICAgIGVycltuZXJyKytdID0gaTsKKyAgICAgICAgICAgICAgZ3J1Yl9lcnJubyA9IEdSVUJf RVJSX05PTkU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgcG9zKys7CisgICAg ICBpZiAocG9zID09IChpbnQpIGFycmF5LT50b3RhbF9kZXZzKQorICAgICAgICBwb3MgPSAwOwor ICAgIH0KKworICBpZiAobmVyciA9PSAxKQorICAgIHsKKyAgICAgIGlmICgoYXJyYXktPmRldmlj ZVtwXSkgJiYKKyAgICAgICAgICAoISBncnViX2Rpc2tfcmVhZCAoYXJyYXktPmRldmljZVtwXSwg c2VjdG9yLCAwLCBzaXplLCBidWYpKSkKKyAgICAgICAgeworICAgICAgICAgIGdydWJfcmFpZF9i bG9ja194b3IgKGJ1ZiwgcGJ1Ziwgc2l6ZSk7CisgICAgICAgICAgZ290byBxdWl0OworICAgICAg ICB9CisKKyAgICAgIGlmICghIGFycmF5LT5kZXZpY2VbcV0pCisgICAgICAgIHsKKyAgICAgICAg ICBncnViX2Vycm9yIChHUlVCX0VSUl9SRUFEX0VSUk9SLCAiTm90IGVub3VnaCBkaXNrIHRvIHJl c3RvcmUiKTsKKyAgICAgICAgICBnb3RvIHF1aXQ7CisgICAgICAgIH0KKworICAgICAgZ3J1Yl9l cnJubyA9IEdSVUJfRVJSX05PTkU7CisgICAgICBpZiAoZ3J1Yl9kaXNrX3JlYWQgKGFycmF5LT5k ZXZpY2VbcV0sIHNlY3RvciwgMCwgc2l6ZSwgYnVmKSkKKyAgICAgICAgZ290byBxdWl0OworCisg ICAgICBncnViX3JhaWRfYmxvY2tfeG9yIChidWYsIHFidWYsIHNpemUpOworICAgICAgZ3J1Yl9y YWlkX2Jsb2NrX211bCAocmFpZDZfdGFibGUyWzI1NSAtIGVyclswXV1bMjU1IC0gZXJyWzBdXSwg YnVmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZSk7CisgICAgfQorICBlbHNlCisg ICAgeworICAgICAgZ3J1Yl91aW50OF90IGM7CisKKyAgICAgIGlmICgoISBhcnJheS0+ZGV2aWNl W3BdKSB8fCAoISBhcnJheS0+ZGV2aWNlW3FdKSkKKyAgICAgICAgeworICAgICAgICAgIGdydWJf ZXJyb3IgKEdSVUJfRVJSX1JFQURfRVJST1IsICJOb3QgZW5vdWdoIGRpc2sgdG8gcmVzdG9yZSIp OworICAgICAgICAgIGdvdG8gcXVpdDsKKyAgICAgICAgfQorCisgICAgICBpZiAoZ3J1Yl9kaXNr X3JlYWQgKGFycmF5LT5kZXZpY2VbcF0sIHNlY3RvciwgMCwgc2l6ZSwgYnVmKSkKKyAgICAgICAg Z290byBxdWl0OworCisgICAgICBncnViX3JhaWRfYmxvY2tfeG9yIChwYnVmLCBidWYsIHNpemUp OworCisgICAgICBpZiAoZ3J1Yl9kaXNrX3JlYWQgKGFycmF5LT5kZXZpY2VbcV0sIHNlY3Rvciwg MCwgc2l6ZSwgYnVmKSkKKyAgICAgICAgZ290byBxdWl0OworCisgICAgICBncnViX3JhaWRfYmxv Y2tfeG9yIChxYnVmLCBidWYsIHNpemUpOworCisgICAgICBjID0gcmFpZDZfdGFibGUyW2Vyclsx XV1bZXJyWzBdXTsKKyAgICAgIGdydWJfcmFpZF9ibG9ja19tdWwgKGMsIHFidWYsIHNpemUpOwor CisgICAgICBjID0gcmFpZDZfdGFibGUxW3JhaWQ2X3RhYmxlMltlcnJbMV1dW2VyclsxXV1dW2Nd OworICAgICAgZ3J1Yl9yYWlkX2Jsb2NrX211bCAoYywgcGJ1Ziwgc2l6ZSk7CisKKyAgICAgIGdy dWJfcmFpZF9ibG9ja194b3IgKHBidWYsIHFidWYsIHNpemUpOworICAgICAgZ3J1Yl9tZW1jcHkg KGJ1ZiwgcGJ1Ziwgc2l6ZSk7CisgICAgfQorCitxdWl0OgorICBncnViX2ZyZWUgKHBidWYpOwor ICBncnViX2ZyZWUgKHFidWYpOworCisgIHJldHVybiBncnViX2Vycm5vOworfQorCitHUlVCX01P RF9JTklUKHJhaWQ2cmVjKQoreworICBncnViX3JhaWQ2X2luaXRfdGFibGUgKCk7CisgIGdydWJf cmFpZDZfcmVjb3Zlcl9mdW5jID0gZ3J1Yl9yYWlkNl9yZWNvdmVyOworfQorCitHUlVCX01PRF9G SU5JKHJhaWQ2cmVjKQoreworICBncnViX3JhaWQ2X3JlY292ZXJfZnVuYyA9IDA7Cit9CmRpZmYg LS1naXQgYS9pbmNsdWRlL2dydWIvcmFpZC5oIGIvaW5jbHVkZS9ncnViL3JhaWQuaAppbmRleCA0 YWY5N2YxLi5hMzZiZTZkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2dydWIvcmFpZC5oCisrKyBiL2lu Y2x1ZGUvZ3J1Yi9yYWlkLmgKQEAgLTIyLDE2NSArMjIsNjUgQEAKIAogI2luY2x1ZGUgPGdydWIv dHlwZXMuaD4KIAorI2RlZmluZSBHUlVCX1JBSURfTUFYX0RFVklDRVMJMzIKKworI2RlZmluZSBH UlVCX1JBSURfTEFZT1VUX0xFRlRfQVNZTU1FVFJJQwkwCisjZGVmaW5lIEdSVUJfUkFJRF9MQVlP VVRfUklHSFRfQVNZTU1FVFJJQwkxCisjZGVmaW5lIEdSVUJfUkFJRF9MQVlPVVRfTEVGVF9TWU1N RVRSSUMJCTIKKyNkZWZpbmUgR1JVQl9SQUlEX0xBWU9VVF9SSUdIVF9TWU1NRVRSSUMJMworCisj ZGVmaW5lIEdSVUJfUkFJRF9MQVlPVVRfUklHSFRfTUFTSwkJMQorI2RlZmluZSBHUlVCX1JBSURf TEFZT1VUX1NZTU1FVFJJQ19NQVNLCQkyCisKIHN0cnVjdCBncnViX3JhaWRfYXJyYXkKIHsKICAg aW50IG51bWJlcjsgICAgICAgICAgICAgIC8qIFRoZSBkZXZpY2UgbnVtYmVyLCB0YWtlbiBmcm9t IG1kX21pbm9yIHNvIHdlCiAJCQkgICAgICBhcmUgY29uc2lzdGVudCB3aXRoIHRoZSBkZXZpY2Ug bmFtZSBpbgogCQkJICAgICAgTGludXguICovCi0gIGludCB2ZXJzaW9uOyAgICAgICAgICAgICAv KiAwID0gMC45MCwgMSA9IDEuMCAqLwogICBpbnQgbGV2ZWw7ICAgICAgICAgICAgICAgLyogUkFJ RCBsZXZlbHMsIG9ubHkgMCwgMSBvciA1IGF0IHRoZSBtb21lbnQuICovCi0gIGludCBsYXlvdXQ7 ICAgICAgICAgICAgICAvKiBPbmx5IGZvciBSQUlEIDUuICAqLworICBpbnQgbGF5b3V0OyAgICAg ICAgICAgICAgLyogTGF5b3V0IGZvciBSQUlEIDUvNi4gICovCiAgIHVuc2lnbmVkIGludCB0b3Rh bF9kZXZzOyAvKiBUb3RhbCBudW1iZXIgb2YgZGV2aWNlcyBpbiB0aGUgYXJyYXkuICovCi0gIHVu c2lnbmVkIGludCBucl9kZXZzOyAgICAvKiBUaGUgbnVtYmVyIG9mIGRldmljZXMgd2UndmUgZm91 bmQgc28gZmFyLiAqLwotICBncnViX3NpemVfdCBjaHVua19zaXplOyAvKiBUaGUgc2l6ZSBvZiBh IGNodW5rLCBpbiA1MTIgYnl0ZSBzZWN0b3JzLiAqLwotICBncnViX3VpbnQzMl90IHV1aWRbNF07 ICAgLyogVGhlIFVVSUQgb2YgdGhlIGRldmljZS4gKi8KLSAgY2hhciAqbmFtZTsgICAgICAgICAg ICAgIC8qIFRoYXQgd2lsbCBiZSAibWQ8bnVtYmVyPiIuICovCisgIGdydWJfc2l6ZV90IGNodW5r X3NpemU7ICAvKiBUaGUgc2l6ZSBvZiBhIGNodW5rLCBpbiA1MTIgYnl0ZSBzZWN0b3JzLiAqLwog ICBncnViX3VpbnQ2NF90IGRpc2tfc2l6ZTsgLyogU2l6ZSBvZiBhbiBpbmRpdmlkdWFsIGRpc2ss IGluIDUxMiBieXRlCiAJCQkgICAgICBzZWN0b3JzLiAqLwotICBncnViX2Rpc2tfdCBkZXZpY2Vb MzJdOyAgLyogQXJyYXkgb2YgdG90YWxfZGV2cyBkZXZpY2VzLiAqLyAgICAgICAgICAKKyAgaW50 IGluZGV4OyAgICAgICAgICAgICAgIC8qIEluZGV4IG9mIGN1cnJlbnQgZGV2aWNlLiAgKi8KKyAg aW50IHV1aWRfbGVuOyAgICAgICAgICAgIC8qIFRoZSBsZW5ndGggb2YgdXVpZC4gICovCisgIGNo YXIgKnV1aWQ7ICAgICAgICAgICAgICAvKiBUaGUgVVVJRCBvZiB0aGUgZGV2aWNlLiAqLworCisg IC8qIFRoZSBmb2xsb3dpbmcgZmllbGQgaXMgc2V0dXAgYnkgdGhlIGNhbGxlci4gICovCisgIGNo YXIgKm5hbWU7ICAgICAgICAgICAgICAvKiBUaGF0IHdpbGwgYmUgIm1kPG51bWJlcj4iLiAqLwor ICB1bnNpZ25lZCBpbnQgbnJfZGV2czsgICAgLyogVGhlIG51bWJlciBvZiBkZXZpY2VzIHdlJ3Zl IGZvdW5kIHNvIGZhci4gKi8KKyAgZ3J1Yl9kaXNrX3QgZGV2aWNlW0dSVUJfUkFJRF9NQVhfREVW SUNFU107ICAvKiBBcnJheSBvZiB0b3RhbF9kZXZzIGRldmljZXMuICovCiAgIHN0cnVjdCBncnVi X3JhaWRfYXJyYXkgKm5leHQ7CiB9OwogCi0vKiBMaW51eCBSQUlEIG9uIGRpc2sgc3RydWN0dXJl cyBhbmQgY29uc3RhbnRzLAotICAgY29waWVkIGZyb20gaW5jbHVkZS9saW51eC9yYWlkL21kX3Au aC4gICovCi0KLSNkZWZpbmUgR1JVQl9SQUlEX1JFU0VSVkVEX0JZVEVTCQkoNjQgKiAxMDI0KQot I2RlZmluZSBHUlVCX1JBSURfUkVTRVJWRURfU0VDVE9SUwkJKEdSVUJfUkFJRF9SRVNFUlZFRF9C WVRFUyAvIDUxMikKLQotI2RlZmluZSBHUlVCX1JBSURfTkVXX1NJWkVfU0VDVE9SUyh4KQkJKCh4 ICYgfihHUlVCX1JBSURfUkVTRVJWRURfU0VDVE9SUyAtIDEpKSBcCi0JCQkJCQkgLSBHUlVCX1JB SURfUkVTRVJWRURfU0VDVE9SUykKLQotI2RlZmluZSBHUlVCX1JBSURfU0JfQllURVMJCQk0MDk2 Ci0jZGVmaW5lIEdSVUJfUkFJRF9TQl9XT1JEUwkJCShHUlVCX1JBSURfU0JfQllURVMgLyA0KQot I2RlZmluZSBHUlVCX1JBSURfU0JfU0VDVE9SUwkJCShHUlVCX1JBSURfU0JfQllURVMgLyA1MTIp CitzdHJ1Y3QgZ3J1Yl9yYWlkCit7CisgIGNvbnN0IGNoYXIgKm5hbWU7CiAKLS8qCi0gKiBUaGUg Zm9sbG93aW5nIGFyZSBjb3VudGVkIGluIDMyLWJpdCB3b3JkcwotICovCi0jZGVmaW5lCUdSVUJf UkFJRF9TQl9HRU5FUklDX09GRlNFVAkJMAotCi0jZGVmaW5lIEdSVUJfUkFJRF9TQl9QRVJTT05B TElUWV9PRkZTRVQJNjQKLSNkZWZpbmUgR1JVQl9SQUlEX1NCX0RJU0tTX09GRlNFVAkJMTI4Ci0j ZGVmaW5lIEdSVUJfUkFJRF9TQl9ERVNDUklQVE9SX09GRlNFVAkJOTkyCi0KLSNkZWZpbmUgR1JV Ql9SQUlEX1NCX0dFTkVSSUNfQ09OU1RBTlRfV09SRFMJMzIKLSNkZWZpbmUgR1JVQl9SQUlEX1NC X0dFTkVSSUNfU1RBVEVfV09SRFMJMzIKLSNkZWZpbmUgR1JVQl9SQUlEX1NCX0dFTkVSSUNfV09S RFMJCShHUlVCX1JBSURfU0JfR0VORVJJQ19DT05TVEFOVF9XT1JEUyBcCi0JCQkJCQkgKyBHUlVC X1JBSURfU0JfR0VORVJJQ19TVEFURV9XT1JEUykKLSNkZWZpbmUgR1JVQl9SQUlEX1NCX1BFUlNP TkFMSVRZX1dPUkRTCQk2NAotI2RlZmluZSBHUlVCX1JBSURfU0JfREVTQ1JJUFRPUl9XT1JEUwkJ MzIKLSNkZWZpbmUgR1JVQl9SQUlEX1NCX0RJU0tTCQkJMjcKLSNkZWZpbmUgR1JVQl9SQUlEX1NC X0RJU0tTX1dPUkRTCQkoR1JVQl9SQUlEX1NCX0RJU0tTKkdSVUJfUkFJRF9TQl9ERVNDUklQVE9S X1dPUkRTKQotI2RlZmluZSBHUlVCX1JBSURfU0JfUkVTRVJWRURfV09SRFMJCSgxMDI0IC0gR1JV Ql9SQUlEX1NCX0dFTkVSSUNfV09SRFMgXAotCQkJCQkJIC0gR1JVQl9SQUlEX1NCX1BFUlNPTkFM SVRZX1dPUkRTIFwKLQkJCQkJCSAtIEdSVUJfUkFJRF9TQl9ESVNLU19XT1JEUyBcCi0JCQkJCQkg LSBHUlVCX1JBSURfU0JfREVTQ1JJUFRPUl9XT1JEUykKLSNkZWZpbmUgR1JVQl9SQUlEX1NCX0VR VUFMX1dPUkRTCQkoR1JVQl9SQUlEX1NCX0dFTkVSSUNfV09SRFMgXAotCQkJCQkJICsgR1JVQl9S QUlEX1NCX1BFUlNPTkFMSVRZX1dPUkRTIFwKLQkJCQkJCSArIEdSVUJfUkFJRF9TQl9ESVNLU19X T1JEUykKKyAgZ3J1Yl9lcnJfdCAoKmRldGVjdCkgKGdydWJfZGlza190IGRpc2ssIHN0cnVjdCBn cnViX3JhaWRfYXJyYXkgKmFycmF5KTsKIAotLyoKLSAqIERldmljZSAib3BlcmF0aW9uYWwiIHN0 YXRlIGJpdHMKLSAqLwotI2RlZmluZSBHUlVCX1JBSURfRElTS19GQVVMVFkJCTAgLyogZGlzayBp cyBmYXVsdHkgLyBvcGVyYXRpb25hbCAqLwotI2RlZmluZSBHUlVCX1JBSURfRElTS19BQ1RJVkUJ CTEgLyogZGlzayBpcyBydW5uaW5nIG9yIHNwYXJlIGRpc2sgKi8KLSNkZWZpbmUgR1JVQl9SQUlE X0RJU0tfU1lOQwkJMiAvKiBkaXNrIGlzIGluIHN5bmMgd2l0aCB0aGUgcmFpZCBzZXQgKi8KLSNk ZWZpbmUgR1JVQl9SQUlEX0RJU0tfUkVNT1ZFRAkJMyAvKiBkaXNrIGlzIGluIHN5bmMgd2l0aCB0 aGUgcmFpZCBzZXQgKi8KKyAgc3RydWN0IGdydWJfcmFpZCAqbmV4dDsKK307Cit0eXBlZGVmIHN0 cnVjdCBncnViX3JhaWQgKmdydWJfcmFpZF90OwogCi0jZGVmaW5lCUdSVUJfUkFJRF9ESVNLX1dS SVRFTU9TVExZCTkgLyogZGlzayBpcyAid3JpdGUtbW9zdGx5IiBpcyBSQUlEMSBjb25maWcuCi0J CQkJCSAgICogcmVhZCByZXF1ZXN0cyB3aWxsIG9ubHkgYmUgc2VudCBoZXJlIGluCi0JCQkJCSAg ICogZGlyZSBuZWVkCi0JCQkJCSAgICovCit2b2lkIGdydWJfcmFpZF9yZWdpc3RlciAoZ3J1Yl9y YWlkX3QgcmFpZCk7Cit2b2lkIGdydWJfcmFpZF91bnJlZ2lzdGVyIChncnViX3JhaWRfdCByYWlk KTsKIAordm9pZCBncnViX3JhaWRfcmVzY2FuICh2b2lkKTsKK3ZvaWQgZ3J1Yl9yYWlkX2Jsb2Nr X3hvciAoY2hhciAqYnVmMSwgY2hhciAqYnVmMiwgaW50IHNpemUpOwogCi0jZGVmaW5lIEdSVUJf UkFJRF9TQl9NQUdJQwkJMHhhOTJiNGVmYwordHlwZWRlZiBncnViX2Vycl90ICgqZ3J1Yl9yYWlk NV9yZWNvdmVyX2Z1bmNfdCkgKHN0cnVjdCBncnViX3JhaWRfYXJyYXkgKmFycmF5LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBkaXNrbnIsIGNo YXIgKmJ1ZiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBncnViX2Rpc2tfYWRkcl90IHNlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSk7CiAKLS8qCi0gKiBTdXBlcmJsb2NrIHN0YXRl IGJpdHMKLSAqLwotI2RlZmluZSBHUlVCX1JBSURfU0JfQ0xFQU4JCTAKLSNkZWZpbmUgR1JVQl9S QUlEX1NCX0VSUk9SUwkJMQotCi0jZGVmaW5lCUdSVUJfUkFJRF9TQl9CSVRNQVBfUFJFU0VOVAk4 IC8qIGJpdG1hcCBtYXkgYmUgcHJlc2VudCBuZWFyYnkgKi8KLQotc3RydWN0IGdydWJfcmFpZF9k aXNrXzA5IHsKLSAgZ3J1Yl91aW50MzJfdCBudW1iZXI7CQkvKiAwIERldmljZSBudW1iZXIgaW4g dGhlIGVudGlyZSBzZXQJICAgICAgKi8KLSAgZ3J1Yl91aW50MzJfdCBtYWpvcjsJCS8qIDEgRGV2 aWNlIG1ham9yIG51bWJlcgkJICAgICAgKi8KLSAgZ3J1Yl91aW50MzJfdCBtaW5vcjsJCS8qIDIg RGV2aWNlIG1pbm9yIG51bWJlcgkJICAgICAgKi8KLSAgZ3J1Yl91aW50MzJfdCByYWlkX2Rpc2s7 CS8qIDMgVGhlIHJvbGUgb2YgdGhlIGRldmljZSBpbiB0aGUgcmFpZCBzZXQgICAqLwotICBncnVi X3VpbnQzMl90IHN0YXRlOwkJLyogNCBPcGVyYXRpb25hbCBzdGF0ZQkJCSAgICAgICovCi0gIGdy dWJfdWludDMyX3QgcmVzZXJ2ZWRbR1JVQl9SQUlEX1NCX0RFU0NSSVBUT1JfV09SRFMgLSA1XTsK LX07Cit0eXBlZGVmIGdydWJfZXJyX3QgKCpncnViX3JhaWQ2X3JlY292ZXJfZnVuY190KSAoc3Ry dWN0IGdydWJfcmFpZF9hcnJheSAqYXJyYXksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IGRpc2tuciwgaW50IHAsIGNoYXIgKmJ1ZiwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncnViX2Rpc2tfYWRk cl90IHNlY3RvciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgc2l6ZSk7CiAKLXN0cnVjdCBncnViX3JhaWRfc3VwZXJfMDkgewotICAvKgotICAg KiBDb25zdGFudCBnZW5lcmljIGluZm9ybWF0aW9uCi0gICAqLwotICBncnViX3VpbnQzMl90IG1k X21hZ2ljOwkvKiAgMCBNRCBpZGVudGlmaWVyIAkJCSAgICAgICovCi0gIGdydWJfdWludDMyX3Qg bWFqb3JfdmVyc2lvbjsJLyogIDEgbWFqb3IgdmVyc2lvbiB0byB3aGljaCB0aGUgc2V0IGNvbmZv cm1zICovCi0gIGdydWJfdWludDMyX3QgbWlub3JfdmVyc2lvbjsJLyogIDIgbWlub3IgdmVyc2lv biAuLi4JCQkgICAgICAqLwotICBncnViX3VpbnQzMl90IHBhdGNoX3ZlcnNpb247CS8qICAzIHBh dGNobGV2ZWwgdmVyc2lvbiAuLi4JCSAgICAgICovCi0gIGdydWJfdWludDMyX3QgZ3ZhbGlkX3dv cmRzOwkvKiAgNCBOdW1iZXIgb2YgdXNlZCB3b3JkcyBpbiB0aGlzIHNlY3Rpb24gICAgKi8KLSAg Z3J1Yl91aW50MzJfdCBzZXRfdXVpZDA7CS8qICA1IFJhaWQgc2V0IGlkZW50aWZpZXIJCSAgICAg ICovCi0gIGdydWJfdWludDMyX3QgY3RpbWU7CQkvKiAgNiBDcmVhdGlvbiB0aW1lCQkJICAgICAg Ki8KLSAgZ3J1Yl91aW50MzJfdCBsZXZlbDsJCS8qICA3IFJhaWQgcGVyc29uYWxpdHkJCQkgICAg ICAqLwotICBncnViX3VpbnQzMl90IHNpemU7CQkvKiAgOCBBcHBhcmVudCBzaXplIG9mIGVhY2gg aW5kaXZpZHVhbCBkaXNrICAgKi8KLSAgZ3J1Yl91aW50MzJfdCBucl9kaXNrczsJLyogIDkgdG90 YWwgZGlza3MgaW4gdGhlIHJhaWQgc2V0CSAgICAgICovCi0gIGdydWJfdWludDMyX3QgcmFpZF9k aXNrczsJLyogMTAgZGlza3MgaW4gYSBmdWxseSBmdW5jdGlvbmFsIHJhaWQgc2V0ICAgICovCi0g IGdydWJfdWludDMyX3QgbWRfbWlub3I7CS8qIDExIHByZWZlcnJlZCBNRCBtaW5vciBkZXZpY2Ug bnVtYmVyCSAgICAgICovCi0gIGdydWJfdWludDMyX3Qgbm90X3BlcnNpc3RlbnQ7CS8qIDEyIGRv ZXMgaXQgaGF2ZSBhIHBlcnNpc3RlbnQgc3VwZXJibG9jayAgICAqLwotICBncnViX3VpbnQzMl90 IHNldF91dWlkMTsJLyogMTMgUmFpZCBzZXQgaWRlbnRpZmllciAjMgkJICAgICAgKi8KLSAgZ3J1 Yl91aW50MzJfdCBzZXRfdXVpZDI7CS8qIDE0IFJhaWQgc2V0IGlkZW50aWZpZXIgIzMJCSAgICAg ICovCi0gIGdydWJfdWludDMyX3Qgc2V0X3V1aWQzOwkvKiAxNSBSYWlkIHNldCBpZGVudGlmaWVy ICM0CQkgICAgICAqLwotICBncnViX3VpbnQzMl90IGdzdGF0ZV9jcmVzZXJ2ZWRbR1JVQl9SQUlE X1NCX0dFTkVSSUNfQ09OU1RBTlRfV09SRFMgLSAxNl07Ci0KLSAgLyoKLSAgICogR2VuZXJpYyBz dGF0ZSBpbmZvcm1hdGlvbgotICAgKi8KLSAgZ3J1Yl91aW50MzJfdCB1dGltZTsJCS8qICAwIFN1 cGVyYmxvY2sgdXBkYXRlIHRpbWUJCSAgICAgICovCi0gIGdydWJfdWludDMyX3Qgc3RhdGU7CQkv KiAgMSBTdGF0ZSBiaXRzIChjbGVhbiwgLi4uKQkJICAgICAgKi8KLSAgZ3J1Yl91aW50MzJfdCBh Y3RpdmVfZGlza3M7CS8qICAyIE51bWJlciBvZiBjdXJyZW50bHkgYWN0aXZlIGRpc2tzCSAgICAg ICovCi0gIGdydWJfdWludDMyX3Qgd29ya2luZ19kaXNrczsJLyogIDMgTnVtYmVyIG9mIHdvcmtp bmcgZGlza3MJCSAgICAgICovCi0gIGdydWJfdWludDMyX3QgZmFpbGVkX2Rpc2tzOwkvKiAgNCBO dW1iZXIgb2YgZmFpbGVkIGRpc2tzCQkgICAgICAqLwotICBncnViX3VpbnQzMl90IHNwYXJlX2Rp c2tzOwkvKiAgNSBOdW1iZXIgb2Ygc3BhcmUgZGlza3MJCSAgICAgICovCi0gIGdydWJfdWludDMy X3Qgc2JfY3N1bTsJLyogIDYgY2hlY2tzdW0gb2YgdGhlIHdob2xlIHN1cGVyYmxvY2sgICAgICAg ICovCi0jaWZkZWYgR1JVQl9IT1NUX1dPUkRTX0JJR0VORElBTgotICBncnViX3VpbnQzMl90IGV2 ZW50c19oaTsJLyogIDcgaGlnaC1vcmRlciBvZiBzdXBlcmJsb2NrIHVwZGF0ZSBjb3VudCAgICov Ci0gIGdydWJfdWludDMyX3QgZXZlbnRzX2xvOwkvKiAgOCBsb3ctb3JkZXIgb2Ygc3VwZXJibG9j ayB1cGRhdGUgY291bnQgICAgKi8KLSAgZ3J1Yl91aW50MzJfdCBjcF9ldmVudHNfaGk7CS8qICA5 IGhpZ2gtb3JkZXIgb2YgY2hlY2twb2ludCB1cGRhdGUgY291bnQgICAqLwotICBncnViX3VpbnQz Ml90IGNwX2V2ZW50c19sbzsJLyogMTAgbG93LW9yZGVyIG9mIGNoZWNrcG9pbnQgdXBkYXRlIGNv dW50ICAgICovCi0jZWxzZQotICBncnViX3VpbnQzMl90IGV2ZW50c19sbzsJLyogIDcgbG93LW9y ZGVyIG9mIHN1cGVyYmxvY2sgdXBkYXRlIGNvdW50ICAgICovCi0gIGdydWJfdWludDMyX3QgZXZl bnRzX2hpOwkvKiAgOCBoaWdoLW9yZGVyIG9mIHN1cGVyYmxvY2sgdXBkYXRlIGNvdW50ICAgKi8K LSAgZ3J1Yl91aW50MzJfdCBjcF9ldmVudHNfbG87CS8qICA5IGxvdy1vcmRlciBvZiBjaGVja3Bv aW50IHVwZGF0ZSBjb3VudCAgICAqLwotICBncnViX3VpbnQzMl90IGNwX2V2ZW50c19oaTsJLyog MTAgaGlnaC1vcmRlciBvZiBjaGVja3BvaW50IHVwZGF0ZSBjb3VudCAgICovCi0jZW5kaWYKLSAg Z3J1Yl91aW50MzJfdCByZWNvdmVyeV9jcDsJLyogMTEgcmVjb3ZlcnkgY2hlY2twb2ludCBzZWN0 b3IgY291bnQJICAgICAgKi8KLSAgZ3J1Yl91aW50MzJfdCBnc3RhdGVfc3Jlc2VydmVkW0dSVUJf UkFJRF9TQl9HRU5FUklDX1NUQVRFX1dPUkRTIC0gMTJdOwotCi0gIC8qCi0gICAqIFBlcnNvbmFs aXR5IGluZm9ybWF0aW9uCi0gICAqLwotICBncnViX3VpbnQzMl90IGxheW91dDsJCS8qICAwIHRo ZSBhcnJheSdzIHBoeXNpY2FsIGxheW91dAkgICAgICAqLwotICBncnViX3VpbnQzMl90IGNodW5r X3NpemU7CS8qICAxIGNodW5rIHNpemUgaW4gYnl0ZXMJCSAgICAgICovCi0gIGdydWJfdWludDMy X3Qgcm9vdF9wdjsJLyogIDIgTFYgcm9vdCBQViAqLwotICBncnViX3VpbnQzMl90IHJvb3RfYmxv Y2s7CS8qICAzIExWIHJvb3QgYmxvY2sgKi8KLSAgZ3J1Yl91aW50MzJfdCBwc3RhdGVfcmVzZXJ2 ZWRbR1JVQl9SQUlEX1NCX1BFUlNPTkFMSVRZX1dPUkRTIC0gNF07Ci0KLSAgLyoKLSAgICogRGlz a3MgaW5mb3JtYXRpb24KLSAgICovCi0gIHN0cnVjdCBncnViX3JhaWRfZGlza18wOSBkaXNrc1tH UlVCX1JBSURfU0JfRElTS1NdOwotCi0gIC8qCi0gICAqIFJlc2VydmVkCi0gICAqLwotICBncnVi X3VpbnQzMl90IHJlc2VydmVkW0dSVUJfUkFJRF9TQl9SRVNFUlZFRF9XT1JEU107Ci0KLSAgLyoK LSAgICogQWN0aXZlIGRlc2NyaXB0b3IKLSAgICovCi0gIHN0cnVjdCBncnViX3JhaWRfZGlza18w OSB0aGlzX2Rpc2s7Ci19OworZXh0ZXJuIGdydWJfcmFpZDVfcmVjb3Zlcl9mdW5jX3QgZ3J1Yl9y YWlkNV9yZWNvdmVyX2Z1bmM7CitleHRlcm4gZ3J1Yl9yYWlkNl9yZWNvdmVyX2Z1bmNfdCBncnVi X3JhaWQ2X3JlY292ZXJfZnVuYzsKIAogI2VuZGlmIC8qICEgR1JVQl9SQUlEX0ggKi8KZGlmZiAt LWdpdCBhL3V0aWwvZ3J1Yi1mc3Rlc3QuYyBiL3V0aWwvZ3J1Yi1mc3Rlc3QuYwppbmRleCAzNWFm NmE1Li5hMWMzYzg5IDEwMDY0NAotLS0gYS91dGlsL2dydWItZnN0ZXN0LmMKKysrIGIvdXRpbC9n cnViLWZzdGVzdC5jCkBAIC0yOSw3ICsyOSw5IEBACiAjaW5jbHVkZSA8Z3J1Yi90ZXJtLmg+CiAj aW5jbHVkZSA8Z3J1Yi9tbS5oPgogI2luY2x1ZGUgPGdydWIvbm9ybWFsLmg+CisjaW5jbHVkZSA8 Z3J1Yi9yYWlkLmg+CiAjaW5jbHVkZSA8Z3J1Yi9saWIvaGV4ZHVtcC5oPgorI2luY2x1ZGUgPGdy dWIvbGliL2NyYy5oPgogCiAjaW5jbHVkZSA8Z3J1Yl9mc3Rlc3RfaW5pdC5oPgogCkBAIC0xMzYs MTIgKzEzOCwxMiBAQCBncnViX3VucmVnaXN0ZXJfY29tbWFuZCAoY29uc3QgY2hhciAqbmFtZSBf X2F0dHJpYnV0ZV9fICgodW51c2VkKSkpCiAjZGVmaW5lIENNRF9DUCAgICAgICAgICAyCiAjZGVm aW5lIENNRF9DTVAgICAgICAgICAzCiAjZGVmaW5lIENNRF9IRVggICAgICAgICA0Ci0jZGVmaW5l IENNRF9CTE9DS0xJU1QgICA1CisjZGVmaW5lIENNRF9DUkMgICAgICAgICA2CisjZGVmaW5lIENN RF9CTE9DS0xJU1QgICA3CiAKICNkZWZpbmUgQlVGX1NJWkUgIDMyMjU2CiAKIHN0YXRpYyBncnVi X29mZl90IHNraXAsIGxlbmc7Ci1zdGF0aWMgY2hhciAqcGFydDsKIAogc3RhdGljIHZvaWQKIHJl YWRfZmlsZSAoY2hhciAqcGF0aG5hbWUsIGludCAoKmhvb2spIChncnViX29mZl90IG9mcywgY2hh ciAqYnVmLCBpbnQgbGVuKSkKQEAgLTE1MCwxNiArMTUyLDUzIEBAIHJlYWRfZmlsZSAoY2hhciAq cGF0aG5hbWUsIGludCAoKmhvb2spIChncnViX29mZl90IG9mcywgY2hhciAqYnVmLCBpbnQgbGVu KSkKICAgZ3J1Yl9maWxlX3QgZmlsZTsKICAgZ3J1Yl9vZmZfdCBvZnMsIGxlbjsKIAorICBpZiAo KHBhdGhuYW1lWzBdID09ICctJykgJiYgKHBhdGhuYW1lWzFdID09IDApKQorICAgIHsKKyAgICAg IGdydWJfZGV2aWNlX3QgZGV2OworCisgICAgICBkZXYgPSBncnViX2RldmljZV9vcGVuICgwKTsK KyAgICAgIGlmICgoISBkZXYpIHx8ICghIGRldi0+ZGlzaykpCisgICAgICAgIGdydWJfdXRpbF9l cnJvciAoIkNhblwndCBvcGVuIGRldmljZS4iKTsKKworICAgICAgZ3J1Yl91dGlsX2luZm8gKCJ0 b3RhbCBzZWN0b3JzIDogJWxsZC4iLAorICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBs b25nIGxvbmcpIGRldi0+ZGlzay0+dG90YWxfc2VjdG9ycyk7CisKKyAgICAgIGlmICghIGxlbmcp CisgICAgICAgIGxlbmcgPSAoZGV2LT5kaXNrLT50b3RhbF9zZWN0b3JzIDw8IEdSVUJfRElTS19T RUNUT1JfQklUUykgLSBza2lwOworCisgICAgICB3aGlsZSAobGVuZykKKyAgICAgICAgeworICAg ICAgICAgIGdydWJfc2l6ZV90IGxlbjsKKworICAgICAgICAgIGxlbiA9IChsZW5nID4gQlVGX1NJ WkUpID8gQlVGX1NJWkUgOiBsZW5nOworCisgICAgICAgICAgaWYgKGdydWJfZGlza19yZWFkIChk ZXYtPmRpc2ssIDAsIHNraXAsIGxlbiwgYnVmKSkKKyAgICAgICAgICAgIGdydWJfdXRpbF9lcnJv ciAoIkRpc2sgcmVhZCBmYWlscyBhdCBvZmZzZXQgJWxsZCwgbGVuZ3RoICVkLiIsCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNraXAsIGxlbik7CisKKyAgICAgICAgICBpZiAoaG9vayAo c2tpcCwgYnVmLCBsZW4pKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICBza2lwICs9 IGxlbjsKKyAgICAgICAgICBsZW5nIC09IGxlbjsKKyAgICAgICAgfQorCisgICAgICBncnViX2Rl dmljZV9jbG9zZSAoZGV2KTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKICAgZmlsZSA9IGdydWJf ZmlsZV9vcGVuIChwYXRobmFtZSk7CiAgIGlmICghZmlsZSkKICAgICB7Ci0gICAgICBncnViX3V0 aWxfZXJyb3IgKCJjYW5ub3Qgb3BlbiBmaWxlICVzLlxuIiwgcGF0aG5hbWUpOworICAgICAgZ3J1 Yl91dGlsX2Vycm9yICgiY2Fubm90IG9wZW4gZmlsZSAlcy4iLCBwYXRobmFtZSk7CiAgICAgICBy ZXR1cm47CiAgICAgfQogCisgIGdydWJfdXRpbF9pbmZvICgiZmlsZSBzaXplIDogJWxsZC4iLCAo dW5zaWduZWQgbG9uZyBsb25nKSBmaWxlLT5zaXplKTsKKwogICBpZiAoc2tpcCA+IGZpbGUtPnNp emUpCiAgICAgewotICAgICAgZ3J1Yl91dGlsX2Vycm9yICgiaW52YWxpZCBza2lwIHZhbHVlICVk LlxuIik7CisgICAgICBncnViX3V0aWxfZXJyb3IgKCJpbnZhbGlkIHNraXAgdmFsdWUgJWQuIik7 CiAgICAgICByZXR1cm47CiAgICAgfQogCkBAIC0xNzcsNyArMjE2LDcgQEAgcmVhZF9maWxlIChj aGFyICpwYXRobmFtZSwgaW50ICgqaG9vaykgKGdydWJfb2ZmX3Qgb2ZzLCBjaGFyICpidWYsIGlu dCBsZW4pKQogICAgICAgc3ogPSBncnViX2ZpbGVfcmVhZCAoZmlsZSwgYnVmLCAobGVuID4gQlVG X1NJWkUpID8gQlVGX1NJWkUgOiBsZW4pOwogICAgICAgaWYgKHN6IDwgMCkKIAl7Ci0JICBncnVi X3V0aWxfZXJyb3IgKCJyZWFkIGVycm9yIGF0IG9mZnNldCAlbGx1LlxuIiwgb2ZzKTsKKwkgIGdy dWJfdXRpbF9lcnJvciAoInJlYWQgZXJyb3IgYXQgb2Zmc2V0ICVsbHUuIiwgb2ZzKTsKIAkgIGJy ZWFrOwogCX0KIApAQCAtMjAzLDcgKzI0Miw3IEBAIGNtZF9jcCAoY2hhciAqc3JjLCBjaGFyICpk ZXN0KQogCiAgICAgaWYgKChpbnQpIGZ3cml0ZSAoYnVmLCAxLCBsZW4sIGZmKSAhPSBsZW4pCiAg ICAgICB7Ci0JZ3J1Yl91dGlsX2Vycm9yICgid3JpdGUgZXJyb3IuXG4iKTsKKwlncnViX3V0aWxf ZXJyb3IgKCJ3cml0ZSBlcnJvci4iKTsKIAlyZXR1cm4gMTsKICAgICAgIH0KIApAQCAtMjEzLDcg KzI1Miw3IEBAIGNtZF9jcCAoY2hhciAqc3JjLCBjaGFyICpkZXN0KQogICBmZiA9IGZvcGVuIChk ZXN0LCAidyIpOwogICBpZiAoZmYgPT0gTlVMTCkKICAgICB7Ci0gICAgICBncnViX3V0aWxfZXJy b3IgKCJvcGVuIGVycm9yLlxuIik7CisgICAgICBncnViX3V0aWxfZXJyb3IgKCJvcGVuIGVycm9y LiIpOwogICAgICAgcmV0dXJuOwogICAgIH0KICAgcmVhZF9maWxlIChzcmMsIGNwX2hvb2spOwpA QCAtMjMxLDcgKzI3MCw3IEBAIGNtZF9jbXAgKGNoYXIgKnNyYywgY2hhciAqZGVzdCkKICAgewog ICAgIGlmICgoaW50KSBmcmVhZCAoYnVmXzEsIDEsIGxlbiwgZmYpICE9IGxlbikKICAgICAgIHsK LQlncnViX3V0aWxfZXJyb3IgKCJyZWFkIGVycm9yIGF0IG9mZnNldCAlbGx1LlxuIiwgb2ZzKTsK KwlncnViX3V0aWxfZXJyb3IgKCJyZWFkIGVycm9yIGF0IG9mZnNldCAlbGx1LiIsIG9mcyk7CiAJ cmV0dXJuIDE7CiAgICAgICB9CiAKQEAgLTI0Miw3ICsyODEsNyBAQCBjbWRfY21wIChjaGFyICpz cmMsIGNoYXIgKmRlc3QpCiAJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrLCBvZnMrKykKIAkgIGlm IChidWZfMVtpXSAhPSBidWZbaV0pCiAJICAgIHsKLQkgICAgICBncnViX3V0aWxfZXJyb3IgKCJj b21wYXJlIGZhaWwgYXQgb2Zmc2V0ICVsbHUuXG4iLCBvZnMpOworCSAgICAgIGdydWJfdXRpbF9l cnJvciAoImNvbXBhcmUgZmFpbCBhdCBvZmZzZXQgJWxsdS4iLCBvZnMpOwogCSAgICAgIHJldHVy biAxOwogCSAgICB9CiAgICAgICB9CkBAIC0yNTIsMTIgKzI5MSwxMiBAQCBjbWRfY21wIChjaGFy ICpzcmMsIGNoYXIgKmRlc3QpCiAgIGZmID0gZm9wZW4gKGRlc3QsICJyIik7CiAgIGlmIChmZiA9 PSBOVUxMKQogICAgIHsKLSAgICAgIGdydWJfdXRpbF9lcnJvciAoIm9wZW4gZXJyb3IuXG4iKTsK KyAgICAgIGdydWJfdXRpbF9lcnJvciAoIm9wZW4gZXJyb3IuIik7CiAgICAgICByZXR1cm47CiAg ICAgfQogCiAgIGlmICgoc2tpcCkgJiYgKGZzZWVrbyAoZmYsIHNraXAsIFNFRUtfU0VUKSkpCi0g ICAgZ3J1Yl91dGlsX2Vycm9yICgic2VlayBlcnJvci5cbiIpOworICAgIGdydWJfdXRpbF9lcnJv ciAoInNlZWsgZXJyb3IuIik7CiAKICAgcmVhZF9maWxlIChzcmMsIGNtcF9ob29rKTsKICAgZmNs b3NlIChmZik7CkBAIC0yNzcsMjggKzMxNiw0NCBAQCBjbWRfaGV4IChjaGFyICpwYXRobmFtZSkK IH0KIAogc3RhdGljIHZvaWQKLWZzdGVzdCAoY2hhciAqaW1hZ2VfcGF0aCwgaW50IGNtZCwgaW50 IG4sIGNoYXIgKiphcmdzKQorY21kX2NyYyAoY2hhciAqcGF0aG5hbWUpCiB7Ci0gIGNoYXIgaG9z dF9maWxlWzcgKyBncnViX3N0cmxlbiAoaW1hZ2VfcGF0aCkgKyAxXTsKLSAgY2hhciBkZXZpY2Vf bmFtZVsocGFydCkgPyAoNiArIGdydWJfc3RybGVuIChwYXJ0KSkgOiA1XTsKLSAgY2hhciAqYXJn dlszXSA9IHsgIi1wIiwgImxvb3AiLCBob3N0X2ZpbGUgfTsKKyAgZ3J1Yl91aW50MzJfdCBjcmMg PSAwOworCisgIGF1dG8gaW50IGNyY19ob29rIChncnViX29mZl90IG9mcywgY2hhciAqYnVmLCBp bnQgbGVuKTsKKyAgaW50IGNyY19ob29rIChncnViX29mZl90IG9mcywgY2hhciAqYnVmLCBpbnQg bGVuKQorICB7CisgICAgKHZvaWQpIG9mczsKKworICAgIGNyYyA9IGdydWJfZ2V0Y3JjMzIgKGNy YywgYnVmLCBsZW4pOworICAgIHJldHVybiAwOworICB9CiAKKyAgcmVhZF9maWxlIChwYXRobmFt ZSwgY3JjX2hvb2spOworICBwcmludGYgKCIlMDh4XG4iLCBjcmMpOworfQogCi0gIGdydWJfc3By aW50ZiAoaG9zdF9maWxlLCAiKGhvc3QpLyVzIiwgaW1hZ2VfcGF0aCk7CitzdGF0aWMgdm9pZAor ZnN0ZXN0IChjaGFyICoqaW1hZ2VzLCBpbnQgbnVtX2Rpc2tzLCBpbnQgY21kLCBpbnQgbiwgY2hh ciAqKmFyZ3MpCit7CisgIGNoYXIgaG9zdF9maWxlWzEyOF07CisgIGNoYXIgbG9vcF9uYW1lWzhd OworICBjaGFyICphcmd2WzNdID0geyAiLXAiLCBsb29wX25hbWUsIGhvc3RfZmlsZX07CisgIGlu dCBpOwogCi0gIGlmIChleGVjdXRlX2NvbW1hbmQgKCZjbWRfbG9vcGJhY2ssIDMsIGFyZ3YpKQor ICBmb3IgKGkgPSAwOyBpIDwgbnVtX2Rpc2tzOyBpKyspCiAgICAgewotICAgICAgZ3J1Yl91dGls X2Vycm9yICgibG9vcGJhY2sgY29tbWFuZCBmYWlscy5cbiIpOwotICAgICAgZ290byBmYWlsOwot ICAgIH0KKyAgICAgIGlmIChncnViX3N0cmxlbiAoaW1hZ2VzW2ldKSArIDcgPiBzaXplb2YgKGhv c3RfZmlsZSkpCisgICAgICAgIGdydWJfdXRpbF9lcnJvciAoIlBhdGhuYW1lICVzIHRvbyBsb25n LiIsIGltYWdlc1tpXSk7CiAKLSAgaWYgKHBhcnQpCi0gICAgZ3J1Yl9zcHJpbnRmIChkZXZpY2Vf bmFtZSwgImxvb3AsJXMiLCBwYXJ0KTsKLSAgZWxzZQotICAgIGdydWJfc3RyY3B5IChkZXZpY2Vf bmFtZSwgImxvb3AiKTsKKyAgICAgIGdydWJfc3ByaW50ZiAobG9vcF9uYW1lLCAibG9vcCVkIiwg aSk7CisgICAgICBncnViX3NwcmludGYgKGhvc3RfZmlsZSwgIihob3N0KSVzIiwgaW1hZ2VzW2ld KTsKIAotICBncnViX2Vudl9zZXQgKCJyb290IiwgZGV2aWNlX25hbWUpOworICAgICAgaWYgKGV4 ZWN1dGVfY29tbWFuZCAoJmNtZF9sb29wYmFjaywgMywgYXJndikpCisgICAgICAgIGdydWJfdXRp bF9lcnJvciAoImxvb3BiYWNrIGNvbW1hbmQgZmFpbHMuIik7CisgICAgfQogCisgIGdydWJfcmFp ZF9yZXNjYW4gKCk7CiAgIHN3aXRjaCAoY21kKQogICAgIHsKICAgICBjYXNlIENNRF9MUzoKQEAg LTMxMywyOSArMzY4LDMyIEBAIGZzdGVzdCAoY2hhciAqaW1hZ2VfcGF0aCwgaW50IGNtZCwgaW50 IG4sIGNoYXIgKiphcmdzKQogICAgIGNhc2UgQ01EX0hFWDoKICAgICAgIGNtZF9oZXggKGFyZ3Nb MF0pOwogICAgICAgYnJlYWs7CisgICAgY2FzZSBDTURfQ1JDOgorICAgICAgY21kX2NyYyAoYXJn c1swXSk7CisgICAgICBicmVhazsKICAgICBjYXNlIENNRF9CTE9DS0xJU1Q6CiAgICAgICBleGVj dXRlX2NvbW1hbmQgKCZjbWRfYmxvY2tsaXN0LCBuLCBhcmdzKTsKICAgICAgIGdydWJfcHJpbnRm ICgiXG4iKTsKICAgICB9CiAKLWZhaWw6Ci0KICAgYXJndlswXSA9ICItZCI7CiAKLSAgZXhlY3V0 ZV9jb21tYW5kICgmY21kX2xvb3BiYWNrLCAyLCBhcmd2KTsKKyAgZm9yIChpID0gMDsgaSA8IG51 bV9kaXNrczsgaSsrKQorICAgIHsKKyAgICAgIGdydWJfc3ByaW50ZiAobG9vcF9uYW1lLCAibG9v cCVkIiwgaSk7CisgICAgICBleGVjdXRlX2NvbW1hbmQgKCZjbWRfbG9vcGJhY2ssIDIsIGFyZ3Yp OworICAgIH0KIH0KIAogc3RhdGljIHN0cnVjdCBvcHRpb24gb3B0aW9uc1tdID0gewotICB7InBh cnQiLCByZXF1aXJlZF9hcmd1bWVudCwgMCwgJ3AnfSwKKyAgeyJyb290IiwgcmVxdWlyZWRfYXJn dW1lbnQsIDAsICdyJ30sCiAgIHsic2tpcCIsIHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAncyd9LAog ICB7Imxlbmd0aCIsIHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAnbid9LAorICB7ImRpc2tjb3VudCIs IHJlcXVpcmVkX2FyZ3VtZW50LCAwLCAnYyd9LAogICB7ImRlYnVnIiwgcmVxdWlyZWRfYXJndW1l bnQsIDAsICdkJ30sCi0gIHsicmF3Iiwgbm9fYXJndW1lbnQsIDAsICdyJ30sCi0gIHsibG9uZyIs IG5vX2FyZ3VtZW50LCAwLCAnbCd9LAogICB7ImhlbHAiLCBub19hcmd1bWVudCwgMCwgJ2gnfSwK ICAgeyJ2ZXJzaW9uIiwgbm9fYXJndW1lbnQsIDAsICdWJ30sCiAgIHsidmVyYm9zZSIsIG5vX2Fy Z3VtZW50LCAwLCAndid9LAotCiAgIHswLCAwLCAwLCAwfQogfTsKIApAQCAtMzUxLDE3ICs0MDks MTcgQEAgVXNhZ2U6IGdydWItZnN0ZXN0IFtPUFRJT05dLi4uIElNQUdFX1BBVEggQ09NTUFORFNc blwKIERlYnVnIHRvb2wgZm9yIGZpbGVzeXN0ZW0gZHJpdmVyLlxuXAogXG5Db21tYW5kczpcblwK ICAgbHMgUEFUSCAgICAgICAgICAgICAgICAgICBsaXN0IGZpbGVzIGluIFBBVEhcblwKLSAgY3Ag U1JDIERFU1QgICAgICAgICAgICAgICBjb3B5IGZpbGUgdG8gbG9jYWwgc3lzdGVtXG5cCi0gIGNt cCBTUkMgREVTVCAgICAgICAgICAgICAgY29tcGFyZSBmaWxlc1xuXAotICBoZXggRklMRSAgICAg ICAgICAgICAgICAgIGhleCBkdW1wIEZJTEVcblwKKyAgY3AgRklMRSBMT0NBTCAgICAgICAgICAg ICBjb3B5IEZJTEUgdG8gbG9jYWwgZmlsZSBMT0NBTFxuXAorICBjbXAgRklMRSBMT0NBTCAgICAg ICAgICAgIGNvbXBhcmUgRklMRSB3aXRoIGxvY2FsIGZpbGUgTE9DQUxcblwKKyAgaGV4IEZJTEUg ICAgICAgICAgICAgICAgICBIZXggZHVtcCBGSUxFXG5cCisgIGNyYyBGSUxFICAgICAgICAgICAg ICAgICAgR2V0IGNyYzMyIGNoZWNrc3VtIG9mIEZJTEVcblwKICAgYmxvY2tsaXN0IEZJTEUgICAg ICAgICAgICBkaXNwbGF5IGJsb2NrbGlzdCBvZiBGSUxFXG5cCiBcbk9wdGlvbnM6XG5cCi0gIC1w LCAtLXBhcnQ9TlVNICAgICAgICAgICAgc2VsZWN0IHBhcnRpdGlvbiBOVU1cblwKKyAgLXIsIC0t cm9vdD1ERVZJQ0VfTkFNRSAgICBzZXQgcm9vdCBkZXZpY2VcblwKICAgLXMsIC0tc2tpcD1OICAg ICAgICAgICAgICBza2lwIE4gYnl0ZXMgZnJvbSBvdXRwdXQgZmlsZVxuXAogICAtbiwgLS1sZW5n dGg9TiAgICAgICAgICAgIGhhbmRsZSBOIGJ5dGVzIGluIG91dHB1dCBmaWxlXG5cCisgIC1jLCAt LWRpc2tjb3VudD1OICAgICAgICAgTiBpbnB1dCBmaWxlc1xuXAogICAtZCwgLS1kZWJ1Zz1TICAg ICAgICAgICAgIFNldCBkZWJ1ZyBlbnZpcm9ubWVudCB2YXJpYWJsZVxuXAotICAtciwgLS1yYXcg ICAgICAgICAgICAgICAgIGRpc2FibGUgYXV0byBkZWNvbXByZXNzaW9uXG5cCi0gIC1sLCAtLWxv bmcgICAgICAgICAgICAgICAgc2hvdyBsb25nIGRpcmVjdG9yeSBsaXN0XG5cCiAgIC1oLCAtLWhl bHAgICAgICAgICAgICAgICAgZGlzcGxheSB0aGlzIG1lc3NhZ2UgYW5kIGV4aXRcblwKICAgLVYs IC0tdmVyc2lvbiAgICAgICAgICAgICBwcmludCB2ZXJzaW9uIGluZm9ybWF0aW9uIGFuZCBleGl0 XG5cCiAgIC12LCAtLXZlcmJvc2UgICAgICAgICAgICAgcHJpbnQgdmVyYm9zZSBtZXNzYWdlc1xu XApAQCAtMzc0LDQ1ICs0MzIsNjYgQEAgUmVwb3J0IGJ1Z3MgdG8gPCVzPi5cbiIsIFBBQ0tBR0Vf QlVHUkVQT1JUKTsKIGludAogbWFpbiAoaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIHsKLSAgY2hh ciAqaW1hZ2VfcGF0aCwgKmRlYnVnX3N0ciA9IDA7Ci0gIGludCBjbWQsIGlzX3JhdyA9IDAsIGlz X2xvbmcgPSAwOworICBjaGFyICpkZWJ1Z19zdHIgPSAwLCAqcm9vdCA9IDAsICpkZWZhdWx0X3Jv b3QsICphbGxvY19yb290OworICBpbnQgaSwgY21kLCBudW1fb3B0cywgaW1hZ2VfaW5kZXgsIG51 bV9kaXNrcyA9IDE7CiAKICAgcHJvZ25hbWUgPSAiZ3J1Yi1mc3Rlc3QiOwogCisgIC8qIEZpbmQg dGhlIGZpcnN0IG5vbiBvcHRpb24gZW50cnkuICAqLworICBmb3IgKG51bV9vcHRzID0gMTsgbnVt X29wdHMgPCBhcmdjOyBudW1fb3B0cysrKQorICAgIGlmIChhcmd2W251bV9vcHRzXVswXSA9PSAn LScpCisgICAgICB7CisgICAgICAgIGlmICgoYXJndltudW1fb3B0c11bMl0gPT0gMCkgJiYgKG51 bV9vcHRzIDwgYXJnYyAtIDEpICYmCisgICAgICAgICAgICAoKGFyZ3ZbbnVtX29wdHNdWzFdID09 ICdyJykgfHwKKyAgICAgICAgICAgICAoYXJndltudW1fb3B0c11bMV0gPT0gJ3MnKSB8fAorICAg ICAgICAgICAgIChhcmd2W251bV9vcHRzXVsxXSA9PSAnbicpIHx8CisgICAgICAgICAgICAgKGFy Z3ZbbnVtX29wdHNdWzFdID09ICdjJykgfHwKKyAgICAgICAgICAgICAoYXJndltudW1fb3B0c11b MV0gPT0gJ2QnKSkpCisgICAgICAgICAgICBudW1fb3B0cysrOworICAgICAgfQorICAgIGVsc2UK KyAgICAgIGJyZWFrOworCiAgIC8qIENoZWNrIGZvciBvcHRpb25zLiAgKi8KICAgd2hpbGUgKDEp CiAgICAgewotICAgICAgaW50IGMgPSBnZXRvcHRfbG9uZyAoYXJnYywgYXJndiwgInA6czpuOmQ6 cmxoVnYiLCBvcHRpb25zLCAwKTsKKyAgICAgIGludCBjID0gZ2V0b3B0X2xvbmcgKG51bV9vcHRz LCBhcmd2LCAicjpzOm46YzpkOmhWdiIsIG9wdGlvbnMsIDApOworICAgICAgY2hhciAqcDsKIAog ICAgICAgaWYgKGMgPT0gLTEpCiAJYnJlYWs7CiAgICAgICBlbHNlCiAJc3dpdGNoIChjKQogCSAg ewotCSAgY2FzZSAncCc6Ci0JICAgIHBhcnQgPSBvcHRhcmc7CisJICBjYXNlICdyJzoKKwkgICAg cm9vdCA9IG9wdGFyZzsKIAkgICAgYnJlYWs7CiAKIAkgIGNhc2UgJ3MnOgotCSAgICBza2lwID0g Z3J1Yl9zdHJ0b3VsIChvcHRhcmcsIE5VTEwsIDApOworCSAgICBza2lwID0gZ3J1Yl9zdHJ0b3Vs IChvcHRhcmcsICZwLCAwKTsKKyAgICAgICAgICAgIGlmICgqcCA9PSAncycpCisgICAgICAgICAg ICAgIHNraXAgPDw9IEdSVUJfRElTS19TRUNUT1JfQklUUzsKIAkgICAgYnJlYWs7CiAKIAkgIGNh c2UgJ24nOgotCSAgICBsZW5nID0gZ3J1Yl9zdHJ0b3VsIChvcHRhcmcsIE5VTEwsIDApOworCSAg ICBsZW5nID0gZ3J1Yl9zdHJ0b3VsIChvcHRhcmcsICZwLCAwKTsKKyAgICAgICAgICAgIGlmICgq cCA9PSAncycpCisgICAgICAgICAgICAgIGxlbmcgPDw9IEdSVUJfRElTS19TRUNUT1JfQklUUzsK IAkgICAgYnJlYWs7CiAKKyAgICAgICAgICBjYXNlICdjJzoKKyAgICAgICAgICAgIG51bV9kaXNr cyA9IGdydWJfc3RydG91bCAob3B0YXJnLCBOVUxMLCAwKTsKKyAgICAgICAgICAgIGlmIChudW1f ZGlza3MgPCAxKQorICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZnByaW50ZiAoc3Rk ZXJyLCAiSW52YWxpZCBkaXNrIGNvdW50LlxuIik7CisgICAgICAgICAgICAgICAgdXNhZ2UgKDEp OworICAgICAgICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgIGNhc2Ug J2QnOgogICAgICAgICAgICAgZGVidWdfc3RyID0gb3B0YXJnOwogICAgICAgICAgICAgYnJlYWs7 CiAKLQkgIGNhc2UgJ3InOgotCSAgICBpc19yYXcgPSAxOwotCSAgICBicmVhazsKLQotCSAgY2Fz ZSAnbCc6Ci0JICAgIGlzX2xvbmcgPSAxOwotCSAgICBicmVhazsKLQogCSAgY2FzZSAnaCc6CiAJ ICAgIHVzYWdlICgwKTsKIAkgICAgYnJlYWs7CkBAIC00MzIsNTIgKzUxMSw1MyBAQCBtYWluIChp bnQgYXJnYywgY2hhciAqYXJndltdKQogICAgIH0KIAogICAvKiBPYnRhaW4gUEFUSC4gICovCi0g IGlmIChvcHRpbmQgPj0gYXJnYykKKyAgaWYgKG9wdGluZCArIG51bV9kaXNrcyAtIDEgPj0gYXJn YykKICAgICB7Ci0gICAgICBmcHJpbnRmIChzdGRlcnIsICJObyBwYXRoIGlzIHNwZWNpZmllZC5c biIpOworICAgICAgZnByaW50ZiAoc3RkZXJyLCAiTm90IGVub3VnaCBwYXRobmFtZS5cbiIpOwog ICAgICAgdXNhZ2UgKDEpOwogICAgIH0KIAotICBpbWFnZV9wYXRoID0gYXJndltvcHRpbmRdOwot Ci0gIGlmICgqaW1hZ2VfcGF0aCAhPSAnLycpCi0gICAgewotICAgICAgZnByaW50ZiAoc3RkZXJy LCAiTXVzdCB1c2UgYWJzb2x1dGUgcGF0aC5cbiIpOwotICAgICAgdXNhZ2UgKDEpOwotICAgIH0K LQotICBvcHRpbmQrKzsKKyAgaW1hZ2VfaW5kZXggPSBvcHRpbmQ7CisgIGZvciAoaSA9IDA7IGkg PCBudW1fZGlza3M7IGkrKywgb3B0aW5kKyspCisgICAgaWYgKGFyZ3Zbb3B0aW5kXVswXSAhPSAn LycpCisgICAgICB7CisgICAgICAgIGZwcmludGYgKHN0ZGVyciwgIk11c3QgdXNlIGFic29sdXRl IHBhdGguXG4iKTsKKyAgICAgICAgdXNhZ2UgKDEpOworICAgICAgfQogCiAgIGNtZCA9IDA7CiAg IGlmIChvcHRpbmQgPCBhcmdjKQogICAgIHsKLSAgICAgIGludCBucGFybSA9IDE7CisgICAgICBp bnQgbnBhcm0gPSAwOwogCiAgICAgICBpZiAoIWdydWJfc3RyY21wIChhcmd2W29wdGluZF0sICJs cyIpKQotCXsKLQkgIGNtZCA9IENNRF9MUzsKLQkgIGlmIChpc19sb25nKQotCSAgICBhcmd2W29w dGluZC0tXSA9ICItbCI7Ci0JICBlbHNlCi0JICAgIG5wYXJtID0gMDsKLQl9CisgICAgICAgIHsK KyAgICAgICAgICBjbWQgPSBDTURfTFM7CisgICAgICAgIH0KICAgICAgIGVsc2UgaWYgKCFncnVi X3N0cmNtcCAoYXJndltvcHRpbmRdLCAiY3AiKSkKIAl7CiAJICBjbWQgPSBDTURfQ1A7Ci0JICBu cGFybSA9IDI7CisgICAgICAgICAgbnBhcm0gPSAyOwogCX0KICAgICAgIGVsc2UgaWYgKCFncnVi X3N0cmNtcCAoYXJndltvcHRpbmRdLCAiY21wIikpCiAJewogCSAgY21kID0gQ01EX0NNUDsKLQkg IG5wYXJtID0gMjsKKyAgICAgICAgICBucGFybSA9IDI7CiAJfQogICAgICAgZWxzZSBpZiAoIWdy dWJfc3RyY21wIChhcmd2W29wdGluZF0sICJoZXgiKSkKIAl7CiAJICBjbWQgPSBDTURfSEVYOwor ICAgICAgICAgIG5wYXJtID0gMTsKKwl9CisgICAgICBlbHNlIGlmICghZ3J1Yl9zdHJjbXAgKGFy Z3Zbb3B0aW5kXSwgImNyYyIpKQorCXsKKwkgIGNtZCA9IENNRF9DUkM7CisgICAgICAgICAgbnBh cm0gPSAxOwogCX0KICAgICAgIGVsc2UgaWYgKCFncnViX3N0cmNtcCAoYXJndltvcHRpbmRdLCAi YmxvY2tsaXN0IikpCiAJewogCSAgY21kID0gQ01EX0JMT0NLTElTVDsKKyAgICAgICAgICBucGFy bSA9IDE7CiAJfQogICAgICAgZWxzZQogCXsKQEAgLTUwMywxNCArNTgzLDMxIEBAIG1haW4gKGlu dCBhcmdjLCBjaGFyICphcmd2W10pCiAgIC8qIEluaXRpYWxpemUgYWxsIG1vZHVsZXMuICovCiAg IGdydWJfaW5pdF9hbGwgKCk7CiAKLSAgaWYgKGlzX3JhdykKLSAgICBncnViX2Vudl9zZXQgKCJm aWxlaG9vayIsICIwIik7Ci0KICAgaWYgKGRlYnVnX3N0cikKICAgICBncnViX2Vudl9zZXQgKCJk ZWJ1ZyIsIGRlYnVnX3N0cik7CiAKKyAgZGVmYXVsdF9yb290ID0gKG51bV9kaXNrcyA9PSAxKSA/ ICJsb29wMCIgOiAibWQwIjsKKyAgYWxsb2Nfcm9vdCA9IDA7CisgIGlmIChyb290KQorICAgIHsK KyAgICAgIGlmICgoKnJvb3QgPj0gJzAnKSAmJiAoKnJvb3QgPD0gJzknKSkKKyAgICAgICAgewor ICAgICAgICAgIGFsbG9jX3Jvb3QgPSB4bWFsbG9jIChzdHJsZW4gKGRlZmF1bHRfcm9vdCkgKyBz dHJsZW4gKHJvb3QpICsgMik7CisKKyAgICAgICAgICBzcHJpbnRmIChhbGxvY19yb290LCAiJXMs JXMiLCBkZWZhdWx0X3Jvb3QsIHJvb3QpOworICAgICAgICAgIHJvb3QgPSBhbGxvY19yb290Owor ICAgICAgICB9CisgICAgfQorICBlbHNlCisgICAgcm9vdCA9IGRlZmF1bHRfcm9vdDsKKworICBn cnViX2Vudl9zZXQgKCJyb290Iiwgcm9vdCk7CisKKyAgaWYgKGFsbG9jX3Jvb3QpCisgICAgZnJl ZSAoYWxsb2Nfcm9vdCk7CisKICAgLyogRG8gaXQuICAqLwotICBmc3Rlc3QgKGltYWdlX3BhdGgg KyAxLCBjbWQsIGFyZ2MgLSBvcHRpbmQsIGFyZ3YgKyBvcHRpbmQpOworICBmc3Rlc3QgKGFyZ3Yg KyBpbWFnZV9pbmRleCwgbnVtX2Rpc2tzLCBjbWQsIGFyZ2MgLSBvcHRpbmQsIGFyZ3YgKyBvcHRp bmQpOwogCiAgIC8qIEZyZWUgcmVzb3VyY2VzLiAgKi8KICAgZ3J1Yl9maW5pX2FsbCAoKTsKZGlm ZiAtLWdpdCBhL3V0aWwvZ3J1Yi1wcm9iZS5jIGIvdXRpbC9ncnViLXByb2JlLmMKaW5kZXggYTRm NTFlMi4uY2U5Y2JmZiAxMDA2NDQKLS0tIGEvdXRpbC9ncnViLXByb2JlLmMKKysrIGIvdXRpbC9n cnViLXByb2JlLmMKQEAgLTE0Miw3ICsxNDIsNyBAQCBwcm9iZSAoY29uc3QgY2hhciAqcGF0aCwg Y2hhciAqZGV2aWNlX25hbWUpCiAJICBhYnN0cmFjdGlvbl9uYW1lID0gImx2bSI7CiAJICBicmVh azsKIAljYXNlIEdSVUJfREVWX0FCU1RSQUNUSU9OX1JBSUQ6Ci0JICBhYnN0cmFjdGlvbl9uYW1l ID0gInJhaWQiOworCSAgYWJzdHJhY3Rpb25fbmFtZSA9ICJyYWlkIG1kcmFpZCI7CiAJICBicmVh azsKIAlkZWZhdWx0OgogCSAgZ3J1Yl91dGlsX2luZm8gKCJkaWQgbm90IGZpbmQgTFZNL1JBSUQg aW4gJXMsIGFzc3VtaW5nIHJhdyBkZXZpY2UiLCBkZXZpY2VfbmFtZSk7Cg== ------=_Part_57823_14159231.1219080047293--