From 2a4dd7570e8c727e31976966841706cc505a3008 Mon Sep 17 00:00:00 2001 From: Jani Nikula Date: Sun, 11 Mar 2012 02:01:34 +0200 Subject: [PATCH] nmfirehose - a crude nmbug companion tool --- 0d/3c0743ca80c89a76540b46f0fef7d7c7f0b8a1 | 237 ++++++++++++++++++++++ 1 file changed, 237 insertions(+) create mode 100644 0d/3c0743ca80c89a76540b46f0fef7d7c7f0b8a1 diff --git a/0d/3c0743ca80c89a76540b46f0fef7d7c7f0b8a1 b/0d/3c0743ca80c89a76540b46f0fef7d7c7f0b8a1 new file mode 100644 index 000000000..aedcd1c61 --- /dev/null +++ b/0d/3c0743ca80c89a76540b46f0fef7d7c7f0b8a1 @@ -0,0 +1,237 @@ +Return-Path: +X-Original-To: notmuch@notmuchmail.org +Delivered-To: notmuch@notmuchmail.org +Received: from localhost (localhost [127.0.0.1]) + by olra.theworths.org (Postfix) with ESMTP id 21C82431FBC + for ; Sat, 10 Mar 2012 16:01:44 -0800 (PST) +X-Virus-Scanned: Debian amavisd-new at olra.theworths.org +X-Spam-Flag: NO +X-Spam-Score: -0.69 +X-Spam-Level: +X-Spam-Status: No, score=-0.69 tagged_above=-999 required=5 + tests=[RCVD_IN_DNSWL_LOW=-0.7, T_MIME_NO_TEXT=0.01] autolearn=disabled +Received: from olra.theworths.org ([127.0.0.1]) + by localhost (olra.theworths.org [127.0.0.1]) (amavisd-new, port 10024) + with ESMTP id DUvvKmH6+jNZ for ; + Sat, 10 Mar 2012 16:01:41 -0800 (PST) +Received: from mail-lb0-f181.google.com (mail-lb0-f181.google.com + [209.85.217.181]) (using TLSv1 with cipher RC4-SHA (128/128 bits)) + (No client certificate requested) + by olra.theworths.org (Postfix) with ESMTPS id 7A7C1431FAE + for ; Sat, 10 Mar 2012 16:01:41 -0800 (PST) +Received: by lbok6 with SMTP id k6so897268lbo.26 + for ; Sat, 10 Mar 2012 16:01:39 -0800 (PST) +X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; + d=google.com; s=20120113; + h=from:to:subject:user-agent:date:message-id:mime-version + :content-type:x-gm-message-state; + bh=lV5I7y15GbGVscgaCQFk4KxInlQcQOlA2Ne9bzgF5s8=; + b=CxTMnEoH5/gEQYflCRKwxMBxPU7vRUbDyh03EQdohVikf17aTFMQdzT9rgIxGNCMVl + nBqP7HWyHoYbS8+LEnDaKLzsnQdckH/xkHJZoDl8FM4RNgzEHkwc/NLLsQcNSCuJXVUl + 410zh11+u3Mp6CdU00yly7vSYzTxQ6i+sMC44Il/Kx2MKjWqkXYoFYRwPkMI2uvmSbOI + ZM4v8DFBiJw7rqOaziLOP6uNFHQ7t+Ro5pIsST1UUg4a4nR6ndg7pnETb5vv1PEGdYzb + C3IRGoZ/8PRiejWHCB/CYP7ATViD38YQ0ANrmq865KKhGSfwYmwD27EV7Qi+3MS+1Qe0 + XGZQ== +Received: by 10.112.25.225 with SMTP id f1mr2748196lbg.6.1331424099729; + Sat, 10 Mar 2012 16:01:39 -0800 (PST) +Received: from localhost (dsl-hkibrasgw4-fe50f800-253.dhcp.inet.fi. + [84.248.80.253]) + by mx.google.com with ESMTPS id a8sm12166918lba.15.2012.03.10.16.01.36 + (version=SSLv3 cipher=OTHER); Sat, 10 Mar 2012 16:01:38 -0800 (PST) +From: Jani Nikula +To: notmuch@notmuchmail.org +Subject: nmfirehose - a crude nmbug companion tool +User-Agent: Notmuch/0.11.1+295~g780f284 (http://notmuchmail.org) Emacs/23.3.1 + (i686-pc-linux-gnu) +Date: Sun, 11 Mar 2012 02:01:34 +0200 +Message-ID: <87wr6sypi9.fsf@nikula.org> +MIME-Version: 1.0 +Content-Type: multipart/mixed; boundary="=-=-=" +X-Gm-Message-State: + ALoCoQlWcDYFbpG5jaIztI1pStEoi+7DFO5gz/podaDGRB39XSjzFze9b3Y4ij0t7qvxV+UjSNKH +X-BeenThere: notmuch@notmuchmail.org +X-Mailman-Version: 2.1.13 +Precedence: list +List-Id: "Use and development of the notmuch mail system." + +List-Unsubscribe: , + +List-Archive: +List-Post: +List-Help: +List-Subscribe: , + +X-List-Received-Date: Sun, 11 Mar 2012 00:01:44 -0000 + +--=-=-= + + +Hi all - + +There was some talk on IRC about maintaining a development branch +containing the "maybe ready" patches [1] to better expose them to +real-life use before merging to master. + +I set out to automate this a little, and ended up with nmfirehose. It's +a shell script that can be used to grab a bunch of patches from the +notmuch mail store based on queries, and apply them to a repository. In +particular, it can grab the "maybe ready" patches and apply them against +notmuch master. + +Inevitable conflicts are handled by applying patches in oldest first +order, and dropping any conflicting series. An email thread approximates +a patch series; more than one patch series in a thread are folded into +one series. + +Patches are applied incrementally, on top of each other by default, but +there's also support for non-incremental per-series apply against master +to see if there are conflicts. This is useful for the "review" +query. Conflicting patches can be automatically tagged if so desired +(but I don't recommend pushing these to nmbug without human review). + +How well any of this works very much depends on how accurately the patch +messages are tagged. + +Some examples (run within a notmuch git repo, with up-to-date nmbug tags +in the database): + +# take nmbug maybe-ready patches and apply them against origin/master +$ nmfirehose + +# use local branch firehose and force use it even if existing +$ nmfirehose -l firehose -F + +# keep going after conflicts without reverting whole series +$ nmfirehose -k + +# check each series in review queue against master, and tag conflicting +$ nmfirehose -q review -n -t + +# help +$ nmfirehose -h + +I originally planned on putting this to cron and pushing the result +(supported out-of-the-box) to some public repo, but in the end I think +people can use this locally just as well, at the pace they want. + +The script tries not to screw up anything in your notmuch repo, but be +careful nonetheless. + +Script attached; comments welcome. Is this worth adding to contrib? + + +BR, +Jani. + +[1] http://nmbug.tethera.net/status/ + +--=-=-= +Content-Type: application/octet-stream +Content-Disposition: attachment; filename=nmfirehose +Content-Transfer-Encoding: base64 +Content-Description: nmfirehose + +IyEvYmluL3NoCiMgQ29weXJpZ2h0IChjKSAyMDEyIEphbmkgTmlrdWxhCiMgTGljZW5zZTogc2Ft +ZSBhcyBub3RtdWNoCgojIFByZWRlZmluZWQgcXVlcmllcy4gU2VlIGh0dHA6Ly9ubWJ1Zy50ZXRo +ZXJhLm5ldC9zdGF0dXMvClFVRVJZX01BWUJFX1JFQURZPSJ0YWc6bm90bXVjaDo6cGF0Y2ggYW5k +IG5vdCB0YWc6bm90bXVjaDo6cHVzaGVkIGFuZCBub3QgdGFnOm5vdG11Y2g6Om9ic29sZXRlIGFu +ZCBub3QgdGFnOm5vdG11Y2g6OndpcCBhbmQgbm90IHRhZzpub3RtdWNoOjpzdGFsZSBhbmQgbm90 +IHRhZzpub3RtdWNoOjpjb250cmliIGFuZCBub3QgdGFnOm5vdG11Y2g6Om1vcmVpbmZvIGFuZCBu +b3QgdGFnOm5vdG11Y2g6OnB5dGhvbiBhbmQgbm90IHRhZzpub3RtdWNoOjp2aW0gYW5kIG5vdCB0 +YWc6bm90bXVjaDo6d29udGZpeCBhbmQgbm90IHRhZzpub3RtdWNoOjpuZWVkcy1yZXZpZXciCgpR +VUVSWV9SRVZJRVc9InRhZzpub3RtdWNoOjpwYXRjaCBhbmQgbm90IHRhZzpub3RtdWNoOjpwdXNo +ZWQgYW5kIG5vdCB0YWc6bm90bXVjaDo6b2Jzb2xldGUgYW5kIG5vdCB0YWc6bm90bXVjaDo6c3Rh +bGUgYW5kIG5vdCB0YWc6bm90bXVjaDo6d29udGZpeCBhbmQgKHRhZzpub3RtdWNoOjptb3JlaW5m +byBvciB0YWc6bm90bXVjaDo6bmVlZHMtcmV2aWV3KSIKCiMgRGVmYXVsdHMgZm9yIGNvbW1hbmQg +bGluZSBvcHRpb25zCiMgbG9jYWwKTE9DQUxfQlJBTkNIPSJmaXJlaG9zZS1gZGF0ZSArJUYuJUgl +TSVTYCIKRk9SQ0VfTE9DQUw9CkdJVF9DSEVDS09VVF9NT0RFPSItYiIKUVVFUlk9IiRRVUVSWV9N +QVlCRV9SRUFEWSIKIyB1cHN0cmVhbQpET19GRVRDSD0KVVBTVFJFQU1fTkFNRT0ib3JpZ2luIgpV +UFNUUkVBTV9CUkFOQ0g9Im1hc3RlciIKIyBwdXNoaW5nCkRPX1BVU0g9CkdJVF9QVVNIX0ZPUkNF +PQpSRU1PVEVfQlJBTkNIPSJmaXJlaG9zZSIKUkVNT1RFX05BTUU9ImZpcmVob3NlIgojIGNvbmZs +aWN0IG1hbmFnZW1lbnQKRE9fTk9OX0lOQ1JFTUVOVEFMPQpET19LRUVQX0dPSU5HPQpET19UQUc9 +CkNPTkZMSUNUX1RBRz0ibWF5YmUtc3RhbGUiCgp1c2FnZSgpCnsKICAgIGNhdCA8PEVPRgpubWZp +cmVob3NlIFtvcHRpb25zIC4uLl0KCkFwcGx5IHBhdGNoZXMgb24gdG9wIG9mIGFuIHVwc3RyZWFt +IHJlcG9zaXRvcnkgZnJvbSBhIG5vdG11Y2ggbWFpbCBzdG9yZSBiYXNlZApvbiBub3RtdWNoIHF1 +ZXJpZXMuCgpSdW4gaW4gYSBnaXQgdHJlZSB3aXRoIHN1aXRhYmxlIHJlbW90ZShzKSBzZXQgKCRV +UFNUUkVBTV9OQU1FIGlzIHRoZSBkZWZhdWx0CnVwc3RyZWFtIHJlbW90ZSkuCgpBbiBlbWFpbCB0 +aHJlYWQgaXMgZXhwZWN0ZWQgdG8gY29udGFpbiBleGFjdGx5IG9uZSBwYXRjaCBzZXJpZXMuIE11 +bHRpcGxlIHNlcmllcwppbiBhIHRocmVhZCBhcmUgY29uc2lkZXJlZCBvbmUgc2VyaWVzLiBUaGUg +cGF0Y2ggb3JkZXIgaW4gYSBzZXJpZXMgaXMgYmFzZWQgb24Kbm90bXVjaCBzZWFyY2ggLS1zb3J0 +PW9sZGVzdC1maXJzdC4KCkxvY2FsOgogIC1sIExPQ0FMX0JSQU5DSCAgICAgbG9jYWwgYnJhbmNo +IHRvIHVzZSAoZGVmYXVsdDogJExPQ0FMX0JSQU5DSCkKICAtRiAgICAgICAgICAgICAgICAgIGZv +cmNlIHVzZSBsb2NhbCBicmFuY2ggZXZlbiBpZiBleGlzdGluZwogIC1xIFFVRVJZX05BTUUgICAg +ICAgcHJlZGVmaW5lZCBxdWVyeSB0byB1c2UsIHNlZSBiZWxvdyAoZGVmYXVsdDogbWF5YmUtcmVh +ZHkpCiAgLVEgUVVFUlkgICAgICAgICAgICBxdWVyeSB0byB1c2UgKGRlZmF1bHQ6IHNhbWUgYXMg +LXEgbWF5YmUtcmVhZHkpCgpVcHN0cmVhbSBiYXNlbGluZSB0byBhcHBseSBwYXRjaGVzIG9uOgog +IC1mICAgICAgICAgICAgICAgICAgZmV0Y2ggdXBzdHJlYW0gZmlyc3QKICAtdSBVUFNUUkVBTV9C +UkFOQ0ggIHVwc3RyZWFtIGJyYW5jaCAoZGVmYXVsdDogJFVQU1RSRUFNX0JSQU5DSCkKICAtVSBV +UFNUUkVBTV9OQU1FICAgIHVwc3RyZWFtIHJlbW90ZSBuYW1lIChkZWZhdWx0OiAkVVBTVFJFQU1f +TkFNRSkKClB1c2hpbmcgdGhlIHJlc3VsdDoKICAtcCAgICAgICAgICAgICAgICAgIHB1c2ggdGhl +IHJlc3VsdCBhZnRlcndhcmRzCiAgLVAgICAgICAgICAgICAgICAgICBmb3JjZSBwdXNoIHRoZSBy +ZXN1bHQgYWZ0ZXJ3YXJkcwogIC1yIFJFTU9URV9CUkFOQ0ggICAgcmVtb3RlIGJyYW5jaCB0byBw +dXNoIHRvIChkZWZhdWx0OiAkUkVNT1RFX0JSQU5DSCkKICAtUiBSRU1PVEVfTkFNRSAgICAgIHJl +bW90ZSBuYW1lIHRvIHB1c2ggdG8gKGRlZmF1bHQ6ICRSRU1PVEVfTkFNRSkKCkNvbmZsaWN0IG1h +bmFnZW1lbnQ6CiAgLW4gICAgICAgICAgICAgICAgICBub24taW5jcmVtZW50YWwsIGFwcGx5IGVh +Y2ggc2VyaWVzIG9uIHVwc3RyZWFtCiAgLWsgICAgICAgICAgICAgICAgICBrZWVwIGdvaW5nIGFm +dGVyIGNvbmZsaWN0cyB3aXRob3V0IHJldmVydGluZyBzZXJpZXMKICAtdCAgICAgICAgICAgICAg +ICAgIHRhZyBjb25mbGljdGluZyBwYXRjaGVzCiAgLVQgVEFHICAgICAgICAgICAgICB0YWcgZm9y +IGNvbmZsaWN0aW5nIHBhdGNoZXMgKGRlZmF1bHQ6ICRDT05GTElDVF9UQUcpCgpQcmVkZWZpbmVk +IHF1ZXJpZXM6CgptYXliZS1yZWFkeSA9ICRRVUVSWV9NQVlCRV9SRUFEWQoKcmV2aWV3ID0gJFFV +RVJZX1JFVklFVwpFT0YKICAgIGV4aXQgMAp9CgplcnJvcigpCnsKICAgIGVjaG8gIm5tZmlyZWhv +c2U6ICQqIiA+JjIKICAgIGV4aXQgMQp9CgpzZXQgLWV1Cgp3aGlsZSBnZXRvcHRzIGw6RnE6UTpm +dTpVOnBQcjpSOm5rdFQ6aCBvcHQ7IGRvCiAgICBjYXNlICIkb3B0IiBpbgoJIyBsb2NhbAoJbCkg +TE9DQUxfQlJBTkNIPSIkT1BUQVJHIjs7CglGKSBGT1JDRV9MT0NBTD0xOyBHSVRfQ0hFQ0tPVVRf +TU9ERT0iLUIiOzsKCXEpCgkgICAgaWYgWyAiJE9QVEFSRyIgPSAibWF5YmUtcmVhZHkiIF07IHRo +ZW4KCQlRVUVSWT0iJFFVRVJZX01BWUJFX1JFQURZIgoJICAgIGVsaWYgWyAiJE9QVEFSRyIgPSAi +cmV2aWV3IiBdOyB0aGVuCgkJUVVFUlk9IiRRVUVSWV9SRVZJRVciCgkgICAgZWxzZQoJCWVycm9y +ICJ1bmtub3duIHByZWRlZmluZWQgcXVlcnkgJyRPUFRBUkcnIgoJICAgIGZpCgkgICAgOzsKCVEp +IFFVRVJZPSIkT1BUQVJHIjs7CgkjIHVwc3RyZWFtCglmKSBET19GRVRDSD0xOzsKCXUpIFVQU1RS +RUFNX0JSQU5DSD0iJE9QVEFSRyI7OwoJVSkgVVBTVFJFQU1fTkFNRT0iJE9QVEFSRyI7OwoJIyBw +dXNoaW5nCglwKSBET19QVVNIPTE7OwoJUCkgRE9fUFVTSD0xOyBHSVRfUFVTSF9GT1JDRT0iLS1m +b3JjZSI7OwoJcikgUkVNT1RFX0JSQU5DSD0iJE9QVEFSRyI7OwoJUikgUkVNT1RFX05BTUU9IiRP +UFRBUkciOzsKCSMgY29uZmxpY3QgbWFuYWdlbWVudAoJbikgRE9fTk9OX0lOQ1JFTUVOVEFMPTE7 +OwoJaykgRE9fS0VFUF9HT0lORz0xOzsKCXQpIERPX1RBRz0xOzsKCVQpIENPTkZMSUNUX1RBRz0i +JE9QVEFSRyI7OwoJIyBoZWxwCgloKSB1c2FnZTs7CglcPykgZXJyb3IgInRyeSAtaCBmb3IgdXNh +Z2UiOzsKICAgIGVzYWMKZG9uZQpzaGlmdCBgZXhwciAkT1BUSU5EIC0gMWAKCmlmIFsgIiQjIiAh +PSAiMCIgXTsgdGhlbgogICAgZXJyb3IgInVuc3VwcG9ydGVkIHBvc2l0aW9uYWwgYXJndW1lbnQo +cykgJyQqJzsgdHJ5IC1oIGZvciB1c2FnZSIKZmkKCmlmIFsgLW4gIiRET19QVVNIIiAtYSAtbiAi +JERPX05PTl9JTkNSRU1FTlRBTCIgXTsgdGhlbgogICAgZXJyb3IgIm5vbi1pbmNyZW1lbnRhbCBw +dXNoIGlzIG5vdCBzdXBwb3J0ZWQiCmZpCgojIE5PVEU6IFRoaXMgZG9lcyBub3QgY2F0Y2ggYWxs +IHRoZSB3YXlzIHVzZXJzIGNhbiBzaG9vdCB0aGVtc2VsdmVzIGluIHRoZSBmZWV0LgppZiAhIGdp +dCBkaWZmIC0tcXVpZXQgfHwgISBnaXQgZGlmZiAtLWNhY2hlZCAtLXF1aWV0OyB0aGVuCiAgICBl +cnJvciAidW5jb21taXR0ZWQgbG9jYWwgY2hhbmdlcyIKZmkKCiMgRklYTUU6IENoZWNrIHRoYXQg +d2UncmUgaW4gYSBnaXQtZGlyIGFuZCB3b3JrLWRpciBhbmQgbm90IGJhcmUuIGdpdCByZXYtcGFy +c2UuCgppZiBbIC1uICIkRE9fRkVUQ0giIF07IHRoZW4KICAgIGdpdCBmZXRjaCAkVVBTVFJFQU1f +TkFNRQpmaQoKUkVTRVRfSEVBRD0kVVBTVFJFQU1fTkFNRS8kVVBTVFJFQU1fQlJBTkNICgojIE5P +VEU6IFRoaXMgZG9lcyBub3QgY2F0Y2ggYWxsIHRoZSB3YXlzIHVzZXJzIGNhbiBzaG9vdCB0aGVt +c2VsdmVzIGluIHRoZSBmZWV0LgppZiBbICJgZ2l0IG5hbWUtcmV2IC0tbmFtZS1vbmx5IEhFQURg +IiA9ICIkTE9DQUxfQlJBTkNIIiBdOyB0aGVuCiAgICBpZiBbIC1uICIkRk9SQ0VfTE9DQUwiIF07 +IHRoZW4KCWdpdCByZXNldCAtLWhhcmQgJFJFU0VUX0hFQUQKICAgIGVsc2UKCWVycm9yICJhbHJl +YWR5IG9uIGJyYW5jaCAkTE9DQUxfQlJBTkNILCB0cnkgLUYgdG8gZm9yY2UiCiAgICBmaQplbHNl +CiAgICBnaXQgY2hlY2tvdXQgJEdJVF9DSEVDS09VVF9NT0RFICRMT0NBTF9CUkFOQ0ggJFVQU1RS +RUFNX05BTUUvJFVQU1RSRUFNX0JSQU5DSApmaQoKY2xlYW51cCgpCnsKICAgIHJ2PSQ/CiAgICAj +IEZJWE1FOiBjb3VsZCBkbyBtb3JlIGNsZXZlciB0aGluZ3MgaGVyZQogICAgZ2l0IGFtIC0tYWJv +cnQgPi9kZXYvbnVsbCAyPiYxCiAgICBleGl0ICRydgp9CnRyYXAgY2xlYW51cCAxIDIgMyA2IDE1 +CgpUSFJFQURTPWBub3RtdWNoIHNlYXJjaCAtLW91dHB1dD10aHJlYWRzIC0tc29ydD1vbGRlc3Qt +Zmlyc3QgJFFVRVJZYAoKZm9yIHRocmVhZCBpbiAkVEhSRUFEUzsgZG8KICAgIE1FU1NBR0VTPWBu +b3RtdWNoIHNlYXJjaCAtLW91dHB1dD1tZXNzYWdlcyAtLXNvcnQ9b2xkZXN0LWZpcnN0ICRRVUVS +WSBBTkQgJHRocmVhZGAKICAgIHN1YmplY3Q9CgogICAgZm9yIG1lc3NhZ2UgaW4gJE1FU1NBR0VT +OyBkbwoJaWYgWyAteiAiJHN1YmplY3QiIF07IHRoZW4KCSAgICBzdWJqZWN0PWBub3RtdWNoIHNo +b3cgLS1mb3JtYXQ9cmF3ICRtZXNzYWdlIHwgZ3JlcCAtbSAxICJeU3ViamVjdDogIiB8IHNlZCAn +cy9eU3ViamVjdDogLy8nYAoJICAgIGVjaG8gIiR0aHJlYWQ6IFwiJHN1YmplY3RcIjoiCglmaQoK +CWlmIG5vdG11Y2ggc2hvdyAtLWZvcm1hdD1tYm94ICRtZXNzYWdlIHwgZ2l0IGFtIC0gPi9kZXYv +bnVsbCAyPiYxOyB0aGVuCgkgICAgZWNobyAiKyAkbWVzc2FnZSBhcHBsaWVkLiIKCWVsc2UKCSAg +ICBnaXQgYW0gLS1hYm9ydAoKCSAgICBpZiBbIC1uICIkRE9fVEFHIiAtYSAtbiAiJENPTkZMSUNU +X1RBRyIgXTsgdGhlbgoJCW5vdG11Y2ggdGFnICskQ09ORkxJQ1RfVEFHIC0tICRtZXNzYWdlCgkg +ICAgZmkKCgkgICAgaWYgWyAtbiAiJERPX0tFRVBfR09JTkciIF07IHRoZW4KCQllY2hvICIkbWVz +c2FnZSBjb25mbGljdHMsIHNraXBwaW5nLiIKCSAgICBlbHNlCgkJaWYgWyAtbiAiJERPX05PTl9J +TkNSRU1FTlRBTCIgXTsgdGhlbgoJCSAgICBlY2hvICItICRtZXNzYWdlIGNvbmZsaWN0cy4iCgkJ +ICAgICMgYnJhbmNoIHdpbGwgYmUgcmVzZXQgYW55d2F5CgkJZWxzZQoJCSAgICBlY2hvICItICRt +ZXNzYWdlIGNvbmZsaWN0cywgcmV2ZXJ0aW5nIHRocmVhZC4iCgkJICAgIGdpdCByZXNldCAtLWhh +cmQgJFJFU0VUX0hFQUQKCQlmaQoJCWJyZWFrCgkgICAgZmkKCWZpCiAgICBkb25lCgogICAgaWYg +WyAtbiAiJERPX05PTl9JTkNSRU1FTlRBTCIgXTsgdGhlbgoJZWNobyAibm9uLWluY3JlbWVudGFs +IG1vZGUsIHJldmVydGluZyB0byAkUkVTRVRfSEVBRC4iCglnaXQgcmVzZXQgLS1oYXJkICRSRVNF +VF9IRUFECiAgICBlbHNlCglSRVNFVF9IRUFEPWBnaXQgcmV2LXBhcnNlIEhFQURgCiAgICBmaQpk +b25lCgppZiBbIC1uICIkRE9fUFVTSCIgXTsgdGhlbgogICAgZ2l0IHB1c2ggJEdJVF9QVVNIX0ZP +UkNFICRSRU1PVEVfTkFNRSAkTE9DQUxfQlJBTkNIOiRSRU1PVEVfQlJBTkNICmZpCg== +--=-=-=-- -- 2.26.2