From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Liu Hui Newsgroups: gmane.emacs.bugs Subject: bug#68559: [PATCH] Improve Python shell completion Date: Mon, 5 Feb 2024 23:03:19 +0800 Message-ID: References: <83zfx39mcy.fsf@gnu.org> <87a5og8m7t.fsf@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="000000000000d009a60610a3c38e" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="14659"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Eli Zaretskii , 68559@debbugs.gnu.org To: kobarity Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Mon Feb 05 16:04:05 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 1rX0Vw-0003bE-Sz for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 05 Feb 2024 16:04:05 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rX0Vm-0005ni-8o; Mon, 05 Feb 2024 10:03:54 -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 1rX0Vk-0005lt-RR for bug-gnu-emacs@gnu.org; Mon, 05 Feb 2024 10:03:52 -0500 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 1rX0Vi-0005hj-H2 for bug-gnu-emacs@gnu.org; Mon, 05 Feb 2024 10:03:52 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1rX0Vu-0004iJ-Ga for bug-gnu-emacs@gnu.org; Mon, 05 Feb 2024 10:04:02 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Liu Hui Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 05 Feb 2024 15:04:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 68559 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 68559-submit@debbugs.gnu.org id=B68559.170714543418103 (code B ref 68559); Mon, 05 Feb 2024 15:04:02 +0000 Original-Received: (at 68559) by debbugs.gnu.org; 5 Feb 2024 15:03:54 +0000 Original-Received: from localhost ([127.0.0.1]:52031 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rX0Vk-0004ht-R8 for submit@debbugs.gnu.org; Mon, 05 Feb 2024 10:03:54 -0500 Original-Received: from mail-ua1-x932.google.com ([2607:f8b0:4864:20::932]:59569) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rX0Vh-0004hd-Lu for 68559@debbugs.gnu.org; Mon, 05 Feb 2024 10:03:52 -0500 Original-Received: by mail-ua1-x932.google.com with SMTP id a1e0cc1a2514c-7d6104e6c7aso1972546241.2 for <68559@debbugs.gnu.org>; Mon, 05 Feb 2024 07:03:36 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1707145411; x=1707750211; darn=debbugs.gnu.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=igFZLgsqj5P6i5meALrgJt9n7/dTdsrPlIoe5entGjc=; b=O7hrvV79MjGwJDWgRMPU62aDDMyPuydTj5HKcf/JeMjEch0XXLXY7ZAxOiy7POJ2iA eXBxkLST3+yfHQGdCzMGxCpjCkg0SVoMuxxWD1r8xZBKoT8h/+Fghxyx3blgCl3sJVvK UBxVtLKIjM6aeP80yhZ+ok8L7h/3SqO3xR9NuK4M3oASNnLui46KvzjuA9LFOl8MwDrn wUtAn9+tYhz4eq24BAWs1xt3FgGaKWeaCRDkgb23mFh0uCykxgMV7Qxob4nLx+Xtfss0 1pN6PSNuLHScsbfzWLCmzn5xlXGR8X1bauBixE33l0kN9ov6bkA9g6nz6hxFAiIH7E/d g96w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1707145411; x=1707750211; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=igFZLgsqj5P6i5meALrgJt9n7/dTdsrPlIoe5entGjc=; b=WFUdf1hKxETZvsn65Jd5BaCgTIo3AXM5T9HbfX+IeXj9Dt8gG3kUZd5nHPmMkyr77M 6l4bY3JkruncjkhDxnIflOx8504narC7nMt6wAPstermmNdJ+g3iItHtSqycSeAhj8/U kRQtA4ccGoBZcnNzitxlGBNcHISmpB0cKpxMAXuJNp7N3zIULzGiOumg/NsEAupwq8F7 LtU/s2CHfFhNx3EPfetpK2ADkJMePX8J6v+q+EL6FJCjiMm25W7/KutV1G9JZnRgdE2B qrvY8Oj/pMsMhTq3o6oMcBMT08EoCvsUAD+gIZ6MEBGGz2cjjvjA3aCGufBJF2SMTOtO 7XAA== X-Gm-Message-State: AOJu0YztbHVhnoDww1WFW/heK6PIzth3uyg/Gkdhr4yzZWzzHhyNk3cM de0kryh8HhaRjQ6fLl/GuABj+5+ymXcdQd+hetowSaTOKkSiAW40XrwRN/E+hq3X9kItwW53B8m ATW39W3BOhi1swJfG2ot4Jk71FXo= X-Google-Smtp-Source: AGHT+IErnuUZDrK6XKfgZOMYB4MdxnBh8g8Rjq6cTCfq0YhSu5B2Q03IHcnsj7yKGmvVF+hTlhSaSHAPvNlMltuOiyM= X-Received: by 2002:a05:6122:989:b0:4c0:23a8:df2a with SMTP id g9-20020a056122098900b004c023a8df2amr2038040vkd.10.1707145411152; Mon, 05 Feb 2024 07:03:31 -0800 (PST) In-Reply-To: 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:279452 Archived-At: --000000000000d009a60610a3c38e Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sun, Feb 4, 2024 at 10:35=E2=80=AFPM kobarity wrote= : > > It is more a limitation of readline completer than a problem with > > jedi, as we cannot provide proper completion context for jedi. We may > > define a custom completer to combine jedi and rlcompleter, e.g. > > > > (setq python-shell-readline-completer " > > def __PYTHON_EL_setup_readline_completer(): > > import readline, rlcompleter > > import re, sys, os, __main__ > > from jedi import Interpreter > > > > class MyJediRL: > > def __init__(self): > > self.rlcompleter =3D rlcompleter.Completer() > > self.rldelim =3D readline.get_completer_delims() > > > > def complete(self, text, state): > > if state =3D=3D 0: > > sys.path.insert(0, os.getcwd()) > > try: > > interpreter =3D Interpreter(text, [__main__.__dict_= _]) > > completions =3D interpreter.complete(fuzzy=3DFalse) > > self.matches =3D [ > > text[:len(text) - c._like_name_length] + c.name= _with_symbols > > for c in completions > > ] > > > > # try rlcompleter > > sub =3D re.split('[' + re.escape(self.rldelim) + ']= ', text)[-1] > > i =3D 0 > > while True: > > completion =3D self.rlcompleter.complete(sub, i= ) > > if not completion: > > break > > i +=3D 1 > > completion =3D text[:len(text)-len(sub)] + comp= letion.rstrip(' ()') > > if completion not in self.matches: > > self.matches.append(completion) > > except: > > raise > > finally: > > sys.path.pop(0) > > try: > > return self.matches[state] > > except IndexError: > > return None > > > > readline.set_completer(MyJediRL().complete) > > readline.set_completer_delims('')") > > Thank you for the detailed explanation and the workaround. I > confirmed that the problem is solved by the above workaround. Just to > confirm, are you of the opinion that this workaround should not be the > default? I'm not sure if we should add more Python code in the form of strings to python.el, which increases maintenance burden IMO. Maybe they could be distributed separately at ELPA/Git forges. Actually, I'm considering simplifying this patch to mainly fix the bug that python shell completion doesn't respect the delimiter of readline completer. The new patch has been attached. It should support the completer defined in the PYTHONSTARTUP file, e.g., jedi or a custom completer like the above one. WDYT? --000000000000d009a60610a3c38e Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Respect-the-delimiter-of-completer-in-Python-shell-c.patch" Content-Disposition: attachment; filename="0001-Respect-the-delimiter-of-completer-in-Python-shell-c.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ls92ab080 RnJvbSAwODI1OTZlOTA4ZWU0NWQxOGM1MGMzYjlmMGI1MDIwYjc3OWFkYjc3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBMaXUgSHVpIDxsaXVodWkxNjEwQGdtYWlsLmNvbT4KRGF0ZTog VGh1LCAxOCBKYW4gMjAyNCAxMjowMDowMCArMDgwMApTdWJqZWN0OiBbUEFUQ0hdIFJlc3BlY3Qg dGhlIGRlbGltaXRlciBvZiBjb21wbGV0ZXIgaW4gUHl0aG9uIHNoZWxsIGNvbXBsZXRpb24KCiog bGlzcC9wcm9nbW9kZXMvcHl0aG9uLmVsOiAocHl0aG9uLXNoZWxsLWNvbXBsZXRpb24tc2V0dXAt Y29kZSk6IEZpeAp0aGUgY29tcGxldGlvbiBjb2RlIG9mIElQeXRob24uICBDaGFuZ2UgdGhlIHJl dHVybiB2YWx1ZSB0byBKU09OIHN0cmluZwphbmQgLi4uCihweXRob24tc2hlbGwtY29tcGxldGlv bi1nZXQtY29tcGxldGlvbnMpOiAuLi4gc2ltcGxpZnkgcGFyc2luZy4KKGluZmVyaW9yLXB5dGhv bi1tb2RlKTogVXBkYXRlIGRvY3N0cmluZy4KKHB5dGhvbi1zaGVsbC1yZWFkbGluZS1jb21wbGV0 ZXItZGVsaW1zKTogTmV3IHZhcmlhYmxlIGluZGljYXRpbmcgdGhlCndvcmQgZGVsaW1pdGVycyBv ZiByZWFkbGluZSBjb21wbGV0ZXIuCihweXRob24tc2hlbGwtY29tcGxldGlvbi1uYXRpdmUtc2V0 dXApOiBTZXQgdGhlIGNvbXBsZXRlciBkZWxpbWl0ZXIuCihweXRob24tc2hlbGwtY29tcGxldGlv bi1uYXRpdmUtZ2V0LWNvbXBsZXRpb25zKTogQ29udmVydCBvdXRwdXQgc3RyaW5nCnRvIGNvbXBs ZXRpb25zIHByb3Blcmx5LgoocHl0aG9uLXNoZWxsLS1nZXQtbXVsdGlsaW5lLWlucHV0KQoocHl0 aG9uLXNoZWxsLS1leHRyYS1jb21wbGV0aW9uLWNvbnRleHQpCihweXRob24tc2hlbGwtY29tcGxl dGlvbi1leHRyYS1jb250ZXh0KTogTmV3IGZ1bmN0aW9ucy4KKHB5dGhvbi1zaGVsbC1jb21wbGV0 aW9uLWF0LXBvaW50KTogU2VuZCB0ZXh0IGJlZ2lubmluZyBmcm9tIHRoZSBsaW5lCnN0YXJ0IGlm IHRoZSBjb21wbGV0aW9uIGJhY2tlbmQgZG9lcyBub3QgbmVlZCB3b3JkIHNwbGl0dGluZy4gIFJl bW92ZQp0aGUgZGV0ZWN0aW9uIG9mIGltcG9ydCBzdGF0ZW1lbnQgYmVjYXVzZSBpdCBpcyBub3Qg bmVlZGVkIGFueW1vcmUuCkNyZWF0ZSBwcm9wZXIgY29tcGxldGlvbiB0YWJsZSBiYXNlZCBvbiBj b21wbGV0aW9ucyByZXR1cm5lZCBmcm9tCmRpZmZlcmVudCBiYWNrZW5kcy4KCiogdGVzdC9saXNw L3Byb2dtb2Rlcy9weXRob24tdGVzdHMuZWwgKHB5dGhvbi10ZXN0cy0tY29tcGxldGlvbi1tb2R1 bGUpCihweXRob24tdGVzdHMtLWNvbXBsZXRpb24tcGFyYW1ldGVycykKKHB5dGhvbi10ZXN0cy0t Y29tcGxldGlvbi1leHRyYS1jb250ZXh0KTogTmV3IGhlbHBlciBmdW5jdGlvbnMuCihweXRob24t c2hlbGwtY29tcGxldGlvbi1hdC1wb2ludC1qZWRpLWNvbXBsZXRlcikKKHB5dGhvbi1zaGVsbC1j b21wbGV0aW9uLWF0LXBvaW50LWlweXRob24pOiBOZXcgdGVzdHMuCgoqIGV0Yy9ORVdTOiBBbm5v dW5jZSB0aGUgY2hhbmdlLiAoYnVnIzY4NTU5KQotLS0KIGxpc3AvcHJvZ21vZGVzL3B5dGhvbi5l bCAgICAgICAgICAgIHwgMjEyICsrKysrKysrKysrKysrKysrKysrKystLS0tLS0KIHRlc3QvbGlz cC9wcm9nbW9kZXMvcHl0aG9uLXRlc3RzLmVsIHwgIDkyICsrKysrKysrKysrKwogMiBmaWxlcyBj aGFuZ2VkLCAyNTcgaW5zZXJ0aW9ucygrKSwgNDcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEv bGlzcC9wcm9nbW9kZXMvcHl0aG9uLmVsIGIvbGlzcC9wcm9nbW9kZXMvcHl0aG9uLmVsCmluZGV4 IDlkODQwZWZiOWRhLi40NTMzNmM4Mzk2ZiAxMDA2NDQKLS0tIGEvbGlzcC9wcm9nbW9kZXMvcHl0 aG9uLmVsCisrKyBiL2xpc3AvcHJvZ21vZGVzL3B5dGhvbi5lbApAQCAtMTI4LDkgKzEyOCw5IEBA IDs7OyBDb21tZW50YXJ5OgogOzsgcmVjZWl2aW5nIGVzY2FwZSBzZXF1ZW5jZXMgKHdpdGggc29t ZSBsaW1pdGF0aW9ucywgaS5lLiBjb21wbGV0aW9uCiA7OyBpbiBibG9ja3MgZG9lcyBub3Qgd29y aykuICBUaGUgY29kZSBleGVjdXRlZCBmb3IgdGhlICJmYWxsYmFjayIKIDs7IGNvbXBsZXRpb24g Y2FuIGJlIGZvdW5kIGluIGBweXRob24tc2hlbGwtY29tcGxldGlvbi1zZXR1cC1jb2RlJyBhbmQK LTs7IGBweXRob24tc2hlbGwtY29tcGxldGlvbi1zdHJpbmctY29kZScgdmFyaWFibGVzLiAgVGhl aXIgZGVmYXVsdAotOzsgdmFsdWVzIGVuYWJsZSBjb21wbGV0aW9uIGZvciBib3RoIENQeXRob24g YW5kIElQeXRob24sIGFuZCBwcm9iYWJseQotOzsgYW55IHJlYWRsaW5lIGJhc2VkIHNoZWxsIChp dCdzIGtub3duIHRvIHdvcmsgd2l0aCBQeVB5KS4gIElmIHlvdXIKKzs7IGBweXRob24tc2hlbGwt Y29tcGxldGlvbi1nZXQtY29tcGxldGlvbnMnLiAgVGhlaXIgZGVmYXVsdCB2YWx1ZXMKKzs7IGVu YWJsZSBjb21wbGV0aW9uIGZvciBib3RoIENQeXRob24gYW5kIElQeXRob24sIGFuZCBwcm9iYWJs eSBhbnkKKzs7IHJlYWRsaW5lIGJhc2VkIHNoZWxsIChpdCdzIGtub3duIHRvIHdvcmsgd2l0aCBQ eVB5KS4gIElmIHlvdXIKIDs7IFB5dGhvbiBpbnN0YWxsYXRpb24gbGFja3MgcmVhZGxpbmUgKGxp a2UgQ1B5dGhvbiBmb3IgV2luZG93cyksCiA7OyBpbnN0YWxsaW5nIHB5cmVhZGxpbmUgKFVSTCBg aHR0cHM6Ly9pcHl0aG9uLm9yZy9weXJlYWRsaW5lLmh0bWwnKQogOzsgc2hvdWxkIHN1ZmZpY2Uu ICBUbyB0cm91Ymxlc2hvb3Qgd2h5IHlvdSBhcmUgbm90IGdldHRpbmcgYW55CkBAIC0zNjA0LDcg KzM2MDQsNiBAQCAoZGVmaW5lLWRlcml2ZWQtbW9kZSBpbmZlcmlvci1weXRob24tbW9kZSBjb21p bnQtbW9kZSAiSW5mZXJpb3IgUHl0aG9uIgogYHB5dGhvbi1zaGVsbC1wcm9tcHQtYmxvY2stcmVn ZXhwJywKIGBweXRob24tc2hlbGwtZm9udC1sb2NrLWVuYWJsZScsCiBgcHl0aG9uLXNoZWxsLWNv bXBsZXRpb24tc2V0dXAtY29kZScsCi1gcHl0aG9uLXNoZWxsLWNvbXBsZXRpb24tc3RyaW5nLWNv ZGUnLAogYHB5dGhvbi1lbGRvYy1zZXR1cC1jb2RlJywKIGBweXRob24tZmZhcC1zZXR1cC1jb2Rl JyBjYW4KIGN1c3RvbWl6ZSB0aGlzIG1vZGUgZm9yIGRpZmZlcmVudCBQeXRob24gaW50ZXJwcmV0 ZXJzLgpAQCAtNDI0NCw4ICs0MjQzLDkgQEAgKGRlZmN1c3RvbSBweXRob24tc2hlbGwtY29tcGxl dGlvbi1zZXR1cC1jb2RlCiAgICAgY29tcGxldGlvbnMgPSBbXQogICAgIGNvbXBsZXRlciA9IE5v bmUKCisgICAgaW1wb3J0IGpzb24KICAgICB0cnk6Ci0gICAgICAgIGltcG9ydCByZWFkbGluZQor ICAgICAgICBpbXBvcnQgcmVhZGxpbmUsIHJlCgogICAgICAgICB0cnk6CiAgICAgICAgICAgICBp bXBvcnQgX19idWlsdGluX18KQEAgLTQyNTYsMTYgKzQyNTYsMjkgQEAgKGRlZmN1c3RvbSBweXRo b24tc2hlbGwtY29tcGxldGlvbi1zZXR1cC1jb2RlCgogICAgICAgICBpc19pcHl0aG9uID0gKCdf X0lQWVRIT05fXycgaW4gYnVpbHRpbnMgb3IKICAgICAgICAgICAgICAgICAgICAgICAnX19JUFlU SE9OX19hY3RpdmUnIGluIGJ1aWx0aW5zKQotICAgICAgICBzcGxpdHMgPSB0ZXh0LnNwbGl0KCkK LSAgICAgICAgaXNfbW9kdWxlID0gc3BsaXRzIGFuZCBzcGxpdHNbMF0gaW4gKCdmcm9tJywgJ2lt cG9ydCcpCi0KLSAgICAgICAgaWYgaXNfaXB5dGhvbiBhbmQgaXNfbW9kdWxlOgotICAgICAgICAg ICAgZnJvbSBJUHl0aG9uLmNvcmUuY29tcGxldGVybGliIGltcG9ydCBtb2R1bGVfY29tcGxldGlv bgotICAgICAgICAgICAgY29tcGxldGlvbnMgPSBtb2R1bGVfY29tcGxldGlvbih0ZXh0LnN0cmlw KCkpCi0gICAgICAgIGVsaWYgaXNfaXB5dGhvbiBhbmQgJ19fSVAnIGluIGJ1aWx0aW5zOgotICAg ICAgICAgICAgY29tcGxldGlvbnMgPSBfX0lQLmNvbXBsZXRlKHRleHQpCi0gICAgICAgIGVsaWYg aXNfaXB5dGhvbiBhbmQgJ2dldF9pcHl0aG9uJyBpbiBidWlsdGluczoKLSAgICAgICAgICAgIGNv bXBsZXRpb25zID0gZ2V0X2lweXRob24oKS5Db21wbGV0ZXIuYWxsX2NvbXBsZXRpb25zKHRleHQp CisKKyAgICAgICAgaWYgaXNfaXB5dGhvbiBhbmQgJ2dldF9pcHl0aG9uJyBpbiBidWlsdGluczoK KyAgICAgICAgICAgIGRlZiBmaWx0ZXJfYyhwcmVmaXgsIGMpOgorICAgICAgICAgICAgICAgIGlm IHJlLm1hdGNoKCdfKyhpP1swLTldKyk/JCcsIGMpOgorICAgICAgICAgICAgICAgICAgICByZXR1 cm4gRmFsc2UKKyAgICAgICAgICAgICAgICBlbGlmIGNbMF0gPT0gJyUnIGFuZCBub3QgcmUubWF0 Y2goJ1slYS16QS1aXSskJywgcHJlZml4KToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEZh bHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIFRydWUKKworICAgICAgICAgICAgaW1wb3J0IElQ eXRob24KKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBJUHl0aG9uLnZlcnNp b25faW5mb1swXSA+PSA2OgorICAgICAgICAgICAgICAgICAgICBmcm9tIElQeXRob24uY29yZS5j b21wbGV0ZXIgaW1wb3J0IHByb3Zpc2lvbmFsY29tcGxldGVyCisgICAgICAgICAgICAgICAgICAg IHdpdGggcHJvdmlzaW9uYWxjb21wbGV0ZXIoKToKKyAgICAgICAgICAgICAgICAgICAgICAgIGNv bXBsZXRpb25zID0gWworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtjLnRleHQsIGMuc3Rh cnQsIGMuZW5kLCBjLnR5cGUgb3IgJz8nLCBjLnNpZ25hdHVyZSBvciAnJ10KKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZm9yIGMgaW4gZ2V0X2lweXRob24oKS5Db21wbGV0ZXIuY29tcGxl dGlvbnModGV4dCwgbGVuKHRleHQpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBm aWx0ZXJfYyh0ZXh0LCBjLnRleHQpXQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAg ICAgICAgICAgIHBhcnQsIG1hdGNoZXMgPSBnZXRfaXB5dGhvbigpLkNvbXBsZXRlci5jb21wbGV0 ZShsaW5lX2J1ZmZlcj10ZXh0KQorICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9ucyA9IFt0 ZXh0ICsgbVtsZW4ocGFydCk6XSBmb3IgbSBpbiBtYXRjaGVzIGlmIGZpbHRlcl9jKHRleHQsIG0p XQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHBhc3MKICAgICAgICAgZWxz ZToKICAgICAgICAgICAgICMgVHJ5IHRvIHJldXNlIGN1cnJlbnQgY29tcGxldGVyLgogICAgICAg ICAgICAgY29tcGxldGVyID0gcmVhZGxpbmUuZ2V0X2NvbXBsZXRlcigpCkBAIC00Mjg4LDcgKzQz MDEsNyBAQCAoZGVmY3VzdG9tIHB5dGhvbi1zaGVsbC1jb21wbGV0aW9uLXNldHVwLWNvZGUKICAg ICBmaW5hbGx5OgogICAgICAgICBpZiBnZXRhdHRyKGNvbXBsZXRlciwgJ1BZVEhPTl9FTF9XUkFQ UEVEJywgRmFsc2UpOgogICAgICAgICAgICAgY29tcGxldGVyLnByaW50X21vZGUgPSBUcnVlCi0g ICAgcmV0dXJuIGNvbXBsZXRpb25zIgorICAgIHJldHVybiBqc29uLmR1bXBzKGNvbXBsZXRpb25z KSIKICAgIkNvZGUgdXNlZCB0byBzZXR1cCBjb21wbGV0aW9uIGluIGluZmVyaW9yIFB5dGhvbiBw cm9jZXNzZXMuIgogICA6dHlwZSAnc3RyaW5nKQoKQEAgLTQzMjksNiArNDM0MiwxMCBAQCAoZGVm Y3VzdG9tIHB5dGhvbi1zaGVsbC1jb21wbGV0aW9uLW5hdGl2ZS10cnktb3V0cHV0LXRpbWVvdXQg MS4wCiAgIDp2ZXJzaW9uICIyNS4xIgogICA6dHlwZSAnZmxvYXQpCgorKGRlZnZhciBweXRob24t c2hlbGwtcmVhZGxpbmUtY29tcGxldGVyLWRlbGltcyBuaWwKKyAgIldvcmQgZGVsaW1pdGVycyB1 c2VkIGJ5IHRoZSByZWFkbGluZSBjb21wbGV0ZXIuCitJdCBpcyBhdXRvbWF0aWNhbGx5IHNldCBi eSBQeXRob24gc2hlbGwuIikKKwogKGRlZnZhciBweXRob24tc2hlbGwtY29tcGxldGlvbi1uYXRp dmUtcmVkaXJlY3QtYnVmZmVyCiAgICIgKlB5dGhvbiBjb21wbGV0aW9ucyByZWRpcmVjdCoiCiAg ICJCdWZmZXIgdG8gYmUgdXNlZCB0byByZWRpcmVjdCBvdXRwdXQgb2YgcmVhZGxpbmUgY29tbWFu ZHMuIikKQEAgLTQ0NjcsNiArNDQ4NCwxMCBAQCAoZGVmdW4gcHl0aG9uLXNoZWxsLWNvbXBsZXRp b24tbmF0aXZlLXNldHVwICgpCiBfX1BZVEhPTl9FTF9uYXRpdmVfY29tcGxldGlvbl9zZXR1cCgp IiBwcm9jZXNzKSkpCiAgICAgKHdoZW4gKHN0cmluZy1tYXRjaC1wICJweXRob25cXC5lbDogbmF0 aXZlIGNvbXBsZXRpb24gc2V0dXAgbG9hZGVkIgogICAgICAgICAgICAgICAgICAgICAgICAgICBv dXRwdXQpCisgICAgICAoc2V0cS1sb2NhbCBweXRob24tc2hlbGwtcmVhZGxpbmUtY29tcGxldGVy LWRlbGltcworICAgICAgICAgICAgICAgICAgKHN0cmluZy10cmltLXJpZ2h0CisgICAgICAgICAg ICAgICAgICAgKHB5dGhvbi1zaGVsbC1zZW5kLXN0cmluZy1uby1vdXRwdXQKKyAgICAgICAgICAg ICAgICAgICAgImltcG9ydCByZWFkbGluZTsgcHJpbnQocmVhZGxpbmUuZ2V0X2NvbXBsZXRlcl9k ZWxpbXMoKSkiKSkpCiAgICAgICAocHl0aG9uLXNoZWxsLWNvbXBsZXRpb24tbmF0aXZlLXRyeSkp KSkKCiAoZGVmdW4gcHl0aG9uLXNoZWxsLWNvbXBsZXRpb24tbmF0aXZlLXR1cm4tb2ZmICgmb3B0 aW9uYWwgbXNnKQpAQCAtNDUzNCw2ICs0NTU1LDggQEAgKGRlZnVuIHB5dGhvbi1zaGVsbC1jb21w bGV0aW9uLW5hdGl2ZS1nZXQtY29tcGxldGlvbnMgKHByb2Nlc3MgaW5wdXQpCiAgICAgKGxldCog KChvcmlnaW5hbC1maWx0ZXItZm4gKHByb2Nlc3MtZmlsdGVyIHByb2Nlc3MpKQogICAgICAgICAg ICAocmVkaXJlY3QtYnVmZmVyIChnZXQtYnVmZmVyLWNyZWF0ZQogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBweXRob24tc2hlbGwtY29tcGxldGlvbi1uYXRpdmUtcmVkaXJlY3QtYnVmZmVy KSkKKyAgICAgICAgICAgKHNlcCAoaWYgKHN0cmluZz0gcHl0aG9uLXNoZWxsLXJlYWRsaW5lLWNv bXBsZXRlci1kZWxpbXMgIiIpCisgICAgICAgICAgICAgICAgICAgICJbXG5ccl0rIiAiWyBcZlx0 XG5cclx2KCldKyIpKQogICAgICAgICAgICAodHJpZ2dlciAiXHQiKQogICAgICAgICAgICAobmV3 LWlucHV0IChjb25jYXQgaW5wdXQgdHJpZ2dlcikpCiAgICAgICAgICAgIChpbnB1dC1sZW5ndGgK QEAgLTQ1NzYsMjggKzQ1OTksODAgQEAgKGRlZnVuIHB5dGhvbi1zaGVsbC1jb21wbGV0aW9uLW5h dGl2ZS1nZXQtY29tcGxldGlvbnMgKHByb2Nlc3MgaW5wdXQpCiAgICAgICAgICAgICAgICAgICAg ICBwcm9jZXNzIHB5dGhvbi1zaGVsbC1jb21wbGV0aW9uLW5hdGl2ZS1vdXRwdXQtdGltZW91dAog ICAgICAgICAgICAgICAgICAgICAgY29taW50LXJlZGlyZWN0LWZpbmlzaGVkLXJlZ2V4cCkKICAg ICAgICAgICAgICAgICAocmUtc2VhcmNoLWJhY2t3YXJkICIwX19kdW1teV9jb21wbGV0aW9uX18i IG5pbCB0KQotICAgICAgICAgICAgICAgIChjbC1yZW1vdmUtZHVwbGljYXRlcwotICAgICAgICAg ICAgICAgICAoc3BsaXQtc3RyaW5nCi0gICAgICAgICAgICAgICAgICAoYnVmZmVyLXN1YnN0cmlu Zy1uby1wcm9wZXJ0aWVzCi0gICAgICAgICAgICAgICAgICAgKGxpbmUtYmVnaW5uaW5nLXBvc2l0 aW9uKSAocG9pbnQtbWluKSkKLSAgICAgICAgICAgICAgICAgICJbIFxmXHRcblxyXHYoKV0rIiB0 KQotICAgICAgICAgICAgICAgICA6dGVzdCAjJ3N0cmluZz0pKSkpCisgICAgICAgICAgICAgICAg KGxldCAoKHN0ciAoYnVmZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKGxpbmUtYmVnaW5uaW5nLXBvc2l0aW9uKSAocG9pbnQtbWluKSkpKQor ICAgICAgICAgICAgICAgICAgOzsgVGhlIHJlYWRsaW5lIGNvbXBsZXRlciBpcyBhbGxvd2VkIHRv IHJldHVybiBhIGxpc3QKKyAgICAgICAgICAgICAgICAgIDs7IG9mICh0ZXh0IHN0YXJ0IGVuZCB0 eXBlIHNpZ25hdHVyZSkgYXMgYSBKU09OCisgICAgICAgICAgICAgICAgICA7OyBzdHJpbmcuICBT ZWUgdGhlIHJldHVybiB2YWx1ZSBmb3IgSVB5dGhvbiBpbgorICAgICAgICAgICAgICAgICAgOzsg YHB5dGhvbi1zaGVsbC1jb21wbGV0aW9uLXNldHVwLWNvZGUnLgorICAgICAgICAgICAgICAgICAg KGlmIChzdHJpbmc9ICJbIiAoc3Vic3RyaW5nIHN0ciAwIDEpKQorICAgICAgICAgICAgICAgICAg ICAgIChjb25kaXRpb24tY2FzZSBuaWwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKHB5dGhv bi0tcGFyc2UtanNvbi1hcnJheSBzdHIpCisgICAgICAgICAgICAgICAgICAgICAgICAodCAoY2wt cmVtb3ZlLWR1cGxpY2F0ZXMgKHNwbGl0LXN0cmluZyBzdHIgc2VwIHQpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOnRlc3QgIydzdHJpbmc9KSkpCisg ICAgICAgICAgICAgICAgICAgIChjbC1yZW1vdmUtZHVwbGljYXRlcyAoc3BsaXQtc3RyaW5nIHN0 ciBzZXAgdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDp0ZXN0 ICMnc3RyaW5nPSkpKSkpKQogICAgICAgICAoc2V0LXByb2Nlc3MtZmlsdGVyIHByb2Nlc3Mgb3Jp Z2luYWwtZmlsdGVyLWZuKSkpKSkKCiAoZGVmdW4gcHl0aG9uLXNoZWxsLWNvbXBsZXRpb24tZ2V0 LWNvbXBsZXRpb25zIChwcm9jZXNzIGlucHV0KQogICAiR2V0IGNvbXBsZXRpb25zIG9mIElOUFVU IHVzaW5nIFBST0NFU1MuIgogICAod2l0aC1jdXJyZW50LWJ1ZmZlciAocHJvY2Vzcy1idWZmZXIg cHJvY2VzcykKLSAgICAobGV0ICgoY29tcGxldGlvbnMKLSAgICAgICAgICAgKHB5dGhvbi11dGls LXN0cmlwLXN0cmluZwotICAgICAgICAgICAgKHB5dGhvbi1zaGVsbC1zZW5kLXN0cmluZy1uby1v dXRwdXQKLSAgICAgICAgICAgICAoZm9ybWF0Ci0gICAgICAgICAgICAgICIlc1xucHJpbnQoJzsn LmpvaW4oX19QWVRIT05fRUxfZ2V0X2NvbXBsZXRpb25zKCVzKSkpIgorICAgIChweXRob24tLXBh cnNlLWpzb24tYXJyYXkKKyAgICAgKHB5dGhvbi1zaGVsbC1zZW5kLXN0cmluZy1uby1vdXRwdXQK KyAgICAgIChmb3JtYXQgIiVzXG5wcmludChfX1BZVEhPTl9FTF9nZXRfY29tcGxldGlvbnMoJXMp KSIKICAgICAgICAgICAgICAgcHl0aG9uLXNoZWxsLWNvbXBsZXRpb24tc2V0dXAtY29kZQogICAg ICAgICAgICAgICAocHl0aG9uLXNoZWxsLS1lbmNvZGUtc3RyaW5nIGlucHV0KSkKLSAgICAgICAg ICAgICBwcm9jZXNzKSkpKQotICAgICAgKHdoZW4gKD4gKGxlbmd0aCBjb21wbGV0aW9ucykgMikK LSAgICAgICAgKHNwbGl0LXN0cmluZyBjb21wbGV0aW9ucwotICAgICAgICAgICAgICAgICAgICAg ICJeJ1xcfF5cIlxcfDtcXHwnJFxcfFwiJCIgdCkpKSkpCisgICAgICBwcm9jZXNzKSkpKQorCiso ZGVmdW4gcHl0aG9uLXNoZWxsLS1nZXQtbXVsdGlsaW5lLWlucHV0ICgpCisgICJSZXR1cm4gbGlu ZXMgYXQgYSBtdWx0aS1saW5lIGlucHV0IGluIFB5dGhvbiBzaGVsbC4iCisgIChzYXZlLWV4Y3Vy c2lvbgorICAgIChsZXQgKChwIChwb2ludCkpIGxpbmVzKQorICAgICAgKHdoZW4gKHByb2duCisg ICAgICAgICAgICAgIChiZWdpbm5pbmctb2YtbGluZSkKKyAgICAgICAgICAgICAgKGxvb2tpbmct YmFjayBweXRob24tc2hlbGwtcHJvbXB0LWJsb2NrLXJlZ2V4cCAocG9zLWJvbCkpKQorICAgICAg ICAocHVzaCAoYnVmZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzIChwb2ludCkgcCkgbGluZXMp CisgICAgICAgICh3aGlsZSAocHJvZ24gKGNvbWludC1wcmV2aW91cy1wcm9tcHQgMSkKKyAgICAg ICAgICAgICAgICAgICAgICAobG9va2luZy1iYWNrIHB5dGhvbi1zaGVsbC1wcm9tcHQtYmxvY2st cmVnZXhwIChwb3MtYm9sKSkpCisgICAgICAgICAgKHB1c2ggKGJ1ZmZlci1zdWJzdHJpbmctbm8t cHJvcGVydGllcyAocG9pbnQpIChwb3MtZW9sKSkgbGluZXMpKQorICAgICAgICAocHVzaCAoYnVm ZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzIChwb2ludCkgKHBvcy1lb2wpKSBsaW5lcykpCisg ICAgICBsaW5lcykpKQorCisoZGVmdW4gcHl0aG9uLXNoZWxsLS1leHRyYS1jb21wbGV0aW9uLWNv bnRleHQgKCkKKyAgIkdldCBleHRyYSBjb21wbGV0aW9uIGNvbnRleHQgb2YgY3VycmVudCBpbnB1 dCBpbiBQeXRob24gc2hlbGwuIgorICAobGV0ICgobGluZXMgKHB5dGhvbi1zaGVsbC0tZ2V0LW11 bHRpbGluZS1pbnB1dCkpCisgICAgICAgIChweXRob24taW5kZW50LWd1ZXNzLWluZGVudC1vZmZz ZXQgbmlsKSkKKyAgICAod2hlbiAobm90ICh6ZXJvcCAobGVuZ3RoIGxpbmVzKSkpCisgICAgICAo d2l0aC10ZW1wLWJ1ZmZlcgorICAgICAgICAoZGVsYXktbW9kZS1ob29rcworICAgICAgICAgIChp bnNlcnQgKHN0cmluZy1qb2luIGxpbmVzICJcbiIpKQorICAgICAgICAgIChweXRob24tbW9kZSkK KyAgICAgICAgICAocHl0aG9uLXNoZWxsLWNvbXBsZXRpb24tZXh0cmEtY29udGV4dCkpKSkpKQor CisoZGVmdW4gcHl0aG9uLXNoZWxsLWNvbXBsZXRpb24tZXh0cmEtY29udGV4dCAoJm9wdGlvbmFs IHBvcykKKyAgIkdldCBleHRyYSBjb21wbGV0aW9uIGNvbnRleHQgYXQgcG9zaXRpb24gUE9TIGlu IFB5dGhvbiBidWZmZXIuCitJZiBvcHRpb25hbCBhcmd1bWVudCBQT1MgaXMgbmlsLCB1c2UgY3Vy cmVudCBwb3NpdGlvbi4KKworUmVhZGxpbmUgY29tcGxldGVycyBjb3VsZCB1c2UgY3VycmVudCBs aW5lIGFzIHRoZSBjb21wbGV0aW9uCitjb250ZXh0LCB3aGljaCBtYXkgYmUgaW5zdWZmaWNpZW50 LiAgSW4gdGhpcyBmdW5jdGlvbiwgZXh0cmEKK2NvbnRleHQgKGUuZy4gbXVsdGktbGluZSBmdW5j dGlvbiBjYWxsKSBpcyBmb3VuZCBhbmQgcmVmb3JtYXR0ZWQKK2FzIG9uZSBsaW5lLCB3aGljaCBp cyByZXF1aXJlZCBieSBuYXRpdmUgY29tcGxldGlvbi4iCisgIChsZXQgKGJvdW5kIHApCisgICAg KHNhdmUtZXhjdXJzaW9uCisgICAgICAoYW5kIHBvcyAoZ290by1jaGFyIHBvcykpCisgICAgICAo c2V0cSBib3VuZCAocG9zLWJvbCkpCisgICAgICAocHl0aG9uLW5hdi11cC1saXN0IC0xKQorICAg ICAgKHdoZW4gKGFuZCAoPCAocG9pbnQpIGJvdW5kKQorICAgICAgICAgICAgICAgICAob3IKKyAg ICAgICAgICAgICAgICAgIChsb29raW5nLWJhY2sKKyAgICAgICAgICAgICAgICAgICAocHl0aG9u LXJ4IChncm91cCAoKyAob3IgIi4iIHN5bWJvbC1uYW1lKSkpKSAocG9zLWJvbCkgdCkKKyAgICAg ICAgICAgICAgICAgIChwcm9nbgorICAgICAgICAgICAgICAgICAgICAoZm9yd2FyZC1saW5lIDAp CisgICAgICAgICAgICAgICAgICAgIChsb29raW5nLWF0ICJeWyBcdF0qXFwoZnJvbSBcXCkiKSkp KQorICAgICAgICAoc2V0cSBwIChtYXRjaC1iZWdpbm5pbmcgMSkpKSkKKyAgICAod2hlbiBwCisg ICAgICAocmVwbGFjZS1yZWdleHAtaW4tc3RyaW5nCisgICAgICAgIlxuWyBcdF0qIiAiIiAoYnVm ZmVyLXN1YnN0cmluZy1uby1wcm9wZXJ0aWVzIHAgKDEtIGJvdW5kKSkpKSkpCgogKGRlZnZhci1s b2NhbCBweXRob24tc2hlbGwtLWNhcGYtY2FjaGUgbmlsCiAgICJWYXJpYWJsZSB0byBzdG9yZSBj YWNoZWQgY29tcGxldGlvbnMgYW5kIGludmFsaWRhdGlvbiBrZXlzLiIpCkBAIC00NjEyLDIxICs0 Njg3LDI2IEBAIChkZWZ1biBweXRob24tc2hlbGwtY29tcGxldGlvbi1hdC1wb2ludCAoJm9wdGlv bmFsIHByb2Nlc3MpCiAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgV29ya2luZyBvbiBhIHNo ZWxsIGJ1ZmZlcjogdXNlIHByb21wdCBlbmQuCiAgICAgICAgICAgICAgICAgICAgICAgICAgKGNk ciAocHl0aG9uLXV0aWwtY29taW50LWxhc3QtcHJvbXB0KSkKICAgICAgICAgICAgICAgICAgICAg ICAgKGxpbmUtYmVnaW5uaW5nLXBvc2l0aW9uKSkpCi0gICAgICAgICAoaW1wb3J0LXN0YXRlbWVu dAotICAgICAgICAgICh3aGVuIChzdHJpbmctbWF0Y2gtcAotICAgICAgICAgICAgICAgICAocngg KCogc3BhY2UpIHdvcmQtc3RhcnQgKG9yICJmcm9tIiAiaW1wb3J0Iikgd29yZC1lbmQgc3BhY2Up Ci0gICAgICAgICAgICAgICAgIChidWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRpZXMgbGluZS1z dGFydCAocG9pbnQpKSkKLSAgICAgICAgICAgIChidWZmZXItc3Vic3RyaW5nLW5vLXByb3BlcnRp ZXMgbGluZS1zdGFydCAocG9pbnQpKSkpCisgICAgICAgICAobm8tZGVsaW1zCisgICAgICAgICAg KGFuZCAobm90IChpZiBpcy1zaGVsbC1idWZmZXIKKyAgICAgICAgICAgICAgICAgICAgICAgIChl cSAnZm9udC1sb2NrLWNvbW1lbnQtZmFjZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChn ZXQtdGV4dC1wcm9wZXJ0eSAoMS0gKHBvaW50KSkgJ2ZhY2UpKQorICAgICAgICAgICAgICAgICAg ICAgIChweXRob24tc3ludGF4LWNvbnRleHQgJ2NvbW1lbnQpKSkKKyAgICAgICAgICAgICAgICh3 aXRoLWN1cnJlbnQtYnVmZmVyIChwcm9jZXNzLWJ1ZmZlciBwcm9jZXNzKQorICAgICAgICAgICAg ICAgICAoaWYgcHl0aG9uLXNoZWxsLWNvbXBsZXRpb24tbmF0aXZlLWVuYWJsZQorICAgICAgICAg ICAgICAgICAgICAgKHN0cmluZz0gcHl0aG9uLXNoZWxsLXJlYWRsaW5lLWNvbXBsZXRlci1kZWxp bXMgIiIpCisgICAgICAgICAgICAgICAgICAgKHN0cmluZy1tYXRjaC1wICJpcHl0aG9uWzIzXT9c XCciIHB5dGhvbi1zaGVsbC1pbnRlcnByZXRlcikpKSkpCiAgICAgICAgICAoc3RhcnQKICAgICAg ICAgICAoaWYgKDwgKHBvaW50KSBsaW5lLXN0YXJ0KQogICAgICAgICAgICAgICAocG9pbnQpCiAg ICAgICAgICAgICAoc2F2ZS1leGN1cnNpb24KLSAgICAgICAgICAgICAgKGlmIChub3QgKHJlLXNl YXJjaC1iYWNrd2FyZAotICAgICAgICAgICAgICAgICAgICAgICAgKHB5dGhvbi1yeAotICAgICAg ICAgICAgICAgICAgICAgICAgIChvciB3aGl0ZXNwYWNlIG9wZW4tcGFyZW4gY2xvc2UtcGFyZW4K LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nLWRlbGltaXRlciBzaW1wbGUtb3Bl cmF0b3IpKQotICAgICAgICAgICAgICAgICAgICAgICAgbGluZS1zdGFydAotICAgICAgICAgICAg ICAgICAgICAgICAgdCAxKSkKKyAgICAgICAgICAgICAgKGlmIChvciBuby1kZWxpbXMKKyAgICAg ICAgICAgICAgICAgICAgICAobm90IChyZS1zZWFyY2gtYmFja3dhcmQKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAocHl0aG9uLXJ4CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChv ciB3aGl0ZXNwYWNlIG9wZW4tcGFyZW4gY2xvc2UtcGFyZW4KKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHN0cmluZy1kZWxpbWl0ZXIgc2ltcGxlLW9wZXJhdG9yKSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICBsaW5lLXN0YXJ0CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdCAxKSkpCiAgICAgICAgICAgICAgICAgICBsaW5lLXN0YXJ0CiAgICAgICAgICAgICAgICAg KGZvcndhcmQtY2hhciAobGVuZ3RoIChtYXRjaC1zdHJpbmctbm8tcHJvcGVydGllcyAwKSkpCiAg ICAgICAgICAgICAgICAgKHBvaW50KSkpKSkKQEAgLTQ2NjYsMTggKzQ3NDYsNTYgQEAgKGRlZnVu IHB5dGhvbi1zaGVsbC1jb21wbGV0aW9uLWF0LXBvaW50ICgmb3B0aW9uYWwgcHJvY2VzcykKICAg ICAgICAgICAgICAgICAgICh0ICMncHl0aG9uLXNoZWxsLWNvbXBsZXRpb24tbmF0aXZlLWdldC1j b21wbGV0aW9ucykpKSkKICAgICAgICAgIChwcmV2LXByb21wdCAoY2FyIHB5dGhvbi1zaGVsbC0t Y2FwZi1jYWNoZSkpCiAgICAgICAgICAocmUgKG9yIChjYWRyIHB5dGhvbi1zaGVsbC0tY2FwZi1j YWNoZSkgcmVnZXhwLXVubWF0Y2hhYmxlKSkKLSAgICAgICAgIChwcmVmaXggKGJ1ZmZlci1zdWJz dHJpbmctbm8tcHJvcGVydGllcyBzdGFydCBlbmQpKSkKKyAgICAgICAgIChwcmVmaXggKGJ1ZmZl ci1zdWJzdHJpbmctbm8tcHJvcGVydGllcyBzdGFydCBlbmQpKQorICAgICAgICAgKHByZWZpeC1v ZmZzZXQgMCkKKyAgICAgICAgIChleHRyYS1jb250ZXh0ICh3aGVuIG5vLWRlbGltcworICAgICAg ICAgICAgICAgICAgICAgICAgICAoaWYgaXMtc2hlbGwtYnVmZmVyCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAocHl0aG9uLXNoZWxsLS1leHRyYS1jb21wbGV0aW9uLWNvbnRleHQpCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKHB5dGhvbi1zaGVsbC1jb21wbGV0aW9uLWV4dHJh LWNvbnRleHQpKSkpCisgICAgICAgICAoZXh0cmEtb2Zmc2V0IChsZW5ndGggZXh0cmEtY29udGV4 dCkpKQorICAgICh1bmxlc3MgKHplcm9wIGV4dHJhLW9mZnNldCkKKyAgICAgIChzZXRxIHByZWZp eCAoY29uY2F0IGV4dHJhLWNvbnRleHQgcHJlZml4KSkpCiAgICAgOzsgVG8gaW52YWxpZGF0ZSB0 aGUgY2FjaGUsIHdlIGNoZWNrIGlmIHRoZSBwcm9tcHQgcG9zaXRpb24gb3IgdGhlCiAgICAgOzsg Y29tcGxldGlvbiBwcmVmaXggY2hhbmdlZC4KICAgICAodW5sZXNzIChhbmQgKGVxdWFsIHByZXYt cHJvbXB0IChjYXIgcHJvbXB0LWJvdW5kYXJpZXMpKQotICAgICAgICAgICAgICAgICAoc3RyaW5n LW1hdGNoIHJlIHByZWZpeCkpCisgICAgICAgICAgICAgICAgIChzdHJpbmctbWF0Y2ggcmUgcHJl Zml4KQorICAgICAgICAgICAgICAgICAoc2V0cSBwcmVmaXgtb2Zmc2V0ICgtIChsZW5ndGggcHJl Zml4KSAobWF0Y2gtZW5kIDEpKSkpCiAgICAgICAoc2V0cSBweXRob24tc2hlbGwtLWNhcGYtY2Fj aGUKICAgICAgICAgICAgIGAoLChjYXIgcHJvbXB0LWJvdW5kYXJpZXMpCiAgICAgICAgICAgICAg ICwoaWYgKHN0cmluZy1lbXB0eS1wIHByZWZpeCkKICAgICAgICAgICAgICAgICAgICByZWdleHAt dW5tYXRjaGFibGUKLSAgICAgICAgICAgICAgICAgKGNvbmNhdCAiXFxgIiAocmVnZXhwLXF1b3Rl IHByZWZpeCkgIlxcKD86XFxzd1xcfFxcc19cXCkqXFwnIikpCi0gICAgICAgICAgICAgICxAKGZ1 bmNhbGwgY29tcGxldGlvbi1mbiBwcm9jZXNzIChvciBpbXBvcnQtc3RhdGVtZW50IHByZWZpeCkp KSkpCi0gICAgKGxpc3Qgc3RhcnQgZW5kIChjZGRyIHB5dGhvbi1zaGVsbC0tY2FwZi1jYWNoZSkp KSkKKyAgICAgICAgICAgICAgICAgKGNvbmNhdCAiXFxgXFwoIiAocmVnZXhwLXF1b3RlIHByZWZp eCkgIlxcKVxcKD86XFxzd1xcfFxcc19cXCkqXFwnIikpCisgICAgICAgICAgICAgICxAKGZ1bmNh bGwgY29tcGxldGlvbi1mbiBwcm9jZXNzIHByZWZpeCkpKSkKKyAgICAobGV0ICgoY2FuZHMgKGNk ZHIgcHl0aG9uLXNoZWxsLS1jYXBmLWNhY2hlKSkpCisgICAgICAoY29uZAorICAgICAgICgoc3Ry aW5ncCAoY2FyIGNhbmRzKSkKKyAgICAgICAgKGlmIG5vLWRlbGltcworICAgICAgICAgICAgOzsg UmVkdWNlIGNvbXBsZXRpb24gY2FuZGlkYXRlcyBkdWUgdG8gbG9uZyBwcmVmaXguCisgICAgICAg ICAgICAoaWYtbGV0ICgoTHAgKGxlbmd0aCBwcmVmaXgpKQorICAgICAgICAgICAgICAgICAgICAg KChzdHJpbmctbWF0Y2ggIlxcKFxcc3dcXHxcXHNfXFwpK1xcJyIgcHJlZml4KSkKKyAgICAgICAg ICAgICAgICAgICAgIChMIChtYXRjaC1iZWdpbm5pbmcgMCkpKQorICAgICAgICAgICAgICAgIDs7 IElmIGV4dHJhLW9mZnNldCBpcyBub3QgemVybzoKKyAgICAgICAgICAgICAgICA7OyAgICAgICAg ICAgICAgICAgIHN0YXJ0ICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICA7OyBvLS0t LS0tLS0tLS0tLS0tLS0tby0tLS0tLS0tLW8tLS0tLS0tbworICAgICAgICAgICAgICAgIDs7IHw8 LSBleHRyYS1vZmZzZXQgLT58CisgICAgICAgICAgICAgICAgOzsgfDwtLS0tLS0tLS0tLSBMIC0t LS0tLS0tLS0tLT58CisgICAgICAgICAgICAgICAgOzsgICAgICAgICAgICAgICAgICAgICAgICAg IG5ldy1zdGFydAorICAgICAgICAgICAgICAgIChsaXN0ICgrIHN0YXJ0IEwgKC0gZXh0cmEtb2Zm c2V0KSkgZW5kCisgICAgICAgICAgICAgICAgICAgICAgKG1hcGNhciAobGFtYmRhIChzKSAoc3Vi c3RyaW5nIHMgTCkpIGNhbmRzKSkKKyAgICAgICAgICAgICAgKGxpc3QgZW5kIGVuZCAobWFwY2Fy IChsYW1iZGEgKHMpIChzdWJzdHJpbmcgcyBMcCkpIGNhbmRzKSkpCisgICAgICAgICAgKGxpc3Qg c3RhcnQgZW5kIGNhbmRzKSkpCisgICAgICAgOzsgcHl0aG9uLXNoZWxsLWNvbXBsZXRpb24oLW5h dGl2ZSktZ2V0LWNvbXBsZXRpb25zIG1heSBwcm9kdWNlIGEKKyAgICAgICA7OyBsaXN0IG9mICh0 ZXh0IHN0YXJ0IGVuZCB0eXBlIHNpZ25hdHVyZSkgZm9yIGNvbXBsZXRpb24uCisgICAgICAgKChj b25zcCAoY2FyIGNhbmRzKSkKKyAgICAgICAgKGxpc3QgKCsgc3RhcnQgKG50aCAxIChjYXIgY2Fu ZHMpKSAoLSBleHRyYS1vZmZzZXQpKQorICAgICAgICAgICAgICA7OyBDYW5kaWRhdGVzIG1heSBi ZSBjYWNoZWQsIHNvIHRoZSBlbmQgcG9zaXRpb24gc2hvdWxkCisgICAgICAgICAgICAgIDs7IGJl IGFkanVzdGVkIGFjY29yZGluZyB0byBjdXJyZW50IGNvbXBsZXRpb24gcHJlZml4LgorICAgICAg ICAgICAgICAoKyBzdGFydCAobnRoIDIgKGNhciBjYW5kcykpICgtIGV4dHJhLW9mZnNldCkgcHJl Zml4LW9mZnNldCkKKyAgICAgICAgICAgICAgY2FuZHMKKyAgICAgICAgICAgICAgOmFubm90YXRp b24tZnVuY3Rpb24KKyAgICAgICAgICAgICAgKGxhbWJkYSAoYykgKGNvbmNhdCAiICIgKG50aCAz IChhc3NvYyBjIGNhbmRzKSkpKQorICAgICAgICAgICAgICA6Y29tcGFueS1kb2NzaWcKKyAgICAg ICAgICAgICAgKGxhbWJkYSAoYykgKG50aCA0IChhc3NvYyBjIGNhbmRzKSkpKSkpKSkpCgogKGRl ZmluZS1vYnNvbGV0ZS1mdW5jdGlvbi1hbGlhcwogICAncHl0aG9uLXNoZWxsLWNvbXBsZXRpb24t Y29tcGxldGUtYXQtcG9pbnQKZGlmZiAtLWdpdCBhL3Rlc3QvbGlzcC9wcm9nbW9kZXMvcHl0aG9u LXRlc3RzLmVsIGIvdGVzdC9saXNwL3Byb2dtb2Rlcy9weXRob24tdGVzdHMuZWwKaW5kZXggNTk5 NTdmZjA3MTIuLmFmNmMxOTliNWJkIDEwMDY0NAotLS0gYS90ZXN0L2xpc3AvcHJvZ21vZGVzL3B5 dGhvbi10ZXN0cy5lbAorKysgYi90ZXN0L2xpc3AvcHJvZ21vZGVzL3B5dGhvbi10ZXN0cy5lbApA QCAtNDc5OSw2ICs0Nzk5LDk4IEBAIChlcnQtZGVmdGVzdCBweXRob24tc2hlbGwtY29tcGxldGlv bi1hdC1wb2ludC1uYXRpdmUtMSAoKQogICAgICAoZW5kLW9mLWxpbmUgMCkKICAgICAgKHNob3Vs ZC1ub3QgKG50aCAyIChweXRob24tc2hlbGwtY29tcGxldGlvbi1hdC1wb2ludCkpKSkpKQoKKyhk ZWZ1biBweXRob24tdGVzdHMtLWNvbXBsZXRpb24tbW9kdWxlICgpCisgICJDaGVjayBpZiBtb2R1 bGVzIGNhbiBiZSBjb21wbGV0ZWQgaW4gUHl0aG9uIHNoZWxsLiIKKyAgKGluc2VydCAiaW1wb3J0 IGRhdGV0IikKKyAgKGNvbXBsZXRpb24tYXQtcG9pbnQpCisgIChiZWdpbm5pbmctb2YtbGluZSkK KyAgKHNob3VsZCAobG9va2luZy1hdC1wICJpbXBvcnQgZGF0ZXRpbWUiKSkKKyAgKGtpbGwtbGlu ZSkKKyAgKGluc2VydCAiZnJvbSBkYXRldCIpCisgIChjb21wbGV0aW9uLWF0LXBvaW50KQorICAo YmVnaW5uaW5nLW9mLWxpbmUpCisgIChzaG91bGQgKGxvb2tpbmctYXQtcCAiZnJvbSBkYXRldGlt ZSIpKQorICAoZW5kLW9mLWxpbmUpCisgIChpbnNlcnQgIiBpbXBvcnQgdGltZWQiKQorICAoY29t cGxldGlvbi1hdC1wb2ludCkKKyAgKGJlZ2lubmluZy1vZi1saW5lKQorICAoc2hvdWxkIChsb29r aW5nLWF0LXAgImZyb20gZGF0ZXRpbWUgaW1wb3J0IHRpbWVkZWx0YSIpKQorICAoa2lsbC1saW5l KSkKKworKGRlZnVuIHB5dGhvbi10ZXN0cy0tY29tcGxldGlvbi1wYXJhbWV0ZXJzICgpCisgICJD aGVjayBpZiBwYXJhbWV0ZXJzIGNhbiBiZSBjb21wbGV0ZWQgaW4gUHl0aG9uIHNoZWxsLiIKKyAg KGluc2VydCAiaW1wb3J0IHJlIikKKyAgKGNvbWludC1zZW5kLWlucHV0KQorICAocHl0aG9uLXRl c3RzLXNoZWxsLXdhaXQtZm9yLXByb21wdCkKKyAgKGluc2VydCAicmUuc3BsaXQoJ2InLCAnYWJj JywgbWF4cyIpCisgIChjb21wbGV0aW9uLWF0LXBvaW50KQorICAoc2hvdWxkIChzdHJpbmc9ICJy ZS5zcGxpdCgnYicsICdhYmMnLCBtYXhzcGxpdD0iCisgICAgICAgICAgICAgICAgICAgKGJ1ZmZl ci1zdWJzdHJpbmcgKGxpbmUtYmVnaW5uaW5nLXBvc2l0aW9uKSAocG9pbnQpKSkpCisgIChpbnNl cnQgIjAsICIpCisgIChzaG91bGQgKHB5dGhvbi1zaGVsbC1jb21wbGV0aW9uLWF0LXBvaW50KSkK KyAgOzsgVGVzdCBpZiBjYWNoZSBpcyB1c2VkLgorICAoY2wtbGV0ZiAoKChzeW1ib2wtZnVuY3Rp b24gJ3B5dGhvbi1zaGVsbC1jb21wbGV0aW9uLWdldC1jb21wbGV0aW9ucykKKyAgICAgICAgICAg ICAnaWdub3JlKQorICAgICAgICAgICAgKChzeW1ib2wtZnVuY3Rpb24gJ3B5dGhvbi1zaGVsbC1j b21wbGV0aW9uLW5hdGl2ZS1nZXQtY29tcGxldGlvbnMpCisgICAgICAgICAgICAgJ2lnbm9yZSkp CisgICAgKGluc2VydCAiZmxhIikKKyAgICAoY29tcGxldGlvbi1hdC1wb2ludCkKKyAgICAoc2hv dWxkIChzdHJpbmc9ICJyZS5zcGxpdCgnYicsICdhYmMnLCBtYXhzcGxpdD0wLCBmbGFncz0iCisg ICAgICAgICAgICAgICAgICAgICAoYnVmZmVyLXN1YnN0cmluZyAobGluZS1iZWdpbm5pbmctcG9z aXRpb24pIChwb2ludCkpKSkpCisgIChiZWdpbm5pbmctb2YtbGluZSkKKyAgKGtpbGwtbGluZSkp CisKKyhkZWZ1biBweXRob24tdGVzdHMtLWNvbXBsZXRpb24tZXh0cmEtY29udGV4dCAoKQorICAi Q2hlY2sgaWYgZXh0cmEgY29udGV4dCBpcyB1c2VkIGZvciBjb21wbGV0aW9uLiIKKyAgKGluc2Vy dCAicmUuc3BsaXQoJ2InLCAnYWJjJywiKQorICAoY29taW50LXNlbmQtaW5wdXQpCisgIChweXRo b24tdGVzdHMtc2hlbGwtd2FpdC1mb3ItcHJvbXB0KQorICAoaW5zZXJ0ICJtYXhzIikKKyAgKGNv bXBsZXRpb24tYXQtcG9pbnQpCisgIChzaG91bGQgKHN0cmluZz0gIm1heHNwbGl0PSIKKyAgICAg ICAgICAgICAgICAgICAoYnVmZmVyLXN1YnN0cmluZyAobGluZS1iZWdpbm5pbmctcG9zaXRpb24p IChwb2ludCkpKSkKKyAgKGluc2VydCAiMCkiKQorICAoY29taW50LXNlbmQtaW5wdXQpCisgIChw eXRob24tdGVzdHMtc2hlbGwtd2FpdC1mb3ItcHJvbXB0KQorICAoaW5zZXJ0ICJmcm9tIHJlIGlt cG9ydCAoIikKKyAgKGNvbWludC1zZW5kLWlucHV0KQorICAocHl0aG9uLXRlc3RzLXNoZWxsLXdh aXQtZm9yLXByb21wdCkKKyAgKGluc2VydCAiSUdOIikKKyAgKGNvbXBsZXRpb24tYXQtcG9pbnQp CisgIChzaG91bGQgKHN0cmluZz0gIklHTk9SRUNBU0UiCisgICAgICAgICAgICAgICAgICAgKGJ1 ZmZlci1zdWJzdHJpbmcgKGxpbmUtYmVnaW5uaW5nLXBvc2l0aW9uKSAocG9pbnQpKSkpKQorCiso ZXJ0LWRlZnRlc3QgcHl0aG9uLXNoZWxsLWNvbXBsZXRpb24tYXQtcG9pbnQtamVkaS1jb21wbGV0 ZXIgKCkKKyAgIkNoZWNrIGlmIFB5dGhvbiBzaGVsbCBjb21wbGV0aW9uIHdvcmtzIHdoZW4gSmVk aSBjb21wbGV0ZXIgaXMgdXNlZC4iCisgIChza2lwLXVubGVzcyAoZXhlY3V0YWJsZS1maW5kIHB5 dGhvbi10ZXN0cy1zaGVsbC1pbnRlcnByZXRlcikpCisgIChweXRob24tdGVzdHMtd2l0aC10ZW1w LWJ1ZmZlci13aXRoLXNoZWxsCisgICAiIgorICAgKHB5dGhvbi1zaGVsbC13aXRoLXNoZWxsLWJ1 ZmZlcgorICAgICAocHl0aG9uLXNoZWxsLWNvbXBsZXRpb24tbmF0aXZlLXR1cm4tb24pCisgICAg IChza2lwLXVubGVzcyAoc3RyaW5nPSBweXRob24tc2hlbGwtcmVhZGxpbmUtY29tcGxldGVyLWRl bGltcyAiIikpCisgICAgIChweXRob24tdGVzdHMtLWNvbXBsZXRpb24tbW9kdWxlKQorICAgICAo cHl0aG9uLXRlc3RzLS1jb21wbGV0aW9uLXBhcmFtZXRlcnMpCisgICAgIChweXRob24tdGVzdHMt LWNvbXBsZXRpb24tZXh0cmEtY29udGV4dCkpKSkKKworKGVydC1kZWZ0ZXN0IHB5dGhvbi1zaGVs bC1jb21wbGV0aW9uLWF0LXBvaW50LWlweXRob24gKCkKKyAgIkNoZWNrIGlmIFB5dGhvbiBzaGVs bCBjb21wbGV0aW9uIHdvcmtzIGZvciBJUHl0aG9uLiIKKyAgKGxldCAoKHB5dGhvbi1zaGVsbC1p bnRlcnByZXRlciAiaXB5dGhvbiIpCisgICAgICAgIChweXRob24tc2hlbGwtaW50ZXJwcmV0ZXIt YXJncyAiLWkgLS1zaW1wbGUtcHJvbXB0IikpCisgICAgKHNraXAtdW5sZXNzCisgICAgIChhbmQK KyAgICAgIChleGVjdXRhYmxlLWZpbmQgcHl0aG9uLXNoZWxsLWludGVycHJldGVyKQorICAgICAg KGVxbCAoY2FsbC1wcm9jZXNzIHB5dGhvbi1zaGVsbC1pbnRlcnByZXRlciBuaWwgbmlsIG5pbCAi LS12ZXJzaW9uIikgMCkpKQorICAgIChweXRob24tdGVzdHMtd2l0aC10ZW1wLWJ1ZmZlci13aXRo LXNoZWxsCisgICAgICIiCisgICAgIChweXRob24tc2hlbGwtd2l0aC1zaGVsbC1idWZmZXIKKyAg ICAgICAocHl0aG9uLXNoZWxsLWNvbXBsZXRpb24tbmF0aXZlLXR1cm4tb2ZmKQorICAgICAgIChw eXRob24tdGVzdHMtLWNvbXBsZXRpb24tbW9kdWxlKQorICAgICAgIChweXRob24tdGVzdHMtLWNv bXBsZXRpb24tcGFyYW1ldGVycykKKyAgICAgICAocHl0aG9uLXNoZWxsLWNvbXBsZXRpb24tbmF0 aXZlLXR1cm4tb24pCisgICAgICAgKHNraXAtdW5sZXNzIChzdHJpbmc9IHB5dGhvbi1zaGVsbC1y ZWFkbGluZS1jb21wbGV0ZXItZGVsaW1zICIiKSkKKyAgICAgICAocHl0aG9uLXRlc3RzLS1jb21w bGV0aW9uLW1vZHVsZSkKKyAgICAgICAocHl0aG9uLXRlc3RzLS1jb21wbGV0aW9uLXBhcmFtZXRl cnMpCisgICAgICAgKHB5dGhvbi10ZXN0cy0tY29tcGxldGlvbi1leHRyYS1jb250ZXh0KSkpKSkK CiAMCiA7OzsgUERCIFRyYWNrIGludGVncmF0aW9uCi0tCjIuMzkuMgoK --000000000000d009a60610a3c38e--