From mboxrd@z Thu Jan 1 00:00:00 1970 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on inbox.vuxu.org X-Spam-Level: X-Spam-Status: No, score=-3.4 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FROM,MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED, UNPARSEABLE_RELAY autolearn=ham autolearn_force=no version=3.4.4 Received: (qmail 4256 invoked from network); 1 Aug 2021 18:51:23 -0000 Received: from zero.zsh.org (2a02:898:31:0:48:4558:7a:7368) by inbox.vuxu.org with ESMTPUTF8; 1 Aug 2021 18:51:23 -0000 ARC-Seal: i=1; cv=none; a=rsa-sha256; d=zsh.org; s=rsa-20200801; t=1627843883; b=XrebYGqV41DpSkHYMPuB00lAQJfZPkpig42AJyQV/dZQL413u7wuzASu7Ny7IechhFji9sTrjW 3TcSJZW8uAl0trPPeHSde+qWYye0YpsviLVY9V20hswxcnWki40vxZRt7We9RKJCqbWfE7Nbiu zNLO84M4vKYVA3LhbTa8rKNPVHWQrdoObX0+E9MGL6mXqLNMhfiKcdfK++EPFZVBdq6RACnGlS Azh/85HQ57obvGHPpclmCotnAHxz7Qc2HtUowtTx/ZEXDTRtBSygTcFgs1iuqm64KvJlqTRNnn 0+KFC0FH6QItqPXqZiOjmdultfUCGUOdCZCI4L1yB90L2w==; ARC-Authentication-Results: i=1; zsh.org; iprev=pass (mail-lj1-f174.google.com) smtp.remote-ip=209.85.208.174; dkim=pass header.d=gmail.com header.s=20161025 header.a=rsa-sha256; dmarc=pass header.from=gmail.com; arc=none ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed; d=zsh.org; s=rsa-20200801; t=1627843883; bh=EzIUXyLvYmP5szhFhAthUe+8JFdIPZMfDsOlR372i8c=; h=List-Archive:List-Owner:List-Post:List-Unsubscribe:List-Subscribe:List-Help: List-Id:Sender:Content-Type:Cc:To:Subject:Message-ID:Date:From:In-Reply-To: References:MIME-Version:DKIM-Signature:DKIM-Signature; b=iVxyo0nxe3Rt4FacOSMt5Vx8fgWzjzxMhD5/SKGmh5HEJ49WEBa3IuafGIOj8MwI+l0hThBrjw 8yrHq3FTibB8IpW7HhCjc5RlDk8PoNYDcWQQsXTo+h00uKiyeeIEEudNZScsAYM7xlcmvgsPEX iJhrglrsdF+IeCBFktCQypJQOEYzPVc5hqn/wnZcO6iZq/R6xhzH8n8gC5eyBsGerBAP/CXBjK +X0HiZQ7WhjsOCfy+3fsG7l1UdUls3E8I59R/3ve4e8fGovqc9/IQv6S4AmMMhh7G/GZJcNANi GqaJPXZxhc9fJxSFn4T2MGwtZM1ILkm4i0ZEnfCjxtQiVA==; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=zsh.org; s=rsa-20200801; h=List-Archive:List-Owner:List-Post:List-Unsubscribe: List-Subscribe:List-Help:List-Id:Sender:Content-Type:Cc:To:Subject:Message-ID :Date:From:In-Reply-To:References:MIME-Version:Reply-To: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID; bh=+dDaPGNNqxhElYyuyXj7FYqjyV5/NOSLtGjPEK+sOpk=; b=dCE4C/IB6WyAShGV4yBEBZ5naj otgNxz7MdcNW3aPR0/fRPlSKk3YQlJ6BJQRgnOIaeifgBeJ/WcBQ8UZoPV1IDrC3JclPaHenDdlxa oX+KEtrEg1w0IATbDX5cdYUBs8D0Qlaj4XR84mCss30r4F+HWyA0EMMyKolTwjgjih0KBB/mLsKUH 3hAG3ghZbo7QrE7CUjGPy2YN556plzGa75NWuvFTSBKxXkeLa/AekI3BL/AS4K18sk9/NGsOwI6NM 4t+1NU9UomMG9Vbp3DF6HbbLZaAdCThHVbctVEZFXrZLYYglwS3E1z5IuhjAT/AxQpllqjFhSzkZO iUcy2szg==; Received: from authenticated user by zero.zsh.org with local id 1mAGYT-0000mk-Kk; Sun, 01 Aug 2021 18:51:21 +0000 Authentication-Results: zsh.org; iprev=pass (mail-lj1-f174.google.com) smtp.remote-ip=209.85.208.174; dkim=pass header.d=gmail.com header.s=20161025 header.a=rsa-sha256; dmarc=pass header.from=gmail.com; arc=none Received: from mail-lj1-f174.google.com ([209.85.208.174]:33420) by zero.zsh.org with esmtps (TLS1.3:TLS_AES_128_GCM_SHA256:128) id 1mAGY7-0000Tw-H9; Sun, 01 Aug 2021 18:51:00 +0000 Received: by mail-lj1-f174.google.com with SMTP id u20so21095089ljo.0; Sun, 01 Aug 2021 11:50:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=+dDaPGNNqxhElYyuyXj7FYqjyV5/NOSLtGjPEK+sOpk=; b=Lu0s2YKs0JsT615tWSxsnVpCK5iRxQebOMVjhcRXtyn8044WJE2d6ojZOp3Aibs832 0H6pajVfCcpirk5hNV6VwsYbtWzAq+KTE/dJrbzMjlg5/YAthdNFgAzDHp/TXwwIl/B7 XuIrCy/TMvCnMvhkD56dfFNbAvlDypULwsORbKJwlINMNay74wAZ4vs1EMDi1alhjHkm Sps2EuaJZPlwkMoJke5mPi/XtWHDV69/J6M/WqgVdFgaBYzpdVv72GyLafynlfz7INeG Dm+5/RxJXY8CiJ4TR6olm+1IvhjpirT+n/z5znXlYz8Lmi0rIQBTRFNtePfGWt1xgrp0 rYBg== 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:cc; bh=+dDaPGNNqxhElYyuyXj7FYqjyV5/NOSLtGjPEK+sOpk=; b=cOIm4V4vXSV8P73//irJkky2zqCWKvPcijCHLclg0QZoTQ5oMAlfbyCPtTnMacgxZn bAb29C8DdcOU0sR/AObCj3jgRIdhpr9eURYTagWGwVfnlVAO6nLpfwgFsDG+Yb4Kcvrd vsnNGf+7tZrd2Ajl0FjMuqODcRzAtQzIolAiIVtJDVELbSustx0jVjWjUdcO8yowlVEZ kQpHjPA50hjT8Uq5ir1s+s6UBZ8HkyFN77Q5tndwaNyf3bZaCI1jwyBitngl62Z5vre5 K85+ovSOmW6VpAZRlJBNRyS5uonzpn1aWpsRMXxtga9p9wY8yyQztLaniX2khbwdwaV5 W71w== X-Gm-Message-State: AOAM533oyefI5ppZuCiAPNz7t002d9RHdB8rLTAB0wKD7Ld7od7lDoS3 vV1PmysFD3g4ptCtz6XA5PctEnpqyoK7645KZOQ= X-Google-Smtp-Source: ABdhPJw5IiOnBJOZR+5s9JG2aL5mTPUQvpdEDxX0hRDkaMT0k3u5MQBs1kaFCUlcENAFFFWGzIQtPe18aLf7Pa0I7KY= X-Received: by 2002:a2e:9a8e:: with SMTP id p14mr8797442lji.69.1627843858373; Sun, 01 Aug 2021 11:50:58 -0700 (PDT) MIME-Version: 1.0 References: <36227-1622676235.815398@zrY_.ZerV.zhJL> <906332f9-027b-4b21-bb7f-3fd7118154af@www.fastmail.com> In-Reply-To: From: Marlon Richert Date: Sun, 1 Aug 2021 21:50:22 +0300 Message-ID: Subject: [PATCH] Make _expand handle aliases (was Re: [PATCH] Make _expand_alias more usable as a completer) To: Bart Schaefer Cc: Zsh hackers list , Oliver Kiddle Content-Type: multipart/mixed; boundary="000000000000edb99a05c883ee4b" X-Seq: 49228 Archived-At: X-Loop: zsh-workers@zsh.org Errors-To: zsh-workers-owner@zsh.org Precedence: list Precedence: bulk Sender: zsh-workers-request@zsh.org X-no-archive: yes List-Id: List-Help: List-Subscribe: List-Unsubscribe: List-Post: List-Owner: List-Archive: --000000000000edb99a05c883ee4b Content-Type: text/plain; charset="UTF-8" On Wed, Jul 28, 2021 at 6:23 AM Bart Schaefer wrote: > > I think it's actually a bit weird to allow _expand_alias to work as a > completer at all, because the completion system generally functions > very badly when the matches do not consist of single words, and > aliases don't usually have one-word replacements. As soon as you > introduce something that contains spaces, completion gets very > confused (unless you force it directly into menu completion or > selection); if (otherwise) you attempt to press TAB twice to enter > menu completion, it'll instead start a new completion based on the > word after the rightmost space that is still to the left of the > cursor. This is especially true when using compadd -U. > > I suspect this may be where Oliver's tests and Marlon's attempt to > reproduce, went astray from one another. In any case, I'm fairly sure > this is the reason that _expand_alias (before the patch) does not > allow other completers to run, and similarly it's why the user is > admonished to place _expand before _complete in the zstyle. > > Looking independently at the two questions, my feeling is I'd avoid > the patch as-is, but it wouldn't be unreasonable for _expand to handle > aliases (under control of a zstyle). Alright, here's a new patch, which moves the alias expansion code from _expand_alias to _expand (and refactors it) and deprecates _expand_alias's use as a completer. I also updated the documentation and added tests. Note that I reused the zstyle names from _expand_alias in _alias. I think their names are less than optimal in _expand, but renaming them would break people's existing zstyle config for _expand_alias. --000000000000edb99a05c883ee4b Content-Type: text/plain; charset="US-ASCII"; name="0001-Make-_expand-handle-aliases.txt" Content-Disposition: attachment; filename="0001-Make-_expand-handle-aliases.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_krtk3klj0 RnJvbSA3NDY3YWJiNDgyODI0NjUwOTEzNjM2MzQwODQ0OTE5YmU0YmNmMjEyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXJsb24gUmljaGVydCA8bWFybG9ucmljaGVydEB1c2Vycy5u b3JlcGx5LmdpdGh1Yi5jb20+CkRhdGU6IFN1biwgMSBBdWcgMjAyMSAyMTo0MDowMSArMDMwMApT dWJqZWN0OiBbUEFUQ0hdIE1ha2UgX2V4cGFuZCBoYW5kbGUgYWxpYXNlcwoKVGhpcyBkZXByZWNh dGVzIF9leHBhbmRfYWxpYXMncyB1c2UgYXMgYSBjb21wbGV0ZXIuCi0tLQogQ29tcGxldGlvbi9C YXNlL0NvbXBsZXRlci9fZXhwYW5kICAgICAgIHwgNzQgKysrKysrKysrKysrKysrKysrKysrKysr LQogQ29tcGxldGlvbi9CYXNlL0NvbXBsZXRlci9fZXhwYW5kX2FsaWFzIHwgNzAgKysrLS0tLS0t LS0tLS0tLS0tLS0tLS0KIERvYy9ac2gvY29tcHN5cy55byAgICAgICAgICAgICAgICAgICAgICB8 IDYyICsrKysrKysrKy0tLS0tLS0tLS0tLQogVGVzdC9ZMDFjb21wbGV0aW9uLnp0c3QgICAgICAg ICAgICAgICAgIHwgMTYgKysrKystCiA0IGZpbGVzIGNoYW5nZWQsIDEyMCBpbnNlcnRpb25zKCsp LCAxMDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvQ29tcGxldGlvbi9CYXNlL0NvbXBsZXRl ci9fZXhwYW5kIGIvQ29tcGxldGlvbi9CYXNlL0NvbXBsZXRlci9fZXhwYW5kCmluZGV4IDg2YjRh YzZlNC4uN2EyNGY4YWExIDEwMDY0NAotLS0gYS9Db21wbGV0aW9uL0Jhc2UvQ29tcGxldGVyL19l eHBhbmQKKysrIGIvQ29tcGxldGlvbi9CYXNlL0NvbXBsZXRlci9fZXhwYW5kCkBAIC0xMSwxMSAr MTEsMTIgQEAgc2V0b3B0IGxvY2Fsb3B0aW9ucyBub25vbWF0Y2gKIAogW1sgX21hdGNoZXJfbnVt IC1ndCAxIF1dICYmIHJldHVybiAxCiAKLWxvY2FsIGV4cCB3b3JkIHNvcnQgZXhwciBleHBsIHN1 YmQgcHJlZiBzdWY9IiAiIGZvcmNlIG9wdCBhc3AgdG1wIG9wcmUgcHJlIGVwcmUKLWxvY2FsIGNv bnRpbnVlPTAKK2xvY2FsIC1hIGV4cCBzdWJkIHRtcGEgbWF0Y2ggbWJlZ2luIG1lbmQKK2xvY2Fs IC1pIGNvbnRpbnVlPTAKK2xvY2FsIHdvcmQgc29ydCBleHBsIHByZWYgc3VmPScgJyBmb3JjZSBv cHQgYXNwIHRtcCBvcHJlIHByZSBlcHJlCiAKICgoICQjICkpICYmCi0gICAgd2hpbGUgZ2V0b3B0 cyBnc2NvIG9wdDsgZG8KKyAgICB3aGlsZSBnZXRvcHRzIGFnc2NvIG9wdDsgZG8KICAgICAgIGZv cmNlPSIkZm9yY2Ukb3B0IgogICAgIGRvbmUKIApAQCAtMjUsNiArMjYsNzMgQEAgZWxzZQogICB3 b3JkPSIkSVBSRUZJWCRQUkVGSVgkU1VGRklYJElTVUZGSVgiCiBmaQogCisjIEFsaWFzIGV4cGFu c2lvbjoKKygpIHsKKworICBpZiB7ICgoIENVUlJFTlQgPT0gMSApKSAmJiB6c3R5bGUgLVQgIjpj b21wbGV0aW9uOiR7Y3VyY29udGV4dH06IiByZWd1bGFyIH0gfHwKKyAgICAgIHpzdHlsZSAtdCAi OmNvbXBsZXRpb246JHtjdXJjb250ZXh0fToiIHJlZ3VsYXIgYWx3YXlzOyB0aGVuIAorICAgIGV4 cD0oICRhbGlhc2VzWyR3b3JkXSApCisgICAgaWYgW1sgLW4gIiRleHAiIF1dOyB0aGVuCisgICAg ICAjIElmIHRoZSBmaXJzdCBzaGVsbCB3b3JkIGluIHRoZSBleHBhbnNpb24gaXMgdGhlIHNhbWUg YXMgdGhlIGFsaWFzLCB0aGVuIAorICAgICAgIyBlc2NhcGUgaXQsIHNvIGl0IGRvZXNuJ3QgZ2V0 IHJlLWV4cGFuZGVkIG9uIGV4ZWN1dGlvbi4KKyAgICAgIFtbICIkeyR7KHopZXhwfVsxXX0iID0g IiR3b3JkIiBdXSAmJgorICAgICAgICAgIGV4cD0oICIkeyhTKWV4cC8jKCNiKSgqKSR3b3JkLyRt YXRjaFsxXVxcJHdvcmR9IiApCisgICAgICByZXR1cm4gMAorICAgIGZpCisgIGZpCisKKyAgaWYg enN0eWxlIC1UICI6Y29tcGxldGlvbjoke2N1cmNvbnRleHR9OiIgZ2xvYmFsOyB0aGVuCisgICAg ZXhwPSggJGdhbGlhc2VzWyR3b3JkXSApCisgICAgaWYgW1sgLW4gIiRleHAiIF1dOyB0aGVuCisg ICAgICAjIEVzY2FwZSBhbGwgb2NjdXJlbmNlcyBvZiB0aGUgZ2xvYmFsIGFsaWFzIGluIGl0cyBl eHBhbnNpb24sIHNvIHRoZXNlIAorICAgICAgIyBkb24ndCBnZXQgcmUtZXhwYW5kZWQgb24gZXhl Y3V0aW9uLgorICAgICAgdG1wPSIkZXhwIgorICAgICAgdG1wYT0oICR7KHopdG1wfSApCisgICAg ICBleHA9KCkKKyAgICAgIHdoaWxlICgoICR7I3RtcGFbQF19ICkpOyBkbworICAgICAgICBleHBb MV0rPSIkeyhNKXRtcCMqJHRtcGFbMV19IgorICAgICAgICB0bXA9IiR7dG1wIyokdG1wYVsxXX0i CisgICAgICAgIFtbICIkdG1wYVsxXSIgPT0gIiR3b3JkIiBdXSAmJgorICAgICAgICAgICAgZXhw WzFdPSIke2V4cC8lJHdvcmQvXFwkd29yZH0iCisgICAgICAgIHNoaWZ0IHRtcGEKKyAgICAgIGRv bmUKKyAgICAgIGV4cFsxXSs9IiR0bXAiCisgICAgICB0bXA9CisgICAgICByZXR1cm4gMAorICAg IGZpCisgIGZpCisKKyAgaWYgenN0eWxlIC10ICI6Y29tcGxldGlvbjoke2N1cmNvbnRleHR9OiIg ZGlzYWJsZWQ7IHRoZW4KKyAgICBleHA9KCAkZGlzX2FsaWFzZXNbJHdvcmRdICkKKyAgICBbWyAt biAiJGV4cCIgXV0gJiYgCisgICAgICAgIHJldHVybgorICBmaQorCisgIGlmIHpzdHlsZSAtVCAi OmNvbXBsZXRpb246JHtjdXJjb250ZXh0fToiIGdsb2JhbCAmJiAKKyAgICAgIHpzdHlsZSAtdCAi OmNvbXBsZXRpb246JHtjdXJjb250ZXh0fToiIGRpc2FibGVkOyB0aGVuCisgICAgZXhwPSggJGRp c19nYWxpYXNlc1skd29yZF0gKQorICAgIFtbIC1uICIkZXhwIiBdXSAmJgorICAgICAgICByZXR1 cm4KKyAgZmkKKworICByZXR1cm4gMQorCit9ICYmIHsKKyAgenN0eWxlIC1UICI6Y29tcGxldGlv bjoke2N1cmNvbnRleHR9OiIgYWRkLXNwYWNlIHRydWUgeWVzIG9uIDEgJiYKKyAgICAgIHRtcGE9 KCAtUyAnICcgKQorICBfZGVzY3JpcHRpb24gZXhwYW5zaW9ucyBleHBsIGV4cGFuc2lvbnMgIm86 JHdvcmQiCisKKyAgaWYgY29tcGFkZCAiJGV4cGxbQF0iIC1VUSAkdG1wYVtAXSAtLSAkZXhwOyB0 aGVuCisgICAgISB6c3R5bGUgLXQgIjpjb21wbGV0aW9uOiR7Y3VyY29udGV4dH06IiBhY2NlcHQt ZXhhY3QgY29udGludWUKKyAgICByZXR1cm4KKyAgZmkKKworfQorCisjIElmIHdlJ3ZlIGJlZW4g Y2FsbGVkIHdpdGggYC1hYCwgdGhlbiBkb24ndCBleHBhbmQgYW55dGhpbmcgZWxzZSB0aGFuIGFs aWFzZXMuCitbWyAiJGZvcmNlIiA9ICphKiBdXSAmJgorICAgIHJldHVybiAxCisKIFtbICIkd29y ZCIgPSAqXCQofFx7W15cfV0jKSB8fAogICAgKCAiJHdvcmQiID0gKlwkW2EtekEtWjAtOV9dIyMg JiYgJCtwYXJhbWV0ZXJzWyR7d29yZCMjKlwkfV0gLWVxIDAgKSBdXSAmJgogICAgIHJldHVybiAx CmRpZmYgLS1naXQgYS9Db21wbGV0aW9uL0Jhc2UvQ29tcGxldGVyL19leHBhbmRfYWxpYXMgYi9D b21wbGV0aW9uL0Jhc2UvQ29tcGxldGVyL19leHBhbmRfYWxpYXMKaW5kZXggODI0MGU0MTYyLi5j NTg4ZGZhZGIgMTAwNjQ0Ci0tLSBhL0NvbXBsZXRpb24vQmFzZS9Db21wbGV0ZXIvX2V4cGFuZF9h bGlhcworKysgYi9Db21wbGV0aW9uL0Jhc2UvQ29tcGxldGVyL19leHBhbmRfYWxpYXMKQEAgLTEs NjcgKzEsMTUgQEAKLSNjb21wZGVmIC1LIF9leHBhbmRfYWxpYXMgY29tcGxldGUtd29yZCBcQy14 YQorI2NvbXBkZWYgLUsgX2V4cGFuZF9hbGlhcyBjb21wbGV0ZS13b3JkIFxDLVhhCiAKLWxvY2Fs IHdvcmQgZXhwbCB0bXAgcHJlIHNlbCB3aGF0Ci1sb2NhbCAtYSB0bXBhIHN1ZgotCi1ldmFsICIk X2NvbXBfc2V0dXAiCi0KLWlmIFtbIC1uICRmdW5jc3RhY2tbMl0gXV07IHRoZW4KLSAgaWYgW1sg IiRmdW5jc3RhY2tbMl0iID0gX3ByZWZpeCBdXTsgdGhlbgotICAgIHdvcmQ9IiRJUFJFRklYJFBS RUZJWCRTVUZGSVgiCi0gIGVsc2UKLSAgICB3b3JkPSIkSVBSRUZJWCRQUkVGSVgkU1VGRklYJElT VUZGSVgiCi0gIGZpCi0gIHByZT0oKQoraWYgKCggJHtmdW5jc3RhY2tbKEkpX21haW5fY29tcGxl dGVdfSApKTsgdGhlbgorICBjb21wc3RhdGVbdG9fZW5kXT1tYXRjaAorICBfbWFpbl9jb21wbGV0 ZSBfZXhwYW5kX2FsaWFzCiBlbHNlCi0gIGxvY2FsIGN1cmNvbnRleHQ9IiRjdXJjb250ZXh0Igog Ci0gIGlmIFtbIC16ICIkY3VyY29udGV4dCIgXV07IHRoZW4KLSAgICBjdXJjb250ZXh0PSJleHBh bmQtYWxpYXMtd29yZDo6OiIKLSAgZWxzZQotICAgIGN1cmNvbnRleHQ9ImV4cGFuZC1hbGlhcy13 b3JkOiR7Y3VyY29udGV4dCMqOn0iCisgIGlmIF9leHBhbmQgLWE7IHRoZW4KKyAgICBjb21wc3Rh dGVbaW5zZXJ0XT0xCisgICAgcmV0dXJuCiAgIGZpCiAKLSAgd29yZD0iJElQUkVGSVgkUFJFRklY JFNVRkZJWCRJU1VGRklYIgotICBwcmU9KF9tYWluX2NvbXBsZXRlIC0gYWxpYXNlcykKLWZpCi0K LXpzdHlsZSAtcyAiOmNvbXBsZXRpb246JHtjdXJjb250ZXh0fToiIHJlZ3VsYXIgdG1wIHx8IHRt cD15ZXMKLWNhc2UgJHRtcCBpbgotYWx3YXlzKSBzZWw9cjs7Ci15ZXN8MXx0cnVlfG9uKSBbWyBD VVJSRU5UIC1lcSAxIF1dICYmIHNlbD1yOzsKLWVzYWMKLXpzdHlsZSAtVCAiOmNvbXBsZXRpb246 JHtjdXJjb250ZXh0fToiIGdsb2JhbCAmJiBzZWw9Imckc2VsIgotenN0eWxlIC10ICI6Y29tcGxl dGlvbjoke2N1cmNvbnRleHR9OiIgZGlzYWJsZWQgJiYgc2VsPSIke3NlbH0keyhVKXNlbH0iCi0K LXRtcD0KLVtbICRzZWwgPSAqciogXV0gJiYgdG1wPSRhbGlhc2VzWyR3b3JkXQotW1sgLXogJHRt cCAmJiAkc2VsID0gKmcqIF1dICYmIHRtcD0kZ2FsaWFzZXNbJHdvcmRdCi1bWyAteiAkdG1wICYm ICRzZWwgPSAqUiogXV0gJiYgdG1wPSRkaXNfYWxpYXNlc1skd29yZF0KLVtbIC16ICR0bXAgJiYg JHNlbCA9ICpHKiBdXSAmJiB0bXA9JGRpc19nYWxpYXNlc1skd29yZF0KLQotaWYgW1sgLW4gJHRt cCBdXTsgdGhlbgotICAjIFdlIHVzZWQgdG8gcmVtb3ZlIHRoZSBxdW90aW5nIGZyb20gdGhlIHZh bHVlIGluIHRoZSBwYXJhbWV0ZXIuCi0gICMgVGhhdCB3YXMgcHJvYmFibHkganVzdCBhbiBvdmVy c2lnaHQ6IGFuIGFsaWFzIGlzIGFsd2F5cyByZXBsYWNlZAotICAjIGxpdGVyYWxseS4KLSAgdG1w PSR7dG1wJSVbWzpibGFuazpdXSMjfQotICBpZiBbWyAkdG1wWzFdID0gW1s6YWxudW06XV9dIF1d OyB0aGVuCi0gICAgdG1wYT0oJHsoeil0bXB9KQotICAgIGlmIFtbICR0bXBhWzFdID0gJHdvcmQg JiYgJHRtcCA9ICRhbGlhc2VzWyR3b3JkXSBdXTsgdGhlbgotICAgICAgIyBUaGlzIGlzIGFuIGFj dGl2ZSByZWd1bGFyIGFsaWFzIGFuZCB0aGUgZmlyc3Qgd29yZCBpbiB0aGUgcmVzdWx0Ci0gICAg ICAjIGlzIHRoZSBzYW1lIGFzIHdoYXQgd2FzIG9uIHRoZSBsaW5lIGFscmVhZHkuICBRdW90ZSBp dCBzbwotICAgICAgIyB0aGF0IGl0IGRvZXNuJ3QgZ2V0IHJlZXhhbmRlZCBvbiBleGVjdXRpb24u Ci0gICAgICAjCi0gICAgICAjIFN0cmljdGx5IHdlIGFsc28gbmVlZCB0byBjaGVjayBpZiB0aGUg b3JpZ2luYWwgd29yZCBtYXRjaGVzCi0gICAgICAjIGEgbGF0ZXIgd29yZCBpbiB0aGUgZXhwYW5z aW9uIGFuZCB0aGUgcHJldmlvdXMgd29yZHMgYXJlCi0gICAgICAjIGFsbCBhbGlhc2VzIHdoZXJl IHRoZSBleHBhbnNpb24gZW5kcyBpbiAiICIsIGJ1dCBJJ20KLSAgICAgICMgdG9vIGxhenkuCi0g ICAgICB0bXA9IlxcJHRtcCIKLSAgICBmaQotICBmaQotICB6c3R5bGUgLVQgIjpjb21wbGV0aW9u OiR7Y3VyY29udGV4dH06IiBhZGQtc3BhY2UgfHwgc3VmPSggLVMgJycgKQotICAkcHJlIF93YW50 ZWQgYWxpYXNlcyBleHBsIGFsaWFzIGNvbXBhZGQgLVVRICIkc3VmW0BdIiAtLSAke3RtcCUlW1s6 Ymxhbms6XV0jI30KLWVsaWYgKCggJCNwcmUgKSkgJiYgenN0eWxlIC10ICI6Y29tcGxldGlvbjok e2N1cmNvbnRleHR9OiIgY29tcGxldGU7IHRoZW4KLSAgJHByZSBfYWxpYXNlcyAtcyAiJHNlbCIg LVMgJycKLWVsc2UKLSAgcmV0dXJuIDEKKyAgenN0eWxlIC10ICI6Y29tcGxldGlvbjoke2N1cmNv bnRleHR9OiIgY29tcGxldGUgJiYKKyAgICAgIF9tYWluX2NvbXBsZXRlIC0gZXhwYW5kLWFsaWFz IF9hbGlhc2VzCiBmaQpkaWZmIC0tZ2l0IGEvRG9jL1pzaC9jb21wc3lzLnlvIGIvRG9jL1pzaC9j b21wc3lzLnlvCmluZGV4IDg5YjkxOGQ2MC4uODhhMzY4NjA4IDEwMDY0NAotLS0gYS9Eb2MvWnNo L2NvbXBzeXMueW8KKysrIGIvRG9jL1pzaC9jb21wc3lzLnlvCkBAIC0xMTc5LDEwICsxMTc5LDEw IEBAIHN0eWxlIChzZWUgYmVsb3cpIHRvIGBmYWxzZScuCiApCiBraW5kZXgoYWRkLXNwYWNlLCBj b21wbGV0aW9uIHN0eWxlKQogaXRlbSh0dChhZGQtc3BhY2UpKSgKLVRoaXMgc3R5bGUgaXMgdXNl ZCBieSB0aGUgdHQoX2V4cGFuZCkgY29tcGxldGVyLiAgSWYgaXQgaXMgYHRydWUnICh0aGUKLWRl ZmF1bHQpLCBhIHNwYWNlIHdpbGwgYmUgaW5zZXJ0ZWQgYWZ0ZXIgYWxsIHdvcmRzIHJlc3VsdGlu ZyBmcm9tIHRoZSAKLWV4cGFuc2lvbiwgb3IgYSBzbGFzaCBpbiB0aGUgY2FzZSBvZiBkaXJlY3Rv cnkgbmFtZXMuICBJZiB0aGUgdmFsdWUKLWlzIGB0dChmaWxlKScsIHRoZSBjb21wbGV0ZXIgd2ls bCBvbmx5IGFkZCBhIHNwYWNlCitUaGlzIHN0eWxlIGlzIHVzZWQgYnkgdGhlIHR0KF9leHBhbmQp IGNvbXBsZXRlciBhbmQgdGhlIHR0KF9leHBhbmRfYWxpYXMpIAorYmluZGFibGUgY29tbWFuZC4g IElmIGl0IGlzIGB0cnVlJyAodGhlIGRlZmF1bHQpLCBhIHNwYWNlIHdpbGwgYmUgaW5zZXJ0ZWQg CithZnRlciBhbGwgd29yZHMgcmVzdWx0aW5nIGZyb20gdGhlIGV4cGFuc2lvbiwgb3IgYSBzbGFz aCBpbiB0aGUgY2FzZSBvZiAKK2RpcmVjdG9yeSBuYW1lcy4gIElmIHRoZSB2YWx1ZSBpcyBgdHQo ZmlsZSknLCB0aGUgY29tcGxldGVyIHdpbGwgb25seSBhZGQgYSBzcGFjZQogdG8gbmFtZXMgb2Yg ZXhpc3RpbmcgZmlsZXMuICBFaXRoZXIgYSBib29sZWFuIGB0cnVlJyBvciB0aGUgdmFsdWUKIGB0 dChmaWxlKScgbWF5IGJlIGNvbWJpbmVkIHdpdGggYHR0KHN1YnN0KScsIGluIHdoaWNoIGNhc2Ug dGhlIGNvbXBsZXRlcgogd2lsbCBub3QgYWRkIGEgc3BhY2UgdG8gd29yZHMgZ2VuZXJhdGVkIGZy b20gdGhlIGV4cGFuc2lvbiBvZiBhCkBAIC0xMjk1LDEwICsxMjk1LDkgQEAgdGhlIHR3byBzdHJp bmdzIGB0dChzdGFydCknIGFuZCBgdHQoc3RvcCknLgogKQoga2luZGV4KGNvbXBsZXRlLCBjb21w bGV0aW9uIHN0eWxlKQogaXRlbSh0dChjb21wbGV0ZSkpKAotVGhpcyBpcyB1c2VkIGJ5IHRoZSB0 dChfZXhwYW5kX2FsaWFzKSBmdW5jdGlvbiB3aGVuIGludm9rZWQgYXMgYQotYmluZGFibGUgY29t bWFuZC4gIElmIHNldCB0byBgdHJ1ZScgYW5kIHRoZSB3b3JkIG9uIHRoZSBjb21tYW5kCi1saW5l IGlzIG5vdCB0aGUgbmFtZSBvZiBhbiBhbGlhcywgbWF0Y2hpbmcgYWxpYXMgbmFtZXMgd2lsbCBi ZQotY29tcGxldGVkLgorV2hlbiB0aGUgdHQoX2V4cGFuZF9hbGlhcykgYmluZGFibGUgY29tbWFu ZCBpcyBpbnZva2VkLCBpZiB0dChjb21wbGV0ZSkgaXMgc2V0IAordG8gYHRydWUnIGFuZCB0aGUg d29yZCBvbiB0aGUgY29tbWFuZCBsaW5lIGlzIG5vdCB0aGUgbmFtZSBvZiBhbiBhbGlhcywgCitt YXRjaGluZyBhbGlhcyBuYW1lcyB3aWxsIGJlIGNvbXBsZXRlZC4KICkKIGtpbmRleChjb21wbGV0 ZS1vcHRpb25zLCBjb21wbGV0aW9uIHN0eWxlKQogaXRlbSh0dChjb21wbGV0ZS1vcHRpb25zKSko CkBAIC0xMzYyLDggKzEzNjEsOCBAQCBtYXkgYmUgZW1wdHkgdG8gZm9yY2UgYSBkZWxpbWl0ZXIg dG8gYmUgdHlwZWQuCiApCiBraW5kZXgoZGlzYWJsZWQsIGNvbXBsZXRpb24gc3R5bGUpCiBpdGVt KHR0KGRpc2FibGVkKSkoCi1JZiB0aGlzIGlzIHNldCB0byBgdHJ1ZScsIHRoZSB0dChfZXhwYW5k X2FsaWFzKSBjb21wbGV0ZXIgYW5kIGJpbmRhYmxlIAotY29tbWFuZCB3aWxsIHRyeSB0byBleHBh bmQgZGlzYWJsZWQgYWxpYXNlcywgdG9vLiAgVGhlIGRlZmF1bHQgaXMKK0lmIHRoaXMgaXMgc2V0 IHRvIGB0cnVlJywgdGhlIHR0KF9leHBhbmQpIGNvbXBsZXRlciBhbmQgdGhlIHR0KF9leHBhbmRf YWxpYXMpIAorYmluZGFibGUgY29tbWFuZCB3aWxsIHRyeSB0byBleHBhbmQgZGlzYWJsZWQgYWxp YXNlcywgdG9vLiAgVGhlIGRlZmF1bHQgaXMKIGBmYWxzZScuCiApCiBraW5kZXgoZG9tYWlucywg Y29tcGxldGlvbiBzdHlsZSkKQEAgLTE2NTYsOCArMTY1NSw4IEBAIHN0eWxlKSBvciBlbHNlIHRo ZSBvcmlnaW5hbCBzdHJpbmcgZnJvbSB0aGUgbGluZS4KICkKIGtpbmRleChnbG9iYWwsIGNvbXBs ZXRpb24gc3R5bGUpCiBpdGVtKHR0KGdsb2JhbCkpKAotSWYgdGhpcyBpcyBzZXQgdG8gYHRydWUn ICh0aGUgZGVmYXVsdCksIHRoZSB0dChfZXhwYW5kX2FsaWFzKQotY29tcGxldGVyIGFuZCBiaW5k YWJsZSBjb21tYW5kIHdpbGwgdHJ5IHRvIGV4cGFuZCBnbG9iYWwgYWxpYXNlcy4KK0lmIHRoaXMg aXMgc2V0IHRvIGB0cnVlJyAodGhlIGRlZmF1bHQpLCB0aGUgdHQoX2V4cGFuZCkgY29tcGxldGVy IGFuZCB0aGUgCit0dChfZXhwYW5kX2FsaWFzKSBiaW5kYWJsZSBjb21tYW5kIHdpbGwgdHJ5IHRv IGV4cGFuZCBnbG9iYWwgYWxpYXNlcy4KICkKIGtpbmRleChncm91cC1uYW1lLCBjb21wbGV0aW9u IHN0eWxlKQogaXRlbSh0dChncm91cC1uYW1lKSkoCkBAIC0yNDgwLDExICsyNDc5LDExIEBAIHR0 KHpsZV90cjxUQUI+KSBjYW4gYmUgY29tcGxldGVkIHRvIHR0KFpsZS96bGVfdHJpY2t5LmMpLgog KQoga2luZGV4KHJlZ3VsYXIsIGNvbXBsZXRpb24gc3R5bGUpCiBpdGVtKHR0KHJlZ3VsYXIpKSgK LVRoaXMgc3R5bGUgaXMgdXNlZCBieSB0aGUgdHQoX2V4cGFuZF9hbGlhcykgY29tcGxldGVyIGFu ZCBiaW5kYWJsZSAKLWNvbW1hbmQuICBJZiBzZXQgdG8gYHRydWUnICh0aGUgZGVmYXVsdCksIHJl Z3VsYXIgYWxpYXNlcyB3aWxsIGJlCi1leHBhbmRlZCBidXQgb25seSBpbiBjb21tYW5kIHBvc2l0 aW9uLiAgSWYgaXQgaXMgc2V0IHRvIGBmYWxzZScsCi1yZWd1bGFyIGFsaWFzZXMgd2lsbCBuZXZl ciBiZSBleHBhbmRlZC4gICBJZiBpdCBpcyBzZXQgdG8gYHR0KGFsd2F5cyknLAotcmVndWxhciBh bGlhc2VzIHdpbGwgYmUgZXhwYW5kZWQgZXZlbiBpZiBub3QgaW4gY29tbWFuZCBwb3NpdGlvbi4K K1RoaXMgc3R5bGUgaXMgdXNlZCBieSB0aGUgdHQoX2V4cGFuZCkgY29tcGxldGVyIGFuZCB0aGUg dHQoX2V4cGFuZF9hbGlhcykgCitiaW5kYWJsZSBjb21tYW5kLiAgSWYgc2V0IHRvIGB0cnVlJyAo dGhlIGRlZmF1bHQpLCByZWd1bGFyIGFsaWFzZXMgd2lsbCBiZQorZXhwYW5kZWQgYnV0IG9ubHkg aW4gY29tbWFuZCBwb3NpdGlvbi4gIElmIGl0IGlzIHNldCB0byBgZmFsc2UnLCByZWd1bGFyIAor YWxpYXNlcyB3aWxsIG5ldmVyIGJlIGV4cGFuZGVkLiAgIElmIGl0IGlzIHNldCB0byBgdHQoYWx3 YXlzKScsIHJlZ3VsYXIgYWxpYXNlcyAKK3dpbGwgYmUgZXhwYW5kZWQgZXZlbiBpZiBub3QgaW4g Y29tbWFuZCBwb3NpdGlvbi4KICkKIGtpbmRleChyZWhhc2gsIGNvbXBsZXRpb24gc3R5bGUpCiBp dGVtKHR0KHJlaGFzaCkpKApAQCAtMzE3MywxNyArMzE3Miw4IEBAIHR0KGdsb2IpIGFuZCB0dChz dWJzdC1nbG9icy1vbmx5KSBzdHlsZXMuCiAKIEl0IGlzIGFsc28gcG9zc2libGUgdG8gY2FsbCB0 dChfZXhwYW5kKSBhcyBhIGZ1bmN0aW9uLCBpbiB3aGljaCBjYXNlIHRoZQogZGlmZmVyZW50IG1v ZGVzIG1heSBiZSBzZWxlY3RlZCB3aXRoIG9wdGlvbnM6IHR0KC1zKSBmb3IKLXR0KHN1YnN0aXR1 dGUpLCB0dCgtZykgZm9yIHR0KGdsb2IpIGFuZCB0dCgtbykgZm9yIHR0KHN1YnN0LWdsb2JzLW9u bHkpLgotKQotZmluZGV4KF9leHBhbmRfYWxpYXMpCi1pdGVtKHR0KF9leHBhbmRfYWxpYXMpKSgK LUlmIHRoZSB3b3JkIHRoZSBjdXJzb3IgaXMgb24gaXMgYW4gYWxpYXMsIGl0IGlzIGV4cGFuZGVk IGFuZCBubyBvdGhlcgotY29tcGxldGVycyBhcmUgY2FsbGVkLiAgVGhlIHR5cGVzIG9mIGFsaWFz ZXMgd2hpY2ggYXJlIHRvIGJlIGV4cGFuZGVkIGNhbgotYmUgY29udHJvbGxlZCB3aXRoIHRoZSBz dHlsZXMgdHQocmVndWxhciksIHR0KGdsb2JhbCkgYW5kIHR0KGRpc2FibGVkKS4KLQotVGhpcyBm dW5jdGlvbiBpcyBhbHNvIGEgYmluZGFibGUgY29tbWFuZCwgc2VlCi1pZnptYW4odGhlIHNlY3Rp b24gYEJpbmRhYmxlIENvbW1hbmRzJyBiZWxvdylcCi1pZm56bWFuKG5vZGVyZWYoQmluZGFibGUg Q29tbWFuZHMpKS4KK3R0KHN1YnN0aXR1dGUpLCB0dCgtZykgZm9yIHR0KGdsb2IpIGFuZCB0dCgt bykgZm9yIHR0KHN1YnN0LWdsb2JzLW9ubHkpLiAKK0FsdGVybmF0aXZlbHksIGlmIGNhbGxlZCB3 aXRoIHR0KC1hKSwgdHQoX2V4cGFuZCkgd2lsbCBkbyBhbGlhcyBleHBhbnNpb24gb25seS4KICkK IGZpbmRleChfZXh0ZW5zaW9ucykKIGl0ZW0odHQoX2V4dGVuc2lvbnMpKSgKQEAgLTM0MDYsMTcg KzMzOTYsMTUgQEAgdGhlbiBjYWxscyB0aGUgdHQoX2NvcnJlY3QpIGNvbXBsZXRlci4KICkKIGZp bmRleChfZXhwYW5kX2FsaWFzICheWGEpKQogaXRlbSh0dChfZXhwYW5kX2FsaWFzKSAodHQoXlhh KSkpKAotVGhpcyBmdW5jdGlvbiBjYW4gYmUgdXNlZCBhcyBhIGNvbXBsZXRlciBhbmQgYXMgYSBi aW5kYWJsZSBjb21tYW5kLgotSXQgZXhwYW5kcyB0aGUgd29yZCB0aGUgY3Vyc29yIGlzIG9uIGlm IGl0IGlzIGFuIGFsaWFzLiAgVGhlIHR5cGVzIG9mCi1hbGlhcyBleHBhbmRlZCBjYW4gYmUgY29u dHJvbGxlZCB3aXRoIHRoZSBzdHlsZXMgdHQocmVndWxhciksIHR0KGdsb2JhbCkKK1RoaXMgZnVu Y3Rpb24gZXhwYW5kcyB0aGUgd29yZCB0aGUgY3Vyc29yIGlzIG9uIGlmIGl0IGlzIGFuIGFsaWFz LiAgVGhlIHR5cGVzIAorb2YgYWxpYXMgZXhwYW5kZWQgY2FuIGJlIGNvbnRyb2xsZWQgd2l0aCB0 aGUgc3R5bGVzIHR0KHJlZ3VsYXIpLCB0dChnbG9iYWwpCiBhbmQgdHQoZGlzYWJsZWQpLgogCi1X aGVuIHVzZWQgYXMgYSBiaW5kYWJsZSBjb21tYW5kIHRoZXJlIGlzIG9uZSBhZGRpdGlvbmFsIGZl YXR1cmUgdGhhdAotY2FuIGJlIHNlbGVjdGVkIGJ5IHNldHRpbmcgdGhlIHR0KGNvbXBsZXRlKSBz dHlsZSB0byBgdHJ1ZScuICBJbiB0aGlzCi1jYXNlLCBpZiB0aGUgd29yZCBpcyBub3QgdGhlIG5h bWUgb2YgYW4gYWxpYXMsIHR0KF9leHBhbmRfYWxpYXMpIHRyaWVzCi10byBjb21wbGV0ZSB0aGUg d29yZCB0byBhIGZ1bGwgYWxpYXMgbmFtZSB3aXRob3V0IGV4cGFuZGluZyBpdC4gIEl0Ci1sZWF2 ZXMgdGhlIGN1cnNvciBkaXJlY3RseSBhZnRlciB0aGUgY29tcGxldGVkIHdvcmQgc28gdGhhdCBp bnZva2luZwotdHQoX2V4cGFuZF9hbGlhcykgb25jZSBtb3JlIHdpbGwgZXhwYW5kIHRoZSBub3ct Y29tcGxldGUgYWxpYXMgbmFtZS4KK0FkZGl0aW9uYWxseSwgaWYgdGhlIHR0KGNvbXBsZXRlKSBz dHlsZSBpcyBzZXQgdG8gYHRydWUnIGFuZCB0aGUgd29yZCBpcyBub3QgCit0aGUgbmFtZSBvZiBh biBhbGlhcywgdGhlbiB0dChfZXhwYW5kX2FsaWFzKSB0cmllcyB0byBjb21wbGV0ZSB0aGUgd29y ZCB0byBhIAorZnVsbCBhbGlhcyBuYW1lIHdpdGhvdXQgZXhwYW5kaW5nIGl0LiAgSXQgbGVhdmVz IHRoZSBjdXJzb3IgZGlyZWN0bHkgYWZ0ZXIgdGhlIAorY29tcGxldGVkIHdvcmQgc28gdGhhdCBp bnZva2luZyB0dChfZXhwYW5kX2FsaWFzKSBvbmNlIG1vcmUgd2lsbCBleHBhbmQgdGhlIAorbm93 LWNvbXBsZXRlIGFsaWFzIG5hbWUuCiApCiBmaW5kZXgoX2V4cGFuZF93b3JkICheWGUpKQogaXRl bSh0dChfZXhwYW5kX3dvcmQpICh0dCheWGUpKSkoCmRpZmYgLS1naXQgYS9UZXN0L1kwMWNvbXBs ZXRpb24uenRzdCBiL1Rlc3QvWTAxY29tcGxldGlvbi56dHN0CmluZGV4IDg4MmEwYWRjNC4uZWQ3 ZjY3MzhkIDEwMDY0NAotLS0gYS9UZXN0L1kwMWNvbXBsZXRpb24uenRzdAorKysgYi9UZXN0L1kw MWNvbXBsZXRpb24uenRzdApAQCAtNDQsOCArNDQsMjIgQEAKID5saW5lOiB7OiBkaXIxL317fQog PmxpbmU6IHs6IGRpcjIvfXt9CiAKKyAgY29tcHRlc3RldmFsICJhbGlhcyBcKj0nICogKiBcJFwk IHRzdCciCisgIGNvbXB0ZXN0ZXZhbCAiYWxpYXMgLWcgJ1wkXCQnPScgKiBcJFwkIFwkXCQgdHN0 JyIKKyAgY29tcHRlc3QgJCcgKlxDLUQnCiswOl9leHBhbmQgc3Vic3RpdHV0ZXMgcmVndWxhciBh bGlhc2VzIGFuZCBlc2NhcGVzIHRoZW0sIGlmIG5lY2Vzc2FyeQorPkRFU0NSSVBUSU9OOntleHBh bnNpb25zfQorPk5POnsgXCogKiAkJCB0c3R9CisKKyAgY29tcHRlc3QgJCc6ICQkXEMtRCcKKzA6 X2V4cGFuZCBjYW4gc3Vic3RpdHV0ZXMgZ2xvYmFsIGFsaWFzZXMgYW5kIGVzY2FwZXMgdGhlbSwg aWYgbmVjZXNzYXJ5Cis+REVTQ1JJUFRJT046e2V4cGFuc2lvbnN9Cis+Tk86eyAqIFwkJCBcJCQg dHN0fQorCisgIGNvbXB0ZXN0ZXZhbCAienN0eWxlICcqJyByZWd1bGFyIG5vIgorICBjb21wdGVz dGV2YWwgInpzdHlsZSAnKicgZ2xvYmFsIG5vIgogICBjb21wdGVzdCAkJzogKlx0XHRcdFx0XHRc dCcKLTA6X2V4cGFuZCBzaG93cyBmaWxlIHR5cGVzCiswOl9leHBhbmQgc2hvd3MgZmlsZSB0eXBl cyAoYW5kIGRvZXMgbm90IHN1YnN0aXR1dGUgYWxpYXNlcywgd2hlbiB0aGlzIGlzIGRpc2FibGVk KQogPmxpbmU6IHs6IGRpcjEvfXt9CiA+REVTQ1JJUFRJT046e2V4cGFuc2lvbnN9CiA+REk6e2Rp cjF9Ci0tIAoyLjMwLjEgKEFwcGxlIEdpdC0xMzApCgo= --000000000000edb99a05c883ee4b--