From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from gate001.proxmox.com (gate001.proxmox.com [45.144.208.40]) by lore.proxmox.com (Postfix) with ESMTPS id 9E7461FF09C for ; Mon, 21 Sep 2026 12:56:41 +0200 (CEST) Received: from gate001.proxmox.com (localhost.localdomain [127.0.0.1]) by gate001.proxmox.com (Proxmox) with ESMTP id 5B38D21466; Mon, 21 Sep 2026 12:56:41 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=JN3/grzBpEU6hjRcO4pWriD0bC/XgUuaAgqJb7iwZJuotVmSS5nfr9M1FXFaF1GFVHx14TT8eiO/fsgrv8l/ZvCWOZCJf0tz/bss9jGlpDI0LDqrCoKwmQgB9wr+mfP1cSQQV35SRFWN4jyrtOZiSipj6nLknG09lVR6f/VIy3F+YCpZdz6pPGLl8WykS6PQUlG11oM/bL59d7jK/pPvgQ3tOP27PM3lTC+wfcxVlgR2KPcAYUHZUeo55DaoenYwwPAtMbgG3t2eyC90Yx3UXC2SDYVJT2c+Gdh4z6udrEl5J4umqeabQRpf67Qm2AVb7vKzdcPY4zWMDG930hjbtg== 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=ptHCges2zXHyS9XomFvi2tJa0zj/D979vdsGWTzwgkI=; b=aq4qcRW87vUxRskdlurPIgQ2xGzFUXWjhDSb3jIn28iJ6RSF5WN/2RDuRHAC+N2PQ9EOgBWUth4YlBia2wiFVMTsAGevAHIoopJVfYNYc4GZX6bMpZkfkfI3usZDJVnyY5SCjj9uQjRKH97pKfHrpTljfNQN0FcjPJCij80VKe5R/WeiTCF5Dj6BOq9b4gvBoQ3NQ4dLk8NdBNMFDDLE5xNHsDrIUElVWocVUjfg1uPiLyTH1qrMcsqJl95igWlBajdPcxN/WeSFuYUG4rSzG0WobKg5XWWW4dnB/oqRnRnFpsXaVG5W/MVdjEq2ViuHCCEtq/uWFji1LtLUcD29qg== 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=ptHCges2zXHyS9XomFvi2tJa0zj/D979vdsGWTzwgkI=; b=ljL2sZjgPrFoaCU35Jv/SB2gaPN5BrTy5Rqo7aRg+AvMtklyAyxkjbn+aZ2xUyxDKnYxWeVuddkFdayxLJ9wQ2d23+D2tg4y/7th4eczaLcvemWCybpyWpjV2yxs2+fyAtneZkAgD3sw0TazwUhhq/SfTZT+pOlgOCzfXJF2MZ8= From: "DERUMIER, Alexandre" To: "pve-devel@lists.proxmox.com" , "s.hanreich@proxmox.com" Subject: Re: [RFC pve-network 1/1] sdn: apply changes on all nodes in parallel Thread-Topic: [RFC pve-network 1/1] sdn: apply changes on all nodes in parallel Thread-Index: AQHdD6wrU8yNDKEvWEiIG/v10q6p7bbZUE6A Date: Mon, 21 Sep 2026 10:56:17 +0000 Message-ID: <081589622ba199dd6576bb504165b50c8e263e81.camel@groupe-cyllene.com> References: <20260709140625.275618-1-s.hanreich@proxmox.com> In-Reply-To: <20260709140625.275618-1-s.hanreich@proxmox.com> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.60.2 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: PAZSPR01MB0011:EE_|MR0P264MB5211:EE_ x-ms-office365-filtering-correlation-id: 398bc8fb-f837-4c50-97bf-08df17cef6a4 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0;ARA:13230040|366016|23010399003|376014|10070799003|1800799024|38070700021|3023799007|6133799003|10067099003|56012099006|18002099003|22082099003; x-microsoft-antispam-message-info: ZWozVAhfpyFlGYwPKlX8Kcyo7ien88LfvTqCWbMPThe/8rOIcYtbgqRaFevl5tD2O0TMIpJ4/waxO30ol3BbcfgrozJYB5zshiTMJCBvf1lYduY9XNt3GFC+9bqF28YN0S1dJj7aGxHf0hIAwlIw843Xg0OVBIOyENt+nvoA3r+UU4Kmb4BE3BRCDGd5K8xEbUYq/blQRdaCy1GKskE7iGfPTr9VRcfg4l4jM78Sq+cprf3UlQXSE/WkO1OLFYsMvYwDUzsqv6nwcPCLgJsXlP4Ulq3KxtnESas6wOihrQR8AQkTu9X9cjJ6lTQGNKkjIaixJXHunSXm6WTPDhy/azxZTc4mNDfaGFQrjbPaZ4+CO/RnaYkrdx55HqQLo3++D3NuhElXNIoMyXzdMgz80h2tbhb3zvDoJESC4vwjsiUc6jmnyXSNmQi05+KBFoQf5uA3s05gS94xeXdYl56s0uSSM18g27lMdtODDjB623FYSckqwKEHtDcyiQAKlSgzDSAg1NmM5gvu3RLTepdh9n7NCtYeaSYitlzOGsJJRh4CyuwtJuIjR9vUWxIT2yjwpC2wsMqzH9g7mz8dYc7+5NQeqKCJioZ9NHEhberPgw7GVzkx3DtvddRXrmKEz0Y6UEji6aWxUi1msmikziWwBzZZwOOmpHef9iYCXb2svb+7b5i5JOuhsP59gtIXMphp6p+4kOig1dX6KrkAhol1SNC6MzOCimPA1jyWOHemOrw= x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAZSPR01MB0011.FRAP264.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(13230040)(366016)(23010399003)(376014)(10070799003)(1800799024)(38070700021)(3023799007)(6133799003)(10067099003)(56012099006)(18002099003)(22082099003);DIR:OUT;SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 2 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?N2VZRHVsN0hqSkY0enIvWGpBOThOWDM1YkVnUnJjT2hXcUhVWU1WYU0weHJi?= =?utf-8?B?MnAxTUIrZ2ZnVC9lN2VXNjNIcy9WNnVSRkdNK3JmMlBDNGUwZjFFbFRBUXhP?= =?utf-8?B?VTJsbTlkWUllNktyVEZPSGVZb1dKZENQbktPOW5tUit1dVl4OExvdzZ6TUhQ?= =?utf-8?B?VDZMNGFOWityUDNER0picHNabFFZWUw0Ymw4KzJwZzc3SEFWRXVaMFNFVll1?= =?utf-8?B?Ym9YWk04NzZUUGRxUHgrOTgvb05icWhSbGpnOW1ocTYvelhqRFJJZ0dGU2M3?= =?utf-8?B?ejErQnNWcXNpODR4RkRSMFhXMm9iNzlsWEU1T0pDSi9oRU9GNDZweXNxTGY3?= =?utf-8?B?dFpPWXlzQnBKektTS1VnbmE0SWJPNzBFckUrM1FiWENzdjhWMHpNNjlzOEk0?= =?utf-8?B?bWJJVGQ2NWdBSjhWT1VSYUZQRGhxNVBvZ3ArNi9VV0tzRkVkMXMxbGRYWlN1?= =?utf-8?B?REVWMXJtWHZvK09iTTJrMmxha3RXZnp5b3BTd241OVhqSjVJeHFyY3NGZm5N?= =?utf-8?B?SkkzNm4yYzhLQ25mYTJVT2dSdm85S1BBSHB1YUlJWVh2ZnhMd1RTV0QxNk9S?= =?utf-8?B?Vzk3OWtUNkJGMFI2K3R2WXozbVZzS1R0b3QyR3JPZXdQTlo2djVEdzhDempY?= =?utf-8?B?MFg0dVRlN3pNVXNERGtLek5DL3RRMElsSnY4T0g1N0cwMHd3VUpDQjJEckRD?= =?utf-8?B?RVQwRk1Ec3hqcmgrQXRxRE1kS005K09FeXNIY3pyR3V3d2RTUm5Va09WMmI5?= =?utf-8?B?VTJRdzRSemxqeGNpTGErRTBDTWF3YnM4Tk5KTllMZnpYSUNxeWFWWGZtOElI?= =?utf-8?B?WC80TDFpTEtKWEl6bkx2M21hSEpVZjVVb0szdWhIMys2ZHBxQ04wVXVxamhh?= =?utf-8?B?bURDT2dhRWVWd29wYlMwbWVEV3FQeXExc1A3RDdtQU10azJhTTZ4UERMcFZ5?= =?utf-8?B?S25xVDhRSlNMRnpBTkdjVkVPVXhFaTNtNDZwKzFuVDRpOHp6UjdOWUFWMzFF?= =?utf-8?B?WCtETDBCQ2dWWjZiK3llTVo4dzA2dFdLaG0vZTV1UFI2dUdQdExtL05uM3Rm?= =?utf-8?B?YWxLZjBaWjA2azc5dWQra1JNWk9ZNnh2ZlY4UHgzcDhPNWtINGNjWnZpN0RJ?= =?utf-8?B?TTh4Y1Zsb2M1anBNdUE2QmRiS1ltMkxZaWFObDBsZk5ucm1ZNFQvZnVyRUp4?= =?utf-8?B?UTN5OUhISEgrMHJKeDA5Y0U3Q0ZLWUYwVjdUOE5aM1lMTFZEZW5FOWg5dGRO?= =?utf-8?B?RDFZQkNBelFUeVA4bmNuc1EyZDB1L1QzQklVaWlUNHBnZzFqODdBSUZmZGtN?= =?utf-8?B?cjFUb2prejlDYUNzZ0M5TGdMcjhoSytuVTF0aFFUNVFMbVdwY2RyZ1VZZ0tv?= =?utf-8?B?YUtVT3kyZFNnUGRaMDZLVHJYT0EwdU5BVjBoUm1JOHJnU291dWtKYk9JSnQ2?= =?utf-8?B?czkwR0dWZTZMM2JPSjRZcUlOakhVUnNvTTczWUFrWGZmaFV2MFBUdWEya3RF?= =?utf-8?B?cGdqcXlNaHEydkEvb2FNSVhWbm4yalEwZmpYenVCUi9ReExlR2RqUThSaHBO?= =?utf-8?B?bWczQm5aT2hZUU5FVUx6c1krVjJtZ1U0R2xZN3FjZkcyLzJNRVMwOGFFYUg0?= =?utf-8?B?d0srWkpNSGw2djhFN2hZNy9BWS9Ta3lTcXVWclNwWmdoMGZBM2FsZFlJVTY2?= =?utf-8?B?L1BnR1NEVDAzM2pNc0hqdDIvOFJiQlUxcEk5dWhJZkVia1V1YkhWQXhjT3Z5?= =?utf-8?B?RGVBU29KWXlqR2kxSXp6VVpNdk13Um1uMEtCdTBDNUxrN2lVV0xiMFJnWkg1?= =?utf-8?B?U0ZBT2tmbWtYR3pseUFqaER4ektBcFpNTFBqemM0WmhWU3ZFV2Rkd2h4azQx?= =?utf-8?B?Uy83N0YzRHpia01mY3VZd2hSS3pxTTlQNkRUOVVqRXNSYmhWOThtRFFvQnNM?= =?utf-8?B?QjY5cVU4bXQ4QlI5M1Z0OFlxYm81UVJVcjEvaXVBbWtGUDhYUmUvaUJRZ0FT?= =?utf-8?B?T3dlc0xJMWQ5Q0g2M083QnhRRmxCckhaSVhQRVV1cU1GMFNqME1iNDNJVFRr?= =?utf-8?B?SmpTYXdtaDRLemo5ZUdzeG5nMHVSMkxtenBxQjUyR0huTmlreE5DUTArMTVK?= =?utf-8?B?Q0c1RTVGSktuQWMvSEZGNnZ0cHpIaW1PT09yQy90WUpqNUt6bHYvSm5rU3FM?= =?utf-8?B?aHFwbGdvTHlOVzhNSzRFL2VjTkZtMS91U0pPTld5ckhzZWlGMDl0ekZlZlR5?= =?utf-8?B?SXRVVVkySm0zYWVmWjZTTDc4T3JXVnFDUUFDQm9kNFBDTXlzLzU4TldULzg0?= =?utf-8?B?dWVLTXg4cFhXYTI2bi9IcmNOZHRFL3dLV2xvOTFJbEl0eDVVM2tpMWZBdld4?= =?utf-8?Q?olyosrYTrAsTJ1xCa4bZZQ2Yb9UNTrn1ZsfpPc6vAwvhe?= x-ms-exchange-antispam-messagedata-1: qLjkit/Zz7KP4Q== Content-Type: text/plain; charset="utf-8" Content-ID: <5C6F4989456C8149A6CE081DCE8A9E88@FRAP264.PROD.OUTLOOK.COM> Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: groupe-cyllene.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: PAZSPR01MB0011.FRAP264.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-Network-Message-Id: 398bc8fb-f837-4c50-97bf-08df17cef6a4 X-MS-Exchange-CrossTenant-originalarrivaltime: 21 Sep 2026 10:56:17.8456 (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: uAIjDiYLdmeE/IWOoOhpOTWep76alArdL2gbYNREZ5HapnTCH9OGckagUh6THcmetrnUrPqZeS3AHljd7hhSIDJuTWUoBaLIPVv6QKriGWsQrr/jEzyHM6prrSrRrVS+ X-MS-Exchange-Transport-CrossTenantHeadersStamped: MR0P264MB5211 X-SPAM-LEVEL: Spam detection results: 2 AWL -2.279 Adjusted score from AWL reputation of From: address 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 RCVD_IN_DNSWL_NONE -0.0001 Sender listed at https://www.dnswl.org/, no trust SPF_HELO_PASS -0.001 SPF: HELO matches SPF record SPF_PASS -0.001 SPF: sender matches SPF record URIBL_DBL_SPAM 5 Contains a spam URL listed in the Spamhaus DBL blocklist [sdn.pm] Message-ID-Hash: J5HGHNDUEQLJ2MGFQCJS26OZUGOGQZEH X-Message-ID-Hash: J5HGHNDUEQLJ2MGFQCJS26OZUGOGQZEH X-MailFrom: alexandre.derumier@groupe-cyllene.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; loop; banned-address; emergency; member-moderation; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; digests; suspicious-header X-Mailman-Version: 3.3.10 Precedence: list List-Id: Proxmox VE development discussion List-Help: List-Owner: List-Post: List-Subscribe: List-Unsubscribe: SGksIAoKY291bGQgd2UgaGF2ZSBhbiBvcHRpb24gdG8gZW5hYmxlL2Rpc2FibGUgaXQgPwoKSSBy ZW1lbWJlciB0byBoYXZlIHNvbWUgZmxvb2Qgd2l0aCBldnBuICYmIGZyciBwZWVyaW5nIHdoZW4g cmVsb2FkaW5nIAphbGwgbm9kZXMgYXQgc2FtZSB0aW1lIGluIHRoZSBwYXN0LiAoZG9uJ3QgcmVt ZW1iZXIgZXhhY3RseSBvbiB3aGljaApjaGFuZ2UsIGJ1dCBpdCB3YXMgb24gZnJyIHNpZGUpCgoK CgpMZSBqZXVkaSAwOSBqdWlsbGV0IDIwMjYgw6AgMTY6MDYgKzAyMDAsIFN0ZWZhbiBIYW5yZWlj aCBhIMOpY3JpdMKgOgo+IFV0aWxpemUgdGhlIEFQSSBjbGllbnQgdG8gc3Bhd24gdGFza3Mgb24g ZWFjaCBub2RlIGFuZCB0aGVuIG1vbml0b3IKPiB0aGUgcHJvZ3Jlc3Mgb2YgdGhlIHRhc2tzIHZp YSB0aGUgQVBJIGFzIHdlbGwuIFRoaXMgYWxsb3dzIGZvcgo+IHN0YXJ0aW5nIHRoZSByZWxvYWQg dGFza3MgaW4gcGFyYWxsZWwuIEl0IGlzIHBhcnRpY3VsYXJseSB1c2VmdWwgZm9yCj4gbGFyZ2Ug c2V0dXBzLCB3aGVyZSBhcHBseWluZyB0aGUgU0ROIGNvbmZpZ3VyYXRpb24gY2FuIHRha2UgYQo+ IGNvbnNpZGVyYWJsZSBhbW91bnQgb2YgdGltZS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBTdGVmYW4g SGFucmVpY2ggPHMuaGFucmVpY2hAcHJveG1veC5jb20+Cj4gLS0tCj4gCj4gTm90ZXM6Cj4gwqDC oMKgIFNlbmRpbmcgdGhpcyBhcyBhbiBSRkMsIGFzIHRoaXMgcmVxdWlyZXMgY2FyZWZ1bCB0ZXN0 aW5nIGltby4KPiDCoMKgwqAgCj4gwqDCoMKgIEFuIGV4YW1wbGUgd2hlcmUgdGhpcyBjaGFuZ2Ug Y291bGQgYmFja2ZpcmUgaGFzIGJlZW4gZW5jb3VudGVyZWQKPiDCoMKgwqAgcmVjZW50bHkuIEEg dXNlciBhcHBsaWVkIHRoZSBTRE4gY29uZmlndXJhdGlvbiwgd2hpY2ggYnJva2UgdGhlCj4gwqDC oMKgIGNsdXN0ZXIgLyBtYW5hZ2VtZW50IG5ldHdvcmsgb2YgdGhlIG5vZGUgdGhhdCB3YXMgY2Fy cnlpbmcgb3V0Cj4gdGhlCj4gwqDCoMKgIHJlbG9hZCBuZXR3b3JrIHRhc2suIFNpbmNlIGl0IHdh cyBleGVjdXRlZCBzZXF1ZW50aWFsbHksIG9ubHkgb25lCj4gbm9kZQo+IMKgwqDCoCB3YXMgYWZm ZWN0ZWQuIEluIHRoaXMgc2NlbmFyaW8sIHdpdGggdGhpcyBwYXRjaCBhcHBsaWVkLCB0aGUKPiB3 aG9sZQo+IMKgwqDCoCBjbHVzdGVyIHdvdWxkIGhhdmUgYmVlbiBkb3duLgo+IMKgwqDCoCAKPiDC oMKgwqAgV2UgY291bGQgcG90ZW50aWFsbHkgcHJvdmlkZSBhbiBvcHRpb24gdGhhdCBsaW1pdHMg dGhlIGFtb3VudCBvZgo+IG5vZGVzCj4gwqDCoMKgIHdoZXJlIHRoZSByZWxvYWQgdGFzayBydW5z IGluIHBhcmFsbGVsIGFuZCBleHBvc2UgdGhhdCBpbiB0aGUgVUk/Cj4gwqDCoMKgIAo+IMKgwqDC oCBBbHNvLCBjdXJyZW50bHkgdGhlIHRhc2sgY291bGQgbmV2ZXIgZmFpbCBhbmQgZXJyb3JzIHdl cmUgc2hvd24KPiBpbiB0aGUKPiDCoMKgwqAgcmVzcGVjdGl2ZSByZWxvYWQgdGFza3MgZXhlY3V0 ZWQgb24gdGhlIG5vZGVzLCBJJ3ZlIGtlcHQgdGhhdAo+IGJlaGF2aW9yCj4gwqDCoMKgIHRoZSBz YW1lLCBidXQgaW50cm9kdWNlZCB3YXJuaW5ncyBpZiB0aGVyZSBhcmUgYW55IGlzc3VlcyB3aXRo Cj4gQVBJCj4gwqDCoMKgIGNhbGxzLgo+IAo+IMKgc3JjL1BWRS9BUEkyL05ldHdvcmsvU0ROLnBt IHwgMTA5ICsrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0KPiAtLQo+IMKgMSBmaWxl IGNoYW5nZWQsIDc4IGluc2VydGlvbnMoKyksIDMxIGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1n aXQgYS9zcmMvUFZFL0FQSTIvTmV0d29yay9TRE4ucG0KPiBiL3NyYy9QVkUvQVBJMi9OZXR3b3Jr L1NETi5wbQo+IGluZGV4IGUzYzhkOWRkLi5kZDJjZjA1YSAxMDA2NDQKPiAtLS0gYS9zcmMvUFZF L0FQSTIvTmV0d29yay9TRE4ucG0KPiArKysgYi9zcmMvUFZFL0FQSTIvTmV0d29yay9TRE4ucG0K PiBAQCAtMTAsNiArMTAsNyBAQCB1c2UgUFZFOjpDbHVzdGVyIHF3KGNmc19sb2NrX2ZpbGUgY2Zz X3JlYWRfZmlsZQo+IGNmc193cml0ZV9maWxlKTsKPiDCoHVzZSBQVkU6OkV4Y2VwdGlvbiBxdyhy YWlzZV9wYXJhbV9leGMpOwo+IMKgdXNlIFBWRTo6SlNPTlNjaGVtYSBxdyhnZXRfc3RhbmRhcmRf b3B0aW9uKTsKPiDCoHVzZSBQVkU6OlJFU1RIYW5kbGVyOwo+ICt1c2UgUFZFOjpSRVNURW52aXJv bm1lbnQgcXcobG9nX3dhcm4pOwo+IMKgdXNlIFBWRTo6UlBDRW52aXJvbm1lbnQ7Cj4gwqB1c2Ug UFZFOjpTYWZlU3lzbG9nOwo+IMKgdXNlIFBWRTo6VG9vbHMgcXcocnVuX2NvbW1hbmQgZXh0cmFj dF9wYXJhbSk7Cj4gQEAgLTEwNywzMCArMTA4LDYgQEAgX19QQUNLQUdFX18tPnJlZ2lzdGVyX21l dGhvZCh7Cj4gwqDCoMKgwqAgfSwKPiDCoH0pOwo+IMKgCj4gLW15ICRjcmVhdGVfcmVsb2FkX25l dHdvcmtfd29ya2VyID0gc3ViIHsKPiAtwqDCoMKgIG15ICgkbm9kZW5hbWUsICRyZWdlbmVyYXRl X2ZycikgPSBAXzsKPiAtCj4gLcKgwqDCoCBteSBAY29tbWFuZCA9ICgncHZlc2gnLCAnc2V0Jywg Ii9ub2Rlcy8kbm9kZW5hbWUvbmV0d29yayIpOwo+IC3CoMKgwqAgcHVzaChAY29tbWFuZCwgJy0t cmVnZW5lcmF0ZS1mcnInLCAkcmVnZW5lcmF0ZV9mcnIpOwo+IC0KPiAtwqDCoMKgICMgRklYTUU6 IGhvdyB0byBwcm94eSB0byBmaW5hbCBub2RlID8KPiAtwqDCoMKgIG15ICR1cGlkOwo+IC3CoMKg wqAgcHJpbnQgIiRub2RlbmFtZTogcmVsb2FkaW5nIG5ldHdvcmsgY29uZmlnXG4iOwo+IC3CoMKg wqAgcnVuX2NvbW1hbmQoCj4gLcKgwqDCoMKgwqDCoMKgIFxAY29tbWFuZCwKPiAtwqDCoMKgwqDC oMKgwqAgb3V0ZnVuYyA9PiBzdWIgewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIG15ICRsaW5l ID0gc2hpZnQ7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCRsaW5lID1+IC9bIiddPyhV UElEOlteXHMiJ10rKVsiJ10/JC8pIHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ICR1cGlkID0gJDE7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+IC3CoMKgwqDCoMKgwqDC oCB9LAo+IC3CoMKgwqAgKTsKPiAtwqDCoMKgICNteSAkdXBpZCA9IFBWRTo6QVBJMjo6TmV0d29y ay0+cmVsb2FkX25ldHdvcmtfY29uZmlnKHsgbm9kZSA9Pgo+ICRub2RlbmFtZSB9KTsKPiAtwqDC oMKgIG15ICRyZXMgPSBQVkU6OlRvb2xzOjp1cGlkX2RlY29kZSgkdXBpZCk7Cj4gLQo+IC3CoMKg wqAgcmV0dXJuICRyZXMtPntwaWR9Owo+IC19Owo+IC0KPiDCoF9fUEFDS0FHRV9fLT5yZWdpc3Rl cl9tZXRob2Qoewo+IMKgwqDCoMKgIG5hbWUgPT4gJ2xvY2snLAo+IMKgwqDCoMKgIHByb3RlY3Rl ZCA9PiAxLAo+IEBAIC0yODIsNiArMjU5LDQxIEBAIF9fUEFDS0FHRV9fLT5yZWdpc3Rlcl9tZXRo b2Qoewo+IMKgwqDCoMKgIH0sCj4gwqB9KTsKPiDCoAo+ICtzdWIgY3JlYXRlX2FwaV9jbGllbnQg ewo+ICvCoMKgwqAgbXkgKCRyZXF1ZXN0X3RpbWVvdXQpID0gQF87Cj4gKwo+ICvCoMKgwqAgbXkg JHJwY2VudiA9IFBWRTo6UlBDRW52aXJvbm1lbnQ6OmdldCgpOwo+ICvCoMKgwqAgbXkgJGF1dGh1 c2VyID0gJHJwY2Vudi0+Z2V0X3VzZXIoKTsKPiArwqDCoMKgIG15ICRjcmVkZW50aWFscyA9ICRy cGNlbnYtPmdldF9jcmVkZW50aWFscygpOwo+ICsKPiArwqDCoMKgIG15ICRhcGlfdG9rZW4gPSAk Y3JlZGVudGlhbHMtPnthcGlfdG9rZW59Owo+ICvCoMKgwqAgbXkgJHRpY2tldCA9ICRjcmVkZW50 aWFscy0+e3RpY2tldH07Cj4gK8KgwqDCoCBteSAkY3NyZl90b2tlbiA9ICRjcmVkZW50aWFscy0+ e3Rva2VufTsKPiArCj4gK8KgwqDCoCBteSAkbm9kZSA9IFBWRTo6SU5vdGlmeTo6bm9kZW5hbWUo KTsKPiArwqDCoMKgIG15ICRmaW5nZXJwcmludCA9IFBWRTo6Q2x1c3Rlcjo6Z2V0X25vZGVfZmlu Z2VycHJpbnQoJG5vZGUpOwo+ICsKPiArwqDCoMKgIG15ICRjb25uX2FyZ3MgPSB7Cj4gK8KgwqDC oMKgwqDCoMKgIHByb3RvY29sID0+ICdodHRwcycsCj4gK8KgwqDCoMKgwqDCoMKgIGhvc3QgPT4g J2xvY2FsaG9zdCcsICMgYWx3YXlzIGNhbGwgdGhlIGFwaSBsb2NhbGx5LCBsZXQKPiBwdmVwcm94 eSBoYW5kbGUgdGhlIHByb3h5aW5nCj4gK8KgwqDCoMKgwqDCoMKgIHBvcnQgPT4gODAwNiwKPiAr wqDCoMKgwqDCoMKgwqAgdXNlcm5hbWUgPT4gJGF1dGh1c2VyLAo+ICvCoMKgwqDCoMKgwqDCoCB0 aWNrZXQgPT4gJHRpY2tldCwKPiArwqDCoMKgwqDCoMKgwqAgYXBpdG9rZW4gPT4gJGFwaV90b2tl biwKPiArwqDCoMKgwqDCoMKgwqAgdGltZW91dCA9PiAkcmVxdWVzdF90aW1lb3V0IC8vIDI1LCAj IGRlZmF1bHQgc2xpZ2h0bHkKPiBzaG9ydGVyIHRoYW4gdGhlIHByb3h5LT5kYWVtb24gdGltZW91 dAo+ICvCoMKgwqDCoMKgwqDCoCBjYWNoZWRfZmluZ2VycHJpbnRzID0+IHsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAkZmluZ2VycHJpbnQgPT4gMSwKPiArwqDCoMKgwqDCoMKgwqAgfSwKPiAr wqDCoMKgIH07Cj4gKwo+ICvCoMKgwqAgbXkgJGFwaV9jbGllbnQgPSBQVkU6OkFQSUNsaWVudDo6 TFdQLT5uZXcoJGNvbm5fYXJncy0+JSopOwo+ICvCoMKgwqAgaWYgKGRlZmluZWQoJGNzcmZfdG9r ZW4pKSB7Cj4gK8KgwqDCoMKgwqDCoMKgICRhcGlfY2xpZW50LT51cGRhdGVfY3NyZnRva2VuKCRj c3JmX3Rva2VuKTsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCByZXR1cm4gJGFwaV9jbGllbnQ7 Cj4gK30KPiArCj4gwqBfX1BBQ0tBR0VfXy0+cmVnaXN0ZXJfbWV0aG9kKHsKPiDCoMKgwqDCoCBu YW1lID0+ICdyZWxvYWQnLAo+IMKgwqDCoMKgIHByb3RlY3RlZCA9PiAxLAo+IEBAIC0yOTEsNiAr MzAzLDcgQEAgX19QQUNLQUdFX18tPnJlZ2lzdGVyX21ldGhvZCh7Cj4gwqDCoMKgwqAgcGVybWlz c2lvbnMgPT4gewo+IMKgwqDCoMKgwqDCoMKgwqAgY2hlY2sgPT4gWydwZXJtJywgJy9zZG4nLCBb J1NETi5BbGxvY2F0ZSddXSwKPiDCoMKgwqDCoCB9LAo+ICvCoMKgwqAgZXhwb3NlX2NyZWRlbnRp YWxzID0+IDEsCj4gwqDCoMKgwqAgcGFyYW1ldGVycyA9PiB7Cj4gwqDCoMKgwqDCoMKgwqDCoCBh ZGRpdGlvbmFsUHJvcGVydGllcyA9PiAwLAo+IMKgwqDCoMKgwqDCoMKgwqAgcHJvcGVydGllcyA9 PiB7Cj4gQEAgLTMzNiwyMiArMzQ5LDU2IEBAIF9fUEFDS0FHRV9fLT5yZWdpc3Rlcl9tZXRob2Qo ewo+IMKgwqDCoMKgwqDCoMKgwqAgbXkgJHJlZ2VuZXJhdGVfZnJyID0gKCRwcmV2aW91c19jb25m aWdfaGFzX2ZyciB8fAo+ICRuZXdfY29uZmlnX2hhc19mcnIpID8gMSA6IDA7Cj4gwqAKPiDCoMKg wqDCoMKgwqDCoMKgIG15ICRjb2RlID0gc3ViIHsKPiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAk cnBjZW52LT57dHlwZX0gPSAncHJpdic7ICMgdG8gc3RhcnQgdGFza3MgaW4gYmFja2dyb3VuZAo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBQVkU6OkNsdXN0ZXI6OmNoZWNrX2Nmc19xdW9ydW0o KTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbXkgJGFwaV9jbGllbnQgPSBjcmVhdGVf YXBpX2NsaWVudCgpOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBteSAkbm9kZWxpc3QgPSBQ VkU6OkNsdXN0ZXI6OmdldF9ub2RlbGlzdCgpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBteSAkdGFza3MgPSB7fTsKPiArCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZvciBteSAk bm9kZSAoQCRub2RlbGlzdCkgewo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbXkg JHBpZCA9IGV2YWwgeyAkY3JlYXRlX3JlbG9hZF9uZXR3b3JrX3dvcmtlci0KPiA+KCRub2RlLCAk cmVnZW5lcmF0ZV9mcnIpIH07Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB3YXJu ICRAIGlmICRAOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJpbnQgIiRub2Rl OiByZWxvYWRpbmcgbmV0d29yayBjb25maWdcbiI7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgbXkgJHVwaWQgPSBldmFsIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgJGFwaV9jbGllbnQtPnB1dCgKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiL25vZGVzLyRub2RlL25ldHdvcmsiLAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICdyZWdlbmVyYXRl LWZycicgPT4gJHJlZ2VuZXJhdGVfZnJyLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIH0sCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Owo+ICsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICgkQCkgewo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsb2dfd2FybigiJG5vZGU6IGNvdWxkIG5vdCByZWxvYWQg bmV0d29yawo+IGNvbmZpZ3VyYXRpb246ICRAXG4iKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgbmV4dDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAkdGFza3MtPnskdXBpZH0g PSAkbm9kZTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+IMKgCj4gLcKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgIyBGSVhNRTogdXNlIGxpYnB2ZS1hcGljbGllbnQgKGxpa2UgaW4gY2x1c3Rl ciBqb2luKSB0bwo+IGNyZWF0ZQo+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgICMgdGFza3MgYW5k IG1vaXRvciB0aGUgdGFza3MuCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcHJpbnQgIndhaXRp bmcgZm9yIHJlbG9hZCB0YXNrcyB0byBmaW5pc2hcbiI7Cj4gwqAKPiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCByZXR1cm47Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgd2hpbGUgKCR0YXNrcy0+ JSopIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGZvciBteSAkdXBpZCAoa2V5 cyAkdGFza3MtPiUqKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IG15ICRub2RlID0gJHRhc2tzLT57JHVwaWR9Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBteSAkdGFzayA9IGV2YWwgeyAkYXBpX2NsaWVudC0KPiA+Z2V0KCIvbm9k ZXMvJG5vZGUvdGFza3MvJHVwaWQvc3RhdHVzIikgfTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICgkQCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxvZ193YXJuKCJjb3VsZCBub3QgZ2V0IHN0YXR1cyBv ZiByZWxvYWQKPiB0YXNrOiAkQFxuIik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgZGVsZXRlICR0YXNrcy0+eyR1cGlkfTsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBuZXh0Owo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBuZXh0IGlmICR0YXNrLT57c3RhdHVzfSBlcSAncnVubmluZyc7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHByaW50ICIkbm9kZTogcmVs b2FkIHRhc2sgZmluaXNoZWRcbiI7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGRlbGV0ZSAkdGFza3MtPnskdXBpZH07Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCB9Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc2xlZXAoMSk7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+IMKgwqDCoMKgwqDCoMKgwqAgfTsKPiDCoAo+ IMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuICRycGNlbnYtPmZvcmtfd29ya2VyKCdyZWxvYWRuZXR3 b3JrYWxsJywgdW5kZWYsCj4gJGF1dGh1c2VyLCAkY29kZSk7Cj4gLQo+IMKgwqDCoMKgIH0sCj4g wqB9KTsKPiDCoAo=