From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id D46F51FF163 for ; Thu, 24 Oct 2024 13:01:16 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 26AB1C469; Thu, 24 Oct 2024 13:01:12 +0200 (CEST) To: "pve-devel@lists.proxmox.com" , "f.gruenbichler@proxmox.com" Date: Thu, 24 Oct 2024 11:01:03 +0000 References: <20240930113153.2896648-1-alexandre.derumier@groupe-cyllene.com> <723920338.717.1729678408238@webmail.proxmox.com> <1438328354.1331.1729755720501@webmail.proxmox.com> In-Reply-To: <1438328354.1331.1729755720501@webmail.proxmox.com> MIME-Version: 1.0 Message-ID: List-Id: Proxmox VE development discussion List-Post: From: "DERUMIER, Alexandre via pve-devel" Precedence: list Cc: "DERUMIER, Alexandre" X-Mailman-Version: 2.1.29 X-BeenThere: pve-devel@lists.proxmox.com List-Subscribe: , List-Unsubscribe: , List-Archive: Reply-To: Proxmox VE development discussion List-Help: Subject: Re: [pve-devel] [PATCH v2 pve-storage 2/2] add lvmqcow2 plugin: (lvm with external qcow2 snapshot) Content-Type: multipart/mixed; boundary="===============1971800117012363132==" Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" --===============1971800117012363132== Content-Type: message/rfc822 Content-Disposition: inline Return-Path: X-Original-To: pve-devel@lists.proxmox.com Delivered-To: pve-devel@lists.proxmox.com Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.proxmox.com (Postfix) with ESMTPS id C6F1EC8187 for ; Thu, 24 Oct 2024 13:01:10 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id ACACEC424 for ; Thu, 24 Oct 2024 13:01:10 +0200 (CEST) Received: from PR0P264CU014.outbound.protection.outlook.com (mail-francecentralazlp170120004.outbound.protection.outlook.com [IPv6:2a01:111:f403:c20a::4]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by firstgate.proxmox.com (Proxmox) with ESMTPS for ; Thu, 24 Oct 2024 13:01:06 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=lNAi9Ipa5LTg3ZtQb3slrnoJFwsgQ0i60Y0GSC9jYUp7PmR7QSlZskDrFhbs6qdW2h7syaPEiuomOg1sOCO14esBmQWUiRu+iBck4sFgfIo0UlqBpn5cwOJUye3bzSkgjX6qnpu6e7plubMqAW9iVJck7EjeFZ/XcUAeIr19RI1AA6MbelCjosjhacVadCiAoCef7vV6u/pQE1SjsQFA3FndEwDJC7jMRjhCuh/Xus4aQOz9AHrv+sUdOFj8S/oPF1a3vGn6pzQnDoMEMKzM4refPKO2AOu8aw/BRKVLXkvXCJHJ6elJFYdPhLDIQHTq7ZFZbDO3W6tQ41E08lyQmw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=y7xm0aFFaGdJigWiiZZsIgSEnra7SYE1vCCFmuTQLjc=; b=zUwU7Ubp8lgJlEZ0DIbFe5KDxw2ZOxH6o8mAESVY40RBQedMXtqhxzLmX//TBpNlPWihn9zhlyendjSW2FWznmxUoEL7hNHwfefiVq7XievqK9OL7UL/m30WzD8kxetfYlETP5PSoMfHsqeASheQk3wlDxVUPidevRtqwyWEa9+qJgU56umQuGzi87Am/FFoVIlu/vk/QvaBhi8mY1DX30EmQ0oWzzMNJHwcw4GqYvPe1Z2k8PL493V/0+axO/QpOVx4J9p1CCQVJJwAUTTPU30wq+Tz+2sDdJ5BtihjFg59BlBQY3oehSCTUucoRouqpwOsPVpMwWHwuga0JnT10A== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=groupe-cyllene.com; dmarc=pass action=none header.from=groupe-cyllene.com; dkim=pass header.d=groupe-cyllene.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=groupecyllene.onmicrosoft.com; s=selector2-groupecyllene-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=y7xm0aFFaGdJigWiiZZsIgSEnra7SYE1vCCFmuTQLjc=; b=pVvE+YjAhcKXZMCVE5uGhtyVG/hYko2/nkk3ei273tIupmsLxyHttI0rhxYeS5eQ66OnumwymjSMgp9w+X9d4ugazrFRglBaWnPRHjvzW4ubrIj8zsZX/JdQz4NBrFX81gb01WIV06Ze0w3wKtyL1vA2tyKYsemKwyqAUbBN19g= Received: from PAZP264MB3686.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:d8::7) by PATP264MB4857.FRAP264.PROD.OUTLOOK.COM (2603:10a6:102:429::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8093.17; Thu, 24 Oct 2024 11:01:04 +0000 Received: from PAZP264MB3686.FRAP264.PROD.OUTLOOK.COM ([fe80::4c89:3ea0:833e:abb]) by PAZP264MB3686.FRAP264.PROD.OUTLOOK.COM ([fe80::4c89:3ea0:833e:abb%7]) with mapi id 15.20.8093.014; Thu, 24 Oct 2024 11:01:04 +0000 From: "DERUMIER, Alexandre" To: "pve-devel@lists.proxmox.com" , "f.gruenbichler@proxmox.com" Subject: Re: [pve-devel] [PATCH v2 pve-storage 2/2] add lvmqcow2 plugin: (lvm with external qcow2 snapshot) Thread-Topic: [pve-devel] [PATCH v2 pve-storage 2/2] add lvmqcow2 plugin: (lvm with external qcow2 snapshot) Thread-Index: AQHbEyxrsu1lbEDa8UmEm4HrVQzY/LKUQg8AgAA7IQCAASziAIAAN5wA Date: Thu, 24 Oct 2024 11:01:03 +0000 Message-ID: References: <20240930113153.2896648-1-alexandre.derumier@groupe-cyllene.com> <723920338.717.1729678408238@webmail.proxmox.com> <1438328354.1331.1729755720501@webmail.proxmox.com> In-Reply-To: <1438328354.1331.1729755720501@webmail.proxmox.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.52.0-1build2 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=groupe-cyllene.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: PAZP264MB3686:EE_|PATP264MB4857:EE_ x-ms-office365-filtering-correlation-id: 381bfefd-162b-4b45-ef18-08dcf41b2753 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|376014|10070799003|366016|1800799024|38070700018; x-microsoft-antispam-message-info: =?utf-8?B?S1pRbUpmTU5yNUt6Yk84QjVrMHFaZDArUGlRZFIweWg1TDJmL1g2RkE2T2t5?= =?utf-8?B?VTgvdzAzdjBWMVpyY0Z3ZXpKUk90U25VRDVuRTR6YjMxclRnNms5aG1VK1hS?= =?utf-8?B?bkVVVzlsdGs4VC9MR2lIbXFzVUFNeTQ4TDJPaThPdTFwM1oyMlZQelM3K1Qw?= =?utf-8?B?TStuTWViaFdNM09VUFZkMzhSZkNsZVYwSE1tNkp3ZWVtaFd4S0lkaC9KQlI2?= =?utf-8?B?aDdlZnJzWEdSeTZoem81MGJDMjZaMmZZZC9HK1Z1cTAvU0gxbGI4UmZWUjVm?= =?utf-8?B?ZkNFdENyV3V2MDdLM2dpdkMwR3gzUFNQNFE0ZTMyS0FkcUV2dDNXTXBTN2FB?= =?utf-8?B?Y2JML3pxbHUzQ3ozczBac0ttR0lYVS9VZnRGMVRSRFNZa3laWGd5bXVaa3Vy?= =?utf-8?B?V21MaU1hZEZGMHQ3YUZaRnl1aVFUclp2THhMREFOajhlK1JoQVV2dnVpZ21q?= =?utf-8?B?S0cxV0QySzRmZXp3M3NFZjVheVJzUi9GQk1vWS9yQ2hwZ1R4bDFnUFozOXVr?= =?utf-8?B?S1JwTmI1d3FuVGlsSkR1akR6MFNvMkJSS0U2dEJUcnV3TU43dEpEN0Vac052?= =?utf-8?B?elZrbUd3ZFBOVlNCa1IveDVSZ2hqU3QyVVdIbUZReWhSeHpBZUQ2czk2U1cz?= =?utf-8?B?cGxHTDkyYVJHQzBVV0VJMlhxcnBZaXBHN3pRSUZENEtPZEpybG5uSThobXI0?= =?utf-8?B?S1E4SVdOVnRlTy9OMENrMmNYNk9qaG5kcXcra3U2aDV1NUwycytMV0JzdjZN?= =?utf-8?B?MmxJNUI2M2VETVF1R1MzSFdBOS80STFQUkxoNXZ0STNFNkRDaFU4QTNVUlo0?= =?utf-8?B?L1p6akV1dkx3NCswUG9vOE1sN2NaZER1ZlFld205R3VLMUVNUCtDTHhNNm9z?= =?utf-8?B?cDltU0VSTDFuT1pBZXQvQis1LzNnNHlLOFBvaHRNdEVKK0JpUlV1dGJ5NEV3?= =?utf-8?B?VjZmSm9nYy9hMVBNV1g0VkYwdWtIWGpPZXFJWldVMmpBTGIxbjQ5VFBHdHVr?= =?utf-8?B?SG1xZ1RIczRaNmRaZ0E3azlrTkpGWVVuanFHZHdnSUdaamI5dVFyWlVZNzA3?= =?utf-8?B?RHNCZnl1Zm9ibGVGZjZoa3B5ZEdLK0luRUVYeG5FWUk3cDVqUmZEN2R3UWph?= =?utf-8?B?Ry9takNaLzlMM01odWEzY2NKRWFtWW9wbWsrSmVRZU5Mb3k3aGxxVGhhb2tj?= =?utf-8?B?UnJhaENERkF5bkdHdVJlVW1GZnZmUnpaTWdvdzJHaHljeWNpWkFveVZPekFW?= =?utf-8?B?cGM1Zllmay9GdVNwazZMWlMxQkRta2ZoVGRFcHNZNVpOSkdIbDRLK1NtN3RL?= =?utf-8?B?SzNJN2I3anQwY010TEpWWXFwVGhaMUV4UGZaVERGdy9NYTZQUmlVV25aMW1N?= =?utf-8?B?OStWZFhQQnFGSXlLYUdkWDUzQi9JOTNkM0RhMnFkNzFibklORVRmWXNnNEYz?= =?utf-8?B?UnQ4UTVxNVJNeUlwWnhIRG9kV0pQQ3cxVks1bGNtL2VHK0J3YnJuM0dNVEJl?= =?utf-8?B?MnkzY0g4UVRHemNTVjh0N2JQSEJqbkliWXU0aU5RWlZEZGl2anpSWmZyUmhV?= =?utf-8?B?UTZacjhJOVBJWkxhM0FPTG5nN0RGUVZOd1VvUmxOSGNKWEZCVGZncTdFeGd5?= =?utf-8?B?TlJ4RnZNcDNESTh3eFY3d2VpUlF5MnRNb3l2S290dmNJUkJ6cTVqRjdtQ2hz?= =?utf-8?B?b1d0U0cwSkcrMldYS2t4WjFEakhsYmtzbXYzT21iQURManZjWWdDZlMxTGhJ?= =?utf-8?Q?o9XKglhYN4po1O33rFm54saDE1TprOLQaKIk8Kx?= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAZP264MB3686.FRAP264.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(376014)(10070799003)(366016)(1800799024)(38070700018);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?eW1rVUFuUjZSeXU5eklYck1FK05QWmJqa3Qza0ZrS1lneFRNTnlvU0Y2ZnRv?= =?utf-8?B?UFRsTG9jWmQ0K2QxODVuTVIzV1N0TEZIRWloWDhLbFByT084MDM3TExJbTZH?= =?utf-8?B?M3NXSVRkMEJqcDc1aWNUNjVhSjlXc3pBM21aSUNGeXd1UUlYMHRJZjZncHRq?= =?utf-8?B?U1JrblE4RWRjS2hLUjJQUC8zTHFNRis1Z3NTL0g3cXQ3MEo2aWFwTWhkVWxy?= =?utf-8?B?UmlNMERuZlF4VmZBdU9VY0dQNS8xMjlGWG42V245OGpONXFtYTAwNDFGVmZJ?= =?utf-8?B?QWF3N2JGYkdQaldGOHpDbDR2TmUzZ0pXRlBPVnllVWVVZ3JjSUtUMlQxdWsw?= =?utf-8?B?dGJoTnR4VGJNS0ZTeW4zQjNWbndhOFBtVGxQZ3BnRmk5T3FjVWpNWkVhL0to?= =?utf-8?B?Y1hWQVp5aVFKS1R1NW9waUduVVJVdWtVVGpMbTBjQ3JVMjloMDh1OUFycFhO?= =?utf-8?B?dUh6d1BSZmZmKzlqb1NZMVM5UVVwZzQ1NCtVenVuY3hza1d5TWpvR1VZSnkw?= =?utf-8?B?aFg3Q201Z3RKS29icHRLOVhOVjBpVTBzMHUrUnlHd1FWb0JEU0pJQWNQWVhC?= =?utf-8?B?dzNDVUJNekVBR1NtYUx5MFQ1TGJTM08xSjFYdk5JZ1F3aXJGcjhqZlZnNFRI?= =?utf-8?B?SUFabEVCRjgzbWMwQ0tnSmx4V3g5Z21FK3hWQStpSFlrN3VFVFllaCt2OVdl?= =?utf-8?B?Zy9RYnNYZUxOUUYySEtuSVo0L3dlTVJkTDhqKzhRcG9oNS9JVFRqbzllMWRM?= =?utf-8?B?MHBEakJ1RmZTMytzdWZzSUQ1MG5YUDJyd004R0FBVUhENU1qQkJoZlRDUTJh?= =?utf-8?B?TFN3T2xiSmFMZmZsRjQyZlZqdDh6dzRjUjl5TkJYSTRQZ3FhR0dFTEhPQlpk?= =?utf-8?B?cUpQTVovdzZCMUY5U0wzdnNOUVFrRXRyZkNoekgxanJzZk4vMFB5WmxvSkFn?= =?utf-8?B?bWpIUWNHZlZSdWZucXFYZ1BmYmE0LzFiaDJjY1RnNDIzQVhHMmNRMUlRUE9q?= =?utf-8?B?bGpRSFV2d29tR0lxbUkzNzE1a0hwL0VxcnMwNjZvVFA2L1cvZHR3ODQ5aTMv?= =?utf-8?B?RFFpNldRclRpZFA0V3dhdDVGb0hJU1V3T3Era2E3ODVrdTB3a1RVRHNnTE1K?= =?utf-8?B?VE1xRkg3RUNDTmdXcVVFUDZVL05XbklSejhNQWNIU0lpSzk4Q2pLejR0NGJC?= =?utf-8?B?bG1zeTkvRHdlWW04M0d2S0d2UlhLdGRkWW1WRVRaT0YvWGVqb3dhVmhaQ0xy?= =?utf-8?B?bUhtT1JiS1RJOFV4K211UDZHM3dhaFlPTEJXTk9BRFhEZXF2NEZoOGE0azZY?= =?utf-8?B?SjRvUFpWR2Q3U1YxVmpQMXkxRTg3WFZPaGxzTkd1cldzbGE0Z3M0b1BXbzA3?= =?utf-8?B?Wld3R21SbnlDc1ZCUFJEcW5rWjFCYjl4L2lNTVcyeitPS2E2NG9DMFpRL0R4?= =?utf-8?B?TWQ3c3YxUXAyK2xSa3hzY3RvMC8rRXByVTh4N2l0VXp1V3JIWVJNZklIdURy?= =?utf-8?B?eTVCUFZ1VVpOZWF3dEhLZU9OYW5GcllxVXBjNUJZYkZxVUpzVXRZeEIvdlFl?= =?utf-8?B?dUNXa2RpZHRUNG91Z0JMcnloOHR0c25rN3Qyby9vQmRzVUc1TWI5T2ZjU3No?= =?utf-8?B?RGZPZlBrUkErekVPSTBBRCtnWmhzbVc1K3p1MFpTSWd5TENENiswTzljUndR?= =?utf-8?B?Qms0WHVHV2FrRlBldDhKYW9TaEgxcXc1SFJZNU5EQ2tNVVNBYUZCR3ZLNGt0?= =?utf-8?B?eDc4SWtzYURpanZvLy93SzRpUW1rNXVjU21wSHYyMlBwdnRYNWpuTXhIMEFq?= =?utf-8?B?TWlWU1lvRFNIa0lZWkcxV2lRNFl4WFNmb2g5dHN2ODlLZG4rQ2dUL0NxT2Vk?= =?utf-8?B?NVZLU1dUY1VnUm8rRitRWUlZYlh6Q0hZMnZtcjlqL2x3ZnM2WnE2R3RHNTFG?= =?utf-8?B?TDhzWnJXdEZvbVB2SW1WMXUyVERoSGExTHovUTlpRTEzbjl1bkVOVnpPTE1m?= =?utf-8?B?dTJ1LyswMkFXTm1vQkJKYjhQQTBtc0JhU1FrdnA2aExKR1o5SkY3cWZVYitx?= =?utf-8?B?WHZyVFEzT0ZHNjZJeFVCcnNLdFEyY1Q1dUxaU2ZZV0R3WHRPTTJmM251Wmhr?= =?utf-8?B?LzVTdGMrM0JOVWpxZW9jTk5uM0NNdDdpYUFEVlRrVS9lWEhnTVkrNXFtNFdJ?= =?utf-8?Q?6ii2i4PZGNl5MeF4HGh0irMGE0EOsQszIcYuDLpjk67a?= Content-Type: text/plain; charset="utf-8" Content-ID: Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: groupe-cyllene.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAZP264MB3686.FRAP264.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 381bfefd-162b-4b45-ef18-08dcf41b2753 X-MS-Exchange-CrossTenant-originalarrivaltime: 24 Oct 2024 11:01:04.0547 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: ee11ccf7-112c-4284-848b-f229745e715b X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 9pLaVnkPPYb/MaNTYLlSbrhR7yTAZ5Q7VkIYUnT5p3L/yyzulS4veYyUI/g+tIn8yMYlXZu/IPyd3ZK9yCx7U8tHqk7A24eCUC3ywqJ3uOhcr3A9xtsvETc8sy/Q+ouG X-MS-Exchange-Transport-CrossTenantHeadersStamped: PATP264MB4857 X-SPAM-LEVEL: Spam detection results: 0 ARC_SIGNED 0.001 Message has a ARC signature ARC_VALID 0.001 Message has a valid ARC signature AWL -0.446 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DMARC_PASS -0.1 DMARC pass policy SPF_HELO_PASS -0.001 SPF: HELO matches SPF record SPF_PASS -0.001 SPF: sender matches SPF record URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [groupecyllene.onmicrosoft.com,pbsplugin.pm,cyllene.com,lvmqcow2plugin.pm,nongnu.org,lvmthinplugin.pm,esxiplugin.pm,defectivebydesign.org] URI_NOVOWEL 0.5 URI hostname has long non-vowel sequence VGhhbmtzIEZhYmlhbiBmb3IgeW91ciB0aW1lICEgDQoNCkkgaGF2ZSB0cmllZCB0byByZXNwb25k IGFzIG11Y2ggYXMgcG9zc2libGUuIChJJ20gZ29pbmcgdG8gSG9saWRheSBmb3INCjEgd2VlayB0 b21vcnJvdywgc28gc29ycnkgaWYgSSBkb24ndCByZXBseSB0byBhbGwgeW91ciBjb21tZW50cykN Cg0KDQoNCi0tLS0tLS0tIE1lc3NhZ2UgaW5pdGlhbCAtLS0tLS0tLQ0KRGU6IEZhYmlhbiBHcsO8 bmJpY2hsZXIgPGYuZ3J1ZW5iaWNobGVyQHByb3htb3guY29tPg0Kw4A6ICJERVJVTUlFUiwgQWxl eGFuZHJlIiA8YWxleGFuZHJlLmRlcnVtaWVyQGdyb3VwZS1jeWxsZW5lLmNvbT4sIHB2ZS0NCmRl dmVsQGxpc3RzLnByb3htb3guY29tIDxwdmUtZGV2ZWxAbGlzdHMucHJveG1veC5jb20+DQpPYmpl dDogUmU6IFtwdmUtZGV2ZWxdIFtQQVRDSCB2MiBwdmUtc3RvcmFnZSAyLzJdIGFkZCBsdm1xY293 MiBwbHVnaW46DQoobHZtIHdpdGggZXh0ZXJuYWwgcWNvdzIgc25hcHNob3QpDQpEYXRlOiAyNC8x MC8yMDI0IDA5OjQyOjAwDQoNCg0KPiBERVJVTUlFUiwgQWxleGFuZHJlIDxhbGV4YW5kcmUuZGVy dW1pZXJAZ3JvdXBlLWN5bGxlbmUuY29tPiBoYXQgYW0NCj4gMjMuMTAuMjAyNCAxNTo0NSBDRVNU IGdlc2NocmllYmVuOg0KPiANCj4gwqANCj4gPiA+IEkgYW0gbm90IHlldCBjb252aW5jZWQgdGhp cyBpcyBzb21laG93IGEgZ29vZCBpZGVhLCBidXQgbWF5YmUgeW91DQo+ID4gPiBjYW4NCj4gPiA+ IGNvbnZpbmNlIG1lIG90aGVyd2lzZSA7KQ0KDQo+PkkgbWF5YmUganVkZ2VkIHRoaXMgdG9vIHF1 aWNrbHkgLSBJIHRob3VnaHQgdGhpcyB3YXMgY29tYmluaW5nIExWTSArDQo+PmEgZGlyLWJhc2Vk IHN0b3JhZ2UsIGJ1dCB0aGlzIGlzIHB1dHRpbmcgdGhlIHFjb3cyIG92ZXJsYXlzIG9uIExWcywN Cj4+d2hpY2ggSSBtaXNzZWQgb24gdGhlIGZpcnN0IHBhc3MhDQoNCkFoIG9rICEgXl9eICB5ZXMs IHRoaXMgaXMgcmVhbGx5IDEwMCUgbHZtIChmb3Igc2hhcmVkIGx2bSkNCg0KDQo+ID4gPiB2YXJp YW50IEE6IHRoaXMgaXMganVzdCB1c2VmdWwgZm9yIHZlcnkgc2hvcnQtbGl2ZWQgc25hcHNob3Rz DQo+ID4gPiB2YXJpYW50IEI6IHRoZXNlIHNuYXBzaG90cyBhcmUgc3VwcG9zZWQgdG8gYmUgbG9u Zy1saXZlZA0KPiANCj4gQ2FuIHlvdSBkZWZpbmVkICJzaG9ydCAiLyAibG9uZyLCoCA/IGFuZCB0 aGUgZGlmZmVyZW50IHVzZWNhc2UgPw0KPiANCj4gYmVjYXVzZSBmb3IgbWUsIGEgc25hcHNob3Qg aXMgYSBzbmFwc2hvdC4gU29tZXRpbWUgSSB0YWtlIGEgc25hcHNob3QNCj4gYmVmb3JlIGRvaW5n IHNvbWUgY3JpdGljYWwgY2hhbmdlcywgYnV0IEkgY2FuJ3Qga25vd24gaWYgSSBuZWVkIHRvDQo+ IHJvbGxiYWNrIGluIG5leHQgMmgsIG9yIG5leHQgbW9udGguDQoNCj4+eWVzLCB0aGlzIHdvdWxk IGJlIGFuIGV4YW1wbGUgb2YgYSBzaG9ydC1saXZlZCBzbmFwc2hvdA0KwqANCm9rDQo+IEkgdGhp bmsgdGhhdCAibG9uZy1saXZlZCIgdXNlY2FzZSBpcyBiYWNrdXAgKGJ1dCB3ZSBkb24ndCBuZWVk IGl0KSwNCj4gb3IgcmVwbGljYXRpb24gKHRoaXMgY291bGQgYXBwbHkgaGVyZSwgaWYgd2Ugd2Fu dCB0byBhZGQgcmVwbGljYXRpb24NCj4gZm9yIGRpc2FzdGVyIHJlY292ZXJ5KQ0KDQo+PmJhY2t1 cCB3b3VsZCBhbHNvIGJlIHNob3J0LWxpdmVkIHVzdWFsbHkgKHRoZSBzbmFwc2hvdCBpcyBqdXN0 IHRvDQo+PnRha2UgdGhlIGJhY2t1cCwgbm90IHRvIGtlZXAgYSBiYWNrdXApLiBsb25nLWxpdmVk IHVzdWFsbHkgaXMNCj4+c29tZXRoaW5nIGxpa2UgInRha2UgZGFpbHkgc25hcHNob3QgYW5kIGtl ZXAgZm9yIGEgZmV3IHdlZWtzIGZvciBmaWxlDQo+PnJlY292ZXJ5IiwgaW4gYWRkaXRpb24gdG8g cmVndWxhciBiYWNrdXBzLiBvciAic25hcHNob3QgYmVjYXVzZSB3ZQ0KPj5qdXN0IGhhZCBhbiBp bmNpZGVuY2UgYW5kIG1pZ2h0IG5lZWQgdGhpcyBmb3IgZm9yZW5zaWNzIGluIGEgZmV3DQo+Pm1v bnRocyIgKGNhbiBhbHNvIGJlIHNvbHZlZCB3aXRoIGJhY2t1cHMsIG9mIGNvdXJzZSA7KSkuDQoN Cj4+dGhlIG1haW4gZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB0d28gaXMgLSBmb3Igc2hvcnQtbGl2 ZWQgc25hcHNob3RzDQo+PnBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucyByZWxhdGVkIHRvIHNuYXBz aG90cyBleGlzdGluZyBhcmUgbm90IHRoYXQNCj4+aW1wb3J0YW50LiBJIGNhbiBsaXZlIHdpdGgg YSBmZXcgaG91cnMgb2YgZGVncmFkZWQgcGVyZm9ybWFuY2UsIGlmDQo+PnRoZSBzbmFwc2hvdCBp cyBwYXJ0IG9mIHNvbWUgaW1wb3J0YW50IHByb2Nlc3Mvd29yayBmbG93LiB3aXRoIGxvbmctDQo+ PmxpdmVkIHNuYXBzaG90cyB0aGVyZSBpcyBhIHJlcXVpcmVtZW50IGZvciB0aGVtIHRvIG5vdCBo dXJ0DQo+PnBlcmZvcm1hbmNlIGp1c3QgYnkgZXhpc3RpbmcsIGJlY2F1c2Ugb3RoZXJ3aXNlIHlv dSBjYW4ndCB1c2UgdGhlbS4NCj4+dGhlcmUgaXMgYSBzZWNvbmQgcmVhc29uIHdoeSBsb25nLWxp dmVkIHNuYXBzaG90cyBjYW4gYmUgaW1wb3NzaWJsZSANCg0Kb2ssIHNvIGhlcmUsIHdpdGggcWNv dzIgZm9ybWF0LCBwZXJmb3JtYW5jZSBzaG91bGRuJ3QgYmUgYSBwcm9ibGVtLg0KKFRoYXQncyB0 aGUgd2hvbGUgcG9pbnQgb2YgdGhpcyBwYXRjaCwgdXNpbmcgcWNvdzIgZm9ybWF0IGluc3RlYWQg YmFzaWMNCnNsb3cgbHZtIHNuYXNwaG90KQ0KDQo+PmlmIHlvdSBuZWVkIHRvIGRlY2lkZSB1cC1m cm9udCBob3cgImJpZyIgdGhlIGRlbHRhIG9mIHRoYXQgc25hcHNob3QNCj4+Y2FuIGdyb3cgYXQg bW9zdCwgdGhlbiBpbiBQVkUgY29udGV4dCwgeW91IGFsd2F5cyBuZWVkIHRvIGFsbG9jYXRlDQo+ PnRoZSBmdWxsIHZvbHVtZSBzaXplIChyZWd1bGFyIHRoaWNrIExWTSBoYWQgYm90aCBpc3N1ZXMg LSBiYWQNCj4+cGVyZm9ybWFuY2UsIGFuZCBuZXcgd3JpdGVzIGdvaW5nIGludG8gYSB0aGljayBz bmFwc2hvdCB2b2x1bWUpLg0KDQphYm91dCB0aGljayBzbmFwaG90IHZvbHVtZSwgdGVjaG5pY2Fs bHksIGl0IGNvdWxkIGJlIHBvc3NpYmxlIHRvIGNyZWF0ZQ0Kc21hbGxlciBsdm0gdm9sdW1lIHRo YW4gdGhlIHFjb3cyIHZpcnR1YWwtc2l6ZSwgYW5kIGR5bmFtaWNhbGx5IGV4dGVuZA0KaXQuIG92 aXJ0IGlzIGRvaW5nIGl0IGxpa2UgdGhpcy4gKEkgbmF2ZSBzZW5kIGEgcHJlbGltYXJ5IHBhdGNo IGluDQpzZXB0ZW1iZXIsIGJ1dCBmb3Igbm93LCBJJ2xsIGxpa2UgdG8ga2VlcCBpdCBzaW1wbGUg d2l0aCB0aGljaw0Kc25hcHNob3RzIHZvbHVtZSkuDQoNCg0KPj5pZiB5b3UgY2FuIHN1cHBvcnQg bG9uZy1saXZlZCBzbmFwc2hvdHMsIHRoZW4geW91IGF1dG9tYXRpY2FsbHkgYWxzbw0KPj5zdXBw b3J0IHNob3J0LWxpdmVkIHNuYXBzaG90cy4gdGhlIG90aGVyIGRpcmVjdGlvbiBkb2Vzbid0IGhv bGQuDQo+PnNpbmNlIFBWRSBvbmx5IGhhcyBvbmUga2luZCBvZiBzbmFwc2hvdHMsIHRoZXkgbmVl ZCB0byBiZSB1c2VmdWwgZm9yDQo+PmxvbmctbGl2ZWQgc25hcHNob3RzLg0KDQpvayBnb3QgaXQu DQo+ID4gPiBBIGlzIG5vdCBzb21ldGhpbmcgd2Ugd2FudC4gd2UgaW50ZW50aW9uYWxseSBkb24n dCBoYXZlIG5vbi10aGluDQo+ID4gPiBMVk0NCj4gPiA+IHNuYXBzaG90cyBmb3IgZXhhbXBsZS4N Cj4gDQo+IEFGQUlLLCB3ZSBuZXZlciBoYWQgaW1wbGVtZW50ZWQgaXQgYmVjYXVzZSBMVk0gc25h c3Bob3QgaXMgc2xvdyBhcw0KPiBoZWxsLihhcyBhIGx2bSBleHRlbnQgYXJlIGFyb3VuZCA0TUIs IGlmIHlvdSB3YW50IDRrIG9uIGEgc25hcHNob3QsDQo+IHlvdQ0KPiBuZWVkIHRvIHJlcmVhZCBh bmQgcmV3cml0ZSB0aGUgNE1CLMKgIHNvIGFyb3VuZCAxMDAweCBvdmVyLQ0KPiBhbXBsaWZpY2F0 aW9uIGFuZCBzbG93IGlvcHMpDQoNCj4+c2VlIGFib3ZlIC0gdGhlcmUncyB0d28gaXNzdWVzLCBv bmUgaXMgcGVyZm9ybWFuY2UsIHRoZSBvdGhlciBpcyB0aGF0DQo+PnlvdSBuZWVkIHRvIGVpdGhl cg0KPj4tIG1ha2UgdGhlIHNuYXBzaG90IHNtYWxsZXIgdGhhbiB0aGUgb3JpZ2luYWwgdm9sdW1l IChhbmQgcmlzaw0KPj5ydW5uaW5nIG91dCBvZiBzcGFjZSkNCj4+LSBtYWtlIHRoZSBzbmFwc2hv dCBhcyBiaWcgYXMgdGhlIG9yaWdpbmFsIHZvbHVtZSAoYW5kIGJsb3cgdXAgc3BhY2UNCj4+cmVx dWlyZW1lbnRzKQ0KPj4NCj4+KHRoaWNrKSBMVk0gc25hcHNob3RzIGJhc2ljYWxseSBiYXJlbHkg d29yayBmb3IgdGhlICJ0YWtlIGENCj4+Y29uc2lzdGVudCBiYWNrdXAgZHVyaW5nIHF1aWV0IHBl cmlvZHMiIHVzZSBjYXNlLCBhbmQgbm90IG11Y2ggZWxzZS4NCg0KDQo+IFRoaXMgaXMgcmVhbGx5 IHRoZSBtYWluIGJsb2NrZXIgZm9yIG15IGN1c3RvbWVycyBtaWdyYXRpbmcgZnJvbQ0KPiB2bXdh cmUNCj4gKGFuZCB0byBiZSBob25lc3QgSSBoYXZlIHNvbWUgb2YgdGhlbSBnb2luZyB0byBvcmFj bGUgb3ZsbSAod2l0aA0KPiBvdmlydCksIGJlY2F1c2Ugb3ZpcnQgc3VwcG9ydCBpdCB0aGlzIHdh eSkuIA0KDQo+ID4gPiBCIG9uY2UgSSBjcmVhdGUgYSBzaW5nbGUgc25hcHNob3QsIHRoZSAib3Jp Z2luYWwiIHN0b3JhZ2Ugb25seQ0KPiA+ID4gY29udGFpbnMgdGhlIGRhdGEgd3JpdHRlbiB1cCB0 byB0aGF0IHBvaW50LCBhbnl0aGluZyBlbHNlIGlzDQo+ID4gPiBzdG9yZWQNCj4gPiA+IG9uIHRo ZSAic25hcHNob3QiIHN0b3JhZ2UuIHRoaXMgbWVhbnMgbXkgc25hcHNob3Qgc3RvcmFnZSBtdXN0 IGJlDQo+ID4gPiBhdA0KPiA+ID4gbGVhc3QgYXMgZmFzdC9nb29kL3NoYXJlZC8uLiBhcyBteSBv cmlnaW5hbCBzdG9yYWdlLiBpbiB0aGF0DQo+ID4gPiBjYXNlLCBJDQo+ID4gPiBjYW4ganVzdCB1 c2UgdGhlIHNuYXBzaG90IHN0b3JhZ2UgZGlyZWN0bHkgYW5kIGRpdGNoIHRoZSBvcmlnaW5hbA0K PiA+ID4gc3RvcmFnZT8NCj4gDQo+IFNvcnJ5LCBidXQgSSBkb24ndCB1bmRlcnN0YW5kIHdoeSB5 b3UgYXJlIHRhbGtpbmcgYWJvdXQNCj4gb3JpZ2luYWwvc25hcHNob3Qgc3RvcmFnZSA/IEkgbmV2 ZXIgaGF2ZSB0aGlua2VkIHRvIHVzZSBhbm90aGVyDQo+IHN0b3JhZ2UNCj4gZm9yIGV4dGVybmFs IHNuYXBzaG90Lg0KPiANCj4gVGhlIHBhdGNoIGlzIHJlYWxseSB0byBhZGQgZXh0ZXJuYWwgc25h cHNob3Qgb24gc2FtZSBsdm0gc3RvcmFnZSwNCj4gdGhyb3VnaCBsdm0gYWRkaXRpb25hbCB2b2x1 bWUsIGJ1dCB3aXRoIHFjb3cyIGZvcm1hdCB0byBoYXZlIGdvb2QNCj4gcGVyZm9ybWFuY2UgKHZz IHNsb3cgbHZtIHNuYXBzaG90KQ0KDQpzZWUgYWJvdmUgLSBJIG1pc3JlYWQgYW5kIGFuc3dlcmVk IHRvbyBxdWlja2x5Lg0KDQo+PkkgdG9vayBhIGNsb3NlciBsb29rIGFuZCByZXBsaWVkIGlubGlu ZSBiZWxvdyB3aXRoIHNvbWUgY29tbWVudHMgLQ0KPj5tdWNoIG9mIGl0IG1pbWljcyB0aGUgY29t bWVudHMgZm9yIHRoZSBkaXIgcGx1Z2luLi4NCg0KKEknbGwgZG8gYSBmdWxsIHJld29yayB3aXRo IHNuYXBzaG90bmFtZSBsaWtlIGZvciBkaXIgcGx1Z2luKQ0KDQo+ID4gU2lnbmVkLW9mZi1ieTog QWxleGFuZHJlIERlcnVtaWVyIDxhbGV4YW5kcmUuZGVydW1pZXJAZ3JvdXBlLQ0KPiA+IGN5bGxl bmUuY29tPg0KPiA+IC0tLQ0KPiA+IMKgc3JjL1BWRS9TdG9yYWdlLnBtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHzCoMKgIDIgKw0KPiA+IMKgc3JjL1BWRS9TdG9yYWdlL0x2bVFjb3cy UGx1Z2luLnBtIHwgNDYwDQo+ID4gKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrDQo+ID4g wqBzcmMvUFZFL1N0b3JhZ2UvTWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMyArLQ0K PiA+IMKgMyBmaWxlcyBjaGFuZ2VkLCA0NjQgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQ0K PiA+IMKgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9QVkUvU3RvcmFnZS9Mdm1RY293MlBsdWdpbi5w bQ0KPiA+IA0KPiA+IGRpZmYgLS1naXQgYS9zcmMvUFZFL1N0b3JhZ2UucG0gYi9zcmMvUFZFL1N0 b3JhZ2UucG0NCj4gPiBpbmRleCA1N2IyMDM4Li4xMTk5OThmIDEwMDc1NQ0KPiA+IC0tLSBhL3Ny Yy9QVkUvU3RvcmFnZS5wbQ0KPiA+ICsrKyBiL3NyYy9QVkUvU3RvcmFnZS5wbQ0KPiA+IEBAIC0y OCw2ICsyOCw3IEBAIHVzZSBQVkU6OlN0b3JhZ2U6OlBsdWdpbjsNCj4gPiDCoHVzZSBQVkU6OlN0 b3JhZ2U6OkRpclBsdWdpbjsNCj4gPiDCoHVzZSBQVkU6OlN0b3JhZ2U6OkxWTVBsdWdpbjsNCj4g PiDCoHVzZSBQVkU6OlN0b3JhZ2U6Okx2bVRoaW5QbHVnaW47DQo+ID4gK3VzZSBQVkU6OlN0b3Jh Z2U6Okx2bVFjb3cyUGx1Z2luOw0KPiA+IMKgdXNlIFBWRTo6U3RvcmFnZTo6TkZTUGx1Z2luOw0K PiA+IMKgdXNlIFBWRTo6U3RvcmFnZTo6Q0lGU1BsdWdpbjsNCj4gPiDCoHVzZSBQVkU6OlN0b3Jh Z2U6OklTQ1NJUGx1Z2luOw0KPiA+IEBAIC01NCw2ICs1NSw3IEBAIG91ciAkS05PV05fRVhQT1JU X0ZPUk1BVFMgPSBbJ3JhdytzaXplJywNCj4gPiAndGFyK3NpemUnLCAncWNvdzIrc2l6ZScsICd2 bWRrK3NpemUnLA0KPiA+IMKgUFZFOjpTdG9yYWdlOjpEaXJQbHVnaW4tPnJlZ2lzdGVyKCk7DQo+ ID4gwqBQVkU6OlN0b3JhZ2U6OkxWTVBsdWdpbi0+cmVnaXN0ZXIoKTsNCj4gPiDCoFBWRTo6U3Rv cmFnZTo6THZtVGhpblBsdWdpbi0+cmVnaXN0ZXIoKTsNCj4gPiArUFZFOjpTdG9yYWdlOjpMdm1R Y293MlBsdWdpbi0+cmVnaXN0ZXIoKTsNCj4gPiDCoFBWRTo6U3RvcmFnZTo6TkZTUGx1Z2luLT5y ZWdpc3RlcigpOw0KPiA+IMKgUFZFOjpTdG9yYWdlOjpDSUZTUGx1Z2luLT5yZWdpc3RlcigpOw0K PiA+IMKgUFZFOjpTdG9yYWdlOjpJU0NTSVBsdWdpbi0+cmVnaXN0ZXIoKTsNCj4gPiBkaWZmIC0t Z2l0IGEvc3JjL1BWRS9TdG9yYWdlL0x2bVFjb3cyUGx1Z2luLnBtDQo+ID4gYi9zcmMvUFZFL1N0 b3JhZ2UvTHZtUWNvdzJQbHVnaW4ucG0NCj4gPiBuZXcgZmlsZSBtb2RlIDEwMDY0NA0KPiA+IGlu ZGV4IDAwMDAwMDAuLjY4Yzg2ODYNCj4gPiAtLS0gL2Rldi9udWxsDQo+ID4gKysrIGIvc3JjL1BW RS9TdG9yYWdlL0x2bVFjb3cyUGx1Z2luLnBtDQo+ID4gQEAgLTAsMCArMSw0NjAgQEANCj4gPiAr cGFja2FnZSBQVkU6OlN0b3JhZ2U6Okx2bVFjb3cyUGx1Z2luOw0KPiA+ICsNCj4gPiArdXNlIHN0 cmljdDsNCj4gPiArdXNlIHdhcm5pbmdzOw0KPiA+ICsNCj4gPiArdXNlIElPOjpGaWxlOw0KPiA+ ICsNCj4gPiArdXNlIFBWRTo6VG9vbHMgcXcocnVuX2NvbW1hbmQgdHJpbSk7DQo+ID4gK3VzZSBQ VkU6OlN0b3JhZ2U6OlBsdWdpbjsNCj4gPiArdXNlIFBWRTo6U3RvcmFnZTo6TFZNUGx1Z2luOw0K PiA+ICt1c2UgUFZFOjpKU09OU2NoZW1hIHF3KGdldF9zdGFuZGFyZF9vcHRpb24pOw0KPiA+ICsN Cj4gPiArdXNlIGJhc2UgcXcoUFZFOjpTdG9yYWdlOjpMVk1QbHVnaW4pOw0KDQo+PmNvdWxkIHdl IGludGVncmF0ZSB0aGlzIGludG8gdGhlIExWTSBwbHVnaW4gaWYgd2UgaW1wbGVtZW50IGl0Pw0K Pj5iYXNpY2FsbHkgYWRkIHRoZSAic25hcGV4dCIgb3B0aW9uLCB3aGljaCBpcyBmaXhlZCwgYW5k IGlmIGl0IGlzIHNldCwNCj4+ZGlzYWxsb3cgcm9vdGRpcj8NCg0KeWVzIHN1cmUuIEkgd2FudGVk IHRvIGtlZXAgaXQgc2VwYXJhdGVkIGZvciBub3cgdG8gYXZvaWQgdG8gcHV0ICJpZg0Kc25hcGV4 dCIgZXZlcndoZXJlLCBhbmQgYWxzbyBsdm10aGluIHBsdWdpbiBpbmhlcml0IGZyb20gbHZtcGx1 Z2luLCANCmJ1dCBJIGNhbiBtZXJnZSBpdCwgbm8gcHJvYmxlbS4NCg0KPj5wcm9iYWJseSBzbmFw ZXh0IHNob3VsZCBhbHNvIGJlIGZpeGVkIGZvciBkaXIoLWJhc2VkKSBzdG9yYWdlcywgc2luY2UN Cj4+dG9nZ2xpbmcgaXQgd2hlbiBzbmFwc2hvdHMgZXhpc3Qgd291bGQgYnJlYWsgYSB0b24gb2Yg c3R1ZmY/DQp5ZXMsIGluZGVlZC4NCg0KPiA+ICsNCj4gPiArIyBDb25maWd1cmF0aW9uDQo+ID4g Kw0KPiA+ICtzdWIgdHlwZSB7DQo+ID4gK8KgwqDCoCByZXR1cm4gJ2x2bXFjb3cyJzsNCj4gPiAr fQ0KPiA+ICsNCj4gPiArc3ViIHBsdWdpbmRhdGEgew0KPiA+ICvCoMKgwqAgcmV0dXJuIHsNCj4g PiArICNjb250YWluZXIgbm90IHlldCBpbXBsZW1lbnRlZCAjbmVlZCB0byBpbXBsZW1lbnRlZCBk bS1xY293Mg0KPiA+ICsgY29udGVudCA9PiBbIHtpbWFnZXMgPT4gMSwgcm9vdGRpciA9PiAxfSwg eyBpbWFnZXMgPT4gMSB9XSwNCg0KPj50aGVuIHJvb3RkaXIgc2hvdWxkbid0IGJlIG1lbnRpb25l ZCBoZXJlIGF0IGFsbD8gdGhlIGZpcnN0IG1lbWJlcg0KPj5jb250YWlucyB0aGUgcG9zc2libGUg Y29udGVudCB0eXBlcywgdGhlIHNlY29uZCB0aGUgZGVmYXVsdCBpZiBubw0KPj5leHBsaWNpdCBv bmVzIGFyZSBzZXQuLg0KYWggb2ssIHNvcnJ5Lg0KDQo+ID4gK8KgwqDCoCB9Ow0KPiA+ICt9DQo+ ID4gKw0KPiA+ICtzdWIgcHJvcGVydGllcyB7DQo+ID4gK8KgwqDCoCByZXR1cm4gew0KPiA+ICvC oMKgwqAgfTsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3ViIG9wdGlvbnMgew0KPiA+ICvCoMKgwqAg cmV0dXJuIHsNCj4gPiArIHZnbmFtZSA9PiB7IGZpeGVkID0+IDEgfSwNCj4gPiArIG5vZGVzID0+ IHsgb3B0aW9uYWwgPT4gMSB9LA0KPiA+ICsgc2hhcmVkID0+IHsgb3B0aW9uYWwgPT4gMSB9LA0K PiA+ICsgZGlzYWJsZSA9PiB7IG9wdGlvbmFsID0+IDEgfSwNCj4gPiArIHNhZmVyZW1vdmUgPT4g eyBvcHRpb25hbCA9PiAxIH0sDQo+ID4gKyBzYWZlcmVtb3ZlX3Rocm91Z2hwdXQgPT4geyBvcHRp b25hbCA9PiAxIH0sDQo+ID4gKyBjb250ZW50ID0+IHsgb3B0aW9uYWwgPT4gMSB9LA0KPiA+ICsg YmFzZSA9PiB7IGZpeGVkID0+IDEsIG9wdGlvbmFsID0+IDEgfSwNCj4gPiArIHRhZ2dlZF9vbmx5 ID0+IHsgb3B0aW9uYWwgPT4gMSB9LA0KPiA+ICsgYndsaW1pdCA9PiB7IG9wdGlvbmFsID0+IDEg fSwNCj4gPiArIHNuYXBleHQgPT4geyBmaXhlZCA9PiAxIH0sDQo+ID4gK8KgwqDCoCB9Ow0KPiA+ ICt9DQo+ID4gKw0KPiA+ICsjIFN0b3JhZ2UgaW1wbGVtZW50YXRpb24NCj4gPiArDQo+ID4gK3N1 YiBwYXJzZV92b2xuYW1lIHsNCj4gPiArwqDCoMKgIG15ICgkY2xhc3MsICR2b2xuYW1lKSA9IEBf Ow0KPiA+ICsNCj4gPiArwqDCoMKgIFBWRTo6U3RvcmFnZTo6UGx1Z2luOjpwYXJzZV9sdm1fbmFt ZSgkdm9sbmFtZSk7DQo+ID4gK8KgwqDCoCBteSAkZm9ybWF0ID0gJHZvbG5hbWUgPX4gbS9eKC4q KS1zbmFwLS8gPyAncWNvdzInIDogJ3Jhdyc7DQo+ID4gKw0KPiA+ICvCoMKgwqAgaWYgKCR2b2xu YW1lID1+IG0vXigodm18YmFzZSktKFxkKyktXFMrKSQvKSB7DQo+ID4gK8KgwqDCoMKgwqDCoMKg IHJldHVybiAoJ2ltYWdlcycsICQxLCAkMywgdW5kZWYsIHVuZGVmLCAkMiBlcSAnYmFzZScsDQo+ ID4gJGZvcm1hdCk7DQo+ID4gK8KgwqDCoCB9DQoNCj4+SSB3b25kZXIgaWYgaGVyZSB3ZSBhbHNv IHdhbnQgdG8ga2VlcCB0aGUgdm9saWQvdm9sbmFtZSBsaWtlIGl0IGlzLA0KPj5idXQgbmFtZSB0 aGUgTFZzIGZvciBzbmFwc2hvdHMgZGlmZmVyZW50bHk/DQoNCm1heWJlIGxpa2UgemZzfHJiZFti dHJmcyBzbmFwc2hvdCwgd2l0aCAgdm9sdW1lQHNuYXBYICBmb3IgZXhhbXBsZSA/DQoNCg0KPiA+ ICsNCj4gPiArwqDCoMKgIGRpZSAidW5hYmxlIHRvIHBhcnNlIGx2bSB2b2x1bWUgbmFtZSAnJHZv bG5hbWUnXG4iOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdWIgZmlsZXN5c3RlbV9wYXRoIHsNCj4g PiArwqDCoMKgIG15ICgkY2xhc3MsICRzY2ZnLCAkdm9sbmFtZSwgJHNuYXBuYW1lLCAkY3VycmVu dF9zbmFwKSA9IEBfOw0KPiA+ICsNCj4gPiArwqDCoMKgIG15ICgkdnR5cGUsICRuYW1lLCAkdm1p ZCkgPSAkY2xhc3MtPnBhcnNlX3ZvbG5hbWUoJHZvbG5hbWUpOw0KPiA+ICsNCj4gPiArwqDCoMKg IG15ICR2ZyA9ICRzY2ZnLT57dmduYW1lfTsNCj4gPiArDQo+ID4gK8KgwqDCoCBteSAkcGF0aCA9 ICIvZGV2LyR2Zy8kbmFtZSI7DQo+ID4gKw0KPiA+ICvCoMKgwqAgaWYoJHNuYXBuYW1lKSB7DQo+ ID4gKyAkcGF0aCA9IGdldF9zbmFwX3ZvbG5hbWUoJHBhdGgsICRzbmFwbmFtZSk7DQo+ID4gK8Kg wqDCoCB9IGVsc2lmICgkY3VycmVudF9zbmFwKSB7DQo+ID4gKyAkcGF0aCA9ICRjdXJyZW50X3Nu YXAtPntmaWxlfTsNCj4gPiArwqDCoMKgIH0NCg0Kc2VlIGNvbW1lbnQgZm9yIHRoZSBkaXIgc3Rv cmFnZSA7KQ0KDQo+ID4gKw0KPiA+ICvCoMKgwqAgcmV0dXJuIHdhbnRhcnJheSA/ICgkcGF0aCwg JHZtaWQsICR2dHlwZSkgOiAkcGF0aDsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3ViIGNyZWF0ZV9i YXNlIHsNCj4gPiArwqDCoMKgIG15ICgkY2xhc3MsICRzdG9yZWlkLCAkc2NmZywgJHZvbG5hbWUp ID0gQF87DQo+ID4gKw0KPiA+ICvCoMKgwqAgbXkgJHZnID0gJHNjZmctPnt2Z25hbWV9Ow0KDQpu aXQ6IHRoaXMgY291bGQgbW92ZSBiZWxvdywgY2xvc2VyIHRvIHdoZXJlIGl0IGlzIHVzZWQuLg0K DQo+ID4gKw0KPiA+ICvCoMKgwqAgbXkgKCR2dHlwZSwgJG5hbWUsICR2bWlkLCAkYmFzZW5hbWUs ICRiYXNldm1pZCwgJGlzQmFzZSkgPQ0KPiA+ICvCoMKgwqDCoMKgwqDCoCAkY2xhc3MtPnBhcnNl X3ZvbG5hbWUoJHZvbG5hbWUpOw0KPiA+ICsNCj4gPiArwqDCoMKgIGRpZSAiY3JlYXRlX2Jhc2Ug bm90IHBvc3NpYmxlIHdpdGggYmFzZSBpbWFnZVxuIiBpZiAkaXNCYXNlOw0KPiA+ICsNCj4gPiAr wqDCoMKgIGRpZSAidW5hYmxlIHRvIGNyZWF0ZSBiYXNlIHZvbHVtZSAtIGZvdW5kIHNuYXBzaG90 IiBpZiAkY2xhc3MtDQo+ID4gPiBzbmFwc2hvdF9leGlzdCgkc2NmZywgJHN0b3JlaWQsICR2b2xu YW1lKTsNCj4gPiArDQo+ID4gK8KgwqDCoCBteSAkbmV3bmFtZSA9ICRuYW1lOw0KPiA+ICvCoMKg wqAgJG5ld25hbWUgPX4gcy9edm0tL2Jhc2UtLzsNCj4gPiArDQo+ID4gK8KgwqDCoCBteSAkY21k ID0gWycvc2Jpbi9sdnJlbmFtZScsICR2ZywgJHZvbG5hbWUsICRuZXduYW1lXTsNCj4gPiArwqDC oMKgIHJ1bl9jb21tYW5kKCRjbWQsIGVycm1zZyA9PiAibHZyZW5hbWUgJyR2Zy8kdm9sbmFtZScg PT4NCj4gPiAnJHZnLyRuZXduYW1lJyBlcnJvciIpOw0KPiA+ICsNCj4gPiArwqDCoMKgICMgc2V0 IGluYWN0aXZlLCByZWFkLW9ubHkgZmxhZ3MNCj4gPiArwqDCoMKgICRjbWQgPSBbJy9zYmluL2x2 Y2hhbmdlJywgJy1hbicsICctcHInLCAiJHZnLyRuZXduYW1lIl07DQo+ID4gK8KgwqDCoCBldmFs IHsgcnVuX2NvbW1hbmQoJGNtZCk7IH07DQo+ID4gK8KgwqDCoCB3YXJuICRAIGlmICRAOw0KPiA+ ICsNCj4gPiArwqDCoMKgIG15ICRuZXd2b2xuYW1lID0gJG5ld25hbWU7DQo+ID4gKw0KPiA+ICvC oMKgwqAgcmV0dXJuICRuZXd2b2xuYW1lOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdWIgY2xvbmVf aW1hZ2Ugew0KPiA+ICvCoMKgwqAgbXkgKCRjbGFzcywgJHNjZmcsICRzdG9yZWlkLCAkdm9sbmFt ZSwgJHZtaWQsICRzbmFwKSA9IEBfOw0KPiA+ICsNCj4gPiArwqDCoMKgIGRpZSAiY2FuJ3QgY2xv bmUgaW1hZ2VzIGluIGx2bSBzdG9yYWdlXG4iOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdWIgYWxs b2NfaW1hZ2Ugew0KPiA+ICvCoMKgwqAgbXkgKCRjbGFzcywgJHN0b3JlaWQsICRzY2ZnLCAkdm1p ZCwgJGZtdCwgJG5hbWUsICRzaXplKSA9IEBfOw0KPiA+ICsNCj4gPiArwqDCoMKgIGRpZSAidW5z dXBwb3J0ZWQgZm9ybWF0ICckZm10JyIgaWYgJGZtdCBuZSAncmF3JzsNCg0KPj5oZXJlIEkgYWxz byB3b25kZXIgd2hldGhlciBpdCB3b3VsZG4ndCBiZSAiZWFzaWVyIiB0byBvbmx5IGFsbG9jYXRl DQo+PnFjb3cyIGZvcm1hdHRlZCBMVnMgKGFsc28gZm9yIHRoZSBpbml0aWFsIGFsbG9jYXRpb24p Pw0KPj4NCj4+b3RoZXJ3aXNlLCB0aGlzIGlzIGJhc2ljYWxseSBhbGxvY19pbWFnZSBmcm9tIHRo ZSBMVk1QbHVnaW4sIGp1c3QNCj4+d2l0aCB0aGUgZXh0cmEgdGFncyBhZGRlZCwgd2hpY2ggY291 bGQgYWxzbyBiZSBkb25lIHdoZXJlIHRoZQ0KPj5zbmFwc2hvdHMgYXJlIGhhbmRsZWQgZnVydGhl ciBiZWxvdy4uDQoNCklmIHBvc3NpYmxlLCBJIHdvdWxkIGxpa2UgdG8gdHJ5IHRvIGhhdmUgcmF3 IHN1cHBvcnQgdG9vLg0KKHRvIGJlIGFibGUgdG8gZWFzaWx5IGVuYWJsZSBzbmFwc2hvdCBvbiBl eGlzdGluZyBzdG9yYWdlIHdpdGggbmVlZGluZw0KdG8gY29udmVydCBUQiBvZiBkYXRhcykgYW5k IGZvciBwZXJmb3JtYW5jZSB0b28uDQoNCkknbGwgZG8gdGVzdCB3aXRoL3dpdGhvdXQgdG8gc2Vl IGlmIHRoZSBjb2RlIGlzIHJlYWxseSBtb3JlIGNvbXBsZXguDQoNCj4gPiArDQo+ID4gK8KgwqDC oCBkaWUgImlsbGVnYWwgbmFtZSAnJG5hbWUnIC0gc2hvdWxkIGJlICd2bS0kdm1pZC0qJ1xuIg0K PiA+ICsgaWbCoCAkbmFtZSAmJiAkbmFtZSAhfiBtL152bS0kdm1pZC0vOw0KPiA+ICsNCj4gPiAr wqDCoMKgIG15ICR2Z3MgPSBQVkU6OlN0b3JhZ2U6OkxWTVBsdWdpbjo6bHZtX3ZncygpOw0KPiA+ ICsNCj4gPiArwqDCoMKgIG15ICR2ZyA9ICRzY2ZnLT57dmduYW1lfTsNCj4gPiArDQo+ID4gK8Kg wqDCoCBkaWUgIm5vIHN1Y2ggdm9sdW1lIGdyb3VwICckdmcnXG4iIGlmICFkZWZpbmVkICgkdmdz LT57JHZnfSk7DQo+ID4gKw0KPiA+ICvCoMKgwqAgbXkgJGZyZWUgPSBpbnQoJHZncy0+eyR2Z30t PntmcmVlfSk7DQo+ID4gKw0KPiA+ICvCoMKgwqAgZGllICJub3QgZW5vdWdoIGZyZWUgc3BhY2Ug KCRmcmVlIDwgJHNpemUpXG4iIGlmICRmcmVlIDwNCj4gPiAkc2l6ZTsNCj4gPiArDQo+ID4gK8Kg wqDCoCAkbmFtZSA9ICRjbGFzcy0+ZmluZF9mcmVlX2Rpc2tuYW1lKCRzdG9yZWlkLCAkc2NmZywg JHZtaWQpDQo+ID4gKyBpZiAhJG5hbWU7DQo+ID4gKw0KPiA+ICvCoMKgwqAgbXkgJHRhZ3MgPSBb InB2ZS12bS0kdm1pZCJdOw0KPiA+ICvCoMKgwqAgaWYgKCRuYW1lID1+IG0vXigoKHZtfGJhc2Up LShcZCspLWRpc2stKFxkKykpKSgtc25hcC0oLiopKT8vKQ0KPiA+IHsNCj4gPiArwqDCoMKgwqDC oMKgwqAgcHVzaCBAJHRhZ3MsICJcQHB2ZS0kMSI7DQo+ID4gK8KgwqDCoCB9DQoNCj4+SSBkb24n dCBsaWtlIHRoaXMgcGFydCBmb3IgdHdvIHJlYXNvbnM6DQo+Pg0KPj4xLiB3aXRob3V0IHRoaXMs IGFsbG9jX2ltYWdlIGlzIGlkZW50aWNhbCB0byBMVk1QbHVnaW4ncyAoc2VlDQo+PmFib3ZlL2Jl bG93KQ0KPj4yLiB0aGUgd2F5IHRoZSBzbmFwc2hvdCBpcyBlbmNvZGVkIGluIHRoZSB2b2xuYW1l IG1lYW5zIEkgY2FuICJwdmVzbQ0KPj5hbGxvYyIgc29tZXRoaW5nIHdpdGggYSBzbmFwc2hvdCB2 b2xuYW1lIGFuZCBicmVhayB0aGluZ3MuLg0KPj4NCj4+SSB0aGluayB0aGlzIHNob3VsZCBiZSBy ZWZhY3RvcmVkOg0KPj4tIGFsbG9jX2ltYWdlIHNob3VsZCBhbGxvdyAob25seT8pIHFjb3cyDQo+ Pi0gaXQgc2hvdWxkIHVzZSBhIGN1c3RvbSBoZWxwZXIgZm9yIHRoZSBhY3R1YWwgbHZjcmVhdGUs IGJ1dCBiZQ0KPj5yZXN0cmljdGVkIHRvICJwcm9wZXIiIHZvbHVtZSBuYW1lcw0KPj4tIGl0IHNo b3VsZCB1c2UgYW5vdGhlciBoZWxwZXIgZm9yIHRoZSBxY293MiBmb3JtYXR0aW5nDQo+Pi0gdm9s dW1lX3NuYXBzaG90IHNob3VsZCB1c2UgdGhlIHNhbWUgaGVscGVycywgYnV0IGNhbGwgdGhlbSB3 aXRoIGENCj4+ZGlmZmVyZW50IExWIG5hbWUNCj4+DQo+PnRoZSBzYW1lIGFsc28gYXBwbGllcyB0 byBmcmVlX2ltYWdlLCBmb3Igc2ltaWxhciByZWFzb25zIChkb24ndCBhbGxvdw0KPj50byBjYWxs IGZyZWVfaW1hZ2Ugd2l0aCBhIHNuYXBzaG90IGRpcmVjdGx5LCBidXQgdXNlIGEgY29tbW9uIGhl bHBlcg0KPj5mb3IgZnJlZV9pbWFnZSBhbmQgdm9sdW1lX3NuYXBzaG90X2RlbGV0ZSkNCg0Kb2sg IQ0KDQo+ID4gKw0KPiA+ICvCoMKgwqAgUFZFOjpTdG9yYWdlOjpMVk1QbHVnaW46Omx2Y3JlYXRl KCR2ZywgJG5hbWUsICRzaXplLCAkdGFncyk7DQo+ID4gKw0KPiA+ICvCoMKgwqAgcmV0dXJuICRu YW1lOw0KPiA+ICt9DQo+ID4gKw0KPiA+ICtzdWIgdm9sdW1lX3NuYXBzaG90X2luZm8gew0KPiA+ ICvCoMKgwqAgbXkgKCRjbGFzcywgJHNjZmcsICRzdG9yZWlkLCAkdm9sbmFtZSkgPSBAXzsNCj4g PiArDQo+ID4gK8KgwqDCoCByZXR1cm4gJGNsYXNzLT5saXN0X3NuYXBzaG90cygkc2NmZywgJHN0 b3JlaWQsICR2b2xuYW1lKTsNCg0Kd2h5IGhhdmUgdHdvIHB1YmxpYyBzdWJzIGZvciB0aGlzPyB0 aGUgJGN1cnJlbnRfb25seSB3b3VsZCBub3QgYmUNCm5lZWRlZCBpZiB0aGUgdm9sdW1lIGl0c2Vs ZiB3b3VsZCBhbHNvIGJlIHRoZSBjdXJyZW50IHNuYXBzaG90Li4NCg0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdWIgYWN0aXZhdGVfdm9sdW1lIHsNCj4gPiArwqDCoMKgIG15ICgkY2xhc3MsICRzdG9y ZWlkLCAkc2NmZywgJHZvbG5hbWUsICRzbmFwbmFtZSwgJGNhY2hlKSA9DQo+ID4gQF87DQo+ID4g Kw0KPiA+ICvCoMKgwqAgbXkgJGx2bV9hY3RpdmF0ZV9tb2RlID0gJ2V5JzsNCj4gPiArwqDCoMKg IG15ICR0YWcgPSB1bmRlZjsNCg0KJHRhZyBpcyB1bmRlZg0KDQo+ID4gKw0KPiA+ICvCoMKgwqAg I2FjdGl2YXRlIHZvbHVtZSAmJiBhbGwgdm9sdW1lcyBzbmFwc2hvdHMgYnkgdGFnDQo+ID4gK8Kg wqDCoCBpZigkdm9sbmFtZSA9fiBtL14oKCh2bXxiYXNlKS0oXGQrKS1kaXNrLShcZCspKSkoLXNu YXAtDQo+ID4gKC4qKSk/LykNCj4gPiB7DQo+ID4gKyAkdGFnID0gIlxAcHZlLXZtLSQ0LWRpc2st JDUiOw0KDQpoZXJlIG9ubHkgdGhlIGRpc2sgaXRzZWxmIGlzIHB1dCBpbnRvIHRoZSB0YWcsIHRo ZSBvcHRpb25hbCBzbmFwIHBhcnQNCmlzbid0Li4gYW5kICRzbmFwbmFtZSBpcyBpZ25vcmVkIGFz IHdlbGwNCg0KPiA+ICvCoMKgwqAgfQ0KDQphbmQgd2hhdCBpZiB0aGUgcmVnZXggZGlkbid0IG1h dGNoPw0KDQo+ID4gKw0KPiA+ICvCoMKgwqAgbXkgJGNtZCA9IFsnL3NiaW4vbHZjaGFuZ2UnLCAi LWEkbHZtX2FjdGl2YXRlX21vZGUiLCAkdGFnXTsNCg0KPj5zbyB0aGlzIHdpbGwgb25seSBldmVy IGFjdGl2YXRlIHRoZSAibWFpbiIgdm9sdW1lPw0KYWxsIHNuYXBzaG90cyBoYXZlIHRoZSBzYW1l IHRhZyAodGhlIG1haW4gdm9sdW1lIG5hbWUpLCBzbyB0aGlzIHdpbGwNCmFjdGl2YXRlIGV2ZXJ5 IHNuYXNwaG90IC4NCg0KDQo+ID4gK8KgwqDCoCBydW5fY29tbWFuZCgkY21kLCBlcnJtc2cgPT4g ImNhbid0IGFjdGl2YXRlIExWICckdGFnJyIpOw0KPiA+ICsNCj4gPiArwqDCoMKgICRjbWQgPSBb Jy9zYmluL2x2Y2hhbmdlJywgJy0tcmVmcmVzaCcsICR0YWddOw0KPiA+ICvCoMKgwqAgcnVuX2Nv bW1hbmQoJGNtZCwgZXJybXNnID0+ICJjYW4ndCByZWZyZXNoIExWICckdGFnJyBmb3INCj4gPiBh Y3RpdmF0aW9uIik7DQoNCnRoaXMgc2hvdWxkDQotIG5vdCB1c2UgJHZvbG5hbWUgdG8gdHJhbnNm ZXIgJHNuYXBuYW1lLCBidXQgcGFzcyBpbiB0aGUgdm9sbmFtZQ0KY29udGFpbmVkIGluIHRoZSB2 b2xpZA0KLSB1c2UgJHNuYXBuYW1lIDspDQoNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3ViIGRlYWN0 aXZhdGVfdm9sdW1lIHsNCj4gPiArwqDCoMKgIG15ICgkY2xhc3MsICRzdG9yZWlkLCAkc2NmZywg JHZvbG5hbWUsICRzbmFwbmFtZSwgJGNhY2hlKSA9DQo+ID4gQF87DQo+ID4gKw0KPiA+ICvCoMKg wqAgbXkgJHRhZyA9IHVuZGVmOw0KPiA+ICvCoMKgwqAgI2RlYWN0aXZhdGUgdm9sdW1lICYmIGFs bCB2b2x1bWVzIHNuYXNwaG90cyBieSB0YWcNCj4gPiArwqDCoMKgIGlmKCR2b2xuYW1lID1+IG0v XigoKHZtfGJhc2UpLShcZCspLWRpc2stKFxkKykpKSgtc25hcC0NCj4gPiAoLiopKT8vKQ0KPiA+ IHsNCj4gPiArICR0YWcgPSAiXEBwdmUtdm0tJDQtZGlzay0kNSI7DQo+ID4gK8KgwqDCoCB9DQoN CnNhbWUgYXMgZm9yIGFjdGl2YXRlX3ZvbHVtZSBhcHBsaWVzIGhlcmUgYXMgd2VsbC4uDQoNCj4g PiArDQo+ID4gK8KgwqDCoCBteSAkY21kID0gWycvc2Jpbi9sdmNoYW5nZScsICctYWxuJywgJHRh Z107DQo+ID4gK8KgwqDCoCBydW5fY29tbWFuZCgkY21kLCBlcnJtc2cgPT4gImNhbid0IGRlYWN0 aXZhdGUgTFYgJyR0YWcnIik7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N1YiB2b2x1bWVfcmVzaXpl IHsNCj4gPiArwqDCoMKgIG15ICgkY2xhc3MsICRzY2ZnLCAkc3RvcmVpZCwgJHZvbG5hbWUsICRz aXplLCAkcnVubmluZykgPSBAXzsNCj4gPiArDQo+ID4gK8KgwqDCoCAjd2Ugc2hvdWxkIHJlc2l6 ZSB0aGUgYmFzZSBpbWFnZSBhbmQgcGFyZW50cyBzbmFwc2hvdHMsDQo+ID4gK8KgwqDCoCAjYnV0 IGhvdyB0byBtYW5hZ2Ugcm9sbGJhY2sgPw0KPiA+ICsNCj4gPiArwqDCoMKgIGRpZSAiY2FuJ3Qg cmVzaXplIGlmIHNuYXNwaG90cyBleGlzdCIgaWYgJGNsYXNzLQ0KPiA+ID4gc25hcHNob3RfZXhp c3QoJHNjZmcsICRzdG9yZWlkLCAkdm9sbmFtZSk7DQoNCj4+SSBkb24ndCB0aGluayBxZW11IHJl cXVpcmVzIGJhY2tpbmcgZmlsZSBhbmQgb3ZlcmxheSBzaXplcyB0byBhZ3JlZSAtDQo+Pmp1c3Qg dGhhdCBpZiB5b3Ugd3JpdGUgYmFjayAoY29tbWl0KSB1cCB0aGUgY2hhaW4sIHlvdSBtaWdodCBu ZWVkIHRvDQo+PnJlc2l6ZSB0aGUgYmFja2luZyBmaWxlIHRvIGFjY29tbW9kYXRlIHRoZSBhZGRp dGlvbmFsIGRhdGEvc3BhY2UuIHNvDQo+PnJlc2l6aW5nIHNob3VsZCBiZSBmaW5lIChpbiB0aGVv cnkgYXQgbGVhc3QpPyBhbHNvIHNlZSB0aGUgZG9jcyBmb3INCj4+YHFlbXUtaW1nIGNvbW1pdGAu DQoNCkknbGwgdHJ5IHRoYW5rcw0KDQo+ID4gKw0KPiA+ICvCoMKgwqAgcmV0dXJuIDE7DQo+ID4g K30NCj4gPiArDQo+ID4gK3N1YiB2b2x1bWVfc25hcHNob3Qgew0KPiA+ICvCoMKgwqAgbXkgKCRj bGFzcywgJHNjZmcsICRzdG9yZWlkLCAkdm9sbmFtZSwgJHNuYXApID0gQF87DQo+ID4gKw0KPiA+ ICvCoMKgwqAgJGNsYXNzLT5hY3RpdmF0ZV92b2x1bWUoJHN0b3JlaWQsICRzY2ZnLCAkdm9sbmFt ZSwgdW5kZWYsIHt9KTsNCj4gPiArDQo+ID4gK8KgwqDCoCBteSAkY3VycmVudF9wYXRoID0gJGNs YXNzLT5wYXRoKCRzY2ZnLCAkdm9sbmFtZSwgJHN0b3JlaWQpOw0KPiA+ICvCoMKgwqAgbXkgJGN1 cnJlbnRfZm9ybWF0ID0NCj4gPiAoUFZFOjpTdG9yYWdlOjpQbHVnaW46OmZpbGVfc2l6ZV9pbmZv KCRjdXJyZW50X3BhdGgpKVsxXTsNCj4gPiArwqDCoMKgIG15ICRzbmFwcGF0aCA9IGdldF9zbmFw X3ZvbG5hbWUoJGN1cnJlbnRfcGF0aCwgJHNuYXApOw0KPiA+ICsNCj4gPiArwqDCoMKgIG15ICRz bmFwdm9sbmFtZSA9IGdldF9zbmFwX3ZvbG5hbWUoJHZvbG5hbWUsICRzbmFwKTsNCj4gPiArwqDC oMKgICNhbGxvY2F0ZSBsdm0gc25hcHNob3Qgdm9sdW1lDQo+ID4gK8KgwqDCoCBteSAoJHZ0eXBl LCAkbmFtZSwgJHZtaWQsICRiYXNlbmFtZSwgJGJhc2V2bWlkLCAkaXNCYXNlKSA9DQo+ID4gKyAk Y2xhc3MtPnBhcnNlX3ZvbG5hbWUoJHZvbG5hbWUpOw0KPiA+ICvCoMKgwqAgbXkgJHNpemUgPSAk Y2xhc3MtPnZvbHVtZV9zaXplX2luZm8oJHNjZmcsICRzdG9yZWlkLCAkdm9sbmFtZSwNCj4gPiA1 KTsNCj4gPiArwqDCoMKgICNhZGQgMTAwTSBmb3IgcWNvdzIgaGVhZGVycw0KPiA+ICvCoMKgwqAg JHNpemUgPSBpbnQoJHNpemUvMTAyNCkgKyAoMTAwKjEwMjQpOw0KDQphIHBvaW50ZXIgd2hlcmUg dGhhdCAxMDBNIGNvbWVzIGZyb20gd291bGQgYmUgbmljZSA7KQ0KDQoNCj4gPiArDQo+ID4gK8Kg wqDCoCAkY2xhc3MtPmFsbG9jX2ltYWdlKCRzdG9yZWlkLCAkc2NmZywgJHZtaWQsICdyYXcnLA0K PiA+ICRzbmFwdm9sbmFtZSwNCj4gPiAkc2l6ZSk7DQoNCnNvIHRoaXMgY291bGQgaW5zdGVhZCB1 c2UgdGhlIHJlZ3VsYXIgYWxsb2NfaW1hZ2UgZnJvbSBzdG9jayBMVk0sIGFuZA0KdGhlbiBzZXQg dGhlIHRhZ3MgaGVyZSBpZiB3ZSB3YW50IHRvIGtlZXAgYWxsb2NfaW1hZ2UgYXMgcmF3LW9ubHku Lg0Kd2hpY2ggSSBkb24ndCB0aGluayB3ZSByZWFsbHkgd2FudCA7KQ0KDQo+ID4gKw0KPiA+ICvC oMKgwqAgIyBjcmVhdGUgdGhlIHFjb3cyIGZzDQo+ID4gK8KgwqDCoCBldmFsIHsNCj4gPiArwqDC oMKgwqDCoMKgwqAgbXkgJGNtZCA9IFsnL3Vzci9iaW4vcWVtdS1pbWcnLCAnY3JlYXRlJywgJy1i JywNCj4gPiAkY3VycmVudF9wYXRoLA0KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgJy1GJywgJGN1cnJlbnRfZm9ybWF0LCAnLWYnLCAncWNvdzInLA0KPiA+ICRzbmFw cGF0aF07DQo+ID4gK8KgwqDCoMKgwqDCoMKgIG15ICRvcHRpb25zID0gImV4dGVuZGVkX2wyPW9u LCI7DQo+ID4gK8KgwqDCoMKgwqDCoMKgICRvcHRpb25zIC49DQo+ID4gUFZFOjpTdG9yYWdlOjpQ bHVnaW46OnByZWFsbG9jYXRpb25fY21kX29wdGlvbigkc2NmZywgJ3Fjb3cyJyk7DQo+ID4gK8Kg wqDCoMKgwqDCoMKgIHB1c2ggQCRjbWQsICctbycsICRvcHRpb25zOw0KPiA+ICvCoMKgwqDCoMKg wqDCoCBydW5fY29tbWFuZCgkY21kKTsNCj4gPiArwqDCoMKgIH07DQoNCnNlZSBjb21tZW50IGZv ciBhbGxvY19pbWFnZSBhYm92ZS4uDQoNCj4gPiArwqDCoMKgIGlmICgkQCkgew0KPiA+ICsgZXZh bCB7ICRjbGFzcy0+ZnJlZV9pbWFnZSgkc3RvcmVpZCwgJHNjZmcsICRzbmFwdm9sbmFtZSwgMCkg fTsNCg0KSSBndWVzcyB0aGlzIGlzIG9rYXksIGJ1dCBpdCB3b3VsZCByZWFkIGEgYml0IGNsZWFu ZXIgaWYgdGhpcyB3b3VsZA0KY2FsbCB2b2x1bWVfc25hcHNob3RfZGVsZXRlLi4NCg0KPiA+ICsg d2FybiAkQCBpZiAkQDsNCj4gPiArwqDCoMKgIH0NCj4gPiArfQ0KPiA+ICsNCj4gPiArIyBBc3Nl cnRzIHRoYXQgYSByb2xsYmFjayB0byAkc25hcCBvbiAkdm9sbmFtZSBpcyBwb3NzaWJsZS4NCj4g PiArIyBJZiBjZXJ0YWluIHNuYXBzaG90cyBhcmUgcHJldmVudGluZyB0aGUgcm9sbGJhY2sgYW5k ICRibG9ja2Vycw0KPiA+IGlzDQo+ID4gYW4gYXJyYXkNCj4gPiArIyByZWZlcmVuY2UsIHRoZSBz bmFwc2hvdCBuYW1lcyBjYW4gYmUgcHVzaGVkIG9udG8gJGJsb2NrZXJzIHByaW9yDQo+ID4gdG8g ZHlpbmcuDQo+ID4gK3N1YiB2b2x1bWVfcm9sbGJhY2tfaXNfcG9zc2libGUgew0KPiA+ICvCoMKg wqAgbXkgKCRjbGFzcywgJHNjZmcsICRzdG9yZWlkLCAkdm9sbmFtZSwgJHNuYXAsICRibG9ja2Vy cykgPSBAXzsNCj4gPiArDQo+ID4gK8KgwqDCoCBteSAkcGF0aCA9ICRjbGFzcy0+ZmlsZXN5c3Rl bV9wYXRoKCRzY2ZnLCAkdm9sbmFtZSk7DQo+ID4gK8KgwqDCoCBteSAkc25hcHBhdGggPSBnZXRf c25hcF92b2xuYW1lKCRwYXRoLCAkc25hcCk7DQo+ID4gK8KgwqDCoCBteSAkY3VycmVudHBhdGgg PSAkY2xhc3MtPnBhdGgoJHNjZmcsICR2b2xuYW1lLCAkc3RvcmVpZCk7DQo+ID4gK8KgwqDCoCBy ZXR1cm4gMSBpZiAkY3VycmVudHBhdGggZXEgJHNuYXBwYXRoOw0KPiA+ICsNCj4gPiArwqDCoMKg IGRpZSAiY2FuJ3Qgcm9sbGJhY2ssICckc25hcCcgaXMgbm90IG1vc3QgcmVjZW50IHNuYXBzaG90 IG9uDQo+ID4gJyR2b2xuYW1lJ1xuIjsNCj4gPiArDQo+ID4gK8KgwqDCoCByZXR1cm4gMTsNCj4g PiArfQ0KDQpzYW1lIGNvbW1lbnRzIGFzIGZvciB0aGUgZGlyLWJhc2VkIHBhdGNoZXMgYXBwbHkg aGVyZSBhcyB3ZWxsIC0gaWYgYXQNCmFsbCBwb3NzaWJsZSwgaGF2aW5nIGEgMToxIG1hcHBpbmcg b2Ygc25hcHNob3QgbmFtZSB0byBMViBuYW1lIHdvdWxkIGJlDQpncmVhdC4uIG90aGVyIHRoYW4g TFZzIG5vdCBiZWluZyBoYXJkbGlua2FibGUsIEkgdGhpbmsgdGhlIHNhbWUNCmNvbnNpZGVyYXRp b25zIGFwcGx5IHRoZXJlIGFzIHdlbGwuLg0KDQo+ID4gKw0KPiA+ICtzdWIgdm9sdW1lX3NuYXBz aG90X3JvbGxiYWNrIHsNCj4gPiArwqDCoMKgIG15ICgkY2xhc3MsICRzY2ZnLCAkc3RvcmVpZCwg JHZvbG5hbWUsICRzbmFwKSA9IEBfOw0KPiA+ICsNCj4gPiArwqDCoMKgICRjbGFzcy0+YWN0aXZh dGVfdm9sdW1lKCRzdG9yZWlkLCAkc2NmZywgJHZvbG5hbWUsIHVuZGVmLCB7fSk7DQo+ID4gK8Kg wqDCoCAjc2ltcGx5IGRlbGV0ZSB0aGUgY3VycmVudCBzbmFwc2hvdCBhbmQgcmVjcmVhdGUgaXQN Cj4gPiArDQo+ID4gK8KgwqDCoCBteSAkc25hcHZvbG5hbWUgPSBnZXRfc25hcF92b2xuYW1lKCR2 b2xuYW1lLCAkc25hcCk7DQo+ID4gKw0KPiA+ICvCoMKgwqAgJGNsYXNzLT5mcmVlX2ltYWdlKCRz dG9yZWlkLCAkc2NmZywgJHNuYXB2b2xuYW1lLCAwKTsNCj4gPiArwqDCoMKgICRjbGFzcy0+dm9s dW1lX3NuYXBzaG90KCRzY2ZnLCAkc3RvcmVpZCwgJHZvbG5hbWUsICRzbmFwKTsNCj4gPiArfQ0K PiA+ICsNCj4gPiArc3ViIHZvbHVtZV9zbmFwc2hvdF9kZWxldGUgew0KPiA+ICvCoMKgwqAgbXkg KCRjbGFzcywgJHNjZmcsICRzdG9yZWlkLCAkdm9sbmFtZSwgJHNuYXAsICRydW5uaW5nKSA9IEBf Ow0KPiA+ICsNCj4gPiArwqDCoMKgIHJldHVybiAxIGlmICRydW5uaW5nOw0KPiA+ICsNCj4gPiAr wqDCoMKgICRjbGFzcy0+YWN0aXZhdGVfdm9sdW1lKCRzdG9yZWlkLCAkc2NmZywgJHZvbG5hbWUs IHVuZGVmLCB7fSk7DQo+ID4gKw0KPiA+ICvCoMKgwqAgbXkgJHNuYXBzaG90cyA9ICRjbGFzcy0+ dm9sdW1lX3NuYXBzaG90X2luZm8oJHNjZmcsICRzdG9yZWlkLA0KPiA+ICR2b2xuYW1lKTsNCj4g PiArwqDCoMKgIG15ICRzbmFwcGF0aCA9ICRzbmFwc2hvdHMtPnskc25hcH0tPntmaWxlfTsNCj4g PiArwqDCoMKgIGlmKCEkc25hcHBhdGgpIHsNCj4gPiArIHdhcm4gIiRzbmFwIGFscmVhZHkgZGVs ZXRlZC4gc2tpcFxuIjsNCj4gPiArIHJldHVybjsNCj4gPiArwqDCoMKgIH0NCg0KaG93IGNhbiB0 aGlzIGhhcHBlbj8gdGhlIHNuYXBzaG90IGluZm8gaXMgZ2VuZXJhdGVkIGJ5IHF1ZXJ5aW5nIExW TSBmb3INCmEgbGlzdCBvZiBMVnMuLg0KDQo+ID4gKw0KPiA+ICvCoMKgwqAgbXkgJHNuYXB2b2xu YW1lID0gJHNuYXBzaG90cy0+eyRzbmFwfS0+e3ZvbG5hbWV9Ow0KPiA+ICvCoMKgwqAgbXkgJHBh cmVudHNuYXAgPSAkc25hcHNob3RzLT57JHNuYXB9LT57cGFyZW50fTsNCj4gPiArwqDCoMKgIG15 ICRjaGlsZHNuYXAgPSAkc25hcHNob3RzLT57JHNuYXB9LT57Y2hpbGR9Ow0KPiA+ICvCoMKgwqAg ZGllICJlcnJvcjogY2FuJ3QgZmluZCBhIHBhcmVudCBmb3IgdGhpcyBzbmFwc2hvdCIgaWYNCj4g PiAhJHBhcmVudHNuYXA7DQoNCmJ1dCB0aGUgZmlyc3Qgc25hcHNob3QgZG9lc24ndCBoYXZlIGEg cGFyZW50Pw0KDQo+ID4gKw0KPiA+ICvCoMKgwqAgbXkgJHBhcmVudHBhdGggPSAkc25hcHNob3Rz LT57JHBhcmVudHNuYXB9LT57ZmlsZX07DQo+ID4gK8KgwqDCoCBteSAkcGFyZW50Zm9ybWF0ID0g JHNuYXBzaG90cy0+eyRwYXJlbnRzbmFwfS0+eydmb3JtYXQnfSBpZg0KPiA+ICRwYXJlbnRzbmFw Ow0KPiA+ICvCoMKgwqAgbXkgJGNoaWxkcGF0aCA9ICRzbmFwc2hvdHMtPnskY2hpbGRzbmFwfS0+ e2ZpbGV9IGlmDQo+ID4gJGNoaWxkc25hcDsNCg0KPj51bmxlc3Mgc29tZW9uZSBtYW51YWxseSBt ZXNzZWQgd2l0aCB0aGUgc25hcHNob3QgdHJlZSwgaW4gdGhlIGN1cnJlbnQNCj4+c2NoZW1lIGFu eSAic25hcHNob3QiIGhhcyBhIGNoaWxkPw0KdGhlICRzbmFwc2hvdHMgaGF2ZSB0aGUgZnVsbCBj aGFpbiwgaW5jbHVkaW5nIHRoZSBiYXNlIGltYWdlLg0KSSB0aGluayB0aGlzIHdoeSBJIGNoZWNr IGl0DQoNCj4gPiArwqDCoMKgIG15ICRjaGlsZGZvcm1hdCA9ICRzbmFwc2hvdHMtPnskY2hpbGRz bmFwfS0+eydmb3JtYXQnfSBpZg0KPiA+ICRjaGlsZHNuYXA7DQo+ID4gKw0KPiA+ICvCoMKgwqAg cHJpbnQgIm1lcmdlIHNuYXBzaG90ICRzbmFwIHRvICRwYXJlbnRzbmFwXG4iOw0KPiA+ICvCoMKg wqAgbXkgJGNtZCA9IFsnL3Vzci9iaW4vcWVtdS1pbWcnLCAnY29tbWl0JywgJHNuYXBwYXRoXTsN Cj4gPiArwqDCoMKgIHJ1bl9jb21tYW5kKCRjbWQpOw0KPiA+ICsNCj4gPiArwqDCoMKgICNpZiB3 ZSBkZWxldGUgYW4gaW50ZXJtZWRpYXRlIHNuYXBzaG90LCB3ZSBuZWVkIHRvIGxpbmsgdXBwZXIN Cj4gPiBzbmFwc2hvdCB0byBiYXNlIHNuYXBzaG90DQo+ID4gK8KgwqDCoCBpZigkY2hpbGRwYXRo ICYmIC1lICRjaGlsZHBhdGgpIHsNCj4gPiArIGRpZSAibWlzc2luZyBwYXJlbnRzbmFwIHNuYXBz aG90IHRvIHJlYmFzZSBjaGlsZCAkY2hpbGRwYXRoXG4iIGlmDQo+ID4gISRwYXJlbnRwYXRoOw0K PiA+ICsgcHJpbnQgImxpbmsgJGNoaWxkc25hcCB0byAkcGFyZW50c25hcFxuIjsNCj4gPiArICRj bWQgPSBbJy91c3IvYmluL3FlbXUtaW1nJywgJ3JlYmFzZScsICctdScsICctYicsICRwYXJlbnRw YXRoLA0KPiA+ICctDQo+ID4gRicsICRwYXJlbnRmb3JtYXQsICctZicsICRjaGlsZGZvcm1hdCwg JGNoaWxkcGF0aF07DQo+ID4gKyBydW5fY29tbWFuZCgkY21kKTsNCj4gPiArwqDCoMKgIH0NCg0K Pj5zYW1lIGhlcmUsIGNvbW1pdCArIHJlYmFzZSAtdSBzaG91bGQgYmUgdGhlIHNhbWUgYXMgcmVi YXNlID8NCg0KQUZBSUssIHJlYmFzZSBpcyBtb3JlIHVzZWQgd2hlbiB5b3UgdXNlIG11bHRpLWJy YW5jaCB3aGVuIHlvdSBkZWxldGUNCnNuYXBzaG90IGRlbGV0ZSBhbmQgeW91IG5lZWQgdG8gbWVy Z2UgdGhlIHNuYXBzaG90IGNvbnRlbnQgaW50bw0KbXVsdGlwbGUgY2hpbGQgc25hcHNob3QuDQph bmQgY29tbWl0LCBpcyB3aGVuIHlvdSBuZWVkIHRvIG1lcmdlIHRvIHBhcmVudA0KaHR0cHM6Ly9s aXN0cy5ub25nbnUub3JnL2FyY2hpdmUvaHRtbC9xZW11LWRldmVsLzIwMTktMDgvbXNnMDQwNDMu aHRtbA0KDQpmcm9tIHdoYXQgSSBoYXZlIHJlYWQgaW4gZGlmZmVyZW50IHBsYWNlLCByZWJhc2Ug aXMgc2xvd2VyDQpodHRwczovL2xpc3RzLmRlZmVjdGl2ZWJ5ZGVzaWduLm9yZy9hcmNoaXZlL2h0 bWwvcWVtdS1kaXNjdXNzLzIwMTktMDgvbXNnMDAwNDEuaHRtbA0KIkdlbmVyYWxseSwgcmViYXNl IGlzIGdvaW5nIHRvIGJlIHNsb3dlciBiZWNhdXNlIGl0IHJlYWRzIHNvbWUgY2x1c3RlcnMNCmFu ZCBjb21wYXJlcyB0aGUgb2xkIHdpdGggdGhlIG5ldyBiYWNraW5nIGZpbGUgdG8gc2VlIHdoZXRo ZXIgdGhleSBhcmUNCnRoZSBzYW1lLiAgY29tbWl0IHdpbGwgbm90IGRvIHRoYXQuICAoT1RPSCwg aWYgdGhlcmUgYXJlIG1hbnkgY2x1c3RlcnMNCmluIHRoZSBvbGQgYmFja2luZyBjaGFpbiB0aGF0 IGhhcHBlbiB0byBjb250YWluIHRoZSBzYW1lIGRhdGEgYXMgdGhlDQpuZXcNCm9uZSwgdGhpcyB3 aWxsIHNhdmUgc3BhY2UsIGJlY2F1c2UgaXQgd29u4oCZdCBjb3B5IHRob3NlIGNsdXN0ZXJzIGZy b20NCnRoZQ0Kb2xkIGJhY2tpbmcgY2hhaW4uKQ0KIg0KDQo+ID4gKw0KPiA+ICvCoMKgwqAgI2Rl bGV0ZSB0aGUgc25hcHNob3QNCj4gPiArwqDCoMKgICRjbGFzcy0+ZnJlZV9pbWFnZSgkc3RvcmVp ZCwgJHNjZmcsICRzbmFwdm9sbmFtZSwgMCk7DQo+ID4gKyANCj4gPiArwqDCoMKgIHJldHVybjsN Cj4gPiArfQ0KPiA+ICsNCj4gPiArc3ViIHZvbHVtZV9oYXNfZmVhdHVyZSB7DQo+ID4gK8KgwqDC oCBteSAoJGNsYXNzLCAkc2NmZywgJGZlYXR1cmUsICRzdG9yZWlkLCAkdm9sbmFtZSwgJHNuYXBu YW1lLA0KPiA+ICRydW5uaW5nKSA9IEBfOw0KPiA+ICsNCj4gPiArwqDCoMKgIG15ICRmZWF0dXJl cyA9IHsNCj4gPiArIHNuYXBzaG90ID0+IHsgY3VycmVudCA9PiAxIH0sDQo+ID4gKyMgY2xvbmUg PT4geyBiYXNlID0+IDEsIHNuYXAgPT4gMX0swqDCoCAjZG9uJ3QgYWxsb3cgdG8gY2xvbmUgYXMg d2UNCj4gPiBjYW4ndCBhY3RpdmF0ZSB0aGUgYmFzZSBiZXR3ZWVuIGRpZmZlcmVudCBob3N0ID8N Cg0KPj50aGF0J3Mgb25seSB0cnVlIGZvciBzaGFyZWQgTFZNIHRob3VnaCwgYW5kIHRoZSByZXN0 IHdvdWxkIGFsc28gd29yaw0KPj5mb3IgbG9jYWwgTFZNPw0KeWVzLCBmb3IgbG9jYWwgbHZtICwg aXQnbGwgd29yay4gSSdsbCBjaGVjayB0aGUgc2hhcmVkIG9wdGlvbi4NCg0KDQo+ID4gKyB0ZW1w bGF0ZSA9PiB7IGN1cnJlbnQgPT4gMX0sDQo+ID4gKyBjb3B5ID0+IHsgYmFzZSA9PiAxLCBjdXJy ZW50ID0+IDEsIHNuYXAgPT4gMX0sDQo+ID4gKyBzcGFyc2Vpbml0ID0+IHsgYmFzZSA9PiAxLCBj dXJyZW50ID0+IDF9LA0KPiA+ICsgcmVuYW1lID0+IHtjdXJyZW50ID0+IDF9LA0KPiA+ICvCoMKg wqAgfTsNCj4gPiArDQo+ID4gK8KgwqDCoCBteSAoJHZ0eXBlLCAkbmFtZSwgJHZtaWQsICRiYXNl bmFtZSwgJGJhc2V2bWlkLCAkaXNCYXNlKSA9DQo+ID4gKyAkY2xhc3MtPnBhcnNlX3ZvbG5hbWUo JHZvbG5hbWUpOw0KPiA+ICsNCj4gPiArwqDCoMKgIG15ICRrZXkgPSB1bmRlZjsNCj4gPiArwqDC oMKgIGlmKCRzbmFwbmFtZSl7DQo+ID4gKyAka2V5ID0gJ3NuYXAnOw0KPiA+ICvCoMKgwqAgfWVs c2V7DQo+ID4gKyAka2V5ID3CoCAkaXNCYXNlID8gJ2Jhc2UnIDogJ2N1cnJlbnQnOw0KPiA+ICvC oMKgwqAgfQ0KPiA+ICvCoMKgwqAgcmV0dXJuIDEgaWYgJGZlYXR1cmVzLT57JGZlYXR1cmV9LT57 JGtleX07DQo+ID4gKw0KPiA+ICvCoMKgwqAgcmV0dXJuIHVuZGVmOw0KPiA+ICt9DQo+ID4gKw0K PiA+ICtzdWIgZ2V0X3NuYXBfdm9sbmFtZSB7DQo+ID4gK8KgwqDCoCBteSAoJHBhdGgsICRzbmFw KSA9IEBfOw0KPiA+ICsNCj4gPiArwqDCoMKgIG15ICRiYXNlcGF0aCA9ICIiOw0KPiA+ICvCoMKg wqAgbXkgJGJhc2Vmb3JtYXQgPSAiIjsNCj4gPiArwqDCoMKgIGlmICgkcGF0aCA9fiBtL14oKC4q KSgodm18YmFzZSktKFxkKyktZGlzay0oXGQrKSkpKC1zbmFwLShbYS0NCj4gPiB6QS0NCj4gPiBa MC05XSspKT8oXC4ocmF3fHFjb3cyKSk/Lykgew0KPiA+ICvCoMKgwqDCoMKgwqDCoCAkYmFzZXBh dGggPSAkMTsNCj4gPiArwqDCoMKgwqDCoMKgwqAgJGJhc2Vmb3JtYXQgPSAkODsNCj4gPiArwqDC oMKgIH0NCj4gPiArwqDCoMKgIG15ICRzbmFwdm9sbmFtZSA9ICRiYXNlcGF0aC4iLXNuYXAtJHNu YXAucWNvdzIiOw0KPiA+ICvCoMKgwqAgcmV0dXJuICRzbmFwdm9sbmFtZTsNCj4gPiArfQ0KPiA+ ICsNCj4gPiArc3ViIGdldF9zbmFwbmFtZV9mcm9tX3BhdGggew0KPiA+ICvCoMKgwqAgbXkgKCRw YXRoKSA9IEBfOw0KPiA+ICsNCj4gPiArwqDCoMKgIGlmICgkcGF0aCA9fiBtL14oKC4qKSgodm18 YmFzZSktKFxkKyktZGlzay0oXGQrKSkpKC1zbmFwLShbYS0NCj4gPiB6QS0NCj4gPiBaMC05XSsp KT8oXC4ocmF3fHFjb3cyKSk/Lykgew0KPiA+ICvCoMKgwqDCoMKgwqDCoCBteSAkc25hcG5hbWUg PSAkNzsNCj4gPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuICRzbmFwbmFtZTsNCj4gPiArwqDCoMKg IH0NCj4gPiArwqDCoMKgIGRpZSAiY2FuJ3QgcGFyc2Ugc25hcG5hbWUgZnJvbSBwYXRoICRwYXRo IjsNCj4gPiArfQ0KPiA+ICsNCj4gPiArc3ViIGdldF9jdXJyZW50X3NuYXBzaG90IHsNCj4gPiAr wqDCoMKgIG15ICgkY2xhc3MsICRzY2ZnLCAkc3RvcmVpZCwgJHZvbG5hbWUpID0gQF87DQo+ID4g Kw0KPiA+ICvCoMKgwqAgI2dldCBtb3JlIHJlY2VudCBjdGltZSB2b2x1bWUNCj4gPiArwqDCoMKg IHJldHVybiAkY2xhc3MtPmxpc3Rfc25hcHNob3RzKCRzY2ZnLCAkc3RvcmVpZCwgJHZvbG5hbWUs IDEpOw0KPiA+ICt9DQo+ID4gK215ICRjaGVja190YWdzID0gc3ViIHsNCj4gPiArwqDCoMKgIG15 ICgkdGFncykgPSBAXzsNCj4gPiArDQo+ID4gK8KgwqDCoCByZXR1cm4gZGVmaW5lZCgkdGFncykg JiYgJHRhZ3MgPX4gLyhefCwpcHZlLXZtLVxkKygsfCQpLzsNCj4gPiArfTsNCj4gPiArDQo+ID4g K3N1YiBsaXN0X2ltYWdlcyB7DQo+ID4gK8KgwqDCoCBteSAoJGNsYXNzLCAkc3RvcmVpZCwgJHNj ZmcsICR2bWlkLCAkdm9sbGlzdCwgJGNhY2hlKSA9IEBfOw0KPiA+ICsNCj4gPiArwqDCoMKgIG15 ICR2Z25hbWUgPSAkc2NmZy0+e3ZnbmFtZX07DQo+ID4gKw0KPiA+ICvCoMKgwqAgJGNhY2hlLT57 bHZzfSA9IFBWRTo6U3RvcmFnZTo6TFZNUGx1Z2luOjpsdm1fbGlzdF92b2x1bWVzKCkgaWYNCj4g PiAhJGNhY2hlLT57bHZzfTsNCj4gPiArDQo+ID4gK8KgwqDCoCBteSAkcmVzID0gW107DQo+ID4g Kw0KPiA+ICvCoMKgwqAgaWYgKG15ICRkYXQgPSAkY2FjaGUtPntsdnN9LT57JHZnbmFtZX0pIHsN Cj4gPiArDQo+ID4gKyBmb3JlYWNoIG15ICR2b2xuYW1lIChrZXlzICUkZGF0KSB7DQo+ID4gKw0K PiA+ICsgwqDCoMKgIG5leHQgaWYgJHZvbG5hbWUgIX4gbS9eKHZtfGJhc2UpLShcZCspLS87DQo+ ID4gKyDCoMKgwqAgbXkgJG93bmVyID0gJDI7DQo+ID4gKw0KPiA+ICsgwqDCoMKgIG15ICRpbmZv ID0gJGRhdC0+eyR2b2xuYW1lfTsNCj4gPiArDQo+ID4gKyDCoMKgwqAgbmV4dCBpZiAkc2NmZy0+ e3RhZ2dlZF9vbmx5fSAmJiAhJiRjaGVja190YWdzKCRpbmZvLT57dGFnc30pOw0KPiA+ICsNCj4g PiArIMKgwqDCoCAjIEFsbG93IG1pcnJvcmVkIGFuZCBSQUlEIExWcw0KPiA+ICsgwqDCoMKgIG5l eHQgaWYgJGluZm8tPntsdl90eXBlfSAhfiBtL15bLW1NclJdJC87DQo+ID4gKw0KPiA+ICsgwqDC oMKgIG15ICR2b2xpZCA9ICIkc3RvcmVpZDokdm9sbmFtZSI7DQo+ID4gKw0KPiA+ICsgwqDCoMKg IGlmICgkdm9sbGlzdCkgew0KPiA+ICsgbXkgJGZvdW5kID0gZ3JlcCB7ICRfIGVxICR2b2xpZCB9 IEAkdm9sbGlzdDsNCj4gPiArIG5leHQgaWYgISRmb3VuZDsNCj4gPiArIMKgwqDCoCB9IGVsc2Ug ew0KPiA+ICsgbmV4dCBpZiBkZWZpbmVkKCR2bWlkKSAmJiAoJG93bmVyIG5lICR2bWlkKTsNCj4g PiArIMKgwqDCoCB9DQo+ID4gKw0KPiA+ICsgwqDCoMKgIHB1c2ggQCRyZXMsIHsNCj4gPiArIHZv bGlkID0+ICR2b2xpZCwgZm9ybWF0ID0+ICdyYXcnLCBzaXplID0+ICRpbmZvLT57bHZfc2l6ZX0s IHZtaWQNCj4gPiA9Pg0KPiA+ICRvd25lciwNCj4gPiArIGN0aW1lID0+ICRpbmZvLT57Y3RpbWV9 LA0KPiA+ICsgwqDCoMKgIH07DQoNCj4+YnV0IGRvZXNuJ3QgdGhpcyBub3cgaW5jbHVkZSBhbGwg c25hcHNob3QgTFZzIGFzIHdlbGw/IHdoaWxlDQo+PnByZXRlbmRpbmcgdGhleSBhcmUgcmF3Pw0K eWVzLCBJIHdhcyBub3Qgc3VyZSBoZXJlIGlmIHdlIHdhbnQgdG8gZGlzcGxheSBzbmFzcGhvdCB2 b2x1bWUgb3Igbm90ID8NCg0KDQo+ID4gKyB9DQo+ID4gK8KgwqDCoCB9DQo+ID4gKw0KPiA+ICvC oMKgwqAgcmV0dXJuICRyZXM7DQo+ID4gK30NCj4gPiArDQo+ID4gK3N1YiBsaXN0X3NuYXBzaG90 cyB7DQo+ID4gK8KgwqDCoCBteSAoJGNsYXNzLCAkc2NmZywgJHN0b3JlaWQsICR2b2xuYW1lLCAk Y3VycmVudF9vbmx5KSA9IEBfOw0KPiA+ICsNCj4gPiArwqDCoMKgIG15ICR2Z25hbWUgPSAkc2Nm Zy0+e3ZnbmFtZX07DQo+ID4gKw0KPiA+ICvCoMKgwqAgbXkgJGJhc2V2b2xuYW1lID0gJHZvbG5h bWU7DQo+ID4gK8KgwqDCoCBteSAkbHZzID0gUFZFOjpTdG9yYWdlOjpMVk1QbHVnaW46Omx2bV9s aXN0X3ZvbHVtZXMoJHZnbmFtZSk7DQoNCnRoaXMNCg0KPiA+ICsNCj4gPiArwqDCoMKgIG15ICR2 ZyA9ICRsdnMtPnskdmduYW1lfTsNCg0KYW5kIHRoaXMgc2VlbSB0byBiZSB1bnVzZWQ/DQoNCj4g PiArDQo+ID4gK8KgwqDCoCBteSAoJHZ0eXBlLCAkbmFtZSwgJHZtaWQsICRiYXNlbmFtZSwgJGJh c2V2bWlkLCAkaXNCYXNlLA0KPiA+ICRmb3JtYXQpID0gJGNsYXNzLT5wYXJzZV92b2xuYW1lKCR2 b2xuYW1lKTsNCj4gPiArwqDCoMKgIG15ICRzbmFwc2hvdHMgPSAkY2xhc3MtPmxpc3RfaW1hZ2Vz KCRzdG9yZWlkLCAkc2NmZywgJHZtaWQpOw0KPiA+ICsNCj4gPiArwqDCoMKgIG15ICRpbmZvID0g e307DQo+ID4gK8KgwqDCoCBmb3IgbXkgJHNuYXAgKEAkc25hcHNob3RzKSB7DQo+ID4gKyBteSAk c25hcF92b2xpZCA9ICRzbmFwLT57dm9saWR9Ow0KPiA+ICsgbmV4dCBpZiAoJHNuYXBfdm9saWQg IX4gbS8kYmFzZXZvbG5hbWUvKTsNCg0Kc2FtZSBpc3N1ZSBhcyB3aXRoIHRoZSBkaXIgcGF0Y2gg LSB0aGlzIGFsbG93cyBwYXJ0aWFsIG1hdGNoaW5nIGlmIHR3bw0Kdm9sdW1lcyBzaGFyZSBhIG5h bWUgcHJlZml4DQoNCj4gPiArDQo+ID4gKyBteSAkc25hcG5hbWUgPSBnZXRfc25hcG5hbWVfZnJv bV9wYXRoKCRzbmFwX3ZvbGlkKTsNCj4gPiArIG15ICh1bmRlZiwgJHNuYXBfdm9sbmFtZSkgPQ0K PiA+IFBWRTo6U3RvcmFnZTo6cGFyc2Vfdm9sdW1lX2lkKCRzbmFwX3ZvbGlkKTsNCj4gPiArIG15 ICRzbmFwZmlsZSA9ICRjbGFzcy0+ZmlsZXN5c3RlbV9wYXRoKCRzY2ZnLCAkc25hcF92b2xuYW1l LA0KPiA+ICRzbmFwbmFtZSk7DQo+ID4gKyAkc25hcG5hbWUgPSAnYmFzZScgaWYgISRzbmFwbmFt ZTsNCj4gPiArICRpbmZvLT57JHNuYXBuYW1lfS0+e2ZpbGV9ID0gJHNuYXBmaWxlOw0KPiA+ICsg JGluZm8tPnskc25hcG5hbWV9LT57dm9sbmFtZX0gPSAkc25hcF92b2xuYW1lOw0KPiA+ICsgJGlu Zm8tPnskc25hcG5hbWV9LT57dm9saWR9ID0gJHNuYXBfdm9saWQ7DQo+ID4gKyAkaW5mby0+eyRz bmFwbmFtZX0tPntjdGltZX0gPSAkc25hcC0+e2N0aW1lfTsNCj4gPiArDQo+ID4gKyBpZiAoISRj dXJyZW50X29ubHkpIHsNCj4gPiArIMKgwqDCoCBteSAodW5kZWYsICRmb3JtYXQsIHVuZGVmLCAk cGFyZW50ZmlsZSwgdW5kZWYpID0NCj4gPiBQVkU6OlN0b3JhZ2U6OlBsdWdpbjo6ZmlsZV9zaXpl X2luZm8oJHNuYXBmaWxlKTsNCj4gPiArIMKgwqDCoCBuZXh0IGlmICEkcGFyZW50ZmlsZSAmJiAk c25hcG5hbWUgbmUgJ2Jhc2UnO8KgwqAgI2JhZCB1bmxpbmtlZA0KPiA+IHNuYXNwaG90DQo+ID4g Kw0KPiA+ICsgwqDCoMKgIG15ICRwYXJlbnRuYW1lID0gZ2V0X3NuYXBuYW1lX2Zyb21fcGF0aCgk cGFyZW50ZmlsZSkgaWYNCj4gPiAkcGFyZW50ZmlsZTsNCj4gPiArIMKgwqDCoCAkcGFyZW50bmFt ZSA9ICdiYXNlJyBpZiAhJHBhcmVudG5hbWUgJiYgJHBhcmVudGZpbGU7DQo+ID4gKw0KPiA+ICsg wqDCoMKgICRpbmZvLT57JHNuYXBuYW1lfS0+eydmb3JtYXQnfSA9ICRmb3JtYXQ7DQo+ID4gKyDC oMKgwqAgJGluZm8tPnskc25hcG5hbWV9LT57cGFyZW50fSA9ICRwYXJlbnRuYW1lIGlmICRwYXJl bnRuYW1lOw0KPiA+ICsgwqDCoMKgICRpbmZvLT57JHBhcmVudG5hbWV9LT57Y2hpbGR9ID0gJHNu YXBuYW1lIGlmICRwYXJlbnRuYW1lOw0KPiA+ICsgfQ0KPiA+ICvCoMKgwqAgfQ0KPiA+ICsNCj4g PiArwqDCoMKgIG15IEBzbmFwc2hvdHNfc29ydGVkID0gc29ydCB7ICRpbmZvLT57JGJ9e2N0aW1l fSA8PT4gJGluZm8tDQo+ID4gPiB7JGF9e2N0aW1lfSB9IGtleXMgJSRpbmZvOw0KPiA+ICvCoMKg wqAgbXkgJGN1cnJlbnRfc25hcG5hbWUgPSAkc25hcHNob3RzX3NvcnRlZFswXTsNCj4gPiArwqDC oMKgIG15ICRjdXJyZW50X3NuYXBzaG90ID0gJGluZm8tPnskY3VycmVudF9zbmFwbmFtZX07DQo+ ID4gK8KgwqDCoCByZXR1cm4gJGN1cnJlbnRfc25hcHNob3QgaWYgJGN1cnJlbnRfb25seTsNCg0K dGhpcyAocmV0dXJuaW5nIHRvIGhhc2hlcyB3aXRoIGRpZmZlcmVudCBzdHJ1Y3R1cmUpIGlzIGVh c3kgdG8gbWlzcyBhbmQNCmdldCB3cm9uZy4uDQoNCj4gPiArDQo+ID4gK8KgwqDCoCAkaW5mby0+ e2N1cnJlbnR9ID0geyAlJGN1cnJlbnRfc25hcHNob3QgfTsNCg0KZXNwZWNpYWxseSBpZiB0aGlz IGlzIGRvbmUgYW55d2F5LCBzbyB0aGUgY2FsbGVyIGNhbiBqdXN0IGxvb2sgYXQgdGhhdA0KaWYg dGhleSBvbmx5IHdhbnQgdGhlIGN1cnJlbnQgc25hcHNob3QuLg0KDQo+ID4gK8KgwqDCoCByZXR1 cm4gJGluZm87DQo+ID4gK30NCj4gPiArDQo+ID4gK3N1YiBzbmFwc2hvdF9leGlzdCB7DQo+ID4g K8KgwqDCoCBteSAoJGNsYXNzLCAkc2NmZywgJHN0b3JlaWQsICR2b2xuYW1lKSA9IEBfOw0KPiA+ ICsNCj4gPiArwqDCoMKgIG15ICRiYXNlcGF0aCA9ICRjbGFzcy0+ZmlsZXN5c3RlbV9wYXRoKCRz Y2ZnLCAkdm9sbmFtZSk7DQo+ID4gK8KgwqDCoCBteSAkY3VycmVudHBhdGggPSAkY2xhc3MtPnBh dGgoJHNjZmcsICR2b2xuYW1lLCAkc3RvcmVpZCk7DQo+ID4gKw0KPiA+ICvCoMKgwqAgZGllICJj YW4ndCByZXNpemUgaWYgc25hc3Bob3RzIGV4aXN0IiBpZiAkY3VycmVudHBhdGggbmUNCj4gPiAk YmFzZXBhdGg7DQoNCkkgdGhpbmsgc29tZXRoaW5nIGhlcmUgaXMgd3JvbmcgOykNCg0KPiA+ICsN Cj4gPiArfQ0KPiA+ICsxOw0KPiA+IGRpZmYgLS1naXQgYS9zcmMvUFZFL1N0b3JhZ2UvTWFrZWZp bGUgYi9zcmMvUFZFL1N0b3JhZ2UvTWFrZWZpbGUNCj4gPiBpbmRleCBkNWNjOTQyLi4xYWY4YWFi IDEwMDY0NA0KPiA+IC0tLSBhL3NyYy9QVkUvU3RvcmFnZS9NYWtlZmlsZQ0KPiA+ICsrKyBiL3Ny Yy9QVkUvU3RvcmFnZS9NYWtlZmlsZQ0KPiA+IEBAIC0xNCw3ICsxNCw4IEBAIFNPVVJDRVM9IFwN Cj4gPiDCoCBQQlNQbHVnaW4ucG0gXA0KPiA+IMKgIEJUUkZTUGx1Z2luLnBtIFwNCj4gPiDCoCBM dm1UaGluUGx1Z2luLnBtIFwNCj4gPiAtIEVTWGlQbHVnaW4ucG0NCj4gPiArIEVTWGlQbHVnaW4u cG0gXA0KPiA+ICsgTHZtUWNvdzJQbHVnaW4ucG0NCj4gPiDCoA0KPiA+IMKgLlBIT05ZOiBpbnN0 YWxsDQo+ID4gwqBpbnN0YWxsOg0KPiA+IC0tIA0KPiA+IDIuMzkuMg0KDQoNCg== --===============1971800117012363132== Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Content-Disposition: inline _______________________________________________ pve-devel mailing list pve-devel@lists.proxmox.com https://lists.proxmox.com/cgi-bin/mailman/listinfo/pve-devel --===============1971800117012363132==--