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 1o6UPO-0004qF-5v for pgsql-hackers@arkaria.postgresql.org; Wed, 29 Jun 2022 09:54:55 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1o6UPM-0005Ck-RV for pgsql-hackers@arkaria.postgresql.org; Wed, 29 Jun 2022 09:54:52 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o6UPM-0005CZ-63 for pgsql-hackers@lists.postgresql.org; Wed, 29 Jun 2022 09:54:52 +0000 Received: from esa10.fujitsucc.c3s2.iphmx.com ([68.232.159.247]) by magus.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1o6UPH-0000so-UC for pgsql-hackers@lists.postgresql.org; Wed, 29 Jun 2022 09:54:51 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=fujitsu.com; i=@fujitsu.com; q=dns/txt; s=fj1; t=1656496487; x=1688032487; h=from:to:cc:subject:date:message-id:references: in-reply-to:mime-version; bh=Ncq8WZD2WM+/VWjTZkMEI7tBIQsqLbqXkM48dcDZvig=; b=i92z0bP7d7JXuPeuuVYWKZlRCesKT4cPiVoBIFmEiPDM5kptZ4wYSxwS Tyjccwjf0UhmHzc12MIjFvqztPGPNKs0reBNI81OFkmTGtpLvnmXOMVRX NcvDOjjIK5k6We552z1xyrdIqvZW5o0o6E1BiAUGIeIx4zA8fW8aqh5I9 ktIh3X2y6oK35xhtCinGbT/Ln9WDauKjfAJZAjdLkn+HiOCZFZpY8peUL JEk2c0fsvSFVnzmY3v591rfGm72CeSaWZ0XZFYa/WU7fGGyKtFwVnoZ12 1fh+GA8Ga1Q9EuFVrlPfmFPZStTPZ/DLlLjtOPWBu5+JMes/JidI417ZS Q==; X-IronPort-AV: E=McAfee;i="6400,9594,10392"; a="59329575" X-IronPort-AV: E=Sophos;i="5.92,231,1650898800"; d="scan'208,223";a="59329575" Received: from mail-tycjpn01lp2174.outbound.protection.outlook.com (HELO JPN01-TYC-obe.outbound.protection.outlook.com) ([104.47.23.174]) by ob1.fujitsucc.c3s2.iphmx.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Jun 2022 18:54:43 +0900 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Ms4E2eV/wBQok8xliVT8n1mKFYA5PuYpW3xJaNmdw7nJMLtu8eqscfG0OzZOiP953m1yCxGmhQCSnyMgmw43hB0AAt2DIH+RVMPncSKCLDN5EVwEhyr7BbNRpZbGWrKKYzRAeJHDPNZWTyIcXrCBQ5XrOUE5g750hpELWTZLmYUWXt9lMM5V79oqNzbdBqoe1bWeY4w2ZDa0B1Z5HyBI4UFU3Cb7IWVsvhonsSpvjtktQ8HUtd8CIDQMsd1tsJL7GqdyPtVqD8PBectSLPI7E18KuFGeKTNT/idcfwtcbp/z8Wp5+1Io/eTO/8iJ96aRKgJiZG3Sk5wQcstUCW7wRg== 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=mmQbcUL+DABj0lxI5LAHvY9GwAY3lHBnd13BCKVwgcA=; b=jmskgbZJtOpQO5P88q8K85yL0ywlnuYjOxVjxO7tzRLbhgXdfB0l/q3mzID8BenJKYfqnbjsV8mBY7gkVQi3RfGVlUzTZmR1byT1cEnt8kO+nC7U1v80PoXqGxZVAgO5FuPO9JMQ/e6CKDdJV0EpI93XWSTAz0xh7UUNSeiprFCimBJSSk7bQXPQ4W4aFcHXyjsxtmxbdnZ9WQgtZqn4LQcOXXAfQzsod+M6rCBovWOdO2kaVGldh1oz3IPzSpBsTjIp56QVP9jQjSlHKhyzY9qX8EHsJBFRaAYB5KIOlomIa/CZv3X8JnUtBy/7FTnl6jtYhV9S7Vxrc5nquNOrPg== 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=mmQbcUL+DABj0lxI5LAHvY9GwAY3lHBnd13BCKVwgcA=; b=c7Xhft5pND7Kp2PQDZ82u3Nn7z02fBdO2xtUjqfvpRRdqMsNak9IkhuE6hVLw5Z24y5kSCAaGyniieRX1GSfDgFz91EZIMwPL9b5aiVl3wEsAaEHaAS+uUUTAZ2owqO7Apv3jjO8ERCjADmLanKXb455XCTkDYj4h1A+hB0qKUw= Received: from OS0PR01MB5716.jpnprd01.prod.outlook.com (2603:1096:604:bb::12) by TYAPR01MB4928.jpnprd01.prod.outlook.com (2603:1096:404:128::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5373.16; Wed, 29 Jun 2022 09:54:40 +0000 Received: from OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::c943:3fe1:8fba:a589]) by OS0PR01MB5716.jpnprd01.prod.outlook.com ([fe80::c943:3fe1:8fba:a589%2]) with mapi id 15.20.5395.014; Wed, 29 Jun 2022 09:54:40 +0000 From: "houzj.fnst@fujitsu.com" To: Amit Kapila CC: Masahiko Sawada , Japin Li , Alvaro Herrera , Dilip Kumar , rajesh singarapu , PostgreSQL Hackers , Zheng Li Subject: RE: Support logical replication of DDLs Thread-Topic: Support logical replication of DDLs Thread-Index: AQHYJz33Pggarn88u0G0lS13R7uLfKy9TlgAgAVZmgCAAA2xAIABMlkAgACE3QCAAKgDAIAAduOAgABm6oCABIs+AIACG98AgBfo2QCABsLLgIAyhVqAgBOd9QCAAOYWgIAAPoOAgAUH2oCABQvawIAPYMWAgAHJ99CAAn9yAIAAPzmAgAQqm4CAA6XiQIACJNSQgAsCywCAAPmNAIAAalXw Date: Wed, 29 Jun 2022 09:54:40 +0000 Message-ID: References: <202203162206.7spggyktx63e@alvherre.pgsql> In-Reply-To: Accept-Language: ja-JP, en-US Content-Language: ja-JP 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: 32e27838-7a15-4ae3-aad2-08da59b5627b x-ms-traffictypediagnostic: TYAPR01MB4928:EE_ x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: DQCc/xgmVEAjn2+1BOLD+3mGKq49ZSLEDGBPhLlq1dM6o3kUMUxG8tMZzse08QbSeTMJIeYBu7Up9kvffpbIXdqnNZkI9eWZORjegKWmxDSbtuMGEcNvSYH/nkqoCXAqVVW2x1tZvbGJGoDEfzx2QfV7cEuHflba6zaFkMz+ILPVxL0noc5VQSa1g9t1hP8DPrtJpPqL8AIaisS2RIltJpecSgZYBMtjQYZGrgD/ZKegLPcMaWg7C+8A3e6aArftwGhQ1JiaXkSDq01IJtaKam1yzod9TICELYA5m86aKoGPI/aH9TsYTp2HlPIrL6l8+ewpXU6XmFx/rzpQPanhf3Eg23cerUR/ARSACHvZkZeSuhbWLsWiMz4OxPYGfpyHZ5oLR5IU+qhG+cpqd3IW9l8kGo5NJTJ4rYWCFpmd9dmwXzcmJj9T75vXy3G/KGtdkphwUz3RbG1roe81vk3k4ar41KRW+vzQi08PG5NU/de8Ap21fMnQqz/EchFGi8Jfstq5/nsmc6JFZ5h/aaByB5MJSDP9r/nKPJJfZCO0RbGeueOf5DakE/NkxIpEXDoNzHTaCFINSgZNRjt3uFDiwoSC8QqJTeBz8bwUgzby2T/+x6eZxk3whd/n6SMCL5Tp5AwfdFscai4rx5F+NfMvlQMgp3KArZbWUjB7gb9Fhm7aEPcay7Z6mBU9ycRuMX4N147WpXMi6X+JFWpLWTtBCBbKeyVANYsrLxjx2wvBYChdKqPN8DroKCeXXf6NoOjobMwS5GQiqJzNxSL3Eyo6dVT4gtDBkfEgHXeaPTSjXKEMQB8o7FBPYCt+bwCC5cSHZyU1eDDpvZ0Bb0A36JJbouz1YlH3pZ7Z3tXi4sBlIf8= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:OS0PR01MB5716.jpnprd01.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230016)(4636009)(396003)(346002)(366004)(39860400002)(136003)(376002)(8936002)(52536014)(7696005)(478600001)(966005)(6506007)(53546011)(5660300002)(316002)(33656002)(2906002)(41300700001)(86362001)(26005)(99936003)(82960400001)(66556008)(122000001)(186003)(38070700005)(83380400001)(38100700002)(55016003)(8676002)(9686003)(6916009)(76116006)(85182001)(66476007)(54906003)(66946007)(4326008)(64756008)(71200400001)(66446008);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?T1hCQzl1K2ZzQUFDVXd1cVRzOHRCUHo2RGYwMGZ5SXAvMkRSSlNCWk9sMW5j?= =?utf-8?B?RUVwUThGZ3BSZjZ2Sllpc2VQR1MxK2FNcFFKVGFId3FDYUVmY0JNNHZQZUVy?= =?utf-8?B?QmRGWkt6Uk5uZUY3bncxMlFXUG0zRk1sNnRWeTBJc3NPQ3cvWi9zWnlQK1ZL?= =?utf-8?B?ZngxVXl0cE5IcTVHbmZnSmN4NnBuRytydzUvZHIraWNMNnlGRkpaU2Y5dlFM?= =?utf-8?B?QVZaN3RZN1hBa0ZaT2V2OEU3aklrVityZ2ZpQ3l4cFRmWGdlZWNLOXJwYmF0?= =?utf-8?B?cldBNVBLcDJMc3JEdjNFV2R4aTQ4VUpiZHBwUFVHbjgrYmxBalF5d2c1emdE?= =?utf-8?B?NHFKcjdJdlRNZDlvRjZ2N1JFWldvZHZRdHlaOFR4dmR6dXhWWmNUWTE1Y2dp?= =?utf-8?B?SUdlbHFmdjB1NGVQSXlieWtXSE9pTExHeFFmNDh6cCtsbTFJOVZEN1F3SHRy?= =?utf-8?B?ZTVXdW9vbHNscEF1UmVGN01DTklkYTV5K1JmbnhwSlU5akpqYTlzSDN3NXJp?= =?utf-8?B?anFFdkwzN0kzUWVBdk91S3lCVGlDbjVPbGhvNERiampzZG1Qcy8vOGMxb3lE?= =?utf-8?B?M2dBcU0vZnVtUk5HSGhtNGJJYVlQOGNMa1QrQWplYlZzeGRvQTFoaGpiMXFH?= =?utf-8?B?NVI3eEVwdXlRYjZwbGc2akV3bEFPUlFvWE4xU0w3d3lpQUdoTitvVnJkL2c1?= =?utf-8?B?bG9XNHRJbEVwTlpWZmJaRUdqc25iRlRQbHkvR0tOM3FLbFVpWDUxSGlJdE1p?= =?utf-8?B?MS9nZEN1T0VpMENSalFQSk5iTFNDbXVETzBDaU5DT3E0bFdKQSs0WitGL0xJ?= =?utf-8?B?czVNVzhnZEM4NVdkWGJNblgwR2k2M3VsdmlZM1M4NWlhc2NsWlNaWUZYYVhs?= =?utf-8?B?VklIYlZmYXBSaSswMlNHcVYrWmdRczBJOFVNVHREZ21wZGZVSGNxQlc0RUxM?= =?utf-8?B?MHo5bTRsNFdCejl4aWIwY2NrYkN0Mm1kcy8zT054eGlGbjlIUVIxK1NBV0NB?= =?utf-8?B?RGRBOTlhUk5tYnE2SDFJaTM5a04vR05aUzJHemw1cVdKUklMc0R0K0RUazZp?= =?utf-8?B?SUptNHhheFkzKytkSmpITHAxdTBxc3NkRmpGOVpMZ3Y5R2Y3ZmcrSHhFdWZC?= =?utf-8?B?OUhyY3pQQlFOVFJCY3lOM21MWjU1NEUzTWtzZDZHOWVDYURvRnNpaUZLajhq?= =?utf-8?B?UXJQOG9NTDVCZEZWTkRGMjFLS3ZDUnVYdjRtZ3hSczNLWWVDMTRxYm5WbDJM?= =?utf-8?B?bFRvM242WnM3ODAxQ1lyYm51dmY4WXQ3SXljbDF4Vm9EQVhqM1FRb0V5RFgr?= =?utf-8?B?c0grSDMwZFY2dllYbXFMZWVqc2dXQU9PdkpxOHVxSndpNTJyRkFaQWhIRzdP?= =?utf-8?B?SEpiODVZcVFMekFHbEZJdytiRGVqemNIcDVzTnA1cjh3QkY2dmduUEpVcm02?= =?utf-8?B?c0ZvdmFXcm5EakZRZHRLZDlyaHJvbnVWMWdUbkFjZU03THRFYVZhc2pueHRF?= =?utf-8?B?cGdFTGFRaVR6UStjb1lWVmNTNGZIVGo2ZGdoc25CekJzMWtpM3lZVHZoS2RF?= =?utf-8?B?S2FnMXNWeVBlTEMzMFEwVHlwbXRWZmllUGpkMlh0ZTEwMVRJUm1xUUtYY0Jn?= =?utf-8?B?YjZRaFN0VmZNUjZMQWk3cERockRNSUN2TDBPV2NCSHVpR0tqMEY5Q0NDNk1s?= =?utf-8?B?NEpVZVBaZ2lDMzlYRjJOZkQ2anVnaTRxT2FzbjVHVHBhWmNJRFhzSEMrNyt6?= =?utf-8?B?SiszSFZZWEpNNi9Bc2VsU1ZEVEtqQUpLOVI3a1pzUTdBTENGaVlpWHl5b0xz?= =?utf-8?B?V3pHbnB1S200dUxWWjdxRWVuWDl5TndhV0QrRndKUDJ3UXdXUk0ycElTSk16?= =?utf-8?B?U2FoUGYxUlpCZHgrSEpDeWI2MXh5aUJrakRnSk1vazZHUnVMMTc1dDlqbWN5?= =?utf-8?B?U2ljMXNyQXRINGdxaDV1MjBoT3F0d3pDNXlEbmY5TjZMUGxCSDdGNjhJU3p3?= =?utf-8?B?cTN4ODhRZTF2YWU4dGJGcTlDWVRGTDd2Z0ZYTjBLT0xXNVNKZTRHcC81SGtY?= =?utf-8?B?WW9vRjZWRXliRWtWZk5sZXNSeFJEOE5JRS81V0d0WGlJandLY0VTZ0pTVDI3?= =?utf-8?Q?ymDZmCCBgYw38K05FGs+q+38w?= Content-Type: multipart/mixed; boundary="_005_OS0PR01MB571676298B814F7F5690D92994BB9OS0PR01MB5716jpnp_" MIME-Version: 1.0 X-OriginatorOrg: fujitsu.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: OS0PR01MB5716.jpnprd01.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 32e27838-7a15-4ae3-aad2-08da59b5627b X-MS-Exchange-CrossTenant-originalarrivaltime: 29 Jun 2022 09:54:40.2258 (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: r9sQv0903FCvcKkaXAnQD46t2NkIRXyxRhtiONNz/tdd4U+rpHgi1AdXm/TsSeFDHHMduFVOvLM2JHrDe/KmTg== X-MS-Exchange-Transport-CrossTenantHeadersStamped: TYAPR01MB4928 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --_005_OS0PR01MB571676298B814F7F5690D92994BB9OS0PR01MB5716jpnp_ Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 T24gV2VkbmVzZGF5LCBKdW5lIDI5LCAyMDIyIDExOjA3IEFNIEFtaXQgS2FwaWxhIDxhbWl0Lmth cGlsYTE2QGdtYWlsLmNvbT4gd3JvdGU6DQo+IA0KPiBPbiBUdWUsIEp1biAyOCwgMjAyMiBhdCA1 OjQzIFBNIEFtaXQgS2FwaWxhIDxhbWl0LmthcGlsYTE2QGdtYWlsLmNvbT4NCj4gd3JvdGU6DQo+ ID4NCj4gPiA1Lg0KPiA+ICtzdGF0aWMgT2JqVHJlZSAqDQo+ID4gK2RlcGFyc2VfQ3JlYXRlU3Rt dChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkNCj4gPiB7DQo+ID4gLi4uDQo+ID4gKyB0 bXAgPSBuZXdfb2JqdHJlZV9WQSgiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsIDApOyBpZg0K PiA+ICsgKG5vZGUtPnRhYmxlc3BhY2VuYW1lKSBhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICJ0 YWJsZXNwYWNlIiwNCj4gPiArIG5vZGUtPnRhYmxlc3BhY2VuYW1lKTsgZWxzZSB7IGFwcGVuZF9u dWxsX29iamVjdCh0bXAsICJ0YWJsZXNwYWNlIik7DQo+ID4gKyBhcHBlbmRfYm9vbF9vYmplY3Qo dG1wLCAicHJlc2VudCIsIGZhbHNlKTsgfQ0KPiA+ICsgYXBwZW5kX29iamVjdF9vYmplY3QoY3Jl YXRlU3RtdCwgInRhYmxlc3BhY2UiLCB0bXApOw0KPiA+IC4uLg0KPiA+IH0NCj4gPg0KPiA+IFdo eSBkbyB3ZSBuZWVkIHRvIGFwcGVuZCB0aGUgb2JqZWN0cyAodGFibGVzcGFjZSwgd2l0aCBjbGF1 c2UsIGV0Yy4pDQo+ID4gd2hlbiB0aGV5IGFyZSBub3QgcHJlc2VudCBpbiB0aGUgYWN0dWFsIENS RUFURSBUQUJMRSBzdGF0ZW1lbnQ/IFRoZQ0KPiA+IHJlYXNvbiB0byBhc2sgdGhpcyBpcyB0aGF0 IHRoaXMgbWFrZXMgdGhlIHN0cmluZyB0aGF0IHdlIHdhbnQgdG8gc2VuZA0KPiA+IGRvd25zdHJl YW0gbXVjaCBsb25nZXIgdGhhbiB0aGUgYWN0dWFsIHN0YXRlbWVudCBnaXZlbiBieSB0aGUgdXNl ciBvbg0KPiA+IHRoZSBwdWJsaXNoZXIuDQo+ID4NCj4gDQo+IEFmdGVyIHRoaW5raW5nIHNvbWUg bW9yZSBvbiB0aGlzLCBpdCBzZWVtcyB0aGUgdXNlciBtYXkgd2FudCB0byBvcHRpb25hbGx5DQo+ IGNoYW5nZSBzb21lIG9mIHRoZXNlIGF0dHJpYnV0ZXMsIGZvciBleGFtcGxlLCBvbiB0aGUgc3Vi c2NyaWJlciwgaXQgbWF5IHdhbnQgdG8NCj4gYXNzb2NpYXRlIHRoZSB0YWJsZSB3aXRoIGEgZGlm ZmVyZW50IHRhYmxlc3BhY2UuIEkgdGhpbmsgdG8gYWRkcmVzcyB0aGF0IHdlIGNhbg0KPiBhcHBl bmQgdGhlc2UgYWRkaXRpb25hbCBhdHRyaWJ1dGVzIG9wdGlvbmFsbHksIHNheSB2aWEgYW4gYWRk aXRpb25hbCBwYXJhbWV0ZXINCj4gKGFwcGVuZF9hbGxfb3B0aW9ucy9hcHBlbmRfYWxsX2F0dHJp YnV0ZXMgb3Igc29tZXRoaW5nIGxpa2UgdGhhdCkgaW4gZXhwb3NlZA0KPiBBUElzIGxpa2UgZGVw YXJzZV91dGlsaXR5X2NvbW1hbmQoKS4NCg0KSSBhZ3JlZSBhbmQgd2lsbCByZXNlYXJjaCB0aGlz IHBhcnQuDQoNCkFuZCBoZXJlIGlzIHRoZSBuZXcgdmVyc2lvbiBwYXRjaCBzZXQuDQpNb3N0IG9m IGNoYW5nZXMgYXJlIGluIHRoZSBkZXBhcnNlciB3aGljaCBpbmNsdWRlOg0KDQpzdXBwb3J0IENS RUFURSBQQVJUSVRJT05FRCBUQUJMRQ0Kc3VwcG9ydCBBTFRFUiBBVFRBQ0gvREVUQUNIIFBBUlRJ VElPTg0Kc3VwcG9ydCBDUkVBVEUvQUxURVIgVEFCTEUgd2l0aCBBQ0NFU1MgTUVUSE9EDQpzdXBw b3J0IENSRUFURSBUQUJMRSBPRg0Kc3VwcG9ydCBDUkVBVEUvQUxURVIgVEFCTEUgd2l0aCBHRU5F UkFURUQgQ09MVU1ODQpzdXBwb3J0IENSRUFURS9BTFRFUiBUQUJMRSB3aXRoIERFTlRJVFkgQ09M VU1ODQpzdXBwb3J0IENSRUFURS9BTFRFUiBUQUJMRSB3aXRoIENPTVBSRVNTSU9OIE1FVEhPRA0K c3VwcG9ydCBBTFRFUiBDT0xVTU4gbnVtb2Zjb2wgU0VUIFNUQVRJU1RJQ1MgKG1lbnRpb25lZCBi eSBzYXdhZGEtc2FuIFsxXSkNCnN1cHBvcnQgQUxURVIgU0NIRU1BDQpzdXBwb3J0IENSQUVURS9E Uk9QIElOREVYDQoNCk5vdGUgdGhhdCwgZm9yIEFUVEFDSC9ERVRBQ0ggUEFSVElUSU9OLCBJIGhh dmVuJ3QgYWRkZWQgZXh0cmEgbG9naWMgb24NCnN1YnNjcmliZXIgdG8gaGFuZGxlIHRoZSBjYXNl IHdoZXJlIHRoZSB0YWJsZSBvbiBwdWJsaXNoZXIgaXMgYSBQQVJUSVRJT05FRA0KVEFCTEUgd2hp bGUgdGhlIHRhcmdldCB0YWJsZSBvbiBzdWJzY3JpYmVyIHNpZGUgaXMgTk9STUFMIHRhYmxlLiBX ZSB3aWxsDQpyZXNlYXJjaCB0aGlzIG1vcmUgYW5kIGltcHJvdmUgdGhpcyBsYXRlci4NCg0KQmVz aWRlcywgdGhlIG5ldyB2ZXJzaW9uIGV2ZW50IHRyaWdnZXIgd29uJ3QgV0FMIGxvZyB0aGUgRERM IHdob3NlIHRhcmdldA0KdGFibGUgaXMgYSB0ZW1wb3JhcnkgdGFibGUgc28gdGhhdCB0aGUgcHJv YmxlbSByZXBvcnRlZCBieSBWaWduZXNoWzJdIGlzDQpmaXhlZC4NCg0KQWJvdXQgdGhlIHJlY2Vu dCBjb21tZW50IGZyb20gQW1pdFszXSBhbmQgVmlnbmVzaFs0XSwgSSB3aWxsIGludmVzdGlnYXRl IHRoZQ0KY29tbWVudHMgYW5kIGFkZHJlc3MgdGhlbSBpbiBuZXh0IHZlcnNpb24uDQoNClsxXSBo dHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL0NBRDIxQW9CVkNvUFBSS3ZVXzUt JTNEd0VYc2E5MkdzTkpGSk9jWXlYenZvU0VKQ3g1ZEt3JTQwbWFpbC5nbWFpbC5jb20NClsyXSBo dHRwczovL3d3dy5wb3N0Z3Jlc3FsLm9yZy9tZXNzYWdlLWlkL0NBTERhTm0zM1czNXBjQkUzek9w Smh3bllCZEJvWkRwS3hzc2VtQU4yMU53VmhKdW9uZyU0MG1haWwuZ21haWwuY29tDQpbM10gaHR0 cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9DQUE0ZUsxSzg4U01vQnElM0REUkE0 WFUtRjNGRzZxeXpDakdNTUtzUHBjUkJQUmNyRUxydyU0MG1haWwuZ21haWwuY29tDQpbNF0gaHR0 cHM6Ly93d3cucG9zdGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9DQUxEYU5tM3JFQV96bW5ETU9DVDdO cUs0YUFmZmhBZ29vTGY4clhqVU4lM0RZd0E4QVNGdyU0MG1haWwuZ21haWwuY29tDQoNCkJlc3Qg cmVnYXJkcywNCkhvdSB6ag0KDQoNCg== --_005_OS0PR01MB571676298B814F7F5690D92994BB9OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v10-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch" Content-Description: v10-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch Content-Disposition: attachment; filename="v10-0003-Support-CREATE-TABLE-AS-SELECT-INTO.patch"; size=14953; creation-date="Wed, 29 Jun 2022 09:47:00 GMT"; modification-date="Wed, 29 Jun 2022 09:54:36 GMT" Content-Transfer-Encoding: base64 RnJvbSA4ZWY2NWRhOGRhZGNjMDM3ZTExZTRlOTM1NmU5NDVlYzcyNWMzZTkwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiaG91emouZm5zdCIgPGhvdXpqLmZuc3RAY24uZnVqaXRzdS5j b20+CkRhdGU6IFdlZCwgMjkgSnVuIDIwMjIgMTc6MDQ6MzIgKzA4MDAKU3ViamVjdDogW1BBVENI XSBTdXBwb3J0IENSRUFURSBUQUJMRSBBUyBTRUxFQ1QgSU5UTwoKVGhlIG1haW4gaWRlYSBvZiBy ZXBsaWNhdGluZyB0aGUgQ1JFQVRFIFRBQkxFIEFTIGlzIHRoYXQgd2UgZGVwcmFzZSB0aGUgQ1JF QVRFClRBQkxFIEFTIGludG8gYSBzaW1wbGUgQ1JFQVRFIFRBQkxFKHdpdGhvdXQgc3VicXVlcnkp IGNvbW1hbmQgYW5kIFdBTCBsb2cgaXQKYWZ0ZXIgY3JlYXRpbmcgdGhlIHRhYmxlIGFuZCBiZWZv cmUgd3JpdGluZyBkYXRhIGludG8gdGhlIHRhYmxlIGFuZCByZXBsaWNhdGUKdGhlIGluY29taW5n IHdyaXRlcyBsYXRlciBhcyBub3JtYWwgSU5TRVJUcy4gSW4gdGhpcyBhcHBvcmFjaCwgd2UgZG9u J3QgZXhlY3V0ZQp0aGUgc3VicXVlcnkgb24gc3Vic2NyaWJlciBzbyB0aGF0IGRvbid0IG5lZWQg dG8gbWFrZSBzdXJlIGFsbCB0aGUgb2JqZWN0cwpyZWZlcmVuY2VkIGluIHRoZSBzdWJxdWVyeSBh bHNvIGV4aXN0cyBpbiBzdWJzY3JpYmVyLiBBbmQgVGhpcyBhcHByb2FjaCB3b3Jrcwpmb3IgYWxs IGtpbmQgb2YgY29tbWFuZHMoZS5nLiBDUkFFVEUgVEFCTEUgQVMgW1NFTEVDVF1bRVhFQ1VURV1b VkFMVUVTXSkKCkludHJvZHVjaW5nIGEgbmV3IHR5cGUgb2YgZXZlbnQgdHJpZ2dlciAidGFibGVf aW5pdF93cml0ZSIuIHdoaWNoIHdvdWxkIGJlIGZpcmVkCmZvciBDUkVBVEUgVEFCTEUgQVMvU0VM RUNUIElOVE8gYWZ0ZXIgY3JlYXRpbmcgdGhlIHRhYmxlIGFuZApiZWZvcmUgYW55IG90aGVyIG1v ZGlmaWNhdGlvbi4gd2UgZGVwYXJzZSB0aGUgY29tbWFuZCBpbiB0aGUgdGFibGVfaW5pdF93cml0 ZSBldmVudAp0cmlnZ2VyIGFuZCBXQUwgbG9nIHRoZSBkZXBhcnNlZCBqc29uIHN0cmluZy4gVGhl IHdhbHNlbmRlciB3aWxsIHNlbmQgdGhlCnN0cmluZyB0byBzdWJzY3JpYmVyLiBBbmQgaW5jb21p bmcgSU5TRVJUcyB3aWxsIGFsc28gYmUgcmVwbGljYXRlZC4KLS0tCiBzcmMvYmFja2VuZC9jb21t YW5kcy9jcmVhdGVhcy5jICAgICAgICB8ICAxMCArKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRs X2RlcGFyc2UuYyAgICAgfCAgMTggKysrKwogc3JjL2JhY2tlbmQvY29tbWFuZHMvZXZlbnRfdHJp Z2dlci5jICAgfCAxNjcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystCiBzcmMvYmFj a2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNtZHMuYyB8ICAgOSArKwogc3JjL2JhY2tlbmQvdGNv cC91dGlsaXR5LmMgICAgICAgICAgICAgfCAgIDIgKwogc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUv ZXZ0Y2FjaGUuYyAgICAgfCAgIDIgKwogc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCAg ICAgICAgfCAgIDMgKwogc3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oICAgfCAg IDQgKwogc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaCAgICAgfCAgIDkgKy0KIHNy Yy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmggICAgICAgICAgIHwgICAzICstCiAxMCBmaWxlcyBj aGFuZ2VkLCAyMjEgaW5zZXJ0aW9ucygrKSwgNiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9jb21tYW5kcy9jcmVhdGVhcy5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvY3Jl YXRlYXMuYwppbmRleCA5YWJiYjZiLi45ODllODk0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9j b21tYW5kcy9jcmVhdGVhcy5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2NyZWF0ZWFzLmMK QEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5oIgogI2luY2x1 ZGUgImNhdGFsb2cvdG9hc3RpbmcuaCIKICNpbmNsdWRlICJjb21tYW5kcy9jcmVhdGVhcy5oIgor I2luY2x1ZGUgImNvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCIKICNpbmNsdWRlICJjb21tYW5kcy9t YXR2aWV3LmgiCiAjaW5jbHVkZSAiY29tbWFuZHMvcHJlcGFyZS5oIgogI2luY2x1ZGUgImNvbW1h bmRzL3RhYmxlY21kcy5oIgpAQCAtMTQzLDYgKzE0NCwxNSBAQCBjcmVhdGVfY3Rhc19pbnRlcm5h bChMaXN0ICphdHRyTGlzdCwgSW50b0NsYXVzZSAqaW50bykKIAkJU3RvcmVWaWV3UXVlcnkoaW50 b1JlbGF0aW9uQWRkci5vYmplY3RJZCwgcXVlcnksIGZhbHNlKTsKIAkJQ29tbWFuZENvdW50ZXJJ bmNyZW1lbnQoKTsKIAl9CisJZWxzZQorCXsKKwkJLyoKKwkJICogRmlyZSB0aGUgdHJpZ2dlciBm b3IgdGFibGVfaW5pdF93cml0ZSBhZnRlciBjcmVhdGluZyB0aGUgdGFibGUgc28KKwkJICogdGhh dCB3ZSBjYW4gYWNjZXNzIHRoZSBjYXRhbG9nIGluZm8gYWJvdXQgdGhlIG5ld2x5IGNyZWF0ZWQg dGFibGUgaW4KKwkJICogdGhlIHRyaWdnZXIgZnVuY3Rpb24uCisJCSAqLworCQlFdmVudFRyaWdn ZXJUYWJsZUluaXRXcml0ZSgoTm9kZSAqKSBjcmVhdGUsIGludG9SZWxhdGlvbkFkZHIpOworCX0K IAogCXJldHVybiBpbnRvUmVsYXRpb25BZGRyOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvZGRsX2RlcGFyc2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNl LmMKaW5kZXggMmFhZGQzYS4uOTFlNDNmZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvZGRsX2RlcGFyc2UuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfZGVwYXJzZS5j CkBAIC0zMzA4LDYgKzMzMDgsMjEgQEAgcmVtb3ZlZCBmZWF0dXJlCiAJcmV0dXJuIGFsdGVyVGFi bGVTdG10OwogfQogCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NyZWF0ZVRhYmxlQXNTdG10 KENvbGxlY3RlZENvbW1hbmQgKmNtZCkKK3sKKwlPaWQJCQlvYmplY3RJZDsKKwlOb2RlCSAgICpw YXJzZXRyZWU7CisKKwlBc3NlcnQoY21kLT50eXBlID09IFNDVF9DcmVhdGVUYWJsZUFzKTsKKwor CXBhcnNldHJlZSA9IGNtZC0+ZC5jdGFzLnJlYWxfY3JlYXRlOworCW9iamVjdElkID0gY21kLT5k LmN0YXMuYWRkcmVzcy5vYmplY3RJZDsKKworCXJldHVybiBkZXBhcnNlX0NyZWF0ZVN0bXQob2Jq ZWN0SWQsIHBhcnNldHJlZSk7Cit9CisKKwogLyoKICAqIEhhbmRsZSBkZXBhcnNpbmcgb2Ygc2lt cGxlIGNvbW1hbmRzLgogICoKQEAgLTM0OTgsNiArMzUxMyw5IEBAIGRlcGFyc2VfdXRpbGl0eV9j b21tYW5kKENvbGxlY3RlZENvbW1hbmQgKmNtZCkKIAkJY2FzZSBTQ1RfQWx0ZXJUYWJsZToKIAkJ CXRyZWUgPSBkZXBhcnNlX0FsdGVyVGFibGVTdG10KGNtZCk7CiAJCQlicmVhazsKKwkJY2FzZSBT Q1RfQ3JlYXRlVGFibGVBczoKKwkJCXRyZWUgPSBkZXBhcnNlX0NyZWF0ZVRhYmxlQXNTdG10KGNt ZCk7CisJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIGRl cGFyc2Ugbm9kZSB0eXBlICVkIiwgY21kLT50eXBlKTsKIAl9CmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9jb21tYW5kcy9ldmVudF90cmlnZ2VyLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVu dF90cmlnZ2VyLmMKaW5kZXggZGRiODRkNC4uN2I1YzdhMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2 ZW50X3RyaWdnZXIuYwpAQCAtMTMzLDcgKzEzMyw4IEBAIENyZWF0ZUV2ZW50VHJpZ2dlcihDcmVh dGVFdmVudFRyaWdTdG10ICpzdG10KQogCWlmIChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAiZGRs X2NvbW1hbmRfc3RhcnQiKSAhPSAwICYmCiAJCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJkZGxf Y29tbWFuZF9lbmQiKSAhPSAwICYmCiAJCXN0cmNtcChzdG10LT5ldmVudG5hbWUsICJzcWxfZHJv cCIpICE9IDAgJiYKLQkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUiKSAh PSAwKQorCQlzdHJjbXAoc3RtdC0+ZXZlbnRuYW1lLCAidGFibGVfcmV3cml0ZSIpICE9IDAgJiYK KwkJc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX2luaXRfd3JpdGUiKSAhPSAwKQogCQll cmVwb3J0KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKIAkJCQkg ZXJybXNnKCJ1bnJlY29nbml6ZWQgZXZlbnQgbmFtZSBcIiVzXCIiLApAQCAtMTU5LDcgKzE2MCw4 IEBAIENyZWF0ZUV2ZW50VHJpZ2dlcihDcmVhdGVFdmVudFRyaWdTdG10ICpzdG10KQogCS8qIFZh bGlkYXRlIHRhZyBsaXN0LCBpZiBhbnkuICovCiAJaWYgKChzdHJjbXAoc3RtdC0+ZXZlbnRuYW1l LCAiZGRsX2NvbW1hbmRfc3RhcnQiKSA9PSAwIHx8CiAJCSBzdHJjbXAoc3RtdC0+ZXZlbnRuYW1l LCAiZGRsX2NvbW1hbmRfZW5kIikgPT0gMCB8fAotCQkgc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwg InNxbF9kcm9wIikgPT0gMCkKKwkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJzcWxfZHJvcCIp ID09IDAgfHwKKwkJIHN0cmNtcChzdG10LT5ldmVudG5hbWUsICJ0YWJsZV9pbml0X3dyaXRlIikg PT0gMCkKIAkJJiYgdGFncyAhPSBOVUxMKQogCQl2YWxpZGF0ZV9kZGxfdGFncygidGFnIiwgdGFn cyk7CiAJZWxzZSBpZiAoc3RyY21wKHN0bXQtPmV2ZW50bmFtZSwgInRhYmxlX3Jld3JpdGUiKSA9 PSAwCkBAIC01ODYsNyArNTg4LDggQEAgRXZlbnRUcmlnZ2VyQ29tbW9uU2V0dXAoTm9kZSAqcGFy c2V0cmVlLAogCQlkYmd0YWcgPSBDcmVhdGVDb21tYW5kVGFnKHBhcnNldHJlZSk7CiAJCWlmIChl dmVudCA9PSBFVlRfRERMQ29tbWFuZFN0YXJ0IHx8CiAJCQlldmVudCA9PSBFVlRfRERMQ29tbWFu ZEVuZCB8fAotCQkJZXZlbnQgPT0gRVZUX1NRTERyb3ApCisJCQlldmVudCA9PSBFVlRfU1FMRHJv cCB8fAorCQkJZXZlbnQgPT0gRVZUX1RhYmxlSW5pdFdyaXRlKQogCQl7CiAJCQlpZiAoIWNvbW1h bmRfdGFnX2V2ZW50X3RyaWdnZXJfb2soZGJndGFnKSkKIAkJCQllbG9nKEVSUk9SLCAidW5leHBl Y3RlZCBjb21tYW5kIHRhZyBcIiVzXCIiLCBHZXRDb21tYW5kVGFnTmFtZShkYmd0YWcpKTsKQEAg LTg2OSw2ICs4NzIsMTU4IEBAIEV2ZW50VHJpZ2dlclRhYmxlUmV3cml0ZShOb2RlICpwYXJzZXRy ZWUsIE9pZCB0YWJsZU9pZCwgaW50IHJlYXNvbikKIAlDb21tYW5kQ291bnRlckluY3JlbWVudCgp OwogfQogCisKKy8qCisgKiBFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0CisgKiAgICAg UHJlcGFyZSB0byByZWNlaXZlIGRhdGEgb24gYW4gQ1JFQVRFIFRBQkxFIEFTL1NFTEVUIElOVE8g Y29tbWFuZCBhYm91dAorICogICAgIHRvIGJlIGV4ZWN1dGVkLgorICovCit2b2lkCitFdmVudFRy aWdnZXJUYWJsZUluaXRXcml0ZVN0YXJ0KE5vZGUgKnBhcnNldHJlZSkKK3sKKwlNZW1vcnlDb250 ZXh0IG9sZGN4dDsKKwlDb2xsZWN0ZWRDb21tYW5kICpjb21tYW5kOworCisJLyogaWdub3JlIGlm IGV2ZW50IHRyaWdnZXIgY29udGV4dCBub3Qgc2V0LCBvciBjb2xsZWN0aW9uIGRpc2FibGVkICov CisJaWYgKCFjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUgfHwKKwkJY3VycmVudEV2ZW50VHJpZ2dl clN0YXRlLT5jb21tYW5kQ29sbGVjdGlvbkluaGliaXRlZCkKKwkJcmV0dXJuOworCisJb2xkY3h0 ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRvKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3h0KTsK KworCWNvbW1hbmQgPSBwYWxsb2Moc2l6ZW9mKENvbGxlY3RlZENvbW1hbmQpKTsKKworCWNvbW1h bmQtPnR5cGUgPSBTQ1RfQ3JlYXRlVGFibGVBczsKKwljb21tYW5kLT5pbl9leHRlbnNpb24gPSBj cmVhdGluZ19leHRlbnNpb247CisJY29tbWFuZC0+ZC5jdGFzLmFkZHJlc3MgPSBJbnZhbGlkT2Jq ZWN0QWRkcmVzczsKKwljb21tYW5kLT5kLmN0YXMucmVhbF9jcmVhdGUgPSBOVUxMOworCWNvbW1h bmQtPnBhcnNldHJlZSA9IGNvcHlPYmplY3QocGFyc2V0cmVlKTsKKworCWNvbW1hbmQtPnBhcmVu dCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQ7CisJY3VycmVudEV2 ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCA9IGNvbW1hbmQ7CisKKwlNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob2xkY3h0KTsKK30KKworLyoKKyAqIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdy aXRlRW5kCisgKgkJRmluaXNoIHVwIHNhdmluZyBhbiBDUkVBVEUgVEFCTEUgQVMvU0VMRUNUIElO VE8gY29tbWFuZC4KKyAqCisgKiBGSVhNRSB0aGlzIEFQSSBpc24ndCBjb25zaWRlcmluZyB0aGUg cG9zc2liaWxpdHkgdGhhdCBhbiB4YWN0L3N1YnhhY3QgaXMKKyAqIGFib3J0ZWQgcGFydHdheSB0 aHJvdWdoLiAgUHJvYmFibHkgaXQncyBiZXN0IHRvIGFkZCBhbgorICogQXRFT1N1YlhhY3RfRXZl bnRUcmlnZ2VycygpIHRvIGZpeCB0aGlzLgorICovCit2b2lkCitFdmVudFRyaWdnZXJUYWJsZUlu aXRXcml0ZUVuZCh2b2lkKQoreworCUNvbGxlY3RlZENvbW1hbmQgKnBhcmVudDsKKworCS8qIGln bm9yZSBpZiBldmVudCB0cmlnZ2VyIGNvbnRleHQgbm90IHNldCwgb3IgY29sbGVjdGlvbiBkaXNh YmxlZCAqLworCWlmICghY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlIHx8CisJCWN1cnJlbnRFdmVu dFRyaWdnZXJTdGF0ZS0+Y29tbWFuZENvbGxlY3Rpb25JbmhpYml0ZWQpCisJCXJldHVybjsKKwor CXBhcmVudCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPnBhcmVu dDsKKworCXBmcmVlKGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQpOwor CisJY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFuZCA9IHBhcmVudDsKK30K KworLyoKKyAqIHB1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfaW5pdF93cml0ZQorICoKKyAqIERl cGFyc2UgdGhlIGRkbCB0YWJsZSBjcmVhdGUgY29tbWFuZCBhbmQgbG9nIGl0LgorICovCitEYXR1 bQorcHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlKFBHX0ZVTkNUSU9OX0FSR1Mp Cit7CisJY2hhcgkJCQlyZWxwZXJzaXN0OworCUNvbGxlY3RlZENvbW1hbmQgICAqY21kOworCWNo YXIgICAJCQkgICAqanNvbl9zdHJpbmc7CisKKwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VS KGZjaW5mbykpCisJCWVsb2coRVJST1IsICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5h Z2VyIik7CisKKwljbWQgPSBjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5k OworCUFzc2VydChjbWQpOworCisJcmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoY21k LT5kLnNpbXBsZS5hZGRyZXNzLm9iamVjdElkKTsKKworCS8qCisJICogRG8gbm90IGdlbmVyYXRl IHdhbCBsb2cgZm9yIGNvbW1hbmRzIHdob3NlIHRhcmdldCB0YWJsZSBpcyBhCisJICogdGVtcG9y YXJ5IHRhYmxlLgorCSAqCisJICogVE8gQ0hFQ0s6IERvIHdlIG5lZWQgdG8gZ2VuZXJhdGUgd2Fs IGxvZyBmb3IgdW5sb2dnZWQgdGFibGUgPyBGb3IKKwkgKiBub3csIHdlIHN0aWxsIGdlbmVyYXRl IHdhbCBmb3IgdW5sb2dnZWQgdGFibGUgbGlrZSB3aGF0IHdlIGRvIGZvcgorCSAqIERETHMgZm9y IHVubG9nZ2VkIHRhYmxlIGluIHN0cmVhbWluZyByZXBsaWNhdGlvbi4KKwkgKi8KKwlpZiAocmVs cGVyc2lzdCA9PSBSRUxQRVJTSVNURU5DRV9URU1QKQorCQlyZXR1cm4gUG9pbnRlckdldERhdHVt KE5VTEwpOworCisJLyogRGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgYW5kIFdBTCBsb2cgaXQgdG8g YWxsb3cgZGVjb2Rpbmcgb2YgdGhlIHNhbWUuICovCisJanNvbl9zdHJpbmcgPSBkZXBhcnNlX3V0 aWxpdHlfY29tbWFuZChjbWQpOworCisJaWYgKGpzb25fc3RyaW5nICE9IE5VTEwpCisJCUxvZ0xv Z2ljYWxERExNZXNzYWdlKCJkZXBhcnNlIiwgY21kLT5kLnNpbXBsZS5hZGRyZXNzLm9iamVjdElk LCBEQ1RfU2ltcGxlQ21kLAorCQkJCQkJCSBqc29uX3N0cmluZywgc3RybGVuKGpzb25fc3RyaW5n KSArIDEpOworCisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKK30KKworLyoKKyAqIEZp cmUgdGFibGVfaW5pdF9yZXdyaXRlIHRyaWdnZXJzLgorICovCit2b2lkCitFdmVudFRyaWdnZXJU YWJsZUluaXRXcml0ZShOb2RlICpyZWFsX2NyZWF0ZSwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzKQor eworCUxpc3QJICAgKnJ1bmxpc3Q7CisJRXZlbnRUcmlnZ2VyRGF0YSB0cmlnZGF0YTsKKwlDb2xs ZWN0ZWRDb21tYW5kICpjb21tYW5kOworCisJLyoKKwkgKiBTZWUgRXZlbnRUcmlnZ2VyRERMQ29t bWFuZFN0YXJ0IGZvciBhIGRpc2N1c3Npb24gYWJvdXQgd2h5IGV2ZW50CisJICogdHJpZ2dlcnMg YXJlIGRpc2FibGVkIGluIHNpbmdsZSB1c2VyIG1vZGUuCisJICovCisJaWYgKCFJc1VuZGVyUG9z dG1hc3RlcikKKwkJcmV0dXJuOworCisJLyoKKwkgKiBBbHNvIGRvIG5vdGhpbmcgaWYgb3VyIHN0 YXRlIGlzbid0IHNldCB1cCwgd2hpY2ggaXQgd29uJ3QgYmUgaWYgdGhlcmUKKwkgKiB3ZXJlbid0 IGFueSByZWxldmFudCBldmVudCB0cmlnZ2VycyBhdCB0aGUgc3RhcnQgb2YgdGhlIGN1cnJlbnQg RERMCisJICogY29tbWFuZC4gIFRoaXMgdGVzdCBtaWdodCB0aGVyZWZvcmUgc2VlbSBvcHRpb25h bCwgYnV0IGl0J3MKKwkgKiAqbmVjZXNzYXJ5KiwgYmVjYXVzZSBFdmVudFRyaWdnZXJDb21tb25T ZXR1cCBtaWdodCBmaW5kIHRyaWdnZXJzIHRoYXQKKwkgKiBkaWRuJ3QgZXhpc3QgYXQgdGhlIHRp bWUgdGhlIGNvbW1hbmQgc3RhcnRlZC4KKwkgKi8KKwlpZiAoIWN1cnJlbnRFdmVudFRyaWdnZXJT dGF0ZSkKKwkJcmV0dXJuOworCisJY29tbWFuZCA9IGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+ Y3VycmVudENvbW1hbmQ7CisKKwlydW5saXN0ID0gRXZlbnRUcmlnZ2VyQ29tbW9uU2V0dXAoY29t bWFuZC0+cGFyc2V0cmVlLAorCQkJCQkJCQkJICBFVlRfVGFibGVJbml0V3JpdGUsCisJCQkJCQkJ CQkgICJ0YWJsZV9pbml0X3dyaXRlIiwKKwkJCQkJCQkJCSAgJnRyaWdkYXRhKTsKKwlpZiAocnVu bGlzdCA9PSBOSUwpCisJCXJldHVybjsKKworCS8qIFNldCB0aGUgcmVhbCBDcmVhdGVUYWJsZSBz dGF0bWVudCBhbmQgb2JqZWN0IGFkZHJlc3MgKi8KKwljb21tYW5kLT5kLmN0YXMucmVhbF9jcmVh dGUgPSByZWFsX2NyZWF0ZTsKKwljb21tYW5kLT5kLmN0YXMuYWRkcmVzcyA9IGFkZHJlc3M7CisK KwkvKiBSdW4gdGhlIHRyaWdnZXJzLiAqLworCUV2ZW50VHJpZ2dlckludm9rZShydW5saXN0LCAm dHJpZ2RhdGEpOworCisJLyogQ2xlYW51cC4gKi8KKwlsaXN0X2ZyZWUocnVubGlzdCk7CisKKwkv KgorCSAqIE1ha2Ugc3VyZSBhbnl0aGluZyB0aGUgZXZlbnQgdHJpZ2dlcnMgZGlkIHdpbGwgYmUg dmlzaWJsZSB0byB0aGUgbWFpbgorCSAqIGNvbW1hbmQuCisJICovCisJQ29tbWFuZENvdW50ZXJJ bmNyZW1lbnQoKTsKK30KKwogLyoKICAqIEludm9rZSBlYWNoIGV2ZW50IHRyaWdnZXIgaW4gYSBs aXN0IG9mIGV2ZW50IHRyaWdnZXJzLgogICovCkBAIC0xMTQ5LDcgKzEzMDQsOCBAQCB0cmFja0Ry b3BwZWRPYmplY3RzTmVlZGVkKHZvaWQpCiAJICovCiAJcmV0dXJuIGxpc3RfbGVuZ3RoKEV2ZW50 Q2FjaGVMb29rdXAoRVZUX1NRTERyb3ApKSA+IDAgfHwKIAkJbGlzdF9sZW5ndGgoRXZlbnRDYWNo ZUxvb2t1cChFVlRfVGFibGVSZXdyaXRlKSkgPiAwIHx8Ci0JCWxpc3RfbGVuZ3RoKEV2ZW50Q2Fj aGVMb29rdXAoRVZUX0RETENvbW1hbmRFbmQpKSA+IDA7CisJCWxpc3RfbGVuZ3RoKEV2ZW50Q2Fj aGVMb29rdXAoRVZUX0RETENvbW1hbmRFbmQpKSA+IDAgfHwKKwkJbGlzdF9sZW5ndGgoRXZlbnRD YWNoZUxvb2t1cChFVlRfVGFibGVJbml0V3JpdGUpKSA+IDA7CiB9CiAKIC8qCkBAIC0xODczLDYg KzIwMjksNyBAQCBwZ19ldmVudF90cmlnZ2VyX2RkbF9jb21tYW5kcyhQR19GVU5DVElPTl9BUkdT KQogCQkJY2FzZSBTQ1RfQWx0ZXJPcEZhbWlseToKIAkJCWNhc2UgU0NUX0NyZWF0ZU9wQ2xhc3M6 CiAJCQljYXNlIFNDVF9BbHRlclRTQ29uZmlnOgorCQkJY2FzZSBTQ1RfQ3JlYXRlVGFibGVBczoK IAkJCQl7CiAJCQkJCWNoYXIJICAgKmlkZW50aXR5OwogCQkJCQljaGFyCSAgICp0eXBlOwpAQCAt MTg5MCw2ICsyMDQ3LDggQEAgcGdfZXZlbnRfdHJpZ2dlcl9kZGxfY29tbWFuZHMoUEdfRlVOQ1RJ T05fQVJHUykKIAkJCQkJCWFkZHIgPSBjbWQtPmQuY3JlYXRlb3BjLmFkZHJlc3M7CiAJCQkJCWVs c2UgaWYgKGNtZC0+dHlwZSA9PSBTQ1RfQWx0ZXJUU0NvbmZpZykKIAkJCQkJCWFkZHIgPSBjbWQt PmQuYXRzY2ZnLmFkZHJlc3M7CisJCQkJCWVsc2UgaWYgKGNtZC0+dHlwZSA9PSBTQ1RfQWx0ZXJU U0NvbmZpZykKKwkJCQkJCWFkZHIgPSBjbWQtPmQuY3Rhcy5hZGRyZXNzOwogCiAJCQkJCS8qCiAJ CQkJCSAqIElmIGFuIG9iamVjdCB3YXMgZHJvcHBlZCBpbiB0aGUgc2FtZSBjb21tYW5kIHdlIG1h eSBlbmQKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3B1YmxpY2F0aW9uY21kcy5j IGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKaW5kZXggMTJkNGIyZS4u ZmY3NTk5OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRz LmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMKQEAgLTk2Niw2 ICs5NjYsMTEgQEAgQ3JlYXRlUHVibGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQ dWJsaWNhdGlvblN0bXQgKnN0bXQpCiAJCQlDTURUQUdfQUxURVJfSU5ERVgKIAkJfTsKIAorCQlD b21tYW5kVGFnCWluaXRfY29tbWFuZHNbXSA9IHsKKwkJCUNNRFRBR19DUkVBVEVfVEFCTEVfQVMs CisJCQlDTURUQUdfU0VMRUNUX0lOVE8KKwkJfTsKKwogCQkvKiBDcmVhdGUgdGhlIGRkbF9jb21t YW5kX2VuZCBldmVudCB0cmlnZ2VyICovCiAJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIo ImRkbF9jb21tYW5kX2VuZCIsIGVuZF9jb21tYW5kcywKIAkJCQkJCQkJCSBsZW5ndGhvZihlbmRf Y29tbWFuZHMpLCBteXNlbGYsIHB1Ym9pZCk7CkBAIC05NzcsNiArOTgyLDEwIEBAIENyZWF0ZVB1 YmxpY2F0aW9uKFBhcnNlU3RhdGUgKnBzdGF0ZSwgQ3JlYXRlUHVibGljYXRpb25TdG10ICpzdG10 KQogCQkvKiBDcmVhdGUgdGhlIHRhYmxlX3Jld3JpdGUgZXZlbnQgdHJpZ2dlciAqLwogCQlDcmVh dGVERExSZXBsaWNhRXZlbnRUcmlnZ2VyKCJ0YWJsZV9yZXdyaXRlIiwgcmV3cml0ZV9jb21tYW5k cywKIAkJCQkJCQkJCSBsZW5ndGhvZihyZXdyaXRlX2NvbW1hbmRzKSwgbXlzZWxmLCBwdWJvaWQp OworCisJCS8qIENyZWF0ZSB0aGUgdGFibGVfaW5pdF93cml0ZSBldmVudCB0cmlnZ2VyICovCisJ CUNyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoInRhYmxlX2luaXRfd3JpdGUiLCBpbml0X2Nv bW1hbmRzLAorCQkJCQkJCQkJIGxlbmd0aG9mKGluaXRfY29tbWFuZHMpLCBteXNlbGYsIHB1Ym9p ZCk7CiAJfQogCiAJdGFibGVfY2xvc2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL3Rjb3AvdXRpbGl0eS5jIGIvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5 LmMKaW5kZXggNmE1YmNkZS4uNGQwMDNkZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdGNvcC91 dGlsaXR5LmMKKysrIGIvc3JjL2JhY2tlbmQvdGNvcC91dGlsaXR5LmMKQEAgLTE2NjUsOCArMTY2 NSwxMCBAQCBQcm9jZXNzVXRpbGl0eVNsb3coUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCWJyZWFr OwogCiAJCQljYXNlIFRfQ3JlYXRlVGFibGVBc1N0bXQ6CisJCQkJRXZlbnRUcmlnZ2VyVGFibGVJ bml0V3JpdGVTdGFydChwYXJzZXRyZWUpOwogCQkJCWFkZHJlc3MgPSBFeGVjQ3JlYXRlVGFibGVB cyhwc3RhdGUsIChDcmVhdGVUYWJsZUFzU3RtdCAqKSBwYXJzZXRyZWUsCiAJCQkJCQkJCQkJCXBh cmFtcywgcXVlcnlFbnYsIHFjKTsKKwkJCQlFdmVudFRyaWdnZXJUYWJsZUluaXRXcml0ZUVuZCgp OwogCQkJCWJyZWFrOwogCiAJCQljYXNlIFRfUmVmcmVzaE1hdFZpZXdTdG10OgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUvZXZ0Y2FjaGUuYyBiL3NyYy9iYWNrZW5kL3V0aWxz L2NhY2hlL2V2dGNhY2hlLmMKaW5kZXggM2E5YzlmMC4uNDY3Y2Q2NSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvdXRpbHMvY2FjaGUvZXZ0Y2FjaGUuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9j YWNoZS9ldnRjYWNoZS5jCkBAIC0xNjcsNiArMTY3LDggQEAgQnVpbGRFdmVudFRyaWdnZXJDYWNo ZSh2b2lkKQogCQkJZXZlbnQgPSBFVlRfU1FMRHJvcDsKIAkJZWxzZSBpZiAoc3RyY21wKGV2dGV2 ZW50LCAidGFibGVfcmV3cml0ZSIpID09IDApCiAJCQlldmVudCA9IEVWVF9UYWJsZVJld3JpdGU7 CisJCWVsc2UgaWYgKHN0cmNtcChldnRldmVudCwgInRhYmxlX2luaXRfd3JpdGUiKSA9PSAwKQor CQkJZXZlbnQgPSBFVlRfVGFibGVJbml0V3JpdGU7CiAJCWVsc2UKIAkJCWNvbnRpbnVlOwogCmRp ZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0IGIvc3JjL2luY2x1ZGUv Y2F0YWxvZy9wZ19wcm9jLmRhdAppbmRleCBiYjk4YzE3Li41ZmUyOGM5IDEwMDY0NAotLS0gYS9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cv cGdfcHJvYy5kYXQKQEAgLTExODk5LDQgKzExODk5LDcgQEAKIHsgb2lkID0+ICc0NjQ2JywgZGVz Y3IgPT4gJ3RyaWdnZXIgZm9yIGRkbCBjb21tYW5kIGRlcGFyc2UgdGFibGUgcmV3cml0ZScsCiAg IHByb25hbWUgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZScsIHByb3JldHR5 cGUgPT4gJ2V2ZW50X3RyaWdnZXInLAogICBwcm9hcmd0eXBlcyA9PiAnJywgcHJvc3JjID0+ICdw dWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX3Jld3JpdGUnIH0sCit7IG9pZCA9PiAnNDY0NycsIGRl c2NyID0+ICd0cmlnZ2VyIGZvciBkZGwgY29tbWFuZCBkZXBhcnNlIHRhYmxlIGluaXQnLAorICBw cm9uYW1lID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX3RhYmxlX2luaXRfd3JpdGUnLCBwcm9yZXR0 eXBlID0+ICdldmVudF90cmlnZ2VyJywKKyAgcHJvYXJndHlwZXMgPT4gJycsIHByb3NyYyA9PiAn cHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9pbml0X3dyaXRlJyB9LAogXQpkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvY29tbWFuZHMvZXZlbnRfdHJpZ2dlci5oIGIvc3JjL2luY2x1ZGUvY29tbWFu ZHMvZXZlbnRfdHJpZ2dlci5oCmluZGV4IGZkMmVlN2YuLmE5ZTBmNzEgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaAorKysgYi9zcmMvaW5jbHVkZS9jb21t YW5kcy9ldmVudF90cmlnZ2VyLmgKQEAgLTU1LDYgKzU1LDEwIEBAIGV4dGVybiB2b2lkIEV2ZW50 VHJpZ2dlckRETENvbW1hbmRFbmQoTm9kZSAqcGFyc2V0cmVlKTsKIGV4dGVybiB2b2lkIEV2ZW50 VHJpZ2dlclNRTERyb3AoTm9kZSAqcGFyc2V0cmVlKTsKIGV4dGVybiB2b2lkIEV2ZW50VHJpZ2dl clRhYmxlUmV3cml0ZShOb2RlICpwYXJzZXRyZWUsIE9pZCB0YWJsZU9pZCwgaW50IHJlYXNvbik7 CiAKK2V4dGVybiB2b2lkIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlU3RhcnQoTm9kZSAqcGFy c2V0cmVlKTsKK2V4dGVybiB2b2lkIEV2ZW50VHJpZ2dlclRhYmxlSW5pdFdyaXRlKE5vZGUgKnBh cnNldHJlZSwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzKTsKK2V4dGVybiB2b2lkIEV2ZW50VHJpZ2dl clRhYmxlSW5pdFdyaXRlRW5kKHZvaWQpOworCiBleHRlcm4gYm9vbCBFdmVudFRyaWdnZXJCZWdp bkNvbXBsZXRlUXVlcnkodm9pZCk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJFbmRDb21wbGV0 ZVF1ZXJ5KHZvaWQpOwogZXh0ZXJuIGJvb2wgdHJhY2tEcm9wcGVkT2JqZWN0c05lZWRlZCh2b2lk KTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmggYi9zcmMv aW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCmluZGV4IGI1MzI5NGIuLjNkMjk0YTAgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgKKysrIGIvc3JjL2lu Y2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaApAQCAtMjksNyArMjksOCBAQCB0eXBlZGVmIGVu dW0gQ29sbGVjdGVkQ29tbWFuZFR5cGUKIAlTQ1RfQWx0ZXJPcEZhbWlseSwKIAlTQ1RfQWx0ZXJE ZWZhdWx0UHJpdmlsZWdlcywKIAlTQ1RfQ3JlYXRlT3BDbGFzcywKLQlTQ1RfQWx0ZXJUU0NvbmZp ZworCVNDVF9BbHRlclRTQ29uZmlnLAorCVNDVF9DcmVhdGVUYWJsZUFzCiB9IENvbGxlY3RlZENv bW1hbmRUeXBlOwogCiAvKgpAQCAtMTAxLDYgKzEwMiwxMiBAQCB0eXBlZGVmIHN0cnVjdCBDb2xs ZWN0ZWRDb21tYW5kCiAJCXsKIAkJCU9iamVjdFR5cGUJb2JqdHlwZTsKIAkJfQkJCWRlZnByaXZz OworCisJCXN0cnVjdAorCQl7CisJCQlPYmplY3RBZGRyZXNzIGFkZHJlc3M7CisJCQlOb2RlCQkg KnJlYWxfY3JlYXRlOworCQl9CQkJY3RhczsKIAl9CQkJZDsKIAogCXN0cnVjdCBDb2xsZWN0ZWRD b21tYW5kICpwYXJlbnQ7CS8qIHdoZW4gbmVzdGVkICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS91dGlscy9ldnRjYWNoZS5oIGIvc3JjL2luY2x1ZGUvdXRpbHMvZXZ0Y2FjaGUuaAppbmRleCBk ZGI2N2E2Li4xZTY0ODMxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9ldnRjYWNoZS5o CisrKyBiL3NyYy9pbmNsdWRlL3V0aWxzL2V2dGNhY2hlLmgKQEAgLTIyLDcgKzIyLDggQEAgdHlw ZWRlZiBlbnVtCiAJRVZUX0RETENvbW1hbmRTdGFydCwKIAlFVlRfRERMQ29tbWFuZEVuZCwKIAlF VlRfU1FMRHJvcCwKLQlFVlRfVGFibGVSZXdyaXRlCisJRVZUX1RhYmxlUmV3cml0ZSwKKwlFVlRf VGFibGVJbml0V3JpdGUKIH0gRXZlbnRUcmlnZ2VyRXZlbnQ7CiAKIHR5cGVkZWYgc3RydWN0Ci0t IAoyLjcuMi53aW5kb3dzLjEKCg== --_005_OS0PR01MB571676298B814F7F5690D92994BB9OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v10-0001-Functions-to-deparse-DDL-commands.patch" Content-Description: v10-0001-Functions-to-deparse-DDL-commands.patch Content-Disposition: attachment; filename="v10-0001-Functions-to-deparse-DDL-commands.patch"; size=135778; creation-date="Wed, 29 Jun 2022 09:47:00 GMT"; modification-date="Wed, 29 Jun 2022 09:54:37 GMT" Content-Transfer-Encoding: base64 RnJvbSBjZWY1MGY0NmY4N2VjMjY0MjhiZTI1MWQ0YzQ5OGZhZTZmMzRkMTdhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiaG91emouZm5zdCIgPGhvdXpqLmZuc3RAY24uZnVqaXRzdS5j b20+CkRhdGU6IEZyaSwgMjcgTWF5IDIwMjIgMTM6NDc6MDUgKzA4MDAKU3ViamVjdDogW1BBVENI XSBGdW5jdGlvbnMgdG8gZGVwYXJzZSBEREwgY29tbWFuZHMuCgpUaGlzIHBhdGNoIHByb3ZpZGVz IEpTT04gYmxvYnMgcmVwcmVzZW50aW5nIERETCBjb21tYW5kcywgd2hpY2ggY2FuCmxhdGVyIGJl IHJlLXByb2Nlc3NlZCBpbnRvIHBsYWluIHN0cmluZ3MgYnkgd2VsbC1kZWZpbmVkIHNwcmludGYt bGlrZQpleHBhbnNpb24uIFRoZXNlIEpTT04gb2JqZWN0cyBhcmUgaW50ZW5kZWQgdG8gYWxsb3cg Zm9yIG1hY2hpbmUtZWRpdGluZyBvZgp0aGUgY29tbWFuZHMsIGJ5IHJlcGxhY2luZyBjZXJ0YWlu IG5vZGVzIHdpdGhpbiB0aGUgb2JqZWN0cy4KCk11Y2ggb2YgdGhlIGluZm9ybWF0aW9uIGluIHRo ZSBvdXRwdXQgYmxvYiBhY3R1YWxseSBjb21lcyBmcm9tIHN5c3RlbQpjYXRhbG9ncywgbm90IGZy b20gdGhlIGNvbW1hbmQgcGFyc2Ugbm9kZSwgYXMgaXQgaXMgaW1wb3NzaWJsZSB0byByZWxpYWJs eQpjb25zdHJ1Y3QgYSBmdWxseS1zcGVjaWZpZWQgY29tbWFuZCAoaS5lLiBvbmUgbm90IGRlcGVu ZGVudCBvbiBzZWFyY2hfcGF0aApldGMpIGxvb2tpbmcgb25seSBhdCB0aGUgcGFyc2Ugbm9kZS4K ClRoaXMgcHJvdmlkZXMgYmFzZSBmb3IgbG9naWNhbCByZXBsaWNhdGlvbiBvZiBEREwgc3RhdGVt ZW50cy4gQ3VycmVudGx5LAp0aGlzIHByb3ZpZGVzIHN1cHBvcnQgZm9yOgoKQ1JFQVRFL0FMVEVS L0RST1AgVEFCTEUgKCopCkNSRUFURS9BTFRFUi9EUk9QIFNFUVVFTkNFCkNSRUFURS9EUk9QIFND SEVNQQoKKCopIE5vdGUgdGhhdCBzb21lIHJlY2VudGx5IGludHJvZHVjZWQgRERMcyhlLmcuIERE THMgcmVsYXRlZCB0bwpQQVJUSVRJT05FRCBUQUJMRSkgYXJlIHVuc3VwcG9ydGVkLiBXZSBjYW4g ZXh0ZW5kIGl0IGFzIHdlIG5lZWQgbW9yZQpmdW5jdGlvbmFsaXR5IGZvciBEREwgcmVwbGljYXRp b24uCgooKikgTm90ZSB0aGF0LCBmb3IgQVRUQUNIL0RFVEFDSCBQQVJUSVRJT04sIHdlIGhhdmVu J3QgYWRkZWQgZXh0cmEgbG9naWMgb24Kc3Vic2NyaWJlciB0byBoYW5kbGUgdGhlIGNhc2Ugd2hl cmUgdGhlIHRhYmxlIG9uIHB1Ymxpc2hlciBpcyBhIFBBUlRJVElPTkVEClRBQkxFIHdoaWxlIHRo ZSB0YXJnZXQgdGFibGUgb24gc3ViY3JpYmVyIHNpZGUgaXMgTk9STUFMIHRhYmxlLiBXZSB3aWxs CnJlc2VhcmNoIHRoaXMgbW9yZSBhbmQgaW1wcm92ZSB0aGlzIGxhdGVyLgoKLS0tCiBzcmMvYmFj a2VuZC9jb21tYW5kcy9NYWtlZmlsZSAgICAgIHwgICAgMiArCiBzcmMvYmFja2VuZC9jb21tYW5k cy9kZGxfZGVwYXJzZS5jIHwgMzU0NSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysKIHNyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMgICAgfCAgNzQ5ICsrKysrKysrCiBz cmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jICAgIHwgICAzNCArCiBzcmMvYmFja2VuZC9j b21tYW5kcy90YWJsZWNtZHMuYyAgIHwgICAxNyArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1 bGV1dGlscy5jICB8ICAgMjIgKy0KIHNyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgICAg fCAgICA3ICstCiBzcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oICAgIHwgICAgMSArCiBz cmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNlLmggICAgIHwgICAxMyArCiBzcmMvaW5jbHVkZS90 Y29wL2RlcGFyc2VfdXRpbGl0eS5oIHwgICAgMSArCiBzcmMvaW5jbHVkZS91dGlscy9ydWxldXRp bHMuaCAgICAgIHwgICAgNSArCiAxMSBmaWxlcyBjaGFuZ2VkLCA0MzgyIGluc2VydGlvbnMoKyks IDE0IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5kL2NvbW1hbmRz L2RkbF9kZXBhcnNlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFja2VuZC9jb21tYW5kcy9k ZGxfanNvbi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJz ZS5oCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvTWFrZWZpbGUgYi9zcmMvYmFj a2VuZC9jb21tYW5kcy9NYWtlZmlsZQppbmRleCA0OGY3MzQ4Li4xNzFkZmIyIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jb21tYW5kcy9NYWtlZmlsZQorKysgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9NYWtlZmlsZQpAQCAtMjksNiArMjksOCBAQCBPQkpTID0gXAogCWNvcHl0by5vIFwKIAljcmVh dGVhcy5vIFwKIAlkYmNvbW1hbmRzLm8gXAorCWRkbF9kZXBhcnNlLm8gXAorCWRkbF9qc29uLm8g XAogCWRlZmluZS5vIFwKIAlkaXNjYXJkLm8gXAogCWRyb3BjbWRzLm8gXApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRz L2RkbF9kZXBhcnNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFhZGQz YQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9kZXBhcnNlLmMK QEAgLTAsMCArMSwzNTQ1IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxfZGVwYXJz ZS5jCisgKgkgIEZ1bmN0aW9ucyB0byBjb252ZXJ0IHV0aWxpdHkgY29tbWFuZHMgdG8gbWFjaGlu ZS1wYXJzZWFibGUKKyAqCSAgcmVwcmVzZW50YXRpb24KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmln aHQgKGMpIDE5OTYtMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAq IFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBv ZiBDYWxpZm9ybmlhCisgKgorICogTk9URVMKKyAqCisgKiBUaGlzIGlzIGludGVuZGVkIHRvIHBy b3ZpZGUgSlNPTiBibG9icyByZXByZXNlbnRpbmcgRERMIGNvbW1hbmRzLCB3aGljaCBjYW4KKyAq IGxhdGVyIGJlIHJlLXByb2Nlc3NlZCBpbnRvIHBsYWluIHN0cmluZ3MgYnkgd2VsbC1kZWZpbmVk IHNwcmludGYtbGlrZQorICogZXhwYW5zaW9uLiAgVGhlc2UgSlNPTiBvYmplY3RzIGFyZSBpbnRl bmRlZCB0byBhbGxvdyBmb3IgbWFjaGluZS1lZGl0aW5nIG9mCisgKiB0aGUgY29tbWFuZHMsIGJ5 IHJlcGxhY2luZyBjZXJ0YWluIG5vZGVzIHdpdGhpbiB0aGUgb2JqZWN0cy4KKyAqCisgKiBNdWNo IG9mIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgb3V0cHV0IGJsb2IgYWN0dWFsbHkgY29tZXMgZnJv bSBzeXN0ZW0KKyAqIGNhdGFsb2dzLCBub3QgZnJvbSB0aGUgY29tbWFuZCBwYXJzZSBub2RlLCBh cyBpdCBpcyBpbXBvc3NpYmxlIHRvIHJlbGlhYmx5CisgKiBjb25zdHJ1Y3QgYSBmdWxseS1zcGVj aWZpZWQgY29tbWFuZCAoaS5lLiBvbmUgbm90IGRlcGVuZGVudCBvbiBzZWFyY2hfcGF0aAorICog ZXRjKSBsb29raW5nIG9ubHkgYXQgdGhlIHBhcnNlIG5vZGUuCisgKgorICogSURFTlRJRklDQVRJ T04KKyAqCSAgc3JjL2JhY2tlbmQvY29tbWFuZHMvZGRsX2RlcGFyc2UuYworICoKKyAqLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgInRjb3Av ZGRsX2RlcGFyc2UuaCIKKworI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUgImFj Y2Vzcy90YWJsZS5oIgorI2luY2x1ZGUgImFjY2Vzcy9yZWxhdGlvbi5oIgorI2luY2x1ZGUgImNh dGFsb2cvbmFtZXNwYWNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19hbS5oIgorI2luY2x1ZGUg ImNhdGFsb2cvcGdfYXR0cmlidXRlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19jbGFzcy5oIgor I2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19j b25zdHJhaW50LmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19kZXBlbmQuaCIKKyNpbmNsdWRlICJj YXRhbG9nL3BnX2luaGVyaXRzLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ19uYW1lc3BhY2UuaCIK KyNpbmNsdWRlICJjYXRhbG9nL3BnX3NlcXVlbmNlLmgiCisjaW5jbHVkZSAiY2F0YWxvZy9wZ190 eXBlLmgiCisjaW5jbHVkZSAiY29tbWFuZHMvZGVmcmVtLmgiCisjaW5jbHVkZSAiY29tbWFuZHMv c2VxdWVuY2UuaCIKKyNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNwYWNlLmgiCisjaW5jbHVkZSAi bGliL2lsaXN0LmgiCisjaW5jbHVkZSAibm9kZXMvbWFrZWZ1bmNzLmgiCisjaW5jbHVkZSAibm9k ZXMvbm9kZUZ1bmNzLmgiCisjaW5jbHVkZSAibm9kZXMvcGFyc2Vub2Rlcy5oIgorI2luY2x1ZGUg Im9wdGltaXplci9vcHRpbWl6ZXIuaCIKKyNpbmNsdWRlICJyZXdyaXRlL3Jld3JpdGVIYW5kbGVy LmgiCisjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNpbmNsdWRlICJ1dGlscy9mbWdyb2lk cy5oIgorI2luY2x1ZGUgInV0aWxzL2pzb25iLmgiCisjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hl LmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9yZWwuaCIK KyNpbmNsdWRlICJ1dGlscy9ydWxldXRpbHMuaCIKKyNpbmNsdWRlICJ1dGlscy9zeXNjYWNoZS5o IgorCisKKy8qCisgKiBCZWZvcmUgdGhleSBhcmUgdHVybmVkIGludG8gSlNPTkIgcmVwcmVzZW50 YXRpb24sIGVhY2ggY29tbWFuZCBpcworICogcmVwcmVzZW50ZWQgYXMgYW4gb2JqZWN0IHRyZWUs IHVzaW5nIHRoZSBzdHJ1Y3RzIGJlbG93LgorICovCit0eXBlZGVmIGVudW0KK3sKKwlPYmpUeXBl TnVsbCwKKwlPYmpUeXBlQm9vbCwKKwlPYmpUeXBlU3RyaW5nLAorCU9ialR5cGVBcnJheSwKKwlP YmpUeXBlSW50ZWdlciwKKwlPYmpUeXBlRmxvYXQsCisJT2JqVHlwZU9iamVjdAorfSBPYmpUeXBl OworCit0eXBlZGVmIHN0cnVjdCBPYmpUcmVlCit7CisJc2xpc3RfaGVhZAlwYXJhbXM7CisJaW50 CQkJbnVtUGFyYW1zOworfSBPYmpUcmVlOworCit0eXBlZGVmIHN0cnVjdCBPYmpFbGVtCit7CisJ Y2hhcgkgICAqbmFtZTsKKwlPYmpUeXBlCQlvYmp0eXBlOworCisJdW5pb24KKwl7CisJCWJvb2wJ CWJvb2xlYW47CisJCWNoYXIJICAgKnN0cmluZzsKKwkJaW50NjQJCWludGVnZXI7CisJCWZsb2F0 OAkJZmx0OworCQlPYmpUcmVlCSAgICpvYmplY3Q7CisJCUxpc3QJICAgKmFycmF5OworCX0gdmFs dWU7CisJc2xpc3Rfbm9kZQlub2RlOworfSBPYmpFbGVtOworCitzdGF0aWMgT2JqRWxlbSAqbmV3 X251bGxfb2JqZWN0KHZvaWQpOworc3RhdGljIE9iakVsZW0gKm5ld19ib29sX29iamVjdChib29s IHZhbHVlKTsKK3N0YXRpYyBPYmpFbGVtICpuZXdfc3RyaW5nX29iamVjdChjaGFyICp2YWx1ZSk7 CitzdGF0aWMgT2JqRWxlbSAqbmV3X29iamVjdF9vYmplY3QoT2JqVHJlZSAqdmFsdWUpOworc3Rh dGljIE9iakVsZW0gKm5ld19hcnJheV9vYmplY3QoTGlzdCAqYXJyYXkpOworc3RhdGljIE9iakVs ZW0gKm5ld19pbnRlZ2VyX29iamVjdChpbnQ2NCB2YWx1ZSk7CitzdGF0aWMgT2JqRWxlbSAqbmV3 X2Zsb2F0X29iamVjdChmbG9hdDggdmFsdWUpOworc3RhdGljIHZvaWQgYXBwZW5kX251bGxfb2Jq ZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKm5hbWUpOworc3RhdGljIHZvaWQgYXBwZW5kX2Jvb2xf b2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKm5hbWUsIGJvb2wgdmFsdWUpOworc3RhdGljIHZv aWQgYXBwZW5kX3N0cmluZ19vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqbmFtZSwgY2hhciAq dmFsdWUpOworc3RhdGljIHZvaWQgYXBwZW5kX29iamVjdF9vYmplY3QoT2JqVHJlZSAqdHJlZSwg Y2hhciAqbmFtZSwgT2JqVHJlZSAqdmFsdWUpOworc3RhdGljIHZvaWQgYXBwZW5kX2FycmF5X29i amVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpuYW1lLCBMaXN0ICphcnJheSk7CitzdGF0aWMgaW5s aW5lIHZvaWQgYXBwZW5kX3ByZW1hZGVfb2JqZWN0KE9ialRyZWUgKnRyZWUsIE9iakVsZW0gKmVs ZW0pOworc3RhdGljIEpzb25iVmFsdWUgKm9ianRyZWVfdG9fanNvbmJfcmVjKE9ialRyZWUgKnRy ZWUsIEpzb25iUGFyc2VTdGF0ZSAqc3RhdGUpOworc3RhdGljIHZvaWQgZm9ybWF0X3R5cGVfZGV0 YWlsZWQoT2lkIHR5cGVfb2lkLCBpbnQzMiB0eXBlbW9kLAorCQkJCQkgT2lkICpuc3BpZCwgY2hh ciAqKnR5cG5hbWUsIGNoYXIgKip0eXBlbW9kc3RyLAorCQkJCQkgYm9vbCAqdHlwYXJyYXkpOwor c3RhdGljIGNvbnN0IGNoYXIgKnN0cmluZ2lmeV9vYmp0eXBlKE9iamVjdFR5cGUgb2JqdHlwZSk7 CitzdGF0aWMgY2hhciAqcHJpbnRUeXBtb2QoY29uc3QgY2hhciAqdHlwbmFtZSwgaW50MzIgdHlw bW9kLCBPaWQgdHlwbW9kb3V0KTsKKworc3RhdGljIGNoYXIgKlJlbGF0aW9uR2V0Q29sdW1uRGVm YXVsdChSZWxhdGlvbiByZWwsIEF0dHJOdW1iZXIgYXR0bm8sCisJCQkJCQkJCQkgIExpc3QgKmRw Y29udGV4dCwgTGlzdCAqKmV4cHJzKTsKKworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNl X1NlcV9DYWNoZShPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9v bCBhbHRlcl90YWJsZSk7CitzdGF0aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX0N5Y2xl KE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3Rh YmxlKTsKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfSW5jcmVtZW50QnkoT2Jq VHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUp Oworc3RhdGljIGlubGluZSBPYmpFbGVtICpkZXBhcnNlX1NlcV9NaW52YWx1ZShPYmpUcmVlICpw YXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJsZSk7CitzdGF0 aWMgaW5saW5lIE9iakVsZW0gKmRlcGFyc2VfU2VxX01heHZhbHVlKE9ialRyZWUgKnBhcmVudCwg Rm9ybV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxp bmUgT2JqRWxlbSAqZGVwYXJzZV9TZXFfU3RhcnR3aXRoKE9ialRyZWUgKnBhcmVudCwgRm9ybV9w Z19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKTsKK3N0YXRpYyBpbmxpbmUgT2Jq RWxlbSAqZGVwYXJzZV9TZXFfUmVzdGFydChPYmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVu Y2VfZGF0YSBzZXFkYXRhKTsKKworLyoKKyAqIFNpbWlsYXIgdG8gZm9ybWF0X3R5cGVfaW50ZXJu YWwsIGV4Y2VwdCB3ZSByZXR1cm4gZWFjaCBiaXQgb2YgaW5mb3JtYXRpb24KKyAqIHNlcGFyYXRl bHk6CisgKgorICogLSBuc3BpZCBpcyB0aGUgc2NoZW1hIE9JRC4gIEZvciBjZXJ0YWluIFNRTC1z dGFuZGFyZCB0eXBlcyB3aGljaCBoYXZlIHdlaXJkCisgKiAgIHR5cG1vZCBydWxlcywgd2UgcmV0 dXJuIEludmFsaWRPaWQ7IGNhbGxlciBpcyBleHBlY3RlZCB0byBub3Qgc2NoZW1hLQorICogICBx dWFsaWZ5IHRoZSBuYW1lIG5vciBhZGQgcXVvdGVzIHRvIHRoZSB0eXBlIG5hbWUgaW4gdGhpcyBj YXNlLgorICoKKyAqIC0gdHlwZW5hbWUgaXMgc2V0IHRvIHRoZSB0eXBlIG5hbWUsIHdpdGhvdXQg cXVvdGVzCisgKgorICogLSB0eXBtb2QgaXMgc2V0IHRvIHRoZSB0eXBlbW9kLCBpZiBhbnksIGFz IGEgc3RyaW5nIHdpdGggcGFyZW5zCisgKgorICogLSB0eXBhcnJheSBpbmRpY2F0ZXMgd2hldGhl ciBbXXMgbXVzdCBiZSBhZGRlZAorICoKKyAqIFdlIGRvbid0IHRyeSB0byBkZWNvZGUgdHlwZSBu YW1lcyB0byB0aGVpciBzdGFuZGFyZC1tYW5kYXRlZCBuYW1lcywgZXhjZXB0CisgKiBpbiB0aGUg Y2FzZXMgb2YgdHlwZXMgd2l0aCB1bnVzdWFsIHR5cG1vZCBydWxlcy4KKyAqLworc3RhdGljIHZv aWQKK2Zvcm1hdF90eXBlX2RldGFpbGVkKE9pZCB0eXBlX29pZCwgaW50MzIgdHlwZW1vZCwKKwkJ CQkJIE9pZCAqbnNwaWQsIGNoYXIgKip0eXBuYW1lLCBjaGFyICoqdHlwZW1vZHN0ciwKKwkJCQkJ IGJvb2wgKnR5cGFycmF5KQoreworCUhlYXBUdXBsZQl0dXBsZTsKKwlGb3JtX3BnX3R5cGUgdHlw ZWZvcm07CisJT2lkCQkJYXJyYXlfYmFzZV90eXBlOworCisJdHVwbGUgPSBTZWFyY2hTeXNDYWNo ZTEoVFlQRU9JRCwgT2JqZWN0SWRHZXREYXR1bSh0eXBlX29pZCkpOworCWlmICghSGVhcFR1cGxl SXNWYWxpZCh0dXBsZSkpCisJCWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciB0 eXBlICV1IiwgdHlwZV9vaWQpOworCisJdHlwZWZvcm0gPSAoRm9ybV9wZ190eXBlKSBHRVRTVFJV Q1QodHVwbGUpOworCisJLyoKKwkgKiBTcGVjaWFsLWNhc2UgY3JvY2sgZm9yIHR5cGVzIHdpdGgg c3RyYW5nZSB0eXBtb2QgcnVsZXMuCisJICovCisJaWYgKHR5cGVfb2lkID09IElOVEVSVkFMT0lE IHx8CisJCXR5cGVfb2lkID09IFRJTUVTVEFNUE9JRCB8fAorCQl0eXBlX29pZCA9PSBUSU1FU1RB TVBUWk9JRCB8fAorCQl0eXBlX29pZCA9PSBUSU1FT0lEIHx8CisJCXR5cGVfb2lkID09IFRJTUVU Wk9JRCkKKwl7CisJCSp0eXBhcnJheSA9IGZhbHNlOworCitwZWN1bGlhcl90eXBtb2Q6CisJCXN3 aXRjaCAodHlwZV9vaWQpCisJCXsKKwkJCWNhc2UgSU5URVJWQUxPSUQ6CisJCQkJKnR5cG5hbWUg PSBwc3RyZHVwKCJJTlRFUlZBTCIpOworCQkJCWJyZWFrOworCQkJY2FzZSBUSU1FU1RBTVBUWk9J RDoKKwkJCQlpZiAodHlwZW1vZCA8IDApCisJCQkJCSp0eXBuYW1lID0gcHN0cmR1cCgiVElNRVNU QU1QIFdJVEggVElNRSBaT05FIik7CisJCQkJZWxzZQorCQkJCQkqdHlwbmFtZSA9IHBzdHJkdXAo IlRJTUVTVEFNUCIpOworCQkJCWJyZWFrOworCQkJCS8qIG90aGVyd2lzZSwgV0lUSCBUWiBpcyBh ZGRlZCBieSB0eXBtb2QsIHNvIGZhbGwgdGhyb3VnaCAqLworCQkJY2FzZSBUSU1FU1RBTVBPSUQ6 CisJCQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJUSU1FU1RBTVAiKTsKKwkJCQlicmVhazsKKwkJCWNh c2UgVElNRVRaT0lEOgorCQkJCWlmICh0eXBlbW9kIDwgMCkKKwkJCQkJKnR5cG5hbWUgPSBwc3Ry ZHVwKCJUSU1FIFdJVEggVElNRSBaT05FIik7CisJCQkJZWxzZQorCQkJCQkqdHlwbmFtZSA9IHBz dHJkdXAoIlRJTUUiKTsKKwkJCQlicmVhazsKKwkJCQkvKiBvdGhlcndpc2UsIFdJVEggVFogaXMg YWRkZWQgYnkgdHlwbW9kZSwgc28gZmFsbCB0aHJvdWdoICovCisJCQljYXNlIFRJTUVPSUQ6CisJ CQkJKnR5cG5hbWUgPSBwc3RyZHVwKCJUSU1FIik7CisJCQkJYnJlYWs7CisJCX0KKwkJKm5zcGlk ID0gSW52YWxpZE9pZDsKKworCQlpZiAodHlwZW1vZCA+PSAwKQorCQkJKnR5cGVtb2RzdHIgPSBw cmludFR5cG1vZCgiIiwgdHlwZW1vZCwgdHlwZWZvcm0tPnR5cG1vZG91dCk7CisJCWVsc2UKKwkJ CSp0eXBlbW9kc3RyID0gcHN0cmR1cCgiIik7CisKKwkJUmVsZWFzZVN5c0NhY2hlKHR1cGxlKTsK KwkJcmV0dXJuOworCX0KKworCS8qCisJICogQ2hlY2sgaWYgaXQncyBhIHJlZ3VsYXIgKHZhcmlh YmxlIGxlbmd0aCkgYXJyYXkgdHlwZS4gIEFzIGFib3ZlLAorCSAqIGZpeGVkLWxlbmd0aCBhcnJh eSB0eXBlcyBzdWNoIGFzICJuYW1lIiBzaG91bGRuJ3QgZ2V0IGRlY29uc3RydWN0ZWQuCisJICov CisJYXJyYXlfYmFzZV90eXBlID0gdHlwZWZvcm0tPnR5cGVsZW07CisKKwlpZiAoYXJyYXlfYmFz ZV90eXBlICE9IEludmFsaWRPaWQgJiYKKwkJdHlwZWZvcm0tPnR5cHN0b3JhZ2UgIT0gJ3AnKQor CXsKKwkJLyogU3dpdGNoIG91ciBhdHRlbnRpb24gdG8gdGhlIGFycmF5IGVsZW1lbnQgdHlwZSAq LworCQlSZWxlYXNlU3lzQ2FjaGUodHVwbGUpOworCQl0dXBsZSA9IFNlYXJjaFN5c0NhY2hlMShU WVBFT0lELCBPYmplY3RJZEdldERhdHVtKGFycmF5X2Jhc2VfdHlwZSkpOworCQlpZiAoIUhlYXBU dXBsZUlzVmFsaWQodHVwbGUpKQorCQkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQg Zm9yIHR5cGUgJXUiLCB0eXBlX29pZCk7CisKKwkJdHlwZWZvcm0gPSAoRm9ybV9wZ190eXBlKSBH RVRTVFJVQ1QodHVwbGUpOworCQl0eXBlX29pZCA9IGFycmF5X2Jhc2VfdHlwZTsKKwkJKnR5cGFy cmF5ID0gdHJ1ZTsKKworCQkvKgorCQkgKiBJZiBpdCdzIGFuIGFycmF5IG9mIG9uZSBvZiB0aGUg dHlwZXMgd2l0aCBzcGVjaWFsIHR5cG1vZCBydWxlcywKKwkJICogaGF2ZSB0aGUgZWxlbWVudCB0 eXBlIGJlIHByb2Nlc3NlZCBhcyBhYm92ZSwgYnV0IG5vdyB3aXRoIHR5cGFycmF5CisJCSAqIHNl dCB0byB0cnVlLgorCQkgKi8KKwkJaWYgKHR5cGVfb2lkID09IElOVEVSVkFMT0lEIHx8CisJCQl0 eXBlX29pZCA9PSBUSU1FU1RBTVBUWk9JRCB8fAorCQkJdHlwZV9vaWQgPT0gVElNRVNUQU1QT0lE IHx8CisJCQl0eXBlX29pZCA9PSBUSU1FVFpPSUQgfHwKKwkJCXR5cGVfb2lkID09IFRJTUVPSUQp CisJCQlnb3RvIHBlY3VsaWFyX3R5cG1vZDsKKwl9CisJZWxzZQorCQkqdHlwYXJyYXkgPSBmYWxz ZTsKKworCSpuc3BpZCA9IHR5cGVmb3JtLT50eXBuYW1lc3BhY2U7CisJKnR5cG5hbWUgPSBwc3Ry ZHVwKE5hbWVTdHIodHlwZWZvcm0tPnR5cG5hbWUpKTsKKworCWlmICh0eXBlbW9kID49IDApCisJ CSp0eXBlbW9kc3RyID0gcHJpbnRUeXBtb2QoIiIsIHR5cGVtb2QsIHR5cGVmb3JtLT50eXBtb2Rv dXQpOworCWVsc2UKKwkJKnR5cGVtb2RzdHIgPSBwc3RyZHVwKCIiKTsKKworCVJlbGVhc2VTeXND YWNoZSh0dXBsZSk7Cit9CisKKy8qCisgKiBBZGQgdHlwbW9kIGRlY29yYXRpb24gdG8gdGhlIGJh c2ljIHR5cGUgbmFtZQorICovCitzdGF0aWMgY2hhciAqCitwcmludFR5cG1vZChjb25zdCBjaGFy ICp0eXBuYW1lLCBpbnQzMiB0eXBtb2QsIE9pZCB0eXBtb2RvdXQpCit7CisJY2hhcgkgICAqcmVz OworCisJLyogU2hvdWxkbid0IGJlIGNhbGxlZCBpZiB0eXBtb2QgaXMgLTEgKi8KKwlBc3NlcnQo dHlwbW9kID49IDApOworCisJaWYgKHR5cG1vZG91dCA9PSBJbnZhbGlkT2lkKQorCXsKKwkJLyog RGVmYXVsdCBiZWhhdmlvcjoganVzdCBwcmludCB0aGUgaW50ZWdlciB0eXBtb2Qgd2l0aCBwYXJl bnMgKi8KKwkJcmVzID0gcHNwcmludGYoIiVzKCVkKSIsIHR5cG5hbWUsIChpbnQpIHR5cG1vZCk7 CisJfQorCWVsc2UKKwl7CisJCS8qIFVzZSB0aGUgdHlwZS1zcGVjaWZpYyB0eXBtb2RvdXQgcHJv Y2VkdXJlICovCisJCWNoYXIJICAgKnRtc3RyOworCisJCXRtc3RyID0gRGF0dW1HZXRDU3RyaW5n KE9pZEZ1bmN0aW9uQ2FsbDEodHlwbW9kb3V0LAorCQkJCQkJCQkJCQkJIEludDMyR2V0RGF0dW0o dHlwbW9kKSkpOworCQlyZXMgPSBwc3ByaW50ZigiJXMlcyIsIHR5cG5hbWUsIHRtc3RyKTsKKwl9 CisKKwlyZXR1cm4gcmVzOworfQorCisvKgorICogT2J0YWluIHRoZSBkZXBhcnNlZCBkZWZhdWx0 IHZhbHVlIGZvciB0aGUgZ2l2ZW4gY29sdW1uIG9mIHRoZSBnaXZlbiB0YWJsZS4KKyAqCisgKiBD YWxsZXIgbXVzdCBoYXZlIHNldCBhIGNvcnJlY3QgZGVwYXJzZSBjb250ZXh0LgorICovCitzdGF0 aWMgY2hhciAqCitSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQoUmVsYXRpb24gcmVsLCBBdHRyTnVt YmVyIGF0dG5vLCBMaXN0ICpkcGNvbnRleHQsCisJCQkJCQkgTGlzdCAqKmV4cHJzKQoreworCU5v ZGUgKmRlZnZhbDsKKwljaGFyICpkZWZzdHI7CisKKwlkZWZ2YWwgPSBidWlsZF9jb2x1bW5fZGVm YXVsdChyZWwsIGF0dG5vKTsKKwlkZWZzdHIgPSBkZXBhcnNlX2V4cHJlc3Npb24oZGVmdmFsLCBk cGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisKKwkvKiBDb2xsZWN0IHRoZSBleHByZXNzaW9uIGZv ciBsYXRlciByZXBsaWNhdGlvbiBzYWZldHkgY2hlY2tzICovCisJaWYgKGV4cHJzKQorCQkqZXhw cnMgPSBsYXBwZW5kKCpleHBycywgZGVmdmFsKTsKKworCXJldHVybiBkZWZzdHI7Cit9CisKKy8q CisgKiBBbGxvY2F0ZSBhIG5ldyBvYmplY3QgdHJlZSB0byBzdG9yZSBwYXJhbWV0ZXIgdmFsdWVz LgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZSh2b2lkKQoreworCU9ialRyZWUJ KnBhcmFtczsKKworCXBhcmFtcyA9IHBhbGxvYyhzaXplb2YoT2JqVHJlZSkpOworCXBhcmFtcy0+ bnVtUGFyYW1zID0gMDsKKwlzbGlzdF9pbml0KCZwYXJhbXMtPnBhcmFtcyk7CisKKwlyZXR1cm4g cGFyYW1zOworfQorCisvKgorICogQWxsb2NhdGUgYSBuZXcgb2JqZWN0IHRyZWUgdG8gc3RvcmUg cGFyYW1ldGVyIHZhbHVlcyAtLSB2YXJhcmdzIHZlcnNpb24uCisgKgorICogVGhlICJmbXQiIGFy Z3VtZW50IGlzIHVzZWQgdG8gYXBwZW5kIGFzIGEgImZtdCIgZWxlbWVudCBpbiB0aGUgb3V0cHV0 IGJsb2IuCisgKiBudW1vYmpzIGluZGljYXRlcyB0aGUgbnVtYmVyIG9mIGV4dHJhIGVsZW1lbnRz IHRvIGFwcGVuZDsgZm9yIGVhY2ggb25lLCBhCisgKiBuYW1lIChzdHJpbmcpLCB0eXBlIChmcm9t IHRoZSBPYmpUeXBlIGVudW0pIGFuZCB2YWx1ZSBtdXN0IGJlIHN1cHBsaWVkLiAgVGhlCisgKiB2 YWx1ZSBtdXN0IG1hdGNoIHRoZSB0eXBlIGdpdmVuOyBmb3IgaW5zdGFuY2UsIE9ialR5cGVJbnRl Z2VyIHJlcXVpcmVzIGFuCisgKiBpbnQ2NCwgT2JqVHlwZVN0cmluZyByZXF1aXJlcyBhIGNoYXIg KiwgT2JqVHlwZUFycmF5IHJlcXVpcmVzIGEgbGlzdCAob2YKKyAqIE9iakVsZW0pLCBPYmpUeXBl T2JqZWN0IHJlcXVpcmVzIGFuIE9ialRyZWUsIGFuZCBzbyBvbi4gIEVhY2ggZWxlbWVudCB0eXBl ICoKKyAqIG11c3QgbWF0Y2ggdGhlIGNvbnZlcnNpb24gc3BlY2lmaWVyIGdpdmVuIGluIHRoZSBm b3JtYXQgc3RyaW5nLCBhcyBkZXNjcmliZWQKKyAqIGluIGRkbF9kZXBhcnNlX2V4cGFuZF9jb21t YW5kLCBxLnYuCisgKgorICogTm90ZSB3ZSBkb24ndCBoYXZlIHRoZSBsdXh1cnkgb2Ygc3ByaW50 Zi1saWtlIGNvbXBpbGVyIHdhcm5pbmdzIGZvcgorICogbWFsZm9ybWVkIGFyZ3VtZW50IGxpc3Rz LgorICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9WQShjaGFyICpmbXQsIGludCBu dW1vYmpzLC4uLikKK3sKKwlPYmpUcmVlCSp0cmVlOworCXZhX2xpc3QJCWFyZ3M7CisJaW50CQkJ aTsKKworCS8qIFNldCB1cCB0aGUgdG9wbGV2ZWwgb2JqZWN0IGFuZCBpdHMgImZtdCIgKi8KKwl0 cmVlID0gbmV3X29ianRyZWUoKTsKKwlhcHBlbmRfc3RyaW5nX29iamVjdCh0cmVlLCAiZm10Iiwg Zm10KTsKKworCS8qIEFuZCBwcm9jZXNzIHRoZSBnaXZlbiB2YXJhcmdzICovCisJdmFfc3RhcnQo YXJncywgbnVtb2Jqcyk7CisJZm9yIChpID0gMDsgaSA8IG51bW9ianM7IGkrKykKKwl7CisJCWNo YXIJICAgKm5hbWU7CisJCU9ialR5cGUJCXR5cGU7CisJCU9iakVsZW0JICAgKmVsZW07CisKKwkJ bmFtZSA9IHZhX2FyZyhhcmdzLCBjaGFyICopOworCQl0eXBlID0gdmFfYXJnKGFyZ3MsIE9ialR5 cGUpOworCisJCS8qCisJCSAqIEZvciBhbGwgb3RoZXIgcGFyYW0gdHlwZXMgdGhlcmUgbXVzdCBi ZSBhIHZhbHVlIGluIHRoZSB2YXJhcmdzLgorCQkgKiBGZXRjaCBpdCBhbmQgYWRkIHRoZSBmdWxs eSBmb3JtZWQgc3Vib2JqZWN0IGludG8gdGhlIG1haW4gb2JqZWN0LgorCQkgKi8KKwkJc3dpdGNo ICh0eXBlKQorCQl7CisJCQljYXNlIE9ialR5cGVCb29sOgorCQkJCWVsZW0gPSBuZXdfYm9vbF9v YmplY3QodmFfYXJnKGFyZ3MsIGludCkpOworCQkJCWJyZWFrOworCQkJY2FzZSBPYmpUeXBlU3Ry aW5nOgorCQkJCWVsZW0gPSBuZXdfc3RyaW5nX29iamVjdCh2YV9hcmcoYXJncywgY2hhciAqKSk7 CisJCQkJYnJlYWs7CisJCQljYXNlIE9ialR5cGVPYmplY3Q6CisJCQkJZWxlbSA9IG5ld19vYmpl Y3Rfb2JqZWN0KHZhX2FyZyhhcmdzLCBPYmpUcmVlICopKTsKKwkJCQlicmVhazsKKwkJCWNhc2Ug T2JqVHlwZUFycmF5OgorCQkJCWVsZW0gPSBuZXdfYXJyYXlfb2JqZWN0KHZhX2FyZyhhcmdzLCBM aXN0ICopKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZUludGVnZXI6CisJCQkJZWxlbSA9 IG5ld19pbnRlZ2VyX29iamVjdCh2YV9hcmcoYXJncywgaW50NjQpKTsKKwkJCQlicmVhazsKKwkJ CWNhc2UgT2JqVHlwZUZsb2F0OgorCQkJCWVsZW0gPSBuZXdfZmxvYXRfb2JqZWN0KHZhX2FyZyhh cmdzLCBkb3VibGUpKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgT2JqVHlwZU51bGw6CisJCQkJLyog TnVsbCBwYXJhbXMgZG9uJ3QgaGF2ZSBhIHZhbHVlIChvYnZpb3VzbHkpICovCisJCQkJZWxlbSA9 IG5ld19udWxsX29iamVjdCgpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQllbG9nKEVS Uk9SLCAiaW52YWxpZCBPYmpUcmVlIGVsZW1lbnQgdHlwZSAlZCIsIHR5cGUpOworCQl9CisKKwkJ ZWxlbS0+bmFtZSA9IG5hbWU7CisJCWFwcGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBlbGVtKTsK Kwl9CisKKwl2YV9lbmQoYXJncyk7CisJcmV0dXJuIHRyZWU7Cit9CisKKy8qIEFsbG9jYXRlIGEg bmV3IHBhcmFtZXRlciB3aXRoIGEgTlVMTCB2YWx1ZSAqLworc3RhdGljIE9iakVsZW0gKgorbmV3 X251bGxfb2JqZWN0KHZvaWQpCit7CisJT2JqRWxlbQkqcGFyYW07CisKKwlwYXJhbSA9IHBhbGxv YzAoc2l6ZW9mKE9iakVsZW0pKTsKKworCXBhcmFtLT5uYW1lID0gTlVMTDsKKwlwYXJhbS0+b2Jq dHlwZSA9IE9ialR5cGVOdWxsOworCisJcmV0dXJuIHBhcmFtOworfQorCisvKiBBcHBlbmQgYSBO VUxMIG9iamVjdCB0byBhIHRyZWUgKi8KK3N0YXRpYyB2b2lkCithcHBlbmRfbnVsbF9vYmplY3Qo T2JqVHJlZSAqdHJlZSwgY2hhciAqbmFtZSkKK3sKKwlPYmpFbGVtCSpwYXJhbTsKKworCXBhcmFt ID0gbmV3X251bGxfb2JqZWN0KCk7CisJcGFyYW0tPm5hbWUgPSBuYW1lOworCWFwcGVuZF9wcmVt YWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisKKy8qIEFsbG9jYXRlIGEgbmV3IGJvb2xlYW4g cGFyYW1ldGVyICovCitzdGF0aWMgT2JqRWxlbSAqCituZXdfYm9vbF9vYmplY3QoYm9vbCB2YWx1 ZSkKK3sKKwlPYmpFbGVtCSpwYXJhbTsKKworCXBhcmFtID0gcGFsbG9jMChzaXplb2YoT2JqRWxl bSkpOworCXBhcmFtLT5uYW1lID0gTlVMTDsKKwlwYXJhbS0+b2JqdHlwZSA9IE9ialR5cGVCb29s OworCXBhcmFtLT52YWx1ZS5ib29sZWFuID0gdmFsdWU7CisKKwlyZXR1cm4gcGFyYW07Cit9CisK Ky8qIEFwcGVuZCBhIGJvb2xlYW4gcGFyYW1ldGVyIHRvIGEgdHJlZSAqLworc3RhdGljIHZvaWQK K2FwcGVuZF9ib29sX29iamVjdChPYmpUcmVlICp0cmVlLCBjaGFyICpuYW1lLCBib29sIHZhbHVl KQoreworCU9iakVsZW0JKnBhcmFtOworCisJcGFyYW0gPSBuZXdfYm9vbF9vYmplY3QodmFsdWUp OworCXBhcmFtLT5uYW1lID0gbmFtZTsKKwlhcHBlbmRfcHJlbWFkZV9vYmplY3QodHJlZSwgcGFy YW0pOworfQorCisvKiBBbGxvY2F0ZSBhIG5ldyBzdHJpbmcgb2JqZWN0ICovCitzdGF0aWMgT2Jq RWxlbSAqCituZXdfc3RyaW5nX29iamVjdChjaGFyICp2YWx1ZSkKK3sKKwlPYmpFbGVtCSpwYXJh bTsKKworCUFzc2VydCh2YWx1ZSk7CisKKwlwYXJhbSA9IHBhbGxvYzAoc2l6ZW9mKE9iakVsZW0p KTsKKwlwYXJhbS0+bmFtZSA9IE5VTEw7CisJcGFyYW0tPm9ianR5cGUgPSBPYmpUeXBlU3RyaW5n OworCXBhcmFtLT52YWx1ZS5zdHJpbmcgPSB2YWx1ZTsKKworCXJldHVybiBwYXJhbTsKK30KKwor LyoKKyAqIEFwcGVuZCBhIHN0cmluZyBwYXJhbWV0ZXIgdG8gYSB0cmVlLgorICovCitzdGF0aWMg dm9pZAorYXBwZW5kX3N0cmluZ19vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqbmFtZSwgY2hh ciAqdmFsdWUpCit7CisJT2JqRWxlbQkgICAqcGFyYW07CisKKwlBc3NlcnQobmFtZSk7CisJcGFy YW0gPSBuZXdfc3RyaW5nX29iamVjdCh2YWx1ZSk7CisJcGFyYW0tPm5hbWUgPSBuYW1lOworCWFw cGVuZF9wcmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisKK3N0YXRpYyBPYmpFbGVtICoK K25ld19pbnRlZ2VyX29iamVjdChpbnQ2NCB2YWx1ZSkKK3sKKwlPYmpFbGVtCSAgICpwYXJhbTsK KworCXBhcmFtID0gcGFsbG9jMChzaXplb2YoT2JqRWxlbSkpOworCXBhcmFtLT5uYW1lID0gTlVM TDsKKwlwYXJhbS0+b2JqdHlwZSA9IE9ialR5cGVJbnRlZ2VyOworCXBhcmFtLT52YWx1ZS5pbnRl Z2VyID0gdmFsdWU7CisKKwlyZXR1cm4gcGFyYW07Cit9CisKK3N0YXRpYyBPYmpFbGVtICoKK25l d19mbG9hdF9vYmplY3QoZmxvYXQ4IHZhbHVlKQoreworCU9iakVsZW0JICAgKnBhcmFtOworCisJ cGFyYW0gPSBwYWxsb2MwKHNpemVvZihPYmpFbGVtKSk7CisJcGFyYW0tPm5hbWUgPSBOVUxMOwor CXBhcmFtLT5vYmp0eXBlID0gT2JqVHlwZUZsb2F0OworCXBhcmFtLT52YWx1ZS5mbHQgPSB2YWx1 ZTsKKworCXJldHVybiBwYXJhbTsKK30KKworLyogQWxsb2NhdGUgYSBuZXcgb2JqZWN0IHBhcmFt ZXRlciAqLworc3RhdGljIE9iakVsZW0gKgorbmV3X29iamVjdF9vYmplY3QoT2JqVHJlZSAqdmFs dWUpCit7CisJT2JqRWxlbQkqcGFyYW07CisKKwlwYXJhbSA9IHBhbGxvYzAoc2l6ZW9mKE9iakVs ZW0pKTsKKwlwYXJhbS0+bmFtZSA9IE5VTEw7CisJcGFyYW0tPm9ianR5cGUgPSBPYmpUeXBlT2Jq ZWN0OworCXBhcmFtLT52YWx1ZS5vYmplY3QgPSB2YWx1ZTsKKworCXJldHVybiBwYXJhbTsKK30K KworLyogQXBwZW5kIGFuIG9iamVjdCBwYXJhbWV0ZXIgdG8gYSB0cmVlICovCitzdGF0aWMgdm9p ZAorYXBwZW5kX29iamVjdF9vYmplY3QoT2JqVHJlZSAqdHJlZSwgY2hhciAqbmFtZSwgT2JqVHJl ZSAqdmFsdWUpCit7CisJT2JqRWxlbQkqcGFyYW07CisKKwlBc3NlcnQobmFtZSk7CisJcGFyYW0g PSBuZXdfb2JqZWN0X29iamVjdCh2YWx1ZSk7CisJcGFyYW0tPm5hbWUgPSBuYW1lOworCWFwcGVu ZF9wcmVtYWRlX29iamVjdCh0cmVlLCBwYXJhbSk7Cit9CisKKy8qIEFsbG9jYXRlIGEgbmV3IGFy cmF5IHBhcmFtZXRlciAqLworc3RhdGljIE9iakVsZW0gKgorbmV3X2FycmF5X29iamVjdChMaXN0 ICphcnJheSkKK3sKKwlPYmpFbGVtCSpwYXJhbTsKKworCXBhcmFtID0gcGFsbG9jMChzaXplb2Yo T2JqRWxlbSkpOworCXBhcmFtLT5uYW1lID0gTlVMTDsKKwlwYXJhbS0+b2JqdHlwZSA9IE9ialR5 cGVBcnJheTsKKwlwYXJhbS0+dmFsdWUuYXJyYXkgPSBhcnJheTsKKworCXJldHVybiBwYXJhbTsK K30KKworLyogQXBwZW5kIGFuIGFycmF5IHBhcmFtZXRlciB0byBhIHRyZWUgKi8KK3N0YXRpYyB2 b2lkCithcHBlbmRfYXJyYXlfb2JqZWN0KE9ialRyZWUgKnRyZWUsIGNoYXIgKm5hbWUsIExpc3Qg KmFycmF5KQoreworCU9iakVsZW0JKnBhcmFtOworCisJcGFyYW0gPSBuZXdfYXJyYXlfb2JqZWN0 KGFycmF5KTsKKwlwYXJhbS0+bmFtZSA9IG5hbWU7CisJYXBwZW5kX3ByZW1hZGVfb2JqZWN0KHRy ZWUsIHBhcmFtKTsKK30KKworLyogQXBwZW5kIGEgcHJlYWxsb2NhdGVkIHBhcmFtZXRlciB0byBh IHRyZWUgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZAorYXBwZW5kX3ByZW1hZGVfb2JqZWN0KE9ialRy ZWUgKnRyZWUsIE9iakVsZW0gKmVsZW0pCit7CisJc2xpc3RfcHVzaF9oZWFkKCZ0cmVlLT5wYXJh bXMsICZlbGVtLT5ub2RlKTsKKwl0cmVlLT5udW1QYXJhbXMrKzsKK30KKworLyoKKyAqIEhlbHBl ciBmb3Igb2JqdHJlZV90b19qc29uYjogcHJvY2VzcyBhbiBpbmRpdmlkdWFsIGVsZW1lbnQgZnJv bSBhbiBvYmplY3Qgb3IKKyAqIGFuIGFycmF5IGludG8gdGhlIG91dHB1dCBwYXJzZSBzdGF0ZS4K KyAqLworc3RhdGljIHZvaWQKK29ianRyZWVfdG9fanNvbmJfZWxlbWVudChKc29uYlBhcnNlU3Rh dGUgKnN0YXRlLCBPYmpFbGVtICpvYmplY3QsCisJCQkJCQkgSnNvbmJJdGVyYXRvclRva2VuIGVs ZW1fdG9rZW4pCit7CisJTGlzdENlbGwgICAqY2VsbDsKKwlKc29uYlZhbHVlCXZhbDsKKworCXN3 aXRjaCAob2JqZWN0LT5vYmp0eXBlKQorCXsKKwkJY2FzZSBPYmpUeXBlTnVsbDoKKwkJCXZhbC50 eXBlID0gamJ2TnVsbDsKKwkJCXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZh bCk7CisJCQlicmVhazsKKworCQljYXNlIE9ialR5cGVTdHJpbmc6CisJCQl2YWwudHlwZSA9IGpi dlN0cmluZzsKKwkJCXZhbC52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihvYmplY3QtPnZhbHVlLnN0 cmluZyk7CisJCQl2YWwudmFsLnN0cmluZy52YWwgPSBvYmplY3QtPnZhbHVlLnN0cmluZzsKKwkJ CXB1c2hKc29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKwor CQljYXNlIE9ialR5cGVJbnRlZ2VyOgorCQkJdmFsLnR5cGUgPSBqYnZOdW1lcmljOworCQkJdmFs LnZhbC5udW1lcmljID0gKE51bWVyaWMpCisJCQkJRGF0dW1HZXROdW1lcmljKERpcmVjdEZ1bmN0 aW9uQ2FsbDEoaW50OF9udW1lcmljLAorCQkJCQkJCQkJCQkJCW9iamVjdC0+dmFsdWUuaW50ZWdl cikpOworCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBlbGVtX3Rva2VuLCAmdmFsKTsKKwkJCWJy ZWFrOworCisJCWNhc2UgT2JqVHlwZUZsb2F0OgorCQkJdmFsLnR5cGUgPSBqYnZOdW1lcmljOwor CQkJdmFsLnZhbC5udW1lcmljID0gKE51bWVyaWMpCisJCQkJRGF0dW1HZXROdW1lcmljKERpcmVj dEZ1bmN0aW9uQ2FsbDEoZmxvYXQ4X251bWVyaWMsCisJCQkJCQkJCQkJCQkJb2JqZWN0LT52YWx1 ZS5pbnRlZ2VyKSk7CisJCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIGVsZW1fdG9rZW4sICZ2YWwp OworCQkJYnJlYWs7CisKKwkJY2FzZSBPYmpUeXBlQm9vbDoKKwkJCXZhbC50eXBlID0gamJ2Qm9v bDsKKwkJCXZhbC52YWwuYm9vbGVhbiA9IG9iamVjdC0+dmFsdWUuYm9vbGVhbjsKKwkJCXB1c2hK c29uYlZhbHVlKCZzdGF0ZSwgZWxlbV90b2tlbiwgJnZhbCk7CisJCQlicmVhazsKKworCQljYXNl IE9ialR5cGVPYmplY3Q6CisJCQkvKiByZWN1cnNpdmVseSBhZGQgdGhlIG9iamVjdCBpbnRvIHRo ZSBleGlzdGluZyBwYXJzZSBzdGF0ZSAqLworCQkJb2JqdHJlZV90b19qc29uYl9yZWMob2JqZWN0 LT52YWx1ZS5vYmplY3QsIHN0YXRlKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT2JqVHlwZUFycmF5 OgorCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJfQkVHSU5fQVJSQVksIE5VTEwpOworCQkJ Zm9yZWFjaChjZWxsLCBvYmplY3QtPnZhbHVlLmFycmF5KQorCQkJeworCQkJCU9iakVsZW0gICAq ZWxlbSA9IGxmaXJzdChjZWxsKTsKKworCQkJCW9ianRyZWVfdG9fanNvbmJfZWxlbWVudChzdGF0 ZSwgZWxlbSwgV0pCX0VMRU0pOworCQkJfQorCQkJcHVzaEpzb25iVmFsdWUoJnN0YXRlLCBXSkJf RU5EX0FSUkFZLCBOVUxMKTsKKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9S LCAidW5yZWNvZ25pemVkIG9iamVjdCB0eXBlICVkIiwgb2JqZWN0LT5vYmp0eXBlKTsKKwkJCWJy ZWFrOworCX0KK30KKworLyoKKyAqIFJlY3Vyc2l2ZSBoZWxwZXIgZm9yIG9ianRyZWVfdG9fanNv bmIKKyAqLworc3RhdGljIEpzb25iVmFsdWUgKgorb2JqdHJlZV90b19qc29uYl9yZWMoT2JqVHJl ZSAqdHJlZSwgSnNvbmJQYXJzZVN0YXRlICpzdGF0ZSkKK3sKKwlzbGlzdF9pdGVyCWl0ZXI7CisK KwlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9CRUdJTl9PQkpFQ1QsIE5VTEwpOworCisJc2xp c3RfZm9yZWFjaChpdGVyLCAmdHJlZS0+cGFyYW1zKQorCXsKKwkJT2JqRWxlbQkqb2JqZWN0ID0g c2xpc3RfY29udGFpbmVyKE9iakVsZW0sIG5vZGUsIGl0ZXIuY3VyKTsKKwkJSnNvbmJWYWx1ZQlr ZXk7CisKKwkJLyogUHVzaCB0aGUga2V5IGZpcnN0ICovCisJCWtleS50eXBlID0gamJ2U3RyaW5n OworCQlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4ob2JqZWN0LT5uYW1lKTsKKwkJa2V5LnZh bC5zdHJpbmcudmFsID0gb2JqZWN0LT5uYW1lOworCQlwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdK Ql9LRVksICZrZXkpOworCisJCS8qIFRoZW4gcHJvY2VzcyB0aGUgdmFsdWUgYWNjb3JkaW5nIHRv IGl0cyB0eXBlICovCisJCW9ianRyZWVfdG9fanNvbmJfZWxlbWVudChzdGF0ZSwgb2JqZWN0LCBX SkJfVkFMVUUpOworCX0KKworCXJldHVybiBwdXNoSnNvbmJWYWx1ZSgmc3RhdGUsIFdKQl9FTkRf T0JKRUNULCBOVUxMKTsKK30KKworLyoKKyAqIENyZWF0ZSBhIEpTT05CIHJlcHJlc2VudGF0aW9u IGZyb20gYW4gT2JqVHJlZS4KKyAqLworc3RhdGljIEpzb25iICoKK29ianRyZWVfdG9fanNvbmIo T2JqVHJlZSAqdHJlZSkKK3sKKwlKc29uYlZhbHVlICp2YWx1ZTsKKworCXZhbHVlID0gb2JqdHJl ZV90b19qc29uYl9yZWModHJlZSwgTlVMTCk7CisJcmV0dXJuIEpzb25iVmFsdWVUb0pzb25iKHZh bHVlKTsKK30KKworLyoKKyAqIEEgaGVscGVyIHJvdXRpbmUgdG8gc2V0dXAgJXt9VCBlbGVtZW50 cy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3R5cGUoT2lkIHR5cGVJ ZCwgaW50MzIgdHlwbW9kKQoreworCU9ialRyZWUJKnR5cGVQYXJhbTsKKwlPaWQJCQl0eXBuc3Bp ZDsKKwljaGFyCSAgICp0eXBuc3A7CisJY2hhcgkgICAqdHlwZW5hbWUgPSBOVUxMOworCWNoYXIJ ICAgKnR5cG1vZHN0cjsKKwlib29sCQl0eXBhcnJheTsKKworCWZvcm1hdF90eXBlX2RldGFpbGVk KHR5cGVJZCwgdHlwbW9kLAorCQkJCQkJICZ0eXBuc3BpZCwgJnR5cGVuYW1lLCAmdHlwbW9kc3Ry LCAmdHlwYXJyYXkpOworCisJaWYgKCFPaWRJc1ZhbGlkKHR5cG5zcGlkKSkKKwkJdHlwbnNwID0g cHN0cmR1cCgiIik7CisJZWxzZSBpZiAoaXNBbnlUZW1wTmFtZXNwYWNlKHR5cG5zcGlkKSkKKwkJ dHlwbnNwID0gcHN0cmR1cCgicGdfdGVtcCIpOworCWVsc2UKKwkJdHlwbnNwID0gZ2V0X25hbWVz cGFjZV9uYW1lKHR5cG5zcGlkKTsKKworCS8qIFdlIGRvbid0IHVzZSBuZXdfb2JqdHJlZV9WQSBo ZXJlIGJlY2F1c2UgdHlwZXMgZG9uJ3QgaGF2ZSBhICJmbXQiICovCisJdHlwZVBhcmFtID0gbmV3 X29ianRyZWUoKTsKKwlhcHBlbmRfc3RyaW5nX29iamVjdCh0eXBlUGFyYW0sICJzY2hlbWFuYW1l IiwgdHlwbnNwKTsKKwlhcHBlbmRfc3RyaW5nX29iamVjdCh0eXBlUGFyYW0sICJ0eXBlbmFtZSIs IHR5cGVuYW1lKTsKKwlhcHBlbmRfc3RyaW5nX29iamVjdCh0eXBlUGFyYW0sICJ0eXBtb2QiLCB0 eXBtb2RzdHIpOworCWFwcGVuZF9ib29sX29iamVjdCh0eXBlUGFyYW0sICJ0eXBhcnJheSIsIHR5 cGFycmF5KTsKKworCXJldHVybiB0eXBlUGFyYW07Cit9CisKKy8qCisgKiBBIGhlbHBlciByb3V0 aW5lIHRvIHNldHVwICV7fUQgYW5kICV7fU8gZWxlbWVudHMKKyAqCisgKiBFbGVtZW50cyAic2No ZW1hbmFtZSIgYW5kICJvYmpuYW1lIiBhcmUgc2V0LiAgSWYgdGhlIG5hbWVzcGFjZSBPSUQKKyAq IGNvcnJlc3BvbmRzIHRvIGEgdGVtcCBzY2hlbWEsIHRoYXQncyBzZXQgdG8gInBnX3RlbXAiLgor ICoKKyAqIFRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhvc2UgdHdvIGVsZW1lbnQgdHlwZXMgaXMg d2hldGhlciB0aGUgb2JqbmFtZSB3aWxsCisgKiBiZSBxdW90ZWQgYXMgYW4gaWRlbnRpZmllciBv ciBub3QsIHdoaWNoIGlzIG5vdCBzb21ldGhpbmcgdGhhdCB0aGlzIHJvdXRpbmUKKyAqIGNvbmNl cm5zIGl0c2VsZiB3aXRoOyB0aGF0IHdpbGwgYmUgdXAgdG8gdGhlIGV4cGFuZCBmdW5jdGlvbi4K KyAqLworc3RhdGljIE9ialRyZWUgKgorbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKE9pZCBuc3Bp ZCwgY2hhciAqbmFtZSkKK3sKKwlPYmpUcmVlCSpxdWFsaWZpZWQ7CisJY2hhcgkgICAqbmFtZXNw YWNlOworCisJLyoKKwkgKiBXZSBkb24ndCB1c2UgbmV3X29ianRyZWVfVkEgaGVyZSBiZWNhdXNl IHRoZXNlIG5hbWVzIGRvbid0IGhhdmUgYSAiZm10IgorCSAqLworCXF1YWxpZmllZCA9IG5ld19v Ymp0cmVlKCk7CisJaWYgKGlzQW55VGVtcE5hbWVzcGFjZShuc3BpZCkpCisJCW5hbWVzcGFjZSA9 IHBzdHJkdXAoInBnX3RlbXAiKTsKKwllbHNlCisJCW5hbWVzcGFjZSA9IGdldF9uYW1lc3BhY2Vf bmFtZShuc3BpZCk7CisJYXBwZW5kX3N0cmluZ19vYmplY3QocXVhbGlmaWVkLCAic2NoZW1hbmFt ZSIsIG5hbWVzcGFjZSk7CisJYXBwZW5kX3N0cmluZ19vYmplY3QocXVhbGlmaWVkLCAib2JqbmFt ZSIsIHBzdHJkdXAobmFtZSkpOworCisJcmV0dXJuIHF1YWxpZmllZDsKK30KKworLyoKKyAqIEEg aGVscGVyIHJvdXRpbmUgdG8gc2V0dXAgJXt9RCBhbmQgJXt9TyBlbGVtZW50cywgd2l0aCB0aGUg b2JqZWN0IHNwZWNpZmllZAorICogYnkgY2xhc3NJZC9vYmpJZAorICoKKyAqIEVsZW1lbnRzICJz Y2hlbWFuYW1lIiBhbmQgIm9iam5hbWUiIGFyZSBzZXQuICBJZiB0aGUgb2JqZWN0IGlzIGEgdGVt cG9yYXJ5CisgKiBvYmplY3QsIHRoZSBzY2hlbWEgbmFtZSBpcyBzZXQgdG8gInBnX3RlbXAiLgor ICovCitzdGF0aWMgT2JqVHJlZSAqCituZXdfb2JqdHJlZV9mb3JfcXVhbG5hbWVfaWQoT2lkIGNs YXNzSWQsIE9pZCBvYmplY3RJZCkKK3sKKwlPYmpUcmVlCSpxdWFsaWZpZWQ7CisJUmVsYXRpb24J Y2F0YWxvZzsKKwlIZWFwVHVwbGUJY2F0b2JqOworCURhdHVtCQlvYmpuc3A7CisJRGF0dW0JCW9i am5hbWU7CisJQXR0ck51bWJlcglBbnVtX25hbWU7CisJQXR0ck51bWJlcglBbnVtX25hbWVzcGFj ZTsKKwlBdHRyTnVtYmVyCUFudW1fb2lkID0gZ2V0X29iamVjdF9hdHRudW1fb2lkKGNsYXNzSWQp OworCWJvb2wJCWlzbnVsbDsKKworCWNhdGFsb2cgPSB0YWJsZV9vcGVuKGNsYXNzSWQsIEFjY2Vz c1NoYXJlTG9jayk7CisKKwljYXRvYmogPSBnZXRfY2F0YWxvZ19vYmplY3RfYnlfb2lkKGNhdGFs b2csIEFudW1fb2lkLCBvYmplY3RJZCk7CisJaWYgKCFjYXRvYmopCisJCWVsb2coRVJST1IsICJj YWNoZSBsb29rdXAgZmFpbGVkIGZvciBvYmplY3QgJXUgb2YgY2F0YWxvZyBcIiVzXCIiLAorCQkJ IG9iamVjdElkLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShjYXRhbG9nKSk7CisJQW51bV9uYW1l ID0gZ2V0X29iamVjdF9hdHRudW1fbmFtZShjbGFzc0lkKTsKKwlBbnVtX25hbWVzcGFjZSA9IGdl dF9vYmplY3RfYXR0bnVtX25hbWVzcGFjZShjbGFzc0lkKTsKKworCW9iam5zcCA9IGhlYXBfZ2V0 YXR0cihjYXRvYmosIEFudW1fbmFtZXNwYWNlLCBSZWxhdGlvbkdldERlc2NyKGNhdGFsb2cpLAor CQkJCQkJICAmaXNudWxsKTsKKwlpZiAoaXNudWxsKQorCQllbG9nKEVSUk9SLCAidW5leHBlY3Rl ZCBOVUxMIG5hbWVzcGFjZSIpOworCW9iam5hbWUgPSBoZWFwX2dldGF0dHIoY2F0b2JqLCBBbnVt X25hbWUsIFJlbGF0aW9uR2V0RGVzY3IoY2F0YWxvZyksCisJCQkJCQkgICAmaXNudWxsKTsKKwlp ZiAoaXNudWxsKQorCQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCBOVUxMIG5hbWUiKTsKKworCXF1 YWxpZmllZCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShEYXR1bUdldE9iamVjdElkKG9iam5z cCksCisJCQkJCQkJCQkJIE5hbWVTdHIoKkRhdHVtR2V0TmFtZShvYmpuYW1lKSkpOworCXRhYmxl X2Nsb3NlKGNhdGFsb2csIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gcXVhbGlmaWVkOwor fQorCisvKgorICogUmV0dXJuIHRoZSBnaXZlbiBvYmplY3QgdHlwZSBhcyBhIHN0cmluZy4KKyAq Lworc3RhdGljIGNvbnN0IGNoYXIgKgorc3RyaW5naWZ5X29ianR5cGUoT2JqZWN0VHlwZSBvYmp0 eXBlKQoreworCXN3aXRjaCAob2JqdHlwZSkKKwl7CisJCWNhc2UgT0JKRUNUX0FHR1JFR0FURToK KwkJCXJldHVybiAiQUdHUkVHQVRFIjsKKwkJY2FzZSBPQkpFQ1RfQ0FTVDoKKwkJCXJldHVybiAi Q0FTVCI7CisJCWNhc2UgT0JKRUNUX0NPTFVNTjoKKwkJCXJldHVybiAiQ09MVU1OIjsKKwkJY2Fz ZSBPQkpFQ1RfQ09MTEFUSU9OOgorCQkJcmV0dXJuICJDT0xMQVRJT04iOworCQljYXNlIE9CSkVD VF9DT05WRVJTSU9OOgorCQkJcmV0dXJuICJDT05WRVJTSU9OIjsKKwkJY2FzZSBPQkpFQ1RfREFU QUJBU0U6CisJCQlyZXR1cm4gIkRBVEFCQVNFIjsKKwkJY2FzZSBPQkpFQ1RfRE9NQUlOOgorCQkJ cmV0dXJuICJET01BSU4iOworCQljYXNlIE9CSkVDVF9FVkVOVF9UUklHR0VSOgorCQkJcmV0dXJu ICJFVkVOVCBUUklHR0VSIjsKKwkJY2FzZSBPQkpFQ1RfRVhURU5TSU9OOgorCQkJcmV0dXJuICJF WFRFTlNJT04iOworCQljYXNlIE9CSkVDVF9GRFc6CisJCQlyZXR1cm4gIkZPUkVJR04gREFUQSBX UkFQUEVSIjsKKwkJY2FzZSBPQkpFQ1RfRk9SRUlHTl9TRVJWRVI6CisJCQlyZXR1cm4gIlNFUlZF UiI7CisJCWNhc2UgT0JKRUNUX0ZPUkVJR05fVEFCTEU6CisJCQlyZXR1cm4gIkZPUkVJR04gVEFC TEUiOworCQljYXNlIE9CSkVDVF9GVU5DVElPTjoKKwkJCXJldHVybiAiRlVOQ1RJT04iOworCQlj YXNlIE9CSkVDVF9JTkRFWDoKKwkJCXJldHVybiAiSU5ERVgiOworCQljYXNlIE9CSkVDVF9MQU5H VUFHRToKKwkJCXJldHVybiAiTEFOR1VBR0UiOworCQljYXNlIE9CSkVDVF9MQVJHRU9CSkVDVDoK KwkJCXJldHVybiAiTEFSR0UgT0JKRUNUIjsKKwkJY2FzZSBPQkpFQ1RfTUFUVklFVzoKKwkJCXJl dHVybiAiTUFURVJJQUxJWkVEIFZJRVciOworCQljYXNlIE9CSkVDVF9PUENMQVNTOgorCQkJcmV0 dXJuICJPUEVSQVRPUiBDTEFTUyI7CisJCWNhc2UgT0JKRUNUX09QRVJBVE9SOgorCQkJcmV0dXJu ICJPUEVSQVRPUiI7CisJCWNhc2UgT0JKRUNUX09QRkFNSUxZOgorCQkJcmV0dXJuICJPUEVSQVRP UiBGQU1JTFkiOworCQljYXNlIE9CSkVDVF9ST0xFOgorCQkJcmV0dXJuICJST0xFIjsKKwkJY2Fz ZSBPQkpFQ1RfUlVMRToKKwkJCXJldHVybiAiUlVMRSI7CisJCWNhc2UgT0JKRUNUX1NDSEVNQToK KwkJCXJldHVybiAiU0NIRU1BIjsKKwkJY2FzZSBPQkpFQ1RfU0VRVUVOQ0U6CisJCQlyZXR1cm4g IlNFUVVFTkNFIjsKKwkJY2FzZSBPQkpFQ1RfVEFCTEU6CisJCQlyZXR1cm4gIlRBQkxFIjsKKwkJ Y2FzZSBPQkpFQ1RfVEFCTEVTUEFDRToKKwkJCXJldHVybiAiVEFCTEVTUEFDRSI7CisJCWNhc2Ug T0JKRUNUX1RSSUdHRVI6CisJCQlyZXR1cm4gIlRSSUdHRVIiOworCQljYXNlIE9CSkVDVF9UU0NP TkZJR1VSQVRJT046CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNIIENPTkZJR1VSQVRJT04iOworCQkv KgorCQljYXNlIE9CSkVDVF9UU0NPTkZJR19NQVBQSU5HOgorCQkJcmV0dXJuICJURVhUIFNFQVJD SCBDT05GSUdVUkFUSU9OIE1BUFBJTkciOworCQkqLworCQljYXNlIE9CSkVDVF9UU0RJQ1RJT05B Ulk6CisJCQlyZXR1cm4gIlRFWFQgU0VBUkNIIERJQ1RJT05BUlkiOworCQljYXNlIE9CSkVDVF9U U1BBUlNFUjoKKwkJCXJldHVybiAiVEVYVCBTRUFSQ0ggUEFSU0VSIjsKKwkJY2FzZSBPQkpFQ1Rf VFNURU1QTEFURToKKwkJCXJldHVybiAiVEVYVCBTRUFSQ0ggVEVNUExBVEUiOworCQljYXNlIE9C SkVDVF9UWVBFOgorCQkJcmV0dXJuICJUWVBFIjsKKwkJY2FzZSBPQkpFQ1RfVVNFUl9NQVBQSU5H OgorCQkJcmV0dXJuICJVU0VSIE1BUFBJTkciOworCQljYXNlIE9CSkVDVF9WSUVXOgorCQkJcmV0 dXJuICJWSUVXIjsKKworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9ydGVkIG9i amVjdCB0eXBlICVkIiwgb2JqdHlwZSk7CisJfQorfQorCisvKgorICogUmV0dXJuIHRoZSBzdHJp bmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIGdpdmVuIFJFTFBFUlNJU1RFTkNFIHZhbHVlCisgKi8K K3N0YXRpYyBjaGFyICoKK2dldF9wZXJzaXN0ZW5jZV9zdHIoY2hhciBwZXJzaXN0ZW5jZSkKK3sK Kwlzd2l0Y2ggKHBlcnNpc3RlbmNlKQorCXsKKwkJY2FzZSBSRUxQRVJTSVNURU5DRV9URU1QOgor CQkJcmV0dXJuICJURU1QT1JBUlkiOworCQljYXNlIFJFTFBFUlNJU1RFTkNFX1VOTE9HR0VEOgor CQkJcmV0dXJuICJVTkxPR0dFRCI7CisJCWNhc2UgUkVMUEVSU0lTVEVOQ0VfUEVSTUFORU5UOgor CQkJcmV0dXJuICIiOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgcGVy c2lzdGVuY2UgbWFya2luZyAlYyIsIHBlcnNpc3RlbmNlKTsKKwkJCXJldHVybiAiIjsJCS8qIG1h a2UgY29tcGlsZXIgaGFwcHkgKi8KKwl9Cit9CisKK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2Vf Q29sdW1uSWRlbnRpdHkoT2lkIHNlcXJlbGlkLCBjaGFyIGlkZW50aXR5LCBib29sIGFsdGVyX3Rh YmxlKQoreworCU9ialRyZWUJICAgKnRtcDsKKwlPYmpUcmVlCSAgICppZGVudDsKKwlMaXN0CSAg ICplbGVtcyA9IE5JTDsKKwlSZWxhdGlvbglyZWw7CisJSGVhcFR1cGxlCXNlcXR1cGxlOworCUZv cm1fcGdfc2VxdWVuY2Ugc2VxZm9ybTsKKwlGb3JtX3BnX3NlcXVlbmNlX2RhdGEgc2VxZGF0YTsK KworCWlmIChhbHRlcl90YWJsZSkKKwkJdG1wID0gbmV3X29ianRyZWVfVkEoIiV7aWRlbnRpdHlf dHlwZX1zICV7c2VxX2RlZmluaXRpb246IH1zIiwgMCk7CisJZWxzZQorCQl0bXAgPSBuZXdfb2Jq dHJlZV9WQSgiJXtpZGVudGl0eV90eXBlfXMgKCAle3NlcV9kZWZpbml0aW9uOiB9cyApIiwgMCk7 CisKKwlpZiAoIU9pZElzVmFsaWQoc2VxcmVsaWQpKQorCXsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0 KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJCXJldHVybiB0bXA7CisJfQorCisJaWYgKGFsdGVy X3RhYmxlKQorCQlpZGVudCA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgR0VORVJBVEVEICV7b3B0aW9u fXMiLCAwKTsKKwllbHNlCisJCWlkZW50ID0gbmV3X29ianRyZWVfVkEoIkdFTkVSQVRFRCAle29w dGlvbn1zIEFTIElERU5USVRZIiwgMCk7CisKKwlpZiAoaWRlbnRpdHkgPT0gQVRUUklCVVRFX0lE RU5USVRZX0FMV0FZUykKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoaWRlbnQsICJvcHRpb24iLCAi QUxXQVlTIik7CisJZWxzZSBpZiAoaWRlbnRpdHkgPT0gIEFUVFJJQlVURV9JREVOVElUWV9CWV9E RUZBVUxUKQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChpZGVudCwgIm9wdGlvbiIsICJCWSBERUZB VUxUIik7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QoaWRlbnQsICJwcmVzZW50IiwgZmFs c2UpOworCisJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiaWRlbnRpdHlfdHlwZSIsIGlkZW50 KTsKKworCXJlbCA9IHRhYmxlX29wZW4oU2VxdWVuY2VSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVM b2NrKTsKKwlzZXF0dXBsZSA9IFNlYXJjaFN5c0NhY2hlQ29weTEoU0VRUkVMSUQsIHNlcXJlbGlk KTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoc2VxdHVwbGUpKQorCQllbG9nKEVSUk9SLCAiY2Fj aGUgbG9va3VwIGZhaWxlZCBmb3Igc2VxdWVuY2UgJXUiLAorCQkJIHNlcXJlbGlkKTsKKworCXNl cWZvcm0gPSAoRm9ybV9wZ19zZXF1ZW5jZSkgR0VUU1RSVUNUKHNlcXR1cGxlKTsKKwlzZXFkYXRh ID0gZ2V0X3NlcXVlbmNlX3ZhbHVlcyhzZXFyZWxpZCk7CisKKwkvKiBkZWZpbml0aW9uIGVsZW1l dHMgKi8KKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX0NhY2hlKE5VTEwsIHNl cWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1Nl cV9DeWNsZShOVUxMLCBzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVuZChl bGVtcywgZGVwYXJzZV9TZXFfSW5jcmVtZW50QnkoTlVMTCwgc2VxZm9ybSwgYWx0ZXJfdGFibGUp KTsKKwllbGVtcyA9IGxhcHBlbmQoZWxlbXMsIGRlcGFyc2VfU2VxX01pbnZhbHVlKE5VTEwsIHNl cWZvcm0sIGFsdGVyX3RhYmxlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1Nl cV9NYXh2YWx1ZShOVUxMLCBzZXFmb3JtLCBhbHRlcl90YWJsZSkpOworCWVsZW1zID0gbGFwcGVu ZChlbGVtcywgZGVwYXJzZV9TZXFfU3RhcnR3aXRoKE5VTEwsIHNlcWZvcm0sIGFsdGVyX3RhYmxl KSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9SZXN0YXJ0KE5VTEwsIHNl cWRhdGEpKTsKKwkvKiB3ZSBwdXJwb3NlZnVsbHkgZG8gbm90IGVtaXQgT1dORUQgQlkgaGVyZSAq LworCisJYXBwZW5kX2FycmF5X29iamVjdCh0bXAsICJzZXFfZGVmaW5pdGlvbiIsIGVsZW1zKTsK KworCXRhYmxlX2Nsb3NlKHJlbCwgUm93RXhjbHVzaXZlTG9jayk7CisKKwlyZXR1cm4gdG1wOwor fQorCisvKgorICogZGVwYXJzZV9Db2x1bW5EZWYKKyAqCQlTdWJyb3V0aW5lIGZvciBDUkVBVEUg VEFCTEUgZGVwYXJzaW5nCisgKgorICogRGVwYXJzZSBhIENvbHVtbkRlZiBub2RlIHdpdGhpbiBh IHJlZ3VsYXIgKG5vbiB0eXBlZCkgdGFibGUgY3JlYXRpb24uCisgKgorICogTk9UIE5VTEwgY29u c3RyYWludHMgaW4gdGhlIGNvbHVtbiBkZWZpbml0aW9uIGFyZSBlbWl0dGVkIGRpcmVjdGx5IGlu IHRoZQorICogY29sdW1uIGRlZmluaXRpb24gYnkgdGhpcyByb3V0aW5lOyBvdGhlciBjb25zdHJh aW50cyBtdXN0IGJlIGVtaXR0ZWQKKyAqIGVsc2V3aGVyZSAodGhlIGluZm8gaW4gdGhlIHBhcnNl IG5vZGUgaXMgaW5jb21wbGV0ZSBhbnl3YXkuKQorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBh cnNlX0NvbHVtbkRlZihSZWxhdGlvbiByZWxhdGlvbiwgTGlzdCAqZHBjb250ZXh0LCBib29sIGNv bXBvc2l0ZSwKKwkJCQkgIENvbHVtbkRlZiAqY29sZGVmLCBib29sIGlzX2FsdGVyLCBMaXN0ICoq ZXhwcnMpCit7CisJT2JqVHJlZQkqY29sdW1uOworCU9ialRyZWUJKnRtcDsKKwlPaWQJCQlyZWxp ZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pOworCUhlYXBUdXBsZQlhdHRyVHVwOworCUZv cm1fcGdfYXR0cmlidXRlIGF0dHJGb3JtOworCU9pZAkJCXR5cGlkOworCWludDMyCQl0eXBtb2Q7 CisJT2lkCQkJdHlwY29sbGF0aW9uOworCWJvb2wJCXNhd19ub3RudWxsOworCUxpc3RDZWxsICAg KmNlbGw7CisKKwkvKgorCSAqIEluaGVyaXRlZCBjb2x1bW5zIHdpdGhvdXQgbG9jYWwgZGVmaW5p dGlvbnMgbXVzdCBub3QgYmUgZW1pdHRlZC4gWFhYIC0tCisJICogbWF5YmUgaXQgaXMgdXNlZnVs IHRvIGhhdmUgdGhlbSB3aXRoICJwcmVzZW50ID0gZmFsc2UiIG9yIHNvbWUgc3VjaD8KKwkgKi8K KwlpZiAoIWNvbGRlZi0+aXNfbG9jYWwpCisJCXJldHVybiBOVUxMOworCisJYXR0clR1cCA9IFNl YXJjaFN5c0NhY2hlQXR0TmFtZShyZWxpZCwgY29sZGVmLT5jb2xuYW1lKTsKKwlpZiAoIUhlYXBU dXBsZUlzVmFsaWQoYXR0clR1cCkpCisJCWVsb2coRVJST1IsICJjb3VsZCBub3QgZmluZCBjYWNo ZSBlbnRyeSBmb3IgY29sdW1uIFwiJXNcIiBvZiByZWxhdGlvbiAldSIsCisJCQkgY29sZGVmLT5j b2xuYW1lLCByZWxpZCk7CisJYXR0ckZvcm0gPSAoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNUUlVD VChhdHRyVHVwKTsKKworCWdldF9hdHR0eXBldHlwbW9kY29sbChyZWxpZCwgYXR0ckZvcm0tPmF0 dG51bSwKKwkJCQkJCSAgJnR5cGlkLCAmdHlwbW9kLCAmdHlwY29sbGF0aW9uKTsKKworCS8qIENv bXBvc2l0ZSB0eXBlcyB1c2UgYSBzbGlnaHRseSBzaW1wbGVyIGZvcm1hdCBzdHJpbmcgKi8KKwlp ZiAoY29tcG9zaXRlKQorCQljb2x1bW4gPSBuZXdfb2JqdHJlZV9WQSgiJXtuYW1lfUkgJXtjb2x0 eXBlfVQgJXtjb2xsYXRpb259cyIsCisJCQkJCQkJCTMsCisJCQkJCQkJCSJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgImNvbHVtbiIsCisJCQkJCQkJCSJuYW1lIiwgT2JqVHlwZVN0cmluZywgY29sZGVm LT5jb2xuYW1lLAorCQkJCQkJCQkiY29sdHlwZSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCW5l d19vYmp0cmVlX2Zvcl90eXBlKHR5cGlkLCB0eXBtb2QpKTsKKwllbHNlCisJCWNvbHVtbiA9IG5l d19vYmp0cmVlX1ZBKCIle25hbWV9SSAle2NvbHR5cGV9VCAle2NvbXByZXNzaW9ufXMgJXtkZWZh dWx0fXMgJXtub3RfbnVsbH1zICV7Y29sbGF0aW9ufXMgIgorCQkJCQkJCQkiJXtnZW5lcmF0ZWRf Y29sdW1ufXMgJXtpZGVudGl0eV9jb2x1bW59cyIsCisJCQkJCQkJCTMsCisJCQkJCQkJCSJ0eXBl IiwgT2JqVHlwZVN0cmluZywgImNvbHVtbiIsCisJCQkJCQkJCSJuYW1lIiwgT2JqVHlwZVN0cmlu ZywgY29sZGVmLT5jb2xuYW1lLAorCQkJCQkJCQkiY29sdHlwZSIsIE9ialR5cGVPYmplY3QsCisJ CQkJCQkJCW5ld19vYmp0cmVlX2Zvcl90eXBlKHR5cGlkLCB0eXBtb2QpKTsKKworCS8qIFVTSU5H IGNsYXVzZSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJDT01QUkVTU0lPTiAle2NvbXByZXNz aW9uX21ldGhvZH1JIiwgMCk7CisJaWYgKGNvbGRlZi0+Y29tcHJlc3Npb24pCisJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRtcCwgImNvbXByZXNzaW9uX21ldGhvZCIsIGNvbGRlZi0+Y29tcHJlc3Np b24pOworCWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXAsICJjb21wcmVzc2lvbl9t ZXRob2QiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJ fQorCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwgImNvbXByZXNzaW9uIiwgdG1wKTsKKwor CXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJDT0xMQVRFICV7bmFtZX1EIiwgMCk7CisJaWYgKE9pZElz VmFsaWQodHlwY29sbGF0aW9uKSkKKwl7CisJCU9ialRyZWUgKmNvbGxuYW1lOworCisJCWNvbGxu YW1lID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKENvbGxhdGlvblJlbGF0aW9uSWQsCisJ CQkJCQkJCQkJCSAgIHR5cGNvbGxhdGlvbik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwg Im5hbWUiLCBjb2xsbmFtZSk7CisJfQorCWVsc2UKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcCwg InByZXNlbnQiLCBmYWxzZSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY29sdW1uLCAiY29sbGF0 aW9uIiwgdG1wKTsKKworCWlmICghY29tcG9zaXRlKQorCXsKKwkJT2lkCXNlcXJlbGlkID0gSW52 YWxpZE9pZDsKKworCQkvKgorCQkgKiBFbWl0IGEgTk9UIE5VTEwgZGVjbGFyYXRpb24gaWYgbmVj ZXNzYXJ5LiAgTm90ZSB0aGF0IHdlIGNhbm5vdCB0cnVzdAorCQkgKiBwZ19hdHRyaWJ1dGUuYXR0 bm90bnVsbCBoZXJlLCBiZWNhdXNlIHRoYXQgYml0IGlzIGFsc28gc2V0IHdoZW4KKwkJICogcHJp bWFyeSBrZXlzIGFyZSBzcGVjaWZpZWQ7IGFuZCB3ZSBtdXN0IG5vdCBlbWl0IGEgTk9UIE5VTEwK KwkJICogY29uc3RyYWludCBpbiB0aGF0IGNhc2UsIHVubGVzcyBleHBsaWNpdGVseSBzcGVjaWZp ZWQuICBUaGVyZWZvcmUsCisJCSAqIHdlIHNjYW4gdGhlIGxpc3Qgb2YgY29uc3RyYWludHMgYXR0 YWNoZWQgdG8gdGhpcyBjb2x1bW4gdG8gZGV0ZXJtaW5lCisJCSAqIHdoZXRoZXIgd2UgbmVlZCB0 byBlbWl0IGFueXRoaW5nLgorCQkgKiAoRm9ydHVuYXRlbHksIE5PVCBOVUxMIGNvbnN0cmFpbnRz IGNhbm5vdCBiZSB0YWJsZSBjb25zdHJhaW50cy4pCisJCSAqCisJCSAqIEluIHRoZSBBTFRFUiBU QUJMRSBjYXNlcywgd2UgYWxzbyBhZGQgYSBOT1QgTlVMTCBpZiB0aGUgY29sRGVmIGlzCisJCSAq IG1hcmtlZCBpc19ub3RfbnVsbC4KKwkJICovCisJCXNhd19ub3RudWxsID0gZmFsc2U7CisJCWZv cmVhY2goY2VsbCwgY29sZGVmLT5jb25zdHJhaW50cykKKwkJeworCQkJQ29uc3RyYWludCAqY29u c3RyID0gKENvbnN0cmFpbnQgKikgbGZpcnN0KGNlbGwpOworCisJCQlpZiAoY29uc3RyLT5jb250 eXBlID09IENPTlNUUl9OT1ROVUxMKQorCQkJCXNhd19ub3RudWxsID0gdHJ1ZTsKKwkJfQorCQlp ZiAoaXNfYWx0ZXIgJiYgY29sZGVmLT5pc19ub3RfbnVsbCkKKwkJCXNhd19ub3RudWxsID0gdHJ1 ZTsKKworCQlpZiAoc2F3X25vdG51bGwpCisJCQlhcHBlbmRfc3RyaW5nX29iamVjdChjb2x1bW4s ICJub3RfbnVsbCIsICJOT1QgTlVMTCIpOworCQllbHNlCisJCQlhcHBlbmRfc3RyaW5nX29iamVj dChjb2x1bW4sICJub3RfbnVsbCIsICIiKTsKKworCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiREVG QVVMVCAle2RlZmF1bHR9cyIsIDApOworCQlpZiAoYXR0ckZvcm0tPmF0dGhhc2RlZikKKwkJewor CQkJY2hhciAqZGVmc3RyOworCisJCQlkZWZzdHIgPSBSZWxhdGlvbkdldENvbHVtbkRlZmF1bHQo cmVsYXRpb24sIGF0dHJGb3JtLT5hdHRudW0sCisJCQkJCQkJCQkJCSAgZHBjb250ZXh0LCBleHBy cyk7CisKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgImRlZmF1bHQiLCBkZWZzdHIpOwor CQl9CisJCWVsc2UKKwkJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2Up OworCQlhcHBlbmRfb2JqZWN0X29iamVjdChjb2x1bW4sICJkZWZhdWx0IiwgdG1wKTsKKworCQkv KiBJREVOVElUWSBDT0xVTU4gKi8KKwkJaWYgKGNvbGRlZi0+aWRlbnRpdHkpCisJCXsKKwkJCU9p ZAlhdHRubyA9IGdldF9hdHRudW0ocmVsaWQsIGNvbGRlZi0+Y29sbmFtZSk7CisJCQlzZXFyZWxp ZCA9IGdldElkZW50aXR5U2VxdWVuY2UocmVsaWQsIGF0dG5vLCBmYWxzZSk7CisJCX0KKworCQl0 bXAgPSBkZXBhcnNlX0NvbHVtbklkZW50aXR5KHNlcXJlbGlkLCBjb2xkZWYtPmlkZW50aXR5LCBp c19hbHRlcik7CisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVtbiwgImlkZW50aXR5X2NvbHVt biIsIHRtcCk7CisKKwkJLyogR0VORVJBVEVEIENPTFVNTiBFWFBSRVNTSU9OICovCisJCXRtcCA9 IG5ld19vYmp0cmVlX1ZBKCJHRU5FUkFURUQgQUxXQVlTIEFTICV7Z2VuZXJhdGlvbl9leHByfXMg U1RPUkVEIiwgMCk7CisJCWlmIChjb2xkZWYtPmdlbmVyYXRlZCA9PSBBVFRSSUJVVEVfR0VORVJB VEVEX1NUT1JFRCkKKwkJeworCQkJY2hhciAqZGVmc3RyOworCisJCQlkZWZzdHIgPSBSZWxhdGlv bkdldENvbHVtbkRlZmF1bHQocmVsYXRpb24sIGF0dHJGb3JtLT5hdHRudW0sCisJCQkJCQkJCQkJ CSAgZHBjb250ZXh0LCBleHBycyk7CisJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICJnZW5l cmF0aW9uX2V4cHIiLCBkZWZzdHIpOworCQl9CisJCWVsc2UKKwkJCWFwcGVuZF9ib29sX29iamVj dCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCisJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNvbHVt biwgImdlbmVyYXRlZF9jb2x1bW4iLCB0bXApOworCX0KKworCVJlbGVhc2VTeXNDYWNoZShhdHRy VHVwKTsKKworCXJldHVybiBjb2x1bW47Cit9CisKKy8qCisgKiBkZXBhcnNlX0NvbHVtbkRlZl9U eXBlZAorICoJCVN1YnJvdXRpbmUgZm9yIENSRUFURSBUQUJMRSBPRiBkZXBhcnNpbmcKKyAqCisg KiBEZXBhcnNlIGEgQ29sdW1uRGVmIG5vZGUgd2l0aGluIGEgdHlwZWQgdGFibGUgY3JlYXRpb24u CVRoaXMgaXMgc2ltcGxlcgorICogdGhhbiB0aGUgcmVndWxhciBjYXNlLCBiZWNhdXNlIHdlIGRv bid0IGhhdmUgdG8gZW1pdCB0aGUgdHlwZSBkZWNsYXJhdGlvbiwKKyAqIGNvbGxhdGlvbiwgb3Ig ZGVmYXVsdC4gIEhlcmUgd2Ugb25seSByZXR1cm4gc29tZXRoaW5nIGlmIHRoZSBjb2x1bW4gaXMg YmVpbmcKKyAqIGRlY2xhcmVkIE5PVCBOVUxMLgorICoKKyAqIEFzIGluIGRlcGFyc2VfQ29sdW1u RGVmLCBhbnkgb3RoZXIgY29uc3RyYWludCBpcyBwcm9jZXNzZWQgZWxzZXdoZXJlLgorICoKKyAq IEZJWE1FIC0tLSBhY3R1YWxseSwgd2hhdCBhYm91dCBkZWZhdWx0IHZhbHVlcz8KKyAqLworc3Rh dGljIE9ialRyZWUgKgorZGVwYXJzZV9Db2x1bW5EZWZfdHlwZWQoUmVsYXRpb24gcmVsYXRpb24s IExpc3QgKmRwY29udGV4dCwgQ29sdW1uRGVmICpjb2xkZWYpCit7CisJT2JqVHJlZQkqY29sdW1u ID0gTlVMTDsKKwlPYmpUcmVlCSp0bXA7CisJT2lkCQkJcmVsaWQgPSBSZWxhdGlvbkdldFJlbGlk KHJlbGF0aW9uKTsKKwlIZWFwVHVwbGUJYXR0clR1cDsKKwlGb3JtX3BnX2F0dHJpYnV0ZSBhdHRy Rm9ybTsKKwlPaWQJCQl0eXBpZDsKKwlpbnQzMgkJdHlwbW9kOworCU9pZAkJCXR5cGNvbGxhdGlv bjsKKwlib29sCQlzYXdfbm90bnVsbDsKKwlMaXN0Q2VsbCAgICpjZWxsOworCisJYXR0clR1cCA9 IFNlYXJjaFN5c0NhY2hlQXR0TmFtZShyZWxpZCwgY29sZGVmLT5jb2xuYW1lKTsKKwlpZiAoIUhl YXBUdXBsZUlzVmFsaWQoYXR0clR1cCkpCisJCWVsb2coRVJST1IsICJjb3VsZCBub3QgZmluZCBj YWNoZSBlbnRyeSBmb3IgY29sdW1uIFwiJXNcIiBvZiByZWxhdGlvbiAldSIsCisJCQkgY29sZGVm LT5jb2xuYW1lLCByZWxpZCk7CisJYXR0ckZvcm0gPSAoRm9ybV9wZ19hdHRyaWJ1dGUpIEdFVFNU UlVDVChhdHRyVHVwKTsKKworCWdldF9hdHR0eXBldHlwbW9kY29sbChyZWxpZCwgYXR0ckZvcm0t PmF0dG51bSwKKwkJCQkJCSAgJnR5cGlkLCAmdHlwbW9kLCAmdHlwY29sbGF0aW9uKTsKKworCS8q CisJICogU2VhcmNoIGZvciBhIE5PVCBOVUxMIGRlY2xhcmF0aW9uLiAgQXMgaW4gZGVwYXJzZV9D b2x1bW5EZWYsIHdlIHJlbHkgb24KKwkgKiBmaW5kaW5nIGEgY29uc3RyYWludCBvbiB0aGUgY29s dW1uIHJhdGhlciB0aGFuIGNvbGRlZi0+aXNfbm90X251bGwuCisJICogKFRoaXMgcm91dGluZSBp cyBuZXZlciB1c2VkIGZvciBBTFRFUiBjYXNlcy4pCisJICovCisJc2F3X25vdG51bGwgPSBmYWxz ZTsKKwlmb3JlYWNoKGNlbGwsIGNvbGRlZi0+Y29uc3RyYWludHMpCisJeworCQlDb25zdHJhaW50 ICpjb25zdHIgPSAoQ29uc3RyYWludCAqKSBsZmlyc3QoY2VsbCk7CisKKwkJaWYgKGNvbnN0ci0+ Y29udHlwZSA9PSBDT05TVFJfTk9UTlVMTCkKKwkJeworCQkJc2F3X25vdG51bGwgPSB0cnVlOwor CQkJYnJlYWs7CisJCX0KKwl9CisKKwlpZiAoIXNhd19ub3RudWxsICYmICFhdHRyRm9ybS0+YXR0 aGFzZGVmKQorCXsKKwkJUmVsZWFzZVN5c0NhY2hlKGF0dHJUdXApOworCQlyZXR1cm4gTlVMTDsK Kwl9CisKKwljb2x1bW4gPSBuZXdfb2JqdHJlZV9WQSgiJXtuYW1lfUkgV0lUSCBPUFRJT05TICV7 ZGVmYXVsdH1zICV7bm90X251bGx9cyIsIDIsCisJCQkJCQkJInR5cGUiLCBPYmpUeXBlU3RyaW5n LCAiY29sdW1uIiwKKwkJCQkJCQkibmFtZSIsIE9ialR5cGVTdHJpbmcsIGNvbGRlZi0+Y29sbmFt ZSk7CisKKwlpZiAoc2F3X25vdG51bGwpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNvbHVtbiwg Im5vdF9udWxsIiwgIk5PVCBOVUxMIik7CisJZWxzZQorCQlhcHBlbmRfc3RyaW5nX29iamVjdChj b2x1bW4sICJub3RfbnVsbCIsICIiKTsKKworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJERUZBVUxU ICV7ZGVmYXVsdH1zIiwgMCk7CisJaWYgKGF0dHJGb3JtLT5hdHRoYXNkZWYpCisJeworCQljaGFy ICpkZWZzdHI7CisKKwkJZGVmc3RyID0gUmVsYXRpb25HZXRDb2x1bW5EZWZhdWx0KHJlbGF0aW9u LCBhdHRyRm9ybS0+YXR0bnVtLAorCQkJCQkJCQkJCSAgZHBjb250ZXh0LCBOVUxMKTsKKworCQlh cHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICJkZWZhdWx0IiwgZGVmc3RyKTsKKwl9CisJZWxzZQor CQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlhcHBlbmRfb2Jq ZWN0X29iamVjdChjb2x1bW4sICJkZWZhdWx0IiwgdG1wKTsKKworCVJlbGVhc2VTeXNDYWNoZShh dHRyVHVwKTsKKworCXJldHVybiBjb2x1bW47Cit9CisKKy8qCisgKiBkZXBhcnNlVGFibGVFbGVt ZW50cworICoJCVN1YnJvdXRpbmUgZm9yIENSRUFURSBUQUJMRSBkZXBhcnNpbmcKKyAqCisgKiBE ZWFsIHdpdGggYWxsIHRoZSB0YWJsZSBlbGVtZW50cyAoY29sdW1ucyBhbmQgY29uc3RyYWludHMp LgorICoKKyAqIE5vdGUgd2UgaWdub3JlIGNvbnN0cmFpbnRzIGluIHRoZSBwYXJzZSBub2RlIGhl cmU7IHRoZXkgYXJlIGV4dHJhY3RlZCBmcm9tCisgKiBzeXN0ZW0gY2F0YWxvZ3MgaW5zdGVhZC4K KyAqLworc3RhdGljIExpc3QgKgorZGVwYXJzZVRhYmxlRWxlbWVudHMoUmVsYXRpb24gcmVsYXRp b24sIExpc3QgKnRhYmxlRWxlbWVudHMsIExpc3QgKmRwY29udGV4dCwKKwkJCQkJIGJvb2wgdHlw ZWQsIGJvb2wgY29tcG9zaXRlKQoreworCUxpc3QJICAgKmVsZW1lbnRzID0gTklMOworCUxpc3RD ZWxsICAgKmxjOworCisJZm9yZWFjaChsYywgdGFibGVFbGVtZW50cykKKwl7CisJCU5vZGUJICAg KmVsdCA9IChOb2RlICopIGxmaXJzdChsYyk7CisKKwkJc3dpdGNoIChub2RlVGFnKGVsdCkpCisJ CXsKKwkJCWNhc2UgVF9Db2x1bW5EZWY6CisJCQkJeworCQkJCQlPYmpUcmVlCSAgICp0cmVlOwor CisJCQkJCXRyZWUgPSB0eXBlZCA/CisJCQkJCQlkZXBhcnNlX0NvbHVtbkRlZl90eXBlZChyZWxh dGlvbiwgZHBjb250ZXh0LAorCQkJCQkJCQkJCQkJKENvbHVtbkRlZiAqKSBlbHQpIDoKKwkJCQkJ CWRlcGFyc2VfQ29sdW1uRGVmKHJlbGF0aW9uLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJICBjb21w b3NpdGUsIChDb2x1bW5EZWYgKikgZWx0LAorCQkJCQkJCQkJCSAgZmFsc2UsIE5VTEwpOworCQkJ CQlpZiAodHJlZSAhPSBOVUxMKQorCQkJCQl7CisJCQkJCQlPYmpFbGVtCSpjb2x1bW47CisKKwkJ CQkJCWNvbHVtbiA9IG5ld19vYmplY3Rfb2JqZWN0KHRyZWUpOworCQkJCQkJZWxlbWVudHMgPSBs YXBwZW5kKGVsZW1lbnRzLCBjb2x1bW4pOworCQkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworCQkJ Y2FzZSBUX0NvbnN0cmFpbnQ6CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVsb2coRVJS T1IsICJpbnZhbGlkIG5vZGUgdHlwZSAlZCIsIG5vZGVUYWcoZWx0KSk7CisJCX0KKwl9CisKKwly ZXR1cm4gZWxlbWVudHM7Cit9CisKKy8qCisgKiBvYnRhaW5Db25zdHJhaW50cworICoJCVN1YnJv dXRpbmUgZm9yIENSRUFURSBUQUJMRS9DUkVBVEUgRE9NQUlOIGRlcGFyc2luZworICoKKyAqIEdp dmVuIGEgdGFibGUgT0lEIG9yIGRvbWFpbiBPSUQsIG9idGFpbiBpdHMgY29uc3RyYWludHMgYW5k IGFwcGVuZCB0aGVtIHRvCisgKiB0aGUgZ2l2ZW4gZWxlbWVudHMgbGlzdC4gIFRoZSB1cGRhdGVk IGxpc3QgaXMgcmV0dXJuZWQuCisgKgorICogVGhpcyB3b3JrcyBmb3IgdHlwZWQgdGFibGVzLCBy ZWd1bGFyIHRhYmxlcywgYW5kIGRvbWFpbnMuCisgKgorICogTm90ZSB0aGF0IENPTlNUUkFJTlRf Rk9SRUlHTiBjb25zdHJhaW50cyBhcmUgYWx3YXlzIGlnbm9yZWQuCisgKi8KK3N0YXRpYyBMaXN0 ICoKK29idGFpbkNvbnN0cmFpbnRzKExpc3QgKmVsZW1lbnRzLCBPaWQgcmVsYXRpb25JZCwgT2lk IGRvbWFpbklkKQoreworCVJlbGF0aW9uCWNvblJlbDsKKwlTY2FuS2V5RGF0YSBrZXk7CisJU3lz U2NhbkRlc2Mgc2NhbjsKKwlIZWFwVHVwbGUJdHVwbGU7CisJT2JqVHJlZQkqdG1wOworCisJLyog b25seSBvbmUgbWF5IGJlIHZhbGlkICovCisJQXNzZXJ0KE9pZElzVmFsaWQocmVsYXRpb25JZCkg XiBPaWRJc1ZhbGlkKGRvbWFpbklkKSk7CisKKwkvKgorCSAqIHNjYW4gcGdfY29uc3RyYWludCB0 byBmZXRjaCBhbGwgY29uc3RyYWludHMgbGlua2VkIHRvIHRoZSBnaXZlbgorCSAqIHJlbGF0aW9u LgorCSAqLworCWNvblJlbCA9IHRhYmxlX29wZW4oQ29uc3RyYWludFJlbGF0aW9uSWQsIEFjY2Vz c1NoYXJlTG9jayk7CisJaWYgKE9pZElzVmFsaWQocmVsYXRpb25JZCkpCisJeworCQlTY2FuS2V5 SW5pdCgma2V5LAorCQkJCQlBbnVtX3BnX2NvbnN0cmFpbnRfY29ucmVsaWQsCisJCQkJCUJURXF1 YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJT2JqZWN0SWRHZXREYXR1bShyZWxhdGlv bklkKSk7CisJCXNjYW4gPSBzeXN0YWJsZV9iZWdpbnNjYW4oY29uUmVsLCBDb25zdHJhaW50UmVs aWRUeXBpZE5hbWVJbmRleElkLAorCQkJCQkJCQkgIHRydWUsIE5VTEwsIDEsICZrZXkpOworCX0K KwllbHNlCisJeworCQlBc3NlcnQoT2lkSXNWYWxpZChkb21haW5JZCkpOworCQlTY2FuS2V5SW5p dCgma2V5LAorCQkJCQlBbnVtX3BnX2NvbnN0cmFpbnRfY29udHlwaWQsCisJCQkJCUJURXF1YWxT dHJhdGVneU51bWJlciwgRl9PSURFUSwKKwkJCQkJT2JqZWN0SWRHZXREYXR1bShkb21haW5JZCkp OworCQlzY2FuID0gc3lzdGFibGVfYmVnaW5zY2FuKGNvblJlbCwgQ29uc3RyYWludFR5cGlkSW5k ZXhJZCwKKwkJCQkJCQkJICB0cnVlLCBOVUxMLCAxLCAma2V5KTsKKwl9CisKKwkvKgorCSAqIEZv ciBlYWNoIGNvbnN0cmFpbnQsIGFkZCBhIG5vZGUgdG8gdGhlIGxpc3Qgb2YgdGFibGUgZWxlbWVu dHMuICBJbgorCSAqIHRoZXNlIG5vZGVzIHdlIGluY2x1ZGUgbm90IG9ubHkgdGhlIHByaW50YWJs ZSBpbmZvcm1hdGlvbiAoImZtdCIpLCBidXQKKwkgKiBhbHNvIHNlcGFyYXRlIGF0dHJpYnV0ZXMg dG8gaW5kaWNhdGUgdGhlIHR5cGUgb2YgY29uc3RyYWludCwgZm9yCisJICogYXV0b21hdGljIHBy b2Nlc3NpbmcuCisJICovCisJd2hpbGUgKEhlYXBUdXBsZUlzVmFsaWQodHVwbGUgPSBzeXN0YWJs ZV9nZXRuZXh0KHNjYW4pKSkKKwl7CisJCUZvcm1fcGdfY29uc3RyYWludCBjb25zdHJGb3JtOwor CQljaGFyCSAgICpjb250eXBlOworCisJCWNvbnN0ckZvcm0gPSAoRm9ybV9wZ19jb25zdHJhaW50 KSBHRVRTVFJVQ1QodHVwbGUpOworCisJCXN3aXRjaCAoY29uc3RyRm9ybS0+Y29udHlwZSkKKwkJ eworCQkJY2FzZSBDT05TVFJBSU5UX0NIRUNLOgorCQkJCWNvbnR5cGUgPSAiY2hlY2siOworCQkJ CWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX0ZPUkVJR046CisJCQkJY29udGludWU7CS8qIG5v dCBoZXJlICovCisJCQljYXNlIENPTlNUUkFJTlRfUFJJTUFSWToKKwkJCQljb250eXBlID0gInBy aW1hcnkga2V5IjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RSQUlOVF9VTklRVUU6CisJCQkJ Y29udHlwZSA9ICJ1bmlxdWUiOworCQkJCWJyZWFrOworCQkJY2FzZSBDT05TVFJBSU5UX1RSSUdH RVI6CisJCQkJY29udHlwZSA9ICJ0cmlnZ2VyIjsKKwkJCQlicmVhazsKKwkJCWNhc2UgQ09OU1RS QUlOVF9FWENMVVNJT046CisJCQkJY29udHlwZSA9ICJleGNsdXNpb24iOworCQkJCWJyZWFrOwor CQkJZGVmYXVsdDoKKwkJCQllbG9nKEVSUk9SLCAidW5yZWNvZ25pemVkIGNvbnN0cmFpbnQgdHlw ZSIpOworCQl9CisKKwkJLyoKKwkJICogInR5cGUiIGFuZCAiY29udHlwZSIgYXJlIG5vdCBwYXJ0 IG9mIHRoZSBwcmludGFibGUgb3V0cHV0LCBidXQgYXJlCisJCSAqIHVzZWZ1bCB0byBwcm9ncmFt bWF0aWNhbGx5IGRpc3Rpbmd1aXNoIHRoZXNlIGZyb20gY29sdW1ucyBhbmQgYW1vbmcKKwkJICog ZGlmZmVyZW50IGNvbnN0cmFpbnQgdHlwZXMuCisJCSAqCisJCSAqIFhYWCBpdCBtaWdodCBiZSB1 c2VmdWwgdG8gYWxzbyBsaXN0IHRoZSBjb2x1bW4gbmFtZXMgaW4gYSBQSywgZXRjLgorCQkgKi8K KwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkNPTlNUUkFJTlQgJXtuYW1lfUkgJXtkZWZpbml0aW9u fXMiLAorCQkJCQkJCSA0LAorCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJjb25zdHJh aW50IiwKKwkJCQkJCQkgImNvbnR5cGUiLCBPYmpUeXBlU3RyaW5nLCBjb250eXBlLAorCQkJCQkJ ICJuYW1lIiwgT2JqVHlwZVN0cmluZywgTmFtZVN0cihjb25zdHJGb3JtLT5jb25uYW1lKSwKKwkJ CQkJCQkgImRlZmluaXRpb24iLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJICBwZ19nZXRfY29uc3Ry YWludGRlZl9jb21tYW5kX3NpbXBsZShjb25zdHJGb3JtLT5vaWQpKTsKKwkJZWxlbWVudHMgPSBs YXBwZW5kKGVsZW1lbnRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwl9CisKKwlzeXN0YWJs ZV9lbmRzY2FuKHNjYW4pOworCXRhYmxlX2Nsb3NlKGNvblJlbCwgQWNjZXNzU2hhcmVMb2NrKTsK KworCXJldHVybiBlbGVtZW50czsKK30KKworLyoKKyAqIGRlcGFyc2UgdGhlIE9OIENPTU1NSVQg Li4uIGNsYXVzZSBmb3IgQ1JFQVRFIC4uLiBURU1QT1JBUlkgLi4uCisgKi8KK3N0YXRpYyBPYmpU cmVlICoKK2RlcGFyc2VfT25Db21taXRDbGF1c2UoT25Db21taXRBY3Rpb24gb3B0aW9uKQorewor CU9ialRyZWUJICAgKnRtcDsKKworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJPTiBDT01NSVQgJXtv bl9jb21taXRfdmFsdWV9cyIsIDApOworCXN3aXRjaCAob3B0aW9uKQorCXsKKwkJY2FzZSBPTkNP TU1JVF9EUk9QOgorCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAib25fY29tbWl0X3ZhbHVl IiwgIkRST1AiKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT05DT01NSVRfREVMRVRFX1JPV1M6CisJ CQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICJvbl9jb21taXRfdmFsdWUiLCAiREVMRVRFIFJP V1MiKTsKKwkJCWJyZWFrOworCisJCWNhc2UgT05DT01NSVRfUFJFU0VSVkVfUk9XUzoKKwkJCWFw cGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIm9uX2NvbW1pdF92YWx1ZSIsICJQUkVTRVJWRSBST1dT Iik7CisJCQlicmVhazsKKworCQljYXNlIE9OQ09NTUlUX05PT1A6CisJCQlhcHBlbmRfbnVsbF9v YmplY3QodG1wLCAib25fY29tbWl0X3ZhbHVlIik7CisJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1w LCAicHJlc2VudCIsIGZhbHNlKTsKKwkJCWJyZWFrOworCX0KKworCXJldHVybiB0bXA7Cit9CisK Ky8qCisgKiBEZXBhcnNlIERlZkVsZW1zLCBhcyB1c2VkIGUuZy4gYnkgQUxURVIgQ09MVU1OIC4u LiBTRVQsIGludG8gYSBsaXN0IG9mIFNFVAorICogKC4uLikgIG9yIFJFU0VUICguLi4pIGNvbnRl bnRzLgorICovCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0RlZkVsZW0oRGVmRWxlbSAqZWxl bSwgYm9vbCBpc19yZXNldCkKK3sKKwlPYmpUcmVlCSAgICpzZXQ7CisJT2JqVHJlZQkgICAqb3B0 bmFtZTsKKworCWlmIChlbGVtLT5kZWZuYW1lc3BhY2UgIT0gTlVMTCkKKwkJb3B0bmFtZSA9IG5l d19vYmp0cmVlX1ZBKCIle3NjaGVtYX1JLiV7bGFiZWx9SSIsIDEsCisJCQkJCQkJCSAic2NoZW1h IiwgT2JqVHlwZVN0cmluZywgZWxlbS0+ZGVmbmFtZXNwYWNlKTsKKwllbHNlCisJCW9wdG5hbWUg PSBuZXdfb2JqdHJlZV9WQSgiJXtsYWJlbH1JIiwgMCk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVj dChvcHRuYW1lLCAibGFiZWwiLCBlbGVtLT5kZWZuYW1lKTsKKworCWlmIChpc19yZXNldCkKKwkJ c2V0ID0gbmV3X29ianRyZWVfVkEoIiV7bGFiZWx9cyIsIDApOworCWVsc2UKKwkJc2V0ID0gbmV3 X29ianRyZWVfVkEoIiV7bGFiZWx9cyA9ICV7dmFsdWV9TCIsIDEsCisJCQkJCQkJICJ2YWx1ZSIs IE9ialR5cGVTdHJpbmcsCisJCQkJCQkJIGVsZW0tPmFyZyA/IGRlZkdldFN0cmluZyhlbGVtKSA6 CisJCQkJCQkJIGRlZkdldEJvb2xlYW4oZWxlbSkgPyAiVFJVRSIgOiAiRkFMU0UiKTsKKworCWFw cGVuZF9vYmplY3Rfb2JqZWN0KHNldCwgImxhYmVsIiwgb3B0bmFtZSk7CisJcmV0dXJuIHNldDsK K30KKworLyoKKyAqIC4uLiBBTFRFUiBDT0xVTU4gLi4uIFNFVC9SRVNFVCAoLi4uKQorICovCitz dGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX0NvbHVtblNldE9wdGlvbnMoQWx0ZXJUYWJsZUNtZCAq c3ViY21kKQoreworCUxpc3QJICAgKnNldHMgPSBOSUw7CisJTGlzdENlbGwgICAqY2VsbDsKKwlP YmpUcmVlCSp0bXA7CisJYm9vbAkJaXNfcmVzZXQgPSBzdWJjbWQtPnN1YnR5cGUgPT0gQVRfUmVz ZXRPcHRpb25zOworCisJaWYgKGlzX3Jlc2V0KQorCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQUxU RVIgQ09MVU1OICV7Y29sdW1ufUkgUkVTRVQgKCV7b3B0aW9uczosIH1zKSIsIDApOworCWVsc2UK KwkJdG1wID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCAoJXtv cHRpb25zOiwgfXMpIiwgMCk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICJjb2x1bW4i LCBzdWJjbWQtPm5hbWUpOworCisJZm9yZWFjaChjZWxsLCAoTGlzdCAqKSBzdWJjbWQtPmRlZikK Kwl7CisJCURlZkVsZW0JICAgKmVsZW07CisJCU9ialRyZWUJICAgKnNldDsKKworCQllbGVtID0g KERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlzZXQgPSBkZXBhcnNlX0RlZkVsZW0oZWxlbSwg aXNfcmVzZXQpOworCQlzZXRzID0gbGFwcGVuZChzZXRzLCBuZXdfb2JqZWN0X29iamVjdChzZXQp KTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHRtcCwgIm9wdGlvbnMiLCBzZXRzKTsKKwor CXJldHVybiB0bXA7Cit9CisKKy8qCisgKiAuLi4gQUxURVIgQ09MVU1OIC4uLiBTRVQvUkVTRVQg KC4uLikKKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJzZV9SZWxTZXRPcHRpb25zKEFsdGVy VGFibGVDbWQgKnN1YmNtZCkKK3sKKwlMaXN0CSAgICpzZXRzID0gTklMOworCUxpc3RDZWxsICAg KmNlbGw7CisJT2JqVHJlZQkqdG1wOworCWJvb2wJCWlzX3Jlc2V0ID0gc3ViY21kLT5zdWJ0eXBl ID09IEFUX1Jlc2V0UmVsT3B0aW9uczsKKworCWlmIChpc19yZXNldCkKKwkJdG1wID0gbmV3X29i anRyZWVfVkEoIlJFU0VUICgle29wdGlvbnM6LCB9cykiLCAwKTsKKwllbHNlCisJCXRtcCA9IG5l d19vYmp0cmVlX1ZBKCJTRVQgKCV7b3B0aW9uczosIH1zKSIsIDApOworCisJZm9yZWFjaChjZWxs LCAoTGlzdCAqKSBzdWJjbWQtPmRlZikKKwl7CisJCURlZkVsZW0JICAgKmVsZW07CisJCU9ialRy ZWUJICAgKnNldDsKKworCQllbGVtID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCQlzZXQg PSBkZXBhcnNlX0RlZkVsZW0oZWxlbSwgaXNfcmVzZXQpOworCQlzZXRzID0gbGFwcGVuZChzZXRz LCBuZXdfb2JqZWN0X29iamVjdChzZXQpKTsKKwl9CisKKwlhcHBlbmRfYXJyYXlfb2JqZWN0KHRt cCwgIm9wdGlvbnMiLCBzZXRzKTsKKworCXJldHVybiB0bXA7Cit9CisKKy8qCisgKiBkZXBhcnNl X0luaFJlbGF0aW9ucworICoJCURlcGFyc2UgdGhlIGluaGVyaXRzIHJlbGF0aW9ucworICoKKyAq IEdpdmVuIGEgdGFibGUgT0lELCByZXR1cm4gYSBzY2hlbWEgcXVhbGlmaWVkIHRhYmxlIGxpc3Qg cmVwcmVzZW50aW5nCisgKiB0aGUgcGFyZW50IHRhYmxlcy4KKyAqLworc3RhdGljIExpc3QgKgor ZGVwYXJzZV9JbmhSZWxhdGlvbnMoT2lkIG9iamVjdElkKQoreworCUxpc3QJICAgKnBhcmVudHMg PSBOSUw7CisJUmVsYXRpb24JaW5oUmVsOworCVN5c1NjYW5EZXNjIHNjYW47CisJU2NhbktleURh dGEga2V5OworCUhlYXBUdXBsZQl0dXBsZTsKKworCWluaFJlbCA9IHRhYmxlX29wZW4oSW5oZXJp dHNSZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKworCVNjYW5LZXlJbml0KCZrZXksCisJ CQkJQW51bV9wZ19pbmhlcml0c19pbmhyZWxpZCwKKwkJCQlCVEVxdWFsU3RyYXRlZ3lOdW1iZXIs IEZfT0lERVEsCisJCQkJT2JqZWN0SWRHZXREYXR1bShvYmplY3RJZCkpOworCisJc2NhbiA9IHN5 c3RhYmxlX2JlZ2luc2NhbihpbmhSZWwsIEluaGVyaXRzUmVsaWRTZXFub0luZGV4SWQsCisJCQkJ CQkJICB0cnVlLCBOVUxMLCAxLCAma2V5KTsKKworCXdoaWxlIChIZWFwVHVwbGVJc1ZhbGlkKHR1 cGxlID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKSkpCisJeworCQlPYmpUcmVlCSpwYXJlbnQ7CisJ CUZvcm1fcGdfaW5oZXJpdHMgZm9ybUluaCA9IChGb3JtX3BnX2luaGVyaXRzKSBHRVRTVFJVQ1Qo dHVwbGUpOworCisJCXBhcmVudCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlv blJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCSBmb3JtSW5oLT5pbmhwYXJlbnQpOworCQlwYXJlbnRz ID0gbGFwcGVuZChwYXJlbnRzLCBuZXdfb2JqZWN0X29iamVjdChwYXJlbnQpKTsKKwl9CisKKwlz eXN0YWJsZV9lbmRzY2FuKHNjYW4pOworCXRhYmxlX2Nsb3NlKGluaFJlbCwgUm93RXhjbHVzaXZl TG9jayk7CisKKwlyZXR1cm4gcGFyZW50czsKK30KKworc3RhdGljIGNoYXIgKgorUmVsYXRpb25H ZXRQYXJ0aXRpb25Cb3VuZChPaWQgcmVsaWQpCit7CisJRGF0dW0JCWRlcGFyc2VkOworCURhdHVt CQlib3VuZERhdHVtOworCWJvb2wJCWlzbnVsbDsKKwlIZWFwVHVwbGUJdHVwbGU7CisKKwl0dXBs ZSA9IFNlYXJjaFN5c0NhY2hlMShSRUxPSUQsIHJlbGlkKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFs aWQodHVwbGUpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUgbG9va3VwIGZhaWxlZCBmb3IgcmVsYXRp b24gJXUiLAorCQkJIHJlbGlkKTsKKworCWJvdW5kRGF0dW0gPSBTeXNDYWNoZUdldEF0dHIoUkVM T0lELCB0dXBsZSwKKwkJCQkJCQkJIEFudW1fcGdfY2xhc3NfcmVscGFydGJvdW5kLAorCQkJCQkJ CQkgJmlzbnVsbCk7CisKKwlkZXBhcnNlZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfZ2V0X2V4 cHIsCisJCQkJCQkJCSAgIENTdHJpbmdHZXRUZXh0RGF0dW0oVGV4dERhdHVtR2V0Q1N0cmluZyhi b3VuZERhdHVtKSksCisJCQkJCQkJCSAgIHJlbGlkKTsKKworCVJlbGVhc2VTeXNDYWNoZSh0dXBs ZSk7CisKKwlyZXR1cm4gVGV4dERhdHVtR2V0Q1N0cmluZyhkZXBhcnNlZCk7Cit9CisKKy8qCisg KiBSZXR1cm4gYW4gaW5kZXggZGVmaW5pdGlvbiwgc3BsaXQgaW4gc2V2ZXJhbCBwaWVjZXMuCisg KgorICogVGhlcmUgaXMgYSBodWdlIGxvdCBvZiBjb2RlIHRoYXQncyBhIGR1cGUgb2YgcGdfZ2V0 X2luZGV4ZGVmX3dvcmtlciwgYnV0CisgKiBjb250cm9sIGZsb3cgaXMgZGlmZmVyZW50IGVub3Vn aCB0aGF0IGl0IGRvZXNuJ3Qgc2VlbSB3b3J0aCBrZWVwaW5nIHRoZW0KKyAqIHRvZ2V0aGVyLgor ICovCitzdGF0aWMgdm9pZAorcGdfZ2V0X2luZGV4ZGVmX2RldGFpbGVkKE9pZCBpbmRleHJlbGlk LAorCQkJCQkJIGNoYXIgKippbmRleF9hbSwKKwkJCQkJCSBjaGFyICoqZGVmaW5pdGlvbiwKKwkJ CQkJCSBjaGFyICoqcmVsb3B0aW9ucywKKwkJCQkJCSBjaGFyICoqdGFibGVzcGFjZSwKKwkJCQkJ CSBjaGFyICoqd2hlcmVDbGF1c2UpCit7CisJSGVhcFR1cGxlCWh0X2lkeDsKKwlIZWFwVHVwbGUJ aHRfaWR4cmVsOworCUhlYXBUdXBsZQlodF9hbTsKKwlGb3JtX3BnX2luZGV4IGlkeHJlYzsKKwlG b3JtX3BnX2NsYXNzIGlkeHJlbHJlYzsKKwlGb3JtX3BnX2FtCWFtcmVjOworCUluZGV4QW1Sb3V0 aW5lICphbXJvdXRpbmU7CisJTGlzdAkgICAqaW5kZXhwcnM7CisJTGlzdENlbGwgICAqaW5kZXhw cl9pdGVtOworCUxpc3QJICAgKmNvbnRleHQ7CisJT2lkCQkJaW5kcmVsaWQ7CisJaW50CQkJa2V5 bm87CisJRGF0dW0JCWluZGNvbGxEYXR1bTsKKwlEYXR1bQkJaW5kY2xhc3NEYXR1bTsKKwlEYXR1 bQkJaW5kb3B0aW9uRGF0dW07CisJYm9vbAkJaXNudWxsOworCW9pZHZlY3RvciAgKmluZGNvbGxh dGlvbjsKKwlvaWR2ZWN0b3IgICppbmRjbGFzczsKKwlpbnQydmVjdG9yICppbmRvcHRpb247CisJ U3RyaW5nSW5mb0RhdGEgZGVmaW5pdGlvbkJ1ZjsKKwljaGFyCSAgICpzZXA7CisKKwkvKgorCSAq IEZldGNoIHRoZSBwZ19pbmRleCB0dXBsZSBieSB0aGUgT2lkIG9mIHRoZSBpbmRleAorCSAqLwor CWh0X2lkeCA9IFNlYXJjaFN5c0NhY2hlMShJTkRFWFJFTElELCBPYmplY3RJZEdldERhdHVtKGlu ZGV4cmVsaWQpKTsKKwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoaHRfaWR4KSkKKwkJZWxvZyhFUlJP UiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIGluZGV4ICV1IiwgaW5kZXhyZWxpZCk7CisJaWR4 cmVjID0gKEZvcm1fcGdfaW5kZXgpIEdFVFNUUlVDVChodF9pZHgpOworCisJaW5kcmVsaWQgPSBp ZHhyZWMtPmluZHJlbGlkOworCUFzc2VydChpbmRleHJlbGlkID09IGlkeHJlYy0+aW5kZXhyZWxp ZCk7CisKKwkvKiBNdXN0IGdldCBpbmRjb2xsYXRpb24sIGluZGNsYXNzLCBhbmQgaW5kb3B0aW9u IHRoZSBoYXJkIHdheSAqLworCWluZGNvbGxEYXR1bSA9IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJF TElELCBodF9pZHgsCisJCQkJCQkJCSAgIEFudW1fcGdfaW5kZXhfaW5kY29sbGF0aW9uLCAmaXNu dWxsKTsKKwlBc3NlcnQoIWlzbnVsbCk7CisJaW5kY29sbGF0aW9uID0gKG9pZHZlY3RvciAqKSBE YXR1bUdldFBvaW50ZXIoaW5kY29sbERhdHVtKTsKKworCWluZGNsYXNzRGF0dW0gPSBTeXNDYWNo ZUdldEF0dHIoSU5ERVhSRUxJRCwgaHRfaWR4LAorCQkJCQkJCQkJQW51bV9wZ19pbmRleF9pbmRj bGFzcywgJmlzbnVsbCk7CisJQXNzZXJ0KCFpc251bGwpOworCWluZGNsYXNzID0gKG9pZHZlY3Rv ciAqKSBEYXR1bUdldFBvaW50ZXIoaW5kY2xhc3NEYXR1bSk7CisKKwlpbmRvcHRpb25EYXR1bSA9 IFN5c0NhY2hlR2V0QXR0cihJTkRFWFJFTElELCBodF9pZHgsCisJCQkJCQkJCQkgQW51bV9wZ19p bmRleF9pbmRvcHRpb24sICZpc251bGwpOworCUFzc2VydCghaXNudWxsKTsKKwlpbmRvcHRpb24g PSAoaW50MnZlY3RvciAqKSBEYXR1bUdldFBvaW50ZXIoaW5kb3B0aW9uRGF0dW0pOworCisJLyoK KwkgKiBGZXRjaCB0aGUgcGdfY2xhc3MgdHVwbGUgb2YgdGhlIGluZGV4IHJlbGF0aW9uCisJICov CisJaHRfaWR4cmVsID0gU2VhcmNoU3lzQ2FjaGUxKFJFTE9JRCwgT2JqZWN0SWRHZXREYXR1bShp bmRleHJlbGlkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKGh0X2lkeHJlbCkpCisJCWVsb2co RVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciByZWxhdGlvbiAldSIsIGluZGV4cmVsaWQp OworCWlkeHJlbHJlYyA9IChGb3JtX3BnX2NsYXNzKSBHRVRTVFJVQ1QoaHRfaWR4cmVsKTsKKwor CisJLyoKKwkgKiBGZXRjaCB0aGUgcGdfYW0gdHVwbGUgb2YgdGhlIGluZGV4JyBhY2Nlc3MgbWV0 aG9kCisJICovCisJaHRfYW0gPSBTZWFyY2hTeXNDYWNoZTEoQU1PSUQsIE9iamVjdElkR2V0RGF0 dW0oaWR4cmVscmVjLT5yZWxhbSkpOworCWlmICghSGVhcFR1cGxlSXNWYWxpZChodF9hbSkpCisJ CWVsb2coRVJST1IsICJjYWNoZSBsb29rdXAgZmFpbGVkIGZvciBhY2Nlc3MgbWV0aG9kICV1IiwK KwkJCSBpZHhyZWxyZWMtPnJlbGFtKTsKKwlhbXJlYyA9IChGb3JtX3BnX2FtKSBHRVRTVFJVQ1Qo aHRfYW0pOworCisJLyoKKwkgKiBHZXQgdGhlIGluZGV4IGV4cHJlc3Npb25zLCBpZiBhbnkuICAo Tk9URTogd2UgZG8gbm90IHVzZSB0aGUgcmVsY2FjaGUKKwkgKiB2ZXJzaW9ucyBvZiB0aGUgZXhw cmVzc2lvbnMgYW5kIHByZWRpY2F0ZSwgYmVjYXVzZSB3ZSB3YW50IHRvIGRpc3BsYXkKKwkgKiBu b24tY29uc3QtZm9sZGVkIGV4cHJlc3Npb25zLikKKwkgKi8KKwlpZiAoIWhlYXBfYXR0aXNudWxs KGh0X2lkeCwgQW51bV9wZ19pbmRleF9pbmRleHBycywgTlVMTCkpCisJeworCQlEYXR1bQkJZXhw cnNEYXR1bTsKKwkJYm9vbAkJaXNudWxsOworCQljaGFyCSAgICpleHByc1N0cmluZzsKKworCQll eHByc0RhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0X2lkeCwKKwkJCQkJCQkJ CSBBbnVtX3BnX2luZGV4X2luZGV4cHJzLCAmaXNudWxsKTsKKwkJQXNzZXJ0KCFpc251bGwpOwor CQlleHByc1N0cmluZyA9IFRleHREYXR1bUdldENTdHJpbmcoZXhwcnNEYXR1bSk7CisJCWluZGV4 cHJzID0gKExpc3QgKikgc3RyaW5nVG9Ob2RlKGV4cHJzU3RyaW5nKTsKKwkJcGZyZWUoZXhwcnNT dHJpbmcpOworCX0KKwllbHNlCisJCWluZGV4cHJzID0gTklMOworCisJaW5kZXhwcl9pdGVtID0g bGlzdF9oZWFkKGluZGV4cHJzKTsKKworCWNvbnRleHQgPSBkZXBhcnNlX2NvbnRleHRfZm9yKGdl dF9yZWxfbmFtZShpbmRyZWxpZCksIGluZHJlbGlkKTsKKworCWluaXRTdHJpbmdJbmZvKCZkZWZp bml0aW9uQnVmKTsKKworCS8qIG91dHB1dCBpbmRleCBBTSAqLworCSppbmRleF9hbSA9IHBzdHJk dXAocXVvdGVfaWRlbnRpZmllcihOYW1lU3RyKGFtcmVjLT5hbW5hbWUpKSk7CisKKwkvKiBGZXRj aCB0aGUgaW5kZXggQU0ncyBBUEkgc3RydWN0ICovCisJYW1yb3V0aW5lID0gR2V0SW5kZXhBbVJv dXRpbmUoYW1yZWMtPmFtaGFuZGxlcik7CisKKwkvKgorCSAqIE91dHB1dCBpbmRleCBkZWZpbml0 aW9uLiAgTm90ZSB0aGUgb3V0ZXIgcGFyZW5zIG11c3QgYmUgc3VwcGxpZWQgYnkKKwkgKiBjYWxs ZXIuCisJICovCisJc2VwID0gIiI7CisJZm9yIChrZXlubyA9IDA7IGtleW5vIDwgaWR4cmVjLT5p bmRuYXR0czsga2V5bm8rKykKKwl7CisJCUF0dHJOdW1iZXIJYXR0bnVtID0gaWR4cmVjLT5pbmRr ZXkudmFsdWVzW2tleW5vXTsKKwkJaW50MTYJCW9wdCA9IGluZG9wdGlvbi0+dmFsdWVzW2tleW5v XTsKKwkJT2lkCQkJa2V5Y29sdHlwZTsKKwkJT2lkCQkJa2V5Y29sY29sbGF0aW9uOworCQlPaWQJ CQlpbmRjb2xsOworCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsIHNl cCk7CisJCXNlcCA9ICIsICI7CisKKwkJaWYgKGF0dG51bSAhPSAwKQorCQl7CisJCQkvKiBTaW1w bGUgaW5kZXggY29sdW1uICovCisJCQljaGFyCSAgICphdHRuYW1lOworCQkJaW50MzIJCWtleWNv bHR5cG1vZDsKKworCQkJYXR0bmFtZSA9IGdldF9hdHRuYW1lKGluZHJlbGlkLCBhdHRudW0sIGZh bHNlKTsKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoJmRlZmluaXRpb25CdWYsIHF1b3RlX2lk ZW50aWZpZXIoYXR0bmFtZSkpOworCQkJZ2V0X2F0dHR5cGV0eXBtb2Rjb2xsKGluZHJlbGlkLCBh dHRudW0sCisJCQkJCQkJCSAgJmtleWNvbHR5cGUsICZrZXljb2x0eXBtb2QsCisJCQkJCQkJCSAg JmtleWNvbGNvbGxhdGlvbik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBleHByZXNzaW9uYWwg aW5kZXggKi8KKwkJCU5vZGUJICAgKmluZGV4a2V5OworCQkJY2hhcgkgICAqc3RyOworCisJCQlp ZiAoaW5kZXhwcl9pdGVtID09IE5VTEwpCisJCQkJZWxvZyhFUlJPUiwgInRvbyBmZXcgZW50cmll cyBpbiBpbmRleHBycyBsaXN0Iik7CisJCQlpbmRleGtleSA9IChOb2RlICopIGxmaXJzdChpbmRl eHByX2l0ZW0pOworCQkJaW5kZXhwcl9pdGVtID0gbG5leHQoaW5kZXhwcnMsIGluZGV4cHJfaXRl bSk7CisJCQkvKiBEZXBhcnNlICovCisJCQlzdHIgPSBkZXBhcnNlX2V4cHJlc3Npb24oaW5kZXhr ZXksIGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisKKwkJCS8qIE5lZWQgcGFyZW5zIGlmIGl0J3Mg bm90IGEgYmFyZSBmdW5jdGlvbiBjYWxsICovCisJCQlpZiAoaW5kZXhrZXkgJiYgSXNBKGluZGV4 a2V5LCBGdW5jRXhwcikgJiYKKwkJCQkoKEZ1bmNFeHByICopIGluZGV4a2V5KS0+ZnVuY2Zvcm1h dCA9PSBDT0VSQ0VfRVhQTElDSVRfQ0FMTCkKKwkJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKCZk ZWZpbml0aW9uQnVmLCBzdHIpOworCQkJZWxzZQorCQkJCWFwcGVuZFN0cmluZ0luZm8oJmRlZmlu aXRpb25CdWYsICIoJXMpIiwgc3RyKTsKKworCQkJa2V5Y29sdHlwZSA9IGV4cHJUeXBlKGluZGV4 a2V5KTsKKwkJCWtleWNvbGNvbGxhdGlvbiA9IGV4cHJDb2xsYXRpb24oaW5kZXhrZXkpOworCQl9 CisKKwkJLyogQWRkIGNvbGxhdGlvbiwgZXZlbiBpZiBkZWZhdWx0ICovCisJCWluZGNvbGwgPSBp bmRjb2xsYXRpb24tPnZhbHVlc1trZXlub107CisJCWlmIChPaWRJc1ZhbGlkKGluZGNvbGwpKQor CQkJYXBwZW5kU3RyaW5nSW5mbygmZGVmaW5pdGlvbkJ1ZiwgIiBDT0xMQVRFICVzIiwKKwkJCQkJ CQkgZ2VuZXJhdGVfY29sbGF0aW9uX25hbWUoKGluZGNvbGwpKSk7CisKKwkJLyogQWRkIHRoZSBv cGVyYXRvciBjbGFzcyBuYW1lLCBldmVuIGlmIGRlZmF1bHQgKi8KKwkJZ2V0X29wY2xhc3NfbmFt ZShpbmRjbGFzcy0+dmFsdWVzW2tleW5vXSwgSW52YWxpZE9pZCwgJmRlZmluaXRpb25CdWYpOwor CisJCS8qIEFkZCBvcHRpb25zIGlmIHJlbGV2YW50ICovCisJCWlmIChhbXJvdXRpbmUtPmFtY2Fu b3JkZXIpCisJCXsKKwkJCS8qIGlmIGl0IHN1cHBvcnRzIHNvcnQgb3JkZXJpbmcsIHJlcG9ydCBE RVNDIGFuZCBOVUxMUyBvcHRzICovCisJCQlpZiAob3B0ICYgSU5ET1BUSU9OX0RFU0MpCisJCQl7 CisJCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBERVNDIik7CisJ CQkJLyogTlVMTFMgRklSU1QgaXMgdGhlIGRlZmF1bHQgaW4gdGhpcyBjYXNlICovCisJCQkJaWYg KCEob3B0ICYgSU5ET1BUSU9OX05VTExTX0ZJUlNUKSkKKwkJCQkJYXBwZW5kU3RyaW5nSW5mb1N0 cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBOVUxMUyBMQVNUIik7CisJCQl9CisJCQllbHNlCisJCQl7 CisJCQkJaWYgKG9wdCAmIElORE9QVElPTl9OVUxMU19GSVJTVCkKKwkJCQkJYXBwZW5kU3RyaW5n SW5mb1N0cmluZygmZGVmaW5pdGlvbkJ1ZiwgIiBOVUxMUyBGSVJTVCIpOworCQkJfQorCQl9CisK KwkJLyogWFhYIGV4Y2x1ZGVPcHMgdGhpbmd5IHdhcyBoZXJlOyBkbyB3ZSBuZWVkIGFueXRoaW5n PyAqLworCX0KKwkqZGVmaW5pdGlvbiA9IGRlZmluaXRpb25CdWYuZGF0YTsKKworCS8qIG91dHB1 dCByZWxvcHRpb25zICovCisJKnJlbG9wdGlvbnMgPSBmbGF0dGVuX3JlbG9wdGlvbnMoaW5kZXhy ZWxpZCk7CisKKwkvKiBvdXRwdXQgdGFibGVzcGFjZSAqLworCXsKKwkJT2lkCQkJdGJsc3BjOwor CisJCXRibHNwYyA9IGdldF9yZWxfdGFibGVzcGFjZShpbmRleHJlbGlkKTsKKwkJaWYgKE9pZElz VmFsaWQodGJsc3BjKSkKKwkJCSp0YWJsZXNwYWNlID0gcHN0cmR1cChxdW90ZV9pZGVudGlmaWVy KGdldF90YWJsZXNwYWNlX25hbWUodGJsc3BjKSkpOworCQllbHNlCisJCQkqdGFibGVzcGFjZSA9 IE5VTEw7CisJfQorCisJLyogcmVwb3J0IGluZGV4IHByZWRpY2F0ZSwgaWYgYW55ICovCisJaWYg KCFoZWFwX2F0dGlzbnVsbChodF9pZHgsIEFudW1fcGdfaW5kZXhfaW5kcHJlZCwgTlVMTCkpCisJ eworCQlOb2RlCSAgICpub2RlOworCQlEYXR1bQkJcHJlZERhdHVtOworCQlib29sCQlpc251bGw7 CisJCWNoYXIJICAgKnByZWRTdHJpbmc7CisKKwkJLyogQ29udmVydCB0ZXh0IHN0cmluZyB0byBu b2RlIHRyZWUgKi8KKwkJcHJlZERhdHVtID0gU3lzQ2FjaGVHZXRBdHRyKElOREVYUkVMSUQsIGh0 X2lkeCwKKwkJCQkJCQkJCUFudW1fcGdfaW5kZXhfaW5kcHJlZCwgJmlzbnVsbCk7CisJCUFzc2Vy dCghaXNudWxsKTsKKwkJcHJlZFN0cmluZyA9IFRleHREYXR1bUdldENTdHJpbmcocHJlZERhdHVt KTsKKwkJbm9kZSA9IChOb2RlICopIHN0cmluZ1RvTm9kZShwcmVkU3RyaW5nKTsKKwkJcGZyZWUo cHJlZFN0cmluZyk7CisKKwkJLyogRGVwYXJzZSAqLworCQkqd2hlcmVDbGF1c2UgPQorCQkJZGVw YXJzZV9leHByZXNzaW9uKG5vZGUsIGNvbnRleHQsIGZhbHNlLCBmYWxzZSk7CisJfQorCWVsc2UK KwkJKndoZXJlQ2xhdXNlID0gTlVMTDsKKworCS8qIENsZWFuIHVwICovCisJUmVsZWFzZVN5c0Nh Y2hlKGh0X2lkeCk7CisJUmVsZWFzZVN5c0NhY2hlKGh0X2lkeHJlbCk7CisJUmVsZWFzZVN5c0Nh Y2hlKGh0X2FtKTsKKworCS8qIGFsbCBkb25lICovCit9CisKKy8qCisgKiBkZXBhcnNlX0luZGV4 U3RtdAorICoJCWRlcGFyc2UgYW4gSW5kZXhTdG10CisgKgorICogR2l2ZW4gYW4gaW5kZXggT0lE IGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUKKyAq IHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBJZiB0aGUgaW5kZXgg Y29ycmVzcG9uZHMgdG8gYSBjb25zdHJhaW50LCBOVUxMIGlzIHJldHVybmVkLgorICovCitzdGF0 aWMgT2JqVHJlZSAqCitkZXBhcnNlX0luZGV4U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNl dHJlZSkKK3sKKwlJbmRleFN0bXQgICpub2RlID0gKEluZGV4U3RtdCAqKSBwYXJzZXRyZWU7CisJ T2JqVHJlZQkgICAqaW5kZXhTdG10OworCU9ialRyZWUJICAgKnRtcDsKKwlSZWxhdGlvbglpZHhy ZWw7CisJUmVsYXRpb24JaGVhcHJlbDsKKwljaGFyCSAgICppbmRleF9hbTsKKwljaGFyCSAgICpk ZWZpbml0aW9uOworCWNoYXIJICAgKnJlbG9wdGlvbnM7CisJY2hhcgkgICAqdGFibGVzcGFjZTsK KwljaGFyCSAgICp3aGVyZUNsYXVzZTsKKworCWlmIChub2RlLT5wcmltYXJ5IHx8IG5vZGUtPmlz Y29uc3RyYWludCkKKwl7CisJCS8qCisJCSAqIGluZGV4ZXMgZm9yIFBSSU1BUlkgS0VZIGFuZCBv dGhlciBjb25zdHJhaW50cyBhcmUgb3V0cHV0CisJCSAqIHNlcGFyYXRlbHk7IHJldHVybiBlbXB0 eSBoZXJlLgorCQkgKi8KKwkJcmV0dXJuIE5VTEw7CisJfQorCisJaWR4cmVsID0gcmVsYXRpb25f b3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwloZWFwcmVsID0gcmVsYXRpb25fb3Bl bihpZHhyZWwtPnJkX2luZGV4LT5pbmRyZWxpZCwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXBnX2dl dF9pbmRleGRlZl9kZXRhaWxlZChvYmplY3RJZCwKKwkJCQkJCQkgJmluZGV4X2FtLCAmZGVmaW5p dGlvbiwgJnJlbG9wdGlvbnMsCisJCQkJCQkJICZ0YWJsZXNwYWNlLCAmd2hlcmVDbGF1c2UpOwor CisJaW5kZXhTdG10ID0KKwkJbmV3X29ianRyZWVfVkEoIkNSRUFURSAle3VuaXF1ZX1zIElOREVY ICV7Y29uY3VycmVudGx5fXMgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgIgorCQkJCQkgICAi T04gJXt0YWJsZX1EIFVTSU5HICV7aW5kZXhfYW19cyAoJXtkZWZpbml0aW9ufXMpICIKKwkJCQkJ ICAgIiV7d2l0aH1zICV7dGFibGVzcGFjZX1zICV7d2hlcmVfY2xhdXNlfXMiLAorCQkJCQkgICA2 LAorCQkJCQkgICAidW5pcXVlIiwgT2JqVHlwZVN0cmluZywgbm9kZS0+dW5pcXVlID8gIlVOSVFV RSIgOiAiIiwKKwkJCQkJICAgImNvbmN1cnJlbnRseSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCSAg IG5vZGUtPmNvbmN1cnJlbnQgPyAiQ09OQ1VSUkVOVExZIiA6ICIiLAorCQkJCQkgICAiaWZfbm90 X2V4aXN0cyIsIE9ialR5cGVTdHJpbmcsIG5vZGUtPmlmX25vdF9leGlzdHMgPyAiSUYgTk9UIEVY SVNUUyIgOiAiIiwKKwkJCQkJICAgIm5hbWUiLCBPYmpUeXBlU3RyaW5nLCBSZWxhdGlvbkdldFJl bGF0aW9uTmFtZShpZHhyZWwpLAorCQkJCQkgICAiZGVmaW5pdGlvbiIsIE9ialR5cGVTdHJpbmcs IGRlZmluaXRpb24sCisJCQkJCSAgICJpbmRleF9hbSIsIE9ialR5cGVTdHJpbmcsIGluZGV4X2Ft KTsKKworCXRtcCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShoZWFwcmVsLT5yZF9yZWwtPnJl bG5hbWVzcGFjZSwKKwkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaGVhcHJlbCkp OworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGluZGV4U3RtdCwgInRhYmxlIiwgdG1wKTsKKworCS8q IHJlbG9wdGlvbnMgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiV0lUSCAoJXtvcHRzfXMpIiwg MCk7CisJaWYgKHJlbG9wdGlvbnMpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgIm9wdHMi LCByZWxvcHRpb25zKTsKKwllbHNlCisJCWFwcGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50 IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGluZGV4U3RtdCwgIndpdGgiLCB0bXAp OworCisJLyogdGFibGVzcGFjZSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJUQUJMRVNQQUNF ICV7dGFibGVzcGFjZX1zIiwgMCk7CisJaWYgKHRhYmxlc3BhY2UpCisJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHRtcCwgInRhYmxlc3BhY2UiLCB0YWJsZXNwYWNlKTsKKwllbHNlCisJCWFwcGVuZF9i b29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCWFwcGVuZF9vYmplY3Rfb2JqZWN0 KGluZGV4U3RtdCwgInRhYmxlc3BhY2UiLCB0bXApOworCisJLyogV0hFUkUgY2xhdXNlICovCisJ dG1wID0gbmV3X29ianRyZWVfVkEoIldIRVJFICV7d2hlcmV9cyIsIDApOworCWlmICh3aGVyZUNs YXVzZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAid2hlcmUiLCB3aGVyZUNsYXVzZSk7 CisJZWxzZQorCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKwlh cHBlbmRfb2JqZWN0X29iamVjdChpbmRleFN0bXQsICJ3aGVyZV9jbGF1c2UiLCB0bXApOworCisJ dGFibGVfY2xvc2UoaWR4cmVsLCBBY2Nlc3NTaGFyZUxvY2spOworCXRhYmxlX2Nsb3NlKGhlYXBy ZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlyZXR1cm4gaW5kZXhTdG10OworfQorCisvKgorICog ZGVwYXJzZV9DcmVhdGVTdG10CisgKgkJRGVwYXJzZSBhIENyZWF0ZVN0bXQgKENSRUFURSBUQUJM RSkKKyAqCisgKiBHaXZlbiBhIHRhYmxlIE9JRCBhbmQgdGhlIHBhcnNldHJlZSB0aGF0IGNyZWF0 ZWQgaXQsIHJldHVybiBhbiBPYmpUcmVlCisgKiByZXByZXNlbnRpbmcgdGhlIGNyZWF0aW9uIGNv bW1hbmQuCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlU3RtdChPaWQgb2Jq ZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVTdG10ICpub2RlID0gKENyZWF0ZVN0 bXQgKikgcGFyc2V0cmVlOworCVJlbGF0aW9uCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihvYmpl Y3RJZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlMaXN0CSAgICpkcGNvbnRleHQ7CisJT2JqVHJlZQkq Y3JlYXRlU3RtdDsKKwlPYmpUcmVlCSp0bXA7CisJTGlzdAkgICAqbGlzdDsKKwlMaXN0Q2VsbCAg ICpjZWxsOworCWNoYXIJICAgKmZtdHN0cjsKKworCS8qCisJICogVHlwZWQgdGFibGVzIHVzZSBh IHNsaWdodGx5IGRpZmZlcmVudCBmb3JtYXQgc3RyaW5nOiB3ZSBtdXN0IG5vdCBwdXQKKwkgKiB0 YWJsZV9lbGVtZW50cyB3aXRoIHBhcmVudHMgZGlyZWN0bHkgaW4gdGhlIGZtdCBzdHJpbmcsIGJl Y2F1c2UgaWYKKwkgKiB0aGVyZSBhcmUgbm8gb3B0aW9ucyB0aGUgcGFyZW5zIG11c3Qgbm90IGJl IGVtaXR0ZWQ7IGFuZCBhbHNvLCB0eXBlZAorCSAqIHRhYmxlcyBkbyBub3QgYWxsb3cgZm9yIGlu aGVyaXRhbmNlLgorCSAqLworCWlmIChub2RlLT5vZlR5cGVuYW1lKQorCQlmbXRzdHIgPSAiQ1JF QVRFICV7cGVyc2lzdGVuY2V9cyBUQUJMRSAle2lmX25vdF9leGlzdHN9cyAle2lkZW50aXR5fUQg IgorCQkJIk9GICV7b2ZfdHlwZX1UICV7dGFibGVfZWxlbWVudHN9cyAiCisJCQkiJXtwYXJ0aXRp b25fYnl9cyAle2FjY2Vzc19tZXRob2R9cyAiCisJCQkiJXt3aXRoX2NsYXVzZX1zICV7b25fY29t bWl0fXMgJXt0YWJsZXNwYWNlfXMiOworCWVsc2UgaWYgKG5vZGUtPnBhcnRib3VuZCkKKwkJZm10 c3RyID0gIkNSRUFURSAle3BlcnNpc3RlbmNlfXMgVEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtp ZGVudGl0eX1EICIKKwkJCSJQQVJUSVRJT04gT0YgJXtwYXJlbnRfaWRlbnRpdHl9RCAle3RhYmxl X2VsZW1lbnRzfXMgIgorCQkJIiV7cGFydGl0aW9uX2J5fXMgJXthY2Nlc3NfbWV0aG9kfXMgIgor CQkJIiV7d2l0aF9jbGF1c2V9cyAle29uX2NvbW1pdH1zICV7dGFibGVzcGFjZX1zICV7cGFydGl0 aW9uX2JvdW5kfXMiOworCWVsc2UKKwkJZm10c3RyID0gIkNSRUFURSAle3BlcnNpc3RlbmNlfXMg VEFCTEUgJXtpZl9ub3RfZXhpc3RzfXMgJXtpZGVudGl0eX1EICIKKwkJCSIoJXt0YWJsZV9lbGVt ZW50czosIH1zKSAle2luaGVyaXRzfXMgIgorCQkJIiV7cGFydGl0aW9uX2J5fXMgJXthY2Nlc3Nf bWV0aG9kfXMgIgorCQkJIiV7d2l0aF9jbGF1c2V9cyAle29uX2NvbW1pdH1zICV7dGFibGVzcGFj ZX1zIjsKKworCWNyZWF0ZVN0bXQgPQorCQluZXdfb2JqdHJlZV9WQShmbXRzdHIsIDEsCisJCQkJ CSAgICJwZXJzaXN0ZW5jZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCSAgIGdldF9wZXJzaXN0ZW5j ZV9zdHIocmVsYXRpb24tPnJkX3JlbC0+cmVscGVyc2lzdGVuY2UpKTsKKworCXRtcCA9IG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZShyZWxhdGlvbi0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJ CQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKHJlbGF0aW9uKSk7CisJYXBwZW5kX29iamVj dF9vYmplY3QoY3JlYXRlU3RtdCwgImlkZW50aXR5IiwgdG1wKTsKKworCWFwcGVuZF9zdHJpbmdf b2JqZWN0KGNyZWF0ZVN0bXQsICJpZl9ub3RfZXhpc3RzIiwKKwkJCQkJCSBub2RlLT5pZl9ub3Rf ZXhpc3RzID8gIklGIE5PVCBFWElTVFMiIDogIiIpOworCisJZHBjb250ZXh0ID0gZGVwYXJzZV9j b250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWxhdGlvbiksCisJCQkJCQkJCQlv YmplY3RJZCk7CisKKwlpZiAobm9kZS0+b2ZUeXBlbmFtZSB8fCBub2RlLT5wYXJ0Ym91bmQpCisJ eworCQlMaXN0CSAgICp0YWJsZWVsdHMgPSBOSUw7CisKKwkJLyoKKwkJICogV2UgY2FuJ3QgcHV0 IHRhYmxlIGVsZW1lbnRzIGRpcmVjdGx5IGluIHRoZSBmbXQgc3RyaW5nIGFzIGFuIGFycmF5CisJ CSAqIHN1cnJvdW5kZWQgYnkgcGFyZW5zIGhlcmUsIGJlY2F1c2UgYW4gZW1wdHkgY2xhdXNlIHdv dWxkIGNhdXNlIGEKKwkJICogc3ludGF4IGVycm9yLiAgVGhlcmVmb3JlLCB3ZSB1c2UgYW4gaW5k aXJlY3Rpb24gZWxlbWVudCBhbmQgc2V0CisJCSAqIHByZXNlbnQ9ZmFsc2Ugd2hlbiB0aGVyZSBh cmUgbm8gZWxlbWVudHMuCisJCSAqLworCQlpZiAobm9kZS0+b2ZUeXBlbmFtZSkKKwkJeworCQkJ YXBwZW5kX3N0cmluZ19vYmplY3QoY3JlYXRlU3RtdCwgInRhYmxlX2tpbmQiLCAidHlwZWQiKTsK KworCQkJdG1wID0gbmV3X29ianRyZWVfZm9yX3R5cGUocmVsYXRpb24tPnJkX3JlbC0+cmVsb2Z0 eXBlLCAtMSk7CisJCQlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTdG10LCAib2ZfdHlwZSIs IHRtcCk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlMaXN0CSAqcGFyZW50czsKKwkJCU9iakVsZW0J ICplbGVtOworCisJCQlwYXJlbnRzID0gZGVwYXJzZV9JbmhSZWxhdGlvbnMob2JqZWN0SWQpOwor CQkJZWxlbSA9IChPYmpFbGVtICopIGxpbml0aWFsKHBhcmVudHMpOworCisJCQlBc3NlcnQobGlz dF9sZW5ndGgocGFyZW50cykgPT0gMSk7CisKKwkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0 ZVN0bXQsICJ0YWJsZV9raW5kIiwgInBhcnRpdGlvbiIpOworCisJCQlhcHBlbmRfb2JqZWN0X29i amVjdChjcmVhdGVTdG10LCAicGFyZW50X2lkZW50aXR5IiwKKwkJCQkJCQkJIGVsZW0tPnZhbHVl Lm9iamVjdCk7CisJCX0KKworCQl0YWJsZWVsdHMgPSBkZXBhcnNlVGFibGVFbGVtZW50cyhyZWxh dGlvbiwgbm9kZS0+dGFibGVFbHRzLCBkcGNvbnRleHQsCisJCQkJCQkJCQkJIHRydWUsCQkvKiB0 eXBlZCB0YWJsZSAqLworCQkJCQkJCQkJCSBmYWxzZSk7CS8qIG5vdCBjb21wb3NpdGUgKi8KKwkJ dGFibGVlbHRzID0gb2J0YWluQ29uc3RyYWludHModGFibGVlbHRzLCBvYmplY3RJZCwgSW52YWxp ZE9pZCk7CisJCWlmICh0YWJsZWVsdHMgPT0gTklMKQorCQkJdG1wID0gbmV3X29ianRyZWVfVkEo IiIsIDEsCisJCQkJCQkJCSAicHJlc2VudCIsIE9ialR5cGVCb29sLCBmYWxzZSk7CisJCWVsc2UK KwkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCIoJXtlbGVtZW50czosIH1zKSIsIDEsCisJCQkJCQkJ CSAiZWxlbWVudHMiLCBPYmpUeXBlQXJyYXksIHRhYmxlZWx0cyk7CisJCWFwcGVuZF9vYmplY3Rf b2JqZWN0KGNyZWF0ZVN0bXQsICJ0YWJsZV9lbGVtZW50cyIsIHRtcCk7CisJfQorCWVsc2UKKwl7 CisJCUxpc3QJICAgKnRhYmxlZWx0cyA9IE5JTDsKKworCQkvKgorCQkgKiBUaGVyZSBpcyBubyBu ZWVkIHRvIHByb2Nlc3MgTElLRSBjbGF1c2VzIHNlcGFyYXRlbHk7IHRoZXkgaGF2ZQorCQkgKiBh bHJlYWR5IGJlZW4gdHJhbnNmb3JtZWQgaW50byBjb2x1bW5zIGFuZCBjb25zdHJhaW50cy4KKwkJ ICovCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KGNyZWF0ZVN0bXQsICJ0YWJsZV9raW5kIiwgInBs YWluIik7CisKKwkJLyoKKwkJICogUHJvY2VzcyB0YWJsZSBlbGVtZW50czogY29sdW1uIGRlZmlu aXRpb25zIGFuZCBjb25zdHJhaW50cy4JT25seQorCQkgKiB0aGUgY29sdW1uIGRlZmluaXRpb25z IGFyZSBvYnRhaW5lZCBmcm9tIHRoZSBwYXJzZSBub2RlIGl0c2VsZi4JVG8KKwkJICogZ2V0IGNv bnN0cmFpbnRzIHdlIHJlbHkgb24gcGdfY29uc3RyYWludCwgYmVjYXVzZSB0aGUgcGFyc2Ugbm9k ZQorCQkgKiBtaWdodCBiZSBtaXNzaW5nIHNvbWUgdGhpbmdzIHN1Y2ggYXMgdGhlIG5hbWUgb2Yg dGhlIGNvbnN0cmFpbnRzLgorCQkgKi8KKwkJdGFibGVlbHRzID0gZGVwYXJzZVRhYmxlRWxlbWVu dHMocmVsYXRpb24sIG5vZGUtPnRhYmxlRWx0cywgZHBjb250ZXh0LAorCQkJCQkJCQkJCSBmYWxz ZSwJCS8qIG5vdCB0eXBlZCB0YWJsZSAqLworCQkJCQkJCQkJCSBmYWxzZSk7CS8qIG5vdCBjb21w b3NpdGUgKi8KKwkJdGFibGVlbHRzID0gb2J0YWluQ29uc3RyYWludHModGFibGVlbHRzLCBvYmpl Y3RJZCwgSW52YWxpZE9pZCk7CisKKwkJYXBwZW5kX2FycmF5X29iamVjdChjcmVhdGVTdG10LCAi dGFibGVfZWxlbWVudHMiLCB0YWJsZWVsdHMpOworCisJCS8qCisJCSAqIEFkZCBpbmhlcml0YW5j ZSBzcGVjaWZpY2F0aW9uLiAgV2UgY2Fubm90IHNpbXBseSBzY2FuIHRoZSBsaXN0IG9mCisJCSAq IHBhcmVudHMgZnJvbSB0aGUgcGFyc2VyIG5vZGUsIGJlY2F1c2UgdGhhdCBtYXkgbGFjayB0aGUg YWN0dWFsCisJCSAqIHF1YWxpZmllZCBuYW1lcyBvZiB0aGUgcGFyZW50IHJlbGF0aW9ucy4gIFJh dGhlciB0aGFuIHRyeWluZyB0bworCQkgKiByZS1yZXNvbHZlIHRoZW0gZnJvbSB0aGUgaW5mb3Jt YXRpb24gaW4gdGhlIHBhcnNlIG5vZGUsIGl0IHNlZW1zCisJCSAqIG1vcmUgYWNjdXJhdGUgYW5k IGNvbnZlbmllbnQgdG8gZ3JhYiBpdCBmcm9tIHBnX2luaGVyaXRzLgorCQkgKi8KKwkJdG1wID0g bmV3X29ianRyZWVfVkEoIklOSEVSSVRTICgle3BhcmVudHM6LCB9RCkiLCAwKTsKKwkJaWYgKGxp c3RfbGVuZ3RoKG5vZGUtPmluaFJlbGF0aW9ucykgPiAwKQorCQkJYXBwZW5kX2FycmF5X29iamVj dCh0bXAsICJwYXJlbnRzIiwgZGVwYXJzZV9JbmhSZWxhdGlvbnMob2JqZWN0SWQpKTsKKwkJZWxz ZQorCQl7CisJCQlhcHBlbmRfbnVsbF9vYmplY3QodG1wLCAicGFyZW50cyIpOworCQkJYXBwZW5k X2Jvb2xfb2JqZWN0KHRtcCwgInByZXNlbnQiLCBmYWxzZSk7CisJCX0KKwkJYXBwZW5kX29iamVj dF9vYmplY3QoY3JlYXRlU3RtdCwgImluaGVyaXRzIiwgdG1wKTsKKwl9CisKKwl0bXAgPSBuZXdf b2JqdHJlZV9WQSgiVEFCTEVTUEFDRSAle3RhYmxlc3BhY2V9SSIsIDApOworCWlmIChub2RlLT50 YWJsZXNwYWNlbmFtZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wLCAidGFibGVzcGFjZSIs IG5vZGUtPnRhYmxlc3BhY2VuYW1lKTsKKwllbHNlCisJeworCQlhcHBlbmRfbnVsbF9vYmplY3Qo dG1wLCAidGFibGVzcGFjZSIpOworCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wLCAicHJlc2VudCIs IGZhbHNlKTsKKwl9CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgInRhYmxlc3Bh Y2UiLCB0bXApOworCisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU3RtdCwgIm9uX2NvbW1p dCIsCisJCQkJCQkgZGVwYXJzZV9PbkNvbW1pdENsYXVzZShub2RlLT5vbmNvbW1pdCkpOworCisJ LyogRk9SIFZBTFVFUyBjbGF1c2UgKi8KKwlpZiAobm9kZS0+cGFydGJvdW5kKQorCXsKKwkJLyoK KwkJICogR2V0IHBnX2NsYXNzLnJlbHBhcnRib3VuZC4gV2UgY2Fubm90IHVzZSBwYXJ0Ym91bmQg aW4gdGhlCisJCSAqIHBhcnNldHJlZSBkaXJlY3RseSBhcyBpdCdzIHRoZSBvcmlnaW5hbCBwYXJ0 Ym91bmQgZXhwcmVzc2lvbgorCQkgKiB3aGljaCBoYXZlbid0IGJlZW4gdHJhbnNmb3JtZWQuCisJ CSAqLworCQlhcHBlbmRfc3RyaW5nX29iamVjdChjcmVhdGVTdG10LCAicGFydGl0aW9uX2JvdW5k IiwKKwkJCQkJCQkgUmVsYXRpb25HZXRQYXJ0aXRpb25Cb3VuZChvYmplY3RJZCkpOworCX0KKwor CS8qIFBBUlRJVElPTiBCWSBjbGF1c2UgKi8KKwl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUEFSVElU SU9OIEJZICV7ZGVmaW5pdGlvbn1zIiwgMCk7CisJaWYgKHJlbGF0aW9uLT5yZF9yZWwtPnJlbGtp bmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3Qo dG1wLCAiZGVmaW5pdGlvbiIsIHBnX2dldF9wYXJ0a2V5ZGVmX3NpbXBsZShvYmplY3RJZCkpOwor CWVsc2UKKwl7CisJCWFwcGVuZF9udWxsX29iamVjdCh0bXAsICJkZWZpbml0aW9uIik7CisJCWFw cGVuZF9ib29sX29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwlhcHBlbmRfb2Jq ZWN0X29iamVjdChjcmVhdGVTdG10LCAicGFydGl0aW9uX2J5IiwgdG1wKTsKKworCS8qIFVTSU5H IGNsYXVzZSAqLworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJVU0lORyAle2FjY2Vzc19tZXRob2R9 SSIsIDApOworCWlmIChub2RlLT5hY2Nlc3NNZXRob2QpCisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcCwgImFjY2Vzc19tZXRob2QiLCBub2RlLT5hY2Nlc3NNZXRob2QpOworCWVsc2UKKwl7CisJ CWFwcGVuZF9udWxsX29iamVjdCh0bXAsICJhY2Nlc3NfbWV0aG9kIik7CisJCWFwcGVuZF9ib29s X29iamVjdCh0bXAsICJwcmVzZW50IiwgZmFsc2UpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVj dChjcmVhdGVTdG10LCAiYWNjZXNzX21ldGhvZCIsIHRtcCk7CisKKwkvKiBXSVRIIGNsYXVzZSAq LworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJXSVRIICgle3dpdGg6LCB9cykiLCAwKTsKKwlsaXN0 ID0gTklMOworCisJZm9yZWFjaChjZWxsLCBub2RlLT5vcHRpb25zKQorCXsKKwkJT2JqVHJlZQkg ICAqdG1wMjsKKwkJRGVmRWxlbQkqb3B0ID0gKERlZkVsZW0gKikgbGZpcnN0KGNlbGwpOworCisJ CXRtcDIgPSBkZXBhcnNlX0RlZkVsZW0ob3B0LCBmYWxzZSk7CisJCWxpc3QgPSBsYXBwZW5kKGxp c3QsIG5ld19vYmplY3Rfb2JqZWN0KHRtcDIpKTsKKwl9CisKKwlpZiAobGlzdCkKKwkJYXBwZW5k X2FycmF5X29iamVjdCh0bXAsICJ3aXRoIiwgbGlzdCk7CisJZWxzZQorCQlhcHBlbmRfYm9vbF9v YmplY3QodG1wLCAicHJlc2VudCIsIGZhbHNlKTsKKworCWFwcGVuZF9vYmplY3Rfb2JqZWN0KGNy ZWF0ZVN0bXQsICJ3aXRoX2NsYXVzZSIsIHRtcCk7CisKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlv biwgQWNjZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBjcmVhdGVTdG10OworfQorCitzdGF0aWMg T2JqVHJlZSAqCitkZXBhcnNlX0FsdGVyT3duZXJTdG10KE9iamVjdEFkZHJlc3MgYWRkcmVzcywg Tm9kZSAqcGFyc2V0cmVlKQoreworCUFsdGVyT3duZXJTdG10ICpub2RlID0gKEFsdGVyT3duZXJT dG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpvd25lclN0bXQ7CisJY2hhcgkgICAqZm10 OworCisJZm10ID0gcHNwcmludGYoIkFMVEVSICVzICUle2lkZW50aXR5fXMgT1dORVIgVE8gJSV7 bmV3b3duZXJ9SSIsCisJCQkJICAgc3RyaW5naWZ5X29ianR5cGUobm9kZS0+b2JqZWN0VHlwZSkp OworCW93bmVyU3RtdCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwgMCk7CisJYXBwZW5kX3N0cmluZ19v YmplY3Qob3duZXJTdG10LCAibmV3b3duZXIiLAorCQkJCQkJIGdldF9yb2xlc3BlY19uYW1lKG5v ZGUtPm5ld293bmVyKSk7CisKKwlhcHBlbmRfc3RyaW5nX29iamVjdChvd25lclN0bXQsICJpZGVu dGl0eSIsCisJCQkJCQkgZ2V0T2JqZWN0SWRlbnRpdHkoJmFkZHJlc3MsIGZhbHNlKSk7CisKKwly ZXR1cm4gb3duZXJTdG10OworfQorCitzdGF0aWMgT2JqVHJlZSAqCitkZXBhcnNlX1JlbmFtZVN0 bXQoT2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBOb2RlICpwYXJzZXRyZWUpCit7CisJUmVuYW1lU3Rt dCAqbm9kZSA9IChSZW5hbWVTdG10ICopIHBhcnNldHJlZTsKKwlPYmpUcmVlCSAgICpyZW5hbWVT dG10OworCisJLyoKKwkgKiBJbiBhIEFMVEVSIC4uIFJFTkFNRSBjb21tYW5kLCB3ZSBkb24ndCBo YXZlIHRoZSBvcmlnaW5hbCBuYW1lIG9mIHRoZQorCSAqIG9iamVjdCBpbiBzeXN0ZW0gY2F0YWxv Z3M6IHNpbmNlIHdlIGluc3BlY3QgdGhlbSBhZnRlciB0aGUgY29tbWFuZCBoYXMKKwkgKiBleGVj dXRlZCwgdGhlIG9sZCBuYW1lIGlzIGFscmVhZHkgZ29uZS4gIFRoZXJlZm9yZSwgd2UgZXh0cmFj dCBpdCBmcm9tCisJICogdGhlIHBhcnNlIG5vZGUuICBOb3RlIHdlIHN0aWxsIGV4dHJhY3QgdGhl IHNjaGVtYSBuYW1lIGZyb20gdGhlIGNhdGFsb2cKKwkgKiAoaXQgbWlnaHQgbm90IGJlIHByZXNl bnQgaW4gdGhlIHBhcnNlIG5vZGUpOyBpdCBjYW5ub3QgcG9zc2libHkgaGF2ZQorCSAqIGNoYW5n ZWQgYW55d2F5LgorCSAqLworCXN3aXRjaCAobm9kZS0+cmVuYW1lVHlwZSkKKwl7CisJCWNhc2Ug T0JKRUNUX1NDSEVNQToKKwkJCXsKKwkJCQlyZW5hbWVTdG10ID0KKwkJCQkJbmV3X29ianRyZWVf VkEoIkFMVEVSIFNDSEVNQSAle2lkZW50aXR5fUkgUkVOQU1FIFRPICV7bmV3bmFtZX1JIiwKKwkJ CQkJCQkJICAgMCk7CisJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QocmVuYW1lU3RtdCwgImlkZW50 aXR5Iiwgbm9kZS0+c3VibmFtZSk7CisJCQl9CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWVs b2coRVJST1IsICJ1bnN1cHBvcnRlZCBvYmplY3QgdHlwZSAlZCIsIG5vZGUtPnJlbmFtZVR5cGUp OworCX0KKworCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHJlbmFtZVN0bXQsICJuZXduYW1lIiwgbm9k ZS0+bmV3bmFtZSk7CisKKwlyZXR1cm4gcmVuYW1lU3RtdDsKK30KKworc3RhdGljIGlubGluZSBP YmpFbGVtICoKK2RlcGFyc2VfU2VxX0NhY2hlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9wZ19zZXF1 ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUJICAgKnRtcDsKKwlj aGFyCSAgICp0bXBzdHI7CisJY2hhcgkgICAqZm10OworCisJdG1wc3RyID0gcHNwcmludGYoSU5U NjRfRk9STUFULCBzZXFkYXRhLT5zZXFjYWNoZSk7CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJCWZt dCA9ICJTRVQgQ0FDSEUgJXt2YWx1ZX1zIjsKKwllbHNlCisJCWZtdCA9ICJDQUNIRSAle3ZhbHVl fXMiOworCisJdG1wID0gbmV3X29ianRyZWVfVkEoZm10LCAyLAorCQkJCQkJICJjbGF1c2UiLCBP YmpUeXBlU3RyaW5nLCAiY2FjaGUiLAorCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRt cHN0cik7CisKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QodG1wKTsKK30KKworc3RhdGljIGlu bGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX0N5Y2xlKE9ialRyZWUgKnBhcmVudCwgRm9ybV9w Z19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUJICAgKnRt cDsKKwljaGFyCSAgICpmbXQ7CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJCWZtdCA9ICJTRVQgJXtu b31zIENZQ0xFIjsKKwllbHNlCisJCWZtdCA9ICIle25vfXMgQ1lDTEUiOworCisJdG1wID0gbmV3 X29ianRyZWVfVkEoZm10LAorCQkJCQkJIDIsCisJCQkJCQkgImNsYXVzZSIsIE9ialR5cGVTdHJp bmcsICJjeWNsZSIsCisJCQkJCQkgIm5vIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSBzZXFkYXRh LT5zZXFjeWNsZSA/ICIiIDogIk5PIik7CisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHRtcCk7 Cit9CisKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9JbmNyZW1lbnRCeShP YmpUcmVlICpwYXJlbnQsIEZvcm1fcGdfc2VxdWVuY2Ugc2VxZGF0YSwgYm9vbCBhbHRlcl90YWJs ZSkKK3sKKwlPYmpUcmVlCSAgICp0bXA7CisJY2hhcgkgICAqdG1wc3RyOworCWNoYXIJICAgKmZt dDsKKworCWlmIChhbHRlcl90YWJsZSkKKwkJZm10ID0gIlNFVCBJTkNSRU1FTlQgQlkgJXt2YWx1 ZX1zIjsKKwllbHNlCisJCWZtdCA9ICJJTkNSRU1FTlQgQlkgJXt2YWx1ZX1zIjsKKworCXRtcHN0 ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2VxaW5jcmVtZW50KTsKKwl0bXAg PSBuZXdfb2JqdHJlZV9WQShmbXQsCisJCQkJCQkgMiwKKwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlw ZVN0cmluZywgInNlcWluY3JlbWVudCIsCisJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywg dG1wc3RyKTsKKwlyZXR1cm4gbmV3X29iamVjdF9vYmplY3QodG1wKTsKK30KKworc3RhdGljIGlu bGluZSBPYmpFbGVtICoKK2RlcGFyc2VfU2VxX01pbnZhbHVlKE9ialRyZWUgKnBhcmVudCwgRm9y bV9wZ19zZXF1ZW5jZSBzZXFkYXRhLCBib29sIGFsdGVyX3RhYmxlKQoreworCU9ialRyZWUJICAg KnRtcDsKKwljaGFyCSAgICp0bXBzdHI7CisJY2hhcgkgICAqZm10OworCisJaWYgKGFsdGVyX3Rh YmxlKQorCQlmbXQgPSAiU0VUIE1JTlZBTFVFICV7dmFsdWV9cyI7CisJZWxzZQorCQlmbXQgPSAi TUlOVkFMVUUgJXt2YWx1ZX1zIjsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwg c2VxZGF0YS0+c2VxbWluKTsKKwl0bXAgPSBuZXdfb2JqdHJlZV9WQShmbXQsCisJCQkJCQkgMiwK KwkJCQkJCSAiY2xhdXNlIiwgT2JqVHlwZVN0cmluZywgIm1pbnZhbHVlIiwKKwkJCQkJCSAidmFs dWUiLCBPYmpUeXBlU3RyaW5nLCB0bXBzdHIpOworCXJldHVybiBuZXdfb2JqZWN0X29iamVjdCh0 bXApOworfQorCitzdGF0aWMgaW5saW5lIE9iakVsZW0gKgorZGVwYXJzZV9TZXFfTWF4dmFsdWUo T2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNlcWRhdGEsIGJvb2wgYWx0ZXJfdGFi bGUpCit7CisJT2JqVHJlZQkgICAqdG1wOworCWNoYXIJICAgKnRtcHN0cjsKKwljaGFyCSAgICpm bXQ7CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJCWZtdCA9ICJTRVQgTUFYVkFMVUUgJXt2YWx1ZX1z IjsKKwllbHNlCisJCWZtdCA9ICJNQVhWQUxVRSAle3ZhbHVlfXMiOworCisJdG1wc3RyID0gcHNw cmludGYoSU5UNjRfRk9STUFULCBzZXFkYXRhLT5zZXFtYXgpOworCXRtcCA9IG5ld19vYmp0cmVl X1ZBKGZtdCwKKwkJCQkJCSAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAibWF4 dmFsdWUiLAorCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVTdHJpbmcsIHRtcHN0cik7CisJcmV0dXJu IG5ld19vYmplY3Rfb2JqZWN0KHRtcCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitk ZXBhcnNlX1NlcV9TdGFydHdpdGgoT2JqVHJlZSAqcGFyZW50LCBGb3JtX3BnX3NlcXVlbmNlIHNl cWRhdGEsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZQkgICAqdG1wOworCWNoYXIJICAg KnRtcHN0cjsKKwljaGFyCSAgICpmbXQ7CisKKwlpZiAoYWx0ZXJfdGFibGUpCisJCWZtdCA9ICJT RVQgU1RBUlQgV0lUSCAle3ZhbHVlfXMiOworCWVsc2UKKwkJZm10ID0gIlNUQVJUIFdJVEggJXt2 YWx1ZX1zIjsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2VxZGF0YS0+c2Vx c3RhcnQpOworCXRtcCA9IG5ld19vYmp0cmVlX1ZBKGZtdCwKKwkJCQkJCSAyLAorCQkJCQkJICJj bGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAic3RhcnQiLAorCQkJCQkJICJ2YWx1ZSIsIE9ialR5cGVT dHJpbmcsIHRtcHN0cik7CisJcmV0dXJuIG5ld19vYmplY3Rfb2JqZWN0KHRtcCk7Cit9CisKK3N0 YXRpYyBpbmxpbmUgT2JqRWxlbSAqCitkZXBhcnNlX1NlcV9SZXN0YXJ0KE9ialRyZWUgKnBhcmVu dCwgRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGEpCit7CisJT2JqVHJlZQkgICAqdG1wOwor CWNoYXIJICAgKnRtcHN0cjsKKworCXRtcHN0ciA9IHBzcHJpbnRmKElOVDY0X0ZPUk1BVCwgc2Vx ZGF0YS0+bGFzdF92YWx1ZSk7CisJdG1wID0gbmV3X29ianRyZWVfVkEoIlJFU1RBUlQgJXt2YWx1 ZX1zIiwKKwkJCQkJCSAyLAorCQkJCQkJICJjbGF1c2UiLCBPYmpUeXBlU3RyaW5nLCAicmVzdGFy dCIsCisJCQkJCQkgInZhbHVlIiwgT2JqVHlwZVN0cmluZywgdG1wc3RyKTsKKwlyZXR1cm4gbmV3 X29iamVjdF9vYmplY3QodG1wKTsKK30KKworLyoKKyAqIGRlcGFyc2VfQ3JlYXRlU2NoZW1hU3Rt dAorICoJCWRlcGFyc2UgYSBDcmVhdGVTY2hlbWFTdG10CisgKgorICogR2l2ZW4gYSBzY2hlbWEg T0lEIGFuZCB0aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlZCBpdCwgcmV0dXJuIGFuIE9ialRyZWUK KyAqIHJlcHJlc2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqCisgKiBOb3RlIHdlIGRv bid0IG91dHB1dCB0aGUgc2NoZW1hIGVsZW1lbnRzIGdpdmVuIGluIHRoZSBjcmVhdGlvbiBjb21t YW5kLgorICogVGhleSBtdXN0IGJlIG91dHB1dCBzZXBhcmF0ZWx5LgkgKEluIHRoZSBjdXJyZW50 IGltcGxlbWVudGF0aW9uLAorICogQ3JlYXRlU2NoZW1hQ29tbWFuZCBwYXNzZXMgdGhlbSBiYWNr IHRvIFByb2Nlc3NVdGlsaXR5LCB3aGljaCB3aWxsIGxlYWQgdG8KKyAqIHRoaXMgZmlsZSBpZiBh cHByb3ByaWF0ZS4pCisgKi8KK3N0YXRpYyBPYmpUcmVlICoKK2RlcGFyc2VfQ3JlYXRlU2NoZW1h U3RtdChPaWQgb2JqZWN0SWQsIE5vZGUgKnBhcnNldHJlZSkKK3sKKwlDcmVhdGVTY2hlbWFTdG10 ICpub2RlID0gKENyZWF0ZVNjaGVtYVN0bXQgKikgcGFyc2V0cmVlOworCU9ialRyZWUJKmNyZWF0 ZVNjaGVtYTsKKwlPYmpUcmVlCSphdXRoOworCisJY3JlYXRlU2NoZW1hID0KKwkJbmV3X29ianRy ZWVfVkEoIkNSRUFURSBTQ0hFTUEgJXtpZl9ub3RfZXhpc3RzfXMgJXtuYW1lfUkgJXthdXRob3Jp emF0aW9ufXMiLAorCQkJCQkgICAyLAorCQkJCQkgICAibmFtZSIsIE9ialR5cGVTdHJpbmcsIG5v ZGUtPnNjaGVtYW5hbWUsCisJCQkJCSAgICJpZl9ub3RfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywK KwkJCQkJICAgbm9kZS0+aWZfbm90X2V4aXN0cyA/ICJJRiBOT1QgRVhJU1RTIiA6ICIiKTsKKwlh dXRoID0gbmV3X29ianRyZWVfVkEoIkFVVEhPUklaQVRJT04gJXthdXRob3JpemF0aW9uX3JvbGV9 SSIsIDApOworCWlmIChub2RlLT5hdXRocm9sZSkKKwkJYXBwZW5kX3N0cmluZ19vYmplY3QoYXV0 aCwgImF1dGhvcml6YXRpb25fcm9sZSIsCisJCQkJCQkJIGdldF9yb2xlc3BlY19uYW1lKG5vZGUt PmF1dGhyb2xlKSk7CisJZWxzZQorCXsKKwkJYXBwZW5kX251bGxfb2JqZWN0KGF1dGgsICJhdXRo b3JpemF0aW9uX3JvbGUiKTsKKwkJYXBwZW5kX2Jvb2xfb2JqZWN0KGF1dGgsICJwcmVzZW50Iiwg ZmFsc2UpOworCX0KKwlhcHBlbmRfb2JqZWN0X29iamVjdChjcmVhdGVTY2hlbWEsICJhdXRob3Jp emF0aW9uIiwgYXV0aCk7CisKKwlyZXR1cm4gY3JlYXRlU2NoZW1hOworfQorCitzdGF0aWMgT2Jq RWxlbSAqCitkZXBhcnNlX1NlcV9Pd25lZEJ5KE9ialRyZWUgKnBhcmVudCwgT2lkIHNlcXVlbmNl SWQsIGJvb2wgYWx0ZXJfdGFibGUpCit7CisJT2JqVHJlZQkqb3duZWRieSA9IE5VTEw7CisJUmVs YXRpb24JZGVwUmVsOworCVN5c1NjYW5EZXNjIHNjYW47CisJU2NhbktleURhdGEga2V5c1szXTsK KwlIZWFwVHVwbGUgICB0dXBsZTsKKworCWRlcFJlbCA9IHRhYmxlX29wZW4oRGVwZW5kUmVsYXRp b25JZCwgQWNjZXNzU2hhcmVMb2NrKTsKKwlTY2FuS2V5SW5pdCgma2V5c1swXSwKKwkJCQlBbnVt X3BnX2RlcGVuZF9jbGFzc2lkLAorCQkJCUJURXF1YWxTdHJhdGVneU51bWJlciwgRl9PSURFUSwK KwkJCQlPYmplY3RJZEdldERhdHVtKFJlbGF0aW9uUmVsYXRpb25JZCkpOworCVNjYW5LZXlJbml0 KCZrZXlzWzFdLAorCQkJCUFudW1fcGdfZGVwZW5kX29iamlkLAorCQkJCUJURXF1YWxTdHJhdGVn eU51bWJlciwgRl9PSURFUSwKKwkJCQlPYmplY3RJZEdldERhdHVtKHNlcXVlbmNlSWQpKTsKKwlT Y2FuS2V5SW5pdCgma2V5c1syXSwKKwkJCQlBbnVtX3BnX2RlcGVuZF9vYmpzdWJpZCwKKwkJCQlC VEVxdWFsU3RyYXRlZ3lOdW1iZXIsIEZfSU5UNEVRLAorCQkJCUludDMyR2V0RGF0dW0oMCkpOwor CisJc2NhbiA9IHN5c3RhYmxlX2JlZ2luc2NhbihkZXBSZWwsIERlcGVuZERlcGVuZGVySW5kZXhJ ZCwgdHJ1ZSwKKwkJCQkJCQkgIE5VTEwsIDMsIGtleXMpOworCXdoaWxlIChIZWFwVHVwbGVJc1Zh bGlkKHR1cGxlID0gc3lzdGFibGVfZ2V0bmV4dChzY2FuKSkpCisJeworCQlPaWQJCSBvd25lcklk OworCQlGb3JtX3BnX2RlcGVuZCBkZXBmb3JtOworCQlPYmpUcmVlCSp0bXA7CisJCWNoYXIJICAg KmNvbG5hbWU7CisKKwkJZGVwZm9ybSA9IChGb3JtX3BnX2RlcGVuZCkgR0VUU1RSVUNUKHR1cGxl KTsKKworCQkvKiBvbmx5IGNvbnNpZGVyIEFVVE8gZGVwZW5kZW5jaWVzIG9uIHBnX2NsYXNzICov CisJCWlmIChkZXBmb3JtLT5kZXB0eXBlICE9IERFUEVOREVOQ1lfQVVUTykKKwkJCWNvbnRpbnVl OworCQlpZiAoZGVwZm9ybS0+cmVmY2xhc3NpZCAhPSBSZWxhdGlvblJlbGF0aW9uSWQpCisJCQlj b250aW51ZTsKKwkJaWYgKGRlcGZvcm0tPnJlZm9ianN1YmlkIDw9IDApCisJCQljb250aW51ZTsK KworCQlvd25lcklkID0gZGVwZm9ybS0+cmVmb2JqaWQ7CisJCWNvbG5hbWUgPSBnZXRfYXR0bmFt ZShvd25lcklkLCBkZXBmb3JtLT5yZWZvYmpzdWJpZCwgZmFsc2UpOworCQlpZiAoY29sbmFtZSA9 PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJdG1wID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1l X2lkKFJlbGF0aW9uUmVsYXRpb25JZCwgb3duZXJJZCk7CisJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcCwgImF0dHJuYW1lIiwgY29sbmFtZSk7CisJCW93bmVkYnkgPSBuZXdfb2JqdHJlZV9WQSgi T1dORUQgQlkgJXtvd25lcn1EIiwKKwkJCQkJCQkJIDIsCisJCQkJCQkJCSAiY2xhdXNlIiwgT2Jq VHlwZVN0cmluZywgIm93bmVkIiwKKwkJCQkJCQkJICJvd25lciIsIE9ialR5cGVPYmplY3QsIHRt cCk7CisJfQorCisJc3lzdGFibGVfZW5kc2NhbihzY2FuKTsKKwlyZWxhdGlvbl9jbG9zZShkZXBS ZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwkvKgorCSAqIElmIHRoZXJlJ3Mgbm8gb3duZXIgY29s dW1uLCBlbWl0IGFuIGVtcHR5IE9XTkVEIEJZIGVsZW1lbnQsIHNldCB1cCBzbworCSAqIHRoYXQg aXQgd29uJ3QgcHJpbnQgYW55dGhpbmcuCisJICovCisJaWYgKCFvd25lZGJ5KQorCQkvKiBYWFgg dGhpcyBzaG91bGRuJ3QgaGFwcGVuIC4uLiAqLworCQlvd25lZGJ5ID0gbmV3X29ianRyZWVfVkEo Ik9XTkVEIEJZICV7b3duZXJ9RCIsCisJCQkJCQkJCSAzLAorCQkJCQkJCQkgImNsYXVzZSIsIE9i alR5cGVTdHJpbmcsICJvd25lZCIsCisJCQkJCQkJCSAib3duZXIiLCBPYmpUeXBlTnVsbCwKKwkJ CQkJCQkJICJwcmVzZW50IiwgT2JqVHlwZUJvb2wsIGZhbHNlKTsKKwlyZXR1cm4gbmV3X29iamVj dF9vYmplY3Qob3duZWRieSk7Cit9CisKKy8qIGRlcGFyc2VfQ3JlYXRlU2VxU3RtdAorICogCWRl cGFyc2UgYSBDcmVhdGVTZXFTdG10CisgKgorICogCUdpdmVuIGEgc2VxdWVuY2UgT0lEIGFuZCB0 aGUgcGFyc2V0cmVlIHRoYXQgY3JlYXRlIGl0LCByZXR1cm4gYW4gT2JqVHJlZQorICogCXJlcHJl c2VudGluZyB0aGUgY3JlYXRpb24gY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVw YXJzZV9DcmVhdGVTZXFTdG10KE9pZCBvYmplY3RJZCwgTm9kZSAqcGFyc2V0cmVlKQoreworCU9i alRyZWUJKmNyZWF0ZVNlcTsKKwlPYmpUcmVlCSp0bXA7CisJUmVsYXRpb24JcmVsYXRpb247CisJ Rm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHNlcWRhdGE7CisJTGlzdAkgICAqZWxlbXMgPSBOSUw7CisJ Rm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3JtOworCVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJc2Vx dHVwbGU7CisJQ3JlYXRlU2VxU3RtdCAqY3JlYXRlU2VxU3RtdCA9IChDcmVhdGVTZXFTdG10ICop IHBhcnNldHJlZTsKKworCS8qCisJICogU2VxdWVuY2UgZm9yIElERU5USVRZIENPTFVNTiBvdXRw dXQgc2VwYXJhdGVseSh2aWEgQ1JFQVRFIFRBQkxFIG9yCisJICogQUxURVIgVEFCTEUpOyByZXR1 cm4gZW1wdHkgaGVyZS4KKwkgKi8KKwlpZiAoY3JlYXRlU2VxU3RtdC0+Zm9yX2lkZW50aXR5KQor CQlyZXR1cm4gTlVMTDsKKworCXNlcWRhdGEgPSBnZXRfc2VxdWVuY2VfdmFsdWVzKG9iamVjdElk KTsKKworCXJlbGF0aW9uID0gcmVsYXRpb25fb3BlbihvYmplY3RJZCwgQWNjZXNzU2hhcmVMb2Nr KTsKKwlyZWwgPSB0YWJsZV9vcGVuKFNlcXVlbmNlUmVsYXRpb25JZCwgUm93RXhjbHVzaXZlTG9j ayk7CisJc2VxdHVwbGUgPSBTZWFyY2hTeXNDYWNoZUNvcHkxKFNFUVJFTElELAorCQkJCQkJCQkg ICBPYmplY3RJZEdldERhdHVtKG9iamVjdElkKSk7CisJaWYgKCFIZWFwVHVwbGVJc1ZhbGlkKHNl cXR1cGxlKSkKKwkJZWxvZyhFUlJPUiwgImNhY2hlIGxvb2t1cCBmYWlsZWQgZm9yIHNlcXVlbmNl ICV1IiwKKwkJCSBvYmplY3RJZCk7CisKKwlzZXFmb3JtID0gKEZvcm1fcGdfc2VxdWVuY2UpIEdF VFNUUlVDVChzZXF0dXBsZSk7CisKKwljcmVhdGVTZXEgPQorCQluZXdfb2JqdHJlZV9WQSgiQ1JF QVRFICV7cGVyc2lzdGVuY2V9cyBTRVFVRU5DRSAle2lkZW50aXR5fUQgIgorCQkJCQkgICAiJXtk ZWZpbml0aW9uOiB9cyIsCisJCQkJCSAgIDEsCisJCQkJCSAgICJwZXJzaXN0ZW5jZSIsIE9ialR5 cGVTdHJpbmcsCisJCQkJCSAgIGdldF9wZXJzaXN0ZW5jZV9zdHIocmVsYXRpb24tPnJkX3JlbC0+ cmVscGVyc2lzdGVuY2UpKTsKKworCXRtcCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWxh dGlvbi0+cmRfcmVsLT5yZWxuYW1lc3BhY2UsCisJCQkJCQkJCSAgIFJlbGF0aW9uR2V0UmVsYXRp b25OYW1lKHJlbGF0aW9uKSk7CisJYXBwZW5kX29iamVjdF9vYmplY3QoY3JlYXRlU2VxLCAiaWRl bnRpdHkiLCB0bXApOworCisJLyogZGVmaW5pdGlvbiBlbGVtZXRzICovCisJZWxlbXMgPSBsYXBw ZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9DYWNoZShjcmVhdGVTZXEsIHNlcWZvcm0sIGZhbHNlKSk7 CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9DeWNsZShjcmVhdGVTZXEsIHNl cWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9JbmNy ZW1lbnRCeShjcmVhdGVTZXEsIHNlcWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVs ZW1zLCBkZXBhcnNlX1NlcV9NaW52YWx1ZShjcmVhdGVTZXEsIHNlcWZvcm0sIGZhbHNlKSk7CisJ ZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9NYXh2YWx1ZShjcmVhdGVTZXEsIHNl cWZvcm0sIGZhbHNlKSk7CisJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBkZXBhcnNlX1NlcV9TdGFy dHdpdGgoY3JlYXRlU2VxLCBzZXFmb3JtLCBmYWxzZSkpOworCWVsZW1zID0gbGFwcGVuZChlbGVt cywgZGVwYXJzZV9TZXFfUmVzdGFydChjcmVhdGVTZXEsIHNlcWRhdGEpKTsKKwkvKiB3ZSBwdXJw b3NlZnVsbHkgZG8gbm90IGVtaXQgT1dORUQgQlkgaGVyZSAqLworCisJYXBwZW5kX2FycmF5X29i amVjdChjcmVhdGVTZXEsICJkZWZpbml0aW9uIiwgZWxlbXMpOworCisJdGFibGVfY2xvc2UocmVs LCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNjZXNzU2hh cmVMb2NrKTsKKworCXJldHVybiBjcmVhdGVTZXE7Cit9CisKKy8qCisgKiBkZXBhcnNlX0FsdGVy U2VxU3RtdAorICoJZGVwYXJzZSBhbiBBbHRlclNlcVN0bXQKKyAqCisgKiBHaXZlbiBhIHNlcXVl bmNlIE9JRCBhbmQgYSBwYXJzZXRyZWUgdGhhdCBtb2RpZmllZCBpdCwgcmV0dXJuIGFuIE9ialRy ZWUKKyAqIHJlcHJlc2VudGluZyB0aGUgYWx0ZXIgY29tbWFuZC4KKyAqLworc3RhdGljIE9ialRy ZWUgKgorZGVwYXJzZV9BbHRlclNlcVN0bXQoT2lkIG9iamVjdElkLCBOb2RlICpwYXJzZXRyZWUp Cit7CisJT2JqVHJlZQkJKmFsdGVyU2VxOworCU9ialRyZWUJCSp0bXA7CisJUmVsYXRpb24JIHJl bGF0aW9uOworCUZvcm1fcGdfc2VxdWVuY2VfZGF0YSBzZXFkYXRhOworCUxpc3QJICAgKmVsZW1z ID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJRm9ybV9wZ19zZXF1ZW5jZSBzZXFmb3JtOwor CVJlbGF0aW9uCXJlbDsKKwlIZWFwVHVwbGUJc2VxdHVwbGU7CisJQWx0ZXJTZXFTdG10ICphbHRl clNlcVN0bXQgPSAoQWx0ZXJTZXFTdG10ICopIHBhcnNldHJlZTsKKworCS8qCisJICogU2VxdWVu Y2UgZm9yIElERU5USVRZIENPTFVNTiBvdXRwdXQgc2VwYXJhdGVseSh2aWEgQ1JFQVRFIFRBQkxF IG9yCisJICogQUxURVIgVEFCTEUpOyByZXR1cm4gZW1wdHkgaGVyZS4KKwkgKi8KKwlpZiAoYWx0 ZXJTZXFTdG10LT5mb3JfaWRlbnRpdHkpCisJCXJldHVybiBOVUxMOworCisJc2VxZGF0YSA9IGdl dF9zZXF1ZW5jZV92YWx1ZXMob2JqZWN0SWQpOworCisJcmVsYXRpb24gPSByZWxhdGlvbl9vcGVu KG9iamVjdElkLCBBY2Nlc3NTaGFyZUxvY2spOworCXJlbCA9IHRhYmxlX29wZW4oU2VxdWVuY2VS ZWxhdGlvbklkLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlzZXF0dXBsZSA9IFNlYXJjaFN5c0NhY2hl Q29weTEoU0VRUkVMSUQsCisJCQkJCQkJCSAgIE9iamVjdElkR2V0RGF0dW0ob2JqZWN0SWQpKTsK KwlpZiAoIUhlYXBUdXBsZUlzVmFsaWQoc2VxdHVwbGUpKQorCQllbG9nKEVSUk9SLCAiY2FjaGUg bG9va3VwIGZhaWxlZCBmb3Igc2VxdWVuY2UgJXUiLAorCQkJIG9iamVjdElkKTsKKworCXNlcWZv cm0gPSAoRm9ybV9wZ19zZXF1ZW5jZSkgR0VUU1RSVUNUKHNlcXR1cGxlKTsKKworCWFsdGVyU2Vx ID0KKwkJbmV3X29ianRyZWVfVkEoIkFMVEVSIFNFUVVFTkNFICV7aWRlbnRpdHl9RCAle2RlZmlu aXRpb246IH1zIiwgMCk7CisJdG1wID0gbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lKHJlbGF0aW9u LT5yZF9yZWwtPnJlbG5hbWVzcGFjZSwKKwkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxhdGlvbk5h bWUocmVsYXRpb24pKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlclNlcSwgImlkZW50aXR5 IiwgdG1wKTsKKworCWZvcmVhY2goY2VsbCwgKChBbHRlclNlcVN0bXQgKikgcGFyc2V0cmVlKS0+ b3B0aW9ucykKKwl7CisJCURlZkVsZW0gKmVsZW0gPSAoRGVmRWxlbSAqKSBsZmlyc3QoY2VsbCk7 CisJCU9iakVsZW0gKm5ld2VsbTsKKworCQlpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJjYWNo ZSIpID09IDApCisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9DYWNoZShhbHRlclNlcSwgc2VxZm9y bSwgZmFsc2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgImN5Y2xlIikgPT0g MCkKKwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX0N5Y2xlKGFsdGVyU2VxLCBzZXFmb3JtLCBmYWxz ZSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAiaW5jcmVtZW50IikgPT0gMCkK KwkJCW5ld2VsbSA9IGRlcGFyc2VfU2VxX0luY3JlbWVudEJ5KGFsdGVyU2VxLCBzZXFmb3JtLCBm YWxzZSk7CisJCWVsc2UgaWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAibWludmFsdWUiKSA9PSAw KQorCQkJbmV3ZWxtID0gZGVwYXJzZV9TZXFfTWludmFsdWUoYWx0ZXJTZXEsIHNlcWZvcm0sIGZh bHNlKTsKKwkJZWxzZSBpZiAoc3RyY21wKGVsZW0tPmRlZm5hbWUsICJtYXh2YWx1ZSIpID09IDAp CisJCQluZXdlbG0gPSBkZXBhcnNlX1NlcV9NYXh2YWx1ZShhbHRlclNlcSwgc2VxZm9ybSwgZmFs c2UpOworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgInN0YXJ0IikgPT0gMCkKKwkJ CW5ld2VsbSA9IGRlcGFyc2VfU2VxX1N0YXJ0d2l0aChhbHRlclNlcSwgc2VxZm9ybSwgZmFsc2Up OworCQllbHNlIGlmIChzdHJjbXAoZWxlbS0+ZGVmbmFtZSwgInJlc3RhcnQiKSA9PSAwKQorCQkJ bmV3ZWxtID0gZGVwYXJzZV9TZXFfUmVzdGFydChhbHRlclNlcSwgc2VxZGF0YSk7CisJCWVsc2Ug aWYgKHN0cmNtcChlbGVtLT5kZWZuYW1lLCAib3duZWRfYnkiKSA9PSAwKQorCQkJbmV3ZWxtID0g ZGVwYXJzZV9TZXFfT3duZWRCeShhbHRlclNlcSwgb2JqZWN0SWQsIGZhbHNlKTsKKwkJZWxzZQor CQkJZWxvZyhFUlJPUiwgImludmFsaWQgc2VxdWVuY2Ugb3B0aW9uICVzIiwgZWxlbS0+ZGVmbmFt ZSk7CisKKwkJZWxlbXMgPSBsYXBwZW5kKGVsZW1zLCBuZXdlbG0pOworCX0KKworCWFwcGVuZF9h cnJheV9vYmplY3QoYWx0ZXJTZXEsICJkZWZpbml0aW9uIiwgZWxlbXMpOworCisJdGFibGVfY2xv c2UocmVsLCBSb3dFeGNsdXNpdmVMb2NrKTsKKwlyZWxhdGlvbl9jbG9zZShyZWxhdGlvbiwgQWNj ZXNzU2hhcmVMb2NrKTsKKworCXJldHVybiBhbHRlclNlcTsKK30KKworc3RhdGljIE9ialRyZWUg KgorZGVwYXJzZV9BbHRlclRhYmxlU3RtdChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2Jq VHJlZQkgICAqYWx0ZXJUYWJsZVN0bXQ7CisJT2JqVHJlZQkgICAqdG1wOworCU9ialRyZWUJICAg KnRtcDI7CisJTGlzdAkgICAqZHBjb250ZXh0OworCVJlbGF0aW9uCXJlbDsKKwlMaXN0CSAgICpz dWJjbWRzID0gTklMOworCUxpc3RDZWxsICAgKmNlbGw7CisJY2hhcgkgICAqZm10c3RyOworCWNv bnN0IGNoYXIgKnJlbHR5cGU7CisJYm9vbAkJaXN0eXBlID0gZmFsc2U7CisJTGlzdAkgICAqZXhw cnMgPSBOSUw7CisKKwlBc3NlcnQoY21kLT50eXBlID09IFNDVF9BbHRlclRhYmxlKTsKKworCXJl bCA9IHJlbGF0aW9uX29wZW4oY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQsIEFjY2Vzc1NoYXJl TG9jayk7CisJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxhdGlvbkdldFJlbGF0 aW9uTmFtZShyZWwpLAorCQkJCQkJCQkJY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQpOworCisJ c3dpdGNoIChyZWwtPnJkX3JlbC0+cmVsa2luZCkKKwl7CisJCWNhc2UgUkVMS0lORF9SRUxBVElP TjoKKwkJY2FzZSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFOgorCQkJcmVsdHlwZSA9ICJUQUJM RSI7CisJCQlicmVhazsKKwkJY2FzZSBSRUxLSU5EX0lOREVYOgorCQljYXNlIFJFTEtJTkRfUEFS VElUSU9ORURfSU5ERVg6CisJCQlyZWx0eXBlID0gIklOREVYIjsKKwkJCWJyZWFrOworCQljYXNl IFJFTEtJTkRfVklFVzoKKwkJCXJlbHR5cGUgPSAiVklFVyI7CisJCQlicmVhazsKKwkJY2FzZSBS RUxLSU5EX0NPTVBPU0lURV9UWVBFOgorCQkJcmVsdHlwZSA9ICJUWVBFIjsKKwkJCWlzdHlwZSA9 IHRydWU7CisJCQlicmVhazsKKwkJY2FzZSBSRUxLSU5EX0ZPUkVJR05fVEFCTEU6CisJCQlyZWx0 eXBlID0gIkZPUkVJR04gVEFCTEUiOworCQkJYnJlYWs7CisKKwkJLyogVE9ETyBzdXBwb3J0IGZv ciBwYXJ0aXRpb25lZCB0YWJsZSAqLworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAidW5l eHBlY3RlZCByZWxraW5kICVkIiwgcmVsLT5yZF9yZWwtPnJlbGtpbmQpOworCQkJcmVsdHlwZSA9 IE5VTEw7OworCX0KKworCWZtdHN0ciA9IHBzcHJpbnRmKCJBTFRFUiAlcyAlJXtpZGVudGl0eX1E ICUle3N1YmNtZHM6LCB9cyIsIHJlbHR5cGUpOworCWFsdGVyVGFibGVTdG10ID0gbmV3X29ianRy ZWVfVkEoZm10c3RyLCAwKTsKKworCXRtcCA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFtZShyZWwt PnJkX3JlbC0+cmVsbmFtZXNwYWNlLAorCQkJCQkJCQkgICBSZWxhdGlvbkdldFJlbGF0aW9uTmFt ZShyZWwpKTsKKwlhcHBlbmRfb2JqZWN0X29iamVjdChhbHRlclRhYmxlU3RtdCwgImlkZW50aXR5 IiwgdG1wKTsKKworCWZvcmVhY2goY2VsbCwgY21kLT5kLmFsdGVyVGFibGUuc3ViY21kcykKKwl7 CisJCUNvbGxlY3RlZEFUU3ViY21kICpzdWIgPSAoQ29sbGVjdGVkQVRTdWJjbWQgKikgbGZpcnN0 KGNlbGwpOworCQlBbHRlclRhYmxlQ21kCSpzdWJjbWQgPSAoQWx0ZXJUYWJsZUNtZCAqKSBzdWIt PnBhcnNldHJlZTsKKwkJT2JqVHJlZQkgICAqdHJlZTsKKworCQlBc3NlcnQoSXNBKHN1YmNtZCwg QWx0ZXJUYWJsZUNtZCkpOworCisJCXN3aXRjaCAoc3ViY21kLT5zdWJ0eXBlKQorCQl7CisJCQlj YXNlIEFUX0FkZENvbHVtbjoKKwkJCWNhc2UgQVRfQWRkQ29sdW1uUmVjdXJzZToKKwkJCQkvKiBY WFggbmVlZCB0byBzZXQgdGhlICJyZWN1cnNlIiBiaXQgc29tZXdoZXJlPyAqLworCQkJCUFzc2Vy dChJc0Eoc3ViY21kLT5kZWYsIENvbHVtbkRlZikpOworCQkJCXRyZWUgPSBkZXBhcnNlX0NvbHVt bkRlZihyZWwsIGRwY29udGV4dCwgZmFsc2UsCisJCQkJCQkJCQkJIChDb2x1bW5EZWYgKikgc3Vi Y21kLT5kZWYsIHRydWUsICZleHBycyk7CisJCQkJZm10c3RyID0gcHNwcmludGYoIkFERCAlcyAl JXtkZWZpbml0aW9ufXMiLAorCQkJCQkJCQkgIGlzdHlwZSA/ICJBVFRSSUJVVEUiIDogIkNPTFVN TiIpOworCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKGZtdHN0ciwgMiwKKwkJCQkJCQkJCSAidHlw ZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgY29sdW1uIiwKKwkJCQkJCQkJCSAiZGVmaW5pdGlvbiIs IE9ialR5cGVPYmplY3QsIHRyZWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5l d19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZEluZGV4 Q29uc3RyYWludDoKKwkJCQl7CisJCQkJCUluZGV4U3RtdCAgKmlzdG10OworCQkJCQlSZWxhdGlv bglpZHg7CisJCQkJCWNvbnN0IGNoYXIgKmlkeG5hbWU7CisJCQkJCU9pZAkJCWNvbnN0ck9pZCA9 IHN1Yi0+YWRkcmVzcy5vYmplY3RJZDsKKworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBJ bmRleFN0bXQpKTsKKwkJCQkJaXN0bXQgPSAoSW5kZXhTdG10ICopIHN1YmNtZC0+ZGVmOworCisJ CQkJCUFzc2VydChpc3RtdC0+aXNjb25zdHJhaW50ICYmIGlzdG10LT51bmlxdWUpOworCisJCQkJ CWlkeCA9IHJlbGF0aW9uX29wZW4oaXN0bXQtPmluZGV4T2lkLCBBY2Nlc3NTaGFyZUxvY2spOwor CQkJCQlpZHhuYW1lID0gUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaWR4KTsKKworCQkJCQl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiQUREIENPTlNUUkFJTlQgJXtuYW1lfUkgJXtjb25zdHJhaW50X3R5 cGV9cyBVU0lORyBJTkRFWCAlaW5kZXhfbmFtZX1JICV7ZGVmZXJyYWJsZX1zICV7aW5pdF9kZWZl cnJlZH1zIiwKKwkJCQkJCQkJCQkgNCwgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbnN0 cmFpbnQgdXNpbmcgaW5kZXgiLAorCQkJCQkJCQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcsIGdl dF9jb25zdHJhaW50X25hbWUoY29uc3RyT2lkKSwKKwkJCQkJCQkJCQkgImNvbnN0cmFpbnRfdHlw ZSIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkJIGlzdG10LT5wcmltYXJ5ID8gIlBSSU1BUlkg S0VZIiA6ICJVTklRVUUiLAorCQkJCQkJCQkJCSAiaW5kZXhfbmFtZSIsIE9ialR5cGVTdHJpbmcs IGlkeG5hbWUpOworCisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgImRlZmVycmFibGUi LCBpc3RtdC0+ZGVmZXJyYWJsZSA/CisJCQkJCQkJCQkJICJERUZFUlJBQkxFIiA6ICJOT1QgREVG RVJSQUJMRSIpOworCQkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICJpbml0X2RlZmVycmVk IiwgaXN0bXQtPmluaXRkZWZlcnJlZCA/CisJCQkJCQkJCQkJICJJTklUSUFMTFkgREVGRVJSRUQi IDogIklOSVRJQUxMWSBJTU1FRElBVEUiKTsKKworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJj bWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKworCQkJCQlyZWxhdGlvbl9jbG9zZShpZHgs IEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1JlQWRk SW5kZXg6CisJCQljYXNlIEFUX1JlQWRkQ29uc3RyYWludDoKKwkJCWNhc2UgQVRfUmVBZGRDb21t ZW50OgorCQkJY2FzZSBBVF9SZXBsYWNlUmVsT3B0aW9uczoKKwkJCQkvKiBTdWJ0eXBlcyB1c2Vk IGZvciBpbnRlcm5hbCBvcGVyYXRpb25zOyBub3RoaW5nIHRvIGRvIGhlcmUgKi8KKwkJCQlicmVh azsKKworCQkJY2FzZSBBVF9BZGRDb2x1bW5Ub1ZpZXc6CisJCQkJLyogQ1JFQVRFIE9SIFJFUExB Q0UgVklFVyAtLSBub3RoaW5nIHRvIGRvIGhlcmUgKi8KKwkJCQlicmVhazsKKworCQkJY2FzZSBB VF9Db2x1bW5EZWZhdWx0OgorCQkJCWlmIChzdWJjbWQtPmRlZiA9PSBOVUxMKQorCQkJCXsKKwkJ CQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIERST1AgREVG QVVMVCIsCisJCQkJCQkJCQkJIDEsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgZGVmYXVs dCIpOworCQkJCX0KKwkJCQllbHNlCisJCQkJeworCQkJCQlMaXN0CSAgICpkcGNvbnRleHQ7CisJ CQkJCUhlYXBUdXBsZQlhdHRydHVwOworCQkJCQlBdHRyTnVtYmVyCWF0dG5vOworCisJCQkJCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgREVGQVVMVCAl e2RlZmluaXRpb259cyIsCisJCQkJCQkJCQkJIDEsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNl dCBkZWZhdWx0Iik7CisKKwkJCQkJZHBjb250ZXh0ID0gZGVwYXJzZV9jb250ZXh0X2ZvcihSZWxh dGlvbkdldFJlbGF0aW9uTmFtZShyZWwpLAorCQkJCQkJCQkJCQkJCVJlbGF0aW9uR2V0UmVsaWQo cmVsKSk7CisJCQkJCWF0dHJ0dXAgPSBTZWFyY2hTeXNDYWNoZUF0dE5hbWUoUmVsYXRpb25HZXRS ZWxpZChyZWwpLCBzdWJjbWQtPm5hbWUpOworCQkJCQlhdHRubyA9ICgoRm9ybV9wZ19hdHRyaWJ1 dGUpIEdFVFNUUlVDVChhdHRydHVwKSktPmF0dG51bTsKKwkJCQkJYXBwZW5kX3N0cmluZ19vYmpl Y3QodG1wLCAiZGVmaW5pdGlvbiIsCisJCQkJCQkJCQkJIFJlbGF0aW9uR2V0Q29sdW1uRGVmYXVs dChyZWwsIGF0dG5vLCBkcGNvbnRleHQsIE5VTEwpKTsKKwkJCQkJUmVsZWFzZVN5c0NhY2hlKGF0 dHJ0dXApOworCQkJCX0KKwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICJjb2x1bW4iLCBz dWJjbWQtPm5hbWUpOworCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcE5vdE51bGw6CisJ CQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIERST1AgTk9U IE5VTEwiLAorCQkJCQkJCQkJIDEsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3Agbm90IG51 bGwiKTsKKwkJCQlhcHBlbmRfc3RyaW5nX29iamVjdCh0bXAsICJjb2x1bW4iLCBzdWJjbWQtPm5h bWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRt cCkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1NldE5vdE51bGw6CisJCQkJdG1wID0gbmV3 X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JIFNFVCBOT1QgTlVMTCIsCisJCQkJ CQkJCQkgMSwgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IG5vdCBudWxsIik7CisJCQkJYXBw ZW5kX3N0cmluZ19vYmplY3QodG1wLCAiY29sdW1uIiwgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJj bWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVh azsKKworCQkJY2FzZSBBVF9Ecm9wRXhwcmVzc2lvbjoKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9W QSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgRFJPUCBFWFBSRVNTSU9OICV7aWZfbm90X2V4aXN0 c31zIiwKKwkJCQkJCQkJCSAyLCAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgbm90IG51bGwi LAorCQkJCQkJCQkJICJpZl9ub3RfZXhpc3RzIiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCQkJCSBz dWJjbWQtPm1pc3Npbmdfb2sgPyAiSUYgRVhJU1RTIjogIiIpOworCQkJCWFwcGVuZF9zdHJpbmdf b2JqZWN0KHRtcCwgImNvbHVtbiIsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBl bmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisKKwkJCWNh c2UgQVRfU2V0U3RhdGlzdGljczoKKwkJCQl7CisJCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYs IEludGVnZXIpKTsKKwkJCQkJaWYgKHN1YmNtZC0+bmFtZSkKKwkJCQkJCXRtcCA9IG5ld19vYmp0 cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59SSBTRVQgU1RBVElTVElDUyAle3N0YXRpc3Rp Y3N9biIsCisJCQkJCQkJCQkJCSAzLCAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgc3RhdGlz dGljcyIsCisJCQkJCQkJCQkJCSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1l LAorCQkJCQkJCQkJCQkgInN0YXRpc3RpY3MiLCBPYmpUeXBlSW50ZWdlciwKKwkJCQkJCQkJCQkJ IGludFZhbCgoSW50ZWdlciAqKSBzdWJjbWQtPmRlZikpOworCQkJCQllbHNlCisJCQkJCQl0bXAg PSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufW4gU0VUIFNUQVRJU1RJQ1Mg JXtzdGF0aXN0aWNzfW4iLAorCQkJCQkJCQkJCQkgMywgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi c2V0IHN0YXRpc3RpY3MiLAorCQkJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVJbnRlZ2VyLCBz dWJjbWQtPm51bSwKKwkJCQkJCQkJCQkJICJzdGF0aXN0aWNzIiwgT2JqVHlwZUludGVnZXIsCisJ CQkJCQkJCQkJCSBpbnRWYWwoKEludGVnZXIgKikgc3ViY21kLT5kZWYpKTsKKwkJCQkJc3ViY21k cyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJfQorCQkJ CWJyZWFrOworCisJCQljYXNlIEFUX1NldE9wdGlvbnM6CisJCQljYXNlIEFUX1Jlc2V0T3B0aW9u czoKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCgKKwkJ CQkJCQkJCSAgZGVwYXJzZV9Db2x1bW5TZXRPcHRpb25zKHN1YmNtZCkpKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9TZXRTdG9yYWdlOgorCQkJCUFzc2VydChJc0Eoc3ViY21kLT5kZWYsIFN0 cmluZykpOworCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJBTFRFUiBDT0xVTU4gJXtjb2x1bW59 SSBTRVQgU1RPUkFHRSAle3N0b3JhZ2V9cyIsCisJCQkJCQkJCQkgMywgInR5cGUiLCBPYmpUeXBl U3RyaW5nLCAic2V0IHN0b3JhZ2UiLAorCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBlU3RyaW5n LCBzdWJjbWQtPm5hbWUsCisJCQkJCQkJCQkgInN0b3JhZ2UiLCBPYmpUeXBlU3RyaW5nLAorCQkJ CQkJCQkJIHN0clZhbCgoU3RyaW5nICopIHN1YmNtZC0+ZGVmKSk7CisJCQkJc3ViY21kcyA9IGxh cHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisKKwkJ CWNhc2UgQVRfU2V0Q29tcHJlc3Npb246CisJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgU3Ry aW5nKSk7CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1J IFNFVCBDT01QUkVTU0lPTiAle2NvbXByZXNzaW9uX21ldGhvZH1zIiwKKwkJCQkJCQkJCSAzLCAi dHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgY29tcHJlc3Npb24iLAorCQkJCQkJCQkJICJjb2x1 bW4iLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUsCisJCQkJCQkJCQkgImNvbXByZXNzaW9u X21ldGhvZCIsIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgc3RyVmFsKChTdHJpbmcgKikgc3Vi Y21kLT5kZWYpKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wQ29sdW1uUmVjdXJzZToK KwkJCWNhc2UgQVRfRHJvcENvbHVtbjoKKwkJCQlmbXRzdHIgPSBwc3ByaW50ZigiRFJPUCAlcyAl JXtjb2x1bW59SSAlJXtjYXNjYWRlfXMiLAorCQkJCQkJCQkgIGlzdHlwZSA/ICJBVFRSSUJVVEUi IDogIkNPTFVNTiIpOworCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKGZtdHN0ciwgMiwKKwkJCQkJ CQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkcm9wIGNvbHVtbiIsCisJCQkJCQkJCQkgImNv bHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJdG1wMiA9IG5ld19vYmp0 cmVlX1ZBKCJDQVNDQURFIiwgMSwKKwkJCQkJCQkJCSAgInByZXNlbnQiLCBPYmpUeXBlQm9vbCwg c3ViY21kLT5iZWhhdmlvcik7CisJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wLCAiY2FzY2Fk ZSIsIHRtcDIpOworCisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9v YmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkSW5kZXg6CisJCQkJewor CQkJCQlPaWQJCQlpZHhPaWQgPSBzdWItPmFkZHJlc3Mub2JqZWN0SWQ7CisJCQkJCUluZGV4U3Rt dCAgKmlzdG10OworCQkJCQlSZWxhdGlvbglpZHg7CisJCQkJCWNvbnN0IGNoYXIgKmlkeG5hbWU7 CisJCQkJCU9pZAkJCWNvbnN0ck9pZDsKKworCQkJCQlBc3NlcnQoSXNBKHN1YmNtZC0+ZGVmLCBJ bmRleFN0bXQpKTsKKwkJCQkJaXN0bXQgPSAoSW5kZXhTdG10ICopIHN1YmNtZC0+ZGVmOworCisJ CQkJCWlmICghaXN0bXQtPmlzY29uc3RyYWludCkKKwkJCQkJCWJyZWFrOworCisJCQkJCWlkeCA9 IHJlbGF0aW9uX29wZW4oaWR4T2lkLCBBY2Nlc3NTaGFyZUxvY2spOworCQkJCQlpZHhuYW1lID0g UmVsYXRpb25HZXRSZWxhdGlvbk5hbWUoaWR4KTsKKworCQkJCQljb25zdHJPaWQgPSBnZXRfcmVs YXRpb25fY29uc3RyYWludF9vaWQoCisJCQkJCQljbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCwg aWR4bmFtZSwgZmFsc2UpOworCisJCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJBREQgQ09OU1RS QUlOVCAle25hbWV9SSAle2RlZmluaXRpb259cyIsCisJCQkJCQkJCQkJIDMsICJ0eXBlIiwgT2Jq VHlwZVN0cmluZywgImFkZCBjb25zdHJhaW50IiwKKwkJCQkJCQkJCQkgIm5hbWUiLCBPYmpUeXBl U3RyaW5nLCBpZHhuYW1lLAorCQkJCQkJCQkJCSAiZGVmaW5pdGlvbiIsIE9ialR5cGVTdHJpbmcs CisJCQkJCQkJCQkJIHBnX2dldF9jb25zdHJhaW50ZGVmX2NvbW1hbmRfc2ltcGxlKGNvbnN0ck9p ZCkpOworCQkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXApKTsKKworCQkJCQlyZWxhdGlvbl9jbG9zZShpZHgsIEFjY2Vzc1NoYXJlTG9jayk7CisJCQkJ fQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FkZENvbnN0cmFpbnQ6CisJCQljYXNlIEFUX0Fk ZENvbnN0cmFpbnRSZWN1cnNlOgorCQkJCXsKKwkJCQkJLyogWFhYIG5lZWQgdG8gc2V0IHRoZSAi cmVjdXJzZSIgYml0IHNvbWV3aGVyZT8gKi8KKwkJCQkJT2lkCQkJY29uc3RyT2lkID0gc3ViLT5h ZGRyZXNzLm9iamVjdElkOworCQkJCQlib29sCQlpc251bGw7CisJCQkJCUhlYXBUdXBsZQl0dXA7 CisJCQkJCURhdHVtCQl2YWw7CisJCQkJCUNvbnN0cmFpbnQgKmNvbnN0cjsKKworCQkJCQlBc3Nl cnQoSXNBKHN1YmNtZC0+ZGVmLCBDb25zdHJhaW50KSk7CisJCQkJCWNvbnN0ciA9ICBjYXN0Tm9k ZShDb25zdHJhaW50LCBzdWJjbWQtPmRlZik7CisKKwkJCQkJaWYgKCFjb25zdHItPnNraXBfdmFs aWRhdGlvbikKKwkJCQkJeworCQkJCQkJdHVwID0gU2VhcmNoU3lzQ2FjaGUxKENPTlNUUk9JRCwg T2JqZWN0SWRHZXREYXR1bShjb25zdHJPaWQpKTsKKworCQkJCQkJaWYgKEhlYXBUdXBsZUlzVmFs aWQodHVwKSkKKwkJCQkJCXsKKwkJCQkJCQljaGFyCSAgICpjb25iaW47CisKKwkJCQkJCQkvKiBG ZXRjaCBjb25zdHJhaW50IGV4cHJlc3Npb24gaW4gcGFyc2V0cmVlIGZvcm0gKi8KKwkJCQkJCQl2 YWwgPSBTeXNDYWNoZUdldEF0dHIoQ09OU1RST0lELCB0dXAsCisJCQkJCQkJCQkJCQkgIEFudW1f cGdfY29uc3RyYWludF9jb25iaW4sICZpc251bGwpOworCisJCQkJCQkJaWYgKCFpc251bGwpCisJ CQkJCQkJeworCQkJCQkJCQljb25iaW4gPSBUZXh0RGF0dW1HZXRDU3RyaW5nKHZhbCk7CisJCQkJ CQkJCWV4cHJzID0gbGFwcGVuZChleHBycywgc3RyaW5nVG9Ob2RlKGNvbmJpbikpOworCQkJCQkJ CX0KKworCQkJCQkJCVJlbGVhc2VTeXNDYWNoZSh0dXApOworCQkJCQkJfQorCQkJCQl9CisKKwkJ CQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkFERCBDT05TVFJBSU5UICV7bmFtZX1JICV7ZGVmaW5p dGlvbn1zIiwKKwkJCQkJCQkJCQkgMywgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiYWRkIGNvbnN0 cmFpbnQiLAorCQkJCQkJCQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcsIGdldF9jb25zdHJhaW50 X25hbWUoY29uc3RyT2lkKSwKKwkJCQkJCQkJCQkgImRlZmluaXRpb24iLCBPYmpUeXBlU3RyaW5n LAorCQkJCQkJCQkJCSBwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5kX3NpbXBsZShjb25zdHJP aWQpKTsKKwkJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wKSk7CisJCQkJfQorCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FsdGVyQ29uc3RyYWludDoK KwkJCQl7CisJCQkJCU9pZAkJY29uc3RyT2lkID0gc3ViLT5hZGRyZXNzLm9iamVjdElkOworCQkJ CQlDb25zdHJhaW50ICpjID0gKENvbnN0cmFpbnQgKikgc3ViY21kLT5kZWY7CisKKwkJCQkJLyog aWYgbm8gY29uc3RyYWludCB3YXMgYWx0ZXJlZCwgc2lsZW50bHkgc2tpcCBpdCAqLworCQkJCQlp ZiAoIU9pZElzVmFsaWQoY29uc3RyT2lkKSkKKwkJCQkJCWJyZWFrOworCisJCQkJCUFzc2VydChJ c0EoYywgQ29uc3RyYWludCkpOworCQkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09O U1RSQUlOVCAle25hbWV9SSAle2RlZmVycmFibGV9cyAle2luaXRfZGVmZXJyZWR9cyIsCisJCQkJ CQkJCQkJIDIsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImFsdGVyIGNvbnN0cmFpbnQiLAorCQkJ CQkJCQkJCSAibmFtZSIsIE9ialR5cGVTdHJpbmcsIGdldF9jb25zdHJhaW50X25hbWUoY29uc3Ry T2lkKSk7CisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgImRlZmVycmFibGUiLCBjLT5k ZWZlcnJhYmxlID8KKwkJCQkJCQkJCQkgIkRFRkVSUkFCTEUiIDogIk5PVCBERUZFUlJBQkxFIik7 CisJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgImluaXRfZGVmZXJyZWQiLCBjLT5pbml0 ZGVmZXJyZWQgPworCQkJCQkJCQkJCSAiSU5JVElBTExZIERFRkVSUkVEIiA6ICJJTklUSUFMTFkg SU1NRURJQVRFIik7CisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcCkpOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9WYWxpZGF0ZUNv bnN0cmFpbnRSZWN1cnNlOgorCQkJY2FzZSBBVF9WYWxpZGF0ZUNvbnN0cmFpbnQ6CisJCQkJdG1w ID0gbmV3X29ianRyZWVfVkEoIlZBTElEQVRFIENPTlNUUkFJTlQgJXtjb25zdHJhaW50fUkiLCAy LAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInZhbGlkYXRlIGNvbnN0cmFpbnQi LAorCQkJCQkJCQkJICJjb25zdHJhaW50IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsK KwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsK KwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9Ecm9wQ29uc3RyYWludFJlY3Vyc2U6CisJCQljYXNl IEFUX0Ryb3BDb25zdHJhaW50OgorCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJEUk9QIENPTlNU UkFJTlQgJXtjb25zdHJhaW50fUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmlu ZywgImRyb3AgY29uc3RyYWludCIsCisJCQkJCQkJCQkgImNvbnN0cmFpbnQiLCBPYmpUeXBlU3Ry aW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0FsdGVyQ29sdW1u VHlwZToKKwkJCQl7CisJCQkJCVR1cGxlRGVzYyB0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihy ZWwpOworCQkJCQlGb3JtX3BnX2F0dHJpYnV0ZSBhdHQ7CisJCQkJCUNvbHVtbkRlZgkgICAqZGVm OworCisJCQkJCWF0dCA9ICYodHVwZGVzYy0+YXR0cnNbc3ViLT5hZGRyZXNzLm9iamVjdFN1Yklk IC0gMV0pOworCQkJCQlkZWYgPSAoQ29sdW1uRGVmICopIHN1YmNtZC0+ZGVmOworCQkJCQlBc3Nl cnQoSXNBKGRlZiwgQ29sdW1uRGVmKSk7CisKKwkJCQkJZm10c3RyID0gcHNwcmludGYoIkFMVEVS ICVzICUle2NvbHVtbn1JIFNFVCBEQVRBIFRZUEUgJSV7ZGF0YXR5cGV9VCAlJXtjb2xsYXRpb259 cyAlcyIsCisJCQkJCQkJCQkgIGlzdHlwZSA/ICJBVFRSSUJVVEUiIDogIkNPTFVNTiIsCisJCQkJ CQkJCQkgIGlzdHlwZSA/ICIle2Nhc2NhZGV9cyIgOiAiJXt1c2luZ31zIik7CisKKwkJCQkJdG1w ID0gbmV3X29ianRyZWVfVkEoZm10c3RyLCAyLAorCQkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVT dHJpbmcsICJhbHRlciBjb2x1bW4gdHlwZSIsCisJCQkJCQkJCQkJICJjb2x1bW4iLCBPYmpUeXBl U3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCQkvKiBhZGQgdGhlIFRZUEUgY2xhdXNlICovCisJ CQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgImRhdGF0eXBlIiwKKwkJCQkJCQkJCQkgbmV3 X29ianRyZWVfZm9yX3R5cGUoYXR0LT5hdHR0eXBpZCwKKwkJCQkJCQkJCQkJCQkJCSAgYXR0LT5h dHR0eXBtb2QpKTsKKworCQkJCQkvKiBhZGQgYSBDT0xMQVRFIGNsYXVzZSwgaWYgbmVlZGVkICov CisJCQkJCXRtcDIgPSBuZXdfb2JqdHJlZV9WQSgiQ09MTEFURSAle25hbWV9RCIsIDApOworCQkJ CQlpZiAoT2lkSXNWYWxpZChhdHQtPmF0dGNvbGxhdGlvbikpCisJCQkJCXsKKwkJCQkJCU9ialRy ZWUgKmNvbGxuYW1lOworCisJCQkJCQljb2xsbmFtZSA9IG5ld19vYmp0cmVlX2Zvcl9xdWFsbmFt ZV9pZChDb2xsYXRpb25SZWxhdGlvbklkLAorCQkJCQkJCQkJCQkJCQkJICAgYXR0LT5hdHRjb2xs YXRpb24pOworCQkJCQkJYXBwZW5kX29iamVjdF9vYmplY3QodG1wMiwgIm5hbWUiLCBjb2xsbmFt ZSk7CisJCQkJCX0KKwkJCQkJZWxzZQorCQkJCQkJYXBwZW5kX2Jvb2xfb2JqZWN0KHRtcDIsICJw cmVzZW50IiwgZmFsc2UpOworCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICJjb2xsYXRp b24iLCB0bXAyKTsKKworCQkJCQkvKiBpZiBub3QgYSBjb21wb3NpdGUgdHlwZSwgYWRkIHRoZSBV U0lORyBjbGF1c2UgKi8KKwkJCQkJaWYgKCFpc3R5cGUpCisJCQkJCXsKKwkJCQkJCS8qCisJCQkJ CQkgKiBJZiB0aGVyZSdzIGEgVVNJTkcgY2xhdXNlLCB0cmFuc2Zvcm1BbHRlclRhYmxlU3RtdAor CQkJCQkJICogcmFuIGl0IHRocm91Z2ggdHJhbnNmb3JtRXhwciBhbmQgc3RvcmVkIHRoZQorCQkJ CQkJICogcmVzdWx0aW5nIG5vZGUgaW4gY29va2VkX2RlZmF1bHQsIHdoaWNoIHdlIGNhbiB1c2UK KwkJCQkJCSAqIGhlcmUuCisJCQkJCQkgKi8KKwkJCQkJCXRtcDIgPSBuZXdfb2JqdHJlZV9WQSgi VVNJTkcgJXtleHByZXNzaW9ufXMiLCAwKTsKKwkJCQkJCWlmIChkZWYtPnJhd19kZWZhdWx0KQor CQkJCQkJeworCQkJCQkJCURhdHVtCWRlcGFyc2VkOworCQkJCQkJCWNoYXIgICAqZGVmZXhwcjsK KworCQkJCQkJCWV4cHJzID0gbGFwcGVuZChleHBycywgZGVmLT5jb29rZWRfZGVmYXVsdCk7CisJ CQkJCQkJZGVmZXhwciA9IG5vZGVUb1N0cmluZyhkZWYtPmNvb2tlZF9kZWZhdWx0KTsKKwkJCQkJ CQlkZXBhcnNlZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDIocGdfZ2V0X2V4cHIsCisJCQkJCQkJCQkJ CQkJCSAgIENTdHJpbmdHZXRUZXh0RGF0dW0oZGVmZXhwciksCisJCQkJCQkJCQkJCQkJCSAgIFJl bGF0aW9uR2V0UmVsaWQocmVsKSk7CisJCQkJCQkJYXBwZW5kX3N0cmluZ19vYmplY3QodG1wMiwg ImV4cHJlc3Npb24iLAorCQkJCQkJCQkJCQkJIFRleHREYXR1bUdldENTdHJpbmcoZGVwYXJzZWQp KTsKKwkJCQkJCX0KKwkJCQkJCWVsc2UKKwkJCQkJCQlhcHBlbmRfYm9vbF9vYmplY3QodG1wMiwg InByZXNlbnQiLCBmYWxzZSk7CisJCQkJCQlhcHBlbmRfb2JqZWN0X29iamVjdCh0bXAsICJ1c2lu ZyIsIHRtcDIpOworCQkJCQl9CisKKwkJCQkJLyogaWYgaXQncyBhIGNvbXBvc2l0ZSB0eXBlLCBh ZGQgdGhlIENBU0NBREUgY2xhdXNlICovCisJCQkJCWlmIChpc3R5cGUpCisJCQkJCXsKKwkJCQkJ CXRtcDIgPSBuZXdfb2JqdHJlZV9WQSgiQ0FTQ0FERSIsIDApOworCQkJCQkJaWYgKHN1YmNtZC0+ YmVoYXZpb3IgIT0gRFJPUF9DQVNDQURFKQorCQkJCQkJCWFwcGVuZF9ib29sX29iamVjdCh0bXAy LCAicHJlc2VudCIsIGZhbHNlKTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgImNh c2NhZGUiLCB0bXAyKTsKKwkJCQkJfQorCisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCX0KKwkJCQlicmVhazsKKworI2lmZGVmIFRP RE9MSVNUCisJCQljYXNlIEFUX0FsdGVyQ29sdW1uR2VuZXJpY09wdGlvbnM6CisJCQkJdG1wID0g ZGVwYXJzZV9GZHdPcHRpb25zKChMaXN0ICopIHN1YmNtZC0+ZGVmLAorCQkJCQkJCQkJCSBzdWJj bWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2Jq ZWN0KHRtcCkpOworCQkJCWJyZWFrOworI2VuZGlmCisJCQljYXNlIEFUX0NoYW5nZU93bmVyOgor CQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJPV05FUiBUTyAle293bmVyfUkiLAorCQkJCQkJCQkJ IDIsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNoYW5nZSBvd25lciIsCisJCQkJCQkJCQkgIm93 bmVyIiwgIE9ialR5cGVTdHJpbmcsCisJCQkJCQkJCQkgZ2V0X3JvbGVzcGVjX25hbWUoc3ViY21k LT5uZXdvd25lcikpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0NsdXN0ZXJPbjoKKwkJCQl0 bXAgPSBuZXdfb2JqdHJlZV9WQSgiQ0xVU1RFUiBPTiAle2luZGV4fUkiLCAyLAorCQkJCQkJCQkJ ICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImNsdXN0ZXIgb24iLAorCQkJCQkJCQkJICJpbmRleCIs IE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3Vi Y21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRf RHJvcENsdXN0ZXI6CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIlNFVCBXSVRIT1VUIENMVVNU RVIiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCB3aXRob3V0IGNs dXN0ZXIiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVj dCh0bXApKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRMb2dnZWQ6CisJCQkJdG1wID0g bmV3X29ianRyZWVfVkEoIlNFVCBMT0dHRUQiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlw ZVN0cmluZywgInNldCBsb2dnZWQiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBu ZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9TZXRVbkxv Z2dlZDoKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU0VUIFVOTE9HR0VEIiwgMSwKKwkJCQkJ CQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJzZXQgdW5sb2dnZWQiKTsKKwkJCQlzdWJjbWRz ID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsK KworLyoKK3JlbW92ZWQgZmVhdHVyZQorCQkJY2FzZSBBVF9BZGRPaWRzUmVjdXJzZToKKwkJCWNh c2UgQVRfQWRkT2lkczoKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU0VUIFdJVEggT0lEUyIs IDEsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IHdpdGggb2lkcyIpOwor CQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOwor CQkJCWJyZWFrOworKi8KKwkJCWNhc2UgQVRfRHJvcE9pZHM6CisJCQkJdG1wID0gbmV3X29ianRy ZWVfVkEoIlNFVCBXSVRIT1VUIE9JRFMiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0 cmluZywgInNldCB3aXRob3V0IG9pZHMiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRz LCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVRfU2V0QWNj ZXNzTWV0aG9kOgorCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJTRVQgQUNDRVNTIE1FVEhPRCAl e2FjY2Vzc19tZXRob2R9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi c2V0IGFjY2VzcyBtZXRob2QiLAorCQkJCQkJCQkJICJhY2Nlc3NfbWV0aG9kIiwgT2JqVHlwZVN0 cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdf b2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsKKwkJCWNhc2UgQVRfU2V0VGFibGVTcGFj ZToKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiU0VUIFRBQkxFU1BBQ0UgJXt0YWJsZXNwYWNl fUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInNldCB0YWJsZXNwYWNl IiwKKwkJCQkJCQkJCSAidGFibGVzcGFjZSIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7 CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfU2V0UmVsT3B0aW9uczoKKwkJCWNhc2UgQVRfUmVz ZXRSZWxPcHRpb25zOgorCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KAorCQkJCQkJCQkJICBkZXBhcnNlX1JlbFNldE9wdGlvbnMoc3ViY21kKSkpOworCQkJ CWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJsZVRyaWc6CisJCQkJdG1wID0gbmV3X29ianRyZWVf VkEoIkVOQUJMRSBUUklHR0VSICV7dHJpZ2dlcn1JIiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9i alR5cGVTdHJpbmcsICJlbmFibGUgdHJpZ2dlciIsCisJCQkJCQkJCQkgInRyaWdnZXIiLCBPYmpU eXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0VuYWJs ZUFsd2F5c1RyaWc6CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBBTFdBWVMgVFJJ R0dFUiAle3RyaWdnZXJ9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAi ZW5hYmxlIGFsd2F5cyB0cmlnZ2VyIiwKKwkJCQkJCQkJCSAidHJpZ2dlciIsIE9ialR5cGVTdHJp bmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29i amVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlUmVwbGlj YVRyaWc6CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBSRVBMSUNBIFRSSUdHRVIg JXt0cmlnZ2VyfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJs ZSByZXBsaWNhIHRyaWdnZXIiLAorCQkJCQkJCQkJICJ0cmlnZ2VyIiwgT2JqVHlwZVN0cmluZywg c3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0 X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxlVHJpZzoKKwkJ CQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBUUklHR0VSICV7dHJpZ2dlcn1JIiwgMiwK KwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNhYmxlIHRyaWdnZXIiLAorCQkJ CQkJCQkJICJ0cmlnZ2VyIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJj bWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVh azsKKworCQkJY2FzZSBBVF9FbmFibGVUcmlnQWxsOgorCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZB KCJFTkFCTEUgVFJJR0dFUiBBTEwiLCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmlu ZywgImVuYWJsZSB0cmlnZ2VyIGFsbCIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMs IG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Rpc2Fi bGVUcmlnQWxsOgorCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJESVNBQkxFIFRSSUdHRVIgQUxM IiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNhYmxlIHRyaWdnZXIg YWxsIik7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3Qo dG1wKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlVHJpZ1VzZXI6CisJCQkJdG1w ID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBUUklHR0VSIFVTRVIiLCAxLAorCQkJCQkJCQkJICJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSB0cmlnZ2VyIHVzZXIiKTsKKwkJCQlzdWJjbWRz ID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsK KworCQkJY2FzZSBBVF9EaXNhYmxlVHJpZ1VzZXI6CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEo IkRJU0FCTEUgVFJJR0dFUiBVU0VSIiwgMSwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJp bmcsICJkaXNhYmxlIHRyaWdnZXIgdXNlciIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Vu YWJsZVJ1bGU6CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBSVUxFICV7cnVsZX1J IiwgMiwKKwkJCQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJlbmFibGUgcnVsZSIsCisJ CQkJCQkJCQkgInJ1bGUiLCBPYmpUeXBlU3RyaW5nLCBzdWJjbWQtPm5hbWUpOworCQkJCXN1YmNt ZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFr OworCisJCQljYXNlIEFUX0VuYWJsZUFsd2F5c1J1bGU6CisJCQkJdG1wID0gbmV3X29ianRyZWVf VkEoIkVOQUJMRSBBTFdBWVMgUlVMRSAle3J1bGV9SSIsIDIsCisJCQkJCQkJCQkgInR5cGUiLCBP YmpUeXBlU3RyaW5nLCAiZW5hYmxlIGFsd2F5cyBydWxlIiwKKwkJCQkJCQkJCSAicnVsZSIsIE9i alR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5h YmxlUmVwbGljYVJ1bGU6CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBSRVBMSUNB IFJVTEUgJXtydWxlfUkiLCAyLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVu YWJsZSByZXBsaWNhIHJ1bGUiLAorCQkJCQkJCQkJICJydWxlIiwgT2JqVHlwZVN0cmluZywgc3Vi Y21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29i amVjdCh0bXApKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxlUnVsZToKKwkJCQl0 bXAgPSBuZXdfb2JqdHJlZV9WQSgiRElTQUJMRSBSVUxFICV7cnVsZX1JIiwgMiwKKwkJCQkJCQkJ CSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNhYmxlIHJ1bGUiLAorCQkJCQkJCQkJICJydWxl IiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChz dWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBB VF9BZGRJbmhlcml0OgorCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJJTkhFUklUICV7cGFyZW50 fUQiLAorCQkJCQkJCQkJIDIsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImluaGVyaXQiLAorCQkJ CQkJCQkJICJwYXJlbnQiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19vYmp0cmVlX2Zv cl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJCQkJIHN1Yi0+ YWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19v YmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX0Ryb3BJbmhlcml0 OgorCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJOTyBJTkhFUklUICV7cGFyZW50fUQiLAorCQkJ CQkJCQkJIDIsICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImRyb3AgaW5oZXJpdCIsCisJCQkJCQkJ CQkgInBhcmVudCIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1 YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgc3ViLT5hZGRy ZXNzLm9iamVjdElkKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfQWRkT2Y6CisJCQkJdG1w ID0gbmV3X29ianRyZWVfVkEoIk9GICV7dHlwZV9vZn1UIiwKKwkJCQkJCQkJCSAyLCAidHlwZSIs IE9ialR5cGVTdHJpbmcsICJhZGQgb2YiLAorCQkJCQkJCQkJICJ0eXBlX29mIiwgT2JqVHlwZU9i amVjdCwKKwkJCQkJCQkJCSBuZXdfb2JqdHJlZV9mb3JfdHlwZShzdWItPmFkZHJlc3Mub2JqZWN0 SWQsIC0xKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmpl Y3QodG1wKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRHJvcE9mOgorCQkJCXRtcCA9IG5l d19vYmp0cmVlX1ZBKCJOT1QgT0YiLAorCQkJCQkJCQkJIDEsICJ0eXBlIiwgT2JqVHlwZVN0cmlu ZywgIm5vdCBvZiIpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOworCisJCQljYXNlIEFUX1JlcGxpY2FJZGVudGl0eToK KwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiUkVQTElDQSBJREVOVElUWSAle2lkZW50fXMiLCAx LAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgInJlcGxpY2EgaWRlbnRpdHkiKTsK KwkJCQlzd2l0Y2ggKCgoUmVwbGljYUlkZW50aXR5U3RtdCAqKSBzdWJjbWQtPmRlZiktPmlkZW50 aXR5X3R5cGUpCisJCQkJeworCQkJCQljYXNlIFJFUExJQ0FfSURFTlRJVFlfREVGQVVMVDoKKwkJ CQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0KHRtcCwgImlkZW50IiwgIkRFRkFVTFQiKTsKKwkJCQkJ CWJyZWFrOworCQkJCQljYXNlIFJFUExJQ0FfSURFTlRJVFlfRlVMTDoKKwkJCQkJCWFwcGVuZF9z dHJpbmdfb2JqZWN0KHRtcCwgImlkZW50IiwgIkZVTEwiKTsKKwkJCQkJCWJyZWFrOworCQkJCQlj YXNlIFJFUExJQ0FfSURFTlRJVFlfTk9USElORzoKKwkJCQkJCWFwcGVuZF9zdHJpbmdfb2JqZWN0 KHRtcCwgImlkZW50IiwgIk5PVEhJTkciKTsKKwkJCQkJCWJyZWFrOworCQkJCQljYXNlIFJFUExJ Q0FfSURFTlRJVFlfSU5ERVg6CisJCQkJCQl0bXAyID0gbmV3X29ianRyZWVfVkEoIlVTSU5HIElO REVYICV7aW5kZXh9SSIsIDEsCisJCQkJCQkJCQkJCSAgImluZGV4IiwgT2JqVHlwZVN0cmluZywK KwkJCQkJCQkJCQkJICAoKFJlcGxpY2FJZGVudGl0eVN0bXQgKikgc3ViY21kLT5kZWYpLT5uYW1l KTsKKwkJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgImlkZW50IiwgdG1wMik7CisJCQkJ CQlicmVhazsKKwkJCQl9CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVj dF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisKKwkJCWNhc2UgQVRfRW5hYmxlUm93U2VjdXJp dHk6CisJCQkJdG1wID0gbmV3X29ianRyZWVfVkEoIkVOQUJMRSBST1cgTEVWRUwgU0VDVVJJVFki LCAxLAorCQkJCQkJCQkJICJ0eXBlIiwgT2JqVHlwZVN0cmluZywgImVuYWJsZSByb3cgc2VjdXJp dHkiKTsKKwkJCQlzdWJjbWRzID0gbGFwcGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0 bXApKTsKKwkJCQlicmVhazsKKworCQkJY2FzZSBBVF9EaXNhYmxlUm93U2VjdXJpdHk6CisJCQkJ dG1wID0gbmV3X29ianRyZWVfVkEoIkRJU0FCTEUgUk9XIExFVkVMIFNFQ1VSSVRZIiwgMSwKKwkJ CQkJCQkJCSAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJkaXNhYmxlIHJvdyBzZWN1cml0eSIpOwor CQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOwor CQkJCWJyZWFrOworI2lmZGVmIFRPRE9MSVNUCisJCQljYXNlIEFUX0dlbmVyaWNPcHRpb25zOgor CQkJCXRtcCA9IGRlcGFyc2VfRmR3T3B0aW9ucygoTGlzdCAqKSBzdWJjbWQtPmRlZiwgTlVMTCk7 CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCWNhc2UgQVRfQXR0YWNoUGFydGl0aW9uOgorCQkJCXRt cCA9IG5ld19vYmp0cmVlX1ZBKCJBVFRBQ0ggUEFSVElUSU9OICV7cGFydGl0aW9uX2lkZW50aXR5 fUQgJXtwYXJ0aXRpb25fYm91bmR9cyIsCisJCQkJCQkJCQkgMywgInR5cGUiLCBPYmpUeXBlU3Ry aW5nLCAiYXR0YWNoIHBhcnRpdGlvbiIsCisJCQkJCQkJCQkgInBhcnRpdGlvbl9pZGVudGl0eSIs IE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29ianRyZWVfZm9yX3F1YWxuYW1lX2lkKFJl bGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJCQkgc3ViLT5hZGRyZXNzLm9iamVjdElk KSwKKwkJCQkJCQkJCSJwYXJ0aXRpb25fYm91bmQiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJCQkJ UmVsYXRpb25HZXRQYXJ0aXRpb25Cb3VuZChzdWItPmFkZHJlc3Mub2JqZWN0SWQpKTsKKworCQkJ CXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJ CWJyZWFrOworCQkJY2FzZSBBVF9EZXRhY2hQYXJ0aXRpb246CisJCQkJdG1wID0gbmV3X29ianRy ZWVfVkEoIkRFVEFDSCBQQVJUSVRJT04gJXtwYXJ0aXRpb25faWRlbnRpdHl9RCIsCisJCQkJCQkJ CQkgMiwgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAiZGV0YWNoIHBhcnRpdGlvbiIsCisJCQkJCQkJ CQkgInBhcnRpdGlvbl9pZGVudGl0eSIsIE9ialR5cGVPYmplY3QsCisJCQkJCQkJCQkgbmV3X29i anRyZWVfZm9yX3F1YWxuYW1lX2lkKFJlbGF0aW9uUmVsYXRpb25JZCwKKwkJCQkJCQkJCQkJCQkJ CQkgc3ViLT5hZGRyZXNzLm9iamVjdElkKSk7CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21k cywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7CisJCQkJYnJlYWs7CisJCQljYXNlIEFUX0RldGFj aFBhcnRpdGlvbkZpbmFsaXplOgorCQkJCXRtcCA9IG5ld19vYmp0cmVlX1ZBKCJERVRBQ0ggUEFS VElUSU9OICV7cGFydGl0aW9uX2lkZW50aXR5fUQgRklOQUxJWkUiLAorCQkJCQkJCQkJIDIsICJ0 eXBlIiwgT2JqVHlwZVN0cmluZywgImRldGFjaCBwYXJ0aXRpb24gZmluYWxpemUiLAorCQkJCQkJ CQkJICJwYXJ0aXRpb25faWRlbnRpdHkiLCBPYmpUeXBlT2JqZWN0LAorCQkJCQkJCQkJIG5ld19v Ymp0cmVlX2Zvcl9xdWFsbmFtZV9pZChSZWxhdGlvblJlbGF0aW9uSWQsCisJCQkJCQkJCQkJCQkJ CQkJIHN1Yi0+YWRkcmVzcy5vYmplY3RJZCkpOworCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNt ZHMsIG5ld19vYmplY3Rfb2JqZWN0KHRtcCkpOworCQkJCWJyZWFrOworCQkJY2FzZSBBVF9BZGRJ ZGVudGl0eToKKwkJCQl7CisJCQkJCUF0dHJOdW1iZXIJYXR0bnVtOworCQkJCQlPaWQJCQlzZXFf cmVsaWQ7CisJCQkJCU9ialRyZWUJKnNlcWRlZjsKKwkJCQkJQ29sdW1uRGVmICAqY29sZGVmID0g KENvbHVtbkRlZiAqKSBzdWJjbWQtPmRlZjsKKworCQkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgi QUxURVIgQ09MVU1OICV7Y29sdW1ufUkgQUREICV7aWRlbnRpdHlfY29sdW1ufXMiLAorCQkJCQkJ CQkJCSAyLCAidHlwZSIsIE9ialR5cGVTdHJpbmcsICJhZGQgaWRlbnRpdHkiLAorCQkJCQkJCQkJ CSAiY29sdW1uIiwgT2JqVHlwZVN0cmluZywgc3ViY21kLT5uYW1lKTsKKworCQkJCQlhdHRudW0g PSBnZXRfYXR0bnVtKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgc3ViY21kLT5uYW1lKTsKKwkJCQkJ c2VxX3JlbGlkID0gZ2V0SWRlbnRpdHlTZXF1ZW5jZShSZWxhdGlvbkdldFJlbGlkKHJlbCksIGF0 dG51bSwgdHJ1ZSk7CisJCQkJCXNlcWRlZiA9IGRlcGFyc2VfQ29sdW1uSWRlbnRpdHkoc2VxX3Jl bGlkLCBjb2xkZWYtPmlkZW50aXR5LCBmYWxzZSk7CisKKwkJCQkJYXBwZW5kX29iamVjdF9vYmpl Y3QodG1wLCAiaWRlbnRpdHlfY29sdW1uIiwgc2VxZGVmKTsKKworCQkJCQlzdWJjbWRzID0gbGFw cGVuZChzdWJjbWRzLCBuZXdfb2JqZWN0X29iamVjdCh0bXApKTsKKwkJCQl9CisJCQkJYnJlYWs7 CisJCQljYXNlIEFUX1NldElkZW50aXR5OgorCQkJCXsKKwkJCQkJRGVmRWxlbQkqZGVmZWw7CisJ CQkJCWNoYXIJCWlkZW50aXR5ID0gMDsKKwkJCQkJT2JqVHJlZQkgICAqc2VxZGVmOworCQkJCQlB dHRyTnVtYmVyCWF0dG51bTsKKwkJCQkJT2lkCQkJc2VxX3JlbGlkOworCisKKwkJCQkJdG1wID0g bmV3X29ianRyZWVfVkEoIkFMVEVSIENPTFVNTiAle2NvbHVtbn1JICV7ZGVmaW5pdGlvbn1zIiwK KwkJCQkJCQkJCQkgMiwgInR5cGUiLCBPYmpUeXBlU3RyaW5nLCAic2V0IGlkZW50aXR5IiwKKwkJ CQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVTdHJpbmcsIHN1YmNtZC0+bmFtZSk7CisKKwkJCQkJ aWYgKHN1YmNtZC0+ZGVmKQorCQkJCQl7CisJCQkJCQlMaXN0CSAgICpkZWYgPSAoTGlzdCAqKSBz dWJjbWQtPmRlZjsKKworCQkJCQkJQXNzZXJ0KElzQShzdWJjbWQtPmRlZiwgTGlzdCkpOworCisJ CQkJCQlkZWZlbCA9IGxpbml0aWFsX25vZGUoRGVmRWxlbSwgZGVmKTsKKwkJCQkJCWlkZW50aXR5 ID0gZGVmR2V0SW50MzIoZGVmZWwpOworCQkJCQl9CisKKwkJCQkJYXR0bnVtID0gZ2V0X2F0dG51 bShSZWxhdGlvbkdldFJlbGlkKHJlbCksIHN1YmNtZC0+bmFtZSk7CisJCQkJCXNlcV9yZWxpZCA9 IGdldElkZW50aXR5U2VxdWVuY2UoUmVsYXRpb25HZXRSZWxpZChyZWwpLCBhdHRudW0sIHRydWUp OworCQkJCQlzZXFkZWYgPSBkZXBhcnNlX0NvbHVtbklkZW50aXR5KHNlcV9yZWxpZCwgaWRlbnRp dHksIHRydWUpOworCisJCQkJCWFwcGVuZF9vYmplY3Rfb2JqZWN0KHRtcCwgImRlZmluaXRpb24i LCBzZXFkZWYpOworCisJCQkJCXN1YmNtZHMgPSBsYXBwZW5kKHN1YmNtZHMsIG5ld19vYmplY3Rf b2JqZWN0KHRtcCkpOworCQkJCQlicmVhazsKKwkJCQl9CisJCQljYXNlIEFUX0Ryb3BJZGVudGl0 eToKKwkJCQl0bXAgPSBuZXdfb2JqdHJlZV9WQSgiQUxURVIgQ09MVU1OICV7Y29sdW1ufUkgRFJP UCBJREVOVElUWSAle2lmX25vdF9leGlzdHN9cyIsCisJCQkJCQkJCQkgMywgInR5cGUiLCBPYmpU eXBlU3RyaW5nLCAiZHJvcCBpZGVudGl0eSIsCisJCQkJCQkJCQkgImNvbHVtbiIsIE9ialR5cGVT dHJpbmcsIHN1YmNtZC0+bmFtZSwKKwkJCQkJCQkJCSAiaWZfbm90X2V4aXN0cyIsIE9ialR5cGVT dHJpbmcsCisJCQkJCQkJCQkgc3ViY21kLT5taXNzaW5nX29rID8gIklGIEVYSVNUUyIgOiAiIik7 CisJCQkJc3ViY21kcyA9IGxhcHBlbmQoc3ViY21kcywgbmV3X29iamVjdF9vYmplY3QodG1wKSk7 CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVsb2coV0FSTklORywgInVuc3VwcG9ydGVk IGFsdGVyIHRhYmxlIHN1YnR5cGUgJWQiLAorCQkJCQkgc3ViY21kLT5zdWJ0eXBlKTsKKwkJCQli cmVhazsKKwkJfQorCisJCS8qCisJCSAqIFdlIGRvbid0IHN1cHBvcnQgcmVwbGljYXRpbmcgQUxU RVIgVEFCTEUgd2hpY2ggY29udGFpbnMgdm9sYXRpbGUKKwkJICogZnVuY3Rpb25zIGJlY2F1c2Ug SXQncyBwb3NzaWJsZSB0aGUgZnVuY3Rpb25zIGNvbnRhaW4gRERML0RNTCBpbgorCQkgKiB3aGlj aCBjYXNlIHRoZXNlIG9wZXJ0aW9ucyB3aWxsIGJlIGV4ZWN1dGVkIHR3aWNlIGFuZCBjYXVzZQor CQkgKiBkdXBsaWNhdGUgZGF0YS4gSW4gYWRkaXRpb24sIHdlIGRvbid0IGtub3cgd2hldGhlciB0 aGUgdGFibGVzIGJlaW5nCisJCSAqIGFjY2Vzc2VkIGJ5IHRoZXNlIERETC9ETUwgYXJlIHB1Ymxp c2hlZCBvciBub3QuIFNvIGJsaW5kbHkgYWxsb3dpbmcKKwkJICogc3VjaCBmdW5jdGlvbnMgY2Fu IGFsbG93IHVuaW50ZW5kZWQgY2xhdXNlcyBsaWtlIHRoZSB0YWJsZXMgYWNjZXNzZWQKKwkJICog aW4gdGhvc2UgZnVuY3Rpb25zIG1heSBub3QgZXZlbiBleGlzdCBvbiB0aGUgc3Vic2NyaWJlci1z aWRlLgorCQkgKi8KKwkJaWYgKGNvbnRhaW5fdm9sYXRpbGVfZnVuY3Rpb25zKChOb2RlICopIGV4 cHJzKSkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9O T1RfU1VQUE9SVEVEKSwKKwkJCQkJIGVycm1zZygiQUxURVIgVEFCTEUgY29tbWFuZCB1c2luZyB2 b2xhdGlsZSBmdW5jdGlvbiBjYW5ub3QgYmUgcmVwbGljYXRlZCIpKSk7CisKKwkJLyoKKwkJICog Q2xlYW4gdGhlIGxpc3QgYXMgd2UgYWxyZWFkeSBjb25maXJtZWQgdGhlcmUgaXMgbm8gdm9sYXRp bGUKKwkJICogZnVuY3Rpb24uCisJCSAqLworCQlsaXN0X2ZyZWUoZXhwcnMpOworCQlleHBycyA9 IE5JTDsKKwl9CisKKwl0YWJsZV9jbG9zZShyZWwsIEFjY2Vzc1NoYXJlTG9jayk7CisKKwlpZiAo bGlzdF9sZW5ndGgoc3ViY21kcykgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwlhcHBlbmRfYXJy YXlfb2JqZWN0KGFsdGVyVGFibGVTdG10LCAic3ViY21kcyIsIHN1YmNtZHMpOworCXJldHVybiBh bHRlclRhYmxlU3RtdDsKK30KKworLyoKKyAqIEhhbmRsZSBkZXBhcnNpbmcgb2Ygc2ltcGxlIGNv bW1hbmRzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGNvdmVyIGFsbCBjYXNlcyBoYW5k bGVkIGluIFByb2Nlc3NVdGlsaXR5U2xvdy4KKyAqLworc3RhdGljIE9ialRyZWUgKgorZGVwYXJz ZV9zaW1wbGVfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT2lkCQkJb2JqZWN0 SWQ7CisJTm9kZQkgICAqcGFyc2V0cmVlOworCU9ialRyZWUJICAgKmNvbW1hbmQ7CisKKwlBc3Nl cnQoY21kLT50eXBlID09IFNDVF9TaW1wbGUpOworCisJcGFyc2V0cmVlID0gY21kLT5wYXJzZXRy ZWU7CisJb2JqZWN0SWQgPSBjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0SWQ7CisKKwkvKiBU aGlzIHN3aXRjaCBuZWVkcyB0byBoYW5kbGUgZXZlcnl0aGluZyB0aGF0IFByb2Nlc3NVdGlsaXR5 U2xvdyBkb2VzICovCisJc3dpdGNoIChub2RlVGFnKHBhcnNldHJlZSkpCisJeworCQljYXNlIFRf Q3JlYXRlU2NoZW1hU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZVNjaGVtYVN0bXQo b2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlU3RtdDoK KwkJCWNvbW1hbmQgPSBkZXBhcnNlX0NyZWF0ZVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJ CQlicmVhazsKKworCQljYXNlIFRfQ3JlYXRlU2VxU3RtdDoKKwkJCWNvbW1hbmQgPSBkZXBhcnNl X0NyZWF0ZVNlcVN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQljYXNl IFRfQWx0ZXJTZXFTdG10OgorCQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJTZXFTdG10KG9iamVj dElkLCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX0FsdGVyT3duZXJTdG10Ogor CQkJY29tbWFuZCA9IGRlcGFyc2VfQWx0ZXJPd25lclN0bXQoY21kLT5kLnNpbXBsZS5hZGRyZXNz LCBwYXJzZXRyZWUpOworCQkJYnJlYWs7CisKKwkJY2FzZSBUX1JlbmFtZVN0bXQ6CisJCQljb21t YW5kID0gZGVwYXJzZV9SZW5hbWVTdG10KGNtZC0+ZC5zaW1wbGUuYWRkcmVzcywgcGFyc2V0cmVl KTsKKwkJCWJyZWFrOworCisJCWNhc2UgVF9JbmRleFN0bXQ6CisJCQljb21tYW5kID0gZGVwYXJz ZV9JbmRleFN0bXQob2JqZWN0SWQsIHBhcnNldHJlZSk7CisJCQlicmVhazsKKworCQlkZWZhdWx0 OgorCQkJY29tbWFuZCA9IE5VTEw7CisJCQllbG9nKExPRywgInVucmVjb2duaXplZCBub2RlIHR5 cGUgaW4gZGVwYXJzZSBjb21tYW5kOiAlZCIsCisJCQkJIChpbnQpIG5vZGVUYWcocGFyc2V0cmVl KSk7CisJfQorCisJcmV0dXJuIGNvbW1hbmQ7Cit9CisKK2NoYXIgKgorZGVwYXJzZV9kcm9wX3Nl cXVlbmNlKGNvbnN0IGNoYXIgKm9iamlkZW50aXR5LCBEcm9wQmVoYXZpb3IgYmVoYXZpb3IpCit7 CisJU3RyaW5nSW5mb0RhdGEgIHN0cjsKKwljaGFyCQkgICAqY29tbWFuZDsKKwlPYmpUcmVlCQkq c3RtdCwgKnN0bXQyOworCWNoYXIJCSAgICpmbXQ7CisJSnNvbmIJCSAgKmpzb25iOworCisJaW5p dFN0cmluZ0luZm8oJnN0cik7CisJZm10ID0gcHNwcmludGYoIkRST1AgU0VRVUVOQ0UgSUYgRVhJ U1RTICUle29iamlkZW50aXR5fXMgJSV7Y2FzY2FkZX1zIik7CisJc3RtdCA9IG5ld19vYmp0cmVl X1ZBKGZtdCwgMSwgIm9iamlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCW9iamlkZW50 aXR5KTsKKwlzdG10MiA9IG5ld19vYmp0cmVlX1ZBKCJDQVNDQURFIiwgMSwKKwkJCQkJCQkicHJl c2VudCIsIE9ialR5cGVCb29sLCBiZWhhdmlvciA9PSBEUk9QX0NBU0NBREUpOworCWFwcGVuZF9v YmplY3Rfb2JqZWN0KHN0bXQsICJjYXNjYWRlIiwgc3RtdDIpOworCWpzb25iID0gb2JqdHJlZV90 b19qc29uYihzdG10KTsKKwljb21tYW5kID0gSnNvbmJUb0NTdHJpbmcoJnN0ciwgJmpzb25iLT5y b290LCAxMjgpOworCisJcmV0dXJuIGNvbW1hbmQ7Cit9CisKK2NoYXIgKgorZGVwYXJzZV9kcm9w X3NjaGVtYShjb25zdCBjaGFyICpvYmppZGVudGl0eSwgRHJvcEJlaGF2aW9yIGJlaGF2aW9yKQor eworCVN0cmluZ0luZm9EYXRhICBzdHI7CisJY2hhcgkJICAgKmNvbW1hbmQ7CisJT2JqVHJlZQkJ KnN0bXQsICpzdG10MjsKKwljaGFyCQkgICAqZm10OworCUpzb25iCQkgICpqc29uYjsKKworCWlu aXRTdHJpbmdJbmZvKCZzdHIpOworCWZtdCA9IHBzcHJpbnRmKCJEUk9QIFNDSEVNQSBJRiBFWElT VFMgJSV7b2JqaWRlbnRpdHl9cyAlJXtjYXNjYWRlfXMiKTsKKwlzdG10ID0gbmV3X29ianRyZWVf VkEoZm10LCAxLCAib2JqaWRlbnRpdHkiLCBPYmpUeXBlU3RyaW5nLAorCQkJCQkJb2JqaWRlbnRp dHkpOworCXN0bXQyID0gbmV3X29ianRyZWVfVkEoIkNBU0NBREUiLCAxLAorCQkJCQkJCSJwcmVz ZW50IiwgT2JqVHlwZUJvb2wsIGJlaGF2aW9yID09IERST1BfQ0FTQ0FERSk7CisJYXBwZW5kX29i amVjdF9vYmplY3Qoc3RtdCwgImNhc2NhZGUiLCBzdG10Mik7CisJanNvbmIgPSBvYmp0cmVlX3Rv X2pzb25iKHN0bXQpOworCWNvbW1hbmQgPSBKc29uYlRvQ1N0cmluZygmc3RyLCAmanNvbmItPnJv b3QsIDEyOCk7CisKKwlyZXR1cm4gY29tbWFuZDsKK30KKworY2hhciAqCitkZXBhcnNlX2Ryb3Bf aW5kZXgoY29uc3QgY2hhciAqb2JqaWRlbnRpdHksIERyb3BCZWhhdmlvciBiZWhhdmlvcikKK3sK KwlTdHJpbmdJbmZvRGF0YSAgc3RyOworCWNoYXIJCSAgICpjb21tYW5kOworCU9ialRyZWUJCSAg ICpzdG10LCAqc3RtdDI7CisJY2hhcgkJICAgKmZtdDsKKwlKc29uYgkJICAgKmpzb25iOworCisJ aW5pdFN0cmluZ0luZm8oJnN0cik7CisJZm10ID0gcHNwcmludGYoIkRST1AgSU5ERVggSUYgRVhJ U1RTICUle29iamlkZW50aXR5fXMgJSV7Y2FzY2FkZX1zIik7CisJc3RtdCA9IG5ld19vYmp0cmVl X1ZBKGZtdCwgMSwgIm9iamlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgb2JqaWRl bnRpdHkpOworCXN0bXQyID0gbmV3X29ianRyZWVfVkEoIkNBU0NBREUiLCAxLAorCQkJCQkJCSJw cmVzZW50IiwgT2JqVHlwZUJvb2wsIGJlaGF2aW9yID09IERST1BfQ0FTQ0FERSk7CisJYXBwZW5k X29iamVjdF9vYmplY3Qoc3RtdCwgImNhc2NhZGUiLCBzdG10Mik7CisJanNvbmIgPSBvYmp0cmVl X3RvX2pzb25iKHN0bXQpOworCWNvbW1hbmQgPSBKc29uYlRvQ1N0cmluZygmc3RyLCAmanNvbmIt PnJvb3QsIDEyOCk7CisKKwlyZXR1cm4gY29tbWFuZDsKK30KKworY2hhciAqCitkZXBhcnNlX2Ry b3BfdGFibGUoY29uc3QgY2hhciAqb2JqaWRlbnRpdHksIERyb3BCZWhhdmlvciBiZWhhdmlvcikK K3sKKwlTdHJpbmdJbmZvRGF0YSAgc3RyOworCWNoYXIJCSAgICpjb21tYW5kOworCU9ialRyZWUJ CSAgICpzdG10LCAqc3RtdDI7CisJY2hhcgkJICAgKmZtdDsKKwlKc29uYgkJICAgKmpzb25iOwor CisJaW5pdFN0cmluZ0luZm8oJnN0cik7CisJZm10ID0gcHNwcmludGYoIkRST1AgVEFCTEUgSUYg RVhJU1RTICUle29iamlkZW50aXR5fXMgJSV7Y2FzY2FkZX1zIik7CisJc3RtdCA9IG5ld19vYmp0 cmVlX1ZBKGZtdCwgMSwgIm9iamlkZW50aXR5IiwgT2JqVHlwZVN0cmluZywKKwkJCQkJCSAgb2Jq aWRlbnRpdHkpOworCXN0bXQyID0gbmV3X29ianRyZWVfVkEoIkNBU0NBREUiLCAxLAorCQkJCQkJ CSJwcmVzZW50IiwgT2JqVHlwZUJvb2wsIGJlaGF2aW9yID09IERST1BfQ0FTQ0FERSk7CisJYXBw ZW5kX29iamVjdF9vYmplY3Qoc3RtdCwgImNhc2NhZGUiLCBzdG10Mik7CisJanNvbmIgPSBvYmp0 cmVlX3RvX2pzb25iKHN0bXQpOworCWNvbW1hbmQgPSBKc29uYlRvQ1N0cmluZygmc3RyLCAmanNv bmItPnJvb3QsIDEyOCk7CisKKwlyZXR1cm4gY29tbWFuZDsKK30KKworY2hhciAqCitkZXBhcnNl X3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQpCit7CisJT3ZlcnJpZGVTZWFy Y2hQYXRoICpvdmVycmlkZVBhdGg7CisJTWVtb3J5Q29udGV4dAlvbGRjeHQ7CisJTWVtb3J5Q29u dGV4dAl0bXBjeHQ7CisJT2JqVHJlZQkJICAgKnRyZWU7CisJY2hhcgkJICAgKmNvbW1hbmQ7CisJ U3RyaW5nSW5mb0RhdGEgIHN0cjsKKworCS8qCisJICogQWxsb2NhdGUgZXZlcnl0aGluZyBkb25l IGJ5IHRoZSBkZXBhcnNpbmcgcm91dGluZXMgaW50byBhIHRlbXAgY29udGV4dCwKKwkgKiB0byBh dm9pZCBoYXZpbmcgdG8gc3ByaW5rbGUgdGhlbSB3aXRoIG1lbW9yeSBoYW5kbGluZyBjb2RlOyBi dXQgYWxsb2NhdGUKKwkgKiB0aGUgb3V0cHV0IFN0cmluZ0luZm8gYmVmb3JlIHN3aXRjaGluZy4K KwkgKi8KKwlpbml0U3RyaW5nSW5mbygmc3RyKTsKKwl0bXBjeHQgPSBBbGxvY1NldENvbnRleHRD cmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJCSAgICJkZXBhcnNlIGN0eCIsCisJ CQkJCQkJCSAgIEFMTE9DU0VUX0RFRkFVTFRfTUlOU0laRSwKKwkJCQkJCQkJICAgQUxMT0NTRVRf REVGQVVMVF9JTklUU0laRSwKKwkJCQkJCQkJICAgQUxMT0NTRVRfREVGQVVMVF9NQVhTSVpFKTsK KwlvbGRjeHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8odG1wY3h0KTsKKworCS8qCisJICogTWFu eSByb3V0aW5lcyB1bmRlcmx5aW5nIHRoaXMgb25lIHdpbGwgaW52b2tlIHJ1bGV1dGlscy5jIGZ1 bmN0aW9uYWxpdHkKKwkgKiBpbiBvcmRlciB0byBvYnRhaW4gZGVwYXJzZWQgdmVyc2lvbnMgb2Yg ZXhwcmVzc2lvbnMuICBJbiBzdWNoIHJlc3VsdHMsCisJICogd2Ugd2FudCBhbGwgb2JqZWN0IG5h bWVzIHRvIGJlIHF1YWxpZmllZCwgc28gdGhhdCByZXN1bHRzIGFyZSAicG9ydGFibGUiCisJICog dG8gZW52aXJvbm1lbnRzIHdpdGggZGlmZmVyZW50IHNlYXJjaF9wYXRoIHNldHRpbmdzLiAgUmF0 aGVyIHRoYW4gaW5qZWN0CisJICogd2hhdCB3b3VsZCBiZSByZXBldGl0aXZlIGNhbGxzIHRvIG92 ZXJyaWRlIHNlYXJjaCBwYXRoIGFsbCBvdmVyIHRoZQorCSAqIHBsYWNlLCB3ZSBkbyBpdCBjZW50 cmFsbHkgaGVyZS4KKwkgKi8KKwlvdmVycmlkZVBhdGggPSBHZXRPdmVycmlkZVNlYXJjaFBhdGgo Q3VycmVudE1lbW9yeUNvbnRleHQpOworCW92ZXJyaWRlUGF0aC0+c2NoZW1hcyA9IE5JTDsKKwlv dmVycmlkZVBhdGgtPmFkZENhdGFsb2cgPSBmYWxzZTsKKwlvdmVycmlkZVBhdGgtPmFkZFRlbXAg PSB0cnVlOworCVB1c2hPdmVycmlkZVNlYXJjaFBhdGgob3ZlcnJpZGVQYXRoKTsKKworCXN3aXRj aCAoY21kLT50eXBlKQorCXsKKwkJY2FzZSBTQ1RfU2ltcGxlOgorCQkJdHJlZSA9IGRlcGFyc2Vf c2ltcGxlX2NvbW1hbmQoY21kKTsKKwkJCWJyZWFrOworCQljYXNlIFNDVF9BbHRlclRhYmxlOgor CQkJdHJlZSA9IGRlcGFyc2VfQWx0ZXJUYWJsZVN0bXQoY21kKTsKKwkJCWJyZWFrOworCQlkZWZh dWx0OgorCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgZGVwYXJzZSBub2RlIHR5cGUgJWQiLCBj bWQtPnR5cGUpOworCX0KKworCVBvcE92ZXJyaWRlU2VhcmNoUGF0aCgpOworCisJaWYgKHRyZWUp CisJeworCQlKc29uYiAqanNvbmI7CisKKwkJanNvbmIgPSBvYmp0cmVlX3RvX2pzb25iKHRyZWUp OworCQljb21tYW5kID0gSnNvbmJUb0NTdHJpbmcoJnN0ciwgJmpzb25iLT5yb290LCAxMjgpOwor CX0KKwllbHNlCisJCWNvbW1hbmQgPSBOVUxMOworCisJLyoKKwkgKiBDbGVhbiB1cC4gIE5vdGUg dGhhdCBzaW5jZSB3ZSBjcmVhdGVkIHRoZSBTdHJpbmdJbmZvIGluIHRoZSBjYWxsZXIncworCSAq IGNvbnRleHQsIHRoZSBvdXRwdXQgc3RyaW5nIGlzIG5vdCBkZWxldGVkIGhlcmUuCisJICovCisJ TWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGN4dCk7CisJTWVtb3J5Q29udGV4dERlbGV0ZSh0bXBj eHQpOworCisJcmV0dXJuIGNvbW1hbmQ7Cit9CisKKy8qCisgKiBHaXZlbiBhIENvbGxlY3RlZENv bW1hbmQsIHJldHVybiBhIEpTT04gcmVwcmVzZW50YXRpb24gb2YgaXQuCisgKgorICogVGhlIGNv bW1hbmQgaXMgZXhwYW5kZWQgZnVsbHksIHNvIHRoYXQgdGhlcmUgYXJlIG5vIGFtYmlndWl0aWVz IGV2ZW4gaW4gdGhlCisgKiBmYWNlIG9mIHNlYXJjaF9wYXRoIGNoYW5nZXMuCisgKi8KK0RhdHVt CitkZGxfZGVwYXJzZV90b19qc29uKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJQ29sbGVjdGVkQ29t bWFuZCAqY21kID0gKENvbGxlY3RlZENvbW1hbmQgKikgUEdfR0VUQVJHX1BPSU5URVIoMCk7CisJ Y2hhcgkJICAgKmNvbW1hbmQ7CisKKwljb21tYW5kID0gZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQo Y21kKTsKKworCWlmIChjb21tYW5kKQorCQlQR19SRVRVUk5fVEVYVF9QKENTdHJpbmdHZXRUZXh0 RGF0dW0oY29tbWFuZCkpOworCWVsc2UKKwkJUEdfUkVUVVJOX05VTEwoKTsKK30KZGlmZiAtLWdp dCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2RkbF9qc29uLmMgYi9zcmMvYmFja2VuZC9jb21tYW5k cy9kZGxfanNvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1ZWQxOGYK LS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9kZGxfanNvbi5jCkBAIC0w LDAgKzEsNzQ5IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxfanNvbi5jCisgKgkg IEpTT04gY29kZSByZWxhdGVkIHRvIERETCBjb21tYW5kIGRlcGFyc2luZworICoKKyAqIFBvcnRp b25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDIyLCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVu dCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBV bml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBJREVOVElGSUNBVElPTgorICoJICBzcmMv YmFja2VuZC9jb21tYW5kcy9kZGxfanNvbi5jCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8K KyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisjaW5jbHVkZSAibGliL3N0cmluZ2luZm8uaCIKKyNp bmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgorI2luY2x1ZGUgInV0aWxzL2pzb25iLmgiCisKKwor dHlwZWRlZiBlbnVtCit7CisJU3BlY1R5cGVuYW1lLAorCVNwZWNPcGVyYXRvcm5hbWUsCisJU3Bl Y0RvdHRlZE5hbWUsCisJU3BlY1N0cmluZywKKwlTcGVjTnVtYmVyLAorCVNwZWNTdHJpbmdMaXRl cmFsLAorCVNwZWNJZGVudGlmaWVyLAorCVNwZWNSb2xlCit9IGNvbnZTcGVjaWZpZXI7CisKK3R5 cGVkZWYgZW51bQoreworCXR2X2Fic2VudCwKKwl0dl90cnVlLAorCXR2X2ZhbHNlCit9IHRyaXZh bHVlOworCitzdGF0aWMgYm9vbCBleHBhbmRfb25lX2pzb25iX2VsZW1lbnQoU3RyaW5nSW5mbyBv dXQsIGNoYXIgKnBhcmFtLAorCQkJCQkJIEpzb25iVmFsdWUgKmpzb252YWwsIGNvbnZTcGVjaWZp ZXIgc3BlY2lmaWVyLAorCQkJCQkJIGNvbnN0IGNoYXIgKmZtdCk7CitzdGF0aWMgdm9pZCBleHBh bmRfanNvbmJfYXJyYXkoU3RyaW5nSW5mbyBvdXQsIGNoYXIgKnBhcmFtLAorCQkJCSAgIEpzb25i VmFsdWUgKmpzb25hcnIsIGNoYXIgKmFycmF5c2VwLAorCQkJCSAgIGNvbnZTcGVjaWZpZXIgc3Bl Y2lmaWVyLCBjb25zdCBjaGFyICpmbXQpOworc3RhdGljIHZvaWQgZm10c3RyX2Vycm9yX2NhbGxi YWNrKHZvaWQgKmFyZyk7CitjaGFyICpkZGxfZGVwYXJzZV9qc29uX3RvX3N0cmluZyhjaGFyICpq c29uYik7CisKK3N0YXRpYyB0cml2YWx1ZQorZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKEpz b25iQ29udGFpbmVyICpjb250YWluZXIsIGNoYXIgKmtleW5hbWUpCit7CisJSnNvbmJWYWx1ZQlr ZXk7CisJSnNvbmJWYWx1ZSAqdmFsdWU7CisJdHJpdmFsdWUJcmVzdWx0OworCisJa2V5LnR5cGUg PSBqYnZTdHJpbmc7CisJa2V5LnZhbC5zdHJpbmcudmFsID0ga2V5bmFtZTsKKwlrZXkudmFsLnN0 cmluZy5sZW4gPSBzdHJsZW4oa2V5bmFtZSk7CisJdmFsdWUgPSBmaW5kSnNvbmJWYWx1ZUZyb21D b250YWluZXIoY29udGFpbmVyLAorCQkJCQkJCQkJCUpCX0ZPQkpFQ1QsICZrZXkpOworCWlmICh2 YWx1ZSA9PSBOVUxMKQorCQlyZXR1cm4gdHZfYWJzZW50OworCWlmICh2YWx1ZS0+dHlwZSAhPSBq YnZCb29sKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9Q QVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coImVsZW1lbnQgXCIlc1wiIGlzIG5vdCBvZiB0 eXBlIGJvb2xlYW4iLAorCQkJCQkJa2V5bmFtZSkpKTsKKwlyZXN1bHQgPSB2YWx1ZS0+dmFsLmJv b2xlYW4gPyB0dl90cnVlIDogdHZfZmFsc2U7CisJcGZyZWUodmFsdWUpOworCisJcmV0dXJuIHJl c3VsdDsKK30KKworLyoKKyAqIEdpdmVuIGEgSnNvbmJDb250YWluZXIsIGZpbmQgdGhlIEpzb25i VmFsdWUgd2l0aCB0aGUgZ2l2ZW4ga2V5IG5hbWUgaW4gaXQuCisgKiBJZiBpdCdzIG9mIGEgdHlw ZSBvdGhlciB0aGFuIGpidlN0cmluZywgYW4gZXJyb3IgaXMgcmFpc2VkLiAgSWYgaXQgZG9lc24n dAorICogZXhpc3QsIGFuIGVycm9yIGlzIHJhaXNlZCBpZiBtaXNzaW5nX29rOyBvdGhlcndpc2Ug cmV0dXJuIE5VTEwuCisgKgorICogSWYgaXQgZXhpc3RzIGFuZCBpcyBhIHN0cmluZywgYSBmcmVz aGx5IHBhbGxvYydlZCBjb3B5IGlzIHJldHVybmVkLgorICoKKyAqIElmICpsZW5ndGggaXMgbm90 IE5VTEwsIGl0IGlzIHNldCB0byB0aGUgbGVuZ3RoIG9mIHRoZSBzdHJpbmcuCisgKi8KK3N0YXRp YyBjaGFyICoKK2ZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKEpzb25iQ29udGFpbmVyICpj b250YWluZXIsIGNoYXIgKmtleW5hbWUsCisJCQkJCQkJICBib29sIG1pc3Npbmdfb2ssIGludCAq bGVuZ3RoKQoreworCUpzb25iVmFsdWUJa2V5OworCUpzb25iVmFsdWUgKnZhbHVlOworCWNoYXIJ ICAgKnN0cjsKKworCS8qIFhYWCB2ZXJpZnkgdGhhdCB0aGlzIGlzIGFuIG9iamVjdCwgbm90IGFu IGFycmF5ICovCisKKwlrZXkudHlwZSA9IGpidlN0cmluZzsKKwlrZXkudmFsLnN0cmluZy52YWwg PSBrZXluYW1lOworCWtleS52YWwuc3RyaW5nLmxlbiA9IHN0cmxlbihrZXluYW1lKTsKKwl2YWx1 ZSA9IGZpbmRKc29uYlZhbHVlRnJvbUNvbnRhaW5lcihjb250YWluZXIsCisJCQkJCQkJCQkJSkJf Rk9CSkVDVCwgJmtleSk7CisJaWYgKHZhbHVlID09IE5VTEwpCisJeworCQlpZiAobWlzc2luZ19v aykKKwkJCXJldHVybiBOVUxMOworCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNP REVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coIm1pc3NpbmcgZWxlbWVu dCBcIiVzXCIgaW4ganNvbiBvYmplY3QiLCBrZXluYW1lKSkpOworCX0KKworCXN0ciA9IHBuc3Ry ZHVwKHZhbHVlLT52YWwuc3RyaW5nLnZhbCwgdmFsdWUtPnZhbC5zdHJpbmcubGVuKTsKKwlpZiAo bGVuZ3RoKQorCQkqbGVuZ3RoID0gdmFsdWUtPnZhbC5zdHJpbmcubGVuOworCXBmcmVlKHZhbHVl KTsKKwlyZXR1cm4gc3RyOworfQorCisjZGVmaW5lIEFEVkFOQ0VfUEFSU0VfUE9JTlRFUihwdHIs ZW5kX3B0cikgXAorCWRvIHsgXAorCQlpZiAoKysocHRyKSA+PSAoZW5kX3B0cikpIFwKKwkJCWVy ZXBvcnQoRVJST1IsIFwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9W QUxVRSksIFwKKwkJCQkJIGVycm1zZygidW50ZXJtaW5hdGVkIGZvcm1hdCBzcGVjaWZpZXIiKSkp OyBcCisJfSB3aGlsZSAoMCkKKworLyoKKyAqIFJlY3Vyc2l2ZSBoZWxwZXIgZm9yIHBnX2V2ZW50 X3RyaWdnZXJfZXhwYW5kX2NvbW1hbmQKKyAqCisgKiBGaW5kIHRoZSAiZm10IiBlbGVtZW50IGlu IHRoZSBnaXZlbiBjb250YWluZXIsIGFuZCBleHBhbmQgaXQgaW50byB0aGUKKyAqIHByb3ZpZGVk IFN0cmluZ0luZm8uCisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfZm10X3JlY3Vyc2l2ZShKc29u YkNvbnRhaW5lciAqY29udGFpbmVyLCBTdHJpbmdJbmZvIG91dCkKK3sKKwlKc29uYlZhbHVlCWtl eTsKKwlKc29uYlZhbHVlICp2YWx1ZTsKKwljb25zdCBjaGFyICpjcDsKKwljb25zdCBjaGFyICpz dGFydF9wdHI7CisJY29uc3QgY2hhciAqZW5kX3B0cjsKKwlpbnQJCQlsZW47CisKKwlzdGFydF9w dHIgPSBmaW5kX3N0cmluZ19pbl9qc29uYmNvbnRhaW5lcihjb250YWluZXIsICJmbXQiLCBmYWxz ZSwgJmxlbik7CisJZW5kX3B0ciA9IHN0YXJ0X3B0ciArIGxlbjsKKworCWZvciAoY3AgPSBzdGFy dF9wdHI7IGNwIDwgZW5kX3B0cjsgY3ArKykKKwl7CisJCWNvbnZTcGVjaWZpZXIgc3BlY2lmaWVy OworCQlib29sCQlpc19hcnJheTsKKwkJY2hhcgkgICAqcGFyYW0gPSBOVUxMOworCQljaGFyCSAg ICphcnJheXNlcCA9IE5VTEw7CisKKwkJaWYgKCpjcCAhPSAnJScpCisJCXsKKwkJCWFwcGVuZFN0 cmluZ0luZm9DaGFyTWFjcm8ob3V0LCAqY3ApOworCQkJY29udGludWU7CisJCX0KKworCQlpc19h cnJheSA9IGZhbHNlOworCisJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisK KwkJLyogRWFzeSBjYXNlOiAlJSBvdXRwdXRzIGEgc2luZ2xlICUgKi8KKwkJaWYgKCpjcCA9PSAn JScpCisJCXsKKwkJCWFwcGVuZFN0cmluZ0luZm9DaGFyTWFjcm8ob3V0LCAqY3ApOworCQkJY29u dGludWU7CisJCX0KKworCQkvKgorCQkgKiBTY2FuIHRoZSBtYW5kYXRvcnkgZWxlbWVudCBuYW1l LiAgQWxsb3cgZm9yIGFuIGFycmF5IHNlcGFyYXRvcgorCQkgKiAod2hpY2ggbWF5IGJlIHRoZSBl bXB0eSBzdHJpbmcpIHRvIGJlIHNwZWNpZmllZCBhZnRlciBjb2xvbi4KKwkJICovCisJCWlmICgq Y3AgPT0gJ3snKQorCQl7CisJCQlTdHJpbmdJbmZvRGF0YSBwYXJidWY7CisJCQlTdHJpbmdJbmZv RGF0YSBhcnJheXNlcGJ1ZjsKKwkJCVN0cmluZ0luZm8JYXBwZW5kVG87CisKKwkJCWluaXRTdHJp bmdJbmZvKCZwYXJidWYpOworCQkJYXBwZW5kVG8gPSAmcGFyYnVmOworCisJCQlBRFZBTkNFX1BB UlNFX1BPSU5URVIoY3AsIGVuZF9wdHIpOworCQkJZm9yICg7IGNwIDwgZW5kX3B0cjspCisJCQl7 CisJCQkJaWYgKCpjcCA9PSAnOicpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBmb3VuZCBhcnJh eSBzZXBhcmF0b3IgZGVsaW1pdGVyOyBlbGVtZW50IG5hbWUgaXMgbm93CisJCQkJCSAqIGNvbXBs ZXRlLCBzdGFydCBmaWxsaW5nIHRoZSBzZXBhcmF0b3IuCisJCQkJCSAqLworCQkJCQlpbml0U3Ry aW5nSW5mbygmYXJyYXlzZXBidWYpOworCQkJCQlhcHBlbmRUbyA9ICZhcnJheXNlcGJ1ZjsKKwkJ CQkJaXNfYXJyYXkgPSB0cnVlOworCQkJCQlBRFZBTkNFX1BBUlNFX1BPSU5URVIoY3AsIGVuZF9w dHIpOworCQkJCQljb250aW51ZTsKKwkJCQl9CisKKwkJCQlpZiAoKmNwID09ICd9JykKKwkJCQl7 CisJCQkJCUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisJCQkJCWJyZWFrOwor CQkJCX0KKwkJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhck1hY3JvKGFwcGVuZFRvLCAqY3ApOworCQkJ CUFEVkFOQ0VfUEFSU0VfUE9JTlRFUihjcCwgZW5kX3B0cik7CisJCQl9CisJCQlwYXJhbSA9IHBh cmJ1Zi5kYXRhOworCQkJaWYgKGlzX2FycmF5KQorCQkJCWFycmF5c2VwID0gYXJyYXlzZXBidWYu ZGF0YTsKKwkJfQorCQlpZiAocGFyYW0gPT0gTlVMTCkKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2co Im1pc3NpbmcgY29udmVyc2lvbiBuYW1lIGluIGNvbnZlcnNpb24gc3BlY2lmaWVyIikpKTsKKwor CQlzd2l0Y2ggKCpjcCkKKwkJeworCQkJY2FzZSAnSSc6CisJCQkJc3BlY2lmaWVyID0gU3BlY0lk ZW50aWZpZXI7CisJCQkJYnJlYWs7CisJCQljYXNlICdEJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVj RG90dGVkTmFtZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ3MnOgorCQkJCXNwZWNpZmllciA9IFNw ZWNTdHJpbmc7CisJCQkJYnJlYWs7CisJCQljYXNlICdMJzoKKwkJCQlzcGVjaWZpZXIgPSBTcGVj U3RyaW5nTGl0ZXJhbDsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ1QnOgorCQkJCXNwZWNpZmllciA9 IFNwZWNUeXBlbmFtZTsKKwkJCQlicmVhazsKKwkJCWNhc2UgJ08nOgorCQkJCXNwZWNpZmllciA9 IFNwZWNPcGVyYXRvcm5hbWU7CisJCQkJYnJlYWs7CisJCQljYXNlICduJzoKKwkJCQlzcGVjaWZp ZXIgPSBTcGVjTnVtYmVyOworCQkJCWJyZWFrOworCQkJY2FzZSAnUic6CisJCQkJc3BlY2lmaWVy ID0gU3BlY1JvbGU7CisJCQkJYnJlYWs7CisJCQlkZWZhdWx0OgorCQkJCWVyZXBvcnQoRVJST1Is CisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJ CSBlcnJtc2coImludmFsaWQgY29udmVyc2lvbiBzcGVjaWZpZXIgXCIlY1wiIiwgKmNwKSkpOwor CQl9CisKKwkJLyoKKwkJICogT2J0YWluIHRoZSBlbGVtZW50IHRvIGJlIGV4cGFuZGVkLgorCQkg Ki8KKwkJa2V5LnR5cGUgPSBqYnZTdHJpbmc7CisJCWtleS52YWwuc3RyaW5nLnZhbCA9IHBhcmFt OworCQlrZXkudmFsLnN0cmluZy5sZW4gPSBzdHJsZW4ocGFyYW0pOworCisJCXZhbHVlID0gZmlu ZEpzb25iVmFsdWVGcm9tQ29udGFpbmVyKGNvbnRhaW5lciwgSkJfRk9CSkVDVCwgJmtleSk7CisK KwkJLyogVmFsaWRhdGUgdGhhdCB3ZSBnb3QgYW4gYXJyYXkgaWYgdGhlIGZvcm1hdCBzdHJpbmcg c3BlY2lmaWVkIG9uZS4gKi8KKworCQkvKiBBbmQgZmluYWxseSBwcmludCBvdXQgdGhlIGRhdGEg Ki8KKwkJaWYgKGlzX2FycmF5KQorCQkJZXhwYW5kX2pzb25iX2FycmF5KG91dCwgcGFyYW0sIHZh bHVlLCBhcnJheXNlcCwgc3BlY2lmaWVyLCBzdGFydF9wdHIpOworCQllbHNlCisJCQlleHBhbmRf b25lX2pzb25iX2VsZW1lbnQob3V0LCBwYXJhbSwgdmFsdWUsIHNwZWNpZmllciwgc3RhcnRfcHRy KTsKKwl9Cit9CisKKy8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGFuIGlkZW50aWZpZXIu ICBUaGUgdmFsdWUgbXVzdCBiZSBvZiB0eXBlIHN0cmluZy4KKyAqLworc3RhdGljIHZvaWQKK2V4 cGFuZF9qc29udmFsX2lkZW50aWZpZXIoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252 YWwpCit7CisJY2hhcgkgICAqc3RyOworCisJQXNzZXJ0KGpzb252YWwtPnR5cGUgPT0gamJ2U3Ry aW5nKTsKKworCXN0ciA9IHBuc3RyZHVwKGpzb252YWwtPnZhbC5zdHJpbmcudmFsLAorCQkJCSAg IGpzb252YWwtPnZhbC5zdHJpbmcubGVuKTsKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwg cXVvdGVfaWRlbnRpZmllcihzdHIpKTsKKwlwZnJlZShzdHIpOworfQorCisvKgorICogRXhwYW5k IGEganNvbiB2YWx1ZSBhcyBhIGRvdC1zZXBhcmF0ZWQtbmFtZS4gIFRoZSB2YWx1ZSBtdXN0IGJl IG9mIHR5cGUKKyAqIG9iamVjdCBhbmQgbXVzdCBjb250YWluIGVsZW1lbnRzICJzY2hlbWFuYW1l IiAob3B0aW9uYWwpLCAib2JqbmFtZSIKKyAqIChtYW5kYXRvcnkpLCAiYXR0cm5hbWUiIChvcHRp b25hbCkuICBEb3VibGUgcXVvdGVzIGFyZSBhZGRlZCB0byBlYWNoIGVsZW1lbnQKKyAqIGFzIG5l Y2Vzc2FyeSwgYW5kIGRvdCBzZXBhcmF0b3JzIHdoZXJlIG5lZWRlZC4KKyAqCisgKiBPbmUgZGF5 IHdlIG1pZ2h0IG5lZWQgYSAiY2F0YWxvZyIgZWxlbWVudCBhcyB3ZWxsLCBidXQgbm8gY3VycmVu dCB1c2UgY2FzZQorICogbmVlZHMgdGhhdC4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29u dmFsX2RvdHRlZG5hbWUoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJ Y2hhcgkgICAqc3RyOworCisJc3RyID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNv bnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSJzY2hlbWFuYW1lIiwgdHJ1ZSwgTlVM TCk7CisJaWYgKHN0cikKKwl7CisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMuIiwgcXVvdGVf aWRlbnRpZmllcihzdHIpKTsKKwkJcGZyZWUoc3RyKTsKKwl9CisKKwlzdHIgPSBmaW5kX3N0cmlu Z19pbl9qc29uYmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJ Im9iam5hbWUiLCBmYWxzZSwgTlVMTCk7CisJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyIsIHF1 b3RlX2lkZW50aWZpZXIoc3RyKSk7CisJcGZyZWUoc3RyKTsKKworCXN0ciA9IGZpbmRfc3RyaW5n X2luX2pzb25iY29udGFpbmVyKGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQki YXR0cm5hbWUiLCB0cnVlLCBOVUxMKTsKKwlpZiAoc3RyKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5m byhidWYsICIuJXMiLCBxdW90ZV9pZGVudGlmaWVyKHN0cikpOworCQlwZnJlZShzdHIpOworCX0K K30KKworLyoKKyAqIGV4cGFuZCBhIGpzb24gdmFsdWUgYXMgYSB0eXBlIG5hbWUuCisgKi8KK3N0 YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF90eXBlbmFtZShTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJW YWx1ZSAqanNvbnZhbCkKK3sKKwljaGFyCSAgICpzY2hlbWEgPSBOVUxMOworCWNoYXIJICAgKnR5 cGVuYW1lOworCWNoYXIJICAgKnR5cG1vZHN0cjsKKwl0cml2YWx1ZQlpc19hcnJheTsKKwljaGFy CSAgICphcnJheV9kZWNvcjsKKworCS8qCisJICogV2Ugb21pdCBzY2hlbWEtcXVhbGlmeWluZyB0 aGUgb3V0cHV0IG5hbWUgaWYgdGhlIHNjaGVtYSBlbGVtZW50IGlzCisJICogZWl0aGVyIHRoZSBl bXB0eSBzdHJpbmcgb3IgTlVMTDsgdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiB0aG9zZSB0d28gY2Fz ZXMKKwkgKiBpcyB0aGF0IGluIHRoZSBsYXR0ZXIgd2UgcXVvdGUgdGhlIHR5cGUgbmFtZSwgaW4g dGhlIGZvcm1lciB3ZSBkb24ndC4KKwkgKiBUaGlzIGFsbG93cyBmb3IgdHlwZXMgd2l0aCBzcGVj aWFsIHR5cG1vZCBuZWVkcywgc3VjaCBhcyBpbnRlcnZhbCBhbmQKKwkgKiB0aW1lc3RhbXAgKHNl ZSBmb3JtYXRfdHlwZV9kZXRhaWxlZCksIHdoaWxlIGF0IHRoZSBzYW1lIHRpbWUgYWxsb3dpbmcK KwkgKiBmb3IgdGhlIHNjaGVtYSBuYW1lIHRvIGJlIG9taXR0ZWQgZnJvbSB0eXBlIG5hbWVzIHRo YXQgcmVxdWlyZSBxdW90ZXMKKwkgKiBidXQgYXJlIHRvIGJlIG9idGFpbmVkIGZyb20gYSB1c2Vy IHNjaGVtYS4KKwkgKi8KKworCXNjaGVtYSA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVy KGpzb252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkgICAic2NoZW1hbmFtZSIsIHRy dWUsIE5VTEwpOworCXR5cGVuYW1lID0gZmluZF9zdHJpbmdfaW5fanNvbmJjb250YWluZXIoanNv bnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCQkgInR5cGVuYW1lIiwgZmFsc2UsIE5V TEwpOworCXR5cG1vZHN0ciA9IGZpbmRfc3RyaW5nX2luX2pzb25iY29udGFpbmVyKGpzb252YWwt PnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJICAidHlwbW9kIiwgdHJ1ZSwgTlVMTCk7CisJ aXNfYXJyYXkgPSBmaW5kX2Jvb2xfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFy eS5kYXRhLAorCQkJCQkJCQkJCSAgICJ0eXBhcnJheSIpOworCXN3aXRjaCAoaXNfYXJyYXkpCisJ eworCQlkZWZhdWx0OgorCQljYXNlIHR2X2Fic2VudDoKKwkJCWVyZXBvcnQoRVJST1IsCisJCQkJ CShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCQkgZXJybXNn KCJtaXNzaW5nIHR5cGFycmF5IGVsZW1lbnQiKSkpOworCQkJYnJlYWs7CisJCWNhc2UgdHZfdHJ1 ZToKKwkJCWFycmF5X2RlY29yID0gIltdIjsKKwkJCWJyZWFrOworCQljYXNlIHR2X2ZhbHNlOgor CQkJYXJyYXlfZGVjb3IgPSAiIjsKKwkJCWJyZWFrOworCX0KKworCWlmIChzY2hlbWEgPT0gTlVM TCkKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICIlcyVzJXMiLAorCQkJCQkJIHF1b3RlX2lkZW50 aWZpZXIodHlwZW5hbWUpLAorCQkJCQkJIHR5cG1vZHN0ciA/IHR5cG1vZHN0ciA6ICIiLAorCQkJ CQkJIGFycmF5X2RlY29yKTsKKwllbHNlIGlmIChzY2hlbWFbMF0gPT0gJ1wwJykKKwkJYXBwZW5k U3RyaW5nSW5mbyhidWYsICIlcyVzJXMiLAorCQkJCQkJIHR5cGVuYW1lLAorCQkJCQkJIHR5cG1v ZHN0ciA/IHR5cG1vZHN0ciA6ICIiLAorCQkJCQkJIGFycmF5X2RlY29yKTsKKwllbHNlCisJCWFw cGVuZFN0cmluZ0luZm8oYnVmLCAiJXMuJXMlcyVzIiwKKwkJCQkJCSBxdW90ZV9pZGVudGlmaWVy KHNjaGVtYSksCisJCQkJCQkgcXVvdGVfaWRlbnRpZmllcih0eXBlbmFtZSksCisJCQkJCQkgdHlw bW9kc3RyID8gdHlwbW9kc3RyIDogIiIsCisJCQkJCQkgYXJyYXlfZGVjb3IpOworfQorCisvKgor ICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBhbiBvcGVyYXRvciBuYW1lCisgKi8KK3N0YXRpYyB2 b2lkCitleHBhbmRfanNvbnZhbF9vcGVyYXRvcihTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAq anNvbnZhbCkKK3sKKwljaGFyCSAgICpzdHI7CisKKwlzdHIgPSBmaW5kX3N0cmluZ19pbl9qc29u YmNvbnRhaW5lcihqc29udmFsLT52YWwuYmluYXJ5LmRhdGEsCisJCQkJCQkJCQkJInNjaGVtYW5h bWUiLCB0cnVlLCBOVUxMKTsKKwkvKiBzY2hlbWEgbWlnaHQgYmUgTlVMTCBvciBlbXB0eSAqLwor CWlmIChzdHIgIT0gTlVMTCAmJiBzdHJbMF0gIT0gJ1wwJykKKwkJYXBwZW5kU3RyaW5nSW5mbyhi dWYsICIlcy4iLCBxdW90ZV9pZGVudGlmaWVyKHN0cikpOworCisJc3RyID0gZmluZF9zdHJpbmdf aW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCSJv YmpuYW1lIiwgZmFsc2UsIE5VTEwpOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBzdHIp OworfQorCisvKgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBhIHN0cmluZy4gIFRoZSB2YWx1 ZSBtdXN0IGJlIG9mIHR5cGUgc3RyaW5nIG9yIG9mCisgKiB0eXBlIG9iamVjdC4gIEluIHRoZSBs YXR0ZXIgY2FzZSBpdCBtdXN0IGNvbnRhaW4gYSAiZm10IiBlbGVtZW50IHdoaWNoIHdpbGwKKyAq IGJlIHJlY3Vyc2l2ZWx5IGV4cGFuZGVkOyBhbHNvLCBpZiB0aGUgb2JqZWN0IGNvbnRhaW5zIGFu IGVsZW1lbnQgInByZXNlbnQiCisgKiBhbmQgaXQgaXMgc2V0IHRvIGZhbHNlLCB0aGUgZXhwYW5z aW9uIGlzIHRoZSBlbXB0eSBzdHJpbmcuCisgKgorICogUmV0dXJucyBmYWxzZSBpZiBubyBhY3R1 YWwgZXhwYW5zaW9uIHdhcyBtYWRlIGR1ZSB0byB0aGUgInByZXNlbnQiIGZsYWcKKyAqIGJlaW5n IHNldCB0byAiZmFsc2UiLgorICovCitzdGF0aWMgYm9vbAorZXhwYW5kX2pzb252YWxfc3RyaW5n KFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQoreworCWlmIChqc29udmFsLT50 eXBlID09IGpidlN0cmluZykKKwl7CisJCWFwcGVuZEJpbmFyeVN0cmluZ0luZm8oYnVmLCBqc29u dmFsLT52YWwuc3RyaW5nLnZhbCwKKwkJCQkJCQkgICBqc29udmFsLT52YWwuc3RyaW5nLmxlbik7 CisJfQorCWVsc2UgaWYgKGpzb252YWwtPnR5cGUgPT0gamJ2QmluYXJ5KQorCXsKKwkJdHJpdmFs dWUJcHJlc2VudDsKKworCQlwcmVzZW50ID0gZmluZF9ib29sX2luX2pzb25iY29udGFpbmVyKGpz b252YWwtPnZhbC5iaW5hcnkuZGF0YSwKKwkJCQkJCQkJCQkJICAicHJlc2VudCIpOworCQkvKgor CQkgKiBJZiAicHJlc2VudCIgaXMgc2V0IHRvIGZhbHNlLCB0aGlzIGVsZW1lbnQgZXhwYW5kcyB0 byBlbXB0eTsKKwkJICogb3RoZXJ3aXNlIChlaXRoZXIgdHJ1ZSBvciBhYnNlbnQpLCBmYWxsIHRo cm91Z2ggdG8gZXhwYW5kICJmbXQiLgorCQkgKi8KKwkJaWYgKHByZXNlbnQgPT0gdHZfZmFsc2Up CisJCQlyZXR1cm4gZmFsc2U7CisKKwkJZXhwYW5kX2ZtdF9yZWN1cnNpdmUoanNvbnZhbC0+dmFs LmJpbmFyeS5kYXRhLCBidWYpOworCX0KKwlyZXR1cm4gdHJ1ZTsKK30KKworLyoKKyAqIEV4cGFu ZCBhIGpzb24gdmFsdWUgYXMgYSBzdHJpbmcgbGl0ZXJhbAorICovCitzdGF0aWMgdm9pZAorZXhw YW5kX2pzb252YWxfc3RybGl0KFN0cmluZ0luZm8gYnVmLCBKc29uYlZhbHVlICpqc29udmFsKQor eworCWNoYXIgICAqc3RyOworCVN0cmluZ0luZm9EYXRhIGRxZGVsaW07CisJc3RhdGljIGNvbnN0 IGNoYXIgZHFzdWZmaXhlc1tdID0gIl9YWVpaWVhfIjsKKwlpbnQgICAgICAgICBkcW5leHRjaGFy ID0gMDsKKworCXN0ciA9IHBuc3RyZHVwKGpzb252YWwtPnZhbC5zdHJpbmcudmFsLCBqc29udmFs LT52YWwuc3RyaW5nLmxlbik7CisKKwkvKiBlYXN5IGNhc2U6IGlmIHRoZXJlIGFyZSBubyAnIGFu ZCBubyBcLCBqdXN0IHVzZSBhIHNpbmdsZSBxdW90ZSAqLworCWlmIChzdHJjaHIoc3RyLCAnXCcn KSA9PSBOVUxMICYmCisJCXN0cmNocihzdHIsICdcXCcpID09IE5VTEwpCisJeworCQlhcHBlbmRT dHJpbmdJbmZvKGJ1ZiwgIiclcyciLCBzdHIpOworCQlwZnJlZShzdHIpOworCQlyZXR1cm47CisJ fQorCisJLyogT3RoZXJ3aXNlIG5lZWQgdG8gZmluZCBhIHVzZWZ1bCBkb2xsYXItcXVvdGUgZGVs aW1pdGVyICovCisJaW5pdFN0cmluZ0luZm8oJmRxZGVsaW0pOworCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoJmRxZGVsaW0sICIkIik7CisJd2hpbGUgKHN0cnN0cihzdHIsIGRxZGVsaW0uZGF0YSkg IT0gTlVMTCkKKwl7CisJCWFwcGVuZFN0cmluZ0luZm9DaGFyKCZkcWRlbGltLCBkcXN1ZmZpeGVz W2RxbmV4dGNoYXIrK10pOworCQlkcW5leHRjaGFyICU9IHNpemVvZihkcXN1ZmZpeGVzKSAtIDE7 CisJfQorCS8qIGFkZCB0cmFpbGluZyAkICovCisJYXBwZW5kU3RyaW5nSW5mb0NoYXIoJmRxZGVs aW0sICckJyk7CisKKwkvKiBBbmQgZmluYWxseSBwcm9kdWNlIHRoZSBxdW90ZWQgbGl0ZXJhbCBp bnRvIHRoZSBvdXRwdXQgU3RyaW5nSW5mbyAqLworCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiJXMl cyVzIiwgZHFkZWxpbS5kYXRhLCBzdHIsIGRxZGVsaW0uZGF0YSk7CisJcGZyZWUoZHFkZWxpbS5k YXRhKTsKKwlwZnJlZShzdHIpOworfQorCisvKgorICogRXhwYW5kIGEganNvbiB2YWx1ZSBhcyBh biBpbnRlZ2VyIHF1YW50aXR5CisgKi8KK3N0YXRpYyB2b2lkCitleHBhbmRfanNvbnZhbF9udW1i ZXIoU3RyaW5nSW5mbyBidWYsIEpzb25iVmFsdWUgKmpzb252YWwpCit7CisJY2hhciAqc3RyZGF0 dW07CisKKwlzdHJkYXR1bSA9IERhdHVtR2V0Q1N0cmluZyhEaXJlY3RGdW5jdGlvbkNhbGwxKG51 bWVyaWNfb3V0LAorCQkJCQkJCQkJCQkJICAgTnVtZXJpY0dldERhdHVtKGpzb252YWwtPnZhbC5u dW1lcmljKSkpOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBzdHJkYXR1bSk7Cit9CisK Ky8qCisgKiBFeHBhbmQgYSBqc29uIHZhbHVlIGFzIGEgcm9sZSBuYW1lLiAgSWYgdGhlIGlzX3B1 YmxpYyBlbGVtZW50IGlzIHNldCB0bworICogdHJ1ZSwgUFVCTElDIGlzIGV4cGFuZGVkIChubyBx dW90ZXMpOyBvdGhlcndpc2UsIGV4cGFuZCB0aGUgZ2l2ZW4gcm9sZSBuYW1lLAorICogcXVvdGlu ZyBhcyBhbiBpZGVudGlmaWVyLgorICovCitzdGF0aWMgdm9pZAorZXhwYW5kX2pzb252YWxfcm9s ZShTdHJpbmdJbmZvIGJ1ZiwgSnNvbmJWYWx1ZSAqanNvbnZhbCkKK3sKKwl0cml2YWx1ZQlpc19w dWJsaWM7CisKKwlpc19wdWJsaWMgPSBmaW5kX2Jvb2xfaW5fanNvbmJjb250YWluZXIoanNvbnZh bC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJCQkiaXNfcHVibGljIik7CisJaWYgKGlzX3B1 YmxpYyA9PSB0dl90cnVlKQorCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIlBVQkxJQyIp OworCWVsc2UKKwl7CisJCWNoYXIgKnJvbGVuYW1lOworCisJCXJvbGVuYW1lID0gZmluZF9zdHJp bmdfaW5fanNvbmJjb250YWluZXIoanNvbnZhbC0+dmFsLmJpbmFyeS5kYXRhLAorCQkJCQkJCQkJ CQkJICJyb2xlbmFtZSIsIGZhbHNlLCBOVUxMKTsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhi dWYsIHF1b3RlX2lkZW50aWZpZXIocm9sZW5hbWUpKTsKKwl9Cit9CisKKy8qCisgKiBFeHBhbmQg b25lIGpzb24gZWxlbWVudCBpbnRvIHRoZSBvdXRwdXQgU3RyaW5nSW5mbyBhY2NvcmRpbmcgdG8g dGhlCisgKiBjb252ZXJzaW9uIHNwZWNpZmllci4gIFRoZSBlbGVtZW50IHR5cGUgaXMgdmFsaWRh dGVkLCBhbmQgYW4gZXJyb3IgaXMgcmFpc2VkCisgKiBpZiBpdCBkb2Vzbid0IG1hdGNoIHdoYXQg d2UgZXhwZWN0IGZvciB0aGUgY29udmVyc2lvbiBzcGVjaWZpZXIuCisgKgorICogUmV0dXJucyBm YWxzZSBpZiBubyBhY3R1YWwgZXhwYW5zaW9uIHdhcyBtYWRlIChkdWUgdG8gdGhlICJwcmVzZW50 IiBmbGFnCisgKiBiZWluZyBzZXQgdG8gImZhbHNlIiBpbiBmb3JtYXR0ZWQgc3RyaW5nIGV4cGFu c2lvbikuCisgKi8KK3N0YXRpYyBib29sCitleHBhbmRfb25lX2pzb25iX2VsZW1lbnQoU3RyaW5n SW5mbyBvdXQsIGNoYXIgKnBhcmFtLCBKc29uYlZhbHVlICpqc29udmFsLAorCQkJCQkJIGNvbnZT cGVjaWZpZXIgc3BlY2lmaWVyLCBjb25zdCBjaGFyICpmbXQpCit7CisJYm9vbCByZXN1bHQgPSB0 cnVlOworCUVycm9yQ29udGV4dENhbGxiYWNrIHNxbGVycmNvbnRleHQ7CisKKwkvKiBJZiB3ZSB3 ZXJlIGdpdmVuIGEgZm9ybWF0IHN0cmluZywgc2V0dXAgYW4gZXJlcG9ydCgpIGNvbnRleHQgY2Fs bGJhY2sgKi8KKwlpZiAoZm10KQorCXsKKwkJc3FsZXJyY29udGV4dC5jYWxsYmFjayA9IGZtdHN0 cl9lcnJvcl9jYWxsYmFjazsKKwkJc3FsZXJyY29udGV4dC5hcmcgPSAodm9pZCAqKSBmbXQ7CisJ CXNxbGVycmNvbnRleHQucHJldmlvdXMgPSBlcnJvcl9jb250ZXh0X3N0YWNrOworCQllcnJvcl9j b250ZXh0X3N0YWNrID0gJnNxbGVycmNvbnRleHQ7CisJfQorCisJaWYgKCFqc29udmFsKQorCQll cmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFM VUUpLAorCQkJCSBlcnJtc2coImVsZW1lbnQgXCIlc1wiIG5vdCBmb3VuZCIsIHBhcmFtKSkpOwor CisJc3dpdGNoIChzcGVjaWZpZXIpCisJeworCQljYXNlIFNwZWNJZGVudGlmaWVyOgorCQkJaWYg KGpzb252YWwtPnR5cGUgIT0gamJ2U3RyaW5nKQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQko ZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2co ImV4cGVjdGVkIEpTT04gc3RyaW5nIGZvciAlJUkgZWxlbWVudCBcIiVzXCIsIGdvdCAlZCIsCisJ CQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJZXhwYW5kX2pzb252YWxfaWRlbnRp ZmllcihvdXQsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjRG90dGVkTmFtZToK KwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidkJpbmFyeSkKKwkJCQllcmVwb3J0KEVSUk9SLAor CQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJCQkJCQkg ZXJybXNnKCJleHBlY3RlZCBKU09OIG9iamVjdCBmb3IgJSVEIGVsZW1lbnQgXCIlc1wiLCBnb3Qg JWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9qc29udmFs X2RvdHRlZG5hbWUob3V0LCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNhc2UgU3BlY1N0cmlu ZzoKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidlN0cmluZyAmJgorCQkJCWpzb252YWwtPnR5 cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVyZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJD T0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpT T04gc3RyaW5nIG9yIG9iamVjdCBmb3IgJSVzIGVsZW1lbnQgXCIlc1wiLCBnb3QgJWQiLAorCQkJ CQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCXJlc3VsdCA9IGV4cGFuZF9qc29udmFs X3N0cmluZyhvdXQsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjU3RyaW5nTGl0 ZXJhbDoKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidlN0cmluZykKKwkJCQllcmVwb3J0KEVS Uk9SLAorCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlZBTElEX1BBUkFNRVRFUl9WQUxVRSksCisJ CQkJCQkgZXJybXNnKCJleHBlY3RlZCBKU09OIHN0cmluZyBmb3IgJSVMIGVsZW1lbnQgXCIlc1wi LCBnb3QgJWQiLAorCQkJCQkJCQlwYXJhbSwganNvbnZhbC0+dHlwZSkpKTsKKwkJCWV4cGFuZF9q c29udmFsX3N0cmxpdChvdXQsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVjVHlw ZW5hbWU6CisJCQlpZiAoanNvbnZhbC0+dHlwZSAhPSBqYnZCaW5hcnkpCisJCQkJZXJlcG9ydChF UlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJfVkFMVUUpLAor CQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBvYmplY3QgZm9yICUlVCBlbGVtZW50IFwiJXNc IiwgZ290ICVkIiwKKwkJCQkJCQkJcGFyYW0sIGpzb252YWwtPnR5cGUpKSk7CisJCQlleHBhbmRf anNvbnZhbF90eXBlbmFtZShvdXQsIGpzb252YWwpOworCQkJYnJlYWs7CisKKwkJY2FzZSBTcGVj T3BlcmF0b3JuYW1lOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZB TFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gb2JqZWN0IGZvciAlJU8gZWxlbWVu dCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJ ZXhwYW5kX2pzb252YWxfb3BlcmF0b3Iob3V0LCBqc29udmFsKTsKKwkJCWJyZWFrOworCisJCWNh c2UgU3BlY051bWJlcjoKKwkJCWlmIChqc29udmFsLT50eXBlICE9IGpidk51bWVyaWMpCisJCQkJ ZXJlcG9ydChFUlJPUiwKKwkJCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9QQVJBTUVURVJf VkFMVUUpLAorCQkJCQkJIGVycm1zZygiZXhwZWN0ZWQgSlNPTiBudW1lcmljIGZvciAlJW4gZWxl bWVudCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOwor CQkJZXhwYW5kX2pzb252YWxfbnVtYmVyKG91dCwganNvbnZhbCk7CisJCQlicmVhazsKKworCQlj YXNlIFNwZWNSb2xlOgorCQkJaWYgKGpzb252YWwtPnR5cGUgIT0gamJ2QmluYXJ5KQorCQkJCWVy ZXBvcnQoRVJST1IsCisJCQkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZB TFVFKSwKKwkJCQkJCSBlcnJtc2coImV4cGVjdGVkIEpTT04gb2JqZWN0IGZvciAlJVIgZWxlbWVu dCBcIiVzXCIsIGdvdCAlZCIsCisJCQkJCQkJCXBhcmFtLCBqc29udmFsLT50eXBlKSkpOworCQkJ ZXhwYW5kX2pzb252YWxfcm9sZShvdXQsIGpzb252YWwpOworCQkJYnJlYWs7CisJfQorCisJaWYg KGZtdCkKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9IHNxbGVycmNvbnRleHQucHJldmlvdXM7CisK KwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogSXRlcmF0ZSBvbiB0aGUgZWxlbWVudHMgb2Yg YSBKU09OIGFycmF5LCBleHBhbmRpbmcgZWFjaCBvbmUgaW50byB0aGUgb3V0cHV0CisgKiBTdHJp bmdJbmZvIHBlciB0aGUgZ2l2ZW4gY29udmVyc2lvbiBzcGVjaWZpZXIsIHNlcGFyYXRlZCBieSB0 aGUgZ2l2ZW4KKyAqIHNlcGFyYXRvci4KKyAqLworc3RhdGljIHZvaWQKK2V4cGFuZF9qc29uYl9h cnJheShTdHJpbmdJbmZvIG91dCwgY2hhciAqcGFyYW0sCisJCQkJICAgSnNvbmJWYWx1ZSAqanNv bmFyciwgY2hhciAqYXJyYXlzZXAsIGNvbnZTcGVjaWZpZXIgc3BlY2lmaWVyLAorCQkJCSAgIGNv bnN0IGNoYXIgKmZtdCkKK3sKKwlFcnJvckNvbnRleHRDYWxsYmFjayBzcWxlcnJjb250ZXh0Owor CUpzb25iQ29udGFpbmVyICpjb250YWluZXI7CisJSnNvbmJJdGVyYXRvciAgKml0OworCUpzb25i VmFsdWUJdjsKKwlpbnQJCQl0eXBlOworCXNpemVfdAkJYXJyYXlzZXBsZW47CisJYm9vbAkJZmly c3QgPSB0cnVlOworCisJLyogSWYgd2Ugd2VyZSBnaXZlbiBhIGZvcm1hdCBzdHJpbmcsIHNldHVw IGFuIGVyZXBvcnQoKSBjb250ZXh0IGNhbGxiYWNrICovCisJaWYgKGZtdCkKKwl7CisJCXNxbGVy cmNvbnRleHQuY2FsbGJhY2sgPSBmbXRzdHJfZXJyb3JfY2FsbGJhY2s7CisJCXNxbGVycmNvbnRl eHQuYXJnID0gKHZvaWQgKikgZm10OworCQlzcWxlcnJjb250ZXh0LnByZXZpb3VzID0gZXJyb3Jf Y29udGV4dF9zdGFjazsKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9ICZzcWxlcnJjb250ZXh0Owor CX0KKworCWlmIChqc29uYXJyLT50eXBlICE9IGpidkJpbmFyeSkKKwkJZXJlcG9ydChFUlJPUiwK KwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJy bXNnKCJlbGVtZW50IFwiJXNcIiBpcyBub3QgYSBKU09OIGFycmF5IiwgcGFyYW0pKSk7CisKKwlj b250YWluZXIgPSBqc29uYXJyLT52YWwuYmluYXJ5LmRhdGE7CisJaWYgKChjb250YWluZXItPmhl YWRlciAmIEpCX0ZBUlJBWSkgPT0gMCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShF UlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJybXNnKCJlbGVtZW50IFwi JXNcIiBpcyBub3QgYSBKU09OIGFycmF5IiwgcGFyYW0pKSk7CisKKwlhcnJheXNlcGxlbiA9IHN0 cmxlbihhcnJheXNlcCk7CisKKwlpdCA9IEpzb25iSXRlcmF0b3JJbml0KGNvbnRhaW5lcik7CisJ d2hpbGUgKCh0eXBlID0gSnNvbmJJdGVyYXRvck5leHQoJml0LCAmdiwgdHJ1ZSkpICE9IFdKQl9E T05FKQorCXsKKwkJc3dpdGNoICh0eXBlKQorCQl7CisJCQljYXNlIFdKQl9FTEVNOgorCQkJCWlm ICghZmlyc3QpCisJCQkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcob3V0LCBhcnJheXNlcCk7CisK KwkJCQlpZiAoZXhwYW5kX29uZV9qc29uYl9lbGVtZW50KG91dCwgcGFyYW0sICZ2LCBzcGVjaWZp ZXIsIE5VTEwpKQorCQkJCQlmaXJzdCA9IGZhbHNlOworCQkJCWVsc2UKKwkJCQl7CisJCQkJCWlm ICghZmlyc3QpCisJCQkJCXsKKwkJCQkJCS8qIHJlbW92ZSB0aGUgYXJyYXkgc2VwYXJhdG9yICov CisJCQkJCQlvdXQtPmxlbiAtPSBhcnJheXNlcGxlbjsKKwkJCQkJCW91dC0+ZGF0YVtvdXQtPmxl bl0gPSAnXDAnOworCQkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGZt dCkKKwkJZXJyb3JfY29udGV4dF9zdGFjayA9IHNxbGVycmNvbnRleHQucHJldmlvdXM7Cit9CisK K2NoYXIgKgorZGRsX2RlcGFyc2VfanNvbl90b19zdHJpbmcoY2hhciAqanNvbl9zdHIpCit7CisJ RGF0dW0JCWQ7CisJSnNvbmIJICAgKmpzb25iOworCVN0cmluZ0luZm8gb3V0ID0gKFN0cmluZ0lu Zm8pIHBhbGxvYzAoc2l6ZW9mKFN0cmluZ0luZm9EYXRhKSk7CisKKwlpbml0U3RyaW5nSW5mbyhv dXQpOworCisJZCA9IERpcmVjdEZ1bmN0aW9uQ2FsbDEoanNvbmJfaW4sCisJCQkJCQkJUG9pbnRl ckdldERhdHVtKGpzb25fc3RyKSk7CisJanNvbmIgPSAoSnNvbmIgKikgRGF0dW1HZXRQb2ludGVy KGQpOworCisJZXhwYW5kX2ZtdF9yZWN1cnNpdmUoJmpzb25iLT5yb290LCBvdXQpOworCisJcmV0 dXJuIG91dC0+ZGF0YTsKK30KKworLyotLS0tLS0KKyAqIFJldHVybnMgYSBmb3JtYXR0ZWQgc3Ry aW5nIGZyb20gYSBKU09OIG9iamVjdC4KKyAqCisgKiBUaGUgc3RhcnRpbmcgcG9pbnQgaXMgdGhl IGVsZW1lbnQgbmFtZWQgImZtdCIgKHdoaWNoIG11c3QgYmUgYSBzdHJpbmcpLgorICogVGhpcyBm b3JtYXQgc3RyaW5nIG1heSBjb250YWluIHplcm8gb3IgbW9yZSAlLWVzY2FwZXMsIHdoaWNoIGNv bnNpc3Qgb2YgYW4KKyAqIGVsZW1lbnQgbmFtZSBlbmNsb3NlZCBpbiB7IH0sIHBvc3NpYmx5IGZv bGxvd2VkIGJ5IGEgY29udmVyc2lvbiBtb2RpZmllciwKKyAqIGZvbGxvd2VkIGJ5IGEgY29udmVy c2lvbiBzcGVjaWZpZXIuCVBvc3NpYmxlIGNvbnZlcnNpb24gc3BlY2lmaWVycyBhcmU6CisgKgor ICogJQkJZXhwYW5kIHRvIGEgbGl0ZXJhbCAlLgorICogSQkJZXhwYW5kIGFzIGEgc2luZ2xlLCBu b24tcXVhbGlmaWVkIGlkZW50aWZpZXIKKyAqIEQJCWV4cGFuZCBhcyBhIHBvc3NpYmx5LXF1YWxp ZmllZCBpZGVudGlmaWVyCisgKiBUCQlleHBhbmQgYXMgYSB0eXBlIG5hbWUKKyAqIE8JCWV4cGFu ZCBhcyBhbiBvcGVyYXRvciBuYW1lCisgKiBMCQlleHBhbmQgYXMgYSBzdHJpbmcgbGl0ZXJhbCAo cXVvdGUgdXNpbmcgc2luZ2xlIHF1b3RlcykKKyAqIHMJCWV4cGFuZCBhcyBhIHNpbXBsZSBzdHJp bmcgKG5vIHF1b3RpbmcpCisgKiBuCQlleHBhbmQgYXMgYSBzaW1wbGUgbnVtYmVyIChubyBxdW90 aW5nKQorICogUgkJZXhwYW5kIGFzIGEgcm9sZSBuYW1lIChwb3NzaWJseSBxdW90ZWQgbmFtZSwg b3IgUFVCTElDKQorICoKKyAqIFRoZSBlbGVtZW50IG5hbWUgbWF5IGhhdmUgYW4gb3B0aW9uYWwg c2VwYXJhdG9yIHNwZWNpZmljYXRpb24gcHJlY2VkZWQKKyAqIGJ5IGEgY29sb24uCUl0cyBwcmVz ZW5jZSBpbmRpY2F0ZXMgdGhhdCB0aGUgZWxlbWVudCBpcyBleHBlY3RlZCB0byBiZQorICogYW4g YXJyYXk7IHRoZSBzcGVjaWZpZWQgc2VwYXJhdG9yIGlzIHVzZWQgdG8gam9pbiB0aGUgYXJyYXkg ZWxlbWVudHMuCisgKi0tLS0tLQorICovCitEYXR1bQorZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1h bmQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwl0ZXh0CSAgICpqc29uID0gUEdfR0VUQVJHX1RFWFRf UCgwKTsKKwljaGFyCSAgICpqc29uX3N0cjsKKworCWpzb25fc3RyID0gVGV4dERhdHVtR2V0Q1N0 cmluZyhqc29uKTsKKworCVBHX1JFVFVSTl9URVhUX1AoQ1N0cmluZ0dldFRleHREYXR1bShkZGxf ZGVwYXJzZV9qc29uX3RvX3N0cmluZyhqc29uX3N0cikpKTsKK30KKworLyoKKyAqIEVycm9yIGNv bnRleHQgY2FsbGJhY2sgZm9yIEpTT04gZm9ybWF0IHN0cmluZyBleHBhbnNpb24uCisgKgorICog UG9zc2libGUgaW1wcm92ZW1lbnQ6IGluZGljYXRlIHdoaWNoIGVsZW1lbnQgd2UncmUgZXhwYW5k aW5nLCBpZiBhcHBsaWNhYmxlCisgKi8KK3N0YXRpYyB2b2lkCitmbXRzdHJfZXJyb3JfY2FsbGJh Y2sodm9pZCAqYXJnKQoreworCWVycmNvbnRleHQoIndoaWxlIGV4cGFuZGluZyBmb3JtYXQgc3Ry aW5nIFwiJXNcIiIsIChjaGFyICopIGFyZyk7CisKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2NvbW1hbmRzL3NlcXVlbmNlLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9zZXF1ZW5jZS5jCmlu ZGV4IGRkZjIxOWIuLmNlMTYyMDYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3Nl cXVlbmNlLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvc2VxdWVuY2UuYwpAQCAtMTY5OSw2 ICsxNjk5LDQwIEBAIHByb2Nlc3Nfb3duZWRfYnkoUmVsYXRpb24gc2VxcmVsLCBMaXN0ICpvd25l ZF9ieSwgYm9vbCBmb3JfaWRlbnRpdHkpCiAJCXJlbGF0aW9uX2Nsb3NlKHRhYmxlcmVsLCBOb0xv Y2spOwogfQogCisvKgorICogUmV0dXJuIHNlcXVlbmNlIHBhcmFtZXRlcnMsIGRldGFpbGVkCisg Ki8KK0Zvcm1fcGdfc2VxdWVuY2VfZGF0YQorZ2V0X3NlcXVlbmNlX3ZhbHVlcyhPaWQgc2VxdWVu Y2VJZCkKK3sKKwlCdWZmZXIgICAgICBidWY7CisJU2VxVGFibGUgICAgZWxtOworCVJlbGF0aW9u ICAgIHNlcXJlbDsKKwlIZWFwVHVwbGVEYXRhIHNlcXR1cGxlOworCUZvcm1fcGdfc2VxdWVuY2Vf ZGF0YSBzZXE7CisJRm9ybV9wZ19zZXF1ZW5jZV9kYXRhIHJldFNlcTsKKworCXJldFNlcSA9IHBh bGxvYyhzaXplb2YoRm9ybURhdGFfcGdfc2VxdWVuY2VfZGF0YSkpOworCisJLyogb3BlbiBhbmQg QWNjZXNzU2hhcmVMb2NrIHNlcXVlbmNlICovCisJaW5pdF9zZXF1ZW5jZShzZXF1ZW5jZUlkLCAm ZWxtLCAmc2VxcmVsKTsKKworCWlmIChwZ19jbGFzc19hY2xjaGVjayhzZXF1ZW5jZUlkLCBHZXRV c2VySWQoKSwKKwkJCUFDTF9TRUxFQ1QgfCBBQ0xfVVBEQVRFIHwgQUNMX1VTQUdFKSAhPSBBQ0xD SEVDS19PSykKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkJKGVycmNvZGUoRVJSQ09ERV9JTlNVRkZJ Q0lFTlRfUFJJVklMRUdFKSwKKwkJCQkJIGVycm1zZygicGVybWlzc2lvbiBkZW5pZWQgZm9yIHNl cXVlbmNlICVzIiwKKwkJCQkJCQlSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShzZXFyZWwpKSkpOwor CisJc2VxID0gcmVhZF9zZXFfdHVwbGUoc2VxcmVsLCAmYnVmLCAmc2VxdHVwbGUpOworCisJbWVt Y3B5KHJldFNlcSwgc2VxLCBzaXplb2YoRm9ybURhdGFfcGdfc2VxdWVuY2VfZGF0YSkpOworCisJ VW5sb2NrUmVsZWFzZUJ1ZmZlcihidWYpOworCXJlbGF0aW9uX2Nsb3NlKHNlcXJlbCwgTm9Mb2Nr KTsKKworCXJldHVybiByZXRTZXE7Cit9CiAKIC8qCiAgKiBSZXR1cm4gc2VxdWVuY2UgcGFyYW1l dGVycyBpbiBhIGxpc3Qgb2YgdGhlIGZvcm0gY3JlYXRlZCBieSB0aGUgcGFyc2VyLgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFja2VuZC9jb21t YW5kcy90YWJsZWNtZHMuYwppbmRleCAyZGUwZWJhLi5lZTQ4NDcwIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy90 YWJsZWNtZHMuYwpAQCAtNTE4OSwxMSArNTE4OSwxMiBAQCBBVEV4ZWNDbWQoTGlzdCAqKndxdWV1 ZSwgQWx0ZXJlZFRhYmxlSW5mbyAqdGFiLAogCQkJCQkJCQkJICBjdXJfcGFzcywgY29udGV4dCk7 CiAJCQlBc3NlcnQoY21kICE9IE5VTEwpOwogCQkJaWYgKHJlbC0+cmRfcmVsLT5yZWxraW5kID09 IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCi0JCQkJQVRFeGVjQXR0YWNoUGFydGl0aW9uKHdx dWV1ZSwgcmVsLCAoUGFydGl0aW9uQ21kICopIGNtZC0+ZGVmLAotCQkJCQkJCQkJICBjb250ZXh0 KTsKKwkJCQlhZGRyZXNzID0gQVRFeGVjQXR0YWNoUGFydGl0aW9uKHdxdWV1ZSwgcmVsLAorCQkJ CQkJCQkJCQkJKFBhcnRpdGlvbkNtZCAqKSBjbWQtPmRlZiwKKwkJCQkJCQkJCQkJCWNvbnRleHQp OwogCQkJZWxzZQotCQkJCUFURXhlY0F0dGFjaFBhcnRpdGlvbklkeCh3cXVldWUsIHJlbCwKLQkJ CQkJCQkJCQkgKChQYXJ0aXRpb25DbWQgKikgY21kLT5kZWYpLT5uYW1lKTsKKwkJCQlhZGRyZXNz ID0gQVRFeGVjQXR0YWNoUGFydGl0aW9uSWR4KHdxdWV1ZSwgcmVsLAorCQkJCQkJCQkJCQkJICAg KChQYXJ0aXRpb25DbWQgKikgY21kLT5kZWYpLT5uYW1lKTsKIAkJCWJyZWFrOwogCQljYXNlIEFU X0RldGFjaFBhcnRpdGlvbjoKIAkJCWNtZCA9IEFUUGFyc2VUcmFuc2Zvcm1DbWQod3F1ZXVlLCB0 YWIsIHJlbCwgY21kLCBmYWxzZSwgbG9ja21vZGUsCkBAIC01MjAxLDEyICs1MjAyLDEyIEBAIEFU RXhlY0NtZChMaXN0ICoqd3F1ZXVlLCBBbHRlcmVkVGFibGVJbmZvICp0YWIsCiAJCQlBc3NlcnQo Y21kICE9IE5VTEwpOwogCQkJLyogQVRQcmVwQ21kIGVuc3VyZXMgaXQgbXVzdCBiZSBhIHRhYmxl ICovCiAJCQlBc3NlcnQocmVsLT5yZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05F RF9UQUJMRSk7Ci0JCQlBVEV4ZWNEZXRhY2hQYXJ0aXRpb24od3F1ZXVlLCB0YWIsIHJlbCwKLQkJ CQkJCQkJICAoKFBhcnRpdGlvbkNtZCAqKSBjbWQtPmRlZiktPm5hbWUsCi0JCQkJCQkJCSAgKChQ YXJ0aXRpb25DbWQgKikgY21kLT5kZWYpLT5jb25jdXJyZW50KTsKKwkJCWFkZHJlc3MgPSBBVEV4 ZWNEZXRhY2hQYXJ0aXRpb24od3F1ZXVlLCB0YWIsIHJlbCwKKwkJCQkJCQkJCQkJKChQYXJ0aXRp b25DbWQgKikgY21kLT5kZWYpLT5uYW1lLAorCQkJCQkJCQkJCQkoKFBhcnRpdGlvbkNtZCAqKSBj bWQtPmRlZiktPmNvbmN1cnJlbnQpOwogCQkJYnJlYWs7CiAJCWNhc2UgQVRfRGV0YWNoUGFydGl0 aW9uRmluYWxpemU6Ci0JCQlBVEV4ZWNEZXRhY2hQYXJ0aXRpb25GaW5hbGl6ZShyZWwsICgoUGFy dGl0aW9uQ21kICopIGNtZC0+ZGVmKS0+bmFtZSk7CisJCQlhZGRyZXNzID0gQVRFeGVjRGV0YWNo UGFydGl0aW9uRmluYWxpemUocmVsLCAoKFBhcnRpdGlvbkNtZCAqKSBjbWQtPmRlZiktPm5hbWUp OwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CQkJCS8qIG9vcHMgKi8KIAkJCWVsb2coRVJST1IsICJ1 bnJlY29nbml6ZWQgYWx0ZXIgdGFibGUgdHlwZTogJWQiLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGls cy5jCmluZGV4IGMzOTM3YTYuLjQ1MGMwYjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxz L2FkdC9ydWxldXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcnVsZXV0aWxzLmMK QEAgLTQ4Nyw4ICs0ODcsNiBAQCBzdGF0aWMgdm9pZCBnZXRfZnJvbV9jbGF1c2VfY29sZGVmbGlz dChSYW5nZVRibEZ1bmN0aW9uICpydGZ1bmMsCiAJCQkJCQkJCQkgICBkZXBhcnNlX2NvbnRleHQg KmNvbnRleHQpOwogc3RhdGljIHZvaWQgZ2V0X3RhYmxlc2FtcGxlX2RlZihUYWJsZVNhbXBsZUNs YXVzZSAqdGFibGVzYW1wbGUsCiAJCQkJCQkJCWRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7Ci1z dGF0aWMgdm9pZCBnZXRfb3BjbGFzc19uYW1lKE9pZCBvcGNsYXNzLCBPaWQgYWN0dWFsX2RhdGF0 eXBlLAotCQkJCQkJCSBTdHJpbmdJbmZvIGJ1Zik7CiBzdGF0aWMgTm9kZSAqcHJvY2Vzc0luZGly ZWN0aW9uKE5vZGUgKm5vZGUsIGRlcGFyc2VfY29udGV4dCAqY29udGV4dCk7CiBzdGF0aWMgdm9p ZCBwcmludFN1YnNjcmlwdHMoU3Vic2NyaXB0aW5nUmVmICpzYnNyZWYsIGRlcGFyc2VfY29udGV4 dCAqY29udGV4dCk7CiBzdGF0aWMgY2hhciAqZ2V0X3JlbGF0aW9uX25hbWUoT2lkIHJlbGlkKTsK QEAgLTUwMiw3ICs1MDAsNiBAQCBzdGF0aWMgY2hhciAqZ2VuZXJhdGVfb3BlcmF0b3JfbmFtZShP aWQgb3BlcmlkLCBPaWQgYXJnMSwgT2lkIGFyZzIpOwogc3RhdGljIHZvaWQgYWRkX2Nhc3RfdG8o U3RyaW5nSW5mbyBidWYsIE9pZCB0eXBpZCk7CiBzdGF0aWMgY2hhciAqZ2VuZXJhdGVfcXVhbGlm aWVkX3R5cGVfbmFtZShPaWQgdHlwaWQpOwogc3RhdGljIHRleHQgKnN0cmluZ190b190ZXh0KGNo YXIgKnN0cik7Ci1zdGF0aWMgY2hhciAqZmxhdHRlbl9yZWxvcHRpb25zKE9pZCByZWxpZCk7CiBz dGF0aWMgdm9pZCBnZXRfcmVsb3B0aW9ucyhTdHJpbmdJbmZvIGJ1ZiwgRGF0dW0gcmVsb3B0aW9u cyk7CiBzdGF0aWMgdm9pZCBnZXRfanNvbl9wYXRoX3NwZWMoTm9kZSAqcGF0aF9zcGVjLCBkZXBh cnNlX2NvbnRleHQgKmNvbnRleHQsCiAJCQkJCQkJICAgYm9vbCBzaG93aW1wbGljaXQpOwpAQCAt MTg5MCw2ICsxODg3LDEyIEBAIHBnX2dldF9wYXJ0a2V5ZGVmX2NvbHVtbnMoT2lkIHJlbGlkLCBi b29sIHByZXR0eSkKIAlyZXR1cm4gcGdfZ2V0X3BhcnRrZXlkZWZfd29ya2VyKHJlbGlkLCBwcmV0 dHlGbGFncywgdHJ1ZSwgZmFsc2UpOwogfQogCitjaGFyICoKK3BnX2dldF9wYXJ0a2V5ZGVmX3Np bXBsZShPaWQgcmVsaWQpCit7CisJcmV0dXJuIHBnX2dldF9wYXJ0a2V5ZGVmX3dvcmtlcihyZWxp ZCwgMCwgZmFsc2UsIGZhbHNlKTsKK30KKwogLyoKICAqIEludGVybmFsIHdvcmtob3JzZSB0byBk ZWNvbXBpbGUgYSBwYXJ0aXRpb24ga2V5IGRlZmluaXRpb24uCiAgKi8KQEAgLTIxNDMsNiArMjE0 NiwxNSBAQCBwZ19nZXRfY29uc3RyYWludGRlZl9leHQoUEdfRlVOQ1RJT05fQVJHUykKIH0KIAog LyoKKyAqIEludGVybmFsIHZlcnNpb24gdGhhdCByZXR1cm5zIGRlZmluaXRpb24gb2YgYSBDT05T VFJBSU5UIGNvbW1hbmQKKyAqLworY2hhciAqCitwZ19nZXRfY29uc3RyYWludGRlZl9jb21tYW5k X3NpbXBsZShPaWQgY29uc3RyYWludElkKQoreworCXJldHVybiBwZ19nZXRfY29uc3RyYWludGRl Zl93b3JrZXIoY29uc3RyYWludElkLCBmYWxzZSwgMCwgZmFsc2UpOworfQorCisvKgogICogSW50 ZXJuYWwgdmVyc2lvbiB0aGF0IHJldHVybnMgYSBmdWxsIEFMVEVSIFRBQkxFIC4uLiBBREQgQ09O U1RSQUlOVCBjb21tYW5kCiAgKi8KIGNoYXIgKgpAQCAtMTIwMjAsNyArMTIwMzIsNyBAQCBnZXRf dGFibGVzYW1wbGVfZGVmKFRhYmxlU2FtcGxlQ2xhdXNlICp0YWJsZXNhbXBsZSwgZGVwYXJzZV9j b250ZXh0ICpjb250ZXh0KQogICogYWN0dWFsX2RhdGF0eXBlLiAgKElmIHlvdSBkb24ndCB3YW50 IHRoaXMgYmVoYXZpb3IsIGp1c3QgcGFzcwogICogSW52YWxpZE9pZCBmb3IgYWN0dWFsX2RhdGF0 eXBlLikKICAqLwotc3RhdGljIHZvaWQKK3ZvaWQKIGdldF9vcGNsYXNzX25hbWUoT2lkIG9wY2xh c3MsIE9pZCBhY3R1YWxfZGF0YXR5cGUsCiAJCQkJIFN0cmluZ0luZm8gYnVmKQogewpAQCAtMTI4 MDEsNyArMTI4MTMsNyBAQCBnZXRfcmVsb3B0aW9ucyhTdHJpbmdJbmZvIGJ1ZiwgRGF0dW0gcmVs b3B0aW9ucykKIC8qCiAgKiBHZW5lcmF0ZSBhIEMgc3RyaW5nIHJlcHJlc2VudGluZyBhIHJlbGF0 aW9uJ3MgcmVsb3B0aW9ucywgb3IgTlVMTCBpZiBub25lLgogICovCi1zdGF0aWMgY2hhciAqCitj aGFyICoKIGZsYXR0ZW5fcmVsb3B0aW9ucyhPaWQgcmVsaWQpCiB7CiAJY2hhcgkgICAqcmVzdWx0 ID0gTlVMTDsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQgYi9z cmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CmluZGV4IDg3YWE1NzEuLjhhYTYzNmMgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKKysrIGIvc3JjL2luY2x1 ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdApAQCAtMTE4ODQsNSArMTE4ODQsMTAgQEAKICAgcHJvbmFt ZSA9PiAnYnJpbl9taW5tYXhfbXVsdGlfc3VtbWFyeV9zZW5kJywgcHJvdm9sYXRpbGUgPT4gJ3Mn LAogICBwcm9yZXR0eXBlID0+ICdieXRlYScsIHByb2FyZ3R5cGVzID0+ICdwZ19icmluX21pbm1h eF9tdWx0aV9zdW1tYXJ5JywKICAgcHJvc3JjID0+ICdicmluX21pbm1heF9tdWx0aV9zdW1tYXJ5 X3NlbmQnIH0sCi0KK3sgb2lkID0+ICc0NjQyJywgZGVzY3IgPT4gJ2RkbCBkZXBhcnNlJywKKyAg cHJvbmFtZSA9PiAnZGRsX2RlcGFyc2VfdG9fanNvbicsIHByb3JldHR5cGUgPT4gJ3RleHQnLAor ICBwcm9hcmd0eXBlcyA9PiAncGdfZGRsX2NvbW1hbmQnLCBwcm9zcmMgPT4gJ2RkbF9kZXBhcnNl X3RvX2pzb24nIH0sCit7IG9pZCA9PiAnNDY0MycsIGRlc2NyID0+ICdqc29uIHRvIHN0cmluZycs CisgIHByb25hbWUgPT4gJ2RkbF9kZXBhcnNlX2V4cGFuZF9jb21tYW5kJywgcHJvcmV0dHlwZSA9 PiAndGV4dCcsCisgIHByb2FyZ3R5cGVzID0+ICd0ZXh0JywgcHJvc3JjID0+ICdkZGxfZGVwYXJz ZV9leHBhbmRfY29tbWFuZCcgfSwKIF0KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1hbmRz L3NlcXVlbmNlLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9zZXF1ZW5jZS5oCmluZGV4IDlkYTIz MDAuLjI4NzUxMDYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1hbmRzL3NlcXVlbmNlLmgK KysrIGIvc3JjL2luY2x1ZGUvY29tbWFuZHMvc2VxdWVuY2UuaApAQCAtNTQsNiArNTQsNyBAQCB0 eXBlZGVmIHN0cnVjdCB4bF9zZXFfcmVjCiBleHRlcm4gaW50NjQgbmV4dHZhbF9pbnRlcm5hbChP aWQgcmVsaWQsIGJvb2wgY2hlY2tfcGVybWlzc2lvbnMpOwogZXh0ZXJuIERhdHVtIG5leHR2YWwo UEdfRlVOQ1RJT05fQVJHUyk7CiBleHRlcm4gTGlzdCAqc2VxdWVuY2Vfb3B0aW9ucyhPaWQgcmVs aWQpOworZXh0ZXJuIEZvcm1fcGdfc2VxdWVuY2VfZGF0YSBnZXRfc2VxdWVuY2VfdmFsdWVzKE9p ZCBzZXF1ZW5jZUlkKTsKIAogZXh0ZXJuIE9iamVjdEFkZHJlc3MgRGVmaW5lU2VxdWVuY2UoUGFy c2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVTZXFTdG10ICpzdG10KTsKIGV4dGVybiBPYmplY3RBZGRy ZXNzIEFsdGVyU2VxdWVuY2UoUGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclNlcVN0bXQgKnN0bXQp OwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdGNvcC9kZGxfZGVwYXJzZS5oIGIvc3JjL2luY2x1 ZGUvdGNvcC9kZGxfZGVwYXJzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmZiNDNkMjMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS90Y29wL2RkbF9kZXBhcnNl LmgKQEAgLTAsMCArMSwxMyBAQAorI2lmbmRlZiBERExfREVQQVJTRV9ICisjZGVmaW5lIERETF9E RVBBUlNFX0gKKworI2luY2x1ZGUgInRjb3AvZGVwYXJzZV91dGlsaXR5LmgiCisKK2V4dGVybiBj aGFyICpkZXBhcnNlX3V0aWxpdHlfY29tbWFuZChDb2xsZWN0ZWRDb21tYW5kICpjbWQpOworZXh0 ZXJuIGNoYXIgKmRkbF9kZXBhcnNlX2pzb25fdG9fc3RyaW5nKGNoYXIgKmpzb25iKTsKK2V4dGVy biBjaGFyICpkZXBhcnNlX2Ryb3BfdGFibGUoY29uc3QgY2hhciAqb2JqaWRlbnRpdHksIERyb3BC ZWhhdmlvciBiZWhhdmlvcik7CitleHRlcm4gY2hhciAqZGVwYXJzZV9kcm9wX3NlcXVlbmNlKGNv bnN0IGNoYXIgKm9iamlkZW50aXR5LCBEcm9wQmVoYXZpb3IgYmVoYXZpb3IpOworZXh0ZXJuIGNo YXIgKmRlcGFyc2VfZHJvcF9zY2hlbWEoY29uc3QgY2hhciAqb2JqaWRlbnRpdHksIERyb3BCZWhh dmlvciBiZWhhdmlvcik7CitleHRlcm4gY2hhciAqZGVwYXJzZV9kcm9wX2luZGV4KGNvbnN0IGNo YXIgKm9iamlkZW50aXR5LCBEcm9wQmVoYXZpb3IgYmVoYXZpb3IpOworCisjZW5kaWYJCS8qIERE TF9ERVBBUlNFX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGls aXR5LmggYi9zcmMvaW5jbHVkZS90Y29wL2RlcGFyc2VfdXRpbGl0eS5oCmluZGV4IDk0ZGUxM2Qu LmI1MzI5NGIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3Rjb3AvZGVwYXJzZV91dGlsaXR5LmgK KysrIGIvc3JjL2luY2x1ZGUvdGNvcC9kZXBhcnNlX3V0aWxpdHkuaApAQCAtNjIsNiArNjIsNyBA QCB0eXBlZGVmIHN0cnVjdCBDb2xsZWN0ZWRDb21tYW5kCiAJCXsKIAkJCU9pZAkJCW9iamVjdElk OwogCQkJT2lkCQkJY2xhc3NJZDsKKwkJCWJvb2wJCXJld3JpdGU7CiAJCQlMaXN0CSAgICpzdWJj bWRzOwogCQl9CQkJYWx0ZXJUYWJsZTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvdXRpbHMv cnVsZXV0aWxzLmggYi9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaAppbmRleCA3ZDQ4OTcx Li40NDJkMWVkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaAorKysg Yi9zcmMvaW5jbHVkZS91dGlscy9ydWxldXRpbHMuaApAQCAtMjYsOSArMjYsMTEgQEAgZXh0ZXJu IGNoYXIgKnBnX2dldF9pbmRleGRlZl9jb2x1bW5zKE9pZCBpbmRleHJlbGlkLCBib29sIHByZXR0 eSk7CiBleHRlcm4gY2hhciAqcGdfZ2V0X3F1ZXJ5ZGVmKFF1ZXJ5ICpxdWVyeSwgYm9vbCBwcmV0 dHkpOwogCiBleHRlcm4gY2hhciAqcGdfZ2V0X3BhcnRrZXlkZWZfY29sdW1ucyhPaWQgcmVsaWQs IGJvb2wgcHJldHR5KTsKK2V4dGVybiBjaGFyICpwZ19nZXRfcGFydGtleWRlZl9zaW1wbGUoT2lk IHJlbGlkKTsKIGV4dGVybiBjaGFyICpwZ19nZXRfcGFydGNvbnN0cmRlZl9zdHJpbmcoT2lkIHBh cnRpdGlvbklkLCBjaGFyICphbGlhc25hbWUpOwogCiBleHRlcm4gY2hhciAqcGdfZ2V0X2NvbnN0 cmFpbnRkZWZfY29tbWFuZChPaWQgY29uc3RyYWludElkKTsKK2V4dGVybiBjaGFyICpwZ19nZXRf Y29uc3RyYWludGRlZl9jb21tYW5kX3NpbXBsZShPaWQgY29uc3RyYWludElkKTsKIGV4dGVybiBj aGFyICpkZXBhcnNlX2V4cHJlc3Npb24oTm9kZSAqZXhwciwgTGlzdCAqZHBjb250ZXh0LAogCQkJ CQkJCQlib29sIGZvcmNlcHJlZml4LCBib29sIHNob3dpbXBsaWNpdCk7CiBleHRlcm4gTGlzdCAq ZGVwYXJzZV9jb250ZXh0X2Zvcihjb25zdCBjaGFyICphbGlhc25hbWUsIE9pZCByZWxpZCk7CkBA IC00MSw2ICs0Myw5IEBAIGV4dGVybiBMaXN0ICpzZWxlY3RfcnRhYmxlX25hbWVzX2Zvcl9leHBs YWluKExpc3QgKnJ0YWJsZSwKIGV4dGVybiBjaGFyICpnZW5lcmF0ZV9jb2xsYXRpb25fbmFtZShP aWQgY29sbGlkKTsKIGV4dGVybiBjaGFyICpnZW5lcmF0ZV9vcGNsYXNzX25hbWUoT2lkIG9wY2xh c3MpOwogZXh0ZXJuIGNoYXIgKmdldF9yYW5nZV9wYXJ0Ym91bmRfc3RyaW5nKExpc3QgKmJvdW5k X2RhdHVtcyk7CitleHRlcm4gdm9pZCBnZXRfb3BjbGFzc19uYW1lKE9pZCBvcGNsYXNzLCBPaWQg YWN0dWFsX2RhdGF0eXBlLAorCQkJCQkJCSAgU3RyaW5nSW5mbyBidWYpOworZXh0ZXJuIGNoYXIg KmZsYXR0ZW5fcmVsb3B0aW9ucyhPaWQgcmVsaWQpOwogCiBleHRlcm4gY2hhciAqcGdfZ2V0X3N0 YXRpc3RpY3NvYmpkZWZfc3RyaW5nKE9pZCBzdGF0ZXh0aWQpOwogCi0tIAoyLjcuMi53aW5kb3dz LjEKCg== --_005_OS0PR01MB571676298B814F7F5690D92994BB9OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v10-0002-Support-DDL-replication.patch" Content-Description: v10-0002-Support-DDL-replication.patch Content-Disposition: attachment; filename="v10-0002-Support-DDL-replication.patch"; size=128376; creation-date="Wed, 29 Jun 2022 09:47:00 GMT"; modification-date="Wed, 29 Jun 2022 09:54:38 GMT" Content-Transfer-Encoding: base64 RnJvbSA0MTEzNDk1YTczYmQwYzlkMWU4MTgyODk1ZmU1M2RiZmNjYTY1ZTNiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiaG91emouZm5zdCIgPGhvdXpqLmZuc3RAY24uZnVqaXRzdS5j b20+CkRhdGU6IFR1ZSwgMjEgSnVuIDIwMjIgMTc6NDE6MjcgKzA4MDAKU3ViamVjdDogW1BBVENI XSBTdXBwb3J0IERETCByZXBsaWNhdGlvbi4KClRvIHN1cHBvcnQgRERMIHJlcGxpY2F0aW9uLCB3 ZSB1c2UgZXZlbnQgdHJpZ2dlciBhbmQgRERMIGRlcGFyc2luZwpmYWNpbGl0aWVzLiBXaGlsZSBj cmVhdGluZyBhIHB1YmxpY2F0aW9uLCB3ZSByZWdpc3RlciBhIGNvbW1hbmQgZW5kCnRyaWdnZXIg dGhhdCBkZXBhcnNlcyB0aGUgRERMIGFzIGEgSlNPTiBibG9iLCBhbmQgV0FMIGxvZ3MgaXQuIFRo ZSBldmVudAp0cmlnZ2VyIGlzIGF1dG9tYXRpY2FsbHkgcmVtb3ZlZCBhdCB0aGUgdGltZSBvZiBk cm9wIHB1YmxpY2F0aW9uLiBUaGUKV0FMU2VuZGVyIGRlY29kZXMgdGhlIFdBTCBhbmQgc2VuZHMg aXQgZG93bnN0cmVhbSBzaW1pbGFyIHRvIG90aGVyIERNTApjb21tYW5kcy4gVGhlIHN1YnNjcmli ZXIgdGhlbiBjb252ZXJ0cyBKU09OIGJhY2sgdG8gdGhlIERETCBjb21tYW5kIHN0cmluZwphbmQg ZXhlY3V0ZXMgaXQuIEluIHRoZSBzdWJzY3JpYmVyLCB3ZSBhbHNvIGFkZCB0aGUgbmV3bHkgYWRk ZWQgcmVsIHRvCnBnX3N1YnNjcmlwdGlvbl9yZWwgc28gdGhhdCB0aGUgRE1MIGNoYW5nZXMgb24g dGhlIG5ldyB0YWJsZSBjYW4gYmUKcmVwbGljYXRlZCB3aXRob3V0IGhhdmluZyB0byBtYW51YWxs eSBydW4KIkFMVEVSIFNVQlNDUklQVElPTiAuLi4gUkVGUkVTSCBQVUJMSUNBVElPTiIuCgpUaGlz IGlzIGEgUE9DIHBhdGNoIHRvIHNob3cgaG93IHVzaW5nIGV2ZW50IHRyaWdnZXJzIGFuZCBEREwg ZGVwYXJzaW5nCmZhY2lsaXRpZXMgd2UgY2FuIGltcGxlbWVudCBEREwgcmVwbGljYXRpb24uIFNv LCB0aGUgaW1wbGVtZW50YXRpb24gaXMKcmVzdHJpY3RlZCB0byBDUkVBVEUgVEFCTEUvQUxURVIg VEFCTEUvRFJPUCBUQUJMRSBjb21tYW5kcy4KCi0gRm9yIG5vbi1yZXdyaXRlIEFMVEVSIFtUQUJM RXxTRVFVRU5DRXxTQ0hFTUFdIGNvbW1hbmQgYW5kCi0gICAgIENSRUFURSBbVEFCTEV8U0VRVUVO Q0V8U0NIRU1BfElOREVYXSBjb21tYW5kOgp3ZSBkZXBhcnNlIHRoZSBjb21tYW5kIGF0IGRkbF9j b21tYW5kX2VuZCBldmVudCB0cmlnZ2VyIGFuZCBXQUwgbG9nIHRoZQpkZXBhcnNlZCBqc29uIHN0 cmluZy4gVGhlIFdBTFNlbmRlciBkZWNvZGVzIHRoZSBXQUwgYW5kIHNlbmRzIGl0IHRvCnN1YnNj cmliZXIgaWYgdGhlIGNyZWF0ZWQvYWx0ZXJlZCB0YWJsZSBpcyBwdWJsaXNoZWQuIEl0IHN1cHBv cnRzIG1vc3Qgb2YKQUxURVIgVEFCTEUgY29tbWFuZCBleGNlcHQgc29tZSBjb21tYW5kcyhEREwg cmVsYXRlZCB0byBQQVJUSVRJT05FRCBUQUJMRQouLi4pIHRoYXQgaW50cm9kdWNlZCByZWNlbnRs eSB3aGljaCBoYXZlbid0IGJlZW4gc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50CmRkbF9kZXBhcnNl ciwgd2Ugd2lsbCBzdXBwb3J0IHRoYXQgbGF0ZXIuCgpOb3RlIHRoYXQgdGhlIHJlcGxpY2F0aW9u IGZvciBBTFRFUiBJTkRFWCBjb21tYW5kIGlzIHN0aWxsIHVuZGVyCnByb2dyZXNzLgoKLSBGb3Ig RFJPUCBbVEFCTEV8U0VRVUVOQ0V8U0NIRU1BfElOREVYXToKVGhlICdjb21tYW5kIHN0YXJ0JyBl dmVudCBoYW5kbGVyIGxvZ3MgYSBkZGwgbWVzc2FnZSB3aXRoIHRoZSByZWxpZHMgb2YKdGhlIHRh YmxlcyB0aGF0IGFyZSBkcm9wcGVkIHdoaWNoIHRoZSBvdXRwdXQgcGx1Z2luIChwZ291dHB1dCkg c3RvcmVzIGluCml0cyBpbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSBhZnRlciB2ZXJpZnlpbmcgdGhh dCBpdCBpcyBmb3IgYSB0YWJsZSB0aGF0IGlzCnBhcnQgb2YgdGhlIHB1YmxpY2F0aW9uLiBMYXRl ciB0aGUgJ2NvbW1hbmQgZW5kJyBldmVudCBoYW5kbGVyIHNlbmRzIHRoZQphY3R1YWwgZHJvcCBt ZXNzYWdlLiBQZ291dHB1dCBvbiByZWNlaXZpbmcgdGhlIGNvbW1hbmQgZW5kLCBvbmx5IHNlbmRz IG91dAp0aGUgZHJvcCBjb21tYW5kIG9ubHkgaWYgaXQgaXMgZm9yIG9uZSBvZiB0aGUgcmVsaWRz IG1hcmtlZCBmb3IgZGVsZXRpbmcuClRoZSByZWFzb24gd2UgaGF2ZSB0byBkbyB0aGlzIGlzIGJl Y2F1c2UsIG9uY2UgdGhlIGxvZ2ljYWwgZGVjb2RlcgpyZWNlaXZlcyB0aGUgJ2NvbW1hbmQgZW5k JyBtZXNzYWdlLCAgdGhlIHJlbGlkIG9mIHRoZSB0YWJsZSBpcyBubyBsb25nZXIKdmFsaWQgYXMg aXQgaGFzIGJlZW4gZGVsZXRlZCBhcyBwYXJ0IG9mIGludmFsaWRhdGlvbnMgcmVjZWl2ZWQgZm9y IHRoZQpkcm9wIHRhYmxlIGNvbW1hbmQuIEl0IGlzIG5vIGxvbmdlciBwb3NzaWJsZSB0byB2ZXJp ZnkgaWYgdGhlIHRhYmxlIGlzCnBhcnQgb2YgdGhlIHB1YmxpY2F0aW9uIGxpc3Qgb3Igbm90LiBU byBtYWtlIHRoaXMgcG9zc2libGUsIEkgaGF2ZSBhZGRlZAp0d28gbW9yZSBlbGVtZW50cyB0byB0 aGUgZGRsIHhsb2cgYW5kIGRkbCBtZXNzYWdlLCAocmVsaWQgYW5kIGNtZHR5cGUpLgoKV2UgY291 bGQgaGF2ZSBhbHNvIGhhbmRsZWQgYWxsIHRoaXMgb24gdGhlIHN1YnNjcmliZXIgc2lkZSBhcyB3 ZWxsLCBidXQKdGhhdCB3b3VsZCBtZWFuIHNlbmRpbmcgc3B1cmlvdXMgZGRsIG1lc3NhZ2VzIGZv ciB0YWJsZXMgdGhhdCBhcmUgbm90IHBhcnQKb2YgdGhlIHB1YmxpY2F0aW9uLgoKLSBGb3IgdGFi bGVfcmV3cml0ZSBBTFRFUiBUQUJMRSBjb21tYW5kOgooQUxURVIgQ09MVU1OIFRZUEUsIEFERCBD T0xVTU4gREVGQVVMVCwgU0VUIExPR0dFRCwgU0VUIEFDQ0VTUyBNRVRIT0QpCgp3ZSBkZXBhcnNl IHRoZSBjb21tYW5kIGFuZCBXQUwgbG9nIHRoZSBkZXBhcnNlZCBqc29uIHN0cmluZyBhdAp0YWJs ZV9yZXdyaXRlIGV2ZW50IHRyaWdnZXIuIFRoZSBXQUxTZW5kZXIgZGVjb2RlcyB0aGUgV0FMIGFu ZCBzZW5kcyBpdCB0bwpzdWJzY3JpYmVyIGlmIHRoZSBhbHRlcmVkIHRhYmxlIGlzIHB1Ymxpc2hl ZC4gVGhlbiwgdGhlIFdBTFNlbmRlciB3aWxsCmNvbnZlcnQgdGhlIHVwY29taW5nIHJld3JpdGUg SU5TRVJUcyB0byBVUERBVEVzIGFuZCBzZW5kIHRoZW0gdG8Kc3Vic2NyaWJlciBzbyB0aGF0IHRo ZSBkYXRhIGJldHdlZW4gcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyIGNhbiBhbHdheXMgYmUKY29u c2lzdGVudC4gTm90ZSB0aGF0IHRoZSB0YWJsZXMgdGhhdCBwdWJsaXNoIHJld3JpdGUgZGRsIG11 c3QgaGF2ZSBhCnJlcGxpY2EgaWRlbnRpdHkgY29uZmlndXJlZCBpbiBvcmRlciB0byBiZSBhYmxl IHRvIHJlcGxpY2F0ZSB0aGUgdXBjb21pbmcKcmV3cml0ZSBVUERBVEVzLgoKV2UgZG8gdGhpcyB3 YXkgYmVjYXVzZSBvZiB0d28gcmVhc29uOgooMSkgVGhlIGRhdGEgYmVmb3JlIHRoZSByZXdyaXRl IGRkbCBjb3VsZCBhbHJlYWR5IGJlIGRpZmZlcmVudCBhbW9uZwpwdWJsaXNoZXIgYW5kIHN1YnNj cmliZXIuIFRvIG1ha2Ugc3VyZSB0aGUgZXh0cmEgZGF0YSBpbiBzdWJzY3JpYmVyIHdoaWNoCmRv ZXNuJ3QgZXhpc3QgaW4gcHVibGlzaGVyIGFsc28gZ2V0IHJld3JpdHRlbiwgd2UgbmVlZCB0byBs ZXQgdGhlCnN1YnNjcmliZXIgZXhlY3V0ZSB0aGUgb3JpZ2luYWwgcmV3cml0ZSBkZGwgdG8gcmV3 cml0ZSBhbGwgdGhlIGRhdGEgYXQKZmlyc3QuCgooMikgdGhlIGRhdGEgYWZ0ZXIgZXhlY3V0aW5n IHJld3JpdGUgZGRsIGNvdWxkIGJlIGRpZmZlcmVudCBhbW9uZwpwdWJsaXNoZXIgYW5kIHN1YnNj cmliZXIoZHVlIHRvIGRpZmZlcmVudCBmdW5jdGlvbnMvb3BlcmF0b3JzIHVzZWQgZHVyaW5nCnJl d3JpdGUpLCBzbyB3ZSBuZWVkIHRvIHJlcGxpY2F0ZSB0aGUgcmV3cml0ZSBVUERBVEVzIHRvIGtl ZXAgdGhlIGRhdGEKY29uc2lzdGVudC4KClRPIElNUFJPVkU6ClRoaXMgYXBwcm9hY2ggY291bGQg YmUgaW1wcm92ZWQgYnkgbGV0dGluZyB0aGUgc3Vic2NyaWJlciB0cnkgdG8gdXBkYXRlCnRoZSBl eHRyYSBkYXRhIGl0c2VsZiBpbnN0ZWFkIG9mIGRvaW5nIGZ1bGx5IHJld3JpdGUgZGRsIGFuZCB1 c2UgdGhlCnVwY29taW5nIHJld3JpdGUgVVBEQVRFcyB0byByZXdyaXRlIHRoZSByZXN0IGRhdGEu IFRvIGFjaGlldmUgdGhpcywgd2UKY291bGQgbW9kaWZ5IHRoZSBkZXBhcnNlZCBqc29uIHN0cmlu ZyB0byB0ZW1wb3JhcmlseSByZW1vdmUgdGhlIHJld3JpdGUKcGFydCBhbmQgYWRkIHNvbWUgbG9n aWMgaW4gc3Vic2NyaWJlciB0byB1cGRhdGUgdGhlIGV4dHJhIGRhdGEuCkJlc2lkZXMsIHdlIG1h eSBub3QgbmVlZCB0byBzZW5kIHJld3JpdGUgY2hhbmdlcyBmb3IgYWxsIHR5cGUgb2YgcmV3cml0 ZQpkZGwsIGZvciBleGFtcGxlLCBpdCBzZWVtcyBmaW5lIHRvIHNraXAgc2VuZGluZyByZXdyaXRl IGNoYW5nZXMgZm9yIEFMVEVSClRBQkxFIFNFVCBMT0dHRUQgYXMgdGhlIGRhdGEgaW4gdGhlIHRh YmxlIGRvZXNuJ3QgYWN0dWFsbHkgYmUgY2hhbmdlZC4gV2UKY291bGQgdXNlIHRoZSBkZXBhcnNl ciBhbmQgZXZlbnQgdHJpZ2dlciB0byBmaWx0ZXIgdGhlc2UgZGRscyBhbmQgc2tpcApzZW5kaW5n IHJld3JpdGUgY2hhbmdlcyBmb3IgdGhlbS4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRl c2MvTWFrZWZpbGUgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRl c2MvbG9naWNhbGRkbG1zZ2Rlc2MuYyB8ICA1MiArKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJh bnNhbS9ybWdyLmMgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9jYXRhbG9nL3Bn X3B1YmxpY2F0aW9uLmMgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9jb21tYW5kcy9l dmVudF90cmlnZ2VyLmMgICAgICAgICAgICB8IDIyMSArKysrKysrKysrKysrLQogc3JjL2JhY2tl bmQvY29tbWFuZHMvcHVibGljYXRpb25jbWRzLmMgICAgICAgICAgfCAxMDAgKysrKysrCiBzcmMv YmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYyAgICAgICAgICAgICAgICB8ICAgMiArLQogc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZSAgICAgICAgfCAgIDEgKwogc3Jj L2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZGxtZXNzYWdlLmMgICAgfCAgODYgKysrKysr CiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jICAgICAgICB8ICA0MSAr KysKIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9naWNhbC5jICAgICAgIHwgIDkz ICsrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jICAgICAgICAg fCAgNTIgKysrLQogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZW9yZGVyYnVmZmVy LmMgfCAxMzkgKysrKysrKystCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtl ci5jICAgICAgICB8IDIzMiArKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvcmVwbGljYXRpb24v cGdvdXRwdXQvcGdvdXRwdXQuYyAgICAgfCAxOTIgKysrKysrKysrKystCiBzcmMvYmFja2VuZC91 dGlscy9hZHQvcmlfdHJpZ2dlcnMuYyAgICAgICAgICAgICB8ICAgMiArCiBzcmMvYmFja2VuZC91 dGlscy9jYWNoZS9yZWxjYWNoZS5jICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvYmluL3BnX2R1 bXAvcGdfZHVtcC5jICAgICAgICAgICAgICAgICAgICAgICB8ICAyNyArLQogc3JjL2Jpbi9wZ19k dW1wL3BnX2R1bXAuaCAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9wZ193 YWxkdW1wL3JtZ3JkZXNjLmMgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogc3JjL2Jpbi9wc3Fs L2Rlc2NyaWJlLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTcgKy0KIHNyYy9pbmNsdWRl L2FjY2Vzcy9ybWdybGlzdC5oICAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHJvYy5kYXQgICAgICAgICAgICAgICAgIHwgICA5ICsKIHNyYy9pbmNsdWRl L2NhdGFsb2cvcGdfcHVibGljYXRpb24uaCAgICAgICAgICAgIHwgICA0ICsKIHNyYy9pbmNsdWRl L2NvbW1hbmRzL2V2ZW50X3RyaWdnZXIuaCAgICAgICAgICAgIHwgICAzICstCiBzcmMvaW5jbHVk ZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmggICAgICAgICAgICB8ICA2MCArKysrCiBzcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUuaCAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5j bHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaCAgICAgICAgICB8ICAgNyArLQogc3JjL2lu Y2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oICAgICAgICAgfCAgMjcgKysKIHNyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmggICAgICAgICAgICAgIHwgICAxICsKIHNyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaCAgICAgICAgIHwgIDM5ICsrKwogc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dCAgICAgICAgICAgICAgfCAgIDYgKy0KIHNy Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0ICAgICAgIHwgMzg4ICsrKysr KysrKysrKy0tLS0tLS0tLS0tLQogMzMgZmlsZXMgY2hhbmdlZCwgMTU5MiBpbnNlcnRpb25zKCsp LCAyMTcgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQvYWNjZXNz L3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvYmFj a2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYwogY3JlYXRlIG1vZGUgMTAwNjQ0 IHNyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaAoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9NYWtlZmlsZSBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdy ZGVzYy9NYWtlZmlsZQppbmRleCBmODhkNzJmLi5iOGUyOWU4IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3Mvcm1ncmRlc2MvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3Jt Z3JkZXNjL01ha2VmaWxlCkBAIC0xOSw2ICsxOSw3IEBAIE9CSlMgPSBcCiAJaGFzaGRlc2MubyBc CiAJaGVhcGRlc2MubyBcCiAJbG9naWNhbG1zZ2Rlc2MubyBcCisJbG9naWNhbGRkbG1zZ2Rlc2Mu byBcCiAJbXhhY3RkZXNjLm8gXAogCW5idGRlc2MubyBcCiAJcmVsbWFwZGVzYy5vIFwKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL2xvZ2ljYWxkZGxtc2dkZXNjLmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFkZWU1MgotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9sb2dpY2FsZGRsbXNnZGVzYy5jCkBAIC0wLDAgKzEs NTIgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIGxvZ2ljYWxkZGxtc2dkZXNjLmMKKyAq CSAgcm1nciBkZXNjcmlwdG9yIHJvdXRpbmVzIGZvciByZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1l c3NhZ2UuYworICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMjAxNS0yMDIyLCBQb3N0Z3Jl U1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqCisgKiBJREVOVElGSUNBVElPTgor ICoJICBzcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbG9naWNhbGRkbG1zZ2Rlc2MuYworICoK KyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1 ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKKwordm9pZAorbG9naWNhbGRkbG1zZ19kZXNj KFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKK3sKKwljaGFyCSAgICpy ZWMgPSBYTG9nUmVjR2V0RGF0YShyZWNvcmQpOworCXVpbnQ4CQlpbmZvID0gWExvZ1JlY0dldElu Zm8ocmVjb3JkKSAmIH5YTFJfSU5GT19NQVNLOworCisJaWYgKGluZm8gPT0gWExPR19MT0dJQ0FM X0RETF9NRVNTQUdFKQorCXsKKwkJeGxfbG9naWNhbF9kZGxfbWVzc2FnZSAqeGxyZWMgPSAoeGxf bG9naWNhbF9kZGxfbWVzc2FnZSAqKSByZWM7CisJCWNoYXIJICAgKnByZWZpeCA9IHhscmVjLT5t ZXNzYWdlOworCQljaGFyCSAgICptZXNzYWdlID0geGxyZWMtPm1lc3NhZ2UgKyB4bHJlYy0+cHJl Zml4X3NpemU7CisJCWNoYXIJICAgKnNlcCA9ICIiOworCisJCUFzc2VydChwcmVmaXhbeGxyZWMt PnByZWZpeF9zaXplXSAhPSAnXDAnKTsKKworCQlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgInByZWZp eCBcIiVzXCI7IHBheWxvYWQgKCV6dSBieXRlcyk6ICIsCisJCQkJCQkgcHJlZml4LCB4bHJlYy0+ bWVzc2FnZV9zaXplKTsKKwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICJyZWxpZCAldSBjbWR0eXBl ICV1IiwgeGxyZWMtPnJlbGlkLCB4bHJlYy0+Y21kdHlwZSk7CisJCS8qIFdyaXRlIG1lc3NhZ2Ug cGF5bG9hZCBhcyBhIHNlcmllcyBvZiBoZXggYnl0ZXMgKi8KKwkJZm9yIChpbnQgY250ID0gMDsg Y250IDwgeGxyZWMtPm1lc3NhZ2Vfc2l6ZTsgY250KyspCisJCXsKKwkJCWFwcGVuZFN0cmluZ0lu Zm8oYnVmLCAiJXMlMDJYIiwgc2VwLCAodW5zaWduZWQgY2hhcikgbWVzc2FnZVtjbnRdKTsKKwkJ CXNlcCA9ICIgIjsKKwkJfQorCX0KK30KKworY29uc3QgY2hhciAqCitsb2dpY2FsZGRsbXNnX2lk ZW50aWZ5KHVpbnQ4IGluZm8pCit7CisJaWYgKChpbmZvICYgflhMUl9JTkZPX01BU0spID09IFhM T0dfTE9HSUNBTF9ERExfTUVTU0FHRSkKKwkJcmV0dXJuICJEREwgTUVTU0FHRSI7CisKKwlyZXR1 cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3JtZ3Iu YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3JtZ3IuYwppbmRleCA4ZWQ2OTI0Li4zMTJm MTE3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9ybWdyLmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vcm1nci5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5j bHVkZSAiZm1nci5oIgogI2luY2x1ZGUgImZ1bmNhcGkuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4u aCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGlj YXRpb24vZGVjb2RlLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vbWVzc2FnZS5oIgogI2luY2x1 ZGUgInJlcGxpY2F0aW9uL29yaWdpbi5oIgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY2F0YWxv Zy9wZ19wdWJsaWNhdGlvbi5jIGIvc3JjL2JhY2tlbmQvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5j CmluZGV4IGMzNjVkZTMuLjk4OWM0OWEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NhdGFsb2cv cGdfcHVibGljYXRpb24uYworKysgYi9zcmMvYmFja2VuZC9jYXRhbG9nL3BnX3B1YmxpY2F0aW9u LmMKQEAgLTEwMDUsNiArMTAwNSw3IEBAIEdldFB1YmxpY2F0aW9uKE9pZCBwdWJpZCkKIAlwdWIt PnB1YmFjdGlvbnMucHVidXBkYXRlID0gcHViZm9ybS0+cHVidXBkYXRlOwogCXB1Yi0+cHViYWN0 aW9ucy5wdWJkZWxldGUgPSBwdWJmb3JtLT5wdWJkZWxldGU7CiAJcHViLT5wdWJhY3Rpb25zLnB1 YnRydW5jYXRlID0gcHViZm9ybS0+cHVidHJ1bmNhdGU7CisJcHViLT5wdWJhY3Rpb25zLnB1YmRk bCA9IHB1YmZvcm0tPnB1YmRkbDsKIAlwdWItPnB1YnZpYXJvb3QgPSBwdWJmb3JtLT5wdWJ2aWFy b290OwogCiAJUmVsZWFzZVN5c0NhY2hlKHR1cCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9j b21tYW5kcy9ldmVudF90cmlnZ2VyLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9ldmVudF90cmln Z2VyLmMKaW5kZXggNDY0MjUyNy4uZGRiODRkNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvY29t bWFuZHMvZXZlbnRfdHJpZ2dlci5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V2ZW50X3Ry aWdnZXIuYwpAQCAtMzcsOCArMzcsMTEgQEAKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNs dWRlICJwYXJzZXIvcGFyc2VfZnVuYy5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUg InJlcGxpY2F0aW9uL2RkbG1lc3NhZ2UuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9tZXNzYWdl LmgiCiAjaW5jbHVkZSAidGNvcC9kZXBhcnNlX3V0aWxpdHkuaCIKICNpbmNsdWRlICJ0Y29wL3V0 aWxpdHkuaCIKKyNpbmNsdWRlICJ0Y29wL2RkbF9kZXBhcnNlLmgiCiAjaW5jbHVkZSAidXRpbHMv YWNsLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9ldnRj YWNoZS5oIgpAQCAtMTU0MCw2ICsxNTQzLDcgQEAgRXZlbnRUcmlnZ2VyQWx0ZXJUYWJsZVN0YXJ0 KE5vZGUgKnBhcnNldHJlZSkKIAogCWNvbW1hbmQtPmQuYWx0ZXJUYWJsZS5jbGFzc0lkID0gUmVs YXRpb25SZWxhdGlvbklkOwogCWNvbW1hbmQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCA9IEludmFs aWRPaWQ7CisJY29tbWFuZC0+ZC5hbHRlclRhYmxlLnJld3JpdGUgPSBmYWxzZTsKIAljb21tYW5k LT5kLmFsdGVyVGFibGUuc3ViY21kcyA9IE5JTDsKIAljb21tYW5kLT5wYXJzZXRyZWUgPSBjb3B5 T2JqZWN0KHBhcnNldHJlZSk7CiAKQEAgLTE1NzMsNyArMTU3Nyw3IEBAIEV2ZW50VHJpZ2dlckFs dGVyVGFibGVSZWxpZChPaWQgb2JqZWN0SWQpCiAgKiBpbnRlcm5hbGx5LCBzbyB0aGF0J3MgYWxs IHRoYXQgdGhpcyBjb2RlIG5lZWRzIHRvIGhhbmRsZSBhdCB0aGUgbW9tZW50LgogICovCiB2b2lk Ci1FdmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZChOb2RlICpzdWJjbWQsIE9iamVj dEFkZHJlc3MgYWRkcmVzcykKK0V2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKE5v ZGUgKnN1YmNtZCwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzLCBib29sIHJld3JpdGUpCiB7CiAJTWVt b3J5Q29udGV4dCBvbGRjeHQ7CiAJQ29sbGVjdGVkQVRTdWJjbWQgKm5ld3N1YjsKQEAgLTE1OTMs NiArMTU5Nyw3IEBAIEV2ZW50VHJpZ2dlckNvbGxlY3RBbHRlclRhYmxlU3ViY21kKE5vZGUgKnN1 YmNtZCwgT2JqZWN0QWRkcmVzcyBhZGRyZXNzKQogCW5ld3N1Yi0+YWRkcmVzcyA9IGFkZHJlc3M7 CiAJbmV3c3ViLT5wYXJzZXRyZWUgPSBjb3B5T2JqZWN0KHN1YmNtZCk7CiAKKwljdXJyZW50RXZl bnRUcmlnZ2VyU3RhdGUtPmN1cnJlbnRDb21tYW5kLT5kLmFsdGVyVGFibGUucmV3cml0ZSB8PSBy ZXdyaXRlOwogCWN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y3VycmVudENvbW1hbmQtPmQuYWx0 ZXJUYWJsZS5zdWJjbWRzID0KIAkJbGFwcGVuZChjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPmN1 cnJlbnRDb21tYW5kLT5kLmFsdGVyVGFibGUuc3ViY21kcywgbmV3c3ViKTsKIApAQCAtMjE4MCwz ICsyMTg1LDIxNyBAQCBzdHJpbmdpZnlfYWRlZnByaXZzX29ianR5cGUoT2JqZWN0VHlwZSBvYmp0 eXBlKQogCiAJcmV0dXJuICI/Pz8iOwkJCQkvKiBrZWVwIGNvbXBpbGVyIHF1aWV0ICovCiB9CisK Ky8qCisgKiBwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX3N0YXJ0CisgKgorICogRGVw YXJzZSB0aGUgZGRsIGNvbW1hbmQgYW5kIGxvZyBpdC4KKyAqLworRGF0dW0KK3B1YmxpY2F0aW9u X2RlcGFyc2VfZGRsX2NvbW1hbmRfc3RhcnQoUEdfRlVOQ1RJT05fQVJHUykKK3sKKwlFdmVudFRy aWdnZXJEYXRhICp0cmlnZGF0YTsKKwljaGFyCQkqY29tbWFuZCA9IHBzcHJpbnRmKCJEcm9wIHRh YmxlIGNvbW1hbmQgc3RhcnQiKTsKKwlEcm9wU3RtdAkqc3RtdDsKKwlMaXN0Q2VsbAkqY2VsbDE7 CisKKwlpZiAoIUNBTExFRF9BU19FVkVOVF9UUklHR0VSKGZjaW5mbykpCisJCWVsb2coRVJST1Is ICJub3QgZmlyZWQgYnkgZXZlbnQgdHJpZ2dlciBtYW5hZ2VyIik7CisKKwl0cmlnZGF0YSA9IChF dmVudFRyaWdnZXJEYXRhICopIGZjaW5mby0+Y29udGV4dDsKKwlzdG10CSA9IChEcm9wU3RtdCAq KSB0cmlnZGF0YS0+cGFyc2V0cmVlOworCisJLyogZXh0cmFjdCB0aGUgcmVsaWQgZnJvbSB0aGUg cGFyc2UgdHJlZSAqLworCWZvcmVhY2goY2VsbDEsIHN0bXQtPm9iamVjdHMpCisJeworCQljaGFy CXJlbHBlcnNpc3Q7CisJCU5vZGUJKm9iamVjdCA9IGxmaXJzdChjZWxsMSk7CisJCU9iamVjdEFk ZHJlc3MgYWRkcmVzczsKKwkJUmVsYXRpb24gcmVsYXRpb24gPSBOVUxMOworCisJCWFkZHJlc3Mg PSBnZXRfb2JqZWN0X2FkZHJlc3Moc3RtdC0+cmVtb3ZlVHlwZSwKKwkJCQkJCQkJCSBvYmplY3Qs CisJCQkJCQkJCQkgJnJlbGF0aW9uLAorCQkJCQkJCQkJIEFjY2Vzc0V4Y2x1c2l2ZUxvY2ssCisJ CQkJCQkJCQkgdHJ1ZSk7CisKKwkJcmVscGVyc2lzdCA9IGdldF9yZWxfcGVyc2lzdGVuY2UoYWRk cmVzcy5vYmplY3RJZCk7CisKKwkJLyoKKwkJICogRG8gbm90IGdlbmVyYXRlIHdhbCBsb2cgZm9y IGNvbW1hbmRzIHdob3NlIHRhcmdldCB0YWJsZSBpcyBhCisJCSAqIHRlbXBvcmFyeSB0YWJsZS4K KwkJICoKKwkJICogVE8gQ0hFQ0s6IERvIHdlIG5lZWQgdG8gZ2VuZXJhdGUgd2FsIGxvZyBmb3Ig dW5sb2dnZWQgdGFibGUgPyBGb3IKKwkJICogbm93LCB3ZSBzdGlsbCBnZW5lcmF0ZSB3YWwgZm9y IHVubG9nZ2VkIHRhYmxlIGxpa2Ugd2hhdCB3ZSBkbyBmb3IKKwkJICogRERMcyBmb3IgdW5sb2dn ZWQgdGFibGUgaW4gc3RyZWFtaW5nIHJlcGxpY2F0aW9uLgorCQkgKi8KKwkJaWYgKHJlbHBlcnNp c3QgPT0gUkVMUEVSU0lTVEVOQ0VfVEVNUCkKKwkJeworCQkJdGFibGVfY2xvc2UocmVsYXRpb24s IE5vTG9jayk7CisJCQljb250aW51ZTsKKwkJfQorCisJCUxvZ0xvZ2ljYWxERExNZXNzYWdlKCJk ZXBhcnNlIiwgYWRkcmVzcy5vYmplY3RJZCwgRENUX1RhYmxlRHJvcFN0YXJ0LAorCQkJCQkJCSBj b21tYW5kLCBzdHJsZW4oY29tbWFuZCkgKyAxKTsKKworCQlpZiAocmVsYXRpb24pCisJCQl0YWJs ZV9jbG9zZShyZWxhdGlvbiwgTm9Mb2NrKTsKKwl9CisJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShO VUxMKTsKK30KKworLyoKKyAqIHB1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZQorICoK KyAqIERlcGFyc2UgdGhlIGRkbCB0YWJsZSByZXdyaXRlIGNvbW1hbmQgYW5kIGxvZyBpdC4KKyAq LworRGF0dW0KK3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZShQR19GVU5DVElPTl9B UkdTKQoreworCWNoYXIJCQkJcmVscGVyc2lzdDsKKwlDb2xsZWN0ZWRDb21tYW5kICAgKmNtZDsK KwljaGFyCQkJICAgKmpzb25fc3RyaW5nOworCisJaWYgKCFDQUxMRURfQVNfRVZFTlRfVFJJR0dF UihmY2luZm8pKQorCQllbG9nKEVSUk9SLCAibm90IGZpcmVkIGJ5IGV2ZW50IHRyaWdnZXIgbWFu YWdlciIpOworCisJY21kID0gY3VycmVudEV2ZW50VHJpZ2dlclN0YXRlLT5jdXJyZW50Q29tbWFu ZDsKKworCUFzc2VydChjbWQgJiYgY21kLT5kLmFsdGVyVGFibGUucmV3cml0ZSk7CisKKwlyZWxw ZXJzaXN0ID0gZ2V0X3JlbF9wZXJzaXN0ZW5jZShjbWQtPmQuYWx0ZXJUYWJsZS5vYmplY3RJZCk7 CisKKwkvKgorCSAqIERvIG5vdCBnZW5lcmF0ZSB3YWwgbG9nIGZvciBjb21tYW5kcyB3aG9zZSB0 YXJnZXQgdGFibGUgaXMgYQorCSAqIHRlbXBvcmFyeSB0YWJsZS4KKwkgKgorCSAqIFRPIENIRUNL OiBEbyB3ZSBuZWVkIHRvIGdlbmVyYXRlIHdhbCBsb2cgZm9yIHVubG9nZ2VkIHRhYmxlID8gRm9y CisJICogbm93LCB3ZSBzdGlsbCBnZW5lcmF0ZSB3YWwgZm9yIHVubG9nZ2VkIHRhYmxlIGxpa2Ug d2hhdCB3ZSBkbyBmb3IKKwkgKiBERExzIGZvciB1bmxvZ2dlZCB0YWJsZSBpbiBzdHJlYW1pbmcg cmVwbGljYXRpb24uCisJICovCisJaWYgKHJlbHBlcnNpc3QgPT0gUkVMUEVSU0lTVEVOQ0VfVEVN UCkKKwkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShOVUxMKTsKKworCS8qIERlcGFyc2UgdGhlIERE TCBjb21tYW5kIGFuZCBXQUwgbG9nIGl0IHRvIGFsbG93IGRlY29kaW5nIG9mIHRoZSBzYW1lLiAq LworCWpzb25fc3RyaW5nID0gZGVwYXJzZV91dGlsaXR5X2NvbW1hbmQoY21kKTsKKworCWlmIChq c29uX3N0cmluZyAhPSBOVUxMKQorCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIGNt ZC0+ZC5hbHRlclRhYmxlLm9iamVjdElkLCBEQ1RfVGFibGVBbHRlciwKKwkJCQkJCQkganNvbl9z dHJpbmcsIHN0cmxlbihqc29uX3N0cmluZykgKyAxKTsKKworCXJldHVybiBQb2ludGVyR2V0RGF0 dW0oTlVMTCk7Cit9CisKKy8qCisgKiBwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX2Vu ZAorICoKKyAqIERlcGFyc2UgdGhlIGRkbCBjb21tYW5kIGFuZCBsb2cgaXQuCisgKi8KK0RhdHVt CitwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX2VuZChQR19GVU5DVElPTl9BUkdTKQor eworCUxpc3RDZWxsICAgKmxjOworCXNsaXN0X2l0ZXIgIGl0ZXI7CisJRGVwYXJzZWRDb21tYW5k VHlwZSB0eXBlOworCU9pZCByZWxpZDsKKworCWlmICghQ0FMTEVEX0FTX0VWRU5UX1RSSUdHRVIo ZmNpbmZvKSkKKwkJZWxvZyhFUlJPUiwgIm5vdCBmaXJlZCBieSBldmVudCB0cmlnZ2VyIG1hbmFn ZXIiKTsKKworCWZvcmVhY2gobGMsIGN1cnJlbnRFdmVudFRyaWdnZXJTdGF0ZS0+Y29tbWFuZExp c3QpCisJeworCQljaGFyCQkJCXJlbHBlcnNpc3Q7CisJCUNvbGxlY3RlZENvbW1hbmQgICAqY21k ID0gbGZpcnN0KGxjKTsKKwkJY2hhcgkJCSAgICpqc29uX3N0cmluZzsKKworCQkvKiBSZXdyaXRl IERETCBoYXMgYmVlbiBoYW5kbGVkIGluIHRhYmxlX3Jld3JpdGUgdHJpZ2dlciAqLworCQlpZiAo Y21kLT5kLmFsdGVyVGFibGUucmV3cml0ZSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjbWQtPnR5 cGUgPT0gU0NUX1NpbXBsZSAmJgorCQkJIU9pZElzVmFsaWQoY21kLT5kLnNpbXBsZS5hZGRyZXNz Lm9iamVjdElkKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChjbWQtPnR5cGUgPT0gU0NUX0FsdGVy VGFibGUpCisJCXsKKwkJCXJlbGlkID0gY21kLT5kLmFsdGVyVGFibGUub2JqZWN0SWQ7CisJCQl0 eXBlID0gRENUX1RhYmxlQWx0ZXI7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBPbmx5IFNDVF9T aW1wbGUgZm9yIG5vdyAqLworCQkJcmVsaWQgPSBjbWQtPmQuc2ltcGxlLmFkZHJlc3Mub2JqZWN0 SWQ7CisJCQl0eXBlID0gRENUX1NpbXBsZUNtZDsKKwkJfQorCisJCXJlbHBlcnNpc3QgPSBnZXRf cmVsX3BlcnNpc3RlbmNlKHJlbGlkKTsKKworCQkvKgorCQkgKiBEbyBub3QgZ2VuZXJhdGUgd2Fs IGxvZyBmb3IgY29tbWFuZHMgd2hvc2UgdGFyZ2V0IHRhYmxlIGlzIGEKKwkJICogdGVtcG9yYXJ5 IHRhYmxlLgorCQkgKgorCQkgKiBUTyBDSEVDSzogRG8gd2UgbmVlZCB0byBnZW5lcmF0ZSB3YWwg bG9nIGZvciB1bmxvZ2dlZCB0YWJsZSA/CisJCSAqIEZvciBub3csIHdlIHN0aWxsIGdlbmVyYXRl IHdhbCBmb3IgdW5sb2dnZWQgdGFibGUgbGlrZSB3aGF0IHdlCisJCSAqIGRvIGZvciBERExzIGZv ciB1bmxvZ2dlZCB0YWJsZSBpbiBzdHJlYW1pbmcgcmVwbGljYXRpb24uCisJCSAqLworCQlpZiAo cmVscGVyc2lzdCA9PSBSRUxQRVJTSVNURU5DRV9URU1QKQorCQkJY29udGludWU7CisKKwkJLyoK KwkJICogRGVwYXJzZSB0aGUgRERMIGNvbW1hbmQgYW5kIFdBTCBsb2cgaXQgdG8gYWxsb3cgZGVj b2Rpbmcgb2YgdGhlCisJCSAqIHNhbWUuCisJCSAqLworCQlqc29uX3N0cmluZyA9IGRlcGFyc2Vf dXRpbGl0eV9jb21tYW5kKGNtZCk7CisKKwkJaWYgKGpzb25fc3RyaW5nID09IE5VTEwpCisJCQlj b250aW51ZTsKKworCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIHJlbGlkLCB0eXBl LCBqc29uX3N0cmluZywKKwkJCQkJCQkgc3RybGVuKGpzb25fc3RyaW5nKSArIDEpOworCX0KKwor CXNsaXN0X2ZvcmVhY2goaXRlciwgJihjdXJyZW50RXZlbnRUcmlnZ2VyU3RhdGUtPlNRTERyb3BM aXN0KSkKKwl7CisJCXZvbGF0aWxlIFNRTERyb3BPYmplY3QgKm9iajsKKwkJRHJvcFN0bXQJCQkg ICAqc3RtdDsKKwkJRXZlbnRUcmlnZ2VyRGF0YSAJICAgKnRyaWdkYXRhOworCQljaGFyCQkJCSAg ICpjb21tYW5kOworCisJCXRyaWdkYXRhID0gKEV2ZW50VHJpZ2dlckRhdGEgKikgZmNpbmZvLT5j b250ZXh0OworCQlzdG10CSA9IChEcm9wU3RtdCAqKSB0cmlnZGF0YS0+cGFyc2V0cmVlOworCisJ CW9iaiA9IHNsaXN0X2NvbnRhaW5lcihTUUxEcm9wT2JqZWN0LCBuZXh0LCBpdGVyLmN1cik7CisK KwkJaWYgKHN0cm5jbXAob2JqLT5vYmplY3R0eXBlLCAidGFibGUiLCA1KSA9PSAwKQorCQl7CisJ CQljb21tYW5kID0gZGVwYXJzZV9kcm9wX3RhYmxlKG9iai0+b2JqaWRlbnRpdHksIHN0bXQtPmJl aGF2aW9yKTsKKworCQkJTG9nTG9naWNhbERETE1lc3NhZ2UoImRlcGFyc2UiLCBvYmotPmFkZHJl c3Mub2JqZWN0SWQsIERDVF9UYWJsZURyb3BFbmQsCisJCQkJCQkJCSBjb21tYW5kLCBzdHJsZW4o Y29tbWFuZCkgKyAxKTsKKwkJfQorCQllbHNlIGlmIChzdHJuY21wKG9iai0+b2JqZWN0dHlwZSwg InNlcXVlbmNlIiwgOCkgPT0gMCkKKwkJeworCQkJY29tbWFuZCA9IGRlcGFyc2VfZHJvcF9zZXF1 ZW5jZShvYmotPm9iamlkZW50aXR5LCBzdG10LT5iZWhhdmlvcik7CisKKwkJCUxvZ0xvZ2ljYWxE RExNZXNzYWdlKCJkZXBhcnNlIiwgb2JqLT5hZGRyZXNzLm9iamVjdElkLCBEQ1RfT2JqZWN0RHJv cCwKKwkJCQkJCQkJIGNvbW1hbmQsIHN0cmxlbihjb21tYW5kKSArIDEpOworCQl9CisJCWVsc2Ug aWYgKHN0cm5jbXAob2JqLT5vYmplY3R0eXBlLCAic2NoZW1hIiwgNikgPT0gMCkKKwkJeworCQkJ Y29tbWFuZCA9IGRlcGFyc2VfZHJvcF9zY2hlbWEob2JqLT5vYmppZGVudGl0eSwgc3RtdC0+YmVo YXZpb3IpOworCisJCQlMb2dMb2dpY2FsRERMTWVzc2FnZSgiZGVwYXJzZSIsIG9iai0+YWRkcmVz cy5vYmplY3RJZCwgRENUX09iamVjdERyb3AsCisJCQkJCQkJCSBjb21tYW5kLCBzdHJsZW4oY29t bWFuZCkgKyAxKTsKKwkJfQorCQllbHNlIGlmIChzdHJuY21wKG9iai0+b2JqZWN0dHlwZSwgImlu ZGV4IiwgNikgPT0gMCkKKwkJeworCQkJY29tbWFuZCA9IGRlcGFyc2VfZHJvcF9pbmRleChvYmot Pm9iamlkZW50aXR5LCBzdG10LT5iZWhhdmlvcik7CisKKwkJCUxvZ0xvZ2ljYWxERExNZXNzYWdl KCJkZXBhcnNlIiwgb2JqLT5hZGRyZXNzLm9iamVjdElkLCBEQ1RfT2JqZWN0RHJvcCwKKwkJCQkJ CQkJIGNvbW1hbmQsIHN0cmxlbihjb21tYW5kKSArIDEpOworCQl9CisKKwl9CisKKwlyZXR1cm4g UG9pbnRlckdldERhdHVtKE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFu ZHMvcHVibGljYXRpb25jbWRzLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNhdGlvbmNt ZHMuYwppbmRleCA4ZTY0NTc0Li4xMmQ0YjJlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21t YW5kcy9wdWJsaWNhdGlvbmNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9wdWJsaWNh dGlvbmNtZHMuYwpAQCAtMzcsMTAgKzM3LDEyIEBACiAjaW5jbHVkZSAiY29tbWFuZHMvcHVibGlj YXRpb25jbWRzLmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgogI2luY2x1ZGUgIm1pc2NhZG1pbi5o IgorI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgogI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5j cy5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9jbGF1c2UuaCIKICNpbmNsdWRlICJwYXJzZXIv cGFyc2VfY29sbGF0ZS5oIgogI2luY2x1ZGUgInBhcnNlci9wYXJzZV9yZWxhdGlvbi5oIgorI2lu Y2x1ZGUgInBhcnNlci9wYXJzZXIuaCIKICNpbmNsdWRlICJzdG9yYWdlL2xtZ3IuaCIKICNpbmNs dWRlICJ1dGlscy9hY2wuaCIKICNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgpAQCAtOTUsNiArOTcs NyBAQCBwYXJzZV9wdWJsaWNhdGlvbl9vcHRpb25zKFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAlwdWJh Y3Rpb25zLT5wdWJ1cGRhdGUgPSB0cnVlOwogCXB1YmFjdGlvbnMtPnB1YmRlbGV0ZSA9IHRydWU7 CiAJcHViYWN0aW9ucy0+cHVidHJ1bmNhdGUgPSB0cnVlOworCXB1YmFjdGlvbnMtPnB1YmRkbCA9 IGZhbHNlOwogCSpwdWJsaXNoX3ZpYV9wYXJ0aXRpb25fcm9vdCA9IGZhbHNlOwogCiAJLyogUGFy c2Ugb3B0aW9ucyAqLwpAQCAtMTQxLDYgKzE0NCw4IEBAIHBhcnNlX3B1YmxpY2F0aW9uX29wdGlv bnMoUGFyc2VTdGF0ZSAqcHN0YXRlLAogCQkJCQlwdWJhY3Rpb25zLT5wdWJkZWxldGUgPSB0cnVl OwogCQkJCWVsc2UgaWYgKHN0cmNtcChwdWJsaXNoX29wdCwgInRydW5jYXRlIikgPT0gMCkKIAkJ CQkJcHViYWN0aW9ucy0+cHVidHJ1bmNhdGUgPSB0cnVlOworCQkJCWVsc2UgaWYgKHN0cmNtcChw dWJsaXNoX29wdCwgImRkbCIpID09IDApCisJCQkJCXB1YmFjdGlvbnMtPnB1YmRkbCA9IHRydWU7 CiAJCQkJZWxzZQogCQkJCQllcmVwb3J0KEVSUk9SLAogCQkJCQkJCShlcnJjb2RlKEVSUkNPREVf U1lOVEFYX0VSUk9SKSwKQEAgLTc0OSw2ICs3NTQsNTMgQEAgQ2hlY2tQdWJSZWxhdGlvbkNvbHVt bkxpc3QoTGlzdCAqdGFibGVzLCBjb25zdCBjaGFyICpxdWVyeVN0cmluZywKIH0KIAogLyoKKyAq IENyZWF0ZSBldmVudCB0cmlnZ2VyIHdoaWNoIGlzIHVzZWQgZm9yIERETCByZXBsaWNhdGlvbi4K KyAqLworc3RhdGljIHZvaWQKK0NyZWF0ZURETFJlcGxpY2FFdmVudFRyaWdnZXIoY2hhciAqZXZl bnRuYW1lLCBDb21tYW5kVGFnICpjb21tYW5kcywKKwkJCQkJCQkgaW50IG5jb21tYW5kcywgT2Jq ZWN0QWRkcmVzcyBwdWJhZGRyZXNzLAorCQkJCQkJCSBPaWQgcHVib2lkKQoreworCWludAkJCQkJ aTsKKwlMaXN0CQkJICAgKnRhZ3MgPSBOSUw7CisJT2lkCQkJCQl0cmlnZ2VyX2lkOworCU9iamVj dEFkZHJlc3MJCXJlZmVyZW5jZWQ7CisJQ3JlYXRlRXZlbnRUcmlnU3RtdCAqZGRsX3RyaWdnZXI7 CisJY2hhcgkJCQl0cmlnZ2VyX25hbWVbTkFNRURBVEFMRU5dOworCWNoYXIJCQkJdHJpZ2dlcl9m dW5jX25hbWVbTkFNRURBVEFMRU5dOworCXN0YXRpYyBjb25zdCBjaGFyICAgKnRyaWdnZXJfbmFt ZV9wcmVmaXggPSAicGdfZGVwYXJzZV90cmlnXyVzXyV1IjsKKwlzdGF0aWMgY29uc3QgY2hhciAg ICp0cmlnZ2VyX2Z1bmNfcHJlZml4ID0gInB1YmxpY2F0aW9uX2RlcGFyc2VfJXMiOworCisJZGRs X3RyaWdnZXIgPSBtYWtlTm9kZShDcmVhdGVFdmVudFRyaWdTdG10KTsKKworCXNucHJpbnRmKHRy aWdnZXJfbmFtZSwgc2l6ZW9mKHRyaWdnZXJfbmFtZSksIHRyaWdnZXJfbmFtZV9wcmVmaXgsCisJ CQkgZXZlbnRuYW1lLCBwdWJvaWQpOworCXNucHJpbnRmKHRyaWdnZXJfZnVuY19uYW1lLCBzaXpl b2YodHJpZ2dlcl9mdW5jX25hbWUpLCB0cmlnZ2VyX2Z1bmNfcHJlZml4LAorCQkJIGV2ZW50bmFt ZSk7CisKKwlkZGxfdHJpZ2dlci0+dHJpZ25hbWUgPSBwc3RyZHVwKHRyaWdnZXJfbmFtZSk7CisJ ZGRsX3RyaWdnZXItPmV2ZW50bmFtZSA9IGV2ZW50bmFtZTsKKwlkZGxfdHJpZ2dlci0+ZnVuY25h bWUgPSBTeXN0ZW1GdW5jTmFtZSh0cmlnZ2VyX2Z1bmNfbmFtZSk7CisKKwlmb3IgKGkgPSAwOyBp IDwgbmNvbW1hbmRzOyBpKyspCisJeworCQlTdHJpbmcgKnRhZyA9IG1ha2VTdHJpbmcocHN0cmR1 cChHZXRDb21tYW5kVGFnTmFtZShjb21tYW5kc1tpXSkpKTsKKwkJdGFncyA9IGxhcHBlbmQodGFn cywgdGFnKTsKKwl9CisKKwlkZGxfdHJpZ2dlci0+d2hlbmNsYXVzZSA9IGxpc3RfbWFrZTEobWFr ZURlZkVsZW0oInRhZyIsIChOb2RlICopIHRhZ3MsIC0xKSk7CisKKwl0cmlnZ2VyX2lkID0gQ3Jl YXRlRXZlbnRUcmlnZ2VyKGRkbF90cmlnZ2VyKTsKKworCS8qCisJICogUmVnaXN0ZXIgdGhlIGV2 ZW50IHRyaWdnZXJzIGFzIGludGVybmFsbHkgZGVwZW5kZW50IG9uIHRoZQorCSAqIHB1YmxpY2F0 aW9uLgorCSAqLworCU9iamVjdEFkZHJlc3NTZXQocmVmZXJlbmNlZCwgRXZlbnRUcmlnZ2VyUmVs YXRpb25JZCwgdHJpZ2dlcl9pZCk7CisJcmVjb3JkRGVwZW5kZW5jeU9uKCZyZWZlcmVuY2VkLCAm cHViYWRkcmVzcywgREVQRU5ERU5DWV9JTlRFUk5BTCk7Cit9CisKKy8qCiAgKiBDcmVhdGUgbmV3 IHB1YmxpY2F0aW9uLgogICovCiBPYmplY3RBZGRyZXNzCkBAIC04MjAsNiArODcyLDggQEAgQ3Jl YXRlUHVibGljYXRpb24oUGFyc2VTdGF0ZSAqcHN0YXRlLCBDcmVhdGVQdWJsaWNhdGlvblN0bXQg KnN0bXQpCiAJCUJvb2xHZXREYXR1bShwdWJhY3Rpb25zLnB1YmRlbGV0ZSk7CiAJdmFsdWVzW0Fu dW1fcGdfcHVibGljYXRpb25fcHVidHJ1bmNhdGUgLSAxXSA9CiAJCUJvb2xHZXREYXR1bShwdWJh Y3Rpb25zLnB1YnRydW5jYXRlKTsKKwl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJkZGwg LSAxXSA9CisJCUJvb2xHZXREYXR1bShwdWJhY3Rpb25zLnB1YmRkbCk7CiAJdmFsdWVzW0FudW1f cGdfcHVibGljYXRpb25fcHVidmlhcm9vdCAtIDFdID0KIAkJQm9vbEdldERhdHVtKHB1Ymxpc2hf dmlhX3BhcnRpdGlvbl9yb290KTsKIApAQCAtODgyLDYgKzkzNiw0OSBAQCBDcmVhdGVQdWJsaWNh dGlvbihQYXJzZVN0YXRlICpwc3RhdGUsIENyZWF0ZVB1YmxpY2F0aW9uU3RtdCAqc3RtdCkKIAkJ fQogCX0KIAorCS8qCisJICogQ3JlYXRlIGFuIGV2ZW50IHRyaWdnZXIgdG8gYWxsb3cgbG9nZ2lu ZyBvZiBEREwgc3RhdGVtZW50cy4KKwkgKgorCSAqIFRPRE86IFdlIG5lZWQgdG8gZmluZCBhIGJl dHRlciBzeW50YXggdG8gYWxsb3cgcmVwbGljYXRpb24gb2YgRERMCisJICogc3RhdGVtZW50cy4K KwkgKgorCSAqIFhYWDogVGhpcyBjb2RlIGlzIGp1c3QgdG8gc2hvdyB0aGUgcmVwbGljYXRpb24g b2YgQ1JFQVRFL0FMVEVSL0RST1AKKwkgKiBUQUJMRSB3b3Jrcy4gV2UgbmVlZCB0byBlbmhhbmNl IHRoaXMgb25jZSB0aGUgYXBwcm9hY2ggZm9yIERETAorCSAqIHJlcGxpY2F0aW9uIGlzIGZpbmFs aXplZC4KKwkgKi8KKwlpZiAocHViYWN0aW9ucy5wdWJkZGwpCisJeworCQlDb21tYW5kVGFnCXN0 YXJ0X2NvbW1hbmRzW10gPSB7Q01EVEFHX0RST1BfVEFCTEV9OworCQlDb21tYW5kVGFnCXJld3Jp dGVfY29tbWFuZHNbXSA9IHtDTURUQUdfQUxURVJfVEFCTEV9OworCisJCUNvbW1hbmRUYWcJZW5k X2NvbW1hbmRzW10gPSB7CisJCQlDTURUQUdfRFJPUF9UQUJMRSwKKwkJCUNNRFRBR19DUkVBVEVf VEFCTEUsCisJCQlDTURUQUdfQUxURVJfVEFCTEUsCisJCQlDTURUQUdfQ1JFQVRFX1NFUVVFTkNF LAorCQkJQ01EVEFHX0FMVEVSX1NFUVVFTkNFLAorCQkJQ01EVEFHX0RST1BfU0VRVUVOQ0UsCisJ CQlDTURUQUdfQ1JFQVRFX1NDSEVNQSwKKwkJCUNNRFRBR19BTFRFUl9TQ0hFTUEsCisJCQlDTURU QUdfRFJPUF9TQ0hFTUEsCisJCQlDTURUQUdfQ1JFQVRFX0lOREVYLAorCQkJQ01EVEFHX0RST1Bf SU5ERVgsCisJCQlDTURUQUdfQUxURVJfSU5ERVgKKwkJfTsKKworCQkvKiBDcmVhdGUgdGhlIGRk bF9jb21tYW5kX2VuZCBldmVudCB0cmlnZ2VyICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRy aWdnZXIoImRkbF9jb21tYW5kX2VuZCIsIGVuZF9jb21tYW5kcywKKwkJCQkJCQkJCSBsZW5ndGhv ZihlbmRfY29tbWFuZHMpLCBteXNlbGYsIHB1Ym9pZCk7CisKKwkJLyogQ3JlYXRlIHRoZSBkZGxf Y29tbWFuZF9zdGFydCBldmVudCB0cmlnZ2VyICovCisJCUNyZWF0ZURETFJlcGxpY2FFdmVudFRy aWdnZXIoImRkbF9jb21tYW5kX3N0YXJ0Iiwgc3RhcnRfY29tbWFuZHMsCisJCQkJCQkJCQkgbGVu Z3Rob2Yoc3RhcnRfY29tbWFuZHMpLCBteXNlbGYsIHB1Ym9pZCk7CisKKwkJLyogQ3JlYXRlIHRo ZSB0YWJsZV9yZXdyaXRlIGV2ZW50IHRyaWdnZXIgKi8KKwkJQ3JlYXRlRERMUmVwbGljYUV2ZW50 VHJpZ2dlcigidGFibGVfcmV3cml0ZSIsIHJld3JpdGVfY29tbWFuZHMsCisJCQkJCQkJCQkgbGVu Z3Rob2YocmV3cml0ZV9jb21tYW5kcyksIG15c2VsZiwgcHVib2lkKTsKKwl9CisKIAl0YWJsZV9j bG9zZShyZWwsIFJvd0V4Y2x1c2l2ZUxvY2spOwogCiAJSW52b2tlT2JqZWN0UG9zdENyZWF0ZUhv b2soUHVibGljYXRpb25SZWxhdGlvbklkLCBwdWJvaWQsIDApOwpAQCAtMTAyMiw2ICsxMTE5LDkg QEAgQWx0ZXJQdWJsaWNhdGlvbk9wdGlvbnMoUGFyc2VTdGF0ZSAqcHN0YXRlLCBBbHRlclB1Ymxp Y2F0aW9uU3RtdCAqc3RtdCwKIAogCQl2YWx1ZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJ0cnVu Y2F0ZSAtIDFdID0gQm9vbEdldERhdHVtKHB1YmFjdGlvbnMucHVidHJ1bmNhdGUpOwogCQlyZXBs YWNlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YnRydW5jYXRlIC0gMV0gPSB0cnVlOworCisJCXZh bHVlc1tBbnVtX3BnX3B1YmxpY2F0aW9uX3B1YmRkbCAtIDFdID0gQm9vbEdldERhdHVtKHB1YmFj dGlvbnMucHViZGRsKTsKKwkJcmVwbGFjZXNbQW51bV9wZ19wdWJsaWNhdGlvbl9wdWJkZGwgLSAx XSA9IHRydWU7CiAJfQogCiAJaWYgKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9yb290X2dpdmVuKQpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvdGFibGVjbWRzLmMgYi9zcmMvYmFja2Vu ZC9jb21tYW5kcy90YWJsZWNtZHMuYwppbmRleCBlZTQ4NDcwLi5kZGNjZTNmIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9jb21tYW5kcy90YWJsZWNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21t YW5kcy90YWJsZWNtZHMuYwpAQCAtNTIxOSw3ICs1MjE5LDcgQEAgQVRFeGVjQ21kKExpc3QgKip3 cXVldWUsIEFsdGVyZWRUYWJsZUluZm8gKnRhYiwKIAkgKiBSZXBvcnQgdGhlIHN1YmNvbW1hbmQg dG8gaW50ZXJlc3RlZCBldmVudCB0cmlnZ2Vycy4KIAkgKi8KIAlpZiAoY21kKQotCQlFdmVudFRy aWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZCgoTm9kZSAqKSBjbWQsIGFkZHJlc3MpOworCQlF dmVudFRyaWdnZXJDb2xsZWN0QWx0ZXJUYWJsZVN1YmNtZCgoTm9kZSAqKSBjbWQsIGFkZHJlc3Ms IHRhYi0+cmV3cml0ZSk7CiAKIAkvKgogCSAqIEJ1bXAgdGhlIGNvbW1hbmQgY291bnRlciB0byBl bnN1cmUgdGhlIG5leHQgc3ViY29tbWFuZCBpbiB0aGUgc2VxdWVuY2UKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUgYi9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL01ha2VmaWxlCmluZGV4IGM0ZTJmZGUuLmYzZWViNjcgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvTWFrZWZpbGUKKysrIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9NYWtlZmlsZQpAQCAtMTYsNiArMTYsNyBAQCBvdmVy cmlkZSBDUFBGTEFHUyA6PSAtSSQoc3JjZGlyKSAkKENQUEZMQUdTKQogCiBPQkpTID0gXAogCWRl Y29kZS5vIFwKKwlkZGxtZXNzYWdlLm9cCiAJbGF1bmNoZXIubyBcCiAJbG9naWNhbC5vIFwKIAls b2dpY2FsZnVuY3MubyBcCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL2RkbG1lc3NhZ2UuYyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVz c2FnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwOTM1MjMKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2Uu YwpAQCAtMCwwICsxLDg2IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBkZGxtZXNzYWdl LmMKKyAqCSAgTG9naWNhbCBEREwgbWVzc2FnZXMuCisgKgorICogQ29weXJpZ2h0IChjKSAyMDIy LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICoKKyAqIElERU5USUZJQ0FU SU9OCisgKgkgIHNyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGRsbWVzc2FnZS5jCisg KgorICogTk9URVMKKyAqCisgKiBMb2dpY2FsIERETCBtZXNzYWdlcyBhbGxvdyBYTE9HIGxvZ2dp bmcgb2YgRERMIGNvbW1hbmQgc3RyaW5ncyB0aGF0CisgKiBnZXQgcGFzc2VkIHRvIHRoZSBsb2dp Y2FsIGRlY29kaW5nIHBsdWdpbi4gSW4gbm9ybWFsIFhMT0cgcHJvY2Vzc2luZyB0aGV5CisgKiBh cmUgc2FtZSBhcyBOT09QLgorICoKKyAqIFVubGlrZSBnZW5lcmljIGxvZ2ljYWwgbWVzc2FnZXMs IHRoZXNlIERETCBtZXNzYWdlcyBoYXZlIG9ubHkgdHJhbnNhY3Rpb25hbAorICogbW9kZS5Ob3Rl IGJ5IGRlZmF1bHQgRERMcyBpbiBQb3N0Z3JlU1FMIGFyZSB0cmFuc2FjdGlvbmFsLgorICoKKyAq IFRoZXNlIG1lc3NhZ2VzIGFyZSBwYXJ0IG9mIGN1cnJlbnQgdHJhbnNhY3Rpb24gYW5kIHdpbGwg YmUgc2VudCB0bworICogZGVjb2RpbmcgcGx1Z2luIHVzaW5nIGluIGEgc2FtZSB3YXkgYXMgRE1M IG9wZXJhdGlvbnMuCisgKgorICogRXZlcnkgbWVzc2FnZSBjYXJyaWVzIHByZWZpeCB0byBhdm9p ZCBjb25mbGljdHMgYmV0d2VlbiBkaWZmZXJlbnQgZGVjb2RpbmcKKyAqIHBsdWdpbnMuIFRoZSBw bHVnaW4gYXV0aG9ycyBtdXN0IHRha2UgZXh0cmEgY2FyZSB0byB1c2UgdW5pcXVlIHByZWZpeCwK KyAqIGdvb2Qgb3B0aW9ucyBzZWVtcyB0byBiZSBmb3IgZXhhbXBsZSB0byB1c2UgdGhlIG5hbWUg b2YgdGhlIGV4dGVuc2lvbi4KKyAqCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisjaW5j bHVkZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCisjaW5jbHVkZSAi YWNjZXNzL3hsb2dpbnNlcnQuaCIKKyNpbmNsdWRlICJjYXRhbG9nL25hbWVzcGFjZS5oIgorI2lu Y2x1ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgIm5vZGVzL2V4ZWNub2Rlcy5oIgorI2luY2x1 ZGUgInJlcGxpY2F0aW9uL2xvZ2ljYWwuaCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNz YWdlLmgiCisjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIKKworLyoKKyAqIFdyaXRlIGxvZ2lj YWwgZGVjb2RpbmcgRERMIG1lc3NhZ2UgaW50byBYTG9nLgorICovCitYTG9nUmVjUHRyCitMb2dM b2dpY2FsRERMTWVzc2FnZShjb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwgRGVwYXJzZWRD b21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSwgc2l6ZV90IHNp emUpCit7CisJeGxfbG9naWNhbF9kZGxfbWVzc2FnZSB4bHJlYzsKKworCS8qCisJICogRW5zdXJl IHdlIGhhdmUgYSB2YWxpZCB0cmFuc2FjdGlvbiBpZC4KKwkgKi8KKwlBc3NlcnQoSXNUcmFuc2Fj dGlvblN0YXRlKCkpOworCUdldEN1cnJlbnRUcmFuc2FjdGlvbklkKCk7CisKKwl4bHJlYy5kYklk ID0gTXlEYXRhYmFzZUlkOworCS8qIHRyYWlsaW5nIHplcm8gaXMgY3JpdGljYWw7IHNlZSBsb2dp Y2FsZGRsbXNnX2Rlc2MgKi8KKwl4bHJlYy5wcmVmaXhfc2l6ZSA9IHN0cmxlbihwcmVmaXgpICsg MTsKKwl4bHJlYy5tZXNzYWdlX3NpemUgPSBzaXplOworCXhscmVjLnJlbGlkID0gcmVsaWQ7CisJ eGxyZWMuY21kdHlwZSA9IGNtZHR5cGU7CisKKwlYTG9nQmVnaW5JbnNlcnQoKTsKKwlYTG9nUmVn aXN0ZXJEYXRhKChjaGFyICopICZ4bHJlYywgU2l6ZU9mTG9naWNhbERETE1lc3NhZ2UpOworCVhM b2dSZWdpc3RlckRhdGEodW5jb25zdGlmeShjaGFyICosIHByZWZpeCksIHhscmVjLnByZWZpeF9z aXplKTsKKwlYTG9nUmVnaXN0ZXJEYXRhKHVuY29uc3RpZnkoY2hhciAqLCBtZXNzYWdlKSwgc2l6 ZSk7CisKKwkvKiBhbGxvdyBvcmlnaW4gZmlsdGVyaW5nICovCisJWExvZ1NldFJlY29yZEZsYWdz KFhMT0dfSU5DTFVERV9PUklHSU4pOworCisJcmV0dXJuIFhMb2dJbnNlcnQoUk1fTE9HSUNBTERE TE1TR19JRCwgWExPR19MT0dJQ0FMX0RETF9NRVNTQUdFKTsKK30KKworLyoKKyAqIFJlZG8gaXMg YmFzaWNhbGx5IGp1c3Qgbm9vcCBmb3IgbG9naWNhbCBkZWNvZGluZyBkZGwgbWVzc2FnZXMuCisg Ki8KK3ZvaWQKK2xvZ2ljYWxkZGxtc2dfcmVkbyhYTG9nUmVhZGVyU3RhdGUgKnJlY29yZCkKK3sK Kwl1aW50OAkJaW5mbyA9IFhMb2dSZWNHZXRJbmZvKHJlY29yZCkgJiB+WExSX0lORk9fTUFTSzsK KworCWlmIChpbmZvICE9IFhMT0dfTE9HSUNBTF9ERExfTUVTU0FHRSkKKwkJZWxvZyhQQU5JQywg ImxvZ2ljYWxkZGxtc2dfcmVkbzogdW5rbm93biBvcCBjb2RlICV1IiwgaW5mbyk7CisKKwkvKiBU aGlzIGlzIG9ubHkgaW50ZXJlc3RpbmcgZm9yIGxvZ2ljYWwgZGVjb2RpbmcsIHNlZSBkZWNvZGUu Yy4gKi8KK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvZGVj b2RlLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL2RlY29kZS5jCmluZGV4IGFh MjQyN2IuLjI1NWIwZWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2lj YWwvZGVjb2RlLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9kZWNvZGUu YwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgImFjY2Vzcy94bG9ndXRpbHMuaCIKICNpbmNs dWRlICJjYXRhbG9nL3BnX2NvbnRyb2wuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZWNvZGUu aCIKKyNpbmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAicmVwbGlj YXRpb24vbG9naWNhbC5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL21lc3NhZ2UuaCIKICNpbmNs dWRlICJyZXBsaWNhdGlvbi9vcmlnaW4uaCIKQEAgLTYwNCw2ICs2MDUsNDYgQEAgbG9naWNhbG1z Z19kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpi dWYpCiB9CiAKIC8qCisgKiBIYW5kbGUgcm1nciBMT0dJQ0FMRERMTVNHX0lEIHJlY29yZHMgZm9y IERlY29kZVJlY29yZEludG9SZW9yZGVyQnVmZmVyKCkuCisgKi8KK3ZvaWQKK2xvZ2ljYWxkZGxt c2dfZGVjb2RlKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwgWExvZ1JlY29yZEJ1ZmZlciAq YnVmKQoreworCVNuYXBCdWlsZCAgKmJ1aWxkZXIgPSBjdHgtPnNuYXBzaG90X2J1aWxkZXI7CisJ WExvZ1JlYWRlclN0YXRlICpyID0gYnVmLT5yZWNvcmQ7CisJVHJhbnNhY3Rpb25JZCB4aWQgPSBY TG9nUmVjR2V0WGlkKHIpOworCXVpbnQ4CQlpbmZvID0gWExvZ1JlY0dldEluZm8ocikgJiB+WExS X0lORk9fTUFTSzsKKwlSZXBPcmlnaW5JZCBvcmlnaW5faWQgPSBYTG9nUmVjR2V0T3JpZ2luKHIp OworCXhsX2xvZ2ljYWxfZGRsX21lc3NhZ2UgKm1lc3NhZ2U7CisKKwlpZiAoaW5mbyAhPSBYTE9H X0xPR0lDQUxfRERMX01FU1NBR0UpCisJCWVsb2coRVJST1IsICJ1bmV4cGVjdGVkIFJNX0xPR0lD QUxERExNU0dfSUQgcmVjb3JkIHR5cGU6ICV1IiwgaW5mbyk7CisKKwlSZW9yZGVyQnVmZmVyUHJv Y2Vzc1hpZChjdHgtPnJlb3JkZXIsIFhMb2dSZWNHZXRYaWQociksIGJ1Zi0+b3JpZ3B0cik7CisK KwkvKgorCSAqIElmIHdlIGRvbid0IGhhdmUgc25hcHNob3Qgb3Igd2UgYXJlIGp1c3QgZmFzdC1m b3J3YXJkaW5nLCB0aGVyZSBpcyBubworCSAqIHBvaW50IGluIGRlY29kaW5nIGRkbCBtZXNzYWdl cy4KKwkgKi8KKwlpZiAoU25hcEJ1aWxkQ3VycmVudFN0YXRlKGJ1aWxkZXIpIDwgU05BUEJVSUxE X0ZVTExfU05BUFNIT1QgfHwKKwkJY3R4LT5mYXN0X2ZvcndhcmQpCisJCXJldHVybjsKKworCW1l c3NhZ2UgPSAoeGxfbG9naWNhbF9kZGxfbWVzc2FnZSAqKSBYTG9nUmVjR2V0RGF0YShyKTsKKwor CWlmIChtZXNzYWdlLT5kYklkICE9IGN0eC0+c2xvdC0+ZGF0YS5kYXRhYmFzZSB8fAorCQlGaWx0 ZXJCeU9yaWdpbihjdHgsIG9yaWdpbl9pZCkpCisJCXJldHVybjsKKworCWlmIChTbmFwQnVpbGRQ cm9jZXNzQ2hhbmdlKGJ1aWxkZXIsIHhpZCwgYnVmLT5vcmlncHRyKSkKKwkJUmVvcmRlckJ1ZmZl clF1ZXVlRERMTWVzc2FnZShjdHgtPnJlb3JkZXIsIHhpZCwgYnVmLT5lbmRwdHIsCisJCQkJCQkJ CQkgbWVzc2FnZS0+bWVzc2FnZSwgLyogZmlyc3QgcGFydCBvZiBtZXNzYWdlIGlzIHByZWZpeCAq LworCQkJCQkJCQkJIG1lc3NhZ2UtPm1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkJCSBtZXNzYWdlLT5t ZXNzYWdlICsgbWVzc2FnZS0+cHJlZml4X3NpemUsCisJCQkJCQkJCQkgbWVzc2FnZS0+cmVsaWQs IG1lc3NhZ2UtPmNtZHR5cGUpOworfQorCisvKgogICogQ29uc29saWRhdGVkIGNvbW1pdCByZWNv cmQgaGFuZGxpbmcgYmV0d2VlbiB0aGUgZGlmZmVyZW50IGZvcm0gb2YgY29tbWl0CiAgKiByZWNv cmRzLgogICoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvbG9n aWNhbC5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dpY2FsLmMKaW5kZXgg NjI1YTdmNC4uOTg5NjljNyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9n aWNhbC9sb2dpY2FsLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9sb2dp Y2FsLmMKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJmbWdyLmgiCiAjaW5jbHVkZSAibWlz Y2FkbWluLmgiCiAjaW5jbHVkZSAicGdzdGF0LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRs bWVzc2FnZS5oIgogI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RlY29kZS5oIgogI2luY2x1ZGUgInJl cGxpY2F0aW9uL2xvZ2ljYWwuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9vcmlnaW4uaCIKQEAg LTczLDYgKzc0LDEwIEBAIHN0YXRpYyB2b2lkIHRydW5jYXRlX2NiX3dyYXBwZXIoUmVvcmRlckJ1 ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIHN0YXRpYyB2b2lkIG1lc3NhZ2Vf Y2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAog CQkJCQkJCSAgIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sIGJvb2wgdHJhbnNhY3Rpb25hbCwKIAkJ CQkJCQkgICBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUgbWVzc2FnZV9zaXplLCBjb25zdCBjaGFy ICptZXNzYWdlKTsKK3N0YXRpYyB2b2lkIGRkbG1lc3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVm ZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkgIFhMb2dSZWNQdHIg bWVzc2FnZV9sc24sIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJICBPaWQgcmVsaWQsIERl cGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJICBTaXplIG1lc3NhZ2Vfc2l6ZSwg Y29uc3QgY2hhciAqbWVzc2FnZSk7CiAKIC8qIHN0cmVhbWluZyBjYWxsYmFja3MgKi8KIHN0YXRp YyB2b2lkIHN0cmVhbV9zdGFydF9jYl93cmFwcGVyKFJlb3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9y ZGVyQnVmZmVyVFhOICp0eG4sCkBAIC05MCw2ICs5NSwxMSBAQCBzdGF0aWMgdm9pZCBzdHJlYW1f Y2hhbmdlX2NiX3dyYXBwZXIoUmVvcmRlckJ1ZmZlciAqY2FjaGUsIFJlb3JkZXJCdWZmZXJUWE4g KnR4bgogc3RhdGljIHZvaWQgc3RyZWFtX21lc3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVy ICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJCQkJICBYTG9nUmVjUHRyIG1l c3NhZ2VfbHNuLCBib29sIHRyYW5zYWN0aW9uYWwsCiAJCQkJCQkJCQkgIGNvbnN0IGNoYXIgKnBy ZWZpeCwgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOworc3RhdGljIHZv aWQgc3RyZWFtX2RkbG1lc3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVv cmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNuLAor CQkJCQkJCQkJCSBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCQkJIE9pZCByZWxpZCwgRGVw YXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwg Y29uc3QgY2hhciAqbWVzc2FnZSk7CiBzdGF0aWMgdm9pZCBzdHJlYW1fdHJ1bmNhdGVfY2Jfd3Jh cHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJ CQkJICAgaW50IG5yZWxhdGlvbnMsIFJlbGF0aW9uIHJlbGF0aW9uc1tdLCBSZW9yZGVyQnVmZmVy Q2hhbmdlICpjaGFuZ2UpOwogCkBAIC0yMTgsNiArMjI4LDcgQEAgU3RhcnR1cERlY29kaW5nQ29u dGV4dChMaXN0ICpvdXRwdXRfcGx1Z2luX29wdGlvbnMsCiAJY3R4LT5yZW9yZGVyLT5hcHBseV90 cnVuY2F0ZSA9IHRydW5jYXRlX2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5jb21taXQgPSBj b21taXRfY2Jfd3JhcHBlcjsKIAljdHgtPnJlb3JkZXItPm1lc3NhZ2UgPSBtZXNzYWdlX2NiX3dy YXBwZXI7CisJY3R4LT5yZW9yZGVyLT5kZGxtZXNzYWdlID0gZGRsbWVzc2FnZV9jYl93cmFwcGVy OwogCiAJLyoKIAkgKiBUbyBzdXBwb3J0IHN0cmVhbWluZywgd2UgcmVxdWlyZSBzdGFydC9zdG9w L2Fib3J0L2NvbW1pdC9jaGFuZ2UKQEAgLTIzNCw2ICsyNDUsNyBAQCBTdGFydHVwRGVjb2RpbmdD b250ZXh0KExpc3QgKm91dHB1dF9wbHVnaW5fb3B0aW9ucywKIAkJKGN0eC0+Y2FsbGJhY2tzLnN0 cmVhbV9jb21taXRfY2IgIT0gTlVMTCkgfHwKIAkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9jaGFu Z2VfY2IgIT0gTlVMTCkgfHwKIAkJKGN0eC0+Y2FsbGJhY2tzLnN0cmVhbV9tZXNzYWdlX2NiICE9 IE5VTEwpIHx8CisJCShjdHgtPmNhbGxiYWNrcy5zdHJlYW1fZGRsbWVzc2FnZV9jYiAhPSBOVUxM KSB8fAogCQkoY3R4LT5jYWxsYmFja3Muc3RyZWFtX3RydW5jYXRlX2NiICE9IE5VTEwpOwogCiAJ LyoKQEAgLTI1MSw2ICsyNjMsNyBAQCBTdGFydHVwRGVjb2RpbmdDb250ZXh0KExpc3QgKm91dHB1 dF9wbHVnaW5fb3B0aW9ucywKIAljdHgtPnJlb3JkZXItPnN0cmVhbV9jb21taXQgPSBzdHJlYW1f Y29tbWl0X2NiX3dyYXBwZXI7CiAJY3R4LT5yZW9yZGVyLT5zdHJlYW1fY2hhbmdlID0gc3RyZWFt X2NoYW5nZV9jYl93cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+c3RyZWFtX21lc3NhZ2UgPSBzdHJl YW1fbWVzc2FnZV9jYl93cmFwcGVyOworCWN0eC0+cmVvcmRlci0+c3RyZWFtX2RkbG1lc3NhZ2Ug PSBzdHJlYW1fZGRsbWVzc2FnZV9jYl93cmFwcGVyOwogCWN0eC0+cmVvcmRlci0+c3RyZWFtX3Ry dW5jYXRlID0gc3RyZWFtX3RydW5jYXRlX2NiX3dyYXBwZXI7CiAKIApAQCAtMTIyMSw2ICsxMjM0 LDQ0IEBAIG1lc3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1 ZmZlclRYTiAqdHhuLAogfQogCiBzdGF0aWMgdm9pZAorZGRsbWVzc2FnZV9jYl93cmFwcGVyKFJl b3JkZXJCdWZmZXIgKmNhY2hlLCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCSAgWExvZ1Jl Y1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJICBjb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwg RGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkgIFNpemUgbWVzc2FnZV9zaXplLAor CQkJCQkgIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJTG9naWNhbERlY29kaW5nQ29udGV4dCAq Y3R4ID0gY2FjaGUtPnByaXZhdGVfZGF0YTsKKwlMb2dpY2FsRXJyb3JDYWxsYmFja1N0YXRlIHN0 YXRlOworCUVycm9yQ29udGV4dENhbGxiYWNrIGVycmNhbGxiYWNrOworCisJQXNzZXJ0KCFjdHgt PmZhc3RfZm9yd2FyZCk7CisKKwlpZiAoY3R4LT5jYWxsYmFja3MuZGRsbWVzc2FnZV9jYiA9PSBO VUxMKQorCQlyZXR1cm47CisKKwkvKiBQdXNoIGNhbGxiYWNrICsgaW5mbyBvbiB0aGUgZXJyb3Ig Y29udGV4dCBzdGFjayAqLworCXN0YXRlLmN0eCA9IGN0eDsKKwlzdGF0ZS5jYWxsYmFja19uYW1l ID0gImRkbG1lc3NhZ2UiOworCXN0YXRlLnJlcG9ydF9sb2NhdGlvbiA9IG1lc3NhZ2VfbHNuOwor CWVycmNhbGxiYWNrLmNhbGxiYWNrID0gb3V0cHV0X3BsdWdpbl9lcnJvcl9jYWxsYmFjazsKKwll cnJjYWxsYmFjay5hcmcgPSAodm9pZCAqKSAmc3RhdGU7CisJZXJyY2FsbGJhY2sucHJldmlvdXMg PSBlcnJvcl9jb250ZXh0X3N0YWNrOworCWVycm9yX2NvbnRleHRfc3RhY2sgPSAmZXJyY2FsbGJh Y2s7CisKKwkvKiBzZXQgb3V0cHV0IHN0YXRlICovCisJY3R4LT5hY2NlcHRfd3JpdGVzID0gdHJ1 ZTsKKwljdHgtPndyaXRlX3hpZCA9IHR4biAhPSBOVUxMID8gdHhuLT54aWQgOiBJbnZhbGlkVHJh bnNhY3Rpb25JZDsKKwljdHgtPndyaXRlX2xvY2F0aW9uID0gbWVzc2FnZV9sc247CisKKwkvKiBk byB0aGUgYWN0dWFsIHdvcms6IGNhbGwgY2FsbGJhY2sgKi8KKwljdHgtPmNhbGxiYWNrcy5kZGxt ZXNzYWdlX2NiKGN0eCwgdHhuLCBtZXNzYWdlX2xzbiwgcHJlZml4LCByZWxpZCwgY21kdHlwZSwK KwkJCQkJCQkJIG1lc3NhZ2Vfc2l6ZSwgbWVzc2FnZSk7CisKKwkvKiBQb3AgdGhlIGVycm9yIGNv bnRleHQgc3RhY2sgKi8KKwllcnJvcl9jb250ZXh0X3N0YWNrID0gZXJyY2FsbGJhY2sucHJldmlv dXM7Cit9CisKK3N0YXRpYyB2b2lkCiBzdHJlYW1fc3RhcnRfY2Jfd3JhcHBlcihSZW9yZGVyQnVm ZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCQkJWExvZ1JlY1B0ciBmaXJz dF9sc24pCiB7CkBAIC0xNTM2LDYgKzE1ODcsNDggQEAgc3RyZWFtX21lc3NhZ2VfY2Jfd3JhcHBl cihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogfQogCiBzdGF0 aWMgdm9pZAorc3RyZWFtX2RkbG1lc3NhZ2VfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNo ZSwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAorCQkJCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNu LAorCQkJCQkJCSBjb25zdCBjaGFyICpwcmVmaXgsIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5k VHlwZSBjbWR0eXBlLAorCQkJCQkJCSBTaXplIG1lc3NhZ2Vfc2l6ZSwKKwkJCQkJCQkgY29uc3Qg Y2hhciAqbWVzc2FnZSkKK3sKKwlMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHggPSBjYWNoZS0+ cHJpdmF0ZV9kYXRhOworCUxvZ2ljYWxFcnJvckNhbGxiYWNrU3RhdGUgc3RhdGU7CisJRXJyb3JD b250ZXh0Q2FsbGJhY2sgZXJyY2FsbGJhY2s7CisKKwlBc3NlcnQoIWN0eC0+ZmFzdF9mb3J3YXJk KTsKKworCS8qIFdlJ3JlIG9ubHkgc3VwcG9zZWQgdG8gY2FsbCB0aGlzIHdoZW4gc3RyZWFtaW5n IGlzIHN1cHBvcnRlZC4gKi8KKwlBc3NlcnQoY3R4LT5zdHJlYW1pbmcpOworCisJLyogdGhpcyBj YWxsYmFjayBpcyBvcHRpb25hbCAqLworCWlmIChjdHgtPmNhbGxiYWNrcy5zdHJlYW1fZGRsbWVz c2FnZV9jYiA9PSBOVUxMKQorCQlyZXR1cm47CisKKwkvKiBQdXNoIGNhbGxiYWNrICsgaW5mbyBv biB0aGUgZXJyb3IgY29udGV4dCBzdGFjayAqLworCXN0YXRlLmN0eCA9IGN0eDsKKwlzdGF0ZS5j YWxsYmFja19uYW1lID0gInN0cmVhbV9kZGxtZXNzYWdlIjsKKwlzdGF0ZS5yZXBvcnRfbG9jYXRp b24gPSBtZXNzYWdlX2xzbjsKKwllcnJjYWxsYmFjay5jYWxsYmFjayA9IG91dHB1dF9wbHVnaW5f ZXJyb3JfY2FsbGJhY2s7CisJZXJyY2FsbGJhY2suYXJnID0gKHZvaWQgKikgJnN0YXRlOworCWVy cmNhbGxiYWNrLnByZXZpb3VzID0gZXJyb3JfY29udGV4dF9zdGFjazsKKwllcnJvcl9jb250ZXh0 X3N0YWNrID0gJmVycmNhbGxiYWNrOworCisJLyogc2V0IG91dHB1dCBzdGF0ZSAqLworCWN0eC0+ YWNjZXB0X3dyaXRlcyA9IHRydWU7CisJY3R4LT53cml0ZV94aWQgPSB0eG4gIT0gTlVMTCA/IHR4 bi0+eGlkIDogSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJY3R4LT53cml0ZV9sb2NhdGlvbiA9IG1l c3NhZ2VfbHNuOworCisJLyogZG8gdGhlIGFjdHVhbCB3b3JrOiBjYWxsIGNhbGxiYWNrICovCisJ Y3R4LT5jYWxsYmFja3Muc3RyZWFtX2RkbG1lc3NhZ2VfY2IoY3R4LCB0eG4sIG1lc3NhZ2VfbHNu LCBwcmVmaXgsIHJlbGlkLAorCQkJCQkJCQkJCWNtZHR5cGUsIG1lc3NhZ2Vfc2l6ZSwgbWVzc2Fn ZSk7CisKKwkvKiBQb3AgdGhlIGVycm9yIGNvbnRleHQgc3RhY2sgKi8KKwllcnJvcl9jb250ZXh0 X3N0YWNrID0gZXJyY2FsbGJhY2sucHJldmlvdXM7Cit9CisKK3N0YXRpYyB2b2lkCiBzdHJlYW1f dHJ1bmNhdGVfY2Jfd3JhcHBlcihSZW9yZGVyQnVmZmVyICpjYWNoZSwgUmVvcmRlckJ1ZmZlclRY TiAqdHhuLAogCQkJCQkJICAgaW50IG5yZWxhdGlvbnMsIFJlbGF0aW9uIHJlbGF0aW9uc1tdLAog CQkJCQkJICAgUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlKQpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9wcm90by5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRp b24vbG9naWNhbC9wcm90by5jCmluZGV4IGZmODUxM2UuLmVhZWMwMzEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL3JlcGxpY2F0aW9uL2xvZ2ljYWwvcHJvdG8uYworKysgYi9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3Byb3RvLmMKQEAgLTY0MCw4ICs2NDAsOCBAQCBsb2dpY2FscmVw X3JlYWRfdHJ1bmNhdGUoU3RyaW5nSW5mbyBpbiwKICAqLwogdm9pZAogbG9naWNhbHJlcF93cml0 ZV9tZXNzYWdlKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBs c24sCi0JCQkJCQkgYm9vbCB0cmFuc2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsIFNpemUg c3osCi0JCQkJCQkgY29uc3QgY2hhciAqbWVzc2FnZSkKKwkJCQkJCSBib29sIHRyYW5zYWN0aW9u YWwsIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCSBTaXplIHN6LCBjb25zdCBjaGFyICptZXNz YWdlKQogewogCXVpbnQ4CQlmbGFncyA9IDA7CiAKQEAgLTY2Myw2ICs2NjMsNTIgQEAgbG9naWNh bHJlcF93cml0ZV9tZXNzYWdlKFN0cmluZ0luZm8gb3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgWExv Z1JlY1B0ciBsc24sCiB9CiAKIC8qCisgKiBSZWFkIERETCBNRVNTQUdFIGZyb20gc3RyZWFtCisg Ki8KK2NoYXIgKgorbG9naWNhbHJlcF9yZWFkX2RkbG1lc3NhZ2UoU3RyaW5nSW5mbyBpbiwgWExv Z1JlY1B0ciAqbHNuLAorCQkJCQkJICAgY29uc3QgY2hhciAqKnByZWZpeCwKKwkJCQkJCSAgIFNp emUgKnN6KQoreworCXVpbnQ4IGZsYWdzOworCWNoYXIgKm1zZzsKKworCS8vVE9ETyBkb3VibGUg Y2hlY2sgd2hlbiBkbyB3ZSBuZWVkIHRvIGdldCBUcmFuc2FjdGlvbklkLgorCisJZmxhZ3MgPSBw cV9nZXRtc2dpbnQoaW4sIDEpOworCWlmIChmbGFncyAhPSAwKQorCQllbG9nKEVSUk9SLCAidW5y ZWNvZ25pemVkIGZsYWdzICV1IGluIGRkbCBtZXNzYWdlIiwgZmxhZ3MpOworCSpsc24gPSBwcV9n ZXRtc2dpbnQ2NChpbik7CisJKnByZWZpeCA9IHBxX2dldG1zZ3N0cmluZyhpbik7CisJKnN6ID0g cHFfZ2V0bXNnaW50KGluLCA0KTsKKwltc2cgPSAoY2hhciAqKSBwcV9nZXRtc2dieXRlcyhpbiwg KnN6KTsKKworCXJldHVybiBtc2c7Cit9CisKKy8qCisgKiBXcml0ZSBEREwgTUVTU0FHRSB0byBz dHJlYW0KKyAqLwordm9pZAorbG9naWNhbHJlcF93cml0ZV9kZGxtZXNzYWdlKFN0cmluZ0luZm8g b3V0LCBUcmFuc2FjdGlvbklkIHhpZCwgWExvZ1JlY1B0ciBsc24sCisJCQkJCQkJY29uc3QgY2hh ciAqcHJlZml4LCBTaXplIHN6LCBjb25zdCBjaGFyICptZXNzYWdlKQoreworCXVpbnQ4CQlmbGFn cyA9IDA7CisKKwlwcV9zZW5kYnl0ZShvdXQsIExPR0lDQUxfUkVQX01TR19ERExNRVNTQUdFKTsK KworCS8qIHRyYW5zYWN0aW9uIElEIChpZiBub3QgdmFsaWQsIHdlJ3JlIG5vdCBzdHJlYW1pbmcp ICovCisJaWYgKFRyYW5zYWN0aW9uSWRJc1ZhbGlkKHhpZCkpCisJCXBxX3NlbmRpbnQzMihvdXQs IHhpZCk7CisKKwlwcV9zZW5kaW50OChvdXQsIGZsYWdzKTsKKwlwcV9zZW5kaW50NjQob3V0LCBs c24pOworCXBxX3NlbmRzdHJpbmcob3V0LCBwcmVmaXgpOworCXBxX3NlbmRpbnQzMihvdXQsIHN6 KTsKKwlwcV9zZW5kYnl0ZXMob3V0LCBtZXNzYWdlLCBzeik7Cit9CisKKy8qCiAgKiBXcml0ZSBy ZWxhdGlvbiBkZXNjcmlwdGlvbiB0byB0aGUgb3V0cHV0IHN0cmVhbS4KICAqLwogdm9pZApAQCAt MTIxOCw2ICsxMjY0LDggQEAgbG9naWNhbHJlcF9tZXNzYWdlX3R5cGUoTG9naWNhbFJlcE1zZ1R5 cGUgYWN0aW9uKQogCQkJcmV0dXJuICJUWVBFIjsKIAkJY2FzZSBMT0dJQ0FMX1JFUF9NU0dfTUVT U0FHRToKIAkJCXJldHVybiAiTUVTU0FHRSI7CisJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX0RETE1F U1NBR0U6CisJCQlyZXR1cm4gIkRETCI7CiAJCWNhc2UgTE9HSUNBTF9SRVBfTVNHX0JFR0lOX1BS RVBBUkU6CiAJCQlyZXR1cm4gIkJFR0lOIFBSRVBBUkUiOwogCQljYXNlIExPR0lDQUxfUkVQX01T R19QUkVQQVJFOgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9y ZW9yZGVyYnVmZmVyLmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJi dWZmZXIuYwppbmRleCA4ZGE1ZjkwLi4zNDZlMTllIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9y ZXBsaWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYworKysgYi9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL3Jlb3JkZXJidWZmZXIuYwpAQCAtOTQsNiArOTQsNyBAQAogI2luY2x1 ZGUgImxpYi9iaW5hcnloZWFwLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAi cGdzdGF0LmgiCisjaW5jbHVkZSAicmVwbGljYXRpb24vZGRsbWVzc2FnZS5oIgogI2luY2x1ZGUg InJlcGxpY2F0aW9uL2xvZ2ljYWwuaCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9yZW9yZGVyYnVm ZmVyLmgiCiAjaW5jbHVkZSAicmVwbGljYXRpb24vc2xvdC5oIgpAQCAtNTEyLDYgKzUxMywxNCBA QCBSZW9yZGVyQnVmZmVyUmV0dXJuQ2hhbmdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9yZGVyQnVm ZmVyQ2hhbmdlICpjaGFuZ2UsCiAJCQkJcGZyZWUoY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlKTsK IAkJCWNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZSA9IE5VTEw7CiAJCQlicmVhazsKKwkJY2FzZSBS RU9SREVSX0JVRkZFUl9DSEFOR0VfRERMTUVTU0FHRToKKwkJCWlmIChjaGFuZ2UtPmRhdGEuZGRs bXNnLnByZWZpeCAhPSBOVUxMKQorCQkJCXBmcmVlKGNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4 KTsKKwkJCWNoYW5nZS0+ZGF0YS5kZGxtc2cucHJlZml4ID0gTlVMTDsKKwkJCWlmIChjaGFuZ2Ut PmRhdGEuZGRsbXNnLm1lc3NhZ2UgIT0gTlVMTCkKKwkJCQlwZnJlZShjaGFuZ2UtPmRhdGEuZGRs bXNnLm1lc3NhZ2UpOworCQkJY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlID0gTlVMTDsKKwkJ CWJyZWFrOwogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CiAJCQlp ZiAoY2hhbmdlLT5kYXRhLmludmFsLmludmFsaWRhdGlvbnMpCiAJCQkJcGZyZWUoY2hhbmdlLT5k YXRhLmludmFsLmludmFsaWRhdGlvbnMpOwpAQCAtODY3LDYgKzg3NiwzNiBAQCBSZW9yZGVyQnVm ZmVyUXVldWVNZXNzYWdlKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKIH0K IAogLyoKKyAqIEEgdHJhbnNhY3Rpb25hbCBEREwgbWVzc2FnZSBpcyBxdWV1ZWQgdG8gYmUgcHJv Y2Vzc2VkIHVwb24gY29tbWl0LgorICovCit2b2lkCitSZW9yZGVyQnVmZmVyUXVldWVERExNZXNz YWdlKFJlb3JkZXJCdWZmZXIgKnJiLCBUcmFuc2FjdGlvbklkIHhpZCwKKwkJCQkJCQkgWExvZ1Jl Y1B0ciBsc24sIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkgU2l6ZSBtZXNzYWdlX3NpemUs IGNvbnN0IGNoYXIgKm1lc3NhZ2UsCisJCQkJCQkJIE9pZCByZWxpZCwgRGVwYXJzZWRDb21tYW5k VHlwZSBjbWR0eXBlKQoreworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwlSZW9yZGVyQnVm ZmVyQ2hhbmdlICpjaGFuZ2U7CisKKwlBc3NlcnQoeGlkICE9IEludmFsaWRUcmFuc2FjdGlvbklk KTsKKworCW9sZGNvbnRleHQgPSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocmItPmNvbnRleHQpOwor CisJY2hhbmdlID0gUmVvcmRlckJ1ZmZlckdldENoYW5nZShyYik7CisJY2hhbmdlLT5hY3Rpb24g PSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfRERMTUVTU0FHRTsKKwljaGFuZ2UtPmRhdGEuZGRsbXNn LnByZWZpeCA9IHBzdHJkdXAocHJlZml4KTsKKwljaGFuZ2UtPmRhdGEuZGRsbXNnLnJlbGlkID0g cmVsaWQ7CisJY2hhbmdlLT5kYXRhLmRkbG1zZy5jbWR0eXBlID0gY21kdHlwZTsKKwljaGFuZ2Ut PmRhdGEuZGRsbXNnLm1lc3NhZ2Vfc2l6ZSA9IG1lc3NhZ2Vfc2l6ZTsKKwljaGFuZ2UtPmRhdGEu ZGRsbXNnLm1lc3NhZ2UgPSBwYWxsb2MobWVzc2FnZV9zaXplKTsKKwltZW1jcHkoY2hhbmdlLT5k YXRhLmRkbG1zZy5tZXNzYWdlLCBtZXNzYWdlLCBtZXNzYWdlX3NpemUpOworCisJUmVvcmRlckJ1 ZmZlclF1ZXVlQ2hhbmdlKHJiLCB4aWQsIGxzbiwgY2hhbmdlLCBmYWxzZSk7CisKKwlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7Cit9CisKKy8qCiAgKiBBc3NlcnRUWE5Mc25PcmRl cgogICoJCVZlcmlmeSBMU04gb3JkZXJpbmcgb2YgdHJhbnNhY3Rpb24gbGlzdHMgaW4gdGhlIHJl b3JkZXJidWZmZXIKICAqCkBAIC0xOTU4LDYgKzE5OTcsMjkgQEAgUmVvcmRlckJ1ZmZlckFwcGx5 TWVzc2FnZShSZW9yZGVyQnVmZmVyICpyYiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogfQogCiAv KgorICogSGVscGVyIGZ1bmN0aW9uIGZvciBSZW9yZGVyQnVmZmVyUHJvY2Vzc1RYTiBmb3IgYXBw bHlpbmcgdGhlIERETCBtZXNzYWdlLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQKK1Jlb3JkZXJC dWZmZXJBcHBseURETE1lc3NhZ2UoUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4g KnR4biwKKwkJCQkJCQkgUmVvcmRlckJ1ZmZlckNoYW5nZSAqY2hhbmdlLCBib29sIHN0cmVhbWlu ZykKK3sKKwlpZiAoc3RyZWFtaW5nKQorCQlyYi0+c3RyZWFtX2RkbG1lc3NhZ2UocmIsIHR4biwg Y2hhbmdlLT5sc24sCisJCQkJCQkJICBjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCwKKwkJCQkJ CQkgIGNoYW5nZS0+ZGF0YS5kZGxtc2cucmVsaWQsCisJCQkJCQkJICBjaGFuZ2UtPmRhdGEuZGRs bXNnLmNtZHR5cGUsCisJCQkJCQkJICBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2Vfc2l6ZSwK KwkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSk7CisJZWxzZQorCQlyYi0+ZGRs bWVzc2FnZShyYiwgdHhuLCBjaGFuZ2UtPmxzbiwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1z Zy5wcmVmaXgsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGxtc2cucmVsaWQsCisJCQkJCSAgIGNo YW5nZS0+ZGF0YS5kZGxtc2cuY21kdHlwZSwKKwkJCQkJICAgY2hhbmdlLT5kYXRhLmRkbG1zZy5t ZXNzYWdlX3NpemUsCisJCQkJCSAgIGNoYW5nZS0+ZGF0YS5kZGxtc2cubWVzc2FnZSk7Cit9CisK Ky8qCiAgKiBGdW5jdGlvbiB0byBzdG9yZSB0aGUgY29tbWFuZCBpZCBhbmQgc25hcHNob3QgYXQg dGhlIGVuZCBvZiB0aGUgY3VycmVudAogICogc3RyZWFtIHNvIHRoYXQgd2UgY2FuIHJldXNlIHRo ZSBzYW1lIHdoaWxlIHNlbmRpbmcgdGhlIG5leHQgc3RyZWFtLgogICovCkBAIC0yMzM1LDYgKzIz OTcsMTAgQEAgUmVvcmRlckJ1ZmZlclByb2Nlc3NUWE4oUmVvcmRlckJ1ZmZlciAqcmIsIFJlb3Jk ZXJCdWZmZXJUWE4gKnR4biwKIAkJCQkJUmVvcmRlckJ1ZmZlckFwcGx5TWVzc2FnZShyYiwgdHhu LCBjaGFuZ2UsIHN0cmVhbWluZyk7CiAJCQkJCWJyZWFrOwogCisJCQkJY2FzZSBSRU9SREVSX0JV RkZFUl9DSEFOR0VfRERMTUVTU0FHRToKKwkJCQkJUmVvcmRlckJ1ZmZlckFwcGx5RERMTWVzc2Fn ZShyYiwgdHhuLCBjaGFuZ2UsIHN0cmVhbWluZyk7CisJCQkJCWJyZWFrOworCiAJCQkJY2FzZSBS RU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OOgogCQkJCQkvKiBFeGVjdXRlIHRoZSBp bnZhbGlkYXRpb24gbWVzc2FnZXMgbG9jYWxseSAqLwogCQkJCQlSZW9yZGVyQnVmZmVyRXhlY3V0 ZUludmFsaWRhdGlvbnMoY2hhbmdlLT5kYXRhLmludmFsLm5pbnZhbGlkYXRpb25zLApAQCAtMzcx MCw2ICszNzc2LDQwIEBAIFJlb3JkZXJCdWZmZXJTZXJpYWxpemVDaGFuZ2UoUmVvcmRlckJ1ZmZl ciAqcmIsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAogCQkJCWJyZWFrOwogCQkJfQorCQljYXNl IFJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERExNRVNTQUdFOgorCQkJeworCQkJCWNoYXIJICAgKmRh dGE7CisJCQkJU2l6ZQkJcHJlZml4X3NpemUgPSBzdHJsZW4oY2hhbmdlLT5kYXRhLmRkbG1zZy5w cmVmaXgpICsgMTsKKworCQkJCXN6ICs9IHByZWZpeF9zaXplICsgY2hhbmdlLT5kYXRhLmRkbG1z Zy5tZXNzYWdlX3NpemUgKworCQkJCQlzaXplb2YoU2l6ZSkgKyBzaXplb2YoT2lkKSArIHNpemVv ZihpbnQpICsgc2l6ZW9mKFNpemUpOworCQkJCVJlb3JkZXJCdWZmZXJTZXJpYWxpemVSZXNlcnZl KHJiLCBzeik7CisKKwkJCQlkYXRhID0gKChjaGFyICopIHJiLT5vdXRidWYpICsgc2l6ZW9mKFJl b3JkZXJCdWZmZXJEaXNrQ2hhbmdlKTsKKworCQkJCS8qIG1pZ2h0IGhhdmUgYmVlbiByZWFsbG9j YXRlZCBhYm92ZSAqLworCQkJCW9uZGlzayA9IChSZW9yZGVyQnVmZmVyRGlza0NoYW5nZSAqKSBy Yi0+b3V0YnVmOworCisJCQkJLyogd3JpdGUgdGhlIHByZWZpeCwgcmVsaWQgYW5kIGNtZHR5cGUg aW5jbHVkaW5nIHRoZSBzaXplICovCisJCQkJbWVtY3B5KGRhdGEsICZwcmVmaXhfc2l6ZSwgc2l6 ZW9mKFNpemUpKTsKKwkJCQlkYXRhICs9IHNpemVvZihTaXplKTsKKwkJCQltZW1jcHkoZGF0YSwg JmNoYW5nZS0+ZGF0YS5kZGxtc2cucmVsaWQsIHNpemVvZihPaWQpKTsKKwkJCQlkYXRhICs9IHNp emVvZihPaWQpOworCQkJCW1lbWNweShkYXRhLCAmY2hhbmdlLT5kYXRhLmRkbG1zZy5jbWR0eXBl LCBzaXplb2YoaW50KSk7CisJCQkJZGF0YSArPSBzaXplb2YoaW50KTsKKwkJCQltZW1jcHkoZGF0 YSwgY2hhbmdlLT5kYXRhLmRkbG1zZy5wcmVmaXgsCisJCQkJCSAgIHByZWZpeF9zaXplKTsKKwkJ CQlkYXRhICs9IHByZWZpeF9zaXplOworCisJCQkJLyogd3JpdGUgdGhlIG1lc3NhZ2UgaW5jbHVk aW5nIHRoZSBzaXplICovCisJCQkJbWVtY3B5KGRhdGEsICZjaGFuZ2UtPmRhdGEuZGRsbXNnLm1l c3NhZ2Vfc2l6ZSwgc2l6ZW9mKFNpemUpKTsKKwkJCQlkYXRhICs9IHNpemVvZihTaXplKTsKKwkJ CQltZW1jcHkoZGF0YSwgY2hhbmdlLT5kYXRhLmRkbG1zZy5tZXNzYWdlLAorCQkJCQkgICBjaGFu Z2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2Vfc2l6ZSk7CisJCQkJZGF0YSArPSBjaGFuZ2UtPmRhdGEu ZGRsbXNnLm1lc3NhZ2Vfc2l6ZTsKKworCQkJCWJyZWFrOworCQkJfQogCQljYXNlIFJFT1JERVJf QlVGRkVSX0NIQU5HRV9JTlZBTElEQVRJT046CiAJCQl7CiAJCQkJY2hhcgkgICAqZGF0YTsKQEAg LTQwMjQsNiArNDEyNCwxNSBAQCBSZW9yZGVyQnVmZmVyQ2hhbmdlU2l6ZShSZW9yZGVyQnVmZmVy Q2hhbmdlICpjaGFuZ2UpCiAKIAkJCQlicmVhazsKIAkJCX0KKwkJY2FzZSBSRU9SREVSX0JVRkZF Ul9DSEFOR0VfRERMTUVTU0FHRToKKwkJCXsKKwkJCQlTaXplCQlwcmVmaXhfc2l6ZSA9IHN0cmxl bihjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCkgKyAxOworCisJCQkJc3ogKz0gcHJlZml4X3Np emUgKyBjaGFuZ2UtPmRhdGEuZGRsbXNnLm1lc3NhZ2Vfc2l6ZSArCisJCQkJCXNpemVvZihTaXpl KSArIHNpemVvZihTaXplKSArIHNpemVvZihPaWQpICsgc2l6ZW9mKGludCk7CisKKwkJCQlicmVh azsKKwkJCX0KIAkJY2FzZSBSRU9SREVSX0JVRkZFUl9DSEFOR0VfSU5WQUxJREFUSU9OOgogCQkJ ewogCQkJCXN6ICs9IHNpemVvZihTaGFyZWRJbnZhbGlkYXRpb25NZXNzYWdlKSAqCkBAIC00Mjgy LDggKzQzOTEsNyBAQCBSZW9yZGVyQnVmZmVyUmVzdG9yZUNoYW5nZShSZW9yZGVyQnVmZmVyICpy YiwgUmVvcmRlckJ1ZmZlclRYTiAqdHhuLAogCQkJCS8qIHJlYWQgcHJlZml4ICovCiAJCQkJbWVt Y3B5KCZwcmVmaXhfc2l6ZSwgZGF0YSwgc2l6ZW9mKFNpemUpKTsKIAkJCQlkYXRhICs9IHNpemVv ZihTaXplKTsKLQkJCQljaGFuZ2UtPmRhdGEubXNnLnByZWZpeCA9IE1lbW9yeUNvbnRleHRBbGxv YyhyYi0+Y29udGV4dCwKLQkJCQkJCQkJCQkJCQkJCSBwcmVmaXhfc2l6ZSk7CisJCQkJY2hhbmdl LT5kYXRhLm1zZy5wcmVmaXggPSBNZW1vcnlDb250ZXh0QWxsb2MocmItPmNvbnRleHQsIHByZWZp eF9zaXplKTsKIAkJCQltZW1jcHkoY2hhbmdlLT5kYXRhLm1zZy5wcmVmaXgsIGRhdGEsIHByZWZp eF9zaXplKTsKIAkJCQlBc3NlcnQoY2hhbmdlLT5kYXRhLm1zZy5wcmVmaXhbcHJlZml4X3NpemUg LSAxXSA9PSAnXDAnKTsKIAkJCQlkYXRhICs9IHByZWZpeF9zaXplOwpAQCAtNDI5OSw2ICs0NDA3 LDMzIEBAIFJlb3JkZXJCdWZmZXJSZXN0b3JlQ2hhbmdlKFJlb3JkZXJCdWZmZXIgKnJiLCBSZW9y ZGVyQnVmZmVyVFhOICp0eG4sCiAKIAkJCQlicmVhazsKIAkJCX0KKwkJY2FzZSBSRU9SREVSX0JV RkZFUl9DSEFOR0VfRERMTUVTU0FHRToKKwkJCXsKKwkJCQlTaXplCQlwcmVmaXhfc2l6ZTsKKwor CQkJCS8qIHJlYWQgcHJlZml4ICovCisJCQkJbWVtY3B5KCZwcmVmaXhfc2l6ZSwgZGF0YSwgc2l6 ZW9mKFNpemUpKTsKKwkJCQlkYXRhICs9IHNpemVvZihTaXplKTsKKwkJCQltZW1jcHkoJmNoYW5n ZS0+ZGF0YS5kZGxtc2cucmVsaWQsIGRhdGEsIHNpemVvZihPaWQpKTsKKwkJCQlkYXRhICs9IHNp emVvZihPaWQpOworCQkJCW1lbWNweSgmY2hhbmdlLT5kYXRhLmRkbG1zZy5jbWR0eXBlLCBkYXRh LCBzaXplb2YoaW50KSk7CisJCQkJZGF0YSArPSBzaXplb2YoaW50KTsKKwkJCQljaGFuZ2UtPmRh dGEuZGRsbXNnLnByZWZpeCA9IE1lbW9yeUNvbnRleHRBbGxvYyhyYi0+Y29udGV4dCwgcHJlZml4 X3NpemUpOworCQkJCW1lbWNweShjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeCwgZGF0YSwgcHJl Zml4X3NpemUpOworCQkJCUFzc2VydChjaGFuZ2UtPmRhdGEuZGRsbXNnLnByZWZpeFtwcmVmaXhf c2l6ZSAtIDFdID09ICdcMCcpOworCQkJCWRhdGEgKz0gcHJlZml4X3NpemU7CisKKwkJCQkvKiBy ZWFkIHRoZSBtZXNzYWdlICovCisJCQkJbWVtY3B5KCZjaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2Vf c2l6ZSwgZGF0YSwgc2l6ZW9mKFNpemUpKTsKKwkJCQlkYXRhICs9IHNpemVvZihTaXplKTsKKwkJ CQljaGFuZ2UtPmRhdGEubXNnLm1lc3NhZ2UgPSBNZW1vcnlDb250ZXh0QWxsb2MocmItPmNvbnRl eHQsCisJCQkJCQkJCQkJCQkJCQkgIGNoYW5nZS0+ZGF0YS5tc2cubWVzc2FnZV9zaXplKTsKKwkJ CQltZW1jcHkoY2hhbmdlLT5kYXRhLm1zZy5tZXNzYWdlLCBkYXRhLAorCQkJCQkgICBjaGFuZ2Ut PmRhdGEubXNnLm1lc3NhZ2Vfc2l6ZSk7CisJCQkJZGF0YSArPSBjaGFuZ2UtPmRhdGEubXNnLm1l c3NhZ2Vfc2l6ZTsKKworCQkJCWJyZWFrOworCQkJfQogCQljYXNlIFJFT1JERVJfQlVGRkVSX0NI QU5HRV9JTlZBTElEQVRJT046CiAJCQl7CiAJCQkJU2l6ZQkJaW52YWxfc2l6ZSA9IHNpemVvZihT aGFyZWRJbnZhbGlkYXRpb25NZXNzYWdlKSAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9yZXBs aWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNh bC93b3JrZXIuYwppbmRleCAzOGUzYjFjLi4yYzY2N2JiIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3dvcmtlci5jCisrKyBiL3NyYy9iYWNrZW5kL3JlcGxpY2F0 aW9uL2xvZ2ljYWwvd29ya2VyLmMKQEAgLTE1Niw2ICsxNTYsNyBAQAogI2luY2x1ZGUgIm1pc2Nh ZG1pbi5oIgogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgogI2luY2x1ZGUgIm9wdGltaXpl ci9vcHRpbWl6ZXIuaCIKKyNpbmNsdWRlICJwYXJzZXIvYW5hbHl6ZS5oIgogI2luY2x1ZGUgInBn c3RhdC5oIgogI2luY2x1ZGUgInBvc3RtYXN0ZXIvYmd3b3JrZXIuaCIKICNpbmNsdWRlICJwb3N0 bWFzdGVyL2ludGVycnVwdC5oIgpAQCAtMTc5LDcgKzE4MCwxMCBAQAogI2luY2x1ZGUgInN0b3Jh Z2UvbG1nci5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcHJvYy5oIgogI2luY2x1ZGUgInN0b3JhZ2Uv cHJvY2FycmF5LmgiCisjaW5jbHVkZSAidGNvcC9kZGxfZGVwYXJzZS5oIgorI2luY2x1ZGUgInRj b3AvcHF1ZXJ5LmgiCiAjaW5jbHVkZSAidGNvcC90Y29wcHJvdC5oIgorI2luY2x1ZGUgInRjb3Av dXRpbGl0eS5oIgogI2luY2x1ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0 aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvY2F0Y2FjaGUuaCIKQEAgLTI0NjMsNiArMjQ2NywyMzAg QEAgYXBwbHlfaGFuZGxlX3RydW5jYXRlKFN0cmluZ0luZm8gcykKIAllbmRfcmVwbGljYXRpb25f c3RlcCgpOwogfQogCisvKiBSZW1vdmUgdGhlIGRhdGEgcG9wdWxhdGlvbiBmcm9tIHRoZSBjb21t YW5kICovCitzdGF0aWMgdm9pZAorcHJlcHJvY2Vzc19jcmVhdGVfdGFibGUoUmF3U3RtdCAqY29t bWFuZCkKK3sKKwlDb21tYW5kVGFnCWNvbW1hbmRUYWc7CisKKwljb21tYW5kVGFnID0gQ3JlYXRl Q29tbWFuZFRhZygoTm9kZSAqKWNvbW1hbmQpOworCisJc3dpdGNoIChjb21tYW5kVGFnKQorCXsK KwkJY2FzZSBDTURUQUdfQ1JFQVRFX1RBQkxFX0FTOgorCQljYXNlIENNRFRBR19TRUxFQ1RfSU5U TzoKKwkJCXsKKwkJCQlDcmVhdGVUYWJsZUFzU3RtdCAqY2FzdG10ID0gKENyZWF0ZVRhYmxlQXNT dG10ICopIGNvbW1hbmQtPnN0bXQ7CisJCQkJaWYgKGNhc3RtdC0+b2JqdHlwZSA9PSBPQkpFQ1Rf VEFCTEUpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBGb3JjZSBza2lwcGluZyBkYXRhIHBvcHVs YXRpb24gdG8gYXZvaWQgZGF0YQorCQkJCQkgKiBpbmNvbnNpc3RlbmN5LiBEYXRhIHNob3VsZCBi ZSByZXBsaWNhdGVkIGZyb20gdGhlCisJCQkJCSAqIHB1Ymxpc2hlciBpbnN0ZWFkLgorCQkJCQkg Ki8KKwkJCQkJY2FzdG10LT5pbnRvLT5za2lwRGF0YSA9IHRydWU7CisJCQkJfQorCQkJfQorCQkJ YnJlYWs7CisJCWNhc2UgQ01EVEFHX1NFTEVDVDoKKwkJCXsKKwkJCQlTZWxlY3RTdG10ICpzc3Rt dCA9IChTZWxlY3RTdG10ICopIGNvbW1hbmQtPnN0bXQ7CisKKwkJCQlpZiAoc3N0bXQtPmludG9D bGF1c2UgIT0gTlVMTCkKKwkJCQl7CisJCQkJCS8qCisJCQkJCSAqIEZvcmNlIHNraXBwaW5nIGRh dGEgcG9wdWxhdGlvbiB0byBhdm9pZCBkYXRhCisJCQkJCSAqIGluY29uc2lzdGVuY3kuIERhdGEg c2hvdWxkIGJlIHJlcGxpY2F0ZWQgZnJvbSB0aGUKKwkJCQkJICogcHVibGlzaGVyIGluc3RlYWQu CisJCQkJCSAqLworCQkJCQlzc3RtdC0+aW50b0NsYXVzZS0+c2tpcERhdGEgPSB0cnVlOworCQkJ CX0KKwkJCX0KKwkJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworLyoKKyAq IEhhbmRsZSBDUkVBVEUgVEFCTEUgY29tbWFuZAorICoKKyAqIENhbGwgQWRkU3Vic2NyaXB0aW9u UmVsU3RhdGUgZm9yIENSRUFURSBUQUJFTCBjb21tYW5kIHRvIHNldCB0aGUgcmVsc3RhdGUgdG8K KyAqIFNVQlJFTF9TVEFURV9SRUFEWSBzbyBETUwgY2hhbmdlcyBvbiB0aGlzIG5ldyB0YWJsZSBj YW4gYmUgcmVwbGljYXRlZCB3aXRob3V0CisgKiBoYXZpbmcgdG8gbWFudWFsbHkgcnVuICJhbHRl ciBzdWJzY3JpcHRpb24gLi4uIHJlZnJlc2ggcHVibGljYXRpb24iCisgKi8KK3N0YXRpYyB2b2lk CitoYW5kbGVfY3JlYXRlX3RhYmxlKFJhd1N0bXQgKmNvbW1hbmQpCit7CisJQ29tbWFuZFRhZwlj b21tYW5kVGFnOworCVJhbmdlVmFyCSAqcnYgPSBOVUxMOworCU9pZAkJCXJlbGlkOworCU9pZAkJ CXJlbG5hbWVzcGFjZSA9IEludmFsaWRPaWQ7CisJY2hhciAJCSAqc2NoZW1hbmFtZSA9IE5VTEw7 CisJY2hhcgkJICpyZWxuYW1lID0gTlVMTDsKKworCWNvbW1hbmRUYWcgPSBDcmVhdGVDb21tYW5k VGFnKChOb2RlICopIGNvbW1hbmQpOworCisJc3dpdGNoIChjb21tYW5kVGFnKQorCXsKKwkJY2Fz ZSBDTURUQUdfQ1JFQVRFX1RBQkxFOgorCQkJeworCQkJCUNyZWF0ZVN0bXQgKmNzdG10ID0gKENy ZWF0ZVN0bXQgKikgY29tbWFuZC0+c3RtdDsKKwkJCQlydiA9IGNzdG10LT5yZWxhdGlvbjsKKwkJ CX0KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJfQorCisJaWYgKCFydikKKwkJ cmV0dXJuOworCisJc2NoZW1hbmFtZSA9IHJ2LT5zY2hlbWFuYW1lOworCXJlbG5hbWUgPSBydi0+ cmVsbmFtZTsKKworCWlmIChzY2hlbWFuYW1lICE9IE5VTEwpCisJCXJlbG5hbWVzcGFjZSA9IGdl dF9uYW1lc3BhY2Vfb2lkKHNjaGVtYW5hbWUsIGZhbHNlKTsKKworCWlmIChyZWxuYW1lc3BhY2Ug IT0gSW52YWxpZE9pZCkKKwkJcmVsaWQgPSBnZXRfcmVsbmFtZV9yZWxpZChyZWxuYW1lLCByZWxu YW1lc3BhY2UpOworCWVsc2UKKwkJcmVsaWQgPSBSZWxuYW1lR2V0UmVsaWQocmVsbmFtZSk7CisK KwlpZiAocmVsaWQgIT0gSW52YWxpZE9pZCkKKwl7CisJCUFkZFN1YnNjcmlwdGlvblJlbFN0YXRl KE15U3Vic2NyaXB0aW9uLT5vaWQsIHJlbGlkLAorCQkJCQkJCQlTVUJSRUxfU1RBVEVfUkVBRFks CisJCQkJCQkJCUludmFsaWRYTG9nUmVjUHRyKTsKKwkJZXJlcG9ydChERUJVRzEsCisJCQkJKGVy cm1zZ19pbnRlcm5hbCgidGFibGUgXCIlc1wiIGFkZGVkIHRvIHN1YnNjcmlwdGlvbiBcIiVzXCIi LAorCQkJCQkJCQkgcmVsbmFtZSwgTXlTdWJzY3JpcHRpb24tPm5hbWUpKSk7CisJfQorfQorCitz dGF0aWMgdm9pZAorYXBwbHlfaGFuZGxlX2RkbChTdHJpbmdJbmZvIHMpCit7CisJWExvZ1JlY1B0 ciBsc247CisJY29uc3QgY2hhciAqcHJlZml4ID0gTlVMTDsKKwljaGFyICptZXNzYWdlID0gTlVM TDsKKwljaGFyCSAgICpkZGxfY29tbWFuZDsKKwlTaXplCQlzejsKKwlMaXN0CSAgICpwYXJzZXRy ZWVfbGlzdDsKKwlMaXN0Q2VsbCAgICpwYXJzZXRyZWVfaXRlbTsKKwlEZXN0UmVjZWl2ZXIgKnJl Y2VpdmVyOworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsKKwljb25zdCBjaGFyICpzYXZlX2Rl YnVnX3F1ZXJ5X3N0cmluZyA9IGRlYnVnX3F1ZXJ5X3N0cmluZzsKKworCW1lc3NhZ2UgPSBsb2dp Y2FscmVwX3JlYWRfZGRsbWVzc2FnZShzLCAmbHNuLCAmcHJlZml4LCAmc3opOworCisJLyogTWFr ZSBzdXJlIHdlIGFyZSBpbiBhIHRyYW5zYWN0aW9uIGNvbW1hbmQgKi8KKwliZWdpbl9yZXBsaWNh dGlvbl9zdGVwKCk7CisKKwlkZGxfY29tbWFuZCA9IGRkbF9kZXBhcnNlX2pzb25fdG9fc3RyaW5n KG1lc3NhZ2UpOworCWRlYnVnX3F1ZXJ5X3N0cmluZyA9IGRkbF9jb21tYW5kOworCisJLyogRGVz dE5vbmUgZm9yIGxvZ2ljYWwgcmVwbGljYXRpb24gKi8KKwlyZWNlaXZlciA9IENyZWF0ZURlc3RS ZWNlaXZlcihEZXN0Tm9uZSk7CisJcGFyc2V0cmVlX2xpc3QgPSBwZ19wYXJzZV9xdWVyeShkZGxf Y29tbWFuZCk7CisKKwlmb3JlYWNoKHBhcnNldHJlZV9pdGVtLCBwYXJzZXRyZWVfbGlzdCkKKwl7 CisJCUxpc3QJICAgKnBsYW50cmVlX2xpc3Q7CisJCUxpc3QJICAgKnF1ZXJ5dHJlZV9saXN0Owor CQlSYXdTdG10CSAgICpjb21tYW5kID0gKFJhd1N0bXQgKikgbGZpcnN0KHBhcnNldHJlZV9pdGVt KTsKKwkJQ29tbWFuZFRhZwljb21tYW5kVGFnOworCQlNZW1vcnlDb250ZXh0IHBlcl9wYXJzZXRy ZWVfY29udGV4dCA9IE5VTEw7CisJCVBvcnRhbAkJcG9ydGFsOworCQlib29sCQkgc25hcHNob3Rf c2V0ID0gZmFsc2U7CisKKwkJY29tbWFuZFRhZyA9IENyZWF0ZUNvbW1hbmRUYWcoKE5vZGUgKikg Y29tbWFuZCk7CisKKwkJLyogSWYgd2UgZ290IGEgY2FuY2VsIHNpZ25hbCBpbiBwYXJzaW5nIG9y IHByaW9yIGNvbW1hbmQsIHF1aXQgKi8KKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkv KiBSZW1vdmUgZGF0YSBwb3B1bGF0aW9uIGZyb20gdGhlIGNvbW1hbmQgKi8KKwkJcHJlcHJvY2Vz c19jcmVhdGVfdGFibGUoY29tbWFuZCk7CisKKwkJLyoKKwkJICogU2V0IHVwIGEgc25hcHNob3Qg aWYgcGFyc2UgYW5hbHlzaXMvcGxhbm5pbmcgd2lsbCBuZWVkIG9uZS4KKwkJICovCisJCWlmIChh bmFseXplX3JlcXVpcmVzX3NuYXBzaG90KGNvbW1hbmQpKQorCQl7CisJCQlQdXNoQWN0aXZlU25h cHNob3QoR2V0VHJhbnNhY3Rpb25TbmFwc2hvdCgpKTsKKwkJCXNuYXBzaG90X3NldCA9IHRydWU7 CisJCX0KKworCQkvKgorCQkgKiBXZSBkbyB0aGUgd29yayBmb3IgZWFjaCBwYXJzZXRyZWUgaW4g YSBzaG9ydC1saXZlZCBjb250ZXh0LCB0bworCQkgKiBsaW1pdCB0aGUgbWVtb3J5IHVzZWQgd2hl biB0aGVyZSBhcmUgbWFueSBjb21tYW5kcyBpbiB0aGUgc3RyaW5nLgorCQkgKi8KKwkJcGVyX3Bh cnNldHJlZV9jb250ZXh0ID0KKwkJCUFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJyZW50TWVtb3J5 Q29udGV4dCwKKwkJCQkJCQkJICAiZXhlY3V0ZV9zcWxfc3RyaW5nIHBlci1zdGF0ZW1lbnQgY29u dGV4dCIsCisJCQkJCQkJCSAgQUxMT0NTRVRfREVGQVVMVF9TSVpFUyk7CisJCW9sZGNvbnRleHQg PSBNZW1vcnlDb250ZXh0U3dpdGNoVG8ocGVyX3BhcnNldHJlZV9jb250ZXh0KTsKKworCQlxdWVy eXRyZWVfbGlzdCA9IHBnX2FuYWx5emVfYW5kX3Jld3JpdGVfZml4ZWRwYXJhbXMoY29tbWFuZCwK KwkJCQkJCQkJCQkJCQkJCWRkbF9jb21tYW5kLAorCQkJCQkJCQkJCQkJCQkJTlVMTCwgMCwgTlVM TCk7CisKKwkJcGxhbnRyZWVfbGlzdCA9IHBnX3BsYW5fcXVlcmllcyhxdWVyeXRyZWVfbGlzdCwg ZGRsX2NvbW1hbmQsIDAsIE5VTEwpOworCisJCS8qIERvbmUgd2l0aCB0aGUgc25hcHNob3QgdXNl ZCBmb3IgcGFyc2luZy9wbGFubmluZyAqLworCQlpZiAoc25hcHNob3Rfc2V0KQorCQkJUG9wQWN0 aXZlU25hcHNob3QoKTsKKworCQlwb3J0YWwgPSBDcmVhdGVQb3J0YWwoImxvZ2ljYWwgcmVwbGlj YXRpb24iLCB0cnVlLCB0cnVlKTsKKworCQkvKgorCQkgKiBXZSBkb24ndCBoYXZlIHRvIGNvcHkg YW55dGhpbmcgaW50byB0aGUgcG9ydGFsLCBiZWNhdXNlIGV2ZXJ5dGhpbmcKKwkJICogd2UgYXJl IHBhc3NpbmcgaGVyZSBpcyBpbiBBcHBseU1lc3NhZ2VDb250ZXh0IG9yIHRoZQorCQkgKiBwZXJf cGFyc2V0cmVlX2NvbnRleHQsIGFuZCBzbyB3aWxsIG91dGxpdmUgdGhlIHBvcnRhbCBhbnl3YXku CisJCSAqLworCQlQb3J0YWxEZWZpbmVRdWVyeShwb3J0YWwsCisJCQkJCQkgIE5VTEwsCisJCQkJ CQkgIGRkbF9jb21tYW5kLAorCQkJCQkJICBjb21tYW5kVGFnLAorCQkJCQkJICBwbGFudHJlZV9s aXN0LAorCQkJCQkJICBOVUxMKTsKKworCQkvKgorCQkgKiBTdGFydCB0aGUgcG9ydGFsLiAgTm8g cGFyYW1ldGVycyBoZXJlLgorCQkgKi8KKwkJUG9ydGFsU3RhcnQocG9ydGFsLCBOVUxMLCAwLCBJ bnZhbGlkU25hcHNob3QpOworCisJCS8qCisJCSAqIFN3aXRjaCBiYWNrIHRvIHRyYW5zYWN0aW9u IGNvbnRleHQgZm9yIGV4ZWN1dGlvbi4KKwkJICovCisJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhv bGRjb250ZXh0KTsKKworCQkodm9pZCkgUG9ydGFsUnVuKHBvcnRhbCwKKwkJCQkJCSBGRVRDSF9B TEwsCisJCQkJCQkgdHJ1ZSwKKwkJCQkJCSB0cnVlLAorCQkJCQkJIHJlY2VpdmVyLAorCQkJCQkJ IHJlY2VpdmVyLAorCQkJCQkJIE5VTEwpOworCisJCVBvcnRhbERyb3AocG9ydGFsLCBmYWxzZSk7 CisKKwkJQ29tbWFuZENvdW50ZXJJbmNyZW1lbnQoKTsKKworCQkvKgorCQkgKiBUYWJsZSBjcmVh dGVkIGJ5IERETCByZXBsaWNhdGlvbiAoZGF0YWJhc2UgbGV2ZWwpIGlzIGF1dG9tYXRpY2FsbHkK KwkJICogYWRkZWQgdG8gdGhlIHN1YnNjcmlwdGlvbiBoZXJlLgorCQkgKi8KKwkJaGFuZGxlX2Ny ZWF0ZV90YWJsZShjb21tYW5kKTsKKworCQkvKiBOb3cgd2UgbWF5IGRyb3AgdGhlIHBlci1wYXJz ZXRyZWUgY29udGV4dCwgaWYgb25lIHdhcyBjcmVhdGVkLiAqLworCQlNZW1vcnlDb250ZXh0RGVs ZXRlKHBlcl9wYXJzZXRyZWVfY29udGV4dCk7CisJfQorCisJZGVidWdfcXVlcnlfc3RyaW5nID0g c2F2ZV9kZWJ1Z19xdWVyeV9zdHJpbmc7CisJZW5kX3JlcGxpY2F0aW9uX3N0ZXAoKTsKK30KKwog CiAvKgogICogTG9naWNhbCByZXBsaWNhdGlvbiBwcm90b2NvbCBtZXNzYWdlIGRpc3BhdGNoZXIu CkBAIC0yNTI4LDYgKzI3NTYsMTAgQEAgYXBwbHlfZGlzcGF0Y2goU3RyaW5nSW5mbyBzKQogCQkJ ICovCiAJCQlicmVhazsKIAorCQljYXNlIExPR0lDQUxfUkVQX01TR19ERExNRVNTQUdFOgorCQkJ YXBwbHlfaGFuZGxlX2RkbChzKTsKKwkJCWJyZWFrOworCiAJCWNhc2UgTE9HSUNBTF9SRVBfTVNH X1NUUkVBTV9TVEFSVDoKIAkJCWFwcGx5X2hhbmRsZV9zdHJlYW1fc3RhcnQocyk7CiAJCQlicmVh azsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0cHV0L3Bnb3V0cHV0 LmMgYi9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9wZ291dHB1dC9wZ291dHB1dC5jCmluZGV4IDhk ZWFlNTcuLjMzMTk0OWMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3JlcGxpY2F0aW9uL3Bnb3V0 cHV0L3Bnb3V0cHV0LmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vcGdvdXRwdXQvcGdv dXRwdXQuYwpAQCAtNTQsNiArNTQsMTEgQEAgc3RhdGljIHZvaWQgcGdvdXRwdXRfbWVzc2FnZShM b2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsCiAJCQkJCQkJIFJlb3JkZXJCdWZmZXJUWE4gKnR4 biwgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKIAkJCQkJCQkgYm9vbCB0cmFuc2FjdGlvbmFsLCBj b25zdCBjaGFyICpwcmVmaXgsCiAJCQkJCQkJIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2Up Oworc3RhdGljIHZvaWQgcGdvdXRwdXRfZGRsbWVzc2FnZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0 ICpjdHgsCisJCQkJCQkJCVJlb3JkZXJCdWZmZXJUWE4gKnR4biwgWExvZ1JlY1B0ciBtZXNzYWdl X2xzbiwKKwkJCQkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQsCisJCQkJCQkJCURl cGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJU2l6ZSBzeiwgY29uc3QgY2hhciAq bWVzc2FnZSk7CiBzdGF0aWMgYm9vbCBwZ291dHB1dF9vcmlnaW5fZmlsdGVyKExvZ2ljYWxEZWNv ZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkJICAgUmVwT3JpZ2luSWQgb3JpZ2luX2lkKTsKIHN0 YXRpYyB2b2lkIHBnb3V0cHV0X2JlZ2luX3ByZXBhcmVfdHhuKExvZ2ljYWxEZWNvZGluZ0NvbnRl eHQgKmN0eCwKQEAgLTI1Niw2ICsyNjEsNyBAQCBfUEdfb3V0cHV0X3BsdWdpbl9pbml0KE91dHB1 dFBsdWdpbkNhbGxiYWNrcyAqY2IpCiAJY2ItPmNoYW5nZV9jYiA9IHBnb3V0cHV0X2NoYW5nZTsK IAljYi0+dHJ1bmNhdGVfY2IgPSBwZ291dHB1dF90cnVuY2F0ZTsKIAljYi0+bWVzc2FnZV9jYiA9 IHBnb3V0cHV0X21lc3NhZ2U7CisJY2ItPmRkbG1lc3NhZ2VfY2IgPSBwZ291dHB1dF9kZGxtZXNz YWdlOwogCWNiLT5jb21taXRfY2IgPSBwZ291dHB1dF9jb21taXRfdHhuOwogCiAJY2ItPmJlZ2lu X3ByZXBhcmVfY2IgPSBwZ291dHB1dF9iZWdpbl9wcmVwYXJlX3R4bjsKQEAgLTI3Miw2ICsyNzgs NyBAQCBfUEdfb3V0cHV0X3BsdWdpbl9pbml0KE91dHB1dFBsdWdpbkNhbGxiYWNrcyAqY2IpCiAJ Y2ItPnN0cmVhbV9jb21taXRfY2IgPSBwZ291dHB1dF9zdHJlYW1fY29tbWl0OwogCWNiLT5zdHJl YW1fY2hhbmdlX2NiID0gcGdvdXRwdXRfY2hhbmdlOwogCWNiLT5zdHJlYW1fbWVzc2FnZV9jYiA9 IHBnb3V0cHV0X21lc3NhZ2U7CisJY2ItPnN0cmVhbV9kZGxtZXNzYWdlX2NiID0gcGdvdXRwdXRf ZGRsbWVzc2FnZTsKIAljYi0+c3RyZWFtX3RydW5jYXRlX2NiID0gcGdvdXRwdXRfdHJ1bmNhdGU7 CiAJLyogdHJhbnNhY3Rpb24gc3RyZWFtaW5nIC0gdHdvLXBoYXNlIGNvbW1pdCAqLwogCWNiLT5z dHJlYW1fcHJlcGFyZV9jYiA9IHBnb3V0cHV0X3N0cmVhbV9wcmVwYXJlX3R4bjsKQEAgLTQwNyw2 ICs0MTQsNyBAQCBwZ291dHB1dF9zdGFydHVwKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwg T3V0cHV0UGx1Z2luT3B0aW9ucyAqb3B0LAogCiAJLyogVGhpcyBwbHVnaW4gdXNlcyBiaW5hcnkg cHJvdG9jb2wuICovCiAJb3B0LT5vdXRwdXRfdHlwZSA9IE9VVFBVVF9QTFVHSU5fQklOQVJZX09V VFBVVDsKKwlvcHQtPnJlY2VpdmVfcmV3cml0ZXMgPSB0cnVlOwogCiAJLyoKIAkgKiBUaGlzIGlz IHJlcGxpY2F0aW9uIHN0YXJ0IGFuZCBub3Qgc2xvdCBpbml0aWFsaXphdGlvbi4KQEAgLTQ4MCw2 ICs0ODgsNyBAQCBwZ291dHB1dF9zdGFydHVwKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwg T3V0cHV0UGx1Z2luT3B0aW9ucyAqb3B0LAogCiAJCS8qIEluaXQgcHVibGljYXRpb24gc3RhdGUu ICovCiAJCWRhdGEtPnB1YmxpY2F0aW9ucyA9IE5JTDsKKwkJZGF0YS0+ZGVsZXRlZF9yZWxpZHMg PSBOSUw7CiAJCXB1YmxpY2F0aW9uc192YWxpZCA9IGZhbHNlOwogCQlDYWNoZVJlZ2lzdGVyU3lz Y2FjaGVDYWxsYmFjayhQVUJMSUNBVElPTk9JRCwKIAkJCQkJCQkJCSAgcHVibGljYXRpb25faW52 YWxpZGF0aW9uX2NiLApAQCAtMTM2Miw5ICsxMzcxLDIyIEBAIHBnb3V0cHV0X2NoYW5nZShMb2dp Y2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAlSZW9yZGVy QnVmZmVyQ2hhbmdlVHlwZSBhY3Rpb24gPSBjaGFuZ2UtPmFjdGlvbjsKIAlUdXBsZVRhYmxlU2xv dCAqb2xkX3Nsb3QgPSBOVUxMOwogCVR1cGxlVGFibGVTbG90ICpuZXdfc2xvdCA9IE5VTEw7CisJ Ym9vbAkJCXRhYmxlX3Jld3JpdGUgPSBmYWxzZTsKIAogCXVwZGF0ZV9yZXBsaWNhdGlvbl9wcm9n cmVzcyhjdHgsIGZhbHNlKTsKIAorCS8qCisJICogRm9yIGhlYXAgcmV3cml0ZXMsIHdlIG1pZ2h0 IG5lZWQgdG8gcmVwbGljYXRlIHRoZW0gaWYgdGhlIHJld3JpdHRlbgorCSAqIHRhYmxlIHB1Ymxp c2hlcyByZXdyaXRlIGRkbCBtZXNzYWdlLiBTbyBnZXQgdGhlIGFjdHVhbCByZWxhdGlvbiBoZXJl IGFuZAorCSAqIGNoZWNrIHRoZSBwdWJhY3Rpb24gbGF0ZXIuCisJICovCisJaWYgKHJlbGF0aW9u LT5yZF9yZWwtPnJlbHJld3JpdGUpCisJeworCQl0YWJsZV9yZXdyaXRlID0gdHJ1ZTsKKwkJcmVs YXRpb24gPSBSZWxhdGlvbklkR2V0UmVsYXRpb24ocmVsYXRpb24tPnJkX3JlbC0+cmVscmV3cml0 ZSk7CisJCXRhcmdldHJlbCA9IHJlbGF0aW9uOworCX0KKwogCWlmICghaXNfcHVibGlzaGFibGVf cmVsYXRpb24ocmVsYXRpb24pKQogCQlyZXR1cm47CiAKQEAgLTEzOTgsNiArMTQyMCwxMyBAQCBw Z291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVy VFhOICp0eG4sCiAJCQlBc3NlcnQoZmFsc2UpOwogCX0KIAorCS8qCisJICogV2UgZG9uJ3QgcHVi bGlzaCB0YWJsZSByZXdyaXRlIGNoYW5nZSB1bmxlc3Mgd2UgcHVibGlzaCB0aGUgcmV3cml0ZSBk ZGwKKwkgKiBtZXNzYWdlLgorCSAqLworCWlmICh0YWJsZV9yZXdyaXRlICYmICFyZWxlbnRyeS0+ cHViYWN0aW9ucy5wdWJkZGwpCisJCXJldHVybjsKKwogCS8qIEF2b2lkIGxlYWtpbmcgbWVtb3J5 IGJ5IHVzaW5nIGFuZCByZXNldHRpbmcgb3VyIG93biBjb250ZXh0ICovCiAJb2xkID0gTWVtb3J5 Q29udGV4dFN3aXRjaFRvKGRhdGEtPmNvbnRleHQpOwogCkBAIC0xNDI3LDggKzE0NTYsOCBAQCBw Z291dHB1dF9jaGFuZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVy VFhOICp0eG4sCiAJCQl9CiAKIAkJCS8qIENoZWNrIHJvdyBmaWx0ZXIgKi8KLQkJCWlmICghcGdv dXRwdXRfcm93X2ZpbHRlcih0YXJnZXRyZWwsIE5VTEwsICZuZXdfc2xvdCwgcmVsZW50cnksCi0J CQkJCQkJCQkgJmFjdGlvbikpCisJCQlpZiAoIXRhYmxlX3Jld3JpdGUgJiYKKwkJCQkhcGdvdXRw dXRfcm93X2ZpbHRlcih0YXJnZXRyZWwsIE5VTEwsICZuZXdfc2xvdCwgcmVsZW50cnksICZhY3Rp b24pKQogCQkJCWJyZWFrOwogCiAJCQkvKgpAQCAtMTQ0OCw4ICsxNDc3LDE5IEBAIHBnb3V0cHV0 X2NoYW5nZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4 biwKIAkJCW1heWJlX3NlbmRfc2NoZW1hKGN0eCwgY2hhbmdlLCByZWxhdGlvbiwgcmVsZW50cnkp OwogCiAJCQlPdXRwdXRQbHVnaW5QcmVwYXJlV3JpdGUoY3R4LCB0cnVlKTsKLQkJCWxvZ2ljYWxy ZXBfd3JpdGVfaW5zZXJ0KGN0eC0+b3V0LCB4aWQsIHRhcmdldHJlbCwgbmV3X3Nsb3QsCi0JCQkJ CQkJCQlkYXRhLT5iaW5hcnksIHJlbGVudHJ5LT5jb2x1bW5zKTsKKworCQkJLyoKKwkJCSAqIENv bnZlcnQgdGhlIHJld3JpdGUgaW5zZXJ0cyB0byB1cGRhdGVzIHNvIHRoYXQgdGhlIHN1YnNjcmli ZXIKKwkJCSAqIGNhbiByZXBsYXkgaXQuIFRoaXMgaXMgbmVlZGVkIHRvIG1ha2Ugc3VyZSB0aGUg ZGF0YSBiZXR3ZWVuCisJCQkgKiBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgaXMgY29uc2lzdGVu dC4KKwkJCSAqLworCQkJaWYgKHRhYmxlX3Jld3JpdGUpCisJCQkJbG9naWNhbHJlcF93cml0ZV91 cGRhdGUoY3R4LT5vdXQsIHhpZCwgdGFyZ2V0cmVsLAorCQkJCQkJCQkJCU5VTEwsIG5ld19zbG90 LCBkYXRhLT5iaW5hcnksCisJCQkJCQkJCQkJcmVsZW50cnktPmNvbHVtbnMpOworCQkJZWxzZQor CQkJCWxvZ2ljYWxyZXBfd3JpdGVfaW5zZXJ0KGN0eC0+b3V0LCB4aWQsIHRhcmdldHJlbCwgbmV3 X3Nsb3QsCisJCQkJCQkJCQkJZGF0YS0+YmluYXJ5LCByZWxlbnRyeS0+Y29sdW1ucyk7CiAJCQlP dXRwdXRQbHVnaW5Xcml0ZShjdHgsIHRydWUpOwogCQkJYnJlYWs7CiAJCWNhc2UgUkVPUkRFUl9C VUZGRVJfQ0hBTkdFX1VQREFURToKQEAgLTE1NzksNiArMTYxOSw5IEBAIHBnb3V0cHV0X2NoYW5n ZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJlb3JkZXJCdWZmZXJUWE4gKnR4biwKIAkJ YW5jZXN0b3IgPSBOVUxMOwogCX0KIAorCWlmICh0YWJsZV9yZXdyaXRlKQorCQlSZWxhdGlvbkNs b3NlKHJlbGF0aW9uKTsKKwogCS8qIENsZWFudXAgKi8KIAlNZW1vcnlDb250ZXh0U3dpdGNoVG8o b2xkKTsKIAlNZW1vcnlDb250ZXh0UmVzZXQoZGF0YS0+Y29udGV4dCk7CkBAIC0xNjU2LDggKzE2 OTksOCBAQCBwZ291dHB1dF90cnVuY2F0ZShMb2dpY2FsRGVjb2RpbmdDb250ZXh0ICpjdHgsIFJl b3JkZXJCdWZmZXJUWE4gKnR4biwKIAogc3RhdGljIHZvaWQKIHBnb3V0cHV0X21lc3NhZ2UoTG9n aWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCi0JCQkJIFhM b2dSZWNQdHIgbWVzc2FnZV9sc24sIGJvb2wgdHJhbnNhY3Rpb25hbCwgY29uc3QgY2hhciAqcHJl Zml4LCBTaXplIHN6LAotCQkJCSBjb25zdCBjaGFyICptZXNzYWdlKQorCQkJCSBYTG9nUmVjUHRy IG1lc3NhZ2VfbHNuLCBib29sIHRyYW5zYWN0aW9uYWwsCisJCQkJIGNvbnN0IGNoYXIgKnByZWZp eCwgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSkKIHsKIAlQR091dHB1dERhdGEgKmRhdGEg PSAoUEdPdXRwdXREYXRhICopIGN0eC0+b3V0cHV0X3BsdWdpbl9wcml2YXRlOwogCVRyYW5zYWN0 aW9uSWQgeGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CkBAIC0xNjk3LDYgKzE3NDAsMTM3IEBA IHBnb3V0cHV0X21lc3NhZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBSZW9yZGVyQnVm ZmVyVFhOICp0eG4sCiAJT3V0cHV0UGx1Z2luV3JpdGUoY3R4LCB0cnVlKTsKIH0KIAorc3RhdGlj IHZvaWQKK3Bnb3V0cHV0X2RkbG1lc3NhZ2UoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBS ZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCVhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJ CWNvbnN0IGNoYXIgKnByZWZpeCwgT2lkIHJlbGlkLCBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5 cGUsCisJCQkJCVNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpCit7CisJUEdPdXRwdXREYXRh ICpkYXRhID0gKFBHT3V0cHV0RGF0YSAqKSBjdHgtPm91dHB1dF9wbHVnaW5fcHJpdmF0ZTsKKwlQ R091dHB1dFR4bkRhdGEgKnR4bmRhdGEgPSAoUEdPdXRwdXRUeG5EYXRhICopIHR4bi0+b3V0cHV0 X3BsdWdpbl9wcml2YXRlOworCVJlbGF0aW9uCXJlbGF0aW9uID0gTlVMTDsKKwlUcmFuc2FjdGlv bklkIHhpZCA9IEludmFsaWRUcmFuc2FjdGlvbklkOworCVJlbGF0aW9uU3luY0VudHJ5ICpyZWxl bnRyeTsKKworCS8qCisJICogUmVtZW1iZXIgdGhlIHhpZCBmb3IgdGhlIG1lc3NhZ2UgaW4gc3Ry ZWFtaW5nIG1vZGUuIFNlZQorCSAqIHBnb3V0cHV0X2NoYW5nZS4KKwkgKi8KKwlpZiAoaW5fc3Ry ZWFtaW5nKQorCQl4aWQgPSB0eG4tPnhpZDsKKworCXN3aXRjaCAoY21kdHlwZSkKKwl7CisJCWNh c2UgRENUX1RhYmxlRHJvcFN0YXJ0OgorCQkJLyoKKwkJCSAqIE9uIERST1Agc3RhcnQsIGFkZCB0 aGUgcmVsaWQgdG8gYSBkZWxldGVkX3JlbGlkIGxpc3QgaWYgdGhlCisJCQkgKiByZWxpZCBpcyBw YXJ0IG9mIGEgcHVibGljYXRpb24gdGhhdCBzdXBwb3J0cyBkZGwgcHVibGljYXRpb24uIFdlCisJ CQkgKiBuZWVkIHRoaXMgYmVjYXVzZSBvbiBEUk9QIGVuZCwgdGhlIHJlbGlkIHdpbGwgbm8gbG9u Z2VyIGJlCisJCQkgKiB2YWxpZC4gTGF0ZXIgb24gRHJvcCBlbmQsIHZlcmlmeSB0aGF0IHRoZSBk cm9wIGlzIGZvciBhIHJlbGlkCisJCQkgKiB0aGF0IGlzIG9uIHRoZSBkZWxldGVkX3JpZCBsaXN0 LCBhbmQgb25seSB0aGVuIHNlbmQgdGhlIGRkbAorCQkJICogbWVzc2FnZS4KKwkJCSAqLworCQkJ cmVsYXRpb24gPSBSZWxhdGlvbklkR2V0UmVsYXRpb24ocmVsaWQpOworCisJCQlBc3NlcnQocmVs YXRpb24pOworCQkJcmVsZW50cnkgPSBnZXRfcmVsX3N5bmNfZW50cnkoZGF0YSwgcmVsYXRpb24p OworCisJCQlpZiAocmVsZW50cnktPnB1YmFjdGlvbnMucHViZGRsKQorCQkJCWRhdGEtPmRlbGV0 ZWRfcmVsaWRzID0gbGFwcGVuZF9vaWQoZGF0YS0+ZGVsZXRlZF9yZWxpZHMsIHJlbGlkKTsKKwor CQkJUmVsYXRpb25DbG9zZShyZWxhdGlvbik7CisJCQlyZXR1cm47CisJCWNhc2UgRENUX1RhYmxl RHJvcEVuZDoKKwkJCWlmICghbGlzdF9tZW1iZXJfb2lkKGRhdGEtPmRlbGV0ZWRfcmVsaWRzLCBy ZWxpZCkpCisJCQkJcmV0dXJuOworCQkJZWxzZQorCQkJCWRhdGEtPmRlbGV0ZWRfcmVsaWRzID0g bGlzdF9kZWxldGVfb2lkKGRhdGEtPmRlbGV0ZWRfcmVsaWRzLCByZWxpZCk7CisJCQlicmVhazsK KwkJY2FzZSBEQ1RfVGFibGVBbHRlcjoKKwkJCS8qCisJCQkgKiBGb3IgdGFibGUgcmV3cml0ZSBk ZGwsIHdlIGZpcnN0IHNlbmQgdGhlIG9yaWdpbmFsIGRkbCBtZXNzYWdlIHRvCisJCQkgKiBzdWJz Y3JpYmVyLCB0aGVuIGNvbnZlcnQgdGhlIHVwY29taW5nIHJld3JpdGUgSU5TRVJUIHRvIFVQREFU RSBhbmQKKwkJCSAqIHNlbmQgdGhlbSB0byBzdWJzY3JpYmVyIHNvIHRoYXQgdGhlIGRhdGEgYmV0 d2VlbiBwdWJsaXNoZXIgYW5kCisJCQkgKiBzdWJzY3JpYmVyIGNhbiBhbHdheXMgYmUgY29uc2lz dGVudC4KKwkJCSAqCisJCQkgKiBXZSBkbyB0aGlzIHdheSBiZWNhdXNlIG9mIHR3byByZWFzb246 CisJCQkgKgorCQkJICogKDEpIFRoZSBkYXRhIGJlZm9yZSB0aGUgcmV3cml0ZSBkZGwgY291bGQg YWxyZWFkeSBiZSBkaWZmZXJlbnQgYW1vbmcKKwkJCSAqIHB1Ymxpc2hlciBhbmQgc3Vic2NyaWJl ci4gVG8gbWFrZSBzdXJlIHRoZSBleHRyYSBkYXRhIGluIHN1YnNjcmliZXIKKwkJCSAqIHdoaWNo IGRvZXNuJ3QgZXhpc3QgaW4gcHVibGlzaGVyIGFsc28gZ2V0IHJld3JpdHRlbiwgd2UgbmVlZCB0 byBsZXQKKwkJCSAqIHRoZSBzdWJzY3JpYmVyIGV4ZWN1dGUgdGhlIG9yaWdpbmFsIHJld3JpdGUg ZGRsIHRvIHJld3JpdGUgYWxsIHRoZQorCQkJICogZGF0YSBhdCBmaXJzdC4KKwkJCSAqCisJCQkg KiAoMikgdGhlIGRhdGEgYWZ0ZXIgZXhlY3V0aW5nIHJld3JpdGUgZGRsIGNvdWxkIGJlIGRpZmZl cmVudCBhbW9uZworCQkJICogcHVibGlzaGVyIGFuZCBzdWJzY3JpYmVyKGR1ZSB0byBkaWZmZXJl bnQgZnVuY3Rpb25zL29wZXJhdG9ycyB1c2VkCisJCQkgKiBkdXJpbmcgcmV3cml0ZSksIHNvIHdl IG5lZWQgdG8gcmVwbGljYXRlIHRoZSByZXdyaXRlIFVQREFURXMgdG8ga2VlcAorCQkJICogdGhl IGRhdGEgY29uc2lzdGVudC4KKwkJCSAqCisJCQkgKiBUTyBJTVBST1ZFOiBXZSBjb3VsZCBpbXBy b3ZlIHRoaXMgYnkgbGV0dGluZyB0aGUgc3Vic2NyaWJlciBvbmx5CisJCQkgKiByZXdyaXRlIHRo ZSBleHRyYSBkYXRhIGluc3RlYWQgb2YgZG9pbmcgZnVsbHkgcmV3cml0ZSBhbmQgdXNlIHRoZQor CQkJICogdXBjb21pbmcgcmV3cml0ZSBVUERBVEVzIHRvIHJld3JpdGUgdGhlIHJlc3QgZGF0YS4g QmVzaWRlcywgd2UgbWF5CisJCQkgKiBub3QgbmVlZCB0byBzZW5kIHJld3JpdGUgY2hhbmdlcyBm b3IgYWxsIHR5cGUgb2YgcmV3cml0ZSBkZGwsIGZvcgorCQkJICogZXhhbXBsZSwgaXQgc2VlbXMg ZmluZSB0byBza2lwIHNlbmRpbmcgcmV3cml0ZSBjaGFuZ2VzIGZvciBBTFRFUgorCQkJICogVEFC TEUgU0VUIExPR0dFRCBhcyB0aGUgZGF0YSBpbiB0aGUgdGFibGUgZG9lc24ndCBhY3R1YWxseSBi ZQorCQkJICogY2hhbmdlZC4KKwkJCSAqLworCQkJcmVsYXRpb24gPSBSZWxhdGlvbklkR2V0UmVs YXRpb24ocmVsaWQpOworCQkJQXNzZXJ0KHJlbGF0aW9uKTsKKworCQkJcmVsZW50cnkgPSBnZXRf cmVsX3N5bmNfZW50cnkoZGF0YSwgcmVsYXRpb24pOworCisJCQkvKgorCQkJICogU2tpcCBzZW5k aW5nIHRoaXMgZGRsIGlmIHdlIGRvbid0IHB1Ymxpc2ggZGRsIG1lc3NhZ2Ugb3IgdGhlIGRkbAor CQkJICogbmVlZCB0byBiZSBwdWJsaXNoZWQgdmlhIGl0cyByb290IHJlbGF0aW9uLgorCQkJICov CisJCQlpZiAoIXJlbGVudHJ5LT5wdWJhY3Rpb25zLnB1YmRkbCB8fAorCQkJCXJlbGVudHJ5LT5w dWJsaXNoX2FzX3JlbGlkICE9IHJlbGlkKQorCQkJeworCQkJCVJlbGF0aW9uQ2xvc2UocmVsYXRp b24pOworCQkJCXJldHVybjsKKwkJCX0KKworCQkJYnJlYWs7CisJCWNhc2UgRENUX1NpbXBsZUNt ZDoKKwkJCXJlbGF0aW9uID0gUmVsYXRpb25JZEdldFJlbGF0aW9uKHJlbGlkKTsKKworCQkJaWYg KHJlbGF0aW9uID09IE5VTEwpCisJCQkJYnJlYWs7CisKKwkJCXJlbGVudHJ5ID0gZ2V0X3JlbF9z eW5jX2VudHJ5KGRhdGEsIHJlbGF0aW9uKTsKKworCQkJaWYgKCFyZWxlbnRyeS0+cHViYWN0aW9u cy5wdWJkZGwpCisJCQl7CisJCQkJUmVsYXRpb25DbG9zZShyZWxhdGlvbik7CisJCQkJcmV0dXJu OworCQkJfQorCisJCQlicmVhazsKKwkJY2FzZSBEQ1RfT2JqZWN0RHJvcDoKKwkJCS8qIGRvIG5v dGhpbmcgKi8KKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJZWxvZyhFUlJPUiwgInVuc3VwcG9y dGVkIHR5cGUgJWQiLCBjbWR0eXBlKTsKKwkJCWJyZWFrOworCX0KKworCS8qIFNlbmQgQkVHSU4g aWYgd2UgaGF2ZW4ndCB5ZXQgKi8KKwlpZiAodHhuZGF0YSAmJiAhdHhuZGF0YS0+c2VudF9iZWdp bl90eG4pCisJCXBnb3V0cHV0X3NlbmRfYmVnaW4oY3R4LCB0eG4pOworCisJT3V0cHV0UGx1Z2lu UHJlcGFyZVdyaXRlKGN0eCwgdHJ1ZSk7CisJbG9naWNhbHJlcF93cml0ZV9kZGxtZXNzYWdlKGN0 eC0+b3V0LAorCQkJCQkJCQl4aWQsCisJCQkJCQkJCW1lc3NhZ2VfbHNuLAorCQkJCQkJCQlwcmVm aXgsCisJCQkJCQkJCXN6LAorCQkJCQkJCQltZXNzYWdlKTsKKwlPdXRwdXRQbHVnaW5Xcml0ZShj dHgsIHRydWUpOworCisJaWYgKHJlbGF0aW9uKQorCQlSZWxhdGlvbkNsb3NlKHJlbGF0aW9uKTsK K30KKwogLyoKICAqIEN1cnJlbnRseSB3ZSBhbHdheXMgZm9yd2FyZC4KICAqLwpAQCAtMTk4Miw3 ICsyMTU2LDggQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwgUmVsYXRp b24gcmVsYXRpb24pCiAJCWVudHJ5LT5zY2hlbWFfc2VudCA9IGZhbHNlOwogCQllbnRyeS0+c3Ry ZWFtZWRfdHhucyA9IE5JTDsKIAkJZW50cnktPnB1YmFjdGlvbnMucHViaW5zZXJ0ID0gZW50cnkt PnB1YmFjdGlvbnMucHVidXBkYXRlID0KLQkJCWVudHJ5LT5wdWJhY3Rpb25zLnB1YmRlbGV0ZSA9 IGVudHJ5LT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlID0gZmFsc2U7CisJCQllbnRyeS0+cHViYWN0 aW9ucy5wdWJkZWxldGUgPSBlbnRyeS0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSA9CisJCQllbnRy eS0+cHViYWN0aW9ucy5wdWJkZGwgPSBmYWxzZTsKIAkJZW50cnktPm5ld19zbG90ID0gTlVMTDsK IAkJZW50cnktPm9sZF9zbG90ID0gTlVMTDsKIAkJbWVtc2V0KGVudHJ5LT5leHByc3RhdGUsIDAs IHNpemVvZihlbnRyeS0+ZXhwcnN0YXRlKSk7CkBAIC0yMDQwLDYgKzIyMTUsNyBAQCBnZXRfcmVs X3N5bmNfZW50cnkoUEdPdXRwdXREYXRhICpkYXRhLCBSZWxhdGlvbiByZWxhdGlvbikKIAkJZW50 cnktPnB1YmFjdGlvbnMucHVidXBkYXRlID0gZmFsc2U7CiAJCWVudHJ5LT5wdWJhY3Rpb25zLnB1 YmRlbGV0ZSA9IGZhbHNlOwogCQllbnRyeS0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSA9IGZhbHNl OworCQllbnRyeS0+cHViYWN0aW9ucy5wdWJkZGwgPSBmYWxzZTsKIAogCQkvKgogCQkgKiBUdXBs ZSBzbG90cyBjbGVhbnVwcy4gKFdpbGwgYmUgcmVidWlsdCBsYXRlciBpZiBuZWVkZWQpLgpAQCAt MjE1Myw2ICsyMzI5LDcgQEAgZ2V0X3JlbF9zeW5jX2VudHJ5KFBHT3V0cHV0RGF0YSAqZGF0YSwg UmVsYXRpb24gcmVsYXRpb24pCiAJCQkJZW50cnktPnB1YmFjdGlvbnMucHVidXBkYXRlIHw9IHB1 Yi0+cHViYWN0aW9ucy5wdWJ1cGRhdGU7CiAJCQkJZW50cnktPnB1YmFjdGlvbnMucHViZGVsZXRl IHw9IHB1Yi0+cHViYWN0aW9ucy5wdWJkZWxldGU7CiAJCQkJZW50cnktPnB1YmFjdGlvbnMucHVi dHJ1bmNhdGUgfD0gcHViLT5wdWJhY3Rpb25zLnB1YnRydW5jYXRlOworCQkJCWVudHJ5LT5wdWJh Y3Rpb25zLnB1YmRkbCAgICB8PSBwdWItPnB1YmFjdGlvbnMucHViZGRsOwogCiAJCQkJLyoKIAkJ CQkgKiBXZSB3YW50IHRvIHB1Ymxpc2ggdGhlIGNoYW5nZXMgYXMgdGhlIHRvcC1tb3N0IGFuY2Vz dG9yCkBAIC0yMzM4LDYgKzI1MTUsNyBAQCByZWxfc3luY19jYWNoZV9wdWJsaWNhdGlvbl9jYihE YXR1bSBhcmcsIGludCBjYWNoZWlkLCB1aW50MzIgaGFzaHZhbHVlKQogCXsKIAkJZW50cnktPnJl cGxpY2F0ZV92YWxpZCA9IGZhbHNlOwogCX0KKwogfQogCiAvKiBTZW5kIFJlcGxpY2F0aW9uIG9y aWdpbiAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3JpX3RyaWdnZXJzLmMg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYwppbmRleCA1MWIzZmRjLi43ZDYw YWFjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYworKysg Yi9zcmMvYmFja2VuZC91dGlscy9hZHQvcmlfdHJpZ2dlcnMuYwpAQCAtMzMsNiArMzMsNyBAQAog I2luY2x1ZGUgImNhdGFsb2cvcGdfb3BlcmF0b3IuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5 cGUuaCIKICNpbmNsdWRlICJjb21tYW5kcy90cmlnZ2VyLmgiCisjaW5jbHVkZSAiY29tbWFuZHMv ZXZlbnRfdHJpZ2dlci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4ZWN1dG9yLmgiCiAjaW5jbHVk ZSAiZXhlY3V0b3Ivc3BpLmgiCiAjaW5jbHVkZSAibGliL2lsaXN0LmgiCkBAIC00MCw2ICs0MSw3 IEBACiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2NvZXJjZS5oIgogI2luY2x1ZGUgInBhcnNlci9w YXJzZV9yZWxhdGlvbi5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVmbWdyLmgiCisjaW5jbHVkZSAi dGNvcC9kZGxfZGVwYXJzZS5oIgogI2luY2x1ZGUgInV0aWxzL2FjbC5oIgogI2luY2x1ZGUgInV0 aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZGF0dW0uaCIKZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMgYi9zcmMvYmFja2VuZC91dGlscy9jYWNo ZS9yZWxjYWNoZS5jCmluZGV4IDBlOGZkYTkuLjI3ZGU0NzUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3V0aWxzL2NhY2hlL3JlbGNhY2hlLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvY2FjaGUv cmVsY2FjaGUuYwpAQCAtNTYyNyw2ICs1NjI3LDcgQEAgUmVsYXRpb25CdWlsZFB1YmxpY2F0aW9u RGVzYyhSZWxhdGlvbiByZWxhdGlvbiwgUHVibGljYXRpb25EZXNjICpwdWJkZXNjKQogCQlwdWJk ZXNjLT5wdWJhY3Rpb25zLnB1YnVwZGF0ZSB8PSBwdWJmb3JtLT5wdWJ1cGRhdGU7CiAJCXB1YmRl c2MtPnB1YmFjdGlvbnMucHViZGVsZXRlIHw9IHB1YmZvcm0tPnB1YmRlbGV0ZTsKIAkJcHViZGVz Yy0+cHViYWN0aW9ucy5wdWJ0cnVuY2F0ZSB8PSBwdWJmb3JtLT5wdWJ0cnVuY2F0ZTsKKwkJcHVi ZGVzYy0+cHViYWN0aW9ucy5wdWJkZGwgfD0gcHViZm9ybS0+cHViZGRsOwogCiAJCS8qCiAJCSAq IENoZWNrIGlmIGFsbCBjb2x1bW5zIHJlZmVyZW5jZWQgaW4gdGhlIGZpbHRlciBleHByZXNzaW9u IGFyZSBwYXJ0CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jIGIvc3JjL2Jp bi9wZ19kdW1wL3BnX2R1bXAuYwppbmRleCA3Y2M5YzcyLi4wMzBkNDkxIDEwMDY0NAotLS0gYS9z cmMvYmluL3BnX2R1bXAvcGdfZHVtcC5jCisrKyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmMK QEAgLTM4NjcsNiArMzg2Nyw3IEBAIGdldFB1YmxpY2F0aW9ucyhBcmNoaXZlICpmb3V0LCBpbnQg Km51bVB1YmxpY2F0aW9ucykKIAlpbnQJCQlpX3B1YnVwZGF0ZTsKIAlpbnQJCQlpX3B1YmRlbGV0 ZTsKIAlpbnQJCQlpX3B1YnRydW5jYXRlOworCWludAkJCWlfcHViZGRsOwogCWludAkJCWlfcHVi dmlhcm9vdDsKIAlpbnQJCQlpLAogCQkJCW50dXBzOwpAQCAtMzg4MiwyMyArMzg4MywyOSBAQCBn ZXRQdWJsaWNhdGlvbnMoQXJjaGl2ZSAqZm91dCwgaW50ICpudW1QdWJsaWNhdGlvbnMpCiAJcmVz ZXRQUUV4cEJ1ZmZlcihxdWVyeSk7CiAKIAkvKiBHZXQgdGhlIHB1YmxpY2F0aW9ucy4gKi8KLQlp ZiAoZm91dC0+cmVtb3RlVmVyc2lvbiA+PSAxMzAwMDApCisJaWYgKGZvdXQtPnJlbW90ZVZlcnNp b24gPj0gMTUwMDAwKQogCQlhcHBlbmRQUUV4cEJ1ZmZlcihxdWVyeSwKIAkJCQkJCSAgIlNFTEVD VCBwLnRhYmxlb2lkLCBwLm9pZCwgcC5wdWJuYW1lLCAiCiAJCQkJCQkgICJwLnB1Ym93bmVyLCAi Ci0JCQkJCQkgICJwLnB1YmFsbHRhYmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1 YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0ZSwgcC5wdWJ2aWFyb290ICIKKwkJCQkJCSAgInAucHViYWxs dGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUsIHAucHViZGVsZXRlLCBwLnB1YnRydW5j YXRlLCBwLnB1YmRkbCwgcC5wdWJ2aWFyb290ICIKKwkJCQkJCSAgIkZST00gcGdfcHVibGljYXRp b24gcCIpOworCWVsc2UgaWYgKGZvdXQtPnJlbW90ZVZlcnNpb24gPj0gMTMwMDAwKQorCQlhcHBl bmRQUUV4cEJ1ZmZlcihxdWVyeSwKKwkJCQkJCSAgIlNFTEVDVCBwLnRhYmxlb2lkLCBwLm9pZCwg cC5wdWJuYW1lLCAiCisJCQkJCQkgICJwLnB1Ym93bmVyLCAiCisJCQkJCQkgICJwLnB1YmFsbHRh YmxlcywgcC5wdWJpbnNlcnQsIHAucHVidXBkYXRlLCBwLnB1YmRlbGV0ZSwgcC5wdWJ0cnVuY2F0 ZSwgZmFsc2UgYXMgcC5wdWJkZGwsIHAucHVidmlhcm9vdCAiCiAJCQkJCQkgICJGUk9NIHBnX3B1 YmxpY2F0aW9uIHAiKTsKIAllbHNlIGlmIChmb3V0LT5yZW1vdGVWZXJzaW9uID49IDExMDAwMCkK IAkJYXBwZW5kUFFFeHBCdWZmZXIocXVlcnksCiAJCQkJCQkgICJTRUxFQ1QgcC50YWJsZW9pZCwg cC5vaWQsIHAucHVibmFtZSwgIgogCQkJCQkJICAicC5wdWJvd25lciwgIgotCQkJCQkJICAicC5w dWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVi dHJ1bmNhdGUsIGZhbHNlIEFTIHB1YnZpYXJvb3QgIgorCQkJCQkJICAicC5wdWJhbGx0YWJsZXMs IHAucHViaW5zZXJ0LCBwLnB1YnVwZGF0ZSwgcC5wdWJkZWxldGUsIHAucHVidHJ1bmNhdGUsIGZh bHNlIGFzIHAucHViZGRsLCBmYWxzZSBBUyBwdWJ2aWFyb290ICIKIAkJCQkJCSAgIkZST00gcGdf cHVibGljYXRpb24gcCIpOwogCWVsc2UKIAkJYXBwZW5kUFFFeHBCdWZmZXIocXVlcnksCiAJCQkJ CQkgICJTRUxFQ1QgcC50YWJsZW9pZCwgcC5vaWQsIHAucHVibmFtZSwgIgogCQkJCQkJICAicC5w dWJvd25lciwgIgotCQkJCQkJICAicC5wdWJhbGx0YWJsZXMsIHAucHViaW5zZXJ0LCBwLnB1YnVw ZGF0ZSwgcC5wdWJkZWxldGUsIGZhbHNlIEFTIHB1YnRydW5jYXRlLCBmYWxzZSBBUyBwdWJ2aWFy b290ICIKKwkJCQkJCSAgInAucHViYWxsdGFibGVzLCBwLnB1Ymluc2VydCwgcC5wdWJ1cGRhdGUs IHAucHViZGVsZXRlLCBmYWxzZSBBUyBwdWJ0cnVuY2F0ZSwgZmFsc2UgYXMgcC5wdWJkZGwsIGZh bHNlIEFTIHB1YnZpYXJvb3QgIgogCQkJCQkJICAiRlJPTSBwZ19wdWJsaWNhdGlvbiBwIik7CiAK IAlyZXMgPSBFeGVjdXRlU3FsUXVlcnkoZm91dCwgcXVlcnktPmRhdGEsIFBHUkVTX1RVUExFU19P Syk7CkBAIC0zOTE0LDYgKzM5MjEsNyBAQCBnZXRQdWJsaWNhdGlvbnMoQXJjaGl2ZSAqZm91dCwg aW50ICpudW1QdWJsaWNhdGlvbnMpCiAJaV9wdWJ1cGRhdGUgPSBQUWZudW1iZXIocmVzLCAicHVi dXBkYXRlIik7CiAJaV9wdWJkZWxldGUgPSBQUWZudW1iZXIocmVzLCAicHViZGVsZXRlIik7CiAJ aV9wdWJ0cnVuY2F0ZSA9IFBRZm51bWJlcihyZXMsICJwdWJ0cnVuY2F0ZSIpOworCWlfcHViZGRs ID0gUFFmbnVtYmVyKHJlcywgInB1YmRkbCIpOwogCWlfcHVidmlhcm9vdCA9IFBRZm51bWJlcihy ZXMsICJwdWJ2aWFyb290Iik7CiAKIAlwdWJpbmZvID0gcGdfbWFsbG9jKG50dXBzICogc2l6ZW9m KFB1YmxpY2F0aW9uSW5mbykpOwpAQCAtMzkzNyw2ICszOTQ1LDggQEAgZ2V0UHVibGljYXRpb25z KEFyY2hpdmUgKmZvdXQsIGludCAqbnVtUHVibGljYXRpb25zKQogCQkJKHN0cmNtcChQUWdldHZh bHVlKHJlcywgaSwgaV9wdWJkZWxldGUpLCAidCIpID09IDApOwogCQlwdWJpbmZvW2ldLnB1YnRy dW5jYXRlID0KIAkJCShzdHJjbXAoUFFnZXR2YWx1ZShyZXMsIGksIGlfcHVidHJ1bmNhdGUpLCAi dCIpID09IDApOworCQlwdWJpbmZvW2ldLnB1YmRkbCA9CisJCQkoc3RyY21wKFBRZ2V0dmFsdWUo cmVzLCBpLCBpX3B1YmRkbCksICJ0IikgPT0gMCk7CiAJCXB1YmluZm9baV0ucHVidmlhcm9vdCA9 CiAJCQkoc3RyY21wKFBRZ2V0dmFsdWUocmVzLCBpLCBpX3B1YnZpYXJvb3QpLCAidCIpID09IDAp OwogCkBAIC00MDE2LDYgKzQwMjYsMTUgQEAgZHVtcFB1YmxpY2F0aW9uKEFyY2hpdmUgKmZvdXQs IGNvbnN0IFB1YmxpY2F0aW9uSW5mbyAqcHViaW5mbykKIAkJZmlyc3QgPSBmYWxzZTsKIAl9CiAK KwlpZiAocHViaW5mby0+cHViZGRsKQorCXsKKwkJaWYgKCFmaXJzdCkKKwkJCWFwcGVuZFBRRXhw QnVmZmVyU3RyKHF1ZXJ5LCAiLCAiKTsKKworCQlhcHBlbmRQUUV4cEJ1ZmZlclN0cihxdWVyeSwg ImRkbCIpOworCQlmaXJzdCA9IGZhbHNlOworCX0KKwogCWFwcGVuZFBRRXhwQnVmZmVyU3RyKHF1 ZXJ5LCAiJyIpOwogCiAJaWYgKHB1YmluZm8tPnB1YnZpYXJvb3QpCmRpZmYgLS1naXQgYS9zcmMv YmluL3BnX2R1bXAvcGdfZHVtcC5oIGIvc3JjL2Jpbi9wZ19kdW1wL3BnX2R1bXAuaAppbmRleCAx ZDIxYzI5Li42OWI5NGFlIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX2R1bXAvcGdfZHVtcC5oCisr KyBiL3NyYy9iaW4vcGdfZHVtcC9wZ19kdW1wLmgKQEAgLTYyMCw2ICs2MjAsNyBAQCB0eXBlZGVm IHN0cnVjdCBfUHVibGljYXRpb25JbmZvCiAJYm9vbAkJcHViZGVsZXRlOwogCWJvb2wJCXB1YnRy dW5jYXRlOwogCWJvb2wJCXB1YnZpYXJvb3Q7CisJYm9vbAkJcHViZGRsOwogfSBQdWJsaWNhdGlv bkluZm87CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3dhbGR1bXAvcm1ncmRlc2MuYyBi L3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jCmluZGV4IDZiOGMxN2IuLjc5MmY0MzggMTAw NjQ0Ci0tLSBhL3NyYy9iaW4vcGdfd2FsZHVtcC9ybWdyZGVzYy5jCisrKyBiL3NyYy9iaW4vcGdf d2FsZHVtcC9ybWdyZGVzYy5jCkBAIC0yNyw2ICsyNyw3IEBACiAjaW5jbHVkZSAiY29tbWFuZHMv c2VxdWVuY2UuaCIKICNpbmNsdWRlICJjb21tYW5kcy90YWJsZXNwYWNlLmgiCiAjaW5jbHVkZSAi cmVwbGljYXRpb24vbWVzc2FnZS5oIgorI2luY2x1ZGUgInJlcGxpY2F0aW9uL2RkbG1lc3NhZ2Uu aCIKICNpbmNsdWRlICJyZXBsaWNhdGlvbi9vcmlnaW4uaCIKICNpbmNsdWRlICJybWdyZGVzYy5o IgogI2luY2x1ZGUgInN0b3JhZ2Uvc3RhbmRieWRlZnMuaCIKZGlmZiAtLWdpdCBhL3NyYy9iaW4v cHNxbC9kZXNjcmliZS5jIGIvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKaW5kZXggZDFhZTY5OS4u NzE3MTc2OCAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wc3FsL2Rlc2NyaWJlLmMKKysrIGIvc3JjL2Jp bi9wc3FsL2Rlc2NyaWJlLmMKQEAgLTYwNTAsNyArNjA1MCw3IEBAIGxpc3RQdWJsaWNhdGlvbnMo Y29uc3QgY2hhciAqcGF0dGVybikKIAlQUUV4cEJ1ZmZlckRhdGEgYnVmOwogCVBHcmVzdWx0ICAg KnJlczsKIAlwcmludFF1ZXJ5T3B0IG15b3B0ID0gcHNldC5wb3B0OwotCXN0YXRpYyBjb25zdCBi b29sIHRyYW5zbGF0ZV9jb2x1bW5zW10gPSB7ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZh bHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlfTsKKwlzdGF0aWMgY29uc3QgYm9vbCB0cmFuc2xhdGVf Y29sdW1uc1tdID0ge2ZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZh bHNlLCBmYWxzZSwgZmFsc2V9OwogCiAJaWYgKHBzZXQuc3ZlcnNpb24gPCAxMDAwMDApCiAJewpA QCAtNjA4NSw2ICs2MDg1LDEwIEBAIGxpc3RQdWJsaWNhdGlvbnMoY29uc3QgY2hhciAqcGF0dGVy bikKIAkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKIAkJCQkJCSAgIixcbiAgcHVidmlhcm9vdCBB UyBcIiVzXCIiLAogCQkJCQkJICBnZXR0ZXh0X25vb3AoIlZpYSByb290IikpOworCWlmIChwc2V0 LnN2ZXJzaW9uID49IDE0MDAwMCkKKwkJYXBwZW5kUFFFeHBCdWZmZXIoJmJ1ZiwKKwkJCQkJCSAg IixcbiAgcHViZGRsIEFTIFwiJXNcIiIsCisJCQkJCQkgIGdldHRleHRfbm9vcCgiRERMcyIpKTsK IAogCWFwcGVuZFBRRXhwQnVmZmVyU3RyKCZidWYsCiAJCQkJCQkgIlxuRlJPTSBwZ19jYXRhbG9n LnBnX3B1YmxpY2F0aW9uXG4iKTsKQEAgLTYxNzIsNiArNjE3Niw3IEBAIGRlc2NyaWJlUHVibGlj YXRpb25zKGNvbnN0IGNoYXIgKnBhdHRlcm4pCiAJUEdyZXN1bHQgICAqcmVzOwogCWJvb2wJCWhh c19wdWJ0cnVuY2F0ZTsKIAlib29sCQloYXNfcHVidmlhcm9vdDsKKwlib29sCQloYXNfcHViZGRs OwogCiAJUFFFeHBCdWZmZXJEYXRhIHRpdGxlOwogCXByaW50VGFibGVDb250ZW50IGNvbnQ7CkBA IC02MTg4LDYgKzYxOTMsNyBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpwYXR0 ZXJuKQogCiAJaGFzX3B1YnRydW5jYXRlID0gKHBzZXQuc3ZlcnNpb24gPj0gMTEwMDAwKTsKIAlo YXNfcHVidmlhcm9vdCA9IChwc2V0LnN2ZXJzaW9uID49IDEzMDAwMCk7CisJaGFzX3B1YmRkbCA9 ICAocHNldC5zdmVyc2lvbiA+PSAxNTAwMDApOwogCiAJaW5pdFBRRXhwQnVmZmVyKCZidWYpOwog CkBAIC02MjAxLDYgKzYyMDcsOSBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBjaGFyICpw YXR0ZXJuKQogCWlmIChoYXNfcHVidmlhcm9vdCkKIAkJYXBwZW5kUFFFeHBCdWZmZXJTdHIoJmJ1 ZiwKIAkJCQkJCQkgIiwgcHVidmlhcm9vdCIpOworCWlmIChoYXNfcHViZGRsKQorCQlhcHBlbmRQ UUV4cEJ1ZmZlclN0cigmYnVmLAorCQkJCQkJCSAiLCBwdWJkZGwiKTsKIAlhcHBlbmRQUUV4cEJ1 ZmZlclN0cigmYnVmLAogCQkJCQkJICJcbkZST00gcGdfY2F0YWxvZy5wZ19wdWJsaWNhdGlvblxu Iik7CiAKQEAgLTYyNDksNiArNjI1OCw4IEBAIGRlc2NyaWJlUHVibGljYXRpb25zKGNvbnN0IGNo YXIgKnBhdHRlcm4pCiAJCQluY29scysrOwogCQlpZiAoaGFzX3B1YnZpYXJvb3QpCiAJCQluY29s cysrOworCQlpZiAoaGFzX3B1YmRkbCkKKwkJCW5jb2xzKys7CiAKIAkJaW5pdFBRRXhwQnVmZmVy KCZ0aXRsZSk7CiAJCXByaW50ZlBRRXhwQnVmZmVyKCZ0aXRsZSwgXygiUHVibGljYXRpb24gJXMi KSwgcHVibmFtZSk7CkBAIC02MjYzLDYgKzYyNzQsOCBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhj b25zdCBjaGFyICpwYXR0ZXJuKQogCQkJcHJpbnRUYWJsZUFkZEhlYWRlcigmY29udCwgZ2V0dGV4 dF9ub29wKCJUcnVuY2F0ZXMiKSwgdHJ1ZSwgYWxpZ24pOwogCQlpZiAoaGFzX3B1YnZpYXJvb3Qp CiAJCQlwcmludFRhYmxlQWRkSGVhZGVyKCZjb250LCBnZXR0ZXh0X25vb3AoIlZpYSByb290Iiks IHRydWUsIGFsaWduKTsKKwkJaWYgKGhhc19wdWJkZGwpCisJCQlwcmludFRhYmxlQWRkSGVhZGVy KCZjb250LCBnZXR0ZXh0X25vb3AoIkRETHMiKSwgdHJ1ZSwgYWxpZ24pOwogCiAJCXByaW50VGFi bGVBZGRDZWxsKCZjb250LCBQUWdldHZhbHVlKHJlcywgaSwgMiksIGZhbHNlLCBmYWxzZSk7CiAJ CXByaW50VGFibGVBZGRDZWxsKCZjb250LCBQUWdldHZhbHVlKHJlcywgaSwgMyksIGZhbHNlLCBm YWxzZSk7CkBAIC02MjczLDYgKzYyODYsOCBAQCBkZXNjcmliZVB1YmxpY2F0aW9ucyhjb25zdCBj aGFyICpwYXR0ZXJuKQogCQkJcHJpbnRUYWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVz LCBpLCA3KSwgZmFsc2UsIGZhbHNlKTsKIAkJaWYgKGhhc19wdWJ2aWFyb290KQogCQkJcHJpbnRU YWJsZUFkZENlbGwoJmNvbnQsIFBRZ2V0dmFsdWUocmVzLCBpLCA4KSwgZmFsc2UsIGZhbHNlKTsK KwkJaWYgKGhhc19wdWJkZGwpCisJCQlwcmludFRhYmxlQWRkQ2VsbCgmY29udCwgUFFnZXR2YWx1 ZShyZXMsIGksIDkpLCBmYWxzZSwgZmFsc2UpOwogCiAJCWlmICghcHViYWxsdGFibGVzKQogCQl7 CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3Mvcm1ncmxpc3QuaCBiL3NyYy9pbmNsdWRl L2FjY2Vzcy9ybWdybGlzdC5oCmluZGV4IDlhNzQ3MjEuLjlkZTNiOGYgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9ybWdybGlzdC5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9ybWdy bGlzdC5oCkBAIC00NywzICs0Nyw0IEBAIFBHX1JNR1IoUk1fQ09NTUlUX1RTX0lELCAiQ29tbWl0 VHMiLCBjb21taXRfdHNfcmVkbywgY29tbWl0X3RzX2Rlc2MsIGNvbW1pdF90c19pCiBQR19STUdS KFJNX1JFUExPUklHSU5fSUQsICJSZXBsaWNhdGlvbk9yaWdpbiIsIHJlcGxvcmlnaW5fcmVkbywg cmVwbG9yaWdpbl9kZXNjLCByZXBsb3JpZ2luX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBOVUxMLCBO VUxMKQogUEdfUk1HUihSTV9HRU5FUklDX0lELCAiR2VuZXJpYyIsIGdlbmVyaWNfcmVkbywgZ2Vu ZXJpY19kZXNjLCBnZW5lcmljX2lkZW50aWZ5LCBOVUxMLCBOVUxMLCBnZW5lcmljX21hc2ssIE5V TEwpCiBQR19STUdSKFJNX0xPR0lDQUxNU0dfSUQsICJMb2dpY2FsTWVzc2FnZSIsIGxvZ2ljYWxt c2dfcmVkbywgbG9naWNhbG1zZ19kZXNjLCBsb2dpY2FsbXNnX2lkZW50aWZ5LCBOVUxMLCBOVUxM LCBOVUxMLCBsb2dpY2FsbXNnX2RlY29kZSkKK1BHX1JNR1IoUk1fTE9HSUNBTERETE1TR19JRCwg IkxvZ2ljYWxERExNZXNzYWdlIiwgbG9naWNhbGRkbG1zZ19yZWRvLCBsb2dpY2FsZGRsbXNnX2Rl c2MsIGxvZ2ljYWxkZGxtc2dfaWRlbnRpZnksIE5VTEwsIE5VTEwsIE5VTEwsIGxvZ2ljYWxkZGxt c2dfZGVjb2RlKQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBi L3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5kYXQKaW5kZXggOGFhNjM2Yy4uYmI5OGMxNyAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdAorKysgYi9zcmMvaW5j bHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0CkBAIC0xMTg5MCw0ICsxMTg5MCwxMyBAQAogeyBvaWQg PT4gJzQ2NDMnLCBkZXNjciA9PiAnanNvbiB0byBzdHJpbmcnLAogICBwcm9uYW1lID0+ICdkZGxf ZGVwYXJzZV9leHBhbmRfY29tbWFuZCcsIHByb3JldHR5cGUgPT4gJ3RleHQnLAogICBwcm9hcmd0 eXBlcyA9PiAndGV4dCcsIHByb3NyYyA9PiAnZGRsX2RlcGFyc2VfZXhwYW5kX2NvbW1hbmQnIH0s Cit7IG9pZCA9PiAnNDY0NCcsIGRlc2NyID0+ICd0cmlnZ2VyIGZvciBkZGwgY29tbWFuZCBkZXBh cnNlJywKKyAgcHJvbmFtZSA9PiAncHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9lbmQn LCBwcm9yZXR0eXBlID0+ICdldmVudF90cmlnZ2VyJywKKyAgcHJvYXJndHlwZXMgPT4gJycsIHBy b3NyYyA9PiAncHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9lbmQnIH0sCit7IG9pZCA9 PiAnNDY0NScsIGRlc2NyID0+ICd0cmlnZ2VyIGZvciBkZGwgY29tbWFuZCBkZXBhcnNlIHN0YXJ0 JywKKyAgcHJvbmFtZSA9PiAncHVibGljYXRpb25fZGVwYXJzZV9kZGxfY29tbWFuZF9zdGFydCcs IHByb3JldHR5cGUgPT4gJ2V2ZW50X3RyaWdnZXInLAorICBwcm9hcmd0eXBlcyA9PiAnJywgcHJv c3JjID0+ICdwdWJsaWNhdGlvbl9kZXBhcnNlX2RkbF9jb21tYW5kX3N0YXJ0JyB9LAoreyBvaWQg PT4gJzQ2NDYnLCBkZXNjciA9PiAndHJpZ2dlciBmb3IgZGRsIGNvbW1hbmQgZGVwYXJzZSB0YWJs ZSByZXdyaXRlJywKKyAgcHJvbmFtZSA9PiAncHVibGljYXRpb25fZGVwYXJzZV90YWJsZV9yZXdy aXRlJywgcHJvcmV0dHlwZSA9PiAnZXZlbnRfdHJpZ2dlcicsCisgIHByb2FyZ3R5cGVzID0+ICcn LCBwcm9zcmMgPT4gJ3B1YmxpY2F0aW9uX2RlcGFyc2VfdGFibGVfcmV3cml0ZScgfSwKIF0KZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaCBiL3NyYy9pbmNs dWRlL2NhdGFsb2cvcGdfcHVibGljYXRpb24uaAppbmRleCA0ODIwNWJhLi42MDZjMDA5IDEwMDY0 NAotLS0gYS9zcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3B1YmxpY2F0aW9uLmgKKysrIGIvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wdWJsaWNhdGlvbi5oCkBAIC01NCw2ICs1NCw5IEBAIENBVEFMT0co cGdfcHVibGljYXRpb24sNjEwNCxQdWJsaWNhdGlvblJlbGF0aW9uSWQpCiAKIAkvKiB0cnVlIGlm IHBhcnRpdGlvbiBjaGFuZ2VzIGFyZSBwdWJsaXNoZWQgdXNpbmcgcm9vdCBzY2hlbWEgKi8KIAli b29sCQlwdWJ2aWFyb290OworCisJLyogdHJ1ZSBpZiB0YWJsZSBjcmVhdGlvbnMgYXJlIHB1Ymxp c2hlZCAqLworCWJvb2wJCXB1YmRkbDsKIH0gRm9ybURhdGFfcGdfcHVibGljYXRpb247CiAKIC8q IC0tLS0tLS0tLS0tLS0tLS0KQEAgLTcyLDYgKzc1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUHVibGlj YXRpb25BY3Rpb25zCiAJYm9vbAkJcHVidXBkYXRlOwogCWJvb2wJCXB1YmRlbGV0ZTsKIAlib29s CQlwdWJ0cnVuY2F0ZTsKKwlib29sCQlwdWJkZGw7CiB9IFB1YmxpY2F0aW9uQWN0aW9uczsKIAog dHlwZWRlZiBzdHJ1Y3QgUHVibGljYXRpb25EZXNjCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9j b21tYW5kcy9ldmVudF90cmlnZ2VyLmggYi9zcmMvaW5jbHVkZS9jb21tYW5kcy9ldmVudF90cmln Z2VyLmgKaW5kZXggMTAwOTFjMy4uZmQyZWU3ZiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29t bWFuZHMvZXZlbnRfdHJpZ2dlci5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1hbmRzL2V2ZW50X3Ry aWdnZXIuaApAQCAtNzEsNyArNzEsOCBAQCBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJDb2xsZWN0 U2ltcGxlQ29tbWFuZChPYmplY3RBZGRyZXNzIGFkZHJlc3MsCiBleHRlcm4gdm9pZCBFdmVudFRy aWdnZXJBbHRlclRhYmxlU3RhcnQoTm9kZSAqcGFyc2V0cmVlKTsKIGV4dGVybiB2b2lkIEV2ZW50 VHJpZ2dlckFsdGVyVGFibGVSZWxpZChPaWQgb2JqZWN0SWQpOwogZXh0ZXJuIHZvaWQgRXZlbnRU cmlnZ2VyQ29sbGVjdEFsdGVyVGFibGVTdWJjbWQoTm9kZSAqc3ViY21kLAotCQkJCQkJCQkJCQkJ T2JqZWN0QWRkcmVzcyBhZGRyZXNzKTsKKwkJCQkJCQkJCQkJCU9iamVjdEFkZHJlc3MgYWRkcmVz cywKKwkJCQkJCQkJCQkJCWJvb2wgcmV3cml0ZSk7CiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJB bHRlclRhYmxlRW5kKHZvaWQpOwogCiBleHRlcm4gdm9pZCBFdmVudFRyaWdnZXJDb2xsZWN0R3Jh bnQoSW50ZXJuYWxHcmFudCAqaXN0bXQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGlj YXRpb24vZGRsbWVzc2FnZS5oIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vZGRsbWVzc2FnZS5o Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4ZGNhODYKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgKQEAgLTAsMCArMSw2 MCBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBkZGxtZXNzYWdlLmgKKyAqCSAgIEV4cG9ydHMg ZnJvbSByZXBsaWNhdGlvbi9sb2dpY2FsL2RkbG1lc3NhZ2UuYworICoKKyAqIENvcHlyaWdodCAo YykgMjAyMiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqCisgKiBzcmMv aW5jbHVkZS9yZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICov CisjaWZuZGVmIFBHX0xPR0lDQUxfRERMX01FU1NBR0VfSAorI2RlZmluZSBQR19MT0dJQ0FMX0RE TF9NRVNTQUdFX0gKKworI2luY2x1ZGUgImFjY2Vzcy94bG9nLmgiCisjaW5jbHVkZSAiYWNjZXNz L3hsb2dkZWZzLmgiCisjaW5jbHVkZSAiYWNjZXNzL3hsb2dyZWFkZXIuaCIKKyNpbmNsdWRlICJu b2Rlcy9ub2Rlcy5oIgorCisKKy8qCisgKiBTdXBwb3J0IGZvciBrZWVwaW5nIHRyYWNrIG9mIGRl cGFyc2VkIGNvbW1hbmRzLgorICovCit0eXBlZGVmIGVudW0gRGVwYXJzZWRDb21tYW5kVHlwZQor eworCURDVF9TaW1wbGVDbWQsCisJRENUX1RhYmxlRHJvcFN0YXJ0LAorCURDVF9UYWJsZURyb3BF bmQsCisJRENUX1RhYmxlQWx0ZXIsCisJRENUX09iamVjdENyZWF0ZSwKKwlEQ1RfT2JqZWN0RHJv cAorfSBEZXBhcnNlZENvbW1hbmRUeXBlOworCisvKgorICogR2VuZXJpYyBsb2dpY2FsIGRlY29k aW5nIERETCBtZXNzYWdlIHdhbCByZWNvcmQuCisgKi8KK3R5cGVkZWYgc3RydWN0IHhsX2xvZ2lj YWxfZGRsX21lc3NhZ2UKK3sKKwlPaWQJCQkJCQlkYklkOwkJCS8qIGRhdGFiYXNlIE9pZCBlbWl0 dGVkIGZyb20gKi8KKwlTaXplCQkJCQlwcmVmaXhfc2l6ZTsJLyogbGVuZ3RoIG9mIHByZWZpeCAq LworCU9pZAkJCQkJCXJlbGlkOwkJCS8qIGlkIG9mIHRoZSB0YWJsZSAqLworCURlcGFyc2VkQ29t bWFuZFR5cGUJCWNtZHR5cGU7CQkvKiB0eXBlIG9mIHNxbCBjb21tYW5kICovCisJU2l6ZQkJCQkJ bWVzc2FnZV9zaXplOwkgIC8qIHNpemUgb2YgdGhlIG1lc3NhZ2UgKi8KKworCS8qCisJICogcGF5 bG9hZCwgaW5jbHVkaW5nIG51bGwtdGVybWluYXRlZCBwcmVmaXggb2YgbGVuZ3RoIHByZWZpeF9z aXplCisJICovCisJY2hhcgkJbWVzc2FnZVtGTEVYSUJMRV9BUlJBWV9NRU1CRVJdOworfSB4bF9s b2dpY2FsX2RkbF9tZXNzYWdlOworCisjZGVmaW5lIFNpemVPZkxvZ2ljYWxERExNZXNzYWdlCShv ZmZzZXRvZih4bF9sb2dpY2FsX2RkbF9tZXNzYWdlLCBtZXNzYWdlKSkKKworZXh0ZXJuIFhMb2dS ZWNQdHIgTG9nTG9naWNhbERETE1lc3NhZ2UoY29uc3QgY2hhciAqcHJlZml4LCBPaWQgcmVsaWQs IERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKmRk bF9tZXNzYWdlLCBzaXplX3Qgc2l6ZSk7CisKKy8qIFJNR1IgQVBJKi8KKyNkZWZpbmUgWExPR19M T0dJQ0FMX0RETF9NRVNTQUdFCTB4MDAKK3ZvaWQJCWxvZ2ljYWxkZGxtc2dfcmVkbyhYTG9nUmVh ZGVyU3RhdGUgKnJlY29yZCk7Cit2b2lkCQlsb2dpY2FsZGRsbXNnX2Rlc2MoU3RyaW5nSW5mbyBi dWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKTsKK2NvbnN0IGNoYXIgKmxvZ2ljYWxkZGxtc2df aWRlbnRpZnkodWludDggaW5mbyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv cmVwbGljYXRpb24vZGVjb2RlLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUuaApp bmRleCA3NDFiZjY1Li40MjdhN2I5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9kZWNvZGUuaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9kZWNvZGUuaApAQCAtMjcs NiArMjcsNyBAQCBleHRlcm4gdm9pZCBoZWFwMl9kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4 dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOwogZXh0ZXJuIHZvaWQgeGFjdF9kZWNvZGUo TG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOwogZXh0 ZXJuIHZvaWQgc3RhbmRieV9kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9n UmVjb3JkQnVmZmVyICpidWYpOwogZXh0ZXJuIHZvaWQgbG9naWNhbG1zZ19kZWNvZGUoTG9naWNh bERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9nUmVjb3JkQnVmZmVyICpidWYpOworZXh0ZXJuIHZv aWQgbG9naWNhbGRkbG1zZ19kZWNvZGUoTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LCBYTG9n UmVjb3JkQnVmZmVyICpidWYpOwogCiBleHRlcm4gdm9pZCBMb2dpY2FsRGVjb2RpbmdQcm9jZXNz UmVjb3JkKExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkJCQkgWExvZ1JlYWRl clN0YXRlICpyZWNvcmQpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vbG9n aWNhbHByb3RvLmggYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8uaAppbmRl eCBhNzcxYWI4Li4yYWJjY2I4IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9s b2dpY2FscHJvdG8uaAorKysgYi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9sb2dpY2FscHJvdG8u aApAQCAtNjEsNiArNjEsNyBAQCB0eXBlZGVmIGVudW0gTG9naWNhbFJlcE1zZ1R5cGUKIAlMT0dJ Q0FMX1JFUF9NU0dfUkVMQVRJT04gPSAnUicsCiAJTE9HSUNBTF9SRVBfTVNHX1RZUEUgPSAnWScs CiAJTE9HSUNBTF9SRVBfTVNHX01FU1NBR0UgPSAnTScsCisJTE9HSUNBTF9SRVBfTVNHX0RETE1F U1NBR0UgPSAnTCcsCiAJTE9HSUNBTF9SRVBfTVNHX0JFR0lOX1BSRVBBUkUgPSAnYicsCiAJTE9H SUNBTF9SRVBfTVNHX1BSRVBBUkUgPSAnUCcsCiAJTE9HSUNBTF9SRVBfTVNHX0NPTU1JVF9QUkVQ QVJFRCA9ICdLJywKQEAgLTIyOSw3ICsyMzAsMTEgQEAgZXh0ZXJuIHZvaWQgbG9naWNhbHJlcF93 cml0ZV90cnVuY2F0ZShTdHJpbmdJbmZvIG91dCwgVHJhbnNhY3Rpb25JZCB4aWQsCiBleHRlcm4g TGlzdCAqbG9naWNhbHJlcF9yZWFkX3RydW5jYXRlKFN0cmluZ0luZm8gaW4sCiAJCQkJCQkJCQkg IGJvb2wgKmNhc2NhZGUsIGJvb2wgKnJlc3RhcnRfc2Vxcyk7CiBleHRlcm4gdm9pZCBsb2dpY2Fs cmVwX3dyaXRlX21lc3NhZ2UoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9n UmVjUHRyIGxzbiwKLQkJCQkJCQkJCSBib29sIHRyYW5zYWN0aW9uYWwsIGNvbnN0IGNoYXIgKnBy ZWZpeCwgU2l6ZSBzeiwgY29uc3QgY2hhciAqbWVzc2FnZSk7CisJCQkJCQkJCQkgYm9vbCB0cmFu c2FjdGlvbmFsLCBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCQkgU2l6ZSBzeiwgY29uc3Qg Y2hhciAqbWVzc2FnZSk7CitleHRlcm4gdm9pZCBsb2dpY2FscmVwX3dyaXRlX2RkbG1lc3NhZ2Uo U3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlkLCBYTG9nUmVjUHRyIGxzbiwKKwkJCQkJ CQkJCQljb25zdCBjaGFyICpwcmVmaXgsIFNpemUgc3osIGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwor ZXh0ZXJuIGNoYXIgKmxvZ2ljYWxyZXBfcmVhZF9kZGxtZXNzYWdlKFN0cmluZ0luZm8gaW4sIFhM b2dSZWNQdHIgKmxzbiwgY29uc3QgY2hhciAqKnByZWZpeCwgU2l6ZSAqc3opOwogZXh0ZXJuIHZv aWQgbG9naWNhbHJlcF93cml0ZV9yZWwoU3RyaW5nSW5mbyBvdXQsIFRyYW5zYWN0aW9uSWQgeGlk LAogCQkJCQkJCQkgUmVsYXRpb24gcmVsLCBCaXRtYXBzZXQgKmNvbHVtbnMpOwogZXh0ZXJuIExv Z2ljYWxSZXBSZWxhdGlvbiAqbG9naWNhbHJlcF9yZWFkX3JlbChTdHJpbmdJbmZvIGluKTsKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaCBiL3NyYy9p bmNsdWRlL3JlcGxpY2F0aW9uL291dHB1dF9wbHVnaW4uaAppbmRleCA1MzlkYzhlLi45MzNkMjk3 IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9vdXRwdXRfcGx1Z2luLmgKKysr IGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vb3V0cHV0X3BsdWdpbi5oCkBAIC04OSw2ICs4OSwx OCBAQCB0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2RlTWVzc2FnZUNCKSAoc3RydWN0IExvZ2lj YWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKIAkJCQkJCQkJCQljb25zdCBjaGFyICptZXNzYWdlKTsK IAogLyoKKyAqIENhbGxlZCBmb3IgdGhlIGxvZ2ljYWwgZGVjb2RpbmcgRERMIG1lc3NhZ2VzLgor ICovCit0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2RlRERMTWVzc2FnZUNCKSAoc3RydWN0IExv Z2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKKwkJCQkJCQkJCQkgICBSZW9yZGVyQnVmZmVyVFhO ICp0eG4sCisJCQkJCQkJCQkJICAgWExvZ1JlY1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkg ICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJCQkJCQkJICAgT2lkIHJlbGlkLAorCQkJCQkJCQkJ CSAgIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSwKKwkJCQkJCQkJCQkgICBTaXplIG1lc3Nh Z2Vfc2l6ZSwKKwkJCQkJCQkJCQkgICBjb25zdCBjaGFyICptZXNzYWdlKTsKKworLyoKICAqIEZp bHRlciBjaGFuZ2VzIGJ5IG9yaWdpbi4KICAqLwogdHlwZWRlZiBib29sICgqTG9naWNhbERlY29k ZUZpbHRlckJ5T3JpZ2luQ0IpIChzdHJ1Y3QgTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LApA QCAtMjAwLDYgKzIxMiwxOSBAQCB0eXBlZGVmIHZvaWQgKCpMb2dpY2FsRGVjb2RlU3RyZWFtTWVz c2FnZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eAogCQkJCQkJCQkJCQkg IGNvbnN0IGNoYXIgKm1lc3NhZ2UpOwogCiAvKgorICogQ2FsbGJhY2sgZm9yIHN0cmVhbWluZyBs b2dpY2FsIGRlY29kaW5nIERETCBtZXNzYWdlcyBmcm9tIGluLXByb2dyZXNzCisgKiB0cmFuc2Fj dGlvbnMuCisgKi8KK3R5cGVkZWYgdm9pZCAoKkxvZ2ljYWxEZWNvZGVTdHJlYW1ERExNZXNzYWdl Q0IpIChzdHJ1Y3QgTG9naWNhbERlY29kaW5nQ29udGV4dCAqY3R4LAorCQkJCQkJCQkJCQkJIFJl b3JkZXJCdWZmZXJUWE4gKnR4biwKKwkJCQkJCQkJCQkJCSBYTG9nUmVjUHRyIG1lc3NhZ2VfbHNu LAorCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKnByZWZpeCwKKwkJCQkJCQkJCQkJCSBPaWQgcmVs aWQsCisJCQkJCQkJCQkJCQkgRGVwYXJzZWRDb21tYW5kVHlwZSBjbWR0eXBlLAorCQkJCQkJCQkJ CQkJIFNpemUgbWVzc2FnZV9zaXplLAorCQkJCQkJCQkJCQkJIGNvbnN0IGNoYXIgKm1lc3NhZ2Up OworCisvKgogICogQ2FsbGJhY2sgZm9yIHN0cmVhbWluZyB0cnVuY2F0ZXMgZnJvbSBpbi1wcm9n cmVzcyB0cmFuc2FjdGlvbnMuCiAgKi8KIHR5cGVkZWYgdm9pZCAoKkxvZ2ljYWxEZWNvZGVTdHJl YW1UcnVuY2F0ZUNCKSAoc3RydWN0IExvZ2ljYWxEZWNvZGluZ0NvbnRleHQgKmN0eCwKQEAgLTIx OSw2ICsyNDQsNyBAQCB0eXBlZGVmIHN0cnVjdCBPdXRwdXRQbHVnaW5DYWxsYmFja3MKIAlMb2dp Y2FsRGVjb2RlVHJ1bmNhdGVDQiB0cnVuY2F0ZV9jYjsKIAlMb2dpY2FsRGVjb2RlQ29tbWl0Q0Ig Y29tbWl0X2NiOwogCUxvZ2ljYWxEZWNvZGVNZXNzYWdlQ0IgbWVzc2FnZV9jYjsKKwlMb2dpY2Fs RGVjb2RlRERMTWVzc2FnZUNCIGRkbG1lc3NhZ2VfY2I7CiAJTG9naWNhbERlY29kZUZpbHRlckJ5 T3JpZ2luQ0IgZmlsdGVyX2J5X29yaWdpbl9jYjsKIAlMb2dpY2FsRGVjb2RlU2h1dGRvd25DQiBz aHV0ZG93bl9jYjsKIApAQCAtMjM3LDYgKzI2Myw3IEBAIHR5cGVkZWYgc3RydWN0IE91dHB1dFBs dWdpbkNhbGxiYWNrcwogCUxvZ2ljYWxEZWNvZGVTdHJlYW1Db21taXRDQiBzdHJlYW1fY29tbWl0 X2NiOwogCUxvZ2ljYWxEZWNvZGVTdHJlYW1DaGFuZ2VDQiBzdHJlYW1fY2hhbmdlX2NiOwogCUxv Z2ljYWxEZWNvZGVTdHJlYW1NZXNzYWdlQ0Igc3RyZWFtX21lc3NhZ2VfY2I7CisJTG9naWNhbERl Y29kZVN0cmVhbURETE1lc3NhZ2VDQiBzdHJlYW1fZGRsbWVzc2FnZV9jYjsKIAlMb2dpY2FsRGVj b2RlU3RyZWFtVHJ1bmNhdGVDQiBzdHJlYW1fdHJ1bmNhdGVfY2I7CiB9IE91dHB1dFBsdWdpbkNh bGxiYWNrczsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQu aCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Bnb3V0cHV0LmgKaW5kZXggZWFmZWRkNi4uOGVi Y2MxMiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcGdvdXRwdXQuaAorKysg Yi9zcmMvaW5jbHVkZS9yZXBsaWNhdGlvbi9wZ291dHB1dC5oCkBAIC0yNSw2ICsyNSw3IEBAIHR5 cGVkZWYgc3RydWN0IFBHT3V0cHV0RGF0YQogCXVpbnQzMgkJcHJvdG9jb2xfdmVyc2lvbjsKIAlM aXN0CSAgICpwdWJsaWNhdGlvbl9uYW1lczsKIAlMaXN0CSAgICpwdWJsaWNhdGlvbnM7CisJTGlz dAkgICAqZGVsZXRlZF9yZWxpZHM7CiAJYm9vbAkJYmluYXJ5OwogCWJvb2wJCXN0cmVhbWluZzsK IAlib29sCQltZXNzYWdlczsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jl b3JkZXJidWZmZXIuaCBiL3NyYy9pbmNsdWRlL3JlcGxpY2F0aW9uL3Jlb3JkZXJidWZmZXIuaApp bmRleCA0YTAxZjg3Li5kZTU4MDM1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9yZXBsaWNhdGlv bi9yZW9yZGVyYnVmZmVyLmgKKysrIGIvc3JjL2luY2x1ZGUvcmVwbGljYXRpb24vcmVvcmRlcmJ1 ZmZlci5oCkBAIC0xMSw2ICsxMSw4IEBACiAKICNpbmNsdWRlICJhY2Nlc3MvaHR1cF9kZXRhaWxz LmgiCiAjaW5jbHVkZSAibGliL2lsaXN0LmgiCisjaW5jbHVkZSAibm9kZXMvbm9kZXMuaCIKKyNp bmNsdWRlICJyZXBsaWNhdGlvbi9kZGxtZXNzYWdlLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9zaW52 YWwuaCIKICNpbmNsdWRlICJ1dGlscy9oc2VhcmNoLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsY2Fj aGUuaCIKQEAgLTU2LDYgKzU4LDcgQEAgdHlwZWRlZiBlbnVtIFJlb3JkZXJCdWZmZXJDaGFuZ2VU eXBlCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOU0VSVCwKIAlSRU9SREVSX0JVRkZFUl9DSEFO R0VfVVBEQVRFLAogCVJFT1JERVJfQlVGRkVSX0NIQU5HRV9ERUxFVEUsCisJUkVPUkRFUl9CVUZG RVJfQ0hBTkdFX0RETE1FU1NBR0UsCiAJUkVPUkRFUl9CVUZGRVJfQ0hBTkdFX01FU1NBR0UsCiAJ UkVPUkRFUl9CVUZGRVJfQ0hBTkdFX0lOVkFMSURBVElPTiwKIAlSRU9SREVSX0JVRkZFUl9DSEFO R0VfSU5URVJOQUxfU05BUFNIT1QsCkBAIC0xMzAsNiArMTMzLDE2IEBAIHR5cGVkZWYgc3RydWN0 IFJlb3JkZXJCdWZmZXJDaGFuZ2UKIAkJCWNoYXIJICAgKm1lc3NhZ2U7CiAJCX0JCQltc2c7CiAK KwkJLyogRERMIE1lc3NhZ2UuICovCisJCXN0cnVjdAorCQl7CisJCQljaGFyCSAgICpwcmVmaXg7 CisJCQlTaXplCQltZXNzYWdlX3NpemU7CisJCQljaGFyCSAgICptZXNzYWdlOworCQkJT2lkCQkJ cmVsaWQ7CisJCQlEZXBhcnNlZENvbW1hbmRUeXBlCWNtZHR5cGU7CisJCX0JCQlkZGxtc2c7CisK IAkJLyogTmV3IHNuYXBzaG90LCBzZXQgd2hlbiBhY3Rpb24gPT0gKl9JTlRFUk5BTF9TTkFQU0hP VCAqLwogCQlTbmFwc2hvdAlzbmFwc2hvdDsKIApAQCAtNDMwLDYgKzQ0MywxNiBAQCB0eXBlZGVm IHZvaWQgKCpSZW9yZGVyQnVmZmVyTWVzc2FnZUNCKSAoUmVvcmRlckJ1ZmZlciAqcmIsCiAJCQkJ CQkJCQkJY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LAogCQkJCQkJCQkJCWNvbnN0IGNoYXIg Km1lc3NhZ2UpOwogCisvKiBEREwgbWVzc2FnZSBjYWxsYmFjayBzaWduYXR1cmUgKi8KK3R5cGVk ZWYgdm9pZCAoKlJlb3JkZXJCdWZmZXJERExNZXNzYWdlQ0IpIChSZW9yZGVyQnVmZmVyICpyYiwK KwkJCQkJCQkJCQkgICBSZW9yZGVyQnVmZmVyVFhOICp0eG4sCisJCQkJCQkJCQkJICAgWExvZ1Jl Y1B0ciBtZXNzYWdlX2xzbiwKKwkJCQkJCQkJCQkgICBjb25zdCBjaGFyICpwcmVmaXgsCisJCQkJ CQkJCQkJICAgT2lkIHJlbGlkLAorCQkJCQkJCQkJCSAgIERlcGFyc2VkQ29tbWFuZFR5cGUgY21k dHlwZSwKKwkJCQkJCQkJCQkgICBTaXplIHN6LAorCQkJCQkJCQkJCSAgIGNvbnN0IGNoYXIgKm1l c3NhZ2UpOworCiAvKiBiZWdpbiBwcmVwYXJlIGNhbGxiYWNrIHNpZ25hdHVyZSAqLwogdHlwZWRl ZiB2b2lkICgqUmVvcmRlckJ1ZmZlckJlZ2luUHJlcGFyZUNCKSAoUmVvcmRlckJ1ZmZlciAqcmIs CiAJCQkJCQkJCQkJCSBSZW9yZGVyQnVmZmVyVFhOICp0eG4pOwpAQCAtNDk2LDYgKzUxOSwxNyBA QCB0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyU3RyZWFtTWVzc2FnZUNCKSAoCiAJCQkJCQkJ CQkJCSAgY29uc3QgY2hhciAqcHJlZml4LCBTaXplIHN6LAogCQkJCQkJCQkJCQkgIGNvbnN0IGNo YXIgKm1lc3NhZ2UpOwogCisvKiBzdHJlYW0gRERMIG1lc3NhZ2UgY2FsbGJhY2sgc2lnbmF0dXJl ICovCit0eXBlZGVmIHZvaWQgKCpSZW9yZGVyQnVmZmVyU3RyZWFtRERMTWVzc2FnZUNCKSAoCisJ CQkJCQkJCQkJCQkgUmVvcmRlckJ1ZmZlciAqcmIsCisJCQkJCQkJCQkJCQkgUmVvcmRlckJ1ZmZl clRYTiAqdHhuLAorCQkJCQkJCQkJCQkJIFhMb2dSZWNQdHIgbWVzc2FnZV9sc24sCisJCQkJCQkJ CQkJCQkgY29uc3QgY2hhciAqcHJlZml4LAorCQkJCQkJCQkJCQkJIE9pZCByZWxpZCwKKwkJCQkJ CQkJCQkJCSBEZXBhcnNlZENvbW1hbmRUeXBlIGNtZHR5cGUsCisJCQkJCQkJCQkJCQkgU2l6ZSBz eiwKKwkJCQkJCQkJCQkJCSBjb25zdCBjaGFyICptZXNzYWdlKTsKKwogLyogc3RyZWFtIHRydW5j YXRlIGNhbGxiYWNrIHNpZ25hdHVyZSAqLwogdHlwZWRlZiB2b2lkICgqUmVvcmRlckJ1ZmZlclN0 cmVhbVRydW5jYXRlQ0IpICgKIAkJCQkJCQkJCQkJICAgUmVvcmRlckJ1ZmZlciAqcmIsCkBAIC01 NDEsNiArNTc1LDcgQEAgc3RydWN0IFJlb3JkZXJCdWZmZXIKIAlSZW9yZGVyQnVmZmVyQXBwbHlU cnVuY2F0ZUNCIGFwcGx5X3RydW5jYXRlOwogCVJlb3JkZXJCdWZmZXJDb21taXRDQiBjb21taXQ7 CiAJUmVvcmRlckJ1ZmZlck1lc3NhZ2VDQiBtZXNzYWdlOworCVJlb3JkZXJCdWZmZXJERExNZXNz YWdlQ0IgZGRsbWVzc2FnZTsKIAogCS8qCiAJICogQ2FsbGJhY2tzIHRvIGJlIGNhbGxlZCB3aGVu IHN0cmVhbWluZyBhIHRyYW5zYWN0aW9uIGF0IHByZXBhcmUgdGltZS4KQEAgLTU2MCw2ICs1OTUs NyBAQCBzdHJ1Y3QgUmVvcmRlckJ1ZmZlcgogCVJlb3JkZXJCdWZmZXJTdHJlYW1Db21taXRDQiBz dHJlYW1fY29tbWl0OwogCVJlb3JkZXJCdWZmZXJTdHJlYW1DaGFuZ2VDQiBzdHJlYW1fY2hhbmdl OwogCVJlb3JkZXJCdWZmZXJTdHJlYW1NZXNzYWdlQ0Igc3RyZWFtX21lc3NhZ2U7CisJUmVvcmRl ckJ1ZmZlclN0cmVhbURETE1lc3NhZ2VDQiBzdHJlYW1fZGRsbWVzc2FnZTsKIAlSZW9yZGVyQnVm ZmVyU3RyZWFtVHJ1bmNhdGVDQiBzdHJlYW1fdHJ1bmNhdGU7CiAKIAkvKgpAQCAtNjM1LDYgKzY3 MSw5IEBAIGV4dGVybiB2b2lkIFJlb3JkZXJCdWZmZXJRdWV1ZUNoYW5nZShSZW9yZGVyQnVmZmVy ICosIFRyYW5zYWN0aW9uSWQsCiBleHRlcm4gdm9pZCBSZW9yZGVyQnVmZmVyUXVldWVNZXNzYWdl KFJlb3JkZXJCdWZmZXIgKiwgVHJhbnNhY3Rpb25JZCwgU25hcHNob3Qgc25hcHNob3QsIFhMb2dS ZWNQdHIgbHNuLAogCQkJCQkJCQkJICBib29sIHRyYW5zYWN0aW9uYWwsIGNvbnN0IGNoYXIgKnBy ZWZpeCwKIAkJCQkJCQkJCSAgU2l6ZSBtZXNzYWdlX3NpemUsIGNvbnN0IGNoYXIgKm1lc3NhZ2Up OworZXh0ZXJuIHZvaWQgUmVvcmRlckJ1ZmZlclF1ZXVlRERMTWVzc2FnZShSZW9yZGVyQnVmZmVy ICosIFRyYW5zYWN0aW9uSWQsIFhMb2dSZWNQdHIgbHNuLAorCQkJCQkJCQkJCSBjb25zdCBjaGFy ICpwcmVmaXgsIFNpemUgbWVzc2FnZV9zaXplLAorCQkJCQkJCQkJCSBjb25zdCBjaGFyICptZXNz YWdlLCBPaWQgcmVsaWQsIERlcGFyc2VkQ29tbWFuZFR5cGUgY21kdHlwZSk7CiBleHRlcm4gdm9p ZCBSZW9yZGVyQnVmZmVyQ29tbWl0KFJlb3JkZXJCdWZmZXIgKiwgVHJhbnNhY3Rpb25JZCwKIAkJ CQkJCQkJWExvZ1JlY1B0ciBjb21taXRfbHNuLCBYTG9nUmVjUHRyIGVuZF9sc24sCiAJCQkJCQkJ CVRpbWVzdGFtcFR6IGNvbW1pdF90aW1lLCBSZXBPcmlnaW5JZCBvcmlnaW5faWQsIFhMb2dSZWNQ dHIgb3JpZ2luX2xzbik7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Bz cWwub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wc3FsLm91dAppbmRleCA2MGFjYmQx Li5kNTM0Y2JmIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BzcWwub3V0 CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHNxbC5vdXQKQEAgLTU5NjksOSArNTk2 OSw5IEBAIExpc3Qgb2Ygc2NoZW1hcwogKDAgcm93cykKIAogXGRScCAibm8uc3VjaC5wdWJsaWNh dGlvbiIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25z Ci0gTmFtZSB8IE93bmVyIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCisgTmFtZSB8 IE93bmVyIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLSstLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQog KDAgcm93cykKIAogXGRScyAibm8uc3VjaC5zdWJzY3JpcHRpb24iCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3B1YmxpY2F0aW9uLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv ZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CmluZGV4IDI3NGIzN2QuLjA5YjE0ZTAgMTAwNjQ0Ci0t LSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CisrKyBiL3NyYy90 ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcHVibGljYXRpb24ub3V0CkBAIC0zMCwyMCArMzAsMjAgQEAg RVJST1I6ICBjb25mbGljdGluZyBvciByZWR1bmRhbnQgb3B0aW9ucwogTElORSAxOiAuLi51Yl94 eHggV0lUSCAocHVibGlzaF92aWFfcGFydGl0aW9uX3Jvb3QgPSAndHJ1ZScsIHB1Ymxpc2hfdmku Li4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBeCiBcZFJwCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKLSAgICAgICAgTmFtZSAgICAgICAgfCAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHRlc3RwaWJfaW5zX3RydW5jdCB8IHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYg ICAgICAgfCBmICAgICAgICAgfCBmCi0gdGVzdHB1Yl9kZWZhdWx0ICAgIHwgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IGYgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8 IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgTGlzdCBvZiBwdWJsaWNhdGlvbnMKKyAgICAgICAgTmFtZSAgICAgICAgfCAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgdGVzdHBpYl9p bnNfdHJ1bmN0IHwgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgorIHRlc3Rw dWJfZGVmYXVsdCAgICB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCBm ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKICgy IHJvd3MpCiAKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZGVmYXVsdCBTRVQgKHB1Ymxpc2gg PSAnaW5zZXJ0LCB1cGRhdGUsIGRlbGV0ZScpOwogXGRScAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCi0gICAgICAgIE5h bWUgICAgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSB0ZXN0cGli X2luc190cnVuY3QgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgotIHRlc3RwdWJfZGVmYXVs dCAgICB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25zCisgICAgICAg IE5hbWUgICAgICAgIHwgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IElu c2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ky0tLS0tLQorIHRlc3RwaWJfaW5zX3RydW5jdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBm ICAgICAgICB8IGYKKyB0ZXN0cHViX2RlZmF1bHQgICAgfCByZWdyZXNzX3B1YmxpY2F0aW9uX3Vz ZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAg IHwgZiAgICAgICAgfCBmCiAoMiByb3dzKQogCiAtLS0gYWRkaW5nIHRhYmxlcwpAQCAtODcsMTAg Kzg3LDEwIEBAIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiAtLSBzaG91bGQgYmUgYWJsZSB0 byBhZGQgc2NoZW1hIHRvICdGT1IgVEFCTEUnIHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNBVElP TiB0ZXN0cHViX2ZvcnRhYmxlIEFERCBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDsKIFxk UnArIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1Yl9mb3J0YWJsZQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Ymxp Yy50ZXN0cHViX3RibDEiCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgpAQCAtOTksMjAgKzk5LDIwIEBA IFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSBzaG91bGQgYmUgYWJsZSB0byBkcm9wIHNjaGVtYSBm cm9tICdGT1IgVEFCTEUnIHB1YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2Zv cnRhYmxlIERST1AgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3Q7CiBcZFJwKyB0ZXN0cHVi X2ZvcnRhYmxlCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRl c3RwdWJfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWJfZm9ydGFibGUKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90 YmwxIgogCiAtLSBzaG91bGQgYmUgYWJsZSB0byBzZXQgc2NoZW1hIHRvICdGT1IgVEFCTEUnIHB1 YmxpY2F0aW9uCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlIFNFVCBBTEwgVEFC TEVTIElOIFNDSEVNQSBwdWJfdGVzdDsKIFxkUnArIHRlc3RwdWJfZm9ydGFibGUKLSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQotICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQorICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAg ICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdCIKIApAQCAtMTM0LDEw ICsxMzQsMTAgQEAgRVJST1I6ICByZWxhdGlvbiAidGVzdHB1Yl9ub3BrIiBpcyBub3QgcGFydCBv ZiB0aGUgcHVibGljYXRpb24KIC0tIHNob3VsZCBiZSBhYmxlIHRvIHNldCB0YWJsZSB0byBzY2hl bWEgcHVibGljYXRpb24KIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1hIFNFVCBU QUJMRSBwdWJfdGVzdC50ZXN0cHViX25vcGs7CiBcZFJwKyB0ZXN0cHViX2ZvcnNjaGVtYQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yc2NoZW1h Ci0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRh dGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnNjaGVtYQor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwg ZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0LnRlc3RwdWJfbm9wayIKIApAQCAt MTU5LDEwICsxNTksMTAgQEAgUHVibGljYXRpb25zOgogICAgICJ0ZXN0cHViX2ZvcmFsbHRhYmxl cyIKIAogXGRScCsgdGVzdHB1Yl9mb3JhbGx0YWJsZXMKLSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9yYWxsdGFibGVzCi0gICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0K LSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCB0ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JhbGx0YWJsZXMKKyAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgdCAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogKDEg cm93KQogCiBEUk9QIFRBQkxFIHRlc3RwdWJfdGJsMjsKQEAgLTE3NCwxOSArMTc0LDE5IEBAIENS RUFURSBQVUJMSUNBVElPTiB0ZXN0cHViMyBGT1IgVEFCTEUgdGVzdHB1Yl90YmwzOwogQ1JFQVRF IFBVQkxJQ0FUSU9OIHRlc3RwdWI0IEZPUiBUQUJMRSBPTkxZIHRlc3RwdWJfdGJsMzsKIFJFU0VU IGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViMwotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjMKLSAgICAgICAgICBPd25lciAg ICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1 bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQot IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMworICAgICAgICAgIE93bmVyICAgICAgICAg ICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMg fCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSst LS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAg ICAgInB1YmxpYy50ZXN0cHViX3RibDMiCiAgICAgInB1YmxpYy50ZXN0cHViX3RibDNhIgogCiBc ZFJwKyB0ZXN0cHViNAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjQKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNl ciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAg fCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViNAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3RibDMi CiAKQEAgLTIwNywxMCArMjA3LDEwIEBAIFVQREFURSB0ZXN0cHViX3BhcnRlZDEgU0VUIGEgPSAx OwogLS0gb25seSBwYXJlbnQgaXMgbGlzdGVkIGFzIGJlaW5nIGluIHB1YmxpY2F0aW9uLCBub3Qg dGhlIHBhcnRpdGlvbgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1Yl9mb3JwYXJ0ZWQgQUREIFRB QkxFIHRlc3RwdWJfcGFydGVkOwogXGRScCsgdGVzdHB1Yl9mb3JwYXJ0ZWQKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnBhcnRlZAotICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3JwYXJ0ZWQKKyAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAg IHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl9wYXJ0ZWQiCiAKQEAgLTIyMywxMCAr MjIzLDEwIEBAIEFMVEVSIFRBQkxFIHRlc3RwdWJfcGFydGVkIERFVEFDSCBQQVJUSVRJT04gdGVz dHB1Yl9wYXJ0ZWQxOwogVVBEQVRFIHRlc3RwdWJfcGFydGVkMSBTRVQgYSA9IDE7CiBBTFRFUiBQ VUJMSUNBVElPTiB0ZXN0cHViX2ZvcnBhcnRlZCBTRVQgKHB1Ymxpc2hfdmlhX3BhcnRpdGlvbl9y b290ID0gdHJ1ZSk7CiBcZFJwKyB0ZXN0cHViX2ZvcnBhcnRlZAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ycGFydGVkCi0gICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgdAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnBhcnRlZAorICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgdCAgICAgICAgfCBmCiBU YWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3BhcnRlZCIKIApAQCAtMjU1LDEwICsyNTUsMTAg QEAgU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOwogQ1JFQVRFIFBVQkxJQ0FUSU9O IHRlc3RwdWI1IEZPUiBUQUJMRSB0ZXN0cHViX3JmX3RibDEsIHRlc3RwdWJfcmZfdGJsMiBXSEVS RSAoYyA8PiAndGVzdCcgQU5EIGQgPCA1KSBXSVRIIChwdWJsaXNoID0gJ2luc2VydCcpOwogUkVT RVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnArIHRlc3RwdWI1Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQotICAgICAgICAgIE93bmVy ICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBU cnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ci0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAg ICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1CisgICAgICAgICAgT3duZXIgICAgICAg ICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRl cyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0t Ky0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoK ICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJs MiIgV0hFUkUgKChjIDw+ICd0ZXN0Jzo6dGV4dCkgQU5EIChkIDwgNSkpCkBAIC0yNzEsMTAgKzI3 MSwxMCBAQCBUYWJsZXM6CiAKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWI1IEFERCBUQUJMRSB0 ZXN0cHViX3JmX3RibDMgV0hFUkUgKGUgPiAxMDAwIEFORCBlIDwgMjAwMCk7CiBcZFJwKyB0ZXN0 cHViNQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVz dHB1YjUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAg ICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQor ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIg fCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAgIHwgZiAgICAgICAgIHwg ZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1YmxpYy50ZXN0cHViX3JmX3RibDEiCiAgICAg InB1YmxpYy50ZXN0cHViX3JmX3RibDIiIFdIRVJFICgoYyA8PiAndGVzdCc6OnRleHQpIEFORCAo ZCA8IDUpKQpAQCAtMjkwLDEwICsyOTAsMTAgQEAgUHVibGljYXRpb25zOgogCiBBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViNSBEUk9QIFRBQkxFIHRlc3RwdWJfcmZfdGJsMjsKIFxkUnArIHRlc3Rw dWI1Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0 cHViNQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAg ICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1Cisg ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBm ICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAi cHVibGljLnRlc3RwdWJfcmZfdGJsMyIgV0hFUkUgKChlID4gMTAwMCkgQU5EIChlIDwgMjAwMCkp CkBAIC0zMDEsMTAgKzMwMSwxMCBAQCBUYWJsZXM6CiAtLSByZW1vdmUgdGVzdHB1Yl9yZl90Ymwx IGFuZCBhZGQgdGVzdHB1Yl9yZl90YmwzIGFnYWluIChhbm90aGVyIFdIRVJFIGV4cHJlc3Npb24p CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViNSBTRVQgVEFCTEUgdGVzdHB1Yl9yZl90YmwzIFdI RVJFIChlID4gMzAwIEFORCBlIDwgNTAwKTsKIFxkUnArIHRlc3RwdWI1Ci0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViNQotICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBm ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI1CisgICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAg ICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxl czoKICAgICAicHVibGljLnRlc3RwdWJfcmZfdGJsMyIgV0hFUkUgKChlID4gMzAwKSBBTkQgKGUg PCA1MDApKQogCkBAIC0zMzcsMTAgKzMzNywxMCBAQCBTRVQgY2xpZW50X21pbl9tZXNzYWdlcyA9 ICdFUlJPUic7CiBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1Yl9zeW50YXgxIEZPUiBUQUJMRSB0 ZXN0cHViX3JmX3RibDEsIE9OTFkgdGVzdHB1Yl9yZl90YmwzIFdIRVJFIChlIDwgOTk5KSBXSVRI IChwdWJsaXNoID0gJ2luc2VydCcpOwogUkVTRVQgY2xpZW50X21pbl9tZXNzYWdlczsKIFxkUnAr IHRlc3RwdWJfc3ludGF4MQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViX3N5bnRheDEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICB8IGYgICAgICAgfCBmICAg ICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViX3N5bnRheDEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBE RExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAg ICAgICB8IGYgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVz dHB1Yl9yZl90YmwxIgogICAgICJwdWJsaWMudGVzdHB1Yl9yZl90YmwzIiBXSEVSRSAoZSA8IDk5 OSkKQEAgLTM1MCwxMCArMzUwLDEwIEBAIFNFVCBjbGllbnRfbWluX21lc3NhZ2VzID0gJ0VSUk9S JzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX3N5bnRheDIgRk9SIFRBQkxFIHRlc3RwdWJf cmZfdGJsMSwgdGVzdHB1Yl9yZl9zY2hlbWExLnRlc3RwdWJfcmZfdGJsNSBXSEVSRSAoaCA8IDk5 OSkgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQnKTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7 CiBcZFJwKyB0ZXN0cHViX3N5bnRheDIKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg UHVibGljYXRpb24gdGVzdHB1Yl9zeW50YXgyCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgfCBmICAgICAg IHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1Yl9zeW50YXgyCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgZiAgICAg ICB8IGYgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlczoKICAgICAicHVi bGljLnRlc3RwdWJfcmZfdGJsMSIKICAgICAidGVzdHB1Yl9yZl9zY2hlbWExLnRlc3RwdWJfcmZf dGJsNSIgV0hFUkUgKGggPCA5OTkpCkBAIC02NzYsMTAgKzY3NiwxMCBAQCBDUkVBVEUgUFVCTElD QVRJT04gdGVzdHB1Yl90YWJsZV9pbnMgV0lUSCAocHVibGlzaCA9ICdpbnNlcnQsIHRydW5jYXRl Jyk7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1 Yl90YWJsZV9pbnMgQUREIFRBQkxFIHRlc3RwdWJfdGJsNSAoYSk7CQktLSBvawogXGRScCsgdGVz dHB1Yl90YWJsZV9pbnMKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViX3RhYmxlX2lucwotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAgICAgICB8IHQgICAg ICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1Yl90YWJsZV9pbnMKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBE RExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCBmICAgICAgIHwgZiAg ICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVz dHB1Yl90Ymw1IiAoYSkKIApAQCAtODIxLDEwICs4MjEsMTAgQEAgQ1JFQVRFIFRBQkxFIHRlc3Rw dWJfdGJsX2JvdGhfZmlsdGVycyAoYSBpbnQsIGIgaW50LCBjIGludCwgUFJJTUFSWSBLRVkgKGEs YykpOwogQUxURVIgVEFCTEUgdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzIFJFUExJQ0EgSURFTlRJ VFkgVVNJTkcgSU5ERVggdGVzdHB1Yl90YmxfYm90aF9maWx0ZXJzX3BrZXk7CiBBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViX2JvdGhfZmlsdGVycyBBREQgVEFCTEUgdGVzdHB1Yl90YmxfYm90aF9m aWx0ZXJzIChhLGMpIFdIRVJFIChjICE9IDEpOwogXGRScCsgdGVzdHB1Yl9ib3RoX2ZpbHRlcnMK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfYm90aF9m aWx0ZXJzCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMg fCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAg ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9ib3RoX2Zp bHRlcnMKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzOgogICAgICJwdWJsaWMudGVzdHB1Yl90YmxfYm90 aF9maWx0ZXJzIiAoYSwgYykgV0hFUkUgKGMgPD4gMSkKIApAQCAtMTAyOSwxMCArMTAyOSwxMCBA QCBFUlJPUjogIHJlbGF0aW9uICJ0ZXN0cHViX3RibDEiIGlzIGFscmVhZHkgbWVtYmVyIG9mIHB1 YmxpY2F0aW9uICJ0ZXN0cHViX2ZvcnRibAogQ1JFQVRFIFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9y dGJsIEZPUiBUQUJMRSB0ZXN0cHViX3RibDE7CiBFUlJPUjogIHB1YmxpY2F0aW9uICJ0ZXN0cHVi X2ZvcnRibCIgYWxyZWFkeSBleGlzdHMKIFxkUnArIHRlc3RwdWJfZm9ydGJsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRibAotICAgICAg ICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERl bGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZm9ydGJsCisgICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8 IGYKIFRhYmxlczoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogICAgICJwdWJsaWMudGVz dHB1Yl90YmwxIgpAQCAtMTA3MCwxMCArMTA3MCwxMCBAQCBQdWJsaWNhdGlvbnM6CiAgICAgInRl c3RwdWJfZm9ydGJsIgogCiBcZFJwKyB0ZXN0cHViX2RlZmF1bHQKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9kZWZhdWx0CisgICAgICAgICAgT3duZXIg ICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRy dW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYKIFRh YmxlczoKICAgICAicHViX3Rlc3QudGVzdHB1Yl9ub3BrIgogICAgICJwdWJsaWMudGVzdHB1Yl90 YmwxIgpAQCAtMTE1MSwxMCArMTE1MSwxMCBAQCBSRVZPS0UgQ1JFQVRFIE9OIERBVEFCQVNFIHJl Z3Jlc3Npb24gRlJPTSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyOwogRFJPUCBUQUJMRSB0ZXN0 cHViX3BhcnRlZDsKIERST1AgVEFCTEUgdGVzdHB1Yl90YmwxOwogXGRScCsgdGVzdHB1Yl9kZWZh dWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJf ZGVmYXVsdAotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWJfZGVm YXVsdAorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwg VXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9u X3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAg ICAgIHwgZiAgICAgICAgfCBmCiAoMSByb3cpCiAKIC0tIGZhaWwgLSBtdXN0IGJlIG93bmVyIG9m IHB1YmxpY2F0aW9uCkBAIC0xMTY0LDIwICsxMTY0LDIwIEBAIEVSUk9SOiAgbXVzdCBiZSBvd25l ciBvZiBwdWJsaWNhdGlvbiB0ZXN0cHViX2RlZmF1bHQKIFJFU0VUIFJPTEU7CiBBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViX2RlZmF1bHQgUkVOQU1FIFRPIHRlc3RwdWJfZm9vOwogXGRScCB0ZXN0 cHViX2ZvbwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qg b2YgcHVibGljYXRpb25zCi0gICAgTmFtZSAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAg fCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwg VmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0t LS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0t LS0tCi0gdGVzdHB1Yl9mb28gfCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExpc3Qgb2YgcHVibGljYXRpb25z CisgICAgTmFtZSAgICAgfCAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwg SW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExz IAorLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0t LS0KKyB0ZXN0cHViX2ZvbyB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCBmICAgICAgICAgfCBmICAgICAgICB8IGYK ICgxIHJvdykKIAogLS0gcmVuYW1lIGJhY2sgdG8ga2VlcCB0aGUgcmVzdCBzaW1wbGUKIEFMVEVS IFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9vIFJFTkFNRSBUTyB0ZXN0cHViX2RlZmF1bHQ7CiBBTFRF UiBQVUJMSUNBVElPTiB0ZXN0cHViX2RlZmF1bHQgT1dORVIgVE8gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyMjsKIFxkUnAgdGVzdHB1Yl9kZWZhdWx0Ci0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucwotICAgICAgTmFtZSAgICAg ICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVw ZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSB0ZXN0cHViX2RlZmF1bHQg fCByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgIHwgdCAgICAgICB8IGYgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBMaXN0IG9mIHB1YmxpY2F0aW9ucworICAgICAgTmFtZSAg ICAgICB8ICAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8 IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0t LS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQor IHRlc3RwdWJfZGVmYXVsdCB8IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlcjIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgZiAgICAgICAgIHwgZiAgICAgICAgfCBm CiAoMSByb3cpCiAKIC0tIGFkZGluZyBzY2hlbWFzIGFuZCB0YWJsZXMKQEAgLTExOTMsMTkgKzEx OTMsMTkgQEAgQ1JFQVRFIFRBQkxFICJDVVJSRU5UX1NDSEVNQSIuIkNVUlJFTlRfU0NIRU1BIihp ZCBpbnQpOwogU0VUIGNsaWVudF9taW5fbWVzc2FnZXMgPSAnRVJST1InOwogQ1JFQVRFIFBVQkxJ Q0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBGT1IgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rl c3QxOwogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAg ICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5j YXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAg ICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0 ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0t LSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMg ZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0 cHViMl9mb3JzY2hlbWEgRk9SIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MSwgcHViX3Rl c3QyLCBwdWJfdGVzdDM7CiBcZFJwKyB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKLSAgICAgICAg ICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxl dGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0t LS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCisgICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8 IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3Qy IgpAQCAtMTIxOSw0NCArMTIxOSw0NCBAQCBDUkVBVEUgUFVCTElDQVRJT04gdGVzdHB1YjZfZm9y c2NoZW1hIEZPUiBBTEwgVEFCTEVTIElOIFNDSEVNQSAiQ1VSUkVOVF9TQ0hFTUEiLAogQ1JFQVRF IFBVQkxJQ0FUSU9OIHRlc3RwdWJfZm9ydGFibGUgRk9SIFRBQkxFICJDVVJSRU5UX1NDSEVNQSIu IkNVUlJFTlRfU0NIRU1BIjsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0 cHViM19mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlv biB0ZXN0cHViM19mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFi bGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3Qg Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRp b25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAg ICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24g dGVzdHB1YjNfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxl cyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwg RERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jl c3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAg ICAgInB1YmxpYyIKIAogXGRScCsgdGVzdHB1YjRfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjRfZm9yc2NoZW1hCi0gICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWI0X2ZvcnNjaGVtYQorICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBm CiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJDVVJSRU5UX1NDSEVNQSIKIAogXGRScCsgdGVz dHB1YjVfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRp b24gdGVzdHB1YjVfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRh YmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290 IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWI1X2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8 IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgog ICAgICJDVVJSRU5UX1NDSEVNQSIKICAgICAicHVibGljIgogCiBcZFJwKyB0ZXN0cHViNl9mb3Jz Y2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi Nl9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8 IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBm CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjZf Zm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGlj YXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgIkNVUlJF TlRfU0NIRU1BIgogICAgICJwdWJsaWMiCiAKIFxkUnArIHRlc3RwdWJfZm9ydGFibGUKLSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQot ICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRl cyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZQorICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAg ICAgICAgfCBmCiBUYWJsZXM6CiAgICAgIkNVUlJFTlRfU0NIRU1BLkNVUlJFTlRfU0NIRU1BIgog CkBAIC0xMjkwLDEwICsxMjkwLDEwIEBAIEVSUk9SOiAgc2NoZW1hICJ0ZXN0cHViX3ZpZXciIGRv ZXMgbm90IGV4aXN0CiAtLSBkcm9wcGluZyB0aGUgc2NoZW1hIHNob3VsZCByZWZsZWN0IHRoZSBj aGFuZ2UgaW4gcHVibGljYXRpb24KIERST1AgU0NIRU1BIHB1Yl90ZXN0MzsKIFxkUnArIHRlc3Rw dWIyX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9u IHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAK LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlv bl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0 ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBE RExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVz c19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAg ICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xMzAxLDIwICsxMzAxLDIwIEBAIFRh YmxlcyBmcm9tIHNjaGVtYXM6CiAtLSByZW5hbWluZyB0aGUgc2NoZW1hIHNob3VsZCByZWZsZWN0 IHRoZSBjaGFuZ2UgaW4gcHVibGljYXRpb24KIEFMVEVSIFNDSEVNQSBwdWJfdGVzdDEgUkVOQU1F IHRvIHB1Yl90ZXN0MV9yZW5hbWVkOwogXGRScCsgdGVzdHB1YjJfZm9yc2NoZW1hCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjJfZm9yc2NoZW1hCi0g ICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVz IHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQorICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0t LS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAg ICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDFfcmVuYW1lZCIK ICAgICAicHViX3Rlc3QyIgogCiBBTFRFUiBTQ0hFTUEgcHViX3Rlc3QxX3JlbmFtZWQgUkVOQU1F IHRvIHB1Yl90ZXN0MTsKIFxkUnArIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIyX2ZvcnNjaGVtYQotICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0t LS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0t LS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMl9mb3JzY2hlbWEKKyAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwg ZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogICAgICJwdWJfdGVzdDIi CkBAIC0xMzIyLDEwICsxMzIyLDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAtLSBhbHRlciBw dWJsaWNhdGlvbiBhZGQgc2NoZW1hCiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hl bWEgQUREIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MjsKIFxkUnArIHRlc3RwdWIxX2Zv cnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3Rw dWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJ bnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0t LS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2Vy IHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8 IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi MV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5z ZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAor LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0t LS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHVi X3Rlc3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xMzM0LDEwICsxMzM0LDEwIEBAIFRhYmxlcyBm cm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgQUREIEFM TCBUQUJMRVMgSU4gU0NIRU1BIG5vbl9leGlzdGVudF9zY2hlbWE7CiBFUlJPUjogIHNjaGVtYSAi bm9uX2V4aXN0ZW50X3NjaGVtYSIgZG9lcyBub3QgZXhpc3QKIFxkUnArIHRlc3RwdWIxX2ZvcnNj aGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIx X2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNl cnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwg ZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9m b3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0 cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNh dGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQg ICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rl c3QxIgogICAgICJwdWJfdGVzdDIiCkBAIC0xMzQ2LDEwICsxMzQ2LDEwIEBAIFRhYmxlcyBmcm9t IHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgQUREIEFMTCBU QUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0MTsKIEVSUk9SOiAgc2NoZW1hICJwdWJfdGVzdDEiIGlz IGFscmVhZHkgbWVtYmVyIG9mIHB1YmxpY2F0aW9uICJ0ZXN0cHViMV9mb3JzY2hlbWEiCiBcZFJw KyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJs aWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBB bGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlh IHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVi bGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0t LS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tKy0tLS0tLQor IHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYKIFRhYmxlcyBmcm9tIHNjaGVt YXM6CiAgICAgInB1Yl90ZXN0MSIKICAgICAicHViX3Rlc3QyIgpAQCAtMTM1NywxMCArMTM1Nywx MCBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogLS0gYWx0ZXIgcHVibGljYXRpb24gZHJvcCBzY2hl bWEKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBEUk9QIEFMTCBUQUJMRVMg SU4gU0NIRU1BIHB1Yl90ZXN0MjsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAg ICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8 IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0t LSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQg ICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAg ICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBE ZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0t LS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAg ICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAg ICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCkBAIC0xMzY4 LDEwICsxMzY4LDEwIEBAIFRhYmxlcyBmcm9tIHNjaGVtYXM6CiBBTFRFUiBQVUJMSUNBVElPTiB0 ZXN0cHViMV9mb3JzY2hlbWEgRFJPUCBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDI7CiBF UlJPUjogIHRhYmxlcyBmcm9tIHNjaGVtYSAicHViX3Rlc3QyIiBhcmUgbm90IHBhcnQgb2YgdGhl IHB1YmxpY2F0aW9uCiBcZFJwKyB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKLSAgICAgICAgICBP d25lciAgICAgICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVz IHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCisgICAgICAgICAgT3du ZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8 IFRydW5jYXRlcyB8IFZpYSByb290IHwgRERMcyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t Ky0tLS0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tKy0tLS0tLQorIHJlZ3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgICAgfCBmICAgICAgICB8IGYK IFRhYmxlcyBmcm9tIHNjaGVtYXM6CiAgICAgInB1Yl90ZXN0MSIKIApAQCAtMTM3OSwyOSArMTM3 OSwyOSBAQCBUYWJsZXMgZnJvbSBzY2hlbWFzOgogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFf Zm9yc2NoZW1hIERST1AgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgbm9uX2V4aXN0ZW50X3NjaGVtYTsK IEVSUk9SOiAgc2NoZW1hICJub25fZXhpc3RlbnRfc2NoZW1hIiBkb2VzIG5vdCBleGlzdAogXGRS cCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwg QWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZp YSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1 YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0K KyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hl bWFzOgogICAgICJwdWJfdGVzdDEiCiAKIC0tIGRyb3AgYWxsIHNjaGVtYXMKIEFMVEVSIFBVQkxJ Q0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBEUk9QIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90 ZXN0MTsKIFxkUnArIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0g cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBQdWJsaWNhdGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0t LS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0t LS0rLS0tLS0tCisgcmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAg ICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogKDEgcm93 KQogCiAtLSBhbHRlciBwdWJsaWNhdGlvbiBzZXQgbXVsdGlwbGUgc2NoZW1hCiBBTFRFUiBQVUJM SUNBVElPTiB0ZXN0cHViMV9mb3JzY2hlbWEgU0VUIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90 ZXN0MSwgcHViX3Rlc3QyOwogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAg ICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVs ZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0r LS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0t LS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAg ICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAg IE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0 ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0t LS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAg ICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAg fCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0 MiIKQEAgLTE0MTAsMTAgKzE0MTAsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIEFMVEVSIFBV QkxJQ0FUSU9OIHRlc3RwdWIxX2ZvcnNjaGVtYSBTRVQgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgbm9u X2V4aXN0ZW50X3NjaGVtYTsKIEVSUk9SOiAgc2NoZW1hICJub25fZXhpc3RlbnRfc2NoZW1hIiBk b2VzIG5vdCBleGlzdAogXGRScCsgdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjFfZm9yc2NoZW1hCi0gICAgICAgICAg T3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRl cyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0t LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0t LS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQorICAgICAgICAgIE93 bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMg fCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0r LS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBm CiBUYWJsZXMgZnJvbSBzY2hlbWFzOgogICAgICJwdWJfdGVzdDEiCiAgICAgInB1Yl90ZXN0MiIK QEAgLTE0MjIsMTAgKzE0MjIsMTAgQEAgVGFibGVzIGZyb20gc2NoZW1hczoKIC0tIHJlbW92aW5n IHRoZSBkdXBsaWNhdGUgc2NoZW1hcwogQUxURVIgUFVCTElDQVRJT04gdGVzdHB1YjFfZm9yc2No ZW1hIFNFVCBBTEwgVEFCTEVTIElOIFNDSEVNQSBwdWJfdGVzdDEsIHB1Yl90ZXN0MTsKIFxkUnAr IHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1Ymxp Y2F0aW9uIHRlc3RwdWIxX2ZvcnNjaGVtYQotICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFs bCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEg cm9vdCAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLSstLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tCi0gcmVncmVzc19wdWJs aWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgICB8IGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNh dGlvbiB0ZXN0cHViMV9mb3JzY2hlbWEKKyAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwg dGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJv b3QgfCBERExzIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0t LS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0rLS0tLS0tCisg cmVncmVzc19wdWJsaWNhdGlvbl91c2VyIHwgZiAgICAgICAgICB8IHQgICAgICAgfCB0ICAgICAg IHwgdCAgICAgICB8IHQgICAgICAgICB8IGYgICAgICAgIHwgZgogVGFibGVzIGZyb20gc2NoZW1h czoKICAgICAicHViX3Rlc3QxIgogCkBAIC0xNTA0LDE4ICsxNTA0LDE4IEBAIFNFVCBjbGllbnRf bWluX21lc3NhZ2VzID0gJ0VSUk9SJzsKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViM19mb3Jz Y2hlbWE7CiBSRVNFVCBjbGllbnRfbWluX21lc3NhZ2VzOwogXGRScCsgdGVzdHB1YjNfZm9yc2No ZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1YjNf Zm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxsIHRhYmxlcyB8IEluc2Vy dHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSByb290IAotLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBm ICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0aW9uIHRlc3RwdWIzX2Zv cnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRz IHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0 aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAg ICAgICAgIHwgZiAgICAgICAgfCBmCiAoMSByb3cpCiAKIEFMVEVSIFBVQkxJQ0FUSU9OIHRlc3Rw dWIzX2ZvcnNjaGVtYSBTRVQgQUxMIFRBQkxFUyBJTiBTQ0hFTUEgcHViX3Rlc3QxOwogXGRScCsg dGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGlj YXRpb24gdGVzdHB1YjNfZm9yc2NoZW1hCi0gICAgICAgICAgT3duZXIgICAgICAgICAgIHwgQWxs IHRhYmxlcyB8IEluc2VydHMgfCBVcGRhdGVzIHwgRGVsZXRlcyB8IFRydW5jYXRlcyB8IFZpYSBy b290IAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKy0tLS0tLS0tLSst LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLS0tKy0tLS0tLS0tLS0KLSByZWdyZXNzX3B1Ymxp Y2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwg dCAgICAgICAgIHwgZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFB1YmxpY2F0 aW9uIHRlc3RwdWIzX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0 YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9v dCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0t LS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyBy ZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAg fCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXMgZnJvbSBzY2hlbWFz OgogICAgICJwdWJfdGVzdDEiCiAKQEAgLTE1MjUsMjAgKzE1MjUsMjAgQEAgQ1JFQVRFIFBVQkxJ Q0FUSU9OIHRlc3RwdWJfZm9yc2NoZW1hX2ZvcnRhYmxlIEZPUiBBTEwgVEFCTEVTIElOIFNDSEVN QSBwdWJfdGVzdDEKIENSRUFURSBQVUJMSUNBVElPTiB0ZXN0cHViX2ZvcnRhYmxlX2ZvcnNjaGVt YSBGT1IgVEFCTEUgcHViX3Rlc3QyLnRibDEsIEFMTCBUQUJMRVMgSU4gU0NIRU1BIHB1Yl90ZXN0 MTsKIFJFU0VUIGNsaWVudF9taW5fbWVzc2FnZXM7CiBcZFJwKyB0ZXN0cHViX2ZvcnNjaGVtYV9m b3J0YWJsZQotICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVibGljYXRpb24gdGVzdHB1Yl9m b3JzY2hlbWFfZm9ydGFibGUKLSAgICAgICAgICBPd25lciAgICAgICAgICAgfCBBbGwgdGFibGVz IHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNhdGVzIHwgVmlhIHJvb3QgCi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0t LSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJlZ3Jlc3NfcHVibGljYXRpb25f dXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0ICAgICAg ICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdWJsaWNhdGlvbiB0ZXN0cHVi X2ZvcnNjaGVtYV9mb3J0YWJsZQorICAgICAgICAgIE93bmVyICAgICAgICAgICB8IEFsbCB0YWJs ZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVuY2F0ZXMgfCBWaWEgcm9vdCB8 IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0t Ky0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLSstLS0tLS0KKyByZWdy ZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAgICAgICB8IHQgICAgICAgfCB0 ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJsZXM6CiAgICAgInB1Yl90ZXN0 Mi50YmwxIgogVGFibGVzIGZyb20gc2NoZW1hczoKICAgICAicHViX3Rlc3QxIgogCiBcZFJwKyB0 ZXN0cHViX2ZvcnRhYmxlX2ZvcnNjaGVtYQotICAgICAgICAgICAgICAgICAgICAgICAgICAgUHVi bGljYXRpb24gdGVzdHB1Yl9mb3J0YWJsZV9mb3JzY2hlbWEKLSAgICAgICAgICBPd25lciAgICAg ICAgICAgfCBBbGwgdGFibGVzIHwgSW5zZXJ0cyB8IFVwZGF0ZXMgfCBEZWxldGVzIHwgVHJ1bmNh dGVzIHwgVmlhIHJvb3QgCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0r LS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLQotIHJl Z3Jlc3NfcHVibGljYXRpb25fdXNlciB8IGYgICAgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICB8 IHQgICAgICAgfCB0ICAgICAgICAgfCBmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQ dWJsaWNhdGlvbiB0ZXN0cHViX2ZvcnRhYmxlX2ZvcnNjaGVtYQorICAgICAgICAgIE93bmVyICAg ICAgICAgICB8IEFsbCB0YWJsZXMgfCBJbnNlcnRzIHwgVXBkYXRlcyB8IERlbGV0ZXMgfCBUcnVu Y2F0ZXMgfCBWaWEgcm9vdCB8IERETHMgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0t LS0tLS0tLS0rLS0tLS0tLS0tKy0tLS0tLS0tLSstLS0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0t LS0tLSstLS0tLS0KKyByZWdyZXNzX3B1YmxpY2F0aW9uX3VzZXIgfCBmICAgICAgICAgIHwgdCAg ICAgICB8IHQgICAgICAgfCB0ICAgICAgIHwgdCAgICAgICAgIHwgZiAgICAgICAgfCBmCiBUYWJs ZXM6CiAgICAgInB1Yl90ZXN0Mi50YmwxIgogVGFibGVzIGZyb20gc2NoZW1hczoKLS0gCjIuNy4y LndpbmRvd3MuMQoK --_005_OS0PR01MB571676298B814F7F5690D92994BB9OS0PR01MB5716jpnp_ Content-Type: application/octet-stream; name="v10-0004-Test-cases-for-DDL-replication.patch" Content-Description: v10-0004-Test-cases-for-DDL-replication.patch Content-Disposition: attachment; filename="v10-0004-Test-cases-for-DDL-replication.patch"; size=23037; creation-date="Wed, 29 Jun 2022 09:47:00 GMT"; modification-date="Wed, 29 Jun 2022 09:54:39 GMT" Content-Transfer-Encoding: base64 RnJvbSBiMjU5MjBhODIxM2UzOGRlOWViOGJiMDk2YmRjMjlkNjRmM2U5NDgyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBUYWthbWljaGkgT3N1bWkgPG9zdW1pLnRha2FtaWNoaUBmdWpp dHN1LmNvbT4KRGF0ZTogV2VkLCAxNSBKdW4gMjAyMiAwOTo0NTo0MiArMDAwMApTdWJqZWN0OiBb UEFUQ0ggNC80XSBUZXN0IGNhc2VzIGZvciBEREwgcmVwbGljYXRpb24KCkF1dGhvcjogVGFrYW1p Y2hpIE9zdW1pCi0tLQogc3JjL3Rlc3Qvc3Vic2NyaXB0aW9uL3QvMDMyX2RkbF9yZXBsaWNhdGlv bi5wbCB8IDQxNCArKysrKysrKysrKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNDE0 IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvdGVzdC9zdWJzY3JpcHRpb24v dC8wMzJfZGRsX3JlcGxpY2F0aW9uLnBsCgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3Qvc3Vic2NyaXB0 aW9uL3QvMDMyX2RkbF9yZXBsaWNhdGlvbi5wbCBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAz Ml9kZGxfcmVwbGljYXRpb24ucGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u OTRkZThlZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy90ZXN0L3N1YnNjcmlwdGlvbi90LzAzMl9k ZGxfcmVwbGljYXRpb24ucGwKQEAgLTAsMCArMSw0MTQgQEAKKyMgQ29weXJpZ2h0IChjKSAyMDIy LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorIyBSZWdyZXNzaW9uIHRlc3Rz IGZvciBsb2dpY2FsIHJlcGxpY2F0aW9uIG9mIERETHMKKyMKK3VzZSBzdHJpY3Q7Cit1c2Ugd2Fy bmluZ3M7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3RlcjsKK3VzZSBQb3N0Z3JlU1FMOjpU ZXN0OjpVdGlsczsKK3VzZSBUZXN0OjpNb3JlOworCitteSAkbm9kZV9wdWJsaXNoZXIgPSBQb3N0 Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ3B1Ymxpc2hlcicpOworJG5vZGVfcHVibGlzaGVy LT5pbml0KGFsbG93c19zdHJlYW1pbmcgPT4gJ2xvZ2ljYWwnKTsKKyRub2RlX3B1Ymxpc2hlci0+ c3RhcnQ7CisKK215ICRub2RlX3N1YnNjcmliZXIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVy LT5uZXcoJ3N1YnNjcmliZXInKTsKKyRub2RlX3N1YnNjcmliZXItPmluaXQoYWxsb3dzX3N0cmVh bWluZyA9PiAnbG9naWNhbCcpOworJG5vZGVfc3Vic2NyaWJlci0+c3RhcnQ7CisKK215ICRkZGwg PSAiQ1JFQVRFIFRBQkxFIHRlc3RfcmVwKGlkIGludCBwcmltYXJ5IGtleSwgbmFtZSB2YXJjaGFy LCB2YWx1ZSBpbnRlZ2VyKTsiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgJGRkbCk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJU IElOVE8gdGVzdF9yZXAgVkFMVUVTICgxLCAnZGF0YTEnLCAxKTsiKTsKKyRub2RlX3N1YnNjcmli ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAkZGRsKTsKKworbXkgJHB1Ymxpc2hlcl9jb25uc3Ry ID0gJG5vZGVfcHVibGlzaGVyLT5jb25uc3RyIC4gJyBkYm5hbWU9cG9zdGdyZXMnOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkiQ1JFQVRFIFBVQkxJQ0FUSU9OIG15 cHViIEZPUiBBTEwgVEFCTEVTIHdpdGggKHB1Ymxpc2ggPSAnaW5zZXJ0LCB1cGRhdGUsIGRlbGV0 ZSwgZGRsJyk7Iik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwki Q1JFQVRFIFNVQlNDUklQVElPTiBteXN1YiBDT05ORUNUSU9OICckcHVibGlzaGVyX2Nvbm5zdHIn IFBVQkxJQ0FUSU9OIG15cHViOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVw KCdteXN1YicpOworCisjIE1ha2Ugc3VyZSB3ZSBoYXZlIGZ1bGx5IHN5bmNocm9uaXplZCB0aGUg dGFibGUuCisjIFRoaXMgcHJldmVudHMgQUxURVIgVEFCTEUgY29tbWFuZCBiZWxvdyBmcm9tIGJl aW5nIGV4ZWN1dGVkIGR1cmluZyB0YWJsZSBzeW5jaHJvbml6YXRpb24uCiskbm9kZV9zdWJzY3Jp YmVyLT5wb2xsX3F1ZXJ5X3VudGlsKCdwb3N0Z3JlcycsCisgICAiU0VMRUNUIENPVU5UKDEpID0g MCBGUk9NIHBnX3N1YnNjcmlwdGlvbl9yZWwgc3IgV0hFUkUgc3Iuc3JzdWJzdGF0ZSBOT1QgSU4g KCdzJywgJ3InKSBBTkQgc3Iuc3JyZWxpZCA9ICd0ZXN0X3JlcCc6OnJlZ2NsYXNzIgorKTsKKwor IyBUZXN0IEFMVEVSIFRBQkxFIEFERAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFERCBjNCBpbnQ7Iik7Ciskbm9kZV9wdWJsaXNo ZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdGVzdF9yZXAgVkFMVUVTICgy LCAnZGF0YTInLCAyLCAyKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgn bXlzdWInKTsKK215ICRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBjb3VudCgqKSBGUk9NIHRlc3RfcmVwIFdIRVJFIGM0ID0gMjsiKTsKK2lz KCRyZXN1bHQsIHFxKDEpLCAnQUxURVIgdGVzdF9yZXAgQUREIHJlcGxpY2F0ZWQnKTsKKworIyBU ZXN0IEFMVEVSIFRBQkxFIERST1AKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBEUk9QIGM0OyIpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBGUk9NIHRlc3RfcmVwIHdoZXJlIGlkID0gMjsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBmcm9tIHRlc3RfcmVwOyIpOworaXMoJHJlc3VsdCwgcXEoMSksICdBTFRFUiB0ZXN0X3JlcCBE Uk9QIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IEFMVEVSIFRBQkxFIEFMVEVSIFRZUEUKKyRub2Rl X3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBB TFRFUiB2YWx1ZSBUWVBFIHZhcmNoYXIiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDMsICdkYXRhMycsICczJyk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0 ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQo KikgRlJPTSB0ZXN0X3JlcCBXSEVSRSB2YWx1ZSA9ICczJzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEp LCAnQUxURVIgdGVzdF9yZXAgQUxURVIgQ09MVU1OIFRZUEUgcmVwbGljYXRlZCcpOworCisjIFRl c3QgQUxURVIgVEFCTEUgQUxURVIgU0VUIERFRkFVTFQKKyMgQ2hlY2sgaWYgd2UgaGF2ZSB0aGUg ZGVmYXVsdCB2YWx1ZSBhZnRlciB0aGUgZGlyZWN0IGluc2VydCB0byBzdWJzY3JpYmVyIG5vZGUu Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQUxURVIgVEFCTEUgdGVz dF9yZXAgQUxURVIgQ09MVU1OIHZhbHVlIFNFVCBERUZBVUxUICdmb28nIik7Ciskbm9kZV9wdWJs aXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoNCwgJ2RhdGE0 Jyk7Iik7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jlcycs ICJTRUxFQ1QgdmFsdWUgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDQ7Iik7CitpcygkcmVzdWx0 LCAnZm9vJywgJ0FMVEVSIHRlc3RfcmVwIEFMVEVSIFNFVCBERUZBVUxUIHJlcGxpY2F0ZWQnKTsK KworIyBUZXN0IEFMVEVSIFRBQkxFIEFMVEVSIERST1AgREVGQVVMVAorIyBDaGVjayBpZiB3ZSBk b24ndCBoYXZlIHRoZSBkZWZhdWx0IHZhbHVlIHByZXZpb3VzbHkgZGVmaW5lZC4KKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRF UiBDT0xVTU4gdmFsdWUgRFJPUCBERUZBVUxUOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zv cl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMgKDUsICdkYXRhNScpOyIpOworJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIHZhbHVl IElTIE5VTEwgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDU7Iik7CitpcygkcmVzdWx0LCBxKHQp LCAnQUxURVIgdGVzdF9yZXAgQUxURVIgRFJPUCBERUZBVUxUIHJlcGxpY2F0ZWQnKTsKKworIyBU ZXN0IEFMVEVSIFRBQkxFIEFMVEVSIFNFVCBOT1QgTlVMTAorIyBSZW1vdmUgdGhlIGV4aXN0aW5n IHJlY29yZCB0aGF0IGNvbnRhaW5zIG51bGwgdmFsdWUgZmlyc3QuCitteSAoJHN0ZG91dCwgJHN0 ZGVycik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRFTEVURSBG Uk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3Fs KCdwb3N0Z3JlcycsICJBTFRFUiBUQUJMRSB0ZXN0X3JlcCBBTFRFUiB2YWx1ZSBTRVQgTk9UIE5V TEw7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9k ZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxV RVMgKDYsICdkYXRhNicpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAg c3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVy ciA9fiAvRVJST1I6ICBudWxsIHZhbHVlIGluIGNvbHVtbiBcInZhbHVlXCIgb2YgcmVsYXRpb24g XCJ0ZXN0X3JlcFwiIHZpb2xhdGVzIG5vdC1udWxsIGNvbnN0cmFpbnQvCisgIG9yIGRpZSAiZmFp bGVkIHRvIHJlcGxpY2F0ZSBBTFRFUiBUQUJMRSBBTFRFUiBTRVQgTk9UIE5VTEwiOworCisjIFRl c3QgQUxURVIgVEFCTEUgQUxURVIgRFJPUCBOT1QgTlVMTAorJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIkFMVEVSIFRBQkxFIHRlc3RfcmVwIEFMVEVSIHZhbHVlIERST1Ag Tk9UIE5VTEw7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7 CisjIEluc2VydCBzYW1lIGRhdGEgdGhhdCBoYXMgTlVMTCB2YWx1ZS4gVGhpcyBmYWlsZWQgYmVm b3JlIGJ1dCBub3cgc2hvdWxkIHN1Y2NlZWQuCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRlc3RfcmVwIFZBTFVFUyAoNiwgJ2RhdGE2Jyk7Iik7 CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxF Q1QgdmFsdWUgSVMgTlVMTCBGUk9NIHRlc3RfcmVwIFdIRVJFIGlkID0gNjsiKTsKK2lzKCRyZXN1 bHQsIHEodCksICJBTFRFUiB0ZXN0X3JlcCBBTFRFUiBEUk9QIE5PVCBOVUxMIHJlcGxpY2F0ZWQi KTsKKworIyBUZXN0IEFMVEVSIFRBQkxFIFNFVCBVTkxPR0dFRAorJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgJ0FMVEVSIFRBQkxFIHRlc3RfcmVwIFNFVCBVTkxPR0dFRDsn KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1 Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxV RVMgKDcsICdkYXRhNycsICc3Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDc7Iik7Citp cygkcmVzdWx0LCBxcSgwKSwgJ0FMVEVSIHRlc3RfcmVwIFNFVCBVTkxPR0dFRCByZXBsaWNhdGVk Jyk7CisKKyMgVGVzdCBBTFRFUiBUQUJMRSBTRVQgTE9HR0VECiskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAnQUxURVIgVEFCTEUgdGVzdF9yZXAgU0VUIExPR0dFRDsnKTsK KyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3B1Ymxp c2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0ZXN0X3JlcCBWQUxVRVMg KDgsICdkYXRhOCcsICc4Jyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAo J215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJTRUxFQ1QgY291bnQoKikgRlJPTSB0ZXN0X3JlcCBXSEVSRSBpZCA9IDg7Iik7Citpcygk cmVzdWx0LCBxcSgxKSwgJ0FMVEVSIHRlc3RfcmVwIFNFVCBMT0dHRUQgcmVwbGljYXRlZCcpOwor CisjIFRlc3QgQ1JFQVRFIFRBQkxFIGFuZCBETUwgY2hhbmdlcworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGEgaW50LCBiIHZhcmNoYXIp OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50 KCopIGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAnOyIpOworaXMoJHJlc3Vs dCwgcXEoMSksICdDUkVBVEUgdG1wIGlzIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgdmFsdWVzICgxLCAnYScpIik7 Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1w IHZhbHVlcyAoMiwgJ2InKSIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdt eXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMiksICdETUwg Q2hhbmdlcyB0byB0bXAgYXJlIHJlcGxpY2F0ZWQnKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBJ TkhFUklUUworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBU QUJMRSB0bXAyIChjMyBpbnQpIElOSEVSSVRTICh0bXApOyIpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcDIgVkFMVUVTICgxLCAnYScsIDEp OyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3Vs dCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50 KCopIGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAyJzsiKTsKK2lzKCRyZXN1 bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxFIElOSEVSSVRTIGlzIHJlcGxpY2F0ZWQnKTsKKyRyZXN1 bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3Vu dCgqKSBmcm9tIHRtcDI7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ2luc2VydGluZyBzb21lIGRh dGEgdG8gaW5oZXJpdGVkIHRhYmxlIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDIiKTsKKworIyBUZXN0IENSRUFURSBU QUJMRSBMSUtFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRF IFRBQkxFIHRtcDMgKGMzIGludCwgTElLRSB0bXApOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZl X3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcDMgVkFMVUVTICgxLCAxLCAnYScpOyIp OworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9 ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCop IGZyb20gcGdfdGFibGVzIHdoZXJlIHRhYmxlbmFtZSA9ICd0bXAzJzsiKTsKK2lzKCRyZXN1bHQs IHFxKDEpLCAnQ1JFQVRFIFRBQkxFIExJS0UgcmVwbGljYXRlZCcpOworJHJlc3VsdCA9ICRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20g dG1wMzsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0IHNvbWUgZGF0YSB0byBhIHRhYmxl IGRlZmluZWQgd2l0aCBMSUtFIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDMiKTsKKworIyBUZXN0IERST1AgVEFCTEUK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcDsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQg PSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgq KSBmcm9tIHBnX3RhYmxlcyB3aGVyZSB0YWJsZW5hbWUgPSAndG1wJzsiKTsKK2lzKCRyZXN1bHQs IHFxKDApLCAnVEFCTEUgdG1wIGlzIGRyb3BwZWQnKTsKKworIyBUZXN0IENSRUFURSBVTkxPR0dF RCBUQUJMRQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBV TkxPR0dFRCBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJs aXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSBwZ190YWJs ZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwgJ0NSRUFU RSBVTkxPR0dFRCBUQUJMRSBpcyByZXBsaWNhdGVkIGNvcnJlY3RseScpOworJHJlc3VsdCA9ICRu b2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZy b20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoMCksICdpbnNlcnRpbmcgZGF0YSB0byB1bmxvZ2dl ZCB0YWJsZSBpcyBub3QgcmVwbGljYXRlZCBjb3JyZWN0bHknKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JFQVRF IFRBQkxFIElGIE5PVCBFWElTVFMKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAo MSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CiskcmVz dWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgY291 bnQoKikgZnJvbSBwZ190YWJsZXMgd2hlcmUgdGFibGVuYW1lID0gJ3RtcCc7Iik7CitpcygkcmVz dWx0LCBxcSgxKSwgJ0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsKKyRy ZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBj b3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnaW5zZXJ0aW5nIGRhdGEg dG8gYSB0YWJsZSByZXBsaWNhdGVkJyk7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBUZXN0IENSRUFURSBUQUJMRSBJRiBOT1Qg RVhJU1RTIChjaGVjayBpZiB3ZSBza2lwIHRvIGNyZWF0ZSBhIHRhYmxlCisjIHdoZW4gd2UgaGF2 ZSB0aGUgdGFibGUgb24gdGhlIHN1YnNjcmliZXIgaW4gYWR2YW5jZSwgYW5kIGlmIHdlIHN1Y2Nl ZWQKKyMgaW4gcmVwbGljYXRpbmcgY2hhbmdlcy4pCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCk7Iik7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIElGIE5PVCBFWElTVFMg dG1wIChpZCBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywg IklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zv cl9jYXRjaHVwKCdteXN1YicpOworJHJlc3VsdCA9ICRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNx bCgncG9zdGdyZXMnLCAiU0VMRUNUIGNvdW50KCopIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwg cXEoMSksICdDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyByZXBsaWNhdGVkJyk7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXAiKTsKKworIyBU ZXN0IENSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIChjaGVjayBpZiB3ZSBza2lwIHRvIGNyZWF0 ZSBhIHRhYmxlCisjIHdoZW4gd2UgaGF2ZSB0aGUgdGFibGUgb24gdGhlIHB1Ymxpc2hlciwgYnV0 IG5vdCBvbiB0aGUgc3Vic2NyaWJlci4pCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9z dGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50KTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+ c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgSUYgTk9UIEVYSVNUUyB0bXAgKGlk IGludCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJU IElOVE8gdG1wIFZBTFVFUyAoMSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNo dXAoJ215c3ViJyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICJTRUxFQ1QgY291bnQoKikgZnJvbSB0bXA7Iik7CitpcygkcmVzdWx0LCBxcSgxKSwg J0NSRUFURSBUQUJMRSBJRiBOT1QgRVhJU1RTIHJlcGxpY2F0ZWQnKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOworCisjIFRlc3QgQ1JF QVRFIFRBQkxFIHdpdGggY29sbGF0ZQorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKG5hbWUgdGV4dCBDT0xMQVRFIFwiQ1wiKTsiKTsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFM VUVTICgnZm9vJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3Vi Jyk7CiskcmVzdWx0ID0gJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJT RUxFQ1QgY29sbGF0aW9uX25hbWUgRlJPTSBpbmZvcm1hdGlvbl9zY2hlbWEuY29sdW1ucyBXSEVS RSB0YWJsZV9uYW1lID0gJ3RtcCc7Iik7CitpcygkcmVzdWx0LCBxcShDKSwgJ0NSRUFURSBUQUJM RSB3aXRoIGNvbGxhdGUgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgd2l0 aCBuYW1lZCBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50IENPTlNUUkFJTlQgXCJtdXN0IGJlIGJpZ2dlciB0 aGFuIDEwXCIgQ0hFQ0sgKGlkID4gMTApKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3Jf Y2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwK KwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQp OworJHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAidG1wIiB2aW9sYXRl cyBjaGVjayBjb25zdHJhaW50ICJtdXN0IGJlIGJpZ2dlciB0aGFuIDEwIi8KKyAgb3IgZGllICJm YWlsZWQgdG8gcmVwbGljYXRlIG5hbWVkIGNvbnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOwor JG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIp OworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIHdpdGggdmFyaW91cyB0eXBlcyBvZiBjb25zdHJhaW50 cy4KKyMgTk9UIE5VTEwgY29uc3RyYWludAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCwgbmFtZSB0ZXh0IE5PVCBOVUxMKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1 YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIs CisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJy LAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBudWxs IHZhbHVlIGluIGNvbHVtbiAibmFtZSIgb2YgcmVsYXRpb24gInRtcCIgdmlvbGF0ZXMgbm90LW51 bGwgY29uc3RyYWludC8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIG5vbiBudWxsIGNv bnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIE5VTEwgY29uc3RyYWludAorJG5v ZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlk IGludCwgbmFtZSB0ZXh0IE5VTEwpOyIpOworJG5vZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRj aHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJ TlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVy LT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBuYW1lIElTIE5VTEwgRlJPTSB0bXA7Iik7 CitpcygkcmVzdWx0LCBxcSh0KSwgIkNSRUFURSBUQUJMRSB3aXRoIE5VTEwgY29uc3RyYWludCBy ZXBsaWNhdGVkIik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJP UCBUQUJMRSB0bXAiKTsKKworIyBDSEVDSyBjb25zdHJhaW50Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRtcCAoaWQgaW50LCBwcm9kdWN0X2Ft ZSB0ZXh0LCBwcmljZSBpbnQgQ0hFQ0sgKHByaWNlID4gMCkpOyIpOworJG5vZGVfcHVibGlzaGVy LT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9z dGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycsIC0xMDApOyIsCisJCQkJ CSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJ CQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBuZXcgcm93IGZv ciByZWxhdGlvbiAidG1wIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0bXBfcHJpY2VfY2hl Y2siLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgQ0hFQ0sgY29uc3RyYWludCI7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7 CisKKyMgREVGQVVMVAorJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNS RUFURSBUQUJMRSB0bXAgKGlkIGludCwgbmFtZSB0ZXh0IERFRkFVTFQgJ2ZvbycpOyIpOworJG5v ZGVfcHVibGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsK KyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVD VCBuYW1lIGZyb20gdG1wOyIpOworaXMoJHJlc3VsdCwgcXEoZm9vKSwgIkNSRUFURSBUQUJMRSB3 aXRoIGRlZmF1bHQgdmFsdWUgcmVwbGljYXRlZCIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wIik7CisKKyMgVU5JUVVFIGNvbnN0cmFpbnQK KyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1w IChpZCBpbnQgVU5JUVVFKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3Jl cycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2Fp dF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVz JywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEpOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3Ag PT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRz dGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVz IHVuaXF1ZSBjb25zdHJhaW50ICJ0bXBfaWRfa2V5Ii8KKyAgb3IgZGllICJmYWlsZWQgdG8gcmVw bGljYXRlIGNvbnN0cmFpbnQgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFBSSU1BUlkgS0VZ Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHRt cCAoaWQgaW50IFBSSU1BUlkgS0VZLCBuYW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsi KTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1 YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdi YXInKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBc JHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9S OiAgZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX3Br ZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgcHJpbWFyeSBrZXkgYXQgY3JlYXRp bmcgdGFibGUiOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1Ag VEFCTEUgdG1wOyIpOworCisjIEVYQ0xVREUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdw b3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgY2lyY2xlcyAoYyBjaXJjbGUsIEVYQ0xVREUgVVNJTkcg Z2lzdCAoYyBXSVRIICYmKSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAiSU5TRVJUIElOVE8gY2lyY2xlcyBWQUxVRVMgKCc8KDEsIDEpLCAxPic6OmNpcmNsZSk7 Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9kZV9z dWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBjaXJjbGVzIFZBTFVFUyAo JzwoMSwgMSksIDE+Jzo6Y2lyY2xlKTsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+IDAsCisJ CQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsK KyRzdGRlcnIgPX4gL0VSUk9SOiAgY29uZmxpY3Rpbmcga2V5IHZhbHVlIHZpb2xhdGVzIGV4Y2x1 c2lvbiBjb25zdHJhaW50ICJjaXJjbGVzX2NfZXhjbCIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJl cGxpY2F0ZSBFWENMVURFIGF0IGNyZWF0aW5nIHRhYmxlIjsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIGNpcmNsZXMiKTsKKworIyBSRUZFUkVOQ0VT Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIHBy b2R1Y3QgKGlkIGludCBQUklNQVJZIEtFWSwgbmFtZSB0ZXh0KTsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyBwcm9kdWN0IFZBTFVFUyAoMSwg J2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VS VCBJTlRPIHByb2R1Y3QgVkFMVUVTICgyLCAnYmFyJyk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxFIG9yZGVycyAob3JkZXJfaWQgaW50IFBS SU1BUlkgS0VZLCBwcm9kdWN0X2lkIGludCBSRUZFUkVOQ0VTIHByb2R1Y3QgKGlkKSkiKTsKKyRu b2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRub2RlX3N1YnNjcmli ZXItPnBzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIG9yZGVycyBWQUxVRVMgKDEsIDEwKSIs CisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJyID0+IFwkc3RkZXJy LAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAvRVJST1I6ICBpbnNl cnQgb3IgdXBkYXRlIG9uIHRhYmxlICJvcmRlcnMiIHZpb2xhdGVzIGZvcmVpZ24ga2V5IGNvbnN0 cmFpbnQgIm9yZGVyc19wcm9kdWN0X2lkX2ZrZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBs aWNhdGUgUkVGRVJFTkNFUyBhdCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNh ZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSBvcmRlcnMiKTsKKyRub2RlX3B1Ymxpc2hl ci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHByb2R1Y3QiKTsKKworIyBERUZF UlJBQkxFCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRB QkxFIHRtcCAoaWQgaW50IFBSSU1BUlkgS0VZIERFRkVSUkFCTEUsIG5hbWUgdGV4dCk7Iik7Cisk bm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZB TFVFUyAoMSwgJ2ZvbycpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDIsICdiYXInKTsiKTsKKyRub2RlX3B1Ymxpc2hl ci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyMgUXVpY2sgY2hlY2sgb2YgZGVmZXJyYWJs ZSBjbGF1c2UKKyRub2RlX3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiVVBEQVRF IHRtcCBTRVQgaWQgPSBpZCArIDE7Iik7CisjIEFsc28sIGV4ZWN1dGUgYSB0ZXN0IHRoYXQgc2hv dWxkIGZhaWwgZm9yIElOSVRJQUxMWSBJTU1FRElBVEUodGhlIGRlZmF1bHQpCiskbm9kZV9zdWJz Y3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsIHFxKAorQkVHSU47CitVUERBVEUgdG1wIFNFVCBpZCA9 IGlkICsgMTsKK0lOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDMsICdmb29iYXInKTsKK0RFTEVURSBG Uk9NIHRtcCBXSEVSRSBpZCA9IDM7CitDT01NSVQ7CispLCBvbl9lcnJvcl9zdG9wID0+IDAsIHN0 ZGVyciA9PiBcJHN0ZGVyciwgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9S OiAgZHVwbGljYXRlIGtleSB2YWx1ZSB2aW9sYXRlcyB1bmlxdWUgY29uc3RyYWludCAidG1wX3Br ZXkiLworICBvciBkaWUgImZhaWxlZCB0byByZXBsaWNhdGUgREVGRVJSQUJMRSBhdCBjcmVhdGlu ZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBU QUJMRSB0bXA7Iik7CisKKyMgTk9UIERFRkVSUkFCTEUKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9w c3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEUgdG1wIChpZCBpbnQgUFJJTUFSWSBLRVkgTk9U IERFRkVSUkFCTEUsIG5hbWUgdGV4dCk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgn cG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMSwgJ2ZvbycpOyIpOworJG5vZGVf cHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMg KDIsICdiYXInKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWIn KTsKKyRub2RlX3N1YnNjcmliZXItPnBzcWwoJ3Bvc3RncmVzJywgIlVQREFURSB0bXAgU0VUIGlk ID0gaWQgKyAxOyIsCisJCQkJCSAgIG9uX2Vycm9yX3N0b3AgPT4gMCwKKwkJCQkJICAgc3RkZXJy ID0+IFwkc3RkZXJyLAorCQkJCQkgICBzdGRvdXQgPT4gXCRzdGRvdXQpOworJHN0ZGVyciA9fiAv RVJST1I6ICBkdXBsaWNhdGUga2V5IHZhbHVlIHZpb2xhdGVzIHVuaXF1ZSBjb25zdHJhaW50ICJ0 bXBfcGtleSIvCisgIG9yIGRpZSAiZmFpbGVkIHRvIHJlcGxpY2F0ZSBOT1QgREVGRVJSQUJMRSBh dCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgREVGRVJSQUJMRSBhbmQgSU5JVElBTExZIERFRkVS UkVECiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRBQkxF IHRtcCAoaWQgaW50IFBSSU1BUlkgS0VZIERFRkVSUkFCTEUgSU5JVElBTExZIERFRkVSUkVELCBu YW1lIHRleHQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIklO U0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdmb28nKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2Fm ZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgyLCAnYmFyJyk7Iik7 Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7CisjIFF1aWNrIGNo ZWNrIG9mIGRlZmVycmFibGUgY2xhdXNlCiskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIlVQREFURSB0bXAgU0VUIGlkID0gaWQgKyAxOyIpOworIyBBbHNvLCBleGVjdXRl IGEgdGVzdCB0aGF0IHNob3VsZCBzdWNjZWVkIGZvciBJTklUSUFMTFkgREVGRVJSRUQKKyRub2Rl X3N1YnNjcmliZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCBxcSgKK0JFR0lOOworVVBEQVRFIHRt cCBTRVQgaWQgPSBpZCArIDE7CitJTlNFUlQgSU5UTyB0bXAgVkFMVUVTICgzLCAnZm9vYmFyJyk7 CitERUxFVEUgRlJPTSB0bXAgV0hFUkUgaWQgPSAzOworQ09NTUlUOworKSk7Ciskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgVGVz dCBDUkVBVEUgVEFCTEUgd2l0aCB0YWJsZSBjb25zdHJhaW50CisjIFdlIHdpbGwgc2V0IHR3byBj aGVja3MgYW5kIGNvbmR1Y3QgdHdvIGluc2VydHMgdGhhdCBzaG91bGQgZmFpbCByZXNwZWN0aXZl bHkuCiskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCSJDUkVBVEUgVEFC TEUgdG1wIChwcmljZSBpbnQsIGRpc2NvdW50ZWRfcHJpY2UgaW50LCBDSEVDSyAoZGlzY291bnRl ZF9wcmljZSA+IDAgQU5EIHByaWNlID4gZGlzY291bnRlZF9wcmljZSkpOyIpOworJG5vZGVfcHVi bGlzaGVyLT53YWl0X2Zvcl9jYXRjaHVwKCdteXN1YicpOworJG5vZGVfc3Vic2NyaWJlci0+cHNx bCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoMTAwLCAwKTsiLAorCQkJCQkg ICBvbl9lcnJvcl9zdG9wID0+IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJ ICAgc3Rkb3V0ID0+IFwkc3Rkb3V0KTsKKyRzdGRlcnIgPX4gL0VSUk9SOiAgbmV3IHJvdyBmb3Ig cmVsYXRpb24gInRtcCIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidG1wX2NoZWNrIi8KKyAg b3IgZGllICJmYWlsZWQgdG8gcmVwbGljYXRlIHRhYmxlIGNvbnN0cmFpbnQgKGZpcnN0IGNvbmRp dGlvbikgYXQgY3JlYXRpbmcgdGFibGUiOworJG5vZGVfc3Vic2NyaWJlci0+cHNxbCgncG9zdGdy ZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAoNTAsIDEwMCk7IiwKKwkJCQkJICAgb25fZXJy b3Jfc3RvcCA9PiAwLAorCQkJCQkgICBzdGRlcnIgPT4gXCRzdGRlcnIsCisJCQkJCSAgIHN0ZG91 dCA9PiBcJHN0ZG91dCk7Ciskc3RkZXJyID1+IC9FUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9u ICJ0bXAiIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgInRtcF9jaGVjayIvCisgIG9yIGRpZSAi ZmFpbGVkIHRvIHJlcGxpY2F0ZSB0YWJsZSBjb25zdHJhaW50IChzZWNvbmQgY29uZGl0aW9uKSBh dCBjcmVhdGluZyB0YWJsZSI7Ciskbm9kZV9wdWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMn LCAiRFJPUCBUQUJMRSB0bXA7Iik7CisKKyMgVGVzdCBDUkVBVEUgVEFCTEUgV0lUSCBzdHJvcmFn ZV9wYXJhbWV0ZXIKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVB VEUgVEFCTEUgdG1wIChpZCBpbnQpIFdJVEggKGZpbGxmYWN0b3IgPSA4MCk7Iik7Ciskbm9kZV9w dWJsaXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiSU5TRVJUIElOVE8gdG1wIFZBTFVFUyAo MSk7Iik7Ciskbm9kZV9wdWJsaXNoZXItPndhaXRfZm9yX2NhdGNodXAoJ215c3ViJyk7Ciskbm9k ZV9zdWJzY3JpYmVyLT5wc3FsKCdwb3N0Z3JlcycsICJTRUxFQ1QgcmVsb3B0aW9ucyBGUk9NIHBn X2NsYXNzIFdIRVJFIHJlbG5hbWUgPSAndG1wJzsiLAorCQkJCQkgICBvbl9lcnJvcl9zdG9wID0+ IDAsCisJCQkJCSAgIHN0ZGVyciA9PiBcJHN0ZGVyciwKKwkJCQkJICAgc3Rkb3V0ID0+IFwkc3Rk b3V0KTsKKyRzdGRvdXQgPX4gL3tmaWxsZmFjdG9yPTgwfS8KKyAgb3IgZGllICJmYWlsZWQgdG8g cmVwbGljYXRlIHN0b3JhZ2Ugb3B0aW9uIjsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRy ZXN1bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxFIHdpdGggc3RvcmFnZV9wYXJhbWV0ZXIgcmVwbGlj YXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFC TEUgdG1wOyIpOworCisjIFRlc3QgQ1JFQVRFIFRBQkxFIFRBQkxFU1BBQ0UgKGNyZWF0aW5nIGEg dGFibGVzcGFjZSBpcyBub3QgcmVwbGljYXRlZCkKKyMgUHJlcGFyZSB0aGUgZGlyZWN0b3JpZXMg Zm9yIHRoZSBwdWJsaXNoZXIgYW5kIHN1YnNjcmliZXIgZmlyc3QuCitteSAoJGJhc2VkaXIsICR0 YWJsZXNwYWNlX2Rpcik7CisKKyRiYXNlZGlyID0gJG5vZGVfcHVibGlzaGVyLT5iYXNlZGlyOwor JHRhYmxlc3BhY2VfZGlyID0gIiRiYXNlZGlyL3RibHNwY19wdWIiOworbWtkaXIoJHRhYmxlc3Bh Y2VfZGlyKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUg VEFCTEVTUEFDRSBteXRibHNwYyBMT0NBVElPTiAnJHRhYmxlc3BhY2VfZGlyJzsiKTsKKyRiYXNl ZGlyID0gJG5vZGVfc3Vic2NyaWJlci0+YmFzZWRpcjsKKyR0YWJsZXNwYWNlX2RpciA9ICIkYmFz ZWRpci90YmxzcGNfc3ViIjsKK21rZGlyICgkdGFibGVzcGFjZV9kaXIpOworJG5vZGVfc3Vic2Ny aWJlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJDUkVBVEUgVEFCTEVTUEFDRSBteXRibHNwYyBM T0NBVElPTiAnJHRhYmxlc3BhY2VfZGlyJzsiKTsKKworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3Bz cWwoJ3Bvc3RncmVzJywgIkNSRUFURSBUQUJMRSB0bXAgKGlkIGludCkgVEFCTEVTUEFDRSBteXRi bHNwYzsiKTsKKyRub2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJJTlNFUlQg SU5UTyB0bXAgVkFMVUVTICgxKTsiKTsKKyRub2RlX3B1Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1 cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3Rn cmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsiKTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAn Q1JFQVRFIFRBQkxFIFRBQkxFU1BBQ0UgcmVwbGljYXRlZCcpOworJG5vZGVfcHVibGlzaGVyLT5z YWZlX3BzcWwoJ3Bvc3RncmVzJywgIkRST1AgVEFCTEUgdG1wOyIpOworCisjIFRlc3QgQ1JFQVRF IFRBQkxFIE9GIChjcmVhdGluZyBhIHR5cGUgaXMgbm90IHJlcGxpY2F0ZWQpCiskbm9kZV9wdWJs aXNoZXItPnNhZmVfcHNxbCgncG9zdGdyZXMnLCAiQ1JFQVRFIFRZUEUgbXl0eXBlIEFTIChpZCBp bnQsIG5hbWUgdGV4dCwgYWdlIGludCk7Iik7Ciskbm9kZV9zdWJzY3JpYmVyLT5zYWZlX3BzcWwo J3Bvc3RncmVzJywgIkNSRUFURSBUWVBFIG15dHlwZSBBUyAoaWQgaW50LCBuYW1lIHRleHQsIGFn ZSBpbnQpOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIkNSRUFU RSBUQUJMRSB0bXAgT0YgbXl0eXBlOyIpOworJG5vZGVfcHVibGlzaGVyLT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgIklOU0VSVCBJTlRPIHRtcCBWQUxVRVMgKDEsICdiYXInKTsiKTsKKyRub2RlX3B1 Ymxpc2hlci0+d2FpdF9mb3JfY2F0Y2h1cCgnbXlzdWInKTsKKyRyZXN1bHQgPSAkbm9kZV9zdWJz Y3JpYmVyLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywgIlNFTEVDVCBjb3VudCgqKSBmcm9tIHRtcDsi KTsKK2lzKCRyZXN1bHQsIHFxKDEpLCAnQ1JFQVRFIFRBQkxFIE9GIHJlcGxpY2F0ZWQnKTsKKyRu b2RlX3B1Ymxpc2hlci0+c2FmZV9wc3FsKCdwb3N0Z3JlcycsICJEUk9QIFRBQkxFIHRtcCIpOwor CitwYXNzICJEREwgcmVwbGljYXRpb24gdGVzdHMgcGFzc2VkOiI7CisKKyRub2RlX3N1YnNjcmli ZXItPnN0b3A7Ciskbm9kZV9wdWJsaXNoZXItPnN0b3A7CisKK2RvbmVfdGVzdGluZygpOwotLSAK MS44LjMuMQoK --_005_OS0PR01MB571676298B814F7F5690D92994BB9OS0PR01MB5716jpnp_--