From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 84711 invoked by alias); 25 Oct 2019 05:55:40 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 84699 invoked by uid 89); 25 Oct 2019 05:55:39 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-18.3 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.1 spammy=H*i:sk:CAMZc-b, Ofast, ofast, sk:hongtao X-HELO: mail-oi1-f194.google.com Received: from mail-oi1-f194.google.com (HELO mail-oi1-f194.google.com) (209.85.167.194) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Fri, 25 Oct 2019 05:55:36 +0000 Received: by mail-oi1-f194.google.com with SMTP id j7so742866oib.3 for ; Thu, 24 Oct 2019 22:55:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=MAQF/FRoZEqvApvyPmAVoYjn8D3Vyn6dhQB7Shj+Dxc=; b=iR4BRf7DqL98t7NTj/xR/lxE1saqSBMzyr/chJ3RXGMzIJe+TuEVjR0YwICfxo1XtS qScZ0CopECWwkU90pXAAtTollgDLt/6DllR/KbPc0s2Gx79tFpBY8rNlYR8Zixa9X+3b jtruVvWmqRo4Zyi0PIwGxMGXlXbZHXVQv/ev3i9o39xMdnnVLRtvruq20+dYKzooYKki g7fbnQhC7i5jEGW8q5KD5X/gu5GRMoDTbNdtF6qwcQoVe+LBcDkn/6lzbVMmOTgZQQfp fA+48yWDGLtK6oh/DX6ONEZe2Bk77+PTJ+UoLYZ5znuNbwU8HAYxSULM36XAhsGKJ+vj R9Dw== MIME-Version: 1.0 References: In-Reply-To: From: Hongtao Liu Date: Fri, 25 Oct 2019 06:04:00 -0000 Message-ID: Subject: Re: [PATCH target/89071] Fix false dependence of scalar operations vrcp/vsqrt/vrsqrt/vrndscale To: Uros Bizjak Cc: GCC Patches Content-Type: multipart/mixed; boundary="00000000000068ef730595b5ccaa" X-IsSubscribed: yes X-SW-Source: 2019-10/txt/msg01790.txt.bz2 --00000000000068ef730595b5ccaa Content-Type: text/plain; charset="UTF-8" Content-length: 4651 On Fri, Oct 25, 2019 at 1:23 PM Hongtao Liu wrote: > > On Fri, Oct 25, 2019 at 2:39 AM Uros Bizjak wrote: > > > > On Wed, Oct 23, 2019 at 7:48 AM Hongtao Liu wrote: > > > > > > Update patch: > > > Add m constraint to define_insn (sse_1_round > > *sse_1_round > > when under sse4 but not avx512f. > > > > It looks to me that the original insn is incompletely defined. It > > should use nonimmediate_operand, "m" constraint and pointer > > size modifier. Something like: > > > > (define_insn "sse4_1_round" > > [(set (match_operand:VF_128 0 "register_operand" "=Yr,*x,x,v") > > (vec_merge:VF_128 > > (unspec:VF_128 > > [(match_operand:VF_128 2 "nonimmediate_operand" "Yrm,*xm,xm,vm") > > (match_operand:SI 3 "const_0_to_15_operand" "n,n,n,n")] > > UNSPEC_ROUND) > > (match_operand:VF_128 1 "register_operand" "0,0,x,v") > > (const_int 1)))] > > "TARGET_SSE4_1" > > "@ > > round\t{%3, %2, %0|%0, %2, %3} > > round\t{%3, %2, %0|%0, %2, %3} > > vround\t{%3, %2, %1, %0|%0, %1, %2, %3} > > vrndscale\t{%3, %2, %1, %0|%0, %1, %2, %3}" > > > > > > > > Changelog: > > > gcc/ > > > * config/i386/sse.md: (sse4_1_round): > > > Change constraint x to xm > > > since vround support memory operand. > > > * (*sse4_1_round): Ditto. > > > > > > Bootstrap and regression test ok. > > > > > > On Wed, Oct 23, 2019 at 9:56 AM Hongtao Liu wrote: > > > > > > > > Hi uros: > > > > This patch fixes false dependence of scalar operations > > > > vrcp/vsqrt/vrsqrt/vrndscale. > > > > Bootstrap ok, regression test on i386/x86 ok. > > > > > > > > It does something like this: > > > > ----- > > > > For scalar instructions with both xmm operands: > > > > > > > > op %xmmN,%xmmQ,%xmmQ ----> op %xmmN, %xmmN, %xmmQ > > > > > > > > for scalar instructions with one mem or gpr operand: > > > > > > > > op mem/gpr, %xmmQ, %xmmQ > > > > > > > > ---> using pass rpad ----> > > > > > > > > xorps %xmmN, %xmmN, %xxN > > > > op mem/gpr, %xmmN, %xmmQ > > > > > > > > Performance influence of SPEC2017 fprate which is tested on SKX > > > > > > > > 503.bwaves_r -0.03% > > > > 507.cactuBSSN_r -0.22% > > > > 508.namd_r -0.02% > > > > 510.parest_r 0.37% > > > > 511.povray_r 0.74% > > > > 519.lbm_r 0.24% > > > > 521.wrf_r 2.35% > > > > 526.blender_r 0.71% > > > > 527.cam4_r 0.65% > > > > 538.imagick_r 0.95% > > > > 544.nab_r -0.37 > > > > 549.fotonik3d_r 0.24% > > > > 554.roms_r 0.90% > > > > fprate geomean 0.50% > > > > ----- > > > > > > > > Changelog > > > > gcc/ > > > > * config/i386/i386.md (*rcpsf2_sse): Add > > > > avx_partial_xmm_update, prefer m constraint for TARGET_AVX. > > > > (*rsqrtsf2_sse): Ditto. > > > > (*sqrt2_sse): Ditto. > > > > (sse4_1_round2): separate constraint vm, add > > > > avx_partail_xmm_update, prefer m constraint for TARGET_AVX. > > > > * config/i386/sse.md (*sse_vmrcpv4sf2"): New define_insn used > > > > by pass rpad. > > > > (*_vmsqrt2*): > > > > Ditto. > > > > (*sse_vmrsqrtv4sf2): Ditto. > > > > (*avx512f_rndscale): Ditto. > > > > (*sse4_1_round): Ditto. > > > > > > > > gcc/testsuite > > > > * gcc.target/i386/pr87007-4.c: New test. > > > > * gcc.target/i386/pr87007-5.c: Ditto. > > > > > > > > > > > > -- > > > > BR, > > > > Hongtao > > > > (set (attr "preferred_for_speed") > > (cond [(eq_attr "alternative" "1") > > (symbol_ref "TARGET_AVX || !TARGET_SSE_PARTIAL_REG_DEPENDENCY") > > (eq_attr "alternative" "2") > > - (symbol_ref "!TARGET_SSE_PARTIAL_REG_DEPENDENCY") > > + (symbol_ref "TARGET_AVX || !TARGET_SSE_PARTIAL_REG_DEPENDENCY") > > ] > > (symbol_ref "true")))]) > > > > This can be written as: > > > > (set (attr "preferred_for_speed") > > (cond [(match_test "TARGET_AVX") > > (symbol_ref "true") > > (eq_attr "alternative" "1,2") > > (symbol_ref "!TARGET_SSE_PARTIAL_REG_DEPENDENCY") > > ] > > (symbol_ref "true")))]) > > > > Uros. > > Yes, after these fixed, i'll upstream to trunk, ok? Update patch. > -- > BR, > Hongtao -- BR, Hongtao --00000000000068ef730595b5ccaa Content-Type: text/x-patch; charset="US-ASCII"; name="0001-Fix-false-dependence-of-scalar-operation-vrcp-vsqrt-V3.patch" Content-Disposition: attachment; filename="0001-Fix-false-dependence-of-scalar-operation-vrcp-vsqrt-V3.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_k25q5d7i0 Content-length: 18117 RnJvbSAxODkyZjdiNTJlYTBjNWI1OWQzZDBjOWU1MDMzMGY3MDcxMmZjOWNj IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBsaXVob25ndCA8aG9u Z3Rhby5saXVAaW50ZWwuY29tPgpEYXRlOiBXZWQsIDkgT2N0IDIwMTkgMTE6 MjE6MjUgKzA4MDAKU3ViamVjdDogW1BBVENIXSBGaXggZmFsc2UgZGVwZW5k ZW5jZSBvZiBzY2FsYXIgb3BlcmF0aW9uCiB2cmNwL3ZzcXJ0L3Zyc3FydC92 cm5kc2NhbGUKCkZvciBpbnN0cnVjdGlvbnMgd2l0aCB4bW0gb3BlcmFuZDoK Cm9wICV4bW1OLCV4bW1RLCV4bW1RIC0tLS0+IG9wICV4bW1OLCAleG1tTiwg JXhtbVEKCmZvciBpbnN0cnVjdGlvbiB3aXRoIG1lbSBvcGVyYW5kIG9yIGdw ciBvcGVyYW5kOgoKb3AgbWVtL2dwciwgJXhtbVEsICV4bW1RCgotLS0+ICB1 c2luZyBwYXNzIHJwYWQgLS0tLT4KCnhvcnBzICV4bW1OLCAleG1tTiwgJXh4 TgpvcCBtZW0vZ3ByLCAleG1tTiwgJXhtbVEKClBlcmZvcm1hbmNlIGluZmx1 ZW5jZSBvZiBTUEVDMjAxNyBmcHJhdGUgd2hpY2ggaXMgdGVzdGVkIG9uIFNL WAotLS0tCjUwMy5id2F2ZXNfcgktMC4wMyUKNTA3LmNhY3R1QlNTTl9yIC0w LjIyJQo1MDgubmFtZF9yCS0wLjAyJQo1MTAucGFyZXN0X3IJMC4zNyUKNTEx LnBvdnJheV9yCTAuNzQlCjUxOS5sYm1fcgkwLjI0JQo1MjEud3JmX3IJMi4z NSUKNTI2LmJsZW5kZXJfcgkwLjcxJQo1MjcuY2FtNF9yCTAuNjUlCjUzOC5p bWFnaWNrX3IJMC45NSUKNTQ0Lm5hYl9yCS0wLjM3CjU0OS5mb3RvbmlrM2Rf ciAwLjI0JQo1NTQucm9tc19yCTAuOTAlCmZwcmF0ZSBnZW9tZWFuCTAuNTAl Ci0tLS0tCgpDaGFuZ2Vsb2cKZ2NjLwoJKiBjb25maWcvaTM4Ni9pMzg2Lm1k ICgqcmNwc2YyX3NzZSk6IEFkZAoJYXZ4X3BhcnRpYWxfeG1tX3VwZGF0ZSwg cHJlZmVyIG0gY29uc3RyYWludCBmb3IgVEFSR0VUX0FWWC4KCSgqcnNxcnRz ZjJfc3NlKTogRGl0dG8uCgkoKnNxcnQ8bW9kZT4yX3NzZSk6IERpdHRvLgoJ KHNzZTRfMV9yb3VuZDxtb2RlPjIpOiBzZXBhcmF0ZSBjb25zdHJhaW50IHZt LCBhZGQKCWF2eF9wYXJ0YWlsX3htbV91cGRhdGUsIHByZWZlciBtIGNvbnN0 cmFpbnQgZm9yIFRBUkdFVF9BVlguCgkqIGNvbmZpZy9pMzg2L3NzZS5tZCAo KnNzZV92bXJjcHY0c2YyIik6IE5ldyBkZWZpbmVfaW5zbiB1c2VkCglieSBw YXNzIHJwYWQuCgkoKjxzc2U+X3Ztc3FydDxtb2RlPjI8bWFza19zY2FsYXJf bmFtZT48cm91bmRfc2NhbGFyX25hbWU+Kik6CglEaXR0by4KCSgqc3NlX3Zt cnNxcnR2NHNmMik6IERpdHRvLgoJKCphdng1MTJmX3JuZHNjYWxlPG1vZGU+ PHJvdW5kX3NhZW9ubHlfbmFtZT4pOiBEaXR0by4KCSgqc3NlNF8xX3JvdW5k PHNzZXNjYWxhcm1vZGVzdWZmaXg+KTogRGl0dG8uCgkoc3NlNF8xX3JvdW5k PHNzZXNjYWxhcm1vZGVzdWZmaXg+KTogQWRkIG0gY29uc3RyYWludCBhbmQK CTxpcHRyPiBwb2ludGVyIHNpemUgbW9kaWZpZXIgc2luY2UgdnJvdW5kIHN1 cHBvcnQgbWVtb3J5IG9wZXJhbmQuCgpnY2MvdGVzdHN1aXRlCgkqIGdjYy50 YXJnZXQvaTM4Ni9wcjg3MDA3LTQuYzogTmV3IHRlc3QuCgkqIGdjYy50YXJn ZXQvaTM4Ni9wcjg3MDA3LTUuYzogRGl0dG8uCi0tLQogZ2NjL2NvbmZpZy9p Mzg2L2kzODYubWQgICAgICAgICAgICAgICAgICAgfCAgNjcgKysrKysrKy0t LS0tLS0KIGdjYy9jb25maWcvaTM4Ni9zc2UubWQgICAgICAgICAgICAgICAg ICAgIHwgMTA1ICsrKysrKysrKysrKysrKysrKysrLS0KIGdjYy90ZXN0c3Vp dGUvZ2NjLnRhcmdldC9pMzg2L3ByODcwMDctNC5jIHwgIDE4ICsrKysKIGdj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODcwMDctNS5jIHwgIDE4 ICsrKysKIDQgZmlsZXMgY2hhbmdlZCwgMTcyIGluc2VydGlvbnMoKyksIDM2 IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3Vp dGUvZ2NjLnRhcmdldC9pMzg2L3ByODcwMDctNC5jCiBjcmVhdGUgbW9kZSAx MDA2NDQgZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4NzAwNy01 LmMKCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYvaTM4Ni5tZCBiL2dj Yy9jb25maWcvaTM4Ni9pMzg2Lm1kCmluZGV4IDVlMDc5NTk1M2Q4Li5mYjIy MzVhNWUzNCAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L2kzODYubWQK KysrIGIvZ2NjL2NvbmZpZy9pMzg2L2kzODYubWQKQEAgLTE0ODQzLDEzICsx NDg0MywxNCBAQAogICAgKHNldF9hdHRyICJidHZlcjJfc3NlX2F0dHIiICJy Y3AiKQogICAgKHNldF9hdHRyICJwcmVmaXgiICJtYXliZV92ZXgiKQogICAg KHNldF9hdHRyICJtb2RlIiAiU0YiKQorICAgKHNldF9hdHRyICJhdnhfcGFy dGlhbF94bW1fdXBkYXRlIiAiZmFsc2UsZmFsc2UsdHJ1ZSIpCiAgICAoc2V0 IChhdHRyICJwcmVmZXJyZWRfZm9yX3NwZWVkIikKLSAgICAgKGNvbmQgWyhl cV9hdHRyICJhbHRlcm5hdGl2ZSIgIjEiKQotCSAgICAgIChzeW1ib2xfcmVm ICJUQVJHRVRfQVZYIHx8ICFUQVJHRVRfU1NFX1BBUlRJQUxfUkVHX0RFUEVO REVOQ1kiKQotCSAgIChlcV9hdHRyICJhbHRlcm5hdGl2ZSIgIjIiKQotCSAg ICAgIChzeW1ib2xfcmVmICIhVEFSR0VUX1NTRV9QQVJUSUFMX1JFR19ERVBF TkRFTkNZIikKLQkgICBdCi0JICAgKHN5bWJvbF9yZWYgInRydWUiKSkpXSkK KyAgICAgIChjb25kIFsobWF0Y2hfdGVzdCAiVEFSR0VUX0FWWCIpCisJICAg ICAgIChzeW1ib2xfcmVmICJ0cnVlIikKKwkgICAgIChlcV9hdHRyICJhbHRl cm5hdGl2ZSIgIjEsMiIpCisJICAgICAgIChzeW1ib2xfcmVmICIhVEFSR0VU X1NTRV9QQVJUSUFMX1JFR19ERVBFTkRFTkNZIikKKwkgICAgXQorCSAgICAo c3ltYm9sX3JlZiAidHJ1ZSIpKSldKQogCiAoZGVmaW5lX2luc24gIipmb3Bf eGZfMV9pMzg3IgogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpYRiAwICJyZWdp c3Rlcl9vcGVyYW5kIiAiPWYsZiIpCkBAIC0xNTA4OSwxMyArMTUwOTAsMTQg QEAKICAgIChzZXRfYXR0ciAiYnR2ZXIyX3NzZV9hdHRyIiAicmNwIikKICAg IChzZXRfYXR0ciAicHJlZml4IiAibWF5YmVfdmV4IikKICAgIChzZXRfYXR0 ciAibW9kZSIgIlNGIikKKyAgIChzZXRfYXR0ciAiYXZ4X3BhcnRpYWxfeG1t X3VwZGF0ZSIgImZhbHNlLGZhbHNlLHRydWUiKQogICAgKHNldCAoYXR0ciAi cHJlZmVycmVkX2Zvcl9zcGVlZCIpCi0gICAgIChjb25kIFsoZXFfYXR0ciAi YWx0ZXJuYXRpdmUiICIxIikKLQkgICAgICAoc3ltYm9sX3JlZiAiVEFSR0VU X0FWWCB8fCAhVEFSR0VUX1NTRV9QQVJUSUFMX1JFR19ERVBFTkRFTkNZIikK LQkgICAoZXFfYXR0ciAiYWx0ZXJuYXRpdmUiICIyIikKLQkgICAgICAoc3lt Ym9sX3JlZiAiIVRBUkdFVF9TU0VfUEFSVElBTF9SRUdfREVQRU5ERU5DWSIp Ci0JICAgXQotCSAgIChzeW1ib2xfcmVmICJ0cnVlIikpKV0pCisgICAgICAo Y29uZCBbKG1hdGNoX3Rlc3QgIlRBUkdFVF9BVlgiKQorCSAgICAgICAoc3lt Ym9sX3JlZiAidHJ1ZSIpCisJICAgICAoZXFfYXR0ciAiYWx0ZXJuYXRpdmUi ICIxLDIiKQorCSAgICAgICAoc3ltYm9sX3JlZiAiIVRBUkdFVF9TU0VfUEFS VElBTF9SRUdfREVQRU5ERU5DWSIpCisJICAgIF0KKwkgICAgKHN5bWJvbF9y ZWYgInRydWUiKSkpXSkKIAogKGRlZmluZV9leHBhbmQgInJzcXJ0c2YyIgog ICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTRiAwICJyZWdpc3Rlcl9vcGVyYW5k IikKQEAgLTE1MTIwLDE0ICsxNTEyMiwxNSBAQAogICAgKHNldF9hdHRyICJh dG9tX3NzZV9hdHRyIiAic3FydCIpCiAgICAoc2V0X2F0dHIgImJ0dmVyMl9z c2VfYXR0ciIgInNxcnQiKQogICAgKHNldF9hdHRyICJwcmVmaXgiICJtYXli ZV92ZXgiKQorICAgKHNldF9hdHRyICJhdnhfcGFydGlhbF94bW1fdXBkYXRl IiAiZmFsc2UsZmFsc2UsdHJ1ZSIpCiAgICAoc2V0X2F0dHIgIm1vZGUiICI8 TU9ERT4iKQogICAgKHNldCAoYXR0ciAicHJlZmVycmVkX2Zvcl9zcGVlZCIp Ci0gICAgIChjb25kIFsoZXFfYXR0ciAiYWx0ZXJuYXRpdmUiICIxIikKLQkg ICAgICAoc3ltYm9sX3JlZiAiVEFSR0VUX0FWWCB8fCAhVEFSR0VUX1NTRV9Q QVJUSUFMX1JFR19ERVBFTkRFTkNZIikKLQkgICAoZXFfYXR0ciAiYWx0ZXJu YXRpdmUiICIyIikKLQkgICAgICAoc3ltYm9sX3JlZiAiIVRBUkdFVF9TU0Vf UEFSVElBTF9SRUdfREVQRU5ERU5DWSIpCi0JICAgXQotCSAgIChzeW1ib2xf cmVmICJ0cnVlIikpKV0pCisgICAgICAoY29uZCBbKG1hdGNoX3Rlc3QgIlRB UkdFVF9BVlgiKQorCSAgICAgICAoc3ltYm9sX3JlZiAidHJ1ZSIpCisJICAg ICAoZXFfYXR0ciAiYWx0ZXJuYXRpdmUiICIxLDIiKQorCSAgICAgICAoc3lt Ym9sX3JlZiAiIVRBUkdFVF9TU0VfUEFSVElBTF9SRUdfREVQRU5ERU5DWSIp CisJICAgIF0KKwkgICAgKHN5bWJvbF9yZWYgInRydWUiKSkpXSkKIAogKGRl ZmluZV9leHBhbmQgInNxcnQ8bW9kZT4yIgogICBbKHNldCAobWF0Y2hfb3Bl cmFuZDpNT0RFRiAwICJyZWdpc3Rlcl9vcGVyYW5kIikKQEAgLTE2MjYxLDMw ICsxNjI2NCwzMiBAQAogDAogCiAoZGVmaW5lX2luc24gInNzZTRfMV9yb3Vu ZDxtb2RlPjIiCi0gIFsoc2V0IChtYXRjaF9vcGVyYW5kOk1PREVGIDAgInJl Z2lzdGVyX29wZXJhbmQiICI9eCx4LHgsdiIpCisgIFsoc2V0IChtYXRjaF9v cGVyYW5kOk1PREVGIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9eCx4LHgsdix2 IikKIAkodW5zcGVjOk1PREVGCi0JICBbKG1hdGNoX29wZXJhbmQ6TU9ERUYg MSAibm9uaW1tZWRpYXRlX29wZXJhbmQiICIwLHgsbSx2bSIpCi0JICAgKG1h dGNoX29wZXJhbmQ6U0kgMiAiY29uc3RfMF90b18xNV9vcGVyYW5kIiAibixu LG4sbiIpXQorCSAgWyhtYXRjaF9vcGVyYW5kOk1PREVGIDEgIm5vbmltbWVk aWF0ZV9vcGVyYW5kIiAiMCx4LG0sdixtIikKKwkgICAobWF0Y2hfb3BlcmFu ZDpTSSAyICJjb25zdF8wX3RvXzE1X29wZXJhbmQiICJuLG4sbixuLG4iKV0K IAkgIFVOU1BFQ19ST1VORCkpXQogICAiVEFSR0VUX1NTRTRfMSIKICAgIkAK ICAgICV2cm91bmQ8c3NlbW9kZXN1ZmZpeD5cdHslMiwgJWQxLCAlMHwlMCwg JWQxLCAlMn0KICAgICV2cm91bmQ8c3NlbW9kZXN1ZmZpeD5cdHslMiwgJWQx LCAlMHwlMCwgJWQxLCAlMn0KICAgICV2cm91bmQ8c3NlbW9kZXN1ZmZpeD5c dHslMiwgJTEsICVkMHwlZDAsICUxLCAlMn0KKyAgIHZybmRzY2FsZTxzc2Vt b2Rlc3VmZml4Plx0eyUyLCAlZDEsICUwfCUwLCAlZDEsICUyfQogICAgdnJu ZHNjYWxlPHNzZW1vZGVzdWZmaXg+XHR7JTIsICUxLCAlZDB8JWQwLCAlMSwg JTJ9IgogICBbKHNldF9hdHRyICJ0eXBlIiAic3NlY3Z0IikKLSAgIChzZXRf YXR0ciAicHJlZml4X2V4dHJhIiAiMSwxLDEsKiIpCi0gICAoc2V0X2F0dHIg Imxlbmd0aF9pbW1lZGlhdGUiICIqLCosKiwxIikKLSAgIChzZXRfYXR0ciAi cHJlZml4IiAibWF5YmVfdmV4LG1heWJlX3ZleCxtYXliZV92ZXgsZXZleCIp Ci0gICAoc2V0X2F0dHIgImlzYSIgIm5vYXZ4NTEyZixub2F2eDUxMmYsbm9h dng1MTJmLGF2eDUxMmYiKQorICAgKHNldF9hdHRyICJwcmVmaXhfZXh0cmEi ICIxLDEsMSwqLCoiKQorICAgKHNldF9hdHRyICJsZW5ndGhfaW1tZWRpYXRl IiAiKiwqLCosMSwxIikKKyAgIChzZXRfYXR0ciAicHJlZml4IiAibWF5YmVf dmV4LG1heWJlX3ZleCxtYXliZV92ZXgsZXZleCxldmV4IikKKyAgIChzZXRf YXR0ciAiaXNhIiAibm9hdng1MTJmLG5vYXZ4NTEyZixub2F2eDUxMmYsYXZ4 NTEyZixhdng1MTJmIikKKyAgIChzZXRfYXR0ciAiYXZ4X3BhcnRpYWxfeG1t X3VwZGF0ZSIgImZhbHNlLGZhbHNlLHRydWUsZmFsc2UsdHJ1ZSIpCiAgICAo c2V0X2F0dHIgIm1vZGUiICI8TU9ERT4iKQogICAgKHNldCAoYXR0ciAicHJl ZmVycmVkX2Zvcl9zcGVlZCIpCi0gICAgIChjb25kIFsoZXFfYXR0ciAiYWx0 ZXJuYXRpdmUiICIxIikKLQkgICAgICAoc3ltYm9sX3JlZiAiVEFSR0VUX0FW WCB8fCAhVEFSR0VUX1NTRV9QQVJUSUFMX1JFR19ERVBFTkRFTkNZIikKLQkg ICAoZXFfYXR0ciAiYWx0ZXJuYXRpdmUiICIyIikKLQkgICAgICAoc3ltYm9s X3JlZiAiIVRBUkdFVF9TU0VfUEFSVElBTF9SRUdfREVQRU5ERU5DWSIpCi0J ICAgXQotCSAgIChzeW1ib2xfcmVmICJ0cnVlIikpKV0pCisgICAgICAoY29u ZCBbKG1hdGNoX3Rlc3QgIlRBUkdFVF9BVlgiKQorCSAgICAgICAoc3ltYm9s X3JlZiAidHJ1ZSIpCisJICAgICAoZXFfYXR0ciAiYWx0ZXJuYXRpdmUiICIx LDIiKQorCSAgICAgICAoc3ltYm9sX3JlZiAiIVRBUkdFVF9TU0VfUEFSVElB TF9SRUdfREVQRU5ERU5DWSIpCisJICAgIF0KKwkgICAgKHN5bWJvbF9yZWYg InRydWUiKSkpXSkKIAogKGRlZmluZV9pbnNuICJyaW50eGYyIgogICBbKHNl dCAobWF0Y2hfb3BlcmFuZDpYRiAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPWYi KQpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9pMzg2L3NzZS5tZCBiL2djYy9j b25maWcvaTM4Ni9zc2UubWQKaW5kZXggNDAzZTkxZDRiMTcuLmEwZDYxMWM1 MTI4IDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2kzODYvc3NlLm1kCisrKyBi L2djYy9jb25maWcvaTM4Ni9zc2UubWQKQEAgLTIwMzUsNiArMjAzNSwyNSBA QAogICAgKHNldF9hdHRyICJwcmVmaXgiICJvcmlnLHZleCIpCiAgICAoc2V0 X2F0dHIgIm1vZGUiICJTRiIpXSkKIAorKGRlZmluZV9pbnNuICIqc3NlX3Zt cmNwdjRzZjIiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlY0U0YgMCAicmVn aXN0ZXJfb3BlcmFuZCIgIj14LHgiKQorCSh2ZWNfbWVyZ2U6VjRTRgorCSAg KHZlY19kdXBsaWNhdGU6VjRTRgorCSAgICAodW5zcGVjOlNGIFsobWF0Y2hf b3BlcmFuZDpTRiAxICJub25pbW1lZGlhdGVfb3BlcmFuZCIgInhtLHhtIild CisJCSAgICAgICAgIFVOU1BFQ19SQ1ApKQorCSAgKG1hdGNoX29wZXJhbmQ6 VjRTRiAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCx4IikKKwkgIChjb25zdF9p bnQgMSkpKV0KKyAgIlRBUkdFVF9TU0UiCisgICJACisgICByY3Bzc1x0eyUx LCAlMHwlMCwgJWsxfQorICAgdnJjcHNzXHR7JTEsICUyLCAlMHwlMCwgJTIs ICVrMX0iCisgIFsoc2V0X2F0dHIgImlzYSIgIm5vYXZ4LGF2eCIpCisgICAo c2V0X2F0dHIgInR5cGUiICJzc2UiKQorICAgKHNldF9hdHRyICJhdG9tX3Nz ZV9hdHRyIiAicmNwIikKKyAgIChzZXRfYXR0ciAiYnR2ZXIyX3NzZV9hdHRy IiAicmNwIikKKyAgIChzZXRfYXR0ciAicHJlZml4IiAib3JpZyx2ZXgiKQor ICAgKHNldF9hdHRyICJtb2RlIiAiU0YiKV0pCisKIChkZWZpbmVfaW5zbiAi PG1hc2tfY29kZWZvcj5yY3AxNDxtb2RlPjxtYXNrX25hbWU+IgogICBbKHNl dCAobWF0Y2hfb3BlcmFuZDpWRl9BVlg1MTJWTCAwICJyZWdpc3Rlcl9vcGVy YW5kIiAiPXYiKQogCSh1bnNwZWM6VkZfQVZYNTEyVkwKQEAgLTIxMzAsNiAr MjE0OSwyNSBAQAogICAgKHNldF9hdHRyICJidHZlcjJfc3NlX2F0dHIiICJz cXJ0IikKICAgIChzZXRfYXR0ciAibW9kZSIgIjxzc2VzY2FsYXJtb2RlPiIp XSkKIAorKGRlZmluZV9pbnNuICIqPHNzZT5fdm1zcXJ0PG1vZGU+MjxtYXNr X3NjYWxhcl9uYW1lPjxyb3VuZF9zY2FsYXJfbmFtZT4iCisgIFsoc2V0ICht YXRjaF9vcGVyYW5kOlZGXzEyOCAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXgs diIpCisJKHZlY19tZXJnZTpWRl8xMjgKKwkgICh2ZWNfZHVwbGljYXRlOlZG XzEyOAorCSAgICAoc3FydDo8c3Nlc2NhbGFybW9kZT4KKwkgICAgICAobWF0 Y2hfb3BlcmFuZDo8c3Nlc2NhbGFybW9kZT4gMSAidmVjdG9yX29wZXJhbmQi ICJ4Qm0sPHJvdW5kX3NjYWxhcl9jb25zdHJhaW50PiIpKSkKKwkgIChtYXRj aF9vcGVyYW5kOlZGXzEyOCAyICJyZWdpc3Rlcl9vcGVyYW5kIiAiMCx2IikK KwkgIChjb25zdF9pbnQgMSkpKV0KKyAgIlRBUkdFVF9TU0UiCisgICJACisg ICBzcXJ0PHNzZXNjYWxhcm1vZGVzdWZmaXg+XHR7JTEsICUwfCUwLCAlPGlw dHI+MX0KKyAgIHZzcXJ0PHNzZXNjYWxhcm1vZGVzdWZmaXg+XHR7PHJvdW5k X3NjYWxhcl9tYXNrX29wMz4lMSwgJTIsICUwPG1hc2tfc2NhbGFyX29wZXJh bmQzPnwlMDxtYXNrX3NjYWxhcl9vcGVyYW5kMz4sICUyLCAlPGlwdHI+MTxy b3VuZF9zY2FsYXJfbWFza19vcDM+fSIKKyAgWyhzZXRfYXR0ciAiaXNhIiAi bm9hdngsYXZ4IikKKyAgIChzZXRfYXR0ciAidHlwZSIgInNzZSIpCisgICAo c2V0X2F0dHIgImF0b21fc3NlX2F0dHIiICJzcXJ0IikKKyAgIChzZXRfYXR0 ciAicHJlZml4IiAiPHJvdW5kX3NjYWxhcl9wcmVmaXg+IikKKyAgIChzZXRf YXR0ciAiYnR2ZXIyX3NzZV9hdHRyIiAic3FydCIpCisgICAoc2V0X2F0dHIg Im1vZGUiICI8c3Nlc2NhbGFybW9kZT4iKV0pCisKIChkZWZpbmVfZXhwYW5k ICJyc3FydDxtb2RlPjIiCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlZGMV8x MjhfMjU2IDAgInJlZ2lzdGVyX29wZXJhbmQiKQogCSh1bnNwZWM6VkYxXzEy OF8yNTYKQEAgLTIyMTksNiArMjI1NywyMyBAQAogICAgKHNldF9hdHRyICJw cmVmaXgiICJvcmlnLHZleCIpCiAgICAoc2V0X2F0dHIgIm1vZGUiICJTRiIp XSkKIAorKGRlZmluZV9pbnNuICIqc3NlX3ZtcnNxcnR2NHNmMiIKKyAgWyhz ZXQgKG1hdGNoX29wZXJhbmQ6VjRTRiAwICJyZWdpc3Rlcl9vcGVyYW5kIiAi PXgseCIpCisJKHZlY19tZXJnZTpWNFNGCisJICAodmVjX2R1cGxpY2F0ZTpW NFNGCisJICAgICh1bnNwZWM6U0YgWyhtYXRjaF9vcGVyYW5kOlNGIDEgIm5v bmltbWVkaWF0ZV9vcGVyYW5kIiAieG0seG0iKV0KKwkJICAgICAgICAgVU5T UEVDX1JTUVJUKSkKKwkgIChtYXRjaF9vcGVyYW5kOlY0U0YgMiAicmVnaXN0 ZXJfb3BlcmFuZCIgIjAseCIpCisJICAoY29uc3RfaW50IDEpKSldCisgICJU QVJHRVRfU1NFIgorICAiQAorICAgcnNxcnRzc1x0eyUxLCAlMHwlMCwgJWsx fQorICAgdnJzcXJ0c3NcdHslMSwgJTIsICUwfCUwLCAlMiwgJWsxfSIKKyAg WyhzZXRfYXR0ciAiaXNhIiAibm9hdngsYXZ4IikKKyAgIChzZXRfYXR0ciAi dHlwZSIgInNzZSIpCisgICAoc2V0X2F0dHIgInByZWZpeCIgIm9yaWcsdmV4 IikKKyAgIChzZXRfYXR0ciAibW9kZSIgIlNGIildKQorCiAoZGVmaW5lX2V4 cGFuZCAiPGNvZGU+PG1vZGU+MzxtYXNrX25hbWU+PHJvdW5kX3NhZW9ubHlf bmFtZT4iCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlZGIDAgInJlZ2lzdGVy X29wZXJhbmQiKQogCShzbWF4bWluOlZGCkBAIC05NzA5LDYgKzk3NjQsMjIg QEAKICAgIChzZXRfYXR0ciAicHJlZml4IiAiZXZleCIpCiAgICAoc2V0X2F0 dHIgIm1vZGUiICI8TU9ERT4iKV0pCiAKKyhkZWZpbmVfaW5zbiAiKmF2eDUx MmZfcm5kc2NhbGU8bW9kZT48cm91bmRfc2Flb25seV9uYW1lPiIKKyAgWyhz ZXQgKG1hdGNoX29wZXJhbmQ6VkZfMTI4IDAgInJlZ2lzdGVyX29wZXJhbmQi ICI9diIpCisJKHZlY19tZXJnZTpWRl8xMjgKKwkgICh2ZWNfZHVwbGljYXRl OlZGXzEyOAorCSAgICAodW5zcGVjOjxzc2VzY2FsYXJtb2RlPgorCSAgICAg IFsobWF0Y2hfb3BlcmFuZDo8c3Nlc2NhbGFybW9kZT4gMiAiPHJvdW5kX3Nh ZW9ubHlfbmltbV9wcmVkaWNhdGU+IiAiPHJvdW5kX3NhZW9ubHlfY29uc3Ry YWludD4iKQorCSAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAzICJjb25zdF8w X3RvXzI1NV9vcGVyYW5kIildCisJICAgICAgVU5TUEVDX1JPVU5EKSkKKyAg ICAgICAgICAobWF0Y2hfb3BlcmFuZDpWRl8xMjggMSAicmVnaXN0ZXJfb3Bl cmFuZCIgInYiKQorCSAgKGNvbnN0X2ludCAxKSkpXQorICAiVEFSR0VUX0FW WDUxMkYiCisgICJ2cm5kc2NhbGU8c3Nlc2NhbGFybW9kZXN1ZmZpeD5cdHsl MywgPHJvdW5kX3NhZW9ubHlfb3A0PiUyLCAlMSwgJTB8JTAsICUxLCAlPGlw dHI+Mjxyb3VuZF9zYWVvbmx5X29wND4sICUzfSIKKyAgWyhzZXRfYXR0ciAi bGVuZ3RoX2ltbWVkaWF0ZSIgIjEiKQorICAgKHNldF9hdHRyICJwcmVmaXgi ICJldmV4IikKKyAgIChzZXRfYXR0ciAibW9kZSIgIjxNT0RFPiIpXSkKKwog OzsgT25lIGJpdCBpbiBtYXNrIHNlbGVjdHMgMiBlbGVtZW50cy4KIChkZWZp bmVfaW5zbiAiYXZ4NTEyZl9zaHVmcHM1MTJfMTxtYXNrX25hbWU+IgogICBb KHNldCAobWF0Y2hfb3BlcmFuZDpWMTZTRiAwICJyZWdpc3Rlcl9vcGVyYW5k IiAiPXYiKQpAQCAtMTc5NTQsMTcgKzE4MDI1LDQxIEBACiAgIFsoc2V0ICht YXRjaF9vcGVyYW5kOlZGXzEyOCAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPVly LCp4LHgsdiIpCiAJKHZlY19tZXJnZTpWRl8xMjgKIAkgICh1bnNwZWM6VkZf MTI4Ci0JICAgIFsobWF0Y2hfb3BlcmFuZDpWRl8xMjggMiAicmVnaXN0ZXJf b3BlcmFuZCIgIllyLCp4LHgsdiIpCisJICAgIFsobWF0Y2hfb3BlcmFuZDpW Rl8xMjggMiAibm9uaW1tZWRpYXRlX29wZXJhbmQiICJZcm0sKnhtLHhtLHZt IikKIAkgICAgIChtYXRjaF9vcGVyYW5kOlNJIDMgImNvbnN0XzBfdG9fMTVf b3BlcmFuZCIgIm4sbixuLG4iKV0KIAkgICAgVU5TUEVDX1JPVU5EKQogCSAg KG1hdGNoX29wZXJhbmQ6VkZfMTI4IDEgInJlZ2lzdGVyX29wZXJhbmQiICIw LDAseCx2IikKIAkgIChjb25zdF9pbnQgMSkpKV0KICAgIlRBUkdFVF9TU0U0 XzEiCiAgICJACi0gICByb3VuZDxzc2VzY2FsYXJtb2Rlc3VmZml4Plx0eyUz LCAlMiwgJTB8JTAsICUyLCAlM30KLSAgIHJvdW5kPHNzZXNjYWxhcm1vZGVz dWZmaXg+XHR7JTMsICUyLCAlMHwlMCwgJTIsICUzfQotICAgdnJvdW5kPHNz ZXNjYWxhcm1vZGVzdWZmaXg+XHR7JTMsICUyLCAlMSwgJTB8JTAsICUxLCAl MiwgJTN9Ci0gICB2cm5kc2NhbGU8c3Nlc2NhbGFybW9kZXN1ZmZpeD5cdHsl MywgJTIsICUxLCAlMHwlMCwgJTEsICUyLCAlM30iCisgICByb3VuZDxzc2Vz Y2FsYXJtb2Rlc3VmZml4Plx0eyUzLCAlMiwgJTB8JTAsICU8aXB0cj4yLCAl M30KKyAgIHJvdW5kPHNzZXNjYWxhcm1vZGVzdWZmaXg+XHR7JTMsICUyLCAl MHwlMCwgJTxpcHRyPjIsICUzfQorICAgdnJvdW5kPHNzZXNjYWxhcm1vZGVz dWZmaXg+XHR7JTMsICUyLCAlMSwgJTB8JTAsICUxLCAlPGlwdHI+MiwgJTN9 CisgICB2cm5kc2NhbGU8c3Nlc2NhbGFybW9kZXN1ZmZpeD5cdHslMywgJTIs ICUxLCAlMHwlMCwgJTEsICU8aXB0cj4yLCAlM30iCisgIFsoc2V0X2F0dHIg ImlzYSIgIm5vYXZ4LG5vYXZ4LGF2eCxhdng1MTJmIikKKyAgIChzZXRfYXR0 ciAidHlwZSIgInNzZWN2dCIpCisgICAoc2V0X2F0dHIgImxlbmd0aF9pbW1l ZGlhdGUiICIxIikKKyAgIChzZXRfYXR0ciAicHJlZml4X2RhdGExNiIgIjEs MSwqLCoiKQorICAgKHNldF9hdHRyICJwcmVmaXhfZXh0cmEiICIxIikKKyAg IChzZXRfYXR0ciAicHJlZml4IiAib3JpZyxvcmlnLHZleCxldmV4IikKKyAg IChzZXRfYXR0ciAibW9kZSIgIjxNT0RFPiIpXSkKKworKGRlZmluZV9pbnNu ICIqc3NlNF8xX3JvdW5kPHNzZXNjYWxhcm1vZGVzdWZmaXg+IgorICBbKHNl dCAobWF0Y2hfb3BlcmFuZDpWRl8xMjggMCAicmVnaXN0ZXJfb3BlcmFuZCIg Ij1ZciwqeCx4LHYiKQorCSh2ZWNfbWVyZ2U6VkZfMTI4CisJICAodmVjX2R1 cGxpY2F0ZTpWRl8xMjgKKwkgICAgKHVuc3BlYzo8c3Nlc2NhbGFybW9kZT4K KwkgICAgICBbKG1hdGNoX29wZXJhbmQ6PHNzZXNjYWxhcm1vZGU+IDIgIm5v bmltbWVkaWF0ZV9vcGVyYW5kIiAiWXJtLCp4bSx4bSx2bSIpCisJICAgICAg IChtYXRjaF9vcGVyYW5kOlNJIDMgImNvbnN0XzBfdG9fMTVfb3BlcmFuZCIg Im4sbixuLG4iKV0KKwkgICAgICBVTlNQRUNfUk9VTkQpKQorCSAgKG1hdGNo X29wZXJhbmQ6VkZfMTI4IDEgInJlZ2lzdGVyX29wZXJhbmQiICIwLDAseCx2 IikKKwkgIChjb25zdF9pbnQgMSkpKV0KKyAgIlRBUkdFVF9TU0U0XzEiCisg ICJACisgICByb3VuZDxzc2VzY2FsYXJtb2Rlc3VmZml4Plx0eyUzLCAlMiwg JTB8JTAsICU8aXB0cj4yLCAlM30KKyAgIHJvdW5kPHNzZXNjYWxhcm1vZGVz dWZmaXg+XHR7JTMsICUyLCAlMHwlMCwgJTxpcHRyPjIsICUzfQorICAgdnJv dW5kPHNzZXNjYWxhcm1vZGVzdWZmaXg+XHR7JTMsICUyLCAlMSwgJTB8JTAs ICUxLCAlPGlwdHI+MiwgJTN9CisgICB2cm5kc2NhbGU8c3Nlc2NhbGFybW9k ZXN1ZmZpeD5cdHslMywgJTIsICUxLCAlMHwlMCwgJTEsICU8aXB0cj4yLCAl M30iCiAgIFsoc2V0X2F0dHIgImlzYSIgIm5vYXZ4LG5vYXZ4LGF2eCxhdng1 MTJmIikKICAgIChzZXRfYXR0ciAidHlwZSIgInNzZWN2dCIpCiAgICAoc2V0 X2F0dHIgImxlbmd0aF9pbW1lZGlhdGUiICIxIikKZGlmZiAtLWdpdCBhL2dj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODcwMDctNC5jIGIvZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4NzAwNy00LmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmU5MWJkY2JhYzQ0 Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L2kzODYvcHI4NzAwNy00LmMKQEAgLTAsMCArMSwxOCBAQAorLyogeyBkZy1k byBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU9mYXN0IC1tYXJj aD1za3lsYWtlLWF2eDUxMiAtbWZwbWF0aD1zc2UiIH0gKi8KKworCisjaW5j bHVkZTxtYXRoLmg+CisKK2V4dGVybiBkb3VibGUgZDEsIGQyLCBkMzsKK3Zv aWQKK2ZvbyAoaW50IG4sIGludCBrKQoreworICBmb3IgKGludCBpID0gMDsg aSAhPSBuOyBpKyspCisgICAgaWYoaSA8IGspCisgICAgICBkMSA9IGZsb29y IChkMik7CisgICAgZWxzZQorICAgICAgZDEgPSBjZWlsIChkMyk7Cit9CisK Ky8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAidnhvcnBz XFteXG5cclxdKnhtbVxbMC05XF0iIDEgfSB9ICovCmRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg3MDA3LTUuYyBiL2dj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODcwMDctNS5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4yMGQxM2NmNjUw YgotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9pMzg2L3ByODcwMDctNS5jCkBAIC0wLDAgKzEsMTggQEAKKy8qIHsgZGct ZG8gY29tcGlsZSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PZmFzdCAtbWFy Y2g9c2t5bGFrZS1hdng1MTIgLW1mcG1hdGg9c3NlIiB9ICovCisKKworI2lu Y2x1ZGU8bWF0aC5oPgorCitleHRlcm4gZG91YmxlIGQxLCBkMiwgZDM7Cit2 b2lkCitmb28gKGludCBuLCBpbnQgaykKK3sKKyAgZm9yIChpbnQgaSA9IDA7 IGkgIT0gbjsgaSsrKQorICAgIGlmKGkgPCBrKQorICAgICAgZDEgPSBzcXJ0 IChkMik7CisgICAgZWxzZQorICAgICAgZDEgPSBzcXJ0IChkMyk7Cit9CisK Ky8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAidnhvcnBz XFteXG5cclxdKnhtbVxbMC05XF0iIDEgfSB9ICovCi0tIAoyLjE5LjEKCg== --00000000000068ef730595b5ccaa--