From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with archive (Exim 4.43) id 1KTFGe-0001gs-UU for mharc-grub-devel@gnu.org; Wed, 13 Aug 2008 08:15:57 -0400 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1KTFGc-0001g2-Uh for grub-devel@gnu.org; Wed, 13 Aug 2008 08:15:55 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1KTFGa-0001e3-2M for grub-devel@gnu.org; Wed, 13 Aug 2008 08:15:54 -0400 Received: from [199.232.76.173] (port=52068 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1KTFGZ-0001dw-RG for grub-devel@gnu.org; Wed, 13 Aug 2008 08:15:51 -0400 Received: from ik-out-1112.google.com ([66.249.90.180]:36446) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1KTFGZ-0002Lo-7k for grub-devel@gnu.org; Wed, 13 Aug 2008 08:15:52 -0400 Received: by ik-out-1112.google.com with SMTP id c21so3451884ika.2 for ; Wed, 13 Aug 2008 05:15:50 -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=l2mkQUS1HDH0h4IOlnqZ/cDNum5q413lHoKxCK/pPjw=; b=awbrg0K3TJ2fswVaG/80oo7PRi82qGh3DwiD7ZSeDyDnNKmL4kKRrAMHPj4vs2gp83 QxEji5e5muD9De35yq+SKZACHE81FVD6NprcHYg33bUmDeh4KkrLd7cEnxty9RuKAvQS Da4pdlzNVlhy4yR5s4UW7cOpRPZT841I1HmOA= 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=dIKWxPvGp/NQAJ02tO4sB//zyTQWGEsfuBk7lb+BG5e/iPq3yroqJNW8LIFeeASZlM BBkotKvnEeeP/lV50ddHlHzW9jazdtiPA9NoqICbSHFQmGdLQgwwuXVug95P3aDq1M50 07TaG6ruQARCDEVe8oVLY0tLMQAHfNX9onvPI= Received: by 10.210.127.13 with SMTP id z13mr11784240ebc.106.1218629750184; Wed, 13 Aug 2008 05:15:50 -0700 (PDT) Received: from ?192.168.1.100? ( [213.37.137.93]) by mx.google.com with ESMTPS id c22sm229571ika.1.2008.08.13.05.15.44 (version=SSLv3 cipher=RC4-MD5); Wed, 13 Aug 2008 05:15:48 -0700 (PDT) From: Javier =?ISO-8859-1?Q?Mart=EDn?= To: The development of GRUB 2 In-Reply-To: <87k5el9q99.fsf@xs4all.nl> References: <1215137528.26019.58.camel@localhost> <87bq0sibu0.fsf@xs4all.nl> <1216601741.8334.122.camel@localhost> <877ib1khe9.fsf@xs4all.nl> <1217806150.9634.24.camel@localhost> <87iqug33m9.fsf@xs4all.nl> <1217891426.15145.38.camel@localhost> <87vdyfem5k.fsf@xs4all.nl> <1217954381.14674.31.camel@localhost> <1218296029.20937.10.camel@localhost> <87k5el9q99.fsf@xs4all.nl> Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-Ft28HZyk2fNJxr0KsfR+" Date: Wed, 13 Aug 2008 14:16:25 +0200 Message-Id: <1218629785.8757.30.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: Wed, 13 Aug 2008 12:15:55 -0000 --=-Ft28HZyk2fNJxr0KsfR+ Content-Type: multipart/mixed; boundary="=-YXTNHuU0jh9b62UFA3sm" --=-YXTNHuU0jh9b62UFA3sm Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable El mi=C3=A9, 13-08-2008 a las 12:13 +0200, Marco Gerards escribi=C3=B3: > Javier Mart=C3=ADn writes: >=20 > > In this reply-to-myself hoping to keep the thread continuity, I put > > forth the new "version 7" of the patch with the following changes: > > > > - A new switch -s/--swap has been implemented, so that running > > "drivemap -s hd0 hd1" is equivalent to issuing the command twice with > > the arguments normal, then reversed. There is one exception: if the > > first mapping fails or the second drive does not exist, no mapping is > > performed, whereas hand-performing the swap would have successfully > > assigned BIOS disk #1 to hd0, then failed to assign bd#0 to non-existen= t > > hd1. > > - Raw BIOS disk number parsing has been removed: the syntax "drivemap > > hd1 0x80" is no longer legal. However, one can still map non-existent > > BIOS disk numbers with "drivemap hd0 hd42" for example and (more > > controversially, maybe I'll add a check eventually) assign a floppy to > > an HD and back. >=20 > Ah good :-) >=20 > > The only file changed from the last patch ("version 6") is drivemap.c: > > the rest of it should be the same, so if anyone was reviewing it you ca= n > > seamlessly "jump" to version 7. In particular, the functional changes > > are localized in the drivemap_cmd function proper, and there are > > cosmetic changes elsewhere (spurious tabs removed, etc.). >=20 > You only forgot the changelog entry ;-) Oops, sorry... the only addition would be the new file drivemap.h, so the "final" (I hope) version would be like this: =EF=BB=BF=EF=BB=BF2008-08-13 Javier Martin =EF=BB=BF* commands/i386/pc/drivemap.c: New file. * commands/i386/pc/drivemap_int13h.S: New file. =EF=BB=BF* conf/i386-pc.rmk (pkglib_MODULES): Added drivemap.mod. (drivemap_mod_SOURCES): New variable. (drivemap_mod_ASFLAGS): Likewise. =EF=BB=BF(drivemap_mod_CFLAGS): Likewise. =EF=BB=BF(drivemap_mod_LDFLAGS): Likewise. * include/grub/i386/pc/drivemap.h: New file. =EF=BB=BF* include/grub/loader.h (grub_loader_register_preboot): Ne= w function prototype. (grub_loader_unregister_preboot): Likewise. (grub_preboot_hookid): New typedef. =EF=BB=BF* kern/loader.c =EF=BB=BF(grub_loader_register_preboot): N= ew function. (grub_loader_unregister_preboot): Likewise. (preboot_hooks): New variable. (grub_loader_boot): Call the list of preboot-hooks before the actual loader. WRT the code, all your concerns were taken care of (I keep forgetting the ". " in comments, sorry), and about this snippet: > +static grub_err_t > > +grub_cmd_drivemap (struct grub_arg_list *state, int argc, char **args) > > +{ > > + if (state[OPTIDX_LIST].set) > > + { > > + /* Show: list mappings. */ > > + if (!drivemap) > > + grub_printf ("No drives have been remapped"); > > + else > > + { > > + grub_printf ("Showing only remapped drives.\n"); > > + grub_printf ("BIOS disk #num ----> GRUB device\n"); >=20 > BIOS disk #num? >=20 > Can you give an example? The "drivemap -l" command lists all remapped drives. The format of the list= ing has been reworked in order to be both understandable for end-users and = unambiguous for devs and power users. It is now something akin to: BIOS disk #num ----> GRUB device FD #0 (0x00) (fd3) (...) FD #127 (0x7f) (hd15) HD #0 (0x80) (hd2) (...) HD #127 (0xff) (fd0) Of course, it only shows remapped drives, not the full 255 possibilities. W= ell, here is "version 8" of the patch... hope you like it ;) -Habbit --=-YXTNHuU0jh9b62UFA3sm Content-Disposition: attachment; filename=drivemap.patch.8 Content-Type: text/x-patch; name=drivemap.patch.8; charset=utf-8 Content-Transfer-Encoding: base64 SW5kZXg6IGNvbW1hbmRzL2kzODYvcGMvZHJpdmVtYXAuYw0KPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGNvbW1h bmRzL2kzODYvcGMvZHJpdmVtYXAuYwkocmV2aXNpw7NuOiAwKQ0KKysrIGNvbW1hbmRzL2kzODYv cGMvZHJpdmVtYXAuYwkocmV2aXNpw7NuOiAwKQ0KQEAgLTAsMCArMSw0MzQgQEANCisvKiBkcml2 ZW1hcC5jIC0gY29tbWFuZCB0byBtYW5hZ2UgdGhlIEJJT1MgZHJpdmUgbWFwcGluZ3MuICAqLw0K Ky8qDQorICogIEdSVUIgIC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXINCisgKiAgQ29weXJp Z2h0IChDKSAyMDA4ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCisgKg0KKyAqICBH UlVCIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2Rp ZnkNCisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkNCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwg ZWl0aGVyIHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3INCisgKiAgKGF0IHlvdXIgb3B0aW9u KSBhbnkgbGF0ZXIgdmVyc2lvbi4NCisgKg0KKyAqICBHUlVCIGlzIGRpc3RyaWJ1dGVkIGluIHRo ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorICogIE1FUkNIQU5U QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCisg KiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisgKg0KKyAq ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJs aWMgTGljZW5zZQ0KKyAqICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3 dy5nbnUub3JnL2xpY2Vuc2VzLz4uDQorICovDQorDQorI2luY2x1ZGUgPGdydWIvbWFjaGluZS9k cml2ZW1hcC5oPg0KKyNpbmNsdWRlIDxncnViL25vcm1hbC5oPg0KKyNpbmNsdWRlIDxncnViL2Rs Lmg+DQorI2luY2x1ZGUgPGdydWIvbW0uaD4NCisjaW5jbHVkZSA8Z3J1Yi9taXNjLmg+DQorI2lu Y2x1ZGUgPGdydWIvZGlzay5oPg0KKyNpbmNsdWRlIDxncnViL2xvYWRlci5oPg0KKyNpbmNsdWRl IDxncnViL21hY2hpbmUvbG9hZGVyLmg+DQorI2luY2x1ZGUgPGdydWIvbWFjaGluZS9iaW9zZGlz ay5oPg0KKw0KKyNkZWZpbmUgTU9ETkFNRSAiZHJpdmVtYXAiDQorDQorc3RhdGljIGNvbnN0IHN0 cnVjdCBncnViX2FyZ19vcHRpb24gb3B0aW9uc1tdID0gew0KKyAgeyJsaXN0IiwgJ2wnLCAwLCAi c2hvdyB0aGUgY3VycmVudCBtYXBwaW5ncyIsIDAsIDB9LA0KKyAgeyJyZXNldCIsICdyJywgMCwg InJlc2V0IGFsbCBtYXBwaW5ncyB0byB0aGUgZGVmYXVsdCB2YWx1ZXMiLCAwLCAwfSwNCisgIHsi c3dhcCIsICdzJywgMCwgInBlcmZvcm0gYm90aCBkaXJlY3QgYW5kIHJldmVyc2UgbWFwcGluZ3Mi LCAwLCAwfSwNCisgIHswLCAwLCAwLCAwLCAwLCAwfQ0KK307DQorDQorZW51bSBvcHRfaWR4cyB7 DQorICBPUFRJRFhfTElTVCA9IDAsDQorICBPUFRJRFhfUkVTRVQsDQorICBPUFRJRFhfU1dBUCwN Cit9Ow0KKw0KK3R5cGVkZWYgc3RydWN0IGRyaXZlbWFwX25vZGUNCit7DQorICBncnViX3VpbnQ4 X3QgbmV3ZHJpdmU7DQorICBncnViX3VpbnQ4X3QgcmVkaXJ0bzsNCisgIHN0cnVjdCBkcml2ZW1h cF9ub2RlICpuZXh0Ow0KK30gZHJpdmVtYXBfbm9kZV90Ow0KKw0KK3N0YXRpYyBkcml2ZW1hcF9u b2RlX3QgKmRyaXZlbWFwOw0KK3N0YXRpYyBncnViX3ByZWJvb3RfaG9va2lkIGluc3RoYW5kbGVy X2hvb2s7DQorc3RhdGljIGdydWJfZXJyX3QgaW5zdGFsbF9pbnQxM19oYW5kbGVyICh2b2lkKTsN CisNCisvKiBQdXRzIHRoZSBzcGVjaWZpZWQgbWFwcGluZyBpbnRvIHRoZSB0YWJsZSwgcmVwbGFj aW5nIGFuIGV4aXN0aW5nIG1hcHBpbmcNCisgICBmb3IgbmV3ZHJpdmUgb3IgYWRkaW5nIGEgbmV3 IG9uZSBpZiByZXF1aXJlZC4gICovDQorc3RhdGljIGdydWJfZXJyX3QNCitkcml2ZW1hcF9zZXQg KGdydWJfdWludDhfdCBuZXdkcml2ZSwgZ3J1Yl91aW50OF90IHJlZGlydG8pDQorew0KKyAgZHJp dmVtYXBfbm9kZV90ICptYXBwaW5nID0gMDsNCisgIGRyaXZlbWFwX25vZGVfdCAqc2VhcmNoID0g ZHJpdmVtYXA7DQorICB3aGlsZSAoc2VhcmNoKQ0KKyAgICB7DQorICAgICAgaWYgKHNlYXJjaC0+ bmV3ZHJpdmUgPT0gbmV3ZHJpdmUpDQorICAgICAgICB7DQorICAgICAgICAgIG1hcHBpbmcgPSBz ZWFyY2g7DQorICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgfQ0KKyAgICAgIHNlYXJjaCA9IHNl YXJjaC0+bmV4dDsNCisgICAgfQ0KKw0KKyAgDQorICAvKiBDaGVjayBmb3IgcHJlLWV4aXN0aW5n IG1hcHBpbmdzIHRvIG1vZGlmeSBiZWZvcmUgY3JlYXRpbmcgYSBuZXcgb25lLiAgKi8NCisgIGlm IChtYXBwaW5nKQ0KKyAgICBtYXBwaW5nLT5yZWRpcnRvID0gcmVkaXJ0bzsNCisgIGVsc2UgDQor ICAgIHsNCisgICAgICBtYXBwaW5nID0gZ3J1Yl9tYWxsb2MgKHNpemVvZiAoZHJpdmVtYXBfbm9k ZV90KSk7DQorICAgICAgaWYgKCFtYXBwaW5nKQ0KKyAgICAgICAgcmV0dXJuIGdydWJfZXJyb3Ig KEdSVUJfRVJSX09VVF9PRl9NRU1PUlksDQorICAgICAgICAgICAgICAgICAgICAgICAgICAgImNh bm5vdCBhbGxvY2F0ZSBtYXAgZW50cnksIG5vdCBlbm91Z2ggbWVtb3J5Iik7DQorICAgICAgbWFw cGluZy0+bmV3ZHJpdmUgPSBuZXdkcml2ZTsNCisgICAgICBtYXBwaW5nLT5yZWRpcnRvID0gcmVk aXJ0bzsNCisgICAgICBtYXBwaW5nLT5uZXh0ID0gZHJpdmVtYXA7DQorICAgICAgZHJpdmVtYXAg PSBtYXBwaW5nOw0KKyAgICB9DQorICByZXR1cm4gR1JVQl9FUlJfTk9ORTsNCit9DQorDQorLyog UmVtb3ZlcyB0aGUgbWFwcGluZyBmb3IgbmV3ZHJpdmUgZnJvbSB0aGUgdGFibGUuICBJZiB0aGVy ZSBpcyBubyBtYXBwaW5nLA0KKyAgIHRoZW4gdGhpcyBmdW5jdGlvbiBiZWhhdmVzIGxpa2UgYSBu by1vcCBvbiB0aGUgbWFwLiAgKi8NCitzdGF0aWMgdm9pZA0KK2RyaXZlbWFwX3JlbW92ZSAoZ3J1 Yl91aW50OF90IG5ld2RyaXZlKQ0KK3sNCisgIGRyaXZlbWFwX25vZGVfdCAqbWFwcGluZyA9IDA7 DQorICBkcml2ZW1hcF9ub2RlX3QgKnNlYXJjaCA9IGRyaXZlbWFwOw0KKyAgZHJpdmVtYXBfbm9k ZV90ICpwcmV2aW91cyA9IDA7DQorDQorICB3aGlsZSAoc2VhcmNoKQ0KKyAgICB7DQorICAgICAg aWYgKHNlYXJjaC0+bmV3ZHJpdmUgPT0gbmV3ZHJpdmUpDQorICAgICAgICB7DQorICAgICAgICAg IG1hcHBpbmcgPSBzZWFyY2g7DQorICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgfQ0KKyAgICAg IHByZXZpb3VzID0gc2VhcmNoOw0KKyAgICAgIHNlYXJjaCA9IHNlYXJjaC0+bmV4dDsNCisgICAg fQ0KKw0KKyAgaWYgKG1hcHBpbmcpDQorICAgIHsNCisgICAgICBpZiAocHJldmlvdXMpDQorICAg ICAgICBwcmV2aW91cy0+bmV4dCA9IG1hcHBpbmctPm5leHQ7DQorICAgICAgZWxzZSAvKiBFbnRy eSB3YXMgaGVhZCBvZiBsaXN0LiAgKi8NCisgICAgICAgIGRyaXZlbWFwID0gbWFwcGluZy0+bmV4 dDsNCisgICAgICBncnViX2ZyZWUgKG1hcHBpbmcpOw0KKyAgICB9DQorfQ0KKw0KKy8qIEdpdmVu IGEgZGV2aWNlIG5hbWUsIHJlc29sdmVzIGl0cyBCSU9TIGRpc2sgbnVtYmVyIGFuZCBzdG9yZXMg aXQgaW4gdGhlDQorICAgcGFzc2VkIGxvY2F0aW9uLCB3aGljaCBzaG91bGQgb25seSBiZSB0cnVz dGVkIGlmIEVSUl9OT05FIGlzIHJldHVybmVkLiAgKi8NCitzdGF0aWMgZ3J1Yl9lcnJfdA0KK3Bh cnNlX2Jpb3NkaXNrIChjb25zdCBjaGFyICpuYW1lLCBncnViX3VpbnQ4X3QgKmRpc2tudW0pDQor ew0KKyAgZ3J1Yl9kaXNrX3QgZGlzazsNCisgIGlmICghbmFtZSB8fCAqbmFtZSA9PSAwKQ0KKyAg ICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0FSR1VNRU5ULCAiZGV2aWNlIG5hbWUg ZW1wdHkiKTsNCisgIC8qIFNraXAgdGhlIGZpcnN0ICggaW4gKGhkMCkgLSBkaXNrX29wZW4gd2Fu dHMganVzdCB0aGUgbmFtZS4gICovDQorICBpZiAoKm5hbWUgPT0gJygnKQ0KKyAgICBuYW1lKys7 DQorICANCisgIGRpc2sgPSBncnViX2Rpc2tfb3BlbiAobmFtZSk7DQorICBpZiAoIWRpc2spDQor ICAgIHJldHVybiBncnViX2Vycm9yIChHUlVCX0VSUl9VTktOT1dOX0RFVklDRSwgInVua25vd24g ZGV2aWNlIFwiJXNcIiIsIG5hbWUpOw0KKyAgZWxzZQ0KKyAgICB7DQorICAgICAgY29uc3QgZW51 bSBncnViX2Rpc2tfZGV2X2lkIGlkID0gZGlzay0+ZGV2LT5pZDsNCisgICAgICAvKiBUaGUgZm9s bG93aW5nIGFzc2lnbm1lbnQgaXMgb25seSBzb3VuZCBpZiB0aGUgZGV2aWNlIGlzIGluZGVlZCBh DQorICAgICAgICAgYmlvc2Rpc2suICBUaGUgY2FsbGVyIG11c3QgY2hlY2sgdGhlIHJldHVybiB2 YWx1ZS4gICovDQorICAgICAgaWYgKGRpc2tudW0pDQorICAgICAgICAqZGlza251bSA9IGRpc2st PmlkOw0KKyAgICAgIGdydWJfZGlza19jbG9zZSAoZGlzayk7DQorICAgICAgaWYgKGlkID09IEdS VUJfRElTS19ERVZJQ0VfQklPU0RJU0tfSUQpDQorICAgICAgICByZXR1cm4gR1JVQl9FUlJfTk9O RTsNCisgICAgICBlbHNlDQorICAgICAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFE X0RFVklDRSwgIiVzIGlzIG5vdCBhIEJJT1MgZGlzayIsIG5hbWUpOw0KKyAgICB9DQorfQ0KKw0K Ky8qIEdpdmVuIGEgQklPUyBkaXNrIG51bWJlciwgcmV0dXJucyBpdHMgR1JVQiBkZXZpY2UgbmFt ZSBpZiBpdCBleGlzdHMuDQorICAgRm9yIG5vbmV4aXN0aW5nIEJJT1MgZGlzayBudW1iZXJzLCB0 aGlzIGZ1bmN0aW9uIHJldHVybnMNCisgICBHUlVCX0VSUl9VTktOT1dOX0RFVklDRS4gICovDQor c3RhdGljIGdydWJfZXJyX3QNCityZXZwYXJzZV9iaW9zZGlzayhjb25zdCBncnViX3VpbnQ4X3Qg ZG51bSwgY29uc3QgY2hhciAqKm91dHB1dCkNCit7DQorICBpbnQgZm91bmQgPSAwOw0KKyAgYXV0 byBpbnQgZmluZCAoY29uc3QgY2hhciAqbmFtZSk7DQorICBpbnQgZmluZCAoY29uc3QgY2hhciAq bmFtZSkNCisgIHsNCisgICAgY29uc3QgZ3J1Yl9kaXNrX3QgZGlzayA9IGdydWJfZGlza19vcGVu IChuYW1lKTsNCisgICAgaWYgKCFkaXNrKQ0KKyAgICAgIHJldHVybiAwOw0KKyAgICBlbHNlDQor ICAgICAgew0KKyAgICAgICAgaWYgKGRpc2stPmlkID09IGRudW0gJiYgZGlzay0+ZGV2LT5pZCA9 PSBHUlVCX0RJU0tfREVWSUNFX0JJT1NESVNLX0lEKQ0KKyAgICAgICAgICB7DQorICAgICAgICAg ICAgZm91bmQgPSAxOw0KKyAgICAgICAgICAgIGlmIChvdXRwdXQpDQorICAgICAgICAgICAgICAq b3V0cHV0ID0gbmFtZTsNCisgICAgICAgICAgfQ0KKyAgICAgICAgZ3J1Yl9kaXNrX2Nsb3NlIChk aXNrKTsNCisgICAgICAgIHJldHVybiBmb3VuZDsNCisgICAgICB9DQorICB9DQorDQorICBncnVi X2Rpc2tfZGV2X2l0ZXJhdGUgKGZpbmQpOw0KKyAgaWYgKGZvdW5kKQ0KKyAgICByZXR1cm4gR1JV Ql9FUlJfTk9ORTsNCisgIGVsc2UNCisgICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX1VO S05PV05fREVWSUNFLCAiQklPUyBkaXNrICUwMnggbm90IGZvdW5kIiwgZG51bSk7DQorfQ0KKw0K Ky8qIEdpdmVuIGEgR1JVQi1saWtlIGRldmljZSBuYW1lIGFuZCBhIGNvbnZlbmllbnQgbG9jYXRp b24sIHN0b3JlcyB0aGUgcmVsYXRlZA0KKyAgIEJJT1MgZGlzayBudW1iZXIuICBBY2NlcHRzIGRl dmljZXMgbGlrZSBcKChmfGgpZE5cKSwgd2l0aCAwIDw9IE4gPCAxMjguICAqLw0KK3N0YXRpYyBn cnViX2Vycl90DQordHJ5cGFyc2VfZGlza3N0cmluZyAoY29uc3QgY2hhciAqc3RyLCBncnViX3Vp bnQ4X3QgKm91dHB1dCkNCit7DQorICBpZiAoIXN0ciB8fCAqc3RyID09IDApDQorICAgIGdvdG8g ZmFpbDsNCisgIC8qIFNraXAgb3BlbmluZyBwYXJlbiBpbiBvcmRlciB0byBhbGxvdyBib3RoICho ZDApIGFuZCBoZDAuICAqLw0KKyAgaWYgKCpzdHIgPT0gJygnKQ0KKyAgICBzdHIrKzsNCisgIGlm ICgoc3RyWzBdID09ICdmJyB8fCBzdHJbMF0gPT0gJ2gnKSAmJiBzdHJbMV0gPT0gJ2QnKQ0KKyAg ICB7DQorICAgICAgZ3J1Yl91aW50OF90IGJpb3NfbnVtID0gKHN0clswXSA9PSAnaCcpPyAweDgw IDogMHgwMDsNCisgICAgICBncnViX2Vycm5vID0gR1JVQl9FUlJfTk9ORTsNCisgICAgICB1bnNp Z25lZCBsb25nIGRyaXZlbnVtID0gZ3J1Yl9zdHJ0b3VsIChzdHIgKyAyLCAwLCAwKTsNCisgICAg ICBpZiAoZ3J1Yl9lcnJubyAhPSBHUlVCX0VSUl9OT05FIHx8IGRyaXZlbnVtID4gMTI3KQ0KKyAg ICAgICAgew0KKyAgICAgICAgICAvKiBOIG5vdCBhIG51bWJlciBvciBvdXQgb2YgcmFuZ2UuICAq Lw0KKyAgICAgICAgICBnb3RvIGZhaWw7DQorICAgICAgICB9DQorICAgICAgZWxzZQ0KKyAgICAg ICAgew0KKyAgICAgICAgICBiaW9zX251bSB8PSBkcml2ZW51bTsNCisgICAgICAgICAgaWYgKG91 dHB1dCkNCisgICAgICAgICAgICAqb3V0cHV0ID0gYmlvc19udW07DQorICAgICAgICAgIHJldHVy biBHUlVCX0VSUl9OT05FOw0KKyAgICAgICAgfQ0KKyAgICB9DQorICBlbHNlDQorICAgIGdvdG8g ZmFpbDsNCisNCitmYWlsOg0KKyAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX0JBRF9BUkdV TUVOVCwgImRldmljZSBmb3JtYXQgXCIlc1wiIGludmFsaWQ6IG11c3QiDQorICAgICAgICAgICAg ICAgICAgICAgImJlIChmfGgpZE4sIHdpdGggMCA8PSBOIDwgMTI4Iiwgc3RyKTsNCit9DQorDQor c3RhdGljIGdydWJfZXJyX3QNCitncnViX2NtZF9kcml2ZW1hcCAoc3RydWN0IGdydWJfYXJnX2xp c3QgKnN0YXRlLCBpbnQgYXJnYywgY2hhciAqKmFyZ3MpDQorew0KKyAgaWYgKHN0YXRlW09QVElE WF9MSVNUXS5zZXQpDQorICAgIHsNCisgICAgICAvKiBTaG93OiBsaXN0IG1hcHBpbmdzLiAgKi8N CisgICAgICBpZiAoIWRyaXZlbWFwKQ0KKyAgICAgICAgZ3J1Yl9wcmludGYgKCJObyBkcml2ZXMg aGF2ZSBiZWVuIHJlbWFwcGVkIik7DQorICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAg ICBncnViX3ByaW50ZiAoIlNob3dpbmcgb25seSByZW1hcHBlZCBkcml2ZXMuXG4iKTsNCisgICAg ICAgICAgZ3J1Yl9wcmludGYgKCJCSU9TIGRpc2sgI251bSAtLS0tPiBHUlVCIGRldmljZVxuIik7 DQorICAgICAgICAgIGRyaXZlbWFwX25vZGVfdCAqY3Vybm9kZSA9IGRyaXZlbWFwOw0KKyAgICAg ICAgICB3aGlsZSAoY3Vybm9kZSkNCisgICAgICAgICAgICB7DQorICAgICAgICAgICAgICBjb25z dCBjaGFyICpkbmFtZSA9IDA7DQorICAgICAgICAgICAgICBncnViX2Vycl90IGVyciA9IHJldnBh cnNlX2Jpb3NkaXNrIChjdXJub2RlLT5yZWRpcnRvLCAmZG5hbWUpOw0KKyAgICAgICAgICAgICAg aWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQ0KKyAgICAgICAgICAgICAgICByZXR1cm4gZ3J1Yl9l cnJvciAoZXJyLCAiaW52YWxpZCBtYXBwaW5nOiBub24tZXhpc3RlbnQgZGlzayINCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm9yIG5vdCBtYW5hZ2VkIGJ5IHRoZSBC SU9TIik7DQorICAgICAgICAgICAgICBncnViX3ByaW50ZigiJWNEICMlLTN1ICgweCUwMngpICAg ICAgICVzXG4iLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgKGN1cm5vZGUtPm5ld2RyaXZl ICYgMHg4MCkgPyAnSCcgOiAnRicsDQorICAgICAgICAgICAgICAgICAgICAgICAgICBjdXJub2Rl LT5uZXdkcml2ZSAmIDB4N0YsIGN1cm5vZGUtPm5ld2RyaXZlLCBkbmFtZSk7DQorICAgICAgICAg ICAgICBjdXJub2RlID0gY3Vybm9kZS0+bmV4dDsNCisgICAgICAgICAgICB9DQorICAgICAgICB9 DQorICAgIH0NCisgIGVsc2UgaWYgKHN0YXRlW09QVElEWF9SRVNFVF0uc2V0KQ0KKyAgICB7DQor ICAgICAgLyogUmVzZXQ6IGp1c3QgZGVsZXRlIGFsbCBtYXBwaW5ncywgZnJlZWluZyB0aGVpciBt ZW1vcnkuICAqLw0KKyAgICAgIGRyaXZlbWFwX25vZGVfdCAqY3Vybm9kZSA9IGRyaXZlbWFwOw0K KyAgICAgIGRyaXZlbWFwX25vZGVfdCAqcHJldm5vZGUgPSAwOw0KKyAgICAgIHdoaWxlIChjdXJu b2RlKQ0KKyAgICAgICAgew0KKyAgICAgICAgICBwcmV2bm9kZSA9IGN1cm5vZGU7DQorICAgICAg ICAgIGN1cm5vZGUgPSBjdXJub2RlLT5uZXh0Ow0KKyAgICAgICAgICBncnViX2ZyZWUgKHByZXZu b2RlKTsNCisgICAgICAgIH0NCisgICAgICBkcml2ZW1hcCA9IDA7DQorICAgIH0NCisgIGVsc2UN CisgICAgew0KKyAgICAgIC8qIE5laXRoZXIgZmxhZzogcHV0IG1hcHBpbmcuICAqLw0KKyAgICAg IGdydWJfdWludDhfdCBtYXBmcm9tID0gMDsNCisgICAgICBncnViX3VpbnQ4X3QgbWFwdG8gPSAw eEZGOw0KKyAgICAgIGdydWJfZXJyX3QgZXJyOw0KKyAgICAgIA0KKyAgICAgIGlmIChhcmdjICE9 IDIpDQorICAgICAgICByZXR1cm4gZ3J1Yl9lcnJvciAoR1JVQl9FUlJfQkFEX0FSR1VNRU5ULCAi dHdvIGFyZ3VtZW50cyByZXF1aXJlZCIpOw0KKw0KKyAgICAgIGVyciA9IHBhcnNlX2Jpb3NkaXNr IChhcmdzWzBdLCAmbWFwZnJvbSk7DQorICAgICAgaWYgKGVyciAhPSBHUlVCX0VSUl9OT05FKQ0K KyAgICAgICAgcmV0dXJuIGVycjsNCisgICAgICANCisgICAgICAvKiBXaGVuIHN3YXBwaW5nIHdl IHJlcXVpcmUgYm90aCBkZXZpY2VzIHRvIGJlIEJJT1MgZGlza3MsIGJ1dCB3aGVuDQorICAgICAg ICAgcGVyZm9ybWluZyBkaXJlY3QgbWFwcGluZ3Mgd2Ugb25seSByZXF1aXJlIHRoZSAybmQgYXJn dW1lbnQgdG8gbG9vaw0KKyAgICAgICAgIGxpa2UgYSBCSU9TIGRpc2sgaW4gb3JkZXIgdG8gcmVz b2x2ZSBpdCBpbnRvIGEgQklPUyBkaXNrIG51bWJlci4gICovDQorICAgICAgaWYgKHN0YXRlW09Q VElEWF9TV0FQXS5zZXQpDQorICAgICAgICBlcnIgPSBwYXJzZV9iaW9zZGlzayAoYXJnc1sxXSwg Jm1hcHRvKTsNCisgICAgICBlbHNlDQorICAgICAgICBlcnIgPSB0cnlwYXJzZV9kaXNrc3RyaW5n IChhcmdzWzFdLCAmbWFwdG8pOw0KKyAgICAgIGlmIChlcnIgIT0gR1JVQl9FUlJfTk9ORSkNCisg ICAgICAgIHJldHVybiBlcnI7DQorICAgICAgDQorICAgICAgaWYgKG1hcHRvID09IG1hcGZyb20p DQorICAgICAgICB7DQorICAgICAgICAgIC8qIFJlc2V0IHRvIGRlZmF1bHQuICAqLw0KKyAgICAg ICAgICBncnViX2RwcmludGYgKE1PRE5BTUUsICJSZW1vdmluZyB0aGUgbWFwcGluZyBmb3IgJXMg KCUwMngpIiwgYXJnc1swXSwgbWFwZnJvbSk7DQorICAgICAgICAgIGRyaXZlbWFwX3JlbW92ZSAo bWFwZnJvbSk7DQorICAgICAgICB9DQorICAgICAgZWxzZQ0KKyAgICAgICAgew0KKyAgICAgICAg ICAvKiBTZXQgdGhlIG1hcHBpbmcgZm9yIHRoZSBkaXNrIChvdmVyd3JpdGVzIGFueSBleGlzdGlu ZyBtYXBwaW5nKS4gICovDQorICAgICAgICAgIGdydWJfZHByaW50ZiAoTU9ETkFNRSwgIiVzICVz ICglMDJ4KSA9ICVzICglMDJ4KVxuIiwNCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZVtP UFRJRFhfU1dBUF0uc2V0ID8gIlN3YXBwaW5nIiA6ICJNYXBwaW5nIiwNCisgICAgICAgICAgICAg ICAgICAgICAgICBhcmdzWzFdLCBtYXB0bywgYXJnc1swXSwgbWFwZnJvbSk7DQorICAgICAgICAg IGVyciA9IGRyaXZlbWFwX3NldCAobWFwdG8sIG1hcGZyb20pOw0KKyAgICAgICAgICAvKiBJZiAt cywgcGVyZm9ybSB0aGUgcmV2ZXJzZSBtYXBwaW5nIHRvbyAob25seSBpZiB0aGUgZmlyc3Qgd2Fz IE9LKS4gICovDQorICAgICAgICAgIGlmIChzdGF0ZVtPUFRJRFhfU1dBUF0uc2V0ICYmIGVyciA9 PSBHUlVCX0VSUl9OT05FKQ0KKyAgICAgICAgICAgIGVyciA9IGRyaXZlbWFwX3NldCAobWFwZnJv bSwgbWFwdG8pOw0KKyAgICAgICAgICByZXR1cm4gZXJyOw0KKyAgICAgICAgfQ0KKyAgICB9DQor DQorICByZXR1cm4gR1JVQl9FUlJfTk9ORTsNCit9DQorDQordHlwZWRlZiBzdHJ1Y3QgX19hdHRy aWJ1dGVfXyAoKHBhY2tlZCkpIGludDEzbWFwX25vZGUNCit7DQorICBncnViX3VpbnQ4X3QgZGlz a251bTsNCisgIGdydWJfdWludDhfdCBtYXB0bzsNCit9IGludDEzbWFwX25vZGVfdDsNCisNCisv KiBUaGUgbWluIGFtb3VudCBvZiBtZW0gdGhhdCBtdXN0IHJlbWFpbiBmcmVlIGFmdGVyIGluc3Rh bGxpbmcgdGhlIGhhbmRsZXIuDQorICAgMzIgS2lCIGlzIGp1c3QgYWJvdmUgMHg3QzAwLTB4N0Uw MCwgd2hlcmUgdGhlIGJvb3RzZWN0b3IgaXMgbG9hZGVkLiAgKi8NCisjZGVmaW5lIE1JTl9GUkVF X01FTV9LQiAzMg0KKyNkZWZpbmUgSU5UMTNIX09GRlNFVCh4KSAoICgoZ3J1Yl91aW50OF90Kiko eCkpIC0gKChncnViX3VpbnQ4X3QqKSZncnViX2RyaXZlbWFwX2ludDEzX2hhbmRsZXJfYmFzZSkg KQ0KKyNkZWZpbmUgSU5UMTNIX1JFQkFTRSh4KSAoICh2b2lkKikgKCgoZ3J1Yl91aW50OF90Kilo YW5kbGVyX2Jhc2UpICsgKHgpKSApDQorI2RlZmluZSBJTlQxM0hfVE9ORVdBRERSKHgpIElOVDEz SF9SRUJBU0UoIElOVDEzSF9PRkZTRVQoIHggKSApDQorDQorLyogSW50MTNoIGhhbmRsZXIgaW5z dGFsbGVyIC0gcmVzZXJ2ZXMgY29udmVudGlvbmFsIG1lbW9yeSBmb3IgdGhlIGhhbmRsZXIsDQor ICAgY29waWVzIGl0IG92ZXIgYW5kIHNldHMgdGhlIElWVCBlbnRyeSBmb3IgaW50MTNoLiAgDQor ICAgVGhpcyBjb2RlIHJlc3RzIG9uIHRoZSBhc3N1bXB0aW9uIHRoYXQgR1JVQiBkb2VzIG5vdCBh Y3RpdmF0ZSBhbnkga2luZCBvZg0KKyAgIG1lbW9yeSBtYXBwaW5nIGFwYXJ0IGZyb20gaWRlbnRp dHkgcGFnaW5nLCBzaW5jZSBpdCBhY2Nlc3NlcyByZWFsbW9kZQ0KKyAgIHN0cnVjdHVyZXMgYnkg dGhlaXIgYWJzb2x1dGUgYWRkcmVzc2VzLCBsaWtlIHRoZSBJVlQgYXQgMCBvciB0aGUgQkRBIGF0 DQorICAgMHg0MDA7IGFuZCB0cmFuc2Zvcm1zIGEgcG1vZGUgcG9pbnRlciBpbnRvIGEgcm1vZGUg c2VnOm9mZiBmYXIgcHRyLiAgKi8NCitzdGF0aWMgZ3J1Yl9lcnJfdA0KK2luc3RhbGxfaW50MTNf aGFuZGxlciAodm9pZCkNCit7DQorICBncnViX3NpemVfdCBlbnRyaWVzID0gMDsNCisgIGRyaXZl bWFwX25vZGVfdCAqY3VyZW50cnkgPSBkcml2ZW1hcDsNCisgIC8qIENvdW50IGVudHJpZXMgdG8g cHJlcGFyZSBhIGNvbnRpZ3VvdXMgbWFwIGJsb2NrLiAgKi8NCisgIHdoaWxlIChjdXJlbnRyeSkN CisgICAgew0KKyAgICAgIGVudHJpZXMrKzsNCisgICAgICBjdXJlbnRyeSA9IGN1cmVudHJ5LT5u ZXh0Ow0KKyAgICB9DQorICBpZiAoZW50cmllcyA9PSAwKQ0KKyAgICB7DQorICAgICAgLyogTm8g bmVlZCB0byBpbnN0YWxsIHRoZSBpbnQxM2ggaGFuZGxlci4gICovDQorICAgICAgZ3J1Yl9kcHJp bnRmIChNT0ROQU1FLCAiTm8gZHJpdmVzIG1hcmtlZCBhcyByZW1hcHBlZCwgaW5zdGFsbGF0aW9u IG9mIg0KKyAgICAgICAgICAgICAgICAgICAgImFuIGludDEzaCBoYW5kbGVyIGlzIG5vdCByZXF1 aXJlZC4iKTsNCisgICAgICByZXR1cm4gR1JVQl9FUlJfTk9ORTsNCisgICAgfQ0KKyAgZWxzZQ0K KyAgICB7DQorICAgICAgLyogUmVhbCBtb2RlIElWVCBzbG90IChzZWc6b2ZmIGZhciBwb2ludGVy KSBmb3IgaW50ZXJydXB0IDB4MTMuICAqLw0KKyAgICAgIGdydWJfdWludDMyX3QgKml2dHNsb3Qg PSAoZ3J1Yl91aW50MzJfdCopMHgwMDAwMDA0YzsNCisgICAgICAvKiBCREEgb2Zmc2V0IDB4MTMg Y29udGFpbnMgdGhlIHRvcCBvZiBjb252ZW50aW9uYWwgbWVtb3J5LCBpbiBraUIuICAqLw0KKyAg ICAgIGdydWJfdWludDE2X3QgKmJwYV9mcmVla2IgPSAoZ3J1Yl91aW50MTZfdCopMHgwMDAwMDQx MzsNCisgICAgICAvKiBTaXplIG9mIHRoZSBmdWxsIGludDEzIGhhbmRsZXIgImJ1bmRsZSIsIGlu Y2x1ZGluZyBjb2RlIGFuZCBtYXAuICAqLw0KKyAgICAgIGdydWJfc2l6ZV90IHRvdGFsX3NpemU7 DQorICAgICAgLyogVGhlIGZvcm1lciwgY2VpbC1yb3VuZGVkIHRvIEtpQi4gICovDQorICAgICAg Z3J1Yl91aW50MTZfdCBwYXlsb2FkX3NpemVrYjsNCisgICAgICAvKiBCYXNlIGFkZHJlc3Mgb2Yg dGhlIHNwYWNlIHJlc2VydmVkIGZvciB0aGUgaGFuZGxlciBidW5kbGUuICAqLw0KKyAgICAgIGdy dWJfdWludDhfdCAqaGFuZGxlcl9iYXNlOw0KKyAgICAgIC8qIEFkZHJlc3Mgb2YgdGhlIG1hcCB3 aXRoaW4gdGhlIGRlcGxveWVkIGJ1bmRsZS4gICovDQorICAgICAgaW50MTNtYXBfbm9kZV90ICpo YW5kbGVyX21hcDsNCisgICAgICAvKiBSZWFsIG1vZGUgSVZUIGVudHJ5IChzZWc6b2ZmIGZhciBw b2ludGVyKSBmb3IgdGhlIG5ldyBoYW5kbGVyLiAgKi8NCisgICAgICBncnViX3VpbnQzMl90IGl2 dGVudHJ5Ow0KKw0KKyAgICAgIGdydWJfZHByaW50ZiAoTU9ETkFNRSwgIkluc3RhbGxpbmcgaW50 MTNoIGhhbmRsZXIuLi5cbiIpOw0KKyAgICAgIA0KKyAgICAgIC8qIFNhdmUgdGhlIHBvaW50ZXIg dG8gdGhlIG9sZCBoYW5kbGVyLiAgKi8NCisgICAgICBncnViX2RyaXZlbWFwX2ludDEzX29sZGhh bmRsZXIgPSAqaXZ0c2xvdDsNCisgICAgICBncnViX2RwcmludGYgKE1PRE5BTUUsICJPbGQgaW50 MTMgaGFuZGxlciBhdCAlMDR4OiUwNHhcbiIsDQorICAgICAgICAgICAgICAgICAgICAoZ3J1Yl9k cml2ZW1hcF9pbnQxM19vbGRoYW5kbGVyID4+IDE2KSAmIDB4MGZmZmYsDQorICAgICAgICAgICAg ICAgICAgICBncnViX2RyaXZlbWFwX2ludDEzX29sZGhhbmRsZXIgJiAweDBmZmZmKTsNCisNCisg ICAgICAvKiBSZXNlcnZlIGEgc2VjdGlvbiBvZiBjb252ZW50aW9uYWwgbWVtb3J5IGFzICJCSU9T IG1lbW9yeSIgZm9yIGhhbmRsZXIuICAqLw0KKyAgICAgIGdydWJfZHByaW50ZiAoTU9ETkFNRSwg IlRvcCBvZiBjb252ZW50aW9uYWwgbWVtb3J5OiAldSBLaUJcbiIsICpicGFfZnJlZWtiKTsNCisg ICAgICB0b3RhbF9zaXplID0gZ3J1Yl9kcml2ZW1hcF9pbnQxM19zaXplDQorICAgICAgICAgICAg ICAgICAgICsgKGVudHJpZXMgKyAxKSAqIHNpemVvZihpbnQxM21hcF9ub2RlX3QpOw0KKyAgICAg IHBheWxvYWRfc2l6ZWtiID0gKHRvdGFsX3NpemUgPj4gMTApICsNCisgICAgICAgICAgICAgICAg ICAgICAgICgoKHRvdGFsX3NpemUgJSAxMDI0KSA9PSAwKSA/IDAgOiAxKTsNCisgICAgICBpZiAo KCpicGFfZnJlZWtiIC0gcGF5bG9hZF9zaXpla2IpIDwgTUlOX0ZSRUVfTUVNX0tCKQ0KKyAgICAg ICAgcmV0dXJuIGdydWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksICJyZWZ1c2luZyB0 byBpbnN0YWxsIg0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICJpbnQxMyBoYW5kbGVyLCBu b3QgZW5vdWdoIGZyZWUgbWVtb3J5IGFmdGVyIik7DQorICAgICAgZ3J1Yl9kcHJpbnRmIChNT0RO QU1FLCAiUGF5bG9hZCBpcyAldSBiIGxvbmcsIHJlc2VydmluZyAldSBLYlxuIiwNCisgICAgICAg ICAgICAgICAgICAgIHRvdGFsX3NpemUsIHBheWxvYWRfc2l6ZWtiKTsNCisgICAgICAqYnBhX2Zy ZWVrYiAtPSBwYXlsb2FkX3NpemVrYjsNCisNCisgICAgICAvKiBDb3B5IGludDEzaCBoYW5kbGVy IGJ1bmRsZSB0byByZXNlcnZlZCBhcmVhLiAgKi8NCisgICAgICBoYW5kbGVyX2Jhc2UgPSAoZ3J1 Yl91aW50OF90KikoKmJwYV9mcmVla2IgPDwgMTApOw0KKyAgICAgIGdydWJfZHByaW50ZiAoTU9E TkFNRSwgIkNvcHlpbmcgaW50MTMgaGFuZGxlciB0bzogJXBcbiIsIGhhbmRsZXJfYmFzZSk7DQor ICAgICAgZ3J1Yl9tZW1jcHkgKGhhbmRsZXJfYmFzZSwgJmdydWJfZHJpdmVtYXBfaW50MTNfaGFu ZGxlcl9iYXNlLA0KKyAgICAgICAgICAgICAgICAgICBncnViX2RyaXZlbWFwX2ludDEzX3NpemUp Ow0KKw0KKyAgICAgIC8qIENvcHkgdGhlIG1hcHBpbmdzIHRvIHRoZSByZXNlcnZlZCBhcmVhLiAg Ki8NCisgICAgICBjdXJlbnRyeSA9IGRyaXZlbWFwOw0KKyAgICAgIGdydWJfc2l6ZV90IGk7DQor ICAgICAgaGFuZGxlcl9tYXAgPSAoaW50MTNtYXBfbm9kZV90KikNCisgICAgICAgICAgICAgICAg ICAgIElOVDEzSF9UT05FV0FERFIgKCZncnViX2RyaXZlbWFwX2ludDEzX21hcHN0YXJ0KTsNCisg ICAgICBncnViX2RwcmludGYgKE1PRE5BTUUsICJUYXJnZXQgbWFwIGF0ICVwLCBjb3B5aW5nIG1h cHBpbmdzLi4uXG4iLCBoYW5kbGVyX21hcCk7DQorICAgICAgZm9yIChpID0gMDsgaSA8IGVudHJp ZXMgJiYgY3VyZW50cnk7IGkrKywgY3VyZW50cnkgPSBjdXJlbnRyeS0+bmV4dCkNCisgICAgICAg IHsNCisgICAgICAgICAgaGFuZGxlcl9tYXBbaV0uZGlza251bSA9IGN1cmVudHJ5LT5uZXdkcml2 ZTsNCisgICAgICAgICAgaGFuZGxlcl9tYXBbaV0ubWFwdG8gPSBjdXJlbnRyeS0+cmVkaXJ0bzsN CisgICAgICAgICAgZ3J1Yl9kcHJpbnRmIChNT0ROQU1FLCAiXHQjJWQ6IDB4JTAyeCA8LSAweCUw MnhcbiIsIGksDQorICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcl9tYXBbaV0uZGlza251 bSwgaGFuZGxlcl9tYXBbaV0ubWFwdG8pOw0KKyAgICAgICAgfQ0KKyAgICAgIC8qIFNpZ25hbCBl bmQtb2YtbWFwLiAgKi8NCisgICAgICBoYW5kbGVyX21hcFtpXS5kaXNrbnVtID0gMDsNCisgICAg ICBoYW5kbGVyX21hcFtpXS5tYXB0byA9IDA7DQorICAgICAgZ3J1Yl9kcHJpbnRmIChNT0ROQU1F LCAiXHQjJWQ6IDB4JTAyeCA8LSAweCUwMnggKGVuZClcbiIsIGksDQorICAgICAgICAgICAgICAg ICAgICBoYW5kbGVyX21hcFtpXS5kaXNrbnVtLCBoYW5kbGVyX21hcFtpXS5tYXB0byk7DQorDQor ICAgICAgLyogSW5zdGFsbCBvdXIgZnVuY3Rpb24gYXMgdGhlIGludDEzaCBoYW5kbGVyIGluIHRo ZSBJVlQuICAqLw0KKyAgICAgIGl2dGVudHJ5ID0gKChncnViX3VpbnQzMl90KWhhbmRsZXJfYmFz ZSkgPDwgMTI7IC8qIFNlZ21lbnQgYWRkcmVzcy4gICovDQorICAgICAgaXZ0ZW50cnkgfD0gKGdy dWJfdWludDE2X3QpIElOVDEzSF9PRkZTRVQoJmdydWJfZHJpdmVtYXBfaW50MTNfaGFuZGxlcik7 DQorICAgICAgZ3J1Yl9kcHJpbnRmIChNT0ROQU1FLCAiTmV3IGludDEzIGhhbmRsZXIgSVZUIHBv aW50ZXI6ICUwNHg6JTA0eFxuIiwNCisgICAgICAgICAgICAgICAgICAgIChpdnRlbnRyeSA+PiAx NikgJiAweDBmZmZmLCBpdnRlbnRyeSAmIDB4MGZmZmYpOw0KKyAgICAgICppdnRzbG90ID0gaXZ0 ZW50cnk7DQorICAgICAgDQorICAgICAgcmV0dXJuIEdSVUJfRVJSX05PTkU7DQorICAgIH0NCit9 DQorDQorR1JVQl9NT0RfSU5JVCAoZHJpdmVtYXApDQorew0KKyAgKHZvaWQpIG1vZDsJCQkvKiBT dG9wIHdhcm5pbmcuICAqLw0KKyAgZ3J1Yl9yZWdpc3Rlcl9jb21tYW5kIChNT0ROQU1FLCBncnVi X2NtZF9kcml2ZW1hcCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgR1JVQl9DT01NQU5EX0ZM QUdfQk9USCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgTU9ETkFNRSAiIC1sIHwgLXIgfCBb LXNdIGdydWJkZXYgYmlvc2Rpc2siLA0KKyAgICAgICAgICAgICAgICAgICAgICAgICAiTWFuYWdl IHRoZSBCSU9TIGRyaXZlIG1hcHBpbmdzIiwgb3B0aW9ucyk7DQorICBpbnN0aGFuZGxlcl9ob29r ID0gZ3J1Yl9sb2FkZXJfcmVnaXN0ZXJfcHJlYm9vdCAoJmluc3RhbGxfaW50MTNfaGFuZGxlciwg MSk7DQorfQ0KKw0KK0dSVUJfTU9EX0ZJTkkgKGRyaXZlbWFwKQ0KK3sNCisgIGdydWJfbG9hZGVy X3VucmVnaXN0ZXJfcHJlYm9vdCAoaW5zdGhhbmRsZXJfaG9vayk7DQorICBpbnN0aGFuZGxlcl9o b29rID0gMDsNCisgIGdydWJfdW5yZWdpc3Rlcl9jb21tYW5kIChNT0ROQU1FKTsNCit9DQorDQpJ bmRleDogY29tbWFuZHMvaTM4Ni9wYy9kcml2ZW1hcF9pbnQxM2guUw0KPT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0t IGNvbW1hbmRzL2kzODYvcGMvZHJpdmVtYXBfaW50MTNoLlMJKHJldmlzacOzbjogMCkNCisrKyBj b21tYW5kcy9pMzg2L3BjL2RyaXZlbWFwX2ludDEzaC5TCShyZXZpc2nDs246IDApDQpAQCAtMCww ICsxLDEyMSBAQA0KKy8qDQorICogIEdSVUIgIC0tICBHUmFuZCBVbmlmaWVkIEJvb3Rsb2FkZXIN CisgKiAgQ29weXJpZ2h0IChDKSAxOTk5LDIwMDAsMjAwMSwyMDAyLDIwMDMsMjAwNSwyMDA2LDIw MDcsMjAwOCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4NCisgKg0KKyAqICBHUlVCIGlz IGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkNCisg KiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkNCisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgZWl0aGVy IHZlcnNpb24gMyBvZiB0aGUgTGljZW5zZSwgb3INCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4NCisgKg0KKyAqICBHUlVCIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsDQorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorICogIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUNCisgKiAgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisgKg0KKyAqICBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZQ0KKyAqICBhbG9uZyB3aXRoIEdSVUIuICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUu b3JnL2xpY2Vuc2VzLz4uDQorICovDQorDQorDQorLyoNCisgKiBOb3RlOiBUaGVzZSBmdW5jdGlv bnMgZGVmaW5lZCBpbiB0aGlzIGZpbGUgbWF5IGJlIGNhbGxlZCBmcm9tIEMuDQorICogICAgICAg QmUgY2FyZWZ1bCBvZiB0aGF0IHlvdSBtdXN0IG5vdCBtb2RpZnkgc29tZSByZWdpc3RlcnMuIFF1 b3RlDQorICogICAgICAgZnJvbSBnY2MtMi45NS4yL2djYy9jb25maWcvaTM4Ni9pMzg2Lmg6DQor DQorICAgMSBmb3IgcmVnaXN0ZXJzIG5vdCBhdmFpbGFibGUgYWNyb3NzIGZ1bmN0aW9uIGNhbGxz Lg0KKyAgIFRoZXNlIG11c3QgaW5jbHVkZSB0aGUgRklYRURfUkVHSVNURVJTIGFuZCBhbHNvIGFu eQ0KKyAgIHJlZ2lzdGVycyB0aGF0IGNhbiBiZSB1c2VkIHdpdGhvdXQgYmVpbmcgc2F2ZWQuDQor ICAgVGhlIGxhdHRlciBtdXN0IGluY2x1ZGUgdGhlIHJlZ2lzdGVycyB3aGVyZSB2YWx1ZXMgYXJl IHJldHVybmVkDQorICAgYW5kIHRoZSByZWdpc3RlciB3aGVyZSBzdHJ1Y3R1cmUtdmFsdWUgYWRk cmVzc2VzIGFyZSBwYXNzZWQuDQorICAgQXNpZGUgZnJvbSB0aGF0LCB5b3UgY2FuIGluY2x1ZGUg YXMgbWFueSBvdGhlciByZWdpc3RlcnMgYXMgeW91IGxpa2UuDQorDQorICBheCxkeCxjeCxieCxz aSxkaSxicCxzcCxzdCxzdDEsc3QyLHN0MyxzdDQsc3Q1LHN0NixzdDcsYXJnDQoreyAgMSwgMSwg MSwgMCwgMCwgMCwgMCwgMSwgMSwgIDEsICAxLCAgMSwgIDEsICAxLCAgMSwgIDEsICAxIH0NCisg Ki8NCisNCisvKg0KKyAqIE5vdGU6IEdSVUIgaXMgY29tcGlsZWQgd2l0aCB0aGUgb3B0aW9ucyAt bXJ0ZCBhbmQgLW1yZWdwYXJtPTMuDQorICogICAgICAgU28gdGhlIGZpcnN0IHRocmVlIGFyZ3Vt ZW50cyBhcmUgcGFzc2VkIGluICVlYXgsICVlZHgsIGFuZCAlZWN4LA0KKyAqICAgICAgIHJlc3Bl Y3RpdmVseSwgYW5kIGlmIGEgZnVuY3Rpb24gaGFzIGEgZml4ZWQgbnVtYmVyIG9mIGFyZ3VtZW50 cw0KKyAqICAgICAgIGFuZCB0aGUgbnVtYmVyIGlmIGdyZWF0ZXIgdGhhbiB0aHJlZSwgdGhlIGZ1 bmN0aW9uIG11c3QgcmV0dXJuDQorICogICAgICAgd2l0aCAicmV0ICROIiB3aGVyZSBOIGlzICgo dGhlIG51bWJlciBvZiBhcmd1bWVudHMpIC0gMykgKiA0Lg0KKyAqLw0KKw0KKyNpbmNsdWRlIDxn cnViL3N5bWJvbC5oPg0KKw0KKyNkZWZpbmUgR1JVQl9EUklWRU1BUF9JTlQxM0hfT0ZGU0VUKHgp ICgoeCkgLSBncnViX2RyaXZlbWFwX2ludDEzX2hhbmRsZXJfYmFzZSkNCisNCisvKiBDb3B5IHN0 YXJ0cyBoZXJlLiAgV2hlbiBkZXBsb3llZCwgdGhpcyBsYWJlbCBtdXN0IGJlIHNlZ21lbnQtYWxp Z25lZC4gICovDQorVkFSSUFCTEUoZ3J1Yl9kcml2ZW1hcF9pbnQxM19oYW5kbGVyX2Jhc2UpDQor DQorLyogRmFyIHBvaW50ZXIgdG8gdGhlIG9sZCBoYW5kbGVyLiAgU3RvcmVkIGFzIGEgQ1M6SVAg aW4gdGhlIHN0eWxlIG9mIHJlYWwtbW9kZQ0KKyAgIElWVCBlbnRyaWVzICh0aHVzIFBJOlNDIGlu IG1lbSkuICAqLw0KK1ZBUklBQkxFKGdydWJfZHJpdmVtYXBfaW50MTNfb2xkaGFuZGxlcikNCisg IC53b3JkIDB4ZGVhZCwgMHhiZWVmDQorDQorLyogRHJpdmVtYXAgbW9kdWxlIGJ1bmRsZSAtIElO VCAxM2ggaGFuZGxlciAtIEJJT1MgSEQgbWFwICovDQorLyogV2UgbmVlZCB0byB1c2UgcmVsYXRp dmUgYWRkcmVzc2luZywgYW5kIHdpdGggQ1MgdG8gdG9wIGl0IGFsbCwgc2luY2Ugd2UNCisgICBt dXN0IG1ha2UgYXMgZmV3IGNoYW5nZXMgdG8gdGhlIHJlZ2lzdGVycyBhcyBwb3NzaWJsZS4gIElQ LXJlbGF0aXZlDQorICAgYWRkcmVzc2luZyBsaWtlIG9uIGFtZDY0IHdvdWxkIG1ha2UgbGlmZSB3 YXkgZWFzaWVyIGhlcmUuICovDQorLmNvZGUxNg0KK0ZVTkNUSU9OKGdydWJfZHJpdmVtYXBfaW50 MTNfaGFuZGxlcikNCisgIHB1c2ggJWJwDQorICBtb3YgJXNwLCAlYnANCisgIHB1c2ggJWF4ICAv KiBXZSdsbCBuZWVkIGl0IGxhdGVyIHRvIGRldGVybWluZSB0aGUgdXNlZCBCSU9TIGZ1bmN0aW9u LiAgKi8NCisNCisgIC8qIE1hcCB0aGUgZHJpdmUgbnVtYmVyIChhbHdheXMgaW4gREw/KS4gICov DQorICBwdXNoICVheA0KKyAgcHVzaCAlYngNCisgIHB1c2ggJXNpDQorICBtb3YgJEdSVUJfRFJJ VkVNQVBfSU5UMTNIX09GRlNFVChncnViX2RyaXZlbWFwX2ludDEzX21hcHN0YXJ0KSwgJWJ4DQor ICB4b3IgJXNpLCAlc2kNCisxOm1vdncgJWNzOiglYngsJXNpKSwgJWF4DQorICBjbXAgJWFoLCAl YWwNCisgIGp6IDNmIC8qIERSVj1EU1QgPT4gbWFwIGVuZCAtIGRyaXZlIG5vdCByZW1hcHBlZCwg bGVhdmUgREwgYXMtaXMuICAqLw0KKyAgY21wICVkbCwgJWFsDQorICBqeiAyZiAvKiBGb3VuZCAt IGRyaXZlIHJlbWFwcGVkLCBtb2RpZnkgREwuICAqLw0KKyAgYWRkICQyLCAlc2kNCisgIGptcCAx YiAvKiBOb3QgZm91bmQsIGJ1dCBtb3JlIHJlbWFpbmluZywgbG9vcC4gICovDQorMjptb3YgJWFo LCAlZGwNCiszOnBvcCAlc2kNCisgIHBvcCAlYngNCisgIHhjaGd3ICVheCwgLTQoJWJwKSAvKiBS ZWNvdmVyIHRoZSBvbGQgQVggYW5kIHNhdmUgdGhlIG1hcCBlbnRyeSBmb3IgbGF0ZXIuICAqLw0K KyAgDQorICBwdXNoICVicA0KKyAgLyogU2ltdWxhdGUgaW50ZXJydXB0IGNhbGw6IHB1c2ggZmxh Z3MgYW5kIGRvIGEgZmFyIGNhbGwgaW4gb3JkZXIgdG8gc2V0DQorICAgICB0aGUgc3RhY2sgdGhl IHdheSB0aGUgb2xkIGhhbmRsZXIgZXhwZWN0cyBpdCBzbyB0aGF0IGl0cyBpcmV0IHdvcmtzLiAg Ki8NCisgIHB1c2ggNiglYnApDQorICBtb3Z3ICglYnApLCAlYnAgIC8qIFJlc3RvcmUgdGhlIGNh bGxlciBCUCAoaXMgdGhpcyBuZWVkZWQgYW5kL29yIHNlbnNpYmxlPykuICAqLw0KKyAgbGNhbGwg KiVjczpHUlVCX0RSSVZFTUFQX0lOVDEzSF9PRkZTRVQoZ3J1Yl9kcml2ZW1hcF9pbnQxM19vbGRo YW5kbGVyKQ0KKyAgcG9wICVicCAvKiBUaGUgcHVzaGVkIGZsYWdzIHdlcmUgcmVtb3ZlZCBieSBp cmV0LiAgKi8NCisgIC8qIFNldCB0aGUgc2F2ZWQgZmxhZ3MgdG8gd2hhdCB0aGUgaW50MTNoIGhh bmRsZXIgcmV0dXJuZWQuICAqLw0KKyAgcHVzaCAlYXgNCisgIHB1c2hmDQorICBwb3AgJWF4DQor ICBtb3Z3ICVheCwgNiglYnApDQorICBwb3AgJWF4DQorDQorICAvKiBSZXZlcnNlIG1hcCBhbnkg cmV0dXJuZWQgZHJpdmUgbnVtYmVyIGlmIHRoZSBkYXRhIHJldHVybmVkIGluY2x1ZGVzIGl0LiAg DQorICAgICBUaGUgb25seSBmdW5jIHRoYXQgZG9lcyB0aGlzIHNlZW1zIHRvIGJlIG9yaWdBSCA9 IDB4MDgsIGJ1dCBtYW55IEJJT1MNCisgICAgIHJlZnMgc2F5IHJldERMID0gIyBvZiBkcml2ZXMg Y29ubmVjdGVkLiAgSG93ZXZlciwgdGhlIEdSVUIgTGVnYWN5IGNvZGUNCisgICAgIHRyZWF0cyB0 aGlzIGFzIHRoZSBfZHJpdmUgbnVtYmVyXyBhbmQgInVuZG9lcyIgdGhlIHJlbWFwcGluZy4gIFRo dXMsDQorICAgICB0aGlzIHNlY3Rpb24gaGFzIGJlZW4gZGlzYWJsZWQgZm9yIHRlc3RpbmcgaWYg aXQncyByZXF1aXJlZC4gICovDQorIyAgY21wYiAkMHgwOCwgLTEoJWJwKSAvKiBDYWxsZXIncyBB SC4gICovDQorIyAgam5lIDRmDQorIyAgeGNoZ3cgJWF4LCAtNCglYnApIC8qIE1hcCBlbnRyeSB1 c2VkLiAgKi8NCisjICBjbXAgJWFoLCAlYWwgIC8qIERSVj1EU1QgPT4gZHJpdmUgbm90IHJlbWFw cGVkLiAgKi8NCisjICBqZSA0Zg0KKyMgIG1vdiAlYWgsICVkbCAgLyogVW5kbyByZW1hcC4gICov DQorDQorNDptb3YgJWJwLCAlc3ANCisgIHBvcCAlYnANCisgIGlyZXQNCisvKiBUaGlzIGxhYmVs IE1VU1QgYmUgYXQgdGhlIGVuZCBvZiB0aGUgY29waWVkIGJsb2NrLCBzaW5jZSB0aGUgaW5zdGFs bGVyIGNvZGUNCisgICByZXNlcnZlcyBhZGRpdGlvbmFsIHNwYWNlIGZvciBtYXBwaW5ncyBhdCBy dW50aW1lIGFuZCBjb3BpZXMgdGhlbSBvdmVyIGl0LiAgKi8NCisuYWxpZ24gMg0KK1ZBUklBQkxF KGdydWJfZHJpdmVtYXBfaW50MTNfbWFwc3RhcnQpDQorLyogQ29weSBzdG9wcyBoZXJlLiAgKi8N CisuY29kZTMyDQorVkFSSUFCTEUoZ3J1Yl9kcml2ZW1hcF9pbnQxM19zaXplKQ0KKyAgLndvcmQg R1JVQl9EUklWRU1BUF9JTlQxM0hfT0ZGU0VUKGdydWJfZHJpdmVtYXBfaW50MTNfc2l6ZSkNCisN CkluZGV4OiBjb25mL2kzODYtcGMucm1rDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gY29uZi9pMzg2LXBjLnJt awkocmV2aXNpw7NuOiAxODAyKQ0KKysrIGNvbmYvaTM4Ni1wYy5ybWsJKGNvcGlhIGRlIHRyYWJh am8pDQpAQCAtMTYzLDcgKzE2Myw3IEBADQogCXZiZS5tb2QgdmJldGVzdC5tb2QgdmJlaW5mby5t b2QgdmlkZW8ubW9kIGdmeHRlcm0ubW9kIFwNCiAJdmlkZW90ZXN0Lm1vZCBwbGF5Lm1vZCBiaXRt YXAubW9kIHRnYS5tb2QgY3B1aWQubW9kIHNlcmlhbC5tb2QJXA0KIAlhdGEubW9kIHZnYS5tb2Qg bWVtZGlzay5tb2QganBlZy5tb2QgcG5nLm1vZCBwY2kubW9kIGxzcGNpLm1vZCBcDQotCWFvdXQu bW9kIF9ic2QubW9kIGJzZC5tb2QgcHhlLm1vZCBweGVjbWQubW9kDQorCWFvdXQubW9kIF9ic2Qu bW9kIGJzZC5tb2QgcHhlLm1vZCBweGVjbWQubW9kIGRyaXZlbWFwLm1vZA0KIA0KICMgRm9yIGJp b3NkaXNrLm1vZC4NCiBiaW9zZGlza19tb2RfU09VUkNFUyA9IGRpc2svaTM4Ni9wYy9iaW9zZGlz ay5jDQpAQCAtMzQwLDQgKzM0MCwxMiBAQA0KIHB4ZWNtZF9tb2RfQ0ZMQUdTID0gJChDT01NT05f Q0ZMQUdTKQ0KIHB4ZWNtZF9tb2RfTERGTEFHUyA9ICQoQ09NTU9OX0xERkxBR1MpDQogDQorIyBG b3IgZHJpdmVtYXAubW9kLg0KK2RyaXZlbWFwX21vZF9IRUFERVJTID0gbWFjaGluZS9kcml2ZW1h cC5oDQorZHJpdmVtYXBfbW9kX1NPVVJDRVMgPSBjb21tYW5kcy9pMzg2L3BjL2RyaXZlbWFwLmMg XA0KKyAgICAgICAgICAgICAgICAgICAgICAgY29tbWFuZHMvaTM4Ni9wYy9kcml2ZW1hcF9pbnQx M2guUw0KK2RyaXZlbWFwX21vZF9BU0ZMQUdTID0gJChDT01NT05fQVNGTEFHUykNCitkcml2ZW1h cF9tb2RfQ0ZMQUdTID0gJChDT01NT05fQ0ZMQUdTKQ0KK2RyaXZlbWFwX21vZF9MREZMQUdTID0g JChDT01NT05fTERGTEFHUykNCisNCiBpbmNsdWRlICQoc3JjZGlyKS9jb25mL2NvbW1vbi5taw0K SW5kZXg6IGluY2x1ZGUvZ3J1Yi9sb2FkZXIuaA0KPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIGluY2x1ZGUvZ3J1 Yi9sb2FkZXIuaAkocmV2aXNpw7NuOiAxODAyKQ0KKysrIGluY2x1ZGUvZ3J1Yi9sb2FkZXIuaAko Y29waWEgZGUgdHJhYmFqbykNCkBAIC0zNyw3ICszNywyMyBAQA0KIC8qIFVuc2V0IGN1cnJlbnQg bG9hZGVyLCBpZiBhbnkuICAqLw0KIHZvaWQgRVhQT1JUX0ZVTkMoZ3J1Yl9sb2FkZXJfdW5zZXQp ICh2b2lkKTsNCiANCi0vKiBDYWxsIHRoZSBib290IGhvb2sgaW4gY3VycmVudCBsb2FkZXIuIFRo aXMgbWF5IG9yIG1heSBub3QgcmV0dXJuLA0KK3R5cGVkZWYgc3RydWN0IGhvb2tsaXN0X25vZGUg KmdydWJfcHJlYm9vdF9ob29raWQ7DQorDQorLyogUmVnaXN0ZXIgYSBmdW5jdGlvbiB0byBiZSBj YWxsZWQgYmVmb3JlIHRoZSBsb2FkZXIgImJvb3QiIGZ1bmN0aW9uLiAgUmV0dXJucw0KKyAgIGFu IGlkIHRoYXQgY2FuIGJlIGxhdGVyIHVzZWQgdG8gdW5yZWdpc3RlciB0aGUgcHJlYm9vdCAoaS5l LiBvbiBtb2R1bGUNCisgICB1bmxvYWQpLiAgSWYgQUJPUlRfT05fRVJST1IgaXMgc2V0LCB0aGUg Ym9vdCBzZXF1ZW5jZSB3aWxsIGFib3J0IGlmIGFueSBvZg0KKyAgIHRoZSByZWdpc3RlcmVkIGZ1 bmN0aW9ucyByZXR1cm4gYW55dGhpbmcgZWxzZSB0aGFuIEdSVUJfRVJSX05PTkUuDQorICAgT24g ZXJyb3IsIHRoZSByZXR1cm4gdmFsdWUgd2lsbCBjb21wYXJlIGVxdWFsIHRvIDAgYW5kIHRoZSBl cnJvciBpbmZvcm1hdGlvbg0KKyAgIHdpbGwgYmUgYXZhaWxhYmxlIGluIGdydWJfZXJybm8uICBI b3dldmVyLCBpZiB0aGUgY2FsbCBpcyBzdWNjZXNzZnVsIHRoYXQNCisgICB2YXJpYWJsZSBpcyBf bm90XyBtb2RpZmllZC4gKi8NCitncnViX3ByZWJvb3RfaG9va2lkIEVYUE9SVF9GVU5DKGdydWJf bG9hZGVyX3JlZ2lzdGVyX3ByZWJvb3QpDQorICAgICAgICAgICAoZ3J1Yl9lcnJfdCAoKmhvb2sp ICh2b2lkKSwgaW50IGFib3J0X29uX2Vycm9yKTsNCisNCisvKiBVbnJlZ2lzdGVyIGEgcHJlYm9v dCBob29rIGJ5IHRoZSBpZCByZXR1cm5lZCBieSBsb2FkZXJfcmVnaXN0ZXJfcHJlYm9vdC4gIA0K KyAgIFRoaXMgZnVuY3Rpb25zIGJlY29tZXMgYSBuby1vcCBpZiBubyBzdWNoIGZ1bmN0aW9uIGlz IHJlZ2lzdGVyZWQgKi8NCit2b2lkIEVYUE9SVF9GVU5DKGdydWJfbG9hZGVyX3VucmVnaXN0ZXJf cHJlYm9vdCkgKGdydWJfcHJlYm9vdF9ob29raWQgaWQpOw0KKw0KKy8qIENhbGwgdGhlIGJvb3Qg aG9vayBpbiBjdXJyZW50IGxvYWRlci4gIFRoaXMgbWF5IG9yIG1heSBub3QgcmV0dXJuLA0KICAg IGRlcGVuZGluZyBvbiB0aGUgc2V0dGluZyBieSBncnViX2xvYWRlcl9zZXQuICAqLw0KIGdydWJf ZXJyX3QgRVhQT1JUX0ZVTkMoZ3J1Yl9sb2FkZXJfYm9vdCkgKHZvaWQpOw0KIA0KSW5kZXg6IGlu Y2x1ZGUvZ3J1Yi9pMzg2L3BjL2RyaXZlbWFwLmgNCj09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBpbmNsdWRlL2dy dWIvaTM4Ni9wYy9kcml2ZW1hcC5oCShyZXZpc2nDs246IDApDQorKysgaW5jbHVkZS9ncnViL2kz ODYvcGMvZHJpdmVtYXAuaAkocmV2aXNpw7NuOiAwKQ0KQEAgLTAsMCArMSw0MiBAQA0KKy8qIGRy aXZlbWFwLmggLSBjb21tYW5kIHRvIG1hbmFnZSB0aGUgQklPUyBkcml2ZSBtYXBwaW5ncy4gICov DQorLyoNCisgKiAgR1JVQiAgLS0gIEdSYW5kIFVuaWZpZWQgQm9vdGxvYWRlcg0KKyAqICBDb3B5 cmlnaHQgKEMpIDIwMDggIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLg0KKyAqDQorICog IEdSVUIgaXMgZnJlZSBzb2Z0d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1v ZGlmeQ0KKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBM aWNlbnNlIGFzIHB1Ymxpc2hlZCBieQ0KKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u LCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcg0KKyAqICAoYXQgeW91ciBvcHRp b24pIGFueSBsYXRlciB2ZXJzaW9uLg0KKyAqDQorICogIEdSVUIgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YNCisgKiAgTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQ0K KyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKyAqDQor ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlDQorICogIGFsb25nIHdpdGggR1JVQi4gIElmIG5vdCwgc2VlIDxodHRwOi8v d3d3LmdudS5vcmcvbGljZW5zZXMvPi4NCisgKi8NCisNCisjaWZuZGVmIEdSVUJfRFJJVkVNQVBf TUFDSElORV9IRUFERVINCisjZGVmaW5lIEdSVUJfRFJJVkVNQVBfTUFDSElORV9IRUFERVIJMQ0K Kw0KKyNpbmNsdWRlIDxncnViL3R5cGVzLmg+DQorDQorLyogUmVhbG1vZGUgZmFyIHB0ciAoMiAq IDE2YikgdG8gdGhlIHByZXZpb3VzIElOVDEzaCBoYW5kbGVyLiAgKi8NCitleHRlcm4gZ3J1Yl91 aW50MzJfdCBncnViX2RyaXZlbWFwX2ludDEzX29sZGhhbmRsZXI7DQorLyogU2l6ZSBvZiB0aGUg SU5UMTNoIGhhbmRsZXIgYnVuZGxlIChjb2RlK2RhdGEpIHRvIGJlIGRlcGxveWVkLiAgKi8NCitl eHRlcm4gZ3J1Yl91aW50MTZfdCBncnViX2RyaXZlbWFwX2ludDEzX3NpemU7DQorDQorLyogVGhp cyB0eXBlIGlzIHVzZWQgZm9yIGltcG9ydGVkIGFzc2VtYmx5IGxhYmVscywgdGFrZXMgbm8gc3Rv cmFnZSBhbmQgaXMgb25seQ0KKyAgIHVzZWQgdG8gdGFrZSB0aGUgc3ltYm9sIGFkZHJlc3Mgd2l0 aCAmbGFiZWwuICBEbyBOT1QgcHV0IHZvaWQqIGhlcmUuICAqLw0KK3R5cGVkZWYgdm9pZCBncnVi X3N5bWJvbF90Ow0KKw0KKy8qIFN0YXJ0IG9mIHRoZSBoYW5kbGVyIGJ1bmRsZS4gICovDQorZXh0 ZXJuIGdydWJfc3ltYm9sX3QgZ3J1Yl9kcml2ZW1hcF9pbnQxM19oYW5kbGVyX2Jhc2U7DQorLyog U3RhcnQgb2YgdGhlIGRyaXZlIG1hcHBpbmdzIGFyZWEgKHNwYWNlIHJlc2VydmVkIGF0IHJ1bnRp bWUpLiAgKi8NCitleHRlcm4gZ3J1Yl9zeW1ib2xfdCBncnViX2RyaXZlbWFwX2ludDEzX21hcHN0 YXJ0Ow0KKy8qIFRoZSBhc3NlbWJseSBmdW5jdGlvbiB0byByZXBsYWNlIHRoZSBvbGQgSU5UMTNo IGhhbmRsZXIuIEl0IHNob3VsZCBub3QgYmUNCisgICBjYWxsZWQgYmVjYXVzZSBpdCBkb2VzIG5v dCBmb2xsb3cgYW55IEMgY2FsbHNwZWNzIGFuZCByZXR1cm5zIHdpdGggSVJFVC4gICovDQorZXh0 ZXJuIGdydWJfc3ltYm9sX3QgZ3J1Yl9kcml2ZW1hcF9pbnQxM19oYW5kbGVyOw0KKw0KKyNlbmRp ZiAvKiAhIEdSVUJfRFJJVkVNQVBfTUFDSElORV9IRUFERVIgKi8NCkluZGV4OiBrZXJuL2xvYWRl ci5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09DQotLS0ga2Vybi9sb2FkZXIuYwkocmV2aXNpw7NuOiAxODAyKQ0KKysr IGtlcm4vbG9hZGVyLmMJKGNvcGlhIGRlIHRyYWJham8pDQpAQCAtNjEsMTEgKzYxLDg4IEBADQog ICBncnViX2xvYWRlcl9sb2FkZWQgPSAwOw0KIH0NCiANCitzdHJ1Y3QgaG9va2xpc3Rfbm9kZQ0K K3sNCisgIGdydWJfZXJyX3QgKCpob29rKSAodm9pZCk7DQorICBpbnQgYWJvcnRfb25fZXJyb3I7 DQorICBzdHJ1Y3QgaG9va2xpc3Rfbm9kZSAqbmV4dDsNCit9Ow0KKw0KK3N0YXRpYyBzdHJ1Y3Qg aG9va2xpc3Rfbm9kZSAqcHJlYm9vdF9ob29rcyA9IDA7DQorDQorZ3J1Yl9wcmVib290X2hvb2tp ZA0KK2dydWJfbG9hZGVyX3JlZ2lzdGVyX3ByZWJvb3QgKGdydWJfZXJyX3QgKCpob29rKSAodm9p ZCksIGludCBhYm9ydF9vbl9lcnJvcikNCit7DQorICBncnViX3ByZWJvb3RfaG9va2lkIG5ld2Vu dHJ5Ow0KKyAgaWYgKCFob29rKQ0KKyAgICB7DQorICAgICAgZ3J1Yl9lcnJvciAoR1JVQl9FUlJf QkFEX0FSR1VNRU5ULCAicHJlYm9vdCBob29rIG11c3Qgbm90IGJlIE5VTEwiKTsNCisgICAgICBy ZXR1cm4gMDsNCisgICAgfQ0KKyAgbmV3ZW50cnkgPSBncnViX21hbGxvYyAoc2l6ZW9mIChzdHJ1 Y3QgaG9va2xpc3Rfbm9kZSkpOw0KKyAgaWYgKCFuZXdlbnRyeSkNCisgICAgew0KKyAgICAgIGdy dWJfZXJyb3IgKEdSVUJfRVJSX09VVF9PRl9NRU1PUlksICJjYW5ub3QgYWxsb2MgYSBob29raW5m byBzdHJ1Y3R1cmUiKTsNCisgICAgICByZXR1cm4gMDsNCisgICAgfQ0KKyAgZWxzZQ0KKyAgICB7 DQorICAgICAgbmV3ZW50cnktPmhvb2sgPSBob29rOw0KKyAgICAgIG5ld2VudHJ5LT5hYm9ydF9v bl9lcnJvciA9IGFib3J0X29uX2Vycm9yOw0KKyAgICAgIG5ld2VudHJ5LT5uZXh0ID0gcHJlYm9v dF9ob29rczsNCisgICAgICBwcmVib290X2hvb2tzID0gbmV3ZW50cnk7DQorICAgICAgcmV0dXJu IG5ld2VudHJ5Ow0KKyAgICB9DQorfQ0KKw0KK3ZvaWQNCitncnViX2xvYWRlcl91bnJlZ2lzdGVy X3ByZWJvb3QgKGdydWJfcHJlYm9vdF9ob29raWQgaWQpDQorew0KKyAgZ3J1Yl9wcmVib290X2hv b2tpZCBlbnRyeSA9IDA7DQorICBncnViX3ByZWJvb3RfaG9va2lkIHNlYXJjaCA9IHByZWJvb3Rf aG9va3M7DQorICBncnViX3ByZWJvb3RfaG9va2lkIHByZXZpb3VzID0gMDsNCisNCisgIGlmIChp ZCA9PSAwKQ0KKyAgICByZXR1cm47DQorDQorICB3aGlsZSAoc2VhcmNoKQ0KKyAgICB7DQorICAg ICAgaWYgKHNlYXJjaCA9PSBpZCkNCisgICAgICAgIHsNCisgICAgICAgICAgZW50cnkgPSBzZWFy Y2g7DQorICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgfQ0KKyAgICAgIHByZXZpb3VzID0gc2Vh cmNoOw0KKyAgICAgIHNlYXJjaCA9IHNlYXJjaC0+bmV4dDsNCisgICAgfQ0KKw0KKyAgaWYgKGVu dHJ5KQ0KKyAgICB7DQorICAgICAgLyogUGF0Y2ggdGhlICJob2xlIiBpbiB0aGUgbGlzdCwgaWYg dGhlIGVudHJ5IHdhcyBpbiB0aGUgbWlkZGxlLA0KKyAgICAgICAgIG9yIHJlYXNzaWduIHRoZSBs aXN0IGhlYWQgaWYgdGhlIGVudHJ5IHdhcyB0aGUgZmlyc3QuICAqLw0KKyAgICAgIGlmIChwcmV2 aW91cykNCisgICAgICAgIHByZXZpb3VzLT5uZXh0ID0gZW50cnktPm5leHQ7DQorICAgICAgZWxz ZQ0KKyAgICAgICAgcHJlYm9vdF9ob29rcyA9IGVudHJ5LT5uZXh0Ow0KKyAgICAgIGdydWJfZnJl ZSAoZW50cnkpOw0KKyAgICB9DQorfQ0KKw0KIGdydWJfZXJyX3QNCiBncnViX2xvYWRlcl9ib290 ICh2b2lkKQ0KIHsNCisgIGdydWJfcHJlYm9vdF9ob29raWQgZW50cnkgPSBwcmVib290X2hvb2tz Ow0KKw0KICAgaWYgKCEgZ3J1Yl9sb2FkZXJfbG9hZGVkKQ0KICAgICByZXR1cm4gZ3J1Yl9lcnJv ciAoR1JVQl9FUlJfTk9fS0VSTkVMLCAibm8gbG9hZGVkIGtlcm5lbCIpOw0KKyAgDQorICB3aGls ZSAoZW50cnkpDQorICAgIHsNCisgICAgICBncnViX2Vycl90IHBvc3NpYmxlX2Vycm9yID0gZW50 cnktPmhvb2soKTsNCisgICAgICBpZiAocG9zc2libGVfZXJyb3IgIT0gR1JVQl9FUlJfTk9ORSAm JiBlbnRyeS0+YWJvcnRfb25fZXJyb3IpDQorICAgICAgICByZXR1cm4gcG9zc2libGVfZXJyb3I7 DQorICAgICAgZW50cnkgPSBlbnRyeS0+bmV4dDsNCisgICAgfQ0KIA0KICAgaWYgKGdydWJfbG9h ZGVyX25vcmV0dXJuKQ0KICAgICBncnViX21hY2hpbmVfZmluaSAoKTsNCj== --=-YXTNHuU0jh9b62UFA3sm-- --=-Ft28HZyk2fNJxr0KsfR+ 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) iQIVAwUASKLQmaSl+Fbdeo72AQLGJBAAiUUW5nTLvwJvWk/tsvaJF8L7EcuL0+Sl HVrJ6OD0YicI/89gjIrjpyeg1wsgSS6Rh6nUKeqk3LPjV2J/wTRiaBRiTlSILxRr D64DvNWa2f+6jXZt0WjFqRbDHoTaZ5HpoJAx5meGC3vpbvk9udM9bSoZICEurvTb I9RmwiMnQ7qSfRoyfny5DCy+BIoxvpekiA3LtbtZJHm0BM3q2WlR7Ys3PPymx2JU lt0dKrSforTC46SUycu822/ll/PbjxmZLBzfZf7FILw51CqMR7OM1m2nV4GedB4E Xca9YBd06jTBsW9E5u+EdWZvInQfE5XFYHnNotRRG3QSuhZ1ZDL7g1EyVKFnA+qv dNkX6M45VZhSFM1qfmaWP7BfehGedquEs0pd4OACg8z4VFTnIhOT99Gyc3Le4l2L NYrBb8Y3TbLPTXeg2RNaawcvEFXMNdfPv5nJ4kXNfKonjZzEuzyV4Qmpp2Zsy8tT 6/mWNvsVLul6WICsRpC0CJSSmXuMtqR3XFJ3mUYUp48USQP26cxvs1rqykSzfaFn wAOmIBoJd0lOSQ10O6b+jIMGO4irrMJDPzZFHoGCnv3scuscvWo0YDVkjHwPU2X9 YDSue0IhgbRy5z2IWFMdhR3XwLgRPnAcp7Otsf+n6yqx11oz3b2WqhwHpjRC6ySH 7uWBmEYqr3E= =XjmS -----END PGP SIGNATURE----- --=-Ft28HZyk2fNJxr0KsfR+--