From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ista Zahn Subject: [PATCH] ob-stata.el: new file for stata code evaluation Date: Wed, 30 Jul 2014 17:19:34 -0400 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=047d7b414a8eaf4bbd04ff6fb76a Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:49863) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XCbHy-0005oW-6j for emacs-orgmode@gnu.org; Wed, 30 Jul 2014 17:20:00 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XCbHw-0001LJ-0j for emacs-orgmode@gnu.org; Wed, 30 Jul 2014 17:19:58 -0400 Received: from mail-oa0-x232.google.com ([2607:f8b0:4003:c02::232]:57579) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XCbHv-0001LF-Nv for emacs-orgmode@gnu.org; Wed, 30 Jul 2014 17:19:55 -0400 Received: by mail-oa0-f50.google.com with SMTP id g18so1408668oah.23 for ; Wed, 30 Jul 2014 14:19:55 -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: emacs-orgmode Mailinglist --047d7b414a8eaf4bbd04ff6fb76a Content-Type: text/plain; charset=UTF-8 Here is a patch (against master) adding babel support for evaluating stata code. As discussed in a previous thread[1] there is a lot of work that should be done to clean it up and make it more useful. It does work for basic code evaluation, so I'm submitting it here in the hope that others find it useful. Best, Ista [1] https://lists.gnu.org/archive/html/emacs-orgmode/2014-06/msg00862.html --047d7b414a8eaf4bbd04ff6fb76a Content-Type: text/x-patch; charset=US-ASCII; name="0001-ob-stata.el-new-file-for-stata-code-evaluation.patch" Content-Disposition: attachment; filename="0001-ob-stata.el-new-file-for-stata-code-evaluation.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hy95ot9v0 RnJvbSAyNGQ5NTdiOGZjM2ViMjA3MTU4ZTk0Y2RlYzFhMzYyYmEyZTc5ZmYwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBJc3RhIFphaG4gPGlzdGF6YWhuQGdtYWlsLmNvbT4KRGF0ZTog V2VkLCAzMCBKdWwgMjAxNCAxNzowNzoxNiAtMDQwMApTdWJqZWN0OiBbUEFUQ0hdIG9iLXN0YXRh LmVsOiBuZXcgZmlsZSBmb3Igc3RhdGEgY29kZSBldmFsdWF0aW9uCgoqIGNvbnRyaWIvbGlzcC9v Yi1zdGF0YS5lbDogTmV3IGZpbGUgYmFzZWQgb24gb2ItanVsaWEuZWwuCiogY29udHJpYi9SRUFE TUU6IERvY3VtZW50IGFkZGl0aW9uIG9mIG5ldyBmaWxlLgoKb2Itc3RhdGEuZWwgcHJvdmlkZXMg YmFzaWMgc3VwcG9ydCBmb3IgZXZhbHVhdGluZyBTdGF0YSBjb2RlLgotLS0KIGNvbnRyaWIvUkVB RE1FICAgICAgICAgICB8ICAgMSArCiBjb250cmliL2xpc3Avb2Itc3RhdGEuZWwgfCAzMTMgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hh bmdlZCwgMzE0IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBjb250cmliL2xpc3Av b2Itc3RhdGEuZWwKCmRpZmYgLS1naXQgYS9jb250cmliL1JFQURNRSBiL2NvbnRyaWIvUkVBRE1F CmluZGV4IDJhNjdiNjUuLmU5MmRhMTQgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvUkVBRE1FCisrKyBi L2NvbnRyaWIvUkVBRE1FCkBAIC04MCw2ICs4MCw3IEBAIG9iLWZvbXVzLmVsICAgICAgICAJIC0t LSBPcmctYmFiZWwgZnVuY3Rpb25zIGZvciBmb211cyBldmFsdWF0aW9uCiBvYi1qdWxpYS5lbCAg CSAJIC0tLSBPcmctYmFiZWwgZnVuY3Rpb25zIGZvciBqdWxpYSBldmFsdWF0aW9uCiBvYi1tYXRo b21hdGljLmVsICAgCSAtLS0gT3JnLWJhYmVsIGZ1bmN0aW9ucyBmb3IgbWF0aG9tYXRpYyBldmFs dWF0aW9uCiBvYi1vei5lbCAgICAgICAgICAgCSAtLS0gT3JnLWJhYmVsIGZ1bmN0aW9ucyBmb3Ig T3ogZXZhbHVhdGlvbgorb2Itc3RhdGEuZWwgICAgICAgICAgICAgIC0tLSBPcmctYmFiZWwgZnVu Y3Rpb25zIGZvciBTdGF0YSBldmFsdWF0aW9uCiBvYi10Y2wuZWwgCQkgLS0tIE9yZy1iYWJlbCBm dW5jdGlvbnMgZm9yIHRjbCBldmFsdWF0aW9uCiAKIEV4dGVybmFsIGxpYnJhcmllcwpkaWZmIC0t Z2l0IGEvY29udHJpYi9saXNwL29iLXN0YXRhLmVsIGIvY29udHJpYi9saXNwL29iLXN0YXRhLmVs Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhNzA3NTQKLS0tIC9kZXYvbnVs bAorKysgYi9jb250cmliL2xpc3Avb2Itc3RhdGEuZWwKQEAgLTAsMCArMSwzMTMgQEAKKzs7OyBv Yi1zdGF0YS5lbCAtLS0gb3JnLWJhYmVsIGZ1bmN0aW9ucyBmb3Igc3RhdGEgY29kZSBldmFsdWF0 aW9uCisKKzs7IENvcHlyaWdodCAoQykgMjAxNCBJc3RhIFphaG4KKzs7IEF1dGhvcjogSXN0YSBa YWhuIGlzdGF6YWhuQGdtYWlsLmNvbQorOzsgICAgICBHLiBKYXkgS2VybnMKKzs7ICAgICAgRXJp YyBTY2h1bHRlCis7OyAgICAgIERhbiBEYXZpc29uCisKKworOzsgVGhpcyBmaWxlIGlzIG5vdCBw YXJ0IG9mIEdOVSBFbWFjcy4KKworOzsgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlv dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKzs7IGl0IHVuZGVyIHRoZSB0ZXJt cyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cis7OyB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91 ciBvcHRpb24pCis7OyBhbnkgbGF0ZXIgdmVyc2lvbi4KKzs7Cis7OyBUaGlzIHByb2dyYW0gaXMg ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKzs7IGJ1dCBX SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m Cis7OyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu ICBTZWUgdGhlCis7OyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz LgorOzsKKzs7IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlCis7OyBhbG9uZyB3aXRoIEdOVSBFbWFjczsgc2VlIHRoZSBmaWxl IENPUFlJTkcuICBJZiBub3QsIHdyaXRlIHRvIHRoZQorOzsgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0 aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAorOzsgQm9zdG9uLCBN QSAwMjExMC0xMzAxLCBVU0EuCisKKzs7OyBDb21tZW50YXJ5OgorCis7OyBUaGUgZmlsZSBwcm92 aWRlcyBPcmctQmFiZWwgc3VwcG9ydCBmb3IgZXZhbHVhdGluZyBzdGF0YSBjb2RlLgorOzsgSXQg aXMgYmFzaWNhbGx5IHJlc3VsdCBvZiBmaW5kLWFuZC1yZXBsYWNlICJzdGF0YSIgZm9yICJqdWxp YSIKKzs7IGluIG9iLWp1bGlhLmVsIGJ5IEcuIEpheSBLZXJucy4gT25seSAiOnJlc3VsdHMgb3V0 cHV0IiB3b3JrczogdGhlCis7OyBoZWFkZXIgYXJncyBtdXN0IGluY2x1ZGUgIjpyZXN1bHRzIG91 dHB1dCIgKHRoaXMgaXMgdGhlIGRlZmF1bHQpLgorOzsgTm90ZSB0aGF0IEknbSBub3Qgc3VyZSAn OnJlc3VsdHMgdmFsdWUnIG1ha2VzIHNlbnNlIG9yIGlzIHVzZWZ1bCAKKzs7IGJ1dCBJIGhhdmUg bGVmdCBhbGwgdGhlIHZhbHVlLXByb2Nlc3Npbmcgc3R1ZmYgaW5oZXJpdGVkIGZyb20gCis7OyBv Yi1qdWxpYSBhbmQgb2ItUi4gJzpyZXN1bHRzIGdyYXBoaWNzJyB3b3VsZCBiZSBuaWNlLCBidXQg SSBoYXZlCis7OyBub3QgdHJpZWQgdG8gaW1wbGVtZW50IGl0LiAKKzs7IC0tSXN0YSwgMDcvMzAv MjAxNAorCis7OzsgUmVxdWlyZW1lbnRzOgorOzsgU3RhdGE6IGh0dHA6Ly9zdGF0YS5jb20KKzs7 IEVTUzogaHR0cDovL2Vzcy5yLXByb2plY3Qub3JnCisKKzs7OyBDb2RlOgorKHJlcXVpcmUgJ29i KQorKGV2YWwtd2hlbi1jb21waWxlIChyZXF1aXJlICdjbCkpCisKKyhkZWNsYXJlLWZ1bmN0aW9u IG9yZ3RibC10by1jc3YgIm9yZy10YWJsZSIgKHRhYmxlIHBhcmFtcykpCisoZGVjbGFyZS1mdW5j dGlvbiBzdGF0YSAiZXh0OmVzcy1zdGF0YSIgKCZvcHRpb25hbCBzdGFydC1hcmdzKSkKKyhkZWNs YXJlLWZ1bmN0aW9uIGluZmVyaW9yLWVzcy1zZW5kLWlucHV0ICJleHQ6ZXNzLWluZiIgKCkpCiso ZGVjbGFyZS1mdW5jdGlvbiBlc3MtbWFrZS1idWZmZXItY3VycmVudCAiZXh0OmVzcy1pbmYiICgp KQorKGRlY2xhcmUtZnVuY3Rpb24gZXNzLWV2YWwtYnVmZmVyICJleHQ6ZXNzLWluZiIgKHZpcykp CisoZGVjbGFyZS1mdW5jdGlvbiBvcmctbnVtYmVyLXNlcXVlbmNlICJvcmctY29tcGF0IiAoZnJv bSAmb3B0aW9uYWwgdG8gaW5jKSkKKyhkZWNsYXJlLWZ1bmN0aW9uIG9yZy1yZW1vdmUtaWYtbm90 ICJvcmciIChwcmVkaWNhdGUgc2VxKSkKKworKGRlZmNvbnN0IG9yZy1iYWJlbC1oZWFkZXItYXJn czpzdGF0YQorICAnKCh3aWR0aAkJIC4gOmFueSkKKyAgICAoaG9yaXpvbnRhbAkJIC4gOmFueSkK KyAgICAocmVzdWx0cyAgICAgICAgICAgICAuICgoZmlsZSBsaXN0IHZlY3RvciB0YWJsZSBzY2Fs YXIgdmVyYmF0aW0pCisJCQkgICAgKHJhdyBvcmcgaHRtbCBsYXRleCBjb2RlIHBwIHdyYXApCisJ CQkgICAgKHJlcGxhY2Ugc2lsZW50IGFwcGVuZCBwcmVwZW5kKQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDs7IE5PVEU6IG5vdCBzdXJlICd2YWx1ZScgbWFrZXMgc2Vuc2UgaW4gc3RhdGEK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyB3ZSBtYXkgd2FudCB0byByZW1vdmUgaXQg ZnJvbSB0aGUgbGlzdAorCQkJICAgIChvdXRwdXQgdmFsdWUgZ3JhcGhpY3MpKSkpCisgICJzdGF0 YS1zcGVjaWZpYyBoZWFkZXIgYXJndW1lbnRzLiIpCisKKyhhZGQtdG8tbGlzdCAnb3JnLWJhYmVs LXRhbmdsZS1sYW5nLWV4dHMgJygic3RhdGEiIC4gImRvIikpCisKKzs7IG9ubHkgJzpyZXN1bHRz IG91dHB1dCcgY3VycmVudGx5IHdvcmtzLCBzbyBtYWtlIHRoYXQgdGhlIGRlZmF1bHQKKyhkZWZ2 YXIgb3JnLWJhYmVsLWRlZmF1bHQtaGVhZGVyLWFyZ3M6c3RhdGEgJygoOnJlc3VsdHMgLiAib3V0 cHV0IikpKQorCisoZGVmY3VzdG9tIG9yZy1iYWJlbC1zdGF0YS1jb21tYW5kIGluZmVyaW9yLVNU QS1wcm9ncmFtLW5hbWUKKyAgIk5hbWUgb2YgY29tbWFuZCB0byB1c2UgZm9yIGV4ZWN1dGluZyBz dGF0YSBjb2RlLiIKKyAgOmdyb3VwICdvcmctYmFiZWwKKyAgOnZlcnNpb24gIjI0LjQiCisgIDpw YWNrYWdlLXZlcnNpb24gJyhPcmcgLiAiOC4zIikKKyAgOnR5cGUgJ3N0cmluZykKKworKGRlZnZh ciBlc3MtbG9jYWwtcHJvY2Vzcy1uYW1lKSA7IGR5bmFtaWNhbGx5IHNjb3BlZAorKGRlZnVuIG9y Zy1iYWJlbC1lZGl0LXByZXA6c3RhdGEgKGluZm8pCisgIChsZXQgKChzZXNzaW9uIChjZHIgKGFz c29jIDpzZXNzaW9uIChudGggMiBpbmZvKSkpKSkKKyAgICAod2hlbiAoYW5kIHNlc3Npb24gKHN0 cmluZy1tYXRjaCAiXlxcKlxcKC4rP1xcKVxcKiQiIHNlc3Npb24pKQorICAgICAgKHNhdmUtbWF0 Y2gtZGF0YSAob3JnLWJhYmVsLXN0YXRhLWluaXRpYXRlLXNlc3Npb24gc2Vzc2lvbiBuaWwpKSkp KQorCisoZGVmdW4gb3JnLWJhYmVsLWV4cGFuZC1ib2R5OnN0YXRhIChib2R5IHBhcmFtcyAmb3B0 aW9uYWwgZ3JhcGhpY3MtZmlsZSkKKyAgIkV4cGFuZCBCT0RZIGFjY29yZGluZyB0byBQQVJBTVMs IHJldHVybiB0aGUgZXhwYW5kZWQgYm9keS4iCisgIChsZXQgKChncmFwaGljcy1maWxlCisJIChv ciBncmFwaGljcy1maWxlIChvcmctYmFiZWwtc3RhdGEtZ3JhcGhpY2FsLW91dHB1dC1maWxlIHBh cmFtcykpKSkKKyAgICAobWFwY29uY2F0CisgICAgICMnaWRlbnRpdHkKKyAgICAgKChsYW1iZGEg KGluc2lkZSkKKwkoaWYgZ3JhcGhpY3MtZmlsZQorICAgICAgICAgICAgaW5zaWRlCisJICBpbnNp ZGUpKQorICAgICAgKGFwcGVuZCAob3JnLWJhYmVsLXZhcmlhYmxlLWFzc2lnbm1lbnRzOnN0YXRh IHBhcmFtcykKKwkgICAgICAobGlzdCBib2R5KSkpICJcbiIpKSkKKworKGRlZnVuIG9yZy1iYWJl bC1leGVjdXRlOnN0YXRhIChib2R5IHBhcmFtcykKKyAgIkV4ZWN1dGUgYSBibG9jayBvZiBzdGF0 YSBjb2RlLgorVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgYG9yZy1iYWJlbC1leGVjdXRlLXNy Yy1ibG9jaycuIgorICAoc2F2ZS1leGN1cnNpb24KKyAgICAobGV0KiAoKHJlc3VsdC1wYXJhbXMg KGNkciAoYXNzb2MgOnJlc3VsdC1wYXJhbXMgcGFyYW1zKSkpCisJICAgKHJlc3VsdC10eXBlIChj ZHIgKGFzc29jIDpyZXN1bHQtdHlwZSBwYXJhbXMpKSkKKyAgICAgICAgICAgKHNlc3Npb24gKG9y Zy1iYWJlbC1zdGF0YS1pbml0aWF0ZS1zZXNzaW9uCisJCSAgICAgKGNkciAoYXNzb2MgOnNlc3Np b24gcGFyYW1zKSkgcGFyYW1zKSkKKwkgICAoY29sbmFtZXMtcCAoY2RyIChhc3NvYyA6Y29sbmFt ZXMgcGFyYW1zKSkpCisJICAgKHJvd25hbWVzLXAgKGNkciAoYXNzb2MgOnJvd25hbWVzIHBhcmFt cykpKQorCSAgIChncmFwaGljcy1maWxlIChvcmctYmFiZWwtc3RhdGEtZ3JhcGhpY2FsLW91dHB1 dC1maWxlIHBhcmFtcykpCisJICAgKGZ1bGwtYm9keSAob3JnLWJhYmVsLWV4cGFuZC1ib2R5OnN0 YXRhIGJvZHkgcGFyYW1zIGdyYXBoaWNzLWZpbGUpKQorCSAgIChyZXN1bHQKKwkgICAgKG9yZy1i YWJlbC1zdGF0YS1ldmFsdWF0ZQorCSAgICAgc2Vzc2lvbiBmdWxsLWJvZHkgcmVzdWx0LXR5cGUg cmVzdWx0LXBhcmFtcworCSAgICAgKG9yIChlcXVhbCAieWVzIiBjb2xuYW1lcy1wKQorCQkgKG9y Zy1iYWJlbC1waWNrLW5hbWUKKwkJICAoY2RyIChhc3NvYyA6Y29sbmFtZS1uYW1lcyBwYXJhbXMp KSBjb2xuYW1lcy1wKSkKKwkgICAgIChvciAoZXF1YWwgInllcyIgcm93bmFtZXMtcCkKKwkJIChv cmctYmFiZWwtcGljay1uYW1lCisJCSAgKGNkciAoYXNzb2MgOnJvd25hbWUtbmFtZXMgcGFyYW1z KSkgcm93bmFtZXMtcCkpKSkpCisgICAgICAoaWYgZ3JhcGhpY3MtZmlsZSBuaWwgcmVzdWx0KSkp KQorCisoZGVmdW4gb3JnLWJhYmVsLXByZXAtc2Vzc2lvbjpzdGF0YSAoc2Vzc2lvbiBwYXJhbXMp CisgICJQcmVwYXJlIFNFU1NJT04gYWNjb3JkaW5nIHRvIHRoZSBoZWFkZXIgYXJndW1lbnRzIHNw ZWNpZmllZCBpbiBQQVJBTVMuIgorICAobGV0KiAoKHNlc3Npb24gKG9yZy1iYWJlbC1zdGF0YS1p bml0aWF0ZS1zZXNzaW9uIHNlc3Npb24gcGFyYW1zKSkKKwkgKHZhci1saW5lcyAob3JnLWJhYmVs LXZhcmlhYmxlLWFzc2lnbm1lbnRzOnN0YXRhIHBhcmFtcykpKQorICAgIChvcmctYmFiZWwtY29t aW50LWluLWJ1ZmZlciBzZXNzaW9uCisgICAgICAobWFwYyAobGFtYmRhICh2YXIpCisgICAgICAg ICAgICAgIChlbmQtb2YtbGluZSAxKSAoaW5zZXJ0IHZhcikgKGNvbWludC1zZW5kLWlucHV0IG5p bCB0KQorICAgICAgICAgICAgICAob3JnLWJhYmVsLWNvbWludC13YWl0LWZvci1vdXRwdXQgc2Vz c2lvbikpIHZhci1saW5lcykpCisgICAgc2Vzc2lvbikpCisKKyhkZWZ1biBvcmctYmFiZWwtbG9h ZC1zZXNzaW9uOnN0YXRhIChzZXNzaW9uIGJvZHkgcGFyYW1zKQorICAiTG9hZCBCT0RZIGludG8g U0VTU0lPTi4iCisgIChzYXZlLXdpbmRvdy1leGN1cnNpb24KKyAgICAobGV0ICgoYnVmZmVyIChv cmctYmFiZWwtcHJlcC1zZXNzaW9uOnN0YXRhIHNlc3Npb24gcGFyYW1zKSkpCisgICAgICAod2l0 aC1jdXJyZW50LWJ1ZmZlciBidWZmZXIKKyAgICAgICAgKGdvdG8tY2hhciAocHJvY2Vzcy1tYXJr IChnZXQtYnVmZmVyLXByb2Nlc3MgKGN1cnJlbnQtYnVmZmVyKSkpKQorICAgICAgICAoaW5zZXJ0 IChvcmctYmFiZWwtY2hvbXAgYm9keSkpKQorICAgICAgYnVmZmVyKSkpCisKKzs7IGhlbHBlciBm dW5jdGlvbnMKKworKGRlZnVuIG9yZy1iYWJlbC12YXJpYWJsZS1hc3NpZ25tZW50czpzdGF0YSAo cGFyYW1zKQorICAiUmV0dXJuIGxpc3Qgb2Ygc3RhdGEgc3RhdGVtZW50cyBhc3NpZ25pbmcgdGhl IGJsb2NrJ3MgdmFyaWFibGVzLiIKKyAgKGxldCAoKHZhcnMgKG1hcGNhciAjJ2NkciAob3JnLWJh YmVsLWdldC1oZWFkZXIgcGFyYW1zIDp2YXIpKSkpCisgICAgKG1hcGNhcgorICAgICAobGFtYmRh IChwYWlyKQorICAgICAgIChvcmctYmFiZWwtc3RhdGEtYXNzaWduLWVsaXNwCisJKGNhciBwYWly KSAoY2RyIHBhaXIpCisJKGVxdWFsICJ5ZXMiIChjZHIgKGFzc29jIDpjb2xuYW1lcyBwYXJhbXMp KSkKKwkoZXF1YWwgInllcyIgKGNkciAoYXNzb2MgOnJvd25hbWVzIHBhcmFtcykpKSkpCisgICAg IChtYXBjYXIKKyAgICAgIChsYW1iZGEgKGkpCisJKGNvbnMgKGNhciAobnRoIGkgdmFycykpCisJ ICAgICAgKG9yZy1iYWJlbC1yZWFzc2VtYmxlLXRhYmxlCisJICAgICAgIChjZHIgKG50aCBpIHZh cnMpKQorCSAgICAgICAoY2RyIChudGggaSAoY2RyIChhc3NvYyA6Y29sbmFtZS1uYW1lcyBwYXJh bXMpKSkpCisJICAgICAgIChjZHIgKG50aCBpIChjZHIgKGFzc29jIDpyb3duYW1lLW5hbWVzIHBh cmFtcykpKSkpKSkKKyAgICAgIChvcmctbnVtYmVyLXNlcXVlbmNlIDAgKDEtIChsZW5ndGggdmFy cykpKSkpKSkKKworKGRlZnVuIG9yZy1iYWJlbC1zdGF0YS1xdW90ZS1jc3YtZmllbGQgKHMpCisg ICJRdW90ZSBmaWVsZCBTIGZvciBleHBvcnQgdG8gc3RhdGEuIgorICAoaWYgKHN0cmluZ3AgcykK KyAgICAgIChjb25jYXQgIlwiIiAobWFwY29uY2F0ICdpZGVudGl0eSAoc3BsaXQtc3RyaW5nIHMg IlwiIikgIlwiXCIiKSAiXCIiKQorICAgIChmb3JtYXQgIiVTIiBzKSkpCisKKyhkZWZ1biBvcmct YmFiZWwtc3RhdGEtYXNzaWduLWVsaXNwIChuYW1lIHZhbHVlIGNvbG5hbWVzLXAgcm93bmFtZXMt cCkKKyAgIkNvbnN0cnVjdCBzdGF0YSBjb2RlIGFzc2lnbmluZyB0aGUgZWxpc3AgVkFMVUUgdG8g YSB2YXJpYWJsZSBuYW1lZCBOQU1FLiIKKyAgKGlmIChsaXN0cCB2YWx1ZSkKKyAgICAgIChsZXQg KChtYXggKGFwcGx5ICMnbWF4IChtYXBjYXIgIydsZW5ndGggKG9yZy1yZW1vdmUtaWYtbm90CisJ CQkJCQkjJ3NlcXVlbmNlcCB2YWx1ZSkpKSkKKwkgICAgKG1pbiAoYXBwbHkgIydtaW4gKG1hcGNh ciAjJ2xlbmd0aCAob3JnLXJlbW92ZS1pZi1ub3QKKwkJCQkJCSMnc2VxdWVuY2VwIHZhbHVlKSkp KQorCSAgICAodHJhbnNpdGlvbi1maWxlIChvcmctYmFiZWwtdGVtcC1maWxlICJzdGF0YS1pbXBv cnQtIikpKQorICAgICAgICA7OyBlbnN1cmUgVkFMVUUgaGFzIGFuIG9yZ3RibCBzdHJ1Y3R1cmUg KGRlcHRoIG9mIGF0IGxlYXN0IDIpCisgICAgICAgICh1bmxlc3MgKGxpc3RwIChjYXIgdmFsdWUp KSAoc2V0cSB2YWx1ZSAobGlzdCB2YWx1ZSkpKQorICAgICAgICAod2l0aC10ZW1wLWZpbGUgdHJh bnNpdGlvbi1maWxlCisgICAgICAgICAgKGluc2VydAorCSAgIChvcmd0YmwtdG8tY3N2IHZhbHVl ICcoOmZtdCBvcmctYmFiZWwtc3RhdGEtcXVvdGUtY3N2LWZpZWxkKSkKKwkgICAiXG4iKSkKKwko bGV0ICgoZmlsZSAob3JnLWJhYmVsLXByb2Nlc3MtZmlsZS1uYW1lIHRyYW5zaXRpb24tZmlsZSAn bm9xdW90ZSkpCisJICAgICAgKGhlYWRlciAoaWYgKG9yIChlcSAobnRoIDEgdmFsdWUpICdobGlu ZSkgY29sbmFtZXMtcCkKKwkJCSAgIlRSVUUiICJGQUxTRSIpKQorCSAgICAgIChyb3ctbmFtZXMg KGlmIHJvd25hbWVzLXAgIjEiICJOVUxMIikpKQorCSAgKGlmICg9IG1heCBtaW4pCisJICAgICAg KGZvcm1hdCAiJXMgPSBpbnNoZWV0IHVzaW5nIFwiJXNcIiIgbmFtZSBmaWxlKQorCSAgICAoZm9y bWF0ICIlcyA9IGluc2hlZXQgdXNpbmcgXCIlc1wiIgorCQkgICAgbmFtZSBmaWxlKSkpKQorICAg IChmb3JtYXQgIiVzID0gJXMiIG5hbWUgKG9yZy1iYWJlbC1zdGF0YS1xdW90ZS1jc3YtZmllbGQg dmFsdWUpKSkpCisKKyhkZWZ2YXIgZXNzLWFzay1mb3ItZXNzLWRpcmVjdG9yeSkgOyBkeW5hbWlj YWxseSBzY29wZWQKKworKGRlZnVuIG9yZy1iYWJlbC1zdGF0YS1pbml0aWF0ZS1zZXNzaW9uIChz ZXNzaW9uIHBhcmFtcykKKyAgIklmIHRoZXJlIGlzIG5vdCBhIGN1cnJlbnQgc3RhdGEgcHJvY2Vz cyB0aGVuIGNyZWF0ZSBvbmUuIgorICAodW5sZXNzIChzdHJpbmc9IHNlc3Npb24gIm5vbmUiKQor ICAgIChsZXQgKChzZXNzaW9uIChvciBzZXNzaW9uICIqc3RhdGEqIikpCisJICAoZXNzLWFzay1m b3ItZXNzLWRpcmVjdG9yeQorCSAgIChhbmQgKGFuZCAoYm91bmRwICdlc3MtYXNrLWZvci1lc3Mt ZGlyZWN0b3J5KSBlc3MtYXNrLWZvci1lc3MtZGlyZWN0b3J5KQorCQkobm90IChjZHIgKGFzc29j IDpkaXIgcGFyYW1zKSkpKSkpCisgICAgICAoaWYgKG9yZy1iYWJlbC1jb21pbnQtYnVmZmVyLWxp dmVwIHNlc3Npb24pCisJICBzZXNzaW9uCisJKHNhdmUtd2luZG93LWV4Y3Vyc2lvbgorCSAgKHJl cXVpcmUgJ2VzcykgKHN0YXRhKQorCSAgKHJlbmFtZS1idWZmZXIKKwkgICAoaWYgKGJ1ZmZlcnAg c2Vzc2lvbikKKwkgICAgICAgKGJ1ZmZlci1uYW1lIHNlc3Npb24pCisJICAgICAoaWYgKHN0cmlu Z3Agc2Vzc2lvbikKKwkJIHNlc3Npb24KKwkgICAgICAgKGJ1ZmZlci1uYW1lKSkpKQorCSAgKGN1 cnJlbnQtYnVmZmVyKSkpKSkpCisKKyhkZWZ1biBvcmctYmFiZWwtc3RhdGEtYXNzb2NpYXRlLXNl c3Npb24gKHNlc3Npb24pCisgICJBc3NvY2lhdGUgc3RhdGEgY29kZSBidWZmZXIgd2l0aCBhIHN0 YXRhIHNlc3Npb24uCitNYWtlIFNFU1NJT04gYmUgdGhlIGluZmVyaW9yIEVTUyBwcm9jZXNzIGFz c29jaWF0ZWQgd2l0aCB0aGUKK2N1cnJlbnQgY29kZSBidWZmZXIuIgorICAoc2V0cSBlc3MtbG9j YWwtcHJvY2Vzcy1uYW1lCisJKHByb2Nlc3MtbmFtZSAoZ2V0LWJ1ZmZlci1wcm9jZXNzIHNlc3Np b24pKSkKKyAgKGVzcy1tYWtlLWJ1ZmZlci1jdXJyZW50KSkKKworKGRlZnVuIG9yZy1iYWJlbC1z dGF0YS1ncmFwaGljYWwtb3V0cHV0LWZpbGUgKHBhcmFtcykKKyAgIk5hbWUgb2YgZmlsZSB0byB3 aGljaCBzdGF0YSBzaG91bGQgc2VuZCBncmFwaGljYWwgb3V0cHV0LiIKKyAgKGFuZCAobWVtYmVy ICJncmFwaGljcyIgKGNkciAoYXNzcSA6cmVzdWx0LXBhcmFtcyBwYXJhbXMpKSkKKyAgICAgICAo Y2RyIChhc3NxIDpmaWxlIHBhcmFtcykpKSkKKworKGRlZnZhciBvcmctYmFiZWwtc3RhdGEtZW9l LWluZGljYXRvciAiZGlzcGxheSBcIm9yZ19iYWJlbF9zdGF0YV9lb2VcIiIpCisoZGVmdmFyIG9y Zy1iYWJlbC1zdGF0YS1lb2Utb3V0cHV0ICJvcmdfYmFiZWxfc3RhdGFfZW9lIikKKworKGRlZnZh ciBvcmctYmFiZWwtc3RhdGEtd3JpdGUtb2JqZWN0LWNvbW1hbmQgIm91dHNoZWV0IHVzaW5nIFwi JXNcIiIpCisKKyhkZWZ1biBvcmctYmFiZWwtc3RhdGEtZXZhbHVhdGUKKyAgKHNlc3Npb24gYm9k eSByZXN1bHQtdHlwZSByZXN1bHQtcGFyYW1zIGNvbHVtbi1uYW1lcy1wIHJvdy1uYW1lcy1wKQor ICAiRXZhbHVhdGUgc3RhdGEgY29kZSBpbiBCT0RZLiIKKyAgKGlmIHNlc3Npb24KKyAgICAgIChv cmctYmFiZWwtc3RhdGEtZXZhbHVhdGUtc2Vzc2lvbgorICAgICAgIHNlc3Npb24gYm9keSByZXN1 bHQtdHlwZSByZXN1bHQtcGFyYW1zIGNvbHVtbi1uYW1lcy1wIHJvdy1uYW1lcy1wKQorICAgIChv cmctYmFiZWwtc3RhdGEtZXZhbHVhdGUtZXh0ZXJuYWwtcHJvY2VzcworICAgICBib2R5IHJlc3Vs dC10eXBlIHJlc3VsdC1wYXJhbXMgY29sdW1uLW5hbWVzLXAgcm93LW5hbWVzLXApKSkKKworKGRl ZnVuIG9yZy1iYWJlbC1zdGF0YS1ldmFsdWF0ZS1leHRlcm5hbC1wcm9jZXNzCisgIChib2R5IHJl c3VsdC10eXBlIHJlc3VsdC1wYXJhbXMgY29sdW1uLW5hbWVzLXAgcm93LW5hbWVzLXApCisgICJF dmFsdWF0ZSBCT0RZIGluIGV4dGVybmFsIHN0YXRhIHByb2Nlc3MuCitJZiBSRVNVTFQtVFlQRSBl cXVhbHMgJ291dHB1dCB0aGVuIHJldHVybiBzdGFuZGFyZCBvdXRwdXQgYXMgYQorc3RyaW5nLiAg SWYgUkVTVUxULVRZUEUgZXF1YWxzICd2YWx1ZSB0aGVuIHJldHVybiB0aGUgdmFsdWUgb2YgdGhl CitsYXN0IHN0YXRlbWVudCBpbiBCT0RZLCBhcyBlbGlzcC4iCisgIChjYXNlIHJlc3VsdC10eXBl CisgICAgKHZhbHVlCisgICAgIChsZXQgKCh0bXAtZmlsZSAob3JnLWJhYmVsLXRlbXAtZmlsZSAi c3RhdGEtIikpKQorICAgICAgIChvcmctYmFiZWwtZXZhbCBvcmctYmFiZWwtc3RhdGEtY29tbWFu ZAorCQkgICAgICAgKGZvcm1hdCBvcmctYmFiZWwtc3RhdGEtd3JpdGUtb2JqZWN0LWNvbW1hbmQK KwkJCSAgICAgICAob3JnLWJhYmVsLXByb2Nlc3MtZmlsZS1uYW1lIHRtcC1maWxlICdub3F1b3Rl KQorCQkJICAgICAgIChmb3JtYXQgImJlZ2luXG4lc1xuZW5kIiBib2R5KSkpCisgICAgICAgKG9y Zy1iYWJlbC1zdGF0YS1wcm9jZXNzLXZhbHVlLXJlc3VsdAorCShvcmctYmFiZWwtcmVzdWx0LWNv bmQgcmVzdWx0LXBhcmFtcworCSAgKHdpdGgtdGVtcC1idWZmZXIKKwkgICAgKGluc2VydC1maWxl LWNvbnRlbnRzIHRtcC1maWxlKQorCSAgICAoYnVmZmVyLXN0cmluZykpCisJICAob3JnLWJhYmVs LWltcG9ydC1lbGlzcC1mcm9tLWZpbGUgdG1wLWZpbGUgJyg0KSkpCisJY29sdW1uLW5hbWVzLXAp KSkKKyAgICAob3V0cHV0IChvcmctYmFiZWwtZXZhbCBvcmctYmFiZWwtc3RhdGEtY29tbWFuZCBi b2R5KSkpKQorCisoZGVmdW4gb3JnLWJhYmVsLXN0YXRhLWV2YWx1YXRlLXNlc3Npb24KKyAgKHNl c3Npb24gYm9keSByZXN1bHQtdHlwZSByZXN1bHQtcGFyYW1zIGNvbHVtbi1uYW1lcy1wIHJvdy1u YW1lcy1wKQorICAiRXZhbHVhdGUgQk9EWSBpbiBTRVNTSU9OLgorSWYgUkVTVUxULVRZUEUgZXF1 YWxzICdvdXRwdXQgdGhlbiByZXR1cm4gc3RhbmRhcmQgb3V0cHV0IGFzIGEKK3N0cmluZy4gIElm IFJFU1VMVC1UWVBFIGVxdWFscyAndmFsdWUgdGhlbiByZXR1cm4gdGhlIHZhbHVlIG9mIHRoZQor bGFzdCBzdGF0ZW1lbnQgaW4gQk9EWSwgYXMgZWxpc3AuIgorICAoY2FzZSByZXN1bHQtdHlwZQor ICAgICh2YWx1ZQorICAgICAod2l0aC10ZW1wLWJ1ZmZlcgorICAgICAgIChpbnNlcnQgKG9yZy1i YWJlbC1jaG9tcCBib2R5KSkKKyAgICAgICAobGV0ICgoZXNzLWxvY2FsLXByb2Nlc3MtbmFtZQor CSAgICAgIChwcm9jZXNzLW5hbWUgKGdldC1idWZmZXItcHJvY2VzcyBzZXNzaW9uKSkpCisJICAg ICAoZXNzLWV2YWwtdmlzaWJseS1wIG5pbCkpCisJIChlc3MtZXZhbC1idWZmZXIgbmlsKSkpCisg ICAgIChsZXQgKCh0bXAtZmlsZSAob3JnLWJhYmVsLXRlbXAtZmlsZSAic3RhdGEtIikpKQorICAg ICAgIChvcmctYmFiZWwtY29taW50LWV2YWwtaW52aXNpYmx5LWFuZC13YWl0LWZvci1maWxlCisJ c2Vzc2lvbiB0bXAtZmlsZQorCShmb3JtYXQgb3JnLWJhYmVsLXN0YXRhLXdyaXRlLW9iamVjdC1j b21tYW5kCisJCShvcmctYmFiZWwtcHJvY2Vzcy1maWxlLW5hbWUgdG1wLWZpbGUgJ25vcXVvdGUp ICJhbnMiKSkKKyAgICAgICAob3JnLWJhYmVsLXN0YXRhLXByb2Nlc3MtdmFsdWUtcmVzdWx0CisJ KG9yZy1iYWJlbC1yZXN1bHQtY29uZCByZXN1bHQtcGFyYW1zCisJICAod2l0aC10ZW1wLWJ1ZmZl cgorCSAgICAoaW5zZXJ0LWZpbGUtY29udGVudHMgdG1wLWZpbGUpCisJICAgIChidWZmZXItc3Ry aW5nKSkKKwkgIChvcmctYmFiZWwtaW1wb3J0LWVsaXNwLWZyb20tZmlsZSB0bXAtZmlsZSAnKDQp KSkKKwljb2x1bW4tbmFtZXMtcCkpKQorICAgIChvdXRwdXQKKyAgICAgKG1hcGNvbmNhdAorICAg ICAgIydvcmctYmFiZWwtY2hvbXAKKyAgICAgIChidXRsYXN0CisgICAgICAgKGRlbHEgbmlsCisJ ICAgICAobWFwY2FyCisJICAgICAgKGxhbWJkYSAobGluZSkgKHdoZW4gKD4gKGxlbmd0aCBsaW5l KSAwKSBsaW5lKSkKKwkgICAgICAobWFwY2FyCisJICAgICAgIChsYW1iZGEgKGxpbmUpIDs7IGNs ZWFudXAgZXh0cmEgcHJvbXB0cyBsZWZ0IGluIG91dHB1dAorCQkgKGlmIChzdHJpbmctbWF0Y2gK KwkJICAgICAgIl5cXChbIF0qWz4rXFwuXVsgXT9cXCkrXFwoW1swLTldK1xcfFsgXVxcKSIgbGlu ZSkKKwkJICAgICAoc3Vic3RyaW5nIGxpbmUgKG1hdGNoLWVuZCAxKSkKKwkJICAgbGluZSkpCisJ ICAgICAgIChvcmctYmFiZWwtY29taW50LXdpdGgtb3V0cHV0IChzZXNzaW9uIG9yZy1iYWJlbC1z dGF0YS1lb2Utb3V0cHV0KQorCQkgKGluc2VydCAobWFwY29uY2F0ICMnb3JnLWJhYmVsLWNob21w CisJCQkJICAgIChsaXN0IGJvZHkgb3JnLWJhYmVsLXN0YXRhLWVvZS1pbmRpY2F0b3IpCisJCQkJ ICAgICJcbiIpKQorCQkgKGluZmVyaW9yLWVzcy1zZW5kLWlucHV0KSkpKSkpICJcbiIpKSkpCisK KyhkZWZ1biBvcmctYmFiZWwtc3RhdGEtcHJvY2Vzcy12YWx1ZS1yZXN1bHQgKHJlc3VsdCBjb2x1 bW4tbmFtZXMtcCkKKyAgInN0YXRhLXNwZWNpZmljIHByb2Nlc3Npbmcgb2YgcmV0dXJuIHZhbHVl LgorSW5zZXJ0IGhsaW5lIGlmIGNvbHVtbiBuYW1lcyBpbiBvdXRwdXQgaGF2ZSBiZWVuIHJlcXVl c3RlZC4iCisgIChpZiBjb2x1bW4tbmFtZXMtcAorICAgICAgKGNvbnMgKGNhciByZXN1bHQpIChj b25zICdobGluZSAoY2RyIHJlc3VsdCkpKQorICAgIHJlc3VsdCkpCisKKyhwcm92aWRlICdvYi1z dGF0YSkKKworOzs7IG9iLXN0YXRhLmVsIGVuZHMgaGVyZQotLSAKMi4wLjMKCg== --047d7b414a8eaf4bbd04ff6fb76a--