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?Jo=C3=A3o_?= =?UTF-8?Q?T=C3=A1vora?= Newsgroups: gmane.emacs.bugs Subject: bug#47711: bug#48841: bug#47711: bug#48841: bug#47711: [PATCH VERSION 2] Add new `completion-filter-completions` API and deferred highlighting Date: Thu, 2 Nov 2023 09:48:51 +0000 Message-ID: References: <56ab18b1-4348-9b2c-85bb-af9b76cd429a@daniel-mendler.de> <328f87eb-6474-1442-e1ca-9ae8deb2a84a@yandex.ru> <83fsvcbio7.fsf@gnu.org> <9f432d18-e70f-54c1-0173-1899fb66d176@gutov.dev> <877cnafv39.fsf@gmail.com> <9447dde3-b8e7-2ec0-9a9c-72c4cf9d12a8@gutov.dev> <7d14bc13-4419-816c-5708-c42988c39c02@gutov.dev> <5d0a78cc-4fa0-ef04-3462-1826f17d7d56@gutov.dev> <877cn8asud.fsf@gmail.com> <8734xtauqj.fsf@gmail.com> <5181f95e-61e7-c8c4-6389-44ee57e0c749@gutov.dev> <31cadbfd-d086-a04f-0ed9-17ce70b4282c@gutov.dev> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="0000000000003d98570609284c82" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="30225"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Daniel Mendler , Eli Zaretskii , Stefan Monnier , 47711@debbugs.gnu.org To: Dmitry Gutov Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Thu Nov 02 10:49:54 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 1qyUKn-0007d3-Ut for geb-bug-gnu-emacs@m.gmane-mx.org; Thu, 02 Nov 2023 10:49:54 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qyUKP-0005B5-7X; Thu, 02 Nov 2023 05:49:29 -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 1qyUKN-0005Aa-5l for bug-gnu-emacs@gnu.org; Thu, 02 Nov 2023 05:49:27 -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 1qyUKM-0003Nm-Ts for bug-gnu-emacs@gnu.org; Thu, 02 Nov 2023 05:49:26 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1qyUKv-0000OP-NX for bug-gnu-emacs@gnu.org; Thu, 02 Nov 2023 05:50:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: =?UTF-8?Q?Jo=C3=A3o_?= =?UTF-8?Q?T=C3=A1vora?= Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 02 Nov 2023 09:50:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 47711 X-GNU-PR-Package: emacs Original-Received: via spool by 47711-submit@debbugs.gnu.org id=B47711.16989185931491 (code B ref 47711); Thu, 02 Nov 2023 09:50:01 +0000 Original-Received: (at 47711) by debbugs.gnu.org; 2 Nov 2023 09:49:53 +0000 Original-Received: from localhost ([127.0.0.1]:53954 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qyUKj-0000Nv-EL for submit@debbugs.gnu.org; Thu, 02 Nov 2023 05:49:53 -0400 Original-Received: from mail-lf1-x12e.google.com ([2a00:1450:4864:20::12e]:50503) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1qyUKd-0000Nf-Nc for 47711@debbugs.gnu.org; Thu, 02 Nov 2023 05:49:47 -0400 Original-Received: by mail-lf1-x12e.google.com with SMTP id 2adb3069b0e04-507975d34e8so929039e87.1 for <47711@debbugs.gnu.org>; Thu, 02 Nov 2023 02:49:08 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1698918543; x=1699523343; 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=zuzDYWFWzFu5GTXkGhSRBmYjTcowG6ZDAfieURGFEjM=; b=GRBQsz+wKY2I/EDtjd853wma/DvBNW+D9OL2gv5a434TW8Yloj+u34Q+xv5BVekAfH UnmbkHsCaKJcFbHfqbAKm+izElhhuP662/sw8hogeMj9Lgm79K9mIcGMiaN9S2M8hziz NA5i5hc6uxkqtcJIJvyULMK8B2jkGk1p3IhYOWJJ8YRGcwZrQH/m6ndwKSqjkq2EmrHS nrXSAFw/6AXw53wB1SSwTGWzOR0vm0uJZy4JpywxPvLHHSXJ0X2J+mKA0PcLEwGBIUv8 AJltvIfCQCwWZwbabRzMGoI2LqYdYtA306neSoqKn0ty3aQdFtFPM//w7+VjB4NOxLht MP0Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1698918543; x=1699523343; 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=zuzDYWFWzFu5GTXkGhSRBmYjTcowG6ZDAfieURGFEjM=; b=f0CT0GJJRcNdqI4aP0/jUBt3IammReCypIhewUMiZ6iN+AYicKGP2hTrU0kPaR47LV hegiq/REYCl5OUzff4HeLCaolIoSWaS8D6MR3h54S5QGyb0cu8jzNeX/LQE0ucPJV28N aOVxqXlA3INAsYwnNRU9YQyygCjEfcxdK3BeB0Sn92RFaDt6BgTspAb5HR5knzTnOC0m KyRmhVbTHvV1k8FrJrELRy/yf6IUa2mmKRBVu7D7nYzI0E3kOmoUBKcfoR3aQNF7C6Bq XQajjrg6CUS8fsGISJcWAMbLqTXXH4DCa7dvNVXw4hFwWaeqikPDANednnoT5KzN5R// S8pQ== X-Gm-Message-State: AOJu0Yzn62J3pMi2MeEWNwNbrOSK6RIcqvB2oEt2e0iMH05URXa77j55 HUo3WGb9MSI0b4t33Y20f/SPTs6yAyh6xzEa4DoEepXv5gfsfw== X-Google-Smtp-Source: AGHT+IFPvzeWtxqT8rnnCCP3ZMA9vtmOgz6fS+HyFaR4nGcQeX+rQtHrkfy5tmY2WFOdpQNa5u5GUU/2iO5AtBcmOAo= X-Received: by 2002:a05:6512:249:b0:503:fee:5849 with SMTP id b9-20020a056512024900b005030fee5849mr13389612lfo.53.1698918542697; Thu, 02 Nov 2023 02:49:02 -0700 (PDT) In-Reply-To: <31cadbfd-d086-a04f-0ed9-17ce70b4282c@gutov.dev> 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:273641 Archived-At: --0000000000003d98570609284c82 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, Nov 1, 2023 at 10:45=E2=80=AFPM Dmitry Gutov wro= te: > > If orderless (which I've never tried), does some kind of scoring of > > completions, it probably also needs the same complications of flex. > > Turns out, Orderless doesn't do any scoring or sorting. Only filtering. Interesting, so if I M-x d i f f with orderless I don't get results in any particular order? > >>>> Anyway, have you looked into what it would take to solve it? > >>> > >>> No, naively, I just think it's a similar situation of display and bus= iness > >>> logic being mixed up. Presumably the quoted stuff is just for insert= ion > >>> (and display?), and the unquoted stuff is what patterns/scoring shoul= d > >>> operate on. > >> > >> Apparently it's good for insertion, but according to that comment insi= de > >> the function, the unquoted stuff might actually be better for display. > > > > No idea what the unquoted stuff is for, so I haven't really tested it. > > A couple of scenarios: Thanks. Then I think it is working OK, but it would be safer if you were to double-check yourself, as I really never use this functionality. > LGTM overall, and I see that you compressed the sorting code a little. > > Both quoting/unquoting scenarios also seem to work as expected (for > highlighting, that seems to be thanks to completion--twq-all applying > the faces eagerly anyway). That's good. > Though given the examples (and I think others should be similar) it > wouldn't be an end of the world if scoring didn't really work for them > -- filtering should have already done most of the job. All of this is to > say that any new 3rd party completion styles, even those that do > sorting, would be okay without knowing about this text property. Maybe. > Some minor nits for the patch: Thanks. > I guess we should wait a few days to see if anyone has more comments, > and then install this? I addressed all your docstring suggestions, fixed a bug and significantly simplified the code in the latest version of the patch. I also removed the instrumentation in icomplete.el. Patch attached here and pushed to feature/completion-lazy-hilit. Stefan, Eli, would you like to chime in? Jo=C3=A3o --0000000000003d98570609284c82 Content-Type: application/octet-stream; name="lazy-hilit-2023-v6.diff" Content-Disposition: attachment; filename="lazy-hilit-2023-v6.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_loh079840 ZGlmZiAtLWdpdCBhL2xpc3AvaWNvbXBsZXRlLmVsIGIvbGlzcC9pY29tcGxldGUuZWwKaW5kZXgg ZTZmZGQxZjE4MzYuLmY0YzRmZWI3MzA0IDEwMDY0NAotLS0gYS9saXNwL2ljb21wbGV0ZS5lbAor KysgYi9saXNwL2ljb21wbGV0ZS5lbApAQCAtNzIyLDcgKzcyMiw4IEBAIGljb21wbGV0ZS1leGhp Yml0CiAgICAgICAgICAgICAgOzsgQ2hlY2sgaWYgc3RpbGwgaW4gdGhlIHJpZ2h0IGJ1ZmZlciAo YnVnIzYxMzA4KQogICAgICAgICAgICAgIChvciAod2luZG93LW1pbmlidWZmZXItcCkgY29tcGxl dGlvbi1pbi1yZWdpb24tLWRhdGEpCiAgICAgICAgICAgICAgKGljb21wbGV0ZS1zaW1wbGUtY29t cGxldGluZy1wKSkgO1Nob3VsZG4ndCBiZSBuZWNlc3NhcnkuCi0gICAgKGxldCAoKHNhdmVkLXBv aW50IChwb2ludCkpKQorICAgIChsZXQgKChzYXZlZC1wb2ludCAocG9pbnQpKQorICAgICAgICAg IChjb21wbGV0aW9uLWxhenktaGlsaXQgdCkpCiAgICAgICAoc2F2ZS1leGN1cnNpb24KICAgICAg ICAgKGdvdG8tY2hhciAoaWNvbXBsZXRlLS1maWVsZC1lbmQpKQogICAgICAgICA7OyBJbnNlcnQg dGhlIG1hdGNoLXN0YXR1cyBpbmZvcm1hdGlvbjoKQEAgLTkwMSw3ICs5MDIsNyBAQCBpY29tcGxl dGUtLXJlbmRlci12ZXJ0aWNhbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnaWNv bXBsZXRlLXNlbGVjdGVkLW1hdGNoICdhcHBlbmQgY29tcCkKICAgICAgY29sbGVjdCAoY29uY2F0 IHByZWZpeAogICAgICAgICAgICAgICAgICAgICAgKG1ha2Utc3RyaW5nICgtIG1heC1wcmVmaXgt bGVuIChsZW5ndGggcHJlZml4KSkgPyApCi0gICAgICAgICAgICAgICAgICAgICBjb21wCisgICAg ICAgICAgICAgICAgICAgICAoY29tcGxldGlvbi1sYXp5LWhpbGl0IGNvbXApCiAgICAgICAgICAg ICAgICAgICAgICAobWFrZS1zdHJpbmcgKC0gbWF4LWNvbXAtbGVuIChsZW5ndGggY29tcCkpID8g KQogICAgICAgICAgICAgICAgICAgICAgc3VmZml4KQogICAgICBpbnRvIGxpbmVzLWF1eApAQCAt MTA2Nyw3ICsxMDY4LDggQEAgaWNvbXBsZXRlLWNvbXBsZXRpb25zCiAgICAgICAgICAgICAgICAg ICAoaWYgKDwgcHJvc3BlY3RzLWxlbiBwcm9zcGVjdHMtbWF4KQogICAgICAgICAgICAgICAgICAg ICAgIChwdXNoIGNvbXAgcHJvc3BlY3RzKQogICAgICAgICAgICAgICAgICAgICAoc2V0cSBsaW1p dCB0KSkpCi0gICAgICAgICAgICAgICAgKHNldHEgcHJvc3BlY3RzIChucmV2ZXJzZSBwcm9zcGVj dHMpKQorICAgICAgICAgICAgICAgIChzZXRxIHByb3NwZWN0cworICAgICAgICAgICAgICAgICAg ICAgIChucmV2ZXJzZSAobWFwY2FyICMnY29tcGxldGlvbi1sYXp5LWhpbGl0IHByb3NwZWN0cykp KQogICAgICAgICAgICAgICAgIDs7IERlY29yYXRlIGZpcnN0IG9mIHRoZSBwcm9zcGVjdHMuCiAg ICAgICAgICAgICAgICAgKHdoZW4gcHJvc3BlY3RzCiAgICAgICAgICAgICAgICAgICAobGV0ICgo Zmlyc3QgKGNvcHktc2VxdWVuY2UgKHBvcCBwcm9zcGVjdHMpKSkpCmRpZmYgLS1naXQgYS9saXNw L21pbmlidWZmZXIuZWwgYi9saXNwL21pbmlidWZmZXIuZWwKaW5kZXggMjEyMGUzMTc3NWUuLmVl MGE1NDdmZTliIDEwMDY0NAotLS0gYS9saXNwL21pbmlidWZmZXIuZWwKKysrIGIvbGlzcC9taW5p YnVmZmVyLmVsCkBAIC02NzcsNiArNjc3LDEwIEBAIGNvbXBsZXRpb24tLXR3cS1hbGwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb21wbGV0aW9ucy1jb21t b24tcGFydCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxcHJlZml4KSkpKQogICAg ICAgICAgICAgICAgICAgICAgICAgKHFjb21wbGV0aW9uIChjb25jYXQgcXByZWZpeCBxbmV3KSkp CisgICAgICAgICAgICAgICAgICAgOzsgQXR0YWNoIHVucXVvdGVkIGNvbXBsZXRpb24gc3RyaW5n LCB3aGljaCBpcyBuZWVkZWQKKyAgICAgICAgICAgICAgICAgICA7OyB0byBzY29yZSB0aGUgY29t cGxldGlvbiBpbiBgY29tcGxldGlvbi0tZmxleC1zY29yZScuCisgICAgICAgICAgICAgICAgICAg KHB1dC10ZXh0LXByb3BlcnR5IDAgMSAnY29tcGxldGlvbi0tdW5xdW90ZWQKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29tcGxldGlvbiBxY29tcGxldGlvbikKIAkJICAg OzsgRklYTUU6IFNpbWlsYXJseSBoZXJlLCBDeWd3aW4ncyBtYXBwaW5nIHRyaXBzIHRoaXMKIAkJ ICAgOzsgYXNzZXJ0aW9uLgogICAgICAgICAgICAgICAgICAgIDs7KGNsLWFzc2VydApAQCAtMTIz NCw2ICsxMjM4LDcgQEAgY29tcGxldGlvbi1hbGwtY29tcGxldGlvbnMKIFBPSU5UIGlzIHRoZSBw b3NpdGlvbiBvZiBwb2ludCB3aXRoaW4gU1RSSU5HLgogVGhlIHJldHVybiB2YWx1ZSBpcyBhIGxp c3Qgb2YgY29tcGxldGlvbnMgYW5kIG1heSBjb250YWluIHRoZSBiYXNlLXNpemUKIGluIHRoZSBs YXN0IGBjZHInLiIKKyAgKHNldHEgY29tcGxldGlvbi1sYXp5LWhpbGl0LWZuIG5pbCkKICAgOzsg RklYTUU6IFdlIG5lZWQgdG8gYWRkaXRpb25hbGx5IHJldHVybiB0aGUgaW5mbyBuZWVkZWQgZm9y IHRoZQogICA7OyBzZWNvbmQgcGFydCBvZiBjb21wbGV0aW9uLWJhc2UtcG9zaXRpb24uCiAgIChj b21wbGV0aW9uLS1udGgtY29tcGxldGlvbiAyIHN0cmluZyB0YWJsZSBwcmVkIHBvaW50IG1ldGFk YXRhKSkKQEAgLTM3NDksMTA4ICszNzU0LDE5MyBAQCBmbGV4LXNjb3JlLW1hdGNoLXRpZ2h0bmVz cwogdGhhbiB0aGUgbGF0dGVyICh3aGljaCBoYXMgdHdvIFwiaG9sZXNcIiBhbmQgdGhyZWUKIG9u ZS1sZXR0ZXItbG9uZyBtYXRjaGVzKS4iKQogCisoZGVmdmFyLWxvY2FsIGNvbXBsZXRpb24tbGF6 eS1oaWxpdCBuaWwKKyAgIklmIG5vbi1uaWwsIHJlcXVlc3QgY29tcGxldGlvbiBsYXp5IGhpZ2hs aWdodGluZy4KKworQ29tcGxldGlvbi1wcmVzZW50aW5nIGZyb250ZW5kcyBtYXkgb3B0IHRvIGJp bmQgdGhpcyB2YXJpYWJsZSB0bworbm9uLW5pbCB2YWx1ZSBpbiB0aGUgY29udGV4dCBvZiBjb21w bGV0aW9uLXByb2R1Y2luZyBjYWxscyAoc3VjaAorYXMgYGNvbXBsZXRpb24tYWxsLWNvbXBsZXRp b25zJykuICBUaGlzIGhpbnRzIHRoZSBpbnRlcnZlbmluZworY29tcGxldGlvbiBzdHlsZXMgdGhh dCB0aGV5IGRvIG5vdCBuZWVkIHRvCitmb250aWZ5IChpLmUuIHByb3BlcnRpemUgd2l0aCB0aGUg YGZhY2UnIHByb3BlcnR5KSBjb21wbGV0aW9uCitzdHJpbmdzIHdpdGggaGlnaGxpZ2h0cyBvZiB0 aGUgbWF0Y2hpbmcgcGFydHMuCisKK1doZW4gZG9pbmcgc28sIGl0IGlzIHRoZSBmcm9udGVuZCAt LSBub3QgdGhlIHN0eWxlIC0tIHdobyBiZWNvbWVzCityZXNwb25zaWJsZSBmb3IgdGhpcyBmb250 aWZpY2F0aW9uLiAgVGhlIGZyb250ZW5kIGJpbmRzIHRoaXMKK3ZhcmlhYmxlIHRvIG5vbi1uaWws IGFuZCBjYWxscyB0aGUgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBuYW1lCitgY29tcGxldGlvbi1s YXp5LWhpbGl0JyBvbiBlYWNoIGNvbXBsZXRpb24gc3RyaW5nIHRoYXQgaXMgdG8gYmUKK2Rpc3Bs YXllZCB0byB0aGUgdXNlci4KKworTm90ZSB0aGF0IG9ubHkgc29tZSBjb21wbGV0aW9uIHN0eWxl cyB0YWtlIGFkdmFudGFnZSBvZiB0aGlzCit2YXJpYWJsZSBmb3Igb3B0aW1pemF0aW9uIHB1cnBv c2VzLiAgT3RoZXIgc3R5bGVzIHdpbGwgaWdub3JlIHRoZQoraGludCBhbmQgZm9udGlmeSBlYWdl cmx5IGFzIHVzdWFsLiAgSXQgaXMgc3RpbGwgc2FmZSBmb3IgYQorZnJvbnRlbmQgdG8gY2FsbCBg Y29tcGxldGlvbi1sYXp5LWhpbGl0JyBpbiB0aGVzZSBzaXR1YXRpb25zLgorCitUbyBhdXRob3Ig YSBjb21wbGV0aW9uIHN0eWxlIHRoYXQgdGFrZXMgYWR2YW50YWdlIHNlZQorYGNvbXBsZXRpb24t bGF6eS1oaWxpdC1mbicgYW5kIGxvb2sgaW4gdGhlIHNvdXJjZSBvZgorYGNvbXBsZXRpb24tcGNt LS1oaWxpdC1jb21tb25hbGl0eScuIikKKworKGRlZnZhciBjb21wbGV0aW9uLWxhenktaGlsaXQt Zm4gbmlsCisgICJVc2VkIGJ5IGNvbXBsZXRpb25zIHN0eWxlcyBob25vcmluZyBgY29tcGxldGlv bi1sYXp5LWhpbGl0Jy4KK1doZW4gYSBnaXZlbiBzdHlsZSB3YW50cyB0byBlbmFibGUgc3VwcG9y dCBmb3IKK2Bjb21wbGV0aW9uLWxhenktaGlsaXQnICh3aGljaCBzZWUpLCB0aGF0IHN0eWxlIHNo b3VsZCBzZXQgdGhpcwordmFyaWFibGUgdG8gYSBmdW5jdGlvbiBvZiBvbmUgYXJndW1lbnQsIGEg ZnJlc2ggc3RyaW5nIHRvIGJlCitkaXNwbGF5ZWQgdG8gdGhlIHVzZXIuICBUaGUgZnVuY3Rpb24g aXMgcmVzcG9uc2libGUgZm9yCitkZXN0cnVjdGl2ZWx5IGhpZ2hsaWdodGluZyB0aGUgc3RyaW5n LiIpCisKKyhkZWZ1biBjb21wbGV0aW9uLWxhenktaGlsaXQgKHN0cikKKyAgIlJldHVybiBhIGNv cHkgb2YgY29tcGxldGlvbiBTVFIgdGhhdCBpcyBgZmFjZSctcHJvcGVydGl6ZWQuCitTZWUgZG9j dW1lbnRhdGlvbiBmb3IgdmFyaWFibGUgYGNvbXBsZXRpb24tbGF6eS1oaWxpdCcgZm9yIG1vcmUK K2RldGFpbHMuIgorICAoaWYgKGFuZCBjb21wbGV0aW9uLWxhenktaGlsaXQgY29tcGxldGlvbi1s YXp5LWhpbGl0LWZuKQorICAgICAgKGZ1bmNhbGwgY29tcGxldGlvbi1sYXp5LWhpbGl0LWZuIChj b3B5LXNlcXVlbmNlIHN0cikpCisgICAgc3RyKSkKKworKGRlZnVuIGNvbXBsZXRpb24tLWhpbGl0 LWZyb20tcmUgKHN0cmluZyByZWdleHApCisgICJGb250aWZ5IFNUUklORyB3aXRoIGBjb21wbGV0 aW9ucy1jb21tb24tcGFydCcgdXNpbmcgUkVHRVhQLiIKKyAgKGxldCogKChtZCAoYW5kIHJlZ2V4 cCAoc3RyaW5nLW1hdGNoIHJlZ2V4cCBzdHJpbmcpIChjZGRyIChtYXRjaC1kYXRhIHQpKSkpCisg ICAgICAgICAobWUgKGFuZCBtZCAobWF0Y2gtZW5kIDApKSkKKyAgICAgICAgIChmcm9tIDApKQor ICAgICh3aGlsZSBtZAorICAgICAgKGFkZC1mYWNlLXRleHQtcHJvcGVydHkgZnJvbSAocG9wIG1k KSAnY29tcGxldGlvbnMtY29tbW9uLXBhcnQgbmlsIHN0cmluZykKKyAgICAgIChzZXRxIGZyb20g KHBvcCBtZCkpKQorICAgICh1bmxlc3MgKG9yIChub3QgbWUpICg9IGZyb20gbWUpKQorICAgICAg KGFkZC1mYWNlLXRleHQtcHJvcGVydHkgZnJvbSBtZSAnY29tcGxldGlvbnMtY29tbW9uLXBhcnQg bmlsIHN0cmluZykpCisgICAgc3RyaW5nKSkKKworKGRlZnVuIGNvbXBsZXRpb24tLWZsZXgtc2Nv cmUtMSAobWQtZ3JvdXBzIG1hdGNoLWVuZCBsZW4pCisgICJDb21wdXRlIG1hdGNoaW5nIHNjb3Jl IG9mIGNvbXBsZXRpb24uCitUaGUgc2NvcmUgbGllcyBpbiB0aGUgcmFuZ2UgYmV0d2VlbiAwIGFu ZCAxLCB3aGVyZSAxIGNvcnJlc3BvbmRzIHRvCit0aGUgZnVsbCBtYXRjaC4KK01ELUdST1VQUyBp cyB0aGUgXCJncm91cFwiICBwYXJ0IG9mIHRoZSBtYXRjaCBkYXRhLgorTUFUQ0gtRU5EIGlzIHRo ZSBlbmQgb2YgdGhlIG1hdGNoLgorTEVOIGlzIHRoZSBsZW5ndGggb2YgdGhlIGNvbXBsZXRpb24g c3RyaW5nLiIKKyAgKGxldCogKChmcm9tIDApCisgICAgICAgICA7OyBUbyB1bmRlcnN0YW5kIGhv dyB0aGlzIHdvcmtzLCBjb25zaWRlciB0aGVzZSBzaW1wbGUKKyAgICAgICAgIDs7IGFzY2lpIGRp YWdyYW1zIHNob3dpbmcgaG93IHRoZSBwYXR0ZXJuICJmb28iCisgICAgICAgICA7OyBmbGV4LW1h dGNoZXMgImZhYnJvYmF6byIsICJmYmFyYmF6b28iIGFuZAorICAgICAgICAgOzsgImJhcmZvb2Jh eiI6CisKKyAgICAgICAgIDs7ICAgICAgZiBhYnIgbyBiYXogbworICAgICAgICAgOzsgICAgICAr IC0tLSArIC0tLSArCisKKyAgICAgICAgIDs7ICAgICAgZiBiYXJiYXogb28KKyAgICAgICAgIDs7 ICAgICAgKyAtLS0tLS0gKysKKworICAgICAgICAgOzsgICAgICBiYXIgZm9vIGJhegorICAgICAg ICAgOzsgICAgICAgICAgKysrCisKKyAgICAgICAgIDs7ICIrIiBpbmRpY2F0ZXMgcGFydHMgd2hl cmUgdGhlIHBhdHRlcm4gbWF0Y2hlZC4gIEEKKyAgICAgICAgIDs7ICJob2xlIiBpbiB0aGUgbWlk ZGxlIG9mIHRoZSBzdHJpbmcgaXMgaW5kaWNhdGVkIGJ5CisgICAgICAgICA7OyAiLSIuICBOb3Rl IHRoYXQgdGhlcmUgYXJlIG5vICJob2xlcyIgbmVhciB0aGUgZWRnZXMKKyAgICAgICAgIDs7IG9m IHRoZSBzdHJpbmcuICBUaGUgY29tcGxldGlvbiBzY29yZSBpcyBhIG51bWJlcgorICAgICAgICAg OzsgYm91bmQgYnkgKDAuLjFdIChpLmUuLCBsYXJnZXIgdGhhbiAoYnV0IG5vdCBlcXVhbAorICAg ICAgICAgOzsgdG8pIHplcm8sIGFuZCBzbWFsbGVyIG9yIGVxdWFsIHRvIG9uZSk6IHRoZSBoaWdo ZXIKKyAgICAgICAgIDs7IHRoZSBiZXR0ZXIgYW5kIG9ubHkgYSBwZXJmZWN0IG1hdGNoIChwYXR0 ZXJuIGVxdWFscworICAgICAgICAgOzsgc3RyaW5nKSB3aWxsIGhhdmUgc2NvcmUgMS4gIFRoZSBm b3JtdWxhIHRha2VzIHRoZQorICAgICAgICAgOzsgZm9ybSBvZiBhIHF1b3RpZW50LiAgRm9yIHRo ZSBudW1lcmF0b3IsIHdlIHVzZSB0aGUKKyAgICAgICAgIDs7IG51bWJlciBvZiArLCBpLmUuIHRo ZSBsZW5ndGggb2YgdGhlIHBhdHRlcm4uICBGb3IKKyAgICAgICAgIDs7IHRoZSBkZW5vbWluYXRv ciwgaXQgZmlyc3QgY29tcHV0ZXMKKyAgICAgICAgIDs7CisgICAgICAgICA7OyAgICAgaG9sZV9p X2NvbnRyaWIgPSAxICsgKExpLTEpXigxL3RpZ2h0bmVzcykKKyAgICAgICAgIDs7CisgICAgICAg ICA7OyAsIGZvciBlYWNoIGhvbGUgImkiIG9mIGxlbmd0aCAiTGkiLCB3aGVyZSB0aWdodG5lc3MK KyAgICAgICAgIDs7IGlzIGdpdmVuIGJ5IGBmbGV4LXNjb3JlLW1hdGNoLXRpZ2h0bmVzcycuICBU aGUKKyAgICAgICAgIDs7IGZpbmFsIHZhbHVlIGZvciB0aGUgZGVub21pbmF0b3IgaXMgdGhlbiBn aXZlbiBieToKKyAgICAgICAgIDs7CisgICAgICAgICA7OyAgICAoU1VNX2Fjcm9zc19pKGhvbGVf aV9jb250cmliKSArIDEpICogbGVuCisgICAgICAgICA7OworICAgICAgICAgOzsgLCB3aGVyZSAi bGVuIiBpcyB0aGUgc3RyaW5nJ3MgbGVuZ3RoLgorICAgICAgICAgKHNjb3JlLW51bWVyYXRvciAw KQorICAgICAgICAgKHNjb3JlLWRlbm9taW5hdG9yIDApCisgICAgICAgICAobGFzdC1iIDApKQor ICAgICh3aGlsZSAoYW5kIG1kLWdyb3VwcyAoY2FyIG1kLWdyb3VwcykpCisgICAgICAobGV0ICgo YSBmcm9tKQorICAgICAgICAgICAgKGIgKHBvcCBtZC1ncm91cHMpKSkKKyAgICAgICAgKHNldHEK KyAgICAgICAgIHNjb3JlLW51bWVyYXRvciAgICgrIHNjb3JlLW51bWVyYXRvciAoLSBiIGEpKSkK KyAgICAgICAgKHVubGVzcyAob3IgKD0gYSBsYXN0LWIpCisgICAgICAgICAgICAgICAgICAgICh6 ZXJvcCBsYXN0LWIpCisgICAgICAgICAgICAgICAgICAgICg9IGEgbGVuKSkKKyAgICAgICAgICAo c2V0cQorICAgICAgICAgICBzY29yZS1kZW5vbWluYXRvciAoKyBzY29yZS1kZW5vbWluYXRvcgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChleHB0ICgtIGEgbGFzdC1iIDEpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICgvIDEuMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBmbGV4LXNjb3JlLW1hdGNoLXRpZ2h0bmVzcykpKSkpCisgICAgICAgIChzZXRxCisgICAg ICAgICBsYXN0LWIgICAgICAgICAgICAgIGIpKQorICAgICAgKHNldHEgZnJvbSAocG9wIG1kLWdy b3VwcykpKQorICAgIDs7IElmIGBwYXR0ZXJuJyBkb2Vzbid0IGhhdmUgYW4gZXhwbGljaXQgdHJh aWxpbmcgYW55LCB0aGUKKyAgICA7OyByZWdleCBgcmUnIHdvbid0IHByb2R1Y2UgbWF0Y2ggZGF0 YSByZXByZXNlbnRpbmcgdGhlCisgICAgOzsgcmVnaW9uIGFmdGVyIHRoZSBtYXRjaC4gIFdlIG5l ZWQgdG8gYWNjb3VudCB0byBhY2NvdW50CisgICAgOzsgZm9yIHRoYXQgZXh0cmEgYml0IG9mIG1h dGNoIChidWcjNDIxNDkpLgorICAgICh1bmxlc3MgKD0gZnJvbSBtYXRjaC1lbmQpCisgICAgICAo bGV0ICgoYSBmcm9tKQorICAgICAgICAgICAgKGIgbWF0Y2gtZW5kKSkKKyAgICAgICAgKHNldHEK KyAgICAgICAgIHNjb3JlLW51bWVyYXRvciAgICgrIHNjb3JlLW51bWVyYXRvciAoLSBiIGEpKSkK KyAgICAgICAgKHVubGVzcyAob3IgKD0gYSBsYXN0LWIpCisgICAgICAgICAgICAgICAgICAgICh6 ZXJvcCBsYXN0LWIpCisgICAgICAgICAgICAgICAgICAgICg9IGEgbGVuKSkKKyAgICAgICAgICAo c2V0cQorICAgICAgICAgICBzY29yZS1kZW5vbWluYXRvciAoKyBzY29yZS1kZW5vbWluYXRvcgor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChleHB0ICgtIGEgbGFzdC1iIDEpCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICgvIDEuMAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBmbGV4LXNjb3JlLW1hdGNoLXRpZ2h0bmVzcykpKSkpCisgICAgICAgIChzZXRxCisgICAg ICAgICBsYXN0LWIgICAgICAgICAgICAgIGIpKSkKKyAgICAoLyBzY29yZS1udW1lcmF0b3IgKCog bGVuICgxKyBzY29yZS1kZW5vbWluYXRvcikpIDEuMCkpKQorCisoZGVmdmFyIGNvbXBsZXRpb24t LWZsZXgtc2NvcmUtbGFzdC1tZCBuaWwKKyAgIkhlbHBlciB2YXJpYWJsZSBmb3IgYGNvbXBsZXRp b24tLWZsZXgtc2NvcmUnLiIpCisKKyhkZWZ1biBjb21wbGV0aW9uLS1mbGV4LXNjb3JlIChzdHIg cmUgJm9wdGlvbmFsIGRvbnQtZXJyb3IpCisgICJDb21wdXRlIGZsZXggc2NvcmUgb2YgY29tcGxl dGlvbiBTVFIgYmFzZWQgb24gUkUuCitJZiBET05ULUVSUk9SLCBqdXN0IHJldHVybiBuaWwgaWYg UkUgZG9lc24ndCBtYXRjaCBTVFIuIgorICAoY29uZCAoKHN0cmluZy1tYXRjaCByZSBzdHIpCisg ICAgICAgICAobGV0KiAoKG1hdGNoLWVuZCAobWF0Y2gtZW5kIDApKQorICAgICAgICAgICAgICAg IChtZCAoY2RkcgorICAgICAgICAgICAgICAgICAgICAgKHNldHEKKyAgICAgICAgICAgICAgICAg ICAgICBjb21wbGV0aW9uLS1mbGV4LXNjb3JlLWxhc3QtbWQKKyAgICAgICAgICAgICAgICAgICAg ICAobWF0Y2gtZGF0YSB0IGNvbXBsZXRpb24tLWZsZXgtc2NvcmUtbGFzdC1tZCkpKSkpCisgICAg ICAgICAgIChjb21wbGV0aW9uLS1mbGV4LXNjb3JlLTEgbWQgbWF0Y2gtZW5kIChsZW5ndGggc3Ry KSkpKQorICAgICAgICAoKG5vdCBkb250LWVycm9yKQorICAgICAgICAgKGVycm9yICJJbnRlcm5h bCBlcnJvcjogJXMgZG9lcyBub3QgbWF0Y2ggJXMiIHJlIHN0cikpKSkKKworKGRlZnZhciBjb21w bGV0aW9uLXBjbS0tcmVnZXhwIG5pbAorICAiUmVnZXhwIGZyb20gUENNIHBhdHRlcm4gaW4gYGNv bXBsZXRpb24tcGNtLS1oaWxpdC1jb21tb25hbGl0eScuIikKKwogKGRlZnVuIGNvbXBsZXRpb24t cGNtLS1oaWxpdC1jb21tb25hbGl0eSAocGF0dGVybiBjb21wbGV0aW9ucykKICAgIlNob3cgd2hl cmUgYW5kIGhvdyB3ZWxsIFBBVFRFUk4gbWF0Y2hlcyBDT01QTEVUSU9OUy4KIFBBVFRFUk4sIGEg bGlzdCBvZiBzeW1ib2xzIGFuZCBzdHJpbmdzIGFzIHNlZW4KIGBjb21wbGV0aW9uLXBjbS0tbWVy Z2UtY29tcGxldGlvbnMnLCBpcyBhc3N1bWVkIHRvIG1hdGNoIGV2ZXJ5Ci1zdHJpbmcgaW4gQ09N UExFVElPTlMuICBSZXR1cm4gYSBkZWVwIGNvcHkgb2YgQ09NUExFVElPTlMgd2hlcmUKLWVhY2gg c3RyaW5nIGlzIHByb3BlcnRpemVkIHdpdGggYGNvbXBsZXRpb24tc2NvcmUnLCBhIG51bWJlcgot YmV0d2VlbiAwIGFuZCAxLCBhbmQgd2l0aCBmYWNlcyBgY29tcGxldGlvbnMtY29tbW9uLXBhcnQn LAotYGNvbXBsZXRpb25zLWZpcnN0LWRpZmZlcmVuY2UnIGluIHRoZSByZWxldmFudCBzZWdtZW50 cy4iCitzdHJpbmcgaW4gQ09NUExFVElPTlMuCisKK0lmIGBjb21wbGV0aW9uLWxhenktaGlsaXQn IGlzIG5pbCwgcmV0dXJuIGEgZGVlcCBjb3B5IG9mCitDT01QTEVUSU9OUyB3aGVyZSBlYWNoIHN0 cmluZyBpcyBwcm9wZXJ0aXplZCB3aXRoCitgY29tcGxldGlvbi1zY29yZScsIGEgbnVtYmVyIGJl dHdlZW4gMCBhbmQgMSwgYW5kIHdpdGggZmFjZXMKK2Bjb21wbGV0aW9ucy1jb21tb24tcGFydCcs IGBjb21wbGV0aW9ucy1maXJzdC1kaWZmZXJlbmNlJyBpbiB0aGUKK3JlbGV2YW50IHNlZ21lbnRz LgorCitFbHNlLCBpZiBgY29tcGxldGlvbi1sYXp5LWhpbGl0JyBpcyB0LCByZXR1cm4gQ09NUExF VElPTlMKK3VuY2hhbmdlZCwgYnV0IHNldHVwIGEgc3VpdGFibGUgYGNvbXBsZXRpb24tbGF6eS1o aWxpdC1mbicgKHdoaWNoCitzZWUpIGZvciBsYXRlciBsYXp5IGhpZ2hsaWdodGluZy4iCisgIChz ZXRxIGNvbXBsZXRpb24tcGNtLS1yZWdleHAgbmlsCisgICAgICAgIGNvbXBsZXRpb24tbGF6eS1o aWxpdC1mbiBuaWwpCiAgIChjb25kCiAgICAoKGFuZCBjb21wbGV0aW9ucyAoY2wtbG9vcCBmb3Ig ZSBpbiBwYXR0ZXJuIHRoZXJlaXMgKHN0cmluZ3AgZSkpKQotICAgIChsZXQqICgocmUgKGNvbXBs ZXRpb24tcGNtLS1wYXR0ZXJuLT5yZWdleCBwYXR0ZXJuICdncm91cCkpCi0gICAgICAgICAgIChw b2ludC1pZHggKGNvbXBsZXRpb24tcGNtLS1wYXR0ZXJuLXBvaW50LWlkeCBwYXR0ZXJuKSkKLSAg ICAgICAgICAgKGNhc2UtZm9sZC1zZWFyY2ggY29tcGxldGlvbi1pZ25vcmUtY2FzZSkKLSAgICAg ICAgICAgbGFzdC1tZCkKLSAgICAgIChtYXBjYXIKLSAgICAgICAobGFtYmRhIChzdHIpCi0JIDs7 IERvbid0IG1vZGlmeSB0aGUgc3RyaW5nIGl0c2VsZi4KLSAgICAgICAgIChzZXRxIHN0ciAoY29w eS1zZXF1ZW5jZSBzdHIpKQotICAgICAgICAgKHVubGVzcyAoc3RyaW5nLW1hdGNoIHJlIHN0cikK LSAgICAgICAgICAgKGVycm9yICJJbnRlcm5hbCBlcnJvcjogJXMgZG9lcyBub3QgbWF0Y2ggJXMi IHJlIHN0cikpCi0gICAgICAgICAobGV0KiAoKHBvcyAoaWYgcG9pbnQtaWR4IChtYXRjaC1iZWdp bm5pbmcgcG9pbnQtaWR4KSAobWF0Y2gtZW5kIDApKSkKLSAgICAgICAgICAgICAgICAobWF0Y2gt ZW5kIChtYXRjaC1lbmQgMCkpCi0gICAgICAgICAgICAgICAgKG1kIChjZGRyIChzZXRxIGxhc3Qt bWQgKG1hdGNoLWRhdGEgdCBsYXN0LW1kKSkpKQotICAgICAgICAgICAgICAgIChmcm9tIDApCi0g ICAgICAgICAgICAgICAgKGVuZCAobGVuZ3RoIHN0cikpCi0gICAgICAgICAgICAgICAgOzsgVG8g dW5kZXJzdGFuZCBob3cgdGhpcyB3b3JrcywgY29uc2lkZXIgdGhlc2Ugc2ltcGxlCi0gICAgICAg ICAgICAgICAgOzsgYXNjaWkgZGlhZ3JhbXMgc2hvd2luZyBob3cgdGhlIHBhdHRlcm4gImZvbyIK LSAgICAgICAgICAgICAgICA7OyBmbGV4LW1hdGNoZXMgImZhYnJvYmF6byIsICJmYmFyYmF6b28i IGFuZAotICAgICAgICAgICAgICAgIDs7ICJiYXJmb29iYXoiOgotCi0gICAgICAgICAgICAgICAg OzsgICAgICBmIGFiciBvIGJheiBvCi0gICAgICAgICAgICAgICAgOzsgICAgICArIC0tLSArIC0t LSArCi0KLSAgICAgICAgICAgICAgICA7OyAgICAgIGYgYmFyYmF6IG9vCi0gICAgICAgICAgICAg ICAgOzsgICAgICArIC0tLS0tLSArKwotCi0gICAgICAgICAgICAgICAgOzsgICAgICBiYXIgZm9v IGJhegotICAgICAgICAgICAgICAgIDs7ICAgICAgICAgICsrKwotCi0gICAgICAgICAgICAgICAg OzsgIisiIGluZGljYXRlcyBwYXJ0cyB3aGVyZSB0aGUgcGF0dGVybiBtYXRjaGVkLiAgQQotICAg ICAgICAgICAgICAgIDs7ICJob2xlIiBpbiB0aGUgbWlkZGxlIG9mIHRoZSBzdHJpbmcgaXMgaW5k aWNhdGVkIGJ5Ci0gICAgICAgICAgICAgICAgOzsgIi0iLiAgTm90ZSB0aGF0IHRoZXJlIGFyZSBu byAiaG9sZXMiIG5lYXIgdGhlIGVkZ2VzCi0gICAgICAgICAgICAgICAgOzsgb2YgdGhlIHN0cmlu Zy4gIFRoZSBjb21wbGV0aW9uIHNjb3JlIGlzIGEgbnVtYmVyCi0gICAgICAgICAgICAgICAgOzsg Ym91bmQgYnkgKDAuLjFdIChpLmUuLCBsYXJnZXIgdGhhbiAoYnV0IG5vdCBlcXVhbAotICAgICAg ICAgICAgICAgIDs7IHRvKSB6ZXJvLCBhbmQgc21hbGxlciBvciBlcXVhbCB0byBvbmUpOiB0aGUg aGlnaGVyCi0gICAgICAgICAgICAgICAgOzsgdGhlIGJldHRlciBhbmQgb25seSBhIHBlcmZlY3Qg bWF0Y2ggKHBhdHRlcm4gZXF1YWxzCi0gICAgICAgICAgICAgICAgOzsgc3RyaW5nKSB3aWxsIGhh dmUgc2NvcmUgMS4gIFRoZSBmb3JtdWxhIHRha2VzIHRoZQotICAgICAgICAgICAgICAgIDs7IGZv cm0gb2YgYSBxdW90aWVudC4gIEZvciB0aGUgbnVtZXJhdG9yLCB3ZSB1c2UgdGhlCi0gICAgICAg ICAgICAgICAgOzsgbnVtYmVyIG9mICssIGkuZS4gdGhlIGxlbmd0aCBvZiB0aGUgcGF0dGVybi4g IEZvcgotICAgICAgICAgICAgICAgIDs7IHRoZSBkZW5vbWluYXRvciwgaXQgZmlyc3QgY29tcHV0 ZXMKLSAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgICAgIDs7ICAgICBob2xlX2lfY29u dHJpYiA9IDEgKyAoTGktMSleKDEvdGlnaHRuZXNzKQotICAgICAgICAgICAgICAgIDs7Ci0gICAg ICAgICAgICAgICAgOzsgLCBmb3IgZWFjaCBob2xlICJpIiBvZiBsZW5ndGggIkxpIiwgd2hlcmUg dGlnaHRuZXNzCi0gICAgICAgICAgICAgICAgOzsgaXMgZ2l2ZW4gYnkgYGZsZXgtc2NvcmUtbWF0 Y2gtdGlnaHRuZXNzJy4gIFRoZQotICAgICAgICAgICAgICAgIDs7IGZpbmFsIHZhbHVlIGZvciB0 aGUgZGVub21pbmF0b3IgaXMgdGhlbiBnaXZlbiBieToKLSAgICAgICAgICAgICAgICA7OwotICAg ICAgICAgICAgICAgIDs7ICAgIChTVU1fYWNyb3NzX2koaG9sZV9pX2NvbnRyaWIpICsgMSkgKiBs ZW4KLSAgICAgICAgICAgICAgICA7OwotICAgICAgICAgICAgICAgIDs7ICwgd2hlcmUgImxlbiIg aXMgdGhlIHN0cmluZydzIGxlbmd0aC4KLSAgICAgICAgICAgICAgICAoc2NvcmUtbnVtZXJhdG9y IDApCi0gICAgICAgICAgICAgICAgKHNjb3JlLWRlbm9taW5hdG9yIDApCi0gICAgICAgICAgICAg ICAgKGxhc3QtYiAwKQotICAgICAgICAgICAgICAgICh1cGRhdGUtc2NvcmUtYW5kLWZhY2UKLSAg ICAgICAgICAgICAgICAgKGxhbWJkYSAoYSBiKQotICAgICAgICAgICAgICAgICAgICJVcGRhdGUg c2NvcmUgYW5kIGZhY2UgZ2l2ZW4gbWF0Y2ggcmFuZ2UgKEEgQikuIgotICAgICAgICAgICAgICAg ICAgIChhZGQtZmFjZS10ZXh0LXByb3BlcnR5IGEgYgotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICdjb21wbGV0aW9ucy1jb21tb24tcGFydAotICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5pbCBzdHIpCi0gICAgICAgICAgICAgICAg ICAgKHNldHEKLSAgICAgICAgICAgICAgICAgICAgc2NvcmUtbnVtZXJhdG9yICAgKCsgc2NvcmUt bnVtZXJhdG9yICgtIGIgYSkpKQotICAgICAgICAgICAgICAgICAgICh1bmxlc3MgKG9yICg9IGEg bGFzdC1iKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh6ZXJvcCBsYXN0LWIpCi0g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKD0gYSAobGVuZ3RoIHN0cikpKQotICAgICAg ICAgICAgICAgICAgICAgKHNldHEKLSAgICAgICAgICAgICAgICAgICAgICBzY29yZS1kZW5vbWlu YXRvciAoKyBzY29yZS1kZW5vbWluYXRvcgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAoZXhwdCAoLSBhIGxhc3QtYiAxKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICgvIDEuMAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGZsZXgtc2NvcmUtbWF0Y2gtdGlnaHRuZXNzKSkpKSkKLSAgICAg ICAgICAgICAgICAgICAoc2V0cQotICAgICAgICAgICAgICAgICAgICBsYXN0LWIgICAgICAgICAg ICAgIGIpKSkpCi0gICAgICAgICAgICh3aGlsZSBtZAotICAgICAgICAgICAgIChmdW5jYWxsIHVw ZGF0ZS1zY29yZS1hbmQtZmFjZSBmcm9tIChwb3AgbWQpKQotICAgICAgICAgICAgIChzZXRxIGZy b20gKHBvcCBtZCkpKQotICAgICAgICAgICA7OyBJZiBgcGF0dGVybicgZG9lc24ndCBoYXZlIGFu IGV4cGxpY2l0IHRyYWlsaW5nIGFueSwgdGhlCi0gICAgICAgICAgIDs7IHJlZ2V4IGByZScgd29u J3QgcHJvZHVjZSBtYXRjaCBkYXRhIHJlcHJlc2VudGluZyB0aGUKLSAgICAgICAgICAgOzsgcmVn aW9uIGFmdGVyIHRoZSBtYXRjaC4gIFdlIG5lZWQgdG8gYWNjb3VudCB0byBhY2NvdW50Ci0gICAg ICAgICAgIDs7IGZvciB0aGF0IGV4dHJhIGJpdCBvZiBtYXRjaCAoYnVnIzQyMTQ5KS4KLSAgICAg ICAgICAgKHVubGVzcyAoPSBmcm9tIG1hdGNoLWVuZCkKLSAgICAgICAgICAgICAoZnVuY2FsbCB1 cGRhdGUtc2NvcmUtYW5kLWZhY2UgZnJvbSBtYXRjaC1lbmQpKQotICAgICAgICAgICAoaWYgKD4g KGxlbmd0aCBzdHIpIHBvcykKLSAgICAgICAgICAgICAgIChhZGQtZmFjZS10ZXh0LXByb3BlcnR5 Ci0gICAgICAgICAgICAgICAgcG9zICgxKyBwb3MpCi0gICAgICAgICAgICAgICAgJ2NvbXBsZXRp b25zLWZpcnN0LWRpZmZlcmVuY2UKLSAgICAgICAgICAgICAgICBuaWwgc3RyKSkKLSAgICAgICAg ICAgKHVubGVzcyAoemVyb3AgKGxlbmd0aCBzdHIpKQotICAgICAgICAgICAgIChwdXQtdGV4dC1w cm9wZXJ0eQotICAgICAgICAgICAgICAwIDEgJ2NvbXBsZXRpb24tc2NvcmUKLSAgICAgICAgICAg ICAgKC8gc2NvcmUtbnVtZXJhdG9yICgqIGVuZCAoMSsgc2NvcmUtZGVub21pbmF0b3IpKSAxLjAp IHN0cikpKQotICAgICAgICAgc3RyKQotICAgICAgIGNvbXBsZXRpb25zKSkpCisgICAgKGxldCog KChyZSAoY29tcGxldGlvbi1wY20tLXBhdHRlcm4tPnJlZ2V4IHBhdHRlcm4gJ2dyb3VwKSkpCisg ICAgICAoc2V0cSBjb21wbGV0aW9uLXBjbS0tcmVnZXhwIHJlKQorICAgICAgKGNvbmQgKGNvbXBs ZXRpb24tbGF6eS1oaWxpdAorICAgICAgICAgICAgIChzZXRxIGNvbXBsZXRpb24tbGF6eS1oaWxp dC1mbgorICAgICAgICAgICAgICAgICAgIChsYW1iZGEgKHN0cikgKGNvbXBsZXRpb24tLWhpbGl0 LWZyb20tcmUgc3RyIHJlKSkpCisgICAgICAgICAgICAgY29tcGxldGlvbnMpCisgICAgICAgICAg ICAodAorICAgICAgICAgICAgIChtYXBjYXIKKyAgICAgICAgICAgICAgKGxhbWJkYSAoc3RyKQor ICAgICAgICAgICAgICAgIChjb21wbGV0aW9uLS1oaWxpdC1mcm9tLXJlIChjb3B5LXNlcXVlbmNl IHN0cikgcmUpKQorICAgICAgICAgICAgICBjb21wbGV0aW9ucykpKSkpCiAgICAodCBjb21wbGV0 aW9ucykpKQogCiAoZGVmdW4gY29tcGxldGlvbi1wY20tLWZpbmQtYWxsLWNvbXBsZXRpb25zIChz dHJpbmcgdGFibGUgcHJlZCBwb2ludApAQCAtNDE4NywzNiArNDI3NywzOSBAQCBjb21wbGV0aW9u LWZsZXgtbm9zcGFjZQogCiAoZGVmdW4gY29tcGxldGlvbi0tZmxleC1hZGp1c3QtbWV0YWRhdGEg KG1ldGFkYXRhKQogICAiSWYgYGZsZXgnIGlzIGFjdHVhbGx5IGRvaW5nIGZpbHRlcmluZywgYWRq dXN0IHNvcnRpbmcuIgotICAobGV0ICgoZmxleC1pcy1maWx0ZXJpbmctcAotICAgICAgICAgOzsg SlRAMjAxOS0xMi0yMzogRklYTUU6IHRoaXMgaXMga2luZGEgd3JvbmcuICBXaGF0IHdlIG5lZWQK LSAgICAgICAgIDs7IHRvIHRlc3QgaGVyZSBpcyAic29tZSBpbnB1dCB0aGF0IGFjdHVhbGx5IGxl YWRzL2xlZCB0bwotICAgICAgICAgOzsgZmxleCBmaWx0ZXJpbmciLCBub3QgInNvbWV0aGluZyBh ZnRlciB0aGUgbWluaWJ1ZmZlcgotICAgICAgICAgOzsgcHJvbXB0Ii4gIEUuZy4gVGhlIGxhdHRl ciBpcyBhbHdheXMgdHJ1ZSBmb3IgZmlsZQotICAgICAgICAgOzsgc2VhcmNoZXMsIG1lYW5pbmcg d2UnbGwgYmUgZG9pbmcgZXh0cmEgd29yayB3aGVuIHdlCi0gICAgICAgICA7OyBuZWVkbid0Lgot ICAgICAgICAgKG9yIChub3QgKHdpbmRvdy1taW5pYnVmZmVyLXApKQotICAgICAgICAgICAgICg+ IChwb2ludC1tYXgpIChtaW5pYnVmZmVyLXByb21wdC1lbmQpKSkpCisgIChsZXQgKChmbGV4LWlz LWZpbHRlcmluZy1wIGNvbXBsZXRpb24tcGNtLS1yZWdleHApCiAgICAgICAgIChleGlzdGluZy1k c2YKICAgICAgICAgIChjb21wbGV0aW9uLW1ldGFkYXRhLWdldCBtZXRhZGF0YSAnZGlzcGxheS1z b3J0LWZ1bmN0aW9uKSkKICAgICAgICAgKGV4aXN0aW5nLWNzZgogICAgICAgICAgKGNvbXBsZXRp b24tbWV0YWRhdGEtZ2V0IG1ldGFkYXRhICdjeWNsZS1zb3J0LWZ1bmN0aW9uKSkpCiAgICAgKGNs LWZsZXQKLSAgICAgICAgKChjb21wb3NlLWZsZXgtc29ydC1mbgotICAgICAgICAgIChleGlzdGlu Zy1zb3J0LWZuKSA7IHdpc2ggYGNsLWZsZXQnIGhhZCBwcm9wZXIgaW5kZW50YXRpb24uLi4KLSAg ICAgICAgICAobGFtYmRhIChjb21wbGV0aW9ucykKLSAgICAgICAgICAgIChzb3J0Ci0gICAgICAg ICAgICAgKGZ1bmNhbGwgZXhpc3Rpbmctc29ydC1mbiBjb21wbGV0aW9ucykKLSAgICAgICAgICAg ICAobGFtYmRhIChjMSBjMikKLSAgICAgICAgICAgICAgIChsZXQgKChzMSAoZ2V0LXRleHQtcHJv cGVydHkgMCAnY29tcGxldGlvbi1zY29yZSBjMSkpCi0gICAgICAgICAgICAgICAgICAgICAoczIg KGdldC10ZXh0LXByb3BlcnR5IDAgJ2NvbXBsZXRpb24tc2NvcmUgYzIpKSkKLSAgICAgICAgICAg ICAgICAgKD4gKG9yIHMxIDApIChvciBzMiAwKSkpKSkpKSkKKyAgICAgICAgKChjb21wb3NlLWZs ZXgtc29ydC1mbiAoZXhpc3Rpbmctc29ydC1mbikKKyAgICAgICAgICAgKGxhbWJkYSAoY29tcGxl dGlvbnMpCisgICAgICAgICAgICAgKGxldCogKChzb3J0ZWQgKHNvcnQKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKG1hcGNhcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxh bWJkYSAoc3RyKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29ucworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKC0gKGNvbXBsZXRpb24tLWZsZXgtc2NvcmUKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAob3IgKGdldC10ZXh0LXByb3BlcnR5 CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwICdjb21wbGV0aW9u LS11bnF1b3RlZCBzdHIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHN0cikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wbGV0aW9uLXBj bS0tcmVnZXhwKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cikpCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYgZXhpc3Rpbmctc29ydC1mbgorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChmdW5jYWxsIGV4aXN0aW5nLXNvcnQtZm4gY29tcGxl dGlvbnMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBsZXRpb25zKSkKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIydjYXItbGVzcy10aGFuLWNhcikpCisgICAgICAg ICAgICAgICAgICAgIChjZWxsIHNvcnRlZCkpCisgICAgICAgICAgICAgICA7OyBSZXVzZSB0aGUg bGlzdAorICAgICAgICAgICAgICAgKHdoaWxlIGNlbGwKKyAgICAgICAgICAgICAgICAgKHNldGNh ciBjZWxsIChjZGFyIGNlbGwpKQorICAgICAgICAgICAgICAgICAocG9wIGNlbGwpKQorICAgICAg ICAgICAgICAgc29ydGVkKSkpKQogICAgICAgYChtZXRhZGF0YQogICAgICAgICAsQChhbmQgZmxl eC1pcy1maWx0ZXJpbmctcAotICAgICAgICAgICAgICAgYCgoZGlzcGxheS1zb3J0LWZ1bmN0aW9u Ci0gICAgICAgICAgICAgICAgICAuICwoY29tcG9zZS1mbGV4LXNvcnQtZm4gKG9yIGV4aXN0aW5n LWRzZiAjJ2lkZW50aXR5KSkpKSkKKyAgICAgICAgICAgICAgIGAoKGRpc3BsYXktc29ydC1mdW5j dGlvbiAuICwoY29tcG9zZS1mbGV4LXNvcnQtZm4gZXhpc3RpbmctZHNmKSkpKQogICAgICAgICAs QChhbmQgZmxleC1pcy1maWx0ZXJpbmctcAotICAgICAgICAgICAgICAgYCgoY3ljbGUtc29ydC1m dW5jdGlvbgotICAgICAgICAgICAgICAgICAgLiAsKGNvbXBvc2UtZmxleC1zb3J0LWZuIChvciBl eGlzdGluZy1jc2YgIydpZGVudGl0eSkpKSkpCisgICAgICAgICAgICAgICBgKChjeWNsZS1zb3J0 LWZ1bmN0aW9uIC4gLChjb21wb3NlLWZsZXgtc29ydC1mbiBleGlzdGluZy1jc2YpKSkpCiAgICAg ICAgICxAKGNkciBtZXRhZGF0YSkpKSkpCiAKIChkZWZ1biBjb21wbGV0aW9uLWZsZXgtLW1ha2Ut ZmxleC1wYXR0ZXJuIChwYXR0ZXJuKQo= --0000000000003d98570609284c82--