From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1IqdpP-0006MH-QW for qemu-devel@nongnu.org; Fri, 09 Nov 2007 19:03:59 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1IqdpO-0006La-Gq for qemu-devel@nongnu.org; Fri, 09 Nov 2007 19:03:59 -0500 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1IqdpN-0006LA-Oa for qemu-devel@nongnu.org; Fri, 09 Nov 2007 19:03:57 -0500 Received: from ecfrec.frec.bull.fr ([129.183.4.8]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1IqdpL-0004qS-Od for qemu-devel@nongnu.org; Fri, 09 Nov 2007 19:03:57 -0500 Subject: Re: [Qemu-devel] [PATCH 1/3] Add args to -cdrom to define where is connected the cdrom From: Laurent Vivier In-Reply-To: <47324AFC.3080808@bellard.org> References: <11936114152690-git-send-email-Laurent.Vivier@bull.net> <11936114153499-git-send-email-Laurent.Vivier@bull.net> <20071029132525.GA7128@redhat.com> <4725E7ED.6050305@bull.net> <20071029143421.GD18384@networkno.de> <472B250C.4000709@bull.net> <47324AFC.3080808@bellard.org> Date: Sat, 10 Nov 2007 01:02:55 +0100 Message-Id: <1194652975.3583.12.camel@frecb07144> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-WtGzjXYKlqg28bgIuuB5" Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Fabrice Bellard Cc: qemu-devel@nongnu.org --=-WtGzjXYKlqg28bgIuuB5 Content-Type: multipart/mixed; boundary="=-EkdjUDYQJ4//ToTSSzHQ" --=-EkdjUDYQJ4//ToTSSzHQ Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Hi, you can find attached a patch trying to manage your comments. This patch adds parameter "-drive" and manages all drives type supported by qemu (ide, scsi, sd, mtd, floppy, pflash). It adds a DriveInfo structure to do that. It applies on top of patch I posted 2 days ago (http://article.gmane.org/gmane.comp.emulators.qemu/21011 ) All comments are welcome, Laurent Le jeudi 08 novembre 2007 =C3=A0 00:32 +0100, Fabrice Bellard a =C3=A9crit = : > Laurent Vivier wrote: > > Thiemo Seufer a =C3=A9crit : > >> Laurent Vivier wrote: > >>> Daniel P. Berrange a =C3=A9crit : > >>>> On Sun, Oct 28, 2007 at 11:43:33PM +0100, Laurent.Vivier@bull.net > >>>> wrote: > >>>>> From: Laurent Vivier > >>>>> > >>>>> This patch allows to define where is connected the CDROM device (bu= s, > >>>>> unit). > >>>>> It extends the "-cdrom" syntax to add these paramaters: > >>>>> > >>>>> -cdrom file[,if=3Dtype][,bus=3Dn][,unit=3Dm] > >>>>> > >>>>> where "type" defines the interface (by default, "ide") > >>>>> "n" defines the bus number (by default 1) > >>>>> "m" defines the unit number (by default 0) > >>>> Having a separately named arg just for CDROMs was always rather > >>>> odd/unhelpful. > >>>> I'd suggest that we leave all the -hda,hdb,hdc,-cdrom,-fda,-fdb etc > >>>> unchanged > >>>> and use the -disk for setting up all types of disks, floppys, > >>>> cdroms, etc. It > >>>> would just require one extra field for the -disk arg: > >>>> -disk file[,if=3Dtype][,bus=3Dn][,unit=3Dm][,mode=3Dmode] > >>>> where "type" defines the interface. [ide,scsi,fd] (by default, > >>>> "ide") > >>>> "n" defines the bus number (by default 1) > >>>> "m" defines the unit number (by default 0) > >>>> "mode" defines one of [disk,floppy,cdrom] > >>>> If we ever up able to emulate other types of SCSI / IDE devices > >>>> (tape drives, > >>>> cdr, dvd perhaps) then the 'mode' can easily be extended to cover th= em. > >>> I agree with that. And if everyone agrees I can modify patches to do > >>> that... > >> > >> Please go ahead. :-) > >=20 > > Well, it is done... is there someone that can comment them ? > > Or if they are perfect (as usual ;-) ) perhaps it could be included in > > CVS ? >=20 > I had rejected a similar patch in the past, but I agree that a -disk > command line option is needed. >=20 > A few remarks: >=20 > - Add a function in vl.c to add a disk so that all option handlers can > call it instead of doing pstrcpy(); nb_disk++. >=20 > - You replaced the constant "2" in many machines by MAX_IDE_BUS. It is > dangerous because each machine has its own constraints. >=20 > - Maybe the real option name could be "-drive" to insist on the fact > that a drive can be created without a disk in it ! Any more comments ? >=20 > - disk_init() should not modify its argument str. Moreover, maybe having > an explicit "file=3D" argument would be clearer in the case there is no > disk in the drive. >=20 > - While modifying the machine init function, you can suppress the > snapshot parameter. >=20 > - In disk_init(), you should factorize the bdrv_new() and bdrv_open() as > it is the same for all types. >=20 > - It could be simpler to export an array of structs containg a bdrv, > each one tagged with if, index and bus. Then each machine could call a > function to get the bdrv from the parameters "if", "index" and "bus". > For example, look at the NICInfo structure and do the same with a > structure DriveInfo... >=20 > If you prefer, you can resubmit a big patch with all the changes. >=20 > Regards, >=20 > Fabrice. --=20 ------------- Laurent.Vivier@bull.net -------------- "In short: just say NO TO DRUGS and maybe you won't end up like the Hurd people." -- Linus Torvald --=-EkdjUDYQJ4//ToTSSzHQ Content-Disposition: attachment; filename=drive-arg.patch Content-Type: text/x-patch; name=drive-arg.patch; charset=utf-8 Content-Transfer-Encoding: base64 VGhpcyBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IHBhcmFtZXRlciBhbGxvd2luZyB0byBkZWZpbmUg ZHJpdmVzLg0KDQpUaGUgbmV3IHBhcmFtZXRlciBpcyAiLWRyaXZlIjoNCg0KICAgIC1kcml2ZSBb ZmlsZT1maWxlXVssaWY9dHlwZV1bLGJ1cz1uXVssdW5pdD1tXVssbWVkaWE9ZF1bLGN5bHM9Yyxo ZWFkcz1oLHNlY3M9c1ssdHJhbnM9dF1dW3NuYXBzaG90PW9ufG9mZl0NCg0Kd2hlcmU6DQoNCiAg ICBmaWxlIGlzIHRoZSBkaXNrIGltYWdlDQogICAgdHlwZSBpcyB0aGUgaW50ZXJmYWNlIHR5cGUg KGlkZSwgc2NzaSwgc2QsIG10ZCwgZmxvcHB5LCBwZmxhc2gpDQogICAgbiBpcyB0aGUgYnVzIG51 bWJlciBvZiB0aGUgZ2l2ZW4gdHlwZQ0KICAgIG0gaXMgdGhlIHVuaXQgbnVtYmVyIG9uIHRoZSBn aXZlbiBidXMNCiAgICBkIGlzIHRoZSB0eXBlIG9mIHRoZSBtZWRpYSAoZGlzaywgY2Ryb20pDQog ICAgYyxoLHMsdCBhcmUgdGhlIHBhcmFtZXRlcnMgdXN1YWxseSBnaXZlbiBieSAtaGRhY2hzDQog ICAgc25hcHNob3QgYWxsb3dzIHRvIGVuYWJsZSBvciBub3QgdGhlIHNuYXBzaG90IGZvciB0aGlz IGRpc2sNCg0KIi1jZHJvbSBmaWxlIiBpcyBhbiBhbGlhcyBmb3IgIi1kcml2ZSBmaWxlPWZpbGUs YnVzPTEsdW5pdD0wLG1lZGlhPWNkcm9tIg0KIi1oZGEgZmlsZSIgaXMgYW4gYWxpYXMgZm9yICIt ZHJpdmUgZmlsZT1maWxlLGJ1cz0wLHVuaXQ9MCxtZWRpYT1kaXNrIg0KIi1oZGIgZmlsZSIgaXMg YW4gYWxpYXMgZm9yICItZHJpdmUgZmlsZT1maWxlLGJ1cz0wLHVuaXQ9MSxtZWRpYT1kaXNrIg0K Ii1oZGMgZmlsZSIgaXMgYW4gYWxpYXMgZm9yICItZHJpdmUgZmlsZT1maWxlLGJ1cz0xLHVuaXQ9 MCxtZWRpYT1kaXNrIg0KIi1oZGQgZmlsZSIgaXMgYW4gYWxpYXMgZm9yICItZHJpdmUgZmlsZT1m aWxlLGJ1cz0xLHVuaXQ9MSxtZWRpYT1kaXNrIg0KIi1oZGEgZmlsZSAtaGRhY2hzIGEsYixjIiBp cyBhbiBhbGlhcyBmb3IgDQogICAgICAgICAgICAgICAgICItZHJpdmUgZmlsZT1maWxlLGJ1cz0w LHVuaXQ9MCxjeWxzPWEsaGVhZHM9YixzZWNzPWMiDQoNCllvdSBjYW4gYWxzbyBkZWZpbmUgYSBj ZHJvbSBvbiB0aGUgc2xhY2Ugb2YgaWRlMCB3aXRoOg0KIi1kcml2ZSBmaWxlPWZpbGUsaWY9aWRl LGJ1cz0wLHVuaXQ9MSxtZWRpYT1jZHJvbSINCg0KWW91IGNhbiBkZWZpbmUgYW4gZW1wdHkgY2Ry b206DQoiLWRyaXZlIGlmPWlkZSxidXM9MCx1bml0PTEsbWVkaWE9Y2Ryb20iDQoNCiItZHJpdmUg ZmlsZT1maWxlLGlmPXNjc2ksYnVzPTAsdW5pdD02IiBhbGxvd3MgdG8gY29ubmVjdCB0aGUgZGlz ayBpbWFnZSBmaWxlIA0KdG8gdGhlIHNjc2kgYnVzIDAgd2l0aCB0aGUgdW5pdCBpZCA2Lg0KDQpp ZiB0aGVyZSBpcyBubyBTQ1NJIGRpc2ssIHRoZSBTQ1NJIGludGVyZmFjZSBpcyBub3QgY3JlYXRl ZC4NCg0KSXQgYWxzbyBkZWZpbmVzIHRoZSBkZWZhdWx0IGludGVyZmFjZSB0eXBlIHRvICJzY3Np IiBmb3IgdGFyZ2V0cw0KInJlYWx2aWV3IiwgIlNTLTUiLCAiU1MtMTAiLCAidmVyc2F0aWxlcGIi LCAidmVyc2F0aWxlYWIiDQp0byBrZWVwIG9sZCBiZWhhdmlvciwgd2hlcmUgIi1oZGEiIGlzIGEg U0NTSSBkaXNrLg0KDQoiLWZkYSBmaWxlIiBpcyBhbiBhbGlhcyBmb3IgIi1kcml2ZSBmaWxlPWZp bGUsdW5pdD0wLGlmPWZsb3BweSINCiItZmRiIGZpbGUiIGlzIGFuIGFsaWFzIGZvciAiLWRyaXZl IGZpbGU9ZmlsZSx1bml0PTEsaWY9ZmxvcHB5Ig0KIi1wZmxhc2ggZmlsZSIgaXMgYW4gYWxpYXMg Zm9yICItZHJpdmUgZmlsZT1maWxlLGlmPXBmbGFzaCINCiItbXRkYmxvY2sgZmlsZSIgaXMgYW4g YWxpYXMgZm9yICItZHJpdmUgZmlsZT1maWxlLGlmPW10ZCINCiItc2QgZmlsZSIgYmVjb21lcyB0 aGUgYWxpYXMgb2YgIi1kcml2ZSBmaWxlPWZpbGUsaWY9c2QiDQoNCiItZHJpdmUgZmlsZT1hIC1k cml2ZSBmaWxlPWIiIHdpbGwgYmUgaW50ZXJwcmV0ZWQgbGlrZSAiLWhkYSBhIC1oZGIgYiINCi0t DQogaHcvZXNwLmMgICAgICAgICAgIHwgICAxMCAtDQogaHcvaW50ZWdyYXRvcmNwLmMgIHwgICAg OA0KIGh3L2xzaTUzYzg5NWEuYyAgICB8ICAgIDMNCiBody9taXBzX21hbHRhLmMgICAgfCAgIDE1 ICsNCiBody9taXBzX3BpY2E2MS5jICAgfCAgIDIxICstDQogaHcvbWlwc19yNGsuYyAgICAgIHwg ICAxNyArDQogaHcvbmFuZC5jICAgICAgICAgIHwgICAgMg0KIGh3L29tYXBfbW1jLmMgICAgICB8 ICAgIDINCiBody9wYy5jICAgICAgICAgICAgfCAgIDY1ICsrKystLQ0KIGh3L3BwYzQwNV9ib2Fy ZHMuYyB8ICAgMjkgKy0NCiBody9wcGNfY2hycC5jICAgICAgfCAgIDE3ICsNCiBody9wcGNfb2xk d29ybGQuYyAgfCAgICAzDQogaHcvcHBjX3ByZXAuYyAgICAgIHwgICAyNyArKw0KIGh3L3B4YTJ4 eF9tbWNpLmMgICB8ICAgIDMNCiBody9yZWFsdmlldy5jICAgICAgfCAgIDE3ICsNCiBody9zcGl0 ei5jICAgICAgICAgfCAgICA5DQogaHcvc3VuNG0uYyAgICAgICAgIHwgICAyMyArLQ0KIGh3L3Zl cnNhdGlsZXBiLmMgICB8ICAgMTggKw0KIG1vbml0b3IuYyAgICAgICAgICB8ICAgMTEgLQ0KIHZs LmMgICAgICAgICAgICAgICB8ICA1MjkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KystLS0tLS0tLS0tLS0tLS0tLS0NCiB2bC5oICAgICAgICAgICAgICAgfCAgIDMyICsrLQ0KIDIx IGZpbGVzIGNoYW5nZWQsIDU5NSBpbnNlcnRpb25zKCspLCAyNjYgZGVsZXRpb25zKC0pDQoNCklu ZGV4OiBxZW11L3ZsLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBxZW11Lm9yaWcvdmwuYwkyMDA3LTExLTA5 IDIyOjA0OjI4LjAwMDAwMDAwMCArMDEwMA0KKysrIHFlbXUvdmwuYwkyMDA3LTExLTEwIDAwOjIz OjMyLjAwMDAwMDAwMCArMDEwMA0KQEAgLTE0OSwxMiArMTQ5LDkgQEAgY2hhciBwaHlzX3JhbV9m aWxlWzEwMjRdOw0KIHZvaWQgKmlvcG9ydF9vcGFxdWVbTUFYX0lPUE9SVFNdOw0KIElPUG9ydFJl YWRGdW5jICppb3BvcnRfcmVhZF90YWJsZVszXVtNQVhfSU9QT1JUU107DQogSU9Qb3J0V3JpdGVG dW5jICppb3BvcnRfd3JpdGVfdGFibGVbM11bTUFYX0lPUE9SVFNdOw0KLS8qIE5vdGU6IGJzX3Rh YmxlW01BWF9ESVNLU10gaXMgYSBkdW1teSBibG9jayBkcml2ZXIgaWYgbm9uZSBhdmFpbGFibGUN CisvKiBOb3RlOiBkcml2ZXNfdGFibGVbTUFYX0RSSVZFU10gaXMgYSBkdW1teSBibG9jayBkcml2 ZXIgaWYgbm9uZSBhdmFpbGFibGUNCiAgICB0byBzdG9yZSB0aGUgVk0gc25hcHNob3RzICovDQot QmxvY2tEcml2ZXJTdGF0ZSAqYnNfdGFibGVbTUFYX0RJU0tTICsgMV0sICpmZF90YWJsZVtNQVhf RkRdOw0KLUJsb2NrRHJpdmVyU3RhdGUgKnBmbGFzaF90YWJsZVtNQVhfUEZMQVNIXTsNCi1CbG9j a0RyaXZlclN0YXRlICpzZF9iZHJ2Ow0KLUJsb2NrRHJpdmVyU3RhdGUgKm10ZF9iZHJ2Ow0KK0Ry aXZlSW5mbyBkcml2ZXNfdGFibGVbTUFYX0RSSVZFUysxXTsNCiAvKiBwb2ludCB0byB0aGUgYmxv Y2sgZHJpdmVyIHdoZXJlIHRoZSBzbmFwc2hvdHMgYXJlIG1hbmFnZWQgKi8NCiBCbG9ja0RyaXZl clN0YXRlICpic19zbmFwc2hvdHM7DQogaW50IHZnYV9yYW1fc2l6ZTsNCkBAIC0yMjQsNiArMjIx LDEwIEBAIGludCBhbHRfZ3JhYiA9IDA7DQogdW5zaWduZWQgaW50IG5iX3Byb21fZW52cyA9IDA7 DQogY29uc3QgY2hhciAqcHJvbV9lbnZzW01BWF9QUk9NX0VOVlNdOw0KICNlbmRpZg0KK2ludCBu Yl9kcml2ZXNfb3B0Ow0KK2NoYXIgZHJpdmVzX29wdFtNQVhfRFJJVkVTXVsxMDI0XTsNCitpbnQg bmJfZHJpdmVzOw0KK0RyaXZlSW5mbyBkcml2ZXNbTUFYX0RSSVZFU107DQogDQogI2RlZmluZSBU RlIoZXhwcikgZG8geyBpZiAoKGV4cHIpICE9IC0xKSBicmVhazsgfSB3aGlsZSAoZXJybm8gPT0g RUlOVFIpDQogDQpAQCAtMTc0MCwxMiArMTc0MSw5IEBAIHN0YXRpYyBpbnQgbXV4X3Byb2NfYnl0 ZShDaGFyRHJpdmVyU3RhdGUNCiAgICAgICAgIGNhc2UgJ3MnOg0KICAgICAgICAgICAgIHsNCiAg ICAgICAgICAgICAgICAgaW50IGk7DQotICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBN QVhfRElTS1M7IGkrKykgew0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGJzX3RhYmxlW2ldKQ0K LSAgICAgICAgICAgICAgICAgICAgICAgIGJkcnZfY29tbWl0KGJzX3RhYmxlW2ldKTsNCisgICAg ICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG5iX2RyaXZlczsgaSsrKSB7DQorICAgICAgICAg ICAgICAgICAgICAgICAgYmRydl9jb21taXQoZHJpdmVzX3RhYmxlW2ldLmJkcnYpOw0KICAgICAg ICAgICAgICAgICB9DQotICAgICAgICAgICAgICAgIGlmIChtdGRfYmRydikNCi0gICAgICAgICAg ICAgICAgICAgIGJkcnZfY29tbWl0KG10ZF9iZHJ2KTsNCiAgICAgICAgICAgICB9DQogICAgICAg ICAgICAgYnJlYWs7DQogICAgICAgICBjYXNlICdiJzoNCkBAIC00Njk4LDYgKzQ2OTYsMjc2IEBA IHZvaWQgZG9faW5mb19uZXR3b3JrKHZvaWQpDQogICAgIH0NCiB9DQogDQorI2RlZmluZSBIRF9B TElBUyAiZmlsZT0lcyxidXM9JWQsdW5pdD0lZCxtZWRpYT1kaXNrIg0KKyNpZmRlZiBUQVJHRVRf UFBDDQorI2RlZmluZSBDRFJPTV9BTElBUyAiYnVzPTAsdW5pdD0xLG1lZGlhPWNkcm9tIg0KKyNl bHNlDQorI2RlZmluZSBDRFJPTV9BTElBUyAiYnVzPTEsdW5pdD0wLG1lZGlhPWNkcm9tIg0KKyNl bmRpZg0KKyNkZWZpbmUgRkRfQUxJQVMgInVuaXQ9JWQsaWY9ZmxvcHB5Ig0KKyNkZWZpbmUgUEZM QVNIX0FMSUFTICJmaWxlPSVzLGlmPXBmbGFzaCINCisjZGVmaW5lIE1URF9BTElBUyAiZmlsZT0l cyxpZj1tdGQiDQorI2RlZmluZSBTRF9BTElBUyAiZmlsZT0lcyxpZj1zZCINCisNCitzdGF0aWMg aW50IGRyaXZlX2FkZChjb25zdCBjaGFyICpmbXQsIC4uLikNCit7DQorICAgIHZhX2xpc3QgYXA7 DQorDQorICAgIGlmIChuYl9kcml2ZXNfb3B0ID49IE1BWF9EUklWRVMpIHsNCisgICAgICAgIGZw cmludGYoc3RkZXJyLCAicWVtdTogdG9vIG1hbnkgZHJpdmVzXG4iKTsNCisgICAgICAgIGV4aXQo MSk7DQorICAgIH0NCisNCisgICAgdmFfc3RhcnQoYXAsIGZtdCk7DQorICAgIHZzbnByaW50Zihk cml2ZXNfb3B0W25iX2RyaXZlc19vcHRdLCBzaXplb2YoZHJpdmVzX29wdFswXSksIGZtdCwgYXAp Ow0KKyAgICB2YV9lbmQoYXApOw0KKw0KKyAgICByZXR1cm4gbmJfZHJpdmVzX29wdCsrOw0KK30N CisNCitpbnQgZHJpdmVfZ2V0X2luZGV4KEJsb2NrSW50ZXJmYWNlVHlwZSBpbnRlcmZhY2UsIGlu dCBidXMsIGludCB1bml0KQ0KK3sNCisgICAgaW50IGluZGV4Ow0KKw0KKyAgICAvKiBzZWVrIGlu dGVyZmFjZSwgYnVzIGFuZCB1bml0ICovDQorDQorICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8 IG5iX2RyaXZlczsgaW5kZXgrKykNCisgICAgICAgIGlmIChkcml2ZXNfdGFibGVbaW5kZXhdLmlu dGVyZmFjZSA9PSBpbnRlcmZhY2UgJiYNCisJICAgIGRyaXZlc190YWJsZVtpbmRleF0uYnVzID09 IGJ1cyAmJg0KKwkgICAgZHJpdmVzX3RhYmxlW2luZGV4XS51bml0ID09IHVuaXQpDQorICAgICAg ICByZXR1cm4gaW5kZXg7DQorDQorICAgIHJldHVybiAtMTsNCit9DQorDQoraW50IGRyaXZlX2dl dF9tYXhfYnVzKEJsb2NrSW50ZXJmYWNlVHlwZSBpbnRlcmZhY2UpDQorew0KKyAgICBpbnQgbWF4 X2J1czsNCisgICAgaW50IGluZGV4Ow0KKw0KKyAgICBtYXhfYnVzID0gLTE7DQorICAgIGZvciAo aW5kZXggPSAwOyBpbmRleCA8IG5iX2RyaXZlczsgaW5kZXgrKykgew0KKyAgICAgICAgaWYoZHJp dmVzX3RhYmxlW2luZGV4XS5pbnRlcmZhY2UgPT0gaW50ZXJmYWNlICYmDQorICAgICAgICAgICBk cml2ZXNfdGFibGVbaW5kZXhdLmJ1cyA+IG1heF9idXMpDQorICAgICAgICAgICAgbWF4X2J1cyA9 IGRyaXZlc190YWJsZVtpbmRleF0uYnVzOw0KKyAgICB9DQorICAgIHJldHVybiBtYXhfYnVzOw0K K30NCisNCitzdGF0aWMgaW50IGRyaXZlX2luaXQoY29uc3QgY2hhciAqc3RyLCBpbnQgc25hcHNo b3QsIFFFTVVNYWNoaW5lICptYWNoaW5lKQ0KK3sNCisgICAgY2hhciBidWZbMTZdOw0KKyAgICBj aGFyIGZpbGVbMTAyNF07DQorICAgIEJsb2NrSW50ZXJmYWNlVHlwZSBpbnRlcmZhY2U7DQorICAg IGVudW0geyBNRURJQV9ESVNLLCBNRURJQV9DRFJPTSB9IG1lZGlhOw0KKyAgICBpbnQgYnVzX2lk LCB1bml0X2lkOw0KKyAgICBpbnQgY3lscywgaGVhZHMsIHNlY3MsIHRyYW5zbGF0aW9uOw0KKyAg ICBCbG9ja0RyaXZlclN0YXRlICpiZHJ2Ow0KKyAgICBpbnQgbWF4X2RldnM7DQorDQorICAgIGZp bGVbMF0gPSAwOw0KKyAgICBjeWxzID0gaGVhZHMgPSBzZWNzID0gMDsNCisgICAgYnVzX2lkID0g MDsNCisgICAgdW5pdF9pZCA9IC0xOw0KKyAgICB0cmFuc2xhdGlvbiA9IEJJT1NfQVRBX1RSQU5T TEFUSU9OX0FVVE87DQorDQorICAgIGlmICghc3RyY21wKG1hY2hpbmUtPm5hbWUsICJyZWFsdmll dyIpIHx8DQorICAgICAgICAhc3RyY21wKG1hY2hpbmUtPm5hbWUsICJTUy01IikgfHwNCisgICAg ICAgICFzdHJjbXAobWFjaGluZS0+bmFtZSwgIlNTLTEwIikgfHwNCisgICAgICAgICFzdHJjbXAo bWFjaGluZS0+bmFtZSwgInZlcnNhdGlsZXBiIikgfHwNCisgICAgICAgICFzdHJjbXAobWFjaGlu ZS0+bmFtZSwgInZlcnNhdGlsZWFiIikpIHsNCisgICAgICAgIGludGVyZmFjZSA9IElGX1NDU0k7 DQorICAgICAgICBtYXhfZGV2cyA9IE1BWF9TQ1NJX0RFVlM7DQorICAgIH0gZWxzZSB7DQorICAg ICAgICBpbnRlcmZhY2UgPSBJRl9JREU7DQorICAgICAgICBtYXhfZGV2cyA9IE1BWF9JREVfREVW UzsNCisgICAgfQ0KKyAgICBtZWRpYSA9IE1FRElBX0RJU0s7DQorDQorICAgIC8qIGV4dHJhY3Qg cGFyYW1ldGVycyAqLw0KKw0KKyAgICBpZiAoZ2V0X3BhcmFtX3ZhbHVlKGJ1Ziwgc2l6ZW9mKGJ1 ZiksICJidXMiLCBzdHIpKSB7DQorICAgICAgICBidXNfaWQgPSBzdHJ0b2woYnVmLCBOVUxMLCAw KTsNCisJaWYgKGJ1c19pZCA8IDApIHsNCisJICAgIGZwcmludGYoc3RkZXJyLCAicWVtdTogaW52 YWxpZCBidXMgaWRcbiIpOw0KKwkgICAgcmV0dXJuIC0xOw0KKwl9DQorICAgIH0NCisNCisgICAg aWYgKGdldF9wYXJhbV92YWx1ZShidWYsIHNpemVvZihidWYpLCAidW5pdCIsIHN0cikpIHsNCisg ICAgICAgIHVuaXRfaWQgPSBzdHJ0b2woYnVmLCBOVUxMLCAwKTsNCisJaWYgKHVuaXRfaWQgPCAw KSB7DQorCSAgICBmcHJpbnRmKHN0ZGVyciwgInFlbXU6IGludmFsaWQgdW5pdCBpZFxuIik7DQor CSAgICByZXR1cm4gLTE7DQorCX0NCisgICAgfQ0KKw0KKyAgICBpZiAoZ2V0X3BhcmFtX3ZhbHVl KGJ1Ziwgc2l6ZW9mKGJ1ZiksICJjeWxzIiwgc3RyKSkgew0KKyAgICAgICAgY3lscyA9IHN0cnRv bChidWYsIE5VTEwsIDApOw0KKyAgICAgICAgaWYgKGN5bHMgPCAxIHx8IGN5bHMgPiAxNjM4Mykg ew0KKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicWVtdTogaW52YWxpZCBwaHlzaWNhbCBj eWxzIG51bWJlclxuIik7DQorCSAgICByZXR1cm4gLTE7DQorCX0NCisgICAgfQ0KKw0KKyAgICBp ZiAoZ2V0X3BhcmFtX3ZhbHVlKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJoZWFkcyIsIHN0cikpIHsNCisg ICAgICAgIGhlYWRzID0gc3RydG9sKGJ1ZiwgTlVMTCwgMCk7DQorICAgICAgICBpZiAoaGVhZHMg PCAxIHx8IGhlYWRzID4gMTYpIHsNCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInFlbXU6 IGludmFsaWQgcGh5c2ljYWwgaGVhZHMgbnVtYmVyXG4iKTsNCisJICAgIHJldHVybiAtMTsNCisJ fQ0KKyAgICB9DQorDQorICAgIGlmIChnZXRfcGFyYW1fdmFsdWUoYnVmLCBzaXplb2YoYnVmKSwg InNlY3MiLCBzdHIpKSB7DQorICAgICAgICBzZWNzID0gc3RydG9sKGJ1ZiwgTlVMTCwgMCk7DQor ICAgICAgICAgICAgaWYgKHNlY3MgPCAxIHx8IHNlY3MgPiA2Mykgew0KKyAgICAgICAgICAgIGZw cmludGYoc3RkZXJyLCAicWVtdTogaW52YWxpZCBwaHlzaWNhbCBzZWNzIG51bWJlclxuIik7DQor CSAgICByZXR1cm4gLTE7DQorCX0NCisgICAgfQ0KKw0KKyAgICBpZiAoZ2V0X3BhcmFtX3ZhbHVl KGJ1Ziwgc2l6ZW9mKGJ1ZiksICJpZiIsIHN0cikpIHsNCisgICAgICAgIGlmICghc3RyY21wKGJ1 ZiwgImlkZSIpKSB7DQorCSAgICBpbnRlcmZhY2UgPSBJRl9JREU7DQorICAgICAgICAgICAgbWF4 X2RldnMgPSBNQVhfSURFX0RFVlM7DQorICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYnVmLCAi c2NzaSIpKSB7DQorCSAgICBpbnRlcmZhY2UgPSBJRl9TQ1NJOw0KKyAgICAgICAgICAgIG1heF9k ZXZzID0gTUFYX1NDU0lfREVWUzsNCisgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChidWYsICJm bG9wcHkiKSkgew0KKwkgICAgaW50ZXJmYWNlID0gSUZfRkxPUFBZOw0KKyAgICAgICAgICAgIG1h eF9kZXZzID0gMDsNCisgICAgICAgIH0gZWxzZSBpZiAoIXN0cmNtcChidWYsICJwZmxhc2giKSkg ew0KKwkgICAgaW50ZXJmYWNlID0gSUZfUEZMQVNIOw0KKyAgICAgICAgICAgIG1heF9kZXZzID0g MDsNCisJfSBlbHNlIGlmICghc3RyY21wKGJ1ZiwgIm10ZCIpKSB7DQorCSAgICBpbnRlcmZhY2Ug PSBJRl9NVEQ7DQorICAgICAgICAgICAgbWF4X2RldnMgPSAwOw0KKwl9IGVsc2UgaWYgKCFzdHJj bXAoYnVmLCAic2QiKSkgew0KKwkgICAgaW50ZXJmYWNlID0gSUZfU0Q7DQorICAgICAgICAgICAg bWF4X2RldnMgPSAwOw0KKwl9IGVsc2Ugew0KKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi dW5zdXBwb3J0ZWQgYnVzIHR5cGUgJyVzJ1xuIiwgYnVmKTsNCisgICAgICAgICAgICByZXR1cm4g LTE7DQorCX0NCisgICAgfQ0KKw0KKyAgICBpZiAoZ2V0X3BhcmFtX3ZhbHVlKGJ1Ziwgc2l6ZW9m KGJ1ZiksICJ0cmFucyIsIHN0cikpIHsNCisgICAgICAgIGlmICghc3RyY21wKGJ1ZiwgIm5vbmUi KSkNCisgICAgICAgICAgICB0cmFuc2xhdGlvbiA9IEJJT1NfQVRBX1RSQU5TTEFUSU9OX05PTkU7 DQorICAgICAgICBlbHNlIGlmICghc3RyY21wKGJ1ZiwgImxiYSIpKQ0KKyAgICAgICAgICAgIHRy YW5zbGF0aW9uID0gQklPU19BVEFfVFJBTlNMQVRJT05fTEJBOw0KKyAgICAgICAgZWxzZSBpZiAo IXN0cmNtcChidWYsICJhdXRvIikpDQorICAgICAgICAgICAgdHJhbnNsYXRpb24gPSBCSU9TX0FU QV9UUkFOU0xBVElPTl9BVVRPOw0KKwllbHNlIHsNCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgInFlbXU6IGludmFsaWQgdHJhbnNsYXRpb24gdHlwZVxuIik7DQorCSAgICByZXR1cm4gLTE7 DQorCX0NCisgICAgfQ0KKw0KKyAgICBpZiAoZ2V0X3BhcmFtX3ZhbHVlKGJ1Ziwgc2l6ZW9mKGJ1 ZiksICJtZWRpYSIsIHN0cikpIHsNCisgICAgICAgIGlmICghKHN0cmNtcChidWYsICJkaXNrIikp KSB7DQorCSAgICBtZWRpYSA9IE1FRElBX0RJU0s7DQorCX0gZWxzZSBpZiAoIXN0cmNtcChidWYs ICJjZHJvbSIpKSB7DQorICAgICAgICAgICAgaWYgKGN5bHMgfHwgc2VjcyB8fCBoZWFkcykgew0K KyAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInFlbXU6IGludmFsaWQgcGh5c2ljYWwg Q0hTIGZvcm1hdFxuIik7DQorCSAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgICAgIH0NCisJ ICAgIG1lZGlhID0gTUVESUFfQ0RST007DQorCX0gZWxzZSB7DQorCSAgICBmcHJpbnRmKHN0ZGVy ciwgInFlbXU6IGludmFsaWQgbWVkaWFcbiIpOw0KKwkgICAgcmV0dXJuIC0xOw0KKwl9DQorICAg IH0NCisNCisgICAgaWYgKGdldF9wYXJhbV92YWx1ZShidWYsIHNpemVvZihidWYpLCAic25hcHNo b3QiLCBzdHIpKSB7DQorICAgICAgICBpZiAoIShzdHJjbXAoYnVmLCAib24iKSkpDQorCSAgICBz bmFwc2hvdCA9IDE7DQorICAgICAgICBlbHNlIGlmICghKHN0cmNtcChidWYsICJvZmYiKSkpDQor CSAgICBzbmFwc2hvdCA9IDA7DQorCWVsc2Ugew0KKwkgICAgZnByaW50ZihzdGRlcnIsICJxZW11 OiBpbnZhbGlkIHNuYXBzaG90IG9wdGlvblxuIik7DQorCSAgICByZXR1cm4gLTE7DQorCX0NCisg ICAgfQ0KKw0KKyAgICBnZXRfcGFyYW1fdmFsdWUoZmlsZSwgc2l6ZW9mKGZpbGUpLCAiZmlsZSIs IHN0cik7DQorDQorICAgIC8qIGlmIHVzZXIgZG9lc24ndCBzcGVjaWZ5IGEgdW5pdF9pZCwNCisg ICAgICogdHJ5IHRvIGZpbmQgdGhlIGZpcnN0IGZyZWUNCisgICAgICovDQorDQorICAgIGlmICh1 bml0X2lkID09IC0xKSB7DQorICAgICAgIHVuaXRfaWQgPSAwOw0KKyAgICAgICB3aGlsZSAoZHJp dmVfZ2V0X2luZGV4KGludGVyZmFjZSwgYnVzX2lkLCB1bml0X2lkKSAhPSAtMSkgew0KKyAgICAg ICAgICAgdW5pdF9pZCsrOw0KKyAgICAgICAgICAgaWYgKG1heF9kZXZzICYmIHVuaXRfaWQgPj0g bWF4X2RldnMpIHsNCisgICAgICAgICAgICAgICB1bml0X2lkIC09IG1heF9kZXZzOw0KKyAgICAg ICAgICAgICAgIGJ1c19pZCsrOw0KKyAgICAgICAgICAgfQ0KKyAgICAgICB9DQorICAgIH0NCisN CisgICAgLyogY2hlY2sgdW5pdCBpZCAqLw0KKw0KKyAgICBpZiAobWF4X2RldnMgJiYgdW5pdF9p ZCA+PSBtYXhfZGV2cykgew0KKyAgICAgICAgZnByaW50ZihzdGRlcnIsICJxZW11OiB1bml0ICVk IHRvbyBiaWcgb24gYnVzICVkIChtYXggaXMgJWQpXG4iLA0KKyAgICAgICAgICAgICAgICAgICAg ICAgIHVuaXRfaWQsIGJ1c19pZCwgbWF4X2RldnMgLSAxKTsNCisgICAgICAgIGV4aXQoMSk7DQor ICAgIH0NCisNCisgICAgLyoNCisgICAgICogaWdub3JlIG11bHRpcGxlIGRlZmluaXRpb25zDQor ICAgICAqLw0KKw0KKyAgICBpZiAoZHJpdmVfZ2V0X2luZGV4KGludGVyZmFjZSwgYnVzX2lkLCB1 bml0X2lkKSAhPSAtMSkNCisgICAgICAgIHJldHVybiAwOw0KKw0KKyAgICAvKiBpbml0ICovDQor DQorICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJkcml2ZSVkIiwgbmJfZHJpdmVzKTsN CisgICAgYmRydiA9IGJkcnZfbmV3KGJ1Zik7DQorICAgIGRyaXZlc190YWJsZVtuYl9kcml2ZXNd LmJkcnYgPSBiZHJ2Ow0KKyAgICBkcml2ZXNfdGFibGVbbmJfZHJpdmVzXS5pbnRlcmZhY2UgPSBp bnRlcmZhY2U7DQorICAgIGRyaXZlc190YWJsZVtuYl9kcml2ZXNdLmJ1cyA9IGJ1c19pZDsNCisg ICAgZHJpdmVzX3RhYmxlW25iX2RyaXZlc10udW5pdCA9IHVuaXRfaWQ7DQorICAgIG5iX2RyaXZl cysrOw0KKw0KKyAgICBzd2l0Y2goaW50ZXJmYWNlKSB7DQorICAgIGNhc2UgSUZfSURFOg0KKyAg ICBjYXNlIElGX1NDU0k6DQorICAgICAgICBzd2l0Y2gobWVkaWEpIHsNCisJY2FzZSBNRURJQV9E SVNLOg0KKyAgICAgICAgICAgIGlmIChjeWxzICE9IDApIHsNCisgICAgICAgICAgICAgICAgYmRy dl9zZXRfZ2VvbWV0cnlfaGludChiZHJ2LCBjeWxzLCBoZWFkcywgc2Vjcyk7DQorICAgICAgICAg ICAgICAgIGJkcnZfc2V0X3RyYW5zbGF0aW9uX2hpbnQoYmRydiwgdHJhbnNsYXRpb24pOw0KKyAg ICAgICAgICAgIH0NCisJICAgIGJyZWFrOw0KKwljYXNlIE1FRElBX0NEUk9NOg0KKyAgICAgICAg ICAgIGJkcnZfc2V0X3R5cGVfaGludChiZHJ2LCBCRFJWX1RZUEVfQ0RST00pOw0KKwkgICAgYnJl YWs7DQorCX0NCisgICAgICAgIGJyZWFrOw0KKyAgICBjYXNlIElGX1NEOg0KKyAgICAgICAgLyog RklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IGEgZmxvcHB5LCBidXQgaXQncyBhIHJlYXNvbmFibGUN CisgICAgICAgICAgIGFwcHJveGltYXRpb24uICAqLw0KKyAgICBjYXNlIElGX0ZMT1BQWToNCisg ICAgICAgIGJkcnZfc2V0X3R5cGVfaGludChiZHJ2LCBCRFJWX1RZUEVfRkxPUFBZKTsNCisgICAg ICAgIGJyZWFrOw0KKyAgICBjYXNlIElGX1BGTEFTSDoNCisgICAgY2FzZSBJRl9NVEQ6DQorICAg ICAgICBicmVhazsNCisgICAgfQ0KKyAgICBpZiAoIWZpbGVbMF0pDQorICAgICAgICByZXR1cm4g MDsNCisgICAgaWYgKGJkcnZfb3BlbihiZHJ2LCBmaWxlLCBzbmFwc2hvdCA/IEJEUlZfT19TTkFQ U0hPVCA6IDApIDwgMCB8fA0KKyAgICAgICAgcWVtdV9rZXlfY2hlY2soYmRydiwgZmlsZSkpIHsN CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAicWVtdTogY291bGQgbm90IG9wZW4gZGlzayBpbWFn ZSAlc1xuIiwNCisgICAgICAgICAgICAgICAgICAgICAgICBmaWxlKTsNCisgICAgICAgIHJldHVy biAtMTsNCisgICAgfQ0KKyAgICByZXR1cm4gMDsNCit9DQorDQogLyoqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLw0KIC8qIFVTQiBkZXZp Y2VzICovDQogDQpAQCAtNTQ4MSw4ICs1NzQ5LDggQEAgc3RhdGljIEJsb2NrRHJpdmVyU3RhdGUg KmdldF9ic19zbmFwc2hvdA0KIA0KICAgICBpZiAoYnNfc25hcHNob3RzKQ0KICAgICAgICAgcmV0 dXJuIGJzX3NuYXBzaG90czsNCi0gICAgZm9yKGkgPSAwOyBpIDw9IE1BWF9ESVNLUzsgaSsrKSB7 DQotICAgICAgICBicyA9IGJzX3RhYmxlW2ldOw0KKyAgICBmb3IoaSA9IDA7IGkgPD0gbmJfZHJp dmVzOyBpKyspIHsNCisgICAgICAgIGJzID0gZHJpdmVzX3RhYmxlW2ldLmJkcnY7DQogICAgICAg ICBpZiAoYmRydl9jYW5fc25hcHNob3QoYnMpKQ0KICAgICAgICAgICAgIGdvdG8gb2s7DQogICAg IH0NCkBAIC01NTkwLDggKzU4NTgsOCBAQCB2b2lkIGRvX3NhdmV2bShjb25zdCBjaGFyICpuYW1l KQ0KIA0KICAgICAvKiBjcmVhdGUgdGhlIHNuYXBzaG90cyAqLw0KIA0KLSAgICBmb3IoaSA9IDA7 IGkgPCBNQVhfRElTS1M7IGkrKykgew0KLSAgICAgICAgYnMxID0gYnNfdGFibGVbaV07DQorICAg IGZvcihpID0gMDsgaSA8IG5iX2RyaXZlczsgaSsrKSB7DQorICAgICAgICBiczEgPSBkcml2ZXNf dGFibGVbaV0uYmRydjsNCiAgICAgICAgIGlmIChiZHJ2X2hhc19zbmFwc2hvdChiczEpKSB7DQog ICAgICAgICAgICAgaWYgKG11c3RfZGVsZXRlKSB7DQogICAgICAgICAgICAgICAgIHJldCA9IGJk cnZfc25hcHNob3RfZGVsZXRlKGJzMSwgb2xkX3NuLT5pZF9zdHIpOw0KQEAgLTU2MzMsOCArNTkw MSw4IEBAIHZvaWQgZG9fbG9hZHZtKGNvbnN0IGNoYXIgKm5hbWUpDQogICAgIHNhdmVkX3ZtX3J1 bm5pbmcgPSB2bV9ydW5uaW5nOw0KICAgICB2bV9zdG9wKDApOw0KIA0KLSAgICBmb3IoaSA9IDA7 IGkgPD0gTUFYX0RJU0tTOyBpKyspIHsNCi0gICAgICAgIGJzMSA9IGJzX3RhYmxlW2ldOw0KKyAg ICBmb3IoaSA9IDA7IGkgPD0gbmJfZHJpdmVzOyBpKyspIHsNCisgICAgICAgIGJzMSA9IGRyaXZl c190YWJsZVtpXS5iZHJ2Ow0KICAgICAgICAgaWYgKGJkcnZfaGFzX3NuYXBzaG90KGJzMSkpIHsN CiAgICAgICAgICAgICByZXQgPSBiZHJ2X3NuYXBzaG90X2dvdG8oYnMxLCBuYW1lKTsNCiAgICAg ICAgICAgICBpZiAocmV0IDwgMCkgew0KQEAgLTU2OTQsOCArNTk2Miw4IEBAIHZvaWQgZG9fZGVs dm0oY29uc3QgY2hhciAqbmFtZSkNCiAgICAgICAgIHJldHVybjsNCiAgICAgfQ0KIA0KLSAgICBm b3IoaSA9IDA7IGkgPD0gTUFYX0RJU0tTOyBpKyspIHsNCi0gICAgICAgIGJzMSA9IGJzX3RhYmxl W2ldOw0KKyAgICBmb3IoaSA9IDA7IGkgPD0gbmJfZHJpdmVzOyBpKyspIHsNCisgICAgICAgIGJz MSA9IGRyaXZlc190YWJsZVtpXS5iZHJ2Ow0KICAgICAgICAgaWYgKGJkcnZfaGFzX3NuYXBzaG90 KGJzMSkpIHsNCiAgICAgICAgICAgICByZXQgPSBiZHJ2X3NuYXBzaG90X2RlbGV0ZShiczEsIG5h bWUpOw0KICAgICAgICAgICAgIGlmIChyZXQgPCAwKSB7DQpAQCAtNTcyMyw4ICs1OTkxLDggQEAg dm9pZCBkb19pbmZvX3NuYXBzaG90cyh2b2lkKQ0KICAgICAgICAgcmV0dXJuOw0KICAgICB9DQog ICAgIHRlcm1fcHJpbnRmKCJTbmFwc2hvdCBkZXZpY2VzOiIpOw0KLSAgICBmb3IoaSA9IDA7IGkg PD0gTUFYX0RJU0tTOyBpKyspIHsNCi0gICAgICAgIGJzMSA9IGJzX3RhYmxlW2ldOw0KKyAgICBm b3IoaSA9IDA7IGkgPD0gbmJfZHJpdmVzOyBpKyspIHsNCisgICAgICAgIGJzMSA9IGRyaXZlc190 YWJsZVtpXS5iZHJ2Ow0KICAgICAgICAgaWYgKGJkcnZfaGFzX3NuYXBzaG90KGJzMSkpIHsNCiAg ICAgICAgICAgICBpZiAoYnMgPT0gYnMxKQ0KICAgICAgICAgICAgICAgICB0ZXJtX3ByaW50Zigi ICVzIiwgYmRydl9nZXRfZGV2aWNlX25hbWUoYnMxKSk7DQpAQCAtNjQyOCwxNSArNjY5NiwxNCBA QCBzdGF0aWMgdm9pZCByYW1fc2F2ZShRRU1VRmlsZSAqZiwgdm9pZCAqDQogICAgICAgICAgICAg LyogZmluZCBpZiB0aGUgbWVtb3J5IGJsb2NrIGlzIGF2YWlsYWJsZSBvbiBhIHZpcnR1YWwNCiAg ICAgICAgICAgICAgICBibG9jayBkZXZpY2UgKi8NCiAgICAgICAgICAgICBzZWN0b3JfbnVtID0g LTE7DQotICAgICAgICAgICAgZm9yKGogPSAwOyBqIDwgTUFYX0RJU0tTOyBqKyspIHsNCi0gICAg ICAgICAgICAgICAgaWYgKGJzX3RhYmxlW2pdKSB7DQotICAgICAgICAgICAgICAgICAgICBzZWN0 b3JfbnVtID0gYmRydl9oYXNoX2ZpbmQoYnNfdGFibGVbal0sDQotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGh5c19yYW1fYmFzZSArIGksIEJEUlZfSEFT SF9CTE9DS19TSVpFKTsNCi0gICAgICAgICAgICAgICAgICAgIGlmIChzZWN0b3JfbnVtID49IDAp DQotICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQotICAgICAgICAgICAgICAgIH0NCisg ICAgICAgICAgICBmb3IoaiA9IDA7IGogPCBuYl9kcml2ZXM7IGorKykgew0KKyAgICAgICAgICAg ICAgICBzZWN0b3JfbnVtID0gYmRydl9oYXNoX2ZpbmQoZHJpdmVzX3RhYmxlW2pdLmJkcnYsDQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaHlzX3JhbV9iYXNl ICsgaSwNCisJCQkJCSAgICBCRFJWX0hBU0hfQkxPQ0tfU0laRSk7DQorICAgICAgICAgICAgICAg IGlmIChzZWN0b3JfbnVtID49IDApDQorICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAg ICAgICAgICB9DQotICAgICAgICAgICAgaWYgKGogPT0gTUFYX0RJU0tTKQ0KKyAgICAgICAgICAg IGlmIChqID09IG5iX2RyaXZlcykNCiAgICAgICAgICAgICAgICAgZ290byBub3JtYWxfY29tcHJl c3M7DQogICAgICAgICAgICAgYnVmWzBdID0gMTsNCiAgICAgICAgICAgICBidWZbMV0gPSBqOw0K QEAgLTY0ODcsMTEgKzY3NTQsMTIgQEAgc3RhdGljIGludCByYW1fbG9hZChRRU1VRmlsZSAqZiwg dm9pZCAqbw0KICAgICAgICAgICAgIHJhbV9kZWNvbXByZXNzX2J1ZihzLCBidWYgKyAxLCA5KTsN CiAgICAgICAgICAgICBic19pbmRleCA9IGJ1ZlsxXTsNCiAgICAgICAgICAgICBzZWN0b3JfbnVt ID0gYmU2NF90b19jcHVwdSgoY29uc3QgdWludDY0X3QgKikoYnVmICsgMikpOw0KLSAgICAgICAg ICAgIGlmIChic19pbmRleCA+PSBNQVhfRElTS1MgfHwgYnNfdGFibGVbYnNfaW5kZXhdID09IE5V TEwpIHsNCisgICAgICAgICAgICBpZiAoYnNfaW5kZXggPj0gbmJfZHJpdmVzKSB7DQogICAgICAg ICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiSW52YWxpZCBibG9jayBkZXZpY2UgaW5kZXggJWRc biIsIGJzX2luZGV4KTsNCiAgICAgICAgICAgICAgICAgZ290byBlcnJvcjsNCiAgICAgICAgICAg ICB9DQotICAgICAgICAgICAgaWYgKGJkcnZfcmVhZChic190YWJsZVtic19pbmRleF0sIHNlY3Rv cl9udW0sIHBoeXNfcmFtX2Jhc2UgKyBpLA0KKyAgICAgICAgICAgIGlmIChiZHJ2X3JlYWQoZHJp dmVzX3RhYmxlW2JzX2luZGV4XS5iZHJ2LCBzZWN0b3JfbnVtLA0KKwkgICAgICAgICAgICAgICAg ICBwaHlzX3JhbV9iYXNlICsgaSwNCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEJEUlZfSEFT SF9CTE9DS19TSVpFIC8gNTEyKSA8IDApIHsNCiAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRl cnIsICJFcnJvciB3aGlsZSByZWFkaW5nIHNlY3RvciAlZDolIiBQUklkNjQgIlxuIiwNCiAgICAg ICAgICAgICAgICAgICAgICAgICBic19pbmRleCwgc2VjdG9yX251bSk7DQpAQCAtNjk4OCw2ICs3 MjU2LDggQEAgc3RhdGljIHZvaWQgaGVscChpbnQgZXhpdGNvZGUpDQogICAgICAgICAgICAiLWhk YS8taGRiIGZpbGUgIHVzZSAnZmlsZScgYXMgSURFIGhhcmQgZGlzayAwLzEgaW1hZ2VcbiINCiAg ICAgICAgICAgICItaGRjLy1oZGQgZmlsZSAgdXNlICdmaWxlJyBhcyBJREUgaGFyZCBkaXNrIDIv MyBpbWFnZVxuIg0KICAgICAgICAgICAgIi1jZHJvbSBmaWxlICAgICB1c2UgJ2ZpbGUnIGFzIElE RSBjZHJvbSBpbWFnZSAoY2Ryb20gaXMgaWRlMSBtYXN0ZXIpXG4iDQorCSAgICItZHJpdmUgW2Zp bGU9ZmlsZV1bLGlmPXR5cGVdWyxidXM9bl1bLHVuaXQ9bV1bLG1lZGlhPWRdWyxjeWxzPWMsaGVh ZHM9aCxzZWNzPXNbLHRyYW5zPXRdXVtzbmFwc2hvdD1vbnxvZmZdXG4iDQorCSAgICIgICAgICAg ICAgICAgICAgdXNlICdmaWxlJyBhcyBhIGRyaXZlIGltYWdlXG4iDQogICAgICAgICAgICAiLW10 ZGJsb2NrIGZpbGUgIHVzZSAnZmlsZScgYXMgb24tYm9hcmQgRmxhc2ggbWVtb3J5IGltYWdlXG4i DQogICAgICAgICAgICAiLXNkIGZpbGUgICAgICAgIHVzZSAnZmlsZScgYXMgU2VjdXJlRGlnaXRh bCBjYXJkIGltYWdlXG4iDQogICAgICAgICAgICAiLXBmbGFzaCBmaWxlICAgIHVzZSAnZmlsZScg YXMgYSBwYXJhbGxlbCBmbGFzaCBpbWFnZVxuIg0KQEAgLTcxMzMsNiArNzQwMyw3IEBAIGVudW0g ew0KICAgICBRRU1VX09QVElPTl9oZGIsDQogICAgIFFFTVVfT1BUSU9OX2hkYywNCiAgICAgUUVN VV9PUFRJT05faGRkLA0KKyAgICBRRU1VX09QVElPTl9kcml2ZSwNCiAgICAgUUVNVV9PUFRJT05f Y2Ryb20sDQogICAgIFFFTVVfT1BUSU9OX210ZGJsb2NrLA0KICAgICBRRU1VX09QVElPTl9zZCwN CkBAIC03MjIyLDYgKzc0OTMsNyBAQCBjb25zdCBRRU1VT3B0aW9uIHFlbXVfb3B0aW9uc1tdID0g ew0KICAgICB7ICJoZGIiLCBIQVNfQVJHLCBRRU1VX09QVElPTl9oZGIgfSwNCiAgICAgeyAiaGRj IiwgSEFTX0FSRywgUUVNVV9PUFRJT05faGRjIH0sDQogICAgIHsgImhkZCIsIEhBU19BUkcsIFFF TVVfT1BUSU9OX2hkZCB9LA0KKyAgICB7ICJkcml2ZSIsIEhBU19BUkcsIFFFTVVfT1BUSU9OX2Ry aXZlIH0sDQogICAgIHsgImNkcm9tIiwgSEFTX0FSRywgUUVNVV9PUFRJT05fY2Ryb20gfSwNCiAg ICAgeyAibXRkYmxvY2siLCBIQVNfQVJHLCBRRU1VX09QVElPTl9tdGRibG9jayB9LA0KICAgICB7 ICJzZCIsIEhBU19BUkcsIFFFTVVfT1BUSU9OX3NkIH0sDQpAQCAtNzMzNCwxNiArNzYwNiw5IEBA IGludCBxZW11X2tleV9jaGVjayhCbG9ja0RyaXZlclN0YXRlICpicywNCiANCiBzdGF0aWMgQmxv Y2tEcml2ZXJTdGF0ZSAqZ2V0X2JkcnYoaW50IGluZGV4KQ0KIHsNCi0gICAgQmxvY2tEcml2ZXJT dGF0ZSAqYnM7DQotDQotICAgIGlmIChpbmRleCA8IDQpIHsNCi0gICAgICAgIGJzID0gYnNfdGFi bGVbaW5kZXhdOw0KLSAgICB9IGVsc2UgaWYgKGluZGV4IDwgNikgew0KLSAgICAgICAgYnMgPSBm ZF90YWJsZVtpbmRleCAtIDRdOw0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgYnMgPSBOVUxMOw0K LSAgICB9DQotICAgIHJldHVybiBiczsNCisgICAgaWYgKGluZGV4ID4gbmJfZHJpdmVzKQ0KKyAg ICAgICAgcmV0dXJuIE5VTEw7DQorICAgIHJldHVybiBkcml2ZXNfdGFibGVbaW5kZXhdLmJkcnY7 DQogfQ0KIA0KIHN0YXRpYyB2b2lkIHJlYWRfcGFzc3dvcmRzKHZvaWQpDQpAQCAtNzUzOCwxOCAr NzgwMywxNSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQogICAgIGludCB1c2Vf Z2Ric3R1YjsNCiAgICAgY29uc3QgY2hhciAqZ2Ric3R1Yl9wb3J0Ow0KICNlbmRpZg0KLSAgICBp bnQgaSwgY2Ryb21faW5kZXgsIHBmbGFzaF9pbmRleDsNCisgICAgaW50IGk7DQogICAgIGludCBz bmFwc2hvdCwgbGludXhfYm9vdDsNCiAgICAgY29uc3QgY2hhciAqaW5pdHJkX2ZpbGVuYW1lOw0K LSAgICBjb25zdCBjaGFyICpoZF9maWxlbmFtZVtNQVhfRElTS1NdLCAqZmRfZmlsZW5hbWVbTUFY X0ZEXTsNCi0gICAgY29uc3QgY2hhciAqcGZsYXNoX2ZpbGVuYW1lW01BWF9QRkxBU0hdOw0KLSAg ICBjb25zdCBjaGFyICpzZF9maWxlbmFtZTsNCi0gICAgY29uc3QgY2hhciAqbXRkX2ZpbGVuYW1l Ow0KICAgICBjb25zdCBjaGFyICprZXJuZWxfZmlsZW5hbWUsICprZXJuZWxfY21kbGluZTsNCiAg ICAgRGlzcGxheVN0YXRlICpkcyA9ICZkaXNwbGF5X3N0YXRlOw0KICAgICBpbnQgY3lscywgaGVh ZHMsIHNlY3MsIHRyYW5zbGF0aW9uOw0KICAgICBjaGFyIG5ldF9jbGllbnRzW01BWF9ORVRfQ0xJ RU5UU11bMjU2XTsNCiAgICAgaW50IG5iX25ldF9jbGllbnRzOw0KKyAgICBpbnQgaGRhX2luZGV4 Ow0KICAgICBpbnQgb3B0aW5kOw0KICAgICBjb25zdCBjaGFyICpyLCAqb3B0YXJnOw0KICAgICBD aGFyRHJpdmVyU3RhdGUgKm1vbml0b3JfaGQ7DQpAQCAtNzYwMiwxNSArNzg2NCw2IEBAIGludCBt YWluKGludCBhcmdjLCBjaGFyICoqYXJndikNCiAgICAgbWFjaGluZSA9IGZpcnN0X21hY2hpbmU7 DQogICAgIGNwdV9tb2RlbCA9IE5VTEw7DQogICAgIGluaXRyZF9maWxlbmFtZSA9IE5VTEw7DQot ICAgIGZvcihpID0gMDsgaSA8IE1BWF9GRDsgaSsrKQ0KLSAgICAgICAgZmRfZmlsZW5hbWVbaV0g PSBOVUxMOw0KLSAgICBmb3IoaSA9IDA7IGkgPCBNQVhfRElTS1M7IGkrKykNCi0gICAgICAgIGhk X2ZpbGVuYW1lW2ldID0gTlVMTDsNCi0gICAgZm9yKGkgPSAwOyBpIDwgTUFYX1BGTEFTSDsgaSsr KQ0KLSAgICAgICAgcGZsYXNoX2ZpbGVuYW1lW2ldID0gTlVMTDsNCi0gICAgcGZsYXNoX2luZGV4 ID0gMDsNCi0gICAgc2RfZmlsZW5hbWUgPSBOVUxMOw0KLSAgICBtdGRfZmlsZW5hbWUgPSBOVUxM Ow0KICAgICByYW1fc2l6ZSA9IERFRkFVTFRfUkFNX1NJWkUgKiAxMDI0ICogMTAyNDsNCiAgICAg dmdhX3JhbV9zaXplID0gVkdBX1JBTV9TSVpFOw0KICNpZmRlZiBDT05GSUdfR0RCU1RVQg0KQEAg LTc2MjEsMTEgKzc4NzQsNiBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQogICAg IG5vZ3JhcGhpYyA9IDA7DQogICAgIGtlcm5lbF9maWxlbmFtZSA9IE5VTEw7DQogICAgIGtlcm5l bF9jbWRsaW5lID0gIiI7DQotI2lmZGVmIFRBUkdFVF9QUEMNCi0gICAgY2Ryb21faW5kZXggPSAx Ow0KLSNlbHNlDQotICAgIGNkcm9tX2luZGV4ID0gMjsNCi0jZW5kaWYNCiAgICAgY3lscyA9IGhl YWRzID0gc2VjcyA9IDA7DQogICAgIHRyYW5zbGF0aW9uID0gQklPU19BVEFfVFJBTlNMQVRJT05f QVVUTzsNCiAgICAgcHN0cmNweShtb25pdG9yX2RldmljZSwgc2l6ZW9mKG1vbml0b3JfZGV2aWNl KSwgInZjIik7DQpAQCAtNzY0Myw2ICs3ODkxLDkgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQ0KICAgICB1c2JfZGV2aWNlc19pbmRleCA9IDA7DQogDQogICAgIG5iX25ldF9jbGll bnRzID0gMDsNCisgICAgbmJfZHJpdmVzID0gMDsNCisgICAgbmJfZHJpdmVzX29wdCA9IDA7DQor ICAgIGhkYV9pbmRleCA9IC0xOw0KIA0KICAgICBuYl9uaWNzID0gMDsNCiAgICAgLyogZGVmYXVs dCBtYWMgYWRkcmVzcyBvZiB0aGUgZmlyc3QgbmV0d29yayBpbnRlcmZhY2UgKi8NCkBAIC03NjUz LDcgKzc5MDQsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQogICAgICAgICAg ICAgYnJlYWs7DQogICAgICAgICByID0gYXJndltvcHRpbmRdOw0KICAgICAgICAgaWYgKHJbMF0g IT0gJy0nKSB7DQotICAgICAgICAgICAgaGRfZmlsZW5hbWVbMF0gPSBhcmd2W29wdGluZCsrXTsN CisJICAgIGhkYV9pbmRleCA9IGRyaXZlX2FkZChIRF9BTElBUywgYXJndltvcHRpbmQrK10sIDAs IDApOw0KICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICBjb25zdCBRRU1VT3B0aW9uICpw b3B0Ow0KIA0KQEAgLTc3MTMsMjkgKzc5NjQsMzggQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIg Kiphcmd2KQ0KICAgICAgICAgICAgICAgICBpbml0cmRfZmlsZW5hbWUgPSBvcHRhcmc7DQogICAg ICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgIGNhc2UgUUVNVV9PUFRJT05faGRhOg0K KyAgICAgICAgICAgICAgICBpZiAoY3lscyA9PSAwKQ0KKyAgICAgICAgICAgICAgICAgICAgaGRh X2luZGV4ID0gZHJpdmVfYWRkKEhEX0FMSUFTLCBvcHRhcmcsIDAsIDApOw0KKyAgICAgICAgICAg ICAgICBlbHNlDQorICAgICAgICAgICAgICAgICAgICBoZGFfaW5kZXggPSBkcml2ZV9hZGQoSERf QUxJQVMNCisJCQkgICAgICIsY3lscz0lZCxoZWFkcz0lZCxzZWNzPSVkJXMiLA0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgb3B0YXJnLCAwLCAwLCBjeWxzLCBoZWFkcywgc2VjcywNCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uID09IEJJT1NfQVRBX1RSQU5T TEFUSU9OX0xCQSA/DQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIix0cmFucz1s YmEiIDoNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRyYW5zbGF0aW9uID09IEJJT1Nf QVRBX1RSQU5TTEFUSU9OX05PTkUgPw0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICIsdHJhbnM9bm9uZSIgOiAiIik7DQorICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAg ICAgICBjYXNlIFFFTVVfT1BUSU9OX2hkYjoNCiAgICAgICAgICAgICBjYXNlIFFFTVVfT1BUSU9O X2hkYzoNCiAgICAgICAgICAgICBjYXNlIFFFTVVfT1BUSU9OX2hkZDoNCiAgICAgICAgICAgICAg ICAgew0KICAgICAgICAgICAgICAgICAgICAgaW50IGhkX2luZGV4Ow0KICAgICAgICAgICAgICAg ICAgICAgaGRfaW5kZXggPSBwb3B0LT5pbmRleCAtIFFFTVVfT1BUSU9OX2hkYTsNCi0gICAgICAg ICAgICAgICAgICAgIGhkX2ZpbGVuYW1lW2hkX2luZGV4XSA9IG9wdGFyZzsNCi0gICAgICAgICAg ICAgICAgICAgIGlmIChoZF9pbmRleCA9PSBjZHJvbV9pbmRleCkNCi0gICAgICAgICAgICAgICAg ICAgICAgICBjZHJvbV9pbmRleCA9IC0xOw0KKwkJICAgIGRyaXZlX2FkZChIRF9BTElBUywgb3B0 YXJnLCBoZF9pbmRleCAvIE1BWF9JREVfREVWUywNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBoZF9pbmRleCAlIE1BWF9JREVfREVWUyk7DQogICAgICAg ICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgY2FzZSBR RU1VX09QVElPTl9kcml2ZToNCisgICAgICAgICAgICAgICAgZHJpdmVfYWRkKCIlcyIsIG9wdGFy Zyk7DQorCSAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgY2FzZSBRRU1VX09QVElPTl9tdGRi bG9jazoNCi0gICAgICAgICAgICAgICAgbXRkX2ZpbGVuYW1lID0gb3B0YXJnOw0KKwkgICAgICAg IGRyaXZlX2FkZChNVERfQUxJQVMsIG9wdGFyZyk7DQogICAgICAgICAgICAgICAgIGJyZWFrOw0K ICAgICAgICAgICAgIGNhc2UgUUVNVV9PUFRJT05fc2Q6DQotICAgICAgICAgICAgICAgIHNkX2Zp bGVuYW1lID0gb3B0YXJnOw0KKyAgICAgICAgICAgICAgICBkcml2ZV9hZGQoU0RfQUxJQVMsIG9w dGFyZyk7DQogICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgIGNhc2UgUUVNVV9P UFRJT05fcGZsYXNoOg0KLSAgICAgICAgICAgICAgICBpZiAocGZsYXNoX2luZGV4ID49IE1BWF9Q RkxBU0gpIHsNCi0gICAgICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicWVtdTogdG9v IG1hbnkgcGFyYWxsZWwgZmxhc2ggaW1hZ2VzXG4iKTsNCi0gICAgICAgICAgICAgICAgICAgIGV4 aXQoMSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgcGZsYXNoX2ZpbGVu YW1lW3BmbGFzaF9pbmRleCsrXSA9IG9wdGFyZzsNCisJICAgICAgICBkcml2ZV9hZGQoUEZMQVNI X0FMSUFTLCBvcHRhcmcpOw0KICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICBj YXNlIFFFTVVfT1BUSU9OX3NuYXBzaG90Og0KICAgICAgICAgICAgICAgICBzbmFwc2hvdCA9IDE7 DQpAQCAtNzc3NCw2ICs4MDM0LDE3IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikN CiAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInFlbXU6IGludmFsaWQg cGh5c2ljYWwgQ0hTIGZvcm1hdFxuIik7DQogICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgx KTsNCiAgICAgICAgICAgICAgICAgICAgIH0NCisJCSAgICBpZiAoaGRhX2luZGV4ICE9IC0xKQ0K KwkJICAgICAgICBzbnByaW50Zihkcml2ZXNfb3B0W2hkYV9pbmRleF0gKw0KKwkJCSAgICAgICAg IHN0cmxlbihkcml2ZXNfb3B0W2hkYV9pbmRleF0pLA0KKwkJCSAgICAgICAgIHNpemVvZihkcml2 ZXNfb3B0WzBdKSAtDQorCQkJCSBzdHJsZW4oZHJpdmVzX29wdFtoZGFfaW5kZXhdKSwNCisJCSAg ICAgICAgICAgICAgICAgIixjeWxzPSVkLGhlYWRzPSVkLHNlY3M9JWQlcyIsDQorCQkJICAgICAg ICAgY3lscywgaGVhZHMsIHNlY3MsDQorCQkJICAgICAgICAgdHJhbnNsYXRpb24gPT0gQklPU19B VEFfVFJBTlNMQVRJT05fTEJBID8NCisJCQkgICAgIAkgICAgIix0cmFucz1sYmEiIDoNCisJCQkg ICAgICAgICB0cmFuc2xhdGlvbiA9PSBCSU9TX0FUQV9UUkFOU0xBVElPTl9OT05FID8NCisJCQkg ICAgICAgICAgICAgIix0cmFucz1ub25lIiA6ICIiKTsNCiAgICAgICAgICAgICAgICAgfQ0KICAg ICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICBjYXNlIFFFTVVfT1BUSU9OX25vZ3Jh cGhpYzoNCkBAIC03NzkyLDkgKzgwNjMsNyBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFy Z3YpDQogICAgICAgICAgICAgICAgIGtlcm5lbF9jbWRsaW5lID0gb3B0YXJnOw0KICAgICAgICAg ICAgICAgICBicmVhazsNCiAgICAgICAgICAgICBjYXNlIFFFTVVfT1BUSU9OX2Nkcm9tOg0KLSAg ICAgICAgICAgICAgICBpZiAoY2Ryb21faW5kZXggPj0gMCkgew0KLSAgICAgICAgICAgICAgICAg ICAgaGRfZmlsZW5hbWVbY2Ryb21faW5kZXhdID0gb3B0YXJnOw0KLSAgICAgICAgICAgICAgICB9 DQorCQlkcml2ZV9hZGQoImZpbGU9JXMsIiBDRFJPTV9BTElBUywgb3B0YXJnKTsNCiAgICAgICAg ICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgY2FzZSBRRU1VX09QVElPTl9ib290Og0KICAg ICAgICAgICAgICAgICBpZiAoc3RybGVuKG9wdGFyZykgPiBNQVhfQk9PVF9ERVZJQ0VTKSB7DQpA QCAtNzgxNCwxMCArODA4Myw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikNCiAg ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICBj YXNlIFFFTVVfT1BUSU9OX2ZkYToNCi0gICAgICAgICAgICAgICAgZmRfZmlsZW5hbWVbMF0gPSBv cHRhcmc7DQotICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgIGNhc2UgUUVNVV9P UFRJT05fZmRiOg0KLSAgICAgICAgICAgICAgICBmZF9maWxlbmFtZVsxXSA9IG9wdGFyZzsNCisJ CWRyaXZlX2FkZCgiZmlsZT0lcywiIEZEX0FMSUFTLCBvcHRhcmcsDQorCQkgICAgICAgICAgcG9w dC0+aW5kZXggLSBRRU1VX09QVElPTl9mZGEpOw0KICAgICAgICAgICAgICAgICBicmVhazsNCiAj aWZkZWYgVEFSR0VUX0kzODYNCiAgICAgICAgICAgICBjYXNlIFFFTVVfT1BUSU9OX25vX2ZkX2Jv b3RjaGs6DQpAQCAtODE5NywyMCArODQ2NSwxMSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAq KmFyZ3YpDQogDQogICAgIGlmICghbGludXhfYm9vdCAmJg0KICAgICAgICAgKCFzdHJjaHIoYm9v dF9kZXZpY2UsICduJykpICYmDQotICAgICAgICBoZF9maWxlbmFtZVswXSA9PSAnXDAnICYmDQot ICAgICAgICAoY2Ryb21faW5kZXggPj0gMCAmJiBoZF9maWxlbmFtZVtjZHJvbV9pbmRleF0gPT0g J1wwJykgJiYNCi0gICAgICAgIGZkX2ZpbGVuYW1lWzBdID09ICdcMCcpDQorICAgICAgICBuYl9k cml2ZXNfb3B0ID09IDApDQogICAgICAgICBoZWxwKDEpOw0KIA0KLSAgICAvKiBib290IHRvIGZs b3BweSBvciB0aGUgZGVmYXVsdCBjZCBpZiBubyBoYXJkIGRpc2sgZGVmaW5lZCB5ZXQgKi8NCiAg ICAgaWYgKCFib290X2RldmljZVswXSkgew0KLSAgICAgICAgaWYgKGhkX2ZpbGVuYW1lWzBdICE9 ICdcMCcpDQotICAgICAgICAgICAgYm9vdF9kZXZpY2VbMF0gPSAnYyc7DQotICAgICAgICBlbHNl IGlmIChmZF9maWxlbmFtZVswXSAhPSAnXDAnKQ0KLSAgICAgICAgICAgIGJvb3RfZGV2aWNlWzBd ID0gJ2EnOw0KLSAgICAgICAgZWxzZQ0KLSAgICAgICAgICAgIGJvb3RfZGV2aWNlWzBdID0gJ2Qn Ow0KLSAgICAgICAgYm9vdF9kZXZpY2VbMV0gPSAwOw0KKyAgICAgICAgcHN0cmNweShib290X2Rl dmljZSwgc2l6ZW9mKGJvb3RfZGV2aWNlKSwgQk9PVENIQVJTKTsNCiAgICAgfQ0KICAgICBzZXR2 YnVmKHN0ZG91dCwgTlVMTCwgX0lPTEJGLCAwKTsNCiANCkBAIC04Mjc5LDk3ICs4NTM4LDIzIEBA IGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikNCiAgICAgICAgIGV4aXQoMSk7DQogICAg IH0NCiANCi0gICAgLyogd2UgYWx3YXlzIGNyZWF0ZSB0aGUgY2Ryb20gZHJpdmUsIGV2ZW4gaWYg bm8gZGlzayBpcyB0aGVyZSAqLw0KICAgICBiZHJ2X2luaXQoKTsNCi0gICAgaWYgKGNkcm9tX2lu ZGV4ID49IDApIHsNCi0gICAgICAgIGJzX3RhYmxlW2Nkcm9tX2luZGV4XSA9IGJkcnZfbmV3KCJj ZHJvbSIpOw0KLSAgICAgICAgYmRydl9zZXRfdHlwZV9oaW50KGJzX3RhYmxlW2Nkcm9tX2luZGV4 XSwgQkRSVl9UWVBFX0NEUk9NKTsNCi0gICAgfQ0KIA0KLSAgICAvKiBvcGVuIHRoZSB2aXJ0dWFs IGJsb2NrIGRldmljZXMgKi8NCi0gICAgZm9yKGkgPSAwOyBpIDwgTUFYX0RJU0tTOyBpKyspIHsN Ci0gICAgICAgIGlmIChoZF9maWxlbmFtZVtpXSkgew0KLSAgICAgICAgICAgIGlmICghYnNfdGFi bGVbaV0pIHsNCi0gICAgICAgICAgICAgICAgY2hhciBidWZbNjRdOw0KLSAgICAgICAgICAgICAg ICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiaGQlYyIsIGkgKyAnYScpOw0KLSAgICAgICAg ICAgICAgICBic190YWJsZVtpXSA9IGJkcnZfbmV3KGJ1Zik7DQotICAgICAgICAgICAgfQ0KLSAg ICAgICAgICAgIGlmIChiZHJ2X29wZW4oYnNfdGFibGVbaV0sIGhkX2ZpbGVuYW1lW2ldLCBzbmFw c2hvdCA/IEJEUlZfT19TTkFQU0hPVCA6IDApIDwgMCkgew0KLSAgICAgICAgICAgICAgICBmcHJp bnRmKHN0ZGVyciwgInFlbXU6IGNvdWxkIG5vdCBvcGVuIGhhcmQgZGlzayBpbWFnZSAnJXMnXG4i LA0KLSAgICAgICAgICAgICAgICAgICAgICAgIGhkX2ZpbGVuYW1lW2ldKTsNCi0gICAgICAgICAg ICAgICAgZXhpdCgxKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKGkgPT0gMCAm JiBjeWxzICE9IDApIHsNCi0gICAgICAgICAgICAgICAgYmRydl9zZXRfZ2VvbWV0cnlfaGludChi c190YWJsZVtpXSwgY3lscywgaGVhZHMsIHNlY3MpOw0KLSAgICAgICAgICAgICAgICBiZHJ2X3Nl dF90cmFuc2xhdGlvbl9oaW50KGJzX3RhYmxlW2ldLCB0cmFuc2xhdGlvbik7DQotICAgICAgICAg ICAgfQ0KLSAgICAgICAgfQ0KLSAgICB9DQorICAgIC8qIHdlIGFsd2F5cyBjcmVhdGUgdGhlIGNk cm9tIGRyaXZlLCBldmVuIGlmIG5vIGRpc2sgaXMgdGhlcmUgKi8NCiANCi0gICAgLyogd2UgYWx3 YXlzIGNyZWF0ZSBhdCBsZWFzdCBvbmUgZmxvcHB5IGRpc2sgKi8NCi0gICAgZmRfdGFibGVbMF0g PSBiZHJ2X25ldygiZmRhIik7DQotICAgIGJkcnZfc2V0X3R5cGVfaGludChmZF90YWJsZVswXSwg QkRSVl9UWVBFX0ZMT1BQWSk7DQotDQotICAgIGZvcihpID0gMDsgaSA8IE1BWF9GRDsgaSsrKSB7 DQotICAgICAgICBpZiAoZmRfZmlsZW5hbWVbaV0pIHsNCi0gICAgICAgICAgICBpZiAoIWZkX3Rh YmxlW2ldKSB7DQotICAgICAgICAgICAgICAgIGNoYXIgYnVmWzY0XTsNCi0gICAgICAgICAgICAg ICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgImZkJWMiLCBpICsgJ2EnKTsNCi0gICAgICAg ICAgICAgICAgZmRfdGFibGVbaV0gPSBiZHJ2X25ldyhidWYpOw0KLSAgICAgICAgICAgICAgICBi ZHJ2X3NldF90eXBlX2hpbnQoZmRfdGFibGVbaV0sIEJEUlZfVFlQRV9GTE9QUFkpOw0KLSAgICAg ICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoZmRfZmlsZW5hbWVbaV1bMF0gIT0gJ1wwJykgew0K LSAgICAgICAgICAgICAgICBpZiAoYmRydl9vcGVuKGZkX3RhYmxlW2ldLCBmZF9maWxlbmFtZVtp XSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzbmFwc2hvdCA/IEJEUlZfT19TTkFQ U0hPVCA6IDApIDwgMCkgew0KLSAgICAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJx ZW11OiBjb3VsZCBub3Qgb3BlbiBmbG9wcHkgZGlzayBpbWFnZSAnJXMnXG4iLA0KLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICBmZF9maWxlbmFtZVtpXSk7DQotICAgICAgICAgICAgICAgICAg ICBleGl0KDEpOw0KLSAgICAgICAgICAgICAgICB9DQotICAgICAgICAgICAgfQ0KLSAgICAgICAg fQ0KLSAgICB9DQorICAgIGlmIChuYl9kcml2ZXNfb3B0IDwgTUFYX0RSSVZFUykNCisgICAgICAg IGRyaXZlX2FkZChDRFJPTV9BTElBUyk7DQogDQotICAgIC8qIE9wZW4gdGhlIHZpcnR1YWwgcGFy YWxsZWwgZmxhc2ggYmxvY2sgZGV2aWNlcyAqLw0KLSAgICBmb3IoaSA9IDA7IGkgPCBNQVhfUEZM QVNIOyBpKyspIHsNCi0gICAgICAgIGlmIChwZmxhc2hfZmlsZW5hbWVbaV0pIHsNCi0gICAgICAg ICAgICBpZiAoIXBmbGFzaF90YWJsZVtpXSkgew0KLSAgICAgICAgICAgICAgICBjaGFyIGJ1Zls2 NF07DQotICAgICAgICAgICAgICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJmbCVjIiwg aSArICdhJyk7DQotICAgICAgICAgICAgICAgIHBmbGFzaF90YWJsZVtpXSA9IGJkcnZfbmV3KGJ1 Zik7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChiZHJ2X29wZW4ocGZsYXNoX3Rh YmxlW2ldLCBwZmxhc2hfZmlsZW5hbWVbaV0sDQotICAgICAgICAgICAgICAgICAgICAgICAgICBz bmFwc2hvdCA/IEJEUlZfT19TTkFQU0hPVCA6IDApIDwgMCkgew0KLSAgICAgICAgICAgICAgICBm cHJpbnRmKHN0ZGVyciwgInFlbXU6IGNvdWxkIG5vdCBvcGVuIGZsYXNoIGltYWdlICclcydcbiIs DQotICAgICAgICAgICAgICAgICAgICAgICAgcGZsYXNoX2ZpbGVuYW1lW2ldKTsNCi0gICAgICAg ICAgICAgICAgZXhpdCgxKTsNCi0gICAgICAgICAgICB9DQotICAgICAgICB9DQotICAgIH0NCisg ICAgLyogd2UgYWx3YXlzIGNyZWF0ZSBhdCBsZWFzdCBvbiBmbG9wcHkgKi8NCiANCi0gICAgc2Rf YmRydiA9IGJkcnZfbmV3ICgic2QiKTsNCi0gICAgLyogRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5 IGEgZmxvcHB5LCBidXQgaXQncyBhIHJlYXNvbmFibGUNCi0gICAgICAgYXBwcm94aW1hdGlvbi4g ICovDQotICAgIGJkcnZfc2V0X3R5cGVfaGludChzZF9iZHJ2LCBCRFJWX1RZUEVfRkxPUFBZKTsN Ci0gICAgaWYgKHNkX2ZpbGVuYW1lKSB7DQotICAgICAgICBpZiAoYmRydl9vcGVuKHNkX2JkcnYs IHNkX2ZpbGVuYW1lLA0KLSAgICAgICAgICAgICAgICAgICAgICBzbmFwc2hvdCA/IEJEUlZfT19T TkFQU0hPVCA6IDApIDwgMCkgew0KLSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicWVtdTog Y291bGQgbm90IG9wZW4gU0QgY2FyZCBpbWFnZSAlc1xuIiwNCi0gICAgICAgICAgICAgICAgICAg IHNkX2ZpbGVuYW1lKTsNCi0gICAgICAgIH0gZWxzZQ0KLSAgICAgICAgICAgIHFlbXVfa2V5X2No ZWNrKHNkX2JkcnYsIHNkX2ZpbGVuYW1lKTsNCi0gICAgfQ0KKyAgICBpZiAobmJfZHJpdmVzX29w dCA8IE1BWF9EUklWRVMpDQorICAgICAgICBkcml2ZV9hZGQoRkRfQUxJQVMsIDApOw0KIA0KLSAg ICBpZiAobXRkX2ZpbGVuYW1lKSB7DQotICAgICAgICBtdGRfYmRydiA9IGJkcnZfbmV3ICgibXRk Iik7DQotICAgICAgICBpZiAoYmRydl9vcGVuKG10ZF9iZHJ2LCBtdGRfZmlsZW5hbWUsDQotICAg ICAgICAgICAgICAgICAgICAgIHNuYXBzaG90ID8gQkRSVl9PX1NOQVBTSE9UIDogMCkgPCAwIHx8 DQotICAgICAgICAgICAgcWVtdV9rZXlfY2hlY2sobXRkX2JkcnYsIG10ZF9maWxlbmFtZSkpIHsN Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInFlbXU6IGNvdWxkIG5vdCBvcGVuIEZsYXNo IGltYWdlICVzXG4iLA0KLSAgICAgICAgICAgICAgICAgICAgbXRkX2ZpbGVuYW1lKTsNCi0gICAg ICAgICAgICBiZHJ2X2RlbGV0ZShtdGRfYmRydik7DQotICAgICAgICAgICAgbXRkX2JkcnYgPSAw Ow0KLSAgICAgICAgfQ0KLSAgICB9DQorICAgIC8qIG9wZW4gdGhlIHZpcnR1YWwgYmxvY2sgZGV2 aWNlcyAqLw0KKw0KKyAgICBmb3IoaSA9IDA7IGkgPCBuYl9kcml2ZXNfb3B0OyBpKyspDQorICAg ICAgICBpZiAoZHJpdmVfaW5pdChkcml2ZXNfb3B0W2ldLCBzbmFwc2hvdCwgbWFjaGluZSkgPT0g LTEpDQorCSAgICBleGl0KDEpOw0KIA0KICAgICByZWdpc3Rlcl9zYXZldm0oInRpbWVyIiwgMCwg MiwgdGltZXJfc2F2ZSwgdGltZXJfbG9hZCwgTlVMTCk7DQogICAgIHJlZ2lzdGVyX3NhdmV2bSgi cmFtIiwgMCwgMiwgcmFtX3NhdmUsIHJhbV9sb2FkLCBOVUxMKTsNCkluZGV4OiBxZW11L3ZsLmgN Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0NCi0tLSBxZW11Lm9yaWcvdmwuaAkyMDA3LTExLTA5IDIyOjA0OjI4LjAwMDAw MDAwMCArMDEwMA0KKysrIHFlbXUvdmwuaAkyMDA3LTExLTEwIDAwOjI3OjU4LjAwMDAwMDAwMCAr MDEwMA0KQEAgLTEwMDksMTMgKzEwMDksMjcgQEAgdm9pZCBkb19pbmZvX3ZuYyh2b2lkKTsNCiAv KiB4X2tleW1hcC5jICovDQogZXh0ZXJuIHVpbnQ4X3QgX3RyYW5zbGF0ZV9rZXljb2RlKGNvbnN0 IGludCBrZXkpOw0KIA0KLS8qIGlkZS5jICovDQotI2RlZmluZSBNQVhfRElTS1MgNA0KK3R5cGVk ZWYgZW51bSB7DQorICAgIElGX0lERSwgSUZfU0NTSSwgSUZfRkxPUFBZLCBJRl9QRkxBU0gsIElG X01URCwgSUZfU0QNCit9IEJsb2NrSW50ZXJmYWNlVHlwZTsNCisNCit0eXBlZGVmIHN0cnVjdCBE cml2ZUluZm8gew0KKyAgICBCbG9ja0RyaXZlclN0YXRlICpiZHJ2Ow0KKyAgICBCbG9ja0ludGVy ZmFjZVR5cGUgaW50ZXJmYWNlOw0KKyAgICBpbnQgYnVzOw0KKyAgICBpbnQgdW5pdDsNCit9IERy aXZlSW5mbzsNCisNCisjZGVmaW5lIE1BWF9EUklWRVMgMzINCiANCi1leHRlcm4gQmxvY2tEcml2 ZXJTdGF0ZSAqYnNfdGFibGVbTUFYX0RJU0tTICsgMV07DQotZXh0ZXJuIEJsb2NrRHJpdmVyU3Rh dGUgKnNkX2JkcnY7DQotZXh0ZXJuIEJsb2NrRHJpdmVyU3RhdGUgKm10ZF9iZHJ2Ow0KK2V4dGVy biBpbnQgbmJfZHJpdmVzOw0KK2V4dGVybiBEcml2ZUluZm8gZHJpdmVzX3RhYmxlW01BWF9EUklW RVMrMV07DQogDQorZXh0ZXJuIGludCBkcml2ZV9nZXRfaW5kZXgoQmxvY2tJbnRlcmZhY2VUeXBl IGludGVyZmFjZSwgaW50IGJ1cywgaW50IHVuaXQpOw0KK2V4dGVybiBpbnQgZHJpdmVfZ2V0X21h eF9idXMoQmxvY2tJbnRlcmZhY2VUeXBlIGludGVyZmFjZSk7DQorDQorLyogaWRlLmMgKi8NCisj ZGVmaW5lIE1BWF9JREVfREVWUyAyDQogdm9pZCBpc2FfaWRlX2luaXQoaW50IGlvYmFzZSwgaW50 IGlvYmFzZTIsIHFlbXVfaXJxIGlycSwNCiAgICAgICAgICAgICAgICAgICBCbG9ja0RyaXZlclN0 YXRlICpoZDAsIEJsb2NrRHJpdmVyU3RhdGUgKmhkMSk7DQogdm9pZCBwY2lfY21kNjQ2X2lkZV9p bml0KFBDSUJ1cyAqYnVzLCBCbG9ja0RyaXZlclN0YXRlICoqaGRfdGFibGUsDQpAQCAtMTA2MCw3 ICsxMDc0LDYgQEAgdm9pZCBETUFfcmVnaXN0ZXJfY2hhbm5lbCAoaW50IG5jaGFuLA0KICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKm9wYXF1ZSk7DQogLyogZmRjLmMgKi8NCiAjZGVm aW5lIE1BWF9GRCAyDQotZXh0ZXJuIEJsb2NrRHJpdmVyU3RhdGUgKmZkX3RhYmxlW01BWF9GRF07 DQogDQogdHlwZWRlZiBzdHJ1Y3QgZmRjdHJsX3QgZmRjdHJsX3Q7DQogDQpAQCAtMTMyNyw4ICsx MzQwLDExIEBAIHZvaWQgKnNsYXZpb19taXNjX2luaXQodGFyZ2V0X3BoeXNfYWRkcl8NCiB2b2lk IHNsYXZpb19zZXRfcG93ZXJfZmFpbCh2b2lkICpvcGFxdWUsIGludCBwb3dlcl9mYWlsaW5nKTsN CiANCiAvKiBlc3AuYyAqLw0KKy8qIFRoZSBIQkEgaXMgSUQgNywgc28gZm9yIHNpbXBsaWNpdGx5 IGxpbWl0IHRvIDcgZGV2aWNlcy4gICovDQorI2RlZmluZSBNQVhfU0NTSV9ERVZTICAgICAgNw0K KyNkZWZpbmUgRVNQX01BWF9ERVZTICAgICBNQVhfU0NTSV9ERVZTDQogdm9pZCBlc3Bfc2NzaV9h dHRhY2godm9pZCAqb3BhcXVlLCBCbG9ja0RyaXZlclN0YXRlICpiZCwgaW50IGlkKTsNCi12b2lk ICplc3BfaW5pdChCbG9ja0RyaXZlclN0YXRlICoqYmQsIHRhcmdldF9waHlzX2FkZHJfdCBlc3Bh ZGRyLA0KK3ZvaWQgKmVzcF9pbml0KHRhcmdldF9waHlzX2FkZHJfdCBlc3BhZGRyLA0KICAgICAg ICAgICAgICAgIHZvaWQgKmRtYV9vcGFxdWUsIHFlbXVfaXJxIGlycSwgcWVtdV9pcnEgKnJlc2V0 KTsNCiANCiAvKiBzcGFyYzMyX2RtYS5jICovDQpAQCAtMTQ1OCw2ICsxNDc0LDcgQEAgdm9pZCBz Y3NpX2NhbmNlbF9pbyhTQ1NJRGV2aWNlICpzLCB1aW50Mw0KIHVpbnQ4X3QgKnNjc2lfZ2V0X2J1 ZihTQ1NJRGV2aWNlICpzLCB1aW50MzJfdCB0YWcpOw0KIA0KIC8qIGxzaTUzYzg5NWEuYyAqLw0K KyNkZWZpbmUgTFNJX01BWF9ERVZTICAgICAgTUFYX1NDU0lfREVWUw0KIHZvaWQgbHNpX3Njc2lf YXR0YWNoKHZvaWQgKm9wYXF1ZSwgQmxvY2tEcml2ZXJTdGF0ZSAqYmQsIGludCBpZCk7DQogdm9p ZCAqbHNpX3Njc2lfaW5pdChQQ0lCdXMgKmJ1cywgaW50IGRldmZuKTsNCiANCkBAIC0xNTY2LDcg KzE1ODMsNiBAQCBpbnQgdGM1ODEyOF9pbml0KHN0cnVjdCBTSDc3NTBTdGF0ZSAqcywgDQogDQog LyogTk9SIGZsYXNoIGRldmljZXMgKi8NCiAjZGVmaW5lIE1BWF9QRkxBU0ggNA0KLWV4dGVybiBC bG9ja0RyaXZlclN0YXRlICpwZmxhc2hfdGFibGVbTUFYX1BGTEFTSF07DQogdHlwZWRlZiBzdHJ1 Y3QgcGZsYXNoX3QgcGZsYXNoX3Q7DQogDQogcGZsYXNoX3QgKnBmbGFzaF9yZWdpc3RlciAodGFy Z2V0X3BoeXNfYWRkcl90IGJhc2UsIHJhbV9hZGRyX3Qgb2ZmLA0KSW5kZXg6IHFlbXUvbW9uaXRv ci5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09DQotLS0gcWVtdS5vcmlnL21vbml0b3IuYwkyMDA3LTExLTA5IDIyOjA0 OjI4LjAwMDAwMDAwMCArMDEwMA0KKysrIHFlbXUvbW9uaXRvci5jCTIwMDctMTEtMDkgMjI6MDQ6 MzMuMDAwMDAwMDAwICswMTAwDQpAQCAtMjA0LDE2ICsyMDQsMTEgQEAgc3RhdGljIHZvaWQgZG9f Y29tbWl0KGNvbnN0IGNoYXIgKmRldmljZQ0KICAgICBpbnQgaSwgYWxsX2RldmljZXM7DQogDQog ICAgIGFsbF9kZXZpY2VzID0gIXN0cmNtcChkZXZpY2UsICJhbGwiKTsNCi0gICAgZm9yIChpID0g MDsgaSA8IE1BWF9ESVNLUzsgaSsrKSB7DQotICAgICAgICBpZiAoYnNfdGFibGVbaV0pIHsNCisg ICAgZm9yIChpID0gMDsgaSA8IG5iX2RyaXZlczsgaSsrKSB7DQogICAgICAgICAgICAgaWYgKGFs bF9kZXZpY2VzIHx8DQotICAgICAgICAgICAgICAgICFzdHJjbXAoYmRydl9nZXRfZGV2aWNlX25h bWUoYnNfdGFibGVbaV0pLCBkZXZpY2UpKQ0KLSAgICAgICAgICAgICAgICBiZHJ2X2NvbW1pdChi c190YWJsZVtpXSk7DQotICAgICAgICB9DQorICAgICAgICAgICAgICAgICFzdHJjbXAoYmRydl9n ZXRfZGV2aWNlX25hbWUoZHJpdmVzX3RhYmxlW2ldLmJkcnYpLCBkZXZpY2UpKQ0KKyAgICAgICAg ICAgICAgICBiZHJ2X2NvbW1pdChkcml2ZXNfdGFibGVbaV0uYmRydik7DQogICAgIH0NCi0gICAg aWYgKG10ZF9iZHJ2KQ0KLSAgICAgICAgaWYgKGFsbF9kZXZpY2VzIHx8ICFzdHJjbXAoYmRydl9n ZXRfZGV2aWNlX25hbWUobXRkX2JkcnYpLCBkZXZpY2UpKQ0KLSAgICAgICAgICAgIGJkcnZfY29t bWl0KG10ZF9iZHJ2KTsNCiB9DQogDQogc3RhdGljIHZvaWQgZG9faW5mbyhjb25zdCBjaGFyICpp dGVtKQ0KSW5kZXg6IHFlbXUvaHcvbWlwc19waWNhNjEuYw0KPT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHFlbXUu b3JpZy9ody9taXBzX3BpY2E2MS5jCTIwMDctMTEtMDkgMjI6MDQ6MjguMDAwMDAwMDAwICswMTAw DQorKysgcWVtdS9ody9taXBzX3BpY2E2MS5jCTIwMDctMTEtMDkgMjM6NDI6MzcuMDAwMDAwMDAw ICswMTAwDQpAQCAtMzgsNiArMzgsOCBAQA0KIA0KICNkZWZpbmUgVklSVF9UT19QSFlTX0FEREVO RCAoLSgoaW50NjRfdCkoaW50MzJfdCkweDgwMDAwMDAwKSkNCiANCisjZGVmaW5lIE1BWF9JREVf QlVTIDINCisNCiBzdGF0aWMgY29uc3QgaW50IGlkZV9pb2Jhc2VbMl0gPSB7IDB4MWYwLCAweDE3 MCB9Ow0KIHN0YXRpYyBjb25zdCBpbnQgaWRlX2lvYmFzZTJbMl0gPSB7IDB4M2Y2LCAweDM3NiB9 Ow0KIHN0YXRpYyBjb25zdCBpbnQgaWRlX2lycVsyXSA9IHsgMTQsIDE1IH07DQpAQCAtNjgsNiAr NzAsOCBAQCB2b2lkIG1pcHNfcGljYTYxX2luaXQgKGludCByYW1fc2l6ZSwgaW50DQogICAgIG1p cHNfZGVmX3QgKmRlZjsNCiAgICAgaW50IGF2YWlsYWJsZV9yYW07DQogICAgIHFlbXVfaXJxICpp ODI1OTsNCisgICAgaW50IGluZGV4Ow0KKyAgICBCbG9ja0RyaXZlclN0YXRlICpmZFtNQVhfRkRd Ow0KIA0KICAgICAvKiBpbml0IENQVXMgKi8NCiAgICAgaWYgKGNwdV9tb2RlbCA9PSBOVUxMKSB7 DQpAQCAtMTM2LDkgKzE0MCwxNCBAQCB2b2lkIG1pcHNfcGljYTYxX2luaXQgKGludCByYW1fc2l6 ZSwgaW50DQogICAgIGk4MDQyX21tX2luaXQoaTgyNTlbNl0sIGk4MjU5WzddLCAweDgwMDA1MDYw LCAwKTsNCiANCiAgICAgLyogSURFIGNvbnRyb2xsZXIgKi8NCi0gICAgZm9yKGkgPSAwOyBpIDwg MjsgaSsrKQ0KKyAgICBmb3IoaSA9IDA7IGkgPCBNQVhfSURFX0JVUzsgaSsrKSB7DQorICAgICAg ICBpbnQgaGQwLCBoZDE7DQorICAgICAgICBoZDAgPSBkcml2ZV9nZXRfaW5kZXgoSUZfSURFLCBp LCAwKTsNCisgICAgICAgIGhkMSA9IGRyaXZlX2dldF9pbmRleChJRl9JREUsIGksIDEpOw0KICAg ICAgICAgaXNhX2lkZV9pbml0KGlkZV9pb2Jhc2VbaV0sIGlkZV9pb2Jhc2UyW2ldLCBpODI1OVtp ZGVfaXJxW2ldXSwNCi0gICAgICAgICAgICAgICAgICAgICBic190YWJsZVsyICogaV0sIGJzX3Rh YmxlWzIgKiBpICsgMV0pOw0KKyAgICAgICAgICAgICAgICAgICAgIGhkMCA9PSAtMSA/IE5VTEwg OiBkcml2ZXNfdGFibGVbaGQwXS5iZHJ2LA0KKyAgICAgICAgICAgICAgICAgICAgIGhkMSA9PSAt MSA/IE5VTEwgOiBkcml2ZXNfdGFibGVbaGQxXS5iZHJ2KTsNCisgICAgfQ0KIA0KICAgICAvKiBO ZXR3b3JrIGNvbnRyb2xsZXIgKi8NCiAgICAgLyogRklYTUU6IG1pc3NpbmcgTlMgU09OSUMgRFA4 MzkzMiAqLw0KQEAgLTE0Nyw3ICsxNTYsMTMgQEAgdm9pZCBtaXBzX3BpY2E2MV9pbml0IChpbnQg cmFtX3NpemUsIGludA0KICAgICAvKiBGSVhNRTogbWlzc2luZyBOQ1IgNTNDOTQgKi8NCiANCiAg ICAgLyogSVNBIGRldmljZXMgKGZsb3BweSwgc2VyaWFsLCBwYXJhbGxlbCkgKi8NCi0gICAgZmRj dHJsX2luaXQoaTgyNTlbMV0sIDEsIDEsIDB4ODAwMDMwMDAsIGZkX3RhYmxlKTsNCisgICAgZm9y IChpID0gMDsgaSA8IDI7IGkrKykgew0KKyAgICAgICAgaW5kZXggPSBkcml2ZV9nZXRfaW5kZXgo SUZfRkxPUFBZLCAwLCBpKTsNCisgICAgICAgIGlmIChpbmRleCA9PSAtMSkNCisgICAgICAgICAg ICBjb250aW51ZTsNCisgICAgICAgIGZkW2ldID0gZHJpdmVzX3RhYmxlW2luZGV4XS5iZHJ2Ow0K KyAgICB9DQorICAgIGZkY3RybF9pbml0KGk4MjU5WzFdLCAxLCAxLCAweDgwMDAzMDAwLCBmZCk7 DQogICAgIGZvcihpID0gMDsgaSA8IE1BWF9TRVJJQUxfUE9SVFM7IGkrKykgew0KICAgICAgICAg aWYgKHNlcmlhbF9oZHNbaV0pIHsNCiAgICAgICAgICAgICBzZXJpYWxfbW1faW5pdChzZXJpYWxf YmFzZVtpXSwgMCwgaTgyNTlbc2VyaWFsX2lycVtpXV0sIHNlcmlhbF9oZHNbaV0sIDEpOw0KSW5k ZXg6IHFlbXUvaHcvbWlwc19yNGsuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHFlbXUub3JpZy9ody9taXBz X3I0ay5jCTIwMDctMTEtMDkgMjI6MDQ6MjguMDAwMDAwMDAwICswMTAwDQorKysgcWVtdS9ody9t aXBzX3I0ay5jCTIwMDctMTEtMDkgMjI6MDQ6MzMuMDAwMDAwMDAwICswMTAwDQpAQCAtMjMsNiAr MjMsOCBAQA0KIA0KICNkZWZpbmUgVklSVF9UT19QSFlTX0FEREVORCAoLSgoaW50NjRfdCkoaW50 MzJfdCkweDgwMDAwMDAwKSkNCiANCisjZGVmaW5lIE1BWF9JREVfQlVTIDINCisNCiBzdGF0aWMg Y29uc3QgaW50IGlkZV9pb2Jhc2VbMl0gPSB7IDB4MWYwLCAweDE3MCB9Ow0KIHN0YXRpYyBjb25z dCBpbnQgaWRlX2lvYmFzZTJbMl0gPSB7IDB4M2Y2LCAweDM3NiB9Ow0KIHN0YXRpYyBjb25zdCBp bnQgaWRlX2lycVsyXSA9IHsgMTQsIDE1IH07DQpAQCAtMTUwLDYgKzE1Miw4IEBAIHZvaWQgbWlw c19yNGtfaW5pdCAoaW50IHJhbV9zaXplLCBpbnQgdmcNCiAgICAgaW50IGk7DQogICAgIG1pcHNf ZGVmX3QgKmRlZjsNCiAgICAgcWVtdV9pcnEgKmk4MjU5Ow0KKyAgICBpbnQgaW5kZXg7DQorICAg IEJsb2NrRHJpdmVyU3RhdGUgKmhkW01BWF9JREVfQlVTICogTUFYX0lERV9ERVZTXTsNCiANCiAg ICAgLyogaW5pdCBDUFVzICovDQogICAgIGlmIChjcHVfbW9kZWwgPT0gTlVMTCkgew0KQEAgLTI0 MCw5ICsyNDQsMTggQEAgdm9pZCBtaXBzX3I0a19pbml0IChpbnQgcmFtX3NpemUsIGludCB2Zw0K ICAgICAgICAgfQ0KICAgICB9DQogDQotICAgIGZvcihpID0gMDsgaSA8IDI7IGkrKykNCisgICAg Zm9yKGkgPSAwOyBpIDwgTUFYX0lERV9CVVMgKiBNQVhfSURFX0RFVlM7IGkrKykgew0KKyAgICAg ICAgaW5kZXggPSBkcml2ZV9nZXRfaW5kZXgoSUZfSURFLCBpIC8gTUFYX0lERV9ERVZTLCBpICUg TUFYX0lERV9ERVZTKTsNCisgICAgICAgIGlmIChpbmRleCAhPSAtMSkNCisgICAgICAgICAgICBo ZFtpXSA9IGRyaXZlc190YWJsZVtpbmRleF0uYmRydjsNCisgICAgICAgIGVsc2UNCisgICAgICAg ICAgICBoZFtpXSA9IE5VTEw7DQorICAgIH0NCisNCisgICAgZm9yKGkgPSAwOyBpIDwgTUFYX0lE RV9CVVM7IGkrKykNCiAgICAgICAgIGlzYV9pZGVfaW5pdChpZGVfaW9iYXNlW2ldLCBpZGVfaW9i YXNlMltpXSwgaTgyNTlbaWRlX2lycVtpXV0sDQotICAgICAgICAgICAgICAgICAgICAgYnNfdGFi bGVbMiAqIGldLCBic190YWJsZVsyICogaSArIDFdKTsNCisgICAgICAgICAgICAgICAgICAgICBo ZFtNQVhfSURFX0RFVlMgKiBpXSwNCisJCSAgICAgaGRbTUFYX0lERV9ERVZTICogaSArIDFdKTsN CiANCiAgICAgaTgwNDJfaW5pdChpODI1OVsxXSwgaTgyNTlbMTJdLCAweDYwKTsNCiAgICAgZHMx MjI1eV9pbml0KDB4OTAwMCwgIm52cmFtIik7DQpJbmRleDogcWVtdS9ody9wYy5jDQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09DQotLS0gcWVtdS5vcmlnL2h3L3BjLmMJMjAwNy0xMS0wOSAyMjowNDoyOC4wMDAwMDAwMDAg KzAxMDANCisrKyBxZW11L2h3L3BjLmMJMjAwNy0xMS0wOSAyMzo0MzozMS4wMDAwMDAwMDAgKzAx MDANCkBAIC0zMyw2ICszMyw4IEBADQogLyogTGVhdmUgYSBjaHVuayBvZiBtZW1vcnkgYXQgdGhl IHRvcCBvZiBSQU0gZm9yIHRoZSBCSU9TIEFDUEkgdGFibGVzLiAgKi8NCiAjZGVmaW5lIEFDUElf REFUQV9TSVpFICAgICAgIDB4MTAwMDANCiANCisjZGVmaW5lIE1BWF9JREVfQlVTIDINCisNCiBz dGF0aWMgZmRjdHJsX3QgKmZsb3BweV9jb250cm9sbGVyOw0KIHN0YXRpYyBSVENTdGF0ZSAqcnRj X3N0YXRlOw0KIHN0YXRpYyBQSVRTdGF0ZSAqcGl0Ow0KQEAgLTM2MCw4ICszNjIsMTAgQEAgc3Rh dGljIHZvaWQgZ2VuZXJhdGVfYm9vdHNlY3QodWludDMyX3QgZw0KIHsNCiAgICAgdWludDhfdCBi b290c2VjdFs1MTJdLCAqcDsNCiAgICAgaW50IGk7DQorICAgIGludCBoZGE7DQogDQotICAgIGlm IChic190YWJsZVswXSA9PSBOVUxMKSB7DQorICAgIGhkYSA9IGRyaXZlX2dldF9pbmRleChJRl9J REUsIDAsIDApOw0KKyAgICBpZiAoaGRhID09IC0xKSB7DQogCWZwcmludGYoc3RkZXJyLCAiQSBk aXNrIGltYWdlIG11c3QgYmUgZ2l2ZW4gZm9yICdoZGEnIHdoZW4gYm9vdGluZyAiDQogCQkiYSBM aW51eCBrZXJuZWxcbiIpOw0KIAlleGl0KDEpOw0KQEAgLTM3MCw3ICszNzQsNyBAQCBzdGF0aWMg dm9pZCBnZW5lcmF0ZV9ib290c2VjdCh1aW50MzJfdCBnDQogICAgIG1lbXNldChib290c2VjdCwg MCwgc2l6ZW9mKGJvb3RzZWN0KSk7DQogDQogICAgIC8qIENvcHkgdGhlIE1TRE9TIHBhcnRpdGlv biB0YWJsZSBpZiBwb3NzaWJsZSAqLw0KLSAgICBiZHJ2X3JlYWQoYnNfdGFibGVbMF0sIDAsIGJv b3RzZWN0LCAxKTsNCisgICAgYmRydl9yZWFkKGRyaXZlc190YWJsZVtoZGFdLmJkcnYsIDAsIGJv b3RzZWN0LCAxKTsNCiANCiAgICAgLyogTWFrZSBzdXJlIHdlIGhhdmUgYSBwYXJ0aXRpb24gc2ln bmF0dXJlICovDQogICAgIGJvb3RzZWN0WzUxMF0gPSAweDU1Ow0KQEAgLTQwNyw3ICs0MTEsNyBA QCBzdGF0aWMgdm9pZCBnZW5lcmF0ZV9ib290c2VjdCh1aW50MzJfdCBnDQogICAgICpwKysgPSBz ZWdzWzFdOwkJLyogQ1MgKi8NCiAgICAgKnArKyA9IHNlZ3NbMV0gPj4gODsNCiANCi0gICAgYmRy dl9zZXRfYm9vdF9zZWN0b3IoYnNfdGFibGVbMF0sIGJvb3RzZWN0LCBzaXplb2YoYm9vdHNlY3Qp KTsNCisgICAgYmRydl9zZXRfYm9vdF9zZWN0b3IoZHJpdmVzX3RhYmxlW2hkYV0uYmRydiwgYm9v dHNlY3QsIHNpemVvZihib290c2VjdCkpOw0KIH0NCiANCiBpbnQgbG9hZF9rZXJuZWwoY29uc3Qg Y2hhciAqZmlsZW5hbWUsIHVpbnQ4X3QgKmFkZHIsDQpAQCAtNjg4LDYgKzY5Miw5IEBAIHN0YXRp YyB2b2lkIHBjX2luaXQxKGludCByYW1fc2l6ZSwgaW50IHYNCiAgICAgTklDSW5mbyAqbmQ7DQog ICAgIHFlbXVfaXJxICpjcHVfaXJxOw0KICAgICBxZW11X2lycSAqaTgyNTk7DQorICAgIGludCBp bmRleDsNCisgICAgQmxvY2tEcml2ZXJTdGF0ZSAqaGRbTUFYX0lERV9CVVMgKiBNQVhfSURFX0RF VlNdOw0KKyAgICBCbG9ja0RyaXZlclN0YXRlICpmZFtNQVhfRkRdOw0KIA0KICAgICBsaW51eF9i b290ID0gKGtlcm5lbF9maWxlbmFtZSAhPSBOVUxMKTsNCiANCkBAIC05MDUsMTIgKzkxMiwyMCBA QCBzdGF0aWMgdm9pZCBwY19pbml0MShpbnQgcmFtX3NpemUsIGludCB2DQogICAgICAgICB9DQog ICAgIH0NCiANCisgICAgZm9yKGkgPSAwOyBpIDwgTUFYX0lERV9CVVMgKiBNQVhfSURFX0RFVlM7 IGkrKykgew0KKyAgICAgICAgaW5kZXggPSBkcml2ZV9nZXRfaW5kZXgoSUZfSURFLCBpIC8gTUFY X0lERV9ERVZTLCBpICUgTUFYX0lERV9ERVZTKTsNCisJaWYgKGluZGV4ICE9IC0xKQ0KKwkgICAg aGRbaV0gPSBkcml2ZXNfdGFibGVbaW5kZXhdLmJkcnY7DQorCWVsc2UNCisJICAgIGhkW2ldID0g TlVMTDsNCisgICAgfQ0KKw0KICAgICBpZiAocGNpX2VuYWJsZWQpIHsNCi0gICAgICAgIHBjaV9w aWl4M19pZGVfaW5pdChwY2lfYnVzLCBic190YWJsZSwgcGlpeDNfZGV2Zm4gKyAxLCBpODI1OSk7 DQorICAgICAgICBwY2lfcGlpeDNfaWRlX2luaXQocGNpX2J1cywgaGQsIHBpaXgzX2RldmZuICsg MSwgaTgyNTkpOw0KICAgICB9IGVsc2Ugew0KLSAgICAgICAgZm9yKGkgPSAwOyBpIDwgMjsgaSsr KSB7DQorICAgICAgICBmb3IoaSA9IDA7IGkgPCBNQVhfSURFX0JVUzsgaSsrKSB7DQogICAgICAg ICAgICAgaXNhX2lkZV9pbml0KGlkZV9pb2Jhc2VbaV0sIGlkZV9pb2Jhc2UyW2ldLCBpODI1OVtp ZGVfaXJxW2ldXSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgYnNfdGFibGVbMiAqIGldLCBi c190YWJsZVsyICogaSArIDFdKTsNCisJICAgICAgICAgICAgICAgICBoZFsyICogaV0sIGhkWzIg KiBpICsgMV0pOw0KICAgICAgICAgfQ0KICAgICB9DQogDQpAQCAtOTIwLDkgKzkzNSwxNiBAQCBz dGF0aWMgdm9pZCBwY19pbml0MShpbnQgcmFtX3NpemUsIGludCB2DQogICAgIGF1ZGlvX2luaXQo cGNpX2VuYWJsZWQgPyBwY2lfYnVzIDogTlVMTCwgaTgyNTkpOw0KICNlbmRpZg0KIA0KLSAgICBm bG9wcHlfY29udHJvbGxlciA9IGZkY3RybF9pbml0KGk4MjU5WzZdLCAyLCAwLCAweDNmMCwgZmRf dGFibGUpOw0KKyAgICBmb3IoaSA9IDA7IGkgPCBNQVhfRkQ7IGkrKykgew0KKyAgICAgICAgaW5k ZXggPSBkcml2ZV9nZXRfaW5kZXgoSUZfRkxPUFBZLCAwLCBpKTsNCisJaWYgKGluZGV4ICE9IC0x KQ0KKwkgICAgZmRbaV0gPSBkcml2ZXNfdGFibGVbaW5kZXhdLmJkcnY7DQorCWVsc2UNCisJICAg IGZkW2ldID0gTlVMTDsNCisgICAgfQ0KKyAgICBmbG9wcHlfY29udHJvbGxlciA9IGZkY3RybF9p bml0KGk4MjU5WzZdLCAyLCAwLCAweDNmMCwgZmQpOw0KIA0KLSAgICBjbW9zX2luaXQocmFtX3Np emUsIGJvb3RfZGV2aWNlLCBic190YWJsZSk7DQorICAgIGNtb3NfaW5pdChyYW1fc2l6ZSwgYm9v dF9kZXZpY2UsIGhkKTsNCiANCiAgICAgaWYgKHBjaV9lbmFibGVkICYmIHVzYl9lbmFibGVkKSB7 DQogICAgICAgICB1c2JfdWhjaV9waWl4M19pbml0KHBjaV9idXMsIHBpaXgzX2RldmZuICsgMik7 DQpAQCAtOTQyLDIzICs5NjQsMjQgQEAgc3RhdGljIHZvaWQgcGNfaW5pdDEoaW50IHJhbV9zaXpl LCBpbnQgdg0KICAgICBpZiAoaTQ0MGZ4X3N0YXRlKSB7DQogICAgICAgICBpNDQwZnhfaW5pdF9t ZW1vcnlfbWFwcGluZ3MoaTQ0MGZ4X3N0YXRlKTsNCiAgICAgfQ0KLSNpZiAwDQotICAgIC8qID8/ PyBOZWVkIHRvIGZpZ3VyZSBvdXQgc29tZSB3YXkgZm9yIHRoZSB1c2VyIHRvDQotICAgICAgIHNw ZWNpZnkgU0NTSSBkZXZpY2VzLiAgKi8NCisNCiAgICAgaWYgKHBjaV9lbmFibGVkKSB7DQorCWlu dCBtYXhfYnVzOw0KKyAgICAgICAgaW50IGJ1cywgdW5pdDsNCiAgICAgICAgIHZvaWQgKnNjc2k7 DQotICAgICAgICBCbG9ja0RyaXZlclN0YXRlICpiZHJ2Ow0KIA0KLSAgICAgICAgc2NzaSA9IGxz aV9zY3NpX2luaXQocGNpX2J1cywgLTEpOw0KLSAgICAgICAgYmRydiA9IGJkcnZfbmV3KCJzY3Np ZGlzayIpOw0KLSAgICAgICAgYmRydl9vcGVuKGJkcnYsICJzY3NpX2Rpc2suaW1nIiwgMCk7DQot ICAgICAgICBsc2lfc2NzaV9hdHRhY2goc2NzaSwgYmRydiwgLTEpOw0KLSAgICAgICAgYmRydiA9 IGJkcnZfbmV3KCJzY3NpY2QiKTsNCi0gICAgICAgIGJkcnZfb3BlbihiZHJ2LCAic2NzaV9jZC5p c28iLCAwKTsNCi0gICAgICAgIGJkcnZfc2V0X3R5cGVfaGludChiZHJ2LCBCRFJWX1RZUEVfQ0RS T00pOw0KLSAgICAgICAgbHNpX3Njc2lfYXR0YWNoKHNjc2ksIGJkcnYsIC0xKTsNCisgICAgICAg IG1heF9idXMgPSBkcml2ZV9nZXRfbWF4X2J1cyhJRl9TQ1NJKTsNCisNCisJZm9yIChidXMgPSAw OyBidXMgPD0gbWF4X2J1czsgYnVzKyspIHsNCisgICAgICAgICAgICBzY3NpID0gbHNpX3Njc2lf aW5pdChwY2lfYnVzLCAtMSk7DQorICAgICAgICAgICAgZm9yICh1bml0ID0gMDsgdW5pdCA8IExT SV9NQVhfREVWUzsgdW5pdCsrKSB7DQorCSAgICAgICAgaW5kZXggPSBkcml2ZV9nZXRfaW5kZXgo SUZfU0NTSSwgYnVzLCB1bml0KTsNCisJCWlmIChpbmRleCA9PSAtMSkNCisJCSAgICBjb250aW51 ZTsNCisJCWxzaV9zY3NpX2F0dGFjaChzY3NpLCBkcml2ZXNfdGFibGVbaW5kZXhdLmJkcnYsIHVu aXQpOw0KKwkgICAgfQ0KKyAgICAgICAgfQ0KICAgICB9DQotI2VuZGlmDQogfQ0KIA0KIHN0YXRp YyB2b2lkIHBjX2luaXRfcGNpKGludCByYW1fc2l6ZSwgaW50IHZnYV9yYW1fc2l6ZSwNCkluZGV4 OiBxZW11L2h3L3BwY19wcmVwLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBxZW11Lm9yaWcvaHcvcHBjX3By ZXAuYwkyMDA3LTExLTA5IDIyOjA0OjI4LjAwMDAwMDAwMCArMDEwMA0KKysrIHFlbXUvaHcvcHBj X3ByZXAuYwkyMDA3LTExLTA5IDIzOjQ0OjEzLjAwMDAwMDAwMCArMDEwMA0KQEAgLTI5LDYgKzI5 LDggQEANCiAvKiBTTVAgaXMgbm90IGVuYWJsZWQsIGZvciBub3cgKi8NCiAjZGVmaW5lIE1BWF9D UFVTIDENCiANCisjZGVmaW5lIE1BWF9JREVfQlVTIDINCisNCiAjZGVmaW5lIEJJT1NfRklMRU5B TUUgInBwY19yb20uYmluIg0KICNkZWZpbmUgS0VSTkVMX0xPQURfQUREUiAweDAxMDAwMDAwDQog I2RlZmluZSBJTklUUkRfTE9BRF9BRERSIDB4MDE4MDAwMDANCkBAIC01NDAsNiArNTQyLDkgQEAg c3RhdGljIHZvaWQgcHBjX3ByZXBfaW5pdCAoaW50IHJhbV9zaXplLA0KICAgICBQQ0lCdXMgKnBj aV9idXM7DQogICAgIHFlbXVfaXJxICppODI1OTsNCiAgICAgaW50IHBwY19ib290X2RldmljZSA9 IGJvb3RfZGV2aWNlWzBdOw0KKyAgICBpbnQgaW5kZXg7DQorICAgIEJsb2NrRHJpdmVyU3RhdGUg KmhkW01BWF9JREVfQlVTICogTUFYX0lERV9ERVZTXTsNCisgICAgQmxvY2tEcml2ZXJTdGF0ZSAq ZmRbTUFYX0ZEXTsNCiANCiAgICAgc3lzY3RybCA9IHFlbXVfbWFsbG9jeihzaXplb2Yoc3lzY3Ry bF90KSk7DQogICAgIGlmIChzeXNjdHJsID09IE5VTEwpDQpAQCAtNjQ5LDE2ICs2NTQsMzIgQEAg c3RhdGljIHZvaWQgcHBjX3ByZXBfaW5pdCAoaW50IHJhbV9zaXplLA0KICAgICAgICAgfQ0KICAg ICB9DQogDQotICAgIGZvcihpID0gMDsgaSA8IDI7IGkrKykgew0KKyAgICBmb3IoaSA9IDA7IGkg PCBNQVhfSURFX0JVUyAqIE1BWF9JREVfREVWUzsgaSsrKSB7DQorICAgICAgICBpbmRleCA9IGRy aXZlX2dldF9pbmRleChJRl9JREUsIGkgLyBNQVhfSURFX0RFVlMsIGkgJSBNQVhfSURFX0RFVlMp Ow0KKyAgICAgICAgaWYgKGluZGV4ICE9IC0xKQ0KKyAgICAgICAgICAgIGhkW2ldID0gZHJpdmVz X3RhYmxlW2luZGV4XS5iZHJ2Ow0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIGhkW2ldID0g TlVMTDsNCisgICAgfQ0KKw0KKyAgICBmb3IoaSA9IDA7IGkgPCBNQVhfSURFX0JVUzsgaSsrKSB7 DQogICAgICAgICBpc2FfaWRlX2luaXQoaWRlX2lvYmFzZVtpXSwgaWRlX2lvYmFzZTJbaV0sIGk4 MjU5W2lkZV9pcnFbaV1dLA0KLSAgICAgICAgICAgICAgICAgICAgIGJzX3RhYmxlWzIgKiBpXSwg YnNfdGFibGVbMiAqIGkgKyAxXSk7DQorICAgICAgICAgICAgICAgICAgICAgaGRbMiAqIGldLA0K KwkJICAgICBoZFsyICogaSArIDFdKTsNCiAgICAgfQ0KICAgICBpODA0Ml9pbml0KGk4MjU5WzFd LCBpODI1OVsxMl0sIDB4NjApOw0KICAgICBETUFfaW5pdCgxKTsNCiAgICAgLy8gICAgQVVEX2lu aXQoKTsNCiAgICAgLy8gICAgU0IxNl9pbml0KCk7DQogDQotICAgIGZkY3RybF9pbml0KGk4MjU5 WzZdLCAyLCAwLCAweDNmMCwgZmRfdGFibGUpOw0KKyAgICBmb3IoaSA9IDA7IGkgPCBNQVhfRkQ7 IGkrKykgew0KKyAgICAgICAgaW5kZXggPSBkcml2ZV9nZXRfaW5kZXgoSUZfRkxPUFBZLCAwLCBp KTsNCisgICAgICAgIGlmIChpbmRleCAhPSAtMSkNCisgICAgICAgICAgICBmZFtpXSA9IGRyaXZl c190YWJsZVtpbmRleF0uYmRydjsNCisgICAgICAgIGVsc2UNCisgICAgICAgICAgICBmZFtpXSA9 IE5VTEw7DQorICAgIH0NCisgICAgZmRjdHJsX2luaXQoaTgyNTlbNl0sIDIsIDAsIDB4M2YwLCBm ZCk7DQogDQogICAgIC8qIFJlZ2lzdGVyIHNwZWFrZXIgcG9ydCAqLw0KICAgICByZWdpc3Rlcl9p b3BvcnRfcmVhZCgweDYxLCAxLCAxLCBzcGVha2VyX2lvcG9ydF9yZWFkLCBOVUxMKTsNCkluZGV4 OiBxZW11L2h3L2VzcC5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gcWVtdS5vcmlnL2h3L2VzcC5jCTIwMDct MTEtMDkgMjI6MDQ6MjguMDAwMDAwMDAwICswMTAwDQorKysgcWVtdS9ody9lc3AuYwkyMDA3LTEx LTA5IDIyOjA0OjMzLjAwMDAwMDAwMCArMDEwMA0KQEAgLTQ1LDE0ICs0NSwxMSBAQCBkbyB7IHBy aW50ZigiRVNQOiAiIGZtdCAsICMjYXJncyk7IH0gd2hpDQogI2RlZmluZSBFU1BfUkVHUyAxNg0K ICNkZWZpbmUgRVNQX1NJWkUgKEVTUF9SRUdTICogNCkNCiAjZGVmaW5lIFRJX0JVRlNaIDMyDQot LyogVGhlIEhCQSBpcyBJRCA3LCBzbyBmb3Igc2ltcGxpY2l0bHkgbGltaXQgdG8gNyBkZXZpY2Vz LiAgKi8NCi0jZGVmaW5lIEVTUF9NQVhfREVWUyAgICAgIDcNCiANCiB0eXBlZGVmIHN0cnVjdCBF U1BTdGF0ZSBFU1BTdGF0ZTsNCiANCiBzdHJ1Y3QgRVNQU3RhdGUgew0KICAgICBxZW11X2lycSBp cnE7DQotICAgIEJsb2NrRHJpdmVyU3RhdGUgKipiZDsNCiAgICAgdWludDhfdCBycmVnc1tFU1Bf UkVHU107DQogICAgIHVpbnQ4X3Qgd3JlZ3NbRVNQX1JFR1NdOw0KICAgICBpbnQzMl90IHRpX3Np emU7DQpAQCAtNjAsNyArNTcsNyBAQCBzdHJ1Y3QgRVNQU3RhdGUgew0KICAgICB1aW50OF90IHRp X2J1ZltUSV9CVUZTWl07DQogICAgIGludCBzZW5zZTsNCiAgICAgaW50IGRtYTsNCi0gICAgU0NT SURldmljZSAqc2NzaV9kZXZbTUFYX0RJU0tTXTsNCisgICAgU0NTSURldmljZSAqc2NzaV9kZXZb RVNQX01BWF9ERVZTXTsNCiAgICAgU0NTSURldmljZSAqY3VycmVudF9kZXY7DQogICAgIHVpbnQ4 X3QgY21kYnVmW1RJX0JVRlNaXTsNCiAgICAgaW50IGNtZGxlbjsNCkBAIC0xMjIsNyArMTE5LDcg QEAgc3RhdGljIGludCBnZXRfY21kKEVTUFN0YXRlICpzLCB1aW50OF90IA0KICAgICAgICAgcy0+ YXN5bmNfbGVuID0gMDsNCiAgICAgfQ0KIA0KLSAgICBpZiAodGFyZ2V0ID49IE1BWF9ESVNLUyB8 fCAhcy0+c2NzaV9kZXZbdGFyZ2V0XSkgew0KKyAgICBpZiAodGFyZ2V0ID49IEVTUF9NQVhfREVW UyB8fCAhcy0+c2NzaV9kZXZbdGFyZ2V0XSkgew0KICAgICAgICAgLy8gTm8gc3VjaCBkcml2ZQ0K ICAgICAgICAgcy0+cnJlZ3NbNF0gPSBTVEFUX0lOOw0KICAgICAgICAgcy0+cnJlZ3NbNV0gPSBJ TlRSX0RDOw0KQEAgLTU3NCw3ICs1NzEsNyBAQCB2b2lkIGVzcF9zY3NpX2F0dGFjaCh2b2lkICpv cGFxdWUsIEJsb2NrDQogICAgIHMtPnNjc2lfZGV2W2lkXSA9IHNjc2lfZGlza19pbml0KGJkLCAw LCBlc3BfY29tbWFuZF9jb21wbGV0ZSwgcyk7DQogfQ0KIA0KLXZvaWQgKmVzcF9pbml0KEJsb2Nr RHJpdmVyU3RhdGUgKipiZCwgdGFyZ2V0X3BoeXNfYWRkcl90IGVzcGFkZHIsDQordm9pZCAqZXNw X2luaXQodGFyZ2V0X3BoeXNfYWRkcl90IGVzcGFkZHIsDQogICAgICAgICAgICAgICAgdm9pZCAq ZG1hX29wYXF1ZSwgcWVtdV9pcnEgaXJxLCBxZW11X2lycSAqcmVzZXQpDQogew0KICAgICBFU1BT dGF0ZSAqczsNCkBAIC01ODQsNyArNTgxLDYgQEAgdm9pZCAqZXNwX2luaXQoQmxvY2tEcml2ZXJT dGF0ZSAqKmJkLCB0YQ0KICAgICBpZiAoIXMpDQogICAgICAgICByZXR1cm4gTlVMTDsNCiANCi0g ICAgcy0+YmQgPSBiZDsNCiAgICAgcy0+aXJxID0gaXJxOw0KICAgICBzLT5kbWFfb3BhcXVlID0g ZG1hX29wYXF1ZTsNCiANCkluZGV4OiBxZW11L2h3L3JlYWx2aWV3LmMNCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0t LSBxZW11Lm9yaWcvaHcvcmVhbHZpZXcuYwkyMDA3LTExLTA5IDIyOjA0OjI4LjAwMDAwMDAwMCAr MDEwMA0KKysrIHFlbXUvaHcvcmVhbHZpZXcuYwkyMDA3LTExLTEwIDAwOjI5OjQ5LjAwMDAwMDAw MCArMDEwMA0KQEAgLTI0LDYgKzI0LDcgQEAgc3RhdGljIHZvaWQgcmVhbHZpZXdfaW5pdChpbnQg cmFtX3NpemUsIA0KICAgICBOSUNJbmZvICpuZDsNCiAgICAgaW50IG47DQogICAgIGludCBkb25l X3NtYyA9IDA7DQorICAgIGludCBpbmRleDsNCiANCiAgICAgZW52ID0gY3B1X2luaXQoKTsNCiAg ICAgaWYgKCFjcHVfbW9kZWwpDQpAQCAtNTUsNyArNTYsMTIgQEAgc3RhdGljIHZvaWQgcmVhbHZp ZXdfaW5pdChpbnQgcmFtX3NpemUsIA0KIA0KICAgICBwbDExMF9pbml0KGRzLCAweDEwMDIwMDAw LCBwaWNbMjNdLCAxKTsNCiANCi0gICAgcGwxODFfaW5pdCgweDEwMDA1MDAwLCBzZF9iZHJ2LCBw aWNbMTddLCBwaWNbMThdKTsNCisgICAgaW5kZXggPSBkcml2ZV9nZXRfaW5kZXgoSUZfU0QsIDAs IDApOw0KKyAgICBpZiAoaW5kZXggPT0gLTEpIHsNCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAi cWVtdTogbWlzc2luZyBTZWN1cmVEaWdpdGFsIGNhcmRcbiIpOw0KKyAgICAgICAgZXhpdCgxKTsN CisgICAgfQ0KKyAgICBwbDE4MV9pbml0KDB4MTAwMDUwMDAsIGRyaXZlc190YWJsZVtpbmRleF0u YmRydiwgcGljWzE3XSwgcGljWzE4XSk7DQogDQogICAgIHBsMDMxX2luaXQoMHgxMDAxNzAwMCwg cGljWzEwXSk7DQogDQpAQCAtNjQsMTAgKzcwLDExIEBAIHN0YXRpYyB2b2lkIHJlYWx2aWV3X2lu aXQoaW50IHJhbV9zaXplLCANCiAgICAgICAgIHVzYl9vaGNpX2luaXRfcGNpKHBjaV9idXMsIDMs IC0xKTsNCiAgICAgfQ0KICAgICBzY3NpX2hiYSA9IGxzaV9zY3NpX2luaXQocGNpX2J1cywgLTEp Ow0KLSAgICBmb3IgKG4gPSAwOyBuIDwgTUFYX0RJU0tTOyBuKyspIHsNCi0gICAgICAgIGlmIChi c190YWJsZVtuXSkgew0KLSAgICAgICAgICAgIGxzaV9zY3NpX2F0dGFjaChzY3NpX2hiYSwgYnNf dGFibGVbbl0sIG4pOw0KLSAgICAgICAgfQ0KKyAgICBmb3IgKG4gPSAwOyBuIDwgTFNJX01BWF9E RVZTOyBuKyspIHsNCisgICAgICAgIGluZGV4ID0gZHJpdmVfZ2V0X2luZGV4KElGX1NDU0ksIDAs IG4pOw0KKyAgICAgICAgaWYgKGluZGV4ID09IC0xKQ0KKyAgICAgICAgICAgIGNvbnRpbnVlOw0K KyAgICAgICAgbHNpX3Njc2lfYXR0YWNoKHNjc2lfaGJhLCBkcml2ZXNfdGFibGVbaW5kZXhdLmJk cnYsIG4pOw0KICAgICB9DQogICAgIGZvcihuID0gMDsgbiA8IG5iX25pY3M7IG4rKykgew0KICAg ICAgICAgbmQgPSAmbmRfdGFibGVbbl07DQpJbmRleDogcWVtdS9ody9zdW40bS5jDQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09DQotLS0gcWVtdS5vcmlnL2h3L3N1bjRtLmMJMjAwNy0xMS0wOSAyMjowNDoyOC4wMDAwMDAw MDAgKzAxMDANCisrKyBxZW11L2h3L3N1bjRtLmMJMjAwNy0xMS0wOSAyMzo0NDozMS4wMDAwMDAw MDAgKzAxMDANCkBAIC0zMTcsNiArMzE3LDggQEAgc3RhdGljIHZvaWQgKnN1bjRtX2h3X2luaXQo Y29uc3Qgc3RydWN0IA0KICAgICBxZW11X2lycSAqY3B1X2lycXNbTUFYX0NQVVNdLCAqc2xhdmlv X2lycSwgKnNsYXZpb19jcHVfaXJxLA0KICAgICAgICAgKmVzcGRtYV9pcnEsICpsZWRtYV9pcnE7 DQogICAgIHFlbXVfaXJxICplc3BfcmVzZXQsICpsZV9yZXNldDsNCisgICAgQmxvY2tEcml2ZXJT dGF0ZSAqZmRbTUFYX0ZEXTsNCisgICAgaW50IGluZGV4Ow0KIA0KICAgICAvKiBpbml0IENQVXMg Ki8NCiAgICAgc3BhcmNfZmluZF9ieV9uYW1lKGNwdV9tb2RlbCwgJmRlZik7DQpAQCAtMzkwLDE1 ICszOTIsMjQgQEAgc3RhdGljIHZvaWQgKnN1bjRtX2h3X2luaXQoY29uc3Qgc3RydWN0IA0KICAg ICBzbGF2aW9fc2VyaWFsX2luaXQoaHdkZWYtPnNlcmlhbF9iYXNlLCBzbGF2aW9faXJxW2h3ZGVm LT5zZXJfaXJxXSwNCiAgICAgICAgICAgICAgICAgICAgICAgIHNlcmlhbF9oZHNbMV0sIHNlcmlh bF9oZHNbMF0pOw0KIA0KLSAgICBzdW40bV9mZGN0cmxfaW5pdChzbGF2aW9faXJxW2h3ZGVmLT5m ZF9pcnFdLCBod2RlZi0+ZmRfYmFzZSwgZmRfdGFibGUpOw0KKyAgICBmb3IoaSA9IDA7IGkgPCBN QVhfRkQ7IGkrKykgew0KKyAgICAgICAgaW5kZXggPSBkcml2ZV9nZXRfaW5kZXgoSUZfRkxPUFBZ LCAwLCBpKTsNCisJaWYgKGluZGV4ICE9IC0xKQ0KKwkgICAgZmRbaV0gPSBkcml2ZXNfdGFibGVb aW5kZXhdLmJkcnY7DQorICAgICAgICBlbHNlDQorCSAgICBmZFtpXSA9IE5VTEw7DQorICAgIH0N CisNCisgICAgc3VuNG1fZmRjdHJsX2luaXQoc2xhdmlvX2lycVtod2RlZi0+ZmRfaXJxXSwgaHdk ZWYtPmZkX2Jhc2UsIGZkKTsNCiANCi0gICAgbWFpbl9lc3AgPSBlc3BfaW5pdChic190YWJsZSwg aHdkZWYtPmVzcF9iYXNlLCBlc3BkbWEsICplc3BkbWFfaXJxLA0KKyAgICBtYWluX2VzcCA9IGVz cF9pbml0KGh3ZGVmLT5lc3BfYmFzZSwgZXNwZG1hLCAqZXNwZG1hX2lycSwNCiAgICAgICAgICAg ICAgICAgICAgICAgICBlc3BfcmVzZXQpOw0KIA0KLSAgICBmb3IgKGkgPSAwOyBpIDwgTUFYX0RJ U0tTOyBpKyspIHsNCi0gICAgICAgIGlmIChic190YWJsZVtpXSkgew0KLSAgICAgICAgICAgIGVz cF9zY3NpX2F0dGFjaChtYWluX2VzcCwgYnNfdGFibGVbaV0sIGkpOw0KLSAgICAgICAgfQ0KKyAg ICBmb3IgKGkgPSAwOyBpIDwgRVNQX01BWF9ERVZTOyBpKyspIHsNCisgICAgICAgIGluZGV4ID0g ZHJpdmVfZ2V0X2luZGV4KElGX1NDU0ksIDAsIGkpOw0KKwlpZiAoaW5kZXggPT0gLTEpDQorCSAg ICBjb250aW51ZTsNCisgICAgICAgIGVzcF9zY3NpX2F0dGFjaChtYWluX2VzcCwgZHJpdmVzX3Rh YmxlW2luZGV4XS5iZHJ2LCBpKTsNCiAgICAgfQ0KIA0KICAgICBzbGF2aW9fbWlzYyA9IHNsYXZp b19taXNjX2luaXQoaHdkZWYtPnNsYXZpb19iYXNlLCBod2RlZi0+cG93ZXJfYmFzZSwNCkluZGV4 OiBxZW11L2h3L3ZlcnNhdGlsZXBiLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBxZW11Lm9yaWcvaHcvdmVy c2F0aWxlcGIuYwkyMDA3LTExLTA5IDIyOjA0OjI4LjAwMDAwMDAwMCArMDEwMA0KKysrIHFlbXUv aHcvdmVyc2F0aWxlcGIuYwkyMDA3LTExLTA5IDIzOjQ0OjQ5LjAwMDAwMDAwMCArMDEwMA0KQEAg LTE2NSw2ICsxNjUsNyBAQCBzdGF0aWMgdm9pZCB2ZXJzYXRpbGVfaW5pdChpbnQgcmFtX3NpemUs DQogICAgIE5JQ0luZm8gKm5kOw0KICAgICBpbnQgbjsNCiAgICAgaW50IGRvbmVfc21jID0gMDsN CisgICAgaW50IGluZGV4Ow0KIA0KICAgICBlbnYgPSBjcHVfaW5pdCgpOw0KICAgICBpZiAoIWNw dV9tb2RlbCkNCkBAIC0xOTgsMTAgKzE5OSwxMSBAQCBzdGF0aWMgdm9pZCB2ZXJzYXRpbGVfaW5p dChpbnQgcmFtX3NpemUsDQogICAgICAgICB1c2Jfb2hjaV9pbml0X3BjaShwY2lfYnVzLCAzLCAt MSk7DQogICAgIH0NCiAgICAgc2NzaV9oYmEgPSBsc2lfc2NzaV9pbml0KHBjaV9idXMsIC0xKTsN Ci0gICAgZm9yIChuID0gMDsgbiA8IE1BWF9ESVNLUzsgbisrKSB7DQotICAgICAgICBpZiAoYnNf dGFibGVbbl0pIHsNCi0gICAgICAgICAgICBsc2lfc2NzaV9hdHRhY2goc2NzaV9oYmEsIGJzX3Rh YmxlW25dLCBuKTsNCi0gICAgICAgIH0NCisgICAgZm9yIChuID0gMDsgbiA8IExTSV9NQVhfREVW UzsgbisrKSB7DQorICAgICAgICBpbmRleCA9IGRyaXZlX2dldF9pbmRleChJRl9TQ1NJLCAwLCBu KTsNCisgICAgICAgIGlmIChpbmRleCA9PSAtMSkNCisgICAgICAgICAgICBjb250aW51ZTsNCisg ICAgICAgIGxzaV9zY3NpX2F0dGFjaChzY3NpX2hiYSwgZHJpdmVzX3RhYmxlW2luZGV4XS5iZHJ2 LCBuKTsNCiAgICAgfQ0KIA0KICAgICBwbDAxMV9pbml0KDB4MTAxZjEwMDAsIHBpY1sxMl0sIHNl cmlhbF9oZHNbMF0pOw0KQEAgLTIxNyw3ICsyMTksMTMgQEAgc3RhdGljIHZvaWQgdmVyc2F0aWxl X2luaXQoaW50IHJhbV9zaXplLA0KICAgICAgICB0aGF0IGluY2x1ZGVzIGhhcmR3YXJlIGN1cnNv ciBzdXBwb3J0IGZyb20gdGhlIFBMMTExLiAgKi8NCiAgICAgcGwxMTBfaW5pdChkcywgMHgxMDEy MDAwMCwgcGljWzE2XSwgMSk7DQogDQotICAgIHBsMTgxX2luaXQoMHgxMDAwNTAwMCwgc2RfYmRy diwgc2ljWzIyXSwgc2ljWzFdKTsNCisgICAgaW5kZXggPSBkcml2ZV9nZXRfaW5kZXgoSUZfU0Qs IDAsIDApOw0KKyAgICBpZiAoaW5kZXggPT0gLTEpIHsNCisgICAgICAgIGZwcmludGYoc3RkZXJy LCAicWVtdTogbWlzc2luZyBTZWN1cmVEaWdpdGFsIGNhcmRcbiIpOw0KKyAgICAgICAgZXhpdCgx KTsNCisgICAgfQ0KKw0KKyAgICBwbDE4MV9pbml0KDB4MTAwMDUwMDAsIGRyaXZlc190YWJsZVtp bmRleF0uYmRydiwgc2ljWzIyXSwgc2ljWzFdKTsNCiAjaWYgMA0KICAgICAvKiBEaXNhYmxlZCBi ZWNhdXNlIHRoZXJlJ3Mgbm8gd2F5IG9mIHNwZWNpZnlpbmcgYSBibG9jayBkZXZpY2UuICAqLw0K ICAgICBwbDE4MV9pbml0KDB4MTAwMGIwMDAsIE5VTEwsIHNpYywgMjMsIDIpOw0KSW5kZXg6IHFl bXUvaHcvaW50ZWdyYXRvcmNwLmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBxZW11Lm9yaWcvaHcvaW50ZWdy YXRvcmNwLmMJMjAwNy0xMS0wOSAyMjowNDoyOC4wMDAwMDAwMDAgKzAxMDANCisrKyBxZW11L2h3 L2ludGVncmF0b3JjcC5jCTIwMDctMTEtMDkgMjM6NDI6MTguMDAwMDAwMDAwICswMTAwDQpAQCAt NDcxLDYgKzQ3MSw3IEBAIHN0YXRpYyB2b2lkIGludGVncmF0b3JjcF9pbml0KGludCByYW1fc2kN CiAgICAgdWludDMyX3QgYmlvc19vZmZzZXQ7DQogICAgIHFlbXVfaXJxICpwaWM7DQogICAgIHFl bXVfaXJxICpjcHVfcGljOw0KKyAgICBpbnQgc2Q7DQogDQogICAgIGVudiA9IGNwdV9pbml0KCk7 DQogICAgIGlmICghY3B1X21vZGVsKQ0KQEAgLTQ5Niw3ICs0OTcsMTIgQEAgc3RhdGljIHZvaWQg aW50ZWdyYXRvcmNwX2luaXQoaW50IHJhbV9zaQ0KICAgICBpY3BfY29udHJvbF9pbml0KDB4Y2Iw MDAwMDApOw0KICAgICBwbDA1MF9pbml0KDB4MTgwMDAwMDAsIHBpY1szXSwgMCk7DQogICAgIHBs MDUwX2luaXQoMHgxOTAwMDAwMCwgcGljWzRdLCAxKTsNCi0gICAgcGwxODFfaW5pdCgweDFjMDAw MDAwLCBzZF9iZHJ2LCBwaWNbMjNdLCBwaWNbMjRdKTsNCisgICAgc2QgPSBkcml2ZV9nZXRfaW5k ZXgoSUZfU0QsIDAsIDApOw0KKyAgICBpZiAoc2QgPT0gLTEpIHsNCisgICAgICAgIGZwcmludGYo c3RkZXJyLCAicWVtdTogbWlzc2luZyBTZWN1cmVEaWdpdGFsIGNhcmQgZm9yIGludGVncmF0b3Jj cFxuIik7DQorICAgICAgICBleGl0KDEpOw0KKyAgICB9DQorICAgIHBsMTgxX2luaXQoMHgxYzAw MDAwMCwgZHJpdmVzX3RhYmxlW3NkXS5iZHJ2LCBwaWNbMjNdLCBwaWNbMjRdKTsNCiAgICAgaWYg KG5kX3RhYmxlWzBdLnZsYW4pIHsNCiAgICAgICAgIGlmIChuZF90YWJsZVswXS5tb2RlbCA9PSBO VUxMDQogICAgICAgICAgICAgfHwgc3RyY21wKG5kX3RhYmxlWzBdLm1vZGVsLCAic21jOTFjMTEx IikgPT0gMCkgew0KSW5kZXg6IHFlbXUvaHcvbHNpNTNjODk1YS5jDQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g cWVtdS5vcmlnL2h3L2xzaTUzYzg5NWEuYwkyMDA3LTExLTA5IDIyOjA0OjI4LjAwMDAwMDAwMCAr MDEwMA0KKysrIHFlbXUvaHcvbHNpNTNjODk1YS5jCTIwMDctMTEtMDkgMjI6MDQ6MzMuMDAwMDAw MDAwICswMTAwDQpAQCAtMTQ5LDkgKzE0OSw2IEBAIGRvIHsgZnByaW50ZihzdGRlcnIsICJsc2lf c2NzaTogZXJyb3I6ICINCiAjZGVmaW5lIFBIQVNFX01JICAgICAgICAgIDcNCiAjZGVmaW5lIFBI QVNFX01BU0sgICAgICAgIDcNCiANCi0vKiBUaGUgSEJBIGlzIElEIDcsIHNvIGZvciBzaW1wbGlj aXRseSBsaW1pdCB0byA3IGRldmljZXMuICAqLw0KLSNkZWZpbmUgTFNJX01BWF9ERVZTICAgICAg Nw0KLQ0KIC8qIE1heGltdW0gbGVuZ3RoIG9mIE1TRyBJTiBkYXRhLiAgKi8NCiAjZGVmaW5lIExT SV9NQVhfTVNHSU5fTEVOIDgNCiANCkluZGV4OiBxZW11L2h3L25hbmQuYw0KPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K LS0tIHFlbXUub3JpZy9ody9uYW5kLmMJMjAwNy0xMS0wOSAyMjowNDoyOC4wMDAwMDAwMDAgKzAx MDANCisrKyBxZW11L2h3L25hbmQuYwkyMDA3LTExLTA5IDIzOjQyOjU1LjAwMDAwMDAwMCArMDEw MA0KQEAgLTQ0Nyw3ICs0NDcsNyBAQCBzdHJ1Y3QgbmFuZF9mbGFzaF9zICpuYW5kX2luaXQoaW50 IG1hbmZfDQogICAgIH0NCiANCiAgICAgcyA9IChzdHJ1Y3QgbmFuZF9mbGFzaF9zICopIHFlbXVf bWFsbG9jeihzaXplb2Yoc3RydWN0IG5hbmRfZmxhc2hfcykpOw0KLSAgICBzLT5iZHJ2ID0gbXRk X2JkcnY7DQorICAgIHMtPmJkcnYgPSBkcml2ZXNfdGFibGVbZHJpdmVfZ2V0X2luZGV4KElGX01U RCwgMCwgMCldLmJkcnY7DQogICAgIHMtPm1hbmZfaWQgPSBtYW5mX2lkOw0KICAgICBzLT5jaGlw X2lkID0gY2hpcF9pZDsNCiAgICAgcy0+c2l6ZSA9IG5hbmRfZmxhc2hfaWRzW3MtPmNoaXBfaWRd LnNpemUgPDwgMjA7DQpJbmRleDogcWVtdS9ody9vbWFwX21tYy5jDQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g cWVtdS5vcmlnL2h3L29tYXBfbW1jLmMJMjAwNy0xMS0wOSAyMjowNDoyOC4wMDAwMDAwMDAgKzAx MDANCisrKyBxZW11L2h3L29tYXBfbW1jLmMJMjAwNy0xMS0wOSAyMzo0MzowNi4wMDAwMDAwMDAg KzAxMDANCkBAIC01NDAsNyArNTQwLDcgQEAgc3RydWN0IG9tYXBfbW1jX3MgKm9tYXBfbW1jX2lu aXQodGFyZ2V0Xw0KICAgICBjcHVfcmVnaXN0ZXJfcGh5c2ljYWxfbWVtb3J5KHMtPmJhc2UsIDB4 ODAwLCBpb21lbXR5cGUpOw0KIA0KICAgICAvKiBJbnN0YW50aWF0ZSB0aGUgc3RvcmFnZSAqLw0K LSAgICBzLT5jYXJkID0gc2RfaW5pdChzZF9iZHJ2KTsNCisgICAgcy0+Y2FyZCA9IHNkX2luaXQo ZHJpdmVzX3RhYmxlW2RyaXZlX2dldF9pbmRleChJRl9TRCwgMCwgMCldLmJkcnYpOw0KIA0KICAg ICBzZF9zZXRfY2Iocy0+Y2FyZCwgcywgb21hcF9tbWNfcm9fY2IsIG9tYXBfbW1jX2NvdmVyX2Ni KTsNCiANCkluZGV4OiBxZW11L2h3L3BwYzQwNV9ib2FyZHMuYw0KPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHFl bXUub3JpZy9ody9wcGM0MDVfYm9hcmRzLmMJMjAwNy0xMS0wOSAyMjowNDoyOC4wMDAwMDAwMDAg KzAxMDANCisrKyBxZW11L2h3L3BwYzQwNV9ib2FyZHMuYwkyMDA3LTExLTA5IDIzOjQ0OjAyLjAw MDAwMDAwMCArMDEwMA0KQEAgLTE5MSw2ICsxOTEsNyBAQCBzdGF0aWMgdm9pZCByZWY0MDVlcF9p bml0IChpbnQgcmFtX3NpemUsDQogICAgIGludCBsaW51eF9ib290Ow0KICAgICBpbnQgZmxfaWR4 LCBmbF9zZWN0b3JzLCBsZW47DQogICAgIGludCBwcGNfYm9vdF9kZXZpY2UgPSBib290X2Rldmlj ZVswXTsNCisgICAgaW50IGluZGV4Ow0KIA0KICAgICAvKiBYWFg6IGZpeCB0aGlzICovDQogICAg IHJhbV9iYXNlc1swXSA9IDB4MDAwMDAwMDA7DQpAQCAtMjE3LDE3ICsyMTgsMTggQEAgc3RhdGlj IHZvaWQgcmVmNDA1ZXBfaW5pdCAoaW50IHJhbV9zaXplLA0KICAgICBiaW9zX29mZnNldCA9IHNy YW1fb2Zmc2V0ICsgc3JhbV9zaXplOw0KICAgICBmbF9pZHggPSAwOw0KICNpZmRlZiBVU0VfRkxB U0hfQklPUw0KLSAgICBpZiAocGZsYXNoX3RhYmxlW2ZsX2lkeF0gIT0gTlVMTCkgew0KLSAgICAg ICAgYmlvc19zaXplID0gYmRydl9nZXRsZW5ndGgocGZsYXNoX3RhYmxlW2ZsX2lkeF0pOw0KKyAg ICBpbmRleCA9IGRyaXZlX2dldF9pbmRleChJRl9QRkxBU0gsIDAsIGZsX2lkeCk7DQorICAgIGlm IChpbmRleCAhPSAtMSkgew0KKyAgICAgICAgYmlvc19zaXplID0gYmRydl9nZXRsZW5ndGgoZHJp dmVzX3RhYmxlW2luZGV4XS5iZHJ2KTsNCiAgICAgICAgIGZsX3NlY3RvcnMgPSAoYmlvc19zaXpl ICsgNjU1MzUpID4+IDE2Ow0KICNpZmRlZiBERUJVR19CT0FSRF9JTklUDQogICAgICAgICBwcmlu dGYoIlJlZ2lzdGVyIHBhcmFsbGVsIGZsYXNoICVkIHNpemUgIiBBRERSWCAiIGF0IG9mZnNldCAl MDhseCAiDQogICAgICAgICAgICAgICAgIiBhZGRyICIgQUREUlggIiAnJXMnICVkXG4iLA0KICAg ICAgICAgICAgICAgIGZsX2lkeCwgYmlvc19zaXplLCBiaW9zX29mZnNldCwgLWJpb3Nfc2l6ZSwN Ci0gICAgICAgICAgICAgICBiZHJ2X2dldF9kZXZpY2VfbmFtZShwZmxhc2hfdGFibGVbZmxfaWR4 XSksIGZsX3NlY3RvcnMpOw0KKyAgICAgICAgICAgICAgIGJkcnZfZ2V0X2RldmljZV9uYW1lKGRy aXZlc190YWJsZVtpbmRleF0uYmRydiksIGZsX3NlY3RvcnMpOw0KICNlbmRpZg0KICAgICAgICAg cGZsYXNoX3JlZ2lzdGVyKCh1aW50MzJfdCkoLWJpb3Nfc2l6ZSksIGJpb3Nfb2Zmc2V0LA0KLSAg ICAgICAgICAgICAgICAgICAgICAgIHBmbGFzaF90YWJsZVtmbF9pZHhdLCA2NTUzNiwgZmxfc2Vj dG9ycywgMiwNCisgICAgICAgICAgICAgICAgICAgICAgICBkcml2ZXNfdGFibGVbaW5kZXhdLmJk cnYsIDY1NTM2LCBmbF9zZWN0b3JzLCAyLA0KICAgICAgICAgICAgICAgICAgICAgICAgIDB4MDAw MSwgMHgyMkRBLCAweDAwMDAsIDB4MDAwMCk7DQogICAgICAgICBmbF9pZHgrKzsNCiAgICAgfSBl bHNlDQpAQCAtNTEzLDYgKzUxNSw3IEBAIHN0YXRpYyB2b2lkIHRhaWh1XzQwNWVwX2luaXQoaW50 IHJhbV9zaXoNCiAgICAgaW50IGxpbnV4X2Jvb3Q7DQogICAgIGludCBmbF9pZHgsIGZsX3NlY3Rv cnM7DQogICAgIGludCBwcGNfYm9vdF9kZXZpY2UgPSBib290X2RldmljZVswXTsNCisgICAgaW50 IGluZGV4Ow0KIA0KICAgICAvKiBSQU0gaXMgc29sZGVyZWQgdG8gdGhlIGJvYXJkIHNvIHRoZSBz aXplIGNhbm5vdCBiZSBjaGFuZ2VkICovDQogICAgIHJhbV9iYXNlc1swXSA9IDB4MDAwMDAwMDA7 DQpAQCAtNTMwLDggKzUzMyw5IEBAIHN0YXRpYyB2b2lkIHRhaWh1XzQwNWVwX2luaXQoaW50IHJh bV9zaXoNCiAjZW5kaWYNCiAgICAgZmxfaWR4ID0gMDsNCiAjaWYgZGVmaW5lZChVU0VfRkxBU0hf QklPUykNCi0gICAgaWYgKHBmbGFzaF90YWJsZVtmbF9pZHhdICE9IE5VTEwpIHsNCi0gICAgICAg IGJpb3Nfc2l6ZSA9IGJkcnZfZ2V0bGVuZ3RoKHBmbGFzaF90YWJsZVtmbF9pZHhdKTsNCisgICAg aW5kZXggPSBkcml2ZV9nZXRfaW5kZXgoSUZfUEZMQVNILCAwLCBmbF9pZHgpOw0KKyAgICBpZiAo aW5kZXggIT0gLTEpIHsNCisgICAgICAgIGJpb3Nfc2l6ZSA9IGJkcnZfZ2V0bGVuZ3RoKGRyaXZl c190YWJsZVtpbmRleF0uYmRydik7DQogICAgICAgICAvKiBYWFg6IHNob3VsZCBjaGVjayB0aGF0 IHNpemUgaXMgMk1CICovDQogICAgICAgICAvLyAgICAgICAgYmlvc19zaXplID0gMiAqIDEwMjQg KiAxMDI0Ow0KICAgICAgICAgZmxfc2VjdG9ycyA9IChiaW9zX3NpemUgKyA2NTUzNSkgPj4gMTY7 DQpAQCAtNTM5LDEwICs1NDMsMTAgQEAgc3RhdGljIHZvaWQgdGFpaHVfNDA1ZXBfaW5pdChpbnQg cmFtX3Npeg0KICAgICAgICAgcHJpbnRmKCJSZWdpc3RlciBwYXJhbGxlbCBmbGFzaCAlZCBzaXpl ICIgQUREUlggIiBhdCBvZmZzZXQgJTA4bHggIg0KICAgICAgICAgICAgICAgICIgYWRkciAiIEFE RFJYICIgJyVzJyAlZFxuIiwNCiAgICAgICAgICAgICAgICBmbF9pZHgsIGJpb3Nfc2l6ZSwgYmlv c19vZmZzZXQsIC1iaW9zX3NpemUsDQotICAgICAgICAgICAgICAgYmRydl9nZXRfZGV2aWNlX25h bWUocGZsYXNoX3RhYmxlW2ZsX2lkeF0pLCBmbF9zZWN0b3JzKTsNCisgICAgICAgICAgICAgICBi ZHJ2X2dldF9kZXZpY2VfbmFtZShkcml2ZXNfdGFibGVbaW5kZXhdLmJkcnYpLCBmbF9zZWN0b3Jz KTsNCiAjZW5kaWYNCiAgICAgICAgIHBmbGFzaF9yZWdpc3RlcigodWludDMyX3QpKC1iaW9zX3Np emUpLCBiaW9zX29mZnNldCwNCi0gICAgICAgICAgICAgICAgICAgICAgICBwZmxhc2hfdGFibGVb ZmxfaWR4XSwgNjU1MzYsIGZsX3NlY3RvcnMsIDQsDQorICAgICAgICAgICAgICAgICAgICAgICAg ZHJpdmVzX3RhYmxlW2luZGV4XS5iZHJ2LCA2NTUzNiwgZmxfc2VjdG9ycywgNCwNCiAgICAgICAg ICAgICAgICAgICAgICAgICAweDAwMDEsIDB4MjJEQSwgMHgwMDAwLCAweDAwMDApOw0KICAgICAg ICAgZmxfaWR4Kys7DQogICAgIH0gZWxzZQ0KQEAgLTU2NSw4ICs1NjksOSBAQCBzdGF0aWMgdm9p ZCB0YWlodV80MDVlcF9pbml0KGludCByYW1fc2l6DQogICAgIH0NCiAgICAgYmlvc19vZmZzZXQg Kz0gYmlvc19zaXplOw0KICAgICAvKiBSZWdpc3RlciBMaW51eCBmbGFzaCAqLw0KLSAgICBpZiAo cGZsYXNoX3RhYmxlW2ZsX2lkeF0gIT0gTlVMTCkgew0KLSAgICAgICAgYmlvc19zaXplID0gYmRy dl9nZXRsZW5ndGgocGZsYXNoX3RhYmxlW2ZsX2lkeF0pOw0KKyAgICBpbmRleCA9IGRyaXZlX2dl dF9pbmRleChJRl9QRkxBU0gsIDAsIGZsX2lkeCk7DQorICAgIGlmIChpbmRleCAhPSAtMSkgew0K KyAgICAgICAgYmlvc19zaXplID0gYmRydl9nZXRsZW5ndGgoZHJpdmVzX3RhYmxlW2luZGV4XS5i ZHJ2KTsNCiAgICAgICAgIC8qIFhYWDogc2hvdWxkIGNoZWNrIHRoYXQgc2l6ZSBpcyAzMk1CICov DQogICAgICAgICBiaW9zX3NpemUgPSAzMiAqIDEwMjQgKiAxMDI0Ow0KICAgICAgICAgZmxfc2Vj dG9ycyA9IChiaW9zX3NpemUgKyA2NTUzNSkgPj4gMTY7DQpAQCAtNTc0LDkgKzU3OSw5IEBAIHN0 YXRpYyB2b2lkIHRhaWh1XzQwNWVwX2luaXQoaW50IHJhbV9zaXoNCiAgICAgICAgIHByaW50Zigi UmVnaXN0ZXIgcGFyYWxsZWwgZmxhc2ggJWQgc2l6ZSAiIEFERFJYICIgYXQgb2Zmc2V0ICUwOGx4 ICINCiAgICAgICAgICAgICAgICAiIGFkZHIgIiBBRERSWCAiICclcydcbiIsDQogICAgICAgICAg ICAgICAgZmxfaWR4LCBiaW9zX3NpemUsIGJpb3Nfb2Zmc2V0LCAodGFyZ2V0X3Vsb25nKTB4ZmMw MDAwMDAsDQotICAgICAgICAgICAgICAgYmRydl9nZXRfZGV2aWNlX25hbWUocGZsYXNoX3RhYmxl W2ZsX2lkeF0pKTsNCisgICAgICAgICAgICAgICBiZHJ2X2dldF9kZXZpY2VfbmFtZShkcml2ZXNf dGFibGVbaW5kZXhdLmJkcnYpKTsNCiAjZW5kaWYNCi0gICAgICAgIHBmbGFzaF9yZWdpc3Rlcigw eGZjMDAwMDAwLCBiaW9zX29mZnNldCwgcGZsYXNoX3RhYmxlW2ZsX2lkeF0sDQorICAgICAgICBw Zmxhc2hfcmVnaXN0ZXIoMHhmYzAwMDAwMCwgYmlvc19vZmZzZXQsIGRyaXZlc190YWJsZVtpbmRl eF0uYmRydiwNCiAgICAgICAgICAgICAgICAgICAgICAgICA2NTUzNiwgZmxfc2VjdG9ycywgNCwN CiAgICAgICAgICAgICAgICAgICAgICAgICAweDAwMDEsIDB4MjJEQSwgMHgwMDAwLCAweDAwMDAp Ow0KICAgICAgICAgZmxfaWR4Kys7DQpJbmRleDogcWVtdS9ody9wcGNfY2hycC5jDQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09DQotLS0gcWVtdS5vcmlnL2h3L3BwY19jaHJwLmMJMjAwNy0xMS0wOSAyMjowNDoyOC4wMDAw MDAwMDAgKzAxMDANCisrKyBxZW11L2h3L3BwY19jaHJwLmMJMjAwNy0xMS0wOSAyMjowNDozMy4w MDAwMDAwMDAgKzAxMDANCkBAIC0yNSw2ICsyNSw4IEBADQogI2luY2x1ZGUgInZsLmgiDQogI2lu Y2x1ZGUgInBwY19tYWMuaCINCiANCisjZGVmaW5lIE1BWF9JREVfQlVTIDINCisNCiAvKiBVbmlO IGRldmljZSAqLw0KIHN0YXRpYyB2b2lkIHVuaW5fd3JpdGVsICh2b2lkICpvcGFxdWUsIHRhcmdl dF9waHlzX2FkZHJfdCBhZGRyLCB1aW50MzJfdCB2YWx1ZSkNCiB7DQpAQCAtNzUsNiArNzcsOCBA QCBzdGF0aWMgdm9pZCBwcGNfY29yZTk5X2luaXQgKGludCByYW1fc2l6DQogICAgIGludCBwaWNf bWVtX2luZGV4LCBkYmRtYV9tZW1faW5kZXgsIGN1ZGFfbWVtX2luZGV4Ow0KICAgICBpbnQgaWRl X21lbV9pbmRleFsyXTsNCiAgICAgaW50IHBwY19ib290X2RldmljZSA9IGJvb3RfZGV2aWNlWzBd Ow0KKyAgICBpbnQgaW5kZXg7DQorICAgIEJsb2NrRHJpdmVyU3RhdGUgKmhkW01BWF9JREVfQlVT ICogTUFYX0lERV9ERVZTXTsNCiANCiAgICAgbGludXhfYm9vdCA9IChrZXJuZWxfZmlsZW5hbWUg IT0gTlVMTCk7DQogDQpAQCAtMjQ4LDExICsyNTIsMTggQEAgc3RhdGljIHZvaWQgcHBjX2NvcmU5 OV9pbml0IChpbnQgcmFtX3Npeg0KICAgICAgICAgICAgIG5kX3RhYmxlW2ldLm1vZGVsID0gIm5l MmtfcGNpIjsNCiAgICAgICAgIHBjaV9uaWNfaW5pdChwY2lfYnVzLCAmbmRfdGFibGVbaV0sIC0x KTsNCiAgICAgfQ0KKyAgICBmb3IoaSA9IDA7IGkgPCBNQVhfSURFX0JVUyAqIE1BWF9JREVfREVW UzsgaSsrKSB7DQorICAgICAgICBpbmRleCA9IGRyaXZlX2dldF9pbmRleChJRl9JREUsIGkgLyBN QVhfSURFX0RFVlMsIGkgJSBNQVhfSURFX0RFVlMpOw0KKyAgICAgICAgaWYgKGluZGV4ICE9IC0x KQ0KKyAgICAgICAgICAgIGhkW2ldID0gZHJpdmVzX3RhYmxlW2luZGV4XS5iZHJ2Ow0KKyAgICAg ICAgZWxzZQ0KKyAgICAgICAgICAgIGhkW2ldID0gTlVMTDsNCisgICAgfQ0KICNpZiAxDQotICAg IGlkZV9tZW1faW5kZXhbMF0gPSBwbWFjX2lkZV9pbml0KCZic190YWJsZVswXSwgcGljWzB4MTNd KTsNCi0gICAgaWRlX21lbV9pbmRleFsxXSA9IHBtYWNfaWRlX2luaXQoJmJzX3RhYmxlWzJdLCBw aWNbMHgxNF0pOw0KKyAgICBpZGVfbWVtX2luZGV4WzBdID0gcG1hY19pZGVfaW5pdCgmaGRbMF0s IHBpY1sweDEzXSk7DQorICAgIGlkZV9tZW1faW5kZXhbMV0gPSBwbWFjX2lkZV9pbml0KCZoZFsy XSwgcGljWzB4MTRdKTsNCiAjZWxzZQ0KLSAgICBwY2lfY21kNjQ2X2lkZV9pbml0KHBjaV9idXMs ICZic190YWJsZVswXSwgMCk7DQorICAgIHBjaV9jbWQ2NDZfaWRlX2luaXQocGNpX2J1cywgJmhk WzBdLCAwKTsNCiAjZW5kaWYNCiAgICAgLyogY3VkYSBhbHNvIGluaXRpYWxpemUgQURCICovDQog ICAgIGN1ZGFfaW5pdCgmY3VkYV9tZW1faW5kZXgsIHBpY1sweDE5XSk7DQpJbmRleDogcWVtdS9o dy9wcGNfb2xkd29ybGQuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHFlbXUub3JpZy9ody9wcGNfb2xkd29y bGQuYwkyMDA3LTExLTA5IDIyOjA0OjI4LjAwMDAwMDAwMCArMDEwMA0KKysrIHFlbXUvaHcvcHBj X29sZHdvcmxkLmMJMjAwNy0xMS0wOSAyMjowNDozMy4wMDAwMDAwMDAgKzAxMDANCkBAIC0yNjIs NyArMjYyLDggQEAgc3RhdGljIHZvaWQgcHBjX2hlYXRocm93X2luaXQgKGludCByYW1fcw0KICAg ICAgICAgcGNpX25pY19pbml0KHBjaV9idXMsICZuZF90YWJsZVtpXSwgLTEpOw0KICAgICB9DQog ICAgIA0KLSAgICBwY2lfY21kNjQ2X2lkZV9pbml0KHBjaV9idXMsICZic190YWJsZVswXSwgMCk7 DQorICAgIHBjaV9jbWQ2NDZfaWRlX2luaXQocGNpX2J1cywNCisgICAgICAgICAgICAgICAgICAg ICAgICBkcml2ZXNfdGFibGVbZHJpdmVfZ2V0X2luZGV4KElGX0lERSwgMCwgMCldLmJkcnYsIDAp Ow0KIA0KICAgICAvKiBjdWRhIGFsc28gaW5pdGlhbGl6ZSBBREIgKi8NCiAgICAgY3VkYV9pbml0 KCZjdWRhX21lbV9pbmRleCwgcGljWzB4MTJdKTsNCkluZGV4OiBxZW11L2h3L3B4YTJ4eF9tbWNp LmMNCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT0NCi0tLSBxZW11Lm9yaWcvaHcvcHhhMnh4X21tY2kuYwkyMDA3LTExLTA5 IDIyOjA0OjI4LjAwMDAwMDAwMCArMDEwMA0KKysrIHFlbXUvaHcvcHhhMnh4X21tY2kuYwkyMDA3 LTExLTEwIDAwOjMxOjQ1LjAwMDAwMDAwMCArMDEwMA0KQEAgLTUzNyw3ICs1MzcsOCBAQCBzdHJ1 Y3QgcHhhMnh4X21tY2lfcyAqcHhhMnh4X21tY2lfaW5pdCh0DQogICAgIGNwdV9yZWdpc3Rlcl9w aHlzaWNhbF9tZW1vcnkoYmFzZSwgMHgwMDEwMDAwMCwgaW9tZW10eXBlKTsNCiANCiAgICAgLyog SW5zdGFudGlhdGUgdGhlIGFjdHVhbCBzdG9yYWdlICovDQotICAgIHMtPmNhcmQgPSBzZF9pbml0 KHNkX2JkcnYpOw0KKw0KKyAgICBzLT5jYXJkID0gc2RfaW5pdChkcml2ZXNfdGFibGVbZHJpdmVf Z2V0X2luZGV4KElGX1NELCAwLCAwKV0uYmRydik7DQogDQogICAgIHJlZ2lzdGVyX3NhdmV2bSgi cHhhMnh4X21tY2kiLCAwLCAwLA0KICAgICAgICAgICAgICAgICAgICAgcHhhMnh4X21tY2lfc2F2 ZSwgcHhhMnh4X21tY2lfbG9hZCwgcyk7DQpJbmRleDogcWVtdS9ody9zcGl0ei5jDQo9PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09DQotLS0gcWVtdS5vcmlnL2h3L3NwaXR6LmMJMjAwNy0xMS0wOSAyMjowNDoyOC4wMDAwMDAw MDAgKzAxMDANCisrKyBxZW11L2h3L3NwaXR6LmMJMjAwNy0xMS0wOSAyMjowNDozMy4wMDAwMDAw MDAgKzAxMDANCkBAIC05MjQsOSArOTI0LDE0IEBAIHN0YXRpYyB2b2lkIHNwaXR6X3NzcF9hdHRh Y2goc3RydWN0IHB4YTINCiBzdGF0aWMgdm9pZCBzcGl0el9taWNyb2RyaXZlX2F0dGFjaChzdHJ1 Y3QgcHhhMnh4X3N0YXRlX3MgKmNwdSkNCiB7DQogICAgIHN0cnVjdCBwY21jaWFfY2FyZF9zICpt ZDsNCi0gICAgQmxvY2tEcml2ZXJTdGF0ZSAqYnMgPSBic190YWJsZVswXTsNCisgICAgaW50IGlu ZGV4Ow0KKyAgICBCbG9ja0RyaXZlclN0YXRlICpiczsNCiANCi0gICAgaWYgKGJzICYmIGJkcnZf aXNfaW5zZXJ0ZWQoYnMpICYmICFiZHJ2X2lzX3JlbW92YWJsZShicykpIHsNCisgICAgaW5kZXgg PSBkcml2ZV9nZXRfaW5kZXgoSUZfSURFLCAwLCAwKTsNCisgICAgaWYgKGluZGV4ID09IC0xKQ0K KyAgICAgICAgcmV0dXJuOw0KKyAgICBicyA9IGRyaXZlc190YWJsZVtpbmRleF0uYmRydjsNCisg ICAgaWYgKGJkcnZfaXNfaW5zZXJ0ZWQoYnMpICYmICFiZHJ2X2lzX3JlbW92YWJsZShicykpIHsN CiAgICAgICAgIG1kID0gZHNjbTF4eHh4X2luaXQoYnMpOw0KICAgICAgICAgcHhhMnh4X3BjbWNp YV9hdHRhY2goY3B1LT5wY21jaWFbMV0sIG1kKTsNCiAgICAgfQ0KSW5kZXg6IHFlbXUvaHcvbWlw c19tYWx0YS5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09DQotLS0gcWVtdS5vcmlnL2h3L21pcHNfbWFsdGEuYwkyMDA3 LTExLTA5IDIyOjA0OjI4LjAwMDAwMDAwMCArMDEwMA0KKysrIHFlbXUvaHcvbWlwc19tYWx0YS5j CTIwMDctMTEtMDkgMjI6MDQ6MzMuMDAwMDAwMDAwICswMTAwDQpAQCAtNDIsNiArNDIsOCBAQA0K ICNkZWZpbmUgRU5WUF9OQl9FTlRSSUVTCSAJMTYNCiAjZGVmaW5lIEVOVlBfRU5UUllfU0laRQkg CTI1Ng0KIA0KKyNkZWZpbmUgTUFYX0lERV9CVVMgMg0KKw0KIGV4dGVybiBGSUxFICpsb2dmaWxl Ow0KIA0KIHR5cGVkZWYgc3RydWN0IHsNCkBAIC03NjAsNiArNzYyLDggQEAgdm9pZCBtaXBzX21h bHRhX2luaXQgKGludCByYW1fc2l6ZSwgaW50IA0KICAgICB1aW50OF90ICplZXByb21fYnVmOw0K ICAgICBpMmNfYnVzICpzbWJ1czsNCiAgICAgaW50IGk7DQorICAgIGludCBpbmRleDsNCisgICAg QmxvY2tEcml2ZXJTdGF0ZSAqaGRbTUFYX0lERV9CVVMgKiBNQVhfSURFX0RFVlNdOw0KIA0KICAg ICAvKiBpbml0IENQVXMgKi8NCiAgICAgaWYgKGNwdV9tb2RlbCA9PSBOVUxMKSB7DQpAQCAtODQ1 LDggKzg0OSwxNyBAQCB2b2lkIG1pcHNfbWFsdGFfaW5pdCAoaW50IHJhbV9zaXplLCBpbnQgDQog ICAgIHBjaV9idXMgPSBwY2lfZ3Q2NDEyMF9pbml0KGk4MjU5KTsNCiANCiAgICAgLyogU291dGhi cmlkZ2UgKi8NCisNCisgICAgZm9yKGkgPSAwOyBpIDwgTUFYX0lERV9CVVMgKiBNQVhfSURFX0RF VlM7IGkrKykgew0KKyAgICAgICAgaW5kZXggPSBkcml2ZV9nZXRfaW5kZXgoSUZfSURFLCBpIC8g TUFYX0lERV9ERVZTLCBpICUgTUFYX0lERV9ERVZTKTsNCisgICAgICAgIGlmIChpbmRleCAhPSAt MSkNCisgICAgICAgICAgICBoZFtpXSA9IGRyaXZlc190YWJsZVtpbmRleF0uYmRydjsNCisgICAg ICAgIGVsc2UNCisgICAgICAgICAgICBoZFtpXSA9IE5VTEw7DQorICAgIH0NCisNCiAgICAgcGlp eDRfZGV2Zm4gPSBwaWl4NF9pbml0KHBjaV9idXMsIDgwKTsNCi0gICAgcGNpX3BpaXg0X2lkZV9p bml0KHBjaV9idXMsIGJzX3RhYmxlLCBwaWl4NF9kZXZmbiArIDEsIGk4MjU5KTsNCisgICAgcGNp X3BpaXg0X2lkZV9pbml0KHBjaV9idXMsIGhkLCBwaWl4NF9kZXZmbiArIDEsIGk4MjU5KTsNCiAg ICAgdXNiX3VoY2lfcGlpeDRfaW5pdChwY2lfYnVzLCBwaWl4NF9kZXZmbiArIDIpOw0KICAgICBz bWJ1cyA9IHBpaXg0X3BtX2luaXQocGNpX2J1cywgcGlpeDRfZGV2Zm4gKyAzLCAweDExMDApOw0K ICAgICBlZXByb21fYnVmID0gcWVtdV9tYWxsb2N6KDggKiAyNTYpOyAvKiBYWFg6IG1ha2UgdGhp cyBwZXJzaXN0ZW50ICovDQo= --=-EkdjUDYQJ4//ToTSSzHQ-- --=-WtGzjXYKlqg28bgIuuB5 Content-Type: application/pgp-signature; name=signature.asc Content-Description: Ceci est une partie de message =?ISO-8859-1?Q?num=E9riquement?= =?ISO-8859-1?Q?_sign=E9e?= -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) iD8DBQBHNPUv9Kffa9pFVzwRAiO7AKCLzxn1J4s2rJuUQ11bWubo5HDGnACfTOrD Qd3Z3VHk34WSK1eike3q7zg= =lSY9 -----END PGP SIGNATURE----- --=-WtGzjXYKlqg28bgIuuB5--