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 [212.224.123.68]) by lore.proxmox.com (Postfix) with ESMTPS id 1441C1FF16F for <inbox@lore.proxmox.com>; Tue, 15 Apr 2025 15:14:45 +0200 (CEST) Received: from firstgate.proxmox.com (localhost [127.0.0.1]) by firstgate.proxmox.com (Proxmox) with ESMTP id CB18B84BD; Tue, 15 Apr 2025 15:14:43 +0200 (CEST) Date: Tue, 15 Apr 2025 15:14:06 +0200 From: Fabian =?iso-8859-1?q?Gr=FCnbichler?= <f.gruenbichler@proxmox.com> To: Christian Ebner <c.ebner@proxmox.com>, Proxmox Backup Server development discussion <pbs-devel@lists.proxmox.com> References: <20250415105416.215805-1-c.ebner@proxmox.com> <1744715646.ixpklno696.astroid@yuna.none> <574477eb-b29a-44d3-91de-e69b69c20607@proxmox.com> In-Reply-To: <574477eb-b29a-44d3-91de-e69b69c20607@proxmox.com> MIME-Version: 1.0 User-Agent: astroid/0.16.0 (https://github.com/astroidmail/astroid) Message-Id: <1744722423.8wkc6bykj9.astroid@yuna.none> X-SPAM-LEVEL: Spam detection results: 0 AWL 0.045 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 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. [datastore.rs] Subject: Re: [pbs-devel] [PATCH v2 proxmox-backup] 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> T24gQXByaWwgMTUsIDIwMjUgMjo1MCBwbSwgQ2hyaXN0aWFuIEVibmVyIHdyb3RlOgo+IE9uIDQv MTUvMjUgMTM6NDIsIEZhYmlhbiBHcsO8bmJpY2hsZXIgd3JvdGU6Cj4+IE9uIEFwcmlsIDE1LCAy MDI1IDEyOjU0IHBtLCBDaHJpc3RpYW4gRWJuZXIgd3JvdGU6Cj4+PiBEdXJpbmcgcGhhc2UgMSBv ZiBnYXJiYWdlIGNvbGxlY3Rpb24gcmVmZXJlbmNlZCBjaHVua3MgYXJlIG1hcmtlZCBhcwo+Pj4g aW4gdXNlIGJ5IGl0ZXJhdGluZyBvdmVyIGFsbCBpbmRleCBmaWxlcyBhbmQgdXBkYXRpbmcgdGhl IGF0aW1lIG9uCj4+PiB0aGUgY2h1bmtzIHJlZmVyZW5jZWQgYnkgdGhlc2UuCj4+Pgo+Pj4gSW4g YW4gZWRnZSBjYXNlIGZvciBsb25nIHJ1bm5pbmcgZ2FyYmFnZSBjb2xsZWN0aW9uIGpvYnMsIHdo ZXJlIGEKPj4+IG5ld2x5IGFkZGVkIHNuYXBzaG90IChjcmVhdGVkIGFmdGVyIHRoZSBzdGFydCBv ZiBHQykgcmV1c2VkIGtub3duCj4+PiBjaHVua3MgZnJvbSBhIHByZXZpb3VzIHNuYXBzaG90LCBi dXQgdGhlIHByZXZpb3VzIHNuYXBzaG90IGluZGV4Cj4+PiByZWZlcmVuY2luZyB0aGVtIGRpc2Fw cGVhcmVkIGJlZm9yZSB0aGUgbWFya2luZyBwaGFzZSBjb3VsZCByZWFjaAo+Pj4gdGhhdCBpbmRl eCAoZS5nLiBwcnVuZWQgYmVjYXVzZSBvbmx5IDEgc25hcHNob3QgdG8gYmUga2VwdCBieQo+Pj4g cmV0ZW50aW9uIHNldHRpbmcpLCBrbm93biBjaHVua3MgZnJvbSB0aGF0IHByZXZpb3VzIGluZGV4 IGZpbGUgbWlnaHQKPj4+IG5vdCBiZSBtYXJrZWQgKGdpdmVuIHRoYXQgYnkgbm9uZSBvZiB0aGUg b3RoZXIgaW5kZXggZmlsZXMgaXQgd2FzCj4+PiBtYXJrZWQpLgo+Pj4KPj4+IFNpbmNlIGNvbW1p dCA3NDM2MWRhOCAoImdhcmJhZ2UgY29sbGVjdGlvbjogZ2VuZXJhdGUgaW5kZXggZmlsZSBsaXN0 Cj4+PiB2aWEgZGF0YXN0b3JlIGl0ZXJhdG9ycyIpIHRoaXMgaXMgZXZlbiBsZXNzIGxpa2VseSBh cyBub3cgdGhlCj4+PiBpdGVyYXRpb24gcmVhZHMgYWxzbyBpbmRleCBmaWxlcyBhZGRlZCBkdXJp bmcgcGhhc2UgMSwgYW5kCj4+PiB0aGVyZWZvcmUgZWl0aGVyIHRoZSBuZXcgb3IgdGhlIHByZXZp b3VzIGluZGV4IGZpbGUgd2lsbCBhY2NvdW50IGZvcgo+Pj4gdGhlc2UgY2h1bmtzICh0aGUgcHJl dmlvdXMgYmFja3VwIHNuYXBzaG90IGNhbiBvbmx5IGJlIHBydW5kZWQgYWZ0ZXIKPj4+IHRoZSBu ZXcgb25lIGZpbmlzaGVkLCBzaW5jZSBsb2NrZWQpLiBUaGVyZSByZW1haW5zIGhvd2V2ZXIgYSBz bWFsbAo+Pj4gcmFjZSB3aW5kb3cgYmV0d2VlbiB0aGUgcmVhZGluZyBvZiB0aGUgc25hcHNob3Rz IGluIHRoZSBiYWNrdXAgZ3JvdXAKPj4+IGFuZCB0aGUgcmVhZGluZyBvZiB0aGUgYWN0dWFsIGlu ZGV4IGZpbGVzIGZvciBtYXJraW5nLgo+Pj4KPj4+IEZpeCB0aGlzIHJhY2UgYnk6Cj4+PiAxLiBD aGVja2luZyBpZiB0aGUgbGFzdCBzbmFwc2hvdCBvZiBhIGdyb3VwIGRpc2FwcGVhcmVkIGFuZCBp ZiBzbwo+Pj4gMi4gZ2VuZXJhdGUgdGhlIGxpc3QgYWdhaW4sIGxvb2tpbmcgZm9yIG5ldyBpbmRl eCBmaWxlcyBwcmV2aW91c2x5Cj4+PiAgICAgbm90IGFjY291bnRlZCBmb3IKPj4+IDMuIFRvIGF2 b2lkIHBvc3NpYmxlIGVuZGxlc3MgbG9vcGluZywgbG9jayB0aGUgZ3JvdXAgaWYgdGhlIHNuYXBz aG90Cj4+PiAgICAgbGlzdCBjaGFuZ2VkIGV2ZW4gYWZ0ZXIgdGhlIDEwdGggdGltZSAod2hpY2gg d2lsbCBsZWFkIHRvCj4+PiAgICAgY29uY3VycmVudCBvcGVyYXRpb25zIHRvIHRoaXMgZ3JvdXAg ZmFpbGluZykuCj4+Pgo+Pj4gU2lnbmVkLW9mZi1ieTogQ2hyaXN0aWFuIEVibmVyIDxjLmVibmVy QHByb3htb3guY29tPgo+Pj4gLS0tCj4+PiBjaGFuZ2VzIHNpbmNlIHZlcnNpb24gMToKPj4+IC0g cmViYXNlZCBvbnRvIGN1cnJlbnQgbWFzdGVyCj4+Pgo+Pj4gICBwYnMtZGF0YXN0b3JlL3NyYy9k YXRhc3RvcmUucnMgfCAxMTAgKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tCj4+PiAg IDEgZmlsZSBjaGFuZ2VkLCA3NCBpbnNlcnRpb25zKCspLCAzNiBkZWxldGlvbnMoLSkKPj4+Cj4+ PiBkaWZmIC0tZ2l0IGEvcGJzLWRhdGFzdG9yZS9zcmMvZGF0YXN0b3JlLnJzIGIvcGJzLWRhdGFz dG9yZS9zcmMvZGF0YXN0b3JlLnJzCj4+PiBpbmRleCBhYTM4ZTJhYzEuLjc4OGRiZjIxMiAxMDA2 NDQKPj4+IC0tLSBhL3Bicy1kYXRhc3RvcmUvc3JjL2RhdGFzdG9yZS5ycwo+Pj4gKysrIGIvcGJz LWRhdGFzdG9yZS9zcmMvZGF0YXN0b3JlLnJzCj4+PiBAQCAtMTE0Myw0NyArMTE0Myw4NSBAQCBp bXBsIERhdGFTdG9yZSB7Cj4+PiAgICAgICAgICAgICAgIGxldCBuYW1lc3BhY2UgPSBuYW1lc3Bh Y2UuY29udGV4dCgiaXRlcmF0aW5nIG5hbWVzcGFjZXMgZmFpbGVkIik/Owo+Pj4gICAgICAgICAg ICAgICBmb3IgZ3JvdXAgaW4gYXJjX3NlbGYuaXRlcl9iYWNrdXBfZ3JvdXBzKG5hbWVzcGFjZSk/ IHsKPj4+ICAgICAgICAgICAgICAgICAgIGxldCBncm91cCA9IGdyb3VwLmNvbnRleHQoIml0ZXJh dGluZyBiYWNrdXAgZ3JvdXBzIGZhaWxlZCIpPzsKPj4gCj4+IHByZS1leGlzdGluZy91bnJlbGF0 ZWQgLSB3aGF0IGlmIHRoZSBncm91cCBnb3QgcHJ1bmVkIGF0IHRoZSByaWdodAo+PiBtb21lbnQg aGVyZT8gc2hvdWxkIHdlIG1heWJlIHJlY2hlY2sgdGhhdCBpdCBleGlzdHMgYW5kIGlnbm9yZSB0 aGUgZXJyb3IKPj4gaW4gdGhhdCBjYXNlPwo+IAo+IEhtbSwgdGhhdCdzIHJpZ2h0Li4uIFNhbWUg cHJvYmFibHkgYXBwbGllcyB0byB0aGUgbmFtZXNwYWNlIGl0ZXJhdGlvbiAKPiBhYm92ZSBhcyB3 ZWxsLi4uCj4gQnV0IEknbSBub3Qgc3VyZSB3ZSBzaG91bGQgY2hlY2sgaWYgdGhlIGdyb3VwIGV4 aXN0cyBhbmQgaWdub3JlPyBXaGF0J3MgCj4geW91ciByZWFzb25pbmcgaGVyZT8gQXMgZmFyIGFz IEkgc2VlIHRoZSB3aG9sZSBzdGF0ZSBvZiB0aGUgaXRlcmF0b3IgCj4gYm9pbHMgZG93biB0byB0 aGUgcmVhZGRpcl9yKCkgY2FsbHMgaW4gbml4OjpkaXI6Okl0ZXI6Om5leHQoKSwgYnV0IG5vdCAK PiBzdXJlIHdoYXQgc3RhdGUgb25lIGlzIGxvb2tpbmcgYXQgYXQgdGhhdCBtb21lbnQuCgpteSBy ZWFzb25pbmcgd2FzIHRoYXQgd2Ugbm93IGNoYW5nZWQgdGhlIGJlaGF2aW91ciBzbyB0aGF0IGdy b3VwcyBhcmUKY29tcGxldGVseSByZW1vdmVkIGlmIHRoZSBsYXN0IHNuYXBzaG90IGlzIHJlbW92 ZWQsIHNvIGlmIHRoYXQgaGFwcGVucwp3aGlsZSBpdGVyYXRpbmcgaXQgd291bGQgYWJvcnQgdGhl IHdob2xlIEdDLi4gYnV0IHRoYXQgcHJvYmFibHkgYXBwbGllcwptb3JlIHRvIHRoZSBsaXN0X2Jh Y2t1cHMgY2FsbCBiZWxvdywgYW5kIG5vdCB0byB0aGUgZ3JvdXAgaXRlcmF0b3IKaGVyZS4uCgpm b3IgbmFtZXNwYWNlcyBJJ2QgYmUgYSBiaXQgbGVzcyB3b3JyaWVkLCBhcyBkZWxldGluZyB0aGVt IHdoaWxlIGEgR0MgaXMKcnVubmluZyBhbmQgaGl0dGluZyBhIGNvbmZsaWN0IHNob3VsZCBiZSBh IGZhaXJseSByYXJlIG9jY3VycmVuY2UuLgoKPiAKPj4gCj4+PiAtICAgICAgICAgICAgICAgIGxl dCBtdXQgc25hcHNob3RzID0gZ3JvdXAubGlzdF9iYWNrdXBzKCkuY29udGV4dCgibGlzdGluZyBz bmFwc2hvdHMgZmFpbGVkIik/Owo+Pj4gLSAgICAgICAgICAgICAgICAvLyBTb3J0IGJ5IHNuYXBz aG90IHRpbWVzdGFtcCB0byBpdGVyYXRlIG92ZXIgY29uc2VjdXRpdmUgc25hcHNob3RzIGZvciBl YWNoIGltYWdlLgo+Pj4gLSAgICAgICAgICAgICAgICBCYWNrdXBJbmZvOjpzb3J0X2xpc3QoJm11 dCBzbmFwc2hvdHMsIHRydWUpOwo+Pj4gLSAgICAgICAgICAgICAgICBmb3Igc25hcHNob3QgaW4g c25hcHNob3RzIHsKPj4+IC0gICAgICAgICAgICAgICAgICAgIGZvciBmaWxlIGluIHNuYXBzaG90 LmZpbGVzIHsKPj4+IC0gICAgICAgICAgICAgICAgICAgICAgICB3b3JrZXIuY2hlY2tfYWJvcnQo KT87Cj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyLmZhaWxfb25fc2h1dGRvd24o KT87Cj4+PiAtCj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG11dCBwYXRoID0gc25h cHNob3QuYmFja3VwX2Rpci5mdWxsX3BhdGgoKTsKPj4+IC0gICAgICAgICAgICAgICAgICAgICAg ICBwYXRoLnB1c2goZmlsZSk7Cj4+PiAtCj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgbGV0 IGluZGV4ID0gbWF0Y2ggc2VsZi5vcGVuX2luZGV4X3JlYWRlcigmcGF0aCk/IHsKPj4+IC0gICAg ICAgICAgICAgICAgICAgICAgICAgICAgU29tZShpbmRleCkgPT4gaW5kZXgsCj4+PiAtICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE5vbmUgPT4gewo+Pj4gLSAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdW5wcm9jZXNzZWRfaW5kZXhfbGlzdC5yZW1vdmUoJnBhdGgpOwo+Pj4gKwo+ Pj4gKyAgICAgICAgICAgICAgICAvLyBBdm9pZCByYWNlIGJldHdlZW4gbGlzdGluZy9tYXJraW5n IG9mIHNuYXBzaG90cyBieSBHQyBhbmQgcHJ1bmluZyB0aGUgbGFzdAo+Pj4gKyAgICAgICAgICAg ICAgICAvLyBzbmFwc2hvdCBpbiB0aGUgZ3JvdXAsIGZvbGxvd2luZyBhIG5ldyBzbmFwc2hvdCBj cmVhdGlvbi4gT3RoZXJ3aXNlIGtub3duIGNodW5rcwo+Pj4gKyAgICAgICAgICAgICAgICAvLyBt aWdodCBvbmx5IGJlIHJlZmVyZW5jZWQgYnkgdGhlIG5ldyBzbmFwc2hvdCwgc28gaXQgbXVzdCBi ZSByZWFkIGFzIHdlbGwuCj4+PiArICAgICAgICAgICAgICAgIGxldCBtdXQgcmV0cnlfY291bnRl ciA9IDA7Cj4+PiArICAgICAgICAgICAgICAgIGxldCBtdXQgcHJvY2Vzc2VkX2dyb3VwX2luZGlj ZXMgPSBIYXNoU2V0OjpuZXcoKTsKPj4+ICsgICAgICAgICAgICAgICAgbGV0IG11dCBuZWVkc19y ZXRyeTsKPj4gCj4+IEkgZG9uJ3QgdGhpbmsgd2UgbmVlZCB0aGlzIHZhcmlhYmxlIChzZWUgYmVs b3cpCj4gCj4gQWNrZWQKPiAKPj4gCj4+PiArICAgICAgICAgICAgICAgIGxvb3Agewo+Pj4gKyAg ICAgICAgICAgICAgICAgICAgbmVlZHNfcmV0cnkgPSBmYWxzZTsKPj4+ICsgICAgICAgICAgICAg ICAgICAgIGxldCBfbG9jayA9IGlmIHJldHJ5X2NvdW50ZXIgPT0gMTAgewo+Pj4gKyAgICAgICAg ICAgICAgICAgICAgICAgIC8vIExhc3QgcmVzb3J0LCBleGNsdXNpdmVseSBsb2NrIHRoZSBiYWNr dXAgZ3JvdXAgdG8gbWFrZSBzdXJlIG5vIG5ldwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAg IC8vIGJhY2t1cHMgY2FuIGJlIHdyaXR0ZW4uIFRoaXMgd2lsbCBvbmx5IHRyaWdnZXIgaWYgbm9u ZSBvZiB0aGUgcHJldmlvdXMKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAvLyByZXRyaWVz IGNvbnZlcmdlZCBzdWNjZXNzZnVsbHksIHdoaWNoIGlzIHZlcnkgdW5saWtlbHkuCj4+PiArICAg ICAgICAgICAgICAgICAgICAgICAgU29tZShncm91cC5sb2NrKCkpCj4+IAo+PiB0aGlzIHNob3Vs ZCBjaGVjayB0aGUgcmVzdWx0PyB0aGlzIHdvdWxkIGFsc28gZmFpbCBpZiBhIGJhY2t1cCBpcwo+ PiBjdXJyZW50bHkgZ29pbmcgb24gKHZlcnkgbGlrZWx5IGlmIHdlIGVuZCB1cCBoZXJlPykgYW5k IGFib3J0IHRoZSBHQwo+PiB0aGVuLCBidXQgd2UgZG9uJ3QgaGF2ZSBhIHdheSB0byBsb2NrIGEg Z3JvdXAgd2l0aCBhIHRpbWVvdXQgYXQgdGhlCj4+IG1vbWVudC4uIGJ1dCBtYXliZSB3ZSBjYW4g d2FpdCBhbmQgc2VlIGlmIHVzZXJzIGFjdHVhbGx5IHJ1biBpbnRvIHRoYXQsCj4+IHdlIGNhbiBh bHdheXMgZXh0ZW5kIHRoZSBsb2NraW5nIGludGVyZmFjZSB0aGVuLi4KPiAKPiBUcnVlLCBidXQg c2luY2UgdGhpcyBpcyB2ZXJ5IHVubGlrZWx5IHRvIGhhcHBlbiwgSSB3b3VsZCBvcHQgdG8gZmFp bCBhbmQgCj4gYWRkIGFuIGVycm9yIGNvbnRleHQgaGVyZSBzbyB0aGlzIGNhbiBlYXNpbHkgYmUg dHJhY2VkIGJhY2sgdG8gdGhpcyBjb2RlIAo+IHBhdGguCgp5ZXMsIGZvciBub3cgSSdkIHNheSBh Ym9ydGluZyBHQyB3aXRoIGEgY2xlYXIgZXJyb3IgaGVyZSBpcyBiZXN0LiB3ZQpjYW5ub3Qgc2Fm ZWx5IGNvbnRpbnVlLi4KCj4gCj4+IAo+PiB3ZSBzaG91bGQgcHJvYmFibHkgYWxzbyBhYm9ydCBp ZiB3ZSBldmVyIGhpdCBhIHJldHJ5X2NvdW50ZXIgPiAxMCwgc2luY2UKPj4gdGhhdCB3b3VsZCBt ZWFuIHdlIG1pc3NlZCBzb21lIGJ1ZyBhbmQgdGhpcyBjb3VsZCBsb29wIGZvcmV2ZXIuLgo+IAo+ IEFoIHllcywgZ29vZCBwb2ludCEgV2lsbCBhZGQgYSBiYWlsIGZvciB0aGF0IGNhc2UuCj4gCj4+ IAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKPj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICBOb25lCj4+PiArICAgICAgICAgICAgICAgICAgICB9Owo+Pj4gKwo+Pj4gKyAgICAg ICAgICAgICAgICAgICAgbGV0IG11dCBzbmFwc2hvdHMgPSBncm91cC5saXN0X2JhY2t1cHMoKS5j b250ZXh0KCJsaXN0aW5nIHNuYXBzaG90cyBmYWlsZWQiKT87Cj4+IAo+PiBzYW1lIHF1ZXN0aW9u IGFzIGFib3ZlIGFwcGxpZXMgaGVyZSBhcyB3ZWxsIC0gd2hhdCBpZiB0aGUgd2hvbGUgZ3JvdXAg dmFuaXNoZWQ/Cj4gCj4gQWNrZWQsIG11c3QgY2hlY2sKCnNlZSBhYm92ZSAtIHRoaXMgaXMgcHJv YmFibHkgdGhlIHJlbGV2YW50IHBhcnQgZm9yIGRpc2FwcGVhcmluZyBncm91cHMuCgo+IAo+PiAK Pj4+ICsgICAgICAgICAgICAgICAgICAgIGxldCBzbmFwc2hvdF9jb3VudCA9IHNuYXBzaG90cy5s ZW4oKTsKPj4+ICsgICAgICAgICAgICAgICAgICAgIC8vIFNvcnQgYnkgc25hcHNob3QgdGltZXN0 YW1wIHRvIGl0ZXJhdGUgb3ZlciBjb25zZWN1dGl2ZSBzbmFwc2hvdHMgZm9yIGVhY2ggc25hcHNo b3QuCj4+IAo+PiB0aGlzIGNvbW1lbnQgbWFrZXMgbm8gc2Vuc2UgOykKPj4gCj4+IC8vIGl0ZXJh dGUgb3ZlciBzb3J0ZWQgc25hcHNob3RzIHRvIGJlbmVmaXQgZnJvbSBjaHVuayBjYWNoaW5nCj4+ IAo+PiBvciBzb21ldGhpbmcgbGlrZSB0aGlzPyBpZiB3ZSB3YW50IHRvIGtlZXAgdGhlIGNvbW1l bnQgYXQgYWxsLi4KPiAKPiB5ZWFoLCBpbmNvcnJlY3RseSBhZGFwdGVkIHRoZSBwcmUtZXhpc3Rp bmcgb25lIGhlcmUsIGJ1dCB0aGlzIGRvZXMgbm90IAo+IGdpdmUgbXVjaCBpbnNpZ2h0LCBzbyBs ZXRzIGRyb3AgaXQuCj4gCj4+IAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgQmFja3VwSW5mbzo6 c29ydF9saXN0KCZtdXQgc25hcHNob3RzLCB0cnVlKTsKPj4+ICsgICAgICAgICAgICAgICAgICAg IGZvciAoY291bnQsIHNuYXBzaG90KSBpbiBzbmFwc2hvdHMuaW50b19pdGVyKCkuZW51bWVyYXRl KCkgewo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgIGZvciBmaWxlIGluIHNuYXBzaG90LmZp bGVzIHsKPj4gCj4+IHNuYXBzaG90LmZpbGVzIGFsc28gaW5jbHVkZXMgYmxvYnMsIHNob3VsZCB3 ZSBmaWx0ZXIgdGhlbSBoZXJlIHRvIGF2b2lkCj4+IHByb2JsZW1zIGlmIHdlIGFkYXB0IGJlbG93 IHRvIGhhbmRsZSBwYXJ0aWFsL29uZ29pbmcgcHJ1bmluZz8KPiAKPiBZZXMsIG1pZ2h0IGJlIGJl dHRlciB0byBleGNsdWRlIHRoZXNlIGF0IHRoaXMgcG9pbnQgYWxyZWFkeS4KPiAKPj4gCj4+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlci5jaGVja19hYm9ydCgpPzsKPj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgd29ya2VyLmZhaWxfb25fc2h1dGRvd24oKT87Cj4+ PiArCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBtdXQgcGF0aCA9IHNuYXBz aG90LmJhY2t1cF9kaXIuZnVsbF9wYXRoKCk7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHBhdGgucHVzaChmaWxlKTsKPj4+ICsKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgLy8gQXZvaWQgcmVwcm9jZXNzaW5nIG9mIGFscmVhZHkgc2VlbiBpbmRleCBmaWxlcyBvbiBy ZXRyeQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiByZXRyeV9jb3VudGVyID4g MCAmJiBwcm9jZXNzZWRfZ3JvdXBfaW5kaWNlcy5jb250YWlucygmcGF0aCkgewo+Pj4gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+Pj4gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfQo+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgIH07Cj4+PiAtICAg ICAgICAgICAgICAgICAgICAgICAgc2VsZi5pbmRleF9tYXJrX3VzZWRfY2h1bmtzKAo+Pj4gLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRleCwKPj4+IC0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgJnBhdGgsCj4+PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgICZtdXQgY2h1 bmtfbHJ1X2NhY2hlLAo+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsCj4+ PiAtICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdvcmtlciwKPj4+IC0gICAgICAgICAgICAg ICAgICAgICAgICApPzsKPj4+IC0KPj4+IC0gICAgICAgICAgICAgICAgICAgICAgICBpZiAhdW5w cm9jZXNzZWRfaW5kZXhfbGlzdC5yZW1vdmUoJnBhdGgpIHsKPj4+IC0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW5mbyEoIkVuY291bnRlcmVkIG5ldyBpbmRleCBmaWxlICd7cGF0aDo/fScs IGluY3JlbWVudCB0b3RhbCBpbmRleCBmaWxlIGNvdW50Iik7Cj4+PiAtICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGluZGV4X2NvdW50ICs9IDE7Cj4+PiAtICAgICAgICAgICAgICAgICAgICAg ICAgfQo+Pj4gICAKPj4+IC0gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcGVyY2VudGFnZSA9 IChwcm9jZXNzZWRfaW5kZXhfZmlsZXMgKyAxKSAqIDEwMCAvIGluZGV4X2NvdW50Owo+Pj4gLSAg ICAgICAgICAgICAgICAgICAgICAgIGlmIHBlcmNlbnRhZ2UgPiBsYXN0X3BlcmNlbnRhZ2Ugewo+ Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmZvISgKPj4+IC0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICJtYXJrZWQge3BlcmNlbnRhZ2V9JSAoe30gb2Yge2luZGV4X2Nv dW50fSBpbmRleCBmaWxlcykiLAo+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cHJvY2Vzc2VkX2luZGV4X2ZpbGVzICsgMSwKPj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgKTsKPj4+IC0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGFzdF9wZXJjZW50YWdlID0g cGVyY2VudGFnZTsKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0g bWF0Y2ggc2VsZi5vcGVuX2luZGV4X3JlYWRlcigmcGF0aCk/IHsKPj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFNvbWUoaW5kZXgpID0+IGluZGV4LAo+Pj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgTm9uZSA9PiB7Cj4+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaWYgY291bnQgKyAxID09IHNuYXBzaG90X2NvdW50Cj4+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmICFzbmFwc2hvdC5iYWNrdXBfZGly LmZ1bGxfcGF0aCgpLmV4aXN0cygpCj4+IAo+PiB3aGF0IGlmIHRoZSBzbmFwc2hvdCBkaXIgc3Rp bGwgZXhpc3RzLCBidXQgdGhlIGluZGV4IGRvZXNuJ3Q/IHdvdWxkbid0Cj4+IHRoYXQgYWxzbyBi ZSBwcm9ibGVtYXRpYz8gSSB0aGluayB3ZSBzaG91bGQgcHJvYmFibHkgc3RhcnQgdGhlIGxvb3Ag b3Zlcgo+PiBhcyBzb29uIGFzIHNvbWV0aGluZyB1bmV4cGVjdGVkIGlzIGdvaW5nIG9uIHdpdGgg dGhlIGxhc3Qgc25hcHNob3Qgb2YKPj4gdGhlIGdyb3VwLi4KPiAKPiBBZ3JlZWQsIHBydW5pbmcg c2hvdWxkIHJlbW92ZSB0aGUgZGlyZWN0b3J5IGFzIGEgd2hvbGUgYnV0IGxldCdzIGJlIAo+IGNv bnNlcnZhdGl2ZSBoZXJlIHRvIGNvdmVyIGluY29uc2lzdGVudCBzdGF0ZXMgYXMgd2VsbC4KPiAK Pj4gCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgewo+Pj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZWVkc19yZXRyeSA9IHRydWU7Cj4+ IAo+PiBzaW5jZSB0aGlzIGlzIHRoZSBvbmx5IHRpbWUgd2Ugc2V0IGl0IHRvIHRydWUsIGFuZCBh dCB0aGlzIHBvaW50IHdlCj4+IGNvdWxkIGp1c3Qgc3RhcnQgYW5vdGhlciBpdGVyYXRpb24gb2Yg dGhlIG91dGVyIGxvb3AgdmlhIGxhYmVsZWQKPj4gY29udGludWU/Cj4gCj4gQWgsIHllcyB0aGF0 J3MgaW5kZWVkIGJldHRlciwgdGh4IQo+IAo+PiAKPj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5wcm9jZXNzZWRfaW5kZXhfbGlzdC5yZW1vdmUoJnBhdGgpOwo+PiAKPj4gdGhpcyBjb3VsZCBt b3ZlIGFib3ZlIHRoZSBpZiB0aGVuCj4gCj4gQWNrZWQKPiAKPj4gCj4+PiArICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7Cj4+PiArICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB9Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07Cj4+PiAr ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGYuaW5kZXhfbWFya191c2VkX2NodW5rcygK Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGluZGV4LAo+Pj4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJnBhdGgsCj4+PiArICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAmbXV0IGNodW5rX2xydV9jYWNoZSwKPj4+ICsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0YXR1cywKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHdvcmtlciwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgKT87Cj4+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZF9ncm91cF9pbmRpY2VzLmluc2VydChwYXRo LmNsb25lKCkpOwo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAhdW5w cm9jZXNzZWRfaW5kZXhfbGlzdC5yZW1vdmUoJnBhdGgpIHsKPj4+ICsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGluZm8hKCJFbmNvdW50ZXJlZCBuZXcgaW5kZXggZmlsZSAne3BhdGg6 P30nLCBpbmNyZW1lbnQgdG90YWwgaW5kZXggZmlsZSBjb3VudCIpOwo+Pj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW5kZXhfY291bnQgKz0gMTsKPj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBs ZXQgcGVyY2VudGFnZSA9IChwcm9jZXNzZWRfaW5kZXhfZmlsZXMgKyAxKSAqIDEwMCAvIGluZGV4 X2NvdW50Owo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBwZXJjZW50YWdlID4g bGFzdF9wZXJjZW50YWdlIHsKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu Zm8hKAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtYXJrZWQge3Bl cmNlbnRhZ2V9JSAoe30gb2Yge2luZGV4X2NvdW50fSBpbmRleCBmaWxlcykiLAo+Pj4gKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZF9pbmRleF9maWxlcyArIDEs Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICApOwo+Pj4gKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgbGFzdF9wZXJjZW50YWdlID0gcGVyY2VudGFnZTsKPj4+ICsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgfQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBwcm9jZXNzZWRfaW5kZXhfZmlsZXMgKz0gMTsKPj4+ICAgICAgICAgICAgICAgICAgICAg ICAgICAgfQo+Pj4gLSAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NlZF9pbmRleF9maWxl cyArPSAxOwo+Pj4gICAgICAgICAgICAgICAgICAgICAgIH0KPj4+ICsKPj4+ICsgICAgICAgICAg ICAgICAgICAgIGlmIG5lZWRzX3JldHJ5IHsKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICBy ZXRyeV9jb3VudGVyICs9IDE7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7 Cj4+PiArICAgICAgICAgICAgICAgICAgICB9Cj4+IAo+PiB0aGlzIHdob2xlIHRoaW5nIGhlcmUg Y2FuIGdvIGF3YXkgdGhlbi4uCj4gCj4gQWNrZWQKCgpfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwpwYnMtZGV2ZWwgbWFpbGluZyBsaXN0CnBicy1kZXZlbEBs aXN0cy5wcm94bW94LmNvbQpodHRwczovL2xpc3RzLnByb3htb3guY29tL2NnaS1iaW4vbWFpbG1h bi9saXN0aW5mby9wYnMtZGV2ZWwK