From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Robert Burks Newsgroups: gmane.emacs.bugs Subject: bug#70184: [PATCH] Fix + ert for improper alias notification and setting. Also triple notification bug. (3 of 9) Date: Thu, 4 Apr 2024 04:45:09 -0400 Message-ID: Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="000000000000e511dc0615415fc6" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="22520"; mail-complaints-to="usenet@ciao.gmane.io" To: 70184@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Thu Apr 04 11:19:12 2024 Return-path: Envelope-to: geb-bug-gnu-emacs@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 1rsJFY-0005iP-2a for geb-bug-gnu-emacs@m.gmane-mx.org; Thu, 04 Apr 2024 11:19:12 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rsJEQ-0007vj-MU; Thu, 04 Apr 2024 05:18:02 -0400 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 1rsJEO-0007sp-1l for bug-gnu-emacs@gnu.org; Thu, 04 Apr 2024 05:18:00 -0400 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rsJEN-0000C6-Pq for bug-gnu-emacs@gnu.org; Thu, 04 Apr 2024 05:17:59 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1rsJES-0004nP-Jp for bug-gnu-emacs@gnu.org; Thu, 04 Apr 2024 05:18:04 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Robert Burks Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 04 Apr 2024 09:18:04 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: report 70184 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch X-Debbugs-Original-To: GNU BUGS Original-Received: via spool by submit@debbugs.gnu.org id=B.171222227518304 (code B ref -1); Thu, 04 Apr 2024 09:18:04 +0000 Original-Received: (at submit) by debbugs.gnu.org; 4 Apr 2024 09:17:55 +0000 Original-Received: from localhost ([127.0.0.1]:60535 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rsJEI-0004l5-9k for submit@debbugs.gnu.org; Thu, 04 Apr 2024 05:17:55 -0400 Original-Received: from lists.gnu.org ([2001:470:142::17]:57708) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rsIk8-0001qB-I9 for submit@debbugs.gnu.org; Thu, 04 Apr 2024 04:46:46 -0400 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 1rsIju-0002dX-Mw for bug-gnu-emacs@gnu.org; Thu, 04 Apr 2024 04:46:31 -0400 Original-Received: from mail-vk1-xa29.google.com ([2607:f8b0:4864:20::a29]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rsIjr-0002Am-IK for bug-gnu-emacs@gnu.org; Thu, 04 Apr 2024 04:46:29 -0400 Original-Received: by mail-vk1-xa29.google.com with SMTP id 71dfb90a1353d-4affeacaff9so204660e0c.3 for ; Thu, 04 Apr 2024 01:46:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1712220386; x=1712825186; darn=gnu.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=FT6RZE72hLwZQQCEtwXY1RuWc9niD949/cMlFCyPJ4g=; b=UmJriBXLPdlCemNJs6QdlXeOnBj0g1mmdFsOMGytal4Iz55M/1sU4LgOEFfl+tg8QG ppWQhu29EnFIVUrB7WCBPIQTGpFD4H8TS8Kffvv8ZMoKzK0lPqsHoV2l0ZfuuwL9F2mH M0ZFHd09pOlOolngmg389gNm4h5Hq5Kttud9qan8rmnqUeMwDzrRBNgy7e9Xs+d2X47a nA28aWEltvTmm7l6W7aW11c0cGvPVx/tQ90ghxmoAdtYcR64wPrKMrZhKWrF9Y5dT0dk BClrOTa4kWP5e5ltc8fsjamjBxkAXIj0yhSJTGyvL4hChCfqb4N3raJYK1FNh4MaE3Ir f7eg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1712220386; x=1712825186; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=FT6RZE72hLwZQQCEtwXY1RuWc9niD949/cMlFCyPJ4g=; b=SKoaialycRR2/fRRFEEjEkQBk/WH60LW954lDDNCg9BP7AR5tQN9zYP0IzJBmwz6F+ RF1GwLn6ip+Y/cLHDmX9HxemMHLaGYv/VXx9b2e2pLzgUxsnxQyMqCRYEChovuRheGTh KlNW1Isx1TbhYX9ms+pFK49OxDoibbeUGJHygZeOZTVzGt6QKstGRIifm4UMMIbizVRI G1H3noUPFmYHcMWJtmIY/PF1IdVgCfK3vDyy6O53FFA+1cKZytX9fMoPJHakeVMXQawm BqM2a+As0880PAlnp34en6q3qhpPegS710YL/TCInmBquJ3qxpdSnVH9snJqI0ZCzgpo Aw2Q== X-Gm-Message-State: AOJu0YxREFglvY1uccgjVoA6WRURfHTtslW7Ywsrzu/Ul7zrGd5yX3IN lmCq7p0SFrM0mZGUoT0PkoNizEzqY+qdt+N4gvmcu9Bt3Jsvt8KvbZv0pSZSySQpTEn1mtsQp1R GW73/XRWZrZAywUTpQ3aO9kV1ncCQlPU= X-Google-Smtp-Source: AGHT+IHh37442iM9Hg2AAU5CcpLbUyFndknvDVkLVJuDQ/7uiAaCQSI77ec/aNTUV6/QA36ZxqhmS2OF5ehoky3aPtY= X-Received: by 2002:a05:6122:189c:b0:4d8:6ae0:36a6 with SMTP id bi28-20020a056122189c00b004d86ae036a6mr1396417vkb.3.1712220386122; Thu, 04 Apr 2024 01:46:26 -0700 (PDT) Received-SPF: pass client-ip=2607:f8b0:4864:20::a29; envelope-from=rburksdev@gmail.com; helo=mail-vk1-xa29.google.com X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 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_FROM=0.001, HTML_MESSAGE=0.001, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-Mailman-Approved-At: Thu, 04 Apr 2024 05:17:46 -0400 X-BeenThere: debbugs-submit@debbugs.gnu.org X-Mailman-Version: 2.1.18 Precedence: list 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-mx.org@gnu.org Original-Sender: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:282633 Archived-At: --000000000000e511dc0615415fc6 Content-Type: multipart/alternative; boundary="000000000000e511da0615415fc4" --000000000000e511da0615415fc4 Content-Type: text/plain; charset="UTF-8" (3 of 9) Bug00002a (Improper notification when a new alias is made for an unbound variable) Bug00002b (Triple notification when using set-default on the an alias of an unbound) ** Bug recreation is at the end I have attached a commit that provides a fix and (close to)full coverage ert for the portion of code where it resided. I also added some notes to better clarify the meaning of 'new_alias' and 'base_variable'. (Please note the BUG# placeholder in seven(7) places will need to be updated.) There are notes and a link above the code that clearly spelled out what should be done. However, the code below did not reflect that; it does now. There seemed to be confusion with the flag variable's enumeration, as the set functions use 'SET_INTERNAL_BIND' for let binding not for variable instantiating. I said "close to" above in regards to testing; because, both 'new_alias' and 'base_variable' can be alias chains and that is not tested for. While 'Fboundp', 'find_symbol_value', and 'set_internal' follow redirection and everything currently works, there still should be regression testing to enforce/reflect defined behaviour. Variable watchers are only fully functional with interned symbols. However, a watcher can work with uninterned symbols being used as variable aliases so long as the aliases are added after the watcher is added to the base variable. This is because the trapped write flag is copied at the time of alias definition and does not require "harmonization" across the obarray. The test I have included use uninternaed symbols as aliases, I have alternate versions that use global variables as aliases. Using uninterned symbols allows for the creation of cleanly written and repeatable tests. (A bit of foreshadowing) Currently defvaralias allows uninterned symbols as an alias or base (even though broken cases exist, i.e. watchers added after an uninterned alias). Bug Recreation--------------------------------------------------------- emacs -Q--------------------------------------------------------------- (defvar results nil) results (defvar test) test (add-variable-watcher 'test (lambda (&rest args) (push args results))) nil (defvaralias 'testalias 'test) test results ((test nil let nil)) ;; There was no let binding here!!!!!!!!!! ;; It shouldn't be calling `set' either in this case, as both are unbound ;; and we are simply assigning a newly created alias to an unbound variable. ;; The base variable is being neither set nor let bound!!!! ;; If defining an old variable obsolete we shouldn't be telling ;; the new variable's watchers that it is being let bound. ;; The confusion in the code came from the naming in the enum. emacs -Q--------------------------------------------------------------- (defvar results nil) results (defvar test) test (add-variable-watcher 'test (lambda (&rest args) (push args results))) nil (defvaralias 'testalias 'test) test (set-default 'testalias 100) 100 results ((test 100 set nil) (test 100 set nil) (test nil let nil)) ;; By combining with the bug prior we get triple notification when ;; there should only be one 'set' to 100. ;; My bug fix prior reduces it to two and this fix corrects this completely. emacs -Q--------------------------------------------------------------- (defvar results nil) results (defvar test) test (defvar testalias 50) testalias (add-variable-watcher 'test (lambda (&rest args) (push args results))) nil (defvaralias 'testalias 'test) test (set-default 'testalias 100) 100 results ((test 100 set nil) (test 100 set nil) (test 50 let nil)) ;; This example shows improper 'let' that should read set ;; and double notification that arises from the previous bug. ;; This example should have a 'set' to 50 and then a 'set' to 100. --000000000000e511da0615415fc4 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
(3 of 9)

Bug00002a (Improper notification when a ne= w alias is made for an unbound variable)
Bug00002b (Triple notification = when using set-default on the an alias of an unbound)
** Bug recreation= is at the end

=C2=A0 I have attached a commit that provides a fix a= nd (close to)full coverage
ert for the portion of code where it resided.= =C2=A0 I also added some notes to
better clarify the meaning of 'new= _alias' and 'base_variable'.
(Please note the BUG# placehold= er in seven(7) places will need to be updated.)

=C2=A0 There are not= es and a link above the code that clearly spelled out what
should be don= e.=C2=A0 However, the code below did not reflect that; it does
now.=C2= =A0 There seemed to be confusion with the flag variable's enumeration,<= br>as the set functions use 'SET_INTERNAL_BIND' for let binding not= for
variable instantiating.

=C2=A0 I said "close to" a= bove in regards to testing; =C2=A0because, both 'new_alias'
and = 'base_variable' can be alias chains and that is not tested for.=C2= =A0 While
'Fboundp', 'find_symbol_value', and 'set_i= nternal' follow redirection and
everything currently works, there st= ill should be regression testing to
enforce/reflect defined behaviour.
=C2=A0 Variable watchers are only fully functional with interned symb= ols. However,
a watcher can work with uninterned symbols being used as v= ariable aliases
so long as the aliases are added after the watcher is ad= ded to the base
variable.=C2=A0 This is because the trapped write flag i= s copied at the time
of alias definition and does not require "harm= onization" across the obarray.
The test I have included use uninter= naed symbols as aliases, I have alternate
versions that use global varia= bles as aliases.=C2=A0 Using uninterned symbols
allows for the creation = of cleanly written and repeatable tests.
(A bit of foreshadowing) Curre= ntly defvaralias allows uninterned symbols as
an alias or base (even tho= ugh broken cases exist, i.e. watchers added after
an uninterned alias).<= br>
Bug Recreation------------------------------------------------------= ---

emacs -Q--------------------------------------------------------= -------

(defvar results nil)
results

(defvar test)
test=

(add-variable-watcher 'test (lambda (&rest args) (push args= results)))
nil

(defvaralias 'testalias 'test)
test
results
((test nil let nil))
;; There was no let binding here!!!= !!!!!!!
;; It shouldn't be calling `set' either in this case, as= both are unbound
;; and we are simply assigning a newly created alias t= o an unbound variable.
;; The base variable is being neither set nor let= bound!!!!
;; If defining an old variable obsolete we shouldn't be t= elling
;; the new variable's watchers that it is being let bound.;; The confusion in the code came from the naming in the enum.

emac= s -Q---------------------------------------------------------------
(def= var results nil)
results

(defvar test)
test

(add-variab= le-watcher 'test (lambda (&rest args) (push args results)))
nil<= br>
(defvaralias 'testalias 'test)
test

(set-default &= #39;testalias 100)
100

results
((test 100 set nil) (test 100 s= et nil) (test nil let nil))
;; By combining with the bug prior we get tr= iple notification when
;; there should only be one 'set' to 100.=
;; My bug fix prior reduces it to two and this fix corrects this comple= tely.

emacs -Q-----------------------------------------------------= ----------
(defvar results nil)
results

(defvar test)
test<= br>
(defvar testalias 50)
testalias

(add-variable-watcher '= ;test (lambda (&rest args) (push args results)))
nil

(defvara= lias 'testalias 'test)
test

(set-default 'testalias 1= 00)
100

results
((test 100 set nil) (test 100 set nil) (test 5= 0 let nil))
;; This example shows improper 'let' that should rea= d set
;; and double notification that arises from the previous bug.
;= ; This example should have a 'set' to 50 and then a 'set' t= o 100.
--000000000000e511da0615415fc4-- --000000000000e511dc0615415fc6 Content-Type: application/x-patch; name="0005-Fix-ert-improper-setting-and-notification-in-defvara.patch" Content-Disposition: attachment; filename="0005-Fix-ert-improper-setting-and-notification-in-defvara.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lukvlm9y0 RnJvbSA2MjE1N2QwZTk0OTBkYjU3MjgyZjM1ZDBlZTlhODRjYzBiODYyOGQyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiUm9iZXJ0IEEuIEJ1cmtzIiA8cmJ1cmtzZGV2QGdtYWlsLmNv bT4KRGF0ZTogU2F0LCA5IE1hciAyMDI0IDEzOjM4OjUyIC0wNTAwClN1YmplY3Q6IFtQQVRDSCAw NS8zMV0gRml4K2VydCBpbXByb3BlciBzZXR0aW5nIGFuZCBub3RpZmljYXRpb24gaW4KIGRlZnZh cmFsaWFzIChidWcjMDAwMDIpCgonYmFzZV92YXJpYWJsZScgd2FzIGJlaW5nIHNldCBldmVuIHdo ZW4gJ25ld19hbGlhcycgd2FzIHVuYm91bmQuICBBbHNvLAppdCB3YXMgaW1wcm9wZXJseSBjYWxs aW5nICdzZXRfaW50ZXJuYWwnIHdpdGggaW5kaWNhdGlvbiBvZiBsZXQgYmluZGluZy4KCiogc3Jj L2V2YWwuYyAoRmRlZnZhcmFsaWFzKToKRml4IHZhcmlhYmxlIHdhdGNoZXJzIGJlaW5nIGltcHJv cGVybHkgbm90aWZpZWQgb2YgYW4gdW5ib3VuZCB2YXJpYWJsZQpiZWluZyBsZXQgYm91bmQgd2hl biBhZGRpbmcgYSBuZXdseSBjcmVhdGVkIHZhcmlhYmxlIGFsaWFzLiAoQlVHIzAwMDAyKQoqIHRl c3Qvc3JjL2RhdGEtdGVzdHMuZWwgKGRhdGEtdGVzdHMtdmFyYWxpYXMtd2F0Y2hlcnMtYnVnMDAw MDIpOgpBZGRlZCByZWdyZXNzaW9uIHRlc3RpbmcgZm9yIGRlZnZhcmFsaWFzLiAoQlVHIzAwMDAy KQotLS0KIHNyYy9ldmFsLmMgICAgICAgICAgICAgfCAzMyArKysrKysrKysrKysrKy0tLS0tLS0t LS0KIHRlc3Qvc3JjL2RhdGEtdGVzdHMuZWwgfCA1NyArKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgNzcgaW5zZXJ0aW9ucygrKSwgMTMg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2V2YWwuYyBiL3NyYy9ldmFsLmMKaW5kZXgg ZjQ4ZDdiMDY4MmYuLjFkMjUwYjk5NWU5IDEwMDY0NAotLS0gYS9zcmMvZXZhbC5jCisrKyBiL3Ny Yy9ldmFsLmMKQEAgLTYxMiwxOSArNjEyLDI2IEBAIERFRlVOICgiZGVmdmFyYWxpYXMiLCBGZGVm dmFyYWxpYXMsIFNkZWZ2YXJhbGlhcywgMiwgMywgMCwKICAgLyogaHR0cHM6Ly9saXN0cy5nbnUu b3JnL3IvZW1hY3MtZGV2ZWwvMjAwOC0wNC9tc2cwMDgzNC5odG1sCiAgICAgIElmIG5fYSBpcyBi b3VuZCwgYnV0IGJfdiBpcyBub3QsIHNldCB0aGUgdmFsdWUgb2YgYl92IHRvIG5fYSwKICAgICAg c28gdGhhdCBvbGQtY29kZSB0aGF0IGFmZmVjdHMgbl9hIGJlZm9yZSB0aGUgYWxpYXNpbmcgaXMg c2V0dXAKLSAgICAgc3RpbGwgd29ya3MuICAqLwotICBpZiAoTklMUCAoRmJvdW5kcCAoYmFzZV92 YXJpYWJsZSkpKQotICAgIHNldF9pbnRlcm5hbCAoYmFzZV92YXJpYWJsZSwgZmluZF9zeW1ib2xf dmFsdWUgKG5ld19hbGlhcyksCi0gICAgICAgICAgICAgICAgICBRbmlsLCBTRVRfSU5URVJOQUxf QklORCk7Ci0gIGVsc2UgaWYgKCFOSUxQIChGYm91bmRwIChuZXdfYWxpYXMpKQotICAgICAgICAg ICAmJiAhRVEgKGZpbmRfc3ltYm9sX3ZhbHVlIChuZXdfYWxpYXMpLAotICAgICAgICAgICAgICAg ICAgIGZpbmRfc3ltYm9sX3ZhbHVlIChiYXNlX3ZhcmlhYmxlKSkpCi0gICAgY2FsbDIgKGludGVy biAoImRpc3BsYXktd2FybmluZyIpLAotICAgICAgICAgICBsaXN0MyAoUWRlZnZhcmFsaWFzLCBp bnRlcm4gKCJsb3NpbmctdmFsdWUiKSwgbmV3X2FsaWFzKSwKLSAgICAgICAgICAgQ0FMTE4gKEZm b3JtYXRfbWVzc2FnZSwKLSAgICAgICAgICAgICAgICAgIGJ1aWxkX3N0cmluZwotICAgICAgICAg ICAgICAgICAgKCJPdmVyd3JpdGluZyB2YWx1ZSBvZiBgJXMnIGJ5IGFsaWFzaW5nIHRvIGAlcyci KSwKLSAgICAgICAgICAgICAgICAgIG5ld19hbGlhcywgYmFzZV92YXJpYWJsZSkpOworICAgICBz dGlsbCB3b3Jrcy4KKyAgICAgbl9hIGFuZCBiX3YgbWF5IGJlIGFsaWFzIGNoYWlucy4gRmJvdW5k cCwgZmluZF9zeW1ib2xfdmFsdWUsIGFuZAorICAgICBzZXRfaW50ZXJuYWwgZm9sbG93IHJlZGly ZWN0aW9uLgorICAgICBJbiB0aGUgaW5zdGFuY2Ugb2YgdmFyaWFibGUgb2Jzb2xlc2NlbmNlOgor ICAgICBuZXdfYWxpYXMgPSBvbGQgdmFyaWFibGUgYmVpbmcgZGVmaW5lZCBhcyBvYnNvbGV0ZQor ICAgICBiYXNlX3ZhcmlhYmxlID0gdGhlIG5ldyB2YXJpYWJsZSByZXBsYWNpbmcgaXQgICovCisg IGlmICghTklMUCAoRmJvdW5kcCAobmV3X2FsaWFzKSkpIC8qIEJVRyMwMDAwMiAqLworICAgIHsK KyAgICAgIGlmIChOSUxQIChGYm91bmRwIChiYXNlX3ZhcmlhYmxlKSkpCisJc2V0X2ludGVybmFs IChiYXNlX3ZhcmlhYmxlLCBmaW5kX3N5bWJvbF92YWx1ZSAobmV3X2FsaWFzKSwKKwkJICAgICAg UW5pbCwgU0VUX0lOVEVSTkFMX1NFVCk7CisgICAgICBlbHNlIGlmICghRVEgKGZpbmRfc3ltYm9s X3ZhbHVlIChuZXdfYWxpYXMpLAorCQkgICAgZmluZF9zeW1ib2xfdmFsdWUgKGJhc2VfdmFyaWFi bGUpKSkKKwljYWxsMiAoaW50ZXJuICgiZGlzcGxheS13YXJuaW5nIiksCisJICAgICAgIGxpc3Qz IChRZGVmdmFyYWxpYXMsIGludGVybiAoImxvc2luZy12YWx1ZSIpLCBuZXdfYWxpYXMpLAorCSAg ICAgICBDQUxMTiAoRmZvcm1hdF9tZXNzYWdlLAorCQkgICAgICBidWlsZF9zdHJpbmcKKwkJICAg ICAgKCJPdmVyd3JpdGluZyB2YWx1ZSBvZiBgJXMnIGJ5IGFsaWFzaW5nIHRvIGAlcyciKSwKKwkJ ICAgICAgbmV3X2FsaWFzLCBiYXNlX3ZhcmlhYmxlKSk7CisgICAgfQogCiAgIHsKICAgICB1bmlv biBzcGVjYmluZGluZyAqcDsKZGlmZiAtLWdpdCBhL3Rlc3Qvc3JjL2RhdGEtdGVzdHMuZWwgYi90 ZXN0L3NyYy9kYXRhLXRlc3RzLmVsCmluZGV4IDFkMzRkZDNjNGE5Li43YjMxNzMwYzRjMiAxMDA2 NDQKLS0tIGEvdGVzdC9zcmMvZGF0YS10ZXN0cy5lbAorKysgYi90ZXN0L3NyYy9kYXRhLXRlc3Rz LmVsCkBAIC02NDMsNiArNjQzLDYzIEBAIGRhdGEtdGVzdHMtd2F0Y2hlcnMtZm9yd2FyZC1idWcw MDAwMQogICAgIChzaG91bGQgKG51bGwgIHIxKSkKICAgICAocmVtb3ZlLXZhcmlhYmxlLXdhdGNo ZXIgJ3JpZ2h0LW1hcmdpbi13aWR0aCBmMSkpKQogCis7OyBCVUcjMDAwMDIKKyhlcnQtZGVmdGVz dCBkYXRhLXRlc3RzLXZhcmFsaWFzLXdhdGNoZXJzLWJ1ZzAwMDAyICgpCisgIChsZXQgKChyMSBu aWwpKQorICAgIChjbC1mbGV0ICgoYnVnLWFkdmljZSAoJnJlc3QgXykgKHB1c2ggIndlIHdlcmUg d2FybmVkIiByMSkpKQorICAgICAgKGFkdmljZS1hZGQgICMnZGlzcGxheS13YXJuaW5nIDpvdmVy cmlkZSAjJ2J1Zy1hZHZpY2UpCisgICAgICAodW53aW5kLXByb3RlY3QKKyAgICAgICAgICAobGV0 ICgoYTEgKGdlbnN5bSkpICA7OyB1bmJvdW5kIGNhc2VkCisgICAgICAgICAgICAgICAgKGEyIChn ZW5zeW0pKSAgOzsgdW5ib3VuZCBjYXNlZAorICAgICAgICAgICAgICAgIChhMyAoZ2Vuc3ltKSkK KyAgICAgICAgICAgICAgICAoYTQgKGdlbnN5bSkpCisgICAgICAgICAgICAgICAgKGE1IChnZW5z eW0pKQorICAgICAgICAgICAgICAgICh2MSAoZ2Vuc3ltKSkgIDs7IHVuYm91bmQgY2FzZWQKKyAg ICAgICAgICAgICAgICAodjIgKGdlbnN5bSkpCisgICAgICAgICAgICAgICAgKHYzIChnZW5zeW0p KSAgOzsgdW5ib3VuZCBjYXNlZAorICAgICAgICAgICAgICAgICh2NCAoZ2Vuc3ltKSkKKyAgICAg ICAgICAgICAgICAodjUgKGdlbnN5bSkpCisgICAgICAgICAgICAgICAgKGYxIChsYW1iZGEgKCZy ZXN0IGFyZ3MpIChwdXNoIGFyZ3MgcjEpKSkpCisgICAgICAgICAgICAoc2V0IGEzIDUpCisgICAg ICAgICAgICAoc2V0IGE0IDUpCisgICAgICAgICAgICAoc2V0IGE1IDEwKQorICAgICAgICAgICAg KHNldCB2MiA1KQorICAgICAgICAgICAgKHNldCB2NCA1KQorICAgICAgICAgICAgKHNldCB2NSA1 KQorICAgICAgICAgICAgKGFkZC12YXJpYWJsZS13YXRjaGVyIHYxIGYxKQorICAgICAgICAgICAg KGFkZC12YXJpYWJsZS13YXRjaGVyIHYyIGYxKQorICAgICAgICAgICAgKGFkZC12YXJpYWJsZS13 YXRjaGVyIHYzIGYxKQorICAgICAgICAgICAgKGFkZC12YXJpYWJsZS13YXRjaGVyIHY0IGYxKQor ICAgICAgICAgICAgKGFkZC12YXJpYWJsZS13YXRjaGVyIHY1IGYxKQorICAgICAgICAgICAgKGFk ZC12YXJpYWJsZS13YXRjaGVyIGE1IGYxKSA7OyBiZWNvbWluZyBhbiBhbGlhcworICAgICAgICAg ICAgOzsgMSkgbl9hIHVuYm91bmQgYW5kIGJfdiB1bmJvdW5kCisgICAgICAgICAgICAoZGVmdmFy YWxpYXMgYTEgdjEpCisgICAgICAgICAgICAoc2hvdWxkIChudWxsIHIxKSkKKyAgICAgICAgICAg IChzaG91bGQtbm90IChib3VuZHAgdjEpKQorICAgICAgICAgICAgKHNob3VsZC1ub3QgKGJvdW5k cCBhMSkpCisgICAgICAgICAgICA7OyAyKSBuX2EgdW5ib3VuZCBhbmQgYl92IGJvdW5kCisgICAg ICAgICAgICAoZGVmdmFyYWxpYXMgYTIgdjIpCisgICAgICAgICAgICAoc2hvdWxkIChudWxsIHIx KSkKKyAgICAgICAgICAgIChzaG91bGQgYChldmFsICg9IDUgLHYyICxhMikpKQorICAgICAgICAg ICAgOzsgMykgbl9hIGJvdW5kIGFuZCBiX3YgdW5ib3VuZAorICAgICAgICAgICAgKGRlZnZhcmFs aWFzIGEzIHYzKQorICAgICAgICAgICAgOzsgLS0gYl92IHdhdGNoZXIgYmVpbmcgbm90aWZpZWQg aXQgaXMgYmVpbmcgc2V0CisgICAgICAgICAgICAoc2hvdWxkIChlcXVhbCAocG9wIHIxKSBgKCx2 MyA1IHNldCBuaWwpKSkKKyAgICAgICAgICAgIChzaG91bGQgKG51bGwgcjEpKQorICAgICAgICAg ICAgKHNob3VsZCBgKGV2YWwgKD0gNSAsdjMgLGEzKSkpCisgICAgICAgICAgICA7OyA0KSBib3Ro IGJvdW5kIGFuZCBlcXVhbAorICAgICAgICAgICAgKGRlZnZhcmFsaWFzIGE0IHY0KQorICAgICAg ICAgICAgKHNob3VsZCAobnVsbCByMSkpCisgICAgICAgICAgICAoc2hvdWxkIGAoZXZhbCAoPSA1 ICx2NCAsYTQpKSkKKyAgICAgICAgICAgIDs7IDUpIGJvdGggYm91bmQgYW5kIHVuZXF1YWwgKG5f YSBoYXMgYSB3YXRjaGVyIGFsc28pCisgICAgICAgICAgICAoZGVmdmFyYWxpYXMgYTUgdjUpCisg ICAgICAgICAgICA7OyAtLSBuX2Egd2F0Y2hlciBiZWluZyBub3RpZmllZCBpdCBpcyBiZWNvbWlu ZyBhbiBhbGlhcworICAgICAgICAgICAgKHNob3VsZCAoZXF1YWwgKHBvcCByMSkgYCgsYTUgLHY1 IGRlZnZhcmFsaWFzIG5pbCkpKQorICAgICAgICAgICAgOzsgLS0gdXNlciB3YXJuZWQgbl9hIGlz IGxvb3NpbmcgaXRzIHZhbHVlCisgICAgICAgICAgICAoc2hvdWxkIChlcXVhbCAocG9wIHIxKSAi d2Ugd2VyZSB3YXJuZWQiKSkKKyAgICAgICAgICAgIChzaG91bGQgYChldmFsICg9IDUgLHY1ICxh NSkpKSkKKyAgICAgICAgKGFkdmljZS1yZW1vdmUgIydkaXNwbGF5LXdhcm5pbmcgIydidWctYWR2 aWNlKSkpKSkKKwogKGVydC1kZWZ0ZXN0IGRhdGEtdGVzdHMta2lsbC1hbGwtbG9jYWwtdmFyaWFi bGVzICgpIDtidWcjMzA4NDYKICAgKHdpdGgtdGVtcC1idWZmZXIKICAgICAoc2V0cS1sb2NhbCBk YXRhLXRlc3RzLWZvbzEgMSkKLS0gCjIuMzQuMQoK --000000000000e511dc0615415fc6--