Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vyW3l-000B4b-1Z for pgsql-hackers@arkaria.postgresql.org; Fri, 06 Mar 2026 14:21:46 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vyW3j-005KpA-1c for pgsql-hackers@arkaria.postgresql.org; Fri, 06 Mar 2026 14:21:43 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vyW3j-005Kp1-07 for pgsql-hackers@lists.postgresql.org; Fri, 06 Mar 2026 14:21:43 +0000 Received: from mail-centralusazolkn190110001.outbound.protection.outlook.com ([2a01:111:f403:d107::1] helo=DM5PR21CU001.outbound.protection.outlook.com) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.98.2) (envelope-from ) id 1vyW3g-00000001CCg-2qFJ for pgsql-hackers@postgresql.org; Fri, 06 Mar 2026 14:21:43 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=IN+t+WLP1AmxOpheEj4U4fZaXpwxhvKLdpkmA36QvG7Bo4MWNrJjRN1Foac5q5Inwh7qB+PYXVdJKHpKWKHzxVhNcAohVTNEN7hl9yYxsxf+WFrSGicy4kdWMK7VI7dyLhv0sAfWh5FlDThoq6fImdhbCuQqyLS3QfohcRphUbhlNSdcHZyao4fccRMRiKy0gWHh4jevYY2B+3sUJD7fzTJLv5bFYDLaCppHTWBFeVPosDkf/uMEz2iRgvkpqReIEuQgQfoUSaD0RwRIvx6yTzzCIHT5v6/aobZ0S1P4tT0pomdzHvHbiLCCPOZrGeewG6nBPpeshRJ0S8D8S9HSZw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=9oQDF4OrvQRmmsxPT1Y63kM49WCtoo02eMltj5ysC4A=; b=fCywhY9s9+kMVOeMJfnG7wBLH9j8TL2hKIMwa2bfOdFBKuMajUPvjb3ddB9on6x7527VDqamDAQWk6MSZ56TiWmbngrVRXtEFBzworLNHV0a/fAvBRlLz4Ob/m/6C5BCudX1vRB9BftCCR4Flf59s2dtfjNAvYnIE/RQvdsUDkTak0uNTGuA3Bl2aMsw5W435HB/XhSwZl+pXa/UScOZCi73isDoO1/UfJNbBP1WfugQKAkP8xzdGa72pdCR5Q315fPGtbUzzCs4HWTIzpBrOW7Nv/smkzzrqUahKrWd99WSCljspVECeJjJqxeXwquXEZHt4wkz1eYzJe2GedxjIQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=outlook.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=9oQDF4OrvQRmmsxPT1Y63kM49WCtoo02eMltj5ysC4A=; b=eSiZS4V3/wQ30vqFwaw8hY7pY/Ww0NhSSJxxQdC9nQI6JDiMVdlKEFWsd8UVX5VGRLr3k75S7xeep/SsdSc2H71D2fyOC4J1a1Ue9R+CQOaKYVmaCz3PfpGCMaStn+jFD55TeGPDWm7Ef7whu65lr2wSJoq1yNSTZkotuuDuuU08HMd6tHkVjRUdEsI64xwzrONN5+/9EV6m5qZSbuGj+SvAP5OgcBuY66TXooDFZLGOf19OG6aHXFNOc+JQenT71yeGsBO2usILJHzs6qS8soHoMk7a/UUGB//XIqtzEkioHt06N6HqyJ02rHKvMYsJkd7a0gUMdokMRAilEYMAlQ== Received: from PH0PR08MB7020.namprd08.prod.outlook.com (2603:10b6:510:74::15) by SA2PR08MB6571.namprd08.prod.outlook.com (2603:10b6:806:119::10) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.9678.19; Fri, 6 Mar 2026 14:21:36 +0000 Received: from PH0PR08MB7020.namprd08.prod.outlook.com ([fe80::129a:a42a:445c:3273]) by PH0PR08MB7020.namprd08.prod.outlook.com ([fe80::129a:a42a:445c:3273%4]) with mapi id 15.20.9678.017; Fri, 6 Mar 2026 14:21:36 +0000 From: Boris Mironov To: Madyshev Egor , "pgsql-hackers@postgresql.org" Subject: Re: Idea to enhance pgbench by more modes to generate data (multi-TXNs, UNNEST, COPY BINARY) Thread-Topic: Idea to enhance pgbench by more modes to generate data (multi-TXNs, UNNEST, COPY BINARY) Thread-Index: AQHcUwuRPlzLCtdZw06GAdoL15fmHbTwZ0aAgAGpzjGAACRkgIAAEcrGgAQQLgCAAG6d+YAGXmPMgAFzjL6AAV1tS4BpseD8gAEgG5GAAGN+EIAAFWg0gArDj2mAAAeBfoAE2r6AgBXReIKACYuvB4ABsvMggADncVaAAHeCloAEeaRAgAAKHACAAGj/4A== Date: Fri, 6 Mar 2026 14:21:36 +0000 Message-ID: References: <9e53df419ab74409a5a4a77f26740c89@localhost.localdomain> <14424e6549e84cb4ac51b0f80aa90348@localhost.localdomain> In-Reply-To: <14424e6549e84cb4ac51b0f80aa90348@localhost.localdomain> Accept-Language: en-CA, en-US Content-Language: en-CA X-MS-Has-Attach: yes X-MS-TNEF-Correlator: msip_labels: x-ms-exchange-messagesentrepresentingtype: 1 x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PH0PR08MB7020:EE_|SA2PR08MB6571:EE_ x-ms-office365-filtering-correlation-id: 3852d6b9-d867-47ed-b7e1-08de7b8bacf4 x-microsoft-antispam: BCL:0;ARA:14566002|51005399006|25031999004|37011999003|15080799012|15030799006|6092099016|19110799012|31061999003|8060799015|8062599012|461199028|40105399003|440099028|3412199025|102099032; x-microsoft-antispam-message-info: =?iso-8859-1?Q?3VrOPtlZmUBxOdYuRcfJj7KXHn16wMJ2TZptiLIs5r31OwSjNKU3gRGP/Q?= =?iso-8859-1?Q?aGQ8wEsO3FUozPgnZLm11ggh3v/vHkVGTqZN3FN7FEONkqwzYySkE+hgQi?= =?iso-8859-1?Q?x17DPw/uonxUi3TCv0JQCJp0SykN3mviIzBLite941/gMXUSYoMco2qEVq?= =?iso-8859-1?Q?lGg4ddVAv/tTH4TyeItfo8aUhMQJatdYGuF/9f1bwyCHEfmCFVtcJxxRam?= =?iso-8859-1?Q?IeF2OYVwEe1EjmhCv4GcvGLdajpTPj4ClXcJJwXwTB0VEqGV7rYbI/8wpZ?= =?iso-8859-1?Q?6dlJF51ROkp8oH5J9Q4M1/iN/EpyHngzwGDGZnRqojLqzwzZGqeia9X1N6?= =?iso-8859-1?Q?bf+zE0EpMrBlfjilovvUh2FGcIeCMrtdR/Qa/HR/3d1mASK/soKqonr09w?= =?iso-8859-1?Q?DJIXy8iE+kEmu11medF1Ta1LDAGLXHjbHfhqi5EPlAo9c4aRF8w0IJGmiB?= =?iso-8859-1?Q?8hA6MNGw6T4aG9H+i/F+3EJpIBPKJn7A39vkvS4EUgOmpTXsSelTSyUdar?= =?iso-8859-1?Q?Z50fdxwpi9/dNlH8E7nRdfp2v+7y8Ugfqg3EpQSGv2r1S4mnAGFsnhdE/K?= =?iso-8859-1?Q?SHpvgMDnmWi3AlhcxZuDteDZzH8vbq5sdidlcPlYy65tvvQSLH8S1hiSjX?= =?iso-8859-1?Q?I/KgxcvZ0VuD3GZEwORbiW1beQiQ4YhOKJOdJYweJBfty7c2nN6743PF60?= =?iso-8859-1?Q?Asku8/LdmSEdLoLpoyxT6kGV/Dodk8S0bLXzw14KviTAyq69oMxuchY4px?= =?iso-8859-1?Q?dkgX9UZrtQbwfBxFtio9uSZq0YviQcJClTBPxfs05RYRgWDE/yMsWwYkMr?= =?iso-8859-1?Q?Zp4g8XF2OK9QTS9Hfo3RQVYTwQgzOgYf352N36koYxRw4oCY1LZvnfqXOE?= =?iso-8859-1?Q?Ri/vOhnL1GwKlReM9vlx1JExc9FyBJJq6XrlvuDdMBkdgZe+17sJhVWXAA?= =?iso-8859-1?Q?BGqT/niupJaIdhHZcsA7deVects6n9wiHcAgQvqrkMzpCHplXDXAR4gNOR?= =?iso-8859-1?Q?TV3axyK1H7JkXWFWotCo6qj3vilhourFrtRWBG4B6TN/Md0CA5BZ1W2kEx?= =?iso-8859-1?Q?j57rGPZGxC7iYFgk6nnBwm0=3D?= x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?iso-8859-1?Q?sR6N5aurqdx/tiO+xWT05paAltiG6ILCFPnEcDoQ8oJ0/ivV295OSawNFZ?= =?iso-8859-1?Q?tWGerAh9BBFL1FMcqqwKqwCF1i8BCF3ldYCdkAZtj3FdSThWcPNkdp2ac1?= =?iso-8859-1?Q?RqDMZNOB/WSyDwovZ2NFakCvbbSrnZ0FSbjrbKc8gbpMCJ7x0Z7w3I5pi9?= =?iso-8859-1?Q?dB6GcaUO7IYLkvOKpBQR47LGJMwu2LmBUH0L6NwiO9hTaC27c75UEW9BgJ?= =?iso-8859-1?Q?IJL9HpS0sSVP/7Ntq7EiIANJryY3Y3n+P08dDfxzJxmd0XcK/A2iLVd3P7?= =?iso-8859-1?Q?usCPvQi6RjVWxj2o5MZcyq+TsbBLPoIXbYR0sUR3Fp/1g5VSP74j/5w6Ky?= =?iso-8859-1?Q?bGfta92yFOceOg/0dbv9Rq99E9S6TLWDAg94Lmzvxwj+53O0mNdaQYU4OP?= =?iso-8859-1?Q?XhnQcoPAunrFLvEeLqpuRupY8COcJ8cLX7vnEgHumjRjimRNjbm4RGzCZW?= =?iso-8859-1?Q?TkJmvwJtTDd94ImGoWcJ8JhhBg0BrtSgQC4Zgx8YlvC5fG6Ih73Lv3oaHO?= =?iso-8859-1?Q?Qa9SNmrUZBE2SOUGCTwB7Jj71itdN1Mp1BW8WACqr7ArBrVQ8lK31W2zYa?= =?iso-8859-1?Q?yYPHmcEi7VPacaxJ+2tH2RzY2/xaaYa3uIL1K4Nu3naakDVVSB58Ag8Gih?= =?iso-8859-1?Q?FWRFbvQ2LzWIL7ag21EfsTqriZpiDIvgGSeN9KNOBBeGpCHXsA1RdBVJsX?= =?iso-8859-1?Q?l8pfnJekM1mJaj8b+D/l5kxbxPLFbqJ3qJcx91J5useH0rybc3eT3USj+d?= =?iso-8859-1?Q?UCrtddHO83BVzT12uHWtUjuN0JB2AG85vDLDhizkP9B6I3BZKRcRsr4VeN?= =?iso-8859-1?Q?CA0+4BpJmqAW4iLi46EoVBDCm3ABJ/K+YFCRK/nQvwNZ/KgqOv8gXoygHx?= =?iso-8859-1?Q?2zhr6CefayQQUZQebdlll02aKEd/4ZGFS/sjd/TwKFCNo46NqjnKV8nYZA?= =?iso-8859-1?Q?fieP02scpokhWV/rqH9yAM5Wz3GZ8PYnmQBJihyNgQqZZwbxsmfubT7KzI?= =?iso-8859-1?Q?Tvkl1Y5VMmN01alKdTFdeRzVRlryNXxg4lVlDWE1VXXmQuFbcLjTNwx+Iy?= =?iso-8859-1?Q?R2Ish9hf5B+niY52brKIEoaG6KlxZKx72kiG2T9PdayLv9++ZpYOYsQJd9?= =?iso-8859-1?Q?dXf1ZpwkHT4udsQUvoBFHZ08ReA4vX9IKG5/xpr71T4Dfyf/aPLLRfmFxy?= =?iso-8859-1?Q?zpcUYLbRO8lPy+/NY/sfoWu4RzmZ98sNUAbE4t1VfO0yGLgfjm9OjT7AGF?= =?iso-8859-1?Q?Ke1jb4oR6TILigRJyC47Bs4mwlazIEcE1n9fi48qfLuJzvIHHxba1CwzHW?= =?iso-8859-1?Q?0klurj7YoTQ4orWviovMaf17MQrlhUTuzOwNmxgdnT2IDE2zvmF4Hbu4G2?= =?iso-8859-1?Q?iJXS0H+PWYbooOref5AJhdqJx8lBwx6iAPYAg288sOdNpVWAPYTUw474y6?= =?iso-8859-1?Q?jLhmx9a9yqkdiwPydInxfXgW0y6KX0JjzEZpGnCebUOO+hYI56oeYppOOV?= =?iso-8859-1?Q?0=3D?= Content-Type: multipart/mixed; boundary="_004_PH0PR08MB70205AAE5B3E7305454A89C2887AAPH0PR08MB7020namp_" MIME-Version: 1.0 X-OriginatorOrg: outlook.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PH0PR08MB7020.namprd08.prod.outlook.com X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-CrossTenant-Network-Message-Id: 3852d6b9-d867-47ed-b7e1-08de7b8bacf4 X-MS-Exchange-CrossTenant-originalarrivaltime: 06 Mar 2026 14:21:36.5174 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-rms-persistedconsumerorg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: SA2PR08MB6571 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_004_PH0PR08MB70205AAE5B3E7305454A89C2887AAPH0PR08MB7020namp_ Content-Type: multipart/alternative; boundary="_000_PH0PR08MB70205AAE5B3E7305454A89C2887AAPH0PR08MB7020namp_" --_000_PH0PR08MB70205AAE5B3E7305454A89C2887AAPH0PR08MB7020namp_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable Hi Egor, > One more thing I missed in my previous post: > there is no documentation for the new modes (-c, -U, -M, -S). > Please add descriptions for them in doc/src/sgml/pgbench.sgml > (similar to the existing options). Documentation update has been added > As soon as the rebase and documentation update are completed, > the patch will be ready for final review. Patch has been rebased to current state of the main branch. Squashing 27 separate commits shrunk patch size almost 4-fold. Thank you very much. Greatly appreciate your help in this endeavor. Best regards, Boris --_000_PH0PR08MB70205AAE5B3E7305454A89C2887AAPH0PR08MB7020namp_ Content-Type: text/html; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable
Hi Egor,


> One more thing I missed in my previou= s post:
> there is no documentation for the new modes (-c, -U, -M, -S).
> Please add descriptions for them in doc/src/sgml/pgbench.sgml
> (similar to the existing options).

Documentation update has been added

> As soon as the rebase and documentation update are completed,
> the patch will be ready for final review.

Patch has been rebased to current state of the main branch.
Squashing 27 separate commits shrunk patch size almost 4-fold.

Thank you very much. Greatly appreciate your help in this endeavor.

Best regards,
Boris
--_000_PH0PR08MB70205AAE5B3E7305454A89C2887AAPH0PR08MB7020namp_-- --_004_PH0PR08MB70205AAE5B3E7305454A89C2887AAPH0PR08MB7020namp_ Content-Type: application/octet-stream; name="v12-pgbench-faster-modes.patch" Content-Description: v12-pgbench-faster-modes.patch Content-Disposition: attachment; filename="v12-pgbench-faster-modes.patch"; size=38945; creation-date="Fri, 06 Mar 2026 14:21:20 GMT"; modification-date="Fri, 06 Mar 2026 14:21:35 GMT" Content-Transfer-Encoding: base64 RnJvbSA1YmY5OTA4Y2YxMDkxOGEyYWU0M2NlYWRkNDRkNmM5MDg5NzM2Y2ZmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRyYXV0Lm9y Zz4KRGF0ZTogRnJpLCA2IE1hciAyMDI2IDEwOjMxOjM1ICswMTAwClN1YmplY3Q6IFtQQVRDSCB2 MTJdIEFkZGluZyBuZXcgaW5pdCBtb2RlcyB0byBwZ2JlbmNoIGluY2x1ZGluZyBDT1BZIEZST00K IEJJTkFSWSBhcyB3ZWxsIGFzIHBvcHVsYXRpbmcgZGF0YSBpbiBtdWx0aXBsZSB0cmFuc2FjdGlv bnMKCi0tLQogc3JjL2Jpbi9wZ2JlbmNoL3BnYmVuY2guYyAgICAgICAgICAgICAgICAgICAgfCA4 MDIgKysrKysrKysrKysrKysrKy0tLQogc3JjL2Jpbi9wZ2JlbmNoL3QvMDAxX3BnYmVuY2hfd2l0 aF9zZXJ2ZXIucGwgfCAyMzYgKysrKystCiAyIGZpbGVzIGNoYW5nZWQsIDkwNiBpbnNlcnRpb25z KCspLCAxMzIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9wZ2JlbmNoL3BnYmVu Y2guYyBiL3NyYy9iaW4vcGdiZW5jaC9wZ2JlbmNoLmMKaW5kZXggMWRhZTkxOGNjMDkuLjQ4ZjI5 NTBlMjQ1IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnYmVuY2gvcGdiZW5jaC5jCisrKyBiL3NyYy9i aW4vcGdiZW5jaC9wZ2JlbmNoLmMKQEAgLTE1OSwxOCArMTU5LDM2IEBAIHR5cGVkZWYgc3RydWN0 IHNvY2tldF9zZXQKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKiBzb21lIGNvbmZpZ3VyYWJsZSBwYXJhbWV0 ZXJzICovCi0KICNkZWZpbmUgREVGQVVMVF9JTklUX1NURVBTICJkdGd2cCIJLyogZGVmYXVsdCAt SSBzZXR0aW5nICovCi0jZGVmaW5lIEFMTF9JTklUX1NURVBTICJkdGdHdnBmIgkvKiBhbGwgcG9z c2libGUgc3RlcHMgKi8KKyNkZWZpbmUgQUxMX0lOSVRfU1RFUFMgImR0TVNjZ0dVdnBmIgkvKiBh bGwgcG9zc2libGUgc3RlcHMgKi8KIAogI2RlZmluZSBMT0dfU1RFUF9TRUNPTkRTCTUJLyogc2Vj b25kcyBiZXR3ZWVuIGxvZyBtZXNzYWdlcyAqLwotI2RlZmluZSBERUZBVUxUX05YQUNUUwkxMAkJ LyogZGVmYXVsdCBueGFjdHMgKi8KKyNkZWZpbmUgREVGQVVMVF9OWEFDVFMJCTEwCS8qIGRlZmF1 bHQgbnhhY3RzICovCiAKICNkZWZpbmUgTUlOX0dBVVNTSUFOX1BBUkFNCQkyLjAgLyogbWluaW11 bSBwYXJhbWV0ZXIgZm9yIGdhdXNzICovCiAKICNkZWZpbmUgTUlOX1pJUEZJQU5fUEFSQU0JCTEu MDAxCS8qIG1pbmltdW0gcGFyYW1ldGVyIGZvciB6aXBmaWFuICovCiAjZGVmaW5lIE1BWF9aSVBG SUFOX1BBUkFNCQkxMDAwLjAJLyogbWF4aW11bSBwYXJhbWV0ZXIgZm9yIHppcGZpYW4gKi8KIAor Lyogc2VydmVyLXNpZGUgbWV0aG9kcyB0byBnZW5lcmF0ZSBkYXRhICovCisjZGVmaW5lIElOSVRf U1RFUF9HRU5fVFlQRV9JTlNFUlRfU0VSSUVTCSdHJyAvKiB1c2UgSU5TRVJUIC4uIFNFTEVDVAor CQkJCQkJCQkJCQkJICogZ2VuZXJhdGVfc2VyaWVzIHRvIGdlbmVyYXRlCisJCQkJCQkJCQkJCQkg KiBkYXRhICovCisjZGVmaW5lIElOSVRfU1RFUF9HRU5fVFlQRV9JTlNFUlRfVU5ORVNUCSdVJyAv KiB1c2UgSU5TRVJUIC4uIFNFTEVDVCB1bm5lc3QKKwkJCQkJCQkJCQkJCSAqIHRvIGdlbmVyYXRl IGRhdGEgKi8KKy8qIGNsaWVudC1zaWRlIG1ldGhvZHMgdG8gZ2VuZXJhdGUgZGF0YSAqLworI2Rl ZmluZSBJTklUX1NURVBfR0VOX1RZUEVfQ09QWV9URVhUCQknZycgLyogdXNlIENPUFkgLi4gRlJP TSBTVERJTiAuLgorCQkJCQkJCQkJCQkJICogVEVYVCB0byBnZW5lcmF0ZSBkYXRhICovCisjZGVm aW5lIElOSVRfU1RFUF9HRU5fVFlQRV9DT1BZX0JJTkFSWQkJJ2MnIC8qIHVzZSBDT1BZIC4uIEZS T00gU1RESU4gLi4KKwkJCQkJCQkJCQkJCSAqIEJJTkFSWSB0byBnZW5lcmF0ZSBkYXRhICovCisv KiBkYXRhIGluaXQgcHNldWRvIHN0ZXBzICovCisjZGVmaW5lIElOSVRfU1RFUF9HRU5fVFlQRV9T SU5HTEVfWEFDVAkJJ1MnIC8qIHN3aXRjaCB0byBpbml0IGRhdGEgYXMKKwkJCQkJCQkJCQkJCSAq IHNpbmdsZSB0cmFuc2FjdGlvbiAqLworI2RlZmluZSBJTklUX1NURVBfR0VOX1RZUEVfTVVMVElf WEFDVAkJJ00nIC8qIHN3aXRjaCB0byBpbml0IGRhdGEgYXMKKwkJCQkJCQkJCQkJCSAqIG11bHRp cGxlIHRyYW5zYWN0aW9ucyAqLworCitzdGF0aWMgYm9vbCBtdWx0aV94YWN0ID0gZmFsc2U7IC8q IGluaXQgZGF0YSB0eXBlIChhcyBzaW5nbGUgb3IgbXVsdGlwbGUKKwkJCQkJCQkJICogdHJhbnNh Y3Rpb25zKSAqLwogc3RhdGljIGludAlueGFjdHMgPSAwOwkJCS8qIG51bWJlciBvZiB0cmFuc2Fj dGlvbnMgcGVyIGNsaWVudCAqLwogc3RhdGljIGludAlkdXJhdGlvbiA9IDA7CQkvKiBkdXJhdGlv biBpbiBzZWNvbmRzICovCiBzdGF0aWMgaW50NjQgZW5kX3RpbWUgPSAwOwkJLyogd2hlbiB0byBz dG9wIGluIG1pY3JvIHNlY29uZHMsIHVuZGVyIC1UICovCkBAIC0xODEsNiArMTk5LDE5IEBAIHN0 YXRpYyBpbnQ2NCBlbmRfdGltZSA9IDA7CQkvKiB3aGVuIHRvIHN0b3AgaW4gbWljcm8gc2Vjb25k cywgdW5kZXIgLVQgKi8KICAqLwogc3RhdGljIGludAlzY2FsZSA9IDE7CiAKKy8qCisgKiBtb2Rl IG9mIGRhdGEgZ2VuZXJhdGlvbiB0byB1c2UKKyAqLworc3RhdGljIGNoYXIgZGF0YV9nZW5lcmF0 aW9uX3R5cGUgPSBJTklUX1NURVBfR0VOX1RZUEVfQ09QWV9URVhUOworCisvKgorICogQ09QWSBG Uk9NIEJJTkFSWSBleGVjdXRpb24gYnVmZmVyCisgKi8KKyNkZWZpbmUgQklOX0NPUFlfQlVGX1NJ WkUJMTAyNDAwCS8qIG1heGltdW0gYnVmZmVyIHNpemUgZm9yIENPUFkgRlJPTQorCQkJCQkJCQkJ ICogQklOQVJZICovCitzdGF0aWMgY2hhciAqYmluX2NvcHlfYnVmZmVyID0gTlVMTDsJLyogYnVm ZmVyIGZvciBDT1BZIEZST00gQklOQVJZICovCitzdGF0aWMgaW50MzJfdCBiaW5fY29weV9idWZm ZXJfbGVuZ3RoID0gMDsJLyogY3VycmVudCBidWZmZXIgc2l6ZSAqLworCiAvKgogICogZmlsbGZh Y3Rvci4gZm9yIGV4YW1wbGUsIGZpbGxmYWN0b3IgPSA5MCB3aWxsIHVzZSBvbmx5IDkwIHBlcmNl bnQKICAqIHNwYWNlIGR1cmluZyBpbnNlcnRzIGFuZCBsZWF2ZSAxMCBwZXJjZW50IGZyZWUuCkBA IC00NTYsNiArNDg3LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgU3RhdHNEYXRhCiAgKi8KIHN0YXRpYyBw Z190aW1lX3VzZWNfdCBlcG9jaF9zaGlmdDsKIAorLyogdXNlZCB0byB0cmFjayBlbGFwc2VkIHRp bWUgYW5kIGVzdGltYXRlIG9mIHRoZSByZW1haW5pbmcgdGltZSBvZiBkYXRhIGxvYWQgKi8KK3N0 YXRpYyBwZ190aW1lX3VzZWNfdCBkYXRhX2xvYWRfc3RhcnQ7CisKIC8qCiAgKiBFcnJvciBzdGF0 dXMgZm9yIGVycm9ycyBkdXJpbmcgc2NyaXB0IGV4ZWN1dGlvbi4KICAqLwpAQCAtODUxLDYgKzg4 NSw3IEBAIHN0YXRpYyBib29sIHNvY2tldF9oYXNfaW5wdXQoc29ja2V0X3NldCAqc2EsIGludCBm ZCwgaW50IGlkeCk7CiAKIC8qIGNhbGxiYWNrIHVzZWQgdG8gYnVpbGQgcm93cyBmb3IgQ09QWSBk dXJpbmcgZGF0YSBsb2FkaW5nICovCiB0eXBlZGVmIHZvaWQgKCppbml0Um93TWV0aG9kKSAoUFFF eHBCdWZmZXJEYXRhICpzcWwsIGludDY0IGN1cnIpOwordHlwZWRlZiB2b2lkICgqaW5pdFJvd01l dGhvZEJpbmFyeSkgKFBHY29ubiAqY29uLCBpbnQ2NF90IGN1cnIsIGludDMyX3QgcGFyZW50KTsK IAogLyogY2FsbGJhY2sgZnVuY3Rpb25zIGZvciBvdXIgZmxleCBsZXhlciAqLwogc3RhdGljIGNv bnN0IFBzcWxTY2FuQ2FsbGJhY2tzIHBnYmVuY2hfY2FsbGJhY2tzID0gewpAQCAtOTEzLDggKzk0 OCwxNCBAQCB1c2FnZSh2b2lkKQogCQkgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgcnVu IHNlbGVjdGVkIGluaXRpYWxpemF0aW9uIHN0ZXBzLCBpbiB0aGUgc3BlY2lmaWVkIG9yZGVyXG4i CiAJCSAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICBkOiBkcm9wIGFueSBleGlzdGluZyBw Z2JlbmNoIHRhYmxlc1xuIgogCQkgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgdDogY3Jl YXRlIHRoZSB0YWJsZXMgdXNlZCBieSB0aGUgc3RhbmRhcmQgcGdiZW5jaCBzY2VuYXJpb1xuIgot CQkgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgZzogZ2VuZXJhdGUgZGF0YSwgY2xpZW50 LXNpZGVcbiIKLQkJICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIEc6IGdlbmVyYXRlIGRh dGEsIHNlcnZlci1zaWRlXG4iCisJCSAgICIgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBn ZW5lcmF0ZSBkYXRhLCBjbGllbnQtc2lkZTpcbiIKKwkJICAgIiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZzogICBDT1BZIC4uIEZST00gU1RESU4gLi4gVEVYVFxuIgorCQkgICAiICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjOiAgIENPUFkgLi4gRlJPTSBTVERJTiAuLiBCSU5BUllc biIKKwkJICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvIGdlbmVyYXRlIGRhdGEsIHNl cnZlci1zaWRlOlxuIgorCQkgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHOiAgIElO U0VSVCAuLiBTRUxFQ1QgZ2VuZXJhdGVfc2VyaWVzXG4iCisJCSAgICIgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFU6ICAgSU5TRVJUIC4uIFNFTEVDVCB1bm5lc3RcbiIKKwkJICAgIiAgICAg ICAgICAgICAgICAgICAgICAgICAgIFM6IGZsYWcgdG8gdXNlIHNpbmdsZSB0cmFuc2FjdGlvbiB0 byBpbml0aWFsaXplIGRhdGFcbiIKKwkJICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIE06 IGZsYWcgdG8gdXNlIG11bHRpcGxlIHRyYW5zYWN0aW9ucyB0byBpbml0aWFsaXplIGRhdGFcbiIK IAkJICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgIHY6IGludm9rZSBWQUNVVU0gb24gdGhl IHN0YW5kYXJkIHRhYmxlc1xuIgogCQkgICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgcDog Y3JlYXRlIHByaW1hcnkga2V5IGluZGV4ZXMgb24gdGhlIHN0YW5kYXJkIHRhYmxlc1xuIgogCQkg ICAiICAgICAgICAgICAgICAgICAgICAgICAgICAgZjogY3JlYXRlIGZvcmVpZ24ga2V5cyBiZXR3 ZWVuIHRoZSBzdGFuZGFyZCB0YWJsZXNcbiIKQEAgLTQ5MTYsOCArNDk1Nyw4IEBAIGluaXRDcmVh dGVUYWJsZXMoUEdjb25uICpjb24pCiAJc3RhdGljIGNvbnN0IHN0cnVjdCBkZGxpbmZvIERETHNb XSA9IHsKIAkJewogCQkJInBnYmVuY2hfaGlzdG9yeSIsCi0JCQkidGlkIGludCxiaWQgaW50LGFp ZCAgICBpbnQsZGVsdGEgaW50LG10aW1lIHRpbWVzdGFtcCxmaWxsZXIgY2hhcigyMikiLAotCQkJ InRpZCBpbnQsYmlkIGludCxhaWQgYmlnaW50LGRlbHRhIGludCxtdGltZSB0aW1lc3RhbXAsZmls bGVyIGNoYXIoMjIpIiwKKwkJCSJ0aWQgaW50LGJpZCBpbnQsYWlkICAgIGludCxkZWx0YSBpbnQs bXRpbWUgdGltZXN0YW1wLGZpbGxlciBjaGFyKDIyKSBkZWZhdWx0ICcnIiwKKwkJCSJ0aWQgaW50 LGJpZCBpbnQsYWlkIGJpZ2ludCxkZWx0YSBpbnQsbXRpbWUgdGltZXN0YW1wLGZpbGxlciBjaGFy KDIyKSBkZWZhdWx0ICcnIiwKIAkJCTAKIAkJfSwKIAkJewpAQCAtNDkyOCw4ICs0OTY5LDggQEAg aW5pdENyZWF0ZVRhYmxlcyhQR2Nvbm4gKmNvbikKIAkJfSwKIAkJewogCQkJInBnYmVuY2hfYWNj b3VudHMiLAotCQkJImFpZCAgICBpbnQgbm90IG51bGwsYmlkIGludCxhYmFsYW5jZSBpbnQsZmls bGVyIGNoYXIoODQpIiwKLQkJCSJhaWQgYmlnaW50IG5vdCBudWxsLGJpZCBpbnQsYWJhbGFuY2Ug aW50LGZpbGxlciBjaGFyKDg0KSIsCisJCQkiYWlkICAgIGludCBub3QgbnVsbCxiaWQgaW50LGFi YWxhbmNlIGludCxmaWxsZXIgY2hhcig4NCkgZGVmYXVsdCAnJyIsCisJCQkiYWlkIGJpZ2ludCBu b3QgbnVsbCxiaWQgaW50LGFiYWxhbmNlIGludCxmaWxsZXIgY2hhcig4NCkgZGVmYXVsdCAnJyIs CiAJCQkxCiAJCX0sCiAJCXsKQEAgLTUwMjUsMzEgKzUwNjYsODkgQEAgaW5pdEFjY291bnQoUFFF eHBCdWZmZXJEYXRhICpzcWwsIGludDY0IGN1cnIpCiB9CiAKIHN0YXRpYyB2b2lkCi1pbml0UG9w dWxhdGVUYWJsZShQR2Nvbm4gKmNvbiwgY29uc3QgY2hhciAqdGFibGUsIGludDY0IGJhc2UsCi0J CQkJICBpbml0Um93TWV0aG9kIGluaXRfcm93KQorc2hvd1BvcHVsYXRlVGFibGVDb3B5UHJvZ3Jl c3MoY29uc3QgY2hhciAqdGFibGUsIGludDY0IGN1cnJlbnQsIGludDY0IHRvdGFsKQoreworCXN0 YXRpYyBpbnQJY2hhcnMgPSAwOworCXN0YXRpYyBpbnQJcHJldl9jaGFycyA9IDA7CisJc3RhdGlj IGludAlsb2dfaW50ZXJ2YWwgPSAxOworCisJLyogU3RheSBvbiB0aGUgc2FtZSBsaW5lIGlmIHJl cG9ydGluZyB0byBhIHRlcm1pbmFsICovCisJY2hhcgkJZW9sID0gaXNhdHR5KGZpbGVubyhzdGRl cnIpKSA/ICdccicgOiAnXG4nOworCisJZG91YmxlCQllbGFwc2VkX3NlYyA9IFBHX1RJTUVfR0VU X0RPVUJMRShwZ190aW1lX25vdygpIC0gZGF0YV9sb2FkX3N0YXJ0KTsKKwlkb3VibGUJCXJlbWFp bmluZ19zZWMgPSAoKGRvdWJsZSkgdG90YWwgLSBjdXJyZW50KSAqIGVsYXBzZWRfc2VjIC8gY3Vy cmVudDsKKworCS8qCisJICogSWYgd2Ugd2FudCB0byBzdGljayB3aXRoIHRoZSBvcmlnaW5hbCBs b2dnaW5nLCBwcmludCBhIG1lc3NhZ2UgZWFjaAorCSAqIDEwMGsgaW5zZXJ0ZWQgcm93cy4KKwkg Ki8KKwlpZiAoKCF1c2VfcXVpZXQpICYmIChjdXJyZW50ICUgMTAwMDAwID09IDApKQorCXsKKwkJ Y2hhcnMgPSBmcHJpbnRmKHN0ZGVyciwgSU5UNjRfRk9STUFUICIgb2YgIiBJTlQ2NF9GT1JNQVQg IiB0dXBsZXMgKCVkJSUpIG9mICVzIGRvbmUgKGVsYXBzZWQgJS4yZiBzLCByZW1haW5pbmcgJS4y ZiBzKSIsCisJCQkJCQljdXJyZW50LCB0b3RhbCwKKwkJCQkJCShpbnQpICgoY3VycmVudCAqIDEw MCkgLyB0b3RhbCksCisJCQkJCQl0YWJsZSwgZWxhcHNlZF9zZWMsIHJlbWFpbmluZ19zZWMpOwor CisJCS8qCisJCSAqIElmIHRoZSBwcmV2aW91cyBwcm9ncmVzcyBtZXNzYWdlIGlzIGxvbmdlciB0 aGFuIHRoZSBjdXJyZW50IG9uZSwKKwkJICogYWRkIHNwYWNlcyB0byB0aGUgY3VycmVudCBsaW5l IHRvIGZ1bGx5IG92ZXJ3cml0ZSBhbnkgcmVtYWluaW5nCisJCSAqIGNoYXJhY3RlcnMgZnJvbSB0 aGUgcHJldmlvdXMgbWVzc2FnZS4KKwkJICovCisJCWlmIChwcmV2X2NoYXJzID4gY2hhcnMpCisJ CQlmcHJpbnRmKHN0ZGVyciwgIiUqYyIsIHByZXZfY2hhcnMgLSBjaGFycywgJyAnKTsKKwkJZnB1 dGMoZW9sLCBzdGRlcnIpOworCQlwcmV2X2NoYXJzID0gY2hhcnM7CisJfQorCS8qIGxldCdzIG5v dCBjYWxsIHRoZSB0aW1pbmcgZm9yIGVhY2ggcm93LCBidXQgb25seSBlYWNoIDEwMCByb3dzICov CisJZWxzZSBpZiAodXNlX3F1aWV0ICYmIChjdXJyZW50ICUgMTAwID09IDApKQorCXsKKwkJLyog aGF2ZSB3ZSByZWFjaGVkIHRoZSBuZXh0IGludGVydmFsIChvciBlbmQpPyAqLworCQlpZiAoKGN1 cnJlbnQgPT0gdG90YWwpIHx8IChlbGFwc2VkX3NlYyA+PSBsb2dfaW50ZXJ2YWwgKiBMT0dfU1RF UF9TRUNPTkRTKSkKKwkJeworCQkJY2hhcnMgPSBmcHJpbnRmKHN0ZGVyciwgSU5UNjRfRk9STUFU ICIgb2YgIiBJTlQ2NF9GT1JNQVQgIiB0dXBsZXMgKCVkJSUpIG9mICVzIGRvbmUgKGVsYXBzZWQg JS4yZiBzLCByZW1haW5pbmcgJS4yZiBzKSIsCisJCQkJCQkJY3VycmVudCwgdG90YWwsCisJCQkJ CQkJKGludCkgKChjdXJyZW50ICogMTAwKSAvIHRvdGFsKSwKKwkJCQkJCQl0YWJsZSwgZWxhcHNl ZF9zZWMsIHJlbWFpbmluZ19zZWMpOworCisJCQkvKgorCQkJICogSWYgdGhlIHByZXZpb3VzIHBy b2dyZXNzIG1lc3NhZ2UgaXMgbG9uZ2VyIHRoYW4gdGhlIGN1cnJlbnQKKwkJCSAqIG9uZSwgYWRk IHNwYWNlcyB0byB0aGUgY3VycmVudCBsaW5lIHRvIGZ1bGx5IG92ZXJ3cml0ZSBhbnkKKwkJCSAq IHJlbWFpbmluZyBjaGFyYWN0ZXJzIGZyb20gdGhlIHByZXZpb3VzIG1lc3NhZ2UuCisJCQkgKi8K KwkJCWlmIChwcmV2X2NoYXJzID4gY2hhcnMpCisJCQkJZnByaW50ZihzdGRlcnIsICIlKmMiLCBw cmV2X2NoYXJzIC0gY2hhcnMsICcgJyk7CisJCQlmcHV0Yyhlb2wsIHN0ZGVycik7CisJCQlwcmV2 X2NoYXJzID0gY2hhcnM7CisKKwkJCS8qIHNraXAgdG8gdGhlIG5leHQgaW50ZXJ2YWwgKi8KKwkJ CWxvZ19pbnRlcnZhbCA9IChpbnQpIGNlaWwoZWxhcHNlZF9zZWMgLyBMT0dfU1RFUF9TRUNPTkRT KTsKKwkJfQorCX0KKworCWlmIChjdXJyZW50ICsgMSA9PSB0b3RhbCAmJiBjaGFycyAhPSAwKQor CXsKKwkJZnByaW50ZihzdGRlcnIsICIlKmMiLCBjaGFycywgJyAnKTsgLyogQ2xlYXIgdGhlIGN1 cnJlbnQgbGluZSAqLworCQlmcHV0Yyhlb2wsIHN0ZGVycik7CisJfQorfQorCitzdGF0aWMgdm9p ZAoraW5pdFBvcHVsYXRlVGFibGVDb3B5VGV4dChQR2Nvbm4gKmNvbiwgY29uc3QgY2hhciAqdGFi bGUsIGludCBjb3VudGVyLCBpbnQ2NCBiYXNlLAorCQkJCQkJICBpbml0Um93TWV0aG9kIGluaXRf cm93KQogewogCWludAkJCW47Ci0JaW50NjQJCWs7Ci0JaW50CQkJY2hhcnMgPSAwOwotCWludAkJ CXByZXZfY2hhcnMgPSAwOwogCVBHcmVzdWx0ICAgKnJlczsKIAlQUUV4cEJ1ZmZlckRhdGEgc3Fs OwogCWNoYXIJCWNvcHlfc3RhdGVtZW50WzI1Nl07CiAJY29uc3QgY2hhciAqY29weV9zdGF0ZW1l bnRfZm10ID0gImNvcHkgJXMgZnJvbSBzdGRpbiI7Ci0JaW50NjQJCXRvdGFsID0gYmFzZSAqIHNj YWxlOwotCi0JLyogdXNlZCB0byB0cmFjayBlbGFwc2VkIHRpbWUgYW5kIGVzdGltYXRlIG9mIHRo ZSByZW1haW5pbmcgdGltZSAqLwotCXBnX3RpbWVfdXNlY190IHN0YXJ0OwotCWludAkJCWxvZ19p bnRlcnZhbCA9IDE7Ci0KLQkvKiBTdGF5IG9uIHRoZSBzYW1lIGxpbmUgaWYgcmVwb3J0aW5nIHRv IGEgdGVybWluYWwgKi8KLQljaGFyCQllb2wgPSBpc2F0dHkoZmlsZW5vKHN0ZGVycikpID8gJ1xy JyA6ICdcbic7CisJaW50NjQJCXN0YXJ0ID0gYmFzZSAqIGNvdW50ZXI7CiAKIAlpbml0UFFFeHBC dWZmZXIoJnNxbCk7CiAKIAkvKiBVc2UgQ09QWSB3aXRoIEZSRUVaRSBvbiB2MTQgYW5kIGxhdGVy IGZvciBhbGwgb3JkaW5hcnkgdGFibGVzICovCiAJaWYgKChQUXNlcnZlclZlcnNpb24oY29uKSA+ PSAxNDAwMDApICYmCi0JCWdldF90YWJsZV9yZWxraW5kKGNvbiwgdGFibGUpID09IFJFTEtJTkRf UkVMQVRJT04pCisJCWdldF90YWJsZV9yZWxraW5kKGNvbiwgdGFibGUpID09IFJFTEtJTkRfUkVM QVRJT04gJiYKKwkJIW11bHRpX3hhY3QpCiAJCWNvcHlfc3RhdGVtZW50X2ZtdCA9ICJjb3B5ICVz IGZyb20gc3RkaW4gd2l0aCAoZnJlZXplIG9uKSI7CiAKIApAQCAtNTA2NSw3NSArNTE2NCwxOCBA QCBpbml0UG9wdWxhdGVUYWJsZShQR2Nvbm4gKmNvbiwgY29uc3QgY2hhciAqdGFibGUsIGludDY0 IGJhc2UsCiAJCXBnX2ZhdGFsKCJ1bmV4cGVjdGVkIGNvcHkgaW4gcmVzdWx0OiAlcyIsIFBRZXJy b3JNZXNzYWdlKGNvbikpOwogCVBRY2xlYXIocmVzKTsKIAotCXN0YXJ0ID0gcGdfdGltZV9ub3co KTsKLQotCWZvciAoayA9IDA7IGsgPCB0b3RhbDsgaysrKQorCWZvciAoaW50NjRfdCBpID0gc3Rh cnQ7IGkgPCBzdGFydCArIGJhc2U7IGkrKykKIAl7Ci0JCWludDY0CQlqID0gayArIDE7Ci0KLQkJ aW5pdF9yb3coJnNxbCwgayk7CisJCWluaXRfcm93KCZzcWwsIGkpOwogCQlpZiAoUFFwdXRsaW5l KGNvbiwgc3FsLmRhdGEpKQogCQkJcGdfZmF0YWwoIlBRcHV0bGluZSBmYWlsZWQiKTsKIAogCQlp ZiAoQ2FuY2VsUmVxdWVzdGVkKQogCQkJYnJlYWs7CiAKLQkJLyoKLQkJICogSWYgd2Ugd2FudCB0 byBzdGljayB3aXRoIHRoZSBvcmlnaW5hbCBsb2dnaW5nLCBwcmludCBhIG1lc3NhZ2UgZWFjaAot CQkgKiAxMDBrIGluc2VydGVkIHJvd3MuCi0JCSAqLwotCQlpZiAoKCF1c2VfcXVpZXQpICYmIChq ICUgMTAwMDAwID09IDApKQotCQl7Ci0JCQlkb3VibGUJCWVsYXBzZWRfc2VjID0gUEdfVElNRV9H RVRfRE9VQkxFKHBnX3RpbWVfbm93KCkgLSBzdGFydCk7Ci0JCQlkb3VibGUJCXJlbWFpbmluZ19z ZWMgPSAoKGRvdWJsZSkgdG90YWwgLSBqKSAqIGVsYXBzZWRfc2VjIC8gajsKLQotCQkJY2hhcnMg PSBmcHJpbnRmKHN0ZGVyciwgSU5UNjRfRk9STUFUICIgb2YgIiBJTlQ2NF9GT1JNQVQgIiB0dXBs ZXMgKCVkJSUpIG9mICVzIGRvbmUgKGVsYXBzZWQgJS4yZiBzLCByZW1haW5pbmcgJS4yZiBzKSIs Ci0JCQkJCQkJaiwgdG90YWwsCi0JCQkJCQkJKGludCkgKChqICogMTAwKSAvIHRvdGFsKSwKLQkJ CQkJCQl0YWJsZSwgZWxhcHNlZF9zZWMsIHJlbWFpbmluZ19zZWMpOwotCi0JCQkvKgotCQkJICog SWYgdGhlIHByZXZpb3VzIHByb2dyZXNzIG1lc3NhZ2UgaXMgbG9uZ2VyIHRoYW4gdGhlIGN1cnJl bnQKLQkJCSAqIG9uZSwgYWRkIHNwYWNlcyB0byB0aGUgY3VycmVudCBsaW5lIHRvIGZ1bGx5IG92 ZXJ3cml0ZSBhbnkKLQkJCSAqIHJlbWFpbmluZyBjaGFyYWN0ZXJzIGZyb20gdGhlIHByZXZpb3Vz IG1lc3NhZ2UuCi0JCQkgKi8KLQkJCWlmIChwcmV2X2NoYXJzID4gY2hhcnMpCi0JCQkJZnByaW50 ZihzdGRlcnIsICIlKmMiLCBwcmV2X2NoYXJzIC0gY2hhcnMsICcgJyk7Ci0JCQlmcHV0Yyhlb2ws IHN0ZGVycik7Ci0JCQlwcmV2X2NoYXJzID0gY2hhcnM7Ci0JCX0KLQkJLyogbGV0J3Mgbm90IGNh bGwgdGhlIHRpbWluZyBmb3IgZWFjaCByb3csIGJ1dCBvbmx5IGVhY2ggMTAwIHJvd3MgKi8KLQkJ ZWxzZSBpZiAodXNlX3F1aWV0ICYmIChqICUgMTAwID09IDApKQotCQl7Ci0JCQlkb3VibGUJCWVs YXBzZWRfc2VjID0gUEdfVElNRV9HRVRfRE9VQkxFKHBnX3RpbWVfbm93KCkgLSBzdGFydCk7Ci0J CQlkb3VibGUJCXJlbWFpbmluZ19zZWMgPSAoKGRvdWJsZSkgdG90YWwgLSBqKSAqIGVsYXBzZWRf c2VjIC8gajsKLQotCQkJLyogaGF2ZSB3ZSByZWFjaGVkIHRoZSBuZXh0IGludGVydmFsIChvciBl bmQpPyAqLwotCQkJaWYgKChqID09IHRvdGFsKSB8fCAoZWxhcHNlZF9zZWMgPj0gbG9nX2ludGVy dmFsICogTE9HX1NURVBfU0VDT05EUykpCi0JCQl7Ci0JCQkJY2hhcnMgPSBmcHJpbnRmKHN0ZGVy ciwgSU5UNjRfRk9STUFUICIgb2YgIiBJTlQ2NF9GT1JNQVQgIiB0dXBsZXMgKCVkJSUpIG9mICVz IGRvbmUgKGVsYXBzZWQgJS4yZiBzLCByZW1haW5pbmcgJS4yZiBzKSIsCi0JCQkJCQkJCWosIHRv dGFsLAotCQkJCQkJCQkoaW50KSAoKGogKiAxMDApIC8gdG90YWwpLAotCQkJCQkJCQl0YWJsZSwg ZWxhcHNlZF9zZWMsIHJlbWFpbmluZ19zZWMpOwotCi0JCQkJLyoKLQkJCQkgKiBJZiB0aGUgcHJl dmlvdXMgcHJvZ3Jlc3MgbWVzc2FnZSBpcyBsb25nZXIgdGhhbiB0aGUgY3VycmVudAotCQkJCSAq IG9uZSwgYWRkIHNwYWNlcyB0byB0aGUgY3VycmVudCBsaW5lIHRvIGZ1bGx5IG92ZXJ3cml0ZSBh bnkKLQkJCQkgKiByZW1haW5pbmcgY2hhcmFjdGVycyBmcm9tIHRoZSBwcmV2aW91cyBtZXNzYWdl LgotCQkJCSAqLwotCQkJCWlmIChwcmV2X2NoYXJzID4gY2hhcnMpCi0JCQkJCWZwcmludGYoc3Rk ZXJyLCAiJSpjIiwgcHJldl9jaGFycyAtIGNoYXJzLCAnICcpOwotCQkJCWZwdXRjKGVvbCwgc3Rk ZXJyKTsKLQkJCQlwcmV2X2NoYXJzID0gY2hhcnM7Ci0KLQkJCQkvKiBza2lwIHRvIHRoZSBuZXh0 IGludGVydmFsICovCi0JCQkJbG9nX2ludGVydmFsID0gKGludCkgY2VpbChlbGFwc2VkX3NlYyAv IExPR19TVEVQX1NFQ09ORFMpOwotCQkJfQotCQl9CisJCXNob3dQb3B1bGF0ZVRhYmxlQ29weVBy b2dyZXNzKHRhYmxlLCBpLCBiYXNlICogc2NhbGUpOwogCX0KIAotCWlmIChjaGFycyAhPSAwICYm IGVvbCAhPSAnXG4nKQotCQlmcHJpbnRmKHN0ZGVyciwgIiUqY1xyIiwgY2hhcnMsICcgJyk7CS8q IENsZWFyIHRoZSBjdXJyZW50IGxpbmUgKi8KIAogCWlmIChQUXB1dGxpbmUoY29uLCAiXFwuXG4i KSkKIAkJcGdfZmF0YWwoInZlcnkgbGFzdCBQUXB1dGxpbmUgZmFpbGVkIik7CkBAIC01MTUwLDkg KzUxOTIsOSBAQCBpbml0UG9wdWxhdGVUYWJsZShQR2Nvbm4gKmNvbiwgY29uc3QgY2hhciAqdGFi bGUsIGludDY0IGJhc2UsCiAgKiBhIGJsYW5rLXBhZGRlZCBzdHJpbmcgaW4gcGdiZW5jaF9hY2Nv dW50cy4KICAqLwogc3RhdGljIHZvaWQKLWluaXRHZW5lcmF0ZURhdGFDbGllbnRTaWRlKFBHY29u biAqY29uKQoraW5pdEdlbmVyYXRlRGF0YUNsaWVudFNpZGVUZXh0RnJtdChQR2Nvbm4gKmNvbikK IHsKLQlmcHJpbnRmKHN0ZGVyciwgImdlbmVyYXRpbmcgZGF0YSAoY2xpZW50LXNpZGUpLi4uXG4i KTsKKwlmcHJpbnRmKHN0ZGVyciwgIlRFWFQgbW9kZS4uLlxuIik7CiAKIAkvKgogCSAqIHdlIGRv IGFsbCBvZiB0aGlzIGluIG9uZSB0cmFuc2FjdGlvbiB0byBlbmFibGUgdGhlIGJhY2tlbmQncwpA QCAtNTE2Myw2NCArNTIwNSw1NDkgQEAgaW5pdEdlbmVyYXRlRGF0YUNsaWVudFNpZGUoUEdjb25u ICpjb24pCiAJLyogdHJ1bmNhdGUgYXdheSBhbnkgb2xkIGRhdGEgKi8KIAlpbml0VHJ1bmNhdGVU YWJsZXMoY29uKTsKIAotCS8qCi0JICogZmlsbCBicmFuY2hlcywgdGVsbGVycywgYWNjb3VudHMg aW4gdGhhdCBvcmRlciBpbiBjYXNlIGZvcmVpZ24ga2V5cwotCSAqIGFscmVhZHkgZXhpc3QKKwlp ZiAobXVsdGlfeGFjdCkKKwkJZXhlY3V0ZVN0YXRlbWVudChjb24sICJjb21taXQiKTsKKworCWZv ciAoaW50IGkgPSAwOyBpIDwgc2NhbGU7IGkrKykKKwl7CisJCWlmIChtdWx0aV94YWN0KQorCQkJ ZXhlY3V0ZVN0YXRlbWVudChjb24sICJiZWdpbiIpOworCisJCS8qCisJCSAqIGZpbGwgYnJhbmNo ZXMsIHRlbGxlcnMsIGFjY291bnRzIGluIHRoYXQgb3JkZXIgaW4gY2FzZSBmb3JlaWduIGtleXMK KwkJICogYWxyZWFkeSBleGlzdAorCQkgKi8KKwkJaW5pdFBvcHVsYXRlVGFibGVDb3B5VGV4dChj b24sICJwZ2JlbmNoX2JyYW5jaGVzIiwgaSwgbmJyYW5jaGVzLCBpbml0QnJhbmNoKTsKKwkJaW5p dFBvcHVsYXRlVGFibGVDb3B5VGV4dChjb24sICJwZ2JlbmNoX3RlbGxlcnMiLCBpLCBudGVsbGVy cywgaW5pdFRlbGxlcik7CisJCWluaXRQb3B1bGF0ZVRhYmxlQ29weVRleHQoY29uLCAicGdiZW5j aF9hY2NvdW50cyIsIGksIG5hY2NvdW50cywgaW5pdEFjY291bnQpOworCisJCWlmIChtdWx0aV94 YWN0KQorCQkJZXhlY3V0ZVN0YXRlbWVudChjb24sICJjb21taXQiKTsKKwl9CisKKwlpZiAoIW11 bHRpX3hhY3QpCisJCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAiY29tbWl0Iik7Cit9CisKKworLyoK KyAqIFNhdmUgY2hhciBkYXRhIHRvIGJ1ZmZlcgorICogS2VwdCBhcyBzZXBhcmF0ZSBwcm9jIGZv ciBwb3NzaWJsZSBhZGRpdGlvbiBvZiBzb21ldGhpbmcKKyAqIGxpa2UgYWRkQ2hhckNvbHVtbiBp biBmdXR1cmUKKyAqLworc3RhdGljIHZvaWQKK2J1ZmZlckNoYXJEYXRhKGNoYXIgKnNyYywgaW50 MzJfdCBsZW4pCit7CisJQXNzZXJ0KGJpbl9jb3B5X2J1ZmZlcl9sZW5ndGggKyBsZW4gPD0gQklO X0NPUFlfQlVGX1NJWkUpOworCisJbWVtY3B5KChjaGFyICopIGJpbl9jb3B5X2J1ZmZlciArIGJp bl9jb3B5X2J1ZmZlcl9sZW5ndGgsIChjaGFyICopIHNyYywgbGVuKTsKKwliaW5fY29weV9idWZm ZXJfbGVuZ3RoICs9IGxlbjsKK30KKworLyoKKyAqIENvbnZlcnRzIHBsYXRmb3JtIGJ5dGUgb3Jk ZXIgaW50byBuZXR3b3JrIGJ5dGUgb3JkZXIKKyAqIFNQQVJDIGRvZXNuJ3QgcmVxaXJlIHRoYXQK KyAqLworc3RhdGljIHZvaWQKK2J1ZmZlckRhdGEodm9pZCAqc3JjLCBpbnQzMl90IGxlbikKK3sK KwlBc3NlcnQoYmluX2NvcHlfYnVmZmVyX2xlbmd0aCArIGxlbiA8PSBCSU5fQ09QWV9CVUZfU0la RSk7CisKKyNpZmRlZiBfX3NwYXJjX18KKwlidWZmZXJDaGFyRGF0YShzcmMsIGxlbik7CisjZWxz ZQorCisJaWYgKGxlbiA9PSAxKQorCQlidWZmZXJDaGFyRGF0YShzcmMsIGxlbik7CisJZWxzZQor CXsKKwkJZm9yIChpbnQzMl90IGkgPSAwOyBpIDwgbGVuOyBpKyspCisJCXsKKwkJCSgoY2hhciAq KSBiaW5fY29weV9idWZmZXIgKyBiaW5fY29weV9idWZmZXJfbGVuZ3RoKVtpXSA9CisJCQkJKChj aGFyICopIHNyYylbbGVuIC0gaSAtIDFdOworCQl9CisKKwkJYmluX2NvcHlfYnVmZmVyX2xlbmd0 aCArPSBsZW47CisJfQorI2VuZGlmCit9CisKKy8qCisgKiBhZGRzIGNvbHVtbiBjb3VudGVyCisg Ki8KK3N0YXRpYyB2b2lkCithZGRDb2x1bW5Db3VudGVyKGludDE2X3QgbikKK3sKKwlidWZmZXJE YXRhKCh2b2lkICopICZuLCBzaXplb2YobikpOworfQorCisvKgorICogYWRkcyBjb2x1bW4gd2l0 aCBpbnRpMzIgdmFsdWUKKyAqLworc3RhdGljIHZvaWQKK2FkZEludDMyQ29sdW1uKGludDMyX3Qg dmFsdWUpCit7CisJaW50MzJfdAkJZGF0YSA9IHZhbHVlOworCWludDMyX3QJCXNpemUgPSBzaXpl b2YoZGF0YSk7CisKKwlidWZmZXJEYXRhKCh2b2lkICopICZzaXplLCBzaXplb2Yoc2l6ZSkpOwor CWJ1ZmZlckRhdGEoKHZvaWQgKikgJmRhdGEsIHNpemVvZihkYXRhKSk7Cit9CisKKy8qCisgKiBh ZGRzIGNvbHVtbiB3aXRoIGludGk2NCB2YWx1ZQorICovCitzdGF0aWMgdm9pZAorYWRkSW50NjRD b2x1bW4oaW50NjRfdCB2YWx1ZSkKK3sKKwlpbnQ2NF90CQlkYXRhID0gdmFsdWU7CisJaW50MzJf dAkJc2l6ZSA9IHNpemVvZihkYXRhKTsKKworCWJ1ZmZlckRhdGEoKHZvaWQgKikgJnNpemUsIHNp emVvZihzaXplKSk7CisJYnVmZmVyRGF0YSgodm9pZCAqKSAmZGF0YSwgc2l6ZW9mKGRhdGEpKTsK K30KKworLyoKKyAqIFN0YXJ0cyBjb21tdW5pY2F0aW9uIHdpdGggc2VydmVyIGZvciBDT1BZIEZS T00gQklOQVJZIHN0YXRlbWVudAorICovCitzdGF0aWMgdm9pZAorc2VuZEJpbmFyeUNvcHlIZWFk ZXIoUEdjb25uICpjb24pCit7CisJc3RhdGljIGNoYXIgaGVhZGVyW10gPSB7J1AnLCAnRycsICdD JywgJ08nLCAnUCcsICdZJywgJ1xuJywgJ1wzNzcnLCAnXHInLCAnXG4nLCAnXDAnLAorCQknXDAn LCAnXDAnLCAnXDAnLCAnXDAnLAorCSdcMCcsICdcMCcsICdcMCcsICdcMCd9OworCisJUFFwdXRD b3B5RGF0YShjb24sIGhlYWRlciwgMTkpOworfQorCisvKgorICogRmluaXNoZXMgY29tbXVuaWNh dGlvbiB3aXRoIHNlcnZlciBmb3IgQ09QWSBGUk9NIEJJTkFSWSBzdGF0ZW1lbnQKKyAqLworc3Rh dGljIHZvaWQKK3NlbmRCaW5hcnlDb3B5VHJhaWxlcihQR2Nvbm4gKmNvbikKK3sKKwlzdGF0aWMg Y2hhciB0cmFpbGVyW10gPSB7MHhGRiwgMHhGRn07CisKKwlQUXB1dENvcHlEYXRhKGNvbiwgdHJh aWxlciwgMik7Cit9CisKKy8qCisgKiBGbGFzaGVzIGN1cnJlbnQgYnVmZmVyIG92ZXIgbmV0d29y ayBpZiBuZWVkZWQKKyAqLworc3RhdGljIHZvaWQKK2ZsdXNoQnVmZmVyKFBHY29ubiAqY29uLCBp bnQxNl90IHJvd19sZW4pCit7CisJUEdyZXN1bHQgICAqcmVzOworCisJaWYgKGJpbl9jb3B5X2J1 ZmZlcl9sZW5ndGggKyByb3dfbGVuID4gQklOX0NPUFlfQlVGX1NJWkUpCisJeworCQlyZXMgPSBQ UWdldFJlc3VsdChjb24pOworCisJCUFzc2VydChiaW5fY29weV9idWZmZXJfbGVuZ3RoIDw9IEJJ Tl9DT1BZX0JVRl9TSVpFKTsKKworCQkvKiBmbHVzaCBjdXJyZW50IGJ1ZmZlciAqLworCQlpZiAo UFFyZXN1bHRTdGF0dXMocmVzKSA9PSBQR1JFU19DT1BZX0lOKQorCQkJUFFwdXRDb3B5RGF0YShj b24sIChjaGFyICopIGJpbl9jb3B5X2J1ZmZlciwgYmluX2NvcHlfYnVmZmVyX2xlbmd0aCk7CisJ CWVsc2UKKwkJCXBnX2ZhdGFsKCJJdCBpcyBOT1QgYSBDT1BZIGNvbW1hbmQgdGhhdCBpcyBjdXJy ZW50bHkgcnVubmluZyIpOworCisJCVBRY2xlYXIocmVzKTsKKwkJYmluX2NvcHlfYnVmZmVyX2xl bmd0aCA9IDA7CisJfQorfQorCisvKgorICogU2VuZHMgY3VycmVudCBicmFuY2ggcm93IHRvIGJ1 ZmZlcgorICovCitzdGF0aWMgdm9pZAoraW5pdEJyYW5jaEJpbmFyeShQR2Nvbm4gKmNvbiwgaW50 NjRfdCBjdXJyLCBpbnQzMl90IHBhcmVudCkKK3sKKwkvKi0tLQorCSAqIENoZWNrIGRvY3VtZW50 YXRpb24gYWJvdXQgQ09QWSBjb21tYW5kOgorCSAqIGh0dHBzOi8vd3d3LnBvc3RncmVzcWwub3Jn L2RvY3MvY3VycmVudC9zcWwtY29weS5odG1sCisJICoKKwkgKiBFYWNoIHJvdyBvZiBicmFuY2hl cyB0YWJsZSBpcyBzZW50IGFzOgorCSAqIC0gMiBieXRlcyBmb3IgbnVtYmVyIG9mIGNvbHVtbnMg aW4gdHVwbGUgb3Igc2l6ZW9mKGludDE2X3QpCisJICogLSB0aGVuIDQgYnl0ZXMgb3Igc2l6ZW9m KGludDMyX3QpIGluIGZyb250IG9mIGVhY2ggZmllbGQgd2l0aCBsZW5ndGggb2YgdGhlIGZpZWxk CisJICoKKwkgKiAtIGJyYW5jaGVzIHRhYmxlIGhhcyBmb2xsb3dpbmcgY29sdW1uczoKKwkgKiAt IDQgYnl0ZXMgZm9yIGJpZCBjb2x1bW4gb3Igc2l6ZW9mKGludDMyX3QpCisJICogLSA0IGJ5dGVz IGZvciBiYmFsYW5jZSBjb2x1bW4gb3Igc2l6ZW9mKGludDMyX3QpCisJICogLSA4OCBieXRlcyBm b3IgZmlsbGVyIGNvbHVtbiAob3B0aW9uYWwgc2luY2Ugbm8gcmVxdWlyZW1lbnQgZm9yIHJvdyBs ZW5ndGgpCisJICotLS0KIAkgKi8KLQlpbml0UG9wdWxhdGVUYWJsZShjb24sICJwZ2JlbmNoX2Jy YW5jaGVzIiwgbmJyYW5jaGVzLCBpbml0QnJhbmNoKTsKLQlpbml0UG9wdWxhdGVUYWJsZShjb24s ICJwZ2JlbmNoX3RlbGxlcnMiLCBudGVsbGVycywgaW5pdFRlbGxlcik7Ci0JaW5pdFBvcHVsYXRl VGFibGUoY29uLCAicGdiZW5jaF9hY2NvdW50cyIsIG5hY2NvdW50cywgaW5pdEFjY291bnQpOwor CS8qIGZvbGxvd2luZyBpcyBvdXIgbWF4IGludGVudCBhdCB0aGUgbW9tZW50ICovCisJaW50MTZf dAkJbWF4X3Jvd19sZW4gPSAyICsgKDQgKyA0KSArICg0ICsgNCkgKyAoNCArIDg4KTsKIAotCWV4 ZWN1dGVTdGF0ZW1lbnQoY29uLCAiY29tbWl0Iik7CisJZmx1c2hCdWZmZXIoY29uLCBtYXhfcm93 X2xlbik7CisKKwlhZGRDb2x1bW5Db3VudGVyKDIpOworCisJYWRkSW50MzJDb2x1bW4oY3VyciAr IDEpOworCWFkZEludDMyQ29sdW1uKDApOworCS8qIHdlIGRvbid0IHNlbmQgZmlsbGVyIGNvbHVt biBoZXJlIHRvIG1pbmltaXplIG5ldHdvcmsgdHJhZmZpYyBhbmQgV0FMICovCiB9CiAKIC8qCi0g KiBGaWxsIHRoZSBzdGFuZGFyZCB0YWJsZXMgd2l0aCBzb21lIGRhdGEgZ2VuZXJhdGVkIG9uIHRo ZSBzZXJ2ZXIKLSAqCi0gKiBBcyBhbHJlYWR5IHRoZSBjYXNlIHdpdGggdGhlIGNsaWVudC1zaWRl IGRhdGEgZ2VuZXJhdGlvbiwgdGhlIGZpbGxlcgotICogY29sdW1uIGRlZmF1bHRzIHRvIE5VTEwg aW4gcGdiZW5jaF9icmFuY2hlcyBhbmQgcGdiZW5jaF90ZWxsZXJzLAotICogYW5kIGlzIGEgYmxh bmstcGFkZGVkIHN0cmluZyBpbiBwZ2JlbmNoX2FjY291bnRzLgorICogU2VuZHMgY3VycmVudCB0 ZWxsZXIgcm93IHRvIGJ1ZmZlcgogICovCiBzdGF0aWMgdm9pZAotaW5pdEdlbmVyYXRlRGF0YVNl cnZlclNpZGUoUEdjb25uICpjb24pCitpbml0VGVsbGVyQmluYXJ5KFBHY29ubiAqY29uLCBpbnQ2 NF90IGN1cnIsIGludDMyX3QgcGFyZW50KQogewotCVBRRXhwQnVmZmVyRGF0YSBzcWw7CisJLyot LS0KKwkgKiBDaGVjayBkb2N1bWVudGF0aW9uIGFib3V0IENPUFkgY29tbWFuZDoKKwkgKiBodHRw czovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9kb2NzL2N1cnJlbnQvc3FsLWNvcHkuaHRtbAorCSAqCisJ ICogRWFjaCByb3cgb2YgdGVsbGVycyB0YWJsZSBpcyBzZW50IGFzOgorCSAqIC0gMiBieXRlcyBm b3IgbnVtYmVyIG9mIGNvbHVtbnMgaW4gdHVwbGUgb3Igc2l6ZW9mKGludDE2X3QpCisJICogLSB0 aGVuIDQgYnl0ZXMgb3Igc2l6ZW9mKGludDMyX3QpIGluIGZyb250IG9mIGVhY2ggZmllbGQgd2l0 aCBsZW5ndGggb2YgdGhlIGZpZWxkCisJICoKKwkgKiAtIHRlbGxlcnMgdGFibGUgaGFzIGZvbGxv d2luZyBjb2x1bW5zOgorCSAqIC0gNCBieXRlcyBmb3IgdGlkIGNvbHVtbiBvciBzaXplb2YoaW50 MzJfdCkKKwkgKiAtIDQgYnl0ZXMgZm9yIGJpZCBjb2x1bW4gb3Igc2l6ZW9mKGludDMyX3QpCisJ ICogLSA0IGJ5dGVzIGZvciB0YmFsYW5jZSBjb2x1bW4gb3Igc2l6ZW9mKGludDMyX3QpCisJICog LSA4NCBieXRlcyBmb3IgZmlsbGVyIGNvbHVtbiAob3B0aW9uYWwgc2luY2Ugbm8gcmVxdWlyZW1l bnQgZm9yIHJvdyBsZW5ndGgpCisJICotLS0KKwkgKi8KKwkvKiBmb2xsb3dpbmcgaXMgb3VyIG1h eCBpbnRlbnQgYXQgdGhlIG1vbWVudCAqLworCWludDE2X3QJCW1heF9yb3dfbGVuID0gMiArICg0 ICsgNCkgKyAoNCArIDQpICsgKDQgKyA0KSArICg0ICsgODQpOworCisJZmx1c2hCdWZmZXIoY29u LCBtYXhfcm93X2xlbik7CisKKwlhZGRDb2x1bW5Db3VudGVyKDMpOworCisJYWRkSW50MzJDb2x1 bW4oY3VyciArIDEpOworCWFkZEludDMyQ29sdW1uKGN1cnIgLyBwYXJlbnQgKyAxKTsKKwlhZGRJ bnQzMkNvbHVtbigwKTsKKwkvKiB3ZSBkb24ndCBzZW5kIGZpbGxlciBjb2x1bW4gaGVyZSB0byBt aW5pbWl6ZSBuZXR3b3JrIHRyYWZmaWMgYW5kIFdBTCAqLworfQorCisvKgorICogU2VuZHMgY3Vy cmVudCBhY2NvdW50IHJvdyB0byBidWZmZXIKKyAqLworc3RhdGljIHZvaWQKK2luaXRBY2NvdW50 QmluYXJ5KFBHY29ubiAqY29uLCBpbnQ2NF90IGN1cnIsIGludDMyX3QgcGFyZW50KQoreworCS8q LS0tCisJICogQ2hlY2sgZG9jdW1lbnRhdGlvbiBhYm91dCBDT1BZIGNvbW1hbmQ6CisJICogaHR0 cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvZG9jcy9jdXJyZW50L3NxbC1jb3B5Lmh0bWwKKwkgKgor CSAqIEVhY2ggcm93IG9mIGFjY291bnRzIHRhYmxlIGlzIHNlbnQgYXM6CisJICogLSAyIGJ5dGVz IGZvciBudW1iZXIgb2YgY29sdW1ucyBpbiB0dXBsZSBvciBzaXplb2YoaW50MTZfdCkKKwkgKiAt IHRoZW4gNCBieXRlcyBvciBzaXplb2YoaW50MzJfdCkgaW4gZnJvbnQgb2YgZWFjaCBmaWVsZCB3 aXRoIGxlbmd0aCBvZiB0aGUgZmllbGQKKwkgKgorCSAqIC0gYWNjb3VudHMgdGFibGUgaGFzIGZv bGxvd2luZyBjb2x1bW5zICh0YWtpbmcgaW50byBhY2NvdW50IHNjYWxlID4gMjAwMDApOgorCSAq IC0gOCBieXRlcyBmb3IgYWlkIGNvbHVtbiBvciBzaXplb2YoaW50NjRfdCkKKwkgKiAtIDQgYnl0 ZXMgZm9yIGJpZCBjb2x1bW4gb3Igc2l6ZW9mKGludDMyX3QpCisJICogLSA0IGJ5dGVzIGZvciBh YmFsYW5jZSBjb2x1bW4gb3Igc2l6ZW9mKGludDMyX3QpCisJICogLSA4NCBieXRlcyBmb3IgZmls bGVyIGNvbHVtbiAob3B0aW9uYWwgc2luY2Ugbm8gcmVxdWlyZW1lbnQgZm9yIHJvdyBsZW5ndGgp CisJICotLS0KKwkgKi8KKwkvKiBmb2xsb3dpbmcgaXMgb3VyIG1heCBpbnRlbnQgYXQgdGhlIG1v bWVudCAqLworCWludDE2X3QJCW1heF9yb3dfbGVuID0gMiArICg0ICsgOCkgKyAoNCArIDQpICsg KDQgKyA0KSArICg0ICsgODQpOworCisJZmx1c2hCdWZmZXIoY29uLCBtYXhfcm93X2xlbik7CisK KwlhZGRDb2x1bW5Db3VudGVyKDMpOworCisJaWYgKHNjYWxlIDw9IFNDQUxFXzMyQklUX1RIUkVT SE9MRCkKKwkJYWRkSW50MzJDb2x1bW4oY3VyciArIDEpOworCWVsc2UKKwkJYWRkSW50NjRDb2x1 bW4oY3Vycik7CisKKwlhZGRJbnQzMkNvbHVtbihjdXJyIC8gcGFyZW50ICsgMSk7CisJYWRkSW50 MzJDb2x1bW4oMCk7CisJLyogd2UgZG9uJ3Qgc2VuZCBmaWxsZXIgY29sdW1uIGhlcmUgdG8gbWlu aW1pemUgbmV0d29yayB0cmFmZmljIGFuZCBXQUwgKi8KK30KKworLyoKKyAqIFVuaXZlcnNhbCB3 cmFwcGVyIGZvciBzZW5kaW5nIGRhdGEgaW4gYmluYXJ5IGZvcm1hdAorICovCitzdGF0aWMgdm9p ZAoraW5pdFBvcHVsYXRlVGFibGVDb3B5QmluYXJ5KFBHY29ubiAqY29uLCBjaGFyICp0YWJsZSwg Y2hhciAqY29sdW1ucywKKwkJCQkJCQlpbnQgY291bnRlciwgaW50NjRfdCBiYXNlLCBpbml0Um93 TWV0aG9kQmluYXJ5IGluaXRfcm93KQoreworCWludAkJCW47CisJUEdyZXN1bHQgICAqcmVzOwor CWNoYXIJCWNvcHlfc3RhdGVtZW50WzI1Nl07CisJY29uc3QgY2hhciAqY29weV9zdGF0ZW1lbnRf Zm10ID0gImNvcHkgJXMgKCVzKSBmcm9tIHN0ZGluIChmb3JtYXQgYmluYXJ5KSI7CisJaW50NjRf dAkJc3RhcnQgPSBiYXNlICogY291bnRlcjsKKworCWJpbl9jb3B5X2J1ZmZlcl9sZW5ndGggPSAw OworCisJLyogVXNlIENPUFkgd2l0aCBGUkVFWkUgb24gdjE0IGFuZCBsYXRlciBmb3IgYWxsIG9y ZGluYXJ5IHRhYmxlcyAqLworCWlmICgoUFFzZXJ2ZXJWZXJzaW9uKGNvbikgPj0gMTQwMDAwKSAm JgorCQlnZXRfdGFibGVfcmVsa2luZChjb24sIHRhYmxlKSA9PSBSRUxLSU5EX1JFTEFUSU9OICYm CisJCSFtdWx0aV94YWN0KQorCQljb3B5X3N0YXRlbWVudF9mbXQgPSAiY29weSAlcyAoJXMpIGZy b20gc3RkaW4gd2l0aCAoZm9ybWF0IGJpbmFyeSwgZnJlZXplIG9uKSI7CisKKwluID0gcGdfc25w cmludGYoY29weV9zdGF0ZW1lbnQsIHNpemVvZihjb3B5X3N0YXRlbWVudCksIGNvcHlfc3RhdGVt ZW50X2ZtdCwgdGFibGUsIGNvbHVtbnMpOworCWlmIChuID49IHNpemVvZihjb3B5X3N0YXRlbWVu dCkpCisJCXBnX2ZhdGFsKCJpbnZhbGlkIGJ1ZmZlciBzaXplOiBtdXN0IGJlIGF0IGxlYXN0ICVk IGNoYXJhY3RlcnMgbG9uZyIsIG4pOworCWVsc2UgaWYgKG4gPT0gLTEpCisJCXBnX2ZhdGFsKCJp bnZhbGlkIGZvcm1hdCBzdHJpbmciKTsKKworCXJlcyA9IFBRZXhlYyhjb24sIGNvcHlfc3RhdGVt ZW50KTsKKworCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX0NPUFlfSU4pCisJCXBn X2ZhdGFsKCJ1bmV4cGVjdGVkIGNvcHkgaW4gcmVzdWx0OiAlcyIsIFBRZXJyb3JNZXNzYWdlKGNv bikpOworCVBRY2xlYXIocmVzKTsKKworCisJc2VuZEJpbmFyeUNvcHlIZWFkZXIoY29uKTsKKwor CisJZm9yIChpbnQ2NF90IGkgPSBzdGFydDsgaSA8IHN0YXJ0ICsgYmFzZTsgaSsrKQorCXsKKwkJ aW5pdF9yb3coY29uLCBpLCBiYXNlKTsKKworCQlpZiAoQ2FuY2VsUmVxdWVzdGVkKQorCQkJYnJl YWs7CisKKwkJc2hvd1BvcHVsYXRlVGFibGVDb3B5UHJvZ3Jlc3ModGFibGUsIGksIGJhc2UgKiBz Y2FsZSk7CisJfQorCisJcmVzID0gUFFnZXRSZXN1bHQoY29uKTsKKworCUFzc2VydChiaW5fY29w eV9idWZmZXJfbGVuZ3RoIDw9IEJJTl9DT1BZX0JVRl9TSVpFKTsKKworCWlmIChQUXJlc3VsdFN0 YXR1cyhyZXMpID09IFBHUkVTX0NPUFlfSU4pCisJCVBRcHV0Q29weURhdGEoY29uLCAoY2hhciAq KSBiaW5fY29weV9idWZmZXIsIGJpbl9jb3B5X2J1ZmZlcl9sZW5ndGgpOworCWVsc2UKKwkJZnBy aW50ZihzdGRlcnIsICJVbmV4cGVjdGVkIG1vZGUgJWQgaW5zdGVhZCBvZiAlZFxuIiwgUFFyZXN1 bHRTdGF0dXMocmVzKSwgUEdSRVNfQ09QWV9JTik7CisJUFFjbGVhcihyZXMpOworCisKKwlzZW5k QmluYXJ5Q29weVRyYWlsZXIoY29uKTsKKworCisJcmVzID0gUFFnZXRSZXN1bHQoY29uKTsKKwlp ZiAoUFFyZXN1bHRTdGF0dXMocmVzKSA9PSBQR1JFU19DT1BZX0lOKQorCXsKKwkJaWYgKFBRcHV0 Q29weUVuZChjb24sIE5VTEwpID09IDEpCS8qIHN1Y2Nlc3MgKi8KKwkJeworCQkJUFFjbGVhcihy ZXMpOworCQkJcmVzID0gUFFnZXRSZXN1bHQoY29uKTsKKwkJCWlmIChQUXJlc3VsdFN0YXR1cyhy ZXMpICE9IFBHUkVTX0NPTU1BTkRfT0spCisJCQkJZnByaW50ZihzdGRlcnIsICJFcnJvcjogJXNc biIsIFBRZXJyb3JNZXNzYWdlKGNvbikpOworCQl9CisJCWVsc2UKKwkJCWZwcmludGYoc3RkZXJy LCAiRXJyb3I6ICVzXG4iLCBQUWVycm9yTWVzc2FnZShjb24pKTsKKwl9CisJUFFjbGVhcihyZXMp OworfQorCisvKgorICogV3JhcHBlciBmb3IgYmluYXJ5IGRhdGEgbG9hZAorICovCitzdGF0aWMg dm9pZAoraW5pdEdlbmVyYXRlRGF0YUNsaWVudFNpZGVCaW5hcnlGcm10KFBHY29ubiAqY29uKQor eworCisJZnByaW50ZihzdGRlcnIsICJCSU5BUlkgbW9kZS4uLlxuIik7CiAKLQlmcHJpbnRmKHN0 ZGVyciwgImdlbmVyYXRpbmcgZGF0YSAoc2VydmVyLXNpZGUpLi4uXG4iKTsKKwliaW5fY29weV9i dWZmZXIgPSBwZ19tYWxsb2MoQklOX0NPUFlfQlVGX1NJWkUpOworCWJpbl9jb3B5X2J1ZmZlcl9s ZW5ndGggPSAwOwogCiAJLyoKLQkgKiB3ZSBkbyBhbGwgb2YgdGhpcyBpbiBvbmUgdHJhbnNhY3Rp b24gdG8gZW5hYmxlIHRoZSBiYWNrZW5kJ3MKLQkgKiBkYXRhLWxvYWRpbmcgb3B0aW1pemF0aW9u cworCSAqIHdlIGRvIGFsbCBvZiB0aGlzIGluIG11bHRpcGxlIHRyYW5zYWN0aW9ucyB0byBtaW5p bWl6ZSBsb2FkIG9uIERCCisJICogc2VydmVyIGFuZCBwZXJoYXBzIGluIGZ1dHVyZSBhbGxvdyBs b2FkIGluIHBhcmFsbGVsIHNlc3Npb25zCiAJICovCiAJZXhlY3V0ZVN0YXRlbWVudChjb24sICJi ZWdpbiIpOwogCiAJLyogdHJ1bmNhdGUgYXdheSBhbnkgb2xkIGRhdGEgKi8KIAlpbml0VHJ1bmNh dGVUYWJsZXMoY29uKTsKIAorCWlmIChtdWx0aV94YWN0KQorCQlleGVjdXRlU3RhdGVtZW50KGNv biwgImNvbW1pdCIpOworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBzY2FsZTsgaSsrKQorCXsKKwkJ aWYgKG11bHRpX3hhY3QpCisJCQlleGVjdXRlU3RhdGVtZW50KGNvbiwgImJlZ2luIik7CisKKwkJ aW5pdFBvcHVsYXRlVGFibGVDb3B5QmluYXJ5KGNvbiwgInBnYmVuY2hfYnJhbmNoZXMiLCAiYmlk LCBiYmFsYW5jZSIsCisJCQkJCQkJCQlpLCBuYnJhbmNoZXMsIGluaXRCcmFuY2hCaW5hcnkpOwor CQlpbml0UG9wdWxhdGVUYWJsZUNvcHlCaW5hcnkoY29uLCAicGdiZW5jaF90ZWxsZXJzIiwgInRp ZCwgYmlkLCB0YmFsYW5jZSIsCisJCQkJCQkJCQlpLCBudGVsbGVycywgaW5pdFRlbGxlckJpbmFy eSk7CisJCWluaXRQb3B1bGF0ZVRhYmxlQ29weUJpbmFyeShjb24sICJwZ2JlbmNoX2FjY291bnRz IiwgImFpZCwgYmlkLCBhYmFsYW5jZSIsCisJCQkJCQkJCQlpLCBuYWNjb3VudHMsIGluaXRBY2Nv dW50QmluYXJ5KTsKKworCQlpZiAobXVsdGlfeGFjdCkKKwkJCWV4ZWN1dGVTdGF0ZW1lbnQoY29u LCAiY29tbWl0Iik7CisJfQorCisJaWYgKCFtdWx0aV94YWN0KQorCQlleGVjdXRlU3RhdGVtZW50 KGNvbiwgImNvbW1pdCIpOworCisJcGdfZnJlZShiaW5fY29weV9idWZmZXIpOworfQorCisvKgor ICogRmlsbCB0aGUgc3RhbmRhcmQgdGFibGVzIHdpdGggc29tZSBkYXRhIGdlbmVyYXRlZCBhbmQg c2VudCBmcm9tIHRoZSBjbGllbnQuCisgKi8KK3N0YXRpYyB2b2lkCitpbml0R2VuZXJhdGVEYXRh Q2xpZW50U2lkZShQR2Nvbm4gKmNvbikKK3sKKwlmcHJpbnRmKHN0ZGVyciwgImdlbmVyYXRpbmcg ZGF0YSAoY2xpZW50LXNpZGUgYXMgJXMgdHJhbnNhY3Rpb24lcykgaW4gIiwKKwkJCW11bHRpX3hh Y3QgPyAibXVsdGlwbGUiIDogInNpbmdsZSIsIG11bHRpX3hhY3QgPyAicyIgOiAiIik7CisKKwlk YXRhX2xvYWRfc3RhcnQgPSBwZ190aW1lX25vdygpOworCisJc3dpdGNoIChkYXRhX2dlbmVyYXRp b25fdHlwZSkKKwl7CisJCWNhc2UgSU5JVF9TVEVQX0dFTl9UWVBFX0NPUFlfVEVYVDoKKwkJCWlu aXRHZW5lcmF0ZURhdGFDbGllbnRTaWRlVGV4dEZybXQoY29uKTsKKwkJCWJyZWFrOworCQljYXNl IElOSVRfU1RFUF9HRU5fVFlQRV9DT1BZX0JJTkFSWToKKwkJCWluaXRHZW5lcmF0ZURhdGFDbGll bnRTaWRlQmluYXJ5RnJtdChjb24pOworCQkJYnJlYWs7CisJfQorfQorCisvKgorICogR2VuZXJh dGluZyBkYXRhIHZpYSBJTlNFUlQgLi4gU0VMRUNUIC4uIEZST00gZ2VuZXJhdGVfc2VyaWVzCisg KiBQb3NzaWJseSBhcyAiT25lIHRyYW5zYWN0aW9uIHBlciBzY2FsZSIgaW4gbXVsdGktdHJhbnNh Y3Rpb24gbW9kZQorICovCitzdGF0aWMgdm9pZAorZ2VuZXJhdGVEYXRhSW5zZXJ0U2VyaWVzKFBH Y29ubiAqY29uKQoreworCVBRRXhwQnVmZmVyRGF0YSBzcWw7CisKKwlmcHJpbnRmKHN0ZGVyciwg InZpYSBJTlNFUlQgLi4gU0VMRUNUIGdlbmVyYXRlX3Nlcmllcy4uLiBpbiBtdWx0aXBsZSBUWE4o cylcbiIpOworCiAJaW5pdFBRRXhwQnVmZmVyKCZzcWwpOwogCi0JcHJpbnRmUFFFeHBCdWZmZXIo JnNxbCwKLQkJCQkJICAiaW5zZXJ0IGludG8gcGdiZW5jaF9icmFuY2hlcyhiaWQsYmJhbGFuY2Up ICIKLQkJCQkJICAic2VsZWN0IGJpZCwgMCAiCi0JCQkJCSAgImZyb20gZ2VuZXJhdGVfc2VyaWVz KDEsICVkKSBhcyBiaWQiLCBuYnJhbmNoZXMgKiBzY2FsZSk7Ci0JZXhlY3V0ZVN0YXRlbWVudChj b24sIHNxbC5kYXRhKTsKLQotCXByaW50ZlBRRXhwQnVmZmVyKCZzcWwsCi0JCQkJCSAgImluc2Vy dCBpbnRvIHBnYmVuY2hfdGVsbGVycyh0aWQsYmlkLHRiYWxhbmNlKSAiCi0JCQkJCSAgInNlbGVj dCB0aWQsICh0aWQgLSAxKSAvICVkICsgMSwgMCAiCi0JCQkJCSAgImZyb20gZ2VuZXJhdGVfc2Vy aWVzKDEsICVkKSBhcyB0aWQiLCBudGVsbGVycywgbnRlbGxlcnMgKiBzY2FsZSk7Ci0JZXhlY3V0 ZVN0YXRlbWVudChjb24sIHNxbC5kYXRhKTsKLQotCXByaW50ZlBRRXhwQnVmZmVyKCZzcWwsCi0J CQkJCSAgImluc2VydCBpbnRvIHBnYmVuY2hfYWNjb3VudHMoYWlkLGJpZCxhYmFsYW5jZSxmaWxs ZXIpICIKLQkJCQkJICAic2VsZWN0IGFpZCwgKGFpZCAtIDEpIC8gJWQgKyAxLCAwLCAnJyAiCi0J CQkJCSAgImZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsICIgSU5UNjRfRk9STUFUICIpIGFzIGFpZCIs Ci0JCQkJCSAgbmFjY291bnRzLCAoaW50NjQpIG5hY2NvdW50cyAqIHNjYWxlKTsKLQlleGVjdXRl U3RhdGVtZW50KGNvbiwgc3FsLmRhdGEpOworCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAiYmVnaW4i KTsKKworCS8qIHRydW5jYXRlIGF3YXkgYW55IG9sZCBkYXRhICovCisJaW5pdFRydW5jYXRlVGFi bGVzKGNvbik7CisKKwlpZiAobXVsdGlfeGFjdCkKKwkJZXhlY3V0ZVN0YXRlbWVudChjb24sICJj b21taXQiKTsKKworCWZvciAoaW50IGkgPSAwOyBpIDwgc2NhbGU7IGkrKykKKwl7CisJCWlmICht dWx0aV94YWN0KQorCQkJZXhlY3V0ZVN0YXRlbWVudChjb24sICJiZWdpbiIpOworCisJCXByaW50 ZlBRRXhwQnVmZmVyKCZzcWwsCisJCQkJCQkgICJpbnNlcnQgaW50byBwZ2JlbmNoX2JyYW5jaGVz KGJpZCwgYmJhbGFuY2UpICIKKwkJCQkJCSAgInZhbHVlcyglZCwgMCkiLCBpICsgMSk7CisJCWV4 ZWN1dGVTdGF0ZW1lbnQoY29uLCBzcWwuZGF0YSk7CisKKwkJcHJpbnRmUFFFeHBCdWZmZXIoJnNx bCwKKwkJCQkJCSAgImluc2VydCBpbnRvIHBnYmVuY2hfdGVsbGVycyh0aWQsIGJpZCwgdGJhbGFu Y2UpICIKKwkJCQkJCSAgInNlbGVjdCB0aWQgKyAxLCB0aWQgLyAlZCArIDEsIDAgIgorCQkJCQkJ ICAiZnJvbSBnZW5lcmF0ZV9zZXJpZXMoJWQsICVkKSBhcyB0aWQiLAorCQkJCQkJICBudGVsbGVy cywgaSAqIG50ZWxsZXJzLCAoaSArIDEpICogbnRlbGxlcnMgLSAxKTsKKwkJZXhlY3V0ZVN0YXRl bWVudChjb24sIHNxbC5kYXRhKTsKKworCQlwcmludGZQUUV4cEJ1ZmZlcigmc3FsLAorCQkJCQkJ ICAiaW5zZXJ0IGludG8gcGdiZW5jaF9hY2NvdW50cyhhaWQsIGJpZCwgYWJhbGFuY2UsICIKKwkJ CQkJCSAgImZpbGxlcikgIgorCQkJCQkJICAic2VsZWN0IGFpZCArIDEsIGFpZCAvICVkICsgMSwg MCwgJycgIgorCQkJCQkJICAiZnJvbSBnZW5lcmF0ZV9zZXJpZXMoIiBJTlQ2NF9GT1JNQVQgIiwg IgorCQkJCQkJICBJTlQ2NF9GT1JNQVQgIikgYXMgYWlkIiwKKwkJCQkJCSAgbmFjY291bnRzLCAo aW50NjQpIGkgKiBuYWNjb3VudHMsCisJCQkJCQkgIChpbnQ2NCkgKGkgKyAxKSAqIG5hY2NvdW50 cyAtIDEpOworCQlleGVjdXRlU3RhdGVtZW50KGNvbiwgc3FsLmRhdGEpOworCisJCWlmIChtdWx0 aV94YWN0KQorCQkJZXhlY3V0ZVN0YXRlbWVudChjb24sICJjb21taXQiKTsKKwl9CisKKwlpZiAo IW11bHRpX3hhY3QpCisJCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAiY29tbWl0Iik7CiAKIAl0ZXJt UFFFeHBCdWZmZXIoJnNxbCk7Cit9CisKKy8qCisgKiBHZW5lcmF0aW5nIGRhdGEgdmlhIElOU0VS VCAuLiBTRUxFQ1QgLi4gRlJPTSB1bm5lc3QKKyAqIFBvc3NpYmx5IGFzICJPbmUgdHJhbnNhY3Rp b24gcGVyIHNjYWxlIiBpbiBtdWx0aS10YW5zYWN0aW9uIG1vZGUKKyAqLworc3RhdGljIHZvaWQK K2dlbmVyYXRlRGF0YUluc2VydFVubmVzdChQR2Nvbm4gKmNvbikKK3sKKwlQUUV4cEJ1ZmZlckRh dGEgc3FsOwogCi0JZXhlY3V0ZVN0YXRlbWVudChjb24sICJjb21taXQiKTsKKwlmcHJpbnRmKHN0 ZGVyciwgInZpYSBJTlNFUlQgLi4gU0VMRUNUIHVubmVzdC4uLlxuIik7CisKKwlpbml0UFFFeHBC dWZmZXIoJnNxbCk7CisKKwlleGVjdXRlU3RhdGVtZW50KGNvbiwgImJlZ2luIik7CisKKwkvKiB0 cnVuY2F0ZSBhd2F5IGFueSBvbGQgZGF0YSAqLworCWluaXRUcnVuY2F0ZVRhYmxlcyhjb24pOwor CisJaWYgKG11bHRpX3hhY3QpCisJCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAiY29tbWl0Iik7CisK Kwlmb3IgKGludCBzID0gMDsgcyA8IHNjYWxlOyBzKyspCisJeworCQlpZiAobXVsdGlfeGFjdCkK KwkJCWV4ZWN1dGVTdGF0ZW1lbnQoY29uLCAiYmVnaW4iKTsKKworCQlwcmludGZQUUV4cEJ1ZmZl cigmc3FsLAorCQkJCQkJICAiaW5zZXJ0IGludG8gcGdiZW5jaF9icmFuY2hlcyhiaWQsYmJhbGFu Y2UpICIKKwkJCQkJCSAgInZhbHVlcyglZCwgMCkiLCBzICsgMSk7CisJCWV4ZWN1dGVTdGF0ZW1l bnQoY29uLCBzcWwuZGF0YSk7CisKKwkJcHJpbnRmUFFFeHBCdWZmZXIoJnNxbCwKKwkJCQkJCSAg Imluc2VydCBpbnRvIHBnYmVuY2hfdGVsbGVycyh0aWQsIGJpZCwgdGJhbGFuY2UpICIKKwkJCQkJ CSAgInNlbGVjdCB1bm5lc3QoYXJyYXlfYWdnKHMuaSBvcmRlciBieSBzLmkpKSBhcyB0aWQsICIK KwkJCQkJCSAgIiVkIGFzIGJpZCwgMCBhcyB0YmFsYW5jZSAiCisJCQkJCQkgICJmcm9tIGdlbmVy YXRlX3NlcmllcyglZCwgJWQpIGFzIHMoaSkiLAorCQkJCQkJICBzICsgMSwgcyAqIG50ZWxsZXJz ICsgMSwgKHMgKyAxKSAqIG50ZWxsZXJzKTsKKwkJZXhlY3V0ZVN0YXRlbWVudChjb24sIHNxbC5k YXRhKTsKKworCQlwcmludGZQUUV4cEJ1ZmZlcigmc3FsLAorCQkJCQkJICAid2l0aCBkYXRhIGFz ICgiCisJCQkJCQkgICIgICBzZWxlY3QgZ2VuZXJhdGVfc2VyaWVzKCIgSU5UNjRfRk9STUFUICIs ICIKKwkJCQkJCSAgSU5UNjRfRk9STUFUICIpIGFzIGkpICIKKwkJCQkJCSAgImluc2VydCBpbnRv IHBnYmVuY2hfYWNjb3VudHMoYWlkLCBiaWQsICIKKwkJCQkJCSAgImFiYWxhbmNlLCBmaWxsZXIp ICIKKwkJCQkJCSAgInNlbGVjdCB1bm5lc3QoYWlkKSwgdW5uZXN0KGJpZCksIDAgYXMgYWJhbGFu Y2UsICIKKwkJCQkJCSAgIicnIGFzIGZpbGxlciAiCisJCQkJCQkgICJmcm9tIChzZWxlY3QgYXJy YXlfYWdnKGkrMSkgYWlkLCAiCisJCQkJCQkgICJhcnJheV9hZ2coaS8lZCArIDEpIGJpZCBmcm9t IGRhdGEpIiwKKwkJCQkJCSAgKGludDY0KSBzICogbmFjY291bnRzICsgMSwKKwkJCQkJCSAgKGlu dDY0KSAocyArIDEpICogbmFjY291bnRzLCBuYWNjb3VudHMpOworCQlleGVjdXRlU3RhdGVtZW50 KGNvbiwgc3FsLmRhdGEpOworCisJCWlmIChtdWx0aV94YWN0KQorCQkJZXhlY3V0ZVN0YXRlbWVu dChjb24sICJjb21taXQiKTsKKwl9CisKKwlpZiAoIW11bHRpX3hhY3QpCisJCWV4ZWN1dGVTdGF0 ZW1lbnQoY29uLCAiY29tbWl0Iik7CisKKwl0ZXJtUFFFeHBCdWZmZXIoJnNxbCk7Cit9CisKKy8q CisgKiBGaWxsIHRoZSBzdGFuZGFyZCB0YWJsZXMgd2l0aCBzb21lIGRhdGEgZ2VuZXJhdGVkIG9u IHRoZSBzZXJ2ZXIgc2lkZQorICoKKyAqIEFzIGFscmVhZHkgdGhlIGNhc2Ugd2l0aCB0aGUgY2xp ZW50LXNpZGUgZGF0YSBnZW5lcmF0aW9uLCB0aGUgZmlsbGVyCisgKiBjb2x1bW4gZGVmYXVsdHMg dG8gTlVMTCBpbiBwZ2JlbmNoX2JyYW5jaGVzIGFuZCBwZ2JlbmNoX3RlbGxlcnMsCisgKiBhbmQg aXMgYSBibGFuay1wYWRkZWQgc3RyaW5nIGluIHBnYmVuY2hfYWNjb3VudHMuCisgKi8KK3N0YXRp YyB2b2lkCitpbml0R2VuZXJhdGVEYXRhU2VydmVyU2lkZShQR2Nvbm4gKmNvbikKK3sKKwlmcHJp bnRmKHN0ZGVyciwgImdlbmVyYXRpbmcgZGF0YSAoc2VydmVyLXNpZGUgYXMgJXMgdHJhbnNhY3Rp b24lcykgIiwKKwkJCW11bHRpX3hhY3QgPyAibXVsdGlwbGUiIDogInNpbmdsZSIsIG11bHRpX3hh Y3QgPyAicyIgOiAiIik7CisKKwlzd2l0Y2ggKGRhdGFfZ2VuZXJhdGlvbl90eXBlKQorCXsKKwkJ Y2FzZSBJTklUX1NURVBfR0VOX1RZUEVfSU5TRVJUX1NFUklFUzoKKwkJCWdlbmVyYXRlRGF0YUlu c2VydFNlcmllcyhjb24pOworCQkJYnJlYWs7CisJCWNhc2UgSU5JVF9TVEVQX0dFTl9UWVBFX0lO U0VSVF9VTk5FU1Q6CisJCQlnZW5lcmF0ZURhdGFJbnNlcnRVbm5lc3QoY29uKTsKKwkJCWJyZWFr OworCX0KIH0KIAogLyoKQEAgLTUzMDYsNiArNTgzMyw4IEBAIGluaXRDcmVhdGVGS2V5cyhQR2Nv bm4gKmNvbikKIHN0YXRpYyB2b2lkCiBjaGVja0luaXRTdGVwcyhjb25zdCBjaGFyICppbml0aWFs aXplX3N0ZXBzKQogeworCWNoYXIJCWRhdGFfaW5pdF90eXBlID0gMDsKKwogCWlmIChpbml0aWFs aXplX3N0ZXBzWzBdID09ICdcMCcpCiAJCXBnX2ZhdGFsKCJubyBpbml0aWFsaXphdGlvbiBzdGVw cyBzcGVjaWZpZWQiKTsKIApAQCAtNTMxNyw3ICs1ODQ2LDIyIEBAIGNoZWNrSW5pdFN0ZXBzKGNv bnN0IGNoYXIgKmluaXRpYWxpemVfc3RlcHMpCiAJCQlwZ19sb2dfZXJyb3JfZGV0YWlsKCJBbGxv d2VkIHN0ZXAgY2hhcmFjdGVycyBhcmU6IFwiIiBBTExfSU5JVF9TVEVQUyAiXCIuIik7CiAJCQll eGl0KDEpOwogCQl9CisKKwkJc3dpdGNoICgqc3RlcCkKKwkJeworCQkJY2FzZSBJTklUX1NURVBf R0VOX1RZUEVfQ09QWV9URVhUOgorCQkJY2FzZSBJTklUX1NURVBfR0VOX1RZUEVfQ09QWV9CSU5B Ulk6CisJCQljYXNlIElOSVRfU1RFUF9HRU5fVFlQRV9JTlNFUlRfU0VSSUVTOgorCQkJY2FzZSBJ TklUX1NURVBfR0VOX1RZUEVfSU5TRVJUX1VOTkVTVDoKKwkJCQlkYXRhX2luaXRfdHlwZSsrOwor CQkJCWJyZWFrOworCQl9CiAJfQorCisJaWYgKGRhdGFfaW5pdF90eXBlID09IDApCisJCXBnX2xv Z193YXJuaW5nKCJObyBkYXRhIGdlbmVyYXRpb24gdHlwZSBpcyBwcm92aWRlZCIpOworCWlmIChk YXRhX2luaXRfdHlwZSA+IDEpCisJCXBnX2xvZ193YXJuaW5nKCJNb3JlIHRoYW4gb25lIHR5cGUg b2YgZGF0YSBpbml0aWFsaXphdGlvbiBpcyByZXF1ZXN0ZWQiKTsKIH0KIAogLyoKQEAgLTUzNTUs MTQgKzU4OTksMjQgQEAgcnVuSW5pdFN0ZXBzKGNvbnN0IGNoYXIgKmluaXRpYWxpemVfc3RlcHMp CiAJCQkJb3AgPSAiY3JlYXRlIHRhYmxlcyI7CiAJCQkJaW5pdENyZWF0ZVRhYmxlcyhjb24pOwog CQkJCWJyZWFrOwotCQkJY2FzZSAnZyc6CisJCQljYXNlIElOSVRfU1RFUF9HRU5fVFlQRV9DT1BZ X1RFWFQ6CisJCQljYXNlIElOSVRfU1RFUF9HRU5fVFlQRV9DT1BZX0JJTkFSWToKIAkJCQlvcCA9 ICJjbGllbnQtc2lkZSBnZW5lcmF0ZSI7CisJCQkJZGF0YV9nZW5lcmF0aW9uX3R5cGUgPSAqc3Rl cDsKIAkJCQlpbml0R2VuZXJhdGVEYXRhQ2xpZW50U2lkZShjb24pOwogCQkJCWJyZWFrOwotCQkJ Y2FzZSAnRyc6CisJCQljYXNlIElOSVRfU1RFUF9HRU5fVFlQRV9JTlNFUlRfU0VSSUVTOgorCQkJ Y2FzZSBJTklUX1NURVBfR0VOX1RZUEVfSU5TRVJUX1VOTkVTVDoKIAkJCQlvcCA9ICJzZXJ2ZXIt c2lkZSBnZW5lcmF0ZSI7CisJCQkJZGF0YV9nZW5lcmF0aW9uX3R5cGUgPSAqc3RlcDsKIAkJCQlp bml0R2VuZXJhdGVEYXRhU2VydmVyU2lkZShjb24pOwogCQkJCWJyZWFrOworCQkJY2FzZSBJTklU X1NURVBfR0VOX1RZUEVfU0lOR0xFX1hBQ1Q6CisJCQkJbXVsdGlfeGFjdCA9IGZhbHNlOworCQkJ CWJyZWFrOworCQkJY2FzZSBJTklUX1NURVBfR0VOX1RZUEVfTVVMVElfWEFDVDoKKwkJCQltdWx0 aV94YWN0ID0gdHJ1ZTsKKwkJCQlicmVhazsKIAkJCWNhc2UgJ3YnOgogCQkJCW9wID0gInZhY3V1 bSI7CiAJCQkJaW5pdFZhY3V1bShjb24pOwpAQCAtNjk0MCw3ICs3NDk0LDYgQEAgbWFpbihpbnQg YXJnYywgY2hhciAqKmFyZ3YpCiAJCQljYXNlICdJJzoKIAkJCQlwZ19mcmVlKGluaXRpYWxpemVf c3RlcHMpOwogCQkJCWluaXRpYWxpemVfc3RlcHMgPSBwZ19zdHJkdXAob3B0YXJnKTsKLQkJCQlj aGVja0luaXRTdGVwcyhpbml0aWFsaXplX3N0ZXBzKTsKIAkJCQlpbml0aWFsaXphdGlvbl9vcHRp b25fc2V0ID0gdHJ1ZTsKIAkJCQlicmVhazsKIAkJCWNhc2UgJ2onOgkJCS8qIGpvYnMgKi8KQEAg LTcyNDUsNiArNzc5OCw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCQkJfQogCQl9 CiAKKwkJY2hlY2tJbml0U3RlcHMoaW5pdGlhbGl6ZV9zdGVwcyk7CiAJCXJ1bkluaXRTdGVwcyhp bml0aWFsaXplX3N0ZXBzKTsKIAkJZXhpdCgwKTsKIAl9CmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn YmVuY2gvdC8wMDFfcGdiZW5jaF93aXRoX3NlcnZlci5wbCBiL3NyYy9iaW4vcGdiZW5jaC90LzAw MV9wZ2JlbmNoX3dpdGhfc2VydmVyLnBsCmluZGV4IGI3Njg1ZWE1ZDIwLi42Yzc3ODNhNzdmNyAx MDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ2JlbmNoL3QvMDAxX3BnYmVuY2hfd2l0aF9zZXJ2ZXIucGwK KysrIGIvc3JjL2Jpbi9wZ2JlbmNoL3QvMDAxX3BnYmVuY2hfd2l0aF9zZXJ2ZXIucGwKQEAgLTE2 LDI1ICsxNiwzMCBAQCBzdWIgY2hlY2tfZGF0YV9zdGF0ZQogCWxvY2FsICRUZXN0OjpCdWlsZGVy OjpMZXZlbCA9ICRUZXN0OjpCdWlsZGVyOjpMZXZlbCArIDE7CiAJbXkgJG5vZGUgPSBzaGlmdDsK IAlteSAkdHlwZSA9IHNoaWZ0OworCW15ICRzcWxfcmVzdWx0OwogCi0JbXkgJHNxbF9yZXN1bHQg PSAkbm9kZS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JCSdTRUxFQ1QgY291bnQoKikgQVMgbnVs bF9jb3VudCBGUk9NIHBnYmVuY2hfYWNjb3VudHMgV0hFUkUgZmlsbGVyIElTIE5VTEwgTElNSVQg MTA7JwotCSk7Ci0JaXMoJHNxbF9yZXN1bHQsICcwJywKLQkJIiR0eXBlOiBmaWxsZXIgY29sdW1u IG9mIHBnYmVuY2hfYWNjb3VudHMgaGFzIG5vIE5VTEwgZGF0YSIpOwogCSRzcWxfcmVzdWx0ID0g JG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCQknU0VMRUNUIGNvdW50KCopIEFTIG51bGxf Y291bnQgRlJPTSBwZ2JlbmNoX2JyYW5jaGVzIFdIRVJFIGZpbGxlciBJUyBOVUxMOycKIAkpOwog CWlzKCRzcWxfcmVzdWx0LCAnMScsCiAJCSIkdHlwZTogZmlsbGVyIGNvbHVtbiBvZiBwZ2JlbmNo X2JyYW5jaGVzIGhhcyBvbmx5IE5VTEwgZGF0YSIpOworCiAJJHNxbF9yZXN1bHQgPSAkbm9kZS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJCSdTRUxFQ1QgY291bnQoKikgQVMgbnVsbF9jb3VudCBG Uk9NIHBnYmVuY2hfdGVsbGVycyBXSEVSRSBmaWxsZXIgSVMgTlVMTDsnCiAJKTsKIAlpcygkc3Fs X3Jlc3VsdCwgJzEwJywKIAkJIiR0eXBlOiBmaWxsZXIgY29sdW1uIG9mIHBnYmVuY2hfdGVsbGVy cyBoYXMgb25seSBOVUxMIGRhdGEiKTsKKworCSRzcWxfcmVzdWx0ID0gJG5vZGUtPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCQknU0VMRUNUIGNvdW50KCopIEFTIG51bGxfY291bnQgRlJPTSBwZ2Jl bmNoX2FjY291bnRzIFdIRVJFIGZpbGxlciBJUyBOVUxMIExJTUlUIDEwOycKKwkpOworCWlzKCRz cWxfcmVzdWx0LCAnMCcsCisJCSIkdHlwZTogZmlsbGVyIGNvbHVtbiBvZiBwZ2JlbmNoX2FjY291 bnRzIGhhcyBubyBOVUxMIGRhdGEiKTsKKwogCSRzcWxfcmVzdWx0ID0gJG5vZGUtPnNhZmVfcHNx bCgncG9zdGdyZXMnLAogCQknU0VMRUNUIGNvdW50KCopIEFTIGRhdGFfY291bnQgRlJPTSBwZ2Jl bmNoX2hpc3Rvcnk7Jyk7Ci0JaXMoJHNxbF9yZXN1bHQsICcwJywgIiR0eXBlOiBwZ2JlbmNoX2hp c3RvcnkgaGFzIG5vIGRhdGEiKTsKKwlpcygkc3FsX3Jlc3VsdCwgJzAnLAorCQkiJHR5cGU6IHBn YmVuY2hfaGlzdG9yeSBoYXMgbm8gZGF0YSIpOwogfQogCiAjIHN0YXJ0IGEgcGdiZW5jaCBzcGVj aWZpYyBzZXJ2ZXIKQEAgLTExMiw2ICsxMTcsNyBAQCAkbm9kZS0+cGdiZW5jaCgKIAlbcXJ7UGVy aGFwcyB5b3UgbmVlZCB0byBkbyBpbml0aWFsaXphdGlvbn1dLAogCSdydW4gd2l0aG91dCBpbml0 Jyk7CiAKKwogIyBJbml0aWFsaXplIHBnYmVuY2ggdGFibGVzIHNjYWxlIDEKICRub2RlLT5wZ2Jl bmNoKAogCSctaScsIDAsCkBAIC0xMjUsNyArMTMxLDcgQEAgJG5vZGUtPnBnYmVuY2goCiAJJ3Bn YmVuY2ggc2NhbGUgMSBpbml0aWFsaXphdGlvbicsKTsKIAogIyBDaGVjayBkYXRhIHN0YXRlLCBh ZnRlciBjbGllbnQtc2lkZSBkYXRhIGdlbmVyYXRpb24uCi1jaGVja19kYXRhX3N0YXRlKCRub2Rl LCAnY2xpZW50LXNpZGUnKTsKK2NoZWNrX2RhdGFfc3RhdGUoJG5vZGUsICdjbGllbnQtc2lkZSAo ZGVmYXVsdCBvcHRpb25zKScpOwogCiAjIEFnYWluLCB3aXRoIGFsbCBwb3NzaWJsZSBvcHRpb25z CiAkbm9kZS0+cGdiZW5jaCgKQEAgLTE0Myw2ICsxNDksNyBAQCAkbm9kZS0+cGdiZW5jaCgKIAkJ cXJ7ZG9uZSBpbiBcZCtcLlxkXGQgcyB9CiAJXSwKIAkncGdiZW5jaCBzY2FsZSAxIGluaXRpYWxp emF0aW9uJyk7CitjaGVja19kYXRhX3N0YXRlKCRub2RlLCAnY2xpZW50LXNpZGUgKGFsbCBvcHRp b25zKScpOwogCiAjIFRlc3QgaW50ZXJhY3Rpb24gb2YgLS1pbml0LXN0ZXBzIHdpdGggbGVnYWN5 IHN0ZXAtc2VsZWN0aW9uIG9wdGlvbnMKICRub2RlLT5wZ2JlbmNoKApAQCAtMTU0LDcgKzE2MSw3 IEBAICRub2RlLT5wZ2JlbmNoKAogCQlxcntjcmVhdGluZyB0YWJsZXN9LAogCQlxcntjcmVhdGlu ZyAzIHBhcnRpdGlvbnN9LAogCQlxcntjcmVhdGluZyBwcmltYXJ5IGtleXN9LAotCQlxcntnZW5l cmF0aW5nIGRhdGEgXChzZXJ2ZXItc2lkZVwpfSwKKwkJcXJ7Z2VuZXJhdGluZyBkYXRhIFwoc2Vy dmVyLXNpZGUgYXMgc2luZ2xlIHRyYW5zYWN0aW9uXCl9LAogCQlxcntjcmVhdGluZyBmb3JlaWdu IGtleXN9LAogCQlxcnsoPyF2YWN1dW1pbmcpfSwgICAgIyBubyB2YWN1dW0KIAkJcXJ7ZG9uZSBp biBcZCtcLlxkXGQgcyB9CkBAIC0xNjQsNiArMTcxLDIxOSBAQCAkbm9kZS0+cGdiZW5jaCgKICMg Q2hlY2sgZGF0YSBzdGF0ZSwgYWZ0ZXIgc2VydmVyLXNpZGUgZGF0YSBnZW5lcmF0aW9uLgogY2hl Y2tfZGF0YV9zdGF0ZSgkbm9kZSwgJ3NlcnZlci1zaWRlJyk7CiAKKworIyBUZXN0IHNlcnZlci1z aWRlIGdlbmVyYXRpb24gd2l0aCBnZW5lcmF0ZV9zZXJpZXMKKyRub2RlLT5wZ2JlbmNoKAorCSct LWluaXRpYWxpemUgLS1pbml0LXN0ZXBzPWR0RycsCisJMCwKKwlbcXJ7XiR9XSwKKwlbCisJCXFy e2Ryb3BwaW5nIG9sZCB0YWJsZXN9LAorCQlxcntjcmVhdGluZyB0YWJsZXN9LAorCQlxcntnZW5l cmF0aW5nIGRhdGEgXChzZXJ2ZXItc2lkZSBhcyBzaW5nbGUgdHJhbnNhY3Rpb25cKX0sCisJCXFy e2RvbmUgaW4gXGQrXC5cZFxkIHMgfQorCV0sCisJJ3BnYmVuY2ggLS1pbml0LXN0ZXBzIHNlcnZl ci1zaWRlIGdlbmVyYXRlX3NlcmllcycpOworCisjIENoZWNrIGRhdGEgc3RhdGUsIGFmdGVyIHNl cnZlci1zaWRlIGRhdGEgZ2VuZXJhdGlvbi4KK2NoZWNrX2RhdGFfc3RhdGUoJG5vZGUsICdzZXJ2 ZXItc2lkZSAoZ2VuZXJhdGVfc2VyaWVzKScpOworCiskbm9kZS0+cGdiZW5jaCgKKwknLS1pbml0 aWFsaXplIC0taW5pdC1zdGVwcz1kdFNHJywKKwkwLAorCVtxcnteJH1dLAorCVsKKwkJcXJ7ZHJv cHBpbmcgb2xkIHRhYmxlc30sCisJCXFye2NyZWF0aW5nIHRhYmxlc30sCisJCXFye2dlbmVyYXRp bmcgZGF0YSBcKHNlcnZlci1zaWRlIGFzIHNpbmdsZSB0cmFuc2FjdGlvblwpfSwKKwkJcXJ7ZG9u ZSBpbiBcZCtcLlxkXGQgcyB9CisJXSwKKwkncGdiZW5jaCAtLWluaXQtc3RlcHMgc2VydmVyLXNp ZGUgZ2VuZXJhdGVfc2VyaWVzJyk7CisKKyMgQ2hlY2sgZGF0YSBzdGF0ZSwgYWZ0ZXIgc2VydmVy LXNpZGUgZGF0YSBnZW5lcmF0aW9uLgorY2hlY2tfZGF0YV9zdGF0ZSgkbm9kZSwgJ3NlcnZlci1z aWRlIChnZW5lcmF0ZV9zZXJpZXMgc2luZ2xlIFhBQ1QpJyk7CisKKyRub2RlLT5wZ2JlbmNoKAor CSctLWluaXRpYWxpemUgLS1pbml0LXN0ZXBzPWR0TUcnLAorCTAsCisJW3Fye14kfV0sCisJWwor CQlxcntkcm9wcGluZyBvbGQgdGFibGVzfSwKKwkJcXJ7Y3JlYXRpbmcgdGFibGVzfSwKKwkJcXJ7 Z2VuZXJhdGluZyBkYXRhIFwoc2VydmVyLXNpZGUgYXMgbXVsdGlwbGUgdHJhbnNhY3Rpb25zXCl9 LAorCQlxcntkb25lIGluIFxkK1wuXGRcZCBzIH0KKwldLAorCSdwZ2JlbmNoIC0taW5pdC1zdGVw cyBzZXJ2ZXItc2lkZSBnZW5lcmF0ZV9zZXJpZXMnKTsKKworIyBDaGVjayBkYXRhIHN0YXRlLCBh ZnRlciBzZXJ2ZXItc2lkZSBkYXRhIGdlbmVyYXRpb24uCitjaGVja19kYXRhX3N0YXRlKCRub2Rl LCAnc2VydmVyLXNpZGUgKGdlbmVyYXRlX3NlcmllcyBtdWx0aXBsZSBYQUNUcyknKTsKKworCisj IFRlc3Qgc2VydmVyLXNpZGUgZ2VuZXJhdGlvbiB3aXRoIFVOTkVTVAorJG5vZGUtPnBnYmVuY2go CisJJy0taW5pdGlhbGl6ZSAtLWluaXQtc3RlcHM9ZHRVJywKKwkwLAorCVtxcnteJH1dLAorCVsK KwkJcXJ7ZHJvcHBpbmcgb2xkIHRhYmxlc30sCisJCXFye2NyZWF0aW5nIHRhYmxlc30sCisJCXFy e2dlbmVyYXRpbmcgZGF0YSBcKHNlcnZlci1zaWRlIGFzIHNpbmdsZSB0cmFuc2FjdGlvblwpfSwK KwkJcXJ7ZG9uZSBpbiBcZCtcLlxkXGQgcyB9CisJXSwKKwkncGdiZW5jaCAtLWluaXQtc3RlcHMg c2VydmVyLXNpZGUgVU5ORVNUJyk7CisKKyMgQ2hlY2sgZGF0YSBzdGF0ZSwgYWZ0ZXIgc2VydmVy LXNpZGUgZGF0YSBnZW5lcmF0aW9uLgorY2hlY2tfZGF0YV9zdGF0ZSgkbm9kZSwgJ3NlcnZlci1z aWRlICh1bm5lc3QpJyk7CisKKyRub2RlLT5wZ2JlbmNoKAorCSctLWluaXRpYWxpemUgLS1pbml0 LXN0ZXBzPWR0U1UnLAorCTAsCisJW3Fye14kfV0sCisJWworCQlxcntkcm9wcGluZyBvbGQgdGFi bGVzfSwKKwkJcXJ7Y3JlYXRpbmcgdGFibGVzfSwKKwkJcXJ7Z2VuZXJhdGluZyBkYXRhIFwoc2Vy dmVyLXNpZGUgYXMgc2luZ2xlIHRyYW5zYWN0aW9uXCl9LAorCQlxcntkb25lIGluIFxkK1wuXGRc ZCBzIH0KKwldLAorCSdwZ2JlbmNoIC0taW5pdC1zdGVwcyBzZXJ2ZXItc2lkZSBVTk5FU1QnKTsK KworIyBDaGVjayBkYXRhIHN0YXRlLCBhZnRlciBzZXJ2ZXItc2lkZSBkYXRhIGdlbmVyYXRpb24u CitjaGVja19kYXRhX3N0YXRlKCRub2RlLCAnc2VydmVyLXNpZGUgKHVubmVzdCknKTsKKworJG5v ZGUtPnBnYmVuY2goCisJJy0taW5pdGlhbGl6ZSAtLWluaXQtc3RlcHM9ZHRNVScsCisJMCwKKwlb cXJ7XiR9XSwKKwlbCisJCXFye2Ryb3BwaW5nIG9sZCB0YWJsZXN9LAorCQlxcntjcmVhdGluZyB0 YWJsZXN9LAorCQlxcntnZW5lcmF0aW5nIGRhdGEgXChzZXJ2ZXItc2lkZSBhcyBtdWx0aXBsZSB0 cmFuc2FjdGlvbnNcKX0sCisJCXFye2RvbmUgaW4gXGQrXC5cZFxkIHMgfQorCV0sCisJJ3BnYmVu Y2ggLS1pbml0LXN0ZXBzIHNlcnZlci1zaWRlIFVOTkVTVCcpOworCisjIENoZWNrIGRhdGEgc3Rh dGUsIGFmdGVyIHNlcnZlci1zaWRlIGRhdGEgZ2VuZXJhdGlvbi4KK2NoZWNrX2RhdGFfc3RhdGUo JG5vZGUsICdzZXJ2ZXItc2lkZSAodW5uZXN0KScpOworCisKKyMgVGVzdCBjbGllbnQtc2lkZSBn ZW5lcmF0aW9uIHdpdGggQ09QWSBURVhUCiskbm9kZS0+cGdiZW5jaCgKKwknLS1pbml0aWFsaXpl IC0taW5pdC1zdGVwcz1kdGcnLAorCTAsCisJW3Fye14kfV0sCisJWworCQlxcntkcm9wcGluZyBv bGQgdGFibGVzfSwKKwkJcXJ7Y3JlYXRpbmcgdGFibGVzfSwKKwkJcXJ7Z2VuZXJhdGluZyBkYXRh IFwoY2xpZW50LXNpZGUgYXMgc2luZ2xlIHRyYW5zYWN0aW9ufSwKKwkJcXJ7ZG9uZSBpbiBcZCtc LlxkXGQgcyB9CisJXSwKKwkncGdiZW5jaCAtLWluaXQtc3RlcHMgY2xpZW50LXNpZGUgVEVYVCAo c2luZ2xlIFhBQ1QgIzEpJyk7CisKKyMgQ2hlY2sgZGF0YSBzdGF0ZSwgYWZ0ZXIgY2xpZW50LXNp ZGUgZGF0YSBnZW5lcmF0aW9uLgorY2hlY2tfZGF0YV9zdGF0ZSgkbm9kZSwgJ2NsaWVudC1zaWRl ICh0ZXh0KScpOworCiskbm9kZS0+cGdiZW5jaCgKKwknLS1pbml0aWFsaXplIC0taW5pdC1zdGVw cz1kdFNnJywKKwkwLAorCVtxcnteJH1dLAorCVsKKwkJcXJ7ZHJvcHBpbmcgb2xkIHRhYmxlc30s CisJCXFye2NyZWF0aW5nIHRhYmxlc30sCisJCXFye2dlbmVyYXRpbmcgZGF0YSBcKGNsaWVudC1z aWRlIGFzIHNpbmdsZSB0cmFuc2FjdGlvbn0sCisJCXFye1xkIG9mIFxkKyB0dXBsZXMgXChcZCVc KSBvZiBwZ2JlbmNoX2JyYW5jaGVzIGRvbmV9LAorCQlxcntcZCBvZiBcZCsgdHVwbGVzIFwoXGQl XCkgb2YgcGdiZW5jaF90ZWxsZXJzIGRvbmV9LAorCQlxcntcZCBvZiBcZCsgdHVwbGVzIFwoXGQl XCkgb2YgcGdiZW5jaF9hY2NvdW50cyBkb25lfSwKKwkJcXJ7ZG9uZSBpbiBcZCtcLlxkXGQgcyB9 CisJXSwKKwkncGdiZW5jaCAtLWluaXQtc3RlcHMgY2xpZW50LXNpZGUgVEVYVCAoc2luZ2xlIFhB Q1QgIzIpJyk7CisKKyMgQ2hlY2sgZGF0YSBzdGF0ZSwgYWZ0ZXIgY2xpZW50LXNpZGUgZGF0YSBn ZW5lcmF0aW9uLgorY2hlY2tfZGF0YV9zdGF0ZSgkbm9kZSwgJ2NsaWVudC1zaWRlICh0ZXh0KScp OworCiskbm9kZS0+cGdiZW5jaCgKKwknLS1pbml0aWFsaXplIC0taW5pdC1zdGVwcz1kdE1nJywK KwkwLAorCVtxcnteJH1dLAorCVsKKwkJcXJ7ZHJvcHBpbmcgb2xkIHRhYmxlc30sCisJCXFye2Ny ZWF0aW5nIHRhYmxlc30sCisJCXFye2dlbmVyYXRpbmcgZGF0YSBcKGNsaWVudC1zaWRlIGFzIG11 bHRpcGxlIHRyYW5zYWN0aW9uc30sCisJCXFye2RvbmUgaW4gXGQrXC5cZFxkIHMgfQorCV0sCisJ J3BnYmVuY2ggLS1pbml0LXN0ZXBzIGNsaWVudC1zaWRlIFRFWFQgKG11bHRpcGxlIFhBQ1RzKScp OworCisjIENoZWNrIGRhdGEgc3RhdGUsIGFmdGVyIGNsaWVudC1zaWRlIGRhdGEgZ2VuZXJhdGlv bi4KK2NoZWNrX2RhdGFfc3RhdGUoJG5vZGUsICdjbGllbnQtc2lkZSAodGV4dCknKTsKKworCisj IFRlc3QgY2xpZW50LXNpZGUgZ2VuZXJhdGlvbiB3aXRoIENPUFkgQklOQVJZCiskbm9kZS0+cGdi ZW5jaCgKKwknLS1pbml0aWFsaXplIC0taW5pdC1zdGVwcz1kdGMnLAorCTAsCisJW3Fye14kfV0s CisJWworCQlxcntkcm9wcGluZyBvbGQgdGFibGVzfSwKKwkJcXJ7Y3JlYXRpbmcgdGFibGVzfSwK KwkJcXJ7Z2VuZXJhdGluZyBkYXRhIFwoY2xpZW50LXNpZGUgYXMgc2luZ2xlIHRyYW5zYWN0aW9u fSwKKwkJcXJ7ZG9uZSBpbiBcZCtcLlxkXGQgcyB9CisJXSwKKwkncGdiZW5jaCAtLWluaXQtc3Rl cHMgY2xpZW50LXNpZGUgQklOQVJZIChzaW5nbGUgWEFDVCAjMSknKTsKKworIyBDaGVjayBkYXRh IHN0YXRlLCBhZnRlciBjbGllbnQtc2lkZSBkYXRhIGdlbmVyYXRpb24uCitjaGVja19kYXRhX3N0 YXRlKCRub2RlLCAnY2xpZW50LXNpZGUgKGJpbmFyeSknKTsKKworJG5vZGUtPnBnYmVuY2goCisJ Jy0taW5pdGlhbGl6ZSAtLWluaXQtc3RlcHM9ZHRTYycsCisJMCwKKwlbcXJ7XiR9XSwKKwlbCisJ CXFye2Ryb3BwaW5nIG9sZCB0YWJsZXN9LAorCQlxcntjcmVhdGluZyB0YWJsZXN9LAorCQlxcntn ZW5lcmF0aW5nIGRhdGEgXChjbGllbnQtc2lkZSBhcyBzaW5nbGUgdHJhbnNhY3Rpb259LAorCQlx cntkb25lIGluIFxkK1wuXGRcZCBzIH0KKwldLAorCSdwZ2JlbmNoIC0taW5pdC1zdGVwcyBjbGll bnQtc2lkZSBCSU5BUlkgKHNpbmdsZSBYQUNUICMyKScpOworCisjIENoZWNrIGRhdGEgc3RhdGUs IGFmdGVyIGNsaWVudC1zaWRlIGRhdGEgZ2VuZXJhdGlvbi4KK2NoZWNrX2RhdGFfc3RhdGUoJG5v ZGUsICdjbGllbnQtc2lkZSAoYmluYXJ5KScpOworCiskbm9kZS0+cGdiZW5jaCgKKwknLS1pbml0 aWFsaXplIC0taW5pdC1zdGVwcz1kdE1jJywKKwkwLAorCVtxcnteJH1dLAorCVsKKwkJcXJ7ZHJv cHBpbmcgb2xkIHRhYmxlc30sCisJCXFye2NyZWF0aW5nIHRhYmxlc30sCisJCXFye2dlbmVyYXRp bmcgZGF0YSBcKGNsaWVudC1zaWRlIGFzIG11bHRpcGxlIHRyYW5zYWN0aW9uc30sCisJCXFye2Rv bmUgaW4gXGQrXC5cZFxkIHMgfQorCV0sCisJJ3BnYmVuY2ggLS1pbml0LXN0ZXBzIGNsaWVudC1z aWRlIEJJTkFSWScpOworCisjIENoZWNrIGRhdGEgc3RhdGUsIGFmdGVyIGNsaWVudC1zaWRlIGRh dGEgZ2VuZXJhdGlvbi4KK2NoZWNrX2RhdGFfc3RhdGUoJG5vZGUsICdjbGllbnQtc2lkZSAoYmlu YXJ5KScpOworCisKKyMgQ2hlY2sgZGF0YSBzdGF0ZSwgYWZ0ZXIgZGlmZmVyZW50IG1vZGVzIG9m IGNsaWVudC1zaWRlIGRhdGEgZ2VuZXJhdGlvbi4KK2NoZWNrX2RhdGFfc3RhdGUoJG5vZGUsICdj bGllbnQtc2lkZSAoYmluYXJ5KScpOworCiskbm9kZS0+cGdiZW5jaCgKKwknLS1pbml0aWFsaXpl IC0taW5pdC1zdGVwcz1kdE1jY1NjJywKKwkwLAorCVtxcnteJH1dLAorCVsKKwkJcXJ7ZHJvcHBp bmcgb2xkIHRhYmxlc30sCisJCXFye2NyZWF0aW5nIHRhYmxlc30sCisJCXFye2dlbmVyYXRpbmcg ZGF0YSBcKGNsaWVudC1zaWRlIGFzIG11bHRpcGxlIHRyYW5zYWN0aW9uc30sCisJCXFye2dlbmVy YXRpbmcgZGF0YSBcKGNsaWVudC1zaWRlIGFzIG11bHRpcGxlIHRyYW5zYWN0aW9uc30sCisJCXFy e2dlbmVyYXRpbmcgZGF0YSBcKGNsaWVudC1zaWRlIGFzIHNpbmdsZSB0cmFuc2FjdGlvbn0sCisJ CXFye2RvbmUgaW4gXGQrXC5cZFxkIHMgfQorCV0sCisJJ3BnYmVuY2ggLS1pbml0LXN0ZXBzIGNs aWVudC1zaWRlIEJJTkFSWSAobXVsdGlwbGUgWEFDVCBtb2RlcyknKTsKKworIyBDaGVjayBkYXRh IHN0YXRlLCBhZnRlciBjbGllbnQtc2lkZSBkYXRhIGdlbmVyYXRpb24uCitjaGVja19kYXRhX3N0 YXRlKCRub2RlLCAnY2xpZW50LXNpZGUgKGJpbmFyeSBkaWZmZXJlbnQgWEFDVCBtb2RlcyBpbiBs aXN0IG9mIC0taW5pdC1zdGVwcyknKTsKKworCiAjIFJ1biBhbGwgYnVpbHRpbiBzY3JpcHRzLCBm b3IgYSBmZXcgdHJhbnNhY3Rpb25zIGVhY2gKICRub2RlLT5wZ2JlbmNoKAogCSctLXRyYW5zYWN0 aW9ucz01IC1EZm9vPWJsYSAtLWNsaWVudD0yIC0tcHJvdG9jb2w9c2ltcGxlIC0tYnVpbHRpbj10 JwotLSAKMi40My4wCgo= --_004_PH0PR08MB70205AAE5B3E7305454A89C2887AAPH0PR08MB7020namp_--