Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nkJ5n-0000CC-46 for pgsql-hackers@arkaria.postgresql.org; Fri, 29 Apr 2022 05:23:00 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nkJ5k-0001sy-3n for pgsql-hackers@arkaria.postgresql.org; Fri, 29 Apr 2022 05:22:56 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nkJ5i-0001pj-Ra for pgsql-hackers@lists.postgresql.org; Fri, 29 Apr 2022 05:22:55 +0000 Received: from esa19.fujitsucc.c3s2.iphmx.com ([216.71.158.62]) by makus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nkJ5e-0004jC-Rx for pgsql-hackers@lists.postgresql.org; Fri, 29 Apr 2022 05:22:53 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=fujitsu.com; i=@fujitsu.com; q=dns/txt; s=fj1; t=1651209771; x=1682745771; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version; bh=pLtpGYCVfefs0td242Hf9HklUnhGCt3ZVdw/cT7X2/U=; b=p85hc3X+s7HybFTg/oeN4HyrPXOTY03z18p5DFTWrVYb2q0iNpt5hAjG Q3N5lPKVKyPuQa8/DDxaEBFmgpt0r320kk1t91fTY1YxXmxhBTsZNAKg3 /tjYiiGmzD7FrnBlWC0TS7t1VlDCQ+n0cpdP3zhridtmcAbCPUdGA160Y MyNKV7GKiHvISlhz+M6s3h8bVKzSBRi480BPhWbzaTMid90zPAV8ZYMk2 QfbAfecR6JQrVpA7IXE1UBcDbgVZar8Kt8EJeQRgWqHpJPS61zbAFjLe3 rqQCSd2WOf+LrwLlTdgBmEvDHYadzqRPufss9nXWt1IbvkN8SR2pFVn5t Q==; X-IronPort-AV: E=McAfee;i="6400,9594,10331"; a="54587600" X-IronPort-AV: E=Sophos;i="5.91,297,1647270000"; d="scan'208,223";a="54587600" Received: from mail-tycjpn01lp2171.outbound.protection.outlook.com (HELO JPN01-TYC-obe.outbound.protection.outlook.com) ([104.47.23.171]) by ob1.fujitsucc.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Apr 2022 14:22:45 +0900 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=HYLQdTTSx3UE9bCpAwgH6ZeG0S0Xd5fCzxZbbW240gobbks7ZVn+V6Cybg3t6zz0xktbXD4bPzuVhx/yYldnSi+nokVyhrn+Y7Erj/LCBgrluno6Kgw/PF9iBsPVmIZ6NKZbA5cdlJQc42H3l3kN9SCLXPxGT5O+zvEgRdtgnEYmMM7At9lQuvSfJRmfPN3bpqlHut2op0nNrXegNTG6WPOOz7Xt6BkthQlZ/N95NtpZ2S+F2OUWblfySKvHdVl/xyuSn/wNmkA4aN78Dg7trocJv8Yp5XznnquD9YpWKluZ+5EbNBOW9K2RFxQrqXlk4h2Lb1u7CSyJj9w6wygGjA== 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=QCp4QORld3z6T30umAoQZ+3DETJQR38JAxH95VlUx30=; b=R2rS5+Io3BIa3tEp1bB7nT4HAy6syhdQFvOpncB22hhlLXhWSqKxdirstZ0IfppzlWcQS6uw+PwaO8V92M72gmN8g4GcJ9vHOZjLnuMSL4u2aU9E+haEgZx0FNJRNHlymljfOUMWg9nR1RishdMGj/FlA6JxOkQE/SRYg8ZccRcGUCbahHVbWNPxkRxaaoAVVJ/IfIu8J0uJi5Q64//nLc1QbwzwUvZc7/0OcblXnOpYzRRpXzGCi/QZ1MBM5QOrWR3Q+k2+QQ9EGAP/igr+GipPJYScGGCBNwJ4EuPrRLEHxYKCA5FaCPtLysHb5N8PFiLFeZAQ+XoDDHkwyy3agA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=fujitsu.com; dmarc=pass action=none header.from=fujitsu.com; dkim=pass header.d=fujitsu.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fujitsu.onmicrosoft.com; s=selector2-fujitsu-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=QCp4QORld3z6T30umAoQZ+3DETJQR38JAxH95VlUx30=; b=Q+55HD769X2+YOe1Kwx98f3E3sp+bY0RL237ZFOrDvCB41bTBVyhyt0zj5eLJ8m9EDg0Mbu5zGCp9BMeGboLLdmKuGHj3TU/ktH+/g8++MDESh+D9xGEPF/p2FxahYYoobgjIKcil45zbrI0yRaSlNWs0B94h4UFORdGgE/VrTE= Received: from OSZPR01MB6310.jpnprd01.prod.outlook.com (2603:1096:604:f7::9) by TYCPR01MB8836.jpnprd01.prod.outlook.com (2603:1096:400:18b::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5186.15; Fri, 29 Apr 2022 05:22:41 +0000 Received: from OSZPR01MB6310.jpnprd01.prod.outlook.com ([fe80::4c74:7717:ca1d:701b]) by OSZPR01MB6310.jpnprd01.prod.outlook.com ([fe80::4c74:7717:ca1d:701b%3]) with mapi id 15.20.5186.023; Fri, 29 Apr 2022 05:22:41 +0000 From: "shiy.fnst@fujitsu.com" To: "houzj.fnst@fujitsu.com" , Peter Smith CC: Amit Kapila , PostgreSQL Hackers Subject: RE: Perform streaming logical transactions by background workers and parallel apply Thread-Topic: Perform streaming logical transactions by background workers and parallel apply Thread-Index: AQHYSXX4LU7m/LcP/EyprXCDmGKXrazlvxQAgAkRYICACBI2gIABs50AgAA5UwCAApvIgIAFAGuAgAXc1wCAADTY0A== Date: Fri, 29 Apr 2022 05:22:41 +0000 Message-ID: References: In-Reply-To: Accept-Language: ja-JP, en-US Content-Language: zh-CN 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=fujitsu.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 8decbc84-dd4c-4311-f560-08da29a048c9 x-ms-traffictypediagnostic: TYCPR01MB8836:EE_ x-microsoft-antispam-prvs: x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: 2+3ee0X5dstf2Dr6dxGahQMEP98IBsR6UscmXulyBRJtodgdhCEh3yVOfOA5CH3FXdpoaRMuewMZcUcNltQfgMR9X8u5G+PHcd9UKsBeAsRanjF12LjNqNrRt37tJxZUBYNEePHxhhOy/d42Rcy5orTcWraUhbRlHj5ppMSX97PngXAF4BfiVkmak7JPZntopLk6eSbTNYIwMK0xjPMB7+prjE4y3cc/o8Kgau0aPo/jISLtyxd899T1VWzsM/+uYc0oxoOuIPC2/xktvbJ41rcxvrS9I3T3trkC6NfTQ2/WOtYflT87TJJhSqAcjIMZF6LS27af5DP0zBmp4RfCEfCajPJukWcHitX1JikZzGHVv9MFkBy/itff6o+A5zME1eunqv1XGdOLt+pLNOmNwPBAKyFhbkGkVFnsvcJ80gGAcvOZcbln/Ao3sksTUGgCoMtIYVZ15DcwWLehIEC2vz9hXJXjJHusQmoxvDQk0mIeuJTCMxlP9ipP94cDzKoCH446D76X+oIpCv3kLpGKsgSicB0ROZ0f65oOEM1kRYCa824tVGpOodAMAt6Yxxjfww/tRMAOOK1Ao8AR14ENVJ0m0DswflN6PZV4s886MtmiZJftYV+MpkYXPSkO+vQWIcMKQcqr6GlsoLXHnNm+D7La/bnW9Afl21ODaYTfB8vHfw4FgxABq+5bLg49vCn23YCL6ZjxI9ZF5CRrTyMTZA== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:OSZPR01MB6310.jpnprd01.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230001)(4636009)(366004)(66476007)(4326008)(99936003)(66446008)(82960400001)(64756008)(66946007)(66556008)(8676002)(76116006)(9686003)(54906003)(316002)(122000001)(71200400001)(86362001)(85182001)(53546011)(508600001)(186003)(110136005)(6506007)(38070700005)(38100700002)(83380400001)(4744005)(33656002)(2906002)(55016003)(8936002)(52536014)(5660300002)(7696005)(26005);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?VVIxZ292Nkp6VXgrRTZ3dFB0SjJqRTZQeFV3NVcwUFdlVVRMMnIweHpOVFFH?= =?utf-8?B?eGlnWFBndHppV2JTaEZZLzVHQTJXazZEM0ZmS3lBeTNGaGdYMEVQR3htL2Jk?= =?utf-8?B?eENESkhTc2ZyRkRSN3BCbjlUR2ZGQnJUTC9mejFqRFpvV3A4WjJXL1JPejdX?= =?utf-8?B?dmtxUGdRalV1WHYrR282YmxJSk1aVml4dkZjT2d6NDNkcFJHVHVTVWJtckts?= =?utf-8?B?NFBZV3lXbURGZHE3MGxsWEJOSUZVT3lVV25VYzBmUWhzS2Nkd2t6WDd5UVg5?= =?utf-8?B?ZnFqbVRMUXpETXhwaVBBVy9LR2xpK2szamFta2dvdWtTbFJZWW9QUWpWY3VG?= =?utf-8?B?VVIzeXd4Q0M0Nm9LKzFvQmxzSWVGbWhSRXdvQUlvTlhHc3ZRQktpTldRODBv?= =?utf-8?B?UmRxLzRZV2EybVlyMHk0Y0NFMkZ3aW5wQU5PcmE4MzlzNVRPQmFTZ2U1SHd1?= =?utf-8?B?azY0RndrdW1STTcvakVRTFdiUStOTGZWTEloNXJlQmpPYmVEb2UzRlFzSmth?= =?utf-8?B?dlBSVzJXanpWaG93VUd1ektxM1NsTHo0NWxURVBYcU5wMk9jRnoxUkxzSFVO?= =?utf-8?B?SDErZ04xTHBjMkVScGM2K3dQZHY3YUJFWi9nNXI0RGJBbXcvaHR1Z2kxakpU?= =?utf-8?B?b1V6dUtiVkZlRzNmUHF2WmM2RWQrUmExN2JRQmNwenR2UU1xZktaNlQ0dGla?= =?utf-8?B?RGFwVGVOWURzUEpFYzRabUptNitDRHpzTU9BN09PdVZvc20wZi9WVnQwMkJr?= =?utf-8?B?SzNtaTBLZTN1c21BTi9OcWZqYzBFOFgrM3RDTVhHN3JrZTNxaWYrZGJwMkdy?= =?utf-8?B?UDY5NEhhRmFjN2hxeGs4ak1oaEN0WFlrSmkvTEdkY0JWaHVWWXBTZDBkeTFN?= =?utf-8?B?WFVvWklidGVwNGFaWmJRb2xaMGxJV2Nhbmx3UlNKc2R6Q1ZoSFFkdEhqZU9v?= =?utf-8?B?a0VOaWdKU1ZNYURLQ0lyamtkajVUR0kxMEpwcWxEQUFLUHpSUWVWekpBUXNQ?= =?utf-8?B?MTlKOFFOQ3M0V21nR2krT1JGSEM1Zy83eHVFRTdNeGlNbUV1RlJIbyt1MjZz?= =?utf-8?B?aHVzMElBWFB3Szl6ck1aRUNMRDNSVFg5T3JqMTFNOEhlRklNWTN6ZzZvWTVt?= =?utf-8?B?VW1vWWY4ZDY1OXM2ekd5YUxTd3d2OHUzd1cwVnh1NzRJZnlSVkJpeGlEYzVj?= =?utf-8?B?OWFKd3BYUTFGbGtlaVF4ZXVnakZvcnBHQkxBRzB3VkQvZTdWOWY5Q0VjK3U5?= =?utf-8?B?eFlqQ1ZwMEJSRVZqK3RwSFZockE5Y1EraUlVaW0vOE1EU0g2RDNza3JraWlI?= =?utf-8?B?T1RQVnBZa1Rwa0kwdXI3dHVaVWgvUGtydG9KOVpUQjBkUGNXeWFveFBSaVc5?= =?utf-8?B?MHU4SFErRXA5OTgwc2VSb3YxWXlTWlhCNHZIRlNyeS9NcUFiU3gwaUMwbGtZ?= =?utf-8?B?TlIxUm5CLytRN3QxRkt0TVhVUjZ1MWFOdHFUZUUyQ2tPSUZ4VmkvdDZPOE5N?= =?utf-8?B?ellDNUg0TjQwK0gvU0E3YkJHKzVJZ0I3SkI1eDRHUTBuNmtySVRudFZueUZN?= =?utf-8?B?MWlUYk9vRFJGZXJkSm9RcmNMWEpLaWpsZFZFYlI4b0JIa09DV3dLUVhqSlpp?= =?utf-8?B?RnFUNk1Qa2szYmMzMkgyZGp3cUp3ZTJFS1AvV1lnekYvTUQwOEhxc2JmQXFL?= =?utf-8?B?MTlyUlU1Um94Yk85dDJWcDZ0L0RBR2FFeUZHWExZRFhhOEoyOVFoazk3dHI4?= =?utf-8?B?Szkrdnk1VHQ4UllXYkFRbWUvYk03aHFUOTlhWkFadVJtR0pZa3NLVy9iVkNh?= =?utf-8?B?R0pYUGlKVnEvdjZTQXY1QW02RGJoN1ZjZUx4SUx6M1RNQkxFMEhYaEhnUjgz?= =?utf-8?B?QkZCTEg1RjcyTGRFNjdFMHNuSVJYR1Byd1hRdHBXMU95aUNmQzYvY1pSeTZI?= =?utf-8?B?NkJZU2U5RitWTFJlaFhnQktWTTE3Q1RqZGgyeTVIa3AvVzY4VnRqZzVQc09i?= =?utf-8?B?cjJSNU85bU0vY2N3cTJ5eE1jUWlkYXZpN1pLVG5vTjBkZmcvSllIck9hYnc4?= =?utf-8?B?RlhmYlNENWY4NUZNeFkzUW01a1gxWlRmcUJVUlhub3FKZXBxK2tSTGtIUTBq?= =?utf-8?B?RG52NUVZcUZoVmVKV1E5UkdqYVZ5WDlNcTR2ZkJyTnlFS3dJQUR0Q1pORHNo?= =?utf-8?B?UFVaVnZlQmc1VDFUckU0UHNreTRGbThxZm9RVmRyTTNCdU1NY2hBak9ZYnN1?= =?utf-8?B?MGVRVkpnR1FhNHNFMzI3R1ozNmVFVXBpM0o3TjNlcW4wYWxjQVhPem1SMkpM?= =?utf-8?B?WHp5U3lSRHhjZnBIYzhpdjUycFgvbU9jeVFzZnJLcC9IVzJGVFdTZz09?= Content-Type: multipart/mixed; boundary="_003_OSZPR01MB6310F0FABB05F8E5BB31A5B0FDFC9OSZPR01MB6310jpnp_" MIME-Version: 1.0 X-OriginatorOrg: fujitsu.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: OSZPR01MB6310.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 8decbc84-dd4c-4311-f560-08da29a048c9 X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Apr 2022 05:22:41.8735 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: a19f121d-81e1-4858-a9d8-736e267fd4c7 X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: vGTtdQE5tUNeR5aTFNYihmlOE7VBIYtLkixSBKuiSiIhTwdDcm1QvZ5eV8y00XADSN5kkbwXdDtm87XgMZ/r8A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYCPR01MB8836 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_003_OSZPR01MB6310F0FABB05F8E5BB31A5B0FDFC9OSZPR01MB6310jpnp_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 T24gRnJpLCBBcHIgMjksIDIwMjIgMTA6MDcgQU0gSG91LCBaaGlqaWUv5L6vIOW/l+adsCA8aG91 emouZm5zdEBmdWppdHN1LmNvbT4gd3JvdGU6DQo+IA0KPiBJIGFkZHJlc3NlZCB0aGUgcmVzdCBv ZiBQZXRlcidzIGNvbW1lbnRzIGFuZCBoZXJlIGlzIGEgbmV3IHZlcnNpb24gcGF0Y2guDQo+IA0K DQpUaGFua3MgZm9yIHlvdXIgcGF0Y2guDQoNClRoZSBwYXRjaCBtb2RpZmllZCBzdHJlYW1pbmcg b3B0aW9uIGluIGxvZ2ljYWwgcmVwbGljYXRpb24sIGl0IGNhbiBiZSBzZXQgdG8NCidvbicsICdv ZmYnIGFuZCAnYXBwbHknLiBUaGUgbmV3IG9wdGlvbiAnYXBwbHknIGhhdmVuJ3QgYmVlbiB0ZXN0 ZWQgaW4gdGhlIHRhcCB0ZXN0Lg0KQXR0YWNoIGEgcGF0Y2ggd2hpY2ggbW9kaWZpZWQgdGhlIHN1 YnNjcmlwdGlvbiB0YXAgdGVzdCB0byBjb3ZlciBib3RoICdvbicgYW5kDQonYXBwbHknIG9wdGlv bi4gKFRoZSBtYWluIHBhdGNoIGlzIGFsc28gYXR0YWNoZWQgdG8gbWFrZSBjZmJvdCBoYXBweS4p DQoNCkJlc2lkZXMsIEkgbm90aWNlZCB0aGF0IGZvciB0d28tcGhhc2UgY29tbWl0IHRyYW5zYWN0 aW9ucywgaWYgdGhlIHRyYW5zYWN0aW9uIGlzDQpwcmVwYXJlZCBieSBhIGJhY2tncm91bmQgd29y a2VyLCB0aGUgYmFja2dyb3VuZCB3b3JrZXIgd291bGQgYmUgYXNrZWQgdG8gaGFuZGxlDQp0aGUg bWVzc2FnZSBhYm91dCBjb21taXQvcm9sbGJhY2sgdGhpcyB0cmFuc2FjdGlvbi4gSXMgaXQgcG9z c2libGUgdGhhdCB0aGUNCm1lc3NhZ2VzIGFib3V0IGNvbW1pdC9yb2xsYmFjayBwcmVwYXJlZCB0 cmFuc2FjdGlvbiBhcmUgaGFuZGxlZCBieSBhcHBseSB3b3JrZXINCmRpcmVjdGx5Pw0KDQpSZWdh cmRzLA0KU2hpIHl1DQo= --_003_OSZPR01MB6310F0FABB05F8E5BB31A5B0FDFC9OSZPR01MB6310jpnp_ Content-Type: application/octet-stream; name="v5-0002-Test-streaming-apply-option-in-tap-test.patch" Content-Description: v5-0002-Test-streaming-apply-option-in-tap-test.patch Content-Disposition: attachment; filename="v5-0002-Test-streaming-apply-option-in-tap-test.patch"; size=63348; creation-date="Fri, 29 Apr 2022 05:19:00 GMT"; modification-date="Fri, 29 Apr 2022 05:22:39 GMT" Content-Transfer-Encoding: base64 RnJvbSA2ODA2MzFiZDU4YjliNTY1YTk0ODg3ZjcwOWFmODFmOGUxYmEyNzEzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAic2hpeS5mbnN0IiA8c2hpeS5mbnN0QGZ1aml0c3UuY29tPgpE YXRlOiBGcmksIDI5IEFwciAyMDIyIDExOjAxOjIwICswODAwClN1YmplY3Q6IFtQQVRDSCB2NSAy LzJdIFRlc3Qgc3RyZWFtaW5nIGFwcGx5IG9wdGlvbiBpbiB0YXAgdGVzdAoKRm9yIHRoZSB0YXAg dGVzdHMgYWJvdXQgc3RyZWFtaW5nIG9wdGlvbiBpbiBsb2dpY2FsIHJlcGxpY2F0aW9uLCB0ZXN0 IGJvdGgKJ29uJyBhbmQgJ2FwcGx5JyBvcHRpb24uCi0tLQogc3JjL3Rlc3Qvc3Vic2NyaXB0aW9u L3QvMDE1X3N0cmVhbS5wbCAgICAgICAgIHwgMTY4ICsrKystLS0tCiBzcmMvdGVzdC9zdWJzY3Jp cHRpb24vdC8wMTZfc3RyZWFtX3N1YnhhY3QucGwgfCAgODQgKystLQogc3JjL3Rlc3Qvc3Vic2Ny aXB0aW9uL3QvMDE3X3N0cmVhbV9kZGwucGwgICAgIHwgMTUyICsrKystLS0KIC4uLi90LzAxOF9z dHJlYW1fc3VieGFjdF9hYm9ydC5wbCAgICAgICAgICAgICB8IDE2NSArKysrKy0tLQogLi4uL3Qv MDE5X3N0cmVhbV9zdWJ4YWN0X2RkbF9hYm9ydC5wbCAgICAgICAgIHwgIDcxICsrKy0KIC4uLi9z dWJzY3JpcHRpb24vdC8wMjJfdHdvcGhhc2VfY2FzY2FkZS5wbCAgICB8IDI3OCArKysrKystLS0t LS0KIC4uLi9zdWJzY3JpcHRpb24vdC8wMjNfdHdvcGhhc2Vfc3RyZWFtLnBsICAgICB8IDM5OCAr KysrKysrKysrLS0tLS0tLS0KIDcgZmlsZXMgY2hhbmdlZCwgNzQwIGluc2VydGlvbnMoKyksIDU3 NiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTVf c3RyZWFtLnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE1X3N0cmVhbS5wbAppbmRleCA2 NTYxYjE4OWRlLi4wOTg1YTNiMmJmIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24v dC8wMTVfc3RyZWFtLnBsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxNV9zdHJlYW0u cGwKQEAgLTgsNiArOCw4OCBAQCB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKIHVzZSBQ b3N0Z3JlU1FMOjpUZXN0OjpVdGlsczsKIHVzZSBUZXN0OjpNb3JlOwogCitzdWIgdGVzdF9zdHJl YW1pbmcKK3sKKwlteSAoJG5vZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFt ZSkgPSBAXzsKKworCSMgSW50ZXJsZWF2ZSBhIHBhaXIgb2YgdHJhbnNhY3Rpb25zLCBlYWNoIGV4 Y2VlZGluZyB0aGUgNjRrQiBsaW1pdC4KKwlteSAkaW4gID0gJyc7CisJbXkgJG91dCA9ICcnOwor CisJbXkgJHRpbWVyID0gSVBDOjpSdW46OnRpbWVvdXQoJFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxz Ojp0aW1lb3V0X2RlZmF1bHQpOworCisJbXkgJGggPSAkbm9kZV9wdWJsaXNoZXItPmJhY2tncm91 bmRfcHNxbCgncG9zdGdyZXMnLCBcJGluLCBcJG91dCwgJHRpbWVyLAorCQlvbl9lcnJvcl9zdG9w ID0+IDApOworCisJJGluIC49IHF7CisJQkVHSU47CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VM RUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBzKGkpOwor CVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJREVM RVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOworCX07CisJJGgtPnB1bXBfbmI7 CisKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlCRUdJ TjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDUwMDEsIDk5OTkpIHMoaSk7CisJREVMRVRFIEZST00gdGVzdF90YWIgV0hF UkUgYSA+IDUwMDA7CisJQ09NTUlUOworCX0pOworCisJJGluIC49IHF7CisJQ09NTUlUOworCVxx CisJfTsKKwkkaC0+ZmluaXNoOyAgICAjIGVycm9ycyBtYWtlIHRoZSBuZXh0IHRlc3QgZmFpbCwg c28gaWdub3JlIHRoZW0gaGVyZQorCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCRhcHBuYW1lKTsKKworCW15ICRyZXN1bHQgPQorCSAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0g OTk5KSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoMzMzNHwzMzM0fDMzMzQpLCAn Y2hlY2sgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJyk7CisKKwkjIFRlc3Qg dGhlIHN0cmVhbWluZyBpbiBiaW5hcnkgbW9kZQorCSRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLAorCQkiQUxURVIgU1VCU0NSSVBUSU9OIHRhcF9zdWIgU0VUIChiaW5hcnkg PSBvbikiKTsKKworCSMgSW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93cyB0byBl eGNlZWQgdGhlIDY0a0IgbGltaXQuCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdw b3N0Z3JlcycsIHF7CisJQkVHSU47CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1k NShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1MDAxLCAxMDAwMCkgcyhpKTsKKwlVUERB VEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCURFTEVURSBG Uk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKKwlDT01NSVQ7CisJfSk7CisKKwkkbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJJHJlc3VsdCA9CisJ ICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3Vu dCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVz dWx0LCBxcSg2NjY3fDY2Njd8NjY2NyksICdjaGVjayBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9j YWwgZGVmYXVsdHMnKTsKKworCSMgQ2hhbmdlIHRoZSBsb2NhbCB2YWx1ZXMgb2YgdGhlIGV4dHJh IGNvbHVtbnMgb24gdGhlIHN1YnNjcmliZXIsCisJIyB1cGRhdGUgcHVibGlzaGVyLCBhbmQgY2hl Y2sgdGhhdCBzdWJzY3JpYmVyIHJldGFpbnMgdGhlIGV4cGVjdGVkCisJIyB2YWx1ZXMuIFRoaXMg aXMgdG8gZW5zdXJlIHRoYXQgbm9uLXN0cmVhbWluZyB0cmFuc2FjdGlvbnMgYmVoYXZlCisJIyBw cm9wZXJseSBhZnRlciBhIHN0cmVhbWluZyB0cmFuc2FjdGlvbi4KKwkkbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlVQREFURSB0ZXN0X3RhYiBTRVQgYyA9ICdlcG9j aCc6OnRpbWVzdGFtcHR6ICsgOTg3NjU0MzIxICogaW50ZXJ2YWwgJzFzJyIKKwkpOworCSRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJVUERBVEUgdGVzdF90YWIgU0VU IGIgPSBtZDUoYTo6dGV4dCkiKTsKKworCSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgkYXBwbmFtZSk7CisKKwkkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGV4dHJhY3QoZXBvY2ggZnJvbSBj KSA9IDk4NzY1NDMyMSksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiCisJKTsKKwlpcygk cmVzdWx0LCBxcSg2NjY3fDY2Njd8NjY2NyksCisJCSdjaGVjayBleHRyYSBjb2x1bW5zIGNvbnRh aW4gbG9jYWxseSBjaGFuZ2VkIGRhdGEnKTsKK30KKwogIyBDcmVhdGUgcHVibGlzaGVyIG5vZGUK IG15ICRub2RlX3B1Ymxpc2hlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHVi bGlzaGVyJyk7CiAkbm9kZV9wdWJsaXNoZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9n aWNhbCcpOwpAQCAtMzcsOTkgKzExOSwzOSBAQCAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAogCSJDUkVBVEUgUFVCTElDQVRJT04gdGFwX3B1YiBGT1IgVEFCTEUgdGVzdF90 YWIiKTsKIAogbXkgJGFwcG5hbWUgPSAndGFwX3N1Yic7CisKKyMgVGVzdCBzdHJlYW1pbmcgbW9k ZSBvbgogJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIkNSRUFURSBT VUJTQ1JJUFRJT04gdGFwX3N1YiBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHIgYXBwbGlj YXRpb25fbmFtZT0kYXBwbmFtZScgUFVCTElDQVRJT04gdGFwX3B1YiBXSVRIIChzdHJlYW1pbmcg PSBvbikiCiApOwotCiAkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUp OwotCiAjIEFsc28gd2FpdCBmb3IgaW5pdGlhbCB0YWJsZSBzeW5jIHRvIGZpbmlzaAogbXkgJHN5 bmNlZF9xdWVyeSA9CiAgICJTRUxFQ1QgY291bnQoMSkgPSAwIEZST00gcGdfc3Vic2NyaXB0aW9u X3JlbCBXSEVSRSBzcnN1YnN0YXRlIE5PVCBJTiAoJ3InLCAncycpOyI7CiAkbm9kZV9zdWJzY3Jp YmVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsICRzeW5jZWRfcXVlcnkpCiAgIG9yIGRp ZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIHN1YnNjcmliZXIgdG8gc3luY2hyb25pemUg ZGF0YSI7Ci0KIG15ICRyZXN1bHQgPQogICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKIAkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJP TSB0ZXN0X3RhYiIpOwogaXMoJHJlc3VsdCwgcXEoMnwyfDIpLCAnY2hlY2sgaW5pdGlhbCBkYXRh IHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlcicpOwogCi0jIEludGVybGVhdmUgYSBwYWlyIG9mIHRy YW5zYWN0aW9ucywgZWFjaCBleGNlZWRpbmcgdGhlIDY0a0IgbGltaXQuCi1teSAkaW4gID0gJyc7 Ci1teSAkb3V0ID0gJyc7Ci0KLW15ICR0aW1lciA9IElQQzo6UnVuOjp0aW1lb3V0KCRQb3N0Z3Jl U1FMOjpUZXN0OjpVdGlsczo6dGltZW91dF9kZWZhdWx0KTsKLQotbXkgJGggPSAkbm9kZV9wdWJs aXNoZXItPmJhY2tncm91bmRfcHNxbCgncG9zdGdyZXMnLCBcJGluLCBcJG91dCwgJHRpbWVyLAot CW9uX2Vycm9yX3N0b3AgPT4gMCk7Ci0KLSRpbiAuPSBxewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0 ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUw MDApIHMoaSk7Ci1VUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikg PSAwOwotREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotfTsKLSRoLT5w dW1wX25iOwotCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxewot QkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00g Z2VuZXJhdGVfc2VyaWVzKDUwMDEsIDk5OTkpIHMoaSk7Ci1ERUxFVEUgRlJPTSB0ZXN0X3RhYiBX SEVSRSBhID4gNTAwMDsKLUNPTU1JVDsKLX0pOwotCi0kaW4gLj0gcXsKLUNPTU1JVDsKLVxxCi19 OwotJGgtPmZpbmlzaDsgICAgIyBlcnJvcnMgbWFrZSB0aGUgbmV4dCB0ZXN0IGZhaWwsIHNvIGln bm9yZSB0aGVtIGhlcmUKLQotJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBu YW1lKTsKLQotJHJlc3VsdCA9Ci0gICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRl c3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSgzMzM0fDMzMzR8MzMzNCksICdjaGVjayBleHRyYSBj b2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnKTsKLQotIyBUZXN0IHRoZSBzdHJlYW1pbmcg aW4gYmluYXJ5IG1vZGUKLSRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAot CSJBTFRFUiBTVUJTQ1JJUFRJT04gdGFwX3N1YiBTRVQgKGJpbmFyeSA9IG9uKSIpOwotCi0jIElu c2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxp bWl0LgotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLUJFR0lO OwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVy YXRlX3Nlcmllcyg1MDAxLCAxMDAwMCkgcyhpKTsKLVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1k NShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci1ERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2Qo YSwzKSA9IDA7Ci1DT01NSVQ7Ci19KTsKK3Rlc3Rfc3RyZWFtaW5nKCRub2RlX3B1Ymxpc2hlciwg JG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUpOwogCisjIFRlc3Qgc3RyZWFtaW5nIG1vZGUgYXBw bHkKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUgRlJPTSB0 ZXN0X3RhYiBXSEVSRSAoYSA+IDIpIik7CiAkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJGFwcG5hbWUpOwogCi0kcmVzdWx0ID0KLSAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkp IEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDY2Njd8NjY2N3w2NjY3KSwgJ2NoZWNr IGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCBkZWZhdWx0cycpOwotCi0jIENoYW5nZSB0aGUg bG9jYWwgdmFsdWVzIG9mIHRoZSBleHRyYSBjb2x1bW5zIG9uIHRoZSBzdWJzY3JpYmVyLAotIyB1 cGRhdGUgcHVibGlzaGVyLCBhbmQgY2hlY2sgdGhhdCBzdWJzY3JpYmVyIHJldGFpbnMgdGhlIGV4 cGVjdGVkCi0jIHZhbHVlcy4gVGhpcyBpcyB0byBlbnN1cmUgdGhhdCBub24tc3RyZWFtaW5nIHRy YW5zYWN0aW9ucyBiZWhhdmUKLSMgcHJvcGVybHkgYWZ0ZXIgYSBzdHJlYW1pbmcgdHJhbnNhY3Rp b24uCitteSAkb2xkcGlkID0gJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywK KwkiU0VMRUNUIHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24gV0hFUkUgYXBwbGljYXRpb25f bmFtZSA9ICckYXBwbmFtZScgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7IgorKTsKICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJVUERBVEUgdGVzdF90YWIgU0VUIGMg PSAnZXBvY2gnOjp0aW1lc3RhbXB0eiArIDk4NzY1NDMyMSAqIGludGVydmFsICcxcyciCisJIkFM VEVSIFNVQlNDUklQVElPTiB0YXBfc3ViIFNFVChzdHJlYW1pbmcgPSBhcHBseSwgYmluYXJ5ID0g b2ZmKSIKICk7Ci0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJVUERB VEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYTo6dGV4dCkiKTsKKyRub2RlX3B1Ymxpc2hlci0+cG9s bF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkICE9ICRvbGRwaWQgRlJPTSBw Z19zdGF0X3JlcGxpY2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUnIEFO RCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKKykgb3IgZGllICJUaW1lZCBvdXQgd2hpbGUgd2FpdGlu ZyBmb3IgYXBwbHkgdG8gcmVzdGFydCBhZnRlciBjaGFuZ2luZyBQVUJMSUNBVElPTiI7CiAKLSRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0KLSRyZXN1bHQgPSAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCop LCBjb3VudChleHRyYWN0KGVwb2NoIGZyb20gYykgPSA5ODc2NTQzMjEpLCBjb3VudChkID0gOTk5 KSBGUk9NIHRlc3RfdGFiIgotKTsKLWlzKCRyZXN1bHQsIHFxKDY2Njd8NjY2N3w2NjY3KSwKLQkn Y2hlY2sgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsbHkgY2hhbmdlZCBkYXRhJyk7Cit0ZXN0 X3N0cmVhbWluZygkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1lKTsK IAogJG5vZGVfc3Vic2NyaWJlci0+c3RvcDsKICRub2RlX3B1Ymxpc2hlci0+c3RvcDsKZGlmZiAt LWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxNl9zdHJlYW1fc3VieGFjdC5wbCBiL3Ny Yy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxNl9zdHJlYW1fc3VieGFjdC5wbAppbmRleCBmMjdmMTY5 NGYyLi5iYzQ5YmY5ZTQwIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMTZf c3RyZWFtX3N1YnhhY3QucGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE2X3N0cmVh bV9zdWJ4YWN0LnBsCkBAIC04LDYgKzgsNDYgQEAgdXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0 ZXI7CiB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7CiB1c2UgVGVzdDo6TW9yZTsKIAorc3Vi IHRlc3Rfc3RyZWFtaW5nCit7CisJbXkgKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJl ciwgJGFwcG5hbWUpID0gQF87CisKKwkjIEluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5vdWdo IHJvd3MgdG8gZXhjZWVkIDY0a0IgbGltaXQuCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo CisJCSdwb3N0Z3JlcycsIHF7CisJQkVHSU47CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNU IGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcyggICAgMywgIDUwMCkgcyhpKTsK KwlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOworCURF TEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKKwlTQVZFUE9JTlQgczE7CisJ SU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRl X3Nlcmllcyg1MDEsICAxMDAwKSBzKGkpOworCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShi KSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEs MykgPSAwOworCVNBVkVQT0lOVCBzMjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwg bWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDEwMDEsICAxNTAwKSBzKGkpOworCVVQ REFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJREVMRVRF IEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOworCVNBVkVQT0lOVCBzMzsKKwlJTlNF UlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2Vy aWVzKDE1MDEsICAyMDAwKSBzKGkpOworCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBX SEVSRSBtb2QoYSwyKSA9IDA7CisJREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykg PSAwOworCVNBVkVQT0lOVCBzNDsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1 KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDIwMDEsIDI1MDApIHMoaSk7CisJVVBEQVRF IHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKKwlERUxFVEUgRlJP TSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJQ09NTUlUOworCX0pOworCisJJG5vZGVf cHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCW15ICRyZXN1bHQgPQor CSAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291 bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJl c3VsdCwgcXEoMTY2N3wxNjY3fDE2NjcpLAorCQknY2hlY2sgZGF0YSB3YXMgY29waWVkIHRvIHN1 YnNjcmliZXIgaW4gc3RyZWFtaW5nIG1vZGUgYW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2Nh bCAJZGVmYXVsdHMnCisJKTsKK30KKwogIyBDcmVhdGUgcHVibGlzaGVyIG5vZGUKIG15ICRub2Rl X3B1Ymxpc2hlciA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHVibGlzaGVyJyk7 CiAkbm9kZV9wdWJsaXNoZXItPmluaXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOwpA QCAtMzcsNiArNzcsOCBAQCAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAog CSJDUkVBVEUgUFVCTElDQVRJT04gdGFwX3B1YiBGT1IgVEFCTEUgdGVzdF90YWIiKTsKIAogbXkg JGFwcG5hbWUgPSAndGFwX3N1Yic7CisKKyMgVGVzdCBzdHJlYW1pbmcgbW9kZSBvbgogJG5vZGVf c3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIkNSRUFURSBTVUJTQ1JJUFRJT04g dGFwX3N1YiBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHIgYXBwbGljYXRpb25fbmFtZT0k YXBwbmFtZScgUFVCTElDQVRJT04gdGFwX3B1YiBXSVRIIChzdHJlYW1pbmcgPSBvbikiCiApOwpA QCAtNTQsNDAgKzk2LDIyIEBAIG15ICRyZXN1bHQgPQogCSJTRUxFQ1QgY291bnQoKiksIGNvdW50 KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CiBpcygkcmVzdWx0LCBxcSgyfDJ8 MiksICdjaGVjayBpbml0aWFsIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyJyk7CiAKLSMg SW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93cyB0byBleGNlZWQgNjRrQiBsaW1p dC4KLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci1CRUdJTjsK LUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoICAgIDMsICA1MDApIHMoaSk7Ci1VUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUo YikgV0hFUkUgbW9kKGEsMikgPSAwOwotREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEs MykgPSAwOwotU0FWRVBPSU5UIHMxOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1k NShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1MDEsICAxMDAwKSBzKGkpOwotVVBEQVRF IHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKLURFTEVURSBGUk9N IHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKLVNBVkVQT0lOVCBzMjsKLUlOU0VSVCBJTlRP IHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTAw MSwgIDE1MDApIHMoaSk7Ci1VUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9k KGEsMikgPSAwOwotREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotU0FW RVBPSU5UIHMzOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBG Uk9NIGdlbmVyYXRlX3NlcmllcygxNTAxLCAgMjAwMCkgcyhpKTsKLVVQREFURSB0ZXN0X3RhYiBT RVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci1ERUxFVEUgRlJPTSB0ZXN0X3RhYiBX SEVSRSBtb2QoYSwzKSA9IDA7Ci1TQVZFUE9JTlQgczQ7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBT RUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDIwMDEsIDI1MDApIHMo aSk7Ci1VUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwot REVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotQ09NTUlUOwotfSk7Cit0 ZXN0X3N0cmVhbWluZygkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1l KTsKIAorIyBUZXN0IHN0cmVhbWluZyBtb2RlIGFwcGx5Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgKGEgPiAyKSIpOwog JG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKIAotJHJlc3VsdCA9 Ci0gICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291 bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVz dWx0LCBxcSgxNjY3fDE2Njd8MTY2NyksCi0JJ2NoZWNrIGRhdGEgd2FzIGNvcGllZCB0byBzdWJz Y3JpYmVyIGluIHN0cmVhbWluZyBtb2RlIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwg ZGVmYXVsdHMnCitteSAkb2xkcGlkID0gJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywKKwkiU0VMRUNUIHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24gV0hFUkUgYXBwbGlj YXRpb25fbmFtZSA9ICckYXBwbmFtZScgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7IgorKTsKKyRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBTVUJTQ1JJUFRJ T04gdGFwX3N1YiBTRVQoc3RyZWFtaW5nID0gYXBwbHkpIgogKTsKKyRub2RlX3B1Ymxpc2hlci0+ cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkICE9ICRvbGRwaWQgRlJP TSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUn IEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKKykgb3IgZGllICJUaW1lZCBvdXQgd2hpbGUgd2Fp dGluZyBmb3IgYXBwbHkgdG8gcmVzdGFydCBhZnRlciBjaGFuZ2luZyBQVUJMSUNBVElPTiI7Cit0 ZXN0X3N0cmVhbWluZygkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBuYW1l KTsKIAogJG5vZGVfc3Vic2NyaWJlci0+c3RvcDsKICRub2RlX3B1Ymxpc2hlci0+c3RvcDsKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxN19zdHJlYW1fZGRsLnBsIGIvc3Jj L3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE3X3N0cmVhbV9kZGwucGwKaW5kZXggMGJjZTYzYjcxNi4u ZmNjYWM5NWY2OSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE3X3N0cmVh bV9kZGwucGwKKysrIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE3X3N0cmVhbV9kZGwucGwK QEAgLTgsNiArOCw4MiBAQCB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKIHVzZSBQb3N0 Z3JlU1FMOjpUZXN0OjpVdGlsczsKIHVzZSBUZXN0OjpNb3JlOwogCitzdWIgdGVzdF9zdHJlYW1p bmcKK3sKKwlteSAoJG5vZGVfcHVibGlzaGVyLCAkbm9kZV9zdWJzY3JpYmVyLCAkYXBwbmFtZSkg PSBAXzsKKworCSMgYSBzbWFsbCAobm9uLXN0cmVhbWVkKSB0cmFuc2FjdGlvbiB3aXRoIERETCBh bmQgRE1MCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJ QkVHSU47CisJSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICgzLCBtZDUoMzo6dGV4dCkpOwor CUFMVEVSIFRBQkxFIHRlc3RfdGFiIEFERCBDT0xVTU4gYyBJTlQ7CisJU0FWRVBPSU5UIHMxOwor CUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoNCwgbWQ1KDQ6OnRleHQpLCAtNCk7CisJQ09N TUlUOworCX0pOworCisJIyBsYXJnZSAoc3RyZWFtZWQpIHRyYW5zYWN0aW9uIHdpdGggRERMIGFu ZCBETUwKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlC RUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpLCAtaSBG Uk9NIGdlbmVyYXRlX3Nlcmllcyg1LCAxMDAwKSBzKGkpOworCUFMVEVSIFRBQkxFIHRlc3RfdGFi IEFERCBDT0xVTU4gZCBJTlQ7CisJU0FWRVBPSU5UIHMxOworCUlOU0VSVCBJTlRPIHRlc3RfdGFi IFNFTEVDVCBpLCBtZDUoaTo6dGV4dCksIC1pLCAyKmkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTAw MSwgMjAwMCkgcyhpKTsKKwlDT01NSVQ7CisJfSk7CisKKwkjIGEgc21hbGwgKG5vbi1zdHJlYW1l ZCkgdHJhbnNhY3Rpb24gd2l0aCBEREwgYW5kIERNTAorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKAorCQkncG9zdGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFZB TFVFUyAoMjAwMSwgbWQ1KDIwMDE6OnRleHQpLCAtMjAwMSwgMioyMDAxKTsKKwlBTFRFUiBUQUJM RSB0ZXN0X3RhYiBBREQgQ09MVU1OIGUgSU5UOworCVNBVkVQT0lOVCBzMTsKKwlJTlNFUlQgSU5U TyB0ZXN0X3RhYiBWQUxVRVMgKDIwMDIsIG1kNSgyMDAyOjp0ZXh0KSwgLTIwMDIsIDIqMjAwMiwg LTMqMjAwMik7CisJQ09NTUlUOworCX0pOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9j YXRjaHVwKCRhcHBuYW1lKTsKKworCW15ICRyZXN1bHQgPQorCSAgJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3Vu dChkKSwgY291bnQoZSkgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1bHQsIHFxKDIwMDJ8MTk5 OXwxMDAyfDEpLAorCQknY2hlY2sgZGF0YSB3YXMgY29waWVkIHRvIHN1YnNjcmliZXIgaW4gc3Ry ZWFtaW5nIG1vZGUgYW5kIGV4dHJhIGNvbHVtbnMgY29udGFpbiBsb2NhbCAJZGVmYXVsdHMnCisJ KTsKKworCSMgQSBsYXJnZSAoc3RyZWFtZWQpIHRyYW5zYWN0aW9uIHdpdGggRERMIGFuZCBETUwu IE9uZSBvZiB0aGUgRERMIGlzIHBlcmZvcm1lZAorCSMgYWZ0ZXIgRE1MIHRvIGVuc3VyZSB0aGF0 IHdlIGludmFsaWRhdGUgdGhlIHNjaGVtYSBzZW50IGZvciB0ZXN0X3RhYiBzbyB0aGF0CisJIyB0 aGUgbmV4dCB0cmFuc2FjdGlvbiBoYXMgdG8gc2VuZCB0aGUgc2NoZW1hIGFnYWluLgorCSRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCUJFR0lOOworCUlOU0VS VCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCksIC1pLCAyKmksIC0zKmkgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoMjAwMyw1MDAwKSBzKGkpOworCUFMVEVSIFRBQkxFIHRlc3RfdGFi IEFERCBDT0xVTU4gZiBJTlQ7CisJQ09NTUlUOworCX0pOworCisJIyBBIHNtYWxsIHRyYW5zYWN0 aW9uIHRoYXQgd29uJ3QgZ2V0IHN0cmVhbWVkLiBUaGlzIGlzIGp1c3QgdG8gZW5zdXJlIHRoYXQg d2UKKwkjIHNlbmQgdGhlIHNjaGVtYSBhZ2FpbiB0byByZWZsZWN0IHRoZSBsYXN0IGNvbHVtbiBh ZGRlZCBpbiB0aGUgcHJldmlvdXMgdGVzdC4KKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgK KwkJJ3Bvc3RncmVzJywgcXsKKwlCRUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1Qg aSwgbWQ1KGk6OnRleHQpLCAtaSwgMippLCAtMyppLCA0KmkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMo NTAwMSw1MDA1KSBzCShpKTsKKwlDT01NSVQ7CisJfSk7CisKKwkkbm9kZV9wdWJsaXNoZXItPndh aXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJJHJlc3VsdCA9CisJICAkbm9kZV9zdWJzY3Jp YmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyks IGNvdW50KGQpLCBjb3VudChlKSwgY291bnQoZikgRlJPTSB0ZXN0X3RhYiIpOworCWlzKCRyZXN1 bHQsIHFxKDUwMDV8NTAwMnw0MDA1fDMwMDR8NSksCisJCSdjaGVjayBkYXRhIHdhcyBjb3BpZWQg dG8gc3Vic2NyaWJlciBmb3IgYm90aCBzdHJlYW1pbmcgYW5kIG5vbi1zdHJlYW1pbmcgdHJhbnNh Y3Rpb25zJworCSk7Cit9CisKICMgQ3JlYXRlIHB1Ymxpc2hlciBub2RlCiBteSAkbm9kZV9wdWJs aXNoZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicpOwogJG5v ZGVfcHVibGlzaGVyLT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKQEAgLTM3 LDYgKzExMyw4IEBAICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCiAJIkNS RUFURSBQVUJMSUNBVElPTiB0YXBfcHViIEZPUiBUQUJMRSB0ZXN0X3RhYiIpOwogCiBteSAkYXBw bmFtZSA9ICd0YXBfc3ViJzsKKworIyBUZXN0IHN0cmVhbWluZyBtb2RlIG9uCiAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKIAkiQ1JFQVRFIFNVQlNDUklQVElPTiB0YXBf c3ViIENPTk5FQ1RJT04gJyRwdWJsaXNoZXJfY29ubnN0ciBhcHBsaWNhdGlvbl9uYW1lPSRhcHBu YW1lJyBQVUJMSUNBVElPTiB0YXBfcHViIFdJVEggKHN0cmVhbWluZyA9IG9uKSIKICk7CkBAIC01 NCw3NiArMTMyLDI4IEBAIG15ICRyZXN1bHQgPQogCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMp LCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CiBpcygkcmVzdWx0LCBxcSgyfDB8MCks ICdjaGVjayBpbml0aWFsIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyJyk7CiAKLSMgYSBz bWFsbCAobm9uLXN0cmVhbWVkKSB0cmFuc2FjdGlvbiB3aXRoIERETCBhbmQgRE1MCi0kbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMnLCBxewotQkVHSU47Ci1JTlNFUlQgSU5U TyB0ZXN0X3RhYiBWQUxVRVMgKDMsIG1kNSgzOjp0ZXh0KSk7Ci1BTFRFUiBUQUJMRSB0ZXN0X3Rh YiBBREQgQ09MVU1OIGMgSU5UOwotU0FWRVBPSU5UIHMxOwotSU5TRVJUIElOVE8gdGVzdF90YWIg VkFMVUVTICg0LCBtZDUoNDo6dGV4dCksIC00KTsKLUNPTU1JVDsKLX0pOwotCi0jIGxhcmdlIChz dHJlYW1lZCkgdHJhbnNhY3Rpb24gd2l0aCBEREwgYW5kIERNTAotJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywgcXsKLUJFR0lOOwotSU5TRVJUIElOVE8gdGVzdF90YWIg U0VMRUNUIGksIG1kNShpOjp0ZXh0KSwgLWkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNSwgMTAwMCkg cyhpKTsKLUFMVEVSIFRBQkxFIHRlc3RfdGFiIEFERCBDT0xVTU4gZCBJTlQ7Ci1TQVZFUE9JTlQg czE7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpLCAtaSwgMipp IEZST00gZ2VuZXJhdGVfc2VyaWVzKDEwMDEsIDIwMDApIHMoaSk7Ci1DT01NSVQ7Ci19KTsKK3Rl c3Rfc3RyZWFtaW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUp OwogCi0jIGEgc21hbGwgKG5vbi1zdHJlYW1lZCkgdHJhbnNhY3Rpb24gd2l0aCBEREwgYW5kIERN TAorIyBUZXN0IHN0cmVhbWluZyBtb2RlIGFwcGx5CiAkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgKIAkncG9zdGdyZXMnLCBxewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMg KDIwMDEsIG1kNSgyMDAxOjp0ZXh0KSwgLTIwMDEsIDIqMjAwMSk7Ci1BTFRFUiBUQUJMRSB0ZXN0 X3RhYiBBREQgQ09MVU1OIGUgSU5UOwotU0FWRVBPSU5UIHMxOwotSU5TRVJUIElOVE8gdGVzdF90 YWIgVkFMVUVTICgyMDAyLCBtZDUoMjAwMjo6dGV4dCksIC0yMDAyLCAyKjIwMDIsIC0zKjIwMDIp OwotQ09NTUlUOworREVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgKGEgPiAyKTsKK0FMVEVSIFRB QkxFIHRlc3RfdGFiIERST1AgQ09MVU1OIGMsIERST1AgQ09MVU1OIGQsIERST1AgQ09MVU1OIGUs IERST1AgQ09MVU1OIGY7CiB9KTsKIAogJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCRhcHBuYW1lKTsKIAotJHJlc3VsdCA9Ci0gICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkKSwgY291bnQo ZSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwgcXEoMjAwMnwxOTk5fDEwMDJ8MSksCi0J J2NoZWNrIGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyIGluIHN0cmVhbWluZyBtb2RlIGFu ZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCitteSAkb2xkcGlkID0gJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBpZCBGUk9NIHBn X3N0YXRfcmVwbGljYXRpb24gV0hFUkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZScgQU5E IHN0YXRlID0gJ3N0cmVhbWluZyc7IgogKTsKLQotIyBBIGxhcmdlIChzdHJlYW1lZCkgdHJhbnNh Y3Rpb24gd2l0aCBEREwgYW5kIERNTC4gT25lIG9mIHRoZSBEREwgaXMgcGVyZm9ybWVkCi0jIGFm dGVyIERNTCB0byBlbnN1cmUgdGhhdCB3ZSBpbnZhbGlkYXRlIHRoZSBzY2hlbWEgc2VudCBmb3Ig dGVzdF90YWIgc28gdGhhdAotIyB0aGUgbmV4dCB0cmFuc2FjdGlvbiBoYXMgdG8gc2VuZCB0aGUg c2NoZW1hIGFnYWluLgotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCi0JJ3Bvc3RncmVzJywg cXsKLUJFR0lOOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSwg LWksIDIqaSwgLTMqaSBGUk9NIGdlbmVyYXRlX3NlcmllcygyMDAzLDUwMDApIHMoaSk7Ci1BTFRF UiBUQUJMRSB0ZXN0X3RhYiBBREQgQ09MVU1OIGYgSU5UOwotQ09NTUlUOwotfSk7Ci0KLSMgQSBz bWFsbCB0cmFuc2FjdGlvbiB0aGF0IHdvbid0IGdldCBzdHJlYW1lZC4gVGhpcyBpcyBqdXN0IHRv IGVuc3VyZSB0aGF0IHdlCi0jIHNlbmQgdGhlIHNjaGVtYSBhZ2FpbiB0byByZWZsZWN0IHRoZSBs YXN0IGNvbHVtbiBhZGRlZCBpbiB0aGUgcHJldmlvdXMgdGVzdC4KLSRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKAotCSdwb3N0Z3JlcycsIHF7Ci1CRUdJTjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFi IFNFTEVDVCBpLCBtZDUoaTo6dGV4dCksIC1pLCAyKmksIC0zKmksIDQqaSBGUk9NIGdlbmVyYXRl X3Nlcmllcyg1MDAxLDUwMDUpIHMoaSk7Ci1DT01NSVQ7Ci19KTsKLQotJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotJHJlc3VsdCA9Ci0gICRub2RlX3N1YnNj cmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMp LCBjb3VudChkKSwgY291bnQoZSksIGNvdW50KGYpIEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1 bHQsIHFxKDUwMDV8NTAwMnw0MDA1fDMwMDR8NSksCi0JJ2NoZWNrIGRhdGEgd2FzIGNvcGllZCB0 byBzdWJzY3JpYmVyIGZvciBib3RoIHN0cmVhbWluZyBhbmQgbm9uLXN0cmVhbWluZyB0cmFuc2Fj dGlvbnMnCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQUxURVIg U1VCU0NSSVBUSU9OIHRhcF9zdWIgU0VUKHN0cmVhbWluZyA9IGFwcGx5KSIKICk7Ciskbm9kZV9w dWJsaXNoZXItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywKKwkiU0VMRUNUIHBpZCAhPSAk b2xkcGlkIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbiBXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0g JyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCispIG9yIGRpZSAiVGltZWQgb3V0 IHdoaWxlIHdhaXRpbmcgZm9yIGFwcGx5IHRvIHJlc3RhcnQgYWZ0ZXIgY2hhbmdpbmcgUFVCTElD QVRJT04iOworCit0ZXN0X3N0cmVhbWluZygkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmli ZXIsICRhcHBuYW1lKTsKIAogJG5vZGVfc3Vic2NyaWJlci0+c3RvcDsKICRub2RlX3B1Ymxpc2hl ci0+c3RvcDsKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxOF9zdHJlYW1f c3VieGFjdF9hYm9ydC5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAxOF9zdHJlYW1fc3Vi eGFjdF9hYm9ydC5wbAppbmRleCA3MTU1NDQyZTc2Li44YmEzOGQ0MGIzIDEwMDY0NAotLS0gYS9z cmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMThfc3RyZWFtX3N1YnhhY3RfYWJvcnQucGwKKysrIGIv c3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE4X3N0cmVhbV9zdWJ4YWN0X2Fib3J0LnBsCkBAIC04 LDYgKzgsODcgQEAgdXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7CiB1c2UgUG9zdGdyZVNR TDo6VGVzdDo6VXRpbHM7CiB1c2UgVGVzdDo6TW9yZTsKIAorc3ViIHRlc3Rfc3RyZWFtaW5nCit7 CisJbXkgKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUpID0gQF87 CisKKwkjIGxhcmdlIChzdHJlYW1lZCkgdHJhbnNhY3Rpb24gd2l0aCBEREwsIERNTCBhbmQgUk9M TEJBQ0tzCisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJ QkVHSU47CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9N IGdlbmVyYXRlX3NlcmllcygzLDUwMCkgcyhpKTsKKwlTQVZFUE9JTlQgczE7CisJSU5TRVJUIElO VE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1 MDEsMTAwMCkgcyhpKTsKKwlTQVZFUE9JTlQgczI7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VM RUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxMDAxLDE1MDApIHMoaSk7 CisJU0FWRVBPSU5UIHMzOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6 dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTUwMSwyMDAwKSBzKGkpOworCVJPTExCQUNLIFRP IHMyOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMjAwMSwyNTAwKSBzKGkpOworCVJPTExCQUNLIFRPIHMxOworCUlOU0VS VCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMjUwMSwzMDAwKSBzKGkpOworCVNBVkVQT0lOVCBzNDsKKwlJTlNFUlQgSU5UTyB0ZXN0X3Rh YiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMwMDEsMzUwMCkg cyhpKTsKKwlTQVZFUE9JTlQgczU7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1k NShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzNTAxLDQwMDApIHMoaSk7CisJQ09NTUlU OworCX0pOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsK KworCW15ICRyZXN1bHQgPQorCSAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsCisJCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpIEZST00gdGVzdF90YWIiKTsKKwlpcygk cmVzdWx0LCBxcSgyMDAwfDApLAorCQknY2hlY2sgcm9sbGJhY2sgdG8gc2F2ZXBvaW50IHdhcyBy ZWZsZWN0ZWQgb24gc3Vic2NyaWJlciBhbmQgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRl ZmF1bHRzJworCSk7CisKKwkjIGxhcmdlIChzdHJlYW1lZCkgdHJhbnNhY3Rpb24gd2l0aCBzdWJz Y3JpYmVyIHJlY2VpdmluZyBvdXQgb2Ygb3JkZXIKKwkjIHN1YnRyYW5zYWN0aW9uIFJPTExCQUNL cworCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAorCQkncG9zdGdyZXMnLCBxeworCUJFR0lO OworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoNDAwMSw0NTAwKSBzKGkpOworCVNBVkVQT0lOVCBzMTsKKwlJTlNFUlQgSU5U TyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDUw MDEsNTUwMCkgcyhpKTsKKwlTQVZFUE9JTlQgczI7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VM RUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg2MDAxLDY1MDApIHMoaSk7 CisJU0FWRVBPSU5UIHMzOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6 dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNzAwMSw3NTAwKSBzKGkpOworCVJFTEVBU0UgczI7 CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVy YXRlX3Nlcmllcyg4MDAxLDg1MDApIHMoaSk7CisJUk9MTEJBQ0sgVE8gczE7CisJQ09NTUlUOwor CX0pOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKwor CSRyZXN1bHQgPQorCSAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJ CSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0 LCBxcSgyNTAwfDApLAorCQknY2hlY2sgcm9sbGJhY2sgdG8gc2F2ZXBvaW50IHdhcyByZWZsZWN0 ZWQgb24gc3Vic2NyaWJlcicpOworCisJIyBsYXJnZSAoc3RyZWFtZWQpIHRyYW5zYWN0aW9uIHdp dGggc3Vic2NyaWJlciByZWNlaXZpbmcgcm9sbGJhY2sKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgKKwkJJ3Bvc3RncmVzJywgcXsKKwlCRUdJTjsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBT RUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDg1MDEsOTAwMCkgcyhp KTsKKwlTQVZFUE9JTlQgczE7CisJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShp Ojp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg5MDAxLDk1MDApIHMoaSk7CisJU0FWRVBPSU5U IHMyOworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoOTUwMSwxMDAwMCkgcyhpKTsKKwlST0xMQkFDSzsKKwl9KTsKKworCSRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwkkcmVzdWx0ID0K KwkgICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQkiU0VMRUNUIGNv dW50KCopLCBjb3VudChjKSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoMjUwMHww KSwgJ2NoZWNrIHJvbGxiYWNrIHdhcyByZWZsZWN0ZWQgb24gc3Vic2NyaWJlcicpOworfQorCiAj IENyZWF0ZSBwdWJsaXNoZXIgbm9kZQogbXkgJG5vZGVfcHVibGlzaGVyID0gUG9zdGdyZVNRTDo6 VGVzdDo6Q2x1c3Rlci0+bmV3KCdwdWJsaXNoZXInKTsKICRub2RlX3B1Ymxpc2hlci0+aW5pdChh bGxvd3Nfc3RyZWFtaW5nID0+ICdsb2dpY2FsJyk7CkBAIC0zNiw2ICsxMTcsOCBAQCAkbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCSJDUkVBVEUgUFVCTElDQVRJT04gdGFw X3B1YiBGT1IgVEFCTEUgdGVzdF90YWIiKTsKIAogbXkgJGFwcG5hbWUgPSAndGFwX3N1Yic7CisK KyMgVGVzdCBzdHJlYW1pbmcgbW9kZSBvbgogJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCiAJIkNSRUFURSBTVUJTQ1JJUFRJT04gdGFwX3N1YiBDT05ORUNUSU9OICckcHVi bGlzaGVyX2Nvbm5zdHIgYXBwbGljYXRpb25fbmFtZT0kYXBwbmFtZScgUFVCTElDQVRJT04gdGFw X3B1YiBXSVRIIChzdHJlYW1pbmcgPSBvbikiCiApOwpAQCAtNTMsODEgKzEzNiwyMyBAQCBteSAk cmVzdWx0ID0KIAkiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSBGUk9NIHRlc3RfdGFiIik7CiBp cygkcmVzdWx0LCBxcSgyfDApLCAnY2hlY2sgaW5pdGlhbCBkYXRhIHdhcyBjb3BpZWQgdG8gc3Vi c2NyaWJlcicpOwogCi0jIGxhcmdlIChzdHJlYW1lZCkgdHJhbnNhY3Rpb24gd2l0aCBEREwsIERN TCBhbmQgUk9MTEJBQ0tzCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdyZXMn LCBxewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQp IEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsNTAwKSBzKGkpOwotU0FWRVBPSU5UIHMxOwotSU5TRVJU IElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmll cyg1MDEsMTAwMCkgcyhpKTsKLVNBVkVQT0lOVCBzMjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNF TEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMTAwMSwxNTAwKSBzKGkp OwotU0FWRVBPSU5UIHMzOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0 ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygxNTAxLDIwMDApIHMoaSk7Ci1ST0xMQkFDSyBUTyBz MjsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5l cmF0ZV9zZXJpZXMoMjAwMSwyNTAwKSBzKGkpOwotUk9MTEJBQ0sgVE8gczE7Ci1JTlNFUlQgSU5U TyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDI1 MDEsMzAwMCkgcyhpKTsKLVNBVkVQT0lOVCBzNDsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVD VCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMzAwMSwzNTAwKSBzKGkpOwot U0FWRVBPSU5UIHM1OwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0 KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzNTAxLDQwMDApIHMoaSk7Ci1DT01NSVQ7Ci19KTsKK3Rl c3Rfc3RyZWFtaW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUp OwogCisjIFRlc3Qgc3RyZWFtaW5nIG1vZGUgYXBwbHkKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSAoYSA+IDIpIik7CiAk bm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwogCi0kcmVzdWx0ID0K LSAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCi0JIlNFTEVDVCBjb3Vu dCgqKSwgY291bnQoYykgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwgcXEoMjAwMHwwKSwK LQknY2hlY2sgcm9sbGJhY2sgdG8gc2F2ZXBvaW50IHdhcyByZWZsZWN0ZWQgb24gc3Vic2NyaWJl ciBhbmQgZXh0cmEgY29sdW1ucyBjb250YWluIGxvY2FsIGRlZmF1bHRzJworbXkgJG9sZHBpZCA9 ICRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwaWQgRlJP TSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWUn IEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKICk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywKKwkiQUxURVIgU1VCU0NSSVBUSU9OIHRhcF9zdWIgU0VUKHN0cmVhbWlu ZyA9IGFwcGx5KSIKKyk7Ciskbm9kZV9wdWJsaXNoZXItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3Rn cmVzJywKKwkiU0VMRUNUIHBpZCAhPSAkb2xkcGlkIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbiBX SEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5n JzsiCispIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGFwcGx5IHRvIHJlc3Rh cnQgYWZ0ZXIgY2hhbmdpbmcgUFVCTElDQVRJT04iOwogCi0jIGxhcmdlIChzdHJlYW1lZCkgdHJh bnNhY3Rpb24gd2l0aCBzdWJzY3JpYmVyIHJlY2VpdmluZyBvdXQgb2Ygb3JkZXIKLSMgc3VidHJh bnNhY3Rpb24gUk9MTEJBQ0tzCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgKLQkncG9zdGdy ZXMnLCBxewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRl eHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDQwMDEsNDUwMCkgcyhpKTsKLVNBVkVQT0lOVCBzMTsK LUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoNTAwMSw1NTAwKSBzKGkpOwotU0FWRVBPSU5UIHMyOwotSU5TRVJUIElOVE8gdGVz dF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg2MDAxLDY1 MDApIHMoaSk7Ci1TQVZFUE9JTlQgczM7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwg bWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDcwMDEsNzUwMCkgcyhpKTsKLVJFTEVB U0UgczI7Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00g Z2VuZXJhdGVfc2VyaWVzKDgwMDEsODUwMCkgcyhpKTsKLVJPTExCQUNLIFRPIHMxOwotQ09NTUlU OwotfSk7Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7Ci0K LSRyZXN1bHQgPQotICAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQki U0VMRUNUIGNvdW50KCopLCBjb3VudChjKSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0LCBx cSgyNTAwfDApLAotCSdjaGVjayByb2xsYmFjayB0byBzYXZlcG9pbnQgd2FzIHJlZmxlY3RlZCBv biBzdWJzY3JpYmVyJyk7Ci0KLSMgbGFyZ2UgKHN0cmVhbWVkKSB0cmFuc2FjdGlvbiB3aXRoIHN1 YnNjcmliZXIgcmVjZWl2aW5nIHJvbGxiYWNrCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgK LQkncG9zdGdyZXMnLCBxewotQkVHSU47Ci1JTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwg bWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDg1MDEsOTAwMCkgcyhpKTsKLVNBVkVQ T0lOVCBzMTsKLUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJP TSBnZW5lcmF0ZV9zZXJpZXMoOTAwMSw5NTAwKSBzKGkpOwotU0FWRVBPSU5UIHMyOwotSU5TRVJU IElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmll cyg5NTAxLDEwMDAwKSBzKGkpOwotUk9MTEJBQ0s7Ci19KTsKLQotJG5vZGVfcHVibGlzaGVyLT53 YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKLQotJHJlc3VsdCA9Ci0gICRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAotCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpIEZS T00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDI1MDB8MCksICdjaGVjayByb2xsYmFjayB3 YXMgcmVmbGVjdGVkIG9uIHN1YnNjcmliZXInKTsKK3Rlc3Rfc3RyZWFtaW5nKCRub2RlX3B1Ymxp c2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUpOwogCiAkbm9kZV9zdWJzY3JpYmVyLT5z dG9wOwogJG5vZGVfcHVibGlzaGVyLT5zdG9wOwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2Ny aXB0aW9uL3QvMDE5X3N0cmVhbV9zdWJ4YWN0X2RkbF9hYm9ydC5wbCBiL3NyYy90ZXN0L3N1YnNj cmlwdGlvbi90LzAxOV9zdHJlYW1fc3VieGFjdF9kZGxfYWJvcnQucGwKaW5kZXggZGJkMGZjYTRk MS4uYzYxNTBkMzE1NSAxMDA2NDQKLS0tIGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDE5X3N0 cmVhbV9zdWJ4YWN0X2RkbF9hYm9ydC5wbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8w MTlfc3RyZWFtX3N1YnhhY3RfZGRsX2Fib3J0LnBsCkBAIC05LDYgKzksNDAgQEAgdXNlIFBvc3Rn cmVTUUw6OlRlc3Q6OkNsdXN0ZXI7CiB1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7CiB1c2Ug VGVzdDo6TW9yZTsKIAorc3ViIHRlc3Rfc3RyZWFtaW5nCit7CisJbXkgKCRub2RlX3B1Ymxpc2hl ciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUpID0gQF87CisKKwkjIGxhcmdlIChzdHJlYW1l ZCkgdHJhbnNhY3Rpb24gd2l0aCBEREwsIERNTCBhbmQgUk9MTEJBQ0tzCisJJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoCisJCSdwb3N0Z3JlcycsIHF7CisJQkVHSU47CisJSU5TRVJUIElOVE8g dGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLDUw MCkgcyhpKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3RhYiBBREQgQ09MVU1OIGMgSU5UOworCVNBVkVQ T0lOVCBzMTsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpLCAt aSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1MDEsMTAwMCkgcyhpKTsKKwlBTFRFUiBUQUJMRSB0ZXN0 X3RhYiBBREQgQ09MVU1OIGQgSU5UOworCVNBVkVQT0lOVCBzMjsKKwlJTlNFUlQgSU5UTyB0ZXN0 X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpLCAtaSwgMippIEZST00gZ2VuZXJhdGVfc2VyaWVz KDEwMDEsMTUwMCkgcyhpKTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3RhYiBBREQgQ09MVU1OIGUgSU5U OworCVNBVkVQT0lOVCBzMzsKKwlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6 OnRleHQpLCAtaSwgMippLCAtMyppIEZST00gZ2VuZXJhdGVfc2VyaWVzKDE1MDEsMjAwMCkgcyhp KTsKKwlBTFRFUiBUQUJMRSB0ZXN0X3RhYiBEUk9QIENPTFVNTiBjOworCVJPTExCQUNLIFRPIHMx OworCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCksIGkgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoNTAxLDEwMDApIHMoaSk7CisJQ09NTUlUOworCX0pOworCisJJG5vZGVf cHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCW15ICRyZXN1bHQgPQor CSAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJCSJTRUxFQ1QgY291 bnQoKiksIGNvdW50KGMpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSgxMDAwfDUw MCksCisJCSdjaGVjayByb2xsYmFjayB0byBzYXZlcG9pbnQgd2FzIHJlZmxlY3RlZCBvbiBzdWJz Y3JpYmVyIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnCisJKTsKK30K KwogIyBDcmVhdGUgcHVibGlzaGVyIG5vZGUKIG15ICRub2RlX3B1Ymxpc2hlciA9IFBvc3RncmVT UUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygncHVibGlzaGVyJyk7CiAkbm9kZV9wdWJsaXNoZXItPmlu aXQoYWxsb3dzX3N0cmVhbWluZyA9PiAnbG9naWNhbCcpOwpAQCAtMzcsNiArNzEsOCBAQCAkbm9k ZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAogCSJDUkVBVEUgUFVCTElDQVRJT04g dGFwX3B1YiBGT1IgVEFCTEUgdGVzdF90YWIiKTsKIAogbXkgJGFwcG5hbWUgPSAndGFwX3N1Yic7 CisKKyMgVGVzdCBzdHJlYW1pbmcgbW9kZSBvbgogJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsCiAJIkNSRUFURSBTVUJTQ1JJUFRJT04gdGFwX3N1YiBDT05ORUNUSU9OICck cHVibGlzaGVyX2Nvbm5zdHIgYXBwbGljYXRpb25fbmFtZT0kYXBwbmFtZScgUFVCTElDQVRJT04g dGFwX3B1YiBXSVRIIChzdHJlYW1pbmcgPSBvbikiCiApOwpAQCAtNTQsMzQgKzkwLDI3IEBAIG15 ICRyZXN1bHQgPQogCSJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpIEZST00gdGVzdF90YWIiKTsK IGlzKCRyZXN1bHQsIHFxKDJ8MCksICdjaGVjayBpbml0aWFsIGRhdGEgd2FzIGNvcGllZCB0byBz dWJzY3JpYmVyJyk7CiAKLSMgbGFyZ2UgKHN0cmVhbWVkKSB0cmFuc2FjdGlvbiB3aXRoIERETCwg RE1MIGFuZCBST0xMQkFDS3MKK3Rlc3Rfc3RyZWFtaW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVf c3Vic2NyaWJlciwgJGFwcG5hbWUpOworCisjIFRlc3Qgc3RyZWFtaW5nIG1vZGUgYXBwbHkKICRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKAogCSdwb3N0Z3JlcycsIHF7Ci1CRUdJTjsKLUlOU0VS VCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMyw1MDApIHMoaSk7Ci1BTFRFUiBUQUJMRSB0ZXN0X3RhYiBBREQgQ09MVU1OIGMgSU5UOwot U0FWRVBPSU5UIHMxOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0 KSwgLWkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoNTAxLDEwMDApIHMoaSk7Ci1BTFRFUiBUQUJMRSB0 ZXN0X3RhYiBBREQgQ09MVU1OIGQgSU5UOwotU0FWRVBPSU5UIHMyOwotSU5TRVJUIElOVE8gdGVz dF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSwgLWksIDIqaSBGUk9NIGdlbmVyYXRlX3Nlcmll cygxMDAxLDE1MDApIHMoaSk7Ci1BTFRFUiBUQUJMRSB0ZXN0X3RhYiBBREQgQ09MVU1OIGUgSU5U OwotU0FWRVBPSU5UIHMzOwotSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0 ZXh0KSwgLWksIDIqaSwgLTMqaSBGUk9NIGdlbmVyYXRlX3NlcmllcygxNTAxLDIwMDApIHMoaSk7 CitERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSAoYSA+IDIpOwogQUxURVIgVEFCTEUgdGVzdF90 YWIgRFJPUCBDT0xVTU4gYzsKLVJPTExCQUNLIFRPIHMxOwotSU5TRVJUIElOVE8gdGVzdF90YWIg U0VMRUNUIGksIG1kNShpOjp0ZXh0KSwgaSBGUk9NIGdlbmVyYXRlX3Nlcmllcyg1MDEsMTAwMCkg cyhpKTsKLUNPTU1JVDsKIH0pOwotCiAkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo JGFwcG5hbWUpOwogCi0kcmVzdWx0ID0KLSAgJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsCi0JIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYykgRlJPTSB0ZXN0X3RhYiIpOwot aXMoJHJlc3VsdCwgcXEoMTAwMHw1MDApLAotCSdjaGVjayByb2xsYmFjayB0byBzYXZlcG9pbnQg d2FzIHJlZmxlY3RlZCBvbiBzdWJzY3JpYmVyIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9j YWwgZGVmYXVsdHMnCitteSAkb2xkcGlkID0gJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywKKwkiU0VMRUNUIHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24gV0hFUkUgYXBw bGljYXRpb25fbmFtZSA9ICckYXBwbmFtZScgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7IgorKTsK KyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJBTFRFUiBTVUJTQ1JJ UFRJT04gdGFwX3N1YiBTRVQoc3RyZWFtaW5nID0gYXBwbHkpIgogKTsKKyRub2RlX3B1Ymxpc2hl ci0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkICE9ICRvbGRwaWQg RlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uIFdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5h bWUnIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIKKykgb3IgZGllICJUaW1lZCBvdXQgd2hpbGUg d2FpdGluZyBmb3IgYXBwbHkgdG8gcmVzdGFydCBhZnRlciBjaGFuZ2luZyBQVUJMSUNBVElPTiI7 CisKK3Rlc3Rfc3RyZWFtaW5nKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFw cG5hbWUpOwogCiAkbm9kZV9zdWJzY3JpYmVyLT5zdG9wOwogJG5vZGVfcHVibGlzaGVyLT5zdG9w OwpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDIyX3R3b3BoYXNlX2Nhc2Nh ZGUucGwgYi9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjJfdHdvcGhhc2VfY2FzY2FkZS5wbApp bmRleCA5MDBjMjVkNWNlLi5iYjIwYTM2NDBjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3Jp cHRpb24vdC8wMjJfdHdvcGhhc2VfY2FzY2FkZS5wbAorKysgYi9zcmMvdGVzdC9zdWJzY3JpcHRp b24vdC8wMjJfdHdvcGhhc2VfY2FzY2FkZS5wbApAQCAtMTEsNiArMTEsMTQ4IEBAIHVzZSBQb3N0 Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwogdXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOwogdXNl IFRlc3Q6Ok1vcmU7CiAKKyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIDJQQyArIFNUUkVBTUlO RyBURVNUUworIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KK3N1YiB0ZXN0X3N0cmVhbWluZworewor CW15ICgkbm9kZV9BLCAkbm9kZV9CLCAkbm9kZV9DLCAkYXBwbmFtZV9CLCAkYXBwbmFtZV9DLCAk c3RyZWFtaW5nKSA9IEBfOworCisJbXkgJG9sZHBpZF9CID0gJG5vZGVfQS0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICIKKwkJU0VMRUNUIHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24KKwkJV0hF UkUgYXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZV9CJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5n JzsiKTsKKwlteSAkb2xkcGlkX0MgPSAkbm9kZV9CLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIgor CQlTRUxFQ1QgcGlkIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbgorCQlXSEVSRSBhcHBsaWNhdGlv bl9uYW1lID0gJyRhcHBuYW1lX0MnIEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIpOworCisJIyBT ZXR1cCBsb2dpY2FsIHJlcGxpY2F0aW9uIHN0cmVhbWluZyBtb2RlCisKKwkkbm9kZV9CLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIgorCQlBTFRFUiBTVUJTQ1JJUFRJT04gdGFwX3N1Yl9CCisJCVNF VCAoc3RyZWFtaW5nID0gJHN0cmVhbWluZyk7Iik7CisJJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICIKKwkJQUxURVIgU1VCU0NSSVBUSU9OIHRhcF9zdWJfQworCQlTRVQgKHN0cmVhbWlu ZyA9ICRzdHJlYW1pbmcpIik7CisKKwkjIFdhaXQgZm9yIHN1YnNjcmliZXJzIHRvIGZpbmlzaCBp bml0aWFsaXphdGlvbgorCisJJG5vZGVfQS0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLCAi CisJCVNFTEVDVCBwaWQgIT0gJG9sZHBpZF9CIEZST00gcGdfc3RhdF9yZXBsaWNhdGlvbgorCQlX SEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lX0InIEFORCBzdGF0ZSA9ICdzdHJlYW1p bmcnOyIKKwkpIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGFwcGx5IHRvIHJl c3RhcnQiOworCSRub2RlX0ItPnBvbGxfcXVlcnlfdW50aWwoJ3Bvc3RncmVzJywgIgorCQlTRUxF Q1QgcGlkICE9ICRvbGRwaWRfQyBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24KKwkJV0hFUkUgYXBw bGljYXRpb25fbmFtZSA9ICckYXBwbmFtZV9DJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCisJ KSBvciBkaWUgIlRpbWVkIG91dCB3aGlsZSB3YWl0aW5nIGZvciBhcHBseSB0byByZXN0YXJ0IjsK KworCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwkjIFRlc3QgMlBDIFBSRVBBUkUg LyBDT01NSVQgUFJFUEFSRUQuCisJIyAxLiBEYXRhIGlzIHN0cmVhbWVkIGFzIGEgMlBDIHRyYW5z YWN0aW9uLgorCSMgMi4gVGhlbiBkbyBjb21taXQgcHJlcGFyZWQuCisJIworCSMgRXhwZWN0IGFs bCBkYXRhIGlzIHJlcGxpY2F0ZWQgb24gc3Vic2NyaWJlcihzKSBhZnRlciB0aGUgY29tbWl0Lgor CSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworCSMgRmlyc3QsIGRlbGV0ZSB0aGUg ZGF0YSBleGNlcHQgZm9yIDIgcm93cyAoZGVsZXRlIHdpbGwgYmUgcmVwbGljYXRlZCkKKwkkbm9k ZV9BLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEg PiAyOyIpOworCisJIyBJbnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRlIGVub3VnaCByb3dzIHRvIGV4 Y2VlZCB0aGUgNjRrQiBsaW1pdC4KKwkjIFRoZW4gMlBDIFBSRVBBUkUKKwkkbm9kZV9BLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgcXsKKwkJQkVHSU47CisJCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNF TEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNTAwMCkgcyhpKTsK KwkJVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKKwkJ REVMRVRFIEZST00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOworCQlQUkVQQVJFIFRSQU5T QUNUSU9OICd0ZXN0X3ByZXBhcmVkX3RhYic7fSk7CisKKwkkbm9kZV9BLT53YWl0X2Zvcl9jYXRj aHVwKCRhcHBuYW1lX0IpOworCSRub2RlX0ItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWVfQyk7 CisKKwkjIGNoZWNrIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZSBpcyBwcmVwYXJlZCBvbiBzdWJzY3Jp YmVyKHMpCisJbXkgJHJlc3VsdCA9ICRub2RlX0ItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VM RUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEo MSksICd0cmFuc2FjdGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyIEInKTsKKwkkcmVzdWx0 ID0gJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSBw Z19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlz IHByZXBhcmVkIG9uIHN1YnNjcmliZXIgQycpOworCisJIyAyUEMgQ09NTUlUCisJJG5vZGVfQS0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDT01NSVQgUFJFUEFSRUQgJ3Rlc3RfcHJlcGFyZWRfdGFi JzsiKTsKKworCSRub2RlX0EtPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWVfQik7CisJJG5vZGVf Qi0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9DKTsKKworCSMgY2hlY2sgdGhhdCB0cmFuc2Fj dGlvbiB3YXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIocykKKwkkcmVzdWx0ID0gJG5vZGVfQi0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChk ID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7CisJaXMoJHJlc3VsdCwgcXEoMzMzNHwzMzM0fDMzMzQp LCAnUm93cyBpbnNlcnRlZCBieSAyUEMgaGF2ZSBjb21taXR0ZWQgb24gc3Vic2NyaWJlciBCLCBh bmQgZXh0cmEgY29sdW1ucyAJaGF2ZSBsb2NhbCBkZWZhdWx0cycpOworCSRyZXN1bHQgPSAkbm9k ZV9DLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNv dW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSgzMzM0fDMzMzR8 MzMzNCksICdSb3dzIGluc2VydGVkIGJ5IDJQQyBoYXZlIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVy IEMsIGFuZCBleHRyYSBjb2x1bW5zIAloYXZlIGxvY2FsIGRlZmF1bHRzJyk7CisKKwkjIGNoZWNr IHRoZSB0cmFuc2FjdGlvbiBzdGF0ZSBpcyBlbmRlZCBvbiBzdWJzY3JpYmVyKHMpCisJJHJlc3Vs dCA9ICRub2RlX0ItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00g cGdfcHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2FjdGlvbiBp cyBjb21taXR0ZWQgb24gc3Vic2NyaWJlciBCJyk7CisJJHJlc3VsdCA9ICRub2RlX0MtPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7 Iik7CisJaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb24gc3Vi c2NyaWJlciBDJyk7CisKKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisJIyBUZXN0 IDJQQyBQUkVQQVJFIHdpdGggYSBuZXN0ZWQgUk9MTEJBQ0sgVE8gU0FWRVBPSU5ULgorCSMgMC4g Q2xlYW51cCBmcm9tIHByZXZpb3VzIHRlc3QgbGVhdmluZyBvbmx5IDIgcm93cy4KKwkjIDEuIElu c2VydCBvbmUgbW9yZSByb3cuCisJIyAyLiBSZWNvcmQgYSBTQVZFUE9JTlQuCisJIyAzLiBEYXRh IGlzIHN0cmVhbWVkIHVzaW5nIDJQQy4KKwkjIDQuIERvIHJvbGxiYWNrIHRvIFNBVkVQT0lOVCBw cmlvciB0byB0aGUgc3RyZWFtZWQgaW5zZXJ0cy4KKwkjIDUuIFRoZW4gQ09NTUlUIFBSRVBBUkVE LgorCSMKKwkjIEV4cGVjdCBkYXRhIGFmdGVyIHRoZSBTQVZFUE9JTlQgaXMgYWJvcnRlZCBsZWF2 aW5nIG9ubHkgMyByb3dzICg9IDIgb3JpZ2luYWwgKyAxIGZyb20gc3RlcCAxKS4KKwkjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwkjIEZpcnN0LCBkZWxldGUgdGhlIGRhdGEgZXhj ZXB0IGZvciAyIHJvd3MgKGRlbGV0ZSB3aWxsIGJlIHJlcGxpY2F0ZWQpCisJJG5vZGVfQS0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4gMjsiKTsK KworCSMgMlBDIFBSRVBBUkUgd2l0aCBhIG5lc3RlZCBST0xMQkFDSyBUTyBTQVZFUE9JTlQKKwkk bm9kZV9BLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIgorCQlCRUdJTjsKKwkJSU5TRVJUIElOVE8g dGVzdF90YWIgVkFMVUVTICg5OTk5LCAnZm9vYmFyJyk7CisJCVNBVkVQT0lOVCBzcF9pbm5lcjsK KwkJSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVy YXRlX3NlcmllcygzLCA1MDAwKSBzKGkpOworCQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUo YikgV0hFUkUgbW9kKGEsMikgPSAwOworCQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2Qo YSwzKSA9IDA7CisJCVJPTExCQUNLIFRPIFNBVkVQT0lOVCBzcF9pbm5lcjsKKwkJUFJFUEFSRSBU UkFOU0FDVElPTiAnb3V0ZXInOworCQkiKTsKKworCSRub2RlX0EtPndhaXRfZm9yX2NhdGNodXAo JGFwcG5hbWVfQik7CisJJG5vZGVfQi0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9DKTsKKwor CSMgY2hlY2sgdGhlIHRyYW5zYWN0aW9uIHN0YXRlIHByZXBhcmVkIG9uIHN1YnNjcmliZXIocykK KwkkcmVzdWx0ID0gJG5vZGVfQi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQo KikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKKwlpcygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5z YWN0aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXIgQicpOworCSRyZXN1bHQgPSAkbm9kZV9D LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVk X3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDEpLCAndHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQg b24gc3Vic2NyaWJlciBDJyk7CisKKwkjIDJQQyBDT01NSVQKKwkkbm9kZV9BLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkNPTU1JVCBQUkVQQVJFRCAnb3V0ZXInOyIpOworCisJJG5vZGVfQS0+d2Fp dF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9CKTsKKwkkbm9kZV9CLT53YWl0X2Zvcl9jYXRjaHVwKCRh cHBuYW1lX0MpOworCisJIyBjaGVjayB0aGUgdHJhbnNhY3Rpb24gc3RhdGUgaXMgZW5kZWQgb24g c3Vic2NyaWJlcgorCSRyZXN1bHQgPSAkbm9kZV9CLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNF TEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFx KDApLCAndHJhbnNhY3Rpb24gaXMgZW5kZWQgb24gc3Vic2NyaWJlciBCJyk7CisJJHJlc3VsdCA9 ICRub2RlX0MtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gcGdf cHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2FjdGlvbiBpcyBl bmRlZCBvbiBzdWJzY3JpYmVyIEMnKTsKKworCSMgY2hlY2sgaW5zZXJ0cyBhcmUgdmlzaWJsZSBh dCBzdWJzY3JpYmVyKHMpLgorCSMgQWxsIHRoZSBzdHJlYW1lZCBkYXRhIChwcmlvciB0byB0aGUg U0FWRVBPSU5UKSBzaG91bGQgYmUgcm9sbGVkIGJhY2suCisJIyAoOTk5OSwgJ2Zvb2JhcicpIHNo b3VsZCBiZSBjb21taXR0ZWQuCisJJHJlc3VsdCA9ICRub2RlX0ItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90YWIgd2hlcmUgYiA9ICdmb29iYXInOyIp OworCWlzKCRyZXN1bHQsIHFxKDEpLCAnUm93cyBjb21taXR0ZWQgYXJlIHByZXNlbnQgb24gc3Vi c2NyaWJlciBCJyk7CisJJHJlc3VsdCA9ICRub2RlX0ItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi U0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90YWI7Iik7CisJaXMoJHJlc3VsdCwgcXEoMyksICdS b3dzIGNvbW1pdHRlZCBhcmUgcHJlc2VudCBvbiBzdWJzY3JpYmVyIEInKTsKKwkkcmVzdWx0ID0g JG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0 X3RhYiB3aGVyZSBiID0gJ2Zvb2Jhcic7Iik7CisJaXMoJHJlc3VsdCwgcXEoMSksICdSb3dzIGNv bW1pdHRlZCBhcmUgcHJlc2VudCBvbiBzdWJzY3JpYmVyIEMnKTsKKwkkcmVzdWx0ID0gJG5vZGVf Qy0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3RhYjsi KTsKKwlpcygkcmVzdWx0LCBxcSgzKSwgJ1Jvd3MgY29tbWl0dGVkIGFyZSBwcmVzZW50IG9uIHN1 YnNjcmliZXIgQycpOworfQorCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCiAjIFNl dHVwIGEgY2FzY2FkZSBvZiBwdWIvc3ViIG5vZGVzLgogIyBub2RlX0EgLT4gbm9kZV9CIC0+IG5v ZGVfQwpAQCAtMjI5LDE0MCArMzcxLDggQEAgaXMoJHJlc3VsdCwgcXEoMjEpLCAnUm93cyBjb21t aXR0ZWQgYXJlIHByZXNlbnQgb24gc3Vic2NyaWJlciBCJyk7CiAkcmVzdWx0ID0gJG5vZGVfQy0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgYSBGUk9NIHRhYl9mdWxsIHdoZXJlIGEgSU4g KDIxLDIyKTsiKTsKIGlzKCRyZXN1bHQsIHFxKDIxKSwgJ1Jvd3MgY29tbWl0dGVkIGFyZSBwcmVz ZW50IG9uIHN1YnNjcmliZXIgQycpOwogCi0jIC0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIyAyUEMg KyBTVFJFQU1JTkcgVEVTVFMKLSMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0KLW15ICRvbGRwaWRf QiA9ICRub2RlX0EtPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiCi0JU0VMRUNUIHBpZCBGUk9NIHBn X3N0YXRfcmVwbGljYXRpb24KLQlXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lX0In IEFORCBzdGF0ZSA9ICdzdHJlYW1pbmcnOyIpOwotbXkgJG9sZHBpZF9DID0gJG5vZGVfQi0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICIKLQlTRUxFQ1QgcGlkIEZST00gcGdfc3RhdF9yZXBsaWNhdGlv bgotCVdIRVJFIGFwcGxpY2F0aW9uX25hbWUgPSAnJGFwcG5hbWVfQycgQU5EIHN0YXRlID0gJ3N0 cmVhbWluZyc7Iik7Ci0KLSMgU2V0dXAgbG9naWNhbCByZXBsaWNhdGlvbiAoc3RyZWFtaW5nID0g b24pCi0KLSRub2RlX0ItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiCi0JQUxURVIgU1VCU0NSSVBU SU9OIHRhcF9zdWJfQgotCVNFVCAoc3RyZWFtaW5nID0gb24pOyIpOwotJG5vZGVfQy0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICIKLQlBTFRFUiBTVUJTQ1JJUFRJT04gdGFwX3N1Yl9DCi0JU0VUIChz dHJlYW1pbmcgPSBvbikiKTsKLQotIyBXYWl0IGZvciBzdWJzY3JpYmVycyB0byBmaW5pc2ggaW5p dGlhbGl6YXRpb24KLQotJG5vZGVfQS0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLCAiCi0J U0VMRUNUIHBpZCAhPSAkb2xkcGlkX0IgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uCi0JV0hFUkUg YXBwbGljYXRpb25fbmFtZSA9ICckYXBwbmFtZV9CJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsi Ci0pIG9yIGRpZSAiVGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGFwcGx5IHRvIHJlc3RhcnQi OwotJG5vZGVfQi0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMnLCAiCi0JU0VMRUNUIHBpZCAh PSAkb2xkcGlkX0MgRlJPTSBwZ19zdGF0X3JlcGxpY2F0aW9uCi0JV0hFUkUgYXBwbGljYXRpb25f bmFtZSA9ICckYXBwbmFtZV9DJyBBTkQgc3RhdGUgPSAnc3RyZWFtaW5nJzsiCi0pIG9yIGRpZSAi VGltZWQgb3V0IHdoaWxlIHdhaXRpbmcgZm9yIGFwcGx5IHRvIHJlc3RhcnQiOwotCi0jIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFRlc3QgMlBDIFBSRVBBUkUgLyBDT01NSVQgUFJF UEFSRUQuCi0jIDEuIERhdGEgaXMgc3RyZWFtZWQgYXMgYSAyUEMgdHJhbnNhY3Rpb24uCi0jIDIu IFRoZW4gZG8gY29tbWl0IHByZXBhcmVkLgotIwotIyBFeHBlY3QgYWxsIGRhdGEgaXMgcmVwbGlj YXRlZCBvbiBzdWJzY3JpYmVyKHMpIGFmdGVyIHRoZSBjb21taXQuCi0jIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjCi0KLSMgSW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93 cyB0byBleGNlZWQgdGhlIDY0a0IgbGltaXQuCi0jIFRoZW4gMlBDIFBSRVBBUkUKLSRub2RlX0Et PnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxewotCUJFR0lOOwotCUlOU0VSVCBJTlRPIHRlc3RfdGFi IFNFTEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNTAwMCkgcyhp KTsKLQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwot CURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKLQlQUkVQQVJFIFRSQU5T QUNUSU9OICd0ZXN0X3ByZXBhcmVkX3RhYic7fSk7Ci0KLSRub2RlX0EtPndhaXRfZm9yX2NhdGNo dXAoJGFwcG5hbWVfQik7Ci0kbm9kZV9CLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lX0MpOwot Ci0jIGNoZWNrIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZSBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVy KHMpCi0kcmVzdWx0ID0gJG5vZGVfQi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291 bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDEpLCAndHJh bnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlciBCJyk7Ci0kcmVzdWx0ID0gJG5vZGVf Qy0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJl ZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDEpLCAndHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQg b24gc3Vic2NyaWJlciBDJyk7Ci0KLSMgMlBDIENPTU1JVAotJG5vZGVfQS0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJDT01NSVQgUFJFUEFSRUQgJ3Rlc3RfcHJlcGFyZWRfdGFiJzsiKTsKLQotJG5v ZGVfQS0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZV9CKTsKLSRub2RlX0ItPndhaXRfZm9yX2Nh dGNodXAoJGFwcG5hbWVfQyk7Ci0KLSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiB3YXMgY29tbWl0 dGVkIG9uIHN1YnNjcmliZXIocykKLSRyZXN1bHQgPSAkbm9kZV9CLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVz dF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDMzMzR8MzMzNHwzMzM0KSwgJ1Jvd3MgaW5zZXJ0ZWQg YnkgMlBDIGhhdmUgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIgQiwgYW5kIGV4dHJhIGNvbHVtbnMg aGF2ZSBsb2NhbCBkZWZhdWx0cycpOwotJHJlc3VsdCA9ICRub2RlX0MtPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0 ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwgcXEoMzMzNHwzMzM0fDMzMzQpLCAnUm93cyBpbnNlcnRl ZCBieSAyUEMgaGF2ZSBjb21taXR0ZWQgb24gc3Vic2NyaWJlciBDLCBhbmQgZXh0cmEgY29sdW1u cyBoYXZlIGxvY2FsIGRlZmF1bHRzJyk7Ci0KLSMgY2hlY2sgdGhlIHRyYW5zYWN0aW9uIHN0YXRl IGlzIGVuZGVkIG9uIHN1YnNjcmliZXIocykKLSRyZXN1bHQgPSAkbm9kZV9CLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwot aXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQgb24gc3Vic2NyaWJl ciBCJyk7Ci0kcmVzdWx0ID0gJG5vZGVfQy0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1Qg Y291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDApLCAn dHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIgQycpOwotCi0jIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjCi0jIFRlc3QgMlBDIFBSRVBBUkUgd2l0aCBhIG5lc3RlZCBS T0xMQkFDSyBUTyBTQVZFUE9JTlQuCi0jIDAuIENsZWFudXAgZnJvbSBwcmV2aW91cyB0ZXN0IGxl YXZpbmcgb25seSAyIHJvd3MuCi0jIDEuIEluc2VydCBvbmUgbW9yZSByb3cuCi0jIDIuIFJlY29y ZCBhIFNBVkVQT0lOVC4KLSMgMy4gRGF0YSBpcyBzdHJlYW1lZCB1c2luZyAyUEMuCi0jIDQuIERv IHJvbGxiYWNrIHRvIFNBVkVQT0lOVCBwcmlvciB0byB0aGUgc3RyZWFtZWQgaW5zZXJ0cy4KLSMg NS4gVGhlbiBDT01NSVQgUFJFUEFSRUQuCi0jCi0jIEV4cGVjdCBkYXRhIGFmdGVyIHRoZSBTQVZF UE9JTlQgaXMgYWJvcnRlZCBsZWF2aW5nIG9ubHkgMyByb3dzICg9IDIgb3JpZ2luYWwgKyAxIGZy b20gc3RlcCAxKS4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBGaXJzdCwg ZGVsZXRlIHRoZSBkYXRhIGV4Y2VwdCBmb3IgMiByb3dzIChkZWxldGUgd2lsbCBiZSByZXBsaWNh dGVkKQotJG5vZGVfQS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUgRlJPTSB0ZXN0X3Rh YiBXSEVSRSBhID4gMjsiKTsKLQotIyAyUEMgUFJFUEFSRSB3aXRoIGEgbmVzdGVkIFJPTExCQUNL IFRPIFNBVkVQT0lOVAotJG5vZGVfQS0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICIKLQlCRUdJTjsK LQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMgKDk5OTksICdmb29iYXInKTsKLQlTQVZFUE9J TlQgc3BfaW5uZXI7Ci0JSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0 KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBzKGkpOwotCVVQREFURSB0ZXN0X3RhYiBT RVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci0JREVMRVRFIEZST00gdGVzdF90YWIg V0hFUkUgbW9kKGEsMykgPSAwOwotCVJPTExCQUNLIFRPIFNBVkVQT0lOVCBzcF9pbm5lcjsKLQlQ UkVQQVJFIFRSQU5TQUNUSU9OICdvdXRlcic7Ci0JIik7Ci0KLSRub2RlX0EtPndhaXRfZm9yX2Nh dGNodXAoJGFwcG5hbWVfQik7Ci0kbm9kZV9CLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lX0Mp OwotCi0jIGNoZWNrIHRoZSB0cmFuc2FjdGlvbiBzdGF0ZSBwcmVwYXJlZCBvbiBzdWJzY3JpYmVy KHMpCi0kcmVzdWx0ID0gJG5vZGVfQi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291 bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDEpLCAndHJh bnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlciBCJyk7Ci0kcmVzdWx0ID0gJG5vZGVf Qy0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJl ZF94YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDEpLCAndHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQg b24gc3Vic2NyaWJlciBDJyk7Ci0KLSMgMlBDIENPTU1JVAotJG5vZGVfQS0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJDT01NSVQgUFJFUEFSRUQgJ291dGVyJzsiKTsKLQotJG5vZGVfQS0+d2FpdF9m b3JfY2F0Y2h1cCgkYXBwbmFtZV9CKTsKLSRub2RlX0ItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5h bWVfQyk7Ci0KLSMgY2hlY2sgdGhlIHRyYW5zYWN0aW9uIHN0YXRlIGlzIGVuZGVkIG9uIHN1YnNj cmliZXIKLSRyZXN1bHQgPSAkbm9kZV9CLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBj b3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMCksICd0 cmFuc2FjdGlvbiBpcyBlbmRlZCBvbiBzdWJzY3JpYmVyIEInKTsKLSRyZXN1bHQgPSAkbm9kZV9D LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVk X3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2FjdGlvbiBpcyBlbmRlZCBvbiBz dWJzY3JpYmVyIEMnKTsKLQotIyBjaGVjayBpbnNlcnRzIGFyZSB2aXNpYmxlIGF0IHN1YnNjcmli ZXIocykuCi0jIEFsbCB0aGUgc3RyZWFtZWQgZGF0YSAocHJpb3IgdG8gdGhlIFNBVkVQT0lOVCkg c2hvdWxkIGJlIHJvbGxlZCBiYWNrLgotIyAoOTk5OSwgJ2Zvb2JhcicpIHNob3VsZCBiZSBjb21t aXR0ZWQuCi0kcmVzdWx0ID0gJG5vZGVfQi0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1Qg Y291bnQoKikgRlJPTSB0ZXN0X3RhYiB3aGVyZSBiID0gJ2Zvb2Jhcic7Iik7Ci1pcygkcmVzdWx0 LCBxcSgxKSwgJ1Jvd3MgY29tbWl0dGVkIGFyZSBwcmVzZW50IG9uIHN1YnNjcmliZXIgQicpOwot JHJlc3VsdCA9ICRub2RlX0ItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCop IEZST00gdGVzdF90YWI7Iik7Ci1pcygkcmVzdWx0LCBxcSgzKSwgJ1Jvd3MgY29tbWl0dGVkIGFy ZSBwcmVzZW50IG9uIHN1YnNjcmliZXIgQicpOwotJHJlc3VsdCA9ICRub2RlX0MtPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gdGVzdF90YWIgd2hlcmUgYiA9ICdm b29iYXInOyIpOwotaXMoJHJlc3VsdCwgcXEoMSksICdSb3dzIGNvbW1pdHRlZCBhcmUgcHJlc2Vu dCBvbiBzdWJzY3JpYmVyIEMnKTsKLSRyZXN1bHQgPSAkbm9kZV9DLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfdGFiOyIpOwotaXMoJHJlc3VsdCwgcXEo MyksICdSb3dzIGNvbW1pdHRlZCBhcmUgcHJlc2VudCBvbiBzdWJzY3JpYmVyIEMnKTsKK3Rlc3Rf c3RyZWFtaW5nKCRub2RlX0EsICRub2RlX0IsICRub2RlX0MsICRhcHBuYW1lX0IsICRhcHBuYW1l X0MsICdvbicpOwordGVzdF9zdHJlYW1pbmcoJG5vZGVfQSwgJG5vZGVfQiwgJG5vZGVfQywgJGFw cG5hbWVfQiwgJGFwcG5hbWVfQywgJ2FwcGx5Jyk7CiAKICMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMKICMgY2hlY2sgYWxsIHRoZSBjbGVhbnVwCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9z dWJzY3JpcHRpb24vdC8wMjNfdHdvcGhhc2Vfc3RyZWFtLnBsIGIvc3JjL3Rlc3Qvc3Vic2NyaXB0 aW9uL3QvMDIzX3R3b3BoYXNlX3N0cmVhbS5wbAppbmRleCA5M2NlM2VmMTMyLi5mNWM0MDE2NDgw IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9zdWJzY3JpcHRpb24vdC8wMjNfdHdvcGhhc2Vfc3RyZWFt LnBsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAyM190d29waGFzZV9zdHJlYW0ucGwK QEAgLTgsNiArOCwyMDMgQEAgdXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7CiB1c2UgUG9z dGdyZVNRTDo6VGVzdDo6VXRpbHM7CiB1c2UgVGVzdDo6TW9yZTsKIAorc3ViIHRlc3Rfc3RyZWFt aW5nCit7CisJbXkgKCRub2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUp ID0gQF87CisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCSMgVGVzdCAyUEMgUFJF UEFSRSAvIENPTU1JVCBQUkVQQVJFRC4KKwkjIDEuIERhdGEgaXMgc3RyZWFtZWQgYXMgYSAyUEMg dHJhbnNhY3Rpb24uCisJIyAyLiBUaGVuIGRvIGNvbW1pdCBwcmVwYXJlZC4KKwkjCisJIyBFeHBl Y3QgYWxsIGRhdGEgaXMgcmVwbGljYXRlZCBvbiBzdWJzY3JpYmVyIHNpZGUgYWZ0ZXIgdGhlIGNv bW1pdC4KKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwkjIGNoZWNrIHRoYXQg MlBDIGdldHMgcmVwbGljYXRlZCB0byBzdWJzY3JpYmVyCisJIyBJbnNlcnQsIHVwZGF0ZSBhbmQg ZGVsZXRlIGVub3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRrQiBsaW1pdC4KKwkkbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxeworCQlCRUdJTjsKKwkJSU5TRVJUIElOVE8g dGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1 MDAwKSBzKGkpOworCQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEs MikgPSAwOworCQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJCVBS RVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKKworCSRub2RlX3B1Ymxp c2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwkjIGNoZWNrIHRoYXQgdHJhbnNh Y3Rpb24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vic2NyaWJlcgorCW15ICRyZXN1bHQgPSAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBG Uk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDEpLCAndHJhbnNhY3Rp b24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlcicpOworCisJIyAyUEMgdHJhbnNhY3Rpb24gZ2V0 cyBjb21taXR0ZWQKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ09N TUlUIFBSRVBBUkVEICd0ZXN0X3ByZXBhcmVkX3RhYic7Iik7CisKKwkkbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9u IGlzIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyCisJJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQo ZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpCTsKKwlpcygkcmVzdWx0LCBxcSgzMzM0fDMzMzR8MzMz NCksICdSb3dzIGluc2VydGVkIGJ5IDJQQyBoYXZlIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyLCBh bmQgZXh0cmEgY29sdW1ucyAJY29udGFpbiBsb2NhbCBkZWZhdWx0cycpOworCSRyZXN1bHQgPSAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBG Uk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDApLCAndHJhbnNhY3Rp b24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXInKTsKKworCSMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKKwkjIFRlc3QgMlBDIFBSRVBBUkUgLyBST0xMQkFDSyBQUkVQQVJFRC4KKwkj IDEuIFRhYmxlIGlzIGRlbGV0ZWQgYmFjayB0byAyIHJvd3Mgd2hpY2ggYXJlIHJlcGxpY2F0ZWQg b24gc3Vic2NyaWJlci4KKwkjIDIuIERhdGEgaXMgc3RyZWFtZWQgdXNpbmcgMlBDLgorCSMgMy4g RG8gcm9sbGJhY2sgcHJlcGFyZWQuCisJIworCSMgRXhwZWN0IGRhdGEgcm9sbHMgYmFjayBsZWF2 aW5nIG9ubHkgdGhlIG9yaWdpbmFsIDIgcm93cy4KKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjCisKKwkjIEZpcnN0LCBkZWxldGUgdGhlIGRhdGEgZXhjZXB0IGZvciAyIHJvd3MgKHdp bGwgYmUgcmVwbGljYXRlZCkKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAgIkRFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEgPiAyOyIpOworCisJIyBUaGVuIGluc2Vy dCwgdXBkYXRlIGFuZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxpbWl0 LgorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsIHF7CisJCUJFR0lOOwor CQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJh dGVfc2VyaWVzKDMsIDUwMDApIHMoaSk7CisJCVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShi KSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJCURFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChh LDMpID0gMDsKKwkJUFJFUEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVwYXJlZF90YWInO30pOwor CisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCSMgY2hl Y2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBpbiBwcmVwYXJlZCBzdGF0ZSBvbiBzdWJzY3JpYmVyCisJ JHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNU IGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMSks ICd0cmFuc2FjdGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVyJyk7CisKKwkjIDJQQyB0cmFu c2FjdGlvbiBnZXRzIGFib3J0ZWQKKwkkbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiUk9MTEJBQ0sgUFJFUEFSRUQgJ3Rlc3RfcHJlcGFyZWRfdGFiJzsiKTsKKworCSRub2Rl X3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwkjIGNoZWNrIHRoYXQg dHJhbnNhY3Rpb24gaXMgYWJvcnRlZCBvbiBzdWJzY3JpYmVyCisJJHJlc3VsdCA9ICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopLCBjb3VudChj KSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpCTsKKwlpcygkcmVzdWx0LCBxcSgyfDJ8 MiksICdSb3dzIGluc2VydGVkIGJ5IDJQQyBhcmUgcm9sbGVkIGJhY2ssIGxlYXZpbmcgb25seSB0 aGUgb3JpZ2luYWwgMiByb3dzJyk7CisKKwkkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0 czsiKTsKKwlpcygkcmVzdWx0LCBxcSgwKSwgJ3RyYW5zYWN0aW9uIGlzIGFib3J0ZWQgb24gc3Vi c2NyaWJlcicpOworCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCSMgQ2hlY2sg dGhhdCAyUEMgQ09NTUlUIFBSRVBBUkVEIGlzIGRlY29kZWQgcHJvcGVybHkgb24gY3Jhc2ggcmVz dGFydC4KKwkjIDEuIGluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhj ZWVkIHRoZSA2NGtCIGxpbWl0LgorCSMgMi4gVGhlbiBzZXJ2ZXIgY3Jhc2hlcyBiZWZvcmUgdGhl IDJQQyB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQuCisJIyAzLiBBZnRlciBzZXJ2ZXJzIGFyZSBy ZXN0YXJ0ZWQgdGhlIHBlbmRpbmcgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkLgorCSMKKwkjIEV4 cGVjdCBhbGwgZGF0YSBpcyByZXBsaWNhdGVkIG9uIHN1YnNjcmliZXIgc2lkZSBhZnRlciB0aGUg Y29tbWl0LgorCSMgTm90ZTogYm90aCBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgZG8gY3Jhc2gv cmVzdGFydC4KKwkjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKwkkbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxeworCQlCRUdJTjsKKwkJSU5TRVJUIElOVE8g dGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1 MDAwKSBzKGkpOworCQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEs MikgPSAwOworCQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJCVBS RVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKKworCSRub2RlX3N1YnNj cmliZXItPnN0b3AoJ2ltbWVkaWF0ZScpOworCSRub2RlX3B1Ymxpc2hlci0+c3RvcCgnaW1tZWRp YXRlJyk7CisKKwkkbm9kZV9wdWJsaXNoZXItPnN0YXJ0OworCSRub2RlX3N1YnNjcmliZXItPnN0 YXJ0OworCisJIyBjb21taXQgcG9zdCB0aGUgcmVzdGFydAorCSRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJDT01NSVQgUFJFUEFSRUQgJ3Rlc3RfcHJlcGFyZWRfdGFiJzsi KTsKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOworCisJIyBj aGVjayBpbnNlcnRzIGFyZSB2aXNpYmxlCisJJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9 IDk5OSkgRlJPTSB0ZXN0X3RhYiIpCTsKKwlpcygkcmVzdWx0LCBxcSgzMzM0fDMzMzR8MzMzNCks ICdSb3dzIGluc2VydGVkIGJ5IDJQQyBoYXZlIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyLCBhbmQg ZXh0cmEgY29sdW1ucyAJY29udGFpbiBsb2NhbCBkZWZhdWx0cycpOworCisJIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIworCSMgRG8gSU5TRVJUIGFmdGVyIHRoZSBQUkVQQVJFIGJ1dCBi ZWZvcmUgUk9MTEJBQ0sgUFJFUEFSRUQuCisJIyAxLiBUYWJsZSBpcyBkZWxldGVkIGJhY2sgdG8g MiByb3dzIHdoaWNoIGFyZSByZXBsaWNhdGVkIG9uIHN1YnNjcmliZXIuCisJIyAyLiBEYXRhIGlz IHN0cmVhbWVkIHVzaW5nIDJQQy4KKwkjIDMuIEEgc2luZ2xlIHJvdyBJTlNFUlQgaXMgZG9uZSB3 aGljaCBpcyBhZnRlciB0aGUgUFJFUEFSRS4KKwkjIDQuIFRoZW4gZG8gYSBST0xMQkFDSyBQUkVQ QVJFRC4KKwkjCisJIyBFeHBlY3QgdGhlIDJQQyBkYXRhIHJvbGxzIGJhY2sgbGVhdmluZyBvbmx5 IDMgcm93cyBvbiB0aGUgc3Vic2NyaWJlcgorCSMgKHRoZSBvcmlnaW5hbCAyICsgaW5zZXJ0ZWQg MSkuCisJIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisJIyBGaXJzdCwgZGVsZXRl IHRoZSBkYXRhIGV4Y2VwdCBmb3IgMiByb3dzICh3aWxsIGJlIHJlcGxpY2F0ZWQpCisJJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9NIHRlc3RfdGFiIFdI RVJFIGEgPiAyOyIpOworCisJIyBUaGVuIGluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5vdWdo IHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxpbWl0LgorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsIHF7CisJCUJFR0lOOworCQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxF Q1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMsIDUwMDApIHMoaSk7CisJ CVVQREFURSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7CisJCURF TEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKKwkJUFJFUEFSRSBUUkFOU0FD VElPTiAndGVzdF9wcmVwYXJlZF90YWInO30pOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zv cl9jYXRjaHVwKCRhcHBuYW1lKTsKKworCSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBpbiBw cmVwYXJlZCBzdGF0ZSBvbiBzdWJzY3JpYmVyCisJJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRf eGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMSksICd0cmFuc2FjdGlvbiBpcyBwcmVwYXJlZCBv biBzdWJzY3JpYmVyJyk7CisKKwkjIEluc2VydCBhIGRpZmZlcmVudCByZWNvcmQgKG5vdyB3ZSBh cmUgb3V0c2lkZSBvZiB0aGUgMlBDIHRyYW5zYWN0aW9uKQorCSMgTm90ZTogdGhlIDJQQyB0cmFu c2FjdGlvbiBzdGlsbCBob2xkcyByb3cgbG9ja3Mgc28gbWFrZSBzdXJlIHRoaXMgaW5zZXJ0IGlz IGZvciBhIHNlcGFyYXRlIHByaW1hcnkga2V5CisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoOTk5OTksICdmb29iYXIn KSIpOworCisJIyAyUEMgdHJhbnNhY3Rpb24gZ2V0cyBhYm9ydGVkCisJJG5vZGVfcHVibGlzaGVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlJPTExCQUNLIFBSRVBBUkVEICd0ZXN0X3ByZXBhcmVk X3RhYic7Iik7CisKKwkkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUp OworCisJIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGFib3J0ZWQgb24gc3Vic2NyaWJlciwK KwkjIGJ1dCB0aGUgZXh0cmEgSU5TRVJUIG91dHNpZGUgb2YgdGhlIDJQQyBzdGlsbCB3YXMgcmVw bGljYXRlZAorCSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90 YWIiKQk7CisJaXMoJHJlc3VsdCwgcXEoM3wzfDMpLCAnY2hlY2sgdGhlIG91dHNpZGUgaW5zZXJ0 IHdhcyBjb3BpZWQgdG8gc3Vic2NyaWJlcicpOworCisJJHJlc3VsdCA9ICRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFy ZWRfeGFjdHM7Iik7CisJaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2FjdGlvbiBpcyBhYm9ydGVk IG9uIHN1YnNjcmliZXInKTsKKworCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwkj IERvIElOU0VSVCBhZnRlciB0aGUgUFJFUEFSRSBidXQgYmVmb3JlIENPTU1JVCBQUkVQQVJFRC4K KwkjIDEuIFRhYmxlIGlzIGRlbGV0ZWQgYmFjayB0byAyIHJvd3Mgd2hpY2ggYXJlIHJlcGxpY2F0 ZWQgb24gc3Vic2NyaWJlci4KKwkjIDIuIERhdGEgaXMgc3RyZWFtZWQgdXNpbmcgMlBDLgorCSMg My4gQSBzaW5nbGUgcm93IElOU0VSVCBpcyBkb25lIHdoaWNoIGlzIGFmdGVyIHRoZSBQUkVQQVJF LgorCSMgNC4gVGhlbiBkbyBhIENPTU1JVCBQUkVQQVJFRC4KKwkjCisJIyBFeHBlY3QgMlBDIGRh dGEgKyB0aGUgZXh0cmEgcm93IGFyZSBvbiB0aGUgc3Vic2NyaWJlcgorCSMgKHRoZSAzMzM0ICsg aW5zZXJ0ZWQgMSA9IDMzMzUpLgorCSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKwor CSMgRmlyc3QsIGRlbGV0ZSB0aGUgZGF0YSBleGNlcHQgZm9yIDIgcm93cyAod2lsbCBiZSByZXBs aWNhdGVkKQorCSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxFVEUg RlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4gMjsiKTsKKworCSMgVGhlbiBpbnNlcnQsIHVwZGF0ZSBh bmQgZGVsZXRlIGVub3VnaCByb3dzIHRvIGV4Y2VlZCB0aGUgNjRrQiBsaW1pdC4KKwkkbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxeworCQlCRUdJTjsKKwkJSU5TRVJUIElO VE8gdGVzdF90YWIgU0VMRUNUIGksIG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nlcmllcygz LCA1MDAwKSBzKGkpOworCQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9k KGEsMikgPSAwOworCQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7CisJ CVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rlc3RfcHJlcGFyZWRfdGFiJzt9KTsKKworCSRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFtZSk7CisKKwkjIGNoZWNrIHRoYXQgdHJh bnNhY3Rpb24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vic2NyaWJlcgorCSRyZXN1bHQgPSAk bm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBG Uk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1bHQsIHFxKDEpLCAndHJhbnNhY3Rp b24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlcicpOworCisJIyBJbnNlcnQgYSBkaWZmZXJlbnQg cmVjb3JkIChub3cgd2UgYXJlIG91dHNpZGUgb2YgdGhlIDJQQyB0cmFuc2FjdGlvbikKKwkjIE5v dGU6IHRoZSAyUEMgdHJhbnNhY3Rpb24gc3RpbGwgaG9sZHMgcm93IGxvY2tzIHNvIG1ha2Ugc3Vy ZSB0aGlzIGluc2VydCBpcyBmb3IgYSBzZXBhcmFyZSBwcmltYXJ5IGtleQorCSRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3RhYiBWQUxVRVMg KDk5OTk5LCAnZm9vYmFyJykiKTsKKworCSMgMlBDIHRyYW5zYWN0aW9uIGdldHMgY29tbWl0dGVk CisJJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNPTU1JVCBQUkVQQVJF RCAndGVzdF9wcmVwYXJlZF90YWInOyIpOworCisJJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9j YXRjaHVwKCRhcHBuYW1lKTsKKworCSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBjb21taXR0 ZWQgb24gc3Vic2NyaWJlcgorCSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywKKwkJIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkp IEZST00gdGVzdF90YWIiKTsKKwlpcygkcmVzdWx0LCBxcSgzMzM1fDMzMzV8MzMzNSksICdSb3dz IGluc2VydGVkIGJ5IDJQQyAoYXMgd2VsbCBhcyBvdXRzaWRlIGluc2VydCkgaGF2ZSBjb21taXR0 ZWQgb24gCXN1YnNjcmliZXIsIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVs dHMnKTsKKworCSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOworCWlzKCRyZXN1 bHQsIHFxKDApLCAndHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXInKTsKK30K KwogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBTZXR1cAogIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIwpAQCAtNDIsNiArMjM5LDggQEAgbXkgJHB1Ymxpc2hlcl9jb25u c3RyID0gJG5vZGVfcHVibGlzaGVyLT5jb25uc3RyIC4gJyBkYm5hbWU9cG9zdGdyZXMnOwogJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBQVUJMSUNBVElPTiB0 YXBfcHViIEZPUiBUQUJMRSB0ZXN0X3RhYiIpOwogCiBteSAkYXBwbmFtZSA9ICd0YXBfc3ViJzsK KworIyBUZXN0IHN0cmVhbWluZyBtb2RlIG9uCiAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIgogCUNSRUFURSBTVUJTQ1JJUFRJT04gdGFwX3N1YgogCUNPTk5FQ1RJT04g JyRwdWJsaXNoZXJfY29ubnN0ciBhcHBsaWNhdGlvbl9uYW1lPSRhcHBuYW1lJwpAQCAtNjksMTk4 ICsyNjgsMjMgQEAgJG5vZGVfc3Vic2NyaWJlci0+cG9sbF9xdWVyeV91bnRpbCgncG9zdGdyZXMn LCAkdHdvcGhhc2VfcXVlcnkpCiBteSAkcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKiksIGNvdW50KGMpLCBjb3VudChkID0gOTk5 KSBGUk9NIHRlc3RfdGFiIik7CiBpcygkcmVzdWx0LCBxcSgyfDJ8MiksICdjaGVjayBpbml0aWFs IGRhdGEgd2FzIGNvcGllZCB0byBzdWJzY3JpYmVyJyk7CiAKLSMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKLSMgVGVzdCAyUEMgUFJFUEFSRSAvIENPTU1JVCBQUkVQQVJFRC4KLSMgMS4g RGF0YSBpcyBzdHJlYW1lZCBhcyBhIDJQQyB0cmFuc2FjdGlvbi4KLSMgMi4gVGhlbiBkbyBjb21t aXQgcHJlcGFyZWQuCi0jCi0jIEV4cGVjdCBhbGwgZGF0YSBpcyByZXBsaWNhdGVkIG9uIHN1YnNj cmliZXIgc2lkZSBhZnRlciB0aGUgY29tbWl0LgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIwotCi0jIGNoZWNrIHRoYXQgMlBDIGdldHMgcmVwbGljYXRlZCB0byBzdWJzY3JpYmVyCi0j IEluc2VydCwgdXBkYXRlIGFuZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtC IGxpbWl0LgotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXsKLQlCRUdJ TjsKLQlJTlNFUlQgSU5UTyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2Vu ZXJhdGVfc2VyaWVzKDMsIDUwMDApIHMoaSk7Ci0JVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1 KGIpIFdIRVJFIG1vZChhLDIpID0gMDsKLQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2Qo YSwzKSA9IDA7Ci0JUFJFUEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVwYXJlZF90YWInO30pOwot Ci0kbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0jIGNoZWNr IHRoYXQgdHJhbnNhY3Rpb24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vic2NyaWJlcgotJHJl c3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNv dW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgxKSwgJ3Ry YW5zYWN0aW9uIGlzIHByZXBhcmVkIG9uIHN1YnNjcmliZXInKTsKK3Rlc3Rfc3RyZWFtaW5nKCRu b2RlX3B1Ymxpc2hlciwgJG5vZGVfc3Vic2NyaWJlciwgJGFwcG5hbWUpOwogCi0jIDJQQyB0cmFu c2FjdGlvbiBnZXRzIGNvbW1pdHRlZAotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkNPTU1JVCBQUkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWInOyIpOwotCi0kbm9kZV9w dWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0jIGNoZWNrIHRoYXQgdHJh bnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIKLSRyZXN1bHQgPSAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSwgY291bnQoYyks IGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsKLWlzKCRyZXN1bHQsIHFxKDMzMzR8MzMz NHwzMzM0KSwgJ1Jvd3MgaW5zZXJ0ZWQgYnkgMlBDIGhhdmUgY29tbWl0dGVkIG9uIHN1YnNjcmli ZXIsIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9jYWwgZGVmYXVsdHMnKTsKLSRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2Fj dGlvbiBpcyBjb21taXR0ZWQgb24gc3Vic2NyaWJlcicpOwotCi0jIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjCi0jIFRlc3QgMlBDIFBSRVBBUkUgLyBST0xMQkFDSyBQUkVQQVJFRC4KLSMg MS4gVGFibGUgaXMgZGVsZXRlZCBiYWNrIHRvIDIgcm93cyB3aGljaCBhcmUgcmVwbGljYXRlZCBv biBzdWJzY3JpYmVyLgotIyAyLiBEYXRhIGlzIHN0cmVhbWVkIHVzaW5nIDJQQy4KLSMgMy4gRG8g cm9sbGJhY2sgcHJlcGFyZWQuCi0jCi0jIEV4cGVjdCBkYXRhIHJvbGxzIGJhY2sgbGVhdmluZyBv bmx5IHRoZSBvcmlnaW5hbCAyIHJvd3MuCi0jIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj Ci0KLSMgRmlyc3QsIGRlbGV0ZSB0aGUgZGF0YSBleGNlcHQgZm9yIDIgcm93cyAod2lsbCBiZSBy ZXBsaWNhdGVkKQorIyBUZXN0IHN0cmVhbWluZyBtb2RlIGFwcGx5CiAkbm9kZV9wdWJsaXNoZXIt PnNhZmVfcHNxbCgncG9zdGdyZXMnLCAgIkRFTEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIGEgPiAy OyIpOwotCi0jIFRoZW4gaW5zZXJ0LCB1cGRhdGUgYW5kIGRlbGV0ZSBlbm91Z2ggcm93cyB0byBl eGNlZWQgdGhlIDY0a0IgbGltaXQuCi0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCBxewotCUJFR0lOOwotCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNFTEVDVCBpLCBtZDUoaTo6 dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNTAwMCkgcyhpKTsKLQlVUERBVEUgdGVzdF90 YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwotCURFTEVURSBGUk9NIHRlc3Rf dGFiIFdIRVJFIG1vZChhLDMpID0gMDsKLQlQUkVQQVJFIFRSQU5TQUNUSU9OICd0ZXN0X3ByZXBh cmVkX3RhYic7fSk7Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFt ZSk7Ci0KLSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBpbiBwcmVwYXJlZCBzdGF0ZSBvbiBz dWJzY3JpYmVyCi0kcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94YWN0czsiKTsKLWlzKCRyZXN1 bHQsIHFxKDEpLCAndHJhbnNhY3Rpb24gaXMgcHJlcGFyZWQgb24gc3Vic2NyaWJlcicpOwotCi0j IDJQQyB0cmFuc2FjdGlvbiBnZXRzIGFib3J0ZWQKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJST0xMQkFDSyBQUkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWInOyIpOwot CiAkbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwogCi0jIGNoZWNr IHRoYXQgdHJhbnNhY3Rpb24gaXMgYWJvcnRlZCBvbiBzdWJzY3JpYmVyCi0kcmVzdWx0ID0gJG5v ZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKiksIGNv dW50KGMpLCBjb3VudChkID0gOTk5KSBGUk9NIHRlc3RfdGFiIik7Ci1pcygkcmVzdWx0LCBxcSgy fDJ8MiksICdSb3dzIGluc2VydGVkIGJ5IDJQQyBhcmUgcm9sbGVkIGJhY2ssIGxlYXZpbmcgb25s eSB0aGUgb3JpZ2luYWwgMiByb3dzJyk7Ci0KLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hh Y3RzOyIpOwotaXMoJHJlc3VsdCwgcXEoMCksICd0cmFuc2FjdGlvbiBpcyBhYm9ydGVkIG9uIHN1 YnNjcmliZXInKTsKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBDaGVjayB0 aGF0IDJQQyBDT01NSVQgUFJFUEFSRUQgaXMgZGVjb2RlZCBwcm9wZXJseSBvbiBjcmFzaCByZXN0 YXJ0LgotIyAxLiBpbnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRlIGVub3VnaCByb3dzIHRvIGV4Y2Vl ZCB0aGUgNjRrQiBsaW1pdC4KLSMgMi4gVGhlbiBzZXJ2ZXIgY3Jhc2hlcyBiZWZvcmUgdGhlIDJQ QyB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQuCi0jIDMuIEFmdGVyIHNlcnZlcnMgYXJlIHJlc3Rh cnRlZCB0aGUgcGVuZGluZyB0cmFuc2FjdGlvbiBpcyBjb21taXR0ZWQuCi0jCi0jIEV4cGVjdCBh bGwgZGF0YSBpcyByZXBsaWNhdGVkIG9uIHN1YnNjcmliZXIgc2lkZSBhZnRlciB0aGUgY29tbWl0 LgotIyBOb3RlOiBib3RoIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJlciBkbyBjcmFzaC9yZXN0YXJ0 LgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotCi0kbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCBxewotCUJFR0lOOwotCUlOU0VSVCBJTlRPIHRlc3RfdGFiIFNF TEVDVCBpLCBtZDUoaTo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMywgNTAwMCkgcyhpKTsK LQlVUERBVEUgdGVzdF90YWIgU0VUIGIgPSBtZDUoYikgV0hFUkUgbW9kKGEsMikgPSAwOwotCURF TEVURSBGUk9NIHRlc3RfdGFiIFdIRVJFIG1vZChhLDMpID0gMDsKLQlQUkVQQVJFIFRSQU5TQUNU SU9OICd0ZXN0X3ByZXBhcmVkX3RhYic7fSk7Ci0KLSRub2RlX3N1YnNjcmliZXItPnN0b3AoJ2lt bWVkaWF0ZScpOwotJG5vZGVfcHVibGlzaGVyLT5zdG9wKCdpbW1lZGlhdGUnKTsKLQotJG5vZGVf cHVibGlzaGVyLT5zdGFydDsKLSRub2RlX3N1YnNjcmliZXItPnN0YXJ0OwotCi0jIGNvbW1pdCBw b3N0IHRoZSByZXN0YXJ0Ci0kbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAi Q09NTUlUIFBSRVBBUkVEICd0ZXN0X3ByZXBhcmVkX3RhYic7Iik7Ci0kbm9kZV9wdWJsaXNoZXIt PndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0jIGNoZWNrIGluc2VydHMgYXJlIHZpc2li bGUKLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNF TEVDVCBjb3VudCgqKSwgY291bnQoYyksIGNvdW50KGQgPSA5OTkpIEZST00gdGVzdF90YWIiKTsK LWlzKCRyZXN1bHQsIHFxKDMzMzR8MzMzNHwzMzM0KSwgJ1Jvd3MgaW5zZXJ0ZWQgYnkgMlBDIGhh dmUgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIsIGFuZCBleHRyYSBjb2x1bW5zIGNvbnRhaW4gbG9j YWwgZGVmYXVsdHMnKTsKLQotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwotIyBEbyBJ TlNFUlQgYWZ0ZXIgdGhlIFBSRVBBUkUgYnV0IGJlZm9yZSBST0xMQkFDSyBQUkVQQVJFRC4KLSMg MS4gVGFibGUgaXMgZGVsZXRlZCBiYWNrIHRvIDIgcm93cyB3aGljaCBhcmUgcmVwbGljYXRlZCBv biBzdWJzY3JpYmVyLgotIyAyLiBEYXRhIGlzIHN0cmVhbWVkIHVzaW5nIDJQQy4KLSMgMy4gQSBz aW5nbGUgcm93IElOU0VSVCBpcyBkb25lIHdoaWNoIGlzIGFmdGVyIHRoZSBQUkVQQVJFLgotIyA0 LiBUaGVuIGRvIGEgUk9MTEJBQ0sgUFJFUEFSRUQuCi0jCi0jIEV4cGVjdCB0aGUgMlBDIGRhdGEg cm9sbHMgYmFjayBsZWF2aW5nIG9ubHkgMyByb3dzIG9uIHRoZSBzdWJzY3JpYmVyCi0jICh0aGUg b3JpZ2luYWwgMiArIGluc2VydGVkIDEpLgotIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IwotCi0jIEZpcnN0LCBkZWxldGUgdGhlIGRhdGEgZXhjZXB0IGZvciAyIHJvd3MgKHdpbGwgYmUg cmVwbGljYXRlZCkKLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJERUxF VEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBhID4gMjsiKTsKLQotIyBUaGVuIGluc2VydCwgdXBkYXRl IGFuZCBkZWxldGUgZW5vdWdoIHJvd3MgdG8gZXhjZWVkIHRoZSA2NGtCIGxpbWl0LgotJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgcXsKLQlCRUdJTjsKLQlJTlNFUlQgSU5U TyB0ZXN0X3RhYiBTRUxFQ1QgaSwgbWQ1KGk6OnRleHQpIEZST00gZ2VuZXJhdGVfc2VyaWVzKDMs IDUwMDApIHMoaSk7Ci0JVVBEQVRFIHRlc3RfdGFiIFNFVCBiID0gbWQ1KGIpIFdIRVJFIG1vZChh LDIpID0gMDsKLQlERUxFVEUgRlJPTSB0ZXN0X3RhYiBXSEVSRSBtb2QoYSwzKSA9IDA7Ci0JUFJF UEFSRSBUUkFOU0FDVElPTiAndGVzdF9wcmVwYXJlZF90YWInO30pOwotCi0kbm9kZV9wdWJsaXNo ZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0jIGNoZWNrIHRoYXQgdHJhbnNhY3Rp b24gaXMgaW4gcHJlcGFyZWQgc3RhdGUgb24gc3Vic2NyaWJlcgotJHJlc3VsdCA9ICRub2RlX3N1 YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gcGdf cHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygkcmVzdWx0LCBxcSgxKSwgJ3RyYW5zYWN0aW9uIGlzIHBy ZXBhcmVkIG9uIHN1YnNjcmliZXInKTsKLQotIyBJbnNlcnQgYSBkaWZmZXJlbnQgcmVjb3JkIChu b3cgd2UgYXJlIG91dHNpZGUgb2YgdGhlIDJQQyB0cmFuc2FjdGlvbikKLSMgTm90ZTogdGhlIDJQ QyB0cmFuc2FjdGlvbiBzdGlsbCBob2xkcyByb3cgbG9ja3Mgc28gbWFrZSBzdXJlIHRoaXMgaW5z ZXJ0IGlzIGZvciBhIHNlcGFyYXRlIHByaW1hcnkga2V5Ci0kbm9kZV9wdWJsaXNoZXItPnNhZmVf cHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF90YWIgVkFMVUVTICg5OTk5OSwgJ2Zv b2JhcicpIik7Ci0KLSMgMlBDIHRyYW5zYWN0aW9uIGdldHMgYWJvcnRlZAotJG5vZGVfcHVibGlz aGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlJPTExCQUNLIFBSRVBBUkVEICd0ZXN0X3ByZXBh cmVkX3RhYic7Iik7Ci0KLSRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgkYXBwbmFt ZSk7Ci0KLSMgY2hlY2sgdGhhdCB0cmFuc2FjdGlvbiBpcyBhYm9ydGVkIG9uIHN1YnNjcmliZXIs Ci0jIGJ1dCB0aGUgZXh0cmEgSU5TRVJUIG91dHNpZGUgb2YgdGhlIDJQQyBzdGlsbCB3YXMgcmVw bGljYXRlZAotJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiU0VMRUNUIGNvdW50KCopLCBjb3VudChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3Rh YiIpOwotaXMoJHJlc3VsdCwgcXEoM3wzfDMpLCAnY2hlY2sgdGhlIG91dHNpZGUgaW5zZXJ0IHdh cyBjb3BpZWQgdG8gc3Vic2NyaWJlcicpOwotCi0kcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSBwZ19wcmVwYXJlZF94 YWN0czsiKTsKLWlzKCRyZXN1bHQsIHFxKDApLCAndHJhbnNhY3Rpb24gaXMgYWJvcnRlZCBvbiBz dWJzY3JpYmVyJyk7Ci0KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLSMgRG8gSU5T RVJUIGFmdGVyIHRoZSBQUkVQQVJFIGJ1dCBiZWZvcmUgQ09NTUlUIFBSRVBBUkVELgotIyAxLiBU YWJsZSBpcyBkZWxldGVkIGJhY2sgdG8gMiByb3dzIHdoaWNoIGFyZSByZXBsaWNhdGVkIG9uIHN1 YnNjcmliZXIuCi0jIDIuIERhdGEgaXMgc3RyZWFtZWQgdXNpbmcgMlBDLgotIyAzLiBBIHNpbmds ZSByb3cgSU5TRVJUIGlzIGRvbmUgd2hpY2ggaXMgYWZ0ZXIgdGhlIFBSRVBBUkUuCi0jIDQuIFRo ZW4gZG8gYSBDT01NSVQgUFJFUEFSRUQuCi0jCi0jIEV4cGVjdCAyUEMgZGF0YSArIHRoZSBleHRy YSByb3cgYXJlIG9uIHRoZSBzdWJzY3JpYmVyCi0jICh0aGUgMzMzNCArIGluc2VydGVkIDEgPSAz MzM1KS4KLSMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLQotIyBGaXJzdCwgZGVsZXRl IHRoZSBkYXRhIGV4Y2VwdCBmb3IgMiByb3dzICh3aWxsIGJlIHJlcGxpY2F0ZWQpCi0kbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiREVMRVRFIEZST00gdGVzdF90YWIgV0hF UkUgYSA+IDI7Iik7Ci0KLSMgVGhlbiBpbnNlcnQsIHVwZGF0ZSBhbmQgZGVsZXRlIGVub3VnaCBy b3dzIHRvIGV4Y2VlZCB0aGUgNjRrQiBsaW1pdC4KLSRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsIHF7Ci0JQkVHSU47Ci0JSU5TRVJUIElOVE8gdGVzdF90YWIgU0VMRUNUIGks IG1kNShpOjp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygzLCA1MDAwKSBzKGkpOwotCVVQREFU RSB0ZXN0X3RhYiBTRVQgYiA9IG1kNShiKSBXSEVSRSBtb2QoYSwyKSA9IDA7Ci0JREVMRVRFIEZS T00gdGVzdF90YWIgV0hFUkUgbW9kKGEsMykgPSAwOwotCVBSRVBBUkUgVFJBTlNBQ1RJT04gJ3Rl c3RfcHJlcGFyZWRfdGFiJzt9KTsKLQotJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCRhcHBuYW1lKTsKLQotIyBjaGVjayB0aGF0IHRyYW5zYWN0aW9uIGlzIGluIHByZXBhcmVkIHN0 YXRlIG9uIHN1YnNjcmliZXIKLSRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHBnX3ByZXBhcmVkX3hhY3RzOyIpOwot aXMoJHJlc3VsdCwgcXEoMSksICd0cmFuc2FjdGlvbiBpcyBwcmVwYXJlZCBvbiBzdWJzY3JpYmVy Jyk7Ci0KLSMgSW5zZXJ0IGEgZGlmZmVyZW50IHJlY29yZCAobm93IHdlIGFyZSBvdXRzaWRlIG9m IHRoZSAyUEMgdHJhbnNhY3Rpb24pCi0jIE5vdGU6IHRoZSAyUEMgdHJhbnNhY3Rpb24gc3RpbGwg aG9sZHMgcm93IGxvY2tzIHNvIG1ha2Ugc3VyZSB0aGlzIGluc2VydCBpcyBmb3IgYSBzZXBhcmFy ZSBwcmltYXJ5IGtleQotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRlc3RfdGFiIFZBTFVFUyAoOTk5OTksICdmb29iYXInKSIpOwotCi0jIDJQQyB0 cmFuc2FjdGlvbiBnZXRzIGNvbW1pdHRlZAotJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNPTU1JVCBQUkVQQVJFRCAndGVzdF9wcmVwYXJlZF90YWInOyIpOwotCi0kbm9k ZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJGFwcG5hbWUpOwotCi0jIGNoZWNrIHRoYXQg dHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIKLSRyZXN1bHQgPSAkbm9kZV9z dWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKLQkiU0VMRUNUIGNvdW50KCopLCBjb3Vu dChjKSwgY291bnQoZCA9IDk5OSkgRlJPTSB0ZXN0X3RhYiIpOwotaXMoJHJlc3VsdCwgcXEoMzMz NXwzMzM1fDMzMzUpLCAnUm93cyBpbnNlcnRlZCBieSAyUEMgKGFzIHdlbGwgYXMgb3V0c2lkZSBp bnNlcnQpIGhhdmUgY29tbWl0dGVkIG9uIHN1YnNjcmliZXIsIGFuZCBleHRyYSBjb2x1bW5zIGNv bnRhaW4gbG9jYWwgZGVmYXVsdHMnKTsKK215ICRvbGRwaWQgPSAkbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLAorCSJTRUxFQ1QgcGlkIEZST00gcGdfc3RhdF9yZXBsaWNhdGlv biBXSEVSRSBhcHBsaWNhdGlvbl9uYW1lID0gJyRhcHBuYW1lJyBBTkQgc3RhdGUgPSAnc3RyZWFt aW5nJzsiCispOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsCisJIkFM VEVSIFNVQlNDUklQVElPTiB0YXBfc3ViIFNFVChzdHJlYW1pbmcgPSBhcHBseSkiCispOworJG5v ZGVfcHVibGlzaGVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisJIlNFTEVDVCBwaWQg IT0gJG9sZHBpZCBGUk9NIHBnX3N0YXRfcmVwbGljYXRpb24gV0hFUkUgYXBwbGljYXRpb25fbmFt ZSA9ICckYXBwbmFtZScgQU5EIHN0YXRlID0gJ3N0cmVhbWluZyc7IgorKSBvciBkaWUgIlRpbWVk IG91dCB3aGlsZSB3YWl0aW5nIGZvciBhcHBseSB0byByZXN0YXJ0IGFmdGVyIGNoYW5naW5nIFBV QkxJQ0FUSU9OIjsKIAotJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIEZST00gcGdfcHJlcGFyZWRfeGFjdHM7Iik7Ci1pcygk cmVzdWx0LCBxcSgwKSwgJ3RyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiBzdWJzY3JpYmVyJyk7 Cit0ZXN0X3N0cmVhbWluZygkbm9kZV9wdWJsaXNoZXIsICRub2RlX3N1YnNjcmliZXIsICRhcHBu YW1lKTsKIAogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIwogIyBjaGVjayBhbGwgdGhl IGNsZWFudXAKLS0gCjIuMTguNAoK --_003_OSZPR01MB6310F0FABB05F8E5BB31A5B0FDFC9OSZPR01MB6310jpnp_ Content-Type: application/octet-stream; name="v5-0001-Perform-streaming-logical-transactions-by-background.patch" Content-Description: v5-0001-Perform-streaming-logical-transactions-by-background.patch Content-Disposition: attachment; filename="v5-0001-Perform-streaming-logical-transactions-by-background.patch"; size=83741; creation-date="Fri, 29 Apr 2022 05:19:00 GMT"; modification-date="Fri, 29 Apr 2022 05:22:40 GMT" Content-Transfer-Encoding: base64 RnJvbSBlYzMzYTI3MGViODAzMzBiMDEwM2Q2MDUxYWU5YmVhMGIyZDZmN2ZkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiaG91emouZm5zdCIgPGhvdXpqLmZuc3RAY24uZnVqaXRzdS5j b20+CkRhdGU6IFdlZCwgMjAgQXByIDIwMjIgMTY6NDU6MDcgKzA4MDAKU3ViamVjdDogW1BBVENI XSBQZXJmb3JtIHN0cmVhbWluZyBsb2dpY2FsIHRyYW5zYWN0aW9ucyBieSBiYWNrZ3JvdW5kIHdv cmtlcnMKCkN1cnJlbnRseSwgZm9yIGxhcmdlIHRyYW5zYWN0aW9ucywgdGhlIHB1Ymxpc2hlciBz ZW5kcyB0aGUgZGF0YSBpbiBtdWx0aXBsZQpzdHJlYW1zIChjaGFuZ2VzIGRpdmlkZWQgaW50byBj aHVua3MgZGVwZW5kaW5nIHVwb24gbG9naWNhbF9kZWNvZGluZ193b3JrX21lbSksCmFuZCB0aGVu IG9uIHRoZSBzdWJzY3JpYmVyLXNpZGUsIHRoZSBhcHBseSB3b3JrZXIgd3JpdGVzIHRoZSBjaGFu Z2VzIGludG8KdGVtcG9yYXJ5IGZpbGVzIGFuZCBvbmNlIGl0IHJlY2VpdmVzIHRoZSBjb21taXQs IGl0IHJlYWRzIGZyb20gdGhlIGZpbGUgYW5kCmFwcGxpZXMgdGhlIGVudGlyZSB0cmFuc2FjdGlv bi4gVG8gaW1wcm92ZSB0aGUgcGVyZm9ybWFuY2Ugb2Ygc3VjaAp0cmFuc2FjdGlvbnMsIHdlIGNh biBpbnN0ZWFkIGFsbG93IHRoZW0gdG8gYmUgYXBwbGllZCB2aWEgYmFja2dyb3VuZCB3b3JrZXJz LgoKSW4gdGhpcyBhcHByb2FjaCwgd2UgYXNzaWduIGEgbmV3IGFwcGx5IGJhY2tncm91bmQgKGlm IGF2YWlsYWJsZSkgYXMgc29vbiBhcyB0aGUKeGFjdCdzIGZpcnN0IHN0cmVhbSBpcyByZWNlaXZl ZCBhbmQgdGhlIG1haW4gYXBwbHkgd29ya2VyIHdpbGwgc2VuZCBjaGFuZ2VzIHRvCnRoaXMgbmV3 IHdvcmtlciB2aWEgc2hhcmVkIG1lbW9yeS4gVGhlIGFwcGx5IGJhY2tncm91bmQgd2lsbCBkaXJl Y3RseSBhcHBseSB0aGUKY2hhbmdlIGluc3RlYWQgb2Ygd3JpdGluZyBpdCB0byB0ZW1wb3Jhcnkg ZmlsZXMuICBXZSBrZWVwIHRoaXMgd29ya2VyIGFzc2lnbmVkCnRpbGwgdGhlIHRyYW5zYWN0aW9u IGNvbW1pdCBpcyByZWNlaXZlZCBhbmQgYWxzbyB3YWl0IGZvciB0aGUgd29ya2VyIHRvIGZpbmlz aAphdCBjb21taXQuIFRoaXMgcHJlc2VydmVzIGNvbW1pdCBvcmRlcmluZyBhbmQgYXZvaWRzIHdy aXRpbmcgdG8gYW5kIHJlYWRpbmcKZnJvbSBmaWxlIGluIG1vc3QgY2FzZXMuIFdlIHN0aWxsIG5l ZWQgdG8gc3BpbGwgaWYgdGhlcmUgaXMgbm8gd29ya2VyCmF2YWlsYWJsZS4gV2UgYWxzbyBuZWVk IHRvIGFsbG93IHN0cmVhbV9zdG9wIHRvIGNvbXBsZXRlIGJ5IHRoZSBhcHBseSBiYWNrZ3JvdW5k CnRvIGZpbmlzaCBpdCB0byBhdm9pZCBkZWFkbG9ja3MgYmVjYXVzZSBULTEncyBjdXJyZW50IHN0 cmVhbSBvZiBjaGFuZ2VzIGNhbgp1cGRhdGUgcm93cyBpbiBjb25mbGljdGluZyBvcmRlciB3aXRo IFQtMidzIG5leHQgc3RyZWFtIG9mIGNoYW5nZXMuCgpUaGlzIHBhdGNoIGFsc28gZXh0ZW5kcyB0 aGUgc3Vic2NyaXB0aW9uIHN0cmVhbWluZyBvcHRpb24gc28gdGhhdCB1c2VyIGNhbgpjb250cm9s IHdoZXRoZXIgYXBwbHkgdGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbiBpbiBhIGFwcGx5IGJhY2tn cm91bmQgb3Igc3BpbGwKdGhlIGNoYW5nZSB0byBkaXNrLiBVc2VyIGNhbiBzZXQgdGhlIHN0cmVh bWluZyBvcHRpb24gdG8gJ29uL29mZicsICdhcHBseScuIEZvcgpub3csICdhcHBseScgbWVhbnMg dGhlIHN0cmVhbWluZyB3aWxsIGJlIGFwcGxpZWQgdmlhIGEgYXBwbHkgYmFja2dyb3VuZCBpZgph dmFpbGFibGUuICdvbicgbWVhbnMgdGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbiB3aWxsIGJlIHNw aWxsZWQgdG8gZGlzay4KLS0tCiBkb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbCAgICAgICAgICAg ICAgICAgIHwgICAxMCArLQogZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfc3Vic2NyaXB0aW9uLnNn bWwgICB8ICAgMjQgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYyAg ICAgfCAgIDY2ICstCiBzcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMgICAgICAgICAg IHwgICAgMyArCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2xhdW5jaGVyLmMgIHwg ICA4NCArLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9vcmlnaW4uYyAgICB8ICAg MTAgKy0KIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYyAgICAgfCAgICA3 ICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jIHwgICAxMCAr LQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYyAgICB8IDE0NTQgKysr KysrKysrKysrKysrKysrKysrKysrLS0tCiBzcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0 X2V2ZW50LmMgICAgIHwgICAgMyArCiBzcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jICAgICAgICAg ICAgICAgICAgIHwgICAgNiArLQogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24u aCAgICAgICB8ICAgMTYgKy0KIHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xvZ2ljYWxwcm90by5o ICAgICAgfCAgICA0ICstCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2Fsd29ya2VyLmgg ICAgIHwgICAgMSArCiBzcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vcmlnaW4uaCAgICAgICAgICAg IHwgICAgMiArLQogc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vd29ya2VyX2ludGVybmFsLmggICB8 ICAgIDcgKy0KIHNyYy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQuaCAgICAgICAgICAgICAgfCAg ICAxICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2NyaXB0aW9uLm91dCAgfCAgICA4 ICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgIHwgICAgMiAr CiAxOSBmaWxlcyBjaGFuZ2VkLCAxNTA2IGluc2VydGlvbnMoKyksIDIxMiBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvY2F0YWxvZ3Muc2dtbCBiL2RvYy9zcmMvc2dtbC9j YXRhbG9ncy5zZ21sCmluZGV4IGE1MzNhMjEuLmVkNjFmOTkgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMv c2dtbC9jYXRhbG9ncy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jYXRhbG9ncy5zZ21sCkBAIC03 ODYzLDExICs3ODYzLDE1IEBAIFNDUkFNLVNIQS0yNTYkPHJlcGxhY2VhYmxlPiZsdDtpdGVyYXRp b24gY291bnQmZ3Q7PC9yZXBsYWNlYWJsZT46PHJlcGxhY2VhYmxlPiZsCiAKICAgICAgPHJvdz4K ICAgICAgIDxlbnRyeSByb2xlPSJjYXRhbG9nX3RhYmxlX2VudHJ5Ij48cGFyYSByb2xlPSJjb2x1 bW5fZGVmaW5pdGlvbiI+Ci0gICAgICAgPHN0cnVjdGZpZWxkPnN1YnN0cmVhbTwvc3RydWN0Zmll bGQ+IDx0eXBlPmJvb2w8L3R5cGU+CisgICAgICAgPHN0cnVjdGZpZWxkPnN1YnN0cmVhbTwvc3Ry dWN0ZmllbGQ+IDx0eXBlPmNoYXI8L3R5cGU+CiAgICAgICA8L3BhcmE+CiAgICAgICA8cGFyYT4K LSAgICAgICBJZiB0cnVlLCB0aGUgc3Vic2NyaXB0aW9uIHdpbGwgYWxsb3cgc3RyZWFtaW5nIG9m IGluLXByb2dyZXNzCi0gICAgICAgdHJhbnNhY3Rpb25zCisgICAgICAgQ29udHJvbHMgaG93IHRv IGhhbmRsZSB0aGUgc3RyZWFtaW5nIG9mIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucy4KKyAgICAg ICA8bGl0ZXJhbD5mPC9saXRlcmFsPiA9IGRpc2FsbG93IHN0cmVhbWluZyBvZiBpbi1wcm9ncmVz cyB0cmFuc2FjdGlvbnMKKyAgICAgICA8bGl0ZXJhbD5vPC9saXRlcmFsPiA9IHNwaWxsIHRoZSBj aGFuZ2VzIG9mIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucyB0bworICAgICAgIGRpc2sgYW5kIGFw cGx5IGF0IG9uY2UgYWZ0ZXIgdGhlIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiB0aGUKKyAg ICAgICBwdWJsaXNoZXIuCisgICAgICAgPGxpdGVyYWw+YTwvbGl0ZXJhbD4gPSBhcHBseSBjaGFu Z2VzIGRpcmVjdGx5IHVzaW5nIGEgYmFja2dyb3VuZCB3b3JrZXIKICAgICAgIDwvcGFyYT48L2Vu dHJ5PgogICAgICA8L3Jvdz4KIApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVf c3Vic2NyaXB0aW9uLnNnbWwgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9zdWJzY3JpcHRpb24u c2dtbAppbmRleCAyMDNiYjQxLi44NDQxYWEwIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcmVm L2NyZWF0ZV9zdWJzY3JpcHRpb24uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9z dWJzY3JpcHRpb24uc2dtbApAQCAtMjE3LDEzICsyMTcsMjkgQEAgQ1JFQVRFIFNVQlNDUklQVElP TiA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+c3Vic2NyaXB0aW9uX25hbWU8L3JlcGxh Y2VhYmwKICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KIAogICAgICAgIDx2YXJsaXN0ZW50cnk+Ci0g ICAgICAgIDx0ZXJtPjxsaXRlcmFsPnN0cmVhbWluZzwvbGl0ZXJhbD4gKDx0eXBlPmJvb2xlYW48 L3R5cGU+KTwvdGVybT4KKyAgICAgICAgPHRlcm0+PGxpdGVyYWw+c3RyZWFtaW5nPC9saXRlcmFs PiAoPHR5cGU+ZW51bTwvdHlwZT4pPC90ZXJtPgogICAgICAgICA8bGlzdGl0ZW0+CiAgICAgICAg ICA8cGFyYT4KICAgICAgICAgICBTcGVjaWZpZXMgd2hldGhlciB0byBlbmFibGUgc3RyZWFtaW5n IG9mIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucwotICAgICAgICAgIGZvciB0aGlzIHN1YnNjcmlw dGlvbi4gIEJ5IGRlZmF1bHQsIGFsbCB0cmFuc2FjdGlvbnMKLSAgICAgICAgICBhcmUgZnVsbHkg ZGVjb2RlZCBvbiB0aGUgcHVibGlzaGVyIGFuZCBvbmx5IHRoZW4gc2VudCB0byB0aGUKLSAgICAg ICAgICBzdWJzY3JpYmVyIGFzIGEgd2hvbGUuCisgICAgICAgICAgZm9yIHRoaXMgc3Vic2NyaXB0 aW9uLiAgVGhlIGRlZmF1bHQgdmFsdWUgaXMgPGxpdGVyYWw+b2ZmPC9saXRlcmFsPiwKKyAgICAg ICAgICBhbGwgdHJhbnNhY3Rpb25zIGFyZSBmdWxseSBkZWNvZGVkIG9uIHRoZSBwdWJsaXNoZXIg YW5kIG9ubHkgdGhlbgorICAgICAgICAgIHNlbnQgdG8gdGhlIHN1YnNjcmliZXIgYXMgYSB3aG9s ZS4KKyAgICAgICAgIDwvcGFyYT4KKworICAgICAgICAgPHBhcmE+CisgICAgICAgICAgSWYgc2V0 IHRvIDxsaXRlcmFsPm9uPC9saXRlcmFsPiwgdGhlIGNoYW5nZXMgb2YgdHJhbnNhY3Rpb24gYXJl CisgICAgICAgICAgd3JpdHRlbiB0byB0ZW1wb3JhcnkgZmlsZXMgYW5kIHRoZW4gYXBwbGllZCBh dCBvbmNlIGFmdGVyIHRoZQorICAgICAgICAgIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZCBvbiB0 aGUgcHVibGlzaGVyLgorICAgICAgICAgPC9wYXJhPgorCisgICAgICAgICA8cGFyYT4KKyAgICAg ICAgICBJZiBzZXQgdG8gPGxpdGVyYWw+YXBwbHk8L2xpdGVyYWw+IGluY29taW5nCisgICAgICAg ICAgY2hhbmdlcyBhcmUgZGlyZWN0bHkgYXBwbGllZCB2aWEgb25lIG9mIHRoZSBiYWNrZ3JvdW5k IHdvcmtlciwgaWYKKyAgICAgICAgICBhdmFpbGFibGUuIElmIG5vIGJhY2tncm91bmQgd29ya2Vy IGlzIGZyZWUgdG8gaGFuZGxlIHN0cmVhbWluZworICAgICAgICAgIHRyYW5zYWN0aW9uIHRoZW4g dGhlIGNoYW5nZXMgYXJlIHdyaXR0ZW4gdG8gYSBmaWxlIGFuZCBhcHBsaWVkIGFmdGVyCisgICAg ICAgICAgdGhlIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZC4gTm90ZSB0aGF0IGlmIGVycm9yIGhh cHBlbiB3aGVuIGFwcGx5aW5nCisgICAgICAgICAgY2hhbmdlcyBpbiBiYWNrZ3JvdW5kIHdvcmtl ciwgaXQgbWlnaHQgbm90IHJlcG9ydCB0aGUgZmluaXNoIExTTiBvZgorICAgICAgICAgIHRoZSBy ZW1vdGUgdHJhbnNhY3Rpb24gaW4gc2VydmVyIGxvZy4KICAgICAgICAgIDwvcGFyYT4KICAgICAg ICAgPC9saXN0aXRlbT4KICAgICAgICA8L3Zhcmxpc3RlbnRyeT4KZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2NvbW1hbmRzL3N1YnNjcmlwdGlvbmNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3N1YnNjcmlwdGlvbmNtZHMuYwppbmRleCBiOTQyMzZmLi5mZTFkMzczIDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9jb21tYW5kcy9zdWJzY3JpcHRpb25jbWRzLmMKKysrIGIvc3JjL2JhY2tlbmQv Y29tbWFuZHMvc3Vic2NyaXB0aW9uY21kcy5jCkBAIC04Myw3ICs4Myw3IEBAIHR5cGVkZWYgc3Ry dWN0IFN1Yk9wdHMKIAlib29sCQljb3B5X2RhdGE7CiAJYm9vbAkJcmVmcmVzaDsKIAlib29sCQli aW5hcnk7Ci0JYm9vbAkJc3RyZWFtaW5nOworCWNoYXIJCXN0cmVhbWluZzsKIAlib29sCQl0d29w aGFzZTsKIAlib29sCQlkaXNhYmxlb25lcnI7CiAJWExvZ1JlY1B0cglsc247CkBAIC05Niw2ICs5 Niw2MiBAQCBzdGF0aWMgdm9pZCBSZXBvcnRTbG90Q29ubmVjdGlvbkVycm9yKExpc3QgKnJzdGF0 ZXMsIE9pZCBzdWJpZCwgY2hhciAqc2xvdG5hbWUsCiAKIAogLyoKKyAqIEV4dHJhY3QgdGhlIHN0 cmVhbWluZyBtb2RlIHZhbHVlIGZyb20gYSBEZWZFbGVtLiAgVGhpcyBpcyBsaWtlCisgKiBkZWZH ZXRCb29sZWFuKCkgYnV0IGFsc28gYWNjZXB0cyB0aGUgc3BlY2lhbCB2YWx1ZSBhbmQgImFwcGx5 Ii4KKyAqLworc3RhdGljIGNoYXIKK2RlZkdldFN0cmVhbWluZ01vZGUoRGVmRWxlbSAqZGVmKQor eworCS8qCisJICogSWYgbm8gcGFyYW1ldGVyIGdpdmVuLCBhc3N1bWUgInRydWUiIGlzIG1lYW50 LgorCSAqLworCWlmIChkZWYtPmFyZyA9PSBOVUxMKQorCQlyZXR1cm4gU1VCU1RSRUFNX09OOwor CisJLyoKKwkgKiBBbGxvdyAwLCAxLCAidHJ1ZSIsICJmYWxzZSIsICJvbiIsICJvZmYiIG9yICJh cHBseSIuCisJICovCisJc3dpdGNoIChub2RlVGFnKGRlZi0+YXJnKSkKKwl7CisJCWNhc2UgVF9J bnRlZ2VyOgorCQkJc3dpdGNoIChpbnRWYWwoZGVmLT5hcmcpKQorCQkJeworCQkJCWNhc2UgMDoK KwkJCQkJcmV0dXJuIFNVQlNUUkVBTV9PRkY7CisJCQkJY2FzZSAxOgorCQkJCQlyZXR1cm4gU1VC U1RSRUFNX09OOworCQkJCWRlZmF1bHQ6CisJCQkJCS8qIG90aGVyd2lzZSwgZXJyb3Igb3V0IGJl bG93ICovCisJCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQl7CisJ CQkJY2hhcgkqc3ZhbCA9IGRlZkdldFN0cmluZyhkZWYpOworCisJCQkJLyoKKwkJCQkgKiBUaGUg c2V0IG9mIHN0cmluZ3MgYWNjZXB0ZWQgaGVyZSBzaG91bGQgbWF0Y2ggdXAgd2l0aCB0aGUKKwkJ CQkgKiBncmFtbWFyJ3Mgb3B0X2Jvb2xlYW5fb3Jfc3RyaW5nIHByb2R1Y3Rpb24uCisJCQkJICov CisJCQkJaWYgKHBnX3N0cmNhc2VjbXAoc3ZhbCwgInRydWUiKSA9PSAwIHx8CisJCQkJCXBnX3N0 cmNhc2VjbXAoc3ZhbCwgIm9uIikgPT0gMCkKKwkJCQkJcmV0dXJuIFNVQlNUUkVBTV9PTjsKKwkJ CQlpZiAocGdfc3RyY2FzZWNtcChzdmFsLCAiYXBwbHkiKSA9PSAwKQorCQkJCQlyZXR1cm4gU1VC U1RSRUFNX0FQUExZOworCQkJCWlmIChwZ19zdHJjYXNlY21wKHN2YWwsICJmYWxzZSIpID09IDAg fHwKKwkJCQkJcGdfc3RyY2FzZWNtcChzdmFsLCAib2ZmIikgPT0gMCkKKwkJCQkJcmV0dXJuIFNV QlNUUkVBTV9PRkY7CisJCQl9CisJCQlicmVhazsKKwl9CisJZXJlcG9ydChFUlJPUiwKKwkJCQko ZXJyY29kZShFUlJDT0RFX1NZTlRBWF9FUlJPUiksCisJCQkJIGVycm1zZygiJXMgcmVxdWlyZXMg YSBCb29sZWFuIHZhbHVlIG9yIFwiYXBwbHlcIiIsCisJCQkJCWRlZi0+ZGVmbmFtZSkpKTsKKwly ZXR1cm4gU1VCU1RSRUFNX09GRjsJLyoga2VlcCBjb21waWxlciBxdWlldCAqLworfQorCisvKgog ICogQ29tbW9uIG9wdGlvbiBwYXJzaW5nIGZ1bmN0aW9uIGZvciBDUkVBVEUgYW5kIEFMVEVSIFNV QlNDUklQVElPTiBjb21tYW5kcy4KICAqCiAgKiBTaW5jZSBub3QgYWxsIG9wdGlvbnMgY2FuIGJl IHNwZWNpZmllZCBpbiBib3RoIGNvbW1hbmRzLCB0aGlzIGZ1bmN0aW9uCkBAIC0xMzIsNyArMTg4 LDcgQEAgcGFyc2Vfc3Vic2NyaXB0aW9uX29wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0 ICpzdG10X29wdGlvbnMsCiAJaWYgKElzU2V0KHN1cHBvcnRlZF9vcHRzLCBTVUJPUFRfQklOQVJZ KSkKIAkJb3B0cy0+YmluYXJ5ID0gZmFsc2U7CiAJaWYgKElzU2V0KHN1cHBvcnRlZF9vcHRzLCBT VUJPUFRfU1RSRUFNSU5HKSkKLQkJb3B0cy0+c3RyZWFtaW5nID0gZmFsc2U7CisJCW9wdHMtPnN0 cmVhbWluZyA9IFNVQlNUUkVBTV9PRkY7CiAJaWYgKElzU2V0KHN1cHBvcnRlZF9vcHRzLCBTVUJP UFRfVFdPUEhBU0VfQ09NTUlUKSkKIAkJb3B0cy0+dHdvcGhhc2UgPSBmYWxzZTsKIAlpZiAoSXNT ZXQoc3VwcG9ydGVkX29wdHMsIFNVQk9QVF9ESVNBQkxFX09OX0VSUikpCkBAIC0yMzMsNyArMjg5 LDcgQEAgcGFyc2Vfc3Vic2NyaXB0aW9uX29wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBMaXN0 ICpzdG10X29wdGlvbnMsCiAJCQkJZXJyb3JDb25mbGljdGluZ0RlZkVsZW0oZGVmZWwsIHBzdGF0 ZSk7CiAKIAkJCW9wdHMtPnNwZWNpZmllZF9vcHRzIHw9IFNVQk9QVF9TVFJFQU1JTkc7Ci0JCQlv cHRzLT5zdHJlYW1pbmcgPSBkZWZHZXRCb29sZWFuKGRlZmVsKTsKKwkJCW9wdHMtPnN0cmVhbWlu ZyA9IGRlZkdldFN0cmVhbWluZ01vZGUoZGVmZWwpOwogCQl9CiAJCWVsc2UgaWYgKHN0cmNtcChk ZWZlbC0+ZGVmbmFtZSwgInR3b19waGFzZSIpID09IDApCiAJCXsKQEAgLTYwMSw3ICs2NTcsNyBA QCBDcmVhdGVTdWJzY3JpcHRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVTdWJzY3JpcHRp b25TdG10ICpzdG10LAogCXZhbHVlc1tBbnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJvd25lciAtIDFd ID0gT2JqZWN0SWRHZXREYXR1bShvd25lcik7CiAJdmFsdWVzW0FudW1fcGdfc3Vic2NyaXB0aW9u X3N1YmVuYWJsZWQgLSAxXSA9IEJvb2xHZXREYXR1bShvcHRzLmVuYWJsZWQpOwogCXZhbHVlc1tB bnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJiaW5hcnkgLSAxXSA9IEJvb2xHZXREYXR1bShvcHRzLmJp bmFyeSk7Ci0JdmFsdWVzW0FudW1fcGdfc3Vic2NyaXB0aW9uX3N1YnN0cmVhbSAtIDFdID0gQm9v bEdldERhdHVtKG9wdHMuc3RyZWFtaW5nKTsKKwl2YWx1ZXNbQW51bV9wZ19zdWJzY3JpcHRpb25f c3Vic3RyZWFtIC0gMV0gPSBDaGFyR2V0RGF0dW0ob3B0cy5zdHJlYW1pbmcpOwogCXZhbHVlc1tB bnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJ0d29waGFzZXN0YXRlIC0gMV0gPQogCQlDaGFyR2V0RGF0 dW0ob3B0cy50d29waGFzZSA/CiAJCQkJCSBMT0dJQ0FMUkVQX1RXT1BIQVNFX1NUQVRFX1BFTkRJ TkcgOgpAQCAtMTA2MCw3ICsxMTE2LDcgQEAgQWx0ZXJTdWJzY3JpcHRpb24oUGFyc2VTdGF0ZSAq cHN0YXRlLCBBbHRlclN1YnNjcmlwdGlvblN0bXQgKnN0bXQsCiAJCQkJaWYgKElzU2V0KG9wdHMu c3BlY2lmaWVkX29wdHMsIFNVQk9QVF9TVFJFQU1JTkcpKQogCQkJCXsKIAkJCQkJdmFsdWVzW0Fu dW1fcGdfc3Vic2NyaXB0aW9uX3N1YnN0cmVhbSAtIDFdID0KLQkJCQkJCUJvb2xHZXREYXR1bShv cHRzLnN0cmVhbWluZyk7CisJCQkJCQlDaGFyR2V0RGF0dW0ob3B0cy5zdHJlYW1pbmcpOwogCQkJ CQlyZXBsYWNlc1tBbnVtX3BnX3N1YnNjcmlwdGlvbl9zdWJzdHJlYW0gLSAxXSA9IHRydWU7CiAJ CQkJfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMgYi9z cmMvYmFja2VuZC9wb3N0bWFzdGVyL2Jnd29ya2VyLmMKaW5kZXggMzA2ODJiNi4uMDcwZDc3OCAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9iZ3dvcmtlci5jCisrKyBiL3NyYy9i YWNrZW5kL3Bvc3RtYXN0ZXIvYmd3b3JrZXIuYwpAQCAtMTI4LDYgKzEyOCw5IEBAIHN0YXRpYyBj b25zdCBzdHJ1Y3QKIAl9LAogCXsKIAkJIkFwcGx5V29ya2VyTWFpbiIsIEFwcGx5V29ya2VyTWFp bgorCX0sCisJeworCQkiQXBwbHlCZ3dvcmtlck1haW4iLCBBcHBseUJnd29ya2VyTWFpbgogCX0K IH07CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNo ZXIuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbGF1bmNoZXIuYwppbmRleCAw YWRiMmQxLi4yOTk2MzRjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL2xhdW5jaGVyLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sYXVu Y2hlci5jCkBAIC03Miw2ICs3Miw3IEBAIHN0YXRpYyB2b2lkIGxvZ2ljYWxyZXBfbGF1bmNoZXJf b25leGl0KGludCBjb2RlLCBEYXR1bSBhcmcpOwogc3RhdGljIHZvaWQgbG9naWNhbHJlcF93b3Jr ZXJfb25leGl0KGludCBjb2RlLCBEYXR1bSBhcmcpOwogc3RhdGljIHZvaWQgbG9naWNhbHJlcF93 b3JrZXJfZGV0YWNoKHZvaWQpOwogc3RhdGljIHZvaWQgbG9naWNhbHJlcF93b3JrZXJfY2xlYW51 cChMb2dpY2FsUmVwV29ya2VyICp3b3JrZXIpOworc3RhdGljIHZvaWQgbG9naWNhbHJlcF93b3Jr ZXJfc3RvcF9pbnRlcm5hbChMb2dpY2FsUmVwV29ya2VyICp3b3JrZXIpOwogCiBzdGF0aWMgYm9v bCBvbl9jb21taXRfbGF1bmNoZXJfd2FrZXVwID0gZmFsc2U7CiAKQEAgLTIyNCw2ICsyMjUsMTAg QEAgbG9naWNhbHJlcF93b3JrZXJfZmluZChPaWQgc3ViaWQsIE9pZCByZWxpZCwgYm9vbCBvbmx5 X3J1bm5pbmcpCiAJewogCQlMb2dpY2FsUmVwV29ya2VyICp3ID0gJkxvZ2ljYWxSZXBDdHgtPndv cmtlcnNbaV07CiAKKwkJLyogV2Ugb25seSBuZWVkIG1haW4gYXBwbHkgd29ya2VyIG9yIHRhYmxl IHN5bmMgd29ya2VyIGhlcmUgKi8KKwkJaWYgKHctPnN1YndvcmtlcikKKwkJCWNvbnRpbnVlOwor CiAJCWlmICh3LT5pbl91c2UgJiYgdy0+c3ViaWQgPT0gc3ViaWQgJiYgdy0+cmVsaWQgPT0gcmVs aWQgJiYKIAkJCSghb25seV9ydW5uaW5nIHx8IHctPnByb2MpKQogCQl7CkBAIC0yNjIsOSArMjY3 LDkgQEAgbG9naWNhbHJlcF93b3JrZXJzX2ZpbmQoT2lkIHN1YmlkLCBib29sIG9ubHlfcnVubmlu ZykKIC8qCiAgKiBTdGFydCBuZXcgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIsIGlmIHBvc3NpYmxl LgogICovCi12b2lkCitib29sCiBsb2dpY2FscmVwX3dvcmtlcl9sYXVuY2goT2lkIGRiaWQsIE9p ZCBzdWJpZCwgY29uc3QgY2hhciAqc3VibmFtZSwgT2lkIHVzZXJpZCwKLQkJCQkJCSBPaWQgcmVs aWQpCisJCQkJCQkgT2lkIHJlbGlkLCBkc21faGFuZGxlIHN1Yndvcmtlcl9kc20pCiB7CiAJQmFj a2dyb3VuZFdvcmtlciBiZ3c7CiAJQmFja2dyb3VuZFdvcmtlckhhbmRsZSAqYmd3X2hhbmRsZTsK QEAgLTI3NSw2ICsyODAsOSBAQCBsb2dpY2FscmVwX3dvcmtlcl9sYXVuY2goT2lkIGRiaWQsIE9p ZCBzdWJpZCwgY29uc3QgY2hhciAqc3VibmFtZSwgT2lkIHVzZXJpZCwKIAlpbnQJCQluc3luY3dv cmtlcnM7CiAJVGltZXN0YW1wVHogbm93OwogCisJLyogV2UgZG9uJ3Qgc3VwcG9ydCB0YWJsZSBz eW5jIGluIHN1YndvcmtlciAqLworCUFzc2VydCghKChzdWJ3b3JrZXJfZHNtICE9IERTTV9IQU5E TEVfSU5WQUxJRCkgJiYgT2lkSXNWYWxpZChyZWxpZCkpKTsKKwogCWVyZXBvcnQoREVCVUcxLAog CQkJKGVycm1zZ19pbnRlcm5hbCgic3RhcnRpbmcgbG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIg Zm9yIHN1YnNjcmlwdGlvbiBcIiVzXCIiLAogCQkJCQkJCSBzdWJuYW1lKSkpOwpAQCAtMzUxLDcg KzM1OSw3IEBAIHJldHJ5OgogCWlmIChPaWRJc1ZhbGlkKHJlbGlkKSAmJiBuc3luY3dvcmtlcnMg Pj0gbWF4X3N5bmNfd29ya2Vyc19wZXJfc3Vic2NyaXB0aW9uKQogCXsKIAkJTFdMb2NrUmVsZWFz ZShMb2dpY2FsUmVwV29ya2VyTG9jayk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIGZhbHNlOwogCX0K IAogCS8qCkBAIC0zNjUsNyArMzczLDcgQEAgcmV0cnk6CiAJCQkJKGVycmNvZGUoRVJSQ09ERV9D T05GSUdVUkFUSU9OX0xJTUlUX0VYQ0VFREVEKSwKIAkJCQkgZXJybXNnKCJvdXQgb2YgbG9naWNh bCByZXBsaWNhdGlvbiB3b3JrZXIgc2xvdHMiKSwKIAkJCQkgZXJyaGludCgiWW91IG1pZ2h0IG5l ZWQgdG8gaW5jcmVhc2UgbWF4X2xvZ2ljYWxfcmVwbGljYXRpb25fd29ya2Vycy4iKSkpOwotCQly ZXR1cm47CisJCXJldHVybiBmYWxzZTsKIAl9CiAKIAkvKiBQcmVwYXJlIHRoZSB3b3JrZXIgc2xv dC4gKi8KQEAgLTM4MCw2ICszODgsNyBAQCByZXRyeToKIAl3b3JrZXItPnJlbHN0YXRlID0gU1VC UkVMX1NUQVRFX1VOS05PV047CiAJd29ya2VyLT5yZWxzdGF0ZV9sc24gPSBJbnZhbGlkWExvZ1Jl Y1B0cjsKIAl3b3JrZXItPnN0cmVhbV9maWxlc2V0ID0gTlVMTDsKKwl3b3JrZXItPnN1Yndvcmtl ciA9IChzdWJ3b3JrZXJfZHNtICE9IERTTV9IQU5ETEVfSU5WQUxJRCk7CiAJd29ya2VyLT5sYXN0 X2xzbiA9IEludmFsaWRYTG9nUmVjUHRyOwogCVRJTUVTVEFNUF9OT0JFR0lOKHdvcmtlci0+bGFz dF9zZW5kX3RpbWUpOwogCVRJTUVTVEFNUF9OT0JFR0lOKHdvcmtlci0+bGFzdF9yZWN2X3RpbWUp OwpAQCAtMzk3LDE5ICs0MDYsMzEgQEAgcmV0cnk6CiAJCUJHV09SS0VSX0JBQ0tFTkRfREFUQUJB U0VfQ09OTkVDVElPTjsKIAliZ3cuYmd3X3N0YXJ0X3RpbWUgPSBCZ1dvcmtlclN0YXJ0X1JlY292 ZXJ5RmluaXNoZWQ7CiAJc25wcmludGYoYmd3LmJnd19saWJyYXJ5X25hbWUsIEJHV19NQVhMRU4s ICJwb3N0Z3JlcyIpOwotCXNucHJpbnRmKGJndy5iZ3dfZnVuY3Rpb25fbmFtZSwgQkdXX01BWExF TiwgIkFwcGx5V29ya2VyTWFpbiIpOworCisJaWYgKHN1Yndvcmtlcl9kc20gPT0gRFNNX0hBTkRM RV9JTlZBTElEKQorCQlzbnByaW50ZihiZ3cuYmd3X2Z1bmN0aW9uX25hbWUsIEJHV19NQVhMRU4s ICJBcHBseVdvcmtlck1haW4iKTsKKwllbHNlCisJCXNucHJpbnRmKGJndy5iZ3dfZnVuY3Rpb25f bmFtZSwgQkdXX01BWExFTiwgIkFwcGx5Qmd3b3JrZXJNYWluIik7CisKKwogCWlmIChPaWRJc1Zh bGlkKHJlbGlkKSkKIAkJc25wcmludGYoYmd3LmJnd19uYW1lLCBCR1dfTUFYTEVOLAogCQkJCSAi bG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgZm9yIHN1YnNjcmlwdGlvbiAldSBzeW5jICV1Iiwg c3ViaWQsIHJlbGlkKTsKLQllbHNlCisJZWxzZSBpZiAoc3Vid29ya2VyX2RzbSA9PSBEU01fSEFO RExFX0lOVkFMSUQpCiAJCXNucHJpbnRmKGJndy5iZ3dfbmFtZSwgQkdXX01BWExFTiwKIAkJCQkg ImxvZ2ljYWwgcmVwbGljYXRpb24gd29ya2VyIGZvciBzdWJzY3JpcHRpb24gJXUiLCBzdWJpZCk7 CisJZWxzZQorCQlzbnByaW50ZihiZ3cuYmd3X25hbWUsIEJHV19NQVhMRU4sCisJCQkJICJsb2dp Y2FsIHJlcGxpY2F0aW9uIGFwcGx5IHdvcmtlciBmb3Igc3Vic2NyaXB0aW9uICV1Iiwgc3ViaWQp OwogCXNucHJpbnRmKGJndy5iZ3dfdHlwZSwgQkdXX01BWExFTiwgImxvZ2ljYWwgcmVwbGljYXRp b24gd29ya2VyIik7CiAKIAliZ3cuYmd3X3Jlc3RhcnRfdGltZSA9IEJHV19ORVZFUl9SRVNUQVJU OwogCWJndy5iZ3dfbm90aWZ5X3BpZCA9IE15UHJvY1BpZDsKIAliZ3cuYmd3X21haW5fYXJnID0g SW50MzJHZXREYXR1bShzbG90KTsKIAorCWlmIChzdWJ3b3JrZXJfZHNtICE9IERTTV9IQU5ETEVf SU5WQUxJRCkKKwkJbWVtY3B5KGJndy5iZ3dfZXh0cmEsICZzdWJ3b3JrZXJfZHNtLCBzaXplb2Yo ZHNtX2hhbmRsZSkpOworCiAJaWYgKCFSZWdpc3RlckR5bmFtaWNCYWNrZ3JvdW5kV29ya2VyKCZi Z3csICZiZ3dfaGFuZGxlKSkKIAl7CiAJCS8qIEZhaWxlZCB0byBzdGFydCB3b3JrZXIsIHNvIGNs ZWFuIHVwIHRoZSB3b3JrZXIgc2xvdC4gKi8KQEAgLTQyMiwxMSArNDQzLDEzIEBAIHJldHJ5Ogog CQkJCShlcnJjb2RlKEVSUkNPREVfQ09ORklHVVJBVElPTl9MSU1JVF9FWENFRURFRCksCiAJCQkJ IGVycm1zZygib3V0IG9mIGJhY2tncm91bmQgd29ya2VyIHNsb3RzIiksCiAJCQkJIGVycmhpbnQo IllvdSBtaWdodCBuZWVkIHRvIGluY3JlYXNlIG1heF93b3JrZXJfcHJvY2Vzc2VzLiIpKSk7Ci0J CXJldHVybjsKKwkJcmV0dXJuIGZhbHNlOwogCX0KIAogCS8qIE5vdyB3YWl0IHVudGlsIGl0IGF0 dGFjaGVzLiAqLwogCVdhaXRGb3JSZXBsaWNhdGlvbldvcmtlckF0dGFjaCh3b3JrZXIsIGdlbmVy YXRpb24sIGJnd19oYW5kbGUpOworCisJcmV0dXJuIHRydWU7CiB9CiAKIC8qCkBAIC00MzcsNyAr NDYwLDYgQEAgdm9pZAogbG9naWNhbHJlcF93b3JrZXJfc3RvcChPaWQgc3ViaWQsIE9pZCByZWxp ZCkKIHsKIAlMb2dpY2FsUmVwV29ya2VyICp3b3JrZXI7Ci0JdWludDE2CQlnZW5lcmF0aW9uOwog CiAJTFdMb2NrQWNxdWlyZShMb2dpY2FsUmVwV29ya2VyTG9jaywgTFdfU0hBUkVEKTsKIApAQCAt NDUwLDYgKzQ3MiwyMiBAQCBsb2dpY2FscmVwX3dvcmtlcl9zdG9wKE9pZCBzdWJpZCwgT2lkIHJl bGlkKQogCQlyZXR1cm47CiAJfQogCisJbG9naWNhbHJlcF93b3JrZXJfc3RvcF9pbnRlcm5hbCh3 b3JrZXIpOworCisJTFdMb2NrUmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7Cit9CisKKy8q CisgKiBXb3JraG9yc2UgZm9yIGxvZ2ljYWxyZXBfd29ya2VyX3N0b3AoKSBhbmQgbG9naWNhbHJl cF93b3JrZXJfZGV0YWNoKCkuIFN0b3AKKyAqIHRoZSB3b3JrZXIgYW5kIHdhaXQgZm9yIHdhaXQg Zm9yIGl0IHRvIGRpZS4KKyAqLworc3RhdGljIHZvaWQKK2xvZ2ljYWxyZXBfd29ya2VyX3N0b3Bf aW50ZXJuYWwoTG9naWNhbFJlcFdvcmtlciAqd29ya2VyKQoreworCXVpbnQxNgkJZ2VuZXJhdGlv bjsKKworCUFzc2VydChMV0xvY2tIZWxkQnlNZShMb2dpY2FsUmVwV29ya2VyTG9jaykpOworCiAJ LyoKIAkgKiBSZW1lbWJlciB3aGljaCBnZW5lcmF0aW9uIHdhcyBvdXIgd29ya2VyIHNvIHdlIGNh biBjaGVjayBpZiB3aGF0IHdlIHNlZQogCSAqIGlzIHN0aWxsIHRoZSBzYW1lIG9uZS4KQEAgLTQ4 NiwxMCArNTI0LDcgQEAgbG9naWNhbHJlcF93b3JrZXJfc3RvcChPaWQgc3ViaWQsIE9pZCByZWxp ZCkKIAkJICogZGlmZmVyZW50LCBtZWFuaW5nIHRoYXQgYSBkaWZmZXJlbnQgd29ya2VyIGhhcyB0 YWtlbiB0aGUgc2xvdC4KIAkJICovCiAJCWlmICghd29ya2VyLT5pbl91c2UgfHwgd29ya2VyLT5n ZW5lcmF0aW9uICE9IGdlbmVyYXRpb24pCi0JCXsKLQkJCUxXTG9ja1JlbGVhc2UoTG9naWNhbFJl cFdvcmtlckxvY2spOwogCQkJcmV0dXJuOwotCQl9CiAKIAkJLyogV29ya2VyIGhhcyBhc3NpZ25l ZCBwcm9jLCBzbyBpdCBoYXMgc3RhcnRlZC4gKi8KIAkJaWYgKHdvcmtlci0+cHJvYykKQEAgLTUy Myw4ICs1NTgsNiBAQCBsb2dpY2FscmVwX3dvcmtlcl9zdG9wKE9pZCBzdWJpZCwgT2lkIHJlbGlk KQogCiAJCUxXTG9ja0FjcXVpcmUoTG9naWNhbFJlcFdvcmtlckxvY2ssIExXX1NIQVJFRCk7CiAJ fQotCi0JTFdMb2NrUmVsZWFzZShMb2dpY2FsUmVwV29ya2VyTG9jayk7CiB9CiAKIC8qCkBAIC02 MDAsNiArNjMzLDI4IEBAIGxvZ2ljYWxyZXBfd29ya2VyX2F0dGFjaChpbnQgc2xvdCkKIHN0YXRp YyB2b2lkCiBsb2dpY2FscmVwX3dvcmtlcl9kZXRhY2godm9pZCkKIHsKKwkvKgorCSAqIElmIHdl IGFyZSB0aGUgbWFpbiBhcHBseSB3b3JrZXIsIHN0b3AgYWxsIHRoZSBhcHBseSBiYWNrZ3JvdW5k IHdvcmtlcnMKKwkgKiB3ZSBzdGFydGVkIGJlZm9yZS4KKwkgKi8KKwlpZiAoIU15TG9naWNhbFJl cFdvcmtlci0+c3Vid29ya2VyKQorCXsKKwkJTGlzdAkgKndvcmtlcnM7CisJCUxpc3RDZWxsICps YzsKKworCQlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3JrZXJMb2NrLCBMV19TSEFSRUQpOwor CisJCXdvcmtlcnMgPSBsb2dpY2FscmVwX3dvcmtlcnNfZmluZChNeUxvZ2ljYWxSZXBXb3JrZXIt PnN1YmlkLCB0cnVlKTsKKwkJZm9yZWFjaChsYywgd29ya2VycykKKwkJeworCQkJTG9naWNhbFJl cFdvcmtlciAqdyA9IChMb2dpY2FsUmVwV29ya2VyICopIGxmaXJzdChsYyk7CisJCQlpZiAody0+ c3Vid29ya2VyKQorCQkJCWxvZ2ljYWxyZXBfd29ya2VyX3N0b3BfaW50ZXJuYWwodyk7CisJCX0K KworCQlMV0xvY2tSZWxlYXNlKExvZ2ljYWxSZXBXb3JrZXJMb2NrKTsKKwl9CisKIAkvKiBCbG9j ayBjb25jdXJyZW50IGFjY2Vzcy4gKi8KIAlMV0xvY2tBY3F1aXJlKExvZ2ljYWxSZXBXb3JrZXJM b2NrLCBMV19FWENMVVNJVkUpOwogCkBAIC02MjIsNiArNjc3LDcgQEAgbG9naWNhbHJlcF93b3Jr ZXJfY2xlYW51cChMb2dpY2FsUmVwV29ya2VyICp3b3JrZXIpCiAJd29ya2VyLT51c2VyaWQgPSBJ bnZhbGlkT2lkOwogCXdvcmtlci0+c3ViaWQgPSBJbnZhbGlkT2lkOwogCXdvcmtlci0+cmVsaWQg PSBJbnZhbGlkT2lkOworCXdvcmtlci0+c3Vid29ya2VyID0gZmFsc2U7CiB9CiAKIC8qCkBAIC04 NjksNyArOTI1LDcgQEAgQXBwbHlMYXVuY2hlck1haW4oRGF0dW0gbWFpbl9hcmcpCiAJCQkJCXdh aXRfdGltZSA9IHdhbF9yZXRyaWV2ZV9yZXRyeV9pbnRlcnZhbDsKIAogCQkJCQlsb2dpY2FscmVw X3dvcmtlcl9sYXVuY2goc3ViLT5kYmlkLCBzdWItPm9pZCwgc3ViLT5uYW1lLAotCQkJCQkJCQkJ CQkgc3ViLT5vd25lciwgSW52YWxpZE9pZCk7CisJCQkJCQkJCQkJCSBzdWItPm93bmVyLCBJbnZh bGlkT2lkLCBEU01fSEFORExFX0lOVkFMSUQpOwogCQkJCX0KIAkJCX0KIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9vcmlnaW4uYyBiL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvb3JpZ2luLmMKaW5kZXggYjBjOGI2Yy4uYzZlYTY4YSAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9vcmlnaW4uYworKysgYi9zcmMv YmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL29yaWdpbi5jCkBAIC0xMDY4LDcgKzEwNjgsNyBA QCBSZXBsaWNhdGlvbk9yaWdpbkV4aXRDbGVhbnVwKGludCBjb2RlLCBEYXR1bSBhcmcpCiAgKiB3 aXRoIHJlcGxvcmlnaW5fc2Vzc2lvbl9yZXNldCgpLgogICovCiB2b2lkCi1yZXBsb3JpZ2luX3Nl c3Npb25fc2V0dXAoUmVwT3JpZ2luSWQgbm9kZSkKK3JlcGxvcmlnaW5fc2Vzc2lvbl9zZXR1cChS ZXBPcmlnaW5JZCBub2RlLCBib29sIGFjcXVpcmUpCiB7CiAJc3RhdGljIGJvb2wgcmVnaXN0ZXJl ZF9jbGVhbnVwOwogCWludAkJCWk7CkBAIC0xMTEwLDcgKzExMTAsMTEgQEAgcmVwbG9yaWdpbl9z ZXNzaW9uX3NldHVwKFJlcE9yaWdpbklkIG5vZGUpCiAJCWlmIChjdXJzdGF0ZS0+cm9pZGVudCAh PSBub2RlKQogCQkJY29udGludWU7CiAKLQkJZWxzZSBpZiAoY3Vyc3RhdGUtPmFjcXVpcmVkX2J5 ICE9IDApCisJCS8qCisJCSAqIFdlIGFsbG93IHRoZSBhcHBseSB3b3JrZXIgdG8gZ2V0IHRoZSBz bG90IHdoaWNoIGlzIGFjcXVpcmVkIGJ5IGl0cworCQkgKiBsZWFkZXIgcHJvY2Vzcy4KKwkJICov CisJCWVsc2UgaWYgKGN1cnN0YXRlLT5hY3F1aXJlZF9ieSAhPSAwICYmIGFjcXVpcmUpCiAJCXsK IAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX0lOX1VTRSks CkBAIC0xMzIxLDcgKzEzMjUsNyBAQCBwZ19yZXBsaWNhdGlvbl9vcmlnaW5fc2Vzc2lvbl9zZXR1 cChQR19GVU5DVElPTl9BUkdTKQogCiAJbmFtZSA9IHRleHRfdG9fY3N0cmluZygodGV4dCAqKSBE YXR1bUdldFBvaW50ZXIoUEdfR0VUQVJHX0RBVFVNKDApKSk7CiAJb3JpZ2luID0gcmVwbG9yaWdp bl9ieV9uYW1lKG5hbWUsIGZhbHNlKTsKLQlyZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAob3JpZ2lu KTsKKwlyZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAob3JpZ2luLCB0cnVlKTsKIAogCXJlcGxvcmln aW5fc2Vzc2lvbl9vcmlnaW4gPSBvcmlnaW47CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3Jl cGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvcHJvdG8uYwppbmRleCBmZjg1MTNlLi4wNDA5ZmRlIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9wcm90by5jCkBAIC0xMTM4LDE0ICsxMTM4LDExIEBAIGxvZ2ljYWxyZXBfd3Jp dGVfc3RyZWFtX2NvbW1pdChTdHJpbmdJbmZvIG91dCwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAog LyoKICAqIFJlYWQgU1RSRUFNIENPTU1JVCBmcm9tIHRoZSBvdXRwdXQgc3RyZWFtLgogICovCi1U cmFuc2FjdGlvbklkCit2b2lkCiBsb2dpY2FscmVwX3JlYWRfc3RyZWFtX2NvbW1pdChTdHJpbmdJ bmZvIGluLCBMb2dpY2FsUmVwQ29tbWl0RGF0YSAqY29tbWl0X2RhdGEpCiB7Ci0JVHJhbnNhY3Rp b25JZCB4aWQ7CiAJdWludDgJCWZsYWdzOwogCi0JeGlkID0gcHFfZ2V0bXNnaW50KGluLCA0KTsK LQogCS8qIHJlYWQgZmxhZ3MgKHVudXNlZCBmb3Igbm93KSAqLwogCWZsYWdzID0gcHFfZ2V0bXNn Ynl0ZShpbik7CiAKQEAgLTExNTYsOCArMTE1Myw2IEBAIGxvZ2ljYWxyZXBfcmVhZF9zdHJlYW1f Y29tbWl0KFN0cmluZ0luZm8gaW4sIExvZ2ljYWxSZXBDb21taXREYXRhICpjb21taXRfZGF0YSkK IAljb21taXRfZGF0YS0+Y29tbWl0X2xzbiA9IHBxX2dldG1zZ2ludDY0KGluKTsKIAljb21taXRf ZGF0YS0+ZW5kX2xzbiA9IHBxX2dldG1zZ2ludDY0KGluKTsKIAljb21taXRfZGF0YS0+Y29tbWl0 dGltZSA9IHBxX2dldG1zZ2ludDY0KGluKTsKLQotCXJldHVybiB4aWQ7CiB9CiAKIC8qCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxlc3luYy5jIGIvc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC90YWJsZXN5bmMuYwppbmRleCA0OWNlZWMzLi4w NGM5Zjk2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3RhYmxl c3luYy5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvdGFibGVzeW5jLmMK QEAgLTU2OCw3ICs1NjgsOCBAQCBwcm9jZXNzX3N5bmNpbmdfdGFibGVzX2Zvcl9hcHBseShYTG9n UmVjUHRyIGN1cnJlbnRfbHNuKQogCQkJCQkJCQkJCQkJIE15U3Vic2NyaXB0aW9uLT5vaWQsCiAJ CQkJCQkJCQkJCQkgTXlTdWJzY3JpcHRpb24tPm5hbWUsCiAJCQkJCQkJCQkJCQkgTXlMb2dpY2Fs UmVwV29ya2VyLT51c2VyaWQsCi0JCQkJCQkJCQkJCQkgcnN0YXRlLT5yZWxpZCk7CisJCQkJCQkJ CQkJCQkgcnN0YXRlLT5yZWxpZCwKKwkJCQkJCQkJCQkJCSBEU01fSEFORExFX0lOVkFMSUQpOwog CQkJCQkJaGVudHJ5LT5sYXN0X3N0YXJ0X3RpbWUgPSBub3c7CiAJCQkJCX0KIAkJCQl9CkBAIC01 ODksNiArNTkwLDkgQEAgcHJvY2Vzc19zeW5jaW5nX3RhYmxlc19mb3JfYXBwbHkoWExvZ1JlY1B0 ciBjdXJyZW50X2xzbikKIHZvaWQKIHByb2Nlc3Nfc3luY2luZ190YWJsZXMoWExvZ1JlY1B0ciBj dXJyZW50X2xzbikKIHsKKwlpZiAoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJ3b3JrZXIpCisJCXJl dHVybjsKKwogCWlmIChhbV90YWJsZXN5bmNfd29ya2VyKCkpCiAJCXByb2Nlc3Nfc3luY2luZ190 YWJsZXNfZm9yX3N5bmMoY3VycmVudF9sc24pOwogCWVsc2UKQEAgLTEyNzUsNyArMTI3OSw3IEBA IExvZ2ljYWxSZXBTeW5jVGFibGVTdGFydChYTG9nUmVjUHRyICpvcmlnaW5fc3RhcnRwb3MpCiAJ CSAqIHRpbWUgdGhpcyB0YWJsZXN5bmMgd2FzIGxhdW5jaGVkLgogCQkgKi8KIAkJb3JpZ2luaWQg PSByZXBsb3JpZ2luX2J5X25hbWUob3JpZ2lubmFtZSwgZmFsc2UpOwotCQlyZXBsb3JpZ2luX3Nl c3Npb25fc2V0dXAob3JpZ2luaWQpOworCQlyZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAob3JpZ2lu aWQsIHRydWUpOwogCQlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luID0gb3JpZ2luaWQ7CiAJCSpv cmlnaW5fc3RhcnRwb3MgPSByZXBsb3JpZ2luX3Nlc3Npb25fZ2V0X3Byb2dyZXNzKGZhbHNlKTsK IApAQCAtMTM4Niw3ICsxMzkwLDcgQEAgTG9naWNhbFJlcFN5bmNUYWJsZVN0YXJ0KFhMb2dSZWNQ dHIgKm9yaWdpbl9zdGFydHBvcykKIAkJCQkJCSAgIHRydWUgLyogZ28gYmFja3dhcmQgKi8gLCB0 cnVlIC8qIFdBTCBsb2cgKi8gKTsKIAkJVW5sb2NrUmVsYXRpb25PaWQoUmVwbGljYXRpb25Pcmln aW5SZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKIAotCQlyZXBsb3JpZ2luX3Nlc3Npb25f c2V0dXAob3JpZ2luaWQpOworCQlyZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAob3JpZ2luaWQsIHRy dWUpOwogCQlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luID0gb3JpZ2luaWQ7CiAJfQogCWVsc2UK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2VyLmMgYi9z cmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCmluZGV4IDdkYTc4MjMuLmEz MTdmNzIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvd29ya2Vy LmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC93b3JrZXIuYwpAQCAtMjIs OCArMjIsMjUgQEAKICAqIFNUUkVBTUVEIFRSQU5TQUNUSU9OUwogICogLS0tLS0tLS0tLS0tLS0t LS0tLS0tCiAgKiBTdHJlYW1lZCB0cmFuc2FjdGlvbnMgKGxhcmdlIHRyYW5zYWN0aW9ucyBleGNl ZWRpbmcgYSBtZW1vcnkgbGltaXQgb24gdGhlCi0gKiB1cHN0cmVhbSkgYXJlIG5vdCBhcHBsaWVk IGltbWVkaWF0ZWx5LCBidXQgaW5zdGVhZCwgdGhlIGRhdGEgaXMgd3JpdHRlbgotICogdG8gdGVt cG9yYXJ5IGZpbGVzIGFuZCB0aGVuIGFwcGxpZWQgYXQgb25jZSB3aGVuIHRoZSBmaW5hbCBjb21t aXQgYXJyaXZlcy4KKyAqIHVwc3RyZWFtKSBhcmUgYXBwbGllZCB2aWEgb25lIG9mIHR3byBhcHBy b2FjaGVzLgorICoKKyAqIDEpIFNlcGFyYXRlIGJhY2tncm91bmQgd29ya2VycworICoKKyAqIEFz c2lnbiBhIG5ldyBiZ3dvcmtlciAoaWYgYXZhaWxhYmxlKSBhcyBzb29uIGFzIHRoZSB4YWN0J3Mg Zmlyc3Qgc3RyZWFtIGlzCisgKiByZWNlaXZlZCBhbmQgdGhlIG1haW4gYXBwbHkgd29ya2VyIHdp bGwgc2VuZCBjaGFuZ2VzIHRvIHRoaXMgbmV3IHdvcmtlciB2aWEKKyAqIHNoYXJlZCBtZW1vcnku IFdlIGtlZXAgdGhpcyB3b3JrZXIgYXNzaWduZWQgdGlsbCB0aGUgdHJhbnNhY3Rpb24gY29tbWl0 IGlzCisgKiByZWNlaXZlZCBhbmQgYWxzbyB3YWl0IGZvciB0aGUgd29ya2VyIHRvIGZpbmlzaCBh dCBjb21taXQuIFRoaXMgcHJlc2VydmVzCisgKiBjb21taXQgb3JkZXJpbmcgYW5kIGF2b2lkcyB3 cml0aW5nIHRvIGFuZCByZWFkaW5nIGZyb20gZmlsZSBpbiBtb3N0IGNhc2VzLgorICogV2Ugc3Rp bGwgbmVlZCB0byBzcGlsbCBpZiB0aGVyZSBpcyBubyB3b3JrZXIgYXZhaWxhYmxlLiBXZSBhbHNv IG5lZWQgdG8KKyAqIGFsbG93IHN0cmVhbV9zdG9wIHRvIGNvbXBsZXRlIGJ5IHRoZSBiYWNrZ3Jv dW5kIHdvcmtlciB0byBmaW5pc2ggaXQgdG8gYXZvaWQKKyAqIGRlYWRsb2NrcyBiZWNhdXNlIFQt MSdzIGN1cnJlbnQgc3RyZWFtIG9mIGNoYW5nZXMgY2FuIHVwZGF0ZSByb3dzIGluCisgKiBjb25m bGljdGluZyBvcmRlciB3aXRoIFQtMidzIG5leHQgc3RyZWFtIG9mIGNoYW5nZXMuCisgKgorICog MikgV3JpdGUgdG8gdGVtcG9yYXJ5IGZpbGVzIGFuZCBhcHBseSB3aGVuIHRoZSBmaW5hbCBjb21t aXQgYXJyaXZlcworICoKKyAqIElmIG5vIHdvcmtlciBpcyBhdmFpbGFibGUgdG8gaGFuZGxlIHN0 cmVhbWVkIHRyYW5zYWN0aW9uLCB0aGUgZGF0YSBpcworICogd3JpdHRlbiB0byB0ZW1wb3Jhcnkg ZmlsZXMgYW5kIHRoZW4gYXBwbGllZCBhdCBvbmNlIHdoZW4gdGhlIGZpbmFsIGNvbW1pdAorICog YXJyaXZlcy4KICAqCiAgKiBVbmxpa2UgdGhlIHJlZ3VsYXIgKG5vbi1zdHJlYW1lZCkgY2FzZSwg aGFuZGxpbmcgc3RyZWFtZWQgdHJhbnNhY3Rpb25zIGhhcwogICogdG8gaGFuZGxlIGFib3J0cyBv ZiBib3RoIHRoZSB0b3BsZXZlbCB0cmFuc2FjdGlvbiBhbmQgc3VidHJhbnNhY3Rpb25zLiBUaGlz CkBAIC0xNzQsMTEgKzE5MSwxNSBAQAogI2luY2x1ZGUgInJld3JpdGUvcmV3cml0ZUhhbmRsZXIu aCIKICNpbmNsdWRlICJzdG9yYWdlL2J1ZmZpbGUuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zm1n ci5oIgorI2luY2x1ZGUgInN0b3JhZ2UvZHNtLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9mZC5oIgog I2luY2x1ZGUgInN0b3JhZ2UvaXBjLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sbWdyLmgiCiAjaW5j bHVkZSAic3RvcmFnZS9wcm9jLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jYXJyYXkuaCIKKyNp bmNsdWRlICJzdG9yYWdlL3NobV9tcS5oIgorI2luY2x1ZGUgInN0b3JhZ2Uvc2htX3RvYy5oIgor I2luY2x1ZGUgInN0b3JhZ2Uvc3Bpbi5oIgogI2luY2x1ZGUgInRjb3AvdGNvcHByb3QuaCIKICNp bmNsdWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgpAQCAtMTk4 LDYgKzIxOSw3NSBAQAogCiAjZGVmaW5lIE5BUFRJTUVfUEVSX0NZQ0xFIDEwMDAJLyogbWF4IHNs ZWVwIHRpbWUgYmV0d2VlbiBjeWNsZXMgKDFzKSAqLwogCisjZGVmaW5lIFBHX0xPR0lDQUxfQVBQ TFlfU0hNX01BR0lDIDB4NzlmYjI0NDcgLy8gVE9ETyBDb25zaWRlciBjaGFuZ2UKKworLyoKKyAq IFNoYXJlZCBpbmZvcm1hdGlvbiBhbW9uZyBhcHBseSB3b3JrZXJzLgorICovCit0eXBlZGVmIHN0 cnVjdCBQYXJhbGxlbFN0YXRlCit7CisJc2xvY2tfdAltdXRleDsKKworCS8qIFN0YXRlIGZvciBh cHBseSBiYWNrZ3JvdW5kIHdvcmtlci4gKi8KKwljaGFyCQkJc3RhdGU7CisKKwlUcmFuc2FjdGlv bklkCXN0cmVhbV94aWQ7CisJdWludDMyCW47CS8qIGlkIG9mIGFwcGx5IGJhY2tncm91bmQgd29y a2VyICovCit9IFBhcmFsbGVsU3RhdGU7CisKKy8qCisgKiBTdGF0ZXMgZm9yIGFwcGx5IGJhY2tn cm91bmQgd29ya2VyLgorICovCisjZGVmaW5lIEFQUExZX0JHV09SS0VSX0FUVEFDSEVECSdhJwor I2RlZmluZSBBUFBMWV9CR1dPUktFUl9SRUFEWQkncicKKyNkZWZpbmUJQVBQTFlfQkdXT1JLRVJf QlVTWQkJJ2InCisjZGVmaW5lIEFQUExZX0JHV09SS0VSX0ZJTklTSEVECSdmJworI2RlZmluZQlB UFBMWV9CR1dPUktFUl9FWElUCQknZScKKworLyoKKyAqIFN0cnVjdCBmb3IgbWFpbnRhaW5pbmcg YSBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlci4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgV29ya2VyU3Rh dGUKK3sKKwlzaG1fbXFfaGFuZGxlCQkJKm1xX2hhbmRsZTsKKwlkc21fc2VnbWVudAkJCQkqZHNt X3NlZzsKKwlQYXJhbGxlbFN0YXRlIHZvbGF0aWxlCSpwc3RhdGU7Cit9IFdvcmtlclN0YXRlOwor Cit0eXBlZGVmIHN0cnVjdCBXb3JrZXJFbnRyeQoreworCVRyYW5zYWN0aW9uSWQJeGlkOworCVdv cmtlclN0YXRlCSAgICp3c3RhdGU7Cit9IFdvcmtlckVudHJ5OworCisvKiBBcHBseSBiYWNrZ3Jv dW5kIHdvcmtlcnMgaGFzaCB0YWJsZSAoaW5pdGlhbGl6ZWQgb24gZmlyc3QgdXNlKSAqLworc3Rh dGljIEhUQUIgKkFwcGx5V29ya2Vyc0hhc2ggPSBOVUxMOworc3RhdGljIExpc3QgKkFwcGx5V29y a2Vyc0lkbGVMaXN0ID0gTklMOworc3RhdGljIExpc3QgKkFwcGx5V29ya2Vyc0xpc3QgPSBOSUw7 CisKKy8qIEZpZWxkcyB2YWxpZCBvbmx5IGZvciBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlcnMgKi8K K3ZvbGF0aWxlIFBhcmFsbGVsU3RhdGUgKk15UGFyYWxsZWxTdGF0ZSA9IE5VTEw7CitzdGF0aWMg TGlzdCAqc3VieGFjdGxpc3QgPSBOSUw7CisKKy8qIFRoZSBudW1iZXIgb2YgY2hhbmdlcyBkdXJp bmcgb25lIHN0cmVhbWluZyBibG9jayAqLworc3RhdGljIHVpbnQzMiBuY2hhbmdlcyA9IDA7CisK Ky8qIFdvcmtlciBzZXR1cCBhbmQgaW50ZXJhY3Rpb25zICovCitzdGF0aWMgV29ya2VyU3RhdGUg KmFwcGx5X2Jnd29ya2VyX3NldHVwKHZvaWQpOworc3RhdGljIFdvcmtlclN0YXRlICpmaW5kX29y X3N0YXJ0X2FwcGx5X2Jnd29ya2VyKFRyYW5zYWN0aW9uSWQgeGlkLAorCQkJCQkJCQkJCQkJIGJv b2wgc3RhcnQpOworc3RhdGljIHZvaWQgYXBwbHlfYmd3b3JrZXJfc2V0dXBfZHNtKFdvcmtlclN0 YXRlICp3c3RhdGUpOworc3RhdGljIHZvaWQgYXBwbHlfYmd3b3JrZXJfd2FpdF9mb3IoV29ya2Vy U3RhdGUgKndzdGF0ZSwKKwkJCQkJCQkJCWNoYXIgd2FpdF9mb3Jfc3RhdGUpOworc3RhdGljIHZv aWQgYXBwbHlfYmd3b3JrZXJfc2VuZF9kYXRhKFdvcmtlclN0YXRlICp3c3RhdGUsIFNpemUgbmJ5 dGVzLAorCQkJCQkJCQkJIGNvbnN0IHZvaWQgKmRhdGEpOworc3RhdGljIHZvaWQgYXBwbHlfYmd3 b3JrZXJfZnJlZShXb3JrZXJTdGF0ZSAqd3N0YXRlKTsKK3N0YXRpYyB2b2lkIGFwcGx5X2Jnd29y a2VyX2NoZWNrX3N0YXR1cyh2b2lkKTsKK3N0YXRpYyB2b2lkIGFwcGx5X2Jnd29ya2VyX3NldF9z dGF0ZShjaGFyIHN0YXRlKTsKKworI2RlZmluZSBhbV9hcHBseV9iZ3dvcmtlcigpIChNeUxvZ2lj YWxSZXBXb3JrZXItPnN1YndvcmtlcikKKyNkZWZpbmUgYXBwbHlpbmdfY2hhbmdlc19pbl9iZ3dv cmtlcigpIChpbl9zdHJlYW1lZF90cmFuc2FjdGlvbiAmJiBzdHJlYW1fYXBwbHlfd29ya2VyICE9 IE5VTEwpCisKIHR5cGVkZWYgc3RydWN0IEZsdXNoUG9zaXRpb24KIHsKIAlkbGlzdF9ub2RlCW5v ZGU7CkBAIC0yNjAsMTggKzM1MCwyMCBAQCBzdGF0aWMgWExvZ1JlY1B0ciByZW1vdGVfZmluYWxf bHNuID0gSW52YWxpZFhMb2dSZWNQdHI7CiBzdGF0aWMgYm9vbCBpbl9zdHJlYW1lZF90cmFuc2Fj dGlvbiA9IGZhbHNlOwogCiBzdGF0aWMgVHJhbnNhY3Rpb25JZCBzdHJlYW1feGlkID0gSW52YWxp ZFRyYW5zYWN0aW9uSWQ7CitzdGF0aWMgV29ya2VyU3RhdGUgKnN0cmVhbV9hcHBseV93b3JrZXIg PSBOVUxMOwogCiAvKgogICogV2UgZW5hYmxlIHNraXBwaW5nIGFsbCBkYXRhIG1vZGlmaWNhdGlv biBjaGFuZ2VzIChJTlNFUlQsIFVQREFURSwgZXRjLikgZm9yCiAgKiB0aGUgc3Vic2NyaXB0aW9u IGlmIHRoZSByZW1vdGUgdHJhbnNhY3Rpb24ncyBmaW5pc2ggTFNOIG1hdGNoZXMgdGhlIHN1YnNr aXBsc24uCiAgKiBPbmNlIHdlIHN0YXJ0IHNraXBwaW5nIGNoYW5nZXMsIHdlIGRvbid0IHN0b3Ag aXQgdW50aWwgd2Ugc2tpcCBhbGwgY2hhbmdlcyBvZgogICogdGhlIHRyYW5zYWN0aW9uIGV2ZW4g aWYgcGdfc3Vic2NyaXB0aW9uIGlzIHVwZGF0ZWQgYW5kIE15U3Vic2NyaXB0aW9uLT5za2lwbHNu Ci0gKiBnZXRzIGNoYW5nZWQgb3IgcmVzZXQgZHVyaW5nIHRoYXQuIEFsc28sIGluIHN0cmVhbWlu ZyB0cmFuc2FjdGlvbiBjYXNlcywgd2UKLSAqIGRvbid0IHNraXAgcmVjZWl2aW5nIGFuZCBzcG9v bGluZyB0aGUgY2hhbmdlcyBzaW5jZSB3ZSBkZWNpZGUgd2hldGhlciBvciBub3QKKyAqIGdldHMg Y2hhbmdlZCBvciByZXNldCBkdXJpbmcgdGhhdC4gQWxzbywgaW4gc3RyZWFtaW5nIHRyYW5zYWN0 aW9uIGNhc2VzIChzdHJlYW1pbmcgPSBvbiksCisgKiB3ZSBkb24ndCBza2lwIHJlY2VpdmluZyBh bmQgc3Bvb2xpbmcgdGhlIGNoYW5nZXMgc2luY2Ugd2UgZGVjaWRlIHdoZXRoZXIgb3Igbm90CiAg KiB0byBza2lwIGFwcGx5aW5nIHRoZSBjaGFuZ2VzIHdoZW4gc3RhcnRpbmcgdG8gYXBwbHkgY2hh bmdlcy4gVGhlIHN1YnNraXBsc24gaXMKICAqIGNsZWFyZWQgYWZ0ZXIgc3VjY2Vzc2Z1bGx5IHNr aXBwaW5nIHRoZSB0cmFuc2FjdGlvbiBvciBhcHBseWluZyBub24tZW1wdHkKICAqIHRyYW5zYWN0 aW9uLiBUaGUgbGF0dGVyIHByZXZlbnRzIHRoZSBtaXN0YWtlbmx5IHNwZWNpZmllZCBzdWJza2lw bHNuIGZyb20KLSAqIGJlaW5nIGxlZnQuCisgKiBiZWluZyBsZWZ0LiBOb3RlIHRoYXQgd2UgY2Fu bm90IHNraXAgdGhlIHN0cmVhbWluZyB0cmFuc2FjdGlvbiBpbiBhcHBseSBtb2RlLAorICogYmVj YXVzZSB3ZSBjYW5ub3QgZ2V0IHRoZSBmaW5pc2ggTFNOIGJlZm9yZSBhcHBseWluZyB0aGUgY2hh bmdlcy4KICAqLwogc3RhdGljIFhMb2dSZWNQdHIgc2tpcF94YWN0X2ZpbmlzaF9sc24gPSBJbnZh bGlkWExvZ1JlY1B0cjsKICNkZWZpbmUgaXNfc2tpcHBpbmdfY2hhbmdlcygpICh1bmxpa2VseSgh WExvZ1JlY1B0cklzSW52YWxpZChza2lwX3hhY3RfZmluaXNoX2xzbikpKQpAQCAtNDI2LDQzICs1 MTgsMTAzIEBAIGVuZF9yZXBsaWNhdGlvbl9zdGVwKHZvaWQpCiB9CiAKIC8qCi0gKiBIYW5kbGUg c3RyZWFtZWQgdHJhbnNhY3Rpb25zLgorICogSGFuZGxlIHN0cmVhbWVkIHRyYW5zYWN0aW9ucyBm b3IgYm90aCBtYWluIGFwcGx5IHdvcmtlciBhbmQgYXBwbHkgYmFja2dyb3VuZAorICogd29ya2Vy LgogICoKLSAqIElmIGluIHN0cmVhbWluZyBtb2RlIChyZWNlaXZpbmcgYSBibG9jayBvZiBzdHJl YW1lZCB0cmFuc2FjdGlvbiksIHdlCi0gKiBzaW1wbHkgcmVkaXJlY3QgaXQgdG8gYSBmaWxlIGZv ciB0aGUgcHJvcGVyIHRvcGxldmVsIHRyYW5zYWN0aW9uLgorICogRm9yIHRoZSBtYWluIGFwcGx5 IHdvcmtlciwgaWYgaW4gc3RyZWFtaW5nIG1vZGUgKHJlY2VpdmluZyBhIGJsb2NrIG9mCisgKiBz dHJlYW1lZCB0cmFuc2FjdGlvbiksIHdlIHNlbmQgdGhlIGRhdGEgdG8gdGhlIGFwcGx5IGJhY2tn cm91bmQgd29ya2VyLgorICoKKyAqIEZvciB0aGUgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIsIGRl ZmluZSBhIHNhdmVwb2ludCBpZiBuZXcgc3VidHJhbnNhY3Rpb24KKyAqIHdhcyBzdGFydGVkLgog ICoKICAqIFJldHVybnMgdHJ1ZSBmb3Igc3RyZWFtZWQgdHJhbnNhY3Rpb25zLCBmYWxzZSBvdGhl cndpc2UgKHJlZ3VsYXIgbW9kZSkuCiAgKi8KIHN0YXRpYyBib29sCiBoYW5kbGVfc3RyZWFtZWRf dHJhbnNhY3Rpb24oTG9naWNhbFJlcE1zZ1R5cGUgYWN0aW9uLCBTdHJpbmdJbmZvIHMpCiB7Ci0J VHJhbnNhY3Rpb25JZCB4aWQ7CisJVHJhbnNhY3Rpb25JZCBjdXJyZW50X3hpZCA9IEludmFsaWRU cmFuc2FjdGlvbklkOwogCi0JLyogbm90IGluIHN0cmVhbWluZyBtb2RlICovCi0JaWYgKCFpbl9z dHJlYW1lZF90cmFuc2FjdGlvbikKKwkvKgorCSAqIFJldHVybiBpZiB3ZSBhcmUgbm90IGluIHN0 cmVhbWluZyBtb2RlIGFuZCBhcmUgbm90IGluIGEgYXBwbHkgYmFja2dyb3VuZAorCSAqIHdvcmtl ci4KKwkgKi8KKwlpZiAoIWluX3N0cmVhbWVkX3RyYW5zYWN0aW9uICYmICFhbV9hcHBseV9iZ3dv cmtlcigpKQogCQlyZXR1cm4gZmFsc2U7CiAKLQlBc3NlcnQoc3RyZWFtX2ZkICE9IE5VTEwpOwog CUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZChzdHJlYW1feGlkKSk7CiAKIAkvKgogCSAqIFdl IHNob3VsZCBoYXZlIHJlY2VpdmVkIFhJRCBvZiB0aGUgc3VieGFjdCBhcyB0aGUgZmlyc3QgcGFy dCBvZiB0aGUKIAkgKiBtZXNzYWdlLCBzbyBleHRyYWN0IGl0LgogCSAqLwotCXhpZCA9IHBxX2dl dG1zZ2ludChzLCA0KTsKKwljdXJyZW50X3hpZCA9IHBxX2dldG1zZ2ludChzLCA0KTsKIAotCWlm ICghVHJhbnNhY3Rpb25JZElzVmFsaWQoeGlkKSkKKwlpZiAoIVRyYW5zYWN0aW9uSWRJc1ZhbGlk KGN1cnJlbnRfeGlkKSkKIAkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJyY29kZShFUlJDT0RFX1BS T1RPQ09MX1ZJT0xBVElPTiksCiAJCQkJIGVycm1zZ19pbnRlcm5hbCgiaW52YWxpZCB0cmFuc2Fj dGlvbiBJRCBpbiBzdHJlYW1lZCByZXBsaWNhdGlvbiB0cmFuc2FjdGlvbiIpKSk7CiAKLQkvKiBB ZGQgdGhlIG5ldyBzdWJ4YWN0IHRvIHRoZSBhcnJheSAodW5sZXNzIGFscmVhZHkgdGhlcmUpLiAq LwotCXN1YnhhY3RfaW5mb19hZGQoeGlkKTsKKwlpZiAoYW1fYXBwbHlfYmd3b3JrZXIoKSkKKwl7 CisJCS8qCisJCSAqIEluc2lkZSBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlciB3ZSBjYW4gZmlndXJl IG91dCB0aGF0IG5ldworCQkgKiBzdWJ0cmFuc2FjdGlvbiB3YXMgc3RhcnRlZCBpZiBuZXcgY2hh bmdlIGFycml2ZWQgd2l0aCBkaWZmZXJlbnQgeGlkLgorCQkgKiBJbiB0aGF0IGNhc2Ugd2UgY2Fu IGRlZmluZSBuYW1lZCBzYXZlcG9pbnQsIHNvIHRoYXQgd2Ugd2VyZSBhYmxlIHRvCisJCSAqIGNv bW1pdC9yb2xsYmFjayBpdCBzZXBhcmF0ZWx5IGxhdGVyLgorCQkgKgorCQkgKiBTcGVjaWFsIGNh c2UgaXMgaWYgdGhlIGZpcnN0IGNoYW5nZSBjb21lcyBmcm9tIHN1YnRyYW5zYWN0aW9uLCB0aGVu CisJCSAqIHdlIGNoZWNrIHRoYXQgY3VycmVudF94aWQgZGlmZmVycyBmcm9tIHN0cmVhbV94aWQu CisJCSAqLworCQlpZiAoY3VycmVudF94aWQgIT0gc3RyZWFtX3hpZCAmJgorCQkJIWxpc3RfbWVt YmVyX2ludChzdWJ4YWN0bGlzdCwgKGludCkgY3VycmVudF94aWQpKQorCQl7CisJCQlNZW1vcnlD b250ZXh0CW9sZGN0eDsKKwkJCWNoYXIJCQlzcG5hbWVbTUFYUEdQQVRIXTsKKworCQkJc25wcmlu dGYoc3BuYW1lLCBNQVhQR1BBVEgsICJzYXZlcG9pbnRfZm9yX3hpZF8ldSIsIGN1cnJlbnRfeGlk KTsKKworCQkJZWxvZyhMT0csICJbQXBwbHkgQkdXICMldV0gZGVmaW5pbmcgc2F2ZXBvaW50ICVz IiwKKwkJCQkgTXlQYXJhbGxlbFN0YXRlLT5uLCBzcG5hbWUpOworCisJCQlEZWZpbmVTYXZlcG9p bnQoc3BuYW1lKTsKKwkJCUNvbW1pdFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJCQlvbGRjdHgg PSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oQXBwbHlDb250ZXh0KTsKKwkJCXN1YnhhY3RsaXN0ID0g bGFwcGVuZF9pbnQoc3VieGFjdGxpc3QsIChpbnQpIGN1cnJlbnRfeGlkKTsKKwkJCU1lbW9yeUNv bnRleHRTd2l0Y2hUbyhvbGRjdHgpOworCQl9CisJfQorCWVsc2UgaWYgKGFwcGx5aW5nX2NoYW5n ZXNfaW5fYmd3b3JrZXIoKSkKKwl7CisJCS8qCisJCSAqIElmIHdlIGRlY2lkZWQgdG8gYXBwbHkg dGhlIGNoYW5nZXMgb2YgdGhpcyB0cmFuc2FjdGlvbiBpbiBhIGFwcGx5CisJCSAqIGJhY2tncm91 bmQgd29ya2VyLCBwYXNzIHRoZSBkYXRhIHRvIHRoZSB3b3JrZXIuCisJCSAqLworCQlhcHBseV9i Z3dvcmtlcl9zZW5kX2RhdGEoc3RyZWFtX2FwcGx5X3dvcmtlciwgcy0+bGVuLCBzLT5kYXRhKTsK KwkJbmNoYW5nZXMgKz0gMTsKKworCQkvKgorCQkgKiBYWFggVGhlIHB1Ymxpc2hlciBzaWRlIGRv ZXNuJ3QgYWx3YXlzIHNlbmQgcmVsYXRpb24gdXBkYXRlIG1lc3NhZ2UKKwkJICogYWZ0ZXIgdGhl IHN0cmVhbWluZyB0cmFuc2FjdGlvbiwgc28gdXBkYXRlIHRoZSByZWxhdGlvbiBpbiBtYWluCisJ CSAqIGFwcGx5IHdvcmtlciBoZXJlLgorCQkgKi8KKwkJaWYgKGFjdGlvbiA9PSBMT0dJQ0FMX1JF UF9NU0dfUkVMQVRJT04pCisJCXsKKwkJCUxvZ2ljYWxSZXBSZWxhdGlvbiAqcmVsID0gbG9naWNh bHJlcF9yZWFkX3JlbChzKTsKKwkJCWxvZ2ljYWxyZXBfcmVsbWFwX3VwZGF0ZShyZWwpOworCQl9 CisKKwl9CisJZWxzZQorCXsKKwkJLyogQWRkIHRoZSBuZXcgc3VieGFjdCB0byB0aGUgYXJyYXkg KHVubGVzcyBhbHJlYWR5IHRoZXJlKS4gKi8KKwkJc3VieGFjdF9pbmZvX2FkZChjdXJyZW50X3hp ZCk7CiAKLQkvKiB3cml0ZSB0aGUgY2hhbmdlIHRvIHRoZSBjdXJyZW50IGZpbGUgKi8KLQlzdHJl YW1fd3JpdGVfY2hhbmdlKGFjdGlvbiwgcyk7CisJCS8qIHdyaXRlIHRoZSBjaGFuZ2UgdG8gdGhl IGN1cnJlbnQgZmlsZSAqLworCQlzdHJlYW1fd3JpdGVfY2hhbmdlKGFjdGlvbiwgcyk7CisJfQog Ci0JcmV0dXJuIHRydWU7CisJcmV0dXJuICFhbV9hcHBseV9iZ3dvcmtlcigpOwogfQogCiAvKgpA QCAtODQ0LDYgKzk5Niw5IEBAIGFwcGx5X2hhbmRsZV9jb21taXQoU3RyaW5nSW5mbyBzKQogCiAJ YXBwbHlfaGFuZGxlX2NvbW1pdF9pbnRlcm5hbCgmY29tbWl0X2RhdGEpOwogCisJLyogQ2hlY2sg dGhlIHN0YXR1cyBvZiBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlciBpZiBhbnkuICovCisJYXBwbHlf Ymd3b3JrZXJfY2hlY2tfc3RhdHVzKCk7CisKIAkvKiBQcm9jZXNzIGFueSB0YWJsZXMgdGhhdCBh cmUgYmVpbmcgc3luY2hyb25pemVkIGluIHBhcmFsbGVsLiAqLwogCXByb2Nlc3Nfc3luY2luZ190 YWJsZXMoY29tbWl0X2RhdGEuZW5kX2xzbik7CiAKQEAgLTg5OCw3ICsxMDUzLDkgQEAgYXBwbHlf aGFuZGxlX3ByZXBhcmVfaW50ZXJuYWwoTG9naWNhbFJlcFByZXBhcmVkVHhuRGF0YSAqcHJlcGFy ZV9kYXRhKQogCSAqIEJlZ2luVHJhbnNhY3Rpb25CbG9jayBpcyBuZWNlc3NhcnkgdG8gYmFsYW5j ZSB0aGUgRW5kVHJhbnNhY3Rpb25CbG9jawogCSAqIGNhbGxlZCB3aXRoaW4gdGhlIFByZXBhcmVU cmFuc2FjdGlvbkJsb2NrIGJlbG93LgogCSAqLwotCUJlZ2luVHJhbnNhY3Rpb25CbG9jaygpOwor CWlmICghSXNUcmFuc2FjdGlvbkJsb2NrKCkpCisJCUJlZ2luVHJhbnNhY3Rpb25CbG9jaygpOwor CiAJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7IC8qIENvbXBsZXRlcyB0aGUgcHJlY2VkaW5n IEJlZ2luIGNvbW1hbmQuICovCiAKIAkvKgpAQCAtOTUwLDYgKzExMDcsOSBAQCBhcHBseV9oYW5k bGVfcHJlcGFyZShTdHJpbmdJbmZvIHMpCiAKIAlpbl9yZW1vdGVfdHJhbnNhY3Rpb24gPSBmYWxz ZTsKIAorCS8qIENoZWNrIHRoZSBzdGF0dXMgb2YgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIgaWYg YW55LiAqLworCWFwcGx5X2Jnd29ya2VyX2NoZWNrX3N0YXR1cygpOworCiAJLyogUHJvY2VzcyBh bnkgdGFibGVzIHRoYXQgYXJlIGJlaW5nIHN5bmNocm9uaXplZCBpbiBwYXJhbGxlbC4gKi8KIAlw cm9jZXNzX3N5bmNpbmdfdGFibGVzKHByZXBhcmVfZGF0YS5lbmRfbHNuKTsKIApAQCAtOTc0LDMy ICsxMTM0LDU3IEBAIGFwcGx5X2hhbmRsZV9jb21taXRfcHJlcGFyZWQoU3RyaW5nSW5mbyBzKQog ewogCUxvZ2ljYWxSZXBDb21taXRQcmVwYXJlZFR4bkRhdGEgcHJlcGFyZV9kYXRhOwogCWNoYXIJ CWdpZFtHSURTSVpFXTsKKwlXb3JrZXJTdGF0ZSAqd3N0YXRlOwogCiAJbG9naWNhbHJlcF9yZWFk X2NvbW1pdF9wcmVwYXJlZChzLCAmcHJlcGFyZV9kYXRhKTsKIAlzZXRfYXBwbHlfZXJyb3JfY29u dGV4dF94YWN0KHByZXBhcmVfZGF0YS54aWQsIHByZXBhcmVfZGF0YS5jb21taXRfbHNuKTsKIAot CS8qIENvbXB1dGUgR0lEIGZvciB0d29fcGhhc2UgdHJhbnNhY3Rpb25zLiAqLwotCVR3b1BoYXNl VHJhbnNhY3Rpb25HaWQoTXlTdWJzY3JpcHRpb24tPm9pZCwgcHJlcGFyZV9kYXRhLnhpZCwKLQkJ CQkJCSAgIGdpZCwgc2l6ZW9mKGdpZCkpOworCS8qIENoZWNrIGlmIHdlIGhhdmUgcHJlcGFyZWQg dHJhbnNhY3Rpb24gaW4gYW5vdGhlciBiZ3dvcmtlciAqLworCXdzdGF0ZSA9IGZpbmRfb3Jfc3Rh cnRfYXBwbHlfYmd3b3JrZXIocHJlcGFyZV9kYXRhLnhpZCwgZmFsc2UpOwogCi0JLyogVGhlcmUg aXMgbm8gdHJhbnNhY3Rpb24gd2hlbiBDT01NSVQgUFJFUEFSRUQgaXMgY2FsbGVkICovCi0JYmVn aW5fcmVwbGljYXRpb25fc3RlcCgpOworCWlmICh3c3RhdGUpCisJeworCQllbG9nKERFQlVHMSwg InJlY2VpdmVkIGNvbW1pdCBmb3Igc3RyZWFtZWQgdHJhbnNhY3Rpb24gJXUiLCBwcmVwYXJlX2Rh dGEueGlkKTsKIAotCS8qCi0JICogVXBkYXRlIG9yaWdpbiBzdGF0ZSBzbyB3ZSBjYW4gcmVzdGFy dCBzdHJlYW1pbmcgZnJvbSBjb3JyZWN0IHBvc2l0aW9uCi0JICogaW4gY2FzZSBvZiBjcmFzaC4K LQkgKi8KLQlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luX2xzbiA9IHByZXBhcmVfZGF0YS5lbmRf bHNuOwotCXJlcGxvcmlnaW5fc2Vzc2lvbl9vcmlnaW5fdGltZXN0YW1wID0gcHJlcGFyZV9kYXRh LmNvbW1pdF90aW1lOworCQkvKiBTZW5kIGNvbW1pdCBtZXNzYWdlICovCisJCWFwcGx5X2Jnd29y a2VyX3NlbmRfZGF0YSh3c3RhdGUsIHMtPmxlbiwgcy0+ZGF0YSk7CisKKwkJLyogV2FpdCBmb3Ig Ymd3b3JrZXIgdG8gZmluaXNoICovCisJCWFwcGx5X2Jnd29ya2VyX3dhaXRfZm9yKHdzdGF0ZSwg QVBQTFlfQkdXT1JLRVJfRklOSVNIRUQpOworCisJCWFwcGx5X2Jnd29ya2VyX2ZyZWUod3N0YXRl KTsKKwl9CisJZWxzZQorCXsKKwkJLyogQ29tcHV0ZSBHSUQgZm9yIHR3b19waGFzZSB0cmFuc2Fj dGlvbnMuICovCisJCVR3b1BoYXNlVHJhbnNhY3Rpb25HaWQoTXlTdWJzY3JpcHRpb24tPm9pZCwg cHJlcGFyZV9kYXRhLnhpZCwKKwkJCQkJCQkgICBnaWQsIHNpemVvZihnaWQpKTsKKworCQkvKiBU aGVyZSBpcyBubyB0cmFuc2FjdGlvbiB3aGVuIENPTU1JVCBQUkVQQVJFRCBpcyBjYWxsZWQgKi8K KwkJYmVnaW5fcmVwbGljYXRpb25fc3RlcCgpOworCisJCS8qCisJCSAqIFVwZGF0ZSBvcmlnaW4g c3RhdGUgc28gd2UgY2FuIHJlc3RhcnQgc3RyZWFtaW5nIGZyb20gY29ycmVjdCBwb3NpdGlvbgor CQkgKiBpbiBjYXNlIG9mIGNyYXNoLgorCQkgKi8KKwkJcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdp bl9sc24gPSBwcmVwYXJlX2RhdGEuZW5kX2xzbjsKKwkJcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdp bl90aW1lc3RhbXAgPSBwcmVwYXJlX2RhdGEuY29tbWl0X3RpbWU7CisKKwkJRmluaXNoUHJlcGFy ZWRUcmFuc2FjdGlvbihnaWQsIHRydWUpOworCQllbmRfcmVwbGljYXRpb25fc3RlcCgpOworCQlD b21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCQlhcHBseV9iZ3dvcmtlcl9zZXRfc3RhdGUo QVBQTFlfQkdXT1JLRVJfRklOSVNIRUQpOworCX0KIAotCUZpbmlzaFByZXBhcmVkVHJhbnNhY3Rp b24oZ2lkLCB0cnVlKTsKLQllbmRfcmVwbGljYXRpb25fc3RlcCgpOwotCUNvbW1pdFRyYW5zYWN0 aW9uQ29tbWFuZCgpOwogCXBnc3RhdF9yZXBvcnRfc3RhdChmYWxzZSk7CiAKIAlzdG9yZV9mbHVz aF9wb3NpdGlvbihwcmVwYXJlX2RhdGEuZW5kX2xzbik7CiAJaW5fcmVtb3RlX3RyYW5zYWN0aW9u ID0gZmFsc2U7CiAKKwkvKiBDaGVjayB0aGUgc3RhdHVzIG9mIGFwcGx5IGJhY2tncm91bmQgd29y a2VyIGlmIGFueS4gKi8KKwlhcHBseV9iZ3dvcmtlcl9jaGVja19zdGF0dXMoKTsKKwogCS8qIFBy b2Nlc3MgYW55IHRhYmxlcyB0aGF0IGFyZSBiZWluZyBzeW5jaHJvbml6ZWQgaW4gcGFyYWxsZWwu ICovCiAJcHJvY2Vzc19zeW5jaW5nX3RhYmxlcyhwcmVwYXJlX2RhdGEuZW5kX2xzbik7CiAKQEAg LTEwMTcsMzcgKzEyMDIsNTcgQEAgYXBwbHlfaGFuZGxlX3JvbGxiYWNrX3ByZXBhcmVkKFN0cmlu Z0luZm8gcykKIHsKIAlMb2dpY2FsUmVwUm9sbGJhY2tQcmVwYXJlZFR4bkRhdGEgcm9sbGJhY2tf ZGF0YTsKIAljaGFyCQlnaWRbR0lEU0laRV07CisJV29ya2VyU3RhdGUgKndzdGF0ZTsKIAogCWxv Z2ljYWxyZXBfcmVhZF9yb2xsYmFja19wcmVwYXJlZChzLCAmcm9sbGJhY2tfZGF0YSk7CiAJc2V0 X2FwcGx5X2Vycm9yX2NvbnRleHRfeGFjdChyb2xsYmFja19kYXRhLnhpZCwgcm9sbGJhY2tfZGF0 YS5yb2xsYmFja19lbmRfbHNuKTsKIAotCS8qIENvbXB1dGUgR0lEIGZvciB0d29fcGhhc2UgdHJh bnNhY3Rpb25zLiAqLwotCVR3b1BoYXNlVHJhbnNhY3Rpb25HaWQoTXlTdWJzY3JpcHRpb24tPm9p ZCwgcm9sbGJhY2tfZGF0YS54aWQsCi0JCQkJCQkgICBnaWQsIHNpemVvZihnaWQpKTsKKwkvKiBD aGVjayBpZiB3ZSBhcmUgcHJvY2Vzc2luZyB0aGUgcHJlcGFyZWQgdHJhbnNhY3Rpb24gaW4gYSBi Z3dvcmtlciAqLworCXdzdGF0ZSA9IGZpbmRfb3Jfc3RhcnRfYXBwbHlfYmd3b3JrZXIocm9sbGJh Y2tfZGF0YS54aWQsIGZhbHNlKTsKIAotCS8qCi0JICogSXQgaXMgcG9zc2libGUgdGhhdCB3ZSBo YXZlbid0IHJlY2VpdmVkIHByZXBhcmUgYmVjYXVzZSBpdCBvY2N1cnJlZAotCSAqIGJlZm9yZSB3 YWxzZW5kZXIgcmVhY2hlZCBhIGNvbnNpc3RlbnQgcG9pbnQgb3IgdGhlIHR3b19waGFzZSB3YXMg c3RpbGwKLQkgKiBub3QgZW5hYmxlZCBieSB0aGF0IHRpbWUsIHNvIGluIHN1Y2ggY2FzZXMsIHdl IG5lZWQgdG8gc2tpcCByb2xsYmFjawotCSAqIHByZXBhcmVkLgotCSAqLwotCWlmIChMb29rdXBH WGFjdChnaWQsIHJvbGxiYWNrX2RhdGEucHJlcGFyZV9lbmRfbHNuLAotCQkJCQlyb2xsYmFja19k YXRhLnByZXBhcmVfdGltZSkpCisJaWYgKHdzdGF0ZSkKKwl7CisJCWFwcGx5X2Jnd29ya2VyX3Nl bmRfZGF0YSh3c3RhdGUsIHMtPmxlbiwgcy0+ZGF0YSk7CisKKwkJLyogV2FpdCBmb3IgYmd3b3Jr ZXIgdG8gZmluaXNoICovCisJCWFwcGx5X2Jnd29ya2VyX3dhaXRfZm9yKHdzdGF0ZSwgQVBQTFlf QkdXT1JLRVJfRklOSVNIRUQpOworCisJCWVsb2coTE9HLCAicm9sbGJhY2sgcHJlcGFyZWQgc3Ry ZWFtaW5nIG9mIHhpZCAldSIsIHJvbGxiYWNrX2RhdGEueGlkKTsKKworCQlhcHBseV9iZ3dvcmtl cl9mcmVlKHdzdGF0ZSk7CisJfQorCWVsc2UKIAl7CisJCS8qIENvbXB1dGUgR0lEIGZvciB0d29f cGhhc2UgdHJhbnNhY3Rpb25zLiAqLworCQlUd29QaGFzZVRyYW5zYWN0aW9uR2lkKE15U3Vic2Ny aXB0aW9uLT5vaWQsIHJvbGxiYWNrX2RhdGEueGlkLAorCQkJCQkJCSAgIGdpZCwgc2l6ZW9mKGdp ZCkpOworCiAJCS8qCi0JCSAqIFVwZGF0ZSBvcmlnaW4gc3RhdGUgc28gd2UgY2FuIHJlc3RhcnQg c3RyZWFtaW5nIGZyb20gY29ycmVjdAotCQkgKiBwb3NpdGlvbiBpbiBjYXNlIG9mIGNyYXNoLgor CQkgKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHdlIGhhdmVuJ3QgcmVjZWl2ZWQgcHJlcGFyZSBiZWNh dXNlIGl0IG9jY3VycmVkCisJCSAqIGJlZm9yZSB3YWxzZW5kZXIgcmVhY2hlZCBhIGNvbnNpc3Rl bnQgcG9pbnQgb3IgdGhlIHR3b19waGFzZSB3YXMgc3RpbGwKKwkJICogbm90IGVuYWJsZWQgYnkg dGhhdCB0aW1lLCBzbyBpbiBzdWNoIGNhc2VzLCB3ZSBuZWVkIHRvIHNraXAgcm9sbGJhY2sKKwkJ ICogcHJlcGFyZWQuCiAJCSAqLwotCQlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luX2xzbiA9IHJv bGxiYWNrX2RhdGEucm9sbGJhY2tfZW5kX2xzbjsKLQkJcmVwbG9yaWdpbl9zZXNzaW9uX29yaWdp bl90aW1lc3RhbXAgPSByb2xsYmFja19kYXRhLnJvbGxiYWNrX3RpbWU7CisJCWlmIChMb29rdXBH WGFjdChnaWQsIHJvbGxiYWNrX2RhdGEucHJlcGFyZV9lbmRfbHNuLAorCQkJCQkJcm9sbGJhY2tf ZGF0YS5wcmVwYXJlX3RpbWUpKQorCQl7CisJCQkvKgorCQkJICogVXBkYXRlIG9yaWdpbiBzdGF0 ZSBzbyB3ZSBjYW4gcmVzdGFydCBzdHJlYW1pbmcgZnJvbSBjb3JyZWN0CisJCQkgKiBwb3NpdGlv biBpbiBjYXNlIG9mIGNyYXNoLgorCQkJICovCisJCQlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2lu X2xzbiA9IHJvbGxiYWNrX2RhdGEucm9sbGJhY2tfZW5kX2xzbjsKKwkJCXJlcGxvcmlnaW5fc2Vz c2lvbl9vcmlnaW5fdGltZXN0YW1wID0gcm9sbGJhY2tfZGF0YS5yb2xsYmFja190aW1lOwogCi0J CS8qIFRoZXJlIGlzIG5vIHRyYW5zYWN0aW9uIHdoZW4gQUJPUlQvUk9MTEJBQ0sgUFJFUEFSRUQg aXMgY2FsbGVkICovCi0JCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKLQkJRmluaXNoUHJlcGFy ZWRUcmFuc2FjdGlvbihnaWQsIGZhbHNlKTsKLQkJZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsKLQkJ Q29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJCQkvKiBUaGVyZSBpcyBubyB0cmFuc2FjdGlv biB3aGVuIEFCT1JUL1JPTExCQUNLIFBSRVBBUkVEIGlzIGNhbGxlZCAqLworCQkJYmVnaW5fcmVw bGljYXRpb25fc3RlcCgpOworCQkJRmluaXNoUHJlcGFyZWRUcmFuc2FjdGlvbihnaWQsIGZhbHNl KTsKKwkJCWVuZF9yZXBsaWNhdGlvbl9zdGVwKCk7CisJCQlDb21taXRUcmFuc2FjdGlvbkNvbW1h bmQoKTsKKworCQkJY2xlYXJfc3Vic2NyaXB0aW9uX3NraXBfbHNuKHJvbGxiYWNrX2RhdGEucm9s bGJhY2tfZW5kX2xzbik7CisJCX0KIAotCQljbGVhcl9zdWJzY3JpcHRpb25fc2tpcF9sc24ocm9s bGJhY2tfZGF0YS5yb2xsYmFja19lbmRfbHNuKTsKKwkJYXBwbHlfYmd3b3JrZXJfc2V0X3N0YXRl KEFQUExZX0JHV09SS0VSX0ZJTklTSEVEKTsKIAl9CiAKIAlwZ3N0YXRfcmVwb3J0X3N0YXQoZmFs c2UpOwpAQCAtMTA1NSw2ICsxMjYwLDkgQEAgYXBwbHlfaGFuZGxlX3JvbGxiYWNrX3ByZXBhcmVk KFN0cmluZ0luZm8gcykKIAlzdG9yZV9mbHVzaF9wb3NpdGlvbihyb2xsYmFja19kYXRhLnJvbGxi YWNrX2VuZF9sc24pOwogCWluX3JlbW90ZV90cmFuc2FjdGlvbiA9IGZhbHNlOwogCisJLyogQ2hl Y2sgdGhlIHN0YXR1cyBvZiBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlciBpZiBhbnkuICovCisJYXBw bHlfYmd3b3JrZXJfY2hlY2tfc3RhdHVzKCk7CisKIAkvKiBQcm9jZXNzIGFueSB0YWJsZXMgdGhh dCBhcmUgYmVpbmcgc3luY2hyb25pemVkIGluIHBhcmFsbGVsLiAqLwogCXByb2Nlc3Nfc3luY2lu Z190YWJsZXMocm9sbGJhY2tfZGF0YS5yb2xsYmFja19lbmRfbHNuKTsKIApAQCAtMTA2MywxMSAr MTI3MSwxMzEgQEAgYXBwbHlfaGFuZGxlX3JvbGxiYWNrX3ByZXBhcmVkKFN0cmluZ0luZm8gcykK IH0KIAogLyoKLSAqIEhhbmRsZSBTVFJFQU0gUFJFUEFSRS4KKyAqIExvb2sgdXAgd29ya2VyIGlu c2lkZSBBcHBseVdvcmtlcnNIYXNoIGZvciByZXF1ZXN0ZWQgeGlkLgogICoKLSAqIExvZ2ljIGlz IGluIHR3byBwYXJ0czoKLSAqIDEuIFJlcGxheSBhbGwgdGhlIHNwb29sZWQgb3BlcmF0aW9ucwot ICogMi4gTWFyayB0aGUgdHJhbnNhY3Rpb24gYXMgcHJlcGFyZWQKKyAqIElmIHN0YXJ0IGZsYWcg aXMgdHJ1ZSwgdHJ5IHRvIHN0YXJ0IGEgbmV3IHdvcmtlciBpZiBub3QgZm91bmQgaW4gaGFzaCB0 YWJsZS4KKyAqLworc3RhdGljIFdvcmtlclN0YXRlICoKK2ZpbmRfb3Jfc3RhcnRfYXBwbHlfYmd3 b3JrZXIoVHJhbnNhY3Rpb25JZCB4aWQsIGJvb2wgc3RhcnQpCit7CisJYm9vbCBmb3VuZDsKKwlX b3JrZXJTdGF0ZSAqd3N0YXRlOworCVdvcmtlckVudHJ5ICplbnRyeSA9IE5VTEw7CisKKwlpZiAo IVRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhpZCkpCisJCXJldHVybiBOVUxMOworCisJaWYgKCFzdGFy dCAmJiBBcHBseVdvcmtlcnNIYXNoID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJLyoKKwkg KiBXZSBkb24ndCBzdGFydCBuZXcgYmFja2dyb3VuZCB3b3JrZXIgaWYgd2UgYXJlIG5vdCBpbiBz dHJlYW1pbmcgYXBwbHkKKwkgKiBtb2RlLgorCSAqLworCWlmIChNeVN1YnNjcmlwdGlvbi0+c3Ry ZWFtICE9IFNVQlNUUkVBTV9BUFBMWSkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKgorCSAqIFdlIGRv bid0IHN0YXJ0IG5ldyBiYWNrZ3JvdW5kIHdvcmtlciBpZiB1c2VyIGhhcyBzZXQgc2tpcGxzbiBh cyBpdCdzCisJICogcG9zc2libGUgdGhhdCB1c2VyIHdhbnQgdG8gc2tpcCB0aGUgc3RyZWFtaW5n IHRyYW5zYWN0aW9uLiBGb3Igc3RyZWFtaW5nCisJICogdHJhbnNhY3Rpb24sIHdlIG5lZWQgdG8g c3BpbGwgdGhlIHRyYW5zYWN0aW9uIHRvIGRpc2sgc28gdGhhdCB3ZSBjYW4gZ2V0CisJICogdGhl IGxhc3QgTFNOIG9mIHRoZSB0cmFuc2FjdGlvbiB0byBqdWRnZSB3aGV0aGVyIHRvIHNraXAgYmVm b3JlIHN0YXJ0aW5nCisJICogdG8gYXBwbHkgdGhlIGNoYW5nZS4KKwkgKi8KKwlpZiAoc3RhcnQg JiYgIVhMb2dSZWNQdHJJc0ludmFsaWQoTXlTdWJzY3JpcHRpb24tPnNraXBsc24pKQorCQlyZXR1 cm4gTlVMTDsKKworCS8qCisJICogRm9yIHN0cmVhbWluZyB0cmFuc2FjdGlvbnMgdGhhdCBhcmUg YmVpbmcgYXBwbGllZCBpbiBiZ3dvcmtlciwgd2UgY2Fubm90CisJICogZGVjaWRlIHdoZXRoZXIg dG8gYXBwbHkgdGhlIGNoYW5nZSBmb3IgYSByZWxhdGlvbiB0aGF0IGlzIG5vdCBpbiB0aGUKKwkg KiBSRUFEWSBzdGF0ZSAoc2VlIHNob3VsZF9hcHBseV9jaGFuZ2VzX2Zvcl9yZWwpIGFzIHdlIHdv bid0IGtub3cKKwkgKiByZW1vdGVfZmluYWxfbHNuIGJ5IHRoYXQgdGltZS4gU28sIHdlIGRvbid0 IHN0YXJ0IG5ldyBiZ3dvcmtlciBpbiB0aGlzCisJICogY2FzZS4KKwkgKi8KKwlpZiAoc3RhcnQg JiYgIUFsbFRhYmxlc3luY3NSZWFkeSgpKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIEZpcnN0IHRp bWUgdGhyb3VnaCwgaW5pdGlhbGl6ZSBhcHBseSB3b3JrZXJzIGhhc2h0YWJsZSAqLworCWlmIChB cHBseVdvcmtlcnNIYXNoID09IE5VTEwpCisJeworCQlIQVNIQ1RMCQljdGw7CisKKwkJTWVtU2V0 KCZjdGwsIDAsIHNpemVvZihjdGwpKTsKKwkJY3RsLmtleXNpemUgPSBzaXplb2YoVHJhbnNhY3Rp b25JZCk7CisJCWN0bC5lbnRyeXNpemUgPSBzaXplb2YoV29ya2VyRW50cnkpOworCQljdGwuaGN4 dCA9IEFwcGx5Q29udGV4dDsKKworCQlBcHBseVdvcmtlcnNIYXNoID0gaGFzaF9jcmVhdGUoImxv Z2ljYWwgYXBwbHkgd29ya2VycyBoYXNoIiwgOCwgJmN0bCwKKwkJCQkJCQkJCSAgIEhBU0hfRUxF TSB8IEhBU0hfQkxPQlMgfCBIQVNIX0NPTlRFWFQpOworCX0KKworCS8qCisJICogRmluZCBlbnRy eSBmb3IgcmVxdWVzdGVkIHRyYW5zYWN0aW9uLgorCSAqLworCWVudHJ5ID0gaGFzaF9zZWFyY2go QXBwbHlXb3JrZXJzSGFzaCwgJnhpZCwgc3RhcnQgPyBIQVNIX0VOVEVSIDogSEFTSF9GSU5ELAor CQkJCQkJJmZvdW5kKTsKKwlpZiAoZm91bmQpCisJeworCQllbnRyeS0+d3N0YXRlLT5wc3RhdGUt PnN0YXRlID0gQVBQTFlfQkdXT1JLRVJfQlVTWTsKKwkJcmV0dXJuIGVudHJ5LT53c3RhdGU7CisJ fQorCWVsc2UgaWYgKCFzdGFydCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBJZiB0aGVyZSBpcyBh dCBsZWFzdCBvbmUgd29ya2VyIGluIHRoZSBpZGxlIGxpc3QsIHRoZW4gdGFrZSBvbmUuICovCisJ aWYgKGxpc3RfbGVuZ3RoKEFwcGx5V29ya2Vyc0lkbGVMaXN0KSA+IDApCisJeworCQl3c3RhdGUg PSAoV29ya2VyU3RhdGUgKikgbGxhc3QoQXBwbHlXb3JrZXJzSWRsZUxpc3QpOworCQlBcHBseVdv cmtlcnNJZGxlTGlzdCA9IGxpc3RfZGVsZXRlX2xhc3QoQXBwbHlXb3JrZXJzSWRsZUxpc3QpOwor CX0KKwllbHNlCisJeworCQl3c3RhdGUgPSBhcHBseV9iZ3dvcmtlcl9zZXR1cCgpOworCisJCWlm ICh3c3RhdGUgPT0gTlVMTCkKKwkJeworCQkJLyoKKwkJCSAqIElmIHRoZSBiZ3dvcmtlciBjYW5u b3QgYmUgbGF1bmNoZWQsIHJlbW92ZSBlbnRyeSBpbiBoYXNoIHRhYmxlLgorCQkJICovCisJCQlo YXNoX3NlYXJjaChBcHBseVdvcmtlcnNIYXNoLCAmeGlkLCBIQVNIX1JFTU9WRSwgJmZvdW5kKTsK KwkJCXJldHVybiBOVUxMOworCQl9CisJfQorCisJLyogRmlsbCB1cCB0aGUgaGFzaCBlbnRyeSAq LworCXdzdGF0ZS0+cHN0YXRlLT5zdGF0ZSA9IEFQUExZX0JHV09SS0VSX0JVU1k7CisJd3N0YXRl LT5wc3RhdGUtPnN0cmVhbV94aWQgPSB4aWQ7CisJZW50cnktPndzdGF0ZSA9IHdzdGF0ZTsKKwll bnRyeS0+eGlkID0geGlkOworCisJcmV0dXJuIHdzdGF0ZTsKK30KKworLyoKKyAqIEFkZCB0aGUg d29ya2VyIHRvIHRoZSBmcmVlbGlzdCBhbmQgcmVtb3ZlIHRoZSBlbnRyeSBmcm9tIGhhc2ggdGFi bGUuCisgKi8KK3N0YXRpYyB2b2lkCithcHBseV9iZ3dvcmtlcl9mcmVlKFdvcmtlclN0YXRlICp3 c3RhdGUpCit7CisJYm9vbCBmb3VuZDsKKwlNZW1vcnlDb250ZXh0IG9sZGN0eDsKKwlUcmFuc2Fj dGlvbklkIHhpZCA9IHdzdGF0ZS0+cHN0YXRlLT5zdHJlYW1feGlkOworCisJb2xkY3R4ID0gTWVt b3J5Q29udGV4dFN3aXRjaFRvKEFwcGx5Q29udGV4dCk7CisKKwloYXNoX3NlYXJjaChBcHBseVdv cmtlcnNIYXNoLCAmeGlkLAorCQkJCUhBU0hfUkVNT1ZFLCAmZm91bmQpOworCisJZWxvZyhMT0cs ICJhZGRpbmcgZmluaXNoZWQgYXBwbHkgd29ya2VyICMldSBmb3IgeGlkICV1IHRvIHRoZSBpZGxl IGxpc3QiLAorCQkgd3N0YXRlLT5wc3RhdGUtPm4sIHdzdGF0ZS0+cHN0YXRlLT5zdHJlYW1feGlk KTsKKworCUFwcGx5V29ya2Vyc0lkbGVMaXN0ID0gbGFwcGVuZChBcHBseVdvcmtlcnNJZGxlTGlz dCwgd3N0YXRlKTsKKworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjdHgpOworfQorCisvKgor ICogSGFuZGxlIFNUUkVBTSBQUkVQQVJFLgogICovCiBzdGF0aWMgdm9pZAogYXBwbHlfaGFuZGxl X3N0cmVhbV9wcmVwYXJlKFN0cmluZ0luZm8gcykKQEAgLTEwODgsMjQgKzE0MTYsNzEgQEAgYXBw bHlfaGFuZGxlX3N0cmVhbV9wcmVwYXJlKFN0cmluZ0luZm8gcykKIAlsb2dpY2FscmVwX3JlYWRf c3RyZWFtX3ByZXBhcmUocywgJnByZXBhcmVfZGF0YSk7CiAJc2V0X2FwcGx5X2Vycm9yX2NvbnRl eHRfeGFjdChwcmVwYXJlX2RhdGEueGlkLCBwcmVwYXJlX2RhdGEucHJlcGFyZV9sc24pOwogCi0J ZWxvZyhERUJVRzEsICJyZWNlaXZlZCBwcmVwYXJlIGZvciBzdHJlYW1lZCB0cmFuc2FjdGlvbiAl dSIsIHByZXBhcmVfZGF0YS54aWQpOworCS8qCisJICogSWYgd2UgYXJlIGluIGEgYmd3b3JrZXIs IGp1c3QgcHJlcGFyZSB0aGUgdHJhbnNhY3Rpb24uCisJICovCisJaWYgKGFtX2FwcGx5X2Jnd29y a2VyKCkpCisJeworCQllbG9nKExPRywgInJlY2VpdmVkIHByZXBhcmUgZm9yIHN0cmVhbWVkIHRy YW5zYWN0aW9uICV1IiwgcHJlcGFyZV9kYXRhLnhpZCk7CiAKLQkvKiBSZXBsYXkgYWxsIHRoZSBz cG9vbGVkIG9wZXJhdGlvbnMuICovCi0JYXBwbHlfc3Bvb2xlZF9tZXNzYWdlcyhwcmVwYXJlX2Rh dGEueGlkLCBwcmVwYXJlX2RhdGEucHJlcGFyZV9sc24pOworCQkvKiBNYXJrIHRoZSB0cmFuc2Fj dGlvbiBhcyBwcmVwYXJlZC4gKi8KKwkJYXBwbHlfaGFuZGxlX3ByZXBhcmVfaW50ZXJuYWwoJnBy ZXBhcmVfZGF0YSk7CiAKLQkvKiBNYXJrIHRoZSB0cmFuc2FjdGlvbiBhcyBwcmVwYXJlZC4gKi8K LQlhcHBseV9oYW5kbGVfcHJlcGFyZV9pbnRlcm5hbCgmcHJlcGFyZV9kYXRhKTsKKwkJQ29tbWl0 VHJhbnNhY3Rpb25Db21tYW5kKCk7CiAKLQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJ cGdzdGF0X3JlcG9ydF9zdGF0KGZhbHNlKTsKIAotCXBnc3RhdF9yZXBvcnRfc3RhdChmYWxzZSk7 CisJCWxpc3RfZnJlZShzdWJ4YWN0bGlzdCk7CisJCXN1YnhhY3RsaXN0ID0gTklMOwogCi0Jc3Rv cmVfZmx1c2hfcG9zaXRpb24ocHJlcGFyZV9kYXRhLmVuZF9sc24pOworCQlhcHBseV9iZ3dvcmtl cl9zZXRfc3RhdGUoQVBQTFlfQkdXT1JLRVJfUkVBRFkpOworCX0KKwllbHNlCisJeworCQlXb3Jr ZXJTdGF0ZSAqd3N0YXRlID0gZmluZF9vcl9zdGFydF9hcHBseV9iZ3dvcmtlcihwcmVwYXJlX2Rh dGEueGlkLCBmYWxzZSk7CisKKwkJLyoKKwkJICogSWYgd2UgYXJlIGluIG1haW4gYXBwbHkgd29y a2VyLCBjaGVjayBpZiB3ZSBhcmUgcHJvY2Vzc2luZyB0aGlzCisJCSAqIHRyYW5zYWN0aW9uIGlu IGEgYmd3b3JrZXIuCisJCSAqLworCQlpZiAod3N0YXRlKQorCQl7CisJCQlhcHBseV9iZ3dvcmtl cl9zZW5kX2RhdGEod3N0YXRlLCBzLT5sZW4sIHMtPmRhdGEpOworCisJCQlhcHBseV9iZ3dvcmtl cl93YWl0X2Zvcih3c3RhdGUsIEFQUExZX0JHV09SS0VSX1JFQURZKTsKKworCQkJcGdzdGF0X3Jl cG9ydF9zdGF0KGZhbHNlKTsKKwkJCXN0b3JlX2ZsdXNoX3Bvc2l0aW9uKHByZXBhcmVfZGF0YS5l bmRfbHNuKTsKKwkJfQorCQllbHNlCisJCXsKKwkJCS8qCisJCQkgKiBJZiB3ZSBhcmUgaW4gbWFp biBhcHBseSB3b3JrZXIgYW5kIHRoZSB0cmFuc2FjdGlvbiBoYXMgYmVlbgorCQkJICogc2VyaWFs aXplZCB0byBmaWxlLCByZXBsYXkgYWxsIHRoZSBzcG9vbGVkIG9wZXJhdGlvbnMuCisJCQkgKi8K KwkJCWFwcGx5X3Nwb29sZWRfbWVzc2FnZXMocHJlcGFyZV9kYXRhLnhpZCwgcHJlcGFyZV9kYXRh LnByZXBhcmVfbHNuKTsKKworCQkJLyogTWFyayB0aGUgdHJhbnNhY3Rpb24gYXMgcHJlcGFyZWQu ICovCisJCQlhcHBseV9oYW5kbGVfcHJlcGFyZV9pbnRlcm5hbCgmcHJlcGFyZV9kYXRhKTsKKwor CQkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkJCXBnc3RhdF9yZXBvcnRfc3RhdChm YWxzZSk7CisKKwkJCXN0b3JlX2ZsdXNoX3Bvc2l0aW9uKHByZXBhcmVfZGF0YS5lbmRfbHNuKTsK KworCQkJaW5fcmVtb3RlX3RyYW5zYWN0aW9uID0gZmFsc2U7CisKKwkJCS8qIHVubGluayB0aGUg ZmlsZXMgd2l0aCBzZXJpYWxpemVkIGNoYW5nZXMgYW5kIHN1YnhhY3QgaW5mby4gKi8KKwkJCXN0 cmVhbV9jbGVhbnVwX2ZpbGVzKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHByZXBhcmVfZGF0 YS54aWQpOworCQl9CisJfQogCiAJaW5fcmVtb3RlX3RyYW5zYWN0aW9uID0gZmFsc2U7CisJc3Ry ZWFtX2FwcGx5X3dvcmtlciA9IE5VTEw7CiAKLQkvKiB1bmxpbmsgdGhlIGZpbGVzIHdpdGggc2Vy aWFsaXplZCBjaGFuZ2VzIGFuZCBzdWJ4YWN0IGluZm8uICovCi0Jc3RyZWFtX2NsZWFudXBfZmls ZXMoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgcHJlcGFyZV9kYXRhLnhpZCk7CisJLyogQ2hl Y2sgdGhlIHN0YXR1cyBvZiBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlciBpZiBhbnkuICovCisJYXBw bHlfYmd3b3JrZXJfY2hlY2tfc3RhdHVzKCk7CiAKIAkvKiBQcm9jZXNzIGFueSB0YWJsZXMgdGhh dCBhcmUgYmVpbmcgc3luY2hyb25pemVkIGluIHBhcmFsbGVsLiAqLwogCXByb2Nlc3Nfc3luY2lu Z190YWJsZXMocHJlcGFyZV9kYXRhLmVuZF9sc24pOwpAQCAtMTE1NSwxNSArMTUzMCw2IEBAIGFw cGx5X2hhbmRsZV9zdHJlYW1fc3RhcnQoU3RyaW5nSW5mbyBzKQogCQkJCShlcnJjb2RlKEVSUkNP REVfUFJPVE9DT0xfVklPTEFUSU9OKSwKIAkJCQkgZXJybXNnX2ludGVybmFsKCJkdXBsaWNhdGUg U1RSRUFNIFNUQVJUIG1lc3NhZ2UiKSkpOwogCi0JLyoKLQkgKiBTdGFydCBhIHRyYW5zYWN0aW9u IG9uIHN0cmVhbSBzdGFydCwgdGhpcyB0cmFuc2FjdGlvbiB3aWxsIGJlIGNvbW1pdHRlZAotCSAq IG9uIHRoZSBzdHJlYW0gc3RvcCB1bmxlc3MgaXQgaXMgYSB0YWJsZXN5bmMgd29ya2VyIGluIHdo aWNoIGNhc2UgaXQKLQkgKiB3aWxsIGJlIGNvbW1pdHRlZCBhZnRlciBwcm9jZXNzaW5nIGFsbCB0 aGUgbWVzc2FnZXMuIFdlIG5lZWQgdGhlCi0JICogdHJhbnNhY3Rpb24gZm9yIGhhbmRsaW5nIHRo ZSBidWZmaWxlLCB1c2VkIGZvciBzZXJpYWxpemluZyB0aGUKLQkgKiBzdHJlYW1pbmcgZGF0YSBh bmQgc3VieGFjdCBpbmZvLgotCSAqLwotCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKLQogCS8q IG5vdGlmeSBoYW5kbGUgbWV0aG9kcyB3ZSdyZSBwcm9jZXNzaW5nIGEgcmVtb3RlIHRyYW5zYWN0 aW9uICovCiAJaW5fc3RyZWFtZWRfdHJhbnNhY3Rpb24gPSB0cnVlOwogCkBAIC0xMTc3LDM2ICsx NTQzLDkwIEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1fc3RhcnQoU3RyaW5nSW5mbyBzKQogCiAJc2V0 X2FwcGx5X2Vycm9yX2NvbnRleHRfeGFjdChzdHJlYW1feGlkLCBJbnZhbGlkWExvZ1JlY1B0cik7 CiAKKwlpZiAoYW1fYXBwbHlfYmd3b3JrZXIoKSkKKwl7CisJCS8qCisJCSAqIE1ha2Ugc3VyZSB0 aGUgaGFuZGxlIGFwcGx5X2Rpc3BhdGNoIG1ldGhvZHMgYXJlIGF3YXJlIHdlJ3JlIGluIGEKKwkJ ICogcmVtb3RlIHRyYW5zYWN0aW9uLgorCQkgKi8KKwkJaW5fcmVtb3RlX3RyYW5zYWN0aW9uID0g dHJ1ZTsKKworCQkvKiBJZiB3ZSBhcmUgaW4gYSBiZ3dvcmtlciwgYmVnaW4gdGhlIHRyYW5zYWN0 aW9uICovCisJCUFjY2VwdEludmFsaWRhdGlvbk1lc3NhZ2VzKCk7CisJCW1heWJlX3JlcmVhZF9z dWJzY3JpcHRpb24oKTsKKworCQlTdGFydFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCQlCZWdpblRy YW5zYWN0aW9uQmxvY2soKTsKKwkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkJcmV0 dXJuOworCX0KKwogCS8qCi0JICogSW5pdGlhbGl6ZSB0aGUgd29ya2VyJ3Mgc3RyZWFtX2ZpbGVz ZXQgaWYgd2UgaGF2ZW4ndCB5ZXQuIFRoaXMgd2lsbCBiZQotCSAqIHVzZWQgZm9yIHRoZSBlbnRp cmUgZHVyYXRpb24gb2YgdGhlIHdvcmtlciBzbyBjcmVhdGUgaXQgaW4gYSBwZXJtYW5lbnQKLQkg KiBjb250ZXh0LiBXZSBjcmVhdGUgdGhpcyBvbiB0aGUgdmVyeSBmaXJzdCBzdHJlYW1pbmcgbWVz c2FnZSBmcm9tIGFueQotCSAqIHRyYW5zYWN0aW9uIGFuZCB0aGVuIHVzZSBpdCBmb3IgdGhpcyBh bmQgb3RoZXIgc3RyZWFtaW5nIHRyYW5zYWN0aW9ucy4KLQkgKiBOb3csIHdlIGNvdWxkIGNyZWF0 ZSBhIGZpbGVzZXQgYXQgdGhlIHN0YXJ0IG9mIHRoZSB3b3JrZXIgYXMgd2VsbCBidXQKLQkgKiB0 aGVuIHdlIHdvbid0IGJlIHN1cmUgdGhhdCBpdCB3aWxsIGV2ZXIgYmUgdXNlZC4KKwkgKiBJZiB3 ZSBhcmUgaW4gbWFpbiBhcHBseSB3b3JrZXIsIGNoZWNrIGlmIHRoZXJlIGlzIGFueSBmcmVlIGJn d29ya2VyCisJICogd2UgY2FuIHVzZSB0byBwcm9jZXNzIHRoaXMgdHJhbnNhY3Rpb24uCiAJICov Ci0JaWYgKE15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQgPT0gTlVMTCkKKwlzdHJl YW1fYXBwbHlfd29ya2VyID0gZmluZF9vcl9zdGFydF9hcHBseV9iZ3dvcmtlcihzdHJlYW1feGlk LCBmaXJzdF9zZWdtZW50KTsKKworCWlmIChhcHBseWluZ19jaGFuZ2VzX2luX2Jnd29ya2VyKCkp CiAJewotCQlNZW1vcnlDb250ZXh0IG9sZGN0eDsKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSBmcmVl IHdvcmtlciBvciB3ZSBhbHJlYWR5IHN0YXJ0ZWQgdG8gYXBwbHkgdGhpcworCQkgKiB0cmFuc2Fj dGlvbiBpbiBiZ3dvcmtlciwgd2UgcGFzcyB0aGUgZGF0YSB0byB3b3JrZXIuCisJCSAqLworCQlp ZiAoZmlyc3Rfc2VnbWVudCkKKwkJCWFwcGx5X2Jnd29ya2VyX3NlbmRfZGF0YShzdHJlYW1fYXBw bHlfd29ya2VyLCBzLT5sZW4sIHMtPmRhdGEpOwogCi0JCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRT d2l0Y2hUbyhBcHBseUNvbnRleHQpOworCQluY2hhbmdlcyA9IDA7CisJCWVsb2coTE9HLCAic3Rh cnRpbmcgc3RyZWFtaW5nIG9mIHhpZCAldSIsIHN0cmVhbV94aWQpOworCX0KIAotCQlNeUxvZ2lj YWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0ID0gcGFsbG9jKHNpemVvZihGaWxlU2V0KSk7Ci0J CUZpbGVTZXRJbml0KE15TG9naWNhbFJlcFdvcmtlci0+c3RyZWFtX2ZpbGVzZXQpOworCS8qCisJ ICogSWYgbm8gd29ya2VyIGlzIGF2YWlsYWJsZSBmb3IgdGhlIGZpcnN0IHN0cmVhbSBzdGFydCwg d2Ugc3RhcnQgdG8KKwkgKiBzZXJpYWxpemUgYWxsIHRoZSBjaGFuZ2VzIG9mIHRoZSB0cmFuc2Fj dGlvbi4KKwkgKi8KKwllbHNlCisJeworCQkvKgorCQkgKiBTdGFydCBhIHRyYW5zYWN0aW9uIG9u IHN0cmVhbSBzdGFydCwgdGhpcyB0cmFuc2FjdGlvbiB3aWxsIGJlIGNvbW1pdHRlZAorCQkgKiBv biB0aGUgc3RyZWFtIHN0b3AgdW5sZXNzIGl0IGlzIGEgdGFibGVzeW5jIHdvcmtlciBpbiB3aGlj aCBjYXNlIGl0CisJCSAqIHdpbGwgYmUgY29tbWl0dGVkIGFmdGVyIHByb2Nlc3NpbmcgYWxsIHRo ZSBtZXNzYWdlcy4gV2UgbmVlZCB0aGUKKwkJICogdHJhbnNhY3Rpb24gZm9yIGhhbmRsaW5nIHRo ZSBidWZmaWxlLCB1c2VkIGZvciBzZXJpYWxpemluZyB0aGUKKwkJICogc3RyZWFtaW5nIGRhdGEg YW5kIHN1YnhhY3QgaW5mby4KKwkJICovCisJCWJlZ2luX3JlcGxpY2F0aW9uX3N0ZXAoKTsKIAot CQlNZW1vcnlDb250ZXh0U3dpdGNoVG8ob2xkY3R4KTsKLQl9CisJCS8qCisJCSAqIEluaXRpYWxp emUgdGhlIHdvcmtlcidzIHN0cmVhbV9maWxlc2V0IGlmIHdlIGhhdmVuJ3QgeWV0LiBUaGlzIHdp bGwgYmUKKwkJICogdXNlZCBmb3IgdGhlIGVudGlyZSBkdXJhdGlvbiBvZiB0aGUgd29ya2VyIHNv IGNyZWF0ZSBpdCBpbiBhIHBlcm1hbmVudAorCQkgKiBjb250ZXh0LiBXZSBjcmVhdGUgdGhpcyBv biB0aGUgdmVyeSBmaXJzdCBzdHJlYW1pbmcgbWVzc2FnZSBmcm9tIGFueQorCQkgKiB0cmFuc2Fj dGlvbiBhbmQgdGhlbiB1c2UgaXQgZm9yIHRoaXMgYW5kIG90aGVyIHN0cmVhbWluZyB0cmFuc2Fj dGlvbnMuCisJCSAqIE5vdywgd2UgY291bGQgY3JlYXRlIGEgZmlsZXNldCBhdCB0aGUgc3RhcnQg b2YgdGhlIHdvcmtlciBhcyB3ZWxsIGJ1dAorCQkgKiB0aGVuIHdlIHdvbid0IGJlIHN1cmUgdGhh dCBpdCB3aWxsIGV2ZXIgYmUgdXNlZC4KKwkJICovCisJCWlmIChNeUxvZ2ljYWxSZXBXb3JrZXIt PnN0cmVhbV9maWxlc2V0ID09IE5VTEwpCisJCXsKKwkJCU1lbW9yeUNvbnRleHQgb2xkY3R4Owog Ci0JLyogb3BlbiB0aGUgc3Bvb2wgZmlsZSBmb3IgdGhpcyB0cmFuc2FjdGlvbiAqLwotCXN0cmVh bV9vcGVuX2ZpbGUoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgc3RyZWFtX3hpZCwgZmlyc3Rf c2VnbWVudCk7CisJCQlvbGRjdHggPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8oQXBwbHlDb250ZXh0 KTsKIAotCS8qIGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBzZWdtZW50LCBvcGVuIGV4aXN0aW5n IHN1YnhhY3QgZmlsZSAqLwotCWlmICghZmlyc3Rfc2VnbWVudCkKLQkJc3VieGFjdF9pbmZvX3Jl YWQoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgc3RyZWFtX3hpZCk7CisJCQlNeUxvZ2ljYWxS ZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0ID0gcGFsbG9jKHNpemVvZihGaWxlU2V0KSk7CisJCQlG aWxlU2V0SW5pdChNeUxvZ2ljYWxSZXBXb3JrZXItPnN0cmVhbV9maWxlc2V0KTsKIAotCXBnc3Rh dF9yZXBvcnRfYWN0aXZpdHkoU1RBVEVfUlVOTklORywgTlVMTCk7CisJCQlNZW1vcnlDb250ZXh0 U3dpdGNoVG8ob2xkY3R4KTsKKwkJfQogCi0JZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsKKwkJLyog b3BlbiB0aGUgc3Bvb2wgZmlsZSBmb3IgdGhpcyB0cmFuc2FjdGlvbiAqLworCQlzdHJlYW1fb3Bl bl9maWxlKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHN0cmVhbV94aWQsIGZpcnN0X3NlZ21l bnQpOworCisJCS8qIGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBzZWdtZW50LCBvcGVuIGV4aXN0 aW5nIHN1YnhhY3QgZmlsZSAqLworCQlpZiAoIWZpcnN0X3NlZ21lbnQpCisJCQlzdWJ4YWN0X2lu Zm9fcmVhZChNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCBzdHJlYW1feGlkKTsKKworCQllbmRf cmVwbGljYXRpb25fc3RlcCgpOworCX0KKworCXBnc3RhdF9yZXBvcnRfYWN0aXZpdHkoU1RBVEVf UlVOTklORywgTlVMTCk7CiB9CiAKIC8qCkBAIC0xMjIwLDQ0ICsxNjQwLDQ3IEBAIGFwcGx5X2hh bmRsZV9zdHJlYW1fc3RvcChTdHJpbmdJbmZvIHMpCiAJCQkJKGVycmNvZGUoRVJSQ09ERV9QUk9U T0NPTF9WSU9MQVRJT04pLAogCQkJCSBlcnJtc2dfaW50ZXJuYWwoIlNUUkVBTSBTVE9QIG1lc3Nh Z2Ugd2l0aG91dCBTVFJFQU0gU1RBUlQiKSkpOwogCi0JLyoKLQkgKiBDbG9zZSB0aGUgZmlsZSB3 aXRoIHNlcmlhbGl6ZWQgY2hhbmdlcywgYW5kIHNlcmlhbGl6ZSBpbmZvcm1hdGlvbiBhYm91dAot CSAqIHN1YnhhY3RzIGZvciB0aGUgdG9wbGV2ZWwgdHJhbnNhY3Rpb24uCi0JICovCi0Jc3VieGFj dF9pbmZvX3dyaXRlKE15TG9naWNhbFJlcFdvcmtlci0+c3ViaWQsIHN0cmVhbV94aWQpOwotCXN0 cmVhbV9jbG9zZV9maWxlKCk7CisJaWYgKGFwcGx5aW5nX2NoYW5nZXNfaW5fYmd3b3JrZXIoKSkK Kwl7CisJCWNoYXIJYWN0aW9uID0gTE9HSUNBTF9SRVBfTVNHX1NUUkVBTV9TVE9QOwogCi0JLyog V2UgbXVzdCBiZSBpbiBhIHZhbGlkIHRyYW5zYWN0aW9uIHN0YXRlICovCi0JQXNzZXJ0KElzVHJh bnNhY3Rpb25TdGF0ZSgpKTsKKwkJYXBwbHlfYmd3b3JrZXJfc2VuZF9kYXRhKHN0cmVhbV9hcHBs eV93b3JrZXIsIDEsICZhY3Rpb24pOworCQlhcHBseV9iZ3dvcmtlcl93YWl0X2ZvcihzdHJlYW1f YXBwbHlfd29ya2VyLCBBUFBMWV9CR1dPUktFUl9SRUFEWSk7CiAKLQkvKiBDb21taXQgdGhlIHBl ci1zdHJlYW0gdHJhbnNhY3Rpb24gKi8KLQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKwkJ ZWxvZyhMT0csICJzdG9wcGVkIHN0cmVhbWluZyBvZiB4aWQgJXUsICV1IGNoYW5nZXMgc3RyZWFt ZWQiLCBzdHJlYW1feGlkLCBuY2hhbmdlcyk7CisJfQorCWVsc2UKKwl7CisJCS8qCisJCSAqIENs b3NlIHRoZSBmaWxlIHdpdGggc2VyaWFsaXplZCBjaGFuZ2VzLCBhbmQgc2VyaWFsaXplIGluZm9y bWF0aW9uCisJCSAqIGFib3V0IHN1YnhhY3RzIGZvciB0aGUgdG9wbGV2ZWwgdHJhbnNhY3Rpb24u CisJCSAqLworCQlzdWJ4YWN0X2luZm9fd3JpdGUoTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwg c3RyZWFtX3hpZCk7CisJCXN0cmVhbV9jbG9zZV9maWxlKCk7CiAKLQlpbl9zdHJlYW1lZF90cmFu c2FjdGlvbiA9IGZhbHNlOworCQkvKiBXZSBtdXN0IGJlIGluIGEgdmFsaWQgdHJhbnNhY3Rpb24g c3RhdGUgKi8KKwkJQXNzZXJ0KElzVHJhbnNhY3Rpb25TdGF0ZSgpKTsKKworCQkvKiBDb21taXQg dGhlIHBlci1zdHJlYW0gdHJhbnNhY3Rpb24gKi8KKwkJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5k KCk7CiAKLQkvKiBSZXNldCBwZXItc3RyZWFtIGNvbnRleHQgKi8KLQlNZW1vcnlDb250ZXh0UmVz ZXQoTG9naWNhbFN0cmVhbWluZ0NvbnRleHQpOworCQkvKiBSZXNldCBwZXItc3RyZWFtIGNvbnRl eHQgKi8KKwkJTWVtb3J5Q29udGV4dFJlc2V0KExvZ2ljYWxTdHJlYW1pbmdDb250ZXh0KTsKKwl9 CisKKwlpbl9zdHJlYW1lZF90cmFuc2FjdGlvbiA9IGZhbHNlOworCXN0cmVhbV9hcHBseV93b3Jr ZXIgPSBOVUxMOwogCiAJcGdzdGF0X3JlcG9ydF9hY3Rpdml0eShTVEFURV9JRExFLCBOVUxMKTsK IAlyZXNldF9hcHBseV9lcnJvcl9jb250ZXh0X2luZm8oKTsKIH0KIAogLyoKLSAqIEhhbmRsZSBT VFJFQU0gYWJvcnQgbWVzc2FnZS4KKyAqIEhhbmRsZSBTVFJFQU0gQUJPUlQgbWVzc2FnZSB3aGVu IHRoZSB0cmFuc2FjdGlvbiB3YXMgc3BpbGxlZCB0byBkaXNrLgogICovCiBzdGF0aWMgdm9pZAot YXBwbHlfaGFuZGxlX3N0cmVhbV9hYm9ydChTdHJpbmdJbmZvIHMpCitzZXJpYWxpemVfc3RyZWFt X2Fib3J0KFRyYW5zYWN0aW9uSWQgeGlkLCBUcmFuc2FjdGlvbklkIHN1YnhpZCkKIHsKLQlUcmFu c2FjdGlvbklkIHhpZDsKLQlUcmFuc2FjdGlvbklkIHN1YnhpZDsKLQotCWlmIChpbl9zdHJlYW1l ZF90cmFuc2FjdGlvbikKLQkJZXJlcG9ydChFUlJPUiwKLQkJCQkoZXJyY29kZShFUlJDT0RFX1BS T1RPQ09MX1ZJT0xBVElPTiksCi0JCQkJIGVycm1zZ19pbnRlcm5hbCgiU1RSRUFNIEFCT1JUIG1l c3NhZ2Ugd2l0aG91dCBTVFJFQU0gU1RPUCIpKSk7Ci0KLQlsb2dpY2FscmVwX3JlYWRfc3RyZWFt X2Fib3J0KHMsICZ4aWQsICZzdWJ4aWQpOwotCiAJLyoKIAkgKiBJZiB0aGUgdHdvIFhJRHMgYXJl IHRoZSBzYW1lLCBpdCdzIGluIGZhY3QgYWJvcnQgb2YgdG9wbGV2ZWwgeGFjdCwgc28KIAkgKiBq dXN0IGRlbGV0ZSB0aGUgZmlsZXMgd2l0aCBzZXJpYWxpemVkIGluZm8uCkBAIC0xMzM5LDggKzE3 NjIsMTIwIEBAIGFwcGx5X2hhbmRsZV9zdHJlYW1fYWJvcnQoU3RyaW5nSW5mbyBzKQogCQllbmRf cmVwbGljYXRpb25fc3RlcCgpOwogCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKIAl9Cit9 CiAKLQlyZXNldF9hcHBseV9lcnJvcl9jb250ZXh0X2luZm8oKTsKKy8qCisgKiBIYW5kbGUgU1RS RUFNIEFCT1JUIG1lc3NhZ2UuCisgKi8KK3N0YXRpYyB2b2lkCithcHBseV9oYW5kbGVfc3RyZWFt X2Fib3J0KFN0cmluZ0luZm8gcykKK3sKKwlUcmFuc2FjdGlvbklkIHhpZDsKKwlUcmFuc2FjdGlv bklkIHN1YnhpZDsKKworCWlmIChpbl9zdHJlYW1lZF90cmFuc2FjdGlvbikKKwkJZXJlcG9ydChF UlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xBVElPTiksCisJCQkJIGVy cm1zZ19pbnRlcm5hbCgiU1RSRUFNIENPTU1JVCBtZXNzYWdlIHdpdGhvdXQgU1RSRUFNIFNUT1Ai KSkpOworCisJbG9naWNhbHJlcF9yZWFkX3N0cmVhbV9hYm9ydChzLCAmeGlkLCAmc3VieGlkKTsK KworCWlmIChhbV9hcHBseV9iZ3dvcmtlcigpKQorCXsKKwkJZXJlcG9ydChMT0csCisJCQkJKGVy cm1zZygiW0FwcGx5IEJHVyAjJXVdIGFib3J0aW5nIGN1cnJlbnQgdHJhbnNhY3Rpb24geGlkPSV1 LCBzdWJ4aWQ9JXUiLAorCQkJCU15UGFyYWxsZWxTdGF0ZS0+biwgR2V0Q3VycmVudFRyYW5zYWN0 aW9uSWRJZkFueSgpLCBHZXRDdXJyZW50U3ViVHJhbnNhY3Rpb25JZCgpKSkpOworCisJCS8qCisJ CSAqIElmIHRoZSB0d28gWElEcyBhcmUgdGhlIHNhbWUsIGl0J3MgaW4gZmFjdCBhYm9ydCBvZiB0 b3BsZXZlbCB4YWN0LAorCQkgKiBzbyBqdXN0IGZyZWUgdGhlIHN1YnhhY3RsaXN0LgorCQkgKi8K KwkJaWYgKHN1YnhpZCA9PSB4aWQpCisJCXsKKwkJCXNldF9hcHBseV9lcnJvcl9jb250ZXh0X3hh Y3Qoc3VieGlkLCBJbnZhbGlkWExvZ1JlY1B0cik7CisKKwkJCUFib3J0Q3VycmVudFRyYW5zYWN0 aW9uKCk7CisKKwkJCUVuZFRyYW5zYWN0aW9uQmxvY2soZmFsc2UpOworCQkJQ29tbWl0VHJhbnNh Y3Rpb25Db21tYW5kKCk7CisKKwkJCWluX3JlbW90ZV90cmFuc2FjdGlvbiA9IGZhbHNlOworCisJ CQlsaXN0X2ZyZWUoc3VieGFjdGxpc3QpOworCQkJc3VieGFjdGxpc3QgPSBOSUw7CisKKwkJCWFw cGx5X2Jnd29ya2VyX3NldF9zdGF0ZShBUFBMWV9CR1dPUktFUl9GSU5JU0hFRCk7CisJCX0KKwkJ ZWxzZQorCQl7CisJCQkvKgorCQkJICogT0ssIHNvIGl0J3MgYSBzdWJ4YWN0LiBSb2xsYmFjayB0 byB0aGUgc2F2ZXBvaW50LgorCQkJICoKKwkJCSAqIFdlIGFsc28gbmVlZCB0byByZWFkIHRoZSBz dWJ4YWN0bGlzdCwgZGV0ZXJtaW5lIHRoZSBvZmZzZXQKKwkJCSAqIHRyYWNrZWQgZm9yIHRoZSBz dWJ4YWN0LCBhbmQgdHJ1bmNhdGUgdGhlIGxpc3QuCisJCQkgKi8KKwkJCWludAkJaTsKKwkJCWJv b2wJZm91bmQgPSBmYWxzZTsKKwkJCWNoYXIJc3BuYW1lW01BWFBHUEFUSF07CisKKwkJCXNldF9h cHBseV9lcnJvcl9jb250ZXh0X3hhY3Qoc3VieGlkLCBJbnZhbGlkWExvZ1JlY1B0cik7CisJCQlz bnByaW50ZihzcG5hbWUsIE1BWFBHUEFUSCwgInNhdmVwb2ludF9mb3JfeGlkXyV1Iiwgc3VieGlk KTsKKworCQkJZXJlcG9ydChMT0csCisJCQkJCShlcnJtc2coIltBcHBseSBCR1cgIyV1XSByb2xs aW5nIGJhY2sgdG8gc2F2ZXBvaW50ICVzIiwKKwkJCQkJTXlQYXJhbGxlbFN0YXRlLT5uLCBzcG5h bWUpKSk7CisKKwkJCWZvcihpID0gbGlzdF9sZW5ndGgoc3VieGFjdGxpc3QpIC0gMTsgaSA+PSAw OyBpLS0pCisJCQl7CisJCQkJeGlkID0gKFRyYW5zYWN0aW9uSWQpIGxpc3RfbnRoX2ludChzdWJ4 YWN0bGlzdCwgaSk7CisJCQkJaWYgKHhpZCA9PSBzdWJ4aWQpCisJCQkJeworCQkJCQlmb3VuZCA9 IHRydWU7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCX0KKworCQkJaWYgKGZvdW5kKQorCQkJewor CQkJCWVsb2coTE9HLCAicm9sbGVkIGJhY2sgdG8gc2F2ZXBvaW50ICVzIiwgc3BuYW1lKTsKKwkJ CQlSb2xsYmFja1RvU2F2ZXBvaW50KHNwbmFtZSk7CisJCQkJQ29tbWl0VHJhbnNhY3Rpb25Db21t YW5kKCk7CisJCQkJc3VieGFjdGxpc3QgPSBsaXN0X3RydW5jYXRlKHN1YnhhY3RsaXN0LCBpICsg MSk7CisJCQl9CisKKwkJCWFwcGx5X2Jnd29ya2VyX3NldF9zdGF0ZShBUFBMWV9CR1dPUktFUl9S RUFEWSk7CisJCX0KKworCQlyZXNldF9hcHBseV9lcnJvcl9jb250ZXh0X2luZm8oKTsKKwl9CisJ ZWxzZQorCXsKKwkJV29ya2VyU3RhdGUgKndzdGF0ZSA9IGZpbmRfb3Jfc3RhcnRfYXBwbHlfYmd3 b3JrZXIoeGlkLCBmYWxzZSk7CisKKwkJLyoKKwkJICogSWYgd2UgYXJlIGluIG1haW4gYXBwbHkg d29ya2VyLCBjaGVjayBpZiB3ZSBhcmUgcHJvY2Vzc2luZyB0aGlzCisJCSAqIHRyYW5zYWN0aW9u IGluIGEgYmd3b3JrZXIuCisJCSAqLworCQlpZiAod3N0YXRlKQorCQl7CisJCQlhcHBseV9iZ3dv cmtlcl9zZW5kX2RhdGEod3N0YXRlLCBzLT5sZW4sIHMtPmRhdGEpOworCisJCQlpZiAoc3VieGlk ID09IHhpZCkKKwkJCXsKKwkJCQlhcHBseV9iZ3dvcmtlcl93YWl0X2Zvcih3c3RhdGUsIEFQUExZ X0JHV09SS0VSX0ZJTklTSEVEKTsKKwkJCQlhcHBseV9iZ3dvcmtlcl9mcmVlKHdzdGF0ZSk7CisJ CQl9CisJCQllbHNlCisJCQkJYXBwbHlfYmd3b3JrZXJfd2FpdF9mb3Iod3N0YXRlLCBBUFBMWV9C R1dPUktFUl9SRUFEWSk7CisJCX0KKworCQkvKgorCQkgKiBXZSBhcmUgaW4gbWFpbiBhcHBseSB3 b3JrZXIgYW5kIHRoZSB0cmFuc2FjdGlvbiBoYXMgYmVlbiBzZXJpYWxpemVkCisJCSAqIHRvIGZp bGUuCisJCSAqLworCQllbHNlCisJCQlzZXJpYWxpemVfc3RyZWFtX2Fib3J0KHhpZCwgc3VieGlk KTsKKwl9CiB9CiAKIC8qCkBAIC0xNDYzLDQwICsxOTk4LDYgQEAgYXBwbHlfc3Bvb2xlZF9tZXNz YWdlcyhUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24pCiB9CiAKIC8qCi0gKiBIYW5k bGUgU1RSRUFNIENPTU1JVCBtZXNzYWdlLgotICovCi1zdGF0aWMgdm9pZAotYXBwbHlfaGFuZGxl X3N0cmVhbV9jb21taXQoU3RyaW5nSW5mbyBzKQotewotCVRyYW5zYWN0aW9uSWQgeGlkOwotCUxv Z2ljYWxSZXBDb21taXREYXRhIGNvbW1pdF9kYXRhOwotCi0JaWYgKGluX3N0cmVhbWVkX3RyYW5z YWN0aW9uKQotCQllcmVwb3J0KEVSUk9SLAotCQkJCShlcnJjb2RlKEVSUkNPREVfUFJPVE9DT0xf VklPTEFUSU9OKSwKLQkJCQkgZXJybXNnX2ludGVybmFsKCJTVFJFQU0gQ09NTUlUIG1lc3NhZ2Ug d2l0aG91dCBTVFJFQU0gU1RPUCIpKSk7Ci0KLQl4aWQgPSBsb2dpY2FscmVwX3JlYWRfc3RyZWFt X2NvbW1pdChzLCAmY29tbWl0X2RhdGEpOwotCXNldF9hcHBseV9lcnJvcl9jb250ZXh0X3hhY3Qo eGlkLCBjb21taXRfZGF0YS5jb21taXRfbHNuKTsKLQotCWVsb2coREVCVUcxLCAicmVjZWl2ZWQg Y29tbWl0IGZvciBzdHJlYW1lZCB0cmFuc2FjdGlvbiAldSIsIHhpZCk7Ci0KLQlhcHBseV9zcG9v bGVkX21lc3NhZ2VzKHhpZCwgY29tbWl0X2RhdGEuY29tbWl0X2xzbik7Ci0KLQlhcHBseV9oYW5k bGVfY29tbWl0X2ludGVybmFsKCZjb21taXRfZGF0YSk7Ci0KLQkvKiB1bmxpbmsgdGhlIGZpbGVz IHdpdGggc2VyaWFsaXplZCBjaGFuZ2VzIGFuZCBzdWJ4YWN0IGluZm8gKi8KLQlzdHJlYW1fY2xl YW51cF9maWxlcyhNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQpOwotCi0JLyogUHJvY2Vz cyBhbnkgdGFibGVzIHRoYXQgYXJlIGJlaW5nIHN5bmNocm9uaXplZCBpbiBwYXJhbGxlbC4gKi8K LQlwcm9jZXNzX3N5bmNpbmdfdGFibGVzKGNvbW1pdF9kYXRhLmVuZF9sc24pOwotCi0JcGdzdGF0 X3JlcG9ydF9hY3Rpdml0eShTVEFURV9JRExFLCBOVUxMKTsKLQotCXJlc2V0X2FwcGx5X2Vycm9y X2NvbnRleHRfaW5mbygpOwotfQotCi0vKgogICogSGVscGVyIGZ1bmN0aW9uIGZvciBhcHBseV9o YW5kbGVfY29tbWl0IGFuZCBhcHBseV9oYW5kbGVfc3RyZWFtX2NvbW1pdC4KICAqLwogc3RhdGlj IHZvaWQKQEAgLTI0NDUsNiArMjk0NiwxMDEgQEAgYXBwbHlfaGFuZGxlX3RydW5jYXRlKFN0cmlu Z0luZm8gcykKIAllbmRfcmVwbGljYXRpb25fc3RlcCgpOwogfQogCisvKgorICogSGFuZGxlIFNU UkVBTSBDT01NSVQgbWVzc2FnZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGx5X2hhbmRsZV9zdHJl YW1fY29tbWl0KFN0cmluZ0luZm8gcykKK3sKKwlMb2dpY2FsUmVwQ29tbWl0RGF0YSBjb21taXRf ZGF0YTsKKwlUcmFuc2FjdGlvbklkIHhpZDsKKworCWlmIChpbl9zdHJlYW1lZF90cmFuc2FjdGlv bikKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX1BST1RPQ09MX1ZJT0xB VElPTiksCisJCQkJIGVycm1zZ19pbnRlcm5hbCgiU1RSRUFNIENPTU1JVCBtZXNzYWdlIHdpdGhv dXQgU1RSRUFNIFNUT1AiKSkpOworCisJeGlkID0gcHFfZ2V0bXNnaW50KHMsIDQpOworCWxvZ2lj YWxyZXBfcmVhZF9zdHJlYW1fY29tbWl0KHMsICZjb21taXRfZGF0YSk7CisJc2V0X2FwcGx5X2Vy cm9yX2NvbnRleHRfeGFjdCh4aWQsIGNvbW1pdF9kYXRhLmNvbW1pdF9sc24pOworCisJZWxvZyhE RUJVRzEsICJyZWNlaXZlZCBjb21taXQgZm9yIHN0cmVhbWVkIHRyYW5zYWN0aW9uICV1IiwgeGlk KTsKKworCWlmIChhbV9hcHBseV9iZ3dvcmtlcigpKQorCXsKKwkJLyoKKwkJICogVXBkYXRlIG9y aWdpbiBzdGF0ZSBzbyB3ZSBjYW4gcmVzdGFydCBzdHJlYW1pbmcgZnJvbSBjb3JyZWN0CisJCSAq IHBvc2l0aW9uIGluIGNhc2Ugb2YgY3Jhc2guCisJCSAqLworCQlyZXBsb3JpZ2luX3Nlc3Npb25f b3JpZ2luX2xzbiA9IGNvbW1pdF9kYXRhLmVuZF9sc247CisJCXJlcGxvcmlnaW5fc2Vzc2lvbl9v cmlnaW5fdGltZXN0YW1wID0gY29tbWl0X2RhdGEuY29tbWl0dGltZTsKKworCQlDb21taXRUcmFu c2FjdGlvbkNvbW1hbmQoKTsKKwkJRW5kVHJhbnNhY3Rpb25CbG9jayhmYWxzZSk7CisJCUNvbW1p dFRyYW5zYWN0aW9uQ29tbWFuZCgpOworCisJCWluX3JlbW90ZV90cmFuc2FjdGlvbiA9IGZhbHNl OworCisJCXBnc3RhdF9yZXBvcnRfc3RhdChmYWxzZSk7CisKKwkJbGlzdF9mcmVlKHN1YnhhY3Rs aXN0KTsKKwkJc3VieGFjdGxpc3QgPSBOSUw7CisKKwkJYXBwbHlfYmd3b3JrZXJfc2V0X3N0YXRl KEFQUExZX0JHV09SS0VSX0ZJTklTSEVEKTsKKwl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogSWYg d2UgYXJlIGluIG1haW4gYXBwbHkgd29ya2VyLCBjaGVjayBpZiB3ZSBhcmUgcHJvY2Vzc2luZyB0 aGlzCisJCSAqIHRyYW5zYWN0aW9uIGluIGEgYXBwbHkgYmFja2dyb3VuZCB3b3JrZXIuCisJCSAq LworCQlXb3JrZXJTdGF0ZSAqd3N0YXRlID0gZmluZF9vcl9zdGFydF9hcHBseV9iZ3dvcmtlcih4 aWQsIGZhbHNlKTsKKworCQlpZiAod3N0YXRlKQorCQl7CisJCQkvKiBTZW5kIGNvbW1pdCBtZXNz YWdlICovCisJCQlhcHBseV9iZ3dvcmtlcl9zZW5kX2RhdGEod3N0YXRlLCBzLT5sZW4sIHMtPmRh dGEpOworCisJCQkvKiBXYWl0IGZvciBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlciB0byBmaW5pc2gg Ki8KKwkJCWFwcGx5X2Jnd29ya2VyX3dhaXRfZm9yKHdzdGF0ZSwgQVBQTFlfQkdXT1JLRVJfRklO SVNIRUQpOworCisJCQlwZ3N0YXRfcmVwb3J0X3N0YXQoZmFsc2UpOworCQkJc3RvcmVfZmx1c2hf cG9zaXRpb24oY29tbWl0X2RhdGEuZW5kX2xzbik7CisJCQlzdG9wX3NraXBwaW5nX2NoYW5nZXMo KTsKKworCQkJYXBwbHlfYmd3b3JrZXJfZnJlZSh3c3RhdGUpOworCisJCQkvKgorCQkJICogVGhl IHRyYW5zYWN0aW9uIGlzIGVpdGhlciBub24tZW1wdHkgb3Igc2tpcHBlZCwgc28gd2UgY2xlYXIg dGhlCisJCQkgKiBzdWJza2lwbHNuLgorCQkJICovCisJCQljbGVhcl9zdWJzY3JpcHRpb25fc2tp cF9sc24oY29tbWl0X2RhdGEuY29tbWl0X2xzbik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgor CQkJICogSWYgd2UgYXJlIGluIG1haW4gYXBwbHkgd29ya2VyIGFuZCB0aGUgdHJhbnNhY3Rpb24g aGFzIGJlZW4KKwkJCSAqIHNlcmlhbGl6ZWQgdG8gZmlsZSwgcmVwbGF5IGFsbCB0aGUgc3Bvb2xl ZCBvcGVyYXRpb25zLgorCQkJICovCisJCQlhcHBseV9zcG9vbGVkX21lc3NhZ2VzKHhpZCwgY29t bWl0X2RhdGEuY29tbWl0X2xzbik7CisKKwkJCWFwcGx5X2hhbmRsZV9jb21taXRfaW50ZXJuYWwo JmNvbW1pdF9kYXRhKTsKKworCQkJLyogdW5saW5rIHRoZSBmaWxlcyB3aXRoIHNlcmlhbGl6ZWQg Y2hhbmdlcyBhbmQgc3VieGFjdCBpbmZvICovCisJCQlzdHJlYW1fY2xlYW51cF9maWxlcyhNeUxv Z2ljYWxSZXBXb3JrZXItPnN1YmlkLCB4aWQpOworCQl9CisJfQorCisJLyogQ2hlY2sgdGhlIHN0 YXR1cyBvZiBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlciBpZiBhbnkuICovCisJYXBwbHlfYmd3b3Jr ZXJfY2hlY2tfc3RhdHVzKCk7CisKKwkvKiBQcm9jZXNzIGFueSB0YWJsZXMgdGhhdCBhcmUgYmVp bmcgc3luY2hyb25pemVkIGluIHBhcmFsbGVsLiAqLworCXByb2Nlc3Nfc3luY2luZ190YWJsZXMo Y29tbWl0X2RhdGEuZW5kX2xzbik7CisKKwlwZ3N0YXRfcmVwb3J0X2FjdGl2aXR5KFNUQVRFX0lE TEUsIE5VTEwpOworCisJcmVzZXRfYXBwbHlfZXJyb3JfY29udGV4dF9pbmZvKCk7Cit9CiAKIC8q CiAgKiBMb2dpY2FsIHJlcGxpY2F0aW9uIHByb3RvY29sIG1lc3NhZ2UgZGlzcGF0Y2hlci4KQEAg LTI1MTEsNiArMzEwNyw4IEBAIGFwcGx5X2Rpc3BhdGNoKFN0cmluZ0luZm8gcykKIAkJCWJyZWFr OwogCiAJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX1NUUkVBTV9TVEFSVDoKKwkJCS8qIEZJWE1FIDog bG9nIGZvciBkZWJ1Z2dpbmcgaGVyZS4gKi8KKwkJCWVsb2coTE9HLCAiTE9HSUNBTF9SRVBfTVNH X1NUUkVBTV9TVEFSVCIpOwogCQkJYXBwbHlfaGFuZGxlX3N0cmVhbV9zdGFydChzKTsKIAkJCWJy ZWFrOwogCkBAIC0yNjE4LDYgKzMyMTYsMTAgQEAgc3RvcmVfZmx1c2hfcG9zaXRpb24oWExvZ1Jl Y1B0ciByZW1vdGVfbHNuKQogewogCUZsdXNoUG9zaXRpb24gKmZsdXNocG9zOwogCisJLyogV2Ug b25seSBuZWVkIHRvIGNvbGxlY3QgdGhlIExTTiBpbiBtYWluIGFwcGx5IHdvcmtlciAqLworCWlm IChhbV9hcHBseV9iZ3dvcmtlcigpKQorCQlyZXR1cm47CisKIAkvKiBOZWVkIHRvIGRvIHRoaXMg aW4gcGVybWFuZW50IGNvbnRleHQgKi8KIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8oQXBwbHlDb250 ZXh0KTsKIApAQCAtMjc5NCw2ICszMzk2LDkgQEAgTG9naWNhbFJlcEFwcGx5TG9vcChYTG9nUmVj UHRyIGxhc3RfcmVjZWl2ZWQpCiAJCQlBY2NlcHRJbnZhbGlkYXRpb25NZXNzYWdlcygpOwogCQkJ bWF5YmVfcmVyZWFkX3N1YnNjcmlwdGlvbigpOwogCisJCQkvKiBDaGVjayB0aGUgc3RhdHVzIG9m IGFwcGx5IGJhY2tncm91bmQgd29ya2VyIGlmIGFueS4gKi8KKwkJCWFwcGx5X2Jnd29ya2VyX2No ZWNrX3N0YXR1cygpOworCiAJCQkvKiBQcm9jZXNzIGFueSB0YWJsZSBzeW5jaHJvbml6YXRpb24g Y2hhbmdlcy4gKi8KIAkJCXByb2Nlc3Nfc3luY2luZ190YWJsZXMobGFzdF9yZWNlaXZlZCk7CiAJ CX0KQEAgLTM2ODYsNyArNDI5MSw3IEBAIEFwcGx5V29ya2VyTWFpbihEYXR1bSBtYWluX2FyZykK IAkJb3JpZ2luaWQgPSByZXBsb3JpZ2luX2J5X25hbWUob3JpZ2lubmFtZSwgdHJ1ZSk7CiAJCWlm ICghT2lkSXNWYWxpZChvcmlnaW5pZCkpCiAJCQlvcmlnaW5pZCA9IHJlcGxvcmlnaW5fY3JlYXRl KG9yaWdpbm5hbWUpOwotCQlyZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAob3JpZ2luaWQpOworCQly ZXBsb3JpZ2luX3Nlc3Npb25fc2V0dXAob3JpZ2luaWQsIHRydWUpOwogCQlyZXBsb3JpZ2luX3Nl c3Npb25fb3JpZ2luID0gb3JpZ2luaWQ7CiAJCW9yaWdpbl9zdGFydHBvcyA9IHJlcGxvcmlnaW5f c2Vzc2lvbl9nZXRfcHJvZ3Jlc3MoZmFsc2UpOwogCQlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQo KTsKQEAgLTM3MzMsNyArNDMzOCw3IEBAIEFwcGx5V29ya2VyTWFpbihEYXR1bSBtYWluX2FyZykK IAogCW9wdGlvbnMucHJvdG8ubG9naWNhbC5wdWJsaWNhdGlvbl9uYW1lcyA9IE15U3Vic2NyaXB0 aW9uLT5wdWJsaWNhdGlvbnM7CiAJb3B0aW9ucy5wcm90by5sb2dpY2FsLmJpbmFyeSA9IE15U3Vi c2NyaXB0aW9uLT5iaW5hcnk7Ci0Jb3B0aW9ucy5wcm90by5sb2dpY2FsLnN0cmVhbWluZyA9IE15 U3Vic2NyaXB0aW9uLT5zdHJlYW07CisJb3B0aW9ucy5wcm90by5sb2dpY2FsLnN0cmVhbWluZyA9 IChNeVN1YnNjcmlwdGlvbi0+c3RyZWFtICE9IFNVQlNUUkVBTV9PRkYpOwogCW9wdGlvbnMucHJv dG8ubG9naWNhbC50d29waGFzZSA9IGZhbHNlOwogCiAJaWYgKCFhbV90YWJsZXN5bmNfd29ya2Vy KCkpCkBAIC0zODkxLDcgKzQ0OTYsOCBAQCBjbGVhcl9zdWJzY3JpcHRpb25fc2tpcF9sc24oWExv Z1JlY1B0ciBmaW5pc2hfbHNuKQogCVhMb2dSZWNQdHIJbXlza2lwbHNuID0gTXlTdWJzY3JpcHRp b24tPnNraXBsc247CiAJYm9vbAkJc3RhcnRlZF90eCA9IGZhbHNlOwogCi0JaWYgKGxpa2VseShY TG9nUmVjUHRySXNJbnZhbGlkKG15c2tpcGxzbikpKQorCWlmIChsaWtlbHkoWExvZ1JlY1B0cklz SW52YWxpZChteXNraXBsc24pKSB8fAorCQlhbV9hcHBseV9iZ3dvcmtlcigpKQogCQlyZXR1cm47 CiAKIAlpZiAoIUlzVHJhbnNhY3Rpb25TdGF0ZSgpKQpAQCAtNDAyNywzICs0NjMzLDUyOSBAQCBy ZXNldF9hcHBseV9lcnJvcl9jb250ZXh0X2luZm8odm9pZCkKIAlhcHBseV9lcnJvcl9jYWxsYmFj a19hcmcucmVtb3RlX2F0dG51bSA9IC0xOwogCXNldF9hcHBseV9lcnJvcl9jb250ZXh0X3hhY3Qo SW52YWxpZFRyYW5zYWN0aW9uSWQsIEludmFsaWRYTG9nUmVjUHRyKTsKIH0KKworLyogQXBwbHkg QmFja2dyb3VuZCBXb3JrZXIgbWFpbiBsb29wICovCitzdGF0aWMgdm9pZAorTG9naWNhbEFwcGx5 Qmd3TG9vcChzaG1fbXFfaGFuZGxlICptcWgsIHZvbGF0aWxlIFBhcmFsbGVsU3RhdGUgKnBzdCkK K3sKKwlzaG1fbXFfcmVzdWx0CQlzaG1xX3JlczsKKwlQR1BST0MJCQkJKnJlZ2lzdHJhbnQ7CisJ RXJyb3JDb250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2s7CisJWExvZ1JlY1B0cgkJCWxhc3RfcmVj ZWl2ZWQgPSBJbnZhbGlkWExvZ1JlY1B0cjsKKworCXJlZ2lzdHJhbnQgPSBCYWNrZW5kUGlkR2V0 UHJvYyhNeUJnd29ya2VyRW50cnktPmJnd19ub3RpZnlfcGlkKTsKKwlTZXRMYXRjaCgmcmVnaXN0 cmFudC0+cHJvY0xhdGNoKTsKKworCS8qCisJICogUHVzaCBhcHBseSBlcnJvciBjb250ZXh0IGNh bGxiYWNrLiBGaWVsZHMgd2lsbCBiZSBmaWxsZWQgZHVyaW5nCisJICogYXBwbHlpbmcgYSBjaGFu Z2UuCisJICovCisJZXJyY2FsbGJhY2suY2FsbGJhY2sgPSBhcHBseV9lcnJvcl9jYWxsYmFjazsK KwllcnJjYWxsYmFjay5wcmV2aW91cyA9IGVycm9yX2NvbnRleHRfc3RhY2s7CisJZXJyb3JfY29u dGV4dF9zdGFjayA9ICZlcnJjYWxsYmFjazsKKworCWZvciAoOzspCisJeworCQl2b2lkICpkYXRh OworCQlTaXplICBsZW47CisJCVN0cmluZ0luZm9EYXRhIHM7CisJCU1lbW9yeUNvbnRleHQJb2xk Y3R4OworCQlYTG9nUmVjUHRyCXN0YXJ0X2xzbjsKKwkJWExvZ1JlY1B0cgllbmRfbHNuOworCQlU aW1lc3RhbXBUeiBzZW5kX3RpbWU7CisKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkv KiBFbnN1cmUgd2UgYXJlIHJlYWRpbmcgdGhlIGRhdGEgaW50byBvdXIgbWVtb3J5IGNvbnRleHQu ICovCisJCW9sZGN0eCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhBcHBseU1lc3NhZ2VDb250ZXh0 KTsKKworCQlzaG1xX3JlcyA9IHNobV9tcV9yZWNlaXZlKG1xaCwgJmxlbiwgJmRhdGEsIGZhbHNl KTsKKworCQlpZiAoc2htcV9yZXMgIT0gU0hNX01RX1NVQ0NFU1MpCisJCQllcmVwb3J0KEVSUk9S LAorCQkJCQkoZXJyY29kZShFUlJDT0RFX09CSkVDVF9OT1RfSU5fUFJFUkVRVUlTSVRFX1NUQVRF KSwKKwkJCQkJIGVycm1zZygibG9zdCBjb25uZWN0aW9uIHRvIHRoZSBtYWluIGFwcGx5IHdvcmtl ciIpKSk7CisKKwkJaWYgKGxlbiA9PSAwKQorCQl7CisJCQllbG9nKExPRywgIltBcHBseSBCR1cg IyV1XSBnb3QgemVyby1sZW5ndGggbWVzc2FnZSwgc3RvcHBpbmciLCBwc3QtPm4pOworCQkJYnJl YWs7CisJCX0KKworCQlzLmN1cnNvciA9IDA7CisJCXMubWF4bGVuID0gLTE7CisJCXMuZGF0YSA9 IChjaGFyICopIGRhdGE7CisJCXMubGVuID0gbGVuOworCisJCS8qCisJCSAqIFdlIHVzZSBmaXJz dCBieXRlIG9mIG1lc3NhZ2UgZm9yIGFkZGl0aW9uYWwgY29tbXVuaWNhdGlvbiBiZXR3ZWVuCisJ CSAqIG1haW4gTG9naWNhbCByZXBsaWNhdGlvbiB3b3JrZXIgYW5kIGFwcGx5IGJnd29ya2Vycywg c28gaWYgaXQKKwkJICogZGlmZmVycyBmcm9tICd3JywgdGhlbiBwcm9jZXNzIGl0IGZpcnN0Lgor CQkgKi8KKwkJc3dpdGNoIChwcV9nZXRtc2dieXRlKCZzKSkKKwkJeworCQkJLyogRW5kIG1lc3Nh Z2Ugb2Ygc3RyZWFtaW5nIGNodW5rICovCisJCQljYXNlIExPR0lDQUxfUkVQX01TR19TVFJFQU1f U1RPUDoKKwkJCQllbG9nKExPRywgIltBcHBseSBCR1cgIyV1XSBlbmRlZCBwcm9jZXNzaW5nIHN0 cmVhbWluZyBjaHVuaywiCisJCQkJCQkgICJ3YWl0aW5nIG9uIHNobV9tcV9yZWNlaXZlIiwgcHN0 LT5uKTsKKworCQkJCWFwcGx5X2Jnd29ya2VyX3NldF9zdGF0ZShBUFBMWV9CR1dPUktFUl9SRUFE WSk7CisKKwkJCQlTZXRMYXRjaCgmcmVnaXN0cmFudC0+cHJvY0xhdGNoKTsKKworCQkJCWluX3N0 cmVhbWVkX3RyYW5zYWN0aW9uID0gZmFsc2U7CisJCQkJcGdzdGF0X3JlcG9ydF9hY3Rpdml0eShT VEFURV9JRExFLCBOVUxMKTsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJ3cnOgorCQkJCWJyZWFr OworCQkJZGVmYXVsdDoKKwkJCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBtZXNzYWdlIik7CisJ CQkJYnJlYWs7CisJCX0KKworCQlzdGFydF9sc24gPSBwcV9nZXRtc2dpbnQ2NCgmcyk7CisJCWVu ZF9sc24gPSBwcV9nZXRtc2dpbnQ2NCgmcyk7CisJCXNlbmRfdGltZSA9IHBxX2dldG1zZ2ludDY0 KCZzKTsKKworCQlpZiAobGFzdF9yZWNlaXZlZCA8IHN0YXJ0X2xzbikKKwkJCWxhc3RfcmVjZWl2 ZWQgPSBzdGFydF9sc247CisKKwkJaWYgKGxhc3RfcmVjZWl2ZWQgPCBlbmRfbHNuKQorCQkJbGFz dF9yZWNlaXZlZCA9IGVuZF9sc247CisKKwkJLyoKKwkJICogVE8gSU1QUk9WRTogRG8gd2UgbmVl ZCB0byBkaXNwbGF5IHRoZSBiZ3dvcmtlcidzIGluZm9ybWF0aW9uIGluCisJCSAqIHBnX3N0YXRf cmVwbGljYXRpb24gPworCQkgKi8KKwkJVXBkYXRlV29ya2VyU3RhdHMobGFzdF9yZWNlaXZlZCwg c2VuZF90aW1lLCBmYWxzZSk7CisKKwkJYXBwbHlfZGlzcGF0Y2goJnMpOworCisJCWlmIChDb25m aWdSZWxvYWRQZW5kaW5nKQorCQl7CisJCQlDb25maWdSZWxvYWRQZW5kaW5nID0gZmFsc2U7CisJ CQlQcm9jZXNzQ29uZmlnRmlsZShQR0NfU0lHSFVQKTsKKwkJfQorCisJCU1lbW9yeUNvbnRleHRT d2l0Y2hUbyhvbGRjdHgpOworCQlNZW1vcnlDb250ZXh0UmVzZXQoQXBwbHlNZXNzYWdlQ29udGV4 dCk7CisJfQorCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9yeUNvbnRleHQpOworCU1l bW9yeUNvbnRleHRSZXNldChBcHBseUNvbnRleHQpOworCisJLyogUG9wIHRoZSBlcnJvciBjb250 ZXh0IHN0YWNrICovCisJZXJyb3JfY29udGV4dF9zdGFjayA9IGVycmNhbGxiYWNrLnByZXZpb3Vz OworCisJZWxvZyhMT0csICJbQXBwbHkgQkdXICMldV0gZXhpdGluZyIsIHBzdC0+bik7CisKKwkv KiBTaWduYWwgbWFpbiBwcm9jZXNzIHRoYXQgd2UgYXJlIGRvbmUuICovCisJU2V0TGF0Y2goJnJl Z2lzdHJhbnQtPnByb2NMYXRjaCk7Cit9CisKKy8qCisgKiBTZXQgdGhlIGZhaWxlZCBmbGFnIHNv IHRoYXQgdGhlIG1haW4gYXBwbHkgd29ya2VyIGNhbiByZWFsaXplIHdlIGhhdmUKKyAqIHNodXRk b3duLgorICovCitzdGF0aWMgdm9pZAorQXBwbHlCZ3dTaHV0ZG93bihpbnQgY29kZSwgRGF0dW0g YXJnKQoreworCVNwaW5Mb2NrQWNxdWlyZSgmTXlQYXJhbGxlbFN0YXRlLT5tdXRleCk7CisJTXlQ YXJhbGxlbFN0YXRlLT5zdGF0ZSA9IEFQUExZX0JHV09SS0VSX0VYSVQ7CisJU3BpbkxvY2tSZWxl YXNlKCZNeVBhcmFsbGVsU3RhdGUtPm11dGV4KTsKKworCWRzbV9kZXRhY2goKGRzbV9zZWdtZW50 ICopIERhdHVtR2V0UG9pbnRlcihhcmcpKTsKK30KKworLyoKKyAqIEFwcGx5IEJhY2tncm91bmQg V29ya2VyIGVudHJ5IHBvaW50CisgKi8KK3ZvaWQKK0FwcGx5Qmd3b3JrZXJNYWluKERhdHVtIG1h aW5fYXJnKQoreworCXZvbGF0aWxlIFBhcmFsbGVsU3RhdGUgKnBzdDsKKworCWRzbV9oYW5kbGUJ CQloYW5kbGU7CisJZHNtX3NlZ21lbnQJCQkqc2VnOworCXNobV90b2MJCQkJKnRvYzsKKwlzaG1f bXEJCQkJKm1xOworCXNobV9tcV9oYW5kbGUJCSptcWg7CisJTWVtb3J5Q29udGV4dAkJIG9sZGNv bnRleHQ7CisJUmVwT3JpZ2luSWQJCQlvcmlnaW5pZDsKKwlpbnQJCQl3b3JrZXJfc2xvdCA9IERh dHVtR2V0SW50MzIobWFpbl9hcmcpOworCWNoYXIJCW9yaWdpbm5hbWVbTkFNRURBVEFMRU5dOwor CisJLyogQXR0YWNoIHRvIHNsb3QgKi8KKwlsb2dpY2FscmVwX3dvcmtlcl9hdHRhY2god29ya2Vy X3Nsb3QpOworCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKFRvcE1lbW9yeUNvbnRleHQpOworCisJ LyogTG9hZCB0aGUgc3Vic2NyaXB0aW9uIGludG8gcGVyc2lzdGVudCBtZW1vcnkgY29udGV4dC4g Ki8KKwlBcHBseUNvbnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoVG9wTWVtb3J5Q29udGV4 dCwKKwkJCQkJCQkJCQkgIkFwcGx5Q29udGV4dCIsCisJCQkJCQkJCQkJIEFMTE9DU0VUX0RFRkFV TFRfU0laRVMpOworCisJLyoKKwkgKiBJbml0IHRoZSBBcHBseU1lc3NhZ2VDb250ZXh0IHdoaWNo IHdlIGNsZWFuIHVwIGFmdGVyIGVhY2ggcmVwbGljYXRpb24KKwkgKiBwcm90b2NvbCBtZXNzYWdl LgorCSAqLworCUFwcGx5TWVzc2FnZUNvbnRleHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQXBw bHlDb250ZXh0LAorCQkJCQkJCQkJCQkJIkFwcGx5TWVzc2FnZUNvbnRleHQiLAorCQkJCQkJCQkJ CQkJQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisKKwkvKiBTZXR1cCBzaWduYWwgaGFuZGxpbmcg Ki8KKwlwcXNpZ25hbChTSUdIVVAsIFNpZ25hbEhhbmRsZXJGb3JDb25maWdSZWxvYWQpOworCXBx c2lnbmFsKFNJR1RFUk0sIGRpZSk7CisJQmFja2dyb3VuZFdvcmtlclVuYmxvY2tTaWduYWxzKCk7 CisKKwkvKgorCSAqIENvbm5lY3QgdG8gdGhlIGR5bmFtaWMgc2hhcmVkIG1lbW9yeSBzZWdtZW50 LgorCSAqCisJICogVGhlIGJhY2tlbmQgdGhhdCByZWdpc3RlcmVkIHRoaXMgd29ya2VyIHBhc3Nl ZCB1cyB0aGUgSUQgb2YgYSBzaGFyZWQKKwkgKiBtZW1vcnkgc2VnbWVudCB0byB3aGljaCB3ZSBt dXN0IGF0dGFjaCBmb3IgZnVydGhlciBpbnN0cnVjdGlvbnMuICBJbgorCSAqIG9yZGVyIHRvIGF0 dGFjaCB0byBkeW5hbWljIHNoYXJlZCBtZW1vcnksIHdlIG5lZWQgYSByZXNvdXJjZSBvd25lci4K KwkgKiBPbmNlIHdlJ3ZlIG1hcHBlZCB0aGUgc2VnbWVudCBpbiBvdXIgYWRkcmVzcyBzcGFjZSwg YXR0YWNoIHRvIHRoZSB0YWJsZQorCSAqIG9mIGNvbnRlbnRzIHNvIHdlIGNhbiBsb2NhdGUgdGhl IHZhcmlvdXMgZGF0YSBzdHJ1Y3R1cmVzIHdlJ2xsIG5lZWQgdG8KKwkgKiBmaW5kIHdpdGhpbiB0 aGUgc2VnbWVudC4KKwkgKi8KKwlDdXJyZW50UmVzb3VyY2VPd25lciA9IFJlc291cmNlT3duZXJD cmVhdGUoTlVMTCwgIkxvZ2ljYWwgYXBwbHkgd29ya2VyIik7CisJbWVtY3B5KCZoYW5kbGUsIE15 Qmd3b3JrZXJFbnRyeS0+Ymd3X2V4dHJhLCBzaXplb2YoZHNtX2hhbmRsZSkpOworCXNlZyA9IGRz bV9hdHRhY2goaGFuZGxlKTsKKwlpZiAoc2VnID09IE5VTEwpCisJCWVyZXBvcnQoRVJST1IsCisJ CQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJ CQkJIGVycm1zZygidW5hYmxlIHRvIG1hcCBkeW5hbWljIHNoYXJlZCBtZW1vcnkgc2VnbWVudCIp KSk7CisJdG9jID0gc2htX3RvY19hdHRhY2goUEdfTE9HSUNBTF9BUFBMWV9TSE1fTUFHSUMsIGRz bV9zZWdtZW50X2FkZHJlc3Moc2VnKSk7CisJaWYgKHRvYyA9PSBOVUxMKQorCQllcmVwb3J0KEVS Uk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RB VEUpLAorCQkJCSBlcnJtc2coImJhZCBtYWdpYyBudW1iZXIgaW4gZHluYW1pYyBzaGFyZWQgbWVt b3J5IHNlZ21lbnQiKSkpOworCisJYmVmb3JlX3NobWVtX2V4aXQoQXBwbHlCZ3dTaHV0ZG93biwg UG9pbnRlckdldERhdHVtKHNlZykpOworCisJLyogTG9vayB1cCB0aGUgcGFyYWxsZWwgc3RhdGUu ICovCisJcHN0ID0gc2htX3RvY19sb29rdXAodG9jLCAwLCBmYWxzZSk7CisJTXlQYXJhbGxlbFN0 YXRlID0gcHN0OworCisJLyoKKwkgKiBBdHRhY2ggdG8gdGhlIG1lc3NhZ2UgcXVldWUuCisJICov CisJbXEgPSBzaG1fdG9jX2xvb2t1cCh0b2MsIDEsIGZhbHNlKTsKKwlzaG1fbXFfc2V0X3JlY2Vp dmVyKG1xLCBNeVByb2MpOworCW1xaCA9IHNobV9tcV9hdHRhY2gobXEsIHNlZywgTlVMTCk7CisK KwkvKiBDb25uZWN0IHRvIG91ciBkYXRhYmFzZS4gKi8KKwlCYWNrZ3JvdW5kV29ya2VySW5pdGlh bGl6ZUNvbm5lY3Rpb25CeU9pZChNeUxvZ2ljYWxSZXBXb3JrZXItPmRiaWQsCisJCQkJCQkJCQkJ CSAgTXlMb2dpY2FsUmVwV29ya2VyLT51c2VyaWQsCisJCQkJCQkJCQkJCSAgMCk7CisKKwkvKgor CSAqIFNldCB0aGUgY2xpZW50IGVuY29kaW5nIHRvIHRoZSBkYXRhYmFzZSBlbmNvZGluZywgc2lu Y2UgdGhhdCBpcyB3aGF0CisJICogdGhlIGxlYWRlciB3aWxsIGV4cGVjdC4KKwkgKi8KKwlTZXRD bGllbnRFbmNvZGluZyhHZXREYXRhYmFzZUVuY29kaW5nKCkpOworCisJc3RyZWFtX3hpZCA9IHBz dC0+c3RyZWFtX3hpZDsKKworCVN0YXJ0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisJb2xkY29udGV4 dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhBcHBseUNvbnRleHQpOworCisJTXlTdWJzY3JpcHRp b24gPSBHZXRTdWJzY3JpcHRpb24oTXlMb2dpY2FsUmVwV29ya2VyLT5zdWJpZCwgdHJ1ZSk7CisJ aWYgKCFNeVN1YnNjcmlwdGlvbikKKwl7CisJCWVyZXBvcnQoTE9HLAorCQkJCShlcnJtc2coImxv Z2ljYWwgcmVwbGljYXRpb24gYXBwbHkgd29ya2VyIGZvciBzdWJzY3JpcHRpb24gJXUgd2lsbCBu b3QgIgorCQkJCQkJInN0YXJ0IGJlY2F1c2UgdGhlIHN1YnNjcmlwdGlvbiB3YXMgcmVtb3ZlZCBk dXJpbmcgc3RhcnR1cCIsCisJCQkJCQlNeUxvZ2ljYWxSZXBXb3JrZXItPnN1YmlkKSkpOworCQlw cm9jX2V4aXQoMCk7CisJfQorCisJTXlTdWJzY3JpcHRpb25WYWxpZCA9IHRydWU7CisJTWVtb3J5 Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCisJLyogU2V0dXAgc3luY2hyb25vdXMgY29t bWl0IGFjY29yZGluZyB0byB0aGUgdXNlcidzIHdpc2hlcyAqLworCVNldENvbmZpZ09wdGlvbigi c3luY2hyb25vdXNfY29tbWl0IiwgTXlTdWJzY3JpcHRpb24tPnN5bmNjb21taXQsCisJCQkJCVBH Q19CQUNLRU5ELCBQR0NfU19PVkVSUklERSk7CisKKwkvKiBLZWVwIHVzIGluZm9ybWVkIGFib3V0 IHN1YnNjcmlwdGlvbiBjaGFuZ2VzLiAqLworCUNhY2hlUmVnaXN0ZXJTeXNjYWNoZUNhbGxiYWNr KFNVQlNDUklQVElPTk9JRCwKKwkJCQkJCQkJICBzdWJzY3JpcHRpb25fY2hhbmdlX2NiLAorCQkJ CQkJCQkgIChEYXR1bSkgMCk7CisKKwlDb21taXRUcmFuc2FjdGlvbkNvbW1hbmQoKTsKKworCS8q IFNldHVwIHJlcGxpY2F0aW9uIG9yaWdpbiB0cmFja2luZy4gKi8KKwlTdGFydFRyYW5zYWN0aW9u Q29tbWFuZCgpOworCXNucHJpbnRmKG9yaWdpbm5hbWUsIHNpemVvZihvcmlnaW5uYW1lKSwgInBn XyV1IiwgTXlTdWJzY3JpcHRpb24tPm9pZCk7CisJb3JpZ2luaWQgPSByZXBsb3JpZ2luX2J5X25h bWUob3JpZ2lubmFtZSwgdHJ1ZSk7CisJaWYgKCFPaWRJc1ZhbGlkKG9yaWdpbmlkKSkKKwkJb3Jp Z2luaWQgPSByZXBsb3JpZ2luX2NyZWF0ZShvcmlnaW5uYW1lKTsKKwlyZXBsb3JpZ2luX3Nlc3Np b25fc2V0dXAob3JpZ2luaWQsIGZhbHNlKTsKKwlyZXBsb3JpZ2luX3Nlc3Npb25fb3JpZ2luID0g b3JpZ2luaWQ7CisJQ29tbWl0VHJhbnNhY3Rpb25Db21tYW5kKCk7CisKKwkvKgorCSAqIEFsbG9j YXRlIHRoZSBvcmlnaW4gbmFtZSBpbiBsb25nLWxpdmVkIGNvbnRleHQgZm9yIGVycm9yIGNvbnRl eHQKKwkgKiBtZXNzYWdlLgorCSAqLworCWFwcGx5X2Vycm9yX2NhbGxiYWNrX2FyZy5vcmlnaW5f bmFtZSA9IE1lbW9yeUNvbnRleHRTdHJkdXAoQXBwbHlDb250ZXh0LAorCQkJCQkJCQkJCQkJCQkJ ICAgb3JpZ2lubmFtZSk7CisKKwkvKgorCSAqIEluZGljYXRlIHRoYXQgd2UncmUgZnVsbHkgaW5p dGlhbGl6ZWQgYW5kIHJlYWR5IHRvIGJlZ2luIHRoZSBtYWluIHBhcnQKKwkgKiBvZiB0aGUgYXBw bHkgb3BlcmF0aW9uLgorCSAqLworCWFwcGx5X2Jnd29ya2VyX3NldF9zdGF0ZShBUFBMWV9CR1dP UktFUl9BVFRBQ0hFRCk7CisKKwllbG9nKExPRywgIltBcHBseSBCR1cgIyV1XSBzdGFydGVkIiwg cHN0LT5uKTsKKworCVBHX1RSWSgpOworCXsKKwkJTG9naWNhbEFwcGx5Qmd3TG9vcChtcWgsIHBz dCk7CisJfQorCVBHX0NBVENIKCk7CisJeworCQkvKgorCQkgKiBSZXBvcnQgdGhlIHdvcmtlciBm YWlsZWQgd2hpbGUgYXBwbHlpbmcgc3RyZWFtaW5nIHRyYW5zYWN0aW9uCisJCSAqIGNoYW5nZXMu IEFib3J0IHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIHNvIHRoYXQgdGhlIHN0YXRzIG1lc3NhZ2Ug aXMKKwkJICogc2VudCBpbiBhbiBpZGxlIHN0YXRlLgorCQkgKi8KKwkJQWJvcnRPdXRPZkFueVRy YW5zYWN0aW9uKCk7CisJCXBnc3RhdF9yZXBvcnRfc3Vic2NyaXB0aW9uX2Vycm9yKE15U3Vic2Ny aXB0aW9uLT5vaWQsIGZhbHNlKTsKKworCQlQR19SRV9USFJPVygpOworCX0KKwlQR19FTkRfVFJZ KCk7CisKKwkvKgorCSAqIFdlJ3JlIGRvbmUuICBFeHBsaWNpdGx5IGRldGFjaCB0aGUgc2hhcmVk IG1lbW9yeSBzZWdtZW50IHNvIHRoYXQgd2UKKwkgKiBkb24ndCBnZXQgYSByZXNvdXJjZSBsZWFr IHdhcm5pbmcgYXQgY29tbWl0IHRpbWUuICBUaGlzIHdpbGwgZmlyZSBhbnkKKwkgKiBvbl9kc21f ZGV0YWNoIGNhbGxiYWNrcyB3ZSd2ZSByZWdpc3RlcmVkLCBhcyB3ZWxsLiAgT25jZSB0aGF0J3Mg ZG9uZSwKKwkgKiB3ZSBjYW4gZ28gYWhlYWQgYW5kIGV4aXQuCisJICovCisJZHNtX2RldGFjaChz ZWcpOworCXByb2NfZXhpdCgwKTsKK30KKworLyoKKyAqIFNldCB1cCBhIGR5bmFtaWMgc2hhcmVk IG1lbW9yeSBzZWdtZW50LgorICoKKyAqIFdlIHNldCB1cCBhIGNvbnRyb2wgcmVnaW9uIHRoYXQg Y29udGFpbnMgYSBQYXJhbGxlbFN0YXRlLAorICogcGx1cyBvbmUgcmVnaW9uIHBlciBtZXNzYWdl IHF1ZXVlLiBUaGVyZSBhcmUgYXMgbWFueSBtZXNzYWdlIHF1ZXVlcyBhcworICogdGhlIG51bWJl ciBvZiB3b3JrZXJzLgorICovCitzdGF0aWMgdm9pZAorYXBwbHlfYmd3b3JrZXJfc2V0dXBfZHNt KFdvcmtlclN0YXRlICp3c3RhdGUpCit7CisJc2htX3RvY19lc3RpbWF0b3IJIGU7CisJaW50CQkJ CQkgdG9jX2tleSA9IDA7CisJU2l6ZQkJCQkgc2Vnc2l6ZTsKKwlkc21fc2VnbWVudAkJCSpzZWc7 CisJc2htX3RvYwkJCQkqdG9jOworCVBhcmFsbGVsU3RhdGUJCSpwc3Q7CisJc2htX21xCQkJCSpt cTsKKwlpbnQ2NAkJCQkgcXVldWVfc2l6ZSA9IDE2MDAwMDAwMDsgLyogMTYgTUIgZm9yIG5vdyAq LworCisJLyoKKwkgKiBFc3RpbWF0ZSBob3cgbXVjaCBzaGFyZWQgbWVtb3J5IHdlIG5lZWQuCisJ ICoKKwkgKiBCZWNhdXNlIHRoZSBUT0MgbWFjaGluZXJ5IG1heSBjaG9vc2UgdG8gaW5zZXJ0IHBh ZGRpbmcgb2Ygb2RkbHktc2l6ZWQKKwkgKiByZXF1ZXN0cywgd2UgbXVzdCBlc3RpbWF0ZSBlYWNo IGNodW5rIHNlcGFyYXRlbHkuCisJICoKKwkgKiBXZSBuZWVkIG9uZSBrZXkgdG8gcmVnaXN0ZXIg dGhlIGxvY2F0aW9uIG9mIHRoZSBoZWFkZXIsIGFuZCB3ZSBuZWVkCisJICogbndvcmtlcnMga2V5 cyB0byB0cmFjayB0aGUgbG9jYXRpb25zIG9mIHRoZSBtZXNzYWdlIHF1ZXVlcy4KKwkgKi8KKwlz aG1fdG9jX2luaXRpYWxpemVfZXN0aW1hdG9yKCZlKTsKKwlzaG1fdG9jX2VzdGltYXRlX2NodW5r KCZlLCBzaXplb2YoUGFyYWxsZWxTdGF0ZSkpOworCXNobV90b2NfZXN0aW1hdGVfY2h1bmsoJmUs IChTaXplKSBxdWV1ZV9zaXplKTsKKworCXNobV90b2NfZXN0aW1hdGVfa2V5cygmZSwgMSArIDEp OworCXNlZ3NpemUgPSBzaG1fdG9jX2VzdGltYXRlKCZlKTsKKworCS8qIENyZWF0ZSB0aGUgc2hh cmVkIG1lbW9yeSBzZWdtZW50IGFuZCBlc3RhYmxpc2ggYSB0YWJsZSBvZiBjb250ZW50cy4gKi8K KwlzZWcgPSBkc21fY3JlYXRlKHNobV90b2NfZXN0aW1hdGUoJmUpLCAwKTsKKwl0b2MgPSBzaG1f dG9jX2NyZWF0ZShQR19MT0dJQ0FMX0FQUExZX1NITV9NQUdJQywgZHNtX3NlZ21lbnRfYWRkcmVz cyhzZWcpLAorCQkJCQkJIHNlZ3NpemUpOworCisJLyogU2V0IHVwIHRoZSBoZWFkZXIgcmVnaW9u LiAqLworCXBzdCA9IHNobV90b2NfYWxsb2NhdGUodG9jLCBzaXplb2YoUGFyYWxsZWxTdGF0ZSkp OworCVNwaW5Mb2NrSW5pdCgmcHN0LT5tdXRleCk7CisJcHN0LT5zdGF0ZSA9IEFQUExZX0JHV09S S0VSX0JVU1k7CisJcHN0LT5zdHJlYW1feGlkID0gc3RyZWFtX3hpZDsKKwlwc3QtPm4gPSBsaXN0 X2xlbmd0aChBcHBseVdvcmtlcnNMaXN0KSArIDE7CisKKwlzaG1fdG9jX2luc2VydCh0b2MsIHRv Y19rZXkrKywgcHN0KTsKKworCS8qIFNldCB1cCBvbmUgbWVzc2FnZSBxdWV1ZSBwZXIgd29ya2Vy LCBwbHVzIG9uZS4gKi8KKwltcSA9IHNobV9tcV9jcmVhdGUoc2htX3RvY19hbGxvY2F0ZSh0b2Ms IChTaXplKSBxdWV1ZV9zaXplKSwKKwkJCQkJCShTaXplKSBxdWV1ZV9zaXplKTsKKwlzaG1fdG9j X2luc2VydCh0b2MsIHRvY19rZXkrKywgbXEpOworCXNobV9tcV9zZXRfc2VuZGVyKG1xLCBNeVBy b2MpOworCisJLyogQXR0YWNoIHRoZSBxdWV1ZXMuICovCisJd3N0YXRlLT5tcV9oYW5kbGUgPSBz aG1fbXFfYXR0YWNoKG1xLCBzZWcsIE5VTEwpOworCisJLyogUmV0dXJuIHJlc3VsdHMgdG8gY2Fs bGVyLiAqLworCXdzdGF0ZS0+ZHNtX3NlZyA9IHNlZzsKKwl3c3RhdGUtPnBzdGF0ZSA9IHBzdDsK K30KKworLyoKKyAqIFN0YXJ0IGFwcGx5IHdvcmtlciBiYWNrZ3JvdW5kIHdvcmtlciBwcm9jZXNz IGFuZCBhbGxvY2F0IHNoYXJlZCBtZW1vcnkgZm9yCisgKiBpdC4KKyAqLworc3RhdGljIFdvcmtl clN0YXRlICoKK2FwcGx5X2Jnd29ya2VyX3NldHVwKHZvaWQpCit7CisJTWVtb3J5Q29udGV4dAkJ b2xkY29udGV4dDsKKwlib29sCQkJCWxhdW5jaGVkOworCVdvcmtlclN0YXRlCQkgICAqd3N0YXRl OworCisJZWxvZyhMT0csICJzZXR0aW5nIHVwIGFwcGx5IHdvcmtlciAjJXUiLCBsaXN0X2xlbmd0 aChBcHBseVdvcmtlcnNMaXN0KSArIDEpOworCisJb2xkY29udGV4dCA9IE1lbW9yeUNvbnRleHRT d2l0Y2hUbyhBcHBseUNvbnRleHQpOworCisJd3N0YXRlID0gKFdvcmtlclN0YXRlICopIHBhbGxv YzAoc2l6ZW9mKFdvcmtlclN0YXRlKSk7CisKKwkvKiBTZXR1cCBzaGFyZWQgbWVtb3J5ICovCisJ YXBwbHlfYmd3b3JrZXJfc2V0dXBfZHNtKHdzdGF0ZSk7CisKKwlsYXVuY2hlZCA9IGxvZ2ljYWxy ZXBfd29ya2VyX2xhdW5jaChNeUxvZ2ljYWxSZXBXb3JrZXItPmRiaWQsCisJCQkJCQkJCQkJTXlT dWJzY3JpcHRpb24tPm9pZCwKKwkJCQkJCQkJCQlNeVN1YnNjcmlwdGlvbi0+bmFtZSwKKwkJCQkJ CQkJCQlNeUxvZ2ljYWxSZXBXb3JrZXItPnVzZXJpZCwKKwkJCQkJCQkJCQlJbnZhbGlkT2lkLAor CQkJCQkJCQkJCWRzbV9zZWdtZW50X2hhbmRsZSh3c3RhdGUtPmRzbV9zZWcpKTsKKworCWlmIChs YXVuY2hlZCkKKwl7CisJCS8qIFdhaXQgZm9yIHdvcmtlciB0byBiZWNvbWUgcmVhZHkuICovCisJ CWFwcGx5X2Jnd29ya2VyX3dhaXRfZm9yKHdzdGF0ZSwgQVBQTFlfQkdXT1JLRVJfQVRUQUNIRUQp OworCisJCUFwcGx5V29ya2Vyc0xpc3QgPSBsYXBwZW5kKEFwcGx5V29ya2Vyc0xpc3QsIHdzdGF0 ZSk7CisJfQorCWVsc2UKKwl7CisJCXBmcmVlKHdzdGF0ZSk7CisJCXdzdGF0ZSA9IE5VTEw7CisJ fQorCisJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCisJcmV0dXJuIHdzdGF0 ZTsKK30KKworLyoKKyAqIFNlbmQgdGhlIGRhdGEgdG8gdGhlIHNwZWNpZmllZCBhcHBseSBiZ3dv cmtlciB2aWEgc2hhcmVkLW1lbW9yeSBxdWV1ZS4KKyAqLworc3RhdGljIHZvaWQKK2FwcGx5X2Jn d29ya2VyX3NlbmRfZGF0YShXb3JrZXJTdGF0ZSAqd3N0YXRlLCBTaXplIG5ieXRlcywgY29uc3Qg dm9pZCAqZGF0YSkKK3sKKwlzaG1fbXFfcmVzdWx0IHJlc3VsdDsKKworCXJlc3VsdCA9IHNobV9t cV9zZW5kKHdzdGF0ZS0+bXFfaGFuZGxlLCBuYnl0ZXMsIGRhdGEsIGZhbHNlLCB0cnVlKTsKKwor CWlmIChyZXN1bHQgIT0gU0hNX01RX1NVQ0NFU1MpCisJCWVyZXBvcnQoRVJST1IsCisJCQkJKGVy cmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BSRVJFUVVJU0lURV9TVEFURSksCisJCQkJIGVy cm1zZygiY291bGQgbm90IHNlbmQgdHVwbGVzIHRvIHNoYXJlZC1tZW1vcnkgcXVldWUiKSkpOwor fQorCisvKgorICogV2FpdCB1bnRpbCB0aGUgc3RhdGUgb2YgYXBwbHkgYmFja2dyb3VuZCB3b3Jr ZXIgcmVhY2ggdGhlICd3YWl0X2Zvcl9zdGF0ZScKKyAqLworc3RhdGljIHZvaWQKK2FwcGx5X2Jn d29ya2VyX3dhaXRfZm9yKFdvcmtlclN0YXRlICp3c3RhdGUsIGNoYXIgd2FpdF9mb3Jfc3RhdGUp Cit7CisJZm9yICg7OykKKwl7CisJCWNoYXIgc3RhdHVzOworCisJCS8qIElmIHRoZSB3b3JrZXIg aXMgcmVhZHksIHdlIGhhdmUgc3VjY2VlZGVkLiAqLworCQlTcGluTG9ja0FjcXVpcmUoJndzdGF0 ZS0+cHN0YXRlLT5tdXRleCk7CisJCXN0YXR1cyA9IHdzdGF0ZS0+cHN0YXRlLT5zdGF0ZTsKKwkJ U3BpbkxvY2tSZWxlYXNlKCZ3c3RhdGUtPnBzdGF0ZS0+bXV0ZXgpOworCisJCWlmIChzdGF0dXMg PT0gd2FpdF9mb3Jfc3RhdGUpCisJCQlicmVhazsKKworCQkvKiBJZiBhbnkgd29ya2VycyAob3Ig dGhlIHBvc3RtYXN0ZXIpIGhhdmUgZGllZCwgd2UgaGF2ZSBmYWlsZWQuICovCisJCWlmIChzdGF0 dXMgPT0gQVBQTFlfQkdXT1JLRVJfRVhJVCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJj b2RlKEVSUkNPREVfT0JKRUNUX05PVF9JTl9QUkVSRVFVSVNJVEVfU1RBVEUpLAorCQkJCQkgZXJy bXNnKCJCYWNrZ3JvdW5kIHdvcmtlciAldSBmYWlsZWQgdG8gYXBwbHkgdHJhbnNhY3Rpb24gJXUi LAorCQkJCQkJCXdzdGF0ZS0+cHN0YXRlLT5uLCB3c3RhdGUtPnBzdGF0ZS0+c3RyZWFtX3hpZCkp KTsKKworCQkvKiBXYWl0IHRvIGJlIHNpZ25hbGxlZC4gKi8KKwkJV2FpdExhdGNoKE15TGF0Y2gs IFdMX0xBVENIX1NFVCB8IFdMX0VYSVRfT05fUE1fREVBVEgsIDAsCisJCQkJCQkJV0FJVF9FVkVO VF9MT0dJQ0FMX0FQUExZX1dPUktFUl9SRUFEWSk7CisKKwkJLyogUmVzZXQgdGhlIGxhdGNoIHNv IHdlIGRvbid0IHNwaW4uICovCisJCVJlc2V0TGF0Y2goTXlMYXRjaCk7CisKKwkJLyogQW4gaW50 ZXJydXB0IG1heSBoYXZlIG9jY3VycmVkIHdoaWxlIHdlIHdlcmUgd2FpdGluZy4gKi8KKwkJQ0hF Q0tfRk9SX0lOVEVSUlVQVFMoKTsKKwl9Cit9CisKKy8qCisgKiBDaGVjayB0aGUgc3RhdHVzIG9m IHdvcmtlcnMgYW5kIHJlcG9ydCBhbiBlcnJvciBpZiBhbnkgYXBwbHkgYmFja2dyb3VuZAorICog d29ya2VyIGhhcyBleGl0ZWQgdW5leHBlY3RlZGx5LgorICoKKyAqIEV4aXQgaWYgYW55IHJlbGF0 aW9uIGlzIG5vdCBpbiB0aGUgUkVBRFkgc3RhdGUgYW5kIGlmIGFueSB3b3JrZXIgaXMgaGFuZGxp bmcKKyAqIHRoZSBzdHJlYW1pbmcgdHJhbnNhY3Rpb24gYXQgdGhlIHNhbWUgdGltZS4gQmVjYXVz ZSBmb3Igc3RyZWFtaW5nCisgKiB0cmFuc2FjdGlvbnMgdGhhdCBpcyBiZWluZyBhcHBsaWVkIGlu IGFwcGx5IGJnd29ya2VyLCB3ZSBjYW5ub3QgZGVjaWRlIHdoZXRoZXIgdG8KKyAqIGFwcGx5IHRo ZSBjaGFuZ2UgZm9yIGEgcmVsYXRpb24gdGhhdCBpcyBub3QgaW4gdGhlIFJFQURZIHN0YXRlIChz ZWUKKyAqIHNob3VsZF9hcHBseV9jaGFuZ2VzX2Zvcl9yZWwpIGFzIHdlIHdvbid0IGtub3cgcmVt b3RlX2ZpbmFsX2xzbiBieSB0aGF0CisgKiB0aW1lLgorICovCitzdGF0aWMgdm9pZAorYXBwbHlf Ymd3b3JrZXJfY2hlY2tfc3RhdHVzKHZvaWQpCit7CisJTGlzdENlbGwgKmxjOworCisJaWYgKGFt X2FwcGx5X2Jnd29ya2VyKCkgfHwgTXlTdWJzY3JpcHRpb24tPnN0cmVhbSAhPSBTVUJTVFJFQU1f QVBQTFkpCisJCXJldHVybjsKKworCWZvcmVhY2gobGMsIEFwcGx5V29ya2Vyc0xpc3QpCisJewor CQlXb3JrZXJTdGF0ZSAqd3N0YXRlID0gKFdvcmtlclN0YXRlICopIGxmaXJzdChsYyk7CisKKwkJ LyoKKwkJICogV2UgZG9uJ3QgbG9jayBoZXJlIGFzIGluIHRoZSB3b3JzdCBjYXNlIHdlIHdpbGwg anVzdCBkZXRlY3QgdGhlCisJCSAqIGZhaWx1cmUgb2Ygd29ya2VyIGEgYml0IGxhdGVyLgorCQkg Ki8KKwkJaWYgKHdzdGF0ZS0+cHN0YXRlLT5zdGF0ZSA9PSBBUFBMWV9CR1dPUktFUl9FWElUKQor CQkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9PQkpFQ1RfTk9UX0lOX1BS RVJFUVVJU0lURV9TVEFURSksCisJCQkJCSBlcnJtc2coIkJhY2tncm91bmQgd29ya2VyICV1IGV4 aXRlZCB1bmV4cGVjdGVkbHkiLAorCQkJCQkJCXdzdGF0ZS0+cHN0YXRlLT5uKSkpOworCX0KKwor CWlmIChsaXN0X2xlbmd0aChBcHBseVdvcmtlcnNJZGxlTGlzdCkgIT0gbGlzdF9sZW5ndGgoQXBw bHlXb3JrZXJzTGlzdCkgJiYKKwkJIUFsbFRhYmxlc3luY3NSZWFkeSgpKQorCXsKKwkJZXJlcG9y dChMT0csCisJCQkJKGVycm1zZygibG9naWNhbCByZXBsaWNhdGlvbiBhcHBseSB3b3JrZXJzIGZv ciBzdWJzY3JpcHRpb24gXCIlc1wiIHdpbGwgcmVzdGFydCIsCisJCQkJCQlNeVN1YnNjcmlwdGlv bi0+bmFtZSksCisJCQkJIGVycmRldGFpbCgiQ2Fubm90IHN0YXJ0IHRhYmxlIHN5bmNocm9uaXph dGlvbiB3aGlsZSBiZ3dvcmtlcnMgYXJlICIKKwkJCQkJCSAgICJoYW5kbGluZyBzdHJlYW1lZCBy ZXBsaWNhdGlvbiB0cmFuc2FjdGlvbiIpKSk7CisKKwkJcHJvY19leGl0KDApOworCX0KK30KKwor LyogU2V0IHRoZSBzdGF0ZSBvZiBhcHBseSBiYWNrZ3JvdW5kIHdvcmtlciAqLworc3RhdGljIHZv aWQKK2FwcGx5X2Jnd29ya2VyX3NldF9zdGF0ZShjaGFyIHN0YXRlKQoreworCWlmICghYW1fYXBw bHlfYmd3b3JrZXIoKSkKKwkJcmV0dXJuOworCisJZWxvZyhMT0csICJbQXBwbHkgQkdXICMldV0g c2V0IHN0YXRlIHRvICVjIiwKKwkJIE15UGFyYWxsZWxTdGF0ZS0+biwgc3RhdGUpOworCisJU3Bp bkxvY2tBY3F1aXJlKCZNeVBhcmFsbGVsU3RhdGUtPm11dGV4KTsKKwlNeVBhcmFsbGVsU3RhdGUt PnN0YXRlID0gc3RhdGU7CisJU3BpbkxvY2tSZWxlYXNlKCZNeVBhcmFsbGVsU3RhdGUtPm11dGV4 KTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQu YyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnQuYwppbmRleCA4N2MxNWI5 Li4yNGE2ZmFjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2 ZW50LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWN0aXZpdHkvd2FpdF9ldmVudC5jCkBAIC0z ODgsNiArMzg4LDkgQEAgcGdzdGF0X2dldF93YWl0X2lwYyhXYWl0RXZlbnRJUEMgdykKIAkJY2Fz ZSBXQUlUX0VWRU5UX0hBU0hfR1JPV19CVUNLRVRTX1JFSU5TRVJUOgogCQkJZXZlbnRfbmFtZSA9 ICJIYXNoR3Jvd0J1Y2tldHNSZWluc2VydCI7CiAJCQlicmVhazsKKwkJY2FzZSBXQUlUX0VWRU5U X0xPR0lDQUxfQVBQTFlfV09SS0VSX1JFQURZOgorCQkJZXZlbnRfbmFtZSA9ICJMb2dpY2FsQXBw bHlXb3JrZXJSZWFkeSI7CisJCQlicmVhazsKIAkJY2FzZSBXQUlUX0VWRU5UX0xPR0lDQUxfU1lO Q19EQVRBOgogCQkJZXZlbnRfbmFtZSA9ICJMb2dpY2FsU3luY0RhdGEiOwogCQkJYnJlYWs7CmRp ZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jpbi9wZ19kdW1wL3Bn X2R1bXAuYwppbmRleCA3ODZkNTkyLi5hNDc2ODg1IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1 bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMKQEAgLTQ0NDksNyAr NDQ0OSw3IEBAIGdldFN1YnNjcmlwdGlvbnMoQXJjaGl2ZSAqZm91dCkKIAlpZiAoZm91dC0+cmVt b3RlVmVyc2lvbiA+PSAxNDAwMDApCiAJCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1ZXJ5LCAiIHMu c3Vic3RyZWFtLFxuIik7CiAJZWxzZQotCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiBm YWxzZSBBUyBzdWJzdHJlYW0sXG4iKTsKKwkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIg J2YnIEFTIHN1YnN0cmVhbSxcbiIpOwogCiAJaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTUw MDAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwKQEAgLTQ1NzksOCArNDU3OSwxMCBA QCBkdW1wU3Vic2NyaXB0aW9uKEFyY2hpdmUgKmZvdXQsIGNvbnN0IFN1YnNjcmlwdGlvbkluZm8g KnN1YmluZm8pCiAJaWYgKHN0cmNtcChzdWJpbmZvLT5zdWJiaW5hcnksICJ0IikgPT0gMCkKIAkJ YXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIsIGJpbmFyeSA9IHRydWUiKTsKIAotCWlmIChz dHJjbXAoc3ViaW5mby0+c3Vic3RyZWFtLCAiZiIpICE9IDApCisJaWYgKHN0cmNtcChzdWJpbmZv LT5zdWJzdHJlYW0sICJvIikgPT0gMCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIocXVlcnksICIs IHN0cmVhbWluZyA9IG9uIik7CisJZWxzZSBpZiAoc3RyY21wKHN1YmluZm8tPnN1YnN0cmVhbSwg ImEiKSA9PSAwKQorCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiwgc3RyZWFtaW5nID0g YXBwbHkiKTsKIAogCWlmIChzdHJjbXAoc3ViaW5mby0+c3VidHdvcGhhc2VzdGF0ZSwgdHdvX3Bo YXNlX2Rpc2FibGVkKSAhPSAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwgIiwgdHdv X3BoYXNlID0gb24iKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfc3Vic2Ny aXB0aW9uLmggYi9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3N1YnNjcmlwdGlvbi5oCmluZGV4IGQx MjYwZjUuLmI1ZjI3MGMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfc3Vic2Ny aXB0aW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19zdWJzY3JpcHRpb24uaApAQCAt NjgsNyArNjgsNyBAQCBDQVRBTE9HKHBnX3N1YnNjcmlwdGlvbiw2MTAwLFN1YnNjcmlwdGlvblJl bGF0aW9uSWQpIEJLSV9TSEFSRURfUkVMQVRJT04gQktJX1JPVwogCWJvb2wJCXN1YmJpbmFyeTsJ CS8qIFRydWUgaWYgdGhlIHN1YnNjcmlwdGlvbiB3YW50cyB0aGUKIAkJCQkJCQkJICogcHVibGlz aGVyIHRvIHNlbmQgZGF0YSBpbiBiaW5hcnkgKi8KIAotCWJvb2wJCXN1YnN0cmVhbTsJCS8qIFN0 cmVhbSBpbi1wcm9ncmVzcyB0cmFuc2FjdGlvbnMuICovCisJY2hhcgkJc3Vic3RyZWFtOwkJLyog U3RyZWFtIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucy4gKi8KIAogCWNoYXIJCXN1YnR3b3BoYXNl c3RhdGU7CS8qIFN0cmVhbSB0d28tcGhhc2UgdHJhbnNhY3Rpb25zICovCiAKQEAgLTEwOSw3ICsx MDksNyBAQCB0eXBlZGVmIHN0cnVjdCBTdWJzY3JpcHRpb24KIAlib29sCQllbmFibGVkOwkJLyog SW5kaWNhdGVzIGlmIHRoZSBzdWJzY3JpcHRpb24gaXMgZW5hYmxlZCAqLwogCWJvb2wJCWJpbmFy eTsJCQkvKiBJbmRpY2F0ZXMgaWYgdGhlIHN1YnNjcmlwdGlvbiB3YW50cyBkYXRhIGluCiAJCQkJ CQkJCSAqIGJpbmFyeSBmb3JtYXQgKi8KLQlib29sCQlzdHJlYW07CQkJLyogQWxsb3cgc3RyZWFt aW5nIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucy4gKi8KKwljaGFyCQlzdHJlYW07CQkJLyogQWxs b3cgc3RyZWFtaW5nIGluLXByb2dyZXNzIHRyYW5zYWN0aW9ucy4gKi8KIAljaGFyCQl0d29waGFz ZXN0YXRlOwkvKiBBbGxvdyBzdHJlYW1pbmcgdHdvLXBoYXNlIHRyYW5zYWN0aW9ucyAqLwogCWJv b2wJCWRpc2FibGVvbmVycjsJLyogSW5kaWNhdGVzIGlmIHRoZSBzdWJzY3JpcHRpb24gc2hvdWxk IGJlCiAJCQkJCQkJCSAqIGF1dG9tYXRpY2FsbHkgZGlzYWJsZWQgaWYgYSB3b3JrZXIgZXJyb3IK QEAgLTEyMCw2ICsxMjAsMTggQEAgdHlwZWRlZiBzdHJ1Y3QgU3Vic2NyaXB0aW9uCiAJTGlzdAkg ICAqcHVibGljYXRpb25zOwkvKiBMaXN0IG9mIHB1YmxpY2F0aW9uIG5hbWVzIHRvIHN1YnNjcmli ZSB0byAqLwogfSBTdWJzY3JpcHRpb247CiAKKy8qIERpc2FsbG93IHN0cmVhbWluZyBpbi1wcm9n cmVzcyB0cmFuc2FjdGlvbnMgKi8KKyNkZWZpbmUgU1VCU1RSRUFNX09GRgknZicKKworLyoKKyAq IFN0cmVhbWluZyB0cmFuc2FjdGlvbnMgYXJlIHdyaXR0ZW4gdG8gYSB0ZW1wb3JhcnkgZmlsZSBh bmQgYXBwbGllZCBvbmx5CisgKiBhZnRlciB0aGUgdHJhbnNhY3Rpb24gaXMgY29tbWl0dGVkIG9u IHVwc3RyZWFtLgorICovCisjZGVmaW5lIFNVQlNUUkVBTV9PTgknbycKKworLyogU3RyZWFtaW5n IHRyYW5zYWN0aW9ucyBhcmUgYXBwaWVkIGltbWVkaWF0ZWx5IHZpYSBhIGJhY2tncm91bmQgd29y a2VyICovCisjZGVmaW5lIFNVQlNUUkVBTV9BUFBMWQknYScKKwogZXh0ZXJuIFN1YnNjcmlwdGlv biAqR2V0U3Vic2NyaXB0aW9uKE9pZCBzdWJpZCwgYm9vbCBtaXNzaW5nX29rKTsKIGV4dGVybiB2 b2lkIEZyZWVTdWJzY3JpcHRpb24oU3Vic2NyaXB0aW9uICpzdWIpOwogZXh0ZXJuIHZvaWQgRGlz YWJsZVN1YnNjcmlwdGlvbihPaWQgc3ViaWQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVw bGljYXRpb24vbG9naWNhbHByb3RvLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2Fs cHJvdG8uaAppbmRleCBhNzcxYWI4Li4xZWI4ZTEyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9y ZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9s b2dpY2FscHJvdG8uaApAQCAtMjQzLDggKzI0Myw4IEBAIGV4dGVybiBUcmFuc2FjdGlvbklkIGxv Z2ljYWxyZXBfcmVhZF9zdHJlYW1fc3RhcnQoU3RyaW5nSW5mbyBpbiwKIGV4dGVybiB2b2lkIGxv Z2ljYWxyZXBfd3JpdGVfc3RyZWFtX3N0b3AoU3RyaW5nSW5mbyBvdXQpOwogZXh0ZXJuIHZvaWQg bG9naWNhbHJlcF93cml0ZV9zdHJlYW1fY29tbWl0KFN0cmluZ0luZm8gb3V0LCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCiAJCQkJCQkJCQkJICAgWExvZ1JlY1B0ciBjb21taXRfbHNuKTsKLWV4dGVy biBUcmFuc2FjdGlvbklkIGxvZ2ljYWxyZXBfcmVhZF9zdHJlYW1fY29tbWl0KFN0cmluZ0luZm8g b3V0LAotCQkJCQkJCQkJCQkJICAgTG9naWNhbFJlcENvbW1pdERhdGEgKmNvbW1pdF9kYXRhKTsK K2V4dGVybiB2b2lkIGxvZ2ljYWxyZXBfcmVhZF9zdHJlYW1fY29tbWl0KFN0cmluZ0luZm8gb3V0 LAorCQkJCQkJCQkJCSAgTG9naWNhbFJlcENvbW1pdERhdGEgKmNvbW1pdF9kYXRhKTsKIGV4dGVy biB2b2lkIGxvZ2ljYWxyZXBfd3JpdGVfc3RyZWFtX2Fib3J0KFN0cmluZ0luZm8gb3V0LCBUcmFu c2FjdGlvbklkIHhpZCwKIAkJCQkJCQkJCQkgIFRyYW5zYWN0aW9uSWQgc3VieGlkKTsKIGV4dGVy biB2b2lkIGxvZ2ljYWxyZXBfcmVhZF9zdHJlYW1fYWJvcnQoU3RyaW5nSW5mbyBpbiwgVHJhbnNh Y3Rpb25JZCAqeGlkLApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNh bHdvcmtlci5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9naWNhbHdvcmtlci5oCmluZGV4 IGNkMWI2ZTguLjZhMWFmN2YgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2xv Z2ljYWx3b3JrZXIuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2Fsd29ya2Vy LmgKQEAgLTEzLDYgKzEzLDcgQEAKICNkZWZpbmUgTE9HSUNBTFdPUktFUl9ICiAKIGV4dGVybiB2 b2lkIEFwcGx5V29ya2VyTWFpbihEYXR1bSBtYWluX2FyZyk7CitleHRlcm4gdm9pZCBBcHBseUJn d29ya2VyTWFpbihEYXR1bSBtYWluX2FyZyk7CiAKIGV4dGVybiBib29sIElzTG9naWNhbFdvcmtl cih2b2lkKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3JpZ2luLmgg Yi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vcmlnaW4uaAppbmRleCAxNGQ1YzQ5Li4xZWQ1MWJj IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vcmlnaW4uaAorKysgYi9zcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9vcmlnaW4uaApAQCAtNTMsNyArNTMsNyBAQCBleHRlcm4gWExv Z1JlY1B0ciByZXBsb3JpZ2luX2dldF9wcm9ncmVzcyhSZXBPcmlnaW5JZCBub2RlLCBib29sIGZs dXNoKTsKIAogZXh0ZXJuIHZvaWQgcmVwbG9yaWdpbl9zZXNzaW9uX2FkdmFuY2UoWExvZ1JlY1B0 ciByZW1vdGVfY29tbWl0LAogCQkJCQkJCQkJICAgWExvZ1JlY1B0ciBsb2NhbF9jb21taXQpOwot ZXh0ZXJuIHZvaWQgcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKFJlcE9yaWdpbklkIG5vZGUpOwor ZXh0ZXJuIHZvaWQgcmVwbG9yaWdpbl9zZXNzaW9uX3NldHVwKFJlcE9yaWdpbklkIG5vZGUsIGJv b2wgYWNxdWlyZSk7CiBleHRlcm4gdm9pZCByZXBsb3JpZ2luX3Nlc3Npb25fcmVzZXQodm9pZCk7 CiBleHRlcm4gWExvZ1JlY1B0ciByZXBsb3JpZ2luX3Nlc3Npb25fZ2V0X3Byb2dyZXNzKGJvb2wg Zmx1c2gpOwogCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi93b3JrZXJfaW50 ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRlcm5hbC5oCmluZGV4 IDQ0ODVkNGUuLjRkMTFhMTMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dv cmtlcl9pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3dvcmtlcl9pbnRl cm5hbC5oCkBAIC02MCw2ICs2MCw4IEBAIHR5cGVkZWYgc3RydWN0IExvZ2ljYWxSZXBXb3JrZXIK IAkgKi8KIAlGaWxlU2V0ICAgICpzdHJlYW1fZmlsZXNldDsKIAorCWJvb2wJCXN1YndvcmtlcjsK KwogCS8qIFN0YXRzLiAqLwogCVhMb2dSZWNQdHIJbGFzdF9sc247CiAJVGltZXN0YW1wVHogbGFz dF9zZW5kX3RpbWU7CkBAIC04NCw4ICs4Niw5IEBAIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29y a2VyX2F0dGFjaChpbnQgc2xvdCk7CiBleHRlcm4gTG9naWNhbFJlcFdvcmtlciAqbG9naWNhbHJl cF93b3JrZXJfZmluZChPaWQgc3ViaWQsIE9pZCByZWxpZCwKIAkJCQkJCQkJCQkJCWJvb2wgb25s eV9ydW5uaW5nKTsKIGV4dGVybiBMaXN0ICpsb2dpY2FscmVwX3dvcmtlcnNfZmluZChPaWQgc3Vi aWQsIGJvb2wgb25seV9ydW5uaW5nKTsKLWV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX2xh dW5jaChPaWQgZGJpZCwgT2lkIHN1YmlkLCBjb25zdCBjaGFyICpzdWJuYW1lLAotCQkJCQkJCQkJ IE9pZCB1c2VyaWQsIE9pZCByZWxpZCk7CitleHRlcm4gYm9vbCBsb2dpY2FscmVwX3dvcmtlcl9s YXVuY2goT2lkIGRiaWQsIE9pZCBzdWJpZCwgY29uc3QgY2hhciAqc3VibmFtZSwKKwkJCQkJCQkJ CSBPaWQgdXNlcmlkLCBPaWQgcmVsaWQsCisJCQkJCQkJCQkgZHNtX2hhbmRsZSBzdWJ3b3JrZXJf ZHNtKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX3N0b3AoT2lkIHN1YmlkLCBPaWQg cmVsaWQpOwogZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93b3JrZXJfd2FrZXVwKE9pZCBzdWJpZCwg T2lkIHJlbGlkKTsKIGV4dGVybiB2b2lkIGxvZ2ljYWxyZXBfd29ya2VyX3dha2V1cF9wdHIoTG9n aWNhbFJlcFdvcmtlciAqd29ya2VyKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3V0aWxzL3dh aXRfZXZlbnQuaCBiL3NyYy9pbmNsdWRlL3V0aWxzL3dhaXRfZXZlbnQuaAppbmRleCBiNTc4ZTJl Li5kNTA4MWQ5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy93YWl0X2V2ZW50LmgKKysr IGIvc3JjL2luY2x1ZGUvdXRpbHMvd2FpdF9ldmVudC5oCkBAIC0xMDUsNiArMTA1LDcgQEAgdHlw ZWRlZiBlbnVtCiAJV0FJVF9FVkVOVF9IQVNIX0dST1dfQlVDS0VUU19BTExPQ0FURSwKIAlXQUlU X0VWRU5UX0hBU0hfR1JPV19CVUNLRVRTX0VMRUNULAogCVdBSVRfRVZFTlRfSEFTSF9HUk9XX0JV Q0tFVFNfUkVJTlNFUlQsCisJV0FJVF9FVkVOVF9MT0dJQ0FMX0FQUExZX1dPUktFUl9SRUFEWSwK IAlXQUlUX0VWRU5UX0xPR0lDQUxfU1lOQ19EQVRBLAogCVdBSVRfRVZFTlRfTE9HSUNBTF9TWU5D X1NUQVRFX0NIQU5HRSwKIAlXQUlUX0VWRU5UX01RX0lOVEVSTkFMLApkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zdWJzY3JpcHRpb24ub3V0IGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9zdWJzY3JpcHRpb24ub3V0CmluZGV4IDdmY2ZhZDEuLmUwOGU0ZDQgMTAwNjQ0 Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3Vic2NyaXB0aW9uLm91dAorKysgYi9z cmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N1YnNjcmlwdGlvbi5vdXQKQEAgLTE5Nyw3ICsxOTcs NyBAQCBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIFNFVCAoc2xvdF9uYW1lID0g Tk9ORSk7CiBEUk9QIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWI7CiAtLSBmYWlsIC0gc3Ry ZWFtaW5nIG11c3QgYmUgYm9vbGVhbgogQ1JFQVRFIFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3Rz dWIgQ09OTkVDVElPTiAnZGJuYW1lPXJlZ3Jlc3NfZG9lc25vdGV4aXN0JyBQVUJMSUNBVElPTiB0 ZXN0cHViIFdJVEggKGNvbm5lY3QgPSBmYWxzZSwgc3RyZWFtaW5nID0gZm9vKTsKLUVSUk9SOiAg c3RyZWFtaW5nIHJlcXVpcmVzIGEgQm9vbGVhbiB2YWx1ZQorRVJST1I6ICBzdHJlYW1pbmcgcmVx dWlyZXMgYSBCb29sZWFuIHZhbHVlIG9yICJhcHBseSIKIC0tIG5vdyBpdCB3b3JrcwogQ1JFQVRF IFNVQlNDUklQVElPTiByZWdyZXNzX3Rlc3RzdWIgQ09OTkVDVElPTiAnZGJuYW1lPXJlZ3Jlc3Nf ZG9lc25vdGV4aXN0JyBQVUJMSUNBVElPTiB0ZXN0cHViIFdJVEggKGNvbm5lY3QgPSBmYWxzZSwg c3RyZWFtaW5nID0gdHJ1ZSk7CiBXQVJOSU5HOiAgdGFibGVzIHdlcmUgbm90IHN1YnNjcmliZWQs IHlvdSB3aWxsIGhhdmUgdG8gcnVuIEFMVEVSIFNVQlNDUklQVElPTiAuLi4gUkVGUkVTSCBQVUJM SUNBVElPTiB0byBzdWJzY3JpYmUgdGhlIHRhYmxlcwpAQCAtMjA1LDcgKzIwNSw3IEBAIFdBUk5J Tkc6ICB0YWJsZXMgd2VyZSBub3Qgc3Vic2NyaWJlZCwgeW91IHdpbGwgaGF2ZSB0byBydW4gQUxU RVIgU1VCU0NSSVBUSU9OIC4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1 YnNjcmlwdGlvbnMKICAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAg IHwgRW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvIHBoYXNl IGNvbW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAg ICBDb25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSBy ZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0 ZXN0cHVifSAgIHwgZiAgICAgIHwgdCAgICAgICAgIHwgZCAgICAgICAgICAgICAgICB8IGYgICAg ICAgICAgICAgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90 ZXhpc3QgfCAwLzAKKyByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2Vy IHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgbyAgICAgICAgIHwgZCAgICAgICAg ICAgICAgICB8IGYgICAgICAgICAgICAgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9 cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKICgxIHJvdykKIAogQUxURVIgU1VCU0NSSVBUSU9O IHJlZ3Jlc3NfdGVzdHN1YiBTRVQgKHN0cmVhbWluZyA9IGZhbHNlKTsKQEAgLTI5OSw3ICsyOTks NyBAQCBBTFRFUiBTVUJTQ1JJUFRJT04gcmVncmVzc190ZXN0c3ViIFNFVCAoc3RyZWFtaW5nID0g dHJ1ZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNjcmlwdGlvbnMK ICAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgRW5hYmxlZCB8 IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvIHBoYXNlIGNvbW1pdCB8IERp c2FibGUgb24gZXJyb3IgfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICBDb25uaW5mbyAg ICAgICAgICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3Rlc3Rz dWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0cHVifSAgIHwg ZiAgICAgIHwgdCAgICAgICAgIHwgcCAgICAgICAgICAgICAgICB8IGYgICAgICAgICAgICAgICAg fCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAK KyByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8 IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgbyAgICAgICAgIHwgcCAgICAgICAgICAgICAgICB8IGYg ICAgICAgICAgICAgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vz bm90ZXhpc3QgfCAwLzAKICgxIHJvdykKIAogQUxURVIgU1VCU0NSSVBUSU9OIHJlZ3Jlc3NfdGVz dHN1YiBTRVQgKHNsb3RfbmFtZSA9IE5PTkUpOwpAQCAtMzExLDcgKzMxMSw3IEBAIFdBUk5JTkc6 ICB0YWJsZXMgd2VyZSBub3Qgc3Vic2NyaWJlZCwgeW91IHdpbGwgaGF2ZSB0byBydW4gQUxURVIg U1VCU0NSSVBUSU9OIC4uCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHN1YnNj cmlwdGlvbnMKICAgICAgIE5hbWUgICAgICAgfCAgICAgICAgICAgT3duZXIgICAgICAgICAgIHwg RW5hYmxlZCB8IFB1YmxpY2F0aW9uIHwgQmluYXJ5IHwgU3RyZWFtaW5nIHwgVHdvIHBoYXNlIGNv bW1pdCB8IERpc2FibGUgb24gZXJyb3IgfCBTeW5jaHJvbm91cyBjb21taXQgfCAgICAgICAgICBD b25uaW5mbyAgICAgICAgICAgfCBTa2lwIExTTiAKIC0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0tLSstLS0tLS0tLSstLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdy ZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwgZiAgICAgICB8IHt0ZXN0 cHVifSAgIHwgZiAgICAgIHwgdCAgICAgICAgIHwgcCAgICAgICAgICAgICAgICB8IGYgICAgICAg ICAgICAgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVncmVzc19kb2Vzbm90ZXhp c3QgfCAwLzAKKyByZWdyZXNzX3Rlc3RzdWIgfCByZWdyZXNzX3N1YnNjcmlwdGlvbl91c2VyIHwg ZiAgICAgICB8IHt0ZXN0cHVifSAgIHwgZiAgICAgIHwgbyAgICAgICAgIHwgcCAgICAgICAgICAg ICAgICB8IGYgICAgICAgICAgICAgICAgfCBvZmYgICAgICAgICAgICAgICAgfCBkYm5hbWU9cmVn cmVzc19kb2Vzbm90ZXhpc3QgfCAwLzAKICgxIHJvdykKIAogQUxURVIgU1VCU0NSSVBUSU9OIHJl Z3Jlc3NfdGVzdHN1YiBTRVQgKHNsb3RfbmFtZSA9IE5PTkUpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rv b2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdAppbmRleCA4N2VlN2JmLi45YzAzNmQxIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdAorKysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApA QCAtMjkxOCwxMSArMjkxOCwxMyBAQCBXb3JkRW50cnlQb3NWZWN0b3IKIFdvcmRFbnRyeVBvc1Zl Y3RvcjEKIFdvcmtUYWJsZVNjYW4KIFdvcmtUYWJsZVNjYW5TdGF0ZQorV29ya2VyRW50cnkKIFdv cmtlckluZm8KIFdvcmtlckluZm9EYXRhCiBXb3JrZXJJbnN0cnVtZW50YXRpb24KIFdvcmtlckpv YkR1bXBQdHJUeXBlCiBXb3JrZXJKb2JSZXN0b3JlUHRyVHlwZQorV29ya2VyU3RhdGUKIFdvcmtp bmdfU3RhdGUKIFdyaXRlQnVmUHRyVHlwZQogV3JpdGVCeXRlUHRyVHlwZQotLSAKMi43LjIud2lu ZG93cy4xCgo= --_003_OSZPR01MB6310F0FABB05F8E5BB31A5B0FDFC9OSZPR01MB6310jpnp_--