From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mp11.migadu.com ([2001:41d0:8:6d80::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by ms9.migadu.com with LMTPS id yMbUHmsTUmQ6cQEASxT56A (envelope-from ) for ; Wed, 03 May 2023 09:55:23 +0200 Received: from aspmx1.migadu.com ([2001:41d0:8:6d80::]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) by mp11.migadu.com with LMTPS id SHQBH2sTUmT/IwEA9RJhRA (envelope-from ) for ; Wed, 03 May 2023 09:55:23 +0200 Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by aspmx1.migadu.com (Postfix) with ESMTPS id 0FEAF26FC8 for ; Wed, 3 May 2023 09:55:23 +0200 (CEST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pu7Js-00011p-1x; Wed, 03 May 2023 03:54:36 -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 1pu7Jp-00011a-NZ for emacs-orgmode@gnu.org; Wed, 03 May 2023 03:54:33 -0400 Received: from mail-lf1-x12e.google.com ([2a00:1450:4864:20::12e]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1pu7Jn-0008Tv-5B for emacs-orgmode@gnu.org; Wed, 03 May 2023 03:54:33 -0400 Received: by mail-lf1-x12e.google.com with SMTP id 2adb3069b0e04-4f11d267d8bso3992952e87.2 for ; Wed, 03 May 2023 00:54:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1683100468; x=1685692468; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :from:to:cc:subject:date:message-id:reply-to; bh=Uc6gfbCsmBgbozx7lF9/6AJfkrYh34CmxchsXQOOZ4w=; b=ERP/1OwFnDla2vupugflnTfPMNj5nVbyCHIIJFrZCevaA9Xi9SgSw/i/8Gx8XXWZS7 mmLNIdlL4K7l+ORA9Z2j75UywsXkBiNp6WWLZhO1qTuSs73WzovgsjWjbtIS6W24GpgN H1DwFHSKwNYg1C87Wiv1wFfuKy96+sNBIEgeubZe5oswWJQ1szX4hvBJvMM5Sb8ZwKJO I3ABLLEXXsahHMdNkyisV1uq4sG+MxTP4d1JtnWOlEFa2kXZsCjrS4ClNdL7q2L/roN7 p/p9J6Ognmo+fvIpXzfFLh9Q/1FmBAtWT8RdXY5m/UcXi8JRr+JCYDUc7Tlw2TKloOqv Te/A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1683100468; x=1685692468; h=to:subject:message-id:date:from:in-reply-to:references:mime-version :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=Uc6gfbCsmBgbozx7lF9/6AJfkrYh34CmxchsXQOOZ4w=; b=lQP05+zlAowKsLJFMwodhnuRA02M0H3gHQ1pRzOe8uGYXn02GHfZuEYLUzdEXiwp5Z TG6MpCV8K19cS4PAvPdv00jXkM38yr2ElWzCDol8uvvRXTOEWFAO4U8JT2ajuvE/mY/w 46Pn72UrW3FqzxePLU14gLhYnNc0rBc/UoWq2caCI0jQhR7+a/dPddjQSZr7bipzVu4N wUeB+Im9sJikFq710pakRQnsEDiT7qQtSrxifTj1dCQRj0G1isviFy8aIESoezadbuGX +ALCFGJD0v61wNE91Yn288voz55xXR9zVx9/0NXbudTUjzIs+iYVq6ws9G3Qiam9SMNi V4rQ== X-Gm-Message-State: AC+VfDzl0/VftW51WltZhWP5Q2dz/pwwXMGgYz+9Vd2iCKa5JFaxdaRU gNoGN+lm4rd+ntCs9d+U0olDjUBoeVrLXIcrRs8E9cXmQPc= X-Google-Smtp-Source: ACHHUZ79Ib8LrFTt+YIkGiw2Gqgfc/8hnO+daG48QMHOeoT5GFV0RqN42H3eiHw3E3o8lfel1Jd7iMAD+4a6fqKbe0Y= X-Received: by 2002:a05:6512:4c6:b0:4ef:d5cb:18e0 with SMTP id w6-20020a05651204c600b004efd5cb18e0mr753628lfq.43.1683100468051; Wed, 03 May 2023 00:54:28 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Mehmet Tekman Date: Wed, 3 May 2023 09:53:51 +0200 Message-ID: Subject: Re: [ANN] lisp/ob-tangle-sync.el To: emacs-orgmode@gnu.org Content-Type: multipart/mixed; boundary="000000000000851c3905fac55da3" Received-SPF: pass client-ip=2a00:1450:4864:20::12e; envelope-from=mtekman89@gmail.com; helo=mail-lf1-x12e.google.com X-Spam_score_int: -18 X-Spam_score: -1.9 X-Spam_bar: - X-Spam_report: (-1.9 / 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_ENVFROM_END_DIGIT=0.25, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, T_SCC_BODY_TEXT_LINE=-0.01 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: emacs-orgmode@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "General discussions about Org-mode." List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: emacs-orgmode-bounces+larch=yhetil.org@gnu.org Sender: emacs-orgmode-bounces+larch=yhetil.org@gnu.org X-Migadu-Country: US X-Migadu-Flow: FLOW_IN ARC-Seal: i=1; s=key1; d=yhetil.org; t=1683100523; a=rsa-sha256; cv=none; b=CtGizmU6lQRc/euKafwuaLN9Nyvn51OZA4Hxe1bJwQs1bj6FOJRoCn10E+NSkGUAxTfYKZ qEyTEjny2Oqk5+jLQm2uD595vH58CGKsyTVBBiBUrEN6lcsZf1TzvjgIOzd80Zf/IsLNv1 X184y+NoasVAnugqxSQ9S0wTcGDTvwabIo4Ufv2b1KKlnI9a2Hqx7d8mwf+UA/QxabcNNw tgYiN533l/HQmJCaVd/5BjOeWET22or/ZgOxyxdA1msppPRAae8NCZds2ZKboH1YWw9kwB 5b8TJ5AmP91qGTmZkzVTbESje9hPy8XGd3RAj1ttqKqz+ZBVbm0bc7+EmgQgFw== ARC-Authentication-Results: i=1; aspmx1.migadu.com; dkim=fail ("body hash did not verify") header.d=gmail.com header.s=20221208 header.b="ERP/1OwF"; dmarc=fail reason="SPF not aligned (relaxed)" header.from=gmail.com (policy=none); spf=pass (aspmx1.migadu.com: domain of "emacs-orgmode-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="emacs-orgmode-bounces+larch=yhetil.org@gnu.org" ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=yhetil.org; s=key1; t=1683100523; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type:in-reply-to:in-reply-to: references:references:list-id:list-help:list-unsubscribe: list-subscribe:list-post:dkim-signature; bh=LSYlxpmsOPPUZ8Zj/eKiKMNVVFHidWeh/rqNG3dFTWc=; b=uopAFazhDlpih0oiJAsBJO5TUHM3NPBWay/CIyeTtzC6l0XcYRoRZ+UnGDuhyhnOWJV40T N4MHGrGJbu8Hof34a8y/3Ni70kQDovdSFm1GvX9s+Te7c1AjMAiT+ZpE3pAwraX9Hye2hW DCQiCL0vzDOnS5PO9cvMvh9Mm8OhlRXS4Byk3ILElgn/d2qZrdYmcBg9QDQjangfXR8KF0 +5/FyDN7XVPfwuH/r/v8V6QHaOHEvjOEDJisxZjl5hEwpJPE3X2CuYbKtk5djatdfB1PlG 5fskC832i6GlkXlvxrY/EdZqbZU07S/TJAL4NG6kwD+40Q7RmaQ8wFWNkBHYcQ== X-Migadu-Spam-Score: -1.10 X-Spam-Score: -1.10 X-Migadu-Queue-Id: 0FEAF26FC8 X-Migadu-Scanner: scn0.migadu.com Authentication-Results: aspmx1.migadu.com; dkim=fail ("body hash did not verify") header.d=gmail.com header.s=20221208 header.b="ERP/1OwF"; dmarc=fail reason="SPF not aligned (relaxed)" header.from=gmail.com (policy=none); spf=pass (aspmx1.migadu.com: domain of "emacs-orgmode-bounces+larch=yhetil.org@gnu.org" designates 209.51.188.17 as permitted sender) smtp.mailfrom="emacs-orgmode-bounces+larch=yhetil.org@gnu.org" X-TUID: 7BAI/pAAXkAi --000000000000851c3905fac55da3 Content-Type: multipart/alternative; boundary="000000000000851c3605fac55da1" --000000000000851c3605fac55da1 Content-Type: text/plain; charset="UTF-8" > I noticed that you modified argument order of a public function > `org-babel-detangle' -- is it possible that you retain the order of > arguments? Good catch - I think I changed the order so that it would match the interactivity of its sister function `org-babel-tangle', and I think in a previous rendition of ob-tangle-sync.el, I called `org-babel-detangle' interactively. But I see now that I no longer directly call it anywhere in my edited code, so I can easily change it back. Attached is a patch Best On Wed, 3 May 2023 at 04:35, Ruijie Yu wrote: > > Mehmet Tekman writes: > > > Hello again, sorry for the delay - I had some holiday time off > > that couldn't wait ;-) > > > > I've modified the ob-tangle.el file for the main tangling and > > detangling functions. Most importantly, both functions can now > > exchange information from the source Org mode file to the target > > remote tangle file in either direction, depending on whether the > > source Org file has `:tangle-sync ' in the header. > > > > The action is one of: > > > > - "export" = always transmit information from the source Org mode > > block to the target remote file. > > - "import" = always transmit information from the target remote > > file to the source Org mode block. > > - "skip" = skip the block. > > - "both" = transmit information from source block to target block > > or target block to source, depending on whether the > > tangle or detangle is called from the source buffer or > > the target buffer respectively. > > > > These functions work at the whole buffer and at the per-block > > level. The `org-babel-tangle-sync' functions automate this > > process by hooking into the `after-save-hook' and tangling / > > detangling the current block. > > > > I feel that I should write what the main motivation for this is: > > Dotfiles that are always in sync with the org-mode files they > > stem from. > > > > Hope this turns into something big! > > Best, > > > > Mehmet > > > > [4. application/x-patch; > 0005-lisp-ob-tangle-sync.el-Automatic-synchronization-of-.patch]... > > > > [5. application/x-patch; > 0004-lisp-ob-tangle.el-Sync-aware-tangle-function-with-be.patch]... > > > > [6. application/x-patch; > 0002-lisp-ob-tangle.el-Sync-action-aware-detangle-functio.patch]... > > > > [7. application/x-patch; > 0003-lisp-ob-tangle.el-Tangle-function-made-aware-of-remo.patch]... > > > > [8. application/x-patch; > 0001-lisp-ob-tangle.el-Detangle-a-single-block.patch]... > > > > [9. application/x-patch; > 0006-etc-ORG-NEWS-lisp-ob-tangle.el-Added-news-and-name.patch]... > > I noticed that you modified argument order of a public function > `org-babel-detangle' -- is it possible that you retain the order of > arguments? > > The accumulated change you proposed is this: > > -(defun org-babel-detangle (&optional source-code-file) > +(defun org-babel-detangle (&optional arg source-code-file ignore-header) > > What I think it should be: > > (defun org-babel-detangle (&optional source-code-file arg > ignore-header) ...) > > This way, existing (external) users of this function can rest assured > that their code is not broken by your patchset. Thoughts? > > -- > Best, > > > RY > > [Please note that this mail might go to spam due to some > misconfiguration in my mail server -- still investigating.] > --000000000000851c3605fac55da1 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
> I noticed that you modified argument order of a = public function
> `org-babel-detangle' -- is it possible that you retain the order o= f
> arguments?

Good catch - I think I changed the= order so that it would match
the interactivity of its sister function `= org-babel-tangle', and
I think in a previous rendition of ob-tangle-= sync.el, I called
`org-babel-detangle' interactively. But I see now = that I no
longer directly call it anywhere in my edited code, so I caneasily change it back.

Attached is a patch
Best

<= /div>
O= n Wed, 3 May 2023 at 04:35, Ruijie Yu <ruijie@netyu.xyz> wrote:

Mehmet Tekman <= mtekman89@gmail.com> writes:

> Hello again, sorry for the delay - I had some holiday time off
> that couldn't wait ;-)
>
> I've modified the ob-tangle.el file for the main tangling and
> detangling functions.=C2=A0 Most importantly, both functions can now > exchange information from the source Org mode file to the target
> remote tangle file in either direction, depending on whether the
> source Org file has `:tangle-sync <action>' in the header. >
> The action is one of:
>
> - "export" =3D always transmit information from the source O= rg mode
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 block to the target re= mote file.
> - "import" =3D always transmit information from the target r= emote
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 file to the source Org= mode block.
> - "skip" =3D skip the block.
> - "both" =3D transmit information from source block to targe= t block
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 or target block to source, de= pending on whether the
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 tangle or detangle is called = from the source buffer or
>=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 the target buffer respectivel= y.
>
> These functions work at the whole buffer and at the per-block
> level.=C2=A0 The `org-babel-tangle-sync' functions automate this > process by hooking into the `after-save-hook' and tangling /
> detangling the current block.
>
> I feel that I should write what the main motivation for this is:
> Dotfiles that are always in sync with the org-mode files they
> stem from.
>
> Hope this turns into something big!
> Best,
>
> Mehmet
>
> [4. application/x-patch; 0005-lisp-ob-tangle-sync.el-Automatic-synchro= nization-of-.patch]...
>
> [5. application/x-patch; 0004-lisp-ob-tangle.el-Sync-aware-tangle-func= tion-with-be.patch]...
>
> [6. application/x-patch; 0002-lisp-ob-tangle.el-Sync-action-aware-deta= ngle-functio.patch]...
>
> [7. application/x-patch; 0003-lisp-ob-tangle.el-Tangle-function-made-a= ware-of-remo.patch]...
>
> [8. application/x-patch; 0001-lisp-ob-tangle.el-Detangle-a-single-bloc= k.patch]...
>
> [9. application/x-patch; 0006-etc-ORG-NEWS-lisp-ob-tangle.el-Added-new= s-and-name.patch]...

I noticed that you modified argument order of a public function
`org-babel-detangle' -- is it possible that you retain the order of
arguments?

The accumulated change you proposed is this:

-(defun org-babel-detangle (&optional source-code-file)
+(defun org-babel-detangle (&optional arg source-code-file ignore-heade= r)

What I think it should be:

=C2=A0 =C2=A0 (defun org-babel-detangle (&optional source-code-file arg= ignore-header) ...)

This way, existing (external) users of this function can rest assured
that their code is not broken by your patchset.=C2=A0 Thoughts?

--
Best,


RY

[Please note that this mail might go to spam due to some
misconfiguration in my mail server -- still investigating.]
--000000000000851c3605fac55da1-- --000000000000851c3905fac55da3 Content-Type: text/x-patch; charset="US-ASCII"; name="0007-lisp-ob-tangle.el-Restore-argument-order-in-org-babe.patch" Content-Disposition: attachment; filename="0007-lisp-ob-tangle.el-Restore-argument-order-in-org-babe.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lh7ejc7v0 RnJvbSAzMzk5Mjc5ZTJjNWMyYTU2MDc2ZmE4NWFkZmZmZmU3YWE1YzJjYTc0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNVCA8bXRla21hbjg5QGdtYWlsLmNvbT4KRGF0ZTogV2VkLCAz IE1heSAyMDIzIDA5OjQ3OjM0ICswMjAwClN1YmplY3Q6IFtQQVRDSCA3LzddIGxpc3Avb2ItdGFu Z2xlLmVsOiBSZXN0b3JlIGFyZ3VtZW50IG9yZGVyIGluCiBvcmctYmFiZWwtZGV0YW5nbGUKCiog b2ItdGFuZ2xlLmVsIChvcmctYmFiZWwtZGV0YW5nbGUpOiBDaGFuZ2UgYHNvdXJjZS1jb2RlLWZp bGUnIHRvIGJlIHRoZQpmaXJzdCBhcmd1bWVudCBhZ2FpbiBmb3IgZXh0ZXJuYWwgdXNhZ2UuICBU aGlzIGNoYW5nZXMgdGhlIHByZWZpeAphcmd1bWVudCBmdW5jdGlvbmFsaXR5LCB3aGljaCBpcyBy ZXBsYWNlZCBieSBhIG11Y2ggZWFzaWVyIGBzaW5nbGUtcCcKYXJndW1lbnQgdG8gZGVub3RlIHdo ZXRoZXIgYSBzaW5nbGUgYmxvY2sgaXMgYmVpbmcgZGV0YW5nbGVkLgotLS0KIGxpc3Avb2ItdGFu Z2xlLmVsIHwgMTIgKysrKysrLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgNiBpbnNlcnRpb25zKCsp LCA2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2xpc3Avb2ItdGFuZ2xlLmVsIGIvbGlzcC9v Yi10YW5nbGUuZWwKaW5kZXggZjE5OWM3N2JjLi5mZGU2NjgzYTYgMTAwNjQ0Ci0tLSBhL2xpc3Av b2ItdGFuZ2xlLmVsCisrKyBiL2xpc3Avb2ItdGFuZ2xlLmVsCkBAIC02NjAsMTMgKzY2MCwxMyBA QCBieSBgb3JnLWJhYmVsLWdldC1zcmMtYmxvY2staW5mbycuIgogCSAgKG9yZy1maWxsLXRlbXBs YXRlIG9yZy1iYWJlbC10YW5nbGUtY29tbWVudC1mb3JtYXQtZW5kIGxpbmstZGF0YSkpKSkKIAog OzsgZGUtdGFuZ2xpbmcgZnVuY3Rpb25zCi0oZGVmdW4gb3JnLWJhYmVsLWRldGFuZ2xlICgmb3B0 aW9uYWwgYXJnIHNvdXJjZS1jb2RlLWZpbGUgaWdub3JlLWhlYWRlcikKKyhkZWZ1biBvcmctYmFi ZWwtZGV0YW5nbGUgKCZvcHRpb25hbCBzb3VyY2UtY29kZS1maWxlIHNpbmdsZS1wIGlnbm9yZS1o ZWFkZXIpCiAgICJQcm9wYWdhdGUgY2hhbmdlcyBpbiBzb3VyY2UgZmlsZSBiYWNrIG9yaWdpbmFs IHRvIE9yZyBmaWxlLgogVGhpcyByZXF1aXJlcyB0aGF0IGNvZGUgYmxvY2tzIHdlcmUgdGFuZ2xl ZCB3aXRoIGxpbmsgY29tbWVudHMKLXdoaWNoIGVuYWJsZSB0aGUgb3JpZ2luYWwgY29kZSBibG9j a3MgdG8gYmUgZm91bmQuICBXaXRoIG9uZQotdW5pdmVyc2FsIHByZWZpeCBhcmd1bWVudCwgb25s eSBkZXRhbmdsZSB0aGUgYmxvY2sgYXQgcG9pbnQuICBJZgotSUdOT1JFLUhFQURFUiB0aGVuIGRl dGFuZ2xlIHJlZ2FyZGxlc3Mgb2YgYDp0YW5nbGUtc3luYycgc3RhdHVzLiIKLSAgKGludGVyYWN0 aXZlICJQIikKK3doaWNoIGVuYWJsZSB0aGUgb3JpZ2luYWwgY29kZSBibG9ja3MgdG8gYmUgZm91 bmQuICBJZiBTSU5HTEUtUAoraXMgdCB0aGVuIG9ubHkgZGV0YW5nbGUgYSBzaW5nbGUgYmxvY2su ICBJZiBJR05PUkUtSEVBREVSIHRoZW4KK2RldGFuZ2xlIHJlZ2FyZGxlc3Mgb2YgYDp0YW5nbGUt c3luYycgc3RhdHVzLiIKKyAgKGludGVyYWN0aXZlKQogICAoc2F2ZS1leGN1cnNpb24KICAgICAo d2hlbiBzb3VyY2UtY29kZS1maWxlIChmaW5kLWZpbGUgc291cmNlLWNvZGUtZmlsZSkpCiAgICAg KGxldCAoKGNvdW50ZXIgMCkgKHNraXAtY291bnRlciAwKSAodGFuZy1jb3VudGVyIDApIGVuZCkK QEAgLTY3Nyw3ICs2NzcsNyBAQCBJR05PUkUtSEVBREVSIHRoZW4gZGV0YW5nbGUgcmVnYXJkbGVz cyBvZiBgOnRhbmdsZS1zeW5jJyBzdGF0dXMuIgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICgoc3RyaW5nPSBhY3Rpb24gImV4cG9ydCIpCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChzZXRxIHRhbmctY291bnRlciAoMSsgdGFuZy1jb3VudGVyKSkpKQogICAgICAgICAg ICAgICAgICAgICAgICAgIChzZXRxIGNvdW50ZXIgKDErIGNvdW50ZXIpKSkpKSkKLSAgICAgICAg KGlmIChlcXVhbCBhcmcgJyg0KSkKKyAgICAgICAgKGlmIHNpbmdsZS1wCiAgICAgICAgICAgICAo ZnVuY2FsbCBzaW5nbGUtYmxvY2stbWV0cmljcykKICAgICAgICAgICAoZ290by1jaGFyIChwb2lu dC1taW4pKQogICAgICAgICAgICh3aGlsZSAocmUtc2VhcmNoLWZvcndhcmQgb3JnLWxpbmstYnJh Y2tldC1yZSBuaWwgdCkKLS0gCjIuNDAuMQoK --000000000000851c3905fac55da3--