From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: martin rudalics Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 04 Sep 2023 07:48:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: 65726@debbugs.gnu.org X-Debbugs-Original-To: Bug-Gnu-Emacs Received: via spool by submit@debbugs.gnu.org id=B.169381363415533 (code B ref -1); Mon, 04 Sep 2023 07:48:02 +0000 Received: (at submit) by debbugs.gnu.org; 4 Sep 2023 07:47:14 +0000 Received: from localhost ([127.0.0.1]:48173 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qd4Ih-00042Q-57 for submit@debbugs.gnu.org; Mon, 04 Sep 2023 03:47:13 -0400 Received: from lists.gnu.org ([2001:470:142::17]:53346) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qd4Id-000413-AG for submit@debbugs.gnu.org; Mon, 04 Sep 2023 03:47:10 -0400 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 1qd4I6-0002p2-Bn for bug-gnu-emacs@gnu.org; Mon, 04 Sep 2023 03:46:44 -0400 Received: from mout.gmx.net ([212.227.15.18]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qd4I0-0001LH-BE for bug-gnu-emacs@gnu.org; Mon, 04 Sep 2023 03:46:34 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.at; s=s31663417; t=1693813585; x=1694418385; i=rudalics@gmx.at; bh=tl7OdoJmUnIyyVf9dqChQBLbTiQYzxHwVzbjP6qxoa0=; h=X-UI-Sender-Class:Date:To:From:Subject; b=LRuUW823q56BHl/ISld+N9HgXSOQSucXix/mOtr48jazGWaoUmEFIiwAUKVT1f63y/PGhzT Jda7M1nmGhz8xUoE/SI14eS9pQSvN3brMJl5ftU37LsyePkp8ELZ0cwgwmgKc19sCzku6hUrH mz7yzjqlC/CeyKiM1x33sCXbQqSKobIRwIhAEjgmaX4lbAmaG1KcfJn8LaDyXj45wGtu3AdEj zDKJJ4oMM4Ynrzpm/mfflU3CFSEA/AtESURVNbk0zUNt9MUNf/2bGZZhEBQlCynW/mzA2Kc0N lYGg+w6HnUykBUme/e0o3E8m8V2jQwBGNNtL40DSj649TOxBuj5A== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from [192.168.1.100] ([213.142.96.79]) by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MxUnz-1pjjg02LN3-00xuuJ for ; Mon, 04 Sep 2023 09:46:25 +0200 Content-Type: multipart/mixed; boundary="------------Kfhqe8JD14mDWxvKDrDeWHz4" Message-ID: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> Date: Mon, 4 Sep 2023 09:46:24 +0200 MIME-Version: 1.0 Content-Language: en-US From: martin rudalics X-Provags-ID: V03:K1:xHHGp4u2x45nZryjppPaUZIWps53FMqOAApXGHQLhhAErLMGuqz Ur+/KVVWlZOilj1eU+wzt5jNdVYudIGy3R5CZQkc4pvAvKBtY+ILlPbzFJczlPsG4MvCTcK 7tGurXL0ud3tdNanXDmhr+chHRamk7K24++LR/Y+B4AXNEM09LK8MSyred/OGGpvgxtx1GD y91DhZW+/vJP4yVIxG+YA== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:VZAye0MClF0=;FADIV6goAEt+E/COg99XqeZPjkF cXmjWpExALpnVC36zTWcPQhlIhmOFRTtglVVSywTzyRjQb+P5z5m42h7c/FaxSR5QI4nCmH2a fNwuYKbZCJiOeWBDz2Yipjs1BqZjxP2HX8XvYE8+5GBpmjV6YAWSkaRRpnyy/eGMOJHYisiWV M9CdfxryNAQDvOEgqK3f6VCSkrDujsEdmgZHJXMLqhuhDrACRhUfhXvuCVdO9TESNrB5XS+Gb NAca5x2k8GUPoSn8ns9kdvOUi2pq/rneTlpV7DWC0GqmJchxSPsg/olXqFM7aYfB6LT/Bht/K AMLVetyg4uzUxIAHSR87y3oiXgzcVxiDynSczYukWDEKxsqmQnwOVVY8TjtJNPg7gea5ozNTU Q4Zj2lKR7jDRfaHxYI15hGGDTCPY4uy3rc+TH/mZ0w8pKz1TGMuqGWH8NWdGbzdzBjoA5fSHQ O1AInXgqCULK29nV6taYtBqX841rpUMXF7XqKy246buFTz00o93BwEpOWD+NPD7jir7Vo+hf9 SYRmwqSVDi+dvvY7i3fs8Aqnp6kzriA9AtV9mS/yGyCGJTCUY0GE3o7mnM8JAMElQvxDKA0X1 AAagCxdIbeji+aooPy0U11ZHN3HCmmPZmNJIOu72aXUQu3SPxaqb+pR9b1Mu6CAGKKqlsjuUh g76h/BcjEQWjHuIYsXXnEYVmhBFNHYLqW27/Pdyeli3rsLcK5TmjEM6LY0M3snG3RuZgjvwcC NL+0zunOyyMBtg0fsues8nRloNFBNBsqSFDjlq6T1pr1ZhT72YLU/Yds1b6uwZeDkrZmhYQKv kIS8o6Ew5zfve0qknavwXG1i5/xkhfm8psQ5K01yJwSo7e4H2Yd26r0K4x5bwh7NHdBsQX+wE BgScMs2hIvIxH8qI0PIcQWjBBTTj2aacgKFZIuf6zrZ79g//0zKyz40oSFRue4DinPs5I5Fcl +dW2qBRfdf12w8s2P4jWKSirKRM= Received-SPF: pass client-ip=212.227.15.18; envelope-from=rudalics@gmx.at; helo=mout.gmx.net X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: 1.0 (+) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.0 (/) This is a multi-part message in MIME format. --------------Kfhqe8JD14mDWxvKDrDeWHz4 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit With emacs -Q load the attached file elinfo.el. Now type C-h S split-window RET C-x o C-c C-g This crashes Emacs here with Thread 1 "emacs" received signal SIGSEGV, Segmentation fault. 0x000000000068810a in skip_noops (p=, pend=) at ../../src/regex-emacs.c:3556 3556 { and an infinite backtrace starting with Python Exception Cannot access memory at address 0x7fffff66fff8: #0 0x000000000068810a in skip_noops (p=#1 0x0000000000688823 in mutually_exclusive_p (bufp=0xec9c30 , p1=0x1fcee74 "\004\005", p2=0x1fcee81 "\016\063") at ../../src/regex-emacs.c:3665 #2 0x0000000000688e19 in mutually_exclusive_p (bufp=0xec9c30 , p1=0x1fcee74 "\004\005", p2=0x1fcee81 "\016\063") at ../../src/regex-emacs.c:3838 #3 0x0000000000688e3c in mutually_exclusive_p (bufp=0xec9c30 , p1=0x1fcee74 "\004\005", p2=0x1fceeba "\004\020") at ../../src/regex-emacs.c:3839 #4 0x0000000000688e3c in mutually_exclusive_p (bufp=0xec9c30 , p1=0x1fcee74 "\004\005", p2=0x1fcee84 "\002\001@\004\020") at ../../src/regex-emacs.c:3839 #5 0x0000000000688e19 in mutually_exclusive_p (bufp=0xec9c30 , p1=0x1fcee74 "\004\005", p2=0x1fcee81 "\016\063") at ../../src/regex-emacs.c:3838 ... The same scenario worked well with Emacs 22 through 28. martin In GNU Emacs 29.1.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.5, cairo version 1.16.0) of 2023-09-03 built on restno Repository revision: f1e4cbe72aa4da9351cbbcd209d9233c68dd9fbb Repository branch: emacs-29 Windowing system distributor 'The X.Org Foundation', version 11.0.12004000 System Description: Debian GNU/Linux 10 (buster) Configured using: 'configure --with-gif=ifavailable --with-tiff=ifavailable --with-gnutls=no --without-pop --enable-gcc-warnings=warn-only --enable-checking=yes,glyphs --enable-check-lisp-object-type=yes 'CFLAGS=-O0 -g3 -no-pie -Wno-missing-braces'' Configured features: CAIRO DBUS FREETYPE GIF GLIB GSETTINGS HARFBUZZ JPEG LIBSELINUX MODULES NOTIFY INOTIFY PDUMPER PNG SECCOMP SOUND THREADS TOOLKIT_SCROLL_BARS X11 XDBE XIM XINPUT2 XPM GTK3 ZLIB Important settings: value of $LANG: de_AT.utf8 value of $XMODIFIERS: @im=ibus locale-coding-system: utf-8-unix Major mode: Lisp Interaction Minor modes in effect: tooltip-mode: t global-eldoc-mode: t eldoc-mode: t show-paren-mode: t electric-indent-mode: t mouse-wheel-mode: t tool-bar-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t line-number-mode: t indent-tabs-mode: t transient-mark-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t Load-path shadows: None found. Features: (shadow sort mail-extr emacsbug message mailcap yank-media puny dired dired-loaddefs rfc822 mml mml-sec password-cache epa derived epg rfc6068 epg-config gnus-util text-property-search time-date subr-x mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader cl-loaddefs cl-lib sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils elinfo texinfo texinfo-loaddefs info rmc iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic indonesian philippine cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite emoji-zwj charscript charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp files window text-properties overlay sha1 md5 base64 format env code-pages mule custom widget keymap hashtable-print-readable backquote threads dbusbind inotify dynamic-setting system-font-setting font-render-setting cairo move-toolbar gtk x-toolkit xinput2 x multi-tty make-network-process emacs) Memory information: ((conses 16 45758 8352) (symbols 48 5682 0) (strings 32 15622 2110) (string-bytes 1 431024) (vectors 16 10081) (vector-slots 8 157669 13073) (floats 8 26 23) (intervals 56 218 0) (buffers 976 10)) --------------Kfhqe8JD14mDWxvKDrDeWHz4 Content-Type: text/x-emacs-lisp; charset=UTF-8; name="elinfo.el" Content-Disposition: attachment; filename="elinfo.el" Content-Transfer-Encoding: base64 Ozs7IGVsaW5mby5lbCAtLS0gRWxpc3AgSW5mbyBhbmQgVGV4aW5mbyBzdXBwb3J0IHJvdXRp bmVzCgo7OyBDb3B5cmlnaHQgKEMpIDIwMDkgTWFydGluIFJ1ZGFsaWNzCgo7OyBUaW1lLXN0 YW1wOiAiMjAyMS0wNi0wOSAxODo0NToyOSBtYXJ0aW4iCjs7IEF1dGhvcjogTWFydGluIFJ1 ZGFsaWNzIDxydWRhbGljc0BnbXguYXQ+Cgo7OyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo7OyBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQo7OyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lv biAzIG9mIHRoZSBMaWNlbnNlLCBvcgo7OyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgoKOzsgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCjs7IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCjs7IE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKOzsgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCjs7IFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl Cjs7IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cu Z251Lm9yZy9saWNlbnNlcy8+LgoKOzs7IENvbW1lbnRhcnk6Cgo7OyBUaGlzIGZpbGUgcHJv dmlkZXMgZnVuY3Rpb25zIGZvciBjaGVja2luZyB0aGUgdmFsaWRpdHkgb2YgRW1hY3MnIElu Zm8KOzsgZmlsZXMsIG5hdmlnYXRpbmcgYmV0d2VlbiBFbWFjcycgSW5mbyBmaWxlcyBhbmQg Y29ycmVzcG9uZGluZyBUZXhpbmZvCjs7IGJ1ZmZlcnMsIGFuZCBmb3IgY3JlYXRpbmcgVGV4 aW5mbyBlbnRyaWVzIGZyb20gZG9jdW1lbnRhdGlvbiBzdHJpbmdzLgoKKHJlcXVpcmUgJ2lu Zm8pCihyZXF1aXJlICd0ZXhpbmZvKQoKKGRlZmdyb3VwIGVsaW5mbyBuaWwKICAiRWxpbmZv LiIKICA6dmVyc2lvbiAiMjMuMiIKICA6Z3JvdXAgJ2xpc3ApCgo7OyBfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwo7Owo7OzsJCQkgIFV0aWxpdHkgRnVuY3Rpb25zCjs7IF9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCjs7Cgo7OyBNb3ZlIHRvIGFuZCByZXR1cm4gc3RhcnQgb2YgZmlyc3Qg bm9uLXdoaXRlc3BhY2UgY2hhciBhZnRlciBgcG9pbnQnLgooZGVmdW4gZWxpbmZvLS1tb3Zl LXRvLW5leHQgKCkKICAoZm9yd2FyZC1jb21tZW50IChidWZmZXItc2l6ZSkpCiAgKHBvaW50 KSkKCjs7IE1vdmUgdG8gZW5kIG9mIGFuZCByZXR1cm4gbmV4dCBuYW1lLgooZGVmdW4gZWxp bmZvLS1nZXQtbmV4dCAoKQogIChsZXQgKChmcm9tIChlbGluZm8tLW1vdmUtdG8tbmV4dCkp KQogICAgKHNraXAtY2hhcnMtZm9yd2FyZCAiXiBcdFxuIikKICAgIChidWZmZXItc3Vic3Ry aW5nLW5vLXByb3BlcnRpZXMgZnJvbSAocG9pbnQpKSkpCgo7OyBMaWtlIGBlbGluZm8tLWdl dC1uZXh0JyBidXQgZG9uJ3QgbGVhdmUgY3VycmVudCBsaW5lLgooZGVmdW4gZWxpbmZvLS1n ZXQtbmV4dC1hcmcgKCkKICAoc2F2ZS1yZXN0cmljdGlvbgogICAgKG5hcnJvdy10by1yZWdp b24gKHBvaW50KSAobGluZS1lbmQtcG9zaXRpb24pKQogICAgKGVsaW5mby0tZ2V0LW5leHQp KSkKCjs7IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCjs7Cjs7OwkJICBDaGVja2luZyBhbmQg RWxpbmZvIExvZyBVdGlsaXRpZXMKOzsgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KOzsKCihk ZWZjdXN0b20gZWxpbmZvLWxvZy13YXJuaW5ncyBuaWwKICAiTm9uLW5pbCBtZWFucyBsb2cg d2FybmluZ3MgaW4gRWxpbmZvIExvZyBidWZmZXIuIgogIDpncm91cCAnZWxpbmZvCiAgOnR5 cGUgJ2Jvb2xlYW4KICA6dmVyc2lvbiAiMjMuMiIpCgooZGVmY3VzdG9tIGVsaW5mby1zaG93 LWRlZmluaXRpb24gdAogICJOb24tbmlsIG1lYW5zIHNob3cgZGVmaW5pdGlvbnMgd2hlbiBi cm93c2luZyBFbGluZm8gTG9ncy4iCiAgOmdyb3VwICdlbGluZm8KICA6dHlwZSAnYm9vbGVh bgogIDp2ZXJzaW9uICIyMy4yIikKCihkZWZjdXN0b20gZWxpbmZvLWJhbGFuY2Utd2luZG93 cyB0CiAgIk5vbi1uaWwgbWVhbnMgYmFsYW5jZSB3aW5kb3dzIHdoZW4gYnJvd3NpbmcgRWxp bmZvIExvZ3MuIgogIDpncm91cCAnZWxpbmZvCiAgOnR5cGUgJ2Jvb2xlYW4KICA6dmVyc2lv biAiMjMuMiIpCgooZGVmY3VzdG9tIGVsaW5mby1yZXVzZS13aW5kb3dzIHQKICAiTm9uLW5p bCBtZWFucyByZXVzZSB3aW5kb3dzIHdoZW4gYnJvd3NpbmcgRWxpbmZvIExvZ3MuIgogIDpn cm91cCAnZWxpbmZvCiAgOnR5cGUgJ2Jvb2xlYW4KICA6dmVyc2lvbiAiMjMuMiIpCgooZGVm Y3VzdG9tIGVsaW5mby1sb2ctbG9jYXRpb24tZmFjZSAndW5kZXJsaW5lCiAgIkZhY2UgbmFt ZSBmb3IgaGlnaGxpZ2h0aW5nIGxvY2F0aW9ucyBpbiBFbGluZm8gTG9ncy4iCiAgOmdyb3Vw ICdlbGluZm8KICA6dHlwZSAnZmFjZQogIDp2ZXJzaW9uICIyMy4yIikKCihkZWZjdXN0b20g ZWxpbmZvLWxvZy1kZWYtZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZQogICJGYWNlIG5h bWUgZm9yIGhpZ2hsaWdodGluZyB0aGluZ3MgaW4gRWxpbmZvIExvZ3MuIgogIDpncm91cCAn ZWxpbmZvCiAgOnR5cGUgJ2ZhY2UKICA6dmVyc2lvbiAiMjMuMiIpCgo7OyBXaW5kb3cgbmF2 aWdhdGlvbi4KKGRlZnZhciBlbGluZm8tc291cmNlLXdpbmRvdyBuaWwKICAiVGhlIHdpbmRv dyB3aGVyZSB0aGUgVGV4aW5mbyBzb3VyY2UgYnVmZmVyIHdhcyBkaXNwbGF5ZWQuIikKKGRl ZnZhciBlbGluZm8tZGVmLXdpbmRvdyBuaWwKICAiVGhlIHdpbmRvdyB3aGVyZSB0aGUgZGVm aW5pdGlvbiBvZiBzb21lIHN5bWJvbCB3YXMgZGlzcGxheWVkLiIpCgooZGVmdW4gZWxpbmZv LXNob3ctZGVmaW5pdGlvbiAoc3ltYm9sICZvcHRpb25hbCB0eXBlKQogICJTaG93IGRlZmlu aXRpb24gb2YgU1lNQk9MIGluIGEgc3VpdGFibGUgd2luZG93LgpGb3IgY29tcGF0aWJpbGl0 eSB3aXRoIGBmaW5kLWRlZmluaXRpb24tbm9zZWxlY3QnIFRZUEUgbXVzdCBiZQpvbWl0dGVk IG9yIG5pbCBmb3IgZnVuY3Rpb25zIGFuZCBgZGVmdmFyJyBmb3IgdmFyaWFibGVzLiIKICA7 OyBgZmluZC1kZWZpbml0aW9uLW5vc2VsZWN0JyBpcyBhdXRvbG9hZGVkIGluIGZpbmQtZnVu Yy5lbCBhbmQgc2hvdWxkCiAgOzsgcmV0dXJuIGEgY29ucyB3aG9zZSBjYXIgaXMgdGhlIGJ1 ZmZlciBjb250YWluaW5nIHRoZSBkZWZpbml0aW9uCiAgOzsgd2hpbGUgaXRzIGNkciBjb250 YWlucyB0aGUgcG9zaXRpb24gd2l0aGluIHRoZSBidWZmZXIuCiAgKGxldCAoKGJ1ZmZlci1w b3NpdGlvbi1wYWlyIChzYXZlLWV4Y3Vyc2lvbgoJCQkJKGZpbmQtZGVmaW5pdGlvbi1ub3Nl bGVjdCBzeW1ib2wgdHlwZSkpKSkKICAgICh3aGVuIGJ1ZmZlci1wb3NpdGlvbi1wYWlyCiAg ICAgIChsZXQgKChidWZmZXIgKGNhciBidWZmZXItcG9zaXRpb24tcGFpcikpCgkgICAgKHBv c2l0aW9uIChjZHIgYnVmZmVyLXBvc2l0aW9uLXBhaXIpKSkKCShpZiAoYW5kIGVsaW5mby1y ZXVzZS13aW5kb3dzICh3aW5kb3ctbGl2ZS1wIGVsaW5mby1kZWYtd2luZG93KSkKCSAgICAo c2V0LXdpbmRvdy1idWZmZXIgZWxpbmZvLWRlZi13aW5kb3cgYnVmZmVyKQoJICAoc2V0cSBl bGluZm8tZGVmLXdpbmRvdyAoZGlzcGxheS1idWZmZXIgYnVmZmVyKSkpCgk7OyBSZWNvcmQg d2luZG93L2J1ZmZlciByZWxhdGlvbnNoaXAuCgkoc2V0LXdpbmRvdy1wb2ludCBlbGluZm8t ZGVmLXdpbmRvdyBwb3NpdGlvbikKCSh3aXRoLXNlbGVjdGVkLXdpbmRvdyBlbGluZm8tZGVm LXdpbmRvdwoJICA7OyBQdXQgdGhlIGRlZmluaXRpb24gYXQgdGhlIHRvcCBvZiB0aGUgd2lu ZG93LgoJICAocmVjZW50ZXIgMSkpKSkpKQoKKGRlZnVuIGVsaW5mby1zaG93LXNvdXJjZSAo Jm9wdGlvbmFsIGxvZy1wb3MpCiAgIlNob3cgVGV4aW5mbyBzb3VyY2UgY29ycmVzcG9uZGlu ZyB0byBFbGluZm8gTG9nIGVudHJ5IGF0IExPRy1QT1MuCkxPRy1QT1MgbmlsIG9yIG9taXR0 ZWQgbWVhbnMgY29uc2lkZXIgdGhlIGVudHJ5IGxvY2F0ZWQgYXQKYHBvaW50Jy4KClRoaXMg ZnVuY3Rpb24gbWF5IGFsc28gZGlzcGxheSBhIGNvcnJlc3BvbmRpbmcgZGVmaW5pdGlvbiBp biBjYXNlCmBlbGluZm8tc2hvdy1kZWZpbml0aW9uJyBpcyBub24tbmlsIGFuZCBiYWxhbmNl IHRoZSByZXNwZWN0aXZlCndpbmRvd3MgcHJvdmlkZWQgYGVsaW5mby1iYWxhbmNlLXdpbmRv d3MnIGlzIG5vbi1uaWwuIgogIChzYXZlLWV4Y3Vyc2lvbgogICAgKGxldCogKChsb2ctcG9z IChvciBsb2ctcG9zIChwb2ludCkpKQoJICAgKGZpbGUtbmFtZSAoZ2V0LXRleHQtcHJvcGVy dHkgbG9nLXBvcyAnZWxpbmZvLWZpbGUtbmFtZSkpCgkgICAocG9zaXRpb24gKGdldC10ZXh0 LXByb3BlcnR5IGxvZy1wb3MgJ2VsaW5mby1wb3NpdGlvbikpCgkgICAoYnVmZmVyIChmaW5k LWZpbGUtbm9zZWxlY3QgZmlsZS1uYW1lKSkKCSAgIGJhbGFuY2UpCiAgICAgIDs7IERpc3Bs YXkgVGV4aW5mbyBzb3VyY2UuCiAgICAgIChpZiAoYW5kIGVsaW5mby1yZXVzZS13aW5kb3dz ICh3aW5kb3ctbGl2ZS1wIGVsaW5mby1zb3VyY2Utd2luZG93KSkKCSAgKHNldC13aW5kb3ct YnVmZmVyIGVsaW5mby1zb3VyY2Utd2luZG93IGJ1ZmZlcikKCShzZXRxIGVsaW5mby1zb3Vy Y2Utd2luZG93IChkaXNwbGF5LWJ1ZmZlciBidWZmZXIpKSkKICAgICAgOzsgU2V0IHdpbmRv dy9idWZmZXIgcmVsYXRpb25zaGlwLgogICAgICAoc2V0LXdpbmRvdy1wb2ludCBlbGluZm8t c291cmNlLXdpbmRvdyBwb3NpdGlvbikKICAgICAgKHdpdGgtc2VsZWN0ZWQtd2luZG93IGVs aW5mby1zb3VyY2Utd2luZG93Cgk7OyBXZSBjb3VsZCBtYWtlIHRoZSAiMSIgY3VzdG9taXph YmxlLgoJKHJlY2VudGVyIDEpKQogICAgICA7OyBEaXNwbGF5IGRlZmluaXRpb24gaWYgcG9z c2libGUuCiAgICAgIChjb25kCiAgICAgICAoKG5vdCBlbGluZm8tc2hvdy1kZWZpbml0aW9u KSkKICAgICAgICgobWVtcSAoZ2V0LXRleHQtcHJvcGVydHkgbG9nLXBvcyAnZWxpbmZvLXR5 cGUpCgkgICAgICAnKGNvbW1hbmQgbm8tY29tbWFuZCBhcmctbWlzbWF0Y2gpKQoJKGVsaW5m by1zaG93LWRlZmluaXRpb24KCSAoaW50ZXJuIChnZXQtdGV4dC1wcm9wZXJ0eSBsb2ctcG9z ICdlbGluZm8tbmFtZSkpKQoJKHNldHEgYmFsYW5jZSB0KSkKICAgICAgICgobWVtcSAoZ2V0 LXRleHQtcHJvcGVydHkgbG9nLXBvcyAnZWxpbmZvLXR5cGUpCgkgICAgICAnKG9wdGlvbiBu by1vcHRpb24pKQoJKGVsaW5mby1zaG93LWRlZmluaXRpb24KCSAoaW50ZXJuIChnZXQtdGV4 dC1wcm9wZXJ0eSBsb2ctcG9zICdlbGluZm8tbmFtZSkpICdkZWZ2YXIpCgkoc2V0cSBiYWxh bmNlIHQpKSkKICAgICAgOzsgQmFsYW5jZSB3aW5kb3dzIGlmIHBvc3NpYmxlLgogICAgICAo d2hlbiAoYW5kIGVsaW5mby1iYWxhbmNlLXdpbmRvd3MgYmFsYW5jZQoJCSAoZXEgKHdpbmRv dy1mcmFtZSBlbGluZm8tc291cmNlLXdpbmRvdykKCQkgICAgICh3aW5kb3ctZnJhbWUgZWxp bmZvLWRlZi13aW5kb3cpKSkKCTs7IGBiYWxhbmNlLXdpbmRvd3MnIHNob3VsZCBiYWxhbmNl IHNpYmxpbmdzIG9mIHRoZQoJOzsgc291cmNlLXdpbmRvdyBvbmx5LgoJKGJhbGFuY2Utd2lu ZG93cyBlbGluZm8tc291cmNlLXdpbmRvdykpKSkpCgo7OyBUaGUgbmV4dC0vcHJldmlvdXMt ZXJyb3IgZnVuY3Rpb25zIGhhdmUgYmVlbiBjb3BpZWQgZnJvbSBjb21waWxlLmVsCjs7IGFu ZCBzbGlnaHRseSBhZGFwdGVkIGZvciBvdXIgbmVlZHMuICBGb3IgVUkgYW5kIGtleWJpbmRp bmdzIHN0aWNrIHRvCjs7IHRob3NlIHVzZWQgYnkgY29tcGlsZSBhbmQgcmVsYXRlZCBtb2Rl cy4gIEFsc28gcmV0YWluIHRoZSAtZXJyb3IKOzsgcG9zdGZpeCBmb3IgYWxsIGVudHJpZXMg YW5kIGRvbid0IG1vZGlmeSB0aGUgZG9jIHN0cmluZ3MgdG8gbWFrZSB0aGlzCjs7IGxvb2sg ZmFtaWxpYXIuCihkZWZ1biBlbGluZm8tbmV4dC1lcnJvciAobiAmb3B0aW9uYWwgb3RoZXIt ZmlsZSkKICAiU2hvdyBUZXhpbmZvIHNvdXJjZSBmb3IgbmV4dCBlbnRyeSBpbiBFbGluZm8g TG9nLgpQcmVmaXggYXJnIE4gc2F5cyBob3cgbWFueSBlbnRyaWVzIHRvIG1vdmUgZm9yd2Fy ZHMgXChiYWNrd2FyZHMsCmlmIG5lZ2F0aXZlKS4KCk9wdGlvbmFsIGFyZyBPVEhFUi1GSUxF LCBpZiBub24tbmlsLCBtZWFucyBmaW5kIGVudHJ5IGZvciBhIGZpbGUKdGhhdCBpcyBkaWZm ZXJlbnQgZnJvbSB0aGUgY3VycmVudCBvbmUuICBJbiB0aGF0IGNhc2UsIE4Kc3BlY2lmaWVz IHRoZSBudW1iZXIgb2YgZmlsZXMgd2hvc2UgZW50cmllcyBzaGFsbCBiZSBza2lwcGVkLgoK VGhpcyBmdW5jdGlvbiBtYXkgYWxzbyBkaXNwbGF5IGEgY29ycmVzcG9uZGluZyBkZWZpbml0 aW9uIGluIGNhc2UKYGVsaW5mby1zaG93LWRlZmluaXRpb24nIGlzIG5vbi1uaWwgYW5kIGJh bGFuY2UgdGhlIHJlc3BlY3RpdmUKd2luZG93cyBwcm92aWRlZCBgZWxpbmZvLWJhbGFuY2Ut d2luZG93cycgaXMgbm9uLW5pbC4iCiAgKGludGVyYWN0aXZlICJwIikKICAoaWYgb3RoZXIt ZmlsZQogICAgICAobGV0ICgobGFzdC1maWxlIChnZXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQp ICdlbGluZm8tZmlsZS1uYW1lKSkKCSAgICAoY3VycmVudC1maWxlICIiKSkKCShpZiAoPiBu IDApCgkgICAgKHdoaWxlIChhbmQgKG5vdCAoZW9icCkpCgkJCShzZXRxIGN1cnJlbnQtZmls ZQoJCQkgICAgICAoZ2V0LXRleHQtcHJvcGVydHkgKHBvaW50KSAnZWxpbmZvLWZpbGUtbmFt ZSkpCgkJCShvciAoc3RyaW5nLWVxdWFsIGN1cnJlbnQtZmlsZSBsYXN0LWZpbGUpCgkJCSAg ICAoYW5kIChzZXRxIGxhc3QtZmlsZSBjdXJyZW50LWZpbGUpCgkJCQkgKD4gKHNldHEgbiAo MS0gbikpIDApKSkpCgkgICAgICAoZm9yd2FyZC1saW5lKSkKCSAgKHdoaWxlIChhbmQgKG5v dCAoYm9icCkpCgkJICAgICAgKHNldHEgY3VycmVudC1maWxlCgkJCSAgICAoZ2V0LXRleHQt cHJvcGVydHkgKHBvaW50KSAnZWxpbmZvLWZpbGUtbmFtZSkpCgkJICAgICAgKG9yIChzdHJp bmctZXF1YWwgY3VycmVudC1maWxlIGxhc3QtZmlsZSkKCQkJICAoYW5kIChzZXRxIGxhc3Qt ZmlsZSBjdXJyZW50LWZpbGUpCgkJCSAgICAgICAoPCAoc2V0cSBuICgxKyBuKSkgMCkpKSkK CSAgICAgIChmb3J3YXJkLWxpbmUgLTEpKSkpCiAgICAoZm9yd2FyZC1saW5lIG4pKQoKICAo ZWxpbmZvLXNob3ctc291cmNlKSkKCihkZWZ1biBlbGluZm8tbmV4dC1lcnJvci1mdW5jdGlv biAobiAmb3B0aW9uYWwgcmVzZXQpCiAgIk1vdmUgdG8gbmV4dCBlbnRyeSBpbiBFbGluZm8g TG9nIGFuZCBzaG93IGNvcnJlc3BvbmRpbmcgVGV4aW5mbyBzb3VyY2UuCk9wdGlvbmFsIGFy Z3VtZW50IFJFU0VUIG5vbi1uaWwgbWVhbnMgZ28gdG8gZmlyc3QgRWxpbmZvIExvZwplbnRy eS4gIFNlZSBhbHNvIGBlbGluZm8tbmV4dC1lcnJvcicuCgpUaGlzIGZ1bmN0aW9uIHByb3Zp ZGVzIHRoZSB2YWx1ZSBvZiBgbmV4dC1lcnJvci1mdW5jdGlvbicgaW4KRWxpbmZvIExvZyBi dWZmZXJzLiIKICAoaW50ZXJhY3RpdmUgInAiKQogICh3aGVuIHJlc2V0IChnb3RvLWNoYXIg KHBvaW50LW1pbikpKQogIChlbGluZm8tbmV4dC1lcnJvciBuKSkKCihkZWZ1biBlbGluZm8t cHJldmlvdXMtZXJyb3IgKG4pCiAgIlNob3cgVGV4aW5mbyBzb3VyY2UgY29ycmVzcG9uZGlu ZyB0byBwcmV2aW91cyBlbnRyeSBpbiBFbGluZm8gTG9nLgpQcmVmaXggYXJnIE4gc2F5cyBo b3cgbWFueSBlbnRyaWVzIHRvIG1vdmUgYmFja3dhcmRzIFwoZm9yd2FyZHMsCmlmIG5lZ2F0 aXZlKS4gIFNlZSBhbHNvIGBlbGluZm8tbmV4dC1lcnJvcicuIgogIChpbnRlcmFjdGl2ZSAi cCIpCiAgKGVsaW5mby1uZXh0LWVycm9yICgtIG4pKSkKCihkZWZ1biBlbGluZm8tbmV4dC1m aWxlIChuKQogICJTaG93IFRleGluZm8gc291cmNlIG9mIG5leHQgRWxpbmZvIExvZyBlbnRy eSBuYW1pbmcgYW5vdGhlciBmaWxlLgpQcmVmaXggYXJnIE4gc2F5cyBob3cgbWFueSBmaWxl cyB0byBtb3ZlIGZvcndhcmRzIFwob3IgYmFja3dhcmRzLAppZiBuZWdhdGl2ZSkuICBTZWUg YWxzbyBgZWxpbmZvLW5leHQtZXJyb3InLiIKICAoaW50ZXJhY3RpdmUgInAiKQogIChlbGlu Zm8tbmV4dC1lcnJvciBuIHQpKQoKKGRlZnVuIGVsaW5mby1wcmV2aW91cy1maWxlIChuKQog ICJTaG93IFRleGluZm8gc291cmNlIG9mIHByZXZpb3VzIEVsaW5mbyBMb2cgZW50cnkgbmFt aW5nIGFub3RoZXIgZmlsZS4KUHJlZml4IGFyZyBOIHNheXMgaG93IG1hbnkgZmlsZXMgdG8g bW92ZSBiYWNrd2FyZHMgXChvciBmb3J3YXJkcywKaWYgbmVnYXRpdmUpLiAgU2VlIGFsc28g YGVsaW5mby1uZXh0LWVycm9yJy4iCiAgKGludGVyYWN0aXZlICJwIikKICAoZWxpbmZvLW5l eHQtZmlsZSAoLSBuKSkpCgooZGVmdW4gZWxpbmZvLWdvdG8tZXJyb3IgKCZvcHRpb25hbCBl dmVudCkKICAiU2hvdyBUZXhpbmZvIHNvdXJjZSBmb3IgRWxpbmZvIExvZyBlbnRyeSBhdCBg cG9pbnQnLgpTZWUgYWxzbyBgZWxpbmZvLW5leHQtZXJyb3InLiIKICAoaW50ZXJhY3RpdmUg KGxpc3QgbGFzdC1pbnB1dC1ldmVudCkpCiAgKHdoZW4gZXZlbnQgKHBvc24tc2V0LXBvaW50 IChldmVudC1lbmQgZXZlbnQpKSkKICAobmV4dC1lcnJvci1pbnRlcm5hbCkpCgooZGVmdmFy IGVsaW5mby1sb2ctbW9kZS1tYXAKICAobGV0ICgobWFwIChtYWtlLXNwYXJzZS1rZXltYXAp KSkKICAgIChkZWZpbmUta2V5IG1hcCBbbW91c2UtMl0gJ2VsaW5mby1nb3RvLWVycm9yKQog ICAgKGRlZmluZS1rZXkgbWFwIFtmb2xsb3ctbGlua10gJ21vdXNlLWZhY2UpCiAgICAoZGVm aW5lLWtleSBtYXAgIlxDLWNcQy1jIiAnZWxpbmZvLWdvdG8tZXJyb3IpCiAgICA7OyBFbGlu Zm8gZ290byBjb21wYXRpYmlsaXR5LgogICAgKGRlZmluZS1rZXkgbWFwICJcQy1jXEMtZyIg J2VsaW5mby1nb3RvLWVycm9yKQogICAgKGRlZmluZS1rZXkgbWFwICJcQy1tIiAnZWxpbmZv LWdvdG8tZXJyb3IpCiAgICAoZGVmaW5lLWtleSBtYXAgIlxNLW4iICdlbGluZm8tbmV4dC1l cnJvcikKICAgIChkZWZpbmUta2V5IG1hcCAiXE0tcCIgJ2VsaW5mby1wcmV2aW91cy1lcnJv cikKICAgIChkZWZpbmUta2V5IG1hcCAiXE0teyIgJ2VsaW5mby1wcmV2aW91cy1maWxlKQog ICAgKGRlZmluZS1rZXkgbWFwICJcTS19IiAnZWxpbmZvLW5leHQtZmlsZSkKICAgIChkZWZp bmUta2V5IG1hcCAiXHQiICdlbGluZm8tbmV4dC1lcnJvcikKICAgIChkZWZpbmUta2V5IG1h cCBbYmFja3RhYl0gJ2VsaW5mby1wcmV2aW91cy1lcnJvcikKICAgIChkZWZpbmUta2V5IG1h cCAicSIgJ3F1aXQtd2luZG93KQogICAgKGRlZmluZS1rZXkgbWFwICIgIiAnc2Nyb2xsLXVw KQogICAgKGRlZmluZS1rZXkgbWFwICJcXj8iICdzY3JvbGwtZG93bikKICAgIChkZWZpbmUt a2V5IG1hcCAiXEMtY1xDLWYiICduZXh0LWVycm9yLWZvbGxvdy1taW5vci1tb2RlKQogICAg bWFwKQogICJLZXltYXAgZm9yIEVsaW5mbyBMb2dzLiIpCgooZGVmdW4gZWxpbmZvLWxvZy1t b2RlICgpCiAgIk1ham9yIG1vZGUgZm9yIGJyb3dzaW5nIEVsaW5mbyBMb2dzLgpcXHtlbGlu Zm8tbG9nLW1vZGUtbWFwfSIKICAoaW50ZXJhY3RpdmUpCiAgKGtpbGwtYWxsLWxvY2FsLXZh cmlhYmxlcykKICAodXNlLWxvY2FsLW1hcCBlbGluZm8tbG9nLW1vZGUtbWFwKQogIChzZXRx IG1ham9yLW1vZGUgJ2VsaW5mby1sb2ctbW9kZSkKICAoc2V0cSBtb2RlLW5hbWUgIkVsaW5m byIpCiAgKHNldHEgbmV4dC1lcnJvci1mdW5jdGlvbiAnZWxpbmZvLW5leHQtZXJyb3ItZnVu Y3Rpb24pCiAgKHNldHEgYnVmZmVyLXJlYWQtb25seSB0KSkKCihkZWZ2YXIgZWxpbmZvLWxv Zy1idXR0b24tbWFwCiAgKGxldCAoKG1hcCAobWFrZS1zcGFyc2Uta2V5bWFwKSkpCiAgICAo ZGVmaW5lLWtleSBtYXAgW21vdXNlLTJdICdlbGluZm8tZ290by1lcnJvcikKICAgIChkZWZp bmUta2V5IG1hcCBbZm9sbG93LWxpbmtdICdtb3VzZS1mYWNlKQogICAgKGRlZmluZS1rZXkg bWFwICJcQy1tIiAnZWxpbmZvLWdvdG8tZXJyb3IpCiAgICBtYXApCiAgIktleW1hcCBmb3Ig RWxpbmZvIExvZyBidXR0b25zLiIpCihmc2V0ICdlbGluZm8tbG9nLWJ1dHRvbi1tYXAgZWxp bmZvLWxvZy1idXR0b24tbWFwKQoKOzsgVHdvIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBnZXR0 aW5nIHByb3BlcnRpZXMgb2YgZnVuY3Rpb25zIGFuZAo7OyB2YXJpYWJsZXMuICBUaGVzZSBh cmUgdXNlZCBmb3IgY2hlY2tpbmcgcHJvcGVydGllcyBkZXNjcmliZWQgYnkKOzsgVGV4aW5m byB0ZXh0LgooZGVmdW4gZWxpbmZvLS1mdW4tcHJvcGVydGllcyAoZnVuY3Rpb24pCiAgIlJl dHVybiBwcm9wZXJ0aWVzIG9mIEZVTkNUSU9OLgpSZXR1cm4gdmFsdWUgaXMgYSBsaXN0IG9m IHRocmVlIGVsZW1lbnRzOiBUaGUgZmlyc3QgZWxlbWVudCwgd2hlbgpub24tbmlsLCB0ZWxs cyB0aGF0IEZVTkNUSU9OIGlzIGEgY29tbWFuZC4gIFRoZSBzZWNvbmQgZWxlbWVudCwKd2hl biBub24tbmlsLCBzcGVjaWZpZXMgdGhlIGZ1bmN0aW9uIEZVTkNUSU9OIGlzIGFsaWFzZWQg dG8uICBUaGUKdGhpcmQgZWxlbWVudCBzcGVjaWZpZXMgdGhlIGFyZ3VtZW50IGxpc3Qgb2Yg RlVOQ1RJT04gKGFuZCBpcyB0CndoZW4gdGhhdCBhcmd1bWVudCBsaXN0IGlzIG5vdCBhdmFp bGFibGUpLiIKICAobGV0IChkZWYgY29tbWFuZCBhbGlhcyBhcmdsaXN0IGRvYykKICAgIChz ZXRxIGRlZiAoaWYgKHN5bWJvbHAgZnVuY3Rpb24pCgkJICAoc3ltYm9sLWZ1bmN0aW9uIGZ1 bmN0aW9uKQoJCWZ1bmN0aW9uKSkKICAgIChzZXRxIGNvbW1hbmQgKGNvbW1hbmRwIGRlZikp CiAgICAod2hlbiAoc3ltYm9scCBkZWYpCiAgICAgICh3aGlsZSAoYW5kIChmYm91bmRwIGRl ZikgKHN5bWJvbHAgKHN5bWJvbC1mdW5jdGlvbiBkZWYpKSkKCShzZXRxIGRlZiAoaW5kaXJl Y3QtZnVuY3Rpb24gZGVmKSkpCiAgICAgIChzZXRxIGFsaWFzIGRlZikpCiAgICAoc2V0cSBh cmdsaXN0CgkgIChpZiAoYW5kIChzZXRxIGRvYyAoZG9jdW1lbnRhdGlvbiBmdW5jdGlvbikp CgkJICAgKHN0cmluZy1tYXRjaCAiXG5cbihmblsgXF0qXFwoLipcXCkpWyBcdFxuXSpcXCci IGRvYykpCgkgICAgICAobWFwY2FyICdkb3duY2FzZSAoc3BsaXQtc3RyaW5nIChtYXRjaC1z dHJpbmcgMSBkb2MpKSkKCSAgICA7OyBIYW5kbGUgc3ltYm9scyBhbGlhc2VkIHRvIG90aGVy IHN5bWJvbHMuCgkgICAgKHdoZW4gKGFuZCAoc3ltYm9scCBkZWYpIChmYm91bmRwIGRlZikp CgkgICAgICAoc2V0cSBkZWYgKGluZGlyZWN0LWZ1bmN0aW9uIGRlZikpKQoJICAgIDs7IElm IGRlZmluaXRpb24gaXMgYSBtYWNybywgZmluZCB0aGUgZnVuY3Rpb24gaW5zaWRlIGl0LgoJ ICAgICh3aGVuIChlcSAoY2FyLXNhZmUgZGVmKSAnbWFjcm8pCgkgICAgICAoc2V0cSBkZWYg KGNkciBkZWYpKSkKCSAgICAoY29uZAoJICAgICAoKGJ5dGUtY29kZS1mdW5jdGlvbi1wIGRl ZikgKGFyZWYgZGVmIDApKQoJICAgICAoKGVxIChjYXItc2FmZSBkZWYpICdsYW1iZGEpIChu dGggMSBkZWYpKQoJICAgICAodCB0KSkpKQogICAgKGxpc3QgY29tbWFuZCBhbGlhcyAoaWYg KGxpc3RwIGFyZ2xpc3QpIGFyZ2xpc3QgdCkpKSkKCihkZWZ1biBlbGluZm8tLWlzLW9wdGlv biAodmFyaWFibGUpCiAgIlJldHVybiB0IGlmIFZBUklBQkxFIGlzIGFuIG9wdGlvbi4iCiAg KGxldCogKChmaWxlLW5hbWUgKGZpbmQtbGlzcC1vYmplY3QtZmlsZS1uYW1lIHZhcmlhYmxl ICdkZWZ2YXIpKQoJIChhbGlhcyAoY29uZGl0aW9uLWNhc2UgbmlsCgkJICAgIChpbmRpcmVj dC12YXJpYWJsZSB2YXJpYWJsZSkKCQkgIChlcnJvciB2YXJpYWJsZSkpKQoJIChkb2MKCSAg KGNvbmRpdGlvbi1jYXNlIG5pbAoJICAgICAgKG9yIChkb2N1bWVudGF0aW9uLXByb3BlcnR5 IHZhcmlhYmxlICd2YXJpYWJsZS1kb2N1bWVudGF0aW9uKQoJCSAgKGRvY3VtZW50YXRpb24t cHJvcGVydHkgYWxpYXMgJ3ZhcmlhYmxlLWRvY3VtZW50YXRpb24pKQoJICAgIChlcnJvciBu aWwpKSkKCSAob3B0aW9uIChvciAoY3VzdG9tLXZhcmlhYmxlLXAgdmFyaWFibGUpCgkJICAg ICAoYW5kIChzdHJpbmdwIGRvYykKCQkJICAoc3RyaW5nLWVxdWFsCgkJCSAgICIqIiAoc3Vi c3RyaW5nLW5vLXByb3BlcnRpZXMgZG9jIDAgMSkpKSkpKQogICAgb3B0aW9uKSkKCjs7IFNv bWUgY291bnRlcnMuCihkZWZ2YXIgZWxpbmZvLWZpbGVzLWNvdW50IG5pbCkKKGRlZnZhciBl bGluZm8tZXJyb3JzLWNvdW50IDApCihkZWZ2YXIgZWxpbmZvLXdhcm5pbmdzLWNvdW50IDAp CgooZGVmdW4gZWxpbmZvLWNsZWFyLWxvZyAoKQogICJDbGVhciBFbGluZm8gTG9nIGJ1ZmZl ciBhbmQgcmVzZXQgZXJyb3IgY291bnRzLiIKICA7OyBNYXliZSB3ZSBzaG91bGQgbWFrZSBj bGVhcmluZyBjdXN0b21pemFibGUuCiAgKHdpdGgtY3VycmVudC1idWZmZXIgKGdldC1idWZm ZXItY3JlYXRlICIqRWxpbmZvLUxvZyoiKQogICAgKGxldCAoKGluaGliaXQtcmVhZC1vbmx5 IHQpKQogICAgICAoZGVsZXRlLXJlZ2lvbiAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkpKQog IDs7IFdlIGNvdWxkIGluc2VydCBzb21lIGhlYWRlciwgYnV0IHdobydkIGNhcmUgYW55d2F5 PwogIChzZXRxIGVsaW5mby1lcnJvcnMtY291bnQgMCkKICAoc2V0cSBlbGluZm8td2Fybmlu Z3MtY291bnQgMCkpCgooZGVmdW4gZWxpbmZvLWRpc3BsYXktbG9nICgmb3B0aW9uYWwgZmls ZS1uYW1lKQogICJEaXNwbGF5IEVsaW5mbyBMb2cuCklmIHRoZXJlIHdlcmUgbm8gZXJyb3Jz IGp1c3Qgd3JpdGUgYSBtZXNzYWdlLiAgT3B0aW9uYWwgYXJndW1lbnQKRklMRS1OQU1FIG11 c3QgbmFtZSB0aGUgZmlsZSB3aG9zZSBjb250ZW50cyB3ZXJlIGNoZWNrZWQuIgogIChpZiAo YW5kICh6ZXJvcCBlbGluZm8tZXJyb3JzLWNvdW50KSAoemVyb3AgZWxpbmZvLXdhcm5pbmdz LWNvdW50KSkKICAgICAgKGxldCAoKHRleHQKCSAgICAgKGNvbmNhdAoJICAgICAgIk5vIGVy cm9ycyBmb3VuZCIKCSAgICAgIChjb25kCgkgICAgICAgKGZpbGUtbmFtZQoJCShmb3JtYXQg IiBpbiBmaWxlICVzIiBmaWxlLW5hbWUpKQoJICAgICAgIChlbGluZm8tZmlsZXMtY291bnQK CQkoZm9ybWF0ICIgaW4gJXMgY2hlY2tlZCBmaWxlKHMpIiBlbGluZm8tZmlsZXMtY291bnQp KSkpKSkKCShtZXNzYWdlIHRleHQpKQogICAgKGxldCogKChidWZmZXIgKGdldC1idWZmZXIg IipFbGluZm8tTG9nKiIpKQoJICAgKHdpbmRvdyAod2hlbiBidWZmZXIKCQkgICAgIChkaXNw bGF5LWJ1ZmZlciBidWZmZXIpKSkKCSAgICh0ZXh0IChjb25jYXQKCQkgIChmb3JtYXQgIiVz IGVycm9yKHMpIiBlbGluZm8tZXJyb3JzLWNvdW50KQoJCSAgKHdoZW4gZWxpbmZvLWxvZy13 YXJuaW5ncwoJCSAgICAoZm9ybWF0ICIgYW5kICVzIHdhcm5pbmcocykiIGVsaW5mby13YXJu aW5ncy1jb3VudCkpCgkJICAoY29uZAoJCSAgIChmaWxlLW5hbWUKCQkgICAgKGZvcm1hdCAi IGluIGZpbGUgJXMiIGZpbGUtbmFtZSkpCgkJICAgKGVsaW5mby1maWxlcy1jb3VudAoJCSAg ICAoZm9ybWF0ICIgaW4gJXMgY2hlY2tlZCBmaWxlKHMpIiBlbGluZm8tZmlsZXMtY291bnQp KSkpKSkKICAgICAgOzsgV2UgcmVhbGx5IHNob3VsZCBoYXZlIGFuIG9wdGlvbiB3aGljaCBs ZXRzIHVzZXJzIHNlbGVjdAogICAgICA7OyBMb2cvSGVscCB3aW5kb3dzLgogICAgICAod2hl biB3aW5kb3cKCShzZXQtd2luZG93LXBvaW50IHdpbmRvdyAocG9pbnQtbWluKSkpCiAgICAg IChtZXNzYWdlIHRleHQpKSkpCgooZGVmdW4gZWxpbmZvLWxvZy1zdHJpbmcgKHR5cGUgbmFt ZSBmaWxlLW5hbWUgcG9zaXRpb24gc3RyaW5nICZvcHRpb25hbCB3YXJuaW5nKQogICJMb2cg U1RSSU5HIGluIEVsaW5mbyBMb2cgYnVmZmVyLgpTVFJJTkcgaXMgcHJvcGVydGl6ZWQgd2l0 aCBUWVBFIFwodGhlIHR5cGUgb2YgdGhlIGVycm9yKSwgTkFNRQpcKHVzdWFsbHkgdGhlIG5h bWUgb2Ygc29tZSBmdW5jdGlvbiBvciB2YXJpYWJsZSksIEZJTEUtTkFNRSBcKHRoZQpuYW1l IG9mIGEgZmlsZSksIFBPU0lUSU9OIFwoYSBwb3NpdGlvbiB2YWxpZCBpbiBhIGJ1ZmZlciB2 aXNpdGluZwpGSUxFLU5BTUUpLiAgT3B0aW9uYWwgYXJndW1lbnQgV0FSTklORyBub24tbmls IG1lYW5zIG5vIGxvZ2dpbmcKb2NjdXJzIHVubGVzcyBgZWxpbmZvLWxvZy13YXJuaW5ncycg aXMgbm9uLW5pbC4iCiAgKHdoZW4gKG9yIChub3Qgd2FybmluZykgZWxpbmZvLWxvZy13YXJu aW5ncykKICAgIChpZiB3YXJuaW5nCgkoc2V0cSBlbGluZm8td2FybmluZ3MtY291bnQgKDEr IGVsaW5mby13YXJuaW5ncy1jb3VudCkpCiAgICAgIChzZXRxIGVsaW5mby1lcnJvcnMtY291 bnQgKDErIGVsaW5mby1lcnJvcnMtY291bnQpKSkKICAgIChsZXQgKChsaW5lIChjb3VudC1s aW5lcyAocG9pbnQtbWluKSBwb3NpdGlvbikpCgkgIChjb2x1bW4gKHNhdmUtZXhjdXJzaW9u CgkJICAgIChnb3RvLWNoYXIgcG9zaXRpb24pCgkJICAgIChjdXJyZW50LWNvbHVtbikpKSkK ICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgKGdldC1idWZmZXItY3JlYXRlICIqRWxpbmZv LUxvZyoiKQoJKHVubGVzcyAoZXEgbWFqb3ItbW9kZSAnZWxpbmZvLWxvZy1tb2RlKQoJICAo ZWxpbmZvLWxvZy1tb2RlKSkKCShsZXQgKChpbmhpYml0LXJlYWQtb25seSB0KQoJICAgICAg ZnJvbSB0bykKCSAgKGdvdG8tY2hhciAoc2V0cSBmcm9tIChwb2ludC1tYXgpKSkKCSAgKGlu c2VydAoJICAgOzsgUHJvcGVydGl6ZWQgaW5mb3JtYXRpb24uCgkgICAocHJvcGVydGl6ZQoJ ICAgIChjb25jYXQKCSAgICAgKHByb3BlcnRpemUKCSAgICAgIChjb25jYXQKCSAgICAgICAo d2hlbiBmaWxlLW5hbWUKCQkgKGNvbmNhdCAoZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSBmaWxl LW5hbWUpICI6IikpCgkgICAgICAgKGZvcm1hdCAiJXM6JXMiIGxpbmUgY29sdW1uKSkKCSAg ICAgICdmYWNlIGVsaW5mby1sb2ctbG9jYXRpb24tZmFjZSkKCSAgICAgIiAiIHN0cmluZykK CSAgICAnZWxpbmZvLXR5cGUgdHlwZSAnZWxpbmZvLW5hbWUgbmFtZQoJICAgICdlbGluZm8t ZmlsZS1uYW1lIGZpbGUtbmFtZSAnZWxpbmZvLXBvc2l0aW9uIHBvc2l0aW9uCgkgICAgJ21v dXNlLWZhY2UgJ2hpZ2hsaWdodCAnZm9sbG93LWxpbmsgJ2VsaW5mby1mb2xsb3ctbGluaykK CSAgIDs7IFNUUklORyBpdHNlbGYgZm9sbG93ZWQgYnkgYSBuZXdsaW5lLgoJICAgIlxuIikp KSkpKQoKKGRlZnN1YnN0IGVsaW5mby0tc3ltYm9sLW5hbWUgKGFyZykKICAiSWYgQVJHIGlz IGEgc3ltYm9sIHJldHVybiBpdHMgbmFtZSwgZWxzZSByZXR1cm4gQVJHLiIKICAoaWYgKHN5 bWJvbHAgYXJnKSAoc3ltYm9sLW5hbWUgYXJnKSBhcmcpKQoKKGRlZnVuIGVsaW5mby1jaGVj ayAoZmlsZS1uYW1lKQogICJDaGVjayBjdXJyZW50IGJ1ZmZlci4KRklMRS1OQU1FIG11c3Qg c3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgZmlsZSB3aG9zZSBjb250ZW50cyBhcmUgaW4KdGhl IGN1cnJlbnQgYnVmZmVyLiIKICAoaW50ZXJhY3RpdmUpCiAgKHNhdmUtZXhjdXJzaW9uCiAg ICAoc2F2ZS1yZXN0cmljdGlvbgogICAgICAod2lkZW4pCiAgICAgIDs7IE1ha2Ugc3VyZSBg Y2FzZS1mb2xkLXNlYXJjaCcgaXMgbmlsIHRvIGNhdGNoIHRoZSAiQy0iIGFuZCAiTS0iCiAg ICAgIDs7IGVudHJpZXMgb25seSBhbmQgbm90IHRoZSBDLW1vZGUgImMtLi4uIiBzdHVmZi4K ICAgICAgKGxldCAoY2FzZS1mb2xkLXNlYXJjaAoJICAgIHRleGktbmFtZSB0ZXhpLXBkLW5h bWUgdGV4aS1hcmctbmFtZSB0ZXhpLWNvbW1hbmQgdGV4aS1vcHRpb24KCSAgICBwb3NpdGlv biBwcm9wZXJ0aWVzIGFyZy1saXN0IGFyZy1uYW1lIGlzLW9wdGlvbikKCShnb3RvLWNoYXIg KHBvaW50LW1pbikpCgk7OyBXZSBwcm9iYWJseSB3b24ndCBldmVyIGJvdGhlciB0byBvcHRp bWl6ZSB0aGUgcmVnZXhwIGJlbG93LgoJKHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZAoJCTs7 IFJFR0VYUCBNTkVNTk9OSUNTOiAxLi5kZWZ1bi9kZWZmbiwgNC4uZGVmdmFyL2RlZm9wdCwK CQk7OyA4Li50ZXh0IHdlIGlnbm9yZSwgOS4uQy0vTS0gcHJlZml4ZWQgc3RyaW5nIGluIEBj b2RlLAoJCTs7IDEwLi5TUEMvUkVUL2V0Yy4gaW4gQGNvZGUsIDExLi5TUEMvUkVUL2V0Yy4g aW4gQGtiZCwKCQk7OyAxMy4ubm9uLW5pbC4KCQkiXkBcXCg/OlxcKFxcKGRlZnVueD9cXHxk ZWZtYWNcXHxkZWZzcGVjXFwpXFx8XFwoZGVmZm4gQ29tbWFuZFxcKVxcKVwKXFx8XFwoXFwo ZGVmdmFyeD9cXClcXHxcXChkZWZvcHR4P1xcKVxcKVwKXFx8XFwoc21hbGxcXCk/XFwoZXhh bXBsZVxcfGxpc3BcXHx2ZXJiYXRpbVxcfGlnbm9yZVxcKVxcKVwKXFx8QGNvZGV7XFwoW0NN XS1bXn1dK1xcKVxcfEBcXCg/OlxcKGNvZGVcXClcClxcfFxcKGtiZFxcKVxcKXtcXChTUENc XHxSRVRcXHxMRkRcXHxUQUJcXHxCU1xcfEVTQ1xcfERFTFxcfFNISUZUXFx8Q1RSTFxcfE1F VEFcXHxGWzAtOV0rXFwpfVwKXFx8XFwobm9uLW5pbFxcKSIgbmlsIHQpCgkgIChjb25kCgkg ICAoKG1hdGNoLWJlZ2lubmluZyAxKQoJICAgIChzZXRxIHRleGktY29tbWFuZCAobWF0Y2gt YmVnaW5uaW5nIDMpKQoJICAgIChzZXRxIHBvc2l0aW9uIChlbGluZm8tLW1vdmUtdG8tbmV4 dCkpCgkgICAgKHNldHEgdGV4aS1uYW1lIChlbGluZm8tLWdldC1uZXh0KSkKCSAgICAoc2V0 cSB0ZXhpLXBkLW5hbWUgKHByb3BlcnRpemUgdGV4aS1uYW1lICdmYWNlIGVsaW5mby1sb2ct ZGVmLWZhY2UpKQoJICAgIChpZiAobm90IChmYm91bmRwIChpbnRlcm4gdGV4aS1uYW1lKSkp CgkJKHByb2duCgkJICAoZWxpbmZvLWxvZy1zdHJpbmcKCQkgICAnZnVuLXVuYm91bmQgdGV4 aS1uYW1lIGZpbGUtbmFtZSBwb3NpdGlvbgoJCSAgIChjb25jYXQgIlVuYm91bmQgZnVuY3Rp b24gYCIgdGV4aS1wZC1uYW1lICInIikgdCkKCQkgIChmb3J3YXJkLWxpbmUpKQoJICAgICAg KHNldHEgcHJvcGVydGllcyAoZWxpbmZvLS1mdW4tcHJvcGVydGllcyAoaW50ZXJuIHRleGkt bmFtZSkpKQoJICAgICAgKGlmIChhbmQgKGVxIChudGggMSBwcm9wZXJ0aWVzKSAnaWdub3Jl KQoJCSAgICAgICAobm90IChzdHJpbmctZXF1YWwgdGV4aS1uYW1lICJpZ25vcmUiKSkpCgkJ ICA7OyBXaGVuIHRoZSBmdW5jdGlvbiBpcyByZW1hcHBlZCB0byBgaWdub3JlJyB3ZSBjYW4n dAoJCSAgOzsgZG8gYW55dGhpbmcgcmVhc29uYWJsZSBvbiB0aGUgY3VycmVudCBwbGF0Zm9y bS4KCQkgIChwcm9nbgoJCSAgICAoZWxpbmZvLWxvZy1zdHJpbmcKCQkgICAgICdyZW1hcHBl ZC10by1pZ25vcmUgdGV4aS1uYW1lIGZpbGUtbmFtZSBwb3NpdGlvbgoJCSAgICAgKGNvbmNh dCAiYCIgdGV4aS1wZC1uYW1lICInIHJlbWFwcGVkIHRvIGBpZ25vcmUnIG9uIHRoaXMgcGxh dGZvcm0iKSB0KQoJCSAgICAoZm9yd2FyZC1saW5lKSkKCQk7OyBDaGVjayBjb21tYW5kIHBy b3BlcnR5LgoJCShjb25kCgkJICgoYW5kIHRleGktY29tbWFuZCAobm90IChudGggMCBwcm9w ZXJ0aWVzKSkpCgkJICAoZWxpbmZvLWxvZy1zdHJpbmcKCQkgICAnY29tbWFuZCB0ZXhpLW5h bWUgZmlsZS1uYW1lIHBvc2l0aW9uCgkJICAgKGNvbmNhdCAiYCIgdGV4aS1wZC1uYW1lICIn IGlzIG5vdCBhIGNvbW1hbmQiKSkpCgkJICgoYW5kIChub3QgdGV4aS1jb21tYW5kKSAobnRo IDAgcHJvcGVydGllcykpCgkJICAoZWxpbmZvLWxvZy1zdHJpbmcKCQkgICAnbm8tY29tbWFu ZCB0ZXhpLW5hbWUgZmlsZS1uYW1lIHBvc2l0aW9uCgkJICAgKGNvbmNhdCAiYCIgdGV4aS1w ZC1uYW1lICInIGlzIGEgY29tbWFuZCIpKSkpCgkJOzsgQ2hlY2sgYXJndW1lbnRzLgoJCShz ZXRxIGFyZy1saXN0IChudGggMiBwcm9wZXJ0aWVzKSkKCQkoY29uZAoJCSAoKG5vdCBhcmct bGlzdCkKCQkgICh1bmxlc3MgKHN0cmluZy1lcXVhbCAoZWxpbmZvLS1nZXQtbmV4dC1hcmcp ICIiKQoJCSAgICA7OyBUaGUgZnVuY3Rpb24gZG9lc24ndCBoYXZlIGFyZ3VtZW50cy4KCQkg ICAgKGVsaW5mby1sb2ctc3RyaW5nCgkJICAgICAnYXJnLW1pc21hdGNoIHRleGktbmFtZSBm aWxlLW5hbWUgcG9zaXRpb24KCQkgICAgIChjb25jYXQgImAiIHRleGktcGQtbmFtZSAiJyBo YXMgbm8gYXJndW1lbnRzIikpKSkKCQkgKChub3QgKGxpc3RwIGFyZy1saXN0KSkKCQkgIDs7 IFVzdWFsbHkgdGhpcyBpcyBhbiAiQXJnbGlzdCBub3QgYXZhaWxhYmxlIC4uLiIgcHJvYmxl bS4KCQkgIChlbGluZm8tbG9nLXN0cmluZwoJCSAgICdhcmctbm90LWF2YWlsYWJsZSB0ZXhp LW5hbWUgZmlsZS1uYW1lIHBvc2l0aW9uCgkJICAgKGNvbmNhdCAiQXJndW1lbnRzIG9mIGAi IHRleGktcGQtbmFtZSAiJyBub3QgYXZhaWxhYmxlIikgdCkpCgkJICh0CgkJICAoY2F0Y2gg J2J1ZwoJCSAgICAoZG9saXN0IChhcmcgYXJnLWxpc3QpCgkJICAgICAgKHNldHEgYXJnLW5h bWUgKGVsaW5mby0tc3ltYm9sLW5hbWUgYXJnKSkKCQkgICAgICAoc2V0cSB0ZXhpLWFyZy1u YW1lIChlbGluZm8tLWdldC1uZXh0LWFyZykpCgkJICAgICAgKGNvbmQKCQkgICAgICAgKChz dHJpbmctZXF1YWwgYXJnLW5hbWUgdGV4aS1hcmctbmFtZSkpIDsgOi0pCgkJICAgICAgICgo c3RyaW5nLWVxdWFsIHRleGktYXJnLW5hbWUgIiIpCgkJCTs7IFRoZSBmdW5jdGlvbiBoYXMg bW9yZSBhcmd1bWVudHMgdGhhbiBkZXNjcmliZWQuCgkJCShvciAoYW5kIChzdHJpbmctbWF0 Y2ggIiZvcHRpb25hbFxcfCZyZXN0IiBhcmctbmFtZSkKCQkJCSA7OyBNYXliZSB0aGUgbWFu dWFsIGp1c3Qgd2FudHMgdXMgdG8KCQkJCSA7OyBpZ25vcmUgdGhlIGFyZ3VtZW50cy4KCQkJ CSAobGV0ICgobGFzdC1uYW1lIChjYXIgKGxhc3QgYXJnLWxpc3QpKSkpCgkJCQkgICAoc3Ry aW5nLW1hdGNoCgkJCQkgICAgImlnbm9yZWQ/IiAoZWxpbmZvLS1zeW1ib2wtbmFtZSBsYXN0 LW5hbWUpKSkpCgkJCSAgICAoZWxpbmZvLWxvZy1zdHJpbmcKCQkJICAgICAnYXJnLW1pc21h dGNoIHRleGktbmFtZSBmaWxlLW5hbWUgcG9zaXRpb24KCQkJICAgICAoY29uY2F0CgkJCSAg ICAgICJgIiB0ZXhpLXBkLW5hbWUgIicgbGFja3MgZGVzY3JpcHRpb24gb2YgIgoJCQkgICAg ICAoY29uZAoJCQkgICAgICAgKChzdHJpbmctZXF1YWwgYXJnLW5hbWUgIiZvcHRpb25hbCIp CgkJCQkib3B0aW9uYWwgYXJndW1lbnQocykuIikKCQkJICAgICAgICgoc3RyaW5nLWVxdWFs IGFyZy1uYW1lICIlcmVzdCIpCgkJCQkicmVzdCBvZiBhcmd1bWVudHMuIikKCQkJICAgICAg ICh0IChjb25jYXQgImFyZ3VtZW50IGAiIGFyZy1uYW1lICInIikpKSkpKQoJCQkodGhyb3cg J2J1ZyB0KSkKCQkgICAgICAgKChvciAoc3RyaW5nLW1hdGNoICImb3B0aW9uYWxcXHwmcmVz dCIgYXJnLW5hbWUpCgkJCSAgICAoc3RyaW5nLW1hdGNoICImb3B0aW9uYWxcXHwmcmVzdCIg dGV4aS1hcmctbmFtZSkpCgkJCShvciAoYW5kIChzdHJpbmctbWF0Y2ggIiZvcHRpb25hbFxc fCZyZXN0IiB0ZXhpLWFyZy1uYW1lKQoJCQkJIDs7IE1heWJlIHdlIGRvbid0IHdhbnQgdG8g a25vdyBhbGwKCQkJCSA7OyBhcmd1bWVudHM/ICBMZXQncyBnZXQgaGV1cmlzdGljYWwKCQkJ CSA7OyBvbmNlIG1vcmUuCgkJCQkgKGxldCAoKG5leHQtbmFtZSAoZWxpbmZvLS1nZXQtbmV4 dC1hcmcpKSkKCQkJCSAgIChzdHJpbmctbWF0Y2gKCQkJCSAgICAiZWxlbWVudHNcXHxhcmd1 bWVudHNcXHxhcmdzIiBuZXh0LW5hbWUgMCkpKQoJCQkgICAgOzsgVGhlIGZvbGxvd2luZyBp ZGlvbSBpcyBwb3B1bGFyIHdpdGhpbgoJCQkgICAgOzsgbWFjcm9zIGFuZCBzcGVjaWFsIGZv cm1zLgoJCQkgICAgKGFuZCAoc3RyaW5nLW1hdGNoICImcmVzdCIgYXJnLW5hbWUpCgkJCQkg KG9yIChzdHJpbmctbWF0Y2ggIkBkb3Rze30kIiB0ZXhpLWFyZy1uYW1lKQoJCQkJICAgICAo cmUtc2VhcmNoLWZvcndhcmQKCQkJCSAgICAgICJAZG90c3t9JCIgKGxpbmUtZW5kLXBvc2l0 aW9uKSB0KSkpCgkJCSAgICAoZWxpbmZvLWxvZy1zdHJpbmcKCQkJICAgICAnYXJnLW1pc21h dGNoIHRleGktbmFtZSBmaWxlLW5hbWUgcG9zaXRpb24KCQkJICAgICAoY29uY2F0CgkJCSAg ICAgICJgIiB0ZXhpLXBkLW5hbWUKCQkJICAgICAgIicgaGFzIG1pc21hdGNoaW5nIG9wdGlv bmFsIG9yIHJlc3Qgb2YgYXJndW1lbnRzIikpKQoJCQkodGhyb3cgJ2J1ZyB0KSkKCQkgICAg ICAgKHQKCQkJKGVsaW5mby1sb2ctc3RyaW5nCgkJCSAnYXJnLW1pc21hdGNoIHRleGktbmFt ZSBmaWxlLW5hbWUgcG9zaXRpb24KCQkJIChjb25jYXQgIiciIHRleGktcGQtbmFtZSAiJyB1 c2VzIGAiIHRleGktYXJnLW5hbWUKCQkJCSAiJyBmb3IgYXJndW1lbnQgYCIgYXJnLW5hbWUg IiciKSB0KSkKCQkgICAgICAgKHRocm93ICdidWcgdCkpKSkpKSkpKQoJICAgKChtYXRjaC1i ZWdpbm5pbmcgNCkKCSAgICAoc2V0cSB0ZXhpLW9wdGlvbiAobWF0Y2gtYmVnaW5uaW5nIDYp KQoJICAgIChzZXRxIHBvc2l0aW9uIChlbGluZm8tLW1vdmUtdG8tbmV4dCkpCgkgICAgKHNl dHEgdGV4aS1uYW1lIChlbGluZm8tLWdldC1uZXh0KSkKCSAgICAoc2V0cSB0ZXhpLXBkLW5h bWUgKHByb3BlcnRpemUgdGV4aS1uYW1lICdmYWNlIGVsaW5mby1sb2ctZGVmLWZhY2UpKQoJ ICAgIChpZiAobm90IChib3VuZHAgKGludGVybiB0ZXhpLW5hbWUpKSkKCQkocHJvZ24KCQkg IChlbGluZm8tbG9nLXN0cmluZwoJCSAgICd2YXItdW5ib3VuZCB0ZXhpLW5hbWUgZmlsZS1u YW1lIHBvc2l0aW9uCgkJICAgKGNvbmNhdCAiVW5ib3VuZCB2YXJpYWJsZSBgIiB0ZXhpLXBk LW5hbWUgIiciKSB0KQoJCSAgKGZvcndhcmQtbGluZSkpCgkgICAgICA7OyBDaGVjayBvcHRp b24gcHJvcGVydHkuCgkgICAgICAoc2V0cSBpcy1vcHRpb24gKGVsaW5mby0taXMtb3B0aW9u IChpbnRlcm4gdGV4aS1uYW1lKSkpCgkgICAgICAoY29uZAoJICAgICAgICgoYW5kIHRleGkt b3B0aW9uIChub3QgaXMtb3B0aW9uKSkKCQkoZWxpbmZvLWxvZy1zdHJpbmcKCQkgJ25vLW9w dGlvbiB0ZXhpLW5hbWUgZmlsZS1uYW1lIHBvc2l0aW9uCgkJIChjb25jYXQgImAiIHRleGkt cGQtbmFtZSAiJyBpcyBub3QgYW4gb3B0aW9uIikpKQoJICAgICAgICgoYW5kIChub3QgdGV4 aS1vcHRpb24pIGlzLW9wdGlvbikKCQkoZWxpbmZvLWxvZy1zdHJpbmcKCQkgJ29wdGlvbiB0 ZXhpLW5hbWUgZmlsZS1uYW1lIHBvc2l0aW9uCgkJIChjb25jYXQgImAiIHRleGktcGQtbmFt ZSAiJyBpcyBhbiBvcHRpb24iKSkpKSkpCgkgICAoKG1hdGNoLWJlZ2lubmluZyA4KQoJICAg IChzZXRxIHBvc2l0aW9uIChsaW5lLWJlZ2lubmluZy1wb3NpdGlvbikpCgkgICAgOzsgQW4g ZXhhbXBsZS12ZXJiYXRpbS1saXNwIGdyb3VwLCBza2lwIGl0LgoJICAgICh1bmxlc3MgKHJl LXNlYXJjaC1mb3J3YXJkCgkJICAgICAoY29uY2F0ICJeQGVuZCAiIChtYXRjaC1zdHJpbmct bm8tcHJvcGVydGllcyA3KQoJCQkgICAgIChtYXRjaC1zdHJpbmctbm8tcHJvcGVydGllcyA4 KSkgbmlsIHQpCgkgICAgICAoZWxpbmZvLWxvZy1zdHJpbmcKCSAgICAgICAnbm8tZW5kIG5p bCBmaWxlLW5hbWUgcG9zaXRpb24KCSAgICAgICAoY29uY2F0ICJVbnRlcm1pbmF0ZWQgIiAo bWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMgNykKCQkgICAgICAgKG1hdGNoLXN0cmluZy1u by1wcm9wZXJ0aWVzIDgpKSkpKQoJICAgKChtYXRjaC1iZWdpbm5pbmcgOSkKCSAgICAoZWxp bmZvLWxvZy1zdHJpbmcKCSAgICAgJ2NvZGUta2JkIG5pbCBmaWxlLW5hbWUgKG1hdGNoLWJl Z2lubmluZyA5KQoJICAgICAoY29uY2F0ICJVc2UgQGtiZCBmb3IgQGNvZGV7IgoJCSAgICAg KHJlcGxhY2UtcmVnZXhwLWluLXN0cmluZwoJCSAgICAgICJcbiIgIiAiIChtYXRjaC1zdHJp bmctbm8tcHJvcGVydGllcyA5KSkgIn0iKSkpCgkgICAoKG1hdGNoLWJlZ2lubmluZyAxMCkK CSAgICAoZWxpbmZvLWxvZy1zdHJpbmcKCSAgICAgJ2NvZGUta2V5IG5pbCBmaWxlLW5hbWUg KG1hdGNoLWJlZ2lubmluZyAxMCkKCSAgICAgKGNvbmNhdCAiVXNlIEBrZXkgZm9yIEBjb2Rl eyIKCQkgICAgIChyZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcKCQkgICAgICAiXG4iICIgIiAo bWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMgMTIpKSAifSIpKSkKCSAgICgobWF0Y2gtYmVn aW5uaW5nIDExKQoJICAgIChlbGluZm8tbG9nLXN0cmluZwoJICAgICAna2JkLWtleSBuaWwg ZmlsZS1uYW1lIChtYXRjaC1iZWdpbm5pbmcgMTEpCgkgICAgIChjb25jYXQgIlVzZSBAa2V5 IGZvciBAa2JkeyIKCQkgICAgIChyZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcKCQkgICAgICAi XG4iICIgIiAobWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMgMTIpKSAifSIpKSkKCSAgICgo bWF0Y2gtYmVnaW5uaW5nIDEzKQoJICAgIDs7IEN1cnJlbnRseSB3ZSBkb24ndCBjYXRlciBm b3IgQGNvZGV7bmlsfSBtaXN3cml0dGVuIGFzIG5pbAoJICAgIDs7IGFuZCBwcm9iYWJseSBu ZXZlciB3aWxsLgoJICAgIChlbGluZm8tbG9nLXN0cmluZwoJICAgICAna2JkLWtleSBuaWwg ZmlsZS1uYW1lIChtYXRjaC1iZWdpbm5pbmcgMTMpCgkgICAgIChjb25jYXQgIlVzZSBub24t QGNvZGV7bmlsfSBpbnN0ZWFkIG9mIG5vbi1uaWwiKSkpCgkgICA7OyBBZGRpdGlvbmFsIGNh c2VzIGFkZGVkIGhlcmUuCgkgICApKSkpKSkKCihkZWZ1biBlbGluZm8tY2hlY2stYnVmZmVy ICgpCiAgIkNoZWNrIHZhbGlkaXR5IG9mIGN1cnJlbnQgVGV4aW5mbyBidWZmZXIuClRoZSBi dWZmZXIgbXVzdCBiZSB2aXNpdGluZyBhIGZpbGUuIgogIChpbnRlcmFjdGl2ZSkKICAoZWxp bmZvLWNsZWFyLWxvZykKICAoY29uZAogICAoKG5vdCBidWZmZXItZmlsZS1uYW1lKQogICAg KGVycm9yICJUaGUgY3VycmVudCBidWZmZXIgZG9lcyBub3QgdmlzaXQgYSBmaWxlIikpCiAg ICgoYW5kIChidWZmZXItbW9kaWZpZWQtcCkKCSAoeS1vci1uLXAgKGZvcm1hdCAiU2F2ZSBi dWZmZXIgJXMgZmlyc3Q/ICIgKGJ1ZmZlci1uYW1lKSkpKQogICAgKHNhdmUtYnVmZmVyKSkp CiAgKHNldHEgZWxpbmZvLWZpbGVzLWNvdW50IG5pbCkKICAoZ290by1jaGFyIChwb2ludC1t aW4pKQogIChlbGluZm8tY2hlY2sgYnVmZmVyLWZpbGUtbmFtZSkKICAoZWxpbmZvLWRpc3Bs YXktbG9nIGJ1ZmZlci1maWxlLW5hbWUpKQoKKGRlZnVuIGVsaW5mby1jaGVjay1maWxlIChm aWxlLW5hbWUpCiAgIkNoZWNrIHZhbGlkaXR5IG9mIFRleGluZm8gZmlsZSBGSUxFLU5BTUUu IgogIChpbnRlcmFjdGl2ZSAiZkNoZWNrIFRleGluZm8gZmlsZSAiKQogIChlbGluZm8tY2xl YXItbG9nKQogIChzZXRxIGVsaW5mby1maWxlcy1jb3VudCBuaWwpCiAgKHdpdGgtdGVtcC1i dWZmZXIKICAgIChpbnNlcnQtZmlsZS1jb250ZW50cyBmaWxlLW5hbWUpCiAgICAoZWxpbmZv LWNoZWNrIGZpbGUtbmFtZSkpCiAgKGVsaW5mby1kaXNwbGF5LWxvZyBmaWxlLW5hbWUpKQoK KGRlZnVuIGVsaW5mby1jaGVjay1kaXJlY3RvcnkgKGRpcmVjdG9yeSkKICAiQ2hlY2sgdmFs aWRpdHkgb2YgVGV4aW5mbyBmaWxlcyBpbiBESVJFQ1RPUlkuIgogIChpbnRlcmFjdGl2ZSAi RENoZWNrIGFsbCB0ZXhpbmZvIGZpbGVzIGluICIpCiAgKGxldCAoKGZpbGVzIChkaXJlY3Rv cnktZmlsZXMgZGlyZWN0b3J5ICdmdWxsKSkpCiAgICAoZWxpbmZvLWNsZWFyLWxvZykKICAg IChzZXRxIGVsaW5mby1maWxlcy1jb3VudCAwKQogICAgKGRvbGlzdCAoZmlsZSBmaWxlcykK ICAgICAgKHdoZW4gKGFuZCAoc3RyaW5nLWVxdWFsIChmaWxlLW5hbWUtZXh0ZW5zaW9uIGZp bGUpICJ0ZXhpIikKCQkgKG5vdCAoYmFja3VwLWZpbGUtbmFtZS1wIGZpbGUpKSkKCSh3aXRo LXRlbXAtYnVmZmVyCgkgIChpbnNlcnQtZmlsZS1jb250ZW50cyBmaWxlKQoJICAoZWxpbmZv LWNoZWNrIGZpbGUpCgkgIChzZXRxIGVsaW5mby1maWxlcy1jb3VudCAoMSsgZWxpbmZvLWZp bGVzLWNvdW50KSkKCSAgKGxldCAobWVzc2FnZS1sb2ctbWF4KQoJICAgIChtZXNzYWdlICIl cyBmaWxlcyBjaGVja2VkIiBlbGluZm8tZmlsZXMtY291bnQpKSkpKQogICAgKGVsaW5mby1k aXNwbGF5LWxvZykpKQoKOzsgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KOzsKOzs7CQkJTmF2 aWdhdGlvbiBVdGlsaXRpZXMKOzsgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KOzsKCihkZWZj dXN0b20gZWxpbmZvLW5hbWVzLWFsaXN0CiAgJygoImVsaXNwIiAuICJsaXNwcmVmIikgKCJl bWFjcyIgLiAiZW1hY3MiKSkKICAiQWxpc3Qgb2YgKGluZm8tZmlsZS1uYW1lIHRleGktc3Vi ZGlyZWN0b3J5KSBhc3NvY2lhdGlvbnMuCklmIGVsaW5mbyBjYW4ndCBmaW5kIGFuIGFzc29j aWF0aW9uIGl0IHdpbGwgbG9vayBpbiB0aGUgXCJtaXNjXCIKc3ViZGlyZWN0b3J5LiIKICA6 dHlwZSAnKHJlcGVhdCAoZ3JvdXAgKHN0cmluZyA6dGFnICJpbmZvLWZpbGUiIDpmb3JtYXQg IiAgJXQ6ICV2IiA6c2l6ZSAxNSkKCQkJKHN0cmluZyA6dGFnICJ0ZXhpLXN1YmRpciIgOmZv cm1hdCAiICAldDogJXZcbiIgOnNpemUgMTUpKSkKICA6Z3JvdXAgJ2VsaW5mbykKCihkZWZj dXN0b20gZWxpbmZvLXRleGktZGlyZWN0b3J5IChjb25jYXQgc291cmNlLWRpcmVjdG9yeSAi ZG9jLyIpCiAgIkRpcmVjdG9yeSB3aGVyZSBkb2MgZmlsZXMgcmVzaWRlLiIKICA6dHlwZSAn ZmlsZQogIDpncm91cCAnZWxpbmZvKQoKKGRlZnVuIGVsaW5mby0tZGVmYXVsdC10YWcgKCkK ICAiUmV0dXJuIGNvbnMgaG9sZGluZyBzdGFydCBhbmQgbmFtZSBvZiB0YWcgbmVhciBgcG9p bnQnLiIKICAobGV0IChmcm9tIHRvIGJvdW5kKQogICAgKHdoZW4gKG9yIChwcm9nbgoJCTs7 IExvb2sgYXQgdGV4dCBhcm91bmQgYHBvaW50Jy4KCQkoc2F2ZS1leGN1cnNpb24KCQkgIChz a2lwLWNoYXJzLWJhY2t3YXJkICJhLXowLTkiKSAoc2V0cSBmcm9tIChwb2ludCkpKQoJCShz YXZlLWV4Y3Vyc2lvbgoJCSAgKHNraXAtY2hhcnMtZm9yd2FyZCAiYS16MC05IikgKHNldHEg dG8gKHBvaW50KSkpCgkJKD4gdG8gZnJvbSkpCgkgICAgICA7OyBMb29rIGJldHdlZW4gYGxp bmUtYmVnaW5uaW5nLXBvc2l0aW9uJyBhbmQgYHBvaW50Jy4KCSAgICAgIChzYXZlLWV4Y3Vy c2lvbgoJCShhbmQgKHNldHEgYm91bmQgKGxpbmUtYmVnaW5uaW5nLXBvc2l0aW9uKSkKCQkg ICAgIChza2lwLWNoYXJzLWJhY2t3YXJkICJeYS16MC05IiBib3VuZCkKCQkgICAgICg+IChz ZXRxIHRvIChwb2ludCkpIGJvdW5kKQoJCSAgICAgKHNraXAtY2hhcnMtYmFja3dhcmQgImEt ejAtOSIpCgkJICAgICAoc2V0cSBmcm9tIChwb2ludCkpKSkKCSAgICAgIDs7IExvb2sgYmV0 d2VlbiBgcG9pbnQnIGFuZCBgbGluZS1lbmQtcG9zaXRpb24nLgoJICAgICAgKHNhdmUtZXhj dXJzaW9uCgkJKGFuZCAoc2V0cSBib3VuZCAobGluZS1lbmQtcG9zaXRpb24pKQoJCSAgICAg KHNraXAtY2hhcnMtZm9yd2FyZCAiXmEtejAtOSIgYm91bmQpCgkJICAgICAoPCAoc2V0cSBm cm9tIChwb2ludCkpIGJvdW5kKQoJCSAgICAgKHNraXAtY2hhcnMtZm9yd2FyZCAiYS16MC05 IikKCQkgICAgIChzZXRxIHRvIChwb2ludCkpKSkpCiAgICAgIChjb25zIGZyb20gKGJ1ZmZl ci1zdWJzdHJpbmctbm8tcHJvcGVydGllcyBmcm9tIHRvKSkpKSkKCihkZWZjb25zdCBlbGlu Zm8tYXQtcmVnZXhwICJcXCg/OlxcKD86QFthLXpdK3tcXHxbfWAnXCJfOl0qXFwpKlsgXHRc bl0qXFwpIgogICJSZWdleHAgc3VwcG9zZWQgdG8gbWF0Y2ggVGV4aW5mbyBjb25zdHJ1Y3Rz IHRoYXQgc2VwYXJhdGUgaXRlbXMuIikKCjs7IFR3byBnbG9iYWxzLCBpbml0aWFsaXplZCBp biBgZWxpbmZvLWdvdG8tdGV4aScgYW5kIHVwZGF0ZWQgYnkKOzsgYGVsaW5mby0tdXBkYXRl LXJlZ2V4cCcuCihkZWZ2YXIgZWxpbmZvLWZyb20gbmlsKQooZGVmdmFyIGVsaW5mby1yZWdl eHAgbmlsKQoKKGRlZnVuIGVsaW5mby0tbWFrZS1yZWdleHAgKGZyb20gdG8pCiAgIlJldHVy biBidWZmZXIgdGV4dCBmcm9tIEZST00gdG8gVE8gYXMgcmVnZXhwLiIKICAocmVwbGFjZS1y ZWdleHAtaW4tc3RyaW5nCiAgICJbIFx0XSsiICJbIFx0XG5dKyIKICAgIChyZWdleHAtcXVv dGUKICAgICAoZG93bmNhc2UKICAgICAgKGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGll cyBmcm9tIHRvKSkpIG5pbCB0KSkKCihkZWZ1biBlbGluZm8tLW1ha2UtcmVnZXhwLTIgKGZy b20gdG8pCiAgIlJldHVybiBidWZmZXIgdGV4dCBmcm9tIEZST00gdG8gVE8gYXMgVGV4aW5m b2lzaCByZWdleHAuIgogIChyZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcKICAgIkBcXChbQHt9 XVxcKSIgKGxhbWJkYSAoc3RyaW5nKSAobWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMgMSBz dHJpbmcpKQogICAoZWxpbmZvLS1tYWtlLXJlZ2V4cCBmcm9tIHRvKSkpCgooZGVmdW4gZWxp bmZvLS11cGRhdGUtcmVnZXhwICgmb3B0aW9uYWwgcmVzdCkKICAoc2V0cSBlbGluZm8tcmVn ZXhwCgkoY29uY2F0CgkgZWxpbmZvLXJlZ2V4cAoJIChlbGluZm8tLW1ha2UtcmVnZXhwIGVs aW5mby1mcm9tIChtYXRjaC1iZWdpbm5pbmcgMCkpCgkgKHVubGVzcyAoPSBlbGluZm8tZnJv bSAobWF0Y2gtYmVnaW5uaW5nIDApKQoJICAgZWxpbmZvLWF0LXJlZ2V4cCkKCSAod2hlbiBy ZXN0CgkgICAoY29uY2F0IHJlc3QgZWxpbmZvLWF0LXJlZ2V4cCkpKSkpCgooZGVmdW4gZWxp bmZvLS11cGRhdGUtcmVnZXhwLTgxMCAoJm9wdGlvbmFsIHJlc3QpCiAgKHNldHEgZWxpbmZv LXJlZ2V4cAoJKGNvbmNhdAoJIGVsaW5mby1yZWdleHAKCSAoZWxpbmZvLS1tYWtlLXJlZ2V4 cCBlbGluZm8tZnJvbSAobWF0Y2gtYmVnaW5uaW5nIDApKQoJICh1bmxlc3MgKD0gZWxpbmZv LWZyb20gKG1hdGNoLWJlZ2lubmluZyAwKSkKCSAgIGVsaW5mby1hdC1yZWdleHApCgkgKHdo ZW4gcmVzdAoJICAgKGNvbmNhdCByZXN0IGVsaW5mby1hdC1yZWdleHApKSkpKQoKKGRlZmNv bnN0IGVsaW5mby1pbmZvLXJlZ2V4cAogICJcXCgtLSBcXCg/OkZ1bmN0aW9uXFx8Q29tbWFu ZFxcfFZhcmlhYmxlXFx8TWFjcm9cXHxTcGVjaWFsIEZvcm1cXHxVc2VyIE9wdGlvblxcfFN5 bnRheCBjbGFzc1xcKTogXFwpXApcXHxcXCg/OlxcKFxcKk5vdGVcXClcXHxcXCg6OlxcKVxc fFxcKlxcKFdhcm5pbmc6XFwpXFwqXFwpWyBdKlxcfFvigJhdKjxcXChbXj5dK1xcKT5b4oCZ XSpcClxcfFxcKFxcKD86TGFcXCk/VGVYXFx8KFtDUl0pXFx8RXVyb1xcKVxcfFxcKOKAmFxc KFte4oCZXStcXCnigJlcXClcXHxcXChb4oCYXSpcXChbQS1aMC05Ki1dK1xcKVvigJldKlxc KVwKXFx8XFwoWyBcdFxuXStcXClcXHxcXChbJ1wiX10rXFwpXFx8XFwoLStcXClcXHxcXChc XC5bLl0rXFwpXApcXHxcXChcXCg/OmVycm9yXFwpP1stLiE9PnwqI11bLS4hPT58KiNdK1xc KVxcfFxcKFt7fV1cXCkiCiAgIlRoZSBiYXNpYyByZWdleHAgdXNlZCBieSBgZWxpbmZvLWdv dG8tdGV4aScuIikKCjs7IFVzZWQgZm9yIHRlc3Rpbmcgb25seSBzbyBSRU1PVkUgaXQuCihk ZWZ2YXIgZWxpbmZvLXRlc3QtdGV4aS13aW5kb3cgbmlsKQoKKGRlZnVuIGVsaW5mby1maW5k LXRhZy1vdGhlci13aW5kb3cgKHRhZ25hbWUgJm9wdGlvbmFsIG5leHQtcCByZWdleHAtcCkK ICAiT3VyIHZlcnNpb24gb2YgYGZpbmQtdGFnLW90aGVyLXdpbmRvdycuIgogIChsZXQqICgo d2luZG93LXBvaW50ICh3aW5kb3ctcG9pbnQpKQoJICh0YWdidWYgKGZpbmQtdGFnLW5vc2Vs ZWN0IHRhZ25hbWUgbmV4dC1wIHJlZ2V4cC1wKSkKCSAodGFncG9pbnQgKHByb2duIChzZXQt YnVmZmVyIHRhZ2J1ZikgKHBvaW50KSkpKQogICAgKHNldC13aW5kb3ctcG9pbnQgKHByb2cx CgkJCSAgKHNlbGVjdGVkLXdpbmRvdykKCQkJKHNlbGVjdC13aW5kb3cKCQkJIChvciAoZ2V0 LWJ1ZmZlci13aW5kb3cgdGFnYnVmKQoJCQkgICAgIChsZXQgKCh3aW5kb3cgKHNwbGl0LXdp bmRvdyBuaWwgbmlsICdsZWZ0KSkpCgkJCSAgICAgICAoc2V0LXdpbmRvdy1idWZmZXIgd2lu ZG93IHRhZ2J1ZikKCQkJICAgICAgIHdpbmRvdykpKQoJCQkoc2V0LXdpbmRvdy1wb2ludCAo c2VsZWN0ZWQtd2luZG93KSB0YWdwb2ludCkpCgkJICAgICAgd2luZG93LXBvaW50KSkpCgoo ZGVmdW4gZWxpbmZvLXdpbmRvd3Mtc3luY2ggKCZvcHRpb25hbCBzb3VyY2UgdGFyZ2V0KQog ICJTeW5jaCBgd2luZG93LXBvaW50JyBvZiB3aW5kb3cgVEFSR0VUIHdpdGggdGhhdCBvZiB3 aW5kb3cgU09VUkNFLiIKICAobGV0KiAoKHNvdXJjZSAob3Igc291cmNlIChzZWxlY3RlZC13 aW5kb3cpKSkKCSAodGFyZ2V0IChvciB0YXJnZXQKCQkgICAgICh3aW5kb3ctaW4tZGlyZWN0 aW9uICdsZWZ0IHNvdXJjZSkKCQkgICAgICh3aW5kb3ctaW4tZGlyZWN0aW9uICdyaWdodCBz b3VyY2UpKSkKCSAobGluZQoJICAod2l0aC1jdXJyZW50LWJ1ZmZlciAod2luZG93LWJ1ZmZl ciBzb3VyY2UpCgkgICAgKGNvdW50LXNjcmVlbi1saW5lcyAod2luZG93LXN0YXJ0IHNvdXJj ZSkgKHdpbmRvdy1wb2ludCBzb3VyY2UpKSkpCgkgOzsgRXhwZXJpbWVudGFsbHkgT0sgLi4u CgkgKHNvdXJjZS1oZWFkICgvICgrICh3aW5kb3ctaGVhZGVyLWxpbmUtaGVpZ2h0IHNvdXJj ZSkKCQkJICAgICh3aW5kb3ctdGFiLWxpbmUtaGVpZ2h0IHNvdXJjZSkpCgkJCSAoZnJhbWUt Y2hhci1oZWlnaHQgKHdpbmRvdy1mcmFtZSBzb3VyY2UpKSkpCgkgKHRhcmdldC1oZWFkICgv ICgrICh3aW5kb3ctaGVhZGVyLWxpbmUtaGVpZ2h0IHRhcmdldCkKCQkJICAgICh3aW5kb3ct dGFiLWxpbmUtaGVpZ2h0IHRhcmdldCkpCgkJCSAoZnJhbWUtY2hhci1oZWlnaHQgKHdpbmRv dy1mcmFtZSB0YXJnZXQpKSkpKQogICAgKHNldHEgbGluZSAoKyBsaW5lICgtIHNvdXJjZS1o ZWFkIHRhcmdldC1oZWFkKSkpCiAgICAod2l0aC1zZWxlY3RlZC13aW5kb3cgdGFyZ2V0CiAg ICAgIChyZWNlbnRlciAoMS0gbGluZSkpKSkpCgooZGVmdW4gZWxpbmZvLWdvdG8tdGV4aSAo KQogICJJbiBgSW5mby1tb2RlJyBkaXNwbGF5IGNvcnJlc3BvbmRpbmcgVGV4aW5mbyB0ZXh0 IGluIG90aGVyIHdpbmRvdy4KSWYgaW52b2tpbmcgdGhpcyBjb21tYW5kIGRvZXNuJ3QgZ2V0 IHlvdSB0byB0aGUgZGVzaXJlZCBwb3NpdGlvbgppbiB0aGUgVGV4aW5mbyBidWZmZXIsIHlv dSBtaWdodCB0cnkgdG8gaW52b2tlIGl0IGZyb20gYSBwb3NpdGlvbgpvbmUgbGluZSBhYm92 ZSBvciBiZWxvdyB0aGUgY3VycmVudCBvbmUgaW4gdGhlIEluZm8gYnVmZmVyLiIKICAoaW50 ZXJhY3RpdmUpCiAgKHVubGVzcyAoZXEgbWFqb3ItbW9kZSAnSW5mby1tb2RlKQogICAgKGVy cm9yICJUaGlzIGZ1bmN0aW9uIGNhbiBiZSBpbnZva2VkIGluIEluZm8tbW9kZSBvbmx5Iikp CiAgKGxldCogKChpbmZvLXdpbmRvdyAoc2VsZWN0ZWQtd2luZG93KSkKCSAod2luZG93LXBv aW50ICh3aW5kb3ctcG9pbnQpKQoJIChpbmZvLWZpbGUtbmFtZQoJICAod2hlbiAoYm91bmRw ICdJbmZvLWN1cnJlbnQtZmlsZSkKCSAgICAoZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSBJbmZv LWN1cnJlbnQtZmlsZSkpKQoJICh0YWcKCSAgKHdoZW4gKGJvdW5kcCAnSW5mby1jdXJyZW50 LW5vZGUpCgkgICAgSW5mby1jdXJyZW50LW5vZGUpKQoJICh0ZXhpLXN1YmRpcgoJICAod2hl biBpbmZvLWZpbGUtbmFtZQoJICAgIChsZXQgKChjZWxsIChhc3NvYyBpbmZvLWZpbGUtbmFt ZSBlbGluZm8tbmFtZXMtYWxpc3QpKSkKCSAgICAgIChpZiBjZWxsIChjZHIgY2VsbCkgIm1p c2MiKSkpKQoJIChhdCAocG9pbnQpKQoJIChvZmZzZXQgMCkKCSB0ZXhpLWRpciB0ZXhpLWZp bGUgdGFncy1maWxlLW5hbWUKCSBkZWZhdWx0LXRhZyBhbmNob3IgcmVwZWF0IGZyb20gdG8K CSBjYXNlLWZvbGQtc2VhcmNoIHRhZ2J1ZikKICAgIChjb25kCiAgICAgKChub3QgdGV4aS1z dWJkaXIpCiAgICAgIChlcnJvciAiQ2FuJ3QgaWRlbnRpZnkgdGV4aW5mbyBzdWJkaXJlY3Rv cnkiKSkKICAgICAoKGZpbGUtZXhpc3RzLXAKICAgICAgIChzZXRxIHRleGktZGlyIChjb25j YXQgZWxpbmZvLXRleGktZGlyZWN0b3J5IHRleGktc3ViZGlyICIvIikpKSkKICAgICAodAog ICAgICAoZXJyb3IgIkNhbid0IGZpbmQgdGV4aW5mbyBzdWJkaXJlY3RvcnkiKSkpCgogICAg OzsgU2lnaCAuLi4KICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICA7OyBNb3ZlIGF3YXkgZnJv bSBlbXB0eSBsaW5lcy4KICAgICAgKHNhdmUtZXhjdXJzaW9uCgkoYmVnaW5uaW5nLW9mLWxp bmUpCgkod2hlbiAobG9va2luZy1hdCAiWyBcdF0qJCIpCgkgIChsZXQgKChwcmV2LWF0CgkJ IChwcm9nbgoJCSAgIChza2lwLWNoYXJzLWJhY2t3YXJkICIgXHRcbiIpCgkJICAgKHVubGVz cyAoYm9icCkKCQkgICAgIChwb2ludCkpKSkKCQkobmV4dC1hdAoJCSAocHJvZ24KCQkgICAo c2tpcC1jaGFycy1mb3J3YXJkICIgXHRcbiIpCgkJICAgKHVubGVzcyAoZW9icCkKCQkgICAg IChwb2ludCkpKSkpCgkgICAgKHNldHEgYXQKCQkgIChjb25kCgkJICAgKChhbmQgcHJldi1h dCBuZXh0LWF0KQoJCSAgICAoaWYgKD4gKC0gYXQgcHJldi1hdCkgKC0gbmV4dC1hdCBhdCkp IG5leHQtYXQgcHJldi1hdCkpCgkJICAgKHByZXYtYXQgcHJldi1hdCkKCQkgICAobmV4dC1h dCBuZXh0LWF0KSkpKSkpCiAgICAgIChnb3RvLWNoYXIgYXQpCiAgICAgIChzZXRxIGZyb20g KHByb2duCgkJICAgKGJlZ2lubmluZy1vZi1saW5lKQoJCSAgIChza2lwLWNoYXJzLWZvcndh cmQgIiBcdCIpCgkJICAgKHBvaW50KSkpCiAgICAgIChzZXRxIHRvIChwcm9nbgoJCSAoZW5k LW9mLWxpbmUpCgkJIChza2lwLWNoYXJzLWJhY2t3YXJkICIgXHQiKQoJCSAocG9pbnQpKSkK ICAgICAgOzsgVHJ5IHRvIGhhbmRsZSBhbiB4cmVmIHRoYXQgc3BhbnMgdGhlIGJlZ2lubmlu ZyBvZiB0aGlzIGxpbmUuCiAgICAgIDs7IFRoaXMgd2lsbCBwdXQgdXMgYWZ0ZXIgdGhlIHJl ZmVyZW5jZSBpbiB0aGUgdGV4aSBidWZmZXIsIGJ1dAogICAgICA7OyB0aGF0J3Mgc3RpbGwg YmV0dGVyIHRoYW4gZ2V0dGluZyB0byB0aGUgaGVhZCBvZiB0aGUgc2VjdGlvbi4KICAgICAg KHdoZW4gKHNhdmUtZXhjdXJzaW9uCgkgICAgICAoZ290by1jaGFyIGZyb20pCgkgICAgICAo YW5kIChyZS1zZWFyY2gtYmFja3dhcmQKCQkgICAgIlxcKltObl1vdGUiIChsaW5lLWJlZ2lu bmluZy1wb3NpdGlvbiAwKSB0KQoJCSAgIChub3QgKHJlLXNlYXJjaC1mb3J3YXJkICJbLixd XFx8OjoiIGZyb20gdCkpKSkKCShnb3RvLWNoYXIgZnJvbSkKCShyZS1zZWFyY2gtZm9yd2Fy ZCAiOjpcXHxcXChbLixdKT9cXCkiIHRvIHQpCgkod2hlbiAobWF0Y2gtYmVnaW5uaW5nIDEp CgkgIDs7IEZvdW5kIGEgY2xvc2luZyBgLicgb3IgYCwnIHNvIHJlbG9jYXRlIGBmcm9tJy4K CSAgKHNldHEgZnJvbSAocG9pbnQpKQoJICAoc2V0cSBhdCAobWF4IGZyb20gYXQpKSkpCgog ICAgICAoZ290by1jaGFyIGF0KQogICAgICAod2hlbiAoc2V0cSBkZWZhdWx0LXRhZyAoZWxp bmZvLS1kZWZhdWx0LXRhZykpCgkoc2V0cSBvZmZzZXQgKC0gYXQgKGNhciBkZWZhdWx0LXRh ZykpKQoJKHNldHEgYW5jaG9yIChjZHIgZGVmYXVsdC10YWcpKQoJKHNhdmUtZXhjdXJzaW9u CgkgIChnb3RvLWNoYXIgZnJvbSkKCSAgKGNhdGNoICdkb25lCgkgICAgKGxldCAoKGNhc2Ut Zm9sZC1zZWFyY2ggdCkpCgkgICAgICAod2hpbGUgKHJlLXNlYXJjaC1mb3J3YXJkIGFuY2hv ciBuaWwgdCkKCQkoaWYgKD0gKG1hdGNoLWJlZ2lubmluZyAwKSAoY2FyIGRlZmF1bHQtdGFn KSkKCQkgICAgKHRocm93ICdkb25lIHQpCgkJICAoc2V0cSByZXBlYXQKCQkJKGlmIHJlcGVh dCAoMSsgcmVwZWF0KSAyKSkpKSkpKSkKCiAgICAgIChnb3RvLWNoYXIgKHNldHEgZWxpbmZv LWZyb20gZnJvbSkpCiAgICAgIChzZXRxIGVsaW5mby1yZWdleHAgbmlsKQogICAgICA7OyBT Y2FuIGxpbmUuCiAgICAgICh3aGlsZSAocmUtc2VhcmNoLWZvcndhcmQgZWxpbmZvLWluZm8t cmVnZXhwIHRvIHQpCgkoY29uZAoJICgobWF0Y2gtYmVnaW5uaW5nIDEpKQkJCTsgLS0gRnVu Y3Rpb246IC4uLgoJICgobWF0Y2gtYmVnaW5uaW5nIDIpCQkJOyAqTm90ZQoJICAoZWxpbmZv LS11cGRhdGUtcmVnZXhwKQoJICAobGV0ICgoZnJvbS0xIChwb2ludCkpCgkJdG8tMSkKCSAg ICAoaWYgKHJlLXNlYXJjaC1mb3J3YXJkICI6IiB0byB0KQoJCShwcm9nbgoJCSAgKHNldHEg dG8tMSAobWF0Y2gtYmVnaW5uaW5nIDApKQoJCSAgKGlmIChsb29raW5nLWF0LXAgIjoiKQoJ CSAgICAgIDs7IDo6IGlzIGhhbmRsZWQgYnkgbWFpbiBsb29wLCByZXNjYW4uCgkJICAgICAg KGdvdG8tY2hhciBmcm9tLTEpCgkJICAgIDs7IEEgY29tcGxleCB4cmVmLCBoYW5kbGUgaXQg aGVyZS4KCQkgICAgKHNldHEgZWxpbmZvLXJlZ2V4cAoJCQkgIChjb25jYXQgZWxpbmZvLXJl Z2V4cCA7IEZvcmNlIGEgYHsnIGhlcmU/CgkJCQkgICJbYS16QS1aLCBcdFxuXSoiCgkJCQkg IChlbGluZm8tLW1ha2UtcmVnZXhwIGZyb20tMSB0by0xKQoJCQkJICAiW2EtekEtWiwgXHRc bl0qfSIpKQoJCSAgICA7OyBRdWl0IGxvb3AuCgkJICAgIChzZXRxIGZyb20gdG8pCgkJICAg IChnb3RvLWNoYXIgdG8pKSkKCSAgICAgIChzZXRxIGVsaW5mby1yZWdleHAKCQkgICAgKGNv bmNhdCBlbGluZm8tcmVnZXhwCTsgRm9yY2UgYSBgeycgaGVyZT8KCQkJICAgICJbYS16QS1a LCBcdFxuXSoiCgkJCSAgICAoZWxpbmZvLS1tYWtlLXJlZ2V4cCBmcm9tLTEgdG8pCgkJCSAg ICAiW2EtekEtWiwgXHRcbl0qfSIpKQoJICAgICAgOzsgUXVpdCBsb29wLgoJICAgICAgKHNl dHEgZnJvbSB0bykKCSAgICAgIChnb3RvLWNoYXIgdG8pKSkpCgkgKChtYXRjaC1iZWdpbm5p bmcgMykJCQk7IDo6CgkgIChlbGluZm8tLXVwZGF0ZS1yZWdleHApKQoJICgobWF0Y2gtYmVn aW5uaW5nIDQpCQkJOyAqV2FybmluZzoqCgkgIChlbGluZm8tLXVwZGF0ZS1yZWdleHApKQoJ ICgobWF0Y2gtYmVnaW5uaW5nIDUpCQkJOyBgPEtFWT4nCgkgIChlbGluZm8tLXVwZGF0ZS1y ZWdleHAKCSAgIChlbGluZm8tLW1ha2UtcmVnZXhwIChtYXRjaC1iZWdpbm5pbmcgNSkgKG1h dGNoLWVuZCA1KSkpKQoJICgobWF0Y2gtYmVnaW5uaW5nIDYpCgkgIChlbGluZm8tLXVwZGF0 ZS1yZWdleHAKCSAgIChjb25jYXQgIkA/IiAobWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMg NikgIlxcKD86W3t9XStcXCk/IikpKQoJICgobWF0Y2gtYmVnaW5uaW5nIDcpCQkJOyBRdW90 ZWQgc3RyaW5nCgkgIChlbGluZm8tLXVwZGF0ZS1yZWdleHAtODEwCgkgICAoZWxpbmZvLS1t YWtlLXJlZ2V4cCAobWF0Y2gtYmVnaW5uaW5nIDgpIChtYXRjaC1lbmQgOCkpKSkKCSAoKG1h dGNoLWJlZ2lubmluZyA5KQkJCTsgVXBwZXItY2FzZSBzdHJpbmcuCgkgIChlbGluZm8tLXVw ZGF0ZS1yZWdleHAtODEwCgkgICAoZWxpbmZvLS1tYWtlLXJlZ2V4cCAobWF0Y2gtYmVnaW5u aW5nIDEwKSAobWF0Y2gtZW5kIDEwKSkpKQoJICgobWF0Y2gtYmVnaW5uaW5nIDExKQkJCTsg V2hpdGVzcGFjZQoJICAoZWxpbmZvLS11cGRhdGUtcmVnZXhwICJbIFx0XG5dKyIpKQoJICgo bWF0Y2gtYmVnaW5uaW5nIDEyKQkJCTsgYCciCgkgIChlbGluZm8tLXVwZGF0ZS1yZWdleHAp KQoJICgobWF0Y2gtYmVnaW5uaW5nIDEzKQkJCTsgLS0KCSAgKGVsaW5mby0tdXBkYXRlLXJl Z2V4cCAiWy1dKyIpKQoJICgobWF0Y2gtYmVnaW5uaW5nIDE0KQkJCTsgLi4KCSAgKGVsaW5m by0tdXBkYXRlLXJlZ2V4cCAiXFwoPzpcXC5bLl0rXFx8QGRvdHN7fVxcKSIpKQoJICgobWF0 Y2gtYmVnaW5uaW5nIDE1KQkJCTsgPT4KCSAgKGVsaW5mby0tdXBkYXRlLXJlZ2V4cAoJICAg KGNvbmNhdAoJICAgICJcXCg/OkBbYS16XSt7fVxcKVxcfCIKCSAgICAoZWxpbmZvLS1tYWtl LXJlZ2V4cCAobWF0Y2gtYmVnaW5uaW5nIDE1KSAobWF0Y2gtZW5kIDE1KSkpKSkKCSAoKG1h dGNoLWJlZ2lubmluZyAxNikJCQk7IHsgb3IgfQoJICAoZWxpbmZvLS11cGRhdGUtcmVnZXhw CgkgICAoY29uY2F0ICJAPyIgKG1hdGNoLXN0cmluZy1uby1wcm9wZXJ0aWVzIDE2KSBlbGlu Zm8tYXQtcmVnZXhwKSkpCgkgOzsgRnV0dXJlIGFkZGl0aW9ucyBnbyBoZXJlLgoJICkKCShz ZXRxIGVsaW5mby1mcm9tIChwb2ludCkpKQogICAgICAoc2V0cSBlbGluZm8tcmVnZXhwCgkg ICAgKGNvbmNhdCBlbGluZm8tcmVnZXhwIChlbGluZm8tLW1ha2UtcmVnZXhwIGVsaW5mby1m cm9tIHRvKSkpKQoKICAgIChpZiAobm90IChmaWxlLWV4aXN0cy1wCgkgICAgICAoc2V0cSB0 YWdzLWZpbGUtbmFtZSAoY29uY2F0IHRleGktZGlyICJUQUdTIikpKSkKCShlcnJvciAiTm8g dGFncyBmaWxlIGZvdW5kIikKICAgICAgKHNldHEgdGFnYnVmIChmaW5kLXRhZy1ub3NlbGVj dCAoY29uY2F0ICJeQG5vZGUgIiB0YWcgIlt/LF0iKSBuaWwgdCkpCiAgICAgIChlbGluZm8t ZmluZC10YWctb3RoZXItd2luZG93IChjb25jYXQgIl5Abm9kZSAiIHRhZyAiW38sXSIpIG5p bCB0KQoKICAgICAgOzsgVXNlZCBmb3IgdGVzdGluZyBvbmx5IHNvIFJFTU9WRSBpdC4KICAg ICAgKHNldHEgZWxpbmZvLXRlc3QtdGV4aS13aW5kb3cgKHNlbGVjdGVkLXdpbmRvdykpCgog ICAgICAobGV0ICgoY2FzZS1mb2xkLXNlYXJjaCB0KSkKCSh3aGVuIGVsaW5mby1yZWdleHAK CSAgKHdpdGgtY3VycmVudC1idWZmZXIgKGdldC1idWZmZXItY3JlYXRlICIqdGVzdCoiKQoJ ICAgIChkZWxldGUtcmVnaW9uIChwb2ludC1taW4pIChwb2ludC1tYXgpKQoJICAgIChpbnNl cnQgZWxpbmZvLXJlZ2V4cCkpCgkgIChsZXQgKChhdCAocG9pbnQpKSkKCSAgICAoY29uZAoJ ICAgICAoKGFuZCAocmUtc2VhcmNoLWZvcndhcmQgKGNvbmNhdCAiXFwoIiBlbGluZm8tcmVn ZXhwICJcXClcXHxebm9kZSIpIG5pbCB0KQoJCSAgIChtYXRjaC1iZWdpbm5pbmcgMSkpCgkg ICAgICAoZ290by1jaGFyIChtYXRjaC1iZWdpbm5pbmcgMSkpCgkgICAgICAoc2F2ZS1yZXN0 cmljdGlvbgoJCSh3aWRlbikKCQkobmFycm93LXRvLXJlZ2lvbiAobWF0Y2gtYmVnaW5uaW5n IDEpIChtYXRjaC1lbmQgMSkpCgkJKHdoZW4gKGFuZCBhbmNob3IgKHJlLXNlYXJjaC1mb3J3 YXJkIGFuY2hvciBuaWwgdCByZXBlYXQpKQoJCSAgKGdvdG8tY2hhciAoKyAobWF0Y2gtYmVn aW5uaW5nIDApIG9mZnNldCkpKSkpCgkgICAgICh0CgkgICAgICAoZ290by1jaGFyIGF0KSkp KSkpKQoKICAgIChzZXQtd2luZG93LXBvaW50IGluZm8td2luZG93IHdpbmRvdy1wb2ludCkK ICAgIChlbGluZm8td2luZG93cy1zeW5jaCBpbmZvLXdpbmRvdyAoZ2V0LWJ1ZmZlci13aW5k b3cgdGFnYnVmKSkKICAgIDs7IFRoZSBmb2xsb3dpbmcgbWlnaHQgZ2V0IHJlbW92ZWQuCiAg ICAoc2VsZWN0LXdpbmRvdyBpbmZvLXdpbmRvdykKICAgICkpCgooZGVmY29uc3QgZWxpbmZv LXRleGktZ2x5cGgtcmVnZXhwCiAgKHJlZ2V4cC1vcHQKICAgJygiZG90cyIgImVuZGRvdHMi ICJidWxsZXQiICJtaW51cyIgInJlc3VsdCIgImV4cGFuc2lvbiIKICAgICAicHJpbnQiICJl cnJvciIgImVxdWl2IiAicG9pbnQiICJjb3B5cmlnaHQiCiAgICAgInJlZ2lzdGVyZWRzeW1i b2wiICJldXJvIiAicG91bmRzIiAiTGFUZVgiICJUZVgiKSkKICAiUmVndWxhciBleHByZXNz aW9uIGZvciBnbHlwaHMgaW4gdGV4aSBidWZmZXJzLiIpCgooZGVmY29uc3QgZWxpbmZvLXRl eGktcmVnZXhwCiAgKGNvbmNhdAogICAiQGRlZlxcKHVuXFx8Zm4gQ29tbWFuZFxcfHZhclxc fG1hY3JvXFx8c3BlY1xcfG9wdFxcKVsgXHRdK1wKXFx8XFwoPzpAcD94cmVme1xcKFtefV0r XFwpXFwoPzp9XFx8JFxcKVxcKVxcfEBcXCg/OnN0cm9uZ1xcfGVtcGhcXCl7XFwoW159XStc XCl9XApcXHxcXChAIiBlbGluZm8tdGV4aS1nbHlwaC1yZWdleHAgInt9XFwpXFx8XFwoPzpA ZGZue1xcKFtefV0rXFwpfVxcKVwKXFx8XFwoQFthLXpdK3tcXClcXHxcXCh9XFwpXFx8XFwo WyBcdF0rXFwpXFx8XFwoW2AnXCJdW2AnXCJdK1xcKSIpCiAgIlRoZSBiYXNpYyByZWdleHAg dXNlZCBieSBgZWxpbmZvLWdvdG8taW5mbycuIikKCihkZWZ1biBlbGluZm8tZ290by1pbmZv ICgpCiAgIkluIGB0ZXhpbmZvLW1vZGUnIGRpc3BsYXkgY29ycmVzcG9uZGluZyBJbmZvIG5v ZGUgaW4gb3RoZXIgd2luZG93LgpJZiBpbnZva2luZyB0aGlzIGNvbW1hbmQgZG9lc24ndCBn ZXQgeW91IHRvIHRoZSBkZXNpcmVkIHBvc2l0aW9uCmluIHRoZSBJbmZvIGJ1ZmZlciwgeW91 IG1pZ2h0IHRyeSB0byBpbnZva2UgaXQgZnJvbSBhIHBvc2l0aW9uCm9uZSBsaW5lIGFib3Zl IG9yIGJlbG93IHRoZSBjdXJyZW50IG9uZSBpbiB0aGUgVGV4aW5mbyBidWZmZXIuIgogIChp bnRlcmFjdGl2ZSkKICAodW5sZXNzIChlcSBtYWpvci1tb2RlICd0ZXhpbmZvLW1vZGUpCiAg ICAoZXJyb3IgIlRoaXMgZnVuY3Rpb24gY2FuIGJlIGludm9rZWQgaW4gdGV4aW5mby1tb2Rl IG9ubHkiKSkKICAobGV0KiAoKHRleGktd2luZG93IChzZWxlY3RlZC13aW5kb3cpKQoJICh3 aW5kb3ctcG9pbnQgKHdpbmRvdy1wb2ludCkpCgkgKGluZm8tbm9kZS0zCgkgIChzYXZlLWV4 Y3Vyc2lvbgoJICAgICh3aGVuIChyZS1zZWFyY2gtYmFja3dhcmQgIl5Abm9kZSBcXChbLWEt ekEtWiBdK1xcKSIgbmlsIHQpCgkgICAgICAobWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMg MSkpKSkKCSAoaW5mby1ub2RlLTIKCSAgKHNhdmUtZXhjdXJzaW9uCgkgICAgKGdvdG8tY2hh ciAocG9pbnQtbWluKSkKCSAgICAod2hlbiAocmUtc2VhcmNoLWZvcndhcmQgIl5Abm9kZSBc XChbLWEtekEtWiBdK1xcKSIgbmlsIHQpCgkgICAgICAobWF0Y2gtc3RyaW5nLW5vLXByb3Bl cnRpZXMgMSkpKSkKCSAoaW5mby1ub2RlLTEKCSAgOzsgSWYgd2UgY2FuJ3QgZmluZCBhbiBh c3NvY2lhdGlvbiwgYGluZm8tb3RoZXItd2luZG93JyB3aWxsCgkgIDs7IHN0YXJ0IGF0IHRo ZSB0b3Agbm9kZS4KCSAgKGNhciAocmFzc29jCgkJKGZpbGUtbmFtZS1ub25kaXJlY3RvcnkK CQkgKGRpcmVjdG9yeS1maWxlLW5hbWUKCQkgIChmaWxlLW5hbWUtZGlyZWN0b3J5IGJ1ZmZl ci1maWxlLW5hbWUpKSkKCQllbGluZm8tbmFtZXMtYWxpc3QpKSkKCSAob2Zmc2V0IDApCgkg cmVnZXhwIGRlZmF1bHQtdGFnIGFuY2hvciByZXBlYXQKCSBjYXNlLWZvbGQtc2VhcmNoKQoK ICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICA7OyBVc2UgYnJ1dGUgZm9yY2UuCiAgICAgICh3 aGlsZSAoc2F2ZS1leGN1cnNpb24KCSAgICAgICAoYmVnaW5uaW5nLW9mLWxpbmUpCgkgICAg ICAgKG9yIChsb29raW5nLWF0ICJbIFx0XSpcblxcfEBhbmNob3J7IikKCQkgICAoYW5kIChs b29raW5nLWF0ICJAW2Etel0rXFwoPzogXFx8JFxcKSIpCgkJCShub3QgKGxvb2tpbmctYXQg IkBkZWZcXCh1blxcfGZuIENvbW1hbmRcXHx2YXJcXHxtYWNyb1xcfHNwZWNcXHxvcHRcXCki KSkpKSkKCShmb3J3YXJkLWxpbmUpKQogICAgICAobGV0ICgoYXQgKHBvaW50KSkKCSAgICAg KGZyb20gKHByb2duCgkJICAgICAoYmVnaW5uaW5nLW9mLWxpbmUpCgkJICAgICAoc2tpcC1j aGFycy1mb3J3YXJkICIgXHQiKQoJCSAgICAgKHBvaW50KSkpCgkgICAgICh0byAocHJvZ24K CQkgICAoZW5kLW9mLWxpbmUpCgkJICAgKHNraXAtY2hhcnMtYmFja3dhcmQgIiBcdCIpCgkJ ICAgKHBvaW50KSkpKQoKCTs7IEdldCBvdXQgb2YgYW55IHJlZmVyZW5jZSBhdCBCT0wsIHdl IGNhbid0IHRyYWNlIGl0IGFueXdheS4KCShjb25kaXRpb24tY2FzZSBuaWwKCSAgICAoYW5k IChwcm9nbgoJCSAgIChnb3RvLWNoYXIgZnJvbSkKCQkgICAodXAtbGlzdCAtMSkKCQkgICAo bG9va2luZy1hdCAieyIpKQoJCSAobG9va2luZy1iYWNrICJ4cmVmIiAobGluZS1iZWdpbm5p bmctcG9zaXRpb24pKQoJCSAocHJvZ24KCQkgICAoZm9yd2FyZC1zZXhwKQoJCSAgIChzZXRx IGZyb20gKHBvaW50KSkKCQkgICAoc2V0cSBhdCAobWF4IGF0IGZyb20pKSkpCgkgIChlcnJv ciBuaWwpKQoKCShnb3RvLWNoYXIgKG1heCBhdCBmcm9tKSkKCSh3aGVuIChzZXRxIGRlZmF1 bHQtdGFnIChlbGluZm8tLWRlZmF1bHQtdGFnKSkKCSAgKHNldHEgb2Zmc2V0ICgtIGF0IChj YXIgZGVmYXVsdC10YWcpKSkKCSAgKHNldHEgYW5jaG9yIChjZHIgZGVmYXVsdC10YWcpKQoJ ICAoc2F2ZS1leGN1cnNpb24KCSAgICAoZ290by1jaGFyIGZyb20pCgkgICAgKGNhdGNoICdk b25lCgkgICAgICAobGV0ICgoY2FzZS1mb2xkLXNlYXJjaCB0KSkKCQkod2hpbGUgKHJlLXNl YXJjaC1mb3J3YXJkIGFuY2hvciBuaWwgdCkKCQkgIChpZiAoPSAobWF0Y2gtYmVnaW5uaW5n IDApIChjYXIgZGVmYXVsdC10YWcpKQoJCSAgICAgICh0aHJvdyAnZG9uZSB0KQoJCSAgICAo c2V0cSByZXBlYXQKCQkJICAoaWYgcmVwZWF0ICgxKyByZXBlYXQpIDIpKSkpKSkpKQoKCShn b3RvLWNoYXIgZnJvbSkKCTs7IFNjYW4gbGluZS4KCSh3aGlsZSAocmUtc2VhcmNoLWZvcndh cmQgZWxpbmZvLXRleGktcmVnZXhwIHRvIHQpCgkgIChjb25kCgkgICAoKG1hdGNoLWJlZ2lu bmluZyAxKSkKCSAgICgobWF0Y2gtYmVnaW5uaW5nIDIpCQkJOyBAcD94cmVmCgkgICAgKG9y IChhbmQgKHNhdmUtZXhjdXJzaW9uCgkJICAgICAgIChnb3RvLWNoYXIgKG1hdGNoLWVuZCAy KSkKCQkgICAgICAgKGFuZCAoc2F2ZS1tYXRjaC1kYXRhCgkJCSAgICAgIDs7IEEgY29tbWEg d2l0aGluIHRoZSBicmFjZXMgc3RhbmRzIGZvciBhCgkJCSAgICAgIDs7IGNvbXBsZXggcmVm ZXJlbmNlLgoJCQkgICAgICAocmUtc2VhcmNoLWJhY2t3YXJkICIsIiAobWF0Y2gtYmVnaW5u aW5nIDIpIHQpKQoJCQkgICAgKHNraXAtY2hhcnMtZm9yd2FyZCAiIFx0XG4sIikKCQkJICAg IChzZXRxIHJlZ2V4cAoJCQkJICAoY29uY2F0CgkJCQkgICByZWdleHAKCQkJCSAgIChlbGlu Zm8tLW1ha2UtcmVnZXhwLTIgZnJvbSAobWF0Y2gtYmVnaW5uaW5nIDApKQoJCQkJICAgIlxc Km5vdGVbIFx0XG5dKiIKCQkJCSAgIChlbGluZm8tLW1ha2UtcmVnZXhwLTIgKHBvaW50KSAo bWF0Y2gtZW5kIDIpKSkpKSkKCQkgICAgIDs7IExlYXZlIG1haW4gbG9vcC4KCQkgICAgIChz ZXRxIGZyb20gdG8pCgkJICAgICAoZ290by1jaGFyIHRvKSkKCQkoc2V0cSByZWdleHAKCQkg ICAgICAoY29uY2F0CgkJICAgICAgIHJlZ2V4cCAoZWxpbmZvLS1tYWtlLXJlZ2V4cC0yIGZy b20gKG1hdGNoLWJlZ2lubmluZyAwKSkKCQkgICAgICAgIlxcKm5vdGVbIFx0XG5dKiIKCQkg ICAgICAgKGVsaW5mby0tbWFrZS1yZWdleHAtMiAobWF0Y2gtYmVnaW5uaW5nIDIpIChtYXRj aC1lbmQgMikpCgkJICAgICAgICI6OlsgXHRcbl0qIikpKSkKCSAgICgobWF0Y2gtYmVnaW5u aW5nIDMpCQkJOyBAc3Ryb25nIG9yIEBlbXBoCgkgICAgKHNldHEgcmVnZXhwCgkJICAoY29u Y2F0CgkJICAgcmVnZXhwIChlbGluZm8tLW1ha2UtcmVnZXhwLTIgZnJvbSAobWF0Y2gtYmVn aW5uaW5nIDApKQoJCSAgICJbKl9dIiAoZWxpbmZvLS1tYWtlLXJlZ2V4cC0yIChtYXRjaC1i ZWdpbm5pbmcgMykgKG1hdGNoLWVuZCAzKSkKCQkgICAiWypfXVsgXHRcbl0qIikpKQoJICAg KChtYXRjaC1iZWdpbm5pbmcgNCkJCQk7IFNvbWUgc29ydCBvZiBnbHlwaAoJICAgIChzZXRx IHJlZ2V4cAoJCSAgKGNvbmNhdAoJCSAgIHJlZ2V4cCAoZWxpbmZvLS1tYWtlLXJlZ2V4cC0y IGZyb20gKG1hdGNoLWJlZ2lubmluZyAwKSkKCQkgICAiXFwoPzpcXCg/OmVycm9yXFwpP1st LiE9PnwqXVstLiE9PnwqXStcXHxcXCg/OkxhXFwpP1RlWFxcfChbQ1JdKVxcfEV1cm9cXHwj XFwpWyBcdFxuXSoiKSkpCgkgICAoKG1hdGNoLWJlZ2lubmluZyA1KQkJCTsgQGRmbgoJICAg IChzZXRxIHJlZ2V4cAoJCSAgKGNvbmNhdAoJCSAgIHJlZ2V4cCAoZWxpbmZvLS1tYWtlLXJl Z2V4cC0yIGZyb20gKG1hdGNoLWJlZ2lubmluZyAwKSkKCQkgICAiXCIiIChlbGluZm8tLW1h a2UtcmVnZXhwLTIgKG1hdGNoLWJlZ2lubmluZyA1KSAobWF0Y2gtZW5kIDUpKQoJCSAgICJc IiIpKSkKCSAgICgobWF0Y2gtYmVnaW5uaW5nIDYpCQkJOyBALi4uewoJICAgIChzZXRxIHJl Z2V4cAoJCSAgKGNvbmNhdAoJCSAgIHJlZ2V4cCAoZWxpbmZvLS1tYWtlLXJlZ2V4cC0yIGZy b20gKG1hdGNoLWJlZ2lubmluZyAwKSkKCQkgICAi4oCYPyIpKSkKCSAgICgobWF0Y2gtYmVn aW5uaW5nIDcpCQkJOyB9CgkgICAgKHNldHEgcmVnZXhwCgkJICAoY29uY2F0CgkJICAgcmVn ZXhwIChlbGluZm8tLW1ha2UtcmVnZXhwLTIgZnJvbSAobWF0Y2gtYmVnaW5uaW5nIDApKQoJ CSAgICLigJk/IikpKQoJICAgKChtYXRjaC1iZWdpbm5pbmcgOCkJCQk7IHdoaXRlc3BhY2UK CSAgICAoc2V0cSByZWdleHAKCQkgIChjb25jYXQKCQkgICByZWdleHAgKGVsaW5mby0tbWFr ZS1yZWdleHAtMiBmcm9tIChtYXRjaC1iZWdpbm5pbmcgMCkpCgkJICAgIlsgXHRcbl0qIikp KQoJICAgKChtYXRjaC1iZWdpbm5pbmcgOSkJCTsgcXVvdGVzIGxpa2UgYGAuLi4nJwoJICAg IChzZXRxIHJlZ2V4cAoJCSAgKGNvbmNhdAoJCSAgIHJlZ2V4cCAoZWxpbmZvLS1tYWtlLXJl Z2V4cC0yIGZyb20gKG1hdGNoLWJlZ2lubmluZyAwKSkKCQkgICAiW+KAmOKAmVwiXSsiKSkp CgkgICApCQkJCSAgICAgOyBGdXR1cmUgYWRkaXRpb25zIGdvIGhlcmUuCgkgIChzZXRxIGZy b20gKHBvaW50KSkpCgkoc2V0cSByZWdleHAKCSAgICAgIChjb25jYXQgcmVnZXhwIChlbGlu Zm8tLW1ha2UtcmVnZXhwLTIgZnJvbSB0bykpKSkpCgogICAgKGluZm8tb3RoZXItd2luZG93 IGluZm8tbm9kZS0xKQogICAgKEluZm8tZ290by1ub2RlIGluZm8tbm9kZS0yKQogICAgKHdo ZW4gaW5mby1ub2RlLTMKICAgICAgKEluZm8tZ290by1ub2RlIGluZm8tbm9kZS0zKSkKCiAg ICAobGV0ICgoY2FzZS1mb2xkLXNlYXJjaCB0KSkKICAgICAgKHdoZW4gcmVnZXhwCgkod2l0 aC1jdXJyZW50LWJ1ZmZlciAoZ2V0LWJ1ZmZlci1jcmVhdGUgIip0ZXN0KiIpCgkgIChkZWxl dGUtcmVnaW9uIChwb2ludC1taW4pIChwb2ludC1tYXgpKQoJICAoaW5zZXJ0IHJlZ2V4cCkp CgkobGV0ICgoYXQgKHBvaW50KSkpCgkgIChjb25kCgkgICA7OyBXZSBjb3VsZCBhZGQgbmFt ZSBhZnRlciBGaWxlOiBiZWxvdy4KCSAgICgoYW5kIChyZS1zZWFyY2gtZm9yd2FyZCAoY29u Y2F0ICJcXCgiIHJlZ2V4cCAiXFwpXFx8XkZpbGU6ICIpIG5pbCB0KQoJCSAobWF0Y2gtYmVn aW5uaW5nIDEpKQoJICAgIChnb3RvLWNoYXIgKG1hdGNoLWJlZ2lubmluZyAxKSkKCSAgICAo c2F2ZS1yZXN0cmljdGlvbgoJICAgICAgKHdpZGVuKQoJICAgICAgKG5hcnJvdy10by1yZWdp b24gKG1hdGNoLWJlZ2lubmluZyAxKSAobWF0Y2gtZW5kIDEpKQoJICAgICAgKHdoZW4gKGFu ZCBhbmNob3IgKHJlLXNlYXJjaC1mb3J3YXJkIGFuY2hvciBuaWwgdCByZXBlYXQpKQoJCShn b3RvLWNoYXIgKCsgKG1hdGNoLWJlZ2lubmluZyAwKSBvZmZzZXQpKSkpKQoJICAgKHQKCSAg ICAoZ290by1jaGFyIGF0KSkpKSkpCgogICAgKHNldC13aW5kb3ctcG9pbnQgdGV4aS13aW5k b3cgd2luZG93LXBvaW50KQogICAgKGVsaW5mby13aW5kb3dzLXN5bmNoIHRleGktd2luZG93 IChnZXQtYnVmZmVyLXdpbmRvdyAiKmluZm8qIikpCiAgICAoc2VsZWN0LXdpbmRvdyB0ZXhp LXdpbmRvdykJCQk7IHJlbW92ZSB0aGlzIGV2dGx5CiAgICApKQoKOzsgVW5sZXNzIHBlb3Bs ZSBvYmplY3QgLi4uCihkZWZpbmUta2V5IEluZm8tbW9kZS1tYXAgIlxDLWNcQy1nIiAnZWxp bmZvLWdvdG8tdGV4aSkKKGRlZmluZS1rZXkgdGV4aW5mby1tb2RlLW1hcCAiXEMtY1xDLWci ICdlbGluZm8tZ290by1pbmZvKQooZGVmaW5lLWtleSB0ZXhpbmZvLW1vZGUtbWFwICJcTS1v IiAnZWxpbmZvLWdvdG8taW5mbykKCjs7IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCjs7Cjs7 OwkJICAgR3JhYmJpbmcgRG9jdW1lbnRhdGlvbiBEdHJpbmdzCjs7IF9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCjs7CgooZGVmdW4gZWxpbmZvLWdldC1kZWZpbml0aW9uICgpCiAgIkFkZCBk b2Mgc3RyaW5nIG9mIG9iamVjdCBhdCBgcG9pbnQnIHRvIGtpbGwgcmluZy4KVGhlIGRvYyBz dHJpbmcgaXMgc3VpdGFibGUgZm9yIGluc2VydGlvbiBpbnRvIEVsaXNwIFRleGluZm8KYnVm ZmVycy4iCiAgKGludGVyYWN0aXZlKQogIChzYXZlLWV4Y3Vyc2lvbgogICAgKGxldCAoKGF0 IChwb2ludCkpCgkgIGxpbWl0IGZyb20gdG8KCSAgdHlwZSBuYW1lIGFyZy1saXN0IGluaXQt dmFsdWUgZG9jIG9wZW4tcGFyZW4tYXQpCiAgICAgIChjb25kCiAgICAgICAoKGVxIG1ham9y LW1vZGUgJ2VtYWNzLWxpc3AtbW9kZSkKCShiZWdpbm5pbmctb2YtZGVmdW4pCgkod2hlbiAo bG9va2luZy1hdCAiKFxcKD86XFwoZGVmXFwoPzp1blxcfHN1YnN0XFwpXFwpXFx8XFwoZGVm dmFyXFwpXFx8XFwoZGVmY3VzdG9tXFwpXFx8XFwoZGVmbWFjcm9cXClcXClbIFx0XSsiKQoJ ICAoc2V0cSB0eXBlCgkJKGNvbmQKCQkgKChtYXRjaC1iZWdpbm5pbmcgMSkgJ2Z1bmN0aW9u KQoJCSAoKG1hdGNoLWJlZ2lubmluZyAyKSAndmFyaWFibGUpCgkJICgobWF0Y2gtYmVnaW5u aW5nIDMpICdvcHRpb24pCgkJICgobWF0Y2gtYmVnaW5uaW5nIDQpICdtYWNybykpKQoJICAo Z290by1jaGFyIChtYXRjaC1lbmQgMCkpCgkgIChzZXRxIG5hbWUgKGVsaW5mby0tZ2V0LW5l eHQpKQoJICAoY29uZAoJICAgKChtZW1xIHR5cGUgJyhmdW5jdGlvbiBjb21tYW5kIG1hY3Jv KSkKCSAgICAoc2tpcC1jaGFycy1mb3J3YXJkICIgXHRcbigiKQoJICAgICh3aGlsZSAobm90 IChsb29raW5nLWF0ICIpIikpCgkgICAgICAoc2V0cSBhcmctbGlzdAoJCSAgICAoY29ucyAo YnVmZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzCgkJCSAgIChwb2ludCkKCQkJICAgKHBy b2duCgkJCSAgICAgKHNraXAtY2hhcnMtZm9yd2FyZCAiXiBcdFxuKSIpCgkJCSAgICAgKHBv aW50KSkpCgkJCSAgYXJnLWxpc3QpKQoJICAgICAgKHNraXAtY2hhcnMtZm9yd2FyZCAiIFx0 XG4iKSkKCSAgICAoc2V0cSBhcmctbGlzdCAobnJldmVyc2UgYXJnLWxpc3QpKSkKCSAgICgo bWVtcSB0eXBlICcodmFyaWFibGUgb3B0aW9uKSkKCSAgICAoc2tpcC1jaGFycy1mb3J3YXJk ICIgXHRcbiIpCgkgICAgKHNldHEgaW5pdC12YWx1ZQoJCSAgKGJ1ZmZlci1zdWJzdHJpbmct bm8tcHJvcGVydGllcwoJCSAgIChwb2ludCkKCQkgICAocHJvZ24KCQkgICAgIChmb3J3YXJk LXNleHApCgkJICAgICAocG9pbnQpKSkpKSkKCSAgKHNraXAtY2hhcnMtZm9yd2FyZCAiIFx0 XG4pIikKCSAgOzsgV2UgbXVzdCBiZSBiZWZvcmUgdGhlIGRvYy1zdHJpbmcgbm93LgoJICAo c2V0cSBkb2MgKGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGllcwoJCSAgICAgKHByb2du CgkJICAgICAgIChza2lwLWNoYXJzLWZvcndhcmQgIiBcdFxuIikKCQkgICAgICAgKDErIChw b2ludCkpKQoJCSAgICAgKHByb2duCgkJICAgICAgIChmb3J3YXJkLXNleHApCgkJICAgICAg ICgxLSAocG9pbnQpKSkpKQoJICAod2hlbiAoZXEgdHlwZSAnZnVuY3Rpb24pCgkgICAgOzsg Q2hlY2sgZm9yIGludGVyYWN0aXZlIHByb3BlcnR5LgoJICAgIChmb3J3YXJkLWNvbW1lbnQg KGJ1ZmZlci1zaXplKSkKCSAgICAod2hlbiAobG9va2luZy1hdCAiKGludGVyYWN0aXZlIikK CSAgICAgIChzZXRxIHR5cGUgJ2NvbW1hbmQpKSkpKQogICAgICAgKChlcSBtYWpvci1tb2Rl ICdjLW1vZGUpCgkoYmVnaW5uaW5nLW9mLWRlZnVuKQoJKGNvbmQKCSAoKGxvb2tpbmctYXQg InZvaWRbIFx0XG5dKnN5bXNfb2YiKQoJICAoc2V0cSBsaW1pdCAocG9pbnQpKQoJICAoZ290 by1jaGFyIGF0KQoJICAod2hlbiAob3IgKHNhdmUtZXhjdXJzaW9uCgkJICAgICAgKGJlZ2lu bmluZy1vZi1saW5lKQoJCSAgICAgIChsb29raW5nLWF0CgkJICAgICAgICJbIFx0XSpERUZW QVJfXFwoPzpMSVNQXFx8Qk9PTFxcfElOVFxcfFBFUl9CVUZGRVJcXClbIFx0XSsoXCJcXChb XlwiIFx0XG5dK1xcKSIpKQoJCSAgICAocmUtc2VhcmNoLWJhY2t3YXJkCgkJICAgICAiREVG VkFSX1xcKD86TElTUFxcfEJPT0xcXHxJTlRcXHxQRVJfQlVGRkVSXFwpWyBcdF0rKFwiXFwo W15cIiBcdFxuXStcXCkiIGxpbWl0IHQpKQoJICAgIChzZXRxIHR5cGUgJ3ZhcmlhYmxlKQoJ ICAgIChzZXRxIG5hbWUgKG1hdGNoLXN0cmluZy1uby1wcm9wZXJ0aWVzIDEpKSkpCgkgOzsg VGhlIGZvbGxvd2luZyBtdXN0IGJlIGRlY2lkZWQuCgkgOzsgKHdoZW4gKGVxIHR5cGUgJ3Zh cmlhYmxlKSAoY3VzdG9tLXZhcmlhYmxlLXAgKGludGVybiBuYW1lKSkpCgkgOzsgKHNldHEg dHlwZSAnb3B0aW9uKSkKCSAoKGxvb2tpbmctYXQgIlxcKD86REVGVU5cXClbIFx0XSsoXCJc XChbXlwiIFx0XG5dK1xcKSIpCgkgIChzZXRxIHR5cGUgJ2Z1bmN0aW9uKQoJICAoc2V0cSBu YW1lIChtYXRjaC1zdHJpbmctbm8tcHJvcGVydGllcyAxKSkpKQoJKGNvbmQKCSAoKGVxIHR5 cGUgJ2Z1bmN0aW9uKQoJICAobGV0ICgoaW5kZXggMCkKCQlmcm9tIHRvIG1pbi1hcmdzKQoJ ICAgIChyZS1zZWFyY2gtZm9yd2FyZCAiLFsgXHRdKiIgbmlsIG5pbCAzKQoJICAgIDs7IE11 c3QgYmUgYmVmb3JlIE1JTiBub3cuCgkgICAgKHNldHEgbWluLWFyZ3MKCQkgIChzdHJpbmct dG8tbnVtYmVyCgkJICAgKGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGllcwoJCSAgICAo cG9pbnQpCgkJICAgIChwcm9nbiAoc2tpcC1jaGFycy1mb3J3YXJkICIwLTkiKSAocG9pbnQp KSkpKQoJICAgIChyZS1zZWFyY2gtZm9yd2FyZCAiLFsgXHRcbl0qIiBuaWwgdCAyKQoJICAg ICh1bmxlc3MgKGxvb2tpbmctYXQgIjAiKQoJICAgICAgOzsgQ29tbWFuZC4KCSAgICAgIChz ZXRxIHR5cGUgJ2NvbW1hbmQpKQoJICAgIChyZS1zZWFyY2gtZm9yd2FyZCAiXlsgXHRdKmRv YzpbIFxdKlxcKC9cXCpbIFx0XSpcXCkiIG5pbCB0KQoJICAgIChzZXRxIGZyb20gKG1hdGNo LWVuZCAwKSkKCSAgICAoZ290by1jaGFyIChtYXRjaC1iZWdpbm5pbmcgMSkpCgkgICAgKGZv cndhcmQtY29tbWVudCAxKQoJICAgIChzYXZlLWV4Y3Vyc2lvbgoJICAgICAgKHNraXAtY2hh cnMtYmFja3dhcmQgIiovIFx0IikKCSAgICAgIChzZXRxIHRvIChwb2ludCkpKQoJICAgIChz ZXRxIGRvYyAoYnVmZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzIGZyb20gdG8pKQoJICAg ICh1bmxlc3MgYXJnLWxpc3QKCSAgICAgIChza2lwLWNoYXJzLWZvcndhcmQgIikgXHRcbigi KQoJICAgICAgKHVubGVzcyAobG9va2luZy1hdCAidm9pZCIpCgkJKHdoaWxlIChub3QgKGxv b2tpbmctYXQgIlsgXHRcbl0qKSIpKQoJCSAgKHdoZW4gKGxvb2tpbmctYXQgIlxcKD86cmVn aXN0ZXJbIFx0XStMaXNwX09iamVjdFsgXHRdKlxcKVxcfFxcKD86TGlzcF9PYmplY3RbIFx0 XSpcXCkiKQoJCSAgICAoZ290by1jaGFyIChtYXRjaC1lbmQgMCkpKQoJCSAgKHNraXAtY2hh cnMtZm9yd2FyZCAiIFx0XG4sIikKCQkgIChjb25kCgkJICAgKCg8IGluZGV4IG1pbi1hcmdz KQoJCSAgICAoc2V0cSBpbmRleCAoMSsgaW5kZXgpKSkKCQkgICAoKD0gaW5kZXggbWluLWFy Z3MpCgkJICAgIChzZXRxIGFyZy1saXN0IChjb25zICImb3B0aW9uYWwiIGFyZy1saXN0KSkK CQkgICAgKHNldHEgaW5kZXggKDErIGluZGV4KSkpKQoJCSAgKHdoZW4gKGxvb2tpbmctYXQg Ikxpc3BfT2JqZWN0WyBcdF0qIikKCQkgICAgKGdvdG8tY2hhciAobWF0Y2gtZW5kIDApKSkK CQkgIChzZXRxIGFyZy1saXN0CgkJCShjb25zIChidWZmZXItc3Vic3RyaW5nLW5vLXByb3Bl cnRpZXMKCQkJICAgICAgIChwb2ludCkKCQkJICAgICAgIChwcm9nbgoJCQkJIChza2lwLWNo YXJzLWZvcndhcmQgIl4sIFx0XG4pIikKCQkJCSAocG9pbnQpKSkKCQkJICAgICAgYXJnLWxp c3QpKSkKCQkoc2V0cSBhcmctbGlzdCAobnJldmVyc2UgYXJnLWxpc3QpKSkpKSkKCSAoKGVx IHR5cGUgJ3ZhcmlhYmxlKQoJICAocmUtc2VhcmNoLWZvcndhcmQgIl5bIFx0XSpkb2M6WyBc XSpcXCgvXFwqWyBcdF0qXFwpIiBuaWwgdCkKCSAgKHNldHEgZnJvbSAobWF0Y2gtZW5kIDAp KQoJICAoZ290by1jaGFyIChtYXRjaC1iZWdpbm5pbmcgMSkpCgkgIChmb3J3YXJkLWNvbW1l bnQgMSkKCSAgKHNhdmUtZXhjdXJzaW9uCgkgICAgKHNraXAtY2hhcnMtYmFja3dhcmQgIiov IFx0IikKCSAgICAoc2V0cSB0byAocG9pbnQpKSkKCSAgOzsgUmVtb3ZlIGxlYWRpbmcgYXN0 ZXJpc2suCgkgIChnb3RvLWNoYXIgZnJvbSkKCSAgKHdoZW4gKGxvb2tpbmctYXQgIlxcKiIp CgkgICAgKHNldHEgZnJvbSAoMSsgZnJvbSkpKQoJICAoc2V0cSBkb2MgKGJ1ZmZlci1zdWJz dHJpbmctbm8tcHJvcGVydGllcyBmcm9tIHRvKSkpKSkpCgogICAgICAod2hlbiBkb2MKCSh3 aXRoLWN1cnJlbnQtYnVmZmVyIChnZXQtYnVmZmVyLWNyZWF0ZSAiKkVsaW5mby1UZW1wKiIp CgkgIChkZWxldGUtcmVnaW9uIChwb2ludC1taW4pIChwb2ludC1tYXgpKQoJICAoaW5zZXJ0 IGRvYykKCSAgOzsgSGFuZGxlIHVzYWdlIGluZm9ybWF0aW9uLgoJICAod2hlbiAobWVtcSB0 eXBlICcoZnVuY3Rpb24gY29tbWFuZCkpCgkgICAgKHdoZW4gKHJlLXNlYXJjaC1iYWNrd2Fy ZCAiXnVzYWdlOlsgXHRdKigiIGZyb20gdCkKCSAgICAgIChzZXRxIGZyb20gKHBvaW50KSkK CSAgICAgIChnb3RvLWNoYXIgKG1hdGNoLWVuZCAwKSkKCSAgICAgIChzYXZlLWV4Y3Vyc2lv bgoJCShnb3RvLWNoYXIgKG1hdGNoLWJlZ2lubmluZyAwKSkKCQkoc2tpcC1jaGFycy1iYWNr d2FyZCAiIFx0XG4iKQoJCShzZXRxIHRvIChwb2ludCkpKQoJICAgICAgKHNraXAtY2hhcnMt Zm9yd2FyZCAiXiBcdFxuIikKCSAgICAgIChza2lwLWNoYXJzLWZvcndhcmQgIiBcdFxuIikK CSAgICAgIChzZXRxIGFyZy1saXN0IG5pbCkKCSAgICAgICh3aGlsZSAobm90IChvciAobG9v a2luZy1hdCAiKSIpIChlb2JwKSkpCgkJKHNldHEgYXJnLWxpc3QKCQkgICAgICAoY29ucwoJ CSAgICAgICAoZG93bmNhc2UKCQkJKGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGllcwoJ CQkgKHBvaW50KQoJCQkgKHByb2duCgkJCSAgIChza2lwLWNoYXJzLWZvcndhcmQgIl4gXHRc bikiKQoJCQkgICAocG9pbnQpKSkpCgkJICAgICAgIGFyZy1saXN0KSkKCQkoc2tpcC1jaGFy cy1mb3J3YXJkICIgXHRcbiIpKQoJICAgICAgKHNldHEgYXJnLWxpc3QgKG5yZXZlcnNlIGFy Zy1saXN0KSkKCSAgICAgIChkZWxldGUtcmVnaW9uIChwb2ludCkgKHBvaW50LW1heCkpKSkK CgkgICh3aGVuIGFyZy1saXN0CgkgICAgOzsgSGFuZGxlIGFyZ3Mgd2l0aGluIGRvYy4gIFRo aXMgY2FzZSBjb3VsZCBiZSBtZXJnZWQgd2l0aAoJICAgIDs7IHRoZSByZW1haW5pbmcgb25l cyBidXQgaGFyZGx5IHNlZW1zIHdvcnRoIHRoZSBlZmZvcnQuCgkgICAgKGdvdG8tY2hhciAo cG9pbnQtbWluKSkKCSAgICAobGV0ICgocmVnZXhwIChtYXBjb25jYXQKCQkJICAgJ3JlZ2V4 cC1xdW90ZQoJCQkgICAobWFwY2FyICd1cGNhc2UgYXJnLWxpc3QpICJcXHwiKSkKCQkgICh0 byAobWFrZS1tYXJrZXIpKQoJCSAgY2FzZS1mb2xkLXNlYXJjaCkKCSAgICAgICh3aGlsZSAo cmUtc2VhcmNoLWZvcndhcmQgcmVnZXhwIG5pbCB0KQoJCShsZXQgKChzdHJpbmcgKGRvd25j YXNlIChtYXRjaC1zdHJpbmctbm8tcHJvcGVydGllcyAwKSkpCgkJICAgICAgKGZyb20gKG1h dGNoLWJlZ2lubmluZyAwKSkpCgkJICAoc2V0LW1hcmtlciB0byAobWF0Y2gtZW5kIDApKQoJ CSAgKGNhdGNoICdmb3VuZAoJCSAgICAoZG9saXN0IChhcmcgYXJnLWxpc3QpCgkJICAgICAg OzsgV2UgYXNzdW1lIHRoYXQgYWxsIGFyZ3MgYXJlIGRvd25jYXNlLgoJCSAgICAgICh3aGVu IChzdHJpbmctZXF1YWwgc3RyaW5nIGFyZykKCQkJKHJlcGxhY2UtbWF0Y2ggKGNvbmNhdCAi QHZhcnsiIHN0cmluZyAifSIpIHQpCgkJCSh0aHJvdyAnZm91bmQgdCkpKSkpKQoJICAgICAg KHNldC1tYXJrZXIgdG8gbmlsKSkpCgoJICA7OyBMb29rIGZvciBxdW90ZXMsIGRvdWJsZS1x dW90ZXMsIG5pbCBhbmQgb3RoZXIgZnVubnkgdGhpbmdzLgoJICAoZ290by1jaGFyIChwb2lu dC1taW4pKQoJICAobGV0IChxdW90ZWQpCgkgICAgKHdoaWxlIChyZS1zZWFyY2gtZm9yd2Fy ZCAiXFwoYFxcKVxcKD86W14gXHRcbiddK1xcKVxcKCdcXClcClxcfFxcKD86XlxcfFsgXHRc bigqYF1cXClcXChcXCg/OltObl1vbi1cXCk/XFwobmlsXFwpXFx8dFxcfFxcKFxcKD86W0NN XS1cXCkrXFwoPzpbYS16QS1aXStcXHxbXiBhLXpBLVpcdFxuXStcXClcXClcClxcfFxcKFNQ Q1xcfFJFVFxcfExGRFxcfFRBQlxcfEJTXFx8RVNDXFx8REVMXFx8U0hJRlRcXHxDVFJMXFx8 TUVUQVxcfEZbMC05XStcXClcXClcXCg/OiRcXHxbIFx0XG4sLjs6PyEnKV1cXClcClxcfFxc KFxcXFw/XCJcXClcXHxcXCg/OlxcKFxcXFxcXFxcW1t7XVxcKVteXX1dK1xcKFtdfV1cXClc XHxcXCg8W14+XSs+XFwpXFwpXApcXHxcXFxcXFwoWyhbe11cXClcXHxcXChcXFxcJFxcKSIg bmlsIHQpCgkgICAgICAoY29uZAoJICAgICAgICgobWF0Y2gtYmVnaW5uaW5nIDEpCgkJOzsg YC4uLicKCQkocmVwbGFjZS1tYXRjaCAiQGNvZGV7IiBuaWwgbmlsIG5pbCAxKQoJCShyZXBs YWNlLW1hdGNoICJ9IiBuaWwgbmlsIG5pbCAyKSkKCSAgICAgICAoKG1hdGNoLWJlZ2lubmlu ZyAzKQoJCTs7IGBuaWwnLCBgbm9uLW5pbCcgYW5kIGB0Jy4KCQkoY29uZAoJCSAoKG1hdGNo LWJlZ2lubmluZyA0KQoJCSAgKHJlcGxhY2UtbWF0Y2ggKGNvbmNhdCAiQGNvZGV7bmlsfSIp IHQgbmlsIG5pbCA0KSkKCQkgKChtYXRjaC1iZWdpbm5pbmcgNSkKCQkgIChyZXBsYWNlLW1h dGNoIChjb25jYXQgIkBrYmR7IiAobWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMgNSkgIn0i KQoJCQkJIHQgbmlsIG5pbCA1KSkKCQkgKChtYXRjaC1iZWdpbm5pbmcgNikKCQkgIChyZXBs YWNlLW1hdGNoIChjb25jYXQgIkBrZXl7IiAobWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMg NikgIn0iKQoJCQkJIHQgbmlsIG5pbCA2KSkKCQkgKHQKCQkgIChyZXBsYWNlLW1hdGNoIChj b25jYXQgIkBjb2RleyIgKG1hdGNoLXN0cmluZy1uby1wcm9wZXJ0aWVzIDMpICJ9IikKCQkJ CSB0IG5pbCBuaWwgMykpKSkKCSAgICAgICAoKG1hdGNoLWJlZ2lubmluZyA3KQoJCTs7IFwi CgkJKHJlcGxhY2UtbWF0Y2ggKGlmIHF1b3RlZCAiJyciICJgYCIpKQoJCShzZXRxIHF1b3Rl ZCAobm90IHF1b3RlZCApKSkKCSAgICAgICAoKG1hdGNoLWJlZ2lubmluZyA4KQoJCTs7IFxc Wy4uLl0sIFxcey4uLn0KCQkocmVwbGFjZS1tYXRjaCAiQGNvZGV7IiBuaWwgdCBuaWwgOCkK CQkocmVwbGFjZS1tYXRjaCAifSIgbmlsIHQgbmlsIDkpKQoJICAgICAgICgobWF0Y2gtYmVn aW5uaW5nIDEwKQoJCTs7IFxcPC4uLj4KCQkocmVwbGFjZS1tYXRjaCAiIikpCgkgICAgICAg KChtYXRjaC1iZWdpbm5pbmcgMTEpCgkJOzsgQW4gZXNjYXBlZCBwYXJlbiAodGhpcyBtdXN0 IGZvbGxvdyBjYXNlIDIpLgoJCShyZXBsYWNlLW1hdGNoIChtYXRjaC1zdHJpbmctbm8tcHJv cGVydGllcyAxMSkpKQoJICAgICAgICgobWF0Y2gtYmVnaW5uaW5nIDEyKQoJCTs7IEEgYmFj a3NsYXNoIGF0IEVPTC4KCQkocmVwbGFjZS1tYXRjaCAiIikpCgkgICAgICAgKSkpCgkgIDs7 IEZpbGwuCgkgIChsZXQgKChmaWxsLWNvbHVtbiA3MCkpCgkgICAgKGZpbGwtcmVnaW9uIChw b2ludC1taW4pIChwb2ludC1tYXgpKSkKCSAgOzsgSGFuZGxlIGtleS1iaW5kaW5ncywgbWFu dWFsIHJlZmVyZW5jZXMgYW5kIFVSTHMsIG1heWJlLgoJICAoc2V0cSBkb2MgKGJ1ZmZlci1z dWJzdHJpbmctbm8tcHJvcGVydGllcyAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkpKSkKCiAg ICAgIChsZXQgKGF0LXN0cmluZyBhcmctbGlzdC1zdHJpbmcpCgkoY29uZAoJICgoZXEgdHlw ZSAnY29tbWFuZCkKCSAgKHNldHEgYXQtc3RyaW5nIChjb25zICJAZGVmZm4gQ29tbWFuZCIg IkBlbmQgZGVmZm4iKSkpCgkgKChlcSB0eXBlICdmdW5jdGlvbikKCSAgKHNldHEgYXQtc3Ry aW5nIChjb25zICJAZGVmdW4iICJAZW5kIGRlZnVuIikpKQoJICgoZXEgdHlwZSAndmFyaWFi bGUpCgkgIChzZXRxIGF0LXN0cmluZyAoY29ucyAiQGRlZnZhciIgIkBlbmQgZGVmdmFyIikp KQoJICgoZXEgdHlwZSAnb3B0aW9uKQoJICAoc2V0cSBhdC1zdHJpbmcgKGNvbnMgIkBkZWZv cHQiICJAZW5kIGRlZm9wdCIpKSkKCSAoKGVxIHR5cGUgJ21hY3JvKQoJICAoc2V0cSBhdC1z dHJpbmcgKGNvbnMgIkBkZWZtYWMiICJAZW5kIGRlZm1hYyIpKSkpCgoJKGRvbGlzdCAoYXJn IGFyZy1saXN0KQoJICAoc2V0cSBhcmctbGlzdC1zdHJpbmcgKGNvbmNhdCBhcmctbGlzdC1z dHJpbmcgIiAiIGFyZykpKQoKCTs7IEhhcmRseSBhbnlvbmUgd2FudHMgdG8gc2VlIHRoaXMg c28gUkVNT1ZFIGl0LgoJKHdpdGgtc2VsZWN0ZWQtd2luZG93IChkaXNwbGF5LWJ1ZmZlciAo Z2V0LWJ1ZmZlci1jcmVhdGUgIipFbGluZm8tc2hvdyIpKQoJICAoZGVsZXRlLXJlZ2lvbiAo cG9pbnQtbWluKSAocG9pbnQtbWF4KSkKCSAgKGluc2VydCAoY29uY2F0IChjYXIgYXQtc3Ry aW5nKSAiICIgbmFtZSBhcmctbGlzdC1zdHJpbmcgIlxuIgoJCQkgIGRvYyAiXG4iIChjZHIg YXQtc3RyaW5nKSAiXG5cbiIpKSkKCgkoa2lsbC1uZXcgKGNvbmNhdCAoY2FyIGF0LXN0cmlu ZykgIiAiIG5hbWUgYXJnLWxpc3Qtc3RyaW5nICJcbiIKCQkJICBkb2MgIlxuIiAoY2RyIGF0 LXN0cmluZykgIlxuXG4iKSkpKSkpCgo7OyBUT0RPOiBkZWZpbmUtbW9kZSBhbmQgZGVmaW5l LWRlcml2ZWQtbW9kZSBhcmUgbm90IGhhbmRsZWQuCgo7OyBUT0RPOiBTcGVjaWFsIGZvcm1z IGFyZSB3cml0dGVuIGluIEMgYW5kIGhhdmUgVU5FVkFMTEVEIHNldC4KCihwcm92aWRlICdl bGluZm8pCgo7OyBCZWxvdyB0aGlzIGxpbmUgYXJlIG1vbnN0ZXJzLgoKOzsgVXNlZCBmb3Ig dGVzdGluZyBvbmx5LCBzbyBSRU1PVkUgaXQuCihkZWZ1biBlbGluZm8tdGVzdCAoKQogIChp bnRlcmFjdGl2ZSkKICAod2l0aC1jdXJyZW50LWJ1ZmZlciAoZ2V0LWJ1ZmZlci1jcmVhdGUg IiplbGluZm8tdGVzdCoiKQogICAgKGRlbGV0ZS1yZWdpb24gKHBvaW50LW1pbikgKHBvaW50 LW1heCkpKQogIChsZXQgKChvbGQtcG9pbnQgKHBvaW50KSkKCW5ldy1wb2ludCBub2RlIHNw bGl0LWhlaWdodC10aHJlc2hvbGQgc3BsaXQtd2lkdGgtdGhyZXNob2xkKQogICAgKHdoaWxl IHQKICAgICAgKEluZm8tZm9yd2FyZC1ub2RlIG5pbCBuaWwgdCkKICAgICAgKGZvcndhcmQt bGluZSAocmFuZG9tIDQzKSkKICAgICAgKHNldHEgb2xkLXBvaW50IChwb2ludCkpCiAgICAg IChzZXRxIG5vZGUgSW5mby1jdXJyZW50LW5vZGUpCiAgICAgIChlbGluZm8tZ290by10ZXhp KQogICAgICAod2l0aC1zZWxlY3RlZC13aW5kb3cgZWxpbmZvLXRlc3QtdGV4aS13aW5kb3cK CShlbGluZm8tZ290by1pbmZvKQoJKHNpdC1mb3IgMC4xKSkKICAgICAgKHNldHEgbmV3LXBv aW50IChwb2ludCkpCiAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIChnZXQtYnVmZmVyLWNy ZWF0ZSAiKmVsaW5mby10ZXN0KiIpCgkoZ290by1jaGFyIChwb2ludC1tYXgpKQoJKGluc2Vy dAoJIChmb3JtYXQgIm5vZGU6ICVzICAgb2xkOiAlcyAgIG5ldzogJXMgICBkaWZmOiAlcyBc biIKCQkgbm9kZSBvbGQtcG9pbnQgbmV3LXBvaW50ICgtIG9sZC1wb2ludCBuZXctcG9pbnQp KSkpCiAgICAgIChnb3RvLWNoYXIgb2xkLXBvaW50KSkpKQo= --------------Kfhqe8JD14mDWxvKDrDeWHz4-- From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> In-Reply-To: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> Resent-From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 04 Sep 2023 08:45:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: 65726@debbugs.gnu.org Cc: martin rudalics Received: via spool by 65726-submit@debbugs.gnu.org id=B65726.169381705632726 (code B ref 65726); Mon, 04 Sep 2023 08:45:01 +0000 Received: (at 65726) by debbugs.gnu.org; 4 Sep 2023 08:44:16 +0000 Received: from localhost ([127.0.0.1]:48449 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qd5Bw-0008Vl-3F for submit@debbugs.gnu.org; Mon, 04 Sep 2023 04:44:16 -0400 Received: from mail-lf1-x12b.google.com ([2a00:1450:4864:20::12b]:60853) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qd5Bt-0008VP-Mb for 65726@debbugs.gnu.org; Mon, 04 Sep 2023 04:44:14 -0400 Received: by mail-lf1-x12b.google.com with SMTP id 2adb3069b0e04-50087d47d4dso2012188e87.1 for <65726@debbugs.gnu.org>; Mon, 04 Sep 2023 01:44:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1693817048; x=1694421848; darn=debbugs.gnu.org; h=to:cc:date:message-id:subject:mime-version :content-transfer-encoding:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=3QVYa6z3AC9xqjjHiyOUpq3xJmOskzbfr058f/LoP+E=; b=c84pBPiNvLSeRThdIt1bIu95PkgMQtQx4gMGEsjij39tIVw70lKYXWilDGy8/r8LQ+ 1aDh59VyLhsPUihFyCblwcdO4TRYKOg2MuJkOxzMKpxZ0klu41ZlaWp4V0URPGjYpZX1 C+vhT+mYuyD1XChAaetd1JDyG2hB5bNVLNEa/bGvPMyqrUK9JhqKeDU6uenJ21Fjubj7 nlYnxUBVsuwjltA2wcCF23I5irQ6Kfx2PrCncWpoNoAXiXknjzUizCmpx9r5q4kUGId0 uSkYbBGHQjH+tD+FH8isExvUzMdAKZYzX75hP7bIxXjBDblBAQS2Yw2AWTyRXFmSLUoW SXVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693817048; x=1694421848; h=to:cc:date:message-id:subject:mime-version :content-transfer-encoding:from:sender:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=3QVYa6z3AC9xqjjHiyOUpq3xJmOskzbfr058f/LoP+E=; b=Me9cmm7xBqwYyIEbXcM5r8mUuPkDc/rHky9IkVu0EGW0iMDoOuzTrAdxljqo9sW8pG Vn4UxU3fXZLbOjQLKg4vuegUzuoi0ASs57pmAtxhWgwpjk/3bOTrE+OEKGMLIGLrsg2B goTvt+5YfXcDVa7TrjCdBbcqPmewmwfoa79H0XbxHqViJBwmEOoYaAPyL1gdI07gPyd8 RNOvWBG+0Ih2PCTDWQgLT72yFAfEgWsyGF/Cd+fvsy0FLt5vgvtpu0gXL/iizv+QLv7t faUgH+3vC6HP1D4T4aQYfXSj/4f4sBN6OGLni5N8OvZRDNOpS7ilK7KRy7zh/m+F5JFv D7SA== X-Gm-Message-State: AOJu0Yxhy4wpqscd/bQ64W9gMpkKK3n5Fy3zOem/9BpJxOKHFpDR4qR7 pX14Hz2oBlDaOj7yWl0lIEPwl5mhhoU= X-Google-Smtp-Source: AGHT+IHLMrT78zhhdu+nVAQZdZCrMAwnaqhncfPYE4V7Op+dOB0/DcHA3UhW0eR11NAS7uHL2n2xSQ== X-Received: by 2002:a05:6512:304f:b0:500:bfcb:7841 with SMTP id b15-20020a056512304f00b00500bfcb7841mr7785506lfb.25.1693817047766; Mon, 04 Sep 2023 01:44:07 -0700 (PDT) Received: from smtpclient.apple (c188-150-165-235.bredband.tele2.se. [188.150.165.235]) by smtp.gmail.com with ESMTPSA id z4-20020a19f704000000b004fdc0023a47sm1591671lfe.238.2023.09.04.01.44.07 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 04 Sep 2023 01:44:07 -0700 (PDT) From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.120.0.1.15\)) Message-Id: Date: Mon, 4 Sep 2023 10:44:06 +0200 X-Mailer: Apple Mail (2.3654.120.0.1.15) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Can't reproduce here (macOS). Can you give us a deeper backtrace? Try finding out the Lisp context: what function is called and with what = arguments? What is the regexp, exactly? What text does it attempt to = match against? From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 04 Sep 2023 12:14:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Cc: rudalics@gmx.at, 65726@debbugs.gnu.org Received: via spool by 65726-submit@debbugs.gnu.org id=B65726.169382960710093 (code B ref 65726); Mon, 04 Sep 2023 12:14:01 +0000 Received: (at 65726) by debbugs.gnu.org; 4 Sep 2023 12:13:27 +0000 Received: from localhost ([127.0.0.1]:48982 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qd8SN-0002cj-5f for submit@debbugs.gnu.org; Mon, 04 Sep 2023 08:13:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:37670) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qd8SH-0002cP-QF for 65726@debbugs.gnu.org; Mon, 04 Sep 2023 08:13:25 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qd8SC-0005ZL-5M; Mon, 04 Sep 2023 08:13:16 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=+yxNqjQ9nNhThm+ltcZQlPUZv/iT52kn1GOIMiUFXew=; b=r9RQ4cYJ/dwEnjM5LN3J i7pdThT3WxIPPYb3C2+VhhqhsG/e89jHYWjzH8nxucxcw5msqBfKuBAC+RQAjDSywKiCWQIbiJ8VK oQVGxipU9KAvfJ6JKHRm6FFzjnvUZSKpXK0/HKnxB9NY3fbdm4ygroqFQpzZ/Jz0beEWiejvNll92 qIdepKTUrgrc8oxw+VcJqO42FkN0c87qJFLawFQsihepwnf+/EmsxHJ1WMCslOZW8RUojWC6x0OZN sH7xZm6wlkC7mymE5JwJ6ZRuPdO0MP8+a13trZh0zJ+FTEcqSsTAjiy1BW5fMp67CpXY/pKsyA7Xf dxVo50ScdjW5Jg==; Date: Mon, 04 Sep 2023 15:12:53 +0300 Message-Id: <83fs3u5e7u.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: (message from Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= on Mon, 4 Sep 2023 10:44:06 +0200) References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Cc: martin rudalics > From: Mattias Engdegård > Date: Mon, 4 Sep 2023 10:44:06 +0200 > > Can't reproduce here (macOS). Can you give us a deeper backtrace? I can reproduce on MS-Windows. It's an infinite recursion. > Try finding out the Lisp context: what function is called and with what arguments? What is the regexp, exactly? What text does it attempt to match against? Here's the end of the call stack: #104528 0x0120bbc4 in search_buffer_re (string=XIL(0x8000000007e5e308), pos=62669, pos_byte=62669, lim=300101, lim_byte=300103, n=1, trt=XIL(0xa00000000631c92c), inverse_trt=XIL(0xa000000006231ed4), posix=false) at search.c:1265 #104529 0x0120cae5 in search_buffer (string=XIL(0x8000000007e5e308), pos=62669, pos_byte=62669, lim=300101, lim_byte=300103, n=1, RE=1, trt=XIL(0xa00000000631c92c), inverse_trt=XIL(0xa000000006231ed4), posix=false) at search.c:1527 #104530 0x0120b404 in search_command (string=XIL(0x8000000007e5e308), bound=XIL(0), noerror=XIL(0x30), count=XIL(0), direction=1, RE=1, posix=false) at search.c:1069 #104531 0x0120e35a in Fre_search_forward (regexp=XIL(0x8000000007e5e308), bound=XIL(0), noerror=XIL(0x30), count=XIL(0)) at search.c:2294 #104532 0x0127860e in eval_sub (form=XIL(0xc000000007dbef40)) at eval.c:2508 #104533 0x0126f601 in Fand (args=XIL(0xc000000007dbe810)) at eval.c:370 #104534 0x012780e0 in eval_sub (form=XIL(0xc000000007dbef30)) at eval.c:2449 #104535 0x0126f847 in Fcond (args=XIL(0xc000000007e16d00)) at eval.c:412 #104536 0x012780e0 in eval_sub (form=XIL(0xc000000007e16d70)) at eval.c:2449 #104537 0x0126fa9d in Fprogn (body=XIL(0)) at eval.c:436 #104538 0x01272b16 in Flet (args=XIL(0xc000000007e16d90)) at eval.c:1026 #104539 0x012780e0 in eval_sub (form=XIL(0xc000000007e16da0)) at eval.c:2449 #104540 0x0126fa9d in Fprogn (body=XIL(0)) at eval.c:436 #104541 0x012780e0 in eval_sub (form=XIL(0xc000000007e17740)) at eval.c:2449 #104542 0x0126f74a in Fif (args=XIL(0xc000000007e16dd0)) at eval.c:391 #104543 0x012780e0 in eval_sub (form=XIL(0xc000000007e16dc0)) at eval.c:2449 #104544 0x0126fa9d in Fprogn (body=XIL(0)) at eval.c:436 #104545 0x01272b16 in Flet (args=XIL(0xc000000007e16e00)) at eval.c:1026 #104546 0x012780e0 in eval_sub (form=XIL(0xc000000007e16e10)) at eval.c:2449 #104547 0x0126fa9d in Fprogn (body=XIL(0)) at eval.c:436 #104548 0x0126f7ae in Fif (args=XIL(0xc000000007e16e30)) at eval.c:392 #104549 0x012780e0 in eval_sub (form=XIL(0xc000000007e16e20)) at eval.c:2449 #104550 0x0126fa9d in Fprogn (body=XIL(0xc000000007dbeb50)) at eval.c:436 #104551 0x0127247c in FletX (args=XIL(0xc000000007e16fc0)) at eval.c:958 #104552 0x012780e0 in eval_sub (form=XIL(0xc000000007e16fd0)) at eval.c:2449 #104553 0x0126fa9d in Fprogn (body=XIL(0)) at eval.c:436 #104554 0x0127b95e in funcall_lambda (fun=XIL(0xc000000007dbe750), nargs=0, arg_vector=0x82ecb0) at eval.c:3233 #104555 0x0127a4c9 in funcall_general (fun=XIL(0xc000000007dbe750), numargs=0, args=0x82ecb0) at eval.c:2957 #104556 0x0127a6b7 in Ffuncall (nargs=1, args=0x82eca8) at eval.c:2995 #104557 0x012693e3 in Ffuncall_interactively (nargs=1, args=0x82eca8) at callint.c:250 #104558 0x0127ad17 in funcall_subr (subr=0x1881580 , numargs=1, args=0x82eca8) at eval.c:3059 #104559 0x0127a2cb in funcall_general (fun=XIL(0xa000000001881580), numargs=1, args=0x82eca8) at eval.c:2941 #104560 0x0127a6b7 in Ffuncall (nargs=2, args=0x82eca0) at eval.c:2995 #104561 0x012790cb in Fapply (nargs=3, args=0x82eca0) at eval.c:2619 #104562 0x01269ae9 in Fcall_interactively (function=XIL(0x60de7c0), record_flag=XIL(0), keys=XIL(0xa000000007970198)) at callint.c:342 #104563 0x0127a915 in funcall_subr (subr=0x18815c0 , numargs=3, args=0x6c50078) at eval.c:3038 #104564 0x012ed316 in exec_byte_code (fun=XIL(0xa00000000615797c), args_template=1025, nargs=1, args=0x82f590) at bytecode.c:809 #104565 0x0127ae66 in fetch_and_exec_byte_code (fun=XIL(0xa00000000615797c), args_template=1025, nargs=1, args=0x82f588) at eval.c:3081 #104566 0x0127b3c5 in funcall_lambda (fun=XIL(0xa00000000615797c), nargs=1, arg_vector=0x82f588) at eval.c:3153 #104567 0x0127a332 in funcall_general (fun=XIL(0xa00000000615797c), numargs=1, args=0x82f588) at eval.c:2945 #104568 0x0127a6b7 in Ffuncall (nargs=2, args=0x82f580) at eval.c:2995 #104569 0x0116d992 in call1 (fn=XIL(0x4590), arg1=XIL(0x60de7c0)) at lisp.h:3248 #104570 0x01171cb7 in command_loop_1 () at keyboard.c:1503 #104571 0x01274470 in internal_condition_case ( bfun=0x11710ec , handlers=XIL(0x90), hfun=0x11700ba ) at eval.c:1474 #104572 0x01170b59 in command_loop_2 (handlers=XIL(0x90)) at keyboard.c:1133 #104573 0x012732f7 in internal_catch (tag=XIL(0x103b0), func=0x1170b22 , arg=XIL(0x90)) at eval.c:1197 #104574 0x01170ac4 in command_loop () at keyboard.c:1111 #104575 0x0116fb1a in recursive_edit_1 () at keyboard.c:720 #104576 0x0116fdb8 in Frecursive_edit () at keyboard.c:803 #104577 0x0116ab60 in main (argc=2, argv=0xa428e0) at emacs.c:2521 Lisp Backtrace: "re-search-forward" (0x82d6a0) "and" (0x82d8a0) "cond" (0x82da60) "let" (0x82dcf0) "progn" (0x82deb0) "if" (0x82e070) "let" (0x82e300) "if" (0x82e500) "let*" (0x82e770) "elinfo-goto-texi" (0x82ecb0) "funcall-interactively" (0x82eca8) "call-interactively" (0x6c50078) "command-execute" (0x82f588) (gdb) In frame #104531, we have: #104531 0x0120e35a in Fre_search_forward (regexp=XIL(0x8000000007e5e308), bound=XIL(0), noerror=XIL(0x30), count=XIL(0)) at search.c:2294 and regexp is this monstrocity: "\\(split\\(?:\\(?:@[a-z]+{\\|[}`'\"_:]*\\)*[ \t\n]*\\)-\\(?:\\(?:@[a-z]+{\\|[}`'\"_:]*\\)*[ \t\n]*\\)window\\(?:\\(?:@[a-z]+{\\|[}`'\"_:]*\\)*[ \t\n]*\\)[ \t\n]+\\(?:\\(?:@[a-z]+{\\|[}`'\"_:]*\\)*[ \t\n]*\\)&optional\\(?:\\(?:@[a-z]+{\\|[}`'\"_:]*\\)*[ \t\n]*\\)[ \t\n]+\\(?:\\(?:@[a-z]+{\\|[}`'\"_:]*\\)*[ \t\n]*\\)window\\(?:\\(?:@[a-z]+{\\|[}`'\"_:]*\\)*[ \t\n]*\\)[ \t\n]+\\(?:\\(?:@[a-z]+{\\|[}`'\"_:]*\\)*[ \t\n]*\\)size\\(?:\\(?:@[a-z]+{\\|[}`'\"_:]*\\)*[ \t\n]*\\)[ \t\n]+\\(?:\\(?:@[a-z]+{\\|[}`'\"_:]*\\)*[ \t\n]*\\)side\\(?:\\(?:@[a-z]+{\\|[}`'\"_:]*\\)*[ \t\n]*\\)[ \t\n]+\\(?:\\(?:@[a-z]+{\\|[}`'\"_:]*\\)*[ \t\n]*\\)pixelwise\\)\\|^node" Feel free to ask more questions, as I can reproduce this at will. From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 04 Sep 2023 13:19:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: martin rudalics , 65726@debbugs.gnu.org, Stefan Monnier Received: via spool by 65726-submit@debbugs.gnu.org id=B65726.169383349516711 (code B ref 65726); Mon, 04 Sep 2023 13:19:02 +0000 Received: (at 65726) by debbugs.gnu.org; 4 Sep 2023 13:18:15 +0000 Received: from localhost ([127.0.0.1]:49097 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qd9T5-0004LS-IA for submit@debbugs.gnu.org; Mon, 04 Sep 2023 09:18:15 -0400 Received: from mail-lf1-x12a.google.com ([2a00:1450:4864:20::12a]:62876) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qd9T0-0004LB-EN for 65726@debbugs.gnu.org; Mon, 04 Sep 2023 09:18:14 -0400 Received: by mail-lf1-x12a.google.com with SMTP id 2adb3069b0e04-500c6ff99acso2796172e87.1 for <65726@debbugs.gnu.org>; Mon, 04 Sep 2023 06:18:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1693833483; x=1694438283; darn=debbugs.gnu.org; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:sender:from:to:cc:subject :date:message-id:reply-to; bh=BVhOWYc24DwUBUBYD0yqiUxxNg6FpjLPX1HgqzGfyBk=; b=BxZ4vh0aX0Axn2s4xdQtvFzv0s52W8uCnOMWchZAGoskqH1/KR0Kd5dbMc88zbo3Qs s1Y5/9tbCtPxhmTYfz1pJMaQwTGxqgynZ9OJc7Ey6Y5kgBGn20V1AR3PKjwEzvngH9pm qW8emZgjh5hipjuIroiww53ipc3scGheDpeGylPHV3Qr2fz4RzRNAS5/bK2CtiyMOxPE l91Gsvt9c9UAO6VGhh7Uq3DIZhjn+y8nFxSJYmDUzpuyg0KX1J+TyCjRAC+kYGeQUgrn Qh5ZH6y7a6daZ6ro1pFBDMjH2LdLnWngS4rGvbXtSYfUJJuF13PA6/HXcbD4BwQKZiJV Ixmg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693833483; x=1694438283; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:sender:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=BVhOWYc24DwUBUBYD0yqiUxxNg6FpjLPX1HgqzGfyBk=; b=c0SY2QNBpX3RZu+qz3BnP1qREHD0BF+r3EJVzr5uAcUDagTRIDGE4yF/D3irWpoO8r SQV8jS5AE7Wkphz26XX91uQ2MuTP8UAPKA2eUb7drxNurYadUCpu+fEX3/JE7HklMKNk N2jJRqEWZj/aOl53MUzYOiyuIbBSzFvoo+DJhb/gBFmd+hYsywU9hBBlQgoQRVEXJMDt Znp8evgRgfyI4sYLr0jCTem956h19DhRvJCXhlN8AF3RrmUPFwVDufzL0CJzjhfu49qx VVLfPQzqvbfnzjmCmZ59+vyl4uYyzUoIY4zGUtdouJ9lfNZ+5YMIZsTtrE7aGv5OCCJy Z3Gw== X-Gm-Message-State: AOJu0YzkTPEmdEzmjDckZVRvAMcgVGgT2hu6d3avcBNjCeJ9XqOPNsfj 5F0eccQOOnuPAwVdPMUg7kE= X-Google-Smtp-Source: AGHT+IE/83iGZPTvOJPYB5Rzx13s6WyCVjbOKax35/z86rHz6qrIKaM/mInPbpTiUmfVZMusf6y3JA== X-Received: by 2002:a05:6512:2812:b0:4ff:9a91:6b73 with SMTP id cf18-20020a056512281200b004ff9a916b73mr3996244lfb.17.1693833483144; Mon, 04 Sep 2023 06:18:03 -0700 (PDT) Received: from smtpclient.apple (c188-150-165-235.bredband.tele2.se. [188.150.165.235]) by smtp.gmail.com with ESMTPSA id d2-20020ac244c2000000b00500775627fbsm1734391lfm.42.2023.09.04.06.18.02 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 04 Sep 2023 06:18:02 -0700 (PDT) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.120.0.1.15\)) From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= In-Reply-To: <83fs3u5e7u.fsf@gnu.org> Date: Mon, 4 Sep 2023 15:18:01 +0200 Content-Transfer-Encoding: quoted-printable Message-Id: References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> <83fs3u5e7u.fsf@gnu.org> X-Mailer: Apple Mail (2.3654.120.0.1.15) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) 4 sep. 2023 kl. 14.12 skrev Eli Zaretskii : > I can reproduce on MS-Windows. It's an infinite recursion. Hmmm, strange that I'm unable to then. The recursion seems to be in code added in 5a864f23eb. Does the problem = disappear if that commit is unmade? I shall give this another go but meanwhile maybe Stefan could look at = it, too? Not that I am implything there is anything wrong with his code. Heavens, = no. > In frame #104531, we have: >=20 > #104531 0x0120e35a in Fre_search_forward = (regexp=3DXIL(0x8000000007e5e308), > bound=3DXIL(0), noerror=3DXIL(0x30), count=3DXIL(0)) at = search.c:2294 That should be the re-search-forward call in elinfo.el:973. > and regexp is this monstrocity: Thank you, this one is apparently generated dynamically. From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 04 Sep 2023 13:27:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: martin rudalics , 65726@debbugs.gnu.org, Stefan Monnier Received: via spool by 65726-submit@debbugs.gnu.org id=B65726.169383397717457 (code B ref 65726); Mon, 04 Sep 2023 13:27:01 +0000 Received: (at 65726) by debbugs.gnu.org; 4 Sep 2023 13:26:17 +0000 Received: from localhost ([127.0.0.1]:49102 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qd9aq-0004XV-KK for submit@debbugs.gnu.org; Mon, 04 Sep 2023 09:26:16 -0400 Received: from mail-lf1-x133.google.com ([2a00:1450:4864:20::133]:61476) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qd9an-0004XH-VN for 65726@debbugs.gnu.org; Mon, 04 Sep 2023 09:26:15 -0400 Received: by mail-lf1-x133.google.com with SMTP id 2adb3069b0e04-4ff09632194so2472328e87.2 for <65726@debbugs.gnu.org>; Mon, 04 Sep 2023 06:26:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1693833968; x=1694438768; darn=debbugs.gnu.org; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:sender:from:to:cc:subject :date:message-id:reply-to; bh=9sfpeXmRX9Qq4Ni9ux6oboof+uEFsMyQ+XPaHRKRWOA=; b=VHowlP/VfEkuEE76V+fIWakJXigFgvWwlivDQRkeV5Hp2AQiDB9ZigR79zxqECNh4+ 9SxNRnsJQnAZaOb4muG7MSvyOodISzc0gLi0KMyFSZATTVc2HbU8bxwALytVpjll4XhI Rbc01Dv1UfKmYZdoP8uGMuSlX1TnS3XgLjROQBnEK2DlSt+Ye6mhh8kRmhhE8KJpPc/3 RfxYktbMjWIRZ6Mm0zCeoXLRLfaago/7zF3g0PLYL1gdWLaIISaPUEeClRcbFinzSXHW jpvotqeNYxPxfPv7/umMh1eyqOC50W8IXkKYS2C0ayP+MvLI8LodeH7MyvnNvkbOfM4Y VDOg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693833968; x=1694438768; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:sender:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=9sfpeXmRX9Qq4Ni9ux6oboof+uEFsMyQ+XPaHRKRWOA=; b=G87JqpRGGa+4yEu4XPWPoabBTrobW6k2aOZnXqmB5rA8gvhqH4uW+HFKt8VvtZoYoO ZIuT6p8uUJIHSpin/Tf9Ju6/FXM1RTy8WwF1tXVvVwhark5bsxzm1wZJ414IDoG7bT/X IScDPzaOG+qBYd+jETBk/7xxJTwBJLUWIFSrxfHuiuKwpgRyZ6V5w1jjQzj/W4PEv183 rM4Kh9r2XEmkEavv8/3o/v9QglBYXnGozLP6gmMR3qeHhw9sGvD6OSdVlw0ihacK6uC2 gGYM8uv4R65kManrdgdsXsZyEyzGxVIRMvWbWj38hghQWA7zC9YJDiUpahPUSsIeD6xu jLgw== X-Gm-Message-State: AOJu0Yy7607tMcg+lEryBraqMaTtLsMwGaT7+drzHIc/DqRkHXp8CNix X5rvxX58WrUOXxe+JcuC3V4= X-Google-Smtp-Source: AGHT+IFR76aLGCFe4pbCl4b6OrmTlfyYTwkFyjpQEJlqflw5eyj68vzRdnBxIZnGHFut0yCbV2ghCA== X-Received: by 2002:a05:6512:238d:b0:4fe:181f:2736 with SMTP id c13-20020a056512238d00b004fe181f2736mr7761064lfv.33.1693833968027; Mon, 04 Sep 2023 06:26:08 -0700 (PDT) Received: from smtpclient.apple (c188-150-165-235.bredband.tele2.se. [188.150.165.235]) by smtp.gmail.com with ESMTPSA id m29-20020ac24add000000b004fdc8c5c51fsm1732988lfp.243.2023.09.04.06.26.07 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 04 Sep 2023 06:26:07 -0700 (PDT) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.120.0.1.15\)) From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= In-Reply-To: Date: Mon, 4 Sep 2023 15:26:07 +0200 Content-Transfer-Encoding: 7bit Message-Id: <7EF94809-FE9A-4DF0-9047-E42576E04485@gmail.com> References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> <83fs3u5e7u.fsf@gnu.org> X-Mailer: Apple Mail (2.3654.120.0.1.15) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > Hmmm, strange that I'm unable to then. Now I can reproduce the crash (I didn't have any TAGS files). From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 04 Sep 2023 13:29:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Cc: rudalics@gmx.at, 65726@debbugs.gnu.org, monnier@iro.umontreal.ca Received: via spool by 65726-submit@debbugs.gnu.org id=B65726.169383414117690 (code B ref 65726); Mon, 04 Sep 2023 13:29:02 +0000 Received: (at 65726) by debbugs.gnu.org; 4 Sep 2023 13:29:01 +0000 Received: from localhost ([127.0.0.1]:49107 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qd9dV-0004bA-4N for submit@debbugs.gnu.org; Mon, 04 Sep 2023 09:29:01 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:36538) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qd9dP-0004av-W3 for 65726@debbugs.gnu.org; Mon, 04 Sep 2023 09:28:59 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qd9dH-0000yC-Oz; Mon, 04 Sep 2023 09:28:48 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=MIME-version:References:Subject:In-Reply-To:To:From: Date; bh=mlHSoFbgdQ/hU2JAC/pD2PxNl9SDvBwhPO/shIwiPgY=; b=PidlMMGyKXa4xuzs+b9M FLyv1mH3wN+LpBewuyz0S3p7IbJAlSQ1GwS8dzw5UYnYBuGHxog+osXVJZluKZahMaJvnpFasEgFv wBixCRcNI5Rj8DCheEbhlTv4wUjYtqx6bcrbxp/ub3UazHm/6LsUI4q0mAr+7K+BdDvnKSDqENta+ Wk3uijEQrj7TVMZfLVjCo75qTcLz3lLHM339fxsmQlP3jIbXPhKLTQ1vnTw/kLA+Cq0CJwbXoBF7Z n0oUsHN6lnmmiikPvPgVk0W5LrPtSKQIthA/IH9L7SmSe3r+BvO7LbxoWpWOnZqJZ08+eUUyZZ71/ REk2fb6BAUmHUA==; Date: Mon, 04 Sep 2023 16:28:27 +0300 Message-Id: <835y4q5apw.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: (message from Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= on Mon, 4 Sep 2023 15:18:01 +0200) References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> <83fs3u5e7u.fsf@gnu.org> MIME-version: 1.0 Content-type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Mattias Engdegård > Date: Mon, 4 Sep 2023 15:18:01 +0200 > Cc: 65726@debbugs.gnu.org, > martin rudalics , > Stefan Monnier > > 4 sep. 2023 kl. 14.12 skrev Eli Zaretskii : > > > I can reproduce on MS-Windows. It's an infinite recursion. > > Hmmm, strange that I'm unable to then. > > The recursion seems to be in code added in 5a864f23eb. Does the problem disappear if that commit is unmade? Yes, if I revert that change, the problem goes away. > I shall give this another go but meanwhile maybe Stefan could look at it, too? > Not that I am implything there is anything wrong with his code. Heavens, no. Thanks. From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: Stefan Monnier Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 04 Sep 2023 14:33:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: martin rudalics Cc: 65726@debbugs.gnu.org Received: via spool by 65726-submit@debbugs.gnu.org id=B65726.169383796826933 (code B ref 65726); Mon, 04 Sep 2023 14:33:02 +0000 Received: (at 65726) by debbugs.gnu.org; 4 Sep 2023 14:32:48 +0000 Received: from localhost ([127.0.0.1]:52133 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qdAdE-00070K-Do for submit@debbugs.gnu.org; Mon, 04 Sep 2023 10:32:48 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:45935) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qdAdB-000707-VN for 65726@debbugs.gnu.org; Mon, 04 Sep 2023 10:32:47 -0400 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 3F51D10006B; Mon, 4 Sep 2023 10:32:40 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1693837959; bh=z+PZAd55emAMASf3WGMcJZTPHYi5P2OG2XkruUGxAPk=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=jffOQfNz9jOjW/B66GqfKsrOTc2jXN2lbWQmhXyMuIrYaK3LwIIY8zKG4EQ2g/J5I mQVm8f9H2PNoqbjEVzMjBjQyXdj7Yeb86WhJS0UFSKNFSNN9dmP6aRv1wo8HsyjXkz hmEFi6c8RtgvDOqR+VaAxCulC4WXqu7CTcAVcdEwU3BjRRxu60e7LvvwZxCILjZBMm 9df22rwhqUx3vg9K716jC5kUivrJXd5O/5il2moiDJ4/y6Tf/AEAPgxKXLp7yYNoNC KgrMN/WAwCxS9rZdUlrOdpFeGdV7+fsZlC7to+WigHHp0y6jv4sEXdDayIb+bLi6qo sAuQe4T3Syv3A== Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 2DF4F100046; Mon, 4 Sep 2023 10:32:39 -0400 (EDT) Received: from pastel (69-165-136-223.dsl.teksavvy.com [69.165.136.223]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id F10AD120314; Mon, 4 Sep 2023 10:32:38 -0400 (EDT) From: Stefan Monnier In-Reply-To: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> (martin rudalics's message of "Mon, 4 Sep 2023 09:46:24 +0200") Message-ID: References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> User-Agent: Gnus/5.13 (Gnus v5.13) Date: Mon, 04 Sep 2023 10:32:38 -0400 MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.122 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Python Exception Cannot access memory at address 0x7fffff66fff8: > #0 0x000000000068810a in skip_noops (p=#1 0x0000000000688823 in mutually_exclusive_p (bufp=0xec9c30 , p1=0x1fcee74 "\004\005", p2=0x1fcee81 "\016\063") at ../../src/regex-emacs.c:3665 > #2 0x0000000000688e19 in mutually_exclusive_p (bufp=0xec9c30 , p1=0x1fcee74 "\004\005", p2=0x1fcee81 "\016\063") at ../../src/regex-emacs.c:3838 > #3 0x0000000000688e3c in mutually_exclusive_p (bufp=0xec9c30 , p1=0x1fcee74 "\004\005", p2=0x1fceeba "\004\020") at ../../src/regex-emacs.c:3839 > #4 0x0000000000688e3c in mutually_exclusive_p (bufp=0xec9c30 , p1=0x1fcee74 "\004\005", p2=0x1fcee84 "\002\001@\004\020") at ../../src/regex-emacs.c:3839 > #5 0x0000000000688e19 in mutually_exclusive_p (bufp=0xec9c30 , p1=0x1fcee74 "\004\005", p2=0x1fcee81 "\016\063") at ../../src/regex-emacs.c:3838 > ... Hmm... the line numbers strongly suggests the inf-recursion happens via the calls: case on_failure_jump: { int mcnt; p2++; EXTRACT_NUMBER_AND_INCR (mcnt, p2); /* Don't just test `mcnt > 0` because non-greedy loops have their test at the end with an unconditional jump at the start. */ if (p2 + mcnt > p2_orig) /* Ensure forward progress. */ return (mutually_exclusive_p (bufp, p1, p2) && mutually_exclusive_p (bufp, p1, p2 + mcnt)); break; } Re-reading the code I see that `skip_noops` can return a position smaller than its argument, which makes it possible for `p2` to be smaller (or equal) to `p2_orig` and hence explain that inf-loop (that's the only path I can see that explains the inf-loop you're seeing). So, the patch below should hopefully fix your problem. Stefan diff --git a/src/regex-emacs.c b/src/regex-emacs.c index 7e75f0ac597..3a14c10771d 100644 --- a/src/regex-emacs.c +++ b/src/regex-emacs.c @@ -3832,7 +3832,8 @@ mutually_exclusive_p (struct re_pattern_buffer *bufp, re_char *p1, EXTRACT_NUMBER_AND_INCR (mcnt, p2); /* Don't just test `mcnt > 0` because non-greedy loops have their test at the end with an unconditional jump at the start. */ - if (p2 + mcnt > p2_orig) /* Ensure forward progress. */ + if (p2 + mcnt > p2_orig /* Ensure forward progress. */ + && p2 > p2_orig) /* Bug#65726 */ return (mutually_exclusive_p (bufp, p1, p2) && mutually_exclusive_p (bufp, p1, p2 + mcnt)); break; From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 04 Sep 2023 15:48:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: rudalics@gmx.at, 65726@debbugs.gnu.org, monnier@iro.umontreal.ca Received: via spool by 65726-submit@debbugs.gnu.org id=B65726.169384243823518 (code B ref 65726); Mon, 04 Sep 2023 15:48:01 +0000 Received: (at 65726) by debbugs.gnu.org; 4 Sep 2023 15:47:18 +0000 Received: from localhost ([127.0.0.1]:52335 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qdBnJ-00067F-Rd for submit@debbugs.gnu.org; Mon, 04 Sep 2023 11:47:18 -0400 Received: from mail-lf1-x129.google.com ([2a00:1450:4864:20::129]:47132) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qdBnF-00066y-Ai for 65726@debbugs.gnu.org; Mon, 04 Sep 2023 11:47:16 -0400 Received: by mail-lf1-x129.google.com with SMTP id 2adb3069b0e04-5007f3d3235so2470470e87.2 for <65726@debbugs.gnu.org>; Mon, 04 Sep 2023 08:47:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1693842427; x=1694447227; darn=debbugs.gnu.org; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:sender:from:to:cc:subject :date:message-id:reply-to; bh=N6Zo/MkTwKhGHSom8atayZJYmhhjsZJE/gwE706qxKc=; b=maw3i798I3e/qOfNt3LKEtbtGMMKTwMUH1HLoXj7ZEqPPZ5PYcdEOTkfsQydZ6ViGN nY0+9ajc7T7Z+lSeWCgO4SGOLEhRzUtJ/tqhUqsgzhVB1j8jyfUI8RqPJ49YR/mFviaB afMBsTzmvL9w9ol+5gS7dwjKToucxuw227ZhxgSPbF7OYjQw8JhU47GbfwMtoltvoUAQ Hm13p4h+s2S6yWQo8qZFKL8+PHGekrc7mANaI3wNfSAqphtjC6QwJHQFmraahNTcad8U FaR/cMG35CDNUOFmb+KCI19QMApZoczddpC4HXSBkwJu1k1MMUksHCaPgtGY1NTJO3MJ X6Yg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693842427; x=1694447227; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:sender:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=N6Zo/MkTwKhGHSom8atayZJYmhhjsZJE/gwE706qxKc=; b=dpGuRG/UcQuedQZJJD9PSZiKaZrQgePCdq5ORS6O/rmfTr77BygNBNF3u+iURFSEju u27ASVdhmtKArFVTcRga84S5anURZZNCHJbYM6DkNs7s1+TQovm0UovWh1hRfc7pwuBu Wx0elYTy7QtaLG8SwRTQo0BQ6bihoGwvlCQ2XASDMgDDMF37RtY9L73wHIZFom9NUg1j jn7HXveQWl6pm0LN9OGybkJr2NOimbXz9FVRahJNWqbwkFDl0L3u3YCpPjBrIavSOmXo qhZtMrxaTPvzi379ZhvfqHK0WE9ikWZtShpOSX00vEjHQg6lGaiBfHK8WWCE1wi3QcO4 5hIA== X-Gm-Message-State: AOJu0YyGJ0vCLK848q10LcXsg4aNXwKq0kQSrbEENb0IS1l5ZGOlyMGn bXg65DDKBNazN7gh6k+wGRE= X-Google-Smtp-Source: AGHT+IH56g1pfkFV+L6W8CQpr6BfvtPMci3hlDVy+rF64qN8vgh9jjLzgHgDnbwu8Z7hOWWiQsAYTA== X-Received: by 2002:a05:6512:2212:b0:500:8022:3dc8 with SMTP id h18-20020a056512221200b0050080223dc8mr8908347lfu.11.1693842426344; Mon, 04 Sep 2023 08:47:06 -0700 (PDT) Received: from smtpclient.apple (c188-150-165-235.bredband.tele2.se. [188.150.165.235]) by smtp.gmail.com with ESMTPSA id x26-20020a19e01a000000b00500d1f67be9sm1820449lfg.43.2023.09.04.08.47.05 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 04 Sep 2023 08:47:05 -0700 (PDT) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.120.0.1.15\)) From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= In-Reply-To: <835y4q5apw.fsf@gnu.org> Date: Mon, 4 Sep 2023 17:47:04 +0200 Content-Transfer-Encoding: quoted-printable Message-Id: <776370AB-662F-4C0A-95BF-97DEA4F18F54@gmail.com> References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> <83fs3u5e7u.fsf@gnu.org> <835y4q5apw.fsf@gnu.org> X-Mailer: Apple Mail (2.3654.120.0.1.15) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Minimised reproduction recipe: (string-match (rx (* "a") (* (* "b"))) "a") (Don't worry about the nested stars; the original was more like (* (| A = (* B))).) The generated bytecode is: 0 on-failure-jump-smart to 9 3 exact "a" 6 jump to 0 9 on-failure-jump-loop to 24 12 on-failure-jump-smart to 21 15 exact "b" 18 jump to 12 21 jump to 9 24 succeed which suggests a mutual_exclusive_p recursion loop: mep(3,9) -> mep(3,12) -> mep(3,21) =3D {skip_noop} =3D mep(3,9) -> mep(3,12) ... Maybe there is something clever we could do here but it's possible that = we just can't avoid keeping track of visited nodes. From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 04 Sep 2023 15:59:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Stefan Monnier Cc: rudalics@gmx.at, 65726@debbugs.gnu.org Received: via spool by 65726-submit@debbugs.gnu.org id=B65726.169384308724961 (code B ref 65726); Mon, 04 Sep 2023 15:59:01 +0000 Received: (at 65726) by debbugs.gnu.org; 4 Sep 2023 15:58:07 +0000 Received: from localhost ([127.0.0.1]:52359 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qdBxn-0006UX-94 for submit@debbugs.gnu.org; Mon, 04 Sep 2023 11:58:07 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:56132) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qdBxk-0006Tw-PB for 65726@debbugs.gnu.org; Mon, 04 Sep 2023 11:58:05 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qdBxf-0003bo-9C; Mon, 04 Sep 2023 11:57:59 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=XvoZvIKDqnZGI09yRqe8IIQUf+NvTXsGegDY7fEYNkk=; b=oKRMYSIH2mW5 oX1cQL8mnWLXfnKk9oPhps/o/gbMH8Msz9ZVGtH1SNNVuZ5Zotpxfd6OONR8xI4XYvUG8fMGPlf8w g7j9YKELHHUuNJxIW8QYsVAMCCFME+K/AkfTqPEHqaEcz36i05fNjtOa7Ur8dDQnIB9kDvcYpNCtQ IL49eidhbCGtMmJBX7TSkjuc3uDjN6+m6a3WGDnRQD7pOLNcro03Ak6U0wQ2u6PJQcJofXzp/4el4 oqdUTGKqNVYvnRqugWqSZMOi6hupMhbfR/In6H6/ZVOrKtNLGFT9QxtLkU2mmczZfWkXF9A3759im hJ5Vb5pB0M2pIji2way0tQ==; Date: Mon, 04 Sep 2023 18:57:41 +0300 Message-Id: <831qfe53t6.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: (bug-gnu-emacs@gnu.org) References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Cc: 65726@debbugs.gnu.org > Date: Mon, 04 Sep 2023 10:32:38 -0400 > From: Stefan Monnier via "Bug reports for GNU Emacs, > the Swiss army knife of text editors" > > Re-reading the code I see that `skip_noops` can return a position > smaller than its argument, which makes it possible for `p2` to > be smaller (or equal) to `p2_orig` and hence explain that inf-loop > (that's the only path I can see that explains the inf-loop you're > seeing). > > So, the patch below should hopefully fix your problem. Yes, with this patch the problem is gone. Please install on the release branch, when you are satisfied with the solution, and thanks. From unknown Sat Jun 21 03:24:18 2025 MIME-Version: 1.0 X-Mailer: MIME-tools 5.505 (Entity 5.505) X-Loop: help-debbugs@gnu.org From: help-debbugs@gnu.org (GNU bug Tracking System) To: martin rudalics Subject: bug#65726: closed (Re: bug#65726: 29.1.50; Crash in regexp engine) Message-ID: References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> X-Gnu-PR-Message: they-closed 65726 X-Gnu-PR-Package: emacs Reply-To: 65726@debbugs.gnu.org Date: Mon, 04 Sep 2023 17:13:02 +0000 Content-Type: multipart/mixed; boundary="----------=_1693847582-402-1" This is a multi-part message in MIME format... ------------=_1693847582-402-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Your bug report #65726: 29.1.50; Crash in regexp engine which was filed against the emacs package, has been closed. The explanation is attached below, along with your original report. If you require more details, please reply to 65726@debbugs.gnu.org. --=20 65726: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D65726 GNU Bug Tracking System Contact help-debbugs@gnu.org with problems ------------=_1693847582-402-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at 65726-done) by debbugs.gnu.org; 4 Sep 2023 17:12:36 +0000 Received: from localhost ([127.0.0.1]:52472 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qdD7r-00005X-Rj for submit@debbugs.gnu.org; Mon, 04 Sep 2023 13:12:36 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:6282) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qdD7p-00005N-Oq for 65726-done@debbugs.gnu.org; Mon, 04 Sep 2023 13:12:34 -0400 Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 5368F80729; Mon, 4 Sep 2023 13:12:28 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1693847547; bh=ujRQWnSpGaddzFkuNMdkiGB/9U46QsyS707EbUKyFY4=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=Lokipz038vX2iu3p2UVWDKfP/Fzn7VZz2Lqhmuy+qYDRqoZ1BatGbmROFqgAePRm6 z5S2Z/Ojpdmvvs5YFTwX25k+VamgcNjp/gnudX5fF2DI84AMiqVemT+yjXHsKI/U+M 8RX9WGrUcc+iaGfAecJZvwlLCempOc2rCRjIEuVywV72UrA45UzQiGDXcVrgJVQRKR GlZnPW429raV5EKBQJogWi+2Kcp/+MsPtpTwSMnTL4sNNdKybHTVHujAeEfAPSEqU0 TjEJImKkz4qKqDp7slG82A7AYPFD5enJRVL0rRUXpgSp17brjGBhr0HOzJFYuTuzch 940vrMXdumrng== Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 4C128803EB; Mon, 4 Sep 2023 13:12:27 -0400 (EDT) Received: from pastel (69-165-136-223.dsl.teksavvy.com [69.165.136.223]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 09E0612007D; Mon, 4 Sep 2023 13:12:26 -0400 (EDT) From: Stefan Monnier To: Eli Zaretskii Subject: Re: bug#65726: 29.1.50; Crash in regexp engine In-Reply-To: <831qfe53t6.fsf@gnu.org> (Eli Zaretskii's message of "Mon, 04 Sep 2023 18:57:41 +0300") Message-ID: References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> <831qfe53t6.fsf@gnu.org> Date: Mon, 04 Sep 2023 13:12:20 -0400 User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.032 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-Debbugs-Envelope-To: 65726-done Cc: rudalics@gmx.at, 65726-done@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Yes, with this patch the problem is gone. Thanks, pushed to `emacs-29`. Stefan ------------=_1693847582-402-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at submit) by debbugs.gnu.org; 4 Sep 2023 07:47:14 +0000 Received: from localhost ([127.0.0.1]:48173 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qd4Ih-00042Q-57 for submit@debbugs.gnu.org; Mon, 04 Sep 2023 03:47:13 -0400 Received: from lists.gnu.org ([2001:470:142::17]:53346) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qd4Id-000413-AG for submit@debbugs.gnu.org; Mon, 04 Sep 2023 03:47:10 -0400 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 1qd4I6-0002p2-Bn for bug-gnu-emacs@gnu.org; Mon, 04 Sep 2023 03:46:44 -0400 Received: from mout.gmx.net ([212.227.15.18]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qd4I0-0001LH-BE for bug-gnu-emacs@gnu.org; Mon, 04 Sep 2023 03:46:34 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.at; s=s31663417; t=1693813585; x=1694418385; i=rudalics@gmx.at; bh=tl7OdoJmUnIyyVf9dqChQBLbTiQYzxHwVzbjP6qxoa0=; h=X-UI-Sender-Class:Date:To:From:Subject; b=LRuUW823q56BHl/ISld+N9HgXSOQSucXix/mOtr48jazGWaoUmEFIiwAUKVT1f63y/PGhzT Jda7M1nmGhz8xUoE/SI14eS9pQSvN3brMJl5ftU37LsyePkp8ELZ0cwgwmgKc19sCzku6hUrH mz7yzjqlC/CeyKiM1x33sCXbQqSKobIRwIhAEjgmaX4lbAmaG1KcfJn8LaDyXj45wGtu3AdEj zDKJJ4oMM4Ynrzpm/mfflU3CFSEA/AtESURVNbk0zUNt9MUNf/2bGZZhEBQlCynW/mzA2Kc0N lYGg+w6HnUykBUme/e0o3E8m8V2jQwBGNNtL40DSj649TOxBuj5A== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from [192.168.1.100] ([213.142.96.79]) by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MxUnz-1pjjg02LN3-00xuuJ for ; Mon, 04 Sep 2023 09:46:25 +0200 Content-Type: multipart/mixed; boundary="------------Kfhqe8JD14mDWxvKDrDeWHz4" Message-ID: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> Date: Mon, 4 Sep 2023 09:46:24 +0200 MIME-Version: 1.0 Content-Language: en-US To: Bug-Gnu-Emacs From: martin rudalics Subject: 29.1.50; Crash in regexp engine X-Provags-ID: V03:K1:xHHGp4u2x45nZryjppPaUZIWps53FMqOAApXGHQLhhAErLMGuqz Ur+/KVVWlZOilj1eU+wzt5jNdVYudIGy3R5CZQkc4pvAvKBtY+ILlPbzFJczlPsG4MvCTcK 7tGurXL0ud3tdNanXDmhr+chHRamk7K24++LR/Y+B4AXNEM09LK8MSyred/OGGpvgxtx1GD y91DhZW+/vJP4yVIxG+YA== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:VZAye0MClF0=;FADIV6goAEt+E/COg99XqeZPjkF cXmjWpExALpnVC36zTWcPQhlIhmOFRTtglVVSywTzyRjQb+P5z5m42h7c/FaxSR5QI4nCmH2a fNwuYKbZCJiOeWBDz2Yipjs1BqZjxP2HX8XvYE8+5GBpmjV6YAWSkaRRpnyy/eGMOJHYisiWV M9CdfxryNAQDvOEgqK3f6VCSkrDujsEdmgZHJXMLqhuhDrACRhUfhXvuCVdO9TESNrB5XS+Gb NAca5x2k8GUPoSn8ns9kdvOUi2pq/rneTlpV7DWC0GqmJchxSPsg/olXqFM7aYfB6LT/Bht/K AMLVetyg4uzUxIAHSR87y3oiXgzcVxiDynSczYukWDEKxsqmQnwOVVY8TjtJNPg7gea5ozNTU Q4Zj2lKR7jDRfaHxYI15hGGDTCPY4uy3rc+TH/mZ0w8pKz1TGMuqGWH8NWdGbzdzBjoA5fSHQ O1AInXgqCULK29nV6taYtBqX841rpUMXF7XqKy246buFTz00o93BwEpOWD+NPD7jir7Vo+hf9 SYRmwqSVDi+dvvY7i3fs8Aqnp6kzriA9AtV9mS/yGyCGJTCUY0GE3o7mnM8JAMElQvxDKA0X1 AAagCxdIbeji+aooPy0U11ZHN3HCmmPZmNJIOu72aXUQu3SPxaqb+pR9b1Mu6CAGKKqlsjuUh g76h/BcjEQWjHuIYsXXnEYVmhBFNHYLqW27/Pdyeli3rsLcK5TmjEM6LY0M3snG3RuZgjvwcC NL+0zunOyyMBtg0fsues8nRloNFBNBsqSFDjlq6T1pr1ZhT72YLU/Yds1b6uwZeDkrZmhYQKv kIS8o6Ew5zfve0qknavwXG1i5/xkhfm8psQ5K01yJwSo7e4H2Yd26r0K4x5bwh7NHdBsQX+wE BgScMs2hIvIxH8qI0PIcQWjBBTTj2aacgKFZIuf6zrZ79g//0zKyz40oSFRue4DinPs5I5Fcl +dW2qBRfdf12w8s2P4jWKSirKRM= Received-SPF: pass client-ip=212.227.15.18; envelope-from=rudalics@gmx.at; helo=mout.gmx.net X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.0 (/) This is a multi-part message in MIME format. --------------Kfhqe8JD14mDWxvKDrDeWHz4 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit With emacs -Q load the attached file elinfo.el. Now type C-h S split-window RET C-x o C-c C-g This crashes Emacs here with Thread 1 "emacs" received signal SIGSEGV, Segmentation fault. 0x000000000068810a in skip_noops (p=, pend=) at ../../src/regex-emacs.c:3556 3556 { and an infinite backtrace starting with Python Exception Cannot access memory at address 0x7fffff66fff8: #0 0x000000000068810a in skip_noops (p=#1 0x0000000000688823 in mutually_exclusive_p (bufp=0xec9c30 , p1=0x1fcee74 "\004\005", p2=0x1fcee81 "\016\063") at ../../src/regex-emacs.c:3665 #2 0x0000000000688e19 in mutually_exclusive_p (bufp=0xec9c30 , p1=0x1fcee74 "\004\005", p2=0x1fcee81 "\016\063") at ../../src/regex-emacs.c:3838 #3 0x0000000000688e3c in mutually_exclusive_p (bufp=0xec9c30 , p1=0x1fcee74 "\004\005", p2=0x1fceeba "\004\020") at ../../src/regex-emacs.c:3839 #4 0x0000000000688e3c in mutually_exclusive_p (bufp=0xec9c30 , p1=0x1fcee74 "\004\005", p2=0x1fcee84 "\002\001@\004\020") at ../../src/regex-emacs.c:3839 #5 0x0000000000688e19 in mutually_exclusive_p (bufp=0xec9c30 , p1=0x1fcee74 "\004\005", p2=0x1fcee81 "\016\063") at ../../src/regex-emacs.c:3838 ... The same scenario worked well with Emacs 22 through 28. martin In GNU Emacs 29.1.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.5, cairo version 1.16.0) of 2023-09-03 built on restno Repository revision: f1e4cbe72aa4da9351cbbcd209d9233c68dd9fbb Repository branch: emacs-29 Windowing system distributor 'The X.Org Foundation', version 11.0.12004000 System Description: Debian GNU/Linux 10 (buster) Configured using: 'configure --with-gif=ifavailable --with-tiff=ifavailable --with-gnutls=no --without-pop --enable-gcc-warnings=warn-only --enable-checking=yes,glyphs --enable-check-lisp-object-type=yes 'CFLAGS=-O0 -g3 -no-pie -Wno-missing-braces'' Configured features: CAIRO DBUS FREETYPE GIF GLIB GSETTINGS HARFBUZZ JPEG LIBSELINUX MODULES NOTIFY INOTIFY PDUMPER PNG SECCOMP SOUND THREADS TOOLKIT_SCROLL_BARS X11 XDBE XIM XINPUT2 XPM GTK3 ZLIB Important settings: value of $LANG: de_AT.utf8 value of $XMODIFIERS: @im=ibus locale-coding-system: utf-8-unix Major mode: Lisp Interaction Minor modes in effect: tooltip-mode: t global-eldoc-mode: t eldoc-mode: t show-paren-mode: t electric-indent-mode: t mouse-wheel-mode: t tool-bar-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t line-number-mode: t indent-tabs-mode: t transient-mark-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t Load-path shadows: None found. Features: (shadow sort mail-extr emacsbug message mailcap yank-media puny dired dired-loaddefs rfc822 mml mml-sec password-cache epa derived epg rfc6068 epg-config gnus-util text-property-search time-date subr-x mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader cl-loaddefs cl-lib sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils elinfo texinfo texinfo-loaddefs info rmc iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic indonesian philippine cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite emoji-zwj charscript charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp files window text-properties overlay sha1 md5 base64 format env code-pages mule custom widget keymap hashtable-print-readable backquote threads dbusbind inotify dynamic-setting system-font-setting font-render-setting cairo move-toolbar gtk x-toolkit xinput2 x multi-tty make-network-process emacs) Memory information: ((conses 16 45758 8352) (symbols 48 5682 0) (strings 32 15622 2110) (string-bytes 1 431024) (vectors 16 10081) (vector-slots 8 157669 13073) (floats 8 26 23) (intervals 56 218 0) (buffers 976 10)) --------------Kfhqe8JD14mDWxvKDrDeWHz4 Content-Type: text/x-emacs-lisp; charset=UTF-8; name="elinfo.el" Content-Disposition: attachment; filename="elinfo.el" Content-Transfer-Encoding: base64 Ozs7IGVsaW5mby5lbCAtLS0gRWxpc3AgSW5mbyBhbmQgVGV4aW5mbyBzdXBwb3J0IHJvdXRp bmVzCgo7OyBDb3B5cmlnaHQgKEMpIDIwMDkgTWFydGluIFJ1ZGFsaWNzCgo7OyBUaW1lLXN0 YW1wOiAiMjAyMS0wNi0wOSAxODo0NToyOSBtYXJ0aW4iCjs7IEF1dGhvcjogTWFydGluIFJ1 ZGFsaWNzIDxydWRhbGljc0BnbXguYXQ+Cgo7OyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo7OyBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQo7OyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lv biAzIG9mIHRoZSBMaWNlbnNlLCBvcgo7OyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgoKOzsgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCjs7IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCjs7IE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKOzsgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCjs7IFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl Cjs7IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cu Z251Lm9yZy9saWNlbnNlcy8+LgoKOzs7IENvbW1lbnRhcnk6Cgo7OyBUaGlzIGZpbGUgcHJv dmlkZXMgZnVuY3Rpb25zIGZvciBjaGVja2luZyB0aGUgdmFsaWRpdHkgb2YgRW1hY3MnIElu Zm8KOzsgZmlsZXMsIG5hdmlnYXRpbmcgYmV0d2VlbiBFbWFjcycgSW5mbyBmaWxlcyBhbmQg Y29ycmVzcG9uZGluZyBUZXhpbmZvCjs7IGJ1ZmZlcnMsIGFuZCBmb3IgY3JlYXRpbmcgVGV4 aW5mbyBlbnRyaWVzIGZyb20gZG9jdW1lbnRhdGlvbiBzdHJpbmdzLgoKKHJlcXVpcmUgJ2lu Zm8pCihyZXF1aXJlICd0ZXhpbmZvKQoKKGRlZmdyb3VwIGVsaW5mbyBuaWwKICAiRWxpbmZv LiIKICA6dmVyc2lvbiAiMjMuMiIKICA6Z3JvdXAgJ2xpc3ApCgo7OyBfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwo7Owo7OzsJCQkgIFV0aWxpdHkgRnVuY3Rpb25zCjs7IF9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCjs7Cgo7OyBNb3ZlIHRvIGFuZCByZXR1cm4gc3RhcnQgb2YgZmlyc3Qg bm9uLXdoaXRlc3BhY2UgY2hhciBhZnRlciBgcG9pbnQnLgooZGVmdW4gZWxpbmZvLS1tb3Zl LXRvLW5leHQgKCkKICAoZm9yd2FyZC1jb21tZW50IChidWZmZXItc2l6ZSkpCiAgKHBvaW50 KSkKCjs7IE1vdmUgdG8gZW5kIG9mIGFuZCByZXR1cm4gbmV4dCBuYW1lLgooZGVmdW4gZWxp bmZvLS1nZXQtbmV4dCAoKQogIChsZXQgKChmcm9tIChlbGluZm8tLW1vdmUtdG8tbmV4dCkp KQogICAgKHNraXAtY2hhcnMtZm9yd2FyZCAiXiBcdFxuIikKICAgIChidWZmZXItc3Vic3Ry aW5nLW5vLXByb3BlcnRpZXMgZnJvbSAocG9pbnQpKSkpCgo7OyBMaWtlIGBlbGluZm8tLWdl dC1uZXh0JyBidXQgZG9uJ3QgbGVhdmUgY3VycmVudCBsaW5lLgooZGVmdW4gZWxpbmZvLS1n ZXQtbmV4dC1hcmcgKCkKICAoc2F2ZS1yZXN0cmljdGlvbgogICAgKG5hcnJvdy10by1yZWdp b24gKHBvaW50KSAobGluZS1lbmQtcG9zaXRpb24pKQogICAgKGVsaW5mby0tZ2V0LW5leHQp KSkKCjs7IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCjs7Cjs7OwkJICBDaGVja2luZyBhbmQg RWxpbmZvIExvZyBVdGlsaXRpZXMKOzsgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KOzsKCihk ZWZjdXN0b20gZWxpbmZvLWxvZy13YXJuaW5ncyBuaWwKICAiTm9uLW5pbCBtZWFucyBsb2cg d2FybmluZ3MgaW4gRWxpbmZvIExvZyBidWZmZXIuIgogIDpncm91cCAnZWxpbmZvCiAgOnR5 cGUgJ2Jvb2xlYW4KICA6dmVyc2lvbiAiMjMuMiIpCgooZGVmY3VzdG9tIGVsaW5mby1zaG93 LWRlZmluaXRpb24gdAogICJOb24tbmlsIG1lYW5zIHNob3cgZGVmaW5pdGlvbnMgd2hlbiBi cm93c2luZyBFbGluZm8gTG9ncy4iCiAgOmdyb3VwICdlbGluZm8KICA6dHlwZSAnYm9vbGVh bgogIDp2ZXJzaW9uICIyMy4yIikKCihkZWZjdXN0b20gZWxpbmZvLWJhbGFuY2Utd2luZG93 cyB0CiAgIk5vbi1uaWwgbWVhbnMgYmFsYW5jZSB3aW5kb3dzIHdoZW4gYnJvd3NpbmcgRWxp bmZvIExvZ3MuIgogIDpncm91cCAnZWxpbmZvCiAgOnR5cGUgJ2Jvb2xlYW4KICA6dmVyc2lv biAiMjMuMiIpCgooZGVmY3VzdG9tIGVsaW5mby1yZXVzZS13aW5kb3dzIHQKICAiTm9uLW5p bCBtZWFucyByZXVzZSB3aW5kb3dzIHdoZW4gYnJvd3NpbmcgRWxpbmZvIExvZ3MuIgogIDpn cm91cCAnZWxpbmZvCiAgOnR5cGUgJ2Jvb2xlYW4KICA6dmVyc2lvbiAiMjMuMiIpCgooZGVm Y3VzdG9tIGVsaW5mby1sb2ctbG9jYXRpb24tZmFjZSAndW5kZXJsaW5lCiAgIkZhY2UgbmFt ZSBmb3IgaGlnaGxpZ2h0aW5nIGxvY2F0aW9ucyBpbiBFbGluZm8gTG9ncy4iCiAgOmdyb3Vw ICdlbGluZm8KICA6dHlwZSAnZmFjZQogIDp2ZXJzaW9uICIyMy4yIikKCihkZWZjdXN0b20g ZWxpbmZvLWxvZy1kZWYtZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZQogICJGYWNlIG5h bWUgZm9yIGhpZ2hsaWdodGluZyB0aGluZ3MgaW4gRWxpbmZvIExvZ3MuIgogIDpncm91cCAn ZWxpbmZvCiAgOnR5cGUgJ2ZhY2UKICA6dmVyc2lvbiAiMjMuMiIpCgo7OyBXaW5kb3cgbmF2 aWdhdGlvbi4KKGRlZnZhciBlbGluZm8tc291cmNlLXdpbmRvdyBuaWwKICAiVGhlIHdpbmRv dyB3aGVyZSB0aGUgVGV4aW5mbyBzb3VyY2UgYnVmZmVyIHdhcyBkaXNwbGF5ZWQuIikKKGRl ZnZhciBlbGluZm8tZGVmLXdpbmRvdyBuaWwKICAiVGhlIHdpbmRvdyB3aGVyZSB0aGUgZGVm aW5pdGlvbiBvZiBzb21lIHN5bWJvbCB3YXMgZGlzcGxheWVkLiIpCgooZGVmdW4gZWxpbmZv LXNob3ctZGVmaW5pdGlvbiAoc3ltYm9sICZvcHRpb25hbCB0eXBlKQogICJTaG93IGRlZmlu aXRpb24gb2YgU1lNQk9MIGluIGEgc3VpdGFibGUgd2luZG93LgpGb3IgY29tcGF0aWJpbGl0 eSB3aXRoIGBmaW5kLWRlZmluaXRpb24tbm9zZWxlY3QnIFRZUEUgbXVzdCBiZQpvbWl0dGVk IG9yIG5pbCBmb3IgZnVuY3Rpb25zIGFuZCBgZGVmdmFyJyBmb3IgdmFyaWFibGVzLiIKICA7 OyBgZmluZC1kZWZpbml0aW9uLW5vc2VsZWN0JyBpcyBhdXRvbG9hZGVkIGluIGZpbmQtZnVu Yy5lbCBhbmQgc2hvdWxkCiAgOzsgcmV0dXJuIGEgY29ucyB3aG9zZSBjYXIgaXMgdGhlIGJ1 ZmZlciBjb250YWluaW5nIHRoZSBkZWZpbml0aW9uCiAgOzsgd2hpbGUgaXRzIGNkciBjb250 YWlucyB0aGUgcG9zaXRpb24gd2l0aGluIHRoZSBidWZmZXIuCiAgKGxldCAoKGJ1ZmZlci1w b3NpdGlvbi1wYWlyIChzYXZlLWV4Y3Vyc2lvbgoJCQkJKGZpbmQtZGVmaW5pdGlvbi1ub3Nl bGVjdCBzeW1ib2wgdHlwZSkpKSkKICAgICh3aGVuIGJ1ZmZlci1wb3NpdGlvbi1wYWlyCiAg ICAgIChsZXQgKChidWZmZXIgKGNhciBidWZmZXItcG9zaXRpb24tcGFpcikpCgkgICAgKHBv c2l0aW9uIChjZHIgYnVmZmVyLXBvc2l0aW9uLXBhaXIpKSkKCShpZiAoYW5kIGVsaW5mby1y ZXVzZS13aW5kb3dzICh3aW5kb3ctbGl2ZS1wIGVsaW5mby1kZWYtd2luZG93KSkKCSAgICAo c2V0LXdpbmRvdy1idWZmZXIgZWxpbmZvLWRlZi13aW5kb3cgYnVmZmVyKQoJICAoc2V0cSBl bGluZm8tZGVmLXdpbmRvdyAoZGlzcGxheS1idWZmZXIgYnVmZmVyKSkpCgk7OyBSZWNvcmQg d2luZG93L2J1ZmZlciByZWxhdGlvbnNoaXAuCgkoc2V0LXdpbmRvdy1wb2ludCBlbGluZm8t ZGVmLXdpbmRvdyBwb3NpdGlvbikKCSh3aXRoLXNlbGVjdGVkLXdpbmRvdyBlbGluZm8tZGVm LXdpbmRvdwoJICA7OyBQdXQgdGhlIGRlZmluaXRpb24gYXQgdGhlIHRvcCBvZiB0aGUgd2lu ZG93LgoJICAocmVjZW50ZXIgMSkpKSkpKQoKKGRlZnVuIGVsaW5mby1zaG93LXNvdXJjZSAo Jm9wdGlvbmFsIGxvZy1wb3MpCiAgIlNob3cgVGV4aW5mbyBzb3VyY2UgY29ycmVzcG9uZGlu ZyB0byBFbGluZm8gTG9nIGVudHJ5IGF0IExPRy1QT1MuCkxPRy1QT1MgbmlsIG9yIG9taXR0 ZWQgbWVhbnMgY29uc2lkZXIgdGhlIGVudHJ5IGxvY2F0ZWQgYXQKYHBvaW50Jy4KClRoaXMg ZnVuY3Rpb24gbWF5IGFsc28gZGlzcGxheSBhIGNvcnJlc3BvbmRpbmcgZGVmaW5pdGlvbiBp biBjYXNlCmBlbGluZm8tc2hvdy1kZWZpbml0aW9uJyBpcyBub24tbmlsIGFuZCBiYWxhbmNl IHRoZSByZXNwZWN0aXZlCndpbmRvd3MgcHJvdmlkZWQgYGVsaW5mby1iYWxhbmNlLXdpbmRv d3MnIGlzIG5vbi1uaWwuIgogIChzYXZlLWV4Y3Vyc2lvbgogICAgKGxldCogKChsb2ctcG9z IChvciBsb2ctcG9zIChwb2ludCkpKQoJICAgKGZpbGUtbmFtZSAoZ2V0LXRleHQtcHJvcGVy dHkgbG9nLXBvcyAnZWxpbmZvLWZpbGUtbmFtZSkpCgkgICAocG9zaXRpb24gKGdldC10ZXh0 LXByb3BlcnR5IGxvZy1wb3MgJ2VsaW5mby1wb3NpdGlvbikpCgkgICAoYnVmZmVyIChmaW5k LWZpbGUtbm9zZWxlY3QgZmlsZS1uYW1lKSkKCSAgIGJhbGFuY2UpCiAgICAgIDs7IERpc3Bs YXkgVGV4aW5mbyBzb3VyY2UuCiAgICAgIChpZiAoYW5kIGVsaW5mby1yZXVzZS13aW5kb3dz ICh3aW5kb3ctbGl2ZS1wIGVsaW5mby1zb3VyY2Utd2luZG93KSkKCSAgKHNldC13aW5kb3ct YnVmZmVyIGVsaW5mby1zb3VyY2Utd2luZG93IGJ1ZmZlcikKCShzZXRxIGVsaW5mby1zb3Vy Y2Utd2luZG93IChkaXNwbGF5LWJ1ZmZlciBidWZmZXIpKSkKICAgICAgOzsgU2V0IHdpbmRv dy9idWZmZXIgcmVsYXRpb25zaGlwLgogICAgICAoc2V0LXdpbmRvdy1wb2ludCBlbGluZm8t c291cmNlLXdpbmRvdyBwb3NpdGlvbikKICAgICAgKHdpdGgtc2VsZWN0ZWQtd2luZG93IGVs aW5mby1zb3VyY2Utd2luZG93Cgk7OyBXZSBjb3VsZCBtYWtlIHRoZSAiMSIgY3VzdG9taXph YmxlLgoJKHJlY2VudGVyIDEpKQogICAgICA7OyBEaXNwbGF5IGRlZmluaXRpb24gaWYgcG9z c2libGUuCiAgICAgIChjb25kCiAgICAgICAoKG5vdCBlbGluZm8tc2hvdy1kZWZpbml0aW9u KSkKICAgICAgICgobWVtcSAoZ2V0LXRleHQtcHJvcGVydHkgbG9nLXBvcyAnZWxpbmZvLXR5 cGUpCgkgICAgICAnKGNvbW1hbmQgbm8tY29tbWFuZCBhcmctbWlzbWF0Y2gpKQoJKGVsaW5m by1zaG93LWRlZmluaXRpb24KCSAoaW50ZXJuIChnZXQtdGV4dC1wcm9wZXJ0eSBsb2ctcG9z ICdlbGluZm8tbmFtZSkpKQoJKHNldHEgYmFsYW5jZSB0KSkKICAgICAgICgobWVtcSAoZ2V0 LXRleHQtcHJvcGVydHkgbG9nLXBvcyAnZWxpbmZvLXR5cGUpCgkgICAgICAnKG9wdGlvbiBu by1vcHRpb24pKQoJKGVsaW5mby1zaG93LWRlZmluaXRpb24KCSAoaW50ZXJuIChnZXQtdGV4 dC1wcm9wZXJ0eSBsb2ctcG9zICdlbGluZm8tbmFtZSkpICdkZWZ2YXIpCgkoc2V0cSBiYWxh bmNlIHQpKSkKICAgICAgOzsgQmFsYW5jZSB3aW5kb3dzIGlmIHBvc3NpYmxlLgogICAgICAo d2hlbiAoYW5kIGVsaW5mby1iYWxhbmNlLXdpbmRvd3MgYmFsYW5jZQoJCSAoZXEgKHdpbmRv dy1mcmFtZSBlbGluZm8tc291cmNlLXdpbmRvdykKCQkgICAgICh3aW5kb3ctZnJhbWUgZWxp bmZvLWRlZi13aW5kb3cpKSkKCTs7IGBiYWxhbmNlLXdpbmRvd3MnIHNob3VsZCBiYWxhbmNl IHNpYmxpbmdzIG9mIHRoZQoJOzsgc291cmNlLXdpbmRvdyBvbmx5LgoJKGJhbGFuY2Utd2lu ZG93cyBlbGluZm8tc291cmNlLXdpbmRvdykpKSkpCgo7OyBUaGUgbmV4dC0vcHJldmlvdXMt ZXJyb3IgZnVuY3Rpb25zIGhhdmUgYmVlbiBjb3BpZWQgZnJvbSBjb21waWxlLmVsCjs7IGFu ZCBzbGlnaHRseSBhZGFwdGVkIGZvciBvdXIgbmVlZHMuICBGb3IgVUkgYW5kIGtleWJpbmRp bmdzIHN0aWNrIHRvCjs7IHRob3NlIHVzZWQgYnkgY29tcGlsZSBhbmQgcmVsYXRlZCBtb2Rl cy4gIEFsc28gcmV0YWluIHRoZSAtZXJyb3IKOzsgcG9zdGZpeCBmb3IgYWxsIGVudHJpZXMg YW5kIGRvbid0IG1vZGlmeSB0aGUgZG9jIHN0cmluZ3MgdG8gbWFrZSB0aGlzCjs7IGxvb2sg ZmFtaWxpYXIuCihkZWZ1biBlbGluZm8tbmV4dC1lcnJvciAobiAmb3B0aW9uYWwgb3RoZXIt ZmlsZSkKICAiU2hvdyBUZXhpbmZvIHNvdXJjZSBmb3IgbmV4dCBlbnRyeSBpbiBFbGluZm8g TG9nLgpQcmVmaXggYXJnIE4gc2F5cyBob3cgbWFueSBlbnRyaWVzIHRvIG1vdmUgZm9yd2Fy ZHMgXChiYWNrd2FyZHMsCmlmIG5lZ2F0aXZlKS4KCk9wdGlvbmFsIGFyZyBPVEhFUi1GSUxF LCBpZiBub24tbmlsLCBtZWFucyBmaW5kIGVudHJ5IGZvciBhIGZpbGUKdGhhdCBpcyBkaWZm ZXJlbnQgZnJvbSB0aGUgY3VycmVudCBvbmUuICBJbiB0aGF0IGNhc2UsIE4Kc3BlY2lmaWVz IHRoZSBudW1iZXIgb2YgZmlsZXMgd2hvc2UgZW50cmllcyBzaGFsbCBiZSBza2lwcGVkLgoK VGhpcyBmdW5jdGlvbiBtYXkgYWxzbyBkaXNwbGF5IGEgY29ycmVzcG9uZGluZyBkZWZpbml0 aW9uIGluIGNhc2UKYGVsaW5mby1zaG93LWRlZmluaXRpb24nIGlzIG5vbi1uaWwgYW5kIGJh bGFuY2UgdGhlIHJlc3BlY3RpdmUKd2luZG93cyBwcm92aWRlZCBgZWxpbmZvLWJhbGFuY2Ut d2luZG93cycgaXMgbm9uLW5pbC4iCiAgKGludGVyYWN0aXZlICJwIikKICAoaWYgb3RoZXIt ZmlsZQogICAgICAobGV0ICgobGFzdC1maWxlIChnZXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQp ICdlbGluZm8tZmlsZS1uYW1lKSkKCSAgICAoY3VycmVudC1maWxlICIiKSkKCShpZiAoPiBu IDApCgkgICAgKHdoaWxlIChhbmQgKG5vdCAoZW9icCkpCgkJCShzZXRxIGN1cnJlbnQtZmls ZQoJCQkgICAgICAoZ2V0LXRleHQtcHJvcGVydHkgKHBvaW50KSAnZWxpbmZvLWZpbGUtbmFt ZSkpCgkJCShvciAoc3RyaW5nLWVxdWFsIGN1cnJlbnQtZmlsZSBsYXN0LWZpbGUpCgkJCSAg ICAoYW5kIChzZXRxIGxhc3QtZmlsZSBjdXJyZW50LWZpbGUpCgkJCQkgKD4gKHNldHEgbiAo MS0gbikpIDApKSkpCgkgICAgICAoZm9yd2FyZC1saW5lKSkKCSAgKHdoaWxlIChhbmQgKG5v dCAoYm9icCkpCgkJICAgICAgKHNldHEgY3VycmVudC1maWxlCgkJCSAgICAoZ2V0LXRleHQt cHJvcGVydHkgKHBvaW50KSAnZWxpbmZvLWZpbGUtbmFtZSkpCgkJICAgICAgKG9yIChzdHJp bmctZXF1YWwgY3VycmVudC1maWxlIGxhc3QtZmlsZSkKCQkJICAoYW5kIChzZXRxIGxhc3Qt ZmlsZSBjdXJyZW50LWZpbGUpCgkJCSAgICAgICAoPCAoc2V0cSBuICgxKyBuKSkgMCkpKSkK CSAgICAgIChmb3J3YXJkLWxpbmUgLTEpKSkpCiAgICAoZm9yd2FyZC1saW5lIG4pKQoKICAo ZWxpbmZvLXNob3ctc291cmNlKSkKCihkZWZ1biBlbGluZm8tbmV4dC1lcnJvci1mdW5jdGlv biAobiAmb3B0aW9uYWwgcmVzZXQpCiAgIk1vdmUgdG8gbmV4dCBlbnRyeSBpbiBFbGluZm8g TG9nIGFuZCBzaG93IGNvcnJlc3BvbmRpbmcgVGV4aW5mbyBzb3VyY2UuCk9wdGlvbmFsIGFy Z3VtZW50IFJFU0VUIG5vbi1uaWwgbWVhbnMgZ28gdG8gZmlyc3QgRWxpbmZvIExvZwplbnRy eS4gIFNlZSBhbHNvIGBlbGluZm8tbmV4dC1lcnJvcicuCgpUaGlzIGZ1bmN0aW9uIHByb3Zp ZGVzIHRoZSB2YWx1ZSBvZiBgbmV4dC1lcnJvci1mdW5jdGlvbicgaW4KRWxpbmZvIExvZyBi dWZmZXJzLiIKICAoaW50ZXJhY3RpdmUgInAiKQogICh3aGVuIHJlc2V0IChnb3RvLWNoYXIg KHBvaW50LW1pbikpKQogIChlbGluZm8tbmV4dC1lcnJvciBuKSkKCihkZWZ1biBlbGluZm8t cHJldmlvdXMtZXJyb3IgKG4pCiAgIlNob3cgVGV4aW5mbyBzb3VyY2UgY29ycmVzcG9uZGlu ZyB0byBwcmV2aW91cyBlbnRyeSBpbiBFbGluZm8gTG9nLgpQcmVmaXggYXJnIE4gc2F5cyBo b3cgbWFueSBlbnRyaWVzIHRvIG1vdmUgYmFja3dhcmRzIFwoZm9yd2FyZHMsCmlmIG5lZ2F0 aXZlKS4gIFNlZSBhbHNvIGBlbGluZm8tbmV4dC1lcnJvcicuIgogIChpbnRlcmFjdGl2ZSAi cCIpCiAgKGVsaW5mby1uZXh0LWVycm9yICgtIG4pKSkKCihkZWZ1biBlbGluZm8tbmV4dC1m aWxlIChuKQogICJTaG93IFRleGluZm8gc291cmNlIG9mIG5leHQgRWxpbmZvIExvZyBlbnRy eSBuYW1pbmcgYW5vdGhlciBmaWxlLgpQcmVmaXggYXJnIE4gc2F5cyBob3cgbWFueSBmaWxl cyB0byBtb3ZlIGZvcndhcmRzIFwob3IgYmFja3dhcmRzLAppZiBuZWdhdGl2ZSkuICBTZWUg YWxzbyBgZWxpbmZvLW5leHQtZXJyb3InLiIKICAoaW50ZXJhY3RpdmUgInAiKQogIChlbGlu Zm8tbmV4dC1lcnJvciBuIHQpKQoKKGRlZnVuIGVsaW5mby1wcmV2aW91cy1maWxlIChuKQog ICJTaG93IFRleGluZm8gc291cmNlIG9mIHByZXZpb3VzIEVsaW5mbyBMb2cgZW50cnkgbmFt aW5nIGFub3RoZXIgZmlsZS4KUHJlZml4IGFyZyBOIHNheXMgaG93IG1hbnkgZmlsZXMgdG8g bW92ZSBiYWNrd2FyZHMgXChvciBmb3J3YXJkcywKaWYgbmVnYXRpdmUpLiAgU2VlIGFsc28g YGVsaW5mby1uZXh0LWVycm9yJy4iCiAgKGludGVyYWN0aXZlICJwIikKICAoZWxpbmZvLW5l eHQtZmlsZSAoLSBuKSkpCgooZGVmdW4gZWxpbmZvLWdvdG8tZXJyb3IgKCZvcHRpb25hbCBl dmVudCkKICAiU2hvdyBUZXhpbmZvIHNvdXJjZSBmb3IgRWxpbmZvIExvZyBlbnRyeSBhdCBg cG9pbnQnLgpTZWUgYWxzbyBgZWxpbmZvLW5leHQtZXJyb3InLiIKICAoaW50ZXJhY3RpdmUg KGxpc3QgbGFzdC1pbnB1dC1ldmVudCkpCiAgKHdoZW4gZXZlbnQgKHBvc24tc2V0LXBvaW50 IChldmVudC1lbmQgZXZlbnQpKSkKICAobmV4dC1lcnJvci1pbnRlcm5hbCkpCgooZGVmdmFy IGVsaW5mby1sb2ctbW9kZS1tYXAKICAobGV0ICgobWFwIChtYWtlLXNwYXJzZS1rZXltYXAp KSkKICAgIChkZWZpbmUta2V5IG1hcCBbbW91c2UtMl0gJ2VsaW5mby1nb3RvLWVycm9yKQog ICAgKGRlZmluZS1rZXkgbWFwIFtmb2xsb3ctbGlua10gJ21vdXNlLWZhY2UpCiAgICAoZGVm aW5lLWtleSBtYXAgIlxDLWNcQy1jIiAnZWxpbmZvLWdvdG8tZXJyb3IpCiAgICA7OyBFbGlu Zm8gZ290byBjb21wYXRpYmlsaXR5LgogICAgKGRlZmluZS1rZXkgbWFwICJcQy1jXEMtZyIg J2VsaW5mby1nb3RvLWVycm9yKQogICAgKGRlZmluZS1rZXkgbWFwICJcQy1tIiAnZWxpbmZv LWdvdG8tZXJyb3IpCiAgICAoZGVmaW5lLWtleSBtYXAgIlxNLW4iICdlbGluZm8tbmV4dC1l cnJvcikKICAgIChkZWZpbmUta2V5IG1hcCAiXE0tcCIgJ2VsaW5mby1wcmV2aW91cy1lcnJv cikKICAgIChkZWZpbmUta2V5IG1hcCAiXE0teyIgJ2VsaW5mby1wcmV2aW91cy1maWxlKQog ICAgKGRlZmluZS1rZXkgbWFwICJcTS19IiAnZWxpbmZvLW5leHQtZmlsZSkKICAgIChkZWZp bmUta2V5IG1hcCAiXHQiICdlbGluZm8tbmV4dC1lcnJvcikKICAgIChkZWZpbmUta2V5IG1h cCBbYmFja3RhYl0gJ2VsaW5mby1wcmV2aW91cy1lcnJvcikKICAgIChkZWZpbmUta2V5IG1h cCAicSIgJ3F1aXQtd2luZG93KQogICAgKGRlZmluZS1rZXkgbWFwICIgIiAnc2Nyb2xsLXVw KQogICAgKGRlZmluZS1rZXkgbWFwICJcXj8iICdzY3JvbGwtZG93bikKICAgIChkZWZpbmUt a2V5IG1hcCAiXEMtY1xDLWYiICduZXh0LWVycm9yLWZvbGxvdy1taW5vci1tb2RlKQogICAg bWFwKQogICJLZXltYXAgZm9yIEVsaW5mbyBMb2dzLiIpCgooZGVmdW4gZWxpbmZvLWxvZy1t b2RlICgpCiAgIk1ham9yIG1vZGUgZm9yIGJyb3dzaW5nIEVsaW5mbyBMb2dzLgpcXHtlbGlu Zm8tbG9nLW1vZGUtbWFwfSIKICAoaW50ZXJhY3RpdmUpCiAgKGtpbGwtYWxsLWxvY2FsLXZh cmlhYmxlcykKICAodXNlLWxvY2FsLW1hcCBlbGluZm8tbG9nLW1vZGUtbWFwKQogIChzZXRx IG1ham9yLW1vZGUgJ2VsaW5mby1sb2ctbW9kZSkKICAoc2V0cSBtb2RlLW5hbWUgIkVsaW5m byIpCiAgKHNldHEgbmV4dC1lcnJvci1mdW5jdGlvbiAnZWxpbmZvLW5leHQtZXJyb3ItZnVu Y3Rpb24pCiAgKHNldHEgYnVmZmVyLXJlYWQtb25seSB0KSkKCihkZWZ2YXIgZWxpbmZvLWxv Zy1idXR0b24tbWFwCiAgKGxldCAoKG1hcCAobWFrZS1zcGFyc2Uta2V5bWFwKSkpCiAgICAo ZGVmaW5lLWtleSBtYXAgW21vdXNlLTJdICdlbGluZm8tZ290by1lcnJvcikKICAgIChkZWZp bmUta2V5IG1hcCBbZm9sbG93LWxpbmtdICdtb3VzZS1mYWNlKQogICAgKGRlZmluZS1rZXkg bWFwICJcQy1tIiAnZWxpbmZvLWdvdG8tZXJyb3IpCiAgICBtYXApCiAgIktleW1hcCBmb3Ig RWxpbmZvIExvZyBidXR0b25zLiIpCihmc2V0ICdlbGluZm8tbG9nLWJ1dHRvbi1tYXAgZWxp bmZvLWxvZy1idXR0b24tbWFwKQoKOzsgVHdvIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBnZXR0 aW5nIHByb3BlcnRpZXMgb2YgZnVuY3Rpb25zIGFuZAo7OyB2YXJpYWJsZXMuICBUaGVzZSBh cmUgdXNlZCBmb3IgY2hlY2tpbmcgcHJvcGVydGllcyBkZXNjcmliZWQgYnkKOzsgVGV4aW5m byB0ZXh0LgooZGVmdW4gZWxpbmZvLS1mdW4tcHJvcGVydGllcyAoZnVuY3Rpb24pCiAgIlJl dHVybiBwcm9wZXJ0aWVzIG9mIEZVTkNUSU9OLgpSZXR1cm4gdmFsdWUgaXMgYSBsaXN0IG9m IHRocmVlIGVsZW1lbnRzOiBUaGUgZmlyc3QgZWxlbWVudCwgd2hlbgpub24tbmlsLCB0ZWxs cyB0aGF0IEZVTkNUSU9OIGlzIGEgY29tbWFuZC4gIFRoZSBzZWNvbmQgZWxlbWVudCwKd2hl biBub24tbmlsLCBzcGVjaWZpZXMgdGhlIGZ1bmN0aW9uIEZVTkNUSU9OIGlzIGFsaWFzZWQg dG8uICBUaGUKdGhpcmQgZWxlbWVudCBzcGVjaWZpZXMgdGhlIGFyZ3VtZW50IGxpc3Qgb2Yg RlVOQ1RJT04gKGFuZCBpcyB0CndoZW4gdGhhdCBhcmd1bWVudCBsaXN0IGlzIG5vdCBhdmFp bGFibGUpLiIKICAobGV0IChkZWYgY29tbWFuZCBhbGlhcyBhcmdsaXN0IGRvYykKICAgIChz ZXRxIGRlZiAoaWYgKHN5bWJvbHAgZnVuY3Rpb24pCgkJICAoc3ltYm9sLWZ1bmN0aW9uIGZ1 bmN0aW9uKQoJCWZ1bmN0aW9uKSkKICAgIChzZXRxIGNvbW1hbmQgKGNvbW1hbmRwIGRlZikp CiAgICAod2hlbiAoc3ltYm9scCBkZWYpCiAgICAgICh3aGlsZSAoYW5kIChmYm91bmRwIGRl ZikgKHN5bWJvbHAgKHN5bWJvbC1mdW5jdGlvbiBkZWYpKSkKCShzZXRxIGRlZiAoaW5kaXJl Y3QtZnVuY3Rpb24gZGVmKSkpCiAgICAgIChzZXRxIGFsaWFzIGRlZikpCiAgICAoc2V0cSBh cmdsaXN0CgkgIChpZiAoYW5kIChzZXRxIGRvYyAoZG9jdW1lbnRhdGlvbiBmdW5jdGlvbikp CgkJICAgKHN0cmluZy1tYXRjaCAiXG5cbihmblsgXF0qXFwoLipcXCkpWyBcdFxuXSpcXCci IGRvYykpCgkgICAgICAobWFwY2FyICdkb3duY2FzZSAoc3BsaXQtc3RyaW5nIChtYXRjaC1z dHJpbmcgMSBkb2MpKSkKCSAgICA7OyBIYW5kbGUgc3ltYm9scyBhbGlhc2VkIHRvIG90aGVy IHN5bWJvbHMuCgkgICAgKHdoZW4gKGFuZCAoc3ltYm9scCBkZWYpIChmYm91bmRwIGRlZikp CgkgICAgICAoc2V0cSBkZWYgKGluZGlyZWN0LWZ1bmN0aW9uIGRlZikpKQoJICAgIDs7IElm IGRlZmluaXRpb24gaXMgYSBtYWNybywgZmluZCB0aGUgZnVuY3Rpb24gaW5zaWRlIGl0LgoJ ICAgICh3aGVuIChlcSAoY2FyLXNhZmUgZGVmKSAnbWFjcm8pCgkgICAgICAoc2V0cSBkZWYg KGNkciBkZWYpKSkKCSAgICAoY29uZAoJICAgICAoKGJ5dGUtY29kZS1mdW5jdGlvbi1wIGRl ZikgKGFyZWYgZGVmIDApKQoJICAgICAoKGVxIChjYXItc2FmZSBkZWYpICdsYW1iZGEpIChu dGggMSBkZWYpKQoJICAgICAodCB0KSkpKQogICAgKGxpc3QgY29tbWFuZCBhbGlhcyAoaWYg KGxpc3RwIGFyZ2xpc3QpIGFyZ2xpc3QgdCkpKSkKCihkZWZ1biBlbGluZm8tLWlzLW9wdGlv biAodmFyaWFibGUpCiAgIlJldHVybiB0IGlmIFZBUklBQkxFIGlzIGFuIG9wdGlvbi4iCiAg KGxldCogKChmaWxlLW5hbWUgKGZpbmQtbGlzcC1vYmplY3QtZmlsZS1uYW1lIHZhcmlhYmxl ICdkZWZ2YXIpKQoJIChhbGlhcyAoY29uZGl0aW9uLWNhc2UgbmlsCgkJICAgIChpbmRpcmVj dC12YXJpYWJsZSB2YXJpYWJsZSkKCQkgIChlcnJvciB2YXJpYWJsZSkpKQoJIChkb2MKCSAg KGNvbmRpdGlvbi1jYXNlIG5pbAoJICAgICAgKG9yIChkb2N1bWVudGF0aW9uLXByb3BlcnR5 IHZhcmlhYmxlICd2YXJpYWJsZS1kb2N1bWVudGF0aW9uKQoJCSAgKGRvY3VtZW50YXRpb24t cHJvcGVydHkgYWxpYXMgJ3ZhcmlhYmxlLWRvY3VtZW50YXRpb24pKQoJICAgIChlcnJvciBu aWwpKSkKCSAob3B0aW9uIChvciAoY3VzdG9tLXZhcmlhYmxlLXAgdmFyaWFibGUpCgkJICAg ICAoYW5kIChzdHJpbmdwIGRvYykKCQkJICAoc3RyaW5nLWVxdWFsCgkJCSAgICIqIiAoc3Vi c3RyaW5nLW5vLXByb3BlcnRpZXMgZG9jIDAgMSkpKSkpKQogICAgb3B0aW9uKSkKCjs7IFNv bWUgY291bnRlcnMuCihkZWZ2YXIgZWxpbmZvLWZpbGVzLWNvdW50IG5pbCkKKGRlZnZhciBl bGluZm8tZXJyb3JzLWNvdW50IDApCihkZWZ2YXIgZWxpbmZvLXdhcm5pbmdzLWNvdW50IDAp CgooZGVmdW4gZWxpbmZvLWNsZWFyLWxvZyAoKQogICJDbGVhciBFbGluZm8gTG9nIGJ1ZmZl ciBhbmQgcmVzZXQgZXJyb3IgY291bnRzLiIKICA7OyBNYXliZSB3ZSBzaG91bGQgbWFrZSBj bGVhcmluZyBjdXN0b21pemFibGUuCiAgKHdpdGgtY3VycmVudC1idWZmZXIgKGdldC1idWZm ZXItY3JlYXRlICIqRWxpbmZvLUxvZyoiKQogICAgKGxldCAoKGluaGliaXQtcmVhZC1vbmx5 IHQpKQogICAgICAoZGVsZXRlLXJlZ2lvbiAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkpKQog IDs7IFdlIGNvdWxkIGluc2VydCBzb21lIGhlYWRlciwgYnV0IHdobydkIGNhcmUgYW55d2F5 PwogIChzZXRxIGVsaW5mby1lcnJvcnMtY291bnQgMCkKICAoc2V0cSBlbGluZm8td2Fybmlu Z3MtY291bnQgMCkpCgooZGVmdW4gZWxpbmZvLWRpc3BsYXktbG9nICgmb3B0aW9uYWwgZmls ZS1uYW1lKQogICJEaXNwbGF5IEVsaW5mbyBMb2cuCklmIHRoZXJlIHdlcmUgbm8gZXJyb3Jz IGp1c3Qgd3JpdGUgYSBtZXNzYWdlLiAgT3B0aW9uYWwgYXJndW1lbnQKRklMRS1OQU1FIG11 c3QgbmFtZSB0aGUgZmlsZSB3aG9zZSBjb250ZW50cyB3ZXJlIGNoZWNrZWQuIgogIChpZiAo YW5kICh6ZXJvcCBlbGluZm8tZXJyb3JzLWNvdW50KSAoemVyb3AgZWxpbmZvLXdhcm5pbmdz LWNvdW50KSkKICAgICAgKGxldCAoKHRleHQKCSAgICAgKGNvbmNhdAoJICAgICAgIk5vIGVy cm9ycyBmb3VuZCIKCSAgICAgIChjb25kCgkgICAgICAgKGZpbGUtbmFtZQoJCShmb3JtYXQg IiBpbiBmaWxlICVzIiBmaWxlLW5hbWUpKQoJICAgICAgIChlbGluZm8tZmlsZXMtY291bnQK CQkoZm9ybWF0ICIgaW4gJXMgY2hlY2tlZCBmaWxlKHMpIiBlbGluZm8tZmlsZXMtY291bnQp KSkpKSkKCShtZXNzYWdlIHRleHQpKQogICAgKGxldCogKChidWZmZXIgKGdldC1idWZmZXIg IipFbGluZm8tTG9nKiIpKQoJICAgKHdpbmRvdyAod2hlbiBidWZmZXIKCQkgICAgIChkaXNw bGF5LWJ1ZmZlciBidWZmZXIpKSkKCSAgICh0ZXh0IChjb25jYXQKCQkgIChmb3JtYXQgIiVz IGVycm9yKHMpIiBlbGluZm8tZXJyb3JzLWNvdW50KQoJCSAgKHdoZW4gZWxpbmZvLWxvZy13 YXJuaW5ncwoJCSAgICAoZm9ybWF0ICIgYW5kICVzIHdhcm5pbmcocykiIGVsaW5mby13YXJu aW5ncy1jb3VudCkpCgkJICAoY29uZAoJCSAgIChmaWxlLW5hbWUKCQkgICAgKGZvcm1hdCAi IGluIGZpbGUgJXMiIGZpbGUtbmFtZSkpCgkJICAgKGVsaW5mby1maWxlcy1jb3VudAoJCSAg ICAoZm9ybWF0ICIgaW4gJXMgY2hlY2tlZCBmaWxlKHMpIiBlbGluZm8tZmlsZXMtY291bnQp KSkpKSkKICAgICAgOzsgV2UgcmVhbGx5IHNob3VsZCBoYXZlIGFuIG9wdGlvbiB3aGljaCBs ZXRzIHVzZXJzIHNlbGVjdAogICAgICA7OyBMb2cvSGVscCB3aW5kb3dzLgogICAgICAod2hl biB3aW5kb3cKCShzZXQtd2luZG93LXBvaW50IHdpbmRvdyAocG9pbnQtbWluKSkpCiAgICAg IChtZXNzYWdlIHRleHQpKSkpCgooZGVmdW4gZWxpbmZvLWxvZy1zdHJpbmcgKHR5cGUgbmFt ZSBmaWxlLW5hbWUgcG9zaXRpb24gc3RyaW5nICZvcHRpb25hbCB3YXJuaW5nKQogICJMb2cg U1RSSU5HIGluIEVsaW5mbyBMb2cgYnVmZmVyLgpTVFJJTkcgaXMgcHJvcGVydGl6ZWQgd2l0 aCBUWVBFIFwodGhlIHR5cGUgb2YgdGhlIGVycm9yKSwgTkFNRQpcKHVzdWFsbHkgdGhlIG5h bWUgb2Ygc29tZSBmdW5jdGlvbiBvciB2YXJpYWJsZSksIEZJTEUtTkFNRSBcKHRoZQpuYW1l IG9mIGEgZmlsZSksIFBPU0lUSU9OIFwoYSBwb3NpdGlvbiB2YWxpZCBpbiBhIGJ1ZmZlciB2 aXNpdGluZwpGSUxFLU5BTUUpLiAgT3B0aW9uYWwgYXJndW1lbnQgV0FSTklORyBub24tbmls IG1lYW5zIG5vIGxvZ2dpbmcKb2NjdXJzIHVubGVzcyBgZWxpbmZvLWxvZy13YXJuaW5ncycg aXMgbm9uLW5pbC4iCiAgKHdoZW4gKG9yIChub3Qgd2FybmluZykgZWxpbmZvLWxvZy13YXJu aW5ncykKICAgIChpZiB3YXJuaW5nCgkoc2V0cSBlbGluZm8td2FybmluZ3MtY291bnQgKDEr IGVsaW5mby13YXJuaW5ncy1jb3VudCkpCiAgICAgIChzZXRxIGVsaW5mby1lcnJvcnMtY291 bnQgKDErIGVsaW5mby1lcnJvcnMtY291bnQpKSkKICAgIChsZXQgKChsaW5lIChjb3VudC1s aW5lcyAocG9pbnQtbWluKSBwb3NpdGlvbikpCgkgIChjb2x1bW4gKHNhdmUtZXhjdXJzaW9u CgkJICAgIChnb3RvLWNoYXIgcG9zaXRpb24pCgkJICAgIChjdXJyZW50LWNvbHVtbikpKSkK ICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgKGdldC1idWZmZXItY3JlYXRlICIqRWxpbmZv LUxvZyoiKQoJKHVubGVzcyAoZXEgbWFqb3ItbW9kZSAnZWxpbmZvLWxvZy1tb2RlKQoJICAo ZWxpbmZvLWxvZy1tb2RlKSkKCShsZXQgKChpbmhpYml0LXJlYWQtb25seSB0KQoJICAgICAg ZnJvbSB0bykKCSAgKGdvdG8tY2hhciAoc2V0cSBmcm9tIChwb2ludC1tYXgpKSkKCSAgKGlu c2VydAoJICAgOzsgUHJvcGVydGl6ZWQgaW5mb3JtYXRpb24uCgkgICAocHJvcGVydGl6ZQoJ ICAgIChjb25jYXQKCSAgICAgKHByb3BlcnRpemUKCSAgICAgIChjb25jYXQKCSAgICAgICAo d2hlbiBmaWxlLW5hbWUKCQkgKGNvbmNhdCAoZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSBmaWxl LW5hbWUpICI6IikpCgkgICAgICAgKGZvcm1hdCAiJXM6JXMiIGxpbmUgY29sdW1uKSkKCSAg ICAgICdmYWNlIGVsaW5mby1sb2ctbG9jYXRpb24tZmFjZSkKCSAgICAgIiAiIHN0cmluZykK CSAgICAnZWxpbmZvLXR5cGUgdHlwZSAnZWxpbmZvLW5hbWUgbmFtZQoJICAgICdlbGluZm8t ZmlsZS1uYW1lIGZpbGUtbmFtZSAnZWxpbmZvLXBvc2l0aW9uIHBvc2l0aW9uCgkgICAgJ21v dXNlLWZhY2UgJ2hpZ2hsaWdodCAnZm9sbG93LWxpbmsgJ2VsaW5mby1mb2xsb3ctbGluaykK CSAgIDs7IFNUUklORyBpdHNlbGYgZm9sbG93ZWQgYnkgYSBuZXdsaW5lLgoJICAgIlxuIikp KSkpKQoKKGRlZnN1YnN0IGVsaW5mby0tc3ltYm9sLW5hbWUgKGFyZykKICAiSWYgQVJHIGlz IGEgc3ltYm9sIHJldHVybiBpdHMgbmFtZSwgZWxzZSByZXR1cm4gQVJHLiIKICAoaWYgKHN5 bWJvbHAgYXJnKSAoc3ltYm9sLW5hbWUgYXJnKSBhcmcpKQoKKGRlZnVuIGVsaW5mby1jaGVj ayAoZmlsZS1uYW1lKQogICJDaGVjayBjdXJyZW50IGJ1ZmZlci4KRklMRS1OQU1FIG11c3Qg c3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgZmlsZSB3aG9zZSBjb250ZW50cyBhcmUgaW4KdGhl IGN1cnJlbnQgYnVmZmVyLiIKICAoaW50ZXJhY3RpdmUpCiAgKHNhdmUtZXhjdXJzaW9uCiAg ICAoc2F2ZS1yZXN0cmljdGlvbgogICAgICAod2lkZW4pCiAgICAgIDs7IE1ha2Ugc3VyZSBg Y2FzZS1mb2xkLXNlYXJjaCcgaXMgbmlsIHRvIGNhdGNoIHRoZSAiQy0iIGFuZCAiTS0iCiAg ICAgIDs7IGVudHJpZXMgb25seSBhbmQgbm90IHRoZSBDLW1vZGUgImMtLi4uIiBzdHVmZi4K ICAgICAgKGxldCAoY2FzZS1mb2xkLXNlYXJjaAoJICAgIHRleGktbmFtZSB0ZXhpLXBkLW5h bWUgdGV4aS1hcmctbmFtZSB0ZXhpLWNvbW1hbmQgdGV4aS1vcHRpb24KCSAgICBwb3NpdGlv biBwcm9wZXJ0aWVzIGFyZy1saXN0IGFyZy1uYW1lIGlzLW9wdGlvbikKCShnb3RvLWNoYXIg KHBvaW50LW1pbikpCgk7OyBXZSBwcm9iYWJseSB3b24ndCBldmVyIGJvdGhlciB0byBvcHRp bWl6ZSB0aGUgcmVnZXhwIGJlbG93LgoJKHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZAoJCTs7 IFJFR0VYUCBNTkVNTk9OSUNTOiAxLi5kZWZ1bi9kZWZmbiwgNC4uZGVmdmFyL2RlZm9wdCwK CQk7OyA4Li50ZXh0IHdlIGlnbm9yZSwgOS4uQy0vTS0gcHJlZml4ZWQgc3RyaW5nIGluIEBj b2RlLAoJCTs7IDEwLi5TUEMvUkVUL2V0Yy4gaW4gQGNvZGUsIDExLi5TUEMvUkVUL2V0Yy4g aW4gQGtiZCwKCQk7OyAxMy4ubm9uLW5pbC4KCQkiXkBcXCg/OlxcKFxcKGRlZnVueD9cXHxk ZWZtYWNcXHxkZWZzcGVjXFwpXFx8XFwoZGVmZm4gQ29tbWFuZFxcKVxcKVwKXFx8XFwoXFwo ZGVmdmFyeD9cXClcXHxcXChkZWZvcHR4P1xcKVxcKVwKXFx8XFwoc21hbGxcXCk/XFwoZXhh bXBsZVxcfGxpc3BcXHx2ZXJiYXRpbVxcfGlnbm9yZVxcKVxcKVwKXFx8QGNvZGV7XFwoW0NN XS1bXn1dK1xcKVxcfEBcXCg/OlxcKGNvZGVcXClcClxcfFxcKGtiZFxcKVxcKXtcXChTUENc XHxSRVRcXHxMRkRcXHxUQUJcXHxCU1xcfEVTQ1xcfERFTFxcfFNISUZUXFx8Q1RSTFxcfE1F VEFcXHxGWzAtOV0rXFwpfVwKXFx8XFwobm9uLW5pbFxcKSIgbmlsIHQpCgkgIChjb25kCgkg ICAoKG1hdGNoLWJlZ2lubmluZyAxKQoJICAgIChzZXRxIHRleGktY29tbWFuZCAobWF0Y2gt YmVnaW5uaW5nIDMpKQoJICAgIChzZXRxIHBvc2l0aW9uIChlbGluZm8tLW1vdmUtdG8tbmV4 dCkpCgkgICAgKHNldHEgdGV4aS1uYW1lIChlbGluZm8tLWdldC1uZXh0KSkKCSAgICAoc2V0 cSB0ZXhpLXBkLW5hbWUgKHByb3BlcnRpemUgdGV4aS1uYW1lICdmYWNlIGVsaW5mby1sb2ct ZGVmLWZhY2UpKQoJICAgIChpZiAobm90IChmYm91bmRwIChpbnRlcm4gdGV4aS1uYW1lKSkp CgkJKHByb2duCgkJICAoZWxpbmZvLWxvZy1zdHJpbmcKCQkgICAnZnVuLXVuYm91bmQgdGV4 aS1uYW1lIGZpbGUtbmFtZSBwb3NpdGlvbgoJCSAgIChjb25jYXQgIlVuYm91bmQgZnVuY3Rp b24gYCIgdGV4aS1wZC1uYW1lICInIikgdCkKCQkgIChmb3J3YXJkLWxpbmUpKQoJICAgICAg KHNldHEgcHJvcGVydGllcyAoZWxpbmZvLS1mdW4tcHJvcGVydGllcyAoaW50ZXJuIHRleGkt bmFtZSkpKQoJICAgICAgKGlmIChhbmQgKGVxIChudGggMSBwcm9wZXJ0aWVzKSAnaWdub3Jl KQoJCSAgICAgICAobm90IChzdHJpbmctZXF1YWwgdGV4aS1uYW1lICJpZ25vcmUiKSkpCgkJ ICA7OyBXaGVuIHRoZSBmdW5jdGlvbiBpcyByZW1hcHBlZCB0byBgaWdub3JlJyB3ZSBjYW4n dAoJCSAgOzsgZG8gYW55dGhpbmcgcmVhc29uYWJsZSBvbiB0aGUgY3VycmVudCBwbGF0Zm9y bS4KCQkgIChwcm9nbgoJCSAgICAoZWxpbmZvLWxvZy1zdHJpbmcKCQkgICAgICdyZW1hcHBl ZC10by1pZ25vcmUgdGV4aS1uYW1lIGZpbGUtbmFtZSBwb3NpdGlvbgoJCSAgICAgKGNvbmNh dCAiYCIgdGV4aS1wZC1uYW1lICInIHJlbWFwcGVkIHRvIGBpZ25vcmUnIG9uIHRoaXMgcGxh dGZvcm0iKSB0KQoJCSAgICAoZm9yd2FyZC1saW5lKSkKCQk7OyBDaGVjayBjb21tYW5kIHBy b3BlcnR5LgoJCShjb25kCgkJICgoYW5kIHRleGktY29tbWFuZCAobm90IChudGggMCBwcm9w ZXJ0aWVzKSkpCgkJICAoZWxpbmZvLWxvZy1zdHJpbmcKCQkgICAnY29tbWFuZCB0ZXhpLW5h bWUgZmlsZS1uYW1lIHBvc2l0aW9uCgkJICAgKGNvbmNhdCAiYCIgdGV4aS1wZC1uYW1lICIn IGlzIG5vdCBhIGNvbW1hbmQiKSkpCgkJICgoYW5kIChub3QgdGV4aS1jb21tYW5kKSAobnRo IDAgcHJvcGVydGllcykpCgkJICAoZWxpbmZvLWxvZy1zdHJpbmcKCQkgICAnbm8tY29tbWFu ZCB0ZXhpLW5hbWUgZmlsZS1uYW1lIHBvc2l0aW9uCgkJICAgKGNvbmNhdCAiYCIgdGV4aS1w ZC1uYW1lICInIGlzIGEgY29tbWFuZCIpKSkpCgkJOzsgQ2hlY2sgYXJndW1lbnRzLgoJCShz ZXRxIGFyZy1saXN0IChudGggMiBwcm9wZXJ0aWVzKSkKCQkoY29uZAoJCSAoKG5vdCBhcmct bGlzdCkKCQkgICh1bmxlc3MgKHN0cmluZy1lcXVhbCAoZWxpbmZvLS1nZXQtbmV4dC1hcmcp ICIiKQoJCSAgICA7OyBUaGUgZnVuY3Rpb24gZG9lc24ndCBoYXZlIGFyZ3VtZW50cy4KCQkg ICAgKGVsaW5mby1sb2ctc3RyaW5nCgkJICAgICAnYXJnLW1pc21hdGNoIHRleGktbmFtZSBm aWxlLW5hbWUgcG9zaXRpb24KCQkgICAgIChjb25jYXQgImAiIHRleGktcGQtbmFtZSAiJyBo YXMgbm8gYXJndW1lbnRzIikpKSkKCQkgKChub3QgKGxpc3RwIGFyZy1saXN0KSkKCQkgIDs7 IFVzdWFsbHkgdGhpcyBpcyBhbiAiQXJnbGlzdCBub3QgYXZhaWxhYmxlIC4uLiIgcHJvYmxl bS4KCQkgIChlbGluZm8tbG9nLXN0cmluZwoJCSAgICdhcmctbm90LWF2YWlsYWJsZSB0ZXhp LW5hbWUgZmlsZS1uYW1lIHBvc2l0aW9uCgkJICAgKGNvbmNhdCAiQXJndW1lbnRzIG9mIGAi IHRleGktcGQtbmFtZSAiJyBub3QgYXZhaWxhYmxlIikgdCkpCgkJICh0CgkJICAoY2F0Y2gg J2J1ZwoJCSAgICAoZG9saXN0IChhcmcgYXJnLWxpc3QpCgkJICAgICAgKHNldHEgYXJnLW5h bWUgKGVsaW5mby0tc3ltYm9sLW5hbWUgYXJnKSkKCQkgICAgICAoc2V0cSB0ZXhpLWFyZy1u YW1lIChlbGluZm8tLWdldC1uZXh0LWFyZykpCgkJICAgICAgKGNvbmQKCQkgICAgICAgKChz dHJpbmctZXF1YWwgYXJnLW5hbWUgdGV4aS1hcmctbmFtZSkpIDsgOi0pCgkJICAgICAgICgo c3RyaW5nLWVxdWFsIHRleGktYXJnLW5hbWUgIiIpCgkJCTs7IFRoZSBmdW5jdGlvbiBoYXMg bW9yZSBhcmd1bWVudHMgdGhhbiBkZXNjcmliZWQuCgkJCShvciAoYW5kIChzdHJpbmctbWF0 Y2ggIiZvcHRpb25hbFxcfCZyZXN0IiBhcmctbmFtZSkKCQkJCSA7OyBNYXliZSB0aGUgbWFu dWFsIGp1c3Qgd2FudHMgdXMgdG8KCQkJCSA7OyBpZ25vcmUgdGhlIGFyZ3VtZW50cy4KCQkJ CSAobGV0ICgobGFzdC1uYW1lIChjYXIgKGxhc3QgYXJnLWxpc3QpKSkpCgkJCQkgICAoc3Ry aW5nLW1hdGNoCgkJCQkgICAgImlnbm9yZWQ/IiAoZWxpbmZvLS1zeW1ib2wtbmFtZSBsYXN0 LW5hbWUpKSkpCgkJCSAgICAoZWxpbmZvLWxvZy1zdHJpbmcKCQkJICAgICAnYXJnLW1pc21h dGNoIHRleGktbmFtZSBmaWxlLW5hbWUgcG9zaXRpb24KCQkJICAgICAoY29uY2F0CgkJCSAg ICAgICJgIiB0ZXhpLXBkLW5hbWUgIicgbGFja3MgZGVzY3JpcHRpb24gb2YgIgoJCQkgICAg ICAoY29uZAoJCQkgICAgICAgKChzdHJpbmctZXF1YWwgYXJnLW5hbWUgIiZvcHRpb25hbCIp CgkJCQkib3B0aW9uYWwgYXJndW1lbnQocykuIikKCQkJICAgICAgICgoc3RyaW5nLWVxdWFs IGFyZy1uYW1lICIlcmVzdCIpCgkJCQkicmVzdCBvZiBhcmd1bWVudHMuIikKCQkJICAgICAg ICh0IChjb25jYXQgImFyZ3VtZW50IGAiIGFyZy1uYW1lICInIikpKSkpKQoJCQkodGhyb3cg J2J1ZyB0KSkKCQkgICAgICAgKChvciAoc3RyaW5nLW1hdGNoICImb3B0aW9uYWxcXHwmcmVz dCIgYXJnLW5hbWUpCgkJCSAgICAoc3RyaW5nLW1hdGNoICImb3B0aW9uYWxcXHwmcmVzdCIg dGV4aS1hcmctbmFtZSkpCgkJCShvciAoYW5kIChzdHJpbmctbWF0Y2ggIiZvcHRpb25hbFxc fCZyZXN0IiB0ZXhpLWFyZy1uYW1lKQoJCQkJIDs7IE1heWJlIHdlIGRvbid0IHdhbnQgdG8g a25vdyBhbGwKCQkJCSA7OyBhcmd1bWVudHM/ICBMZXQncyBnZXQgaGV1cmlzdGljYWwKCQkJ CSA7OyBvbmNlIG1vcmUuCgkJCQkgKGxldCAoKG5leHQtbmFtZSAoZWxpbmZvLS1nZXQtbmV4 dC1hcmcpKSkKCQkJCSAgIChzdHJpbmctbWF0Y2gKCQkJCSAgICAiZWxlbWVudHNcXHxhcmd1 bWVudHNcXHxhcmdzIiBuZXh0LW5hbWUgMCkpKQoJCQkgICAgOzsgVGhlIGZvbGxvd2luZyBp ZGlvbSBpcyBwb3B1bGFyIHdpdGhpbgoJCQkgICAgOzsgbWFjcm9zIGFuZCBzcGVjaWFsIGZv cm1zLgoJCQkgICAgKGFuZCAoc3RyaW5nLW1hdGNoICImcmVzdCIgYXJnLW5hbWUpCgkJCQkg KG9yIChzdHJpbmctbWF0Y2ggIkBkb3Rze30kIiB0ZXhpLWFyZy1uYW1lKQoJCQkJICAgICAo cmUtc2VhcmNoLWZvcndhcmQKCQkJCSAgICAgICJAZG90c3t9JCIgKGxpbmUtZW5kLXBvc2l0 aW9uKSB0KSkpCgkJCSAgICAoZWxpbmZvLWxvZy1zdHJpbmcKCQkJICAgICAnYXJnLW1pc21h dGNoIHRleGktbmFtZSBmaWxlLW5hbWUgcG9zaXRpb24KCQkJICAgICAoY29uY2F0CgkJCSAg ICAgICJgIiB0ZXhpLXBkLW5hbWUKCQkJICAgICAgIicgaGFzIG1pc21hdGNoaW5nIG9wdGlv bmFsIG9yIHJlc3Qgb2YgYXJndW1lbnRzIikpKQoJCQkodGhyb3cgJ2J1ZyB0KSkKCQkgICAg ICAgKHQKCQkJKGVsaW5mby1sb2ctc3RyaW5nCgkJCSAnYXJnLW1pc21hdGNoIHRleGktbmFt ZSBmaWxlLW5hbWUgcG9zaXRpb24KCQkJIChjb25jYXQgIiciIHRleGktcGQtbmFtZSAiJyB1 c2VzIGAiIHRleGktYXJnLW5hbWUKCQkJCSAiJyBmb3IgYXJndW1lbnQgYCIgYXJnLW5hbWUg IiciKSB0KSkKCQkgICAgICAgKHRocm93ICdidWcgdCkpKSkpKSkpKQoJICAgKChtYXRjaC1i ZWdpbm5pbmcgNCkKCSAgICAoc2V0cSB0ZXhpLW9wdGlvbiAobWF0Y2gtYmVnaW5uaW5nIDYp KQoJICAgIChzZXRxIHBvc2l0aW9uIChlbGluZm8tLW1vdmUtdG8tbmV4dCkpCgkgICAgKHNl dHEgdGV4aS1uYW1lIChlbGluZm8tLWdldC1uZXh0KSkKCSAgICAoc2V0cSB0ZXhpLXBkLW5h bWUgKHByb3BlcnRpemUgdGV4aS1uYW1lICdmYWNlIGVsaW5mby1sb2ctZGVmLWZhY2UpKQoJ ICAgIChpZiAobm90IChib3VuZHAgKGludGVybiB0ZXhpLW5hbWUpKSkKCQkocHJvZ24KCQkg IChlbGluZm8tbG9nLXN0cmluZwoJCSAgICd2YXItdW5ib3VuZCB0ZXhpLW5hbWUgZmlsZS1u YW1lIHBvc2l0aW9uCgkJICAgKGNvbmNhdCAiVW5ib3VuZCB2YXJpYWJsZSBgIiB0ZXhpLXBk LW5hbWUgIiciKSB0KQoJCSAgKGZvcndhcmQtbGluZSkpCgkgICAgICA7OyBDaGVjayBvcHRp b24gcHJvcGVydHkuCgkgICAgICAoc2V0cSBpcy1vcHRpb24gKGVsaW5mby0taXMtb3B0aW9u IChpbnRlcm4gdGV4aS1uYW1lKSkpCgkgICAgICAoY29uZAoJICAgICAgICgoYW5kIHRleGkt b3B0aW9uIChub3QgaXMtb3B0aW9uKSkKCQkoZWxpbmZvLWxvZy1zdHJpbmcKCQkgJ25vLW9w dGlvbiB0ZXhpLW5hbWUgZmlsZS1uYW1lIHBvc2l0aW9uCgkJIChjb25jYXQgImAiIHRleGkt cGQtbmFtZSAiJyBpcyBub3QgYW4gb3B0aW9uIikpKQoJICAgICAgICgoYW5kIChub3QgdGV4 aS1vcHRpb24pIGlzLW9wdGlvbikKCQkoZWxpbmZvLWxvZy1zdHJpbmcKCQkgJ29wdGlvbiB0 ZXhpLW5hbWUgZmlsZS1uYW1lIHBvc2l0aW9uCgkJIChjb25jYXQgImAiIHRleGktcGQtbmFt ZSAiJyBpcyBhbiBvcHRpb24iKSkpKSkpCgkgICAoKG1hdGNoLWJlZ2lubmluZyA4KQoJICAg IChzZXRxIHBvc2l0aW9uIChsaW5lLWJlZ2lubmluZy1wb3NpdGlvbikpCgkgICAgOzsgQW4g ZXhhbXBsZS12ZXJiYXRpbS1saXNwIGdyb3VwLCBza2lwIGl0LgoJICAgICh1bmxlc3MgKHJl LXNlYXJjaC1mb3J3YXJkCgkJICAgICAoY29uY2F0ICJeQGVuZCAiIChtYXRjaC1zdHJpbmct bm8tcHJvcGVydGllcyA3KQoJCQkgICAgIChtYXRjaC1zdHJpbmctbm8tcHJvcGVydGllcyA4 KSkgbmlsIHQpCgkgICAgICAoZWxpbmZvLWxvZy1zdHJpbmcKCSAgICAgICAnbm8tZW5kIG5p bCBmaWxlLW5hbWUgcG9zaXRpb24KCSAgICAgICAoY29uY2F0ICJVbnRlcm1pbmF0ZWQgIiAo bWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMgNykKCQkgICAgICAgKG1hdGNoLXN0cmluZy1u by1wcm9wZXJ0aWVzIDgpKSkpKQoJICAgKChtYXRjaC1iZWdpbm5pbmcgOSkKCSAgICAoZWxp bmZvLWxvZy1zdHJpbmcKCSAgICAgJ2NvZGUta2JkIG5pbCBmaWxlLW5hbWUgKG1hdGNoLWJl Z2lubmluZyA5KQoJICAgICAoY29uY2F0ICJVc2UgQGtiZCBmb3IgQGNvZGV7IgoJCSAgICAg KHJlcGxhY2UtcmVnZXhwLWluLXN0cmluZwoJCSAgICAgICJcbiIgIiAiIChtYXRjaC1zdHJp bmctbm8tcHJvcGVydGllcyA5KSkgIn0iKSkpCgkgICAoKG1hdGNoLWJlZ2lubmluZyAxMCkK CSAgICAoZWxpbmZvLWxvZy1zdHJpbmcKCSAgICAgJ2NvZGUta2V5IG5pbCBmaWxlLW5hbWUg KG1hdGNoLWJlZ2lubmluZyAxMCkKCSAgICAgKGNvbmNhdCAiVXNlIEBrZXkgZm9yIEBjb2Rl eyIKCQkgICAgIChyZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcKCQkgICAgICAiXG4iICIgIiAo bWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMgMTIpKSAifSIpKSkKCSAgICgobWF0Y2gtYmVn aW5uaW5nIDExKQoJICAgIChlbGluZm8tbG9nLXN0cmluZwoJICAgICAna2JkLWtleSBuaWwg ZmlsZS1uYW1lIChtYXRjaC1iZWdpbm5pbmcgMTEpCgkgICAgIChjb25jYXQgIlVzZSBAa2V5 IGZvciBAa2JkeyIKCQkgICAgIChyZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcKCQkgICAgICAi XG4iICIgIiAobWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMgMTIpKSAifSIpKSkKCSAgICgo bWF0Y2gtYmVnaW5uaW5nIDEzKQoJICAgIDs7IEN1cnJlbnRseSB3ZSBkb24ndCBjYXRlciBm b3IgQGNvZGV7bmlsfSBtaXN3cml0dGVuIGFzIG5pbAoJICAgIDs7IGFuZCBwcm9iYWJseSBu ZXZlciB3aWxsLgoJICAgIChlbGluZm8tbG9nLXN0cmluZwoJICAgICAna2JkLWtleSBuaWwg ZmlsZS1uYW1lIChtYXRjaC1iZWdpbm5pbmcgMTMpCgkgICAgIChjb25jYXQgIlVzZSBub24t QGNvZGV7bmlsfSBpbnN0ZWFkIG9mIG5vbi1uaWwiKSkpCgkgICA7OyBBZGRpdGlvbmFsIGNh c2VzIGFkZGVkIGhlcmUuCgkgICApKSkpKSkKCihkZWZ1biBlbGluZm8tY2hlY2stYnVmZmVy ICgpCiAgIkNoZWNrIHZhbGlkaXR5IG9mIGN1cnJlbnQgVGV4aW5mbyBidWZmZXIuClRoZSBi dWZmZXIgbXVzdCBiZSB2aXNpdGluZyBhIGZpbGUuIgogIChpbnRlcmFjdGl2ZSkKICAoZWxp bmZvLWNsZWFyLWxvZykKICAoY29uZAogICAoKG5vdCBidWZmZXItZmlsZS1uYW1lKQogICAg KGVycm9yICJUaGUgY3VycmVudCBidWZmZXIgZG9lcyBub3QgdmlzaXQgYSBmaWxlIikpCiAg ICgoYW5kIChidWZmZXItbW9kaWZpZWQtcCkKCSAoeS1vci1uLXAgKGZvcm1hdCAiU2F2ZSBi dWZmZXIgJXMgZmlyc3Q/ICIgKGJ1ZmZlci1uYW1lKSkpKQogICAgKHNhdmUtYnVmZmVyKSkp CiAgKHNldHEgZWxpbmZvLWZpbGVzLWNvdW50IG5pbCkKICAoZ290by1jaGFyIChwb2ludC1t aW4pKQogIChlbGluZm8tY2hlY2sgYnVmZmVyLWZpbGUtbmFtZSkKICAoZWxpbmZvLWRpc3Bs YXktbG9nIGJ1ZmZlci1maWxlLW5hbWUpKQoKKGRlZnVuIGVsaW5mby1jaGVjay1maWxlIChm aWxlLW5hbWUpCiAgIkNoZWNrIHZhbGlkaXR5IG9mIFRleGluZm8gZmlsZSBGSUxFLU5BTUUu IgogIChpbnRlcmFjdGl2ZSAiZkNoZWNrIFRleGluZm8gZmlsZSAiKQogIChlbGluZm8tY2xl YXItbG9nKQogIChzZXRxIGVsaW5mby1maWxlcy1jb3VudCBuaWwpCiAgKHdpdGgtdGVtcC1i dWZmZXIKICAgIChpbnNlcnQtZmlsZS1jb250ZW50cyBmaWxlLW5hbWUpCiAgICAoZWxpbmZv LWNoZWNrIGZpbGUtbmFtZSkpCiAgKGVsaW5mby1kaXNwbGF5LWxvZyBmaWxlLW5hbWUpKQoK KGRlZnVuIGVsaW5mby1jaGVjay1kaXJlY3RvcnkgKGRpcmVjdG9yeSkKICAiQ2hlY2sgdmFs aWRpdHkgb2YgVGV4aW5mbyBmaWxlcyBpbiBESVJFQ1RPUlkuIgogIChpbnRlcmFjdGl2ZSAi RENoZWNrIGFsbCB0ZXhpbmZvIGZpbGVzIGluICIpCiAgKGxldCAoKGZpbGVzIChkaXJlY3Rv cnktZmlsZXMgZGlyZWN0b3J5ICdmdWxsKSkpCiAgICAoZWxpbmZvLWNsZWFyLWxvZykKICAg IChzZXRxIGVsaW5mby1maWxlcy1jb3VudCAwKQogICAgKGRvbGlzdCAoZmlsZSBmaWxlcykK ICAgICAgKHdoZW4gKGFuZCAoc3RyaW5nLWVxdWFsIChmaWxlLW5hbWUtZXh0ZW5zaW9uIGZp bGUpICJ0ZXhpIikKCQkgKG5vdCAoYmFja3VwLWZpbGUtbmFtZS1wIGZpbGUpKSkKCSh3aXRo LXRlbXAtYnVmZmVyCgkgIChpbnNlcnQtZmlsZS1jb250ZW50cyBmaWxlKQoJICAoZWxpbmZv LWNoZWNrIGZpbGUpCgkgIChzZXRxIGVsaW5mby1maWxlcy1jb3VudCAoMSsgZWxpbmZvLWZp bGVzLWNvdW50KSkKCSAgKGxldCAobWVzc2FnZS1sb2ctbWF4KQoJICAgIChtZXNzYWdlICIl cyBmaWxlcyBjaGVja2VkIiBlbGluZm8tZmlsZXMtY291bnQpKSkpKQogICAgKGVsaW5mby1k aXNwbGF5LWxvZykpKQoKOzsgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KOzsKOzs7CQkJTmF2 aWdhdGlvbiBVdGlsaXRpZXMKOzsgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KOzsKCihkZWZj dXN0b20gZWxpbmZvLW5hbWVzLWFsaXN0CiAgJygoImVsaXNwIiAuICJsaXNwcmVmIikgKCJl bWFjcyIgLiAiZW1hY3MiKSkKICAiQWxpc3Qgb2YgKGluZm8tZmlsZS1uYW1lIHRleGktc3Vi ZGlyZWN0b3J5KSBhc3NvY2lhdGlvbnMuCklmIGVsaW5mbyBjYW4ndCBmaW5kIGFuIGFzc29j aWF0aW9uIGl0IHdpbGwgbG9vayBpbiB0aGUgXCJtaXNjXCIKc3ViZGlyZWN0b3J5LiIKICA6 dHlwZSAnKHJlcGVhdCAoZ3JvdXAgKHN0cmluZyA6dGFnICJpbmZvLWZpbGUiIDpmb3JtYXQg IiAgJXQ6ICV2IiA6c2l6ZSAxNSkKCQkJKHN0cmluZyA6dGFnICJ0ZXhpLXN1YmRpciIgOmZv cm1hdCAiICAldDogJXZcbiIgOnNpemUgMTUpKSkKICA6Z3JvdXAgJ2VsaW5mbykKCihkZWZj dXN0b20gZWxpbmZvLXRleGktZGlyZWN0b3J5IChjb25jYXQgc291cmNlLWRpcmVjdG9yeSAi ZG9jLyIpCiAgIkRpcmVjdG9yeSB3aGVyZSBkb2MgZmlsZXMgcmVzaWRlLiIKICA6dHlwZSAn ZmlsZQogIDpncm91cCAnZWxpbmZvKQoKKGRlZnVuIGVsaW5mby0tZGVmYXVsdC10YWcgKCkK ICAiUmV0dXJuIGNvbnMgaG9sZGluZyBzdGFydCBhbmQgbmFtZSBvZiB0YWcgbmVhciBgcG9p bnQnLiIKICAobGV0IChmcm9tIHRvIGJvdW5kKQogICAgKHdoZW4gKG9yIChwcm9nbgoJCTs7 IExvb2sgYXQgdGV4dCBhcm91bmQgYHBvaW50Jy4KCQkoc2F2ZS1leGN1cnNpb24KCQkgIChz a2lwLWNoYXJzLWJhY2t3YXJkICJhLXowLTkiKSAoc2V0cSBmcm9tIChwb2ludCkpKQoJCShz YXZlLWV4Y3Vyc2lvbgoJCSAgKHNraXAtY2hhcnMtZm9yd2FyZCAiYS16MC05IikgKHNldHEg dG8gKHBvaW50KSkpCgkJKD4gdG8gZnJvbSkpCgkgICAgICA7OyBMb29rIGJldHdlZW4gYGxp bmUtYmVnaW5uaW5nLXBvc2l0aW9uJyBhbmQgYHBvaW50Jy4KCSAgICAgIChzYXZlLWV4Y3Vy c2lvbgoJCShhbmQgKHNldHEgYm91bmQgKGxpbmUtYmVnaW5uaW5nLXBvc2l0aW9uKSkKCQkg ICAgIChza2lwLWNoYXJzLWJhY2t3YXJkICJeYS16MC05IiBib3VuZCkKCQkgICAgICg+IChz ZXRxIHRvIChwb2ludCkpIGJvdW5kKQoJCSAgICAgKHNraXAtY2hhcnMtYmFja3dhcmQgImEt ejAtOSIpCgkJICAgICAoc2V0cSBmcm9tIChwb2ludCkpKSkKCSAgICAgIDs7IExvb2sgYmV0 d2VlbiBgcG9pbnQnIGFuZCBgbGluZS1lbmQtcG9zaXRpb24nLgoJICAgICAgKHNhdmUtZXhj dXJzaW9uCgkJKGFuZCAoc2V0cSBib3VuZCAobGluZS1lbmQtcG9zaXRpb24pKQoJCSAgICAg KHNraXAtY2hhcnMtZm9yd2FyZCAiXmEtejAtOSIgYm91bmQpCgkJICAgICAoPCAoc2V0cSBm cm9tIChwb2ludCkpIGJvdW5kKQoJCSAgICAgKHNraXAtY2hhcnMtZm9yd2FyZCAiYS16MC05 IikKCQkgICAgIChzZXRxIHRvIChwb2ludCkpKSkpCiAgICAgIChjb25zIGZyb20gKGJ1ZmZl ci1zdWJzdHJpbmctbm8tcHJvcGVydGllcyBmcm9tIHRvKSkpKSkKCihkZWZjb25zdCBlbGlu Zm8tYXQtcmVnZXhwICJcXCg/OlxcKD86QFthLXpdK3tcXHxbfWAnXCJfOl0qXFwpKlsgXHRc bl0qXFwpIgogICJSZWdleHAgc3VwcG9zZWQgdG8gbWF0Y2ggVGV4aW5mbyBjb25zdHJ1Y3Rz IHRoYXQgc2VwYXJhdGUgaXRlbXMuIikKCjs7IFR3byBnbG9iYWxzLCBpbml0aWFsaXplZCBp biBgZWxpbmZvLWdvdG8tdGV4aScgYW5kIHVwZGF0ZWQgYnkKOzsgYGVsaW5mby0tdXBkYXRl LXJlZ2V4cCcuCihkZWZ2YXIgZWxpbmZvLWZyb20gbmlsKQooZGVmdmFyIGVsaW5mby1yZWdl eHAgbmlsKQoKKGRlZnVuIGVsaW5mby0tbWFrZS1yZWdleHAgKGZyb20gdG8pCiAgIlJldHVy biBidWZmZXIgdGV4dCBmcm9tIEZST00gdG8gVE8gYXMgcmVnZXhwLiIKICAocmVwbGFjZS1y ZWdleHAtaW4tc3RyaW5nCiAgICJbIFx0XSsiICJbIFx0XG5dKyIKICAgIChyZWdleHAtcXVv dGUKICAgICAoZG93bmNhc2UKICAgICAgKGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGll cyBmcm9tIHRvKSkpIG5pbCB0KSkKCihkZWZ1biBlbGluZm8tLW1ha2UtcmVnZXhwLTIgKGZy b20gdG8pCiAgIlJldHVybiBidWZmZXIgdGV4dCBmcm9tIEZST00gdG8gVE8gYXMgVGV4aW5m b2lzaCByZWdleHAuIgogIChyZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcKICAgIkBcXChbQHt9 XVxcKSIgKGxhbWJkYSAoc3RyaW5nKSAobWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMgMSBz dHJpbmcpKQogICAoZWxpbmZvLS1tYWtlLXJlZ2V4cCBmcm9tIHRvKSkpCgooZGVmdW4gZWxp bmZvLS11cGRhdGUtcmVnZXhwICgmb3B0aW9uYWwgcmVzdCkKICAoc2V0cSBlbGluZm8tcmVn ZXhwCgkoY29uY2F0CgkgZWxpbmZvLXJlZ2V4cAoJIChlbGluZm8tLW1ha2UtcmVnZXhwIGVs aW5mby1mcm9tIChtYXRjaC1iZWdpbm5pbmcgMCkpCgkgKHVubGVzcyAoPSBlbGluZm8tZnJv bSAobWF0Y2gtYmVnaW5uaW5nIDApKQoJICAgZWxpbmZvLWF0LXJlZ2V4cCkKCSAod2hlbiBy ZXN0CgkgICAoY29uY2F0IHJlc3QgZWxpbmZvLWF0LXJlZ2V4cCkpKSkpCgooZGVmdW4gZWxp bmZvLS11cGRhdGUtcmVnZXhwLTgxMCAoJm9wdGlvbmFsIHJlc3QpCiAgKHNldHEgZWxpbmZv LXJlZ2V4cAoJKGNvbmNhdAoJIGVsaW5mby1yZWdleHAKCSAoZWxpbmZvLS1tYWtlLXJlZ2V4 cCBlbGluZm8tZnJvbSAobWF0Y2gtYmVnaW5uaW5nIDApKQoJICh1bmxlc3MgKD0gZWxpbmZv LWZyb20gKG1hdGNoLWJlZ2lubmluZyAwKSkKCSAgIGVsaW5mby1hdC1yZWdleHApCgkgKHdo ZW4gcmVzdAoJICAgKGNvbmNhdCByZXN0IGVsaW5mby1hdC1yZWdleHApKSkpKQoKKGRlZmNv bnN0IGVsaW5mby1pbmZvLXJlZ2V4cAogICJcXCgtLSBcXCg/OkZ1bmN0aW9uXFx8Q29tbWFu ZFxcfFZhcmlhYmxlXFx8TWFjcm9cXHxTcGVjaWFsIEZvcm1cXHxVc2VyIE9wdGlvblxcfFN5 bnRheCBjbGFzc1xcKTogXFwpXApcXHxcXCg/OlxcKFxcKk5vdGVcXClcXHxcXCg6OlxcKVxc fFxcKlxcKFdhcm5pbmc6XFwpXFwqXFwpWyBdKlxcfFvigJhdKjxcXChbXj5dK1xcKT5b4oCZ XSpcClxcfFxcKFxcKD86TGFcXCk/VGVYXFx8KFtDUl0pXFx8RXVyb1xcKVxcfFxcKOKAmFxc KFte4oCZXStcXCnigJlcXClcXHxcXChb4oCYXSpcXChbQS1aMC05Ki1dK1xcKVvigJldKlxc KVwKXFx8XFwoWyBcdFxuXStcXClcXHxcXChbJ1wiX10rXFwpXFx8XFwoLStcXClcXHxcXChc XC5bLl0rXFwpXApcXHxcXChcXCg/OmVycm9yXFwpP1stLiE9PnwqI11bLS4hPT58KiNdK1xc KVxcfFxcKFt7fV1cXCkiCiAgIlRoZSBiYXNpYyByZWdleHAgdXNlZCBieSBgZWxpbmZvLWdv dG8tdGV4aScuIikKCjs7IFVzZWQgZm9yIHRlc3Rpbmcgb25seSBzbyBSRU1PVkUgaXQuCihk ZWZ2YXIgZWxpbmZvLXRlc3QtdGV4aS13aW5kb3cgbmlsKQoKKGRlZnVuIGVsaW5mby1maW5k LXRhZy1vdGhlci13aW5kb3cgKHRhZ25hbWUgJm9wdGlvbmFsIG5leHQtcCByZWdleHAtcCkK ICAiT3VyIHZlcnNpb24gb2YgYGZpbmQtdGFnLW90aGVyLXdpbmRvdycuIgogIChsZXQqICgo d2luZG93LXBvaW50ICh3aW5kb3ctcG9pbnQpKQoJICh0YWdidWYgKGZpbmQtdGFnLW5vc2Vs ZWN0IHRhZ25hbWUgbmV4dC1wIHJlZ2V4cC1wKSkKCSAodGFncG9pbnQgKHByb2duIChzZXQt YnVmZmVyIHRhZ2J1ZikgKHBvaW50KSkpKQogICAgKHNldC13aW5kb3ctcG9pbnQgKHByb2cx CgkJCSAgKHNlbGVjdGVkLXdpbmRvdykKCQkJKHNlbGVjdC13aW5kb3cKCQkJIChvciAoZ2V0 LWJ1ZmZlci13aW5kb3cgdGFnYnVmKQoJCQkgICAgIChsZXQgKCh3aW5kb3cgKHNwbGl0LXdp bmRvdyBuaWwgbmlsICdsZWZ0KSkpCgkJCSAgICAgICAoc2V0LXdpbmRvdy1idWZmZXIgd2lu ZG93IHRhZ2J1ZikKCQkJICAgICAgIHdpbmRvdykpKQoJCQkoc2V0LXdpbmRvdy1wb2ludCAo c2VsZWN0ZWQtd2luZG93KSB0YWdwb2ludCkpCgkJICAgICAgd2luZG93LXBvaW50KSkpCgoo ZGVmdW4gZWxpbmZvLXdpbmRvd3Mtc3luY2ggKCZvcHRpb25hbCBzb3VyY2UgdGFyZ2V0KQog ICJTeW5jaCBgd2luZG93LXBvaW50JyBvZiB3aW5kb3cgVEFSR0VUIHdpdGggdGhhdCBvZiB3 aW5kb3cgU09VUkNFLiIKICAobGV0KiAoKHNvdXJjZSAob3Igc291cmNlIChzZWxlY3RlZC13 aW5kb3cpKSkKCSAodGFyZ2V0IChvciB0YXJnZXQKCQkgICAgICh3aW5kb3ctaW4tZGlyZWN0 aW9uICdsZWZ0IHNvdXJjZSkKCQkgICAgICh3aW5kb3ctaW4tZGlyZWN0aW9uICdyaWdodCBz b3VyY2UpKSkKCSAobGluZQoJICAod2l0aC1jdXJyZW50LWJ1ZmZlciAod2luZG93LWJ1ZmZl ciBzb3VyY2UpCgkgICAgKGNvdW50LXNjcmVlbi1saW5lcyAod2luZG93LXN0YXJ0IHNvdXJj ZSkgKHdpbmRvdy1wb2ludCBzb3VyY2UpKSkpCgkgOzsgRXhwZXJpbWVudGFsbHkgT0sgLi4u CgkgKHNvdXJjZS1oZWFkICgvICgrICh3aW5kb3ctaGVhZGVyLWxpbmUtaGVpZ2h0IHNvdXJj ZSkKCQkJICAgICh3aW5kb3ctdGFiLWxpbmUtaGVpZ2h0IHNvdXJjZSkpCgkJCSAoZnJhbWUt Y2hhci1oZWlnaHQgKHdpbmRvdy1mcmFtZSBzb3VyY2UpKSkpCgkgKHRhcmdldC1oZWFkICgv ICgrICh3aW5kb3ctaGVhZGVyLWxpbmUtaGVpZ2h0IHRhcmdldCkKCQkJICAgICh3aW5kb3ct dGFiLWxpbmUtaGVpZ2h0IHRhcmdldCkpCgkJCSAoZnJhbWUtY2hhci1oZWlnaHQgKHdpbmRv dy1mcmFtZSB0YXJnZXQpKSkpKQogICAgKHNldHEgbGluZSAoKyBsaW5lICgtIHNvdXJjZS1o ZWFkIHRhcmdldC1oZWFkKSkpCiAgICAod2l0aC1zZWxlY3RlZC13aW5kb3cgdGFyZ2V0CiAg ICAgIChyZWNlbnRlciAoMS0gbGluZSkpKSkpCgooZGVmdW4gZWxpbmZvLWdvdG8tdGV4aSAo KQogICJJbiBgSW5mby1tb2RlJyBkaXNwbGF5IGNvcnJlc3BvbmRpbmcgVGV4aW5mbyB0ZXh0 IGluIG90aGVyIHdpbmRvdy4KSWYgaW52b2tpbmcgdGhpcyBjb21tYW5kIGRvZXNuJ3QgZ2V0 IHlvdSB0byB0aGUgZGVzaXJlZCBwb3NpdGlvbgppbiB0aGUgVGV4aW5mbyBidWZmZXIsIHlv dSBtaWdodCB0cnkgdG8gaW52b2tlIGl0IGZyb20gYSBwb3NpdGlvbgpvbmUgbGluZSBhYm92 ZSBvciBiZWxvdyB0aGUgY3VycmVudCBvbmUgaW4gdGhlIEluZm8gYnVmZmVyLiIKICAoaW50 ZXJhY3RpdmUpCiAgKHVubGVzcyAoZXEgbWFqb3ItbW9kZSAnSW5mby1tb2RlKQogICAgKGVy cm9yICJUaGlzIGZ1bmN0aW9uIGNhbiBiZSBpbnZva2VkIGluIEluZm8tbW9kZSBvbmx5Iikp CiAgKGxldCogKChpbmZvLXdpbmRvdyAoc2VsZWN0ZWQtd2luZG93KSkKCSAod2luZG93LXBv aW50ICh3aW5kb3ctcG9pbnQpKQoJIChpbmZvLWZpbGUtbmFtZQoJICAod2hlbiAoYm91bmRw ICdJbmZvLWN1cnJlbnQtZmlsZSkKCSAgICAoZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSBJbmZv LWN1cnJlbnQtZmlsZSkpKQoJICh0YWcKCSAgKHdoZW4gKGJvdW5kcCAnSW5mby1jdXJyZW50 LW5vZGUpCgkgICAgSW5mby1jdXJyZW50LW5vZGUpKQoJICh0ZXhpLXN1YmRpcgoJICAod2hl biBpbmZvLWZpbGUtbmFtZQoJICAgIChsZXQgKChjZWxsIChhc3NvYyBpbmZvLWZpbGUtbmFt ZSBlbGluZm8tbmFtZXMtYWxpc3QpKSkKCSAgICAgIChpZiBjZWxsIChjZHIgY2VsbCkgIm1p c2MiKSkpKQoJIChhdCAocG9pbnQpKQoJIChvZmZzZXQgMCkKCSB0ZXhpLWRpciB0ZXhpLWZp bGUgdGFncy1maWxlLW5hbWUKCSBkZWZhdWx0LXRhZyBhbmNob3IgcmVwZWF0IGZyb20gdG8K CSBjYXNlLWZvbGQtc2VhcmNoIHRhZ2J1ZikKICAgIChjb25kCiAgICAgKChub3QgdGV4aS1z dWJkaXIpCiAgICAgIChlcnJvciAiQ2FuJ3QgaWRlbnRpZnkgdGV4aW5mbyBzdWJkaXJlY3Rv cnkiKSkKICAgICAoKGZpbGUtZXhpc3RzLXAKICAgICAgIChzZXRxIHRleGktZGlyIChjb25j YXQgZWxpbmZvLXRleGktZGlyZWN0b3J5IHRleGktc3ViZGlyICIvIikpKSkKICAgICAodAog ICAgICAoZXJyb3IgIkNhbid0IGZpbmQgdGV4aW5mbyBzdWJkaXJlY3RvcnkiKSkpCgogICAg OzsgU2lnaCAuLi4KICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICA7OyBNb3ZlIGF3YXkgZnJv bSBlbXB0eSBsaW5lcy4KICAgICAgKHNhdmUtZXhjdXJzaW9uCgkoYmVnaW5uaW5nLW9mLWxp bmUpCgkod2hlbiAobG9va2luZy1hdCAiWyBcdF0qJCIpCgkgIChsZXQgKChwcmV2LWF0CgkJ IChwcm9nbgoJCSAgIChza2lwLWNoYXJzLWJhY2t3YXJkICIgXHRcbiIpCgkJICAgKHVubGVz cyAoYm9icCkKCQkgICAgIChwb2ludCkpKSkKCQkobmV4dC1hdAoJCSAocHJvZ24KCQkgICAo c2tpcC1jaGFycy1mb3J3YXJkICIgXHRcbiIpCgkJICAgKHVubGVzcyAoZW9icCkKCQkgICAg IChwb2ludCkpKSkpCgkgICAgKHNldHEgYXQKCQkgIChjb25kCgkJICAgKChhbmQgcHJldi1h dCBuZXh0LWF0KQoJCSAgICAoaWYgKD4gKC0gYXQgcHJldi1hdCkgKC0gbmV4dC1hdCBhdCkp IG5leHQtYXQgcHJldi1hdCkpCgkJICAgKHByZXYtYXQgcHJldi1hdCkKCQkgICAobmV4dC1h dCBuZXh0LWF0KSkpKSkpCiAgICAgIChnb3RvLWNoYXIgYXQpCiAgICAgIChzZXRxIGZyb20g KHByb2duCgkJICAgKGJlZ2lubmluZy1vZi1saW5lKQoJCSAgIChza2lwLWNoYXJzLWZvcndh cmQgIiBcdCIpCgkJICAgKHBvaW50KSkpCiAgICAgIChzZXRxIHRvIChwcm9nbgoJCSAoZW5k LW9mLWxpbmUpCgkJIChza2lwLWNoYXJzLWJhY2t3YXJkICIgXHQiKQoJCSAocG9pbnQpKSkK ICAgICAgOzsgVHJ5IHRvIGhhbmRsZSBhbiB4cmVmIHRoYXQgc3BhbnMgdGhlIGJlZ2lubmlu ZyBvZiB0aGlzIGxpbmUuCiAgICAgIDs7IFRoaXMgd2lsbCBwdXQgdXMgYWZ0ZXIgdGhlIHJl ZmVyZW5jZSBpbiB0aGUgdGV4aSBidWZmZXIsIGJ1dAogICAgICA7OyB0aGF0J3Mgc3RpbGwg YmV0dGVyIHRoYW4gZ2V0dGluZyB0byB0aGUgaGVhZCBvZiB0aGUgc2VjdGlvbi4KICAgICAg KHdoZW4gKHNhdmUtZXhjdXJzaW9uCgkgICAgICAoZ290by1jaGFyIGZyb20pCgkgICAgICAo YW5kIChyZS1zZWFyY2gtYmFja3dhcmQKCQkgICAgIlxcKltObl1vdGUiIChsaW5lLWJlZ2lu bmluZy1wb3NpdGlvbiAwKSB0KQoJCSAgIChub3QgKHJlLXNlYXJjaC1mb3J3YXJkICJbLixd XFx8OjoiIGZyb20gdCkpKSkKCShnb3RvLWNoYXIgZnJvbSkKCShyZS1zZWFyY2gtZm9yd2Fy ZCAiOjpcXHxcXChbLixdKT9cXCkiIHRvIHQpCgkod2hlbiAobWF0Y2gtYmVnaW5uaW5nIDEp CgkgIDs7IEZvdW5kIGEgY2xvc2luZyBgLicgb3IgYCwnIHNvIHJlbG9jYXRlIGBmcm9tJy4K CSAgKHNldHEgZnJvbSAocG9pbnQpKQoJICAoc2V0cSBhdCAobWF4IGZyb20gYXQpKSkpCgog ICAgICAoZ290by1jaGFyIGF0KQogICAgICAod2hlbiAoc2V0cSBkZWZhdWx0LXRhZyAoZWxp bmZvLS1kZWZhdWx0LXRhZykpCgkoc2V0cSBvZmZzZXQgKC0gYXQgKGNhciBkZWZhdWx0LXRh ZykpKQoJKHNldHEgYW5jaG9yIChjZHIgZGVmYXVsdC10YWcpKQoJKHNhdmUtZXhjdXJzaW9u CgkgIChnb3RvLWNoYXIgZnJvbSkKCSAgKGNhdGNoICdkb25lCgkgICAgKGxldCAoKGNhc2Ut Zm9sZC1zZWFyY2ggdCkpCgkgICAgICAod2hpbGUgKHJlLXNlYXJjaC1mb3J3YXJkIGFuY2hv ciBuaWwgdCkKCQkoaWYgKD0gKG1hdGNoLWJlZ2lubmluZyAwKSAoY2FyIGRlZmF1bHQtdGFn KSkKCQkgICAgKHRocm93ICdkb25lIHQpCgkJICAoc2V0cSByZXBlYXQKCQkJKGlmIHJlcGVh dCAoMSsgcmVwZWF0KSAyKSkpKSkpKSkKCiAgICAgIChnb3RvLWNoYXIgKHNldHEgZWxpbmZv LWZyb20gZnJvbSkpCiAgICAgIChzZXRxIGVsaW5mby1yZWdleHAgbmlsKQogICAgICA7OyBT Y2FuIGxpbmUuCiAgICAgICh3aGlsZSAocmUtc2VhcmNoLWZvcndhcmQgZWxpbmZvLWluZm8t cmVnZXhwIHRvIHQpCgkoY29uZAoJICgobWF0Y2gtYmVnaW5uaW5nIDEpKQkJCTsgLS0gRnVu Y3Rpb246IC4uLgoJICgobWF0Y2gtYmVnaW5uaW5nIDIpCQkJOyAqTm90ZQoJICAoZWxpbmZv LS11cGRhdGUtcmVnZXhwKQoJICAobGV0ICgoZnJvbS0xIChwb2ludCkpCgkJdG8tMSkKCSAg ICAoaWYgKHJlLXNlYXJjaC1mb3J3YXJkICI6IiB0byB0KQoJCShwcm9nbgoJCSAgKHNldHEg dG8tMSAobWF0Y2gtYmVnaW5uaW5nIDApKQoJCSAgKGlmIChsb29raW5nLWF0LXAgIjoiKQoJ CSAgICAgIDs7IDo6IGlzIGhhbmRsZWQgYnkgbWFpbiBsb29wLCByZXNjYW4uCgkJICAgICAg KGdvdG8tY2hhciBmcm9tLTEpCgkJICAgIDs7IEEgY29tcGxleCB4cmVmLCBoYW5kbGUgaXQg aGVyZS4KCQkgICAgKHNldHEgZWxpbmZvLXJlZ2V4cAoJCQkgIChjb25jYXQgZWxpbmZvLXJl Z2V4cCA7IEZvcmNlIGEgYHsnIGhlcmU/CgkJCQkgICJbYS16QS1aLCBcdFxuXSoiCgkJCQkg IChlbGluZm8tLW1ha2UtcmVnZXhwIGZyb20tMSB0by0xKQoJCQkJICAiW2EtekEtWiwgXHRc bl0qfSIpKQoJCSAgICA7OyBRdWl0IGxvb3AuCgkJICAgIChzZXRxIGZyb20gdG8pCgkJICAg IChnb3RvLWNoYXIgdG8pKSkKCSAgICAgIChzZXRxIGVsaW5mby1yZWdleHAKCQkgICAgKGNv bmNhdCBlbGluZm8tcmVnZXhwCTsgRm9yY2UgYSBgeycgaGVyZT8KCQkJICAgICJbYS16QS1a LCBcdFxuXSoiCgkJCSAgICAoZWxpbmZvLS1tYWtlLXJlZ2V4cCBmcm9tLTEgdG8pCgkJCSAg ICAiW2EtekEtWiwgXHRcbl0qfSIpKQoJICAgICAgOzsgUXVpdCBsb29wLgoJICAgICAgKHNl dHEgZnJvbSB0bykKCSAgICAgIChnb3RvLWNoYXIgdG8pKSkpCgkgKChtYXRjaC1iZWdpbm5p bmcgMykJCQk7IDo6CgkgIChlbGluZm8tLXVwZGF0ZS1yZWdleHApKQoJICgobWF0Y2gtYmVn aW5uaW5nIDQpCQkJOyAqV2FybmluZzoqCgkgIChlbGluZm8tLXVwZGF0ZS1yZWdleHApKQoJ ICgobWF0Y2gtYmVnaW5uaW5nIDUpCQkJOyBgPEtFWT4nCgkgIChlbGluZm8tLXVwZGF0ZS1y ZWdleHAKCSAgIChlbGluZm8tLW1ha2UtcmVnZXhwIChtYXRjaC1iZWdpbm5pbmcgNSkgKG1h dGNoLWVuZCA1KSkpKQoJICgobWF0Y2gtYmVnaW5uaW5nIDYpCgkgIChlbGluZm8tLXVwZGF0 ZS1yZWdleHAKCSAgIChjb25jYXQgIkA/IiAobWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMg NikgIlxcKD86W3t9XStcXCk/IikpKQoJICgobWF0Y2gtYmVnaW5uaW5nIDcpCQkJOyBRdW90 ZWQgc3RyaW5nCgkgIChlbGluZm8tLXVwZGF0ZS1yZWdleHAtODEwCgkgICAoZWxpbmZvLS1t YWtlLXJlZ2V4cCAobWF0Y2gtYmVnaW5uaW5nIDgpIChtYXRjaC1lbmQgOCkpKSkKCSAoKG1h dGNoLWJlZ2lubmluZyA5KQkJCTsgVXBwZXItY2FzZSBzdHJpbmcuCgkgIChlbGluZm8tLXVw ZGF0ZS1yZWdleHAtODEwCgkgICAoZWxpbmZvLS1tYWtlLXJlZ2V4cCAobWF0Y2gtYmVnaW5u aW5nIDEwKSAobWF0Y2gtZW5kIDEwKSkpKQoJICgobWF0Y2gtYmVnaW5uaW5nIDExKQkJCTsg V2hpdGVzcGFjZQoJICAoZWxpbmZvLS11cGRhdGUtcmVnZXhwICJbIFx0XG5dKyIpKQoJICgo bWF0Y2gtYmVnaW5uaW5nIDEyKQkJCTsgYCciCgkgIChlbGluZm8tLXVwZGF0ZS1yZWdleHAp KQoJICgobWF0Y2gtYmVnaW5uaW5nIDEzKQkJCTsgLS0KCSAgKGVsaW5mby0tdXBkYXRlLXJl Z2V4cCAiWy1dKyIpKQoJICgobWF0Y2gtYmVnaW5uaW5nIDE0KQkJCTsgLi4KCSAgKGVsaW5m by0tdXBkYXRlLXJlZ2V4cCAiXFwoPzpcXC5bLl0rXFx8QGRvdHN7fVxcKSIpKQoJICgobWF0 Y2gtYmVnaW5uaW5nIDE1KQkJCTsgPT4KCSAgKGVsaW5mby0tdXBkYXRlLXJlZ2V4cAoJICAg KGNvbmNhdAoJICAgICJcXCg/OkBbYS16XSt7fVxcKVxcfCIKCSAgICAoZWxpbmZvLS1tYWtl LXJlZ2V4cCAobWF0Y2gtYmVnaW5uaW5nIDE1KSAobWF0Y2gtZW5kIDE1KSkpKSkKCSAoKG1h dGNoLWJlZ2lubmluZyAxNikJCQk7IHsgb3IgfQoJICAoZWxpbmZvLS11cGRhdGUtcmVnZXhw CgkgICAoY29uY2F0ICJAPyIgKG1hdGNoLXN0cmluZy1uby1wcm9wZXJ0aWVzIDE2KSBlbGlu Zm8tYXQtcmVnZXhwKSkpCgkgOzsgRnV0dXJlIGFkZGl0aW9ucyBnbyBoZXJlLgoJICkKCShz ZXRxIGVsaW5mby1mcm9tIChwb2ludCkpKQogICAgICAoc2V0cSBlbGluZm8tcmVnZXhwCgkg ICAgKGNvbmNhdCBlbGluZm8tcmVnZXhwIChlbGluZm8tLW1ha2UtcmVnZXhwIGVsaW5mby1m cm9tIHRvKSkpKQoKICAgIChpZiAobm90IChmaWxlLWV4aXN0cy1wCgkgICAgICAoc2V0cSB0 YWdzLWZpbGUtbmFtZSAoY29uY2F0IHRleGktZGlyICJUQUdTIikpKSkKCShlcnJvciAiTm8g dGFncyBmaWxlIGZvdW5kIikKICAgICAgKHNldHEgdGFnYnVmIChmaW5kLXRhZy1ub3NlbGVj dCAoY29uY2F0ICJeQG5vZGUgIiB0YWcgIlt/LF0iKSBuaWwgdCkpCiAgICAgIChlbGluZm8t ZmluZC10YWctb3RoZXItd2luZG93IChjb25jYXQgIl5Abm9kZSAiIHRhZyAiW38sXSIpIG5p bCB0KQoKICAgICAgOzsgVXNlZCBmb3IgdGVzdGluZyBvbmx5IHNvIFJFTU9WRSBpdC4KICAg ICAgKHNldHEgZWxpbmZvLXRlc3QtdGV4aS13aW5kb3cgKHNlbGVjdGVkLXdpbmRvdykpCgog ICAgICAobGV0ICgoY2FzZS1mb2xkLXNlYXJjaCB0KSkKCSh3aGVuIGVsaW5mby1yZWdleHAK CSAgKHdpdGgtY3VycmVudC1idWZmZXIgKGdldC1idWZmZXItY3JlYXRlICIqdGVzdCoiKQoJ ICAgIChkZWxldGUtcmVnaW9uIChwb2ludC1taW4pIChwb2ludC1tYXgpKQoJICAgIChpbnNl cnQgZWxpbmZvLXJlZ2V4cCkpCgkgIChsZXQgKChhdCAocG9pbnQpKSkKCSAgICAoY29uZAoJ ICAgICAoKGFuZCAocmUtc2VhcmNoLWZvcndhcmQgKGNvbmNhdCAiXFwoIiBlbGluZm8tcmVn ZXhwICJcXClcXHxebm9kZSIpIG5pbCB0KQoJCSAgIChtYXRjaC1iZWdpbm5pbmcgMSkpCgkg ICAgICAoZ290by1jaGFyIChtYXRjaC1iZWdpbm5pbmcgMSkpCgkgICAgICAoc2F2ZS1yZXN0 cmljdGlvbgoJCSh3aWRlbikKCQkobmFycm93LXRvLXJlZ2lvbiAobWF0Y2gtYmVnaW5uaW5n IDEpIChtYXRjaC1lbmQgMSkpCgkJKHdoZW4gKGFuZCBhbmNob3IgKHJlLXNlYXJjaC1mb3J3 YXJkIGFuY2hvciBuaWwgdCByZXBlYXQpKQoJCSAgKGdvdG8tY2hhciAoKyAobWF0Y2gtYmVn aW5uaW5nIDApIG9mZnNldCkpKSkpCgkgICAgICh0CgkgICAgICAoZ290by1jaGFyIGF0KSkp KSkpKQoKICAgIChzZXQtd2luZG93LXBvaW50IGluZm8td2luZG93IHdpbmRvdy1wb2ludCkK ICAgIChlbGluZm8td2luZG93cy1zeW5jaCBpbmZvLXdpbmRvdyAoZ2V0LWJ1ZmZlci13aW5k b3cgdGFnYnVmKSkKICAgIDs7IFRoZSBmb2xsb3dpbmcgbWlnaHQgZ2V0IHJlbW92ZWQuCiAg ICAoc2VsZWN0LXdpbmRvdyBpbmZvLXdpbmRvdykKICAgICkpCgooZGVmY29uc3QgZWxpbmZv LXRleGktZ2x5cGgtcmVnZXhwCiAgKHJlZ2V4cC1vcHQKICAgJygiZG90cyIgImVuZGRvdHMi ICJidWxsZXQiICJtaW51cyIgInJlc3VsdCIgImV4cGFuc2lvbiIKICAgICAicHJpbnQiICJl cnJvciIgImVxdWl2IiAicG9pbnQiICJjb3B5cmlnaHQiCiAgICAgInJlZ2lzdGVyZWRzeW1i b2wiICJldXJvIiAicG91bmRzIiAiTGFUZVgiICJUZVgiKSkKICAiUmVndWxhciBleHByZXNz aW9uIGZvciBnbHlwaHMgaW4gdGV4aSBidWZmZXJzLiIpCgooZGVmY29uc3QgZWxpbmZvLXRl eGktcmVnZXhwCiAgKGNvbmNhdAogICAiQGRlZlxcKHVuXFx8Zm4gQ29tbWFuZFxcfHZhclxc fG1hY3JvXFx8c3BlY1xcfG9wdFxcKVsgXHRdK1wKXFx8XFwoPzpAcD94cmVme1xcKFtefV0r XFwpXFwoPzp9XFx8JFxcKVxcKVxcfEBcXCg/OnN0cm9uZ1xcfGVtcGhcXCl7XFwoW159XStc XCl9XApcXHxcXChAIiBlbGluZm8tdGV4aS1nbHlwaC1yZWdleHAgInt9XFwpXFx8XFwoPzpA ZGZue1xcKFtefV0rXFwpfVxcKVwKXFx8XFwoQFthLXpdK3tcXClcXHxcXCh9XFwpXFx8XFwo WyBcdF0rXFwpXFx8XFwoW2AnXCJdW2AnXCJdK1xcKSIpCiAgIlRoZSBiYXNpYyByZWdleHAg dXNlZCBieSBgZWxpbmZvLWdvdG8taW5mbycuIikKCihkZWZ1biBlbGluZm8tZ290by1pbmZv ICgpCiAgIkluIGB0ZXhpbmZvLW1vZGUnIGRpc3BsYXkgY29ycmVzcG9uZGluZyBJbmZvIG5v ZGUgaW4gb3RoZXIgd2luZG93LgpJZiBpbnZva2luZyB0aGlzIGNvbW1hbmQgZG9lc24ndCBn ZXQgeW91IHRvIHRoZSBkZXNpcmVkIHBvc2l0aW9uCmluIHRoZSBJbmZvIGJ1ZmZlciwgeW91 IG1pZ2h0IHRyeSB0byBpbnZva2UgaXQgZnJvbSBhIHBvc2l0aW9uCm9uZSBsaW5lIGFib3Zl IG9yIGJlbG93IHRoZSBjdXJyZW50IG9uZSBpbiB0aGUgVGV4aW5mbyBidWZmZXIuIgogIChp bnRlcmFjdGl2ZSkKICAodW5sZXNzIChlcSBtYWpvci1tb2RlICd0ZXhpbmZvLW1vZGUpCiAg ICAoZXJyb3IgIlRoaXMgZnVuY3Rpb24gY2FuIGJlIGludm9rZWQgaW4gdGV4aW5mby1tb2Rl IG9ubHkiKSkKICAobGV0KiAoKHRleGktd2luZG93IChzZWxlY3RlZC13aW5kb3cpKQoJICh3 aW5kb3ctcG9pbnQgKHdpbmRvdy1wb2ludCkpCgkgKGluZm8tbm9kZS0zCgkgIChzYXZlLWV4 Y3Vyc2lvbgoJICAgICh3aGVuIChyZS1zZWFyY2gtYmFja3dhcmQgIl5Abm9kZSBcXChbLWEt ekEtWiBdK1xcKSIgbmlsIHQpCgkgICAgICAobWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMg MSkpKSkKCSAoaW5mby1ub2RlLTIKCSAgKHNhdmUtZXhjdXJzaW9uCgkgICAgKGdvdG8tY2hh ciAocG9pbnQtbWluKSkKCSAgICAod2hlbiAocmUtc2VhcmNoLWZvcndhcmQgIl5Abm9kZSBc XChbLWEtekEtWiBdK1xcKSIgbmlsIHQpCgkgICAgICAobWF0Y2gtc3RyaW5nLW5vLXByb3Bl cnRpZXMgMSkpKSkKCSAoaW5mby1ub2RlLTEKCSAgOzsgSWYgd2UgY2FuJ3QgZmluZCBhbiBh c3NvY2lhdGlvbiwgYGluZm8tb3RoZXItd2luZG93JyB3aWxsCgkgIDs7IHN0YXJ0IGF0IHRo ZSB0b3Agbm9kZS4KCSAgKGNhciAocmFzc29jCgkJKGZpbGUtbmFtZS1ub25kaXJlY3RvcnkK CQkgKGRpcmVjdG9yeS1maWxlLW5hbWUKCQkgIChmaWxlLW5hbWUtZGlyZWN0b3J5IGJ1ZmZl ci1maWxlLW5hbWUpKSkKCQllbGluZm8tbmFtZXMtYWxpc3QpKSkKCSAob2Zmc2V0IDApCgkg cmVnZXhwIGRlZmF1bHQtdGFnIGFuY2hvciByZXBlYXQKCSBjYXNlLWZvbGQtc2VhcmNoKQoK ICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICA7OyBVc2UgYnJ1dGUgZm9yY2UuCiAgICAgICh3 aGlsZSAoc2F2ZS1leGN1cnNpb24KCSAgICAgICAoYmVnaW5uaW5nLW9mLWxpbmUpCgkgICAg ICAgKG9yIChsb29raW5nLWF0ICJbIFx0XSpcblxcfEBhbmNob3J7IikKCQkgICAoYW5kIChs b29raW5nLWF0ICJAW2Etel0rXFwoPzogXFx8JFxcKSIpCgkJCShub3QgKGxvb2tpbmctYXQg IkBkZWZcXCh1blxcfGZuIENvbW1hbmRcXHx2YXJcXHxtYWNyb1xcfHNwZWNcXHxvcHRcXCki KSkpKSkKCShmb3J3YXJkLWxpbmUpKQogICAgICAobGV0ICgoYXQgKHBvaW50KSkKCSAgICAg KGZyb20gKHByb2duCgkJICAgICAoYmVnaW5uaW5nLW9mLWxpbmUpCgkJICAgICAoc2tpcC1j aGFycy1mb3J3YXJkICIgXHQiKQoJCSAgICAgKHBvaW50KSkpCgkgICAgICh0byAocHJvZ24K CQkgICAoZW5kLW9mLWxpbmUpCgkJICAgKHNraXAtY2hhcnMtYmFja3dhcmQgIiBcdCIpCgkJ ICAgKHBvaW50KSkpKQoKCTs7IEdldCBvdXQgb2YgYW55IHJlZmVyZW5jZSBhdCBCT0wsIHdl IGNhbid0IHRyYWNlIGl0IGFueXdheS4KCShjb25kaXRpb24tY2FzZSBuaWwKCSAgICAoYW5k IChwcm9nbgoJCSAgIChnb3RvLWNoYXIgZnJvbSkKCQkgICAodXAtbGlzdCAtMSkKCQkgICAo bG9va2luZy1hdCAieyIpKQoJCSAobG9va2luZy1iYWNrICJ4cmVmIiAobGluZS1iZWdpbm5p bmctcG9zaXRpb24pKQoJCSAocHJvZ24KCQkgICAoZm9yd2FyZC1zZXhwKQoJCSAgIChzZXRx IGZyb20gKHBvaW50KSkKCQkgICAoc2V0cSBhdCAobWF4IGF0IGZyb20pKSkpCgkgIChlcnJv ciBuaWwpKQoKCShnb3RvLWNoYXIgKG1heCBhdCBmcm9tKSkKCSh3aGVuIChzZXRxIGRlZmF1 bHQtdGFnIChlbGluZm8tLWRlZmF1bHQtdGFnKSkKCSAgKHNldHEgb2Zmc2V0ICgtIGF0IChj YXIgZGVmYXVsdC10YWcpKSkKCSAgKHNldHEgYW5jaG9yIChjZHIgZGVmYXVsdC10YWcpKQoJ ICAoc2F2ZS1leGN1cnNpb24KCSAgICAoZ290by1jaGFyIGZyb20pCgkgICAgKGNhdGNoICdk b25lCgkgICAgICAobGV0ICgoY2FzZS1mb2xkLXNlYXJjaCB0KSkKCQkod2hpbGUgKHJlLXNl YXJjaC1mb3J3YXJkIGFuY2hvciBuaWwgdCkKCQkgIChpZiAoPSAobWF0Y2gtYmVnaW5uaW5n IDApIChjYXIgZGVmYXVsdC10YWcpKQoJCSAgICAgICh0aHJvdyAnZG9uZSB0KQoJCSAgICAo c2V0cSByZXBlYXQKCQkJICAoaWYgcmVwZWF0ICgxKyByZXBlYXQpIDIpKSkpKSkpKQoKCShn b3RvLWNoYXIgZnJvbSkKCTs7IFNjYW4gbGluZS4KCSh3aGlsZSAocmUtc2VhcmNoLWZvcndh cmQgZWxpbmZvLXRleGktcmVnZXhwIHRvIHQpCgkgIChjb25kCgkgICAoKG1hdGNoLWJlZ2lu bmluZyAxKSkKCSAgICgobWF0Y2gtYmVnaW5uaW5nIDIpCQkJOyBAcD94cmVmCgkgICAgKG9y IChhbmQgKHNhdmUtZXhjdXJzaW9uCgkJICAgICAgIChnb3RvLWNoYXIgKG1hdGNoLWVuZCAy KSkKCQkgICAgICAgKGFuZCAoc2F2ZS1tYXRjaC1kYXRhCgkJCSAgICAgIDs7IEEgY29tbWEg d2l0aGluIHRoZSBicmFjZXMgc3RhbmRzIGZvciBhCgkJCSAgICAgIDs7IGNvbXBsZXggcmVm ZXJlbmNlLgoJCQkgICAgICAocmUtc2VhcmNoLWJhY2t3YXJkICIsIiAobWF0Y2gtYmVnaW5u aW5nIDIpIHQpKQoJCQkgICAgKHNraXAtY2hhcnMtZm9yd2FyZCAiIFx0XG4sIikKCQkJICAg IChzZXRxIHJlZ2V4cAoJCQkJICAoY29uY2F0CgkJCQkgICByZWdleHAKCQkJCSAgIChlbGlu Zm8tLW1ha2UtcmVnZXhwLTIgZnJvbSAobWF0Y2gtYmVnaW5uaW5nIDApKQoJCQkJICAgIlxc Km5vdGVbIFx0XG5dKiIKCQkJCSAgIChlbGluZm8tLW1ha2UtcmVnZXhwLTIgKHBvaW50KSAo bWF0Y2gtZW5kIDIpKSkpKSkKCQkgICAgIDs7IExlYXZlIG1haW4gbG9vcC4KCQkgICAgIChz ZXRxIGZyb20gdG8pCgkJICAgICAoZ290by1jaGFyIHRvKSkKCQkoc2V0cSByZWdleHAKCQkg ICAgICAoY29uY2F0CgkJICAgICAgIHJlZ2V4cCAoZWxpbmZvLS1tYWtlLXJlZ2V4cC0yIGZy b20gKG1hdGNoLWJlZ2lubmluZyAwKSkKCQkgICAgICAgIlxcKm5vdGVbIFx0XG5dKiIKCQkg ICAgICAgKGVsaW5mby0tbWFrZS1yZWdleHAtMiAobWF0Y2gtYmVnaW5uaW5nIDIpIChtYXRj aC1lbmQgMikpCgkJICAgICAgICI6OlsgXHRcbl0qIikpKSkKCSAgICgobWF0Y2gtYmVnaW5u aW5nIDMpCQkJOyBAc3Ryb25nIG9yIEBlbXBoCgkgICAgKHNldHEgcmVnZXhwCgkJICAoY29u Y2F0CgkJICAgcmVnZXhwIChlbGluZm8tLW1ha2UtcmVnZXhwLTIgZnJvbSAobWF0Y2gtYmVn aW5uaW5nIDApKQoJCSAgICJbKl9dIiAoZWxpbmZvLS1tYWtlLXJlZ2V4cC0yIChtYXRjaC1i ZWdpbm5pbmcgMykgKG1hdGNoLWVuZCAzKSkKCQkgICAiWypfXVsgXHRcbl0qIikpKQoJICAg KChtYXRjaC1iZWdpbm5pbmcgNCkJCQk7IFNvbWUgc29ydCBvZiBnbHlwaAoJICAgIChzZXRx IHJlZ2V4cAoJCSAgKGNvbmNhdAoJCSAgIHJlZ2V4cCAoZWxpbmZvLS1tYWtlLXJlZ2V4cC0y IGZyb20gKG1hdGNoLWJlZ2lubmluZyAwKSkKCQkgICAiXFwoPzpcXCg/OmVycm9yXFwpP1st LiE9PnwqXVstLiE9PnwqXStcXHxcXCg/OkxhXFwpP1RlWFxcfChbQ1JdKVxcfEV1cm9cXHwj XFwpWyBcdFxuXSoiKSkpCgkgICAoKG1hdGNoLWJlZ2lubmluZyA1KQkJCTsgQGRmbgoJICAg IChzZXRxIHJlZ2V4cAoJCSAgKGNvbmNhdAoJCSAgIHJlZ2V4cCAoZWxpbmZvLS1tYWtlLXJl Z2V4cC0yIGZyb20gKG1hdGNoLWJlZ2lubmluZyAwKSkKCQkgICAiXCIiIChlbGluZm8tLW1h a2UtcmVnZXhwLTIgKG1hdGNoLWJlZ2lubmluZyA1KSAobWF0Y2gtZW5kIDUpKQoJCSAgICJc IiIpKSkKCSAgICgobWF0Y2gtYmVnaW5uaW5nIDYpCQkJOyBALi4uewoJICAgIChzZXRxIHJl Z2V4cAoJCSAgKGNvbmNhdAoJCSAgIHJlZ2V4cCAoZWxpbmZvLS1tYWtlLXJlZ2V4cC0yIGZy b20gKG1hdGNoLWJlZ2lubmluZyAwKSkKCQkgICAi4oCYPyIpKSkKCSAgICgobWF0Y2gtYmVn aW5uaW5nIDcpCQkJOyB9CgkgICAgKHNldHEgcmVnZXhwCgkJICAoY29uY2F0CgkJICAgcmVn ZXhwIChlbGluZm8tLW1ha2UtcmVnZXhwLTIgZnJvbSAobWF0Y2gtYmVnaW5uaW5nIDApKQoJ CSAgICLigJk/IikpKQoJICAgKChtYXRjaC1iZWdpbm5pbmcgOCkJCQk7IHdoaXRlc3BhY2UK CSAgICAoc2V0cSByZWdleHAKCQkgIChjb25jYXQKCQkgICByZWdleHAgKGVsaW5mby0tbWFr ZS1yZWdleHAtMiBmcm9tIChtYXRjaC1iZWdpbm5pbmcgMCkpCgkJICAgIlsgXHRcbl0qIikp KQoJICAgKChtYXRjaC1iZWdpbm5pbmcgOSkJCTsgcXVvdGVzIGxpa2UgYGAuLi4nJwoJICAg IChzZXRxIHJlZ2V4cAoJCSAgKGNvbmNhdAoJCSAgIHJlZ2V4cCAoZWxpbmZvLS1tYWtlLXJl Z2V4cC0yIGZyb20gKG1hdGNoLWJlZ2lubmluZyAwKSkKCQkgICAiW+KAmOKAmVwiXSsiKSkp CgkgICApCQkJCSAgICAgOyBGdXR1cmUgYWRkaXRpb25zIGdvIGhlcmUuCgkgIChzZXRxIGZy b20gKHBvaW50KSkpCgkoc2V0cSByZWdleHAKCSAgICAgIChjb25jYXQgcmVnZXhwIChlbGlu Zm8tLW1ha2UtcmVnZXhwLTIgZnJvbSB0bykpKSkpCgogICAgKGluZm8tb3RoZXItd2luZG93 IGluZm8tbm9kZS0xKQogICAgKEluZm8tZ290by1ub2RlIGluZm8tbm9kZS0yKQogICAgKHdo ZW4gaW5mby1ub2RlLTMKICAgICAgKEluZm8tZ290by1ub2RlIGluZm8tbm9kZS0zKSkKCiAg ICAobGV0ICgoY2FzZS1mb2xkLXNlYXJjaCB0KSkKICAgICAgKHdoZW4gcmVnZXhwCgkod2l0 aC1jdXJyZW50LWJ1ZmZlciAoZ2V0LWJ1ZmZlci1jcmVhdGUgIip0ZXN0KiIpCgkgIChkZWxl dGUtcmVnaW9uIChwb2ludC1taW4pIChwb2ludC1tYXgpKQoJICAoaW5zZXJ0IHJlZ2V4cCkp CgkobGV0ICgoYXQgKHBvaW50KSkpCgkgIChjb25kCgkgICA7OyBXZSBjb3VsZCBhZGQgbmFt ZSBhZnRlciBGaWxlOiBiZWxvdy4KCSAgICgoYW5kIChyZS1zZWFyY2gtZm9yd2FyZCAoY29u Y2F0ICJcXCgiIHJlZ2V4cCAiXFwpXFx8XkZpbGU6ICIpIG5pbCB0KQoJCSAobWF0Y2gtYmVn aW5uaW5nIDEpKQoJICAgIChnb3RvLWNoYXIgKG1hdGNoLWJlZ2lubmluZyAxKSkKCSAgICAo c2F2ZS1yZXN0cmljdGlvbgoJICAgICAgKHdpZGVuKQoJICAgICAgKG5hcnJvdy10by1yZWdp b24gKG1hdGNoLWJlZ2lubmluZyAxKSAobWF0Y2gtZW5kIDEpKQoJICAgICAgKHdoZW4gKGFu ZCBhbmNob3IgKHJlLXNlYXJjaC1mb3J3YXJkIGFuY2hvciBuaWwgdCByZXBlYXQpKQoJCShn b3RvLWNoYXIgKCsgKG1hdGNoLWJlZ2lubmluZyAwKSBvZmZzZXQpKSkpKQoJICAgKHQKCSAg ICAoZ290by1jaGFyIGF0KSkpKSkpCgogICAgKHNldC13aW5kb3ctcG9pbnQgdGV4aS13aW5k b3cgd2luZG93LXBvaW50KQogICAgKGVsaW5mby13aW5kb3dzLXN5bmNoIHRleGktd2luZG93 IChnZXQtYnVmZmVyLXdpbmRvdyAiKmluZm8qIikpCiAgICAoc2VsZWN0LXdpbmRvdyB0ZXhp LXdpbmRvdykJCQk7IHJlbW92ZSB0aGlzIGV2dGx5CiAgICApKQoKOzsgVW5sZXNzIHBlb3Bs ZSBvYmplY3QgLi4uCihkZWZpbmUta2V5IEluZm8tbW9kZS1tYXAgIlxDLWNcQy1nIiAnZWxp bmZvLWdvdG8tdGV4aSkKKGRlZmluZS1rZXkgdGV4aW5mby1tb2RlLW1hcCAiXEMtY1xDLWci ICdlbGluZm8tZ290by1pbmZvKQooZGVmaW5lLWtleSB0ZXhpbmZvLW1vZGUtbWFwICJcTS1v IiAnZWxpbmZvLWdvdG8taW5mbykKCjs7IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCjs7Cjs7 OwkJICAgR3JhYmJpbmcgRG9jdW1lbnRhdGlvbiBEdHJpbmdzCjs7IF9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCjs7CgooZGVmdW4gZWxpbmZvLWdldC1kZWZpbml0aW9uICgpCiAgIkFkZCBk b2Mgc3RyaW5nIG9mIG9iamVjdCBhdCBgcG9pbnQnIHRvIGtpbGwgcmluZy4KVGhlIGRvYyBz dHJpbmcgaXMgc3VpdGFibGUgZm9yIGluc2VydGlvbiBpbnRvIEVsaXNwIFRleGluZm8KYnVm ZmVycy4iCiAgKGludGVyYWN0aXZlKQogIChzYXZlLWV4Y3Vyc2lvbgogICAgKGxldCAoKGF0 IChwb2ludCkpCgkgIGxpbWl0IGZyb20gdG8KCSAgdHlwZSBuYW1lIGFyZy1saXN0IGluaXQt dmFsdWUgZG9jIG9wZW4tcGFyZW4tYXQpCiAgICAgIChjb25kCiAgICAgICAoKGVxIG1ham9y LW1vZGUgJ2VtYWNzLWxpc3AtbW9kZSkKCShiZWdpbm5pbmctb2YtZGVmdW4pCgkod2hlbiAo bG9va2luZy1hdCAiKFxcKD86XFwoZGVmXFwoPzp1blxcfHN1YnN0XFwpXFwpXFx8XFwoZGVm dmFyXFwpXFx8XFwoZGVmY3VzdG9tXFwpXFx8XFwoZGVmbWFjcm9cXClcXClbIFx0XSsiKQoJ ICAoc2V0cSB0eXBlCgkJKGNvbmQKCQkgKChtYXRjaC1iZWdpbm5pbmcgMSkgJ2Z1bmN0aW9u KQoJCSAoKG1hdGNoLWJlZ2lubmluZyAyKSAndmFyaWFibGUpCgkJICgobWF0Y2gtYmVnaW5u aW5nIDMpICdvcHRpb24pCgkJICgobWF0Y2gtYmVnaW5uaW5nIDQpICdtYWNybykpKQoJICAo Z290by1jaGFyIChtYXRjaC1lbmQgMCkpCgkgIChzZXRxIG5hbWUgKGVsaW5mby0tZ2V0LW5l eHQpKQoJICAoY29uZAoJICAgKChtZW1xIHR5cGUgJyhmdW5jdGlvbiBjb21tYW5kIG1hY3Jv KSkKCSAgICAoc2tpcC1jaGFycy1mb3J3YXJkICIgXHRcbigiKQoJICAgICh3aGlsZSAobm90 IChsb29raW5nLWF0ICIpIikpCgkgICAgICAoc2V0cSBhcmctbGlzdAoJCSAgICAoY29ucyAo YnVmZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzCgkJCSAgIChwb2ludCkKCQkJICAgKHBy b2duCgkJCSAgICAgKHNraXAtY2hhcnMtZm9yd2FyZCAiXiBcdFxuKSIpCgkJCSAgICAgKHBv aW50KSkpCgkJCSAgYXJnLWxpc3QpKQoJICAgICAgKHNraXAtY2hhcnMtZm9yd2FyZCAiIFx0 XG4iKSkKCSAgICAoc2V0cSBhcmctbGlzdCAobnJldmVyc2UgYXJnLWxpc3QpKSkKCSAgICgo bWVtcSB0eXBlICcodmFyaWFibGUgb3B0aW9uKSkKCSAgICAoc2tpcC1jaGFycy1mb3J3YXJk ICIgXHRcbiIpCgkgICAgKHNldHEgaW5pdC12YWx1ZQoJCSAgKGJ1ZmZlci1zdWJzdHJpbmct bm8tcHJvcGVydGllcwoJCSAgIChwb2ludCkKCQkgICAocHJvZ24KCQkgICAgIChmb3J3YXJk LXNleHApCgkJICAgICAocG9pbnQpKSkpKSkKCSAgKHNraXAtY2hhcnMtZm9yd2FyZCAiIFx0 XG4pIikKCSAgOzsgV2UgbXVzdCBiZSBiZWZvcmUgdGhlIGRvYy1zdHJpbmcgbm93LgoJICAo c2V0cSBkb2MgKGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGllcwoJCSAgICAgKHByb2du CgkJICAgICAgIChza2lwLWNoYXJzLWZvcndhcmQgIiBcdFxuIikKCQkgICAgICAgKDErIChw b2ludCkpKQoJCSAgICAgKHByb2duCgkJICAgICAgIChmb3J3YXJkLXNleHApCgkJICAgICAg ICgxLSAocG9pbnQpKSkpKQoJICAod2hlbiAoZXEgdHlwZSAnZnVuY3Rpb24pCgkgICAgOzsg Q2hlY2sgZm9yIGludGVyYWN0aXZlIHByb3BlcnR5LgoJICAgIChmb3J3YXJkLWNvbW1lbnQg KGJ1ZmZlci1zaXplKSkKCSAgICAod2hlbiAobG9va2luZy1hdCAiKGludGVyYWN0aXZlIikK CSAgICAgIChzZXRxIHR5cGUgJ2NvbW1hbmQpKSkpKQogICAgICAgKChlcSBtYWpvci1tb2Rl ICdjLW1vZGUpCgkoYmVnaW5uaW5nLW9mLWRlZnVuKQoJKGNvbmQKCSAoKGxvb2tpbmctYXQg InZvaWRbIFx0XG5dKnN5bXNfb2YiKQoJICAoc2V0cSBsaW1pdCAocG9pbnQpKQoJICAoZ290 by1jaGFyIGF0KQoJICAod2hlbiAob3IgKHNhdmUtZXhjdXJzaW9uCgkJICAgICAgKGJlZ2lu bmluZy1vZi1saW5lKQoJCSAgICAgIChsb29raW5nLWF0CgkJICAgICAgICJbIFx0XSpERUZW QVJfXFwoPzpMSVNQXFx8Qk9PTFxcfElOVFxcfFBFUl9CVUZGRVJcXClbIFx0XSsoXCJcXChb XlwiIFx0XG5dK1xcKSIpKQoJCSAgICAocmUtc2VhcmNoLWJhY2t3YXJkCgkJICAgICAiREVG VkFSX1xcKD86TElTUFxcfEJPT0xcXHxJTlRcXHxQRVJfQlVGRkVSXFwpWyBcdF0rKFwiXFwo W15cIiBcdFxuXStcXCkiIGxpbWl0IHQpKQoJICAgIChzZXRxIHR5cGUgJ3ZhcmlhYmxlKQoJ ICAgIChzZXRxIG5hbWUgKG1hdGNoLXN0cmluZy1uby1wcm9wZXJ0aWVzIDEpKSkpCgkgOzsg VGhlIGZvbGxvd2luZyBtdXN0IGJlIGRlY2lkZWQuCgkgOzsgKHdoZW4gKGVxIHR5cGUgJ3Zh cmlhYmxlKSAoY3VzdG9tLXZhcmlhYmxlLXAgKGludGVybiBuYW1lKSkpCgkgOzsgKHNldHEg dHlwZSAnb3B0aW9uKSkKCSAoKGxvb2tpbmctYXQgIlxcKD86REVGVU5cXClbIFx0XSsoXCJc XChbXlwiIFx0XG5dK1xcKSIpCgkgIChzZXRxIHR5cGUgJ2Z1bmN0aW9uKQoJICAoc2V0cSBu YW1lIChtYXRjaC1zdHJpbmctbm8tcHJvcGVydGllcyAxKSkpKQoJKGNvbmQKCSAoKGVxIHR5 cGUgJ2Z1bmN0aW9uKQoJICAobGV0ICgoaW5kZXggMCkKCQlmcm9tIHRvIG1pbi1hcmdzKQoJ ICAgIChyZS1zZWFyY2gtZm9yd2FyZCAiLFsgXHRdKiIgbmlsIG5pbCAzKQoJICAgIDs7IE11 c3QgYmUgYmVmb3JlIE1JTiBub3cuCgkgICAgKHNldHEgbWluLWFyZ3MKCQkgIChzdHJpbmct dG8tbnVtYmVyCgkJICAgKGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGllcwoJCSAgICAo cG9pbnQpCgkJICAgIChwcm9nbiAoc2tpcC1jaGFycy1mb3J3YXJkICIwLTkiKSAocG9pbnQp KSkpKQoJICAgIChyZS1zZWFyY2gtZm9yd2FyZCAiLFsgXHRcbl0qIiBuaWwgdCAyKQoJICAg ICh1bmxlc3MgKGxvb2tpbmctYXQgIjAiKQoJICAgICAgOzsgQ29tbWFuZC4KCSAgICAgIChz ZXRxIHR5cGUgJ2NvbW1hbmQpKQoJICAgIChyZS1zZWFyY2gtZm9yd2FyZCAiXlsgXHRdKmRv YzpbIFxdKlxcKC9cXCpbIFx0XSpcXCkiIG5pbCB0KQoJICAgIChzZXRxIGZyb20gKG1hdGNo LWVuZCAwKSkKCSAgICAoZ290by1jaGFyIChtYXRjaC1iZWdpbm5pbmcgMSkpCgkgICAgKGZv cndhcmQtY29tbWVudCAxKQoJICAgIChzYXZlLWV4Y3Vyc2lvbgoJICAgICAgKHNraXAtY2hh cnMtYmFja3dhcmQgIiovIFx0IikKCSAgICAgIChzZXRxIHRvIChwb2ludCkpKQoJICAgIChz ZXRxIGRvYyAoYnVmZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzIGZyb20gdG8pKQoJICAg ICh1bmxlc3MgYXJnLWxpc3QKCSAgICAgIChza2lwLWNoYXJzLWZvcndhcmQgIikgXHRcbigi KQoJICAgICAgKHVubGVzcyAobG9va2luZy1hdCAidm9pZCIpCgkJKHdoaWxlIChub3QgKGxv b2tpbmctYXQgIlsgXHRcbl0qKSIpKQoJCSAgKHdoZW4gKGxvb2tpbmctYXQgIlxcKD86cmVn aXN0ZXJbIFx0XStMaXNwX09iamVjdFsgXHRdKlxcKVxcfFxcKD86TGlzcF9PYmplY3RbIFx0 XSpcXCkiKQoJCSAgICAoZ290by1jaGFyIChtYXRjaC1lbmQgMCkpKQoJCSAgKHNraXAtY2hh cnMtZm9yd2FyZCAiIFx0XG4sIikKCQkgIChjb25kCgkJICAgKCg8IGluZGV4IG1pbi1hcmdz KQoJCSAgICAoc2V0cSBpbmRleCAoMSsgaW5kZXgpKSkKCQkgICAoKD0gaW5kZXggbWluLWFy Z3MpCgkJICAgIChzZXRxIGFyZy1saXN0IChjb25zICImb3B0aW9uYWwiIGFyZy1saXN0KSkK CQkgICAgKHNldHEgaW5kZXggKDErIGluZGV4KSkpKQoJCSAgKHdoZW4gKGxvb2tpbmctYXQg Ikxpc3BfT2JqZWN0WyBcdF0qIikKCQkgICAgKGdvdG8tY2hhciAobWF0Y2gtZW5kIDApKSkK CQkgIChzZXRxIGFyZy1saXN0CgkJCShjb25zIChidWZmZXItc3Vic3RyaW5nLW5vLXByb3Bl cnRpZXMKCQkJICAgICAgIChwb2ludCkKCQkJICAgICAgIChwcm9nbgoJCQkJIChza2lwLWNo YXJzLWZvcndhcmQgIl4sIFx0XG4pIikKCQkJCSAocG9pbnQpKSkKCQkJICAgICAgYXJnLWxp c3QpKSkKCQkoc2V0cSBhcmctbGlzdCAobnJldmVyc2UgYXJnLWxpc3QpKSkpKSkKCSAoKGVx IHR5cGUgJ3ZhcmlhYmxlKQoJICAocmUtc2VhcmNoLWZvcndhcmQgIl5bIFx0XSpkb2M6WyBc XSpcXCgvXFwqWyBcdF0qXFwpIiBuaWwgdCkKCSAgKHNldHEgZnJvbSAobWF0Y2gtZW5kIDAp KQoJICAoZ290by1jaGFyIChtYXRjaC1iZWdpbm5pbmcgMSkpCgkgIChmb3J3YXJkLWNvbW1l bnQgMSkKCSAgKHNhdmUtZXhjdXJzaW9uCgkgICAgKHNraXAtY2hhcnMtYmFja3dhcmQgIiov IFx0IikKCSAgICAoc2V0cSB0byAocG9pbnQpKSkKCSAgOzsgUmVtb3ZlIGxlYWRpbmcgYXN0 ZXJpc2suCgkgIChnb3RvLWNoYXIgZnJvbSkKCSAgKHdoZW4gKGxvb2tpbmctYXQgIlxcKiIp CgkgICAgKHNldHEgZnJvbSAoMSsgZnJvbSkpKQoJICAoc2V0cSBkb2MgKGJ1ZmZlci1zdWJz dHJpbmctbm8tcHJvcGVydGllcyBmcm9tIHRvKSkpKSkpCgogICAgICAod2hlbiBkb2MKCSh3 aXRoLWN1cnJlbnQtYnVmZmVyIChnZXQtYnVmZmVyLWNyZWF0ZSAiKkVsaW5mby1UZW1wKiIp CgkgIChkZWxldGUtcmVnaW9uIChwb2ludC1taW4pIChwb2ludC1tYXgpKQoJICAoaW5zZXJ0 IGRvYykKCSAgOzsgSGFuZGxlIHVzYWdlIGluZm9ybWF0aW9uLgoJICAod2hlbiAobWVtcSB0 eXBlICcoZnVuY3Rpb24gY29tbWFuZCkpCgkgICAgKHdoZW4gKHJlLXNlYXJjaC1iYWNrd2Fy ZCAiXnVzYWdlOlsgXHRdKigiIGZyb20gdCkKCSAgICAgIChzZXRxIGZyb20gKHBvaW50KSkK CSAgICAgIChnb3RvLWNoYXIgKG1hdGNoLWVuZCAwKSkKCSAgICAgIChzYXZlLWV4Y3Vyc2lv bgoJCShnb3RvLWNoYXIgKG1hdGNoLWJlZ2lubmluZyAwKSkKCQkoc2tpcC1jaGFycy1iYWNr d2FyZCAiIFx0XG4iKQoJCShzZXRxIHRvIChwb2ludCkpKQoJICAgICAgKHNraXAtY2hhcnMt Zm9yd2FyZCAiXiBcdFxuIikKCSAgICAgIChza2lwLWNoYXJzLWZvcndhcmQgIiBcdFxuIikK CSAgICAgIChzZXRxIGFyZy1saXN0IG5pbCkKCSAgICAgICh3aGlsZSAobm90IChvciAobG9v a2luZy1hdCAiKSIpIChlb2JwKSkpCgkJKHNldHEgYXJnLWxpc3QKCQkgICAgICAoY29ucwoJ CSAgICAgICAoZG93bmNhc2UKCQkJKGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGllcwoJ CQkgKHBvaW50KQoJCQkgKHByb2duCgkJCSAgIChza2lwLWNoYXJzLWZvcndhcmQgIl4gXHRc bikiKQoJCQkgICAocG9pbnQpKSkpCgkJICAgICAgIGFyZy1saXN0KSkKCQkoc2tpcC1jaGFy cy1mb3J3YXJkICIgXHRcbiIpKQoJICAgICAgKHNldHEgYXJnLWxpc3QgKG5yZXZlcnNlIGFy Zy1saXN0KSkKCSAgICAgIChkZWxldGUtcmVnaW9uIChwb2ludCkgKHBvaW50LW1heCkpKSkK CgkgICh3aGVuIGFyZy1saXN0CgkgICAgOzsgSGFuZGxlIGFyZ3Mgd2l0aGluIGRvYy4gIFRo aXMgY2FzZSBjb3VsZCBiZSBtZXJnZWQgd2l0aAoJICAgIDs7IHRoZSByZW1haW5pbmcgb25l cyBidXQgaGFyZGx5IHNlZW1zIHdvcnRoIHRoZSBlZmZvcnQuCgkgICAgKGdvdG8tY2hhciAo cG9pbnQtbWluKSkKCSAgICAobGV0ICgocmVnZXhwIChtYXBjb25jYXQKCQkJICAgJ3JlZ2V4 cC1xdW90ZQoJCQkgICAobWFwY2FyICd1cGNhc2UgYXJnLWxpc3QpICJcXHwiKSkKCQkgICh0 byAobWFrZS1tYXJrZXIpKQoJCSAgY2FzZS1mb2xkLXNlYXJjaCkKCSAgICAgICh3aGlsZSAo cmUtc2VhcmNoLWZvcndhcmQgcmVnZXhwIG5pbCB0KQoJCShsZXQgKChzdHJpbmcgKGRvd25j YXNlIChtYXRjaC1zdHJpbmctbm8tcHJvcGVydGllcyAwKSkpCgkJICAgICAgKGZyb20gKG1h dGNoLWJlZ2lubmluZyAwKSkpCgkJICAoc2V0LW1hcmtlciB0byAobWF0Y2gtZW5kIDApKQoJ CSAgKGNhdGNoICdmb3VuZAoJCSAgICAoZG9saXN0IChhcmcgYXJnLWxpc3QpCgkJICAgICAg OzsgV2UgYXNzdW1lIHRoYXQgYWxsIGFyZ3MgYXJlIGRvd25jYXNlLgoJCSAgICAgICh3aGVu IChzdHJpbmctZXF1YWwgc3RyaW5nIGFyZykKCQkJKHJlcGxhY2UtbWF0Y2ggKGNvbmNhdCAi QHZhcnsiIHN0cmluZyAifSIpIHQpCgkJCSh0aHJvdyAnZm91bmQgdCkpKSkpKQoJICAgICAg KHNldC1tYXJrZXIgdG8gbmlsKSkpCgoJICA7OyBMb29rIGZvciBxdW90ZXMsIGRvdWJsZS1x dW90ZXMsIG5pbCBhbmQgb3RoZXIgZnVubnkgdGhpbmdzLgoJICAoZ290by1jaGFyIChwb2lu dC1taW4pKQoJICAobGV0IChxdW90ZWQpCgkgICAgKHdoaWxlIChyZS1zZWFyY2gtZm9yd2Fy ZCAiXFwoYFxcKVxcKD86W14gXHRcbiddK1xcKVxcKCdcXClcClxcfFxcKD86XlxcfFsgXHRc bigqYF1cXClcXChcXCg/OltObl1vbi1cXCk/XFwobmlsXFwpXFx8dFxcfFxcKFxcKD86W0NN XS1cXCkrXFwoPzpbYS16QS1aXStcXHxbXiBhLXpBLVpcdFxuXStcXClcXClcClxcfFxcKFNQ Q1xcfFJFVFxcfExGRFxcfFRBQlxcfEJTXFx8RVNDXFx8REVMXFx8U0hJRlRcXHxDVFJMXFx8 TUVUQVxcfEZbMC05XStcXClcXClcXCg/OiRcXHxbIFx0XG4sLjs6PyEnKV1cXClcClxcfFxc KFxcXFw/XCJcXClcXHxcXCg/OlxcKFxcXFxcXFxcW1t7XVxcKVteXX1dK1xcKFtdfV1cXClc XHxcXCg8W14+XSs+XFwpXFwpXApcXHxcXFxcXFwoWyhbe11cXClcXHxcXChcXFxcJFxcKSIg bmlsIHQpCgkgICAgICAoY29uZAoJICAgICAgICgobWF0Y2gtYmVnaW5uaW5nIDEpCgkJOzsg YC4uLicKCQkocmVwbGFjZS1tYXRjaCAiQGNvZGV7IiBuaWwgbmlsIG5pbCAxKQoJCShyZXBs YWNlLW1hdGNoICJ9IiBuaWwgbmlsIG5pbCAyKSkKCSAgICAgICAoKG1hdGNoLWJlZ2lubmlu ZyAzKQoJCTs7IGBuaWwnLCBgbm9uLW5pbCcgYW5kIGB0Jy4KCQkoY29uZAoJCSAoKG1hdGNo LWJlZ2lubmluZyA0KQoJCSAgKHJlcGxhY2UtbWF0Y2ggKGNvbmNhdCAiQGNvZGV7bmlsfSIp IHQgbmlsIG5pbCA0KSkKCQkgKChtYXRjaC1iZWdpbm5pbmcgNSkKCQkgIChyZXBsYWNlLW1h dGNoIChjb25jYXQgIkBrYmR7IiAobWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMgNSkgIn0i KQoJCQkJIHQgbmlsIG5pbCA1KSkKCQkgKChtYXRjaC1iZWdpbm5pbmcgNikKCQkgIChyZXBs YWNlLW1hdGNoIChjb25jYXQgIkBrZXl7IiAobWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMg NikgIn0iKQoJCQkJIHQgbmlsIG5pbCA2KSkKCQkgKHQKCQkgIChyZXBsYWNlLW1hdGNoIChj b25jYXQgIkBjb2RleyIgKG1hdGNoLXN0cmluZy1uby1wcm9wZXJ0aWVzIDMpICJ9IikKCQkJ CSB0IG5pbCBuaWwgMykpKSkKCSAgICAgICAoKG1hdGNoLWJlZ2lubmluZyA3KQoJCTs7IFwi CgkJKHJlcGxhY2UtbWF0Y2ggKGlmIHF1b3RlZCAiJyciICJgYCIpKQoJCShzZXRxIHF1b3Rl ZCAobm90IHF1b3RlZCApKSkKCSAgICAgICAoKG1hdGNoLWJlZ2lubmluZyA4KQoJCTs7IFxc Wy4uLl0sIFxcey4uLn0KCQkocmVwbGFjZS1tYXRjaCAiQGNvZGV7IiBuaWwgdCBuaWwgOCkK CQkocmVwbGFjZS1tYXRjaCAifSIgbmlsIHQgbmlsIDkpKQoJICAgICAgICgobWF0Y2gtYmVn aW5uaW5nIDEwKQoJCTs7IFxcPC4uLj4KCQkocmVwbGFjZS1tYXRjaCAiIikpCgkgICAgICAg KChtYXRjaC1iZWdpbm5pbmcgMTEpCgkJOzsgQW4gZXNjYXBlZCBwYXJlbiAodGhpcyBtdXN0 IGZvbGxvdyBjYXNlIDIpLgoJCShyZXBsYWNlLW1hdGNoIChtYXRjaC1zdHJpbmctbm8tcHJv cGVydGllcyAxMSkpKQoJICAgICAgICgobWF0Y2gtYmVnaW5uaW5nIDEyKQoJCTs7IEEgYmFj a3NsYXNoIGF0IEVPTC4KCQkocmVwbGFjZS1tYXRjaCAiIikpCgkgICAgICAgKSkpCgkgIDs7 IEZpbGwuCgkgIChsZXQgKChmaWxsLWNvbHVtbiA3MCkpCgkgICAgKGZpbGwtcmVnaW9uIChw b2ludC1taW4pIChwb2ludC1tYXgpKSkKCSAgOzsgSGFuZGxlIGtleS1iaW5kaW5ncywgbWFu dWFsIHJlZmVyZW5jZXMgYW5kIFVSTHMsIG1heWJlLgoJICAoc2V0cSBkb2MgKGJ1ZmZlci1z dWJzdHJpbmctbm8tcHJvcGVydGllcyAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkpKSkKCiAg ICAgIChsZXQgKGF0LXN0cmluZyBhcmctbGlzdC1zdHJpbmcpCgkoY29uZAoJICgoZXEgdHlw ZSAnY29tbWFuZCkKCSAgKHNldHEgYXQtc3RyaW5nIChjb25zICJAZGVmZm4gQ29tbWFuZCIg IkBlbmQgZGVmZm4iKSkpCgkgKChlcSB0eXBlICdmdW5jdGlvbikKCSAgKHNldHEgYXQtc3Ry aW5nIChjb25zICJAZGVmdW4iICJAZW5kIGRlZnVuIikpKQoJICgoZXEgdHlwZSAndmFyaWFi bGUpCgkgIChzZXRxIGF0LXN0cmluZyAoY29ucyAiQGRlZnZhciIgIkBlbmQgZGVmdmFyIikp KQoJICgoZXEgdHlwZSAnb3B0aW9uKQoJICAoc2V0cSBhdC1zdHJpbmcgKGNvbnMgIkBkZWZv cHQiICJAZW5kIGRlZm9wdCIpKSkKCSAoKGVxIHR5cGUgJ21hY3JvKQoJICAoc2V0cSBhdC1z dHJpbmcgKGNvbnMgIkBkZWZtYWMiICJAZW5kIGRlZm1hYyIpKSkpCgoJKGRvbGlzdCAoYXJn IGFyZy1saXN0KQoJICAoc2V0cSBhcmctbGlzdC1zdHJpbmcgKGNvbmNhdCBhcmctbGlzdC1z dHJpbmcgIiAiIGFyZykpKQoKCTs7IEhhcmRseSBhbnlvbmUgd2FudHMgdG8gc2VlIHRoaXMg c28gUkVNT1ZFIGl0LgoJKHdpdGgtc2VsZWN0ZWQtd2luZG93IChkaXNwbGF5LWJ1ZmZlciAo Z2V0LWJ1ZmZlci1jcmVhdGUgIipFbGluZm8tc2hvdyIpKQoJICAoZGVsZXRlLXJlZ2lvbiAo cG9pbnQtbWluKSAocG9pbnQtbWF4KSkKCSAgKGluc2VydCAoY29uY2F0IChjYXIgYXQtc3Ry aW5nKSAiICIgbmFtZSBhcmctbGlzdC1zdHJpbmcgIlxuIgoJCQkgIGRvYyAiXG4iIChjZHIg YXQtc3RyaW5nKSAiXG5cbiIpKSkKCgkoa2lsbC1uZXcgKGNvbmNhdCAoY2FyIGF0LXN0cmlu ZykgIiAiIG5hbWUgYXJnLWxpc3Qtc3RyaW5nICJcbiIKCQkJICBkb2MgIlxuIiAoY2RyIGF0 LXN0cmluZykgIlxuXG4iKSkpKSkpCgo7OyBUT0RPOiBkZWZpbmUtbW9kZSBhbmQgZGVmaW5l LWRlcml2ZWQtbW9kZSBhcmUgbm90IGhhbmRsZWQuCgo7OyBUT0RPOiBTcGVjaWFsIGZvcm1z IGFyZSB3cml0dGVuIGluIEMgYW5kIGhhdmUgVU5FVkFMTEVEIHNldC4KCihwcm92aWRlICdl bGluZm8pCgo7OyBCZWxvdyB0aGlzIGxpbmUgYXJlIG1vbnN0ZXJzLgoKOzsgVXNlZCBmb3Ig dGVzdGluZyBvbmx5LCBzbyBSRU1PVkUgaXQuCihkZWZ1biBlbGluZm8tdGVzdCAoKQogIChp bnRlcmFjdGl2ZSkKICAod2l0aC1jdXJyZW50LWJ1ZmZlciAoZ2V0LWJ1ZmZlci1jcmVhdGUg IiplbGluZm8tdGVzdCoiKQogICAgKGRlbGV0ZS1yZWdpb24gKHBvaW50LW1pbikgKHBvaW50 LW1heCkpKQogIChsZXQgKChvbGQtcG9pbnQgKHBvaW50KSkKCW5ldy1wb2ludCBub2RlIHNw bGl0LWhlaWdodC10aHJlc2hvbGQgc3BsaXQtd2lkdGgtdGhyZXNob2xkKQogICAgKHdoaWxl IHQKICAgICAgKEluZm8tZm9yd2FyZC1ub2RlIG5pbCBuaWwgdCkKICAgICAgKGZvcndhcmQt bGluZSAocmFuZG9tIDQzKSkKICAgICAgKHNldHEgb2xkLXBvaW50IChwb2ludCkpCiAgICAg IChzZXRxIG5vZGUgSW5mby1jdXJyZW50LW5vZGUpCiAgICAgIChlbGluZm8tZ290by10ZXhp KQogICAgICAod2l0aC1zZWxlY3RlZC13aW5kb3cgZWxpbmZvLXRlc3QtdGV4aS13aW5kb3cK CShlbGluZm8tZ290by1pbmZvKQoJKHNpdC1mb3IgMC4xKSkKICAgICAgKHNldHEgbmV3LXBv aW50IChwb2ludCkpCiAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIChnZXQtYnVmZmVyLWNy ZWF0ZSAiKmVsaW5mby10ZXN0KiIpCgkoZ290by1jaGFyIChwb2ludC1tYXgpKQoJKGluc2Vy dAoJIChmb3JtYXQgIm5vZGU6ICVzICAgb2xkOiAlcyAgIG5ldzogJXMgICBkaWZmOiAlcyBc biIKCQkgbm9kZSBvbGQtcG9pbnQgbmV3LXBvaW50ICgtIG9sZC1wb2ludCBuZXctcG9pbnQp KSkpCiAgICAgIChnb3RvLWNoYXIgb2xkLXBvaW50KSkpKQo= --------------Kfhqe8JD14mDWxvKDrDeWHz4-- ------------=_1693847582-402-1-- From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: Stefan Monnier Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 04 Sep 2023 17:13:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: rudalics@gmx.at, 65726-done@debbugs.gnu.org Received: via spool by 65726-done@debbugs.gnu.org id=D65726.1693847582423 (code D ref 65726); Mon, 04 Sep 2023 17:13:02 +0000 Received: (at 65726-done) by debbugs.gnu.org; 4 Sep 2023 17:13:02 +0000 Received: from localhost ([127.0.0.1]:52476 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qdD8I-00006W-4E for submit@debbugs.gnu.org; Mon, 04 Sep 2023 13:13:02 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:4214) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qdD8D-000068-Lf for 65726-done@debbugs.gnu.org; Mon, 04 Sep 2023 13:13:01 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 38008444442; Mon, 4 Sep 2023 13:12:52 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1693847566; bh=ujRQWnSpGaddzFkuNMdkiGB/9U46QsyS707EbUKyFY4=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=BeGKXpMRs8oWy6yBtvBA3kxn52UoWWKzisN6hnXyeccUn4X6yhCafgQC5gK0J/y8s xwMNHi3aZt7BEdlemeTqPU26Q7oekWfpGiFZ5AKTN2U1Yc0+mqNrK+B3M9jmVQlxu0 tJFxuThxqE2Z3m85WeVTKseWcZthBsvCXnxgNGqdVqbhCfOv/pqjs1Wsyy0p890dHz JJUv+cD6IWI/aJ59yG5wUJzbm7GAH2pJtV63iw53pZS2R+N2oqD0rlDz5BgbG+83gg HzKkY1ykfjGqhCuNmaOOCfbcR/V65y2fvO6Kq+k6m7ZZ26UkOmoW/XXEvdXWtJHNfI k28H4QnN9XPtA== Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 9E1D7444449; Mon, 4 Sep 2023 13:12:46 -0400 (EDT) Received: from pastel (69-165-136-223.dsl.teksavvy.com [69.165.136.223]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 77F13120208; Mon, 4 Sep 2023 13:12:46 -0400 (EDT) From: Stefan Monnier In-Reply-To: <831qfe53t6.fsf@gnu.org> (Eli Zaretskii's message of "Mon, 04 Sep 2023 18:57:41 +0300") Message-ID: References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> <831qfe53t6.fsf@gnu.org> User-Agent: Gnus/5.13 (Gnus v5.13) Date: Mon, 04 Sep 2023 13:12:45 -0400 MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.144 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Yes, with this patch the problem is gone. Thanks, pushed to `emacs-29`. Stefan From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: martin rudalics Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 05 Sep 2023 07:15:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Stefan Monnier Cc: 65726@debbugs.gnu.org Received: via spool by 65726-submit@debbugs.gnu.org id=B65726.16938980867534 (code B ref 65726); Tue, 05 Sep 2023 07:15:01 +0000 Received: (at 65726) by debbugs.gnu.org; 5 Sep 2023 07:14:46 +0000 Received: from localhost ([127.0.0.1]:53276 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qdQGs-0001xR-AJ for submit@debbugs.gnu.org; Tue, 05 Sep 2023 03:14:46 -0400 Received: from mout.gmx.net ([212.227.17.20]:57927) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qdQGm-0001x2-IH for 65726@debbugs.gnu.org; Tue, 05 Sep 2023 03:14:44 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.at; s=s31663417; t=1693898070; x=1694502870; i=rudalics@gmx.at; bh=bbpb+um2zOMoPxOGtRqsnwelToguw7yRQ6xeIkY5eHE=; h=X-UI-Sender-Class:Date:Subject:To:Cc:References:From:In-Reply-To; b=XkxCQBWy1ciAs7YMgUOcA4gkhOzq4tNlXvSC35tFSSzi0N+x2bIRSVI8I+FyatkVsO1jppw IgPMGCWa5Reslu++UEKbHKH/aqcU1abe5491TUMlpz2WkvDXeNFaRd+vBQZJqqD905dObXVNi WwmEmfNzTrGG3WidOdGU6I67GsMeJtsCJhwoqaBqtbdb9xkT2RgMuWl9lDtDDIZvGd+kCgnmY mHEVrX2fMBXcuTs5QgDR5zOT/6zI9pOkt/uHovouUjmTBk+PEhmC4Mevy37u1mExwdjQHAhbn /CgFGKzblT3HKQnLDKI+wiyURtuZBC9NYGaWJTLVc/icOSzPXtcA== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from [192.168.1.100] ([213.142.96.143]) by mail.gmx.net (mrgmx105 [212.227.17.168]) with ESMTPSA (Nemesis) id 1M1ps8-1qfdC22DvM-002Kji; Tue, 05 Sep 2023 09:14:30 +0200 Message-ID: Date: Tue, 5 Sep 2023 09:14:23 +0200 MIME-Version: 1.0 Content-Language: en-US References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> From: martin rudalics In-Reply-To: Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Provags-ID: V03:K1:PV8k8YOdMiBZ82+MblMGrSZf03+xHrVq7Y6q5brvZsopI8gkwHT o4bE8KCktzYGqW65bGQBQhOpZlIcNBG2JHq8HK9fY0b/sKb0AChymC6YKt8FQt55/FKj4ax LPQoLmQmzzDvFM2WBzmjjLnDlviW5yFdOL26Q9n6pV0lhLf07V8oFI46yNmy4EQbQ4cChL8 xo0XA5DwW37AwNB6sEJMQ== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:+VK7F0FGdJ0=;bsS6cGEjVoI5VZr/9IcFO5ad3xW 3eASBcftyC9FJn71ivonMdyF+EbVSEDeYg5afYMVS6MOkE0s4ZgLAcbjwvKoAjFTA4Go18xyl rQbTkQwicV+EcaWxqfYDJBZeFpDbDxnLuOA5g/+Snl0dHiJuxlAGYd6kq6KxgUyHrTzIW6Oy6 d8Urux011fcqrWPiRkCp3kyTynQR6US0CxOzLjsVD8mnLNMUqx89xZgZJd/Sdl3t2fVOgi0nr zq3t9zB7raMDgnmUBiDYh/H/rThmXOpF67kTOILe6vbgmoavc3md87r5d4+iZ7xj14ZpZ89P5 mo8FDohOBwyh4sU4wZyl0Ch3RlI7qAmHta5SzL1NmRzObprLvk53quL9/OrkZR5gSjnaZPbr0 D8DQP/2ycCy4y/RUhPSlsaAiWxse/BOpGg2lefRs+CnDFR8etc3Smx6paoLRF248zPAxC8W6B N8K1ho3nQVex+G730B83EHaoEOkFyDn8GGNzm+Lk7ogrmgfRNDHLM8OC6FP/SwUQYSVKHl7xl qiIbQ6CSZJpPNhL+Mzc5lYLITTQIfJb07wB5bBTpukEvitlYwO/b5pO6vVzClG/rbOSvYLToy O4zn308z3M6YUpphsXhM436H07pi2xoRqjTzycQ09LH0mZXQXh8OoBSnByYEAjUSbaULVfdkG qI12mOy/qbyaMrXrn7VjY3Dqa87QgShhDYeS+3WH8rseoP7ZZLCyjQeWEDAZOCjWbZRVGQ6Br 8ibbz+8GKpInj8E4yBhSXNZgicb7h//uNrpnnMcZAqeHHJWMMDaVg1RSyLp/vHeL8lTKcGjjo x/phvmxWS5Y9+2RFRxUtzl5Gu+ufL51kSBI2p/B8fQyKwE2WeKHuNUvMj1ZoViTxr1ZIyvpmZ Dv/jGjuHc3AGLba5eOnF1npoqbqQ+3l4+agK07VFNNqFrCAgkvEly3bXcRCi+TV2ZwsW9+nuo k2dJrMMXeqFTt9j6qyw98K3gf0Y= X-Spam-Score: 2.9 (++) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: > So, the patch below should hopefully fix your problem. It fixes the problem. Thanks, martin Content analysis details: (2.9 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 3.6 RCVD_IN_SBL_CSS RBL: Received via a relay in Spamhaus SBL-CSS [213.142.96.143 listed in zen.spamhaus.org] -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at https://www.dnswl.org/, low trust [212.227.17.20 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (rudalics[at]gmx.at) 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 RCVD_IN_MSPIKE_H4 RBL: Very Good reputation (+4) [212.227.17.20 listed in wl.mailspike.net] 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: 1.9 (+) X-Spam-Report: Spam detection software, running on the system "debbugs.gnu.org", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: > So, the patch below should hopefully fix your problem. It fixes the problem. Thanks, martin Content analysis details: (1.9 points, 10.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 0.0 RCVD_IN_MSPIKE_H4 RBL: Very Good reputation (+4) [212.227.17.20 listed in wl.mailspike.net] 3.6 RCVD_IN_SBL_CSS RBL: Received via a relay in Spamhaus SBL-CSS [213.142.96.143 listed in zen.spamhaus.org] -0.7 RCVD_IN_DNSWL_LOW RBL: Sender listed at https://www.dnswl.org/, low trust [212.227.17.20 listed in list.dnswl.org] -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider (rudalics[at]gmx.at) 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders -1.0 MAILING_LIST_MULTI Multiple indicators imply a widely-seen list manager > So, the patch below should hopefully fix your problem. It fixes the problem. Thanks, martin From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 05 Sep 2023 12:24:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Stefan Monnier Cc: martin rudalics , Eli Zaretskii , 65726@debbugs.gnu.org Received: via spool by 65726-submit@debbugs.gnu.org id=B65726.169391661028507 (code B ref 65726); Tue, 05 Sep 2023 12:24:01 +0000 Received: (at 65726) by debbugs.gnu.org; 5 Sep 2023 12:23:30 +0000 Received: from localhost ([127.0.0.1]:54793 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qdV5e-0007Pi-6u for submit@debbugs.gnu.org; Tue, 05 Sep 2023 08:23:30 -0400 Received: from mail-lj1-x22e.google.com ([2a00:1450:4864:20::22e]:61551) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qdV5b-0007PU-Uj for 65726@debbugs.gnu.org; Tue, 05 Sep 2023 08:23:28 -0400 Received: by mail-lj1-x22e.google.com with SMTP id 38308e7fff4ca-2b9c907bc68so37136161fa.2 for <65726@debbugs.gnu.org>; Tue, 05 Sep 2023 05:23:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1693916601; x=1694521401; darn=debbugs.gnu.org; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:sender:from:to:cc:subject :date:message-id:reply-to; bh=WCE0OWSqr8wi8+AQRISIhw7QlJJNlTcMd/5aa2SToK4=; b=MABFQllAlL37ZgLB/qLJNUpAX4jItC+k7WG8TAFw8SC0RjNDAu7VvkHVzoVETpTnrP lZTx6VA4Qymc88/pcTAzfyGQSsib7KWFnfEhXsfGC53j39/t/9V9ktPzQVzp75QwAUnL IShX6XWLGlDZGijLvjEhUs2/6MGKOg5fN876McxwRvw3Z5MRx3PTHOoZRW+JHyG6UTcP up2TmEjk4JdmyfBkIGRlSXBc4hT3qgez55VvIDRKZBIz0KMTD/Uew1nS9mtIIKoQO/cY g9HD3AHPMYARxg8NUJEuOSr7+H1tQZREEMY0xXIe6nlWy1h4OwKl8GkR3Z+r3P8RXnbI hqOQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693916601; x=1694521401; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:sender:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=WCE0OWSqr8wi8+AQRISIhw7QlJJNlTcMd/5aa2SToK4=; b=CK7BDxcJx/dpnc/eQ1fzazrjv4IwcwaMyr/1TRji+FADDs/TAIBdm5uoUUttFeGvZe PwW5+tY765IAY8i4fcV4jiWXId75YXnTar5tHVvjcK59SKUgnkRlwpwz8/ZkO7vPnUis 8ODqtDICVNiJeOeKs/vf3kTuEq1FmGk3XQ1pBFYKK2yeaD1HGOSTRIOteLji5cLaKBpb 2YwxZ9Q/uz7q1OWUKKK9h6QoCeybDKOEJDmQL4LtO1rrHXeF2FHyx8hOpNyZ1U7qWPBx G/2MgQDsBzl9WNG6ejLtk4c8CWX6q6/eZ5zhSxJBPXCfzrD3JDtg6BmwHJ8XktL+ViBk i2aA== X-Gm-Message-State: AOJu0YwLnJbRyAusTKP+1brMnRXQLt0sqXLxCrT453zJ2xBbjwOI8Blz X7428MKsDViklDjCDzcdzEQ= X-Google-Smtp-Source: AGHT+IEqr87UsDdBnZFfAPcx3aFl1i7aioXFlafM9R3VJykshw0hpVmW8LAw3aNlplDQ8Av10psynA== X-Received: by 2002:a2e:9691:0:b0:2bc:d33e:ccc5 with SMTP id q17-20020a2e9691000000b002bcd33eccc5mr10106765lji.41.1693916601077; Tue, 05 Sep 2023 05:23:21 -0700 (PDT) Received: from smtpclient.apple (c188-150-165-235.bredband.tele2.se. [188.150.165.235]) by smtp.gmail.com with ESMTPSA id a26-20020a2e861a000000b002b9f0fb5f20sm2912326lji.72.2023.09.05.05.23.20 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Sep 2023 05:23:20 -0700 (PDT) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.120.0.1.15\)) From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= In-Reply-To: <776370AB-662F-4C0A-95BF-97DEA4F18F54@gmail.com> Date: Tue, 5 Sep 2023 14:23:19 +0200 Content-Transfer-Encoding: quoted-printable Message-Id: <3A0AC9E2-A420-47B6-870A-69C53FCAEF71@gmail.com> References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> <83fs3u5e7u.fsf@gnu.org> <835y4q5apw.fsf@gnu.org> <776370AB-662F-4C0A-95BF-97DEA4F18F54@gmail.com> X-Mailer: Apple Mail (2.3654.120.0.1.15) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Thank you for fixing it, but now regex-emacs-tests fail with a regexp = stack overflow. It seems that by fixing this bug, we've unfixed the one = that the broken code was supposed to fix. And we should probably include a regression test for this bug as well. = The previously mentioned (string-match (rx (* "a") (* (* "b"))) "a") might suffice, but extending it to (string-match (rx (* "a") (* (or "c" (* "b")))) "a") is safer in case the regexp compiler decides to simplify (* (* X)) -> (* = X). From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: Stefan Monnier Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 05 Sep 2023 13:09:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Cc: martin rudalics , Eli Zaretskii , 65726@debbugs.gnu.org Received: via spool by 65726-submit@debbugs.gnu.org id=B65726.169391929610938 (code B ref 65726); Tue, 05 Sep 2023 13:09:01 +0000 Received: (at 65726) by debbugs.gnu.org; 5 Sep 2023 13:08:16 +0000 Received: from localhost ([127.0.0.1]:55000 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qdVmy-0002qM-HX for submit@debbugs.gnu.org; Tue, 05 Sep 2023 09:08:16 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:12255) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qdVms-0002q3-QW for 65726@debbugs.gnu.org; Tue, 05 Sep 2023 09:08:14 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 94E7A4445C6; Tue, 5 Sep 2023 09:08:04 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1693919283; bh=89jVhNU6wKIDwCXqghIo113o2o7otddmPwhOkxmQPpQ=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=M7bYZfYQvjMFGIX9Szh2Vv5Agwba56aaxPvuWayFWnVpvv7MqWMrjhScTyqvfAxm8 +BYB96a4tD+vRlH9AgJU4J+djs6X6p2wgZBqujxbMYtQ15GMAXzqoxTr1oifI4BkF6 6KZ/t0k+s2FscdSuWteIoJ8cs77qVf0IJR4txufKYqq+IMcNjmOxpHX+4OOgn4vbyl z3mic/P63uotYE19O4G92nmPRLKatgJfapfTZIehzXG+jyrmajAmnnV2Ly8rKSWMen UqA6l1UGU+Ye9UNjpJpJMurkUm5OYRUyN19DfomxGbsRtDkIYo1SV9kX0UzFU8VanX szqlPdRxFWtlQ== Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 2A60A4445CC; Tue, 5 Sep 2023 09:08:03 -0400 (EDT) Received: from pastel (69-165-136-223.dsl.teksavvy.com [69.165.136.223]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id F28341200D7; Tue, 5 Sep 2023 09:08:02 -0400 (EDT) From: Stefan Monnier In-Reply-To: <3A0AC9E2-A420-47B6-870A-69C53FCAEF71@gmail.com> ("Mattias =?UTF-8?Q?Engdeg=C3=A5rd?="'s message of "Tue, 5 Sep 2023 14:23:19 +0200") Message-ID: References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> <83fs3u5e7u.fsf@gnu.org> <835y4q5apw.fsf@gnu.org> <776370AB-662F-4C0A-95BF-97DEA4F18F54@gmail.com> <3A0AC9E2-A420-47B6-870A-69C53FCAEF71@gmail.com> Date: Tue, 05 Sep 2023 09:08:01 -0400 User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.116 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Thank you for fixing it, but now regex-emacs-tests fail with a regexp stack > overflow. Really? I thought I had specifically run that test. [ ...recompiling + rerunning the test... ] Hmm... you're right. Crap. > It seems that by fixing this bug, we've unfixed the one that the > broken code was supposed to fix. Well, that one was less of a bug (more of a missing optimization), so it's no reason to revert the change, but yes, not good. Let's see if I can finagle something. > And we should probably include a regression test for this bug as well. > The previously mentioned > > (string-match (rx (* "a") (* (* "b"))) "a") > > might suffice, but extending it to > > (string-match (rx (* "a") (* (or "c" (* "b")))) "a") > > is safer in case the regexp compiler decides to simplify (* (* X)) -> (* X). Feel free. To me, it feels too much like testing the presence/absence of a very specific bug (i.e. too unlikely that we'll reintroduce that exact bug. It's not like it was a weird case I didn't think of). Stefan From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 05 Sep 2023 13:51:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Stefan Monnier Cc: martin rudalics , Eli Zaretskii , 65726@debbugs.gnu.org Received: via spool by 65726-submit@debbugs.gnu.org id=B65726.169392181625565 (code B ref 65726); Tue, 05 Sep 2023 13:51:01 +0000 Received: (at 65726) by debbugs.gnu.org; 5 Sep 2023 13:50:16 +0000 Received: from localhost ([127.0.0.1]:55238 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qdWRb-0006eH-MG for submit@debbugs.gnu.org; Tue, 05 Sep 2023 09:50:15 -0400 Received: from mail-lj1-x232.google.com ([2a00:1450:4864:20::232]:44240) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qdWRZ-0006e2-ON for 65726@debbugs.gnu.org; Tue, 05 Sep 2023 09:50:14 -0400 Received: by mail-lj1-x232.google.com with SMTP id 38308e7fff4ca-2b974031aeaso41624371fa.0 for <65726@debbugs.gnu.org>; Tue, 05 Sep 2023 06:50:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1693921807; x=1694526607; darn=debbugs.gnu.org; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:sender:from:to:cc:subject :date:message-id:reply-to; bh=uMbgQCAjz14mb0g82xYvmxbl7GrsmRc4NaMMcaaYh9I=; b=EX76/btTQ2hAzTUe770GNjPD9q37l7mke4D1r4+E+XYCq3qqq/5r6wBLLdcqcxqygb +oGBnYlQsoWvfdSTWrQnVUDlMYNAO0vMBt/rjzdxUEYEaLB9j4XTvJpAyatvlBKyN7OL 9Vip/UxC+G7vfqNbZSJHpmwpsEtygmMxL0eZ/GINwG9TR8t3yS2CnAnuuPfYSc3Y46dH moptwmX6rvV2zPR6pkKV2pxz0zlXoA/c76MTkTeGxk+hmBabPUtm47GIIPHj+7hu+1qN Ma6G8CoMpcM8GtEQ+dCWVQ7Q0ooF4oeCoP9+yjSE1jhq2ATjrhHYzDeIQ1CeOesCac+Q Z+mg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1693921807; x=1694526607; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:sender:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=uMbgQCAjz14mb0g82xYvmxbl7GrsmRc4NaMMcaaYh9I=; b=BzGLBfshbLeqvzRu/uLhrIwhsTnOcAnoWp6t5DuOWbrvwJh7HGmHKEtHPM/scSrjqn LwHgM94FV6LAYnkmvq9l4UK8q3uyPXU7Cp62BLqSKkPXuhv6dg5DwPB59kKCp1ZYHSB0 L7271poPhiTqemC4Dpfm+sGmmjFKMyn9pQYKrRJf2VfKArie86gMQRPLwpFnpN+H9DWN aRD6Qk1MgedCMB3WEWn0V2XYlJhrjfjCjY8u5KdAqqB5i6pv8Bk0IP0XA1EO/hA3UhC6 ayuVqwyyVtjKotB19Z49jDamteBP4uBaP7yCOPKC+bheW4d974tJncdJIaji8f0e0ngb 6RCw== X-Gm-Message-State: AOJu0YyVUkd02BqFwtZlgAgKSOdAOBMT1pAIlZZ/bekik3k3LIc8fAis D5ag1nutfOdGA0Gx4idgVXs= X-Google-Smtp-Source: AGHT+IH1tYQu9nhy9wQtHvrHhPIzgB3BEBL5JMsgt0OffF1gIOuWTP0efRcyyVpEKgAeK2mUWujEnQ== X-Received: by 2002:a2e:8506:0:b0:2bc:cdcf:d888 with SMTP id j6-20020a2e8506000000b002bccdcfd888mr9345477lji.46.1693921806944; Tue, 05 Sep 2023 06:50:06 -0700 (PDT) Received: from smtpclient.apple (c188-150-165-235.bredband.tele2.se. [188.150.165.235]) by smtp.gmail.com with ESMTPSA id l9-20020a2e99c9000000b002b9b27cf729sm2926524ljj.52.2023.09.05.06.50.06 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Sep 2023 06:50:06 -0700 (PDT) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.120.0.1.15\)) From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= In-Reply-To: Date: Tue, 5 Sep 2023 15:50:05 +0200 Content-Transfer-Encoding: quoted-printable Message-Id: References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> <83fs3u5e7u.fsf@gnu.org> <835y4q5apw.fsf@gnu.org> <776370AB-662F-4C0A-95BF-97DEA4F18F54@gmail.com> <3A0AC9E2-A420-47B6-870A-69C53FCAEF71@gmail.com> X-Mailer: Apple Mail (2.3654.120.0.1.15) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) 5 sep. 2023 kl. 15.08 skrev Stefan Monnier : > Let's see if I can finagle something. I liked your previous optimisation, so if you could finagle it back = without breaking anything that would be pukka. > Feel free. To me, it feels too much like testing the presence/absence > of a very specific bug (i.e. too unlikely that we'll reintroduce that > exact bug. It's not like it was a weird case I didn't think of). Alright, pushed to emacs-29. It's a cheap test and offers at least some = kind of protection in the event that someone undoes your handiwork. Such = things do happen after all. From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: Stefan Monnier Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 05 Sep 2023 15:34:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Cc: martin rudalics , Eli Zaretskii , 65726@debbugs.gnu.org Received: via spool by 65726-submit@debbugs.gnu.org id=B65726.16939279984728 (code B ref 65726); Tue, 05 Sep 2023 15:34:01 +0000 Received: (at 65726) by debbugs.gnu.org; 5 Sep 2023 15:33:18 +0000 Received: from localhost ([127.0.0.1]:57893 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qdY3J-0001EB-I0 for submit@debbugs.gnu.org; Tue, 05 Sep 2023 11:33:18 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:37796) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qdY3G-0001Du-Ew for 65726@debbugs.gnu.org; Tue, 05 Sep 2023 11:33:16 -0400 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 39677100068; Tue, 5 Sep 2023 11:33:08 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1693927986; bh=Y+PdumDpXf7s94Pg4qgXMk5NKSZUaj4Q/RZC78uLU/A=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=nhIGwAUlDzWVxmoEWvnRIxHZIBSUeIjAafcxZxorgq68jDK/s4OaqL3f2lr1xEYLB 9mMmI84Nzap5CeRZxW5fi//hkV4eWlRAc+XKbPKUB2T0YOV74zGMtMYIVhHDr9x+WJ HTs2LDcijiv9cc+G2uZM+3MG3K5dndqJLfQnuOcp9cZ35MYSDs239Jvk51EDqfld6e O2lBeFdoAwUci77v7EPSL1tIJb2zqE0lvqc0h6WWVlhaZt7L+ddOx3om4hIC01eDlC khZ8c3bVzBCmJVo8sMNuvn2cJ76gADSejtnOrsPAl7N68cWNiNhUMx9MkzYT9KEVmc lmJezE0aeEpaA== Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 92BC2100033; Tue, 5 Sep 2023 11:33:06 -0400 (EDT) Received: from pastel (69-165-136-223.dsl.teksavvy.com [69.165.136.223]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 5F83E1202A0; Tue, 5 Sep 2023 11:33:06 -0400 (EDT) From: Stefan Monnier In-Reply-To: ("Mattias =?UTF-8?Q?Engdeg=C3=A5rd?="'s message of "Tue, 5 Sep 2023 15:50:05 +0200") Message-ID: References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> <83fs3u5e7u.fsf@gnu.org> <835y4q5apw.fsf@gnu.org> <776370AB-662F-4C0A-95BF-97DEA4F18F54@gmail.com> <3A0AC9E2-A420-47B6-870A-69C53FCAEF71@gmail.com> Date: Tue, 05 Sep 2023 11:33:05 -0400 User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.110 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) >> Feel free. To me, it feels too much like testing the presence/absence >> of a very specific bug (i.e. too unlikely that we'll reintroduce that >> exact bug. It's not like it was a weird case I didn't think of). > Alright, pushed to emacs-29. It's a cheap test and offers at least some kind > of protection in the event that someone undoes your handiwork. Such things > do happen after all. I marked the backtracking test as failing because the "real" fix wil likely be too risky to put onto `emacs-29` (at least for now). >> Let's see if I can finagle something. > I liked your previous optimisation, so if you could finagle it back without > breaking anything that would be pukka. WDYT of the approach below? You can ignore the `mutually_exclusive_(charset|exactn)` thingies which just move code around (it's necessary for the patch). It's a bit ugly because the actual assumptions on which it relies aren't spelled out explicitly (and even less assert-checked at run time). The basic idea is that `done` points to the beginning of the "current loop": as long as we move forward we presume we may still be in the current loop, and when we find a jump backward it's either a jump to the beginning of a new (nested/further) loop (so we move `done`) or a jump to the same loop or to some earlier loop (which we presumably handle elsewhere). I also tried a safer option where we do: return ((p2 < done ? false : p2 == done ? true : mutually_exclusive_aux (bufp, p1, p2, p2 > p2_orig ? done : p2)) && (p2_other < done ? false : p2_other == done ? true : mutually_exclusive_aux (bufp, p1, p2_other, p2_other > p2_orig ? done : p2_other))); i.e. we only consider `done` itself as "already checked", which should definitely be safe. It also seems to be sufficient to handle things like: (should (looking-at "x*\\(=+?\\|h\\)+")) Adding an `assert (p2 >= done)` confirms that this does happen, so whether we return true or false when `p2 < done` does matter, so I guess we should go with the safer option unless we can really convince ourselves that the more optimistic option is also correct. Then again, maybe we should bite the bullet and actually keep track of the positions already visited, so we don't need any "fancy" argument. Stefan diff --git a/src/regex-emacs.c b/src/regex-emacs.c index 7e75f0ac597..0d3cf39d619 100644 --- a/src/regex-emacs.c +++ b/src/regex-emacs.c @@ -3643,19 +3643,125 @@ execute_charset (re_char **pp, int c, int corig, bool unibyte, return not; } +/* Case where `p2` points to an `exactn`. */ +static bool +mutually_exclusive_exactn (struct re_pattern_buffer *bufp, re_char *p1, + re_char *p2) +{ + bool multibyte = RE_MULTIBYTE_P (bufp); + int c + = (re_opcode_t) *p2 == endline ? '\n' + : RE_STRING_CHAR (p2 + 2, multibyte); + + if ((re_opcode_t) *p1 == exactn) + { + if (c != RE_STRING_CHAR (p1 + 2, multibyte)) + { + DEBUG_PRINT (" '%c' != '%c' => fast loop.\n", c, p1[2]); + return true; + } + } + + else if ((re_opcode_t) *p1 == charset + || (re_opcode_t) *p1 == charset_not) + { + if (!execute_charset (&p1, c, c, !multibyte || ASCII_CHAR_P (c), + Qnil)) + { + DEBUG_PRINT (" No match => fast loop.\n"); + return true; + } + } + else if ((re_opcode_t) *p1 == anychar + && c == '\n') + { + DEBUG_PRINT (" . != \\n => fast loop.\n"); + return true; + } + return false; +} + +/* Case where `p2` points to an `charset`. */ +static bool +mutually_exclusive_charset (struct re_pattern_buffer *bufp, re_char *p1, + re_char *p2) +{ + /* It is hard to list up all the character in charset + P2 if it includes multibyte character. Give up in + such case. */ + if (!RE_MULTIBYTE_P (bufp) || !CHARSET_RANGE_TABLE_EXISTS_P (p2)) + { + /* Now, we are sure that P2 has no range table. + So, for the size of bitmap in P2, 'p2[1]' is + enough. But P1 may have range table, so the + size of bitmap table of P1 is extracted by + using macro 'CHARSET_BITMAP_SIZE'. + + In a multibyte case, we know that all the character + listed in P2 is ASCII. In a unibyte case, P1 has only a + bitmap table. So, in both cases, it is enough to test + only the bitmap table of P1. */ + + if ((re_opcode_t) *p1 == charset) + { + int idx; + /* We win if the charset inside the loop + has no overlap with the one after the loop. */ + for (idx = 0; + (idx < (int) p2[1] + && idx < CHARSET_BITMAP_SIZE (p1)); + idx++) + if ((p2[2 + idx] & p1[2 + idx]) != 0) + break; + + if (idx == p2[1] + || idx == CHARSET_BITMAP_SIZE (p1)) + { + DEBUG_PRINT (" No match => fast loop.\n"); + return true; + } + } + else if ((re_opcode_t) *p1 == charset_not) + { + int idx; + /* We win if the charset_not inside the loop lists + every character listed in the charset after. */ + for (idx = 0; idx < (int) p2[1]; idx++) + if (! (p2[2 + idx] == 0 + || (idx < CHARSET_BITMAP_SIZE (p1) + && ((p2[2 + idx] & ~ p1[2 + idx]) == 0)))) + break; + + if (idx == p2[1]) + { + DEBUG_PRINT (" No match => fast loop.\n"); + return true; + } + } + } + return false; +} + /* True if "p1 matches something" implies "p2 fails". */ +/* Avoiding inf-loops: + We're trying to follow all paths reachable from `p2`, but since some + loops can match the empty string, this can loop back to `p2`. + To avoid inf-looping, we rely on a lexicographic ordering using `done` + and `p2`: at every recursion, either `done` is larger, or it + is unchanged and `p2` is larger. */ static bool -mutually_exclusive_p (struct re_pattern_buffer *bufp, re_char *p1, - re_char *p2) +mutually_exclusive_aux (struct re_pattern_buffer *bufp, re_char *p1, + re_char *p2, re_char *done) { re_opcode_t op2; - bool multibyte = RE_MULTIBYTE_P (bufp); unsigned char *pend = bufp->buffer + bufp->used; re_char *p2_orig = p2; eassert (p1 >= bufp->buffer && p1 < pend && p2 >= bufp->buffer && p2 <= pend); + eassert (p2 >= done); + /* Skip over open/close-group commands. If what follows this loop is a ...+ construct, look at what begins its body, since we will have to @@ -3684,98 +3790,14 @@ mutually_exclusive_p (struct re_pattern_buffer *bufp, re_char *p1, case endline: case exactn: - { - int c - = (re_opcode_t) *p2 == endline ? '\n' - : RE_STRING_CHAR (p2 + 2, multibyte); - - if ((re_opcode_t) *p1 == exactn) - { - if (c != RE_STRING_CHAR (p1 + 2, multibyte)) - { - DEBUG_PRINT (" '%c' != '%c' => fast loop.\n", c, p1[2]); - return true; - } - } - - else if ((re_opcode_t) *p1 == charset - || (re_opcode_t) *p1 == charset_not) - { - if (!execute_charset (&p1, c, c, !multibyte || ASCII_CHAR_P (c), - Qnil)) - { - DEBUG_PRINT (" No match => fast loop.\n"); - return true; - } - } - else if ((re_opcode_t) *p1 == anychar - && c == '\n') - { - DEBUG_PRINT (" . != \\n => fast loop.\n"); - return true; - } - } - break; + return mutually_exclusive_exactn (bufp, p1, p2); case charset: { if ((re_opcode_t) *p1 == exactn) - /* Reuse the code above. */ - return mutually_exclusive_p (bufp, p2, p1); - - /* It is hard to list up all the character in charset - P2 if it includes multibyte character. Give up in - such case. */ - else if (!multibyte || !CHARSET_RANGE_TABLE_EXISTS_P (p2)) - { - /* Now, we are sure that P2 has no range table. - So, for the size of bitmap in P2, 'p2[1]' is - enough. But P1 may have range table, so the - size of bitmap table of P1 is extracted by - using macro 'CHARSET_BITMAP_SIZE'. - - In a multibyte case, we know that all the character - listed in P2 is ASCII. In a unibyte case, P1 has only a - bitmap table. So, in both cases, it is enough to test - only the bitmap table of P1. */ - - if ((re_opcode_t) *p1 == charset) - { - int idx; - /* We win if the charset inside the loop - has no overlap with the one after the loop. */ - for (idx = 0; - (idx < (int) p2[1] - && idx < CHARSET_BITMAP_SIZE (p1)); - idx++) - if ((p2[2 + idx] & p1[2 + idx]) != 0) - break; - - if (idx == p2[1] - || idx == CHARSET_BITMAP_SIZE (p1)) - { - DEBUG_PRINT (" No match => fast loop.\n"); - return true; - } - } - else if ((re_opcode_t) *p1 == charset_not) - { - int idx; - /* We win if the charset_not inside the loop lists - every character listed in the charset after. */ - for (idx = 0; idx < (int) p2[1]; idx++) - if (! (p2[2 + idx] == 0 - || (idx < CHARSET_BITMAP_SIZE (p1) - && ((p2[2 + idx] & ~ p1[2 + idx]) == 0)))) - break; - - if (idx == p2[1]) - { - DEBUG_PRINT (" No match => fast loop.\n"); - return true; - } - } - } + return mutually_exclusive_exactn (bufp, p2, p1); + else + return mutually_exclusive_charset (bufp, p1, p2); } break; @@ -3783,9 +3805,9 @@ mutually_exclusive_p (struct re_pattern_buffer *bufp, re_char *p1, switch (*p1) { case exactn: + return mutually_exclusive_exactn (bufp, p2, p1); case charset: - /* Reuse the code above. */ - return mutually_exclusive_p (bufp, p2, p1); + return mutually_exclusive_charset (bufp, p2, p1); case charset_not: /* When we have two charset_not, it's very unlikely that they don't overlap. The union of the two sets of excluded @@ -3830,11 +3852,18 @@ mutually_exclusive_p (struct re_pattern_buffer *bufp, re_char *p1, int mcnt; p2++; EXTRACT_NUMBER_AND_INCR (mcnt, p2); - /* Don't just test `mcnt > 0` because non-greedy loops have - their test at the end with an unconditional jump at the start. */ - if (p2 + mcnt > p2_orig) /* Ensure forward progress. */ - return (mutually_exclusive_p (bufp, p1, p2) - && mutually_exclusive_p (bufp, p1, p2 + mcnt)); + re_char *p2_other = p2 + mcnt; + /* Presumably, any position up to `done` should be a position we + already considered elsewhere (because our state machines are not + arbitrary: they consists of syntaxically nested loops with limited + control flow), so we can consider those back jumps as mutually + exclusive here. */ + return ((p2 <= done + || mutually_exclusive_aux (bufp, p1, p2, + p2 > p2_orig ? done : p2)) + && (p2_other <= done + || mutually_exclusive_aux (bufp, p1, p2_other, + p2_other > p2_orig ? done : p2_other))); break; } @@ -3846,6 +3875,12 @@ mutually_exclusive_p (struct re_pattern_buffer *bufp, re_char *p1, return false; } +static bool +mutually_exclusive_p (struct re_pattern_buffer *bufp, re_char *p1, + re_char *p2) +{ + return mutually_exclusive_aux (bufp, p1, p2, min (p2, p1)); +} /* Matching routines. */ From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 06 Sep 2023 12:04:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Stefan Monnier Cc: martin rudalics , Eli Zaretskii , 65726@debbugs.gnu.org Received: via spool by 65726-submit@debbugs.gnu.org id=B65726.169400180918484 (code B ref 65726); Wed, 06 Sep 2023 12:04:02 +0000 Received: (at 65726) by debbugs.gnu.org; 6 Sep 2023 12:03:29 +0000 Received: from localhost ([127.0.0.1]:33237 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qdrFe-0004np-7n for submit@debbugs.gnu.org; Wed, 06 Sep 2023 08:03:28 -0400 Received: from mail-lf1-x131.google.com ([2a00:1450:4864:20::131]:49279) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qdrFX-0004nK-9d for 65726@debbugs.gnu.org; Wed, 06 Sep 2023 08:03:14 -0400 Received: by mail-lf1-x131.google.com with SMTP id 2adb3069b0e04-501cba1ec0aso636670e87.2 for <65726@debbugs.gnu.org>; Wed, 06 Sep 2023 05:03:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1694001784; x=1694606584; darn=debbugs.gnu.org; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:sender:from:to:cc:subject :date:message-id:reply-to; bh=KzFpz5auFfSXeSAH/yEcrOPv0eBejnw1Af21b/r7JQE=; b=AeMF3IItWLDNzQvJ1JYdSolGYjU98VpwK0JJzICHAOoE684AJcd42QTOa3s/yZIGa+ T51zI3aM/UzdnhRDr9Xj3qu6zYXLUHturs6w2wOZZggZsFSsHDIeBwJwOVFdOKwp2ByG JNzDlgAj7VVR4Jk+GAkrxLwJENsPzdrFy3J2mxm2rzx2GohqJwqTm5LBDbFHp0/uajHN nr7Q69WxprpcAT8b7VOHY9MJoNPbYgWrVjeYxjWMTf+7jLxNTobPtdhR3xG2c3ztU1hj GWOTHJiFEX+Bz0cYio2nN9KNmsOHxNxeiZrLCwhF6CWDQvjvpYErJk1/MapkgCsG97C8 ffnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1694001784; x=1694606584; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:sender:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=KzFpz5auFfSXeSAH/yEcrOPv0eBejnw1Af21b/r7JQE=; b=ULGExqj8lPx6w2jOivtIvjwMJ2BmCLFKISpV7l0/qhAc89Dn80lBb54GKqX4HBlDLN 4gOcxhJ4En/3+zgl44W2pZFeKaDw69mmYiBIoNDRoQrDxVBTnhIm89+ZSMGDa3NgdTwQ ILs3Aatlr3NNrTI8PJW5WS48kc2s37zC7kazqZFQwz0zVaPrgggG6WnwWkOtR0i8ipn7 YvB7vcKMtbdvmDoo4lxp5pYmRXypYLuaK3Hc5q+PgcuEmVaO4vNUEqg7HBM+Do1PExPE pLuHzrRBv/ew37+vqkcfJTpA6YRk22j2uqK7dPdIX2+Q9ABaNZjnpmM4WWCCfAE025/d wj6g== X-Gm-Message-State: AOJu0YwwLl1OFvCGh7ZmRpMAOg9bCZVAf6aUcvyElN1/IWHlU8eD+ZJj kd56mvhOjqVWn/9JJ7Pn7IE= X-Google-Smtp-Source: AGHT+IFsrBpgFc+0C7gOZaONvbpQPi1EuXmrBuAqXiXJL30Oj8iujSoPAbhsDA5Pm+5t8Ys1ZU2vsQ== X-Received: by 2002:a19:915a:0:b0:500:aed0:cb1b with SMTP id y26-20020a19915a000000b00500aed0cb1bmr2219789lfj.24.1694001784001; Wed, 06 Sep 2023 05:03:04 -0700 (PDT) Received: from smtpclient.apple (c188-150-165-235.bredband.tele2.se. [188.150.165.235]) by smtp.gmail.com with ESMTPSA id i11-20020a056512006b00b004fe38e566cfsm2747534lfo.280.2023.09.06.05.03.03 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Wed, 06 Sep 2023 05:03:03 -0700 (PDT) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.120.0.1.15\)) From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= In-Reply-To: Date: Wed, 6 Sep 2023 14:03:01 +0200 Content-Transfer-Encoding: quoted-printable Message-Id: References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> <83fs3u5e7u.fsf@gnu.org> <835y4q5apw.fsf@gnu.org> <776370AB-662F-4C0A-95BF-97DEA4F18F54@gmail.com> <3A0AC9E2-A420-47B6-870A-69C53FCAEF71@gmail.com> X-Mailer: Apple Mail (2.3654.120.0.1.15) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) 5 sep. 2023 kl. 17.33 skrev Stefan Monnier : > You can ignore the `mutually_exclusive_(charset|exactn)` thingies = which > just move code around (it's necessary for the patch). Actually that's a good refactoring to start with regardless of the path = we follow later. Makes things more readable if nothing else. > The basic idea is that `done` points to the beginning of the "current > loop": as long as we move forward we presume we may still be in the > current loop, and when we find a jump backward it's either a jump to = the > beginning of a new (nested/further) loop (so we move `done`) or a jump > to the same loop or to some earlier loop (which we presumably handle > elsewhere). So how can we describe the exact semantics of `done` in = mutually_exclusive_aux(p1,p2,done)? Something like: Let me(p1,p2) =3D true iff (p1 matches) implies (p2 fails). Then me_aux(p1,p2,done) =3D me(p1,p2) under the assumption that me(p1,x) holds for all x Adding an `assert (p2 >=3D done)` confirms that this does happen, Can you give an example of such a regexp? I ran `make check` with your = patch applied and checking enabled but got no assertion failure. > so > whether we return true or false when `p2 < done` does matter, so I = guess > we should go with the safer option unless we can really convince > ourselves that the more optimistic option is also correct. >=20 > Then again, maybe we should bite the bullet and actually keep track of > the positions already visited, so we don't need any "fancy" argument. There are a couple of ways of doing that but it might not be that bad. = It would also be more robust in face of future changes that may not obey = the current invariants. From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: Stefan Monnier Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 09 Sep 2023 15:56:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Cc: martin rudalics , Eli Zaretskii , 65726@debbugs.gnu.org Received: via spool by 65726-submit@debbugs.gnu.org id=B65726.16942749471152 (code B ref 65726); Sat, 09 Sep 2023 15:56:02 +0000 Received: (at 65726) by debbugs.gnu.org; 9 Sep 2023 15:55:47 +0000 Received: from localhost ([127.0.0.1]:48332 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qf0JG-0000IV-Jc for submit@debbugs.gnu.org; Sat, 09 Sep 2023 11:55:47 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:10728) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qf0JE-0000IG-85 for 65726@debbugs.gnu.org; Sat, 09 Sep 2023 11:55:45 -0400 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id A26C01000A3; Sat, 9 Sep 2023 11:55:35 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1694274930; bh=ZGo/tQTfCo7IDTKohEAudRYKTK+s4YEDM3dTC6TdWCc=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=mDnjq/UjbgE+9q06jKIWbGWy97KAFI5XXNCG/MvAFGQDegllWWC77i44vFHUBBlBU jtda76y2M//u5limyAFHkT0qZY+RluaGZwaoOmhxcuCvHvEOuG5u/7M2vvQOEAYIQJ gxtA0kSeBLT/PynEuwPbzMcxVA+mE7ylu6K3nGCGmknJ99jyixtCAQMsAyN8XiC3zN 9+k1iYco3zpoXO7vXz6dU4GDfqHOdQ6scjwWABR5vvpCm231ZH3u4h7mBRxEQFV4WM Dusn6HiCxy3m0TB0LZM47YSz5sUcYWa7r0w4HIx7SFGxtV9bjMlkACpnX6xjDJH2Gl tP4uSUGein5uQ== Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 06833100033; Sat, 9 Sep 2023 11:55:30 -0400 (EDT) Received: from pastel (unknown [104.247.229.91]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id AB758120223; Sat, 9 Sep 2023 11:55:29 -0400 (EDT) From: Stefan Monnier In-Reply-To: ("Mattias =?UTF-8?Q?Engdeg=C3=A5rd?="'s message of "Wed, 6 Sep 2023 14:03:01 +0200") Message-ID: References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> <83fs3u5e7u.fsf@gnu.org> <835y4q5apw.fsf@gnu.org> <776370AB-662F-4C0A-95BF-97DEA4F18F54@gmail.com> <3A0AC9E2-A420-47B6-870A-69C53FCAEF71@gmail.com> Date: Sat, 09 Sep 2023 11:55:28 -0400 User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.073 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) >> Adding an `assert (p2 >= done)` confirms that this does happen, > > Can you give an example of such a regexp? I ran `make check` with your patch > applied and checking enabled but got no assertion failure. My patch didn't include the assertion :-) The patch below does and hits an assertion failure during the dump: Loading format... Loading bindings... WOW1! Error: error ("WOW1!") mapbacktrace(#[1028 "\1\4\203\24\0\301\302!\210\300\4!\210\301\303!\210\202\35\0\301\304!\210\3\3B\262\1\211\2035\0\300\1@!\210\211A\211\262\2\2035\0\301\305!\210\202!\0\301\306!\207" [prin1 princ " " "(" " (" " " ")\n"] 7 "\n\n(fn EVALD FUNC ARGS FLAGS)"]) debug-early-backtrace() debug-early(error (error "WOW1!")) string-match("\\`[^ ]+\\( [^ ]+\\)*\\'" "h r" nil t) key-valid-p("h r") keymap--check("h r") keymap-set((keymap (27 keymap (119 . eww-search-words)) (111 . occur)) "h r" highlight-regexp) define-keymap("o" occur "M-w" eww-search-words "h r" highlight-regexp "h p" highlight-phrase "h l" highlight-lines-matching-regexp "h ." highlight-symbol-at-point "h u" unhighlight-regexp "h f" hi-lock-find-patterns "h w" hi-lock-write-interactive-patterns) (defvar search-map (define-keymap "o" 'occur "M-w" 'eww-search-words "h r" 'highlight-regexp "h p" 'highlight-phrase "h l" 'highlight-lines-matching-regexp "h ." 'highlight-symbol-at-point "h u" 'unhighlight-regexp "h f" 'hi-lock-find-patterns "h w" 'hi-lock-write-interactive-patterns) ("/home/monnier/src/emacs/main/lisp/bindings.elc" . 40677)) load("bindings") load("loadup.el") -- Stefan diff --git a/src/regex-emacs.c b/src/regex-emacs.c index 394ba22e9b0..b47cdfbfef8 100644 --- a/src/regex-emacs.c +++ b/src/regex-emacs.c @@ -3643,19 +3643,125 @@ execute_charset (re_char **pp, int c, int corig, bool unibyte, return not; } +/* Case where `p2` points to an `exactn`. */ +static bool +mutually_exclusive_exactn (struct re_pattern_buffer *bufp, re_char *p1, + re_char *p2) +{ + bool multibyte = RE_MULTIBYTE_P (bufp); + int c + = (re_opcode_t) *p2 == endline ? '\n' + : RE_STRING_CHAR (p2 + 2, multibyte); + + if ((re_opcode_t) *p1 == exactn) + { + if (c != RE_STRING_CHAR (p1 + 2, multibyte)) + { + DEBUG_PRINT (" '%c' != '%c' => fast loop.\n", c, p1[2]); + return true; + } + } + + else if ((re_opcode_t) *p1 == charset + || (re_opcode_t) *p1 == charset_not) + { + if (!execute_charset (&p1, c, c, !multibyte || ASCII_CHAR_P (c), + Qnil)) + { + DEBUG_PRINT (" No match => fast loop.\n"); + return true; + } + } + else if ((re_opcode_t) *p1 == anychar + && c == '\n') + { + DEBUG_PRINT (" . != \\n => fast loop.\n"); + return true; + } + return false; +} + +/* Case where `p2` points to an `charset`. */ +static bool +mutually_exclusive_charset (struct re_pattern_buffer *bufp, re_char *p1, + re_char *p2) +{ + /* It is hard to list up all the character in charset + P2 if it includes multibyte character. Give up in + such case. */ + if (!RE_MULTIBYTE_P (bufp) || !CHARSET_RANGE_TABLE_EXISTS_P (p2)) + { + /* Now, we are sure that P2 has no range table. + So, for the size of bitmap in P2, 'p2[1]' is + enough. But P1 may have range table, so the + size of bitmap table of P1 is extracted by + using macro 'CHARSET_BITMAP_SIZE'. + + In a multibyte case, we know that all the character + listed in P2 is ASCII. In a unibyte case, P1 has only a + bitmap table. So, in both cases, it is enough to test + only the bitmap table of P1. */ + + if ((re_opcode_t) *p1 == charset) + { + int idx; + /* We win if the charset inside the loop + has no overlap with the one after the loop. */ + for (idx = 0; + (idx < (int) p2[1] + && idx < CHARSET_BITMAP_SIZE (p1)); + idx++) + if ((p2[2 + idx] & p1[2 + idx]) != 0) + break; + + if (idx == p2[1] + || idx == CHARSET_BITMAP_SIZE (p1)) + { + DEBUG_PRINT (" No match => fast loop.\n"); + return true; + } + } + else if ((re_opcode_t) *p1 == charset_not) + { + int idx; + /* We win if the charset_not inside the loop lists + every character listed in the charset after. */ + for (idx = 0; idx < (int) p2[1]; idx++) + if (! (p2[2 + idx] == 0 + || (idx < CHARSET_BITMAP_SIZE (p1) + && ((p2[2 + idx] & ~ p1[2 + idx]) == 0)))) + break; + + if (idx == p2[1]) + { + DEBUG_PRINT (" No match => fast loop.\n"); + return true; + } + } + } + return false; +} + /* True if "p1 matches something" implies "p2 fails". */ +/* Avoiding inf-loops: + We're trying to follow all paths reachable from `p2`, but since some + loops can match the empty string, this can loop back to `p2`. + To avoid inf-looping, we rely on a lexicographic ordering using `done` + and `p2`: at every recursion, either `done` is larger, or it + is unchanged and `p2` is larger. */ static bool -mutually_exclusive_p (struct re_pattern_buffer *bufp, re_char *p1, - re_char *p2) +mutually_exclusive_aux (struct re_pattern_buffer *bufp, re_char *p1, + re_char *p2, re_char *done) { re_opcode_t op2; - bool multibyte = RE_MULTIBYTE_P (bufp); unsigned char *pend = bufp->buffer + bufp->used; re_char *p2_orig = p2; eassert (p1 >= bufp->buffer && p1 < pend && p2 >= bufp->buffer && p2 <= pend); + eassert (p2 >= done); + /* Skip over open/close-group commands. If what follows this loop is a ...+ construct, look at what begins its body, since we will have to @@ -3684,98 +3790,14 @@ mutually_exclusive_p (struct re_pattern_buffer *bufp, re_char *p1, case endline: case exactn: - { - int c - = (re_opcode_t) *p2 == endline ? '\n' - : RE_STRING_CHAR (p2 + 2, multibyte); - - if ((re_opcode_t) *p1 == exactn) - { - if (c != RE_STRING_CHAR (p1 + 2, multibyte)) - { - DEBUG_PRINT (" '%c' != '%c' => fast loop.\n", c, p1[2]); - return true; - } - } - - else if ((re_opcode_t) *p1 == charset - || (re_opcode_t) *p1 == charset_not) - { - if (!execute_charset (&p1, c, c, !multibyte || ASCII_CHAR_P (c), - Qnil)) - { - DEBUG_PRINT (" No match => fast loop.\n"); - return true; - } - } - else if ((re_opcode_t) *p1 == anychar - && c == '\n') - { - DEBUG_PRINT (" . != \\n => fast loop.\n"); - return true; - } - } - break; + return mutually_exclusive_exactn (bufp, p1, p2); case charset: { if ((re_opcode_t) *p1 == exactn) - /* Reuse the code above. */ - return mutually_exclusive_p (bufp, p2, p1); - - /* It is hard to list up all the character in charset - P2 if it includes multibyte character. Give up in - such case. */ - else if (!multibyte || !CHARSET_RANGE_TABLE_EXISTS_P (p2)) - { - /* Now, we are sure that P2 has no range table. - So, for the size of bitmap in P2, 'p2[1]' is - enough. But P1 may have range table, so the - size of bitmap table of P1 is extracted by - using macro 'CHARSET_BITMAP_SIZE'. - - In a multibyte case, we know that all the character - listed in P2 is ASCII. In a unibyte case, P1 has only a - bitmap table. So, in both cases, it is enough to test - only the bitmap table of P1. */ - - if ((re_opcode_t) *p1 == charset) - { - int idx; - /* We win if the charset inside the loop - has no overlap with the one after the loop. */ - for (idx = 0; - (idx < (int) p2[1] - && idx < CHARSET_BITMAP_SIZE (p1)); - idx++) - if ((p2[2 + idx] & p1[2 + idx]) != 0) - break; - - if (idx == p2[1] - || idx == CHARSET_BITMAP_SIZE (p1)) - { - DEBUG_PRINT (" No match => fast loop.\n"); - return true; - } - } - else if ((re_opcode_t) *p1 == charset_not) - { - int idx; - /* We win if the charset_not inside the loop lists - every character listed in the charset after. */ - for (idx = 0; idx < (int) p2[1]; idx++) - if (! (p2[2 + idx] == 0 - || (idx < CHARSET_BITMAP_SIZE (p1) - && ((p2[2 + idx] & ~ p1[2 + idx]) == 0)))) - break; - - if (idx == p2[1]) - { - DEBUG_PRINT (" No match => fast loop.\n"); - return true; - } - } - } + return mutually_exclusive_exactn (bufp, p2, p1); + else + return mutually_exclusive_charset (bufp, p1, p2); } break; @@ -3783,9 +3805,9 @@ mutually_exclusive_p (struct re_pattern_buffer *bufp, re_char *p1, switch (*p1) { case exactn: + return mutually_exclusive_exactn (bufp, p2, p1); case charset: - /* Reuse the code above. */ - return mutually_exclusive_p (bufp, p2, p1); + return mutually_exclusive_charset (bufp, p2, p1); case charset_not: /* When we have two charset_not, it's very unlikely that they don't overlap. The union of the two sets of excluded @@ -3830,11 +3852,25 @@ mutually_exclusive_p (struct re_pattern_buffer *bufp, re_char *p1, int mcnt; p2++; EXTRACT_NUMBER_AND_INCR (mcnt, p2); - /* Don't just test `mcnt > 0` because non-greedy loops have - their test at the end with an unconditional jump at the start. */ - if (p2 > p2_orig && mcnt >= 0) /* Ensure forward progress. */ - return (mutually_exclusive_p (bufp, p1, p2) - && mutually_exclusive_p (bufp, p1, p2 + mcnt)); + re_char *p2_other = p2 + mcnt; + /* Presumably, any position up to `done` should be a position we + already considered elsewhere (because our state machines are not + arbitrary: they consists of syntaxically nested loops with limited + control flow), so we can consider those back jumps as mutually + exclusive here. */ + if (p2 < done) + error ("WOW1!"); + if (p2_other < done) + error ("WOW2!"); + return ((p2 < done ? true + : p2 == done ? true + : mutually_exclusive_aux (bufp, p1, p2, + p2 > p2_orig ? done : p2)) + && (p2_other < done ? true + : p2_other == done ? true + : mutually_exclusive_aux (bufp, p1, p2_other, + p2_other > p2_orig + ? done : p2_other))); break; } @@ -3846,6 +3882,12 @@ mutually_exclusive_p (struct re_pattern_buffer *bufp, re_char *p1, return false; } +static bool +mutually_exclusive_p (struct re_pattern_buffer *bufp, re_char *p1, + re_char *p2) +{ + return mutually_exclusive_aux (bufp, p1, p2, min (p2, p1)); +} /* Matching routines. */ From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 09 Sep 2023 16:35:03 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Stefan Monnier Cc: martin rudalics , Eli Zaretskii , 65726@debbugs.gnu.org Received: via spool by 65726-submit@debbugs.gnu.org id=B65726.16942772974770 (code B ref 65726); Sat, 09 Sep 2023 16:35:03 +0000 Received: (at 65726) by debbugs.gnu.org; 9 Sep 2023 16:34:57 +0000 Received: from localhost ([127.0.0.1]:48370 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qf0vA-0001Er-Ql for submit@debbugs.gnu.org; Sat, 09 Sep 2023 12:34:57 -0400 Received: from mail-lf1-x133.google.com ([2a00:1450:4864:20::133]:59749) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qf0v7-0001Ee-Dn for 65726@debbugs.gnu.org; Sat, 09 Sep 2023 12:34:56 -0400 Received: by mail-lf1-x133.google.com with SMTP id 2adb3069b0e04-500b66f8b27so5229717e87.3 for <65726@debbugs.gnu.org>; Sat, 09 Sep 2023 09:34:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1694277284; x=1694882084; darn=debbugs.gnu.org; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:sender:from:to:cc:subject :date:message-id:reply-to; bh=HslrDXDbc5xWMbm6qMHzDTvaTO/QNtztWQ9RCBOrqJ8=; b=RBs3lkWd3j/vjIskbJz4RJUYfv3SmR9piM4D2JoYaoJ9e73jHTNOaISw0XP6qqPx0t 2nggawtfdiKE77+tnksq6fSELm1P6SBgeWoYBfcLRr0ihzVYWro5nmoE6zz2qWgKeNZZ T/6uZ6nuafV8t8lrdiNwe6/bM1UdVKS8ov53biPMwFWI2mXDb2tYTJUCYk/MV7a47qsc Iuf6bad14bOM/0OLojyewX1B+hCa8ck7QFqwnkpmY6YFYzHvmHws2AinKKoTVgEzsgL2 Wo3CNcZacpmjpkry1ejpbby9hzyrv/Nfxf6MleoOgzquVVgN58kPAqkK2wv/N7ZeKpIy Fy/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694277284; x=1694882084; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:sender:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=HslrDXDbc5xWMbm6qMHzDTvaTO/QNtztWQ9RCBOrqJ8=; b=rVCzz+43MzQp1ZR+JlvT/B310NWG+3Ibs8AHun2ikAkPtM+B0y/qp1tVEWXFeuv0Og OOSz9tjR1DbKWi6rWm1wm7+1egqRtxDTrunAV7mhd1ZQeltZIHdUfDPaTCIivg+aU/0s f+e40+OSA0lrQTYtlMzt8dajiD103Rfg54lOnsckZzhqzpGhRagB7mefAYugxbg+qlqo jwTGubM8nKXiqA4e/deVR+pnD3cG8gIL5u/cda7eN4+AYk1ZJxnNWCO74aXQFZn67lJM 3ccGRG7l5QBLnjrGjI+9o0if7pDi9rCaetChKVHc2ENLx0DxLdlCsL64qL6nXMU/MI5K ef5A== X-Gm-Message-State: AOJu0YxnthXQBjRPv6VMBqk+CuC453mDO+buDk2U7rWtE1Rk6x+pCcuE qObsDhqcpwqKxJVTOBdMujZBsmWxGu8= X-Google-Smtp-Source: AGHT+IFizVXlLC3VmfCrRmYKMSpduZi8OgPc2YbwbGFIP7f9CDNOjrEhChXXA0xlC3YYKDMFmm7fVA== X-Received: by 2002:a19:6917:0:b0:502:9c4e:d46a with SMTP id e23-20020a196917000000b005029c4ed46amr3640979lfc.32.1694277284231; Sat, 09 Sep 2023 09:34:44 -0700 (PDT) Received: from smtpclient.apple (c188-150-165-235.bredband.tele2.se. [188.150.165.235]) by smtp.gmail.com with ESMTPSA id u26-20020ac2519a000000b004ffa0e5d805sm680940lfi.174.2023.09.09.09.34.43 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 09 Sep 2023 09:34:43 -0700 (PDT) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.120.0.1.15\)) From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= In-Reply-To: Date: Sat, 9 Sep 2023 18:34:42 +0200 Content-Transfer-Encoding: quoted-printable Message-Id: References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> <83fs3u5e7u.fsf@gnu.org> <835y4q5apw.fsf@gnu.org> <776370AB-662F-4C0A-95BF-97DEA4F18F54@gmail.com> <3A0AC9E2-A420-47B6-870A-69C53FCAEF71@gmail.com> X-Mailer: Apple Mail (2.3654.120.0.1.15) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) 9 sep. 2023 kl. 17.55 skrev Stefan Monnier : > My patch didn't include the assertion :-) Oh, I thought you meant the eassert (p2 >=3D done); added at the start = of mutually_exclusive_aux. Sorry about the confusion. Anyway, disassembling the regexp makes it clear why: Disassembly of regexp "\\`[^ ]+\\( [^ ]+\\)*\\'" 0 begbuf 1 charset-not [ ] 8 on-failure-jump-smart to 21 11 charset-not [ ] 18 jump to 8 21 on-failure-jump to 54 24 start-memory group 1 26 exact " " 29 charset-not [ ] 36 on-failure-jump-smart to 49 39 charset-not [ ] 46 jump to 36 49 stop-memory group 1 51 jump to 21 54 endbuf 55 succeed which unless I'm mistaken we can condense to: Disassembly of regexp "\\(?:ba*\\)*" 0 on-failure-jump to 18 3 exact "b" 6 on-failure-jump-smart to 15 9 exact "a" 12 jump to 6 15 jump to 0 18 succeed so yes, we may need to remember where we've been. (At this point someone = will inevitably point out a helpful invariant that is obvious in = hindsight. This is just my cunning attempt at making that happen.) From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: Stefan Kangas Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 10 Sep 2023 07:51:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Stefan Monnier Cc: rudalics@gmx.at, Eli Zaretskii , 65726@debbugs.gnu.org, 65726-done@debbugs.gnu.org Received: via spool by 65726-submit@debbugs.gnu.org id=B65726.169433226027860 (code B ref 65726); Sun, 10 Sep 2023 07:51:02 +0000 Received: (at 65726) by debbugs.gnu.org; 10 Sep 2023 07:51:00 +0000 Received: from localhost ([127.0.0.1]:48983 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qfFDg-0007FH-0F for submit@debbugs.gnu.org; Sun, 10 Sep 2023 03:51:00 -0400 Received: from mail-lj1-x22e.google.com ([2a00:1450:4864:20::22e]:51499) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qfFDe-0007F2-6Z; Sun, 10 Sep 2023 03:50:59 -0400 Received: by mail-lj1-x22e.google.com with SMTP id 38308e7fff4ca-2bcb0b973a5so55023121fa.3; Sun, 10 Sep 2023 00:50:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1694332249; x=1694937049; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:mime-version:references:in-reply-to :from:from:to:cc:subject:date:message-id:reply-to; bh=ipmv05Rmn3CxfArNhBeA/eGiaLeumx7IzIoQvh6+VZU=; b=Eb/5TUSZ3VH4P9veKpYE/g2O/07O8dsGTUvLtmQpHpwDiTUElyyAs5jScbcDnNNeaD L4DXVrgzv/uA+jMlD/q8k7Bslw3uNPudaXl+hQrB95MMfEKXsd4xjGQ27Jn6vybILCA/ U93EGf4nqLnqhJ6Pld+XANbJIfJ1eakCfaqSSeoBIsh266iLZbN9pC3SXFU6pd+kCgdZ 45glExOF2y1JNVxzhxHFZW4nmfBV4Exh//oC1mVGmg1mnBCQWF5AtReEU7d0OAFPwFlF jVErklkp4HuxazA7rcPFHEAB1o/EAhMil9K8i3rUGV6fX9ZC2poP5zKHM6ivmjq3P6/s ByCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694332249; x=1694937049; h=cc:to:subject:message-id:date:mime-version:references:in-reply-to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ipmv05Rmn3CxfArNhBeA/eGiaLeumx7IzIoQvh6+VZU=; b=lk/sNx8ioktmYNNOSyct9lsGqjtPL4goBHmprKKKDJVK38QLp8mxCUBhATN5urUm59 Jw5n62pffQ91Sd7B+Wh5k6RHkQE0DB5MHVsyaKOCMMvmY6XFLz5aAJAM23xivBse9I11 NOuINcyKxoMUtz6Bokvlkiui6SPQ4pKrpO4euAaoVkc4Cyk30kZpYS8radXXiGqly+vm 2VK5aKHMmoloQv1loqoU2m9jYMpr0wQrjc0L9cynmxHKFWNk/N/sqQ3iiwcj8EEi++y3 zisI3W9ZPOSaeLtcSiULyZZDK6586InGmyV86Qsk+NVtGqN7OHrDqv5lUzb6fC9aorEg u09Q== X-Gm-Message-State: AOJu0Yxr9EdFE60FoYqT40QsjocsIse5h8arK+1o0rR+5OqWT7vID5Y/ J9pv2V9+thaBuWuQvpVpdjkBzCY3Bxisd8XyMFcJAKI9 X-Google-Smtp-Source: AGHT+IEAuzKeVv2lLDH6QiqnfHPf6ONicErhMSi/Ya3Ikua6RE5xTmtC6OZ/6WWc5gzVe3qxe3F0GU2czgt9e5VOm9M= X-Received: by 2002:a2e:97d7:0:b0:2b9:f13b:6139 with SMTP id m23-20020a2e97d7000000b002b9f13b6139mr5792930ljj.20.1694332248794; Sun, 10 Sep 2023 00:50:48 -0700 (PDT) Received: from 753933720722 named unknown by gmailapi.google.com with HTTPREST; Sun, 10 Sep 2023 00:50:48 -0700 From: Stefan Kangas In-Reply-To: (Stefan Monnier's message of "Mon, 04 Sep 2023 13:12:45 -0400") References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> <831qfe53t6.fsf@gnu.org> MIME-Version: 1.0 Date: Sun, 10 Sep 2023 00:50:48 -0700 Message-ID: Content-Type: text/plain; charset="UTF-8" X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Stefan Monnier writes: >> Yes, with this patch the problem is gone. > > Thanks, pushed to `emacs-29`. Is there anything more to do here, or can this bug report be closed? From unknown Sat Jun 21 03:24:18 2025 MIME-Version: 1.0 X-Mailer: MIME-tools 5.505 (Entity 5.505) X-Loop: help-debbugs@gnu.org From: help-debbugs@gnu.org (GNU bug Tracking System) To: martin rudalics Subject: bug#65726: closed (Re: bug#65726: 29.1.50; Crash in regexp engine) Message-ID: References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> X-Gnu-PR-Message: they-closed 65726 X-Gnu-PR-Package: emacs Reply-To: 65726@debbugs.gnu.org Date: Sun, 10 Sep 2023 07:51:02 +0000 Content-Type: multipart/mixed; boundary="----------=_1694332262-27884-1" This is a multi-part message in MIME format... ------------=_1694332262-27884-1 Content-Disposition: inline Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Your bug report #65726: 29.1.50; Crash in regexp engine which was filed against the emacs package, has been closed. The explanation is attached below, along with your original report. If you require more details, please reply to 65726@debbugs.gnu.org. --=20 65726: https://debbugs.gnu.org/cgi/bugreport.cgi?bug=3D65726 GNU Bug Tracking System Contact help-debbugs@gnu.org with problems ------------=_1694332262-27884-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at 65726-done) by debbugs.gnu.org; 10 Sep 2023 07:51:00 +0000 Received: from localhost ([127.0.0.1]:48985 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qfFDg-0007FO-9v for submit@debbugs.gnu.org; Sun, 10 Sep 2023 03:51:00 -0400 Received: from mail-lj1-x22e.google.com ([2a00:1450:4864:20::22e]:51499) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qfFDe-0007F2-6Z; Sun, 10 Sep 2023 03:50:59 -0400 Received: by mail-lj1-x22e.google.com with SMTP id 38308e7fff4ca-2bcb0b973a5so55023121fa.3; Sun, 10 Sep 2023 00:50:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1694332249; x=1694937049; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:mime-version:references:in-reply-to :from:from:to:cc:subject:date:message-id:reply-to; bh=ipmv05Rmn3CxfArNhBeA/eGiaLeumx7IzIoQvh6+VZU=; b=Eb/5TUSZ3VH4P9veKpYE/g2O/07O8dsGTUvLtmQpHpwDiTUElyyAs5jScbcDnNNeaD L4DXVrgzv/uA+jMlD/q8k7Bslw3uNPudaXl+hQrB95MMfEKXsd4xjGQ27Jn6vybILCA/ U93EGf4nqLnqhJ6Pld+XANbJIfJ1eakCfaqSSeoBIsh266iLZbN9pC3SXFU6pd+kCgdZ 45glExOF2y1JNVxzhxHFZW4nmfBV4Exh//oC1mVGmg1mnBCQWF5AtReEU7d0OAFPwFlF jVErklkp4HuxazA7rcPFHEAB1o/EAhMil9K8i3rUGV6fX9ZC2poP5zKHM6ivmjq3P6/s ByCg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694332249; x=1694937049; h=cc:to:subject:message-id:date:mime-version:references:in-reply-to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=ipmv05Rmn3CxfArNhBeA/eGiaLeumx7IzIoQvh6+VZU=; b=lk/sNx8ioktmYNNOSyct9lsGqjtPL4goBHmprKKKDJVK38QLp8mxCUBhATN5urUm59 Jw5n62pffQ91Sd7B+Wh5k6RHkQE0DB5MHVsyaKOCMMvmY6XFLz5aAJAM23xivBse9I11 NOuINcyKxoMUtz6Bokvlkiui6SPQ4pKrpO4euAaoVkc4Cyk30kZpYS8radXXiGqly+vm 2VK5aKHMmoloQv1loqoU2m9jYMpr0wQrjc0L9cynmxHKFWNk/N/sqQ3iiwcj8EEi++y3 zisI3W9ZPOSaeLtcSiULyZZDK6586InGmyV86Qsk+NVtGqN7OHrDqv5lUzb6fC9aorEg u09Q== X-Gm-Message-State: AOJu0Yxr9EdFE60FoYqT40QsjocsIse5h8arK+1o0rR+5OqWT7vID5Y/ J9pv2V9+thaBuWuQvpVpdjkBzCY3Bxisd8XyMFcJAKI9 X-Google-Smtp-Source: AGHT+IEAuzKeVv2lLDH6QiqnfHPf6ONicErhMSi/Ya3Ikua6RE5xTmtC6OZ/6WWc5gzVe3qxe3F0GU2czgt9e5VOm9M= X-Received: by 2002:a2e:97d7:0:b0:2b9:f13b:6139 with SMTP id m23-20020a2e97d7000000b002b9f13b6139mr5792930ljj.20.1694332248794; Sun, 10 Sep 2023 00:50:48 -0700 (PDT) Received: from 753933720722 named unknown by gmailapi.google.com with HTTPREST; Sun, 10 Sep 2023 00:50:48 -0700 From: Stefan Kangas In-Reply-To: (Stefan Monnier's message of "Mon, 04 Sep 2023 13:12:45 -0400") References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> <831qfe53t6.fsf@gnu.org> MIME-Version: 1.0 Date: Sun, 10 Sep 2023 00:50:48 -0700 Message-ID: Subject: Re: bug#65726: 29.1.50; Crash in regexp engine To: Stefan Monnier Content-Type: text/plain; charset="UTF-8" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: 65726-done Cc: rudalics@gmx.at, Eli Zaretskii , 65726@debbugs.gnu.org, 65726-done@debbugs.gnu.org X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Stefan Monnier writes: >> Yes, with this patch the problem is gone. > > Thanks, pushed to `emacs-29`. Is there anything more to do here, or can this bug report be closed? ------------=_1694332262-27884-1 Content-Type: message/rfc822 Content-Disposition: inline Content-Transfer-Encoding: 7bit Received: (at submit) by debbugs.gnu.org; 4 Sep 2023 07:47:14 +0000 Received: from localhost ([127.0.0.1]:48173 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qd4Ih-00042Q-57 for submit@debbugs.gnu.org; Mon, 04 Sep 2023 03:47:13 -0400 Received: from lists.gnu.org ([2001:470:142::17]:53346) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qd4Id-000413-AG for submit@debbugs.gnu.org; Mon, 04 Sep 2023 03:47:10 -0400 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 1qd4I6-0002p2-Bn for bug-gnu-emacs@gnu.org; Mon, 04 Sep 2023 03:46:44 -0400 Received: from mout.gmx.net ([212.227.15.18]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qd4I0-0001LH-BE for bug-gnu-emacs@gnu.org; Mon, 04 Sep 2023 03:46:34 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=gmx.at; s=s31663417; t=1693813585; x=1694418385; i=rudalics@gmx.at; bh=tl7OdoJmUnIyyVf9dqChQBLbTiQYzxHwVzbjP6qxoa0=; h=X-UI-Sender-Class:Date:To:From:Subject; b=LRuUW823q56BHl/ISld+N9HgXSOQSucXix/mOtr48jazGWaoUmEFIiwAUKVT1f63y/PGhzT Jda7M1nmGhz8xUoE/SI14eS9pQSvN3brMJl5ftU37LsyePkp8ELZ0cwgwmgKc19sCzku6hUrH mz7yzjqlC/CeyKiM1x33sCXbQqSKobIRwIhAEjgmaX4lbAmaG1KcfJn8LaDyXj45wGtu3AdEj zDKJJ4oMM4Ynrzpm/mfflU3CFSEA/AtESURVNbk0zUNt9MUNf/2bGZZhEBQlCynW/mzA2Kc0N lYGg+w6HnUykBUme/e0o3E8m8V2jQwBGNNtL40DSj649TOxBuj5A== X-UI-Sender-Class: 724b4f7f-cbec-4199-ad4e-598c01a50d3a Received: from [192.168.1.100] ([213.142.96.79]) by mail.gmx.net (mrgmx005 [212.227.17.190]) with ESMTPSA (Nemesis) id 1MxUnz-1pjjg02LN3-00xuuJ for ; Mon, 04 Sep 2023 09:46:25 +0200 Content-Type: multipart/mixed; boundary="------------Kfhqe8JD14mDWxvKDrDeWHz4" Message-ID: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> Date: Mon, 4 Sep 2023 09:46:24 +0200 MIME-Version: 1.0 Content-Language: en-US To: Bug-Gnu-Emacs From: martin rudalics Subject: 29.1.50; Crash in regexp engine X-Provags-ID: V03:K1:xHHGp4u2x45nZryjppPaUZIWps53FMqOAApXGHQLhhAErLMGuqz Ur+/KVVWlZOilj1eU+wzt5jNdVYudIGy3R5CZQkc4pvAvKBtY+ILlPbzFJczlPsG4MvCTcK 7tGurXL0ud3tdNanXDmhr+chHRamk7K24++LR/Y+B4AXNEM09LK8MSyred/OGGpvgxtx1GD y91DhZW+/vJP4yVIxG+YA== X-Spam-Flag: NO UI-OutboundReport: notjunk:1;M01:P0:VZAye0MClF0=;FADIV6goAEt+E/COg99XqeZPjkF cXmjWpExALpnVC36zTWcPQhlIhmOFRTtglVVSywTzyRjQb+P5z5m42h7c/FaxSR5QI4nCmH2a fNwuYKbZCJiOeWBDz2Yipjs1BqZjxP2HX8XvYE8+5GBpmjV6YAWSkaRRpnyy/eGMOJHYisiWV M9CdfxryNAQDvOEgqK3f6VCSkrDujsEdmgZHJXMLqhuhDrACRhUfhXvuCVdO9TESNrB5XS+Gb NAca5x2k8GUPoSn8ns9kdvOUi2pq/rneTlpV7DWC0GqmJchxSPsg/olXqFM7aYfB6LT/Bht/K AMLVetyg4uzUxIAHSR87y3oiXgzcVxiDynSczYukWDEKxsqmQnwOVVY8TjtJNPg7gea5ozNTU Q4Zj2lKR7jDRfaHxYI15hGGDTCPY4uy3rc+TH/mZ0w8pKz1TGMuqGWH8NWdGbzdzBjoA5fSHQ O1AInXgqCULK29nV6taYtBqX841rpUMXF7XqKy246buFTz00o93BwEpOWD+NPD7jir7Vo+hf9 SYRmwqSVDi+dvvY7i3fs8Aqnp6kzriA9AtV9mS/yGyCGJTCUY0GE3o7mnM8JAMElQvxDKA0X1 AAagCxdIbeji+aooPy0U11ZHN3HCmmPZmNJIOu72aXUQu3SPxaqb+pR9b1Mu6CAGKKqlsjuUh g76h/BcjEQWjHuIYsXXnEYVmhBFNHYLqW27/Pdyeli3rsLcK5TmjEM6LY0M3snG3RuZgjvwcC NL+0zunOyyMBtg0fsues8nRloNFBNBsqSFDjlq6T1pr1ZhT72YLU/Yds1b6uwZeDkrZmhYQKv kIS8o6Ew5zfve0qknavwXG1i5/xkhfm8psQ5K01yJwSo7e4H2Yd26r0K4x5bwh7NHdBsQX+wE BgScMs2hIvIxH8qI0PIcQWjBBTTj2aacgKFZIuf6zrZ79g//0zKyz40oSFRue4DinPs5I5Fcl +dW2qBRfdf12w8s2P4jWKSirKRM= Received-SPF: pass client-ip=212.227.15.18; envelope-from=rudalics@gmx.at; helo=mout.gmx.net X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, FREEMAIL_FROM=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Spam-Score: 1.0 (+) X-Debbugs-Envelope-To: submit X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -0.0 (/) This is a multi-part message in MIME format. --------------Kfhqe8JD14mDWxvKDrDeWHz4 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit With emacs -Q load the attached file elinfo.el. Now type C-h S split-window RET C-x o C-c C-g This crashes Emacs here with Thread 1 "emacs" received signal SIGSEGV, Segmentation fault. 0x000000000068810a in skip_noops (p=, pend=) at ../../src/regex-emacs.c:3556 3556 { and an infinite backtrace starting with Python Exception Cannot access memory at address 0x7fffff66fff8: #0 0x000000000068810a in skip_noops (p=#1 0x0000000000688823 in mutually_exclusive_p (bufp=0xec9c30 , p1=0x1fcee74 "\004\005", p2=0x1fcee81 "\016\063") at ../../src/regex-emacs.c:3665 #2 0x0000000000688e19 in mutually_exclusive_p (bufp=0xec9c30 , p1=0x1fcee74 "\004\005", p2=0x1fcee81 "\016\063") at ../../src/regex-emacs.c:3838 #3 0x0000000000688e3c in mutually_exclusive_p (bufp=0xec9c30 , p1=0x1fcee74 "\004\005", p2=0x1fceeba "\004\020") at ../../src/regex-emacs.c:3839 #4 0x0000000000688e3c in mutually_exclusive_p (bufp=0xec9c30 , p1=0x1fcee74 "\004\005", p2=0x1fcee84 "\002\001@\004\020") at ../../src/regex-emacs.c:3839 #5 0x0000000000688e19 in mutually_exclusive_p (bufp=0xec9c30 , p1=0x1fcee74 "\004\005", p2=0x1fcee81 "\016\063") at ../../src/regex-emacs.c:3838 ... The same scenario worked well with Emacs 22 through 28. martin In GNU Emacs 29.1.50 (build 1, x86_64-pc-linux-gnu, GTK+ Version 3.24.5, cairo version 1.16.0) of 2023-09-03 built on restno Repository revision: f1e4cbe72aa4da9351cbbcd209d9233c68dd9fbb Repository branch: emacs-29 Windowing system distributor 'The X.Org Foundation', version 11.0.12004000 System Description: Debian GNU/Linux 10 (buster) Configured using: 'configure --with-gif=ifavailable --with-tiff=ifavailable --with-gnutls=no --without-pop --enable-gcc-warnings=warn-only --enable-checking=yes,glyphs --enable-check-lisp-object-type=yes 'CFLAGS=-O0 -g3 -no-pie -Wno-missing-braces'' Configured features: CAIRO DBUS FREETYPE GIF GLIB GSETTINGS HARFBUZZ JPEG LIBSELINUX MODULES NOTIFY INOTIFY PDUMPER PNG SECCOMP SOUND THREADS TOOLKIT_SCROLL_BARS X11 XDBE XIM XINPUT2 XPM GTK3 ZLIB Important settings: value of $LANG: de_AT.utf8 value of $XMODIFIERS: @im=ibus locale-coding-system: utf-8-unix Major mode: Lisp Interaction Minor modes in effect: tooltip-mode: t global-eldoc-mode: t eldoc-mode: t show-paren-mode: t electric-indent-mode: t mouse-wheel-mode: t tool-bar-mode: t menu-bar-mode: t file-name-shadow-mode: t global-font-lock-mode: t font-lock-mode: t blink-cursor-mode: t line-number-mode: t indent-tabs-mode: t transient-mark-mode: t auto-composition-mode: t auto-encryption-mode: t auto-compression-mode: t Load-path shadows: None found. Features: (shadow sort mail-extr emacsbug message mailcap yank-media puny dired dired-loaddefs rfc822 mml mml-sec password-cache epa derived epg rfc6068 epg-config gnus-util text-property-search time-date subr-x mm-decode mm-bodies mm-encode mail-parse rfc2231 mailabbrev gmm-utils mailheader cl-loaddefs cl-lib sendmail rfc2047 rfc2045 ietf-drums mm-util mail-prsvr mail-utils elinfo texinfo texinfo-loaddefs info rmc iso-transl tooltip cconv eldoc paren electric uniquify ediff-hook vc-hooks lisp-float-type elisp-mode mwheel term/x-win x-win term/common-win x-dnd tool-bar dnd fontset image regexp-opt fringe tabulated-list replace newcomment text-mode lisp-mode prog-mode register page tab-bar menu-bar rfn-eshadow isearch easymenu timer select scroll-bar mouse jit-lock font-lock syntax font-core term/tty-colors frame minibuffer nadvice seq simple cl-generic indonesian philippine cham georgian utf-8-lang misc-lang vietnamese tibetan thai tai-viet lao korean japanese eucjp-ms cp51932 hebrew greek romanian slovak czech european ethiopic indian cyrillic chinese composite emoji-zwj charscript charprop case-table epa-hook jka-cmpr-hook help abbrev obarray oclosure cl-preloaded button loaddefs theme-loaddefs faces cus-face macroexp files window text-properties overlay sha1 md5 base64 format env code-pages mule custom widget keymap hashtable-print-readable backquote threads dbusbind inotify dynamic-setting system-font-setting font-render-setting cairo move-toolbar gtk x-toolkit xinput2 x multi-tty make-network-process emacs) Memory information: ((conses 16 45758 8352) (symbols 48 5682 0) (strings 32 15622 2110) (string-bytes 1 431024) (vectors 16 10081) (vector-slots 8 157669 13073) (floats 8 26 23) (intervals 56 218 0) (buffers 976 10)) --------------Kfhqe8JD14mDWxvKDrDeWHz4 Content-Type: text/x-emacs-lisp; charset=UTF-8; name="elinfo.el" Content-Disposition: attachment; filename="elinfo.el" Content-Transfer-Encoding: base64 Ozs7IGVsaW5mby5lbCAtLS0gRWxpc3AgSW5mbyBhbmQgVGV4aW5mbyBzdXBwb3J0IHJvdXRp bmVzCgo7OyBDb3B5cmlnaHQgKEMpIDIwMDkgTWFydGluIFJ1ZGFsaWNzCgo7OyBUaW1lLXN0 YW1wOiAiMjAyMS0wNi0wOSAxODo0NToyOSBtYXJ0aW4iCjs7IEF1dGhvcjogTWFydGluIFJ1 ZGFsaWNzIDxydWRhbGljc0BnbXguYXQ+Cgo7OyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0 d2FyZTogeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo7OyBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxp c2hlZCBieQo7OyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lv biAzIG9mIHRoZSBMaWNlbnNlLCBvcgo7OyAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2 ZXJzaW9uLgoKOzsgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo YXQgaXQgd2lsbCBiZSB1c2VmdWwsCjs7IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0 aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCjs7IE1FUkNIQU5UQUJJTElUWSBv ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKOzsgR05VIEdl bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KCjs7IFlvdSBzaG91bGQg aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl Cjs7IGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cu Z251Lm9yZy9saWNlbnNlcy8+LgoKOzs7IENvbW1lbnRhcnk6Cgo7OyBUaGlzIGZpbGUgcHJv dmlkZXMgZnVuY3Rpb25zIGZvciBjaGVja2luZyB0aGUgdmFsaWRpdHkgb2YgRW1hY3MnIElu Zm8KOzsgZmlsZXMsIG5hdmlnYXRpbmcgYmV0d2VlbiBFbWFjcycgSW5mbyBmaWxlcyBhbmQg Y29ycmVzcG9uZGluZyBUZXhpbmZvCjs7IGJ1ZmZlcnMsIGFuZCBmb3IgY3JlYXRpbmcgVGV4 aW5mbyBlbnRyaWVzIGZyb20gZG9jdW1lbnRhdGlvbiBzdHJpbmdzLgoKKHJlcXVpcmUgJ2lu Zm8pCihyZXF1aXJlICd0ZXhpbmZvKQoKKGRlZmdyb3VwIGVsaW5mbyBuaWwKICAiRWxpbmZv LiIKICA6dmVyc2lvbiAiMjMuMiIKICA6Z3JvdXAgJ2xpc3ApCgo7OyBfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwo7Owo7OzsJCQkgIFV0aWxpdHkgRnVuY3Rpb25zCjs7IF9fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fCjs7Cgo7OyBNb3ZlIHRvIGFuZCByZXR1cm4gc3RhcnQgb2YgZmlyc3Qg bm9uLXdoaXRlc3BhY2UgY2hhciBhZnRlciBgcG9pbnQnLgooZGVmdW4gZWxpbmZvLS1tb3Zl LXRvLW5leHQgKCkKICAoZm9yd2FyZC1jb21tZW50IChidWZmZXItc2l6ZSkpCiAgKHBvaW50 KSkKCjs7IE1vdmUgdG8gZW5kIG9mIGFuZCByZXR1cm4gbmV4dCBuYW1lLgooZGVmdW4gZWxp bmZvLS1nZXQtbmV4dCAoKQogIChsZXQgKChmcm9tIChlbGluZm8tLW1vdmUtdG8tbmV4dCkp KQogICAgKHNraXAtY2hhcnMtZm9yd2FyZCAiXiBcdFxuIikKICAgIChidWZmZXItc3Vic3Ry aW5nLW5vLXByb3BlcnRpZXMgZnJvbSAocG9pbnQpKSkpCgo7OyBMaWtlIGBlbGluZm8tLWdl dC1uZXh0JyBidXQgZG9uJ3QgbGVhdmUgY3VycmVudCBsaW5lLgooZGVmdW4gZWxpbmZvLS1n ZXQtbmV4dC1hcmcgKCkKICAoc2F2ZS1yZXN0cmljdGlvbgogICAgKG5hcnJvdy10by1yZWdp b24gKHBvaW50KSAobGluZS1lbmQtcG9zaXRpb24pKQogICAgKGVsaW5mby0tZ2V0LW5leHQp KSkKCjs7IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCjs7Cjs7OwkJICBDaGVja2luZyBhbmQg RWxpbmZvIExvZyBVdGlsaXRpZXMKOzsgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KOzsKCihk ZWZjdXN0b20gZWxpbmZvLWxvZy13YXJuaW5ncyBuaWwKICAiTm9uLW5pbCBtZWFucyBsb2cg d2FybmluZ3MgaW4gRWxpbmZvIExvZyBidWZmZXIuIgogIDpncm91cCAnZWxpbmZvCiAgOnR5 cGUgJ2Jvb2xlYW4KICA6dmVyc2lvbiAiMjMuMiIpCgooZGVmY3VzdG9tIGVsaW5mby1zaG93 LWRlZmluaXRpb24gdAogICJOb24tbmlsIG1lYW5zIHNob3cgZGVmaW5pdGlvbnMgd2hlbiBi cm93c2luZyBFbGluZm8gTG9ncy4iCiAgOmdyb3VwICdlbGluZm8KICA6dHlwZSAnYm9vbGVh bgogIDp2ZXJzaW9uICIyMy4yIikKCihkZWZjdXN0b20gZWxpbmZvLWJhbGFuY2Utd2luZG93 cyB0CiAgIk5vbi1uaWwgbWVhbnMgYmFsYW5jZSB3aW5kb3dzIHdoZW4gYnJvd3NpbmcgRWxp bmZvIExvZ3MuIgogIDpncm91cCAnZWxpbmZvCiAgOnR5cGUgJ2Jvb2xlYW4KICA6dmVyc2lv biAiMjMuMiIpCgooZGVmY3VzdG9tIGVsaW5mby1yZXVzZS13aW5kb3dzIHQKICAiTm9uLW5p bCBtZWFucyByZXVzZSB3aW5kb3dzIHdoZW4gYnJvd3NpbmcgRWxpbmZvIExvZ3MuIgogIDpn cm91cCAnZWxpbmZvCiAgOnR5cGUgJ2Jvb2xlYW4KICA6dmVyc2lvbiAiMjMuMiIpCgooZGVm Y3VzdG9tIGVsaW5mby1sb2ctbG9jYXRpb24tZmFjZSAndW5kZXJsaW5lCiAgIkZhY2UgbmFt ZSBmb3IgaGlnaGxpZ2h0aW5nIGxvY2F0aW9ucyBpbiBFbGluZm8gTG9ncy4iCiAgOmdyb3Vw ICdlbGluZm8KICA6dHlwZSAnZmFjZQogIDp2ZXJzaW9uICIyMy4yIikKCihkZWZjdXN0b20g ZWxpbmZvLWxvZy1kZWYtZmFjZSBmb250LWxvY2stY29uc3RhbnQtZmFjZQogICJGYWNlIG5h bWUgZm9yIGhpZ2hsaWdodGluZyB0aGluZ3MgaW4gRWxpbmZvIExvZ3MuIgogIDpncm91cCAn ZWxpbmZvCiAgOnR5cGUgJ2ZhY2UKICA6dmVyc2lvbiAiMjMuMiIpCgo7OyBXaW5kb3cgbmF2 aWdhdGlvbi4KKGRlZnZhciBlbGluZm8tc291cmNlLXdpbmRvdyBuaWwKICAiVGhlIHdpbmRv dyB3aGVyZSB0aGUgVGV4aW5mbyBzb3VyY2UgYnVmZmVyIHdhcyBkaXNwbGF5ZWQuIikKKGRl ZnZhciBlbGluZm8tZGVmLXdpbmRvdyBuaWwKICAiVGhlIHdpbmRvdyB3aGVyZSB0aGUgZGVm aW5pdGlvbiBvZiBzb21lIHN5bWJvbCB3YXMgZGlzcGxheWVkLiIpCgooZGVmdW4gZWxpbmZv LXNob3ctZGVmaW5pdGlvbiAoc3ltYm9sICZvcHRpb25hbCB0eXBlKQogICJTaG93IGRlZmlu aXRpb24gb2YgU1lNQk9MIGluIGEgc3VpdGFibGUgd2luZG93LgpGb3IgY29tcGF0aWJpbGl0 eSB3aXRoIGBmaW5kLWRlZmluaXRpb24tbm9zZWxlY3QnIFRZUEUgbXVzdCBiZQpvbWl0dGVk IG9yIG5pbCBmb3IgZnVuY3Rpb25zIGFuZCBgZGVmdmFyJyBmb3IgdmFyaWFibGVzLiIKICA7 OyBgZmluZC1kZWZpbml0aW9uLW5vc2VsZWN0JyBpcyBhdXRvbG9hZGVkIGluIGZpbmQtZnVu Yy5lbCBhbmQgc2hvdWxkCiAgOzsgcmV0dXJuIGEgY29ucyB3aG9zZSBjYXIgaXMgdGhlIGJ1 ZmZlciBjb250YWluaW5nIHRoZSBkZWZpbml0aW9uCiAgOzsgd2hpbGUgaXRzIGNkciBjb250 YWlucyB0aGUgcG9zaXRpb24gd2l0aGluIHRoZSBidWZmZXIuCiAgKGxldCAoKGJ1ZmZlci1w b3NpdGlvbi1wYWlyIChzYXZlLWV4Y3Vyc2lvbgoJCQkJKGZpbmQtZGVmaW5pdGlvbi1ub3Nl bGVjdCBzeW1ib2wgdHlwZSkpKSkKICAgICh3aGVuIGJ1ZmZlci1wb3NpdGlvbi1wYWlyCiAg ICAgIChsZXQgKChidWZmZXIgKGNhciBidWZmZXItcG9zaXRpb24tcGFpcikpCgkgICAgKHBv c2l0aW9uIChjZHIgYnVmZmVyLXBvc2l0aW9uLXBhaXIpKSkKCShpZiAoYW5kIGVsaW5mby1y ZXVzZS13aW5kb3dzICh3aW5kb3ctbGl2ZS1wIGVsaW5mby1kZWYtd2luZG93KSkKCSAgICAo c2V0LXdpbmRvdy1idWZmZXIgZWxpbmZvLWRlZi13aW5kb3cgYnVmZmVyKQoJICAoc2V0cSBl bGluZm8tZGVmLXdpbmRvdyAoZGlzcGxheS1idWZmZXIgYnVmZmVyKSkpCgk7OyBSZWNvcmQg d2luZG93L2J1ZmZlciByZWxhdGlvbnNoaXAuCgkoc2V0LXdpbmRvdy1wb2ludCBlbGluZm8t ZGVmLXdpbmRvdyBwb3NpdGlvbikKCSh3aXRoLXNlbGVjdGVkLXdpbmRvdyBlbGluZm8tZGVm LXdpbmRvdwoJICA7OyBQdXQgdGhlIGRlZmluaXRpb24gYXQgdGhlIHRvcCBvZiB0aGUgd2lu ZG93LgoJICAocmVjZW50ZXIgMSkpKSkpKQoKKGRlZnVuIGVsaW5mby1zaG93LXNvdXJjZSAo Jm9wdGlvbmFsIGxvZy1wb3MpCiAgIlNob3cgVGV4aW5mbyBzb3VyY2UgY29ycmVzcG9uZGlu ZyB0byBFbGluZm8gTG9nIGVudHJ5IGF0IExPRy1QT1MuCkxPRy1QT1MgbmlsIG9yIG9taXR0 ZWQgbWVhbnMgY29uc2lkZXIgdGhlIGVudHJ5IGxvY2F0ZWQgYXQKYHBvaW50Jy4KClRoaXMg ZnVuY3Rpb24gbWF5IGFsc28gZGlzcGxheSBhIGNvcnJlc3BvbmRpbmcgZGVmaW5pdGlvbiBp biBjYXNlCmBlbGluZm8tc2hvdy1kZWZpbml0aW9uJyBpcyBub24tbmlsIGFuZCBiYWxhbmNl IHRoZSByZXNwZWN0aXZlCndpbmRvd3MgcHJvdmlkZWQgYGVsaW5mby1iYWxhbmNlLXdpbmRv d3MnIGlzIG5vbi1uaWwuIgogIChzYXZlLWV4Y3Vyc2lvbgogICAgKGxldCogKChsb2ctcG9z IChvciBsb2ctcG9zIChwb2ludCkpKQoJICAgKGZpbGUtbmFtZSAoZ2V0LXRleHQtcHJvcGVy dHkgbG9nLXBvcyAnZWxpbmZvLWZpbGUtbmFtZSkpCgkgICAocG9zaXRpb24gKGdldC10ZXh0 LXByb3BlcnR5IGxvZy1wb3MgJ2VsaW5mby1wb3NpdGlvbikpCgkgICAoYnVmZmVyIChmaW5k LWZpbGUtbm9zZWxlY3QgZmlsZS1uYW1lKSkKCSAgIGJhbGFuY2UpCiAgICAgIDs7IERpc3Bs YXkgVGV4aW5mbyBzb3VyY2UuCiAgICAgIChpZiAoYW5kIGVsaW5mby1yZXVzZS13aW5kb3dz ICh3aW5kb3ctbGl2ZS1wIGVsaW5mby1zb3VyY2Utd2luZG93KSkKCSAgKHNldC13aW5kb3ct YnVmZmVyIGVsaW5mby1zb3VyY2Utd2luZG93IGJ1ZmZlcikKCShzZXRxIGVsaW5mby1zb3Vy Y2Utd2luZG93IChkaXNwbGF5LWJ1ZmZlciBidWZmZXIpKSkKICAgICAgOzsgU2V0IHdpbmRv dy9idWZmZXIgcmVsYXRpb25zaGlwLgogICAgICAoc2V0LXdpbmRvdy1wb2ludCBlbGluZm8t c291cmNlLXdpbmRvdyBwb3NpdGlvbikKICAgICAgKHdpdGgtc2VsZWN0ZWQtd2luZG93IGVs aW5mby1zb3VyY2Utd2luZG93Cgk7OyBXZSBjb3VsZCBtYWtlIHRoZSAiMSIgY3VzdG9taXph YmxlLgoJKHJlY2VudGVyIDEpKQogICAgICA7OyBEaXNwbGF5IGRlZmluaXRpb24gaWYgcG9z c2libGUuCiAgICAgIChjb25kCiAgICAgICAoKG5vdCBlbGluZm8tc2hvdy1kZWZpbml0aW9u KSkKICAgICAgICgobWVtcSAoZ2V0LXRleHQtcHJvcGVydHkgbG9nLXBvcyAnZWxpbmZvLXR5 cGUpCgkgICAgICAnKGNvbW1hbmQgbm8tY29tbWFuZCBhcmctbWlzbWF0Y2gpKQoJKGVsaW5m by1zaG93LWRlZmluaXRpb24KCSAoaW50ZXJuIChnZXQtdGV4dC1wcm9wZXJ0eSBsb2ctcG9z ICdlbGluZm8tbmFtZSkpKQoJKHNldHEgYmFsYW5jZSB0KSkKICAgICAgICgobWVtcSAoZ2V0 LXRleHQtcHJvcGVydHkgbG9nLXBvcyAnZWxpbmZvLXR5cGUpCgkgICAgICAnKG9wdGlvbiBu by1vcHRpb24pKQoJKGVsaW5mby1zaG93LWRlZmluaXRpb24KCSAoaW50ZXJuIChnZXQtdGV4 dC1wcm9wZXJ0eSBsb2ctcG9zICdlbGluZm8tbmFtZSkpICdkZWZ2YXIpCgkoc2V0cSBiYWxh bmNlIHQpKSkKICAgICAgOzsgQmFsYW5jZSB3aW5kb3dzIGlmIHBvc3NpYmxlLgogICAgICAo d2hlbiAoYW5kIGVsaW5mby1iYWxhbmNlLXdpbmRvd3MgYmFsYW5jZQoJCSAoZXEgKHdpbmRv dy1mcmFtZSBlbGluZm8tc291cmNlLXdpbmRvdykKCQkgICAgICh3aW5kb3ctZnJhbWUgZWxp bmZvLWRlZi13aW5kb3cpKSkKCTs7IGBiYWxhbmNlLXdpbmRvd3MnIHNob3VsZCBiYWxhbmNl IHNpYmxpbmdzIG9mIHRoZQoJOzsgc291cmNlLXdpbmRvdyBvbmx5LgoJKGJhbGFuY2Utd2lu ZG93cyBlbGluZm8tc291cmNlLXdpbmRvdykpKSkpCgo7OyBUaGUgbmV4dC0vcHJldmlvdXMt ZXJyb3IgZnVuY3Rpb25zIGhhdmUgYmVlbiBjb3BpZWQgZnJvbSBjb21waWxlLmVsCjs7IGFu ZCBzbGlnaHRseSBhZGFwdGVkIGZvciBvdXIgbmVlZHMuICBGb3IgVUkgYW5kIGtleWJpbmRp bmdzIHN0aWNrIHRvCjs7IHRob3NlIHVzZWQgYnkgY29tcGlsZSBhbmQgcmVsYXRlZCBtb2Rl cy4gIEFsc28gcmV0YWluIHRoZSAtZXJyb3IKOzsgcG9zdGZpeCBmb3IgYWxsIGVudHJpZXMg YW5kIGRvbid0IG1vZGlmeSB0aGUgZG9jIHN0cmluZ3MgdG8gbWFrZSB0aGlzCjs7IGxvb2sg ZmFtaWxpYXIuCihkZWZ1biBlbGluZm8tbmV4dC1lcnJvciAobiAmb3B0aW9uYWwgb3RoZXIt ZmlsZSkKICAiU2hvdyBUZXhpbmZvIHNvdXJjZSBmb3IgbmV4dCBlbnRyeSBpbiBFbGluZm8g TG9nLgpQcmVmaXggYXJnIE4gc2F5cyBob3cgbWFueSBlbnRyaWVzIHRvIG1vdmUgZm9yd2Fy ZHMgXChiYWNrd2FyZHMsCmlmIG5lZ2F0aXZlKS4KCk9wdGlvbmFsIGFyZyBPVEhFUi1GSUxF LCBpZiBub24tbmlsLCBtZWFucyBmaW5kIGVudHJ5IGZvciBhIGZpbGUKdGhhdCBpcyBkaWZm ZXJlbnQgZnJvbSB0aGUgY3VycmVudCBvbmUuICBJbiB0aGF0IGNhc2UsIE4Kc3BlY2lmaWVz IHRoZSBudW1iZXIgb2YgZmlsZXMgd2hvc2UgZW50cmllcyBzaGFsbCBiZSBza2lwcGVkLgoK VGhpcyBmdW5jdGlvbiBtYXkgYWxzbyBkaXNwbGF5IGEgY29ycmVzcG9uZGluZyBkZWZpbml0 aW9uIGluIGNhc2UKYGVsaW5mby1zaG93LWRlZmluaXRpb24nIGlzIG5vbi1uaWwgYW5kIGJh bGFuY2UgdGhlIHJlc3BlY3RpdmUKd2luZG93cyBwcm92aWRlZCBgZWxpbmZvLWJhbGFuY2Ut d2luZG93cycgaXMgbm9uLW5pbC4iCiAgKGludGVyYWN0aXZlICJwIikKICAoaWYgb3RoZXIt ZmlsZQogICAgICAobGV0ICgobGFzdC1maWxlIChnZXQtdGV4dC1wcm9wZXJ0eSAocG9pbnQp ICdlbGluZm8tZmlsZS1uYW1lKSkKCSAgICAoY3VycmVudC1maWxlICIiKSkKCShpZiAoPiBu IDApCgkgICAgKHdoaWxlIChhbmQgKG5vdCAoZW9icCkpCgkJCShzZXRxIGN1cnJlbnQtZmls ZQoJCQkgICAgICAoZ2V0LXRleHQtcHJvcGVydHkgKHBvaW50KSAnZWxpbmZvLWZpbGUtbmFt ZSkpCgkJCShvciAoc3RyaW5nLWVxdWFsIGN1cnJlbnQtZmlsZSBsYXN0LWZpbGUpCgkJCSAg ICAoYW5kIChzZXRxIGxhc3QtZmlsZSBjdXJyZW50LWZpbGUpCgkJCQkgKD4gKHNldHEgbiAo MS0gbikpIDApKSkpCgkgICAgICAoZm9yd2FyZC1saW5lKSkKCSAgKHdoaWxlIChhbmQgKG5v dCAoYm9icCkpCgkJICAgICAgKHNldHEgY3VycmVudC1maWxlCgkJCSAgICAoZ2V0LXRleHQt cHJvcGVydHkgKHBvaW50KSAnZWxpbmZvLWZpbGUtbmFtZSkpCgkJICAgICAgKG9yIChzdHJp bmctZXF1YWwgY3VycmVudC1maWxlIGxhc3QtZmlsZSkKCQkJICAoYW5kIChzZXRxIGxhc3Qt ZmlsZSBjdXJyZW50LWZpbGUpCgkJCSAgICAgICAoPCAoc2V0cSBuICgxKyBuKSkgMCkpKSkK CSAgICAgIChmb3J3YXJkLWxpbmUgLTEpKSkpCiAgICAoZm9yd2FyZC1saW5lIG4pKQoKICAo ZWxpbmZvLXNob3ctc291cmNlKSkKCihkZWZ1biBlbGluZm8tbmV4dC1lcnJvci1mdW5jdGlv biAobiAmb3B0aW9uYWwgcmVzZXQpCiAgIk1vdmUgdG8gbmV4dCBlbnRyeSBpbiBFbGluZm8g TG9nIGFuZCBzaG93IGNvcnJlc3BvbmRpbmcgVGV4aW5mbyBzb3VyY2UuCk9wdGlvbmFsIGFy Z3VtZW50IFJFU0VUIG5vbi1uaWwgbWVhbnMgZ28gdG8gZmlyc3QgRWxpbmZvIExvZwplbnRy eS4gIFNlZSBhbHNvIGBlbGluZm8tbmV4dC1lcnJvcicuCgpUaGlzIGZ1bmN0aW9uIHByb3Zp ZGVzIHRoZSB2YWx1ZSBvZiBgbmV4dC1lcnJvci1mdW5jdGlvbicgaW4KRWxpbmZvIExvZyBi dWZmZXJzLiIKICAoaW50ZXJhY3RpdmUgInAiKQogICh3aGVuIHJlc2V0IChnb3RvLWNoYXIg KHBvaW50LW1pbikpKQogIChlbGluZm8tbmV4dC1lcnJvciBuKSkKCihkZWZ1biBlbGluZm8t cHJldmlvdXMtZXJyb3IgKG4pCiAgIlNob3cgVGV4aW5mbyBzb3VyY2UgY29ycmVzcG9uZGlu ZyB0byBwcmV2aW91cyBlbnRyeSBpbiBFbGluZm8gTG9nLgpQcmVmaXggYXJnIE4gc2F5cyBo b3cgbWFueSBlbnRyaWVzIHRvIG1vdmUgYmFja3dhcmRzIFwoZm9yd2FyZHMsCmlmIG5lZ2F0 aXZlKS4gIFNlZSBhbHNvIGBlbGluZm8tbmV4dC1lcnJvcicuIgogIChpbnRlcmFjdGl2ZSAi cCIpCiAgKGVsaW5mby1uZXh0LWVycm9yICgtIG4pKSkKCihkZWZ1biBlbGluZm8tbmV4dC1m aWxlIChuKQogICJTaG93IFRleGluZm8gc291cmNlIG9mIG5leHQgRWxpbmZvIExvZyBlbnRy eSBuYW1pbmcgYW5vdGhlciBmaWxlLgpQcmVmaXggYXJnIE4gc2F5cyBob3cgbWFueSBmaWxl cyB0byBtb3ZlIGZvcndhcmRzIFwob3IgYmFja3dhcmRzLAppZiBuZWdhdGl2ZSkuICBTZWUg YWxzbyBgZWxpbmZvLW5leHQtZXJyb3InLiIKICAoaW50ZXJhY3RpdmUgInAiKQogIChlbGlu Zm8tbmV4dC1lcnJvciBuIHQpKQoKKGRlZnVuIGVsaW5mby1wcmV2aW91cy1maWxlIChuKQog ICJTaG93IFRleGluZm8gc291cmNlIG9mIHByZXZpb3VzIEVsaW5mbyBMb2cgZW50cnkgbmFt aW5nIGFub3RoZXIgZmlsZS4KUHJlZml4IGFyZyBOIHNheXMgaG93IG1hbnkgZmlsZXMgdG8g bW92ZSBiYWNrd2FyZHMgXChvciBmb3J3YXJkcywKaWYgbmVnYXRpdmUpLiAgU2VlIGFsc28g YGVsaW5mby1uZXh0LWVycm9yJy4iCiAgKGludGVyYWN0aXZlICJwIikKICAoZWxpbmZvLW5l eHQtZmlsZSAoLSBuKSkpCgooZGVmdW4gZWxpbmZvLWdvdG8tZXJyb3IgKCZvcHRpb25hbCBl dmVudCkKICAiU2hvdyBUZXhpbmZvIHNvdXJjZSBmb3IgRWxpbmZvIExvZyBlbnRyeSBhdCBg cG9pbnQnLgpTZWUgYWxzbyBgZWxpbmZvLW5leHQtZXJyb3InLiIKICAoaW50ZXJhY3RpdmUg KGxpc3QgbGFzdC1pbnB1dC1ldmVudCkpCiAgKHdoZW4gZXZlbnQgKHBvc24tc2V0LXBvaW50 IChldmVudC1lbmQgZXZlbnQpKSkKICAobmV4dC1lcnJvci1pbnRlcm5hbCkpCgooZGVmdmFy IGVsaW5mby1sb2ctbW9kZS1tYXAKICAobGV0ICgobWFwIChtYWtlLXNwYXJzZS1rZXltYXAp KSkKICAgIChkZWZpbmUta2V5IG1hcCBbbW91c2UtMl0gJ2VsaW5mby1nb3RvLWVycm9yKQog ICAgKGRlZmluZS1rZXkgbWFwIFtmb2xsb3ctbGlua10gJ21vdXNlLWZhY2UpCiAgICAoZGVm aW5lLWtleSBtYXAgIlxDLWNcQy1jIiAnZWxpbmZvLWdvdG8tZXJyb3IpCiAgICA7OyBFbGlu Zm8gZ290byBjb21wYXRpYmlsaXR5LgogICAgKGRlZmluZS1rZXkgbWFwICJcQy1jXEMtZyIg J2VsaW5mby1nb3RvLWVycm9yKQogICAgKGRlZmluZS1rZXkgbWFwICJcQy1tIiAnZWxpbmZv LWdvdG8tZXJyb3IpCiAgICAoZGVmaW5lLWtleSBtYXAgIlxNLW4iICdlbGluZm8tbmV4dC1l cnJvcikKICAgIChkZWZpbmUta2V5IG1hcCAiXE0tcCIgJ2VsaW5mby1wcmV2aW91cy1lcnJv cikKICAgIChkZWZpbmUta2V5IG1hcCAiXE0teyIgJ2VsaW5mby1wcmV2aW91cy1maWxlKQog ICAgKGRlZmluZS1rZXkgbWFwICJcTS19IiAnZWxpbmZvLW5leHQtZmlsZSkKICAgIChkZWZp bmUta2V5IG1hcCAiXHQiICdlbGluZm8tbmV4dC1lcnJvcikKICAgIChkZWZpbmUta2V5IG1h cCBbYmFja3RhYl0gJ2VsaW5mby1wcmV2aW91cy1lcnJvcikKICAgIChkZWZpbmUta2V5IG1h cCAicSIgJ3F1aXQtd2luZG93KQogICAgKGRlZmluZS1rZXkgbWFwICIgIiAnc2Nyb2xsLXVw KQogICAgKGRlZmluZS1rZXkgbWFwICJcXj8iICdzY3JvbGwtZG93bikKICAgIChkZWZpbmUt a2V5IG1hcCAiXEMtY1xDLWYiICduZXh0LWVycm9yLWZvbGxvdy1taW5vci1tb2RlKQogICAg bWFwKQogICJLZXltYXAgZm9yIEVsaW5mbyBMb2dzLiIpCgooZGVmdW4gZWxpbmZvLWxvZy1t b2RlICgpCiAgIk1ham9yIG1vZGUgZm9yIGJyb3dzaW5nIEVsaW5mbyBMb2dzLgpcXHtlbGlu Zm8tbG9nLW1vZGUtbWFwfSIKICAoaW50ZXJhY3RpdmUpCiAgKGtpbGwtYWxsLWxvY2FsLXZh cmlhYmxlcykKICAodXNlLWxvY2FsLW1hcCBlbGluZm8tbG9nLW1vZGUtbWFwKQogIChzZXRx IG1ham9yLW1vZGUgJ2VsaW5mby1sb2ctbW9kZSkKICAoc2V0cSBtb2RlLW5hbWUgIkVsaW5m byIpCiAgKHNldHEgbmV4dC1lcnJvci1mdW5jdGlvbiAnZWxpbmZvLW5leHQtZXJyb3ItZnVu Y3Rpb24pCiAgKHNldHEgYnVmZmVyLXJlYWQtb25seSB0KSkKCihkZWZ2YXIgZWxpbmZvLWxv Zy1idXR0b24tbWFwCiAgKGxldCAoKG1hcCAobWFrZS1zcGFyc2Uta2V5bWFwKSkpCiAgICAo ZGVmaW5lLWtleSBtYXAgW21vdXNlLTJdICdlbGluZm8tZ290by1lcnJvcikKICAgIChkZWZp bmUta2V5IG1hcCBbZm9sbG93LWxpbmtdICdtb3VzZS1mYWNlKQogICAgKGRlZmluZS1rZXkg bWFwICJcQy1tIiAnZWxpbmZvLWdvdG8tZXJyb3IpCiAgICBtYXApCiAgIktleW1hcCBmb3Ig RWxpbmZvIExvZyBidXR0b25zLiIpCihmc2V0ICdlbGluZm8tbG9nLWJ1dHRvbi1tYXAgZWxp bmZvLWxvZy1idXR0b24tbWFwKQoKOzsgVHdvIHV0aWxpdHkgZnVuY3Rpb25zIGZvciBnZXR0 aW5nIHByb3BlcnRpZXMgb2YgZnVuY3Rpb25zIGFuZAo7OyB2YXJpYWJsZXMuICBUaGVzZSBh cmUgdXNlZCBmb3IgY2hlY2tpbmcgcHJvcGVydGllcyBkZXNjcmliZWQgYnkKOzsgVGV4aW5m byB0ZXh0LgooZGVmdW4gZWxpbmZvLS1mdW4tcHJvcGVydGllcyAoZnVuY3Rpb24pCiAgIlJl dHVybiBwcm9wZXJ0aWVzIG9mIEZVTkNUSU9OLgpSZXR1cm4gdmFsdWUgaXMgYSBsaXN0IG9m IHRocmVlIGVsZW1lbnRzOiBUaGUgZmlyc3QgZWxlbWVudCwgd2hlbgpub24tbmlsLCB0ZWxs cyB0aGF0IEZVTkNUSU9OIGlzIGEgY29tbWFuZC4gIFRoZSBzZWNvbmQgZWxlbWVudCwKd2hl biBub24tbmlsLCBzcGVjaWZpZXMgdGhlIGZ1bmN0aW9uIEZVTkNUSU9OIGlzIGFsaWFzZWQg dG8uICBUaGUKdGhpcmQgZWxlbWVudCBzcGVjaWZpZXMgdGhlIGFyZ3VtZW50IGxpc3Qgb2Yg RlVOQ1RJT04gKGFuZCBpcyB0CndoZW4gdGhhdCBhcmd1bWVudCBsaXN0IGlzIG5vdCBhdmFp bGFibGUpLiIKICAobGV0IChkZWYgY29tbWFuZCBhbGlhcyBhcmdsaXN0IGRvYykKICAgIChz ZXRxIGRlZiAoaWYgKHN5bWJvbHAgZnVuY3Rpb24pCgkJICAoc3ltYm9sLWZ1bmN0aW9uIGZ1 bmN0aW9uKQoJCWZ1bmN0aW9uKSkKICAgIChzZXRxIGNvbW1hbmQgKGNvbW1hbmRwIGRlZikp CiAgICAod2hlbiAoc3ltYm9scCBkZWYpCiAgICAgICh3aGlsZSAoYW5kIChmYm91bmRwIGRl ZikgKHN5bWJvbHAgKHN5bWJvbC1mdW5jdGlvbiBkZWYpKSkKCShzZXRxIGRlZiAoaW5kaXJl Y3QtZnVuY3Rpb24gZGVmKSkpCiAgICAgIChzZXRxIGFsaWFzIGRlZikpCiAgICAoc2V0cSBh cmdsaXN0CgkgIChpZiAoYW5kIChzZXRxIGRvYyAoZG9jdW1lbnRhdGlvbiBmdW5jdGlvbikp CgkJICAgKHN0cmluZy1tYXRjaCAiXG5cbihmblsgXF0qXFwoLipcXCkpWyBcdFxuXSpcXCci IGRvYykpCgkgICAgICAobWFwY2FyICdkb3duY2FzZSAoc3BsaXQtc3RyaW5nIChtYXRjaC1z dHJpbmcgMSBkb2MpKSkKCSAgICA7OyBIYW5kbGUgc3ltYm9scyBhbGlhc2VkIHRvIG90aGVy IHN5bWJvbHMuCgkgICAgKHdoZW4gKGFuZCAoc3ltYm9scCBkZWYpIChmYm91bmRwIGRlZikp CgkgICAgICAoc2V0cSBkZWYgKGluZGlyZWN0LWZ1bmN0aW9uIGRlZikpKQoJICAgIDs7IElm IGRlZmluaXRpb24gaXMgYSBtYWNybywgZmluZCB0aGUgZnVuY3Rpb24gaW5zaWRlIGl0LgoJ ICAgICh3aGVuIChlcSAoY2FyLXNhZmUgZGVmKSAnbWFjcm8pCgkgICAgICAoc2V0cSBkZWYg KGNkciBkZWYpKSkKCSAgICAoY29uZAoJICAgICAoKGJ5dGUtY29kZS1mdW5jdGlvbi1wIGRl ZikgKGFyZWYgZGVmIDApKQoJICAgICAoKGVxIChjYXItc2FmZSBkZWYpICdsYW1iZGEpIChu dGggMSBkZWYpKQoJICAgICAodCB0KSkpKQogICAgKGxpc3QgY29tbWFuZCBhbGlhcyAoaWYg KGxpc3RwIGFyZ2xpc3QpIGFyZ2xpc3QgdCkpKSkKCihkZWZ1biBlbGluZm8tLWlzLW9wdGlv biAodmFyaWFibGUpCiAgIlJldHVybiB0IGlmIFZBUklBQkxFIGlzIGFuIG9wdGlvbi4iCiAg KGxldCogKChmaWxlLW5hbWUgKGZpbmQtbGlzcC1vYmplY3QtZmlsZS1uYW1lIHZhcmlhYmxl ICdkZWZ2YXIpKQoJIChhbGlhcyAoY29uZGl0aW9uLWNhc2UgbmlsCgkJICAgIChpbmRpcmVj dC12YXJpYWJsZSB2YXJpYWJsZSkKCQkgIChlcnJvciB2YXJpYWJsZSkpKQoJIChkb2MKCSAg KGNvbmRpdGlvbi1jYXNlIG5pbAoJICAgICAgKG9yIChkb2N1bWVudGF0aW9uLXByb3BlcnR5 IHZhcmlhYmxlICd2YXJpYWJsZS1kb2N1bWVudGF0aW9uKQoJCSAgKGRvY3VtZW50YXRpb24t cHJvcGVydHkgYWxpYXMgJ3ZhcmlhYmxlLWRvY3VtZW50YXRpb24pKQoJICAgIChlcnJvciBu aWwpKSkKCSAob3B0aW9uIChvciAoY3VzdG9tLXZhcmlhYmxlLXAgdmFyaWFibGUpCgkJICAg ICAoYW5kIChzdHJpbmdwIGRvYykKCQkJICAoc3RyaW5nLWVxdWFsCgkJCSAgICIqIiAoc3Vi c3RyaW5nLW5vLXByb3BlcnRpZXMgZG9jIDAgMSkpKSkpKQogICAgb3B0aW9uKSkKCjs7IFNv bWUgY291bnRlcnMuCihkZWZ2YXIgZWxpbmZvLWZpbGVzLWNvdW50IG5pbCkKKGRlZnZhciBl bGluZm8tZXJyb3JzLWNvdW50IDApCihkZWZ2YXIgZWxpbmZvLXdhcm5pbmdzLWNvdW50IDAp CgooZGVmdW4gZWxpbmZvLWNsZWFyLWxvZyAoKQogICJDbGVhciBFbGluZm8gTG9nIGJ1ZmZl ciBhbmQgcmVzZXQgZXJyb3IgY291bnRzLiIKICA7OyBNYXliZSB3ZSBzaG91bGQgbWFrZSBj bGVhcmluZyBjdXN0b21pemFibGUuCiAgKHdpdGgtY3VycmVudC1idWZmZXIgKGdldC1idWZm ZXItY3JlYXRlICIqRWxpbmZvLUxvZyoiKQogICAgKGxldCAoKGluaGliaXQtcmVhZC1vbmx5 IHQpKQogICAgICAoZGVsZXRlLXJlZ2lvbiAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkpKQog IDs7IFdlIGNvdWxkIGluc2VydCBzb21lIGhlYWRlciwgYnV0IHdobydkIGNhcmUgYW55d2F5 PwogIChzZXRxIGVsaW5mby1lcnJvcnMtY291bnQgMCkKICAoc2V0cSBlbGluZm8td2Fybmlu Z3MtY291bnQgMCkpCgooZGVmdW4gZWxpbmZvLWRpc3BsYXktbG9nICgmb3B0aW9uYWwgZmls ZS1uYW1lKQogICJEaXNwbGF5IEVsaW5mbyBMb2cuCklmIHRoZXJlIHdlcmUgbm8gZXJyb3Jz IGp1c3Qgd3JpdGUgYSBtZXNzYWdlLiAgT3B0aW9uYWwgYXJndW1lbnQKRklMRS1OQU1FIG11 c3QgbmFtZSB0aGUgZmlsZSB3aG9zZSBjb250ZW50cyB3ZXJlIGNoZWNrZWQuIgogIChpZiAo YW5kICh6ZXJvcCBlbGluZm8tZXJyb3JzLWNvdW50KSAoemVyb3AgZWxpbmZvLXdhcm5pbmdz LWNvdW50KSkKICAgICAgKGxldCAoKHRleHQKCSAgICAgKGNvbmNhdAoJICAgICAgIk5vIGVy cm9ycyBmb3VuZCIKCSAgICAgIChjb25kCgkgICAgICAgKGZpbGUtbmFtZQoJCShmb3JtYXQg IiBpbiBmaWxlICVzIiBmaWxlLW5hbWUpKQoJICAgICAgIChlbGluZm8tZmlsZXMtY291bnQK CQkoZm9ybWF0ICIgaW4gJXMgY2hlY2tlZCBmaWxlKHMpIiBlbGluZm8tZmlsZXMtY291bnQp KSkpKSkKCShtZXNzYWdlIHRleHQpKQogICAgKGxldCogKChidWZmZXIgKGdldC1idWZmZXIg IipFbGluZm8tTG9nKiIpKQoJICAgKHdpbmRvdyAod2hlbiBidWZmZXIKCQkgICAgIChkaXNw bGF5LWJ1ZmZlciBidWZmZXIpKSkKCSAgICh0ZXh0IChjb25jYXQKCQkgIChmb3JtYXQgIiVz IGVycm9yKHMpIiBlbGluZm8tZXJyb3JzLWNvdW50KQoJCSAgKHdoZW4gZWxpbmZvLWxvZy13 YXJuaW5ncwoJCSAgICAoZm9ybWF0ICIgYW5kICVzIHdhcm5pbmcocykiIGVsaW5mby13YXJu aW5ncy1jb3VudCkpCgkJICAoY29uZAoJCSAgIChmaWxlLW5hbWUKCQkgICAgKGZvcm1hdCAi IGluIGZpbGUgJXMiIGZpbGUtbmFtZSkpCgkJICAgKGVsaW5mby1maWxlcy1jb3VudAoJCSAg ICAoZm9ybWF0ICIgaW4gJXMgY2hlY2tlZCBmaWxlKHMpIiBlbGluZm8tZmlsZXMtY291bnQp KSkpKSkKICAgICAgOzsgV2UgcmVhbGx5IHNob3VsZCBoYXZlIGFuIG9wdGlvbiB3aGljaCBs ZXRzIHVzZXJzIHNlbGVjdAogICAgICA7OyBMb2cvSGVscCB3aW5kb3dzLgogICAgICAod2hl biB3aW5kb3cKCShzZXQtd2luZG93LXBvaW50IHdpbmRvdyAocG9pbnQtbWluKSkpCiAgICAg IChtZXNzYWdlIHRleHQpKSkpCgooZGVmdW4gZWxpbmZvLWxvZy1zdHJpbmcgKHR5cGUgbmFt ZSBmaWxlLW5hbWUgcG9zaXRpb24gc3RyaW5nICZvcHRpb25hbCB3YXJuaW5nKQogICJMb2cg U1RSSU5HIGluIEVsaW5mbyBMb2cgYnVmZmVyLgpTVFJJTkcgaXMgcHJvcGVydGl6ZWQgd2l0 aCBUWVBFIFwodGhlIHR5cGUgb2YgdGhlIGVycm9yKSwgTkFNRQpcKHVzdWFsbHkgdGhlIG5h bWUgb2Ygc29tZSBmdW5jdGlvbiBvciB2YXJpYWJsZSksIEZJTEUtTkFNRSBcKHRoZQpuYW1l IG9mIGEgZmlsZSksIFBPU0lUSU9OIFwoYSBwb3NpdGlvbiB2YWxpZCBpbiBhIGJ1ZmZlciB2 aXNpdGluZwpGSUxFLU5BTUUpLiAgT3B0aW9uYWwgYXJndW1lbnQgV0FSTklORyBub24tbmls IG1lYW5zIG5vIGxvZ2dpbmcKb2NjdXJzIHVubGVzcyBgZWxpbmZvLWxvZy13YXJuaW5ncycg aXMgbm9uLW5pbC4iCiAgKHdoZW4gKG9yIChub3Qgd2FybmluZykgZWxpbmZvLWxvZy13YXJu aW5ncykKICAgIChpZiB3YXJuaW5nCgkoc2V0cSBlbGluZm8td2FybmluZ3MtY291bnQgKDEr IGVsaW5mby13YXJuaW5ncy1jb3VudCkpCiAgICAgIChzZXRxIGVsaW5mby1lcnJvcnMtY291 bnQgKDErIGVsaW5mby1lcnJvcnMtY291bnQpKSkKICAgIChsZXQgKChsaW5lIChjb3VudC1s aW5lcyAocG9pbnQtbWluKSBwb3NpdGlvbikpCgkgIChjb2x1bW4gKHNhdmUtZXhjdXJzaW9u CgkJICAgIChnb3RvLWNoYXIgcG9zaXRpb24pCgkJICAgIChjdXJyZW50LWNvbHVtbikpKSkK ICAgICAgKHdpdGgtY3VycmVudC1idWZmZXIgKGdldC1idWZmZXItY3JlYXRlICIqRWxpbmZv LUxvZyoiKQoJKHVubGVzcyAoZXEgbWFqb3ItbW9kZSAnZWxpbmZvLWxvZy1tb2RlKQoJICAo ZWxpbmZvLWxvZy1tb2RlKSkKCShsZXQgKChpbmhpYml0LXJlYWQtb25seSB0KQoJICAgICAg ZnJvbSB0bykKCSAgKGdvdG8tY2hhciAoc2V0cSBmcm9tIChwb2ludC1tYXgpKSkKCSAgKGlu c2VydAoJICAgOzsgUHJvcGVydGl6ZWQgaW5mb3JtYXRpb24uCgkgICAocHJvcGVydGl6ZQoJ ICAgIChjb25jYXQKCSAgICAgKHByb3BlcnRpemUKCSAgICAgIChjb25jYXQKCSAgICAgICAo d2hlbiBmaWxlLW5hbWUKCQkgKGNvbmNhdCAoZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSBmaWxl LW5hbWUpICI6IikpCgkgICAgICAgKGZvcm1hdCAiJXM6JXMiIGxpbmUgY29sdW1uKSkKCSAg ICAgICdmYWNlIGVsaW5mby1sb2ctbG9jYXRpb24tZmFjZSkKCSAgICAgIiAiIHN0cmluZykK CSAgICAnZWxpbmZvLXR5cGUgdHlwZSAnZWxpbmZvLW5hbWUgbmFtZQoJICAgICdlbGluZm8t ZmlsZS1uYW1lIGZpbGUtbmFtZSAnZWxpbmZvLXBvc2l0aW9uIHBvc2l0aW9uCgkgICAgJ21v dXNlLWZhY2UgJ2hpZ2hsaWdodCAnZm9sbG93LWxpbmsgJ2VsaW5mby1mb2xsb3ctbGluaykK CSAgIDs7IFNUUklORyBpdHNlbGYgZm9sbG93ZWQgYnkgYSBuZXdsaW5lLgoJICAgIlxuIikp KSkpKQoKKGRlZnN1YnN0IGVsaW5mby0tc3ltYm9sLW5hbWUgKGFyZykKICAiSWYgQVJHIGlz IGEgc3ltYm9sIHJldHVybiBpdHMgbmFtZSwgZWxzZSByZXR1cm4gQVJHLiIKICAoaWYgKHN5 bWJvbHAgYXJnKSAoc3ltYm9sLW5hbWUgYXJnKSBhcmcpKQoKKGRlZnVuIGVsaW5mby1jaGVj ayAoZmlsZS1uYW1lKQogICJDaGVjayBjdXJyZW50IGJ1ZmZlci4KRklMRS1OQU1FIG11c3Qg c3BlY2lmeSB0aGUgbmFtZSBvZiB0aGUgZmlsZSB3aG9zZSBjb250ZW50cyBhcmUgaW4KdGhl IGN1cnJlbnQgYnVmZmVyLiIKICAoaW50ZXJhY3RpdmUpCiAgKHNhdmUtZXhjdXJzaW9uCiAg ICAoc2F2ZS1yZXN0cmljdGlvbgogICAgICAod2lkZW4pCiAgICAgIDs7IE1ha2Ugc3VyZSBg Y2FzZS1mb2xkLXNlYXJjaCcgaXMgbmlsIHRvIGNhdGNoIHRoZSAiQy0iIGFuZCAiTS0iCiAg ICAgIDs7IGVudHJpZXMgb25seSBhbmQgbm90IHRoZSBDLW1vZGUgImMtLi4uIiBzdHVmZi4K ICAgICAgKGxldCAoY2FzZS1mb2xkLXNlYXJjaAoJICAgIHRleGktbmFtZSB0ZXhpLXBkLW5h bWUgdGV4aS1hcmctbmFtZSB0ZXhpLWNvbW1hbmQgdGV4aS1vcHRpb24KCSAgICBwb3NpdGlv biBwcm9wZXJ0aWVzIGFyZy1saXN0IGFyZy1uYW1lIGlzLW9wdGlvbikKCShnb3RvLWNoYXIg KHBvaW50LW1pbikpCgk7OyBXZSBwcm9iYWJseSB3b24ndCBldmVyIGJvdGhlciB0byBvcHRp bWl6ZSB0aGUgcmVnZXhwIGJlbG93LgoJKHdoaWxlIChyZS1zZWFyY2gtZm9yd2FyZAoJCTs7 IFJFR0VYUCBNTkVNTk9OSUNTOiAxLi5kZWZ1bi9kZWZmbiwgNC4uZGVmdmFyL2RlZm9wdCwK CQk7OyA4Li50ZXh0IHdlIGlnbm9yZSwgOS4uQy0vTS0gcHJlZml4ZWQgc3RyaW5nIGluIEBj b2RlLAoJCTs7IDEwLi5TUEMvUkVUL2V0Yy4gaW4gQGNvZGUsIDExLi5TUEMvUkVUL2V0Yy4g aW4gQGtiZCwKCQk7OyAxMy4ubm9uLW5pbC4KCQkiXkBcXCg/OlxcKFxcKGRlZnVueD9cXHxk ZWZtYWNcXHxkZWZzcGVjXFwpXFx8XFwoZGVmZm4gQ29tbWFuZFxcKVxcKVwKXFx8XFwoXFwo ZGVmdmFyeD9cXClcXHxcXChkZWZvcHR4P1xcKVxcKVwKXFx8XFwoc21hbGxcXCk/XFwoZXhh bXBsZVxcfGxpc3BcXHx2ZXJiYXRpbVxcfGlnbm9yZVxcKVxcKVwKXFx8QGNvZGV7XFwoW0NN XS1bXn1dK1xcKVxcfEBcXCg/OlxcKGNvZGVcXClcClxcfFxcKGtiZFxcKVxcKXtcXChTUENc XHxSRVRcXHxMRkRcXHxUQUJcXHxCU1xcfEVTQ1xcfERFTFxcfFNISUZUXFx8Q1RSTFxcfE1F VEFcXHxGWzAtOV0rXFwpfVwKXFx8XFwobm9uLW5pbFxcKSIgbmlsIHQpCgkgIChjb25kCgkg ICAoKG1hdGNoLWJlZ2lubmluZyAxKQoJICAgIChzZXRxIHRleGktY29tbWFuZCAobWF0Y2gt YmVnaW5uaW5nIDMpKQoJICAgIChzZXRxIHBvc2l0aW9uIChlbGluZm8tLW1vdmUtdG8tbmV4 dCkpCgkgICAgKHNldHEgdGV4aS1uYW1lIChlbGluZm8tLWdldC1uZXh0KSkKCSAgICAoc2V0 cSB0ZXhpLXBkLW5hbWUgKHByb3BlcnRpemUgdGV4aS1uYW1lICdmYWNlIGVsaW5mby1sb2ct ZGVmLWZhY2UpKQoJICAgIChpZiAobm90IChmYm91bmRwIChpbnRlcm4gdGV4aS1uYW1lKSkp CgkJKHByb2duCgkJICAoZWxpbmZvLWxvZy1zdHJpbmcKCQkgICAnZnVuLXVuYm91bmQgdGV4 aS1uYW1lIGZpbGUtbmFtZSBwb3NpdGlvbgoJCSAgIChjb25jYXQgIlVuYm91bmQgZnVuY3Rp b24gYCIgdGV4aS1wZC1uYW1lICInIikgdCkKCQkgIChmb3J3YXJkLWxpbmUpKQoJICAgICAg KHNldHEgcHJvcGVydGllcyAoZWxpbmZvLS1mdW4tcHJvcGVydGllcyAoaW50ZXJuIHRleGkt bmFtZSkpKQoJICAgICAgKGlmIChhbmQgKGVxIChudGggMSBwcm9wZXJ0aWVzKSAnaWdub3Jl KQoJCSAgICAgICAobm90IChzdHJpbmctZXF1YWwgdGV4aS1uYW1lICJpZ25vcmUiKSkpCgkJ ICA7OyBXaGVuIHRoZSBmdW5jdGlvbiBpcyByZW1hcHBlZCB0byBgaWdub3JlJyB3ZSBjYW4n dAoJCSAgOzsgZG8gYW55dGhpbmcgcmVhc29uYWJsZSBvbiB0aGUgY3VycmVudCBwbGF0Zm9y bS4KCQkgIChwcm9nbgoJCSAgICAoZWxpbmZvLWxvZy1zdHJpbmcKCQkgICAgICdyZW1hcHBl ZC10by1pZ25vcmUgdGV4aS1uYW1lIGZpbGUtbmFtZSBwb3NpdGlvbgoJCSAgICAgKGNvbmNh dCAiYCIgdGV4aS1wZC1uYW1lICInIHJlbWFwcGVkIHRvIGBpZ25vcmUnIG9uIHRoaXMgcGxh dGZvcm0iKSB0KQoJCSAgICAoZm9yd2FyZC1saW5lKSkKCQk7OyBDaGVjayBjb21tYW5kIHBy b3BlcnR5LgoJCShjb25kCgkJICgoYW5kIHRleGktY29tbWFuZCAobm90IChudGggMCBwcm9w ZXJ0aWVzKSkpCgkJICAoZWxpbmZvLWxvZy1zdHJpbmcKCQkgICAnY29tbWFuZCB0ZXhpLW5h bWUgZmlsZS1uYW1lIHBvc2l0aW9uCgkJICAgKGNvbmNhdCAiYCIgdGV4aS1wZC1uYW1lICIn IGlzIG5vdCBhIGNvbW1hbmQiKSkpCgkJICgoYW5kIChub3QgdGV4aS1jb21tYW5kKSAobnRo IDAgcHJvcGVydGllcykpCgkJICAoZWxpbmZvLWxvZy1zdHJpbmcKCQkgICAnbm8tY29tbWFu ZCB0ZXhpLW5hbWUgZmlsZS1uYW1lIHBvc2l0aW9uCgkJICAgKGNvbmNhdCAiYCIgdGV4aS1w ZC1uYW1lICInIGlzIGEgY29tbWFuZCIpKSkpCgkJOzsgQ2hlY2sgYXJndW1lbnRzLgoJCShz ZXRxIGFyZy1saXN0IChudGggMiBwcm9wZXJ0aWVzKSkKCQkoY29uZAoJCSAoKG5vdCBhcmct bGlzdCkKCQkgICh1bmxlc3MgKHN0cmluZy1lcXVhbCAoZWxpbmZvLS1nZXQtbmV4dC1hcmcp ICIiKQoJCSAgICA7OyBUaGUgZnVuY3Rpb24gZG9lc24ndCBoYXZlIGFyZ3VtZW50cy4KCQkg ICAgKGVsaW5mby1sb2ctc3RyaW5nCgkJICAgICAnYXJnLW1pc21hdGNoIHRleGktbmFtZSBm aWxlLW5hbWUgcG9zaXRpb24KCQkgICAgIChjb25jYXQgImAiIHRleGktcGQtbmFtZSAiJyBo YXMgbm8gYXJndW1lbnRzIikpKSkKCQkgKChub3QgKGxpc3RwIGFyZy1saXN0KSkKCQkgIDs7 IFVzdWFsbHkgdGhpcyBpcyBhbiAiQXJnbGlzdCBub3QgYXZhaWxhYmxlIC4uLiIgcHJvYmxl bS4KCQkgIChlbGluZm8tbG9nLXN0cmluZwoJCSAgICdhcmctbm90LWF2YWlsYWJsZSB0ZXhp LW5hbWUgZmlsZS1uYW1lIHBvc2l0aW9uCgkJICAgKGNvbmNhdCAiQXJndW1lbnRzIG9mIGAi IHRleGktcGQtbmFtZSAiJyBub3QgYXZhaWxhYmxlIikgdCkpCgkJICh0CgkJICAoY2F0Y2gg J2J1ZwoJCSAgICAoZG9saXN0IChhcmcgYXJnLWxpc3QpCgkJICAgICAgKHNldHEgYXJnLW5h bWUgKGVsaW5mby0tc3ltYm9sLW5hbWUgYXJnKSkKCQkgICAgICAoc2V0cSB0ZXhpLWFyZy1u YW1lIChlbGluZm8tLWdldC1uZXh0LWFyZykpCgkJICAgICAgKGNvbmQKCQkgICAgICAgKChz dHJpbmctZXF1YWwgYXJnLW5hbWUgdGV4aS1hcmctbmFtZSkpIDsgOi0pCgkJICAgICAgICgo c3RyaW5nLWVxdWFsIHRleGktYXJnLW5hbWUgIiIpCgkJCTs7IFRoZSBmdW5jdGlvbiBoYXMg bW9yZSBhcmd1bWVudHMgdGhhbiBkZXNjcmliZWQuCgkJCShvciAoYW5kIChzdHJpbmctbWF0 Y2ggIiZvcHRpb25hbFxcfCZyZXN0IiBhcmctbmFtZSkKCQkJCSA7OyBNYXliZSB0aGUgbWFu dWFsIGp1c3Qgd2FudHMgdXMgdG8KCQkJCSA7OyBpZ25vcmUgdGhlIGFyZ3VtZW50cy4KCQkJ CSAobGV0ICgobGFzdC1uYW1lIChjYXIgKGxhc3QgYXJnLWxpc3QpKSkpCgkJCQkgICAoc3Ry aW5nLW1hdGNoCgkJCQkgICAgImlnbm9yZWQ/IiAoZWxpbmZvLS1zeW1ib2wtbmFtZSBsYXN0 LW5hbWUpKSkpCgkJCSAgICAoZWxpbmZvLWxvZy1zdHJpbmcKCQkJICAgICAnYXJnLW1pc21h dGNoIHRleGktbmFtZSBmaWxlLW5hbWUgcG9zaXRpb24KCQkJICAgICAoY29uY2F0CgkJCSAg ICAgICJgIiB0ZXhpLXBkLW5hbWUgIicgbGFja3MgZGVzY3JpcHRpb24gb2YgIgoJCQkgICAg ICAoY29uZAoJCQkgICAgICAgKChzdHJpbmctZXF1YWwgYXJnLW5hbWUgIiZvcHRpb25hbCIp CgkJCQkib3B0aW9uYWwgYXJndW1lbnQocykuIikKCQkJICAgICAgICgoc3RyaW5nLWVxdWFs IGFyZy1uYW1lICIlcmVzdCIpCgkJCQkicmVzdCBvZiBhcmd1bWVudHMuIikKCQkJICAgICAg ICh0IChjb25jYXQgImFyZ3VtZW50IGAiIGFyZy1uYW1lICInIikpKSkpKQoJCQkodGhyb3cg J2J1ZyB0KSkKCQkgICAgICAgKChvciAoc3RyaW5nLW1hdGNoICImb3B0aW9uYWxcXHwmcmVz dCIgYXJnLW5hbWUpCgkJCSAgICAoc3RyaW5nLW1hdGNoICImb3B0aW9uYWxcXHwmcmVzdCIg dGV4aS1hcmctbmFtZSkpCgkJCShvciAoYW5kIChzdHJpbmctbWF0Y2ggIiZvcHRpb25hbFxc fCZyZXN0IiB0ZXhpLWFyZy1uYW1lKQoJCQkJIDs7IE1heWJlIHdlIGRvbid0IHdhbnQgdG8g a25vdyBhbGwKCQkJCSA7OyBhcmd1bWVudHM/ICBMZXQncyBnZXQgaGV1cmlzdGljYWwKCQkJ CSA7OyBvbmNlIG1vcmUuCgkJCQkgKGxldCAoKG5leHQtbmFtZSAoZWxpbmZvLS1nZXQtbmV4 dC1hcmcpKSkKCQkJCSAgIChzdHJpbmctbWF0Y2gKCQkJCSAgICAiZWxlbWVudHNcXHxhcmd1 bWVudHNcXHxhcmdzIiBuZXh0LW5hbWUgMCkpKQoJCQkgICAgOzsgVGhlIGZvbGxvd2luZyBp ZGlvbSBpcyBwb3B1bGFyIHdpdGhpbgoJCQkgICAgOzsgbWFjcm9zIGFuZCBzcGVjaWFsIGZv cm1zLgoJCQkgICAgKGFuZCAoc3RyaW5nLW1hdGNoICImcmVzdCIgYXJnLW5hbWUpCgkJCQkg KG9yIChzdHJpbmctbWF0Y2ggIkBkb3Rze30kIiB0ZXhpLWFyZy1uYW1lKQoJCQkJICAgICAo cmUtc2VhcmNoLWZvcndhcmQKCQkJCSAgICAgICJAZG90c3t9JCIgKGxpbmUtZW5kLXBvc2l0 aW9uKSB0KSkpCgkJCSAgICAoZWxpbmZvLWxvZy1zdHJpbmcKCQkJICAgICAnYXJnLW1pc21h dGNoIHRleGktbmFtZSBmaWxlLW5hbWUgcG9zaXRpb24KCQkJICAgICAoY29uY2F0CgkJCSAg ICAgICJgIiB0ZXhpLXBkLW5hbWUKCQkJICAgICAgIicgaGFzIG1pc21hdGNoaW5nIG9wdGlv bmFsIG9yIHJlc3Qgb2YgYXJndW1lbnRzIikpKQoJCQkodGhyb3cgJ2J1ZyB0KSkKCQkgICAg ICAgKHQKCQkJKGVsaW5mby1sb2ctc3RyaW5nCgkJCSAnYXJnLW1pc21hdGNoIHRleGktbmFt ZSBmaWxlLW5hbWUgcG9zaXRpb24KCQkJIChjb25jYXQgIiciIHRleGktcGQtbmFtZSAiJyB1 c2VzIGAiIHRleGktYXJnLW5hbWUKCQkJCSAiJyBmb3IgYXJndW1lbnQgYCIgYXJnLW5hbWUg IiciKSB0KSkKCQkgICAgICAgKHRocm93ICdidWcgdCkpKSkpKSkpKQoJICAgKChtYXRjaC1i ZWdpbm5pbmcgNCkKCSAgICAoc2V0cSB0ZXhpLW9wdGlvbiAobWF0Y2gtYmVnaW5uaW5nIDYp KQoJICAgIChzZXRxIHBvc2l0aW9uIChlbGluZm8tLW1vdmUtdG8tbmV4dCkpCgkgICAgKHNl dHEgdGV4aS1uYW1lIChlbGluZm8tLWdldC1uZXh0KSkKCSAgICAoc2V0cSB0ZXhpLXBkLW5h bWUgKHByb3BlcnRpemUgdGV4aS1uYW1lICdmYWNlIGVsaW5mby1sb2ctZGVmLWZhY2UpKQoJ ICAgIChpZiAobm90IChib3VuZHAgKGludGVybiB0ZXhpLW5hbWUpKSkKCQkocHJvZ24KCQkg IChlbGluZm8tbG9nLXN0cmluZwoJCSAgICd2YXItdW5ib3VuZCB0ZXhpLW5hbWUgZmlsZS1u YW1lIHBvc2l0aW9uCgkJICAgKGNvbmNhdCAiVW5ib3VuZCB2YXJpYWJsZSBgIiB0ZXhpLXBk LW5hbWUgIiciKSB0KQoJCSAgKGZvcndhcmQtbGluZSkpCgkgICAgICA7OyBDaGVjayBvcHRp b24gcHJvcGVydHkuCgkgICAgICAoc2V0cSBpcy1vcHRpb24gKGVsaW5mby0taXMtb3B0aW9u IChpbnRlcm4gdGV4aS1uYW1lKSkpCgkgICAgICAoY29uZAoJICAgICAgICgoYW5kIHRleGkt b3B0aW9uIChub3QgaXMtb3B0aW9uKSkKCQkoZWxpbmZvLWxvZy1zdHJpbmcKCQkgJ25vLW9w dGlvbiB0ZXhpLW5hbWUgZmlsZS1uYW1lIHBvc2l0aW9uCgkJIChjb25jYXQgImAiIHRleGkt cGQtbmFtZSAiJyBpcyBub3QgYW4gb3B0aW9uIikpKQoJICAgICAgICgoYW5kIChub3QgdGV4 aS1vcHRpb24pIGlzLW9wdGlvbikKCQkoZWxpbmZvLWxvZy1zdHJpbmcKCQkgJ29wdGlvbiB0 ZXhpLW5hbWUgZmlsZS1uYW1lIHBvc2l0aW9uCgkJIChjb25jYXQgImAiIHRleGktcGQtbmFt ZSAiJyBpcyBhbiBvcHRpb24iKSkpKSkpCgkgICAoKG1hdGNoLWJlZ2lubmluZyA4KQoJICAg IChzZXRxIHBvc2l0aW9uIChsaW5lLWJlZ2lubmluZy1wb3NpdGlvbikpCgkgICAgOzsgQW4g ZXhhbXBsZS12ZXJiYXRpbS1saXNwIGdyb3VwLCBza2lwIGl0LgoJICAgICh1bmxlc3MgKHJl LXNlYXJjaC1mb3J3YXJkCgkJICAgICAoY29uY2F0ICJeQGVuZCAiIChtYXRjaC1zdHJpbmct bm8tcHJvcGVydGllcyA3KQoJCQkgICAgIChtYXRjaC1zdHJpbmctbm8tcHJvcGVydGllcyA4 KSkgbmlsIHQpCgkgICAgICAoZWxpbmZvLWxvZy1zdHJpbmcKCSAgICAgICAnbm8tZW5kIG5p bCBmaWxlLW5hbWUgcG9zaXRpb24KCSAgICAgICAoY29uY2F0ICJVbnRlcm1pbmF0ZWQgIiAo bWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMgNykKCQkgICAgICAgKG1hdGNoLXN0cmluZy1u by1wcm9wZXJ0aWVzIDgpKSkpKQoJICAgKChtYXRjaC1iZWdpbm5pbmcgOSkKCSAgICAoZWxp bmZvLWxvZy1zdHJpbmcKCSAgICAgJ2NvZGUta2JkIG5pbCBmaWxlLW5hbWUgKG1hdGNoLWJl Z2lubmluZyA5KQoJICAgICAoY29uY2F0ICJVc2UgQGtiZCBmb3IgQGNvZGV7IgoJCSAgICAg KHJlcGxhY2UtcmVnZXhwLWluLXN0cmluZwoJCSAgICAgICJcbiIgIiAiIChtYXRjaC1zdHJp bmctbm8tcHJvcGVydGllcyA5KSkgIn0iKSkpCgkgICAoKG1hdGNoLWJlZ2lubmluZyAxMCkK CSAgICAoZWxpbmZvLWxvZy1zdHJpbmcKCSAgICAgJ2NvZGUta2V5IG5pbCBmaWxlLW5hbWUg KG1hdGNoLWJlZ2lubmluZyAxMCkKCSAgICAgKGNvbmNhdCAiVXNlIEBrZXkgZm9yIEBjb2Rl eyIKCQkgICAgIChyZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcKCQkgICAgICAiXG4iICIgIiAo bWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMgMTIpKSAifSIpKSkKCSAgICgobWF0Y2gtYmVn aW5uaW5nIDExKQoJICAgIChlbGluZm8tbG9nLXN0cmluZwoJICAgICAna2JkLWtleSBuaWwg ZmlsZS1uYW1lIChtYXRjaC1iZWdpbm5pbmcgMTEpCgkgICAgIChjb25jYXQgIlVzZSBAa2V5 IGZvciBAa2JkeyIKCQkgICAgIChyZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcKCQkgICAgICAi XG4iICIgIiAobWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMgMTIpKSAifSIpKSkKCSAgICgo bWF0Y2gtYmVnaW5uaW5nIDEzKQoJICAgIDs7IEN1cnJlbnRseSB3ZSBkb24ndCBjYXRlciBm b3IgQGNvZGV7bmlsfSBtaXN3cml0dGVuIGFzIG5pbAoJICAgIDs7IGFuZCBwcm9iYWJseSBu ZXZlciB3aWxsLgoJICAgIChlbGluZm8tbG9nLXN0cmluZwoJICAgICAna2JkLWtleSBuaWwg ZmlsZS1uYW1lIChtYXRjaC1iZWdpbm5pbmcgMTMpCgkgICAgIChjb25jYXQgIlVzZSBub24t QGNvZGV7bmlsfSBpbnN0ZWFkIG9mIG5vbi1uaWwiKSkpCgkgICA7OyBBZGRpdGlvbmFsIGNh c2VzIGFkZGVkIGhlcmUuCgkgICApKSkpKSkKCihkZWZ1biBlbGluZm8tY2hlY2stYnVmZmVy ICgpCiAgIkNoZWNrIHZhbGlkaXR5IG9mIGN1cnJlbnQgVGV4aW5mbyBidWZmZXIuClRoZSBi dWZmZXIgbXVzdCBiZSB2aXNpdGluZyBhIGZpbGUuIgogIChpbnRlcmFjdGl2ZSkKICAoZWxp bmZvLWNsZWFyLWxvZykKICAoY29uZAogICAoKG5vdCBidWZmZXItZmlsZS1uYW1lKQogICAg KGVycm9yICJUaGUgY3VycmVudCBidWZmZXIgZG9lcyBub3QgdmlzaXQgYSBmaWxlIikpCiAg ICgoYW5kIChidWZmZXItbW9kaWZpZWQtcCkKCSAoeS1vci1uLXAgKGZvcm1hdCAiU2F2ZSBi dWZmZXIgJXMgZmlyc3Q/ICIgKGJ1ZmZlci1uYW1lKSkpKQogICAgKHNhdmUtYnVmZmVyKSkp CiAgKHNldHEgZWxpbmZvLWZpbGVzLWNvdW50IG5pbCkKICAoZ290by1jaGFyIChwb2ludC1t aW4pKQogIChlbGluZm8tY2hlY2sgYnVmZmVyLWZpbGUtbmFtZSkKICAoZWxpbmZvLWRpc3Bs YXktbG9nIGJ1ZmZlci1maWxlLW5hbWUpKQoKKGRlZnVuIGVsaW5mby1jaGVjay1maWxlIChm aWxlLW5hbWUpCiAgIkNoZWNrIHZhbGlkaXR5IG9mIFRleGluZm8gZmlsZSBGSUxFLU5BTUUu IgogIChpbnRlcmFjdGl2ZSAiZkNoZWNrIFRleGluZm8gZmlsZSAiKQogIChlbGluZm8tY2xl YXItbG9nKQogIChzZXRxIGVsaW5mby1maWxlcy1jb3VudCBuaWwpCiAgKHdpdGgtdGVtcC1i dWZmZXIKICAgIChpbnNlcnQtZmlsZS1jb250ZW50cyBmaWxlLW5hbWUpCiAgICAoZWxpbmZv LWNoZWNrIGZpbGUtbmFtZSkpCiAgKGVsaW5mby1kaXNwbGF5LWxvZyBmaWxlLW5hbWUpKQoK KGRlZnVuIGVsaW5mby1jaGVjay1kaXJlY3RvcnkgKGRpcmVjdG9yeSkKICAiQ2hlY2sgdmFs aWRpdHkgb2YgVGV4aW5mbyBmaWxlcyBpbiBESVJFQ1RPUlkuIgogIChpbnRlcmFjdGl2ZSAi RENoZWNrIGFsbCB0ZXhpbmZvIGZpbGVzIGluICIpCiAgKGxldCAoKGZpbGVzIChkaXJlY3Rv cnktZmlsZXMgZGlyZWN0b3J5ICdmdWxsKSkpCiAgICAoZWxpbmZvLWNsZWFyLWxvZykKICAg IChzZXRxIGVsaW5mby1maWxlcy1jb3VudCAwKQogICAgKGRvbGlzdCAoZmlsZSBmaWxlcykK ICAgICAgKHdoZW4gKGFuZCAoc3RyaW5nLWVxdWFsIChmaWxlLW5hbWUtZXh0ZW5zaW9uIGZp bGUpICJ0ZXhpIikKCQkgKG5vdCAoYmFja3VwLWZpbGUtbmFtZS1wIGZpbGUpKSkKCSh3aXRo LXRlbXAtYnVmZmVyCgkgIChpbnNlcnQtZmlsZS1jb250ZW50cyBmaWxlKQoJICAoZWxpbmZv LWNoZWNrIGZpbGUpCgkgIChzZXRxIGVsaW5mby1maWxlcy1jb3VudCAoMSsgZWxpbmZvLWZp bGVzLWNvdW50KSkKCSAgKGxldCAobWVzc2FnZS1sb2ctbWF4KQoJICAgIChtZXNzYWdlICIl cyBmaWxlcyBjaGVja2VkIiBlbGluZm8tZmlsZXMtY291bnQpKSkpKQogICAgKGVsaW5mby1k aXNwbGF5LWxvZykpKQoKOzsgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KOzsKOzs7CQkJTmF2 aWdhdGlvbiBVdGlsaXRpZXMKOzsgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KOzsKCihkZWZj dXN0b20gZWxpbmZvLW5hbWVzLWFsaXN0CiAgJygoImVsaXNwIiAuICJsaXNwcmVmIikgKCJl bWFjcyIgLiAiZW1hY3MiKSkKICAiQWxpc3Qgb2YgKGluZm8tZmlsZS1uYW1lIHRleGktc3Vi ZGlyZWN0b3J5KSBhc3NvY2lhdGlvbnMuCklmIGVsaW5mbyBjYW4ndCBmaW5kIGFuIGFzc29j aWF0aW9uIGl0IHdpbGwgbG9vayBpbiB0aGUgXCJtaXNjXCIKc3ViZGlyZWN0b3J5LiIKICA6 dHlwZSAnKHJlcGVhdCAoZ3JvdXAgKHN0cmluZyA6dGFnICJpbmZvLWZpbGUiIDpmb3JtYXQg IiAgJXQ6ICV2IiA6c2l6ZSAxNSkKCQkJKHN0cmluZyA6dGFnICJ0ZXhpLXN1YmRpciIgOmZv cm1hdCAiICAldDogJXZcbiIgOnNpemUgMTUpKSkKICA6Z3JvdXAgJ2VsaW5mbykKCihkZWZj dXN0b20gZWxpbmZvLXRleGktZGlyZWN0b3J5IChjb25jYXQgc291cmNlLWRpcmVjdG9yeSAi ZG9jLyIpCiAgIkRpcmVjdG9yeSB3aGVyZSBkb2MgZmlsZXMgcmVzaWRlLiIKICA6dHlwZSAn ZmlsZQogIDpncm91cCAnZWxpbmZvKQoKKGRlZnVuIGVsaW5mby0tZGVmYXVsdC10YWcgKCkK ICAiUmV0dXJuIGNvbnMgaG9sZGluZyBzdGFydCBhbmQgbmFtZSBvZiB0YWcgbmVhciBgcG9p bnQnLiIKICAobGV0IChmcm9tIHRvIGJvdW5kKQogICAgKHdoZW4gKG9yIChwcm9nbgoJCTs7 IExvb2sgYXQgdGV4dCBhcm91bmQgYHBvaW50Jy4KCQkoc2F2ZS1leGN1cnNpb24KCQkgIChz a2lwLWNoYXJzLWJhY2t3YXJkICJhLXowLTkiKSAoc2V0cSBmcm9tIChwb2ludCkpKQoJCShz YXZlLWV4Y3Vyc2lvbgoJCSAgKHNraXAtY2hhcnMtZm9yd2FyZCAiYS16MC05IikgKHNldHEg dG8gKHBvaW50KSkpCgkJKD4gdG8gZnJvbSkpCgkgICAgICA7OyBMb29rIGJldHdlZW4gYGxp bmUtYmVnaW5uaW5nLXBvc2l0aW9uJyBhbmQgYHBvaW50Jy4KCSAgICAgIChzYXZlLWV4Y3Vy c2lvbgoJCShhbmQgKHNldHEgYm91bmQgKGxpbmUtYmVnaW5uaW5nLXBvc2l0aW9uKSkKCQkg ICAgIChza2lwLWNoYXJzLWJhY2t3YXJkICJeYS16MC05IiBib3VuZCkKCQkgICAgICg+IChz ZXRxIHRvIChwb2ludCkpIGJvdW5kKQoJCSAgICAgKHNraXAtY2hhcnMtYmFja3dhcmQgImEt ejAtOSIpCgkJICAgICAoc2V0cSBmcm9tIChwb2ludCkpKSkKCSAgICAgIDs7IExvb2sgYmV0 d2VlbiBgcG9pbnQnIGFuZCBgbGluZS1lbmQtcG9zaXRpb24nLgoJICAgICAgKHNhdmUtZXhj dXJzaW9uCgkJKGFuZCAoc2V0cSBib3VuZCAobGluZS1lbmQtcG9zaXRpb24pKQoJCSAgICAg KHNraXAtY2hhcnMtZm9yd2FyZCAiXmEtejAtOSIgYm91bmQpCgkJICAgICAoPCAoc2V0cSBm cm9tIChwb2ludCkpIGJvdW5kKQoJCSAgICAgKHNraXAtY2hhcnMtZm9yd2FyZCAiYS16MC05 IikKCQkgICAgIChzZXRxIHRvIChwb2ludCkpKSkpCiAgICAgIChjb25zIGZyb20gKGJ1ZmZl ci1zdWJzdHJpbmctbm8tcHJvcGVydGllcyBmcm9tIHRvKSkpKSkKCihkZWZjb25zdCBlbGlu Zm8tYXQtcmVnZXhwICJcXCg/OlxcKD86QFthLXpdK3tcXHxbfWAnXCJfOl0qXFwpKlsgXHRc bl0qXFwpIgogICJSZWdleHAgc3VwcG9zZWQgdG8gbWF0Y2ggVGV4aW5mbyBjb25zdHJ1Y3Rz IHRoYXQgc2VwYXJhdGUgaXRlbXMuIikKCjs7IFR3byBnbG9iYWxzLCBpbml0aWFsaXplZCBp biBgZWxpbmZvLWdvdG8tdGV4aScgYW5kIHVwZGF0ZWQgYnkKOzsgYGVsaW5mby0tdXBkYXRl LXJlZ2V4cCcuCihkZWZ2YXIgZWxpbmZvLWZyb20gbmlsKQooZGVmdmFyIGVsaW5mby1yZWdl eHAgbmlsKQoKKGRlZnVuIGVsaW5mby0tbWFrZS1yZWdleHAgKGZyb20gdG8pCiAgIlJldHVy biBidWZmZXIgdGV4dCBmcm9tIEZST00gdG8gVE8gYXMgcmVnZXhwLiIKICAocmVwbGFjZS1y ZWdleHAtaW4tc3RyaW5nCiAgICJbIFx0XSsiICJbIFx0XG5dKyIKICAgIChyZWdleHAtcXVv dGUKICAgICAoZG93bmNhc2UKICAgICAgKGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGll cyBmcm9tIHRvKSkpIG5pbCB0KSkKCihkZWZ1biBlbGluZm8tLW1ha2UtcmVnZXhwLTIgKGZy b20gdG8pCiAgIlJldHVybiBidWZmZXIgdGV4dCBmcm9tIEZST00gdG8gVE8gYXMgVGV4aW5m b2lzaCByZWdleHAuIgogIChyZXBsYWNlLXJlZ2V4cC1pbi1zdHJpbmcKICAgIkBcXChbQHt9 XVxcKSIgKGxhbWJkYSAoc3RyaW5nKSAobWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMgMSBz dHJpbmcpKQogICAoZWxpbmZvLS1tYWtlLXJlZ2V4cCBmcm9tIHRvKSkpCgooZGVmdW4gZWxp bmZvLS11cGRhdGUtcmVnZXhwICgmb3B0aW9uYWwgcmVzdCkKICAoc2V0cSBlbGluZm8tcmVn ZXhwCgkoY29uY2F0CgkgZWxpbmZvLXJlZ2V4cAoJIChlbGluZm8tLW1ha2UtcmVnZXhwIGVs aW5mby1mcm9tIChtYXRjaC1iZWdpbm5pbmcgMCkpCgkgKHVubGVzcyAoPSBlbGluZm8tZnJv bSAobWF0Y2gtYmVnaW5uaW5nIDApKQoJICAgZWxpbmZvLWF0LXJlZ2V4cCkKCSAod2hlbiBy ZXN0CgkgICAoY29uY2F0IHJlc3QgZWxpbmZvLWF0LXJlZ2V4cCkpKSkpCgooZGVmdW4gZWxp bmZvLS11cGRhdGUtcmVnZXhwLTgxMCAoJm9wdGlvbmFsIHJlc3QpCiAgKHNldHEgZWxpbmZv LXJlZ2V4cAoJKGNvbmNhdAoJIGVsaW5mby1yZWdleHAKCSAoZWxpbmZvLS1tYWtlLXJlZ2V4 cCBlbGluZm8tZnJvbSAobWF0Y2gtYmVnaW5uaW5nIDApKQoJICh1bmxlc3MgKD0gZWxpbmZv LWZyb20gKG1hdGNoLWJlZ2lubmluZyAwKSkKCSAgIGVsaW5mby1hdC1yZWdleHApCgkgKHdo ZW4gcmVzdAoJICAgKGNvbmNhdCByZXN0IGVsaW5mby1hdC1yZWdleHApKSkpKQoKKGRlZmNv bnN0IGVsaW5mby1pbmZvLXJlZ2V4cAogICJcXCgtLSBcXCg/OkZ1bmN0aW9uXFx8Q29tbWFu ZFxcfFZhcmlhYmxlXFx8TWFjcm9cXHxTcGVjaWFsIEZvcm1cXHxVc2VyIE9wdGlvblxcfFN5 bnRheCBjbGFzc1xcKTogXFwpXApcXHxcXCg/OlxcKFxcKk5vdGVcXClcXHxcXCg6OlxcKVxc fFxcKlxcKFdhcm5pbmc6XFwpXFwqXFwpWyBdKlxcfFvigJhdKjxcXChbXj5dK1xcKT5b4oCZ XSpcClxcfFxcKFxcKD86TGFcXCk/VGVYXFx8KFtDUl0pXFx8RXVyb1xcKVxcfFxcKOKAmFxc KFte4oCZXStcXCnigJlcXClcXHxcXChb4oCYXSpcXChbQS1aMC05Ki1dK1xcKVvigJldKlxc KVwKXFx8XFwoWyBcdFxuXStcXClcXHxcXChbJ1wiX10rXFwpXFx8XFwoLStcXClcXHxcXChc XC5bLl0rXFwpXApcXHxcXChcXCg/OmVycm9yXFwpP1stLiE9PnwqI11bLS4hPT58KiNdK1xc KVxcfFxcKFt7fV1cXCkiCiAgIlRoZSBiYXNpYyByZWdleHAgdXNlZCBieSBgZWxpbmZvLWdv dG8tdGV4aScuIikKCjs7IFVzZWQgZm9yIHRlc3Rpbmcgb25seSBzbyBSRU1PVkUgaXQuCihk ZWZ2YXIgZWxpbmZvLXRlc3QtdGV4aS13aW5kb3cgbmlsKQoKKGRlZnVuIGVsaW5mby1maW5k LXRhZy1vdGhlci13aW5kb3cgKHRhZ25hbWUgJm9wdGlvbmFsIG5leHQtcCByZWdleHAtcCkK ICAiT3VyIHZlcnNpb24gb2YgYGZpbmQtdGFnLW90aGVyLXdpbmRvdycuIgogIChsZXQqICgo d2luZG93LXBvaW50ICh3aW5kb3ctcG9pbnQpKQoJICh0YWdidWYgKGZpbmQtdGFnLW5vc2Vs ZWN0IHRhZ25hbWUgbmV4dC1wIHJlZ2V4cC1wKSkKCSAodGFncG9pbnQgKHByb2duIChzZXQt YnVmZmVyIHRhZ2J1ZikgKHBvaW50KSkpKQogICAgKHNldC13aW5kb3ctcG9pbnQgKHByb2cx CgkJCSAgKHNlbGVjdGVkLXdpbmRvdykKCQkJKHNlbGVjdC13aW5kb3cKCQkJIChvciAoZ2V0 LWJ1ZmZlci13aW5kb3cgdGFnYnVmKQoJCQkgICAgIChsZXQgKCh3aW5kb3cgKHNwbGl0LXdp bmRvdyBuaWwgbmlsICdsZWZ0KSkpCgkJCSAgICAgICAoc2V0LXdpbmRvdy1idWZmZXIgd2lu ZG93IHRhZ2J1ZikKCQkJICAgICAgIHdpbmRvdykpKQoJCQkoc2V0LXdpbmRvdy1wb2ludCAo c2VsZWN0ZWQtd2luZG93KSB0YWdwb2ludCkpCgkJICAgICAgd2luZG93LXBvaW50KSkpCgoo ZGVmdW4gZWxpbmZvLXdpbmRvd3Mtc3luY2ggKCZvcHRpb25hbCBzb3VyY2UgdGFyZ2V0KQog ICJTeW5jaCBgd2luZG93LXBvaW50JyBvZiB3aW5kb3cgVEFSR0VUIHdpdGggdGhhdCBvZiB3 aW5kb3cgU09VUkNFLiIKICAobGV0KiAoKHNvdXJjZSAob3Igc291cmNlIChzZWxlY3RlZC13 aW5kb3cpKSkKCSAodGFyZ2V0IChvciB0YXJnZXQKCQkgICAgICh3aW5kb3ctaW4tZGlyZWN0 aW9uICdsZWZ0IHNvdXJjZSkKCQkgICAgICh3aW5kb3ctaW4tZGlyZWN0aW9uICdyaWdodCBz b3VyY2UpKSkKCSAobGluZQoJICAod2l0aC1jdXJyZW50LWJ1ZmZlciAod2luZG93LWJ1ZmZl ciBzb3VyY2UpCgkgICAgKGNvdW50LXNjcmVlbi1saW5lcyAod2luZG93LXN0YXJ0IHNvdXJj ZSkgKHdpbmRvdy1wb2ludCBzb3VyY2UpKSkpCgkgOzsgRXhwZXJpbWVudGFsbHkgT0sgLi4u CgkgKHNvdXJjZS1oZWFkICgvICgrICh3aW5kb3ctaGVhZGVyLWxpbmUtaGVpZ2h0IHNvdXJj ZSkKCQkJICAgICh3aW5kb3ctdGFiLWxpbmUtaGVpZ2h0IHNvdXJjZSkpCgkJCSAoZnJhbWUt Y2hhci1oZWlnaHQgKHdpbmRvdy1mcmFtZSBzb3VyY2UpKSkpCgkgKHRhcmdldC1oZWFkICgv ICgrICh3aW5kb3ctaGVhZGVyLWxpbmUtaGVpZ2h0IHRhcmdldCkKCQkJICAgICh3aW5kb3ct dGFiLWxpbmUtaGVpZ2h0IHRhcmdldCkpCgkJCSAoZnJhbWUtY2hhci1oZWlnaHQgKHdpbmRv dy1mcmFtZSB0YXJnZXQpKSkpKQogICAgKHNldHEgbGluZSAoKyBsaW5lICgtIHNvdXJjZS1o ZWFkIHRhcmdldC1oZWFkKSkpCiAgICAod2l0aC1zZWxlY3RlZC13aW5kb3cgdGFyZ2V0CiAg ICAgIChyZWNlbnRlciAoMS0gbGluZSkpKSkpCgooZGVmdW4gZWxpbmZvLWdvdG8tdGV4aSAo KQogICJJbiBgSW5mby1tb2RlJyBkaXNwbGF5IGNvcnJlc3BvbmRpbmcgVGV4aW5mbyB0ZXh0 IGluIG90aGVyIHdpbmRvdy4KSWYgaW52b2tpbmcgdGhpcyBjb21tYW5kIGRvZXNuJ3QgZ2V0 IHlvdSB0byB0aGUgZGVzaXJlZCBwb3NpdGlvbgppbiB0aGUgVGV4aW5mbyBidWZmZXIsIHlv dSBtaWdodCB0cnkgdG8gaW52b2tlIGl0IGZyb20gYSBwb3NpdGlvbgpvbmUgbGluZSBhYm92 ZSBvciBiZWxvdyB0aGUgY3VycmVudCBvbmUgaW4gdGhlIEluZm8gYnVmZmVyLiIKICAoaW50 ZXJhY3RpdmUpCiAgKHVubGVzcyAoZXEgbWFqb3ItbW9kZSAnSW5mby1tb2RlKQogICAgKGVy cm9yICJUaGlzIGZ1bmN0aW9uIGNhbiBiZSBpbnZva2VkIGluIEluZm8tbW9kZSBvbmx5Iikp CiAgKGxldCogKChpbmZvLXdpbmRvdyAoc2VsZWN0ZWQtd2luZG93KSkKCSAod2luZG93LXBv aW50ICh3aW5kb3ctcG9pbnQpKQoJIChpbmZvLWZpbGUtbmFtZQoJICAod2hlbiAoYm91bmRw ICdJbmZvLWN1cnJlbnQtZmlsZSkKCSAgICAoZmlsZS1uYW1lLW5vbmRpcmVjdG9yeSBJbmZv LWN1cnJlbnQtZmlsZSkpKQoJICh0YWcKCSAgKHdoZW4gKGJvdW5kcCAnSW5mby1jdXJyZW50 LW5vZGUpCgkgICAgSW5mby1jdXJyZW50LW5vZGUpKQoJICh0ZXhpLXN1YmRpcgoJICAod2hl biBpbmZvLWZpbGUtbmFtZQoJICAgIChsZXQgKChjZWxsIChhc3NvYyBpbmZvLWZpbGUtbmFt ZSBlbGluZm8tbmFtZXMtYWxpc3QpKSkKCSAgICAgIChpZiBjZWxsIChjZHIgY2VsbCkgIm1p c2MiKSkpKQoJIChhdCAocG9pbnQpKQoJIChvZmZzZXQgMCkKCSB0ZXhpLWRpciB0ZXhpLWZp bGUgdGFncy1maWxlLW5hbWUKCSBkZWZhdWx0LXRhZyBhbmNob3IgcmVwZWF0IGZyb20gdG8K CSBjYXNlLWZvbGQtc2VhcmNoIHRhZ2J1ZikKICAgIChjb25kCiAgICAgKChub3QgdGV4aS1z dWJkaXIpCiAgICAgIChlcnJvciAiQ2FuJ3QgaWRlbnRpZnkgdGV4aW5mbyBzdWJkaXJlY3Rv cnkiKSkKICAgICAoKGZpbGUtZXhpc3RzLXAKICAgICAgIChzZXRxIHRleGktZGlyIChjb25j YXQgZWxpbmZvLXRleGktZGlyZWN0b3J5IHRleGktc3ViZGlyICIvIikpKSkKICAgICAodAog ICAgICAoZXJyb3IgIkNhbid0IGZpbmQgdGV4aW5mbyBzdWJkaXJlY3RvcnkiKSkpCgogICAg OzsgU2lnaCAuLi4KICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICA7OyBNb3ZlIGF3YXkgZnJv bSBlbXB0eSBsaW5lcy4KICAgICAgKHNhdmUtZXhjdXJzaW9uCgkoYmVnaW5uaW5nLW9mLWxp bmUpCgkod2hlbiAobG9va2luZy1hdCAiWyBcdF0qJCIpCgkgIChsZXQgKChwcmV2LWF0CgkJ IChwcm9nbgoJCSAgIChza2lwLWNoYXJzLWJhY2t3YXJkICIgXHRcbiIpCgkJICAgKHVubGVz cyAoYm9icCkKCQkgICAgIChwb2ludCkpKSkKCQkobmV4dC1hdAoJCSAocHJvZ24KCQkgICAo c2tpcC1jaGFycy1mb3J3YXJkICIgXHRcbiIpCgkJICAgKHVubGVzcyAoZW9icCkKCQkgICAg IChwb2ludCkpKSkpCgkgICAgKHNldHEgYXQKCQkgIChjb25kCgkJICAgKChhbmQgcHJldi1h dCBuZXh0LWF0KQoJCSAgICAoaWYgKD4gKC0gYXQgcHJldi1hdCkgKC0gbmV4dC1hdCBhdCkp IG5leHQtYXQgcHJldi1hdCkpCgkJICAgKHByZXYtYXQgcHJldi1hdCkKCQkgICAobmV4dC1h dCBuZXh0LWF0KSkpKSkpCiAgICAgIChnb3RvLWNoYXIgYXQpCiAgICAgIChzZXRxIGZyb20g KHByb2duCgkJICAgKGJlZ2lubmluZy1vZi1saW5lKQoJCSAgIChza2lwLWNoYXJzLWZvcndh cmQgIiBcdCIpCgkJICAgKHBvaW50KSkpCiAgICAgIChzZXRxIHRvIChwcm9nbgoJCSAoZW5k LW9mLWxpbmUpCgkJIChza2lwLWNoYXJzLWJhY2t3YXJkICIgXHQiKQoJCSAocG9pbnQpKSkK ICAgICAgOzsgVHJ5IHRvIGhhbmRsZSBhbiB4cmVmIHRoYXQgc3BhbnMgdGhlIGJlZ2lubmlu ZyBvZiB0aGlzIGxpbmUuCiAgICAgIDs7IFRoaXMgd2lsbCBwdXQgdXMgYWZ0ZXIgdGhlIHJl ZmVyZW5jZSBpbiB0aGUgdGV4aSBidWZmZXIsIGJ1dAogICAgICA7OyB0aGF0J3Mgc3RpbGwg YmV0dGVyIHRoYW4gZ2V0dGluZyB0byB0aGUgaGVhZCBvZiB0aGUgc2VjdGlvbi4KICAgICAg KHdoZW4gKHNhdmUtZXhjdXJzaW9uCgkgICAgICAoZ290by1jaGFyIGZyb20pCgkgICAgICAo YW5kIChyZS1zZWFyY2gtYmFja3dhcmQKCQkgICAgIlxcKltObl1vdGUiIChsaW5lLWJlZ2lu bmluZy1wb3NpdGlvbiAwKSB0KQoJCSAgIChub3QgKHJlLXNlYXJjaC1mb3J3YXJkICJbLixd XFx8OjoiIGZyb20gdCkpKSkKCShnb3RvLWNoYXIgZnJvbSkKCShyZS1zZWFyY2gtZm9yd2Fy ZCAiOjpcXHxcXChbLixdKT9cXCkiIHRvIHQpCgkod2hlbiAobWF0Y2gtYmVnaW5uaW5nIDEp CgkgIDs7IEZvdW5kIGEgY2xvc2luZyBgLicgb3IgYCwnIHNvIHJlbG9jYXRlIGBmcm9tJy4K CSAgKHNldHEgZnJvbSAocG9pbnQpKQoJICAoc2V0cSBhdCAobWF4IGZyb20gYXQpKSkpCgog ICAgICAoZ290by1jaGFyIGF0KQogICAgICAod2hlbiAoc2V0cSBkZWZhdWx0LXRhZyAoZWxp bmZvLS1kZWZhdWx0LXRhZykpCgkoc2V0cSBvZmZzZXQgKC0gYXQgKGNhciBkZWZhdWx0LXRh ZykpKQoJKHNldHEgYW5jaG9yIChjZHIgZGVmYXVsdC10YWcpKQoJKHNhdmUtZXhjdXJzaW9u CgkgIChnb3RvLWNoYXIgZnJvbSkKCSAgKGNhdGNoICdkb25lCgkgICAgKGxldCAoKGNhc2Ut Zm9sZC1zZWFyY2ggdCkpCgkgICAgICAod2hpbGUgKHJlLXNlYXJjaC1mb3J3YXJkIGFuY2hv ciBuaWwgdCkKCQkoaWYgKD0gKG1hdGNoLWJlZ2lubmluZyAwKSAoY2FyIGRlZmF1bHQtdGFn KSkKCQkgICAgKHRocm93ICdkb25lIHQpCgkJICAoc2V0cSByZXBlYXQKCQkJKGlmIHJlcGVh dCAoMSsgcmVwZWF0KSAyKSkpKSkpKSkKCiAgICAgIChnb3RvLWNoYXIgKHNldHEgZWxpbmZv LWZyb20gZnJvbSkpCiAgICAgIChzZXRxIGVsaW5mby1yZWdleHAgbmlsKQogICAgICA7OyBT Y2FuIGxpbmUuCiAgICAgICh3aGlsZSAocmUtc2VhcmNoLWZvcndhcmQgZWxpbmZvLWluZm8t cmVnZXhwIHRvIHQpCgkoY29uZAoJICgobWF0Y2gtYmVnaW5uaW5nIDEpKQkJCTsgLS0gRnVu Y3Rpb246IC4uLgoJICgobWF0Y2gtYmVnaW5uaW5nIDIpCQkJOyAqTm90ZQoJICAoZWxpbmZv LS11cGRhdGUtcmVnZXhwKQoJICAobGV0ICgoZnJvbS0xIChwb2ludCkpCgkJdG8tMSkKCSAg ICAoaWYgKHJlLXNlYXJjaC1mb3J3YXJkICI6IiB0byB0KQoJCShwcm9nbgoJCSAgKHNldHEg dG8tMSAobWF0Y2gtYmVnaW5uaW5nIDApKQoJCSAgKGlmIChsb29raW5nLWF0LXAgIjoiKQoJ CSAgICAgIDs7IDo6IGlzIGhhbmRsZWQgYnkgbWFpbiBsb29wLCByZXNjYW4uCgkJICAgICAg KGdvdG8tY2hhciBmcm9tLTEpCgkJICAgIDs7IEEgY29tcGxleCB4cmVmLCBoYW5kbGUgaXQg aGVyZS4KCQkgICAgKHNldHEgZWxpbmZvLXJlZ2V4cAoJCQkgIChjb25jYXQgZWxpbmZvLXJl Z2V4cCA7IEZvcmNlIGEgYHsnIGhlcmU/CgkJCQkgICJbYS16QS1aLCBcdFxuXSoiCgkJCQkg IChlbGluZm8tLW1ha2UtcmVnZXhwIGZyb20tMSB0by0xKQoJCQkJICAiW2EtekEtWiwgXHRc bl0qfSIpKQoJCSAgICA7OyBRdWl0IGxvb3AuCgkJICAgIChzZXRxIGZyb20gdG8pCgkJICAg IChnb3RvLWNoYXIgdG8pKSkKCSAgICAgIChzZXRxIGVsaW5mby1yZWdleHAKCQkgICAgKGNv bmNhdCBlbGluZm8tcmVnZXhwCTsgRm9yY2UgYSBgeycgaGVyZT8KCQkJICAgICJbYS16QS1a LCBcdFxuXSoiCgkJCSAgICAoZWxpbmZvLS1tYWtlLXJlZ2V4cCBmcm9tLTEgdG8pCgkJCSAg ICAiW2EtekEtWiwgXHRcbl0qfSIpKQoJICAgICAgOzsgUXVpdCBsb29wLgoJICAgICAgKHNl dHEgZnJvbSB0bykKCSAgICAgIChnb3RvLWNoYXIgdG8pKSkpCgkgKChtYXRjaC1iZWdpbm5p bmcgMykJCQk7IDo6CgkgIChlbGluZm8tLXVwZGF0ZS1yZWdleHApKQoJICgobWF0Y2gtYmVn aW5uaW5nIDQpCQkJOyAqV2FybmluZzoqCgkgIChlbGluZm8tLXVwZGF0ZS1yZWdleHApKQoJ ICgobWF0Y2gtYmVnaW5uaW5nIDUpCQkJOyBgPEtFWT4nCgkgIChlbGluZm8tLXVwZGF0ZS1y ZWdleHAKCSAgIChlbGluZm8tLW1ha2UtcmVnZXhwIChtYXRjaC1iZWdpbm5pbmcgNSkgKG1h dGNoLWVuZCA1KSkpKQoJICgobWF0Y2gtYmVnaW5uaW5nIDYpCgkgIChlbGluZm8tLXVwZGF0 ZS1yZWdleHAKCSAgIChjb25jYXQgIkA/IiAobWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMg NikgIlxcKD86W3t9XStcXCk/IikpKQoJICgobWF0Y2gtYmVnaW5uaW5nIDcpCQkJOyBRdW90 ZWQgc3RyaW5nCgkgIChlbGluZm8tLXVwZGF0ZS1yZWdleHAtODEwCgkgICAoZWxpbmZvLS1t YWtlLXJlZ2V4cCAobWF0Y2gtYmVnaW5uaW5nIDgpIChtYXRjaC1lbmQgOCkpKSkKCSAoKG1h dGNoLWJlZ2lubmluZyA5KQkJCTsgVXBwZXItY2FzZSBzdHJpbmcuCgkgIChlbGluZm8tLXVw ZGF0ZS1yZWdleHAtODEwCgkgICAoZWxpbmZvLS1tYWtlLXJlZ2V4cCAobWF0Y2gtYmVnaW5u aW5nIDEwKSAobWF0Y2gtZW5kIDEwKSkpKQoJICgobWF0Y2gtYmVnaW5uaW5nIDExKQkJCTsg V2hpdGVzcGFjZQoJICAoZWxpbmZvLS11cGRhdGUtcmVnZXhwICJbIFx0XG5dKyIpKQoJICgo bWF0Y2gtYmVnaW5uaW5nIDEyKQkJCTsgYCciCgkgIChlbGluZm8tLXVwZGF0ZS1yZWdleHAp KQoJICgobWF0Y2gtYmVnaW5uaW5nIDEzKQkJCTsgLS0KCSAgKGVsaW5mby0tdXBkYXRlLXJl Z2V4cCAiWy1dKyIpKQoJICgobWF0Y2gtYmVnaW5uaW5nIDE0KQkJCTsgLi4KCSAgKGVsaW5m by0tdXBkYXRlLXJlZ2V4cCAiXFwoPzpcXC5bLl0rXFx8QGRvdHN7fVxcKSIpKQoJICgobWF0 Y2gtYmVnaW5uaW5nIDE1KQkJCTsgPT4KCSAgKGVsaW5mby0tdXBkYXRlLXJlZ2V4cAoJICAg KGNvbmNhdAoJICAgICJcXCg/OkBbYS16XSt7fVxcKVxcfCIKCSAgICAoZWxpbmZvLS1tYWtl LXJlZ2V4cCAobWF0Y2gtYmVnaW5uaW5nIDE1KSAobWF0Y2gtZW5kIDE1KSkpKSkKCSAoKG1h dGNoLWJlZ2lubmluZyAxNikJCQk7IHsgb3IgfQoJICAoZWxpbmZvLS11cGRhdGUtcmVnZXhw CgkgICAoY29uY2F0ICJAPyIgKG1hdGNoLXN0cmluZy1uby1wcm9wZXJ0aWVzIDE2KSBlbGlu Zm8tYXQtcmVnZXhwKSkpCgkgOzsgRnV0dXJlIGFkZGl0aW9ucyBnbyBoZXJlLgoJICkKCShz ZXRxIGVsaW5mby1mcm9tIChwb2ludCkpKQogICAgICAoc2V0cSBlbGluZm8tcmVnZXhwCgkg ICAgKGNvbmNhdCBlbGluZm8tcmVnZXhwIChlbGluZm8tLW1ha2UtcmVnZXhwIGVsaW5mby1m cm9tIHRvKSkpKQoKICAgIChpZiAobm90IChmaWxlLWV4aXN0cy1wCgkgICAgICAoc2V0cSB0 YWdzLWZpbGUtbmFtZSAoY29uY2F0IHRleGktZGlyICJUQUdTIikpKSkKCShlcnJvciAiTm8g dGFncyBmaWxlIGZvdW5kIikKICAgICAgKHNldHEgdGFnYnVmIChmaW5kLXRhZy1ub3NlbGVj dCAoY29uY2F0ICJeQG5vZGUgIiB0YWcgIlt/LF0iKSBuaWwgdCkpCiAgICAgIChlbGluZm8t ZmluZC10YWctb3RoZXItd2luZG93IChjb25jYXQgIl5Abm9kZSAiIHRhZyAiW38sXSIpIG5p bCB0KQoKICAgICAgOzsgVXNlZCBmb3IgdGVzdGluZyBvbmx5IHNvIFJFTU9WRSBpdC4KICAg ICAgKHNldHEgZWxpbmZvLXRlc3QtdGV4aS13aW5kb3cgKHNlbGVjdGVkLXdpbmRvdykpCgog ICAgICAobGV0ICgoY2FzZS1mb2xkLXNlYXJjaCB0KSkKCSh3aGVuIGVsaW5mby1yZWdleHAK CSAgKHdpdGgtY3VycmVudC1idWZmZXIgKGdldC1idWZmZXItY3JlYXRlICIqdGVzdCoiKQoJ ICAgIChkZWxldGUtcmVnaW9uIChwb2ludC1taW4pIChwb2ludC1tYXgpKQoJICAgIChpbnNl cnQgZWxpbmZvLXJlZ2V4cCkpCgkgIChsZXQgKChhdCAocG9pbnQpKSkKCSAgICAoY29uZAoJ ICAgICAoKGFuZCAocmUtc2VhcmNoLWZvcndhcmQgKGNvbmNhdCAiXFwoIiBlbGluZm8tcmVn ZXhwICJcXClcXHxebm9kZSIpIG5pbCB0KQoJCSAgIChtYXRjaC1iZWdpbm5pbmcgMSkpCgkg ICAgICAoZ290by1jaGFyIChtYXRjaC1iZWdpbm5pbmcgMSkpCgkgICAgICAoc2F2ZS1yZXN0 cmljdGlvbgoJCSh3aWRlbikKCQkobmFycm93LXRvLXJlZ2lvbiAobWF0Y2gtYmVnaW5uaW5n IDEpIChtYXRjaC1lbmQgMSkpCgkJKHdoZW4gKGFuZCBhbmNob3IgKHJlLXNlYXJjaC1mb3J3 YXJkIGFuY2hvciBuaWwgdCByZXBlYXQpKQoJCSAgKGdvdG8tY2hhciAoKyAobWF0Y2gtYmVn aW5uaW5nIDApIG9mZnNldCkpKSkpCgkgICAgICh0CgkgICAgICAoZ290by1jaGFyIGF0KSkp KSkpKQoKICAgIChzZXQtd2luZG93LXBvaW50IGluZm8td2luZG93IHdpbmRvdy1wb2ludCkK ICAgIChlbGluZm8td2luZG93cy1zeW5jaCBpbmZvLXdpbmRvdyAoZ2V0LWJ1ZmZlci13aW5k b3cgdGFnYnVmKSkKICAgIDs7IFRoZSBmb2xsb3dpbmcgbWlnaHQgZ2V0IHJlbW92ZWQuCiAg ICAoc2VsZWN0LXdpbmRvdyBpbmZvLXdpbmRvdykKICAgICkpCgooZGVmY29uc3QgZWxpbmZv LXRleGktZ2x5cGgtcmVnZXhwCiAgKHJlZ2V4cC1vcHQKICAgJygiZG90cyIgImVuZGRvdHMi ICJidWxsZXQiICJtaW51cyIgInJlc3VsdCIgImV4cGFuc2lvbiIKICAgICAicHJpbnQiICJl cnJvciIgImVxdWl2IiAicG9pbnQiICJjb3B5cmlnaHQiCiAgICAgInJlZ2lzdGVyZWRzeW1i b2wiICJldXJvIiAicG91bmRzIiAiTGFUZVgiICJUZVgiKSkKICAiUmVndWxhciBleHByZXNz aW9uIGZvciBnbHlwaHMgaW4gdGV4aSBidWZmZXJzLiIpCgooZGVmY29uc3QgZWxpbmZvLXRl eGktcmVnZXhwCiAgKGNvbmNhdAogICAiQGRlZlxcKHVuXFx8Zm4gQ29tbWFuZFxcfHZhclxc fG1hY3JvXFx8c3BlY1xcfG9wdFxcKVsgXHRdK1wKXFx8XFwoPzpAcD94cmVme1xcKFtefV0r XFwpXFwoPzp9XFx8JFxcKVxcKVxcfEBcXCg/OnN0cm9uZ1xcfGVtcGhcXCl7XFwoW159XStc XCl9XApcXHxcXChAIiBlbGluZm8tdGV4aS1nbHlwaC1yZWdleHAgInt9XFwpXFx8XFwoPzpA ZGZue1xcKFtefV0rXFwpfVxcKVwKXFx8XFwoQFthLXpdK3tcXClcXHxcXCh9XFwpXFx8XFwo WyBcdF0rXFwpXFx8XFwoW2AnXCJdW2AnXCJdK1xcKSIpCiAgIlRoZSBiYXNpYyByZWdleHAg dXNlZCBieSBgZWxpbmZvLWdvdG8taW5mbycuIikKCihkZWZ1biBlbGluZm8tZ290by1pbmZv ICgpCiAgIkluIGB0ZXhpbmZvLW1vZGUnIGRpc3BsYXkgY29ycmVzcG9uZGluZyBJbmZvIG5v ZGUgaW4gb3RoZXIgd2luZG93LgpJZiBpbnZva2luZyB0aGlzIGNvbW1hbmQgZG9lc24ndCBn ZXQgeW91IHRvIHRoZSBkZXNpcmVkIHBvc2l0aW9uCmluIHRoZSBJbmZvIGJ1ZmZlciwgeW91 IG1pZ2h0IHRyeSB0byBpbnZva2UgaXQgZnJvbSBhIHBvc2l0aW9uCm9uZSBsaW5lIGFib3Zl IG9yIGJlbG93IHRoZSBjdXJyZW50IG9uZSBpbiB0aGUgVGV4aW5mbyBidWZmZXIuIgogIChp bnRlcmFjdGl2ZSkKICAodW5sZXNzIChlcSBtYWpvci1tb2RlICd0ZXhpbmZvLW1vZGUpCiAg ICAoZXJyb3IgIlRoaXMgZnVuY3Rpb24gY2FuIGJlIGludm9rZWQgaW4gdGV4aW5mby1tb2Rl IG9ubHkiKSkKICAobGV0KiAoKHRleGktd2luZG93IChzZWxlY3RlZC13aW5kb3cpKQoJICh3 aW5kb3ctcG9pbnQgKHdpbmRvdy1wb2ludCkpCgkgKGluZm8tbm9kZS0zCgkgIChzYXZlLWV4 Y3Vyc2lvbgoJICAgICh3aGVuIChyZS1zZWFyY2gtYmFja3dhcmQgIl5Abm9kZSBcXChbLWEt ekEtWiBdK1xcKSIgbmlsIHQpCgkgICAgICAobWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMg MSkpKSkKCSAoaW5mby1ub2RlLTIKCSAgKHNhdmUtZXhjdXJzaW9uCgkgICAgKGdvdG8tY2hh ciAocG9pbnQtbWluKSkKCSAgICAod2hlbiAocmUtc2VhcmNoLWZvcndhcmQgIl5Abm9kZSBc XChbLWEtekEtWiBdK1xcKSIgbmlsIHQpCgkgICAgICAobWF0Y2gtc3RyaW5nLW5vLXByb3Bl cnRpZXMgMSkpKSkKCSAoaW5mby1ub2RlLTEKCSAgOzsgSWYgd2UgY2FuJ3QgZmluZCBhbiBh c3NvY2lhdGlvbiwgYGluZm8tb3RoZXItd2luZG93JyB3aWxsCgkgIDs7IHN0YXJ0IGF0IHRo ZSB0b3Agbm9kZS4KCSAgKGNhciAocmFzc29jCgkJKGZpbGUtbmFtZS1ub25kaXJlY3RvcnkK CQkgKGRpcmVjdG9yeS1maWxlLW5hbWUKCQkgIChmaWxlLW5hbWUtZGlyZWN0b3J5IGJ1ZmZl ci1maWxlLW5hbWUpKSkKCQllbGluZm8tbmFtZXMtYWxpc3QpKSkKCSAob2Zmc2V0IDApCgkg cmVnZXhwIGRlZmF1bHQtdGFnIGFuY2hvciByZXBlYXQKCSBjYXNlLWZvbGQtc2VhcmNoKQoK ICAgIChzYXZlLWV4Y3Vyc2lvbgogICAgICA7OyBVc2UgYnJ1dGUgZm9yY2UuCiAgICAgICh3 aGlsZSAoc2F2ZS1leGN1cnNpb24KCSAgICAgICAoYmVnaW5uaW5nLW9mLWxpbmUpCgkgICAg ICAgKG9yIChsb29raW5nLWF0ICJbIFx0XSpcblxcfEBhbmNob3J7IikKCQkgICAoYW5kIChs b29raW5nLWF0ICJAW2Etel0rXFwoPzogXFx8JFxcKSIpCgkJCShub3QgKGxvb2tpbmctYXQg IkBkZWZcXCh1blxcfGZuIENvbW1hbmRcXHx2YXJcXHxtYWNyb1xcfHNwZWNcXHxvcHRcXCki KSkpKSkKCShmb3J3YXJkLWxpbmUpKQogICAgICAobGV0ICgoYXQgKHBvaW50KSkKCSAgICAg KGZyb20gKHByb2duCgkJICAgICAoYmVnaW5uaW5nLW9mLWxpbmUpCgkJICAgICAoc2tpcC1j aGFycy1mb3J3YXJkICIgXHQiKQoJCSAgICAgKHBvaW50KSkpCgkgICAgICh0byAocHJvZ24K CQkgICAoZW5kLW9mLWxpbmUpCgkJICAgKHNraXAtY2hhcnMtYmFja3dhcmQgIiBcdCIpCgkJ ICAgKHBvaW50KSkpKQoKCTs7IEdldCBvdXQgb2YgYW55IHJlZmVyZW5jZSBhdCBCT0wsIHdl IGNhbid0IHRyYWNlIGl0IGFueXdheS4KCShjb25kaXRpb24tY2FzZSBuaWwKCSAgICAoYW5k IChwcm9nbgoJCSAgIChnb3RvLWNoYXIgZnJvbSkKCQkgICAodXAtbGlzdCAtMSkKCQkgICAo bG9va2luZy1hdCAieyIpKQoJCSAobG9va2luZy1iYWNrICJ4cmVmIiAobGluZS1iZWdpbm5p bmctcG9zaXRpb24pKQoJCSAocHJvZ24KCQkgICAoZm9yd2FyZC1zZXhwKQoJCSAgIChzZXRx IGZyb20gKHBvaW50KSkKCQkgICAoc2V0cSBhdCAobWF4IGF0IGZyb20pKSkpCgkgIChlcnJv ciBuaWwpKQoKCShnb3RvLWNoYXIgKG1heCBhdCBmcm9tKSkKCSh3aGVuIChzZXRxIGRlZmF1 bHQtdGFnIChlbGluZm8tLWRlZmF1bHQtdGFnKSkKCSAgKHNldHEgb2Zmc2V0ICgtIGF0IChj YXIgZGVmYXVsdC10YWcpKSkKCSAgKHNldHEgYW5jaG9yIChjZHIgZGVmYXVsdC10YWcpKQoJ ICAoc2F2ZS1leGN1cnNpb24KCSAgICAoZ290by1jaGFyIGZyb20pCgkgICAgKGNhdGNoICdk b25lCgkgICAgICAobGV0ICgoY2FzZS1mb2xkLXNlYXJjaCB0KSkKCQkod2hpbGUgKHJlLXNl YXJjaC1mb3J3YXJkIGFuY2hvciBuaWwgdCkKCQkgIChpZiAoPSAobWF0Y2gtYmVnaW5uaW5n IDApIChjYXIgZGVmYXVsdC10YWcpKQoJCSAgICAgICh0aHJvdyAnZG9uZSB0KQoJCSAgICAo c2V0cSByZXBlYXQKCQkJICAoaWYgcmVwZWF0ICgxKyByZXBlYXQpIDIpKSkpKSkpKQoKCShn b3RvLWNoYXIgZnJvbSkKCTs7IFNjYW4gbGluZS4KCSh3aGlsZSAocmUtc2VhcmNoLWZvcndh cmQgZWxpbmZvLXRleGktcmVnZXhwIHRvIHQpCgkgIChjb25kCgkgICAoKG1hdGNoLWJlZ2lu bmluZyAxKSkKCSAgICgobWF0Y2gtYmVnaW5uaW5nIDIpCQkJOyBAcD94cmVmCgkgICAgKG9y IChhbmQgKHNhdmUtZXhjdXJzaW9uCgkJICAgICAgIChnb3RvLWNoYXIgKG1hdGNoLWVuZCAy KSkKCQkgICAgICAgKGFuZCAoc2F2ZS1tYXRjaC1kYXRhCgkJCSAgICAgIDs7IEEgY29tbWEg d2l0aGluIHRoZSBicmFjZXMgc3RhbmRzIGZvciBhCgkJCSAgICAgIDs7IGNvbXBsZXggcmVm ZXJlbmNlLgoJCQkgICAgICAocmUtc2VhcmNoLWJhY2t3YXJkICIsIiAobWF0Y2gtYmVnaW5u aW5nIDIpIHQpKQoJCQkgICAgKHNraXAtY2hhcnMtZm9yd2FyZCAiIFx0XG4sIikKCQkJICAg IChzZXRxIHJlZ2V4cAoJCQkJICAoY29uY2F0CgkJCQkgICByZWdleHAKCQkJCSAgIChlbGlu Zm8tLW1ha2UtcmVnZXhwLTIgZnJvbSAobWF0Y2gtYmVnaW5uaW5nIDApKQoJCQkJICAgIlxc Km5vdGVbIFx0XG5dKiIKCQkJCSAgIChlbGluZm8tLW1ha2UtcmVnZXhwLTIgKHBvaW50KSAo bWF0Y2gtZW5kIDIpKSkpKSkKCQkgICAgIDs7IExlYXZlIG1haW4gbG9vcC4KCQkgICAgIChz ZXRxIGZyb20gdG8pCgkJICAgICAoZ290by1jaGFyIHRvKSkKCQkoc2V0cSByZWdleHAKCQkg ICAgICAoY29uY2F0CgkJICAgICAgIHJlZ2V4cCAoZWxpbmZvLS1tYWtlLXJlZ2V4cC0yIGZy b20gKG1hdGNoLWJlZ2lubmluZyAwKSkKCQkgICAgICAgIlxcKm5vdGVbIFx0XG5dKiIKCQkg ICAgICAgKGVsaW5mby0tbWFrZS1yZWdleHAtMiAobWF0Y2gtYmVnaW5uaW5nIDIpIChtYXRj aC1lbmQgMikpCgkJICAgICAgICI6OlsgXHRcbl0qIikpKSkKCSAgICgobWF0Y2gtYmVnaW5u aW5nIDMpCQkJOyBAc3Ryb25nIG9yIEBlbXBoCgkgICAgKHNldHEgcmVnZXhwCgkJICAoY29u Y2F0CgkJICAgcmVnZXhwIChlbGluZm8tLW1ha2UtcmVnZXhwLTIgZnJvbSAobWF0Y2gtYmVn aW5uaW5nIDApKQoJCSAgICJbKl9dIiAoZWxpbmZvLS1tYWtlLXJlZ2V4cC0yIChtYXRjaC1i ZWdpbm5pbmcgMykgKG1hdGNoLWVuZCAzKSkKCQkgICAiWypfXVsgXHRcbl0qIikpKQoJICAg KChtYXRjaC1iZWdpbm5pbmcgNCkJCQk7IFNvbWUgc29ydCBvZiBnbHlwaAoJICAgIChzZXRx IHJlZ2V4cAoJCSAgKGNvbmNhdAoJCSAgIHJlZ2V4cCAoZWxpbmZvLS1tYWtlLXJlZ2V4cC0y IGZyb20gKG1hdGNoLWJlZ2lubmluZyAwKSkKCQkgICAiXFwoPzpcXCg/OmVycm9yXFwpP1st LiE9PnwqXVstLiE9PnwqXStcXHxcXCg/OkxhXFwpP1RlWFxcfChbQ1JdKVxcfEV1cm9cXHwj XFwpWyBcdFxuXSoiKSkpCgkgICAoKG1hdGNoLWJlZ2lubmluZyA1KQkJCTsgQGRmbgoJICAg IChzZXRxIHJlZ2V4cAoJCSAgKGNvbmNhdAoJCSAgIHJlZ2V4cCAoZWxpbmZvLS1tYWtlLXJl Z2V4cC0yIGZyb20gKG1hdGNoLWJlZ2lubmluZyAwKSkKCQkgICAiXCIiIChlbGluZm8tLW1h a2UtcmVnZXhwLTIgKG1hdGNoLWJlZ2lubmluZyA1KSAobWF0Y2gtZW5kIDUpKQoJCSAgICJc IiIpKSkKCSAgICgobWF0Y2gtYmVnaW5uaW5nIDYpCQkJOyBALi4uewoJICAgIChzZXRxIHJl Z2V4cAoJCSAgKGNvbmNhdAoJCSAgIHJlZ2V4cCAoZWxpbmZvLS1tYWtlLXJlZ2V4cC0yIGZy b20gKG1hdGNoLWJlZ2lubmluZyAwKSkKCQkgICAi4oCYPyIpKSkKCSAgICgobWF0Y2gtYmVn aW5uaW5nIDcpCQkJOyB9CgkgICAgKHNldHEgcmVnZXhwCgkJICAoY29uY2F0CgkJICAgcmVn ZXhwIChlbGluZm8tLW1ha2UtcmVnZXhwLTIgZnJvbSAobWF0Y2gtYmVnaW5uaW5nIDApKQoJ CSAgICLigJk/IikpKQoJICAgKChtYXRjaC1iZWdpbm5pbmcgOCkJCQk7IHdoaXRlc3BhY2UK CSAgICAoc2V0cSByZWdleHAKCQkgIChjb25jYXQKCQkgICByZWdleHAgKGVsaW5mby0tbWFr ZS1yZWdleHAtMiBmcm9tIChtYXRjaC1iZWdpbm5pbmcgMCkpCgkJICAgIlsgXHRcbl0qIikp KQoJICAgKChtYXRjaC1iZWdpbm5pbmcgOSkJCTsgcXVvdGVzIGxpa2UgYGAuLi4nJwoJICAg IChzZXRxIHJlZ2V4cAoJCSAgKGNvbmNhdAoJCSAgIHJlZ2V4cCAoZWxpbmZvLS1tYWtlLXJl Z2V4cC0yIGZyb20gKG1hdGNoLWJlZ2lubmluZyAwKSkKCQkgICAiW+KAmOKAmVwiXSsiKSkp CgkgICApCQkJCSAgICAgOyBGdXR1cmUgYWRkaXRpb25zIGdvIGhlcmUuCgkgIChzZXRxIGZy b20gKHBvaW50KSkpCgkoc2V0cSByZWdleHAKCSAgICAgIChjb25jYXQgcmVnZXhwIChlbGlu Zm8tLW1ha2UtcmVnZXhwLTIgZnJvbSB0bykpKSkpCgogICAgKGluZm8tb3RoZXItd2luZG93 IGluZm8tbm9kZS0xKQogICAgKEluZm8tZ290by1ub2RlIGluZm8tbm9kZS0yKQogICAgKHdo ZW4gaW5mby1ub2RlLTMKICAgICAgKEluZm8tZ290by1ub2RlIGluZm8tbm9kZS0zKSkKCiAg ICAobGV0ICgoY2FzZS1mb2xkLXNlYXJjaCB0KSkKICAgICAgKHdoZW4gcmVnZXhwCgkod2l0 aC1jdXJyZW50LWJ1ZmZlciAoZ2V0LWJ1ZmZlci1jcmVhdGUgIip0ZXN0KiIpCgkgIChkZWxl dGUtcmVnaW9uIChwb2ludC1taW4pIChwb2ludC1tYXgpKQoJICAoaW5zZXJ0IHJlZ2V4cCkp CgkobGV0ICgoYXQgKHBvaW50KSkpCgkgIChjb25kCgkgICA7OyBXZSBjb3VsZCBhZGQgbmFt ZSBhZnRlciBGaWxlOiBiZWxvdy4KCSAgICgoYW5kIChyZS1zZWFyY2gtZm9yd2FyZCAoY29u Y2F0ICJcXCgiIHJlZ2V4cCAiXFwpXFx8XkZpbGU6ICIpIG5pbCB0KQoJCSAobWF0Y2gtYmVn aW5uaW5nIDEpKQoJICAgIChnb3RvLWNoYXIgKG1hdGNoLWJlZ2lubmluZyAxKSkKCSAgICAo c2F2ZS1yZXN0cmljdGlvbgoJICAgICAgKHdpZGVuKQoJICAgICAgKG5hcnJvdy10by1yZWdp b24gKG1hdGNoLWJlZ2lubmluZyAxKSAobWF0Y2gtZW5kIDEpKQoJICAgICAgKHdoZW4gKGFu ZCBhbmNob3IgKHJlLXNlYXJjaC1mb3J3YXJkIGFuY2hvciBuaWwgdCByZXBlYXQpKQoJCShn b3RvLWNoYXIgKCsgKG1hdGNoLWJlZ2lubmluZyAwKSBvZmZzZXQpKSkpKQoJICAgKHQKCSAg ICAoZ290by1jaGFyIGF0KSkpKSkpCgogICAgKHNldC13aW5kb3ctcG9pbnQgdGV4aS13aW5k b3cgd2luZG93LXBvaW50KQogICAgKGVsaW5mby13aW5kb3dzLXN5bmNoIHRleGktd2luZG93 IChnZXQtYnVmZmVyLXdpbmRvdyAiKmluZm8qIikpCiAgICAoc2VsZWN0LXdpbmRvdyB0ZXhp LXdpbmRvdykJCQk7IHJlbW92ZSB0aGlzIGV2dGx5CiAgICApKQoKOzsgVW5sZXNzIHBlb3Bs ZSBvYmplY3QgLi4uCihkZWZpbmUta2V5IEluZm8tbW9kZS1tYXAgIlxDLWNcQy1nIiAnZWxp bmZvLWdvdG8tdGV4aSkKKGRlZmluZS1rZXkgdGV4aW5mby1tb2RlLW1hcCAiXEMtY1xDLWci ICdlbGluZm8tZ290by1pbmZvKQooZGVmaW5lLWtleSB0ZXhpbmZvLW1vZGUtbWFwICJcTS1v IiAnZWxpbmZvLWdvdG8taW5mbykKCjs7IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCjs7Cjs7 OwkJICAgR3JhYmJpbmcgRG9jdW1lbnRhdGlvbiBEdHJpbmdzCjs7IF9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fCjs7CgooZGVmdW4gZWxpbmZvLWdldC1kZWZpbml0aW9uICgpCiAgIkFkZCBk b2Mgc3RyaW5nIG9mIG9iamVjdCBhdCBgcG9pbnQnIHRvIGtpbGwgcmluZy4KVGhlIGRvYyBz dHJpbmcgaXMgc3VpdGFibGUgZm9yIGluc2VydGlvbiBpbnRvIEVsaXNwIFRleGluZm8KYnVm ZmVycy4iCiAgKGludGVyYWN0aXZlKQogIChzYXZlLWV4Y3Vyc2lvbgogICAgKGxldCAoKGF0 IChwb2ludCkpCgkgIGxpbWl0IGZyb20gdG8KCSAgdHlwZSBuYW1lIGFyZy1saXN0IGluaXQt dmFsdWUgZG9jIG9wZW4tcGFyZW4tYXQpCiAgICAgIChjb25kCiAgICAgICAoKGVxIG1ham9y LW1vZGUgJ2VtYWNzLWxpc3AtbW9kZSkKCShiZWdpbm5pbmctb2YtZGVmdW4pCgkod2hlbiAo bG9va2luZy1hdCAiKFxcKD86XFwoZGVmXFwoPzp1blxcfHN1YnN0XFwpXFwpXFx8XFwoZGVm dmFyXFwpXFx8XFwoZGVmY3VzdG9tXFwpXFx8XFwoZGVmbWFjcm9cXClcXClbIFx0XSsiKQoJ ICAoc2V0cSB0eXBlCgkJKGNvbmQKCQkgKChtYXRjaC1iZWdpbm5pbmcgMSkgJ2Z1bmN0aW9u KQoJCSAoKG1hdGNoLWJlZ2lubmluZyAyKSAndmFyaWFibGUpCgkJICgobWF0Y2gtYmVnaW5u aW5nIDMpICdvcHRpb24pCgkJICgobWF0Y2gtYmVnaW5uaW5nIDQpICdtYWNybykpKQoJICAo Z290by1jaGFyIChtYXRjaC1lbmQgMCkpCgkgIChzZXRxIG5hbWUgKGVsaW5mby0tZ2V0LW5l eHQpKQoJICAoY29uZAoJICAgKChtZW1xIHR5cGUgJyhmdW5jdGlvbiBjb21tYW5kIG1hY3Jv KSkKCSAgICAoc2tpcC1jaGFycy1mb3J3YXJkICIgXHRcbigiKQoJICAgICh3aGlsZSAobm90 IChsb29raW5nLWF0ICIpIikpCgkgICAgICAoc2V0cSBhcmctbGlzdAoJCSAgICAoY29ucyAo YnVmZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzCgkJCSAgIChwb2ludCkKCQkJICAgKHBy b2duCgkJCSAgICAgKHNraXAtY2hhcnMtZm9yd2FyZCAiXiBcdFxuKSIpCgkJCSAgICAgKHBv aW50KSkpCgkJCSAgYXJnLWxpc3QpKQoJICAgICAgKHNraXAtY2hhcnMtZm9yd2FyZCAiIFx0 XG4iKSkKCSAgICAoc2V0cSBhcmctbGlzdCAobnJldmVyc2UgYXJnLWxpc3QpKSkKCSAgICgo bWVtcSB0eXBlICcodmFyaWFibGUgb3B0aW9uKSkKCSAgICAoc2tpcC1jaGFycy1mb3J3YXJk ICIgXHRcbiIpCgkgICAgKHNldHEgaW5pdC12YWx1ZQoJCSAgKGJ1ZmZlci1zdWJzdHJpbmct bm8tcHJvcGVydGllcwoJCSAgIChwb2ludCkKCQkgICAocHJvZ24KCQkgICAgIChmb3J3YXJk LXNleHApCgkJICAgICAocG9pbnQpKSkpKSkKCSAgKHNraXAtY2hhcnMtZm9yd2FyZCAiIFx0 XG4pIikKCSAgOzsgV2UgbXVzdCBiZSBiZWZvcmUgdGhlIGRvYy1zdHJpbmcgbm93LgoJICAo c2V0cSBkb2MgKGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGllcwoJCSAgICAgKHByb2du CgkJICAgICAgIChza2lwLWNoYXJzLWZvcndhcmQgIiBcdFxuIikKCQkgICAgICAgKDErIChw b2ludCkpKQoJCSAgICAgKHByb2duCgkJICAgICAgIChmb3J3YXJkLXNleHApCgkJICAgICAg ICgxLSAocG9pbnQpKSkpKQoJICAod2hlbiAoZXEgdHlwZSAnZnVuY3Rpb24pCgkgICAgOzsg Q2hlY2sgZm9yIGludGVyYWN0aXZlIHByb3BlcnR5LgoJICAgIChmb3J3YXJkLWNvbW1lbnQg KGJ1ZmZlci1zaXplKSkKCSAgICAod2hlbiAobG9va2luZy1hdCAiKGludGVyYWN0aXZlIikK CSAgICAgIChzZXRxIHR5cGUgJ2NvbW1hbmQpKSkpKQogICAgICAgKChlcSBtYWpvci1tb2Rl ICdjLW1vZGUpCgkoYmVnaW5uaW5nLW9mLWRlZnVuKQoJKGNvbmQKCSAoKGxvb2tpbmctYXQg InZvaWRbIFx0XG5dKnN5bXNfb2YiKQoJICAoc2V0cSBsaW1pdCAocG9pbnQpKQoJICAoZ290 by1jaGFyIGF0KQoJICAod2hlbiAob3IgKHNhdmUtZXhjdXJzaW9uCgkJICAgICAgKGJlZ2lu bmluZy1vZi1saW5lKQoJCSAgICAgIChsb29raW5nLWF0CgkJICAgICAgICJbIFx0XSpERUZW QVJfXFwoPzpMSVNQXFx8Qk9PTFxcfElOVFxcfFBFUl9CVUZGRVJcXClbIFx0XSsoXCJcXChb XlwiIFx0XG5dK1xcKSIpKQoJCSAgICAocmUtc2VhcmNoLWJhY2t3YXJkCgkJICAgICAiREVG VkFSX1xcKD86TElTUFxcfEJPT0xcXHxJTlRcXHxQRVJfQlVGRkVSXFwpWyBcdF0rKFwiXFwo W15cIiBcdFxuXStcXCkiIGxpbWl0IHQpKQoJICAgIChzZXRxIHR5cGUgJ3ZhcmlhYmxlKQoJ ICAgIChzZXRxIG5hbWUgKG1hdGNoLXN0cmluZy1uby1wcm9wZXJ0aWVzIDEpKSkpCgkgOzsg VGhlIGZvbGxvd2luZyBtdXN0IGJlIGRlY2lkZWQuCgkgOzsgKHdoZW4gKGVxIHR5cGUgJ3Zh cmlhYmxlKSAoY3VzdG9tLXZhcmlhYmxlLXAgKGludGVybiBuYW1lKSkpCgkgOzsgKHNldHEg dHlwZSAnb3B0aW9uKSkKCSAoKGxvb2tpbmctYXQgIlxcKD86REVGVU5cXClbIFx0XSsoXCJc XChbXlwiIFx0XG5dK1xcKSIpCgkgIChzZXRxIHR5cGUgJ2Z1bmN0aW9uKQoJICAoc2V0cSBu YW1lIChtYXRjaC1zdHJpbmctbm8tcHJvcGVydGllcyAxKSkpKQoJKGNvbmQKCSAoKGVxIHR5 cGUgJ2Z1bmN0aW9uKQoJICAobGV0ICgoaW5kZXggMCkKCQlmcm9tIHRvIG1pbi1hcmdzKQoJ ICAgIChyZS1zZWFyY2gtZm9yd2FyZCAiLFsgXHRdKiIgbmlsIG5pbCAzKQoJICAgIDs7IE11 c3QgYmUgYmVmb3JlIE1JTiBub3cuCgkgICAgKHNldHEgbWluLWFyZ3MKCQkgIChzdHJpbmct dG8tbnVtYmVyCgkJICAgKGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGllcwoJCSAgICAo cG9pbnQpCgkJICAgIChwcm9nbiAoc2tpcC1jaGFycy1mb3J3YXJkICIwLTkiKSAocG9pbnQp KSkpKQoJICAgIChyZS1zZWFyY2gtZm9yd2FyZCAiLFsgXHRcbl0qIiBuaWwgdCAyKQoJICAg ICh1bmxlc3MgKGxvb2tpbmctYXQgIjAiKQoJICAgICAgOzsgQ29tbWFuZC4KCSAgICAgIChz ZXRxIHR5cGUgJ2NvbW1hbmQpKQoJICAgIChyZS1zZWFyY2gtZm9yd2FyZCAiXlsgXHRdKmRv YzpbIFxdKlxcKC9cXCpbIFx0XSpcXCkiIG5pbCB0KQoJICAgIChzZXRxIGZyb20gKG1hdGNo LWVuZCAwKSkKCSAgICAoZ290by1jaGFyIChtYXRjaC1iZWdpbm5pbmcgMSkpCgkgICAgKGZv cndhcmQtY29tbWVudCAxKQoJICAgIChzYXZlLWV4Y3Vyc2lvbgoJICAgICAgKHNraXAtY2hh cnMtYmFja3dhcmQgIiovIFx0IikKCSAgICAgIChzZXRxIHRvIChwb2ludCkpKQoJICAgIChz ZXRxIGRvYyAoYnVmZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzIGZyb20gdG8pKQoJICAg ICh1bmxlc3MgYXJnLWxpc3QKCSAgICAgIChza2lwLWNoYXJzLWZvcndhcmQgIikgXHRcbigi KQoJICAgICAgKHVubGVzcyAobG9va2luZy1hdCAidm9pZCIpCgkJKHdoaWxlIChub3QgKGxv b2tpbmctYXQgIlsgXHRcbl0qKSIpKQoJCSAgKHdoZW4gKGxvb2tpbmctYXQgIlxcKD86cmVn aXN0ZXJbIFx0XStMaXNwX09iamVjdFsgXHRdKlxcKVxcfFxcKD86TGlzcF9PYmplY3RbIFx0 XSpcXCkiKQoJCSAgICAoZ290by1jaGFyIChtYXRjaC1lbmQgMCkpKQoJCSAgKHNraXAtY2hh cnMtZm9yd2FyZCAiIFx0XG4sIikKCQkgIChjb25kCgkJICAgKCg8IGluZGV4IG1pbi1hcmdz KQoJCSAgICAoc2V0cSBpbmRleCAoMSsgaW5kZXgpKSkKCQkgICAoKD0gaW5kZXggbWluLWFy Z3MpCgkJICAgIChzZXRxIGFyZy1saXN0IChjb25zICImb3B0aW9uYWwiIGFyZy1saXN0KSkK CQkgICAgKHNldHEgaW5kZXggKDErIGluZGV4KSkpKQoJCSAgKHdoZW4gKGxvb2tpbmctYXQg Ikxpc3BfT2JqZWN0WyBcdF0qIikKCQkgICAgKGdvdG8tY2hhciAobWF0Y2gtZW5kIDApKSkK CQkgIChzZXRxIGFyZy1saXN0CgkJCShjb25zIChidWZmZXItc3Vic3RyaW5nLW5vLXByb3Bl cnRpZXMKCQkJICAgICAgIChwb2ludCkKCQkJICAgICAgIChwcm9nbgoJCQkJIChza2lwLWNo YXJzLWZvcndhcmQgIl4sIFx0XG4pIikKCQkJCSAocG9pbnQpKSkKCQkJICAgICAgYXJnLWxp c3QpKSkKCQkoc2V0cSBhcmctbGlzdCAobnJldmVyc2UgYXJnLWxpc3QpKSkpKSkKCSAoKGVx IHR5cGUgJ3ZhcmlhYmxlKQoJICAocmUtc2VhcmNoLWZvcndhcmQgIl5bIFx0XSpkb2M6WyBc XSpcXCgvXFwqWyBcdF0qXFwpIiBuaWwgdCkKCSAgKHNldHEgZnJvbSAobWF0Y2gtZW5kIDAp KQoJICAoZ290by1jaGFyIChtYXRjaC1iZWdpbm5pbmcgMSkpCgkgIChmb3J3YXJkLWNvbW1l bnQgMSkKCSAgKHNhdmUtZXhjdXJzaW9uCgkgICAgKHNraXAtY2hhcnMtYmFja3dhcmQgIiov IFx0IikKCSAgICAoc2V0cSB0byAocG9pbnQpKSkKCSAgOzsgUmVtb3ZlIGxlYWRpbmcgYXN0 ZXJpc2suCgkgIChnb3RvLWNoYXIgZnJvbSkKCSAgKHdoZW4gKGxvb2tpbmctYXQgIlxcKiIp CgkgICAgKHNldHEgZnJvbSAoMSsgZnJvbSkpKQoJICAoc2V0cSBkb2MgKGJ1ZmZlci1zdWJz dHJpbmctbm8tcHJvcGVydGllcyBmcm9tIHRvKSkpKSkpCgogICAgICAod2hlbiBkb2MKCSh3 aXRoLWN1cnJlbnQtYnVmZmVyIChnZXQtYnVmZmVyLWNyZWF0ZSAiKkVsaW5mby1UZW1wKiIp CgkgIChkZWxldGUtcmVnaW9uIChwb2ludC1taW4pIChwb2ludC1tYXgpKQoJICAoaW5zZXJ0 IGRvYykKCSAgOzsgSGFuZGxlIHVzYWdlIGluZm9ybWF0aW9uLgoJICAod2hlbiAobWVtcSB0 eXBlICcoZnVuY3Rpb24gY29tbWFuZCkpCgkgICAgKHdoZW4gKHJlLXNlYXJjaC1iYWNrd2Fy ZCAiXnVzYWdlOlsgXHRdKigiIGZyb20gdCkKCSAgICAgIChzZXRxIGZyb20gKHBvaW50KSkK CSAgICAgIChnb3RvLWNoYXIgKG1hdGNoLWVuZCAwKSkKCSAgICAgIChzYXZlLWV4Y3Vyc2lv bgoJCShnb3RvLWNoYXIgKG1hdGNoLWJlZ2lubmluZyAwKSkKCQkoc2tpcC1jaGFycy1iYWNr d2FyZCAiIFx0XG4iKQoJCShzZXRxIHRvIChwb2ludCkpKQoJICAgICAgKHNraXAtY2hhcnMt Zm9yd2FyZCAiXiBcdFxuIikKCSAgICAgIChza2lwLWNoYXJzLWZvcndhcmQgIiBcdFxuIikK CSAgICAgIChzZXRxIGFyZy1saXN0IG5pbCkKCSAgICAgICh3aGlsZSAobm90IChvciAobG9v a2luZy1hdCAiKSIpIChlb2JwKSkpCgkJKHNldHEgYXJnLWxpc3QKCQkgICAgICAoY29ucwoJ CSAgICAgICAoZG93bmNhc2UKCQkJKGJ1ZmZlci1zdWJzdHJpbmctbm8tcHJvcGVydGllcwoJ CQkgKHBvaW50KQoJCQkgKHByb2duCgkJCSAgIChza2lwLWNoYXJzLWZvcndhcmQgIl4gXHRc bikiKQoJCQkgICAocG9pbnQpKSkpCgkJICAgICAgIGFyZy1saXN0KSkKCQkoc2tpcC1jaGFy cy1mb3J3YXJkICIgXHRcbiIpKQoJICAgICAgKHNldHEgYXJnLWxpc3QgKG5yZXZlcnNlIGFy Zy1saXN0KSkKCSAgICAgIChkZWxldGUtcmVnaW9uIChwb2ludCkgKHBvaW50LW1heCkpKSkK CgkgICh3aGVuIGFyZy1saXN0CgkgICAgOzsgSGFuZGxlIGFyZ3Mgd2l0aGluIGRvYy4gIFRo aXMgY2FzZSBjb3VsZCBiZSBtZXJnZWQgd2l0aAoJICAgIDs7IHRoZSByZW1haW5pbmcgb25l cyBidXQgaGFyZGx5IHNlZW1zIHdvcnRoIHRoZSBlZmZvcnQuCgkgICAgKGdvdG8tY2hhciAo cG9pbnQtbWluKSkKCSAgICAobGV0ICgocmVnZXhwIChtYXBjb25jYXQKCQkJICAgJ3JlZ2V4 cC1xdW90ZQoJCQkgICAobWFwY2FyICd1cGNhc2UgYXJnLWxpc3QpICJcXHwiKSkKCQkgICh0 byAobWFrZS1tYXJrZXIpKQoJCSAgY2FzZS1mb2xkLXNlYXJjaCkKCSAgICAgICh3aGlsZSAo cmUtc2VhcmNoLWZvcndhcmQgcmVnZXhwIG5pbCB0KQoJCShsZXQgKChzdHJpbmcgKGRvd25j YXNlIChtYXRjaC1zdHJpbmctbm8tcHJvcGVydGllcyAwKSkpCgkJICAgICAgKGZyb20gKG1h dGNoLWJlZ2lubmluZyAwKSkpCgkJICAoc2V0LW1hcmtlciB0byAobWF0Y2gtZW5kIDApKQoJ CSAgKGNhdGNoICdmb3VuZAoJCSAgICAoZG9saXN0IChhcmcgYXJnLWxpc3QpCgkJICAgICAg OzsgV2UgYXNzdW1lIHRoYXQgYWxsIGFyZ3MgYXJlIGRvd25jYXNlLgoJCSAgICAgICh3aGVu IChzdHJpbmctZXF1YWwgc3RyaW5nIGFyZykKCQkJKHJlcGxhY2UtbWF0Y2ggKGNvbmNhdCAi QHZhcnsiIHN0cmluZyAifSIpIHQpCgkJCSh0aHJvdyAnZm91bmQgdCkpKSkpKQoJICAgICAg KHNldC1tYXJrZXIgdG8gbmlsKSkpCgoJICA7OyBMb29rIGZvciBxdW90ZXMsIGRvdWJsZS1x dW90ZXMsIG5pbCBhbmQgb3RoZXIgZnVubnkgdGhpbmdzLgoJICAoZ290by1jaGFyIChwb2lu dC1taW4pKQoJICAobGV0IChxdW90ZWQpCgkgICAgKHdoaWxlIChyZS1zZWFyY2gtZm9yd2Fy ZCAiXFwoYFxcKVxcKD86W14gXHRcbiddK1xcKVxcKCdcXClcClxcfFxcKD86XlxcfFsgXHRc bigqYF1cXClcXChcXCg/OltObl1vbi1cXCk/XFwobmlsXFwpXFx8dFxcfFxcKFxcKD86W0NN XS1cXCkrXFwoPzpbYS16QS1aXStcXHxbXiBhLXpBLVpcdFxuXStcXClcXClcClxcfFxcKFNQ Q1xcfFJFVFxcfExGRFxcfFRBQlxcfEJTXFx8RVNDXFx8REVMXFx8U0hJRlRcXHxDVFJMXFx8 TUVUQVxcfEZbMC05XStcXClcXClcXCg/OiRcXHxbIFx0XG4sLjs6PyEnKV1cXClcClxcfFxc KFxcXFw/XCJcXClcXHxcXCg/OlxcKFxcXFxcXFxcW1t7XVxcKVteXX1dK1xcKFtdfV1cXClc XHxcXCg8W14+XSs+XFwpXFwpXApcXHxcXFxcXFwoWyhbe11cXClcXHxcXChcXFxcJFxcKSIg bmlsIHQpCgkgICAgICAoY29uZAoJICAgICAgICgobWF0Y2gtYmVnaW5uaW5nIDEpCgkJOzsg YC4uLicKCQkocmVwbGFjZS1tYXRjaCAiQGNvZGV7IiBuaWwgbmlsIG5pbCAxKQoJCShyZXBs YWNlLW1hdGNoICJ9IiBuaWwgbmlsIG5pbCAyKSkKCSAgICAgICAoKG1hdGNoLWJlZ2lubmlu ZyAzKQoJCTs7IGBuaWwnLCBgbm9uLW5pbCcgYW5kIGB0Jy4KCQkoY29uZAoJCSAoKG1hdGNo LWJlZ2lubmluZyA0KQoJCSAgKHJlcGxhY2UtbWF0Y2ggKGNvbmNhdCAiQGNvZGV7bmlsfSIp IHQgbmlsIG5pbCA0KSkKCQkgKChtYXRjaC1iZWdpbm5pbmcgNSkKCQkgIChyZXBsYWNlLW1h dGNoIChjb25jYXQgIkBrYmR7IiAobWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMgNSkgIn0i KQoJCQkJIHQgbmlsIG5pbCA1KSkKCQkgKChtYXRjaC1iZWdpbm5pbmcgNikKCQkgIChyZXBs YWNlLW1hdGNoIChjb25jYXQgIkBrZXl7IiAobWF0Y2gtc3RyaW5nLW5vLXByb3BlcnRpZXMg NikgIn0iKQoJCQkJIHQgbmlsIG5pbCA2KSkKCQkgKHQKCQkgIChyZXBsYWNlLW1hdGNoIChj b25jYXQgIkBjb2RleyIgKG1hdGNoLXN0cmluZy1uby1wcm9wZXJ0aWVzIDMpICJ9IikKCQkJ CSB0IG5pbCBuaWwgMykpKSkKCSAgICAgICAoKG1hdGNoLWJlZ2lubmluZyA3KQoJCTs7IFwi CgkJKHJlcGxhY2UtbWF0Y2ggKGlmIHF1b3RlZCAiJyciICJgYCIpKQoJCShzZXRxIHF1b3Rl ZCAobm90IHF1b3RlZCApKSkKCSAgICAgICAoKG1hdGNoLWJlZ2lubmluZyA4KQoJCTs7IFxc Wy4uLl0sIFxcey4uLn0KCQkocmVwbGFjZS1tYXRjaCAiQGNvZGV7IiBuaWwgdCBuaWwgOCkK CQkocmVwbGFjZS1tYXRjaCAifSIgbmlsIHQgbmlsIDkpKQoJICAgICAgICgobWF0Y2gtYmVn aW5uaW5nIDEwKQoJCTs7IFxcPC4uLj4KCQkocmVwbGFjZS1tYXRjaCAiIikpCgkgICAgICAg KChtYXRjaC1iZWdpbm5pbmcgMTEpCgkJOzsgQW4gZXNjYXBlZCBwYXJlbiAodGhpcyBtdXN0 IGZvbGxvdyBjYXNlIDIpLgoJCShyZXBsYWNlLW1hdGNoIChtYXRjaC1zdHJpbmctbm8tcHJv cGVydGllcyAxMSkpKQoJICAgICAgICgobWF0Y2gtYmVnaW5uaW5nIDEyKQoJCTs7IEEgYmFj a3NsYXNoIGF0IEVPTC4KCQkocmVwbGFjZS1tYXRjaCAiIikpCgkgICAgICAgKSkpCgkgIDs7 IEZpbGwuCgkgIChsZXQgKChmaWxsLWNvbHVtbiA3MCkpCgkgICAgKGZpbGwtcmVnaW9uIChw b2ludC1taW4pIChwb2ludC1tYXgpKSkKCSAgOzsgSGFuZGxlIGtleS1iaW5kaW5ncywgbWFu dWFsIHJlZmVyZW5jZXMgYW5kIFVSTHMsIG1heWJlLgoJICAoc2V0cSBkb2MgKGJ1ZmZlci1z dWJzdHJpbmctbm8tcHJvcGVydGllcyAocG9pbnQtbWluKSAocG9pbnQtbWF4KSkpKSkKCiAg ICAgIChsZXQgKGF0LXN0cmluZyBhcmctbGlzdC1zdHJpbmcpCgkoY29uZAoJICgoZXEgdHlw ZSAnY29tbWFuZCkKCSAgKHNldHEgYXQtc3RyaW5nIChjb25zICJAZGVmZm4gQ29tbWFuZCIg IkBlbmQgZGVmZm4iKSkpCgkgKChlcSB0eXBlICdmdW5jdGlvbikKCSAgKHNldHEgYXQtc3Ry aW5nIChjb25zICJAZGVmdW4iICJAZW5kIGRlZnVuIikpKQoJICgoZXEgdHlwZSAndmFyaWFi bGUpCgkgIChzZXRxIGF0LXN0cmluZyAoY29ucyAiQGRlZnZhciIgIkBlbmQgZGVmdmFyIikp KQoJICgoZXEgdHlwZSAnb3B0aW9uKQoJICAoc2V0cSBhdC1zdHJpbmcgKGNvbnMgIkBkZWZv cHQiICJAZW5kIGRlZm9wdCIpKSkKCSAoKGVxIHR5cGUgJ21hY3JvKQoJICAoc2V0cSBhdC1z dHJpbmcgKGNvbnMgIkBkZWZtYWMiICJAZW5kIGRlZm1hYyIpKSkpCgoJKGRvbGlzdCAoYXJn IGFyZy1saXN0KQoJICAoc2V0cSBhcmctbGlzdC1zdHJpbmcgKGNvbmNhdCBhcmctbGlzdC1z dHJpbmcgIiAiIGFyZykpKQoKCTs7IEhhcmRseSBhbnlvbmUgd2FudHMgdG8gc2VlIHRoaXMg c28gUkVNT1ZFIGl0LgoJKHdpdGgtc2VsZWN0ZWQtd2luZG93IChkaXNwbGF5LWJ1ZmZlciAo Z2V0LWJ1ZmZlci1jcmVhdGUgIipFbGluZm8tc2hvdyIpKQoJICAoZGVsZXRlLXJlZ2lvbiAo cG9pbnQtbWluKSAocG9pbnQtbWF4KSkKCSAgKGluc2VydCAoY29uY2F0IChjYXIgYXQtc3Ry aW5nKSAiICIgbmFtZSBhcmctbGlzdC1zdHJpbmcgIlxuIgoJCQkgIGRvYyAiXG4iIChjZHIg YXQtc3RyaW5nKSAiXG5cbiIpKSkKCgkoa2lsbC1uZXcgKGNvbmNhdCAoY2FyIGF0LXN0cmlu ZykgIiAiIG5hbWUgYXJnLWxpc3Qtc3RyaW5nICJcbiIKCQkJICBkb2MgIlxuIiAoY2RyIGF0 LXN0cmluZykgIlxuXG4iKSkpKSkpCgo7OyBUT0RPOiBkZWZpbmUtbW9kZSBhbmQgZGVmaW5l LWRlcml2ZWQtbW9kZSBhcmUgbm90IGhhbmRsZWQuCgo7OyBUT0RPOiBTcGVjaWFsIGZvcm1z IGFyZSB3cml0dGVuIGluIEMgYW5kIGhhdmUgVU5FVkFMTEVEIHNldC4KCihwcm92aWRlICdl bGluZm8pCgo7OyBCZWxvdyB0aGlzIGxpbmUgYXJlIG1vbnN0ZXJzLgoKOzsgVXNlZCBmb3Ig dGVzdGluZyBvbmx5LCBzbyBSRU1PVkUgaXQuCihkZWZ1biBlbGluZm8tdGVzdCAoKQogIChp bnRlcmFjdGl2ZSkKICAod2l0aC1jdXJyZW50LWJ1ZmZlciAoZ2V0LWJ1ZmZlci1jcmVhdGUg IiplbGluZm8tdGVzdCoiKQogICAgKGRlbGV0ZS1yZWdpb24gKHBvaW50LW1pbikgKHBvaW50 LW1heCkpKQogIChsZXQgKChvbGQtcG9pbnQgKHBvaW50KSkKCW5ldy1wb2ludCBub2RlIHNw bGl0LWhlaWdodC10aHJlc2hvbGQgc3BsaXQtd2lkdGgtdGhyZXNob2xkKQogICAgKHdoaWxl IHQKICAgICAgKEluZm8tZm9yd2FyZC1ub2RlIG5pbCBuaWwgdCkKICAgICAgKGZvcndhcmQt bGluZSAocmFuZG9tIDQzKSkKICAgICAgKHNldHEgb2xkLXBvaW50IChwb2ludCkpCiAgICAg IChzZXRxIG5vZGUgSW5mby1jdXJyZW50LW5vZGUpCiAgICAgIChlbGluZm8tZ290by10ZXhp KQogICAgICAod2l0aC1zZWxlY3RlZC13aW5kb3cgZWxpbmZvLXRlc3QtdGV4aS13aW5kb3cK CShlbGluZm8tZ290by1pbmZvKQoJKHNpdC1mb3IgMC4xKSkKICAgICAgKHNldHEgbmV3LXBv aW50IChwb2ludCkpCiAgICAgICh3aXRoLWN1cnJlbnQtYnVmZmVyIChnZXQtYnVmZmVyLWNy ZWF0ZSAiKmVsaW5mby10ZXN0KiIpCgkoZ290by1jaGFyIChwb2ludC1tYXgpKQoJKGluc2Vy dAoJIChmb3JtYXQgIm5vZGU6ICVzICAgb2xkOiAlcyAgIG5ldzogJXMgICBkaWZmOiAlcyBc biIKCQkgbm9kZSBvbGQtcG9pbnQgbmV3LXBvaW50ICgtIG9sZC1wb2ludCBuZXctcG9pbnQp KSkpCiAgICAgIChnb3RvLWNoYXIgb2xkLXBvaW50KSkpKQo= --------------Kfhqe8JD14mDWxvKDrDeWHz4-- ------------=_1694332262-27884-1-- From debbugs-submit-bounces@debbugs.gnu.org Sun Sep 10 03:51:10 2023 Received: (at control) by debbugs.gnu.org; 10 Sep 2023 07:51:10 +0000 Received: from localhost ([127.0.0.1]:48993 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qfFDp-0007Gd-P6 for submit@debbugs.gnu.org; Sun, 10 Sep 2023 03:51:09 -0400 Received: from mail-lj1-x236.google.com ([2a00:1450:4864:20::236]:47467) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qfFDn-0007Fm-Ta for control@debbugs.gnu.org; Sun, 10 Sep 2023 03:51:08 -0400 Received: by mail-lj1-x236.google.com with SMTP id 38308e7fff4ca-2b962c226ceso56568151fa.3 for ; Sun, 10 Sep 2023 00:51:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1694332259; x=1694937059; darn=debbugs.gnu.org; h=to:subject:message-id:date:mime-version:from:from:to:cc:subject :date:message-id:reply-to; bh=8gBk8YmGimuqYdZUWdbGudlDFF4QDyxBBfh7Y5YT5WE=; b=hSIfaf2y7GuEOf7cJ37jLmDzRxf2O975q01Bq74ChFtI0aqDF8fEWyQUlHVSXbzTlE KD9cYa2fYTsYiDLEhiCIA4UsGgndUhVJzBdDFLBErX080N4KHlEZh+uT1qZK5rsMWhoF T9Z+he3riVHSTcWoDnmQ4+r6f50wXsLRa60SWEYNYbu0igBofEp7OxmTffiYzT++1yUS Ga1RLZwb7kMJiVKfSfLwuxozWE/0ERj+eXiPL2pVD1h7a7U2ReeUWlXRh8HEg+kZxn3T IetR9ze4bgBT1CWAnWCT2nesRoKTAvhGBatfUekhvfqbkAKjIzf6j5K6pNhiVliEO/T1 fWIg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694332259; x=1694937059; h=to:subject:message-id:date:mime-version:from:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=8gBk8YmGimuqYdZUWdbGudlDFF4QDyxBBfh7Y5YT5WE=; b=D9jGWAWDn+J3X0pVck1EUWKk5sP6Bja0vuwyRQuaGNEUbIHrsN072Kj2eLKOSepI1m MYtkr9qSl4BoRFgSjNBuoz7cG5iTTnNs2KHepJhxr18Fw4R/YK9r401288FswOJAQtbB 8kgUHKg/98AM3IiZ6QKZxHD3KBAf/Ai5duhluPKZuyjtRmhNVoCDsnNiTmkY49CVHeXh ydi7uDPMQUqKq4R76iq9FLe2TIDGBCNR7+qWov3u+cKwqcOfI/S7bw6ZhurQBD9Iuys1 La6gwEJWgIfKGXkgktm+hMR2H2O8xsfFnTayTRSJyYOu+X+JlhrJCOdCPzi50aJbCSML QW6g== X-Gm-Message-State: AOJu0Yzfyy0R8f9dTKO1nHRTuUFJyJ1CLtTXpnXPgQANZZernVBge/UA Yrtb5s9l0bkhfbHmKOhCTcdwuvKARx+WF/ALWP9heC9/ X-Google-Smtp-Source: AGHT+IGsq+JyxbKoAruu1w/Urf5013dY1L12uI/IuNIX5drvLPROqd6Ru4a40NMmbJsC682pH16ww/94/OKrtOfmuKU= X-Received: by 2002:a2e:97d1:0:b0:2bc:d7d6:2588 with SMTP id m17-20020a2e97d1000000b002bcd7d62588mr4921760ljj.17.1694332258708; Sun, 10 Sep 2023 00:50:58 -0700 (PDT) Received: from 753933720722 named unknown by gmailapi.google.com with HTTPREST; Sun, 10 Sep 2023 00:50:58 -0700 From: Stefan Kangas MIME-Version: 1.0 Date: Sun, 10 Sep 2023 00:50:58 -0700 Message-ID: Subject: control message for bug #65726 To: control@debbugs.gnu.org Content-Type: text/plain; charset="UTF-8" X-Spam-Score: 0.0 (/) X-Debbugs-Envelope-To: control X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) fixed 65726 30.1 quit From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: Eli Zaretskii Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 10 Sep 2023 07:56:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Stefan Kangas Cc: rudalics@gmx.at, monnier@iro.umontreal.ca, 65726@debbugs.gnu.org Received: via spool by 65726-submit@debbugs.gnu.org id=B65726.169433256028384 (code B ref 65726); Sun, 10 Sep 2023 07:56:02 +0000 Received: (at 65726) by debbugs.gnu.org; 10 Sep 2023 07:56:00 +0000 Received: from localhost ([127.0.0.1]:49004 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qfFIV-0007Nj-MQ for submit@debbugs.gnu.org; Sun, 10 Sep 2023 03:55:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:40780) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qfFIS-0007NW-PH for 65726@debbugs.gnu.org; Sun, 10 Sep 2023 03:55:57 -0400 Received: from fencepost.gnu.org ([2001:470:142:3::e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qfFIJ-00078l-Ak; Sun, 10 Sep 2023 03:55:47 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=gnu.org; s=fencepost-gnu-org; h=References:Subject:In-Reply-To:To:From:Date: mime-version; bh=Yt+HB/x7VQgOdbwsxcBPl7MK7qgscBCZTTGga8O/Fpo=; b=NYFuF/d3mC7S A9UiFfWVor0iEULYqsW3nEZbzkIijw/wJWQMLa0xy6IMayuP6aT1N6iyYFgQVBMRgdYmUChclYAiM 8X5khe+KByHmcyCFP3sWrj3VkW6Su0rW/dGlS33+Qe77ZFC6KYY/pOrKko8zI99EY4OCgw9Rj6KIK 54zwjv+7upA/9M8ZYkpq21fXX4Woy/4hEJLJboAj3LPmO5GoYQBpafVl5f32VgvbY27hHavFEy+PM nOSzOsCu3k4nfwPE0pMF8eEZyhxfSA+83JPN3HSC0HWHo+kqldDng7lNiJjkWxtTor56e1lpvRT8i 5/8HYfijPcM0DtBr+JvBtw==; Date: Sun, 10 Sep 2023 10:55:26 +0300 Message-Id: <83ledesbrl.fsf@gnu.org> From: Eli Zaretskii In-Reply-To: (message from Stefan Kangas on Sun, 10 Sep 2023 00:50:48 -0700) References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> <831qfe53t6.fsf@gnu.org> X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > From: Stefan Kangas > Date: Sun, 10 Sep 2023 00:50:48 -0700 > Cc: Eli Zaretskii , 65726@debbugs.gnu.org, rudalics@gmx.at, > 65726-done@debbugs.gnu.org > > Stefan Monnier writes: > > >> Yes, with this patch the problem is gone. > > > > Thanks, pushed to `emacs-29`. > > Is there anything more to do here, or can this bug report be closed? I believe this is still being worked on and discussed by Stefan and Mattias. From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: Stefan Monnier Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 10 Sep 2023 23:10:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Eli Zaretskii Cc: rudalics@gmx.at, Stefan Kangas , 65726@debbugs.gnu.org Received: via spool by 65726-submit@debbugs.gnu.org id=B65726.16943873543715 (code B ref 65726); Sun, 10 Sep 2023 23:10:02 +0000 Received: (at 65726) by debbugs.gnu.org; 10 Sep 2023 23:09:14 +0000 Received: from localhost ([127.0.0.1]:51520 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qfTYI-0000xq-03 for submit@debbugs.gnu.org; Sun, 10 Sep 2023 19:09:14 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:14358) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qfTYG-0000xc-0Y for 65726@debbugs.gnu.org; Sun, 10 Sep 2023 19:09:12 -0400 Received: from pmg1.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id E1E5A1000BD; Sun, 10 Sep 2023 19:09:02 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1694387341; bh=fw8NT/axWEXUUoEpUN/vTD0uNZSdWLCK4eoDsawiOFY=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=d7akpnfb6LFENJn6VEAGLkcvV29XohoKwr/uCuV5LkpB+zvnBCOR1NcAxyye+7Y1B Ibi/Jc1NDqKePnRIiuIxU7q1DPEC32ocpZvAW3FWLXImjukOTgEgcDKpfnrIkMm5Jx OIvaEBlGTcaz6tZYqpthVbX2eG4Q00QnC8f3/T0qtHqeP3X6Q26QWJRJLVifm9kB8z 3aoaTKmOyuKZrNCFMlvOOJDiPQ4q90q+8dAcVaSInpzCK7wSCqP+WABmISC/1Awfcm kxjFZSK+nfFRU7hpyB4cMsr1PP15gUjmgR1pHrrmGNP/E6jhCaaUMYk0OCedS8X0y8 FBysCAN+vZjoA== Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg1.iro.umontreal.ca (Proxmox) with ESMTP id 9D9BC100068; Sun, 10 Sep 2023 19:09:01 -0400 (EDT) Received: from alfajor (unknown [104.247.229.91]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 68B08120203; Sun, 10 Sep 2023 19:09:01 -0400 (EDT) From: Stefan Monnier In-Reply-To: <83ledesbrl.fsf@gnu.org> (Eli Zaretskii's message of "Sun, 10 Sep 2023 10:55:26 +0300") Message-ID: References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> <831qfe53t6.fsf@gnu.org> <83ledesbrl.fsf@gnu.org> Date: Sun, 10 Sep 2023 19:09:00 -0400 User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.071 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) >> >> Yes, with this patch the problem is gone. >> > Thanks, pushed to `emacs-29`. >> Is there anything more to do here, or can this bug report be closed? > I believe this is still being worked on and discussed by Stefan and > Mattias. I think we can close it. What is being discussed is how to recover the optimization that had to be significantly weakened to fix this patch, but it was a new optimization in Emacs-29, so it's not urgent nor a bug fix. Stefan From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> In-Reply-To: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> Resent-From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 11 Sep 2023 08:12:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Stefan Monnier Cc: martin rudalics , Eli Zaretskii , Stefan Kangas , 65726@debbugs.gnu.org Received: via spool by 65726-submit@debbugs.gnu.org id=B65726.169441986731897 (code B ref 65726); Mon, 11 Sep 2023 08:12:02 +0000 Received: (at 65726) by debbugs.gnu.org; 11 Sep 2023 08:11:07 +0000 Received: from localhost ([127.0.0.1]:52065 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qfc0g-0008IP-R3 for submit@debbugs.gnu.org; Mon, 11 Sep 2023 04:11:07 -0400 Received: from mail-lf1-x134.google.com ([2a00:1450:4864:20::134]:57599) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qfc0c-0008Hs-B9 for 65726@debbugs.gnu.org; Mon, 11 Sep 2023 04:11:04 -0400 Received: by mail-lf1-x134.google.com with SMTP id 2adb3069b0e04-501ce655fcbso6544034e87.2 for <65726@debbugs.gnu.org>; Mon, 11 Sep 2023 01:10:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1694419852; x=1695024652; darn=debbugs.gnu.org; h=to:cc:date:message-id:subject:mime-version :content-transfer-encoding:from:sender:from:to:cc:subject:date :message-id:reply-to; bh=3wk25S6eg7s3wDpGhbz4O0BDAWEQoFoBPBq1IrPHePQ=; b=iL07iSEUEwaXDJrWSZVTv6glavTLMrZOFgAtg5/mdoJEjwZqnHQjphR99kbSGvCcwr s3nTZO2z91N71HUqTWdufDaZ4Tb909pTv9RNdHe84GbaS7RQU1sCErr0FG44TaZqeEdB OpqvddrGiBHggygbCY7ko2WCevOU3UH977BJHR+KlKO6MWnkOUk0VcGk/VnTIuDbQ4KJ 8YZ4s3po44hNu/pQCMHemsNGCXRv30SeG7AEO1ctdbSSW4Ny5IashFqtYMlXsn8Xa0f0 YyybZSbdICrTeZk9Mu0EazeA0pvRU4lSqpy9z1UxWqP34yunmlc9b4k5Pz/NUqvENXpR Ovcw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694419852; x=1695024652; h=to:cc:date:message-id:subject:mime-version :content-transfer-encoding:from:sender:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=3wk25S6eg7s3wDpGhbz4O0BDAWEQoFoBPBq1IrPHePQ=; b=QJbc7AliCOSD199CC90/oT7G7YAMnIMP2UHP2y7gpSIv+WO2VFXlQmkahfdJM1pJeb fenOaF4cDgiCfGiN06ggHU0bfl1YvshmsATWPJxrCHnwC+U9UA48GfpicAfZhBbhvb/l Dvt2mtDUsGbosZAoEG8/C5vTvW4QYpGYgzLO94Fdmb6Fk3PrxQRrgAwfNkQvWh2why8j J1ssIHzqHMDu9KxtTLTi/1d5UzPysHtqI77cGLYIUHv43kRoRQUxXKRPpgaRcubMf+sw 64cQHpazmemhZgYFISsjf0OIugybVMv7w3IYTI41Ip6uAktKY8hWH8GMJCnDnLknhUZG Sxyg== X-Gm-Message-State: AOJu0YwneW5zQP4VZcMeY8ft68sLNvaUautKx5GOw9DERfS8YIYslUf6 83oepDhz7YfqxnHBuwWnBAs= X-Google-Smtp-Source: AGHT+IFutAgcKF2XF5MnyfI8miVy0ernFu3zUU2l5yaFyresJjy+0OrTcYwFBgsiQHcmlB32NaN4Dw== X-Received: by 2002:a19:5514:0:b0:500:8257:4b34 with SMTP id n20-20020a195514000000b0050082574b34mr5942268lfe.68.1694419852000; Mon, 11 Sep 2023 01:10:52 -0700 (PDT) Received: from smtpclient.apple (c188-150-165-235.bredband.tele2.se. [188.150.165.235]) by smtp.gmail.com with ESMTPSA id a28-20020a056512021c00b0050092263a20sm1251936lfo.6.2023.09.11.01.10.51 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Mon, 11 Sep 2023 01:10:51 -0700 (PDT) From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: quoted-printable Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.120.0.1.15\)) Message-Id: <5DB9FD65-6E8A-4335-B9C4-2292885C684B@gmail.com> Date: Mon, 11 Sep 2023 10:10:50 +0200 X-Mailer: Apple Mail (2.3654.120.0.1.15) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) > I think we can close it. What is being discussed is how to recover the = optimization that had to be significantly weakened to fix this patch, = but it was a new optimization in Emacs-29, so it's not urgent nor a bug = fix. Would you confirm that bug#61514 remains 'fixed' for practical purposes? = I ran a few of the cases in that bug and it seems that we have them = still covered, but I may have missed something. From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: Stefan Monnier Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 11 Sep 2023 13:42:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Cc: martin rudalics , Eli Zaretskii , Stefan Kangas , 65726@debbugs.gnu.org Received: via spool by 65726-submit@debbugs.gnu.org id=B65726.169443971119349 (code B ref 65726); Mon, 11 Sep 2023 13:42:02 +0000 Received: (at 65726) by debbugs.gnu.org; 11 Sep 2023 13:41:51 +0000 Received: from localhost ([127.0.0.1]:52386 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qfhAl-000521-Ds for submit@debbugs.gnu.org; Mon, 11 Sep 2023 09:41:51 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:39360) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qfhAh-00051j-Nr for 65726@debbugs.gnu.org; Mon, 11 Sep 2023 09:41:49 -0400 Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 0E9AD803E0; Mon, 11 Sep 2023 09:41:38 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1694439697; bh=5C3wevSe90GDZUS5RLCqSF8JefeHBYDyVNFfQ00j3Xo=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=a+rl3NJbUHa8uyvNDSLICznGWy4o1YBek/o4BvqpQjvRg8LiQYPYoo645QMAOAaWN FmL9vsAF6LyDqiw3pQvqxZpnQs765H2Oi7drQpBErL9kNa4AtyiyloL6JyN9CvFBSw fz6/ysaIa17seLu8YnjXu7dOmPph68//FRwkZM3cdjhInWeD7ltuqRNqakInSHPqa7 DUm4E1wtE6aJfRRvr4UZFxURyqU5WnYKSyVIAda/Zhh0k77gPCwlnTOQqlnKs3+Ciw U5/jsgxb2oj/J3ITaUa0VcRQ1v+0FMK3JX476FCrc0/uQPiGIeQOCnSkGoi5gZrI49 hc00AaJ/Z75yg== Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 0E18480312; Mon, 11 Sep 2023 09:41:37 -0400 (EDT) Received: from pastel (unknown [104.247.229.91]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id CF745120230; Mon, 11 Sep 2023 09:41:36 -0400 (EDT) From: Stefan Monnier In-Reply-To: <5DB9FD65-6E8A-4335-B9C4-2292885C684B@gmail.com> ("Mattias =?UTF-8?Q?Engdeg=C3=A5rd?="'s message of "Mon, 11 Sep 2023 10:10:50 +0200") Message-ID: References: <5DB9FD65-6E8A-4335-B9C4-2292885C684B@gmail.com> Date: Mon, 11 Sep 2023 09:41:36 -0400 User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.160 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > Would you confirm that bug#61514 remains 'fixed' for practical purposes? I believe it does: the real fix was to use narrowing. Stefan From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: Stefan Kangas Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 11 Sep 2023 14:47:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Stefan Monnier , Eli Zaretskii Cc: rudalics@gmx.at, 65726-done@debbugs.gnu.org Received: via spool by 65726-done@debbugs.gnu.org id=D65726.169444362027887 (code D ref 65726); Mon, 11 Sep 2023 14:47:02 +0000 Received: (at 65726-done) by debbugs.gnu.org; 11 Sep 2023 14:47:00 +0000 Received: from localhost ([127.0.0.1]:54370 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qfiBo-0007Fj-96 for submit@debbugs.gnu.org; Mon, 11 Sep 2023 10:47:00 -0400 Received: from mail-lj1-x235.google.com ([2a00:1450:4864:20::235]:61791) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qfiBl-0007FT-D2 for 65726-done@debbugs.gnu.org; Mon, 11 Sep 2023 10:46:58 -0400 Received: by mail-lj1-x235.google.com with SMTP id 38308e7fff4ca-2b703a0453fso76659781fa.3 for <65726-done@debbugs.gnu.org>; Mon, 11 Sep 2023 07:46:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1694443607; x=1695048407; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:mime-version:references:in-reply-to :from:from:to:cc:subject:date:message-id:reply-to; bh=lpWOKnO30b9eZTwzpywm9FeAXGdJr6qGafUicZQkRnU=; b=rAuIsUljbnnjpXtFM8TgWvo3tGFxrN/91sA9xt9o663hw6W5iQdqS+lvObyrHbA9h9 yHPN4H3XgylUAly8is+PXw8QLCEDp7NoVfJaqigkDlTkl5Zv3ePeOCDaZFFIpLRRgxOy xIOxl8RDAHx5AgGx/OwqL/ebSnVGW5G/pVyCBp5M4WCRt5LIRNSQ8rrZzKPYbQ7BJxYu smJ5b+FC83rp4tGFyYmiGABI+9xj07OyP30c34YcZTpOA/UDW+efbsuXI0I/X6RUlEBk 6hGHX2AZnoWQFVTV+/X9xEfnbX5eZ9HZF1JNebz7TjtokB/8sngqqXQAHE6nuWFEROYM dq3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694443607; x=1695048407; h=cc:to:subject:message-id:date:mime-version:references:in-reply-to :from:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=lpWOKnO30b9eZTwzpywm9FeAXGdJr6qGafUicZQkRnU=; b=HfqqIs52pNKFmnOIf9ObGREgmu1W9yO8c2zcn3wbv19kzIXqbpp7UifCJpd9uNlwAy 8b7EK9Z9SNgcUOyiZj6qSJItDIwZW2Kh8SYNinJ6o4KljKRoqyliNYjdAHO0rjb3p4Zd Jwt2Xw4tyRwoqopb2VsAVl6ssKJu54BcgDfXDD8MdlTalH3huMX2/QTypig75WIvyjk/ bjmSyY/uQgAtKTF0DgMbK1uN1JU+loVM50h33u9DOcvOJpshlNWWzJeuwvmeTaLunDYu 1vzK+N9SuVlJbfvwK51uOfuQHSo7vDvoPVdnnua6Lb+kt5bZScPD2+Xj0yeoOIMrcAnp mfbw== X-Gm-Message-State: AOJu0Yxurt7U96QQfu4f1aYi3lDZFnJE2GgnynrGiYGQg9cWLHWCn6Ld oO1tastFiZNDW0nsrQIYlzcOKVLMiUtkm7Ow/bM= X-Google-Smtp-Source: AGHT+IGIJni+dpFul3w8m7FfFr4E8G1DdoNlNa/WctSdA5AWbQKnN5/Sg2hnJ0UmnCyirVa8n7N/GVhK/WN627N8Tag= X-Received: by 2002:a2e:8644:0:b0:2bc:d993:b7ba with SMTP id i4-20020a2e8644000000b002bcd993b7bamr9236302ljj.27.1694443606837; Mon, 11 Sep 2023 07:46:46 -0700 (PDT) Received: from 753933720722 named unknown by gmailapi.google.com with HTTPREST; Mon, 11 Sep 2023 07:46:46 -0700 From: Stefan Kangas In-Reply-To: References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> <831qfe53t6.fsf@gnu.org> <83ledesbrl.fsf@gnu.org> MIME-Version: 1.0 Date: Mon, 11 Sep 2023 07:46:46 -0700 Message-ID: Content-Type: text/plain; charset="UTF-8" X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) Stefan Monnier writes: > I think we can close it. What is being discussed is how to recover the > optimization that had to be significantly weakened to fix this patch, > but it was a new optimization in Emacs-29, so it's not urgent nor > a bug fix. Thanks, I'm therefore closing this bug report. From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: Stefan Monnier Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 14 Sep 2023 14:42:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Cc: martin rudalics , Eli Zaretskii , 65726@debbugs.gnu.org Received: via spool by 65726-submit@debbugs.gnu.org id=B65726.16947025099450 (code B ref 65726); Thu, 14 Sep 2023 14:42:01 +0000 Received: (at 65726) by debbugs.gnu.org; 14 Sep 2023 14:41:49 +0000 Received: from localhost ([127.0.0.1]:40770 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qgnXR-0002SL-01 for submit@debbugs.gnu.org; Thu, 14 Sep 2023 10:41:49 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:45440) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qgnXM-0002S6-QK for 65726@debbugs.gnu.org; Thu, 14 Sep 2023 10:41:47 -0400 Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 879778075E; Thu, 14 Sep 2023 10:41:33 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1694702491; bh=AnPra6i1Gx/JPAVeB+PwZz5Q0R4RPyQB/eX0ZbunUBQ=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=LKmijECB7RwXY0zZrGhVFEK0tOdXzCY+9o5aZkTEqO6CsdkjB6TNGecAakw/yeZl2 AIFFeu5sOhCKXbdd1RA7IJdhJ3ILtkyVr0BgPn16b91TFzRR0WhMhr1kOHPqW4apb8 fEg3Vi2RZztojZfSgQyI7YjUz4YT8p2vMjpkYickCEtM/hgr8W0DvMZSSiXCEcqg8t YtCryMhFndtx73BYFyBkzJR0BS2WcMCfxQsV/1MOeZbOkfzq46NCk5yeA7toLk4bmJ 7SBUH6qIong/axD/2Q2F+ndaXDO8YvpqFV8rPuxdHGtvqh/kAjBQqqVpm+awa9sq7u 0AbC/q4MiE5bg== Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id A435180283; Thu, 14 Sep 2023 10:41:31 -0400 (EDT) Received: from pastel (unknown [104.247.229.91]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 73A571202C2; Thu, 14 Sep 2023 10:41:31 -0400 (EDT) From: Stefan Monnier In-Reply-To: ("Mattias =?UTF-8?Q?Engdeg=C3=A5rd?="'s message of "Sat, 9 Sep 2023 18:34:42 +0200") Message-ID: References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> <83fs3u5e7u.fsf@gnu.org> <835y4q5apw.fsf@gnu.org> <776370AB-662F-4C0A-95BF-97DEA4F18F54@gmail.com> <3A0AC9E2-A420-47B6-870A-69C53FCAEF71@gmail.com> Date: Thu, 14 Sep 2023 10:41:30 -0400 User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.134 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) --=-=-= Content-Type: text/plain > so yes, we may need to remember where we've been. (At this point > someone will inevitably point out a helpful invariant that is obvious > in hindsight. This is just my cunning attempt at making that happen.) No helpful invariant that makes it trivial, but if we keep pushing the same idea that we rely on the assumption that we just have a syntactically nested loop nest, then we can handle that as in the patch below. I.e. keep the idea I proposed of keeping track of a beg..end region that's already been handled. But now we really do have to maintain both ends (before, I only had `done` which kept track of the end of the region), and just "restart" when we jump back to a point before the "done" region. Stefan --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=regexp.c.patch diff --git a/src/regex-emacs.c b/src/regex-emacs.c index 394ba22e9b0..a6b7faadf86 100644 --- a/src/regex-emacs.c +++ b/src/regex-emacs.c @@ -3643,19 +3643,128 @@ execute_charset (re_char **pp, int c, int corig, bool unibyte, return not; } +/* Case where `p2` points to an `exactn`. */ +static bool +mutually_exclusive_exactn (struct re_pattern_buffer *bufp, re_char *p1, + re_char *p2) +{ + bool multibyte = RE_MULTIBYTE_P (bufp); + int c + = (re_opcode_t) *p2 == endline ? '\n' + : RE_STRING_CHAR (p2 + 2, multibyte); + + if ((re_opcode_t) *p1 == exactn) + { + if (c != RE_STRING_CHAR (p1 + 2, multibyte)) + { + DEBUG_PRINT (" '%c' != '%c' => fast loop.\n", c, p1[2]); + return true; + } + } + + else if ((re_opcode_t) *p1 == charset + || (re_opcode_t) *p1 == charset_not) + { + if (!execute_charset (&p1, c, c, !multibyte || ASCII_CHAR_P (c), + Qnil)) + { + DEBUG_PRINT (" No match => fast loop.\n"); + return true; + } + } + else if ((re_opcode_t) *p1 == anychar + && c == '\n') + { + DEBUG_PRINT (" . != \\n => fast loop.\n"); + return true; + } + return false; +} + +/* Case where `p2` points to an `charset`. */ +static bool +mutually_exclusive_charset (struct re_pattern_buffer *bufp, re_char *p1, + re_char *p2) +{ + /* It is hard to list up all the character in charset + P2 if it includes multibyte character. Give up in + such case. */ + if (!RE_MULTIBYTE_P (bufp) || !CHARSET_RANGE_TABLE_EXISTS_P (p2)) + { + /* Now, we are sure that P2 has no range table. + So, for the size of bitmap in P2, 'p2[1]' is + enough. But P1 may have range table, so the + size of bitmap table of P1 is extracted by + using macro 'CHARSET_BITMAP_SIZE'. + + In a multibyte case, we know that all the character + listed in P2 is ASCII. In a unibyte case, P1 has only a + bitmap table. So, in both cases, it is enough to test + only the bitmap table of P1. */ + + if ((re_opcode_t) *p1 == charset) + { + int idx; + /* We win if the charset inside the loop + has no overlap with the one after the loop. */ + for (idx = 0; + (idx < (int) p2[1] + && idx < CHARSET_BITMAP_SIZE (p1)); + idx++) + if ((p2[2 + idx] & p1[2 + idx]) != 0) + break; + + if (idx == p2[1] + || idx == CHARSET_BITMAP_SIZE (p1)) + { + DEBUG_PRINT (" No match => fast loop.\n"); + return true; + } + } + else if ((re_opcode_t) *p1 == charset_not) + { + int idx; + /* We win if the charset_not inside the loop lists + every character listed in the charset after. */ + for (idx = 0; idx < (int) p2[1]; idx++) + if (! (p2[2 + idx] == 0 + || (idx < CHARSET_BITMAP_SIZE (p1) + && ((p2[2 + idx] & ~ p1[2 + idx]) == 0)))) + break; + + if (idx == p2[1]) + { + DEBUG_PRINT (" No match => fast loop.\n"); + return true; + } + } + } + return false; +} + /* True if "p1 matches something" implies "p2 fails". */ +/* Avoiding inf-loops: + We're trying to follow all paths reachable from `p2`, but since some + loops can match the empty string, this can loop back to `p2`. + To avoid inf-looping, we keep track of points that have been considered + "already". Instead of keeping a list of such points, we assume + that the code is a "sequential loop nest" and only keep track of + `done_beg` and `done_end` which delimit a chunk of bytecode we consider + as already considered. */ static bool -mutually_exclusive_p (struct re_pattern_buffer *bufp, re_char *p1, - re_char *p2) +mutually_exclusive_aux (struct re_pattern_buffer *bufp, re_char *p1, + re_char *p2, re_char *done_beg, re_char *done_end) { re_opcode_t op2; - bool multibyte = RE_MULTIBYTE_P (bufp); unsigned char *pend = bufp->buffer + bufp->used; re_char *p2_orig = p2; eassert (p1 >= bufp->buffer && p1 < pend && p2 >= bufp->buffer && p2 <= pend); + eassert (done_beg <= done_end); + eassert (done_end <= p2); + /* Skip over open/close-group commands. If what follows this loop is a ...+ construct, look at what begins its body, since we will have to @@ -3684,98 +3793,14 @@ mutually_exclusive_p (struct re_pattern_buffer *bufp, re_char *p1, case endline: case exactn: - { - int c - = (re_opcode_t) *p2 == endline ? '\n' - : RE_STRING_CHAR (p2 + 2, multibyte); - - if ((re_opcode_t) *p1 == exactn) - { - if (c != RE_STRING_CHAR (p1 + 2, multibyte)) - { - DEBUG_PRINT (" '%c' != '%c' => fast loop.\n", c, p1[2]); - return true; - } - } - - else if ((re_opcode_t) *p1 == charset - || (re_opcode_t) *p1 == charset_not) - { - if (!execute_charset (&p1, c, c, !multibyte || ASCII_CHAR_P (c), - Qnil)) - { - DEBUG_PRINT (" No match => fast loop.\n"); - return true; - } - } - else if ((re_opcode_t) *p1 == anychar - && c == '\n') - { - DEBUG_PRINT (" . != \\n => fast loop.\n"); - return true; - } - } - break; + return mutually_exclusive_exactn (bufp, p1, p2); case charset: { if ((re_opcode_t) *p1 == exactn) - /* Reuse the code above. */ - return mutually_exclusive_p (bufp, p2, p1); - - /* It is hard to list up all the character in charset - P2 if it includes multibyte character. Give up in - such case. */ - else if (!multibyte || !CHARSET_RANGE_TABLE_EXISTS_P (p2)) - { - /* Now, we are sure that P2 has no range table. - So, for the size of bitmap in P2, 'p2[1]' is - enough. But P1 may have range table, so the - size of bitmap table of P1 is extracted by - using macro 'CHARSET_BITMAP_SIZE'. - - In a multibyte case, we know that all the character - listed in P2 is ASCII. In a unibyte case, P1 has only a - bitmap table. So, in both cases, it is enough to test - only the bitmap table of P1. */ - - if ((re_opcode_t) *p1 == charset) - { - int idx; - /* We win if the charset inside the loop - has no overlap with the one after the loop. */ - for (idx = 0; - (idx < (int) p2[1] - && idx < CHARSET_BITMAP_SIZE (p1)); - idx++) - if ((p2[2 + idx] & p1[2 + idx]) != 0) - break; - - if (idx == p2[1] - || idx == CHARSET_BITMAP_SIZE (p1)) - { - DEBUG_PRINT (" No match => fast loop.\n"); - return true; - } - } - else if ((re_opcode_t) *p1 == charset_not) - { - int idx; - /* We win if the charset_not inside the loop lists - every character listed in the charset after. */ - for (idx = 0; idx < (int) p2[1]; idx++) - if (! (p2[2 + idx] == 0 - || (idx < CHARSET_BITMAP_SIZE (p1) - && ((p2[2 + idx] & ~ p1[2 + idx]) == 0)))) - break; - - if (idx == p2[1]) - { - DEBUG_PRINT (" No match => fast loop.\n"); - return true; - } - } - } + return mutually_exclusive_exactn (bufp, p2, p1); + else + return mutually_exclusive_charset (bufp, p1, p2); } break; @@ -3783,9 +3808,9 @@ mutually_exclusive_p (struct re_pattern_buffer *bufp, re_char *p1, switch (*p1) { case exactn: + return mutually_exclusive_exactn (bufp, p2, p1); case charset: - /* Reuse the code above. */ - return mutually_exclusive_p (bufp, p2, p1); + return mutually_exclusive_charset (bufp, p2, p1); case charset_not: /* When we have two charset_not, it's very unlikely that they don't overlap. The union of the two sets of excluded @@ -3830,12 +3855,30 @@ mutually_exclusive_p (struct re_pattern_buffer *bufp, re_char *p1, int mcnt; p2++; EXTRACT_NUMBER_AND_INCR (mcnt, p2); - /* Don't just test `mcnt > 0` because non-greedy loops have - their test at the end with an unconditional jump at the start. */ - if (p2 > p2_orig && mcnt >= 0) /* Ensure forward progress. */ - return (mutually_exclusive_p (bufp, p1, p2) - && mutually_exclusive_p (bufp, p1, p2 + mcnt)); - break; + re_char *p2_other = p2 + mcnt; + + /* Presumably, any position in `done_beg..end` should be a position we + already considered elsewhere (because our state machines are not + arbitrary: they consists of syntaxically nested loops with limited + control flow), so we can consider those back jumps as mutually + exclusive here. + This shows in the code below when `p3 > p2_orig`, i.e. when we jump + forward: in that case we bump `done_end` up to `p3` under + the assumption that any other reachable position + between `done_end` and `p3` will be checked by the *other* + call to RECURSE. + The recursion should terminate because of a lexical ordering between + `done_beg`, `done_end`, and `p2`: + At each recursion, either `done_beg` gets smaller, + or `done_beg` is unchanged and `done_end` gets larger + or they're both unchanged and `p2` gets larger. */ +#define RECURSE(p3) \ + ((p3) < done_beg ? mutually_exclusive_aux (bufp, p1, p3, p3, p3) \ + : (p3) <= done_end ? true \ + : mutually_exclusive_aux (bufp, p1, p3, done_beg, \ + (p3) > p2_orig ? done_end : (p3))) + + return RECURSE (p2) && RECURSE (p2_other); } default: @@ -3846,6 +3889,13 @@ mutually_exclusive_p (struct re_pattern_buffer *bufp, re_char *p1, return false; } +static bool +mutually_exclusive_p (struct re_pattern_buffer *bufp, re_char *p1, + re_char *p2) +{ + re_char *done = min (p2, p1); + return mutually_exclusive_aux (bufp, p1, p2, done, done); +} /* Matching routines. */ --=-=-=-- From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 15 Sep 2023 20:05:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Stefan Monnier Cc: martin rudalics , Eli Zaretskii , 65726@debbugs.gnu.org Received: via spool by 65726-submit@debbugs.gnu.org id=B65726.169480824232647 (code B ref 65726); Fri, 15 Sep 2023 20:05:02 +0000 Received: (at 65726) by debbugs.gnu.org; 15 Sep 2023 20:04:02 +0000 Received: from localhost ([127.0.0.1]:44906 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qhF2n-0008UL-P4 for submit@debbugs.gnu.org; Fri, 15 Sep 2023 16:04:02 -0400 Received: from mail-lj1-x22b.google.com ([2a00:1450:4864:20::22b]:60441) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qhF2k-0008Tw-Qd for 65726@debbugs.gnu.org; Fri, 15 Sep 2023 16:04:00 -0400 Received: by mail-lj1-x22b.google.com with SMTP id 38308e7fff4ca-2bf5bf33bcdso42521191fa.0 for <65726@debbugs.gnu.org>; Fri, 15 Sep 2023 13:03:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1694808226; x=1695413026; darn=debbugs.gnu.org; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:sender:from:to:cc:subject :date:message-id:reply-to; bh=uU7xszz4vyJbWJQWqfhUA9vkN3bdn0/t+MJFgeExf2k=; b=X1f0K44E0NM57XC0EMgocAAMESyhrZ9C74MRZsAq/XujDuhd7Ay73gALcdjSvPTPpd o31tub8EpfS3W9D+hrSJdHHhadImXoT54a2kStHhVNCYQ70aXQXmz199VjT59RbwX19m Ks1iXkY0X26DcYpfaAse3fVfeU9ZFWswhGOhES3ritGJRchPGbSh8hStQVMhDJPBjoo2 K/WjYAxzGxzKnnaQOzMosFs0G/JwxVNVvx/UQyftcJSt+sgjg2W8kMqDfPkhZwWfjglY itYQ84A3FIzPw7Sni3AH/koBa0gq9R4hXS+yD2nOi4h2cj/I7DZK+9v1DssIQSIHtBTk OO9Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694808226; x=1695413026; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:sender:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=uU7xszz4vyJbWJQWqfhUA9vkN3bdn0/t+MJFgeExf2k=; b=vvluIU+Q130B7H2SjsVwAD0KBmh7XxiELw+BLBLI8zeIC2N6F6kN7jqzKDHVPMWdSC AIwAHs6R+Tp6HrjQ1aMZxUkenppeqTs3dj67o1D4vCtBfwZyRy/8gZdwLLXoWn6E3I7o EYbkmCgCGPWvm1N4vbS5DihJpn8Ad99wioaP/V26BiZwJ1DhMZBou6rkRG4xnIIpYpVg pHUxHjANmN93qIAHDg0civkqH3yNqXXrIeqBC5rRmKzOMqc/osjhwM7KWGqapLi9EPyY jvEqoc1xe+/JV09MMa3w38XH9VQfRxb7eaUqBJZZjy8yDKh2B+oVQmmrfSnhfmaf7Ajd 6BCg== X-Gm-Message-State: AOJu0YyiIgfUlVaZBNlUCDxg1YlU7b3/oQRdzwL4FIw1JpqsadWegKrO b/8Wcq+OB3L+hYUKuvFYkx0= X-Google-Smtp-Source: AGHT+IFNtBWViXifhTHunmufeHn8+/Le1dqRiEXPwTSZDXGKBovGsI9ijMOsL31fRJXSkKQtKLBv3g== X-Received: by 2002:a2e:b04e:0:b0:2bc:d993:b7ba with SMTP id d14-20020a2eb04e000000b002bcd993b7bamr2581555ljl.27.1694808225971; Fri, 15 Sep 2023 13:03:45 -0700 (PDT) Received: from smtpclient.apple (c188-150-165-235.bredband.tele2.se. [188.150.165.235]) by smtp.gmail.com with ESMTPSA id n3-20020a2e86c3000000b002bfb04fa4b4sm848786ljj.16.2023.09.15.13.03.45 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Fri, 15 Sep 2023 13:03:45 -0700 (PDT) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.120.0.1.15\)) From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= In-Reply-To: Date: Fri, 15 Sep 2023 22:03:44 +0200 Content-Transfer-Encoding: quoted-printable Message-Id: <1F72C9BA-E6E6-4D69-A23A-FBB8B4C5DA1B@gmail.com> References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> <83fs3u5e7u.fsf@gnu.org> <835y4q5apw.fsf@gnu.org> <776370AB-662F-4C0A-95BF-97DEA4F18F54@gmail.com> <3A0AC9E2-A420-47B6-870A-69C53FCAEF71@gmail.com> X-Mailer: Apple Mail (2.3654.120.0.1.15) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) 14 sep. 2023 kl. 16.41 skrev Stefan Monnier : > I.e. keep the idea I proposed of keeping track of a beg..end region > that's already been handled. But now we really do have to maintain = both > ends (before, I only had `done` which kept track of the end of the > region), and just "restart" when we jump back to a point before the > "done" region. Thank you, this looks workable and should enable some further = optimisations. Another option would be to add the usual cycle detection, = but this is probably faster. From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: Stefan Monnier Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Fri, 15 Sep 2023 22:21:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Cc: martin rudalics , Eli Zaretskii , 65726@debbugs.gnu.org Received: via spool by 65726-submit@debbugs.gnu.org id=B65726.169481644214802 (code B ref 65726); Fri, 15 Sep 2023 22:21:01 +0000 Received: (at 65726) by debbugs.gnu.org; 15 Sep 2023 22:20:42 +0000 Received: from localhost ([127.0.0.1]:45042 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qhHB4-0003qg-Aq for submit@debbugs.gnu.org; Fri, 15 Sep 2023 18:20:42 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:1551) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qhHB2-0003qT-H1 for 65726@debbugs.gnu.org; Fri, 15 Sep 2023 18:20:41 -0400 Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 869BF805A9; Fri, 15 Sep 2023 18:20:28 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1694816427; bh=vn6ZBS0tRckphZ70vYB0/zSqlcYVCh7odnLuMhpsMzQ=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=Mk3xmssF/d2mnPOXlcZmeW06IPsk1YnXRf6ipC4bYdFrZSocR6iIUql4MF/9FeNyX mW8ByVnH7XpPT2prm/zmSiFMiZIYO9oIUO3eTZZ/bPi2J3Vbb1PaMo/wSHVRcdpAEv AW6im5HUiRPRjOWtWpdrGsetQmTU9DzK9+Bm9G6GWz3hPb8GwRgr+tam4XVSwYf0sz GQPfR3raRgrB4zIWADXdnELnk0MeKPHCgfmLPLbAygyrhek3kzfc0v90zU4IXZz83p d5tmb09Ion8AdsUnWU2wKmX/HR6X+h5hnPxlgjsL0NxoRzwcBxXtbYVT+gJlYVFKjs LAQ8/8M5b22+g== Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 40DA4803B1; Fri, 15 Sep 2023 18:20:27 -0400 (EDT) Received: from pastel (unknown [104.247.237.102]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 05F95120250; Fri, 15 Sep 2023 18:20:27 -0400 (EDT) From: Stefan Monnier In-Reply-To: <1F72C9BA-E6E6-4D69-A23A-FBB8B4C5DA1B@gmail.com> ("Mattias =?UTF-8?Q?Engdeg=C3=A5rd?="'s message of "Fri, 15 Sep 2023 22:03:44 +0200") Message-ID: References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> <83fs3u5e7u.fsf@gnu.org> <835y4q5apw.fsf@gnu.org> <776370AB-662F-4C0A-95BF-97DEA4F18F54@gmail.com> <3A0AC9E2-A420-47B6-870A-69C53FCAEF71@gmail.com> <1F72C9BA-E6E6-4D69-A23A-FBB8B4C5DA1B@gmail.com> Date: Fri, 15 Sep 2023 18:20:25 -0400 User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.120 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) >> I.e. keep the idea I proposed of keeping track of a beg..end region >> that's already been handled. But now we really do have to maintain both >> ends (before, I only had `done` which kept track of the end of the >> region), and just "restart" when we jump back to a point before the >> "done" region. > Thank you, this looks workable and should enable some further > optimisations. I just pushed this to `master`. > Another option would be to add the usual cycle detection, That wouldn't be fun, tho, would it? > but this is probably faster. And more thrilling. Stefan From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: Stefan Monnier Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 16 Sep 2023 03:46:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Cc: martin rudalics , Eli Zaretskii , 65726@debbugs.gnu.org Received: via spool by 65726-submit@debbugs.gnu.org id=B65726.169483595416321 (code B ref 65726); Sat, 16 Sep 2023 03:46:02 +0000 Received: (at 65726) by debbugs.gnu.org; 16 Sep 2023 03:45:54 +0000 Received: from localhost ([127.0.0.1]:45151 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qhMFl-0004FA-Fd for submit@debbugs.gnu.org; Fri, 15 Sep 2023 23:45:53 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:15162) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qhMFf-0004Et-OQ for 65726@debbugs.gnu.org; Fri, 15 Sep 2023 23:45:51 -0400 Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 7F855805D6; Fri, 15 Sep 2023 23:45:35 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1694835934; bh=XgP9NEHtAcLOldGDNvBCMuaH+6Km0ejy5oW/rFsqVDU=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=ay7V0bXgHPqmWY4n6CSX+s3yHt9XXFrhHlxPWa12erSGBCe5WacOsm6IQopaRvrXf w/xiVZ0BWQe8dZszYQijkAV8fuiMgdwDEReLTSl1SMwMh0A/FHGacloAHxzaWd9Qjp h3ZkxQfH6VRP7zG80RtJKtJNcET5bJJN8WeGn84I24hA7Ezpj2K2DtVsLo8b7uD6Ys WBGbDE57D6RjZt2UvAzi0UiSRNBK6ld7xdZUJ3EyQ/kP498MOewFCkF1FfkcYcHmvv lLVNjXry4rmY7trrx5TMOuSJqUioLORfvPqbpE0Mt3cRDb1o1lUvBYgFTxDgWHH1+9 cRaIayUuT8j5w== Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 1A854803B1; Fri, 15 Sep 2023 23:45:34 -0400 (EDT) Received: from pastel (unknown [104.247.237.102]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id DF1A612023D; Fri, 15 Sep 2023 23:45:33 -0400 (EDT) From: Stefan Monnier In-Reply-To: (Stefan Monnier's message of "Thu, 14 Sep 2023 10:41:30 -0400") Message-ID: References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> <83fs3u5e7u.fsf@gnu.org> <835y4q5apw.fsf@gnu.org> <776370AB-662F-4C0A-95BF-97DEA4F18F54@gmail.com> <3A0AC9E2-A420-47B6-870A-69C53FCAEF71@gmail.com> User-Agent: Gnus/5.13 (Gnus v5.13) Date: Fri, 15 Sep 2023 23:45:33 -0400 MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.113 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) >> so yes, we may need to remember where we've been. (At this point >> someone will inevitably point out a helpful invariant that is obvious >> in hindsight. This is just my cunning attempt at making that happen.) I think I have a "helpful invariant", finally: Because of how we build our code, when we're at an `on_failure_jump` the two branches can either both go forward (typically for a "|" or a "?"), or *one* of them goes backward the other forward (for loops), where the one that goes backward (i.e. `p2 <= p2_orig`) is the edge (call it `p2_loop`) that goes back to the beginning of the loop and the other (call it `p2_exit`) is the one that exits the loop. Now, because our loops are nested with proper "structured programming", there can't be any jump from within the loop to outside the loop except for the current jump. And there can't be any jump from outside the loop to inside the loop except by entering via `p2_loop`. Since we have two recursive calls to `mutually_exclusive_p` (one for `p2_exit` and one for `p2_loop`) and each one only needs to check those positions not checked by the other, we can say that `p2_loop` only needs to check the positions within the loop (i.e. between `p2_loop` and `p2_exit`) and can presume that *all* other positions are checked by the other recursive call (the one that starts at `p2_exit`). So I think a single arg `done_end` (set, like the current `done_end`, to `p2_loop` when recursing into `p2_loop`) is indeed sufficient: there's no way to go from `p2_loop` to before `p2_loop` without first going to `p2_exit` (which is already checked by the other call). Stefan From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 16 Sep 2023 10:51:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Stefan Monnier Cc: martin rudalics , Eli Zaretskii , 65726@debbugs.gnu.org Received: via spool by 65726-submit@debbugs.gnu.org id=B65726.169486141818677 (code B ref 65726); Sat, 16 Sep 2023 10:51:02 +0000 Received: (at 65726) by debbugs.gnu.org; 16 Sep 2023 10:50:18 +0000 Received: from localhost ([127.0.0.1]:45498 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qhSsU-0004rB-0F for submit@debbugs.gnu.org; Sat, 16 Sep 2023 06:50:18 -0400 Received: from mail-lj1-x22c.google.com ([2a00:1450:4864:20::22c]:44255) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qhSsP-0004qr-39 for 65726@debbugs.gnu.org; Sat, 16 Sep 2023 06:50:17 -0400 Received: by mail-lj1-x22c.google.com with SMTP id 38308e7fff4ca-2b974031aeaso48349891fa.0 for <65726@debbugs.gnu.org>; Sat, 16 Sep 2023 03:50:05 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1694861400; x=1695466200; darn=debbugs.gnu.org; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:sender:from:to:cc:subject :date:message-id:reply-to; bh=ILr4WwxkGGk3v63PvkO7x/DSwulaSidDrfYyNjD2y74=; b=OB2pSu4NHhWTQxtx/YupgfWmS/pW/ThH9OXw9jCoP5ycCbF69Cycl/4qB/Yi30IsCO w0USM9nfGLEyWf+bJ+BCe6NWtjAp+zREGnb/UDatAoF/xpghgrXheMm6IsijZojcWFOZ NENNuFMpa0XtyPuo2NIr4bqcDRtv7+eMxP/oBSGKfCTE8n76X68Jf4XzHR4NtmU8cgcb NjWMs1PrJUPWKupSd0PFW+LAjOn532/zJoycNSg5+vMnv/UZTfjo5amFh0PFQ5/1zBWs OTOnw/c/oDZsyHfL+VPE4EYC0knhq3iUShF7cY2ydcUrbFpJUZpF2ZtHxS0YLgoG6hRW T8eQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1694861400; x=1695466200; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:sender:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=ILr4WwxkGGk3v63PvkO7x/DSwulaSidDrfYyNjD2y74=; b=w4fbtsYWgNKh/1Lj+bR9X0J8AwjLU321GGCYQdefqKl+WyxZXNIniHBdsdHoyc8yvW frb5D2of54975wpEaBVwkfaK7ulwTweV0hHK3CgiaduaVCpT1jbETwVeAyuwusWgg27H bn0xD3NOZDpgFdg+afnefE/jezD3zcZ+qEwcAbe2FnKCmKnR9mZZRPglZ5g4H7jSLwNx HYY1MTKcMR6Cah/Ylu1PjUS5Tm4MDT3QiErvXroZy3SCVwQ0cw/8Jg00IwMnXFASKNLN ZM8V7ylc/nh0PgQ9D9jLnPpKfea1iw0uLpGz0oBLkQdz2/TG4wlQsRx4CdkmlH6RPO6x eVdQ== X-Gm-Message-State: AOJu0YxIx4uMHoT2G2kVhZsqPBFxGR1D80A3D1HfOW1HgFOHrX212DWl VaKM1YGygwAHcr/svYqTf/g= X-Google-Smtp-Source: AGHT+IHohh04fCnQGS84Y7EHucrQYGZ9P8YY7eUgwmsG3Yaz0BCSoFpAfxpNEhvkp4YULdMPs33eww== X-Received: by 2002:a05:6512:4003:b0:500:b63f:4db3 with SMTP id br3-20020a056512400300b00500b63f4db3mr4414594lfb.35.1694861399900; Sat, 16 Sep 2023 03:49:59 -0700 (PDT) Received: from smtpclient.apple (c188-150-165-235.bredband.tele2.se. [188.150.165.235]) by smtp.gmail.com with ESMTPSA id x13-20020ac25dcd000000b00502d555fb80sm972025lfq.119.2023.09.16.03.49.58 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 16 Sep 2023 03:49:59 -0700 (PDT) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.120.0.1.15\)) From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= In-Reply-To: Date: Sat, 16 Sep 2023 12:49:58 +0200 Content-Transfer-Encoding: quoted-printable Message-Id: <65105BCA-1884-4673-A8F8-03E3C7ABAAEA@gmail.com> References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> <83fs3u5e7u.fsf@gnu.org> <835y4q5apw.fsf@gnu.org> <776370AB-662F-4C0A-95BF-97DEA4F18F54@gmail.com> <3A0AC9E2-A420-47B6-870A-69C53FCAEF71@gmail.com> X-Mailer: Apple Mail (2.3654.120.0.1.15) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) 16 sep. 2023 kl. 05.45 skrev Stefan Monnier : >>> (At this point >>> someone will inevitably point out a helpful invariant that is = obvious >>> in hindsight. This is just my cunning attempt at making that = happen.) >=20 > I think I have a "helpful invariant", finally: Everything is proceeding as I have foreseen. > Because of how we build our code, when we're at an `on_failure_jump` = the > two branches can either both go forward (typically for a "|" or a = "?"), > or *one* of them goes backward the other forward (for loops), where = the > one that goes backward (i.e. `p2 <=3D p2_orig`) is the edge (call it > `p2_loop`) that goes back to the beginning of the loop and the other > (call it `p2_exit`) is the one that exits the loop. >=20 > Now, because our loops are nested with proper "structured = programming", > there can't be any jump from within the loop to outside the loop = except > for the current jump. And there can't be any jump from outside the = loop > to inside the loop except by entering via `p2_loop`. >=20 > Since we have two recursive calls to `mutually_exclusive_p` (one for > `p2_exit` and one for `p2_loop`) and each one only needs to check = those > positions not checked by the other, we can say that `p2_loop` only = needs > to check the positions within the loop (i.e. between `p2_loop` and > `p2_exit`) and can presume that *all* other positions are checked by = the > other recursive call (the one that starts at `p2_exit`). >=20 > So I think a single arg `done_end` (set, like the current `done_end`, = to > `p2_loop` when recursing into `p2_loop`) is indeed sufficient: there's > no way to go from `p2_loop` to before `p2_loop` without first going to > `p2_exit` (which is already checked by the other call). I think you are right, but wouldn't mind seeing it confirmed = empirically. Say, by cross-checking using an an alternative (slower) = implementation that directly checks whether a node has been visited = before. From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: Stefan Monnier Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 16 Sep 2023 15:49:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Cc: martin rudalics , Eli Zaretskii , 65726@debbugs.gnu.org Received: via spool by 65726-submit@debbugs.gnu.org id=B65726.16948792997228 (code B ref 65726); Sat, 16 Sep 2023 15:49:02 +0000 Received: (at 65726) by debbugs.gnu.org; 16 Sep 2023 15:48:19 +0000 Received: from localhost ([127.0.0.1]:48320 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qhXWt-0001sU-2S for submit@debbugs.gnu.org; Sat, 16 Sep 2023 11:48:19 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:10244) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qhXWr-0001ri-9s for 65726@debbugs.gnu.org; Sat, 16 Sep 2023 11:48:18 -0400 Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id C84888075E; Sat, 16 Sep 2023 11:48:04 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1694879283; bh=nYNHK/LtSJodWEREH3U/PS/ZBBNjCFTYOUygk8dWRTY=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=W+hcOXVq5x4YeJcEy2HWblYTyiOGMQ75undMdmsD1EuCyurLhaBmX2se0Bgqin0QT 7vwYfU504SKDaHYq0GLNWoswpC5eJUA8y5m3OSl7n+o2zNBEffrWHgOuofLOIVOe+9 ozl11WYxBhf9VDs3LklRB7lCno1us5cwEh4vug0yijgchFNKvPkY9F2JizBLVVa8cy lSmoKA4rE6Sq864in1WpPLZl3z5Uz8wUwcS6F4zCipaeO8FrGKwk/qivDa4zJOGSJs Gj41p0tUNlheFktoXHOXs1xL5cWXr8LJqiW134FHPD2Uy3Eez7fHx6rP7CHXRkb/Jb q5+jafme72rIw== Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 7FCA8803EB; Sat, 16 Sep 2023 11:48:03 -0400 (EDT) Received: from pastel (unknown [104.247.237.102]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 2BD111201D0; Sat, 16 Sep 2023 11:48:03 -0400 (EDT) From: Stefan Monnier In-Reply-To: <65105BCA-1884-4673-A8F8-03E3C7ABAAEA@gmail.com> ("Mattias =?UTF-8?Q?Engdeg=C3=A5rd?="'s message of "Sat, 16 Sep 2023 12:49:58 +0200") Message-ID: References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> <83fs3u5e7u.fsf@gnu.org> <835y4q5apw.fsf@gnu.org> <776370AB-662F-4C0A-95BF-97DEA4F18F54@gmail.com> <3A0AC9E2-A420-47B6-870A-69C53FCAEF71@gmail.com> <65105BCA-1884-4673-A8F8-03E3C7ABAAEA@gmail.com> Date: Sat, 16 Sep 2023 11:48:02 -0400 User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.110 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > I think you are right, but wouldn't mind seeing it confirmed > empirically. Say, by cross-checking using an an alternative (slower) > implementation that directly checks whether a node has been visited before. I'm reworking my code so it takes 2 arguments: the loop-entry and the loop-exit. Any jump outside of those bounds should never happen so we can assert it to check that our assumptions are right (and we can return false when we don't compile assertions, so it's never over-optimistic). Stefan From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: Stefan Monnier Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 18 Sep 2023 02:15:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Cc: martin rudalics , Eli Zaretskii , 65726@debbugs.gnu.org Received: via spool by 65726-submit@debbugs.gnu.org id=B65726.169500329617837 (code B ref 65726); Mon, 18 Sep 2023 02:15:02 +0000 Received: (at 65726) by debbugs.gnu.org; 18 Sep 2023 02:14:56 +0000 Received: from localhost ([127.0.0.1]:51709 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qi3mq-0004dc-34 for submit@debbugs.gnu.org; Sun, 17 Sep 2023 22:14:56 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:18907) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qi3mn-0004dH-OP for 65726@debbugs.gnu.org; Sun, 17 Sep 2023 22:14:54 -0400 Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 0B5A4806AC; Sun, 17 Sep 2023 22:14:40 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1695003278; bh=7lFsvY7TfGRN8McEO/TdFeXojCeBmAGGrvlSdTTOLhI=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=J/B1nAklttwN3Z1MFiIStwZfI+7Iu/SVK7AFTQS6iyRdCfqa0bdtU8KadDPrTjlG+ glBO4Bm4X+rzV/iAcmvS8OtlpMUsVW3coY91wkhiWWbbos0N+Uf8UkNsmSL+pCfTyo AAvkTBdfWr5ginbdIAZ8edi/j20WN8tmGpSIlfY6CTXJP7ErgIQp1Gar+L/smDH70w 6NqofI5prNLOwri709Wkaxffd7WYPcN0XnuoGPHYhvcLoIsmCTLxSvmIvJRJw2UU+m +Fljvh9UPTKpAlgll54QhIL9SW1G8SwQ0MzCutuyB/ulnapzErgY8roH98v2oUUWZB OqPE7B3GJC9LA== Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 5D0A180250; Sun, 17 Sep 2023 22:14:38 -0400 (EDT) Received: from pastel (unknown [45.72.220.249]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 1C969120218; Sun, 17 Sep 2023 22:14:38 -0400 (EDT) From: Stefan Monnier In-Reply-To: (Stefan Monnier's message of "Sat, 16 Sep 2023 11:48:02 -0400") Message-ID: References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> <83fs3u5e7u.fsf@gnu.org> <835y4q5apw.fsf@gnu.org> <776370AB-662F-4C0A-95BF-97DEA4F18F54@gmail.com> <3A0AC9E2-A420-47B6-870A-69C53FCAEF71@gmail.com> <65105BCA-1884-4673-A8F8-03E3C7ABAAEA@gmail.com> Date: Sun, 17 Sep 2023 22:14:37 -0400 User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL -0.132 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain POISEN_SPAM_PILL 0.1 Meta: its spam POISEN_SPAM_PILL_1 0.1 random spam to be learned in bayes POISEN_SPAM_PILL_3 0.1 random spam to be learned in bayes X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) --=-=-= Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable > I'm reworking my code so it takes 2 arguments: the loop-entry and the > loop-exit. Any jump outside of those bounds should never happen so we > can assert it to check that our assumptions are right (and we can > return false when we don't compile assertions, so it's never over-optimis= tic). Hmm... not quite working yet. With the patch below I get: % make test/src/regex-emacs-tests [...] passed 30/34 regexp-multibyte-unibyte (0.000264 sec) 0: /on_failure_jump_smart to 9 3: /exactn/1/x 6: /jump to 0 9: /start_memory/1 11: /on_failure_jump to 26 14: /on_failure_jump_smart to 23 17: /exactn/1/=3D 20: /jump to 14 23: /jump to 29 26: /exactn/1/h 29: /stop_memory/1 31: /on_failure_jump_loop to 37 34: /jump to 9 37: /succeed 38: end of pattern. 38 bytes used/128 bytes allocated. re_nsub: 1 regs_alloc: 1 can_be_null: 0 p1=3D=3D3, p2=3D=3D34, loop-entry=3D=3D14, loop-exit=3D=3D26 Test regexp-tests-backtrack-optimization backtrace: looking-at("x*\\(=3D*\\|h\\)+") [...] The problem is that my code sees the `jump 9` (near the end) followed by `start_memory` and `on_failure_jump to 26` as a a backward jump that defines a loop whose body starts at 14 and whose exit point is at 26, but that 14..26 is not a loop, it's a `|` and those don't obey the assumption I made about the exit point (the 2 destinations of such an `on_failure_jump` correspond to the first and the second patterns of the `|`, i.e. entry&middle rather than entry&exit, so there *can* be jumps straight out from the first point without going through the second point =F0=9F=99=81). BTW, here's an indented version of the code: 0: /on_failure_jump_smart to 9 { 3: /exactn/1/x 6: } /jump to 0 9: { /start_memory/1 11: /on_failure_jump to 26 14: /on_failure_jump_smart to 23 { 17: /exactn/1/=3D 20: } /jump to 14 23: /jump to 29 26: /exactn/1/h 29: /stop_memory/1 31: /on_failure_jump_loop to 37 34: } /jump to 9 37: /succeed 38: end of pattern. Another problem we see here is that the main (second) loop spans 9..37 and is controlled by the `/on_failure_jump_loop to 37` but the two destination of the OFJ are not 9 and 37 but 34 and 37 =F0=9F=99=82. So maybe we should `skip_noops` before looking at the destinations to decide if it's a loop? Stefan --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=regexp.c.patch diff --git a/src/regex-emacs.c b/src/regex-emacs.c index 55d0a6e8df8..c54f9f81890 100644 --- a/src/regex-emacs.c +++ b/src/regex-emacs.c @@ -3068,8 +3068,10 @@ analyze_first (re_char *p, re_char *pend, char *fastmap, bool multibyte) continue; case succeed_n: - /* If N == 0, it should be an on_failure_jump_loop instead. */ - DEBUG_STATEMENT (EXTRACT_NUMBER (j, p + 2); eassert (j > 0)); + /* If N == 0, it should be an on_failure_jump_loop instead. + `j` can be negative because `EXTRACT_NUMBER` extracts a + signed number whereas `succeed_n` treats it as unsigned. */ + DEBUG_STATEMENT (EXTRACT_NUMBER (j, p + 2); eassert (j != 0)); p += 4; /* We only care about one iteration of the loop, so we don't need to consider the case where this behaves like an @@ -3743,20 +3745,20 @@ mutually_exclusive_charset (struct re_pattern_buffer *bufp, re_char *p1, } /* True if "p1 matches something" implies "p2 fails". */ -/* Avoiding inf-loops: - We're trying to follow all paths reachable from `p2`, but since some +/* We're trying to follow all paths reachable from `p2`, but since some loops can match the empty string, this can loop back to `p2`. - To avoid inf-looping, we keep track of points that have been considered - "already". Instead of keeping a list of such points, `done_beg` and - `done_end` delimit a chunk of bytecode we already considered. - To guarantee termination, a lexical ordering between `done_*` and `p2` - should be obeyed: - At each recursion, either `done_beg` gets smaller, - or `done_beg` is unchanged and `done_end` gets larger - or they're both unchanged and `p2` gets larger. */ + To avoid inf-looping, we take advantage of the fact that + the bytecode we generate is made of syntactically nested loops, more + specifically, every loop has a single entry point and single exit point. + The function takes 2 more arguments (`loop_entry` and `loop_exit`). + `loop_entry` points to the sole entry point of the current loop and + `loop_exit` points to its sole exit point (when non-NULL). + The function can assume that `loop_exit` is "mutually exclusive". + Termination of recursive calls is ensured because either `loop_entry` + is larger, or it's equal but `p2` is larger. */ static bool mutually_exclusive_aux (struct re_pattern_buffer *bufp, re_char *p1, - re_char *p2, re_char *done_beg, re_char *done_end) + re_char *p2, re_char *loop_entry, re_char *loop_exit) { re_opcode_t op2; unsigned char *pend = bufp->buffer + bufp->used; @@ -3765,8 +3767,23 @@ mutually_exclusive_aux (struct re_pattern_buffer *bufp, re_char *p1, eassert (p1 >= bufp->buffer && p1 < pend && p2 >= bufp->buffer && p2 <= pend); - eassert (done_beg <= done_end); - eassert (done_end <= p2); + if (p2 == loop_exit) + /* Presumably already checked elsewhere. */ + return true; + eassert (loop_entry && p2 >= loop_entry); + /* eassert (!loop_exit || p2 < loop_exit); */ + if (p2 < loop_entry) + return false; + if (loop_exit && p2 > loop_exit) + { + void print_compiled_pattern (struct re_pattern_buffer *bufp); + print_compiled_pattern (bufp); + fprintf (stderr, "p1==%d, p2==%d, loop-entry==%d, loop-exit==%d\n", + p1 - bufp->buffer, p2 - bufp->buffer, + loop_entry - bufp->buffer, loop_exit - bufp->buffer); + error ("WOW1!"); + } + /* return false; */ /* Skip over open/close-group commands. If what follows this loop is a ...+ construct, @@ -3860,27 +3877,30 @@ mutually_exclusive_aux (struct re_pattern_buffer *bufp, re_char *p1, EXTRACT_NUMBER_AND_INCR (mcnt, p2); re_char *p2_other = p2 + mcnt; - /* When we jump backward we bump `done_end` up to `p3` under - the assumption that any other position between `done_end` - and `p3` is either: - - checked by the other call to RECURSE. - - not reachable from here (e.g. for positions before the - `on_failure_jump`), or at least not without first - jumping before `done_beg`. - This should hold because our state machines are not arbitrary: - they consists of syntaxically nested loops with limited - control flow. - FIXME: This can fail (i.e. return true when it shouldn't) - if we start generating bytecode with a different shape, - so maybe we should bite the bullet and replace done_beg/end - with an actual list of positions we've already processed. */ -#define RECURSE(p3) \ - ((p3) < done_beg ? mutually_exclusive_aux (bufp, p1, p3, p3, p3) \ - : (p3) <= done_end ? true \ - : mutually_exclusive_aux (bufp, p1, p3, done_beg, \ - (p3) > p2_orig ? done_end : (p3))) - - return RECURSE (p2) && RECURSE (p2_other); + /* If we jump backward to the entry point of the current loop + it means it's a zero-length cycle through that loop, so + this cycle itself does not break mutual-exclusion. + If we jump backward to a new loop nested within the current one + then the `p2_other` points to the exit of that inner loop + and the other RECURSE will check what happens when we leave + the loop so we can focus on checking just the loop body, + so we pass new values for `loop-entry` and `loop_exit`. + In all other cases, we just recurse "normally": if it's before + `loop_entry` it's a bug that will be caught by checks at + the entrace of the function and otherwise it's a forward jump + which doesn't need any special treatment. + FIXME: This is failsafe (can't return true when it shouldn't) + but it could be too conservative if we start generating bytecode + with a different shape, so maybe we should bite the bullet and + replace done_beg/end with an actual list of positions we've + already processed. */ +#define RECURSE(p3, p3_other) \ + ((p3) == loop_entry ? true \ + : loop_entry < (p3) && (p3) < p2_orig ? \ + mutually_exclusive_aux (bufp, p1, p3, p3, p3_other) \ + : mutually_exclusive_aux (bufp, p1, p3, loop_entry, loop_exit)) + + return RECURSE (p2, p2_other) && RECURSE (p2_other, p2); } default: @@ -3895,7 +3915,7 @@ #define RECURSE(p3) \ mutually_exclusive_p (struct re_pattern_buffer *bufp, re_char *p1, re_char *p2) { - return mutually_exclusive_aux (bufp, p1, p2, p2, p2); + return mutually_exclusive_aux (bufp, p1, p2, bufp->buffer, NULL); } /* Matching routines. */ --=-=-=-- From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: Stefan Monnier Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 18 Sep 2023 04:00:03 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Cc: martin rudalics , Eli Zaretskii , 65726@debbugs.gnu.org Received: via spool by 65726-submit@debbugs.gnu.org id=B65726.169500959430797 (code B ref 65726); Mon, 18 Sep 2023 04:00:03 +0000 Received: (at 65726) by debbugs.gnu.org; 18 Sep 2023 03:59:54 +0000 Received: from localhost ([127.0.0.1]:51760 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qi5QQ-00080e-Gd for submit@debbugs.gnu.org; Sun, 17 Sep 2023 23:59:54 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:32571) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qi5QO-00080N-81 for 65726@debbugs.gnu.org; Sun, 17 Sep 2023 23:59:53 -0400 Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 9F856806AC; Sun, 17 Sep 2023 23:59:38 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1695009573; bh=T2iGOu1J+gGY0aCs0zHs2Ao6zitDJTKDdlla14CTGC4=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=FFIFpgJzoEFVQc9vHpWRtgElrYHI2Twii+5S1fiRRnzVzsAo4jPs3Z1wXxpIaenv8 xg7+J0ovlK205BaCnM1cvixdMhiKS3x3n2+lQWOl/1oV5MWgl/OGxblro60J31YUxV K4N8BsS43QBQxh5Mjeq4Gvk2OlJR049ynkHOMx42twUldFKvwyUx8Z3r5vBURnTwxs VgmEAMzzGBxe7der7Rtb2vWXFBxHykZF0tkcUspDGlqBUbqyvr5Z6WTepLY+gi1SFI fC6xA7lYFbC7EOtq1Its842WgG/cugNZwmJgEXcCwexFUhfz/Q+rx6cagA149VOU80 CSp65kmSJHcKw== Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 598BD803E6; Sun, 17 Sep 2023 23:59:33 -0400 (EDT) Received: from pastel (unknown [45.72.220.249]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 281671203C3; Sun, 17 Sep 2023 23:59:33 -0400 (EDT) From: Stefan Monnier In-Reply-To: (Stefan Monnier's message of "Sun, 17 Sep 2023 22:14:37 -0400") Message-ID: References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> <83fs3u5e7u.fsf@gnu.org> <835y4q5apw.fsf@gnu.org> <776370AB-662F-4C0A-95BF-97DEA4F18F54@gmail.com> <3A0AC9E2-A420-47B6-870A-69C53FCAEF71@gmail.com> <65105BCA-1884-4673-A8F8-03E3C7ABAAEA@gmail.com> Date: Sun, 17 Sep 2023 23:59:32 -0400 User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.019 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > So maybe we should `skip_noops` before looking at the destinations to > decide if it's a loop? Nah, just introduces other problems :-( BTW maybe we should replace 31: /on_failure_jump_loop to 37 34: /jump to 9 with 31: /on_failure_dont_jump_loop to 9 It's quite funny actually: with the current bytecodes, every iteration of a backtracking greedy loop runs `jump + on_failure_jump`, whereas for a non-greedy loop every iteration runs just a single `on_failure_jump`. Yet those bytecodes predate the introduction of non-greedy loops :-) [ Of course, there are reasons for it, beside historical ones: it's harder to rewrite a loop that ends with `on_failure_dont_jump_smart` into one using `on_failure_keep_string_jump` :-( ] Stefan From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: Stefan Monnier Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 18 Sep 2023 12:34:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Cc: martin rudalics , Eli Zaretskii , 65726@debbugs.gnu.org Received: via spool by 65726-submit@debbugs.gnu.org id=B65726.16950403849299 (code B ref 65726); Mon, 18 Sep 2023 12:34:01 +0000 Received: (at 65726) by debbugs.gnu.org; 18 Sep 2023 12:33:04 +0000 Received: from localhost ([127.0.0.1]:52348 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qiDR1-0002Pt-6n for submit@debbugs.gnu.org; Mon, 18 Sep 2023 08:33:04 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:43675) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qiDQv-0002PE-VZ for 65726@debbugs.gnu.org; Mon, 18 Sep 2023 08:33:01 -0400 Received: from pmg2.iro.umontreal.ca (localhost.localdomain [127.0.0.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id E9C2A805A7; Mon, 18 Sep 2023 08:32:43 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1695040362; bh=nqMMCv/WQR7aMX7Mpg/kIuNXuVrihhJT6FuWj5unFtw=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=JZu5BQXLJh02HYw/PDSUV9ljQVtn2ykX/VinRRd2HNvFpyHMnxU/Dy9g75a/sRWsP 0cnY+pT0lXeizWgqsRXf9SlNYgijH0klWYzrFIgl1KQbgRvOsm8FuMMHmM8HBozfRI R1RYVW3eLsruxlOe1NZ9EwjrSnmCnJwT6qUsbgsI4x4J9C79PhWPX4cYIxIgkjGVXA axAeFWcUXnFjmKdAGa09f0xsc/rFmpEHhj5r4/+lib9GCQ4dnR/VpliAQBunhHKfNm 4YaoxehJKFOUyukM2QTMGsCVWfDldgHW65z+YFSIWIRgC7xMPv/roLjhG2whGwikGH UKH2h0bcTx2Bw== Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg2.iro.umontreal.ca (Proxmox) with ESMTP id 5D59080250; Mon, 18 Sep 2023 08:32:42 -0400 (EDT) Received: from pastel (unknown [45.72.220.249]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 2993112041A; Mon, 18 Sep 2023 08:32:42 -0400 (EDT) From: Stefan Monnier In-Reply-To: (Stefan Monnier's message of "Sun, 17 Sep 2023 23:59:32 -0400") Message-ID: References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> <83fs3u5e7u.fsf@gnu.org> <835y4q5apw.fsf@gnu.org> <776370AB-662F-4C0A-95BF-97DEA4F18F54@gmail.com> <3A0AC9E2-A420-47B6-870A-69C53FCAEF71@gmail.com> <65105BCA-1884-4673-A8F8-03E3C7ABAAEA@gmail.com> Date: Mon, 18 Sep 2023 08:32:40 -0400 User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="=-=-=" X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.018 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) --=-=-= Content-Type: text/plain > BTW maybe we should replace > > 31: /on_failure_jump_loop to 37 > 34: /jump to 9 > > with > > 31: /on_failure_dont_jump_loop to 9 In the mean time the patch below recognizes the above pattern, which gives me code which is safe (it should both always terminate and should never apply the optimization if it's not valid) yet does find the optimization in all the cases where I expected it. Stefan --=-=-= Content-Type: text/x-diff Content-Disposition: inline; filename=regexp.c.patch diff --git a/src/regex-emacs.c b/src/regex-emacs.c index 55d0a6e8df8..e45d0f19dbf 100644 --- a/src/regex-emacs.c +++ b/src/regex-emacs.c @@ -1923,12 +1923,22 @@ regex_compile (re_char *pattern, ptrdiff_t size, if (!zero_times_ok && simple) { /* Since simple * loops can be made faster by using - on_failure_keep_string_jump, we turn simple P+ - into PP* if P is simple. */ + on_failure_keep_string_jump, we turn P+ into PP* + if P is simple. + We can't use `top: ; OFJS exit; J top; exit:` + Because the OFJS needs to be at the beginning + since we want to be able to replace + `top: OFJS exit; ; J top; exit` + with + `top: OFKSJ exit; loop: ; J loop; exit`, + i.e. a single OFJ at the beginning of the loop + rather than once per iteration. */ unsigned char *p1, *p2; startoffset = b - laststart; GET_BUFFER_SPACE (startoffset); p1 = b; p2 = laststart; + /* This presumes that the code skipped + by `skip_one_char` is position-independent. */ while (p2 < p1) *b++ = *p2++; zero_times_ok = 1; @@ -3068,8 +3078,10 @@ analyze_first (re_char *p, re_char *pend, char *fastmap, bool multibyte) continue; case succeed_n: - /* If N == 0, it should be an on_failure_jump_loop instead. */ - DEBUG_STATEMENT (EXTRACT_NUMBER (j, p + 2); eassert (j > 0)); + /* If N == 0, it should be an on_failure_jump_loop instead. + `j` can be negative because `EXTRACT_NUMBER` extracts a + signed number whereas `succeed_n` treats it as unsigned. */ + DEBUG_STATEMENT (EXTRACT_NUMBER (j, p + 2); eassert (j != 0)); p += 4; /* We only care about one iteration of the loop, so we don't need to consider the case where this behaves like an @@ -3743,20 +3755,20 @@ mutually_exclusive_charset (struct re_pattern_buffer *bufp, re_char *p1, } /* True if "p1 matches something" implies "p2 fails". */ -/* Avoiding inf-loops: - We're trying to follow all paths reachable from `p2`, but since some +/* We're trying to follow all paths reachable from `p2`, but since some loops can match the empty string, this can loop back to `p2`. - To avoid inf-looping, we keep track of points that have been considered - "already". Instead of keeping a list of such points, `done_beg` and - `done_end` delimit a chunk of bytecode we already considered. - To guarantee termination, a lexical ordering between `done_*` and `p2` - should be obeyed: - At each recursion, either `done_beg` gets smaller, - or `done_beg` is unchanged and `done_end` gets larger - or they're both unchanged and `p2` gets larger. */ + To avoid inf-looping, we take advantage of the fact that + the bytecode we generate is made of syntactically nested loops, more + specifically, every loop has a single entry point and single exit point. + The function takes 2 more arguments (`loop_entry` and `loop_exit`). + `loop_entry` points to the sole entry point of the current loop and + `loop_exit` points to its sole exit point (when non-NULL). + The function can assume that `loop_exit` is "mutually exclusive". + Termination of recursive calls is ensured because either `loop_entry` + is larger, or it's equal but `p2` is larger. */ static bool mutually_exclusive_aux (struct re_pattern_buffer *bufp, re_char *p1, - re_char *p2, re_char *done_beg, re_char *done_end) + re_char *p2, re_char *loop_entry, re_char *loop_exit) { re_opcode_t op2; unsigned char *pend = bufp->buffer + bufp->used; @@ -3765,8 +3777,23 @@ mutually_exclusive_aux (struct re_pattern_buffer *bufp, re_char *p1, eassert (p1 >= bufp->buffer && p1 < pend && p2 >= bufp->buffer && p2 <= pend); - eassert (done_beg <= done_end); - eassert (done_end <= p2); + if (p2 == loop_exit) + /* Presumably already checked elsewhere. */ + return true; + eassert (loop_entry && p2 >= loop_entry); + /* eassert (!loop_exit || p2 < loop_exit); */ + if (p2 < loop_entry) + return false; + if (loop_exit && p2 > loop_exit) + { + void print_compiled_pattern (struct re_pattern_buffer *bufp); + print_compiled_pattern (bufp); + fprintf (stderr, "p1==%d, p2==%d, loop-entry==%d, loop-exit==%d\n", + p1 - bufp->buffer, p2 - bufp->buffer, + loop_entry - bufp->buffer, loop_exit - bufp->buffer); + error ("WOW1!"); + } + /* return false; */ /* Skip over open/close-group commands. If what follows this loop is a ...+ construct, @@ -3859,28 +3886,40 @@ mutually_exclusive_aux (struct re_pattern_buffer *bufp, re_char *p1, p2++; EXTRACT_NUMBER_AND_INCR (mcnt, p2); re_char *p2_other = p2 + mcnt; + /* For `+` loops, we often have an `on_failure_jump` that skips forward + over a subsequent `jump` for lack of an `on_failure_dont_jump` + kind of thing. Recognize this pattern since that subsequent + `jump` is the one that jumps to the loop-entry. */ + if ((re_opcode_t) p2[0] == jump && mcnt == 3) + { + EXTRACT_NUMBER (mcnt, p2 + 1); + p2 += mcnt + 3; + } - /* When we jump backward we bump `done_end` up to `p3` under - the assumption that any other position between `done_end` - and `p3` is either: - - checked by the other call to RECURSE. - - not reachable from here (e.g. for positions before the - `on_failure_jump`), or at least not without first - jumping before `done_beg`. - This should hold because our state machines are not arbitrary: - they consists of syntaxically nested loops with limited - control flow. - FIXME: This can fail (i.e. return true when it shouldn't) - if we start generating bytecode with a different shape, - so maybe we should bite the bullet and replace done_beg/end - with an actual list of positions we've already processed. */ -#define RECURSE(p3) \ - ((p3) < done_beg ? mutually_exclusive_aux (bufp, p1, p3, p3, p3) \ - : (p3) <= done_end ? true \ - : mutually_exclusive_aux (bufp, p1, p3, done_beg, \ - (p3) > p2_orig ? done_end : (p3))) - - return RECURSE (p2) && RECURSE (p2_other); + /* If we jump backward to the entry point of the current loop + it means it's a zero-length cycle through that loop, so + this cycle itself does not break mutual-exclusion. + If we jump backward to a new loop nested within the current one + then the `p2_other` points to the exit of that inner loop + and the other RECURSE will check what happens when we leave + the loop so we can focus on checking just the loop body, + so we pass new values for `loop-entry` and `loop_exit`. + In all other cases, we just recurse "normally": if it's before + `loop_entry` it's a bug that will be caught by checks at + the entrace of the function and otherwise it's a forward jump + which doesn't need any special treatment. + FIXME: This is failsafe (can't return true when it shouldn't) + but it could be too conservative if we start generating bytecode + with a different shape, so maybe we should bite the bullet and + replace done_beg/end with an actual list of positions we've + already processed. */ +#define RECURSE(p3, p3_other) \ + ((p3) == loop_entry ? true \ + : loop_entry < (p3) && (p3) < p2_orig && (p3_other) > p2_orig ? \ + mutually_exclusive_aux (bufp, p1, p3, p3, p3_other) \ + : mutually_exclusive_aux (bufp, p1, p3, loop_entry, loop_exit)) + + return RECURSE (p2, p2_other) && RECURSE (p2_other, p2); } default: @@ -3895,7 +3934,7 @@ #define RECURSE(p3) \ mutually_exclusive_p (struct re_pattern_buffer *bufp, re_char *p1, re_char *p2) { - return mutually_exclusive_aux (bufp, p1, p2, p2, p2); + return mutually_exclusive_aux (bufp, p1, p2, bufp->buffer, NULL); } /* Matching routines. */ --=-=-=-- From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 21 Sep 2023 17:25:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Stefan Monnier Cc: martin rudalics , Eli Zaretskii , 65726@debbugs.gnu.org Received: via spool by 65726-submit@debbugs.gnu.org id=B65726.169531704812808 (code B ref 65726); Thu, 21 Sep 2023 17:25:01 +0000 Received: (at 65726) by debbugs.gnu.org; 21 Sep 2023 17:24:08 +0000 Received: from localhost ([127.0.0.1]:34757 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qjNPM-0003KW-Bn for submit@debbugs.gnu.org; Thu, 21 Sep 2023 13:24:08 -0400 Received: from mail-lf1-x133.google.com ([2a00:1450:4864:20::133]:56442) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qjNPH-0003Jv-Jn for 65726@debbugs.gnu.org; Thu, 21 Sep 2023 13:24:07 -0400 Received: by mail-lf1-x133.google.com with SMTP id 2adb3069b0e04-5041335fb9cso2111583e87.0 for <65726@debbugs.gnu.org>; Thu, 21 Sep 2023 10:23:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1695317027; x=1695921827; darn=debbugs.gnu.org; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:sender:from:to:cc:subject :date:message-id:reply-to; bh=55NxjFuUNSJw4VXqv9XkWlKx2pK2JezT6NDOKT5tobA=; b=Omc7uvqefRg/SSKGbz4P2X5DGn45im4aZBpU1Wh3K9ykVCOaGz2Vzh/rWYY4w5wirU aAsFGtQ2VK1S4ZPd5JtBMsGuZKmrXKCscZ+aFpbofRqV719CpCLBPaHWmTxS0td3Ev4t 9umkRLEIv0mjSBeXdQ+f/zwiKkg2cr/Hip8vzTe/tIvOhQePR7uak139mJig1EGeM8Ud ye/DGkkzyPOJOa5ksTrmN9qLVoimrSKugowqacupVlOIUlazlVcgWTiqHVgHpdUo892v JgqlcmGRV3wzWMw8YI9HX01ETtPNQt3TVcZZkYbtajMqY1UiNtcV3udDNrY/oPuMzz0B ou5Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695317027; x=1695921827; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:sender:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=55NxjFuUNSJw4VXqv9XkWlKx2pK2JezT6NDOKT5tobA=; b=LpdcqCzw4gOmUWUfsEGlLtFKEOLhGVndlmg5ysS4z2cEt25WsLEfObjwFquEfdtJct iO8OLP3/Hkq7dAxDl5VEur64vxkss4ymN28sh7EI+v/+PaGnZ8J+2JlIG6TcHp/XWXhV n4Kecjk1+d18ckft330AyazB+B6nCiUVQMWad0ubiwChhIxK3/NM/3uaGJD0D55cCOAQ vODL6WScV/rXdIW+CF/V5Ht6M9SjaGDJGGDA4NSIl2WLDZAQ7cqioenHdovnItEyojjN io9YDE6v38FBDrD/BISyajTEtMecQtEa5p8lb0kX7e2hb3pVJSA18ARXAwbtFa9AK2cU 1NLg== X-Gm-Message-State: AOJu0YxB9+wlYPA90Rb0ohz0VO1dAJbL70YadLUX/DNXR4cRK6+2Er3b TsvvQOjszRopnMFdU1mq0Sc= X-Google-Smtp-Source: AGHT+IF+au/26DZppRfSY1JBKylZ69paUenUIhaTQgEAFOLOiiGsQNgQcKmRKnsMp77pD5FEQhdhCQ== X-Received: by 2002:a05:6512:220a:b0:503:1c58:8a46 with SMTP id h10-20020a056512220a00b005031c588a46mr7264885lfu.9.1695317027091; Thu, 21 Sep 2023 10:23:47 -0700 (PDT) Received: from smtpclient.apple (c188-150-165-235.bredband.tele2.se. [188.150.165.235]) by smtp.gmail.com with ESMTPSA id g8-20020a19ee08000000b0050420791528sm363650lfb.293.2023.09.21.10.23.46 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Thu, 21 Sep 2023 10:23:46 -0700 (PDT) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.120.0.1.15\)) From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= In-Reply-To: Date: Thu, 21 Sep 2023 19:23:45 +0200 Content-Transfer-Encoding: quoted-printable Message-Id: <5882311F-DEAE-4220-B241-86367BF07E78@gmail.com> References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> <83fs3u5e7u.fsf@gnu.org> <835y4q5apw.fsf@gnu.org> <776370AB-662F-4C0A-95BF-97DEA4F18F54@gmail.com> <3A0AC9E2-A420-47B6-870A-69C53FCAEF71@gmail.com> <65105BCA-1884-4673-A8F8-03E3C7ABAAEA@gmail.com> X-Mailer: Apple Mail (2.3654.120.0.1.15) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) 18 sep. 2023 kl. 14.32 skrev Stefan Monnier : > In the mean time the patch below recognizes the above pattern, which > gives me code which is safe (it should both always terminate and = should > never apply the optimization if it's not valid) yet does find the > optimization in all the cases where I expected it. Yes, maybe this would work but the ad-hocness of it all means that I = very much could have missed something (and as you comment, that it's = brittle). > case succeed_n: > - /* If N =3D=3D 0, it should be an on_failure_jump_loop = instead. */ > - DEBUG_STATEMENT (EXTRACT_NUMBER (j, p + 2); eassert (j > 0)); > + /* If N =3D=3D 0, it should be an on_failure_jump_loop = instead. > + `j` can be negative because `EXTRACT_NUMBER` extracts a > + signed number whereas `succeed_n` treats it as unsigned. = */ > + DEBUG_STATEMENT (EXTRACT_NUMBER (j, p + 2); eassert (j !=3D = 0)); So this is what prevented me from running with counts above 2**15 and = debugging enabled for all these years... > + if (loop_exit && p2 > loop_exit) > + { > + void print_compiled_pattern (struct re_pattern_buffer *bufp); > + print_compiled_pattern (bufp); > + fprintf (stderr, "p1=3D=3D%d, p2=3D=3D%d, loop-entry=3D=3D%d, = loop-exit=3D=3D%d\n", > + p1 - bufp->buffer, p2 - bufp->buffer, > + loop_entry - bufp->buffer, loop_exit - bufp->buffer); > + error ("WOW1!"); #ifdef REGEX_EMACS_DEBUG ? > + } > + /* return false; */ From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: Stefan Monnier Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 21 Sep 2023 18:10:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Cc: martin rudalics , Eli Zaretskii , 65726-done@debbugs.gnu.org Received: via spool by 65726-done@debbugs.gnu.org id=D65726.169531976017826 (code D ref 65726); Thu, 21 Sep 2023 18:10:01 +0000 Received: (at 65726-done) by debbugs.gnu.org; 21 Sep 2023 18:09:20 +0000 Received: from localhost ([127.0.0.1]:34788 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qjO76-0004dS-9h for submit@debbugs.gnu.org; Thu, 21 Sep 2023 14:09:20 -0400 Received: from mailscanner.iro.umontreal.ca ([132.204.25.50]:25771) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qjO72-0004dA-DS for 65726-done@debbugs.gnu.org; Thu, 21 Sep 2023 14:09:18 -0400 Received: from pmg3.iro.umontreal.ca (localhost [127.0.0.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id E5686442AFF; Thu, 21 Sep 2023 14:09:00 -0400 (EDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=iro.umontreal.ca; s=mail; t=1695319739; bh=R6Wt3KiQScsDF4ohv4YJSC9xQo6Re0R6t8ktbrmKgfY=; h=From:To:Cc:Subject:In-Reply-To:References:Date:From; b=fwipxrEgX38g6rRtztCclA4KLEIwJ/+7FCxe7o5FDyeqZS1hGY5YjYVIMCXuOfwWO yiT+pgKEFPvFLENcRZHR6nlD/uYnkiav/byqM1upZjuvGIRS9LLEwA9r0oKCdopCqQ M27H4T9vasp/luRpjtY2s/68NN0dfn6tVNYAMDnAegix4LjpRykx2g+5OCG+/pQojP 8X9eb656Pf5ibA2LGMazVot+EFVqgH/emmcc/8Ztd0Y6urio7+0XLIgvButelN9s5Z zsIvh+DJ/xbhwXav58KnK87Xf2RaDl7Rz9wSM40emEAdhox1kjBFW7/6mr/2on1oJb eQaotaK0MyHqQ== Received: from mail01.iro.umontreal.ca (unknown [172.31.2.1]) by pmg3.iro.umontreal.ca (Proxmox) with ESMTP id 7E131442AFC; Thu, 21 Sep 2023 14:08:59 -0400 (EDT) Received: from pastel (unknown [45.72.220.249]) by mail01.iro.umontreal.ca (Postfix) with ESMTPSA id 55CC0120218; Thu, 21 Sep 2023 14:08:59 -0400 (EDT) From: Stefan Monnier In-Reply-To: <5882311F-DEAE-4220-B241-86367BF07E78@gmail.com> ("Mattias =?UTF-8?Q?Engdeg=C3=A5rd?="'s message of "Thu, 21 Sep 2023 19:23:45 +0200") Message-ID: References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> <83fs3u5e7u.fsf@gnu.org> <835y4q5apw.fsf@gnu.org> <776370AB-662F-4C0A-95BF-97DEA4F18F54@gmail.com> <3A0AC9E2-A420-47B6-870A-69C53FCAEF71@gmail.com> <65105BCA-1884-4673-A8F8-03E3C7ABAAEA@gmail.com> <5882311F-DEAE-4220-B241-86367BF07E78@gmail.com> Date: Thu, 21 Sep 2023 14:08:58 -0400 User-Agent: Gnus/5.13 (Gnus v5.13) MIME-Version: 1.0 Content-Type: text/plain X-SPAM-INFO: Spam detection results: 0 ALL_TRUSTED -1 Passed through trusted hosts only via SMTP AWL 0.023 Adjusted score from AWL reputation of From: address BAYES_00 -1.9 Bayes spam probability is 0 to 1% DKIM_SIGNED 0.1 Message has a DKIM or DK signature, not necessarily valid DKIM_VALID -0.1 Message has at least one valid DKIM or DK signature DKIM_VALID_AU -0.1 Message has a valid DKIM or DK signature from author's domain DKIM_VALID_EF -0.1 Message has a valid DKIM or DK signature from envelope-from domain X-SPAM-LEVEL: X-Spam-Score: -2.3 (--) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -3.3 (---) > So this is what prevented me from running with counts above 2**15 and > debugging enabled for all these years... Looks like it. In any case, I pushed a variant of the last patch to `master` and I think the case is now closed. We may want to revisit it, presumably by really keeping track of the all visited nodes, but this seems to work well for now and I'm confident that it is safe (regardless of the shape of the bytecode, it should always terminate and it should never apply the optimization if it's incorrect, and with the shape of the bytecode we currently produce it does correctly apply the optimization in the cases I checked). Stefan From unknown Sat Jun 21 03:24:18 2025 X-Loop: help-debbugs@gnu.org Subject: bug#65726: 29.1.50; Crash in regexp engine Resent-From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 23 Sep 2023 11:58:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 65726 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: To: Stefan Monnier Cc: martin rudalics , Eli Zaretskii , 65726-done@debbugs.gnu.org Received: via spool by 65726-done@debbugs.gnu.org id=D65726.169547023512836 (code D ref 65726); Sat, 23 Sep 2023 11:58:02 +0000 Received: (at 65726-done) by debbugs.gnu.org; 23 Sep 2023 11:57:15 +0000 Received: from localhost ([127.0.0.1]:37900 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qk1G6-0003Ky-Rp for submit@debbugs.gnu.org; Sat, 23 Sep 2023 07:57:15 -0400 Received: from mail-lf1-x133.google.com ([2a00:1450:4864:20::133]:50510) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qk1G3-0003Kg-13 for 65726-done@debbugs.gnu.org; Sat, 23 Sep 2023 07:57:13 -0400 Received: by mail-lf1-x133.google.com with SMTP id 2adb3069b0e04-502fd1e1dd8so6113073e87.1 for <65726-done@debbugs.gnu.org>; Sat, 23 Sep 2023 04:56:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1695470214; x=1696075014; darn=debbugs.gnu.org; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:sender:from:to:cc:subject :date:message-id:reply-to; bh=i/M9L3+Zn3pURCoiAZvdDgVYzEIds68u7LLNywwga5A=; b=PDwuop6l6A4eGWRX2vOGOPI4lGAvWBpfFkEpKY0YpL+cIh65CqurVRiGJQn81yU35e Ax+QfeJrDB9B2CLaU0tUh/QdWCeS9trAx2v5Erk7ZEmwP19c/zFVbwTs2ry4nT5YXqmE jaTa4bMGDfj8o7eRZEW+PqCtMWj2CH3p/yP8uQm+Nh4Tw0gyjWsPy/P0/mqg4tG1BXvG zN5VJCwMyRWudbdTKo+WCXIM1b4o/42FksGN9UE+1GjCUhsJNsXLJuymPVzDf1mZbOth R4KHt7gMYkjwTDf5DmY4YN9re8jYEVAQrdd9yl7SqM20p1LCjZxIZn/1DGc+9ODkEoId QtQw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695470214; x=1696075014; h=to:references:message-id:content-transfer-encoding:cc:date :in-reply-to:from:subject:mime-version:sender:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=i/M9L3+Zn3pURCoiAZvdDgVYzEIds68u7LLNywwga5A=; b=edGdKQevlmnifotc7KqVmslOiogaxQSIe4/BVsYkeo4uBwvGC4Ekg/J507QrM6Vz2m 3Zb3E4sHLgE+ddTlwlICS1saBZdh1WDjjZG/vspGnpF/W91VvNdtTcuXB0x2TPfInvHq pNFZwTGHCp48vcLltWjyuRH1/Bkf1GI8/XfUSw5XFGnUdZJNeMFLSZm45LWWHbnb5z2p ZOELGjaTUXFSbPMibQi/h6ejJ5JeLY8hxOldX450YzJodg+chiJA6kP3/apLZMW8i+tF IZXBjF0n/qcYs5kI1NPartQwLA8ySPwSfV2wM1CRoEt1v6MoDK90NgXUbAl455Z7U53h 3O7Q== X-Gm-Message-State: AOJu0YxyiDxWhf1kFZANPXdrGHf7xDdTVhHEuyWQt3Iyvp9zBkLQFmNb j1huaKFrZo565mRiSjEZ93k= X-Google-Smtp-Source: AGHT+IGmN0wxEM3dwz0cxPtnwOeFB75OyXt18ovYJD/Rt4j6fCdsrEmR5bINbUvZ5HoIrCGQmzamQg== X-Received: by 2002:a19:5041:0:b0:504:3093:1fad with SMTP id z1-20020a195041000000b0050430931fadmr1647574lfj.20.1695470213322; Sat, 23 Sep 2023 04:56:53 -0700 (PDT) Received: from smtpclient.apple (c188-150-165-235.bredband.tele2.se. [188.150.165.235]) by smtp.gmail.com with ESMTPSA id v17-20020ac25591000000b005038f757d84sm1076614lfg.57.2023.09.23.04.56.52 (version=TLS1_2 cipher=ECDHE-ECDSA-AES128-GCM-SHA256 bits=128/128); Sat, 23 Sep 2023 04:56:52 -0700 (PDT) Content-Type: text/plain; charset=us-ascii Mime-Version: 1.0 (Mac OS X Mail 14.0 \(3654.120.0.1.15\)) From: Mattias =?UTF-8?Q?Engdeg=C3=A5rd?= In-Reply-To: Date: Sat, 23 Sep 2023 13:56:51 +0200 Content-Transfer-Encoding: 7bit Message-Id: <4095840E-041C-4481-821F-8E213710D6E5@gmail.com> References: <8e1b4e50-0430-3eb3-e486-60def1e4821f@gmx.at> <83fs3u5e7u.fsf@gnu.org> <835y4q5apw.fsf@gnu.org> <776370AB-662F-4C0A-95BF-97DEA4F18F54@gmail.com> <3A0AC9E2-A420-47B6-870A-69C53FCAEF71@gmail.com> <65105BCA-1884-4673-A8F8-03E3C7ABAAEA@gmail.com> <5882311F-DEAE-4220-B241-86367BF07E78@gmail.com> X-Mailer: Apple Mail (2.3654.120.0.1.15) X-Spam-Score: 0.0 (/) X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: debbugs-submit-bounces@debbugs.gnu.org Sender: "Debbugs-submit" X-Spam-Score: -1.0 (-) 21 sep. 2023 kl. 20.08 skrev Stefan Monnier : > In any case, I pushed a variant of the last patch to `master` and > I think the case is now closed. We may want to revisit it, presumably > by really keeping track of the all visited nodes, but this seems to work > well for now and I'm confident that it is safe (regardless of the shape > of the bytecode, it should always terminate and it should never apply > the optimization if it's incorrect, and with the shape of the bytecode > we currently produce it does correctly apply the optimization in the cases > I checked). Good, thank you.