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 EC3F71FF13F for ; Wed, 14 Jan 2026 11:44:43 +0100 (CET) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id 6FD20F68E; Wed, 14 Jan 2026 11:44:47 +0100 (CET) Date: Wed, 14 Jan 2026 11:44:40 +0100 From: Fabian =?iso-8859-1?q?Gr=FCnbichler?= To: Proxmox Backup Server development discussion References: <20260102160750.285157-1-s.rufinatscha@proxmox.com> <20260102160750.285157-3-s.rufinatscha@proxmox.com> In-Reply-To: <20260102160750.285157-3-s.rufinatscha@proxmox.com> MIME-Version: 1.0 User-Agent: astroid/0.17.0 (https://github.com/astroidmail/astroid) Message-Id: <1768385575.9kaf9dmuhn.astroid@yuna.none> X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1768387437720 X-SPAM-LEVEL: Spam detection results: 0 AWL -0.103 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 SPF_HELO_NONE 0.001 SPF: HELO does not publish an SPF Record SPF_PASS -0.001 SPF: sender matches SPF record Subject: Re: [pbs-devel] [PATCH proxmox-backup v3 2/4] pbs-config: cache verified API token secrets X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Proxmox Backup Server development discussion Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: pbs-devel-bounces@lists.proxmox.com Sender: "pbs-devel" T24gSmFudWFyeSAyLCAyMDI2IDU6MDcgcG0sIFNhbXVlbCBSdWZpbmF0c2NoYSB3cm90ZToKPiBD dXJyZW50bHksIGV2ZXJ5IHRva2VuLWJhc2VkIEFQSSByZXF1ZXN0IHJlYWRzIHRoZSB0b2tlbi5z aGFkb3cgZmlsZSBhbmQKPiBydW5zIHRoZSBleHBlbnNpdmUgcGFzc3dvcmQgaGFzaCB2ZXJpZmlj YXRpb24gZm9yIHRoZSBnaXZlbiB0b2tlbgo+IHNlY3JldC4gVGhpcyBzaG93cyB1cCBhcyBhIGhv dHNwb3QgaW4gL3N0YXR1cyBwcm9maWxpbmcgKHNlZQo+IGJ1ZyAjNzAxNyBbMV0pLgo+IAo+IFRo aXMgcGF0Y2ggaW50cm9kdWNlcyBhbiBpbi1tZW1vcnkgY2FjaGUgb2Ygc3VjY2Vzc2Z1bGx5IHZl cmlmaWVkIHRva2VuCj4gc2VjcmV0cy4gU3Vic2VxdWVudCByZXF1ZXN0cyBmb3IgdGhlIHNhbWUg dG9rZW4rc2VjcmV0IGNvbWJpbmF0aW9uIG9ubHkKPiBwZXJmb3JtIGEgY29tcGFyaXNvbiB1c2lu ZyBvcGVuc3NsOjptZW1jbXA6OmVxIGFuZCBhdm9pZCByZS1ydW5uaW5nIHRoZQo+IHBhc3N3b3Jk IGhhc2guIFRoZSBjYWNoZSBpcyB1cGRhdGVkIHdoZW4gYSB0b2tlbiBzZWNyZXQgaXMgc2V0IGFu ZAo+IGNsZWFyZWQgd2hlbiBhIHRva2VuIGlzIGRlbGV0ZWQuIE5vdGUsIHRoaXMgZG9lcyBOT1Qg aW5jbHVkZSBtYW51YWwKPiBjb25maWcgY2hhbmdlcywgd2hpY2ggd2lsbCBiZSBjb3ZlcmVkIGlu IGEgc3Vic2VxdWVudCBwYXRjaC4KPiAKPiBUaGlzIHBhdGNoIGlzIHBhcnQgb2YgdGhlIHNlcmll cyB3aGljaCBmaXhlcyBidWcgIzcwMTcgWzFdLgo+IAo+IFsxXSBodHRwczovL2J1Z3ppbGxhLnBy b3htb3guY29tL3Nob3dfYnVnLmNnaT9pZD03MDE3Cj4gCj4gU2lnbmVkLW9mZi1ieTogU2FtdWVs IFJ1ZmluYXRzY2hhIDxzLnJ1ZmluYXRzY2hhQHByb3htb3guY29tPgo+IC0tLQo+IENoYW5nZXMg ZnJvbSB2MSB0byB2MjoKPiAKPiAqIFJlcGxhY2UgT25jZUNlbGwgd2l0aCBMYXp5TG9jaywgYW5k IHN0ZDo6c3luYzo6UndMb2NrIHdpdGgKPiBwYXJraW5nX2xvdDo6UndMb2NrLgo+ICogQWRkIEFQ SV9NVVRBVElPTl9HRU5FUkFUSU9OIGFuZCBndWFyZCBjYWNoZSBpbnNlcnRzCj4gdG8gcHJldmVu dCDigJx6b21iaWUgaW5zZXJ0c+KAnSBhY3Jvc3MgY29uY3VycmVudCBzZXQvZGVsZXRlLgo+ICog UmVmYWN0b3IgY2FjaGUgb3BlcmF0aW9ucyBpbnRvIGNhY2hlX3RyeV9zZWNyZXRfbWF0Y2hlcywK PiBjYWNoZV90cnlfaW5zZXJ0X3NlY3JldCwgYW5kIGNlbnRyYWxpemUgd3JpdGUtc2lkZSBiZWhh dmlvciBpbgo+IGFwcGx5X2FwaV9tdXRhdGlvbi4KPiAqIFN3aXRjaCBmYXN0LXBhdGggY2FjaGUg YWNjZXNzIHRvIHRyeV9yZWFkL3RyeV93cml0ZSAoYmVzdC1lZmZvcnQpLgo+IAo+IENoYW5nZXMg ZnJvbSB2MiB0byB2MzoKPiAKPiAqIFJlcGxhY2VkIHByb2Nlc3MtbG9jYWwgY2FjaGUgaW52YWxp ZGF0aW9uIChBdG9taWNVNjQKPiBBUElfTVVUQVRJT05fR0VORVJBVElPTikgd2l0aCBhIGNyb3Nz LXByb2Nlc3Mgc2hhcmVkIGdlbmVyYXRpb24gdmlhCj4gQ29uZmlnVmVyc2lvbkNhY2hlLgo+ICog VmFsaWRhdGUgc2hhcmVkIGdlbmVyYXRpb24gYmVmb3JlL2FmdGVyIHRoZSBjb25zdGFudC10aW1l IHNlY3JldAo+IGNvbXBhcmU7IG9ubHkgaW5zZXJ0IGludG8gY2FjaGUgaWYgdGhlIGdlbmVyYXRp b24gaXMgdW5jaGFuZ2VkLgo+ICogaW52YWxpZGF0ZV9jYWNoZV9zdGF0ZSgpIG9uIGluc2VydCBp ZiBzaGFyZWQgZ2VuZXJhdGlvbiBjaGFuZ2VkLgo+IAo+ICBDYXJnby50b21sICAgICAgICAgICAg ICAgICAgICAgfCAgIDEgKwo+ICBwYnMtY29uZmlnL0NhcmdvLnRvbWwgICAgICAgICAgfCAgIDEg Kwo+ICBwYnMtY29uZmlnL3NyYy90b2tlbl9zaGFkb3cucnMgfCAxNTcgKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKystCj4gIDMgZmlsZXMgY2hhbmdlZCwgMTU4IGluc2VydGlvbnMoKyks IDEgZGVsZXRpb24oLSkKPiAKPiBkaWZmIC0tZ2l0IGEvQ2FyZ28udG9tbCBiL0NhcmdvLnRvbWwK PiBpbmRleCAxYWE1N2FlNS4uODIxYjYzYjcgMTAwNjQ0Cj4gLS0tIGEvQ2FyZ28udG9tbAo+ICsr KyBiL0NhcmdvLnRvbWwKPiBAQCAtMTQzLDYgKzE0Myw3IEBAIG5vbSA9ICI3Igo+ICBudW0tdHJh aXRzID0gIjAuMiIKPiAgb25jZV9jZWxsID0gIjEuMy4xIgo+ICBvcGVuc3NsID0gIjAuMTAuNDAi Cj4gK3BhcmtpbmdfbG90ID0gIjAuMTIiCj4gIHBlcmNlbnQtZW5jb2RpbmcgPSAiMi4xIgo+ICBw aW4tcHJvamVjdC1saXRlID0gIjAuMiIKPiAgcmVnZXggPSAiMS41LjUiCj4gZGlmZiAtLWdpdCBh L3Bicy1jb25maWcvQ2FyZ28udG9tbCBiL3Bicy1jb25maWcvQ2FyZ28udG9tbAo+IGluZGV4IDc0 YWZiM2M2Li5lYjgxY2UwMCAxMDA2NDQKPiAtLS0gYS9wYnMtY29uZmlnL0NhcmdvLnRvbWwKPiAr KysgYi9wYnMtY29uZmlnL0NhcmdvLnRvbWwKPiBAQCAtMTMsNiArMTMsNyBAQCBsaWJjLndvcmtz cGFjZSA9IHRydWUKPiAgbml4LndvcmtzcGFjZSA9IHRydWUKPiAgb25jZV9jZWxsLndvcmtzcGFj ZSA9IHRydWUKPiAgb3BlbnNzbC53b3Jrc3BhY2UgPSB0cnVlCj4gK3BhcmtpbmdfbG90Lndvcmtz cGFjZSA9IHRydWUKPiAgcmVnZXgud29ya3NwYWNlID0gdHJ1ZQo+ICBzZXJkZS53b3Jrc3BhY2Ug PSB0cnVlCj4gIHNlcmRlX2pzb24ud29ya3NwYWNlID0gdHJ1ZQo+IGRpZmYgLS1naXQgYS9wYnMt Y29uZmlnL3NyYy90b2tlbl9zaGFkb3cucnMgYi9wYnMtY29uZmlnL3NyYy90b2tlbl9zaGFkb3cu cnMKPiBpbmRleCA2NDBmYWJiZi4uZmE4NGFlZTUgMTAwNjQ0Cj4gLS0tIGEvcGJzLWNvbmZpZy9z cmMvdG9rZW5fc2hhZG93LnJzCj4gKysrIGIvcGJzLWNvbmZpZy9zcmMvdG9rZW5fc2hhZG93LnJz Cj4gQEAgLTEsNiArMSw4IEBACj4gIHVzZSBzdGQ6OmNvbGxlY3Rpb25zOjpIYXNoTWFwOwo+ICt1 c2Ugc3RkOjpzeW5jOjpMYXp5TG9jazsKPiAgCj4gIHVzZSBhbnlob3c6OntiYWlsLCBmb3JtYXRf ZXJyLCBFcnJvcn07Cj4gK3VzZSBwYXJraW5nX2xvdDo6UndMb2NrOwo+ICB1c2Ugc2VyZGU6OntE ZXNlcmlhbGl6ZSwgU2VyaWFsaXplfTsKPiAgdXNlIHNlcmRlX2pzb246Ontmcm9tX3ZhbHVlLCBW YWx1ZX07Cj4gIAo+IEBAIC0xMyw2ICsxNSwxOCBAQCB1c2UgY3JhdGU6OntvcGVuX2JhY2t1cF9s b2NrZmlsZSwgQmFja3VwTG9ja0d1YXJkfTsKPiAgY29uc3QgTE9DS19GSUxFOiAmc3RyID0gcGJz X2J1aWxkY2ZnOjpjb25maWdkaXIhKCIvdG9rZW4uc2hhZG93LmxvY2siKTsKPiAgY29uc3QgQ09O Rl9GSUxFOiAmc3RyID0gcGJzX2J1aWxkY2ZnOjpjb25maWdkaXIhKCIvdG9rZW4uc2hhZG93Iik7 Cj4gIAo+ICsvLy8gR2xvYmFsIGluLW1lbW9yeSBjYWNoZSBmb3Igc3VjY2Vzc2Z1bGx5IHZlcmlm aWVkIEFQSSB0b2tlbiBzZWNyZXRzLgo+ICsvLy8gVGhlIGNhY2hlIHN0b3JlcyBwbGFpbiB0ZXh0 IHNlY3JldHMgZm9yIHRva2VuIEF1dGhpZHMgdGhhdCBoYXZlIGFscmVhZHkgYmVlbgo+ICsvLy8g dmVyaWZpZWQgYWdhaW5zdCB0aGUgaGFzaGVkIHZhbHVlcyBpbiBgdG9rZW4uc2hhZG93YC4gVGhp cyBhbGxvd3MgZm9yIGNoZWFwCj4gKy8vLyBzdWJzZXF1ZW50IGF1dGhlbnRpY2F0aW9ucyBmb3Ig dGhlIHNhbWUgdG9rZW4rc2VjcmV0IGNvbWJpbmF0aW9uLCBhdm9pZGluZwo+ICsvLy8gcmVjb21w dXRpbmcgdGhlIHBhc3N3b3JkIGhhc2ggb24gZXZlcnkgcmVxdWVzdC4KPiArc3RhdGljIFRPS0VO X1NFQ1JFVF9DQUNIRTogTGF6eUxvY2s8UndMb2NrPEFwaVRva2VuU2VjcmV0Q2FjaGU+PiA9IExh enlMb2NrOjpuZXcofHwgewo+ICsgICAgUndMb2NrOjpuZXcoQXBpVG9rZW5TZWNyZXRDYWNoZSB7 Cj4gKyAgICAgICAgc2VjcmV0czogSGFzaE1hcDo6bmV3KCksCj4gKyAgICAgICAgc2hhcmVkX2dl bjogMCwKPiArICAgIH0pCj4gK30pOwo+ICsKPiAgI1tkZXJpdmUoU2VyaWFsaXplLCBEZXNlcmlh bGl6ZSldCj4gICNbc2VyZGUocmVuYW1lX2FsbCA9ICJrZWJhYi1jYXNlIildCj4gIC8vLyBBcGlU b2tlbiBpZCAvIHNlY3JldCBwYWlyCj4gQEAgLTU0LDkgKzY4LDI3IEBAIHB1YiBmbiB2ZXJpZnlf c2VjcmV0KHRva2VuaWQ6ICZBdXRoaWQsIHNlY3JldDogJnN0cikgLT4gUmVzdWx0PCgpLCBFcnJv cj4gewo+ICAgICAgICAgIGJhaWwhKCJub3QgYW4gQVBJIHRva2VuIElEIik7Cj4gICAgICB9Cj4g IAo+ICsgICAgLy8gRmFzdCBwYXRoCj4gKyAgICBpZiBjYWNoZV90cnlfc2VjcmV0X21hdGNoZXMo dG9rZW5pZCwgc2VjcmV0KSB7Cj4gKyAgICAgICAgcmV0dXJuIE9rKCgpKTsKPiArICAgIH0KPiAr Cj4gKyAgICAvLyBTbG93IHBhdGgKPiArICAgIC8vIEZpcnN0LCBjYXB0dXJlIHRoZSBzaGFyZWQg Z2VuZXJhdGlvbiBiZWZvcmUgZG9pbmcgdGhlIGhhc2ggdmVyaWZpY2F0aW9uLgo+ICsgICAgbGV0 IGdlbl9iZWZvcmUgPSB0b2tlbl9zaGFkb3dfc2hhcmVkX2dlbigpOwo+ICsKPiAgICAgIGxldCBk YXRhID0gcmVhZF9maWxlKCk/Owo+ICAgICAgbWF0Y2ggZGF0YS5nZXQodG9rZW5pZCkgewo+IC0g ICAgICAgIFNvbWUoaGFzaGVkX3NlY3JldCkgPT4gcHJveG1veF9zeXM6OmNyeXB0Ojp2ZXJpZnlf Y3J5cHRfcHcoc2VjcmV0LCBoYXNoZWRfc2VjcmV0KSwKPiArICAgICAgICBTb21lKGhhc2hlZF9z ZWNyZXQpID0+IHsKPiArICAgICAgICAgICAgcHJveG1veF9zeXM6OmNyeXB0Ojp2ZXJpZnlfY3J5 cHRfcHcoc2VjcmV0LCBoYXNoZWRfc2VjcmV0KT87Cj4gKwo+ICsgICAgICAgICAgICAvLyBUcnkg dG8gY2FjaGUgb25seSBpZiBub3RoaW5nIGNoYW5nZWQgd2hpbGUgdmVyaWZ5aW5nIHRoZSBzZWNy ZXQuCj4gKyAgICAgICAgICAgIGlmIGxldCBTb21lKGdlbikgPSBnZW5fYmVmb3JlIHsKPiArICAg ICAgICAgICAgICAgIGNhY2hlX3RyeV9pbnNlcnRfc2VjcmV0KHRva2VuaWQuY2xvbmUoKSwgc2Vj cmV0LnRvX293bmVkKCksIGdlbik7Cj4gKyAgICAgICAgICAgIH0KPiArCj4gKyAgICAgICAgICAg IE9rKCgpKQo+ICsgICAgICAgIH0KPiAgICAgICAgICBOb25lID0+IGJhaWwhKCJpbnZhbGlkIEFQ SSB0b2tlbiIpLAo+ICAgICAgfQo+ICB9Cj4gQEAgLTgyLDYgKzExNCw4IEBAIGZuIHNldF9zZWNy ZXQodG9rZW5pZDogJkF1dGhpZCwgc2VjcmV0OiAmc3RyKSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7 Cj4gICAgICBkYXRhLmluc2VydCh0b2tlbmlkLmNsb25lKCksIGhhc2hlZF9zZWNyZXQpOwo+ICAg ICAgd3JpdGVfZmlsZShkYXRhKT87Cj4gIAo+ICsgICAgYXBwbHlfYXBpX211dGF0aW9uKHRva2Vu aWQsIFNvbWUoc2VjcmV0KSk7Cj4gKwo+ICAgICAgT2soKCkpCj4gIH0KPiAgCj4gQEAgLTk3LDUg KzEzMSwxMjYgQEAgcHViIGZuIGRlbGV0ZV9zZWNyZXQodG9rZW5pZDogJkF1dGhpZCkgLT4gUmVz dWx0PCgpLCBFcnJvcj4gewo+ICAgICAgZGF0YS5yZW1vdmUodG9rZW5pZCk7Cj4gICAgICB3cml0 ZV9maWxlKGRhdGEpPzsKPiAgCj4gKyAgICBhcHBseV9hcGlfbXV0YXRpb24odG9rZW5pZCwgTm9u ZSk7Cj4gKwo+ICAgICAgT2soKCkpCj4gIH0KPiArCj4gK3N0cnVjdCBBcGlUb2tlblNlY3JldENh Y2hlIHsKPiArICAgIC8vLyBLZXlzIGFyZSB0b2tlbiBBdXRoaWRzLCB2YWx1ZXMgYXJlIHRoZSBj b3JyZXNwb25kaW5nIHBsYWluIHRleHQgc2VjcmV0cy4KPiArICAgIC8vLyBFbnRyaWVzIGFyZSBh ZGRlZCBhZnRlciBhIHN1Y2Nlc3NmdWwgb24tZGlzayB2ZXJpZmljYXRpb24gaW4KPiArICAgIC8v LyBgdmVyaWZ5X3NlY3JldGAgb3Igd2hlbiBhIG5ldyB0b2tlbiBzZWNyZXQgaXMgZ2VuZXJhdGVk IGJ5Cj4gKyAgICAvLy8gYGdlbmVyYXRlX2FuZF9zZXRfc2VjcmV0YC4gVXNlZCB0byBhdm9pZCBy ZXBlYXRlZAo+ICsgICAgLy8vIHBhc3N3b3JkLWhhc2ggY29tcHV0YXRpb24gb24gc3Vic2VxdWVu dCBhdXRoZW50aWNhdGlvbnMuCj4gKyAgICBzZWNyZXRzOiBIYXNoTWFwPEF1dGhpZCwgQ2FjaGVk U2VjcmV0PiwKPiArICAgIC8vLyBTaGFyZWQgZ2VuZXJhdGlvbiB0byBkZXRlY3QgbXV0YXRpb25z IG9mIHRoZSB1bmRlcmx5aW5nIHRva2VuLnNoYWRvdyBmaWxlLgo+ICsgICAgc2hhcmVkX2dlbjog dXNpemUsCj4gK30KPiArCj4gKy8vLyBDYWNoZWQgc2VjcmV0Lgo+ICtzdHJ1Y3QgQ2FjaGVkU2Vj cmV0IHsKPiArICAgIHNlY3JldDogU3RyaW5nLAo+ICt9Cj4gKwo+ICtmbiBjYWNoZV90cnlfaW5z ZXJ0X3NlY3JldCh0b2tlbmlkOiBBdXRoaWQsIHNlY3JldDogU3RyaW5nLCBzaGFyZWRfZ2VuX2Jl Zm9yZTogdXNpemUpIHsKPiArICAgIGxldCBTb21lKG11dCBjYWNoZSkgPSBUT0tFTl9TRUNSRVRf Q0FDSEUudHJ5X3dyaXRlKCkgZWxzZSB7Cj4gKyAgICAgICAgcmV0dXJuOwo+ICsgICAgfTsKPiAr Cj4gKyAgICBsZXQgU29tZShzaGFyZWRfZ2VuX25vdykgPSB0b2tlbl9zaGFkb3dfc2hhcmVkX2dl bigpIGVsc2Ugewo+ICsgICAgICAgIHJldHVybjsKPiArICAgIH07Cj4gKwo+ICsgICAgLy8gSWYg dGhpcyBwcm9jZXNzIG1pc3NlZCBhIGdlbmVyYXRpb24gYnVtcCwgaXRzIGNhY2hlIGlzIHN0YWxl Lgo+ICsgICAgaWYgY2FjaGUuc2hhcmVkX2dlbiAhPSBzaGFyZWRfZ2VuX25vdyB7Cj4gKyAgICAg ICAgaW52YWxpZGF0ZV9jYWNoZV9zdGF0ZSgmbXV0IGNhY2hlKTsKPiArICAgICAgICBjYWNoZS5z aGFyZWRfZ2VuID0gc2hhcmVkX2dlbl9ub3c7Cj4gKyAgICB9Cj4gKwo+ICsgICAgLy8gSWYgYSBt dXRhdGlvbiBoYXBwZW5lZCB3aGlsZSB3ZSB3ZXJlIHZlcmlmeWluZyB0aGUgc2VjcmV0LCBkbyBu b3QgaW5zZXJ0Lgo+ICsgICAgaWYgc2hhcmVkX2dlbl9ub3cgPT0gc2hhcmVkX2dlbl9iZWZvcmUg ewo+ICsgICAgICAgIGNhY2hlLnNlY3JldHMuaW5zZXJ0KHRva2VuaWQsIENhY2hlZFNlY3JldCB7 IHNlY3JldCB9KTsKPiArICAgIH0KPiArfQo+ICsKPiArLy8gVHJpZXMgdG8gbWF0Y2ggdGhlIGdp dmVuIHRva2VuIHNlY3JldCBhZ2FpbnN0IHRoZSBjYWNoZWQgc2VjcmV0Lgo+ICsvLyBDaGVja3Mg dGhlIGdlbmVyYXRpb24gYmVmb3JlIGFuZCBhZnRlciB0aGUgY29uc3RhbnQtdGltZSBjb21wYXJl IHRvIGF2b2lkIGEKPiArLy8gVE9DVE9VIHdpbmRvdy4gSWYgYW5vdGhlciBwcm9jZXNzIHJvdGF0 ZXMvZGVsZXRlcyBhIHRva2VuIHdoaWxlIHdlJ3JlIHZhbGlkYXRpbmcKPiArLy8gdGhlIGNhY2hl ZCBzZWNyZXQsIHRoZSBnZW5lcmF0aW9uIHdpbGwgY2hhbmdlLCBhbmQgd2UKPiArLy8gbXVzdCBu b3QgdHJ1c3QgdGhlIGNhY2hlIGZvciB0aGlzIHJlcXVlc3QuCj4gK2ZuIGNhY2hlX3RyeV9zZWNy ZXRfbWF0Y2hlcyh0b2tlbmlkOiAmQXV0aGlkLCBzZWNyZXQ6ICZzdHIpIC0+IGJvb2wgewo+ICsg ICAgbGV0IFNvbWUoY2FjaGUpID0gVE9LRU5fU0VDUkVUX0NBQ0hFLnRyeV9yZWFkKCkgZWxzZSB7 Cj4gKyAgICAgICAgcmV0dXJuIGZhbHNlOwo+ICsgICAgfTsKPiArICAgIGxldCBTb21lKGVudHJ5 KSA9IGNhY2hlLnNlY3JldHMuZ2V0KHRva2VuaWQpIGVsc2Ugewo+ICsgICAgICAgIHJldHVybiBm YWxzZTsKPiArICAgIH07Cj4gKwo+ICsgICAgbGV0IGNhY2hlX2dlbiA9IGNhY2hlLnNoYXJlZF9n ZW47Cj4gKwo+ICsgICAgbGV0IFNvbWUoZ2VuMSkgPSB0b2tlbl9zaGFkb3dfc2hhcmVkX2dlbigp IGVsc2Ugewo+ICsgICAgICAgIHJldHVybiBmYWxzZTsKPiArICAgIH07Cj4gKyAgICBpZiBnZW4x ICE9IGNhY2hlX2dlbiB7Cj4gKyAgICAgICAgcmV0dXJuIGZhbHNlOwo+ICsgICAgfQo+ICsKPiAr ICAgIGxldCBlcSA9IG9wZW5zc2w6Om1lbWNtcDo6ZXEoZW50cnkuc2VjcmV0LmFzX2J5dGVzKCks IHNlY3JldC5hc19ieXRlcygpKTsKCnNob3VsZCB3ZSBpbnZhbGlkYXRlIHRoZSBjYWNoZSBoZXJl IGZvciB0aGlzIHBhcnRpY3VsYXIgYXV0aGlkIGluIGNhc2UKb2YgYSBtaXNtYXRjaCwgdG8gYXZv aWQgbWFraW5nIGJydXRlIGZvcmNpbmcgdG9vIGVhc3kvY2hlYXA/Cgo+ICsgICAgbGV0IFNvbWUo Z2VuMikgPSB0b2tlbl9zaGFkb3dfc2hhcmVkX2dlbigpIGVsc2Ugewo+ICsgICAgICAgIHJldHVy biBmYWxzZTsKPiArICAgIH07Cj4gKwo+ICsgICAgZXEgJiYgZ2VuMiA9PSBjYWNoZV9nZW4KPiAr fQo+ICsKPiArZm4gYXBwbHlfYXBpX211dGF0aW9uKHRva2VuaWQ6ICZBdXRoaWQsIG5ld19zZWNy ZXQ6IE9wdGlvbjwmc3RyPikgewo+ICsgICAgLy8gU2lnbmFsIGNhY2hlIGludmFsaWRhdGlvbiB0 byBvdGhlciBwcm9jZXNzZXMgKGJlc3QtZWZmb3J0KS4KPiArICAgIGxldCBuZXdfc2hhcmVkX2dl biA9IGJ1bXBfdG9rZW5fc2hhZG93X3NoYXJlZF9nZW4oKTsKPiArCj4gKyAgICBsZXQgbXV0IGNh Y2hlID0gVE9LRU5fU0VDUkVUX0NBQ0hFLndyaXRlKCk7Cj4gKwo+ICsgICAgLy8gSWYgd2UgY2Fu bm90IHJlYWQvYnVtcCB0aGUgc2hhcmVkIGdlbmVyYXRpb24sIHdlIGNhbm5vdCBzYWZlbHkgdHJ1 c3QgdGhlIGNhY2hlLgo+ICsgICAgbGV0IFNvbWUoZ2VuKSA9IG5ld19zaGFyZWRfZ2VuIGVsc2Ug ewo+ICsgICAgICAgIGludmFsaWRhdGVfY2FjaGVfc3RhdGUoJm11dCBjYWNoZSk7Cj4gKyAgICAg ICAgY2FjaGUuc2hhcmVkX2dlbiA9IDA7Cj4gKyAgICAgICAgcmV0dXJuOwo+ICsgICAgfTsKPiAr Cj4gKyAgICAvLyBVcGRhdGUgdG8gdGhlIHBvc3QtbXV0YXRpb24gZ2VuZXJhdGlvbi4KPiArICAg IGNhY2hlLnNoYXJlZF9nZW4gPSBnZW47Cj4gKwo+ICsgICAgLy8gQXBwbHkgdGhlIG5ldyBtdXRh dGlvbi4KPiArICAgIG1hdGNoIG5ld19zZWNyZXQgewo+ICsgICAgICAgIFNvbWUoc2VjcmV0KSA9 PiB7Cj4gKyAgICAgICAgICAgIGNhY2hlLnNlY3JldHMuaW5zZXJ0KAo+ICsgICAgICAgICAgICAg ICAgdG9rZW5pZC5jbG9uZSgpLAo+ICsgICAgICAgICAgICAgICAgQ2FjaGVkU2VjcmV0IHsKPiAr ICAgICAgICAgICAgICAgICAgICBzZWNyZXQ6IHNlY3JldC50b19vd25lZCgpLAo+ICsgICAgICAg ICAgICAgICAgfSwKPiArICAgICAgICAgICAgKTsKPiArICAgICAgICB9Cj4gKyAgICAgICAgTm9u ZSA9PiB7Cj4gKyAgICAgICAgICAgIGNhY2hlLnNlY3JldHMucmVtb3ZlKHRva2VuaWQpOwo+ICsg ICAgICAgIH0KPiArICAgIH0KPiArfQo+ICsKPiArLy8vIEdldCB0aGUgY3VycmVudCBzaGFyZWQg Z2VuZXJhdGlvbi4KPiArZm4gdG9rZW5fc2hhZG93X3NoYXJlZF9nZW4oKSAtPiBPcHRpb248dXNp emU+IHsKPiArICAgIGNyYXRlOjpDb25maWdWZXJzaW9uQ2FjaGU6Om5ldygpCj4gKyAgICAgICAg Lm9rKCkKPiArICAgICAgICAubWFwKHxjdmN8IGN2Yy50b2tlbl9zaGFkb3dfZ2VuZXJhdGlvbigp KQo+ICt9Cj4gKwo+ICsvLy8gQnVtcCBhbmQgcmV0dXJuIHRoZSBuZXcgc2hhcmVkIGdlbmVyYXRp b24uCj4gK2ZuIGJ1bXBfdG9rZW5fc2hhZG93X3NoYXJlZF9nZW4oKSAtPiBPcHRpb248dXNpemU+ IHsKPiArICAgIGNyYXRlOjpDb25maWdWZXJzaW9uQ2FjaGU6Om5ldygpCj4gKyAgICAgICAgLm9r KCkKPiArICAgICAgICAubWFwKHxjdmN8IGN2Yy5pbmNyZWFzZV90b2tlbl9zaGFkb3dfZ2VuZXJh dGlvbigpICsgMSkKPiArfQo+ICsKPiArLy8vIEludmFsaWRhdGVzIHRoZSBjYWNoZSBzdGF0ZSBh bmQgb25seSBrZWVwcyB0aGUgc2hhcmVkIGdlbmVyYXRpb24uCgpib3RoIGNhbGxzIHRvIHRoaXMg YWN0dWFsbHkgc2V0IHRoZSBjYWNoZWQgZ2VuZXJhdGlvbiB0byBzb21lIHZhbHVlCnJpZ2h0IGFm dGVyLCBzbyBtYXliZSB0aGlzIHNob3VsZCB0YWtlIGEgZ2VuZXJhdGlvbiBkaXJlY3RseSBhbmQg c2V0IGl0PwoKPiArZm4gaW52YWxpZGF0ZV9jYWNoZV9zdGF0ZShjYWNoZTogJm11dCBBcGlUb2tl blNlY3JldENhY2hlKSB7Cj4gKyAgICBjYWNoZS5zZWNyZXRzLmNsZWFyKCk7Cj4gK30KPiAtLSAK PiAyLjQ3LjMKPiAKPiAKPiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwo+IHBicy1kZXZlbCBtYWlsaW5nIGxpc3QKPiBwYnMtZGV2ZWxAbGlzdHMucHJv eG1veC5jb20KPiBodHRwczovL2xpc3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1hbi9saXN0 aW5mby9wYnMtZGV2ZWwKPiAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpwYnMtZGV2ZWwgbWFpbGluZyBsaXN0CnBicy1kZXZlbEBsaXN0cy5wcm94bW94 LmNvbQpodHRwczovL2xpc3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1hbi9saXN0aW5mby9w YnMtZGV2ZWwK