From mboxrd@z Thu Jan 1 00:00:00 1970 Path: news.gmane.io!.POSTED.blaine.gmane.org!not-for-mail From: David Ponce via "Bug reports for GNU Emacs, the Swiss army knife of text editors" Newsgroups: gmane.emacs.bugs Subject: bug#69992: Minor improvement to image map transformation logic Date: Thu, 28 Mar 2024 23:22:10 +0100 Message-ID: References: <87o7b3m8ee.fsf@ushin.org> <55864577-3819-46e0-857a-cc0d0145bc2f@orange.fr> <86cyrfj0t3.fsf@gnu.org> <87cyrfl265.fsf@breatheoutbreathe.in> Reply-To: David Ponce Mime-Version: 1.0 Content-Type: multipart/mixed; boundary="------------1Eg710s2HZvrL6xKWqOIBWUm" Injection-Info: ciao.gmane.io; posting-host="blaine.gmane.org:116.202.254.214"; logging-data="10329"; mail-complaints-to="usenet@ciao.gmane.io" User-Agent: Mozilla Thunderbird Cc: Eli Zaretskii , Joseph Turner To: 69992@debbugs.gnu.org Original-X-From: bug-gnu-emacs-bounces+geb-bug-gnu-emacs=m.gmane-mx.org@gnu.org Thu Mar 28 23:23:17 2024 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 1rpy9U-0002Nr-B7 for geb-bug-gnu-emacs@m.gmane-mx.org; Thu, 28 Mar 2024 23:23:16 +0100 Original-Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1rpy9H-00042f-1L; Thu, 28 Mar 2024 18:23:03 -0400 Original-Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1rpy9F-0003yi-Ed for bug-gnu-emacs@gnu.org; Thu, 28 Mar 2024 18:23:01 -0400 Original-Received: from debbugs.gnu.org ([2001:470:142:5::43]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1rpy9F-0002eA-4l for bug-gnu-emacs@gnu.org; Thu, 28 Mar 2024 18:23:01 -0400 Original-Received: from Debian-debbugs by debbugs.gnu.org with local (Exim 4.84_2) (envelope-from ) id 1rpy9F-0002x6-OJ for bug-gnu-emacs@gnu.org; Thu, 28 Mar 2024 18:23:01 -0400 X-Loop: help-debbugs@gnu.org Resent-From: David Ponce Original-Sender: "Debbugs-submit" Resent-CC: bug-gnu-emacs@gnu.org Resent-Date: Thu, 28 Mar 2024 22:23:01 +0000 Resent-Message-ID: Resent-Sender: help-debbugs@gnu.org X-GNU-PR-Message: followup 69992 X-GNU-PR-Package: emacs Original-Received: via spool by 69992-submit@debbugs.gnu.org id=B69992.171166454111176 (code B ref 69992); Thu, 28 Mar 2024 22:23:01 +0000 Original-Received: (at 69992) by debbugs.gnu.org; 28 Mar 2024 22:22:21 +0000 Original-Received: from localhost ([127.0.0.1]:41283 helo=debbugs.gnu.org) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rpy8a-0002uB-P5 for submit@debbugs.gnu.org; Thu, 28 Mar 2024 18:22:21 -0400 Original-Received: from out-67.smtpout.orange.fr ([193.252.22.67]:60670 helo=msa.smtpout.orange.fr) by debbugs.gnu.org with esmtp (Exim 4.84_2) (envelope-from ) id 1rpy8V-0002tU-Fq for 69992@debbugs.gnu.org; Thu, 28 Mar 2024 18:22:18 -0400 Original-Received: from [192.168.1.15] ([2.7.71.181]) by smtp.orange.fr with ESMTPA id py8RryHljCHlGpy8Rrm0s3; Thu, 28 Mar 2024 23:22:13 +0100 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=orange.fr; s=t20230301; t=1711664533; bh=OdIiOr/FW/7r/uE3UVXdbeg0zq1ufmOUNbzuf9vmvfk=; h=Message-ID:Date:MIME-Version:From:Subject:To; b=rDL8k9+Sc029ZIjXKylAbyoEN586NocHSG8TnNuuav3xNXGgql12vKdUvCk7RLAfu WJQsm7KCObpFP1fUwOQBZXAsEkXpOlBJr8z4EovcBbqbltp2YStfJ9LLB0xWMUJxCP mBbs5Q4TWKrBnQBoWVWLNU+ZLXR+7nD4SQjmPvPRDQlKlFSZ/NNpz+H0te9Byntezz dxKw8MSmo+htRa76sb2/jcKUHZM1YIAAwQJ5oks0VjF6iatSUtW0dmrQP3BBf47Ey6 G9vXJWUpkNmQMoQANJvo+wy0H8Pa5kdEirvriDojmjLk6NWQMecXWQbNMnFTGQuwwT i3q+ukr6zQZkA== X-ME-Helo: [192.168.1.15] X-ME-Auth: ZGFfdmlkQHdhbmFkb28uZnI= X-ME-Date: Thu, 28 Mar 2024 23:22:13 +0100 X-ME-IP: 2.7.71.181 Content-Language: fr, en-US In-Reply-To: <87cyrfl265.fsf@breatheoutbreathe.in> 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:282261 Archived-At: This is a multi-part message in MIME format. --------------1Eg710s2HZvrL6xKWqOIBWUm Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Re-sent to all (sorry) On 27/03/2024 23:17, Joseph Turner wrote: [...] > On my machine, not all tests pass with the patch. Please be sure that > these three new tests pass: > > image-create-image-with-map > image--compute-map-and-original-map > image-transform-map > > Personally, I find it easier to understand image map transformation when > the logic is split into multiple functions. However, the benefit of > readability could certainly be outweighed by a noticeable improvement to > user experience. Please share some benchmarks. > > Please keep in mind that `image--delayed-change-size' already debounces > image transformation, so this code may not be so performance-critical. Hello, After more work, testing and benchmarks, I can finally confirm that my proposed version of `image--compute-*map' without the logic splits into multiple functions is not significantly faster than the current version with the logic splits into multiple functions :-) What I found interesting after profiling both current and proposed functions is that most of the time is consumed by the call to `image-size'! I also found that the current implementation is not correct when rotation is not a multiple of 90 degrees. In this case, Emacs still scales the image if specified, but ignores rotation and flipping. However, in this case, the `image--compute-*map' functions do not recompute map. The attached new patch fixes the logic to be consistent with Emacs internal implementation, plus some other tweaks to check if a transformation apply before to call the transformation function. I also updated some tests according to functions changes. Here is a possible change log: 2024-03-28 David Ponce * lisp/image.el (image--compute-scaling) (image--compute-rotation): New functions. (image--compute-map, image--compute-original-map): Use them. Ensure all transformations are applied or undone according to what Emacs does internally. Call a transformation function only when needed. Fix doc string. (image--scale-map): Assume effective scale argument. (image--rotate-map): Assume effective rotation argument. (image--rotate-coord): Improve doc string. (image--flip-map): Remove no more used flip argument. * test/lisp/image-tests.el (image-create-image-with-map): Use a valid SVG image otherwise `image-size' will not return a valid value and calculation of scale could fail. (image-transform-map): Update according to changed signature of image--flip-map. This new version passes the `image-create-image-with-map' and `image-transform-map' tests. But on my laptop, the `image--compute-map-and-original-map' fails the same for both the current and proposed version of the functions: F image--compute-map-and-original-map Test ‘image--compute-map’ and ‘image--compute-original-map’. (ert-test-failed ((should (image-tests--map-equal (image--compute-map image) rotated-map)) :form (image-tests--map-equal (((circle ... . 24) "a" (help-echo "A")) ((rect ... 127 . 77) "b" (help-echo "B")) ((poly . [199 161 206 160 213 154 218 146 221 136 ...]) "c" (help-echo "C"))) (((circle ... . 24) "a" (help-echo "A")) ((rect ... 54 . 77) "b" (help-echo "B")) ((poly . [126 161 133 160 140 154 145 146 148 136 ...]) "c" (help-echo "C")))) :value nil)) Thanks! --------------1Eg710s2HZvrL6xKWqOIBWUm Content-Type: text/x-patch; charset=UTF-8; name="image-compute-map-V0.patch" Content-Disposition: attachment; filename="image-compute-map-V0.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2xpc3AvaW1hZ2UuZWwgYi9saXNwL2ltYWdlLmVsCmluZGV4IGQ3NDk2 NDg1YWNhLi5iNjA5ZjBmYzM0YyAxMDA2NDQKLS0tIGEvbGlzcC9pbWFnZS5lbAorKysgYi9s aXNwL2ltYWdlLmVsCkBAIC0xNDIzLDExNSArMTQyMywxMzkgQEAgaW1hZ2UtcmVjb21wdXRl LW1hcC1wCiAgIDp0eXBlICdib29sZWFuCiAgIDp2ZXJzaW9uICIzMC4xIikKIAorKGRlZnN1 YnN0IGltYWdlLS1jb21wdXRlLXNjYWxpbmcgKGltYWdlKQorICAiUmV0dXJuIHRoZSBjdXJy ZW50IHNjYWxpbmcgb2YgSU1BR0UsIG9yIDEgaWYgbm8gc2NhbGluZy4iCisgIDs7IFRoZSBp bWFnZSBtYXkgYmUgc2NhbGVkIGR1ZSB0byBtYW55IHJlYXNvbnMgKDpzY2FsZSwgOm1heC13 aWR0aCwKKyAgOzsgZXRjKSwgc28gdXNpbmcgYGltYWdlLS1jdXJyZW50LXNjYWxpbmcnIHRv IGdldCByYXRpbyBiZXR3ZWVuIHRoZQorICA7OyBvcmlnaW5hbCBpbWFnZSBzaXplIGFuZCB0 aGUgZGlzcGxheWVkIHNpemUpIGlzIGJldHRlciB0aGFuIGp1c3QKKyAgOzsgdXNpbmcgdGhl IDpzY2FsZSB2YWx1ZS4gVW5mb3J0dW5hdGVseSBlYWNoIGNhbGwgdG8gYGltYWdlX3NpemUn IGlzCisgIDs7IHZlcnkgcmVzb3VyY2UgY29uc3VtaW5nIQorICA7OyAoaW1hZ2UtLWN1cnJl bnQtc2NhbGluZworICA7OyAgaW1hZ2UgKGltYWdlLS1pbWFnZS13aXRob3V0LXBhcmFtZXRl cnMgaW1hZ2UpKQorICAob3IgKGltYWdlLXByb3BlcnR5IGltYWdlIDpzY2FsZSkgMSkpCisK KyhkZWZzdWJzdCBpbWFnZS0tY29tcHV0ZS1yb3RhdGlvbiAoaW1hZ2UpCisgICJSZXR1cm4g dGhlIGN1cnJlbnQgcm90YXRpb24gb2YgSU1BR0UsIG9yIDAgaWYgbm8gcm90YXRpb24uCitB bHNvIHJldHVybiBuaWwgaWYgcm90YXRpb24gaXMgbm90IGEgbXVsdGlwbGVzIG9mIDkwIGRl Z3JlZXMgKDAsIDkwLAorMTgwWy0xODBdIGFuZCAyNzBbLTkwXSkuIgorICAobGV0ICgoZGVn cmVlcyAoaW1hZ2UtcHJvcGVydHkgaW1hZ2UgOnJvdGF0aW9uKSkpCisgICAgKGFuZCBkZWdy ZWVzICg9IDAgKG1vZCBkZWdyZWVzIDEpKQorICAgICAgICAgKGNhciAobWVtcWwgKHRydW5j YXRlIChtb2QgZGVncmVlcyAzNjApKSAnKDAgOTAgMTgwIDI3MCkpKSkpKQorCiAoZGVmdW4g aW1hZ2UtLWNvbXB1dGUtbWFwIChpbWFnZSkKICAgIkNvbXB1dGUgbWFwIGZvciBJTUFHRSBz dWl0YWJsZSB0byBiZSB1c2VkIGFzIGl0cyA6bWFwIHByb3BlcnR5LgotUmV0dXJuIGEgY29w eSBvZiA6b3JpZ2luYWwtaW1hZ2UgdHJhbnNmb3JtZWQgYmFzZWQgb24gSU1BR0UncyA6c2Nh bGUsCitSZXR1cm4gYSBjb3B5IG9mIDpvcmlnaW5hbC1tYXAgdHJhbnNmb3JtZWQgYmFzZWQg b24gSU1BR0UncyA6c2NhbGUsCiA6cm90YXRpb24sIGFuZCA6ZmxpcC4gIFdoZW4gSU1BR0Un cyA6b3JpZ2luYWwtbWFwIGlzIG5pbCwgcmV0dXJuIG5pbC4KIFdoZW4gOnJvdGF0aW9uIGlz IG5vdCBhIG11bHRpcGxlIG9mIDkwLCByZXR1cm4gY29weSBvZiA6b3JpZ2luYWwtbWFwLiIK LSAgKHBjYXNlLWxldCogKChvcmlnaW5hbC1tYXAgKGltYWdlLXByb3BlcnR5IGltYWdlIDpv cmlnaW5hbC1tYXApKQotICAgICAgICAgICAgICAgKG1hcCAoY29weS10cmVlIG9yaWdpbmFs LW1hcCB0KSkKLSAgICAgICAgICAgICAgIChzY2FsZSAob3IgKGltYWdlLXByb3BlcnR5IGlt YWdlIDpzY2FsZSkgMSkpCi0gICAgICAgICAgICAgICAocm90YXRpb24gKG9yIChpbWFnZS1w cm9wZXJ0eSBpbWFnZSA6cm90YXRpb24pIDApKQotICAgICAgICAgICAgICAgKGZsaXAgKGlt YWdlLXByb3BlcnR5IGltYWdlIDpmbGlwKSkKLSAgICAgICAgICAgICAgICgoYW5kIHNpemUg YCgsd2lkdGggLiAsaGVpZ2h0KSkgKGltYWdlLXNpemUgaW1hZ2UgdCkpKQotICAgICh3aGVu IChhbmQgOyBIYW5kbGUgb25seSA5MC1kZWdyZWUgcm90YXRpb25zCi0gICAgICAgICAgICh6 ZXJvcCAobW9kIHJvdGF0aW9uIDEpKQotICAgICAgICAgICAoemVyb3AgKCUgKHRydW5jYXRl IHJvdGF0aW9uKSA5MCkpKQotICAgICAgOzsgU0laRSBmaXRzIE1BUCBhZnRlciB0cmFuc2Zv cm1hdGlvbnMuICBTY2FsZSBNQVAgYmVmb3JlCi0gICAgICA7OyBmbGlwIGFuZCByb3RhdGUg b3BlcmF0aW9ucywgc2luY2UgYm90aCBuZWVkIE1BUCB0byBmaXQgU0laRS4KLSAgICAgIChp bWFnZS0tc2NhbGUtbWFwIG1hcCBzY2FsZSkKKyAgKHdoZW4tbGV0ICgobWFwIChpbWFnZS1w cm9wZXJ0eSBpbWFnZSA6b3JpZ2luYWwtbWFwKSkpCisgICAgKHNldHEgbWFwIChjb3B5LXRy ZWUgbWFwIHQpKQorICAgIChsZXQqICgoc2NhbGUgKGltYWdlLS1jb21wdXRlLXNjYWxpbmcg aW1hZ2UpKQorICAgICAgICAgICAocm90YXRpb24gKGltYWdlLS1jb21wdXRlLXJvdGF0aW9u IGltYWdlKSkKKyAgICAgICAgICAgOzsgSW1hZ2UgaXMgZmxpcHBlZCBvbmx5IGlmIHJvdGF0 aW9uIGlzIGEgbXVsdGlwbGUgb2YgOTAsCisgICAgICAgICAgIDs7IGluY2x1ZGluZyAwLgor ICAgICAgICAgICAoZmxpcCAoYW5kIHJvdGF0aW9uIChpbWFnZS1wcm9wZXJ0eSBpbWFnZSA6 ZmxpcCkpKQorICAgICAgICAgICAoc2l6ZSAoaW1hZ2Utc2l6ZSBpbWFnZSB0KSkpCisgICAg ICA7OyBTSVpFIGZpdHMgTUFQIGFmdGVyIHRyYW5zZm9ybWF0aW9ucy4gIFNjYWxlIE1BUCBi ZWZvcmUgZmxpcCBhbmQKKyAgICAgIDs7IHJvdGF0ZSBvcGVyYXRpb25zLCBzaW5jZSBib3Ro IG5lZWQgTUFQIHRvIGZpdCBTSVpFLgorICAgICAgKHVubGVzcyAoPSBzY2FsZSAxKQorICAg ICAgICAoaW1hZ2UtLXNjYWxlLW1hcCBtYXAgc2NhbGUpKQogICAgICAgOzsgSW4gcmVuZGVy ZWQgaW1hZ2VzLCByb3RhdGlvbiBpcyBhbHdheXMgYXBwbGllZCBiZWZvcmUgZmxpcC4KLSAg ICAgIChpbWFnZS0tcm90YXRlLW1hcAotICAgICAgIG1hcCByb3RhdGlvbiAoaWYgKG9yICg9 IDkwIHJvdGF0aW9uKSAoPSAyNzAgcm90YXRpb24pKQorICAgICAgKHdoZW4gKG1lbXFsIHJv dGF0aW9uICcoOTAgMTgwIDI3MCkpCisgICAgICAgIChpbWFnZS0tcm90YXRlLW1hcAorICAg ICAgICAgbWFwIHJvdGF0aW9uIChpZiAoPSByb3RhdGlvbiAxODApCisgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemUKICAgICAgICAgICAgICAgICAgICAgICAgIDs7IElmIHJvdGF0 ZWQgwrE5MMKwLCBzd2FwIHdpZHRoIGFuZCBoZWlnaHQuCi0gICAgICAgICAgICAgICAgICAg ICAgICAoY29ucyBoZWlnaHQgd2lkdGgpCi0gICAgICAgICAgICAgICAgICAgICAgc2l6ZSkp CisgICAgICAgICAgICAgICAgICAgICAgICAoY29ucyAoY2RyIHNpemUpIChjYXIgc2l6ZSkp KSkpCiAgICAgICA7OyBBZnRlciByb3RhdGlvbiwgdGhlcmUncyBubyBuZWVkIHRvIHN3YXAg d2lkdGggYW5kIGhlaWdodC4KLSAgICAgIChpbWFnZS0tZmxpcC1tYXAgbWFwIGZsaXAgc2l6 ZSkpCisgICAgICAod2hlbiBmbGlwCisgICAgICAgIChpbWFnZS0tZmxpcC1tYXAgbWFwIHNp emUpKSkKICAgICBtYXApKQogCiAoZGVmdW4gaW1hZ2UtLWNvbXB1dGUtb3JpZ2luYWwtbWFw IChpbWFnZSkKICAgIlJldHVybiBvcmlnaW5hbCBtYXAgZm9yIElNQUdFLgogSWYgSU1BR0Ug bGFja3MgOm1hcCBwcm9wZXJ0eSwgcmV0dXJuIG5pbC4KLVdoZW4gOnJvdGF0aW9uIGlzIG5v dCBhIG11bHRpcGxlIG9mIDkwLCByZXR1cm4gY29weSBvZiA6bWFwLiIKLSAgKHdoZW4gKGlt YWdlLXByb3BlcnR5IGltYWdlIDptYXApCi0gICAgKGxldCogKChvcmlnaW5hbC1tYXAgKGNv cHktdHJlZSAoaW1hZ2UtcHJvcGVydHkgaW1hZ2UgOm1hcCkgdCkpCi0gICAgICAgICAgIChz Y2FsZSAob3IgKGltYWdlLXByb3BlcnR5IGltYWdlIDpzY2FsZSkgMSkpCi0gICAgICAgICAg IChyb3RhdGlvbiAob3IgKGltYWdlLXByb3BlcnR5IGltYWdlIDpyb3RhdGlvbikgMCkpCi0g ICAgICAgICAgIChmbGlwIChpbWFnZS1wcm9wZXJ0eSBpbWFnZSA6ZmxpcCkpCitXaGVuIHRo ZXJlIGlzIG5vIHRyYW5zZm9ybWF0aW9uLCByZXR1cm4gY29weSBvZiA6bWFwLiIKKyAgKHdo ZW4tbGV0ICgob3JpZ2luYWwtbWFwIChpbWFnZS1wcm9wZXJ0eSBpbWFnZSA6bWFwKSkpCisg ICAgKHNldHEgb3JpZ2luYWwtbWFwIChjb3B5LXRyZWUgb3JpZ2luYWwtbWFwIHQpKQorICAg IChsZXQqICgoc2NhbGUgKGltYWdlLS1jb21wdXRlLXNjYWxpbmcgaW1hZ2UpKQorICAgICAg ICAgICAocm90YXRpb24gKGltYWdlLS1jb21wdXRlLXJvdGF0aW9uIGltYWdlKSkKKyAgICAg ICAgICAgOzsgSW1hZ2UgaXMgZmxpcHBlZCBvbmx5IGlmIHJvdGF0aW9uIGlzIGEgbXVsdGlw bGUgb2YgOTAKKyAgICAgICAgICAgOzsgaW5jbHVkaW5nIDAuCisgICAgICAgICAgIChmbGlw IChhbmQgcm90YXRpb24gKGltYWdlLXByb3BlcnR5IGltYWdlIDpmbGlwKSkpCiAgICAgICAg ICAgIChzaXplIChpbWFnZS1zaXplIGltYWdlIHQpKSkKLSAgICAgICh3aGVuIChhbmQgOyBI YW5kbGUgb25seSA5MC1kZWdyZWUgcm90YXRpb25zCi0gICAgICAgICAgICAgKHplcm9wICht b2Qgcm90YXRpb24gMSkpCi0gICAgICAgICAgICAgKHplcm9wICglICh0cnVuY2F0ZSByb3Rh dGlvbikgOTApKSkKLSAgICAgICAgOzsgSW4gcmVuZGVyZWQgaW1hZ2VzLCByb3RhdGlvbiBp cyBhbHdheXMgYXBwbGllZCBiZWZvcmUgZmxpcC4KLSAgICAgICAgOzsgVG8gdW5kbyB0aGUg dHJhbnNmb3JtYXRpb24sIGZsaXAgYmVmb3JlIHJvdGF0aW5nLiAgU0laRSBmaXRzCi0gICAg ICAgIDs7IE9SSUdJTkFMLU1BUCBiZWZvcmUgdHJhbnNmb3JtYXRpb25zIGFyZSBhcHBsaWVk LiAgVGhlcmVmb3JlLAotICAgICAgICA7OyBzY2FsZSBPUklHSU5BTC1NQVAgYWZ0ZXIgZmxp cCBhbmQgcm90YXRlIG9wZXJhdGlvbnMsIHNpbmNlCi0gICAgICAgIDs7IGJvdGggbmVlZCBP UklHSU5BTC1NQVAgdG8gZml0IFNJWkUuCi0gICAgICAgIChpbWFnZS0tZmxpcC1tYXAgb3Jp Z2luYWwtbWFwIGZsaXAgc2l6ZSkKLSAgICAgICAgKGltYWdlLS1yb3RhdGUtbWFwIG9yaWdp bmFsLW1hcCAoLSByb3RhdGlvbikgc2l6ZSkKLSAgICAgICAgKGltYWdlLS1zY2FsZS1tYXAg b3JpZ2luYWwtbWFwICgvIDEuMCBzY2FsZSkpKQotICAgICAgb3JpZ2luYWwtbWFwKSkpCisg ICAgICA7OyBJbiByZW5kZXJlZCBpbWFnZXMsIHJvdGF0aW9uIGlzIGFsd2F5cyBhcHBsaWVk IGJlZm9yZSBmbGlwLgorICAgICAgOzsgVG8gdW5kbyB0aGUgdHJhbnNmb3JtYXRpb24sIGZs aXAgYmVmb3JlIHJvdGF0aW5nLiAgU0laRSBmaXRzCisgICAgICA7OyBPUklHSU5BTC1NQVAg YmVmb3JlIHRyYW5zZm9ybWF0aW9ucyBhcmUgYXBwbGllZC4gIFRoZXJlZm9yZSwKKyAgICAg IDs7IHNjYWxlIE9SSUdJTkFMLU1BUCBhZnRlciBmbGlwIGFuZCByb3RhdGUgb3BlcmF0aW9u cywgc2luY2UKKyAgICAgIDs7IGJvdGggbmVlZCBPUklHSU5BTC1NQVAgdG8gZml0IFNJWkUu CisgICAgICA7OyBJbiByZW5kZXJlZCBpbWFnZXMsIHJvdGF0aW9uIGlzIGFsd2F5cyBhcHBs aWVkIGJlZm9yZSBmbGlwLgorICAgICAgKHdoZW4gZmxpcAorICAgICAgICAoaW1hZ2UtLWZs aXAtbWFwIG9yaWdpbmFsLW1hcCBzaXplKSkKKyAgICAgICh3aGVuIChtZW1xbCByb3RhdGlv biAnKDkwIDE4MCAyNzApKQorICAgICAgICAoaW1hZ2UtLXJvdGF0ZS1tYXAgb3JpZ2luYWwt bWFwICgtIHJvdGF0aW9uKSBzaXplKSkKKyAgICAgICh1bmxlc3MgKD0gc2NhbGUgMSkKKyAg ICAgICAgKGltYWdlLS1zY2FsZS1tYXAgb3JpZ2luYWwtbWFwICgvIDEuMCBzY2FsZSkpKSkK KyAgICBvcmlnaW5hbC1tYXApKQogCiAoZGVmdW4gaW1hZ2UtLXNjYWxlLW1hcCAobWFwIHNj YWxlKQogICAiU2NhbGUgTUFQIGFjY29yZGluZyB0byBTQ0FMRS4KIERlc3RydWN0aXZlbHkg bW9kaWZpZXMgYW5kIHJldHVybnMgTUFQLiIKLSAgKHVubGVzcyAoPSAxIHNjYWxlKQotICAg IChwY2FzZS1kb2xpc3QgKGAoLGAoLHR5cGUgLiAsY29vcmRzKSAsX2lkICxfcGxpc3QpIG1h cCkKLSAgICAgIChwY2FzZS1leGhhdXN0aXZlIHR5cGUKLSAgICAgICAgKCdyZWN0Ci0gICAg ICAgICAoc2V0ZiAoY2FhciBjb29yZHMpIChyb3VuZCAoKiAoY2FhciBjb29yZHMpIHNjYWxl KSkpCi0gICAgICAgICAoc2V0ZiAoY2RhciBjb29yZHMpIChyb3VuZCAoKiAoY2RhciBjb29y ZHMpIHNjYWxlKSkpCi0gICAgICAgICAoc2V0ZiAoY2FkciBjb29yZHMpIChyb3VuZCAoKiAo Y2FkciBjb29yZHMpIHNjYWxlKSkpCi0gICAgICAgICAoc2V0ZiAoY2RkciBjb29yZHMpIChy b3VuZCAoKiAoY2RkciBjb29yZHMpIHNjYWxlKSkpKQotICAgICAgICAoJ2NpcmNsZQotICAg ICAgICAgKHNldGYgKGNhYXIgY29vcmRzKSAocm91bmQgKCogKGNhYXIgY29vcmRzKSBzY2Fs ZSkpKQotICAgICAgICAgKHNldGYgKGNkYXIgY29vcmRzKSAocm91bmQgKCogKGNkYXIgY29v cmRzKSBzY2FsZSkpKQotICAgICAgICAgKHNldGNkciBjb29yZHMgKHJvdW5kICgqIChjZHIg Y29vcmRzKSBzY2FsZSkpKSkKLSAgICAgICAgKCdwb2x5Ci0gICAgICAgICAoZG90aW1lcyAo aSAobGVuZ3RoIGNvb3JkcykpCi0gICAgICAgICAgIChhc2V0IGNvb3JkcyBpCi0gICAgICAg ICAgICAgICAgIChyb3VuZCAoKiAoYXJlZiBjb29yZHMgaSkgc2NhbGUpKSkpKSkpKQorICAo cGNhc2UtZG9saXN0IChgKCxgKCx0eXBlIC4gLGNvb3JkcykgLF9pZCAsX3BsaXN0KSBtYXAp CisgICAgKHBjYXNlLWV4aGF1c3RpdmUgdHlwZQorICAgICAgKCdyZWN0CisgICAgICAgKHNl dGYgKGNhYXIgY29vcmRzKSAocm91bmQgKCogKGNhYXIgY29vcmRzKSBzY2FsZSkpKQorICAg ICAgIChzZXRmIChjZGFyIGNvb3JkcykgKHJvdW5kICgqIChjZGFyIGNvb3Jkcykgc2NhbGUp KSkKKyAgICAgICAoc2V0ZiAoY2FkciBjb29yZHMpIChyb3VuZCAoKiAoY2FkciBjb29yZHMp IHNjYWxlKSkpCisgICAgICAgKHNldGYgKGNkZHIgY29vcmRzKSAocm91bmQgKCogKGNkZHIg Y29vcmRzKSBzY2FsZSkpKSkKKyAgICAgICgnY2lyY2xlCisgICAgICAgKHNldGYgKGNhYXIg Y29vcmRzKSAocm91bmQgKCogKGNhYXIgY29vcmRzKSBzY2FsZSkpKQorICAgICAgIChzZXRm IChjZGFyIGNvb3JkcykgKHJvdW5kICgqIChjZGFyIGNvb3Jkcykgc2NhbGUpKSkKKyAgICAg ICAoc2V0Y2RyIGNvb3JkcyAocm91bmQgKCogKGNkciBjb29yZHMpIHNjYWxlKSkpKQorICAg ICAgKCdwb2x5CisgICAgICAgKGRvdGltZXMgKGkgKGxlbmd0aCBjb29yZHMpKQorICAgICAg ICAgKGFzZXQgY29vcmRzIGkKKyAgICAgICAgICAgICAgIChyb3VuZCAoKiAoYXJlZiBjb29y ZHMgaSkgc2NhbGUpKSkpKSkpCiAgIG1hcCkKIAogKGRlZnVuIGltYWdlLS1yb3RhdGUtbWFw IChtYXAgcm90YXRpb24gc2l6ZSkKICAgIlJvdGF0ZSBNQVAgYWNjb3JkaW5nIHRvIFJPVEFU SU9OIGFuZCBTSVpFLgorUk9UQVRJT04gbXVzdCBiZSBhIG5vbi16ZXJvIG11bHRpcGxlIG9m IDkwLgogRGVzdHJ1Y3RpdmVseSBtb2RpZmllcyBhbmQgcmV0dXJucyBNQVAuIgotICAodW5s ZXNzICh6ZXJvcCByb3RhdGlvbikKLSAgICAocGNhc2UtZG9saXN0IChgKCxgKCx0eXBlIC4g LGNvb3JkcykgLF9pZCAsX3BsaXN0KSBtYXApCi0gICAgICAocGNhc2UtZXhoYXVzdGl2ZSB0 eXBlCi0gICAgICAgICgncmVjdAotICAgICAgICAgKGxldCAoIHgwIHkwICA7IE5ldyB1cHBl ciBsZWZ0IGNvcm5lcgotICAgICAgICAgICAgICAgIHgxIHkxKSA7IE5ldyBib3R0b20gcmln aHQgY29ybmVyCi0gICAgICAgICAgIChwY2FzZSAodHJ1bmNhdGUgKG1vZCByb3RhdGlvbiAz NjApKSA7IFNldCBuZXcgY29ybmVycyB0by4uLgotICAgICAgICAgICAgICg5MCA7IC4uLm9s ZCBib3R0b20gbGVmdCBhbmQgdXBwZXIgcmlnaHQKLSAgICAgICAgICAgICAgKHNldHEgeDAg KGNhYXIgY29vcmRzKSB5MCAoY2RkciBjb29yZHMpCi0gICAgICAgICAgICAgICAgICAgIHgx IChjYWRyIGNvb3JkcykgeTEgKGNkYXIgY29vcmRzKSkpCi0gICAgICAgICAgICAgKDE4MCA7 IC4uLm9sZCBib3R0b20gcmlnaHQgYW5kIHVwcGVyIGxlZnQKLSAgICAgICAgICAgICAgKHNl dHEgeDAgKGNhZHIgY29vcmRzKSB5MCAoY2RkciBjb29yZHMpCi0gICAgICAgICAgICAgICAg ICAgIHgxIChjYWFyIGNvb3JkcykgeTEgKGNkYXIgY29vcmRzKSkpCi0gICAgICAgICAgICAg KDI3MCA7IC4uLm9sZCB1cHBlciByaWdodCBhbmQgYm90dG9tIGxlZnQKLSAgICAgICAgICAg ICAgKHNldHEgeDAgKGNhZHIgY29vcmRzKSB5MCAoY2RhciBjb29yZHMpCi0gICAgICAgICAg ICAgICAgICAgIHgxIChjYWFyIGNvb3JkcykgeTEgKGNkZHIgY29vcmRzKSkpKQotICAgICAg ICAgICAoc2V0Y2FyIGNvb3JkcyAoaW1hZ2UtLXJvdGF0ZS1jb29yZCB4MCB5MCByb3RhdGlv biBzaXplKSkKLSAgICAgICAgICAgKHNldGNkciBjb29yZHMgKGltYWdlLS1yb3RhdGUtY29v cmQgeDEgeTEgcm90YXRpb24gc2l6ZSkpKSkKLSAgICAgICAgKCdjaXJjbGUKLSAgICAgICAg IChzZXRjYXIgY29vcmRzIChpbWFnZS0tcm90YXRlLWNvb3JkCi0gICAgICAgICAgICAgICAg ICAgICAgICAgKGNhYXIgY29vcmRzKSAoY2RhciBjb29yZHMpIHJvdGF0aW9uIHNpemUpKSkK LSAgICAgICAgKCdwb2x5Ci0gICAgICAgICAoZG90aW1lcyAoaSAobGVuZ3RoIGNvb3Jkcykp Ci0gICAgICAgICAgICh3aGVuICg9IDAgKCUgaSAyKSkKLSAgICAgICAgICAgICAocGNhc2Ut bGV0ICgoYCgseCAuICx5KQotICAgICAgICAgICAgICAgICAgICAgICAgICAoaW1hZ2UtLXJv dGF0ZS1jb29yZAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKGFyZWYgY29vcmRzIGkp IChhcmVmIGNvb3JkcyAoMSsgaSkpIHJvdGF0aW9uIHNpemUpKSkKLSAgICAgICAgICAgICAg IChhc2V0IGNvb3JkcyBpIHgpCi0gICAgICAgICAgICAgICAoYXNldCBjb29yZHMgKDErIGkp IHkpKSkpKSkpKQorICAoc2V0cSByb3RhdGlvbiAobW9kIHJvdGF0aW9uIDM2MCkpCisgIChw Y2FzZS1kb2xpc3QgKGAoLGAoLHR5cGUgLiAsY29vcmRzKSAsX2lkICxfcGxpc3QpIG1hcCkK KyAgICAocGNhc2UtZXhoYXVzdGl2ZSB0eXBlCisgICAgICAoJ3JlY3QKKyAgICAgICAobGV0 ICggeDAgeTAgIDsgTmV3IHVwcGVyIGxlZnQgY29ybmVyCisgICAgICAgICAgICAgIHgxIHkx KSA7IE5ldyBib3R0b20gcmlnaHQgY29ybmVyCisgICAgICAgICAocGNhc2Ugcm90YXRpb24g OyBTZXQgbmV3IGNvcm5lcnMgdG8uLi4KKyAgICAgICAgICAgKDkwIDsgLi4ub2xkIGJvdHRv bSBsZWZ0IGFuZCB1cHBlciByaWdodAorICAgICAgICAgICAgKHNldHEgeDAgKGNhYXIgY29v cmRzKSB5MCAoY2RkciBjb29yZHMpCisgICAgICAgICAgICAgICAgICB4MSAoY2FkciBjb29y ZHMpIHkxIChjZGFyIGNvb3JkcykpKQorICAgICAgICAgICAoMTgwIDsgLi4ub2xkIGJvdHRv bSByaWdodCBhbmQgdXBwZXIgbGVmdAorICAgICAgICAgICAgKHNldHEgeDAgKGNhZHIgY29v cmRzKSB5MCAoY2RkciBjb29yZHMpCisgICAgICAgICAgICAgICAgICB4MSAoY2FhciBjb29y ZHMpIHkxIChjZGFyIGNvb3JkcykpKQorICAgICAgICAgICAoMjcwIDsgLi4ub2xkIHVwcGVy IHJpZ2h0IGFuZCBib3R0b20gbGVmdAorICAgICAgICAgICAgKHNldHEgeDAgKGNhZHIgY29v cmRzKSB5MCAoY2RhciBjb29yZHMpCisgICAgICAgICAgICAgICAgICB4MSAoY2FhciBjb29y ZHMpIHkxIChjZGRyIGNvb3JkcykpKSkKKyAgICAgICAgIChzZXRjYXIgY29vcmRzIChpbWFn ZS0tcm90YXRlLWNvb3JkIHgwIHkwIHJvdGF0aW9uIHNpemUpKQorICAgICAgICAgKHNldGNk ciBjb29yZHMgKGltYWdlLS1yb3RhdGUtY29vcmQgeDEgeTEgcm90YXRpb24gc2l6ZSkpKSkK KyAgICAgICgnY2lyY2xlCisgICAgICAgKHNldGNhciBjb29yZHMgKGltYWdlLS1yb3RhdGUt Y29vcmQKKyAgICAgICAgICAgICAgICAgICAgICAgKGNhYXIgY29vcmRzKSAoY2RhciBjb29y ZHMpIHJvdGF0aW9uIHNpemUpKSkKKyAgICAgICgncG9seQorICAgICAgIChkb3RpbWVzIChp IChsZW5ndGggY29vcmRzKSkKKyAgICAgICAgICh3aGVuICg9IDAgKCUgaSAyKSkKKyAgICAg ICAgICAgKHBjYXNlLWxldCAoKGAoLHggLiAseSkKKyAgICAgICAgICAgICAgICAgICAgICAg IChpbWFnZS0tcm90YXRlLWNvb3JkCisgICAgICAgICAgICAgICAgICAgICAgICAgKGFyZWYg Y29vcmRzIGkpIChhcmVmIGNvb3JkcyAoMSsgaSkpIHJvdGF0aW9uIHNpemUpKSkKKyAgICAg ICAgICAgICAoYXNldCBjb29yZHMgaSB4KQorICAgICAgICAgICAgIChhc2V0IGNvb3JkcyAo MSsgaSkgeSkpKSkpKSkKICAgbWFwKQogCiAoZGVmdW4gaW1hZ2UtLXJvdGF0ZS1jb29yZCAo eCB5IGFuZ2xlIHNpemUpCiAgICJSb3RhdGUgY29vcmRpbmF0ZXMgWCBhbmQgWSBieSBBTkdM RSBpbiBpbWFnZSBvZiBTSVpFLgotQU5HTEUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDkwLiAg UmV0dXJucyBhIGNvbnMgY2VsbCBvZiByb3VuZGVkCi1jb29yZGluYXRlcyAoWDEgWTEpLiIK K0FOR0xFIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA5MCBpbiBbOTAgMTgwIDI3MF0uICBSZXR1 cm5zIGEgY29ucyBjZWxsIG9mCityb3VuZGVkIGNvb3JkaW5hdGVzIChYMSBZMSkuIgogICAo cGNhc2UtbGV0KiAoKHJhZGlhbiAoKiAoLyBhbmdsZSAxODAuMCkgZmxvYXQtcGkpKQogICAg ICAgICAgICAgICAgKGAoLHdpZHRoIC4gLGhlaWdodCkgc2l6ZSkKICAgICAgICAgICAgICAg IDs7IHkgaXMgcG9zaXRpdmUsIGJ1dCB3ZSBhcmUgaW4gdGhlIGJvdHRvbS1yaWdodCBxdWFk cmFudApAQCAtMTU1MiwyNSArMTU3NiwyNCBAQCBpbWFnZS0tcm90YXRlLWNvb3JkCiAgICAg ICAgICAgICAgICAoeTEgKC0geTEpKSkKICAgICAoY29ucyAocm91bmQgeDEpIChyb3VuZCB5 MSkpKSkKIAotKGRlZnVuIGltYWdlLS1mbGlwLW1hcCAobWFwIGZsaXAgc2l6ZSkKLSAgIkhv cml6b250YWxseSBmbGlwIE1BUCBhY2NvcmRpbmcgdG8gRkxJUCBhbmQgU0laRS4KKyhkZWZ1 biBpbWFnZS0tZmxpcC1tYXAgKG1hcCBzaXplKQorICAiSG9yaXpvbnRhbGx5IGZsaXAgTUFQ IGFjY29yZGluZyB0byBTSVpFLgogRGVzdHJ1Y3RpdmVseSBtb2RpZmllcyBhbmQgcmV0dXJu cyBNQVAuIgotICAod2hlbiBmbGlwCi0gICAgKHBjYXNlLWRvbGlzdCAoYCgsYCgsdHlwZSAu ICxjb29yZHMpICxfaWQgLF9wbGlzdCkgbWFwKQotICAgICAgKHBjYXNlLWV4aGF1c3RpdmUg dHlwZQotICAgICAgICAoJ3JlY3QKLSAgICAgICAgIChsZXQgKCh4MCAoLSAoY2FyIHNpemUp IChjYWRyIGNvb3JkcykpKQotICAgICAgICAgICAgICAgKHkwIChjZGFyIGNvb3JkcykpCi0g ICAgICAgICAgICAgICAoeDEgKC0gKGNhciBzaXplKSAoY2FhciBjb29yZHMpKSkKLSAgICAg ICAgICAgICAgICh5MSAoY2RkciBjb29yZHMpKSkKLSAgICAgICAgICAgKHNldGNhciBjb29y ZHMgKGNvbnMgeDAgeTApKQotICAgICAgICAgICAoc2V0Y2RyIGNvb3JkcyAoY29ucyB4MSB5 MSkpKSkKLSAgICAgICAgKCdjaXJjbGUKLSAgICAgICAgIChzZXRmIChjYWFyIGNvb3Jkcykg KC0gKGNhciBzaXplKSAoY2FhciBjb29yZHMpKSkpCi0gICAgICAgICgncG9seQotICAgICAg ICAgKGRvdGltZXMgKGkgKGxlbmd0aCBjb29yZHMpKQotICAgICAgICAgICAod2hlbiAoPSAw ICglIGkgMikpCi0gICAgICAgICAgICAgKGFzZXQgY29vcmRzIGkgKC0gKGNhciBzaXplKSAo YXJlZiBjb29yZHMgaSkpKSkpKSkpKQorICAocGNhc2UtZG9saXN0IChgKCxgKCx0eXBlIC4g LGNvb3JkcykgLF9pZCAsX3BsaXN0KSBtYXApCisgICAgKHBjYXNlLWV4aGF1c3RpdmUgdHlw ZQorICAgICAgKCdyZWN0CisgICAgICAgKGxldCAoKHgwICgtIChjYXIgc2l6ZSkgKGNhZHIg Y29vcmRzKSkpCisgICAgICAgICAgICAgKHkwIChjZGFyIGNvb3JkcykpCisgICAgICAgICAg ICAgKHgxICgtIChjYXIgc2l6ZSkgKGNhYXIgY29vcmRzKSkpCisgICAgICAgICAgICAgKHkx IChjZGRyIGNvb3JkcykpKQorICAgICAgICAgKHNldGNhciBjb29yZHMgKGNvbnMgeDAgeTAp KQorICAgICAgICAgKHNldGNkciBjb29yZHMgKGNvbnMgeDEgeTEpKSkpCisgICAgICAoJ2Np cmNsZQorICAgICAgIChzZXRmIChjYWFyIGNvb3JkcykgKC0gKGNhciBzaXplKSAoY2FhciBj b29yZHMpKSkpCisgICAgICAoJ3BvbHkKKyAgICAgICAoZG90aW1lcyAoaSAobGVuZ3RoIGNv b3JkcykpCisgICAgICAgICAod2hlbiAoPSAwICglIGkgMikpCisgICAgICAgICAgIChhc2V0 IGNvb3JkcyBpICgtIChjYXIgc2l6ZSkgKGFyZWYgY29vcmRzIGkpKSkpKSkpKQogICBtYXAp CiAKIChwcm92aWRlICdpbWFnZSkKZGlmZiAtLWdpdCBhL3Rlc3QvbGlzcC9pbWFnZS10ZXN0 cy5lbCBiL3Rlc3QvbGlzcC9pbWFnZS10ZXN0cy5lbAppbmRleCA2YTVmMDNlMzhhMC4uMDIw NzgxZWZmNTAgMTAwNjQ0Ci0tLSBhL3Rlc3QvbGlzcC9pbWFnZS10ZXN0cy5lbAorKysgYi90 ZXN0L2xpc3AvaW1hZ2UtdGVzdHMuZWwKQEAgLTE1OCw3ICsxNTgsNyBAQCBpbWFnZS1yb3Rh dGUKIChlcnQtZGVmdGVzdCBpbWFnZS1jcmVhdGUtaW1hZ2Utd2l0aC1tYXAgKCkKICAgIlRl c3QgdGhhdCBgY3JlYXRlLWltYWdlJyBjb3JyZWN0bHkgYWRkcyA6bWFwIGFuZC9vciA6b3Jp Z2luYWwtbWFwLiIKICAgKHNraXAtdW5sZXNzIChkaXNwbGF5LWltYWdlcy1wKSkKLSAgKGxl dCAoKGRhdGEgImZvbyIpCisgIChsZXQgKChkYXRhICI8c3ZnIHdpZHRoPVwiMzBcIiBoZWln aHQ9XCIzMFwiIHZlcnNpb249XCIxLjFcIiB4bWxucz1cImh0dHA6Ly93d3cudzMub3JnLzIw MDAvc3ZnXCIgeG1sbnM6eGxpbms9XCJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rXCI+ PC9zdmc+IikKICAgICAgICAgKG1hcCAnKCgoY2lyY2xlICgxIC4gIDEpIC4gIDEpIGEpKSkK ICAgICAgICAgKG9yaWdpbmFsLW1hcCAnKCgoY2lyY2xlICgyIC4gIDIpIC4gIDIpIGEpKSkK ICAgICAgICAgKG9yaWdpbmFsLW1hcC1vdGhlciAnKCgoY2lyY2xlICgzIC4gMykgLiAzKSBh KSkpKQpAQCAtMjgyLDcgKzI4Miw3IEBAIGltYWdlLXRyYW5zZm9ybS1tYXAKICAgICAgICAg ICAgICAgICAgICAnKCgoY2lyY2xlICgxMiAuIDQpIC4gMikgImNpcmNsZSIpCiAgICAgICAg ICAgICAgICAgICAgICAoKHJlY3QgKDcgLiAzKSA5IC4gOCkgInJlY3QiKQogICAgICAgICAg ICAgICAgICAgICAgKChwb2x5IC4gWzQgNiAyIDcgMSAyXSkgInBvbHkiKSkpKQotICAgIChz aG91bGQgKGVxdWFsIChpbWFnZS0tZmxpcC1tYXAgKGNvcHktdHJlZSBtYXAgdCkgdCBgKCx3 aWR0aCAuICxoZWlnaHQpKQorICAgIChzaG91bGQgKGVxdWFsIChpbWFnZS0tZmxpcC1tYXAg KGNvcHktdHJlZSBtYXAgdCkgYCgsd2lkdGggLiAsaGVpZ2h0KSkKICAgICAgICAgICAgICAg ICAgICAnKCgoY2lyY2xlICg2IC4gMykgLiAyKSAiY2lyY2xlIikKICAgICAgICAgICAgICAg ICAgICAgICgocmVjdCAoMiAuIDYpIDcgLiA4KSAicmVjdCIpCiAgICAgICAgICAgICAgICAg ICAgICAoKHBvbHkgLiBbNCAxMSAzIDEzIDggMTRdKSAicG9seSIpKSkpCkBAIC0yOTEsNyAr MjkxLDcgQEAgaW1hZ2UtdHJhbnNmb3JtLW1hcAogICAgICAgOzsgU2NhbGUgc2l6ZSBiZWNh dXNlIHRoZSBtYXAgaGFzIGJlZW4gc2NhbGVkLgogICAgICAgKGltYWdlLS1yb3RhdGUtbWFw IGNvcHkgOTAgYCgsKCogMiB3aWR0aCkgLiAsKCogMiBoZWlnaHQpKSkKICAgICAgIDs7IFN3 YXAgd2lkdGggYW5kIGhlaWdodCBiZWNhdXNlIHRoZSBtYXAgaGFzIGJlZW4gZmxpcHBlZC4K LSAgICAgIChpbWFnZS0tZmxpcC1tYXAgY29weSB0IGAoLCgqIDIgaGVpZ2h0KSAuICwoKiAy IHdpZHRoKSkpCisgICAgICAoaW1hZ2UtLWZsaXAtbWFwIGNvcHkgYCgsKCogMiBoZWlnaHQp IC4gLCgqIDIgd2lkdGgpKSkKICAgICAgIChzaG91bGQgKGVxdWFsIGNvcHkKICAgICAgICAg ICAgICAgICAgICAgICcoKChjaXJjbGUgKDYgLiA4KSAuIDQpICJjaXJjbGUiKQogICAgICAg ICAgICAgICAgICAgICAgICAoKHJlY3QgKDEyIC4gNikgMTYgLiAxNikgInJlY3QiKQo= --------------1Eg710s2HZvrL6xKWqOIBWUm--