From mboxrd@z Thu Jan 1 00:00:00 1970 From: Nathaniel Flath Subject: [PATH] Speedups to org-table-recalculate Date: Tue, 29 Jul 2014 13:03:58 -0700 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=089e01538baa422ff804ff5a8a78 Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:50381) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XCDcx-0000HL-Sh for emacs-orgmode@gnu.org; Tue, 29 Jul 2014 16:04:04 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XCDcu-0006tM-0c for emacs-orgmode@gnu.org; Tue, 29 Jul 2014 16:04:03 -0400 Received: from mail-oi0-x234.google.com ([2607:f8b0:4003:c06::234]:56222) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XCDct-0006tF-PA for emacs-orgmode@gnu.org; Tue, 29 Jul 2014 16:03:59 -0400 Received: by mail-oi0-f52.google.com with SMTP id h136so169473oig.39 for ; Tue, 29 Jul 2014 13:03:58 -0700 (PDT) List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org Sender: emacs-orgmode-bounces+geo-emacs-orgmode=m.gmane.org@gnu.org To: org-mode List --089e01538baa422ff804ff5a8a78 Content-Type: multipart/alternative; boundary=089e01538baa422fe804ff5a8a76 --089e01538baa422fe804ff5a8a76 Content-Type: text/plain; charset=UTF-8 This patch speeds up org-table-recalculate by removing all 'message' function calls. Additionally adds an early check for whether there are any formulas and only executes the rest of the function if so. --089e01538baa422fe804ff5a8a76 Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable
This patch speeds up org-table-recalculate by removing all= 'message' function calls. =C2=A0Additionally adds an early check f= or whether there are any formulas and only executes the rest of the functio= n if so.
--089e01538baa422fe804ff5a8a76-- --089e01538baa422ff804ff5a8a78 Content-Type: application/octet-stream; name="org-table-speedup.patch" Content-Disposition: attachment; filename="org-table-speedup.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hy7nk3d00 ZGlmZiAtLWdpdCBhL2xpc3Avb3JnLXRhYmxlLmVsIGIvbGlzcC9vcmctdGFibGUuZWwKaW5kZXgg YmMzMmM0NS4uZjkxMmJjYyAxMDA2NDQKLS0tIGEvbGlzcC9vcmctdGFibGUuZWwKKysrIGIvbGlz cC9vcmctdGFibGUuZWwKQEAgLTQyLDcgKzQyLDcgQEAKIAkJICAoc3RyaW5nIGJhY2tlbmQgJm9w dGlvbmFsIGJvZHktb25seSBleHQtcGxpc3QpKQogKGRlY2xhcmUtZnVuY3Rpb24gYWEydSAiZXh0 OmFzY2lpLWFydC10by11bmljb2RlIiAoKSkKIChkZWNsYXJlLWZ1bmN0aW9uIGNhbGMtZXZhbCAi Y2FsYyIgKHN0ciAmb3B0aW9uYWwgc2VwYXJhdG9yICZyZXN0IGFyZ3MpKQotCQkgIAorCiAoZGVm dmFyIG9yZ3RibC1tb2RlKSA7IGRlZmluZWQgYmVsb3cKIChkZWZ2YXIgb3JndGJsLW1vZGUtbWVu dSkgOyBkZWZpbmVkIHdoZW4gb3JndGJsIG1vZGUgZ2V0IGluaXRpYWxpemVkCiAoZGVmdmFyIGNv bnN0YW50cy11bml0LXN5c3RlbSkKQEAgLTI3NjgsNyArMjc2OCw3IEBAIG5vdCBvdmVyd3JpdGUg dGhlIHN0b3JlZCBvbmUuIgogCSAgICAodXNlci1lcnJvciAiSW52YWxpZCBmaWVsZCBzcGVjaWZp ZXIgXCIlc1wiIgogCQkJKG1hdGNoLXN0cmluZyAwIGZvcm0pKSkKIAkgIChzZXRxIGZvcm0gKHJl cGxhY2UtbWF0Y2ggcmVwbCB0IHQgZm9ybSkpKQotCQorCiAJKGlmIGxpc3BwCiAJICAgIChzZXRx IGV2IChjb25kaXRpb24tY2FzZSBuaWwKIAkJCSAoZXZhbCAoZXZhbCAocmVhZCBmb3JtKSkpCkBA IC0zMDc0LDExOSArMzA3NCwxMTIgQEAga25vd24gdGhhdCB0aGUgdGFibGUgd2lsbCBiZSByZWFs aWduZWQgYSBsaXR0bGUgbGF0ZXIgYW55d2F5LiIKIAkgICBzZWVuLWZpZWxkcyBsaHMxCiAJICAg YmVnIGVuZCBlbnRyeSBlcWxudW0gZXFsbmFtZSBlcWxuYW1lMSBlcWwgKGNudCAwKSBlcSBhIG5h bWUgbmFtZTEpCiAgICAgICA7OyBJbnNlcnQgY29uc3RhbnRzIGluIGFsbCBmb3JtdWxhcwotICAg ICAgKHNldHEgZXFsaXN0Ci0JICAgIChtYXBjYXIgKGxhbWJkYSAoeCkKLQkJICAgICAgKGlmIChz dHJpbmctbWF0Y2ggIl5ALT9JKyIgKGNhciB4KSkKLQkJCSAgKHVzZXItZXJyb3IgIkNhbid0IGFz c2lnbiB0byBobGluZSByZWxhdGl2ZSByZWZlcmVuY2UiKSkKLQkJICAgICAgKHdoZW4gKHN0cmlu Zy1tYXRjaCAiXFxgJFs8Pl0iIChjYXIgeCkpCi0JCQkoc2V0cSBsaHMxIChjYXIgeCkpCi0JCQko c2V0cSB4IChjb25zIChzdWJzdHJpbmcKLQkJCQkgICAgICAgKG9yZy10YWJsZS1mb3JtdWxhLWhh bmRsZS1maXJzdC9sYXN0LXJjCi0JCQkJCShjYXIgeCkpIDEpCi0JCQkJICAgICAgKGNkciB4KSkp Ci0JCQkoaWYgKGFzc29jIChjYXIgeCkgZXFsaXN0MSkKLQkJCSAgICAodXNlci1lcnJvciAiXCIl cz1cIiBmb3JtdWxhIHRyaWVzIHRvIG92ZXJ3cml0ZSBleGlzdGluZyBmb3JtdWxhIGZvciBjb2x1 bW4gJXMiCi0JCQkJICAgbGhzMSAoY2FyIHgpKSkpCi0JCSAgICAgIChjb25zCi0JCSAgICAgICAo b3JnLXRhYmxlLWZvcm11bGEtaGFuZGxlLWZpcnN0L2xhc3QtcmMgKGNhciB4KSkKLQkJICAgICAg IChvcmctdGFibGUtZm9ybXVsYS1zdWJzdGl0dXRlLW5hbWVzCi0JCQkob3JnLXRhYmxlLWZvcm11 bGEtaGFuZGxlLWZpcnN0L2xhc3QtcmMgKGNkciB4KSkpKSkKLQkJICAgIGVxbGlzdCkpCi0gICAg ICA7OyBTcGxpdCB0aGUgZXF1YXRpb24gbGlzdAotICAgICAgKHdoaWxlIChzZXRxIGVxIChwb3Ag ZXFsaXN0KSkKLQkoaWYgKDw9IChzdHJpbmctdG8tY2hhciAoY2FyIGVxKSkgPzkpCi0JICAgIChw dXNoIGVxIGVxbG51bSkKLQkgIChwdXNoIGVxIGVxbG5hbWUpKSkKLSAgICAgIChzZXRxIGVxbG51 bSAobnJldmVyc2UgZXFsbnVtKSBlcWxuYW1lIChucmV2ZXJzZSBlcWxuYW1lKSkKLSAgICAgIDs7 IEV4cGFuZCByYW5nZXMgaW4gbGhzIG9mIGZvcm11bGFzCi0gICAgICAoc2V0cSBlcWxuYW1lIChv cmctdGFibGUtZXhwYW5kLWxocy1yYW5nZXMgZXFsbmFtZSkpCi0KLSAgICAgIDs7IEdldCB0aGUg Y29ycmVjdCBsaW5lIHJhbmdlIHRvIHByb2Nlc3MKLSAgICAgIChpZiBhbGwKLQkgIChwcm9nbgot CSAgICAoc2V0cSBlbmQgKG1vdmUtbWFya2VyIChtYWtlLW1hcmtlcikgKDErIChvcmctdGFibGUt ZW5kKSkpKQotCSAgICAoZ290by1jaGFyIChzZXRxIGJlZyAob3JnLXRhYmxlLWJlZ2luKSkpCi0J ICAgIChpZiAocmUtc2VhcmNoLWZvcndhcmQgb3JnLXRhYmxlLWNhbGN1bGF0ZS1tYXJrLXJlZ2V4 cCBlbmQgdCkKLQkJOzsgVGhpcyBpcyBhIHRhYmxlIHdpdGggbWFya2VkIGxpbmVzLCBjb21wdXRl IHNlbGVjdGVkIGxpbmVzCi0JCShzZXRxIGxpbmUtcmUgb3JnLXRhYmxlLXJlY2FsY3VsYXRlLXJl Z2V4cCkKLQkgICAgICA7OyBNb3ZlIGZvcndhcmQgdG8gdGhlIGZpcnN0IG5vbi1oZWFkZXIgbGlu ZQotCSAgICAgIChpZiAoYW5kIChyZS1zZWFyY2gtZm9yd2FyZCBvcmctdGFibGUtZGF0YWxpbmUt cmVnZXhwIGVuZCB0KQotCQkgICAgICAgKHJlLXNlYXJjaC1mb3J3YXJkIG9yZy10YWJsZS1obGlu ZS1yZWdleHAgZW5kIHQpCi0JCSAgICAgICAocmUtc2VhcmNoLWZvcndhcmQgb3JnLXRhYmxlLWRh dGFsaW5lLXJlZ2V4cCBlbmQgdCkpCi0JCSAgKHNldHEgYmVnIChtYXRjaC1iZWdpbm5pbmcgMCkp Ci0JCW5pbCkpKSA7OyBqdXN0IGxlYXZlIGJlZyB3aGVyZSBpdCBpcwotCShzZXRxIGJlZyAocG9p bnQtYXQtYm9sKQotCSAgICAgIGVuZCAobW92ZS1tYXJrZXIgKG1ha2UtbWFya2VyKSAoMSsgKHBv aW50LWF0LWVvbCkpKSkpCi0gICAgICAoZ290by1jaGFyIGJlZykKLSAgICAgIChhbmQgYWxsICht ZXNzYWdlICJSZS1hcHBseWluZyBmb3JtdWxhcyB0byBmdWxsIHRhYmxlLi4uIikpCi0KLSAgICAg IDs7IEZpcnN0IGZpbmQgdGhlIG5hbWVkIGZpZWxkcywgYW5kIG1hcmsgdGhlbSB1bnRvdWNoYWJs ZS4KLSAgICAgIDs7IEFsc28gY2hlY2sgaWYgc2V2ZXJhbCBmaWVsZC9yYW5nZSBmb3JtdWxhcyB0 cnkgdG8gc2V0IHRoZSBzYW1lIGZpZWxkLgotICAgICAgKHJlbW92ZS10ZXh0LXByb3BlcnRpZXMg YmVnIGVuZCAnKG9yZy11bnRvdWNoYWJsZSB0KSkKLSAgICAgICh3aGlsZSAoc2V0cSBlcSAocG9w IGVxbG5hbWUpKQotCShzZXRxIG5hbWUgKGNhciBlcSkKLQkgICAgICBhIChhc3NvYyBuYW1lIG9y Zy10YWJsZS1uYW1lZC1maWVsZC1sb2NhdGlvbnMpKQotCShzZXRxIG5hbWUxIG5hbWUpCi0JKGlm IGEgKHNldHEgbmFtZTEgKGZvcm1hdCAiQCVkJCVkIiAob3JnLXRhYmxlLWxpbmUtdG8tZGxpbmUg KG50aCAxIGEpKQotCQkJCSAgKG50aCAyIGEpKSkpCi0JKHdoZW4gKG1lbWJlciBuYW1lMSBzZWVu LWZpZWxkcykKLQkgICh1c2VyLWVycm9yICJTZXZlcmFsIGZpZWxkL3JhbmdlIGZvcm11bGFzIHRy eSB0byBzZXQgJXMiIG5hbWUxKSkKLQkocHVzaCBuYW1lMSBzZWVuLWZpZWxkcykKLQotCShhbmQg KG5vdCBhKQotCSAgICAgKHN0cmluZy1tYXRjaCAiQFxcKFswLTldK1xcKVxcJFxcKFswLTldK1xc KSIgbmFtZSkKLQkgICAgIChzZXRxIGEgKGxpc3QgbmFtZQotCQkJICAgKGNvbmRpdGlvbi1jYXNl IG5pbAotCQkJICAgICAgIChhcmVmIG9yZy10YWJsZS1kbGluZXMKLQkJCQkgICAgIChzdHJpbmct dG8tbnVtYmVyIChtYXRjaC1zdHJpbmcgMSBuYW1lKSkpCi0JCQkgICAgIChlcnJvciAodXNlci1l cnJvciAiSW52YWxpZCByb3cgbnVtYmVyIGluICVzIgotCQkJCQkgICBuYW1lKSkpCi0JCQkgICAo c3RyaW5nLXRvLW51bWJlciAobWF0Y2gtc3RyaW5nIDIgbmFtZSkpKSkpCi0JKHdoZW4gKGFuZCBh IChvciBhbGwgKGVxdWFsIChudGggMSBhKSB0aGlzbGluZSkpKQotCSAgKG1lc3NhZ2UgIlJlLWFw cGx5aW5nIGZvcm11bGEgdG8gZmllbGQ6ICVzIiBuYW1lKQotCSAgKG9yZy1nb3RvLWxpbmUgKG50 aCAxIGEpKQotCSAgKG9yZy10YWJsZS1nb3RvLWNvbHVtbiAobnRoIDIgYSkpCi0JICAocHVzaCAo YXBwZW5kIGEgKGxpc3QgKGNkciBlcSkpKSBlcWxuYW1lMSkKLQkgIChvcmctdGFibGUtcHV0LWZp ZWxkLXByb3BlcnR5IDpvcmctdW50b3VjaGFibGUgdCkpKQotICAgICAgKHNldHEgZXFsbmFtZTEg KG5yZXZlcnNlIGVxbG5hbWUxKSkKLQotICAgICAgOzsgTm93IGV2YWx1YXRlIHRoZSBjb2x1bW4g Zm9ybXVsYXMsIGJ1dCBza2lwIGZpZWxkcyBjb3ZlcmVkIGJ5Ci0gICAgICA7OyBmaWVsZCBmb3Jt dWxhcwotICAgICAgKGdvdG8tY2hhciBiZWcpCi0gICAgICAod2hpbGUgKHJlLXNlYXJjaC1mb3J3 YXJkIGxpbmUtcmUgZW5kIHQpCi0JKHVubGVzcyAoc3RyaW5nLW1hdGNoICJeICpbX14hJC9dICok IiAob3JnLXRhYmxlLWdldC1maWVsZCAxKSkKLQkgIDs7IFVucHJvdGVjdGVkIGxpbmUsIHJlY2Fs Y3VsYXRlCi0JICAoYW5kIGFsbCAobWVzc2FnZSAiUmUtYXBwbHlpbmcgZm9ybXVsYXMgdG8gZnVs bCB0YWJsZS4uLihsaW5lICVkKSIKLQkJCSAgICAoc2V0cSBjbnQgKDErIGNudCkpKSkKLQkgIChz ZXRxIG9yZy1sYXN0LXJlY2FsYy1saW5lIChvcmctY3VycmVudC1saW5lKSkKLQkgIChzZXRxIGVx bCBlcWxudW0pCi0JICAod2hpbGUgKHNldHEgZW50cnkgKHBvcCBlcWwpKQotCSAgICAob3JnLWdv dG8tbGluZSBvcmctbGFzdC1yZWNhbGMtbGluZSkKLQkgICAgKG9yZy10YWJsZS1nb3RvLWNvbHVt biAoc3RyaW5nLXRvLW51bWJlciAoY2FyIGVudHJ5KSkgbmlsICdmb3JjZSkKLQkgICAgKHVubGVz cyAoZ2V0LXRleHQtcHJvcGVydHkgKHBvaW50KSA6b3JnLXVudG91Y2hhYmxlKQotCSAgICAgIChv cmctdGFibGUtZXZhbC1mb3JtdWxhIG5pbCAoY2RyIGVudHJ5KQotCQkJCSAgICAgICdub2FsaWdu ICdub2NzdCAnbm9zdG9yZSAnbm9hbmFseXNpcykpKSkpCi0KLSAgICAgIDs7IE5vdyBldmFsdWF0 ZSB0aGUgZmllbGQgZm9ybXVsYXMKLSAgICAgICh3aGlsZSAoc2V0cSBlcSAocG9wIGVxbG5hbWUx KSkKLQkobWVzc2FnZSAiUmUtYXBwbHlpbmcgZm9ybXVsYSB0byBmaWVsZDogJXMiIChjYXIgZXEp KQotCShvcmctZ290by1saW5lIChudGggMSBlcSkpCi0JKG9yZy10YWJsZS1nb3RvLWNvbHVtbiAo bnRoIDIgZXEpKQotCShvcmctdGFibGUtZXZhbC1mb3JtdWxhIG5pbCAobnRoIDMgZXEpICdub2Fs aWduICdub2NzdAotCQkJCSdub3N0b3JlICdub2FuYWx5c2lzKSkKLQotICAgICAgKG9yZy1nb3Rv LWxpbmUgdGhpc2xpbmUpCi0gICAgICAob3JnLXRhYmxlLWdvdG8tY29sdW1uIHRoaXNjb2wpCi0g ICAgICAocmVtb3ZlLXRleHQtcHJvcGVydGllcyAocG9pbnQtbWluKSAocG9pbnQtbWF4KSAnKG9y Zy11bnRvdWNoYWJsZSB0KSkKLSAgICAgIChvciBub2FsaWduIChhbmQgb3JnLXRhYmxlLW1heS1u ZWVkLXVwZGF0ZSAob3JnLXRhYmxlLWFsaWduKSkKLQkgIChhbmQgYWxsIChtZXNzYWdlICJSZS1h cHBseWluZyBmb3JtdWxhcyB0byAlZCBsaW5lcy4uLmRvbmUiIGNudCkpKQotCi0gICAgICA7OyBi YWNrIHRvIGluaXRpYWwgcG9zaXRpb24KLSAgICAgIChtZXNzYWdlICJSZS1hcHBseWluZyBmb3Jt dWxhcy4uLmRvbmUiKQotICAgICAgKG9yZy1nb3RvLWxpbmUgdGhpc2xpbmUpCi0gICAgICAob3Jn LXRhYmxlLWdvdG8tY29sdW1uIHRoaXNjb2wpCi0gICAgICAob3Igbm9hbGlnbiAoYW5kIG9yZy10 YWJsZS1tYXktbmVlZC11cGRhdGUgKG9yZy10YWJsZS1hbGlnbikpCi0JICAoYW5kIGFsbCAobWVz c2FnZSAiUmUtYXBwbHlpbmcgZm9ybXVsYXMuLi5kb25lIikpKSkpKQorICAgICAgKHdoZW4gZXFs aXN0CisJKHNldHEgZXFsaXN0CisJICAgICAgKG1hcGNhciAobGFtYmRhICh4KQorCQkJKGlmIChz dHJpbmctbWF0Y2ggIl5ALT9JKyIgKGNhciB4KSkKKwkJCSAgICAodXNlci1lcnJvciAiQ2FuJ3Qg YXNzaWduIHRvIGhsaW5lIHJlbGF0aXZlIHJlZmVyZW5jZSIpKQorCQkJKHdoZW4gKHN0cmluZy1t YXRjaCAiXFxgJFs8Pl0iIChjYXIgeCkpCisJCQkgIChzZXRxIGxoczEgKGNhciB4KSkKKwkJCSAg KHNldHEgeCAoY29ucyAoc3Vic3RyaW5nCisJCQkJCSAob3JnLXRhYmxlLWZvcm11bGEtaGFuZGxl LWZpcnN0L2xhc3QtcmMKKwkJCQkJICAoY2FyIHgpKSAxKQorCQkJCQkoY2RyIHgpKSkKKwkJCSAg KGlmIChhc3NvYyAoY2FyIHgpIGVxbGlzdDEpCisJCQkgICAgICAodXNlci1lcnJvciAiXCIlcz1c IiBmb3JtdWxhIHRyaWVzIHRvIG92ZXJ3cml0ZSBleGlzdGluZyBmb3JtdWxhIGZvciBjb2x1bW4g JXMiCisJCQkJCSAgbGhzMSAoY2FyIHgpKSkpCisJCQkoY29ucworCQkJIChvcmctdGFibGUtZm9y bXVsYS1oYW5kbGUtZmlyc3QvbGFzdC1yYyAoY2FyIHgpKQorCQkJIChvcmctdGFibGUtZm9ybXVs YS1zdWJzdGl0dXRlLW5hbWVzCisJCQkgIChvcmctdGFibGUtZm9ybXVsYS1oYW5kbGUtZmlyc3Qv bGFzdC1yYyAoY2RyIHgpKSkpKQorCQkgICAgICBlcWxpc3QpKQorCTs7IFNwbGl0IHRoZSBlcXVh dGlvbiBsaXN0CisJKHdoaWxlIChzZXRxIGVxIChwb3AgZXFsaXN0KSkKKwkgIChpZiAoPD0gKHN0 cmluZy10by1jaGFyIChjYXIgZXEpKSA/OSkKKwkgICAgICAocHVzaCBlcSBlcWxudW0pCisJICAg IChwdXNoIGVxIGVxbG5hbWUpKSkKKwkoc2V0cSBlcWxudW0gKG5yZXZlcnNlIGVxbG51bSkgZXFs bmFtZSAobnJldmVyc2UgZXFsbmFtZSkpCisJOzsgRXhwYW5kIHJhbmdlcyBpbiBsaHMgb2YgZm9y bXVsYXMKKwkoc2V0cSBlcWxuYW1lIChvcmctdGFibGUtZXhwYW5kLWxocy1yYW5nZXMgZXFsbmFt ZSkpCisKKwk7OyBHZXQgdGhlIGNvcnJlY3QgbGluZSByYW5nZSB0byBwcm9jZXNzCisJKGlmIGFs bAorCSAgICAocHJvZ24KKwkgICAgICAoc2V0cSBlbmQgKG1vdmUtbWFya2VyIChtYWtlLW1hcmtl cikgKDErIChvcmctdGFibGUtZW5kKSkpKQorCSAgICAgIChnb3RvLWNoYXIgKHNldHEgYmVnIChv cmctdGFibGUtYmVnaW4pKSkKKwkgICAgICAoaWYgKHJlLXNlYXJjaC1mb3J3YXJkIG9yZy10YWJs ZS1jYWxjdWxhdGUtbWFyay1yZWdleHAgZW5kIHQpCisJCSAgOzsgVGhpcyBpcyBhIHRhYmxlIHdp dGggbWFya2VkIGxpbmVzLCBjb21wdXRlIHNlbGVjdGVkIGxpbmVzCisJCSAgKHNldHEgbGluZS1y ZSBvcmctdGFibGUtcmVjYWxjdWxhdGUtcmVnZXhwKQorCQk7OyBNb3ZlIGZvcndhcmQgdG8gdGhl IGZpcnN0IG5vbi1oZWFkZXIgbGluZQorCQkoaWYgKGFuZCAocmUtc2VhcmNoLWZvcndhcmQgb3Jn LXRhYmxlLWRhdGFsaW5lLXJlZ2V4cCBlbmQgdCkKKwkJCSAocmUtc2VhcmNoLWZvcndhcmQgb3Jn LXRhYmxlLWhsaW5lLXJlZ2V4cCBlbmQgdCkKKwkJCSAocmUtc2VhcmNoLWZvcndhcmQgb3JnLXRh YmxlLWRhdGFsaW5lLXJlZ2V4cCBlbmQgdCkpCisJCSAgICAoc2V0cSBiZWcgKG1hdGNoLWJlZ2lu bmluZyAwKSkKKwkJICBuaWwpKSkgOzsganVzdCBsZWF2ZSBiZWcgd2hlcmUgaXQgaXMKKwkgIChz ZXRxIGJlZyAocG9pbnQtYXQtYm9sKQorCQllbmQgKG1vdmUtbWFya2VyIChtYWtlLW1hcmtlcikg KDErIChwb2ludC1hdC1lb2wpKSkpKQorCShnb3RvLWNoYXIgYmVnKQorCisJOzsgRmlyc3QgZmlu ZCB0aGUgbmFtZWQgZmllbGRzLCBhbmQgbWFyayB0aGVtIHVudG91Y2hhYmxlLgorCTs7IEFsc28g Y2hlY2sgaWYgc2V2ZXJhbCBmaWVsZC9yYW5nZSBmb3JtdWxhcyB0cnkgdG8gc2V0IHRoZSBzYW1l IGZpZWxkLgorCShyZW1vdmUtdGV4dC1wcm9wZXJ0aWVzIGJlZyBlbmQgJyhvcmctdW50b3VjaGFi bGUgdCkpCisJKHdoaWxlIChzZXRxIGVxIChwb3AgZXFsbmFtZSkpCisJICAoc2V0cSBuYW1lIChj YXIgZXEpCisJCWEgKGFzc29jIG5hbWUgb3JnLXRhYmxlLW5hbWVkLWZpZWxkLWxvY2F0aW9ucykp CisJICAoc2V0cSBuYW1lMSBuYW1lKQorCSAgKGlmIGEgKHNldHEgbmFtZTEgKGZvcm1hdCAiQCVk JCVkIiAob3JnLXRhYmxlLWxpbmUtdG8tZGxpbmUgKG50aCAxIGEpKQorCQkJCSAgICAobnRoIDIg YSkpKSkKKwkgICh3aGVuIChtZW1iZXIgbmFtZTEgc2Vlbi1maWVsZHMpCisJICAgICh1c2VyLWVy cm9yICJTZXZlcmFsIGZpZWxkL3JhbmdlIGZvcm11bGFzIHRyeSB0byBzZXQgJXMiIG5hbWUxKSkK KwkgIChwdXNoIG5hbWUxIHNlZW4tZmllbGRzKQorCisJICAoYW5kIChub3QgYSkKKwkgICAgICAg KHN0cmluZy1tYXRjaCAiQFxcKFswLTldK1xcKVxcJFxcKFswLTldK1xcKSIgbmFtZSkKKwkgICAg ICAgKHNldHEgYSAobGlzdCBuYW1lCisJCQkgICAgIChjb25kaXRpb24tY2FzZSBuaWwKKwkJCQkg KGFyZWYgb3JnLXRhYmxlLWRsaW5lcworCQkJCSAgICAgICAoc3RyaW5nLXRvLW51bWJlciAobWF0 Y2gtc3RyaW5nIDEgbmFtZSkpKQorCQkJICAgICAgIChlcnJvciAodXNlci1lcnJvciAiSW52YWxp ZCByb3cgbnVtYmVyIGluICVzIgorCQkJCQkJICBuYW1lKSkpCisJCQkgICAgIChzdHJpbmctdG8t bnVtYmVyIChtYXRjaC1zdHJpbmcgMiBuYW1lKSkpKSkKKwkgICh3aGVuIChhbmQgYSAob3IgYWxs IChlcXVhbCAobnRoIDEgYSkgdGhpc2xpbmUpKSkKKwkgICAgKG9yZy1nb3RvLWxpbmUgKG50aCAx IGEpKQorCSAgICAob3JnLXRhYmxlLWdvdG8tY29sdW1uIChudGggMiBhKSkKKwkgICAgKHB1c2gg KGFwcGVuZCBhIChsaXN0IChjZHIgZXEpKSkgZXFsbmFtZTEpCisJICAgIChvcmctdGFibGUtcHV0 LWZpZWxkLXByb3BlcnR5IDpvcmctdW50b3VjaGFibGUgdCkpKQorCShzZXRxIGVxbG5hbWUxIChu cmV2ZXJzZSBlcWxuYW1lMSkpCisKKwk7OyBOb3cgZXZhbHVhdGUgdGhlIGNvbHVtbiBmb3JtdWxh cywgYnV0IHNraXAgZmllbGRzIGNvdmVyZWQgYnkKKwk7OyBmaWVsZCBmb3JtdWxhcworCShnb3Rv LWNoYXIgYmVnKQorCSh3aGlsZSAocmUtc2VhcmNoLWZvcndhcmQgbGluZS1yZSBlbmQgdCkKKwkg ICh1bmxlc3MgKHN0cmluZy1tYXRjaCAiXiAqW19eISQvXSAqJCIgKG9yZy10YWJsZS1nZXQtZmll bGQgMSkpCisJICAgIDs7IFVucHJvdGVjdGVkIGxpbmUsIHJlY2FsY3VsYXRlCisJICAgIChzZXRx IG9yZy1sYXN0LXJlY2FsYy1saW5lIChvcmctY3VycmVudC1saW5lKSkKKwkgICAgKHNldHEgZXFs IGVxbG51bSkKKwkgICAgKHdoaWxlIChzZXRxIGVudHJ5IChwb3AgZXFsKSkKKwkgICAgICAob3Jn LWdvdG8tbGluZSBvcmctbGFzdC1yZWNhbGMtbGluZSkKKwkgICAgICAob3JnLXRhYmxlLWdvdG8t Y29sdW1uIChzdHJpbmctdG8tbnVtYmVyIChjYXIgZW50cnkpKSBuaWwgJ2ZvcmNlKQorCSAgICAg ICh1bmxlc3MgKGdldC10ZXh0LXByb3BlcnR5IChwb2ludCkgOm9yZy11bnRvdWNoYWJsZSkKKwkJ KG9yZy10YWJsZS1ldmFsLWZvcm11bGEgbmlsIChjZHIgZW50cnkpCisJCQkJCSdub2FsaWduICdu b2NzdCAnbm9zdG9yZSAnbm9hbmFseXNpcykpKSkpCisKKwk7OyBOb3cgZXZhbHVhdGUgdGhlIGZp ZWxkIGZvcm11bGFzCisJKHdoaWxlIChzZXRxIGVxIChwb3AgZXFsbmFtZTEpKQorCSAgKG9yZy1n b3RvLWxpbmUgKG50aCAxIGVxKSkKKwkgIChvcmctdGFibGUtZ290by1jb2x1bW4gKG50aCAyIGVx KSkKKwkgIChvcmctdGFibGUtZXZhbC1mb3JtdWxhIG5pbCAobnRoIDMgZXEpICdub2FsaWduICdu b2NzdAorCQkJCSAgJ25vc3RvcmUgJ25vYW5hbHlzaXMpKQorCisJKG9yZy1nb3RvLWxpbmUgdGhp c2xpbmUpCisJKG9yZy10YWJsZS1nb3RvLWNvbHVtbiB0aGlzY29sKQorCShyZW1vdmUtdGV4dC1w cm9wZXJ0aWVzIChwb2ludC1taW4pIChwb2ludC1tYXgpICcob3JnLXVudG91Y2hhYmxlIHQpKQor CShvciBub2FsaWduIChhbmQgb3JnLXRhYmxlLW1heS1uZWVkLXVwZGF0ZSAob3JnLXRhYmxlLWFs aWduKSkpCisKKwk7OyBiYWNrIHRvIGluaXRpYWwgcG9zaXRpb24KKwkob3JnLWdvdG8tbGluZSB0 aGlzbGluZSkKKwkob3JnLXRhYmxlLWdvdG8tY29sdW1uIHRoaXNjb2wpCisJKG9yIG5vYWxpZ24g KGFuZCBvcmctdGFibGUtbWF5LW5lZWQtdXBkYXRlIChvcmctdGFibGUtYWxpZ24pKSkpKSkpCiAK IDs7OyMjI2F1dG9sb2FkCiAoZGVmdW4gb3JnLXRhYmxlLWl0ZXJhdGUgKCZvcHRpb25hbCBhcmcp Cg== --089e01538baa422ff804ff5a8a78--