From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: =?UTF-8?Q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9_?= =?UTF-8?Q?=D0=91=D0=BE=D0=B9=D0=BA=D0=BE=D0=B2?= via "Bug reports for GNU Emacs, the Swiss army knife of text editors" Newsgroups: gmane.emacs.bugs Subject: bug#63757: 29.0.91 order of package paths changed: random old versions of packages in load-path Date: Sat, 3 Jun 2023 22:53:58 +1000 Message-ID: References: <83y1l7gzqw.fsf@gnu.org> <87ilcb2p1l.fsf@posteo.net> <87sfb8g85v.fsf@posteo.net> <83v8g496gm.fsf@gnu.org> Reply-To: =?UTF-8?Q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9_?= =?UTF-8?Q?=D0=91=D0=BE=D0=B9=D0=BA=D0=BE=D0=B2?= Mime-Version: 1.0 Content-Type: multipart/alternative; boundary="00000000000067fb7205fd392ac1" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="39436"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Philip Kaludercic , 63757@debbugs.gnu.org, monnier@iro.umontreal.ca To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Sat Jun 03 15:11:33 2023 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 1q5R2b-000A7Q-5x for geb-bug-gnu-emacs@m.gmane-mx.org; Sat, 03 Jun 2023 15:11:33 +0200 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1q5R29-0002xY-2P; Sat, 03 Jun 2023 09:11:05 -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 1q5R27-0002wl-2J for bug-gnu-emacs@gnu.org; Sat, 03 Jun 2023 09:11:03 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1q5R26-00049C-CD for bug-gnu-emacs@gnu.org; Sat, 03 Jun 2023 09:11:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1q5R26-00022C-7r for bug-gnu-emacs@gnu.org; Sat, 03 Jun 2023 09:11:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: =?UTF-8?Q?=D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9_?= =?UTF-8?Q?=D0=91=D0=BE=D0=B9=D0=BA=D0=BE=D0=B2?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sat, 03 Jun 2023 13:11:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 63757 X-GNU-PR-Package: emacs Original-Received: via spool by 63757-submit@debbugs.gnu.org id=B63757.16857978557798 (code B ref 63757); Sat, 03 Jun 2023 13:11:02 +0000 Original-Received: (at 63757) by debbugs.gnu.org; 3 Jun 2023 13:10:55 +0000 Original-Received: from localhost ([127.0.0.1]:41801 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1q5R1y-00021c-Dy for submit@debbugs.gnu.org; Sat, 03 Jun 2023 09:10:55 -0400 Original-Received: from smtp36.i.mail.ru ([95.163.41.77]:43548) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1q5Qlt-0001Ou-Tm for 63757@debbugs.gnu.org; Sat, 03 Jun 2023 08:54:20 -0400 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=list.ru; s=mail4; h=Content-Type:Cc:To:Subject:Message-ID:Date:From:In-Reply-To:References:MIME-Version:From:Subject:Content-Type:Content-Transfer-Encoding:To:Cc; bh=/xXXoPkdxfv0AxWutTSN0TtpoHRj+lMmSB4RooUBRUQ=; t=1685796857;x=1685886857; b=ns9rr00kcdtVIMYtnlB9N0uQKwWDbg9M6Xy2jRKh8aDaHqcpP/iRGktPgV9wF2gLht/dRpYGNUPW1q/HfiqIN6V4msmHfe+e93ElI2TvWehs5sTM65Lu0HzbnB3qTSDmkBfoSm/SiYSGb6lL2ztl4f5KFjp+HzQzJM2juqtybUw/G9iZuT849BCVhAwpoT4mab6fg1Ll9e/Kvo22TJtbtimqWfnYy5mdGL1IJKMEk+yFfBpsVJbiedOnszPcElzScfcDA6YmQP/1kTUrX9gA3b5/9gnnATwWKF+PGucgBwjHy+9C1Fz6ElKpy+Xh5ZaDfD4ZcOE4bq76SAGbAVc16g==; Original-Received: by smtp36.i.mail.ru with esmtpa (envelope-from ) id 1q5Qlm-002oYV-Mg for 63757@debbugs.gnu.org; Sat, 03 Jun 2023 15:54:11 +0300 Original-Received: by mail-wm1-f44.google.com with SMTP id 5b1f17b1804b1-3f60e536250so31431305e9.1 for <63757@debbugs.gnu.org>; Sat, 03 Jun 2023 05:54:10 -0700 (PDT) X-Gm-Message-State: AC+VfDxpvmioS4/X+9sb5+unKHTHzXRUuaDxLNZxHObtpY3xjrlyshRF cvJj4ruTN6m6VozvlvvwYQvVkQdh0HBnLHZqY7Q= X-Google-Smtp-Source: ACHHUZ5OiJ+4Dj1aHR3gHfPHmXchV8e+dPm9o+rkXywrJ9bAvVGj2kI4WMXit1JhR5bPiDky1chKpI7LMAGZPcCuqhY= X-Received: by 2002:a1c:e901:0:b0:3f1:731e:cdb1 with SMTP id q1-20020a1ce901000000b003f1731ecdb1mr4378842wmc.6.1685796849972; Sat, 03 Jun 2023 05:54:09 -0700 (PDT) In-Reply-To: X-Gmail-Original-Message-ID: Authentication-Results: smtp36.i.mail.ru; auth=pass smtp.auth=artscan@list.ru smtp.mailfrom=artscan@list.ru X-Mailru-Src: smtp X-7564579A: B8F34718100C35BD X-77F55803: 4F1203BC0FB41BD988F25420CCA9469A21D90764A1F52C44D64BC5774C94F273182A05F53808504001E303BE74FB90C9ED8973259B5023E7D9705D24AEEB1AD995C703A63B284C72 X-7FA49CB5: FF5795518A3D127A4AD6D5ED66289B5278DA827A17800CE77C1346FE4B18DC51EA1F7E6F0F101C67BD4B6F7A4D31EC0BCC500DACC3FED6E28638F802B75D45FF8AA50765F79006370CE92FB8C11ED3D88638F802B75D45FF36EB9D2243A4F8B5A6FCA7DBDB1FC311F39EFFDF887939037866D6147AF826D8869CA01A446A8F9CDF91E67FAEC4624A6F9789CCF6C18C3F8528715B7D10C86859CC434672EE6371117882F4460429728776938767073520D76C6ED7039589DE6FD1C55BDD38FC3FD2E47CDBA5A96583BA9C0B312567BB2376E601842F6C81A19E625A9149C048EED76C6ED7039589DE3071BDA2D7A0BB39D8FC6C240DEA7642DBF02ECDB25306B2B78CF848AE20165D0A6AB1C7CE11FEE34AB4081B6A6C2E076136E347CC761E07C4224003CC836476E2F48590F00D11D6E2021AF6380DFAD1A18204E546F3947CB11811A4A51E3B096D1867E19FE1407959CC434672EE6371089D37D7C0E48F6C8AA50765F7900637A7EFCB0EB5ACB161EFF80C71ABB335746BA297DBC24807EABDAD6C7F3747799A X-C1DE0DAB: 0D63561A33F958A5FD7FE20B305921AE72F51756B6FE19FE9693E9A6B7AB9001F87CCE6106E1FC07E67D4AC08A07B9B01F9513A7CA91E555CB5012B2E24CD356 X-C8649E89: 1C3962B70DF3F0ADE00A9FD3E00BEEDF77DD89D51EBB7742D3581295AF09D3DF87807E0823442EA2ED31085941D9CD0AF7F820E7B07EA4CFD35D6CE0315CE4BD9B00224B0CC4EB3D4C8E8A237C13ED287FC4B0C46211AB30F62474FBACD619B0F4BC53521BD43B0159E0F0C62E94B1CA0E9C28D1D68AF657CAACD699CDC6F98202C26D483E81D6BE1362B2BFE906F14DEF4373B74A18CF49CC2E138FFB4ACBED X-D57D3AED: 3ZO7eAau8CL7WIMRKs4sN3D3tLDjz0dLbV79QFUyzQ2Ujvy7cMT6pYYqY16iZVKkSc3dCLJ7zSJH7+u4VD18S7Vl4ZUrpaVfd2+vE6kuoey4m4VkSEu530nj6fImhcD4MUrOEAnl0W826KZ9Q+tr5ycPtXkTV4k65bRjmOUUP8cvGozZ33TWg5HZplvhhXbhDGzqmQDTd6OAevLeAnq3Ra9uf7zvY2zzsIhlcp/Y7m53TZgf2aB4JOg4gkr2biojyw2weiAeMrrtiOjT2m2EXQ== X-Mailru-Sender: 4C235FE2E5D2D89013B63ECCE717D5A8CC7AB5C34C30E7030C11173D0B9274AE9B9539C915833AA8A3C36B4D8423ABA5C77752E0C033A69EC36ED9D1848BBC3A06988B367FA93C37B4A721A3011E896F X-Mras: Ok X-Mailman-Approved-At: Sat, 03 Jun 2023 09:10:51 -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:262833 Archived-At: --00000000000067fb7205fd392ac1 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable The idea is to split the list to 3 parts and to sort each of them by version-list-< separately (but I am not sure which combination of preference is correct) and to flatten at the end ((VC packages) (builtin packages) (the rest)) I use (package-vc-p p1) and (assq p1 package--builtins) predicates for splitting (not sure for builtin). The code below needs refactoring. (require 'cl) (defun package--get-activatable-pkg (pkg-name) ;; Is "activatable" a word? (let ((pkg-descs (flatten-list (mapcar (lambda (x) (sort x (lambda (p1 p2) (let ((v1 (package-desc-version p1)) (v2 (package-desc-version p2))) (version-list-< v2 v1))))) (let ((y (reduce (lambda (p1 p2) (if (package-vc-p p1) (push p1 (first p2)) (push p1 (second p2))) p2) (cdr (assq pkg-name package-alist)) :initial-value (list nil nil) :from-end t))) (append (list (car y)) (reduce (lambda (p1 p2) (if (assq p1 package--builtins) (push p1 (first p2)) (push p1 (second p2)) p2)) (cadr y) :initial-value (list nil nil) :from-end t))))))) ;; Check if PACKAGE is available in `package-alist'. (while (when pkg-descs (let ((available-version (package-desc-version (car pkg-descs)))) (package-disabled-p pkg-name available-version))) (setq pkg-descs (cdr pkg-descs))) (car pkg-descs))) On Sat, Jun 3, 2023 at 9:50=E2=80=AFPM =D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8= =D0=B9 =D0=91=D0=BE=D0=B9=D0=BA=D0=BE=D0=B2 wrote: > The fix above will not work. > > I can do it for "Prefer VC packages" only: > > (require 'cl) > (defun package--get-activatable-pkg (pkg-name) > ;; Is "activatable" a word? > (let ((pkg-descs > (flatten-list > (mapcar (lambda (x) > (sort x > (lambda (p1 p2) > (let ((v1 (package-desc-version p1)) > (v2 (package-desc-version p2))) > (version-list-< v2 v1))))) > (reduce > (lambda (p1 p2) > (if (package-vc-p p1) > (push p1 (first p2)) > (push p1 (second p2))) > p2) > (cdr (assq pkg-name package-alist)) > :initial-value (list nil nil) > :from-end t))))) > ;; Check if PACKAGE is available in `package-alist'. > (while > (when pkg-descs > (let ((available-version (package-desc-version (car pkg-descs))= )) > (package-disabled-p pkg-name available-version))) > (setq pkg-descs (cdr pkg-descs))) > (car pkg-descs))) > > > Still can't for "Prefer builtin packages". > > > On Sat, Jun 3, 2023 at 8:37=E2=80=AFPM Eli Zaretskii wrote= : > >> > From: Philip Kaludercic >> > Cc: =D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8=D0=B9 =D0=91=D0=BE=D0=B9=D0= =BA=D0=BE=D0=B2 , >> > 63757@debbugs.gnu.org, Stefan >> > Monnier >> > Date: Sat, 03 Jun 2023 10:19:24 +0000 >> > >> > > Won't this work: >> > > >> > > diff --git a/lisp/emacs-lisp/package.el b/lisp/emacs-lisp/package.el >> > > index 01826da273d..7eb185e7042 100644 >> > > --- a/lisp/emacs-lisp/package.el >> > > +++ b/lisp/emacs-lisp/package.el >> > > @@ -927,7 +927,9 @@ package--get-activatable-pkg >> > > (package-vc-p p2) >> > > ;; Prefer builtin packages. >> > > (package-disabled-p p1 v1) >> > > - (not (package-disabled-p p2 v2)))))))= ) >> > > + (not (package-disabled-p p2 v2)) >> > > + ;; Prever newer packages >> > > + (version-list-< v2 v1))))))) >> > > ;; Check if PACKAGE is available in `package-alist'. >> > > (while >> > > (when pkg-descs >> > >> > Ping? >> >> If there's no response, and you think this is the right fix, we can >> simply install it, I guess. >> > > > -- > __________________________ > > =D0=A1 =D1=83=D0=B2=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=D0=BC, > =D0=91=D0=BE=D0=B9=D0=BA=D0=BE=D0=B2 =D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8= =D0=B9 =D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B5=D0=B2=D0=B8=D1=87 > =D1=81=D0=BE=D1=82. 8-924-202-25-65 > e-mail: artscan@list.ru > --=20 __________________________ =D0=A1 =D1=83=D0=B2=D0=B0=D0=B6=D0=B5=D0=BD=D0=B8=D0=B5=D0=BC, =D0=91=D0=BE=D0=B9=D0=BA=D0=BE=D0=B2 =D0=95=D0=B2=D0=B3=D0=B5=D0=BD=D0=B8= =D0=B9 =D0=90=D0=BB=D0=B5=D0=BA=D1=81=D0=B5=D0=B5=D0=B2=D0=B8=D1=87 =D1=81=D0=BE=D1=82. 8-924-202-25-65 e-mail: artscan@list.ru --00000000000067fb7205fd392ac1 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: base64 PGRpdiBkaXI9Imx0ciI+PGRpdj48ZGl2PlRoZSBpZGVhIGlzIHRvIHNwbGl0IHRoZSBsaXN0IHRv IDMgcGFydHMgYW5kIHRvIHNvcnQgZWFjaCBvZiB0aGVtIGJ5IHZlcnNpb24tbGlzdC0mbHQ7IHNl cGFyYXRlbHkgKGJ1dCBJIGFtIG5vdCBzdXJlIHdoaWNoIGNvbWJpbmF0aW9uIG9mIHByZWZlcmVu Y2UgaXMgY29ycmVjdCkgYW5kIHRvIGZsYXR0ZW4gYXQgdGhlIGVuZDxicj48YnI+PC9kaXY+KChW QyBwYWNrYWdlcykgKGJ1aWx0aW4gcGFja2FnZXMpICh0aGUgcmVzdCkpPGJyPjxicj48L2Rpdj5J IHVzZSAocGFja2FnZS12Yy1wIHAxKSBhbmQgKGFzc3EgcDEgcGFja2FnZS0tYnVpbHRpbnMpIHBy ZWRpY2F0ZXMgZm9yIHNwbGl0dGluZyAobm90IHN1cmUgZm9yIGJ1aWx0aW4pLiBUaGUgY29kZSBi ZWxvdyBuZWVkcyByZWZhY3RvcmluZy48YnI+PGJyPihyZXF1aXJlICYjMzk7Y2wpPGJyPihkZWZ1 biBwYWNrYWdlLS1nZXQtYWN0aXZhdGFibGUtcGtnIChwa2ctbmFtZSk8YnI+wqAgOzsgSXMgJnF1 b3Q7YWN0aXZhdGFibGUmcXVvdDsgYSB3b3JkPzxicj7CoCAobGV0ICgocGtnLWRlc2NzPGJyPsKg IMKgIMKgIMKgIMKgKGZsYXR0ZW4tbGlzdDxicj7CoCDCoCDCoCDCoCDCoCAobWFwY2FyIChsYW1i ZGEgKHgpIDxicj7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAoc29ydCB4PGJyPsKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChsYW1iZGEgKHAxIHAyKTxicj7CoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAobGV0ICgodjEgKHBhY2thZ2Ut ZGVzYy12ZXJzaW9uIHAxKSk8YnI+wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgKHYyIChwYWNrYWdlLWRlc2MtdmVyc2lvbiBwMikpKTxicj7CoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAodmVyc2lvbi1saXN0LSZsdDsg djIgdjEpKSkpKTxicj7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAobGV0ICgoeSAocmVkdWNl PGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChsYW1iZGEgKHAx IHAyKTxicj7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAoaWYg KHBhY2thZ2UtdmMtcCBwMSk8YnI+wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgKHB1c2ggcDEgKGZpcnN0IHAyKSk8YnI+wqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKHB1c2ggcDEgKHNlY29uZCBwMikpKTxicj7C oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwMik8YnI+wqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKGNkciAoYXNzcSBwa2ctbmFtZSBw YWNrYWdlLWFsaXN0KSk8YnI+wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgOmluaXRpYWwtdmFsdWUgKGxpc3QgbmlsIG5pbCk8YnI+wqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgOmZyb20tZW5kIHQpKSk8YnI+wqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgKGFwcGVuZCAobGlzdCAoY2FyIHkpKTxicj7CoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAocmVkdWNlPGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgKGxhbWJkYSAocDEgcDIpPGJyPsKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgKGlmIChhc3NxIHAxIHBhY2thZ2UtLWJ1aWx0 aW5zKTxicj7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoChwdXNoIHAxIChmaXJzdCBwMikpPGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgKHB1c2ggcDEgKHNlY29uZCBwMikpPGJyPsKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgcDIpKTxicj7CoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoChjYWRyIHkpPGJyPsKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgOmluaXRpYWwtdmFsdWUgKGxpc3Qgbmls IG5pbCk8YnI+wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqA6ZnJv bS1lbmQgdCkpKSkpKSk8YnI+wqAgwqAgOzsgQ2hlY2sgaWYgUEFDS0FHRSBpcyBhdmFpbGFibGUg aW4gYHBhY2thZ2UtYWxpc3QmIzM5Oy48YnI+wqAgwqAgKHdoaWxlPGJyPsKgIMKgIMKgIMKgICh3 aGVuIHBrZy1kZXNjczxicj7CoCDCoCDCoCDCoCDCoCAobGV0ICgoYXZhaWxhYmxlLXZlcnNpb24g KHBhY2thZ2UtZGVzYy12ZXJzaW9uIChjYXIgcGtnLWRlc2NzKSkpKTxicj7CoCDCoCDCoCDCoCDC oCDCoCAocGFja2FnZS1kaXNhYmxlZC1wIHBrZy1uYW1lIGF2YWlsYWJsZS12ZXJzaW9uKSkpPGJy PsKgIMKgIMKgIChzZXRxIHBrZy1kZXNjcyAoY2RyIHBrZy1kZXNjcykpKTxicj7CoCDCoCAoY2Fy IHBrZy1kZXNjcykpKTxicj48YnI+PGJyPjwvZGl2Pjxicj48ZGl2IGNsYXNzPSJnbWFpbF9xdW90 ZSI+PGRpdiBkaXI9Imx0ciIgY2xhc3M9ImdtYWlsX2F0dHIiPk9uIFNhdCwgSnVuIDMsIDIwMjMg YXQgOTo1MOKAr1BNINCV0LLQs9C10L3QuNC5INCR0L7QudC60L7QsiAmbHQ7PGEgaHJlZj0ibWFp bHRvOmFydHNjYW5AbGlzdC5ydSI+YXJ0c2NhbkBsaXN0LnJ1PC9hPiZndDsgd3JvdGU6PGJyPjwv ZGl2PjxibG9ja3F1b3RlIGNsYXNzPSJnbWFpbF9xdW90ZSIgc3R5bGU9Im1hcmdpbjowcHggMHB4 IDBweCAwLjhleDtib3JkZXItbGVmdDoxcHggc29saWQgcmdiKDIwNCwyMDQsMjA0KTtwYWRkaW5n LWxlZnQ6MWV4Ij48ZGl2IGRpcj0ibHRyIj48ZGl2PjxkaXY+VGhlIGZpeCBhYm92ZSB3aWxsIG5v dCB3b3JrLjxicj48YnI+SSBjYW4gZG8gaXQgZm9yICZxdW90O1ByZWZlciBWQyBwYWNrYWdlcyZx dW90OyBvbmx5Ojxicj48YnI+KHJlcXVpcmUgJiMzOTtjbCk8YnI+KGRlZnVuIHBhY2thZ2UtLWdl dC1hY3RpdmF0YWJsZS1wa2cgKHBrZy1uYW1lKTxicj7CoCA7OyBJcyAmcXVvdDthY3RpdmF0YWJs ZSZxdW90OyBhIHdvcmQ/PGJyPsKgIChsZXQgKChwa2ctZGVzY3M8YnI+wqAgwqAgwqAgwqAgwqAo ZmxhdHRlbi1saXN0PGJyPsKgIMKgIMKgIMKgIMKgIChtYXBjYXIgKGxhbWJkYSAoeCkgPGJyPsKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChzb3J0IHg8YnI+wqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgKGxhbWJkYSAocDEgcDIpPGJyPsKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChsZXQgKCh2MSAocGFja2FnZS1kZXNjLXZlcnNpb24g cDEpKTxicj7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCAodjIgKHBhY2thZ2UtZGVzYy12ZXJzaW9uIHAyKSkpPGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgICh2ZXJzaW9uLWxpc3QtJmx0OyB2MiB2MSkpKSkpPGJy PsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChyZWR1Y2U8YnI+wqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAobGFtYmRhIChwMSBwMik8YnI+wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAoaWYgKHBhY2thZ2UtdmMtcCBwMSk8YnI+wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAocHVzaCBwMSAoZmlyc3QgcDIpKTxicj7CoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoChwdXNoIHAxIChzZWNvbmQgcDIpKSk8YnI+wqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgwqBwMik8YnI+wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAoY2RyIChh c3NxIHBrZy1uYW1lIHBhY2thZ2UtYWxpc3QpKTxicj7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoDppbml0aWFsLXZhbHVlIChsaXN0IG5pbCBuaWwpPGJyPsKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgOmZyb20tZW5kIHQpKSkpKTxicj7CoCDCoCA7OyBDaGVjayBpZiBQQUNLQUdFIGlz IGF2YWlsYWJsZSBpbiBgcGFja2FnZS1hbGlzdCYjMzk7Ljxicj7CoCDCoCAod2hpbGU8YnI+wqAg wqAgwqAgwqAgKHdoZW4gcGtnLWRlc2NzPGJyPsKgIMKgIMKgIMKgIMKgIChsZXQgKChhdmFpbGFi bGUtdmVyc2lvbiAocGFja2FnZS1kZXNjLXZlcnNpb24gKGNhciBwa2ctZGVzY3MpKSkpPGJyPsKg IMKgIMKgIMKgIMKgIMKgIChwYWNrYWdlLWRpc2FibGVkLXAgcGtnLW5hbWUgYXZhaWxhYmxlLXZl cnNpb24pKSk8YnI+wqAgwqAgwqAgKHNldHEgcGtnLWRlc2NzIChjZHIgcGtnLWRlc2NzKSkpPGJy PsKgIMKgIChjYXIgcGtnLWRlc2NzKSkpPGJyPjxicj48YnI+PC9kaXY+U3RpbGwgY2FuJiMzOTt0 IGZvciAmcXVvdDtQcmVmZXIgYnVpbHRpbiBwYWNrYWdlcyZxdW90Oy48YnI+PGJyPjwvZGl2Pjwv ZGl2Pjxicj48ZGl2IGNsYXNzPSJnbWFpbF9xdW90ZSI+PGRpdiBkaXI9Imx0ciIgY2xhc3M9Imdt YWlsX2F0dHIiPk9uIFNhdCwgSnVuIDMsIDIwMjMgYXQgODozN+KAr1BNIEVsaSBaYXJldHNraWkg Jmx0OzxhIGhyZWY9Im1haWx0bzplbGl6QGdudS5vcmciIHRhcmdldD0iX2JsYW5rIj5lbGl6QGdu dS5vcmc8L2E+Jmd0OyB3cm90ZTo8YnI+PC9kaXY+PGJsb2NrcXVvdGUgY2xhc3M9ImdtYWlsX3F1 b3RlIiBzdHlsZT0ibWFyZ2luOjBweCAwcHggMHB4IDAuOGV4O2JvcmRlci1sZWZ0OjFweCBzb2xp ZCByZ2IoMjA0LDIwNCwyMDQpO3BhZGRpbmctbGVmdDoxZXgiPiZndDsgRnJvbTogUGhpbGlwIEth bHVkZXJjaWMgJmx0OzxhIGhyZWY9Im1haWx0bzpwaGlsaXBrQHBvc3Rlby5uZXQiIHRhcmdldD0i X2JsYW5rIj5waGlsaXBrQHBvc3Rlby5uZXQ8L2E+Jmd0Ozxicj4NCiZndDsgQ2M6INCV0LLQs9C1 0L3QuNC5INCR0L7QudC60L7QsiAmbHQ7PGEgaHJlZj0ibWFpbHRvOmFydHNjYW5AbGlzdC5ydSIg dGFyZ2V0PSJfYmxhbmsiPmFydHNjYW5AbGlzdC5ydTwvYT4mZ3Q7LDxicj4NCiZndDvCoCDCoDxh IGhyZWY9Im1haWx0bzo2Mzc1N0BkZWJidWdzLmdudS5vcmciIHRhcmdldD0iX2JsYW5rIj42Mzc1 N0BkZWJidWdzLmdudS5vcmc8L2E+LMKgIFN0ZWZhbjxicj4NCiZndDvCoCBNb25uaWVyICZsdDs8 YSBocmVmPSJtYWlsdG86bW9ubmllckBpcm8udW1vbnRyZWFsLmNhIiB0YXJnZXQ9Il9ibGFuayI+ bW9ubmllckBpcm8udW1vbnRyZWFsLmNhPC9hPiZndDs8YnI+DQomZ3Q7IERhdGU6IFNhdCwgMDMg SnVuIDIwMjMgMTA6MTk6MjQgKzAwMDA8YnI+DQomZ3Q7IDxicj4NCiZndDsgJmd0OyBXb24mIzM5 O3QgdGhpcyB3b3JrOjxicj4NCiZndDsgJmd0Ozxicj4NCiZndDsgJmd0OyBkaWZmIC0tZ2l0IGEv bGlzcC9lbWFjcy1saXNwL3BhY2thZ2UuZWwgYi9saXNwL2VtYWNzLWxpc3AvcGFja2FnZS5lbDxi cj4NCiZndDsgJmd0OyBpbmRleCAwMTgyNmRhMjczZC4uN2ViMTg1ZTcwNDIgMTAwNjQ0PGJyPg0K Jmd0OyAmZ3Q7IC0tLSBhL2xpc3AvZW1hY3MtbGlzcC9wYWNrYWdlLmVsPGJyPg0KJmd0OyAmZ3Q7 ICsrKyBiL2xpc3AvZW1hY3MtbGlzcC9wYWNrYWdlLmVsPGJyPg0KJmd0OyAmZ3Q7IEBAIC05Mjcs NyArOTI3LDkgQEAgcGFja2FnZS0tZ2V0LWFjdGl2YXRhYmxlLXBrZzxicj4NCiZndDsgJmd0O8Kg IMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIChwYWNrYWdlLXZj LXAgcDIpPGJyPg0KJmd0OyAmZ3Q7wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAg wqAgwqAgwqAgwqAgOzsgUHJlZmVyIGJ1aWx0aW4gcGFja2FnZXMuPGJyPg0KJmd0OyAmZ3Q7wqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgKHBhY2thZ2UtZGlz YWJsZWQtcCBwMSB2MSk8YnI+DQomZ3Q7ICZndDsgLcKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKg IMKgIMKgIMKgIMKgIMKgIMKgIChub3QgKHBhY2thZ2UtZGlzYWJsZWQtcCBwMiB2MikpKSkpKSkp PGJyPg0KJmd0OyAmZ3Q7ICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCAobm90IChwYWNrYWdlLWRpc2FibGVkLXAgcDIgdjIpKTxicj4NCiZndDsgJmd0OyArwqAg wqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgOzsgUHJldmVyIG5ld2Vy IHBhY2thZ2VzPGJyPg0KJmd0OyAmZ3Q7ICvCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDC oCDCoCDCoCDCoCDCoCAodmVyc2lvbi1saXN0LSZsdDsgdjIgdjEpKSkpKSkpPGJyPg0KJmd0OyAm Z3Q7wqAgwqAgwqAgOzsgQ2hlY2sgaWYgUEFDS0FHRSBpcyBhdmFpbGFibGUgaW4gYHBhY2thZ2Ut YWxpc3QmIzM5Oy48YnI+DQomZ3Q7ICZndDvCoCDCoCDCoCAod2hpbGU8YnI+DQomZ3Q7ICZndDvC oCDCoCDCoCDCoCDCoCAod2hlbiBwa2ctZGVzY3M8YnI+DQomZ3Q7IDxicj4NCiZndDsgUGluZz88 YnI+DQo8YnI+DQpJZiB0aGVyZSYjMzk7cyBubyByZXNwb25zZSwgYW5kIHlvdSB0aGluayB0aGlz IGlzIHRoZSByaWdodCBmaXgsIHdlIGNhbjxicj4NCnNpbXBseSBpbnN0YWxsIGl0LCBJIGd1ZXNz Ljxicj4NCjwvYmxvY2txdW90ZT48L2Rpdj48YnIgY2xlYXI9ImFsbCI+PGJyPjxzcGFuIGNsYXNz PSJnbWFpbF9zaWduYXR1cmVfcHJlZml4Ij4tLSA8L3NwYW4+PGJyPjxkaXYgZGlyPSJsdHIiIGNs YXNzPSJnbWFpbF9zaWduYXR1cmUiPjxmb250IGNvbG9yPSIjODg4ODg4Ij5fX19fX19fX19fX19f X19fX19fX19fX19fXzxicj4NCjxicj4NCtChINGD0LLQsNC20LXQvdC40LXQvCw8YnI+DQrQkdC+ 0LnQutC+0LIg0JXQstCz0LXQvdC40Lkg0JDQu9C10LrRgdC10LXQstC40Yc8YnI+DQrRgdC+0YIu IDgtOTI0LTIwMi0yNS02NTxicj4NCmUtbWFpbDogPGEgaHJlZj0ibWFpbHRvOmFydHNjYW5AbGlz dC5ydSIgdGFyZ2V0PSJfYmxhbmsiPmFydHNjYW5AbGlzdC5ydTwvYT48L2ZvbnQ+PC9kaXY+DQo8 L2Jsb2NrcXVvdGU+PC9kaXY+PGJyIGNsZWFyPSJhbGwiPjxicj48c3BhbiBjbGFzcz0iZ21haWxf c2lnbmF0dXJlX3ByZWZpeCI+LS0gPC9zcGFuPjxicj48ZGl2IGRpcj0ibHRyIiBjbGFzcz0iZ21h aWxfc2lnbmF0dXJlIj48Zm9udCBjb2xvcj0iIzg4ODg4OCI+X19fX19fX19fX19fX19fX19fX19f X19fX188YnI+DQo8YnI+DQrQoSDRg9Cy0LDQttC10L3QuNC10LwsPGJyPg0K0JHQvtC50LrQvtCy INCV0LLQs9C10L3QuNC5INCQ0LvQtdC60YHQtdC10LLQuNGHPGJyPg0K0YHQvtGCLiA4LTkyNC0y MDItMjUtNjU8YnI+DQplLW1haWw6IDxhIGhyZWY9Im1haWx0bzphcnRzY2FuQGxpc3QucnUiIHRh cmdldD0iX2JsYW5rIj5hcnRzY2FuQGxpc3QucnU8L2E+PC9mb250PjwvZGl2Pg0K --00000000000067fb7205fd392ac1--