From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: David Fussner via "Bug reports for GNU Emacs, the Swiss army knife of text editors" Newsgroups: gmane.emacs.bugs Subject: bug#53749: 29.0.50; [PATCH] Xref backend for TeX buffers Date: Mon, 16 Sep 2024 14:30:20 +0100 Message-ID: References: Reply-To: David Fussner Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="000000000000d81e9e06223c9204" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="26514"; mail-complaints-to="usenet@ciao.gmane.io" Cc: 53749@debbugs.gnu.org, Ikumi Keita , Dmitry Gutov , Arash Esbati , Stefan Kangas , Tassilo Horn , Eli Zaretskii , Stefan Monnier To: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Mon Sep 16 15:32:09 2024 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1sqBpo-0006km-Rx for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 16 Sep 2024 15:32:09 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1sqBpZ-0001jS-74; Mon, 16 Sep 2024 09:31:53 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1sqBpV-0001io-Kd for bug-gnu-emacs@gnu.org; Mon, 16 Sep 2024 09:31:50 -0400 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1sqBpU-0000ZY-RK for bug-gnu-emacs@gnu.org; Mon, 16 Sep 2024 09:31:49 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=debbugs.gnu.org; s=debbugs-gnu-org; h=Date:From:In-Reply-To:References:MIME-Version:To:Subject; bh=nIAlG0TVQHvLFqlwOSEpwSj8xnXR/xmTTGNgfTHbTt8=; b=V4bagc2IWbANxqbM5/AA8+aShqwq5A7GmmlsPFSdogrCNrZMRastKvCUO8abNY1nsTgSAD/imFxiQ5FCmmBRhAaNqsy0p86EmHIAQ/gDZlS6hdR+M9BJnSDe2WMxQ8ZhvHSk3ggWLYNkj3/c9Ze56dF0gSP8WMP+IGqz85+PcNhw6+u82Fn3nF31pYSYrtO7R43Zpi0x96tHeoEAZZ2Tg8bepHAt+KK4fLOYHv0APp1FzBBL37eQY4bLH9I4LCBvzq37fddKEScOTbv+WZD9FdNXQzCyx8LdMVcYf76TzlWSan22QEkM9Vi/VyCfJEghZZt+YHaAkxujSF1KdEz1pA==; Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1sqBph-0008Q8-U2 for bug-gnu-emacs@gnu.org; Mon, 16 Sep 2024 09:32:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: David Fussner Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 16 Sep 2024 13:32:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 53749 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 53749-submit@debbugs.gnu.org id=B53749.172649349932326 (code B ref 53749); Mon, 16 Sep 2024 13:32:01 +0000 Original-Received: (at 53749) by debbugs.gnu.org; 16 Sep 2024 13:31:39 +0000 Original-Received: from localhost ([127.0.0.1]:51310 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1sqBpK-0008PI-He for submit@debbugs.gnu.org; Mon, 16 Sep 2024 09:31:39 -0400 Original-Received: from mail-pf1-f171.google.com ([209.85.210.171]:47175) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1sqBpI-0008P5-Nu for 53749@debbugs.gnu.org; Mon, 16 Sep 2024 09:31:37 -0400 Original-Received: by mail-pf1-f171.google.com with SMTP id d2e1a72fcca58-7178df70f28so3346315b3a.2 for <53749@debbugs.gnu.org>; Mon, 16 Sep 2024 06:31:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=20230601; t=1726493417; x=1727098217; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=nIAlG0TVQHvLFqlwOSEpwSj8xnXR/xmTTGNgfTHbTt8=; b=NJc5qoXfqOfW7StA1P25tATWr+6lqHjKUmxzAzk5Use8n4svZxgktzWT7LfItgrnHZ Gv9LFIals07J2N8UklqP3fWt6c+3Ez2FyME+ti9YH2RTVdXI91UJ8p643eXsX+mS4hBe 0K/SdU8ZKizhoJ5D/JUx1a2JJh7rqFcovqPthsAAJTmGV8aBHMH+hP4+lp6UjfzKB52W zTWkMPixyOFfRdW5LajNdt02FKAduJ41TWf2WYmJ24iKdaODtb78fq8M3dTEw6XYgy2w vi9xnnWAmBfHjG8qJNRAWm5ZJbY3Ll3YgLruco+O6/xLb7wvWjIW3ikAuQLGPkhzObk/ ghAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1726493417; x=1727098217; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=nIAlG0TVQHvLFqlwOSEpwSj8xnXR/xmTTGNgfTHbTt8=; b=iQX96KuxW4jyrV3AvpFJMJ7W5oFYEoosKkPkrfLq/u1rNmt5tQiSUWxJ/d1+69qCG+ GyEvYPk/DbuJ4ngDWTif/W3MZ8Dtl4mQ+C2EZwnSn8gSQHNJoNsKeqkZkw03tWJcs1Q3 Ruh4J7w0wU7CObW4iP/sXFtW1fvnYTkyi9MqHLiZRLT+X/rYCQKY+H8fEEyWbrD9uSOP oDOExBy8R5v6lEbZOA5/4s0c+0+XCnWSD7O3+e/s8y7IAaGqPY8GXpk5DHAvf4VN8GzW h0LjjeUHdADT31cMO7fihHdSdJ6ivQXOojlm161plKEHA6RLOJmIh6QVo9WncDEFdeqU irbw== X-Forwarded-Encrypted: i=1; AJvYcCUgJ5NJzFpO2oXrUuXSW2ckLCTVs++akulkt/wvszTXWrBm5/kW1fCITKq8qLV6HKVfLDIf5Q==@debbugs.gnu.org X-Gm-Message-State: AOJu0YyKsB3thsUttIOGkGKD76et4WszXAe70xl1vxMUHryKXBx1+ylh aMjo0HHIUllfl2kV/g9icPTQvMK+Ue6D5IIZwH3EO5qhy2dnIQzK8tpv0f88S+THfUMxXuUqDdj z8pwCXsjKytjTE44fJRnmYcW+RVk= X-Google-Smtp-Source: AGHT+IGyBunR4Ec6jqNiQZU716W5zi0+8VKYpzYCy4+Fgl3T+Ojs0Rz8UXl++LQy0IQcmrqM4W60MVHhiZWS4DuvKoE= X-Received: by 2002:a05:6a00:acf:b0:714:241d:a323 with SMTP id d2e1a72fcca58-719261e0ebdmr23742087b3a.17.1726493417271; Mon, 16 Sep 2024 06:30:17 -0700 (PDT) In-Reply-To: X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:291888 Archived-At: --000000000000d81e9e06223c9204 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi Mattias, Arash, Here's a patch to fix the regexps and delete the unnecessary variable. Any thoughts? I'll look at adding new vars for the TeX escape and grouping chars, creating a new bug number when I have a working patch. Thanks, David. On Mon, 16 Sept 2024 at 09:33, David Fussner wrot= e: > > Hi Mattias, > > Thanks for this, and of course you are quite right on both counts: > > > but it also depends on what you want that `tex-thingatpt-exclude-chars`= variable to be > > I believe it's time I abandoned this piece of idiocy, already flagged > by several commentators before you. The basic motivation was to allow > using the new xref code in TeX files that used non-standard escape and > grouping characters. Both etags and AUCTeX address this possibility, > but the latter does it right by having three separate variables: > TeX-esc, TeX-grop, and TeX-grcl, so that these can be part of the > whole regular expression apparatus for syntax highlighting and > everything else. I had in the back of my mind to implement something > similar in tex-mode, but the half-measure of > `tex-thingatpt-exclude-chars` is the wrong way to go. > > I propose, therefore, to eliminate this variable from tex-mode and > just hard code the standard escape and grouping characters for the > time being, as in the rest of tex-mode.el, then to submit later a > patch to implement something similar to what AUCTeX does, and one > interoperable with AUCTeX, also. > > > This is not a correct way to build a regexp; > > Given the above changes, would you and your electronic servant be OK > with code like the following? > > (re-search-forward "[][\\{}\"*`'#=3D&()%,|$[:cntrl:][:blank:]]") > > (I still, I'm ashamed to confess, find the traditional regexp syntax > easier to read than rx notation, but could overcome this if you think > rx is a better fit here.) > > What do you think? > > Best, David. > > On Sat, 14 Sept 2024 at 18:26, Mattias Engdeg=C3=A5rd > wrote: > > > > Thanks for the contribution, David! My electronic servant complained ab= out some regexps: > > > > 3881 (re-search-backward (concat "[][" > > 3882 (mapconcat #'regexp-quote > > 3883 (mapcar #'char-to-string > > 3884 tex-thingatpt-ex= clude-chars)) > > 3885 "\"*`'#=3D&()%,|$[:cntrl:][:blank:]= ]")) > > > > This is not a correct way to build a regexp; `regexp-quote` can only be= used to quote strings that should match literally, not characters inside [= ...], where backslashes have no escaping power. > > > > There are various ways of doing this properly. I would suggest somethin= g like > > > > (rx-to-string `(or (in "\"#$%&'()*,=3D[]`|" cntrl blank) > > ,@tex-thingatpt-exclude-chars) > > t)) > > > > but it also depends on what you want that `tex-thingatpt-exclude-chars`= variable to be. Should it be a user option (defcustom)? The variable's doc= string is a wall of text that basically says that it can be set to whateve= r you want but things will stop working so you'd better not. > > --000000000000d81e9e06223c9204 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Fix-regexps-for-TeX-xref-backend-Bug-53749.patch" Content-Disposition: attachment; filename="0001-Fix-regexps-for-TeX-xref-backend-Bug-53749.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_m151l7cs0 RnJvbSAxYzYwNzU0MzU1NmE3Yjc5NjE1ZGJjNWU4Mzg0ZTEwZDkyZDA4MWQ1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBEYXZpZCBGdXNzbmVyIDxkZnVzc25lckBnb29nbGVtYWlsLmNv bT4KRGF0ZTogTW9uLCAxNiBTZXAgMjAyNCAxNDowNTowMSArMDEwMApTdWJqZWN0OiBbUEFUQ0hd IEZpeCByZWdleHBzIGZvciBUZVggeHJlZiBiYWNrZW5kIChCdWcjNTM3NDkpCgoqIGxpc3AvdGV4 dG1vZGVzL3RleC1tb2RlLmVsICh0ZXgtdGhpbmdhdHB0LWV4Y2x1ZGUtY2hhcnMpOiBSZW1vdmUK dmFyLgoodGV4LXRoaW5nYXRwdC0tYmVnaW5uaW5nLW9mLXN5bWJvbCwgdGV4LXRoaW5nYXRwdC0t ZW5kLW9mLXN5bWJvbCk6ClVzZSBoYXJkLWNvZGVkIGNoYXJzIGluc3RlYWQgb2YgdmFyLgotLS0K IGxpc3AvdGV4dG1vZGVzL3RleC1tb2RlLmVsIHwgNDMgKystLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAyIGluc2VydGlvbnMoKyksIDQxIGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpc3AvdGV4dG1vZGVzL3RleC1tb2RlLmVsIGIvbGlzcC90 ZXh0bW9kZXMvdGV4LW1vZGUuZWwKaW5kZXggZWMwYzBjNDdhMmQuLjZmYzQ5ODAwMDE4IDEwMDY0 NAotLS0gYS9saXNwL3RleHRtb2Rlcy90ZXgtbW9kZS5lbAorKysgYi9saXNwL3RleHRtb2Rlcy90 ZXgtbW9kZS5lbApAQCAtMzgxNCwzNyArMzgxNCw2IEBAIHRleC1jaGt0ZXgKIDs7IEVtYWNzIGFu ZCBgZXRhZ3MnIHRoaXMgd2F5IGFpbXMgdG8gaW1wcm92ZSB0aGUgdXNlciBleHBlcmllbmNlICJv dXQKIDs7IG9mIHRoZSBib3guIgogCi0oZGVmdmFyIHRleC10aGluZ2F0cHQtZXhjbHVkZS1jaGFy cyAnKD9cXCA/XHsgP1x9KQotICAiRXhjbHVkZSB0aGVzZSBjaGFycyBieSBkZWZhdWx0IGZyb20g VGVYIHRoaW5nLWF0LXBvaW50LgotCi1UaGUgVGVYIGB4cmVmLWJhY2tlbmQtaWRlbnRpZmllci1h dC1wb2ludCcgbWV0aG9kIHVzZXMgdGhlIGNoYXJhY3RlcnMKLWxpc3RlZCBpbiB0aGlzIHZhcmlh YmxlIHRvIGRlY2lkZSBvbiB0aGUgZGVmYXVsdCBzZWFyY2ggc3RyaW5nIHRvCi1wcmVzZW50IHRv IHRoZSB1c2VyIHdobyBjYWxscyBhbiBgeHJlZicgY29tbWFuZC4gIFRoZXNlIGNoYXJhY3RlcnMK LWJlY29tZSBwYXJ0IG9mIGEgcmVnZXhwIHdoaWNoIGFsd2F5cyBleGNsdWRlcyB0aGVtIGZyb20g dGhhdCBkZWZhdWx0Ci1zdHJpbmcuICBGb3IgdGhlIGB4cmVmJyBjb21tYW5kcyB0byBmdW5jdGlv biBwcm9wZXJseSBpbiBUZVggYnVmZmVycywgYXQKLWxlYXN0IHRoZSBUZVggZXNjYXBlIGFuZCB0 aGUgdHdvIFRlWCBncm91cGluZyBjaGFyYWN0ZXJzIHNob3VsZCBiZQotbGlzdGVkIGhlcmUuICBT aG91bGQgeW91ciBUZVggZG9jdW1lbnRzIGNvbnRhaW4gb3RoZXIgY2hhcmFjdGVycyB3aGljaAot eW91IHdhbnQgdG8gZXhjbHVkZSBieSBkZWZhdWx0LCB0aGVuIHlvdSBjYW4gYWRkIHRoZW0gdG8g dGhlIGxpc3QsCi10aG91Z2ggeW91IG1heSB3aXNoIHRvIGNvbnN1bHQgdGhlIGZ1bmN0aW9ucwot YHRleC10aGluZ2F0cHQtLWJlZ2lubmluZy1vZi1zeW1ib2wnIGFuZCBgdGV4LXRoaW5nYXRwdC0t ZW5kLW9mLXN5bWJvbCcKLXRvIHNlZSB3aGF0IHRoZSByZWdleHAgYWxyZWFkeSBjb250YWlucy4g IElmIHlvdXIgZG9jdW1lbnRzIGNvbnRhaW4KLW5vbi1zdGFuZGFyZCBlc2NhcGUgYW5kIGdyb3Vw aW5nIGNoYXJhY3RlcnMsIHRoZW4geW91IGNhbiByZXBsYWNlIHRoZQotdGhyZWUgbGlzdGVkIGhl cmUgd2l0aCB5b3VyIG93biwgdGhlcmVieSBhbGxvd2luZyB0aGUgdGhyZWUgc3RhbmRhcmQKLWNo YXJhY3RlcnMgdG8gYXBwZWFyIGJ5IGRlZmF1bHQgaW4gc2VhcmNoIHN0cmluZ3MuICBQbGVhc2Ug YmUgYXdhcmUsCi1ob3dldmVyLCB0aGF0IHRoZSBgZXRhZ3MnIHByb2dyYW0gb25seSByZWNvZ25p emVzIGBcXCcgKDkyKSBhbmQgYCEnICgzMykKLWFzIGVzY2FwZSBjaGFyYWN0ZXJzIGluIFRlWCBk b2N1bWVudHMsIGFuZCBpZiBpdCBkZXRlY3RzIHRoZSBsYXR0ZXIgaXQKLWFsc28gdXNlcyBgPD4n IGFzIHRoZSBUZVggZ3JvdXBpbmcgY29uc3RydWN0IHJhdGhlciB0aGFuIGB7fScuICBTZXR0aW5n Ci10aGUgZXNjYXBlIGFuZCBncm91cGluZyBjaGFycyB0byBhbnl0aGluZyBvdGhlciB0aGFuIGBc XD1cXHt9JyBvciBgITw+Jwotd2lsbCBub3QgYmUgdXNlZnVsIHdpdGhvdXQgY2hhbmdlcyB0byBg ZXRhZ3MnLCBhdCBsZWFzdCBmb3IgY29tbWFuZHMKLXRoYXQgc2VhcmNoIHRhZ3MgdGFibGVzLCBz dWNoIGFzIFxcW3hyZWYtZmluZC1kZWZpbml0aW9uc10gYW5kIFwKLVxcW3hyZWYtZmluZC1hcHJv cG9zXS4KLQotU2hvdWxkIHlvdSB3aXNoIHRvIGNoYW5nZSB0aGUgZGVmYXVsdHMsIHBsZWFzZSBh bHNvIGJlIGF3YXJlIHRoYXQsCi13aXRob3V0IGZ1cnRoZXIgbW9kaWZpY2F0aW9ucyB0byB0ZXgt bW9kZS5lbCwgdGhlIHVzdWFsIHRleHQtcGFyc2luZwotcm91dGluZXMgZm9yIGBmb250LWxvY2sn IGFuZCB0aGUgbGlrZSB3b24ndCB3b3JrIGNvcnJlY3RseSwgYXMgdGhlCi1kZWZhdWx0IGVzY2Fw ZSBhbmQgZ3JvdXBpbmcgY2hhcmFjdGVycyBhcmUgY3VycmVudGx5IGhhcmQgY29kZWQgaW4gbWFu eQotcGxhY2VzLiIpCi0KIDs7IFBvcHVsYXRlIGBzZW1hbnRpYy1zeW1yZWYtZmlsZXBhdHRlcm4t YWxpc3QnIGZvciB0aGUgaW4tdHJlZSBtb2RlczsKIDs7IEFVQ1RlWCBpcyBkb2luZyB0aGUgc2Ft ZSBmb3IgaXRzIG1vZGVzLgogKHdpdGgtZXZhbC1hZnRlci1sb2FkICdzZW1hbnRpYy9zeW1yZWYv Z3JlcApAQCAtMzg3OCwyMCArMzg0NywxMiBAQCB0ZXgtLXRoaW5nLWF0LXBvaW50CiAKIChkZWZ1 biB0ZXgtdGhpbmdhdHB0LS1iZWdpbm5pbmctb2Ytc3ltYm9sICgpCiAgIChhbmQKLSAgIChyZS1z ZWFyY2gtYmFja3dhcmQgKGNvbmNhdCAiW11bIgotICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChtYXBjb25jYXQgIydyZWdleHAtcXVvdGUKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIChtYXBjYXIgIydjaGFyLXRvLXN0cmluZwotICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXgtdGhpbmdhdHB0LWV4Y2x1ZGUt Y2hhcnMpKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcIipgJyM9JigpJSx8JFs6 Y250cmw6XVs6Ymxhbms6XV0iKSkKKyAgIChyZS1zZWFyY2gtYmFja3dhcmQgIltdW1xce31cIipg JyM9JigpJSx8JFs6Y250cmw6XVs6Ymxhbms6XV0iIG5pbCB0KQogICAgKGZvcndhcmQtY2hhcikp KQogCiAoZGVmdW4gdGV4LXRoaW5nYXRwdC0tZW5kLW9mLXN5bWJvbCAoKQogICAoYW5kCi0gICAo cmUtc2VhcmNoLWZvcndhcmQgKGNvbmNhdCAiW11bIgotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKG1hcGNvbmNhdCAjJ3JlZ2V4cC1xdW90ZQotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKG1hcGNhciAjJ2NoYXItdG8tc3RyaW5nCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleC10aGluZ2F0cHQtZXhjbHVk ZS1jaGFycykpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXCIqYCcjPSYoKSUsfCRb OmNudHJsOl1bOmJsYW5rOl1dIikpCisgICAocmUtc2VhcmNoLWZvcndhcmQgIltdW1xce31cIipg JyM9JigpJSx8JFs6Y250cmw6XVs6Ymxhbms6XV0iIG5pbCB0KQogICAgKGJhY2t3YXJkLWNoYXIp KSkKIAogKGRlZnVuIHRleC0tYm91bmRzLW9mLXN5bWJvbC1hdC1wb2ludCAoKQotLSAKMi4zOS40 Cgo= --000000000000d81e9e06223c9204--