From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-001b2d01.pphosted.com (mx0a-001b2d01.pphosted.com [148.163.156.1]) by sourceware.org (Postfix) with ESMTPS id 3DDCF393BC25; Fri, 14 May 2021 06:57:25 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 3DDCF393BC25 Received: from pps.filterd (m0098409.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 14E6tl4P067213; Fri, 14 May 2021 02:57:23 -0400 Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com with ESMTP id 38hmcar0mw-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 14 May 2021 02:57:23 -0400 Received: from m0098409.ppops.net (m0098409.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.43/8.16.0.43) with SMTP id 14E6uDpl067730; Fri, 14 May 2021 02:57:22 -0400 Received: from ppma01fra.de.ibm.com (46.49.7a9f.ip4.static.sl-reverse.com [159.122.73.70]) by mx0a-001b2d01.pphosted.com with ESMTP id 38hmcar0md-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 14 May 2021 02:57:22 -0400 Received: from pps.filterd (ppma01fra.de.ibm.com [127.0.0.1]) by ppma01fra.de.ibm.com (8.16.0.43/8.16.0.43) with SMTP id 14E6pvXr009586; Fri, 14 May 2021 06:57:20 GMT Received: from b06cxnps3074.portsmouth.uk.ibm.com (d06relay09.portsmouth.uk.ibm.com [9.149.109.194]) by ppma01fra.de.ibm.com with ESMTP id 38hc6u82j1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 14 May 2021 06:57:20 +0000 Received: from d06av23.portsmouth.uk.ibm.com (d06av23.portsmouth.uk.ibm.com [9.149.105.59]) by b06cxnps3074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 14E6vG9B33292746 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 14 May 2021 06:57:16 GMT Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 8D489A4053; Fri, 14 May 2021 06:57:16 +0000 (GMT) Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id E9DA9A4055; Fri, 14 May 2021 06:57:13 +0000 (GMT) Received: from luoxhus-MacBook-Pro.local (unknown [9.197.233.152]) by d06av23.portsmouth.uk.ibm.com (Postfix) with ESMTPS; Fri, 14 May 2021 06:57:13 +0000 (GMT) Subject: Re: [PATCH] rs6000: Fix wrong code generation for vec_sel [PR94613] To: Segher Boessenkool Cc: gcc-patches@gcc.gnu.org, dje.gcc@gmail.com, wschmidt@linux.ibm.com, guojiufu@linux.ibm.com, linkw@gcc.gnu.org References: <20210430063258.2774866-1-luoxhu@linux.ibm.com> <20210513104931.GG10366@gate.crashing.org> From: Xionghu Luo Message-ID: <973f14d9-c626-89b4-753f-e5c613eef6f2@linux.ibm.com> Date: Fri, 14 May 2021 14:57:10 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.0; rv:68.0) Gecko/20100101 Thunderbird/68.12.0 MIME-Version: 1.0 In-Reply-To: <20210513104931.GG10366@gate.crashing.org> Content-Type: multipart/mixed; boundary="------------45CA673DE1ACABF41F66B638" Content-Language: en-US X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: EqCnVH9RBWc-AQXiZpy6SZ8NcAM_8Trl X-Proofpoint-GUID: hzl7B7wjCL9kCWBY5QPQXPcjfWW6ClNO X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.391, 18.0.761 definitions=2021-05-14_02:2021-05-12, 2021-05-14 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 mlxlogscore=999 spamscore=0 malwarescore=0 adultscore=0 mlxscore=0 phishscore=0 suspectscore=0 impostorscore=0 bulkscore=0 priorityscore=1501 lowpriorityscore=0 clxscore=1015 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2104190000 definitions=main-2105140048 X-Spam-Status: No, score=-12.5 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_EF, GIT_PATCH_0, NICE_REPLY_A, RCVD_IN_DNSWL_LOW, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 14 May 2021 06:57:28 -0000 This is a multi-part message in MIME format. --------------45CA673DE1ACABF41F66B638 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Hi, On 2021/5/13 18:49, Segher Boessenkool wrote: > Hi! > > On Fri, Apr 30, 2021 at 01:32:58AM -0500, Xionghu Luo wrote: >> The vsel instruction is a bit-wise select instruction. Using an >> IF_THEN_ELSE to express it in RTL is wrong and leads to wrong code >> being generated in the combine pass. Per element selection is a >> subset of per bit-wise selection,with the patch the pattern is >> written using bit operations. But there are 8 different patterns >> to define "op0 := (op1 & ~op3) | (op2 & op3)": >> >> (~op3&op1) | (op3&op2), >> (~op3&op1) | (op2&op3), >> (op3&op2) | (~op3&op1), >> (op2&op3) | (~op3&op1), >> (op1&~op3) | (op3&op2), >> (op1&~op3) | (op2&op3), >> (op3&op2) | (op1&~op3), >> (op2&op3) | (op1&~op3), >> >> Combine pass will swap (op1&~op3) to (~op3&op1) due to commutative >> canonical, which could reduce it to the FIRST 4 patterns, but it won't >> swap (op2&op3) | (~op3&op1) to (~op3&op1) | (op2&op3), so this patch >> handles it with two patterns with different NOT op3 position and check >> equality inside it. > > Yup, that latter case does not have canonicalisation rules. Btw, not > only combine does this canonicalisation: everything should, > non-canonical RTL is invalid RTL (in the instruction stream, you can do > everything in temporary code of course, as long as the RTL isn't > malformed). > >> -(define_insn "*altivec_vsel" >> +(define_insn "altivec_vsel" >> [(set (match_operand:VM 0 "altivec_register_operand" "=v") >> - (if_then_else:VM >> - (ne:CC (match_operand:VM 1 "altivec_register_operand" "v") >> - (match_operand:VM 4 "zero_constant" "")) >> - (match_operand:VM 2 "altivec_register_operand" "v") >> - (match_operand:VM 3 "altivec_register_operand" "v")))] >> - "VECTOR_MEM_ALTIVEC_P (mode)" >> - "vsel %0,%3,%2,%1" >> + (ior:VM >> + (and:VM >> + (not:VM (match_operand:VM 3 "altivec_register_operand" "v")) >> + (match_operand:VM 1 "altivec_register_operand" "v")) >> + (and:VM >> + (match_operand:VM 2 "altivec_register_operand" "v") >> + (match_operand:VM 4 "altivec_register_operand" "v"))))] >> + "VECTOR_UNIT_ALTIVEC_OR_VSX_P (mode) >> + && (rtx_equal_p (operands[2], operands[3]) >> + || rtx_equal_p (operands[4], operands[3]))" >> + { >> + if (rtx_equal_p (operands[2], operands[3])) >> + return "vsel %0,%1,%4,%3"; >> + else >> + return "vsel %0,%1,%2,%3"; >> + } >> [(set_attr "type" "vecmove")]) > > That rtx_equal_p stuff is nice and tricky, but it is a bit too tricky I > think. So please write this as two patterns (and keep the expand if > that helps). I was a bit concerned that there would be a lot of duplicate code if we write two patterns for each vsel, totally 4 similar patterns in altivec.md and another 4 in vsx.md make it difficult to maintain, however I updated it since you prefer this way, as you pointed out the xxsel in vsx.md could be folded by later patch. > >> +(define_insn "altivec_vsel2" > > (same here of course). > >> ;; Fused multiply add. >> diff --git a/gcc/config/rs6000/rs6000-call.c b/gcc/config/rs6000/rs6000-call.c >> index f5676255387..d65bdc01055 100644 >> --- a/gcc/config/rs6000/rs6000-call.c >> +++ b/gcc/config/rs6000/rs6000-call.c >> @@ -3362,11 +3362,11 @@ const struct altivec_builtin_types altivec_overloaded_builtins[] = { >> RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_unsigned_V2DI }, >> { ALTIVEC_BUILTIN_VEC_SEL, ALTIVEC_BUILTIN_VSEL_2DI, >> RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_V2DI, RS6000_BTI_V2DI }, >> - { ALTIVEC_BUILTIN_VEC_SEL, ALTIVEC_BUILTIN_VSEL_2DI, >> + { ALTIVEC_BUILTIN_VEC_SEL, ALTIVEC_BUILTIN_VSEL_2DI_UNS, > > Are the _uns things still used for anything? But, let's not change > this until Bill's stuff is in :-) > > Why do you want to change this here, btw? I don't understand. OK, they are actually "unsigned type" overload builtin functions, change it or not so far won't cause functionality issue, I will revert this change in the updated patch. > >> + if (target == 0 >> + || GET_MODE (target) != tmode >> + || ! (*insn_data[icode].operand[0].predicate) (target, tmode)) > > No space after ! and other unary operators (except for casts and other > operators you write with alphanumerics, like "sizeof"). I know you > copied this code, but :-) OK, thanks. > >> @@ -15608,8 +15606,6 @@ rs6000_emit_vector_cond_expr (rtx dest, rtx op_true, rtx op_false, >> case GEU: >> case LTU: >> case LEU: >> - /* Mark unsigned tests with CCUNSmode. */ >> - cc_mode = CCUNSmode; >> >> /* Invert condition to avoid compound test if necessary. */ >> if (rcode == GEU || rcode == LEU) > > So this is related to the _uns thing. Could you split off that change? > Probably as an earlier patch (but either works for me). Not related to the ALTIVEC_BUILTIN_VSEL_2DI_UNS things, previously cc_mode is a parameter to generate the condition for IF_THEN_ELSE instruction, now we don't need it again as we use IOR (AND... AND...) style, remove it to avoid build error. - cond2 = gen_rtx_fmt_ee (NE, cc_mode, gen_lowpart (dest_mode, mask), - CONST0_RTX (dest_mode)); - emit_insn (gen_rtx_SET (dest, - gen_rtx_IF_THEN_ELSE (dest_mode, - cond2, - op_true, - op_false))); + rtx tmp = gen_rtx_IOR (dest_mode, + gen_rtx_AND (dest_mode, gen_rtx_NOT (dest_mode, mask), + op_false), + gen_rtx_AND (dest_mode, mask, op_true)); + emit_insn (gen_rtx_SET (dest, tmp)); > >> @@ -15629,6 +15625,9 @@ rs6000_emit_vector_cond_expr (rtx dest, rtx op_true, rtx op_false, >> if (!mask) >> return 0; >> >> + if (mask_mode != dest_mode) >> + mask = simplify_gen_subreg (dest_mode, mask, mask_mode, 0); > > Indent just two characters please: line continuations (usually) align, > but indents do not.> > > Can you fold vsel and xxsel together completely? They have exactly the > same semantics! This does not have to be in this patch of course. I noticed that vperm/xxperm are folded together, do you mean fold vsel/xxsel like them? It's attached as: 0002-rs6000-Fold-xxsel-to-vsel-since-they-have-same-seman.patch Thanks, Xionghu --------------45CA673DE1ACABF41F66B638 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="0001-rs6000-Fix-wrong-code-generation-for-vec_sel-PR94613.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="0001-rs6000-Fix-wrong-code-generation-for-vec_sel-PR94613.pa"; filename*1="tch" RnJvbSA2OGNiNTYzMDVjYWVhNmFhZWUwODNkODE0ZmQ0ZDExNTkwY2JjNzY2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBYaW9uZ2h1IEx1byA8bHVveGh1QGxpbnV4LmlibS5j b20+CkRhdGU6IFR1ZSwgMjcgQXByIDIwMjEgMDE6MDc6MjUgLTA1MDAKU3ViamVjdDogW1BB VENIIDEvMl0gcnM2MDAwOiBGaXggd3JvbmcgY29kZSBnZW5lcmF0aW9uIGZvciB2ZWNfc2Vs IFtQUjk0NjEzXQoKVGhlIHZzZWwgaW5zdHJ1Y3Rpb24gaXMgYSBiaXQtd2lzZSBzZWxlY3Qg aW5zdHJ1Y3Rpb24uICBVc2luZyBhbgpJRl9USEVOX0VMU0UgdG8gZXhwcmVzcyBpdCBpbiBS VEwgaXMgd3JvbmcgYW5kIGxlYWRzIHRvIHdyb25nIGNvZGUKYmVpbmcgZ2VuZXJhdGVkIGlu IHRoZSBjb21iaW5lIHBhc3MuICBQZXIgZWxlbWVudCBzZWxlY3Rpb24gaXMgYQpzdWJzZXQg b2YgcGVyIGJpdC13aXNlIHNlbGVjdGlvbix3aXRoIHRoZSBwYXRjaCB0aGUgcGF0dGVybiBp cwp3cml0dGVuIHVzaW5nIGJpdCBvcGVyYXRpb25zLiAgQnV0IHRoZXJlIGFyZSA4IGRpZmZl cmVudCBwYXR0ZXJucwp0byBkZWZpbmUgIm9wMCA6PSAob3AxICYgfm9wMykgfCAob3AyICYg b3AzKSI6Cgoofm9wMyZvcDEpIHwgKG9wMyZvcDIpLAoofm9wMyZvcDEpIHwgKG9wMiZvcDMp LAoob3AzJm9wMikgfCAofm9wMyZvcDEpLAoob3AyJm9wMykgfCAofm9wMyZvcDEpLAoob3Ax Jn5vcDMpIHwgKG9wMyZvcDIpLAoob3AxJn5vcDMpIHwgKG9wMiZvcDMpLAoob3AzJm9wMikg fCAob3AxJn5vcDMpLAoob3AyJm9wMykgfCAob3AxJn5vcDMpLAoKQ29tYmluZSBwYXNzIHdp bGwgc3dhcCAob3AxJn5vcDMpIHRvICh+b3AzJm9wMSkgZHVlIHRvIGNvbW11dGF0aXZlCmNh bm9uaWNhbCwgd2hpY2ggY291bGQgcmVkdWNlIGl0IHRvIHRoZSBGSVJTVCA0IHBhdHRlcm5z LCBidXQgaXQgd29uJ3QKc3dhcCAob3AyJm9wMykgfCAofm9wMyZvcDEpIHRvICh+b3AzJm9w MSkgfCAob3AyJm9wMyksIHNvIHRoaXMgcGF0Y2gKaGFuZGxlcyBpdCB3aXRoIHR3byBwYXR0 ZXJucyB3aXRoIGRpZmZlcmVudCBOT1Qgb3AzIHBvc2l0aW9uIGFuZCBjaGVjawplcXVhbGl0 eSBpbnNpZGUgaXQuCgpUZXN0ZWQgcGFzcyBvbiBQb3dlcjhMRSwgYW55IGNvbW1lbnRzPwoK Z2NjL0NoYW5nZUxvZzoKCgkqIGNvbmZpZy9yczYwMDAvYWx0aXZlYy5tZCAoKmFsdGl2ZWNf dnNlbDxtb2RlPik6IENoYW5nZSB0byAuLi4KCShhbHRpdmVjX3ZzZWw8bW9kZT4pOiAuLi4g dGhpcyBhbmQgdXBkYXRlIGRlZmluZS4KCSgqYWx0aXZlY192c2VsPG1vZGU+X3Vucyk6IERl bGV0ZS4KCShhbHRpdmVjX3ZzZWw8bW9kZT4yKTogTmV3IGRlZmluZV9pbnNuLgoJKGFsdGl2 ZWNfdnNlbDxtb2RlPjMpOiBMaWtld2lzZS4KCShhbHRpdmVjX3ZzZWw8bW9kZT40KTogTGlr ZXdpc2UuCgkqIGNvbmZpZy9yczYwMDAvcnM2MDAwLWNhbGwuYyAoYWx0aXZlY19leHBhbmRf dmVjX3NlbF9idWlsdGluKToKCU5ldy4KCShhbHRpdmVjX2V4cGFuZF9idWlsdGluKTogQ2Fs bCBhbHRpdmVjX2V4cGFuZF92ZWNfc2VsX2J1aWx0aW4gdG8KCWV4cGFuZCB2ZWxfc2VsLgoJ KiBjb25maWcvcnM2MDAwL3JzNjAwMC5jIChyczYwMDBfZW1pdF92ZWN0b3JfY29uZF9leHBy KTogVXNlCgliaXQtd2lzZSBzZWxlY3Rpb24gaW5zdGVhZCBvZiBwZXIgZWxlbWVudC4KCSog Y29uZmlnL3JzNjAwMC92ZWN0b3IubWQ6CgkqIGNvbmZpZy9yczYwMDAvdnN4Lm1kICgqdnN4 X3h4c2VsPG1vZGU+KTogQ2hhbmdlIHRvIC4uLgoJKHZzeF94eHNlbDxtb2RlPik6IC4uLiB0 aGlzIGFuZCB1cGRhdGUgZGVmaW5lLgoJKCp2c3hfeHhzZWw8bW9kZT5fdW5zKTogRGVsZXRl LgoJKHZzeF94eHNlbDxtb2RlPjIpOiBOZXcgZGVmaW5lX2luc24uCgkodnN4X3h4c2VsPG1v ZGU+Myk6IExpa2V3aXNlLgoJKHZzeF94eHNlbDxtb2RlPjQpOiBMaWtld2lzZS4KCmdjYy90 ZXN0c3VpdGUvQ2hhbmdlTG9nOgoKCSogZ2NjLnRhcmdldC9wb3dlcnBjL3ByOTQ2MTMuYzog TmV3IHRlc3QuCi0tLQogZ2NjL2NvbmZpZy9yczYwMDAvYWx0aXZlYy5tZCAgICAgICAgICAg ICAgIHwgNjYgKysrKysrKysrKysrKysrKy0tLS0tCiBnY2MvY29uZmlnL3JzNjAwMC9yczYw MDAtY2FsbC5jICAgICAgICAgICAgfCA2MiArKysrKysrKysrKysrKysrKysrKwogZ2NjL2Nv bmZpZy9yczYwMDAvcnM2MDAwLmMgICAgICAgICAgICAgICAgIHwgMTkgKysrLS0tCiBnY2Mv Y29uZmlnL3JzNjAwMC92ZWN0b3IubWQgICAgICAgICAgICAgICAgfCAyNiArKysrLS0tLS0K IGdjYy9jb25maWcvcnM2MDAwL3ZzeC5tZCAgICAgICAgICAgICAgICAgICB8IDY4ICsrKysr KysrKysrKysrKysrLS0tLS0KIGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9wb3dlcnBjL3By OTQ2MTMuYyB8IDM4ICsrKysrKysrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCAyMjIgaW5zZXJ0 aW9ucygrKSwgNTcgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L3Bvd2VycGMvcHI5NDYxMy5jCgpkaWZmIC0tZ2l0IGEvZ2NjL2Nv bmZpZy9yczYwMDAvYWx0aXZlYy5tZCBiL2djYy9jb25maWcvcnM2MDAwL2FsdGl2ZWMubWQK aW5kZXggMTM1MWRhZmJjNDEuLmRmOGYyNDcwMWQwIDEwMDY0NAotLS0gYS9nY2MvY29uZmln L3JzNjAwMC9hbHRpdmVjLm1kCisrKyBiL2djYy9jb25maWcvcnM2MDAwL2FsdGl2ZWMubWQK QEAgLTY2NywyNiArNjY3LDYwIEBAIChkZWZpbmVfaW5zbiAiKmFsdGl2ZWNfZ2V2NHNmIgog ICAidmNtcGdlZnAgJTAsJTEsJTIiCiAgIFsoc2V0X2F0dHIgInR5cGUiICJ2ZWNjbXAiKV0p CiAKLShkZWZpbmVfaW5zbiAiKmFsdGl2ZWNfdnNlbDxtb2RlPiIKKyhkZWZpbmVfaW5zbiAi YWx0aXZlY192c2VsPG1vZGU+IgogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWTSAwICJhbHRp dmVjX3JlZ2lzdGVyX29wZXJhbmQiICI9diIpCi0JKGlmX3RoZW5fZWxzZTpWTQotCSAobmU6 Q0MgKG1hdGNoX29wZXJhbmQ6Vk0gMSAiYWx0aXZlY19yZWdpc3Rlcl9vcGVyYW5kIiAidiIp Ci0JCShtYXRjaF9vcGVyYW5kOlZNIDQgInplcm9fY29uc3RhbnQiICIiKSkKLQkgKG1hdGNo X29wZXJhbmQ6Vk0gMiAiYWx0aXZlY19yZWdpc3Rlcl9vcGVyYW5kIiAidiIpCi0JIChtYXRj aF9vcGVyYW5kOlZNIDMgImFsdGl2ZWNfcmVnaXN0ZXJfb3BlcmFuZCIgInYiKSkpXQotICAi VkVDVE9SX01FTV9BTFRJVkVDX1AgKDxNT0RFPm1vZGUpIgotICAidnNlbCAlMCwlMywlMiwl MSIKKwkoaW9yOlZNCisJIChhbmQ6Vk0KKwkgIChub3Q6Vk0gKG1hdGNoX29wZXJhbmQ6Vk0g MyAiYWx0aXZlY19yZWdpc3Rlcl9vcGVyYW5kIiAidiIpKQorCSAgKG1hdGNoX29wZXJhbmQ6 Vk0gMSAiYWx0aXZlY19yZWdpc3Rlcl9vcGVyYW5kIiAidiIpKQorCSAoYW5kOlZNCisJICAo bWF0Y2hfb3BlcmFuZDpWTSAyICJhbHRpdmVjX3JlZ2lzdGVyX29wZXJhbmQiICJ2IikKKwkg IChtYXRjaF9vcGVyYW5kOlZNIDQgImFsdGl2ZWNfcmVnaXN0ZXJfb3BlcmFuZCIgInYiKSkp KV0KKyAgIlZFQ1RPUl9VTklUX0FMVElWRUNfT1JfVlNYX1AgKDxNT0RFPm1vZGUpCisgICYm IHJ0eF9lcXVhbF9wIChvcGVyYW5kc1syXSwgb3BlcmFuZHNbM10pIgorICAidnNlbCAlMCwl MSwlNCwlMyIKICAgWyhzZXRfYXR0ciAidHlwZSIgInZlY21vdmUiKV0pCiAKLShkZWZpbmVf aW5zbiAiKmFsdGl2ZWNfdnNlbDxtb2RlPl91bnMiCisoZGVmaW5lX2luc24gImFsdGl2ZWNf dnNlbDxtb2RlPjIiCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlZNIDAgImFsdGl2ZWNfcmVn aXN0ZXJfb3BlcmFuZCIgIj12IikKLQkoaWZfdGhlbl9lbHNlOlZNCi0JIChuZTpDQ1VOUyAo bWF0Y2hfb3BlcmFuZDpWTSAxICJhbHRpdmVjX3JlZ2lzdGVyX29wZXJhbmQiICJ2IikKLQkJ ICAgKG1hdGNoX29wZXJhbmQ6Vk0gNCAiemVyb19jb25zdGFudCIgIiIpKQotCSAobWF0Y2hf b3BlcmFuZDpWTSAyICJhbHRpdmVjX3JlZ2lzdGVyX29wZXJhbmQiICJ2IikKLQkgKG1hdGNo X29wZXJhbmQ6Vk0gMyAiYWx0aXZlY19yZWdpc3Rlcl9vcGVyYW5kIiAidiIpKSldCi0gICJW RUNUT1JfTUVNX0FMVElWRUNfUCAoPE1PREU+bW9kZSkiCi0gICJ2c2VsICUwLCUzLCUyLCUx IgorCShpb3I6Vk0KKwkgKGFuZDpWTQorCSAgKG5vdDpWTSAobWF0Y2hfb3BlcmFuZDpWTSAz ICJhbHRpdmVjX3JlZ2lzdGVyX29wZXJhbmQiICJ2IikpCisJICAobWF0Y2hfb3BlcmFuZDpW TSAxICJhbHRpdmVjX3JlZ2lzdGVyX29wZXJhbmQiICJ2IikpCisJIChhbmQ6Vk0KKwkgICht YXRjaF9vcGVyYW5kOlZNIDIgImFsdGl2ZWNfcmVnaXN0ZXJfb3BlcmFuZCIgInYiKQorCSAg KG1hdGNoX29wZXJhbmQ6Vk0gNCAiYWx0aXZlY19yZWdpc3Rlcl9vcGVyYW5kIiAidiIpKSkp XQorICAiVkVDVE9SX1VOSVRfQUxUSVZFQ19PUl9WU1hfUCAoPE1PREU+bW9kZSkKKyAgJiYg cnR4X2VxdWFsX3AgKG9wZXJhbmRzWzRdLCBvcGVyYW5kc1szXSkiCisgICJ2c2VsICUwLCUx LCUyLCUzIgorICBbKHNldF9hdHRyICJ0eXBlIiAidmVjbW92ZSIpXSkKKworKGRlZmluZV9p bnNuICJhbHRpdmVjX3ZzZWw8bW9kZT4zIgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWTSAw ICJhbHRpdmVjX3JlZ2lzdGVyX29wZXJhbmQiICI9diIpCisJKGlvcjpWTQorCSAoYW5kOlZN CisJICAobWF0Y2hfb3BlcmFuZDpWTSAxICJhbHRpdmVjX3JlZ2lzdGVyX29wZXJhbmQiICJ2 IikKKwkgIChtYXRjaF9vcGVyYW5kOlZNIDIgImFsdGl2ZWNfcmVnaXN0ZXJfb3BlcmFuZCIg InYiKSkKKwkgKGFuZDpWTQorCSAgKG5vdDpWTSAobWF0Y2hfb3BlcmFuZDpWTSAzICJhbHRp dmVjX3JlZ2lzdGVyX29wZXJhbmQiICJ2IikpCisJICAobWF0Y2hfb3BlcmFuZDpWTSA0ICJh bHRpdmVjX3JlZ2lzdGVyX29wZXJhbmQiICJ2IikpKSldCisgICJWRUNUT1JfVU5JVF9BTFRJ VkVDX09SX1ZTWF9QICg8TU9ERT5tb2RlKQorICAmJiBydHhfZXF1YWxfcCAob3BlcmFuZHNb MV0sIG9wZXJhbmRzWzNdKSIKKyAgInZzZWwgJTAsJTQsJTIsJTMiCisgIFsoc2V0X2F0dHIg InR5cGUiICJ2ZWNtb3ZlIildKQorCisoZGVmaW5lX2luc24gImFsdGl2ZWNfdnNlbDxtb2Rl PjQiCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlZNIDAgImFsdGl2ZWNfcmVnaXN0ZXJfb3Bl cmFuZCIgIj12IikKKwkoaW9yOlZNCisJIChhbmQ6Vk0KKwkgIChtYXRjaF9vcGVyYW5kOlZN IDEgImFsdGl2ZWNfcmVnaXN0ZXJfb3BlcmFuZCIgInYiKQorCSAgKG1hdGNoX29wZXJhbmQ6 Vk0gMiAiYWx0aXZlY19yZWdpc3Rlcl9vcGVyYW5kIiAidiIpKQorCSAoYW5kOlZNCisJICAo bm90OlZNIChtYXRjaF9vcGVyYW5kOlZNIDMgImFsdGl2ZWNfcmVnaXN0ZXJfb3BlcmFuZCIg InYiKSkKKwkgIChtYXRjaF9vcGVyYW5kOlZNIDQgImFsdGl2ZWNfcmVnaXN0ZXJfb3BlcmFu ZCIgInYiKSkpKV0KKyAgIlZFQ1RPUl9VTklUX0FMVElWRUNfT1JfVlNYX1AgKDxNT0RFPm1v ZGUpCisgICYmIHJ0eF9lcXVhbF9wIChvcGVyYW5kc1syXSwgb3BlcmFuZHNbM10pIgorICAi dnNlbCAlMCwlNCwlMSwlMyIKICAgWyhzZXRfYXR0ciAidHlwZSIgInZlY21vdmUiKV0pCiAK IDs7IEZ1c2VkIG11bHRpcGx5IGFkZC4KZGlmZiAtLWdpdCBhL2djYy9jb25maWcvcnM2MDAw L3JzNjAwMC1jYWxsLmMgYi9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAtY2FsbC5jCmluZGV4 IGY1Njc2MjU1Mzg3Li45NDU5M2JlMGQyZSAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9yczYw MDAvcnM2MDAwLWNhbGwuYworKysgYi9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAtY2FsbC5j CkBAIC0xMDk5Niw2ICsxMDk5Niw0NSBAQCBhbHRpdmVjX2V4cGFuZF92ZWNfZXh0X2J1aWx0 aW4gKHRyZWUgZXhwLCBydHggdGFyZ2V0KQogICByZXR1cm4gdGFyZ2V0OwogfQogCisvKiBF eHBhbmQgdmVjX3NlbCBidWlsdGluLiAgKi8KK3N0YXRpYyBydHgKK2FsdGl2ZWNfZXhwYW5k X3ZlY19zZWxfYnVpbHRpbiAoZW51bSBpbnNuX2NvZGUgaWNvZGUsIHRyZWUgZXhwLCBydHgg dGFyZ2V0KQoreworICBydHggb3AwLCBvcDEsIG9wMiwgcGF0OworICB0cmVlIGFyZzAsIGFy ZzEsIGFyZzI7CisKKyAgYXJnMCA9IENBTExfRVhQUl9BUkcgKGV4cCwgMCk7CisgIG9wMCA9 IGV4cGFuZF9ub3JtYWwgKGFyZzApOworICBhcmcxID0gQ0FMTF9FWFBSX0FSRyAoZXhwLCAx KTsKKyAgb3AxID0gZXhwYW5kX25vcm1hbCAoYXJnMSk7CisgIGFyZzIgPSBDQUxMX0VYUFJf QVJHIChleHAsIDIpOworICBvcDIgPSBleHBhbmRfbm9ybWFsIChhcmcyKTsKKworICBtYWNo aW5lX21vZGUgdG1vZGUgPSBpbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMF0ubW9kZTsKKyAg bWFjaGluZV9tb2RlIG1vZGUwID0gaW5zbl9kYXRhW2ljb2RlXS5vcGVyYW5kWzFdLm1vZGU7 CisgIG1hY2hpbmVfbW9kZSBtb2RlMSA9IGluc25fZGF0YVtpY29kZV0ub3BlcmFuZFsyXS5t b2RlOworICBtYWNoaW5lX21vZGUgbW9kZTIgPSBpbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRb M10ubW9kZTsKKworICBpZiAodGFyZ2V0ID09IDAgfHwgR0VUX01PREUgKHRhcmdldCkgIT0g dG1vZGUKKyAgICAgIHx8ICEoKmluc25fZGF0YVtpY29kZV0ub3BlcmFuZFswXS5wcmVkaWNh dGUpICh0YXJnZXQsIHRtb2RlKSkKKyAgICB0YXJnZXQgPSBnZW5fcmVnX3J0eCAodG1vZGUp OworCisgIGlmICghKCppbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMV0ucHJlZGljYXRlKSAo b3AwLCBtb2RlMCkpCisgICAgb3AwID0gY29weV90b19tb2RlX3JlZyAobW9kZTAsIG9wMCk7 CisgIGlmICghKCppbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbMl0ucHJlZGljYXRlKSAob3Ax LCBtb2RlMSkpCisgICAgb3AxID0gY29weV90b19tb2RlX3JlZyAobW9kZTEsIG9wMSk7Cisg IGlmICghKCppbnNuX2RhdGFbaWNvZGVdLm9wZXJhbmRbM10ucHJlZGljYXRlKSAob3AyLCBt b2RlMikpCisgICAgb3AyID0gY29weV90b19tb2RlX3JlZyAobW9kZTIsIG9wMik7CisKKyAg cGF0ID0gR0VOX0ZDTiAoaWNvZGUpICh0YXJnZXQsIG9wMCwgb3AxLCBvcDIsIG9wMik7Cisg IGlmIChwYXQpCisgICAgZW1pdF9pbnNuIChwYXQpOworICBlbHNlCisgICAgcmV0dXJuIE5V TExfUlRYOworCisgIHJldHVybiB0YXJnZXQ7Cit9CisKIC8qIEV4cGFuZCB0aGUgYnVpbHRp biBpbiBFWFAgYW5kIHN0b3JlIHRoZSByZXN1bHQgaW4gVEFSR0VULiAgU3RvcmUKICAgIHRy dWUgaW4gKkVYUEFOREVEUCBpZiB3ZSBmb3VuZCBhIGJ1aWx0aW4gdG8gZXhwYW5kLiAgKi8K IHN0YXRpYyBydHgKQEAgLTExMTgxLDYgKzExMjIwLDI5IEBAIGFsdGl2ZWNfZXhwYW5kX2J1 aWx0aW4gKHRyZWUgZXhwLCBydHggdGFyZ2V0LCBib29sICpleHBhbmRlZHApCiAJZW1pdF9p bnNuIChwYXQpOwogICAgICAgcmV0dXJuIE5VTExfUlRYOwogCisgICAgY2FzZSBBTFRJVkVD X0JVSUxUSU5fVlNFTF8yREY6CisgICAgICByZXR1cm4gYWx0aXZlY19leHBhbmRfdmVjX3Nl bF9idWlsdGluIChDT0RFX0ZPUl9hbHRpdmVjX3ZzZWx2MmRmLCBleHAsCisJCQkJCSAgICAg dGFyZ2V0KTsKKyAgICBjYXNlIEFMVElWRUNfQlVJTFRJTl9WU0VMXzJESToKKyAgICBjYXNl IEFMVElWRUNfQlVJTFRJTl9WU0VMXzJESV9VTlM6CisgICAgICByZXR1cm4gYWx0aXZlY19l eHBhbmRfdmVjX3NlbF9idWlsdGluIChDT0RFX0ZPUl9hbHRpdmVjX3ZzZWx2MmRpLCBleHAs CisJCQkJCSAgICAgdGFyZ2V0KTsKKyAgICBjYXNlIEFMVElWRUNfQlVJTFRJTl9WU0VMXzRT RjoKKyAgICAgIHJldHVybiBhbHRpdmVjX2V4cGFuZF92ZWNfc2VsX2J1aWx0aW4gKENPREVf Rk9SX2FsdGl2ZWNfdnNlbHY0c2YsIGV4cCwKKwkJCQkJICAgICB0YXJnZXQpOworICAgIGNh c2UgQUxUSVZFQ19CVUlMVElOX1ZTRUxfNFNJOgorICAgIGNhc2UgQUxUSVZFQ19CVUlMVElO X1ZTRUxfNFNJX1VOUzoKKyAgICAgIHJldHVybiBhbHRpdmVjX2V4cGFuZF92ZWNfc2VsX2J1 aWx0aW4gKENPREVfRk9SX2FsdGl2ZWNfdnNlbHY0c2ksIGV4cCwKKwkJCQkJICAgICB0YXJn ZXQpOworICAgIGNhc2UgQUxUSVZFQ19CVUlMVElOX1ZTRUxfOEhJOgorICAgIGNhc2UgQUxU SVZFQ19CVUlMVElOX1ZTRUxfOEhJX1VOUzoKKyAgICAgIHJldHVybiBhbHRpdmVjX2V4cGFu ZF92ZWNfc2VsX2J1aWx0aW4gKENPREVfRk9SX2FsdGl2ZWNfdnNlbHY4aGksIGV4cCwKKwkJ CQkJICAgICB0YXJnZXQpOworICAgIGNhc2UgQUxUSVZFQ19CVUlMVElOX1ZTRUxfMTZRSToK KyAgICBjYXNlIEFMVElWRUNfQlVJTFRJTl9WU0VMXzE2UUlfVU5TOgorICAgICAgcmV0dXJu IGFsdGl2ZWNfZXhwYW5kX3ZlY19zZWxfYnVpbHRpbiAoQ09ERV9GT1JfYWx0aXZlY192c2Vs djE2cWksIGV4cCwKKwkJCQkJICAgICB0YXJnZXQpOworCiAgICAgY2FzZSBBTFRJVkVDX0JV SUxUSU5fRFNTQUxMOgogICAgICAgZW1pdF9pbnNuIChnZW5fYWx0aXZlY19kc3NhbGwgKCkp OwogICAgICAgcmV0dXJuIE5VTExfUlRYOwpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9yczYw MDAvcnM2MDAwLmMgYi9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuYwppbmRleCBiZWZhYjUz MDMxYy4uNWE1MjAyYzQ1NWIgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvcnM2MDAwL3JzNjAw MC5jCisrKyBiL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC5jCkBAIC0xNTU2Niw5ICsxNTU2 Niw3IEBAIHJzNjAwMF9lbWl0X3ZlY3Rvcl9jb25kX2V4cHIgKHJ0eCBkZXN0LCBydHggb3Bf dHJ1ZSwgcnR4IG9wX2ZhbHNlLAogICBtYWNoaW5lX21vZGUgZGVzdF9tb2RlID0gR0VUX01P REUgKGRlc3QpOwogICBtYWNoaW5lX21vZGUgbWFza19tb2RlID0gR0VUX01PREUgKGNjX29w MCk7CiAgIGVudW0gcnR4X2NvZGUgcmNvZGUgPSBHRVRfQ09ERSAoY29uZCk7Ci0gIG1hY2hp bmVfbW9kZSBjY19tb2RlID0gQ0Ntb2RlOwogICBydHggbWFzazsKLSAgcnR4IGNvbmQyOwog ICBib29sIGludmVydF9tb3ZlID0gZmFsc2U7CiAKICAgaWYgKFZFQ1RPUl9VTklUX05PTkVf UCAoZGVzdF9tb2RlKSkKQEAgLTE1NjA4LDggKzE1NjA2LDYgQEAgcnM2MDAwX2VtaXRfdmVj dG9yX2NvbmRfZXhwciAocnR4IGRlc3QsIHJ0eCBvcF90cnVlLCBydHggb3BfZmFsc2UsCiAg ICAgY2FzZSBHRVU6CiAgICAgY2FzZSBMVFU6CiAgICAgY2FzZSBMRVU6Ci0gICAgICAvKiBN YXJrIHVuc2lnbmVkIHRlc3RzIHdpdGggQ0NVTlNtb2RlLiAgKi8KLSAgICAgIGNjX21vZGUg PSBDQ1VOU21vZGU7CiAKICAgICAgIC8qIEludmVydCBjb25kaXRpb24gdG8gYXZvaWQgY29t cG91bmQgdGVzdCBpZiBuZWNlc3NhcnkuICAqLwogICAgICAgaWYgKHJjb2RlID09IEdFVSB8 fCByY29kZSA9PSBMRVUpCkBAIC0xNTYyOSw2ICsxNTYyNSw5IEBAIHJzNjAwMF9lbWl0X3Zl Y3Rvcl9jb25kX2V4cHIgKHJ0eCBkZXN0LCBydHggb3BfdHJ1ZSwgcnR4IG9wX2ZhbHNlLAog ICBpZiAoIW1hc2spCiAgICAgcmV0dXJuIDA7CiAKKyAgaWYgKG1hc2tfbW9kZSAhPSBkZXN0 X21vZGUpCisgICAgbWFzayA9IHNpbXBsaWZ5X2dlbl9zdWJyZWcgKGRlc3RfbW9kZSwgbWFz aywgbWFza19tb2RlLCAwKTsKKwogICBpZiAoaW52ZXJ0X21vdmUpCiAgICAgc3RkOjpzd2Fw IChvcF90cnVlLCBvcF9mYWxzZSk7CiAKQEAgLTE1NjY4LDEzICsxNTY2NywxMSBAQCByczYw MDBfZW1pdF92ZWN0b3JfY29uZF9leHByIChydHggZGVzdCwgcnR4IG9wX3RydWUsIHJ0eCBv cF9mYWxzZSwKICAgaWYgKCFSRUdfUCAob3BfZmFsc2UpICYmICFTVUJSRUdfUCAob3BfZmFs c2UpKQogICAgIG9wX2ZhbHNlID0gZm9yY2VfcmVnIChkZXN0X21vZGUsIG9wX2ZhbHNlKTsK IAotICBjb25kMiA9IGdlbl9ydHhfZm10X2VlIChORSwgY2NfbW9kZSwgZ2VuX2xvd3BhcnQg KGRlc3RfbW9kZSwgbWFzayksCi0JCQkgIENPTlNUMF9SVFggKGRlc3RfbW9kZSkpOwotICBl bWl0X2luc24gKGdlbl9ydHhfU0VUIChkZXN0LAotCQkJICBnZW5fcnR4X0lGX1RIRU5fRUxT RSAoZGVzdF9tb2RlLAotCQkJCQkJY29uZDIsCi0JCQkJCQlvcF90cnVlLAotCQkJCQkJb3Bf ZmFsc2UpKSk7CisgIHJ0eCB0bXAgPSBnZW5fcnR4X0lPUiAoZGVzdF9tb2RlLAorCQkJIGdl bl9ydHhfQU5EIChkZXN0X21vZGUsIGdlbl9ydHhfTk9UIChkZXN0X21vZGUsIG1hc2spLAor CQkJCSAgICAgIG9wX2ZhbHNlKSwKKwkJCSBnZW5fcnR4X0FORCAoZGVzdF9tb2RlLCBtYXNr LCBvcF90cnVlKSk7CisgIGVtaXRfaW5zbiAoZ2VuX3J0eF9TRVQgKGRlc3QsIHRtcCkpOwog ICByZXR1cm4gMTsKIH0KIApkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9yczYwMDAvdmVjdG9y Lm1kIGIvZ2NjL2NvbmZpZy9yczYwMDAvdmVjdG9yLm1kCmluZGV4IDM0NDZiMDNkNDBkLi44 NWZmY2Y2YTc2MyAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9yczYwMDAvdmVjdG9yLm1kCisr KyBiL2djYy9jb25maWcvcnM2MDAwL3ZlY3Rvci5tZApAQCAtODYyLDIzICs4NjIsMjEgQEAg KGRlZmluZV9pbnNuX2FuZF9zcGxpdCAidmVjdG9yXzxjb2RlPjxtb2RlPiIKIDs7IHdoaWNo IGlzIGluIHRoZSByZXZlcnNlIG9yZGVyIHRoYXQgd2Ugd2FudAogKGRlZmluZV9leHBhbmQg InZlY3Rvcl9zZWxlY3RfPG1vZGU+IgogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWRUNfTCAw ICJ2bG9naWNhbF9vcGVyYW5kIikKLQkoaWZfdGhlbl9lbHNlOlZFQ19MCi0JIChuZTpDQyAo bWF0Y2hfb3BlcmFuZDpWRUNfTCAzICJ2bG9naWNhbF9vcGVyYW5kIikKLQkJKG1hdGNoX2R1 cCA0KSkKLQkgKG1hdGNoX29wZXJhbmQ6VkVDX0wgMiAidmxvZ2ljYWxfb3BlcmFuZCIpCi0J IChtYXRjaF9vcGVyYW5kOlZFQ19MIDEgInZsb2dpY2FsX29wZXJhbmQiKSkpXQotICAiVkVD VE9SX1VOSVRfQUxUSVZFQ19PUl9WU1hfUCAoPE1PREU+bW9kZSkiCi0gICJvcGVyYW5kc1s0 XSA9IENPTlNUMF9SVFggKDxNT0RFPm1vZGUpOyIpCisgICAgKGlvcjpWRUNfTAorICAgICAo YW5kOlZFQ19MIChub3Q6VkVDX0wgKG1hdGNoX29wZXJhbmQ6VkVDX0wgMyAidmxvZ2ljYWxf b3BlcmFuZCIpKQorICAgICAgKG1hdGNoX29wZXJhbmQ6VkVDX0wgMSAidmxvZ2ljYWxfb3Bl cmFuZCIpKQorICAgICAoYW5kOlZFQ19MIChtYXRjaF9kdXAgMykKKyAgICAgKG1hdGNoX29w ZXJhbmQ6VkVDX0wgMiAidmxvZ2ljYWxfb3BlcmFuZCIpKSkpXQorICAiVkVDVE9SX1VOSVRf QUxUSVZFQ19PUl9WU1hfUCAoPE1PREU+bW9kZSkiKQogCiAoZGVmaW5lX2V4cGFuZCAidmVj dG9yX3NlbGVjdF88bW9kZT5fdW5zIgogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWRUNfTCAw ICJ2bG9naWNhbF9vcGVyYW5kIikKLQkoaWZfdGhlbl9lbHNlOlZFQ19MCi0JIChuZTpDQ1VO UyAobWF0Y2hfb3BlcmFuZDpWRUNfTCAzICJ2bG9naWNhbF9vcGVyYW5kIikKLQkJICAgKG1h dGNoX2R1cCA0KSkKLQkgKG1hdGNoX29wZXJhbmQ6VkVDX0wgMiAidmxvZ2ljYWxfb3BlcmFu ZCIpCi0JIChtYXRjaF9vcGVyYW5kOlZFQ19MIDEgInZsb2dpY2FsX29wZXJhbmQiKSkpXQot ICAiVkVDVE9SX1VOSVRfQUxUSVZFQ19PUl9WU1hfUCAoPE1PREU+bW9kZSkiCi0gICJvcGVy YW5kc1s0XSA9IENPTlNUMF9SVFggKDxNT0RFPm1vZGUpOyIpCisgICAgKGlvcjpWRUNfTAor ICAgICAoYW5kOlZFQ19MIChub3Q6VkVDX0wgKG1hdGNoX29wZXJhbmQ6VkVDX0wgMyAidmxv Z2ljYWxfb3BlcmFuZCIpKQorICAgICAgKG1hdGNoX29wZXJhbmQ6VkVDX0wgMSAidmxvZ2lj YWxfb3BlcmFuZCIpKQorICAgICAoYW5kOlZFQ19MIChtYXRjaF9kdXAgMykKKyAgICAgKG1h dGNoX29wZXJhbmQ6VkVDX0wgMiAidmxvZ2ljYWxfb3BlcmFuZCIpKSkpXQorICAiVkVDVE9S X1VOSVRfQUxUSVZFQ19PUl9WU1hfUCAoPE1PREU+bW9kZSkiKQogCiA7OyBFeHBhbnNpb25z IHRoYXQgY29tcGFyZSB2ZWN0b3JzIHByb2R1Y2luZyBhIHZlY3RvciByZXN1bHQgYW5kIGEg cHJlZGljYXRlLAogOzsgc2V0dGluZyBDUjYgdG8gaW5kaWNhdGUgYSBjb21iaW5lZCBzdGF0 dXMKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvcnM2MDAwL3ZzeC5tZCBiL2djYy9jb25maWcv cnM2MDAwL3ZzeC5tZAppbmRleCBiY2I5MmJlMmY1Yy4uZjUzZGU3YmYzNGMgMTAwNjQ0Ci0t LSBhL2djYy9jb25maWcvcnM2MDAwL3ZzeC5tZAorKysgYi9nY2MvY29uZmlnL3JzNjAwMC92 c3gubWQKQEAgLTIxMDUsMzAgKzIxMDUsNjYgQEAgKGRlZmluZV9pbnNuICIqdnN4X2dlXzxt b2RlPl9wIgogICBbKHNldF9hdHRyICJ0eXBlIiAiPFZTdHlwZV9zaW1wbGU+IildKQogCiA7 OyBWZWN0b3Igc2VsZWN0Ci0oZGVmaW5lX2luc24gIip2c3hfeHhzZWw8bW9kZT4iCisoZGVm aW5lX2luc24gInZzeF94eHNlbDxtb2RlPiIKICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VlNY X0wgMCAidnN4X3JlZ2lzdGVyX29wZXJhbmQiICI9PFZTcj4sP3dhIikKLQkoaWZfdGhlbl9l bHNlOlZTWF9MCi0JIChuZTpDQyAobWF0Y2hfb3BlcmFuZDpWU1hfTCAxICJ2c3hfcmVnaXN0 ZXJfb3BlcmFuZCIgIjxWU3I+LHdhIikKLQkJKG1hdGNoX29wZXJhbmQ6VlNYX0wgNCAiemVy b19jb25zdGFudCIgIiIpKQotCSAobWF0Y2hfb3BlcmFuZDpWU1hfTCAyICJ2c3hfcmVnaXN0 ZXJfb3BlcmFuZCIgIjxWU3I+LHdhIikKLQkgKG1hdGNoX29wZXJhbmQ6VlNYX0wgMyAidnN4 X3JlZ2lzdGVyX29wZXJhbmQiICI8VlNyPix3YSIpKSldCi0gICJWRUNUT1JfTUVNX1ZTWF9Q ICg8TU9ERT5tb2RlKSIKLSAgInh4c2VsICV4MCwleDMsJXgyLCV4MSIKKyAgICAoaW9yOlZT WF9MCisgICAgIChhbmQ6VlNYX0wKKyAgICAgIChub3Q6VlNYX0wgKG1hdGNoX29wZXJhbmQ6 VlNYX0wgMyAidnN4X3JlZ2lzdGVyX29wZXJhbmQiICI8VlNyPix3YSIpKQorICAgICAgKG1h dGNoX29wZXJhbmQ6VlNYX0wgMSAidnN4X3JlZ2lzdGVyX29wZXJhbmQiICI8VlNyPix3YSIp KQorICAgICAoYW5kOlZTWF9MCisgICAgICAobWF0Y2hfb3BlcmFuZDpWU1hfTCAyICJ2c3hf cmVnaXN0ZXJfb3BlcmFuZCIgIjxWU3I+LHdhIikKKyAgICAgIChtYXRjaF9vcGVyYW5kOlZT WF9MIDQgInZzeF9yZWdpc3Rlcl9vcGVyYW5kIiAiPFZTcj4sd2EiKSkpKV0KKyAgIlZFQ1RP Ul9NRU1fVlNYX1AgKDxNT0RFPm1vZGUpCisgICYmIHJ0eF9lcXVhbF9wIChvcGVyYW5kc1sy XSwgb3BlcmFuZHNbM10pIgorICAieHhzZWwgJXgwLCV4MSwleDQsJXgzIgogICBbKHNldF9h dHRyICJ0eXBlIiAidmVjbW92ZSIpCiAgICAoc2V0X2F0dHIgImlzYSIgIjxWU2lzYT4iKV0p CiAKLShkZWZpbmVfaW5zbiAiKnZzeF94eHNlbDxtb2RlPl91bnMiCisoZGVmaW5lX2luc24g InZzeF94eHNlbDxtb2RlPjIiCiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlZTWF9MIDAgInZz eF9yZWdpc3Rlcl9vcGVyYW5kIiAiPTxWU3I+LD93YSIpCi0JKGlmX3RoZW5fZWxzZTpWU1hf TAotCSAobmU6Q0NVTlMgKG1hdGNoX29wZXJhbmQ6VlNYX0wgMSAidnN4X3JlZ2lzdGVyX29w ZXJhbmQiICI8VlNyPix3YSIpCi0JCSAgIChtYXRjaF9vcGVyYW5kOlZTWF9MIDQgInplcm9f Y29uc3RhbnQiICIiKSkKLQkgKG1hdGNoX29wZXJhbmQ6VlNYX0wgMiAidnN4X3JlZ2lzdGVy X29wZXJhbmQiICI8VlNyPix3YSIpCi0JIChtYXRjaF9vcGVyYW5kOlZTWF9MIDMgInZzeF9y ZWdpc3Rlcl9vcGVyYW5kIiAiPFZTcj4sd2EiKSkpXQotICAiVkVDVE9SX01FTV9WU1hfUCAo PE1PREU+bW9kZSkiCi0gICJ4eHNlbCAleDAsJXgzLCV4MiwleDEiCisgICAgKGlvcjpWU1hf TAorICAgICAoYW5kOlZTWF9MCisgICAgICAobm90OlZTWF9MIChtYXRjaF9vcGVyYW5kOlZT WF9MIDMgInZzeF9yZWdpc3Rlcl9vcGVyYW5kIiAiPFZTcj4sd2EiKSkKKyAgICAgIChtYXRj aF9vcGVyYW5kOlZTWF9MIDEgInZzeF9yZWdpc3Rlcl9vcGVyYW5kIiAiPFZTcj4sd2EiKSkK KyAgICAgKGFuZDpWU1hfTAorICAgICAgKG1hdGNoX29wZXJhbmQ6VlNYX0wgMiAidnN4X3Jl Z2lzdGVyX29wZXJhbmQiICI8VlNyPix3YSIpCisgICAgICAobWF0Y2hfb3BlcmFuZDpWU1hf TCA0ICJ2c3hfcmVnaXN0ZXJfb3BlcmFuZCIgIjxWU3I+LHdhIikpKSldCisgICJWRUNUT1Jf TUVNX1ZTWF9QICg8TU9ERT5tb2RlKQorICAmJiBydHhfZXF1YWxfcCAob3BlcmFuZHNbNF0s IG9wZXJhbmRzWzNdKSIKKyAgInh4c2VsICV4MCwleDEsJXgyLCV4MyIKICAgWyhzZXRfYXR0 ciAidHlwZSIgInZlY21vdmUiKQogICAgKHNldF9hdHRyICJpc2EiICI8VlNpc2E+IildKQog CisoZGVmaW5lX2luc24gInZzeF94eHNlbDxtb2RlPjMiCisgWyhzZXQgKG1hdGNoX29wZXJh bmQ6VlNYX0wgMCAidnN4X3JlZ2lzdGVyX29wZXJhbmQiICI9PFZTcj4sP3dhIikKKyAgIChp b3I6VlNYX0wKKyAgICAoYW5kOlZTWF9MCisgICAgIChtYXRjaF9vcGVyYW5kOlZTWF9MIDEg InZzeF9yZWdpc3Rlcl9vcGVyYW5kIiAiPFZTcj4sd2EiKQorICAgICAobWF0Y2hfb3BlcmFu ZDpWU1hfTCAyICJ2c3hfcmVnaXN0ZXJfb3BlcmFuZCIgIjxWU3I+LHdhIikpCisgICAgKGFu ZDpWU1hfTAorICAgICAobm90OlZTWF9MIChtYXRjaF9vcGVyYW5kOlZTWF9MIDMgInZzeF9y ZWdpc3Rlcl9vcGVyYW5kIiAiPFZTcj4sd2EiKSkKKyAgICAgKG1hdGNoX29wZXJhbmQ6VlNY X0wgNCAidnN4X3JlZ2lzdGVyX29wZXJhbmQiICI8VlNyPix3YSIpKSkpXQorICJWRUNUT1Jf TUVNX1ZTWF9QICg8TU9ERT5tb2RlKQorICAmJiBydHhfZXF1YWxfcCAob3BlcmFuZHNbMV0s IG9wZXJhbmRzWzNdKSIKKyAgInh4c2VsICV4MCwleDQsJXgyLCV4MyIKKyBbKHNldF9hdHRy ICJ0eXBlIiAidmVjbW92ZSIpCisgKHNldF9hdHRyICJpc2EiICI8VlNpc2E+IildKQorCiso ZGVmaW5lX2luc24gInZzeF94eHNlbDxtb2RlPjQiCisgWyhzZXQgKG1hdGNoX29wZXJhbmQ6 VlNYX0wgMCAidnN4X3JlZ2lzdGVyX29wZXJhbmQiICI9PFZTcj4sP3dhIikKKyAgIChpb3I6 VlNYX0wKKyAgICAoYW5kOlZTWF9MCisgICAgIChtYXRjaF9vcGVyYW5kOlZTWF9MIDEgInZz eF9yZWdpc3Rlcl9vcGVyYW5kIiAiPFZTcj4sd2EiKQorICAgICAobWF0Y2hfb3BlcmFuZDpW U1hfTCAyICJ2c3hfcmVnaXN0ZXJfb3BlcmFuZCIgIjxWU3I+LHdhIikpCisgICAgKGFuZDpW U1hfTAorICAgICAobm90OlZTWF9MIChtYXRjaF9vcGVyYW5kOlZTWF9MIDMgInZzeF9yZWdp c3Rlcl9vcGVyYW5kIiAiPFZTcj4sd2EiKSkKKyAgICAgKG1hdGNoX29wZXJhbmQ6VlNYX0wg NCAidnN4X3JlZ2lzdGVyX29wZXJhbmQiICI8VlNyPix3YSIpKSkpXQorICJWRUNUT1JfTUVN X1ZTWF9QICg8TU9ERT5tb2RlKQorICYmIHJ0eF9lcXVhbF9wIChvcGVyYW5kc1syXSwgb3Bl cmFuZHNbM10pIgorICJ4eHNlbCAleDAsJXg0LCV4MSwleDMiCisgWyhzZXRfYXR0ciAidHlw ZSIgInZlY21vdmUiKQorIChzZXRfYXR0ciAiaXNhIiAiPFZTaXNhPiIpXSkKKwogOzsgQ29w eSBzaWduCiAoZGVmaW5lX2luc24gInZzeF9jb3B5c2lnbjxtb2RlPjMiCiAgIFsoc2V0ICht YXRjaF9vcGVyYW5kOlZTWF9GIDAgInZzeF9yZWdpc3Rlcl9vcGVyYW5kIiAiPXdhIikKZGlm ZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9wb3dlcnBjL3ByOTQ2MTMuYyBi L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9wb3dlcnBjL3ByOTQ2MTMuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMDY2OTkwODhmOWEKLS0tIC9kZXYvbnVs bAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvcG93ZXJwYy9wcjk0NjEzLmMKQEAg LTAsMCArMSwzOCBAQAorLyogeyBkZy1kbyBydW4gfSAqLworLyogeyBkZy1yZXF1aXJlLWVm ZmVjdGl2ZS10YXJnZXQgdm14X2h3IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8zIC1tYWx0 aXZlYyIgfSAqLworCisjaW5jbHVkZSA8YWx0aXZlYy5oPgorCisvKiBUaGUgaW5pdGlhbCBp bXBsZW1lbnRhdGlvbiBvZiB2ZWNfc2VsIHVzZWQgYW4gSUZfVEhFTl9FTFNFIHJ0eC4KKyAg IFRoaXMgZGlkIE5PVCBtYXRjaCB3aGF0IHRoZSB2c2VsIGluc3RydWN0aW9uIGRvZXMuICB2 c2VsIGlzIGEKKyAgIGJpdC13aXNlIG9wZXJhdGlvbi4gIFVzaW5nIElGX1RIRU5fRUxTRSBt YWRlIHRoZSArIG9wZXJhdGlvbiB0byBiZQorICAgc2ltcGxpZmllZCBhd2F5IGluIGNvbWJp bmUuICBBIHBsdXMgb3BlcmF0aW9uIGFmZmVjdHMgb3RoZXIgYml0cyBpbgorICAgdGhlIHNh bWUgZWxlbWVudC4gSGVuY2UgcGVyLWVsZW1lbnQgc2ltcGxpZmljYXRpb25zIGFyZSB3cm9u ZyBmb3IKKyAgIHZzZWwuICAqLwordmVjdG9yIHVuc2lnbmVkIGNoYXIgX19hdHRyaWJ1dGVf Xygobm9pbmxpbmUpKQorZm9vICh2ZWN0b3IgdW5zaWduZWQgY2hhciBhLCB2ZWN0b3IgdW5z aWduZWQgY2hhciBiLCB2ZWN0b3IgdW5zaWduZWQgY2hhciBjKQoreworICByZXR1cm4gdmVj X3NlbCAoYSArIGIsIGMsIGEpOworfQorCit2ZWN0b3IgdW5zaWduZWQgY2hhciBfX2F0dHJp YnV0ZV9fKChub2lubGluZSkpCitiYXIgKHZlY3RvciB1bnNpZ25lZCBjaGFyIGEsIHZlY3Rv ciB1bnNpZ25lZCBjaGFyIGIsIHZlY3RvciB1bnNpZ25lZCBjaGFyIGMpCit7CisgIHJldHVy biB2ZWNfc2VsIChhIHwgYiwgYywgYSk7Cit9CisKK2ludAorbWFpbiAoKQoreworICB2ZWN0 b3IgdW5zaWduZWQgY2hhciB2ID0gKHZlY3RvciB1bnNpZ25lZCBjaGFyKXsgMSB9OworCisg IGlmIChmb28gKHYsIHYsIHYpWzBdICE9IDMpCisgICAgICBfX2J1aWx0aW5fYWJvcnQgKCk7 CisKKyAgaWYgKGJhciAodiwgdiwgdilbMF0gIT0gMSkKKyAgICBfX2J1aWx0aW5fYWJvcnQg KCk7CisKKyAgcmV0dXJuIDA7Cit9CisKLS0gCjIuMjUuMQoK --------------45CA673DE1ACABF41F66B638 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="0002-rs6000-Fold-xxsel-to-vsel-since-they-have-same-seman.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="0002-rs6000-Fold-xxsel-to-vsel-since-they-have-same-seman.pa"; filename*1="tch" RnJvbSA3NGNmMWZkMjk4ZTQ5MjNjMTA2ZGVhYmEzMTkyNDIzZDQ4MDQ5NTU5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBYaW9uZ2h1IEx1byA8bHVveGh1QGxpbnV4LmlibS5j b20+CkRhdGU6IEZyaSwgMTQgTWF5IDIwMjEgMDE6MjE6MDYgLTA1MDAKU3ViamVjdDogW1BB VENIIDIvMl0gcnM2MDAwOiBGb2xkIHh4c2VsIHRvIHZzZWwgc2luY2UgdGhleSBoYXZlIHNh bWUgc2VtYW50aWNzCgpnY2MvQ2hhbmdlTG9nOgoKCSogY29uZmlnL3JzNjAwMC9hbHRpdmVj Lm1kOiBBZGQgdnN4IHJlZ2lzdGVyIGNvbnN0cmFpbnRzLgoJKiBjb25maWcvcnM2MDAwL3Zz eC5tZCAodnN4X3h4c2VsPG1vZGU+KTogRGVsZXRlLgoJKHZzeF94eHNlbDxtb2RlPjIpOiBM aWtld2lzZS4KCSh2c3hfeHhzZWw8bW9kZT4zKTogTGlrZXdpc2UuCgkodnN4X3h4c2VsPG1v ZGU+NCk6IExpa2V3aXNlLgotLS0KIGdjYy9jb25maWcvcnM2MDAwL2FsdGl2ZWMubWQgfCA1 NiArKysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0KIGdjYy9jb25maWcvcnM2MDAw L3ZzeC5tZCAgICAgfCA2MSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K IDIgZmlsZXMgY2hhbmdlZCwgMzIgaW5zZXJ0aW9ucygrKSwgODUgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9yczYwMDAvYWx0aXZlYy5tZCBiL2djYy9jb25maWcv cnM2MDAwL2FsdGl2ZWMubWQKaW5kZXggZGY4ZjI0NzAxZDAuLjZjZTNlYjlkYmM4IDEwMDY0 NAotLS0gYS9nY2MvY29uZmlnL3JzNjAwMC9hbHRpdmVjLm1kCisrKyBiL2djYy9jb25maWcv cnM2MDAwL2FsdGl2ZWMubWQKQEAgLTY2OCw1OSArNjY4LDY3IEBAIChkZWZpbmVfaW5zbiAi KmFsdGl2ZWNfZ2V2NHNmIgogICBbKHNldF9hdHRyICJ0eXBlIiAidmVjY21wIildKQogCiAo ZGVmaW5lX2luc24gImFsdGl2ZWNfdnNlbDxtb2RlPiIKLSAgWyhzZXQgKG1hdGNoX29wZXJh bmQ6Vk0gMCAiYWx0aXZlY19yZWdpc3Rlcl9vcGVyYW5kIiAiPXYiKQorICBbKHNldCAobWF0 Y2hfb3BlcmFuZDpWTSAwICJhbHRpdmVjX3JlZ2lzdGVyX29wZXJhbmQiICI9d2EsdiIpCiAJ KGlvcjpWTQogCSAoYW5kOlZNCi0JICAobm90OlZNIChtYXRjaF9vcGVyYW5kOlZNIDMgImFs dGl2ZWNfcmVnaXN0ZXJfb3BlcmFuZCIgInYiKSkKLQkgIChtYXRjaF9vcGVyYW5kOlZNIDEg ImFsdGl2ZWNfcmVnaXN0ZXJfb3BlcmFuZCIgInYiKSkKKwkgIChub3Q6Vk0gKG1hdGNoX29w ZXJhbmQ6Vk0gMyAiYWx0aXZlY19yZWdpc3Rlcl9vcGVyYW5kIiAid2EsdiIpKQorCSAgKG1h dGNoX29wZXJhbmQ6Vk0gMSAiYWx0aXZlY19yZWdpc3Rlcl9vcGVyYW5kIiAid2EsdiIpKQog CSAoYW5kOlZNCi0JICAobWF0Y2hfb3BlcmFuZDpWTSAyICJhbHRpdmVjX3JlZ2lzdGVyX29w ZXJhbmQiICJ2IikKLQkgIChtYXRjaF9vcGVyYW5kOlZNIDQgImFsdGl2ZWNfcmVnaXN0ZXJf b3BlcmFuZCIgInYiKSkpKV0KKwkgIChtYXRjaF9vcGVyYW5kOlZNIDIgImFsdGl2ZWNfcmVn aXN0ZXJfb3BlcmFuZCIgIndhLHYiKQorCSAgKG1hdGNoX29wZXJhbmQ6Vk0gNCAiYWx0aXZl Y19yZWdpc3Rlcl9vcGVyYW5kIiAid2EsdiIpKSkpXQogICAiVkVDVE9SX1VOSVRfQUxUSVZF Q19PUl9WU1hfUCAoPE1PREU+bW9kZSkKICAgJiYgcnR4X2VxdWFsX3AgKG9wZXJhbmRzWzJd LCBvcGVyYW5kc1szXSkiCi0gICJ2c2VsICUwLCUxLCU0LCUzIgorICAiQAorICB4eHNlbCAl eDAsJXgxLCV4NCwleDMKKyAgdnNlbCAlMCwlMSwlNCwlMyIKICAgWyhzZXRfYXR0ciAidHlw ZSIgInZlY21vdmUiKV0pCiAKIChkZWZpbmVfaW5zbiAiYWx0aXZlY192c2VsPG1vZGU+MiIK LSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6Vk0gMCAiYWx0aXZlY19yZWdpc3Rlcl9vcGVyYW5k IiAiPXYiKQorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWTSAwICJhbHRpdmVjX3JlZ2lzdGVy X29wZXJhbmQiICI9d2EsdiIpCiAJKGlvcjpWTQogCSAoYW5kOlZNCi0JICAobm90OlZNICht YXRjaF9vcGVyYW5kOlZNIDMgImFsdGl2ZWNfcmVnaXN0ZXJfb3BlcmFuZCIgInYiKSkKLQkg IChtYXRjaF9vcGVyYW5kOlZNIDEgImFsdGl2ZWNfcmVnaXN0ZXJfb3BlcmFuZCIgInYiKSkK KwkgIChub3Q6Vk0gKG1hdGNoX29wZXJhbmQ6Vk0gMyAiYWx0aXZlY19yZWdpc3Rlcl9vcGVy YW5kIiAid2EsdiIpKQorCSAgKG1hdGNoX29wZXJhbmQ6Vk0gMSAiYWx0aXZlY19yZWdpc3Rl cl9vcGVyYW5kIiAid2EsdiIpKQogCSAoYW5kOlZNCi0JICAobWF0Y2hfb3BlcmFuZDpWTSAy ICJhbHRpdmVjX3JlZ2lzdGVyX29wZXJhbmQiICJ2IikKLQkgIChtYXRjaF9vcGVyYW5kOlZN IDQgImFsdGl2ZWNfcmVnaXN0ZXJfb3BlcmFuZCIgInYiKSkpKV0KKwkgIChtYXRjaF9vcGVy YW5kOlZNIDIgImFsdGl2ZWNfcmVnaXN0ZXJfb3BlcmFuZCIgIndhLHYiKQorCSAgKG1hdGNo X29wZXJhbmQ6Vk0gNCAiYWx0aXZlY19yZWdpc3Rlcl9vcGVyYW5kIiAid2EsdiIpKSkpXQog ICAiVkVDVE9SX1VOSVRfQUxUSVZFQ19PUl9WU1hfUCAoPE1PREU+bW9kZSkKICAgJiYgcnR4 X2VxdWFsX3AgKG9wZXJhbmRzWzRdLCBvcGVyYW5kc1szXSkiCi0gICJ2c2VsICUwLCUxLCUy LCUzIgorICAiQAorICB4eHNlbCAleDAsJXgxLCV4MiwleDMKKyAgdnNlbCAlMCwlMSwlMiwl MyIKICAgWyhzZXRfYXR0ciAidHlwZSIgInZlY21vdmUiKV0pCiAKIChkZWZpbmVfaW5zbiAi YWx0aXZlY192c2VsPG1vZGU+MyIKLSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6Vk0gMCAiYWx0 aXZlY19yZWdpc3Rlcl9vcGVyYW5kIiAiPXYiKQorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpW TSAwICJhbHRpdmVjX3JlZ2lzdGVyX29wZXJhbmQiICI9d2EsdiIpCiAJKGlvcjpWTQogCSAo YW5kOlZNCi0JICAobWF0Y2hfb3BlcmFuZDpWTSAxICJhbHRpdmVjX3JlZ2lzdGVyX29wZXJh bmQiICJ2IikKLQkgIChtYXRjaF9vcGVyYW5kOlZNIDIgImFsdGl2ZWNfcmVnaXN0ZXJfb3Bl cmFuZCIgInYiKSkKKwkgIChtYXRjaF9vcGVyYW5kOlZNIDEgImFsdGl2ZWNfcmVnaXN0ZXJf b3BlcmFuZCIgIndhLHYiKQorCSAgKG1hdGNoX29wZXJhbmQ6Vk0gMiAiYWx0aXZlY19yZWdp c3Rlcl9vcGVyYW5kIiAid2EsdiIpKQogCSAoYW5kOlZNCi0JICAobm90OlZNIChtYXRjaF9v cGVyYW5kOlZNIDMgImFsdGl2ZWNfcmVnaXN0ZXJfb3BlcmFuZCIgInYiKSkKLQkgIChtYXRj aF9vcGVyYW5kOlZNIDQgImFsdGl2ZWNfcmVnaXN0ZXJfb3BlcmFuZCIgInYiKSkpKV0KKwkg IChub3Q6Vk0gKG1hdGNoX29wZXJhbmQ6Vk0gMyAiYWx0aXZlY19yZWdpc3Rlcl9vcGVyYW5k IiAid2EsdiIpKQorCSAgKG1hdGNoX29wZXJhbmQ6Vk0gNCAiYWx0aXZlY19yZWdpc3Rlcl9v cGVyYW5kIiAid2EsdiIpKSkpXQogICAiVkVDVE9SX1VOSVRfQUxUSVZFQ19PUl9WU1hfUCAo PE1PREU+bW9kZSkKICAgJiYgcnR4X2VxdWFsX3AgKG9wZXJhbmRzWzFdLCBvcGVyYW5kc1sz XSkiCi0gICJ2c2VsICUwLCU0LCUyLCUzIgorICAiQAorICB4eHNlbCAleDAsJXg0LCV4Miwl eDMKKyAgdnNlbCAlMCwlNCwlMiwlMyIKICAgWyhzZXRfYXR0ciAidHlwZSIgInZlY21vdmUi KV0pCiAKIChkZWZpbmVfaW5zbiAiYWx0aXZlY192c2VsPG1vZGU+NCIKLSAgWyhzZXQgKG1h dGNoX29wZXJhbmQ6Vk0gMCAiYWx0aXZlY19yZWdpc3Rlcl9vcGVyYW5kIiAiPXYiKQorICBb KHNldCAobWF0Y2hfb3BlcmFuZDpWTSAwICJhbHRpdmVjX3JlZ2lzdGVyX29wZXJhbmQiICI9 d2EsdiIpCiAJKGlvcjpWTQogCSAoYW5kOlZNCi0JICAobWF0Y2hfb3BlcmFuZDpWTSAxICJh bHRpdmVjX3JlZ2lzdGVyX29wZXJhbmQiICJ2IikKLQkgIChtYXRjaF9vcGVyYW5kOlZNIDIg ImFsdGl2ZWNfcmVnaXN0ZXJfb3BlcmFuZCIgInYiKSkKKwkgIChtYXRjaF9vcGVyYW5kOlZN IDEgImFsdGl2ZWNfcmVnaXN0ZXJfb3BlcmFuZCIgIndhLHYiKQorCSAgKG1hdGNoX29wZXJh bmQ6Vk0gMiAiYWx0aXZlY19yZWdpc3Rlcl9vcGVyYW5kIiAid2EsdiIpKQogCSAoYW5kOlZN Ci0JICAobm90OlZNIChtYXRjaF9vcGVyYW5kOlZNIDMgImFsdGl2ZWNfcmVnaXN0ZXJfb3Bl cmFuZCIgInYiKSkKLQkgIChtYXRjaF9vcGVyYW5kOlZNIDQgImFsdGl2ZWNfcmVnaXN0ZXJf b3BlcmFuZCIgInYiKSkpKV0KKwkgIChub3Q6Vk0gKG1hdGNoX29wZXJhbmQ6Vk0gMyAiYWx0 aXZlY19yZWdpc3Rlcl9vcGVyYW5kIiAid2EsdiIpKQorCSAgKG1hdGNoX29wZXJhbmQ6Vk0g NCAiYWx0aXZlY19yZWdpc3Rlcl9vcGVyYW5kIiAid2EsdiIpKSkpXQogICAiVkVDVE9SX1VO SVRfQUxUSVZFQ19PUl9WU1hfUCAoPE1PREU+bW9kZSkKICAgJiYgcnR4X2VxdWFsX3AgKG9w ZXJhbmRzWzJdLCBvcGVyYW5kc1szXSkiCi0gICJ2c2VsICUwLCU0LCUxLCUzIgorICAiQAor ICB4eHNlbCAleDAsJXg0LCV4MSwleDMKKyAgdnNlbCAlMCwlNCwlMSwlMyIKICAgWyhzZXRf YXR0ciAidHlwZSIgInZlY21vdmUiKV0pCiAKIDs7IEZ1c2VkIG11bHRpcGx5IGFkZC4KZGlm ZiAtLWdpdCBhL2djYy9jb25maWcvcnM2MDAwL3ZzeC5tZCBiL2djYy9jb25maWcvcnM2MDAw L3ZzeC5tZAppbmRleCBmNTNkZTdiZjM0Yy4uNTVkODMwZDBmMjAgMTAwNjQ0Ci0tLSBhL2dj Yy9jb25maWcvcnM2MDAwL3ZzeC5tZAorKysgYi9nY2MvY29uZmlnL3JzNjAwMC92c3gubWQK QEAgLTIxMDQsNjcgKzIxMDQsNiBAQCAoZGVmaW5lX2luc24gIip2c3hfZ2VfPG1vZGU+X3Ai CiAgICJ4dmNtcGdlPHNkPnAuICV4MCwleDEsJXgyIgogICBbKHNldF9hdHRyICJ0eXBlIiAi PFZTdHlwZV9zaW1wbGU+IildKQogCi07OyBWZWN0b3Igc2VsZWN0Ci0oZGVmaW5lX2luc24g InZzeF94eHNlbDxtb2RlPiIKLSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VlNYX0wgMCAidnN4 X3JlZ2lzdGVyX29wZXJhbmQiICI9PFZTcj4sP3dhIikKLSAgICAoaW9yOlZTWF9MCi0gICAg IChhbmQ6VlNYX0wKLSAgICAgIChub3Q6VlNYX0wgKG1hdGNoX29wZXJhbmQ6VlNYX0wgMyAi dnN4X3JlZ2lzdGVyX29wZXJhbmQiICI8VlNyPix3YSIpKQotICAgICAgKG1hdGNoX29wZXJh bmQ6VlNYX0wgMSAidnN4X3JlZ2lzdGVyX29wZXJhbmQiICI8VlNyPix3YSIpKQotICAgICAo YW5kOlZTWF9MCi0gICAgICAobWF0Y2hfb3BlcmFuZDpWU1hfTCAyICJ2c3hfcmVnaXN0ZXJf b3BlcmFuZCIgIjxWU3I+LHdhIikKLSAgICAgIChtYXRjaF9vcGVyYW5kOlZTWF9MIDQgInZz eF9yZWdpc3Rlcl9vcGVyYW5kIiAiPFZTcj4sd2EiKSkpKV0KLSAgIlZFQ1RPUl9NRU1fVlNY X1AgKDxNT0RFPm1vZGUpCi0gICYmIHJ0eF9lcXVhbF9wIChvcGVyYW5kc1syXSwgb3BlcmFu ZHNbM10pIgotICAieHhzZWwgJXgwLCV4MSwleDQsJXgzIgotICBbKHNldF9hdHRyICJ0eXBl IiAidmVjbW92ZSIpCi0gICAoc2V0X2F0dHIgImlzYSIgIjxWU2lzYT4iKV0pCi0KLShkZWZp bmVfaW5zbiAidnN4X3h4c2VsPG1vZGU+MiIKLSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VlNY X0wgMCAidnN4X3JlZ2lzdGVyX29wZXJhbmQiICI9PFZTcj4sP3dhIikKLSAgICAoaW9yOlZT WF9MCi0gICAgIChhbmQ6VlNYX0wKLSAgICAgIChub3Q6VlNYX0wgKG1hdGNoX29wZXJhbmQ6 VlNYX0wgMyAidnN4X3JlZ2lzdGVyX29wZXJhbmQiICI8VlNyPix3YSIpKQotICAgICAgKG1h dGNoX29wZXJhbmQ6VlNYX0wgMSAidnN4X3JlZ2lzdGVyX29wZXJhbmQiICI8VlNyPix3YSIp KQotICAgICAoYW5kOlZTWF9MCi0gICAgICAobWF0Y2hfb3BlcmFuZDpWU1hfTCAyICJ2c3hf cmVnaXN0ZXJfb3BlcmFuZCIgIjxWU3I+LHdhIikKLSAgICAgIChtYXRjaF9vcGVyYW5kOlZT WF9MIDQgInZzeF9yZWdpc3Rlcl9vcGVyYW5kIiAiPFZTcj4sd2EiKSkpKV0KLSAgIlZFQ1RP Ul9NRU1fVlNYX1AgKDxNT0RFPm1vZGUpCi0gICYmIHJ0eF9lcXVhbF9wIChvcGVyYW5kc1s0 XSwgb3BlcmFuZHNbM10pIgotICAieHhzZWwgJXgwLCV4MSwleDIsJXgzIgotICBbKHNldF9h dHRyICJ0eXBlIiAidmVjbW92ZSIpCi0gICAoc2V0X2F0dHIgImlzYSIgIjxWU2lzYT4iKV0p Ci0KLShkZWZpbmVfaW5zbiAidnN4X3h4c2VsPG1vZGU+MyIKLSBbKHNldCAobWF0Y2hfb3Bl cmFuZDpWU1hfTCAwICJ2c3hfcmVnaXN0ZXJfb3BlcmFuZCIgIj08VlNyPiw/d2EiKQotICAg KGlvcjpWU1hfTAotICAgIChhbmQ6VlNYX0wKLSAgICAgKG1hdGNoX29wZXJhbmQ6VlNYX0wg MSAidnN4X3JlZ2lzdGVyX29wZXJhbmQiICI8VlNyPix3YSIpCi0gICAgIChtYXRjaF9vcGVy YW5kOlZTWF9MIDIgInZzeF9yZWdpc3Rlcl9vcGVyYW5kIiAiPFZTcj4sd2EiKSkKLSAgICAo YW5kOlZTWF9MCi0gICAgIChub3Q6VlNYX0wgKG1hdGNoX29wZXJhbmQ6VlNYX0wgMyAidnN4 X3JlZ2lzdGVyX29wZXJhbmQiICI8VlNyPix3YSIpKQotICAgICAobWF0Y2hfb3BlcmFuZDpW U1hfTCA0ICJ2c3hfcmVnaXN0ZXJfb3BlcmFuZCIgIjxWU3I+LHdhIikpKSldCi0gIlZFQ1RP Ul9NRU1fVlNYX1AgKDxNT0RFPm1vZGUpCi0gICYmIHJ0eF9lcXVhbF9wIChvcGVyYW5kc1sx XSwgb3BlcmFuZHNbM10pIgotICAieHhzZWwgJXgwLCV4NCwleDIsJXgzIgotIFsoc2V0X2F0 dHIgInR5cGUiICJ2ZWNtb3ZlIikKLSAoc2V0X2F0dHIgImlzYSIgIjxWU2lzYT4iKV0pCi0K LShkZWZpbmVfaW5zbiAidnN4X3h4c2VsPG1vZGU+NCIKLSBbKHNldCAobWF0Y2hfb3BlcmFu ZDpWU1hfTCAwICJ2c3hfcmVnaXN0ZXJfb3BlcmFuZCIgIj08VlNyPiw/d2EiKQotICAgKGlv cjpWU1hfTAotICAgIChhbmQ6VlNYX0wKLSAgICAgKG1hdGNoX29wZXJhbmQ6VlNYX0wgMSAi dnN4X3JlZ2lzdGVyX29wZXJhbmQiICI8VlNyPix3YSIpCi0gICAgIChtYXRjaF9vcGVyYW5k OlZTWF9MIDIgInZzeF9yZWdpc3Rlcl9vcGVyYW5kIiAiPFZTcj4sd2EiKSkKLSAgICAoYW5k OlZTWF9MCi0gICAgIChub3Q6VlNYX0wgKG1hdGNoX29wZXJhbmQ6VlNYX0wgMyAidnN4X3Jl Z2lzdGVyX29wZXJhbmQiICI8VlNyPix3YSIpKQotICAgICAobWF0Y2hfb3BlcmFuZDpWU1hf TCA0ICJ2c3hfcmVnaXN0ZXJfb3BlcmFuZCIgIjxWU3I+LHdhIikpKSldCi0gIlZFQ1RPUl9N RU1fVlNYX1AgKDxNT0RFPm1vZGUpCi0gJiYgcnR4X2VxdWFsX3AgKG9wZXJhbmRzWzJdLCBv cGVyYW5kc1szXSkiCi0gInh4c2VsICV4MCwleDQsJXgxLCV4MyIKLSBbKHNldF9hdHRyICJ0 eXBlIiAidmVjbW92ZSIpCi0gKHNldF9hdHRyICJpc2EiICI8VlNpc2E+IildKQotCiA7OyBD b3B5IHNpZ24KIChkZWZpbmVfaW5zbiAidnN4X2NvcHlzaWduPG1vZGU+MyIKICAgWyhzZXQg KG1hdGNoX29wZXJhbmQ6VlNYX0YgMCAidnN4X3JlZ2lzdGVyX29wZXJhbmQiICI9d2EiKQot LSAKMi4yNS4xCgo= --------------45CA673DE1ACABF41F66B638--