From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.133.124]) by sourceware.org (Postfix) with ESMTP id 4760F3851C14 for ; Mon, 19 Jul 2021 13:31:32 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 4760F3851C14 Received: from mail-io1-f72.google.com (mail-io1-f72.google.com [209.85.166.72]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-202-UT-dMT9UPDyHm2OlZdR7oA-1; Mon, 19 Jul 2021 09:31:29 -0400 X-MC-Unique: UT-dMT9UPDyHm2OlZdR7oA-1 Received: by mail-io1-f72.google.com with SMTP id p7-20020a6b63070000b029050017e563a6so12690407iog.4 for ; Mon, 19 Jul 2021 06:31:29 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=JSztjAmxomuu08Y/R9rSd6De4k/bYtc62fOiH6tWR4A=; b=K3koQxrqbL1JbxWavZfDedlPyM3pKoLU1582AEURdsXyGid2cNFpDaC8tkrsW12xjp UErI2qr0h9kL6NnC/+oB9CJ3j2/pHU4KLqH9luMhuOrH8tgTM/97dPK6kTumcGlC5jAE 9TiC/YSuBf8clniefQoEYB1C64HviQZryDKAJfOlJl097H/XYWkcW0BBBJWHxL4lLryK updUmceD44ExrM+dxkJwwJaarDyTX+oKBWC1qVMVRhQMsnUuOq66KtgEIF4G1MeIAdZo Dt3Aq4ADssfoW5VGj500AtSZZ4hD4u0dujQSGhQ4ObIEGquwYgttahoi0uVtG2eFBjHt OB2w== X-Gm-Message-State: AOAM531UcAD7ysdIN3YA8YYQwRUSlPFqQHErreTe6lHtSa4PY/WT+TgM e9y6Vx9yOzXaIcd1tm5I14nj5WjQR+RhVTMPGcagjR4p5ZnsKWgGD4QRYANn5Yoa0BivN2r3i/m 0oAj5nrATzBcVyh8UkHqXy7ExoxUjjqOHLk0U61IwSw== X-Received: by 2002:a05:6e02:de6:: with SMTP id m6mr17153965ilj.203.1626701488981; Mon, 19 Jul 2021 06:31:28 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy6JzRt3O3R3kcaZgUpOLiCCb+0NJ0OsGLr20/VQCPTfYGX2/93GBj5jN0O8grOhkJi1eiJST4qa8d/8muLRyo= X-Received: by 2002:a05:6e02:de6:: with SMTP id m6mr17153955ilj.203.1626701488762; Mon, 19 Jul 2021 06:31:28 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Noah Sanci Date: Mon, 19 Jul 2021 09:31:17 -0400 Message-ID: Subject: Re: [Bug debuginfod/27983] ignore duplicate urls To: Mark Wielaard , elfutils-devel@sourceware.org X-Mimecast-Spam-Score: 0 X-Mimecast-Originator: redhat.com Content-Type: multipart/mixed; boundary="00000000000064eb2a05c779f435" X-Spam-Status: No, score=-12.5 required=5.0 tests=BAYES_00, DKIMWL_WL_HIGH, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_BADIPHTTP, KAM_SHORT, NUMERIC_HTTP_ADDR, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H4, RCVD_IN_MSPIKE_WL, SPF_HELO_NONE, SPF_NONE, TXREP, WEIRD_PORT autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: elfutils-devel@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Elfutils-devel mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 19 Jul 2021 13:31:35 -0000 --00000000000064eb2a05c779f435 Content-Type: text/plain; charset="UTF-8" Hello, On Wed, Jul 14, 2021 at 12:36 PM Mark Wielaard wrote: > You deduplicate the full URLs after they are fully constructed. Would > it make sense to do the deduplication on server_url, maybe even as > part of the Count number of URLs code? That might make the code > simpler. And you can change num_urls upfront. Deduplication before fully building the URL would work well, however I was concerned about the slashbuildid situation. I would need to alter all urls to either have a trailing '/' or no trailing '/' to ensure comparison between 'http://127.0.0.1:8000/' and 'http://127.0.0.1:8000' is considered equal. This is possible, but I ultimately decided to wait until full construction as those issues would have been handled. I would be glad to make the change if you want. > > > + num_urls = unduplicated_urls; > > + data = reallocarray( (void *) data, num_urls, sizeof(struct handle_data)); > > Maybe this reallocarray is unnecessary. Yes, it might save a little > bit of memory, but you do have to handle reallocarray failure. Good to know. I removed it. Thanks Noah --00000000000064eb2a05c779f435 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-debuginfod-PR27983-ignore-duplicate-urls.patch" Content-Disposition: attachment; filename="0001-debuginfod-PR27983-ignore-duplicate-urls.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_kranyezy0 RnJvbSBiZTRlMDdhODczMmRkNjg4NTk1Yjk5ZjkyYmEyNzVlZjUwNjBhMzRkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBOb2FoIFNhbmNpIDxuc2FuY2lAcmVkaGF0LmNvbT4KRGF0ZTog RnJpLCA5IEp1bCAyMDIxIDE0OjUzOjEwIC0wNDAwClN1YmplY3Q6IFtQQVRDSF0gZGVidWdpbmZv ZDogUFIyNzk4MyAtIGlnbm9yZSBkdXBsaWNhdGUgdXJscwoKR2F6aW5nIGF0IHNlcnZlciBsb2dz LCBvbmUgc2VlcyBhIG1pbm9yaXR5IG9mIGNsaWVudHMgd2hvIGFwcGVhciB0byBoYXZlCmR1cGxp Y2F0ZSBxdWVyeSB0cmFmZmljIGNvbWluZyBpbjogdGhlIHNhbWUgVVJMLCBtaWxsaXNlY29uZHMg YXBhcnQuCkNoYW5jZXMgYXJlIHRoZSB1c2VyIGFjY2lkZW50YWxseSBkb3VibGVkIGhlciAkREVC VUdJTkZPRF9VUkxTIHNvbWVob3csCmFuZCB0aGUgY2xpZW50IGxpYnJhcnkgaXMgZHV0aWZ1bGx5 IGFza2luZyB0aGUgc2VydmVycyBUV0lDRS4gQnVnICMyNzg2MwpyZWR1Y2VzIHRoZSBwYWluIG9u IHRoZSBzZXJ2ZXJzJyBDUFUsIGJ1dCBkdXBlIG5ldHdvcmsgdHJhZmZpYyBpcyBzdGlsbApiZWlu ZyBwYWlkLiAgV2Ugc2hvdWxkIHJlamVjdCBzZW5kaW5nIG91dHJpZ2h0IGR1cGxpY2F0ZSBjb25j dXJyZW50CnRyYWZmaWMuCgpodHRwczovL3NvdXJjZXdhcmUub3JnL2J1Z3ppbGxhL3Nob3dfYnVn LmNnaT9pZD0yNzk4MwoKU2lnbmVkLW9mZi1ieTogTm9haCBTYW5jaSA8bnNhbmNpQHJlZGhhdC5j b20+Ci0tLQogZGVidWdpbmZvZC9DaGFuZ2VMb2cgICAgICAgICAgIHwgIDcgKysrKysKIGRlYnVn aW5mb2QvZGVidWdpbmZvZC1jbGllbnQuYyB8IDU1ICsrKysrKysrKysrKysrKysrKysrKysrKyst LS0tLS0tLS0KIHRlc3RzL0NoYW5nZUxvZyAgICAgICAgICAgICAgICB8ICA1ICsrKysKIHRlc3Rz L3J1bi1kZWJ1Z2luZm9kLWZpbmQuc2ggICB8IDEzICsrKysrKysrCiA0IGZpbGVzIGNoYW5nZWQs IDY2IGluc2VydGlvbnMoKyksIDE0IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2RlYnVnaW5m b2QvQ2hhbmdlTG9nIGIvZGVidWdpbmZvZC9DaGFuZ2VMb2cKaW5kZXggZDlkMTE3MzcuLjI0Y2Ni OGVmIDEwMDY0NAotLS0gYS9kZWJ1Z2luZm9kL0NoYW5nZUxvZworKysgYi9kZWJ1Z2luZm9kL0No YW5nZUxvZwpAQCAtMSwzICsxLDEwIEBACisyMDIxLTA3LTA5ICBOb2FoIFNhbmNpICA8bnNhbmNp QHJlZGhhdC5jb20+CisKKwkqIGRlYnVnaW5mb2QtY2xpZW50LmMgKGRlYnVnaW5mb2RfcXVlcnlf c2VydmVyKTogQXMgZnVsbC1sZW5ndGgKKwl1cmxzIGFyZSBnZW5lcmF0ZWQgd2l0aCBzdGFuZGFy ZGl6ZWQgZm9ybWF0cywgaWdub3JlIGR1cGxpY2F0ZXMuCisJQWxzbyB1cGRhdGUgdGhlIG51bWJl ciBvZiB1cmxzIHRvIHRoZSB1bmR1cGxpY2F0ZWQgbnVtYmVyIG9mCisJdXJscy4KKwogMjAyMS0w Ni0xOCAgTWFyayBXaWVsYWFyZCAgPG1hcmtAa2xvbXAub3JnPgogCiAJKiBkZWJ1Z2luZm9kLWNs aWVudC5jIChkZWJ1Z2luZm9kX2JlZ2luKTogRG9uJ3QgdXNlIGNsaWVudCBpZgpkaWZmIC0tZ2l0 IGEvZGVidWdpbmZvZC9kZWJ1Z2luZm9kLWNsaWVudC5jIGIvZGVidWdpbmZvZC9kZWJ1Z2luZm9k LWNsaWVudC5jCmluZGV4IGY0MTdiNDBhLi5hOTQ0N2NhZSAxMDA2NDQKLS0tIGEvZGVidWdpbmZv ZC9kZWJ1Z2luZm9kLWNsaWVudC5jCisrKyBiL2RlYnVnaW5mb2QvZGVidWdpbmZvZC1jbGllbnQu YwpAQCAtNzk1LDYgKzc5NSw3IEBAIGRlYnVnaW5mb2RfcXVlcnlfc2VydmVyIChkZWJ1Z2luZm9k X2NsaWVudCAqYywKIAogICBjaGFyICpzdHJ0b2tfc2F2ZXB0cjsKICAgY2hhciAqc2VydmVyX3Vy bCA9IHN0cnRva19yKHNlcnZlcl91cmxzLCB1cmxfZGVsaW0sICZzdHJ0b2tfc2F2ZXB0cik7Cisg IGludCB1bmR1cGxpY2F0ZWRfdXJscyA9IDA7CiAKICAgLyogSW5pdGlhbGl6ZSBlYWNoIGhhbmRs ZS4gICovCiAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtX3VybHMgJiYgc2VydmVyX3VybCAhPSBO VUxMOyBpKyspCkBAIC04MDIsMzQgKzgwMyw1OSBAQCBkZWJ1Z2luZm9kX3F1ZXJ5X3NlcnZlciAo ZGVidWdpbmZvZF9jbGllbnQgKmMsCiAgICAgICBpZiAodmZkID49IDApCiAJZHByaW50ZiAodmZk LCAiaW5pdCBzZXJ2ZXIgJWQgJXNcbiIsIGksIHNlcnZlcl91cmwpOwogCi0gICAgICBkYXRhW2ld LmZkID0gZmQ7Ci0gICAgICBkYXRhW2ldLnRhcmdldF9oYW5kbGUgPSAmdGFyZ2V0X2hhbmRsZTsK LSAgICAgIGRhdGFbaV0uaGFuZGxlID0gY3VybF9lYXN5X2luaXQoKTsKLSAgICAgIGlmIChkYXRh W2ldLmhhbmRsZSA9PSBOVUxMKQotICAgICAgICB7Ci0gICAgICAgICAgcmMgPSAtRU5FVFVOUkVB Q0g7Ci0gICAgICAgICAgZ290byBvdXQxOwotICAgICAgICB9Ci0gICAgICBkYXRhW2ldLmNsaWVu dCA9IGM7Ci0KLSAgICAgIC8qIEJ1aWxkIGhhbmRsZSB1cmwuIFRvbGVyYXRlIGJvdGggIGh0dHA6 Ly9mb286OTk5ICBhbmQKLSAgICAgICAgIGh0dHA6Ly9mb286OTk5LyAgZm9ybXMgKi8KICAgICAg IGNoYXIgKnNsYXNoYnVpbGRpZDsKICAgICAgIGlmIChzdHJsZW4oc2VydmVyX3VybCkgPiAxICYm IHNlcnZlcl91cmxbc3RybGVuKHNlcnZlcl91cmwpLTFdID09ICcvJykKICAgICAgICAgc2xhc2hi dWlsZGlkID0gImJ1aWxkaWQiOwogICAgICAgZWxzZQogICAgICAgICBzbGFzaGJ1aWxkaWQgPSAi L2J1aWxkaWQiOwogCisgICAgICBjaGFyICp0bXBfdXJsID0gY2FsbG9jKFBBVEhfTUFYLCBzaXpl b2YoY2hhcikpOwogICAgICAgaWYgKGZpbGVuYW1lKSAvKiBtdXN0IHN0YXJ0IHdpdGggLyAqLwot ICAgICAgICBzbnByaW50ZihkYXRhW2ldLnVybCwgUEFUSF9NQVgsICIlcyVzLyVzLyVzJXMiLCBz ZXJ2ZXJfdXJsLAorICAgICAgICBzbnByaW50Zih0bXBfdXJsLCBQQVRIX01BWCwgIiVzJXMvJXMv JXMlcyIsIHNlcnZlcl91cmwsCiAgICAgICAgICAgICAgICAgIHNsYXNoYnVpbGRpZCwgYnVpbGRf aWRfYnl0ZXMsIHR5cGUsIGZpbGVuYW1lKTsKICAgICAgIGVsc2UKLSAgICAgICAgc25wcmludGYo ZGF0YVtpXS51cmwsIFBBVEhfTUFYLCAiJXMlcy8lcy8lcyIsIHNlcnZlcl91cmwsCisgICAgICAg IHNucHJpbnRmKHRtcF91cmwsIFBBVEhfTUFYLCAiJXMlcy8lcy8lcyIsIHNlcnZlcl91cmwsCiAg ICAgICAgICAgICAgICAgIHNsYXNoYnVpbGRpZCwgYnVpbGRfaWRfYnl0ZXMsIHR5cGUpOwogCisg ICAgICAvKiBQUiAyNzk4MzogSWYgdGhlIHVybCBpcyBhbHJlYWR5IHNldCB0byBiZSB1c2VkIHVz ZSwgc2tpcCBpdCAqLworICAgICAgaW50IHVybF9pbmRleCA9IC0xOworICAgICAgZm9yICh1cmxf aW5kZXggPSAwOyB1cmxfaW5kZXggPCBpOyArK3VybF9pbmRleCkKKyAgICAgICAgeworICAgICAg ICAgIGlmKHN0cmNtcCh0bXBfdXJsLCBkYXRhW3VybF9pbmRleF0udXJsKSA9PSAwKQorICAgICAg ICAgICAgeworICAgICAgICAgICAgICB1cmxfaW5kZXggPSAtMTsKKyAgICAgICAgICAgICAgYnJl YWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgIGlmICh1cmxfaW5kZXggPT0gLTEp CisgICAgICAgIHsKKyAgICAgICAgICBpZiAodmZkID49IDApCisgICAgICAgICAgICBkcHJpbnRm KHZmZCwgImR1cGxpY2F0ZSB1cmw6ICVzLCBza2lwcGluZ1xuIiwgdG1wX3VybCk7CisgICAgICAg ICAgZnJlZSh0bXBfdXJsKTsKKyAgICAgICAgICAvLyBFbnN1cmUgdGhhdCBuZXh0IGl0ZXJhdGlv biBkb2Vzbid0IHNraXAgb3ZlciBhbiBpbmRleCBtaWQtYXJyYXkKKyAgICAgICAgICBpLS07Cisg ICAgICAgICAgc2VydmVyX3VybCA9IHN0cnRva19yKE5VTEwsIHVybF9kZWxpbSwgJnN0cnRva19z YXZlcHRyKTsKKyAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorICAgICAgZWxzZQorICAg ICAgICB7CisgICAgICAgICAgdW5kdXBsaWNhdGVkX3VybHMrKzsKKyAgICAgICAgICBzdHJuY3B5 KGRhdGFbaV0udXJsLCB0bXBfdXJsLCBQQVRIX01BWCk7CisgICAgICAgICAgZnJlZSAodG1wX3Vy bCk7CisgICAgICAgIH0KKwogICAgICAgaWYgKHZmZCA+PSAwKQogCWRwcmludGYgKHZmZCwgInVy bCAlZCAlc1xuIiwgaSwgZGF0YVtpXS51cmwpOwogCisgICAgICBkYXRhW2ldLmZkID0gZmQ7Cisg ICAgICBkYXRhW2ldLnRhcmdldF9oYW5kbGUgPSAmdGFyZ2V0X2hhbmRsZTsKKyAgICAgIGRhdGFb aV0uaGFuZGxlID0gY3VybF9lYXN5X2luaXQoKTsKKyAgICAgIGlmIChkYXRhW2ldLmhhbmRsZSA9 PSBOVUxMKQorICAgICAgICB7CisgICAgICAgICAgcmMgPSAtRU5FVFVOUkVBQ0g7CisgICAgICAg ICAgIGdvdG8gb3V0MTsKKyAgICAgICAgfQorICAgICAgZGF0YVtpXS5jbGllbnQgPSBjOwogICAg ICAgY3VybF9lYXN5X3NldG9wdChkYXRhW2ldLmhhbmRsZSwgQ1VSTE9QVF9VUkwsIGRhdGFbaV0u dXJsKTsKICAgICAgIGlmICh2ZmQgPj0gMCkKIAljdXJsX2Vhc3lfc2V0b3B0KGRhdGFbaV0uaGFu ZGxlLCBDVVJMT1BUX0VSUk9SQlVGRkVSLCBkYXRhW2ldLmVycmJ1Zik7CkBAIC04NjMsNiArODg5 LDcgQEAgZGVidWdpbmZvZF9xdWVyeV9zZXJ2ZXIgKGRlYnVnaW5mb2RfY2xpZW50ICpjLAogICAg ICAgY3VybF9tdWx0aV9hZGRfaGFuZGxlKGN1cmxtLCBkYXRhW2ldLmhhbmRsZSk7CiAgICAgICBz ZXJ2ZXJfdXJsID0gc3RydG9rX3IoTlVMTCwgdXJsX2RlbGltLCAmc3RydG9rX3NhdmVwdHIpOwog ICAgIH0KKyAgbnVtX3VybHMgPSB1bmR1cGxpY2F0ZWRfdXJsczsKIAogICAvKiBRdWVyeSBzZXJ2 ZXJzIGluIHBhcmFsbGVsLiAgKi8KICAgaWYgKHZmZCA+PSAwKQpkaWZmIC0tZ2l0IGEvdGVzdHMv Q2hhbmdlTG9nIGIvdGVzdHMvQ2hhbmdlTG9nCmluZGV4IGI2NWNiZWI3Li41NzQ3ZDY1OCAxMDA2 NDQKLS0tIGEvdGVzdHMvQ2hhbmdlTG9nCisrKyBiL3Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsx LDggQEAKKzIwMjEtMDctMDkgIE5vYWggU2FuY2kgIDxuc2FuY2lAcmVkaGF0LmNvbT4KKworCSog cnVuLWRlYnVnaW5mb2QtZmluZC5zaDogV3JvdGUgdGVzdCB0byBlbnN1cmUgZHVwbGljYXRlIHVy bHMgYXJlIGluCisJZmFjdCBub3QgY2hlY2tlZC4KKwogMjAyMS0wNy0wMiAgTWFyayBXaWVsYWFy ZCAgPG1hcmtAa2xvbXAub3JnPgogCiAgICAgICAgKiBydW4tZGVidWdpbmZvLWZpbmQuc2g6IHVu c2V0IFZBTEdSSU5EX0NNRCBiZWZvcmUgdGVzdGluZyBkZWJ1Z2luZm9kCmRpZmYgLS1naXQgYS90 ZXN0cy9ydW4tZGVidWdpbmZvZC1maW5kLnNoIGIvdGVzdHMvcnVuLWRlYnVnaW5mb2QtZmluZC5z aAppbmRleCA3NGE1Y2VmZi4uNmZhYWY3MGIgMTAwNzU1Ci0tLSBhL3Rlc3RzL3J1bi1kZWJ1Z2lu Zm9kLWZpbmQuc2gKKysrIGIvdGVzdHMvcnVuLWRlYnVnaW5mb2QtZmluZC5zaApAQCAtMzU5LDYg KzM1OSwxOSBAQCBybSAtcmYgZXh0cmFjdGVkCiAKIHdhaXRfcmVhZHkgJFBPUlQxICdmb3VuZF9z b3VyY2VyZWZzX3RvdGFse3NvdXJjZT0iLnJwbSBhcmNoaXZlIn0nICRzb3VyY2VmaWxlcwogCisj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMKKyMgUFIyNzk4MyBlbnN1cmUgbm8gZHVwbGljYXRlIHVybHMgYXJlIHVz ZWQgaW4gd2hlbiBxdWVyeWluZyBzZXJ2ZXJzIGZvciBmaWxlcworVE1QX0RFQlVHX1VSTFM9JERF QlVHSU5GT0RfVVJMUworcm0gLXJmICRERUJVR0lORk9EX0NBQ0hFX1BBVEggIyBjbGVhbiBpdCBm cm9tIHByZXZpb3VzIHRlc3RzCitleHBvcnQgREVCVUdJTkZPRF9VUkxTPSJodHRwOi8vMTI3LjAu MC4xOiRQT1JUMSBodHRwOi8vMTI3LjAuMC4xOiRQT1JUMSBodHRwOi8vMTI3LjAuMC4xOiRQT1JU MSBodHRwOjEyNy4wLjAuMTo3OTk5IgorZW52IExEX0xJQlJBUllfUEFUSD0kbGRwYXRoICR7YWJz X3RvcF9idWlsZGRpcn0vZGVidWdpbmZvZC9kZWJ1Z2luZm9kLWZpbmQgLXYgZXhlY3V0YWJsZSAk QlVJTERJRDIgPiB2bG9nNCAyPiYxIHx8IHRydWUKK3RlbXBmaWxlcyB2bG9nNAoraWYgWyAkKCBn cmVwIC1jICdkdXBsaWNhdGUgdXJsOiBodHRwOi8vMTI3LjAuMC4xOickUE9SVDEnLionIHZsb2c0 ICkgLW5lIDIgXTsgdGhlbgorICBlY2hvICJEdXBsaWNhdGVkIHNlcnZlcnMgdW5kZXRlY3RlZCI7 CisgIGVycgorZmkKK2V4cG9ydCBERUJVR0lORk9EX1VSTFM9JFRNUF9ERUJVR19VUkxTCisjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMKICMgUnVuIGEgYmFuayBvZiBxdWVyaWVzIGFnYWluc3QgdGhlIGRlYnVnaW5m b2QtcnBtcyAvIGRlYnVnaW5mb2QtZGVicyB0ZXN0IGNhc2VzCiAKIGFyY2hpdmVfdGVzdCgpIHsK LS0gCjIuMzEuMQoK --00000000000064eb2a05c779f435--