From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: Andrew Kensler Newsgroups: gmane.emacs.bugs Subject: bug#61028: 30.0.50; [PATCH] [FEATURE] Balanced fill mode Date: Mon, 13 Feb 2023 00:27:10 -0800 Message-ID: References: <9ec521a6-b324-3f09-7495-c55638b890f8@eastfarthing.com> <83mt69i7s7.fsf@gnu.org> Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------TWuQdg909FX6zFfWaIAMkuEw" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="16372"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.7.1 Cc: 61028@debbugs.gnu.org To: Eli Zaretskii Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Mon Feb 13 09:28:26 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 1pRUCH-00043P-87 for geb-bug-gnu-emacs@m.gmane-mx.org; Mon, 13 Feb 2023 09:28:25 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1pRUBw-0001mI-Q8; Mon, 13 Feb 2023 03:28: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 1pRUBv-0001lr-1M for bug-gnu-emacs@gnu.org; Mon, 13 Feb 2023 03:28:03 -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 1pRUBu-0000rW-Ij for bug-gnu-emacs@gnu.org; Mon, 13 Feb 2023 03:28:02 -0500 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1pRUBt-0007eW-Tj for bug-gnu-emacs@gnu.org; Mon, 13 Feb 2023 03:28:01 -0500 X-Loop: help-debbugs@gnu.org Resent-From: Andrew Kensler Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Mon, 13 Feb 2023 08:28:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 61028 X-GNU-PR-Package: emacs X-GNU-PR-Keywords: patch Original-Received: via spool by 61028-submit@debbugs.gnu.org id=B61028.167627683729358 (code B ref 61028); Mon, 13 Feb 2023 08:28:01 +0000 Original-Received: (at 61028) by debbugs.gnu.org; 13 Feb 2023 08:27:17 +0000 Original-Received: from localhost ([127.0.0.1]:47577 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1pRUB9-0007dO-PA for submit@debbugs.gnu.org; Mon, 13 Feb 2023 03:27:17 -0500 Original-Received: from smtp1.phpwebhosting.com ([184.154.71.7]:46463) by debbugs.gnu.org with smtp (Exim 4.84_2) (envelope-from ) id 1pRUB6-0007dD-CT for 61028@debbugs.gnu.org; Mon, 13 Feb 2023 03:27:14 -0500 Original-Received: (qmail 28121 invoked from network); 13 Feb 2023 08:27:15 -0000 Original-Received: from unknown (HELO [10.0.0.107]) (andrew@eastfarthing.com@76.121.228.80) by smtp1.phpwebhosting.com with (AES128-SHA encrypted) SMTP; Mon, 13 Feb 2023 03:27:15 -0500 Content-Language: en-US In-Reply-To: <83mt69i7s7.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-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Xref: news.gmane.io gmane.emacs.bugs:255469 Archived-At: This is a multi-part message in MIME format. --------------TWuQdg909FX6zFfWaIAMkuEw Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit A revised patch is attached.  Replies follow inline. On 1/23/23 7:34 AM, Eli Zaretskii wrote: > Thanks, I think this is a welcome feature. Please see a few comments > below. I will send you the form for copyright assignment off-list. Signed and sent. > I find this subsection too detailed and lengthy. I'm not sure we want > to describe all the customizable options that users can customize, > just the main ones. Assuming the default values are chosen well, > chances are that most users will not need to customize too many of > them, and therefore the manual doesn't have to describe them; we just > need to mention that several more options are available, and perhaps > have a special group for them for easier discoverability. WDYT? I have significantly trimmed this subsection of the manual. I agree about the special group.  The options related to balanced fill mode have now been collected in their own 'balanced-fill customization group, which is a child of the main 'fill group. (Note that the other existing options in fill.el are now explicitly placed in the 'fill group rather than relying on implicit ordering relative to the last group definition.)  This subsection of the manual now tells how to customize the 'balanced-fill group, rather than listing all of the options individually. I have also renamed several of the options to better imply their relation; the ones that directly contribute (or are an exponent on a value that contributes) to the total score being optimized now all end in -penalty, for example. > My other concern about the documentation is that it seems to describe > the feature in a way that is too technical and uses terminology from > the field of optimizations. I'm afraid that users without background > in optimizations will have difficulty understanding some of the > options. Can you try describing this in a less formal manner, so as > to make it easier to understand? I have tried to move the focus of the documentation for this feature away from the technical details of the implementation and more towards a description of the effects. > This example is too long. I suggest to find a shorter one. I think > an example with 3 lines should be enough to explain the feature. I have changed the manual subsection to use a much shorter example.  It is a bit longer than 3 lines, but that is because it uses a fill-width of 20.  However, this gave me room to put the examples with and without this feature side-by-side. > This should mention at least a few main options that control the > feature. In the NEWS announcement, I have added a reference to the new customization group. > Likewise here: this doc string is too abstract and thus hard to grok. > Talking about minimization of a cost function that penalizes something > only helps if one has some background in that domain. I'd instead try > to say something like "fills the entire paragraph avoiding too short > lines" or something similar. I have updated the doc string on the minor mode here, as well as the other doc strings to remove the mentions of minimizing a cost function.  In this case, I went with "When enabled, filling will try to optimally choose a set of line breaks to make a paragraph look tidier by considering the entire paragraph at a time.  This may place line breaks sooner than necessary if it improves later lines." > The first line of a doc string should be a single complete sentence > (here and elsewhere in the patch). This is important because the > various "apropos" commands show only the first line of the doc string. Good point!  This might be worth a reminder under the "Documenting your changes" section of the CONTRIBUTE guide where it mentions doc-strings. > These options are probably related, in that changing one needs a > suitable change in others to make sense. If this is indeed so, please > mention the relations in the doc strings. You say "Additional", but > that is meaningless when each doc string is read separately > (additional to what?) That's a fair point.  Each of the options now that contributes to the scoring now ends in -penalty and is a member of the 'balanced-fill customization group.  I have also updated the doc strings to mention that these values are about the prioritization of some aspect of the appearance of the paragraph relative to the other penalties.  Hopefully that is more clear now.  I have removed the "Additional" language. > If this is an internal function, please use our convention of naming > it with double dash, as in balanced-fill--break-lines. If this is > supposed to be a public function, it should have a doc string. I have renamed it to use the double dash.  I had originally been trying to match it to the existing code in fill.el, which doesn't seem use that convention.  But I also realize that that code may predate that convention and you wouldn't have wanted to rename it and risk breaking any user code relying on it.  No need for new code to be bound by that, though. > Last, but not least: what about performance? Is this performant > enough to apply to large enough paragraphs, including via > auto-fill-mode? Can you provide some measurements? That's a fair question.  That is why I had added the balanced-fill-word-limit option to restrict this to small to medium paragraphs.  But to test the performance, I have written a small benchmark (see attached) that creates temporary buffers with successively larger copies of the common "Lorem ipsum" paragraph, all on on line, and measures the time to fill it.  Here are timings that I got from it on my 10-year old machine at a few key sizes, with and without nativecomp: Without nativecomp:   For 69 words:     greedy fill   -- 0.000216s     balanced fill -- 0.001203s   For 483 words:     greedy fill   -- 0.001201s     balanced fill -- 0.023777s   For 2001 words:     greedy fill   -- 0.005144s     balanced fill -- 0.341215s With nativecomp:   For 69 words:     greedy fill   -- 0.000190s     balanced fill -- 0.000991s   For 483 words:     greedy fill   -- 0.001086s     balanced fill -- 0.021680s   For 2001 words:     greedy fill   -- 0.004645s     balanced fill -- 0.316352s Note that for this benchmark, I had raised the balanced-fill-word-limit option so that it would test the new balanced fill algorithm, even at larger sizes.  With its current default of the 500 word limit, the timings for the 2001 words tests when balanced fill mode was enabled were around ~0.5ms since it would fall back to the greedy fill algorithm.  Thus the maximum time with this minor mode enabled and the default word limit would be about ~2.5ms on this machine for a 500 word paragraph. Hopefully this new revision addresses your major critiques from before.  I'm happy to refine it further if you still have reservations or spot anything else. --------------TWuQdg909FX6zFfWaIAMkuEw Content-Type: text/x-patch; charset=UTF-8; name="0001-Add-new-minor-balanced-fill-mode-to-filling.patch" Content-Disposition: attachment; filename="0001-Add-new-minor-balanced-fill-mode-to-filling.patch" Content-Transfer-Encoding: base64 RnJvbSAwZWE5MTQ4MmQ1OTIzNDZjYzQ2MDUyYmYxMzM2Y2JjNmE1OTU0YjMxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXcgS2Vuc2xlciA8YW5kcmV3QGVhc3RmYXJ0 aGluZy5jb20+CkRhdGU6IEZyaSwgMjAgSmFuIDIwMjMgMTg6MTc6NDEgLTA4MDAKU3ViamVj dDogW1BBVENIXSBBZGQgbmV3IG1pbm9yIGBiYWxhbmNlZC1maWxsLW1vZGVgIHRvIGZpbGxp bmcKCldoZW4gZW5hYmxlZCwgZmlsbGluZyB3aWxsIGNvbnNpZGVyIHRoZSBlbnRpcmUgcGFy YWdyYXBoIGF0IGEgdGltZQphbmQgdHJ5IHRvIHBsYWNlIGxpbmUgYnJlYWtzIG9wdGltYWxs eSB0byBsb29rIG1vcmUgbmVhdCBhbmQgZXZlbiwKYWNjb3JkaW5nIHRvIGEgY29zdCBmdW5j dGlvbi4gIFRoaXMgaXMgaW5zcGlyZWQgYnkgdGhlIEtudXRoLVBsYXNzCmFsZ29yaXRobS4K CiogbGlzcC90ZXh0bW9kZXMvZmlsbC5lbAooYmFsYW5jZWQtZmlsbC1tb2RlKQooYmFsYW5j ZWQtZmlsbC13b3JkLWxpbWl0KQooYmFsYW5jZWQtZmlsbC1tYXJnaW4td2lkdGgpCihiYWxh bmNlZC1maWxsLXJ1bnQtd2lkdGgpCihiYWxhbmNlZC1maWxsLWxlbmd0aC1wZW5hbHR5KQoo YmFsYW5jZWQtZmlsbC1yYWdnZWRuZXNzLXBlbmFsdHkpCihiYWxhbmNlZC1maWxsLXNpbmds ZS1wZW5hbHR5KQooYmFsYW5jZWQtZmlsbC1icmVhay1wZW5hbHR5KTogTmV3IHZhcmlhYmxl cy4KKGJhbGFuY2VkLWZpbGwtbW9kZSk6IE5ldyBtaW5vciBtb2RlCihiYWxhbmNlZC1maWxs LS1icmVhay1saW5lcyk6IE5ldyBsaW5lIGJyZWFraW5nIGZ1bmN0aW9uLgooZmlsbC1yZWdp b24tYXMtcGFyYWdyYXBoKTogVXNlIGl0IHRvIGZpbGwgcGFyYWdyYXBocy4KCiogdGVzdC9s aXNwL3RleHRtb2Rlcy9maWxsLXRlc3RzLmVsOiBBZGQgc21va2UgdGVzdCBmb3IgaXQuCgoq IGRvYy9lbWFjcy9lbWFjcy50ZXhpIChUb3ApOgoqIGRvYy9lbWFjcy90ZXh0LnRleGkgKEZp bGxpbmcgVGV4dCk6IERvY3VtZW50IGl0LgoKKiBldGMvTkVXUzogQW5ub3VuY2UgaXQuCi0t LQogZG9jL2VtYWNzL2VtYWNzLnRleGkgICAgICAgICAgICAgIHwgICAxICsKIGRvYy9lbWFj cy90ZXh0LnRleGkgICAgICAgICAgICAgICB8ICA0NyArKysrKysKIGV0Yy9ORVdTICAgICAg ICAgICAgICAgICAgICAgICAgICB8ICAgNyArCiBsaXNwL3RleHRtb2Rlcy9maWxsLmVsICAg ICAgICAgICAgfCAyNDkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCiB0ZXN0L2xp c3AvdGV4dG1vZGVzL2ZpbGwtdGVzdHMuZWwgfCAgMjEgKysrCiA1IGZpbGVzIGNoYW5nZWQs IDMxNCBpbnNlcnRpb25zKCspLCAxMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mv ZW1hY3MvZW1hY3MudGV4aSBiL2RvYy9lbWFjcy9lbWFjcy50ZXhpCmluZGV4IDcwNzFlYTQ0 ZWRkLi4xZWFjNzY4ODJlMSAxMDA2NDQKLS0tIGEvZG9jL2VtYWNzL2VtYWNzLnRleGkKKysr IGIvZG9jL2VtYWNzL2VtYWNzLnRleGkKQEAgLTYyMCw2ICs2MjAsNyBAQCBUb3AKICogRmls bCBQcmVmaXg6OiAgICAgICAgIEZpbGxpbmcgcGFyYWdyYXBocyB0aGF0IGFyZSBpbmRlbnRl ZAogICAgICAgICAgICAgICAgICAgICAgICAgICBvciBpbiBhIGNvbW1lbnQsIGV0Yy4KICog QWRhcHRpdmUgRmlsbDo6ICAgICAgIEhvdyBFbWFjcyBjYW4gZGV0ZXJtaW5lIHRoZSBmaWxs IHByZWZpeCBhdXRvbWF0aWNhbGx5LgorKiBCYWxhbmNlZCBGaWxsOjogICAgICAgQnJlYWtp bmcgbGluZXMgdG8gbG9vayBtb3JlIGV2ZW4gYW5kIG5lYXQuCiAKIE91dGxpbmUgTW9kZQog CmRpZmYgLS1naXQgYS9kb2MvZW1hY3MvdGV4dC50ZXhpIGIvZG9jL2VtYWNzL3RleHQudGV4 aQppbmRleCAxOGYyMjc0Y2ZhNi4uOGM5ZDg4ZDJjYzMgMTAwNjQ0Ci0tLSBhL2RvYy9lbWFj cy90ZXh0LnRleGkKKysrIGIvZG9jL2VtYWNzL3RleHQudGV4aQpAQCAtNDk3LDYgKzQ5Nyw3 IEBAIEZpbGxpbmcKICogRmlsbCBDb21tYW5kczo6ICBDb21tYW5kcyB0byByZWZpbGwgcGFy YWdyYXBocyBhbmQgY2VudGVyIGxpbmVzLgogKiBGaWxsIFByZWZpeDo6ICAgIEZpbGxpbmcg cGFyYWdyYXBocyB0aGF0IGFyZSBpbmRlbnRlZCBvciBpbiBhIGNvbW1lbnQsIGV0Yy4KICog QWRhcHRpdmUgRmlsbDo6ICBIb3cgRW1hY3MgY2FuIGRldGVybWluZSB0aGUgZmlsbCBwcmVm aXggYXV0b21hdGljYWxseS4KKyogQmFsYW5jZWQgRmlsbDo6ICBCcmVha2luZyBsaW5lcyB0 byBsb29rIG1vcmUgZXZlbiBhbmQgbmVhdC4KIEBlbmQgbWVudQogCiBAbm9kZSBBdXRvIEZp bGwKQEAgLTgyOCw2ICs4MjksNTIgQEAgQWRhcHRpdmUgRmlsbAogbGluZS4gIElmIGl0IHJl dHVybnMgQGNvZGV7bmlsfSwgQGNvZGV7YWRhcHRpdmUtZmlsbC1yZWdleHB9IGdldHMKIGEg Y2hhbmNlIHRvIGZpbmQgYSBwcmVmaXguCiAKK0Bub2RlIEJhbGFuY2VkIEZpbGwKK0BzdWJz ZWN0aW9uIEJhbGFuY2VkIEZpbGxpbmcKKworQGNpbmRleCBiYWxhbmNlZCBmaWxsaW5nCisg IEZpbGxpbmcgY2FuIGNvbnNpZGVyIGFuIGVudGlyZSBwYXJhZ3JhcGggYXQgYSB0aW1lIHdo ZW4gZGV0ZXJtaW5pbmcKK3doZXJlIHRvIHBsYWNlIGxpbmUgYnJlYWtzLCBhcyBhbiBhbHRl cm5hdGl2ZSB0byBqdXN0IGdyZWVkaWx5CitpbnNlcnRpbmcgYSBicmVhayBhZnRlciB0aGUg bGFzdCB3b3JkIHRoYXQgZml0cyBvbiBlYWNoIGxpbmUuCitUaGlzIG1heSBwbGFjZSBsaW5l IGJyZWFrcyBzb29uZXIgdGhhbiBzdHJpY3RseSBuZWNlc3NhcnkgaWYgaXQKK3dpbGwgaGVs cCB0byBiYWxhbmNlIG91dCB0aGUgbGVuZ3RocyBvZiBsYXRlciBsaW5lcy4KKworICBGb3Ig ZXhhbXBsZSwgd2hlbiBAY29kZXtmaWxsLWNvbHVtbn0gaXMgMjAsIGNvbXBhcmUgdGhlIHJl c3VsdHMKK29mIGxpbmUgYnJlYWtpbmcgdXNpbmcgdGhlIGdyZWVkeSBmaWxsIGFsZ29yaXRo bSAobGVmdCkgdmVyc3VzIHRoZQorYmFsYW5jZWQgZmlsbCBhbGdvcml0aG0gKHJpZ2h0KToK KworQHNtYWxsZXhhbXBsZQorLS0tLS0tIGdyZWVkeSAtLS0tLS0gICAgLS0tLS0gYmFsYW5j ZWQgLS0tLS0KK0hhcmQgYW5kIHNoYXJwIGFzICAgICAgIEhhcmQgYW5kIHNoYXJwIGFzCitm bGludCwgZnJvbSB3aGljaCBubyAgICBmbGludCwgZnJvbSB3aGljaAorc3RlZWwgaGFkIGV2 ZXIgICAgICAgICAgbm8gc3RlZWwgaGFkIGV2ZXIKK3N0cnVjayBvdXQgZ2VuZXJvdXMgICAg IHN0cnVjayBvdXQgZ2VuZXJvdXMKK2ZpcmU7IHNlY3JldCwgYW5kICAgICAgIGZpcmU7IHNl Y3JldCwgYW5kCitzZWxmLWNvbnRhaW5lZCwgYW5kICAgICBzZWxmLWNvbnRhaW5lZCwKK3Nv bGl0YXJ5IGFzIGFuICAgICAgICAgIGFuZCBzb2xpdGFyeSBhcworb3lzdGVyLiAgICAgICAg ICAgICAgICAgYW4gb3lzdGVyLgorLS0tLS0tIGdyZWVkeSAtLS0tLS0gICAgLS0tLS0gYmFs YW5jZWQgLS0tLS0KK0BlbmQgc21hbGxleGFtcGxlCisKKyAgVGhlIGJhbGFuY2VkIGZpbGwg YWxnb3JpdGhtIHByb2R1Y2VzIHNsaWdodGx5IHNob3J0ZXIgYnV0IG1vcmUgZXZlbgorbGlu ZSBsZW5ndGhzLCByZXN1bHRpbmcgaW4gYSBsZXNzIHJhZ2dlZCByaWdodCBtYXJnaW4uICBJ dCBhbHNvIGF2b2lkcworbGVhdmluZyBhIHNpbmdsZSB3b3JkIGFsb25lIG9uIHRoZSBsYXN0 IGxpbmUuCisKK0BmaW5kZXggYmFsYW5jZWQtZmlsbC1tb2RlCitAdmluZGV4IGJhbGFuY2Vk LWZpbGwtbW9kZQorQHZpbmRleCBiYWxhbmNlZC1maWxsLXdvcmQtbGltaXQKKyAgWW91IG1h eSBlbmFibGUgdGhlIGJhbGFuY2VkIGZpbGwgYWxnb3JpdGhtIHdpdGggQmFsYW5jZWQgRmls bCBtb2RlLAord2hpY2ggaXMgZGlzYWJsZWQgYnkgZGVmYXVsdC4gIFRvIHRvZ2dsZSBpdCBn bG9iYWxseSwgdHlwZSBAa2Jke00teAorYmFsYW5jZWQtZmlsbC1tb2RlfS4gIE5vdGUgdGhh dCBldmVuIHdoZW4gaXQgaXMgZW5hYmxlZCwgcGFyYWdyYXBocword2l0aCBtb3JlIHRoYW4g QGNvZGV7YmFsYW5jZWQtZmlsbC13b3JkLWxpbWl0fSB3b3JkcyB3aWxsIGZhbGwgYmFjawor dG8gdGhlIGZhc3RlciBncmVlZHkgZmlsbGluZyBhbGdvcml0aG0gZm9yIHNwZWVkLgorCisg IFRvIGRlY2lkZSB3aGVyZSB0byBwbGFjZSBsaW5lIGJyZWFrcywgdGhlIGJhbGFuY2VkIGZp bGwgYWxnb3JpdGhtCitzdW1zIHVwIGEgc2V0IG9mIHBlbmFsdGllcyB0byBjb21wdXRlIGEg c2NvcmUgZm9yIGhvdyBwb29yIHRoZSBsYXlvdXQKK29mIGEgcGFyYWdyYXBoIGlzIGFuZCB0 aGVuIGNob29zZXMgdGhlIHBsYWNlbWVudCB3aXRoIHRoZSBsb3dlc3QKK3Njb3JlLiAgVHlw ZSBAY29kZXtNLXggY3VzdG9taXplLWdyb3VwIFJFVCBiYWxhbmNlZC1maWxsIFJFVH0gdG8K K3NlZSBvcHRpb25zIGZvciBmaW5lLXR1bmluZyB0aGUgc2NvcmluZyBwZW5hbHRpZXMgdG8g dGFzdGUuCisKIEBub2RlIENhc2UKIEBzZWN0aW9uIENhc2UgQ29udmVyc2lvbiBDb21tYW5k cwogQGNpbmRleCBjYXNlIGNvbnZlcnNpb24KZGlmZiAtLWdpdCBhL2V0Yy9ORVdTIGIvZXRj L05FV1MKaW5kZXggZDNlYWZhYWRmMTkuLjE1YWZlZGRlOGUxIDEwMDY0NAotLS0gYS9ldGMv TkVXUworKysgYi9ldGMvTkVXUwpAQCAtNTksNiArNTksMTMgQEAgVGhpcyBhbGxvd3MgdGhl IHVzZXIgdG8gY3VzdG9taXplIHRoZSBwcm9tcHQgdGhhdCBpcyBhcHBlbmRlZCBieQogDAog KiBFZGl0aW5nIENoYW5nZXMgaW4gRW1hY3MgMzAuMQogCisqKiBGaWxsaW5nIGNhbiBub3cg dHJ5IHRvIGJyZWFrIGxpbmVzIGV2ZW5seS4KK1RoZSBuZXcgJ2JhbGFuY2VkLWZpbGwtbW9k ZScgbWlub3IgbW9kZSBjYW4gYmUgZW5hYmxlZCB0byBtYWtlIGZpbGxpbmcKK3RyeSB0byBv cHRpbWFsbHkgY2hvb3NlIGEgc2V0IG9mIGxpbmUgYnJlYWtzIHRvIG1ha2UgYSBwYXJhZ3Jh cGgKK2xvb2sgdGlkaWVyIGJ5IGNvbnNpZGVyaW5nIHRoZSBlbnRpcmUgcGFyYWdyYXBoIGF0 IGEgdGltZS4gIFRoaXMgaXMKK2luc3BpcmVkIGJ5IHRoZSBLbnV0aC1QbGFzcyBhbGdvcml0 aG0uICBTZWUgdGhlIGN1c3RvbWl6YXRpb24gZ3JvdXAKKydiYWxhbmNlZC1maWxsJyBmb3Ig b3B0aW9ucyBmb3IgZmluZS10dW5pbmcgdG8gdGFzdGUuCisKIC0tLQogKiogT24gWCwgRW1h Y3Mgbm93IHN1cHBvcnRzIGlucHV0IG1ldGhvZHMgd2hpY2ggcGVyZm9ybSAic3RyaW5nIGNv bnZlcnNpb24iLgogVGhpcyBtZWFucyBhbiBpbnB1dCBtZXRob2QgY2FuIG5vdyBhc2sgRW1h Y3MgdG8gZGVsZXRlIHRleHQKZGlmZiAtLWdpdCBhL2xpc3AvdGV4dG1vZGVzL2ZpbGwuZWwg Yi9saXNwL3RleHRtb2Rlcy9maWxsLmVsCmluZGV4IDJmZGUyZmY2YzRkLi5hNzk0OTY1MmRk MyAxMDA2NDQKLS0tIGEvbGlzcC90ZXh0bW9kZXMvZmlsbC5lbAorKysgYi9saXNwL3RleHRt b2Rlcy9maWxsLmVsCkBAIC00MiwxMiArNDIsMTQgQEAgZmlsbC1pbmRpdmlkdWFsLXZhcnlp bmctaW5kZW50CiBUaGF0IG1vZGUgY2FuIGhhbmRsZSBwYXJhZ3JhcGhzIHdpdGggZXh0cmEg aW5kZW50YXRpb24gb24gdGhlIGZpcnN0IGxpbmUsCiBidXQgaXQgcmVxdWlyZXMgc2VwYXJh dG9yIGxpbmVzIGJldHdlZW4gcGFyYWdyYXBocy4KIEEgdmFsdWUgb2YgbmlsIG1lYW5zIHRo YXQgYW55IGNoYW5nZSBpbiBpbmRlbnRhdGlvbiBzdGFydHMgYSBuZXcgcGFyYWdyYXBoLiIK LSAgOnR5cGUgJ2Jvb2xlYW4pCisgIDp0eXBlICdib29sZWFuCisgIDpncm91cCAnZmlsbCkK IAogKGRlZmN1c3RvbSBjb2xvbi1kb3VibGUtc3BhY2UgbmlsCiAgICJOb24tbmlsIG1lYW5z IHB1dCB0d28gc3BhY2VzIGFmdGVyIGEgY29sb24gd2hlbiBmaWxsaW5nLiIKICAgOnR5cGUg J2Jvb2xlYW4KLSAgOnNhZmUgIydib29sZWFucCkKKyAgOnNhZmUgIydib29sZWFucAorICA6 Z3JvdXAgJ2ZpbGwpCiAKIChkZWZjdXN0b20gZmlsbC1zZXBhcmF0ZS1oZXRlcm9nZW5lb3Vz LXdvcmRzLXdpdGgtc3BhY2UgbmlsCiAgICJOb24tbmlsIG1lYW5zIHRvIHVzZSBhIHNwYWNl IHRvIHNlcGFyYXRlIHdvcmRzIG9mIGEgZGlmZmVyZW50IGtpbmQuCkBAIC01OCw3ICs2MCw4 IEBAIGZpbGwtc2VwYXJhdGUtaGV0ZXJvZ2VuZW91cy13b3Jkcy13aXRoLXNwYWNlCiBpbiBg ZmlsbC1ub3NwYWNlLWJldHdlZW4td29yZHMtdGFibGUnIGZvciB0aGUgY2hhcmFjdGVycyBi ZWZvcmUgYW5kCiBhZnRlciB0aGUgbmV3bGluZS4iCiAgIDp0eXBlICdib29sZWFuCi0gIDp2 ZXJzaW9uICIyNi4xIikKKyAgOnZlcnNpb24gIjI2LjEiCisgIDpncm91cCAnZmlsbCkKIAog KGRlZnZhciBmaWxsLXBhcmFncmFwaC1mdW5jdGlvbiBuaWwKICAgIk1vZGUtc3BlY2lmaWMg ZnVuY3Rpb24gdG8gZmlsbCBhIHBhcmFncmFwaCwgb3IgbmlsIGlmIHRoZXJlIGlzIG5vbmUu CkBAIC03Niw3ICs3OSw4IEBAIGVuYWJsZS1raW5zb2t1CiBLaW5zb2t1IHByb2Nlc3Npbmcg aXMgZGVzaWduZWQgdG8gcHJldmVudCBjZXJ0YWluIGNoYXJhY3RlcnMgZnJvbSBiZWluZwog cGxhY2VkIGF0IHRoZSBiZWdpbm5pbmcgb3IgZW5kIG9mIGEgbGluZSBieSBmaWxsaW5nLgog U2VlIHRoZSBkb2N1bWVudGF0aW9uIG9mIGBraW5zb2t1JyBmb3IgbW9yZSBpbmZvcm1hdGlv bi4iCi0gIDp0eXBlICdib29sZWFuKQorICA6dHlwZSAnYm9vbGVhbgorICA6Z3JvdXAgJ2Zp bGwpCiAKIChkZWZ1biBzZXQtZmlsbC1wcmVmaXggKCkKICAgIlNldCB0aGUgZmlsbCBwcmVm aXggdG8gdGhlIGN1cnJlbnQgbGluZSB1cCB0byBwb2ludC4KQEAgLTk2LDcgKzEwMCw4IEBA IHNldC1maWxsLXByZWZpeAogCiAoZGVmY3VzdG9tIGFkYXB0aXZlLWZpbGwtbW9kZSB0CiAg ICJOb24tbmlsIG1lYW5zIGRldGVybWluZSBhIHBhcmFncmFwaCdzIGZpbGwgcHJlZml4IGZy b20gaXRzIHRleHQuIgotICA6dHlwZSAnYm9vbGVhbikKKyAgOnR5cGUgJ2Jvb2xlYW4KKyAg Omdyb3VwICdmaWxsKQogCiAoZGVmY3VzdG9tIGFkYXB0aXZlLWZpbGwtcmVnZXhwCiAgIDs7 IEFkZGVkIGAhJyBmb3IgZG94eWdlbiBjb21tZW50cyBzdGFydGluZyB3aXRoIGAvLyEnIG9y IGAvKiEnLgpAQCAtMTEyLDcgKzExNyw4IEBAIGFkYXB0aXZlLWZpbGwtcmVnZXhwCiBJZiB0 aGUgcGFyYWdyYXBoIGhhcyBqdXN0IG9uZSBsaW5lLCB0aGUgaW5kZW50YXRpb24gaXMgdGFr ZW4gZnJvbSB0aGF0CiBsaW5lLCBidXQgaW4gdGhhdCBjYXNlIGBhZGFwdGl2ZS1maWxsLWZp cnN0LWxpbmUtcmVnZXhwJyBhbHNvIHBsYXlzCiBhIHJvbGUuIgotICA6dHlwZSAncmVnZXhw KQorICA6dHlwZSAncmVnZXhwCisgIDpncm91cCAnZmlsbCkKIAogKGRlZmN1c3RvbSBhZGFw dGl2ZS1maWxsLWZpcnN0LWxpbmUtcmVnZXhwIChwdXJlY29weSAiXFxgWyBcdF0qXFwnIikK ICAgIlJlZ2V4cCBzcGVjaWZ5aW5nIHdoZXRoZXIgdG8gc2V0IGZpbGwgcHJlZml4IGZyb20g YSBvbmUtbGluZSBwYXJhZ3JhcGguCkBAIC0xMjQsMTMgKzEzMCw5NSBAQCBhZGFwdGl2ZS1m aWxsLWZpcnN0LWxpbmUtcmVnZXhwCiAKIEhvd2V2ZXIsIHdlIG5ldmVyIHVzZSBhIHByZWZp eCBmcm9tIGEgb25lLWxpbmUgcGFyYWdyYXBoCiBpZiBpdCB3b3VsZCBhY3QgYXMgYSBwYXJh Z3JhcGgtc3RhcnRlciBvbiB0aGUgc2Vjb25kIGxpbmUuIgotICA6dHlwZSAncmVnZXhwKQor ICA6dHlwZSAncmVnZXhwCisgIDpncm91cCAnZmlsbCkKIAogKGRlZmN1c3RvbSBhZGFwdGl2 ZS1maWxsLWZ1bmN0aW9uICMnaWdub3JlCiAgICJGdW5jdGlvbiB0byBjYWxsIHRvIGNob29z ZSBhIGZpbGwgcHJlZml4IGZvciBhIHBhcmFncmFwaC4KIEEgbmlsIHJldHVybiB2YWx1ZSBt ZWFucyB0aGUgZnVuY3Rpb24gaGFzIG5vdCBkZXRlcm1pbmVkIHRoZSBmaWxsIHByZWZpeC4i CiAgIDp2ZXJzaW9uICIyNy4xIgotICA6dHlwZSAnZnVuY3Rpb24pCisgIDp0eXBlICdmdW5j dGlvbgorICA6Z3JvdXAgJ2ZpbGwpCisKKyhkZWZncm91cCBiYWxhbmNlZC1maWxsIG5pbAor ICAiQnJlYWtpbmcgbGluZXMgdG8gbG9vayBtb3JlIGV2ZW4gYW5kIG5lYXQuIgorICA6bGlu ayAnKGN1c3RvbS1tYW51YWwgIihlbWFjcykgQmFsYW5jZWQgRmlsbCIpCisgIDpncm91cCAn ZmlsbCkKKworKGRlZmluZS1taW5vci1tb2RlIGJhbGFuY2VkLWZpbGwtbW9kZQorICAiVG9n Z2xlIHdoZXRoZXIgZmlsbGluZyBzaG91bGQgdHJ5IHRvIG5lYXRseSBiYWxhbmNlIGxpbmUg bGVuZ3Rocy4KKworV2hlbiBlbmFibGVkLCBmaWxsaW5nIHdpbGwgdHJ5IHRvIG9wdGltYWxs eSBjaG9vc2UgYSBzZXQgb2YgbGluZQorYnJlYWtzIHRvIG1ha2UgYSBwYXJhZ3JhcGggbG9v ayB0aWRpZXIgYnkgY29uc2lkZXJpbmcgdGhlIGVudGlyZQorcGFyYWdyYXBoIGF0IGEgdGlt ZS4gIFRoaXMgbWF5IHBsYWNlIGxpbmUgYnJlYWtzIHNvb25lciB0aGFuCituZWNlc3Nhcnkg aWYgaXQgaW1wcm92ZXMgbGF0ZXIgbGluZXMuICBXaGVuIGRpc2FibGVkLCBmaWxsaW5nCit1 c2VzIHRoZSB0cmFkaXRpb25hbCBncmVlZHkgbGluZSBicmVha2luZyBhbGdvcml0aG0uCisK K1NlZSBJbmZvIG5vZGUgYChlbWFjcykgQmFsYW5jZWQgRmlsbCcgZm9yIG1vcmUgZGV0YWls cy4iCisgIDpnbG9iYWwgdAorICA6dmVyc2lvbiAiMzAuMSIKKyAgOnR5cGUgJ2Jvb2xlYW4K KyAgOmdyb3VwICdiYWxhbmNlZC1maWxsKQorCisoZGVmY3VzdG9tIGJhbGFuY2VkLWZpbGwt d29yZC1saW1pdCA1MDAKKyAgIkxhcmdlc3QgcGFyYWdyYXBoLCBpbiB3b3JkcywgdG8gYXBw bHkgYmFsYW5jZWQgZmlsbGluZyB0by4KK0lmIHRoZSBwYXJhZ3JhcGggZXhjZWVkcyB0aGlz IGxpbWl0LCBiYWxhbmNlZCBmaWxsaW5nIHdpbGwgZmFsbAorYmFjayB0byB0aGUgc3RhbmRh cmQgZ3JlZWR5IGZpbGxpbmcgdG8ga2VlcCBmaWxsaW5nIHF1aWNrLiIKKyAgOnZlcnNpb24g IjMwLjEiCisgIDp0eXBlICdpbnRlZ2VyCisgIDpncm91cCAnYmFsYW5jZWQtZmlsbCkKKwor KGRlZmN1c3RvbSBiYWxhbmNlZC1maWxsLW1hcmdpbi13aWR0aCAzCisgICJFeHRyYSBtYXJn aW4sIGluIGNvbHVtbnMsIGZvciBiYWxhbmNlZCBmaWxsaW5nIHRvIHRyeSB0byBicmVhayBs aW5lcyBhdC4KK1RhcmdldHRpbmcgYSBsaW5lIGxlbmd0aCBzbGlnaHRseSBzaG9ydCBvZiB0 aGUgYGZpbGwtY29sdW1uJyBidXQKK2JlaW5nIGFsbG93ZWQgdG8gZ28gYWxsIHRoZSB3YXkg dXAgdG8gdGhlIGBmaWxsLWNvbHVtbicgY2FuIGhlbHAKK2JhbGFuY2VkIGZpbGxpbmcgdG8g bWFrZSB0aGUgbGluZXMgbW9yZSBldmVuIGluIGxlbmd0aC4iCisgIDp2ZXJzaW9uICIzMC4x IgorICA6dHlwZSAnaW50ZWdlcgorICA6Z3JvdXAgJ2JhbGFuY2VkLWZpbGwpCisKKyhkZWZj dXN0b20gYmFsYW5jZWQtZmlsbC1ydW50LXdpZHRoIDEwCisgICJNaW5pbXVtIHdpZHRoLCBp biBjb2x1bW5zLCBhbGxvd2VkIGZvciB0aGUgbGFzdCBsaW5lcyBvZiBwYXJhZ3JhcGhzLgor SWYgdGhpcyBpcyBzZXQgdG8gYSBoaWdoIG51bWJlciwgdGhlbiB0aGUgYmFsYW5jZWQgZmls bGluZyB3aWxsCit0cnkgdG8gbWFrZSB0aGUgbGFzdCBsaW5lcyBhcyBmdWxsIGFzIGFsbCB0 aGUgb3RoZXJzLiIKKyAgOnZlcnNpb24gIjMwLjEiCisgIDp0eXBlICdpbnRlZ2VyCisgIDpn cm91cCAnYmFsYW5jZWQtZmlsbCkKKworKGRlZmN1c3RvbSBiYWxhbmNlZC1maWxsLWxlbmd0 aC1wZW5hbHR5IDMKKyAgIk1haW4gdHVuaW5nIG9wdGlvbiBmb3IgdGhlIGJhbGFuY2VkIGZp bGwgYWxnb3JpdGhtLgorSGlnaGVyIHZhbHVlcyBjYXVzZSBiYWxhbmNlZCBmaWxsaW5nIHRv IHByaW9yaXRpemUgKHJlbGF0aXZlCit0byBvdGhlciBwZW5hbHRpZXMpIG1ha2luZyBlYWNo IGxpbmUgZXhhY3RseSBtYXRjaCB0aGUgdGFyZ2V0CitsZW5ndGguICBUeXBpY2FsbHkgdGhp cyBpcyBzZXQgYmV0d2VlbiAyIGFuZCAzLiIKKzp2ZXJzaW9uICIzMC4xIgorICA6dHlwZSAn aW50ZWdlcgorICA6Z3JvdXAgJ2JhbGFuY2VkLWZpbGwpCisKKyhkZWZjdXN0b20gYmFsYW5j ZWQtZmlsbC1yYWdnZWRuZXNzLXBlbmFsdHkgNDAKKyAgIlBlbmFsdHkgYWRkZWQgZm9yIGRp ZmZlcmVuY2UgaW4gbGVuZ3RoIGJldHdlZW4gYWRqYWNlbnQgbGluZXMuCitIaWdoZXIgdmFs dWVzIG1ha2UgYmFsYW5jZWQgZmlsbGluZyBwcmlvcml0aXplIChyZWxhdGl2ZSB0bworb3Ro ZXIgcGVuYWx0aWVzKSByZWR1Y2luZyByYWdnZWRuZXNzIGFuZCBrZWVwaW5nIGFsbCBsaW5l cyBhcworZXZlbiBhcyBwb3NzaWJsZSBpbiBsZW5ndGguIgorICA6dmVyc2lvbiAiMzAuMSIK KyAgOnR5cGUgJ2ludGVnZXIKKyAgOmdyb3VwICdiYWxhbmNlZC1maWxsKQorCisoZGVmY3Vz dG9tIGJhbGFuY2VkLWZpbGwtc2luZ2xlLXBlbmFsdHkgMTUwCisgICJQZW5hbHR5IGFkZGVk IGZvciBsZWF2aW5nIGEgd29yZCBvZiBhIHNlbnRlbmNlIGFsb25lIG9uIGEgbGluZS4KK0hp Z2hlciB2YWx1ZXMgbWFrZSBiYWxhbmNlZCBmaWxsaW5nIHByaW9yaXRpemUgKHJlbGF0aXZl IHRvCitvdGhlciBwZW5hbHRpZXMpIGF2b2lkaW5nIGxpbmUgYnJlYWtzIHJpZ2h0IGFmdGVy IHRoZSBmaXJzdAord29yZCBvZiBhIHNlbnRlbmNlIG9yIGJlZm9yZSB0aGUgbGFzdCB3b3Jk IG9mIGEgc2VudGVuY2UuIgorICA6dmVyc2lvbiAiMzAuMSIKKyAgOnR5cGUgJ2ludGVnZXIK KyAgOmdyb3VwICdiYWxhbmNlZC1maWxsKQorCisoZGVmY3VzdG9tIGJhbGFuY2VkLWZpbGwt YnJlYWstcGVuYWx0eSA1MAorICAiUGVuYWx0eSBhZGRlZCBmb3IgZWFjaCBsaW5lIGJyZWFr IGluc2VydGVkLgorSGlnaGVyIHZhbHVlcyBtYWtlIGJhbGFuY2VkIGZpbGxpbmcgcHJpb3Jp dGl6ZSAocmVsYXRpdmUgdG8gb3RoZXIKK3BlbmFsdGllcykgbWFraW5nIGEgcGFyYWdyYXBo IGZpdCBpbiBhcyBmZXcgbGluZXMgYXMgcG9zc2libGUuIgorICA6dmVyc2lvbiAiMzAuMSIK KyAgOnR5cGUgJ2ludGVnZXIKKyAgOmdyb3VwICdiYWxhbmNlZC1maWxsKQogCiAoZGVmdmFy IGZpbGwtaW5kZW50LWFjY29yZGluZy10by1tb2RlIG5pbCA7U2NyZXdzIHVwIENDLW1vZGUn cyBmaWxsaW5nIHRyaWNrcy4KICAgIldoZXRoZXIgb3Igbm90IGZpbGxpbmcgc2hvdWxkIHRy eSB0byB1c2UgdGhlIG1ham9yIG1vZGUncyBpbmRlbnRhdGlvbi4iKQpAQCAtMzc0LDExICs0 NjIsMTMgQEAgZmlsbC1ub2JyZWFrLXByZWRpY2F0ZQogdGhlIGxpbmUgdGhlcmUuIgogICA6 dHlwZSAnaG9vawogICA6b3B0aW9ucyAnKGZpbGwtZnJlbmNoLW5vYnJlYWstcCBmaWxsLXNp bmdsZS13b3JkLW5vYnJlYWstcAotICAgICAgICAgICAgIGZpbGwtc2luZ2xlLWNoYXItbm9i cmVhay1wKSkKKyAgICAgICAgICAgICBmaWxsLXNpbmdsZS1jaGFyLW5vYnJlYWstcCkKKyAg Omdyb3VwICdmaWxsKQogCiAoZGVmY3VzdG9tIGZpbGwtbm9icmVhay1pbnZpc2libGUgbmls CiAgICJOb24tbmlsIG1lYW5zIHRoYXQgZmlsbCBjb21tYW5kcyBkbyBub3QgYnJlYWsgbGlu ZXMgaW4gaW52aXNpYmxlIHRleHQuIgotICA6dHlwZSAnYm9vbGVhbikKKyAgOnR5cGUgJ2Jv b2xlYW4KKyAgOmdyb3VwICdmaWxsKQogCiAoZGVmdW4gZmlsbC1ub2JyZWFrLXAgKCkKICAg IlJldHVybiBuaWwgaWYgYnJlYWtpbmcgdGhlIGxpbmUgYXQgcG9pbnQgaXMgYWxsb3dlZC4K QEAgLTY0NCw2ICs3MzQsMTM3IEBAIGZpbGwtaW5kZW50LXRvLWxlZnQtbWFyZ2luCiAgICAg KGluZGVudC1saW5lLXRvIChjdXJyZW50LWxlZnQtbWFyZ2luKSkKICAgICAocHV0LXRleHQt cHJvcGVydHkgYmVnIChwb2ludCkgJ2ZhY2UgJ2RlZmF1bHQpKSkKIAorKGRlZnVuIGJhbGFu Y2VkLWZpbGwtLWJyZWFrLWxpbmVzIChmcm9tIHRvIGp1c3RpZnkpCisgIDs7IChMaW5lIGJy ZWFraW5nIGltcGxlbWVudGF0aW9uIGluc3BpcmVkIGJ5IEtudXRoLVBsYXNzLikKKworICA7 OyBBYm9ydCAoYW5kIGZhbGwgYmFjayB0byBncmVlZHkgYWxnb3JpdGhtKSBpZiB3ZSBoYXZl IHRvbyBtYW55IHdvcmRzLgorICA7OyBUaGUgYWxnb3JpdGhtIGJlbG93IGlzIHdvcnN0LWNh c2UgcXVhZHJhdGljICh0aG91Z2ggdXN1YWxseSBub3QpLgorICA7OyBBc3ltcHRvdGljYWxs eSBmYXN0ZXIgYWxnb3JpdGhtcyBleGlzdCwgYnV0IGFyZSBtb3JlIGNvbXBsaWNhdGVkLgor ICAoaWYgKD4gKGNvdW50LXdvcmRzLXJlZ2lvbiBmcm9tIHRvKSBiYWxhbmNlZC1maWxsLXdv cmQtbGltaXQpCisgICAgICBuaWwKKworICAgIDs7IEJ1aWxkIGEgdGFibGUgb2YgdmlzaWJs ZSB3b3JkIHdpZHRocywgd2l0aCBhbmQgd2l0aG91dCBhbnkgcHJlY2VkaW5nCisgICAgOzsg c3BhY2VzLCBhbG9uZyB3aXRoIHdoZXRoZXIgdGhlIHdvcmQgc3RhcnRzIGEgbmV3IHNlbnRl bmNlLiAgV2UgZ28gYnkKKyAgICA7OyBjb2x1bW5zIGFuZCBub3QgY2hhcnMgdG8gaGFuZGxl IGludmlzaWJsZSB0ZXh0IChlc3BlY2lhbGx5IGludmlzaWJsZQorICAgIDs7IHNwYWNlcyks IGV0Yy4KKyAgICAobGV0ICgod29yZHMgJygpKQorICAgICAgICAgIChjb3VudCAwKQorICAg ICAgICAgIChzZW50ZW5jZS1yZWdleHAgKHNlbnRlbmNlLWVuZCkpKQorICAgICAgKGdvdG8t Y2hhciB0bykKKyAgICAgICh3aGlsZSAoPiAocG9pbnQpIGZyb20pCisgICAgICAgIChsZXQq ICgocHJldmlvdXMgKHBvaW50KSkKKyAgICAgICAgICAgICAgIChlbmQgKGN1cnJlbnQtY29s dW1uKSkKKyAgICAgICAgICAgICAgIChuZXh0IChwcm9nbiAoZmlsbC1tb3ZlLXRvLWJyZWFr LXBvaW50IGZyb20pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgOzsgTmVlZGVkIGZv ciBtb3ZpbmcgcGFzdCBzb21lIE9yZy1tb2RlIGxpbmtzCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHNraXAtY2hhcnMtYmFja3dhcmQgIiBcdCIpCisgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKHBvaW50KSkpCisgICAgICAgICAgICAgICAod2l0aC1zcGFjZSAoY3Vy cmVudC1jb2x1bW4pKQorICAgICAgICAgICAgICAgKHdpdGhvdXQtc3BhY2UgKHByb2duIChz a2lwLWNoYXJzLWZvcndhcmQgIiBcdCIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKGN1cnJlbnQtY29sdW1uKSkpCisgICAgICAgICAgICAgICAobmV3LXNlbnRl bmNlIChsb29raW5nLWJhY2sgc2VudGVuY2UtcmVnZXhwIGZyb20pKSkKKyAgICAgICAgICAo Z290by1jaGFyIG5leHQpCisgICAgICAgICAgOzsgSWYgcG9pbnQgZGlkbid0IG1vdmUsIHdl J3JlIGFmdGVyIHRoZSBmaXJzdCB3b3JkIG9mIHRoZSBsaW5lLgorICAgICAgICAgICh3aGVu ICg8PSBwcmV2aW91cyBuZXh0KQorICAgICAgICAgICAgKGdvdG8tY2hhciBmcm9tKQorICAg ICAgICAgICAgKHNldHEgd2l0aC1zcGFjZSAoY3VycmVudC1jb2x1bW4pCisgICAgICAgICAg ICAgICAgICB3aXRob3V0LXNwYWNlIChjdXJyZW50LWNvbHVtbikpKQorICAgICAgICAgIDs7 IE1lcmdlIGludG8gcHJldmlvdXMgZW50cnkgd2hlbiBtb3ZpbmcgcGFzdCBpbnZpc2libGUg dGV4dC4KKyAgICAgICAgICAoaWYgKD0gZW5kIHdpdGhvdXQtc3BhY2UpCisgICAgICAgICAg ICAgIChzZXRxIGVuZCAoKyBlbmQgKG9yIChjYXIgKHBvcCB3b3JkcykpIDApKSkpCisgICAg ICAgICAgKHB1c2ggKGxpc3QgKC0gZW5kIHdpdGgtc3BhY2UpICgtIGVuZCB3aXRob3V0LXNw YWNlKSBuZXctc2VudGVuY2UpCisgICAgICAgICAgICAgICAgd29yZHMpKSkKKyAgICAgIChz ZXRxIHdvcmRzICh2Y29uY2F0IHdvcmRzKSkKKyAgICAgIChzZXRxIGNvdW50IChsZW5ndGgg d29yZHMpKQorCisgICAgICA7OyBDb25zaWRlciBlYWNoIHdvcmQgYXMgYSBjYW5kaWRhdGUg dG8gc3RhcnQgYSBsaW5lLCBhbmQgYnVpbGQgYQorICAgICAgOzsgdGFibGUgb2Ygd2hpY2gg d29yZCB0aGUgcHJldmlvdXMgbGluZSB3b3VsZCBiZSBiZXN0IHRvIHN0YXJ0IG9uCisgICAg ICA7OyBhbmQgdGhlIHdpZHRoIG9mIHRoZSBwcmV2aW91cyBsaW5lLiAgVXNlIGR5bmFtaWMg cHJvZ3JhbW1pbmcgdG8KKyAgICAgIDs7IG1pbmltaXplIGEgY29zdCBmdW5jdGlvbi4KKyAg ICAgIChsZXQgKChzdGFydHMgKG1ha2UtdmVjdG9yICgxKyBjb3VudCkgMCkpCisgICAgICAg ICAgICAod2lkdGhzIChtYWtlLXZlY3RvciAoMSsgY291bnQpIDApKSkKKyAgICAgICAgKGxl dCogKChzdGFydCAwKQorICAgICAgICAgICAgICAgKHJvb20gKC0gZmlsbC1jb2x1bW4gKGN1 cnJlbnQtY29sdW1uKSkpCisgICAgICAgICAgICAgICAoY29zdHMgKG1ha2UtdmVjdG9yICgx KyBjb3VudCkgbW9zdC1wb3NpdGl2ZS1maXhudW0pKQorICAgICAgICAgICAgICAgKHJhZ3Mg KG1ha2UtdmVjdG9yICgxKyBjb3VudCkgYmFsYW5jZWQtZmlsbC1tYXJnaW4td2lkdGgpKSkK KyAgICAgICAgICAoYXNldCBjb3N0cyAwIDApCisgICAgICAgICAgKHdoaWxlICg8IHN0YXJ0 IGNvdW50KQorICAgICAgICAgICAgOzsgVGhlIHJvb20gZm9yIHRoZSBmaXJzdCBsaW5lIG1h eSBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgcmVzdC4KKyAgICAgICAgICAgIChpZiAoPSBzdGFy dCAxKQorICAgICAgICAgICAgICAgIChzZXRxIHJvb20gKC0gZmlsbC1jb2x1bW4KKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChzdHJpbmctd2lkdGggKG9yIGZpbGwtcHJlZml4 ICIiKSkpKSkKKyAgICAgICAgICAgIDs7IENvbnNpZGVyIGVhY2ggd29yZCB0aGlzIG5ldyBs aW5lIG1pZ2h0IGVuZCBvbi4gIERvbid0IHRlc3QKKyAgICAgICAgICAgIDs7IHdpZHRoIGFn YWluc3Qgcm9vbSB5ZXQ7IHdlIHdhbnQgYXQgbGVhc3Qgb25lIHdvcmQgcGVyIGxpbmUsCisg ICAgICAgICAgICA7OyBzbyB3ZSBuZWVkIGF0IGxlYXN0IG9uZSBpdGVyYXRpb24uCisgICAg ICAgICAgICAobGV0ICgoZW5kIHN0YXJ0KQorICAgICAgICAgICAgICAgICAgKHdpZHRoIDAp KQorICAgICAgICAgICAgICAod2hpbGUgKDwgZW5kIGNvdW50KQorICAgICAgICAgICAgICAg IDs7IERvbid0IGFkZCB0aGUgc3BhY2UgYmVmb3JlIHRoZSBmaXJzdCB3b3JkIHRvIHRoZSB3 aWR0aC4KKyAgICAgICAgICAgICAgICAoc2V0cSB3aWR0aCAoKyB3aWR0aCAobnRoIChpZiAo PSBlbmQgc3RhcnQpIDEgMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChhcmVmIHdvcmRzIGVuZCkpKSkKKyAgICAgICAgICAgICAgICA7OyBPdXIgY29z dCBmdW5jdGlvbiBpcyB0aGUgc3VtIG9mIHRoZSBiZXN0IHRvdGFsIGNvc3QgZm9yCisgICAg ICAgICAgICAgICAgOzsgYWxsIHRoZSBsaW5lcyBwcmVjZWRpbmcgdGhlIHN0YXJ0IG9mIHRo aXMgb25lLAorICAgICAgICAgICAgICAgIChsZXQgKChjb3N0ICgrIChhcmVmIGNvc3RzIHN0 YXJ0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7IHBsdXMgdGhlIGRpc3Rh bmNlIGZyb20gdGhlIG1hcmdpbgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChl eHB0IChhYnMgKC0gcm9vbSBiYWxhbmNlZC1maWxsLW1hcmdpbi13aWR0aAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgpKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7IGV4cG9uZW50aWF0ZWQgaWYgbm90IHRo ZSBsYXN0IGxpbmUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoaWYg KG9yICgvPSAoMSsgZW5kKSBjb3VudCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDs7IG9yIGlmIHdlJ2QgbGVhdmUgYSBydW50LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDwgd2lkdGggYmFsYW5jZWQt ZmlsbC1ydW50LXdpZHRoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgYmFsYW5jZWQtZmlsbC1sZW5ndGgtcGVuYWx0eSAxKSkKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7OyBwbHVzIGEgcGVuYWx0eSBmb3IgYW4gdW5ldmVuIHJpZ2h0 IHNpZGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKiAoYWJzICgtIHJvb20g d2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChhcmVm IHJhZ3Mgc3RhcnQpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7OyBp ZiBub3QgdGhlIGxhc3QgbGluZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChpZiAob3IgKC89ICgxKyBlbmQpIGNvdW50KQorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOzsgdW5sZXNzIHRoZSBsYXN0IGxpbmUgaXMgbG9uZ2VyLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDwgKC0gcm9vbSB3 aWR0aCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChh cmVmIHJhZ3Mgc3RhcnQpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgYmFsYW5jZWQtZmlsbC1yYWdnZWRuZXNzLXBlbmFsdHkgMCkpCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOzsgcGx1cyBhIHBlbmFsdHkgaWYgZW5kaW5nIG9uIHRoZSBz dGFydCBvZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDs7IGEgbmV3IHNlbnRl bmNlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChpZiAobnRoIDIgKGFyZWYg d29yZHMgZW5kKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFsYW5j ZWQtZmlsbC1zaW5nbGUtcGVuYWx0eSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDs7IGFuZCBhIHBlbmFsdHkgaWYgc3RhcnRpbmcgd2l0aCBhIHNpbmdsZQorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDs7IHdvcmQgYW5kIHRoZW4gYSBuZXcgc2VudGVu Y2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGlmIChhbmQgKDwgKDErIHN0 YXJ0KSBjb3VudCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo bnRoIDIgKGFyZWYgd29yZHMgKDErIHN0YXJ0KSkpKQorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBiYWxhbmNlZC1maWxsLXNpbmdsZS1wZW5hbHR5IDApCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOzsgYW5kIGEgcGVuYWx0eSBmb3IgZWFjaCBicmVh ay4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWxhbmNlZC1maWxsLWJyZWFr LXBlbmFsdHkpKSkKKyAgICAgICAgICAgICAgICAgIDs7IEZvciBlbmRpbmcgYWZ0ZXIgaGVy ZSwgaXMgdGhpcyBhIGJldHRlciBzdGFydGluZyBwbGFjZT8KKyAgICAgICAgICAgICAgICAg ICh3aGVuIChhbmQgKDw9IGNvc3QgKGFyZWYgY29zdHMgKDErIGVuZCkpKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAob3IgKDw9IHdpZHRoIHJvb20pICg9IGVuZCBzdGFydCkp KQorICAgICAgICAgICAgICAgICAgICAoYXNldCBjb3N0cyAoMSsgZW5kKSBjb3N0KQorICAg ICAgICAgICAgICAgICAgICAoYXNldCBzdGFydHMgKDErIGVuZCkgc3RhcnQpCisgICAgICAg ICAgICAgICAgICAgIChhc2V0IHdpZHRocyAoMSsgZW5kKSB3aWR0aCkKKyAgICAgICAgICAg ICAgICAgICAgKGFzZXQgcmFncyAoMSsgZW5kKSAoLSByb29tIHdpZHRoKSkpKQorICAgICAg ICAgICAgICAgIDs7IEJyZWFrIHRoZSBpbm5lciAoZW5kKSBsb29wIGlmIHdlJ3JlIG91dCBv ZiByb29tIG5vdy4KKyAgICAgICAgICAgICAgICAoaWYgKD49IHdpZHRoIHJvb20pCisgICAg ICAgICAgICAgICAgICAgIChzZXRxIGVuZCBjb3VudCkpCisgICAgICAgICAgICAgICAgKHNl dHEgZW5kICgxKyBlbmQpKSkpCisgICAgICAgICAgICAoc2V0cSBzdGFydCAoMSsgc3RhcnQp KSkpCisKKyAgICAgICAgOzsgV2FsayBiYWNrd2FyZHMgZnJvbSB0aGUgZW5kIG9mIHRoZSB0 YWJsZSB0byByZWNvbnN0cnVjdCBhIGxpc3QKKyAgICAgICAgOzsgb2YgdGhlIG9wdGltYWwg d2lkdGhzIGZvciBlYWNoIGxpbmUuCisgICAgICAgIChsZXQgKGNob3NlbikKKyAgICAgICAg ICAobGV0ICgoZW5kIGNvdW50KSkKKyAgICAgICAgICAgICh3aGlsZSAoPiBlbmQgMCkKKyAg ICAgICAgICAgICAgKGlmICg8IGVuZCBjb3VudCkKKyAgICAgICAgICAgICAgICAgIChwdXNo IChhcmVmIHdpZHRocyBlbmQpIGNob3NlbikpCisgICAgICAgICAgICAgIChzZXRxIGVuZCAo YXJlZiBzdGFydHMgZW5kKSkpKQorCisgICAgICAgICAgOzsgVGhlbiBpbnNlcnQgdGhvc2Ug bGluZSBicmVha3MgYW5kIGp1c3RpZnkgZWFjaCBsaW5lLgorICAgICAgICAgIChtYXBjIChs YW1iZGEgKHdpZHRoKQorICAgICAgICAgICAgICAgICAgKG1vdmUtdG8tY29sdW1uICgrIChj dXJyZW50LWNvbHVtbikgd2lkdGgpKQorICAgICAgICAgICAgICAgICAgKGZpbGwtbmV3bGlu ZSkKKyAgICAgICAgICAgICAgICAgIChpZiBqdXN0aWZ5CisgICAgICAgICAgICAgICAgICAg ICAgKHNhdmUtZXhjdXJzaW9uCisgICAgICAgICAgICAgICAgICAgICAgICAoZm9yd2FyZC1s aW5lIC0xKQorICAgICAgICAgICAgICAgICAgICAgICAgKGp1c3RpZnktY3VycmVudC1saW5l IGp1c3RpZnkgbmlsIHQpKSkpCisgICAgICAgICAgICAgICAgY2hvc2VuKQorICAgICAgICAg IChpZiBqdXN0aWZ5IChqdXN0aWZ5LWN1cnJlbnQtbGluZSBqdXN0aWZ5IHQgdCkpKSkpKSkK KwogKGRlZnVuIGZpbGwtcmVnaW9uLWFzLXBhcmFncmFwaCAoZnJvbSB0byAmb3B0aW9uYWwg anVzdGlmeQogCQkJCSAgICAgIG5vc3F1ZWV6ZSBzcXVlZXplLWFmdGVyKQogICAiRmlsbCB0 aGUgcmVnaW9uIGFzIGlmIGl0IHdlcmUgYSBzaW5nbGUgcGFyYWdyYXBoLgpAQCAtNzYyLDYg Kzk4MywxMSBAQCBmaWxsLXJlZ2lvbi1hcy1wYXJhZ3JhcGgKIAogCTs7IFRoaXMgaXMgdGhl IGFjdHVhbCBmaWxsaW5nIGxvb3AuCiAJKGdvdG8tY2hhciBmcm9tKQorICAgICAgICA7OyBB dHRlbXB0IHRvIGJyZWFrIGludG8gYmFsYW5jZWQgbGluZXMgaWYgZGVzaXJlZC4KKyAgICAg ICAgKHdoZW4gYmFsYW5jZWQtZmlsbC1tb2RlCisgICAgICAgICAgKGJhbGFuY2VkLWZpbGwt LWJyZWFrLWxpbmVzIGZyb20gdG8ganVzdGlmeSkpCisgICAgICAgIDs7IE90aGVyd2lzZSAo aWYgcG9pbnQgaXMgc3RpbGwgYXQgZnJvbSksIGZhbGwgYmFjayB0byB0aGUgc3RhbmRhcmQK KyAgICAgICAgOzsgZ3JlZWR5IGxpbmUgYnJlYWtpbmcgbG9vcC4KIAkobGV0IChsaW5lYmVn KQogICAgICAgICAgICh3aGlsZSAoPCAocG9pbnQpIHRvKQogCSAgICAoc2V0cSBsaW5lYmVn IChwb2ludCkpCkBAIC0xMTE2LDcgKzEzNDIsOCBAQCBkZWZhdWx0LWp1c3RpZmljYXRpb24K IAkJIChjb25zdCBmdWxsKQogCQkgKGNvbnN0IGNlbnRlcikKIAkJIChjb25zdCBub25lKSkK LSAgOnNhZmUgJ3N5bWJvbHApCisgIDpzYWZlICdzeW1ib2xwCisgIDpncm91cCAnZmlsbCkK IChtYWtlLXZhcmlhYmxlLWJ1ZmZlci1sb2NhbCAnZGVmYXVsdC1qdXN0aWZpY2F0aW9uKQog CiAoZGVmdW4gY3VycmVudC1qdXN0aWZpY2F0aW9uICgpCmRpZmYgLS1naXQgYS90ZXN0L2xp c3AvdGV4dG1vZGVzL2ZpbGwtdGVzdHMuZWwgYi90ZXN0L2xpc3AvdGV4dG1vZGVzL2ZpbGwt dGVzdHMuZWwKaW5kZXggZWY4MjJiYTgwNWIuLjE4NTE5ZWI2OWE3IDEwMDY0NAotLS0gYS90 ZXN0L2xpc3AvdGV4dG1vZGVzL2ZpbGwtdGVzdHMuZWwKKysrIGIvdGVzdC9saXNwL3RleHRt b2Rlcy9maWxsLXRlc3RzLmVsCkBAIC0xMjEsNiArMTIxLDI3IEBAIHRlc3QtZmlsbC1oYXNr ZWxsCiAgIDs7IHcKICIpKSkKIAorKGVydC1kZWZ0ZXN0IGZpbGwtdGVzdC1iYWxhbmNlZC1m aWxsLW1vZGUgbmlsCisgICJCYXNpYyB0ZXN0cyBvZiB0aGUgYGJhbGFuY2VkLWZpbGwtbW9k ZScgb3B0aW9uLiIKKyAgKHdpdGgtdGVtcC1idWZmZXIKKyAgICAoaW5zZXJ0ICJDY2MgY2Nj IGEgYmIgZGRkZCBiYiBiYiBhIGNjYyBhIGpqampqampqamogYSBlZWVlZSBhIGhoaGhoaGho IGJiIGRkZGQuIikKKyAgICAoc2V0cSBmaWxsLWNvbHVtbiAxNSkKKyAgICAoc2V0cS1sb2Nh bCBiYWxhbmNlZC1maWxsLW1vZGUgbmlsKQorICAgIChmaWxsLXBhcmFncmFwaCkKKyAgICAo c2hvdWxkIChzdHJpbmc9IChidWZmZXItc3RyaW5nKSAiQ2NjIGNjYyBhIGJiXG5kZGRkIGJi IGJiIGFcbmNjYyBhXG5qampqampqampqIGFcbmVlZWVlIGFcbmhoaGhoaGhoIGJiXG5kZGRk LiIpKSkKKyAgKHdpdGgtdGVtcC1idWZmZXIKKyAgICAoaW5zZXJ0ICJDY2MgY2NjIGEgYmIg ZGRkZCBiYiBiYiBhIGNjYyBhIGpqampqampqamogYSBlZWVlZSBhIGhoaGhoaGhoIGJiIGRk ZGQuIikKKyAgICAoc2V0cSBmaWxsLWNvbHVtbiAxNSkKKyAgICAoc2V0cS1sb2NhbCBiYWxh bmNlZC1maWxsLW1vZGUgdCkKKyAgICAoZmlsbC1wYXJhZ3JhcGgpCisgICAgKHNob3VsZCAo c3RyaW5nPSAoYnVmZmVyLXN0cmluZykgIkNjYyBjY2MgYVxuYmIgZGRkZCBiYlxuYmIgYSBj Y2MgYVxuampqampqampqalxuYSBlZWVlZSBhXG5oaGhoaGhoaFxuYmIgZGRkZC4iKSkpCisg ICh3aXRoLXRlbXAtYnVmZmVyCisgICAgKGluc2VydCAiQ2NjIGNjYyBhIGJiIGRkZGQgYmIg YmIgYSBjY2MgYSBqampqampqampqIGEgZWVlZWUgYSBoaGhoaGhoaCBiYiBkZGRkLiIpCisg ICAgKHNldHEgZmlsbC1jb2x1bW4gMTUpCisgICAgKHNldHEtbG9jYWwgYmFsYW5jZWQtZmls bC1tb2RlIHQpCisgICAgKGZpbGwtcGFyYWdyYXBoICdmdWxsKQorICAgIChzaG91bGQgKHN0 cmluZz0gKGJ1ZmZlci1zdHJpbmcpICJDY2MgICAgY2NjICAgIGFcbmJiICAgIGRkZGQgICBi YlxuYmIgICBhICBjY2MgICBhXG5qampqampqampqXG5hICAgIGVlZWVlICAgIGFcbmhoaGho aGhoXG5iYiBkZGRkLiIpKSkpCisKIChwcm92aWRlICdmaWxsLXRlc3RzKQogCiA7OzsgZmls bC10ZXN0cy5lbCBlbmRzIGhlcmUKLS0gCjIuMTcuMQoK --------------TWuQdg909FX6zFfWaIAMkuEw Content-Type: text/x-emacs-lisp; charset=UTF-8; name="benchmark-fill.el" Content-Disposition: attachment; filename="benchmark-fill.el" Content-Transfer-Encoding: base64 KGRlZnVuIGJlbmNobWFyay1maWxsICgpCiAgKGludGVyYWN0aXZlKQogIChkb3RpbWVzIChy ZXBzIDMwKQogICAgKHdpdGgtdGVtcC1idWZmZXIKICAgICAgKGRvdGltZXMgKHJlcCByZXBz KQogICAgICAgIChpbnNlcnQgIkxvcmVtIGlwc3VtIGRvbG9yIHNpdCBhbWV0LCBjb25zZWN0 ZXR1ciBhZGlwaXNjaW5nIGVsaXQsIHNlZCAiKQogICAgICAgIChpbnNlcnQgImRvIGVpdXNt b2QgdGVtcG9yIGluY2lkaWR1bnQgdXQgbGFib3JlIGV0IGRvbG9yZSBtYWduYSAiKQogICAg ICAgIChpbnNlcnQgImFsaXF1YS4gIFV0IGVuaW0gYWQgbWluaW0gdmVuaWFtLCBxdWlzIG5v c3RydWQgZXhlcmNpdGF0aW9uICIpCiAgICAgICAgKGluc2VydCAidWxsYW1jbyBsYWJvcmlz IG5pc2kgdXQgYWxpcXVpcCBleCBlYSBjb21tb2RvIGNvbnNlcXVhdC4gICIpCiAgICAgICAg KGluc2VydCAiRHVpcyBhdXRlIGlydXJlIGRvbG9yIGluIHJlcHJlaGVuZGVyaXQgaW4gdm9s dXB0YXRlIHZlbGl0ICIpCiAgICAgICAgKGluc2VydCAiZXNzZSBjaWxsdW0gZG9sb3JlIGV1 IGZ1Z2lhdCBudWxsYSBwYXJpYXR1ci4gIEV4Y2VwdGV1ciBzaW50ICIpCiAgICAgICAgKGlu c2VydCAib2NjYWVjYXQgY3VwaWRhdGF0IG5vbiBwcm9pZGVudCwgc3VudCBpbiBjdWxwYSBx dWkgb2ZmaWNpYSAiKQogICAgICAgIChpbnNlcnQgImRlc2VydW50IG1vbGxpdCBhbmltIGlk IGVzdCBsYWJvcnVtLiAgIikpCiAgICAgIChsZXQgKCh3b3JkcyAoY291bnQtd29yZHMtcmVn aW9uIChwb2ludC1taW4pIChwb2ludC1tYXgpKSkKICAgICAgICAgICAgKHRpbWUgKGN1cnJl bnQtdGltZSkpKQogICAgICAgIChmaWxsLXBhcmFncmFwaCBuaWwgdCkKICAgICAgICAobWVz c2FnZSAiV29yZHM6ICU0ZCwgVGltZTogJTAuNmYiCiAgICAgICAgICAgICAgICAgd29yZHMg KGZsb2F0LXRpbWUgKHRpbWUtc2luY2UgdGltZSkpKSkpKSkK --------------TWuQdg909FX6zFfWaIAMkuEw--