From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ista Zahn Subject: Re: Enabling another language in org-babel Date: Mon, 28 Jul 2014 17:29:00 -0400 Message-ID: References: <87ionqhelv.fsf@wivenhoe.ul.ie> <87lhsmefj9.fsf@gmail.com> <87vbrpl76d.fsf@bzg.ath.cx> <878und1jm8.fsf@bzg.ath.cx> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=001a11c2e224bcbd6c04ff479de0 Return-path: Received: from eggs.gnu.org ([2001:4830:134:3::10]:51440) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1XBsU0-0004mi-64 for emacs-orgmode@gnu.org; Mon, 28 Jul 2014 17:29:25 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1XBsTx-0006w8-Sw for emacs-orgmode@gnu.org; Mon, 28 Jul 2014 17:29:24 -0400 In-Reply-To: <878und1jm8.fsf@bzg.ath.cx> 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: Bastien Cc: "G. Jay Kerns" , emacs-orgmode , brendan.halpin@ul.ie, Eric Schulte --001a11c2e224bcbd6c04ff479de0 Content-Type: text/plain; charset=UTF-8 Hi all, Please find code attached that implements stata support in org-babel. The attached ob-stata.el is a modified version of ob-julia.el. It currently supports evaluation of stata code from babel code blocks with ':results output' (and this has been set as the default). Neither ':results value' nor ':results graphics' work. I suspect that ':results value' doen't make sense for stata, in which case all the value-specific stuff should be removed. I would like to eventually get ':results graphics' working, but have not yet implemented it. If there are no objections I would like to add this to contrib. Best, Ista On Mon, Jul 28, 2014 at 9:20 AM, Bastien wrote: > Hi Ista, > > Ista Zahn writes: > >> I don't know if this is ready for contrib yet (though I don't object >> if you think it is). I'm not sure what quality standards exist for >> contrib, but this is really quick and dirty; it would be nice to at >> least implement graphics support. On the other hand its better than >> nothing, so maybe it does make sense to add it to contrib. > > Yes, it makes sense to add it to contrib, it will help others step up > and improve the code if needed. > >> Also I'm not sure what the development process is once things go in >> contrib (sorry for my ignorance!). Does contrib live in the same code >> repository as the rest of org, or are things in contrib developed >> separately and pulled in later? > > contrib/ lives in the same Git repository than the rest of Org (which > is arguably a problem). So everything is developed at the same place. > > Once you send me your public key, I'll grant you write access to the > repository and you can push commits. > >> In short feel free to add it to contrib if you want, but be aware that >> it is in pretty rough shape. > > Please provide a separate commit on the list for this piece of code, > so that we can review it and commit it. And if you want to get push > access, please send me your public key. > > Thanks! > > -- > Bastien --001a11c2e224bcbd6c04ff479de0 Content-Type: text/x-emacs-lisp; charset=US-ASCII; name="ob-stata.el" Content-Disposition: attachment; filename="ob-stata.el" Content-Transfer-Encoding: base64 X-Attachment-Id: f_hy6b5ia70 Ozs7IG9iLXN0YXRhLmVsIC0tLSBvcmctYmFiZWwgZnVuY3Rpb25zIGZvciBzdGF0YSBjb2RlIGV2 YWx1YXRpb24KCjs7IENvcHlyaWdodCAoQykgMjAxNCBJc3RhIFphaG4KOzsgQXV0aG9yOiBJc3Rh IFphaG4sIGJhc2VkIG9uIG9iLWp1bGlhLmVsIGJ5IEcuIEpheSBLZXJucywgYW5kIG9iLVIuZWwK OzsgYnkgRXJpYyBTY2h1bHRlIGFuZCBEYW4gRGF2aXNvbgoKCjs7IFRoaXMgZmlsZSBpcyBub3Qg cGFydCBvZiBHTlUgRW1hY3MuCgo7OyBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91 IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQo7OyBpdCB1bmRlciB0aGUgdGVybXMg b2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQo7OyB0aGUg RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzLCBvciAoYXQgeW91ciBv cHRpb24pCjs7IGFueSBsYXRlciB2ZXJzaW9uLgo7Owo7OyBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKOzsgYnV0IFdJVEhPVVQg QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKOzsgTUVS Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo ZQo7OyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgo7Owo7OyBZ b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZQo7OyBhbG9uZyB3aXRoIEdOVSBFbWFjczsgc2VlIHRoZSBmaWxlIENPUFlJTkcuICBJ ZiBub3QsIHdyaXRlIHRvIHRoZQo7OyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUx IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCjs7IEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg VVNBLgoKOzs7IENvbW1lbnRhcnk6Cgo7OyBUaGUgZmlsZSBwcm92aWRlcyBPcmctQmFiZWwgc3Vw cG9ydCBmb3IgZXZhbHVhdGluZyBzdGF0YSBjb2RlLgo7OyBJdCBpcyBiYXNpY2FsbHkgcmVzdWx0 IG9mIGZpbmQtYW5kLXJlcGxhY2UgInN0YXRhIiBmb3IgImp1bGlhIgo7OyBpbiBvYi1qdWxpYS5l bCBieSBHLiBKYXkgS2VybnMuIE9ubHkgIjpyZXN1bHRzIG91dHB1dCIgd29ya3M6IHRoZQo7OyBo ZWFkZXIgYXJncyBtdXN0IGluY2x1ZGUgIjpyZXN1bHRzIG91dHB1dCIgKHRoaXMgaXMgdGhlIGRl ZmF1bHQpLgo7OyBOb3RlIHRoYXQgSSdtIG5vdCBzdXJlICc6cmVzdWx0cyB2YWx1ZScgbWFrZXMg c2Vuc2Ugb3IgaXMgdXNlZnVsIAo7OyBidXQgSSBoYXZlIGxlZnQgYWxsIHRoZSB2YWx1ZS1wcm9j ZXNzaW5nIHN0dWZmIGluaGVyaXRlZCBmcm9tIAo7OyBvYi1qdWxpYSBhbmQgb2ItUi4gJzpyZXN1 bHRzIGdyYXBoaWNzJyB3b3VsZCBiZSBuaWNlLCBidXQgSSBoYXZlCjs7IG5vdCB0cmllZCB0byBp bXBsZW1lbnQgaXQuCgo7OzsgUmVxdWlyZW1lbnRzOgoKOzsgU3RhdGEgYW5kIEVTUyBhcmUgcmVx dWlyZWQuCgo7OzsgQ29kZToKKHJlcXVpcmUgJ29iKQooZXZhbC13aGVuLWNvbXBpbGUgKHJlcXVp cmUgJ2NsKSkKCihkZWNsYXJlLWZ1bmN0aW9uIG9yZ3RibC10by1jc3YgIm9yZy10YWJsZSIgKHRh YmxlIHBhcmFtcykpCihkZWNsYXJlLWZ1bmN0aW9uIHN0YXRhICJleHQ6ZXNzLXN0YXRhIiAoJm9w dGlvbmFsIHN0YXJ0LWFyZ3MpKQooZGVjbGFyZS1mdW5jdGlvbiBpbmZlcmlvci1lc3Mtc2VuZC1p bnB1dCAiZXh0OmVzcy1pbmYiICgpKQooZGVjbGFyZS1mdW5jdGlvbiBlc3MtbWFrZS1idWZmZXIt Y3VycmVudCAiZXh0OmVzcy1pbmYiICgpKQooZGVjbGFyZS1mdW5jdGlvbiBlc3MtZXZhbC1idWZm ZXIgImV4dDplc3MtaW5mIiAodmlzKSkKKGRlY2xhcmUtZnVuY3Rpb24gb3JnLW51bWJlci1zZXF1 ZW5jZSAib3JnLWNvbXBhdCIgKGZyb20gJm9wdGlvbmFsIHRvIGluYykpCihkZWNsYXJlLWZ1bmN0 aW9uIG9yZy1yZW1vdmUtaWYtbm90ICJvcmciIChwcmVkaWNhdGUgc2VxKSkKCihkZWZjb25zdCBv cmctYmFiZWwtaGVhZGVyLWFyZ3M6c3RhdGEKICAnKCh3aWR0aAkJIC4gOmFueSkKICAgIChob3Jp em9udGFsCQkgLiA6YW55KQogICAgKHJlc3VsdHMgICAgICAgICAgICAgLiAoKGZpbGUgbGlzdCB2 ZWN0b3IgdGFibGUgc2NhbGFyIHZlcmJhdGltKQoJCQkgICAgKHJhdyBvcmcgaHRtbCBsYXRleCBj b2RlIHBwIHdyYXApCgkJCSAgICAocmVwbGFjZSBzaWxlbnQgYXBwZW5kIHByZXBlbmQpCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7OyBOT1RFOiBub3Qgc3VyZSAndmFsdWUnIG1ha2VzIHNl bnNlIGluIHN0YXRhCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyB3ZSBtYXkgd2FudCB0 byByZW1vdmUgaXQgZnJvbSB0aGUgbGlzdAoJCQkgICAgKG91dHB1dCB2YWx1ZSBncmFwaGljcykp KSkKICAic3RhdGEtc3BlY2lmaWMgaGVhZGVyIGFyZ3VtZW50cy4iKQoKKGFkZC10by1saXN0ICdv cmctYmFiZWwtdGFuZ2xlLWxhbmctZXh0cyAnKCJzdGF0YSIgLiAiZG8iKSkKCjs7IG9ubHkgJzpy ZXN1bHRzIG91dHB1dCcgY3VycmVudGx5IHdvcmtzLCBzbyBtYWtlIHRoYXQgdGhlIGRlZmF1bHQK KGRlZnZhciBvcmctYmFiZWwtZGVmYXVsdC1oZWFkZXItYXJnczpzdGF0YSAnKCg6cmVzdWx0cyAu ICJvdXRwdXQiKSkpCgooZGVmY3VzdG9tIG9yZy1iYWJlbC1zdGF0YS1jb21tYW5kIGluZmVyaW9y LVNUQS1wcm9ncmFtLW5hbWUKICAiTmFtZSBvZiBjb21tYW5kIHRvIHVzZSBmb3IgZXhlY3V0aW5n IHN0YXRhIGNvZGUuIgogIDpncm91cCAnb3JnLWJhYmVsCiAgOnZlcnNpb24gIjI0LjQiCiAgOnBh Y2thZ2UtdmVyc2lvbiAnKE9yZyAuICI4LjAiKQogIDp0eXBlICdzdHJpbmcpCgooZGVmdmFyIGVz cy1sb2NhbC1wcm9jZXNzLW5hbWUpIDsgZHluYW1pY2FsbHkgc2NvcGVkCihkZWZ1biBvcmctYmFi ZWwtZWRpdC1wcmVwOnN0YXRhIChpbmZvKQogIChsZXQgKChzZXNzaW9uIChjZHIgKGFzc29jIDpz ZXNzaW9uIChudGggMiBpbmZvKSkpKSkKICAgICh3aGVuIChhbmQgc2Vzc2lvbiAoc3RyaW5nLW1h dGNoICJeXFwqXFwoLis/XFwpXFwqJCIgc2Vzc2lvbikpCiAgICAgIChzYXZlLW1hdGNoLWRhdGEg KG9yZy1iYWJlbC1zdGF0YS1pbml0aWF0ZS1zZXNzaW9uIHNlc3Npb24gbmlsKSkpKSkKCihkZWZ1 biBvcmctYmFiZWwtZXhwYW5kLWJvZHk6c3RhdGEgKGJvZHkgcGFyYW1zICZvcHRpb25hbCBncmFw aGljcy1maWxlKQogICJFeHBhbmQgQk9EWSBhY2NvcmRpbmcgdG8gUEFSQU1TLCByZXR1cm4gdGhl IGV4cGFuZGVkIGJvZHkuIgogIChsZXQgKChncmFwaGljcy1maWxlCgkgKG9yIGdyYXBoaWNzLWZp bGUgKG9yZy1iYWJlbC1zdGF0YS1ncmFwaGljYWwtb3V0cHV0LWZpbGUgcGFyYW1zKSkpKQogICAg KG1hcGNvbmNhdAogICAgICMnaWRlbnRpdHkKICAgICAoKGxhbWJkYSAoaW5zaWRlKQoJKGlmIGdy YXBoaWNzLWZpbGUKICAgICAgICAgICAgaW5zaWRlCgkgIGluc2lkZSkpCiAgICAgIChhcHBlbmQg KG9yZy1iYWJlbC12YXJpYWJsZS1hc3NpZ25tZW50czpzdGF0YSBwYXJhbXMpCgkgICAgICAobGlz dCBib2R5KSkpICJcbiIpKSkKCihkZWZ1biBvcmctYmFiZWwtZXhlY3V0ZTpzdGF0YSAoYm9keSBw YXJhbXMpCiAgIkV4ZWN1dGUgYSBibG9jayBvZiBzdGF0YSBjb2RlLgpUaGlzIGZ1bmN0aW9uIGlz IGNhbGxlZCBieSBgb3JnLWJhYmVsLWV4ZWN1dGUtc3JjLWJsb2NrJy4iCiAgKHNhdmUtZXhjdXJz aW9uCiAgICAobGV0KiAoKHJlc3VsdC1wYXJhbXMgKGNkciAoYXNzb2MgOnJlc3VsdC1wYXJhbXMg cGFyYW1zKSkpCgkgICAocmVzdWx0LXR5cGUgKGNkciAoYXNzb2MgOnJlc3VsdC10eXBlIHBhcmFt cykpKQogICAgICAgICAgIChzZXNzaW9uIChvcmctYmFiZWwtc3RhdGEtaW5pdGlhdGUtc2Vzc2lv bgoJCSAgICAgKGNkciAoYXNzb2MgOnNlc3Npb24gcGFyYW1zKSkgcGFyYW1zKSkKCSAgIChjb2xu YW1lcy1wIChjZHIgKGFzc29jIDpjb2xuYW1lcyBwYXJhbXMpKSkKCSAgIChyb3duYW1lcy1wIChj ZHIgKGFzc29jIDpyb3duYW1lcyBwYXJhbXMpKSkKCSAgIChncmFwaGljcy1maWxlIChvcmctYmFi ZWwtc3RhdGEtZ3JhcGhpY2FsLW91dHB1dC1maWxlIHBhcmFtcykpCgkgICAoZnVsbC1ib2R5IChv cmctYmFiZWwtZXhwYW5kLWJvZHk6c3RhdGEgYm9keSBwYXJhbXMgZ3JhcGhpY3MtZmlsZSkpCgkg ICAocmVzdWx0CgkgICAgKG9yZy1iYWJlbC1zdGF0YS1ldmFsdWF0ZQoJICAgICBzZXNzaW9uIGZ1 bGwtYm9keSByZXN1bHQtdHlwZSByZXN1bHQtcGFyYW1zCgkgICAgIChvciAoZXF1YWwgInllcyIg Y29sbmFtZXMtcCkKCQkgKG9yZy1iYWJlbC1waWNrLW5hbWUKCQkgIChjZHIgKGFzc29jIDpjb2xu YW1lLW5hbWVzIHBhcmFtcykpIGNvbG5hbWVzLXApKQoJICAgICAob3IgKGVxdWFsICJ5ZXMiIHJv d25hbWVzLXApCgkJIChvcmctYmFiZWwtcGljay1uYW1lCgkJICAoY2RyIChhc3NvYyA6cm93bmFt ZS1uYW1lcyBwYXJhbXMpKSByb3duYW1lcy1wKSkpKSkKICAgICAgKGlmIGdyYXBoaWNzLWZpbGUg bmlsIHJlc3VsdCkpKSkKCihkZWZ1biBvcmctYmFiZWwtcHJlcC1zZXNzaW9uOnN0YXRhIChzZXNz aW9uIHBhcmFtcykKICAiUHJlcGFyZSBTRVNTSU9OIGFjY29yZGluZyB0byB0aGUgaGVhZGVyIGFy Z3VtZW50cyBzcGVjaWZpZWQgaW4gUEFSQU1TLiIKICAobGV0KiAoKHNlc3Npb24gKG9yZy1iYWJl bC1zdGF0YS1pbml0aWF0ZS1zZXNzaW9uIHNlc3Npb24gcGFyYW1zKSkKCSAodmFyLWxpbmVzIChv cmctYmFiZWwtdmFyaWFibGUtYXNzaWdubWVudHM6c3RhdGEgcGFyYW1zKSkpCiAgICAob3JnLWJh YmVsLWNvbWludC1pbi1idWZmZXIgc2Vzc2lvbgogICAgICAobWFwYyAobGFtYmRhICh2YXIpCiAg ICAgICAgICAgICAgKGVuZC1vZi1saW5lIDEpIChpbnNlcnQgdmFyKSAoY29taW50LXNlbmQtaW5w dXQgbmlsIHQpCiAgICAgICAgICAgICAgKG9yZy1iYWJlbC1jb21pbnQtd2FpdC1mb3Itb3V0cHV0 IHNlc3Npb24pKSB2YXItbGluZXMpKQogICAgc2Vzc2lvbikpCgooZGVmdW4gb3JnLWJhYmVsLWxv YWQtc2Vzc2lvbjpzdGF0YSAoc2Vzc2lvbiBib2R5IHBhcmFtcykKICAiTG9hZCBCT0RZIGludG8g U0VTU0lPTi4iCiAgKHNhdmUtd2luZG93LWV4Y3Vyc2lvbgogICAgKGxldCAoKGJ1ZmZlciAob3Jn LWJhYmVsLXByZXAtc2Vzc2lvbjpzdGF0YSBzZXNzaW9uIHBhcmFtcykpKQogICAgICAod2l0aC1j dXJyZW50LWJ1ZmZlciBidWZmZXIKICAgICAgICAoZ290by1jaGFyIChwcm9jZXNzLW1hcmsgKGdl dC1idWZmZXItcHJvY2VzcyAoY3VycmVudC1idWZmZXIpKSkpCiAgICAgICAgKGluc2VydCAob3Jn LWJhYmVsLWNob21wIGJvZHkpKSkKICAgICAgYnVmZmVyKSkpCgo7OyBoZWxwZXIgZnVuY3Rpb25z CgooZGVmdW4gb3JnLWJhYmVsLXZhcmlhYmxlLWFzc2lnbm1lbnRzOnN0YXRhIChwYXJhbXMpCiAg IlJldHVybiBsaXN0IG9mIHN0YXRhIHN0YXRlbWVudHMgYXNzaWduaW5nIHRoZSBibG9jaydzIHZh cmlhYmxlcy4iCiAgKGxldCAoKHZhcnMgKG1hcGNhciAjJ2NkciAob3JnLWJhYmVsLWdldC1oZWFk ZXIgcGFyYW1zIDp2YXIpKSkpCiAgICAobWFwY2FyCiAgICAgKGxhbWJkYSAocGFpcikKICAgICAg IChvcmctYmFiZWwtc3RhdGEtYXNzaWduLWVsaXNwCgkoY2FyIHBhaXIpIChjZHIgcGFpcikKCShl cXVhbCAieWVzIiAoY2RyIChhc3NvYyA6Y29sbmFtZXMgcGFyYW1zKSkpCgkoZXF1YWwgInllcyIg KGNkciAoYXNzb2MgOnJvd25hbWVzIHBhcmFtcykpKSkpCiAgICAgKG1hcGNhcgogICAgICAobGFt YmRhIChpKQoJKGNvbnMgKGNhciAobnRoIGkgdmFycykpCgkgICAgICAob3JnLWJhYmVsLXJlYXNz ZW1ibGUtdGFibGUKCSAgICAgICAoY2RyIChudGggaSB2YXJzKSkKCSAgICAgICAoY2RyIChudGgg aSAoY2RyIChhc3NvYyA6Y29sbmFtZS1uYW1lcyBwYXJhbXMpKSkpCgkgICAgICAgKGNkciAobnRo IGkgKGNkciAoYXNzb2MgOnJvd25hbWUtbmFtZXMgcGFyYW1zKSkpKSkpKQogICAgICAob3JnLW51 bWJlci1zZXF1ZW5jZSAwICgxLSAobGVuZ3RoIHZhcnMpKSkpKSkpCgooZGVmdW4gb3JnLWJhYmVs LXN0YXRhLXF1b3RlLWNzdi1maWVsZCAocykKICAiUXVvdGUgZmllbGQgUyBmb3IgZXhwb3J0IHRv IHN0YXRhLiIKICAoaWYgKHN0cmluZ3AgcykKICAgICAgKGNvbmNhdCAiXCIiIChtYXBjb25jYXQg J2lkZW50aXR5IChzcGxpdC1zdHJpbmcgcyAiXCIiKSAiXCJcIiIpICJcIiIpCiAgICAoZm9ybWF0 ICIlUyIgcykpKQoKKGRlZnVuIG9yZy1iYWJlbC1zdGF0YS1hc3NpZ24tZWxpc3AgKG5hbWUgdmFs dWUgY29sbmFtZXMtcCByb3duYW1lcy1wKQogICJDb25zdHJ1Y3Qgc3RhdGEgY29kZSBhc3NpZ25p bmcgdGhlIGVsaXNwIFZBTFVFIHRvIGEgdmFyaWFibGUgbmFtZWQgTkFNRS4iCiAgKGlmIChsaXN0 cCB2YWx1ZSkKICAgICAgKGxldCAoKG1heCAoYXBwbHkgIydtYXggKG1hcGNhciAjJ2xlbmd0aCAo b3JnLXJlbW92ZS1pZi1ub3QKCQkJCQkJIydzZXF1ZW5jZXAgdmFsdWUpKSkpCgkgICAgKG1pbiAo YXBwbHkgIydtaW4gKG1hcGNhciAjJ2xlbmd0aCAob3JnLXJlbW92ZS1pZi1ub3QKCQkJCQkJIydz ZXF1ZW5jZXAgdmFsdWUpKSkpCgkgICAgKHRyYW5zaXRpb24tZmlsZSAob3JnLWJhYmVsLXRlbXAt ZmlsZSAic3RhdGEtaW1wb3J0LSIpKSkKICAgICAgICA7OyBlbnN1cmUgVkFMVUUgaGFzIGFuIG9y Z3RibCBzdHJ1Y3R1cmUgKGRlcHRoIG9mIGF0IGxlYXN0IDIpCiAgICAgICAgKHVubGVzcyAobGlz dHAgKGNhciB2YWx1ZSkpIChzZXRxIHZhbHVlIChsaXN0IHZhbHVlKSkpCiAgICAgICAgKHdpdGgt dGVtcC1maWxlIHRyYW5zaXRpb24tZmlsZQogICAgICAgICAgKGluc2VydAoJICAgKG9yZ3RibC10 by1jc3YgdmFsdWUgJyg6Zm10IG9yZy1iYWJlbC1zdGF0YS1xdW90ZS1jc3YtZmllbGQpKQoJICAg IlxuIikpCgkobGV0ICgoZmlsZSAob3JnLWJhYmVsLXByb2Nlc3MtZmlsZS1uYW1lIHRyYW5zaXRp b24tZmlsZSAnbm9xdW90ZSkpCgkgICAgICAoaGVhZGVyIChpZiAob3IgKGVxIChudGggMSB2YWx1 ZSkgJ2hsaW5lKSBjb2xuYW1lcy1wKQoJCQkgICJUUlVFIiAiRkFMU0UiKSkKCSAgICAgIChyb3ct bmFtZXMgKGlmIHJvd25hbWVzLXAgIjEiICJOVUxMIikpKQoJICAoaWYgKD0gbWF4IG1pbikKCSAg ICAgIChmb3JtYXQgIiVzID0gaW5zaGVldCB1c2luZyBcIiVzXCIiIG5hbWUgZmlsZSkKCSAgICAo Zm9ybWF0ICIlcyA9IGluc2hlZXQgdXNpbmcgXCIlc1wiIgoJCSAgICBuYW1lIGZpbGUpKSkpCiAg ICAoZm9ybWF0ICIlcyA9ICVzIiBuYW1lIChvcmctYmFiZWwtc3RhdGEtcXVvdGUtY3N2LWZpZWxk IHZhbHVlKSkpKQoKKGRlZnZhciBlc3MtYXNrLWZvci1lc3MtZGlyZWN0b3J5KSA7IGR5bmFtaWNh bGx5IHNjb3BlZAoKKGRlZnVuIG9yZy1iYWJlbC1zdGF0YS1pbml0aWF0ZS1zZXNzaW9uIChzZXNz aW9uIHBhcmFtcykKICAiSWYgdGhlcmUgaXMgbm90IGEgY3VycmVudCBzdGF0YSBwcm9jZXNzIHRo ZW4gY3JlYXRlIG9uZS4iCiAgKHVubGVzcyAoc3RyaW5nPSBzZXNzaW9uICJub25lIikKICAgIChs ZXQgKChzZXNzaW9uIChvciBzZXNzaW9uICIqc3RhdGEqIikpCgkgIChlc3MtYXNrLWZvci1lc3Mt ZGlyZWN0b3J5CgkgICAoYW5kIChhbmQgKGJvdW5kcCAnZXNzLWFzay1mb3ItZXNzLWRpcmVjdG9y eSkgZXNzLWFzay1mb3ItZXNzLWRpcmVjdG9yeSkKCQkobm90IChjZHIgKGFzc29jIDpkaXIgcGFy YW1zKSkpKSkpCiAgICAgIChpZiAob3JnLWJhYmVsLWNvbWludC1idWZmZXItbGl2ZXAgc2Vzc2lv bikKCSAgc2Vzc2lvbgoJKHNhdmUtd2luZG93LWV4Y3Vyc2lvbgoJICAocmVxdWlyZSAnZXNzKSAo c3RhdGEpCgkgIChyZW5hbWUtYnVmZmVyCgkgICAoaWYgKGJ1ZmZlcnAgc2Vzc2lvbikKCSAgICAg ICAoYnVmZmVyLW5hbWUgc2Vzc2lvbikKCSAgICAgKGlmIChzdHJpbmdwIHNlc3Npb24pCgkJIHNl c3Npb24KCSAgICAgICAoYnVmZmVyLW5hbWUpKSkpCgkgIChjdXJyZW50LWJ1ZmZlcikpKSkpKQoK KGRlZnVuIG9yZy1iYWJlbC1zdGF0YS1hc3NvY2lhdGUtc2Vzc2lvbiAoc2Vzc2lvbikKICAiQXNz b2NpYXRlIHN0YXRhIGNvZGUgYnVmZmVyIHdpdGggYSBzdGF0YSBzZXNzaW9uLgpNYWtlIFNFU1NJ T04gYmUgdGhlIGluZmVyaW9yIEVTUyBwcm9jZXNzIGFzc29jaWF0ZWQgd2l0aCB0aGUKY3VycmVu dCBjb2RlIGJ1ZmZlci4iCiAgKHNldHEgZXNzLWxvY2FsLXByb2Nlc3MtbmFtZQoJKHByb2Nlc3Mt bmFtZSAoZ2V0LWJ1ZmZlci1wcm9jZXNzIHNlc3Npb24pKSkKICAoZXNzLW1ha2UtYnVmZmVyLWN1 cnJlbnQpKQoKKGRlZnVuIG9yZy1iYWJlbC1zdGF0YS1ncmFwaGljYWwtb3V0cHV0LWZpbGUgKHBh cmFtcykKICAiTmFtZSBvZiBmaWxlIHRvIHdoaWNoIHN0YXRhIHNob3VsZCBzZW5kIGdyYXBoaWNh bCBvdXRwdXQuIgogIChhbmQgKG1lbWJlciAiZ3JhcGhpY3MiIChjZHIgKGFzc3EgOnJlc3VsdC1w YXJhbXMgcGFyYW1zKSkpCiAgICAgICAoY2RyIChhc3NxIDpmaWxlIHBhcmFtcykpKSkKCihkZWZ2 YXIgb3JnLWJhYmVsLXN0YXRhLWVvZS1pbmRpY2F0b3IgImRpc3BsYXkgXCJvcmdfYmFiZWxfc3Rh dGFfZW9lXCIiKQooZGVmdmFyIG9yZy1iYWJlbC1zdGF0YS1lb2Utb3V0cHV0ICJvcmdfYmFiZWxf c3RhdGFfZW9lIikKCihkZWZ2YXIgb3JnLWJhYmVsLXN0YXRhLXdyaXRlLW9iamVjdC1jb21tYW5k ICJvdXRzaGVldCB1c2luZyBcIiVzXCIiKQoKOzsgVGhlIGZvbGxvd2luZyB3YXMgYSB2ZXJ5IGNv bXBsaWNhdGVkIHdyaXRlIG9iamVjdCBjb21tYW5kCjs7IFRoZSByZXBsYWNlbWVudCBuZWVkcyB0 byBhZGQgZXJyb3IgY2F0Y2hpbmcKOyhkZWZ2YXIgb3JnLWJhYmVsLXN0YXRhLXdyaXRlLW9iamVj dC1jb21tYW5kICJ7ZnVuY3Rpb24ob2JqZWN0LHRyYW5zZmVyLmZpbGUpe29iamVjdDtpbnZpc2li bGUoaWYoaW5oZXJpdHModHJ5KHt0ZmlsZTwtdGVtcGZpbGUoKTt3cml0ZS50YWJsZShvYmplY3Qs ZmlsZT10ZmlsZSxzZXA9XCJcXHRcIixuYT1cIm5pbFwiLHJvdy5uYW1lcz0lcyxjb2wubmFtZXM9 JXMscXVvdGU9RkFMU0UpO2ZpbGUucmVuYW1lKHRmaWxlLHRyYW5zZmVyLmZpbGUpfSxzaWxlbnQ9 VFJVRSksXCJ0cnktZXJyb3JcIikpe2lmKCFmaWxlLmV4aXN0cyh0cmFuc2Zlci5maWxlKSlmaWxl LmNyZWF0ZSh0cmFuc2Zlci5maWxlKX0pfX0ob2JqZWN0PSVzLHRyYW5zZmVyLmZpbGU9XCIlc1wi KSIpCgooZGVmdW4gb3JnLWJhYmVsLXN0YXRhLWV2YWx1YXRlCiAgKHNlc3Npb24gYm9keSByZXN1 bHQtdHlwZSByZXN1bHQtcGFyYW1zIGNvbHVtbi1uYW1lcy1wIHJvdy1uYW1lcy1wKQogICJFdmFs dWF0ZSBzdGF0YSBjb2RlIGluIEJPRFkuIgogIChpZiBzZXNzaW9uCiAgICAgIChvcmctYmFiZWwt c3RhdGEtZXZhbHVhdGUtc2Vzc2lvbgogICAgICAgc2Vzc2lvbiBib2R5IHJlc3VsdC10eXBlIHJl c3VsdC1wYXJhbXMgY29sdW1uLW5hbWVzLXAgcm93LW5hbWVzLXApCiAgICAob3JnLWJhYmVsLXN0 YXRhLWV2YWx1YXRlLWV4dGVybmFsLXByb2Nlc3MKICAgICBib2R5IHJlc3VsdC10eXBlIHJlc3Vs dC1wYXJhbXMgY29sdW1uLW5hbWVzLXAgcm93LW5hbWVzLXApKSkKCihkZWZ1biBvcmctYmFiZWwt c3RhdGEtZXZhbHVhdGUtZXh0ZXJuYWwtcHJvY2VzcwogIChib2R5IHJlc3VsdC10eXBlIHJlc3Vs dC1wYXJhbXMgY29sdW1uLW5hbWVzLXAgcm93LW5hbWVzLXApCiAgIkV2YWx1YXRlIEJPRFkgaW4g ZXh0ZXJuYWwgc3RhdGEgcHJvY2Vzcy4KSWYgUkVTVUxULVRZUEUgZXF1YWxzICdvdXRwdXQgdGhl biByZXR1cm4gc3RhbmRhcmQgb3V0cHV0IGFzIGEKc3RyaW5nLiAgSWYgUkVTVUxULVRZUEUgZXF1 YWxzICd2YWx1ZSB0aGVuIHJldHVybiB0aGUgdmFsdWUgb2YgdGhlCmxhc3Qgc3RhdGVtZW50IGlu IEJPRFksIGFzIGVsaXNwLiIKICAoY2FzZSByZXN1bHQtdHlwZQogICAgKHZhbHVlCiAgICAgKGxl dCAoKHRtcC1maWxlIChvcmctYmFiZWwtdGVtcC1maWxlICJzdGF0YS0iKSkpCiAgICAgICAob3Jn LWJhYmVsLWV2YWwgb3JnLWJhYmVsLXN0YXRhLWNvbW1hbmQKCQkgICAgICAgKGZvcm1hdCBvcmct YmFiZWwtc3RhdGEtd3JpdGUtb2JqZWN0LWNvbW1hbmQKCQkJICAgICAgIChvcmctYmFiZWwtcHJv Y2Vzcy1maWxlLW5hbWUgdG1wLWZpbGUgJ25vcXVvdGUpCgkJCSAgICAgICAoZm9ybWF0ICJiZWdp blxuJXNcbmVuZCIgYm9keSkpKQogICAgICAgKG9yZy1iYWJlbC1zdGF0YS1wcm9jZXNzLXZhbHVl LXJlc3VsdAoJKG9yZy1iYWJlbC1yZXN1bHQtY29uZCByZXN1bHQtcGFyYW1zCgkgICh3aXRoLXRl bXAtYnVmZmVyCgkgICAgKGluc2VydC1maWxlLWNvbnRlbnRzIHRtcC1maWxlKQoJICAgIChidWZm ZXItc3RyaW5nKSkKCSAgKG9yZy1iYWJlbC1pbXBvcnQtZWxpc3AtZnJvbS1maWxlIHRtcC1maWxl ICcoNCkpKQoJY29sdW1uLW5hbWVzLXApKSkKICAgIChvdXRwdXQgKG9yZy1iYWJlbC1ldmFsIG9y Zy1iYWJlbC1zdGF0YS1jb21tYW5kIGJvZHkpKSkpCgooZGVmdW4gb3JnLWJhYmVsLXN0YXRhLWV2 YWx1YXRlLXNlc3Npb24KICAoc2Vzc2lvbiBib2R5IHJlc3VsdC10eXBlIHJlc3VsdC1wYXJhbXMg Y29sdW1uLW5hbWVzLXAgcm93LW5hbWVzLXApCiAgIkV2YWx1YXRlIEJPRFkgaW4gU0VTU0lPTi4K SWYgUkVTVUxULVRZUEUgZXF1YWxzICdvdXRwdXQgdGhlbiByZXR1cm4gc3RhbmRhcmQgb3V0cHV0 IGFzIGEKc3RyaW5nLiAgSWYgUkVTVUxULVRZUEUgZXF1YWxzICd2YWx1ZSB0aGVuIHJldHVybiB0 aGUgdmFsdWUgb2YgdGhlCmxhc3Qgc3RhdGVtZW50IGluIEJPRFksIGFzIGVsaXNwLiIKICAoY2Fz ZSByZXN1bHQtdHlwZQogICAgKHZhbHVlCiAgICAgKHdpdGgtdGVtcC1idWZmZXIKICAgICAgIChp bnNlcnQgKG9yZy1iYWJlbC1jaG9tcCBib2R5KSkKICAgICAgIChsZXQgKChlc3MtbG9jYWwtcHJv Y2Vzcy1uYW1lCgkgICAgICAocHJvY2Vzcy1uYW1lIChnZXQtYnVmZmVyLXByb2Nlc3Mgc2Vzc2lv bikpKQoJICAgICAoZXNzLWV2YWwtdmlzaWJseS1wIG5pbCkpCgkgKGVzcy1ldmFsLWJ1ZmZlciBu aWwpKSkKICAgICAobGV0ICgodG1wLWZpbGUgKG9yZy1iYWJlbC10ZW1wLWZpbGUgInN0YXRhLSIp KSkKICAgICAgIChvcmctYmFiZWwtY29taW50LWV2YWwtaW52aXNpYmx5LWFuZC13YWl0LWZvci1m aWxlCglzZXNzaW9uIHRtcC1maWxlCgkoZm9ybWF0IG9yZy1iYWJlbC1zdGF0YS13cml0ZS1vYmpl Y3QtY29tbWFuZAoJCShvcmctYmFiZWwtcHJvY2Vzcy1maWxlLW5hbWUgdG1wLWZpbGUgJ25vcXVv dGUpICJhbnMiKSkKICAgICAgIChvcmctYmFiZWwtc3RhdGEtcHJvY2Vzcy12YWx1ZS1yZXN1bHQK CShvcmctYmFiZWwtcmVzdWx0LWNvbmQgcmVzdWx0LXBhcmFtcwoJICAod2l0aC10ZW1wLWJ1ZmZl cgoJICAgIChpbnNlcnQtZmlsZS1jb250ZW50cyB0bXAtZmlsZSkKCSAgICAoYnVmZmVyLXN0cmlu ZykpCgkgIChvcmctYmFiZWwtaW1wb3J0LWVsaXNwLWZyb20tZmlsZSB0bXAtZmlsZSAnKDQpKSkK CWNvbHVtbi1uYW1lcy1wKSkpCiAgICAob3V0cHV0CiAgICAgKG1hcGNvbmNhdAogICAgICAjJ29y Zy1iYWJlbC1jaG9tcAogICAgICAoYnV0bGFzdAogICAgICAgKGRlbHEgbmlsCgkgICAgIChtYXBj YXIKCSAgICAgIChsYW1iZGEgKGxpbmUpICh3aGVuICg+IChsZW5ndGggbGluZSkgMCkgbGluZSkp CgkgICAgICAobWFwY2FyCgkgICAgICAgKGxhbWJkYSAobGluZSkgOzsgY2xlYW51cCBleHRyYSBw cm9tcHRzIGxlZnQgaW4gb3V0cHV0CgkJIChpZiAoc3RyaW5nLW1hdGNoCgkJICAgICAgIl5cXChb IF0qWz4rXFwuXVsgXT9cXCkrXFwoW1swLTldK1xcfFsgXVxcKSIgbGluZSkKCQkgICAgIChzdWJz dHJpbmcgbGluZSAobWF0Y2gtZW5kIDEpKQoJCSAgIGxpbmUpKQoJICAgICAgIChvcmctYmFiZWwt Y29taW50LXdpdGgtb3V0cHV0IChzZXNzaW9uIG9yZy1iYWJlbC1zdGF0YS1lb2Utb3V0cHV0KQoJ CSAoaW5zZXJ0IChtYXBjb25jYXQgIydvcmctYmFiZWwtY2hvbXAKCQkJCSAgICAobGlzdCBib2R5 IG9yZy1iYWJlbC1zdGF0YS1lb2UtaW5kaWNhdG9yKQoJCQkJICAgICJcbiIpKQoJCSAoaW5mZXJp b3ItZXNzLXNlbmQtaW5wdXQpKSkpKSkgIlxuIikpKSkKCihkZWZ1biBvcmctYmFiZWwtc3RhdGEt cHJvY2Vzcy12YWx1ZS1yZXN1bHQgKHJlc3VsdCBjb2x1bW4tbmFtZXMtcCkKICAic3RhdGEtc3Bl Y2lmaWMgcHJvY2Vzc2luZyBvZiByZXR1cm4gdmFsdWUuCkluc2VydCBobGluZSBpZiBjb2x1bW4g bmFtZXMgaW4gb3V0cHV0IGhhdmUgYmVlbiByZXF1ZXN0ZWQuIgogIChpZiBjb2x1bW4tbmFtZXMt cAogICAgICAoY29ucyAoY2FyIHJlc3VsdCkgKGNvbnMgJ2hsaW5lIChjZHIgcmVzdWx0KSkpCiAg ICByZXN1bHQpKQoKKHByb3ZpZGUgJ29iLXN0YXRhKQoKOzs7IG9iLXN0YXRhLmVsIGVuZHMgaGVy ZQo= --001a11c2e224bcbd6c04ff479de0--