From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Dmitry Gutov Newsgroups: gmane.emacs.bugs Subject: bug#58447: [PATCH] In project-find-file, add absolute file name to history Date: Thu, 15 Dec 2022 01:04:12 +0200 Message-ID: References: <8735budxiz.fsf@gmail.com> <83v8o5l0wa.fsf@gnu.org> <5c1cc828-5fcd-667f-41d4-f19923b2958e@yandex.ru> <87k04li5nw.fsf@gmail.com> <864jvphx4r.fsf@mail.linkov.net> <86tu3mftm0.fsf@mail.linkov.net> <875yg0to11.fsf@gmail.com> <86zgdalj0h.fsf@mail.linkov.net> <86fsdpjasd.fsf@mail.linkov.net> <86k02zjiwj.fsf@mail.linkov.net> <864ju1lt5k.fsf@mail.linkov.net> <403e8284-e32c-f547-748e-371d26eedace@yandex.ru> <86cz8or02n.fsf@mail.linkov.net> <87sfhko3tf.fsf@gmail.com> <868rjbusog.fsf@mail.linkov.net> <87h6xylyox.fsf@gmail.com> <1d03758e-369a-c522-a91a-696243f1074f@yandex.ru> <87cz8ln5lt.fsf@gmail.com> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------EwKnu6mr003Y0MOkWo0k6Pxg" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="37747"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.2 Cc: Eli Zaretskii , 58447@debbugs.gnu.org, Juri Linkov To: Augusto Stoffel Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Thu Dec 15 00:05:20 2022 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 1p5aoS-0009cK-LC for geb-bug-gnu-emacs@m.gmane-mx.org; Thu, 15 Dec 2022 00:05:20 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1p5aoC-00042m-Pj; Wed, 14 Dec 2022 18:05:04 -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 1p5aoA-00042T-Fv for bug-gnu-emacs@gnu.org; Wed, 14 Dec 2022 18:05:02 -0500 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 1p5aoA-0000dy-7U for bug-gnu-emacs@gnu.org; Wed, 14 Dec 2022 18:05:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1p5ao9-0001v5-Sc for bug-gnu-emacs@gnu.org; Wed, 14 Dec 2022 18:05:01 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Dmitry Gutov Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Wed, 14 Dec 2022 23:05:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 58447 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 58447-submit@debbugs.gnu.org id=B58447.16710590647360 (code B ref 58447); Wed, 14 Dec 2022 23:05:01 +0000 Original-Received: (at 58447) by debbugs.gnu.org; 14 Dec 2022 23:04:24 +0000 Original-Received: from localhost ([127.0.0.1]:41998 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p5anX-0001ue-T4 for submit@debbugs.gnu.org; Wed, 14 Dec 2022 18:04:24 -0500 Original-Received: from mail-wm1-f54.google.com ([209.85.128.54]:36510) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1p5anV-0001uY-SO for 58447@debbugs.gnu.org; Wed, 14 Dec 2022 18:04:22 -0500 Original-Received: by mail-wm1-f54.google.com with SMTP id c65-20020a1c3544000000b003cfffd00fc0so574454wma.1 for <58447@debbugs.gnu.org>; Wed, 14 Dec 2022 15:04:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:sender:from:to:cc:subject :date:message-id:reply-to; bh=O7cqTwOYD2CPQeDAyANR/qzwVXHpQfVGYPblOY1CWeE=; b=adhTnm/LdgXksM9oBoLq8A0rRQB7z8yW71sdOHgXq8kxtP+7tT5sNF2ayFTMXo2Dsk 06eLcTX/aWEoHna3VpmfFN0e2J7dTWHARU2JolYz9Ki3bbPc/N4JRFkmFAeKgfT4/HHz 0r7sY6VV0sDkkqbxPjjfcNasw0jxQPiiU1sxtlad3cwMoR/OGo45AKu16OJO+MZlEtgB mChX2+sHLRa85Rvzl4B220EsRmvnZEUhWliASi0XY8Ib2yZMkcq7q0imN30CRpdK/r4A Anr71fn+55Yj7aWpW7QCxgTb3OIXRT9kPsjJxDbpYm/VRxoeUuyb3tLLfcJZn5uIUMjX rIpw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:from:content-language:references:cc:to:subject :user-agent:mime-version:date:message-id:sender:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=O7cqTwOYD2CPQeDAyANR/qzwVXHpQfVGYPblOY1CWeE=; b=CLRP1rcmwDubXvQCZYoKYFGJLDJjQRYziuvH6IBUFtKyR3aTlo/JM/ufm4qty23IYq akXgW6OmQfkECyXRqeSIalXkNIkFPBrcoVE8Ul5moBaXLM4rRv5VqA1xQfZUnfQbTtdO mu8KlRMPGoG90rslTVVB0ZG05YvigF+MtoNiKZOZLey42ywIh4xHzjpXy3YLiczUvTzS 52pkO2IUiIWpiJTs1S4ZBI6muzeUcMHNgOB3l5/lLvarK8ee3TswTwBBHUxcvIkunUqa x4d9MQfxl9QR5pMY6Z0RD85xyI/7x/X9l+kHXEQ4cRsq332VV3RWlL3M8V4tbXuU+W9R 86bw== X-Gm-Message-State: ANoB5pmO5XQLV8RShmJhHpgFT4G76+JH1ci5qntokVlz60DZRpYoXa3G vHZhqE9GUtTpqBa5fYJt20k= X-Google-Smtp-Source: AA0mqf6iA0PV22Orx3oMcGupsDnQECyc4AHWkdSbhLVH+t/YjsoeJ+/B1EjFmlMS9SsfP0WtkUBXmw== X-Received: by 2002:a05:600c:34c5:b0:3d0:ac82:f2fc with SMTP id d5-20020a05600c34c500b003d0ac82f2fcmr25880034wmq.9.1671059055278; Wed, 14 Dec 2022 15:04:15 -0800 (PST) Original-Received: from [192.168.0.2] ([46.251.119.176]) by smtp.googlemail.com with ESMTPSA id o3-20020a05600c510300b003cfa3a12660sm11613504wms.1.2022.12.14.15.04.13 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Wed, 14 Dec 2022 15:04:14 -0800 (PST) Content-Language: en-US In-Reply-To: <87cz8ln5lt.fsf@gmail.com> 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:251013 Archived-At: This is a multi-part message in MIME format. --------------EwKnu6mr003Y0MOkWo0k6Pxg Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 14/12/2022 21:32, Augusto Stoffel wrote: > On Wed, 14 Dec 2022 at 20:45, Dmitry Gutov wrote: > >> On 14/12/2022 18:47, Augusto Stoffel wrote: >>> On the other hand, your trick works by accident. If you switch between >>> unrelated projects, then 'C-x p f M-p' brings up a non-existing file. >>> One might say each project should have its own history, but then it's >>> not clear whether/when equally named projects in different locations >>> should count as "the same" project. >> >> Perhaps the first step to resolving all this is for project-find-file >> to use a different history variable than find-file. > > This is fine by me, but do you feel confident such a variable will be > a good design for the long run? In particular, have you discarded the > idea of per-project history variables? Just spitballing. And on second thought: probably not. It's iffy because of the notion of external-roots. The command project-or-external-find-file is supposed to reuse the same history, I think, and the file names there won't necessarily be relative, or relative to the project root. Even in project-find-file the names could be relative to a different (nested) dir if there are no files in the top dir, and it just has one subdirectory. > The advantage of my suggestion (filter the file-name-history on the fly) > is that no new variables need to be defined, so nothing needs to be > obsoleted and phased out if we change our minds. Something like let-binding the value of file-hame-history to a different value temporarily around completing-read? That can work, though someone should benchmark it with a large project and history. To resolve the absolute-relative divide, the filtering should be done on some higher level. Inside project-find-file-in, perhaps, where we still have access to the absolute names, and where we haven't dispatched to the configured project-read-file-name-function yet. >> Which makes sense, given that one (usually) uses relative file names, >> and the other -- absolute ones. >> >> Maybe project--read-file-absolute could continue using the current >> variable, too. >> >> As a result, all projects will share history, for good and >> bad. Perhaps next we could do something about that, e.g. if the >> history iteration could allow pre-filtering, we could also filter out >> non-existing files. > > This kind of filtering would be slower than the one I proposed, and > prohibitively slow over Tramp, I think. We're probably talking about the same thing, if the filtering is going to use the list of files from project-files, rather than file-exists-p. In either case, the user could actually input a non-existent file (or file not in the completion table) which would fail that test. But they'll hopefully hit C-x C-s soon after. I've fiddled with the code a little, and here are two different patches. Patch v1 tries to indeed filter based on what project-files returns. Problems: * To call (member s all-files), both absolute file names have to be in the same format (i.e. abbreviated v. not). That would require us to mandate all project-files implementations, both built-in and third-party, to return abbreviated file names. It's a somewhat breaking change, and I'm not 100% sure the abbreviated form is useful in more situations than the expanded one. * In a large project, where fetching all files using 'git ls-files' takes 1.007258s, (seq-filter (lambda (s) (member s all-files)) file-name-history) takes 0.137352s. That's not huge, but not insignificant either. Especially if we someday add some cache for the former computation. This could be avoided if 'history-prev-history' had some way to filter lazily. And history-item-predicate var, or some such. * It seems like project-read-file-name-function functions will need to do some history conversions on their own anyway, because otherwise they insert absolute file names in the prompt. With the latter in mind, here's a different take (patch v2), which just takes care of that. The patches could be combined, but v1 seems to be too invasive for emacs-29, yet v2 could be just small enough to be considered "bugfix-only". So, what does everyone think about the latter? If people agree that the v2 patch is an improvement, we can check it in and leave project-local histories until later. --------------EwKnu6mr003Y0MOkWo0k6Pxg Content-Type: text/x-patch; charset=UTF-8; name="project-find-file-history-v1.diff" Content-Disposition: attachment; filename="project-find-file-history-v1.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpc3AvcHJvZ21vZGVzL3Byb2plY3QuZWwgYi9saXNwL3Byb2dtb2Rl cy9wcm9qZWN0LmVsCmluZGV4IDdjZGFiYTljMDcuLmQ3ZDE3NDBjZmIgMTAwNjQ0Ci0tLSBh L2xpc3AvcHJvZ21vZGVzL3Byb2plY3QuZWwKKysrIGIvbGlzcC9wcm9nbW9kZXMvcHJvamVj dC5lbApAQCAtNjEwLDYgKzYxMCw3IEBAIHByb2plY3QtLXZjLWxpc3QtZmlsZXMKICAgKHBj YXNlIGJhY2tlbmQKICAgICAoYEdpdAogICAgICAobGV0KiAoKGRlZmF1bHQtZGlyZWN0b3J5 IChleHBhbmQtZmlsZS1uYW1lIChmaWxlLW5hbWUtYXMtZGlyZWN0b3J5IGRpcikpKQorICAg ICAgICAgICAgKGFiYnItZGQgKGFiYnJldmlhdGUtZmlsZS1uYW1lIGRlZmF1bHQtZGlyZWN0 b3J5KSkKICAgICAgICAgICAgIChhcmdzICcoIi16IikpCiAgICAgICAgICAgICAodmMtZ2l0 LXVzZS1saXRlcmFsLXBhdGhzcGVjcyBuaWwpCiAgICAgICAgICAgICAoaW5jbHVkZS11bnRy YWNrZWQgKHByb2plY3QtLXZhbHVlLWluLWRpcgpAQCAtNjQ3LDcgKzY0OCw3IEBAIHByb2pl Y3QtLXZjLWxpc3QtZmlsZXMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ZXh0cmEtaWdub3JlcykpKSkpCiAgICAgICAgKHNldHEgZmlsZXMKICAgICAgICAgICAgICAo bWFwY2FyCi0gICAgICAgICAgICAgIChsYW1iZGEgKGZpbGUpIChjb25jYXQgZGVmYXVsdC1k aXJlY3RvcnkgZmlsZSkpCisgICAgICAgICAgICAgIChsYW1iZGEgKGZpbGUpIChjb25jYXQg YWJici1kZCBmaWxlKSkKICAgICAgICAgICAgICAgKHNwbGl0LXN0cmluZwogICAgICAgICAg ICAgICAgKGFwcGx5ICMndmMtZ2l0LS1ydW4tY29tbWFuZC1zdHJpbmcgbmlsICJscy1maWxl cyIgYXJncykKICAgICAgICAgICAgICAgICJcMCIgdCkpKQpAQCAtNjcwLDYgKzY3MSw3IEBA IHByb2plY3QtLXZjLWxpc3QtZmlsZXMKICAgICAgICAoZGVsZXRlLWNvbnNlY3V0aXZlLWR1 cHMgZmlsZXMpKSkKICAgICAoYEhnCiAgICAgIChsZXQqICgoZGVmYXVsdC1kaXJlY3Rvcnkg KGV4cGFuZC1maWxlLW5hbWUgKGZpbGUtbmFtZS1hcy1kaXJlY3RvcnkgZGlyKSkpCisgICAg ICAgICAgICAoYWJici1kZCAoYWJicmV2aWF0ZS1maWxlLW5hbWUgZGVmYXVsdC1kaXJlY3Rv cnkpKQogICAgICAgICAgICAgKGluY2x1ZGUtdW50cmFja2VkIChwcm9qZWN0LS12YWx1ZS1p bi1kaXIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3Byb2plY3QtdmMtaW5j bHVkZS11bnRyYWNrZWQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlyKSkK QEAgLTY4NSw3ICs2ODcsNyBAQCBwcm9qZWN0LS12Yy1saXN0LWZpbGVzCiAgICAgICAgKHdp dGgtdGVtcC1idWZmZXIKICAgICAgICAgIChhcHBseSAjJ3ZjLWhnLWNvbW1hbmQgdCAwICIu IiAic3RhdHVzIiBhcmdzKQogICAgICAgICAgKG1hcGNhcgotICAgICAgICAgIChsYW1iZGEg KHMpIChjb25jYXQgZGVmYXVsdC1kaXJlY3RvcnkgcykpCisgICAgICAgICAgKGxhbWJkYSAo cykgKGNvbmNhdCBhYmJyLWRkIHMpKQogICAgICAgICAgIChzcGxpdC1zdHJpbmcgKGJ1ZmZl ci1zdHJpbmcpICJcMCIgdCkpKSkpKSkKIAogKGRlZnVuIHByb2plY3QtLXZjLW1lcmdlLXN1 Ym1vZHVsZXMtcCAoZGlyKQpAQCAtMTA0MiwxMSArMTA0NCw4IEBAIHByb2plY3QtLXJlYWQt ZmlsZS1jcGQtcmVsYXRpdmUKICAgICAgICAgICAgICAgICAgICAgKHByb2plY3QtLWNvbXBs ZXRpbmctcmVhZC1zdHJpY3QgcHJvbXB0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG5ldy1jb2xsZWN0aW9uCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZWRpY2F0ZQotICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoaXN0 IG1iLWRlZmF1bHQpKSkKLSAgICAgICAgIChhYnNuYW1lIChleHBhbmQtZmlsZS1uYW1lIHJl bG5hbWUgY29tbW9uLXBhcmVudC1kaXJlY3RvcnkpKSkKLSAgICAod2hlbiAoYW5kIGhpc3Qg aGlzdG9yeS1hZGQtbmV3LWlucHV0KQotICAgICAgKGFkZC10by1oaXN0b3J5IGhpc3QgKGFi YnJldmlhdGUtZmlsZS1uYW1lIGFic25hbWUpKSkKLSAgICBhYnNuYW1lKSkKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlzdCBtYi1k ZWZhdWx0KSkpKQorICAgIChleHBhbmQtZmlsZS1uYW1lIHJlbG5hbWUgY29tbW9uLXBhcmVu dC1kaXJlY3RvcnkpKSkKIAogKGRlZnVuIHByb2plY3QtLXJlYWQtZmlsZS1hYnNvbHV0ZSAo cHJvbXB0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGwtZmlsZXMg Jm9wdGlvbmFsIHByZWRpY2F0ZQpAQCAtMTA3Niw5ICsxMDc1LDE2IEBAIHByb2plY3QtZmlu ZC1maWxlLWluCiAgICAgICAgICAgICAgICBkaXJzKQogICAgICAgICAgICAgKHByb2plY3Qt ZmlsZXMgcHJvamVjdCBkaXJzKSkpCiAgICAgICAgICAoY29tcGxldGlvbi1pZ25vcmUtY2Fz ZSByZWFkLWZpbGUtbmFtZS1jb21wbGV0aW9uLWlnbm9yZS1jYXNlKQotICAgICAgICAgKGZp bGUgKGZ1bmNhbGwgcHJvamVjdC1yZWFkLWZpbGUtbmFtZS1mdW5jdGlvbgotICAgICAgICAg ICAgICAgICAgICAgICAgIkZpbmQgZmlsZSIgYWxsLWZpbGVzIG5pbCAnZmlsZS1uYW1lLWhp c3RvcnkKLSAgICAgICAgICAgICAgICAgICAgICAgIHN1Z2dlc3RlZC1maWxlbmFtZSkpKQor ICAgICAgICAgKGZpbGUKKyAgICAgICAgICAobGV0ICgoZmlsZS1uYW1lLWhpc3RvcnkgKHNl cS1maWx0ZXIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChsYW1iZGEg KHMpIChtZW1iZXIgcyBhbGwtZmlsZXMpKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZmlsZS1uYW1lLWhpc3RvcnkpKQorICAgICAgICAgICAgICAgIChoaXN0b3J5 LWFkZC1uZXctaW5wdXQgbmlsKSkKKyAgICAgICAgICAgIChmdW5jYWxsIHByb2plY3QtcmVh ZC1maWxlLW5hbWUtZnVuY3Rpb24KKyAgICAgICAgICAgICAgICAgICAgICJGaW5kIGZpbGUi IGFsbC1maWxlcyBuaWwgJ2ZpbGUtbmFtZS1oaXN0b3J5CisgICAgICAgICAgICAgICAgICAg ICBzdWdnZXN0ZWQtZmlsZW5hbWUpKSkpCisgICAgKHdoZW4gaGlzdG9yeS1hZGQtbmV3LWlu cHV0CisgICAgICAoYWRkLXRvLWhpc3RvcnkgJ2ZpbGUtbmFtZS1oaXN0b3J5IChhYmJyZXZp YXRlLWZpbGUtbmFtZSBmaWxlKSkpCiAgICAgKGlmIChzdHJpbmc9IGZpbGUgIiIpCiAgICAg ICAgICh1c2VyLWVycm9yICJZb3UgZGlkbid0IHNwZWNpZnkgdGhlIGZpbGUiKQogICAgICAg KGZpbmQtZmlsZSBmaWxlKSkpKQo= --------------EwKnu6mr003Y0MOkWo0k6Pxg Content-Type: text/x-patch; charset=UTF-8; name="project-find-file-history-v2.diff" Content-Disposition: attachment; filename="project-find-file-history-v2.diff" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpc3AvcHJvZ21vZGVzL3Byb2plY3QuZWwgYi9saXNwL3Byb2dtb2Rl cy9wcm9qZWN0LmVsCmluZGV4IDdjZGFiYTljMDcuLjQ3ZWI5Zjk5ODIgMTAwNjQ0Ci0tLSBh L2xpc3AvcHJvZ21vZGVzL3Byb2plY3QuZWwKKysrIGIvbGlzcC9wcm9nbW9kZXMvcHJvamVj dC5lbApAQCAtMTAzOCw3ICsxMDM4LDE0IEBAIHByb2plY3QtLXJlYWQtZmlsZS1jcGQtcmVs YXRpdmUKICAgICAgICAgIChfICh3aGVuIGluY2x1ZGVkLWNwZAogICAgICAgICAgICAgICAo c2V0cSBzdWJzdHJpbmdzIChjb25zICIuLyIgc3Vic3RyaW5ncykpKSkKICAgICAgICAgIChu ZXctY29sbGVjdGlvbiAocHJvamVjdC0tZmlsZS1jb21wbGV0aW9uLXRhYmxlIHN1YnN0cmlu Z3MpKQotICAgICAgICAgKHJlbG5hbWUgKGxldCAoKGhpc3RvcnktYWRkLW5ldy1pbnB1dCBu aWwpKQorICAgICAgICAgKGFiYnItY3BkIChhYmJyZXZpYXRlLWZpbGUtbmFtZSBjb21tb24t cGFyZW50LWRpcmVjdG9yeSkpCisgICAgICAgICAocmVsbmFtZSAoY2wtbGV0ZiAoKGhpc3Rv cnktYWRkLW5ldy1pbnB1dCBuaWwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChz eW1ib2wtdmFsdWUgaGlzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKG1hcGNh bgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxhbWJkYSAocykKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKGFuZCAoc3RyaW5nLXByZWZpeC1wIGFiYnItY3Bk IHMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGxpc3QgKHN1YnN0 cmluZyBzIChsZW5ndGggYWJici1jcGQpKSkpKQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKHN5bWJvbC12YWx1ZSBoaXN0KSkpKQogICAgICAgICAgICAgICAgICAgICAocHJv amVjdC0tY29tcGxldGluZy1yZWFkLXN0cmljdCBwcm9tcHQKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3LWNvbGxlY3Rpb24KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJl ZGljYXRlCg== --------------EwKnu6mr003Y0MOkWo0k6Pxg--