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.94.2) (envelope-from ) id 1rhG2L-00ATa1-9Y for pgsql-hackers@arkaria.postgresql.org; Mon, 04 Mar 2024 21:39:54 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1rhG2H-00B0PL-RB for pgsql-hackers@arkaria.postgresql.org; Mon, 04 Mar 2024 21:39:50 +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.94.2) (envelope-from ) id 1rhG2H-00B0PD-4s for pgsql-hackers@lists.postgresql.org; Mon, 04 Mar 2024 21:39:50 +0000 Received: from mgamail.intel.com ([198.175.65.9]) by magus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1rhG2C-002mdF-7f for pgsql-hackers@lists.postgresql.org; Mon, 04 Mar 2024 21:39:48 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1709588384; x=1741124384; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version; bh=IqIqLZY5/m2vszY9sKujpu9d5OhuwTvAYADwmNyA6qg=; b=QenDoZzXd38QvMD2LUIoOyoCVDY+AphbsG0GfieIB2ib6NfLYeNV0xLE 6WaTAuCkFsrw05gbrf54RTkyfSOhnolwV4UxA/k+KqAeR1QBntZZpGCoM bPqLrATAmQsHdqGZo7av6HEfBV685u09DwAOKPtg9K8am7u88e8S/giry q569ZkA8BAVurNK9HqBVmfHngLSnmzcInCPyC+hhlcgT9W01qC2kVA5cx rY51cIV/2aCHeYb4AhX9q9LyOUKzu2X1OHDtkVjjh8b70Xrh3md4g7b/u DZS4114NdaXmOKr+o1dnzexol1eqTZ9hca/Tl6rPXK+IZkMWbuG8P/zHL w==; X-IronPort-AV: E=McAfee;i="6600,9927,11003"; a="26569432" X-IronPort-AV: E=Sophos;i="6.06,204,1705392000"; d="scan'208";a="26569432" Received: from fmviesa005.fm.intel.com ([10.60.135.145]) by orvoesa101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 04 Mar 2024 13:39:40 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.06,204,1705392000"; d="scan'208";a="13632145" Received: from orsmsx602.amr.corp.intel.com ([10.22.229.15]) by fmviesa005.fm.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 04 Mar 2024 13:39:39 -0800 Received: from orsmsx610.amr.corp.intel.com (10.22.229.23) by ORSMSX602.amr.corp.intel.com (10.22.229.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Mon, 4 Mar 2024 13:39:39 -0800 Received: from ORSEDG601.ED.cps.intel.com (10.7.248.6) by orsmsx610.amr.corp.intel.com (10.22.229.23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35 via Frontend Transport; Mon, 4 Mar 2024 13:39:39 -0800 Received: from NAM04-MW2-obe.outbound.protection.outlook.com (104.47.73.168) by edgegateway.intel.com (134.134.137.102) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.35; Mon, 4 Mar 2024 13:39:38 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=cBf38vmWJP8puck4g55lcCklf+M6J5GKCtX6IJp93qx7Q5a+9zPHVU35KqqvEK+RRhGFH+eXUvKDv1pq6A5OVl8hdoXWr0lNey2I3SExfpUlB9zLg+kCWQu/zBVnGaGGObWWPoVMyiwbdpSxr90U2XALKzQW8iN3XYuveUNueb0Kf7TQMmS24UFpjqVhfVcEmWdmO6nul1C9THxjRVpYfIG0vGPniggqPxfGWA0Mt1jsr04svxGxb6Jj/vNgnejZp/kftzl55TXmWFdizqx7GGTE+dke6CuIsOJnvx3GWoyAszfQzkWquxNnBXTJg0ltV9PYtw60q+7OQ+zlv3DgJA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; 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=W5fvw0gygeN51k39O4TuXrKqbNQhzF/692C+TYFvX1Y=; b=fRZqM5Tgl3YMf8raQe/y7H50oSPLAZJ2Xn9/3GF9SVaJ52AVoQtfqv+zAgD0ZQ0m8Pv26yP/iE+2z+dnvOIZvAA36+raOuy6Opn294NHprqANwBIndkUizkkrqYp2F4o6u0RIx4k4wYeq9aj+8NfbFi1vXwgVze/vGBFEstlhLmVfoCiSj74xzs8xccs6/mrBjBGGcsp1jn4zjOSiwul8TwxWcY5jbgm2aOqAyucDTj8Ss15eG44ExsCfwNlyrjkhtu68Hlg1rLWjvTC0/arlqwT/whwy/9qnTG8D+YKEtHTphlxj82ETCNhL453bh1TAWZjoXTzcSGJjmiYv1KX+g== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none Received: from BL1PR11MB5304.namprd11.prod.outlook.com (2603:10b6:208:316::20) by SJ0PR11MB5135.namprd11.prod.outlook.com (2603:10b6:a03:2db::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7362.23; Mon, 4 Mar 2024 21:39:36 +0000 Received: from BL1PR11MB5304.namprd11.prod.outlook.com ([fe80::c936:ecdc:757e:1a4b]) by BL1PR11MB5304.namprd11.prod.outlook.com ([fe80::c936:ecdc:757e:1a4b%5]) with mapi id 15.20.7362.019; Mon, 4 Mar 2024 21:39:36 +0000 From: "Amonson, Paul D" To: Nathan Bossart CC: Andres Freund , Alvaro Herrera , "Shankaran, Akash" , Noah Misch , Tom Lane , "Matthias van de Meent" , "pgsql-hackers@lists.postgresql.org" Subject: RE: Popcount optimization using AVX512 Thread-Topic: Popcount optimization using AVX512 Thread-Index: AdoNliAXaie8RHrzTICrAiLVKKiYCgAsQKyAALaJTAAAAQ7nAAAAxSWAAAGNHgAAA/mZgAAeFdGAAZKQbBAAAw6egA3NuLcAAAvVM4ACbQuxsAAhlXkAAHPWMbAAAkOrAACYCUjgAAMc3wABvefW4AD8TV6wADf+AoAAmWkVgACOpocA Date: Mon, 4 Mar 2024 21:39:36 +0000 Message-ID: References: <202402071013.reqe3bdnjjuj@alvherre.pgsql> <20240209183450.snllkk7erharc73y@awork3.anarazel.de> <20240212203714.u4p7yeu7isuemmze@awork3.anarazel.de> <20240301214457.GA3024365@nathanxps13> In-Reply-To: <20240301214457.GA3024365@nathanxps13> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: yes X-MS-TNEF-Correlator: authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: BL1PR11MB5304:EE_|SJ0PR11MB5135:EE_ x-ms-office365-filtering-correlation-id: 6e10544c-bb7c-4c5a-7929-08dc3c9396b0 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: eCUO3fNNTJ6KUfyFUVieniI4zaowJY0vHlgU0rigNRVRteDn6YYmJb+erlzMM8M2LlkBQrnG2C9FaBb1k/zYBMRVQ1oYw06IAJyj/n92+lFo8wsOOK9LPmS2QwDN2rHQwHGpvTYA0EogMzQm3T+afQ14kGkAoV4U81vNCK1HhyfvGYo1VolhEsTVYgTUytFCCrLfeG6E1QGAdoBQ+fdNRQX2fxr5u/OkZw1qgd2K/RHZ3xi3ASXBmj8nya6zR1sEBPvW+gY8rpRWGCm5LLYm2Fag0HVN39LfIl+s+wvXIrjK+XKR5TF54Q7Mos5nF0mo/RxQFltC/b0avyZGVTvqkoXr+CEqeLFNEL+chh78eGWKcsbZcLc7W9r/hkHiMZA1bQmuGM7Bk59WLGoMmHD7QFYL4CVqQJjz+6ymbw1HVg1Omwab+xPTe88Fk0yUQNtzQjcMo1q4qFNLl7gGks8crePh2lDhPt4OvD2yVNFQKyTyT8Kew+8LU7OBn0ypgL6KGElZf6LCxMdBLy27+Of8oHY+3N4v0h5D038ZXL9je1cv80/iXn3ZSNtw70nxBbjQdVKZUnc8JnOoSsvPARq9QZ1L0MHa4Mz8jT74Dm1km5jVp1u4CxSBfW3l1KA6QBWSn0uh21NZI1p2CswyFdWCssW73BcCPXs8hAGLJWz4dh8= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:BL1PR11MB5304.namprd11.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230031)(376005)(38070700009);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?H5qRB6ETKFv7Zka38NMW/PBq9uLtLa8JP9HvM7vbNnqySRD+72XrEQwWTu67?= =?us-ascii?Q?DYmB4yERSxYk1EZ3AtIuT1MAkZhngXak5TdWO+TqvBTvcR1EEj8Xo9a3dXxb?= =?us-ascii?Q?DwgDlfKv8V8PAggzQbmyN6Iy0GbDc1COQJqTzqzxppuKPvq+Pkpo0DFPfo4e?= =?us-ascii?Q?2el6LLKfd9ndt7o+DNHjkzmfLeIROQWxHSz2UGFqLlIgrIgype4bs3GMMglL?= =?us-ascii?Q?08cBhBBym+4MSeb4kLwAd8nlj0E8HbEbBnns4yNcQ1Z5iigepBechKVGVIC8?= =?us-ascii?Q?24Safen8ZKXUobw8ZWedm1IXD76cLGSHJOAz02zGJgK7F7lEkLc5Xoyi5Obv?= =?us-ascii?Q?XDEyY+xWDRZmKIHLUUGNhDHsia/TWcwaBoQt+zsnFgKq3MBYoz3ktv++BvWz?= =?us-ascii?Q?XRVD1x+kGoyF4uqSFQBOHunkXyWl4E1PS4J9NWDNNtoKsQVQWR2umOI02HTw?= =?us-ascii?Q?nMC4kwtFXGlqrsawT7qzov1CF4/EBsUcvf6fn4eiejhNs99FSARBJR61H7+2?= =?us-ascii?Q?qLlaVSVZhtJyMBdbqABO4iuQqn2JuXRpscWbKpeGwfoacBI4eYr04IsHBsLn?= =?us-ascii?Q?jQF0DWTZEbre2hAJcPHJHI2m9UwmjJfaFONUfRBHR6hZUIosa2A1Y15JanLl?= =?us-ascii?Q?ae3ey0Tml9Uv3j9FGSHJTbmWH+3UuiiWT94ckspacWqjNnOwFN5VI5NlgbuN?= =?us-ascii?Q?R/x7E/2sQ7dGj68bf57PmIUIrSugt+fBsiJ+C8TzlCyZiA2HqPkS5nxp0y5q?= =?us-ascii?Q?IH3rW5688i6OOhscmIVSASln4fOiYr6/SaC7AiaWAV7JMUKK+5zU9sGq48FA?= =?us-ascii?Q?UaawYIcRVi4n+7yQLahG1hiuJjHeG3z/rlOS3otNIRubT9BHnNDwP3pqfD4d?= =?us-ascii?Q?LHe1/oegh/cL3M+C8300aIBnVSfNvkGJuE4QtmeJ46c9OSp/niy+Vp7G7HlN?= =?us-ascii?Q?U685LEr46Bhac/Zgnk8AbBxbSgx2a9dDt8CnLMh9PxcdEsFzafc7MP0GZPfW?= =?us-ascii?Q?1pfICqrtQke3t9K+KEP9eg+kSG5jEhBlaU4BYVoTXXbSERTJNOKgyAJdZa0j?= =?us-ascii?Q?FQ7jTq17nsusMjDdsAlqln7LOrF+1bjGRkew4Q+5D4eC4fRb3RhI/DG8ZGIZ?= =?us-ascii?Q?4goZ7d7OYhz7Qkt2R+8pgHOzDp5O8swELL/Jqu4xy56MzZI665CyhK8RrV0i?= =?us-ascii?Q?j6g/ZMc3dpBRiidKFrvfjp6icS1p7ILeztEFJqCBcpjkLKJb4sNdgV0Rc70C?= =?us-ascii?Q?IKD346LXREteA45FRdfrvMLetCO8/zKcjjgBexw9GndpwKD+zxLAj97L2Aio?= =?us-ascii?Q?AaQMQ6fW6qPzWDAaen/at2q4B5LyFIpCipb3xWDcKiqVRyWUdV7F1I3mVLOy?= =?us-ascii?Q?nbqPDr4Hv64sMcm3N8tjzrQV5MvPWVMiIGbPtRjglG2rhUh6NIc3j8IwJ5wK?= =?us-ascii?Q?389goyabBIBZF8Xk0Ez0dQrqgWZSLZopHQ5IfCkU2NgzciM2kDh//nYdm5vl?= =?us-ascii?Q?SMA73al52O3APZVfNp8CK8IoWPyVR+QbgDFhyXjhgwoJTahjoY89ZE2FP3R9?= =?us-ascii?Q?4/hrxaZHJRAyjwwgopDqiCKinWksgm2SCcHwEFUD?= Content-Type: multipart/mixed; boundary="_002_BL1PR11MB5304BFE26BAC25624508CFD2DC232BL1PR11MB5304namp_" MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BL1PR11MB5304.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 6e10544c-bb7c-4c5a-7929-08dc3c9396b0 X-MS-Exchange-CrossTenant-originalarrivaltime: 04 Mar 2024 21:39:36.5135 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Lymo1c4d4DSCt8Eos3ZuE4IVMxJE4e3vyyqFh9m3VPzzxZrvZsh3R+KPUe+rv+P3Dkk4mgfCx2PVHzWpUkl3E5PkBMnji/GoYQ5iG7RedAI= X-MS-Exchange-Transport-CrossTenantHeadersStamped: SJ0PR11MB5135 X-OriginatorOrg: intel.com List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_002_BL1PR11MB5304BFE26BAC25624508CFD2DC232BL1PR11MB5304namp_ Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Hi, First, apologies on the patch. Find re-attached updated version. =20 Now I have some questions.... #1 =20 > -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) > +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31) > +<< 31)) > > IME this means that the autoconf you are using has been patched. A quick= search on the mailing lists seems to indicate that it might be specific to= Debian [1]. =20 I am not sure what the ask is here? I made changes to the configure.ac and= ran autoconf2.69 to get builds to succeed. Do you have a separate feedback= here?=20 =20 #2=20 As for the refactoring, this was done to satisfy previous review feedback a= bout applying the AVX512 CFLAGS to the entire pg_bitutils.c file. Mainly to= avoid segfault due to the AVX512 flags. If its ok, I would prefer to make = a single commit as the change is pretty small and straight forward. =20 #3 I am not sure I understand the comment about the SIZE_VOID_P checks. Aren't= they necessary to choose which functions to call based on 32 or 64 bit arc= hitectures? =20 #4 Would this change qualify for Workflow A as described in [0] and can be pic= ked up by a committer, given it has been reviewed by multiple committers so= far? The scope of the change is pretty contained as well.=20 =20 [0] https://wiki.postgresql.org/wiki/Submitting_a_Patch Thanks, Paul -----Original Message----- From: Nathan Bossart =20 Sent: Friday, March 1, 2024 1:45 PM To: Amonson, Paul D Cc: Andres Freund ; Alvaro Herrera ; Shankaran, Akash ; Noah Misch ; Tom Lane ; Matthias van de Meent ; pgsql-hackers@lists.postgresql.org Subject: Re: Popcount optimization using AVX512 Thanks for the new version of the patch. I didn't see a commitfest entry f= or this one, and unfortunately I think it's too late to add it for the Marc= h commitfest. I would encourage you to add it to July's commitfest [0] so = that we can get some routine cfbot coverage. On Tue, Feb 27, 2024 at 08:46:06PM +0000, Amonson, Paul D wrote: > After consulting some Intel internal experts on MSVC the linking issue=20 > as it stood was not resolved. Instead, I created a MSVC ONLY work-around. > This adds one extra functional call on the Windows builds (The linker=20 > resolves a real function just fine but not a function pointer of the=20 > same name). This extra latency does not exist on any of the other=20 > platforms. I also believe I addressed all issues raised in the=20 > previous reviews. The new pg_popcnt_x86_64_accel.c file is now the=20 > ONLY file compiled with the > AVX512 compiler flags. I added support for the MSVC compiler flag as=20 > well. Both meson and autoconf are updated with the new refactor. >=20 > I am attaching the new patch. I think this patch might be missing the new files. -#define LARGE_OFF_T (((off_t) 1 << 62) - 1 + ((off_t) 1 << 62)) +#define LARGE_OFF_T ((((off_t) 1 << 31) << 31) - 1 + (((off_t) 1 << 31)=20 +<< 31)) IME this means that the autoconf you are using has been patched. A quick s= earch on the mailing lists seems to indicate that it might be specific to D= ebian [1]. -static int pg_popcount32_slow(uint32 word); -static int pg_popcount64_slow(uint64 word); +int pg_popcount32_slow(uint32 word); +int pg_popcount64_slow(uint64 word); +uint64 pg_popcount_slow(const char *buf, int bytes); This patch appears to do a lot of refactoring. Would it be possible to bre= ak out the refactoring parts into a prerequisite patch that could be review= ed and committed independently from the AVX512 stuff? -#if SIZEOF_VOID_P >=3D 8 +#if SIZEOF_VOID_P =3D=3D 8 /* Process in 64-bit chunks if the buffer is aligned. */ - if (buf =3D=3D (const char *) TYPEALIGN(8, buf)) + if (buf =3D=3D (const char *)TYPEALIGN(8, buf)) { - const uint64 *words =3D (const uint64 *) buf; + const uint64 *words =3D (const uint64 *)buf; =20 while (bytes >=3D 8) { @@ -309,9 +213,9 @@ pg_popcount(const char *buf, int bytes) bytes -=3D 8; } =20 - buf =3D (const char *) words; + buf =3D (const char *)words; } -#else +#elif SIZEOF_VOID_P =3D=3D 4 /* Process in 32-bit chunks if the buffer is aligned. */ if (buf =3D=3D (const char *) TYPEALIGN(4, buf)) { Most, if not all, of these changes seem extraneous. Do we actually need to= more strictly check SIZEOF_VOID_P? [0] https://commitfest.postgresql.org/48/ [1] https://postgr.es/m/20230211020042.uthdgj72kp3xlqam%40awork3.anarazel.d= e -- Nathan Bossart Amazon Web Services: https://aws.amazon.com --_002_BL1PR11MB5304BFE26BAC25624508CFD2DC232BL1PR11MB5304namp_ Content-Type: application/octet-stream; name="v5-0001-Add-support-for-AVX512-implemented-POPCNT.patch" Content-Description: v5-0001-Add-support-for-AVX512-implemented-POPCNT.patch Content-Disposition: attachment; filename="v5-0001-Add-support-for-AVX512-implemented-POPCNT.patch"; size=32459; creation-date="Mon, 04 Mar 2024 18:19:31 GMT"; modification-date="Mon, 04 Mar 2024 21:39:36 GMT" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2NvbmZpZy9jLWNvbXBpbGVyLm00IGIvY29uZmlnL2MtY29tcGlsZXIubTQK aW5kZXggNWRiMDJiMmFiNy4uYTVhMzI0NjE5OSAxMDA2NDQKLS0tIGEvY29uZmlnL2MtY29tcGls ZXIubTQKKysrIGIvY29uZmlnL2MtY29tcGlsZXIubTQKQEAgLTY5NCwzICs2OTQsMzYgQEAgaWYg dGVzdCB4IiRBY19jYWNoZXZhciIgPSB4InllcyI7IHRoZW4KIGZpCiB1bmRlZmluZShbQWNfY2Fj aGV2YXJdKWRubAogXSkjIFBHQUNfTE9PTkdBUkNIX0NSQzMyQ19JTlRSSU5TSUNTCisKKyMgUEdB Q19BVlg1MTJfUE9QQ05UX0lOVFJJTlNJQ1MKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CisjIENoZWNrIGlmIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgeDg2XzY0IEFWWDUxMiBQT1BD TlQgaW5zdHJ1Y3Rpb25zIHVzaW5nCisjIGludHJpbnNpY3MgdXNlZCBpbiBDUFVJRCBmZWF0dXJl cyBBVlg1MTJGIGFuZCBBVlg1MTJWUE9QQ05URFEuCisjCisjIE9wdGlvbmFsIGNvbXBpbGVyIGZs YWdzIGNhbiBiZSBwYXNzZWQgYXMgYXJndW1lbnQgKGUuZy4gLW1hdng1MTJ2cG9wY250ZHEpLgor IyBJZiB0aGUgaW50cmluc2ljcyBhcmUgc3VwcG9ydGVkIHRoZW4gcGdhY19hdng1MTJfcG9wY250 X2ludHJpbnNpY3MgYW5kCisjIENGTEFHU19BVlg1MTJfUE9QQ05UIGFyZSBzZXQuCitBQ19ERUZV TihbUEdBQ19BVlg1MTJfUE9QQ05UX0lOVFJJTlNJQ1NdLAorW2RlZmluZShbQWNfY2FjaGV2YXJd LCBbQVNfVFJfU0goW3BnYWNfY3ZfYXZ4NTEyX3BvcGNudF9pbnRyaW5zaWNzXyQxXSldKWRubAor QUNfQ0FDSEVfQ0hFQ0soW2ZvciBfbW01MTJfcG9wY250X2VwaTY0IHdpdGggQ0ZMQUdTPSQxXSwg W0FjX2NhY2hldmFyXSwKK1twZ2FjX3NhdmVfQ0ZMQUdTPSRDRkxBR1MKK0NGTEFHUz0iJHBnYWNf c2F2ZV9DRkxBR1MgJDEiCitBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFsjaW5jbHVk ZSA8aW1taW50cmluLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+XSwKKyAgW19fbTUxMmkgdG1wIF9f YXR0cmlidXRlX18oKGFsaWduZWQoNjQpKSk7CisgICBfX201MTJpIGlucHV0ID0gX21tNTEyX3Nl dHplcm9fc2k1MTIoKTsKKyAgIF9fbTUxMmkgb3V0cHV0ID0gX21tNTEyX3BvcGNudF9lcGk2NChp bnB1dCk7CisgICB1aW50NjRfdCBjbnQgPSA5OTk7CisgICBfbW01MTJfc3RvcmVfc2k1MTIoJnRt cCwgb3V0cHV0KTsKKyAgIGNudCA9IF9tbTUxMl9yZWR1Y2VfYWRkX2VwaTY0KHRtcCk7CisgICAv KiByZXR1cm4gY29tcHV0ZWQgdmFsdWUsIHRvIHByZXZlbnQgdGhlIGFib3ZlIGJlaW5nIG9wdGlt aXplZCBhd2F5ICovCisgICByZXR1cm4gY250ID09IDA7XSldLAorICBbQWNfY2FjaGV2YXI9eWVz XSwKKyAgW0FjX2NhY2hldmFyPW5vXSkKK0NGTEFHUz0iJHBnYWNfc2F2ZV9DRkxBR1MiXSkKK2lm IHRlc3QgeCIkQWNfY2FjaGV2YXIiID0geCJ5ZXMiOyB0aGVuCisgIENGTEFHU19BVlg1MTJfUE9Q Q05UPSIkMSIKKyAgcGdhY19hdng1MTJfcG9wY250X2ludHJpbnNpY3M9eWVzCitmaQordW5kZWZp bmUoW0FjX2NhY2hldmFyXSlkbmwKK10pIyBQR0FDX0FWWDUxMl9QT1BDTlRfSU5UUklOU0lDUwpk aWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJlCmluZGV4IDZiODdlNWM5YTguLjAyNTJk YWI2ZDUgMTAwNzU1Ci0tLSBhL2NvbmZpZ3VyZQorKysgYi9jb25maWd1cmUKQEAgLTY0Nyw2ICs2 NDcsNyBAQCBNU0dGTVRfRkxBR1MKIE1TR0ZNVAogUEdfQ1JDMzJDX09CSlMKIENGTEFHU19DUkMK K0NGTEFHU19BVlg1MTJfUE9QQ05UCiBMSUJPQkpTCiBPUEVOU1NMCiBaU1RECkBAIC0xNTIwOSw3 ICsxNTIxMCw3IEBAIGVsc2UKICAgICBXZSBjYW4ndCBzaW1wbHkgZGVmaW5lIExBUkdFX09GRl9U IHRvIGJlIDkyMjMzNzIwMzY4NTQ3NzU4MDcsCiAgICAgc2luY2Ugc29tZSBDKysgY29tcGlsZXJz IG1hc3F1ZXJhZGluZyBhcyBDIGNvbXBpbGVycwogICAgIGluY29ycmVjdGx5IHJlamVjdCA5MjIz MzcyMDM2ODU0Nzc1ODA3LiAgKi8KLSNkZWZpbmUgTEFSR0VfT0ZGX1QgKCgob2ZmX3QpIDEgPDwg NjIpIC0gMSArICgob2ZmX3QpIDEgPDwgNjIpKQorI2RlZmluZSBMQVJHRV9PRkZfVCAoKCgob2Zm X3QpIDEgPDwgMzEpIDw8IDMxKSAtIDEgKyAoKChvZmZfdCkgMSA8PCAzMSkgPDwgMzEpKQogICBp bnQgb2ZmX3RfaXNfbGFyZ2VbKExBUkdFX09GRl9UICUgMjE0NzQ4MzYyOSA9PSA3MjEKIAkJICAg ICAgICYmIExBUkdFX09GRl9UICUgMjE0NzQ4MzY0NyA9PSAxKQogCQkgICAgICA/IDEgOiAtMV07 CkBAIC0xNTI1NSw3ICsxNTI1Niw3IEBAIGVsc2UKICAgICBXZSBjYW4ndCBzaW1wbHkgZGVmaW5l IExBUkdFX09GRl9UIHRvIGJlIDkyMjMzNzIwMzY4NTQ3NzU4MDcsCiAgICAgc2luY2Ugc29tZSBD KysgY29tcGlsZXJzIG1hc3F1ZXJhZGluZyBhcyBDIGNvbXBpbGVycwogICAgIGluY29ycmVjdGx5 IHJlamVjdCA5MjIzMzcyMDM2ODU0Nzc1ODA3LiAgKi8KLSNkZWZpbmUgTEFSR0VfT0ZGX1QgKCgo b2ZmX3QpIDEgPDwgNjIpIC0gMSArICgob2ZmX3QpIDEgPDwgNjIpKQorI2RlZmluZSBMQVJHRV9P RkZfVCAoKCgob2ZmX3QpIDEgPDwgMzEpIDw8IDMxKSAtIDEgKyAoKChvZmZfdCkgMSA8PCAzMSkg PDwgMzEpKQogICBpbnQgb2ZmX3RfaXNfbGFyZ2VbKExBUkdFX09GRl9UICUgMjE0NzQ4MzYyOSA9 PSA3MjEKIAkJICAgICAgICYmIExBUkdFX09GRl9UICUgMjE0NzQ4MzY0NyA9PSAxKQogCQkgICAg ICA/IDEgOiAtMV07CkBAIC0xNTI3OSw3ICsxNTI4MCw3IEBAIHJtIC1mIGNvcmUgY29uZnRlc3Qu ZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAogICAgIFdlIGNhbid0IHNp bXBseSBkZWZpbmUgTEFSR0VfT0ZGX1QgdG8gYmUgOTIyMzM3MjAzNjg1NDc3NTgwNywKICAgICBz aW5jZSBzb21lIEMrKyBjb21waWxlcnMgbWFzcXVlcmFkaW5nIGFzIEMgY29tcGlsZXJzCiAgICAg aW5jb3JyZWN0bHkgcmVqZWN0IDkyMjMzNzIwMzY4NTQ3NzU4MDcuICAqLwotI2RlZmluZSBMQVJH RV9PRkZfVCAoKChvZmZfdCkgMSA8PCA2MikgLSAxICsgKChvZmZfdCkgMSA8PCA2MikpCisjZGVm aW5lIExBUkdFX09GRl9UICgoKChvZmZfdCkgMSA8PCAzMSkgPDwgMzEpIC0gMSArICgoKG9mZl90 KSAxIDw8IDMxKSA8PCAzMSkpCiAgIGludCBvZmZfdF9pc19sYXJnZVsoTEFSR0VfT0ZGX1QgJSAy MTQ3NDgzNjI5ID09IDcyMQogCQkgICAgICAgJiYgTEFSR0VfT0ZGX1QgJSAyMTQ3NDgzNjQ3ID09 IDEpCiAJCSAgICAgID8gMSA6IC0xXTsKQEAgLTE1MzI0LDcgKzE1MzI1LDcgQEAgZWxzZQogICAg IFdlIGNhbid0IHNpbXBseSBkZWZpbmUgTEFSR0VfT0ZGX1QgdG8gYmUgOTIyMzM3MjAzNjg1NDc3 NTgwNywKICAgICBzaW5jZSBzb21lIEMrKyBjb21waWxlcnMgbWFzcXVlcmFkaW5nIGFzIEMgY29t cGlsZXJzCiAgICAgaW5jb3JyZWN0bHkgcmVqZWN0IDkyMjMzNzIwMzY4NTQ3NzU4MDcuICAqLwot I2RlZmluZSBMQVJHRV9PRkZfVCAoKChvZmZfdCkgMSA8PCA2MikgLSAxICsgKChvZmZfdCkgMSA8 PCA2MikpCisjZGVmaW5lIExBUkdFX09GRl9UICgoKChvZmZfdCkgMSA8PCAzMSkgPDwgMzEpIC0g MSArICgoKG9mZl90KSAxIDw8IDMxKSA8PCAzMSkpCiAgIGludCBvZmZfdF9pc19sYXJnZVsoTEFS R0VfT0ZGX1QgJSAyMTQ3NDgzNjI5ID09IDcyMQogCQkgICAgICAgJiYgTEFSR0VfT0ZGX1QgJSAy MTQ3NDgzNjQ3ID09IDEpCiAJCSAgICAgID8gMSA6IC0xXTsKQEAgLTE1MzQ4LDcgKzE1MzQ5LDcg QEAgcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4k YWNfZXh0CiAgICAgV2UgY2FuJ3Qgc2ltcGx5IGRlZmluZSBMQVJHRV9PRkZfVCB0byBiZSA5MjIz MzcyMDM2ODU0Nzc1ODA3LAogICAgIHNpbmNlIHNvbWUgQysrIGNvbXBpbGVycyBtYXNxdWVyYWRp bmcgYXMgQyBjb21waWxlcnMKICAgICBpbmNvcnJlY3RseSByZWplY3QgOTIyMzM3MjAzNjg1NDc3 NTgwNy4gICovCi0jZGVmaW5lIExBUkdFX09GRl9UICgoKG9mZl90KSAxIDw8IDYyKSAtIDEgKyAo KG9mZl90KSAxIDw8IDYyKSkKKyNkZWZpbmUgTEFSR0VfT0ZGX1QgKCgoKG9mZl90KSAxIDw8IDMx KSA8PCAzMSkgLSAxICsgKCgob2ZmX3QpIDEgPDwgMzEpIDw8IDMxKSkKICAgaW50IG9mZl90X2lz X2xhcmdlWyhMQVJHRV9PRkZfVCAlIDIxNDc0ODM2MjkgPT0gNzIxCiAJCSAgICAgICAmJiBMQVJH RV9PRkZfVCAlIDIxNDc0ODM2NDcgPT0gMSkKIAkJICAgICAgPyAxIDogLTFdOwpAQCAtMTc3MDgs NiArMTc3MDksNDEgQEAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9fR0VUX0NQVUlEIDEiID4+Y29u ZmRlZnMuaAogCiBmaQogCisjIENoZWNrIGZvciB4ODYgY3B1aWRfY291bnQgaW5zdHJ1Y3Rpb24K K3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIF9f Z2V0X2NwdWlkX2NvdW50IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBfX2dldF9jcHVp ZF9jb3VudC4uLiAiID4mNjsgfQoraWYgJHtwZ2FjX2N2X19nZXRfY3B1aWRfY291bnQrOn0gZmFs c2U7IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29u ZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4g ICovCisjaW5jbHVkZSA8Y3B1aWQuaD4KK2ludAorbWFpbiAoKQorewordW5zaWduZWQgaW50IGV4 eFs0XSA9IHswLCAwLCAwLCAwfTsKKyAgX19nZXRfY3B1aWRfY291bnQoNywgMCwgJmV4eFswXSwg JmV4eFsxXSwgJmV4eFsyXSwgJmV4eFszXSk7CisKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VP RgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBwZ2FjX2N2X19nZXRf Y3B1aWRfY291bnQ9InllcyIKK2Vsc2UKKyAgcGdhY19jdl9fZ2V0X2NwdWlkX2NvdW50PSJubyIK K2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKKyAgICBj b25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8gIiRhc19t ZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkcGdhY19jdl9fZ2V0X2NwdWlkX2NvdW50 IiA+JjUKKyRhc19lY2hvICIkcGdhY19jdl9fZ2V0X2NwdWlkX2NvdW50IiA+JjY7IH0KK2lmIHRl c3QgeCIkcGdhY19jdl9fZ2V0X2NwdWlkX2NvdW50IiA9IHgieWVzIjsgdGhlbgorCiskYXNfZWNo byAiI2RlZmluZSBIQVZFX19HRVRfQ1BVSURfQ09VTlQgMSIgPj5jb25mZGVmcy5oCisKK2ZpCisK IHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIF9f Y3B1aWQiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIF9fY3B1aWQuLi4gIiA+JjY7IH0K IGlmICR7cGdhY19jdl9fY3B1aWQrOn0gZmFsc2U7IHRoZW4gOgpAQCAtMTc3NDIsNiArMTc3Nzgs MTY0IEBAICRhc19lY2hvICIjZGVmaW5lIEhBVkVfX0NQVUlEIDEiID4+Y29uZmRlZnMuaAogCiBm aQogCit7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZv ciBfX2NwdWlkZXgiID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIF9fY3B1aWRleC4uLiAi ID4mNjsgfQoraWYgJHtwZ2FjX2N2X19jcHVpZGV4Kzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2Vj aG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+ Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworI2luY2x1ZGUgPGludHJp bi5oPgoraW50CittYWluICgpCit7Cit1bnNpZ25lZCBpbnQgZXh4WzRdID0gezAsIDAsIDAsIDB9 OworICBfX2dldF9jcHVpZGV4KGV4eFswXSwgNywgMCk7CisKKyAgOworICByZXR1cm4gMDsKK30K K19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBwZ2FjX2N2 X19jcHVpZGV4PSJ5ZXMiCitlbHNlCisgIHBnYWNfY3ZfX2NwdWlkZXg9Im5vIgorZmkKK3JtIC1m IGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFj X2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitmaQoreyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGlu ZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRwZ2FjX2N2X19jcHVpZGV4IiA+JjUKKyRhc19lY2hvICIk cGdhY19jdl9fY3B1aWRleCIgPiY2OyB9CitpZiB0ZXN0IHgiJHBnYWNfY3ZfX2NwdWlkZXgiID0g eCJ5ZXMiOyB0aGVuCisKKyRhc19lY2hvICIjZGVmaW5lIEhBVkVfX0NQVUlERVggMSIgPj5jb25m ZGVmcy5oCisKK2ZpCisKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTog Y2hlY2tpbmcgZm9yIF9faW1taW50cmluIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBf X2ltbWludHJpbi4uLiAiID4mNjsgfQoraWYgJHtwZ2FjX2N2X19pbW1pbnRyaW4rOn0gZmFsc2U7 IHRoZW4gOgorICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgorZWxzZQorICBjYXQgY29uZmRl ZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICov CisjaW5jbHVkZSA8aW1taW50cmluLmg+CitpbnQKK21haW4gKCkKK3sKKy8qIERvbid0IGV4Y2x1 ZGUgY29kZSBzbyBhZGRlZCByZXR1cm4uICovCisgICAgcmV0dXJuIDE3MDE7CisKKyAgOworICBy ZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4g OgorICBwZ2FjX2N2X19pbW1pbnRyaW49InllcyIKK2Vsc2UKKyAgcGdhY19jdl9faW1taW50cmlu PSJubyIKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwK KyAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAorZmkKK3sgJGFzX2VjaG8g IiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkcGdhY19jdl9faW1taW50cmlu IiA+JjUKKyRhc19lY2hvICIkcGdhY19jdl9faW1taW50cmluIiA+JjY7IH0KK2lmIHRlc3QgeCIk cGdhY19jdl9faW1taW50cmluIiA9IHgieWVzIjsgdGhlbgorCiskYXNfZWNobyAiI2RlZmluZSBI QVZFX19JTU1JTlRSSU4gMSIgPj5jb25mZGVmcy5oCisKK2ZpCisKKyMgQ2hlY2sgZm9yIEludGVs IEFWWDUxMiBpbnRyaW5zaWNzIHRvIGRvIFBPUENOVCBjYWxjdWxhdGlvbnMuCisjCit7ICRhc19l Y2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBfbW01MTJfcG9w Y250X2VwaTY0IHdpdGggQ0ZMQUdTPSIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgX21t NTEyX3BvcGNudF9lcGk2NCB3aXRoIENGTEFHUz0uLi4gIiA+JjY7IH0KK2lmICR7cGdhY19jdl9h dng1MTJfcG9wY250X2ludHJpbnNpY3NfKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAi KGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgcGdhY19zYXZlX0NGTEFHUz0kQ0ZMQUdTCitDRkxBR1M9 IiRwZ2FjX3NhdmVfQ0ZMQUdTICIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0 LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDxpbW1pbnRyaW4uaD4K KyNpbmNsdWRlIDxzdGRpbnQuaD4KK2ludAorbWFpbiAoKQoreworX19tNTEyaSB0bXAgX19hdHRy aWJ1dGVfXygoYWxpZ25lZCg2NCkpKTsKKyAgIF9fbTUxMmkgaW5wdXQgPSBfbW01MTJfc2V0emVy b19zaTUxMigpOworICAgX19tNTEyaSBvdXRwdXQgPSBfbW01MTJfcG9wY250X2VwaTY0KGlucHV0 KTsKKyAgIHVpbnQ2NF90IGNudCA9IDk5OTsKKyAgIF9tbTUxMl9zdG9yZV9zaTUxMigmdG1wLCBv dXRwdXQpOworICAgY250ID0gX21tNTEyX3JlZHVjZV9hZGRfZXBpNjQodG1wKTsKKyAgIC8qIHJl dHVybiBjb21wdXRlZCB2YWx1ZSwgdG8gcHJldmVudCB0aGUgYWJvdmUgYmVpbmcgb3B0aW1pemVk IGF3YXkgKi8KKyAgIHJldHVybiBjbnQgPT0gMDsKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VP RgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgorICBwZ2FjX2N2X2F2eDUx Ml9wb3BjbnRfaW50cmluc2ljc189eWVzCitlbHNlCisgIHBnYWNfY3ZfYXZ4NTEyX3BvcGNudF9p bnRyaW5zaWNzXz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19v YmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitDRkxBR1M9 IiRwZ2FjX3NhdmVfQ0ZMQUdTIgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0k TElORU5PfTogcmVzdWx0OiAkcGdhY19jdl9hdng1MTJfcG9wY250X2ludHJpbnNpY3NfIiA+JjUK KyRhc19lY2hvICIkcGdhY19jdl9hdng1MTJfcG9wY250X2ludHJpbnNpY3NfIiA+JjY7IH0KK2lm IHRlc3QgeCIkcGdhY19jdl9hdng1MTJfcG9wY250X2ludHJpbnNpY3NfIiA9IHgieWVzIjsgdGhl bgorICBDRkxBR1NfQVZYNTEyX1BPUENOVD0iIgorICBwZ2FjX2F2eDUxMl9wb3BjbnRfaW50cmlu c2ljcz15ZXMKK2ZpCisKK2lmIHRlc3QgeCIkcGdhY19hdng1MTJfcG9wY250X2ludHJpbnNpY3Mi ICE9IHgieWVzIjsgdGhlbgorICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVO T306IGNoZWNraW5nIGZvciBfbW01MTJfcG9wY250X2VwaTY0IHdpdGggQ0ZMQUdTPS1tYXZ4NTEy dnBvcGNudGRxIC1tYXZ4NTEyZiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyBmb3IgX21tNTEy X3BvcGNudF9lcGk2NCB3aXRoIENGTEFHUz0tbWF2eDUxMnZwb3BjbnRkcSAtbWF2eDUxMmYuLi4g IiA+JjY7IH0KK2lmICR7cGdhY19jdl9hdng1MTJfcG9wY250X2ludHJpbnNpY3NfX21hdng1MTJ2 cG9wY250ZHFfX21hdng1MTJmKzp9IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hl ZCkgIiA+JjYKK2Vsc2UKKyAgcGdhY19zYXZlX0NGTEFHUz0kQ0ZMQUdTCitDRkxBR1M9IiRwZ2Fj X3NhdmVfQ0ZMQUdTIC1tYXZ4NTEydnBvcGNudGRxIC1tYXZ4NTEyZiIKK2NhdCBjb25mZGVmcy5o IC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNp bmNsdWRlIDxpbW1pbnRyaW4uaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KK2ludAorbWFpbiAoKQor eworX19tNTEyaSB0bXAgX19hdHRyaWJ1dGVfXygoYWxpZ25lZCg2NCkpKTsKKyAgIF9fbTUxMmkg aW5wdXQgPSBfbW01MTJfc2V0emVyb19zaTUxMigpOworICAgX19tNTEyaSBvdXRwdXQgPSBfbW01 MTJfcG9wY250X2VwaTY0KGlucHV0KTsKKyAgIHVpbnQ2NF90IGNudCA9IDk5OTsKKyAgIF9tbTUx Ml9zdG9yZV9zaTUxMigmdG1wLCBvdXRwdXQpOworICAgY250ID0gX21tNTEyX3JlZHVjZV9hZGRf ZXBpNjQodG1wKTsKKyAgIC8qIHJldHVybiBjb21wdXRlZCB2YWx1ZSwgdG8gcHJldmVudCB0aGUg YWJvdmUgYmVpbmcgb3B0aW1pemVkIGF3YXkgKi8KKyAgIHJldHVybiBjbnQgPT0gMDsKKyAgOwor ICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRo ZW4gOgorICBwZ2FjX2N2X2F2eDUxMl9wb3BjbnRfaW50cmluc2ljc19fbWF2eDUxMnZwb3BjbnRk cV9fbWF2eDUxMmY9eWVzCitlbHNlCisgIHBnYWNfY3ZfYXZ4NTEyX3BvcGNudF9pbnRyaW5zaWNz X19tYXZ4NTEydnBvcGNudGRxX19tYXZ4NTEyZj1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3Qu ZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVz dC4kYWNfZXh0CitDRkxBR1M9IiRwZ2FjX3NhdmVfQ0ZMQUdTIgorZmkKK3sgJGFzX2VjaG8gIiRh c19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkcGdhY19jdl9hdng1MTJfcG9wY250 X2ludHJpbnNpY3NfX21hdng1MTJ2cG9wY250ZHFfX21hdng1MTJmIiA+JjUKKyRhc19lY2hvICIk cGdhY19jdl9hdng1MTJfcG9wY250X2ludHJpbnNpY3NfX21hdng1MTJ2cG9wY250ZHFfX21hdng1 MTJmIiA+JjY7IH0KK2lmIHRlc3QgeCIkcGdhY19jdl9hdng1MTJfcG9wY250X2ludHJpbnNpY3Nf X21hdng1MTJ2cG9wY250ZHFfX21hdng1MTJmIiA9IHgieWVzIjsgdGhlbgorICBDRkxBR1NfQVZY NTEyX1BPUENOVD0iLW1hdng1MTJ2cG9wY250ZHEgLW1hdng1MTJmIgorICBwZ2FjX2F2eDUxMl9w b3BjbnRfaW50cmluc2ljcz15ZXMKK2ZpCisKK2ZpCisKKwogIyBDaGVjayBmb3IgSW50ZWwgU1NF IDQuMiBpbnRyaW5zaWNzIHRvIGRvIENSQyBjYWxjdWxhdGlvbnMuCiAjCiAjIEZpcnN0IGNoZWNr IGlmIHRoZSBfbW1fY3JjMzJfdTggYW5kIF9tbV9jcmMzMl91NjQgaW50cmluc2ljcyBjYW4gYmUg dXNlZApkaWZmIC0tZ2l0IGEvY29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCmluZGV4IDZlNjRl Y2UxMWQuLjhmY2Y2MzViMDggMTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1 cmUuYWMKQEAgLTIwNjgsNiArMjA2OCwxOCBAQCBpZiB0ZXN0IHgiJHBnYWNfY3ZfX2dldF9jcHVp ZCIgPSB4InllcyI7IHRoZW4KICAgQUNfREVGSU5FKEhBVkVfX0dFVF9DUFVJRCwgMSwgW0RlZmlu ZSB0byAxIGlmIHlvdSBoYXZlIF9fZ2V0X2NwdWlkLl0pCiBmaQogCisjIENoZWNrIGZvciB4ODYg Y3B1aWRfY291bnQgaW5zdHJ1Y3Rpb24KK0FDX0NBQ0hFX0NIRUNLKFtmb3IgX19nZXRfY3B1aWRf Y291bnRdLCBbcGdhY19jdl9fZ2V0X2NwdWlkX2NvdW50XSwKK1tBQ19MSU5LX0lGRUxTRShbQUNf TEFOR19QUk9HUkFNKFsjaW5jbHVkZSA8Y3B1aWQuaD5dLAorICBbW3Vuc2lnbmVkIGludCBleHhb NF0gPSB7MCwgMCwgMCwgMH07CisgIF9fZ2V0X2NwdWlkX2NvdW50KDcsIDAsICZleHhbMF0sICZl eHhbMV0sICZleHhbMl0sICZleHhbM10pOworICBdXSldLAorICBbcGdhY19jdl9fZ2V0X2NwdWlk X2NvdW50PSJ5ZXMiXSwKKyAgW3BnYWNfY3ZfX2dldF9jcHVpZF9jb3VudD0ibm8iXSldKQoraWYg dGVzdCB4IiRwZ2FjX2N2X19nZXRfY3B1aWRfY291bnQiID0geCJ5ZXMiOyB0aGVuCisgIEFDX0RF RklORShIQVZFX19HRVRfQ1BVSURfQ09VTlQsIDEsIFtEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSBf X2dldF9jcHVpZC5dKQorZmkKKwogQUNfQ0FDSEVfQ0hFQ0soW2ZvciBfX2NwdWlkXSwgW3BnYWNf Y3ZfX2NwdWlkXSwKIFtBQ19MSU5LX0lGRUxTRShbQUNfTEFOR19QUk9HUkFNKFsjaW5jbHVkZSA8 aW50cmluLmg+XSwKICAgW1t1bnNpZ25lZCBpbnQgZXh4WzRdID0gezAsIDAsIDAsIDB9OwpAQCAt MjA3OSw2ICsyMDkxLDM2IEBAIGlmIHRlc3QgeCIkcGdhY19jdl9fY3B1aWQiID0geCJ5ZXMiOyB0 aGVuCiAgIEFDX0RFRklORShIQVZFX19DUFVJRCwgMSwgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZl IF9fY3B1aWQuXSkKIGZpCiAKK0FDX0NBQ0hFX0NIRUNLKFtmb3IgX19jcHVpZGV4XSwgW3BnYWNf Y3ZfX2NwdWlkZXhdLAorW0FDX0xJTktfSUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oWyNpbmNsdWRl IDxpbnRyaW4uaD5dLAorICBbW3Vuc2lnbmVkIGludCBleHhbNF0gPSB7MCwgMCwgMCwgMH07Cisg IF9fZ2V0X2NwdWlkZXgoZXh4WzBdLCA3LCAwKTsKKyAgXV0pXSwKKyAgW3BnYWNfY3ZfX2NwdWlk ZXg9InllcyJdLAorICBbcGdhY19jdl9fY3B1aWRleD0ibm8iXSldKQoraWYgdGVzdCB4IiRwZ2Fj X2N2X19jcHVpZGV4IiA9IHgieWVzIjsgdGhlbgorICBBQ19ERUZJTkUoSEFWRV9fQ1BVSURFWCwg MSwgW0RlZmluZSB0byAxIGlmIHlvdSBoYXZlIF9fY3B1aWRleC5dKQorZmkKKworQUNfQ0FDSEVf Q0hFQ0soW2ZvciBfX2ltbWludHJpbl0sIFtwZ2FjX2N2X19pbW1pbnRyaW5dLAorW0FDX0xJTktf SUZFTFNFKFtBQ19MQU5HX1BST0dSQU0oWyNpbmNsdWRlIDxpbW1pbnRyaW4uaD5dLAorICBbWy8q IERvbid0IGV4Y2x1ZGUgY29kZSBzbyBhZGRlZCByZXR1cm4uICovCisgICAgcmV0dXJuIDE3MDE7 CisgIF1dKV0sCisgIFtwZ2FjX2N2X19pbW1pbnRyaW49InllcyJdLAorICBbcGdhY19jdl9faW1t aW50cmluPSJubyJdKV0pCitpZiB0ZXN0IHgiJHBnYWNfY3ZfX2ltbWludHJpbiIgPSB4InllcyI7 IHRoZW4KKyAgQUNfREVGSU5FKEhBVkVfX0lNTUlOVFJJTiwgMSwgW0RlZmluZSB0byAxIGlmIHlv dSBoYXZlIGltbWludHJpbi5dKQorZmkKKworIyBDaGVjayBmb3IgSW50ZWwgQVZYNTEyIGludHJp bnNpY3MgdG8gZG8gUE9QQ05UIGNhbGN1bGF0aW9ucy4KKyMKK1BHQUNfQVZYNTEyX1BPUENOVF9J TlRSSU5TSUNTKFtdKQoraWYgdGVzdCB4IiRwZ2FjX2F2eDUxMl9wb3BjbnRfaW50cmluc2ljcyIg IT0geCJ5ZXMiOyB0aGVuCisgIFBHQUNfQVZYNTEyX1BPUENOVF9JTlRSSU5TSUNTKFstbWF2eDUx MnZwb3BjbnRkcSAtbWF2eDUxMmZdKQorZmkKK0FDX1NVQlNUKENGTEFHU19BVlg1MTJfUE9QQ05U KQorCiAjIENoZWNrIGZvciBJbnRlbCBTU0UgNC4yIGludHJpbnNpY3MgdG8gZG8gQ1JDIGNhbGN1 bGF0aW9ucy4KICMKICMgRmlyc3QgY2hlY2sgaWYgdGhlIF9tbV9jcmMzMl91OCBhbmQgX21tX2Ny YzMyX3U2NCBpbnRyaW5zaWNzIGNhbiBiZSB1c2VkCmRpZmYgLS1naXQgYS9tZXNvbi5idWlsZCBi L21lc29uLmJ1aWxkCmluZGV4IDhlZDUxYjZhYWUuLmJkMjk3ZDlmYTkgMTAwNjQ0Ci0tLSBhL21l c29uLmJ1aWxkCisrKyBiL21lc29uLmJ1aWxkCkBAIC0xNzczLDYgKzE3NzMsMzcgQEAgZWxpZiBj Yy5saW5rcygnJycKIGVuZGlmCiAKIAoraWYgY2MubGlua3MoJycnCisgICAgI2luY2x1ZGUgPGNw dWlkLmg+CisgICAgaW50IG1haW4oaW50IGFyZywgY2hhciAqKmFyZ3YpCisgICAgeworICAgICAg ICB1bnNpZ25lZCBpbnQgZXh4WzRdID0gezAsIDAsIDAsIDB9OworICAgICAgICBfX2dldF9jcHVp ZF9jb3VudCg3LCAwLCAmZXh4WzBdLCAmZXh4WzFdLCAmZXh4WzJdLCAmZXh4WzNdKTsKKyAgICB9 CisgICAgJycnLCBuYW1lOiAnX19nZXRfY3B1aWRfY291bnQnLAorICAgIGFyZ3M6IHRlc3RfY19h cmdzKQorICBjZGF0YS5zZXQoJ0hBVkVfX0dFVF9DUFVJRF9DT1VOVCcsIDEpCitlbGlmIGNjLmxp bmtzKCcnJworICAgICNpbmNsdWRlIDxpbnRyaW4uaD4KKyAgICBpbnQgbWFpbihpbnQgYXJnLCBj aGFyICoqYXJndikKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIGludCBleHhbNF0gPSB7MCwgMCwg MCwgMH07CisgICAgICAgIF9fY3B1aWRleChleHgsIDcsIDApOworICAgIH0KKyAgICAnJycsIG5h bWU6ICdfX2NwdWlkZXgnLAorICAgIGFyZ3M6IHRlc3RfY19hcmdzKQorICBjZGF0YS5zZXQoJ0hB VkVfX0NQVUlERVgnLCAxKQorZW5kaWYKKworCisjIENoZWNrIGZvciBoZWFkZXIgaW1taW50cmlu LmgKK2lmIGNjLmhhc19oZWFkZXIoJ2ltbWludHJpbi5oJywKKyAgICBpbmNsdWRlX2RpcmVjdG9y aWVzOiBwb3N0Z3Jlc19pbmMsIGFyZ3M6IHRlc3RfY19hcmdzKQorICBjZGF0YS5zZXQoJ0hBVkVf X0lNTUlOVFJJTicsIDEsCisgICAgICAgICAgICBkZXNjcmlwdGlvbjogJ0RlZmluZSB0byAxIGlm IHlvdSBoYXZlIHRoZSBpbW1pbnRyaW4uaCBoZWFkZXIgZmlsZS4nKQorZW5kaWYKKworCiAjIERl ZmVuZCBhZ2FpbnN0IGNsYW5nIGJlaW5nIHVzZWQgb24geDg2LTMyIHdpdGhvdXQgU1NFMiBlbmFi bGVkLiAgQXMgY3VycmVudAogIyB2ZXJzaW9ucyBvZiBjbGFuZyBkbyBub3QgdW5kZXJzdGFuZCAt ZmV4Y2Vzcy1wcmVjaXNpb249c3RhbmRhcmQsIHRoZSB1c2Ugb2YKICMgeDg3IGZsb2F0aW5nIHBv aW50IG9wZXJhdGlvbnMgbGVhZHMgdG8gcHJvYmxlbXMgbGlrZSBpc2luZiBwb3NzaWJseSByZXR1 cm5pbmcKQEAgLTIxNDYsNiArMjE3Nyw0MyBAQCBlbGlmIGhvc3RfY3B1ID09ICdwcGMnIG9yIGhv c3RfY3B1ID09ICdwcGM2NCcKICAgZW5kaWYKIGVuZGlmCiAKKyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyBBVlggNTEyIFBP UENOVCBJbnRyaW5zaWMgY2hlY2sKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworaGF2ZV9hdng1MTJfcG9wY250ID0gZmFsc2UK K2NmbGFnc19hdng1MTJfcG9wY250ID0gW10KK2lmIGhvc3RfY3B1ID09ICd4ODZfNjQnCisgIHRl c3RfZmxhZ3MgPSBbJy1tYXZ4NTEydnBvcGNudGRxJywgJy1tYXZ4NTEyZiddCisgIGlmIGhvc3Rf c3lzdGVtID09ICd3aW5kb3dzJworICAgIHRlc3RfZmxhZ3MgPSBbJy9hcmNoOkFWWDUxMiddCisg IGVuZGlmCisgIHByb2cgPSAnJycKKyAgICAgICNpbmNsdWRlIDxpbW1pbnRyaW4uaD4KKyAgICAg ICNpbmNsdWRlIDxzdGRpbnQuaD4KKyAgICAgIHZvaWQgbWFpbih2b2lkKQorICAgICAgeworICAg ICAgICBfX201MTJpIHRtcCBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDY0KSkpOworICAgICAgICBf X201MTJpIGlucHV0ID0gX21tNTEyX3NldHplcm9fc2k1MTIoKTsKKyAgICAgICAgX19tNTEyaSBv dXRwdXQgPSBfbW01MTJfcG9wY250X2VwaTY0KGlucHV0KTsKKyAgICAgICAgdWludDY0X3QgY250 ID0gOTk5OworICAgICAgICBfbW01MTJfc3RvcmVfc2k1MTIoJnRtcCwgb3V0cHV0KTsKKyAgICAg ICAgY250ID0gX21tNTEyX3JlZHVjZV9hZGRfZXBpNjQodG1wKTsKKyAgICAgICAgLyogcmV0dXJu IGNvbXB1dGVkIHZhbHVlLCB0byBwcmV2ZW50IHRoZSBhYm92ZSBiZWluZyBvcHRpbWl6ZWQgYXdh eSAqLworICAgICAgICByZXR1cm4gY250ID09IDA7CisgICAgICB9JycnCisgIGlmIGNjLmxpbmtz KHByb2csIG5hbWU6ICdfbW01MTJfKiBtZXRob2RzIHdpdGggLW1hdng1MTJ2cG9wY250ZHEgLW1h dng1MTJmJywKKyAgICAgICAgICAgICAgYXJnczogdGVzdF9jX2FyZ3MgKyB0ZXN0X2ZsYWdzKQor ICAgIGhhdmVfYXZ4NTEyX3BvcGNudCA9IHRydWUKKyAgICBjZGF0YS5zZXQoJ1VTRV9BVlg1MTJf UE9QQ05UX1dJVEhfUlVOVElNRV9DSEVDSycsIDEpCisgICAgY2RhdGEuc2V0KCdIQVZFX19BVlg1 MTJfUE9QQ05UJywgMSkKKyAgICBjZmxhZ3NfYXZ4NTEyX3BvcGNudCA9IHRlc3RfZmxhZ3MKKyAg ZWxzZQorICAgIGhhdmVfYXZ4NTEyX3BvcGNudCA9IGZhbHNlCisgICAgY2RhdGEuc2V0KCdVU0Vf QVZYNTEyX1BPUENOVF9XSVRIX1JVTlRJTUVfQ0hFQ0snLCAxKQorICAgIGNmbGFnc19hdng1MTJf cG9wY250ID0gW10KKyAgZW5kaWYgIyBjb21waWxlL2xpbmsgdGVzdAorZW5kaWYgIyBob3N0X2Nw dSBjaGVjaworCiAKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCmRpZmYgLS1naXQgYS9zcmMvTWFrZWZpbGUuZ2xvYmFsLmlu IGIvc3JjL01ha2VmaWxlLmdsb2JhbC5pbgppbmRleCA4YjNmOGMyNGUwLi4wODlmNDliN2YzIDEw MDY0NAotLS0gYS9zcmMvTWFrZWZpbGUuZ2xvYmFsLmluCisrKyBiL3NyYy9NYWtlZmlsZS5nbG9i YWwuaW4KQEAgLTI2Myw2ICsyNjMsNyBAQCBDWFhGTEFHU19TTF9NT0RVTEUgPSBAQ1hYRkxBR1Nf U0xfTU9EVUxFQAogQ0ZMQUdTX1VOUk9MTF9MT09QUyA9IEBDRkxBR1NfVU5ST0xMX0xPT1BTQAog Q0ZMQUdTX1ZFQ1RPUklaRSA9IEBDRkxBR1NfVkVDVE9SSVpFQAogQ0ZMQUdTX0NSQyA9IEBDRkxB R1NfQ1JDQAorQ0ZMQUdTX0FWWDUxMl9QT1BDTlQgPSBAQ0ZMQUdTX0FWWDUxMl9QT1BDTlRACiBQ RVJNSVRfREVDTEFSQVRJT05fQUZURVJfU1RBVEVNRU5UID0gQFBFUk1JVF9ERUNMQVJBVElPTl9B RlRFUl9TVEFURU1FTlRACiBDWFhGTEFHUyA9IEBDWFhGTEFHU0AKIApkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvcGdfY29uZmlnLmguaW4gYi9zcmMvaW5jbHVkZS9wZ19jb25maWcuaC5pbgppbmRl eCAwN2U3MzU2N2RjLi4yMGUxNGM2NDk5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wZ19jb25m aWcuaC5pbgorKysgYi9zcmMvaW5jbHVkZS9wZ19jb25maWcuaC5pbgpAQCAtNTU1LDYgKzU1NSwx MiBAQAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgX19nZXRfY3B1aWQuICovCiAjdW5kZWYg SEFWRV9fR0VUX0NQVUlECiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIF9fZ2V0X2NwdWlk X2NvdW50LiAqLworI3VuZGVmIEhBVkVfX0dFVF9DUFVJRF9DT1VOVAorCisvKiBEZWZpbmUgdG8g MSBpZiB5b3UgaGF2ZSAgaW1taW50cmluLiAqLworI3VuZGVmIEhBVkVfX0lNTUlOVFJJTgorCiAv KiBEZWZpbmUgdG8gMSBpZiB5b3VyIGNvbXBpbGVyIHVuZGVyc3RhbmRzIF9TdGF0aWNfYXNzZXJ0 LiAqLwogI3VuZGVmIEhBVkVfX1NUQVRJQ19BU1NFUlQKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvcG9ydC9wZ19iaXR1dGlscy5oIGIvc3JjL2luY2x1ZGUvcG9ydC9wZ19iaXR1dGlscy5oCmlu ZGV4IDc5OWY3MGQwNTIuLmNhY2E3OGQ4MDUgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3BvcnQv cGdfYml0dXRpbHMuaAorKysgYi9zcmMvaW5jbHVkZS9wb3J0L3BnX2JpdHV0aWxzLmgKQEAgLTMw MywxNiArMzAzLDIzIEBAIHBnX2NlaWxfbG9nMl82NCh1aW50NjQgbnVtKQogZXh0ZXJuIGludAko KnBnX3BvcGNvdW50MzIpICh1aW50MzIgd29yZCk7CiBleHRlcm4gaW50CSgqcGdfcG9wY291bnQ2 NCkgKHVpbnQ2NCB3b3JkKTsKIAorI2lmIGRlZmluZWQoX01TQ19WRVIpCitleHRlcm4gdWludDY0 IHBnX3BvcGNvdW50KGNvbnN0IGNoYXIgKmJ1ZiwgaW50IGJ5dGVzKTsKK2V4dGVybiB1aW50NjQg KCpwZ19wb3Bjb3VudF9pbmRpcmVjdCkoY29uc3QgY2hhciAqYnVmLCBpbnQgYnl0ZXMpOworI2Vs c2UKK2V4dGVybiB1aW50NjQgKCpwZ19wb3Bjb3VudCkoY29uc3QgY2hhciAqYnVmLCBpbnQgYnl0 ZXMpOworI2VuZGlmCisKICNlbHNlCiAvKiBVc2UgYSBwb3J0YWJsZSBpbXBsZW1lbnRhdGlvbiAt LSBubyBuZWVkIGZvciBhIGZ1bmN0aW9uIHBvaW50ZXIuICovCiBleHRlcm4gaW50CXBnX3BvcGNv dW50MzIodWludDMyIHdvcmQpOwogZXh0ZXJuIGludAlwZ19wb3Bjb3VudDY0KHVpbnQ2NCB3b3Jk KTsKIAotI2VuZGlmCQkJCQkJCS8qIFRSWV9QT1BDTlRfRkFTVCAqLwotCiAvKiBDb3VudCB0aGUg bnVtYmVyIG9mIG9uZS1iaXRzIGluIGEgYnl0ZSBhcnJheSAqLwogZXh0ZXJuIHVpbnQ2NCBwZ19w b3Bjb3VudChjb25zdCBjaGFyICpidWYsIGludCBieXRlcyk7CiAKKyNlbmRpZgkJCQkJCQkvKiBU UllfUE9QQ05UX0ZBU1QgKi8KKwogLyoKICAqIFJvdGF0ZSB0aGUgYml0cyBvZiAid29yZCIgdG8g dGhlIHJpZ2h0L2xlZnQgYnkgbiBiaXRzLgogICovCmRpZmYgLS1naXQgYS9zcmMvbWFrZWZpbGVz L21lc29uLmJ1aWxkIGIvc3JjL21ha2VmaWxlcy9tZXNvbi5idWlsZAppbmRleCBiMGY0MTc4YjNk Li5lZTM2NDcyODJlIDEwMDY0NAotLS0gYS9zcmMvbWFrZWZpbGVzL21lc29uLmJ1aWxkCisrKyBi L3NyYy9tYWtlZmlsZXMvbWVzb24uYnVpbGQKQEAgLTEwMCw2ICsxMDAsNyBAQCBwZ3hzX2t2ID0g ewogICAgICcgJy5qb2luKGNmbGFnc19ub19kZWNsX2FmdGVyX3N0YXRlbWVudCksCiAKICAgJ0NG TEFHU19DUkMnOiAnICcuam9pbihjZmxhZ3NfY3JjKSwKKyAgJ0NGTEFHU19BVlg1MTJfUE9QQ05U JzogJyAnLmpvaW4oY2ZsYWdzX2F2eDUxMl9wb3BjbnQpLAogICAnQ0ZMQUdTX1VOUk9MTF9MT09Q Uyc6ICcgJy5qb2luKHVucm9sbF9sb29wc19jZmxhZ3MpLAogICAnQ0ZMQUdTX1ZFQ1RPUklaRSc6 ICcgJy5qb2luKHZlY3Rvcml6ZV9jZmxhZ3MpLAogCmRpZmYgLS1naXQgYS9zcmMvcG9ydC9NYWtl ZmlsZSBiL3NyYy9wb3J0L01ha2VmaWxlCmluZGV4IGRjYzg3MzdlNjguLmVmNmMwMmE2YmYgMTAw NjQ0Ci0tLSBhL3NyYy9wb3J0L01ha2VmaWxlCisrKyBiL3NyYy9wb3J0L01ha2VmaWxlCkBAIC00 Myw2ICs0Myw4IEBAIE9CSlMgPSBcCiAJaW5ldF9uZXRfbnRvcC5vIFwKIAlub2Jsb2NrLm8gXAog CXBhdGgubyBcCisJcGdfcG9wY250X2Nob29zZS5vIFwKKwlwZ19wb3BjbnRfeDg2XzY0X2FjY2Vs Lm8gXAogCXBnX2JpdHV0aWxzLm8gXAogCXBnX3N0cm9uZ19yYW5kb20ubyBcCiAJcGdjaGVja2Rp ci5vIFwKQEAgLTg3LDYgKzg5LDExIEBAIHBnX2NyYzMyY19zc2U0Mi5vOiBDRkxBR1MrPSQoQ0ZM QUdTX0NSQykKIHBnX2NyYzMyY19zc2U0Ml9zaGxpYi5vOiBDRkxBR1MrPSQoQ0ZMQUdTX0NSQykK IHBnX2NyYzMyY19zc2U0Ml9zcnYubzogQ0ZMQUdTKz0kKENGTEFHU19DUkMpCiAKKyMgTmV3ZXIg SW50ZWwgcHJvY2Vzc29ycyBjYW4gdXNlIEFWWC01MTIgUE9QQ05UIENhcGFiaWxpdGllcyAoMDEv MzAvMjAyNCkKK3BnX3BvcGNudF94ODZfNjRfYWNjZWwubzogQ0ZMQUdTKz0kKENGTEFHU19BVlg1 MTJfUE9QQ05UKQorcGdfcG9wY250X3g4Nl82NF9hY2NlbF9zaGxpYi5vOiBDRkxBR1MrPSQoQ0ZM QUdTX0FWWDUxMl9QT1BDTlQpCitwZ19wb3BjbnRfeDg2XzY0X2FjY2VsX3Nydi5vOiBDRkxBR1Mr PSQoQ0ZMQUdTX0FWWDUxMl9QT1BDTlQpCisKICMgYWxsIHZlcnNpb25zIG9mIHBnX2NyYzMyY19h cm12OC5vIG5lZWQgQ0ZMQUdTX0NSQwogcGdfY3JjMzJjX2FybXY4Lm86IENGTEFHUys9JChDRkxB R1NfQ1JDKQogcGdfY3JjMzJjX2FybXY4X3NobGliLm86IENGTEFHUys9JChDRkxBR1NfQ1JDKQpk aWZmIC0tZ2l0IGEvc3JjL3BvcnQvbWVzb24uYnVpbGQgYi9zcmMvcG9ydC9tZXNvbi5idWlsZApp bmRleCA5MmI1OTNlNmVmLi5kNzkzMDY3MmNiIDEwMDY0NAotLS0gYS9zcmMvcG9ydC9tZXNvbi5i dWlsZAorKysgYi9zcmMvcG9ydC9tZXNvbi5idWlsZApAQCAtNyw2ICs3LDcgQEAgcGdwb3J0X3Nv dXJjZXMgPSBbCiAgICdub2Jsb2NrLmMnLAogICAncGF0aC5jJywKICAgJ3BnX2JpdHV0aWxzLmMn LAorICAncGdfcG9wY250X2Nob29zZS5jJywKICAgJ3BnX3N0cm9uZ19yYW5kb20uYycsCiAgICdw Z2NoZWNrZGlyLmMnLAogICAncGdta2RpcnAuYycsCkBAIC04NCw2ICs4NSw3IEBAIHJlcGxhY2Vf ZnVuY3NfcG9zID0gWwogICBbJ3BnX2NyYzMyY19zc2U0MicsICdVU0VfU1NFNDJfQ1JDMzJDX1dJ VEhfUlVOVElNRV9DSEVDSycsICdjcmMnXSwKICAgWydwZ19jcmMzMmNfc3NlNDJfY2hvb3NlJywg J1VTRV9TU0U0Ml9DUkMzMkNfV0lUSF9SVU5USU1FX0NIRUNLJ10sCiAgIFsncGdfY3JjMzJjX3Ni OCcsICdVU0VfU1NFNDJfQ1JDMzJDX1dJVEhfUlVOVElNRV9DSEVDSyddLAorICBbJ3BnX3BvcGNu dF94ODZfNjRfYWNjZWwnLCAnVVNFX0FWWDUxMl9QT1BDTlRfV0lUSF9SVU5USU1FX0NIRUNLJywg J2F2eDUxMiddLAogCiAgICMgYXJtIC8gYWFyY2g2NAogICBbJ3BnX2NyYzMyY19hcm12OCcsICdV U0VfQVJNVjhfQ1JDMzJDJ10sCkBAIC05OCw4ICsxMDAsOCBAQCByZXBsYWNlX2Z1bmNzX3BvcyA9 IFsKICAgWydwZ19jcmMzMmNfc2I4JywgJ1VTRV9TTElDSU5HX0JZXzhfQ1JDMzJDJ10sCiBdCiAK LXBncG9ydF9jZmxhZ3MgPSB7J2NyYyc6IGNmbGFnc19jcmN9Ci1wZ3BvcnRfc291cmNlc19jZmxh Z3MgPSB7J2NyYyc6IFtdfQorcGdwb3J0X2NmbGFncyA9IHsnY3JjJzogY2ZsYWdzX2NyYywgJ2F2 eDUxMic6IGNmbGFnc19hdng1MTJfcG9wY250fQorcGdwb3J0X3NvdXJjZXNfY2ZsYWdzID0geydj cmMnOiBbXSwgJ2F2eDUxMic6IFtdfQogCiBmb3JlYWNoIGYgOiByZXBsYWNlX2Z1bmNzX25lZwog ICBmdW5jID0gZi5nZXQoMCkKZGlmZiAtLWdpdCBhL3NyYy9wb3J0L3BnX2JpdHV0aWxzLmMgYi9z cmMvcG9ydC9wZ19iaXR1dGlscy5jCmluZGV4IDY0MGE4OTU2MWEuLjk0MmUzOTYxNDEgMTAwNjQ0 Ci0tLSBhL3NyYy9wb3J0L3BnX2JpdHV0aWxzLmMKKysrIGIvc3JjL3BvcnQvcGdfYml0dXRpbHMu YwpAQCAtMTIsMTYgKzEyLDggQEAKICAqLwogI2luY2x1ZGUgImMuaCIKIAotI2lmZGVmIEhBVkVf X0dFVF9DUFVJRAotI2luY2x1ZGUgPGNwdWlkLmg+Ci0jZW5kaWYKLSNpZmRlZiBIQVZFX19DUFVJ RAotI2luY2x1ZGUgPGludHJpbi5oPgotI2VuZGlmCi0KICNpbmNsdWRlICJwb3J0L3BnX2JpdHV0 aWxzLmgiCiAKLQogLyoKICAqIEFycmF5IGdpdmluZyB0aGUgcG9zaXRpb24gb2YgdGhlIGxlZnQt bW9zdCBzZXQgYml0IGZvciBlYWNoIHBvc3NpYmxlCiAgKiBieXRlIHZhbHVlLiAgV2UgY291bnQg dGhlIHJpZ2h0LW1vc3QgcG9zaXRpb24gYXMgdGhlIDB0aCBiaXQsIGFuZCB0aGUKQEAgLTc4LDYg KzcwLDcgQEAgY29uc3QgdWludDggcGdfcmlnaHRtb3N0X29uZV9wb3NbMjU2XSA9IHsKIAk0LCAw LCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwCiB9OwogCisKIC8qCiAg KiBBcnJheSBnaXZpbmcgdGhlIG51bWJlciBvZiAxLWJpdHMgaW4gZWFjaCBwb3NzaWJsZSBieXRl IHZhbHVlLgogICoKQEAgLTEwMywxMjMgKzk2LDM1IEBAIGNvbnN0IHVpbnQ4IHBnX251bWJlcl9v Zl9vbmVzWzI1Nl0gPSB7CiAJNCwgNSwgNSwgNiwgNSwgNiwgNiwgNywgNSwgNiwgNiwgNywgNiwg NywgNywgOAogfTsKIAotc3RhdGljIGludAlwZ19wb3Bjb3VudDMyX3Nsb3codWludDMyIHdvcmQp Owotc3RhdGljIGludAlwZ19wb3Bjb3VudDY0X3Nsb3codWludDY0IHdvcmQpOworaW50CXBnX3Bv cGNvdW50MzJfc2xvdyh1aW50MzIgd29yZCk7CitpbnQJcGdfcG9wY291bnQ2NF9zbG93KHVpbnQ2 NCB3b3JkKTsKK3VpbnQ2NCBwZ19wb3Bjb3VudF9zbG93KGNvbnN0IGNoYXIgKmJ1ZiwgaW50IGJ5 dGVzKTsKIAogI2lmZGVmIFRSWV9QT1BDTlRfRkFTVAotc3RhdGljIGJvb2wgcGdfcG9wY291bnRf YXZhaWxhYmxlKHZvaWQpOwotc3RhdGljIGludAlwZ19wb3Bjb3VudDMyX2Nob29zZSh1aW50MzIg d29yZCk7Ci1zdGF0aWMgaW50CXBnX3BvcGNvdW50NjRfY2hvb3NlKHVpbnQ2NCB3b3JkKTsKLXN0 YXRpYyBpbnQJcGdfcG9wY291bnQzMl9mYXN0KHVpbnQzMiB3b3JkKTsKLXN0YXRpYyBpbnQJcGdf cG9wY291bnQ2NF9mYXN0KHVpbnQ2NCB3b3JkKTsKK2V4dGVybiBpbnQJcGdfcG9wY291bnQzMl9j aG9vc2UodWludDMyIHdvcmQpOworZXh0ZXJuIGludAlwZ19wb3Bjb3VudDY0X2Nob29zZSh1aW50 NjQgd29yZCk7CitleHRlcm4gdWludDY0IHBnX3BvcGNvdW50X2Nob29zZShjb25zdCBjaGFyICpi dWYsIGludCBieXRlcyk7CiAKIGludAkJCSgqcGdfcG9wY291bnQzMikgKHVpbnQzMiB3b3JkKSA9 IHBnX3BvcGNvdW50MzJfY2hvb3NlOwogaW50CQkJKCpwZ19wb3Bjb3VudDY0KSAodWludDY0IHdv cmQpID0gcGdfcG9wY291bnQ2NF9jaG9vc2U7Ci0jZW5kaWYJCQkJCQkJLyogVFJZX1BPUENOVF9G QVNUICovCi0KLSNpZmRlZiBUUllfUE9QQ05UX0ZBU1QKLQotLyoKLSAqIFJldHVybiB0cnVlIGlm IENQVUlEIGluZGljYXRlcyB0aGF0IHRoZSBQT1BDTlQgaW5zdHJ1Y3Rpb24gaXMgYXZhaWxhYmxl LgotICovCi1zdGF0aWMgYm9vbAotcGdfcG9wY291bnRfYXZhaWxhYmxlKHZvaWQpCi17Ci0JdW5z aWduZWQgaW50IGV4eFs0XSA9IHswLCAwLCAwLCAwfTsKLQotI2lmIGRlZmluZWQoSEFWRV9fR0VU X0NQVUlEKQotCV9fZ2V0X2NwdWlkKDEsICZleHhbMF0sICZleHhbMV0sICZleHhbMl0sICZleHhb M10pOwotI2VsaWYgZGVmaW5lZChIQVZFX19DUFVJRCkKLQlfX2NwdWlkKGV4eCwgMSk7Ci0jZWxz ZQotI2Vycm9yIGNwdWlkIGluc3RydWN0aW9uIG5vdCBhdmFpbGFibGUKLSNlbmRpZgotCi0JcmV0 dXJuIChleHhbMl0gJiAoMSA8PCAyMykpICE9IDA7CS8qIFBPUENOVCAqLwotfQotCi0vKgotICog VGhlc2UgZnVuY3Rpb25zIGdldCBjYWxsZWQgb24gdGhlIGZpcnN0IGNhbGwgdG8gcGdfcG9wY291 bnQzMiBldGMuCi0gKiBUaGV5IGRldGVjdCB3aGV0aGVyIHdlIGNhbiB1c2UgdGhlIGFzbSBpbXBs ZW1lbnRhdGlvbnMsIGFuZCByZXBsYWNlCi0gKiB0aGUgZnVuY3Rpb24gcG9pbnRlcnMgc28gdGhh dCBzdWJzZXF1ZW50IGNhbGxzIGFyZSByb3V0ZWQgZGlyZWN0bHkgdG8KLSAqIHRoZSBjaG9zZW4g aW1wbGVtZW50YXRpb24uCi0gKi8KLXN0YXRpYyBpbnQKLXBnX3BvcGNvdW50MzJfY2hvb3NlKHVp bnQzMiB3b3JkKQotewotCWlmIChwZ19wb3Bjb3VudF9hdmFpbGFibGUoKSkKLQl7Ci0JCXBnX3Bv cGNvdW50MzIgPSBwZ19wb3Bjb3VudDMyX2Zhc3Q7Ci0JCXBnX3BvcGNvdW50NjQgPSBwZ19wb3Bj b3VudDY0X2Zhc3Q7Ci0JfQotCWVsc2UKLQl7Ci0JCXBnX3BvcGNvdW50MzIgPSBwZ19wb3Bjb3Vu dDMyX3Nsb3c7Ci0JCXBnX3BvcGNvdW50NjQgPSBwZ19wb3Bjb3VudDY0X3Nsb3c7Ci0JfQotCi0J cmV0dXJuIHBnX3BvcGNvdW50MzIod29yZCk7Ci19Ci0KLXN0YXRpYyBpbnQKLXBnX3BvcGNvdW50 NjRfY2hvb3NlKHVpbnQ2NCB3b3JkKQotewotCWlmIChwZ19wb3Bjb3VudF9hdmFpbGFibGUoKSkK LQl7Ci0JCXBnX3BvcGNvdW50MzIgPSBwZ19wb3Bjb3VudDMyX2Zhc3Q7Ci0JCXBnX3BvcGNvdW50 NjQgPSBwZ19wb3Bjb3VudDY0X2Zhc3Q7Ci0JfQotCWVsc2UKLQl7Ci0JCXBnX3BvcGNvdW50MzIg PSBwZ19wb3Bjb3VudDMyX3Nsb3c7Ci0JCXBnX3BvcGNvdW50NjQgPSBwZ19wb3Bjb3VudDY0X3Ns b3c7Ci0JfQotCi0JcmV0dXJuIHBnX3BvcGNvdW50NjQod29yZCk7Ci19Ci0KLS8qCi0gKiBwZ19w b3Bjb3VudDMyX2Zhc3QKLSAqCQlSZXR1cm4gdGhlIG51bWJlciBvZiAxIGJpdHMgc2V0IGluIHdv cmQKLSAqLwotc3RhdGljIGludAotcGdfcG9wY291bnQzMl9mYXN0KHVpbnQzMiB3b3JkKQorI2lm IGRlZmluZWQoX01TQ19WRVIpCit1aW50NjQgKCpwZ19wb3Bjb3VudF9pbmRpcmVjdCkoY29uc3Qg Y2hhciAqYnVmLCBpbnQgYnl0ZXMpID0gcGdfcG9wY291bnRfY2hvb3NlOwordWludDY0IHBnX3Bv cGNvdW50KGNvbnN0IGNoYXIgKmJ1ZiwgaW50IGJ5dGVzKQogewotI2lmZGVmIF9NU0NfVkVSCi0J cmV0dXJuIF9fcG9wY250KHdvcmQpOwotI2Vsc2UKLQl1aW50MzIJCXJlczsKLQotX19hc21fXyBf X3ZvbGF0aWxlX18oIiBwb3BjbnRsICUxLCUwXG4iOiI9cSIocmVzKToicm0iKHdvcmQpOiJjYyIp OwotCXJldHVybiAoaW50KSByZXM7Ci0jZW5kaWYKKwlyZXR1cm4gcGdfcG9wY291bnRfaW5kaXJl Y3QoYnVmLCBieXRlcyk7CiB9Ci0KLS8qCi0gKiBwZ19wb3Bjb3VudDY0X2Zhc3QKLSAqCQlSZXR1 cm4gdGhlIG51bWJlciBvZiAxIGJpdHMgc2V0IGluIHdvcmQKLSAqLwotc3RhdGljIGludAotcGdf cG9wY291bnQ2NF9mYXN0KHVpbnQ2NCB3b3JkKQotewotI2lmZGVmIF9NU0NfVkVSCi0JcmV0dXJu IF9fcG9wY250NjQod29yZCk7CiAjZWxzZQotCXVpbnQ2NAkJcmVzOwotCi1fX2FzbV9fIF9fdm9s YXRpbGVfXygiIHBvcGNudHEgJTEsJTBcbiI6Ij1xIihyZXMpOiJybSIod29yZCk6ImNjIik7Ci0J cmV0dXJuIChpbnQpIHJlczsKK3VpbnQ2NAkJKCpwZ19wb3Bjb3VudCkgKGNvbnN0IGNoYXIgKmJ1 ZiwgaW50IGJ5dGVzKSA9IHBnX3BvcGNvdW50X2Nob29zZTsKICNlbmRpZgotfQotCi0jZW5kaWYJ CQkJCQkJLyogVFJZX1BPUENOVF9GQVNUICovCi0KKyNlbHNlCQkJCQkJCQkvKiBUUllfUE9QQ05U X0ZBU1QgKi8KK3VpbnQ2NCBwZ19wb3Bjb3VudChjb25zdCBjaGFyICpidWYsIGludCBieXRlcyk7 CisjZW5kaWYgCQkJCQkJCQkvKiBUUllfUE9QQ05UX0ZBU1QgKi8KIAogLyoKICAqIHBnX3BvcGNv dW50MzJfc2xvdwogICoJCVJldHVybiB0aGUgbnVtYmVyIG9mIDEgYml0cyBzZXQgaW4gd29yZAog ICovCi1zdGF0aWMgaW50CitpbnQKIHBnX3BvcGNvdW50MzJfc2xvdyh1aW50MzIgd29yZCkKIHsK ICNpZmRlZiBIQVZFX19CVUlMVElOX1BPUENPVU5UCkBAIC0yNDEsNyArMTQ2LDcgQEAgcGdfcG9w Y291bnQzMl9zbG93KHVpbnQzMiB3b3JkKQogICogcGdfcG9wY291bnQ2NF9zbG93CiAgKgkJUmV0 dXJuIHRoZSBudW1iZXIgb2YgMSBiaXRzIHNldCBpbiB3b3JkCiAgKi8KLXN0YXRpYyBpbnQKK2lu dAogcGdfcG9wY291bnQ2NF9zbG93KHVpbnQ2NCB3b3JkKQogewogI2lmZGVmIEhBVkVfX0JVSUxU SU5fUE9QQ09VTlQKQEAgLTI4NiwyMiArMTkxLDI5IEBAIHBnX3BvcGNvdW50NjQodWludDY0IHdv cmQpCiAJcmV0dXJuIHBnX3BvcGNvdW50NjRfc2xvdyh3b3JkKTsKIH0KIAordWludDY0CitwZ19w b3Bjb3VudChjb25zdCBjaGFyICpidWYsIGludCBieXRlcykKK3sKKwlyZXR1cm4gcGdfcG9wY291 bnRfc2xvdyhidWYsIGJ5dGVzKTsKK30KKwogI2VuZGlmCQkJCQkJCS8qICFUUllfUE9QQ05UX0ZB U1QgKi8KIAogLyoKICAqIHBnX3BvcGNvdW50Ci0gKgkJUmV0dXJucyB0aGUgbnVtYmVyIG9mIDEt Yml0cyBpbiBidWYKKyAqCQlSZXR1cm5zIHRoZSBudW1iZXIgb2YgMS1iaXRzIGluIGJ1ZiB1c2lu ZyBlaXRoZXIgMzIgb3IgNjQgYml0IGxvb3BzCisgKiAgICAgIG9yIGZhbGxiYWNrIHRvIF9fYnVp bHRpbl8qIG9yIHB1cmUgc29mdHdhcmUuCiAgKi8KIHVpbnQ2NAotcGdfcG9wY291bnQoY29uc3Qg Y2hhciAqYnVmLCBpbnQgYnl0ZXMpCitwZ19wb3Bjb3VudF9zbG93KGNvbnN0IGNoYXIgKmJ1Ziwg aW50IGJ5dGVzKQogewogCXVpbnQ2NAkJcG9wY250ID0gMDsKIAotI2lmIFNJWkVPRl9WT0lEX1Ag Pj0gOAorI2lmIFNJWkVPRl9WT0lEX1AgPT0gOAogCS8qIFByb2Nlc3MgaW4gNjQtYml0IGNodW5r cyBpZiB0aGUgYnVmZmVyIGlzIGFsaWduZWQuICovCi0JaWYgKGJ1ZiA9PSAoY29uc3QgY2hhciAq KSBUWVBFQUxJR04oOCwgYnVmKSkKKwlpZiAoYnVmID09IChjb25zdCBjaGFyICopVFlQRUFMSUdO KDgsIGJ1ZikpCiAJewotCQljb25zdCB1aW50NjQgKndvcmRzID0gKGNvbnN0IHVpbnQ2NCAqKSBi dWY7CisJCWNvbnN0IHVpbnQ2NCAqd29yZHMgPSAoY29uc3QgdWludDY0ICopYnVmOwogCiAJCXdo aWxlIChieXRlcyA+PSA4KQogCQl7CkBAIC0zMDksOSArMjIxLDkgQEAgcGdfcG9wY291bnQoY29u c3QgY2hhciAqYnVmLCBpbnQgYnl0ZXMpCiAJCQlieXRlcyAtPSA4OwogCQl9CiAKLQkJYnVmID0g KGNvbnN0IGNoYXIgKikgd29yZHM7CisJCWJ1ZiA9IChjb25zdCBjaGFyICopd29yZHM7CiAJfQot I2Vsc2UKKyNlbGlmIFNJWkVPRl9WT0lEX1AgPT0gNAogCS8qIFByb2Nlc3MgaW4gMzItYml0IGNo dW5rcyBpZiB0aGUgYnVmZmVyIGlzIGFsaWduZWQuICovCiAJaWYgKGJ1ZiA9PSAoY29uc3QgY2hh ciAqKSBUWVBFQUxJR04oNCwgYnVmKSkKIAl7CmRpZmYgLS1naXQgYS9zcmMvcG9ydC9wZ19wb3Bj bnRfY2hvb3NlLmMgYi9zcmMvcG9ydC9wZ19wb3BjbnRfY2hvb3NlLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uZTE3MGUxNmZmOQotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy9wb3J0L3BnX3BvcGNudF9jaG9vc2UuYwpAQCAtMCwwICsxLDE2OCBAQAorLyotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tCisgKgorICogcGdfcG9wY250X3g4Nl82NF9jaG9vc2UuYworICoJICBNaXNjZWxsYW5l b3VzIGZ1bmN0aW9ucyBmb3IgYml0LXdpc2Ugb3BlcmF0aW9ucy4KKyAqCisgKiBDb3B5cmlnaHQg KGMpIDIwMjQsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKgorICogSURF TlRJRklDQVRJT04KKyAqCSAgc3JjL3BvcnQvcGdfcG9wY250X3g4Nl82NF9jaG9vc2UuYworICoK KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAiYy5oIgorCisjaW5jbHVkZSAicG9y dC9wZ19iaXR1dGlscy5oIgorCisjaWZkZWYgVFJZX1BPUENOVF9GQVNUCisKKyNpZmRlZiBIQVZF X19HRVRfQ1BVSUQKKyNpbmNsdWRlIDxjcHVpZC5oPgorI2VuZGlmCisKKyNpZmRlZiBIQVZFX19D UFVJRAorI2luY2x1ZGUgPGludHJpbi5oPgorI2VuZGlmCisKK3N0YXRpYyBib29sIHBnX3BvcGNv dW50X2F2YWlsYWJsZSh2b2lkKTsKK2ludCBwZ19wb3Bjb3VudDMyX2Nob29zZSh1aW50MzIgd29y ZCk7CitpbnQgcGdfcG9wY291bnQ2NF9jaG9vc2UodWludDY0IHdvcmQpOwordWludDY0IHBnX3Bv cGNvdW50X2Nob29zZShjb25zdCBjaGFyICpidWYsIGludCBieXRlcyk7CisKK2V4dGVybiBpbnQg cGdfcG9wY291bnQzMl9mYXN0KHVpbnQzMiB3b3JkKTsKK2V4dGVybiBpbnQgcGdfcG9wY291bnQ2 NF9mYXN0KHVpbnQ2NCB3b3JkKTsKK2V4dGVybiBpbnQgcGdfcG9wY291bnQzMl9zbG93KHVpbnQz MiB3b3JkKTsKK2V4dGVybiBpbnQgcGdfcG9wY291bnQ2NF9zbG93KHVpbnQ2NCB3b3JkKTsKK2V4 dGVybiB1aW50NjQgcGdfcG9wY291bnQ1MTJfZmFzdChjb25zdCBjaGFyICpidWYsIGludCBieXRl cyk7CitleHRlcm4gdWludDY0IHBnX3BvcGNvdW50X3Nsb3coY29uc3QgY2hhciAqYnVmLCBpbnQg Ynl0ZXMpOworZXh0ZXJuIHVpbnQ2NCAoKnBnX3BvcGNvdW50X2luZGlyZWN0KShjb25zdCBjaGFy ICpidWYsIGludCBieXRlcyk7CisKK2V4dGVybiBpbnQgKCpwZ19wb3Bjb3VudDMyKSh1aW50MzIg d29yZCk7CitleHRlcm4gaW50ICgqcGdfcG9wY291bnQ2NCkodWludDY0IHdvcmQpOworCisvKgor ICogUmV0dXJuIHRydWUgaWYgQ1BVSUQgaW5kaWNhdGVzIHRoYXQgdGhlIFBPUENOVCBpbnN0cnVj dGlvbiBpcyBhdmFpbGFibGUuCisgKi8KK3N0YXRpYyBib29sCitwZ19wb3Bjb3VudF9hdmFpbGFi bGUodm9pZCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgZXh4WzRdID0gezAsIDAsIDAsIDB9OworCisj aWYgZGVmaW5lZChIQVZFX19HRVRfQ1BVSUQpCisgICAgX19nZXRfY3B1aWQoMSwgJmV4eFswXSwg JmV4eFsxXSwgJmV4eFsyXSwgJmV4eFszXSk7CisjZWxpZiBkZWZpbmVkKEhBVkVfX0NQVUlEKQor ICAgIF9fY3B1aWQoZXh4LCAxKTsKKyNlbHNlCisjZXJyb3IgY3B1aWQgaW5zdHJ1Y3Rpb24gbm90 IGF2YWlsYWJsZQorI2VuZGlmCisKKyAgICByZXR1cm4gKGV4eFsyXSAmICgxIDw8IDIzKSkgIT0g MDsgLyogUE9QQ05UICovCit9CisKKy8qCisgKiBSZXR1cm4gdHJ1ZSBpZiBDUFVJRCBpbmRpY2F0 ZXMgdGhhdCB0aGUgQVZYNTEyX1BPUENOVCBpbnN0cnVjdGlvbiBpcworICogYXZhaWxhYmxlLiBU aGlzIGlzIHNpbWlsYXIgdG8gdGhlIG1ldGhvZCBhYm92ZTsgc2VlCisgKiBodHRwczovL2VuLndp a2lwZWRpYS5vcmcvd2lraS9DUFVJRCNFQVg9NyxfRUNYPTA6X0V4dGVuZGVkX0ZlYXR1cmVzCisg KgorICogRmluYWxseSwgd2UgbWFrZSBzdXJlIHRoZSB4Z2V0YnYgcmVzdWx0IGlzIGNvbnNpc3Rl bnQgd2l0aCB0aGUgQ1BVSUQKKyAqIHJlc3VsdHMuCisgKi8KK3N0YXRpYyBib29sCitwZ19wb3Bj b3VudDUxMl9hdmFpbGFibGUodm9pZCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgZXh4WzRdID0gezAs IDAsIDAsIDB9OworCisgICAgLyogQ2hlY2sgZm9yIEFWWDUxMlZQT1BDTlREUSBhbmQgQVZYNTEy RiAqLworI2lmIGRlZmluZWQoSEFWRV9fR0VUX0NQVUlEX0NPVU5UKQorICAgIF9fZ2V0X2NwdWlk X2NvdW50KDcsIDAsICZleHhbMF0sICZleHhbMV0sICZleHhbMl0sICZleHhbM10pOworI2VsaWYg ZGVmaW5lZChIQVZFX19DUFVJREVYKQorICAgIF9fY3B1aWRleChleHgsIDcsIDApOworI2VuZGlm CisKKyAgICBpZiAoKGV4eFsyXSAmICgweDAwMDA0MDAwKSkgIT0gMCAmJiAoZXh4WzFdICYgKDB4 MDAwMTAwMDApKSAhPSAwKQorICAgIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogQ1BVSUQgc3Vj Y2VlZGVkLCBkb2VzIHRoZSBjdXJyZW50IHJ1bm5pbmcgT1Mgc3VwcG9ydCB0aGUKKyAgICAgICAg ICogWk1NIHJlZ2lzdGVycyB3aGljaCBhcmUgcmVxdWlyZWQgZm9yIEFWWDUxMj8gVGhpcyBjaGVj ayBpcworICAgICAgICAgKiByZXF1aXJlZCB0byBtYWtlIHN1cmUgYW4gb2xkIE9TIG9uIGEgbmV3 IENQVSBpcyBjb3JyZWN0bHkKKyAgICAgICAgICogY2hlY2tlZCBvciBhIFZNIGh5cGVydmlzb3Ig aXMgbm90IGV4Y2x1ZGluZyBBVlg1MTIgWk1NCisgICAgICAgICAqIHN1cHBvcnQgaW4gdGhlIFZN OyBzZWUgIjUuMS45IERldGVjdGlvbiBvZiBBVlggSW5zdHJ1Y3Rpb25zIgorICAgICAgICAgKiBo dHRwczovL3d3dy5pbnRlbC5jb20vY29udGVudC93d3cvdXMvZW4vY29udGVudC1kZXRhaWxzLzY3 MTQ4OC9pbnRlbC02NC1hbmQtaWEtMzItYXJjaGl0ZWN0dXJlcy1vcHRpbWl6YXRpb24tcmVmZXJl bmNlLW1hbnVhbC12b2x1bWUtMS5odG1sCisgICAgICAgICAqLworICAgICAgICB1aW50NjQgeGNy ID0gMDsKKyNpZmRlZiBfTVNDX1ZFUgorICAgICAgICB1aW50NjQgaGlnaGxvdyA9IF94Z2V0YnYo eGNyKTsKKworICAgICAgICByZXR1cm4gKGhpZ2hsb3cgJiAweEUwKSAhPSAwOworI2Vsc2UKKyAg ICAgICAgdWludDMyIGhpZ2g7CisgICAgICAgIHVpbnQzMiBsb3c7CisgICAgICAgIAorICAgICAg ICBfX2FzbV9fIF9fdm9sYXRpbGVfXygieGdldGJ2XHRcbiIgOiAiPWEiKGxvdyksICI9ZCIoaGln aCkgOiAiYyIoeGNyKSk7CisgICAgICAgIHJldHVybiAobG93ICYgMHhFMCkgIT0gMDsKKyNlbmRp ZgorICAgIH0gLyogUE9QQ05UIDUxMiAqLworICAgIHJldHVybiBmYWxzZTsKK30KKworLyoKKyAq IFRoZXNlIGZ1bmN0aW9ucyBnZXQgY2FsbGVkIG9uIHRoZSBmaXJzdCBjYWxsIHRvIHBnX3BvcGNv dW50MzIgZXRjLgorICogVGhleSBkZXRlY3Qgd2hldGhlciB3ZSBjYW4gdXNlIHRoZSBhc20gaW1w bGVtZW50YXRpb25zLCBhbmQgcmVwbGFjZQorICogdGhlIGZ1bmN0aW9uIHBvaW50ZXJzIHNvIHRo YXQgc3Vic2VxdWVudCBjYWxscyBhcmUgcm91dGVkIGRpcmVjdGx5IHRvCisgKiB0aGUgY2hvc2Vu IGltcGxlbWVudGF0aW9uLgorICovCitzdGF0aWMgdm9pZCBzZXRfdXBfZnVuY3Rpb25fcG9pbnRl cnMoKQoreworICAgIGlmIChwZ19wb3Bjb3VudDUxMl9hdmFpbGFibGUoKSkKKyAgICB7CisjaWYg ZGVmaW5lZChfTVNDX1ZFUikKKyAgICAgICAgcGdfcG9wY291bnRfaW5kaXJlY3QgPSBwZ19wb3Bj b3VudDUxMl9mYXN0OworI2Vsc2UKKyAgICAgICAgcGdfcG9wY291bnQgPSBwZ19wb3Bjb3VudDUx Ml9mYXN0OworI2VuZGlmCisgICAgfQorICAgIGVsc2UKKyAgICB7CisjaWYgZGVmaW5lZChfTVND X1ZFUikKKyAgICAgICAgcGdfcG9wY291bnRfaW5kaXJlY3QgPSBwZ19wb3Bjb3VudF9zbG93Owor I2Vsc2UKKyAgICAgICAgcGdfcG9wY291bnQgPSBwZ19wb3Bjb3VudF9zbG93OworI2VuZGlmCisg ICAgfQorICAgIGlmIChwZ19wb3Bjb3VudF9hdmFpbGFibGUoKSkKKyAgICB7CisgICAgICAgIHBn X3BvcGNvdW50MzIgPSBwZ19wb3Bjb3VudDMyX2Zhc3Q7CisgICAgICAgIHBnX3BvcGNvdW50NjQg PSBwZ19wb3Bjb3VudDY0X2Zhc3Q7CisgICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHBn X3BvcGNvdW50MzIgPSBwZ19wb3Bjb3VudDMyX3Nsb3c7CisgICAgICAgIHBnX3BvcGNvdW50NjQg PSBwZ19wb3Bjb3VudDY0X3Nsb3c7CisgICAgfQorfQorCitpbnQgcGdfcG9wY291bnQzMl9jaG9v c2UodWludDMyIHdvcmQpCit7CisgICAgc2V0X3VwX2Z1bmN0aW9uX3BvaW50ZXJzKCk7CisgICAg cmV0dXJuIHBnX3BvcGNvdW50MzIod29yZCk7Cit9CisKK2ludAorcGdfcG9wY291bnQ2NF9jaG9v c2UodWludDY0IHdvcmQpCit7CisgICAgc2V0X3VwX2Z1bmN0aW9uX3BvaW50ZXJzKCk7CisgICAg cmV0dXJuIHBnX3BvcGNvdW50NjQod29yZCk7Cit9CisKK3VpbnQ2NAorcGdfcG9wY291bnRfY2hv b3NlKGNvbnN0IGNoYXIgKmJ1ZiwgaW50IGJ5dGVzKQoreworICAgIHNldF91cF9mdW5jdGlvbl9w b2ludGVycygpOworI2lmIGRlZmluZWQoX01TQ19WRVIpCisgICAgcmV0dXJuIHBnX3BvcGNvdW50 X2luZGlyZWN0KGJ1ZiwgYnl0ZXMpOworI2Vsc2UKKyAgICByZXR1cm4gcGdfcG9wY291bnQoYnVm LCBieXRlcyk7CisjZW5kaWYKK30KKworI2VuZGlmICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgLyogVFJZX1BPUENOVF9GQVNUICovCmRpZmYgLS1naXQgYS9zcmMvcG9y dC9wZ19wb3BjbnRfeDg2XzY0X2FjY2VsLmMgYi9zcmMvcG9ydC9wZ19wb3BjbnRfeDg2XzY0X2Fj Y2VsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYWVmMzJjMTE3NAot LS0gL2Rldi9udWxsCisrKyBiL3NyYy9wb3J0L3BnX3BvcGNudF94ODZfNjRfYWNjZWwuYwpAQCAt MCwwICsxLDkzIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ19wb3BjbnRfeDg2XzY0 X2FjY2VsLmMKKyAqCSAgTWlzY2VsbGFuZW91cyBmdW5jdGlvbnMgZm9yIGJpdC13aXNlIG9wZXJh dGlvbnMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDI0LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9wb3J0L3BnX3Bv cGNudF94ODZfNjRfYWNjZWwuYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVk ZSAiYy5oIgorCisjaWYgZGVmaW5lZChIQVZFX19JTU1JTlRSSU4pCisjaW5jbHVkZSA8aW1taW50 cmluLmg+CisjZW5kaWYKKworI2luY2x1ZGUgInBvcnQvcGdfYml0dXRpbHMuaCIKKworI2lmZGVm IFRSWV9QT1BDTlRfRkFTVAorZXh0ZXJuIGNvbnN0IHVpbnQ4IHBnX251bWJlcl9vZl9vbmVzWzI1 Nl07CitleHRlcm4gdWludDY0IHBnX3BvcGNvdW50X3Nsb3coY29uc3QgY2hhciAqYnVmLCBpbnQg Ynl0ZXMpOwordWludDY0IHBnX3BvcGNvdW50NTEyX2Zhc3QoY29uc3QgY2hhciAqYnVmLCBpbnQg Ynl0ZXMpOworaW50IHBnX3BvcGNvdW50MzJfZmFzdCh1aW50MzIgd29yZCk7CitpbnQgcGdfcG9w Y291bnQ2NF9mYXN0KHVpbnQ2NCB3b3JkKTsKKworLyoKKyAqIHBnX3BvcGNvdW50MzJfZmFzdAor ICoJCVJldHVybiB0aGUgbnVtYmVyIG9mIDEgYml0cyBzZXQgaW4gd29yZAorICovCitpbnQgcGdf cG9wY291bnQzMl9mYXN0KHVpbnQzMiB3b3JkKQoreworI2lmZGVmIF9NU0NfVkVSCisgICAgcmV0 dXJuIF9fcG9wY250KHdvcmQpOworI2Vsc2UKKyAgICB1aW50MzIgcmVzOworICAgIAorICAgIF9f YXNtX18gX192b2xhdGlsZV9fKCIgcG9wY250bCAlMSwlMFxuIiA6ICI9cSIocmVzKSA6ICJybSIo d29yZCkgOiAiY2MiKTsKKyAgICByZXR1cm4gKGludClyZXM7CisjZW5kaWYKK30KKworLyoKKyAq IHBnX3BvcGNvdW50NjRfZmFzdAorICoJCVJldHVybiB0aGUgbnVtYmVyIG9mIDEgYml0cyBzZXQg aW4gd29yZAorICovCitpbnQKK3BnX3BvcGNvdW50NjRfZmFzdCh1aW50NjQgd29yZCkKK3sKKyNp ZmRlZiBfTVNDX1ZFUgorICAgIHJldHVybiBfX3BvcGNudDY0KHdvcmQpOworI2Vsc2UKKyAgICB1 aW50NjQgcmVzOworCisgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIiBwb3BjbnRxICUxLCUwXG4i IDogIj1xIihyZXMpIDogInJtIih3b3JkKSA6ICJjYyIpOworICAgIHJldHVybiAoaW50KXJlczsK KyNlbmRpZgorfQorCisvKgorICogVXNlIEFWWC01MTIgSW50cmluc2ljcyBmb3Igc3VwcG9ydGVk IEludGVsIENQVXMgb3IgZmFsbCBiYWNrIHRoZSB0aGUgc29mdHdhcmUKKyAqIGxvb3AgaW4gcGdf YnVudXRpbHMuYyBhbmQgdXNlIHRoZSBiZXN0IDMyIG9yIDY0IGJpdCBmYXN0IG1ldGhvZHMuIElm IG5vIGZhc3QKKyAqIG1ldGhvZHMgYXJlIHVzZWQgdGhpcyB3aWxsIGZhbGwgYmFjayB0byBfX2J1 aWx0aW5fKiBvciBwdXJlIHNvZnR3YXJlLgorICovCit1aW50NjQKK3BnX3BvcGNvdW50NTEyX2Zh c3QoY29uc3QgY2hhciAqYnVmLCBpbnQgYnl0ZXMpCit7CisjaWYgZGVmaW5lZChIQVZFX19JTU1J TlRSSU4pICYmIEhBVkVfX0FWWDUxMl9QT1BDTlQgPT0gMQorICAgIHVpbnQ2NCBwb3BjbnQgPSAw OworICAgIF9fbTUxMmkgYWNjdW11bGF0b3IgPSBfbW01MTJfc2V0emVyb19zaTUxMigpOworCisg ICAgd2hpbGUgKGJ5dGVzID49IDY0KQorICAgIHsKKyAgICAgICAgY29uc3QgX19tNTEyaSB2ID0g X21tNTEyX2xvYWR1X3NpNTEyKChjb25zdCBfX201MTJpICopYnVmKTsKKyAgICAgICAgY29uc3Qg X19tNTEyaSBwID0gX21tNTEyX3BvcGNudF9lcGk2NCh2KTsKKworICAgICAgICBhY2N1bXVsYXRv ciA9IF9tbTUxMl9hZGRfZXBpNjQoYWNjdW11bGF0b3IsIHApOworICAgICAgICBieXRlcyAtPSA2 NDsKKyAgICAgICAgYnVmICs9IDY0OworICAgIH0KKworICAgIHBvcGNudCA9IF9tbTUxMl9yZWR1 Y2VfYWRkX2VwaTY0KGFjY3VtdWxhdG9yKTsKKworICAgIC8qIFByb2Nlc3MgYW55IHJlbWFpbmlu ZyBieXRlcyAqLworICAgIHdoaWxlIChieXRlcy0tKQorICAgICAgICBwb3BjbnQgKz0gcGdfbnVt YmVyX29mX29uZXNbKHVuc2lnbmVkIGNoYXIpKmJ1ZisrXTsKKyAgICByZXR1cm4gcG9wY250Owor I2Vsc2UKKyAgICByZXR1cm4gcGdfcG9wY291bnRfc2xvdyhidWYsIGJ5dGVzKTsKKyNlbmRpZiAv KiBVU0VfQVZYNTEyX0NPREUgKi8KK30KKyNlbmRpZiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC8qIFRSWV9QT1BDTlRfRkFTVCAqLwo= --_002_BL1PR11MB5304BFE26BAC25624508CFD2DC232BL1PR11MB5304namp_--