From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 54196 invoked by alias); 27 Jan 2020 18:59:57 -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 54187 invoked by uid 89); 27 Jan 2020 18:59:56 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-14.7 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.1 spammy= X-HELO: mail-oi1-f182.google.com Received: from mail-oi1-f182.google.com (HELO mail-oi1-f182.google.com) (209.85.167.182) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Mon, 27 Jan 2020 18:59:50 +0000 Received: by mail-oi1-f182.google.com with SMTP id b18so3774610oie.2 for ; Mon, 27 Jan 2020 10:59:50 -0800 (PST) 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=1rEm4F4VubMNxc0tLHCXyCaprbopRBDgT8n+3da+weM=; b=QzMz+nJcTC7MMYq4PU9BtM4kIyPl8464+1A3jA3fwsQhHC06oXPUTj0EvyqGWMfKpp QazwaeLP+pnih5XX9fpLtmBohhz6DbLz9suopt7V1C8NYrHRwyD1rqqgHHsl2KhQmZFl PzCmQcqVDzQHdXXFkdaBGLyLPAmSxoIyTcFAQiULGFJc+xch+NIWOwHYTz1J9PGS3oUI Y82C63H5fLFA4Gbqg1q8SBbrZjloIjngsFaYNLIlaErhRMEwkg3b91eAWoLHPEBHcHDA y8QPC8xAghpcKqc736j/JmU2L7CZbp5Amk1/WZHalU4YBQM4N7iah8fDxyLsOJehv0QI bo8g== MIME-Version: 1.0 References: <20190222162451.GA18480@intel.com> In-Reply-To: From: "H.J. Lu" Date: Mon, 27 Jan 2020 20:03:00 -0000 Message-ID: Subject: PING^5: [PATCH] i386: Properly encode xmm16-xmm31/ymm16-ymm31 for vector move To: Jakub Jelinek , Jeffrey Law Cc: GCC Patches , Jan Hubicka , Uros Bizjak Content-Type: multipart/mixed; boundary="00000000000026f567059d23b6c0" X-IsSubscribed: yes X-SW-Source: 2020-01/txt/msg01780.txt.bz2 --00000000000026f567059d23b6c0 Content-Type: text/plain; charset="UTF-8" Content-length: 7656 On Mon, Jul 8, 2019 at 8:19 AM H.J. Lu wrote: > > On Tue, Jun 18, 2019 at 8:59 AM H.J. Lu wrote: > > > > On Fri, May 31, 2019 at 10:38 AM H.J. Lu wrote: > > > > > > On Tue, May 21, 2019 at 2:43 PM H.J. Lu wrote: > > > > > > > > On Fri, Feb 22, 2019 at 8:25 AM H.J. Lu wrote: > > > > > > > > > > Hi Jan, Uros, > > > > > > > > > > This patch fixes the wrong code bug: > > > > > > > > > > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=89229 > > > > > > > > > > Tested on AVX2 and AVX512 with and without --with-arch=native. > > > > > > > > > > OK for trunk? > > > > > > > > > > Thanks. > > > > > > > > > > H.J. > > > > > -- > > > > > i386 backend has > > > > > > > > > > INT_MODE (OI, 32); > > > > > INT_MODE (XI, 64); > > > > > > > > > > So, XI_MODE represents 64 INTEGER bytes = 64 * 8 = 512 bit operation, > > > > > in case of const_1, all 512 bits set. > > > > > > > > > > We can load zeros with narrower instruction, (e.g. 256 bit by inherent > > > > > zeroing of highpart in case of 128 bit xor), so TImode in this case. > > > > > > > > > > Some targets prefer V4SF mode, so they will emit float xorps for zeroing. > > > > > > > > > > sse.md has > > > > > > > > > > (define_insn "mov_internal" > > > > > [(set (match_operand:VMOVE 0 "nonimmediate_operand" > > > > > "=v,v ,v ,m") > > > > > (match_operand:VMOVE 1 "nonimmediate_or_sse_const_operand" > > > > > " C,BC,vm,v"))] > > > > > .... > > > > > /* There is no evex-encoded vmov* for sizes smaller than 64-bytes > > > > > in avx512f, so we need to use workarounds, to access sse registers > > > > > 16-31, which are evex-only. In avx512vl we don't need workarounds. */ > > > > > if (TARGET_AVX512F && < 64 && !TARGET_AVX512VL > > > > > && (EXT_REX_SSE_REG_P (operands[0]) > > > > > || EXT_REX_SSE_REG_P (operands[1]))) > > > > > { > > > > > if (memory_operand (operands[0], mode)) > > > > > { > > > > > if ( == 32) > > > > > return "vextract64x4\t{$0x0, %g1, %0|%0, %g1, 0x0}"; > > > > > else if ( == 16) > > > > > return "vextract32x4\t{$0x0, %g1, %0|%0, %g1, 0x0}"; > > > > > else > > > > > gcc_unreachable (); > > > > > } > > > > > ... > > > > > > > > > > However, since ix86_hard_regno_mode_ok has > > > > > > > > > > /* TODO check for QI/HI scalars. */ > > > > > /* AVX512VL allows sse regs16+ for 128/256 bit modes. */ > > > > > if (TARGET_AVX512VL > > > > > && (mode == OImode > > > > > || mode == TImode > > > > > || VALID_AVX256_REG_MODE (mode) > > > > > || VALID_AVX512VL_128_REG_MODE (mode))) > > > > > return true; > > > > > > > > > > /* xmm16-xmm31 are only available for AVX-512. */ > > > > > if (EXT_REX_SSE_REGNO_P (regno)) > > > > > return false; > > > > > > > > > > if (TARGET_AVX512F && < 64 && !TARGET_AVX512VL > > > > > && (EXT_REX_SSE_REG_P (operands[0]) > > > > > || EXT_REX_SSE_REG_P (operands[1]))) > > > > > > > > > > is a dead code. > > > > > > > > > > Also for > > > > > > > > > > long long *p; > > > > > volatile __m256i yy; > > > > > > > > > > void > > > > > foo (void) > > > > > { > > > > > _mm256_store_epi64 (p, yy); > > > > > } > > > > > > > > > > with AVX512VL, we should generate > > > > > > > > > > vmovdqa %ymm0, (%rax) > > > > > > > > > > not > > > > > > > > > > vmovdqa64 %ymm0, (%rax) > > > > > > > > > > All TYPE_SSEMOV vector moves are consolidated to ix86_output_ssemov: > > > > > > > > > > 1. If xmm16-xmm31/ymm16-ymm31 registers aren't used, SSE/AVX vector > > > > > moves will be generated. > > > > > 2. If xmm16-xmm31/ymm16-ymm31 registers are used: > > > > > a. With AVX512VL, AVX512VL vector moves will be generated. > > > > > b. Without AVX512VL, xmm16-xmm31/ymm16-ymm31 register to register > > > > > move will be done with zmm register move. > > > > > > > > > > ext_sse_reg_operand is removed since it is no longer needed. > > > > > > > > > > Tested on AVX2 and AVX512 with and without --with-arch=native. > > > > > > > > > > gcc/ > > > > > > > > > > PR target/89229 > > > > > PR target/89346 > > > > > * config/i386/i386-protos.h (ix86_output_ssemov): New prototype. > > > > > * config/i386/i386.c (ix86_get_ssemov): New function. > > > > > (ix86_output_ssemov): Likewise. > > > > > * config/i386/i386.md (*movxi_internal_avx512f): Call > > > > > ix86_output_ssemov for TYPE_SSEMOV. > > > > > (*movoi_internal_avx): Call ix86_output_ssemov for TYPE_SSEMOV. > > > > > Remove ext_sse_reg_operand and TARGET_AVX512VL check. > > > > > (*movti_internal): Likewise. > > > > > (*movdi_internal): Call ix86_output_ssemov for TYPE_SSEMOV. > > > > > Remove ext_sse_reg_operand check. > > > > > (*movsi_internal): Likewise. > > > > > (*movtf_internal): Call ix86_output_ssemov for TYPE_SSEMOV. > > > > > (*movdf_internal): Call ix86_output_ssemov for TYPE_SSEMOV. > > > > > Remove TARGET_AVX512F, TARGET_PREFER_AVX256, TARGET_AVX512VL > > > > > and ext_sse_reg_operand check. > > > > > (*movsf_internal_avx): Call ix86_output_ssemov for TYPE_SSEMOV. > > > > > Remove TARGET_PREFER_AVX256, TARGET_AVX512VL and > > > > > ext_sse_reg_operand check. > > > > > * config/i386/mmx.md (MMXMODE:*mov_internal): Call > > > > > ix86_output_ssemov for TYPE_SSEMOV. Remove ext_sse_reg_operand > > > > > check. > > > > > * config/i386/sse.md (VMOVE:mov_internal): Call > > > > > ix86_output_ssemov for TYPE_SSEMOV. Remove TARGET_AVX512VL > > > > > check. > > > > > * config/i386/predicates.md (ext_sse_reg_operand): Removed. > > > > > > > > > > gcc/testsuite/ > > > > > > > > > > PR target/89229 > > > > > PR target/89346 > > > > > * gcc.target/i386/avx512vl-vmovdqa64-1.c: Updated. > > > > > * gcc.target/i386/pr89229-2a.c: New test. > > > > > * gcc.target/i386/pr89229-2b.c: Likewise. > > > > > * gcc.target/i386/pr89229-2c.c: Likewise. > > > > > * gcc.target/i386/pr89229-3a.c: Likewise. > > > > > * gcc.target/i386/pr89229-3b.c: Likewise. > > > > > * gcc.target/i386/pr89229-3c.c: Likewise. > > > > > * gcc.target/i386/pr89229-4a.c: Likewise. > > > > > * gcc.target/i386/pr89229-4b.c: Likewise. > > > > > * gcc.target/i386/pr89229-4c.c: Likewise. > > > > > * gcc.target/i386/pr89229-5a.c: Likewise. > > > > > * gcc.target/i386/pr89229-5b.c: Likewise. > > > > > * gcc.target/i386/pr89229-5c.c: Likewise. > > > > > * gcc.target/i386/pr89229-6a.c: Likewise. > > > > > * gcc.target/i386/pr89229-6b.c: Likewise. > > > > > * gcc.target/i386/pr89229-6c.c: Likewise. > > > > > * gcc.target/i386/pr89229-7a.c: Likewise. > > > > > * gcc.target/i386/pr89229-7b.c: Likewise. > > > > > * gcc.target/i386/pr89229-7c.c: Likewise. > > > > > --- > > > > > > > > PING: > > > > > > > > https://gcc.gnu.org/ml/gcc-patches/2019-02/msg01841.html > > > > > > > > > > > > > > PING. > > > > > > > PING. > > > > PING. > Here is the rebased patch. I'd like to see it got fixed for GCC 10. Thanks. -- H.J. --00000000000026f567059d23b6c0 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-i386-Properly-encode-xmm16-xmm31-ymm16-ymm31-for-vec.patch" Content-Disposition: attachment; filename="0001-i386-Properly-encode-xmm16-xmm31-ymm16-ymm31-for-vec.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_k5wteykp0 Content-length: 59236 RnJvbSAyNTQyYTU0YTM1ODllNjE2MDM2MmNmYWM1YjM2ZTZjYjI5M2QxN2Ri IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiAiSC5KLiBMdSIgPGhq bC50b29sc0BnbWFpbC5jb20+CkRhdGU6IFR1ZSwgMTIgRmViIDIwMTkgMTM6 MjU6NDEgLTA4MDAKU3ViamVjdDogW1BBVENIXSBpMzg2OiBQcm9wZXJseSBl bmNvZGUgeG1tMTYteG1tMzEveW1tMTYteW1tMzEgZm9yIHZlY3RvciBtb3Zl CgppMzg2IGJhY2tlbmQgaGFzCgpJTlRfTU9ERSAoT0ksIDMyKTsKSU5UX01P REUgKFhJLCA2NCk7CgpTbywgWElfTU9ERSByZXByZXNlbnRzIDY0IElOVEVH RVIgYnl0ZXMgPSA2NCAqIDggPSA1MTIgYml0IG9wZXJhdGlvbiwKaW4gY2Fz ZSBvZiBjb25zdF8xLCBhbGwgNTEyIGJpdHMgc2V0LgoKV2UgY2FuIGxvYWQg emVyb3Mgd2l0aCBuYXJyb3dlciBpbnN0cnVjdGlvbiwgKGUuZy4gMjU2IGJp dCBieSBpbmhlcmVudAp6ZXJvaW5nIG9mIGhpZ2hwYXJ0IGluIGNhc2Ugb2Yg MTI4IGJpdCB4b3IpLCBzbyBUSW1vZGUgaW4gdGhpcyBjYXNlLgoKU29tZSB0 YXJnZXRzIHByZWZlciBWNFNGIG1vZGUsIHNvIHRoZXkgd2lsbCBlbWl0IGZs b2F0IHhvcnBzIGZvciB6ZXJvaW5nLgoKc3NlLm1kIGhhcwoKKGRlZmluZV9p bnNuICJtb3Y8bW9kZT5faW50ZXJuYWwiCiAgWyhzZXQgKG1hdGNoX29wZXJh bmQ6Vk1PVkUgMCAibm9uaW1tZWRpYXRlX29wZXJhbmQiCiAgICAgICAgICI9 dix2ICx2ICxtIikKICAgICAgICAobWF0Y2hfb3BlcmFuZDpWTU9WRSAxICJu b25pbW1lZGlhdGVfb3Jfc3NlX2NvbnN0X29wZXJhbmQiCiAgICAgICAgICIg QyxCQyx2bSx2IikpXQouLi4uCiAgICAgIC8qIFRoZXJlIGlzIG5vIGV2ZXgt ZW5jb2RlZCB2bW92KiBmb3Igc2l6ZXMgc21hbGxlciB0aGFuIDY0LWJ5dGVz CiAgICAgICAgIGluIGF2eDUxMmYsIHNvIHdlIG5lZWQgdG8gdXNlIHdvcmth cm91bmRzLCB0byBhY2Nlc3Mgc3NlIHJlZ2lzdGVycwogICAgICAgICAxNi0z MSwgd2hpY2ggYXJlIGV2ZXgtb25seS4gSW4gYXZ4NTEydmwgd2UgZG9uJ3Qg bmVlZCB3b3JrYXJvdW5kcy4gICovCiAgICAgIGlmIChUQVJHRVRfQVZYNTEy RiAmJiA8TU9ERV9TSVpFPiA8IDY0ICYmICFUQVJHRVRfQVZYNTEyVkwKICAg ICAgICAgICYmIChFWFRfUkVYX1NTRV9SRUdfUCAob3BlcmFuZHNbMF0pCiAg ICAgICAgICAgICAgfHwgRVhUX1JFWF9TU0VfUkVHX1AgKG9wZXJhbmRzWzFd KSkpCiAgICAgICAgewogICAgICAgICAgaWYgKG1lbW9yeV9vcGVyYW5kIChv cGVyYW5kc1swXSwgPE1PREU+bW9kZSkpCiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICBpZiAoPE1PREVfU0laRT4gPT0gMzIpCiAgICAgICAgICAgICAg ICByZXR1cm4gInZleHRyYWN0PHNodWZmbGV0eXBlPjY0eDRcdHskMHgwLCAl ZzEsICUwfCUwLCAlZzEsIDB4MH0iOwogICAgICAgICAgICAgIGVsc2UgaWYg KDxNT0RFX1NJWkU+ID09IDE2KQogICAgICAgICAgICAgICAgcmV0dXJuICJ2 ZXh0cmFjdDxzaHVmZmxldHlwZT4zMng0XHR7JDB4MCwgJWcxLCAlMHwlMCwg JWcxLCAweDB9IjsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg ICBnY2NfdW5yZWFjaGFibGUgKCk7CiAgICAgICAgICAgIH0KLi4uCgpIb3dl dmVyLCBzaW5jZSBpeDg2X2hhcmRfcmVnbm9fbW9kZV9vayBoYXMKCiAgICAg LyogVE9ETyBjaGVjayBmb3IgUUkvSEkgc2NhbGFycy4gICovCiAgICAgIC8q IEFWWDUxMlZMIGFsbG93cyBzc2UgcmVnczE2KyBmb3IgMTI4LzI1NiBiaXQg bW9kZXMuICAqLwogICAgICBpZiAoVEFSR0VUX0FWWDUxMlZMCiAgICAgICAg ICAmJiAobW9kZSA9PSBPSW1vZGUKICAgICAgICAgICAgICB8fCBtb2RlID09 IFRJbW9kZQogICAgICAgICAgICAgIHx8IFZBTElEX0FWWDI1Nl9SRUdfTU9E RSAobW9kZSkKICAgICAgICAgICAgICB8fCBWQUxJRF9BVlg1MTJWTF8xMjhf UkVHX01PREUgKG1vZGUpKSkKICAgICAgICByZXR1cm4gdHJ1ZTsKCiAgICAg IC8qIHhtbTE2LXhtbTMxIGFyZSBvbmx5IGF2YWlsYWJsZSBmb3IgQVZYLTUx Mi4gICovCiAgICAgIGlmIChFWFRfUkVYX1NTRV9SRUdOT19QIChyZWdubykp CiAgICAgICAgcmV0dXJuIGZhbHNlOwoKICAgICAgaWYgKFRBUkdFVF9BVlg1 MTJGICYmIDxNT0RFX1NJWkU+IDwgNjQgJiYgIVRBUkdFVF9BVlg1MTJWTAog ICAgICAgICAgJiYgKEVYVF9SRVhfU1NFX1JFR19QIChvcGVyYW5kc1swXSkK ICAgICAgICAgICAgICB8fCBFWFRfUkVYX1NTRV9SRUdfUCAob3BlcmFuZHNb MV0pKSkKCmlzIGEgZGVhZCBjb2RlLgoKQWxzbyBmb3IKCmxvbmcgbG9uZyAq cDsKdm9sYXRpbGUgX19tMjU2aSB5eTsKCnZvaWQKZm9vICh2b2lkKQp7CiAg IF9tbTI1Nl9zdG9yZV9lcGk2NCAocCwgeXkpOwp9Cgp3aXRoIEFWWDUxMlZM LCB3ZSBzaG91bGQgZ2VuZXJhdGUKCgl2bW92ZHFhCQkleW1tMCwgKCVyYXgp Cgpub3QKCgl2bW92ZHFhNjQJJXltbTAsICglcmF4KQoKQWxsIFRZUEVfU1NF TU9WIHZlY3RvciBtb3ZlcyBhcmUgY29uc29saWRhdGVkIHRvIGl4ODZfb3V0 cHV0X3NzZW1vdjoKCjEuIElmIHhtbTE2LXhtbTMxL3ltbTE2LXltbTMxIHJl Z2lzdGVycyBhcmVuJ3QgdXNlZCwgU1NFL0FWWCB2ZWN0b3IKbW92ZXMgd2ls bCBiZSBnZW5lcmF0ZWQuCjIuIElmIHhtbTE2LXhtbTMxL3ltbTE2LXltbTMx IHJlZ2lzdGVycyBhcmUgdXNlZDoKICAgYS4gV2l0aCBBVlg1MTJWTCwgQVZY NTEyVkwgdmVjdG9yIG1vdmVzIHdpbGwgYmUgZ2VuZXJhdGVkLgogICBiLiBX aXRob3V0IEFWWDUxMlZMLCB4bW0xNi14bW0zMS95bW0xNi15bW0zMSByZWdp c3RlciB0byByZWdpc3RlcgogICAgICBtb3ZlIHdpbGwgYmUgZG9uZSB3aXRo IHptbSByZWdpc3RlciBtb3ZlLgoKZXh0X3NzZV9yZWdfb3BlcmFuZCBpcyBy ZW1vdmVkIHNpbmNlIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQuCgpUZXN0ZWQg b24gQVZYMiBhbmQgQVZYNTEyIHdpdGggYW5kIHdpdGhvdXQgLS13aXRoLWFy Y2g9bmF0aXZlLgoKZ2NjLwoKCVBSIHRhcmdldC84OTIyOQoJUFIgdGFyZ2V0 Lzg5MzQ2CgkqIGNvbmZpZy9pMzg2L2kzODYtcHJvdG9zLmggKGl4ODZfb3V0 cHV0X3NzZW1vdik6IE5ldyBwcm90b3R5cGUuCgkqIGNvbmZpZy9pMzg2L2kz ODYuYyAoaXg4Nl9nZXRfc3NlbW92KTogTmV3IGZ1bmN0aW9uLgoJKGl4ODZf b3V0cHV0X3NzZW1vdik6IExpa2V3aXNlLgoJKiBjb25maWcvaTM4Ni9pMzg2 Lm1kICgqbW92eGlfaW50ZXJuYWxfYXZ4NTEyZik6IENhbGwKCWl4ODZfb3V0 cHV0X3NzZW1vdiBmb3IgVFlQRV9TU0VNT1YuCgkoKm1vdm9pX2ludGVybmFs X2F2eCk6IENhbGwgaXg4Nl9vdXRwdXRfc3NlbW92IGZvciBUWVBFX1NTRU1P Vi4KCVJlbW92ZSBleHRfc3NlX3JlZ19vcGVyYW5kIGFuZCBUQVJHRVRfQVZY NTEyVkwgY2hlY2suCgkoKm1vdnRpX2ludGVybmFsKTogTGlrZXdpc2UuCgko Km1vdmRpX2ludGVybmFsKTogQ2FsbCBpeDg2X291dHB1dF9zc2Vtb3YgZm9y IFRZUEVfU1NFTU9WLgoJUmVtb3ZlIGV4dF9zc2VfcmVnX29wZXJhbmQgY2hl Y2suCgkoKm1vdnNpX2ludGVybmFsKTogTGlrZXdpc2UuCgkoKm1vdnRmX2lu dGVybmFsKTogQ2FsbCBpeDg2X291dHB1dF9zc2Vtb3YgZm9yIFRZUEVfU1NF TU9WLgoJKCptb3ZkZl9pbnRlcm5hbCk6IENhbGwgaXg4Nl9vdXRwdXRfc3Nl bW92IGZvciBUWVBFX1NTRU1PVi4KCVJlbW92ZSBUQVJHRVRfQVZYNTEyRiwg VEFSR0VUX1BSRUZFUl9BVlgyNTYsIFRBUkdFVF9BVlg1MTJWTAoJYW5kIGV4 dF9zc2VfcmVnX29wZXJhbmQgY2hlY2suCgkoKm1vdnNmX2ludGVybmFsX2F2 eCk6IENhbGwgaXg4Nl9vdXRwdXRfc3NlbW92IGZvciBUWVBFX1NTRU1PVi4K CVJlbW92ZSBUQVJHRVRfUFJFRkVSX0FWWDI1NiwgVEFSR0VUX0FWWDUxMlZM IGFuZAoJZXh0X3NzZV9yZWdfb3BlcmFuZCBjaGVjay4KCSogY29uZmlnL2kz ODYvbW14Lm1kIChNTVhNT0RFOiptb3Y8bW9kZT5faW50ZXJuYWwpOiBDYWxs CglpeDg2X291dHB1dF9zc2Vtb3YgZm9yIFRZUEVfU1NFTU9WLiAgUmVtb3Zl IGV4dF9zc2VfcmVnX29wZXJhbmQKCWNoZWNrLgoJKiBjb25maWcvaTM4Ni9z c2UubWQgKFZNT1ZFOm1vdjxtb2RlPl9pbnRlcm5hbCk6IENhbGwKCWl4ODZf b3V0cHV0X3NzZW1vdiBmb3IgVFlQRV9TU0VNT1YuICBSZW1vdmUgVEFSR0VU X0FWWDUxMlZMCgljaGVjay4KCSogY29uZmlnL2kzODYvcHJlZGljYXRlcy5t ZCAoZXh0X3NzZV9yZWdfb3BlcmFuZCk6IFJlbW92ZWQuCgpnY2MvdGVzdHN1 aXRlLwoKCVBSIHRhcmdldC84OTIyOQoJUFIgdGFyZ2V0Lzg5MzQ2CgkqIGdj Yy50YXJnZXQvaTM4Ni9hdng1MTJ2bC12bW92ZHFhNjQtMS5jOiBVcGRhdGVk LgoJKiBnY2MudGFyZ2V0L2kzODYvcHI4OTIyOS0yYS5jOiBOZXcgdGVzdC4K CSogZ2NjLnRhcmdldC9pMzg2L3ByODkyMjktMmIuYzogTGlrZXdpc2UuCgkq IGdjYy50YXJnZXQvaTM4Ni9wcjg5MjI5LTJjLmM6IExpa2V3aXNlLgoJKiBn Y2MudGFyZ2V0L2kzODYvcHI4OTIyOS0zYS5jOiBMaWtld2lzZS4KCSogZ2Nj LnRhcmdldC9pMzg2L3ByODkyMjktM2IuYzogTGlrZXdpc2UuCgkqIGdjYy50 YXJnZXQvaTM4Ni9wcjg5MjI5LTNjLmM6IExpa2V3aXNlLgoJKiBnY2MudGFy Z2V0L2kzODYvcHI4OTIyOS00YS5jOiBMaWtld2lzZS4KCSogZ2NjLnRhcmdl dC9pMzg2L3ByODkyMjktNGIuYzogTGlrZXdpc2UuCgkqIGdjYy50YXJnZXQv aTM4Ni9wcjg5MjI5LTRjLmM6IExpa2V3aXNlLgoJKiBnY2MudGFyZ2V0L2kz ODYvcHI4OTIyOS01YS5jOiBMaWtld2lzZS4KCSogZ2NjLnRhcmdldC9pMzg2 L3ByODkyMjktNWIuYzogTGlrZXdpc2UuCgkqIGdjYy50YXJnZXQvaTM4Ni9w cjg5MjI5LTVjLmM6IExpa2V3aXNlLgoJKiBnY2MudGFyZ2V0L2kzODYvcHI4 OTIyOS02YS5jOiBMaWtld2lzZS4KCSogZ2NjLnRhcmdldC9pMzg2L3ByODky MjktNmIuYzogTGlrZXdpc2UuCgkqIGdjYy50YXJnZXQvaTM4Ni9wcjg5MjI5 LTZjLmM6IExpa2V3aXNlLgoJKiBnY2MudGFyZ2V0L2kzODYvcHI4OTIyOS03 YS5jOiBMaWtld2lzZS4KCSogZ2NjLnRhcmdldC9pMzg2L3ByODkyMjktN2Iu YzogTGlrZXdpc2UuCgkqIGdjYy50YXJnZXQvaTM4Ni9wcjg5MjI5LTdjLmM6 IExpa2V3aXNlLgotLS0KIGdjYy9jb25maWcvaTM4Ni9pMzg2LXByb3Rvcy5o ICAgICAgICAgICAgICAgICB8ICAgMiArCiBnY2MvY29uZmlnL2kzODYvaTM4 Ni5jICAgICAgICAgICAgICAgICAgICAgICAgfCAyNzQgKysrKysrKysrKysr KysrKysrCiBnY2MvY29uZmlnL2kzODYvaTM4Ni5tZCAgICAgICAgICAgICAg ICAgICAgICAgfCAyMTIgKy0tLS0tLS0tLS0tLS0KIGdjYy9jb25maWcvaTM4 Ni9tbXgubWQgICAgICAgICAgICAgICAgICAgICAgICB8ICAyOSArLQogZ2Nj L2NvbmZpZy9pMzg2L3ByZWRpY2F0ZXMubWQgICAgICAgICAgICAgICAgIHwg ICA1IC0KIGdjYy9jb25maWcvaTM4Ni9zc2UubWQgICAgICAgICAgICAgICAg ICAgICAgICB8ICA5OCArLS0tLS0tCiAuLi4vZ2NjLnRhcmdldC9pMzg2L2F2 eDUxMnZsLXZtb3ZkcWE2NC0xLmMgICAgfCAgIDYgKy0KIGdjYy90ZXN0c3Vp dGUvZ2NjLnRhcmdldC9pMzg2L3ByODkyMjktMmEuYyAgICB8ICAxNSArCiBn Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg5MjI5LTJiLmMgICAg fCAgMTMgKwogZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4OTIy OS0yYy5jICAgIHwgICA2ICsKIGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9p Mzg2L3ByODkyMjktM2EuYyAgICB8ICAxNyArKwogZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvcHI4OTIyOS0zYi5jICAgIHwgICA2ICsKIGdjYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODkyMjktM2MuYyAgICB8ICAg NyArCiBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg5MjI5LTRh LmMgICAgfCAgMTcgKysKIGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2 L3ByODkyMjktNGIuYyAgICB8ICAgNiArCiBnY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvaTM4Ni9wcjg5MjI5LTRjLmMgICAgfCAgIDcgKwogZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4OTIyOS01YS5jICAgIHwgIDE2ICsK IGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODkyMjktNWIuYyAg ICB8ICAgNiArCiBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg5 MjI5LTVjLmMgICAgfCAgIDYgKwogZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L2kzODYvcHI4OTIyOS02YS5jICAgIHwgIDE2ICsKIGdjYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9pMzg2L3ByODkyMjktNmIuYyAgICB8ICAgNiArCiBnY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg5MjI5LTZjLmMgICAgfCAg IDYgKwogZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4OTIyOS03 YS5jICAgIHwgIDE2ICsKIGdjYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2 L3ByODkyMjktN2IuYyAgICB8ICAxMiArCiBnY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvaTM4Ni9wcjg5MjI5LTdjLmMgICAgfCAgIDYgKwogMjUgZmlsZXMg Y2hhbmdlZCwgNDgwIGluc2VydGlvbnMoKyksIDMzMCBkZWxldGlvbnMoLSkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9wcjg5MjI5LTJhLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg5MjI5LTJiLmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg5 MjI5LTJjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvaTM4Ni9wcjg5MjI5LTNhLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg5MjI5LTNiLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9wcjg5MjI5LTNjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg5MjI5LTRhLmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg5 MjI5LTRiLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvaTM4Ni9wcjg5MjI5LTRjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg5MjI5LTVhLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9wcjg5MjI5LTViLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg5MjI5LTVjLmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg5 MjI5LTZhLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvaTM4Ni9wcjg5MjI5LTZiLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg5MjI5LTZjLmMK IGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9wcjg5MjI5LTdhLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg5MjI5LTdiLmMKIGNyZWF0ZSBt b2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg5 MjI5LTdjLmMKCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYvaTM4Ni1w cm90b3MuaCBiL2djYy9jb25maWcvaTM4Ni9pMzg2LXByb3Rvcy5oCmluZGV4 IDI2NjM4MWNhNWE2Li4zOWZjYWEwYWQ1ZiAxMDA2NDQKLS0tIGEvZ2NjL2Nv bmZpZy9pMzg2L2kzODYtcHJvdG9zLmgKKysrIGIvZ2NjL2NvbmZpZy9pMzg2 L2kzODYtcHJvdG9zLmgKQEAgLTM4LDYgKzM4LDggQEAgZXh0ZXJuIHZvaWQg aXg4Nl9leHBhbmRfc3BsaXRfc3RhY2tfcHJvbG9ndWUgKHZvaWQpOwogZXh0 ZXJuIHZvaWQgaXg4Nl9vdXRwdXRfYWRkcl92ZWNfZWx0IChGSUxFICosIGlu dCk7CiBleHRlcm4gdm9pZCBpeDg2X291dHB1dF9hZGRyX2RpZmZfZWx0IChG SUxFICosIGludCwgaW50KTsKIAorZXh0ZXJuIGNvbnN0IGNoYXIgKml4ODZf b3V0cHV0X3NzZW1vdiAocnR4X2luc24gKiwgcnR4ICopOworCiBleHRlcm4g ZW51bSBjYWxsaW5nX2FiaSBpeDg2X2NmdW5fYWJpICh2b2lkKTsKIGV4dGVy biBlbnVtIGNhbGxpbmdfYWJpIGl4ODZfZnVuY3Rpb25fdHlwZV9hYmkgKGNv bnN0X3RyZWUpOwogCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2kzODYvaTM4 Ni5jIGIvZ2NjL2NvbmZpZy9pMzg2L2kzODYuYwppbmRleCBmZmU2MGJhYTcy YS4uNWJlOWU3MjVmZmUgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvaTM4Ni9p Mzg2LmMKKysrIGIvZ2NjL2NvbmZpZy9pMzg2L2kzODYuYwpAQCAtNDkxMCw2 ICs0OTEwLDI4MCBAQCBpeDg2X3ByZV9yZWxvYWRfc3BsaXQgKHZvaWQpCiAJ ICAmJiAhKGNmdW4tPmN1cnJfcHJvcGVydGllcyAmIFBST1BfcnRsX3NwbGl0 X2luc25zKSk7CiB9CiAKKy8qIFJldHVybiB0aGUgb3Bjb2RlIG9mIHRoZSBU WVBFX1NTRU1PViBpbnN0cnVjdGlvbi4gIFRvIG1vdmUgZnJvbQorICAgb3Ig dG8geG1tMTYteG1tMzEveW1tMTYteW1tMzEgcmVnaXN0ZXJzLCB3ZSBlaXRo ZXIgcmVxdWlyZQorICAgVEFSR0VUX0FWWDUxMlZMIG9yIGl0IGlzIGEgcmVn aXN0ZXIgdG8gcmVnaXN0ZXIgbW92ZSB3aGljaCBjYW4KKyAgIGJlIGRvbmUg d2l0aCB6bW0gcmVnaXN0ZXIgbW92ZS4gKi8KKworc3RhdGljIGNvbnN0IGNo YXIgKgoraXg4Nl9nZXRfc3NlbW92IChydHggKm9wZXJhbmRzLCB1bnNpZ25l ZCBzaXplLAorCQkgZW51bSBhdHRyX21vZGUgaW5zbl9tb2RlLCBtYWNoaW5l X21vZGUgbW9kZSkKK3sKKyAgY2hhciBidWZbMTI4XTsKKyAgYm9vbCBtaXNh bGlnbmVkX3AgPSAobWlzYWxpZ25lZF9vcGVyYW5kIChvcGVyYW5kc1swXSwg bW9kZSkKKwkJICAgICAgIHx8IG1pc2FsaWduZWRfb3BlcmFuZCAob3BlcmFu ZHNbMV0sIG1vZGUpKTsKKyAgYm9vbCBldmV4X3JlZ19wID0gKEVYVF9SRVhf U1NFX1JFR19QIChvcGVyYW5kc1swXSkKKwkJICAgICB8fCBFWFRfUkVYX1NT RV9SRUdfUCAob3BlcmFuZHNbMV0pKTsKKyAgbWFjaGluZV9tb2RlIHNjYWxh cl9tb2RlOworCisgIGNvbnN0IGNoYXIgKm9wY29kZSA9IE5VTEw7CisgIGVu dW0KKyAgICB7CisgICAgICBvcGNvZGVfaW50LAorICAgICAgb3Bjb2RlX2Zs b2F0LAorICAgICAgb3Bjb2RlX2RvdWJsZQorICAgIH0gdHlwZSA9IG9wY29k ZV9pbnQ7CisKKyAgc3dpdGNoIChpbnNuX21vZGUpCisgICAgeworICAgIGNh c2UgTU9ERV9WMTZTRjoKKyAgICBjYXNlIE1PREVfVjhTRjoKKyAgICBjYXNl IE1PREVfVjRTRjoKKyAgICAgIHNjYWxhcl9tb2RlID0gRV9TRm1vZGU7Cisg ICAgICBicmVhazsKKyAgICBjYXNlIE1PREVfVjhERjoKKyAgICBjYXNlIE1P REVfVjRERjoKKyAgICBjYXNlIE1PREVfVjJERjoKKyAgICAgIHNjYWxhcl9t b2RlID0gRV9ERm1vZGU7CisgICAgICBicmVhazsKKyAgICBjYXNlIE1PREVf WEk6CisgICAgY2FzZSBNT0RFX09JOgorICAgIGNhc2UgTU9ERV9USToKKyAg ICAgIHNjYWxhcl9tb2RlID0gR0VUX01PREVfSU5ORVIgKG1vZGUpOworICAg ICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIGdjY191bnJlYWNoYWJs ZSAoKTsKKyAgICB9CisKKyAgaWYgKFNDQUxBUl9GTE9BVF9NT0RFX1AgKHNj YWxhcl9tb2RlKSkKKyAgICB7CisgICAgICBzd2l0Y2ggKHNjYWxhcl9tb2Rl KQorCXsKKwljYXNlIEVfU0Ztb2RlOgorCSAgaWYgKHNpemUgPT0gNjQgfHwg IWV2ZXhfcmVnX3AgfHwgVEFSR0VUX0FWWDUxMlZMKQorCSAgICBvcGNvZGUg PSBtaXNhbGlnbmVkX3AgPyAiJXZtb3Z1cHMiIDogIiV2bW92YXBzIjsKKwkg IGVsc2UKKwkgICAgdHlwZSA9IG9wY29kZV9mbG9hdDsKKwkgIGJyZWFrOwor CWNhc2UgRV9ERm1vZGU6CisJICBpZiAoc2l6ZSA9PSA2NCB8fCAhZXZleF9y ZWdfcCB8fCBUQVJHRVRfQVZYNTEyVkwpCisJICAgIG9wY29kZSA9IG1pc2Fs aWduZWRfcCA/ICIldm1vdnVwZCIgOiAiJXZtb3ZhcGQiOworCSAgZWxzZQor CSAgICB0eXBlID0gb3Bjb2RlX2RvdWJsZTsKKwkgIGJyZWFrOworCWNhc2Ug RV9URm1vZGU6CisJICBpZiAoc2l6ZSA9PSA2NCkKKwkgICAgb3Bjb2RlID0g bWlzYWxpZ25lZF9wID8gInZtb3ZkcXU2NCIgOiAidm1vdmRxYTY0IjsKKwkg IGVsc2UgaWYgKGV2ZXhfcmVnX3ApCisJICAgIHsKKwkgICAgICBpZiAoVEFS R0VUX0FWWDUxMlZMKQorCQlvcGNvZGUgPSBtaXNhbGlnbmVkX3AgPyAidm1v dmRxdTY0IiA6ICJ2bW92ZHFhNjQiOworCSAgICB9CisJICBlbHNlCisJICAg IG9wY29kZSA9IG1pc2FsaWduZWRfcCA/ICIldm1vdmRxdSIgOiAiJXZtb3Zk cWEiOworCSAgYnJlYWs7CisJZGVmYXVsdDoKKwkgIGdjY191bnJlYWNoYWJs ZSAoKTsKKwl9CisgICAgfQorICBlbHNlIGlmIChTQ0FMQVJfSU5UX01PREVf UCAoc2NhbGFyX21vZGUpKQorICAgIHsKKyAgICAgIHN3aXRjaCAoc2NhbGFy X21vZGUpCisJeworCWNhc2UgRV9RSW1vZGU6CisJICBpZiAoc2l6ZSA9PSA2 NCkKKwkgICAgb3Bjb2RlID0gKG1pc2FsaWduZWRfcAorCQkgICAgICA/IChU QVJHRVRfQVZYNTEyQlcKKwkJCSA/ICJ2bW92ZHF1OCIKKwkJCSA6ICJ2bW92 ZHF1NjQiKQorCQkgICAgICA6ICJ2bW92ZHFhNjQiKTsKKwkgIGVsc2UgaWYg KGV2ZXhfcmVnX3ApCisJICAgIHsKKwkgICAgICBpZiAoVEFSR0VUX0FWWDUx MlZMKQorCQlvcGNvZGUgPSAobWlzYWxpZ25lZF9wCisJCQkgID8gKFRBUkdF VF9BVlg1MTJCVworCQkJICAgICA/ICJ2bW92ZHF1OCIKKwkJCSAgICAgOiAi dm1vdmRxdTY0IikKKwkJCSAgOiAidm1vdmRxYTY0Iik7CisJICAgIH0KKwkg IGVsc2UKKwkgICAgb3Bjb2RlID0gKG1pc2FsaWduZWRfcAorCQkgICAgICA/ IChUQVJHRVRfQVZYNTEyQlcKKwkJCSA/ICJ2bW92ZHF1OCIKKwkJCSA6ICIl dm1vdmRxdSIpCisJCSAgICAgIDogIiV2bW92ZHFhIik7CisJICBicmVhazsK KwljYXNlIEVfSEltb2RlOgorCSAgaWYgKHNpemUgPT0gNjQpCisJICAgIG9w Y29kZSA9IChtaXNhbGlnbmVkX3AKKwkJICAgICAgPyAoVEFSR0VUX0FWWDUx MkJXCisJCQkgPyAidm1vdmRxdTE2IgorCQkJIDogInZtb3ZkcXU2NCIpCisJ CSAgICAgIDogInZtb3ZkcWE2NCIpOworCSAgZWxzZSBpZiAoZXZleF9yZWdf cCkKKwkgICAgeworCSAgICAgIGlmIChUQVJHRVRfQVZYNTEyVkwpCisJCW9w Y29kZSA9IChtaXNhbGlnbmVkX3AKKwkJCSAgPyAoVEFSR0VUX0FWWDUxMkJX CisJCQkgICAgID8gInZtb3ZkcXUxNiIKKwkJCSAgICAgOiAidm1vdmRxdTY0 IikKKwkJCSAgOiAidm1vdmRxYTY0Iik7CisJICAgIH0KKwkgIGVsc2UKKwkg ICAgb3Bjb2RlID0gKG1pc2FsaWduZWRfcAorCQkgICAgICA/IChUQVJHRVRf QVZYNTEyQlcKKwkJCSA/ICJ2bW92ZHF1MTYiCisJCQkgOiAiJXZtb3ZkcXUi KQorCQkgICAgICA6ICIldm1vdmRxYSIpOworCSAgYnJlYWs7CisJY2FzZSBF X1NJbW9kZToKKwkgIGlmIChzaXplID09IDY0KQorCSAgICBvcGNvZGUgPSBt aXNhbGlnbmVkX3AgPyAidm1vdmRxdTMyIiA6ICJ2bW92ZHFhMzIiOworCSAg ZWxzZSBpZiAoZXZleF9yZWdfcCkKKwkgICAgeworCSAgICAgIGlmIChUQVJH RVRfQVZYNTEyVkwpCisJCW9wY29kZSA9IG1pc2FsaWduZWRfcCA/ICJ2bW92 ZHF1MzIiIDogInZtb3ZkcWEzMiI7CisJICAgIH0KKwkgIGVsc2UKKwkgICAg b3Bjb2RlID0gbWlzYWxpZ25lZF9wID8gIiV2bW92ZHF1IiA6ICIldm1vdmRx YSI7CisJICBicmVhazsKKwljYXNlIEVfREltb2RlOgorCWNhc2UgRV9USW1v ZGU6CisJY2FzZSBFX09JbW9kZToKKwkgIGlmIChzaXplID09IDY0KQorCSAg ICBvcGNvZGUgPSBtaXNhbGlnbmVkX3AgPyAidm1vdmRxdTY0IiA6ICJ2bW92 ZHFhNjQiOworCSAgZWxzZSBpZiAoZXZleF9yZWdfcCkKKwkgICAgeworCSAg ICAgIGlmIChUQVJHRVRfQVZYNTEyVkwpCisJCW9wY29kZSA9IG1pc2FsaWdu ZWRfcCA/ICJ2bW92ZHF1NjQiIDogInZtb3ZkcWE2NCI7CisJICAgIH0KKwkg IGVsc2UKKwkgICAgb3Bjb2RlID0gbWlzYWxpZ25lZF9wID8gIiV2bW92ZHF1 IiA6ICIldm1vdmRxYSI7CisJICBicmVhazsKKwljYXNlIEVfWEltb2RlOgor CSAgb3Bjb2RlID0gbWlzYWxpZ25lZF9wID8gInZtb3ZkcXU2NCIgOiAidm1v dmRxYTY0IjsKKwkgIGJyZWFrOworCWRlZmF1bHQ6CisJICBnY2NfdW5yZWFj aGFibGUgKCk7CisJfQorICAgIH0KKyAgZWxzZQorICAgIGdjY191bnJlYWNo YWJsZSAoKTsKKworICBpZiAoIW9wY29kZSkKKyAgICB7CisgICAgICAvKiBO QjogV2UgZ2V0IGhlcmUgb25seSBiZWNhdXNlIHdlIG1vdmUgeG1tMTYteG1t MzEveW1tMTYteW1tMzEKKyAgICAgICAgIHJlZ2lzdGVycyB3aXRob3V0IEFW WDUxMlZMIGJ5IHVzaW5nIHptbSByZWdpc3RlciBtb3ZlLiAgKi8KKyAgICAg IGlmICghZXZleF9yZWdfcAorCSAgfHwgVEFSR0VUX0FWWDUxMlZMCisJICB8 fCBtZW1vcnlfb3BlcmFuZCAob3BlcmFuZHNbMF0sIG1vZGUpCisJICB8fCBt ZW1vcnlfb3BlcmFuZCAob3BlcmFuZHNbMV0sIG1vZGUpKQorCWdjY191bnJl YWNoYWJsZSAoKTsKKyAgICAgIHNpemUgPSA2NDsKKyAgICAgIHN3aXRjaCAo dHlwZSkKKwl7CisJY2FzZSBvcGNvZGVfaW50OgorCSAgb3Bjb2RlID0gbWlz YWxpZ25lZF9wID8gInZtb3ZkcXUzMiIgOiAidm1vdmRxYTMyIjsKKwkgIGJy ZWFrOworCWNhc2Ugb3Bjb2RlX2Zsb2F0OgorCSAgb3Bjb2RlID0gbWlzYWxp Z25lZF9wID8gIiV2bW92dXBzIiA6ICIldm1vdmFwcyI7CisJICBicmVhazsK KwljYXNlIG9wY29kZV9kb3VibGU6CisJICBvcGNvZGUgPSBtaXNhbGlnbmVk X3AgPyAiJXZtb3Z1cGQiIDogIiV2bW92YXBkIjsKKwkgIGJyZWFrOworCX0K KyAgICB9CisKKyAgc3dpdGNoIChzaXplKQorICAgIHsKKyAgICBjYXNlIDY0 OgorICAgICAgc25wcmludGYgKGJ1Ziwgc2l6ZW9mIChidWYpLCAiJXNcdHsl JWcxLCAlJWcwfCUlZzAsICUlZzF9IiwKKwkJb3Bjb2RlKTsKKyAgICAgIGJy ZWFrOworICAgIGNhc2UgMzI6CisgICAgICBzbnByaW50ZiAoYnVmLCBzaXpl b2YgKGJ1ZiksICIlc1x0eyUldDEsICUldDB8JSV0MCwgJSV0MX0iLAorCQlv cGNvZGUpOworICAgICAgYnJlYWs7CisgICAgY2FzZSAxNjoKKyAgICAgIHNu cHJpbnRmIChidWYsIHNpemVvZiAoYnVmKSwgIiVzXHR7JSV4MSwgJSV4MHwl JXgwLCAlJXgxfSIsCisJCW9wY29kZSk7CisgICAgICBicmVhazsKKyAgICBk ZWZhdWx0OgorICAgICAgZ2NjX3VucmVhY2hhYmxlICgpOworICAgIH0KKyAg b3V0cHV0X2FzbV9pbnNuIChidWYsIG9wZXJhbmRzKTsKKyAgcmV0dXJuICIi OworfQorCisvKiBSZXR1cm4gdGhlIHRlbXBsYXRlIG9mIHRoZSBUWVBFX1NT RU1PViBpbnN0cnVjdGlvbiB0byBtb3ZlCisgICBvcGVyYW5kc1sxXSBpbnRv IG9wZXJhbmRzWzBdLiAgKi8KKworY29uc3QgY2hhciAqCitpeDg2X291dHB1 dF9zc2Vtb3YgKHJ0eF9pbnNuICppbnNuLCBydHggKm9wZXJhbmRzKQorewor ICBtYWNoaW5lX21vZGUgbW9kZSA9IEdFVF9NT0RFIChvcGVyYW5kc1swXSk7 CisgIGlmIChnZXRfYXR0cl90eXBlIChpbnNuKSAhPSBUWVBFX1NTRU1PVgor ICAgICAgfHwgbW9kZSAhPSBHRVRfTU9ERSAob3BlcmFuZHNbMV0pKQorICAg IGdjY191bnJlYWNoYWJsZSAoKTsKKworICBlbnVtIGF0dHJfbW9kZSBpbnNu X21vZGUgPSBnZXRfYXR0cl9tb2RlIChpbnNuKTsKKworICBzd2l0Y2ggKGlu c25fbW9kZSkKKyAgICB7CisgICAgY2FzZSBNT0RFX1hJOgorICAgIGNhc2Ug TU9ERV9WOERGOgorICAgIGNhc2UgTU9ERV9WMTZTRjoKKyAgICAgIHJldHVy biBpeDg2X2dldF9zc2Vtb3YgKG9wZXJhbmRzLCA2NCwgaW5zbl9tb2RlLCBt b2RlKTsKKworICAgIGNhc2UgTU9ERV9PSToKKyAgICBjYXNlIE1PREVfVjRE RjoKKyAgICBjYXNlIE1PREVfVjhTRjoKKyAgICAgIHJldHVybiBpeDg2X2dl dF9zc2Vtb3YgKG9wZXJhbmRzLCAzMiwgaW5zbl9tb2RlLCBtb2RlKTsKKwor ICAgIGNhc2UgTU9ERV9USToKKyAgICBjYXNlIE1PREVfVjJERjoKKyAgICBj YXNlIE1PREVfVjRTRjoKKyAgICAgIHJldHVybiBpeDg2X2dldF9zc2Vtb3Yg KG9wZXJhbmRzLCAxNiwgaW5zbl9tb2RlLCBtb2RlKTsKKworICAgIGNhc2Ug TU9ERV9ESToKKyAgICAgIC8qIEhhbmRsZSBicm9rZW4gYXNzZW1ibGVycyB0 aGF0IHJlcXVpcmUgbW92ZCBpbnN0ZWFkIG9mIG1vdnEuICovCisgICAgICBp ZiAoIUhBVkVfQVNfSVg4Nl9JTlRFUlVOSVRfTU9WUQorCSAgJiYgKEdFTkVS QUxfUkVHX1AgKG9wZXJhbmRzWzBdKQorCSAgICAgIHx8IEdFTkVSQUxfUkVH X1AgKG9wZXJhbmRzWzFdKSkpCisJcmV0dXJuICIldm1vdmRcdHslMSwgJTB8 JTAsICUxfSI7CisgICAgICBlbHNlCisJcmV0dXJuICIldm1vdnFcdHslMSwg JTB8JTAsICUxfSI7CisKKyAgICBjYXNlIE1PREVfVjJTRjoKKyAgICAgIGlm IChUQVJHRVRfQVZYICYmIFJFR19QIChvcGVyYW5kc1swXSkpCisJcmV0dXJu ICJ2bW92bHBzXHR7JTEsICVkMHwlZDAsICUxfSI7CisgICAgICBlbHNlCisJ cmV0dXJuICIldm1vdmxwc1x0eyUxLCAlMHwlMCwgJTF9IjsKKworICAgIGNh c2UgTU9ERV9ERjoKKyAgICAgIGlmIChUQVJHRVRfQVZYICYmIFJFR19QIChv cGVyYW5kc1swXSkgJiYgUkVHX1AgKG9wZXJhbmRzWzFdKSkKKwlyZXR1cm4g InZtb3ZzZFx0eyVkMSwgJTB8JTAsICVkMX0iOworICAgICAgZWxzZQorCXJl dHVybiAiJXZtb3ZzZFx0eyUxLCAlMHwlMCwgJTF9IjsKKworICAgIGNhc2Ug TU9ERV9WMURGOgorICAgICAgZ2NjX2Fzc2VydCAoIVRBUkdFVF9BVlgpOwor ICAgICAgIHJldHVybiAibW92bHBkXHR7JTEsICUwfCUwLCAlMX0iOworCisg ICAgY2FzZSBNT0RFX1NJOgorICAgICAgcmV0dXJuICIldm1vdmRcdHslMSwg JTB8JTAsICUxfSI7CisKKyAgICBjYXNlIE1PREVfU0Y6CisgICAgICBpZiAo VEFSR0VUX0FWWCAmJiBSRUdfUCAob3BlcmFuZHNbMF0pICYmIFJFR19QIChv cGVyYW5kc1sxXSkpCisJcmV0dXJuICJ2bW92c3NcdHslZDEsICUwfCUwLCAl ZDF9IjsKKyAgICAgIGVsc2UKKwlyZXR1cm4gIiV2bW92c3NcdHslMSwgJTB8 JTAsICUxfSI7CisKKyAgICBkZWZhdWx0OgorICAgICAgZ2NjX3VucmVhY2hh YmxlICgpOworICAgIH0KK30KKwogLyogUmV0dXJucyB0cnVlIGlmIE9QIGNv bnRhaW5zIGEgc3ltYm9sIHJlZmVyZW5jZSAqLwogCiBib29sCmRpZmYgLS1n aXQgYS9nY2MvY29uZmlnL2kzODYvaTM4Ni5tZCBiL2djYy9jb25maWcvaTM4 Ni9pMzg2Lm1kCmluZGV4IDZlOWM5YmQyZmI2Li5kY2I5NzJiNDMwMCAxMDA2 NDQKLS0tIGEvZ2NjL2NvbmZpZy9pMzg2L2kzODYubWQKKysrIGIvZ2NjL2Nv bmZpZy9pMzg2L2kzODYubWQKQEAgLTE5MTksMTEgKzE5MTksNyBAQAogICAg ICAgcmV0dXJuIHN0YW5kYXJkX3NzZV9jb25zdGFudF9vcGNvZGUgKGluc24s IG9wZXJhbmRzKTsKIAogICAgIGNhc2UgVFlQRV9TU0VNT1Y6Ci0gICAgICBp ZiAobWlzYWxpZ25lZF9vcGVyYW5kIChvcGVyYW5kc1swXSwgWEltb2RlKQot CSAgfHwgbWlzYWxpZ25lZF9vcGVyYW5kIChvcGVyYW5kc1sxXSwgWEltb2Rl KSkKLQlyZXR1cm4gInZtb3ZkcXUzMlx0eyUxLCAlMHwlMCwgJTF9IjsKLSAg ICAgIGVsc2UKLQlyZXR1cm4gInZtb3ZkcWEzMlx0eyUxLCAlMHwlMCwgJTF9 IjsKKyAgICAgIHJldHVybiBpeDg2X291dHB1dF9zc2Vtb3YgKGluc24sIG9w ZXJhbmRzKTsKIAogICAgIGRlZmF1bHQ6CiAgICAgICBnY2NfdW5yZWFjaGFi bGUgKCk7CkBAIC0xOTQ2LDI1ICsxOTQyLDcgQEAKICAgICAgIHJldHVybiBz dGFuZGFyZF9zc2VfY29uc3RhbnRfb3Bjb2RlIChpbnNuLCBvcGVyYW5kcyk7 CiAKICAgICBjYXNlIFRZUEVfU1NFTU9WOgotICAgICAgaWYgKG1pc2FsaWdu ZWRfb3BlcmFuZCAob3BlcmFuZHNbMF0sIE9JbW9kZSkKLQkgIHx8IG1pc2Fs aWduZWRfb3BlcmFuZCAob3BlcmFuZHNbMV0sIE9JbW9kZSkpCi0JewotCSAg aWYgKGdldF9hdHRyX21vZGUgKGluc24pID09IE1PREVfVjhTRikKLQkgICAg cmV0dXJuICJ2bW92dXBzXHR7JTEsICUwfCUwLCAlMX0iOwotCSAgZWxzZSBp ZiAoZ2V0X2F0dHJfbW9kZSAoaW5zbikgPT0gTU9ERV9YSSkKLQkgICAgcmV0 dXJuICJ2bW92ZHF1MzJcdHslMSwgJTB8JTAsICUxfSI7Ci0JICBlbHNlCi0J ICAgIHJldHVybiAidm1vdmRxdVx0eyUxLCAlMHwlMCwgJTF9IjsKLQl9Ci0g ICAgICBlbHNlCi0JewotCSAgaWYgKGdldF9hdHRyX21vZGUgKGluc24pID09 IE1PREVfVjhTRikKLQkgICAgcmV0dXJuICJ2bW92YXBzXHR7JTEsICUwfCUw LCAlMX0iOwotCSAgZWxzZSBpZiAoZ2V0X2F0dHJfbW9kZSAoaW5zbikgPT0g TU9ERV9YSSkKLQkgICAgcmV0dXJuICJ2bW92ZHFhMzJcdHslMSwgJTB8JTAs ICUxfSI7Ci0JICBlbHNlCi0JICAgIHJldHVybiAidm1vdmRxYVx0eyUxLCAl MHwlMCwgJTF9IjsKLQl9CisgICAgICByZXR1cm4gaXg4Nl9vdXRwdXRfc3Nl bW92IChpbnNuLCBvcGVyYW5kcyk7CiAKICAgICBkZWZhdWx0OgogICAgICAg Z2NjX3VucmVhY2hhYmxlICgpOwpAQCAtMTk3NCwxMyArMTk1Miw3IEBACiAg ICAoc2V0X2F0dHIgInR5cGUiICJzc2Vsb2cxLHNzZWxvZzEsc3NlbW92LHNz ZW1vdiIpCiAgICAoc2V0X2F0dHIgInByZWZpeCIgInZleCIpCiAgICAoc2V0 IChhdHRyICJtb2RlIikKLQkoY29uZCBbKGlvciAobWF0Y2hfb3BlcmFuZCAw ICJleHRfc3NlX3JlZ19vcGVyYW5kIikKLQkJICAgIChtYXRjaF9vcGVyYW5k IDEgImV4dF9zc2VfcmVnX29wZXJhbmQiKSkKLQkJIChjb25zdF9zdHJpbmcg IlhJIikKLQkgICAgICAgKGFuZCAoZXFfYXR0ciAiYWx0ZXJuYXRpdmUiICIx IikKLQkJICAgIChtYXRjaF90ZXN0ICJUQVJHRVRfQVZYNTEyVkwiKSkKLQkJ IChjb25zdF9zdHJpbmcgIlhJIikKLQkgICAgICAgKGlvciAobWF0Y2hfdGVz dCAiVEFSR0VUX1NTRV9QQUNLRURfU0lOR0xFX0lOU05fT1BUSU1BTCIpCisJ KGNvbmQgWyhpb3IgKG1hdGNoX3Rlc3QgIlRBUkdFVF9TU0VfUEFDS0VEX1NJ TkdMRV9JTlNOX09QVElNQUwiKQogCQkgICAgKGFuZCAoZXFfYXR0ciAiYWx0 ZXJuYXRpdmUiICIzIikKIAkJCSAobWF0Y2hfdGVzdCAiVEFSR0VUX1NTRV9U WVBFTEVTU19TVE9SRVMiKSkpCiAJCSAoY29uc3Rfc3RyaW5nICJWOFNGIikK QEAgLTIwMDYsMjcgKzE5NzgsNyBAQAogICAgICAgcmV0dXJuIHN0YW5kYXJk X3NzZV9jb25zdGFudF9vcGNvZGUgKGluc24sIG9wZXJhbmRzKTsKIAogICAg IGNhc2UgVFlQRV9TU0VNT1Y6Ci0gICAgICAvKiBURG1vZGUgdmFsdWVzIGFy ZSBwYXNzZWQgYXMgVEltb2RlIG9uIHRoZSBzdGFjay4gIE1vdmluZyB0aGVt Ci0JIHRvIHN0YWNrIG1heSByZXN1bHQgaW4gdW5hbGlnbmVkIG1lbW9yeSBh Y2Nlc3MuICAqLwotICAgICAgaWYgKG1pc2FsaWduZWRfb3BlcmFuZCAob3Bl cmFuZHNbMF0sIFRJbW9kZSkKLQkgIHx8IG1pc2FsaWduZWRfb3BlcmFuZCAo b3BlcmFuZHNbMV0sIFRJbW9kZSkpCi0JewotCSAgaWYgKGdldF9hdHRyX21v ZGUgKGluc24pID09IE1PREVfVjRTRikKLQkgICAgcmV0dXJuICIldm1vdnVw c1x0eyUxLCAlMHwlMCwgJTF9IjsKLQkgIGVsc2UgaWYgKGdldF9hdHRyX21v ZGUgKGluc24pID09IE1PREVfWEkpCi0JICAgIHJldHVybiAidm1vdmRxdTMy XHR7JTEsICUwfCUwLCAlMX0iOwotCSAgZWxzZQotCSAgICByZXR1cm4gIiV2 bW92ZHF1XHR7JTEsICUwfCUwLCAlMX0iOwotCX0KLSAgICAgIGVsc2UKLQl7 Ci0JICBpZiAoZ2V0X2F0dHJfbW9kZSAoaW5zbikgPT0gTU9ERV9WNFNGKQot CSAgICByZXR1cm4gIiV2bW92YXBzXHR7JTEsICUwfCUwLCAlMX0iOwotCSAg ZWxzZSBpZiAoZ2V0X2F0dHJfbW9kZSAoaW5zbikgPT0gTU9ERV9YSSkKLQkg ICAgcmV0dXJuICJ2bW92ZHFhMzJcdHslMSwgJTB8JTAsICUxfSI7Ci0JICBl bHNlCi0JICAgIHJldHVybiAiJXZtb3ZkcWFcdHslMSwgJTB8JTAsICUxfSI7 Ci0JfQorICAgICAgcmV0dXJuIGl4ODZfb3V0cHV0X3NzZW1vdiAoaW5zbiwg b3BlcmFuZHMpOwogCiAgICAgZGVmYXVsdDoKICAgICAgIGdjY191bnJlYWNo YWJsZSAoKTsKQEAgLTIwNTMsMTIgKzIwMDUsNiBAQAogICAgKHNldCAoYXR0 ciAibW9kZSIpCiAJKGNvbmQgWyhlcV9hdHRyICJhbHRlcm5hdGl2ZSIgIjAs MSIpCiAJCSAoY29uc3Rfc3RyaW5nICJESSIpCi0JICAgICAgIChpb3IgKG1h dGNoX29wZXJhbmQgMCAiZXh0X3NzZV9yZWdfb3BlcmFuZCIpCi0JCSAgICAo bWF0Y2hfb3BlcmFuZCAxICJleHRfc3NlX3JlZ19vcGVyYW5kIikpCi0JCSAo Y29uc3Rfc3RyaW5nICJYSSIpCi0JICAgICAgIChhbmQgKGVxX2F0dHIgImFs dGVybmF0aXZlIiAiMyIpCi0JCSAgICAobWF0Y2hfdGVzdCAiVEFSR0VUX0FW WDUxMlZMIikpCi0JCSAoY29uc3Rfc3RyaW5nICJYSSIpCiAJICAgICAgIChp b3IgKG5vdCAobWF0Y2hfdGVzdCAiVEFSR0VUX1NTRTIiKSkKIAkJICAgIChp b3IgKG1hdGNoX3Rlc3QgIlRBUkdFVF9TU0VfUEFDS0VEX1NJTkdMRV9JTlNO X09QVElNQUwiKQogCQkJIChhbmQgKGVxX2F0dHIgImFsdGVybmF0aXZlIiAi NSIpCkBAIC0yMTMyLDMxICsyMDc4LDcgQEAKICAgICAgIHJldHVybiBzdGFu ZGFyZF9zc2VfY29uc3RhbnRfb3Bjb2RlIChpbnNuLCBvcGVyYW5kcyk7CiAK ICAgICBjYXNlIFRZUEVfU1NFTU9WOgotICAgICAgc3dpdGNoIChnZXRfYXR0 cl9tb2RlIChpbnNuKSkKLQl7Ci0JY2FzZSBNT0RFX0RJOgotCSAgLyogSGFu ZGxlIGJyb2tlbiBhc3NlbWJsZXJzIHRoYXQgcmVxdWlyZSBtb3ZkIGluc3Rl YWQgb2YgbW92cS4gICovCi0JICBpZiAoIUhBVkVfQVNfSVg4Nl9JTlRFUlVO SVRfTU9WUQotCSAgICAgICYmIChHRU5FUkFMX1JFR19QIChvcGVyYW5kc1sw XSkgfHwgR0VORVJBTF9SRUdfUCAob3BlcmFuZHNbMV0pKSkKLQkgICAgcmV0 dXJuICIldm1vdmRcdHslMSwgJTB8JTAsICUxfSI7Ci0JICByZXR1cm4gIiV2 bW92cVx0eyUxLCAlMHwlMCwgJTF9IjsKLQotCWNhc2UgTU9ERV9USToKLQkg IC8qIEhhbmRsZSBBVlg1MTIgcmVnaXN0ZXJzIHNldC4gICovCi0JICBpZiAo RVhUX1JFWF9TU0VfUkVHX1AgKG9wZXJhbmRzWzBdKQotCSAgICAgIHx8IEVY VF9SRVhfU1NFX1JFR19QIChvcGVyYW5kc1sxXSkpCi0JICAgIHJldHVybiAi dm1vdmRxYTY0XHR7JTEsICUwfCUwLCAlMX0iOwotCSAgcmV0dXJuICIldm1v dmRxYVx0eyUxLCAlMHwlMCwgJTF9IjsKLQotCWNhc2UgTU9ERV9WMlNGOgot CSAgZ2NjX2Fzc2VydCAoIVRBUkdFVF9BVlgpOwotCSAgcmV0dXJuICJtb3Zs cHNcdHslMSwgJTB8JTAsICUxfSI7Ci0JY2FzZSBNT0RFX1Y0U0Y6Ci0JICBy ZXR1cm4gIiV2bW92YXBzXHR7JTEsICUwfCUwLCAlMX0iOwotCi0JZGVmYXVs dDoKLQkgIGdjY191bnJlYWNoYWJsZSAoKTsKLQl9CisgICAgICByZXR1cm4g aXg4Nl9vdXRwdXRfc3NlbW92IChpbnNuLCBvcGVyYW5kcyk7CiAKICAgICBj YXNlIFRZUEVfU1NFQ1ZUOgogICAgICAgaWYgKFNTRV9SRUdfUCAob3BlcmFu ZHNbMF0pKQpAQCAtMjI0MiwxMCArMjE2NCw3IEBACiAgICAgIChjb25kIFso ZXFfYXR0ciAiYWx0ZXJuYXRpdmUiICIyIikKIAkgICAgICAoY29uc3Rfc3Ry aW5nICJTSSIpCiAJICAgIChlcV9hdHRyICJhbHRlcm5hdGl2ZSIgIjEyLDEz IikKLQkgICAgICAoY29uZCBbKGlvciAobWF0Y2hfb3BlcmFuZCAwICJleHRf c3NlX3JlZ19vcGVyYW5kIikKLQkJCSAgKG1hdGNoX29wZXJhbmQgMSAiZXh0 X3NzZV9yZWdfb3BlcmFuZCIpKQotCQkgICAgICAgKGNvbnN0X3N0cmluZyAi VEkiKQotCQkgICAgIChpb3IgKG5vdCAobWF0Y2hfdGVzdCAiVEFSR0VUX1NT RTIiKSkKKwkgICAgICAoY29uZCBbKGlvciAobm90IChtYXRjaF90ZXN0ICJU QVJHRVRfU1NFMiIpKQogCQkJICAobWF0Y2hfdGVzdCAiVEFSR0VUX1NTRV9Q QUNLRURfU0lOR0xFX0lOU05fT1BUSU1BTCIpKQogCQkgICAgICAgKGNvbnN0 X3N0cmluZyAiVjRTRiIpCiAJCSAgICAgKG1hdGNoX3Rlc3QgIlRBUkdFVF9B VlgiKQpAQCAtMjM2OCwyNSArMjI4Nyw3IEBACiAgICAgICBnY2NfdW5yZWFj aGFibGUgKCk7CiAKICAgICBjYXNlIFRZUEVfU1NFTU9WOgotICAgICAgc3dp dGNoIChnZXRfYXR0cl9tb2RlIChpbnNuKSkKLQl7Ci0JY2FzZSBNT0RFX1NJ OgotICAgICAgICAgIHJldHVybiAiJXZtb3ZkXHR7JTEsICUwfCUwLCAlMX0i OwotCWNhc2UgTU9ERV9USToKLQkgIHJldHVybiAiJXZtb3ZkcWFcdHslMSwg JTB8JTAsICUxfSI7Ci0JY2FzZSBNT0RFX1hJOgotCSAgcmV0dXJuICJ2bW92 ZHFhMzJcdHslZzEsICVnMHwlZzAsICVnMX0iOwotCi0JY2FzZSBNT0RFX1Y0 U0Y6Ci0JICByZXR1cm4gIiV2bW92YXBzXHR7JTEsICUwfCUwLCAlMX0iOwot Ci0JY2FzZSBNT0RFX1NGOgotCSAgZ2NjX2Fzc2VydCAoIVRBUkdFVF9BVlgp OwotICAgICAgICAgIHJldHVybiAibW92c3NcdHslMSwgJTB8JTAsICUxfSI7 Ci0KLQlkZWZhdWx0OgotCSAgZ2NjX3VucmVhY2hhYmxlICgpOwotCX0KKyAg ICAgIHJldHVybiBpeDg2X291dHB1dF9zc2Vtb3YgKGluc24sIG9wZXJhbmRz KTsKIAogICAgIGNhc2UgVFlQRV9NTVg6CiAgICAgICByZXR1cm4gInB4b3Jc dCUwLCAlMCI7CkBAIC0yNDUyLDEwICsyMzUzLDcgQEAKICAgICAgKGNvbmQg WyhlcV9hdHRyICJhbHRlcm5hdGl2ZSIgIjIsMyIpCiAJICAgICAgKGNvbnN0 X3N0cmluZyAiREkiKQogCSAgICAoZXFfYXR0ciAiYWx0ZXJuYXRpdmUiICI4 LDkiKQotCSAgICAgIChjb25kIFsoaW9yIChtYXRjaF9vcGVyYW5kIDAgImV4 dF9zc2VfcmVnX29wZXJhbmQiKQotCQkJICAobWF0Y2hfb3BlcmFuZCAxICJl eHRfc3NlX3JlZ19vcGVyYW5kIikpCi0JCSAgICAgICAoY29uc3Rfc3RyaW5n ICJYSSIpCi0JCSAgICAgKGlvciAobm90IChtYXRjaF90ZXN0ICJUQVJHRVRf U1NFMiIpKQorCSAgICAgIChjb25kIFsoaW9yIChub3QgKG1hdGNoX3Rlc3Qg IlRBUkdFVF9TU0UyIikpCiAJCQkgIChtYXRjaF90ZXN0ICJUQVJHRVRfU1NF X1BBQ0tFRF9TSU5HTEVfSU5TTl9PUFRJTUFMIikpCiAJCSAgICAgICAoY29u c3Rfc3RyaW5nICJWNFNGIikKIAkJICAgICAobWF0Y2hfdGVzdCAiVEFSR0VU X0FWWCIpCkBAIC0zMjgyLDMxICszMTgwLDcgQEAKICAgICAgIHJldHVybiBz dGFuZGFyZF9zc2VfY29uc3RhbnRfb3Bjb2RlIChpbnNuLCBvcGVyYW5kcyk7 CiAKICAgICBjYXNlIFRZUEVfU1NFTU9WOgotICAgICAgLyogSGFuZGxlIG1p c2FsaWduZWQgbG9hZC9zdG9yZSBzaW5jZSB3ZQotICAgICAgICAgZG9uJ3Qg aGF2ZSBtb3ZtaXNhbGlnbnRmIHBhdHRlcm4uICovCi0gICAgICBpZiAobWlz YWxpZ25lZF9vcGVyYW5kIChvcGVyYW5kc1swXSwgVEZtb2RlKQotCSAgfHwg bWlzYWxpZ25lZF9vcGVyYW5kIChvcGVyYW5kc1sxXSwgVEZtb2RlKSkKLQl7 Ci0JICBpZiAoZ2V0X2F0dHJfbW9kZSAoaW5zbikgPT0gTU9ERV9WNFNGKQot CSAgICByZXR1cm4gIiV2bW92dXBzXHR7JTEsICUwfCUwLCAlMX0iOwotCSAg ZWxzZSBpZiAoVEFSR0VUX0FWWDUxMlZMCi0JCSAgICYmIChFWFRfUkVYX1NT RV9SRUdfUCAob3BlcmFuZHNbMF0pCi0JCSAgICAgICB8fCBFWFRfUkVYX1NT RV9SRUdfUCAob3BlcmFuZHNbMV0pKSkKLQkgICAgcmV0dXJuICJ2bW92ZHF1 NjRcdHslMSwgJTB8JTAsICUxfSI7Ci0JICBlbHNlCi0JICAgIHJldHVybiAi JXZtb3ZkcXVcdHslMSwgJTB8JTAsICUxfSI7Ci0JfQotICAgICAgZWxzZQot CXsKLQkgIGlmIChnZXRfYXR0cl9tb2RlIChpbnNuKSA9PSBNT0RFX1Y0U0Yp Ci0JICAgIHJldHVybiAiJXZtb3ZhcHNcdHslMSwgJTB8JTAsICUxfSI7Ci0J ICBlbHNlIGlmIChUQVJHRVRfQVZYNTEyVkwKLQkJICAgJiYgKEVYVF9SRVhf U1NFX1JFR19QIChvcGVyYW5kc1swXSkKLQkJICAgICAgIHx8IEVYVF9SRVhf U1NFX1JFR19QIChvcGVyYW5kc1sxXSkpKQotCSAgICByZXR1cm4gInZtb3Zk cWE2NFx0eyUxLCAlMHwlMCwgJTF9IjsKLQkgIGVsc2UKLQkgICAgcmV0dXJu ICIldm1vdmRxYVx0eyUxLCAlMHwlMCwgJTF9IjsKLQl9CisgICAgICByZXR1 cm4gaXg4Nl9vdXRwdXRfc3NlbW92IChpbnNuLCBvcGVyYW5kcyk7CiAKICAg ICBjYXNlIFRZUEVfTVVMVEk6CiAJcmV0dXJuICIjIjsKQEAgLTM0NTksMzcg KzMzMzMsNyBAQAogICAgICAgcmV0dXJuIHN0YW5kYXJkX3NzZV9jb25zdGFu dF9vcGNvZGUgKGluc24sIG9wZXJhbmRzKTsKIAogICAgIGNhc2UgVFlQRV9T U0VNT1Y6Ci0gICAgICBzd2l0Y2ggKGdldF9hdHRyX21vZGUgKGluc24pKQot CXsKLQljYXNlIE1PREVfREY6Ci0JICBpZiAoVEFSR0VUX0FWWCAmJiBSRUdf UCAob3BlcmFuZHNbMF0pICYmIFJFR19QIChvcGVyYW5kc1sxXSkpCi0JICAg IHJldHVybiAidm1vdnNkXHR7JWQxLCAlMHwlMCwgJWQxfSI7Ci0JICByZXR1 cm4gIiV2bW92c2RcdHslMSwgJTB8JTAsICUxfSI7Ci0KLQljYXNlIE1PREVf VjRTRjoKLQkgIHJldHVybiAiJXZtb3ZhcHNcdHslMSwgJTB8JTAsICUxfSI7 Ci0JY2FzZSBNT0RFX1Y4REY6Ci0JICByZXR1cm4gInZtb3ZhcGRcdHslZzEs ICVnMHwlZzAsICVnMX0iOwotCWNhc2UgTU9ERV9WMkRGOgotCSAgcmV0dXJu ICIldm1vdmFwZFx0eyUxLCAlMHwlMCwgJTF9IjsKLQotCWNhc2UgTU9ERV9W MlNGOgotCSAgZ2NjX2Fzc2VydCAoIVRBUkdFVF9BVlgpOwotCSAgcmV0dXJu ICJtb3ZscHNcdHslMSwgJTB8JTAsICUxfSI7Ci0JY2FzZSBNT0RFX1YxREY6 Ci0JICBnY2NfYXNzZXJ0ICghVEFSR0VUX0FWWCk7Ci0JICByZXR1cm4gIm1v dmxwZFx0eyUxLCAlMHwlMCwgJTF9IjsKLQotCWNhc2UgTU9ERV9ESToKLQkg IC8qIEhhbmRsZSBicm9rZW4gYXNzZW1ibGVycyB0aGF0IHJlcXVpcmUgbW92 ZCBpbnN0ZWFkIG9mIG1vdnEuICAqLwotCSAgaWYgKCFIQVZFX0FTX0lYODZf SU5URVJVTklUX01PVlEKLQkgICAgICAmJiAoR0VORVJBTF9SRUdfUCAob3Bl cmFuZHNbMF0pIHx8IEdFTkVSQUxfUkVHX1AgKG9wZXJhbmRzWzFdKSkpCi0J ICAgIHJldHVybiAiJXZtb3ZkXHR7JTEsICUwfCUwLCAlMX0iOwotCSAgcmV0 dXJuICIldm1vdnFcdHslMSwgJTB8JTAsICUxfSI7Ci0KLQlkZWZhdWx0Ogot CSAgZ2NjX3VucmVhY2hhYmxlICgpOwotCX0KKyAgICAgIHJldHVybiBpeDg2 X291dHB1dF9zc2Vtb3YgKGluc24sIG9wZXJhbmRzKTsKIAogICAgIGRlZmF1 bHQ6CiAgICAgICBnY2NfdW5yZWFjaGFibGUgKCk7CkBAIC0zNTQ1LDkgKzMz ODksNiBAQAogCSAgICAgICAoZXFfYXR0ciAiYWx0ZXJuYXRpdmUiICIxMiwx NiIpCiAJCSAoY29uZCBbKG5vdCAobWF0Y2hfdGVzdCAiVEFSR0VUX1NTRTIi KSkKIAkJIAkgIChjb25zdF9zdHJpbmcgIlY0U0YiKQotCQkJKGFuZCAobWF0 Y2hfdGVzdCAiVEFSR0VUX0FWWDUxMkYiKQotCQkJICAobm90IChtYXRjaF90 ZXN0ICJUQVJHRVRfUFJFRkVSX0FWWDI1NiIpKSkKLQkJCSAgKGNvbnN0X3N0 cmluZyAiWEkiKQogCQkJKG1hdGNoX3Rlc3QgIlRBUkdFVF9BVlgiKQogCQkJ ICAoY29uc3Rfc3RyaW5nICJWMkRGIikKIAkJCShtYXRjaF90ZXN0ICJvcHRp bWl6ZV9mdW5jdGlvbl9mb3Jfc2l6ZV9wIChjZnVuKSIpCkBAIC0zNTYzLDEy ICszNDA0LDcgQEAKIAogCSAgICAgICAvKiBtb3ZhcHMgaXMgb25lIGJ5dGUg c2hvcnRlciBmb3Igbm9uLUFWWCB0YXJnZXRzLiAgKi8KIAkgICAgICAgKGVx X2F0dHIgImFsdGVybmF0aXZlIiAiMTMsMTciKQotCQkgKGNvbmQgWyhhbmQg KGlvciAobm90IChtYXRjaF90ZXN0ICJUQVJHRVRfUFJFRkVSX0FWWDI1NiIp KQotCQkJCSAgKG5vdCAobWF0Y2hfdGVzdCAiVEFSR0VUX0FWWDUxMlZMIikp KQotCQkJICAgICAoaW9yIChtYXRjaF9vcGVyYW5kIDAgImV4dF9zc2VfcmVn X29wZXJhbmQiKQotCQkJCSAgKG1hdGNoX29wZXJhbmQgMSAiZXh0X3NzZV9y ZWdfb3BlcmFuZCIpKSkKLQkJCSAgKGNvbnN0X3N0cmluZyAiVjhERiIpCi0J CQkoaW9yIChub3QgKG1hdGNoX3Rlc3QgIlRBUkdFVF9TU0UyIikpCisJCSAo Y29uZCBbKGlvciAobm90IChtYXRjaF90ZXN0ICJUQVJHRVRfU1NFMiIpKQog CQkJICAgICAobWF0Y2hfdGVzdCAiVEFSR0VUX1NTRV9QQUNLRURfU0lOR0xF X0lOU05fT1BUSU1BTCIpKQogCQkJICAoY29uc3Rfc3RyaW5nICJWNFNGIikK IAkJCShtYXRjaF90ZXN0ICJUQVJHRVRfU1NFX1BBUlRJQUxfUkVHX0RFUEVO REVOQ1kiKQpAQCAtMzY2MCwyNCArMzQ5Niw3IEBACiAgICAgICByZXR1cm4g c3RhbmRhcmRfc3NlX2NvbnN0YW50X29wY29kZSAoaW5zbiwgb3BlcmFuZHMp OwogCiAgICAgY2FzZSBUWVBFX1NTRU1PVjoKLSAgICAgIHN3aXRjaCAoZ2V0 X2F0dHJfbW9kZSAoaW5zbikpCi0JewotCWNhc2UgTU9ERV9TRjoKLQkgIGlm IChUQVJHRVRfQVZYICYmIFJFR19QIChvcGVyYW5kc1swXSkgJiYgUkVHX1Ag KG9wZXJhbmRzWzFdKSkKLQkgICAgcmV0dXJuICJ2bW92c3NcdHslZDEsICUw fCUwLCAlZDF9IjsKLQkgIHJldHVybiAiJXZtb3Zzc1x0eyUxLCAlMHwlMCwg JTF9IjsKLQotCWNhc2UgTU9ERV9WMTZTRjoKLQkgIHJldHVybiAidm1vdmFw c1x0eyVnMSwgJWcwfCVnMCwgJWcxfSI7Ci0JY2FzZSBNT0RFX1Y0U0Y6Ci0J ICByZXR1cm4gIiV2bW92YXBzXHR7JTEsICUwfCUwLCAlMX0iOwotCi0JY2Fz ZSBNT0RFX1NJOgotCSAgcmV0dXJuICIldm1vdmRcdHslMSwgJTB8JTAsICUx fSI7Ci0KLQlkZWZhdWx0OgotCSAgZ2NjX3VucmVhY2hhYmxlICgpOwotCX0K KyAgICAgIHJldHVybiBpeDg2X291dHB1dF9zc2Vtb3YgKGluc24sIG9wZXJh bmRzKTsKIAogICAgIGNhc2UgVFlQRV9NTVhNT1Y6CiAgICAgICBzd2l0Y2gg KGdldF9hdHRyX21vZGUgKGluc24pKQpAQCAtMzc1MCwxMiArMzU2OSw3IEBA CiAJCSAgYmV0dGVyIHRvIG1haW50YWluIHRoZSB3aG9sZSByZWdpc3RlcnMg aW4gc2luZ2xlIGZvcm1hdAogCQkgIHRvIGF2b2lkIHByb2JsZW1zIG9uIHVz aW5nIHBhY2tlZCBsb2dpY2FsIG9wZXJhdGlvbnMuICAqLwogCSAgICAgICAo ZXFfYXR0ciAiYWx0ZXJuYXRpdmUiICI2IikKLQkJIChjb25kIFsoYW5kIChp b3IgKG5vdCAobWF0Y2hfdGVzdCAiVEFSR0VUX1BSRUZFUl9BVlgyNTYiKSkK LQkJCQkgIChub3QgKG1hdGNoX3Rlc3QgIlRBUkdFVF9BVlg1MTJWTCIpKSkK LQkJCSAgICAgKGlvciAobWF0Y2hfb3BlcmFuZCAwICJleHRfc3NlX3JlZ19v cGVyYW5kIikKLQkJCQkgIChtYXRjaF9vcGVyYW5kIDEgImV4dF9zc2VfcmVn X29wZXJhbmQiKSkpCi0JCQkgIChjb25zdF9zdHJpbmcgIlYxNlNGIikKLQkJ CShpb3IgKG1hdGNoX3Rlc3QgIlRBUkdFVF9TU0VfUEFSVElBTF9SRUdfREVQ RU5ERU5DWSIpCisJCSAoY29uZCBbKGlvciAobWF0Y2hfdGVzdCAiVEFSR0VU X1NTRV9QQVJUSUFMX1JFR19ERVBFTkRFTkNZIikKIAkJCSAgICAgKG1hdGNo X3Rlc3QgIlRBUkdFVF9TU0VfU1BMSVRfUkVHUyIpKQogCQkJICAoY29uc3Rf c3RyaW5nICJWNFNGIikKIAkJICAgICAgIF0KZGlmZiAtLWdpdCBhL2djYy9j b25maWcvaTM4Ni9tbXgubWQgYi9nY2MvY29uZmlnL2kzODYvbW14Lm1kCmlu ZGV4IGQwNmUzYjFmY2I0Li40YzU3MjliY2VmYiAxMDA2NDQKLS0tIGEvZ2Nj L2NvbmZpZy9pMzg2L21teC5tZAorKysgYi9nY2MvY29uZmlnL2kzODYvbW14 Lm1kCkBAIC0xMTgsMjkgKzExOCw3IEBACiAgICAgICByZXR1cm4gc3RhbmRh cmRfc3NlX2NvbnN0YW50X29wY29kZSAoaW5zbiwgb3BlcmFuZHMpOwogCiAg ICAgY2FzZSBUWVBFX1NTRU1PVjoKLSAgICAgIHN3aXRjaCAoZ2V0X2F0dHJf bW9kZSAoaW5zbikpCi0JewotCWNhc2UgTU9ERV9ESToKLQkgIC8qIEhhbmRs ZSBicm9rZW4gYXNzZW1ibGVycyB0aGF0IHJlcXVpcmUgbW92ZCBpbnN0ZWFk IG9mIG1vdnEuICAqLwotCSAgaWYgKCFIQVZFX0FTX0lYODZfSU5URVJVTklU X01PVlEKLQkgICAgICAmJiAoR0VORVJBTF9SRUdfUCAob3BlcmFuZHNbMF0p IHx8IEdFTkVSQUxfUkVHX1AgKG9wZXJhbmRzWzFdKSkpCi0JICAgIHJldHVy biAiJXZtb3ZkXHR7JTEsICUwfCUwLCAlMX0iOwotCSAgcmV0dXJuICIldm1v dnFcdHslMSwgJTB8JTAsICUxfSI7Ci0JY2FzZSBNT0RFX1RJOgotCSAgcmV0 dXJuICIldm1vdmRxYVx0eyUxLCAlMHwlMCwgJTF9IjsKLQljYXNlIE1PREVf WEk6Ci0JICByZXR1cm4gInZtb3ZkcWE2NFx0eyVnMSwgJWcwfCVnMCwgJWcx fSI7Ci0KLQljYXNlIE1PREVfVjJTRjoKLQkgIGlmIChUQVJHRVRfQVZYICYm IFJFR19QIChvcGVyYW5kc1swXSkpCi0JICAgIHJldHVybiAidm1vdmxwc1x0 eyUxLCAlMCwgJTB8JTAsICUwLCAlMX0iOwotCSAgcmV0dXJuICIldm1vdmxw c1x0eyUxLCAlMHwlMCwgJTF9IjsKLQljYXNlIE1PREVfVjRTRjoKLQkgIHJl dHVybiAiJXZtb3ZhcHNcdHslMSwgJTB8JTAsICUxfSI7Ci0KLQlkZWZhdWx0 OgotCSAgZ2NjX3VucmVhY2hhYmxlICgpOwotCX0KKyAgICAgIHJldHVybiBp eDg2X291dHB1dF9zc2Vtb3YgKGluc24sIG9wZXJhbmRzKTsKIAogICAgIGRl ZmF1bHQ6CiAgICAgICBnY2NfdW5yZWFjaGFibGUgKCk7CkBAIC0xODksMTAg KzE2Nyw3IEBACiAgICAgIChjb25kIFsoZXFfYXR0ciAiYWx0ZXJuYXRpdmUi ICIyIikKIAkgICAgICAoY29uc3Rfc3RyaW5nICJTSSIpCiAJICAgIChlcV9h dHRyICJhbHRlcm5hdGl2ZSIgIjExLDEyIikKLQkgICAgICAoY29uZCBbKGlv ciAobWF0Y2hfb3BlcmFuZCAwICJleHRfc3NlX3JlZ19vcGVyYW5kIikKLQkJ CSAgKG1hdGNoX29wZXJhbmQgMSAiZXh0X3NzZV9yZWdfb3BlcmFuZCIpKQot CQkJKGNvbnN0X3N0cmluZyAiWEkiKQotCQkgICAgIChtYXRjaF90ZXN0ICI8 TU9ERT5tb2RlID09IFYyU0Ztb2RlIikKKwkgICAgICAoY29uZCBbKG1hdGNo X3Rlc3QgIjxNT0RFPm1vZGUgPT0gVjJTRm1vZGUiKQogCQkgICAgICAgKGNv bnN0X3N0cmluZyAiVjRTRiIpCiAJCSAgICAgKGlvciAobm90IChtYXRjaF90 ZXN0ICJUQVJHRVRfU1NFMiIpKQogCQkJICAobWF0Y2hfdGVzdCAiVEFSR0VU X1NTRV9QQUNLRURfU0lOR0xFX0lOU05fT1BUSU1BTCIpKQpkaWZmIC0tZ2l0 IGEvZ2NjL2NvbmZpZy9pMzg2L3ByZWRpY2F0ZXMubWQgYi9nY2MvY29uZmln L2kzODYvcHJlZGljYXRlcy5tZAppbmRleCAxMTE5MzY2ZDU0ZS4uNzFmNGNi MTE5M2MgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvaTM4Ni9wcmVkaWNhdGVz Lm1kCisrKyBiL2djYy9jb25maWcvaTM4Ni9wcmVkaWNhdGVzLm1kCkBAIC02 MSwxMSArNjEsNiBAQAogICAoYW5kIChtYXRjaF9jb2RlICJyZWciKQogICAg ICAgIChtYXRjaF90ZXN0ICJTU0VfUkVHTk9fUCAoUkVHTk8gKG9wKSkiKSkp CiAKLTs7IFRydWUgaWYgdGhlIG9wZXJhbmQgaXMgYW4gQVZYLTUxMiBuZXcg cmVnaXN0ZXIuCi0oZGVmaW5lX3ByZWRpY2F0ZSAiZXh0X3NzZV9yZWdfb3Bl cmFuZCIKLSAgKGFuZCAobWF0Y2hfY29kZSAicmVnIikKLSAgICAgICAobWF0 Y2hfdGVzdCAiRVhUX1JFWF9TU0VfUkVHTk9fUCAoUkVHTk8gKG9wKSkiKSkp Ci0KIDs7IFJldHVybiB0cnVlIGlmIG9wIGlzIGEgUUltb2RlIHJlZ2lzdGVy LgogKGRlZmluZV9wcmVkaWNhdGUgImFueV9RSXJlZ19vcGVyYW5kIgogICAo YW5kIChtYXRjaF9jb2RlICJyZWciKQpkaWZmIC0tZ2l0IGEvZ2NjL2NvbmZp Zy9pMzg2L3NzZS5tZCBiL2djYy9jb25maWcvaTM4Ni9zc2UubWQKaW5kZXgg MDRhOGM1ZTU2YjkuLjVkMzk0OWRkY2FmIDEwMDY0NAotLS0gYS9nY2MvY29u ZmlnL2kzODYvc3NlLm1kCisrKyBiL2djYy9jb25maWcvaTM4Ni9zc2UubWQK QEAgLTEwMTMsOTggKzEwMTMsNyBAQAogICAgICAgcmV0dXJuIHN0YW5kYXJk X3NzZV9jb25zdGFudF9vcGNvZGUgKGluc24sIG9wZXJhbmRzKTsKIAogICAg IGNhc2UgVFlQRV9TU0VNT1Y6Ci0gICAgICAvKiBUaGVyZSBpcyBubyBldmV4 LWVuY29kZWQgdm1vdiogZm9yIHNpemVzIHNtYWxsZXIgdGhhbiA2NC1ieXRl cwotCSBpbiBhdng1MTJmLCBzbyB3ZSBuZWVkIHRvIHVzZSB3b3JrYXJvdW5k cywgdG8gYWNjZXNzIHNzZSByZWdpc3RlcnMKLQkgMTYtMzEsIHdoaWNoIGFy ZSBldmV4LW9ubHkuIEluIGF2eDUxMnZsIHdlIGRvbid0IG5lZWQgd29ya2Fy b3VuZHMuICAqLwotICAgICAgaWYgKFRBUkdFVF9BVlg1MTJGICYmIDxNT0RF X1NJWkU+IDwgNjQgJiYgIVRBUkdFVF9BVlg1MTJWTAotCSAgJiYgKEVYVF9S RVhfU1NFX1JFR19QIChvcGVyYW5kc1swXSkKLQkgICAgICB8fCBFWFRfUkVY X1NTRV9SRUdfUCAob3BlcmFuZHNbMV0pKSkKLQl7Ci0JICBpZiAobWVtb3J5 X29wZXJhbmQgKG9wZXJhbmRzWzBdLCA8TU9ERT5tb2RlKSkKLQkgICAgewot CSAgICAgIGlmICg8TU9ERV9TSVpFPiA9PSAzMikKLQkJcmV0dXJuICJ2ZXh0 cmFjdDxzaHVmZmxldHlwZT42NHg0XHR7JDB4MCwgJWcxLCAlMHwlMCwgJWcx LCAweDB9IjsKLQkgICAgICBlbHNlIGlmICg8TU9ERV9TSVpFPiA9PSAxNikK LQkJcmV0dXJuICJ2ZXh0cmFjdDxzaHVmZmxldHlwZT4zMng0XHR7JDB4MCwg JWcxLCAlMHwlMCwgJWcxLCAweDB9IjsKLQkgICAgICBlbHNlCi0JCWdjY191 bnJlYWNoYWJsZSAoKTsKLQkgICAgfQotCSAgZWxzZSBpZiAobWVtb3J5X29w ZXJhbmQgKG9wZXJhbmRzWzFdLCA8TU9ERT5tb2RlKSkKLQkgICAgewotCSAg ICAgIGlmICg8TU9ERV9TSVpFPiA9PSAzMikKLQkJcmV0dXJuICJ2YnJvYWRj YXN0PHNodWZmbGV0eXBlPjY0eDRcdHslMSwgJWcwfCVnMCwgJTF9IjsKLQkg ICAgICBlbHNlIGlmICg8TU9ERV9TSVpFPiA9PSAxNikKLQkJcmV0dXJuICJ2 YnJvYWRjYXN0PHNodWZmbGV0eXBlPjMyeDRcdHslMSwgJWcwfCVnMCwgJTF9 IjsKLQkgICAgICBlbHNlCi0JCWdjY191bnJlYWNoYWJsZSAoKTsKLQkgICAg fQotCSAgZWxzZQotCSAgICAvKiBSZWcgLT4gcmVnIG1vdmUgaXMgYWx3YXlz IGFsaWduZWQuICBKdXN0IHVzZSB3aWRlciBtb3ZlLiAgKi8KLQkgICAgc3dp dGNoIChnZXRfYXR0cl9tb2RlIChpbnNuKSkKLQkgICAgICB7Ci0JICAgICAg Y2FzZSBNT0RFX1Y4U0Y6Ci0JICAgICAgY2FzZSBNT0RFX1Y0U0Y6Ci0JCXJl dHVybiAidm1vdmFwc1x0eyVnMSwgJWcwfCVnMCwgJWcxfSI7Ci0JICAgICAg Y2FzZSBNT0RFX1Y0REY6Ci0JICAgICAgY2FzZSBNT0RFX1YyREY6Ci0JCXJl dHVybiAidm1vdmFwZFx0eyVnMSwgJWcwfCVnMCwgJWcxfSI7Ci0JICAgICAg Y2FzZSBNT0RFX09JOgotCSAgICAgIGNhc2UgTU9ERV9USToKLQkJcmV0dXJu ICJ2bW92ZHFhNjRcdHslZzEsICVnMHwlZzAsICVnMX0iOwotCSAgICAgIGRl ZmF1bHQ6Ci0JCWdjY191bnJlYWNoYWJsZSAoKTsKLQkgICAgICB9Ci0JfQot Ci0gICAgICBzd2l0Y2ggKGdldF9hdHRyX21vZGUgKGluc24pKQotCXsKLQlj YXNlIE1PREVfVjE2U0Y6Ci0JY2FzZSBNT0RFX1Y4U0Y6Ci0JY2FzZSBNT0RF X1Y0U0Y6Ci0JICBpZiAobWlzYWxpZ25lZF9vcGVyYW5kIChvcGVyYW5kc1sw XSwgPE1PREU+bW9kZSkKLQkgICAgICB8fCBtaXNhbGlnbmVkX29wZXJhbmQg KG9wZXJhbmRzWzFdLCA8TU9ERT5tb2RlKSkKLQkgICAgcmV0dXJuICIldm1v dnVwc1x0eyUxLCAlMHwlMCwgJTF9IjsKLQkgIGVsc2UKLQkgICAgcmV0dXJu ICIldm1vdmFwc1x0eyUxLCAlMHwlMCwgJTF9IjsKLQotCWNhc2UgTU9ERV9W OERGOgotCWNhc2UgTU9ERV9WNERGOgotCWNhc2UgTU9ERV9WMkRGOgotCSAg aWYgKG1pc2FsaWduZWRfb3BlcmFuZCAob3BlcmFuZHNbMF0sIDxNT0RFPm1v ZGUpCi0JICAgICAgfHwgbWlzYWxpZ25lZF9vcGVyYW5kIChvcGVyYW5kc1sx XSwgPE1PREU+bW9kZSkpCi0JICAgIHJldHVybiAiJXZtb3Z1cGRcdHslMSwg JTB8JTAsICUxfSI7Ci0JICBlbHNlCi0JICAgIHJldHVybiAiJXZtb3ZhcGRc dHslMSwgJTB8JTAsICUxfSI7Ci0KLQljYXNlIE1PREVfT0k6Ci0JY2FzZSBN T0RFX1RJOgotCSAgaWYgKG1pc2FsaWduZWRfb3BlcmFuZCAob3BlcmFuZHNb MF0sIDxNT0RFPm1vZGUpCi0JICAgICAgfHwgbWlzYWxpZ25lZF9vcGVyYW5k IChvcGVyYW5kc1sxXSwgPE1PREU+bW9kZSkpCi0JICAgIHJldHVybiBUQVJH RVRfQVZYNTEyVkwKLQkJICAgJiYgKDxNT0RFPm1vZGUgPT0gVjRTSW1vZGUK LQkJICAgICAgIHx8IDxNT0RFPm1vZGUgPT0gVjJESW1vZGUKLQkJICAgICAg IHx8IDxNT0RFPm1vZGUgPT0gVjhTSW1vZGUKLQkJICAgICAgIHx8IDxNT0RF Pm1vZGUgPT0gVjRESW1vZGUKLQkJICAgICAgIHx8IFRBUkdFVF9BVlg1MTJC VykKLQkJICAgPyAidm1vdmRxdTxzc2VzY2FsYXJzaXplPlx0eyUxLCAlMHwl MCwgJTF9IgotCQkgICA6ICIldm1vdmRxdVx0eyUxLCAlMHwlMCwgJTF9IjsK LQkgIGVsc2UKLQkgICAgcmV0dXJuIFRBUkdFVF9BVlg1MTJWTCA/ICJ2bW92 ZHFhNjRcdHslMSwgJTB8JTAsICUxfSIKLQkJCQkgICA6ICIldm1vdmRxYVx0 eyUxLCAlMHwlMCwgJTF9IjsKLQljYXNlIE1PREVfWEk6Ci0JICBpZiAobWlz YWxpZ25lZF9vcGVyYW5kIChvcGVyYW5kc1swXSwgPE1PREU+bW9kZSkKLQkg ICAgICB8fCBtaXNhbGlnbmVkX29wZXJhbmQgKG9wZXJhbmRzWzFdLCA8TU9E RT5tb2RlKSkKLQkgICAgcmV0dXJuICg8TU9ERT5tb2RlID09IFYxNlNJbW9k ZQotCQkgICAgfHwgPE1PREU+bW9kZSA9PSBWOERJbW9kZQotCQkgICAgfHwg VEFSR0VUX0FWWDUxMkJXKQotCQkgICA/ICJ2bW92ZHF1PHNzZXNjYWxhcnNp emU+XHR7JTEsICUwfCUwLCAlMX0iCi0JCSAgIDogInZtb3ZkcXU2NFx0eyUx LCAlMHwlMCwgJTF9IjsKLQkgIGVsc2UKLQkgICAgcmV0dXJuICJ2bW92ZHFh NjRcdHslMSwgJTB8JTAsICUxfSI7Ci0KLQlkZWZhdWx0OgotCSAgZ2NjX3Vu cmVhY2hhYmxlICgpOwotCX0KKyAgICAgIHJldHVybiBpeDg2X291dHB1dF9z c2Vtb3YgKGluc24sIG9wZXJhbmRzKTsKIAogICAgIGRlZmF1bHQ6CiAgICAg ICBnY2NfdW5yZWFjaGFibGUgKCk7CkBAIC0xMTEzLDEwICsxMDIyLDcgQEAK ICAgWyhzZXRfYXR0ciAidHlwZSIgInNzZWxvZzEsc3NlbG9nMSxzc2Vtb3Ys c3NlbW92IikKICAgIChzZXRfYXR0ciAicHJlZml4IiAibWF5YmVfdmV4IikK ICAgIChzZXQgKGF0dHIgIm1vZGUiKQotCShjb25kIFsoYW5kIChlcV9hdHRy ICJhbHRlcm5hdGl2ZSIgIjEiKQotCQkgICAgKG1hdGNoX3Rlc3QgIlRBUkdF VF9BVlg1MTJWTCIpKQotCQkgKGNvbnN0X3N0cmluZyAiPHNzZWluc25tb2Rl PiIpCi0JICAgICAgIChhbmQgKG1hdGNoX3Rlc3QgIjxNT0RFX1NJWkU+ID09 IDE2IikKKwkoY29uZCBbKGFuZCAobWF0Y2hfdGVzdCAiPE1PREVfU0laRT4g PT0gMTYiKQogCQkgICAgKGlvciAobWF0Y2hfdGVzdCAiVEFSR0VUX1NTRV9Q QUNLRURfU0lOR0xFX0lOU05fT1BUSU1BTCIpCiAJCQkgKGFuZCAoZXFfYXR0 ciAiYWx0ZXJuYXRpdmUiICIzIikKIAkJCSAgICAgIChtYXRjaF90ZXN0ICJU QVJHRVRfU1NFX1RZUEVMRVNTX1NUT1JFUyIpKSkpCmRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9hdng1MTJ2bC12bW92ZHFh NjQtMS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvYXZ4NTEy dmwtdm1vdmRxYTY0LTEuYwppbmRleCAxNGZlNGI4NDU0NC4uY2Y1NzUxN2Q2 ZGYgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2 L2F2eDUxMnZsLXZtb3ZkcWE2NC0xLmMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2kzODYvYXZ4NTEydmwtdm1vdmRxYTY0LTEuYwpAQCAtNCwx MyArNCwxMyBAQAogLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRp bWVzICJ2bW92ZHFhNjRcWyBcXHRcXStcW15ce1xuXF0qJXhtbVxbMC05XF0r XFteXG5cXSoleG1tXFswLTlcXStceyVrXFsxLTdcXVx9KD86XG58XFsgXFx0 XF0rIykiIDEgfSB9ICovCiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXItdGltZXMgInZtb3ZkcWE2NFxbIFxcdFxdK1xbXlx7XG5cXSoleW1tXFsw LTlcXStcW15cblxdKiV5bW1cWzAtOVxdK1x7JWtcWzEtN1xdXH1ce3pcfSg/ OlxufFxbIFxcdFxdKyMpIiAxIH0gfSAqLwogLyogeyBkZy1maW5hbCB7IHNj YW4tYXNzZW1ibGVyLXRpbWVzICJ2bW92ZHFhNjRcWyBcXHRcXStcW15ce1xu XF0qJXhtbVxbMC05XF0rXFteXG5cXSoleG1tXFswLTlcXStceyVrXFsxLTdc XVx9XHt6XH0oPzpcbnxcWyBcXHRcXSsjKSIgMSB9IH0gKi8KLS8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAidm1vdmRxYTY0XFsgXFx0 XF0rXFwoXFteXG5cXSoleW1tXFswLTlcXSsoPzpcbnxcWyBcXHRcXSsjKSIg MSB7IHRhcmdldCBub25waWMgfSB9IH0gKi8KLS8qIHsgZGctZmluYWwgeyBz Y2FuLWFzc2VtYmxlci10aW1lcyAidm1vdmRxYTY0XFsgXFx0XF0rXFwoXFte XG5cXSoleG1tXFswLTlcXSsoPzpcbnxcWyBcXHRcXSsjKSIgMSB7IHRhcmdl dCBub25waWMgfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2Vt Ymxlci10aW1lcyAidm1vdmRxYVxbIFxcdFxdK1xcKFxbXlxuXF0qJXltbVxb MC05XF0rKD86XG58XFsgXFx0XF0rIykiIDEgeyB0YXJnZXQgbm9ucGljIH0g fSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMg InZtb3ZkcWFcWyBcXHRcXStcXChcW15cblxdKiV4bW1cWzAtOVxdKyg/Olxu fFxbIFxcdFxdKyMpIiAxIHsgdGFyZ2V0IG5vbnBpYyB9IH0gfSAqLwogLyog eyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2bW92ZHFhNjRc WyBcXHRcXStcW15ce1xuXF0qXFwpXFteXG5cXSoleW1tXFswLTlcXStceyVr XFsxLTdcXVx9KD86XG58XFsgXFx0XF0rIykiIDEgfSB9ICovCiAvKiB7IGRn LWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInZtb3ZkcWE2NFxbIFxc dFxdK1xbXlx7XG5cXSpcXClcW15cblxdKiV4bW1cWzAtOVxdK1x7JWtcWzEt N1xdXH0oPzpcbnxcWyBcXHRcXSsjKSIgMSB9IH0gKi8KIC8qIHsgZGctZmlu YWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAidm1vdmRxYTY0XFsgXFx0XF0r XFteXHtcblxdKlxcKVxbXlxuXF0qJXltbVxbMC05XF0rXHsla1xbMS03XF1c fVx7elx9KD86XG58XFsgXFx0XF0rIykiIDEgfSB9ICovCiAvKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInZtb3ZkcWE2NFxbIFxcdFxd K1xbXlx7XG5cXSpcXClcW15cblxdKiV4bW1cWzAtOVxdK1x7JWtcWzEtN1xd XH1ce3pcfSg/OlxufFxbIFxcdFxdKyMpIiAxIH0gfSAqLwotLyogeyBkZy1m aW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2bW92ZHFhNjRcWyBcXHRc XStcW15ce1xuXF0qJXltbVxbMC05XF0rXFteXG54eVxdKlxcKC57NSw2fSg/ OlxufFxbIFxcdFxdKyMpIiAxIHsgdGFyZ2V0IG5vbnBpYyB9IH0gfSAqLwor LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2bW92ZHFh XFsgXFx0XF0rXFteXHtcblxdKiV5bW1cWzAtOVxdK1xbXlxueHlcXSpcXCgu ezUsNn0oPzpcbnxcWyBcXHRcXSsjKSIgMSB7IHRhcmdldCBub25waWMgfSB9 IH0gKi8KIC8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAi dm1vdmRxYTY0XFsgXFx0XF0rXFteXHtcblxdKiV4bW1cWzAtOVxdK1xbXlxu eHlcXSpcXCgoPzpcbnxcWyBcXHRcXSsjKSIgMSB7IHhmYWlsICotKi0qIH0g fSB9ICovCiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMg InZtb3ZkcWE2NFxbIFxcdFxdK1xbXlx7XG5cXSoleW1tXFswLTlcXStcW15c blxdKlxcKVx7JWtcWzEtN1xdXH0oPzpcbnxcWyBcXHRcXSsjKSIgMSB9IH0g Ki8KIC8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAidm1v dmRxYTY0XFsgXFx0XF0rXFteXHtcblxdKiV4bW1cWzAtOVxdK1xbXlxuXF0q XFwpXHsla1xbMS03XF1cfSg/OlxufFxbIFxcdFxdKyMpIiAxIH0gfSAqLwpk aWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4 OTIyOS0yYS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4 OTIyOS0yYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw MDAwLi4wY2Y3ODAzOTQ4MQotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODkyMjktMmEuYwpAQCAtMCwwICsx LDE1IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgeyAhIGlhMzIg fSB9IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tYXJjaD1za3lsYWtl LWF2eDUxMiIgfSAqLworCit0eXBlZGVmIF9faW50MTI4IF9fbTEyOHQgX19h dHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVfXyAoMTYpLAorCQkJCQkgX19t YXlfYWxpYXNfXykpOworCitfX20xMjh0Citmb28xICh2b2lkKQoreworICBy ZWdpc3RlciBfX2ludDEyOCB4bW0xNiBfX2FzbSAoInhtbTE2IikgPSAoX19p bnQxMjgpIC0xOworICBhc20gdm9sYXRpbGUgKCIiIDogIit2IiAoeG1tMTYp KTsKKyAgcmV0dXJuIChfX20xMjh0KSB4bW0xNjsKK30KKworLyogeyBkZy1m aW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiJXptbVxbMC05XF0rIiB9IH0g Ki8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2 L3ByODkyMjktMmIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2 L3ByODkyMjktMmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uOGQ1ZDZjNDFkMzAKLS0tIC9kZXYvbnVsbAorKysgYi9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg5MjI5LTJiLmMKQEAgLTAs MCArMSwxMyBAQAorLyogeyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0IHsgISBp YTMyIH0gfSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtbWFyY2g9c2t5 bGFrZS1hdng1MTIgLW1uby1hdng1MTJ2bCIgfSAqLworCit0eXBlZGVmIF9f aW50MTI4IF9fbTEyOHQgX19hdHRyaWJ1dGVfXyAoKF9fdmVjdG9yX3NpemVf XyAoMTYpLAorCQkJCQkgX19tYXlfYWxpYXNfXykpOworCitfX20xMjh0Citm b28xICh2b2lkKQoreworICByZWdpc3RlciBfX2ludDEyOCB4bW0xNiBfX2Fz bSAoInhtbTE2IikgPSAoX19pbnQxMjgpIC0xOyAvKiB7IGRnLWVycm9yICJy ZWdpc3RlciBzcGVjaWZpZWQgZm9yICd4bW0xNiciIH0gKi8KKyAgYXNtIHZv bGF0aWxlICgiIiA6ICIrdiIgKHhtbTE2KSk7CisgIHJldHVybiAoX19tMTI4 dCkgeG1tMTY7Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvaTM4Ni9wcjg5MjI5LTJjLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvaTM4Ni9wcjg5MjI5LTJjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjIxOGRhNDZkY2QwCi0tLSAvZGV2L251bGwK KysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4OTIyOS0y Yy5jCkBAIC0wLDAgKzEsNiBAQAorLyogeyBkZy1kbyBjb21waWxlIHsgdGFy Z2V0IHsgISBpYTMyIH0gfSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAt bWFyY2g9c2t5bGFrZS1hdng1MTIgLW1wcmVmZXItdmVjdG9yLXdpZHRoPTUx MiIgfSAqLworCisjaW5jbHVkZSAicHI4OTIyOS0yYS5jIgorCisvKiB7IGRn LWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICIlem1tXFswLTlcXSsiIH0g fSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kz ODYvcHI4OTIyOS0zYS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kz ODYvcHI4OTIyOS0zYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi5mZDU2ZjQ0NzAxNgotLS0gL2Rldi9udWxsCisrKyBiL2dj Yy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODkyMjktM2EuYwpAQCAt MCwwICsxLDE3IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgeyAh IGlhMzIgfSB9IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tYXJjaD1z a3lsYWtlLWF2eDUxMiIgfSAqLworCitleHRlcm4gaW50IGk7CisKK2ludAor Zm9vMSAodm9pZCkKK3sKKyAgcmVnaXN0ZXIgaW50IHhtbTE2IF9fYXNtICgi eG1tMTYiKSA9IGk7CisgIGFzbSB2b2xhdGlsZSAoIiIgOiAiK3YiICh4bW0x NikpOworICByZWdpc3RlciBpbnQgeG1tMTcgX19hc20gKCJ4bW0xNyIpID0g eG1tMTY7CisgIGFzbSB2b2xhdGlsZSAoIiIgOiAiK3YiICh4bW0xNykpOwor ICByZXR1cm4geG1tMTc7Cit9CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFz c2VtYmxlci10aW1lcyAidm1vdmRxYTMyXFteXG5ccl0qeG1tMVxbNjddXFte XG5ccl0qeG1tMVxbNjddIiAxIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNj YW4tYXNzZW1ibGVyLW5vdCAiJXptbVxbMC05XF0rIiB9IH0gKi8KZGlmZiAt LWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODkyMjkt M2IuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODkyMjkt M2IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4u OTI2NWZjMDM1NGIKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvaTM4Ni9wcjg5MjI5LTNiLmMKQEAgLTAsMCArMSw2IEBA CisvKiB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQgeyAhIGlhMzIgfSB9IH0g Ki8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tYXJjaD1za3lsYWtlLWF2eDUx MiAtbW5vLWF2eDUxMnZsIiB9ICovCisKKyNpbmNsdWRlICJwcjg5MjI5LTNh LmMiCisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAi dm1vdmRxYTMyXFteXG5ccl0qem1tMVxbNjddXFteXG5ccl0qem1tMVxbNjdd IiAxIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L2kzODYvcHI4OTIyOS0zYy5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFy Z2V0L2kzODYvcHI4OTIyOS0zYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi5kM2ZkZjFlZTI3MwotLS0gL2Rldi9udWxsCisr KyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODkyMjktM2Mu YwpAQCAtMCwwICsxLDcgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB7IHRhcmdl dCB7ICEgaWEzMiB9IH0gfSAqLworLyogeyBkZy1vcHRpb25zICItTzIgLW1h cmNoPXNreWxha2UtYXZ4NTEyIC1tcHJlZmVyLXZlY3Rvci13aWR0aD01MTIi IH0gKi8KKworI2luY2x1ZGUgInByODkyMjktM2EuYyIKKworLyogeyBkZy1m aW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2bW92ZHFhMzJcW15cblxy XSp4bW0xXFs2N11cW15cblxyXSp4bW0xXFs2N10iIDEgfSB9ICovCisvKiB7 IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICIlem1tXFswLTlcXSsi IH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L2kzODYvcHI4OTIyOS00YS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L2kzODYvcHI4OTIyOS00YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi5jYjliMDcxZTg3MwotLS0gL2Rldi9udWxsCisrKyBi L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODkyMjktNGEuYwpA QCAtMCwwICsxLDE3IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQg eyAhIGlhMzIgfSB9IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tYXJj aD1za3lsYWtlLWF2eDUxMiAtbXByZWZlci12ZWN0b3Itd2lkdGg9NTEyIiB9 ICovCisKK2V4dGVybiBsb25nIGxvbmcgaTsKKworbG9uZyBsb25nCitmb28x ICh2b2lkKQoreworICByZWdpc3RlciBsb25nIGxvbmcgeG1tMTYgX19hc20g KCJ4bW0xNiIpID0gaTsKKyAgYXNtIHZvbGF0aWxlICgiIiA6ICIrdiIgKHht bTE2KSk7CisgIHJlZ2lzdGVyIGxvbmcgbG9uZyB4bW0xNyBfX2FzbSAoInht bTE3IikgPSB4bW0xNjsKKyAgYXNtIHZvbGF0aWxlICgiIiA6ICIrdiIgKHht bTE3KSk7CisgIHJldHVybiB4bW0xNzsKK30KKworLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJ2bW92ZHFhNjRcW15cblxyXSp4bW0x XFs2N11cW15cblxyXSp4bW0xXFs2N10iIDEgfSB9ICovCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICIlem1tXFswLTlcXSsiIH0gfSAq LwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYv cHI4OTIyOS00Yi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYv cHI4OTIyOS00Yi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwLi4wMjNlODEyNTNhMAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODkyMjktNGIuYwpAQCAtMCww ICsxLDYgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCB7ICEgaWEz MiB9IH0gfSAqLworLyogeyBkZy1vcHRpb25zICItTzIgLW1hcmNoPXNreWxh a2UtYXZ4NTEyIC1tbm8tYXZ4NTEydmwiIH0gKi8KKworI2luY2x1ZGUgInBy ODkyMjktNGEuYyIKKworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy LXRpbWVzICJ2bW92ZHFhMzJcW15cblxyXSp6bW0xXFs2N11cW15cblxyXSp6 bW0xXFs2N10iIDEgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvaTM4Ni9wcjg5MjI5LTRjLmMgYi9nY2MvdGVzdHN1aXRl L2djYy50YXJnZXQvaTM4Ni9wcjg5MjI5LTRjLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmUwMmViMzdjMTZkCi0tLSAvZGV2 L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4 OTIyOS00Yy5jCkBAIC0wLDAgKzEsNyBAQAorLyogeyBkZy1kbyBjb21waWxl IHsgdGFyZ2V0IHsgISBpYTMyIH0gfSB9ICovCisvKiB7IGRnLW9wdGlvbnMg Ii1PMiAtbWFyY2g9c2t5bGFrZS1hdng1MTIgLW1wcmVmZXItdmVjdG9yLXdp ZHRoPTUxMiIgfSAqLworCisjaW5jbHVkZSAicHI4OTIyOS00YS5jIgorCisv KiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgInZtb3ZkcWE2 NFxbXlxuXHJdKnhtbTFcWzY3XVxbXlxuXHJdKnhtbTFcWzY3XSIgMSB9IH0g Ki8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIiV6bW1c WzAtOVxdKyIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvaTM4Ni9wcjg5MjI5LTVhLmMgYi9nY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvaTM4Ni9wcjg5MjI5LTVhLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjg1NjExNWIyZjVhCi0tLSAvZGV2L251 bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4OTIy OS01YS5jCkBAIC0wLDAgKzEsMTYgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB7 IHRhcmdldCB7ICEgaWEzMiB9IH0gfSAqLworLyogeyBkZy1vcHRpb25zICIt TzIgLW1hcmNoPXNreWxha2UtYXZ4NTEyIiB9ICovCisKK2V4dGVybiBmbG9h dCBkOworCit2b2lkCitmb28xIChmbG9hdCB4KQoreworICByZWdpc3RlciBm bG9hdCB4bW0xNiBfX2FzbSAoInhtbTE2IikgPSB4OworICBhc20gdm9sYXRp bGUgKCIiIDogIit2IiAoeG1tMTYpKTsKKyAgcmVnaXN0ZXIgZmxvYXQgeG1t MTcgX19hc20gKCJ4bW0xNyIpID0geG1tMTY7CisgIGFzbSB2b2xhdGlsZSAo IiIgOiAiK3YiICh4bW0xNykpOworICBkID0geG1tMTc7Cit9CisKKy8qIHsg ZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIiV6bW1cWzAtOVxdKyIg fSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9wcjg5MjI5LTViLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9wcjg5MjI5LTViLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLmNiMGYzYjU1Y2NjCi0tLSAvZGV2L251bGwKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4OTIyOS01Yi5jCkBA IC0wLDAgKzEsNiBAQAorLyogeyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0IHsg ISBpYTMyIH0gfSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtbWFyY2g9 c2t5bGFrZS1hdng1MTIgLW1uby1hdng1MTJ2bCIgfSAqLworCisjaW5jbHVk ZSAicHI4OTIyOS01YS5jIgorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3Nl bWJsZXItdGltZXMgInZtb3ZhcHNcW15cblxyXSp6bW0xXFs2N11cW15cblxy XSp6bW0xXFs2N10iIDEgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg5MjI5LTVjLmMgYi9nY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg5MjI5LTVjLmMKbmV3IGZpbGUgbW9k ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjUyOWE1MjAxMzNjCi0tLSAv ZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYv cHI4OTIyOS01Yy5jCkBAIC0wLDAgKzEsNiBAQAorLyogeyBkZy1kbyBjb21w aWxlIHsgdGFyZ2V0IHsgISBpYTMyIH0gfSB9ICovCisvKiB7IGRnLW9wdGlv bnMgIi1PMiAtbWFyY2g9c2t5bGFrZS1hdng1MTIgLW1wcmVmZXItdmVjdG9y LXdpZHRoPTUxMiIgfSAqLworCisjaW5jbHVkZSAicHI4OTIyOS01YS5jIgor CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90ICIlem1tXFsw LTlcXSsiIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvcHI4OTIyOS02YS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2Mu dGFyZ2V0L2kzODYvcHI4OTIyOS02YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0 CmluZGV4IDAwMDAwMDAwMDAwLi5mODhkN2M4ZDc0YwotLS0gL2Rldi9udWxs CisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODkyMjkt NmEuYwpAQCAtMCwwICsxLDE2IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgeyB0 YXJnZXQgeyAhIGlhMzIgfSB9IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8y IC1tYXJjaD1za3lsYWtlLWF2eDUxMiIgfSAqLworCitleHRlcm4gZG91Ymxl IGQ7CisKK3ZvaWQKK2ZvbzEgKGRvdWJsZSB4KQoreworICByZWdpc3RlciBk b3VibGUgeG1tMTYgX19hc20gKCJ4bW0xNiIpID0geDsKKyAgYXNtIHZvbGF0 aWxlICgiIiA6ICIrdiIgKHhtbTE2KSk7CisgIHJlZ2lzdGVyIGRvdWJsZSB4 bW0xNyBfX2FzbSAoInhtbTE3IikgPSB4bW0xNjsKKyAgYXNtIHZvbGF0aWxl ICgiIiA6ICIrdiIgKHhtbTE3KSk7CisgIGQgPSB4bW0xNzsKK30KKworLyog eyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCAiJXptbVxbMC05XF0r IiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9pMzg2L3ByODkyMjktNmIuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdl dC9pMzg2L3ByODkyMjktNmIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uMzE2ZDg1ZDkyMWUKLS0tIC9kZXYvbnVsbAorKysg Yi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg5MjI5LTZiLmMK QEAgLTAsMCArMSw2IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgeyB0YXJnZXQg eyAhIGlhMzIgfSB9IH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1tYXJj aD1za3lsYWtlLWF2eDUxMiAtbW5vLWF2eDUxMnZsIiB9ICovCisKKyNpbmNs dWRlICJwcjg5MjI5LTZhLmMiCisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFz c2VtYmxlci10aW1lcyAidm1vdmFwZFxbXlxuXHJdKnptbTFcWzY3XVxbXlxu XHJdKnptbTFcWzY3XSIgMSB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODkyMjktNmMuYyBiL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODkyMjktNmMuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uN2E0ZDI1NDY3MGMKLS0t IC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4 Ni9wcjg5MjI5LTZjLmMKQEAgLTAsMCArMSw2IEBACisvKiB7IGRnLWRvIGNv bXBpbGUgeyB0YXJnZXQgeyAhIGlhMzIgfSB9IH0gKi8KKy8qIHsgZGctb3B0 aW9ucyAiLU8yIC1tYXJjaD1za3lsYWtlLWF2eDUxMiAtbXByZWZlci12ZWN0 b3Itd2lkdGg9NTEyIiB9ICovCisKKyNpbmNsdWRlICJwcjg5MjI5LTZhLmMi CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3QgIiV6bW1c WzAtOVxdKyIgfSB9ICovCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvaTM4Ni9wcjg5MjI5LTdhLmMgYi9nY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvaTM4Ni9wcjg5MjI5LTdhLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLmZjYjg1YzM2NmI2Ci0tLSAvZGV2L251 bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4OTIy OS03YS5jCkBAIC0wLDAgKzEsMTYgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB7 IHRhcmdldCB7ICEgaWEzMiB9IH0gfSAqLworLyogeyBkZy1vcHRpb25zICIt TzIgLW1hcmNoPXNreWxha2UtYXZ4NTEyIiB9ICovCisKK2V4dGVybiBfX2Zs b2F0MTI4IGQ7CisKK3ZvaWQKK2ZvbzEgKF9fZmxvYXQxMjggeCkKK3sKKyAg cmVnaXN0ZXIgX19mbG9hdDEyOCB4bW0xNiBfX2FzbSAoInhtbTE2IikgPSB4 OworICBhc20gdm9sYXRpbGUgKCIiIDogIit2IiAoeG1tMTYpKTsKKyAgcmVn aXN0ZXIgX19mbG9hdDEyOCB4bW0xNyBfX2FzbSAoInhtbTE3IikgPSB4bW0x NjsKKyAgYXNtIHZvbGF0aWxlICgiIiA6ICIrdiIgKHhtbTE3KSk7CisgIGQg PSB4bW0xNzsKK30KKworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy LW5vdCAiJXptbVxbMC05XF0rIiB9IH0gKi8KZGlmZiAtLWdpdCBhL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODkyMjktN2IuYyBiL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9pMzg2L3ByODkyMjktN2IuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzdlYjgzYzc4M2IK LS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv aTM4Ni9wcjg5MjI5LTdiLmMKQEAgLTAsMCArMSwxMiBAQAorLyogeyBkZy1k byBjb21waWxlIHsgdGFyZ2V0IHsgISBpYTMyIH0gfSB9ICovCisvKiB7IGRn LW9wdGlvbnMgIi1PMiAtbWFyY2g9c2t5bGFrZS1hdng1MTIgLW1uby1hdng1 MTJ2bCIgfSAqLworCitleHRlcm4gX19mbG9hdDEyOCBkOworCit2b2lkCitm b28xIChfX2Zsb2F0MTI4IHgpCit7CisgIHJlZ2lzdGVyIF9fZmxvYXQxMjgg eG1tMTYgX19hc20gKCJ4bW0xNiIpID0geDsgLyogeyBkZy1lcnJvciAicmVn aXN0ZXIgc3BlY2lmaWVkIGZvciAneG1tMTYnIiB9ICovCisgIGFzbSB2b2xh dGlsZSAoIiIgOiAiK3YiICh4bW0xNikpOworICBkID0geG1tMTY7Cit9CmRp ZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg5 MjI5LTdjLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvaTM4Ni9wcjg5 MjI5LTdjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLmUzN2ZmMmJmNWJkCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L2kzODYvcHI4OTIyOS03Yy5jCkBAIC0wLDAgKzEs NiBAQAorLyogeyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0IHsgISBpYTMyIH0g fSB9ICovCisvKiB7IGRnLW9wdGlvbnMgIi1PMiAtbWFyY2g9c2t5bGFrZS1h dng1MTIgLW1wcmVmZXItdmVjdG9yLXdpZHRoPTUxMiIgfSAqLworCisjaW5j bHVkZSAicHI4OTIyOS03YS5jIgorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXItbm90ICIlem1tXFswLTlcXSsiIH0gfSAqLwotLSAKMi4yNC4x Cgo= --00000000000026f567059d23b6c0--