From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1KKtEJ-0006oB-Is for mharc-grub-devel@gnu.org; Mon, 21 Jul 2008 07:06:59 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KKtEH-0006nl-FP for grub-devel@gnu.org; Mon, 21 Jul 2008 07:06:57 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KKtEF-0006mn-9A for grub-devel@gnu.org; Mon, 21 Jul 2008 07:06:56 -0400 Received: from [199.232.76.173] (port=56077 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KKtEF-0006mg-57 for grub-devel@gnu.org; Mon, 21 Jul 2008 07:06:55 -0400 Received: from nf-out-0910.google.com ([64.233.182.188]:50662) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KKtEE-00061Z-17 for grub-devel@gnu.org; Mon, 21 Jul 2008 07:06:54 -0400 Received: by nf-out-0910.google.com with SMTP id c7so5407400nfi.26 for ; Mon, 21 Jul 2008 04:06:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:subject:from:to:in-reply-to :references:content-type:date:message-id:mime-version:x-mailer; bh=eb3tPnFvZCIMW3DcbVvdtMOKS5E6SxruCh2LOTQ5bj4=; b=QgXGodoOGqlaBMfm6NySh/d0Eo33wjpB3J6t4VBwQC4I5qFokvnbH4OOMFK+8pi9Db N1O/qNtCxbHueL9nfJNTqBuI0zTfJN+INTOUKjaHo4C82qibFJPj6bNvttAyeFlCdBy/ uLZntI4huenilA661kaj6BW4FwD/ZgJ4W2ddo= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=subject:from:to:in-reply-to:references:content-type:date:message-id :mime-version:x-mailer; b=jYPsj0Wzne9S3xR0IhYedTzo69j4zWeSTJlg9AXJbXso0gsm+PYcNsEmNjMLdfIg7f hM3vcnBj+0j7dKR45mgdwRst7xC9WqdayIwu6DDBfzwhz+Ah43Zz3gc/uatOqnEZI202 lROfMJLowrNgYlxMc6mvRy7sc5vOCBHHW7jZA= Received: by 10.210.18.8 with SMTP id 8mr3159222ebr.80.1216638413161; Mon, 21 Jul 2008 04:06:53 -0700 (PDT) Received: from ?192.168.1.100? ( [213.37.137.93]) by mx.google.com with ESMTPS id b36sm7348373ika.5.2008.07.21.04.06.49 (version=SSLv3 cipher=RC4-MD5); Mon, 21 Jul 2008 04:06:51 -0700 (PDT) From: Javier =?ISO-8859-1?Q?Mart=EDn?= To: The development of GRUB 2 In-Reply-To: <1216601741.8334.122.camel@localhost> References: <1215137528.26019.58.camel@localhost> <87bq0sibu0.fsf@xs4all.nl> <1216601741.8334.122.camel@localhost> Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-VeRS3Tvqfn3LejB15Cfw" Date: Mon, 21 Jul 2008 13:07:00 +0200 Message-Id: <1216638420.8334.156.camel@localhost> Mime-Version: 1.0 X-Mailer: Evolution 2.22.3.1 X-detected-kernel: by monty-python.gnu.org: Linux 2.6 (newer, 2) Subject: Re: [PATCH] Drivemap module 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, 21 Jul 2008 11:06:57 -0000 --=-VeRS3Tvqfn3LejB15Cfw Content-Type: multipart/mixed; boundary="=-68VNDR+b7pjahVYcy1B4" --=-68VNDR+b7pjahVYcy1B4 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable El lun, 21-07-2008 a las 02:55 +0200, Javier Mart=C3=ADn escribi=C3=B3: > (...) > Phew! That was long, even after removing some parts. Well, this is the > new version of the patch. Cheers! As always, I'm so stupid that I left the patch out... Sigh. Here it is. Habbit --=-68VNDR+b7pjahVYcy1B4 Content-Disposition: attachment; filename=drivemap.patch.3 Content-Type: text/x-patch; name=drivemap.patch.3; charset=utf-8 Content-Transfer-Encoding: base64 SW5kZXg6IGNvbW1hbmRzL2kzODYvcGMvZHJpdmVtYXAuYw0KPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGNvbW1h bmRzL2kzODYvcGMvZHJpdmVtYXAuYwkocmV2aXNpw7NuOiAwKQ0KKysrIGNvbW1hbmRzL2kzODYv cGMvZHJpdmVtYXAuYwkocmV2aXNpw7NuOiAwKQ0KQEAgLTAsMCArMSwzOTMgQEANCisvKiBkcml2 ZW1hcC5jIC0gY29tbWFuZCB0byBtYW5hZ2UgdGhlIEJJT1MgZHJpdmUgbWFwcGluZ3MuICAqLw0K Ky8qDQorICogIEdSVUIgIC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXINCisgKiAgQ29weXJp Z2h0IChDKSAyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCisgKg0KKyAqICBH UlVCIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkNCisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkNCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg ZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3INCisgKiAgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4NCisgKg0KKyAqICBHUlVCIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorICogIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCisg KiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisgKg0KKyAq ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQ0KKyAqICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uDQorICovDQorDQorI2luY2x1ZGUgPGdydWIvbm9ybWFsLmg+ DQorI2luY2x1ZGUgPGdydWIvZGwuaD4NCisjaW5jbHVkZSA8Z3J1Yi9tbS5oPg0KKyNpbmNsdWRl IDxncnViL21pc2MuaD4NCisjaW5jbHVkZSA8Z3J1Yi9kaXNrLmg+DQorI2luY2x1ZGUgPGdydWIv bG9hZGVyLmg+DQorI2luY2x1ZGUgPGdydWIvbWFjaGluZS9sb2FkZXIuaD4NCisjaW5jbHVkZSA8 Z3J1Yi9tYWNoaW5lL2Jpb3NkaXNrLmg+DQorDQorI2RlZmluZSBNT0ROQU1FICJkcml2ZW1hcCIN CisNCitzdGF0aWMgY29uc3Qgc3RydWN0IGdydWJfYXJnX29wdGlvbiBvcHRpb25zW10gPSB7DQor ICB7Imxpc3QiLCAnbCcsIDAsICJzaG93IHRoZSBjdXJyZW50IG1hcHBpbmdzIiwgMCwgMH0sDQor ICB7InJlc2V0IiwgJ3InLCAwLCAicmVzZXQgYWxsIG1hcHBpbmdzIHRvIHRoZSBkZWZhdWx0IHZh bHVlcyIsIDAsIDB9LA0KKyAgezAsIDAsIDAsIDAsIDAsIDB9DQorfTsNCisNCisvKiBTeW1zL3Zh cnMvZnVuY3MgZXhwb3J0ZWQgZnJvbSBkcml2ZW1hcF9pbnQxM2guUyAtIHN0YXJ0LiAgKi8NCisN CisvKiByZWFsbW9kZSBmYXIgcHRyID0gMiAqIDE2YiAqLw0KK2V4dGVybiBncnViX3VpbnQzMl90 IGdydWJfZHJpdmVtYXBfaW50MTNfb2xkaGFuZGxlcjsNCisvKiBTaXplIG9mIHRoZSBzZWN0aW9u IHRvIGJlIGNvcGllZCAqLw0KK2V4dGVybiBncnViX3VpbnQxNl90IGdydWJfZHJpdmVtYXBfaW50 MTNfc2l6ZTsNCisNCisvKiBOT1QgYSB0eXBvIC0ganVzdCBuZWVkIHRoZSBzeW1ib2wncyBhZGRy ZXNzIHdpdGggJnN5bWJvbC4gICovDQordHlwZWRlZiB2b2lkIGdydWJfc3ltYm9sX3Q7DQorZXh0 ZXJuIGdydWJfc3ltYm9sX3QgZ3J1Yl9kcml2ZW1hcF9pbnQxM19oYW5kbGVyX2Jhc2U7DQorZXh0 ZXJuIGdydWJfc3ltYm9sX3QgZ3J1Yl9kcml2ZW1hcF9pbnQxM19tYXBzdGFydDsNCisNCit2b2lk IGdydWJfZHJpdmVtYXBfaW50MTNfaGFuZGxlciAodm9pZCk7DQorDQorLyogU3ltcy92YXJzL2Z1 bmNzIGV4cG9ydGVkIGZyb20gZHJpdmVtYXBfaW50MTNoLlMgLSBlbmQuICAqLw0KKw0KKw0KK3N0 YXRpYyBncnViX3ByZWJvb3RfaG9va2lkIGluc3RoYW5kbGVyX2hvb2sgPSAwOw0KKw0KK3R5cGVk ZWYgc3RydWN0IGRyaXZlbWFwX25vZGUNCit7DQorICBncnViX3VpbnQ4X3QgbmV3ZHJpdmU7DQor ICBncnViX3VpbnQ4X3QgcmVkaXJ0bzsNCisgIHN0cnVjdCBkcml2ZW1hcF9ub2RlICpuZXh0Ow0K K30gZHJpdmVtYXBfbm9kZV90Ow0KKw0KK3N0YXRpYyBkcml2ZW1hcF9ub2RlX3QgKmRyaXZlbWFw ID0gMDsNCitzdGF0aWMgZ3J1Yl9lcnJfdCBpbnN0YWxsX2ludDEzX2hhbmRsZXIgKHZvaWQpOw0K Kw0KKy8qIFB1dHMgdGhlIHNwZWNpZmllZCBtYXBwaW5nIGludG8gdGhlIHRhYmxlLCByZXBsYWNp bmcgYW4gZXhpc3RpbmcgbWFwcGluZw0KKyAgIGZvciBuZXdkcml2ZSBvciBhZGRpbmcgYSBuZXcg b25lIGlmIHJlcXVpcmVkLiAgKi8NCitzdGF0aWMgZ3J1Yl9lcnJfdA0KK2RyaXZlbWFwX3NldCAo Z3J1Yl91aW50OF90IG5ld2RyaXZlLCBncnViX3VpbnQ4X3QgcmVkaXJ0bykNCisNCit7DQorICBk cml2ZW1hcF9ub2RlX3QgKm1hcHBpbmcgPSAwOw0KKyAgZHJpdmVtYXBfbm9kZV90ICpzZWFyY2gg PSBkcml2ZW1hcDsNCisgIHdoaWxlIChzZWFyY2gpDQorICAgIHsNCisgICAgICBpZiAoc2VhcmNo LT5uZXdkcml2ZSA9PSBuZXdkcml2ZSkNCisgICAgICAgIHsNCisgICAgICAgICAgbWFwcGluZyA9 IHNlYXJjaDsNCisgICAgICAgICAgYnJlYWs7DQorICAgICAgICB9DQorICAgICAgc2VhcmNoID0g c2VhcmNoLT5uZXh0Ow0KKyAgICB9DQorDQorICANCisgIGlmIChtYXBwaW5nKSAvKiBUaGVyZSB3 YXMgYSBtYXBwaW5nIGFscmVhZHkgaW4gcGxhY2UsIG1vZGlmeSBpdC4gICovDQorICAgIG1hcHBp bmctPnJlZGlydG8gPSByZWRpcnRvOw0KKyAgZWxzZSAvKiBDcmVhdGUgYSBuZXcgbWFwcGluZyBh bmQgYWRkIGl0IHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0LiAgKi8NCisgICAgew0KKyAgICAgIG1h cHBpbmcgPSBncnViX21hbGxvYyAoc2l6ZW9mIChkcml2ZW1hcF9ub2RlX3QpKTsNCisgICAgICBp ZiAoIW1hcHBpbmcpDQorICAgICAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09G X01FTU9SWSwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAiY2Fubm90IGFsbG9jYXRlIG1h cCBlbnRyeSwgbm90IGVub3VnaCBtZW1vcnkiKTsNCisgICAgICBtYXBwaW5nLT5uZXdkcml2ZSA9 IG5ld2RyaXZlOw0KKyAgICAgIG1hcHBpbmctPnJlZGlydG8gPSByZWRpcnRvOw0KKyAgICAgIG1h cHBpbmctPm5leHQgPSBkcml2ZW1hcDsNCisgICAgICBkcml2ZW1hcCA9IG1hcHBpbmc7DQorICAg IH0NCisgIHJldHVybiBHUlVCX0VSUl9OT05FOw0KK30NCisNCisvKiBSZW1vdmVzIHRoZSBtYXBw aW5nIGZvciBuZXdkcml2ZSBmcm9tIHRoZSB0YWJsZS4gSWYgdGhlcmUgaXMgbm8gbWFwcGluZywN CisgICB0aGVuIHRoaXMgZnVuY3Rpb24gYmVoYXZlcyBsaWtlIGEgbm8tb3Agb24gdGhlIG1hcC4g ICovDQorc3RhdGljIHZvaWQNCitkcml2ZW1hcF9yZW1vdmUgKGdydWJfdWludDhfdCBuZXdkcml2 ZSkNCit7DQorICBkcml2ZW1hcF9ub2RlX3QgKm1hcHBpbmcgPSAwOw0KKyAgZHJpdmVtYXBfbm9k ZV90ICpzZWFyY2ggPSBkcml2ZW1hcDsNCisgIGRyaXZlbWFwX25vZGVfdCAqcHJldmlvdXMgPSAw Ow0KKyAgd2hpbGUgKHNlYXJjaCkNCisgICAgew0KKyAgICAgIGlmIChzZWFyY2gtPm5ld2RyaXZl ID09IG5ld2RyaXZlKQ0KKyAgICAgICAgew0KKyAgICAgICAgICBtYXBwaW5nID0gc2VhcmNoOw0K KyAgICAgICAgICBicmVhazsNCisgICAgICAgIH0NCisgICAgICBwcmV2aW91cyA9IHNlYXJjaDsN CisgICAgICBzZWFyY2ggPSBzZWFyY2gtPm5leHQ7DQorICAgIH0NCisgIGlmIChtYXBwaW5nKSAv KiBGb3VuZC4gICovDQorICAgIHsNCisgICAgICBpZiAocHJldmlvdXMpDQorICAgICAgICBwcmV2 aW91cy0+bmV4dCA9IG1hcHBpbmctPm5leHQ7DQorICAgICAgZWxzZSAvKiBFbnRyeSB3YXMgaGVh ZCBvZiBsaXN0LiAgKi8NCisgICAgICAgIGRyaXZlbWFwID0gbWFwcGluZy0+bmV4dDsNCisgICAg ICBncnViX2ZyZWUgKG1hcHBpbmcpOw0KKyAgICB9DQorfQ0KKw0KK3N0YXRpYyBncnViX2Vycl90 DQorcGFyc2VfYmlvc2Rpc2sgKGNvbnN0IGNoYXIgKm5hbWUsIGdydWJfdWludDhfdCAqZGlza251 bSkNCit7DQorICBpZiAoIW5hbWUpIHJldHVybiBHUlVCX0VSUl9CQURfQVJHVU1FTlQ7DQorICBp ZiAoKm5hbWUgPT0gJygnKQ0KKyAgICBuYW1lKys7IC8qIFNraXAgdGhlIGZpcnN0ICggaW4gKGhk MCkgLSBkaXNrX29wZW4gd2FudHMganVzdCB0aGUgbmFtZS4gICovDQorICBncnViX2Rpc2tfdCBk aXNrID0gZ3J1Yl9kaXNrX29wZW4gKG5hbWUpOw0KKyAgaWYgKCFkaXNrKQ0KKyAgICByZXR1cm4g R1JVQl9FUlJfVU5LTk9XTl9ERVZJQ0U7DQorICBlbHNlDQorICAgIHsNCisgICAgICBlbnVtIGdy dWJfZGlza19kZXZfaWQgaWQgPSBkaXNrLT5kZXYtPmlkOw0KKyAgICAgIGlmIChkaXNrbnVtKQ0K KyAgICAgICAgKmRpc2tudW0gPSBkaXNrLT5pZDsgICAvKiBPbmx5IHNvdW5kIGlmIGl0J3MgYSBi aW9zZGlzayAtIGNoZWNrIGxhdGVyLiAgKi8NCisgICAgICBncnViX2Rpc2tfY2xvc2UgKGRpc2sp Ow0KKyAgICAgIHJldHVybiAoR1JVQl9ESVNLX0RFVklDRV9CSU9TRElTS19JRCAhPSBpZCkgPw0K KyAgICAgICAgICBHUlVCX0VSUl9CQURfREVWSUNFIDogR1JVQl9FUlJfTk9ORTsNCisgICAgfQ0K K30NCisNCitzdGF0aWMgZ3J1Yl9lcnJfdA0KK3JldnBhcnNlX2Jpb3NkaXNrKGNvbnN0IGdydWJf dWludDhfdCBkbnVtLCBjb25zdCBjaGFyICoqb3V0cHV0KQ0KK3sNCisgIGdydWJfZXJyX3QgcmV0 ID0gR1JVQl9FUlJfVU5LTk9XTl9ERVZJQ0U7DQorICBhdXRvIGludCBmaW5kIChjb25zdCBjaGFy ICpuYW1lKTsNCisgIGludCBmaW5kIChjb25zdCBjaGFyICpuYW1lKQ0KKyAgew0KKyAgICBncnVi X2Rpc2tfdCBkaXNrID0gZ3J1Yl9kaXNrX29wZW4gKG5hbWUpOw0KKyAgICBpZiAoIWRpc2spDQor ICAgICAgcmV0dXJuIDA7DQorICAgIGVsc2UNCisgICAgICB7DQorICAgICAgICBpbnQgZm91bmQg PSAwOw0KKyAgICAgICAgaWYgKGRudW0gPT0gZGlzay0+aWQgJiYgR1JVQl9ESVNLX0RFVklDRV9C SU9TRElTS19JRCA9PSBkaXNrLT5kZXYtPmlkKQ0KKyAgICAgICAgICB7DQorICAgICAgICAgICAg Zm91bmQgPSAxOw0KKyAgICAgICAgICAgIGlmIChvdXRwdXQpDQorICAgICAgICAgICAgICAqb3V0 cHV0ID0gbmFtZTsNCisgICAgICAgICAgICByZXQgPSBHUlVCX0VSUl9OT05FOw0KKyAgICAgICAg ICB9DQorICAgICAgICBncnViX2Rpc2tfY2xvc2UgKGRpc2spOw0KKyAgICAgICAgcmV0dXJuIGZv dW5kOw0KKyAgICAgIH0NCisgIH0NCisNCisgIGdydWJfZGlza19kZXZfaXRlcmF0ZSAoZmluZCk7 DQorICByZXR1cm4gcmV0Ow0KK30NCisNCitzdGF0aWMgZ3J1Yl9lcnJfdA0KK3RyeXBhcnNlX2Rp c2tzdHJpbmcgKGNvbnN0IGNoYXIgKnN0ciwgZ3J1Yl91aW50OF90ICpvdXRwdXQpDQorew0KKyAg aWYgKCFzdHIpIHJldHVybiBHUlVCX0VSUl9CQURfQVJHVU1FTlQ7DQorICBpZiAoKnN0ciA9PSAn KCcpDQorICAgIHN0cisrOyAgLyogU2tpcCBvcGVuaW5nIHBhcmVuIGluIG9yZGVyIHRvIGFsbG93 IGJvdGggKGhkMCkgYW5kIGhkMC4gICovDQorICBpZiAoKHN0clswXSA9PSAnZicgfHwgc3RyWzBd ID09ICdoJykgJiYgc3RyWzFdID09ICdkJykNCisgICAgew0KKyAgICAgIGdydWJfdWludDhfdCBi aW9zX251bSA9IChzdHJbMF0gPT0gJ2gnKT8gMHg4MCA6IDB4MDA7DQorICAgICAgZ3J1Yl9lcnJu byA9IEdSVUJfRVJSX05PTkU7DQorICAgICAgdW5zaWduZWQgbG9uZyBkcml2ZW51bSA9IGdydWJf c3RydG91bCAoc3RyICsgMiwgMCwgMCk7DQorICAgICAgaWYgKGdydWJfZXJybm8gIT0gR1JVQl9F UlJfTk9ORSB8fCBkcml2ZW51bSA+IDEyNykNCisgICAgICAgIHJldHVybiBHUlVCX0VSUl9CQURf QVJHVU1FTlQ7IC8qIENvdWxkIG5vdCBjb252ZXJ0LCBvciBudW0gdG9vIGhpZ2ggZm9yIEJJT1Mu ICAqLw0KKyAgICAgIGVsc2UNCisgICAgICAgew0KKyAgICAgICAgICBiaW9zX251bSB8PSBkcml2 ZW51bTsNCisgICAgICAgICAgaWYgKG91dHB1dCkNCisgICAgICAgICAgICAqb3V0cHV0ID0gYmlv c19udW07DQorICAgICAgICAgIHJldHVybiBHUlVCX0VSUl9OT05FOw0KKyAgICAgICAgfQ0KKyAg ICB9DQorICBlbHNlIHJldHVybiBHUlVCX0VSUl9CQURfQVJHVU1FTlQ7DQorfQ0KKw0KK3N0YXRp YyBncnViX2Vycl90DQorZ3J1Yl9jbWRfZHJpdmVtYXAgKHN0cnVjdCBncnViX2FyZ19saXN0ICpz dGF0ZSwgaW50IGFyZ2MsIGNoYXIgKiphcmdzKQ0KK3sNCisgIGlmIChzdGF0ZVswXS5zZXQpIC8q IFNob3c6IGxpc3QgbWFwcGluZ3MuICAqLw0KKyAgICB7DQorICAgICAgaWYgKCFkcml2ZW1hcCkN CisgICAgICAgIGdydWJfcHJpbnRmICgiTm8gZHJpdmVzIGhhdmUgYmVlbiByZW1hcHBlZCIpOw0K KyAgICAgIGVsc2UNCisgICAgICAgIHsNCisgICAgICAgICAgZ3J1Yl9wcmludGYgKCJTaG93aW5n IG9ubHkgcmVtYXBwZWQgZHJpdmVzLiBEcml2ZXMgdGhhdCBoYXZlIGhhZCAiDQorICAgICAgICAg ICAgICAgICAgICAgICAidGhlaXIgc2xvdCBhc3NpZ25lZCB0byBhbm90aGVyIG9uZSBhbmQgaGF2 ZSBub3QgYmVlbiAiDQorICAgICAgICAgICAgICAgICAgICAgICAidGhlbXNlbHZlcyByZW1hcHBl ZCB3aWxsIGJlY29tZSBpbmFjY2Vzc2libGUgdGhyb3VnaCAiDQorICAgICAgICAgICAgICAgICAg ICAgICAidGhlIEJJT1Mgcm91dGluZXMgdG8gdGhlIGJvb3RlZCBPUy5cblxuIik7DQorICAgICAg ICAgIGdydWJfcHJpbnRmICgiTWFwcGVkXHRHUlVCXG4iKTsNCisgICAgICAgICAgZHJpdmVtYXBf bm9kZV90ICpjdXJub2RlID0gZHJpdmVtYXA7DQorICAgICAgICAgIHdoaWxlIChjdXJub2RlKQ0K KyAgICAgICAgICAgIHsNCisgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRuYW1lID0gMDsNCisg ICAgICAgICAgICAgIGdydWJfZXJyX3QgZXJyID0gcmV2cGFyc2VfYmlvc2Rpc2sgKGN1cm5vZGUt PnJlZGlydG8sICZkbmFtZSk7DQorICAgICAgICAgICAgICBpZiAoZXJyICE9IEdSVUJfRVJSX05P TkUpDQorICAgICAgICAgICAgICAgIHJldHVybiBncnViX2Vycm9yIChlcnIsICJpbnZhbGlkIG1h cHBpbmc6IG5vbi1leGlzdGVudCBkaXNrIg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAib3Igbm90IG1hbmFnZWQgYnkgdGhlIEJJT1MiKTsNCisgICAgICAgICAgICAg IGdydWJfcHJpbnRmKCIweCUwMnhcdCU0c1xuIiwgY3Vybm9kZS0+bmV3ZHJpdmUsIGRuYW1lKTsN CisgICAgICAgICAgICAgIGN1cm5vZGUgPSBjdXJub2RlLT5uZXh0Ow0KKyAgICAgICAgICAgIH0N CisgICAgICAgIH0NCisgICAgfQ0KKyAgZWxzZSBpZiAoc3RhdGVbMV0uc2V0KSAvKiBSZXNldDog anVzdCBkZWxldGUgYWxsIG1hcHBpbmdzLiAgKi8NCisgICAgew0KKyAgICAgIGlmIChkcml2ZW1h cCkNCisgICAgICAgIHsNCisgICAgICAgICAgZHJpdmVtYXBfbm9kZV90ICpjdXJub2RlID0gZHJp dmVtYXAsICpwcmV2bm9kZSA9IDA7DQorICAgICAgICAgIHdoaWxlIChjdXJub2RlKQ0KKyAgICAg ICAgICAgIHsNCisgICAgICAgICAgICAgIHByZXZub2RlID0gY3Vybm9kZTsNCisgICAgICAgICAg ICAgIGN1cm5vZGUgPSBjdXJub2RlLT5uZXh0Ow0KKyAgICAgICAgICAgICAgZ3J1Yl9mcmVlIChw cmV2bm9kZSk7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICBkcml2ZW1hcCA9IDA7DQorICAg ICAgICB9DQorICAgIH0NCisgIGVsc2UNCisgICAgew0KKyAgICAgIGlmIChhcmdjICE9IDIpDQor ICAgICAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0FSR1VNRU5ULCAidHdvIGFy Z3VtZW50cyByZXF1aXJlZCIpOw0KKyAgICAgIGdydWJfdWludDhfdCBtYXBmcm9tID0gMDsNCisg ICAgICBncnViX2Vycl90IGVyciA9IHBhcnNlX2Jpb3NkaXNrIChhcmdzWzBdLCAmbWFwZnJvbSk7 DQorICAgICAgaWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQ0KKyAgICAgICAgcmV0dXJuIGdydWJf ZXJyb3IgKGVyciwgImludmFsaWQgZGlzayBvciBub3QgbWFuYWdlZCBieSB0aGUgQklPUyIpOw0K Kw0KKyAgICAgIGdydWJfdWludDhfdCBtYXB0byA9IDB4RkY7DQorICAgICAgZXJyID0gdHJ5cGFy c2VfZGlza3N0cmluZyAoYXJnc1sxXSwgJm1hcHRvKTsNCisgICAgICBpZiAoZXJyICE9IEdSVUJf RVJSX05PTkUpIC8qIE5vdCBhIGRpc2sgc3RyaW5nLiBNYXliZSBhIHJhdyBudW0gdGhlbj8gICov DQorICAgICAgICB7ICAgIA0KKyAgICAgICAgICBncnViX2Vycm5vID0gR1JVQl9FUlJfTk9ORTsN CisgICAgICAgICAgdW5zaWduZWQgbG9uZyBudW0gPSBncnViX3N0cnRvdWwgKGFyZ3NbMV0sIDAs IDApOw0KKyAgICAgICAgICBpZiAoZ3J1Yl9lcnJubyAhPSBHUlVCX0VSUl9OT05FIHx8IG51bSA+ IDB4RkYpICAvKiBOb3QgYSByYXcgbnVtIG9yIHRvbyBoaWdoLiAgKi8NCisgICAgICAgICAgICBy ZXR1cm4gZ3J1Yl9lcnJvciAoZ3J1Yl9lcnJubywNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiVGFyZ2V0IHNwZWNpZmllciBtdXN0IGJlIG9mIHRoZSBmb3JtIChmZE4pIG9yICINCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKGhkTiksIHdpdGggMCA8PSBOIDwgMTI4OyBv ciBhIHBsYWluIGRlYy9oZXggIg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJudW1i ZXIgYmV0d2VlbiAwIGFuZCAyNTUiKTsNCisgICAgICAgICAgZWxzZSBtYXB0byA9IChncnViX3Vp bnQ4X3QpbnVtOw0KKyAgICAgICAgfQ0KKyAgICAgIA0KKyAgICAgIGlmIChtYXB0byA9PSBtYXBm cm9tKSAgLyogUmVzZXQgdG8gZGVmYXVsdC4gICovDQorICAgICAgICB7DQorICAgICAgICAgIGdy dWJfZHByaW50ZiAoTU9ETkFNRSwgIlJlbW92aW5nIHRoZSBtYXBwaW5nIGZvciAlcyAoJTAyeCki LCBhcmdzWzBdLCBtYXBmcm9tKTsNCisgICAgICAgICAgZHJpdmVtYXBfcmVtb3ZlIChtYXBmcm9t KTsNCisgICAgICAgIH0NCisgICAgICBlbHNlICAvKiBNYXAuICAqLw0KKyAgICAgICAgew0KKyAg ICAgICAgICBncnViX2RwcmludGYgKE1PRE5BTUUsICJNYXBwaW5nICVzICglMDJ4KSB0byAlMDJ4 XG4iLCBhcmdzWzBdLCBtYXBmcm9tLCBtYXB0byk7DQorICAgICAgICAgIHJldHVybiBkcml2ZW1h cF9zZXQgKChncnViX3VpbnQ4X3QpbWFwdG8sIG1hcGZyb20pOw0KKyAgICAgICAgfQ0KKyAgICB9 DQorDQorICByZXR1cm4gR1JVQl9FUlJfTk9ORTsNCit9DQorDQordHlwZWRlZiBzdHJ1Y3QgX19h dHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGludDEzbWFwX25vZGUNCit7DQorICBncnViX3VpbnQ4X3Qg ZGlza251bTsNCisgIGdydWJfdWludDhfdCBtYXB0bzsNCit9IGludDEzbWFwX25vZGVfdDsNCisN CisvKiBUaGUgbWluIGFtb3VudCBvZiBtZW0gdGhhdCBtdXN0IHJlbWFpbiBmcmVlIGFmdGVyIGlu c3RhbGxpbmcgdGhlIGhhbmRsZXIuDQorICAgMzIgS2lCIGlzIGp1c3QgYWJvdmUgMHg3QzAwLTB4 N0UwMCwgd2hlcmUgdGhlIGJvb3RzZWN0b3IgaXMgbG9hZGVkLiAgKi8NCisjZGVmaW5lIE1JTl9G UkVFX01FTV9LQiAzMg0KKyNkZWZpbmUgSU5UMTNIX09GRlNFVCh4KSAoICgoZ3J1Yl91aW50OF90 KikoeCkpIC0gKChncnViX3VpbnQ4X3QqKSZncnViX2RyaXZlbWFwX2ludDEzX2hhbmRsZXJfYmFz ZSkgKQ0KKyNkZWZpbmUgSU5UMTNIX1JFQkFTRSh4KSAoICh2b2lkKikgKCgoZ3J1Yl91aW50OF90 KiloYW5kbGVyX2Jhc2UpICsgKHgpKSApDQorI2RlZmluZSBJTlQxM0hfVE9ORVdBRERSKHgpIElO VDEzSF9SRUJBU0UoIElOVDEzSF9PRkZTRVQoIHggKSApDQorDQorLyogSW50MTNoIGhhbmRsZXIg aW5zdGFsbGVyIC0gcmVzZXJ2ZXMgY29udmVudGlvbmFsIG1lbW9yeSBmb3IgdGhlIGhhbmRsZXIs DQorICAgY29waWVzIGl0IG92ZXIgYW5kIHNldHMgdGhlIElWVCBlbnRyeSBmb3IgaW50MTNoLg0K KyAgIFRoaXMgY29kZSByZXN0cyBvbiB0aGUgYXNzdW1wdGlvbiB0aGF0IEdSVUIgZG9lcyBub3Qg YWN0aXZhdGUgYW55IGtpbmQgb2YNCisgICBtZW1vcnkgbWFwcGluZyBhcGFydCBmcm9tIGlkZW50 aXR5IHBhZ2luZywgc2luY2UgaXQgYWNjZXNzZXMgcmVhbG1vZGUNCisgICBzdHJ1Y3R1cmVzIGJ5 IHRoZWlyIGFic29sdXRlIGFkZHJlc3NlcywgbGlrZSB0aGUgSVZUIGF0IDAgb3IgdGhlIEJEQSBh dA0KKyAgIDB4NDAwOyBhbmQgdHJhbnNmb3JtcyBhIHBtb2RlIHBvaW50ZXIgaW50byBhIHJtb2Rl IHNlZzpvZmYgZmFyIHB0ci4gICovDQorc3RhdGljIGdydWJfZXJyX3QNCitpbnN0YWxsX2ludDEz X2hhbmRsZXIgKHZvaWQpDQorew0KKyAgZ3J1Yl9zaXplX3QgZW50cmllcyA9IDA7DQorICBkcml2 ZW1hcF9ub2RlX3QgKmN1cmVudHJ5ID0gZHJpdmVtYXA7DQorICB3aGlsZSAoY3VyZW50cnkpICAv KiBDb3VudCBlbnRyaWVzIHRvIHByZXBhcmUgYSBjb250aWd1b3VzIG1hcCBibG9jay4gICovDQor ICAgIHsNCisgICAgICBlbnRyaWVzKys7DQorICAgICAgY3VyZW50cnkgPSBjdXJlbnRyeS0+bmV4 dDsNCisgICAgfQ0KKyAgaWYgKDAgPT0gZW50cmllcykNCisgICAgew0KKyAgICAgIGdydWJfZHBy aW50ZiAoTU9ETkFNRSwgIk5vIGRyaXZlcyBtYXJrZWQgYXMgcmVtYXBwZWQsIGluc3RhbGxhdGlv biBvZiINCisgICAgICAgICAgICAgICAgICAiYW4gaW50MTNoIGhhbmRsZXIgaXMgbm90IHJlcXVp cmVkLiIpOw0KKyAgICAgIHJldHVybiBHUlVCX0VSUl9OT05FOyAgLyogTm8gbmVlZCB0byBpbnN0 YWxsIHRoZSBpbnQxM2ggaGFuZGxlci4gICovDQorICAgIH0NCisgIGVsc2UNCisgICAgew0KKyAg ICAgIGdydWJfZHByaW50ZiAoTU9ETkFNRSwgIkluc3RhbGxpbmcgaW50MTNoIGhhbmRsZXIuLi5c biIpOw0KKyAgICAgIGdydWJfdWludDMyX3QgKml2dHNsb3QgPSAoZ3J1Yl91aW50MzJfdCopMHgw MDAwMDA0YzsNCisgICAgICANCisgICAgICAvKiBTYXZlIHRoZSBwb2ludGVyIHRvIHRoZSBvbGQg aW50MTNoIGhhbmRsZXIuICAqLw0KKyAgICAgIGdydWJfZHJpdmVtYXBfaW50MTNfb2xkaGFuZGxl ciA9ICppdnRzbG90Ow0KKyAgICAgIGdydWJfZHByaW50ZiAoTU9ETkFNRSwgIk9sZCBpbnQxMyBo YW5kbGVyIGF0ICUwNHg6JTA0eFxuIiwNCisgICAgICAgICAgICAgICAgICAoZ3J1Yl9kcml2ZW1h cF9pbnQxM19vbGRoYW5kbGVyID4+IDE2KSAmIDB4MGZmZmYsDQorICAgICAgICAgICAgICAgICAg Z3J1Yl9kcml2ZW1hcF9pbnQxM19vbGRoYW5kbGVyICYgMHgwZmZmZik7DQorDQorICAgICAgLyog UmVzZXJ2ZSBhIHNlY3Rpb24gb2YgY29udmVudGlvbmFsIG1lbW9yeSBhcyAiQklPUyBtZW1vcnki IGZvciBoYW5kbGVyOg0KKyAgICAgICAqIEJEQSBvZmZzZXQgMHgxMyBjb250YWlucyB0aGUgdG9w IG9mIHN1Y2ggbWVtb3J5LiAgKi8NCisgICAgICBncnViX3VpbnQxNl90ICpicGFfZnJlZWtiID0g KGdydWJfdWludDE2X3QqKTB4MDAwMDA0MTM7DQorICAgICAgZ3J1Yl9kcHJpbnRmIChNT0ROQU1F LCAiVG9wIG9mIGNvbnZlbnRpb25hbCBtZW1vcnk6ICV1IEtpQlxuIiwgKmJwYV9mcmVla2IpOw0K KyAgICAgIGdydWJfc2l6ZV90IHRvdGFsX3NpemUgPSBncnViX2RyaXZlbWFwX2ludDEzX3NpemUN CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKyAoZW50cmllcyArIDEpICogc2l6ZW9mKGlu dDEzbWFwX25vZGVfdCk7DQorICAgICAgZ3J1Yl91aW50MTZfdCBwYXlsb2FkX3NpemVrYiA9ICh0 b3RhbF9zaXplID4+IDEwKSArDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KCgodG90YWxfc2l6ZSAlIDEwMjQpID09IDApID8gMCA6IDEpOw0KKyAgICAgIGlmICgoKmJwYV9m cmVla2IgLSBwYXlsb2FkX3NpemVrYikgPCBNSU5fRlJFRV9NRU1fS0IpDQorICAgICAgICByZXR1 cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfT1VUX09GX01FTU9SWSwgInJlZnVzaW5nIHRvIGluc3Rh bGwiDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgImludDEzIGhhbmRsZXIsIG5vdCBlbm91 Z2ggZnJlZSBtZW1vcnkgYWZ0ZXIiKTsNCisgICAgICBncnViX2RwcmludGYgKE1PRE5BTUUsICJQ YXlsb2FkIGlzICV1IGIgbG9uZywgcmVzZXJ2aW5nICV1IEtiXG4iLA0KKwkJCQkJdG90YWxfc2l6 ZSwgcGF5bG9hZF9zaXpla2IpOw0KKyAgICAgICpicGFfZnJlZWtiIC09IHBheWxvYWRfc2l6ZWti Ow0KKw0KKyAgICAgIC8qIENvcHkgaW50MTNoIGhhbmRsZXIgY2h1bmsgdG8gcmVzZXJ2ZWQgYXJl YS4gICovDQorICAgICAgZ3J1Yl91aW50OF90ICpoYW5kbGVyX2Jhc2UgPSAoZ3J1Yl91aW50OF90 KikoKmJwYV9mcmVla2IgPDwgMTApOw0KKyAgICAgIGdydWJfZHByaW50ZiAoTU9ETkFNRSwgIkNv cHlpbmcgaW50MTMgaGFuZGxlciB0bzogJXBcbiIsIGhhbmRsZXJfYmFzZSk7DQorICAgICAgZ3J1 Yl9tZW1jcHkgKGhhbmRsZXJfYmFzZSwgJmdydWJfZHJpdmVtYXBfaW50MTNfaGFuZGxlcl9iYXNl LA0KKyAgICAgICAgICAgICAgICAgICBncnViX2RyaXZlbWFwX2ludDEzX3NpemUpOw0KKw0KKyAg ICAgIC8qIENvcHkgdGhlIG1hcHBpbmdzIHRvIHRoZSByZXNlcnZlZCBhcmVhLiAgKi8NCisgICAg ICBjdXJlbnRyeSA9IGRyaXZlbWFwOw0KKyAgICAgIGdydWJfc2l6ZV90IGk7DQorICAgICAgaW50 MTNtYXBfbm9kZV90ICpoYW5kbGVyX21hcCA9IChpbnQxM21hcF9ub2RlX3QqKQ0KKyAgICAgICAg ICAgICAgICAgICAgICBJTlQxM0hfVE9ORVdBRERSICgmZ3J1Yl9kcml2ZW1hcF9pbnQxM19tYXBz dGFydCk7DQorICAgICAgZ3J1Yl9kcHJpbnRmIChNT0ROQU1FLCAiVGFyZ2V0IG1hcCBhdCAlcCwg Y29weWluZyBtYXBwaW5ncy4uLlxuIiwgaGFuZGxlcl9tYXApOw0KKyAgICAgIGZvciAoaSA9IDA7 IGkgPCBlbnRyaWVzICYmIGN1cmVudHJ5OyBpKyssIGN1cmVudHJ5ID0gY3VyZW50cnktPm5leHQp DQorICAgICAgICB7DQorICAgICAgICAgIGhhbmRsZXJfbWFwW2ldLmRpc2tudW0gPSBjdXJlbnRy eS0+bmV3ZHJpdmU7DQorICAgICAgICAgIGhhbmRsZXJfbWFwW2ldLm1hcHRvID0gY3VyZW50cnkt PnJlZGlydG87DQorICAgICAgICAgIGdydWJfZHByaW50ZiAoTU9ETkFNRSwgIlx0IyVkOiAweCUw MnggPC0gMHglMDJ4XG4iLCBpLA0KKwkJCQkJCWhhbmRsZXJfbWFwW2ldLmRpc2tudW0sIGhhbmRs ZXJfbWFwW2ldLm1hcHRvKTsNCisgICAgICAgIH0NCisgICAgICAvKiBTaWduYWwgZW5kLW9mLW1h cC4gICovDQorICAgICAgaGFuZGxlcl9tYXBbaV0uZGlza251bSA9IDA7DQorICAgICAgaGFuZGxl cl9tYXBbaV0ubWFwdG8gPSAwOw0KKyAgICAgIGdydWJfZHByaW50ZiAoTU9ETkFNRSwgIlx0IyVk OiAweCUwMnggPC0gMHglMDJ4IChlbmQpXG4iLCBpLA0KKwkJCQkJaGFuZGxlcl9tYXBbaV0uZGlz a251bSwgaGFuZGxlcl9tYXBbaV0ubWFwdG8pOw0KKw0KKyAgICAgIC8qIEluc3RhbGwgb3VyIGZ1 bmN0aW9uIGFzIHRoZSBpbnQxM2ggaGFuZGxlciBpbiB0aGUgSVZULiAgKi8NCisgICAgICBncnVi X3VpbnQzMl90IGl2dGVudHJ5ID0gKChncnViX3VpbnQzMl90KWhhbmRsZXJfYmFzZSkgPDwgMTI7 IC8qIFNlZ21lbnQgYWRkcmVzcy4gICovDQorICAgICAgaXZ0ZW50cnkgfD0gKGdydWJfdWludDE2 X3QpIElOVDEzSF9PRkZTRVQoZ3J1Yl9kcml2ZW1hcF9pbnQxM19oYW5kbGVyKTsNCisgICAgICBn cnViX2RwcmludGYgKE1PRE5BTUUsICJOZXcgaW50MTMgaGFuZGxlciBJVlQgcG9pbnRlcjogJTA0 eDolMDR4XG4iLA0KKyAgICAgICAgICAgICAgICAgIChpdnRlbnRyeSA+PiAxNikgJiAweDBmZmZm LCBpdnRlbnRyeSAmIDB4MGZmZmYpOw0KKyAgICAgICppdnRzbG90ID0gaXZ0ZW50cnk7DQorICAg ICAgDQorICAgICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7DQorICAgIH0NCit9DQorDQorR1JVQl9N T0RfSU5JVCAoZHJpdmVtYXApDQorew0KKyAgKHZvaWQpIG1vZDsJCQkvKiBTdG9wIHdhcm5pbmcu ICAqLw0KKyAgZ3J1Yl9yZWdpc3Rlcl9jb21tYW5kIChNT0ROQU1FLCBncnViX2NtZF9kcml2ZW1h cCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgR1JVQl9DT01NQU5EX0ZMQUdfQk9USCwNCisJ CQkgICAgICAgICAgICAgICAgICAgTU9ETkFNRSAiIC1zIHwgLXIgfCAoaGRYKSBuZXdkcml2ZW51 bSIsDQorICAgICAgICAgICAgICAgICAgICAgICAgICJNYW5hZ2UgdGhlIEJJT1MgZHJpdmUgbWFw cGluZ3MiLCBvcHRpb25zKTsNCisgIGluc3RoYW5kbGVyX2hvb2sgPSBncnViX2xvYWRlcl9yZWdp c3Rlcl9wcmVib290ICgmaW5zdGFsbF9pbnQxM19oYW5kbGVyLCAxKTsNCit9DQorDQorR1JVQl9N T0RfRklOSSAoZHJpdmVtYXApDQorew0KKyAgZ3J1Yl9sb2FkZXJfdW5yZWdpc3Rlcl9wcmVib290 IChpbnN0aGFuZGxlcl9ob29rKTsNCisgIGluc3RoYW5kbGVyX2hvb2sgPSAwOw0KKyAgZ3J1Yl91 bnJlZ2lzdGVyX2NvbW1hbmQgKE1PRE5BTUUpOw0KK30NCkluZGV4OiBjb21tYW5kcy9pMzg2L3Bj L2RyaXZlbWFwX2ludDEzaC5TDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gY29tbWFuZHMvaTM4Ni9wYy9kcml2 ZW1hcF9pbnQxM2guUwkocmV2aXNpw7NuOiAwKQ0KKysrIGNvbW1hbmRzL2kzODYvcGMvZHJpdmVt YXBfaW50MTNoLlMJKHJldmlzacOzbjogMCkNCkBAIC0wLDAgKzEsMTE4IEBADQorLyoNCisgKiAg R1JVQiAgLS0gIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlcg0KKyAqICBDb3B5cmlnaHQgKEMpIDE5 OTksMjAwMCwyMDAxLDIwMDIsMjAwMywyMDA1LDIwMDYsMjAwNywyMDA4IEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbiwgSW5jLg0KKyAqDQorICogIEdSVUIgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNh biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQ0KKyAqICBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KKyAqICB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNl bnNlLCBvcg0KKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLg0KKyAqDQor ICogIEdSVUIgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1 bCwNCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YNCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0KKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLg0KKyAqDQorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh IGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlDQorICogIGFsb25nIHdpdGgg R1JVQi4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4NCisgKi8N CisNCisNCisvKg0KKyAqIE5vdGU6IFRoZXNlIGZ1bmN0aW9ucyBkZWZpbmVkIGluIHRoaXMgZmls ZSBtYXkgYmUgY2FsbGVkIGZyb20gQy4NCisgKiAgICAgICBCZSBjYXJlZnVsIG9mIHRoYXQgeW91 IG11c3Qgbm90IG1vZGlmeSBzb21lIHJlZ2lzdGVycy4gUXVvdGUNCisgKiAgICAgICBmcm9tIGdj Yy0yLjk1LjIvZ2NjL2NvbmZpZy9pMzg2L2kzODYuaDoNCisNCisgICAxIGZvciByZWdpc3RlcnMg bm90IGF2YWlsYWJsZSBhY3Jvc3MgZnVuY3Rpb24gY2FsbHMuDQorICAgVGhlc2UgbXVzdCBpbmNs dWRlIHRoZSBGSVhFRF9SRUdJU1RFUlMgYW5kIGFsc28gYW55DQorICAgcmVnaXN0ZXJzIHRoYXQg Y2FuIGJlIHVzZWQgd2l0aG91dCBiZWluZyBzYXZlZC4NCisgICBUaGUgbGF0dGVyIG11c3QgaW5j bHVkZSB0aGUgcmVnaXN0ZXJzIHdoZXJlIHZhbHVlcyBhcmUgcmV0dXJuZWQNCisgICBhbmQgdGhl IHJlZ2lzdGVyIHdoZXJlIHN0cnVjdHVyZS12YWx1ZSBhZGRyZXNzZXMgYXJlIHBhc3NlZC4NCisg ICBBc2lkZSBmcm9tIHRoYXQsIHlvdSBjYW4gaW5jbHVkZSBhcyBtYW55IG90aGVyIHJlZ2lzdGVy cyBhcyB5b3UgbGlrZS4NCisNCisgIGF4LGR4LGN4LGJ4LHNpLGRpLGJwLHNwLHN0LHN0MSxzdDIs c3QzLHN0NCxzdDUsc3Q2LHN0NyxhcmcNCit7ICAxLCAxLCAxLCAwLCAwLCAwLCAwLCAxLCAxLCAg MSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEgfQ0KKyAqLw0KKw0KKy8qDQorICogTm90ZTog R1JVQiBpcyBjb21waWxlZCB3aXRoIHRoZSBvcHRpb25zIC1tcnRkIGFuZCAtbXJlZ3Bhcm09My4N CisgKiAgICAgICBTbyB0aGUgZmlyc3QgdGhyZWUgYXJndW1lbnRzIGFyZSBwYXNzZWQgaW4gJWVh eCwgJWVkeCwgYW5kICVlY3gsDQorICogICAgICAgcmVzcGVjdGl2ZWx5LCBhbmQgaWYgYSBmdW5j dGlvbiBoYXMgYSBmaXhlZCBudW1iZXIgb2YgYXJndW1lbnRzDQorICogICAgICAgYW5kIHRoZSBu dW1iZXIgaWYgZ3JlYXRlciB0aGFuIHRocmVlLCB0aGUgZnVuY3Rpb24gbXVzdCByZXR1cm4NCisg KiAgICAgICB3aXRoICJyZXQgJE4iIHdoZXJlIE4gaXMgKCh0aGUgbnVtYmVyIG9mIGFyZ3VtZW50 cykgLSAzKSAqIDQuDQorICovDQorDQorI2luY2x1ZGUgPGdydWIvc3ltYm9sLmg+DQorDQorI2Rl ZmluZSBHUlVCX0RSSVZFTUFQX0lOVDEzSF9PRkZTRVQoeCkgKCh4KSAtIGdydWJfZHJpdmVtYXBf aW50MTNfaGFuZGxlcl9iYXNlKQ0KKw0KKy8qIENvcHkgc3RhcnRzIGhlcmUuIFdoZW4gZGVwbG95 ZWQsIHRoaXMgbGFiZWwgbXVzdCBiZSBzZWdtZW50LWFsaWduZWQgKi8NCitWQVJJQUJMRShncnVi X2RyaXZlbWFwX2ludDEzX2hhbmRsZXJfYmFzZSkNCisNCitWQVJJQUJMRShncnViX2RyaXZlbWFw X2ludDEzX29sZGhhbmRsZXIpDQorICAud29yZCAweGRlYWQsIDB4YmVlZg0KKy8qIERyaXZlbWFw IG1vZHVsZSAtIElOVCAxM2ggaGFuZGxlciAtIEJJT1MgSEQgbWFwICovDQorLyogV2UgbmVlZCB0 byB1c2UgcmVsYXRpdmUgYWRkcmVzc2luZywgYW5kIHdpdGggQ1MgdG8gdG9wIGl0IGFsbCwgc2lu Y2Ugd2UNCisgKiBtdXN0IG1ha2UgYXMgZmV3IGNoYW5nZXMgdG8gdGhlIHJlZ2lzdGVycyBhcyBw b3NzaWJsZS4gUGl0eSB3ZSdyZSBub3Qgb24NCisgKiBhbWQ2NDogcklQLXJlbGF0aXZlIGFkZHJl c3Npbmcgd291bGQgbWFrZSBsaWZlIGVhc2llciBoZXJlLg0KKyAqLw0KKy5jb2RlMTYNCitGVU5D VElPTihncnViX2RyaXZlbWFwX2ludDEzX2hhbmRsZXIpDQorICBwdXNoICVicA0KKyAgbW92ICVz cCwgJWJwDQorICBwdXNoICVheCAgLyogV2UnbGwgbmVlZCBpdCBsYXRlciB0byBkZXRlcm1pbmUg dGhlIHVzZWQgQklPUyBmdW5jdGlvbiAqLw0KKw0KKyAgLyogTWFwIHRoZSBkcml2ZSBudW1iZXIg KGFsd2F5cyBpbiBETD8pICovDQorICBwdXNoICVheA0KKyAgcHVzaCAlYngNCisgIHB1c2ggJXNp DQorICBtb3YgJEdSVUJfRFJJVkVNQVBfSU5UMTNIX09GRlNFVChncnViX2RyaXZlbWFwX2ludDEz X21hcHN0YXJ0KSwgJWJ4DQorICB4b3IgJXNpLCAlc2kNCisxOm1vdncgJWNzOiglYngsJXNpKSwg JWF4DQorICBjbXAgJWFoLCAlYWwNCisgIGp6IDNmIC8qIERSVj1EU1QgPT4gbWFwIGVuZCAtIGRy aXZlIG5vdCByZW1hcHBlZCwgbGVhdmUgREwgYXMtaXMgKi8NCisgIGNtcCAlZGwsICVhbA0KKyAg anogMmYgLyogRm91bmQgLSBkcml2ZSByZW1hcHBlZCwgbW9kaWZ5IERMICovDQorICBhZGQgJDIs ICVzaQ0KKyAgam1wIDFiIC8qIE5vdCBmb3VuZCwgYnV0IG1vcmUgcmVtYWluaW5nLCBsb29wICAq Lw0KKzI6bW92ICVhaCwgJWRsDQorMzpwb3AgJXNpDQorICBwb3AgJWJ4DQorICB4Y2hndyAlYXgs IC00KCVicCkgLyogUmVjb3ZlciB0aGUgb2xkIEFYIGFuZCBzYXZlIHRoZSBtYXAgZW50cnkgZm9y IGxhdGVyICovDQorICANCisgIHB1c2ggJWJwDQorICAvKiBTaW11bGF0ZSBpbnRlcnJ1cHQgY2Fs bDogcHVzaCBmbGFncyBhbmQgZG8gYSBmYXIgY2FsbCBpbiBvcmRlciB0byBzZXQNCisgICAqIHRo ZSBzdGFjayB0aGUgd2F5IHRoZSBvbGQgaGFuZGxlciBleHBlY3RzIGl0IHNvIHRoYXQgaXRzIGly ZXQgd29ya3MgKi8NCisgIHB1c2ggNiglYnApDQorICBtb3Z3ICglYnApLCAlYnAgIC8qIFJlc3Rv cmUgdGhlIGNhbGxlciBCUCAoaXMgdGhpcyBuZWVkZWQgYW5kL29yIHNlbnNpYmxlPykgKi8NCisg IGxjYWxsIColY3M6R1JVQl9EUklWRU1BUF9JTlQxM0hfT0ZGU0VUKGdydWJfZHJpdmVtYXBfaW50 MTNfb2xkaGFuZGxlcikNCisgIHBvcCAlYnAgLyogVGhlIHB1c2hlZCBmbGFncyB3ZXJlIHJlbW92 ZWQgYnkgaXJldCAqLw0KKyAgLyogU2V0IHRoZSBzYXZlZCBmbGFncyB0byB3aGF0IHRoZSBpbnQx M2ggaGFuZGxlciByZXR1cm5lZCAqLw0KKyAgcHVzaCAlYXgNCisgIHB1c2hmDQorICBwb3AgJWF4 DQorICBtb3Z3ICVheCwgNiglYnApDQorICBwb3AgJWF4DQorDQorICAvKiBSZXZlcnNlIG1hcCBh bnkgcmV0dXJuZWQgZHJpdmUgbnVtYmVyIGlmIHRoZSBkYXRhIHJldHVybmVkIGluY2x1ZGVzIGl0 Lg0KKyAgICogVGhlIG9ubHkgZnVuYyB0aGF0IGRvZXMgdGhpcyBzZWVtcyB0byBiZSBvcmlnQUgg PSAweDA4LCBidXQgbWFueSBCSU9TDQorICAgKiByZWZzIHNheSByZXRETCA9ICMgb2YgZHJpdmVz IGNvbm5lY3RlZC4gSG93ZXZlciwgdGhlIEdSVUIgTGVnYWN5IGNvZGUNCisgICAqIHRyZWF0cyB0 aGlzIGFzIHRoZSBfZHJpdmUgbnVtYmVyXyBhbmQgInVuZG9lcyIgdGhlIHJlbWFwcGluZy4gVGh1 cywNCisgICAqIHRoaXMgc2VjdGlvbiBoYXMgYmVlbiBkaXNhYmxlZCBmb3IgdGVzdGluZyBpZiBp dCdzIHJlcXVpcmVkICovDQorIyAgY21wYiAkMHgwOCwgLTEoJWJwKSAvKiBDYWxsZXIncyBBSCAq Lw0KKyMgIGpuZSA0Zg0KKyMgIHhjaGd3ICVheCwgLTQoJWJwKSAvKiBNYXAgZW50cnkgdXNlZCAq Lw0KKyMgIGNtcCAlYWgsICVhbCAgLyogRFJWPURTVCA9PiBkcml2ZSBub3QgcmVtYXBwZWQgKi8N CisjICBqZSA0Zg0KKyMgIG1vdiAlYWgsICVkbCAgLyogVW5kbyByZW1hcCAqLw0KKw0KKzQ6bW92 ICVicCwgJXNwDQorICBwb3AgJWJwDQorICBpcmV0DQorLyogVGhpcyBsYWJlbCBNVVNUIGJlIGF0 IHRoZSBlbmQgb2YgdGhlIGNvcGllZCBibG9jaywgc2luY2UgdGhlIGluc3RhbGxlciBjb2RlDQor ICogcmVzZXJ2ZXMgYWRkaXRpb25hbCBzcGFjZSBmb3IgbWFwcGluZ3MgYXQgcnVudGltZSBhbmQg Y29waWVzIHRoZW0gb3ZlciBpdCAqLw0KKy5hbGlnbiAyDQorVkFSSUFCTEUoZ3J1Yl9kcml2ZW1h cF9pbnQxM19tYXBzdGFydCkNCisvKiBDb3B5IHN0b3BzIGhlcmUgKi8NCisuY29kZTMyDQorVkFS SUFCTEUoZ3J1Yl9kcml2ZW1hcF9pbnQxM19zaXplKQ0KKyAgLndvcmQgR1JVQl9EUklWRU1BUF9J TlQxM0hfT0ZGU0VUKGdydWJfZHJpdmVtYXBfaW50MTNfc2l6ZSkNCkluZGV4OiBjb25mL2kzODYt cGMucm1rDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09DQotLS0gY29uZi9pMzg2LXBjLnJtawkocmV2aXNpw7NuOiAxNzIz KQ0KKysrIGNvbmYvaTM4Ni1wYy5ybWsJKGNvcGlhIGRlIHRyYWJham8pDQpAQCAtMTU4LDcgKzE1 OCw3IEBADQogCXZiZS5tb2QgdmJldGVzdC5tb2QgdmJlaW5mby5tb2QgdmlkZW8ubW9kIGdmeHRl cm0ubW9kIFwNCiAJdmlkZW90ZXN0Lm1vZCBwbGF5Lm1vZCBiaXRtYXAubW9kIHRnYS5tb2QgY3B1 aWQubW9kIHNlcmlhbC5tb2QJXA0KIAlhdGEubW9kIHZnYS5tb2QgbWVtZGlzay5tb2QganBlZy5t b2QgcG5nLm1vZCBwY2kubW9kIGxzcGNpLm1vZCBcDQotCWFvdXQubW9kIF9ic2QubW9kIGJzZC5t b2QNCisJYW91dC5tb2QgX2JzZC5tb2QgYnNkLm1vZCBkcml2ZW1hcC5tb2QNCiANCiAjIEZvciBi aW9zZGlzay5tb2QuDQogYmlvc2Rpc2tfbW9kX1NPVVJDRVMgPSBkaXNrL2kzODYvcGMvYmlvc2Rp c2suYw0KQEAgLTMyNSw0ICszMjUsMTEgQEANCiBic2RfbW9kX0NGTEFHUyA9ICQoQ09NTU9OX0NG TEFHUykNCiBic2RfbW9kX0xERkxBR1MgPSAkKENPTU1PTl9MREZMQUdTKQ0KIA0KKyMgRm9yIGRy aXZlbWFwLm1vZC4NCitkcml2ZW1hcF9tb2RfU09VUkNFUyA9IGNvbW1hbmRzL2kzODYvcGMvZHJp dmVtYXAuYyBcDQorICAgICAgICAgICAgICAgICAgICAgICBjb21tYW5kcy9pMzg2L3BjL2RyaXZl bWFwX2ludDEzaC5TDQorZHJpdmVtYXBfbW9kX0FTRkxBR1MgPSAkKENPTU1PTl9BU0ZMQUdTKQ0K K2RyaXZlbWFwX21vZF9DRkxBR1MgPSAkKENPTU1PTl9DRkxBR1MpDQorZHJpdmVtYXBfbW9kX0xE RkxBR1MgPSAkKENPTU1PTl9MREZMQUdTKQ0KKw0KIGluY2x1ZGUgJChzcmNkaXIpL2NvbmYvY29t bW9uLm1rDQpJbmRleDogaW5jbHVkZS9ncnViL2xvYWRlci5oDQo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gaW5j bHVkZS9ncnViL2xvYWRlci5oCShyZXZpc2nDs246IDE3MjMpDQorKysgaW5jbHVkZS9ncnViL2xv YWRlci5oCShjb3BpYSBkZSB0cmFiYWpvKQ0KQEAgLTM3LDYgKzM3LDE5IEBADQogLyogVW5zZXQg Y3VycmVudCBsb2FkZXIsIGlmIGFueS4gICovDQogdm9pZCBFWFBPUlRfRlVOQyhncnViX2xvYWRl cl91bnNldCkgKHZvaWQpOw0KIA0KK3R5cGVkZWYgc3RydWN0IGhvb2tsaXN0X25vZGUgKmdydWJf cHJlYm9vdF9ob29raWQ7DQorDQorLyogUmVnaXN0ZXIgYSBmdW5jdGlvbiB0byBiZSBjYWxsZWQg YmVmb3JlIHRoZSBib290IGhvb2suIFJldHVybnMgYW4gaWQgdGhhdA0KKyAgIGNhbiBiZSBsYXRl ciB1c2VkIHRvIHVucmVnaXN0ZXIgdGhlIHByZWJvb3QgKGkuZS4gaWYgbW9kdWxlIHVubG9hZGVk KS4gSWYNCisgICBhYm9ydF9vbl9lcnJvciBpcyBzZXQsIHRoZSBib290IHNlcXVlbmNlIHdpbGwg YWJvcnQgaWYgYW55IG9mIHRoZSByZWdpc3RlcmVkDQorICAgZnVuY3Rpb25zIHJldHVybiBhbnl0 aGluZyBlbHNlIHRoYW4gR1JVQl9FUlJfTk9ORSAqLw0KK2dydWJfcHJlYm9vdF9ob29raWQgRVhQ T1JUX0ZVTkMoZ3J1Yl9sb2FkZXJfcmVnaXN0ZXJfcHJlYm9vdCkNCisgICAgICAgICAgIChncnVi X2Vycl90ICgqaG9vaykgKHZvaWQpLCBpbnQgYWJvcnRfb25fZXJyb3IpOw0KKw0KKy8qIFVucmVn aXN0ZXIgYSBwcmVib290IGhvb2sgYnkgdGhlIGlkIHJldHVybmVkIGJ5IGxvYWRlcl9yZWdpc3Rl cl9wcmVib290Lg0KKyAgIFRoaXMgZnVuY3Rpb25zIGJlY29tZXMgYSBuby1vcCBpZiBubyBzdWNo IGZ1bmN0aW9uIGlzIHJlZ2lzdGVyZWQgKi8NCit2b2lkIEVYUE9SVF9GVU5DKGdydWJfbG9hZGVy X3VucmVnaXN0ZXJfcHJlYm9vdCkgKGdydWJfcHJlYm9vdF9ob29raWQgaWQpOw0KKw0KIC8qIENh bGwgdGhlIGJvb3QgaG9vayBpbiBjdXJyZW50IGxvYWRlci4gVGhpcyBtYXkgb3IgbWF5IG5vdCBy ZXR1cm4sDQogICAgZGVwZW5kaW5nIG9uIHRoZSBzZXR0aW5nIGJ5IGdydWJfbG9hZGVyX3NldC4g ICovDQogZ3J1Yl9lcnJfdCBFWFBPUlRfRlVOQyhncnViX2xvYWRlcl9ib290KSAodm9pZCk7DQpJ bmRleDoga2Vybi9sb2FkZXIuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGtlcm4vbG9hZGVyLmMJKHJldmlz acOzbjogMTcyMykNCisrKyBrZXJuL2xvYWRlci5jCShjb3BpYSBkZSB0cmFiYWpvKQ0KQEAgLTYx LDExICs2MSw4MCBAQA0KICAgZ3J1Yl9sb2FkZXJfbG9hZGVkID0gMDsNCiB9DQogDQorc3RydWN0 IGhvb2tsaXN0X25vZGUNCit7DQorICBncnViX2Vycl90ICgqaG9vaykgKHZvaWQpOw0KKyAgaW50 IGFib3J0X29uX2Vycm9yOw0KKyAgc3RydWN0IGhvb2tsaXN0X25vZGUgKm5leHQ7DQorfTsNCisN CitzdGF0aWMgc3RydWN0IGhvb2tsaXN0X25vZGUgKnByZWJvb3RfaG9va3MgPSAwOw0KKw0KK2dy dWJfcHJlYm9vdF9ob29raWQNCitncnViX2xvYWRlcl9yZWdpc3Rlcl9wcmVib290KGdydWJfZXJy X3QgKCpob29rKSAodm9pZCksIGludCBhYm9ydF9vbl9lcnJvcikNCit7DQorICBpZiAoIWhvb2sp DQorICAgIHsNCisgICAgICBncnViX2Vycm9yIChHUlVCX0VSUl9CQURfQVJHVU1FTlQsICJwcmVi b290IGhvb2sgbXVzdCBub3QgYmUgTlVMTCIpOw0KKyAgICAgIHJldHVybiAwOw0KKyAgICB9DQor ICBncnViX3ByZWJvb3RfaG9va2lkIG5ld2VudHJ5ID0gZ3J1Yl9tYWxsb2MgKHNpemVvZiAoc3Ry dWN0IGhvb2tsaXN0X25vZGUpKTsNCisgIGlmICghbmV3ZW50cnkpDQorICAgIHsNCisgICAgICBn cnViX2Vycm9yIChHUlVCX0VSUl9PVVRfT0ZfTUVNT1JZLCAiY2Fubm90IGFsbG9jIGEgaG9va2lu Zm8gc3RydWN0dXJlIik7DQorICAgICAgcmV0dXJuIDA7DQorICAgIH0NCisgIGVsc2UNCisgICAg ew0KKyAgICAgIG5ld2VudHJ5LT5ob29rID0gaG9vazsNCisgICAgICBuZXdlbnRyeS0+YWJvcnRf b25fZXJyb3IgPSBhYm9ydF9vbl9lcnJvcjsNCisgICAgICBuZXdlbnRyeS0+bmV4dCA9IHByZWJv b3RfaG9va3M7DQorICAgICAgcHJlYm9vdF9ob29rcyA9IG5ld2VudHJ5Ow0KKyAgICAgIHJldHVy biBuZXdlbnRyeTsNCisgICAgfQ0KK30NCisNCit2b2lkDQorZ3J1Yl9sb2FkZXJfdW5yZWdpc3Rl cl9wcmVib290KGdydWJfcHJlYm9vdF9ob29raWQgaWQpDQorew0KKyAgaWYgKDAgPT0gaWQpDQor ICAgIHJldHVybjsNCisgIGdydWJfcHJlYm9vdF9ob29raWQgZW50cnkgPSAwOw0KKyAgZ3J1Yl9w cmVib290X2hvb2tpZCBzZWFyY2ggPSBwcmVib290X2hvb2tzOw0KKyAgZ3J1Yl9wcmVib290X2hv b2tpZCBwcmV2aW91cyA9IDA7DQorICB3aGlsZSAoc2VhcmNoKQ0KKyAgICB7DQorICAgICAgaWYg KHNlYXJjaCA9PSBpZCkNCisgICAgICAgIHsNCisgICAgICAgICAgZW50cnkgPSBzZWFyY2g7DQor ICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgfQ0KKyAgICAgIHByZXZpb3VzID0gc2VhcmNoOw0K KyAgICAgIHNlYXJjaCA9IHNlYXJjaC0+bmV4dDsNCisgICAgfQ0KKyAgaWYgKGVudHJ5KSAvKiBG b3VuZCAqLw0KKyAgICB7DQorICAgICAgaWYgKHByZXZpb3VzKQ0KKyAgICAgICAgcHJldmlvdXMt Pm5leHQgPSBlbnRyeS0+bmV4dDsNCisgICAgICBlbHNlIHByZWJvb3RfaG9va3MgPSBlbnRyeS0+ bmV4dDsgLyogRW50cnkgd2FzIGhlYWQgb2YgbGlzdCAqLw0KKyAgICAgIGdydWJfZnJlZSAoZW50 cnkpOw0KKyAgICB9DQorfQ0KKw0KIGdydWJfZXJyX3QNCiBncnViX2xvYWRlcl9ib290ICh2b2lk KQ0KIHsNCiAgIGlmICghIGdydWJfbG9hZGVyX2xvYWRlZCkNCiAgICAgcmV0dXJuIGdydWJfZXJy b3IgKEdSVUJfRVJSX05PX0tFUk5FTCwgIm5vIGxvYWRlZCBrZXJuZWwiKTsNCisgIA0KKyAgZ3J1 Yl9wcmVib290X2hvb2tpZCBlbnRyeSA9IHByZWJvb3RfaG9va3M7DQorICB3aGlsZSAoZW50cnkp DQorICAgIHsNCisgICAgICBncnViX2Vycl90IHBvc3NpYmxlX2Vycm9yID0gZW50cnktPmhvb2so KTsNCisgICAgICBpZiAocG9zc2libGVfZXJyb3IgIT0gR1JVQl9FUlJfTk9ORSAmJiBlbnRyeS0+ YWJvcnRfb25fZXJyb3IpDQorICAgICAgICByZXR1cm4gcG9zc2libGVfZXJyb3I7DQorICAgICAg ZW50cnkgPSBlbnRyeS0+bmV4dDsNCisgICAgfQ0KIA0KICAgaWYgKGdydWJfbG9hZGVyX25vcmV0 dXJuKQ0KICAgICBncnViX21hY2hpbmVfZmluaSAoKTsNCk== --=-68VNDR+b7pjahVYcy1B4-- --=-VeRS3Tvqfn3LejB15Cfw Content-Type: application/pgp-signature; name=signature.asc Content-Description: Esta parte del mensaje =?ISO-8859-1?Q?est=E1?= firmada digitalmente -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) iQIVAwUASIRt1KSl+Fbdeo72AQIvDg//WRoYQ53H5EPn2eQOjEbtlgir0OamE/xj iZ++0RrXQOosIN0G7w6hxKavlS6NTIRyevwzZkO9o4ho1zAkiYc7fIjz56mJbLqi 4heVFjmIWKnevS8BAxmimlRppF3H54x6+v4TMPfw2BMWjnTPQSKMduxN78DQK8kj r9hGbqHiBOs85NIuJQfRGdYKJKoHugC9fEkq8BgtKcWtxKtJwC7YyM/P+WJxykdX F5BBvqQVd6Sw6fszWnmJ7jyDZRfKAgBBb220F38XfMhoTPhOjyoyTBEy6mxuVWuR p1myiQ9q0x1ULho8KH9xd4TyCzzro/93RvNGpImXqOzWeMv353GpK2XtKskQSgp6 yFC0QOoEyHKgXgpt5D02JhXXQpEn3E0TvR5MMkHAqw4+E2lz8SeHNyUkpxVbH351 Zm+/R9aV+gm77oRNboooJfxZ8xvHwmxFd7O3HsoGWhIqbHcn3Lr9FHELbmkq1h8L uFx5Uq3//bMT4U7//VMB8TB0bQqHU6iYBA67WT0XrxYhf4KiWOLG46lYDPiqWkyh MzO8xeMgFg93HElPGZshtEdvTWtyNhr886j8kWNNC0iN78c+wGZ7vdfHS0yOPBav uTKiImKsUC3Pvx4BwVfe2ceEye7V3vcdL5eoFO32cPAPEHJ0PIAd0K44nZyghXyY 1vsDXq7dOKI= =ZTUx -----END PGP SIGNATURE----- --=-VeRS3Tvqfn3LejB15Cfw--