From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Jim Porter Newsgroups: gmane.emacs.bugs Subject: bug#51993: 29.0.50; [PATCH] Killing emacsclient terminal with `server-stop-automatically' doesn't prompt to save files Date: Sun, 9 Oct 2022 15:09:15 -0700 Message-ID: References: <9e47c871-a2c3-d764-bec9-d87abf3efe83@gmail.com> <79a53ecc-dbfc-d088-d80d-96f349be794a@gmail.com> <834k7vw2vb.fsf@gnu.org> <87czc4tosz.fsf@gnus.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------4u9ZszFBFAMSwCxX75hetToq" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="21872"; mail-complaints-to="usenet@ciao.gmane.io" Cc: Eli Zaretskii , 51993@debbugs.gnu.org To: Lars Ingebrigtsen , Gregory Heytings Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Mon Oct 10 00:10:10 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 1oheUs-0005Ti-HO for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 10 Oct 2022 00:10:10 +0200 Original-Received: from localhost ([::1]:47966 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1oheUr-0002cR-5X for geb-bug-gnu-emacs@m.gmane-mx.org; Sun, 09 Oct 2022 18:10:09 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:33288) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1oheUk-0002cH-Bd for bug-gnu-emacs@gnu.org; Sun, 09 Oct 2022 18:10:02 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:45986) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1oheUj-0006JF-V1 for bug-gnu-emacs@gnu.org; Sun, 09 Oct 2022 18:10:01 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1oheUj-0007tE-He for bug-gnu-emacs@gnu.org; Sun, 09 Oct 2022 18:10:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Jim Porter Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Sun, 09 Oct 2022 22:10:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 51993 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 51993-submit@debbugs.gnu.org id=B51993.166535336630280 (code B ref 51993); Sun, 09 Oct 2022 22:10:01 +0000 Original-Received: (at 51993) by debbugs.gnu.org; 9 Oct 2022 22:09:26 +0000 Original-Received: from localhost ([127.0.0.1]:45064 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oheU9-0007sJ-4S for submit@debbugs.gnu.org; Sun, 09 Oct 2022 18:09:25 -0400 Original-Received: from mail-pf1-f175.google.com ([209.85.210.175]:43885) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1oheU7-0007s5-6t for 51993@debbugs.gnu.org; Sun, 09 Oct 2022 18:09:24 -0400 Original-Received: by mail-pf1-f175.google.com with SMTP id 204so9295245pfx.10 for <51993@debbugs.gnu.org>; Sun, 09 Oct 2022 15:09:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=in-reply-to:references:cc:to:from:content-language:subject :mime-version:date:message-id:from:to:cc:subject:date:message-id :reply-to; bh=asP3VqTQbZJTF7rhbGviKE/YJnfyZQQBOg5fc6qiAjE=; b=nO21Hraqiifj1SDX31VPIlW7uc2Crv2vhdvpQZm+7XU/37xzHVUCb8Jd/RWvDSYUKD hIYefzzkRe/xcOfcErAbuEJN3ODmkwkGroaEUW6SV7iBQMmMhDwMhPAZWbmgJmT1pBIt MNe5hSUziWWwlbUH/KxGXDQc/ioprsKfSDbOSRoRS9TuKAphR+sRIoNUhk0yDrv3CeK3 0339wqVQX5K+WajcGfTHS2/Npxb5KQ3cUYRNdD06NIp8ws7cuC9Q3yBQm61BCZYkyT3O rmkS7IOVGgAoZdO/DsaSHrIdycHtlVW6qfEeTtYYOynH+2467rzaSUyBTnYywLYpz8ln zA6g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=in-reply-to:references:cc:to:from:content-language:subject :mime-version:date:message-id:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=asP3VqTQbZJTF7rhbGviKE/YJnfyZQQBOg5fc6qiAjE=; b=TxEA2+zvApaZjiGAJ6QaWaBQkSHDNLqzz0bhzEimzbexYXkadgtFYihCluGNp2xVeQ /XTuBLl9VbkyTGyJbMQ/Nkkp+P+nzS6i4d4UPA43DVIFW1KVLCujQx4nI35tS6FtCC+J qBGxdTGbH1yPGvYQPcz8yZRuQ7WLMls10T4Xql89WKIrX9uplVg2MNdizIAFYaWVwNLE IkM0PvT//chIQE6UnXz7y2/tXFgjajCzcWqYBH4x/gvSw4SE9ACNt4qTV8sRKQdhP+kI qf2ZUhFyIkGtkrBUYKHxKRIinRS1VTE24co1lne5vmyFmMLPCILOM38wjM4MwM7LhTlm i47w== X-Gm-Message-State: ACrzQf27a20TRq0kwMdrye2bP1i6qEu+0MPwywdqIPl7a73bf1Orv/pY 0OuFmMX6xLzlrOIbBV+efEg= X-Google-Smtp-Source: AMsMyM4CBUOtrJV3dSttvQplMd7s/iZt42xAMoKiypftpxXwqTkeHI76/lhGwcL+gNeOiFE54TOIUg== X-Received: by 2002:a05:6a00:1828:b0:563:24ea:5728 with SMTP id y40-20020a056a00182800b0056324ea5728mr5996406pfa.3.1665353357011; Sun, 09 Oct 2022 15:09:17 -0700 (PDT) Original-Received: from [192.168.1.2] (cpe-76-168-148-233.socal.res.rr.com. [76.168.148.233]) by smtp.googlemail.com with ESMTPSA id p13-20020a170902780d00b0017d0e793932sm3755319pll.215.2022.10.09.15.09.15 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Sun, 09 Oct 2022 15:09:16 -0700 (PDT) Content-Language: en-US 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" Xref: news.gmane.io gmane.emacs.bugs:244977 Archived-At: This is a multi-part message in MIME format. --------------4u9ZszFBFAMSwCxX75hetToq Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 9/9/2022 11:04 AM, Jim Porter wrote: > On 9/9/2022 10:55 AM, Lars Ingebrigtsen wrote: >> Gregory Heytings writes: >> >>>> However, I'm not sure I understand the way forward, as you see >>>> it. AFAIU, there are fundamental disagreements between you and >>>> Gregory, and I don't think the disagreements are there because one >>>> of you doesn't understand the proposals of the other. >>>> >>>> So how could these disagreements be reconciled? >> >>> I'm in the process of implementing something that should satisfy >>> everyone, but it's not finished yet. >> >> This was half a year ago, and I'm not sure whether anything further was >> done here? > > For what it's worth, I've been brainstorming some ideas for how to > abstract things out a bit further to make it easy for users to tune the > behavior just to their liking. I haven't gotten very far on that yet, > though. Attached is a very WIP patch that hopefully gets across the idea I had. Hopefully the explanation below is sufficiently-clear; if anyone has questions, or if I missed some detail, let me know. (Note: the first patch is just a bugfix so that 'server-delete-client' doesn't get called when Emacs *creates* the client.) The patch adds two new hooks: 'server-before-delete-client-functions' and 'server-after-delete-client-functions'. These should give people the ability to add whatever behaviors they think make sense when closing an emacsclient connection. The default behavior is the same as the current default (call 'save-some-buffers' before deleting the client, and do nothing after). To do something like the 'delete-frame' configuration of the current 'server-stop-automatically' API, you might do something like this: (add-hook 'server-before-delete-client-functions (lambda (proc arg) (when (>= 1 (seq-count (lambda (frame) "Return non-nil if FRAME's client is another process." (not (equal (frame-parameter frame 'client) proc))) (frame-list))) ;; If there are no non-daemon frames other than ones owned by ;; this client, we want to do all the prompting that ;; 'save-buffers-kill-emacs' does, but without really killing. ;; HACK ALERT: This is a pretty clumsy way to do this... (cl-letf (((symbol-function 'kill-emacs) #'ignore)) (save-buffers-kill-emacs arg)) ;; Stop running other hooks. t))) (add-hook 'server-after-delete-client-functions (lambda (proc) ;; Kill emacs if the only frame left is the daemon frame. (unless (cdr (frame-list)) (kill-emacs)))) (Some helper functions might make these hooks simpler, of course.) This interface has some other potentially-interesting uses. For example, the after-deletion hook could start a timer and only kill Emacs if no new clients connected after N seconds[1]. That would be useful in cases like `git rebase -i` where Git might run your $EDITOR multiple times in a row. It would be a waste of CPU to shut down and restart the Emacs daemon every time. One thing I'm not sure about yet: should the 'empty' setting for 'server-stop-automatically' just become a hook on 'server-after-delete-client-functions'? It's not *quite* the same, since the 'empty' setting will also leave the daemon running until any active subprocesses finish too. Maybe it would make sense for 'server-stop-automatically' to stick around, but just be a boolean (when non-nil, use the current 'empty' behavior)? Then we keep all the nice features of the 'empty' setting, and the other behaviors can be implemented via these new hooks. [1] This might need an additional hook like 'server-after-create-client-functions'. --------------4u9ZszFBFAMSwCxX75hetToq Content-Type: text/plain; charset=UTF-8; name="0001-Only-delete-server-client-from-the-sentinel-when-the.patch" Content-Disposition: attachment; filename*0="0001-Only-delete-server-client-from-the-sentinel-when-the.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA2MjBkM2RmNGMwMTZkZmFmOGMxZDc2NGEwNTE2YTczNjM4NjMyMjgwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKaW0gUG9ydGVyIDxqcG9ydGVyYnVnc0BnbWFpbC5j b20+CkRhdGU6IFNhdCwgOCBPY3QgMjAyMiAxOTo0MDoxNiAtMDcwMApTdWJqZWN0OiBbUEFU Q0ggMS8yXSBPbmx5IGRlbGV0ZSBzZXJ2ZXIgY2xpZW50IGZyb20gdGhlIHNlbnRpbmVsIHdo ZW4gdGhlCiBjbGllbnQgd2FzIGNsb3NlZAoKKiBsaXNwL3NlcnZlci5lbCAoc2VydmVyLXNl bnRpbmVsKTogT25seSBjYWxsICdzZXJ2ZXItZGVsZXRlLWNsaWVudCcKd2hlbiBjbG9zZWQu Ci0tLQogbGlzcC9zZXJ2ZXIuZWwgfCAyOCArKysrKysrKysrKysrKystLS0tLS0tLS0tLS0t CiAxIGZpbGUgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvbGlzcC9zZXJ2ZXIuZWwgYi9saXNwL3NlcnZlci5lbAppbmRleCAzY2Fh MzM1YzRlLi41MDM0YThlOGM2IDEwMDY0NAotLS0gYS9saXNwL3NlcnZlci5lbAorKysgYi9s aXNwL3NlcnZlci5lbApAQCAtNDA4LDIxICs0MDgsMjMgQEAgc2VydmVyLXNlbnRpbmVsCiAg ICh3aGVuIChhbmQgKGVxIChwcm9jZXNzLXN0YXR1cyBwcm9jKSAnb3BlbikKIAkgICAgIChw cm9jZXNzLXF1ZXJ5LW9uLWV4aXQtZmxhZyBwcm9jKSkKICAgICAoc2V0LXByb2Nlc3MtcXVl cnktb24tZXhpdC1mbGFnIHByb2MgbmlsKSkKLSAgOzsgRGVsZXRlIHRoZSBhc3NvY2lhdGVk IGNvbm5lY3Rpb24gZmlsZSwgaWYgYXBwbGljYWJsZS4KLSAgOzsgQWx0aG91Z2ggdGhlcmUn cyBubyAxMDAlIGd1YXJhbnRlZSB0aGF0IHRoZSBmaWxlIGlzIG93bmVkIGJ5IHRoZQotICA7 OyBydW5uaW5nIEVtYWNzIGluc3RhbmNlLCBzZXJ2ZXItc3RhcnQgdXNlcyBzZXJ2ZXItcnVu bmluZy1wIHRvIGNoZWNrCi0gIDs7IGZvciBwb3NzaWJsZSBzZXJ2ZXJzIGJlZm9yZSBkb2lu ZyBhbnl0aGluZywgc28gaXQgKnNob3VsZCogYmUgb3Vycy4KLSAgKGFuZCAocHJvY2Vzcy1j b250YWN0IHByb2MgOnNlcnZlcikKLSAgICAgICAoZXEgKHByb2Nlc3Mtc3RhdHVzIHByb2Mp ICdjbG9zZWQpCi0gICAgICAgOzsgSWYgdGhpcyB2YXJpYWJsZSBpcyBub24tbmlsLCB0aGUg c29ja2V0IHdhcyBwYXNzZWQgaW4gdG8KLSAgICAgICA7OyBFbWFjcywgYW5kIG5vdCBjcmVh dGVkIGJ5IEVtYWNzIGl0c2VsZiAoZm9yIGluc3RhbmNlLAotICAgICAgIDs7IGNyZWF0ZWQg Ynkgc3lzdGVtZCkuICBJbiB0aGF0IGNhc2UsIGRvbid0IGRlbGV0ZSB0aGUgc29ja2V0Lgot ICAgICAgIChub3QgaW50ZXJuYWwtLWRhZW1vbi1zb2NrbmFtZSkKLSAgICAgICAoaWdub3Jl LWVycm9ycwotCSAoZGVsZXRlLWZpbGUgKHByb2Nlc3MtZ2V0IHByb2MgOnNlcnZlci1maWxl KSkpKQogICAoc2VydmVyLWxvZyAoZm9ybWF0ICJTdGF0dXMgY2hhbmdlZCB0byAlczogJXMi CiAgICAgICAgICAgICAgICAgICAgICAgKHByb2Nlc3Mtc3RhdHVzIHByb2MpIG1zZykgcHJv YykKLSAgKHNlcnZlci1kZWxldGUtY2xpZW50IHByb2MpKQorICAod2hlbiAoZXEgKHByb2Nl c3Mtc3RhdHVzIHByb2MpICdjbG9zZWQpCisgICAgOzsgRGVsZXRlIHRoZSBhc3NvY2lhdGVk IGNvbm5lY3Rpb24gZmlsZSwgaWYgYXBwbGljYWJsZS4KKyAgICA7OyBBbHRob3VnaCB0aGVy ZSdzIG5vIDEwMCUgZ3VhcmFudGVlIHRoYXQgdGhlIGZpbGUgaXMgb3duZWQgYnkKKyAgICA7 OyB0aGUgcnVubmluZyBFbWFjcyBpbnN0YW5jZSwgc2VydmVyLXN0YXJ0IHVzZXMgc2VydmVy LXJ1bm5pbmctcAorICAgIDs7IHRvIGNoZWNrIGZvciBwb3NzaWJsZSBzZXJ2ZXJzIGJlZm9y ZSBkb2luZyBhbnl0aGluZywgc28gaXQKKyAgICA7OyAqc2hvdWxkKiBiZSBvdXJzLgorICAg IChhbmQgKHByb2Nlc3MtY29udGFjdCBwcm9jIDpzZXJ2ZXIpCisgICAgICAgICA7OyBJZiB0 aGlzIHZhcmlhYmxlIGlzIG5vbi1uaWwsIHRoZSBzb2NrZXQgd2FzIHBhc3NlZCBpbiB0bwor ICAgICAgICAgOzsgRW1hY3MsIGFuZCBub3QgY3JlYXRlZCBieSBFbWFjcyBpdHNlbGYgKGZv ciBpbnN0YW5jZSwKKyAgICAgICAgIDs7IGNyZWF0ZWQgYnkgc3lzdGVtZCkuICBJbiB0aGF0 IGNhc2UsIGRvbid0IGRlbGV0ZSB0aGUKKyAgICAgICAgIDs7IHNvY2tldC4KKyAgICAgICAg IChub3QgaW50ZXJuYWwtLWRhZW1vbi1zb2NrbmFtZSkKKyAgICAgICAgIChpZ25vcmUtZXJy b3JzCisgICAgICAgICAgIChkZWxldGUtZmlsZSAocHJvY2Vzcy1nZXQgcHJvYyA6c2VydmVy LWZpbGUpKSkpCisgICAgKHNlcnZlci1kZWxldGUtY2xpZW50IHByb2MpKSkKIAogKGRlZnVu IHNlcnZlci0tb24tZGlzcGxheS1wIChmcmFtZSBkaXNwbGF5KQogICAoYW5kIChlcXVhbCAo ZnJhbWUtcGFyYW1ldGVyIGZyYW1lICdkaXNwbGF5KSBkaXNwbGF5KQotLSAKMi4yNS4xCgo= --------------4u9ZszFBFAMSwCxX75hetToq Content-Type: text/plain; charset=UTF-8; name="0002-WIP-Add-hooks-before-after-deleting-Emacs-clients.patch" Content-Disposition: attachment; filename*0="0002-WIP-Add-hooks-before-after-deleting-Emacs-clients.patch" Content-Transfer-Encoding: base64 RnJvbSA3YjI1NjNhY2MwNjQ1ODZiNjc0ZjY4YWJkNGVlYmQxMWI1NjhlNzZiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBKaW0gUG9ydGVyIDxqcG9ydGVyYnVnc0BnbWFpbC5j b20+CkRhdGU6IFN1biwgOSBPY3QgMjAyMiAxNDo1MDowNiAtMDcwMApTdWJqZWN0OiBbUEFU Q0ggMi8yXSBbV0lQXSBBZGQgaG9va3MgYmVmb3JlL2FmdGVyIGRlbGV0aW5nIEVtYWNzIGNs aWVudHMKCiogbGlzcC9zZXJ2ZXIuZWwgKHNlcnZlci1iZWZvcmUtZGVsZXRlLWNsaWVudC1m dW5jdGlvbnMpCihzZXJ2ZXItYWZ0ZXItZGVsZXRlLWNsaWVudC1mdW5jdGlvbnMpOiBOZXcg ZGVmY3VzdG9tcy4KKHNlcnZlci1kZWxldGUtY2xpZW50KTogTmV3IGFyZ3VtZW50IEFSRy4g IEhhbmRsZSAnbm93YWl0JyB2YWx1ZSBmb3IKUFJPQy4gIFJ1biB0aGUgYWJvdmUgaG9va3Mu CihzZXJ2ZXItc2F2ZS1idWZmZXJzLWtpbGwtdGVybWluYWwpOiBFeHRyYWN0IGJ1ZmZlci1z YXZpbmcgY29kZSBmcm9tCmhlcmUuLi4KKHNlcnZlci1zYXZlLXNvbWUtYnVmZmVycyk6IC4u LiB0byB0aGlzIG5ldyBmdW5jdGlvbi4KLS0tCiBsaXNwL3NlcnZlci5lbCB8IDc4ICsrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUg Y2hhbmdlZCwgNTEgaW5zZXJ0aW9ucygrKSwgMjcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvbGlzcC9zZXJ2ZXIuZWwgYi9saXNwL3NlcnZlci5lbAppbmRleCA1MDM0YThlOGM2Li5j MWE2NGQ2ZjMyIDEwMDY0NAotLS0gYS9saXNwL3NlcnZlci5lbAorKysgYi9saXNwL3NlcnZl ci5lbApAQCAtMTkxLDYgKzE5MSwxOCBAQCBzZXJ2ZXItZG9uZS1ob29rCiAgICJIb29rIHJ1 biB3aGVuIGRvbmUgZWRpdGluZyBhIGJ1ZmZlciBmb3IgdGhlIEVtYWNzIHNlcnZlci4iCiAg IDp0eXBlICdob29rKQogCis7OzsjIyNhdXRvbG9hZAorKGRlZmN1c3RvbSBzZXJ2ZXItYmVm b3JlLWRlbGV0ZS1jbGllbnQtZnVuY3Rpb25zICcoc2VydmVyLXNhdmUtc29tZS1idWZmZXJz KQorICAiRnVuY3Rpb25zIHRvIHJ1biBiZWZvcmUgZGVsZXRpbmcgYW4gRW1hY3MgY2xpZW50 LgorVGhlIGZ1bmN0aW9ucyBhcmUgcnVuIHdpdGggdHdvIGFyZ3VtZW50czogdGhlIGNsaWVu dCBwcm9jZXNzCitiZWluZyBkZWxldGVkIGFuZCBhbiBhcmcgaW5kaWNhdGluZyB3aGV0aGVy IHRvIHNpbGVudGx5IHNhdmUuIgorICA6dHlwZSAnaG9vaykKKworKGRlZmN1c3RvbSBzZXJ2 ZXItYWZ0ZXItZGVsZXRlLWNsaWVudC1mdW5jdGlvbnMgbmlsCisgICJGdW5jdGlvbnMgdG8g cnVuIGFmdGVyIGRlbGV0aW5nIGFuIEVtYWNzIGNsaWVudC4KK0Z1bmN0aW9ucyBhcmUgcnVu IHdpdGggb25lIGFyZ3VtZW50OiB0aGUgY2xpZW50IHByb2Nlc3MganVzdCBkZWxldGVkLiIK KyAgOnR5cGUgJ2hvb2spCisKIChkZWZ2YXIgc2VydmVyLXByb2Nlc3MgbmlsCiAgICJUaGUg Y3VycmVudCBzZXJ2ZXIgcHJvY2Vzcy4iKQogCkBAIC0zMTgsMTMgKzMzMCwyNSBAQCBzZXJ2 ZXItd2l0aC1lbnZpcm9ubWVudAogICAgICAgICAgICAgICAgICBwcm9jZXNzLWVudmlyb25t ZW50KSkpCiAgICAgICAgKHByb2duICxAYm9keSkpKSkKIAotKGRlZnVuIHNlcnZlci1kZWxl dGUtY2xpZW50IChwcm9jICZvcHRpb25hbCBub2ZyYW1lKQorKGRlZnVuIHNlcnZlci1kZWxl dGUtY2xpZW50IChwcm9jICZvcHRpb25hbCBub2ZyYW1lIGFyZykKICAgIkRlbGV0ZSBQUk9D LCBpbmNsdWRpbmcgaXRzIGJ1ZmZlcnMsIHRlcm1pbmFscyBhbmQgZnJhbWVzLgogSWYgTk9G UkFNRSBpcyBub24tbmlsLCBsZXQgdGhlIGZyYW1lcyBsaXZlLgogVXBkYXRlcyBgc2VydmVy LWNsaWVudHMnLiIKICAgKHNlcnZlci1sb2cgKGNvbmNhdCAic2VydmVyLWRlbGV0ZS1jbGll bnQiIChpZiBub2ZyYW1lICIgbm9mcmFtZSIpKSBwcm9jKQotICA7OyBGb3JjZSBhIG5ldyBs b29rdXAgb2YgY2xpZW50IChwcmV2ZW50cyBpbmZpbml0ZSByZWN1cnNpb24pLgotICAod2hl biAobWVtcSBwcm9jIHNlcnZlci1jbGllbnRzKQorICAoY29uZAorICAgKChlcSBwcm9jICdu b3dhaXQpCisgICAgKHJ1bi1ob29rLXdpdGgtYXJncy11bnRpbC1zdWNjZXNzCisgICAgICdz ZXJ2ZXItYmVmb3JlLWRlbGV0ZS1jbGllbnQtZnVuY3Rpb25zIHByb2MgYXJnKQorICAgIChp ZiAoY2RyIChmcmFtZS1saXN0KSkKKwkoZGVsZXRlLWZyYW1lKQorICAgICAgOzsgSWYgd2Un cmUgdGhlIGxhc3QgZnJhbWUgc3RhbmRpbmcsIGtpbGwgRW1hY3MuCisgICAgICAoa2lsbC1l bWFjcyBhcmcpKQorICAgIChydW4taG9vay13aXRoLWFyZ3MgJ3NlcnZlci1hZnRlci1kZWxl dGUtY2xpZW50LWZ1bmN0aW9ucyBwcm9jKSkKKworICAgOzsgRm9yY2UgYSBuZXcgbG9va3Vw IG9mIGNsaWVudCAocHJldmVudHMgaW5maW5pdGUgcmVjdXJzaW9uKS4KKyAgICgobWVtcSBw cm9jIHNlcnZlci1jbGllbnRzKQorICAgIChydW4taG9vay13aXRoLWFyZ3MtdW50aWwtc3Vj Y2VzcworICAgICAnc2VydmVyLWJlZm9yZS1kZWxldGUtY2xpZW50LWZ1bmN0aW9ucyBwcm9j IGFyZykKICAgICAobGV0ICgoYnVmZmVycyAocHJvY2Vzcy1nZXQgcHJvYyAnYnVmZmVycykp KQogCiAgICAgICA7OyBLaWxsIHRoZSBjbGllbnQncyBidWZmZXJzLgpAQCAtMzczLDcgKzM5 Nyw4IEBAIHNlcnZlci1kZWxldGUtY2xpZW50CiAgICAgICAoaWYgKGVxIChwcm9jZXNzLXN0 YXR1cyBwcm9jKSAnb3BlbikKIAkgIChkZWxldGUtcHJvY2VzcyBwcm9jKSkKIAotICAgICAg KHNlcnZlci1sb2cgIkRlbGV0ZWQiIHByb2MpKSkpCisgICAgICAoc2VydmVyLWxvZyAiRGVs ZXRlZCIgcHJvYykKKyAgICAgIChydW4taG9vay13aXRoLWFyZ3MgJ3NlcnZlci1hZnRlci1k ZWxldGUtY2xpZW50LWZ1bmN0aW9ucyBwcm9jKSkpKSkKIAogKGRlZnZhciBzZXJ2ZXItbG9n LXRpbWUtZnVuY3Rpb24gIydjdXJyZW50LXRpbWUtc3RyaW5nCiAgICJGdW5jdGlvbiB0byBn ZW5lcmF0ZSB0aW1lc3RhbXBzIGZvciBgc2VydmVyLWJ1ZmZlcicuIikKQEAgLTE3MzgsMjkg KzE3NjMsMjggQEAgc2VydmVyLXNhdmUtYnVmZmVycy1raWxsLXRlcm1pbmFsCiAKIElmIGVt YWNzY2xpZW50IHdhcyBzdGFydGVkIHdpdGggYSBsaXN0IG9mIGZpbGVuYW1lcyB0byBlZGl0 LCB0aGVuCiBvbmx5IHRoZXNlIGZpbGVzIHdpbGwgYmUgYXNrZWQgdG8gYmUgc2F2ZWQuIgot ICAoaWYgc2VydmVyLXN0b3AtYXV0b21hdGljYWxseQotICAgICAgKHNlcnZlci1zdG9wLWF1 dG9tYXRpY2FsbHktLWhhbmRsZS1kZWxldGUtZnJhbWUgKHNlbGVjdGVkLWZyYW1lKSkKLSAg ICAobGV0ICgocHJvYyAoZnJhbWUtcGFyYW1ldGVyIG5pbCAnY2xpZW50KSkpCi0gICAgICAo Y29uZCAoKGVxIHByb2MgJ25vd2FpdCkKLQkgICAgIDs7IE5vd2FpdCBmcmFtZXMgaGF2ZSBu byBjbGllbnQgYnVmZmVyIGxpc3QuCi0JICAgICAoaWYgKGNkciAoZnJhbWUtbGlzdCkpCi0J ICAgICAgICAgKHByb2duIChzYXZlLXNvbWUtYnVmZmVycyBhcmcpCi0JCSAgICAgICAgKGRl bGV0ZS1mcmFtZSkpCi0JICAgICAgIDs7IElmIHdlJ3JlIHRoZSBsYXN0IGZyYW1lIHN0YW5k aW5nLCBraWxsIEVtYWNzLgotCSAgICAgICAoc2F2ZS1idWZmZXJzLWtpbGwtZW1hY3MgYXJn KSkpCi0JICAgICgocHJvY2Vzc3AgcHJvYykKLQkgICAgIChsZXQgKChidWZmZXJzIChwcm9j ZXNzLWdldCBwcm9jICdidWZmZXJzKSkpCi0JICAgICAgIChzYXZlLXNvbWUtYnVmZmVycwot CSAgICAgICAgYXJnIChpZiBidWZmZXJzCi0gICAgICAgICAgICAgICAgICAgICAgICA7OyBP bmx5IGZpbGVzIGZyb20gZW1hY3NjbGllbnQgZmlsZSBsaXN0LgotCQkgICAgICAgIChsYW1i ZGEgKCkgKG1lbXEgKGN1cnJlbnQtYnVmZmVyKSBidWZmZXJzKSkKLSAgICAgICAgICAgICAg ICAgICAgICA7OyBObyBlbWFjc2NsaWVudCBmaWxlIGxpc3Q6IGRvbid0IG92ZXJyaWRlCi0g ICAgICAgICAgICAgICAgICAgICAgOzsgYHNhdmUtc29tZS1idWZmZXJzLWRlZmF1bHQtcHJl ZGljYXRlJyAodW5sZXNzCi0gICAgICAgICAgICAgICAgICAgICAgOzsgQVJHIGlzIG5vbi1u aWwpLCBzaW5jZSB3ZSdyZSBub3Qga2lsbGluZwotICAgICAgICAgICAgICAgICAgICAgIDs7 IEVtYWNzICh1bmxpa2UgYHNhdmUtYnVmZmVycy1raWxsLWVtYWNzJykuCi0JCSAgICAgIChh bmQgYXJnIHQpKSkKLQkgICAgICAgKHNlcnZlci1kZWxldGUtY2xpZW50IHByb2MpKSkKLQkg ICAgKHQgKGVycm9yICJJbnZhbGlkIGNsaWVudCBmcmFtZSIpKSkpKSkKKyAgKGxldCAoKHBy b2MgKGZyYW1lLXBhcmFtZXRlciBuaWwgJ2NsaWVudCkpKQorICAgICh1bmxlc3MgKG9yIChl cSBwcm9jICdub3dhaXQpCisgICAgICAgICAgICAgICAgKHByb2Nlc3NwIHByb2MpKQorICAg ICAgKGVycm9yICJJbnZhbGlkIGNsaWVudCBmcmFtZSIpKQorICAgIChzZXJ2ZXItZGVsZXRl LWNsaWVudCBwcm9jIG5pbCBhcmcpKSkKKworKGRlZnVuIHNlcnZlci1zYXZlLXNvbWUtYnVm ZmVycyAocHJvYyBhcmcpCisgICJTYXZlIGJ1ZmZlcnMgYXNzb2NpYXRlZCB3aXRoIFBST0Mu CitBIG5vbi1uaWwgQVJHIG1lYW5zIHNhdmUgYWxsIHdpdGhvdXQgcXVlc3Rpb25zIChzZWUK K2BzYXZlLXNvbWUtYnVmZmVycycpLiIKKyAgKGlmIChlcSBwcm9jICdub3dhaXQpCisgICAg ICAoc2F2ZS1zb21lLWJ1ZmZlcnMgYXJnKQorICAgIChsZXQgKChidWZmZXJzIChwcm9jZXNz LWdldCBwcm9jICdidWZmZXJzKSkpCisgICAgICAoc2F2ZS1zb21lLWJ1ZmZlcnMKKyAgICAg ICBhcmcgKGlmIGJ1ZmZlcnMKKyAgICAgICAgICAgICAgIDs7IE9ubHkgZmlsZXMgZnJvbSBl bWFjc2NsaWVudCBmaWxlIGxpc3QuCisJICAgICAgIChsYW1iZGEgKCkgKG1lbXEgKGN1cnJl bnQtYnVmZmVyKSBidWZmZXJzKSkKKyAgICAgICAgICAgICA7OyBObyBlbWFjc2NsaWVudCBm aWxlIGxpc3Q6IGRvbid0IG92ZXJyaWRlCisgICAgICAgICAgICAgOzsgYHNhdmUtc29tZS1i dWZmZXJzLWRlZmF1bHQtcHJlZGljYXRlJyAodW5sZXNzIEFSRyBpcworICAgICAgICAgICAg IDs7IG5vbi1uaWwpLCBzaW5jZSB3ZSdyZSBub3Qga2lsbGluZyBFbWFjcyAodW5saWtlCisg ICAgICAgICAgICAgOzsgYHNhdmUtYnVmZmVycy1raWxsLWVtYWNzJykuCisJICAgICAoYW5k IGFyZyB0KSkpKSkpCiAKIChkZWZ1biBzZXJ2ZXItc3RvcC1hdXRvbWF0aWNhbGx5LS1oYW5k bGUtZGVsZXRlLWZyYW1lIChmcmFtZSkKICAgIkhhbmRsZSBkZWxldGlvbiBvZiBGUkFNRSB3 aGVuIGBzZXJ2ZXItc3RvcC1hdXRvbWF0aWNhbGx5JyBpcyB1c2VkLiIKLS0gCjIuMjUuMQoK --------------4u9ZszFBFAMSwCxX75hetToq--