From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0b-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by sourceware.org (Postfix) with ESMTPS id 91E6D3848408; Wed, 9 Jun 2021 08:03:55 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 91E6D3848408 Received: from pps.filterd (m0098417.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 15983Des059028; Wed, 9 Jun 2021 04:03:55 -0400 Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com with ESMTP id 392rc8jrv1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 09 Jun 2021 04:03:54 -0400 Received: from m0098417.ppops.net (m0098417.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.43/8.16.0.43) with SMTP id 15983RAv060211; Wed, 9 Jun 2021 04:03:54 -0400 Received: from ppma06ams.nl.ibm.com (66.31.33a9.ip4.static.sl-reverse.com [169.51.49.102]) by mx0a-001b2d01.pphosted.com with ESMTP id 392rc8jrth-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 09 Jun 2021 04:03:54 -0400 Received: from pps.filterd (ppma06ams.nl.ibm.com [127.0.0.1]) by ppma06ams.nl.ibm.com (8.16.1.2/8.16.1.2) with SMTP id 15981Yqg002922; Wed, 9 Jun 2021 08:03:52 GMT Received: from b06cxnps3075.portsmouth.uk.ibm.com (d06relay10.portsmouth.uk.ibm.com [9.149.109.195]) by ppma06ams.nl.ibm.com with ESMTP id 3900hht0qh-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Wed, 09 Jun 2021 08:03:52 +0000 Received: from d06av23.portsmouth.uk.ibm.com (d06av23.portsmouth.uk.ibm.com [9.149.105.59]) by b06cxnps3075.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 15983mYW33227016 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Wed, 9 Jun 2021 08:03:49 GMT Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id BF37BA4057; Wed, 9 Jun 2021 08:03:48 +0000 (GMT) Received: from d06av23.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 750BBA404D; Wed, 9 Jun 2021 08:03:46 +0000 (GMT) Received: from luoxhus-MacBook-Pro.local (unknown [9.200.155.117]) by d06av23.portsmouth.uk.ibm.com (Postfix) with ESMTPS; Wed, 9 Jun 2021 08:03:46 +0000 (GMT) Subject: Re: [PATCH] rs6000: Remove unspecs for vec_mrghl[bhw] 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: <20210524090213.2813103-1-luoxhu@linux.ibm.com> <20210608232543.GC18427@gate.crashing.org> From: Xionghu Luo Message-ID: <7daea8f2-c0f4-f2e0-eca1-6cfc7496600d@linux.ibm.com> Date: Wed, 9 Jun 2021 16:03:43 +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: <20210608232543.GC18427@gate.crashing.org> Content-Type: multipart/mixed; boundary="------------8F27116F4E0DE1BE6F3BE0E8" Content-Language: en-US X-TM-AS-GCONF: 00 X-Proofpoint-ORIG-GUID: ypw2Gevgw8we4z6dUX9Vkfq1yY5Qy6FN X-Proofpoint-GUID: OlNWg6eoLBpvFA_tyDzSV7w3iUYI8Qkc X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.391, 18.0.761 definitions=2021-06-09_04:2021-06-04, 2021-06-09 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 adultscore=0 mlxscore=0 bulkscore=0 priorityscore=1501 clxscore=1015 mlxlogscore=999 malwarescore=0 impostorscore=0 lowpriorityscore=0 spamscore=0 suspectscore=0 phishscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2104190000 definitions=main-2106090034 X-Spam-Status: No, score=-10.3 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_EF, GIT_PATCH_0, NICE_REPLY_A, RCVD_IN_MSPIKE_H2, SCC_10_SHORT_WORD_LINES, SCC_20_SHORT_WORD_LINES, SCC_5_SHORT_WORD_LINES, 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: Wed, 09 Jun 2021 08:03:59 -0000 This is a multi-part message in MIME format. --------------8F27116F4E0DE1BE6F3BE0E8 Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Hi, On 2021/6/9 07:25, Segher Boessenkool wrote: > On Mon, May 24, 2021 at 04:02:13AM -0500, Xionghu Luo wrote: >> vmrghb only accepts permute index {0, 16, 1, 17, 2, 18, 3, 19, 4, 20, >> 5, 21, 6, 22, 7, 23} no matter for BE or LE in ISA, similarly for vmrghlb. > > (vmrglb) > >> + if (BYTES_BIG_ENDIAN) >> + emit_insn ( >> + gen_altivec_vmrghb_direct (operands[0], operands[1], operands[2])); >> + else >> + emit_insn ( >> + gen_altivec_vmrglb_direct (operands[0], operands[2], operands[1])); > > Please don't indent like that, it doesn't match what we do elsewhere. > For better or for worse (for worse imo), we use deep hanging indents. > If you have to, you can do something like > > rtx insn; > if (BYTES_BIG_ENDIAN) > insn = gen_altivec_vmrghb_direct (operands[0], operands[1], operands[2]); > else > insn = gen_altivec_vmrglb_direct (operands[0], operands[2], operands[1]); > emit_insn (insn); > > (this is better even, in that it has only one emit_insn), or even > > rtx (*fun) () = BYTES_BIG_ENDIAN ? gen_altivec_vmrghb_direct > : gen_altivec_vmrglb_direct; > if (!BYTES_BIG_ENDIAN) > std::swap (operands[1], operands[2]); > emit_insn (fun (operands[0], operands[1], operands[2])); > > Well, C++ does not allow that last example like that, sigh, so > rtx (*fun) (rtx, rtx, rtx) = BYTES_BIG_ENDIAN ? gen_altivec_vmrghb_direct > : gen_altivec_vmrglb_direct; > > This is shorter than the other two options ;-) Changed. > >> +(define_insn "altivec_vmrghb_direct" >> [(set (match_operand:V16QI 0 "register_operand" "=v") >> + (vec_select:V16QI > > This should be indented one space more. > >> "TARGET_ALTIVEC" >> "@ >> - xxmrghw %x0,%x1,%x2 >> - vmrghw %0,%1,%2" >> + xxmrghw %x0,%x1,%x2 >> + vmrghw %0,%1,%2" > > The original indent was correct, please restore. > >> - emit_insn (gen_altivec_vmrghw_direct (operands[0], ve, vo)); >> + emit_insn (gen_altivec_vmrghw_direct_v4si (operands[0], ve, vo)); > > When you see a mode as part of a pattern name, chances are that it will > be a good candidate for using parameterized names with. (But don't do > that now, just keep it in mind as a nice cleanup to do). OK. > >> @@ -23022,8 +23022,8 @@ altivec_expand_vec_perm_const (rtx target, rtx op0, rtx op1, >> : CODE_FOR_altivec_vmrglh_direct), >> { 0, 1, 16, 17, 2, 3, 18, 19, 4, 5, 20, 21, 6, 7, 22, 23 } }, >> { OPTION_MASK_ALTIVEC, >> - (BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrghw_direct >> - : CODE_FOR_altivec_vmrglw_direct), >> + (BYTES_BIG_ENDIAN ? CODE_FOR_altivec_vmrghw_direct_v4si >> + : CODE_FOR_altivec_vmrglw_direct_v4si), > > The correct way is to align the ? and the : (or put everything on one > line of course, if that fits) > > The parens around this are not needed btw, and are a distraction. Changed. > >> --- a/gcc/testsuite/gcc.target/powerpc/builtins-1.c >> +++ b/gcc/testsuite/gcc.target/powerpc/builtins-1.c >> @@ -317,10 +317,10 @@ int main () >> /* { dg-final { scan-assembler-times "vctuxs" 2 } } */ >> >> /* { dg-final { scan-assembler-times "vmrghb" 4 { target be } } } */ >> -/* { dg-final { scan-assembler-times "vmrghb" 5 { target le } } } */ >> +/* { dg-final { scan-assembler-times "vmrghb" 6 { target le } } } */ >> /* { dg-final { scan-assembler-times "vmrghh" 8 } } */ >> -/* { dg-final { scan-assembler-times "xxmrghw" 8 } } */ >> -/* { dg-final { scan-assembler-times "xxmrglw" 8 } } */ >> +/* { dg-final { scan-assembler-times "xxmrghw" 4 } } */ >> +/* { dg-final { scan-assembler-times "xxmrglw" 4 } } */ >> /* { dg-final { scan-assembler-times "vmrglh" 8 } } */ >> /* { dg-final { scan-assembler-times "xxlnor" 6 } } */ >> /* { dg-final { scan-assembler-times {\mvpkudus\M} 1 } } */ >> @@ -347,7 +347,7 @@ int main () >> /* { dg-final { scan-assembler-times "vspltb" 6 } } */ >> /* { dg-final { scan-assembler-times "vspltw" 0 } } */ >> /* { dg-final { scan-assembler-times "vmrgow" 8 } } */ >> -/* { dg-final { scan-assembler-times "vmrglb" 5 { target le } } } */ >> +/* { dg-final { scan-assembler-times "vmrglb" 4 { target le } } } */ >> /* { dg-final { scan-assembler-times "vmrglb" 6 { target be } } } */ >> /* { dg-final { scan-assembler-times "vmrgew" 8 } } */ >> /* { dg-final { scan-assembler-times "vsplth" 8 } } */ > > Are those changes correct? It looks like a vmrglb became a vmrghb, and > that 4 each of xxmrghw and xxmrglw disappeared? Both seem wrong? This case is built with "-mdejagnu-cpu=power8 -O0 -mno-fold-gimple -dp" and it also counted the generated instruction patterns. 1) "vsx_xxmrghw_v4si" is replaced by "altivec_vmrglw_direct_v4si/0", so it decreases from 8 to 4. (Likewise for vsx_xxmrglw_v4si.) li 9,48 # 1282 [c=4 l=4] *movdi_internal64/3 - lxvd2x 0,31,9 # 31 [c=8 l=4] *vsx_lxvd2x4_le_v4si - xxpermdi 0,0,0,2 # 32 [c=4 l=4] xxswapd_v4si - xxmrglw 0,0,12 # 33 [c=4 l=4] vsx_xxmrghw_v4si + lxvd2x 12,31,9 # 31 [c=8 l=4] *vsx_lxvd2x4_le_v4si + xxpermdi 12,12,12,2 # 32 [c=4 l=4] xxswapd_v4si + xxmrglw 0,12,0 # 33 [c=4 l=4] altivec_vmrglw_direct_v4si/0 xxpermdi 0,0,0,2 # 35 [c=4 l=4] xxswapd_v4sf Note that v0 and v12 is swapped in lxvd2x, these new 3 instructions produces same result than before. 2) "*altivec_vmrglb_internal" is replaced by "altivec_vmrghb_direct" with this patch, then vmrglb count decreases from 5 to 4 and vmrghb increases from 5 to 6. (BYTES_BIG_ENDIAN is checked early in RTL generation instead of final to remove the UNSPECs for potential optimization through backend.) li 9,928 # 1424 [c=4 l=4] *movdi_internal64/3 lxvd2x 0,31,9 # 416 [c=8 l=4] *vsx_lxvd2x16_le_V16QI - xxpermdi 33,0,0,2 # 417 [c=4 l=4] xxswapd_v16qi + xxpermdi 32,0,0,2 # 417 [c=4 l=4] xxswapd_v16qi li 9,944 # 1425 [c=4 l=4] *movdi_internal64/3 lxvd2x 0,31,9 # 418 [c=8 l=4] *vsx_lxvd2x16_le_V16QI - xxpermdi 32,0,0,2 # 419 [c=4 l=4] xxswapd_v16qi - vmrghb 0,0,1 # 420 [c=4 l=4] *altivec_vmrglb_internal + xxpermdi 33,0,0,2 # 419 [c=4 l=4] xxswapd_v16qi + vmrghb 0,1,0 # 420 [c=4 l=4] altivec_vmrghb_direct xxpermdi 0,32,32,2 # 421 [c=4 l=4] xxswapd_v16qi Seems not necessary to also use \m and \M here to count only ASM here? Update the patch as attached. -- Thanks, Xionghu --------------8F27116F4E0DE1BE6F3BE0E8 Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="0001-rs6000-Remove-unspecs-for-vec_mrghl-bhw.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0001-rs6000-Remove-unspecs-for-vec_mrghl-bhw.patch" RnJvbSBlM2E2Y2JmYmEzOTlkMWI0MGEwYTMwM2FmZWE1M2E2N2IxMTllNDgyIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBYaW9uZyBIdSBMdW8gPGx1b3hodUBsaW51eC5pYm0u Y29tPgpEYXRlOiBNb24sIDE3IE1heSAyMDIxIDAzOjM5OjE5IC0wNTAwClN1YmplY3Q6IFtQ QVRDSF0gcnM2MDAwOiBSZW1vdmUgdW5zcGVjcyBmb3IgdmVjX21yZ2hsW2Jod10KCnZtcmdo YiBvbmx5IGFjY2VwdHMgcGVybXV0ZSBpbmRleCB7MCwgMTYsIDEsIDE3LCAyLCAxOCwgMywg MTksIDQsIDIwLAo1LCAyMSwgNiwgMjIsIDcsIDIzfSBubyBtYXR0ZXIgZm9yIEJFIG9yIExF IGluIElTQSwgc2ltaWxhcmx5IGZvciB2bXJnbGIuClJlbW92ZSBVTlNQRUNfVk1SR0hfRElS RUNUL1VOU1BFQ19WTVJHTF9ESVJFQ1QgcGF0dGVybiBhcyB2ZWNfc2VsZWN0CisgdmVjX2Nv bmNhdCBhcyBub3JtYWwgUlRMLgoKVGVzdGVkIHBhc3Mgb24gUDhMRSwgUDlMRSBhbmQgUDhC RXttMzJ9LCBvayBmb3IgdHJ1bms/CgpnY2MvQ2hhbmdlTG9nOgoKCSogY29uZmlnL3JzNjAw MC9hbHRpdmVjLm1kICgqYWx0aXZlY192bXJnaGJfaW50ZXJuYWwpOiBEZWxldGUuCgkoYWx0 aXZlY192bXJnaGJfZGlyZWN0KTogTmV3LgoJKCphbHRpdmVjX3ZtcmdoaF9pbnRlcm5hbCk6 IERlbGV0ZS4KCShhbHRpdmVjX3ZtcmdoaF9kaXJlY3QpOiBOZXcuCgkoKmFsdGl2ZWNfdm1y Z2h3X2ludGVybmFsKTogRGVsZXRlLgoJKGFsdGl2ZWNfdm1yZ2h3X2RpcmVjdF88bW9kZT4p OiBOZXcuCgkoYWx0aXZlY192bXJnaHdfZGlyZWN0KTogRGVsZXRlLgoJKCphbHRpdmVjX3Zt cmdsYl9pbnRlcm5hbCk6IERlbGV0ZS4KCShhbHRpdmVjX3ZtcmdsYl9kaXJlY3QpOiBOZXcu CgkoKmFsdGl2ZWNfdm1yZ2xoX2ludGVybmFsKTogRGVsZXRlLgoJKGFsdGl2ZWNfdm1yZ2xo X2RpcmVjdCk6IE5ldy4KCSgqYWx0aXZlY192bXJnbHdfaW50ZXJuYWwpOiBEZWxldGUuCgko YWx0aXZlY192bXJnbHdfZGlyZWN0Xzxtb2RlPik6IE5ldy4KCShhbHRpdmVjX3Ztcmdsd19k aXJlY3QpOiBEZWxldGUuCgkqIGNvbmZpZy9yczYwMDAvcnM2MDAwLXA4c3dhcC5jIChydHhf aXNfc3dhcHBhYmxlX3ApOiBBZGp1c3QuCgkqIGNvbmZpZy9yczYwMDAvcnM2MDAwLmMgKGFs dGl2ZWNfZXhwYW5kX3ZlY19wZXJtX2NvbnN0KToKCUFkanVzdC4KCSogY29uZmlnL3JzNjAw MC92c3gubWQgKHZzeF94eG1yZ2h3Xzxtb2RlPik6IEFkanVzdC4KCSh2c3hfeHhtcmdsd188 bW9kZT4pOiBBZGp1c3QuCgpnY2MvdGVzdHN1aXRlL0NoYW5nZUxvZzoKCgkqIGdjYy50YXJn ZXQvcG93ZXJwYy9idWlsdGlucy0xLmM6IFVwZGF0ZSBpbnN0cnVjdGlvbiBjb3VudHMuCi0t LQogZ2NjL2NvbmZpZy9yczYwMDAvYWx0aXZlYy5tZCAgICAgICAgICAgICAgICAgIHwgMjAz ICsrKysrLS0tLS0tLS0tLS0tLQogZ2NjL2NvbmZpZy9yczYwMDAvcnM2MDAwLXA4c3dhcC5j ICAgICAgICAgICAgIHwgICAyIC0KIGdjYy9jb25maWcvcnM2MDAwL3JzNjAwMC5jICAgICAg ICAgICAgICAgICAgICB8ICA3NSArKystLS0tCiBnY2MvY29uZmlnL3JzNjAwMC92c3gubWQg ICAgICAgICAgICAgICAgICAgICAgfCAgMjYgKystCiBnY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvcG93ZXJwYy9idWlsdGlucy0xLmMgfCAgIDggKy0KIDUgZmlsZXMgY2hhbmdlZCwgMTE2 IGluc2VydGlvbnMoKyksIDE5OCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9nY2MvY29u ZmlnL3JzNjAwMC9hbHRpdmVjLm1kIGIvZ2NjL2NvbmZpZy9yczYwMDAvYWx0aXZlYy5tZApp bmRleCAyMDhkNjM0MzIyNS4uMDk3YTEyN2JlMDcgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcv cnM2MDAwL2FsdGl2ZWMubWQKKysrIGIvZ2NjL2NvbmZpZy9yczYwMDAvYWx0aXZlYy5tZApA QCAtMTQzLDggKzE0Myw2IEBAIChkZWZpbmVfY19lbnVtICJ1bnNwZWMiCiAgICBVTlNQRUNf VlVQS0hVX1Y0U0YKICAgIFVOU1BFQ19WVVBLTFVfVjRTRgogICAgVU5TUEVDX1ZHQkJECi0g ICBVTlNQRUNfVk1SR0hfRElSRUNUCi0gICBVTlNQRUNfVk1SR0xfRElSRUNUCiAgICBVTlNQ RUNfVlNQTFRfRElSRUNUCiAgICBVTlNQRUNfVk1SR0VXX0RJUkVDVAogICAgVU5TUEVDX1ZN UkdPV19ESVJFQ1QKQEAgLTEyOTEsMTkgKzEyODksMTcgQEAgKGRlZmluZV9leHBhbmQgImFs dGl2ZWNfdm1yZ2hiIgogICAgKHVzZSAobWF0Y2hfb3BlcmFuZDpWMTZRSSAyICJyZWdpc3Rl cl9vcGVyYW5kIikpXQogICAiVEFSR0VUX0FMVElWRUMiCiB7Ci0gIHJ0dmVjIHYgPSBnZW5f cnR2ZWMgKDE2LCBHRU5fSU5UICgwKSwgR0VOX0lOVCAoMTYpLCBHRU5fSU5UICgxKSwgR0VO X0lOVCAoMTcpLAotCQkgICAgICAgR0VOX0lOVCAoMiksIEdFTl9JTlQgKDE4KSwgR0VOX0lO VCAoMyksIEdFTl9JTlQgKDE5KSwKLQkJICAgICAgIEdFTl9JTlQgKDQpLCBHRU5fSU5UICgy MCksIEdFTl9JTlQgKDUpLCBHRU5fSU5UICgyMSksCi0JCSAgICAgICBHRU5fSU5UICg2KSwg R0VOX0lOVCAoMjIpLCBHRU5fSU5UICg3KSwgR0VOX0lOVCAoMjMpKTsKLSAgcnR4IHggPSBn ZW5fcnR4X1ZFQ19DT05DQVQgKFYzMlFJbW9kZSwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJd KTsKLSAgeCA9IGdlbl9ydHhfVkVDX1NFTEVDVCAoVjE2UUltb2RlLCB4LCBnZW5fcnR4X1BB UkFMTEVMIChWT0lEbW9kZSwgdikpOwotICBlbWl0X2luc24gKGdlbl9ydHhfU0VUIChvcGVy YW5kc1swXSwgeCkpOworICBydHggKCpmdW4pIChydHgsIHJ0eCwgcnR4KSA9IEJZVEVTX0JJ R19FTkRJQU4gPyBnZW5fYWx0aXZlY192bXJnaGJfZGlyZWN0CisJCQkJCQk6IGdlbl9hbHRp dmVjX3ZtcmdsYl9kaXJlY3Q7CisgIGlmICghQllURVNfQklHX0VORElBTikKKyAgICBzdGQ6 OnN3YXAgKG9wZXJhbmRzWzFdLCBvcGVyYW5kc1syXSk7CisgIGVtaXRfaW5zbiAoZnVuIChv cGVyYW5kc1swXSwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdKSk7CiAgIERPTkU7CiB9KQog Ci0oZGVmaW5lX2luc24gIiphbHRpdmVjX3ZtcmdoYl9pbnRlcm5hbCIKKyhkZWZpbmVfaW5z biAiYWx0aXZlY192bXJnaGJfZGlyZWN0IgogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWMTZR SSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXYiKQotICAgICAgICAodmVjX3NlbGVjdDpWMTZR SQorCSh2ZWNfc2VsZWN0OlYxNlFJCiAJICAodmVjX2NvbmNhdDpWMzJRSQogCSAgICAobWF0 Y2hfb3BlcmFuZDpWMTZRSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAidiIpCiAJICAgIChtYXRj aF9vcGVyYW5kOlYxNlFJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJ2IikpCkBAIC0xMzE2LDIw ICsxMzEyLDYgQEAgKGRlZmluZV9pbnNuICIqYWx0aXZlY192bXJnaGJfaW50ZXJuYWwiCiAJ CSAgICAgKGNvbnN0X2ludCA2KSAoY29uc3RfaW50IDIyKQogCQkgICAgIChjb25zdF9pbnQg NykgKGNvbnN0X2ludCAyMyldKSkpXQogICAiVEFSR0VUX0FMVElWRUMiCi17Ci0gIGlmIChC WVRFU19CSUdfRU5ESUFOKQotICAgIHJldHVybiAidm1yZ2hiICUwLCUxLCUyIjsKLSAgZWxz ZQotICAgIHJldHVybiAidm1yZ2xiICUwLCUyLCUxIjsKLX0KLSAgWyhzZXRfYXR0ciAidHlw ZSIgInZlY3Blcm0iKV0pCi0KLShkZWZpbmVfaW5zbiAiYWx0aXZlY192bXJnaGJfZGlyZWN0 IgotICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWMTZRSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAi PXYiKQotCSh1bnNwZWM6VjE2UUkgWyhtYXRjaF9vcGVyYW5kOlYxNlFJIDEgInJlZ2lzdGVy X29wZXJhbmQiICJ2IikKLQkJICAgICAgIChtYXRjaF9vcGVyYW5kOlYxNlFJIDIgInJlZ2lz dGVyX29wZXJhbmQiICJ2IildCi0JCSAgICAgIFVOU1BFQ19WTVJHSF9ESVJFQ1QpKV0KLSAg IlRBUkdFVF9BTFRJVkVDIgogICAidm1yZ2hiICUwLCUxLCUyIgogICBbKHNldF9hdHRyICJ0 eXBlIiAidmVjcGVybSIpXSkKIApAQCAtMTMzOSwxNiArMTMyMSwxNSBAQCAoZGVmaW5lX2V4 cGFuZCAiYWx0aXZlY192bXJnaGgiCiAgICAodXNlIChtYXRjaF9vcGVyYW5kOlY4SEkgMiAi cmVnaXN0ZXJfb3BlcmFuZCIpKV0KICAgIlRBUkdFVF9BTFRJVkVDIgogewotICBydHZlYyB2 ID0gZ2VuX3J0dmVjICg4LCBHRU5fSU5UICgwKSwgR0VOX0lOVCAoOCksIEdFTl9JTlQgKDEp LCBHRU5fSU5UICg5KSwKLQkJICAgICAgIEdFTl9JTlQgKDIpLCBHRU5fSU5UICgxMCksIEdF Tl9JTlQgKDMpLCBHRU5fSU5UICgxMSkpOwotICBydHggeCA9IGdlbl9ydHhfVkVDX0NPTkNB VCAoVjE2SEltb2RlLCBvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0pOwotCi0gIHggPSBnZW5f cnR4X1ZFQ19TRUxFQ1QgKFY4SEltb2RlLCB4LCBnZW5fcnR4X1BBUkFMTEVMIChWT0lEbW9k ZSwgdikpOwotICBlbWl0X2luc24gKGdlbl9ydHhfU0VUIChvcGVyYW5kc1swXSwgeCkpOwor ICBydHggKCpmdW4pIChydHgsIHJ0eCwgcnR4KSA9IEJZVEVTX0JJR19FTkRJQU4gPyBnZW5f YWx0aXZlY192bXJnaGhfZGlyZWN0CisJCQkJCQk6IGdlbl9hbHRpdmVjX3ZtcmdsaF9kaXJl Y3Q7CisgIGlmICghQllURVNfQklHX0VORElBTikKKyAgICBzdGQ6OnN3YXAgKG9wZXJhbmRz WzFdLCBvcGVyYW5kc1syXSk7CisgIGVtaXRfaW5zbiAoZnVuIChvcGVyYW5kc1swXSwgb3Bl cmFuZHNbMV0sIG9wZXJhbmRzWzJdKSk7CiAgIERPTkU7CiB9KQogCi0oZGVmaW5lX2luc24g IiphbHRpdmVjX3ZtcmdoaF9pbnRlcm5hbCIKKyhkZWZpbmVfaW5zbiAiYWx0aXZlY192bXJn aGhfZGlyZWN0IgogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWOEhJIDAgInJlZ2lzdGVyX29w ZXJhbmQiICI9diIpCiAgICAgICAgICh2ZWNfc2VsZWN0OlY4SEkKIAkgICh2ZWNfY29uY2F0 OlYxNkhJCkBAIC0xMzU5LDIwICsxMzQwLDYgQEAgKGRlZmluZV9pbnNuICIqYWx0aXZlY192 bXJnaGhfaW50ZXJuYWwiCiAJCSAgICAgKGNvbnN0X2ludCAyKSAoY29uc3RfaW50IDEwKQog CQkgICAgIChjb25zdF9pbnQgMykgKGNvbnN0X2ludCAxMSldKSkpXQogICAiVEFSR0VUX0FM VElWRUMiCi17Ci0gIGlmIChCWVRFU19CSUdfRU5ESUFOKQotICAgIHJldHVybiAidm1yZ2ho ICUwLCUxLCUyIjsKLSAgZWxzZQotICAgIHJldHVybiAidm1yZ2xoICUwLCUyLCUxIjsKLX0K LSAgWyhzZXRfYXR0ciAidHlwZSIgInZlY3Blcm0iKV0pCi0KLShkZWZpbmVfaW5zbiAiYWx0 aXZlY192bXJnaGhfZGlyZWN0IgotICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWOEhJIDAgInJl Z2lzdGVyX29wZXJhbmQiICI9diIpCi0gICAgICAgICh1bnNwZWM6VjhISSBbKG1hdGNoX29w ZXJhbmQ6VjhISSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAidiIpCi0gICAgICAgICAgICAgICAg ICAgICAgKG1hdGNoX29wZXJhbmQ6VjhISSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAidiIpXQot ICAgICAgICAgICAgICAgICAgICAgVU5TUEVDX1ZNUkdIX0RJUkVDVCkpXQotICAiVEFSR0VU X0FMVElWRUMiCiAgICJ2bXJnaGggJTAsJTEsJTIiCiAgIFsoc2V0X2F0dHIgInR5cGUiICJ2 ZWNwZXJtIildKQogCkBAIC0xMzgyLDM1ICsxMzQ5LDIzIEBAIChkZWZpbmVfZXhwYW5kICJh bHRpdmVjX3ZtcmdodyIKICAgICh1c2UgKG1hdGNoX29wZXJhbmQ6VjRTSSAyICJyZWdpc3Rl cl9vcGVyYW5kIikpXQogICAiVkVDVE9SX01FTV9BTFRJVkVDX1AgKFY0U0ltb2RlKSIKIHsK LSAgcnR2ZWMgdiA9IGdlbl9ydHZlYyAoNCwgR0VOX0lOVCAoMCksIEdFTl9JTlQgKDQpLCBH RU5fSU5UICgxKSwgR0VOX0lOVCAoNSkpOwotICBydHggeCA9IGdlbl9ydHhfVkVDX0NPTkNB VCAoVjhTSW1vZGUsIG9wZXJhbmRzWzFdLCBvcGVyYW5kc1syXSk7Ci0gIHggPSBnZW5fcnR4 X1ZFQ19TRUxFQ1QgKFY0U0ltb2RlLCB4LCBnZW5fcnR4X1BBUkFMTEVMIChWT0lEbW9kZSwg dikpOwotICBlbWl0X2luc24gKGdlbl9ydHhfU0VUIChvcGVyYW5kc1swXSwgeCkpOworICBy dHggKCpmdW4pIChydHgsIHJ0eCwgcnR4KTsKKyAgZnVuID0gQllURVNfQklHX0VORElBTiA/ IGdlbl9hbHRpdmVjX3Ztcmdod19kaXJlY3RfdjRzaQorCQkJIDogZ2VuX2FsdGl2ZWNfdm1y Z2x3X2RpcmVjdF92NHNpOworICBpZiAoIUJZVEVTX0JJR19FTkRJQU4pCisgICAgc3RkOjpz d2FwIChvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0pOworICBlbWl0X2luc24gKGZ1biAob3Bl cmFuZHNbMF0sIG9wZXJhbmRzWzFdLCBvcGVyYW5kc1syXSkpOwogICBET05FOwogfSkKIAot KGRlZmluZV9pbnNuICIqYWx0aXZlY192bXJnaHdfaW50ZXJuYWwiCi0gIFsoc2V0IChtYXRj aF9vcGVyYW5kOlY0U0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj12IikKLSAgICAgICAgKHZl Y19zZWxlY3Q6VjRTSQotCSAgKHZlY19jb25jYXQ6VjhTSQotCSAgICAobWF0Y2hfb3BlcmFu ZDpWNFNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICJ2IikKLQkgICAgKG1hdGNoX29wZXJhbmQ6 VjRTSSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAidiIpKQorKGRlZmluZV9pbnNuICJhbHRpdmVj X3Ztcmdod19kaXJlY3RfPG1vZGU+IgorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWU1hfVyAw ICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXdhLHYiKQorCSh2ZWNfc2VsZWN0OlZTWF9XCisJICAo dmVjX2NvbmNhdDo8VlNfZG91YmxlPgorCSAgICAobWF0Y2hfb3BlcmFuZDpWU1hfVyAxICJy ZWdpc3Rlcl9vcGVyYW5kIiAid2EsdiIpCisJICAgIChtYXRjaF9vcGVyYW5kOlZTWF9XIDIg InJlZ2lzdGVyX29wZXJhbmQiICJ3YSx2IikpCiAJICAocGFyYWxsZWwgWyhjb25zdF9pbnQg MCkgKGNvbnN0X2ludCA0KQogCQkgICAgIChjb25zdF9pbnQgMSkgKGNvbnN0X2ludCA1KV0p KSldCi0gICJWRUNUT1JfTUVNX0FMVElWRUNfUCAoVjRTSW1vZGUpIgotewotICBpZiAoQllU RVNfQklHX0VORElBTikKLSAgICByZXR1cm4gInZtcmdodyAlMCwlMSwlMiI7Ci0gIGVsc2UK LSAgICByZXR1cm4gInZtcmdsdyAlMCwlMiwlMSI7Ci19Ci0gIFsoc2V0X2F0dHIgInR5cGUi ICJ2ZWNwZXJtIildKQotCi0oZGVmaW5lX2luc24gImFsdGl2ZWNfdm1yZ2h3X2RpcmVjdCIK LSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6VjRTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXdh LHYiKQotCSh1bnNwZWM6VjRTSSBbKG1hdGNoX29wZXJhbmQ6VjRTSSAxICJyZWdpc3Rlcl9v cGVyYW5kIiAid2EsdiIpCi0JCSAgICAgIChtYXRjaF9vcGVyYW5kOlY0U0kgMiAicmVnaXN0 ZXJfb3BlcmFuZCIgIndhLHYiKV0KLQkJICAgICBVTlNQRUNfVk1SR0hfRElSRUNUKSldCiAg ICJUQVJHRVRfQUxUSVZFQyIKICAgIkAKICAgIHh4bXJnaHcgJXgwLCV4MSwleDIKQEAgLTE0 NDAsMTkgKzEzOTUsMTcgQEAgKGRlZmluZV9leHBhbmQgImFsdGl2ZWNfdm1yZ2xiIgogICAg KHVzZSAobWF0Y2hfb3BlcmFuZDpWMTZRSSAyICJyZWdpc3Rlcl9vcGVyYW5kIikpXQogICAi VEFSR0VUX0FMVElWRUMiCiB7Ci0gIHJ0dmVjIHYgPSBnZW5fcnR2ZWMgKDE2LCBHRU5fSU5U ICg4KSwgR0VOX0lOVCAoMjQpLCBHRU5fSU5UICg5KSwgR0VOX0lOVCAoMjUpLAotCQkgICAg ICAgR0VOX0lOVCAoMTApLCBHRU5fSU5UICgyNiksIEdFTl9JTlQgKDExKSwgR0VOX0lOVCAo MjcpLAotCQkgICAgICAgR0VOX0lOVCAoMTIpLCBHRU5fSU5UICgyOCksIEdFTl9JTlQgKDEz KSwgR0VOX0lOVCAoMjkpLAotCQkgICAgICAgR0VOX0lOVCAoMTQpLCBHRU5fSU5UICgzMCks IEdFTl9JTlQgKDE1KSwgR0VOX0lOVCAoMzEpKTsKLSAgcnR4IHggPSBnZW5fcnR4X1ZFQ19D T05DQVQgKFYzMlFJbW9kZSwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdKTsKLSAgeCA9IGdl bl9ydHhfVkVDX1NFTEVDVCAoVjE2UUltb2RlLCB4LCBnZW5fcnR4X1BBUkFMTEVMIChWT0lE bW9kZSwgdikpOwotICBlbWl0X2luc24gKGdlbl9ydHhfU0VUIChvcGVyYW5kc1swXSwgeCkp OworICBydHggKCpmdW4pIChydHgsIHJ0eCwgcnR4KSA9IEJZVEVTX0JJR19FTkRJQU4gPyBn ZW5fYWx0aXZlY192bXJnbGJfZGlyZWN0CisJCQkJCQk6IGdlbl9hbHRpdmVjX3ZtcmdoYl9k aXJlY3Q7CisgIGlmICghQllURVNfQklHX0VORElBTikKKyAgICBzdGQ6OnN3YXAgKG9wZXJh bmRzWzFdLCBvcGVyYW5kc1syXSk7CisgIGVtaXRfaW5zbiAoZnVuIChvcGVyYW5kc1swXSwg b3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdKSk7CiAgIERPTkU7CiB9KQogCi0oZGVmaW5lX2lu c24gIiphbHRpdmVjX3ZtcmdsYl9pbnRlcm5hbCIKKyhkZWZpbmVfaW5zbiAiYWx0aXZlY192 bXJnbGJfZGlyZWN0IgogICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWMTZRSSAwICJyZWdpc3Rl cl9vcGVyYW5kIiAiPXYiKQotICAgICAgICAodmVjX3NlbGVjdDpWMTZRSQorCSh2ZWNfc2Vs ZWN0OlYxNlFJCiAJICAodmVjX2NvbmNhdDpWMzJRSQogCSAgICAobWF0Y2hfb3BlcmFuZDpW MTZRSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAidiIpCiAJICAgIChtYXRjaF9vcGVyYW5kOlYx NlFJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJ2IikpCkBAIC0xNDY1LDIwICsxNDE4LDYgQEAg KGRlZmluZV9pbnNuICIqYWx0aXZlY192bXJnbGJfaW50ZXJuYWwiCiAJCSAgICAgKGNvbnN0 X2ludCAxNCkgKGNvbnN0X2ludCAzMCkKIAkJICAgICAoY29uc3RfaW50IDE1KSAoY29uc3Rf aW50IDMxKV0pKSldCiAgICJUQVJHRVRfQUxUSVZFQyIKLXsKLSAgaWYgKEJZVEVTX0JJR19F TkRJQU4pCi0gICAgcmV0dXJuICJ2bXJnbGIgJTAsJTEsJTIiOwotICBlbHNlCi0gICAgcmV0 dXJuICJ2bXJnaGIgJTAsJTIsJTEiOwotfQotICBbKHNldF9hdHRyICJ0eXBlIiAidmVjcGVy bSIpXSkKLQotKGRlZmluZV9pbnNuICJhbHRpdmVjX3ZtcmdsYl9kaXJlY3QiCi0gIFsoc2V0 IChtYXRjaF9vcGVyYW5kOlYxNlFJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9diIpCi0JKHVu c3BlYzpWMTZRSSBbKG1hdGNoX29wZXJhbmQ6VjE2UUkgMSAicmVnaXN0ZXJfb3BlcmFuZCIg InYiKQotCQkgICAgICAgKG1hdGNoX29wZXJhbmQ6VjE2UUkgMiAicmVnaXN0ZXJfb3BlcmFu ZCIgInYiKV0KLQkJICAgICAgVU5TUEVDX1ZNUkdMX0RJUkVDVCkpXQotICAiVEFSR0VUX0FM VElWRUMiCiAgICJ2bXJnbGIgJTAsJTEsJTIiCiAgIFsoc2V0X2F0dHIgInR5cGUiICJ2ZWNw ZXJtIildKQogCkBAIC0xNDg4LDE1ICsxNDI3LDE1IEBAIChkZWZpbmVfZXhwYW5kICJhbHRp dmVjX3ZtcmdsaCIKICAgICh1c2UgKG1hdGNoX29wZXJhbmQ6VjhISSAyICJyZWdpc3Rlcl9v cGVyYW5kIikpXQogICAiVEFSR0VUX0FMVElWRUMiCiB7Ci0gIHJ0dmVjIHYgPSBnZW5fcnR2 ZWMgKDgsIEdFTl9JTlQgKDQpLCBHRU5fSU5UICgxMiksIEdFTl9JTlQgKDUpLCBHRU5fSU5U ICgxMyksCi0JCSAgICAgICBHRU5fSU5UICg2KSwgR0VOX0lOVCAoMTQpLCBHRU5fSU5UICg3 KSwgR0VOX0lOVCAoMTUpKTsKLSAgcnR4IHggPSBnZW5fcnR4X1ZFQ19DT05DQVQgKFYxNkhJ bW9kZSwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdKTsKLSAgeCA9IGdlbl9ydHhfVkVDX1NF TEVDVCAoVjhISW1vZGUsIHgsIGdlbl9ydHhfUEFSQUxMRUwgKFZPSURtb2RlLCB2KSk7Ci0g IGVtaXRfaW5zbiAoZ2VuX3J0eF9TRVQgKG9wZXJhbmRzWzBdLCB4KSk7CisgIHJ0eCAoKmZ1 bikgKHJ0eCwgcnR4LCBydHgpID0gQllURVNfQklHX0VORElBTiA/IGdlbl9hbHRpdmVjX3Zt cmdsaF9kaXJlY3QKKwkJCQkJCTogZ2VuX2FsdGl2ZWNfdm1yZ2hoX2RpcmVjdDsKKyAgaWYg KCFCWVRFU19CSUdfRU5ESUFOKQorICAgIHN0ZDo6c3dhcCAob3BlcmFuZHNbMV0sIG9wZXJh bmRzWzJdKTsKKyAgZW1pdF9pbnNuIChmdW4gKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSwg b3BlcmFuZHNbMl0pKTsKICAgRE9ORTsKIH0pCiAKLShkZWZpbmVfaW5zbiAiKmFsdGl2ZWNf dm1yZ2xoX2ludGVybmFsIgorKGRlZmluZV9pbnNuICJhbHRpdmVjX3ZtcmdsaF9kaXJlY3Qi CiAgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlY4SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj12 IikKICAgICAgICAgKHZlY19zZWxlY3Q6VjhISQogCSAgKHZlY19jb25jYXQ6VjE2SEkKQEAg LTE1MDcsMjAgKzE0NDYsNiBAQCAoZGVmaW5lX2luc24gIiphbHRpdmVjX3ZtcmdsaF9pbnRl cm5hbCIKIAkJICAgICAoY29uc3RfaW50IDYpIChjb25zdF9pbnQgMTQpCiAJCSAgICAgKGNv bnN0X2ludCA3KSAoY29uc3RfaW50IDE1KV0pKSldCiAgICJUQVJHRVRfQUxUSVZFQyIKLXsK LSAgaWYgKEJZVEVTX0JJR19FTkRJQU4pCi0gICAgcmV0dXJuICJ2bXJnbGggJTAsJTEsJTIi OwotICBlbHNlCi0gICAgcmV0dXJuICJ2bXJnaGggJTAsJTIsJTEiOwotfQotICBbKHNldF9h dHRyICJ0eXBlIiAidmVjcGVybSIpXSkKLQotKGRlZmluZV9pbnNuICJhbHRpdmVjX3Ztcmds aF9kaXJlY3QiCi0gIFsoc2V0IChtYXRjaF9vcGVyYW5kOlY4SEkgMCAicmVnaXN0ZXJfb3Bl cmFuZCIgIj12IikKLSAgICAgICAgKHVuc3BlYzpWOEhJIFsobWF0Y2hfb3BlcmFuZDpWOEhJ IDEgInJlZ2lzdGVyX29wZXJhbmQiICJ2IikKLQkJICAgICAgKG1hdGNoX29wZXJhbmQ6VjhI SSAyICJyZWdpc3Rlcl9vcGVyYW5kIiAidiIpXQotCQkgICAgIFVOU1BFQ19WTVJHTF9ESVJF Q1QpKV0KLSAgIlRBUkdFVF9BTFRJVkVDIgogICAidm1yZ2xoICUwLCUxLCUyIgogICBbKHNl dF9hdHRyICJ0eXBlIiAidmVjcGVybSIpXSkKIApAQCAtMTUzMCwzNSArMTQ1NSwyMyBAQCAo ZGVmaW5lX2V4cGFuZCAiYWx0aXZlY192bXJnbHciCiAgICAodXNlIChtYXRjaF9vcGVyYW5k OlY0U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIpKV0KICAgIlZFQ1RPUl9NRU1fQUxUSVZFQ19Q IChWNFNJbW9kZSkiCiB7Ci0gIHJ0dmVjIHYgPSBnZW5fcnR2ZWMgKDQsIEdFTl9JTlQgKDIp LCBHRU5fSU5UICg2KSwgR0VOX0lOVCAoMyksIEdFTl9JTlQgKDcpKTsKLSAgcnR4IHggPSBn ZW5fcnR4X1ZFQ19DT05DQVQgKFY4U0ltb2RlLCBvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0p OwotICB4ID0gZ2VuX3J0eF9WRUNfU0VMRUNUIChWNFNJbW9kZSwgeCwgZ2VuX3J0eF9QQVJB TExFTCAoVk9JRG1vZGUsIHYpKTsKLSAgZW1pdF9pbnNuIChnZW5fcnR4X1NFVCAob3BlcmFu ZHNbMF0sIHgpKTsKKyAgcnR4ICgqZnVuKSAocnR4LCBydHgsIHJ0eCk7CisgIGZ1biA9IEJZ VEVTX0JJR19FTkRJQU4gPyBnZW5fYWx0aXZlY192bXJnbHdfZGlyZWN0X3Y0c2kKKwkJCSA6 IGdlbl9hbHRpdmVjX3Ztcmdod19kaXJlY3RfdjRzaTsKKyAgaWYgKCFCWVRFU19CSUdfRU5E SUFOKQorICAgIHN0ZDo6c3dhcCAob3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdKTsKKyAgZW1p dF9pbnNuIChmdW4gKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0pKTsK ICAgRE9ORTsKIH0pCiAKLShkZWZpbmVfaW5zbiAiKmFsdGl2ZWNfdm1yZ2x3X2ludGVybmFs IgotICBbKHNldCAobWF0Y2hfb3BlcmFuZDpWNFNJIDAgInJlZ2lzdGVyX29wZXJhbmQiICI9 diIpCi0gICAgICAgICh2ZWNfc2VsZWN0OlY0U0kKLQkgICh2ZWNfY29uY2F0OlY4U0kKLQkg ICAgKG1hdGNoX29wZXJhbmQ6VjRTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAidiIpCi0JICAg IChtYXRjaF9vcGVyYW5kOlY0U0kgMiAicmVnaXN0ZXJfb3BlcmFuZCIgInYiKSkKKyhkZWZp bmVfaW5zbiAiYWx0aXZlY192bXJnbHdfZGlyZWN0Xzxtb2RlPiIKKyAgWyhzZXQgKG1hdGNo X29wZXJhbmQ6VlNYX1cgMCAicmVnaXN0ZXJfb3BlcmFuZCIgIj13YSx2IikKKwkodmVjX3Nl bGVjdDpWU1hfVworCSAgKHZlY19jb25jYXQ6PFZTX2RvdWJsZT4KKwkgICAgKG1hdGNoX29w ZXJhbmQ6VlNYX1cgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIndhLHYiKQorCSAgICAobWF0Y2hf b3BlcmFuZDpWU1hfVyAyICJyZWdpc3Rlcl9vcGVyYW5kIiAid2EsdiIpKQogCSAgKHBhcmFs bGVsIFsoY29uc3RfaW50IDIpIChjb25zdF9pbnQgNikKIAkJICAgICAoY29uc3RfaW50IDMp IChjb25zdF9pbnQgNyldKSkpXQotICAiVkVDVE9SX01FTV9BTFRJVkVDX1AgKFY0U0ltb2Rl KSIKLXsKLSAgaWYgKEJZVEVTX0JJR19FTkRJQU4pCi0gICAgcmV0dXJuICJ2bXJnbHcgJTAs JTEsJTIiOwotICBlbHNlCi0gICAgcmV0dXJuICJ2bXJnaHcgJTAsJTIsJTEiOwotfQotICBb KHNldF9hdHRyICJ0eXBlIiAidmVjcGVybSIpXSkKLQotKGRlZmluZV9pbnNuICJhbHRpdmVj X3Ztcmdsd19kaXJlY3QiCi0gIFsoc2V0IChtYXRjaF9vcGVyYW5kOlY0U0kgMCAicmVnaXN0 ZXJfb3BlcmFuZCIgIj13YSx2IikKLQkodW5zcGVjOlY0U0kgWyhtYXRjaF9vcGVyYW5kOlY0 U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIndhLHYiKQotCQkgICAgICAobWF0Y2hfb3BlcmFu ZDpWNFNJIDIgInJlZ2lzdGVyX29wZXJhbmQiICJ3YSx2IildCi0JCSAgICAgVU5TUEVDX1ZN UkdMX0RJUkVDVCkpXQogICAiVEFSR0VUX0FMVElWRUMiCiAgICJACiAgICB4eG1yZ2x3ICV4 MCwleDEsJXgyCkBAIC0zOTI5LDEzICszODQyLDEzIEBAIChkZWZpbmVfZXhwYW5kICJ2ZWNf d2lkZW5fdW11bHRfaGlfdjhoaSIKICAgICB7CiAgICAgICBlbWl0X2luc24gKGdlbl9hbHRp dmVjX3ZtdWxldWggKHZlLCBvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0pKTsKICAgICAgIGVt aXRfaW5zbiAoZ2VuX2FsdGl2ZWNfdm11bG91aCAodm8sIG9wZXJhbmRzWzFdLCBvcGVyYW5k c1syXSkpOwotICAgICAgZW1pdF9pbnNuIChnZW5fYWx0aXZlY192bXJnaHdfZGlyZWN0IChv cGVyYW5kc1swXSwgdmUsIHZvKSk7CisgICAgICBlbWl0X2luc24gKGdlbl9hbHRpdmVjX3Zt cmdod19kaXJlY3RfdjRzaSAob3BlcmFuZHNbMF0sIHZlLCB2bykpOwogICAgIH0KICAgZWxz ZQogICAgIHsKICAgICAgIGVtaXRfaW5zbiAoZ2VuX2FsdGl2ZWNfdm11bG91aCAodmUsIG9w ZXJhbmRzWzFdLCBvcGVyYW5kc1syXSkpOwogICAgICAgZW1pdF9pbnNuIChnZW5fYWx0aXZl Y192bXVsZXVoICh2bywgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdKSk7Ci0gICAgICBlbWl0 X2luc24gKGdlbl9hbHRpdmVjX3Ztcmdod19kaXJlY3QgKG9wZXJhbmRzWzBdLCB2bywgdmUp KTsKKyAgICAgIGVtaXRfaW5zbiAoZ2VuX2FsdGl2ZWNfdm1yZ2h3X2RpcmVjdF92NHNpIChv cGVyYW5kc1swXSwgdm8sIHZlKSk7CiAgICAgfQogICBET05FOwogfSkKQEAgLTM5NTQsMTMg KzM4NjcsMTMgQEAgKGRlZmluZV9leHBhbmQgInZlY193aWRlbl91bXVsdF9sb192OGhpIgog ICAgIHsKICAgICAgIGVtaXRfaW5zbiAoZ2VuX2FsdGl2ZWNfdm11bGV1aCAodmUsIG9wZXJh bmRzWzFdLCBvcGVyYW5kc1syXSkpOwogICAgICAgZW1pdF9pbnNuIChnZW5fYWx0aXZlY192 bXVsb3VoICh2bywgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdKSk7Ci0gICAgICBlbWl0X2lu c24gKGdlbl9hbHRpdmVjX3Ztcmdsd19kaXJlY3QgKG9wZXJhbmRzWzBdLCB2ZSwgdm8pKTsK KyAgICAgIGVtaXRfaW5zbiAoZ2VuX2FsdGl2ZWNfdm1yZ2x3X2RpcmVjdF92NHNpIChvcGVy YW5kc1swXSwgdmUsIHZvKSk7CiAgICAgfQogICBlbHNlCiAgICAgewogICAgICAgZW1pdF9p bnNuIChnZW5fYWx0aXZlY192bXVsb3VoICh2ZSwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJd KSk7CiAgICAgICBlbWl0X2luc24gKGdlbl9hbHRpdmVjX3ZtdWxldWggKHZvLCBvcGVyYW5k c1sxXSwgb3BlcmFuZHNbMl0pKTsKLSAgICAgIGVtaXRfaW5zbiAoZ2VuX2FsdGl2ZWNfdm1y Z2x3X2RpcmVjdCAob3BlcmFuZHNbMF0sIHZvLCB2ZSkpOworICAgICAgZW1pdF9pbnNuIChn ZW5fYWx0aXZlY192bXJnbHdfZGlyZWN0X3Y0c2kgKG9wZXJhbmRzWzBdLCB2bywgdmUpKTsK ICAgICB9CiAgIERPTkU7CiB9KQpAQCAtMzk3OSwxMyArMzg5MiwxMyBAQCAoZGVmaW5lX2V4 cGFuZCAidmVjX3dpZGVuX3NtdWx0X2hpX3Y4aGkiCiAgICAgewogICAgICAgZW1pdF9pbnNu IChnZW5fYWx0aXZlY192bXVsZXNoICh2ZSwgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdKSk7 CiAgICAgICBlbWl0X2luc24gKGdlbl9hbHRpdmVjX3ZtdWxvc2ggKHZvLCBvcGVyYW5kc1sx XSwgb3BlcmFuZHNbMl0pKTsKLSAgICAgIGVtaXRfaW5zbiAoZ2VuX2FsdGl2ZWNfdm1yZ2h3 X2RpcmVjdCAob3BlcmFuZHNbMF0sIHZlLCB2bykpOworICAgICAgZW1pdF9pbnNuIChnZW5f YWx0aXZlY192bXJnaHdfZGlyZWN0X3Y0c2kgKG9wZXJhbmRzWzBdLCB2ZSwgdm8pKTsKICAg ICB9CiAgIGVsc2UKICAgICB7CiAgICAgICBlbWl0X2luc24gKGdlbl9hbHRpdmVjX3ZtdWxv c2ggKHZlLCBvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0pKTsKICAgICAgIGVtaXRfaW5zbiAo Z2VuX2FsdGl2ZWNfdm11bGVzaCAodm8sIG9wZXJhbmRzWzFdLCBvcGVyYW5kc1syXSkpOwot ICAgICAgZW1pdF9pbnNuIChnZW5fYWx0aXZlY192bXJnaHdfZGlyZWN0IChvcGVyYW5kc1sw XSwgdm8sIHZlKSk7CisgICAgICBlbWl0X2luc24gKGdlbl9hbHRpdmVjX3Ztcmdod19kaXJl Y3RfdjRzaSAob3BlcmFuZHNbMF0sIHZvLCB2ZSkpOwogICAgIH0KICAgRE9ORTsKIH0pCkBA IC00MDA0LDEzICszOTE3LDEzIEBAIChkZWZpbmVfZXhwYW5kICJ2ZWNfd2lkZW5fc211bHRf bG9fdjhoaSIKICAgICB7CiAgICAgICBlbWl0X2luc24gKGdlbl9hbHRpdmVjX3ZtdWxlc2gg KHZlLCBvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0pKTsKICAgICAgIGVtaXRfaW5zbiAoZ2Vu X2FsdGl2ZWNfdm11bG9zaCAodm8sIG9wZXJhbmRzWzFdLCBvcGVyYW5kc1syXSkpOwotICAg ICAgZW1pdF9pbnNuIChnZW5fYWx0aXZlY192bXJnbHdfZGlyZWN0IChvcGVyYW5kc1swXSwg dmUsIHZvKSk7CisgICAgICBlbWl0X2luc24gKGdlbl9hbHRpdmVjX3Ztcmdsd19kaXJlY3Rf djRzaSAob3BlcmFuZHNbMF0sIHZlLCB2bykpOwogICAgIH0KICAgZWxzZQogICAgIHsKICAg ICAgIGVtaXRfaW5zbiAoZ2VuX2FsdGl2ZWNfdm11bG9zaCAodmUsIG9wZXJhbmRzWzFdLCBv cGVyYW5kc1syXSkpOwogICAgICAgZW1pdF9pbnNuIChnZW5fYWx0aXZlY192bXVsZXNoICh2 bywgb3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdKSk7Ci0gICAgICBlbWl0X2luc24gKGdlbl9h bHRpdmVjX3Ztcmdsd19kaXJlY3QgKG9wZXJhbmRzWzBdLCB2bywgdmUpKTsKKyAgICAgIGVt aXRfaW5zbiAoZ2VuX2FsdGl2ZWNfdm1yZ2x3X2RpcmVjdF92NHNpIChvcGVyYW5kc1swXSwg dm8sIHZlKSk7CiAgICAgfQogICBET05FOwogfSkKZGlmZiAtLWdpdCBhL2djYy9jb25maWcv cnM2MDAwL3JzNjAwMC1wOHN3YXAuYyBiL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC1wOHN3 YXAuYwppbmRleCBhZDJiMzAyMzgxOS4uZWM1MDNhYjc0MmYgMTAwNjQ0Ci0tLSBhL2djYy9j b25maWcvcnM2MDAwL3JzNjAwMC1wOHN3YXAuYworKysgYi9nY2MvY29uZmlnL3JzNjAwMC9y czYwMDAtcDhzd2FwLmMKQEAgLTc0NCw4ICs3NDQsNiBAQCBydHhfaXNfc3dhcHBhYmxlX3Ag KHJ0eCBvcCwgdW5zaWduZWQgaW50ICpzcGVjaWFsKQogCSAgZGVmYXVsdDoKIAkgICAgYnJl YWs7CiAJICBjYXNlIFVOU1BFQ19WQlBFUk1ROgotCSAgY2FzZSBVTlNQRUNfVk1SR0hfRElS RUNUOgotCSAgY2FzZSBVTlNQRUNfVk1SR0xfRElSRUNUOgogCSAgY2FzZSBVTlNQRUNfVlBB Q0tfU0lHTl9TSUdOX1NBVDoKIAkgIGNhc2UgVU5TUEVDX1ZQQUNLX1NJR05fVU5TX1NBVDoK IAkgIGNhc2UgVU5TUEVDX1ZQQUNLX1VOU19VTlNfTU9EOgpkaWZmIC0tZ2l0IGEvZ2NjL2Nv bmZpZy9yczYwMDAvcnM2MDAwLmMgYi9nY2MvY29uZmlnL3JzNjAwMC9yczYwMDAuYwppbmRl eCA1YTUyMDJjNDU1Yi4uZDA3MzAyNTNiY2MgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvcnM2 MDAwL3JzNjAwMC5jCisrKyBiL2djYy9jb25maWcvcnM2MDAwL3JzNjAwMC5jCkBAIC0yMzAw OSw0MyArMjMwMDksNDQgQEAgYWx0aXZlY19leHBhbmRfdmVjX3Blcm1fY29uc3QgKHJ0eCB0 YXJnZXQsIHJ0eCBvcDAsIHJ0eCBvcDEsCiAgICAgdW5zaWduZWQgY2hhciBwZXJtWzE2XTsK ICAgfTsKICAgc3RhdGljIGNvbnN0IHN0cnVjdCBhbHRpdmVjX3Blcm1faW5zbiBwYXR0ZXJu c1tdID0gewotICAgIHsgT1BUSU9OX01BU0tfQUxUSVZFQywgQ09ERV9GT1JfYWx0aXZlY192 cGt1aHVtX2RpcmVjdCwKLSAgICAgIHsgIDEsICAzLCAgNSwgIDcsICA5LCAxMSwgMTMsIDE1 LCAxNywgMTksIDIxLCAyMywgMjUsIDI3LCAyOSwgMzEgfSB9LAotICAgIHsgT1BUSU9OX01B U0tfQUxUSVZFQywgQ09ERV9GT1JfYWx0aXZlY192cGt1d3VtX2RpcmVjdCwKLSAgICAgIHsg IDIsICAzLCAgNiwgIDcsIDEwLCAxMSwgMTQsIDE1LCAxOCwgMTksIDIyLCAyMywgMjYsIDI3 LCAzMCwgMzEgfSB9LAotICAgIHsgT1BUSU9OX01BU0tfQUxUSVZFQywgCi0gICAgICAoQllU RVNfQklHX0VORElBTiA/IENPREVfRk9SX2FsdGl2ZWNfdm1yZ2hiX2RpcmVjdAotICAgICAg IDogQ09ERV9GT1JfYWx0aXZlY192bXJnbGJfZGlyZWN0KSwKLSAgICAgIHsgIDAsIDE2LCAg MSwgMTcsICAyLCAxOCwgIDMsIDE5LCAgNCwgMjAsICA1LCAyMSwgIDYsIDIyLCAgNywgMjMg fSB9LAotICAgIHsgT1BUSU9OX01BU0tfQUxUSVZFQywKLSAgICAgIChCWVRFU19CSUdfRU5E SUFOID8gQ09ERV9GT1JfYWx0aXZlY192bXJnaGhfZGlyZWN0Ci0gICAgICAgOiBDT0RFX0ZP Ul9hbHRpdmVjX3ZtcmdsaF9kaXJlY3QpLAotICAgICAgeyAgMCwgIDEsIDE2LCAxNywgIDIs ICAzLCAxOCwgMTksICA0LCAgNSwgMjAsIDIxLCAgNiwgIDcsIDIyLCAyMyB9IH0sCi0gICAg eyBPUFRJT05fTUFTS19BTFRJVkVDLAotICAgICAgKEJZVEVTX0JJR19FTkRJQU4gPyBDT0RF X0ZPUl9hbHRpdmVjX3Ztcmdod19kaXJlY3QKLSAgICAgICA6IENPREVfRk9SX2FsdGl2ZWNf dm1yZ2x3X2RpcmVjdCksCi0gICAgICB7ICAwLCAgMSwgIDIsICAzLCAxNiwgMTcsIDE4LCAx OSwgIDQsICA1LCAgNiwgIDcsIDIwLCAyMSwgMjIsIDIzIH0gfSwKLSAgICB7IE9QVElPTl9N QVNLX0FMVElWRUMsCi0gICAgICAoQllURVNfQklHX0VORElBTiA/IENPREVfRk9SX2FsdGl2 ZWNfdm1yZ2xiX2RpcmVjdAotICAgICAgIDogQ09ERV9GT1JfYWx0aXZlY192bXJnaGJfZGly ZWN0KSwKLSAgICAgIHsgIDgsIDI0LCAgOSwgMjUsIDEwLCAyNiwgMTEsIDI3LCAxMiwgMjgs IDEzLCAyOSwgMTQsIDMwLCAxNSwgMzEgfSB9LAotICAgIHsgT1BUSU9OX01BU0tfQUxUSVZF QywKLSAgICAgIChCWVRFU19CSUdfRU5ESUFOID8gQ09ERV9GT1JfYWx0aXZlY192bXJnbGhf ZGlyZWN0Ci0gICAgICAgOiBDT0RFX0ZPUl9hbHRpdmVjX3ZtcmdoaF9kaXJlY3QpLAotICAg ICAgeyAgOCwgIDksIDI0LCAyNSwgMTAsIDExLCAyNiwgMjcsIDEyLCAxMywgMjgsIDI5LCAx NCwgMTUsIDMwLCAzMSB9IH0sCi0gICAgeyBPUFRJT05fTUFTS19BTFRJVkVDLAotICAgICAg KEJZVEVTX0JJR19FTkRJQU4gPyBDT0RFX0ZPUl9hbHRpdmVjX3Ztcmdsd19kaXJlY3QKLSAg ICAgICA6IENPREVfRk9SX2FsdGl2ZWNfdm1yZ2h3X2RpcmVjdCksCi0gICAgICB7ICA4LCAg OSwgMTAsIDExLCAyNCwgMjUsIDI2LCAyNywgMTIsIDEzLCAxNCwgMTUsIDI4LCAyOSwgMzAs IDMxIH0gfSwKLSAgICB7IE9QVElPTl9NQVNLX1A4X1ZFQ1RPUiwKLSAgICAgIChCWVRFU19C SUdfRU5ESUFOID8gQ09ERV9GT1JfcDhfdm1yZ2V3X3Y0c2ZfZGlyZWN0Ci0gICAgICAgOiBD T0RFX0ZPUl9wOF92bXJnb3dfdjRzZl9kaXJlY3QpLAotICAgICAgeyAgMCwgIDEsICAyLCAg MywgMTYsIDE3LCAxOCwgMTksICA4LCAgOSwgMTAsIDExLCAyNCwgMjUsIDI2LCAyNyB9IH0s Ci0gICAgeyBPUFRJT05fTUFTS19QOF9WRUNUT1IsCi0gICAgICAoQllURVNfQklHX0VORElB TiA/IENPREVfRk9SX3A4X3Ztcmdvd192NHNmX2RpcmVjdAotICAgICAgIDogQ09ERV9GT1Jf cDhfdm1yZ2V3X3Y0c2ZfZGlyZWN0KSwKLSAgICAgIHsgIDQsICA1LCAgNiwgIDcsIDIwLCAy MSwgMjIsIDIzLCAxMiwgMTMsIDE0LCAxNSwgMjgsIDI5LCAzMCwgMzEgfSB9Ci0gIH07Cisg ICAge09QVElPTl9NQVNLX0FMVElWRUMsCisgICAgIENPREVfRk9SX2FsdGl2ZWNfdnBrdWh1 bV9kaXJlY3QsCisgICAgIHsxLCAzLCA1LCA3LCA5LCAxMSwgMTMsIDE1LCAxNywgMTksIDIx LCAyMywgMjUsIDI3LCAyOSwgMzF9fSwKKyAgICB7T1BUSU9OX01BU0tfQUxUSVZFQywKKyAg ICAgQ09ERV9GT1JfYWx0aXZlY192cGt1d3VtX2RpcmVjdCwKKyAgICAgezIsIDMsIDYsIDcs IDEwLCAxMSwgMTQsIDE1LCAxOCwgMTksIDIyLCAyMywgMjYsIDI3LCAzMCwgMzF9fSwKKyAg ICB7T1BUSU9OX01BU0tfQUxUSVZFQywKKyAgICAgQllURVNfQklHX0VORElBTiA/IENPREVf Rk9SX2FsdGl2ZWNfdm1yZ2hiX2RpcmVjdAorCQkgICAgICA6IENPREVfRk9SX2FsdGl2ZWNf dm1yZ2xiX2RpcmVjdCwKKyAgICAgezAsIDE2LCAxLCAxNywgMiwgMTgsIDMsIDE5LCA0LCAy MCwgNSwgMjEsIDYsIDIyLCA3LCAyM319LAorICAgIHtPUFRJT05fTUFTS19BTFRJVkVDLAor ICAgICBCWVRFU19CSUdfRU5ESUFOID8gQ09ERV9GT1JfYWx0aXZlY192bXJnaGhfZGlyZWN0 CisJCSAgICAgIDogQ09ERV9GT1JfYWx0aXZlY192bXJnbGhfZGlyZWN0LAorICAgICB7MCwg MSwgMTYsIDE3LCAyLCAzLCAxOCwgMTksIDQsIDUsIDIwLCAyMSwgNiwgNywgMjIsIDIzfX0s CisgICAge09QVElPTl9NQVNLX0FMVElWRUMsCisgICAgIEJZVEVTX0JJR19FTkRJQU4gPyBD T0RFX0ZPUl9hbHRpdmVjX3Ztcmdod19kaXJlY3RfdjRzaQorCQkgICAgICA6IENPREVfRk9S X2FsdGl2ZWNfdm1yZ2x3X2RpcmVjdF92NHNpLAorICAgICB7MCwgMSwgMiwgMywgMTYsIDE3 LCAxOCwgMTksIDQsIDUsIDYsIDcsIDIwLCAyMSwgMjIsIDIzfX0sCisgICAge09QVElPTl9N QVNLX0FMVElWRUMsCisgICAgIEJZVEVTX0JJR19FTkRJQU4gPyBDT0RFX0ZPUl9hbHRpdmVj X3ZtcmdsYl9kaXJlY3QKKwkJICAgICAgOiBDT0RFX0ZPUl9hbHRpdmVjX3ZtcmdoYl9kaXJl Y3QsCisgICAgIHs4LCAyNCwgOSwgMjUsIDEwLCAyNiwgMTEsIDI3LCAxMiwgMjgsIDEzLCAy OSwgMTQsIDMwLCAxNSwgMzF9fSwKKyAgICB7T1BUSU9OX01BU0tfQUxUSVZFQywKKyAgICAg QllURVNfQklHX0VORElBTiA/IENPREVfRk9SX2FsdGl2ZWNfdm1yZ2xoX2RpcmVjdAorCQkg ICAgICA6IENPREVfRk9SX2FsdGl2ZWNfdm1yZ2hoX2RpcmVjdCwKKyAgICAgezgsIDksIDI0 LCAyNSwgMTAsIDExLCAyNiwgMjcsIDEyLCAxMywgMjgsIDI5LCAxNCwgMTUsIDMwLCAzMX19 LAorICAgIHtPUFRJT05fTUFTS19BTFRJVkVDLAorICAgICBCWVRFU19CSUdfRU5ESUFOID8g Q09ERV9GT1JfYWx0aXZlY192bXJnbHdfZGlyZWN0X3Y0c2kKKwkJICAgICAgOiBDT0RFX0ZP Ul9hbHRpdmVjX3Ztcmdod19kaXJlY3RfdjRzaSwKKyAgICAgezgsIDksIDEwLCAxMSwgMjQs IDI1LCAyNiwgMjcsIDEyLCAxMywgMTQsIDE1LCAyOCwgMjksIDMwLCAzMX19LAorICAgIHtP UFRJT05fTUFTS19QOF9WRUNUT1IsCisgICAgIEJZVEVTX0JJR19FTkRJQU4gPyBDT0RFX0ZP Ul9wOF92bXJnZXdfdjRzZl9kaXJlY3QKKwkJICAgICAgOiBDT0RFX0ZPUl9wOF92bXJnb3df djRzZl9kaXJlY3QsCisgICAgIHswLCAxLCAyLCAzLCAxNiwgMTcsIDE4LCAxOSwgOCwgOSwg MTAsIDExLCAyNCwgMjUsIDI2LCAyN319LAorICAgIHtPUFRJT05fTUFTS19QOF9WRUNUT1Is CisgICAgIEJZVEVTX0JJR19FTkRJQU4gPyBDT0RFX0ZPUl9wOF92bXJnb3dfdjRzZl9kaXJl Y3QKKwkJICAgICAgOiBDT0RFX0ZPUl9wOF92bXJnZXdfdjRzZl9kaXJlY3QsCisgICAgIHs0 LCA1LCA2LCA3LCAyMCwgMjEsIDIyLCAyMywgMTIsIDEzLCAxNCwgMTUsIDI4LCAyOSwgMzAs IDMxfX19OwogCiAgIHVuc2lnbmVkIGludCBpLCBqLCBlbHQsIHdoaWNoOwogICB1bnNpZ25l ZCBjaGFyIHBlcm1bMTZdOwpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9yczYwMDAvdnN4Lm1k IGIvZ2NjL2NvbmZpZy9yczYwMDAvdnN4Lm1kCmluZGV4IDU1ZDgzMGQwZjIwLi5mMTA5NzMy Njg2MSAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9yczYwMDAvdnN4Lm1kCisrKyBiL2djYy9j b25maWcvcnM2MDAwL3ZzeC5tZApAQCAtNDU2OCw3ICs0NTY4LDcgQEAgKGRlZmluZV9pbnNu ICJ2c3hfeHhzcGx0ZF88bW9kZT4iCiAgIFsoc2V0X2F0dHIgInR5cGUiICJ2ZWNwZXJtIild KQogCiA7OyBWNFNGL1Y0U0kgaW50ZXJsZWF2ZQotKGRlZmluZV9pbnNuICJ2c3hfeHhtcmdo d188bW9kZT4iCisoZGVmaW5lX2V4cGFuZCAidnN4X3h4bXJnaHdfPG1vZGU+IgogICBbKHNl dCAobWF0Y2hfb3BlcmFuZDpWU1hfVyAwICJ2c3hfcmVnaXN0ZXJfb3BlcmFuZCIgIj13YSIp CiAgICAgICAgICh2ZWNfc2VsZWN0OlZTWF9XCiAJICAodmVjX2NvbmNhdDo8VlNfZG91Ymxl PgpAQCAtNDU3OCwxNCArNDU3OCwxNyBAQCAoZGVmaW5lX2luc24gInZzeF94eG1yZ2h3Xzxt b2RlPiIKIAkJICAgICAoY29uc3RfaW50IDEpIChjb25zdF9pbnQgNSldKSkpXQogICAiVkVD VE9SX01FTV9WU1hfUCAoPE1PREU+bW9kZSkiCiB7Ci0gIGlmIChCWVRFU19CSUdfRU5ESUFO KQotICAgIHJldHVybiAieHhtcmdodyAleDAsJXgxLCV4MiI7Ci0gIGVsc2UKLSAgICByZXR1 cm4gInh4bXJnbHcgJXgwLCV4MiwleDEiOworICBydHggKCpmdW4pIChydHgsIHJ0eCwgcnR4 KTsKKyAgZnVuID0gQllURVNfQklHX0VORElBTiA/IGdlbl9hbHRpdmVjX3Ztcmdod19kaXJl Y3RfPG1vZGU+CisJCQkgOiBnZW5fYWx0aXZlY192bXJnbHdfZGlyZWN0Xzxtb2RlPjsKKyAg aWYgKCFCWVRFU19CSUdfRU5ESUFOKQorICAgIHN0ZDo6c3dhcCAob3BlcmFuZHNbMV0sIG9w ZXJhbmRzWzJdKTsKKyAgZW1pdF9pbnNuIChmdW4gKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sx XSwgb3BlcmFuZHNbMl0pKTsKKyAgRE9ORTsKIH0KICAgWyhzZXRfYXR0ciAidHlwZSIgInZl Y3Blcm0iKV0pCiAKLShkZWZpbmVfaW5zbiAidnN4X3h4bXJnbHdfPG1vZGU+IgorKGRlZmlu ZV9leHBhbmQgInZzeF94eG1yZ2x3Xzxtb2RlPiIKICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6 VlNYX1cgMCAidnN4X3JlZ2lzdGVyX29wZXJhbmQiICI9d2EiKQogCSh2ZWNfc2VsZWN0OlZT WF9XCiAJICAodmVjX2NvbmNhdDo8VlNfZG91YmxlPgpAQCAtNDU5NSwxMCArNDU5OCwxMyBA QCAoZGVmaW5lX2luc24gInZzeF94eG1yZ2x3Xzxtb2RlPiIKIAkJICAgICAoY29uc3RfaW50 IDMpIChjb25zdF9pbnQgNyldKSkpXQogICAiVkVDVE9SX01FTV9WU1hfUCAoPE1PREU+bW9k ZSkiCiB7Ci0gIGlmIChCWVRFU19CSUdfRU5ESUFOKQotICAgIHJldHVybiAieHhtcmdsdyAl eDAsJXgxLCV4MiI7Ci0gIGVsc2UKLSAgICByZXR1cm4gInh4bXJnaHcgJXgwLCV4MiwleDEi OworICBydHggKCpmdW4pIChydHgsIHJ0eCwgcnR4KTsKKyAgZnVuID0gQllURVNfQklHX0VO RElBTiA/IGdlbl9hbHRpdmVjX3Ztcmdsd19kaXJlY3RfPG1vZGU+CisJCQkgOiBnZW5fYWx0 aXZlY192bXJnaHdfZGlyZWN0Xzxtb2RlPjsKKyAgaWYgKCFCWVRFU19CSUdfRU5ESUFOKQor ICAgIHN0ZDo6c3dhcCAob3BlcmFuZHNbMV0sIG9wZXJhbmRzWzJdKTsKKyAgZW1pdF9pbnNu IChmdW4gKG9wZXJhbmRzWzBdLCBvcGVyYW5kc1sxXSwgb3BlcmFuZHNbMl0pKTsKKyAgRE9O RTsKIH0KICAgWyhzZXRfYXR0ciAidHlwZSIgInZlY3Blcm0iKV0pCiAKZGlmZiAtLWdpdCBh L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9wb3dlcnBjL2J1aWx0aW5zLTEuYyBiL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9wb3dlcnBjL2J1aWx0aW5zLTEuYwppbmRleCAzZWMxMDI0 YTk1NS4uNjNmYmQyZTNiZTEgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9wb3dlcnBjL2J1aWx0aW5zLTEuYworKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv cG93ZXJwYy9idWlsdGlucy0xLmMKQEAgLTMxNywxMCArMzE3LDEwIEBAIGludCBtYWluICgp CiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInZjdHV4cyIgMiB9IH0g Ki8KIAogLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2bXJnaGIiIDQg eyB0YXJnZXQgYmUgfSB9IH0gKi8KLS8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10 aW1lcyAidm1yZ2hiIiA1IHsgdGFyZ2V0IGxlIH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi1hc3NlbWJsZXItdGltZXMgInZtcmdoYiIgNiB7IHRhcmdldCBsZSB9IH0gfSAqLwog LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2bXJnaGgiIDggfSB9ICov Ci0vKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInh4bXJnaHciIDggfSB9 ICovCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInh4bXJnbHciIDgg fSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInh4bXJnaHci IDQgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInh4bXJn bHciIDQgfSB9ICovCiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInZt cmdsaCIgOCB9IH0gKi8KIC8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAi eHhsbm9yIiA2IH0gfSAqLwogLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVz IHtcbXZwa3VkdXNcTX0gMSB9IH0gKi8KQEAgLTM0Nyw3ICszNDcsNyBAQCBpbnQgbWFpbiAo KQogLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2c3BsdGIiIDYgfSB9 ICovCiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInZzcGx0dyIgMCB9 IH0gKi8KIC8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAidm1yZ293IiA4 IH0gfSAqLwotLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2bXJnbGIi IDUgeyB0YXJnZXQgbGUgfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxl ci10aW1lcyAidm1yZ2xiIiA0IHsgdGFyZ2V0IGxlIH0gfSB9ICovCiAvKiB7IGRnLWZpbmFs IHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInZtcmdsYiIgNiB7IHRhcmdldCBiZSB9IH0gfSAq LwogLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2bXJnZXciIDggfSB9 ICovCiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInZzcGx0aCIgOCB9 IH0gKi8KLS0gCjIuMjUuMQoK --------------8F27116F4E0DE1BE6F3BE0E8--