From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.org!.POSTED!not-for-mail From: Philipp Stephani Newsgroups: gmane.emacs.bugs Subject: bug#24706: 26.0.50; Minor mode functions should do strict argument type checking Date: Sun, 16 Oct 2016 18:25:08 +0000 Message-ID: References: NNTP-Posting-Host: blaine.gmane.org Mime-Version: 1.0 Content-Type: multipart/mixed; boundary=089e0122f07cdd8786053eff9441 X-Trace: blaine.gmane.org 1476642388 17601 195.159.176.226 (16 Oct 2016 18:26:28 GMT) X-Complaints-To: usenet@blaine.gmane.org NNTP-Posting-Date: Sun, 16 Oct 2016 18:26:28 +0000 (UTC) To: Drew Adams , 24706@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Sun Oct 16 20:26:23 2016 Return-path: Envelope-to: geb-bug-gnu-emacs@m.gmane.org Original-Received: from lists.gnu.org ([208.118.235.17]) by blaine.gmane.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bvq8U-0002wE-Tl for geb-bug-gnu-emacs@m.gmane.org; Sun, 16 Oct 2016 20:26:15 +0200 Original-Received: from localhost ([::1]:57427 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bvq8W-0002db-WD for geb-bug-gnu-emacs@m.gmane.org; Sun, 16 Oct 2016 14:26:17 -0400 Original-Received: from eggs.gnu.org ([2001:4830:134:3::10]:40090) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1bvq8M-0002b1-2t for bug-gnu-emacs@gnu.org; Sun, 16 Oct 2016 14:26:07 -0400 Original-Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1bvq8I-0000tn-TY for bug-gnu-emacs@gnu.org; Sun, 16 Oct 2016 14:26:06 -0400 Original-Received: from debbugs.gnu.org ([208.118.235.43]:57473) by eggs.gnu.org with esmtps (TLS1.0:RSA_AES_128_CBC_SHA1:16) (Exim 4.71) (envelope-from ) id 1bvq8I-0000tg-PI for bug-gnu-emacs@gnu.org; Sun, 16 Oct 2016 14:26:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1bvq8I-0007lv-EP for bug-gnu-emacs@gnu.org; Sun, 16 Oct 2016 14:26:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Philipp Stephani Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 16 Oct 2016 18:26:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 24706 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: Original-Received: via spool by 24706-submit@debbugs.gnu.org id=B24706.147664232729829 (code B ref 24706); Sun, 16 Oct 2016 18:26:02 +0000 Original-Received: (at 24706) by debbugs.gnu.org; 16 Oct 2016 18:25:27 +0000 Original-Received: from localhost ([127.0.0.1]:35429 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bvq7i-0007l3-Un for submit@debbugs.gnu.org; Sun, 16 Oct 2016 14:25:27 -0400 Original-Received: from mail-lf0-f49.google.com ([209.85.215.49]:36147) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1bvq7g-0007kn-II for 24706@debbugs.gnu.org; Sun, 16 Oct 2016 14:25:25 -0400 Original-Received: by mail-lf0-f49.google.com with SMTP id b75so245323193lfg.3 for <24706@debbugs.gnu.org>; Sun, 16 Oct 2016 11:25:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=Y1YChflrnW4B0fXToS164P/oQRaVb5swGlboMb1ZOOo=; b=gcvnD9KrAUnj3JdGTKXPkaoDTrFy7KO29bAq9ToDkxnYgesTB1on4iKTgrbDaSfYhg Z8aLye3kmYD8nXJ8LP7hHuYbyG6tMWVJmk6KvGw2NDtjKjwH3fQvfeqkprpcI0V2nTh3 DMawDN4Z6xWJnFx6dT0i9jgbajLauQTyVwpJ9WfeFJ532LDKlYlokg/gLsASYH63VLO4 LdfzglihzBx5ewu3ra38YHRH5wlRdMwVAC3mmeFhXfdj9AxJ0FIYdg000HjGQmv8wsZM 9+DhfOlbB+c327ahg0brPjZCn7gBwfIjcLm6kom1zJ7/NnMMINWVhXKcZH7xPSZcu7gZ 9tsA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to; bh=Y1YChflrnW4B0fXToS164P/oQRaVb5swGlboMb1ZOOo=; b=a/haduEyRFjRjTLfMd/ybKxShP9ZwWZGEERLuOyWQqH2kIZQWWlKvAQE1GZtBOtRMk qc4v6t/Gp3MuPXShoh4QyQ5wv82WnrAqqefHpuC9MMfqq0G0e2CVVEW1xTo/6d9aa/6K pu3XXHkYAD9/Y5qehoQJJCUOtRtTxGmg2X0wqdIJGsSjKMJwUwDfVijVurw57Oju9Kxw Ibe8hspBwSM8B6bKKx6x22aR1Xt0aWS9p2tGrIKExexh2jklZOHqz1/rLLCNCtz7f9E7 PFWMN6fE1mGkjuD5/ebGM4BfJI9TBUwfQAIWcnntqCUFS+Xk9xzpEZNwOKDNE7gpkzM1 uA7Q== X-Gm-Message-State: AA6/9Rl+MJHKtQI4quo80b3K2/ezYOpNQ+TSPfbjDNfetY5DoS8/ycygMuQhIvZFjUbuQcNlW2ufAWfbnCLe8Q== X-Received: by 10.194.170.163 with SMTP id an3mr9357263wjc.73.1476642318673; Sun, 16 Oct 2016 11:25:18 -0700 (PDT) In-Reply-To: X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] X-Received-From: 208.118.235.43 X-BeenThere: bug-gnu-emacs@gnu.org List-Id: "Bug reports for GNU Emacs, the Swiss army knife of text editors" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane.org@gnu.org Original-Sender: "bug-gnu-emacs" Xref: news.gmane.org gmane.emacs.bugs:124563 Archived-At: --089e0122f07cdd8786053eff9441 Content-Type: multipart/alternative; boundary=089e0122f07cdd8783053eff943f --089e0122f07cdd8783053eff943f Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Philipp Stephani schrieb am So., 16. Okt. 2016 um 20:13 Uhr: > Drew Adams schrieb am So., 16. Okt. 2016 um > 18:12 Uhr: > > > (define-minor-mode foo-mode nil) > > its docstring will be > > > > "Toggle Foo mode on or off. > > With a prefix argument ARG, enable Foo mode if ARG is > > positive, and disable it otherwise. If called from Lisp, enable > > the mode if ARG is omitted or nil, and toggle it if ARG is =E2=80=98tog= gle=E2=80=99." > > > > This appears to indicate that (foo-mode 'banana) > > should disable foo-mode, but it enables it. > > No, it does not suggest that. But to be clearer, it should > probably explicitly address the non-nil and non-`toggle' case, > like so: > > If called from Lisp, enable the mode if ARG is omitted or > nil, toggle it if ARG is =E2=80=98toggle=E2=80=99, and disable it if AR= G is > any other non-nil value. > > (And place the Lisp description in a separate paragraph > from the interactive description.) > > > I think minor modes should simply not allow anything but > > integers and 'toggle for ARG, avoiding this confusion. > > Why? There is no confusion possible, once the doc string > explicitly speaks about all possible argument values. > > Why would you change the behavior, instead of just clarifying > the doc? > > > I generally prefer the behavior to be as strict as possible. Consider > (foo-mode 'disable) > If you read such code, do you assume that this enables foo-mode? > However, in this case I guess it's too late, and fixing the documentation > is indeed more appropriate. BTW, the Elisp manual has the same issue: > > The mode command should accept one optional argument. If called > interactively with no prefix argument, it should toggle the mode > (i.e., enable if it is disabled, and disable if it is enabled). If > called interactively with a prefix argument, it should enable the > mode if the argument is positive and disable it otherwise. > > If the mode command is called from Lisp (i.e., non-interactively), > it should enable the mode if the argument is omitted or =E2=80=98nil= =E2=80=99; it > should toggle the mode if the argument is the symbol =E2=80=98toggle= =E2=80=99; > otherwise it should treat the argument in the same way as for an > interactive call with a numeric prefix argument, as described > above. > > Probably this should be reworded so that the Lisp case doesn't refer to > the interactive case at all. Making the documentation obvious is more > important than avoiding repetition. > Attached a patch that uses the wording from `define-minor-mode'. --089e0122f07cdd8783053eff943f Content-Type: text/html; charset=UTF-8 Content-Transfer-Encoding: quoted-printable


Philip= p Stephani <p.stephani2@gmail.c= om> schrieb am So., 16. Okt. 2016 um 20:13=C2=A0Uhr:
Drew Adams <= ;drew.adams@oracle.com> schrieb am So., 16. Okt. 2016 um 18:12= =C2=A0Uhr:
> (define-minor-mode foo-mode nil)
> its docstring will be
>
> "Toggle Foo mode on or off.
> With a prefix argument ARG, enable Foo mode if ARG is
> positive, and disable it otherwise.=C2=A0 If called from Lisp, enable<= br class=3D"gmail_msg"> > the mode if ARG is omitted or nil, and toggle it if ARG is =E2=80=98to= ggle=E2=80=99."
>
> This appears to indicate that (foo-mode 'banana)
> should disable foo-mode, but it enables it.

No, it does not suggest that.=C2=A0 But to be clearer, it should
probably explicitly address the non-nil and non-`toggle' case,
like so:

=C2=A0 If called from Lisp, enable the mode if ARG is omitted or
=C2=A0 nil, toggle it if ARG is =E2=80=98toggle=E2=80=99, and disable it if= ARG is
=C2=A0 any other non-nil value.

(And place the Lisp description in a separate paragraph
from the interactive description.)

> I think minor modes should simply not allow anything but
> integers and 'toggle for ARG, avoiding this confusion.

Why?=C2=A0 There is no confusion possible, once the doc string
explicitly speaks about all possible argument values.

Why would you change the behavior, instead of just clarifying
the doc?

<= div class=3D"gmail_quote gmail_msg">
I generally pr= efer the behavior to be as strict as possible. Consider
(foo-mode 'disable)
If you rea= d such code, do you assume that this enables foo-mode?
However, in this case I guess it's too late, and fixing the d= ocumentation is indeed more appropriate. BTW, the Elisp manual has the same= issue:

=C2=A0 =C2=A0 =C2=A0The mode com= mand should accept one optional argument.=C2=A0 If called
=C2=A0 =C2=A0 =C2=A0interactively with no prefix argument, i= t should toggle the mode
=C2=A0 =C2=A0 =C2=A0= (i.e., enable if it is disabled, and disable if it is enabled).=C2=A0 If
=C2=A0 =C2=A0 =C2=A0called interactively with a= prefix argument, it should enable the
=C2=A0= =C2=A0 =C2=A0mode if the argument is positive and disable it otherwise.

=C2=A0 =C2=A0 =C2=A0If the mode command is called from Lisp (i.e., = non-interactively),
=C2=A0 =C2=A0 =C2=A0it sh= ould enable the mode if the argument is omitted or =E2=80=98nil=E2=80=99; i= t
=C2=A0 =C2=A0 =C2=A0should toggle the mode = if the argument is the symbol =E2=80=98toggle=E2=80=99;
=C2=A0 =C2=A0 =C2=A0otherwise it should treat the argument in th= e same way as for an
=C2=A0 =C2=A0 =C2=A0inte= ractive call with a numeric prefix argument, as described
=C2=A0 =C2=A0 =C2=A0above.

Probably this sho= uld be reworded so that the Lisp case doesn't refer to the interactive = case at all. Making the documentation obvious is more important than avoidi= ng repetition.

Attached a= patch that uses the wording from `define-minor-mode'.=C2=A0
--089e0122f07cdd8783053eff943f-- --089e0122f07cdd8786053eff9441 Content-Type: text/plain; charset=US-ASCII; name="0001-Clarify-the-behavior-of-minor-mode-commands.txt" Content-Disposition: attachment; filename="0001-Clarify-the-behavior-of-minor-mode-commands.txt" Content-Transfer-Encoding: base64 Content-ID: <157cebd4a443590168e1> X-Attachment-Id: 157cebd4a443590168e1 RnJvbSBhY2Q2MzllNWYzMTA1MmI2NGE0YmYxZDA2MjQ2MWU1NGMwYzZlNjQ2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQaGlsaXBwIFN0ZXBoYW5pIDxwaHN0QGdvb2dsZS5jb20+CkRh dGU6IFN1biwgMTYgT2N0IDIwMTYgMjA6MjI6MjQgKzAyMDAKU3ViamVjdDogW1BBVENIXSBDbGFy aWZ5IHRoZSBiZWhhdmlvciBvZiBtaW5vciBtb2RlIGNvbW1hbmRzCgpTZWUgQnVnIzI0NzA2LgoK KiBkb2MvbGlzcHJlZi9tb2Rlcy50ZXhpIChNaW5vciBNb2RlIENvbnZlbnRpb25zKTogQ2xhcmlm eSBiZWhhdmlvciB3aGVuCnRoZSBhcmd1bWVudCB0byBhIG1pbm9yIG1vZGUgY29tbWFuZCBpcyBu b3QgYW4gaW50ZWdlci4KKiBsaXNwL2VtYWNzLWxpc3AvZWFzeS1tbW9kZS5lbCAoZGVmaW5lLW1p bm9yLW1vZGUpOiBDbGFyaWZ5IGJlaGF2aW9yCndoZW4gQVJHIGlzIG5vdCBhbiBpbnRlZ2VyLgoq IHRlc3QvbGlzcC9lbWFjcy1saXNwL2Vhc3ktbW1vZGUtdGVzdHMuZWw6IE5ldyBmaWxlIHdpdGgg dW5pdCB0ZXN0cy4KLS0tCiBkb2MvbGlzcHJlZi9tb2Rlcy50ZXhpICAgICAgICAgICAgICAgICAg IHwgIDggKystLQogbGlzcC9lbWFjcy1saXNwL2Vhc3ktbW1vZGUuZWwgICAgICAgICAgICB8ICA4 ICsrKy0KIHRlc3QvbGlzcC9lbWFjcy1saXNwL2Vhc3ktbW1vZGUtdGVzdHMuZWwgfCA2OSArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCA3OSBpbnNlcnRp b25zKCspLCA2IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3QvbGlzcC9lbWFj cy1saXNwL2Vhc3ktbW1vZGUtdGVzdHMuZWwKCmRpZmYgLS1naXQgYS9kb2MvbGlzcHJlZi9tb2Rl cy50ZXhpIGIvZG9jL2xpc3ByZWYvbW9kZXMudGV4aQppbmRleCAzNjhkODgyLi5hYzBlOTVlIDEw MDY0NAotLS0gYS9kb2MvbGlzcHJlZi9tb2Rlcy50ZXhpCisrKyBiL2RvYy9saXNwcmVmL21vZGVz LnRleGkKQEAgLTEzNjgsMTAgKzEzNjgsMTAgQEAgTWlub3IgTW9kZSBDb252ZW50aW9ucwogaWYg dGhlIGFyZ3VtZW50IGlzIHBvc2l0aXZlIGFuZCBkaXNhYmxlIGl0IG90aGVyd2lzZS4KIAogSWYg dGhlIG1vZGUgY29tbWFuZCBpcyBjYWxsZWQgZnJvbSBMaXNwIChpLmUuLCBub24taW50ZXJhY3Rp dmVseSksIGl0Ci1zaG91bGQgZW5hYmxlIHRoZSBtb2RlIGlmIHRoZSBhcmd1bWVudCBpcyBvbWl0 dGVkIG9yIEBjb2Rle25pbH07IGl0Ci1zaG91bGQgdG9nZ2xlIHRoZSBtb2RlIGlmIHRoZSBhcmd1 bWVudCBpcyB0aGUgc3ltYm9sIEBjb2Rle3RvZ2dsZX07Ci1vdGhlcndpc2UgaXQgc2hvdWxkIHRy ZWF0IHRoZSBhcmd1bWVudCBpbiB0aGUgc2FtZSB3YXkgYXMgZm9yIGFuCi1pbnRlcmFjdGl2ZSBj YWxsIHdpdGggYSBudW1lcmljIHByZWZpeCBhcmd1bWVudCwgYXMgZGVzY3JpYmVkIGFib3ZlLgor c2hvdWxkIHRvZ2dsZSB0aGUgbW9kZSBpZiB0aGUgYXJndW1lbnQgaXMgdGhlIHN5bWJvbCBAY29k ZXt0b2dnbGV9OyBpdAorc2hvdWxkIGRpc2FibGUgdGhlIG1vZGUgaWYgdGhlIGFyZ3VtZW50IGlz IGEgbm9uLXBvc2l0aXZlIGludGVnZXI7CitvdGhlcndpc2UsIGUuZy4sIGlmIHRoZSBhcmd1bWVu dCBpcyBvbWl0dGVkIG9yIG5pbCBvciBhIHBvc2l0aXZlCitpbnRlZ2VyLCBpdCBzaG91bGQgZW5h YmxlIHRoZSBtb2RlLgogCiBUaGUgZm9sbG93aW5nIGV4YW1wbGUgc2hvd3MgaG93IHRvIGltcGxl bWVudCB0aGlzIGJlaGF2aW9yIChpdCBpcwogc2ltaWxhciB0byB0aGUgY29kZSBnZW5lcmF0ZWQg YnkgdGhlIEBjb2Rle2RlZmluZS1taW5vci1tb2RlfSBtYWNybyk6CmRpZmYgLS1naXQgYS9saXNw L2VtYWNzLWxpc3AvZWFzeS1tbW9kZS5lbCBiL2xpc3AvZW1hY3MtbGlzcC9lYXN5LW1tb2RlLmVs CmluZGV4IDM4Mjk1YzMuLjY0ZWYxMTQgMTAwNjQ0Ci0tLSBhL2xpc3AvZW1hY3MtbGlzcC9lYXN5 LW1tb2RlLmVsCisrKyBiL2xpc3AvZW1hY3MtbGlzcC9lYXN5LW1tb2RlLmVsCkBAIC0yNzMsOCAr MjczLDEyIEBAIGRlZmluZS1taW5vci1tb2RlCiAJICwob3IgZG9jCiAJICAgICAgKGZvcm1hdCAo Y29uY2F0ICJUb2dnbGUgJXMgb24gb3Igb2ZmLgogV2l0aCBhIHByZWZpeCBhcmd1bWVudCBBUkcs IGVuYWJsZSAlcyBpZiBBUkcgaXMKLXBvc2l0aXZlLCBhbmQgZGlzYWJsZSBpdCBvdGhlcndpc2Uu ICBJZiBjYWxsZWQgZnJvbSBMaXNwLCBlbmFibGUKLXRoZSBtb2RlIGlmIEFSRyBpcyBvbWl0dGVk IG9yIG5pbCwgYW5kIHRvZ2dsZSBpdCBpZiBBUkcgaXMgYHRvZ2dsZScuCitwb3NpdGl2ZSwgYW5k IGRpc2FibGUgaXQgb3RoZXJ3aXNlLgorCitXaGVuIGNhbGxlZCBmcm9tIExpc3AsIHRvZ2dsZSB0 aGUgbW9kZSBpZiBBUkcgaXMgYHRvZ2dsZScsCitkaXNhYmxlIHRoZSBtb2RlIGlmIEFSRyBpcyBh IG5vbi1wb3NpdGl2ZSBpbnRlZ2VyLCBhbmQgZW5hYmxlIHRoZQorbW9kZSBvdGhlcndpc2UgKGlu Y2x1ZGluZyBpZiBBUkcgaXMgb21pdHRlZCBvciBuaWwgb3IgYSBwb3NpdGl2ZQoraW50ZWdlciku CiBcXHslc30iKSBwcmV0dHktbmFtZSBwcmV0dHktbmFtZSBrZXltYXAtc3ltKSkKIAkgOzsgVXNl IGB0b2dnbGUnIHJhdGhlciB0aGFuIChpZiAsbW9kZSAwIDEpIHNvIHRoYXQgdXNpbmcKIAkgOzsg cmVwZWF0LWNvbW1hbmQgc3RpbGwgZG9lcyB0aGUgdG9nZ2xpbmcgY29ycmVjdGx5LgpkaWZmIC0t Z2l0IGEvdGVzdC9saXNwL2VtYWNzLWxpc3AvZWFzeS1tbW9kZS10ZXN0cy5lbCBiL3Rlc3QvbGlz cC9lbWFjcy1saXNwL2Vhc3ktbW1vZGUtdGVzdHMuZWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k ZXggMDAwMDAwMC4uMjU5MzQ2MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3QvbGlzcC9lbWFjcy1s aXNwL2Vhc3ktbW1vZGUtdGVzdHMuZWwKQEAgLTAsMCArMSw2OSBAQAorOzs7IGVhc3ktbW1vZGUt dGVzdHMuZWwgLS0tIHRlc3RzIGZvciBlYXN5LW1tb2RlLmVsICAtKi0gbGV4aWNhbC1iaW5kaW5n OiB0OyAtKi0KKworOzsgQ29weXJpZ2h0IChDKSAyMDE2ICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b24sIEluYy4KKworOzsgQXV0aG9yOiBQaGlsaXBwIFN0ZXBoYW5pIDxwaHN0QGdvb2dsZS5jb20+ CisKKzs7IFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBFbWFjcy4KKworOzsgR05VIEVtYWNzIGlz IGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKzs7 IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMg cHVibGlzaGVkIGJ5Cis7OyB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVy c2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorOzsgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKworOzsgR05VIEVtYWNzIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCis7OyBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorOzsgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorOzsgR05VIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworOzsgWW91IHNob3VsZCBoYXZlIHJlY2Vp dmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKzs7IGFsb25nIHdp dGggR05VIEVtYWNzLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+ LgorCis7OzsgQ29tbWVudGFyeToKKworOzsgVW5pdCB0ZXN0cyBmb3IgbGlzcC9lbWFjcy1saXNw L2Vhc3ktbW1vZGUuZWwuCisKKzs7OyBDb2RlOgorCisoZGVmaW5lLW1pbm9yLW1vZGUgZWFzeS1t bW9kZS10ZXN0cy0tbW9kZSBuaWwpCisKKyhlcnQtZGVmdGVzdCBlYXN5LW1tb2RlLXRlc3RzLS1t b2RlZnVuLW5pbCAoKQorICAobGV0IChlYXN5LW1tb2RlLXRlc3RzLS1tb2RlKQorICAgIChlYXN5 LW1tb2RlLXRlc3RzLS1tb2RlKQorICAgIChzaG91bGQgZWFzeS1tbW9kZS10ZXN0cy0tbW9kZSkp KQorCisoZXJ0LWRlZnRlc3QgZWFzeS1tbW9kZS10ZXN0cy0tbW9kZWZ1bi0wICgpCisgIChsZXQg KChlYXN5LW1tb2RlLXRlc3RzLS1tb2RlIG5pbCkpCisgICAgKGVhc3ktbW1vZGUtdGVzdHMtLW1v ZGUpCisgICAgKGVhc3ktbW1vZGUtdGVzdHMtLW1vZGUgMCkKKyAgICAoc2hvdWxkLW5vdCBlYXN5 LW1tb2RlLXRlc3RzLS1tb2RlKSkpCisKKyhlcnQtZGVmdGVzdCBlYXN5LW1tb2RlLXRlc3RzLS1t b2RlZnVuLSsxICgpCisgIChsZXQgKChlYXN5LW1tb2RlLXRlc3RzLS1tb2RlIG5pbCkpCisgICAg KGVhc3ktbW1vZGUtdGVzdHMtLW1vZGUgMSkKKyAgICAoc2hvdWxkIGVhc3ktbW1vZGUtdGVzdHMt LW1vZGUpKSkKKworKGVydC1kZWZ0ZXN0IGVhc3ktbW1vZGUtdGVzdHMtLW1vZGVmdW4tLTEgKCkK KyAgKGxldCAoKGVhc3ktbW1vZGUtdGVzdHMtLW1vZGUgbmlsKSkKKyAgICAoZWFzeS1tbW9kZS10 ZXN0cy0tbW9kZSkKKyAgICAoZWFzeS1tbW9kZS10ZXN0cy0tbW9kZSAtMSkKKyAgICAoc2hvdWxk LW5vdCBlYXN5LW1tb2RlLXRlc3RzLS1tb2RlKSkpCisKKyhlcnQtZGVmdGVzdCBlYXN5LW1tb2Rl LXRlc3RzLS1tb2RlZnVuLXRvZ2dsZSAoKQorICAobGV0ICgoZWFzeS1tbW9kZS10ZXN0cy0tbW9k ZSBuaWwpKQorICAgIChlYXN5LW1tb2RlLXRlc3RzLS1tb2RlICd0b2dnbGUpCisgICAgKHNob3Vs ZCBlYXN5LW1tb2RlLXRlc3RzLS1tb2RlKQorICAgIChlYXN5LW1tb2RlLXRlc3RzLS1tb2RlICd0 b2dnbGUpCisgICAgKHNob3VsZC1ub3QgZWFzeS1tbW9kZS10ZXN0cy0tbW9kZSkpKQorCisoZXJ0 LWRlZnRlc3QgZWFzeS1tbW9kZS10ZXN0cy0tbW9kZWZ1bi1vZmYgKCkKKyAgKGxldCAoKGVhc3kt bW1vZGUtdGVzdHMtLW1vZGUgbmlsKSkKKyAgICAoZWFzeS1tbW9kZS10ZXN0cy0tbW9kZSAnb2Zm KQorICAgIChzaG91bGQgZWFzeS1tbW9kZS10ZXN0cy0tbW9kZSkpKQorCisoZXJ0LWRlZnRlc3Qg ZWFzeS1tbW9kZS10ZXN0cy0tbW9kZWZ1bi10ICgpCisgIChsZXQgKChlYXN5LW1tb2RlLXRlc3Rz LS1tb2RlIG5pbCkpCisgICAgKGVhc3ktbW1vZGUtdGVzdHMtLW1vZGUgdCkKKyAgICAoc2hvdWxk IGVhc3ktbW1vZGUtdGVzdHMtLW1vZGUpKSkKKworOzs7IGVhc3ktbW1vZGUtdGVzdHMuZWwgZW5k cyBoZXJlCi0tIAoyLjEwLjEKCg== --089e0122f07cdd8786053eff9441--