From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Colin Woodbury Newsgroups: gmane.lisp.guile.devel Subject: [PATCH] Extensions for SRFI-171 (Transducers) Date: Wed, 21 Dec 2022 09:48:13 +0900 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------dDscds7vlCJSZRD5n0DVe3rs" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="2926"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.6.0 To: guile-devel@gnu.org Original-X-From: guile-devel-bounces+guile-devel=m.gmane-mx.org@gnu.org Wed Dec 21 01:50:06 2022 Return-path: Envelope-to: guile-devel@m.gmane-mx.org Original-Received: from lists.gnu.org ([209.51.188.17]) by ciao.gmane.io with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1p7nJ8-0000W7-6C for guile-devel@m.gmane-mx.org; Wed, 21 Dec 2022 01:50:06 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1p7nIq-0005OF-0B; Tue, 20 Dec 2022 19:49:48 -0500 Original-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 1p7nIo-0005O3-HG for guile-devel@gnu.org; Tue, 20 Dec 2022 19:49:46 -0500 Original-Received: from out3-smtp.messagingengine.com ([66.111.4.27]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1p7nIl-0001L1-O9 for guile-devel@gnu.org; Tue, 20 Dec 2022 19:49:46 -0500 Original-Received: from compute6.internal (compute6.nyi.internal [10.202.2.47]) by mailout.nyi.internal (Postfix) with ESMTP id 906455C0159 for ; Tue, 20 Dec 2022 19:49:41 -0500 (EST) Original-Received: from mailfrontend1 ([10.202.2.162]) by compute6.internal (MEProxy); Tue, 20 Dec 2022 19:49:41 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=fosskers.ca; h= cc:content-type:date:date:from:from:in-reply-to:message-id :mime-version:reply-to:sender:subject:subject:to:to; s=fm2; t= 1671583781; x=1671670181; bh=n9HnQ7NhWcQLIgoHKdYPG9dchfdwWZg8Aa7 1b5QqRII=; b=nbgx+9reQV0AmbnznS+Db/OghVz55IVmCdQxMEGyDCOqRDkDR8z 6KJEuuXD869Q6RPEiVLwnzSn8iY/Te/D/y79Tp2XeiFMEFAHrvfz97HJFzzRdI/4 IOrxPW3+CX+ugar5hpFe2yXRu+oYFc5dtRfkY8Tm4DZkOMTgRjubLlnbQSkSxUwO Q7aoRzs4Y17c4AUNepmV5ynWDlKPZmZ/UfpWOD/r9FxNrhGhkkislmAqNd49Bxd4 H0BezzvfSUKZySBUnMp1tcQ1OUXLnTBbSccA5MMSB09sp3co4nATe/QndLUpwvKG PE57PImw126NLGrFe6UHbcEGnuptahiuwxQ== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=cc:content-type:date:date:feedback-id :feedback-id:from:from:in-reply-to:message-id:mime-version :reply-to:sender:subject:subject:to:to:x-me-proxy:x-me-proxy :x-me-sender:x-me-sender:x-sasl-enc; s=fm2; t=1671583781; x= 1671670181; bh=n9HnQ7NhWcQLIgoHKdYPG9dchfdwWZg8Aa71b5QqRII=; b=V a3v35J1h2oDfaLY4RKPEPS2KQANXya8rJvZhiS+GFe6nYIpQMnrJ3GSkslzfyRaW VXhrAjzpmyVIf/d2Wjk8DDHpagB7bF1wePeqDlugXglVrzS6FZRolGO0hp/iB3fL 88+1JzmX0aHvdTqNCFrW+LWvWlBDqBbPIRMW3JuQtaaa6cj9MiAmpvszjvIyAsap bJgVKf9CR/gOBVBT6YAZDp1BObWdy5zUNtL3vMXrZU+8npxCLJFXyObSFU3Uinds xHhaLEVbvEquMtlJoXdcwpsyoXHPZmJm8VR5SgHOqZxxoeXEHLAGenKaL2b7/g6b 1EAXRWV7Bd+GBlo+FXTpg== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvhedrgeejgddvjecutefuodetggdotefrodftvf curfhrohhfihhlvgemucfhrghsthforghilhdpqfgfvfdpuffrtefokffrpgfnqfghnecu uegrihhlohhuthemuceftddtnecunecujfgurheptgfkffggfgfvhffusehmtderredtfe ejnecuhfhrohhmpeevohhlihhnucghohhouggsuhhrhicuoegtohhlihhnsehfohhsshhk vghrshdrtggrqeenucggtffrrghtthgvrhhnpedtgeffffefudegteefffeuteevvefhie ejlefhteffheevudekiedujeffheelfeenucevlhhushhtvghrufhiiigvpedtnecurfgr rhgrmhepmhgrihhlfhhrohhmpegtohhlihhnsehfohhsshhkvghrshdrtggr X-ME-Proxy: Feedback-ID: iaef144a3:Fastmail Original-Received: by mail.messagingengine.com (Postfix) with ESMTPA for ; Tue, 20 Dec 2022 19:49:40 -0500 (EST) Content-Language: en-US Received-SPF: none client-ip=66.111.4.27; envelope-from=colin@fosskers.ca; helo=out3-smtp.messagingengine.com X-Spam_score_int: -27 X-Spam_score: -2.8 X-Spam_bar: -- X-Spam_report: (-2.8 / 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, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_LOW=-0.7, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_PASS=-0.001, SPF_NONE=0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: guile-devel@gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "Developers list for Guile, the GNU extensibility library" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: guile-devel-bounces+guile-devel=m.gmane-mx.org@gnu.org Original-Sender: guile-devel-bounces+guile-devel=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.lisp.guile.devel:21511 Archived-At: This is a multi-part message in MIME format. --------------dDscds7vlCJSZRD5n0DVe3rs Content-Type: multipart/alternative; boundary="------------hPUhJXDND47ZpsV1FB6Zr2NB" --------------hPUhJXDND47ZpsV1FB6Zr2NB Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Happy holidays everyone, I hope everything is going well for you. Since discovering SRFI-171 (Transducers) I have fallen in love with it. Transducers let me "talk the way I want to talk" while knowing that I'm being efficient underneath w.r.t. to iteration and allocation. In using Guile's implementation, I noticed a few common idioms missing that are otherwise present in other languages, so I've added them in a series of patches. I've been using these often for a number of weeks without issue, but of course have added unit tests as well. The full details are in the commit messages, but here are the main highlights: * rfold: The fundamental reducer. This allows the user to turn any two-arg function into a valid reducer, so that they don't need to worry about hand-writing reducers via case-lambda. * rfind: Yields the first item in the transduction that matches some predicate. Nice for locating some specific value from a potentially large data source (e.g. a port). * twindow: Like tsegment, but yields overlapping slices into the data. Cheers, and have a great holiday. Colin --------------hPUhJXDND47ZpsV1FB6Zr2NB Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: 8bit

Happy holidays everyone, I hope everything is going well for you.

Since discovering SRFI-171 (Transducers) I have fallen in love with it. Transducers let me "talk the way I want to talk" while knowing that I'm being efficient underneath w.r.t. to iteration and allocation. In using Guile's implementation, I noticed a few common idioms missing that are otherwise present in other languages, so I've added them in a series of patches. I've been using these often for a number of weeks without issue, but of course have added unit tests as well.

The full details are in the commit messages, but here are the main highlights:

  • rfold: The fundamental reducer. This allows the user to turn any two-arg function into a valid reducer, so that they don't need to worry about hand-writing reducers via case-lambda.
  • rfind: Yields the first item in the transduction that matches some predicate. Nice for locating some specific value from a potentially large data source (e.g. a port).
  • twindow: Like tsegment, but yields overlapping slices into the data. 

Cheers, and have a great holiday.

Colin

--------------hPUhJXDND47ZpsV1FB6Zr2NB-- --------------dDscds7vlCJSZRD5n0DVe3rs Content-Type: text/x-patch; charset=UTF-8; name="0001-srfi-171-add-twindow-and-various-reducers.patch" Content-Disposition: attachment; filename="0001-srfi-171-add-twindow-and-various-reducers.patch" Content-Transfer-Encoding: base64 RnJvbSAzMTYxY2U1ZTY1M2U5NzFjMDA2YzhmOTgxYTc2OWZjNzQzNmYxMjZiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBDb2xpbiBXb29kYnVyeSA8Y29saW5AZm9zc2tlcnMu Y2E+CkRhdGU6IE1vbiwgMTkgRGVjIDIwMjIgMDk6Mzk6MzcgKzA5MDAKU3ViamVjdDogW1BB VENIIDEvM10gc3JmaS0xNzE6IGFkZCB0d2luZG93IGFuZCB2YXJpb3VzIHJlZHVjZXJzCgpU aGlzIGFkZHMgYSBudW1iZXIgb2YgcmVkdWN0aW9uIHByaW1pdGl2ZXMgb2Z0ZW4gc2VlbiBp biBvdGhlciBsYW5ndWFnZXMKdG8gR3VpbGUncyBTUkZJLTE3MSBleHRlbnNpb25zLgoKTW9z dCBjcml0aWNhbCBtYXkgYmUgYHJmb2xkYCwgd2hpY2ggY291bGQgYmUgY2FsbGVkIHRoZSBm dW5kYW1lbnRhbApyZWR1Y2VyLCBhcyBpdCdzIGxpa2VseSB0aGF0IGFsbCBvdGhlciByZWR1 Y2VycyBjb3VsZCBiZSBkZWZpbmVkIGluCnRlcm1zIG9mIGl0ICh0aG91Z2ggbm90IGFsbCBh cmUpLiBXaGlsZSBgdGZvbGRgIGFscmVhZHkgZXhpc3RzIGluCkd1aWxlJ3MgU1JGSS0xNzEg ZXh0ZW5zaW9uIGFzIGEgdHJhbnNkdWNlciwgZm9sZGluZyBpcyBpbiBlc3NlbmNlIGEKcmVk dWN0aW9uLiBBbHNvIHdpdGhvdXQgYSBwcmltYXRpdmUgbGlrZSBgcmxhc3RgIChhbHNvIGlu dHJvZHVjZWQgaGVyZSksCnRoZSByZXN1bHRzIG9mIGB0Zm9sZGAgYXJlIGRpZmZpY3VsdCB0 byBjb25zdW1lLiBUaGlzIGlzIGF2b2lkZWQgYnkKcHJvdmlkaW5nIGByZm9sZGAgZGlyZWN0 bHkgYXMgYSBnZW5lcmFsaXNlZCBtZWFucyB0byBjb2xsYXBzZSBhbiBlbnRpcmUKdHJhbnNk dWN0aW9uIGRvd24gaW50byBhIHNpbmdsZSB2YWx1ZSAoaS5lLiB0aGUgd2hvbGUgcG9pbnQg b2YKcmVkdWNlcnMpLiBgcmZvbGRgIGlzIGFsc28gdXNlZnVsIGZvciB0aGUgY3JlYXRpb24g b2YgYWQtaG9jIHJlZHVjZXJzLAphcyBhbnkgMi1hcmcgZnVuY3Rpb24gY2FuIGJlIHBhc3Nl ZCB0byBpdCB0byBmb2xkIHRoZSBzdHJlYW0gb2YgdmFsdWVzLgoKYHJmaXJzdGAsIGBybGFz dGAsIGFuZCBgcmZpbmRgIGFyZSBjb21tb24gaWRpb21zIGFuZCBzbyBoYXZlIGJlZW4gYWRk ZWQuCgpUaGUgZXF1aXZhbGVudCBvZiBgcm1heGAgYW5kIGBybWluYCBhcmUgZWFzeSB0byB3 cml0ZSBtYW51YWxseSB2aWEKYHJmb2xkYCwgYnV0IHRoZXkgaGF2ZSBiZWVuIHByb3ZpZGVk IGhlcmUgYXMgYSBjb252ZW5pZW5jZSBpbiB0aGUgc2FtZQpzcGlyaXQgYXMgYHJjb25zYC4K CmByZm9yLWVhY2hgIGFsc28gY2Fubm90IGJlIGZvcmdvdHRlbiBhcyBhIGNsYXNzaWMgYWRh cHRhdGlvbiBvZiBpdHMKU1JGSS0xIGNvdXNpbi4KCkFsc28gYWRkZWQgaXMgYHR3aW5kb3dg LCBoYW5keSBmb3IgYW5hbHlzaW5nIGdyb3VwcyBvZiBhZGphY2VudCBpdGVtcy4KLS0tCiBt b2R1bGUvc3JmaS9zcmZpLTE3MS9nbnUuc2NtIHwgNzcgKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgNzcgaW5zZXJ0aW9ucygrKQoKZGlm ZiAtLWdpdCBhL21vZHVsZS9zcmZpL3NyZmktMTcxL2dudS5zY20gYi9tb2R1bGUvc3JmaS9z cmZpLTE3MS9nbnUuc2NtCmluZGV4IDQ1YTRlMTlhZi4uMmVlMDIzYjRmIDEwMDY0NAotLS0g YS9tb2R1bGUvc3JmaS9zcmZpLTE3MS9nbnUuc2NtCisrKyBiL21vZHVsZS9zcmZpL3NyZmkt MTcxL2dudS5zY20KQEAgLTE1LDYgKzE1LDcgQEAKIDs7IEZvdW5kYXRpb24sIEluYy4sIDUx IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBV U0EKIAogKGRlZmluZS1tb2R1bGUgKHNyZmkgc3JmaS0xNzEgZ251KQorICAjOnVzZS1tb2R1 bGUgKGljZS05IHEpCiAgICM6dXNlLW1vZHVsZSAoc3JmaSBzcmZpLTE3MSkKICAgIzp1c2Ut bW9kdWxlIChzcmZpIHNyZmktMTcxIG1ldGEpCiAgICM6ZXhwb3J0ICh0YmF0Y2ggdGZvbGQp KQpAQCAtNjMsMyArNjQsNzkgQEAKICAgICAgICAgIChpZiAocmVkdWNlZD8gc3RhdGUpCiAg ICAgICAgICAgICAgKHJlZHVjZWQgKHJlZHVjZXIgKHVucmVkdWNlIHN0YXRlKSkpCiAgICAg ICAgICAgICAgKHIgcmVzdWx0IHN0YXRlKSkpKSkpKQorCisoZGVmaW5lLXB1YmxpYyAodHdp bmRvdyBuKQorICAiWWllbGQgQHZhcntufS1sZW5ndGggd2luZG93cyBvZiBvdmVybGFwcGlu ZyB2YWx1ZXMuICBUaGlzIGlzIGRpZmZlcmVudCBmcm9tCitAY29kZXt0c2VnbWVudH0gd2hp Y2ggeWllbGRzIG5vbi1vdmVybGFwcGluZyB3aW5kb3dzLiBJZiB0aGVyZSB3ZXJlCitmZXdl ciBpdGVtcyBpbiB0aGUgaW5wdXQgdGhhbiBAdmFye259LCB0aGVuIHRoaXMgeWllbGRzIG5v dGhpbmcuIgorICAod2hlbiAobm90IChhbmQgKGludGVnZXI/IG4pIChwb3NpdGl2ZT8gbikp KQorICAgICAgICAoZXJyb3IgImFyZ3VtZW50IHRvIHR3aW5kb3cgbXVzdCBiZSBhIHBvc2l0 aXZlIGludGVnZXIiKSkKKyAgKGxhbWJkYSAocmVkdWNlcikKKyAgICAobGV0ICgoaSAwKQor ICAgICAgICAgIChxIChtYWtlLXEpKSkKKyAgICAgIChjYXNlLWxhbWJkYQorICAgICAgICAo KCkgKHJlZHVjZXIpKQorICAgICAgICAoKHJlc3VsdCkgKHJlZHVjZXIgcmVzdWx0KSkKKyAg ICAgICAgKChyZXN1bHQgaW5wdXQpCisgICAgICAgICAoZW5xISBxIGlucHV0KQorICAgICAg ICAgKHNldCEgaSAoMSsgaSkpCisgICAgICAgICAoY29uZCAoKDwgaSBuKSByZXN1bHQpCisg ICAgICAgICAgICAgICAoKD0gaSBuKSAocmVkdWNlciByZXN1bHQgKGxpc3QtY29weSAoY2Fy IHEpKSkpCisgICAgICAgICAgICAgICAoZWxzZSAoZGVxISBxKQorICAgICAgICAgICAgICAg ICAgICAgKHJlZHVjZXIgcmVzdWx0IChsaXN0LWNvcHkgKGNhciBxKSkpKSkpKSkpKQorCiso ZGVmaW5lLXB1YmxpYyByZm9yLWVhY2gKKyAgKGNhc2UtbGFtYmRhCisgICAgIlJ1biB0aHJv dWdoIGV2ZXJ5IGl0ZW0gaW4gYSB0cmFuc2R1Y3Rpb24gZm9yIHRoZWlyIHNpZGUgZWZmZWN0 cyBidXQgdGhyb3cgYXdheQorYWxsIHJlc3VsdHMuIgorICAgICgoKSAqdW5zcGVjaWZpZWQq KQorICAgICgoYWNjKSAqdW5zcGVjaWZpZWQqKQorICAgICgoYWNjIGlucHV0KSAqdW5zcGVj aWZpZWQqKSkpCisKKyhkZWZpbmUtcHVibGljIChyZmlyc3Qgc2VlZCkKKyAgIllpZWxkIHRo ZSBmaXJzdCB2YWx1ZSBvZiB0aGUgdHJhbnNkdWN0aW9uLCBvciB0aGUgQHZhcntzZWVkfSB2 YWx1ZSBpZiB0aGVyZSBpcyBub25lLiIKKyAgKGNhc2UtbGFtYmRhCisgICAgKCgpIHNlZWQp CisgICAgKChhY2MpIGFjYykKKyAgICAoKF8gaW5wdXQpIChyZWR1Y2VkIGlucHV0KSkpKQor CisoZGVmaW5lLXB1YmxpYyAocmxhc3Qgc2VlZCkKKyAgIllpZWxkIHRoZSBmaW5hbCB2YWx1 ZSBvZiB0aGUgdHJhbnNkdWN0aW9uLCBvciB0aGUgQHZhcntzZWVkfSB2YWx1ZSBpZiB0aGVy ZSBpcyBub25lLiIKKyAgKGNhc2UtbGFtYmRhCisgICAgKCgpIHNlZWQpCisgICAgKChhY2Mp IGFjYykKKyAgICAoKF8gaW5wdXQpIGlucHV0KSkpCisKKyhkZWZpbmUtcHVibGljIChyZm9s ZCBmIHNlZWQpCisgICJUaGUgZnVuZGFtZW50YWwgcmVkdWNlci4gQGNvZGV7cmZvbGR9IGNy ZWF0ZXMgYW4gYWQtaG9jIHJlZHVjZXIgYmFzZWQgb24KK2EgZ2l2ZW4gMi1hcmd1bWVudCBm dW5jdGlvbi4gQSBAdmFye3NlZWR9IGlzIGFsc28gcmVxdWlyZWQgYXMgdGhlCitpbml0aWFs IGFjY3VtdWxhdG9yIHZhbHVlLCB3aGljaCBhbHNvIGJlY29tZXMgdGhlIHJldHVybiB2YWx1 ZSBpbiBjYXNlCit0aGVyZSB3YXMgbm8gaW5wdXQgbGVmdCBpbiB0aGUgdHJhbnNkdWN0aW9u LgorCitGdW5jdGlvbnMgbGlrZSBAY29kZXsrfSBhbmQgQGNvZGV7Kn0gYXJlIGF1dG9tYXRp Y2FsbHkgdmFsaWQgcmVkdWNlcnMsCitiZWNhdXNlIHRoZXkgeWllbGQgc2FuZSB2YWx1ZXMg ZXZlbiB3aGVuIGdpdmVuIDAgb3IgMSBhcmd1bWVudHMuIE90aGVyCitmdW5jdGlvbnMgbGlr ZSBAY29kZXttYXh9IGNhbm5vdCBiZSB1c2VkIGFzLWlzIGFzIHJlZHVjZXJzIHNpbmNlIHRo ZXkKK3JlcXVpcmUgYXQgbGVhc3QgMiBhcmd1bWVudHMuIEZvciBmdW5jdGlvbnMgbGlrZSB0 aGlzLCBAY29kZXtyZm9sZH0gaXMKK2FwcHJvcHJpYXRlLiIKKyAgKGNhc2UtbGFtYmRhCisg ICAgKCgpIHNlZWQpCisgICAgKChhY2MpIGFjYykKKyAgICAoKGFjYyBpbnB1dCkgKGYgYWNj IGlucHV0KSkpKQorCisoZGVmaW5lLXB1YmxpYyAocm1heCBzZWVkKQorICAiWWllbGQgdGhl IG1heGltdW0gdmFsdWUgb2YgdGhlIHRyYW5zZHVjdGlvbiwgb3IgdGhlIEB2YXJ7c2VlZH0g dmFsdWUgaWYKK3RoZXJlIGlzIG5vbmUuIgorICAocmZvbGQgbWF4IHNlZWQpKQorCisoZGVm aW5lLXB1YmxpYyAocm1pbiBzZWVkKQorICAiWWllbGQgdGhlIG1pbmltdW0gdmFsdWUgb2Yg dGhlIHRyYW5zZHVjdGlvbiwgb3IgdGhlIEB2YXJ7c2VlZH0gdmFsdWUgaWYKK3RoZXJlIGlz IG5vbmUuIgorICAocmZvbGQgbWluIHNlZWQpKQorCisoZGVmaW5lLXB1YmxpYyAocmZpbmQg cHJlZD8pCisgICJGaW5kIHRoZSBmaXJzdCBlbGVtZW50IGluIHRoZSB0cmFuc2R1Y3Rpb24g dGhhdCBzYXRpc2ZpZXMgYSBnaXZlbiBwcmVkaWNhdGUuCitZaWVsZHMgI2YgaWYgbm8gc3Vj aCBlbGVtZW50IHdhcyBmb3VuZC4iCisgIChjYXNlLWxhbWJkYQorICAgICgoKSAjZikKKyAg ICAoKGFjYykgYWNjKQorICAgICgoYWNjIGlucHV0KSAoaWYgKHByZWQ/IGlucHV0KSAocmVk dWNlZCBpbnB1dCkgI2YpKSkpCi0tIAoyLjM5LjAKCg== --------------dDscds7vlCJSZRD5n0DVe3rs Content-Type: text/x-patch; charset=UTF-8; name="0002-doc-add-new-SRFI-171-reducers-to-the-manual.patch" Content-Disposition: attachment; filename="0002-doc-add-new-SRFI-171-reducers-to-the-manual.patch" Content-Transfer-Encoding: base64 RnJvbSBlODBkNmJmNWZhMDEwZGExYzBmOGY0YTgxZjkyNTkwZTgwNDlmNGYzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBDb2xpbiBXb29kYnVyeSA8Y29saW5AZm9zc2tlcnMu Y2E+CkRhdGU6IFR1ZSwgMjAgRGVjIDIwMjIgMDk6NDE6NTEgKzA5MDAKU3ViamVjdDogW1BB VENIIDIvM10gZG9jOiBhZGQgbmV3IFNSRkktMTcxIHJlZHVjZXJzIHRvIHRoZSBtYW51YWwK Ci0tLQogZG9jL3JlZi9zcmZpLW1vZHVsZXMudGV4aSB8IDk2ICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKystLQogMSBmaWxlIGNoYW5nZWQsIDkxIGluc2VydGlvbnMo KyksIDUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvZG9jL3JlZi9zcmZpLW1vZHVsZXMu dGV4aSBiL2RvYy9yZWYvc3JmaS1tb2R1bGVzLnRleGkKaW5kZXggMGVmMTM2MjE1Li4yMzY3 NzM4NGQgMTAwNjQ0Ci0tLSBhL2RvYy9yZWYvc3JmaS1tb2R1bGVzLnRleGkKKysrIGIvZG9j L3JlZi9zcmZpLW1vZHVsZXMudGV4aQpAQCAtNTgzNiw3ICs1ODM2LDcgQEAgaWRlbnRpdHkg aW4gdGhlIHJlZHVjdGlvbi4KIEBjaW5kZXggdHJhbnNkdWNlcnMgcmVkdWNlcnMKIAogQGRl ZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSByY29ucwotYSBzaW1wbGUgY29uc2luZyByZWR1Y2Vy LiBXaGVuIGNhbGxlZCB3aXRob3V0IHZhbHVlcywgaXQgcmV0dXJucyBpdHMKK0Egc2ltcGxl IGNvbnNpbmcgcmVkdWNlci4gV2hlbiBjYWxsZWQgd2l0aG91dCB2YWx1ZXMsIGl0IHJldHVy bnMgaXRzCiBpZGVudGl0eSwgQGNvZGV7JygpfS4gIFdpdGggb25lIHZhbHVlLCB3aGljaCB3 aWxsIGJlIGEgbGlzdCwgaXQgcmV2ZXJzZXMKIHRoZSBsaXN0ICh1c2luZyBAY29kZXtyZXZl cnNlIX0pLiAgV2hlbiBjYWxsZWQgd2l0aCB0d28gdmFsdWVzLCBpdCBjb25zZXMKIHRoZSBz ZWNvbmQgdmFsdWUgdG8gdGhlIGZpcnN0LgpAQCAtNTg0OCw3ICs1ODQ4LDcgQEAgdGhlIHNl Y29uZCB2YWx1ZSB0byB0aGUgZmlyc3QuCiBAZW5kIGRlZmZuCiAKIEBkZWZmbiB7U2NoZW1l IFByb2NlZHVyZX0gcmV2ZXJzZS1yY29ucwotc2FtZSBhcyByY29ucywgYnV0IGxlYXZlcyB0 aGUgdmFsdWVzIGluIHRoZWlyIHJldmVyc2VkIG9yZGVyLgorVGhlIHNhbWUgYXMgQGNvZGV7 cmNvbnN9LCBidXQgbGVhdmVzIHRoZSB2YWx1ZXMgaW4gdGhlaXIgcmV2ZXJzZWQgb3JkZXIu CiBAZXhhbXBsZQogKGxpc3QtdHJhbnNkdWNlICh0bWFwIChsYW1iZGEgKHgpICgrIHggMSkp KSByZXZlcnNlLXJjb25zIChsaXN0IDAgMSAyIDMpKQogQHJlc3VsdHt9ICg0IDMgMiAxKQpA QCAtNTg1Niw3ICs1ODU2LDcgQEAgc2FtZSBhcyByY29ucywgYnV0IGxlYXZlcyB0aGUgdmFs dWVzIGluIHRoZWlyIHJldmVyc2VkIG9yZGVyLgogQGVuZCBkZWZmbgogCiBAZGVmZm4ge1Nj aGVtZSBQcm9jZWR1cmV9IHJhbnkgcHJlZD8KLVRoZSByZWR1Y2VyIHZlcnNpb24gb2YgYW55 LiAgUmV0dXJucyBAY29kZXsocmVkdWNlZCAocHJlZD8gdmFsdWUpKX0gaWYKK1RoZSByZWR1 Y2VyIHZlcnNpb24gb2YgQGNvZGV7YW55fS4gIFJldHVybnMgQGNvZGV7KHJlZHVjZWQgKHBy ZWQ/IHZhbHVlKSl9IGlmCiBhbnkgQGNvZGV7KHByZWQ/IHZhbHVlKX0gcmV0dXJucyBub24t I2YuICBUaGUgaWRlbnRpdHkgaXMgI2YuCiAKIEBleGFtcGxlCkBAIC01ODY5LDcgKzU4Njks NyBAQCBhbnkgQGNvZGV7KHByZWQ/IHZhbHVlKX0gcmV0dXJucyBub24tI2YuICBUaGUgaWRl bnRpdHkgaXMgI2YuCiBAZW5kIGRlZmZuCiAKIEBkZWZmbiB7U2NoZW1lIFByb2NlZHVyZX0g cmV2ZXJ5IHByZWQ/Ci1UaGUgcmVkdWNlciB2ZXJzaW9uIG9mIGV2ZXJ5LiAgU3RvcHMgdGhl IHRyYW5zZHVjdGlvbiBhbmQgcmV0dXJucworVGhlIHJlZHVjZXIgdmVyc2lvbiBvZiBAY29k ZXtldmVyeX0uICBTdG9wcyB0aGUgdHJhbnNkdWN0aW9uIGFuZCByZXR1cm5zCiBAY29kZXso cmVkdWNlZCAjZil9IGlmIGFueSBAY29kZXsocHJlZD8gdmFsdWUpfSByZXR1cm5zICNmLiAg SWYgZXZlcnkKIEBjb2RleyhwcmVkPyB2YWx1ZSl9IHJldHVybnMgdHJ1ZSwgaXQgcmV0dXJu cyB0aGUgcmVzdWx0IG9mIHRoZSBsYXN0CiBpbnZvY2F0aW9uIG9mIEBjb2RleyhwcmVkPyB2 YWx1ZSl9LiAgVGhlIGlkZW50aXR5IGlzICN0LgpAQCAtNTg5NCw2ICs1ODk0LDc3IEBAIHRy YW5zZHVjdGlvbi4KIEBlbmQgZXhhbXBsZQogQGVuZCBkZWZmbgogCitAc3ViaGVhZGluZyBH dWlsZS1zcGVjaWZpYyByZWR1Y2VycworVGhlc2UgcmVkdWNlcnMgYXJlIGF2YWlsYWJsZSBp biB0aGUgQGNvZGV7KHNyZmkgc3JmaS0xNzEgZ251KX0gbW9kdWxlLAorYW5kIGFyZSBwcm92 aWRlZCBvdXRzaWRlIHRoZSBzdGFuZGFyZCBkZXNjcmliZWQgYnkgdGhlIFNSRkktMTcxCitk b2N1bWVudC4KKworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSByZm9sZCBwcm9jIHNlZWQK K1RoZSBmdW5kYW1lbnRhbCByZWR1Y2VyLiBAY29kZXtyZm9sZH0gY3JlYXRlcyBhbiBhZC1o b2MgcmVkdWNlciBiYXNlZCBvbgorYSBnaXZlbiAyLWFyZ3VtZW50IEB2YXJ7cHJvY30uIEEg QHZhcntzZWVkfSBpcyByZXF1aXJlZCBhcyB0aGUgaW5pdGlhbAorYWNjdW11bGF0b3IgdmFs dWUsIHdoaWNoIGFsc28gYmVjb21lcyB0aGUgZmluYWwgcmV0dXJuIHZhbHVlIGluIHRoZSBj YXNlCit3aGVyZSB0aGVyZSB3YXMgbm8gaW5wdXQgbGVmdCBpbiB0aGUgdHJhbnNkdWN0aW9u LgorCitUaGUgZmlyc3QgYXJndW1lbnQgdG8gdGhlIEB2YXJ7cHJvY30gaXMgdGhlIGFjY3Vt dWxhdGluZyB2YWx1ZSwgYW5kIHRoZQorc2Vjb25kIGlzIHRoZSBjdXJyZW50IGl0ZW0gb2Yg dGhlIHRyYW5zZHVjdGlvbi4KKworTm90ZSB0aGF0IGZ1bmN0aW9ucyBsaWtlIEBjb2Rleyt9 IGFuZCBAY29kZXsqfSBhcmUgYXV0b21hdGljYWxseSB2YWxpZAorcmVkdWNlcnMsIGJlY2F1 c2UgdGhleSB5aWVsZCBzYW5lIHZhbHVlcyBldmVuIHdoZW4gZ2l2ZW4gMCBvciAxCithcmd1 bWVudHMuIE90aGVyIGZ1bmN0aW9ucyBsaWtlIEBjb2Rle21heH0gY2Fubm90IGJlIHVzZWQg YXMtaXMgYXMKK3JlZHVjZXJzIHNpbmNlIHRoZXkgcmVxdWlyZSBhdCBsZWFzdCAyIGFyZ3Vt ZW50cy4gRm9yIGZ1bmN0aW9ucyBsaWtlCit0aGlzLCBAY29kZXtyZm9sZH0gaXMgYXBwcm9w cmlhdGUuCisKK0BleGFtcGxlCis7OyBUdXJuaW5nIGJ1aWx0LWlucyBpbnRvIHJlZHVjZXJz LiBJZGVudGljYWwgdG8gcm1heC4KKyhsaXN0LXRyYW5zZHVjZSAodGZpbHRlciBvZGQ/KSAo cmZvbGQgbWF4IDApICcoMSAyIDMgNCA1KSkKK0ByZXN1bHR7fSA1CisKKzs7IEN1c3RvbSBs YW1iZGFzIGludG8gcmVkdWNlcnMuIElkZW50aWNhbCB0byBybGFzdC4KKyhsaXN0LXRyYW5z ZHVjZSAodG1hcCBpZGVudGl0eSkKKyAgICAgICAgICAgICAgICAocmZvbGQgKGxhbWJkYSAo XyBpbnB1dCkgaW5wdXQpICNmKQorICAgICAgICAgICAgICAgICcoImFiYyIgImRlZiIgImdo aSIpKQorQHJlc3VsdHt9ICJnaGkiCisKKzs7IFRyYWNrIHRoZSAzIGxhcmdlc3QgdmFsdWVz IGluIGEgdHJhbnNkdWN0aW9uLgorKGRlZmluZSAodGhyZWUtbGFyZ2VzdCBhY2MgaW5wdXQp CisgICh0YWtlIChzb3J0IChjb25zIGlucHV0IGFjYykgPikgMykpCisKKyhsaXN0LXRyYW5z ZHVjZSAodGZpbHRlciBvZGQ/KQorICAgICAgICAgICAgICAgIChyZm9sZCB0aHJlZS1sYXJn ZXN0ICcoMCAwIDApKQorICAgICAgICAgICAgICAgICcoNyAxIDQgMiAxMyA1IDkgMiA4KSkK K0ByZXN1bHR7fSAoMTMgOSA3KQorQGVuZCBleGFtcGxlCitAZW5kIGRlZmZuCisKK0BkZWZm biB7U2NoZW1lIFByb2NlZHVyZX0gcmZpbmQgcHJlZD8KK0ZpbmQgdGhlIGZpcnN0IGVsZW1l bnQgaW4gdGhlIHRyYW5zZHVjdGlvbiB0aGF0IHNhdGlzZmllcyBhIGdpdmVuCitwcmVkaWNh dGUuIFlpZWxkcyAjZiBpZiBubyBzdWNoIGVsZW1lbnQgd2FzIGZvdW5kLgorCitAZXhhbXBs ZQorKGxpc3QtdHJhbnNkdWNlICh0bWFwIGlkZW50aXR5KQorICAgICAgICAgICAgICAgIChy ZmluZCBzdHJpbmc/KQorICAgICAgICAgICAgICAgICcoMSBjICN0IDQuMTIgIkphY2siICgp KSkKK0ByZXN1bHR7fSAiSmFjayIKK0BlbmQgZXhhbXBsZQorQGVuZCBkZWZmbgorCitAZGVm Zm4ge1NjaGVtZSBQcm9jZWR1cmV9IHJmaXJzdCBzZWVkCitAZGVmZm54IHtTY2hlbWUgUHJv Y2VkdXJlfSBybGFzdCBzZWVkCitZaWVsZCB0aGUgZmlyc3QgKG9yIGxhc3QpIHZhbHVlIG9m IHRoZSB0cmFuc2R1Y3Rpb24sIG9yIHRoZSBAdmFye3NlZWR9Cit2YWx1ZSBpZiB0aGVyZSBp cyBub25lLgorQGVuZCBkZWZmbgorCitAZGVmZm4ge1NjaGVtZSBQcm9jZWR1cmV9IHJmb3It ZWFjaCBwcm9jCitBcHBseSBAdmFye3Byb2N9IGZvciBpdHMgc2lkZS1lZmZlY3RzIHRvIGV2 ZXJ5IHZhbHVlIG9mIHRoZQordHJhbnNkdWN0aW9uLCBpZ25vcmluZyBhbGwgcmVzdWx0cy4g TGlrZSBpdHMgQHJlZntTUkZJLTF9IGNvdXNpbiwgeWllbGRzCitAY29kZXsqdW5zcGVjaWZp ZWQqfS4KK0BlbmQgZGVmZm4KKworQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJlfSBybWF4IHNl ZWQKK0BkZWZmbngge1NjaGVtZSBQcm9jZWR1cmV9IHJtaW4gc2VlZAorWWllbGQgdGhlIG1h eGltdW0gKG9yIG1pbmltdW0pIHZhbHVlIG9mIHRoZSB0cmFuc2R1Y3Rpb24sIG9yIHRoZQor QHZhcntzZWVkfSB2YWx1ZSBpZiB0aGVyZSBpcyBub25lLgorQGVuZCBkZWZmbgogCiBAbm9k ZSBTUkZJLTE3MSBUcmFuc2R1Y2VycwogQHN1YnN1YnNlY3Rpb24gVHJhbnNkdWNlcnMKQEAg LTYwNTcsNyArNjEyOCw3IEBAIFN0YXRlbGVzcy4KIAogQHN1YmhlYWRpbmcgR3VpbGUtc3Bl Y2lmaWMgdHJhbnNkdWNlcnMKIFRoZXNlIHRyYW5zZHVjZXJzIGFyZSBhdmFpbGFibGUgaW4g dGhlIEBjb2RleyhzcmZpIHNyZmktMTcxIGdudSl9Ci1saWJyYXJ5LCBhbmQgYXJlIHByb3Zp ZGVkIG91dHNpZGUgdGhlIHN0YW5kYXJkIGRlc2NyaWJlZCBieSB0aGUgU1JGSS0xNzEKK21v ZHVsZSwgYW5kIGFyZSBwcm92aWRlZCBvdXRzaWRlIHRoZSBzdGFuZGFyZCBkZXNjcmliZWQg YnkgdGhlIFNSRkktMTcxCiBkb2N1bWVudC4KIAogQGRlZmZuIHtTY2hlbWUgUHJvY2VkdXJl fSB0YmF0Y2ggcmVkdWNlcgpAQCAtNjA4NSw2ICs2MTU2LDIxIEBAIHZhbHVlKX0sIHNhdmlu ZyBpdHMgcmVzdWx0IGJldHdlZW4gaXRlcmF0aW9ucy4KIEBlbmQgZXhhbXBsZQogQGVuZCBk ZWZmbgogCitAZGVmZm4ge1NjaGVtZSBQcm9jZWR1cmV9IHR3aW5kb3cgbgorCitSZXR1cm5z IGEgdHJhbnNkdWNlciB0aGF0IHlpZWxkcyBAdmFye259LWxlbmd0aCB3aW5kb3dzIG9mIG92 ZXJsYXBwaW5nCit2YWx1ZXMuIFRoaXMgaXMgZGlmZmVyZW50IGZyb20gQGNvZGV7dHNlZ21l bnR9IHdoaWNoIHlpZWxkcworbm9uLW92ZXJsYXBwaW5nIHdpbmRvd3MuIElmIHRoZXJlIHdl cmUgZmV3ZXIgaXRlbXMgaW4gdGhlIGlucHV0IHRoYW4KK0B2YXJ7bn0sIHRoZW4gdGhpcyB5 aWVsZHMgbm90aGluZy4KKworQGV4YW1wbGUKKyhsaXN0LXRyYW5zZHVjZSAodHdpbmRvdyAz KSByY29ucyAnKDEgMiAzIDQgNSkpCitAcmVzdWx0e30gKCgxIDIgMykgKDIgMyA0KSAoMyA0 IDUpKQorQGVuZCBleGFtcGxlCisKK1N0YXRlZnVsLgorQGVuZCBkZWZmbgorCiAKIEBub2Rl IFNSRkktMTcxIEhlbHBlcnMKIEBzdWJzdWJzZWN0aW9uIEhlbHBlciBmdW5jdGlvbnMgZm9y IHdyaXRpbmcgdHJhbnNkdWNlcnMKLS0gCjIuMzkuMAoK --------------dDscds7vlCJSZRD5n0DVe3rs Content-Type: text/x-patch; charset=UTF-8; name="0003-srfi-171-add-unit-tests-for-new-functions.patch" Content-Disposition: attachment; filename="0003-srfi-171-add-unit-tests-for-new-functions.patch" Content-Transfer-Encoding: base64 RnJvbSA5ZTIyZDBkZWU2YjE0YjY2ODk4MTUxMTJiMjAyYWI0ZTQ2MjFlZWFjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBDb2xpbiBXb29kYnVyeSA8Y29saW5AZm9zc2tlcnMu Y2E+CkRhdGU6IFdlZCwgMjEgRGVjIDIwMjIgMDk6MzA6NTAgKzA5MDAKU3ViamVjdDogW1BB VENIIDMvM10gc3JmaS0xNzE6IGFkZCB1bml0IHRlc3RzIGZvciBuZXcgZnVuY3Rpb25zCgpU aGVzZSB0ZXN0cyBtYWlubHkgbWF0Y2ggdGhlIGV4YW1wbGVzIHNob3duIGluIHRoZSBkb2Nz LgotLS0KIHRlc3Qtc3VpdGUvdGVzdHMvc3JmaS0xNzEudGVzdCB8IDY2ICsrKysrKysrKysr KysrKysrKysrKysrKysrKysrKy0tLS0KIDEgZmlsZSBjaGFuZ2VkLCA2MCBpbnNlcnRpb25z KCspLCA2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Rlc3Qtc3VpdGUvdGVzdHMvc3Jm aS0xNzEudGVzdCBiL3Rlc3Qtc3VpdGUvdGVzdHMvc3JmaS0xNzEudGVzdAppbmRleCAxZWY3 YmM1ZjIuLmQxZDU0YjJlYyAxMDA2NDQKLS0tIGEvdGVzdC1zdWl0ZS90ZXN0cy9zcmZpLTE3 MS50ZXN0CisrKyBiL3Rlc3Qtc3VpdGUvdGVzdHMvc3JmaS0xNzEudGVzdApAQCAtMjA3LDE1 ICsyMDcsNjkgQEAKICAgICAgICAgICAgIChsaXN0LXRyYW5zZHVjZSAodGVudW1lcmF0ZSAo LSAxKSkgcmNvbnMgbnVtZXJpYy1saXN0KSkpCiAKICAgKHBhc3MtaWYgInRiYXRjaCIKLSAg ICAoZXF1YWw/Ci0gICAgICAgICAgICAnKCgwIDEpICgyIDMpICg0KSkKKyAgICAoZXF1YWw/ ICcoKDAgMSkgKDIgMykgKDQpKQogICAgICAgICAgICAgKGxpc3QtdHJhbnNkdWNlICh0YmF0 Y2ggKHR0YWtlIDIpIHJjb25zKSByY29ucyBudW1lcmljLWxpc3QpKSkKIAogICAocGFzcy1p ZiAidGZvbGQiCi0gICAgICAgICAgIChlcXVhbD8KLSAgICAgICAgICAgICcoMCAxIDMgNiAx MCkKLSAgICAgICAgICAgIChsaXN0LXRyYW5zZHVjZSAodGZvbGQgKykgcmNvbnMgbnVtZXJp Yy1saXN0KSkpKQotCisgICAgKGVxdWFsPyAnKDAgMSAzIDYgMTApCisgICAgICAgICAgICAo bGlzdC10cmFuc2R1Y2UgKHRmb2xkICspIHJjb25zIG51bWVyaWMtbGlzdCkpKQorCisgIChw YXNzLWlmICJ0d2luZG93OiB0b28gd2lkZSBvZiBhIHdpbmRvdyIKKyAgICAoZXF1YWw/ICco KQorICAgICAgICAgICAgKGxpc3QtdHJhbnNkdWNlICh0d2luZG93IDEwKSByY29ucyAnKDEg MiAzKSkpKQorCisgIChwYXNzLWlmICJ0d2luZG93OiBhY2NlcHRhYmxlIHdpbmRvdyIKKyAg ICAoZXF1YWw/ICcoKDEgMiAzKSAoMiAzIDQpICgzIDQgNSkpCisgICAgICAgICAgICAobGlz dC10cmFuc2R1Y2UgKHR3aW5kb3cgMykgcmNvbnMgJygxIDIgMyA0IDUpKSkpKQorCisod2l0 aC10ZXN0LXByZWZpeCAicmVkdWNlcnMiCisgIChwYXNzLWlmICJyZm9sZDogYnVpbHRpbiIK KyAgICAoZXF1YWw/IDUKKyAgICAgICAgICAgIChsaXN0LXRyYW5zZHVjZSAodGZpbHRlciBv ZGQ/KSAocmZvbGQgbWF4IDApICcoMSAyIDMgNCA1KSkpKQorCisgIChwYXNzLWlmICJyZm9s ZDogY3VzdG9tIGxhbWJkYSIKKyAgICAoZXF1YWw/ICJnaGkiCisgICAgICAgICAgICAobGlz dC10cmFuc2R1Y2UgKHRtYXAgaWRlbnRpdHkpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKHJmb2xkIChsYW1iZGEgKF8gaW5wdXQpIGlucHV0KSAjZikKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAnKCJhYmMiICJkZWYiICJnaGkiKSkpKQorCisgIChwYXNzLWlmICJy Zmlyc3Q6IGVtcHR5IgorICAgIChlcXVhbD8gMAorICAgICAgICAgICAgKGxpc3QtdHJhbnNk dWNlICh0bWFwIGlkZW50aXR5KSAocmZpcnN0IDApICcoKSkpKQorCisgIChwYXNzLWlmICJy Zmlyc3Q6IG5vbi1lbXB0eSIKKyAgICAoZXF1YWw/IDEKKyAgICAgICAgICAgIChsaXN0LXRy YW5zZHVjZSAodG1hcCBpZGVudGl0eSkgKHJmaXJzdCAwKSAnKDEgMiAzKSkpKQorCisgIChw YXNzLWlmICJybGFzdDogZW1wdHkiCisgICAgKGVxdWFsPyAwCisgICAgICAgICAgICAobGlz dC10cmFuc2R1Y2UgKHRmaWx0ZXIgKGxhbWJkYSAoXykgI2YpKSAocmxhc3QgMCkgJygxIDIg MykpKSkKKworICAocGFzcy1pZiAicmxhc3Q6IG5vbi1lbXB0eSIKKyAgICAoZXF1YWw/IDUK KyAgICAgICAgICAgIChsaXN0LXRyYW5zZHVjZSAodG1hcCBpZGVudGl0eSkgKHJsYXN0IDAp ICcoMSAyIDMgNCA1KSkpKQorCisgIChwYXNzLWlmICJybWF4OiBlbXB0eSIKKyAgICAoZXF1 YWw/IDAKKyAgICAgICAgICAgIChsaXN0LXRyYW5zZHVjZSAodG1hcCBpZGVudGl0eSkgKHJt YXggMCkgJygpKSkpCisKKyAgKHBhc3MtaWYgInJtYXg6IG5vbi1lbXB0eSIKKyAgICAoZXF1 YWw/IDMxCisgICAgICAgICAgICAobGlzdC10cmFuc2R1Y2UgKHRtYXAgaWRlbnRpdHkpIChy bWF4IDApICcoMSAyIDMxIDQgNSkpKSkKKworICAocGFzcy1pZiAicm1pbjogZW1wdHkiCisg ICAgKGVxdWFsPyAwCisgICAgICAgICAgICAobGlzdC10cmFuc2R1Y2UgKHRtYXAgaWRlbnRp dHkpIChybWluIDApICcoKSkpKQorCisgIChwYXNzLWlmICJybWluOiBub24tZW1wdHkiCisg ICAgKGVxdWFsPyAxCisgICAgICAgICAgICAobGlzdC10cmFuc2R1Y2UgKHRtYXAgaWRlbnRp dHkpIChybWluIDEwMDApICcoNSAzIDEgNyA2KSkpKQorCisgIChwYXNzLWlmICJyZmluZCIK KyAgICAoZXF1YWw/ICJKYWNrIgorICAgICAgICAgICAgKGxpc3QtdHJhbnNkdWNlICh0bWFw IGlkZW50aXR5KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChyZmluZCBzdHJpbmc/ KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICcoMSBjICN0IDQuMTIgIkphY2siICgp KSkpKSkKIAogKHdpdGgtdGVzdC1wcmVmaXggIngtdHJhbnNkdWNlIgogICAocGFzcy1pZiAi bGlzdC10cmFuc2R1Y2UiIAotLSAKMi4zOS4wCgo= --------------dDscds7vlCJSZRD5n0DVe3rs--