From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <pmg-devel-bounces@lists.proxmox.com> Received: from firstgate.proxmox.com (firstgate.proxmox.com [IPv6:2a01:7e0:0:424::9]) by lore.proxmox.com (Postfix) with ESMTPS id BCF641FF183 for <inbox@lore.proxmox.com>; Fri, 21 Feb 2025 14:44:57 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id CFD602E50; Fri, 21 Feb 2025 14:44:55 +0100 (CET) Message-ID: <f5bc9071-85b9-48d9-933d-2748774748e0@proxmox.com> Date: Fri, 21 Feb 2025 14:44:20 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Content-Language: en-US To: =?UTF-8?Q?Fabian_Gr=C3=BCnbichler?= <f.gruenbichler@proxmox.com>, pmg-devel@lists.proxmox.com References: <20250218161905.17224-1-m.frank@proxmox.com> <20250218161905.17224-7-m.frank@proxmox.com> <2043234582.10132.1740141683339@webmail.proxmox.com> From: Markus Frank <m.frank@proxmox.com> In-Reply-To: <2043234582.10132.1740141683339@webmail.proxmox.com> X-SPAM-LEVEL: Spam detection results: 0 AWL -0.166 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 POISEN_SPAM_PILL 0.1 Meta: its spam POISEN_SPAM_PILL_1 0.1 random spam to be learned in bayes POISEN_SPAM_PILL_3 0.1 random spam to be learned in bayes RCVD_IN_VALIDITY_CERTIFIED_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_RPBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. RCVD_IN_VALIDITY_SAFE_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to Validity was blocked. See https://knowledge.validity.com/hc/en-us/articles/20961730681243 for more information. SPF_HELO_NONE 0.001 SPF: HELO does not publish an 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. [objectgrouphelpers.pm, tfaconfig.pm, proxmox.com, accesscontrol.pm, postfix.pm, realm.pm, quarantine.pm, domain.pm, tfa.pm] Subject: Re: [pmg-devel] [PATCH pmg-api v5 6/10] api: add/update/remove realms like in PVE X-BeenThere: pmg-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Mail Gateway development discussion <pmg-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pmg-devel>, <mailto:pmg-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pmg-devel/> List-Post: <mailto:pmg-devel@lists.proxmox.com> List-Help: <mailto:pmg-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pmg-devel>, <mailto:pmg-devel-request@lists.proxmox.com?subject=subscribe> Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: pmg-devel-bounces@lists.proxmox.com Sender: "pmg-devel" <pmg-devel-bounces@lists.proxmox.com> VGhhbmsgeW91IGZvciByZXZpZXdpbmcgdGhpcyBwYXRjaCBzZXJpZXMuCgpPbiAgMjAyNS0wMi0y MSAxMzo0MSwgRmFiaWFuIEdyw7xuYmljaGxlciB3cm90ZToKPiAKPj4gTWFya3VzIEZyYW5rIDxt LmZyYW5rQHByb3htb3guY29tPiBoYXQgYW0gMTguMDIuMjAyNSAxNzoxOSBDRVQgZ2VzY2hyaWVi ZW46Cj4+Cj4+ICAgCj4+IFRoZSBuYW1lIFJlYWxtLnBtIHdhcyBjaG9zZW4gYmVjYXVzZSBhIERv bWFpbi5wbSBhbHJlYWR5IGV4aXN0cy4KPiAKPiBidXQgdGhlIEFQSSBwYXRoIGlzIHN0aWxsIGRv bWFpbnMsIGFuZCB0aGUgbmFtaW5nIGluc2lkZSB0aGUgY29kZS9kZXNjcmlwdGlvbnMvLi4gaXMg YWxzbyByYXRoZXIgaW5jb25zaXN0ZW50LiBzaG91bGQgd2Ugc2V0dGxlIG9uIG9uZSBvciB0aGUg b3RoZXI/CgpXZSB1c2UgL2FjY2Vzcy9kb21haW4gaW4gUFZFL1BCUyBhbmQgYWxyZWFkeSBhbGxv dyAvYWNjZXNzL2RvbWFpbnMgaW4gUE1HL0hUVFBTZXJ2ZXIucG06CmBgYAogICAgICAjIGV4cGxp Y2l0bHkgYWxsb3cgc29tZSBjYWxscyB3aXRob3V0IGF1dGgKICAgICAgaWYgKCgkcmVsX3VyaSBl cSAnL2FjY2Vzcy9kb21haW5zJyAmJiAkbWV0aG9kIGVxICdHRVQnKSB8fAogICAgICAgICAoJHJl bF91cmkgZXEgJy9xdWFyYW50aW5lL3NlbmRsaW5rJyAmJiAoJG1ldGhvZCBlcSAnR0VUJyB8fCAk bWV0aG9kIGVxICdQT1NUJykpIHx8CiAgCSgkcmVsX3VyaSBlcSAnL2FjY2Vzcy90aWNrZXQnICYm ICgkbWV0aG9kIGVxICdHRVQnIHx8ICRtZXRob2QgZXEgJ1BPU1QnKSkpIHsKYGBgCgpCZWZvcmUg cmVuYW1pbmcgaXQgdG8gUmVhbG0sIEkgd2FzIHVzaW5nIEF1dGhkb21haW4gYXMgdGhlIGZpbGUv bW9kdWxlIG5hbWUuCklmIHdlIHdhbnQgdG8gc3RpY2sgdG8gb25lIG5hbWUsIHdlIGVpdGhlciB1 c2UgQXV0aGRvbWFpbnMgKG9yIHNvbWV0aGluZyBzaW1pbGFyKSBhZ2Fpbiwgb3Igd2UgY2hhbmdl IGV2ZXJ5dGhpbmcgdG8gcmVhbG0gYW5kIHVzZSBhIGRpZmZlcmVudCBhcGkgcGF0aCB0aGFuIFBW RS9QQlMuCkkgdGhpbmsgSSB3b3VsZCBwcmVmZXIgdXNpbmcgQXV0aGRvbWFpbnMgYW5kIC9hY2Nl c3MvZG9tYWluLgoKQW55IG9waW5pb25zPwo+IAo+Pgo+PiBTaWduZWQtb2ZmLWJ5OiBNYXJrdXMg RnJhbmsgPG0uZnJhbmtAcHJveG1veC5jb20+Cj4+IC0tLQo+PiAgIHNyYy9NYWtlZmlsZSAgICAg ICAgICAgICAgICAgIHwgICAxICsKPj4gICBzcmMvUE1HL0FQSTIvQWNjZXNzQ29udHJvbC5wbSB8 ICAxMCArLQo+PiAgIHNyYy9QTUcvQVBJMi9SZWFsbS5wbSAgICAgICAgIHwgMjc0ICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysKPj4gICAzIGZpbGVzIGNoYW5nZWQsIDI4NCBpbnNl cnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCj4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9QTUcv QVBJMi9SZWFsbS5wbQo+Pgo+PiBkaWZmIC0tZ2l0IGEvc3JjL01ha2VmaWxlIGIvc3JjL01ha2Vm aWxlCj4+IGluZGV4IDNjYWU3YzcuLmU5MzliYmQgMTAwNjQ0Cj4+IC0tLSBhL3NyYy9NYWtlZmls ZQo+PiArKysgYi9zcmMvTWFrZWZpbGUKPj4gQEAgLTE1MSw2ICsxNTEsNyBAQCBMSUJTT1VSQ0VT ID0JCQkJXAo+PiAgIAlQTUcvQVBJMi9Qb3N0Zml4LnBtCQlcCj4+ICAgCVBNRy9BUEkyL1F1YXJh bnRpbmUucG0JCVwKPj4gICAJUE1HL0FQSTIvQWNjZXNzQ29udHJvbC5wbQlcCj4+ICsJUE1HL0FQ STIvUmVhbG0ucG0JCVwKPj4gICAJUE1HL0FQSTIvVEZBLnBtCQkJXAo+PiAgIAlQTUcvQVBJMi9U RkFDb25maWcucG0JCVwKPj4gICAJUE1HL0FQSTIvT2JqZWN0R3JvdXBIZWxwZXJzLnBtCVwKPj4g ZGlmZiAtLWdpdCBhL3NyYy9QTUcvQVBJMi9BY2Nlc3NDb250cm9sLnBtIGIvc3JjL1BNRy9BUEky L0FjY2Vzc0NvbnRyb2wucG0KPj4gaW5kZXggZTI2YWU3MC4uZjRjYmM4MSAxMDA2NDQKPj4gLS0t IGEvc3JjL1BNRy9BUEkyL0FjY2Vzc0NvbnRyb2wucG0KPj4gKysrIGIvc3JjL1BNRy9BUEkyL0Fj Y2Vzc0NvbnRyb2wucG0KPj4gQEAgLTEyLDYgKzEyLDcgQEAgdXNlIFBWRTo6SlNPTlNjaGVtYSBx dyhnZXRfc3RhbmRhcmRfb3B0aW9uKTsKPj4gICB1c2UgUE1HOjpVdGlsczsKPj4gICB1c2UgUE1H OjpVc2VyQ29uZmlnOwo+PiAgIHVzZSBQTUc6OkFjY2Vzc0NvbnRyb2w7Cj4+ICt1c2UgUE1HOjpB UEkyOjpSZWFsbTsKPj4gICB1c2UgUE1HOjpBUEkyOjpVc2VyczsKPj4gICB1c2UgUE1HOjpBUEky OjpURkE7Cj4+ICAgdXNlIFBNRzo6VEZBQ29uZmlnOwo+PiBAQCAtMzAsNiArMzEsMTEgQEAgX19Q QUNLQUdFX18tPnJlZ2lzdGVyX21ldGhvZCAoewo+PiAgICAgICBwYXRoID0+ICd0ZmEnLAo+PiAg IH0pOwo+PiAgIAo+PiArX19QQUNLQUdFX18tPnJlZ2lzdGVyX21ldGhvZCAoewo+PiArICAgIHN1 YmNsYXNzID0+ICJQTUc6OkFQSTI6OlJlYWxtIiwKPj4gKyAgICBwYXRoID0+ICdkb21haW5zJywK PiAKPiByZWFsbSB2cyBkb21haW5zCj4gCj4+ICt9KTsKPj4gKwo+PiAgIF9fUEFDS0FHRV9fLT5y ZWdpc3Rlcl9tZXRob2QgKHsKPj4gICAgICAgbmFtZSA9PiAnaW5kZXgnLAo+PiAgICAgICBwYXRo ID0+ICcnLAo+PiBAQCAtNTcsNiArNjMsNyBAQCBfX1BBQ0tBR0VfXy0+cmVnaXN0ZXJfbWV0aG9k ICh7Cj4+ICAgCj4+ICAgCW15ICRyZXMgPSBbCj4+ICAgCSAgICB7IHN1YmRpciA9PiAndGlja2V0 JyB9LAo+PiArCSAgICB7IHN1YmRpciA9PiAnZG9tYWlucycgfSwKPj4gICAJICAgIHsgc3ViZGly ID0+ICdwYXNzd29yZCcgfSwKPj4gICAJICAgIHsgc3ViZGlyID0+ICd1c2VycycgfSwKPj4gICAJ XTsKPj4gQEAgLTI0OCw3ICsyNTUsOCBAQCBfX1BBQ0tBR0VfXy0+cmVnaXN0ZXJfbWV0aG9kICh7 Cj4+ICAgCj4+ICAgCW15ICR1c2VybmFtZSA9ICRwYXJhbS0+e3VzZXJuYW1lfTsKPj4gICAKPj4g LQlpZiAoJHVzZXJuYW1lICF+IG0vXEAocGFtfHBtZ3xxdWFyYW50aW5lKSQvKSB7Cj4+ICsJbXkg JHJlYWxtX3JlZ2V4ID0gUE1HOjpVdGlsczo6dmFsaWRfcG1nX3JlYWxtX3JlZ2V4KCk7Cj4+ICsJ aWYgKCR1c2VybmFtZSAhfiBtL1xAKCR7cmVhbG1fcmVnZXh9KSQvKSB7Cj4+ICAgCSAgICBteSAk cmVhbG0gPSAkcGFyYW0tPntyZWFsbX0gLy8gJ3F1YXJhbnRpbmUnOwo+PiAgIAkgICAgJHVzZXJu YW1lIC49ICJcQCRyZWFsbSI7Cj4+ICAgCX0KPj4gZGlmZiAtLWdpdCBhL3NyYy9QTUcvQVBJMi9S ZWFsbS5wbSBiL3NyYy9QTUcvQVBJMi9SZWFsbS5wbQo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+ PiBpbmRleCAwMDAwMDAwLi5kYTIwNzJhCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvc3JjL1BN Ry9BUEkyL1JlYWxtLnBtCj4+IEBAIC0wLDAgKzEsMjc0IEBACj4+ICtwYWNrYWdlIFBNRzo6QVBJ Mjo6UmVhbG07Cj4+ICsKPj4gK3VzZSBzdHJpY3Q7Cj4+ICt1c2Ugd2FybmluZ3M7Cj4+ICsKPj4g K3VzZSBQVkU6OkV4Y2VwdGlvbiBxdyhyYWlzZV9wYXJhbV9leGMpOwo+PiArdXNlIFBWRTo6SU5v dGlmeTsKPj4gK3VzZSBQVkU6OkpTT05TY2hlbWEgcXcoZ2V0X3N0YW5kYXJkX29wdGlvbik7Cj4+ ICt1c2UgUFZFOjpSRVNUSGFuZGxlcjsKPj4gK3VzZSBQVkU6OlNhZmVTeXNsb2c7Cj4+ICt1c2Ug UFZFOjpUb29scyBxdyhleHRyYWN0X3BhcmFtKTsKPj4gKwo+PiArdXNlIFBNRzo6QWNjZXNzQ29u dHJvbDsKPj4gK3VzZSBQTUc6OkF1dGg6OlBsdWdpbjsKPj4gK3VzZSBQVkU6OlNjaGVtYTo6QXV0 aDsKPj4gKwo+PiArbXkgJGRvbWFpbmNvbmZpZ2ZpbGUgPSAicmVhbG1zLmNmZyI7Cj4+ICsKPj4g K3VzZSBiYXNlIHF3KFBWRTo6UkVTVEhhbmRsZXIpOwo+PiArCj4+ICtfX1BBQ0tBR0VfXy0+cmVn aXN0ZXJfbWV0aG9kICh7Cj4+ICsgICAgbmFtZSA9PiAnaW5kZXgnLAo+PiArICAgIHBhdGggPT4g JycsCj4+ICsgICAgbWV0aG9kID0+ICdHRVQnLAo+PiArICAgIGRlc2NyaXB0aW9uID0+ICJBdXRo ZW50aWNhdGlvbiBkb21haW4gaW5kZXguIiwKPiAKPiBhbmQgaGVyZSBpdCBpcyBzdGlsbCBhbiBh dXRoZW50aWNhdGlvbiBkb21haW4gOykKPiAKPj4gKyAgICBwZXJtaXNzaW9ucyA9PiB7Cj4+ICsJ ZGVzY3JpcHRpb24gPT4gIkFueW9uZSBjYW4gYWNjZXNzIHRoYXQsIGJlY2F1c2Ugd2UgbmVlZCB0 aGF0IGxpc3QgZm9yIHRoZSBsb2dpbiBib3ggKGJlZm9yZSB0aGUgdXNlciBpcyBhdXRoZW50aWNh dGVkKS4iLAo+PiArCXVzZXIgPT4gJ3dvcmxkJywKPj4gKyAgICB9LAo+PiArICAgIHBhcmFtZXRl cnMgPT4gewo+PiArCWFkZGl0aW9uYWxQcm9wZXJ0aWVzID0+IDAsCj4+ICsJcHJvcGVydGllcyA9 PiB7fSwKPj4gKyAgICB9LAo+PiArICAgIHJldHVybnMgPT4gewo+PiArCXR5cGUgPT4gJ2FycmF5 JywKPj4gKwlpdGVtcyA9PiB7Cj4+ICsJICAgIHR5cGUgPT4gIm9iamVjdCIsCj4+ICsJICAgIHBy b3BlcnRpZXMgPT4gewo+PiArCQlyZWFsbSA9PiB7IHR5cGUgPT4gJ3N0cmluZycgfSwKPiAKPiBl dmVuIHRob3VnaCBpdCByZXR1cm5zIHJlYWxtcwo+IAo+PiArCQl0eXBlID0+IHsgdHlwZSA9PiAn c3RyaW5nJyB9LAo+PiArCQl0ZmEgPT4gewo+PiArCQkgICAgZGVzY3JpcHRpb24gPT4gIlR3by1m YWN0b3IgYXV0aGVudGljYXRpb24gcHJvdmlkZXIuIiwKPj4gKwkJICAgIHR5cGUgPT4gJ3N0cmlu ZycsCj4+ICsJCSAgICBlbnVtID0+IFsgJ3l1YmljbycsICdvYXRoJyBdLAo+PiArCQkgICAgb3B0 aW9uYWwgPT4gMSwKPj4gKwkJfSwKPj4gKwkJY29tbWVudCA9PiB7Cj4+ICsJCSAgICBkZXNjcmlw dGlvbiA9PiAiQSBjb21tZW50LiBUaGUgR1VJIHVzZSB0aGlzIHRleHQgd2hlbiB5b3Ugc2VsZWN0 IGEgZG9tYWluIChSZWFsbSkgb24gdGhlIGxvZ2luIHdpbmRvdy4iLAo+PiArCQkgICAgdHlwZSA9 PiAnc3RyaW5nJywKPj4gKwkJICAgIG9wdGlvbmFsID0+IDEsCj4+ICsJCX0sCj4+ICsJICAgIH0s Cj4+ICsJfSwKPj4gKwlsaW5rcyA9PiBbIHsgcmVsID0+ICdjaGlsZCcsIGhyZWYgPT4gIntyZWFs bX0iIH0gXSwKPj4gKyAgICB9LAo+PiArICAgIGNvZGUgPT4gc3ViIHsKPj4gKwlteSAoJHBhcmFt KSA9IEBfOwo+PiArCj4+ICsJbXkgJHJlcyA9IFtdOwo+PiArCj4+ICsJbXkgJGNmZyA9IFBWRTo6 SU5vdGlmeTo6cmVhZF9maWxlKCRkb21haW5jb25maWdmaWxlKTsKPj4gKwlteSAkaWRzID0gJGNm Zy0+e2lkc307Cj4+ICsKPj4gKwlmb3IgbXkgJHJlYWxtIChrZXlzICUkaWRzKSB7Cj4+ICsJICAg IG15ICRkID0gJGlkcy0+eyRyZWFsbX07Cj4+ICsJICAgIG15ICRlbnRyeSA9IHsgcmVhbG0gPT4g JHJlYWxtLCB0eXBlID0+ICRkLT57dHlwZX0gfTsKPj4gKwkgICAgJGVudHJ5LT57Y29tbWVudH0g PSAkZC0+e2NvbW1lbnR9IGlmICRkLT57Y29tbWVudH07Cj4+ICsJICAgICRlbnRyeS0+e2RlZmF1 bHR9ID0gMSBpZiAkZC0+e2RlZmF1bHR9Owo+PiArCSAgICBpZiAoJGQtPnt0ZmF9ICYmIChteSAk dGZhX2NmZyA9IFBWRTo6U2NoZW1hOjpBdXRoOjpwYXJzZV90ZmFfY29uZmlnKCRkLT57dGZhfSkp KSB7Cj4+ICsJCSRlbnRyeS0+e3RmYX0gPSAkdGZhX2NmZy0+e3R5cGV9Owo+PiArCSAgICB9Cj4+ ICsJICAgIHB1c2ggQCRyZXMsICRlbnRyeTsKPj4gKwl9Cj4+ICsKPj4gKwlyZXR1cm4gJHJlczsK Pj4gKyAgICB9fSk7Cj4+ICsKPj4gK19fUEFDS0FHRV9fLT5yZWdpc3Rlcl9tZXRob2QgKHsKPj4g KyAgICBuYW1lID0+ICdjcmVhdGUnLAo+PiArICAgIHByb3RlY3RlZCA9PiAxLAo+PiArICAgIHBh dGggPT4gJycsCj4+ICsgICAgbWV0aG9kID0+ICdQT1NUJywKPj4gKyAgICBwZXJtaXNzaW9ucyA9 PiB7IGNoZWNrID0+IFsgJ2FkbWluJyBdIH0sCj4+ICsgICAgZGVzY3JpcHRpb24gPT4gIkFkZCBh biBhdXRoZW50aWNhdGlvbiBzZXJ2ZXIuIiwKPj4gKyAgICBwYXJhbWV0ZXJzID0+IFBNRzo6QXV0 aDo6UGx1Z2luLT5jcmVhdGVTY2hlbWEoMCksCj4+ICsgICAgcmV0dXJucyA9PiB7IHR5cGUgPT4g J251bGwnIH0sCj4+ICsgICAgY29kZSA9PiBzdWIgewo+PiArCW15ICgkcGFyYW0pID0gQF87Cj4+ ICsKPj4gKwkjIGFsd2F5cyBleHRyYWN0LCBhZGQgaXQgd2l0aCBob29rCj4+ICsJbXkgJHBhc3N3 b3JkID0gZXh0cmFjdF9wYXJhbSgkcGFyYW0sICdwYXNzd29yZCcpOwo+PiArCj4+ICsJUE1HOjpB dXRoOjpQbHVnaW46OmxvY2tfZG9tYWluX2NvbmZpZygKPj4gKwkgICAgc3ViIHsKPj4gKwkJbXkg JGNmZyA9IFBWRTo6SU5vdGlmeTo6cmVhZF9maWxlKCRkb21haW5jb25maWdmaWxlKTsKPj4gKwkJ bXkgJGlkcyA9ICRjZmctPntpZHN9Owo+PiArCj4+ICsJCW15ICRyZWFsbSA9IGV4dHJhY3RfcGFy YW0oJHBhcmFtLCAncmVhbG0nKTsKPj4gKwkJUE1HOjpBdXRoOjpQbHVnaW46OnBtZ192ZXJpZnlf cmVhbG0oJHJlYWxtKTsKPj4gKwkJbXkgJHR5cGUgPSAkcGFyYW0tPnt0eXBlfTsKPj4gKwkJbXkg JGNoZWNrX2Nvbm5lY3Rpb24gPSBleHRyYWN0X3BhcmFtKCRwYXJhbSwgJ2NoZWNrLWNvbm5lY3Rp b24nKTsKPj4gKwo+PiArCQlkaWUgImRvbWFpbiAnJHJlYWxtJyBhbHJlYWR5IGV4aXN0c1xuIgo+ PiArCQkgICAgaWYgJGlkcy0+eyRyZWFsbX07Cj4+ICsKPj4gKwkJZGllICJ1bmFibGUgdG8gdXNl IHJlc2VydmVkIG5hbWUgJyRyZWFsbSdcbiIKPj4gKwkJICAgIGlmICgkcmVhbG0gZXEgJ3BhbScg fHwgJHJlYWxtIGVxICdwbWcnKTsKPj4gKwo+PiArCQlkaWUgInVuYWJsZSB0byBjcmVhdGUgYnVp bHRpbiB0eXBlICckdHlwZSdcbiIKPj4gKwkJICAgIGlmICgkdHlwZSBlcSAncGFtJyB8fCAkdHlw ZSBlcSAncG1nJyk7Cj4+ICsKPj4gKwkJbXkgJHBsdWdpbiA9IFBNRzo6QXV0aDo6UGx1Z2luLT5s b29rdXAoJHR5cGUpOwo+PiArCQlteSAkY29uZmlnID0gJHBsdWdpbi0+Y2hlY2tfY29uZmlnKCRy ZWFsbSwgJHBhcmFtLCAxLCAxKTsKPj4gKwo+PiArCQlpZiAoJGNvbmZpZy0+e2RlZmF1bHR9KSB7 Cj4+ICsJCSAgICBmb3IgbXkgJHIgKGtleXMgJSRpZHMpIHsKPj4gKwkJCWRlbGV0ZSAkaWRzLT57 JHJ9LT57ZGVmYXVsdH07Cj4+ICsJCSAgICB9Cj4+ICsJCX0KPj4gKwo+PiArCQkkaWRzLT57JHJl YWxtfSA9ICRjb25maWc7Cj4+ICsKPj4gKwkJbXkgJG9wdHMgPSAkcGx1Z2luLT5vcHRpb25zKCk7 Cj4+ICsJCWlmIChkZWZpbmVkKCRwYXNzd29yZCkgJiYgIWRlZmluZWQoJG9wdHMtPntwYXNzd29y ZH0pKSB7Cj4+ICsJCSAgICAkcGFzc3dvcmQgPSB1bmRlZjsKPj4gKwkJICAgIHdhcm4gImlnbm9y aW5nIHBhc3N3b3JkIHBhcmFtZXRlciI7Cj4+ICsJCX0KPj4gKwkJJHBsdWdpbi0+b25fYWRkX2hv b2soJHJlYWxtLCAkY29uZmlnLCBwYXNzd29yZCA9PiAkcGFzc3dvcmQpOwo+PiArCj4+ICsJCVBW RTo6SU5vdGlmeTo6d3JpdGVfZmlsZSgkZG9tYWluY29uZmlnZmlsZSwgJGNmZyk7Cj4+ICsJICAg IH0sCj4+ICsJICAgICJhZGQgYXV0aCBzZXJ2ZXIgZmFpbGVkIiwKPj4gKwkpOwo+PiArCXJldHVy biB1bmRlZjsKPj4gKyAgICB9fSk7Cj4+ICsKPj4gK19fUEFDS0FHRV9fLT5yZWdpc3Rlcl9tZXRo b2QgKHsKPj4gKyAgICBuYW1lID0+ICd1cGRhdGUnLAo+PiArICAgIHBhdGggPT4gJ3tyZWFsbX0n LAo+PiArICAgIG1ldGhvZCA9PiAnUFVUJywKPj4gKyAgICBwZXJtaXNzaW9ucyA9PiB7IGNoZWNr ID0+IFsgJ2FkbWluJyBdIH0sCj4+ICsgICAgZGVzY3JpcHRpb24gPT4gIlVwZGF0ZSBhdXRoZW50 aWNhdGlvbiBzZXJ2ZXIgc2V0dGluZ3MuIiwKPj4gKyAgICBwcm90ZWN0ZWQgPT4gMSwKPj4gKyAg ICBwYXJhbWV0ZXJzID0+IFBNRzo6QXV0aDo6UGx1Z2luLT51cGRhdGVTY2hlbWEoMCksCj4+ICsg ICAgcmV0dXJucyA9PiB7IHR5cGUgPT4gJ251bGwnIH0sCj4+ICsgICAgY29kZSA9PiBzdWIgewo+ PiArCW15ICgkcGFyYW0pID0gQF87Cj4+ICsKPj4gKwkjIGFsd2F5cyBleHRyYWN0LCB1cGRhdGUg aW4gaG9vawo+PiArCW15ICRwYXNzd29yZCA9IGV4dHJhY3RfcGFyYW0oJHBhcmFtLCAncGFzc3dv cmQnKTsKPj4gKwo+PiArCVBNRzo6QXV0aDo6UGx1Z2luOjpsb2NrX2RvbWFpbl9jb25maWcoCj4+ ICsJICAgIHN1YiB7Cj4+ICsJCW15ICRjZmcgPSBQVkU6OklOb3RpZnk6OnJlYWRfZmlsZSgkZG9t YWluY29uZmlnZmlsZSk7Cj4+ICsJCW15ICRpZHMgPSAkY2ZnLT57aWRzfTsKPj4gKwo+PiArCQlt eSAkZGlnZXN0ID0gZXh0cmFjdF9wYXJhbSgkcGFyYW0sICdkaWdlc3QnKTsKPj4gKwkJUFZFOjpT ZWN0aW9uQ29uZmlnOjphc3NlcnRfaWZfbW9kaWZpZWQoJGNmZywgJGRpZ2VzdCk7Cj4+ICsKPj4g KwkJbXkgJHJlYWxtID0gZXh0cmFjdF9wYXJhbSgkcGFyYW0sICdyZWFsbScpOwo+PiArCQlteSAk dHlwZSA9ICRpZHMtPnskcmVhbG19LT57dHlwZX07Cj4+ICsJCW15ICRjaGVja19jb25uZWN0aW9u ID0gZXh0cmFjdF9wYXJhbSgkcGFyYW0sICdjaGVjay1jb25uZWN0aW9uJyk7Cj4+ICsKPj4gKwkJ ZGllICJkb21haW4gJyRyZWFsbScgZG9lcyBub3QgZXhpc3RcbiIKPj4gKwkJICAgIGlmICEkaWRz LT57JHJlYWxtfTsKPj4gKwo+PiArCQlteSAkZGVsZXRlX3N0ciA9IGV4dHJhY3RfcGFyYW0oJHBh cmFtLCAnZGVsZXRlJyk7Cj4+ICsJCWRpZSAibm8gb3B0aW9ucyBzcGVjaWZpZWRcbiIKPj4gKwkJ ICAgIGlmICEkZGVsZXRlX3N0ciAmJiAhc2NhbGFyKGtleXMgJSRwYXJhbSkgJiYgIWRlZmluZWQo JHBhc3N3b3JkKTsKPj4gKwo+PiArCQlteSAkZGVsZXRlX3B3ID0gMDsKPj4gKwkJZm9yIG15ICRv cHQgKFBWRTo6VG9vbHM6OnNwbGl0X2xpc3QoJGRlbGV0ZV9zdHIpKSB7Cj4+ICsJCSAgICBkZWxl dGUgJGlkcy0+eyRyZWFsbX0tPnskb3B0fTsKPj4gKwkJICAgICRkZWxldGVfcHcgPSAxIGlmICRv cHQgZXEgJ3Bhc3N3b3JkJzsKPj4gKwkJfQo+PiArCj4+ICsJCW15ICRwbHVnaW4gPSBQTUc6OkF1 dGg6OlBsdWdpbi0+bG9va3VwKCR0eXBlKTsKPj4gKwkJbXkgJGNvbmZpZyA9ICRwbHVnaW4tPmNo ZWNrX2NvbmZpZygkcmVhbG0sICRwYXJhbSwgMCwgMSk7Cj4+ICsKPj4gKwkJaWYgKCRjb25maWct PntkZWZhdWx0fSkgewo+PiArCQkgICAgZm9yIG15ICRyIChrZXlzICUkaWRzKSB7Cj4+ICsJCQlk ZWxldGUgJGlkcy0+eyRyfS0+e2RlZmF1bHR9Owo+PiArCQkgICAgfQo+PiArCQl9Cj4+ICsKPj4g KwkJZm9yIG15ICRwIChrZXlzICUkY29uZmlnKSB7Cj4+ICsJCSAgICAkaWRzLT57JHJlYWxtfS0+ eyRwfSA9ICRjb25maWctPnskcH07Cj4+ICsJCX0KPj4gKwo+PiArCQlteSAkb3B0cyA9ICRwbHVn aW4tPm9wdGlvbnMoKTsKPj4gKwkJaWYgKCRkZWxldGVfcHcgfHwgZGVmaW5lZCgkcGFzc3dvcmQp KSB7Cj4+ICsJCSAgICAkcGx1Z2luLT5vbl91cGRhdGVfaG9vaygkcmVhbG0sICRjb25maWcsIHBh c3N3b3JkID0+ICRwYXNzd29yZCk7Cj4+ICsJCX0gZWxzZSB7Cj4+ICsJCSAgICAkcGx1Z2luLT5v bl91cGRhdGVfaG9vaygkcmVhbG0sICRjb25maWcpOwo+PiArCQl9Cj4+ICsKPj4gKwkJUFZFOjpJ Tm90aWZ5Ojp3cml0ZV9maWxlKCRkb21haW5jb25maWdmaWxlLCAkY2ZnKTsKPj4gKwkgICAgfSwK Pj4gKwkgICAgInVwZGF0ZSBhdXRoIHNlcnZlciBmYWlsZWQiCj4+ICsJKTsKPj4gKwlyZXR1cm4g dW5kZWY7Cj4+ICsgICAgfX0pOwo+PiArCj4+ICsjIGZpeG1lOiByZXR1cm4gZm9ybWF0IQo+PiAr X19QQUNLQUdFX18tPnJlZ2lzdGVyX21ldGhvZCAoewo+PiArICAgIG5hbWUgPT4gJ3JlYWQnLAo+ PiArICAgIHBhdGggPT4gJ3tyZWFsbX0nLAo+PiArICAgIG1ldGhvZCA9PiAnR0VUJywKPj4gKyAg ICBkZXNjcmlwdGlvbiA9PiAiR2V0IGF1dGggc2VydmVyIGNvbmZpZ3VyYXRpb24uIiwKPj4gKyAg ICBwZXJtaXNzaW9ucyA9PiB7IGNoZWNrID0+IFsgJ2FkbWluJywgJ3FtYW5hZ2VyJywgJ2F1ZGl0 JyBdIH0sCj4+ICsgICAgcGFyYW1ldGVycyA9PiB7Cj4+ICsJYWRkaXRpb25hbFByb3BlcnRpZXMg PT4gMCwKPj4gKwlwcm9wZXJ0aWVzID0+IHsKPj4gKwkgICAgcmVhbG0gPT4gIGdldF9zdGFuZGFy ZF9vcHRpb24oJ3JlYWxtJyksCj4+ICsJfSwKPj4gKyAgICB9LAo+PiArICAgIHJldHVybnMgPT4g e30sCj4+ICsgICAgY29kZSA9PiBzdWIgewo+PiArCW15ICgkcGFyYW0pID0gQF87Cj4+ICsKPj4g KwlteSAkY2ZnID0gUFZFOjpJTm90aWZ5OjpyZWFkX2ZpbGUoJGRvbWFpbmNvbmZpZ2ZpbGUpOwo+ PiArCj4+ICsJbXkgJHJlYWxtID0gJHBhcmFtLT57cmVhbG19Owo+PiArCj4+ICsJbXkgJGRhdGEg PSAkY2ZnLT57aWRzfS0+eyRyZWFsbX07Cj4+ICsJZGllICJkb21haW4gJyRyZWFsbScgZG9lcyBu b3QgZXhpc3RcbiIgaWYgISRkYXRhOwo+PiArCj4+ICsJbXkgJHR5cGUgPSAkZGF0YS0+e3R5cGV9 Owo+PiArCj4+ICsJJGRhdGEtPntkaWdlc3R9ID0gJGNmZy0+e2RpZ2VzdH07Cj4+ICsKPj4gKwly ZXR1cm4gJGRhdGE7Cj4+ICsgICAgfX0pOwo+PiArCj4+ICsKPj4gK19fUEFDS0FHRV9fLT5yZWdp c3Rlcl9tZXRob2QgKHsKPj4gKyAgICBuYW1lID0+ICdkZWxldGUnLAo+PiArICAgIHBhdGggPT4g J3tyZWFsbX0nLAo+PiArICAgIG1ldGhvZCA9PiAnREVMRVRFJywKPj4gKyAgICBwZXJtaXNzaW9u cyA9PiB7IGNoZWNrID0+IFsgJ2FkbWluJyBdIH0sCj4+ICsgICAgZGVzY3JpcHRpb24gPT4gIkRl bGV0ZSBhbiBhdXRoZW50aWNhdGlvbiBzZXJ2ZXIuIiwKPj4gKyAgICBwcm90ZWN0ZWQgPT4gMSwK Pj4gKyAgICBwYXJhbWV0ZXJzID0+IHsKPj4gKwlhZGRpdGlvbmFsUHJvcGVydGllcyA9PiAwLAo+ PiArCXByb3BlcnRpZXMgPT4gewo+PiArCSAgICByZWFsbSA9PiAgZ2V0X3N0YW5kYXJkX29wdGlv bigncmVhbG0nKSwKPj4gKwl9Cj4+ICsgICAgfSwKPj4gKyAgICByZXR1cm5zID0+IHsgdHlwZSA9 PiAnbnVsbCcgfSwKPj4gKyAgICBjb2RlID0+IHN1YiB7Cj4+ICsJbXkgKCRwYXJhbSkgPSBAXzsK Pj4gKwo+PiArCVBNRzo6QXV0aDo6UGx1Z2luOjpsb2NrX2RvbWFpbl9jb25maWcoCj4+ICsJICAg IHN1YiB7Cj4+ICsJCW15ICRjZmcgPSBQVkU6OklOb3RpZnk6OnJlYWRfZmlsZSgkZG9tYWluY29u ZmlnZmlsZSk7Cj4+ICsJCW15ICRpZHMgPSAkY2ZnLT57aWRzfTsKPj4gKwkJbXkgJHJlYWxtID0g JHBhcmFtLT57cmVhbG19Owo+PiArCj4+ICsJCWRpZSAiYXV0aGVudGljYXRpb24gZG9tYWluICck cmVhbG0nIGRvZXMgbm90IGV4aXN0XG4iIGlmICEkaWRzLT57JHJlYWxtfTsKPj4gKwo+PiArCQlt eSAkcGx1Z2luID0gUE1HOjpBdXRoOjpQbHVnaW4tPmxvb2t1cCgkaWRzLT57JHJlYWxtfS0+e3R5 cGV9KTsKPj4gKwo+PiArCQkkcGx1Z2luLT5vbl9kZWxldGVfaG9vaygkcmVhbG0sICRpZHMtPnsk cmVhbG19KTsKPj4gKwo+PiArCQlkZWxldGUgJGlkcy0+eyRyZWFsbX07Cj4+ICsKPj4gKwkJUFZF OjpJTm90aWZ5Ojp3cml0ZV9maWxlKCRkb21haW5jb25maWdmaWxlLCAkY2ZnKTsKPj4gKwkgICAg fSwKPj4gKwkgICAgImRlbGV0ZSBhdXRoIHNlcnZlciBmYWlsZWQiLAo+PiArCSk7Cj4+ICsJcmV0 dXJuIHVuZGVmOwo+PiArICAgIH19KTsKPj4gKwo+PiArMTsKPj4gLS0gCj4+IDIuMzkuNQo+Pgo+ Pgo+Pgo+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+ PiBwbWctZGV2ZWwgbWFpbGluZyBsaXN0Cj4+IHBtZy1kZXZlbEBsaXN0cy5wcm94bW94LmNvbQo+ PiBodHRwczovL2xpc3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9wbWct ZGV2ZWwKCgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18K cG1nLWRldmVsIG1haWxpbmcgbGlzdApwbWctZGV2ZWxAbGlzdHMucHJveG1veC5jb20KaHR0cHM6 Ly9saXN0cy5wcm94bW94LmNvbS9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vcG1nLWRldmVsCg==