From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from simark.ca by simark.ca with LMTP id aL+CFGwXG2QY3hYAWB0awg (envelope-from ) for ; Wed, 22 Mar 2023 10:57:48 -0400 Received: by simark.ca (Postfix, from userid 112) id 51D371E223; Wed, 22 Mar 2023 10:57:48 -0400 (EDT) Authentication-Results: simark.ca; dkim=pass (2048-bit key; unprotected) header.d=lists.lttng.org header.i=@lists.lttng.org header.a=rsa-sha256 header.s=default header.b=Gl4Mbd/Y; dkim-atps=neutral X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on simark.ca X-Spam-Level: X-Spam-Status: No, score=-9.0 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,MAILING_LIST_MULTI,NICE_REPLY_A, RCVD_IN_DNSWL_HI,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.6 Received: from lists.lttng.org (lists.lttng.org [167.114.26.123]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by simark.ca (Postfix) with ESMTPS id D875E1E0D3 for ; Wed, 22 Mar 2023 10:57:47 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=lists.lttng.org; s=default; t=1679497067; bh=hPvtNZJhWc6KvC7w4KEuB1S3STyHbproZSKU2ZH0Jo4=; h=Date:To:Cc:References:In-Reply-To:Subject:List-Id: List-Unsubscribe:List-Archive:List-Post:List-Help:List-Subscribe: From:Reply-To:From; b=Gl4Mbd/Y9i3gmvBTHvyNG7eV19FJhxDk2SOzr0hpLumY7RIPg2M4ZQSAXM/AtW5VZ JtYmmJzia8MIOiKK5PSTDkE4ooFFPxparweJdAQYHn93pFYDDAU2UyaAU/ysFYG7Z2 LyG9tNbaLnvLVcL/lcnB/Nw+3tkS25dArhpeE5cF/lrp/NpEJ3ew06AJHAVOGNGnNp VfTunGG/g5almJBqWYhpEa3o2GumwSddAK7iyiqOrlkUiAseoLEU+0n0UtVqtMY8hA cSgqoFOzv8NBdJhaberlrC7D59DnZmrq/mMGqf6j2Mj9R6Blcb9lnAj5dp+N8e4t8j hPuxDhJf7esuw== Received: from lists-lttng01.efficios.com (localhost [IPv6:::1]) by lists.lttng.org (Postfix) with ESMTP id 4PhWmW3MgMz2HFj; Wed, 22 Mar 2023 10:57:47 -0400 (EDT) Received: from smtpout.efficios.com (smtpout.efficios.com [167.114.26.122]) by lists.lttng.org (Postfix) with ESMTPS id 4PhWmV2lMnz2HFh for ; Wed, 22 Mar 2023 10:57:46 -0400 (EDT) Received: from [172.16.0.188] (192-222-143-198.qc.cable.ebox.net [192.222.143.198]) by smtpout.efficios.com (Postfix) with ESMTPSA id 4PhWmT5n8qzr9K; Wed, 22 Mar 2023 10:57:45 -0400 (EDT) Message-ID: Date: Wed, 22 Mar 2023 10:57:58 -0400 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.8.0 Content-Language: en-US To: =?UTF-8?B?T25kxZllaiBTdXLDvQ==?= Cc: lttng-dev@lists.lttng.org, paulmck References: <1EB650B0-8D3C-481E-833C-C56D93C202EB@sury.org> In-Reply-To: Subject: Re: [lttng-dev] ThreadSanitizer: data race between urcu_mb_synchronize_rcu and urcu_adaptative_wake_up X-BeenThere: lttng-dev@lists.lttng.org X-Mailman-Version: 2.1.39 Precedence: list List-Id: LTTng development list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Mathieu Desnoyers via lttng-dev Reply-To: Mathieu Desnoyers Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Errors-To: lttng-dev-bounces@lists.lttng.org Sender: "lttng-dev" T24gMjAyMy0wMy0yMiAwNzowMSwgT25kxZllaiBTdXLDvSB2aWEgbHR0bmctZGV2IHdyb3RlOgo+ PiBPbiAyMi4gMy4gMjAyMywgYXQgOTowMiwgT25kxZllaiBTdXLDvSB2aWEgbHR0bmctZGV2IDxs dHRuZy1kZXZAbGlzdHMubHR0bmcub3JnPiB3cm90ZToKPj4KPj4gVGhhdCdzIHByZXR0eSBtdWNo IHdlaXJkIGJlY2F1c2UgdGhlICJXcml0ZSIgaGFwcGVucyBvbiBzdGFjayBsb2NhbCB2YXJpYWJs ZSwKPj4gd2hpbGUgdGhlICJQcmV2aW91cyB3cml0ZSIgaGFwcGVucyBhZnRlciBmdXRleCwgd2hp Y2ggbGVhZCBtZSB0byB0aGUgZmFjdCB0aGF0Cj4+IFRocmVhZFNhbml0aXplciBkb2Vzbid0IGlu dGVyY2VwdCBmdXRleCwgYnV0IHdlIGNhbiBhbm5vdGF0ZSB0aGUgZnV0ZXhlczoKPj4KPj4gaHR0 cHM6Ly9ncm91cHMuZ29vZ2xlLmNvbS9nL3RocmVhZC1zYW5pdGl6ZXIvYy9UMEdfTnl5WjNzNAo+ IAo+IEZUUiBuZWl0aGVyIGFubm90YXRpbmcgdGhlIGZ1dGV4IHdpdGggX190c2FuX2FjcXVpcmUo YWRkcikgYW5kIF9fdHNhbl9yZWxlYXNlKGFkZHIpCj4gbm9yIGZhbGxpbmcgYmFjayB0byBjb21w YXRfZnV0ZXhfYXN5bmMoKSBmb3IgVGhyZWFkU2FuaXRpemVyIGhhcyBoZWxwZWQuCj4gCj4gSXQg c2VlbXMgdG8gbWUgdGhhdCBUU0FOIHN0aWxsIGRvZXNuJ3QgdW5kZXJzdGFuZCB0aGUgc3luY2hy b25pemF0aW9uIGJldHdlZW4KPiBSQ1UgcmVhZC1jcml0aWNhbCBzZWN0aW9ucyBhbmQgY2FsbF9y Y3Uvc3luY2hyb25pemVfcmN1KCkgYXMgSSBhbSBhbHNvIGdldHRpbmcKPiBmb2xsb3dpbmcgcmVw b3J0czoKPiAKPiAgICBXcml0ZSBvZiBzaXplIDggYXQgMHg3YjU0MDAwMDA5YzAgYnkgdGhyZWFk IFQxMDI6Cj4gICAgICAjMCBfX3RzYW5fbWVtc2V0IDxudWxsPiAoYmFkY2FjaGVfdGVzdCsweDQ5 MjU3ZCkgKEJ1aWxkSWQ6IGE3YzE1OTVkNjFlM2VlNDExMjc2Y2Y4OWE1MzZhOGRhZWZhOTU5YTMp Cj4gICAgICAjMSBtZW1fcHV0IC9ob21lL29uZHJlai9Qcm9qZWN0cy9iaW5kOS9saWIvaXNjL21l bS5jOjMyNDozIChsaWJpc2MtOS4xOS4xMi1kZXYuc28rMHg3ZDEzNikgKEJ1aWxkSWQ6IGEzM2Nk MjZlNDgzYjczNjg0OTI4YjQ3ODI2MjdmMTI3OGMwMDE2MDUpCj4gICAgICAjMiBpc2NfX21lbV9w dXQgL2hvbWUvb25kcmVqL1Byb2plY3RzL2JpbmQ5L2xpYi9pc2MvbWVtLmM6Njg0OjIgKGxpYmlz Yy05LjE5LjEyLWRldi5zbysweDdlMGMzKSAoQnVpbGRJZDogYTMzY2QyNmU0ODNiNzM2ODQ5Mjhi NDc4MjYyN2YxMjc4YzAwMTYwNSkKPiAgICAgICMzIGJjZW50cnlfZGVzdHJveV9yY3UgL2hvbWUv b25kcmVqL1Byb2plY3RzL2JpbmQ5L2xpYi9kbnMvYmFkY2FjaGUuYzoxNjM6MiAobGliZG5zLTku MTkuMTItZGV2LnNvKzB4NGUwNzEpIChCdWlsZElkOiA4YTU1MGI3OTUwMDNjZDEwNzVmZjI5NTkw NzM0YzgwNmQ4NGU3NmU2KQo+ICAgICAgIzQgY2FsbF9yY3VfdGhyZWFkIC9ob21lL29uZHJlai9Q cm9qZWN0cy91c2Vyc3BhY2UtcmN1L3NyYy8uLi9zcmMvdXJjdS1jYWxsLXJjdS1pbXBsLmg6Mzg5 OjUgKGxpYnVyY3UtbWIuc28uOCsweDlkNmIpIChCdWlsZElkOiBkNGY1ZWE5ZDk2NjI1YzdiN2Qy YjJlZmI1OTBiMjA4ZjdiODNjYjZmKQo+IAo+ICAgIFByZXZpb3VzIGF0b21pYyB3cml0ZSBvZiBz aXplIDggYXQgMHg3YjU0MDAwMDA5YzAgYnkgbWFpbiB0aHJlYWQgKG11dGV4ZXM6IHdyaXRlIE0w KToKPiAgICAgICMwIF9fX2Nkc193ZmNxX2FwcGVuZCAvaG9tZS9vbmRyZWovUHJvamVjdHMvdXNl cnNwYWNlLXJjdS9zcmMvLi4vaW5jbHVkZS91cmN1L3N0YXRpYy93ZmNxdWV1ZS5oOjIwMjoyIChs aWJ1cmN1LW1iLnNvLjgrMHhhOGFlKSAoQnVpbGRJZDogZDRmNWVhOWQ5NjYyNWM3YjdkMmIyZWZi NTkwYjIwOGY3YjgzY2I2ZikKPiAgICAgICMxIF9jZHNfd2ZjcV9lbnF1ZXVlIC9ob21lL29uZHJl ai9Qcm9qZWN0cy91c2Vyc3BhY2UtcmN1L3NyYy8uLi9pbmNsdWRlL3VyY3Uvc3RhdGljL3dmY3F1 ZXVlLmg6MjIzOjkgKGxpYnVyY3UtbWIuc28uOCsweGFjMDkpIChCdWlsZElkOiBkNGY1ZWE5ZDk2 NjI1YzdiN2QyYjJlZmI1OTBiMjA4ZjdiODNjYjZmKQo+ICAgICAgIzIgX2NhbGxfcmN1IC9ob21l L29uZHJlai9Qcm9qZWN0cy91c2Vyc3BhY2UtcmN1L3NyYy8uLi9zcmMvdXJjdS1jYWxsLXJjdS1p bXBsLmg6NzE5OjIgKGxpYnVyY3UtbWIuc28uOCsweDYwNGYpIChCdWlsZElkOiBkNGY1ZWE5ZDk2 NjI1YzdiN2QyYjJlZmI1OTBiMjA4ZjdiODNjYjZmKQo+ICAgICAgIzMgdXJjdV9tYl9iYXJyaWVy IC9ob21lL29uZHJlai9Qcm9qZWN0cy91c2Vyc3BhY2UtcmN1L3NyYy8uLi9zcmMvdXJjdS1jYWxs LXJjdS1pbXBsLmg6OTMyOjMgKGxpYnVyY3UtbWIuc28uOCsweDRkMWIpIChCdWlsZElkOiBkNGY1 ZWE5ZDk2NjI1YzdiN2QyYjJlZmI1OTBiMjA4ZjdiODNjYjZmKQo+ICAgICAgIzQgYmFkY2FjaGVf Zmx1c2ggL2hvbWUvb25kcmVqL1Byb2plY3RzL2JpbmQ5L2xpYi9kbnMvYmFkY2FjaGUuYzozMjk6 MiAobGliZG5zLTkuMTkuMTItZGV2LnNvKzB4NGQ4YjMpIChCdWlsZElkOiA4YTU1MGI3OTUwMDNj ZDEwNzVmZjI5NTkwNzM0YzgwNmQ4NGU3NmU2KQo+ICAgICAgWy4uLl0KPiAKPiBFLmcuIFRocmVh ZFNhbml0aXplciByZXBvcnRzIGEgcmFjZSBiZXR3ZWVuIGEgcGxhY2Ugd2hlcmUgYmNlbnRyeS0+ cmN1X2hlYWQgaXMgYWRkZWQgdG8gY2FsbF9yY3UoKSBxdWV1ZQo+IGFuZCB3aGVuIGNhbGxfcmN1 IGNhbGxiYWNrcyBhcmUgY2FsbGVkLiAgQW5ub3RhdGluZyB0aGUgYmNlbnRyeSB3aXRoIGFjcXVp cmUvcmVsZWFzZSBoZXJlIGhlbHBzIHdpdGggdGhpcwo+IHBhcnRpY3VsYXIgZGF0YSByYWNlLCBi dXQgaXQgZG9lcyBub3QgZmVlbCByaWdodCB0byBtZSB0byBhZGQgYW5ub3RhdGlvbiBhdCB0aGlz IGxldmVsLgo+IAo+IFRoZSBjb2RlIGlzIG5vdCB2ZXJ5IGNvbXBsaWNhdGVkIHRoZXJlOgo+IAo+ IHN0YXRpYyB2b2lkCj4gYmNlbnRyeV9kZXN0cm95X3JjdShzdHJ1Y3QgcmN1X2hlYWQgKnJjdV9o ZWFkKSB7Cj4gICAgICAgICAgZG5zX2JjZW50cnlfdCAqYmFkID0gY2FhX2NvbnRhaW5lcl9vZihy Y3VfaGVhZCwgZG5zX2JjZW50cnlfdCwKPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJjdV9oZWFkKTsKPiAgICAgICAgICAvKiBfX3RzYW5fcmVsZWFzZShi YWQpOyA8LS0gdGhpcyBoZWxwcyAqLwo+ICAgICAgICAgIGRuc19iYWRjYWNoZV90ICpiYyA9IGJh ZC0+YmM7Cj4gCj4gICAgICAgICAgaXNjX21lbV9wdXQoYmMtPm1jdHgsIGJhZCwgc2l6ZW9mKCpi YWQpKTsKPiAKPiAgICAgICAgICBkbnNfYmFkY2FjaGVfZGV0YWNoKCZiYyk7Cj4gfQo+IAo+IHN0 YXRpYyB2b2lkCj4gYmNlbnRyeV9ldmljdChzdHJ1Y3QgY2RzX2xmaHQgKmh0LCBkbnNfYmNlbnRy eV90ICpiYWQpIHsKPiAgICAgICAgICAvKiBUaGVyZSBjYW4gYmUgbXVsdGlwbGUgZGVsZXRlcnMg bm93ICovCj4gICAgICAgICAgaWYgKGNkc19sZmh0X2RlbChodCwgJmJhZC0+aHRfbm9kZSkgPT0g MCkgewo+ICAgICAgICAgICAgICAgICAgLyogX190c2FuX2FjcXVpcmUoYmFkKTsgPC0gdGhpcyBo ZWxwcyAqLwo+ICAgICAgICAgICAgICAgICAgY2FsbF9yY3UoJmJhZC0+cmN1X2hlYWQsIGJjZW50 cnlfZGVzdHJveV9yY3UpOwo+ICAgICAgICAgIH0KPiB9Cj4gCj4gc3RhdGljIHZvaWQKPiBiYWRj YWNoZV9mbHVzaChkbnNfYmFkY2FjaGVfdCAqYmMsIHN0cnVjdCBjZHNfbGZodCAqaHQpIHsKPiAg ICAgICAgICBzdHJ1Y3QgY2RzX2xmaHQgKm9sZGh0ID0gcmN1X3hjaGdfcG9pbnRlcigmYmMtPmh0 LCBodCk7Cj4gCj4gICAgICAgICAgc3luY2hyb25pemVfcmN1KCk7Cj4gCj4gICAgICAgICAgcmN1 X3JlYWRfbG9jaygpOwo+ICAgICAgICAgIGRuc19iY2VudHJ5X3QgKmJhZCA9IE5VTEw7Cj4gICAg ICAgICAgc3RydWN0IGNkc19sZmh0X2l0ZXIgaXRlcjsKPiAgICAgICAgICBjZHNfbGZodF9mb3Jf ZWFjaF9lbnRyeSAob2xkaHQsICZpdGVyLCBiYWQsIGh0X25vZGUpIHsKPiAgICAgICAgICAgICAg ICAgIGJjZW50cnlfZXZpY3Qob2xkaHQsIGJhZCk7Cj4gICAgICAgICAgfQo+ICAgICAgICAgIHJj dV9yZWFkX3VubG9jaygpOwo+ICAgICAgICAgIHJjdV9iYXJyaWVyKCk7Cj4gICAgICAgICAgUlVO VElNRV9DSEVDSyhjZHNfbGZodF9kZXN0cm95KG9sZGh0LCBOVUxMKSA9PSAwKTsKPiB9Cj4gCj4g QW55IGlkZWFzPwoKSSBzdXNwZWN0IHdoYXQgaGFwcGVucyBoZXJlIGlzIHRoYXQgVFNBTiBpcyBj b25zaWRlcmluZyB0aGUKCiAgICAgICAgIC8qCiAgICAgICAgICAqIEltcGxpY2l0IG1lbW9yeSBi YXJyaWVyIGFmdGVyIHVhdG9taWNfeGNoZygpIG9yZGVycyBzdG9yZSB0bwogICAgICAgICAgKiBx LT50YWlsIGJlZm9yZSBzdG9yZSB0byBvbGRfdGFpbC0+bmV4dC4KICAgICAgICAgICoKICAgICAg ICAgICogQXQgdGhpcyBwb2ludCwgZGVxdWV1ZXJzIHNlZSBhIE5VTEwgdGFpbC0+cC0+bmV4dCwg d2hpY2gKICAgICAgICAgICogaW5kaWNhdGVzIHRoYXQgdGhlIHF1ZXVlIGlzIGJlaW5nIGFwcGVu ZGVkIHRvLiBUaGUgZm9sbG93aW5nCiAgICAgICAgICAqIHN0b3JlIHdpbGwgYXBwZW5kICJub2Rl IiB0byB0aGUgcXVldWUgZnJvbSBhIGRlcXVldWVyCiAgICAgICAgICAqIHBlcnNwZWN0aXZlLgog ICAgICAgICAgKi8KICAgICAgICAgQ01NX1NUT1JFX1NIQVJFRChvbGRfdGFpbC0+bmV4dCwgbmV3 X2hlYWQpOwoKd2l0aGluIF9fX2Nkc193ZmNxX2FwcGVuZCgpIGFzIHJhY3kuCgpUaGlzIHBhaXJz IHdpdGg6CgovKgogICogV2FpdGluZyBmb3IgZW5xdWV1ZXIgdG8gY29tcGxldGUgZW5xdWV1ZSBh bmQgcmV0dXJuIHRoZSBuZXh0IG5vZGUuCiAgKi8Kc3RhdGljIGlubGluZSBzdHJ1Y3QgY2RzX3dm Y3Ffbm9kZSAqCl9fX2Nkc193ZmNxX25vZGVfc3luY19uZXh0KHN0cnVjdCBjZHNfd2ZjcV9ub2Rl ICpub2RlLCBpbnQgYmxvY2tpbmcpCnsKICAgICAgICAgc3RydWN0IGNkc193ZmNxX25vZGUgKm5l eHQ7CiAgICAgICAgIGludCBhdHRlbXB0ID0gMDsKCiAgICAgICAgIC8qCiAgICAgICAgICAqIEFk YXB0YXRpdmUgYnVzeS1sb29waW5nIHdhaXRpbmcgZm9yIGVucXVldWVyIHRvIGNvbXBsZXRlIGVu cXVldWUuCiAgICAgICAgICAqLwogICAgICAgICB3aGlsZSAoKG5leHQgPSBDTU1fTE9BRF9TSEFS RUQobm9kZS0+bmV4dCkpID09IE5VTEwpIHsKICAgICAgICAgICAgICAgICBpZiAoX19fY2RzX3dm Y3FfYnVzeV93YWl0KCZhdHRlbXB0LCBibG9ja2luZykpCiAgICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gQ0RTX1dGQ1FfV09VTERCTE9DSzsKICAgICAgICAgfQoKICAgICAgICAgcmV0dXJu IG5leHQ7Cn0KClNvIHRoZSByZWxlYXNlIHNlbWFudGljIGlzIHByb3ZpZGVkIGJ5IHRoZSBpbXBs aWNpdCBTRVFfQ1NUIGJhcnJpZXIgaW46CgpfX19jZHNfd2ZjcV9hcHBlbmQoKToKICAgb2xkX3Rh aWwgPSB1YXRvbWljX3hjaGcoJnRhaWwtPnAsIG5ld190YWlsKTsgKHJlbGVhc2UpCgphbmQgdGhl IGFjcXVpcmUgc2VtYW50aWMgaXMgcHJvdmlkZWQgYnkgdGhlIGltcGxpY2l0IFNFUV9DU1QgYmFy cmllciBpbjoKCl9fX2Nkc193ZmNxX3NwbGljZSgpOgoKICAgICAgICAgLyoKICAgICAgICAgICog TWVtb3J5IGJhcnJpZXIgaW1wbGllZCBiZWZvcmUgdWF0b21pY194Y2hnKCkgb3JkZXJzIHN0b3Jl IHRvCiAgICAgICAgICAqIHNyY19xLT5oZWFkIGJlZm9yZSBzdG9yZSB0byBzcmNfcS0+dGFpbC4g VGhpcyBpcyByZXF1aXJlZCBieQogICAgICAgICAgKiBjb25jdXJyZW50IGVucXVldWUgb24gc3Jj X3EsIHdoaWNoIGV4Y2hhbmdlcyB0aGUgdGFpbCBiZWZvcmUKICAgICAgICAgICogdXBkYXRpbmcg dGhlIHByZXZpb3VzIHRhaWwncyBuZXh0IHBvaW50ZXIuCiAgICAgICAgICAqLwogICAgICAgICB0 YWlsID0gdWF0b21pY194Y2hnKCZzcmNfcV90YWlsLT5wLCAmc3JjX3FfaGVhZC0+bm9kZSk7CgpO b3RpY2UgaG93IHRoZSByZWxlYXNlL2FjcXVpcmUgc2VtYW50aWMgaXMgcHJvdmlkZWQgYnkgdGFp bC0+cCwgd2hpY2ggaXMgYXRvbWljYWxseSBtb2RpZmllZCBfYmVmb3JlXyB3ZSBzZXQgdGhlIG5v ZGUtPm5leHQgcG9pbnRlci4KCldpdGggdGhpcyBpbmZvcm1hdGlvbiwgaXMgdGhlcmUgYSBzcGVj aWZpYyBhbm5vdGF0aW9uIHRoYXQgd291bGQgbWFrZSBzZW5zZSA/CgpUaGFua3MsCgpNYXRoaWV1 CgoKPiAKPiBPbmRyZWoKPiAtLQo+IE9uZMWZZWogU3Vyw70gKEhlL0hpbSkKPiBvbmRyZWpAc3Vy eS5vcmcKPiAKPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Xwo+IGx0dG5nLWRldiBtYWlsaW5nIGxpc3QKPiBsdHRuZy1kZXZAbGlzdHMubHR0bmcub3JnCj4g aHR0cHM6Ly9saXN0cy5sdHRuZy5vcmcvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL2x0dG5nLWRl dgoKLS0gCk1hdGhpZXUgRGVzbm95ZXJzCkVmZmljaU9TIEluYy4KaHR0cHM6Ly93d3cuZWZmaWNp b3MuY29tCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwps dHRuZy1kZXYgbWFpbGluZyBsaXN0Cmx0dG5nLWRldkBsaXN0cy5sdHRuZy5vcmcKaHR0cHM6Ly9s aXN0cy5sdHRuZy5vcmcvY2dpLWJpbi9tYWlsbWFuL2xpc3RpbmZvL2x0dG5nLWRldgo=