From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1IryEe-0000uy-63 for qemu-devel@nongnu.org; Tue, 13 Nov 2007 11:03:32 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1IryEb-0000rm-B5 for qemu-devel@nongnu.org; Tue, 13 Nov 2007 11:03:31 -0500 Received: from [199.232.76.173] (helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1IryEb-0000rI-4R for qemu-devel@nongnu.org; Tue, 13 Nov 2007 11:03:29 -0500 Received: from ecfrec.frec.bull.fr ([129.183.4.8]) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1IryEY-0002fy-96 for qemu-devel@nongnu.org; Tue, 13 Nov 2007 11:03:28 -0500 Subject: Re: [Qemu-devel] [PATCH 2/2][UPDATE] Add arg -drive to define new drive with more features From: Laurent Vivier In-Reply-To: References: <1194879921937@bull.net> <11948799213737@bull.net> Date: Tue, 13 Nov 2007 17:02:23 +0100 Message-Id: <1194969743.3673.11.camel@frecb07144> Mime-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha1; protocol="application/pgp-signature"; boundary="=-vnwW8ajpqj+XSu0uFlPD" Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Blue Swirl Cc: qemu-devel@nongnu.org --=-vnwW8ajpqj+XSu0uFlPD Content-Type: multipart/mixed; boundary="=-T5fCocbiq3JwFreb1bFu" --=-T5fCocbiq3JwFreb1bFu Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable Attached is an updated patch (corrected as you want and with more check on -drive arguments) Hope you'll like it. Regards, Laurent Le lundi 12 novembre 2007 =C3=A0 18:44 +0200, Blue Swirl a =C3=A9crit : > On 11/12/07, Laurent Vivier wrote: > > It also defines the default interface type to "scsi" for targets > > "realview", "SS-5", "SS-10", "versatilepb", "versatileab" > > to keep old behavior, where "-hda" is a SCSI disk. >=20 > For maximal compatibility, I'd like the following mappings for SS-5, > SS-10, and SS-600MP: > -hda =3D SCSI ID 0 > -hdb =3D SCSI ID 1 > -hdc =3D -cdrom =3D SCSI ID 2 > -hdd =3D SCSI ID 3 > There is no bus 1, only 0. Maybe a warning should be issued for bus=3D1. >=20 > I didn't find where this was implemented, so is the above in line with > the patch? >=20 > > Index: qemu/hw/sun4m.c >=20 > > - if (hwdef->fd_base !=3D (target_phys_addr_t)-1) > > - sun4m_fdctrl_init(slavio_irq[hwdef->fd_irq], hwdef->fd_base, f= d_table); > > + if (hwdef->fd_base !=3D (target_phys_addr_t)-1) { > > + for(i =3D 0; i < MAX_FD; i++) { > > + index =3D drive_get_index(IF_FLOPPY, 0, i); > > + if (index !=3D -1) > > + fd[i] =3D drives_table[index].bdrv; > > + else > > + fd[i] =3D NULL; > > + } > > + > > + sun4m_fdctrl_init(slavio_irq[hwdef->fd_irq], hwdef->fd_base, f= d); > > + } >=20 > This is broken, there are zero or one floppy drives, never more. >=20 > > Index: qemu/hw/sun4u.c >=20 > > - floppy_controller =3D fdctrl_init(NULL/*6*/, 2, 0, 0x3f0, fd_table= ); > > + for(i =3D 0; i < MAX_FD; i++) { > > + index =3D drive_get_index(IF_FLOPPY, 0, i); > > + if (index !=3D -1) > > + fd[i] =3D drives_table[index].bdrv; > > + else > > + fd[i] =3D NULL; > > + } > > + floppy_controller =3D fdctrl_init(NULL/*6*/, 2, 0, 0x3f0, fd); >=20 > I think same applies here (0 to 1 drives), but as the hardware is > PC-like, technically it may be possible that someone could replace the > cables and insert additional floppy drives. --=20 ------------- Laurent.Vivier@bull.net -------------- "Any sufficiently advanced technology is indistinguishable from magic." - Arthur C. Clarke --=-T5fCocbiq3JwFreb1bFu 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 ZmlsZT1maWxlXVssaWY9dHlwZV1bLGJ1cz1uXVssdW5pdD1tXVssbWVkaWE9ZF1baW5kZXg9aV1b LGN5bHM9YyxoZWFkcz1oLHNlY3M9c1ssdHJhbnM9dF1dW3NuYXBzaG90PW9ufG9mZl0NCg0Kd2hl cmU6DQoNCiAgICBmaWxlIGlzIHRoZSBkaXNrIGltYWdlDQogICAgdHlwZSBpcyB0aGUgaW50ZXJm YWNlIHR5cGUgKGlkZSwgc2NzaSwgc2QsIG10ZCwgZmxvcHB5LCBwZmxhc2gpDQogICAgbiBpcyB0 aGUgYnVzIG51bWJlciBvZiB0aGUgZ2l2ZW4gdHlwZQ0KICAgIG0gaXMgdGhlIHVuaXQgbnVtYmVy IG9uIHRoZSBnaXZlbiBidXMNCiAgICBkIGlzIHRoZSB0eXBlIG9mIHRoZSBtZWRpYSAoZGlzaywg Y2Ryb20pDQogICAgYyxoLHMsdCBhcmUgdGhlIHBhcmFtZXRlcnMgdXN1YWxseSBnaXZlbiBieSAt aGRhY2hzDQogICAgc25hcHNob3QgYWxsb3dzIHRvIGVuYWJsZSBvciBub3QgdGhlIHNuYXBzaG90 IGZvciB0aGlzIGRpc2sNCiAgICBpIGlzIGFuIGluZGV4IG51bWJlciB3aXRoaW4gdGhlIGdpdmVu IHR5cGUgKHJlcGxhY2UgYnVzLHVuaXQpDQoNCiItY2Ryb20gZmlsZSIgaXMgYW4gYWxpYXMgZm9y ICItZHJpdmUgZmlsZT1maWxlLGluZGV4PTIsbWVkaWE9Y2Ryb20iDQoiLWhkYSBmaWxlIiBpcyBh biBhbGlhcyBmb3IgIi1kcml2ZSBmaWxlPWZpbGUsaW5kZXg9MCxtZWRpYT1kaXNrIg0KIi1oZGIg ZmlsZSIgaXMgYW4gYWxpYXMgZm9yICItZHJpdmUgZmlsZT1maWxlLGluZGV4PTEsbWVkaWE9ZGlz ayINCiItaGRjIGZpbGUiIGlzIGFuIGFsaWFzIGZvciAiLWRyaXZlIGZpbGU9ZmlsZSxpbmRleD0y LG1lZGlhPWRpc2siDQoiLWhkZCBmaWxlIiBpcyBhbiBhbGlhcyBmb3IgIi1kcml2ZSBmaWxlPWZp bGUsaW5kZXg9MyxtZWRpYT1kaXNrIg0KIi1oZGEgZmlsZSAtaGRhY2hzIGEsYixjIiBpcyBhbiBh bGlhcyBmb3IgDQogICAgICAgICAgICAgICAgICItZHJpdmUgZmlsZT1maWxlLGluZGV4PTAsY3ls cz1hLGhlYWRzPWIsc2Vjcz1jIg0KDQpZb3UgY2FuIGFsc28gZGVmaW5lIGEgY2Ryb20gb24gdGhl IHNsYWNlIG9mIGlkZTAgd2l0aDoNCiItZHJpdmUgZmlsZT1maWxlLGlmPWlkZSxpbmRleD0xLG1l ZGlhPWNkcm9tIg0KDQpZb3UgY2FuIGRlZmluZSBhbiBlbXB0eSBjZHJvbToNCiItZHJpdmUgaWY9 aWRlLGluZGV4PTEsbWVkaWE9Y2Ryb20iDQoNCiItZHJpdmUgZmlsZT1maWxlLGlmPXNjc2ksYnVz PTAsdW5pdD02IiBhbGxvd3MgdG8gY29ubmVjdCB0aGUgZGlzayBpbWFnZSBmaWxlIA0KdG8gdGhl IHNjc2kgYnVzIDAgd2l0aCB0aGUgdW5pdCBpZCA2Lg0KDQppZiB0aGVyZSBpcyBubyBTQ1NJIGRp c2ssIHRoZSBTQ1NJIGludGVyZmFjZSBpcyBub3QgY3JlYXRlZC4NCg0KSXQgYWxzbyBkZWZpbmVz IHRoZSBkZWZhdWx0IGludGVyZmFjZSB0eXBlIHRvICJzY3NpIiBmb3IgdGFyZ2V0cw0KInJlYWx2 aWV3IiwgIlNTLTUiLCAiU1MtMTAiLCAidmVyc2F0aWxlcGIiLCAidmVyc2F0aWxlYWIiDQp0byBr ZWVwIG9sZCBiZWhhdmlvciwgd2hlcmUgIi1oZGEiIGlzIGEgU0NTSSBkaXNrLg0KDQoiLWZkYSBm aWxlIiBpcyBhbiBhbGlhcyBmb3IgIi1kcml2ZSBmaWxlPWZpbGUsaW5kZXg9MCxpZj1mbG9wcHki DQoiLWZkYiBmaWxlIiBpcyBhbiBhbGlhcyBmb3IgIi1kcml2ZSBmaWxlPWZpbGUsaW5kZXg9MSxp Zj1mbG9wcHkiDQoiLXBmbGFzaCBmaWxlIiBpcyBhbiBhbGlhcyBmb3IgIi1kcml2ZSBmaWxlPWZp bGUsaWY9cGZsYXNoIg0KIi1tdGRibG9jayBmaWxlIiBpcyBhbiBhbGlhcyBmb3IgIi1kcml2ZSBm aWxlPWZpbGUsaWY9bXRkIg0KIi1zZCBmaWxlIiBiZWNvbWVzIHRoZSBhbGlhcyBvZiAiLWRyaXZl IGZpbGU9ZmlsZSxpZj1zZCINCg0KIi1kcml2ZSBmaWxlPWEgLWRyaXZlIGZpbGU9YiIgd2lsbCBi ZSBpbnRlcnByZXRlZCBsaWtlICItaGRhIGEgLWhkYiBiIg0KLS0tDQogaHcvZXNwLmMgICAgICAg ICAgIHwgICAxMCAtDQogaHcvaW50ZWdyYXRvcmNwLmMgIHwgICAgOA0KIGh3L2xzaTUzYzg5NWEu YyAgICB8ICAgIDMNCiBody9taXBzX21hbHRhLmMgICAgfCAgIDE1ICsNCiBody9taXBzX3BpY2E2 MS5jICAgfCAgIDIxICstDQogaHcvbWlwc19yNGsuYyAgICAgIHwgICAxNyArDQogaHcvbmFuZC5j ICAgICAgICAgIHwgICAgMg0KIGh3L29tYXBfbW1jLmMgICAgICB8ICAgIDINCiBody9wYy5jICAg ICAgICAgICAgfCAgIDY1ICsrKystLQ0KIGh3L3BwYzQwNV9ib2FyZHMuYyB8ICAgMjkgKy0NCiBo dy9wcGNfY2hycC5jICAgICAgfCAgIDE3ICsNCiBody9wcGNfb2xkd29ybGQuYyAgfCAgIDMxICsr LQ0KIGh3L3BwY19wcmVwLmMgICAgICB8ICAgMjcgKysNCiBody9weGEyeHhfbW1jaS5jICAgfCAg ICAzDQogaHcvcmVhbHZpZXcuYyAgICAgIHwgICAxNyArDQogaHcvc3BpdHouYyAgICAgICAgIHwg ICAgOQ0KIGh3L2VzcC5jICAgICAgICAgICB8ICAgMTAgDQogaHcvaW50ZWdyYXRvcmNwLmMgIHwg ICAgOCANCiBody9sc2k1M2M4OTVhLmMgICAgfCAgICAzIA0KIGh3L21pcHNfbWFsdGEuYyAgICB8 ICAgMjAgKw0KIGh3L21pcHNfcGljYTYxLmMgICB8ICAgMjkgKysNCiBody9taXBzX3I0ay5jICAg ICAgfCAgIDIyICsNCiBody9uYW5kLmMgICAgICAgICAgfCAgICA4IA0KIGh3L29tYXBfbW1jLmMg ICAgICB8ICAgIDggDQogaHcvcGMuYyAgICAgICAgICAgIHwgICA3MCArKystLQ0KIGh3L3BwYzQw NV9ib2FyZHMuYyB8ICAgMjkgKy0NCiBody9wcGNfY2hycC5jICAgICAgfCAgIDIxICsNCiBody9w cGNfb2xkd29ybGQuYyAgfCAgIDM1ICsrDQogaHcvcHBjX3ByZXAuYyAgICAgIHwgICAzMiArKw0K IGh3L3B4YTJ4eF9tbWNpLmMgICB8ICAgIDkgDQogaHcvcmVhbHZpZXcuYyAgICAgIHwgICAyMSAr DQogaHcvc3BpdHouYyAgICAgICAgIHwgICAgOSANCiBody9zdW40bS5jICAgICAgICAgfCAgIDI5 ICstDQogaHcvc3VuNHUuYyAgICAgICAgIHwgICAyOCArKw0KIGh3L3ZlcnNhdGlsZXBiLmMgICB8 ICAgMjIgKw0KIG1vbml0b3IuYyAgICAgICAgICB8ICAgMTEgDQogdmwuYyAgICAgICAgICAgICAg IHwgIDY1MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0t LS0tLQ0KIHZsLmggICAgICAgICAgICAgICB8ICAgMzIgKy0NCiAyMiBmaWxlcyBjaGFuZ2VkLCA4 MTYgaW5zZXJ0aW9ucygrKSwgMjkzIGRlbGV0aW9ucygtKQ0KDQpJbmRleDogcWVtdS92bC5jDQo9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09DQotLS0gcWVtdS5vcmlnL3ZsLmMJMjAwNy0xMS0xMyAxNjoyNzo0Ni4wMDAwMDAw MDAgKzAxMDANCisrKyBxZW11L3ZsLmMJMjAwNy0xMS0xMyAxNjo1NzoxNi4wMDAwMDAwMDAgKzAx MDANCkBAIC0xNDksMTIgKzE0OSwxMCBAQCBjaGFyIHBoeXNfcmFtX2ZpbGVbMTAyNF07DQogdm9p ZCAqaW9wb3J0X29wYXF1ZVtNQVhfSU9QT1JUU107DQogSU9Qb3J0UmVhZEZ1bmMgKmlvcG9ydF9y ZWFkX3RhYmxlWzNdW01BWF9JT1BPUlRTXTsNCiBJT1BvcnRXcml0ZUZ1bmMgKmlvcG9ydF93cml0 ZV90YWJsZVszXVtNQVhfSU9QT1JUU107DQotLyogTm90ZTogYnNfdGFibGVbTUFYX0RJU0tTXSBp cyBhIGR1bW15IGJsb2NrIGRyaXZlciBpZiBub25lIGF2YWlsYWJsZQ0KKy8qIE5vdGU6IGRyaXZl c190YWJsZVtNQVhfRFJJVkVTXSBpcyBhIGR1bW15IGJsb2NrIGRyaXZlciBpZiBub25lIGF2YWls YWJsZQ0KICAgIHRvIHN0b3JlIHRoZSBWTSBzbmFwc2hvdHMgKi8NCi1CbG9ja0RyaXZlclN0YXRl ICpic190YWJsZVtNQVhfRElTS1MgKyAxXSwgKmZkX3RhYmxlW01BWF9GRF07DQotQmxvY2tEcml2 ZXJTdGF0ZSAqcGZsYXNoX3RhYmxlW01BWF9QRkxBU0hdOw0KLUJsb2NrRHJpdmVyU3RhdGUgKnNk X2JkcnY7DQotQmxvY2tEcml2ZXJTdGF0ZSAqbXRkX2JkcnY7DQorRHJpdmVJbmZvIGRyaXZlc190 YWJsZVtNQVhfRFJJVkVTKzFdOw0KK2ludCBuYl9kcml2ZXM7DQogLyogcG9pbnQgdG8gdGhlIGJs b2NrIGRyaXZlciB3aGVyZSB0aGUgc25hcHNob3RzIGFyZSBtYW5hZ2VkICovDQogQmxvY2tEcml2 ZXJTdGF0ZSAqYnNfc25hcHNob3RzOw0KIGludCB2Z2FfcmFtX3NpemU7DQpAQCAtMjE4LDYgKzIx Niw4IEBAIGludCBhbHRfZ3JhYiA9IDA7DQogdW5zaWduZWQgaW50IG5iX3Byb21fZW52cyA9IDA7 DQogY29uc3QgY2hhciAqcHJvbV9lbnZzW01BWF9QUk9NX0VOVlNdOw0KICNlbmRpZg0KK2ludCBu Yl9kcml2ZXNfb3B0Ow0KK2NoYXIgZHJpdmVzX29wdFtNQVhfRFJJVkVTXVsxMDI0XTsNCiANCiAj ZGVmaW5lIFRGUihleHByKSBkbyB7IGlmICgoZXhwcikgIT0gLTEpIGJyZWFrOyB9IHdoaWxlIChl cnJubyA9PSBFSU5UUikNCiANCkBAIC0xNzM0LDEyICsxNzM0LDkgQEAgc3RhdGljIGludCBtdXhf cHJvY19ieXRlKENoYXJEcml2ZXJTdGF0ZQ0KICAgICAgICAgY2FzZSAncyc6DQogICAgICAgICAg ICAgew0KICAgICAgICAgICAgICAgICBpbnQgaTsNCi0gICAgICAgICAgICAgICAgZm9yIChpID0g MDsgaSA8IE1BWF9ESVNLUzsgaSsrKSB7DQotICAgICAgICAgICAgICAgICAgICBpZiAoYnNfdGFi bGVbaV0pDQotICAgICAgICAgICAgICAgICAgICAgICAgYmRydl9jb21taXQoYnNfdGFibGVbaV0p Ow0KKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbmJfZHJpdmVzOyBpKyspIHsNCisg ICAgICAgICAgICAgICAgICAgICAgICBiZHJ2X2NvbW1pdChkcml2ZXNfdGFibGVbaV0uYmRydik7 DQogICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICAgICAgaWYgKG10ZF9iZHJ2KQ0KLSAg ICAgICAgICAgICAgICAgICAgYmRydl9jb21taXQobXRkX2JkcnYpOw0KICAgICAgICAgICAgIH0N CiAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgIGNhc2UgJ2InOg0KQEAgLTQ1MDIsMzggKzQ0 OTksNTEgQEAgc3RhdGljIGludCBuZXRfc29ja2V0X21jYXN0X2luaXQoVkxBTlN0YQ0KIA0KIH0N CiANCitzdGF0aWMgY29uc3QgY2hhciAqZ2V0X3dvcmQoY2hhciAqYnVmLCBpbnQgYnVmX3NpemUs IGNvbnN0IGNoYXIgKnApDQorew0KKyAgICBjaGFyICpxOw0KKyAgICBpbnQgc3Vic3RyaW5nOw0K Kw0KKyAgICBzdWJzdHJpbmcgPSAwOw0KKyAgICBxID0gYnVmOw0KKyAgICB3aGlsZSAoKnAgIT0g J1wwJykgew0KKyAgICAgICAgaWYgKCpwID09ICdcXCcpIHsNCisgICAgICAgICAgICBwKys7DQor ICAgICAgICAgICAgaWYgKCpwID09ICdcMCcpDQorICAgICAgICAgICAgICAgIGJyZWFrOw0KKyAg ICAgICAgfSBlbHNlIGlmICgqcCA9PSAnXCInKSB7DQorICAgICAgICAgICAgc3Vic3RyaW5nID0g IXN1YnN0cmluZzsNCisgICAgICAgICAgICBwKys7DQorICAgICAgICAgICAgY29udGludWU7DQor ICAgICAgICB9IGVsc2UgaWYgKCFzdWJzdHJpbmcgJiYgKCpwID09ICcsJyB8fCAqcCA9PSAnPScp KQ0KKyAgICAgICAgICAgIGJyZWFrOw0KKyAgICAgICAgaWYgKHEgJiYgKHEgLSBidWYpIDwgYnVm X3NpemUgLSAxKQ0KKyAgICAgICAgICAgICpxKysgPSAqcDsNCisgICAgICAgIHArKzsNCisgICAg fQ0KKyAgICBpZiAocSkNCisgICAgICAgICpxID0gJ1wwJzsNCisNCisgICAgcmV0dXJuIHA7DQor fQ0KKw0KIHN0YXRpYyBpbnQgZ2V0X3BhcmFtX3ZhbHVlKGNoYXIgKmJ1ZiwgaW50IGJ1Zl9zaXpl LA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnRhZywgY29uc3QgY2hh ciAqc3RyKQ0KIHsNCiAgICAgY29uc3QgY2hhciAqcDsNCi0gICAgY2hhciAqcTsNCiAgICAgY2hh ciBvcHRpb25bMTI4XTsNCiANCiAgICAgcCA9IHN0cjsNCiAgICAgZm9yKDs7KSB7DQotICAgICAg ICBxID0gb3B0aW9uOw0KLSAgICAgICAgd2hpbGUgKCpwICE9ICdcMCcgJiYgKnAgIT0gJz0nKSB7 DQotICAgICAgICAgICAgaWYgKChxIC0gb3B0aW9uKSA8IHNpemVvZihvcHRpb24pIC0gMSkNCi0g ICAgICAgICAgICAgICAgKnErKyA9ICpwOw0KLSAgICAgICAgICAgIHArKzsNCi0gICAgICAgIH0N Ci0gICAgICAgICpxID0gJ1wwJzsNCisgICAgICAgIHAgPSBnZXRfd29yZChvcHRpb24sIHNpemVv ZihvcHRpb24pLCBwKTsNCiAgICAgICAgIGlmICgqcCAhPSAnPScpDQogICAgICAgICAgICAgYnJl YWs7DQogICAgICAgICBwKys7DQogICAgICAgICBpZiAoIXN0cmNtcCh0YWcsIG9wdGlvbikpIHsN Ci0gICAgICAgICAgICBxID0gYnVmOw0KLSAgICAgICAgICAgIHdoaWxlICgqcCAhPSAnXDAnICYm ICpwICE9ICcsJykgew0KLSAgICAgICAgICAgICAgICBpZiAoKHEgLSBidWYpIDwgYnVmX3NpemUg LSAxKQ0KLSAgICAgICAgICAgICAgICAgICAgKnErKyA9ICpwOw0KLSAgICAgICAgICAgICAgICBw Kys7DQotICAgICAgICAgICAgfQ0KLSAgICAgICAgICAgICpxID0gJ1wwJzsNCi0gICAgICAgICAg ICByZXR1cm4gcSAtIGJ1ZjsNCisgICAgICAgICAgICAodm9pZClnZXRfd29yZChidWYsIGJ1Zl9z aXplLCBwKTsNCisgICAgICAgICAgICByZXR1cm4gc3RybGVuKGJ1Zik7DQogICAgICAgICB9IGVs c2Ugew0KLSAgICAgICAgICAgIHdoaWxlICgqcCAhPSAnXDAnICYmICpwICE9ICcsJykgew0KLSAg ICAgICAgICAgICAgICBwKys7DQotICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIHAgPSBnZXRf d29yZChOVUxMLCAwLCBwKTsNCiAgICAgICAgIH0NCiAgICAgICAgIGlmICgqcCAhPSAnLCcpDQog ICAgICAgICAgICAgYnJlYWs7DQpAQCAtNDU0Miw2ICs0NTUyLDMyIEBAIHN0YXRpYyBpbnQgZ2V0 X3BhcmFtX3ZhbHVlKGNoYXIgKmJ1ZiwgaW4NCiAgICAgcmV0dXJuIDA7DQogfQ0KIA0KK3N0YXRp YyBpbnQgY2hlY2tfcGFyYW1zKGNoYXIgKmJ1ZiwgaW50IGJ1Zl9zaXplLA0KKyAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXIgKipwYXJhbXMsIGNvbnN0IGNoYXIgKnN0cikNCit7DQorICAgIGNv bnN0IGNoYXIgKnA7DQorICAgIGludCBpOw0KKw0KKyAgICBwID0gc3RyOw0KKyAgICBmb3IoOzsp IHsNCisgICAgICAgIHAgPSBnZXRfd29yZChidWYsIGJ1Zl9zaXplLCBwKTsNCisgICAgICAgIGlm ICgqcCAhPSAnPScpDQorICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgcCsrOw0KKyAg ICAgICAgZm9yKGkgPSAwOyBwYXJhbXNbaV0gIT0gTlVMTDsgaSsrKQ0KKyAgICAgICAgICAgIGlm ICghc3RyY21wKHBhcmFtc1tpXSwgYnVmKSkNCisgICAgICAgICAgICAgICAgYnJlYWs7DQorICAg ICAgICBpZiAocGFyYW1zW2ldID09IE5VTEwpDQorICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAg ICAgICAgcCA9IGdldF93b3JkKE5VTEwsIDAsIHApOw0KKyAgICAgICAgaWYgKCpwICE9ICcsJykN CisgICAgICAgICAgICBicmVhazsNCisgICAgICAgIHArKzsNCisgICAgfQ0KKyAgICByZXR1cm4g MDsNCit9DQorDQorDQogc3RhdGljIGludCBuZXRfY2xpZW50X2luaXQoY29uc3QgY2hhciAqc3Ry KQ0KIHsNCiAgICAgY29uc3QgY2hhciAqcDsNCkBAIC00NjkyLDYgKzQ3MjgsMzIyIEBAIHZvaWQg ZG9faW5mb19uZXR3b3JrKHZvaWQpDQogICAgIH0NCiB9DQogDQorI2RlZmluZSBIRF9BTElBUyAi ZmlsZT1cIiVzXCIsaW5kZXg9JWQsbWVkaWE9ZGlzayINCisjaWZkZWYgVEFSR0VUX1BQQw0KKyNk ZWZpbmUgQ0RST01fQUxJQVMgImluZGV4PTEsbWVkaWE9Y2Ryb20iDQorI2Vsc2UNCisjZGVmaW5l IENEUk9NX0FMSUFTICJpbmRleD0yLG1lZGlhPWNkcm9tIg0KKyNlbmRpZg0KKyNkZWZpbmUgRkRf QUxJQVMgImluZGV4PSVkLGlmPWZsb3BweSINCisjZGVmaW5lIFBGTEFTSF9BTElBUyAiZmlsZT1c IiVzXCIsaWY9cGZsYXNoIg0KKyNkZWZpbmUgTVREX0FMSUFTICJmaWxlPVwiJXNcIixpZj1tdGQi DQorI2RlZmluZSBTRF9BTElBUyAiZmlsZT1cIiVzXCIsaWY9c2QiDQorDQorc3RhdGljIGludCBk cml2ZV9hZGQoY29uc3QgY2hhciAqZm10LCAuLi4pDQorew0KKyAgICB2YV9saXN0IGFwOw0KKw0K KyAgICBpZiAobmJfZHJpdmVzX29wdCA+PSBNQVhfRFJJVkVTKSB7DQorICAgICAgICBmcHJpbnRm KHN0ZGVyciwgInFlbXU6IHRvbyBtYW55IGRyaXZlc1xuIik7DQorICAgICAgICBleGl0KDEpOw0K KyAgICB9DQorDQorICAgIHZhX3N0YXJ0KGFwLCBmbXQpOw0KKyAgICB2c25wcmludGYoZHJpdmVz X29wdFtuYl9kcml2ZXNfb3B0XSwgc2l6ZW9mKGRyaXZlc19vcHRbMF0pLCBmbXQsIGFwKTsNCisg ICAgdmFfZW5kKGFwKTsNCisNCisgICAgcmV0dXJuIG5iX2RyaXZlc19vcHQrKzsNCit9DQorDQor aW50IGRyaXZlX2dldF9pbmRleChCbG9ja0ludGVyZmFjZVR5cGUgaW50ZXJmYWNlLCBpbnQgYnVz LCBpbnQgdW5pdCkNCit7DQorICAgIGludCBpbmRleDsNCisNCisgICAgLyogc2VlayBpbnRlcmZh Y2UsIGJ1cyBhbmQgdW5pdCAqLw0KKw0KKyAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBuYl9k cml2ZXM7IGluZGV4KyspDQorICAgICAgICBpZiAoZHJpdmVzX3RhYmxlW2luZGV4XS5pbnRlcmZh Y2UgPT0gaW50ZXJmYWNlICYmDQorCSAgICBkcml2ZXNfdGFibGVbaW5kZXhdLmJ1cyA9PSBidXMg JiYNCisJICAgIGRyaXZlc190YWJsZVtpbmRleF0udW5pdCA9PSB1bml0KQ0KKyAgICAgICAgcmV0 dXJuIGluZGV4Ow0KKw0KKyAgICByZXR1cm4gLTE7DQorfQ0KKw0KK2ludCBkcml2ZV9nZXRfbWF4 X2J1cyhCbG9ja0ludGVyZmFjZVR5cGUgaW50ZXJmYWNlKQ0KK3sNCisgICAgaW50IG1heF9idXM7 DQorICAgIGludCBpbmRleDsNCisNCisgICAgbWF4X2J1cyA9IC0xOw0KKyAgICBmb3IgKGluZGV4 ID0gMDsgaW5kZXggPCBuYl9kcml2ZXM7IGluZGV4KyspIHsNCisgICAgICAgIGlmKGRyaXZlc190 YWJsZVtpbmRleF0uaW50ZXJmYWNlID09IGludGVyZmFjZSAmJg0KKyAgICAgICAgICAgZHJpdmVz X3RhYmxlW2luZGV4XS5idXMgPiBtYXhfYnVzKQ0KKyAgICAgICAgICAgIG1heF9idXMgPSBkcml2 ZXNfdGFibGVbaW5kZXhdLmJ1czsNCisgICAgfQ0KKyAgICByZXR1cm4gbWF4X2J1czsNCit9DQor DQorc3RhdGljIGludCBkcml2ZV9pbml0KGNvbnN0IGNoYXIgKnN0ciwgaW50IHNuYXBzaG90LCBR RU1VTWFjaGluZSAqbWFjaGluZSkNCit7DQorICAgIGNoYXIgYnVmWzEyOF07DQorICAgIGNoYXIg ZmlsZVsxMDI0XTsNCisgICAgQmxvY2tJbnRlcmZhY2VUeXBlIGludGVyZmFjZTsNCisgICAgZW51 bSB7IE1FRElBX0RJU0ssIE1FRElBX0NEUk9NIH0gbWVkaWE7DQorICAgIGludCBidXNfaWQsIHVu aXRfaWQ7DQorICAgIGludCBjeWxzLCBoZWFkcywgc2VjcywgdHJhbnNsYXRpb247DQorICAgIEJs b2NrRHJpdmVyU3RhdGUgKmJkcnY7DQorICAgIGludCBtYXhfZGV2czsNCisgICAgaW50IGluZGV4 Ow0KKyAgICBjaGFyICpwYXJhbXNbXSA9IHsgImJ1cyIsICJ1bml0IiwgImlmIiwgImluZGV4Iiwg ImN5bHMiLCAiaGVhZHMiLA0KKyAgICAgICAgICAgICAgICAgICAgICAgInNlY3MiLCAidHJhbnMi LCAibWVkaWEiLCAic25hcHNob3QiLCAiZmlsZSIsIE5VTEwgfTsNCisNCisgICAgaWYgKGNoZWNr X3BhcmFtcyhidWYsIHNpemVvZihidWYpLCBwYXJhbXMsIHN0cikgPCAwKSB7DQorICAgICAgICAg ZnByaW50ZihzdGRlcnIsICJxZW11OiB1bmtub3dtIHBhcmFtZXRlciAnJXMnIGluICclcydcbiIs DQorICAgICAgICAgICAgICAgICAgICAgICAgIGJ1Ziwgc3RyKTsNCisgICAgICAgICByZXR1cm4g LTE7DQorICAgIH0NCisNCisgICAgZmlsZVswXSA9IDA7DQorICAgIGN5bHMgPSBoZWFkcyA9IHNl Y3MgPSAwOw0KKyAgICBidXNfaWQgPSAwOw0KKyAgICB1bml0X2lkID0gLTE7DQorICAgIHRyYW5z bGF0aW9uID0gQklPU19BVEFfVFJBTlNMQVRJT05fQVVUTzsNCisgICAgaW5kZXggPSAtMTsNCisN CisgICAgaWYgKCFzdHJjbXAobWFjaGluZS0+bmFtZSwgInJlYWx2aWV3IikgfHwNCisgICAgICAg ICFzdHJjbXAobWFjaGluZS0+bmFtZSwgIlNTLTUiKSB8fA0KKyAgICAgICAgIXN0cmNtcChtYWNo aW5lLT5uYW1lLCAiU1MtMTAiKSB8fA0KKyAgICAgICAgIXN0cmNtcChtYWNoaW5lLT5uYW1lLCAi dmVyc2F0aWxlcGIiKSB8fA0KKyAgICAgICAgIXN0cmNtcChtYWNoaW5lLT5uYW1lLCAidmVyc2F0 aWxlYWIiKSkgew0KKyAgICAgICAgaW50ZXJmYWNlID0gSUZfU0NTSTsNCisgICAgICAgIG1heF9k ZXZzID0gTUFYX1NDU0lfREVWUzsNCisgICAgfSBlbHNlIHsNCisgICAgICAgIGludGVyZmFjZSA9 IElGX0lERTsNCisgICAgICAgIG1heF9kZXZzID0gTUFYX0lERV9ERVZTOw0KKyAgICB9DQorICAg IG1lZGlhID0gTUVESUFfRElTSzsNCisNCisgICAgLyogZXh0cmFjdCBwYXJhbWV0ZXJzICovDQor DQorICAgIGlmIChnZXRfcGFyYW1fdmFsdWUoYnVmLCBzaXplb2YoYnVmKSwgImJ1cyIsIHN0cikp IHsNCisgICAgICAgIGJ1c19pZCA9IHN0cnRvbChidWYsIE5VTEwsIDApOw0KKwlpZiAoYnVzX2lk IDwgMCkgew0KKwkgICAgZnByaW50ZihzdGRlcnIsICJxZW11OiAnJXMnIGludmFsaWQgYnVzIGlk XG4iLCBzdHIpOw0KKwkgICAgcmV0dXJuIC0xOw0KKwl9DQorICAgIH0NCisNCisgICAgaWYgKGdl dF9wYXJhbV92YWx1ZShidWYsIHNpemVvZihidWYpLCAidW5pdCIsIHN0cikpIHsNCisgICAgICAg IHVuaXRfaWQgPSBzdHJ0b2woYnVmLCBOVUxMLCAwKTsNCisJaWYgKHVuaXRfaWQgPCAwKSB7DQor CSAgICBmcHJpbnRmKHN0ZGVyciwgInFlbXU6ICclcycgaW52YWxpZCB1bml0IGlkXG4iLCBzdHIp Ow0KKwkgICAgcmV0dXJuIC0xOw0KKwl9DQorICAgIH0NCisNCisgICAgaWYgKGdldF9wYXJhbV92 YWx1ZShidWYsIHNpemVvZihidWYpLCAiaWYiLCBzdHIpKSB7DQorICAgICAgICBpZiAoIXN0cmNt cChidWYsICJpZGUiKSkgew0KKwkgICAgaW50ZXJmYWNlID0gSUZfSURFOw0KKyAgICAgICAgICAg IG1heF9kZXZzID0gTUFYX0lERV9ERVZTOw0KKyAgICAgICAgfSBlbHNlIGlmICghc3RyY21wKGJ1 ZiwgInNjc2kiKSkgew0KKwkgICAgaW50ZXJmYWNlID0gSUZfU0NTSTsNCisgICAgICAgICAgICBt YXhfZGV2cyA9IE1BWF9TQ1NJX0RFVlM7DQorICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYnVm LCAiZmxvcHB5IikpIHsNCisJICAgIGludGVyZmFjZSA9IElGX0ZMT1BQWTsNCisgICAgICAgICAg ICBtYXhfZGV2cyA9IDA7DQorICAgICAgICB9IGVsc2UgaWYgKCFzdHJjbXAoYnVmLCAicGZsYXNo IikpIHsNCisJICAgIGludGVyZmFjZSA9IElGX1BGTEFTSDsNCisgICAgICAgICAgICBtYXhfZGV2 cyA9IDA7DQorCX0gZWxzZSBpZiAoIXN0cmNtcChidWYsICJtdGQiKSkgew0KKwkgICAgaW50ZXJm YWNlID0gSUZfTVREOw0KKyAgICAgICAgICAgIG1heF9kZXZzID0gMDsNCisJfSBlbHNlIGlmICgh c3RyY21wKGJ1ZiwgInNkIikpIHsNCisJICAgIGludGVyZmFjZSA9IElGX1NEOw0KKyAgICAgICAg ICAgIG1heF9kZXZzID0gMDsNCisJfSBlbHNlIHsNCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVy ciwgInFlbXU6ICclcycgdW5zdXBwb3J0ZWQgYnVzIHR5cGUgJyVzJ1xuIiwgc3RyLCBidWYpOw0K KyAgICAgICAgICAgIHJldHVybiAtMTsNCisJfQ0KKyAgICB9DQorDQorICAgIGlmIChnZXRfcGFy YW1fdmFsdWUoYnVmLCBzaXplb2YoYnVmKSwgImluZGV4Iiwgc3RyKSkgew0KKyAgICAgICAgaW5k ZXggPSBzdHJ0b2woYnVmLCBOVUxMLCAwKTsNCisJaWYgKGluZGV4IDwgMCkgew0KKwkgICAgZnBy aW50ZihzdGRlcnIsICJxZW11OiAnJXMnIGludmFsaWQgaW5kZXhcbiIsIHN0cik7DQorCSAgICBy ZXR1cm4gLTE7DQorCX0NCisgICAgfQ0KKw0KKyAgICBpZiAoZ2V0X3BhcmFtX3ZhbHVlKGJ1Ziwg c2l6ZW9mKGJ1ZiksICJjeWxzIiwgc3RyKSkgew0KKyAgICAgICAgY3lscyA9IHN0cnRvbChidWYs IE5VTEwsIDApOw0KKyAgICB9DQorDQorICAgIGlmIChnZXRfcGFyYW1fdmFsdWUoYnVmLCBzaXpl b2YoYnVmKSwgImhlYWRzIiwgc3RyKSkgew0KKyAgICAgICAgaGVhZHMgPSBzdHJ0b2woYnVmLCBO VUxMLCAwKTsNCisgICAgfQ0KKw0KKyAgICBpZiAoZ2V0X3BhcmFtX3ZhbHVlKGJ1Ziwgc2l6ZW9m KGJ1ZiksICJzZWNzIiwgc3RyKSkgew0KKyAgICAgICAgc2VjcyA9IHN0cnRvbChidWYsIE5VTEws IDApOw0KKyAgICB9DQorDQorICAgIGlmIChjeWxzIHx8IGhlYWRzIHx8IHNlY3MpIHsNCisgICAg ICAgIGlmIChjeWxzIDwgMSB8fCBjeWxzID4gMTYzODMpIHsNCisgICAgICAgICAgICBmcHJpbnRm KHN0ZGVyciwgInFlbXU6ICclcycgaW52YWxpZCBwaHlzaWNhbCBjeWxzIG51bWJlclxuIiwgc3Ry KTsNCisJICAgIHJldHVybiAtMTsNCisJfQ0KKyAgICAgICAgaWYgKGhlYWRzIDwgMSB8fCBoZWFk cyA+IDE2KSB7DQorICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJxZW11OiAnJXMnIGludmFs aWQgcGh5c2ljYWwgaGVhZHMgbnVtYmVyXG4iLCBzdHIpOw0KKwkgICAgcmV0dXJuIC0xOw0KKwl9 DQorICAgICAgICBpZiAoc2VjcyA8IDEgfHwgc2VjcyA+IDYzKSB7DQorICAgICAgICAgICAgZnBy aW50ZihzdGRlcnIsICJxZW11OiAnJXMnIGludmFsaWQgcGh5c2ljYWwgc2VjcyBudW1iZXJcbiIs IHN0cik7DQorCSAgICByZXR1cm4gLTE7DQorCX0NCisgICAgfQ0KKw0KKyAgICBpZiAoZ2V0X3Bh cmFtX3ZhbHVlKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJ0cmFucyIsIHN0cikpIHsNCisgICAgICAgIGlm ICghY3lscykgew0KKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLA0KKyAgICAgICAgICAgICAg ICAgICAgInFlbXU6ICclcycgdHJhbnMgbXVzdCBiZSB1c2VkIHdpdGggY3lscyxoZWFkcyBhbmQg c2Vjc1xuIiwNCisgICAgICAgICAgICAgICAgICAgIHN0cik7DQorICAgICAgICAgICAgcmV0dXJu IC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKCFzdHJjbXAoYnVmLCAibm9uZSIpKQ0KKyAg ICAgICAgICAgIHRyYW5zbGF0aW9uID0gQklPU19BVEFfVFJBTlNMQVRJT05fTk9ORTsNCisgICAg ICAgIGVsc2UgaWYgKCFzdHJjbXAoYnVmLCAibGJhIikpDQorICAgICAgICAgICAgdHJhbnNsYXRp b24gPSBCSU9TX0FUQV9UUkFOU0xBVElPTl9MQkE7DQorICAgICAgICBlbHNlIGlmICghc3RyY21w KGJ1ZiwgImF1dG8iKSkNCisgICAgICAgICAgICB0cmFuc2xhdGlvbiA9IEJJT1NfQVRBX1RSQU5T TEFUSU9OX0FVVE87DQorCWVsc2Ugew0KKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicWVt dTogJyVzJyBpbnZhbGlkIHRyYW5zbGF0aW9uIHR5cGVcbiIsIHN0cik7DQorCSAgICByZXR1cm4g LTE7DQorCX0NCisgICAgfQ0KKw0KKyAgICBpZiAoZ2V0X3BhcmFtX3ZhbHVlKGJ1Ziwgc2l6ZW9m KGJ1ZiksICJtZWRpYSIsIHN0cikpIHsNCisgICAgICAgIGlmICghc3RyY21wKGJ1ZiwgImRpc2si KSkgew0KKwkgICAgbWVkaWEgPSBNRURJQV9ESVNLOw0KKwl9IGVsc2UgaWYgKCFzdHJjbXAoYnVm LCAiY2Ryb20iKSkgew0KKyAgICAgICAgICAgIGlmIChjeWxzIHx8IHNlY3MgfHwgaGVhZHMpIHsN CisgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsDQorICAgICAgICAgICAgICAgICAgICAg ICAgInFlbXU6ICclcycgaW52YWxpZCBwaHlzaWNhbCBDSFMgZm9ybWF0XG4iLCBzdHIpOw0KKwkg ICAgICAgIHJldHVybiAtMTsNCisgICAgICAgICAgICB9DQorCSAgICBtZWRpYSA9IE1FRElBX0NE Uk9NOw0KKwl9IGVsc2Ugew0KKwkgICAgZnByaW50ZihzdGRlcnIsICJxZW11OiAnJXMnIGludmFs aWQgbWVkaWFcbiIsIHN0cik7DQorCSAgICByZXR1cm4gLTE7DQorCX0NCisgICAgfQ0KKw0KKyAg ICBpZiAoZ2V0X3BhcmFtX3ZhbHVlKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJzbmFwc2hvdCIsIHN0cikp IHsNCisgICAgICAgIGlmICghc3RyY21wKGJ1ZiwgIm9uIikpDQorCSAgICBzbmFwc2hvdCA9IDE7 DQorICAgICAgICBlbHNlIGlmICghc3RyY21wKGJ1ZiwgIm9mZiIpKQ0KKwkgICAgc25hcHNob3Qg PSAwOw0KKwllbHNlIHsNCisJICAgIGZwcmludGYoc3RkZXJyLCAicWVtdTogJyVzJyBpbnZhbGlk IHNuYXBzaG90IG9wdGlvblxuIiwgc3RyKTsNCisJICAgIHJldHVybiAtMTsNCisJfQ0KKyAgICB9 DQorDQorICAgIGdldF9wYXJhbV92YWx1ZShmaWxlLCBzaXplb2YoZmlsZSksICJmaWxlIiwgc3Ry KTsNCisNCisgICAgLyogY29tcHV0ZSBidXMgYW5kIHVuaXQgYWNjb3JkaW5nIGluZGV4ICovDQor DQorICAgIGlmIChpbmRleCAhPSAtMSkgew0KKyAgICAgICAgaWYgKGJ1c19pZCAhPSAwIHx8IHVu aXRfaWQgIT0gLTEpIHsNCisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwNCisgICAgICAgICAg ICAgICAgICAgICJxZW11OiAnJXMnIGluZGV4IGNhbm5vdCBiZSB1c2VkIHdpdGggYnVzIGFuZCB1 bml0XG4iLCBzdHIpOw0KKyAgICAgICAgICAgIHJldHVybiAtMTsNCisgICAgICAgIH0NCisgICAg ICAgIGlmIChtYXhfZGV2cyA9PSAwKQ0KKyAgICAgICAgew0KKyAgICAgICAgICAgIHVuaXRfaWQg PSBpbmRleDsNCisgICAgICAgICAgICBidXNfaWQgPSAwOw0KKyAgICAgICAgfSBlbHNlIHsNCisg ICAgICAgICAgICB1bml0X2lkID0gaW5kZXggJSBtYXhfZGV2czsNCisgICAgICAgICAgICBidXNf aWQgPSBpbmRleCAvIG1heF9kZXZzOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIC8qIGlm IHVzZXIgZG9lc24ndCBzcGVjaWZ5IGEgdW5pdF9pZCwNCisgICAgICogdHJ5IHRvIGZpbmQgdGhl IGZpcnN0IGZyZWUNCisgICAgICovDQorDQorICAgIGlmICh1bml0X2lkID09IC0xKSB7DQorICAg ICAgIHVuaXRfaWQgPSAwOw0KKyAgICAgICB3aGlsZSAoZHJpdmVfZ2V0X2luZGV4KGludGVyZmFj ZSwgYnVzX2lkLCB1bml0X2lkKSAhPSAtMSkgew0KKyAgICAgICAgICAgdW5pdF9pZCsrOw0KKyAg ICAgICAgICAgaWYgKG1heF9kZXZzICYmIHVuaXRfaWQgPj0gbWF4X2RldnMpIHsNCisgICAgICAg ICAgICAgICB1bml0X2lkIC09IG1heF9kZXZzOw0KKyAgICAgICAgICAgICAgIGJ1c19pZCsrOw0K KyAgICAgICAgICAgfQ0KKyAgICAgICB9DQorICAgIH0NCisNCisgICAgLyogY2hlY2sgdW5pdCBp ZCAqLw0KKw0KKyAgICBpZiAobWF4X2RldnMgJiYgdW5pdF9pZCA+PSBtYXhfZGV2cykgew0KKyAg ICAgICAgZnByaW50ZihzdGRlcnIsICJxZW11OiAnJXMnIHVuaXQgJWQgdG9vIGJpZyAobWF4IGlz ICVkKVxuIiwNCisgICAgICAgICAgICAgICAgICAgICAgICBzdHIsIHVuaXRfaWQsIG1heF9kZXZz IC0gMSk7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisNCisgICAgLyoNCisgICAgICog aWdub3JlIG11bHRpcGxlIGRlZmluaXRpb25zDQorICAgICAqLw0KKw0KKyAgICBpZiAoZHJpdmVf Z2V0X2luZGV4KGludGVyZmFjZSwgYnVzX2lkLCB1bml0X2lkKSAhPSAtMSkNCisgICAgICAgIHJl dHVybiAwOw0KKw0KKyAgICAvKiBpbml0ICovDQorDQorICAgIHNucHJpbnRmKGJ1Ziwgc2l6ZW9m KGJ1ZiksICJkcml2ZSVkIiwgbmJfZHJpdmVzKTsNCisgICAgYmRydiA9IGJkcnZfbmV3KGJ1Zik7 DQorICAgIGRyaXZlc190YWJsZVtuYl9kcml2ZXNdLmJkcnYgPSBiZHJ2Ow0KKyAgICBkcml2ZXNf dGFibGVbbmJfZHJpdmVzXS5pbnRlcmZhY2UgPSBpbnRlcmZhY2U7DQorICAgIGRyaXZlc190YWJs ZVtuYl9kcml2ZXNdLmJ1cyA9IGJ1c19pZDsNCisgICAgZHJpdmVzX3RhYmxlW25iX2RyaXZlc10u dW5pdCA9IHVuaXRfaWQ7DQorICAgIG5iX2RyaXZlcysrOw0KKw0KKyAgICBzd2l0Y2goaW50ZXJm YWNlKSB7DQorICAgIGNhc2UgSUZfSURFOg0KKyAgICBjYXNlIElGX1NDU0k6DQorICAgICAgICBz d2l0Y2gobWVkaWEpIHsNCisJY2FzZSBNRURJQV9ESVNLOg0KKyAgICAgICAgICAgIGlmIChjeWxz ICE9IDApIHsNCisgICAgICAgICAgICAgICAgYmRydl9zZXRfZ2VvbWV0cnlfaGludChiZHJ2LCBj eWxzLCBoZWFkcywgc2Vjcyk7DQorICAgICAgICAgICAgICAgIGJkcnZfc2V0X3RyYW5zbGF0aW9u X2hpbnQoYmRydiwgdHJhbnNsYXRpb24pOw0KKyAgICAgICAgICAgIH0NCisJICAgIGJyZWFrOw0K KwljYXNlIE1FRElBX0NEUk9NOg0KKyAgICAgICAgICAgIGJkcnZfc2V0X3R5cGVfaGludChiZHJ2 LCBCRFJWX1RZUEVfQ0RST00pOw0KKwkgICAgYnJlYWs7DQorCX0NCisgICAgICAgIGJyZWFrOw0K KyAgICBjYXNlIElGX1NEOg0KKyAgICAgICAgLyogRklYTUU6IFRoaXMgaXNuJ3QgcmVhbGx5IGEg ZmxvcHB5LCBidXQgaXQncyBhIHJlYXNvbmFibGUNCisgICAgICAgICAgIGFwcHJveGltYXRpb24u ICAqLw0KKyAgICBjYXNlIElGX0ZMT1BQWToNCisgICAgICAgIGJkcnZfc2V0X3R5cGVfaGludChi ZHJ2LCBCRFJWX1RZUEVfRkxPUFBZKTsNCisgICAgICAgIGJyZWFrOw0KKyAgICBjYXNlIElGX1BG TEFTSDoNCisgICAgY2FzZSBJRl9NVEQ6DQorICAgICAgICBicmVhazsNCisgICAgfQ0KKyAgICBp ZiAoIWZpbGVbMF0pDQorICAgICAgICByZXR1cm4gMDsNCisgICAgaWYgKGJkcnZfb3BlbihiZHJ2 LCBmaWxlLCBzbmFwc2hvdCA/IEJEUlZfT19TTkFQU0hPVCA6IDApIDwgMCB8fA0KKyAgICAgICAg cWVtdV9rZXlfY2hlY2soYmRydiwgZmlsZSkpIHsNCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAi cWVtdTogY291bGQgbm90IG9wZW4gZGlzayBpbWFnZSAlc1xuIiwNCisgICAgICAgICAgICAgICAg ICAgICAgICBmaWxlKTsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKyAgICByZXR1cm4g MDsNCit9DQorDQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqLw0KIC8qIFVTQiBkZXZpY2VzICovDQogDQpAQCAtNTQ3NSw4ICs1ODI3 LDggQEAgc3RhdGljIEJsb2NrRHJpdmVyU3RhdGUgKmdldF9ic19zbmFwc2hvdA0KIA0KICAgICBp ZiAoYnNfc25hcHNob3RzKQ0KICAgICAgICAgcmV0dXJuIGJzX3NuYXBzaG90czsNCi0gICAgZm9y KGkgPSAwOyBpIDw9IE1BWF9ESVNLUzsgaSsrKSB7DQotICAgICAgICBicyA9IGJzX3RhYmxlW2ld Ow0KKyAgICBmb3IoaSA9IDA7IGkgPD0gbmJfZHJpdmVzOyBpKyspIHsNCisgICAgICAgIGJzID0g ZHJpdmVzX3RhYmxlW2ldLmJkcnY7DQogICAgICAgICBpZiAoYmRydl9jYW5fc25hcHNob3QoYnMp KQ0KICAgICAgICAgICAgIGdvdG8gb2s7DQogICAgIH0NCkBAIC01NTg0LDggKzU5MzYsOCBAQCB2 b2lkIGRvX3NhdmV2bShjb25zdCBjaGFyICpuYW1lKQ0KIA0KICAgICAvKiBjcmVhdGUgdGhlIHNu YXBzaG90cyAqLw0KIA0KLSAgICBmb3IoaSA9IDA7IGkgPCBNQVhfRElTS1M7IGkrKykgew0KLSAg ICAgICAgYnMxID0gYnNfdGFibGVbaV07DQorICAgIGZvcihpID0gMDsgaSA8IG5iX2RyaXZlczsg aSsrKSB7DQorICAgICAgICBiczEgPSBkcml2ZXNfdGFibGVbaV0uYmRydjsNCiAgICAgICAgIGlm IChiZHJ2X2hhc19zbmFwc2hvdChiczEpKSB7DQogICAgICAgICAgICAgaWYgKG11c3RfZGVsZXRl KSB7DQogICAgICAgICAgICAgICAgIHJldCA9IGJkcnZfc25hcHNob3RfZGVsZXRlKGJzMSwgb2xk X3NuLT5pZF9zdHIpOw0KQEAgLTU2MjcsOCArNTk3OSw4IEBAIHZvaWQgZG9fbG9hZHZtKGNvbnN0 IGNoYXIgKm5hbWUpDQogICAgIHNhdmVkX3ZtX3J1bm5pbmcgPSB2bV9ydW5uaW5nOw0KICAgICB2 bV9zdG9wKDApOw0KIA0KLSAgICBmb3IoaSA9IDA7IGkgPD0gTUFYX0RJU0tTOyBpKyspIHsNCi0g ICAgICAgIGJzMSA9IGJzX3RhYmxlW2ldOw0KKyAgICBmb3IoaSA9IDA7IGkgPD0gbmJfZHJpdmVz OyBpKyspIHsNCisgICAgICAgIGJzMSA9IGRyaXZlc190YWJsZVtpXS5iZHJ2Ow0KICAgICAgICAg aWYgKGJkcnZfaGFzX3NuYXBzaG90KGJzMSkpIHsNCiAgICAgICAgICAgICByZXQgPSBiZHJ2X3Nu YXBzaG90X2dvdG8oYnMxLCBuYW1lKTsNCiAgICAgICAgICAgICBpZiAocmV0IDwgMCkgew0KQEAg LTU2ODgsOCArNjA0MCw4IEBAIHZvaWQgZG9fZGVsdm0oY29uc3QgY2hhciAqbmFtZSkNCiAgICAg ICAgIHJldHVybjsNCiAgICAgfQ0KIA0KLSAgICBmb3IoaSA9IDA7IGkgPD0gTUFYX0RJU0tTOyBp KyspIHsNCi0gICAgICAgIGJzMSA9IGJzX3RhYmxlW2ldOw0KKyAgICBmb3IoaSA9IDA7IGkgPD0g bmJfZHJpdmVzOyBpKyspIHsNCisgICAgICAgIGJzMSA9IGRyaXZlc190YWJsZVtpXS5iZHJ2Ow0K ICAgICAgICAgaWYgKGJkcnZfaGFzX3NuYXBzaG90KGJzMSkpIHsNCiAgICAgICAgICAgICByZXQg PSBiZHJ2X3NuYXBzaG90X2RlbGV0ZShiczEsIG5hbWUpOw0KICAgICAgICAgICAgIGlmIChyZXQg PCAwKSB7DQpAQCAtNTcxNyw4ICs2MDY5LDggQEAgdm9pZCBkb19pbmZvX3NuYXBzaG90cyh2b2lk KQ0KICAgICAgICAgcmV0dXJuOw0KICAgICB9DQogICAgIHRlcm1fcHJpbnRmKCJTbmFwc2hvdCBk ZXZpY2VzOiIpOw0KLSAgICBmb3IoaSA9IDA7IGkgPD0gTUFYX0RJU0tTOyBpKyspIHsNCi0gICAg ICAgIGJzMSA9IGJzX3RhYmxlW2ldOw0KKyAgICBmb3IoaSA9IDA7IGkgPD0gbmJfZHJpdmVzOyBp KyspIHsNCisgICAgICAgIGJzMSA9IGRyaXZlc190YWJsZVtpXS5iZHJ2Ow0KICAgICAgICAgaWYg KGJkcnZfaGFzX3NuYXBzaG90KGJzMSkpIHsNCiAgICAgICAgICAgICBpZiAoYnMgPT0gYnMxKQ0K ICAgICAgICAgICAgICAgICB0ZXJtX3ByaW50ZigiICVzIiwgYmRydl9nZXRfZGV2aWNlX25hbWUo YnMxKSk7DQpAQCAtNjQ2OCwxNSArNjgyMCwxNCBAQCBzdGF0aWMgdm9pZCByYW1fc2F2ZShRRU1V RmlsZSAqZiwgdm9pZCAqDQogICAgICAgICAgICAgLyogZmluZCBpZiB0aGUgbWVtb3J5IGJsb2Nr IGlzIGF2YWlsYWJsZSBvbiBhIHZpcnR1YWwNCiAgICAgICAgICAgICAgICBibG9jayBkZXZpY2Ug Ki8NCiAgICAgICAgICAgICBzZWN0b3JfbnVtID0gLTE7DQotICAgICAgICAgICAgZm9yKGogPSAw OyBqIDwgTUFYX0RJU0tTOyBqKyspIHsNCi0gICAgICAgICAgICAgICAgaWYgKGJzX3RhYmxlW2pd KSB7DQotICAgICAgICAgICAgICAgICAgICBzZWN0b3JfbnVtID0gYmRydl9oYXNoX2ZpbmQoYnNf dGFibGVbal0sDQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgcGh5c19yYW1fYmFzZSArIGksIEJEUlZfSEFTSF9CTE9DS19TSVpFKTsNCi0gICAgICAgICAg ICAgICAgICAgIGlmIChzZWN0b3JfbnVtID49IDApDQotICAgICAgICAgICAgICAgICAgICAgICAg YnJlYWs7DQotICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICBmb3IoaiA9IDA7IGogPCBu Yl9kcml2ZXM7IGorKykgew0KKyAgICAgICAgICAgICAgICBzZWN0b3JfbnVtID0gYmRydl9oYXNo X2ZpbmQoZHJpdmVzX3RhYmxlW2pdLmJkcnYsDQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBwaHlzX3JhbV9iYXNlICsgaSwNCisJCQkJCSAgICBCRFJWX0hBU0hf QkxPQ0tfU0laRSk7DQorICAgICAgICAgICAgICAgIGlmIChzZWN0b3JfbnVtID49IDApDQorICAg ICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYg KGogPT0gTUFYX0RJU0tTKQ0KKyAgICAgICAgICAgIGlmIChqID09IG5iX2RyaXZlcykNCiAgICAg ICAgICAgICAgICAgZ290byBub3JtYWxfY29tcHJlc3M7DQogICAgICAgICAgICAgYnVmWzBdID0g MTsNCiAgICAgICAgICAgICBidWZbMV0gPSBqOw0KQEAgLTY1MjcsMTEgKzY4NzgsMTIgQEAgc3Rh dGljIGludCByYW1fbG9hZChRRU1VRmlsZSAqZiwgdm9pZCAqbw0KICAgICAgICAgICAgIHJhbV9k ZWNvbXByZXNzX2J1ZihzLCBidWYgKyAxLCA5KTsNCiAgICAgICAgICAgICBic19pbmRleCA9IGJ1 ZlsxXTsNCiAgICAgICAgICAgICBzZWN0b3JfbnVtID0gYmU2NF90b19jcHVwdSgoY29uc3QgdWlu dDY0X3QgKikoYnVmICsgMikpOw0KLSAgICAgICAgICAgIGlmIChic19pbmRleCA+PSBNQVhfRElT S1MgfHwgYnNfdGFibGVbYnNfaW5kZXhdID09IE5VTEwpIHsNCisgICAgICAgICAgICBpZiAoYnNf aW5kZXggPj0gbmJfZHJpdmVzKSB7DQogICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAi SW52YWxpZCBibG9jayBkZXZpY2UgaW5kZXggJWRcbiIsIGJzX2luZGV4KTsNCiAgICAgICAgICAg ICAgICAgZ290byBlcnJvcjsNCiAgICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKGJkcnZf cmVhZChic190YWJsZVtic19pbmRleF0sIHNlY3Rvcl9udW0sIHBoeXNfcmFtX2Jhc2UgKyBpLA0K KyAgICAgICAgICAgIGlmIChiZHJ2X3JlYWQoZHJpdmVzX3RhYmxlW2JzX2luZGV4XS5iZHJ2LCBz ZWN0b3JfbnVtLA0KKwkgICAgICAgICAgICAgICAgICBwaHlzX3JhbV9iYXNlICsgaSwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIEJEUlZfSEFTSF9CTE9DS19TSVpFIC8gNTEyKSA8IDApIHsN CiAgICAgICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJFcnJvciB3aGlsZSByZWFkaW5nIHNl Y3RvciAlZDolIiBQUklkNjQgIlxuIiwNCiAgICAgICAgICAgICAgICAgICAgICAgICBic19pbmRl eCwgc2VjdG9yX251bSk7DQpAQCAtNzAyOCw2ICs3MzgwLDggQEAgc3RhdGljIHZvaWQgaGVscChp bnQgZXhpdGNvZGUpDQogICAgICAgICAgICAiLWhkYS8taGRiIGZpbGUgIHVzZSAnZmlsZScgYXMg SURFIGhhcmQgZGlzayAwLzEgaW1hZ2VcbiINCiAgICAgICAgICAgICItaGRjLy1oZGQgZmlsZSAg dXNlICdmaWxlJyBhcyBJREUgaGFyZCBkaXNrIDIvMyBpbWFnZVxuIg0KICAgICAgICAgICAgIi1j ZHJvbSBmaWxlICAgICB1c2UgJ2ZpbGUnIGFzIElERSBjZHJvbSBpbWFnZSAoY2Ryb20gaXMgaWRl MSBtYXN0ZXIpXG4iDQorCSAgICItZHJpdmUgW2ZpbGU9ZmlsZV1bLGlmPXR5cGVdWyxidXM9bl1b LHVuaXQ9bV1bLG1lZGlhPWRdW2luZGV4PWldWyxjeWxzPWMsaGVhZHM9aCxzZWNzPXNbLHRyYW5z PXRdXVtzbmFwc2hvdD1vbnxvZmZdXG4iDQorCSAgICIgICAgICAgICAgICAgICAgdXNlICdmaWxl JyBhcyBhIGRyaXZlIGltYWdlXG4iDQogICAgICAgICAgICAiLW10ZGJsb2NrIGZpbGUgIHVzZSAn ZmlsZScgYXMgb24tYm9hcmQgRmxhc2ggbWVtb3J5IGltYWdlXG4iDQogICAgICAgICAgICAiLXNk IGZpbGUgICAgICAgIHVzZSAnZmlsZScgYXMgU2VjdXJlRGlnaXRhbCBjYXJkIGltYWdlXG4iDQog ICAgICAgICAgICAiLXBmbGFzaCBmaWxlICAgIHVzZSAnZmlsZScgYXMgYSBwYXJhbGxlbCBmbGFz aCBpbWFnZVxuIg0KQEAgLTcxNzMsNiArNzUyNyw3IEBAIGVudW0gew0KICAgICBRRU1VX09QVElP Tl9oZGIsDQogICAgIFFFTVVfT1BUSU9OX2hkYywNCiAgICAgUUVNVV9PUFRJT05faGRkLA0KKyAg ICBRRU1VX09QVElPTl9kcml2ZSwNCiAgICAgUUVNVV9PUFRJT05fY2Ryb20sDQogICAgIFFFTVVf T1BUSU9OX210ZGJsb2NrLA0KICAgICBRRU1VX09QVElPTl9zZCwNCkBAIC03MjYyLDYgKzc2MTcs NyBAQCBjb25zdCBRRU1VT3B0aW9uIHFlbXVfb3B0aW9uc1tdID0gew0KICAgICB7ICJoZGIiLCBI QVNfQVJHLCBRRU1VX09QVElPTl9oZGIgfSwNCiAgICAgeyAiaGRjIiwgSEFTX0FSRywgUUVNVV9P UFRJT05faGRjIH0sDQogICAgIHsgImhkZCIsIEhBU19BUkcsIFFFTVVfT1BUSU9OX2hkZCB9LA0K KyAgICB7ICJkcml2ZSIsIEhBU19BUkcsIFFFTVVfT1BUSU9OX2RyaXZlIH0sDQogICAgIHsgImNk cm9tIiwgSEFTX0FSRywgUUVNVV9PUFRJT05fY2Ryb20gfSwNCiAgICAgeyAibXRkYmxvY2siLCBI QVNfQVJHLCBRRU1VX09QVElPTl9tdGRibG9jayB9LA0KICAgICB7ICJzZCIsIEhBU19BUkcsIFFF TVVfT1BUSU9OX3NkIH0sDQpAQCAtNzM3NCwxNiArNzczMCw5IEBAIGludCBxZW11X2tleV9jaGVj ayhCbG9ja0RyaXZlclN0YXRlICpicywNCiANCiBzdGF0aWMgQmxvY2tEcml2ZXJTdGF0ZSAqZ2V0 X2JkcnYoaW50IGluZGV4KQ0KIHsNCi0gICAgQmxvY2tEcml2ZXJTdGF0ZSAqYnM7DQotDQotICAg IGlmIChpbmRleCA8IDQpIHsNCi0gICAgICAgIGJzID0gYnNfdGFibGVbaW5kZXhdOw0KLSAgICB9 IGVsc2UgaWYgKGluZGV4IDwgNikgew0KLSAgICAgICAgYnMgPSBmZF90YWJsZVtpbmRleCAtIDRd Ow0KLSAgICB9IGVsc2Ugew0KLSAgICAgICAgYnMgPSBOVUxMOw0KLSAgICB9DQotICAgIHJldHVy biBiczsNCisgICAgaWYgKGluZGV4ID4gbmJfZHJpdmVzKQ0KKyAgICAgICAgcmV0dXJuIE5VTEw7 DQorICAgIHJldHVybiBkcml2ZXNfdGFibGVbaW5kZXhdLmJkcnY7DQogfQ0KIA0KIHN0YXRpYyB2 b2lkIHJlYWRfcGFzc3dvcmRzKHZvaWQpDQpAQCAtNzU4MywxOSArNzkzMiwxNiBAQCBpbnQgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQogICAgIGNvbnN0IGNoYXIgKmdkYnN0dWJfcG9ydDsN CiAjZW5kaWYNCiAgICAgdWludDMyX3QgYm9vdF9kZXZpY2VzX2JpdG1hcCA9IDA7DQotICAgIGlu dCBpLCBjZHJvbV9pbmRleCwgcGZsYXNoX2luZGV4Ow0KKyAgICBpbnQgaTsNCiAgICAgaW50IHNu YXBzaG90LCBsaW51eF9ib290LCBuZXRfYm9vdDsNCiAgICAgY29uc3QgY2hhciAqaW5pdHJkX2Zp bGVuYW1lOw0KLSAgICBjb25zdCBjaGFyICpoZF9maWxlbmFtZVtNQVhfRElTS1NdLCAqZmRfZmls ZW5hbWVbTUFYX0ZEXTsNCi0gICAgY29uc3QgY2hhciAqcGZsYXNoX2ZpbGVuYW1lW01BWF9QRkxB U0hdOw0KLSAgICBjb25zdCBjaGFyICpzZF9maWxlbmFtZTsNCi0gICAgY29uc3QgY2hhciAqbXRk X2ZpbGVuYW1lOw0KICAgICBjb25zdCBjaGFyICprZXJuZWxfZmlsZW5hbWUsICprZXJuZWxfY21k bGluZTsNCiAgICAgY29uc3QgY2hhciAqYm9vdF9kZXZpY2VzID0gIiI7DQogICAgIERpc3BsYXlT dGF0ZSAqZHMgPSAmZGlzcGxheV9zdGF0ZTsNCiAgICAgaW50IGN5bHMsIGhlYWRzLCBzZWNzLCB0 cmFuc2xhdGlvbjsNCiAgICAgY2hhciBuZXRfY2xpZW50c1tNQVhfTkVUX0NMSUVOVFNdWzI1Nl07 DQogICAgIGludCBuYl9uZXRfY2xpZW50czsNCisgICAgaW50IGhkYV9pbmRleDsNCiAgICAgaW50 IG9wdGluZDsNCiAgICAgY29uc3QgY2hhciAqciwgKm9wdGFyZzsNCiAgICAgQ2hhckRyaXZlclN0 YXRlICptb25pdG9yX2hkOw0KQEAgLTc2NDgsMTUgKzc5OTQsNiBAQCBpbnQgbWFpbihpbnQgYXJn YywgY2hhciAqKmFyZ3YpDQogICAgIG1hY2hpbmUgPSBmaXJzdF9tYWNoaW5lOw0KICAgICBjcHVf bW9kZWwgPSBOVUxMOw0KICAgICBpbml0cmRfZmlsZW5hbWUgPSBOVUxMOw0KLSAgICBmb3IoaSA9 IDA7IGkgPCBNQVhfRkQ7IGkrKykNCi0gICAgICAgIGZkX2ZpbGVuYW1lW2ldID0gTlVMTDsNCi0g ICAgZm9yKGkgPSAwOyBpIDwgTUFYX0RJU0tTOyBpKyspDQotICAgICAgICBoZF9maWxlbmFtZVtp XSA9IE5VTEw7DQotICAgIGZvcihpID0gMDsgaSA8IE1BWF9QRkxBU0g7IGkrKykNCi0gICAgICAg IHBmbGFzaF9maWxlbmFtZVtpXSA9IE5VTEw7DQotICAgIHBmbGFzaF9pbmRleCA9IDA7DQotICAg IHNkX2ZpbGVuYW1lID0gTlVMTDsNCi0gICAgbXRkX2ZpbGVuYW1lID0gTlVMTDsNCiAgICAgcmFt X3NpemUgPSBERUZBVUxUX1JBTV9TSVpFICogMTAyNCAqIDEwMjQ7DQogICAgIHZnYV9yYW1fc2l6 ZSA9IFZHQV9SQU1fU0laRTsNCiAjaWZkZWYgQ09ORklHX0dEQlNUVUINCkBAIC03NjY3LDExICs4 MDA0LDYgQEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KICAgICBub2dyYXBoaWMg PSAwOw0KICAgICBrZXJuZWxfZmlsZW5hbWUgPSBOVUxMOw0KICAgICBrZXJuZWxfY21kbGluZSA9 ICIiOw0KLSNpZmRlZiBUQVJHRVRfUFBDDQotICAgIGNkcm9tX2luZGV4ID0gMTsNCi0jZWxzZQ0K LSAgICBjZHJvbV9pbmRleCA9IDI7DQotI2VuZGlmDQogICAgIGN5bHMgPSBoZWFkcyA9IHNlY3Mg PSAwOw0KICAgICB0cmFuc2xhdGlvbiA9IEJJT1NfQVRBX1RSQU5TTEFUSU9OX0FVVE87DQogICAg IHBzdHJjcHkobW9uaXRvcl9kZXZpY2UsIHNpemVvZihtb25pdG9yX2RldmljZSksICJ2YyIpOw0K QEAgLTc2ODksNiArODAyMSw5IEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikNCiAg ICAgdXNiX2RldmljZXNfaW5kZXggPSAwOw0KIA0KICAgICBuYl9uZXRfY2xpZW50cyA9IDA7DQor ICAgIG5iX2RyaXZlcyA9IDA7DQorICAgIG5iX2RyaXZlc19vcHQgPSAwOw0KKyAgICBoZGFfaW5k ZXggPSAtMTsNCiANCiAgICAgbmJfbmljcyA9IDA7DQogICAgIC8qIGRlZmF1bHQgbWFjIGFkZHJl c3Mgb2YgdGhlIGZpcnN0IG5ldHdvcmsgaW50ZXJmYWNlICovDQpAQCAtNzY5OSw3ICs4MDM0LDcg QEAgaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KICAgICAgICAgICAgIGJyZWFrOw0K ICAgICAgICAgciA9IGFyZ3Zbb3B0aW5kXTsNCiAgICAgICAgIGlmIChyWzBdICE9ICctJykgew0K LSAgICAgICAgICAgIGhkX2ZpbGVuYW1lWzBdID0gYXJndltvcHRpbmQrK107DQorCSAgICBoZGFf aW5kZXggPSBkcml2ZV9hZGQoSERfQUxJQVMsIGFyZ3Zbb3B0aW5kKytdLCAwKTsNCiAgICAgICAg IH0gZWxzZSB7DQogICAgICAgICAgICAgY29uc3QgUUVNVU9wdGlvbiAqcG9wdDsNCiANCkBAIC03 NzU5LDI5ICs4MDk0LDMzIEBAIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikNCiAgICAg ICAgICAgICAgICAgaW5pdHJkX2ZpbGVuYW1lID0gb3B0YXJnOw0KICAgICAgICAgICAgICAgICBi cmVhazsNCiAgICAgICAgICAgICBjYXNlIFFFTVVfT1BUSU9OX2hkYToNCisgICAgICAgICAgICAg ICAgaWYgKGN5bHMgPT0gMCkNCisgICAgICAgICAgICAgICAgICAgIGhkYV9pbmRleCA9IGRyaXZl X2FkZChIRF9BTElBUywgb3B0YXJnLCAwKTsNCisgICAgICAgICAgICAgICAgZWxzZQ0KKyAgICAg ICAgICAgICAgICAgICAgaGRhX2luZGV4ID0gZHJpdmVfYWRkKEhEX0FMSUFTDQorCQkJICAgICAi LGN5bHM9JWQsaGVhZHM9JWQsc2Vjcz0lZCVzIiwNCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG9wdGFyZywgMCwgY3lscywgaGVhZHMsIHNlY3MsDQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB0cmFuc2xhdGlvbiA9PSBCSU9TX0FUQV9UUkFOU0xBVElPTl9MQkEgPw0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsdHJhbnM9bGJhIiA6DQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB0cmFuc2xhdGlvbiA9PSBCSU9TX0FUQV9UUkFOU0xBVElPTl9OT05F ID8NCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLHRyYW5zPW5vbmUiIDogIiIp Ow0KKyAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgY2FzZSBRRU1VX09QVElP Tl9oZGI6DQogICAgICAgICAgICAgY2FzZSBRRU1VX09QVElPTl9oZGM6DQogICAgICAgICAgICAg Y2FzZSBRRU1VX09QVElPTl9oZGQ6DQotICAgICAgICAgICAgICAgIHsNCi0gICAgICAgICAgICAg ICAgICAgIGludCBoZF9pbmRleDsNCi0gICAgICAgICAgICAgICAgICAgIGhkX2luZGV4ID0gcG9w dC0+aW5kZXggLSBRRU1VX09QVElPTl9oZGE7DQotICAgICAgICAgICAgICAgICAgICBoZF9maWxl bmFtZVtoZF9pbmRleF0gPSBvcHRhcmc7DQotICAgICAgICAgICAgICAgICAgICBpZiAoaGRfaW5k ZXggPT0gY2Ryb21faW5kZXgpDQotICAgICAgICAgICAgICAgICAgICAgICAgY2Ryb21faW5kZXgg PSAtMTsNCi0gICAgICAgICAgICAgICAgfQ0KKwkJZHJpdmVfYWRkKEhEX0FMSUFTLCBvcHRhcmcs IHBvcHQtPmluZGV4IC0gUUVNVV9PUFRJT05faGRhKTsNCiAgICAgICAgICAgICAgICAgYnJlYWs7 DQorICAgICAgICAgICAgY2FzZSBRRU1VX09QVElPTl9kcml2ZToNCisgICAgICAgICAgICAgICAg ZHJpdmVfYWRkKCIlcyIsIG9wdGFyZyk7DQorCSAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAg Y2FzZSBRRU1VX09QVElPTl9tdGRibG9jazoNCi0gICAgICAgICAgICAgICAgbXRkX2ZpbGVuYW1l ID0gb3B0YXJnOw0KKwkgICAgICAgIGRyaXZlX2FkZChNVERfQUxJQVMsIG9wdGFyZyk7DQogICAg ICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgIGNhc2UgUUVNVV9PUFRJT05fc2Q6DQot ICAgICAgICAgICAgICAgIHNkX2ZpbGVuYW1lID0gb3B0YXJnOw0KKyAgICAgICAgICAgICAgICBk cml2ZV9hZGQoU0RfQUxJQVMsIG9wdGFyZyk7DQogICAgICAgICAgICAgICAgIGJyZWFrOw0KICAg ICAgICAgICAgIGNhc2UgUUVNVV9PUFRJT05fcGZsYXNoOg0KLSAgICAgICAgICAgICAgICBpZiAo cGZsYXNoX2luZGV4ID49IE1BWF9QRkxBU0gpIHsNCi0gICAgICAgICAgICAgICAgICAgIGZwcmlu dGYoc3RkZXJyLCAicWVtdTogdG9vIG1hbnkgcGFyYWxsZWwgZmxhc2ggaW1hZ2VzXG4iKTsNCi0g ICAgICAgICAgICAgICAgICAgIGV4aXQoMSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAg ICAgICAgICAgcGZsYXNoX2ZpbGVuYW1lW3BmbGFzaF9pbmRleCsrXSA9IG9wdGFyZzsNCisJICAg ICAgICBkcml2ZV9hZGQoUEZMQVNIX0FMSUFTLCBvcHRhcmcpOw0KICAgICAgICAgICAgICAgICBi cmVhazsNCiAgICAgICAgICAgICBjYXNlIFFFTVVfT1BUSU9OX3NuYXBzaG90Og0KICAgICAgICAg ICAgICAgICBzbmFwc2hvdCA9IDE7DQpAQCAtNzgyMCw2ICs4MTU5LDE3IEBAIGludCBtYWluKGlu dCBhcmdjLCBjaGFyICoqYXJndikNCiAgICAgICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0 ZGVyciwgInFlbXU6IGludmFsaWQgcGh5c2ljYWwgQ0hTIGZvcm1hdFxuIik7DQogICAgICAgICAg ICAgICAgICAgICAgICAgZXhpdCgxKTsNCiAgICAgICAgICAgICAgICAgICAgIH0NCisJCSAgICBp ZiAoaGRhX2luZGV4ICE9IC0xKQ0KKwkJICAgICAgICBzbnByaW50Zihkcml2ZXNfb3B0W2hkYV9p bmRleF0gKw0KKwkJCSAgICAgICAgIHN0cmxlbihkcml2ZXNfb3B0W2hkYV9pbmRleF0pLA0KKwkJ CSAgICAgICAgIHNpemVvZihkcml2ZXNfb3B0WzBdKSAtDQorCQkJCSBzdHJsZW4oZHJpdmVzX29w dFtoZGFfaW5kZXhdKSwNCisJCSAgICAgICAgICAgICAgICAgIixjeWxzPSVkLGhlYWRzPSVkLHNl Y3M9JWQlcyIsDQorCQkJICAgICAgICAgY3lscywgaGVhZHMsIHNlY3MsDQorCQkJICAgICAgICAg dHJhbnNsYXRpb24gPT0gQklPU19BVEFfVFJBTlNMQVRJT05fTEJBID8NCisJCQkgICAgIAkgICAg Iix0cmFucz1sYmEiIDoNCisJCQkgICAgICAgICB0cmFuc2xhdGlvbiA9PSBCSU9TX0FUQV9UUkFO U0xBVElPTl9OT05FID8NCisJCQkgICAgICAgICAgICAgIix0cmFucz1ub25lIiA6ICIiKTsNCiAg ICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICBj YXNlIFFFTVVfT1BUSU9OX25vZ3JhcGhpYzoNCkBAIC03ODM4LDkgKzgxODgsNyBAQCBpbnQgbWFp bihpbnQgYXJnYywgY2hhciAqKmFyZ3YpDQogICAgICAgICAgICAgICAgIGtlcm5lbF9jbWRsaW5l ID0gb3B0YXJnOw0KICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICBjYXNlIFFF TVVfT1BUSU9OX2Nkcm9tOg0KLSAgICAgICAgICAgICAgICBpZiAoY2Ryb21faW5kZXggPj0gMCkg ew0KLSAgICAgICAgICAgICAgICAgICAgaGRfZmlsZW5hbWVbY2Ryb21faW5kZXhdID0gb3B0YXJn Ow0KLSAgICAgICAgICAgICAgICB9DQorCQlkcml2ZV9hZGQoImZpbGU9XCIlc1wiLCIgQ0RST01f QUxJQVMsIG9wdGFyZyk7DQogICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgIGNh c2UgUUVNVV9PUFRJT05fYm9vdDoNCiAgICAgICAgICAgICAgICAgYm9vdF9kZXZpY2VzID0gb3B0 YXJnOw0KQEAgLTc4NzQsMTAgKzgyMjIsOSBAQCBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqKmFy Z3YpDQogICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAg ICAgICAgY2FzZSBRRU1VX09QVElPTl9mZGE6DQotICAgICAgICAgICAgICAgIGZkX2ZpbGVuYW1l WzBdID0gb3B0YXJnOw0KLSAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICBjYXNl IFFFTVVfT1BUSU9OX2ZkYjoNCi0gICAgICAgICAgICAgICAgZmRfZmlsZW5hbWVbMV0gPSBvcHRh cmc7DQorCQlkcml2ZV9hZGQoImZpbGU9XCIlc1wiLCIgRkRfQUxJQVMsIG9wdGFyZywNCisJCSAg ICAgICAgICBwb3B0LT5pbmRleCAtIFFFTVVfT1BUSU9OX2ZkYSk7DQogICAgICAgICAgICAgICAg IGJyZWFrOw0KICNpZmRlZiBUQVJHRVRfSTM4Ng0KICAgICAgICAgICAgIGNhc2UgUUVNVV9PUFRJ T05fbm9fZmRfYm9vdGNoazoNCkBAIC04MjU4LDE5ICs4NjA1LDExIEBAIGludCBtYWluKGludCBh cmdjLCBjaGFyICoqYXJndikNCiAgICAgDQogICAgIC8qIFhYWDogdGhpcyBzaG91bGQgbm90IGJl OiBzb21lIGVtYmVkZGVkIHRhcmdldHMganVzdCBoYXZlIGZsYXNoICovDQogICAgIGlmICghbGlu dXhfYm9vdCAmJiBuZXRfYm9vdCA9PSAwICYmDQotICAgICAgICBoZF9maWxlbmFtZVswXSA9PSAn XDAnICYmDQotICAgICAgICAoY2Ryb21faW5kZXggPj0gMCAmJiBoZF9maWxlbmFtZVtjZHJvbV9p bmRleF0gPT0gJ1wwJykgJiYNCi0gICAgICAgIGZkX2ZpbGVuYW1lWzBdID09ICdcMCcpDQorICAg ICAgICBuYl9kcml2ZXNfb3B0ID09IDApDQogICAgICAgICBoZWxwKDEpOw0KIA0KLSAgICAvKiBi b290IHRvIGZsb3BweSBvciB0aGUgZGVmYXVsdCBjZCBpZiBubyBoYXJkIGRpc2sgZGVmaW5lZCB5 ZXQgKi8NCiAgICAgaWYgKCFib290X2RldmljZXNbMF0pIHsNCi0gICAgICAgIGlmIChoZF9maWxl bmFtZVswXSAhPSAnXDAnKQ0KLSAgICAgICAgICAgIGJvb3RfZGV2aWNlcyA9ICJjIjsNCi0gICAg ICAgIGVsc2UgaWYgKGZkX2ZpbGVuYW1lWzBdICE9ICdcMCcpDQotICAgICAgICAgICAgYm9vdF9k ZXZpY2VzID0gImEiOw0KLSAgICAgICAgZWxzZQ0KLSAgICAgICAgICAgIGJvb3RfZGV2aWNlcyA9 ICJkIjsNCisgICAgICAgIGJvb3RfZGV2aWNlcyA9ICJjYWQiOw0KICAgICB9DQogICAgIHNldHZi dWYoc3Rkb3V0LCBOVUxMLCBfSU9MQkYsIDApOw0KIA0KQEAgLTgzNDcsOTcgKzg2ODYsMjMgQEAg aW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQ0KICAgICAgICAgZXhpdCgxKTsNCiAgICAg fQ0KIA0KLSAgICAvKiB3ZSBhbHdheXMgY3JlYXRlIHRoZSBjZHJvbSBkcml2ZSwgZXZlbiBpZiBu byBkaXNrIGlzIHRoZXJlICovDQogICAgIGJkcnZfaW5pdCgpOw0KLSAgICBpZiAoY2Ryb21faW5k ZXggPj0gMCkgew0KLSAgICAgICAgYnNfdGFibGVbY2Ryb21faW5kZXhdID0gYmRydl9uZXcoImNk cm9tIik7DQotICAgICAgICBiZHJ2X3NldF90eXBlX2hpbnQoYnNfdGFibGVbY2Ryb21faW5kZXhd LCBCRFJWX1RZUEVfQ0RST00pOw0KLSAgICB9DQogDQotICAgIC8qIG9wZW4gdGhlIHZpcnR1YWwg YmxvY2sgZGV2aWNlcyAqLw0KLSAgICBmb3IoaSA9IDA7IGkgPCBNQVhfRElTS1M7IGkrKykgew0K LSAgICAgICAgaWYgKGhkX2ZpbGVuYW1lW2ldKSB7DQotICAgICAgICAgICAgaWYgKCFic190YWJs ZVtpXSkgew0KLSAgICAgICAgICAgICAgICBjaGFyIGJ1Zls2NF07DQotICAgICAgICAgICAgICAg IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICJoZCVjIiwgaSArICdhJyk7DQotICAgICAgICAg ICAgICAgIGJzX3RhYmxlW2ldID0gYmRydl9uZXcoYnVmKTsNCi0gICAgICAgICAgICB9DQotICAg ICAgICAgICAgaWYgKGJkcnZfb3Blbihic190YWJsZVtpXSwgaGRfZmlsZW5hbWVbaV0sIHNuYXBz aG90ID8gQkRSVl9PX1NOQVBTSE9UIDogMCkgPCAwKSB7DQotICAgICAgICAgICAgICAgIGZwcmlu dGYoc3RkZXJyLCAicWVtdTogY291bGQgbm90IG9wZW4gaGFyZCBkaXNrIGltYWdlICclcydcbiIs DQotICAgICAgICAgICAgICAgICAgICAgICAgaGRfZmlsZW5hbWVbaV0pOw0KLSAgICAgICAgICAg ICAgICBleGl0KDEpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgICAgICBpZiAoaSA9PSAwICYm IGN5bHMgIT0gMCkgew0KLSAgICAgICAgICAgICAgICBiZHJ2X3NldF9nZW9tZXRyeV9oaW50KGJz X3RhYmxlW2ldLCBjeWxzLCBoZWFkcywgc2Vjcyk7DQotICAgICAgICAgICAgICAgIGJkcnZfc2V0 X3RyYW5zbGF0aW9uX2hpbnQoYnNfdGFibGVbaV0sIHRyYW5zbGF0aW9uKTsNCi0gICAgICAgICAg ICB9DQotICAgICAgICB9DQotICAgIH0NCisgICAgLyogd2UgYWx3YXlzIGNyZWF0ZSB0aGUgY2Ry b20gZHJpdmUsIGV2ZW4gaWYgbm8gZGlzayBpcyB0aGVyZSAqLw0KIA0KLSAgICAvKiB3ZSBhbHdh eXMgY3JlYXRlIGF0IGxlYXN0IG9uZSBmbG9wcHkgZGlzayAqLw0KLSAgICBmZF90YWJsZVswXSA9 IGJkcnZfbmV3KCJmZGEiKTsNCi0gICAgYmRydl9zZXRfdHlwZV9oaW50KGZkX3RhYmxlWzBdLCBC RFJWX1RZUEVfRkxPUFBZKTsNCi0NCi0gICAgZm9yKGkgPSAwOyBpIDwgTUFYX0ZEOyBpKyspIHsN Ci0gICAgICAgIGlmIChmZF9maWxlbmFtZVtpXSkgew0KLSAgICAgICAgICAgIGlmICghZmRfdGFi bGVbaV0pIHsNCi0gICAgICAgICAgICAgICAgY2hhciBidWZbNjRdOw0KLSAgICAgICAgICAgICAg ICBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiZmQlYyIsIGkgKyAnYScpOw0KLSAgICAgICAg ICAgICAgICBmZF90YWJsZVtpXSA9IGJkcnZfbmV3KGJ1Zik7DQotICAgICAgICAgICAgICAgIGJk cnZfc2V0X3R5cGVfaGludChmZF90YWJsZVtpXSwgQkRSVl9UWVBFX0ZMT1BQWSk7DQotICAgICAg ICAgICAgfQ0KLSAgICAgICAgICAgIGlmIChmZF9maWxlbmFtZVtpXVswXSAhPSAnXDAnKSB7DQot ICAgICAgICAgICAgICAgIGlmIChiZHJ2X29wZW4oZmRfdGFibGVbaV0sIGZkX2ZpbGVuYW1lW2ld LA0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNuYXBzaG90ID8gQkRSVl9PX1NOQVBT SE9UIDogMCkgPCAwKSB7DQotICAgICAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInFl bXU6IGNvdWxkIG5vdCBvcGVuIGZsb3BweSBkaXNrIGltYWdlICclcydcbiIsDQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZkX2ZpbGVuYW1lW2ldKTsNCi0gICAgICAgICAgICAgICAgICAg IGV4aXQoMSk7DQotICAgICAgICAgICAgICAgIH0NCi0gICAgICAgICAgICB9DQotICAgICAgICB9 DQotICAgIH0NCisgICAgaWYgKG5iX2RyaXZlc19vcHQgPCBNQVhfRFJJVkVTKQ0KKyAgICAgICAg ZHJpdmVfYWRkKENEUk9NX0FMSUFTKTsNCiANCi0gICAgLyogT3BlbiB0aGUgdmlydHVhbCBwYXJh bGxlbCBmbGFzaCBibG9jayBkZXZpY2VzICovDQotICAgIGZvcihpID0gMDsgaSA8IE1BWF9QRkxB U0g7IGkrKykgew0KLSAgICAgICAgaWYgKHBmbGFzaF9maWxlbmFtZVtpXSkgew0KLSAgICAgICAg ICAgIGlmICghcGZsYXNoX3RhYmxlW2ldKSB7DQotICAgICAgICAgICAgICAgIGNoYXIgYnVmWzY0 XTsNCi0gICAgICAgICAgICAgICAgc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgImZsJWMiLCBp ICsgJ2EnKTsNCi0gICAgICAgICAgICAgICAgcGZsYXNoX3RhYmxlW2ldID0gYmRydl9uZXcoYnVm KTsNCi0gICAgICAgICAgICB9DQotICAgICAgICAgICAgaWYgKGJkcnZfb3BlbihwZmxhc2hfdGFi bGVbaV0sIHBmbGFzaF9maWxlbmFtZVtpXSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAgIHNu YXBzaG90ID8gQkRSVl9PX1NOQVBTSE9UIDogMCkgPCAwKSB7DQotICAgICAgICAgICAgICAgIGZw cmludGYoc3RkZXJyLCAicWVtdTogY291bGQgbm90IG9wZW4gZmxhc2ggaW1hZ2UgJyVzJ1xuIiwN Ci0gICAgICAgICAgICAgICAgICAgICAgICBwZmxhc2hfZmlsZW5hbWVbaV0pOw0KLSAgICAgICAg ICAgICAgICBleGl0KDEpOw0KLSAgICAgICAgICAgIH0NCi0gICAgICAgIH0NCi0gICAgfQ0KKyAg ICAvKiB3ZSBhbHdheXMgY3JlYXRlIGF0IGxlYXN0IG9uIGZsb3BweSAqLw0KIA0KLSAgICBzZF9i ZHJ2ID0gYmRydl9uZXcgKCJzZCIpOw0KLSAgICAvKiBGSVhNRTogVGhpcyBpc24ndCByZWFsbHkg YSBmbG9wcHksIGJ1dCBpdCdzIGEgcmVhc29uYWJsZQ0KLSAgICAgICBhcHByb3hpbWF0aW9uLiAg Ki8NCi0gICAgYmRydl9zZXRfdHlwZV9oaW50KHNkX2JkcnYsIEJEUlZfVFlQRV9GTE9QUFkpOw0K LSAgICBpZiAoc2RfZmlsZW5hbWUpIHsNCi0gICAgICAgIGlmIChiZHJ2X29wZW4oc2RfYmRydiwg c2RfZmlsZW5hbWUsDQotICAgICAgICAgICAgICAgICAgICAgIHNuYXBzaG90ID8gQkRSVl9PX1NO QVBTSE9UIDogMCkgPCAwKSB7DQotICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICJxZW11OiBj b3VsZCBub3Qgb3BlbiBTRCBjYXJkIGltYWdlICVzXG4iLA0KLSAgICAgICAgICAgICAgICAgICAg c2RfZmlsZW5hbWUpOw0KLSAgICAgICAgfSBlbHNlDQotICAgICAgICAgICAgcWVtdV9rZXlfY2hl Y2soc2RfYmRydiwgc2RfZmlsZW5hbWUpOw0KLSAgICB9DQorICAgIGlmIChuYl9kcml2ZXNfb3B0 IDwgTUFYX0RSSVZFUykNCisgICAgICAgIGRyaXZlX2FkZChGRF9BTElBUywgMCk7DQogDQotICAg IGlmIChtdGRfZmlsZW5hbWUpIHsNCi0gICAgICAgIG10ZF9iZHJ2ID0gYmRydl9uZXcgKCJtdGQi KTsNCi0gICAgICAgIGlmIChiZHJ2X29wZW4obXRkX2JkcnYsIG10ZF9maWxlbmFtZSwNCi0gICAg ICAgICAgICAgICAgICAgICAgc25hcHNob3QgPyBCRFJWX09fU05BUFNIT1QgOiAwKSA8IDAgfHwN Ci0gICAgICAgICAgICBxZW11X2tleV9jaGVjayhtdGRfYmRydiwgbXRkX2ZpbGVuYW1lKSkgew0K LSAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAicWVtdTogY291bGQgbm90IG9wZW4gRmxhc2gg aW1hZ2UgJXNcbiIsDQotICAgICAgICAgICAgICAgICAgICBtdGRfZmlsZW5hbWUpOw0KLSAgICAg ICAgICAgIGJkcnZfZGVsZXRlKG10ZF9iZHJ2KTsNCi0gICAgICAgICAgICBtdGRfYmRydiA9IDA7 DQotICAgICAgICB9DQotICAgIH0NCisgICAgLyogb3BlbiB0aGUgdmlydHVhbCBibG9jayBkZXZp Y2VzICovDQorDQorICAgIGZvcihpID0gMDsgaSA8IG5iX2RyaXZlc19vcHQ7IGkrKykNCisgICAg ICAgIGlmIChkcml2ZV9pbml0KGRyaXZlc19vcHRbaV0sIHNuYXBzaG90LCBtYWNoaW5lKSA9PSAt MSkNCisJICAgIGV4aXQoMSk7DQogDQogICAgIHJlZ2lzdGVyX3NhdmV2bSgidGltZXIiLCAwLCAy LCB0aW1lcl9zYXZlLCB0aW1lcl9sb2FkLCBOVUxMKTsNCiAgICAgcmVnaXN0ZXJfc2F2ZXZtKCJy YW0iLCAwLCAyLCByYW1fc2F2ZSwgcmFtX2xvYWQsIE5VTEwpOw0KSW5kZXg6IHFlbXUvdmwuaA0K PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PQ0KLS0tIHFlbXUub3JpZy92bC5oCTIwMDctMTEtMTMgMTY6Mjc6NDYuMDAwMDAw MDAwICswMTAwDQorKysgcWVtdS92bC5oCTIwMDctMTEtMTMgMTY6Mjc6NDguMDAwMDAwMDAwICsw MTAwDQpAQCAtNzg1LDEzICs3ODUsMjcgQEAgdm9pZCBpc2FfY2lycnVzX3ZnYV9pbml0KERpc3Bs YXlTdGF0ZSAqZA0KIHZvaWQgcGNpX3Ztc3ZnYV9pbml0KFBDSUJ1cyAqYnVzLCBEaXNwbGF5U3Rh dGUgKmRzLCB1aW50OF90ICp2Z2FfcmFtX2Jhc2UsDQogICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgbG9uZyB2Z2FfcmFtX29mZnNldCwgaW50IHZnYV9yYW1fc2l6ZSk7DQogDQotLyogaWRl LmMgKi8NCi0jZGVmaW5lIE1BWF9ESVNLUyA0DQordHlwZWRlZiBlbnVtIHsNCisgICAgSUZfSURF LCBJRl9TQ1NJLCBJRl9GTE9QUFksIElGX1BGTEFTSCwgSUZfTVRELCBJRl9TRA0KK30gQmxvY2tJ bnRlcmZhY2VUeXBlOw0KKw0KK3R5cGVkZWYgc3RydWN0IERyaXZlSW5mbyB7DQorICAgIEJsb2Nr RHJpdmVyU3RhdGUgKmJkcnY7DQorICAgIEJsb2NrSW50ZXJmYWNlVHlwZSBpbnRlcmZhY2U7DQor ICAgIGludCBidXM7DQorICAgIGludCB1bml0Ow0KK30gRHJpdmVJbmZvOw0KKw0KKyNkZWZpbmUg TUFYX0RSSVZFUyAzMg0KIA0KLWV4dGVybiBCbG9ja0RyaXZlclN0YXRlICpic190YWJsZVtNQVhf RElTS1MgKyAxXTsNCi1leHRlcm4gQmxvY2tEcml2ZXJTdGF0ZSAqc2RfYmRydjsNCi1leHRlcm4g QmxvY2tEcml2ZXJTdGF0ZSAqbXRkX2JkcnY7DQorZXh0ZXJuIGludCBuYl9kcml2ZXM7DQorZXh0 ZXJuIERyaXZlSW5mbyBkcml2ZXNfdGFibGVbTUFYX0RSSVZFUysxXTsNCiANCitleHRlcm4gaW50 IGRyaXZlX2dldF9pbmRleChCbG9ja0ludGVyZmFjZVR5cGUgaW50ZXJmYWNlLCBpbnQgYnVzLCBp bnQgdW5pdCk7DQorZXh0ZXJuIGludCBkcml2ZV9nZXRfbWF4X2J1cyhCbG9ja0ludGVyZmFjZVR5 cGUgaW50ZXJmYWNlKTsNCisNCisvKiBpZGUuYyAqLw0KKyNkZWZpbmUgTUFYX0lERV9ERVZTIDIN CiB2b2lkIGlzYV9pZGVfaW5pdChpbnQgaW9iYXNlLCBpbnQgaW9iYXNlMiwgcWVtdV9pcnEgaXJx LA0KICAgICAgICAgICAgICAgICAgIEJsb2NrRHJpdmVyU3RhdGUgKmhkMCwgQmxvY2tEcml2ZXJT dGF0ZSAqaGQxKTsNCiB2b2lkIHBjaV9jbWQ2NDZfaWRlX2luaXQoUENJQnVzICpidXMsIEJsb2Nr RHJpdmVyU3RhdGUgKipoZF90YWJsZSwNCkBAIC04MzYsNyArODUwLDYgQEAgdm9pZCBETUFfcmVn aXN0ZXJfY2hhbm5lbCAoaW50IG5jaGFuLA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv aWQgKm9wYXF1ZSk7DQogLyogZmRjLmMgKi8NCiAjZGVmaW5lIE1BWF9GRCAyDQotZXh0ZXJuIEJs b2NrRHJpdmVyU3RhdGUgKmZkX3RhYmxlW01BWF9GRF07DQogDQogdHlwZWRlZiBzdHJ1Y3QgZmRj dHJsX3QgZmRjdHJsX3Q7DQogDQpAQCAtMTEwMyw4ICsxMTE2LDExIEBAIHZvaWQgKnNsYXZpb19t aXNjX2luaXQodGFyZ2V0X3BoeXNfYWRkcl8NCiB2b2lkIHNsYXZpb19zZXRfcG93ZXJfZmFpbCh2 b2lkICpvcGFxdWUsIGludCBwb3dlcl9mYWlsaW5nKTsNCiANCiAvKiBlc3AuYyAqLw0KKy8qIFRo ZSBIQkEgaXMgSUQgNywgc28gZm9yIHNpbXBsaWNpdGx5IGxpbWl0IHRvIDcgZGV2aWNlcy4gICov DQorI2RlZmluZSBNQVhfU0NTSV9ERVZTICAgICAgNw0KKyNkZWZpbmUgRVNQX01BWF9ERVZTICAg ICBNQVhfU0NTSV9ERVZTDQogdm9pZCBlc3Bfc2NzaV9hdHRhY2godm9pZCAqb3BhcXVlLCBCbG9j a0RyaXZlclN0YXRlICpiZCwgaW50IGlkKTsNCi12b2lkICplc3BfaW5pdChCbG9ja0RyaXZlclN0 YXRlICoqYmQsIHRhcmdldF9waHlzX2FkZHJfdCBlc3BhZGRyLA0KK3ZvaWQgKmVzcF9pbml0KHRh cmdldF9waHlzX2FkZHJfdCBlc3BhZGRyLA0KICAgICAgICAgICAgICAgIHZvaWQgKmRtYV9vcGFx dWUsIHFlbXVfaXJxIGlycSwgcWVtdV9pcnEgKnJlc2V0KTsNCiANCiAvKiBzcGFyYzMyX2RtYS5j ICovDQpAQCAtMTIzNCw2ICsxMjUwLDcgQEAgdm9pZCBzY3NpX2NhbmNlbF9pbyhTQ1NJRGV2aWNl ICpzLCB1aW50Mw0KIHVpbnQ4X3QgKnNjc2lfZ2V0X2J1ZihTQ1NJRGV2aWNlICpzLCB1aW50MzJf dCB0YWcpOw0KIA0KIC8qIGxzaTUzYzg5NWEuYyAqLw0KKyNkZWZpbmUgTFNJX01BWF9ERVZTICAg ICAgTUFYX1NDU0lfREVWUw0KIHZvaWQgbHNpX3Njc2lfYXR0YWNoKHZvaWQgKm9wYXF1ZSwgQmxv Y2tEcml2ZXJTdGF0ZSAqYmQsIGludCBpZCk7DQogdm9pZCAqbHNpX3Njc2lfaW5pdChQQ0lCdXMg KmJ1cywgaW50IGRldmZuKTsNCiANCkBAIC0xMzc2LDcgKzEzOTMsNiBAQCBpbnQgdGM1ODEyOF9p bml0KHN0cnVjdCBTSDc3NTBTdGF0ZSAqcywgDQogDQogLyogTk9SIGZsYXNoIGRldmljZXMgKi8N CiAjZGVmaW5lIE1BWF9QRkxBU0ggNA0KLWV4dGVybiBCbG9ja0RyaXZlclN0YXRlICpwZmxhc2hf dGFibGVbTUFYX1BGTEFTSF07DQogdHlwZWRlZiBzdHJ1Y3QgcGZsYXNoX3QgcGZsYXNoX3Q7DQog DQogcGZsYXNoX3QgKnBmbGFzaF9yZWdpc3RlciAodGFyZ2V0X3BoeXNfYWRkcl90IGJhc2UsIHJh bV9hZGRyX3Qgb2ZmLA0KSW5kZXg6IHFlbXUvbW9uaXRvci5jDQo9PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gcWVt dS5vcmlnL21vbml0b3IuYwkyMDA3LTExLTEzIDE2OjI3OjQ2LjAwMDAwMDAwMCArMDEwMA0KKysr IHFlbXUvbW9uaXRvci5jCTIwMDctMTEtMTMgMTY6Mjc6NDguMDAwMDAwMDAwICswMTAwDQpAQCAt MjA0LDE2ICsyMDQsMTEgQEAgc3RhdGljIHZvaWQgZG9fY29tbWl0KGNvbnN0IGNoYXIgKmRldmlj ZQ0KICAgICBpbnQgaSwgYWxsX2RldmljZXM7DQogDQogICAgIGFsbF9kZXZpY2VzID0gIXN0cmNt cChkZXZpY2UsICJhbGwiKTsNCi0gICAgZm9yIChpID0gMDsgaSA8IE1BWF9ESVNLUzsgaSsrKSB7 DQotICAgICAgICBpZiAoYnNfdGFibGVbaV0pIHsNCisgICAgZm9yIChpID0gMDsgaSA8IG5iX2Ry aXZlczsgaSsrKSB7DQogICAgICAgICAgICAgaWYgKGFsbF9kZXZpY2VzIHx8DQotICAgICAgICAg ICAgICAgICFzdHJjbXAoYmRydl9nZXRfZGV2aWNlX25hbWUoYnNfdGFibGVbaV0pLCBkZXZpY2Up KQ0KLSAgICAgICAgICAgICAgICBiZHJ2X2NvbW1pdChic190YWJsZVtpXSk7DQotICAgICAgICB9 DQorICAgICAgICAgICAgICAgICFzdHJjbXAoYmRydl9nZXRfZGV2aWNlX25hbWUoZHJpdmVzX3Rh YmxlW2ldLmJkcnYpLCBkZXZpY2UpKQ0KKyAgICAgICAgICAgICAgICBiZHJ2X2NvbW1pdChkcml2 ZXNfdGFibGVbaV0uYmRydik7DQogICAgIH0NCi0gICAgaWYgKG10ZF9iZHJ2KQ0KLSAgICAgICAg aWYgKGFsbF9kZXZpY2VzIHx8ICFzdHJjbXAoYmRydl9nZXRfZGV2aWNlX25hbWUobXRkX2JkcnYp LCBkZXZpY2UpKQ0KLSAgICAgICAgICAgIGJkcnZfY29tbWl0KG10ZF9iZHJ2KTsNCiB9DQogDQog c3RhdGljIHZvaWQgZG9faW5mbyhjb25zdCBjaGFyICppdGVtKQ0KSW5kZXg6IHFlbXUvaHcvbWlw c19waWNhNjEuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHFlbXUub3JpZy9ody9taXBzX3BpY2E2MS5jCTIw MDctMTEtMTMgMTY6Mjc6NDYuMDAwMDAwMDAwICswMTAwDQorKysgcWVtdS9ody9taXBzX3BpY2E2 MS5jCTIwMDctMTEtMTMgMTY6Mjc6NDguMDAwMDAwMDAwICswMTAwDQpAQCAtMzgsNiArMzgsOSBA QA0KIA0KICNkZWZpbmUgVklSVF9UT19QSFlTX0FEREVORCAoLSgoaW50NjRfdCkoaW50MzJfdCkw eDgwMDAwMDAwKSkNCiANCisjZGVmaW5lIE1BWF9JREVfQlVTIDINCisjZGVmaW5lIE1BWF9GRCAy DQorDQogc3RhdGljIGNvbnN0IGludCBpZGVfaW9iYXNlWzJdID0geyAweDFmMCwgMHgxNzAgfTsN CiBzdGF0aWMgY29uc3QgaW50IGlkZV9pb2Jhc2UyWzJdID0geyAweDNmNiwgMHgzNzYgfTsNCiBz dGF0aWMgY29uc3QgaW50IGlkZV9pcnFbMl0gPSB7IDE0LCAxNSB9Ow0KQEAgLTY2LDYgKzY5LDgg QEAgdm9pZCBtaXBzX3BpY2E2MV9pbml0IChpbnQgcmFtX3NpemUsIGludA0KICAgICBpbnQgaTsN CiAgICAgaW50IGF2YWlsYWJsZV9yYW07DQogICAgIHFlbXVfaXJxICppODI1OTsNCisgICAgaW50 IGluZGV4Ow0KKyAgICBCbG9ja0RyaXZlclN0YXRlICpmZFtNQVhfRkRdOw0KIA0KICAgICAvKiBp bml0IENQVXMgKi8NCiAgICAgaWYgKGNwdV9tb2RlbCA9PSBOVUxMKSB7DQpAQCAtMTM1LDkgKzE0 MCwyMCBAQCB2b2lkIG1pcHNfcGljYTYxX2luaXQgKGludCByYW1fc2l6ZSwgaW50DQogICAgIGk4 MDQyX21tX2luaXQoaTgyNTlbNl0sIGk4MjU5WzddLCAweDgwMDA1MDYwLCAwKTsNCiANCiAgICAg LyogSURFIGNvbnRyb2xsZXIgKi8NCi0gICAgZm9yKGkgPSAwOyBpIDwgMjsgaSsrKQ0KKw0KKyAg ICBpZiAoZHJpdmVfZ2V0X21heF9idXMoSUZfSURFKSA+PSBNQVhfSURFX0JVUykgew0KKyAgICAg ICAgZnByaW50ZihzdGRlcnIsICJxZW11OiB0b28gbWFueSBJREUgYnVzXG4iKTsNCisgICAgICAg IGV4aXQoMSk7DQorICAgIH0NCisNCisgICAgZm9yKGkgPSAwOyBpIDwgTUFYX0lERV9CVVM7IGkr Kykgew0KKyAgICAgICAgaW50IGhkMCwgaGQxOw0KKyAgICAgICAgaGQwID0gZHJpdmVfZ2V0X2lu ZGV4KElGX0lERSwgaSwgMCk7DQorICAgICAgICBoZDEgPSBkcml2ZV9nZXRfaW5kZXgoSUZfSURF LCBpLCAxKTsNCiAgICAgICAgIGlzYV9pZGVfaW5pdChpZGVfaW9iYXNlW2ldLCBpZGVfaW9iYXNl MltpXSwgaTgyNTlbaWRlX2lycVtpXV0sDQotICAgICAgICAgICAgICAgICAgICAgYnNfdGFibGVb MiAqIGldLCBic190YWJsZVsyICogaSArIDFdKTsNCisgICAgICAgICAgICAgICAgICAgICBoZDAg PT0gLTEgPyBOVUxMIDogZHJpdmVzX3RhYmxlW2hkMF0uYmRydiwNCisgICAgICAgICAgICAgICAg ICAgICBoZDEgPT0gLTEgPyBOVUxMIDogZHJpdmVzX3RhYmxlW2hkMV0uYmRydik7DQorICAgIH0N CiANCiAgICAgLyogTmV0d29yayBjb250cm9sbGVyICovDQogICAgIC8qIEZJWE1FOiBtaXNzaW5n IE5TIFNPTklDIERQODM5MzIgKi8NCkBAIC0xNDYsNyArMTYyLDE0IEBAIHZvaWQgbWlwc19waWNh NjFfaW5pdCAoaW50IHJhbV9zaXplLCBpbnQNCiAgICAgLyogRklYTUU6IG1pc3NpbmcgTkNSIDUz Qzk0ICovDQogDQogICAgIC8qIElTQSBkZXZpY2VzIChmbG9wcHksIHNlcmlhbCwgcGFyYWxsZWwp ICovDQotICAgIGZkY3RybF9pbml0KGk4MjU5WzFdLCAxLCAxLCAweDgwMDAzMDAwLCBmZF90YWJs ZSk7DQorDQorICAgIGZvciAoaSA9IDA7IGkgPCBNQVhfRkQ7IGkrKykgew0KKyAgICAgICAgaW5k ZXggPSBkcml2ZV9nZXRfaW5kZXgoSUZfRkxPUFBZLCAwLCBpKTsNCisgICAgICAgIGlmIChpbmRl eCA9PSAtMSkNCisgICAgICAgICAgICBjb250aW51ZTsNCisgICAgICAgIGZkW2ldID0gZHJpdmVz X3RhYmxlW2luZGV4XS5iZHJ2Ow0KKyAgICB9DQorICAgIGZkY3RybF9pbml0KGk4MjU5WzFdLCAx LCAxLCAweDgwMDAzMDAwLCBmZCk7DQogICAgIGZvcihpID0gMDsgaSA8IE1BWF9TRVJJQUxfUE9S VFM7IGkrKykgew0KICAgICAgICAgaWYgKHNlcmlhbF9oZHNbaV0pIHsNCiAgICAgICAgICAgICBz ZXJpYWxfbW1faW5pdChzZXJpYWxfYmFzZVtpXSwgMCwgaTgyNTlbc2VyaWFsX2lycVtpXV0sIHNl cmlhbF9oZHNbaV0sIDEpOw0KSW5kZXg6IHFlbXUvaHcvbWlwc19yNGsuYw0KPT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0K LS0tIHFlbXUub3JpZy9ody9taXBzX3I0ay5jCTIwMDctMTEtMTMgMTY6Mjc6NDYuMDAwMDAwMDAw ICswMTAwDQorKysgcWVtdS9ody9taXBzX3I0ay5jCTIwMDctMTEtMTMgMTY6Mjc6NDguMDAwMDAw MDAwICswMTAwDQpAQCAtMTksNiArMTksOCBAQA0KIA0KICNkZWZpbmUgVklSVF9UT19QSFlTX0FE REVORCAoLSgoaW50NjRfdCkoaW50MzJfdCkweDgwMDAwMDAwKSkNCiANCisjZGVmaW5lIE1BWF9J REVfQlVTIDINCisNCiBzdGF0aWMgY29uc3QgaW50IGlkZV9pb2Jhc2VbMl0gPSB7IDB4MWYwLCAw eDE3MCB9Ow0KIHN0YXRpYyBjb25zdCBpbnQgaWRlX2lvYmFzZTJbMl0gPSB7IDB4M2Y2LCAweDM3 NiB9Ow0KIHN0YXRpYyBjb25zdCBpbnQgaWRlX2lycVsyXSA9IHsgMTQsIDE1IH07DQpAQCAtMTQ5 LDYgKzE1MSw4IEBAIHZvaWQgbWlwc19yNGtfaW5pdCAoaW50IHJhbV9zaXplLCBpbnQgdmcNCiAg ICAgUlRDU3RhdGUgKnJ0Y19zdGF0ZTsNCiAgICAgaW50IGk7DQogICAgIHFlbXVfaXJxICppODI1 OTsNCisgICAgaW50IGluZGV4Ow0KKyAgICBCbG9ja0RyaXZlclN0YXRlICpoZFtNQVhfSURFX0JV UyAqIE1BWF9JREVfREVWU107DQogDQogICAgIC8qIGluaXQgQ1BVcyAqLw0KICAgICBpZiAoY3B1 X21vZGVsID09IE5VTEwpIHsNCkBAIC0yMzksOSArMjQzLDIzIEBAIHZvaWQgbWlwc19yNGtfaW5p dCAoaW50IHJhbV9zaXplLCBpbnQgdmcNCiAgICAgICAgIH0NCiAgICAgfQ0KIA0KLSAgICBmb3Io aSA9IDA7IGkgPCAyOyBpKyspDQorICAgIGlmIChkcml2ZV9nZXRfbWF4X2J1cyhJRl9JREUpID49 IE1BWF9JREVfQlVTKSB7DQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInFlbXU6IHRvbyBtYW55 IElERSBidXNcbiIpOw0KKyAgICAgICAgZXhpdCgxKTsNCisgICAgfQ0KKw0KKyAgICBmb3IoaSA9 IDA7IGkgPCBNQVhfSURFX0JVUyAqIE1BWF9JREVfREVWUzsgaSsrKSB7DQorICAgICAgICBpbmRl eCA9IGRyaXZlX2dldF9pbmRleChJRl9JREUsIGkgLyBNQVhfSURFX0RFVlMsIGkgJSBNQVhfSURF X0RFVlMpOw0KKyAgICAgICAgaWYgKGluZGV4ICE9IC0xKQ0KKyAgICAgICAgICAgIGhkW2ldID0g ZHJpdmVzX3RhYmxlW2luZGV4XS5iZHJ2Ow0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIGhk W2ldID0gTlVMTDsNCisgICAgfQ0KKw0KKyAgICBmb3IoaSA9IDA7IGkgPCBNQVhfSURFX0JVUzsg aSsrKQ0KICAgICAgICAgaXNhX2lkZV9pbml0KGlkZV9pb2Jhc2VbaV0sIGlkZV9pb2Jhc2UyW2ld LCBpODI1OVtpZGVfaXJxW2ldXSwNCi0gICAgICAgICAgICAgICAgICAgICBic190YWJsZVsyICog aV0sIGJzX3RhYmxlWzIgKiBpICsgMV0pOw0KKyAgICAgICAgICAgICAgICAgICAgIGhkW01BWF9J REVfREVWUyAqIGldLA0KKwkJICAgICBoZFtNQVhfSURFX0RFVlMgKiBpICsgMV0pOw0KIA0KICAg ICBpODA0Ml9pbml0KGk4MjU5WzFdLCBpODI1OVsxMl0sIDB4NjApOw0KICAgICBkczEyMjV5X2lu aXQoMHg5MDAwLCAibnZyYW0iKTsNCkluZGV4OiBxZW11L2h3L3BjLmMNCj09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0t LSBxZW11Lm9yaWcvaHcvcGMuYwkyMDA3LTExLTEzIDE2OjI3OjQ2LjAwMDAwMDAwMCArMDEwMA0K KysrIHFlbXUvaHcvcGMuYwkyMDA3LTExLTEzIDE2OjI3OjQ4LjAwMDAwMDAwMCArMDEwMA0KQEAg LTMzLDYgKzMzLDggQEANCiAvKiBMZWF2ZSBhIGNodW5rIG9mIG1lbW9yeSBhdCB0aGUgdG9wIG9m IFJBTSBmb3IgdGhlIEJJT1MgQUNQSSB0YWJsZXMuICAqLw0KICNkZWZpbmUgQUNQSV9EQVRBX1NJ WkUgICAgICAgMHgxMDAwMA0KIA0KKyNkZWZpbmUgTUFYX0lERV9CVVMgMg0KKw0KIHN0YXRpYyBm ZGN0cmxfdCAqZmxvcHB5X2NvbnRyb2xsZXI7DQogc3RhdGljIFJUQ1N0YXRlICpydGNfc3RhdGU7 DQogc3RhdGljIFBJVFN0YXRlICpwaXQ7DQpAQCAtMzcyLDggKzM3NCwxMCBAQCBzdGF0aWMgdm9p ZCBnZW5lcmF0ZV9ib290c2VjdCh1aW50MzJfdCBnDQogew0KICAgICB1aW50OF90IGJvb3RzZWN0 WzUxMl0sICpwOw0KICAgICBpbnQgaTsNCisgICAgaW50IGhkYTsNCiANCi0gICAgaWYgKGJzX3Rh YmxlWzBdID09IE5VTEwpIHsNCisgICAgaGRhID0gZHJpdmVfZ2V0X2luZGV4KElGX0lERSwgMCwg MCk7DQorICAgIGlmIChoZGEgPT0gLTEpIHsNCiAJZnByaW50ZihzdGRlcnIsICJBIGRpc2sgaW1h Z2UgbXVzdCBiZSBnaXZlbiBmb3IgJ2hkYScgd2hlbiBib290aW5nICINCiAJCSJhIExpbnV4IGtl cm5lbFxuIik7DQogCWV4aXQoMSk7DQpAQCAtMzgyLDcgKzM4Niw3IEBAIHN0YXRpYyB2b2lkIGdl bmVyYXRlX2Jvb3RzZWN0KHVpbnQzMl90IGcNCiAgICAgbWVtc2V0KGJvb3RzZWN0LCAwLCBzaXpl b2YoYm9vdHNlY3QpKTsNCiANCiAgICAgLyogQ29weSB0aGUgTVNET1MgcGFydGl0aW9uIHRhYmxl IGlmIHBvc3NpYmxlICovDQotICAgIGJkcnZfcmVhZChic190YWJsZVswXSwgMCwgYm9vdHNlY3Qs IDEpOw0KKyAgICBiZHJ2X3JlYWQoZHJpdmVzX3RhYmxlW2hkYV0uYmRydiwgMCwgYm9vdHNlY3Qs IDEpOw0KIA0KICAgICAvKiBNYWtlIHN1cmUgd2UgaGF2ZSBhIHBhcnRpdGlvbiBzaWduYXR1cmUg Ki8NCiAgICAgYm9vdHNlY3RbNTEwXSA9IDB4NTU7DQpAQCAtNDE5LDcgKzQyMyw3IEBAIHN0YXRp YyB2b2lkIGdlbmVyYXRlX2Jvb3RzZWN0KHVpbnQzMl90IGcNCiAgICAgKnArKyA9IHNlZ3NbMV07 CQkvKiBDUyAqLw0KICAgICAqcCsrID0gc2Vnc1sxXSA+PiA4Ow0KIA0KLSAgICBiZHJ2X3NldF9i b290X3NlY3Rvcihic190YWJsZVswXSwgYm9vdHNlY3QsIHNpemVvZihib290c2VjdCkpOw0KKyAg ICBiZHJ2X3NldF9ib290X3NlY3Rvcihkcml2ZXNfdGFibGVbaGRhXS5iZHJ2LCBib290c2VjdCwg c2l6ZW9mKGJvb3RzZWN0KSk7DQogfQ0KIA0KIGludCBsb2FkX2tlcm5lbChjb25zdCBjaGFyICpm aWxlbmFtZSwgdWludDhfdCAqYWRkciwNCkBAIC03MDAsNiArNzA0LDkgQEAgc3RhdGljIHZvaWQg cGNfaW5pdDEoaW50IHJhbV9zaXplLCBpbnQgdg0KICAgICBOSUNJbmZvICpuZDsNCiAgICAgcWVt dV9pcnEgKmNwdV9pcnE7DQogICAgIHFlbXVfaXJxICppODI1OTsNCisgICAgaW50IGluZGV4Ow0K KyAgICBCbG9ja0RyaXZlclN0YXRlICpoZFtNQVhfSURFX0JVUyAqIE1BWF9JREVfREVWU107DQor ICAgIEJsb2NrRHJpdmVyU3RhdGUgKmZkW01BWF9GRF07DQogDQogICAgIGxpbnV4X2Jvb3QgPSAo a2VybmVsX2ZpbGVuYW1lICE9IE5VTEwpOw0KIA0KQEAgLTkxNywxMiArOTI0LDI1IEBAIHN0YXRp YyB2b2lkIHBjX2luaXQxKGludCByYW1fc2l6ZSwgaW50IHYNCiAgICAgICAgIH0NCiAgICAgfQ0K IA0KKyAgICBpZiAoZHJpdmVfZ2V0X21heF9idXMoSUZfSURFKSA+PSBNQVhfSURFX0JVUykgew0K KyAgICAgICAgZnByaW50ZihzdGRlcnIsICJxZW11OiB0b28gbWFueSBJREUgYnVzXG4iKTsNCisg ICAgICAgIGV4aXQoMSk7DQorICAgIH0NCisNCisgICAgZm9yKGkgPSAwOyBpIDwgTUFYX0lERV9C VVMgKiBNQVhfSURFX0RFVlM7IGkrKykgew0KKyAgICAgICAgaW5kZXggPSBkcml2ZV9nZXRfaW5k ZXgoSUZfSURFLCBpIC8gTUFYX0lERV9ERVZTLCBpICUgTUFYX0lERV9ERVZTKTsNCisJaWYgKGlu ZGV4ICE9IC0xKQ0KKwkgICAgaGRbaV0gPSBkcml2ZXNfdGFibGVbaW5kZXhdLmJkcnY7DQorCWVs c2UNCisJICAgIGhkW2ldID0gTlVMTDsNCisgICAgfQ0KKw0KICAgICBpZiAocGNpX2VuYWJsZWQp IHsNCi0gICAgICAgIHBjaV9waWl4M19pZGVfaW5pdChwY2lfYnVzLCBic190YWJsZSwgcGlpeDNf ZGV2Zm4gKyAxLCBpODI1OSk7DQorICAgICAgICBwY2lfcGlpeDNfaWRlX2luaXQocGNpX2J1cywg aGQsIHBpaXgzX2RldmZuICsgMSwgaTgyNTkpOw0KICAgICB9IGVsc2Ugew0KLSAgICAgICAgZm9y KGkgPSAwOyBpIDwgMjsgaSsrKSB7DQorICAgICAgICBmb3IoaSA9IDA7IGkgPCBNQVhfSURFX0JV UzsgaSsrKSB7DQogICAgICAgICAgICAgaXNhX2lkZV9pbml0KGlkZV9pb2Jhc2VbaV0sIGlkZV9p b2Jhc2UyW2ldLCBpODI1OVtpZGVfaXJxW2ldXSwNCi0gICAgICAgICAgICAgICAgICAgICAgICAg YnNfdGFibGVbMiAqIGldLCBic190YWJsZVsyICogaSArIDFdKTsNCisJICAgICAgICAgICAgICAg ICBoZFtNQVhfSURFX0RFVlMgKiBpXSwgaGRbTUFYX0lERV9ERVZTICogaSArIDFdKTsNCiAgICAg ICAgIH0NCiAgICAgfQ0KIA0KQEAgLTkzMiw5ICs5NTIsMTYgQEAgc3RhdGljIHZvaWQgcGNfaW5p dDEoaW50IHJhbV9zaXplLCBpbnQgdg0KICAgICBhdWRpb19pbml0KHBjaV9lbmFibGVkID8gcGNp X2J1cyA6IE5VTEwsIGk4MjU5KTsNCiAjZW5kaWYNCiANCi0gICAgZmxvcHB5X2NvbnRyb2xsZXIg PSBmZGN0cmxfaW5pdChpODI1OVs2XSwgMiwgMCwgMHgzZjAsIGZkX3RhYmxlKTsNCisgICAgZm9y KGkgPSAwOyBpIDwgTUFYX0ZEOyBpKyspIHsNCisgICAgICAgIGluZGV4ID0gZHJpdmVfZ2V0X2lu ZGV4KElGX0ZMT1BQWSwgMCwgaSk7DQorCWlmIChpbmRleCAhPSAtMSkNCisJICAgIGZkW2ldID0g ZHJpdmVzX3RhYmxlW2luZGV4XS5iZHJ2Ow0KKwllbHNlDQorCSAgICBmZFtpXSA9IE5VTEw7DQor ICAgIH0NCisgICAgZmxvcHB5X2NvbnRyb2xsZXIgPSBmZGN0cmxfaW5pdChpODI1OVs2XSwgMiwg MCwgMHgzZjAsIGZkKTsNCiANCi0gICAgY21vc19pbml0KHJhbV9zaXplLCBib290X2RldmljZSwg YnNfdGFibGUpOw0KKyAgICBjbW9zX2luaXQocmFtX3NpemUsIGJvb3RfZGV2aWNlLCBoZCk7DQog DQogICAgIGlmIChwY2lfZW5hYmxlZCAmJiB1c2JfZW5hYmxlZCkgew0KICAgICAgICAgdXNiX3Vo Y2lfcGlpeDNfaW5pdChwY2lfYnVzLCBwaWl4M19kZXZmbiArIDIpOw0KQEAgLTk1NCwyMyArOTgx LDI0IEBAIHN0YXRpYyB2b2lkIHBjX2luaXQxKGludCByYW1fc2l6ZSwgaW50IHYNCiAgICAgaWYg KGk0NDBmeF9zdGF0ZSkgew0KICAgICAgICAgaTQ0MGZ4X2luaXRfbWVtb3J5X21hcHBpbmdzKGk0 NDBmeF9zdGF0ZSk7DQogICAgIH0NCi0jaWYgMA0KLSAgICAvKiA/Pz8gTmVlZCB0byBmaWd1cmUg b3V0IHNvbWUgd2F5IGZvciB0aGUgdXNlciB0bw0KLSAgICAgICBzcGVjaWZ5IFNDU0kgZGV2aWNl cy4gICovDQorDQogICAgIGlmIChwY2lfZW5hYmxlZCkgew0KKwlpbnQgbWF4X2J1czsNCisgICAg ICAgIGludCBidXMsIHVuaXQ7DQogICAgICAgICB2b2lkICpzY3NpOw0KLSAgICAgICAgQmxvY2tE cml2ZXJTdGF0ZSAqYmRydjsNCiANCi0gICAgICAgIHNjc2kgPSBsc2lfc2NzaV9pbml0KHBjaV9i dXMsIC0xKTsNCi0gICAgICAgIGJkcnYgPSBiZHJ2X25ldygic2NzaWRpc2siKTsNCi0gICAgICAg IGJkcnZfb3BlbihiZHJ2LCAic2NzaV9kaXNrLmltZyIsIDApOw0KLSAgICAgICAgbHNpX3Njc2lf YXR0YWNoKHNjc2ksIGJkcnYsIC0xKTsNCi0gICAgICAgIGJkcnYgPSBiZHJ2X25ldygic2NzaWNk Iik7DQotICAgICAgICBiZHJ2X29wZW4oYmRydiwgInNjc2lfY2QuaXNvIiwgMCk7DQotICAgICAg ICBiZHJ2X3NldF90eXBlX2hpbnQoYmRydiwgQkRSVl9UWVBFX0NEUk9NKTsNCi0gICAgICAgIGxz aV9zY3NpX2F0dGFjaChzY3NpLCBiZHJ2LCAtMSk7DQorICAgICAgICBtYXhfYnVzID0gZHJpdmVf Z2V0X21heF9idXMoSUZfU0NTSSk7DQorDQorCWZvciAoYnVzID0gMDsgYnVzIDw9IG1heF9idXM7 IGJ1cysrKSB7DQorICAgICAgICAgICAgc2NzaSA9IGxzaV9zY3NpX2luaXQocGNpX2J1cywgLTEp Ow0KKyAgICAgICAgICAgIGZvciAodW5pdCA9IDA7IHVuaXQgPCBMU0lfTUFYX0RFVlM7IHVuaXQr Kykgew0KKwkgICAgICAgIGluZGV4ID0gZHJpdmVfZ2V0X2luZGV4KElGX1NDU0ksIGJ1cywgdW5p dCk7DQorCQlpZiAoaW5kZXggPT0gLTEpDQorCQkgICAgY29udGludWU7DQorCQlsc2lfc2NzaV9h dHRhY2goc2NzaSwgZHJpdmVzX3RhYmxlW2luZGV4XS5iZHJ2LCB1bml0KTsNCisJICAgIH0NCisg ICAgICAgIH0NCiAgICAgfQ0KLSNlbmRpZg0KIH0NCiANCiBzdGF0aWMgdm9pZCBwY19pbml0X3Bj aShpbnQgcmFtX3NpemUsIGludCB2Z2FfcmFtX3NpemUsDQpJbmRleDogcWVtdS9ody9wcGNfcHJl cC5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09DQotLS0gcWVtdS5vcmlnL2h3L3BwY19wcmVwLmMJMjAwNy0xMS0xMyAx NjoyNzo0Ni4wMDAwMDAwMDAgKzAxMDANCisrKyBxZW11L2h3L3BwY19wcmVwLmMJMjAwNy0xMS0x MyAxNjoyNzo0OC4wMDAwMDAwMDAgKzAxMDANCkBAIC0yOSw2ICsyOSw4IEBADQogLyogU01QIGlz IG5vdCBlbmFibGVkLCBmb3Igbm93ICovDQogI2RlZmluZSBNQVhfQ1BVUyAxDQogDQorI2RlZmlu ZSBNQVhfSURFX0JVUyAyDQorDQogI2RlZmluZSBCSU9TX0ZJTEVOQU1FICJwcGNfcm9tLmJpbiIN CiAjZGVmaW5lIEtFUk5FTF9MT0FEX0FERFIgMHgwMTAwMDAwMA0KICNkZWZpbmUgSU5JVFJEX0xP QURfQUREUiAweDAxODAwMDAwDQpAQCAtNTM5LDYgKzU0MSw5IEBAIHN0YXRpYyB2b2lkIHBwY19w cmVwX2luaXQgKGludCByYW1fc2l6ZSwNCiAgICAgUENJQnVzICpwY2lfYnVzOw0KICAgICBxZW11 X2lycSAqaTgyNTk7DQogICAgIGludCBwcGNfYm9vdF9kZXZpY2U7DQorICAgIGludCBpbmRleDsN CisgICAgQmxvY2tEcml2ZXJTdGF0ZSAqaGRbTUFYX0lERV9CVVMgKiBNQVhfSURFX0RFVlNdOw0K KyAgICBCbG9ja0RyaXZlclN0YXRlICpmZFtNQVhfRkRdOw0KIA0KICAgICBzeXNjdHJsID0gcWVt dV9tYWxsb2N6KHNpemVvZihzeXNjdHJsX3QpKTsNCiAgICAgaWYgKHN5c2N0cmwgPT0gTlVMTCkN CkBAIC02NTgsMTYgKzY2MywzNyBAQCBzdGF0aWMgdm9pZCBwcGNfcHJlcF9pbml0IChpbnQgcmFt X3NpemUsDQogICAgICAgICB9DQogICAgIH0NCiANCi0gICAgZm9yKGkgPSAwOyBpIDwgMjsgaSsr KSB7DQorICAgIGlmIChkcml2ZV9nZXRfbWF4X2J1cyhJRl9JREUpID49IE1BWF9JREVfQlVTKSB7 DQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInFlbXU6IHRvbyBtYW55IElERSBidXNcbiIpOw0K KyAgICAgICAgZXhpdCgxKTsNCisgICAgfQ0KKw0KKyAgICBmb3IoaSA9IDA7IGkgPCBNQVhfSURF X0JVUyAqIE1BWF9JREVfREVWUzsgaSsrKSB7DQorICAgICAgICBpbmRleCA9IGRyaXZlX2dldF9p bmRleChJRl9JREUsIGkgLyBNQVhfSURFX0RFVlMsIGkgJSBNQVhfSURFX0RFVlMpOw0KKyAgICAg ICAgaWYgKGluZGV4ICE9IC0xKQ0KKyAgICAgICAgICAgIGhkW2ldID0gZHJpdmVzX3RhYmxlW2lu ZGV4XS5iZHJ2Ow0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIGhkW2ldID0gTlVMTDsNCisg ICAgfQ0KKw0KKyAgICBmb3IoaSA9IDA7IGkgPCBNQVhfSURFX0JVUzsgaSsrKSB7DQogICAgICAg ICBpc2FfaWRlX2luaXQoaWRlX2lvYmFzZVtpXSwgaWRlX2lvYmFzZTJbaV0sIGk4MjU5W2lkZV9p cnFbaV1dLA0KLSAgICAgICAgICAgICAgICAgICAgIGJzX3RhYmxlWzIgKiBpXSwgYnNfdGFibGVb MiAqIGkgKyAxXSk7DQorICAgICAgICAgICAgICAgICAgICAgaGRbMiAqIGldLA0KKwkJICAgICBo ZFsyICogaSArIDFdKTsNCiAgICAgfQ0KICAgICBpODA0Ml9pbml0KGk4MjU5WzFdLCBpODI1OVsx Ml0sIDB4NjApOw0KICAgICBETUFfaW5pdCgxKTsNCiAgICAgLy8gICAgQVVEX2luaXQoKTsNCiAg ICAgLy8gICAgU0IxNl9pbml0KCk7DQogDQotICAgIGZkY3RybF9pbml0KGk4MjU5WzZdLCAyLCAw LCAweDNmMCwgZmRfdGFibGUpOw0KKyAgICBmb3IoaSA9IDA7IGkgPCBNQVhfRkQ7IGkrKykgew0K KyAgICAgICAgaW5kZXggPSBkcml2ZV9nZXRfaW5kZXgoSUZfRkxPUFBZLCAwLCBpKTsNCisgICAg ICAgIGlmIChpbmRleCAhPSAtMSkNCisgICAgICAgICAgICBmZFtpXSA9IGRyaXZlc190YWJsZVtp bmRleF0uYmRydjsNCisgICAgICAgIGVsc2UNCisgICAgICAgICAgICBmZFtpXSA9IE5VTEw7DQor ICAgIH0NCisgICAgZmRjdHJsX2luaXQoaTgyNTlbNl0sIDIsIDAsIDB4M2YwLCBmZCk7DQogDQog ICAgIC8qIFJlZ2lzdGVyIHNwZWFrZXIgcG9ydCAqLw0KICAgICByZWdpc3Rlcl9pb3BvcnRfcmVh ZCgweDYxLCAxLCAxLCBzcGVha2VyX2lvcG9ydF9yZWFkLCBOVUxMKTsNCkluZGV4OiBxZW11L2h3 L2VzcC5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09DQotLS0gcWVtdS5vcmlnL2h3L2VzcC5jCTIwMDctMTEtMTMgMTY6 Mjc6NDYuMDAwMDAwMDAwICswMTAwDQorKysgcWVtdS9ody9lc3AuYwkyMDA3LTExLTEzIDE2OjI3 OjQ4LjAwMDAwMDAwMCArMDEwMA0KQEAgLTQ1LDE0ICs0NSwxMSBAQCBkbyB7IHByaW50ZigiRVNQ OiAiIGZtdCAsICMjYXJncyk7IH0gd2hpDQogI2RlZmluZSBFU1BfUkVHUyAxNg0KICNkZWZpbmUg RVNQX1NJWkUgKEVTUF9SRUdTICogNCkNCiAjZGVmaW5lIFRJX0JVRlNaIDMyDQotLyogVGhlIEhC QSBpcyBJRCA3LCBzbyBmb3Igc2ltcGxpY2l0bHkgbGltaXQgdG8gNyBkZXZpY2VzLiAgKi8NCi0j ZGVmaW5lIEVTUF9NQVhfREVWUyAgICAgIDcNCiANCiB0eXBlZGVmIHN0cnVjdCBFU1BTdGF0ZSBF U1BTdGF0ZTsNCiANCiBzdHJ1Y3QgRVNQU3RhdGUgew0KICAgICBxZW11X2lycSBpcnE7DQotICAg IEJsb2NrRHJpdmVyU3RhdGUgKipiZDsNCiAgICAgdWludDhfdCBycmVnc1tFU1BfUkVHU107DQog ICAgIHVpbnQ4X3Qgd3JlZ3NbRVNQX1JFR1NdOw0KICAgICBpbnQzMl90IHRpX3NpemU7DQpAQCAt NjAsNyArNTcsNyBAQCBzdHJ1Y3QgRVNQU3RhdGUgew0KICAgICB1aW50OF90IHRpX2J1ZltUSV9C VUZTWl07DQogICAgIGludCBzZW5zZTsNCiAgICAgaW50IGRtYTsNCi0gICAgU0NTSURldmljZSAq c2NzaV9kZXZbTUFYX0RJU0tTXTsNCisgICAgU0NTSURldmljZSAqc2NzaV9kZXZbRVNQX01BWF9E RVZTXTsNCiAgICAgU0NTSURldmljZSAqY3VycmVudF9kZXY7DQogICAgIHVpbnQ4X3QgY21kYnVm W1RJX0JVRlNaXTsNCiAgICAgaW50IGNtZGxlbjsNCkBAIC0xMjIsNyArMTE5LDcgQEAgc3RhdGlj IGludCBnZXRfY21kKEVTUFN0YXRlICpzLCB1aW50OF90IA0KICAgICAgICAgcy0+YXN5bmNfbGVu ID0gMDsNCiAgICAgfQ0KIA0KLSAgICBpZiAodGFyZ2V0ID49IE1BWF9ESVNLUyB8fCAhcy0+c2Nz aV9kZXZbdGFyZ2V0XSkgew0KKyAgICBpZiAodGFyZ2V0ID49IEVTUF9NQVhfREVWUyB8fCAhcy0+ c2NzaV9kZXZbdGFyZ2V0XSkgew0KICAgICAgICAgLy8gTm8gc3VjaCBkcml2ZQ0KICAgICAgICAg cy0+cnJlZ3NbNF0gPSBTVEFUX0lOOw0KICAgICAgICAgcy0+cnJlZ3NbNV0gPSBJTlRSX0RDOw0K QEAgLTU3NCw3ICs1NzEsNyBAQCB2b2lkIGVzcF9zY3NpX2F0dGFjaCh2b2lkICpvcGFxdWUsIEJs b2NrDQogICAgIHMtPnNjc2lfZGV2W2lkXSA9IHNjc2lfZGlza19pbml0KGJkLCAwLCBlc3BfY29t bWFuZF9jb21wbGV0ZSwgcyk7DQogfQ0KIA0KLXZvaWQgKmVzcF9pbml0KEJsb2NrRHJpdmVyU3Rh dGUgKipiZCwgdGFyZ2V0X3BoeXNfYWRkcl90IGVzcGFkZHIsDQordm9pZCAqZXNwX2luaXQodGFy Z2V0X3BoeXNfYWRkcl90IGVzcGFkZHIsDQogICAgICAgICAgICAgICAgdm9pZCAqZG1hX29wYXF1 ZSwgcWVtdV9pcnEgaXJxLCBxZW11X2lycSAqcmVzZXQpDQogew0KICAgICBFU1BTdGF0ZSAqczsN CkBAIC01ODQsNyArNTgxLDYgQEAgdm9pZCAqZXNwX2luaXQoQmxvY2tEcml2ZXJTdGF0ZSAqKmJk LCB0YQ0KICAgICBpZiAoIXMpDQogICAgICAgICByZXR1cm4gTlVMTDsNCiANCi0gICAgcy0+YmQg PSBiZDsNCiAgICAgcy0+aXJxID0gaXJxOw0KICAgICBzLT5kbWFfb3BhcXVlID0gZG1hX29wYXF1 ZTsNCiANCkluZGV4OiBxZW11L2h3L3JlYWx2aWV3LmMNCj09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBxZW11Lm9y aWcvaHcvcmVhbHZpZXcuYwkyMDA3LTExLTEzIDE2OjI3OjQ2LjAwMDAwMDAwMCArMDEwMA0KKysr IHFlbXUvaHcvcmVhbHZpZXcuYwkyMDA3LTExLTEzIDE2OjI3OjQ4LjAwMDAwMDAwMCArMDEwMA0K QEAgLTI2LDYgKzI2LDcgQEAgc3RhdGljIHZvaWQgcmVhbHZpZXdfaW5pdChpbnQgcmFtX3NpemUs IA0KICAgICBpbnQgZG9uZV9zbWMgPSAwOw0KICAgICBxZW11X2lycSBjcHVfaXJxWzRdOw0KICAg ICBpbnQgbmNwdTsNCisgICAgaW50IGluZGV4Ow0KIA0KICAgICBpZiAoIWNwdV9tb2RlbCkNCiAg ICAgICAgIGNwdV9tb2RlbCA9ICJhcm05MjYiOw0KQEAgLTgzLDcgKzg0LDEyIEBAIHN0YXRpYyB2 b2lkIHJlYWx2aWV3X2luaXQoaW50IHJhbV9zaXplLCANCiANCiAgICAgcGwxMTBfaW5pdChkcywg MHgxMDAyMDAwMCwgcGljWzIzXSwgMSk7DQogDQotICAgIHBsMTgxX2luaXQoMHgxMDAwNTAwMCwg c2RfYmRydiwgcGljWzE3XSwgcGljWzE4XSk7DQorICAgIGluZGV4ID0gZHJpdmVfZ2V0X2luZGV4 KElGX1NELCAwLCAwKTsNCisgICAgaWYgKGluZGV4ID09IC0xKSB7DQorICAgICAgICBmcHJpbnRm KHN0ZGVyciwgInFlbXU6IG1pc3NpbmcgU2VjdXJlRGlnaXRhbCBjYXJkXG4iKTsNCisgICAgICAg IGV4aXQoMSk7DQorICAgIH0NCisgICAgcGwxODFfaW5pdCgweDEwMDA1MDAwLCBkcml2ZXNfdGFi bGVbaW5kZXhdLmJkcnYsIHBpY1sxN10sIHBpY1sxOF0pOw0KIA0KICAgICBwbDAzMV9pbml0KDB4 MTAwMTcwMDAsIHBpY1sxMF0pOw0KIA0KQEAgLTkxLDExICs5NywxNiBAQCBzdGF0aWMgdm9pZCBy ZWFsdmlld19pbml0KGludCByYW1fc2l6ZSwgDQogICAgIGlmICh1c2JfZW5hYmxlZCkgew0KICAg ICAgICAgdXNiX29oY2lfaW5pdF9wY2kocGNpX2J1cywgMywgLTEpOw0KICAgICB9DQorICAgIGlm IChkcml2ZV9nZXRfbWF4X2J1cyhJRl9TQ1NJKSA+IDApIHsNCisgICAgICAgIGZwcmludGYoc3Rk ZXJyLCAicWVtdTogdG9vIG1hbnkgU0NTSSBidXNcbiIpOw0KKyAgICAgICAgZXhpdCgxKTsNCisg ICAgfQ0KICAgICBzY3NpX2hiYSA9IGxzaV9zY3NpX2luaXQocGNpX2J1cywgLTEpOw0KLSAgICBm b3IgKG4gPSAwOyBuIDwgTUFYX0RJU0tTOyBuKyspIHsNCi0gICAgICAgIGlmIChic190YWJsZVtu XSkgew0KLSAgICAgICAgICAgIGxzaV9zY3NpX2F0dGFjaChzY3NpX2hiYSwgYnNfdGFibGVbbl0s IG4pOw0KLSAgICAgICAgfQ0KKyAgICBmb3IgKG4gPSAwOyBuIDwgTFNJX01BWF9ERVZTOyBuKysp IHsNCisgICAgICAgIGluZGV4ID0gZHJpdmVfZ2V0X2luZGV4KElGX1NDU0ksIDAsIG4pOw0KKyAg ICAgICAgaWYgKGluZGV4ID09IC0xKQ0KKyAgICAgICAgICAgIGNvbnRpbnVlOw0KKyAgICAgICAg bHNpX3Njc2lfYXR0YWNoKHNjc2lfaGJhLCBkcml2ZXNfdGFibGVbaW5kZXhdLmJkcnYsIG4pOw0K ICAgICB9DQogICAgIGZvcihuID0gMDsgbiA8IG5iX25pY3M7IG4rKykgew0KICAgICAgICAgbmQg PSAmbmRfdGFibGVbbl07DQpJbmRleDogcWVtdS9ody9zdW40bS5jDQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g cWVtdS5vcmlnL2h3L3N1bjRtLmMJMjAwNy0xMS0xMyAxNjoyNzo0Ni4wMDAwMDAwMDAgKzAxMDAN CisrKyBxZW11L2h3L3N1bjRtLmMJMjAwNy0xMS0xMyAxNjoyNzo0OC4wMDAwMDAwMDAgKzAxMDAN CkBAIC0zMTYsNiArMzE2LDggQEAgc3RhdGljIHZvaWQgKnN1bjRtX2h3X2luaXQoY29uc3Qgc3Ry dWN0IA0KICAgICBxZW11X2lycSAqY3B1X2lycXNbTUFYX0NQVVNdLCAqc2xhdmlvX2lycSwgKnNs YXZpb19jcHVfaXJxLA0KICAgICAgICAgKmVzcGRtYV9pcnEsICpsZWRtYV9pcnE7DQogICAgIHFl bXVfaXJxICplc3BfcmVzZXQsICpsZV9yZXNldDsNCisgICAgQmxvY2tEcml2ZXJTdGF0ZSAqZmRb TUFYX0ZEXTsNCisgICAgaW50IGluZGV4Ow0KIA0KICAgICAvKiBpbml0IENQVXMgKi8NCiANCkBA IC0zODgsMTYgKzM5MCwyOSBAQCBzdGF0aWMgdm9pZCAqc3VuNG1faHdfaW5pdChjb25zdCBzdHJ1 Y3QgDQogICAgIHNsYXZpb19zZXJpYWxfaW5pdChod2RlZi0+c2VyaWFsX2Jhc2UsIHNsYXZpb19p cnFbaHdkZWYtPnNlcl9pcnFdLA0KICAgICAgICAgICAgICAgICAgICAgICAgc2VyaWFsX2hkc1sx XSwgc2VyaWFsX2hkc1swXSk7DQogDQotICAgIGlmIChod2RlZi0+ZmRfYmFzZSAhPSAodGFyZ2V0 X3BoeXNfYWRkcl90KS0xKQ0KLSAgICAgICAgc3VuNG1fZmRjdHJsX2luaXQoc2xhdmlvX2lycVto d2RlZi0+ZmRfaXJxXSwgaHdkZWYtPmZkX2Jhc2UsIGZkX3RhYmxlKTsNCisgICAgaWYgKGh3ZGVm LT5mZF9iYXNlICE9ICh0YXJnZXRfcGh5c19hZGRyX3QpLTEpIHsNCisgICAgICAgIC8qIHRoZXJl IGlzIHplcm8gb3Igb25lIGZsb3BweSBkcml2ZSAqLw0KKyAgICAgICAgZmRbMV0gPSBmZFswXSA9 IE5VTEw7DQorICAgICAgICBpbmRleCA9IGRyaXZlX2dldF9pbmRleChJRl9GTE9QUFksIDAsIDAp Ow0KKyAgICAgICAgaWYgKGluZGV4ICE9IC0xKQ0KKyAgICAgICAgICAgIGZkWzBdID0gZHJpdmVz X3RhYmxlW2luZGV4XS5iZHJ2Ow0KIA0KLSAgICBtYWluX2VzcCA9IGVzcF9pbml0KGJzX3RhYmxl LCBod2RlZi0+ZXNwX2Jhc2UsIGVzcGRtYSwgKmVzcGRtYV9pcnEsDQorICAgICAgICBzdW40bV9m ZGN0cmxfaW5pdChzbGF2aW9faXJxW2h3ZGVmLT5mZF9pcnFdLCBod2RlZi0+ZmRfYmFzZSwgZmQp Ow0KKyAgICB9DQorDQorICAgIGlmIChkcml2ZV9nZXRfbWF4X2J1cyhJRl9TQ1NJKSA+IDApIHsN CisgICAgICAgIGZwcmludGYoc3RkZXJyLCAicWVtdTogdG9vIG1hbnkgU0NTSSBidXNcbiIpOw0K KyAgICAgICAgZXhpdCgxKTsNCisgICAgfQ0KKw0KKyAgICBtYWluX2VzcCA9IGVzcF9pbml0KGh3 ZGVmLT5lc3BfYmFzZSwgZXNwZG1hLCAqZXNwZG1hX2lycSwNCiAgICAgICAgICAgICAgICAgICAg ICAgICBlc3BfcmVzZXQpOw0KIA0KLSAgICBmb3IgKGkgPSAwOyBpIDwgTUFYX0RJU0tTOyBpKysp IHsNCi0gICAgICAgIGlmIChic190YWJsZVtpXSkgew0KLSAgICAgICAgICAgIGVzcF9zY3NpX2F0 dGFjaChtYWluX2VzcCwgYnNfdGFibGVbaV0sIGkpOw0KLSAgICAgICAgfQ0KKyAgICBmb3IgKGkg PSAwOyBpIDwgRVNQX01BWF9ERVZTOyBpKyspIHsNCisgICAgICAgIGluZGV4ID0gZHJpdmVfZ2V0 X2luZGV4KElGX1NDU0ksIDAsIGkpOw0KKyAgICAgICAgaWYgKGluZGV4ID09IC0xKQ0KKyAgICAg ICAgICAgIGNvbnRpbnVlOw0KKyAgICAgICAgZXNwX3Njc2lfYXR0YWNoKG1haW5fZXNwLCBkcml2 ZXNfdGFibGVbaW5kZXhdLmJkcnYsIGkpOw0KICAgICB9DQogDQogICAgIHNsYXZpb19taXNjID0g c2xhdmlvX21pc2NfaW5pdChod2RlZi0+c2xhdmlvX2Jhc2UsIGh3ZGVmLT5wb3dlcl9iYXNlLA0K SW5kZXg6IHFlbXUvaHcvdmVyc2F0aWxlcGIuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHFlbXUub3JpZy9o dy92ZXJzYXRpbGVwYi5jCTIwMDctMTEtMTMgMTY6Mjc6NDYuMDAwMDAwMDAwICswMTAwDQorKysg cWVtdS9ody92ZXJzYXRpbGVwYi5jCTIwMDctMTEtMTMgMTY6Mjc6NDguMDAwMDAwMDAwICswMTAw DQpAQCAtMTY1LDYgKzE2NSw3IEBAIHN0YXRpYyB2b2lkIHZlcnNhdGlsZV9pbml0KGludCByYW1f c2l6ZSwNCiAgICAgTklDSW5mbyAqbmQ7DQogICAgIGludCBuOw0KICAgICBpbnQgZG9uZV9zbWMg PSAwOw0KKyAgICBpbnQgaW5kZXg7DQogDQogICAgIGlmICghY3B1X21vZGVsKQ0KICAgICAgICAg Y3B1X21vZGVsID0gImFybTkyNiI7DQpAQCAtMjAwLDExICsyMDEsMTYgQEAgc3RhdGljIHZvaWQg dmVyc2F0aWxlX2luaXQoaW50IHJhbV9zaXplLA0KICAgICBpZiAodXNiX2VuYWJsZWQpIHsNCiAg ICAgICAgIHVzYl9vaGNpX2luaXRfcGNpKHBjaV9idXMsIDMsIC0xKTsNCiAgICAgfQ0KKyAgICBp ZiAoZHJpdmVfZ2V0X21heF9idXMoSUZfU0NTSSkgPiAwKSB7DQorICAgICAgICBmcHJpbnRmKHN0 ZGVyciwgInFlbXU6IHRvbyBtYW55IFNDU0kgYnVzXG4iKTsNCisgICAgICAgIGV4aXQoMSk7DQor ICAgIH0NCiAgICAgc2NzaV9oYmEgPSBsc2lfc2NzaV9pbml0KHBjaV9idXMsIC0xKTsNCi0gICAg Zm9yIChuID0gMDsgbiA8IE1BWF9ESVNLUzsgbisrKSB7DQotICAgICAgICBpZiAoYnNfdGFibGVb bl0pIHsNCi0gICAgICAgICAgICBsc2lfc2NzaV9hdHRhY2goc2NzaV9oYmEsIGJzX3RhYmxlW25d LCBuKTsNCi0gICAgICAgIH0NCisgICAgZm9yIChuID0gMDsgbiA8IExTSV9NQVhfREVWUzsgbisr KSB7DQorICAgICAgICBpbmRleCA9IGRyaXZlX2dldF9pbmRleChJRl9TQ1NJLCAwLCBuKTsNCisg ICAgICAgIGlmIChpbmRleCA9PSAtMSkNCisgICAgICAgICAgICBjb250aW51ZTsNCisgICAgICAg IGxzaV9zY3NpX2F0dGFjaChzY3NpX2hiYSwgZHJpdmVzX3RhYmxlW2luZGV4XS5iZHJ2LCBuKTsN CiAgICAgfQ0KIA0KICAgICBwbDAxMV9pbml0KDB4MTAxZjEwMDAsIHBpY1sxMl0sIHNlcmlhbF9o ZHNbMF0sIFBMMDExX0FSTSk7DQpAQCAtMjIwLDcgKzIyNiwxMyBAQCBzdGF0aWMgdm9pZCB2ZXJz YXRpbGVfaW5pdChpbnQgcmFtX3NpemUsDQogICAgICAgIHRoYXQgaW5jbHVkZXMgaGFyZHdhcmUg Y3Vyc29yIHN1cHBvcnQgZnJvbSB0aGUgUEwxMTEuICAqLw0KICAgICBwbDExMF9pbml0KGRzLCAw eDEwMTIwMDAwLCBwaWNbMTZdLCAxKTsNCiANCi0gICAgcGwxODFfaW5pdCgweDEwMDA1MDAwLCBz ZF9iZHJ2LCBzaWNbMjJdLCBzaWNbMV0pOw0KKyAgICBpbmRleCA9IGRyaXZlX2dldF9pbmRleChJ Rl9TRCwgMCwgMCk7DQorICAgIGlmIChpbmRleCA9PSAtMSkgew0KKyAgICAgICAgZnByaW50Zihz dGRlcnIsICJxZW11OiBtaXNzaW5nIFNlY3VyZURpZ2l0YWwgY2FyZFxuIik7DQorICAgICAgICBl eGl0KDEpOw0KKyAgICB9DQorDQorICAgIHBsMTgxX2luaXQoMHgxMDAwNTAwMCwgZHJpdmVzX3Rh YmxlW2luZGV4XS5iZHJ2LCBzaWNbMjJdLCBzaWNbMV0pOw0KICNpZiAwDQogICAgIC8qIERpc2Fi bGVkIGJlY2F1c2UgdGhlcmUncyBubyB3YXkgb2Ygc3BlY2lmeWluZyBhIGJsb2NrIGRldmljZS4g ICovDQogICAgIHBsMTgxX2luaXQoMHgxMDAwYjAwMCwgTlVMTCwgc2ljLCAyMywgMik7DQpJbmRl eDogcWVtdS9ody9pbnRlZ3JhdG9yY3AuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHFlbXUub3JpZy9ody9p bnRlZ3JhdG9yY3AuYwkyMDA3LTExLTEzIDE2OjI3OjQ2LjAwMDAwMDAwMCArMDEwMA0KKysrIHFl bXUvaHcvaW50ZWdyYXRvcmNwLmMJMjAwNy0xMS0xMyAxNjoyNzo0OC4wMDAwMDAwMDAgKzAxMDAN CkBAIC00NzMsNiArNDczLDcgQEAgc3RhdGljIHZvaWQgaW50ZWdyYXRvcmNwX2luaXQoaW50IHJh bV9zaQ0KICAgICB1aW50MzJfdCBiaW9zX29mZnNldDsNCiAgICAgcWVtdV9pcnEgKnBpYzsNCiAg ICAgcWVtdV9pcnEgKmNwdV9waWM7DQorICAgIGludCBzZDsNCiANCiAgICAgaWYgKCFjcHVfbW9k ZWwpDQogICAgICAgICBjcHVfbW9kZWwgPSAiYXJtOTI2IjsNCkBAIC01MDEsNyArNTAyLDEyIEBA IHN0YXRpYyB2b2lkIGludGVncmF0b3JjcF9pbml0KGludCByYW1fc2kNCiAgICAgaWNwX2NvbnRy b2xfaW5pdCgweGNiMDAwMDAwKTsNCiAgICAgcGwwNTBfaW5pdCgweDE4MDAwMDAwLCBwaWNbM10s IDApOw0KICAgICBwbDA1MF9pbml0KDB4MTkwMDAwMDAsIHBpY1s0XSwgMSk7DQotICAgIHBsMTgx X2luaXQoMHgxYzAwMDAwMCwgc2RfYmRydiwgcGljWzIzXSwgcGljWzI0XSk7DQorICAgIHNkID0g ZHJpdmVfZ2V0X2luZGV4KElGX1NELCAwLCAwKTsNCisgICAgaWYgKHNkID09IC0xKSB7DQorICAg ICAgICBmcHJpbnRmKHN0ZGVyciwgInFlbXU6IG1pc3NpbmcgU2VjdXJlRGlnaXRhbCBjYXJkXG4i KTsNCisgICAgICAgIGV4aXQoMSk7DQorICAgIH0NCisgICAgcGwxODFfaW5pdCgweDFjMDAwMDAw LCBkcml2ZXNfdGFibGVbc2RdLmJkcnYsIHBpY1syM10sIHBpY1syNF0pOw0KICAgICBpZiAobmRf dGFibGVbMF0udmxhbikgew0KICAgICAgICAgaWYgKG5kX3RhYmxlWzBdLm1vZGVsID09IE5VTEwN CiAgICAgICAgICAgICB8fCBzdHJjbXAobmRfdGFibGVbMF0ubW9kZWwsICJzbWM5MWMxMTEiKSA9 PSAwKSB7DQpJbmRleDogcWVtdS9ody9sc2k1M2M4OTVhLmMNCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0NCi0tLSBxZW11 Lm9yaWcvaHcvbHNpNTNjODk1YS5jCTIwMDctMTEtMTMgMTY6Mjc6NDYuMDAwMDAwMDAwICswMTAw DQorKysgcWVtdS9ody9sc2k1M2M4OTVhLmMJMjAwNy0xMS0xMyAxNjoyNzo0OC4wMDAwMDAwMDAg KzAxMDANCkBAIC0xNDksOSArMTQ5LDYgQEAgZG8geyBmcHJpbnRmKHN0ZGVyciwgImxzaV9zY3Np OiBlcnJvcjogIg0KICNkZWZpbmUgUEhBU0VfTUkgICAgICAgICAgNw0KICNkZWZpbmUgUEhBU0Vf TUFTSyAgICAgICAgNw0KIA0KLS8qIFRoZSBIQkEgaXMgSUQgNywgc28gZm9yIHNpbXBsaWNpdGx5 IGxpbWl0IHRvIDcgZGV2aWNlcy4gICovDQotI2RlZmluZSBMU0lfTUFYX0RFVlMgICAgICA3DQot DQogLyogTWF4aW11bSBsZW5ndGggb2YgTVNHIElOIGRhdGEuICAqLw0KICNkZWZpbmUgTFNJX01B WF9NU0dJTl9MRU4gOA0KIA0KSW5kZXg6IHFlbXUvaHcvbmFuZC5jDQo9PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0g cWVtdS5vcmlnL2h3L25hbmQuYwkyMDA3LTExLTEzIDE2OjI3OjQ2LjAwMDAwMDAwMCArMDEwMA0K KysrIHFlbXUvaHcvbmFuZC5jCTIwMDctMTEtMTMgMTY6Mjc6NDguMDAwMDAwMDAwICswMTAwDQpA QCAtNDQwLDE0ICs0NDAsMjAgQEAgc3RydWN0IG5hbmRfZmxhc2hfcyAqbmFuZF9pbml0KGludCBt YW5mXw0KIHsNCiAgICAgaW50IHBhZ2VzaXplOw0KICAgICBzdHJ1Y3QgbmFuZF9mbGFzaF9zICpz Ow0KKyAgICBpbnQgaW5kZXg7DQogDQogICAgIGlmIChuYW5kX2ZsYXNoX2lkc1tjaGlwX2lkXS5z aXplID09IDApIHsNCiAgICAgICAgIGNwdV9hYm9ydChjcHVfc2luZ2xlX2VudiwgIiVzOiBVbnN1 cHBvcnRlZCBOQU5EIGNoaXAgSUQuXG4iLA0KICAgICAgICAgICAgICAgICAgICAgICAgIF9fRlVO Q1RJT05fXyk7DQogICAgIH0NCisgICAgaW5kZXggPSBkcml2ZV9nZXRfaW5kZXgoSUZfTVRELCAw LCAwKTsNCisgICAgaWYgKGluZGV4ID09IC0xKSB7DQorICAgICAgICBjcHVfYWJvcnQoY3B1X3Np bmdsZV9lbnYsICIlczogbWlzc2luZyBNVEQgZGV2aWNlXG4iLA0KKyAgICAgICAgICAgICAgICAg ICAgICAgIF9fRlVOQ1RJT05fXyk7DQorICAgIH0NCiANCiAgICAgcyA9IChzdHJ1Y3QgbmFuZF9m bGFzaF9zICopIHFlbXVfbWFsbG9jeihzaXplb2Yoc3RydWN0IG5hbmRfZmxhc2hfcykpOw0KLSAg ICBzLT5iZHJ2ID0gbXRkX2JkcnY7DQorICAgIHMtPmJkcnYgPSBkcml2ZXNfdGFibGVbaW5kZXhd LmJkcnY7DQogICAgIHMtPm1hbmZfaWQgPSBtYW5mX2lkOw0KICAgICBzLT5jaGlwX2lkID0gY2hp cF9pZDsNCiAgICAgcy0+c2l6ZSA9IG5hbmRfZmxhc2hfaWRzW3MtPmNoaXBfaWRdLnNpemUgPDwg MjA7DQpJbmRleDogcWVtdS9ody9vbWFwX21tYy5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gcWVtdS5vcmln L2h3L29tYXBfbW1jLmMJMjAwNy0xMS0xMyAxNjoyNzo0Ni4wMDAwMDAwMDAgKzAxMDANCisrKyBx ZW11L2h3L29tYXBfbW1jLmMJMjAwNy0xMS0xMyAxNjoyNzo0OC4wMDAwMDAwMDAgKzAxMDANCkBA IC01MjksNiArNTI5LDcgQEAgc3RydWN0IG9tYXBfbW1jX3MgKm9tYXBfbW1jX2luaXQodGFyZ2V0 Xw0KICAgICBpbnQgaW9tZW10eXBlOw0KICAgICBzdHJ1Y3Qgb21hcF9tbWNfcyAqcyA9IChzdHJ1 Y3Qgb21hcF9tbWNfcyAqKQ0KICAgICAgICAgICAgIHFlbXVfbWFsbG9jeihzaXplb2Yoc3RydWN0 IG9tYXBfbW1jX3MpKTsNCisgICAgaW50IGluZGV4Ow0KIA0KICAgICBzLT5pcnEgPSBpcnE7DQog ICAgIHMtPmJhc2UgPSBiYXNlOw0KQEAgLTU0MCw3ICs1NDEsMTIgQEAgc3RydWN0IG9tYXBfbW1j X3MgKm9tYXBfbW1jX2luaXQodGFyZ2V0Xw0KICAgICBjcHVfcmVnaXN0ZXJfcGh5c2ljYWxfbWVt b3J5KHMtPmJhc2UsIDB4ODAwLCBpb21lbXR5cGUpOw0KIA0KICAgICAvKiBJbnN0YW50aWF0ZSB0 aGUgc3RvcmFnZSAqLw0KLSAgICBzLT5jYXJkID0gc2RfaW5pdChzZF9iZHJ2KTsNCisgICAgaW5k ZXggPSBkcml2ZV9nZXRfaW5kZXgoSUZfU0QsIDAsIDApOw0KKyAgICBpZiAoaW5kZXggPT0gLTEp IHsNCisgICAgICAgIGNwdV9hYm9ydChjcHVfc2luZ2xlX2VudiwgIiVzOiBtaXNzaW5nIFNlY3Vy ZURpZ2l0YWwgZGV2aWNlXG4iLA0KKyAgICAgICAgICAgICAgICAgICAgICAgIF9fRlVOQ1RJT05f Xyk7DQorICAgIH0NCisgICAgcy0+Y2FyZCA9IHNkX2luaXQoZHJpdmVzX3RhYmxlW2luZGV4XS5i ZHJ2KTsNCiANCiAgICAgc2Rfc2V0X2NiKHMtPmNhcmQsIHMsIG9tYXBfbW1jX3JvX2NiLCBvbWFw X21tY19jb3Zlcl9jYik7DQogDQpJbmRleDogcWVtdS9ody9wcGM0MDVfYm9hcmRzLmMNCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT0NCi0tLSBxZW11Lm9yaWcvaHcvcHBjNDA1X2JvYXJkcy5jCTIwMDctMTEtMTMgMTY6Mjc6 NDYuMDAwMDAwMDAwICswMTAwDQorKysgcWVtdS9ody9wcGM0MDVfYm9hcmRzLmMJMjAwNy0xMS0x MyAxNjoyNzo0OC4wMDAwMDAwMDAgKzAxMDANCkBAIC0xOTEsNiArMTkxLDcgQEAgc3RhdGljIHZv aWQgcmVmNDA1ZXBfaW5pdCAoaW50IHJhbV9zaXplLA0KICAgICBpbnQgbGludXhfYm9vdDsNCiAg ICAgaW50IGZsX2lkeCwgZmxfc2VjdG9ycywgbGVuOw0KICAgICBpbnQgcHBjX2Jvb3RfZGV2aWNl ID0gYm9vdF9kZXZpY2VbMF07DQorICAgIGludCBpbmRleDsNCiANCiAgICAgLyogWFhYOiBmaXgg dGhpcyAqLw0KICAgICByYW1fYmFzZXNbMF0gPSAweDAwMDAwMDAwOw0KQEAgLTIxNywxNyArMjE4 LDE4IEBAIHN0YXRpYyB2b2lkIHJlZjQwNWVwX2luaXQgKGludCByYW1fc2l6ZSwNCiAgICAgYmlv c19vZmZzZXQgPSBzcmFtX29mZnNldCArIHNyYW1fc2l6ZTsNCiAgICAgZmxfaWR4ID0gMDsNCiAj aWZkZWYgVVNFX0ZMQVNIX0JJT1MNCi0gICAgaWYgKHBmbGFzaF90YWJsZVtmbF9pZHhdICE9IE5V TEwpIHsNCi0gICAgICAgIGJpb3Nfc2l6ZSA9IGJkcnZfZ2V0bGVuZ3RoKHBmbGFzaF90YWJsZVtm bF9pZHhdKTsNCisgICAgaW5kZXggPSBkcml2ZV9nZXRfaW5kZXgoSUZfUEZMQVNILCAwLCBmbF9p ZHgpOw0KKyAgICBpZiAoaW5kZXggIT0gLTEpIHsNCisgICAgICAgIGJpb3Nfc2l6ZSA9IGJkcnZf Z2V0bGVuZ3RoKGRyaXZlc190YWJsZVtpbmRleF0uYmRydik7DQogICAgICAgICBmbF9zZWN0b3Jz ID0gKGJpb3Nfc2l6ZSArIDY1NTM1KSA+PiAxNjsNCiAjaWZkZWYgREVCVUdfQk9BUkRfSU5JVA0K ICAgICAgICAgcHJpbnRmKCJSZWdpc3RlciBwYXJhbGxlbCBmbGFzaCAlZCBzaXplICIgQUREUlgg IiBhdCBvZmZzZXQgJTA4bHggIg0KICAgICAgICAgICAgICAgICIgYWRkciAiIEFERFJYICIgJyVz JyAlZFxuIiwNCiAgICAgICAgICAgICAgICBmbF9pZHgsIGJpb3Nfc2l6ZSwgYmlvc19vZmZzZXQs IC1iaW9zX3NpemUsDQotICAgICAgICAgICAgICAgYmRydl9nZXRfZGV2aWNlX25hbWUocGZsYXNo X3RhYmxlW2ZsX2lkeF0pLCBmbF9zZWN0b3JzKTsNCisgICAgICAgICAgICAgICBiZHJ2X2dldF9k ZXZpY2VfbmFtZShkcml2ZXNfdGFibGVbaW5kZXhdLmJkcnYpLCBmbF9zZWN0b3JzKTsNCiAjZW5k aWYNCiAgICAgICAgIHBmbGFzaF9yZWdpc3RlcigodWludDMyX3QpKC1iaW9zX3NpemUpLCBiaW9z X29mZnNldCwNCi0gICAgICAgICAgICAgICAgICAgICAgICBwZmxhc2hfdGFibGVbZmxfaWR4XSwg NjU1MzYsIGZsX3NlY3RvcnMsIDIsDQorICAgICAgICAgICAgICAgICAgICAgICAgZHJpdmVzX3Rh YmxlW2luZGV4XS5iZHJ2LCA2NTUzNiwgZmxfc2VjdG9ycywgMiwNCiAgICAgICAgICAgICAgICAg ICAgICAgICAweDAwMDEsIDB4MjJEQSwgMHgwMDAwLCAweDAwMDApOw0KICAgICAgICAgZmxfaWR4 Kys7DQogICAgIH0gZWxzZQ0KQEAgLTUxMyw2ICs1MTUsNyBAQCBzdGF0aWMgdm9pZCB0YWlodV80 MDVlcF9pbml0KGludCByYW1fc2l6DQogICAgIGludCBsaW51eF9ib290Ow0KICAgICBpbnQgZmxf aWR4LCBmbF9zZWN0b3JzOw0KICAgICBpbnQgcHBjX2Jvb3RfZGV2aWNlID0gYm9vdF9kZXZpY2Vb MF07DQorICAgIGludCBpbmRleDsNCiANCiAgICAgLyogUkFNIGlzIHNvbGRlcmVkIHRvIHRoZSBi b2FyZCBzbyB0aGUgc2l6ZSBjYW5ub3QgYmUgY2hhbmdlZCAqLw0KICAgICByYW1fYmFzZXNbMF0g PSAweDAwMDAwMDAwOw0KQEAgLTUzMCw4ICs1MzMsOSBAQCBzdGF0aWMgdm9pZCB0YWlodV80MDVl cF9pbml0KGludCByYW1fc2l6DQogI2VuZGlmDQogICAgIGZsX2lkeCA9IDA7DQogI2lmIGRlZmlu ZWQoVVNFX0ZMQVNIX0JJT1MpDQotICAgIGlmIChwZmxhc2hfdGFibGVbZmxfaWR4XSAhPSBOVUxM KSB7DQotICAgICAgICBiaW9zX3NpemUgPSBiZHJ2X2dldGxlbmd0aChwZmxhc2hfdGFibGVbZmxf aWR4XSk7DQorICAgIGluZGV4ID0gZHJpdmVfZ2V0X2luZGV4KElGX1BGTEFTSCwgMCwgZmxfaWR4 KTsNCisgICAgaWYgKGluZGV4ICE9IC0xKSB7DQorICAgICAgICBiaW9zX3NpemUgPSBiZHJ2X2dl dGxlbmd0aChkcml2ZXNfdGFibGVbaW5kZXhdLmJkcnYpOw0KICAgICAgICAgLyogWFhYOiBzaG91 bGQgY2hlY2sgdGhhdCBzaXplIGlzIDJNQiAqLw0KICAgICAgICAgLy8gICAgICAgIGJpb3Nfc2l6 ZSA9IDIgKiAxMDI0ICogMTAyNDsNCiAgICAgICAgIGZsX3NlY3RvcnMgPSAoYmlvc19zaXplICsg NjU1MzUpID4+IDE2Ow0KQEAgLTUzOSwxMCArNTQzLDEwIEBAIHN0YXRpYyB2b2lkIHRhaWh1XzQw NWVwX2luaXQoaW50IHJhbV9zaXoNCiAgICAgICAgIHByaW50ZigiUmVnaXN0ZXIgcGFyYWxsZWwg Zmxhc2ggJWQgc2l6ZSAiIEFERFJYICIgYXQgb2Zmc2V0ICUwOGx4ICINCiAgICAgICAgICAgICAg ICAiIGFkZHIgIiBBRERSWCAiICclcycgJWRcbiIsDQogICAgICAgICAgICAgICAgZmxfaWR4LCBi aW9zX3NpemUsIGJpb3Nfb2Zmc2V0LCAtYmlvc19zaXplLA0KLSAgICAgICAgICAgICAgIGJkcnZf Z2V0X2RldmljZV9uYW1lKHBmbGFzaF90YWJsZVtmbF9pZHhdKSwgZmxfc2VjdG9ycyk7DQorICAg ICAgICAgICAgICAgYmRydl9nZXRfZGV2aWNlX25hbWUoZHJpdmVzX3RhYmxlW2luZGV4XS5iZHJ2 KSwgZmxfc2VjdG9ycyk7DQogI2VuZGlmDQogICAgICAgICBwZmxhc2hfcmVnaXN0ZXIoKHVpbnQz Ml90KSgtYmlvc19zaXplKSwgYmlvc19vZmZzZXQsDQotICAgICAgICAgICAgICAgICAgICAgICAg cGZsYXNoX3RhYmxlW2ZsX2lkeF0sIDY1NTM2LCBmbF9zZWN0b3JzLCA0LA0KKyAgICAgICAgICAg ICAgICAgICAgICAgIGRyaXZlc190YWJsZVtpbmRleF0uYmRydiwgNjU1MzYsIGZsX3NlY3RvcnMs IDQsDQogICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxLCAweDIyREEsIDB4MDAwMCwgMHgw MDAwKTsNCiAgICAgICAgIGZsX2lkeCsrOw0KICAgICB9IGVsc2UNCkBAIC01NjUsOCArNTY5LDkg QEAgc3RhdGljIHZvaWQgdGFpaHVfNDA1ZXBfaW5pdChpbnQgcmFtX3Npeg0KICAgICB9DQogICAg IGJpb3Nfb2Zmc2V0ICs9IGJpb3Nfc2l6ZTsNCiAgICAgLyogUmVnaXN0ZXIgTGludXggZmxhc2gg Ki8NCi0gICAgaWYgKHBmbGFzaF90YWJsZVtmbF9pZHhdICE9IE5VTEwpIHsNCi0gICAgICAgIGJp b3Nfc2l6ZSA9IGJkcnZfZ2V0bGVuZ3RoKHBmbGFzaF90YWJsZVtmbF9pZHhdKTsNCisgICAgaW5k ZXggPSBkcml2ZV9nZXRfaW5kZXgoSUZfUEZMQVNILCAwLCBmbF9pZHgpOw0KKyAgICBpZiAoaW5k ZXggIT0gLTEpIHsNCisgICAgICAgIGJpb3Nfc2l6ZSA9IGJkcnZfZ2V0bGVuZ3RoKGRyaXZlc190 YWJsZVtpbmRleF0uYmRydik7DQogICAgICAgICAvKiBYWFg6IHNob3VsZCBjaGVjayB0aGF0IHNp emUgaXMgMzJNQiAqLw0KICAgICAgICAgYmlvc19zaXplID0gMzIgKiAxMDI0ICogMTAyNDsNCiAg ICAgICAgIGZsX3NlY3RvcnMgPSAoYmlvc19zaXplICsgNjU1MzUpID4+IDE2Ow0KQEAgLTU3NCw5 ICs1NzksOSBAQCBzdGF0aWMgdm9pZCB0YWlodV80MDVlcF9pbml0KGludCByYW1fc2l6DQogICAg ICAgICBwcmludGYoIlJlZ2lzdGVyIHBhcmFsbGVsIGZsYXNoICVkIHNpemUgIiBBRERSWCAiIGF0 IG9mZnNldCAlMDhseCAiDQogICAgICAgICAgICAgICAgIiBhZGRyICIgQUREUlggIiAnJXMnXG4i LA0KICAgICAgICAgICAgICAgIGZsX2lkeCwgYmlvc19zaXplLCBiaW9zX29mZnNldCwgKHRhcmdl dF91bG9uZykweGZjMDAwMDAwLA0KLSAgICAgICAgICAgICAgIGJkcnZfZ2V0X2RldmljZV9uYW1l KHBmbGFzaF90YWJsZVtmbF9pZHhdKSk7DQorICAgICAgICAgICAgICAgYmRydl9nZXRfZGV2aWNl X25hbWUoZHJpdmVzX3RhYmxlW2luZGV4XS5iZHJ2KSk7DQogI2VuZGlmDQotICAgICAgICBwZmxh c2hfcmVnaXN0ZXIoMHhmYzAwMDAwMCwgYmlvc19vZmZzZXQsIHBmbGFzaF90YWJsZVtmbF9pZHhd LA0KKyAgICAgICAgcGZsYXNoX3JlZ2lzdGVyKDB4ZmMwMDAwMDAsIGJpb3Nfb2Zmc2V0LCBkcml2 ZXNfdGFibGVbaW5kZXhdLmJkcnYsDQogICAgICAgICAgICAgICAgICAgICAgICAgNjU1MzYsIGZs X3NlY3RvcnMsIDQsDQogICAgICAgICAgICAgICAgICAgICAgICAgMHgwMDAxLCAweDIyREEsIDB4 MDAwMCwgMHgwMDAwKTsNCiAgICAgICAgIGZsX2lkeCsrOw0KSW5kZXg6IHFlbXUvaHcvcHBjX2No cnAuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PQ0KLS0tIHFlbXUub3JpZy9ody9wcGNfY2hycC5jCTIwMDctMTEtMTMg MTY6Mjc6NDYuMDAwMDAwMDAwICswMTAwDQorKysgcWVtdS9ody9wcGNfY2hycC5jCTIwMDctMTEt MTMgMTY6Mjc6NDguMDAwMDAwMDAwICswMTAwDQpAQCAtMjUsNiArMjUsOCBAQA0KICNpbmNsdWRl ICJ2bC5oIg0KICNpbmNsdWRlICJwcGNfbWFjLmgiDQogDQorI2RlZmluZSBNQVhfSURFX0JVUyAy DQorDQogLyogVW5pTiBkZXZpY2UgKi8NCiBzdGF0aWMgdm9pZCB1bmluX3dyaXRlbCAodm9pZCAq b3BhcXVlLCB0YXJnZXRfcGh5c19hZGRyX3QgYWRkciwgdWludDMyX3QgdmFsdWUpDQogew0KQEAg LTc0LDYgKzc2LDggQEAgc3RhdGljIHZvaWQgcHBjX2NvcmU5OV9pbml0IChpbnQgcmFtX3Npeg0K ICAgICBpbnQgcGljX21lbV9pbmRleCwgZGJkbWFfbWVtX2luZGV4LCBjdWRhX21lbV9pbmRleDsN CiAgICAgaW50IGlkZV9tZW1faW5kZXhbMl07DQogICAgIGludCBwcGNfYm9vdF9kZXZpY2U7DQor ICAgIGludCBpbmRleDsNCisgICAgQmxvY2tEcml2ZXJTdGF0ZSAqaGRbTUFYX0lERV9CVVMgKiBN QVhfSURFX0RFVlNdOw0KIA0KICAgICBsaW51eF9ib290ID0gKGtlcm5lbF9maWxlbmFtZSAhPSBO VUxMKTsNCiANCkBAIC0yNTksMTEgKzI2MywyMiBAQCBzdGF0aWMgdm9pZCBwcGNfY29yZTk5X2lu aXQgKGludCByYW1fc2l6DQogICAgICAgICAgICAgbmRfdGFibGVbaV0ubW9kZWwgPSAibmUya19w Y2kiOw0KICAgICAgICAgcGNpX25pY19pbml0KHBjaV9idXMsICZuZF90YWJsZVtpXSwgLTEpOw0K ICAgICB9DQorICAgIGlmIChkcml2ZV9nZXRfbWF4X2J1cyhJRl9JREUpID49IE1BWF9JREVfQlVT KSB7DQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInFlbXU6IHRvbyBtYW55IElERSBidXNcbiIp Ow0KKyAgICAgICAgZXhpdCgxKTsNCisgICAgfQ0KKyAgICBmb3IoaSA9IDA7IGkgPCBNQVhfSURF X0JVUyAqIE1BWF9JREVfREVWUzsgaSsrKSB7DQorICAgICAgICBpbmRleCA9IGRyaXZlX2dldF9p bmRleChJRl9JREUsIGkgLyBNQVhfSURFX0RFVlMsIGkgJSBNQVhfSURFX0RFVlMpOw0KKyAgICAg ICAgaWYgKGluZGV4ICE9IC0xKQ0KKyAgICAgICAgICAgIGhkW2ldID0gZHJpdmVzX3RhYmxlW2lu ZGV4XS5iZHJ2Ow0KKyAgICAgICAgZWxzZQ0KKyAgICAgICAgICAgIGhkW2ldID0gTlVMTDsNCisg ICAgfQ0KICNpZiAxDQotICAgIGlkZV9tZW1faW5kZXhbMF0gPSBwbWFjX2lkZV9pbml0KCZic190 YWJsZVswXSwgcGljWzB4MTNdKTsNCi0gICAgaWRlX21lbV9pbmRleFsxXSA9IHBtYWNfaWRlX2lu aXQoJmJzX3RhYmxlWzJdLCBwaWNbMHgxNF0pOw0KKyAgICBpZGVfbWVtX2luZGV4WzBdID0gcG1h Y19pZGVfaW5pdCgmaGRbMF0sIHBpY1sweDEzXSk7DQorICAgIGlkZV9tZW1faW5kZXhbMV0gPSBw bWFjX2lkZV9pbml0KCZoZFsyXSwgcGljWzB4MTRdKTsNCiAjZWxzZQ0KLSAgICBwY2lfY21kNjQ2 X2lkZV9pbml0KHBjaV9idXMsICZic190YWJsZVswXSwgMCk7DQorICAgIHBjaV9jbWQ2NDZfaWRl X2luaXQocGNpX2J1cywgJmhkWzBdLCAwKTsNCiAjZW5kaWYNCiAgICAgLyogY3VkYSBhbHNvIGlu aXRpYWxpemUgQURCICovDQogICAgIGN1ZGFfaW5pdCgmY3VkYV9tZW1faW5kZXgsIHBpY1sweDE5 XSk7DQpJbmRleDogcWVtdS9ody9weGEyeHhfbW1jaS5jDQo9PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gcWVtdS5v cmlnL2h3L3B4YTJ4eF9tbWNpLmMJMjAwNy0xMS0xMyAxNjoyNzo0Ni4wMDAwMDAwMDAgKzAxMDAN CisrKyBxZW11L2h3L3B4YTJ4eF9tbWNpLmMJMjAwNy0xMS0xMyAxNjoyNzo0OC4wMDAwMDAwMDAg KzAxMDANCkBAIC01MjYsNiArNTI2LDcgQEAgc3RydWN0IHB4YTJ4eF9tbWNpX3MgKnB4YTJ4eF9t bWNpX2luaXQodA0KIHsNCiAgICAgaW50IGlvbWVtdHlwZTsNCiAgICAgc3RydWN0IHB4YTJ4eF9t bWNpX3MgKnM7DQorICAgIGludCBpbmRleDsNCiANCiAgICAgcyA9IChzdHJ1Y3QgcHhhMnh4X21t Y2lfcyAqKSBxZW11X21hbGxvY3ooc2l6ZW9mKHN0cnVjdCBweGEyeHhfbW1jaV9zKSk7DQogICAg IHMtPmJhc2UgPSBiYXNlOw0KQEAgLTUzNyw3ICs1MzgsMTMgQEAgc3RydWN0IHB4YTJ4eF9tbWNp X3MgKnB4YTJ4eF9tbWNpX2luaXQodA0KICAgICBjcHVfcmVnaXN0ZXJfcGh5c2ljYWxfbWVtb3J5 KGJhc2UsIDB4MDAxMDAwMDAsIGlvbWVtdHlwZSk7DQogDQogICAgIC8qIEluc3RhbnRpYXRlIHRo ZSBhY3R1YWwgc3RvcmFnZSAqLw0KLSAgICBzLT5jYXJkID0gc2RfaW5pdChzZF9iZHJ2KTsNCisN CisgICAgaW5kZXggPSBkcml2ZV9nZXRfaW5kZXgoSUZfU0QsIDAsIDApOw0KKyAgICBpZiAoaW5k ZXggPT0gLTEpIHsNCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAicWVtdTogbWlzc2luZyBTZWN1 cmVEaWdpdGFsIGRldmljZVxuIik7DQorICAgICAgICBleGl0KDEpOw0KKyAgICB9DQorICAgIHMt PmNhcmQgPSBzZF9pbml0KGRyaXZlc190YWJsZVtpbmRleF0uYmRydik7DQogDQogICAgIHJlZ2lz dGVyX3NhdmV2bSgicHhhMnh4X21tY2kiLCAwLCAwLA0KICAgICAgICAgICAgICAgICAgICAgcHhh Mnh4X21tY2lfc2F2ZSwgcHhhMnh4X21tY2lfbG9hZCwgcyk7DQpJbmRleDogcWVtdS9ody9zcGl0 ei5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09DQotLS0gcWVtdS5vcmlnL2h3L3NwaXR6LmMJMjAwNy0xMS0xMyAxNjoy Nzo0Ni4wMDAwMDAwMDAgKzAxMDANCisrKyBxZW11L2h3L3NwaXR6LmMJMjAwNy0xMS0xMyAxNjoy Nzo0OC4wMDAwMDAwMDAgKzAxMDANCkBAIC05MjgsOSArOTI4LDE0IEBAIHN0YXRpYyB2b2lkIHNw aXR6X3NzcF9hdHRhY2goc3RydWN0IHB4YTINCiBzdGF0aWMgdm9pZCBzcGl0el9taWNyb2RyaXZl X2F0dGFjaChzdHJ1Y3QgcHhhMnh4X3N0YXRlX3MgKmNwdSkNCiB7DQogICAgIHN0cnVjdCBwY21j aWFfY2FyZF9zICptZDsNCi0gICAgQmxvY2tEcml2ZXJTdGF0ZSAqYnMgPSBic190YWJsZVswXTsN CisgICAgaW50IGluZGV4Ow0KKyAgICBCbG9ja0RyaXZlclN0YXRlICpiczsNCiANCi0gICAgaWYg KGJzICYmIGJkcnZfaXNfaW5zZXJ0ZWQoYnMpICYmICFiZHJ2X2lzX3JlbW92YWJsZShicykpIHsN CisgICAgaW5kZXggPSBkcml2ZV9nZXRfaW5kZXgoSUZfSURFLCAwLCAwKTsNCisgICAgaWYgKGlu ZGV4ID09IC0xKQ0KKyAgICAgICAgcmV0dXJuOw0KKyAgICBicyA9IGRyaXZlc190YWJsZVtpbmRl eF0uYmRydjsNCisgICAgaWYgKGJkcnZfaXNfaW5zZXJ0ZWQoYnMpICYmICFiZHJ2X2lzX3JlbW92 YWJsZShicykpIHsNCiAgICAgICAgIG1kID0gZHNjbTF4eHh4X2luaXQoYnMpOw0KICAgICAgICAg cHhhMnh4X3BjbWNpYV9hdHRhY2goY3B1LT5wY21jaWFbMV0sIG1kKTsNCiAgICAgfQ0KSW5kZXg6 IHFlbXUvaHcvbWlwc19tYWx0YS5jDQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09DQotLS0gcWVtdS5vcmlnL2h3L21pcHNf bWFsdGEuYwkyMDA3LTExLTEzIDE2OjI3OjQ2LjAwMDAwMDAwMCArMDEwMA0KKysrIHFlbXUvaHcv bWlwc19tYWx0YS5jCTIwMDctMTEtMTMgMTY6Mjc6NDguMDAwMDAwMDAwICswMTAwDQpAQCAtNDIs NiArNDIsOCBAQA0KICNkZWZpbmUgRU5WUF9OQl9FTlRSSUVTCSAJMTYNCiAjZGVmaW5lIEVOVlBf RU5UUllfU0laRQkgCTI1Ng0KIA0KKyNkZWZpbmUgTUFYX0lERV9CVVMgMg0KKw0KIGV4dGVybiBG SUxFICpsb2dmaWxlOw0KIA0KIHR5cGVkZWYgc3RydWN0IHsNCkBAIC03NjUsNiArNzY3LDggQEAg dm9pZCBtaXBzX21hbHRhX2luaXQgKGludCByYW1fc2l6ZSwgaW50IA0KICAgICB1aW50OF90ICpl ZXByb21fYnVmOw0KICAgICBpMmNfYnVzICpzbWJ1czsNCiAgICAgaW50IGk7DQorICAgIGludCBp bmRleDsNCisgICAgQmxvY2tEcml2ZXJTdGF0ZSAqaGRbTUFYX0lERV9CVVMgKiBNQVhfSURFX0RF VlNdOw0KIA0KICAgICAvKiBpbml0IENQVXMgKi8NCiAgICAgaWYgKGNwdV9tb2RlbCA9PSBOVUxM KSB7DQpAQCAtODUxLDggKzg1NSwyMiBAQCB2b2lkIG1pcHNfbWFsdGFfaW5pdCAoaW50IHJhbV9z aXplLCBpbnQgDQogICAgIHBjaV9idXMgPSBwY2lfZ3Q2NDEyMF9pbml0KGk4MjU5KTsNCiANCiAg ICAgLyogU291dGhicmlkZ2UgKi8NCisNCisgICAgaWYgKGRyaXZlX2dldF9tYXhfYnVzKElGX0lE RSkgPj0gTUFYX0lERV9CVVMpIHsNCisgICAgICAgIGZwcmludGYoc3RkZXJyLCAicWVtdTogdG9v IG1hbnkgSURFIGJ1c1xuIik7DQorICAgICAgICBleGl0KDEpOw0KKyAgICB9DQorDQorICAgIGZv cihpID0gMDsgaSA8IE1BWF9JREVfQlVTICogTUFYX0lERV9ERVZTOyBpKyspIHsNCisgICAgICAg IGluZGV4ID0gZHJpdmVfZ2V0X2luZGV4KElGX0lERSwgaSAvIE1BWF9JREVfREVWUywgaSAlIE1B WF9JREVfREVWUyk7DQorICAgICAgICBpZiAoaW5kZXggIT0gLTEpDQorICAgICAgICAgICAgaGRb aV0gPSBkcml2ZXNfdGFibGVbaW5kZXhdLmJkcnY7DQorICAgICAgICBlbHNlDQorICAgICAgICAg ICAgaGRbaV0gPSBOVUxMOw0KKyAgICB9DQorDQogICAgIHBpaXg0X2RldmZuID0gcGlpeDRfaW5p dChwY2lfYnVzLCA4MCk7DQotICAgIHBjaV9waWl4NF9pZGVfaW5pdChwY2lfYnVzLCBic190YWJs ZSwgcGlpeDRfZGV2Zm4gKyAxLCBpODI1OSk7DQorICAgIHBjaV9waWl4NF9pZGVfaW5pdChwY2lf YnVzLCBoZCwgcGlpeDRfZGV2Zm4gKyAxLCBpODI1OSk7DQogICAgIHVzYl91aGNpX3BpaXg0X2lu aXQocGNpX2J1cywgcGlpeDRfZGV2Zm4gKyAyKTsNCiAgICAgc21idXMgPSBwaWl4NF9wbV9pbml0 KHBjaV9idXMsIHBpaXg0X2RldmZuICsgMywgMHgxMTAwKTsNCiAgICAgZWVwcm9tX2J1ZiA9IHFl bXVfbWFsbG9jeig4ICogMjU2KTsgLyogWFhYOiBtYWtlIHRoaXMgcGVyc2lzdGVudCAqLw0KSW5k ZXg6IHFlbXUvaHcvc3VuNHUuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHFlbXUub3JpZy9ody9zdW40dS5j CTIwMDctMTEtMTMgMTY6Mjc6NDYuMDAwMDAwMDAwICswMTAwDQorKysgcWVtdS9ody9zdW40dS5j CTIwMDctMTEtMTMgMTY6Mjc6NDguMDAwMDAwMDAwICswMTAwDQpAQCAtMzIwLDYgKzMyMCw5IEBA IHN0YXRpYyB2b2lkIHN1bjR1X2luaXQoaW50IHJhbV9zaXplLCBpbnQNCiAgICAgUENJQnVzICpw Y2lfYnVzOw0KICAgICBRRU1VQkggKmJoOw0KICAgICBxZW11X2lycSAqaXJxOw0KKyAgICBpbnQg aW5kZXg7DQorICAgIEJsb2NrRHJpdmVyU3RhdGUgKmhkW01BWF9JREVfQlVTICogTUFYX0lERV9E RVZTXTsNCisgICAgQmxvY2tEcml2ZXJTdGF0ZSAqZmRbTUFYX0ZEXTsNCiANCiAgICAgbGludXhf Ym9vdCA9IChrZXJuZWxfZmlsZW5hbWUgIT0gTlVMTCk7DQogDQpAQCAtNDIyLDExICs0MjUsMzAg QEAgc3RhdGljIHZvaWQgc3VuNHVfaW5pdChpbnQgcmFtX3NpemUsIGludA0KICAgICB9DQogDQog ICAgIGlycSA9IHFlbXVfYWxsb2NhdGVfaXJxcyhkdW1teV9jcHVfc2V0X2lycSwgTlVMTCwgMzIp Ow0KLSAgICAvLyBYWFggcGNpX2NtZDY0Nl9pZGVfaW5pdChwY2lfYnVzLCBic190YWJsZSwgMSk7 DQotICAgIHBjaV9waWl4M19pZGVfaW5pdChwY2lfYnVzLCBic190YWJsZSwgLTEsIGlycSk7DQor ICAgIGlmIChkcml2ZV9nZXRfbWF4X2J1cyhJRl9JREUpID49IE1BWF9JREVfQlVTKSB7DQorICAg ICAgICBmcHJpbnRmKHN0ZGVyciwgInFlbXU6IHRvbyBtYW55IElERSBidXNcbiIpOw0KKyAgICAg ICAgZXhpdCgxKTsNCisgICAgfQ0KKyAgICBmb3IoaSA9IDA7IGkgPCBNQVhfSURFX0JVUyAqIE1B WF9JREVfREVWUzsgaSsrKSB7DQorICAgICAgICBpbmRleCA9IGRyaXZlX2dldF9pbmRleChJRl9J REUsIGkgLyBNQVhfSURFX0RFVlMsIGkgJSBNQVhfSURFX0RFVlMpOw0KKyAgICAgICBpZiAoaW5k ZXggIT0gLTEpDQorICAgICAgICAgICBoZFtpXSA9IGRyaXZlc190YWJsZVtpbmRleF0uYmRydjsN CisgICAgICAgZWxzZQ0KKyAgICAgICAgICAgaGRbaV0gPSBOVUxMOw0KKyAgICB9DQorDQorICAg IC8vIFhYWCBwY2lfY21kNjQ2X2lkZV9pbml0KHBjaV9idXMsIGhkLCAxKTsNCisgICAgcGNpX3Bp aXgzX2lkZV9pbml0KHBjaV9idXMsIGhkLCAtMSwgaXJxKTsNCiAgICAgLyogRklYTUU6IHdpcmUg dXAgaW50ZXJydXB0cy4gICovDQogICAgIGk4MDQyX2luaXQoTlVMTC8qMSovLCBOVUxMLyoxMiov LCAweDYwKTsNCi0gICAgZmxvcHB5X2NvbnRyb2xsZXIgPSBmZGN0cmxfaW5pdChOVUxMLyo2Ki8s IDIsIDAsIDB4M2YwLCBmZF90YWJsZSk7DQorICAgIGZvcihpID0gMDsgaSA8IE1BWF9GRDsgaSsr KSB7DQorICAgICAgICBpbmRleCA9IGRyaXZlX2dldF9pbmRleChJRl9GTE9QUFksIDAsIGkpOw0K KyAgICAgICBpZiAoaW5kZXggIT0gLTEpDQorICAgICAgICAgICBmZFtpXSA9IGRyaXZlc190YWJs ZVtpbmRleF0uYmRydjsNCisgICAgICAgZWxzZQ0KKyAgICAgICAgICAgZmRbaV0gPSBOVUxMOw0K KyAgICB9DQorICAgIGZsb3BweV9jb250cm9sbGVyID0gZmRjdHJsX2luaXQoTlVMTC8qNiovLCAy LCAwLCAweDNmMCwgZmQpOw0KICAgICBudnJhbSA9IG00OHQ1OV9pbml0KE5VTEwvKjgqLywgMCwg MHgwMDc0LCBOVlJBTV9TSVpFLCA1OSk7DQogICAgIHN1bjR1X05WUkFNX3NldF9wYXJhbXMobnZy YW0sIE5WUkFNX1NJWkUsICJTdW40dSIsIHJhbV9zaXplLCBib290X2RldmljZVswXSwNCiAgICAg ICAgICAgICAgICAgICAgICAgICAgS0VSTkVMX0xPQURfQUREUiwga2VybmVsX3NpemUsDQpJbmRl eDogcWVtdS9ody9wcGNfb2xkd29ybGQuYw0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KLS0tIHFlbXUub3JpZy9ody9w cGNfb2xkd29ybGQuYwkyMDA3LTExLTEzIDE2OjI3OjQ2LjAwMDAwMDAwMCArMDEwMA0KKysrIHFl bXUvaHcvcHBjX29sZHdvcmxkLmMJMjAwNy0xMS0xMyAxNjoyNzo0OC4wMDAwMDAwMDAgKzAxMDAN CkBAIC0yNSw2ICsyNSw4IEBADQogI2luY2x1ZGUgInZsLmgiDQogI2luY2x1ZGUgInBwY19tYWMu aCINCiANCisjZGVmaW5lIE1BWF9JREVfQlVTIDINCisNCiAvKiB0ZW1wb3JhcnkgZnJhbWUgYnVm ZmVyIE9TSSBjYWxscyBmb3IgdGhlIHZpZGVvLnggZHJpdmVyLiBUaGUgcmlnaHQNCiAgICBzb2x1 dGlvbiBpcyB0byBtb2RpZnkgdGhlIGRyaXZlciB0byB1c2UgVkdBIFBDSSBJL09zICovDQogLyog WFhYOiB0byBiZSByZW1vdmVkLiBUaGlzIGlzIG5vIHdheSByZWxhdGVkIHRvIGVtdWxhdGlvbiAq Lw0KQEAgLTExNCw2ICsxMTYsOCBAQCBzdGF0aWMgdm9pZCBwcGNfaGVhdGhyb3dfaW5pdCAoaW50 IHJhbV9zDQogICAgIGludCBwaWNfbWVtX2luZGV4LCBudnJhbV9tZW1faW5kZXgsIGRiZG1hX21l bV9pbmRleCwgY3VkYV9tZW1faW5kZXg7DQogICAgIGludCBpZGVfbWVtX2luZGV4WzJdOw0KICAg ICBpbnQgcHBjX2Jvb3RfZGV2aWNlOw0KKyAgICBCbG9ja0RyaXZlclN0YXRlICpoZFtNQVhfSURF X0JVUyAqIE1BWF9JREVfREVWU107DQorICAgIGludCBpbmRleDsNCiANCiAgICAgbGludXhfYm9v dCA9IChrZXJuZWxfZmlsZW5hbWUgIT0gTlVMTCk7DQogDQpAQCAtMjgzLDEwICsyODcsMzcgQEAg c3RhdGljIHZvaWQgcHBjX2hlYXRocm93X2luaXQgKGludCByYW1fcw0KICAgICB9DQogDQogICAg IC8qIEZpcnN0IElERSBjaGFubmVsIGlzIGEgQ01ENjQ2IG9uIHRoZSBQQ0kgYnVzICovDQotICAg IHBjaV9jbWQ2NDZfaWRlX2luaXQocGNpX2J1cywgJmJzX3RhYmxlWzBdLCAwKTsNCisNCisgICAg aWYgKGRyaXZlX2dldF9tYXhfYnVzKElGX0lERSkgPj0gTUFYX0lERV9CVVMpIHsNCisgICAgICAg IGZwcmludGYoc3RkZXJyLCAicWVtdTogdG9vIG1hbnkgSURFIGJ1c1xuIik7DQorICAgICAgICBl eGl0KDEpOw0KKyAgICB9DQorICAgIGluZGV4ID0gZHJpdmVfZ2V0X2luZGV4KElGX0lERSwgMCwg MCk7DQorICAgIGlmIChpbmRleCA9PSAtMSkNCisgICAgICAgIGhkWzBdID0gTlVMTDsNCisgICAg ZWxzZQ0KKyAgICAgICAgaGRbMF0gPSAgZHJpdmVzX3RhYmxlW2luZGV4XS5iZHJ2Ow0KKyAgICBp bmRleCA9IGRyaXZlX2dldF9pbmRleChJRl9JREUsIDAsIDEpOw0KKyAgICBpZiAoaW5kZXggPT0g LTEpDQorICAgICAgICBoZFsxXSA9IE5VTEw7DQorICAgIGVsc2UNCisgICAgICAgIGhkWzFdID0g IGRyaXZlc190YWJsZVtpbmRleF0uYmRydjsNCisgICAgaGRbM10gPSBoZFsyXSA9IE5VTEw7DQor ICAgIHBjaV9jbWQ2NDZfaWRlX2luaXQocGNpX2J1cywgaGQsIDApOw0KKw0KICAgICAvKiBTZWNv bmQgSURFIGNoYW5uZWwgaXMgYSBNQUMgSURFIG9uIHRoZSBNYWNJTyBidXMgKi8NCisgICAgaW5k ZXggPSBkcml2ZV9nZXRfaW5kZXgoSUZfSURFLCAxLCAwKTsNCisgICAgaWYgKGluZGV4ID09IC0x KQ0KKyAgICAgICAgaGRbMF0gPSBOVUxMOw0KKyAgICBlbHNlDQorICAgICAgICBoZFswXSA9ICBk cml2ZXNfdGFibGVbaW5kZXhdLmJkcnY7DQorICAgIGluZGV4ID0gZHJpdmVfZ2V0X2luZGV4KElG X0lERSwgMSwgMSk7DQorICAgIGlmIChpbmRleCA9PSAtMSkNCisgICAgICAgIGhkWzFdID0gTlVM TDsNCisgICAgZWxzZQ0KKyAgICAgICAgaGRbMV0gPSAgZHJpdmVzX3RhYmxlW2luZGV4XS5iZHJ2 Ow0KICAgICBpZGVfbWVtX2luZGV4WzBdID0gLTE7DQotICAgIGlkZV9tZW1faW5kZXhbMV0gPSBw bWFjX2lkZV9pbml0KCZic190YWJsZVsyXSwgcGljWzB4MERdKTsNCisgICAgaWRlX21lbV9pbmRl eFsxXSA9IHBtYWNfaWRlX2luaXQoaGQsIHBpY1sweDBEXSk7DQogDQogICAgIC8qIGN1ZGEgYWxz byBpbml0aWFsaXplIEFEQiAqLw0KICAgICBjdWRhX2luaXQoJmN1ZGFfbWVtX2luZGV4LCBwaWNb MHgxMl0pOw0K --=-T5fCocbiq3JwFreb1bFu-- --=-vnwW8ajpqj+XSu0uFlPD 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) iD8DBQBHOcqP9Kffa9pFVzwRAt8OAKChWrNyHO+vFjZ8wdme08DDSTXzLgCgmgl6 1N8MTQVWKvF13bncpgND0H0= =j0/H -----END PGP SIGNATURE----- --=-vnwW8ajpqj+XSu0uFlPD--