From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!not-for-mail From: Shigeru Fukaya Newsgroups: gmane.emacs.bugs Subject: bug#15998: 24.3; forward-sexp (scan-sexps) doesn't do well with some SEXPs Date: Tue, 03 Dec 2013 18:47:24 +0900 Message-ID: <8CEF00CAB165Bshigeru.fukaya@gmail.com> References: <6CEED119478A9shigeru.fukaya@gmail.com> <7CEEED1244961shigeru.fukaya@gmail.com> NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="Boundary-NX99F4nDXKUSaYmLWr4ME" X-Trace: ger.gmane.org 1386064096 31565 80.91.229.3 (3 Dec 2013 09:48:16 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Tue, 3 Dec 2013 09:48:16 +0000 (UTC) To: Stefan Monnier , 15998@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Tue Dec 03 10:48:21 2013 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by plane.gmane.org with esmtp (Exim 4.69) (envelope-from ) id 1Vnmaa-0005Sl-59 for geb-bug-gnu-emacs@m.gmane.org; Tue, 03 Dec 2013 10:48:20 +0100 Original-Received: from localhost ([::1]:41310 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VnmaZ-0002Ja-RR for geb-bug-gnu-emacs@m.gmane.org; Tue, 03 Dec 2013 04:48:19 -0500 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:59616) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VnmaP-0002G5-OZ for bug-gnu-emacs@gnu.org; Tue, 03 Dec 2013 04:48:17 -0500 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1VnmaI-0001Gt-CU for bug-gnu-emacs@gnu.org; Tue, 03 Dec 2013 04:48:09 -0500 Original-Received: from debbugs.gnu.org ([140.186.70.43]:41506) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1VnmaI-0001Gc-89 for bug-gnu-emacs@gnu.org; Tue, 03 Dec 2013 04:48:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.80) (envelope-from ) id 1VnmaH-0006Qr-Ph for bug-gnu-emacs@gnu.org; Tue, 03 Dec 2013 04:48:01 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Shigeru Fukaya Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Tue, 03 Dec 2013 09:48:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 15998 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 15998-submit@debbugs.gnu.org id=B15998.138606405024679 (code B ref 15998); Tue, 03 Dec 2013 09:48:01 +0000 Original-Received: (at 15998) by debbugs.gnu.org; 3 Dec 2013 09:47:30 +0000 Original-Received: from localhost ([127.0.0.1]:55525 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1VnmZl-0006Px-Pr for submit@debbugs.gnu.org; Tue, 03 Dec 2013 04:47:30 -0500 Original-Received: from mail-pb0-f42.google.com ([209.85.160.42]:50813) by debbugs.gnu.org with esmtp (Exim 4.80) (envelope-from ) id 1VnmZi-0006Pk-US for 15998@debbugs.gnu.org; Tue, 03 Dec 2013 04:47:27 -0500 Original-Received: by mail-pb0-f42.google.com with SMTP id uo5so20743551pbc.15 for <15998@debbugs.gnu.org>; Tue, 03 Dec 2013 01:47:20 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:subject:date:mime-version:content-type:in-reply-to :references:message-id; bh=zctv0btNvDqw4TraktwO8L1AI/R3i3jlm2vnagTuMlA=; b=QBOAdjhK873ck8c8zpBfAenXKbQkDgnKURA1hYrMZXNteCE1HF01o32xSxXEUc58Es 6CqNP5VKrnb0bjdILx3nQxdByDzXAzwIb8/rVKCCSj9T3hCsrDrFcumS7gwwxtpTlw2q PBi+mXAydyIJP4jOE5uP8znaWr4xFdNER06HH2cCfquOX1M/H86GXouWPT04bYMwhLEg /t3J1ROZNr/t3D6PPjdfd2Vd5UHFXwL6v2VS/qNnNEtk8KMXQVJVVFgpNC5K7MkyGpoV YW2hVv8mGJTbUU1CmJpTpN1KoFoNzfW9V1+NMrj6ZfmbZ+6xUaT/AxpXI1fyalfteMhu 6/Vg== X-Received: by 10.66.192.198 with SMTP id hi6mr74325709pac.87.1386064040462; Tue, 03 Dec 2013 01:47:20 -0800 (PST) Original-Received: from gmail.com (115x125x38x6.ap115.ftth.ucom.ne.jp. [115.125.38.6]) by mx.google.com with ESMTPSA id rz6sm133489327pab.22.2013.12.03.01.47.18 for (version=TLSv1 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Tue, 03 Dec 2013 01:47:19 -0800 (PST) X-Mailer: HidemaruMail 6.18 (WinNT,602) In-Reply-To: X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.15 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 3.x X-Received-From: 140.186.70.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Xref: news.gmane.org gmane.emacs.bugs:81297 Archived-At: --Boundary-NX99F4nDXKUSaYmLWr4ME Content-Type: text/plain; charset=us-ascii Content-Transfer-Encoding: 7bit >> 2. ^[...] ^^[...] char table Sorry, but it's #^[...] #^^[...] >> 4. $! beginning of executable file >I don't know what 4 is. Or do you mean "#!" as the first two chars of >the file? We could setup syntax-propertize-function to mark them as >comments, indeed. It is just magic number of unix files. (read-from-string "#!/usr/local/bin/emacs\n(pwd)") --> ((pwd) . 28) see read1 in lread.c. And, my changes to the latest emacs are, 1) add `scan-sexps' an optional argument, `elisp-syntax'. 2) pass `scan_lists' the optional argument. 3) `scan_lists' handles elisp specific handling when the argument is set. 4) `forward-sexp' calls `scan-sexps' with the optional argument non-nil value when the current buffer's mode is elisp related mode. Anso, do additional movement for labels of cyclic object, as is for prefixes. (Is a change in the last sentence above unnecessary?) As a result, I seems doing expectedly on such an object as below. (a b #&3"d" #&99"ZZZ" #1=a #2= b #1# #3= #40= (c) #40# #2# #10= #&10"A" #s(dummy 1 2 3) #^^[dummy 1 2 3] #^[dummy 1 2 3] ## xyz) Regards, Shigeru --------------------- ChangeLog Add support for elisp syntax of bool vector, label of cyclic object, hash table, char-table and empty symbol. * lisp.el (forward-sexp) * syntax.c (scan_lists, Fscan_lists, Fscan_sexps) lisp.el (defun forward-sexp (&optional arg) "Move forward across one balanced expression (sexp). With ARG, do it that many times. Negative arg -N means move backward across N balanced expressions. This command assumes point is not in a string or comment. Calls `forward-sexp-function' to do the work, if that is non-nil." (interactive "^p") (let ((elisp (memq major-mode '(emacs-lisp-mode ;;eshell-mode inferior-emacs-lisp-mode lisp-interaction-mode)))) (or arg (setq arg 1)) (if forward-sexp-function (funcall forward-sexp-function arg) (goto-char (or (scan-sexps (point) arg elisp) (buffer-end arg))) (when (< arg 0) (when elisp (save-match-data (while (re-search-backward "#[0-9]+=\\s-*\\=" nil t)))) (backward-prefix-chars))))) --Boundary-NX99F4nDXKUSaYmLWr4ME Content-Type: application/octet-stream; name="syntax.patch" Content-Disposition: attachment; filename="syntax.patch" Content-Transfer-Encoding: base64 KioqIHN5bnRheC5jLm9yaWcJTW9uIFNlcCAyMyAxNTozNzo1NCAyMDEzCi0tLSBzeW50YXgu YwlUdWUgRGVjICAzIDA3OjQ1OjE3IDIwMTMKKioqKioqKioqKioqKioqCioqKiAxNzksMTg1 ICoqKioKICAKICBzdGF0aWMgTGlzcF9PYmplY3Qgc2tpcF9jaGFycyAoYm9vbCwgTGlzcF9P YmplY3QsIExpc3BfT2JqZWN0LCBib29sKTsKICBzdGF0aWMgTGlzcF9PYmplY3Qgc2tpcF9z eW50YXhlcyAoYm9vbCwgTGlzcF9PYmplY3QsIExpc3BfT2JqZWN0KTsKISBzdGF0aWMgTGlz cF9PYmplY3Qgc2Nhbl9saXN0cyAoRU1BQ1NfSU5ULCBFTUFDU19JTlQsIEVNQUNTX0lOVCwg Ym9vbCk7CiAgc3RhdGljIHZvaWQgc2Nhbl9zZXhwc19mb3J3YXJkIChzdHJ1Y3QgbGlzcF9w YXJzZV9zdGF0ZSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRyZGlm Zl90LCBwdHJkaWZmX3QsIHB0cmRpZmZfdCwgRU1BQ1NfSU5ULAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYm9vbCwgTGlzcF9PYmplY3QsIGludCk7Ci0tLSAxNzksMTg1 IC0tLS0KICAKICBzdGF0aWMgTGlzcF9PYmplY3Qgc2tpcF9jaGFycyAoYm9vbCwgTGlzcF9P YmplY3QsIExpc3BfT2JqZWN0LCBib29sKTsKICBzdGF0aWMgTGlzcF9PYmplY3Qgc2tpcF9z eW50YXhlcyAoYm9vbCwgTGlzcF9PYmplY3QsIExpc3BfT2JqZWN0KTsKISBzdGF0aWMgTGlz cF9PYmplY3Qgc2Nhbl9saXN0cyAoRU1BQ1NfSU5ULCBFTUFDU19JTlQsIEVNQUNTX0lOVCwg Ym9vbCwgYm9vbCk7CiAgc3RhdGljIHZvaWQgc2Nhbl9zZXhwc19mb3J3YXJkIChzdHJ1Y3Qg bGlzcF9wYXJzZV9zdGF0ZSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg cHRyZGlmZl90LCBwdHJkaWZmX3QsIHB0cmRpZmZfdCwgRU1BQ1NfSU5ULAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgYm9vbCwgTGlzcF9PYmplY3QsIGludCk7CioqKioq KioqKioqKioqKgoqKiogMjU2MiwyNTY5ICoqKioKICAgIHJldHVybiBBU0NJSV9DSEFSX1Ag KGMpIHx8ICFtdWx0aWJ5dGVfc3ltYm9sX3AgPyBTWU5UQVggKGMpIDogU3N5bWJvbDsKICB9 CiAgCiAgc3RhdGljIExpc3BfT2JqZWN0CiEgc2Nhbl9saXN0cyAoRU1BQ1NfSU5UIGZyb20s IEVNQUNTX0lOVCBjb3VudCwgRU1BQ1NfSU5UIGRlcHRoLCBib29sIHNleHBmbGFnKQogIHsK ICAgIExpc3BfT2JqZWN0IHZhbDsKICAgIHB0cmRpZmZfdCBzdG9wID0gY291bnQgPiAwID8g WlYgOiBCRUdWOwotLS0gMjU2MiwyNTgyIC0tLS0KICAgIHJldHVybiBBU0NJSV9DSEFSX1Ag KGMpIHx8ICFtdWx0aWJ5dGVfc3ltYm9sX3AgPyBTWU5UQVggKGMpIDogU3N5bWJvbDsKICB9 CiAgCisgLyogRUxJU1BGTEFHIHN0YW5kcyBmb3IgZW1hY3MgbGlzcCBzeW50YXguCisgICAg RUxJU1BGTEFHIHdvbid0IGJlIHRydWUgd2l0aG91dCBTRVhQRkxBRyBpcyB0cnVlLgorICAg IFdoZW4gRUxJU1BGTEFHIGlzIHRydWUsIHNwZWNpYWwgc2Nhbiwgb3ZlciBzeW50YXggdGFi bGUsIGlzIGRvbmUuCisgICAgVGhleSBhcmU6OworICAgICBhLiAjTj0gLS0gbGFiZWwgb2Yg Y3ljbGljIG9iamVjdAorICAgICBiLiAjJk4iUyIgLS0gYm9vbCB2ZWN0b3IKKyAgICAgYy4g I3MoLi4uKSAtLSBoYXNoIHRhYmxlCisgICAgIGQuICNeWy4uLl0gLS0gY2hhci10YWJsZQor ICAgICBlLiAjXl5bLi4uXSAtLSBzdWItY2hhci10YWJsZQorICAgICBmLiAjIyAtLSBlbXB0 eSBzeW1ib2wKKyAgICB3aGVyZSBOIGlzIGRpZ2l0cywgIlMiIGlzIHN0cmluZywgLi4uIGlz IHNleHBzLgorICAgIE5vdGUgbGFiZWwgb2YgY3ljbGljIG9iamVjdCBpcyBub3Qgc2V4cCwg dGhlcmVmb3JlIHNraXBwZWQuICovCisgCiAgc3RhdGljIExpc3BfT2JqZWN0CiEgc2Nhbl9s aXN0cyAoRU1BQ1NfSU5UIGZyb20sIEVNQUNTX0lOVCBjb3VudCwgRU1BQ1NfSU5UIGRlcHRo LCBib29sIHNleHBmbGFnLCBib29sIGVsaXNwZmxhZykKICB7CiAgICBMaXNwX09iamVjdCB2 YWw7CiAgICBwdHJkaWZmX3Qgc3RvcCA9IGNvdW50ID4gMCA/IFpWIDogQkVHVjsKKioqKioq KioqKioqKioqCioqKiAyNTkzLDI1OTggKioqKgotLS0gMjYwNiwyNjE0IC0tLS0KICAgIGlt bWVkaWF0ZV9xdWl0ID0gMTsKICAgIFFVSVQ7CiAgCisgICAvKiBmb3IgaW5zdXJhbmNlLiBl bGlzcGZsYWcgaW1wbGllcyBzZXhwZmxhZyBiZWxvdyAqLworICAgaWYgKCFzZXhwZmxhZykg ZWxpc3BmbGFnID0gMDsKKyAKICAgIFNFVFVQX1NZTlRBWF9UQUJMRSAoZnJvbSwgY291bnQp OwogICAgd2hpbGUgKGNvdW50ID4gMCkKICAgICAgewoqKioqKioqKioqKioqKioKKioqIDI2 MzMsMjYzOCAqKioqCi0tLSAyNjQ5LDI3NTYgLS0tLQogIAkgIGlmIChwcmVmaXgpCiAgCSAg ICBjb250aW51ZTsKICAKKyAJICAvKiBjaGVjayBlbGlzcCBzcGVjaWFsIHN5bnRheCBzdGFy dGluZyB3aXRoICcjJy4KKyAJICAgICBuZWVkIGF0IGxlYXN0IG9uZSBjaGFyLiAqLworIAkg IGlmIChjID09ICcjJyAmJiAhZGVwdGggJiYgZWxpc3BmbGFnICYmIGZyb20gPCBzdG9wKQor IAkgICAgeworIAkgICAgICBFTUFDU19JTlQgZiA9IGZyb207CisgCSAgICAgIHB0cmRpZmZf dCBiID0gZnJvbV9ieXRlOworIAkgICAgICBjID0gRkVUQ0hfQ0hBUl9BU19NVUxUSUJZVEUg KGIpOworIAkgICAgICBzd2l0Y2ggKGMpCisgCQl7CisgCQljYXNlICcwJzogY2FzZSAnMSc6 IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6CisgCQljYXNlICc1JzogY2FzZSAnNic6 IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6CisgCQkgIC8qICNOPSAqLworIAkJICBk bworIAkJICAgIHsKKyAJCSAgICAgIGlmIChmID09IHN0b3ApIGJyZWFrOworIAkJICAgICAg SU5DX0JPVEggKGYsIGIpOworIAkJICAgICAgYyA9IEZFVENIX0NIQVJfQVNfTVVMVElCWVRF IChiKTsKKyAJCSAgICB9IHdoaWxlIChjID49ICcwJyAmJiBjIDw9ICc5Jyk7CisgCQkgIGlm IChjID09ICc9JykKKyAJCSAgICB7CisgCQkgICAgICBJTkNfQk9USCAoZiwgYik7CisgCQkg ICAgICBmcm9tID0gZjsKKyAJCSAgICAgIGZyb21fYnl0ZSA9IGI7CisgCQkgICAgICBjb250 aW51ZTsJLyogc2tpcCB0aGlzIGxhYmVsICovCisgCQkgICAgfQorIAkJICBicmVhazsKKyAK KyAJCWNhc2UgJyYnOgorIAkJICAvKiAjJk4iWCIgKi8KKyAJCSAgaWYgKGYgKyAyIDwgc3Rv cCkKKyAJCSAgICB7CisgCQkgICAgICBJTkNfQk9USCAoZiwgYik7CisgCQkgICAgICBjID0g RkVUQ0hfQ0hBUl9BU19NVUxUSUJZVEUgKGIpOworIAkJICAgICAgaWYgKGMgPj0gJzAnICYm IGMgPD0gJzknKQorIAkJCXsKKyAJCQkgIGRvCisgCQkJICAgIHsKKyAJCQkgICAgICBpZiAo ZiA9PSBzdG9wKSBicmVhazsKKyAJCQkgICAgICBJTkNfQk9USCAoZiwgYik7CisgCQkJICAg ICAgYyA9IEZFVENIX0NIQVJfQVNfTVVMVElCWVRFIChiKTsKKyAJCQkgICAgfSB3aGlsZSAo YyA+PSAnMCcgJiYgYyA8PSAnOScpOworIAkJCSAgaWYgKGMgPT0gJyInKQorIAkJCSAgICB7 CisgCQkJICAgICAgY29kZSA9IFNzdHJpbmc7CisgCQkJICAgICAgSU5DX0JPVEggKGYsIGIp OworIAkJCSAgICAgIGZyb20gPSBmOworIAkJCSAgICAgIGZyb21fYnl0ZSA9IGI7CisgCQkJ ICAgICAgLyogbmV4dCBpbiBTc3RyaW5nICovCisgCQkJICAgIH0KKyAJCQl9CisgCQkgICAg fQorIAkJICBicmVhazsKKyAKKyAJCWNhc2UgJ3MnOgorIAkJICAvKiAjcyguLi4pICovCisg CQkgIGlmIChmICsgMSA8IHN0b3ApCisgCQkgICAgeworIAkJICAgICAgSU5DX0JPVEggKGYs IGIpOworIAkJICAgICAgYyA9IEZFVENIX0NIQVJfQVNfTVVMVElCWVRFIChiKTsKKyAJCSAg ICAgIGlmIChjID09ICcoJykKKyAJCQl7CisgCQkJICBjb2RlID0gU29wZW47CisgCQkJICBJ TkNfQk9USCAoZiwgYik7CisgCQkJICBmcm9tID0gZjsKKyAJCQkgIGZyb21fYnl0ZSA9IGI7 CisgCQkJICAvKiBuZXh0IGluIFNvcGVuICovCisgCQkJfQorIAkJICAgIH0KKyAJCSAgYnJl YWs7CisgCisgCQljYXNlICdeJzoKKyAJCSAgLyogI15bLi4uXSAjXl5bLi4uXSovCisgCQkg IGlmIChmICsgMSA8IHN0b3ApCisgCQkgICAgeworIAkJICAgICAgSU5DX0JPVEggKGYsIGIp OworIAkJICAgICAgYyA9IEZFVENIX0NIQVJfQVNfTVVMVElCWVRFIChiKTsKKyAJCSAgICAg IGlmIChjID09ICdeJyAmJiBmICsgMSA8IHN0b3ApCisgCQkJeworIAkJCSAgSU5DX0JPVEgg KGYsIGIpOworIAkJCSAgYyA9IEZFVENIX0NIQVJfQVNfTVVMVElCWVRFIChiKTsKKyAJCQl9 CisgCQkgICAgICBpZiAoYyA9PSAnWycpCisgCQkJeworIAkJCSAgY29kZSA9IFNvcGVuOwor IAkJCSAgSU5DX0JPVEggKGYsIGIpOworIAkJCSAgZnJvbSA9IGY7CisgCQkJICBmcm9tX2J5 dGUgPSBiOworIAkJCSAgLyogbmV4dCBpbiBTb3BlbiAqLworIAkJCX0KKyAJCSAgICB9Cisg CQkgIGJyZWFrOworIAorIAkJY2FzZSAnIyc6CisgCQkgIC8qICMjICovCisgCQkgIElOQ19C T1RIIChmLCBiKTsKKyAJCSAgZnJvbSA9IGY7CisgCQkgIGZyb21fYnl0ZSA9IGI7CisgCQkg IGlmIChkZXB0aCkgY29udGludWU7CisgCQkgIGdvdG8gZG9uZTsKKyAJCX0KKyAJICAgIH0K KyAKICAJICBzd2l0Y2ggKGNvZGUpCiAgCSAgICB7CiAgCSAgICBjYXNlIFNlc2NhcGU6Cioq KioqKioqKioqKioqKgoqKiogMjgwNSwyODEwICoqKioKLS0tIDI5MjMsMjk2NSAtLS0tCiAg CSAgICB9CiAgCSAgZWxzZSBpZiAoU1lOVEFYX0ZMQUdTX1BSRUZJWCAoc3ludGF4KSkKICAJ ICAgIGNvbnRpbnVlOworIAkgIGVsc2UgaWYgKCFkZXB0aCAmJiBlbGlzcGZsYWcgJiYgZnJv bSA+IHN0b3ApCisgCSAgICB7CisgCSAgICAgIEVNQUNTX0lOVCBmID0gZnJvbTsKKyAJICAg ICAgcHRyZGlmZl90IGIgPSBmcm9tX2J5dGU7CisgCSAgICAgIGlmIChjID09ICc9JykKKyAJ CXsKKyAJCSAgLyogI049ICovCisgCQkgIERFQ19CT1RIIChmLCBiKTsKKyAJCSAgYyA9IEZF VENIX0NIQVJfQVNfTVVMVElCWVRFIChiKTsKKyAJCSAgaWYgKGMgPj0gJzAnICYmIGMgPD0g JzknKQorIAkJICAgIHsKKyAJCSAgICAgIGRvCisgCQkJeworIAkJCSAgaWYgKGYgPT0gc3Rv cCkgYnJlYWs7CisgCQkJICBERUNfQk9USCAoZiwgYik7CisgCQkJICBjID0gRkVUQ0hfQ0hB Ul9BU19NVUxUSUJZVEUgKGIpOworIAkJCX0gd2hpbGUgKGMgPj0gJzAnICYmIGMgPD0gJzkn KTsKKyAJCSAgICAgIGlmIChjID09ICcjJykKKyAJCQl7CisgCQkJICBmcm9tID0gZjsKKyAJ CQkgIGZyb21fYnl0ZSA9IGI7CisgCQkJICBjb250aW51ZTsgLyogc2tpcCB0aGlzIGxhYmVs ICovCisgCQkJfQorIAkJICAgIH0KKyAJCX0KKyAJICAgICAgZWxzZSBpZiAoYyA9PSAnIycp CisgCQl7CisgCQkgIC8qICMjICovCisgCQkgIERFQ19CT1RIIChmLCBiKTsKKyAJCSAgYyA9 IEZFVENIX0NIQVJfQVNfTVVMVElCWVRFIChiKTsKKyAJCSAgaWYgKGMgPT0gJyMnKSB7Cisg CQkgICAgZnJvbSA9IGY7CisgCQkgICAgZnJvbV9ieXRlID0gYjsKKyAJCSAgICBnb3RvIGRv bmUyOworIAkJICB9CisgCQl9CisgCSAgICB9CiAgCiAgCSAgc3dpdGNoIChjb2RlKQogIAkg ICAgewoqKioqKioqKioqKioqKioKKioqIDI4NjQsMjg2OSAqKioqCi0tLSAzMDE5LDMwNjkg LS0tLQogIAkgICAgICBicmVhazsKICAKICAJICAgIGNhc2UgU29wZW46CisgCSAgICAgIC8q IHNjYW4gYmFjayAjcygsICNeWywgI15eWyBhcyBpZiBwcmVmaXhlcy4KKyAJCSBuZWVkIGF0 IGxlYXN0IDIgY2hhcnMuICovCisgCSAgICAgIGlmIChkZXB0aCA9PSAxICYmIGVsaXNwZmxh ZyAmJiBmcm9tICsgMSA+IHN0b3ApCisgCQl7CisgCQkgIEVNQUNTX0lOVCBmID0gZnJvbTsK KyAJCSAgcHRyZGlmZl90IGIgPSBmcm9tX2J5dGU7CisgCQkgIGlmIChjID09ICcoJykKKyAJ CSAgICB7CisgCQkgICAgICAvKiAjcyguLi4pICovCisgCQkgICAgICBERUNfQk9USCAoZiwg Yik7CisgCQkgICAgICBjID0gRkVUQ0hfQ0hBUl9BU19NVUxUSUJZVEUgKGIpOworIAkJICAg ICAgaWYgKGMgPT0gJ3MnKQorIAkJCXsKKyAJCQkgIERFQ19CT1RIIChmLCBiKTsKKyAJCQkg IGMgPSBGRVRDSF9DSEFSX0FTX01VTFRJQllURSAoYik7CisgCQkJICBpZiAoYyA9PSAnIycp CisgCQkJICAgIHsKKyAJCQkgICAgICBmcm9tID0gZjsKKyAJCQkgICAgICBmcm9tX2J5dGUg PSBiOworIAkJCSAgICB9CisgCQkJfQorIAkJICAgIH0KKyAJCSAgZWxzZSBpZiAoYyA9PSAn WycpCisgCQkgICAgeworIAkJICAgICAgLyogI15bLi4uXSBvciAjXl5bLi4uXSAqLworIAkJ ICAgICAgREVDX0JPVEggKGYsIGIpOworIAkJICAgICAgYyA9IEZFVENIX0NIQVJfQVNfTVVM VElCWVRFIChiKTsKKyAJCSAgICAgIGlmIChjID09ICdeJykKKyAJCQl7CisgCQkJICBERUNf Qk9USCAoZiwgYik7CisgCQkJICBjID0gRkVUQ0hfQ0hBUl9BU19NVUxUSUJZVEUgKGIpOwor IAkJCSAgaWYgKGMgPT0gJ14nICYmIGYgPiBzdG9wKQorIAkJCSAgICB7CisgCQkJICAgICAg LyogI15eWy4uLl0gKi8KKyAJCQkgICAgICBERUNfQk9USCAoZiwgYik7CisgCQkJICAgICAg YyA9IEZFVENIX0NIQVJfQVNfTVVMVElCWVRFIChiKTsKKyAJCQkgICAgfQorIAkJCSAgaWYg KGMgPT0gJyMnKQorIAkJCSAgICB7CisgCQkJICAgICAgZnJvbSA9IGY7CisgCQkJICAgICAg ZnJvbV9ieXRlID0gYjsKKyAJCQkgICAgfQorIAkJCX0KKyAJCSAgICB9CisgCQl9CiAgCSAg ICBvcGVuMjoKICAJICAgICAgaWYgKCEtLWRlcHRoKSBnb3RvIGRvbmUyOwogIAkgICAgICBp ZiAoZGVwdGggPCBtaW5fZGVwdGgpCioqKioqKioqKioqKioqKgoqKiogMjkyMiwyOTI3ICoq KioKLS0tIDMxMjIsMzE1NiAtLS0tCiAgCQkJYnJlYWs7CiAgCQkgICAgfQogIAkJfQorIAor IAkgICAgICAvKiAjJk4iU1RSSU5HIiAqLworIAkgICAgICBpZiAoIWRlcHRoICYmIGVsaXNw ZmxhZyAmJiBmcm9tICsgMiA+IHN0b3ApCisgCQl7CisgCQkgIEVNQUNTX0lOVCBmID0gZnJv bTsKKyAJCSAgcHRyZGlmZl90IGIgPSBmcm9tX2J5dGU7CisgCQkgIERFQ19CT1RIIChmLCBi KTsKKyAJCSAgYyA9IEZFVENIX0NIQVJfQVNfTVVMVElCWVRFIChiKTsKKyAJCSAgaWYgKGMg Pj0gJzAnICYmIGMgPD0gJzknKQorIAkJICAgIHsKKyAJCSAgICAgIGRvCisgCQkJeworIAkJ CSAgaWYgKGYgPT0gc3RvcCkgYnJlYWs7CisgCQkJICBERUNfQk9USCAoZiwgYik7CisgCQkJ ICBjID0gRkVUQ0hfQ0hBUl9BU19NVUxUSUJZVEUgKGIpOworIAkJCX0gd2hpbGUgKGMgPj0g JzAnICYmIGMgPD0gJzknKTsKKyAJCSAgICAgIGlmIChjID09ICcmJyAmJiBmID4gc3RvcCkK KyAJCQl7CisgCQkJICBERUNfQk9USCAoZiwgYik7CisgCQkJICBjID0gRkVUQ0hfQ0hBUl9B U19NVUxUSUJZVEUgKGIpOworIAkJCSAgaWYgKGMgPT0gJyMnKQorIAkJCSAgICB7CisgCQkJ ICAgICAgZnJvbSA9IGY7CisgCQkJICAgICAgZnJvbV9ieXRlID0gYjsKKyAJCQkgICAgfQor IAkJCX0KKyAJCSAgICB9CisgCQl9CisgCiAgCSAgICAgIGlmICghZGVwdGggJiYgc2V4cGZs YWcpIGdvdG8gZG9uZTI7CiAgCSAgICAgIGJyZWFrOwogIAkgICAgZGVmYXVsdDoKKioqKioq KioqKioqKioqCioqKiAyOTc3LDI5ODggKioqKgogICAgQ0hFQ0tfTlVNQkVSIChjb3VudCk7 CiAgICBDSEVDS19OVU1CRVIgKGRlcHRoKTsKICAKISAgIHJldHVybiBzY2FuX2xpc3RzIChY SU5UIChmcm9tKSwgWElOVCAoY291bnQpLCBYSU5UIChkZXB0aCksIDApOwogIH0KICAKISBE RUZVTiAoInNjYW4tc2V4cHMiLCBGc2Nhbl9zZXhwcywgU3NjYW5fc2V4cHMsIDIsIDIsIDAs CiAgICAgICAgIGRvYzogLyogU2NhbiBmcm9tIGNoYXJhY3RlciBudW1iZXIgRlJPTSBieSBD T1VOVCBiYWxhbmNlZCBleHByZXNzaW9ucy4KICBJZiBDT1VOVCBpcyBuZWdhdGl2ZSwgc2Nh biBiYWNrd2FyZHMuCiAgUmV0dXJucyB0aGUgY2hhcmFjdGVyIG51bWJlciBvZiB0aGUgcG9z aXRpb24gdGh1cyBmb3VuZC4KICAKICBDb21tZW50cyBhcmUgaWdub3JlZCBpZiBgcGFyc2Ut c2V4cC1pZ25vcmUtY29tbWVudHMnIGlzIG5vbi1uaWwuCi0tLSAzMjA2LDMyMTkgLS0tLQog ICAgQ0hFQ0tfTlVNQkVSIChjb3VudCk7CiAgICBDSEVDS19OVU1CRVIgKGRlcHRoKTsKICAK ISAgIHJldHVybiBzY2FuX2xpc3RzIChYSU5UIChmcm9tKSwgWElOVCAoY291bnQpLCBYSU5U IChkZXB0aCksIDAsIDApOwogIH0KICAKISBERUZVTiAoInNjYW4tc2V4cHMiLCBGc2Nhbl9z ZXhwcywgU3NjYW5fc2V4cHMsIDIsIDMsIDAsCiAgICAgICAgIGRvYzogLyogU2NhbiBmcm9t IGNoYXJhY3RlciBudW1iZXIgRlJPTSBieSBDT1VOVCBiYWxhbmNlZCBleHByZXNzaW9ucy4K ICBJZiBDT1VOVCBpcyBuZWdhdGl2ZSwgc2NhbiBiYWNrd2FyZHMuCisgSWYgb3B0aW9uYWwg RUxJU1AtU1lOVEFYIGlzIG5vbi1uaWwsIGhhbmRsZSBlbGlzcCBzcGVjaWZpYyBzeW50YXgg YXMgYm9vbCB2ZWN0b3IsCisgbGFiZWwgb2YgY3ljbGljIG9iamVjdCwgaGFzaCB0YWJsZSwg Y2hhci10YWJsZSwgZW1wdHkgc3ltYm9sLgogIFJldHVybnMgdGhlIGNoYXJhY3RlciBudW1i ZXIgb2YgdGhlIHBvc2l0aW9uIHRodXMgZm91bmQuCiAgCiAgQ29tbWVudHMgYXJlIGlnbm9y ZWQgaWYgYHBhcnNlLXNleHAtaWdub3JlLWNvbW1lbnRzJyBpcyBub24tbmlsLgoqKioqKioq KioqKioqKioKKioqIDI5OTEsMzAwMiAqKioqCiAgaW4gdGhlIG1pZGRsZSBvZiBhIHBhcmVu dGhldGljYWwgZ3JvdXBpbmcsIGFuIGVycm9yIGlzIHNpZ25hbGVkLgogIElmIHRoZSBiZWdp bm5pbmcgb3IgZW5kIGlzIHJlYWNoZWQgYmV0d2VlbiBncm91cGluZ3MKICBidXQgYmVmb3Jl IGNvdW50IGlzIHVzZWQgdXAsIG5pbCBpcyByZXR1cm5lZC4gICovKQohICAgKExpc3BfT2Jq ZWN0IGZyb20sIExpc3BfT2JqZWN0IGNvdW50KQogIHsKICAgIENIRUNLX05VTUJFUiAoZnJv bSk7CiAgICBDSEVDS19OVU1CRVIgKGNvdW50KTsKICAKISAgIHJldHVybiBzY2FuX2xpc3Rz IChYSU5UIChmcm9tKSwgWElOVCAoY291bnQpLCAwLCAxKTsKICB9CiAgCiAgREVGVU4gKCJi YWNrd2FyZC1wcmVmaXgtY2hhcnMiLCBGYmFja3dhcmRfcHJlZml4X2NoYXJzLCBTYmFja3dh cmRfcHJlZml4X2NoYXJzLAotLS0gMzIyMiwzMjMzIC0tLS0KICBpbiB0aGUgbWlkZGxlIG9m IGEgcGFyZW50aGV0aWNhbCBncm91cGluZywgYW4gZXJyb3IgaXMgc2lnbmFsZWQuCiAgSWYg dGhlIGJlZ2lubmluZyBvciBlbmQgaXMgcmVhY2hlZCBiZXR3ZWVuIGdyb3VwaW5ncwogIGJ1 dCBiZWZvcmUgY291bnQgaXMgdXNlZCB1cCwgbmlsIGlzIHJldHVybmVkLiAgKi8pCiEgICAo TGlzcF9PYmplY3QgZnJvbSwgTGlzcF9PYmplY3QgY291bnQsIExpc3BfT2JqZWN0IGVsaXNw X3N5bnRheCkKICB7CiAgICBDSEVDS19OVU1CRVIgKGZyb20pOwogICAgQ0hFQ0tfTlVNQkVS IChjb3VudCk7CiAgCiEgICByZXR1cm4gc2Nhbl9saXN0cyAoWElOVCAoZnJvbSksIFhJTlQg KGNvdW50KSwgMCwgMSwgIU5JTFAgKGVsaXNwX3N5bnRheCkpOwogIH0KICAKICBERUZVTiAo ImJhY2t3YXJkLXByZWZpeC1jaGFycyIsIEZiYWNrd2FyZF9wcmVmaXhfY2hhcnMsIFNiYWNr d2FyZF9wcmVmaXhfY2hhcnMsCg== --Boundary-NX99F4nDXKUSaYmLWr4ME--