From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <pbs-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 7F2E11FF172 for <inbox@lore.proxmox.com>; Wed, 16 Apr 2025 12:50:52 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id D461C33BA1; Wed, 16 Apr 2025 12:50:50 +0200 (CEST) From: Christian Ebner <c.ebner@proxmox.com> To: pbs-devel@lists.proxmox.com Date: Wed, 16 Apr 2025 12:50:00 +0200 Message-Id: <20250416105000.270166-3-c.ebner@proxmox.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250416105000.270166-1-c.ebner@proxmox.com> References: <20250416105000.270166-1-c.ebner@proxmox.com> MIME-Version: 1.0 X-SPAM-LEVEL: Spam detection results: 0 AWL 0.029 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 URIBL_BLOCKED 0.001 ADMINISTRATOR NOTICE: The query to URIBL was blocked. See http://wiki.apache.org/spamassassin/DnsBlocklists#dnsbl-block for more information. [datastore.rs] Subject: [pbs-devel] [PATCH v5 proxmox-backup 2/2] garbage collection: fix rare race in chunk marking phase X-BeenThere: pbs-devel@lists.proxmox.com X-Mailman-Version: 2.1.29 Precedence: list List-Id: Proxmox Backup Server development discussion <pbs-devel.lists.proxmox.com> List-Unsubscribe: <https://lists.proxmox.com/cgi-bin/mailman/options/pbs-devel>, <mailto:pbs-devel-request@lists.proxmox.com?subject=unsubscribe> List-Archive: <http://lists.proxmox.com/pipermail/pbs-devel/> List-Post: <mailto:pbs-devel@lists.proxmox.com> List-Help: <mailto:pbs-devel-request@lists.proxmox.com?subject=help> List-Subscribe: <https://lists.proxmox.com/cgi-bin/mailman/listinfo/pbs-devel>, <mailto:pbs-devel-request@lists.proxmox.com?subject=subscribe> Reply-To: Proxmox Backup Server development discussion <pbs-devel@lists.proxmox.com> Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: pbs-devel-bounces@lists.proxmox.com Sender: "pbs-devel" <pbs-devel-bounces@lists.proxmox.com> RHVyaW5nIHBoYXNlIDEgb2YgZ2FyYmFnZSBjb2xsZWN0aW9uIHJlZmVyZW5jZWQgY2h1bmtzIGFy ZSBtYXJrZWQgYXMKaW4gdXNlIGJ5IGl0ZXJhdGluZyBvdmVyIGFsbCBpbmRleCBmaWxlcyBhbmQg dXBkYXRpbmcgdGhlIGF0aW1lIG9uCnRoZSBjaHVua3MgcmVmZXJlbmNlZCBieSB0aGVzZS4KCklu IGFuIGVkZ2UgY2FzZSBmb3IgbG9uZyBydW5uaW5nIGdhcmJhZ2UgY29sbGVjdGlvbiBqb2JzLCB3 aGVyZSBhCm5ld2x5IGFkZGVkIHNuYXBzaG90IChjcmVhdGVkIGFmdGVyIHRoZSBzdGFydCBvZiBH QykgcmV1c2VkIGtub3duCmNodW5rcyBmcm9tIGEgcHJldmlvdXMgc25hcHNob3QsIGJ1dCB0aGUg cHJldmlvdXMgc25hcHNob3QgaW5kZXgKcmVmZXJlbmNpbmcgdGhlbSBkaXNhcHBlYXJlZCBiZWZv cmUgdGhlIG1hcmtpbmcgcGhhc2UgY291bGQgcmVhY2gKdGhhdCBpbmRleCAoZS5nLiBwcnVuZWQg YmVjYXVzZSBvbmx5IDEgc25hcHNob3QgdG8gYmUga2VwdCBieQpyZXRlbnRpb24gc2V0dGluZyks IGtub3duIGNodW5rcyBmcm9tIHRoYXQgcHJldmlvdXMgaW5kZXggZmlsZSBtaWdodApub3QgYmUg bWFya2VkIChnaXZlbiB0aGF0IGJ5IG5vbmUgb2YgdGhlIG90aGVyIGluZGV4IGZpbGVzIGl0IHdh cwptYXJrZWQpLgoKU2luY2UgY29tbWl0IDc0MzYxZGE4ICgiZ2FyYmFnZSBjb2xsZWN0aW9uOiBn ZW5lcmF0ZSBpbmRleCBmaWxlIGxpc3QKdmlhIGRhdGFzdG9yZSBpdGVyYXRvcnMiKSB0aGlzIGlz IGV2ZW4gbGVzcyBsaWtlbHkgYXMgbm93IHRoZQppdGVyYXRpb24gcmVhZHMgYWxzbyBpbmRleCBm aWxlcyBhZGRlZCBkdXJpbmcgcGhhc2UgMSwgYW5kCnRoZXJlZm9yZSBlaXRoZXIgdGhlIG5ldyBv ciB0aGUgcHJldmlvdXMgaW5kZXggZmlsZSB3aWxsIGFjY291bnQgZm9yCnRoZXNlIGNodW5rcyAo dGhlIHByZXZpb3VzIGJhY2t1cCBzbmFwc2hvdCBjYW4gb25seSBiZSBwcnVuZWQgYWZ0ZXIKdGhl IG5ldyBvbmUgZmluaXNoZWQsIHNpbmNlIGxvY2tlZCkuIFRoZXJlIHJlbWFpbnMgaG93ZXZlciBh IHNtYWxsCnJhY2Ugd2luZG93IGJldHdlZW4gdGhlIHJlYWRpbmcgb2YgdGhlIHNuYXBzaG90cyBp biB0aGUgYmFja3VwIGdyb3VwCmFuZCB0aGUgcmVhZGluZyBvZiB0aGUgYWN0dWFsIGluZGV4IGZp bGVzIGZvciBtYXJraW5nLgoKRml4IHRoaXMgcmFjZSBieToKMS4gQ2hlY2tpbmcgaWYgdGhlIGxh c3Qgc25hcHNob3Qgb2YgYSBncm91cCBkaXNhcHBlYXJlZCBhbmQgaWYgc28KMi4gZ2VuZXJhdGUg dGhlIGxpc3QgYWdhaW4sIGxvb2tpbmcgZm9yIG5ldyBpbmRleCBmaWxlcyBwcmV2aW91c2x5CiAg IG5vdCBhY2NvdW50ZWQgZm9yCjMuIFRvIGF2b2lkIHBvc3NpYmxlIGVuZGxlc3MgbG9vcGluZywg bG9jayB0aGUgZ3JvdXAgaWYgdGhlIHNuYXBzaG90CiAgIGxpc3QgY2hhbmdlZCBldmVuIGFmdGVy IHRoZSAxMHRoIHRpbWUgKHdoaWNoIHdpbGwgbGVhZCB0bwogICBjb25jdXJyZW50IG9wZXJhdGlv bnMgdG8gdGhpcyBncm91cCBmYWlsaW5nKS4KClNpZ25lZC1vZmYtYnk6IENocmlzdGlhbiBFYm5l ciA8Yy5lYm5lckBwcm94bW94LmNvbT4KQWNrZWQtYnk6IEZhYmlhbiBHcsO8bmJpY2hsZXIgPGYu Z3J1ZW5iaWNobGVyQHByb3htb3guY29tPgotLS0KQ2hhbmdlcyBzaW5jZSB2ZXJzaW9uIDQ6Ci0g QWRhcHQgb3Blbl9pbmRleF9yZWFkZXIgY2FsbCBzaXRlcwotIEZpeCB0eXBvcyBpbiBjb21taXQg bWVzc2FnZSBhbmQgYmFpbCBtZXNzYWdlCgogcGJzLWRhdGFzdG9yZS9zcmMvZGF0YXN0b3JlLnJz IHwgMTE2ICsrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQogMSBmaWxlIGNoYW5nZWQs IDc2IGluc2VydGlvbnMoKyksIDQwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Bicy1kYXRh c3RvcmUvc3JjL2RhdGFzdG9yZS5ycyBiL3Bicy1kYXRhc3RvcmUvc3JjL2RhdGFzdG9yZS5ycwpp bmRleCAzMzNmNWY4ZDIuLjMwOTEzN2UwMCAxMDA2NDQKLS0tIGEvcGJzLWRhdGFzdG9yZS9zcmMv ZGF0YXN0b3JlLnJzCisrKyBiL3Bicy1kYXRhc3RvcmUvc3JjL2RhdGFzdG9yZS5ycwpAQCAtMTE0 NSw1MiArMTE0NSw4OCBAQCBpbXBsIERhdGFTdG9yZSB7CiAgICAgICAgICAgICBsZXQgbmFtZXNw YWNlID0gbmFtZXNwYWNlLmNvbnRleHQoIml0ZXJhdGluZyBuYW1lc3BhY2VzIGZhaWxlZCIpPzsK ICAgICAgICAgICAgIGZvciBncm91cCBpbiBhcmNfc2VsZi5pdGVyX2JhY2t1cF9ncm91cHMobmFt ZXNwYWNlKT8gewogICAgICAgICAgICAgICAgIGxldCBncm91cCA9IGdyb3VwLmNvbnRleHQoIml0 ZXJhdGluZyBiYWNrdXAgZ3JvdXBzIGZhaWxlZCIpPzsKLSAgICAgICAgICAgICAgICBsZXQgbXV0 IHNuYXBzaG90cyA9IGdyb3VwLmxpc3RfYmFja3VwcygpLmNvbnRleHQoImxpc3Rpbmcgc25hcHNo b3RzIGZhaWxlZCIpPzsKLSAgICAgICAgICAgICAgICAvLyBTb3J0IGJ5IHNuYXBzaG90IHRpbWVz dGFtcCB0byBpdGVyYXRlIG92ZXIgY29uc2VjdXRpdmUgc25hcHNob3RzIGZvciBlYWNoIGltYWdl LgotICAgICAgICAgICAgICAgIEJhY2t1cEluZm86OnNvcnRfbGlzdCgmbXV0IHNuYXBzaG90cywg dHJ1ZSk7Ci0gICAgICAgICAgICAgICAgZm9yIHNuYXBzaG90IGluIHNuYXBzaG90cyB7Ci0gICAg ICAgICAgICAgICAgICAgIGZvciBmaWxlIGluIHNuYXBzaG90LmZpbGVzIHsKLSAgICAgICAgICAg ICAgICAgICAgICAgIHdvcmtlci5jaGVja19hYm9ydCgpPzsKLSAgICAgICAgICAgICAgICAgICAg ICAgIHdvcmtlci5mYWlsX29uX3NodXRkb3duKCk/OwotCi0gICAgICAgICAgICAgICAgICAgICAg ICBtYXRjaCBBcmNoaXZlVHlwZTo6ZnJvbV9wYXRoKCZmaWxlKSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgT2soQXJjaGl2ZVR5cGU6OkZpeGVkSW5kZXgpIHwgT2soQXJjaGl2ZVR5cGU6 OkR5bmFtaWNJbmRleCkgPT4gKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2soQXJj aGl2ZVR5cGU6OkJsb2IpIHwgRXJyKF8pID0+IGNvbnRpbnVlLAotICAgICAgICAgICAgICAgICAg ICAgICAgfQotCi0gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbXV0IHBhdGggPSBzbmFwc2hv dC5iYWNrdXBfZGlyLmZ1bGxfcGF0aCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgcGF0aC5w dXNoKGZpbGUpOwogCi0gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSBtYXRjaCBz ZWxmLm9wZW5faW5kZXhfcmVhZGVyKCZwYXRoKT8gewotICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFNvbWUoaW5kZXgpID0+IGluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5v bmUgPT4gewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnByb2Nlc3NlZF9pbmRl eF9saXN0LnJlbW92ZSgmcGF0aCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnRpbnVlOworICAgICAgICAgICAgICAgIC8vIEF2b2lkIHJhY2UgYmV0d2VlbiBsaXN0aW5nL21h cmtpbmcgb2Ygc25hcHNob3RzIGJ5IEdDIGFuZCBwcnVuaW5nIHRoZSBsYXN0CisgICAgICAgICAg ICAgICAgLy8gc25hcHNob3QgaW4gdGhlIGdyb3VwLCBmb2xsb3dpbmcgYSBuZXcgc25hcHNob3Qg Y3JlYXRpb24uIE90aGVyd2lzZSBrbm93biBjaHVua3MKKyAgICAgICAgICAgICAgICAvLyBtaWdo dCBvbmx5IGJlIHJlZmVyZW5jZWQgYnkgdGhlIG5ldyBzbmFwc2hvdCwgc28gaXQgbXVzdCBiZSBy ZWFkIGFzIHdlbGwuCisgICAgICAgICAgICAgICAgbGV0IG11dCByZXRyeV9jb3VudGVyID0gMDsK KyAgICAgICAgICAgICAgICAncmV0cnk6IGxvb3AgeworICAgICAgICAgICAgICAgICAgICBsZXQg X2xvY2sgPSBtYXRjaCByZXRyeV9jb3VudGVyIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIDAu Lj05ID0+IE5vbmUsCisgICAgICAgICAgICAgICAgICAgICAgICAxMCA9PiBTb21lKAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGdyb3VwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIC5sb2NrKCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmNvbnRleHQoImV4 aGF1c3RlZCByZXRyaWVzIGFuZCBmYWlsZWQgdG8gbG9jayBncm91cCIpPywKKyAgICAgICAgICAg ICAgICAgICAgICAgICksCisgICAgICAgICAgICAgICAgICAgICAgICBfID0+IGJhaWwhKCJleGhh dXN0ZWQgcmV0cmllcyBhbmQgdW5leHBlY3RlZCBjb3VudGVyIG92ZXJydW4iKSwKKyAgICAgICAg ICAgICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICBsZXQgbXV0IHNuYXBzaG90cyA9 IG1hdGNoIGdyb3VwLmxpc3RfYmFja3VwcygpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE9r KHNuYXBzaG90cykgPT4gc25hcHNob3RzLAorICAgICAgICAgICAgICAgICAgICAgICAgRXJyKGVy cikgPT4geworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGdyb3VwLmV4aXN0cygpIHsK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVycihlcnIpLmNvbnRleHQo Imxpc3Rpbmcgc25hcHNob3RzIGZhaWxlZCIpPzsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICB9OwotICAgICAgICAgICAgICAgICAgICAgICAg c2VsZi5pbmRleF9tYXJrX3VzZWRfY2h1bmtzKAotICAgICAgICAgICAgICAgICAgICAgICAgICAg IGluZGV4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICZwYXRoLAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICZtdXQgY2h1bmtfbHJ1X2NhY2hlLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0YXR1cywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXIsCi0g ICAgICAgICAgICAgICAgICAgICAgICApPzsKLQotICAgICAgICAgICAgICAgICAgICAgICAgaWYg IXVucHJvY2Vzc2VkX2luZGV4X2xpc3QucmVtb3ZlKCZwYXRoKSB7Ci0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW5mbyEoIkVuY291bnRlcmVkIG5ldyBpbmRleCBmaWxlICd7cGF0aDo/fScs IGluY3JlbWVudCB0b3RhbCBpbmRleCBmaWxlIGNvdW50Iik7Ci0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW5kZXhfY291bnQgKz0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi cmVhayAncmV0cnk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg ICAgIH07CisKKyAgICAgICAgICAgICAgICAgICAgLy8gQWx3YXlzIHN0YXJ0IGl0ZXJhdGlvbiB3 aXRoIHRoZSBsYXN0IHNuYXBzaG90IG9mIHRoZSBncm91cCB0byByZWR1Y2UgcmFjZQorICAgICAg ICAgICAgICAgICAgICAvLyB3aW5kb3cgd2l0aCBjb25jdXJyZW50IGJhY2t1cCtwcnVuZSBwcmV2 aW91cyBsYXN0IHNuYXBzaG90LiBBbGxvd3MgdG8gcmV0cnkKKyAgICAgICAgICAgICAgICAgICAg Ly8gd2l0aG91dCB0aGUgbmVlZCB0byBrZWVwIHRyYWNrIG9mIGFscmVhZHkgcHJvY2Vzc2VkIGlu ZGV4IGZpbGVzIGZvciB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gY3VycmVudCBncm91cC4K KyAgICAgICAgICAgICAgICAgICAgQmFja3VwSW5mbzo6c29ydF9saXN0KCZtdXQgc25hcHNob3Rz LCB0cnVlKTsKKyAgICAgICAgICAgICAgICAgICAgZm9yIChjb3VudCwgc25hcHNob3QpIGluIHNu YXBzaG90cy5pbnRvX2l0ZXIoKS5yZXYoKS5lbnVtZXJhdGUoKSB7CisgICAgICAgICAgICAgICAg ICAgICAgICBmb3IgZmlsZSBpbiBzbmFwc2hvdC5maWxlcyB7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgd29ya2VyLmNoZWNrX2Fib3J0KCk/OworICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHdvcmtlci5mYWlsX29uX3NodXRkb3duKCk/OworCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbWF0Y2ggQXJjaGl2ZVR5cGU6OmZyb21fcGF0aCgmZmlsZSkgeworICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBPayhBcmNoaXZlVHlwZTo6Rml4ZWRJbmRleCkgfCBPayhBcmNo aXZlVHlwZTo6RHluYW1pY0luZGV4KSA9PiAoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgT2soQXJjaGl2ZVR5cGU6OkJsb2IpIHwgRXJyKF8pID0+IGNvbnRpbnVlLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHBl cmNlbnRhZ2UgPSAocHJvY2Vzc2VkX2luZGV4X2ZpbGVzICsgMSkgKiAxMDAgLyBpbmRleF9jb3Vu dDsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBlcmNlbnRhZ2UgPiBsYXN0X3BlcmNlbnRh Z2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZm8hKAotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAibWFya2VkIHtwZXJjZW50YWdlfSUgKHt9IG9mIHtpbmRleF9jb3Vu dH0gaW5kZXggZmlsZXMpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vz c2VkX2luZGV4X2ZpbGVzICsgMSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwotICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RfcGVyY2VudGFnZSA9IHBlcmNlbnRhZ2U7Cisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG11dCBwYXRoID0gc25hcHNob3QuYmFja3Vw X2Rpci5mdWxsX3BhdGgoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoLnB1c2go ZmlsZSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSBtYXRjaCBz ZWxmLm9wZW5faW5kZXhfcmVhZGVyKCZwYXRoKT8geworICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBTb21lKGluZGV4KSA9PiBpbmRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgTm9uZSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnBy b2Nlc3NlZF9pbmRleF9saXN0LnJlbW92ZSgmcGF0aCk7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBpZiBjb3VudCA9PSAwIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZXRyeV9jb3VudGVyICs9IDE7CisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29udGludWUgJ3JldHJ5OworICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u dGludWU7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbmRl eF9tYXJrX3VzZWRfY2h1bmtzKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRl eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnBhdGgsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZtdXQgY2h1bmtfbHJ1X2NhY2hlLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdGF0dXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHdvcmtlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICApPzsKKworICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGlmICF1bnByb2Nlc3NlZF9pbmRleF9saXN0LnJlbW92ZSgmcGF0aCkg eworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvISgiRW5jb3VudGVyZWQgbmV3 IGluZGV4IGZpbGUgJ3twYXRoOj99JywgaW5jcmVtZW50IHRvdGFsIGluZGV4IGZpbGUgY291bnQi KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5kZXhfY291bnQgKz0gMTsKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBsZXQgcGVyY2VudGFnZSA9IChwcm9jZXNzZWRfaW5kZXhfZmlsZXMgKyAxKSAqIDEwMCAvIGlu ZGV4X2NvdW50OworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHBlcmNlbnRhZ2UgPiBs YXN0X3BlcmNlbnRhZ2UgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvISgK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXJrZWQge3BlcmNlbnRhZ2V9 JSAoe30gb2Yge2luZGV4X2NvdW50fSBpbmRleCBmaWxlcykiLAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkX2luZGV4X2ZpbGVzICsgMSwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg bGFzdF9wZXJjZW50YWdlID0gcGVyY2VudGFnZTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICB9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2VkX2luZGV4X2ZpbGVzICs9 IDE7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgICAgICBw cm9jZXNzZWRfaW5kZXhfZmlsZXMgKz0gMTsKICAgICAgICAgICAgICAgICAgICAgfQorCisgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K ICAgICAgICAgfQotLSAKMi4zOS41CgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCnBicy1kZXZlbCBtYWlsaW5nIGxpc3QKcGJzLWRldmVsQGxpc3RzLnBy b3htb3guY29tCmh0dHBzOi8vbGlzdHMucHJveG1veC5jb20vY2dpLWJpbi9tYWlsbWFuL2xpc3Rp bmZvL3Bicy1kZXZlbAo=