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 D96D91FF161 for ; Sat, 19 Jul 2025 14:52:43 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id A95D2B666; Sat, 19 Jul 2025 14:53:52 +0200 (CEST) From: Christian Ebner To: pbs-devel@lists.proxmox.com Date: Sat, 19 Jul 2025 14:50:11 +0200 Message-ID: <20250719125035.9926-26-c.ebner@proxmox.com> X-Mailer: git-send-email 2.47.2 In-Reply-To: <20250719125035.9926-1-c.ebner@proxmox.com> References: <20250719125035.9926-1-c.ebner@proxmox.com> MIME-Version: 1.0 X-Bm-Milter-Handled: 55990f41-d878-4baa-be0a-ee34c49e34d2 X-Bm-Transport-Timestamp: 1752929444968 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.046 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: [pbs-devel] [PATCH proxmox-backup v9 22/46] datastore: implement garbage collection for s3 backend 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" SW1wbGVtZW50cyB0aGUgZ2FyYmFnZSBjb2xsZWN0aW9uIGZvciBkYXRhc3RvcmVzIGJhY2tlZCBi eSBhbiBzMwpvYmplY3Qgc3RvcmUuClRha2UgYWR2YW50YWdlIG9mIHRoZSBsb2NhbCBkYXRhc3Rv cmUgYnkgcGxhY2luZyBtYXJrZXIgZmlsZXMgaW4gdGhlCmNodW5rIHN0b3JlIGR1cmluZyBwaGFz ZSAxIG9mIHRoZSBnYXJiYWdlIGNvbGxlY3Rpb24sIHVwZGF0aW5nIHRoZWlyCmF0aW1lIGlmIGFs cmVhZHkgcHJlc2VudC4KVGhpcyBhbGxvd3MgdXMgdG8gYXZvaWQgbWFraW5nIGV4cGVuc2l2ZSBB UEkgY2FsbHMgdG8gdXBkYXRlIG9iamVjdAptZXRhZGF0YSwgd2hpY2ggd291bGQgb25seSBiZSBw b3NzaWJsZSB2aWEgYSBjb3B5IG9iamVjdCBvcGVyYXRpb24uCgpUaGUgcGhhc2UgMiBpcyBpbXBs ZW1lbnRlZCBieSBmZXRjaGluZyBhIGxpc3Qgb2YgYWxsIHRoZSBjaHVua3MgdmlhCnRoZSBMaXN0 T2JqZWN0c1YyIEFQSSBjYWxsLCBmaWx0ZXJlZCBieSB0aGUgY2h1bmsgZm9sZGVyIHByZWZpeC4K VGhpcyBvcGVyYXRpb24gaGFzIHRvIGJlIHBlcmZvcm1lZCBpbiBiYXRjaGVzIG9mIDEwMDAgb2Jq ZWN0cywgZ2l2ZW4KYnkgdGhlIEFQSXMgcmVzcG9uc2UgbGltaXRzLgpGb3IgZWFjaCBvYmplY3Qg a2V5LCBsb29rdXAgdGhlIG1hcmtlciBmaWxlIGFuZCBkZWNpZGUgYmFzZWQgb24gdGhlCm1hcmtl ciBleGlzdGVuY2UgYW5kIGl0J3MgYXRpbWUgaWYgdGhlIGNodW5rIG9iamVjdCBuZWVkcyB0byBi ZQpyZW1vdmVkLiBEZWxldGlvbiBoYXBwZW5zIHZpYSB0aGUgZGVsZXRlIG9iamVjdHMgb3BlcmF0 aW9uLCBhbGxvd2luZwp0byBkZWxldGUgbXVsdGlwbGUgY2h1bmtzIGJ5IGEgc2luZ2xlIHJlcXVl c3QuCgpUaGlzIGFsbG93cyB0byBlZmZpY2llbnRseSBsb29rdXAgY2h1bmtzIHdoaWNoIGFyZSBu b3QgaW4gdXNlCmFueW1vcmUgd2hpbGUgYmVpbmcgcGVyZm9ybWFudCBhbmQgY29zdCBlZmZlY3Rp dmUuCgpCYXNlbGluZSBydW50aW1lIHBlcmZvcm1hbmNlIHRlc3RzOgotLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQoKMyBnYXJiYWdlIGNvbGxlY3Rpb24gcnVucyB3ZXJlIHBlcmZv cm1lZCB3aXRoIGhvdCBmaWxlc3lzdGVtIGNhY2hlcwooYnkgYWRkaXRpb25hbCBHQyBydW4gYmVm b3JlIHRoZSB0ZXN0IHJ1bnMpLiBUaGUgUEJTIGluc3RhbmNlIHdhcwp2aXJ0dWFsaXplZCwgdGhl IHNhbWUgdmlydHVhbGl6ZWQgZGlzayB1c2luZyBaRlMgZm9yIGFsbCB0aGUgbG9jYWwKY2FjaGUg c3RvcmVzOgoKQWxsIGRhdGFzdG9yZXMgY29udGFpbmVkIHRoZSBzYW1lIGVuY3J5cHRlZCBkYXRh LCB3aXRoIHRoZSBmb2xsb3dpbmcKY29udGVudCBzdGF0aXN0aWNzOgpPcmlnaW5hbCBkYXRhIHVz YWdlOiAyNjkuNjg1IEdpQgpPbi1EaXNrIHVzYWdlOiA5LjAxOCBHaUIgKDMuMzQlKQpPbi1EaXNr IGNodW5rczogNjQ3NwpEZWR1cGxpY2F0aW9uIGZhY3RvcjogMjkuOTAKQXZlcmFnZSBjaHVuayBz aXplOiAxLjQyNiBNaUIKClRoZSByZXN1dGx0cyBkZW1vbnN0cmF0ZSB0aGUgb3ZlcmhlYWQgY2F1 c2VkIGJ5IHRoZSBhZGRpdGlvbmFsCkxpc3RPYmplY3RWMiBBUEkgY2FsbHMgYW5kIHRoZWlyIHBy b2Nlc3NpbmcsIGJ1dCBkZXBlbmRpbmcgb24gdGhlCm9iamVjdCBzdG9yZSBiYWNrZW5kLgoKQXZl cmFnZSBnYXJiYWdlIGNvbGxlY3Rpb24gcnVudGltZToKTG9jYWwgZGF0YXN0b3JlOiAgICAgICAg ICAgICAoMi4wNCDCsSAwLjAxKSBzCkxvY2FsIFJBRE9TIGdhdGV3YXkgKFNxdWlkKTogKDMuMDUg wrEgMC4wMSkgcwpBV1MgUzM6ICAgICAgICAgICAgICAgICAgICAgICgzLjA1IMKxIDAuMDEpIHMK Q2xvdWRmbGFyZSBSMjogICAgICAgICAgICAgICAoNi43MSDCsSAwLjU4KSBzCgpBZnRlciBwcnVu aW5nIG9mIGFsbCBkYXRhc3RvcmUgY29udGVudHMgKHRoZXJlZm9yZSBpbmNsdWRpbmcKRGVsZXRl T2JqZWN0cyByZXF1ZXN0cyk6CkxvY2FsIGRhdGFzdG9yZTogICAgICAgICAgICAgIDMuMDQgcwpM b2NhbCBSQURPUyBnYXRld2F5IChTcXVpZCk6IDE0LjA4IHMKQVdTIFMzOiAgICAgICAgICAgICAg ICAgICAgICAxMy4wNiBzCkNsb3VkZmxhcmUgUjI6ICAgICAgICAgICAgICAgNzguMjEgcwoKU2ln bmVkLW9mZi1ieTogQ2hyaXN0aWFuIEVibmVyIDxjLmVibmVyQHByb3htb3guY29tPgotLS0KY2hh bmdlcyBzaW5jZSB2ZXJzaW9uIDg6Ci0gcmVmYWN0b3IgczMgYmFja2VuZCBnYyBsb2dpYyBpbnRv IG1vcmUgY29tcGFjdCBoZWxwZXIgZnVuY3Rpb25zCgogcGJzLWRhdGFzdG9yZS9zcmMvY2h1bmtf c3RvcmUucnMgfCAgIDQgKwogcGJzLWRhdGFzdG9yZS9zcmMvZGF0YXN0b3JlLnJzICAgfCAyNTIg KysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAyMzAgaW5z ZXJ0aW9ucygrKSwgMjYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvcGJzLWRhdGFzdG9yZS9z cmMvY2h1bmtfc3RvcmUucnMgYi9wYnMtZGF0YXN0b3JlL3NyYy9jaHVua19zdG9yZS5ycwppbmRl eCA4YzE5NWRmNTQuLjk1ZjAwZThkNSAxMDA2NDQKLS0tIGEvcGJzLWRhdGFzdG9yZS9zcmMvY2h1 bmtfc3RvcmUucnMKKysrIGIvcGJzLWRhdGFzdG9yZS9zcmMvY2h1bmtfc3RvcmUucnMKQEAgLTM1 Myw2ICszNTMsMTAgQEAgaW1wbCBDaHVua1N0b3JlIHsKICAgICAgICAgUHJvY2Vzc0xvY2tlcjo6 b2xkZXN0X3NoYXJlZF9sb2NrKHNlbGYubG9ja2VyLmNsb25lKCkudW53cmFwKCkpCiAgICAgfQog CisgICAgcHViIGZuIG11dGV4KCZzZWxmKSAtPiAmc3RkOjpzeW5jOjpNdXRleDwoKT4geworICAg ICAgICAmc2VsZi5tdXRleAorICAgIH0KKwogICAgIHB1YiBmbiBzd2VlcF91bnVzZWRfY2h1bmtz KAogICAgICAgICAmc2VsZiwKICAgICAgICAgb2xkZXN0X3dyaXRlcjogaTY0LApkaWZmIC0tZ2l0 IGEvcGJzLWRhdGFzdG9yZS9zcmMvZGF0YXN0b3JlLnJzIGIvcGJzLWRhdGFzdG9yZS9zcmMvZGF0 YXN0b3JlLnJzCmluZGV4IDhiZGRhZmQ1ZC4uYzhjMDgwMTBkIDEwMDY0NAotLS0gYS9wYnMtZGF0 YXN0b3JlL3NyYy9kYXRhc3RvcmUucnMKKysrIGIvcGJzLWRhdGFzdG9yZS9zcmMvZGF0YXN0b3Jl LnJzCkBAIC00LDcgKzQsNyBAQCB1c2Ugc3RkOjpvczo6dW5peDo6ZmZpOjpPc1N0ckV4dDsKIHVz ZSBzdGQ6Om9zOjp1bml4Ojppbzo6QXNSYXdGZDsKIHVzZSBzdGQ6OnBhdGg6OntQYXRoLCBQYXRo QnVmfTsKIHVzZSBzdGQ6OnN5bmM6OntBcmMsIExhenlMb2NrLCBNdXRleH07Ci11c2Ugc3RkOjp0 aW1lOjpEdXJhdGlvbjsKK3VzZSBzdGQ6OnRpbWU6OntEdXJhdGlvbiwgU3lzdGVtVGltZX07CiAK IHVzZSBhbnlob3c6OntiYWlsLCBmb3JtYXRfZXJyLCBDb250ZXh0LCBFcnJvcn07CiB1c2UgaHR0 cF9ib2R5X3V0aWw6OkJvZHlFeHQ7CkBAIC0xNCw3ICsxNCw3IEBAIHVzZSB0cmFjaW5nOjp7aW5m bywgd2Fybn07CiAKIHVzZSBwcm94bW94X2h1bWFuX2J5dGU6Okh1bWFuQnl0ZTsKIHVzZSBwcm94 bW94X3MzX2NsaWVudDo6ewotICAgIFMzQ2xpZW50LCBTM0NsaWVudENvbmZpZywgUzNDbGllbnRP cHRpb25zLCBTM0NsaWVudFNlY3JldHNDb25maWcsIFMzUGF0aFByZWZpeCwKKyAgICBTM0NsaWVu dCwgUzNDbGllbnRDb25maWcsIFMzQ2xpZW50T3B0aW9ucywgUzNDbGllbnRTZWNyZXRzQ29uZmln LCBTM09iamVjdEtleSwgUzNQYXRoUHJlZml4LAogfTsKIHVzZSBwcm94bW94X3NjaGVtYTo6QXBp VHlwZTsKIApAQCAtMTIxNiw2ICsxMjE2LDcgQEAgaW1wbCBEYXRhU3RvcmUgewogICAgICAgICBj aHVua19scnVfY2FjaGU6ICZtdXQgT3B0aW9uPExydUNhY2hlPFt1ODsgMzJdLCAoKT4+LAogICAg ICAgICBzdGF0dXM6ICZtdXQgR2FyYmFnZUNvbGxlY3Rpb25TdGF0dXMsCiAgICAgICAgIHdvcmtl cjogJmR5biBXb3JrZXJUYXNrQ29udGV4dCwKKyAgICAgICAgczNfY2xpZW50OiBPcHRpb248QXJj PFMzQ2xpZW50Pj4sCiAgICAgKSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7CiAgICAgICAgIHN0YXR1 cy5pbmRleF9maWxlX2NvdW50ICs9IDE7CiAgICAgICAgIHN0YXR1cy5pbmRleF9kYXRhX2J5dGVz ICs9IGluZGV4LmluZGV4X2J5dGVzKCk7CkBAIC0xMjM4LDIxICsxMjM5LDQxIEBAIGltcGwgRGF0 YVN0b3JlIHsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAg IGlmICFzZWxmLmlubmVyLmNodW5rX3N0b3JlLmNvbmRfdG91Y2hfY2h1bmsoZGlnZXN0LCBmYWxz ZSk/IHsKLSAgICAgICAgICAgICAgICBsZXQgaGV4ID0gaGV4OjplbmNvZGUoZGlnZXN0KTsKLSAg ICAgICAgICAgICAgICB3YXJuISgKLSAgICAgICAgICAgICAgICAgICAgIndhcm5pbmc6IHVuYWJs ZSB0byBhY2Nlc3Mgbm9uLWV4aXN0ZW50IGNodW5rIHtoZXh9LCByZXF1aXJlZCBieSB7ZmlsZV9u YW1lOj99IgotICAgICAgICAgICAgICAgICk7Ci0KLSAgICAgICAgICAgICAgICAvLyB0b3VjaCBh bnkgY29ycmVzcG9uZGluZyAuYmFkIGZpbGVzIHRvIGtlZXAgdGhlbSBhcm91bmQsIG1lYW5pbmcg aWYgYSBjaHVuayBpcwotICAgICAgICAgICAgICAgIC8vIHJld3JpdHRlbiBjb3JyZWN0bHkgdGhl eSB3aWxsIGJlIHJlbW92ZWQgYXV0b21hdGljYWxseSwgYXMgd2VsbCBhcyBpZiBubyBpbmRleAot ICAgICAgICAgICAgICAgIC8vIGZpbGUgcmVxdWlyZXMgdGhlIGNodW5rIGFueW1vcmUgKHdvbid0 IGdldCB0byB0aGlzIGxvb3AgdGhlbikKLSAgICAgICAgICAgICAgICBmb3IgaSBpbiAwLi49OSB7 Ci0gICAgICAgICAgICAgICAgICAgIGxldCBiYWRfZXh0ID0gZm9ybWF0ISgie30uYmFkIiwgaSk7 Ci0gICAgICAgICAgICAgICAgICAgIGxldCBtdXQgYmFkX3BhdGggPSBQYXRoQnVmOjpuZXcoKTsK LSAgICAgICAgICAgICAgICAgICAgYmFkX3BhdGgucHVzaChzZWxmLmNodW5rX3BhdGgoZGlnZXN0 KS4wKTsKLSAgICAgICAgICAgICAgICAgICAgYmFkX3BhdGguc2V0X2V4dGVuc2lvbihiYWRfZXh0 KTsKLSAgICAgICAgICAgICAgICAgICAgc2VsZi5pbm5lci5jaHVua19zdG9yZS5jb25kX3RvdWNo X3BhdGgoJmJhZF9wYXRoLCBmYWxzZSk/OworICAgICAgICAgICAgbWF0Y2ggczNfY2xpZW50IHsK KyAgICAgICAgICAgICAgICBOb25lID0+IHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRmlsZXN5 c3RlbSBiYWNrZW5kCisgICAgICAgICAgICAgICAgICAgIGlmICFzZWxmLmlubmVyLmNodW5rX3N0 b3JlLmNvbmRfdG91Y2hfY2h1bmsoZGlnZXN0LCBmYWxzZSk/IHsKKyAgICAgICAgICAgICAgICAg ICAgICAgIGxldCBoZXggPSBoZXg6OmVuY29kZShkaWdlc3QpOworICAgICAgICAgICAgICAgICAg ICAgICAgd2FybiEoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndhcm5pbmc6IHVuYWJs ZSB0byBhY2Nlc3Mgbm9uLWV4aXN0ZW50IGNodW5rIHtoZXh9LCByZXF1aXJlZCBieSB7ZmlsZV9u YW1lOj99IgorICAgICAgICAgICAgICAgICAgICAgICAgKTsKKworICAgICAgICAgICAgICAgICAg ICAgICAgLy8gdG91Y2ggYW55IGNvcnJlc3BvbmRpbmcgLmJhZCBmaWxlcyB0byBrZWVwIHRoZW0g YXJvdW5kLCBtZWFuaW5nIGlmIGEgY2h1bmsgaXMKKyAgICAgICAgICAgICAgICAgICAgICAgIC8v IHJld3JpdHRlbiBjb3JyZWN0bHkgdGhleSB3aWxsIGJlIHJlbW92ZWQgYXV0b21hdGljYWxseSwg YXMgd2VsbCBhcyBpZiBubyBpbmRleAorICAgICAgICAgICAgICAgICAgICAgICAgLy8gZmlsZSBy ZXF1aXJlcyB0aGUgY2h1bmsgYW55bW9yZSAod29uJ3QgZ2V0IHRvIHRoaXMgbG9vcCB0aGVuKQor ICAgICAgICAgICAgICAgICAgICAgICAgZm9yIGkgaW4gMC4uPTkgeworICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGxldCBiYWRfZXh0ID0gZm9ybWF0ISgie30uYmFkIiwgaSk7CisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGV0IG11dCBiYWRfcGF0aCA9IFBhdGhCdWY6Om5ldygpOwor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhZF9wYXRoLnB1c2goc2VsZi5jaHVua19wYXRo KGRpZ2VzdCkuMCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFkX3BhdGguc2V0X2V4 dGVuc2lvbihiYWRfZXh0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxmLmlubmVy LmNodW5rX3N0b3JlLmNvbmRfdG91Y2hfcGF0aCgmYmFkX3BhdGgsIGZhbHNlKT87CisgICAgICAg ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgU29tZShyZWYgX3MzX2NsaWVudCkgPT4geworICAgICAgICAg ICAgICAgICAgICAvLyBVcGRhdGUgYXRpbWUgb24gbG9jYWwgY2FjaGUgbWFya2VyIGZpbGVzLgor ICAgICAgICAgICAgICAgICAgICBpZiAhc2VsZi5pbm5lci5jaHVua19zdG9yZS5jb25kX3RvdWNo X2NodW5rKGRpZ2VzdCwgZmFsc2UpPyB7CisgICAgICAgICAgICAgICAgICAgICAgICBsZXQgKGNo dW5rX3BhdGgsIF9kaWdlc3QpID0gc2VsZi5jaHVua19wYXRoKGRpZ2VzdCk7CisgICAgICAgICAg ICAgICAgICAgICAgICAvLyBJbnNlcnQgZW1wdHkgZmlsZSBhcyBtYXJrZXIgdG8gdGVsbCBHQyBw aGFzZTIgdGhhdCB0aGlzIGlzCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBhIGNodW5rIHN0 aWxsIGluLXVzZSwgc28gdG8ga2VlcCBpbiB0aGUgUzMgb2JqZWN0IHN0b3JlLgorICAgICAgICAg ICAgICAgICAgICAgICAgc3RkOjpmczo6RmlsZTo6b3B0aW9ucygpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLndyaXRlKHRydWUpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNy ZWF0ZV9uZXcodHJ1ZSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAub3BlbigmY2h1bmtf cGF0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAud2l0aF9jb250ZXh0KHx8IHsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9ybWF0ISgiZmFpbGVkIHRvIGNyZWF0ZSBt YXJrZXIgZm9yIGNodW5rIHt9IiwgaGV4OjplbmNvZGUoZGlnZXN0KSkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9KT87CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTEyNjQsNiArMTI4NSw3IEBAIGltcGwg RGF0YVN0b3JlIHsKICAgICAgICAgc3RhdHVzOiAmbXV0IEdhcmJhZ2VDb2xsZWN0aW9uU3RhdHVz LAogICAgICAgICB3b3JrZXI6ICZkeW4gV29ya2VyVGFza0NvbnRleHQsCiAgICAgICAgIGNhY2hl X2NhcGFjaXR5OiB1c2l6ZSwKKyAgICAgICAgczNfY2xpZW50OiBPcHRpb248QXJjPFMzQ2xpZW50 Pj4sCiAgICAgKSAtPiBSZXN1bHQ8KCksIEVycm9yPiB7CiAgICAgICAgIC8vIEl0ZXJhdGUgdHdp Y2Ugb3ZlciB0aGUgZGF0YXN0b3JlIHRvIGZldGNoIGluZGV4IGZpbGVzLCBldmVuIGlmIHRoaXMg Y29tZXMgd2l0aCBhbgogICAgICAgICAvLyBhZGRpdGlvbmFsIHJ1bnRpbWUgY29zdDoKQEAgLTEz NTcsNiArMTM3OSw3IEBAIGltcGwgRGF0YVN0b3JlIHsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJm11dCBjaHVua19scnVfY2FjaGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0YXR1cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzM19jbGllbnQuYXNfcmVmKCkuY2xvbmVk KCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKT87CiAKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBpZiAhdW5wcm9jZXNzZWRfaW5kZXhfbGlzdC5yZW1vdmUoJnBhdGgpIHsKQEAg LTEzOTEsNyArMTQxNCwxNCBAQCBpbXBsIERhdGFTdG9yZSB7CiAgICAgICAgICAgICAgICAgICAg IGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH07Ci0gICAgICAgICAg ICBzZWxmLmluZGV4X21hcmtfdXNlZF9jaHVua3MoaW5kZXgsICZwYXRoLCAmbXV0IGNodW5rX2xy dV9jYWNoZSwgc3RhdHVzLCB3b3JrZXIpPzsKKyAgICAgICAgICAgIHNlbGYuaW5kZXhfbWFya191 c2VkX2NodW5rcygKKyAgICAgICAgICAgICAgICBpbmRleCwKKyAgICAgICAgICAgICAgICAmcGF0 aCwKKyAgICAgICAgICAgICAgICAmbXV0IGNodW5rX2xydV9jYWNoZSwKKyAgICAgICAgICAgICAg ICBzdGF0dXMsCisgICAgICAgICAgICAgICAgd29ya2VyLAorICAgICAgICAgICAgICAgIHMzX2Ns aWVudC5hc19yZWYoKS5jbG9uZWQoKSwKKyAgICAgICAgICAgICk/OwogICAgICAgICAgICAgd2Fy biEoIk1hcmtlZCBjaHVua3MgZm9yIHVuZXhwZWN0ZWQgaW5kZXggZmlsZSBhdCAne3BhdGg6P30n Iik7CiAgICAgICAgIH0KICAgICAgICAgaWYgc3RyYW5nZV9wYXRoc19jb3VudCA+IDAgewpAQCAt MTQ5MCwxOCArMTUyMCwxMDQgQEAgaW1wbCBEYXRhU3RvcmUgewogICAgICAgICAgICAgICAgIDEw MjQgKiAxMDI0CiAgICAgICAgICAgICB9OwogCi0gICAgICAgICAgICBpbmZvISgiU3RhcnQgR0Mg cGhhc2UxIChtYXJrIHVzZWQgY2h1bmtzKSIpOworICAgICAgICAgICAgbGV0IHMzX2NsaWVudCA9 IG1hdGNoIHNlbGYuYmFja2VuZCgpPyB7CisgICAgICAgICAgICAgICAgRGF0YXN0b3JlQmFja2Vu ZDo6RmlsZXN5c3RlbSA9PiBOb25lLAorICAgICAgICAgICAgICAgIERhdGFzdG9yZUJhY2tlbmQ6 OlMzKHMzX2NsaWVudCkgPT4geworICAgICAgICAgICAgICAgICAgICBwcm94bW94X2FzeW5jOjpy dW50aW1lOjpibG9ja19vbihzM19jbGllbnQuaGVhZF9idWNrZXQoKSkKKyAgICAgICAgICAgICAg ICAgICAgICAgIC5jb250ZXh0KCJmYWlsZWQgdG8gcmVhY2ggYnVja2V0Iik/OworICAgICAgICAg ICAgICAgICAgICBTb21lKHMzX2NsaWVudCkKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICB9OwogCi0gICAgICAgICAgICBzZWxmLm1hcmtfdXNlZF9jaHVua3MoJm11dCBnY19zdGF0dXMs IHdvcmtlciwgZ2NfY2FjaGVfY2FwYWNpdHkpCi0gICAgICAgICAgICAgICAgLmNvbnRleHQoIm1h cmtpbmcgdXNlZCBjaHVua3MgZmFpbGVkIik/OworICAgICAgICAgICAgaW5mbyEoIlN0YXJ0IEdD IHBoYXNlMSAobWFyayB1c2VkIGNodW5rcykiKTsKIAotICAgICAgICAgICAgaW5mbyEoIlN0YXJ0 IEdDIHBoYXNlMiAoc3dlZXAgdW51c2VkIGNodW5rcykiKTsKLSAgICAgICAgICAgIHNlbGYuaW5u ZXIuY2h1bmtfc3RvcmUuc3dlZXBfdW51c2VkX2NodW5rcygKLSAgICAgICAgICAgICAgICBvbGRl c3Rfd3JpdGVyLAotICAgICAgICAgICAgICAgIG1pbl9hdGltZSwKKyAgICAgICAgICAgIHNlbGYu bWFya191c2VkX2NodW5rcygKICAgICAgICAgICAgICAgICAmbXV0IGdjX3N0YXR1cywKICAgICAg ICAgICAgICAgICB3b3JrZXIsCi0gICAgICAgICAgICApPzsKKyAgICAgICAgICAgICAgICBnY19j YWNoZV9jYXBhY2l0eSwKKyAgICAgICAgICAgICAgICBzM19jbGllbnQuYXNfcmVmKCkuY2xvbmVk KCksCisgICAgICAgICAgICApCisgICAgICAgICAgICAuY29udGV4dCgibWFya2luZyB1c2VkIGNo dW5rcyBmYWlsZWQiKT87CisKKyAgICAgICAgICAgIGluZm8hKCJTdGFydCBHQyBwaGFzZTIgKHN3 ZWVwIHVudXNlZCBjaHVua3MpIik7CisKKyAgICAgICAgICAgIGlmIGxldCBTb21lKHJlZiBzM19j bGllbnQpID0gczNfY2xpZW50IHsKKyAgICAgICAgICAgICAgICBsZXQgbXV0IGNodW5rX2NvdW50 ID0gMDsKKyAgICAgICAgICAgICAgICBsZXQgcHJlZml4ID0gUzNQYXRoUHJlZml4OjpTb21lKCIu Y2h1bmtzLyIudG9fc3RyaW5nKCkpOworICAgICAgICAgICAgICAgIC8vIE9wZXJhdGVzIGluIGJh dGNoZXMgb2YgMTAwMCBvYmplY3RzIG1heCBwZXIgcmVxdWVzdAorICAgICAgICAgICAgICAgIGxl dCBtdXQgbGlzdF9idWNrZXRfcmVzdWx0ID0KKyAgICAgICAgICAgICAgICAgICAgcHJveG1veF9h c3luYzo6cnVudGltZTo6YmxvY2tfb24oczNfY2xpZW50Lmxpc3Rfb2JqZWN0c192MigmcHJlZml4 LCBOb25lKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIC5jb250ZXh0KCJmYWlsZWQgdG8gbGlz dCBjaHVuayBpbiBzMyBvYmplY3Qgc3RvcmUiKT87CisKKyAgICAgICAgICAgICAgICBsZXQgbXV0 IGRlbGV0ZV9saXN0ID0gVmVjOjp3aXRoX2NhcGFjaXR5KDEwMDApOworICAgICAgICAgICAgICAg IGxvb3AgeworICAgICAgICAgICAgICAgICAgICBsZXQgbG9jayA9IHNlbGYuaW5uZXIuY2h1bmtf c3RvcmUubXV0ZXgoKS5sb2NrKCkudW53cmFwKCk7CisKKyAgICAgICAgICAgICAgICAgICAgZm9y IGNvbnRlbnQgaW4gbGlzdF9idWNrZXRfcmVzdWx0LmNvbnRlbnRzIHsKKyAgICAgICAgICAgICAg ICAgICAgICAgIGlmIHNlbGYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAubWFya19jaHVu a19mb3Jfb2JqZWN0X2tleSgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmNvbnRl bnQua2V5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50LnNpemUsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbl9hdGltZSwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgb2xkZXN0X3dyaXRlciwKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJm11dCBkZWxldGVfbGlzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJm11dCBnY19zdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC53aXRoX2NvbnRleHQofHwgeworICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBmb3JtYXQhKCJmYWlsZWQgdG8gbWFyayBjaHVuayBmb3Igb2JqZWN0 IGtleSB7fSIsIGNvbnRlbnQua2V5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pPwor ICAgICAgICAgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNo dW5rX2NvdW50ICs9IDE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAg ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpZiAhZGVsZXRlX2xpc3QuaXNfZW1wdHko KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGVsZXRlX29iamVjdHNfcmVzdWx0ID0g cHJveG1veF9hc3luYzo6cnVudGltZTo6YmxvY2tfb24oCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgczNfY2xpZW50LmRlbGV0ZV9vYmplY3RzKCZkZWxldGVfbGlzdCksCisgICAgICAgICAg ICAgICAgICAgICAgICApPzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIGxldCBTb21lKF9l cnIpID0gZGVsZXRlX29iamVjdHNfcmVzdWx0LmVycm9yIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICBiYWlsISgiZmFpbGVkIHRvIGRlbGV0ZSBzb21lIG9iamVjdHMiKTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZV9saXN0LmNs ZWFyKCk7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBkcm9w KGxvY2spOworCisgICAgICAgICAgICAgICAgICAgIC8vIFByb2Nlc3MgbmV4dCBiYXRjaCBvZiBj aHVua3MgaWYgdGhlcmUgaXMgbW9yZQorICAgICAgICAgICAgICAgICAgICBpZiBsaXN0X2J1Y2tl dF9yZXN1bHQuaXNfdHJ1bmNhdGVkIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpc3RfYnVj a2V0X3Jlc3VsdCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJveG1veF9hc3luYzo6 cnVudGltZTo6YmxvY2tfb24oczNfY2xpZW50Lmxpc3Rfb2JqZWN0c192MigKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgJnByZWZpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbGlzdF9idWNrZXRfcmVzdWx0Lm5leHRfY29udGludWF0aW9uX3Rva2VuLmFzX2RlcmVm KCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKSk/OworICAgICAgICAgICAgICAgICAg ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaW5mbyEoInBy b2Nlc3NlZCB7Y2h1bmtfY291bnR9IHRvdGFsIGNodW5rcyIpOworCisgICAgICAgICAgICAgICAg Ly8gUGhhc2UgMiBHQyBvZiBGaWxlc3lzdGVtIGJhY2tlZCBzdG9yYWdlIGlzIHBoYXNlIDMgZm9y IFMzIGJhY2tlZCBHQworICAgICAgICAgICAgICAgIGluZm8hKCJTdGFydCBHQyBwaGFzZTMgKHN3 ZWVwIHVudXNlZCBjaHVuayBtYXJrZXJzKSIpOworCisgICAgICAgICAgICAgICAgbGV0IG11dCB0 bXBfZ2Nfc3RhdHVzID0gR2FyYmFnZUNvbGxlY3Rpb25TdGF0dXMgeworICAgICAgICAgICAgICAg ICAgICB1cGlkOiBTb21lKHVwaWQudG9fc3RyaW5nKCkpLAorICAgICAgICAgICAgICAgICAgICAu LkRlZmF1bHQ6OmRlZmF1bHQoKQorICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAg c2VsZi5pbm5lci5jaHVua19zdG9yZS5zd2VlcF91bnVzZWRfY2h1bmtzKAorICAgICAgICAgICAg ICAgICAgICBvbGRlc3Rfd3JpdGVyLAorICAgICAgICAgICAgICAgICAgICBtaW5fYXRpbWUsCisg ICAgICAgICAgICAgICAgICAgICZtdXQgdG1wX2djX3N0YXR1cywKKyAgICAgICAgICAgICAgICAg ICAgd29ya2VyLAorICAgICAgICAgICAgICAgICk/OworICAgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgICAgICBzZWxmLmlubmVyLmNodW5rX3N0b3JlLnN3ZWVwX3VudXNlZF9jaHVua3Mo CisgICAgICAgICAgICAgICAgICAgIG9sZGVzdF93cml0ZXIsCisgICAgICAgICAgICAgICAgICAg IG1pbl9hdGltZSwKKyAgICAgICAgICAgICAgICAgICAgJm11dCBnY19zdGF0dXMsCisgICAgICAg ICAgICAgICAgICAgIHdvcmtlciwKKyAgICAgICAgICAgICAgICApPzsKKyAgICAgICAgICAgIH0K IAogICAgICAgICAgICAgaWYgbGV0IFNvbWUoY2FjaGVfc3RhdHMpID0gJmdjX3N0YXR1cy5jYWNo ZV9zdGF0cyB7CiAgICAgICAgICAgICAgICAgbGV0IHRvdGFsX2NhY2hlX2NvdW50cyA9IGNhY2hl X3N0YXRzLmhpdHMgKyBjYWNoZV9zdGF0cy5taXNzZXM7CkBAIC0xNTg4LDYgKzE3MDQsOTAgQEAg aW1wbCBEYXRhU3RvcmUgewogICAgICAgICBPaygoKSkKICAgICB9CiAKKyAgICAvLyBNYXJrIHRo ZSBjaHVuayBtYXJrZXIgaW4gdGhlIGxvY2FsIGNhY2hlIHN0b3JlIGZvciB0aGUgZ2l2ZW4gb2Jq ZWN0IGtleSBhcyBpbiB1c2UKKyAgICAvLyBieSB1cGRhdGluZyBpdCdzIGF0aW1lLgorICAgIC8v IFJldHVybnMgT2sodHJ1ZSkgaWYgdGhlIGNodW5rIHdhcyB1cGRhdGVkIGFuZCBPayhmYWxzZSkg aWYgdGhlIG9iamVjdCB3YXMgbm90IGEgY2h1bmsuCisgICAgZm4gbWFya19jaHVua19mb3Jfb2Jq ZWN0X2tleSgKKyAgICAgICAgJnNlbGYsCisgICAgICAgIG9iamVjdF9rZXk6ICZTM09iamVjdEtl eSwKKyAgICAgICAgc2l6ZTogdTY0LAorICAgICAgICBtaW5fYXRpbWU6IGk2NCwKKyAgICAgICAg b2xkZXN0X3dyaXRlcjogaTY0LAorICAgICAgICBkZWxldGVfbGlzdDogJm11dCBWZWM8UzNPYmpl Y3RLZXk+LAorICAgICAgICBnY19zdGF0dXM6ICZtdXQgR2FyYmFnZUNvbGxlY3Rpb25TdGF0dXMs CisgICAgKSAtPiBSZXN1bHQ8Ym9vbCwgRXJyb3I+IHsKKyAgICAgICAgbGV0IGNodW5rX3BhdGgg PSBtYXRjaCBzZWxmLmNodW5rX3BhdGhfZnJvbV9vYmplY3Rfa2V5KCZvYmplY3Rfa2V5KSB7Cisg ICAgICAgICAgICBTb21lKHBhdGgpID0+IHBhdGgsCisgICAgICAgICAgICBOb25lID0+IHJldHVy biBPayhmYWxzZSksCisgICAgICAgIH07CisKKyAgICAgICAgLy8gQ2hlY2sgbG9jYWwgbWFya2Vy cyAoY3JlYXRlZCBvciBhdGltZSB1cGRhdGVkIGR1cmluZyBwaGFzZTEpIGFuZAorICAgICAgICAv LyBrZWVwIG9yIGRlbGV0ZSBjaHVuayBiYXNlZCBvbiB0aGF0LgorICAgICAgICBsZXQgYXRpbWUg PSBtYXRjaCBzdGQ6OmZzOjptZXRhZGF0YSgmY2h1bmtfcGF0aCkgeworICAgICAgICAgICAgT2so c3RhdCkgPT4gc3RhdC5hY2Nlc3NlZCgpPywKKyAgICAgICAgICAgIEVycihlcnIpIGlmIGVyci5r aW5kKCkgPT0gc3RkOjppbzo6RXJyb3JLaW5kOjpOb3RGb3VuZCA9PiB7CisgICAgICAgICAgICAg ICAgLy8gRmlsZSBub3QgZm91bmQsIGRlbGV0ZSBieSBzZXR0aW5nIGF0aW1lIHRvIHVuaXggZXBv Y2gKKyAgICAgICAgICAgICAgICBpbmZvISgiTm90IGZvdW5kLCBtYXJrIGZvciBkZWxldGlvbjog e29iamVjdF9rZXl9Iik7CisgICAgICAgICAgICAgICAgU3lzdGVtVGltZTo6VU5JWF9FUE9DSAor ICAgICAgICAgICAgfQorICAgICAgICAgICAgRXJyKGVycikgPT4gcmV0dXJuIEVycihlcnIuaW50 bygpKSwKKyAgICAgICAgfTsKKyAgICAgICAgbGV0IGF0aW1lID0gYXRpbWUuZHVyYXRpb25fc2lu Y2UoU3lzdGVtVGltZTo6VU5JWF9FUE9DSCk/LmFzX3NlY3MoKSBhcyBpNjQ7CisKKyAgICAgICAg bGV0IGJhZCA9IGNodW5rX3BhdGguYXNfcGF0aCgpLmVuZHNfd2l0aCgiLmJhZCIpOworCisgICAg ICAgIGlmIGF0aW1lIDwgbWluX2F0aW1lIHsKKyAgICAgICAgICAgIGRlbGV0ZV9saXN0LnB1c2go b2JqZWN0X2tleS5jbG9uZSgpKTsKKyAgICAgICAgICAgIGlmIGJhZCB7CisgICAgICAgICAgICAg ICAgZ2Nfc3RhdHVzLnJlbW92ZWRfYmFkICs9IDE7CisgICAgICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgICAgIGdjX3N0YXR1cy5yZW1vdmVkX2NodW5rcyArPSAxOworICAgICAgICAgICAg fQorICAgICAgICAgICAgZ2Nfc3RhdHVzLnJlbW92ZWRfYnl0ZXMgKz0gc2l6ZTsKKyAgICAgICAg fSBlbHNlIGlmIGF0aW1lIDwgb2xkZXN0X3dyaXRlciB7CisgICAgICAgICAgICBpZiBiYWQgewor ICAgICAgICAgICAgICAgIGdjX3N0YXR1cy5zdGlsbF9iYWQgKz0gMTsKKyAgICAgICAgICAgIH0g ZWxzZSB7CisgICAgICAgICAgICAgICAgZ2Nfc3RhdHVzLnBlbmRpbmdfY2h1bmtzICs9IDE7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBnY19zdGF0dXMucGVuZGluZ19ieXRlcyArPSBzaXpl OworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgaWYgIWJhZCB7CisgICAgICAgICAgICAg ICAgZ2Nfc3RhdHVzLmRpc2tfY2h1bmtzICs9IDE7CisgICAgICAgICAgICB9CisgICAgICAgICAg ICBnY19zdGF0dXMuZGlza19ieXRlcyArPSBzaXplOworICAgICAgICB9CisKKyAgICAgICAgT2so dHJ1ZSkKKyAgICB9CisKKyAgICAvLyBDaGVjayBhbmQgZ2VuZXJhdGUgYSBjaHVuayBwYXRoIGZy b20gZ2l2ZW4gb2JqZWN0IGtleQorICAgIGZuIGNodW5rX3BhdGhfZnJvbV9vYmplY3Rfa2V5KCZz ZWxmLCBvYmplY3Rfa2V5OiAmUzNPYmplY3RLZXkpIC0+IE9wdGlvbjxQYXRoQnVmPiB7CisgICAg ICAgIC8vIENoZWNrIG9iamVjdCBpcyBhY3R1YWxseSBhIGNodW5rCisgICAgICAgIGxldCBkaWdl c3QgPSBtYXRjaCBQYXRoOjpuZXc6OjxzdHI+KG9iamVjdF9rZXkpLmZpbGVfbmFtZSgpIHsKKyAg ICAgICAgICAgIFNvbWUoZmlsZV9uYW1lKSA9PiBmaWxlX25hbWUsCisgICAgICAgICAgICAvLyBz aG91bGQgbmV2ZXIgYmUgdGhlIGNhc2UgYXMgb2JqZWN0cyB3aWxsIGhhdmUgYSBmaWxlbmFtZQor ICAgICAgICAgICAgTm9uZSA9PiByZXR1cm4gTm9uZSwKKyAgICAgICAgfTsKKyAgICAgICAgbGV0 IGJ5dGVzID0gZGlnZXN0LmFzX2J5dGVzKCk7CisgICAgICAgIGlmIGJ5dGVzLmxlbigpICE9IDY0 ICYmIGJ5dGVzLmxlbigpICE9IDY0ICsgIi4wLmJhZCIubGVuKCkgeworICAgICAgICAgICAgcmV0 dXJuIE5vbmU7CisgICAgICAgIH0KKyAgICAgICAgaWYgIWJ5dGVzLml0ZXIoKS50YWtlKDY0KS5h bGwodTg6OmlzX2FzY2lpX2hleGRpZ2l0KSB7CisgICAgICAgICAgICByZXR1cm4gTm9uZTsKKyAg ICAgICAgfQorCisgICAgICAgIC8vIFNhZmUgc2luY2UgY29udGFpbnMgdmFsaWQgYXNjaWkgaGV4 ZGlnaXRzIG9ubHkgYXMgY2hlY2tlZCBhYm92ZS4KKyAgICAgICAgbGV0IGRpZ2VzdF9zdHIgPSBk aWdlc3QudG9fc3RyaW5nX2xvc3N5KCk7CisgICAgICAgIGxldCBoZXhkaWdpdF9wcmVmaXggPSB1 bnNhZmUgeyBkaWdlc3Rfc3RyLmdldF91bmNoZWNrZWQoMC4uNCkgfTsKKyAgICAgICAgbGV0IG11 dCBjaHVua19wYXRoID0gc2VsZi5iYXNlX3BhdGgoKTsKKyAgICAgICAgY2h1bmtfcGF0aC5wdXNo KCIuY2h1bmtzIik7CisgICAgICAgIGNodW5rX3BhdGgucHVzaChoZXhkaWdpdF9wcmVmaXgpOwor ICAgICAgICBjaHVua19wYXRoLnB1c2goZGlnZXN0KTsKKworICAgICAgICBTb21lKGNodW5rX3Bh dGgpCisgICAgfQorCiAgICAgcHViIGZuIHRyeV9zaGFyZWRfY2h1bmtfc3RvcmVfbG9jaygmc2Vs ZikgLT4gUmVzdWx0PFByb2Nlc3NMb2NrU2hhcmVkR3VhcmQsIEVycm9yPiB7CiAgICAgICAgIHNl bGYuaW5uZXIuY2h1bmtfc3RvcmUudHJ5X3NoYXJlZF9sb2NrKCkKICAgICB9Ci0tIAoyLjQ3LjIK CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KcGJzLWRl dmVsIG1haWxpbmcgbGlzdApwYnMtZGV2ZWxAbGlzdHMucHJveG1veC5jb20KaHR0cHM6Ly9saXN0 cy5wcm94bW94LmNvbS9jZ2ktYmluL21haWxtYW4vbGlzdGluZm8vcGJzLWRldmVsCg==