From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from firstgate.proxmox.com (firstgate.proxmox.com [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id D6F291FF164 for ; Fri, 4 Jul 2025 14:19:09 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id E698D3765A; Fri, 4 Jul 2025 14:19:49 +0200 (CEST) Date: Fri, 4 Jul 2025 14:19:45 +0200 From: Gabriel Goller To: Wolfgang Bumiller Message-ID: Mail-Followup-To: Wolfgang Bumiller , pve-devel@lists.proxmox.com References: <20250702145101.894299-1-g.goller@proxmox.com> <20250702145101.894299-2-g.goller@proxmox.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: NeoMutt/20241002-35-39f9a6 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.014 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DMARC_MISSING 0.1 Missing DMARC policy KAM_DMARC_STATUS 0.01 Test Rule for DKIM or SPF Failure with Strict Alignment SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: Re: [pve-devel] [PATCH proxmox v4 1/5] network-types: initial commit X-BeenThere: pve-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox VE development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox VE development discussion Cc: pve-devel@lists.proxmox.com Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: pve-devel-bounces@lists.proxmox.com Sender: "pve-devel" Pj4gW3NuaXBdCj4+ICAjIHdvcmtzcGFjZSBkZXBlbmRlbmNpZXMKPj4gLXByb3htb3gtYWNjZXNz LWNvbnRyb2wgPSB7IHZlcnNpb24gPSAiMC4yLjUiLCBwYXRoID0gInByb3htb3gtYWNjZXNzLWNv bnRyb2wiIH0KPj4gLXByb3htb3gtYWNtZSA9IHsgIHZlcnNpb24gPSAiMS4wLjAiLCBwYXRoID0g InByb3htb3gtYWNtZSIsIGRlZmF1bHQtZmVhdHVyZXMgPSBmYWxzZSB9Cj4+IC1wcm94bW94LWFw aS1tYWNybyA9IHsgdmVyc2lvbiA9ICIxLjQuMCIsIHBhdGggPSAicHJveG1veC1hcGktbWFjcm8i IH0KPj4gLXByb3htb3gtYXB0LWFwaS10eXBlcyA9IHsgdmVyc2lvbiA9ICIyLjAuMCIsIHBhdGgg PSAicHJveG1veC1hcHQtYXBpLXR5cGVzIiB9Cj4+IC1wcm94bW94LWF1dGgtYXBpID0geyB2ZXJz aW9uID0gIjEuMC4wIiwgcGF0aCA9ICJwcm94bW94LWF1dGgtYXBpIiB9Cj4+IC1wcm94bW94LWFz eW5jID0geyB2ZXJzaW9uID0gIjAuNS4wIiwgcGF0aCA9ICJwcm94bW94LWFzeW5jIiB9Cj4+IC1w cm94bW94LWJhc2U2NCA9IHsgIHZlcnNpb24gPSAiMS4wLjAiLCBwYXRoID0gInByb3htb3gtYmFz ZTY0IiB9Cj4+IC1wcm94bW94LWNvbXByZXNzaW9uID0geyB2ZXJzaW9uID0gIjEuMC4wIiwgcGF0 aCA9ICJwcm94bW94LWNvbXByZXNzaW9uIiB9Cj4+IC1wcm94bW94LWRhZW1vbiA9IHsgdmVyc2lv biA9ICIxLjAuMCIsIHBhdGggPSAicHJveG1veC1kYWVtb24iIH0KPj4gLXByb3htb3gtaHR0cCA9 IHsgdmVyc2lvbiA9ICIxLjAuMCIsIHBhdGggPSAicHJveG1veC1odHRwIiB9Cj4+IC1wcm94bW94 LWh0dHAtZXJyb3IgPSB7IHZlcnNpb24gPSAiMS4wLjAiLCBwYXRoID0gInByb3htb3gtaHR0cC1l cnJvciIgfQo+PiAtcHJveG1veC1odW1hbi1ieXRlID0geyB2ZXJzaW9uID0gIjEuMC4wIiwgcGF0 aCA9ICJwcm94bW94LWh1bWFuLWJ5dGUiIH0KPj4gLXByb3htb3gtaW8gPSB7IHZlcnNpb24gPSAi MS4yLjAiLCBwYXRoID0gInByb3htb3gtaW8iIH0KPj4gLXByb3htb3gtbGFuZyA9IHsgdmVyc2lv biA9ICIxLjUiLCBwYXRoID0gInByb3htb3gtbGFuZyIgfQo+PiAtcHJveG1veC1sb2cgPSB7IHZl cnNpb24gPSAiMS4wLjAiLCBwYXRoID0gInByb3htb3gtbG9nIiB9Cj4+IC1wcm94bW94LWxvZ2lu ID0geyB2ZXJzaW9uID0gIjEuMC4wIiwgcGF0aCA9ICJwcm94bW94LWxvZ2luIiB9Cj4+IC1wcm94 bW94LXByb2R1Y3QtY29uZmlnID0geyB2ZXJzaW9uID0gIjEuMC4wIiwgcGF0aCA9ICJwcm94bW94 LXByb2R1Y3QtY29uZmlnIiB9Cj4+IC1wcm94bW94LWNvbmZpZy1kaWdlc3QgPSB7IHZlcnNpb24g PSAiMS4wLjAiLCBwYXRoID0gInByb3htb3gtY29uZmlnLWRpZ2VzdCIgfQo+PiAtcHJveG1veC1y ZXN0LXNlcnZlciA9IHsgdmVyc2lvbiA9ICIxLjAuMCIsIHBhdGggPSAicHJveG1veC1yZXN0LXNl cnZlciIgfQo+PiAtcHJveG1veC1yb3V0ZXIgPSB7IHZlcnNpb24gPSAiMy4yLjIiLCBwYXRoID0g InByb3htb3gtcm91dGVyIiB9Cj4+IC1wcm94bW94LXNjaGVtYSA9IHsgdmVyc2lvbiA9ICI0LjEu MCIsIHBhdGggPSAicHJveG1veC1zY2hlbWEiIH0KPj4gLXByb3htb3gtc2VjdGlvbi1jb25maWcg PSB7IHZlcnNpb24gPSAiMy4xLjAiLCBwYXRoID0gInByb3htb3gtc2VjdGlvbi1jb25maWciIH0K Pj4gLXByb3htb3gtc2VuZG1haWwgPSB7IHZlcnNpb24gPSAiMS4wLjAiLCBwYXRoID0gInByb3ht b3gtc2VuZG1haWwiIH0KPj4gLXByb3htb3gtc2VyZGUgPSB7IHZlcnNpb24gPSAiMS4wLjAiLCBw YXRoID0gInByb3htb3gtc2VyZGUiLCBmZWF0dXJlcyA9IFsgInNlcmRlX2pzb24iIF0gfQo+PiAt cHJveG1veC1zaGFyZWQtbWVtb3J5ID0geyB2ZXJzaW9uID0gIjEuMC4wIiwgcGF0aCA9ICJwcm94 bW94LXNoYXJlZC1tZW1vcnkiIH0KPj4gK3Byb3htb3gtYWNtZSA9IHsgIHZlcnNpb24gPSAiMC41 LjMiLCBwYXRoID0gInByb3htb3gtYWNtZSIsIGRlZmF1bHQtZmVhdHVyZXMgPSBmYWxzZSB9Cj4+ ICtwcm94bW94LWFwaS1tYWNybyA9IHsgdmVyc2lvbiA9ICIxLjMuMiIsIHBhdGggPSAicHJveG1v eC1hcGktbWFjcm8iIH0KPj4gK3Byb3htb3gtYXB0LWFwaS10eXBlcyA9IHsgdmVyc2lvbiA9ICIx LjAuMiIsIHBhdGggPSAicHJveG1veC1hcHQtYXBpLXR5cGVzIiB9Cj4+ICtwcm94bW94LWF1dGgt YXBpID0geyB2ZXJzaW9uID0gIjAuNC4wIiwgcGF0aCA9ICJwcm94bW94LWF1dGgtYXBpIiB9Cj4+ ICtwcm94bW94LWFzeW5jID0geyB2ZXJzaW9uID0gIjAuNC4xIiwgcGF0aCA9ICJwcm94bW94LWFz eW5jIiB9Cj4+ICtwcm94bW94LWNvbXByZXNzaW9uID0geyB2ZXJzaW9uID0gIjAuMi40IiwgcGF0 aCA9ICJwcm94bW94LWNvbXByZXNzaW9uIiB9Cj4+ICtwcm94bW94LWRhZW1vbiA9IHsgdmVyc2lv biA9ICIwLjEuMCIsIHBhdGggPSAicHJveG1veC1kYWVtb24iIH0KPj4gK3Byb3htb3gtaHR0cCA9 IHsgdmVyc2lvbiA9ICIwLjkuNSIsIHBhdGggPSAicHJveG1veC1odHRwIiB9Cj4+ICtwcm94bW94 LWh0dHAtZXJyb3IgPSB7IHZlcnNpb24gPSAiMC4xLjAiLCBwYXRoID0gInByb3htb3gtaHR0cC1l cnJvciIgfQo+PiArcHJveG1veC1odW1hbi1ieXRlID0geyB2ZXJzaW9uID0gIjAuMS4wIiwgcGF0 aCA9ICJwcm94bW94LWh1bWFuLWJ5dGUiIH0KPj4gK3Byb3htb3gtaW8gPSB7IHZlcnNpb24gPSAi MS4xLjAiLCBwYXRoID0gInByb3htb3gtaW8iIH0KPj4gK3Byb3htb3gtbGFuZyA9IHsgdmVyc2lv biA9ICIxLjMiLCBwYXRoID0gInByb3htb3gtbGFuZyIgfQo+PiArcHJveG1veC1sb2c9IHsgdmVy c2lvbiA9ICIwLjIuOSIsIHBhdGggPSAicHJveG1veC1sb2ciIH0KPj4gK3Byb3htb3gtbG9naW4g PSB7IHZlcnNpb24gPSAiMC4yLjAiLCBwYXRoID0gInByb3htb3gtbG9naW4iIH0KPj4gK3Byb3ht b3gtbmV0d29yay10eXBlcyA9IHsgdmVyc2lvbiA9ICIwLjEuMCIsIHBhdGggPSAicHJveG1veC1u ZXR3b3JrLXR5cGVzIiB9Cj4+ICtwcm94bW94LXByb2R1Y3QtY29uZmlnID0geyB2ZXJzaW9uID0g IjAuMi4wIiwgcGF0aCA9ICJwcm94bW94LXByb2R1Y3QtY29uZmlnIiB9Cj4+ICtwcm94bW94LWNv bmZpZy1kaWdlc3QgPSB7IHZlcnNpb24gPSAiMC4xLjAiLCBwYXRoID0gInByb3htb3gtY29uZmln LWRpZ2VzdCIgfQo+PiArcHJveG1veC1yZXN0LXNlcnZlciA9IHsgdmVyc2lvbiA9ICIwLjguOCIs IHBhdGggPSAicHJveG1veC1yZXN0LXNlcnZlciIgfQo+PiArcHJveG1veC1yb3V0ZXIgPSB7IHZl cnNpb24gPSAiMy4xLjEiLCBwYXRoID0gInByb3htb3gtcm91dGVyIiB9Cj4+ICtwcm94bW94LXNj aGVtYSA9IHsgdmVyc2lvbiA9ICI0LjAuMCIsIHBhdGggPSAicHJveG1veC1zY2hlbWEiIH0KPj4g K3Byb3htb3gtc2VjdGlvbi1jb25maWcgPSB7IHZlcnNpb24gPSAiMy4wLjAiLCBwYXRoID0gInBy b3htb3gtc2VjdGlvbi1jb25maWciIH0KPj4gK3Byb3htb3gtc2VuZG1haWwgPSB7IHZlcnNpb24g PSAiMC4xLjAiLCBwYXRoID0gInByb3htb3gtc2VuZG1haWwiIH0KPj4gK3Byb3htb3gtc2VyZGUg PSB7IHZlcnNpb24gPSAiMC4xLjEiLCBwYXRoID0gInByb3htb3gtc2VyZGUiLCBmZWF0dXJlcyA9 IFsgInNlcmRlX2pzb24iIF0gfQo+PiArcHJveG1veC1zaGFyZWQtbWVtb3J5ID0geyB2ZXJzaW9u ID0gIjAuMy4wIiwgcGF0aCA9ICJwcm94bW94LXNoYXJlZC1tZW1vcnkiIH0KPj4gIHByb3htb3gt c29ydGFibGUtbWFjcm8gPSB7IHZlcnNpb24gPSAiMC4xLjMiLCBwYXRoID0gInByb3htb3gtc29y dGFibGUtbWFjcm8iIH0KPgo+XiBSZXZlcnRzIHRvIGJvb2t3b3JtIGRlcHMgLSB5b3Ugc3VyZSB0 aGUgcGF0Y2hlcyBhcmUgb3RoZXJ3aXNlIGJhc2VkIG9uCj50cml4aWU/CgpNaXNzZWQgdGhpcyBo dW5rLCBteSBiYWQuIFRoZSByZXN0IHNob3VsZCBiZSByZWJhc2VkIG9uIHRyaXhpZQpjb3JyZWN0 bHkuCgo+PiBkaWZmIC0tZ2l0IGEvcHJveG1veC1uZXR3b3JrLXR5cGVzL3NyYy9pcF9hZGRyZXNz LnJzIGIvcHJveG1veC1uZXR3b3JrLXR5cGVzL3NyYy9pcF9hZGRyZXNzLnJzCj4+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uMzU1NTQ3YjE3YWUwCj4+IC0tLSAv ZGV2L251bGwKPj4gKysrIGIvcHJveG1veC1uZXR3b3JrLXR5cGVzL3NyYy9pcF9hZGRyZXNzLnJz Cj4+IEBAIC0wLDAgKzEsMTQxMCBAQAo+PiArLy8hIFByb3ZpZGVzIGhlbHBlcnMgdG8gZGVhbCB3 aXRoIElQIGFkZHJlc3NlcyAvIENJRFJzCj4+ICsKPj4gK3VzZSBzdGQ6Om5ldDo6e0FkZHJQYXJz ZUVycm9yLCBJcEFkZHIsIElwdjRBZGRyLCBJcHY2QWRkcn07Cj4+ICsKPj4gK3VzZSBzZXJkZV93 aXRoOjp7RGVzZXJpYWxpemVGcm9tU3RyLCBTZXJpYWxpemVEaXNwbGF5fTsKPj4gK3VzZSB0aGlz ZXJyb3I6OkVycm9yOwo+PiArCj4+ICsvLy8gVGhlIGZhbWlseSAodjQgb3IgdjYpICBvZiBhbiBJ UCBhZGRyZXNzIG9yIENJRFIgcHJlZml4Cj4+ICsjW2Rlcml2ZShDbG9uZSwgQ29weSwgRGVidWcs IEVxLCBQYXJ0aWFsRXEpXQo+PiArcHViIGVudW0gRmFtaWx5IHsKPj4gKyAgICBWNCwKPj4gKyAg ICBWNiwKPj4gK30KPj4gKwo+PiAraW1wbCBGYW1pbHkgewo+PiArICAgIHB1YiBmbiBpc19pcHY0 KCZzZWxmKSAtPiBib29sIHsKPj4gKyAgICAgICAgKnNlbGYgPT0gU2VsZjo6VjQKPj4gKyAgICB9 Cj4KPm5pdDog4oaR4oaTIHRob3NlIGNvdWxkIHRha2Ugc2VsZiBjb3BpZWQgc2luY2UgaXQncyBG YW1pbHkgaXMgQ29weS4KCkRvbmUuCgo+PiArCj4+ICsgICAgcHViIGZuIGlzX2lwdjYoJnNlbGYp IC0+IGJvb2wgewo+PiArICAgICAgICAqc2VsZiA9PSBTZWxmOjpWNgo+PiArICAgIH0KPj4gK30K Pj4gKwo+PiAraW1wbCBzdGQ6OmZtdDo6RGlzcGxheSBmb3IgRmFtaWx5IHsKPj4gKyAgICBmbiBm bXQoJnNlbGYsIGY6ICZtdXQgc3RkOjpmbXQ6OkZvcm1hdHRlcikgLT4gc3RkOjpmbXQ6OlJlc3Vs dCB7Cj4+ICsgICAgICAgIG1hdGNoIHNlbGYgewo+PiArICAgICAgICAgICAgRmFtaWx5OjpWNCA9 PiBmLndyaXRlX3N0cigiSXB2NCIpLAo+PiArICAgICAgICAgICAgRmFtaWx5OjpWNiA9PiBmLndy aXRlX3N0cigiSXB2NiIpLAo+Cj5Gb3IgYSBEaXNwbGF5IGltcGxlbWVudGF0aW9uIGl0IElNTyBt YWtlcyBubyBzZW5zZSB0byBtaXgKPmNhcGl0YWwvbG93ZXJjYXNlIGluICJJUCIuIElmIHdlIG5l ZWQgdG8ga2VlcCB0aGlzIGZvciBzZXIvZGUgcHVycG9zZXMsCj5hZGQgYSBjb21tZW50IHBsZWFz ZS4gT3RoZXJ3aXNlIGNoYW5nZSBpdCB0byBJUHY0L0lQdjYuCgpBZ3JlZS4KCj4+ICsgICAgICAg IH0KPj4gKyAgICB9Cj4+ICt9Cj4+ICsKPj4gKyNbZGVyaXZlKEVycm9yLCBEZWJ1ZyldCj4+ICtw dWIgZW51bSBDaWRyRXJyb3Igewo+PiArICAgICNbZXJyb3IoImludmFsaWQgbmV0bWFzayIpXQo+ PiArICAgIEludmFsaWROZXRtYXNrLAo+PiArICAgICNbZXJyb3IoImludmFsaWQgSVAgYWRkcmVz cyIpXQo+PiArICAgIEludmFsaWRBZGRyZXNzKCNbZnJvbV0gQWRkclBhcnNlRXJyb3IpLAo+PiAr fQo+PiArCj4+ICsvLy8gUmVwcmVzZW50cyBlaXRoZXIgYW4gW2BJcHY0Q2lkcmBdIG9yIFtgSXB2 NkNpZHJgXSBDSURSIHByZWZpeAo+PiArI1tkZXJpdmUoCj4+ICsgICAgQ2xvbmUsIENvcHksIERl YnVnLCBQYXJ0aWFsT3JkLCBPcmQsIFBhcnRpYWxFcSwgRXEsIEhhc2gsIFNlcmlhbGl6ZURpc3Bs YXksIERlc2VyaWFsaXplRnJvbVN0ciwKPj4gKyldCj4+ICtwdWIgZW51bSBDaWRyIHsKPj4gKyAg ICBJcHY0KElwdjRDaWRyKSwKPj4gKyAgICBJcHY2KElwdjZDaWRyKSwKPj4gK30KPj4gKwo+PiAr aW1wbCBDaWRyIHsKPj4gKyAgICBwdWIgZm4gbmV3X3Y0KGFkZHI6IGltcGwgSW50bzxJcHY0QWRk cj4sIG1hc2s6IHU4KSAtPiBSZXN1bHQ8U2VsZiwgQ2lkckVycm9yPiB7Cj4+ICsgICAgICAgIE9r KENpZHI6OklwdjQoSXB2NENpZHI6Om5ldyhhZGRyLCBtYXNrKT8pKQo+PiArICAgIH0KPj4gKwo+ PiArICAgIHB1YiBmbiBuZXdfdjYoYWRkcjogaW1wbCBJbnRvPElwdjZBZGRyPiwgbWFzazogdTgp IC0+IFJlc3VsdDxTZWxmLCBDaWRyRXJyb3I+IHsKPj4gKyAgICAgICAgT2soQ2lkcjo6SXB2NihJ cHY2Q2lkcjo6bmV3KGFkZHIsIG1hc2spPykpCj4+ICsgICAgfQo+PiArCj4+ICsgICAgLy8vIHdo aWNoIFtgRmFtaWx5YF0gdGhpcyBDSURSIGJlbG9uZ3MgdG8KPj4gKyAgICBwdWIgY29uc3QgZm4g ZmFtaWx5KCZzZWxmKSAtPiBGYW1pbHkgewo+PiArICAgICAgICBtYXRjaCBzZWxmIHsKPj4gKyAg ICAgICAgICAgIENpZHI6OklwdjQoXykgPT4gRmFtaWx5OjpWNCwKPj4gKyAgICAgICAgICAgIENp ZHI6OklwdjYoXykgPT4gRmFtaWx5OjpWNiwKPj4gKyAgICAgICAgfQo+PiArICAgIH0KPj4gKwo+ PiArICAgIHB1YiBmbiBpc19pcHY0KCZzZWxmKSAtPiBib29sIHsKPj4gKyAgICAgICAgbWF0Y2hl cyEoc2VsZiwgQ2lkcjo6SXB2NChfKSkKPj4gKyAgICB9Cj4+ICsKPj4gKyAgICBwdWIgZm4gaXNf aXB2Nigmc2VsZikgLT4gYm9vbCB7Cj4+ICsgICAgICAgIG1hdGNoZXMhKHNlbGYsIENpZHI6Oklw djYoXykpCj4+ICsgICAgfQo+PiArCj4+ICsgICAgLy8vIFdoZXRoZXIgYSBnaXZlbiBJUCBhZGRy ZXNzIGlzIGNvbnRhaW5lZCBpbiB0aGlzIFtgQ2lkcmBdCj4+ICsgICAgLy8vCj4+ICsgICAgLy8v IFRoaXMgb25seSB3b3JrcyBpZiBib3RoIFtgSXBBZGRyYF0gYXJlIGluIHRoZSBzYW1lIGZhbWls eSwgb3RoZXJ3aXNlIHRoZSBmdW5jdGlvbiByZXR1cm5zCj4+ICsgICAgLy8vIGZhbHNlLgo+PiAr ICAgIHB1YiBmbiBjb250YWluc19hZGRyZXNzKCZzZWxmLCBpcDogJklwQWRkcikgLT4gYm9vbCB7 Cj4+ICsgICAgICAgIG1hdGNoIChzZWxmLCBpcCkgewo+PiArICAgICAgICAgICAgKENpZHI6Oklw djQoY2lkciksIElwQWRkcjo6VjQoaXApKSA9PiBjaWRyLmNvbnRhaW5zX2FkZHJlc3MoaXApLAo+ PiArICAgICAgICAgICAgKENpZHI6OklwdjYoY2lkciksIElwQWRkcjo6VjYoaXApKSA9PiBjaWRy LmNvbnRhaW5zX2FkZHJlc3MoaXApLAo+PiArICAgICAgICAgICAgXyA9PiBmYWxzZSwKPj4gKyAg ICAgICAgfQo+PiArICAgIH0KPj4gK30KPj4gKwo+PiAraW1wbCBzdGQ6OmZtdDo6RGlzcGxheSBm b3IgQ2lkciB7Cj4+ICsgICAgZm4gZm10KCZzZWxmLCBmOiAmbXV0IHN0ZDo6Zm10OjpGb3JtYXR0 ZXIpIC0+IHN0ZDo6Zm10OjpSZXN1bHQgewo+PiArICAgICAgICBtYXRjaCBzZWxmIHsKPj4gKyAg ICAgICAgICAgIFNlbGY6OklwdjQoaXApID0+IGYud3JpdGVfc3RyKGlwLnRvX3N0cmluZygpLmFz X3N0cigpKSwKPj4gKyAgICAgICAgICAgIFNlbGY6OklwdjYoaXApID0+IGYud3JpdGVfc3RyKGlw LnRvX3N0cmluZygpLmFzX3N0cigpKSwKPgo+Tm8gbmVlZCB0byBhbGxvY2F0ZSBhIG5ldyBzdHJp bmcgaWYgeW91IGp1c3QgZm9yd2FyZCB0byB0aGUgaW5uZXIgdmFsdWUsCj5laXRoZXIgdXNlIGB3 cml0ZSEoZiwgaXApYCAobW9yZSBjb252ZW5pZW50KSwgb3IgZXhwbGljaXRseSBmb3J3YXJkIHZp YQo+YERpc3BsYXk6OmZtdChpcCwgZilgOgo+Cj4gICAgICAgICAgICBTZWxmOjpJcHY0KGlwKSA9 PiBmbXQ6OkRpc3BsYXk6OmZtdChpcCwgZiksCj4gICAgICAgICAgICBTZWxmOjpJcHY2KGlwKSA9 PiBmbXQ6OkRpc3BsYXk6OmZtdChpcCwgZiksCj4KCldvdWxkIGhhdmUgYmVlbiBgd3JpdGUhKGYs ICJ7fSIsIGlwKWAsIHNvIEkgd2VudCB3aXRoIERpc3BsYXk6OmZtdCA6KQoKPj4gKyAgICAgICAg fQo+PiArICAgIH0KPj4gK30KPj4gKwo+PiAraW1wbCBzdGQ6OnN0cjo6RnJvbVN0ciBmb3IgQ2lk ciB7Cj4+ICsgICAgdHlwZSBFcnIgPSBDaWRyRXJyb3I7Cj4+ICsKPj4gKyAgICBmbiBmcm9tX3N0 cihzOiAmc3RyKSAtPiBSZXN1bHQ8U2VsZiwgU2VsZjo6RXJyPiB7Cj4+ICsgICAgICAgIGlmIGxl dCBPayhpcCkgPSBzLnBhcnNlOjo8SXB2NENpZHI+KCkgewo+PiArICAgICAgICAgICAgcmV0dXJu IE9rKENpZHI6OklwdjQoaXApKTsKPj4gKyAgICAgICAgfQo+PiArCj4+ICsgICAgICAgIE9rKENp ZHI6OklwdjYocy5wYXJzZSgpPykpCj4+ICsgICAgfQo+PiArfQo+PiArCj4+ICtpbXBsIEZyb208 SXB2NENpZHI+IGZvciBDaWRyIHsKPj4gKyAgICBmbiBmcm9tKGNpZHI6IElwdjRDaWRyKSAtPiBT ZWxmIHsKPj4gKyAgICAgICAgQ2lkcjo6SXB2NChjaWRyKQo+PiArICAgIH0KPj4gK30KPj4gKwo+ PiAraW1wbCBGcm9tPElwdjZDaWRyPiBmb3IgQ2lkciB7Cj4+ICsgICAgZm4gZnJvbShjaWRyOiBJ cHY2Q2lkcikgLT4gU2VsZiB7Cj4+ICsgICAgICAgIENpZHI6OklwdjYoY2lkcikKPj4gKyAgICB9 Cj4+ICt9Cj4+ICsKPj4gK2ltcGwgRnJvbTxJcEFkZHI+IGZvciBDaWRyIHsKPj4gKyAgICBmbiBm cm9tKHZhbHVlOiBJcEFkZHIpIC0+IFNlbGYgewo+PiArICAgICAgICBtYXRjaCB2YWx1ZSB7Cj4+ ICsgICAgICAgICAgICBJcEFkZHI6OlY0KGFkZHIpID0+IElwdjRDaWRyOjpmcm9tKGFkZHIpLmlu dG8oKSwKPj4gKyAgICAgICAgICAgIElwQWRkcjo6VjYoYWRkcikgPT4gSXB2NkNpZHI6OmZyb20o YWRkcikuaW50bygpLAo+PiArICAgICAgICB9Cj4+ICsgICAgfQo+PiArfQo+PiArCj4+ICtjb25z dCBJUFY0X0xFTkdUSDogdTggPSAzMjsKPj4gKwo+PiArLy8vIEFuIElQdjQgQ0lEUiAoZS5nLiAx OTIuMC4yLjAvMjQpCj4+ICsjW2Rlcml2ZSgKPj4gKyAgICBTZXJpYWxpemVEaXNwbGF5LCBEZXNl cmlhbGl6ZUZyb21TdHIsIENsb25lLCBDb3B5LCBEZWJ1ZywgUGFydGlhbE9yZCwgT3JkLCBQYXJ0 aWFsRXEsIEVxLCBIYXNoLAo+Cj5uaXQ6IHdvdWxkIHByZWZlciB0aGUgc3RhbmRhcmQgc3R1ZmYg Zmlyc3QKCkFncmVlCgo+PiBbc25pcF0KPj4gK2ltcGwgc3RkOjpzdHI6OkZyb21TdHIgZm9yIElw djRDaWRyIHsKPj4gKyAgICB0eXBlIEVyciA9IENpZHJFcnJvcjsKPj4gKwo+PiArICAgIGZuIGZy b21fc3RyKHM6ICZzdHIpIC0+IFJlc3VsdDxTZWxmLCBTZWxmOjpFcnI+IHsKPj4gKyAgICAgICAg T2sobWF0Y2ggcy5maW5kKCcvJykgewo+PiArICAgICAgICAgICAgTm9uZSA9PiBTZWxmIHsKPj4g KyAgICAgICAgICAgICAgICBhZGRyOiBzLnBhcnNlKCk/LAo+PiArICAgICAgICAgICAgICAgIG1h c2s6IDMyLAo+PiArICAgICAgICAgICAgfSwKPj4gKyAgICAgICAgICAgIFNvbWUocG9zKSA9PiB7 Cj4+ICsgICAgICAgICAgICAgICAgbGV0IG1hc2s6IHU4ID0gc1socG9zICsgMSkuLl0KPj4gKyAg ICAgICAgICAgICAgICAgICAgLnBhcnNlKCkKPj4gKyAgICAgICAgICAgICAgICAgICAgLm1hcF9l cnIofF98IENpZHJFcnJvcjo6SW52YWxpZE5ldG1hc2spPzsKPj4gKwo+PiArICAgICAgICAgICAg ICAgIFNlbGY6Om5ldyhzWy4ucG9zXS5wYXJzZTo6PElwdjRBZGRyPigpPywgbWFzayk/Cj4+ICsg ICAgICAgICAgICB9Cj4+ICsgICAgICAgIH0pCj4KPl4gc2luY2UgMS41MiB0aGlzIGNvdWxkIGJl IG1vcmUgcmVhZGFibGUgd2l0aCBgLnNwbGl0X29uY2UoJy8nKWAsIHRoZW4KPndlIGRvbid0IG5l ZWQgdG8gc2xpY2UgbWFudWFsbHkgd2l0aCBgLi5wb3NgL2AocG9zICsgMSkuLmAuCgpGaXhlZCB0 aGlzLgoKPj4gKyAgICB9Cj4+ICt9Cj4+ICsKPj4gK2ltcGwgc3RkOjpmbXQ6OkRpc3BsYXkgZm9y IElwdjRDaWRyIHsKPj4gKyAgICBmbiBmbXQoJnNlbGYsIGY6ICZtdXQgc3RkOjpmbXQ6OkZvcm1h dHRlcikgLT4gc3RkOjpmbXQ6OlJlc3VsdCB7Cj4+ICsgICAgICAgIHdyaXRlIShmLCAie30ve30i LCAmc2VsZi5hZGRyLCBzZWxmLm1hc2spCj4KPl4gdW5uZWNlc3NhcnkgJgoKQWdyZWUuCgo+PiBb c25pcF0KPj4gKyNbY2ZnKHRlc3QpXQo+PiArbW9kIHRlc3RzIHsKPj4gKyAgICB1c2Ugc3VwZXI6 Oio7Cj4+ICsgICAgdXNlIHN0ZDo6bmV0Ojp7SXB2NEFkZHIsIElwdjZBZGRyfTsKPgo+XiBzdGQg aW1wb3J0IHNob3VsZCBiZSBncm91cGVkIGJlZnVyZSB0aGUgYHN1cGVyOjoqYCBvbmUuCgpjYXJn byBmbXQgcHV0cyBzdXBlciBvdmVyIHN0ZCA6KAoKVGhhbmtzIGZvciB0aGUgcmV2aWV3IQoKCl9f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCnB2ZS1kZXZlbCBt YWlsaW5nIGxpc3QKcHZlLWRldmVsQGxpc3RzLnByb3htb3guY29tCmh0dHBzOi8vbGlzdHMucHJv eG1veC5jb20vY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL3B2ZS1kZXZlbAo=