From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Okam via "Bug reports for GNU Emacs, the Swiss army knife of text editors" Newsgroups: gmane.emacs.bugs Subject: bug#49120: [PATCH] Add commands 'kill-lines' and 'copy-lines' Date: Thu, 01 Jul 2021 23:50:26 +0000 Message-ID: <091f7b9d-4314-37d2-faf9-9a88134c6b64@protonmail.com> References: <337118f4-d1a2-ec51-fb29-a933a3cac785@protonmail.com> <831r8xwyh9.fsf@gnu.org> Reply-To: Okam Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="b1_miDFmeBFJviw9ritOdF25ILPL9LayFkvfq68uKiiU" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="18467"; mail-complaints-to="usenet@ciao.gmane.io" Cc: 49120@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Fri Jul 02 01:51:12 2021 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 1lz6Sd-0004ZI-JJ for geb-bug-gnu-emacs@m.gmane-mx.org; Fri, 02 Jul 2021 01:51:11 +0200 Original-Received: from localhost ([::1]:49472 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1lz6Sc-0005tR-2X for geb-bug-gnu-emacs@m.gmane-mx.org; Thu, 01 Jul 2021 19:51:10 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]:47606) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1lz6SU-0005rw-DJ for bug-gnu-emacs@gnu.org; Thu, 01 Jul 2021 19:51:02 -0400 Original-Received: from debbugs.gnu.org ([209.51.188.43]:50533) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1lz6SU-0007se-4R for bug-gnu-emacs@gnu.org; Thu, 01 Jul 2021 19:51:02 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1lz6SU-0001H6-3I for bug-gnu-emacs@gnu.org; Thu, 01 Jul 2021 19:51:02 -0400 X-Loop: help-debbugs@gnu.org Resent-From: Okam Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 01 Jul 2021 23:51:02 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 49120 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 49120-submit@debbugs.gnu.org id=B49120.16251834444867 (code B ref 49120); Thu, 01 Jul 2021 23:51:02 +0000 Original-Received: (at 49120) by debbugs.gnu.org; 1 Jul 2021 23:50:44 +0000 Original-Received: from localhost ([127.0.0.1]:33846 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lz6SB-0001GQ-Ai for submit@debbugs.gnu.org; Thu, 01 Jul 2021 19:50:43 -0400 Original-Received: from mail-4323.protonmail.ch ([185.70.43.23]:12991) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1lz6S9-0001G9-Lx for 49120@debbugs.gnu.org; Thu, 01 Jul 2021 19:50:42 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=protonmail.com; s=protonmail; t=1625183435; bh=zVkth0E4KbCUPr4R0Y6JnRb/d83cfR3pOYh8RnxZwYo=; h=Date:To:From:Cc:Reply-To:Subject:In-Reply-To:References:From; b=oB7vyRPZAs2ReWAwdLgxbnaJULyAuRYlao4kMZ0GEF2AWrs4yho2bSMmnlKV97rzp LGOnRoafSKANkdnMV8NtPWSgPMZYfwS55dLlymW0t2i547gSGZL7WwNvzRBr8ToFRO oCGxJHkOJLiEWNY+vbzHJMNnzil4VycKcQHLSvoA= In-Reply-To: <831r8xwyh9.fsf@gnu.org> 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" X-ACL-Warn: , Okam Xref: news.gmane.io gmane.emacs.bugs:209294 Archived-At: This is a multi-part message in MIME format. --b1_miDFmeBFJviw9ritOdF25ILPL9LayFkvfq68uKiiU Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: quoted-printable On 6/19/21 1:33 PM, Eli Zaretskii wrote: >> Date: Sat, 19 Jun 2021 17:12:25 +0000 >> From: Okam via "Bug reports for GNU Emacs, >> the Swiss army knife of text editors" >> >> These commands work similarly to the 'flush-lines' command, but add the >> lines to the kill ring as a single item. > > Thanks. However, the "as a single item" part is not clear enough and > should be clarified. Do you mean "as a single string"? If so, I > would suggest to say that, and also explicitly say that the string > includes the newlines between the lines. > >> +@findex kill-lines >> +@item M-x kill-lines >> +Like @code{flush-lines}, but also add the matching lines to the kill >> +ring as a single item. > > I'd suggest to reword: > > Like @code{flush-lines}, but also add the matching lines to the kill > ring. The command adds the matching lines to the kill ring as a > single string, including the newlines that separated the lines. > > The reason I think it's better to separate this into two sentences is > that "also" is only relevant to the first part, not the second. Done. >> +(defalias 'kill-matching-lines 'kill-lines) >> +(defalias 'copy-matching-lines 'copy-lines) > > I wonder why we need these aliases, and in fact why not have only > kill-matching-lines without the shorter kill-lines? The latter omits > the crucial reference to the "matching" part, and is too similar to > kill-word, kill-paragraph, etc. I was following the examples of `flush-lines` and `keep-lines`, with aliases `delete-matching-lines` and `delete-non-matching-lines`, respectively. The proposed `kill-matching-lines` and `copy-matching-lines` are just other versions of `flush-lines`. I have removed the aliases from the patch. >> +(defun kill-lines (regexp &optional rstart rend interactive) >> + "Kill lines containing matches for REGEXP. >> + >> +When called from Lisp (and usually when called interactively as >> +well, see below), applies to the part of the buffer after point. >> +The line point is in is killed if and only if it contains a match >> +for regexp starting after point. > ^^^^^^ > REGEXP should in all caps. > >> +Second and third arg RSTART and REND specify the region to > ^^^ > "args", in plural. > >> +operate on. Lines partially contained in this region are killed >> +if and only if they contain a match entirely contained in it. > ^^^^^ > "in the region" will make this more clear. > >> + When >> +calling this function from Lisp, you can pretend that it was >> +called interactively by passing a non-nil INTERACTIVE argument. > > This is not specific to this command, so why tell it here? > > Same comments apply to copy-lines. Fixed. Since the documentation string was originally copied from `flush-lines`, do you want `keep-lines` and `flush-lines` to also have these changes? >> +Return the number of copied matching lines. When called >> +interactively, also print the number." >> + (interactive >> + (progn >> + (barf-if-buffer-read-only) > > Why barf? this command doesn't modify the buffer, does it? > Fixed. Thank you. Also, the `flush-lines` command, and so these proposed commands, reports the number of, for example, deleted regions as the number of lines removed, ignoring cases when the match spans multiple lines. Should that be changed too? --b1_miDFmeBFJviw9ritOdF25ILPL9LayFkvfq68uKiiU Content-Type: text/x-patch; name=0001-Add-commands-kill-matching-lines-and-copy-matching-l.patch Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=0001-Add-commands-kill-matching-lines-and-copy-matching-l.patch RnJvbSA4OTFmMzYwOTE5MjQ0ZTk2NmFkMTI3OGEyYzM2NGIwMzhjODE1NmM0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQ0KRnJvbTogRWFybCBIeWF0dCA8b2thbXNuQHByb3Rvbm1haWwuY29tPg0K RGF0ZTogU2F0LCAxOSBKdW4gMjAyMSAwODozMDozMSAtMDQwMA0KU3ViamVjdDogW1BBVENIXSBB ZGQgY29tbWFuZHMgJ2tpbGwtbWF0Y2hpbmctbGluZXMnIGFuZCAnY29weS1tYXRjaGluZy1saW5l cycNCg0KKiBkb2MvZW1hY3Mvc2VhcmNoLnRleGk6IERvY3VtZW50IHRoZXNlIGFkZGl0aW9ucy4N CiogbGlzcC9yZXBsYWNlLmVsOg0KQWRkIHRoZSBjb21tYW5kcyAna2lsbC1tYXRjaGluZy1saW5l cycgYW5kICdjb3B5LW1hdGNoaW5nLWxpbmVzJy4NCg0KJ2tpbGwtbWF0Y2hpbmctbGluZXMnIGlz IGxpa2UgJ2ZsdXNoLWxpbmVzJywgYnV0IGFkZHMgdGhlIGxpbmVzIHRvIHRoZQ0Ka2lsbCByaW5n IGFzIGEgc2luZ2xlIHN0cmluZywga2VlcGluZyBsaW5lIGVuZGluZ3MuDQonY29weS1tYXRjaGlu Zy1saW5lcycgaXMgbGlrZSAna2lsbC1tYXRjaGluZy1saW5lcycsIGJ1dCBvbmx5IGNvcGllcw0K dGhvc2UgbGluZXMgaW5zdGVhZCBvZiBraWxsaW5nIHRoZW0uDQotLS0NCiBkb2MvZW1hY3Mvc2Vh cmNoLnRleGkgfCAgMTEgKysrKw0KIGV0Yy9ORVdTICAgICAgICAgICAgICB8ICAgNSArKw0KIGxp c3AvcmVwbGFjZS5lbCAgICAgICB8IDEyNCArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysNCiAzIGZpbGVzIGNoYW5nZWQsIDE0MCBpbnNlcnRpb25zKCspDQoNCmRpZmYg LS1naXQgYS9kb2MvZW1hY3Mvc2VhcmNoLnRleGkgYi9kb2MvZW1hY3Mvc2VhcmNoLnRleGkNCmlu ZGV4IGU2YjA2NmU5NzMuLmExNzYwYWQ2NmYgMTAwNjQ0DQotLS0gYS9kb2MvZW1hY3Mvc2VhcmNo LnRleGkNCisrKyBiL2RvYy9lbWFjcy9zZWFyY2gudGV4aQ0KQEAgLTE5NzEsNiArMTk3MSwxNyBA QCBPdGhlciBSZXBlYXRpbmcgU2VhcmNoDQogKGEgbmV3bGluZSB0aGF0IGVuZHMgYSBsaW5lIGNv dW50cyBhcyBwYXJ0IG9mIHRoYXQgbGluZSkuDQogDQogSWYgYSBtYXRjaCBpcyBzcGxpdCBhY3Jv c3MgbGluZXMsIHRoaXMgY29tbWFuZCBrZWVwcyBhbGwgdGhvc2UgbGluZXMuDQorDQorQGZpbmRl eCBraWxsLW1hdGNoaW5nLWxpbmVzDQorQGl0ZW0gTS14IGtpbGwtbWF0Y2hpbmctbGluZXMNCitM aWtlIEBjb2Rle2ZsdXNoLWxpbmVzfSwgYnV0IGFsc28gYWRkIHRoZSBtYXRjaGluZyBsaW5lcyB0 byB0aGUga2lsbA0KK3JpbmcuICBUaGUgY29tbWFuZCBhZGRzIHRoZSBtYXRjaGluZyBsaW5lcyB0 byB0aGUga2lsbCByaW5nIGFzIGENCitzaW5nbGUgc3RyaW5nLCBpbmNsdWRpbmcgdGhlIG5ld2xp bmVzIHRoYXQgc2VwYXJhdGVkIHRoZSBsaW5lcy4NCisNCitAZmluZGV4IGNvcHktbWF0Y2hpbmct bGluZXMNCitAaXRlbSBNLXggY29weS1tYXRjaGluZy1saW5lcw0KK0xpa2UgQGNvZGV7a2lsbC1t YXRjaGluZy1saW5lc30sIGJ1dCB0aGUgbWF0Y2hpbmcgbGluZXMgYXJlIG5vdA0KK3JlbW92ZWQg ZnJvbSB0aGUgYnVmZmVyLg0KIEBlbmQgdGFibGUNCiANCiBAbm9kZSBTZWFyY2ggQ3VzdG9taXph dGlvbnMNCmRpZmYgLS1naXQgYS9ldGMvTkVXUyBiL2V0Yy9ORVdTDQppbmRleCAxNjkzMzQyZjBh Li5lYjg2MjUzOGRhIDEwMDY0NA0KLS0tIGEvZXRjL05FV1MNCisrKyBiL2V0Yy9ORVdTDQpAQCAt NDYxLDYgKzQ2MSwxMSBAQCBoaWdobGlnaHRpbmcgb24gaGVhZGluZyBsaW5lcyB1c2luZyBzdGFu ZGFyZCBvdXRsaW5lIGZhY2VzLiAgVGhpcw0KIHdvcmtzIHdlbGwgb25seSB3aGVuIHRoZXJlIGFy ZSBubyBjb25mbGljdHMgd2l0aCBmYWNlcyB1c2VkIGJ5IHRoZQ0KIG1ham9yIG1vZGUuDQogDQor KiogTmV3IGNvbW1hbmRzICdjb3B5LW1hdGNoaW5nLWxpbmVzJyBhbmQgJ2tpbGwtbWF0Y2hpbmct bGluZXMnLg0KK1RoZXNlIGNvbW1hbmRzIGFyZSBzaW1pbGFyIHRvIHRoZSBjb21tYW5kICdmbHVz aC1saW5lcycsDQorYnV0IGFkZCB0aGUgbWF0Y2hpbmcgbGluZXMgdG8gdGhlIGtpbGwgcmluZyBh cyBhIHNpbmdsZSBzdHJpbmcsDQoraW5jbHVkaW5nIHRoZSBuZXdsaW5lcyB0aGF0IHNlcGFyYXRl IHRoZSBsaW5lcy4NCisNCiAMDQogKiBDaGFuZ2VzIGluIFNwZWNpYWxpemVkIE1vZGVzIGFuZCBQ YWNrYWdlcyBpbiBFbWFjcyAyOC4xDQogDQpkaWZmIC0tZ2l0IGEvbGlzcC9yZXBsYWNlLmVsIGIv bGlzcC9yZXBsYWNlLmVsDQppbmRleCBmZTJjYmM0NDdhLi4wNTExMTI3NzBlIDEwMDY0NA0KLS0t IGEvbGlzcC9yZXBsYWNlLmVsDQorKysgYi9saXNwL3JlcGxhY2UuZWwNCkBAIC0xMDU0LDYgKzEw NTQsMTMwIEBAIGZsdXNoLWxpbmVzDQogCQkJICAgICAgIGNvdW50KSkNCiAgICAgY291bnQpKQ0K IA0KKyhkZWZ1biBraWxsLW1hdGNoaW5nLWxpbmVzIChyZWdleHAgJm9wdGlvbmFsIHJzdGFydCBy ZW5kIGludGVyYWN0aXZlKQ0KKyAgIktpbGwgbGluZXMgY29udGFpbmluZyBtYXRjaGVzIGZvciBS RUdFWFAuDQorDQorV2hlbiBjYWxsZWQgZnJvbSBMaXNwIChhbmQgdXN1YWxseSB3aGVuIGNhbGxl ZCBpbnRlcmFjdGl2ZWx5IGFzDQord2VsbCwgc2VlIGJlbG93KSwgYXBwbGllcyB0byB0aGUgcGFy dCBvZiB0aGUgYnVmZmVyIGFmdGVyIHBvaW50Lg0KK1RoZSBsaW5lIHBvaW50IGlzIGluIGlzIGtp bGxlZCBpZiBhbmQgb25seSBpZiBpdCBjb250YWlucyBhIG1hdGNoDQorZm9yIFJFR0VYUCBzdGFy dGluZyBhZnRlciBwb2ludC4NCisNCitJZiBSRUdFWFAgY29udGFpbnMgdXBwZXIgY2FzZSBjaGFy YWN0ZXJzIChleGNsdWRpbmcgdGhvc2UNCitwcmVjZWRlZCBieSBgXFwnKSBhbmQgYHNlYXJjaC11 cHBlci1jYXNlJyBpcyBub24tbmlsLCB0aGUNCittYXRjaGluZyBpcyBjYXNlLXNlbnNpdGl2ZS4N CisNCitTZWNvbmQgYW5kIHRoaXJkIGFyZ3MgUlNUQVJUIGFuZCBSRU5EIHNwZWNpZnkgdGhlIHJl Z2lvbiB0bw0KK29wZXJhdGUgb24uICBMaW5lcyBwYXJ0aWFsbHkgY29udGFpbmVkIGluIHRoaXMg cmVnaW9uIGFyZSBraWxsZWQNCitpZiBhbmQgb25seSBpZiB0aGV5IGNvbnRhaW4gYSBtYXRjaCBl bnRpcmVseSBjb250YWluZWQgaW4gdGhlDQorcmVnaW9uLg0KKw0KK0ludGVyYWN0aXZlbHksIGlu IFRyYW5zaWVudCBNYXJrIG1vZGUgd2hlbiB0aGUgbWFyayBpcyBhY3RpdmUsDQorb3BlcmF0ZSBv biB0aGUgY29udGVudHMgb2YgdGhlIHJlZ2lvbi4gIE90aGVyd2lzZSwgb3BlcmF0ZSBmcm9tDQor cG9pbnQgdG8gdGhlIGVuZCBvZiAodGhlIGFjY2Vzc2libGUgcG9ydGlvbiBvZikgdGhlIGJ1ZmZl ci4NCisNCitJZiBhIG1hdGNoIGlzIHNwbGl0IGFjcm9zcyBsaW5lcywgYWxsIHRoZSBsaW5lcyBp dCBsaWVzIGluIGFyZQ0KK2tpbGxlZC4gIFRoZXkgYXJlIGtpbGxlZCBfYmVmb3JlXyBsb29raW5n IGZvciB0aGUgbmV4dCBtYXRjaC4NCitIZW5jZSwgYSBtYXRjaCBzdGFydGluZyBvbiB0aGUgc2Ft ZSBsaW5lIGF0IHdoaWNoIGFub3RoZXIgbWF0Y2gNCitlbmRlZCBpcyBpZ25vcmVkLg0KKw0KK1Jl dHVybiB0aGUgbnVtYmVyIG9mIGtpbGxlZCBtYXRjaGluZyBsaW5lcy4gIFdoZW4gY2FsbGVkDQor aW50ZXJhY3RpdmVseSwgYWxzbyBwcmludCB0aGUgbnVtYmVyLiINCisgIChpbnRlcmFjdGl2ZQ0K KyAgIChwcm9nbg0KKyAgICAgKGJhcmYtaWYtYnVmZmVyLXJlYWQtb25seSkNCisgICAgIChrZWVw LWxpbmVzLXJlYWQtYXJncyAiS2lsbCBsaW5lcyBjb250YWluaW5nIG1hdGNoIGZvciByZWdleHAi KSkpDQorICAoaWYgcnN0YXJ0DQorICAgICAgKHByb2duDQorCShnb3RvLWNoYXIgKG1pbiByc3Rh cnQgcmVuZCkpDQorCShzZXRxIHJlbmQgKGNvcHktbWFya2VyIChtYXggcnN0YXJ0IHJlbmQpKSkp DQorICAgIChpZiAoYW5kIGludGVyYWN0aXZlICh1c2UtcmVnaW9uLXApKQ0KKwkoc2V0cSByc3Rh cnQgKHJlZ2lvbi1iZWdpbm5pbmcpDQorCSAgICAgIHJlbmQgKGNvcHktbWFya2VyIChyZWdpb24t ZW5kKSkpDQorICAgICAgKHNldHEgcnN0YXJ0IChwb2ludCkNCisJICAgIHJlbmQgKHBvaW50LW1h eC1tYXJrZXIpKSkNCisgICAgKGdvdG8tY2hhciByc3RhcnQpKQ0KKyAgKGxldCAoKGNvdW50IDAp DQorICAgICAgICAoY2FzZS1mb2xkLXNlYXJjaA0KKwkgKGlmIChhbmQgY2FzZS1mb2xkLXNlYXJj aCBzZWFyY2gtdXBwZXItY2FzZSkNCisJICAgICAoaXNlYXJjaC1uby11cHBlci1jYXNlLXAgcmVn ZXhwIHQpDQorCSAgIGNhc2UtZm9sZC1zZWFyY2gpKSkNCisgICAgKHNhdmUtZXhjdXJzaW9uDQor ICAgICAgKHdoaWxlIChhbmQgKDwgKHBvaW50KSByZW5kKQ0KKwkJICAocmUtc2VhcmNoLWZvcndh cmQgcmVnZXhwIHJlbmQgdCkpDQorICAgICAgICAodW5sZXNzICh6ZXJvcCBjb3VudCkNCisgICAg ICAgICAgKHNldHEgbGFzdC1jb21tYW5kICdraWxsLXJlZ2lvbikpDQorCShraWxsLXJlZ2lvbiAo c2F2ZS1leGN1cnNpb24gKGdvdG8tY2hhciAobWF0Y2gtYmVnaW5uaW5nIDApKQ0KKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZm9yd2FyZC1saW5lIDApDQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwb2ludCkpDQorICAgICAgICAgICAgICAgICAg ICAgKHByb2duIChmb3J3YXJkLWxpbmUgMSkgKHBvaW50KSkpDQorICAgICAgICAoc2V0cSBjb3Vu dCAoMSsgY291bnQpKSkpDQorICAgIChzZXQtbWFya2VyIHJlbmQgbmlsKQ0KKyAgICAod2hlbiBp bnRlcmFjdGl2ZSAobWVzc2FnZSAobmdldHRleHQgIktpbGxlZCAlZCBtYXRjaGluZyBsaW5lIg0K KwkJCQkJICJLaWxsZWQgJWQgbWF0Y2hpbmcgbGluZXMiDQorCQkJCQkgY291bnQpDQorCQkJICAg ICAgIGNvdW50KSkNCisgICAgY291bnQpKQ0KKw0KKyhkZWZ1biBjb3B5LW1hdGNoaW5nLWxpbmVz IChyZWdleHAgJm9wdGlvbmFsIHJzdGFydCByZW5kIGludGVyYWN0aXZlKQ0KKyAgIkNvcHkgbGlu ZXMgY29udGFpbmluZyBtYXRjaGVzIGZvciBSRUdFWFAgdG8gdGhlIGtpbGwgcmluZy4NCisNCitX aGVuIGNhbGxlZCBmcm9tIExpc3AgKGFuZCB1c3VhbGx5IHdoZW4gY2FsbGVkIGludGVyYWN0aXZl bHkgYXMNCit3ZWxsLCBzZWUgYmVsb3cpLCBhcHBsaWVzIHRvIHRoZSBwYXJ0IG9mIHRoZSBidWZm ZXIgYWZ0ZXIgcG9pbnQuDQorVGhlIGxpbmUgcG9pbnQgaXMgaW4gaXMgY29waWVkIGlmIGFuZCBv bmx5IGlmIGl0IGNvbnRhaW5zIGEgbWF0Y2gNCitmb3IgUkVHRVhQIHN0YXJ0aW5nIGFmdGVyIHBv aW50Lg0KKw0KK0lmIFJFR0VYUCBjb250YWlucyB1cHBlciBjYXNlIGNoYXJhY3RlcnMgKGV4Y2x1 ZGluZyB0aG9zZQ0KK3ByZWNlZGVkIGJ5IGBcXCcpIGFuZCBgc2VhcmNoLXVwcGVyLWNhc2UnIGlz IG5vbi1uaWwsIHRoZQ0KK21hdGNoaW5nIGlzIGNhc2Utc2Vuc2l0aXZlLg0KKw0KK1NlY29uZCBh bmQgdGhpcmQgYXJncyBSU1RBUlQgYW5kIFJFTkQgc3BlY2lmeSB0aGUgcmVnaW9uIHRvDQorb3Bl cmF0ZSBvbi4gIExpbmVzIHBhcnRpYWxseSBjb250YWluZWQgaW4gdGhpcyByZWdpb24gYXJlIGNv cGllZA0KK2lmIGFuZCBvbmx5IGlmIHRoZXkgY29udGFpbiBhIG1hdGNoIGVudGlyZWx5IGNvbnRh aW5lZCBpbiB0aGUNCityZWdpb24uDQorDQorSW50ZXJhY3RpdmVseSwgaW4gVHJhbnNpZW50IE1h cmsgbW9kZSB3aGVuIHRoZSBtYXJrIGlzIGFjdGl2ZSwNCitvcGVyYXRlIG9uIHRoZSBjb250ZW50 cyBvZiB0aGUgcmVnaW9uLiAgT3RoZXJ3aXNlLCBvcGVyYXRlIGZyb20NCitwb2ludCB0byB0aGUg ZW5kIG9mICh0aGUgYWNjZXNzaWJsZSBwb3J0aW9uIG9mKSB0aGUgYnVmZmVyLg0KKw0KK0lmIGEg bWF0Y2ggaXMgc3BsaXQgYWNyb3NzIGxpbmVzLCBhbGwgdGhlIGxpbmVzIGl0IGxpZXMgaW4gYXJl DQorY29waWVkLg0KKw0KK1JldHVybiB0aGUgbnVtYmVyIG9mIGNvcGllZCBtYXRjaGluZyBsaW5l cy4gIFdoZW4gY2FsbGVkDQoraW50ZXJhY3RpdmVseSwgYWxzbyBwcmludCB0aGUgbnVtYmVyLiIN CisgIChpbnRlcmFjdGl2ZQ0KKyAgIChrZWVwLWxpbmVzLXJlYWQtYXJncyAiQ29weSBsaW5lcyBj b250YWluaW5nIG1hdGNoIGZvciByZWdleHAiKSkNCisgIChpZiByc3RhcnQNCisgICAgICAocHJv Z24NCisJKGdvdG8tY2hhciAobWluIHJzdGFydCByZW5kKSkNCisJKHNldHEgcmVuZCAoY29weS1t YXJrZXIgKG1heCByc3RhcnQgcmVuZCkpKSkNCisgICAgKGlmIChhbmQgaW50ZXJhY3RpdmUgKHVz ZS1yZWdpb24tcCkpDQorCShzZXRxIHJzdGFydCAocmVnaW9uLWJlZ2lubmluZykNCisJICAgICAg cmVuZCAoY29weS1tYXJrZXIgKHJlZ2lvbi1lbmQpKSkNCisgICAgICAoc2V0cSByc3RhcnQgKHBv aW50KQ0KKwkgICAgcmVuZCAocG9pbnQtbWF4LW1hcmtlcikpKQ0KKyAgICAoZ290by1jaGFyIHJz dGFydCkpDQorICAobGV0ICgoY291bnQgMCkNCisgICAgICAgIChjYXNlLWZvbGQtc2VhcmNoDQor CSAoaWYgKGFuZCBjYXNlLWZvbGQtc2VhcmNoIHNlYXJjaC11cHBlci1jYXNlKQ0KKwkgICAgIChp c2VhcmNoLW5vLXVwcGVyLWNhc2UtcCByZWdleHAgdCkNCisJICAgY2FzZS1mb2xkLXNlYXJjaCkp KQ0KKyAgICAoc2F2ZS1leGN1cnNpb24NCisgICAgICAod2hpbGUgKGFuZCAoPCAocG9pbnQpIHJl bmQpDQorCQkgIChyZS1zZWFyY2gtZm9yd2FyZCByZWdleHAgcmVuZCB0KSkNCisJKHVubGVzcyAo emVyb3AgY291bnQpDQorICAgICAgICAgIChzZXRxIGxhc3QtY29tbWFuZCAna2lsbC1yZWdpb24p KQ0KKwkoY29weS1yZWdpb24tYXMta2lsbCAoc2F2ZS1leGN1cnNpb24gKGdvdG8tY2hhciAobWF0 Y2gtYmVnaW5uaW5nIDApKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChmb3J3YXJkLWxpbmUgMCkNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAocG9pbnQpKQ0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHBy b2duIChmb3J3YXJkLWxpbmUgMSkgKHBvaW50KSkpDQorICAgICAgICAoc2V0cSBjb3VudCAoMSsg Y291bnQpKSkpDQorICAgIChzZXQtbWFya2VyIHJlbmQgbmlsKQ0KKyAgICAod2hlbiBpbnRlcmFj dGl2ZSAobWVzc2FnZSAobmdldHRleHQgIkNvcGllZCAlZCBtYXRjaGluZyBsaW5lIg0KKwkJCQkJ ICJDb3BpZWQgJWQgbWF0Y2hpbmcgbGluZXMiDQorCQkJCQkgY291bnQpDQorCQkJICAgICAgIGNv dW50KSkNCisgICAgY291bnQpKQ0KKw0KIChkZWZ1biBob3ctbWFueSAocmVnZXhwICZvcHRpb25h bCByc3RhcnQgcmVuZCBpbnRlcmFjdGl2ZSkNCiAgICJQcmludCBhbmQgcmV0dXJuIG51bWJlciBv ZiBtYXRjaGVzIGZvciBSRUdFWFAgZm9sbG93aW5nIHBvaW50Lg0KIFdoZW4gY2FsbGVkIGZyb20g TGlzcCBhbmQgSU5URVJBQ1RJVkUgaXMgb21pdHRlZCBvciBuaWwsIGp1c3QgcmV0dXJuDQotLSAN CjIuMjUuMQ0KDQo= --b1_miDFmeBFJviw9ritOdF25ILPL9LayFkvfq68uKiiU--