From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by sourceware.org (Postfix) with ESMTP id 08AC33857C67 for ; Wed, 20 Oct 2021 10:02:07 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 08AC33857C67 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id B13EEED1; Wed, 20 Oct 2021 03:02:06 -0700 (PDT) Received: from [10.1.26.148] (E121495.Arm.com [10.1.26.148]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id C3ECD3F70D; Wed, 20 Oct 2021 03:02:05 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------hVkmO75U0CtQG8QJgGLRrUk2" Message-ID: <03af9742-ab9e-4885-2782-fb42f61d69ab@arm.com> Date: Wed, 20 Oct 2021 11:01:59 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.2.0 Subject: Re: [Patch][GCC][middle-end] - Lower store and load neon builtins to gimple Content-Language: en-US To: Richard Biener , Jirui Wu Cc: Richard Sandiford , "ian@airs.com" , "gcc-patches@gcc.gnu.org" References: From: "Andre Vieira (lists)" In-Reply-To: X-Spam-Status: No, score=-13.9 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, KAM_LOTSOFHASH, KAM_SHORT, NICE_REPLY_A, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) 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, 20 Oct 2021 10:02:12 -0000 This is a multi-part message in MIME format. --------------hVkmO75U0CtQG8QJgGLRrUk2 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 27/09/2021 12:54, Richard Biener via Gcc-patches wrote: > On Mon, 27 Sep 2021, Jirui Wu wrote: > >> Hi all, >> >> I now use the type based on the specification of the intrinsic >> instead of type based on formal argument. >> >> I use signed Int vector types because the outputs of the neon builtins >> that I am lowering is always signed. In addition, fcode and stmt >> does not have information on whether the result is signed. >> >> Because I am replacing the stmt with new_stmt, >> a VIEW_CONVERT_EXPR cast is already in the code if needed. >> As a result, the result assembly code is correct. >> >> Bootstrapped Regtested on aarch64-none-linux-gnu and no issues. >> >> Ok for master? If OK can it be committed for me, I have no commit rights. > + tree temp_lhs = gimple_call_lhs (stmt); > + aarch64_simd_type_info simd_type > + = aarch64_simd_types[mem_type]; > + tree elt_ptr_type = build_pointer_type (simd_type.eltype); > + tree zero = build_zero_cst (elt_ptr_type); > + gimple_seq stmts = NULL; > + tree base = gimple_convert (&stmts, elt_ptr_type, > + args[0]); > + new_stmt = gimple_build_assign (temp_lhs, > + fold_build2 (MEM_REF, > + TREE_TYPE (temp_lhs), > + base, > + zero)); > > this now uses the alignment info as on the LHS of the call by using > TREE_TYPE (temp_lhs) as type of the MEM_REF. So for example > > typedef int foo __attribute__((vector_size(N),aligned(256))); > > foo tem = ld1 (ptr); > > will now access *ptr as if it were aligned to 256 bytes. But I'm sure > the ld1 intrinsic documents the required alignment (either it's the > natural alignment of the vector type loaded or element alignment?). > > For element alignment you'd do sth like > > tree access_type = build_aligned_type (vector_type, TYPE_ALIGN > (TREE_TYPE (vector_type))); > > for example. > > Richard. Hi, I'm taking over this patch from Jirui. I've decided to use the vector type stored in aarch64_simd_type_info, since that should always have the correct alignment. To be fair though, I do wonder whether this is actually needed as is right now, since the way we cast the inputs and outputs of these __builtins in arm_neon.h prevents these issues I think, but it is more future proof. Also you could argue people could use the __builtins directly, though I'd think that would be at their own risk. Is this OK? Kind regards, Andre --------------hVkmO75U0CtQG8QJgGLRrUk2 Content-Type: text/plain; charset=UTF-8; name="neon_builtins_gimple.patch" Content-Disposition: attachment; filename="neon_builtins_gimple.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0LWJ1aWx0aW5zLmMgYi9n Y2MvY29uZmlnL2FhcmNoNjQvYWFyY2g2NC1idWlsdGlucy5jCmluZGV4IDFhNTA3ZWE1OTE0 MmQwYjU5NzdiMDE2N2FiZmU5YTU4YTU2N2FkZjcuLmE4MTVlNGNmYmNjYWI2OTJjYTY4OGJh ODdjNzFiMDZjMzA0YWJiZmIgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJj aDY0LWJ1aWx0aW5zLmMKKysrIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtYnVpbHRp bnMuYwpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgImVtaXQtcnRsLmgiCiAjaW5jbHVk ZSAic3RyaW5ncG9vbC5oIgogI2luY2x1ZGUgImF0dHJpYnMuaCIKKyNpbmNsdWRlICJnaW1w bGUtZm9sZC5oIgogCiAjZGVmaW5lIHY4cWlfVVAgIEVfVjhRSW1vZGUKICNkZWZpbmUgdjRo aV9VUCAgRV9WNEhJbW9kZQpAQCAtMjM5OSwxMSArMjQwMCw2NSBAQCBhYXJjaDY0X2dlbmVy YWxfZm9sZF9idWlsdGluICh1bnNpZ25lZCBpbnQgZmNvZGUsIHRyZWUgdHlwZSwKICAgcmV0 dXJuIE5VTExfVFJFRTsKIH0KIAorZW51bSBhYXJjaDY0X3NpbWRfdHlwZQorZ2V0X21lbV90 eXBlX2Zvcl9sb2FkX3N0b3JlICh1bnNpZ25lZCBpbnQgZmNvZGUpCit7CisgIHN3aXRjaCAo ZmNvZGUpCisgIHsKKyAgICBWQVIxIChMT0FEMSwgbGQxICwgMCwgTE9BRCwgdjhxaSkKKyAg ICBWQVIxIChTVE9SRTEsIHN0MSAsIDAsIFNUT1JFLCB2OHFpKQorICAgICAgcmV0dXJuIElu dDh4OF90OworICAgIFZBUjEgKExPQUQxLCBsZDEgLCAwLCBMT0FELCB2MTZxaSkKKyAgICBW QVIxIChTVE9SRTEsIHN0MSAsIDAsIFNUT1JFLCB2MTZxaSkKKyAgICAgIHJldHVybiBJbnQ4 eDE2X3Q7CisgICAgVkFSMSAoTE9BRDEsIGxkMSAsIDAsIExPQUQsIHY0aGkpCisgICAgVkFS MSAoU1RPUkUxLCBzdDEgLCAwLCBTVE9SRSwgdjRoaSkKKyAgICAgIHJldHVybiBJbnQxNng0 X3Q7CisgICAgVkFSMSAoTE9BRDEsIGxkMSAsIDAsIExPQUQsIHY4aGkpCisgICAgVkFSMSAo U1RPUkUxLCBzdDEgLCAwLCBTVE9SRSwgdjhoaSkKKyAgICAgIHJldHVybiBJbnQxNng4X3Q7 CisgICAgVkFSMSAoTE9BRDEsIGxkMSAsIDAsIExPQUQsIHYyc2kpCisgICAgVkFSMSAoU1RP UkUxLCBzdDEgLCAwLCBTVE9SRSwgdjJzaSkKKyAgICAgIHJldHVybiBJbnQzMngyX3Q7Cisg ICAgVkFSMSAoTE9BRDEsIGxkMSAsIDAsIExPQUQsIHY0c2kpCisgICAgVkFSMSAoU1RPUkUx LCBzdDEgLCAwLCBTVE9SRSwgdjRzaSkKKyAgICAgIHJldHVybiBJbnQzMng0X3Q7CisgICAg VkFSMSAoTE9BRDEsIGxkMSAsIDAsIExPQUQsIHYyZGkpCisgICAgVkFSMSAoU1RPUkUxLCBz dDEgLCAwLCBTVE9SRSwgdjJkaSkKKyAgICAgIHJldHVybiBJbnQ2NHgyX3Q7CisgICAgVkFS MSAoTE9BRDEsIGxkMSAsIDAsIExPQUQsIHY0aGYpCisgICAgVkFSMSAoU1RPUkUxLCBzdDEg LCAwLCBTVE9SRSwgdjRoZikKKyAgICAgIHJldHVybiBGbG9hdDE2eDRfdDsKKyAgICBWQVIx IChMT0FEMSwgbGQxICwgMCwgTE9BRCwgdjhoZikKKyAgICBWQVIxIChTVE9SRTEsIHN0MSAs IDAsIFNUT1JFLCB2OGhmKQorICAgICAgcmV0dXJuIEZsb2F0MTZ4OF90OworICAgIFZBUjEg KExPQUQxLCBsZDEgLCAwLCBMT0FELCB2NGJmKQorICAgIFZBUjEgKFNUT1JFMSwgc3QxICwg MCwgU1RPUkUsIHY0YmYpCisgICAgICByZXR1cm4gQmZsb2F0MTZ4NF90OworICAgIFZBUjEg KExPQUQxLCBsZDEgLCAwLCBMT0FELCB2OGJmKQorICAgIFZBUjEgKFNUT1JFMSwgc3QxICwg MCwgU1RPUkUsIHY4YmYpCisgICAgICByZXR1cm4gQmZsb2F0MTZ4OF90OworICAgIFZBUjEg KExPQUQxLCBsZDEgLCAwLCBMT0FELCB2MnNmKQorICAgIFZBUjEgKFNUT1JFMSwgc3QxICwg MCwgU1RPUkUsIHYyc2YpCisgICAgICByZXR1cm4gRmxvYXQzMngyX3Q7CisgICAgVkFSMSAo TE9BRDEsIGxkMSAsIDAsIExPQUQsIHY0c2YpCisgICAgVkFSMSAoU1RPUkUxLCBzdDEgLCAw LCBTVE9SRSwgdjRzZikKKyAgICAgIHJldHVybiBGbG9hdDMyeDRfdDsKKyAgICBWQVIxIChM T0FEMSwgbGQxICwgMCwgTE9BRCwgdjJkZikKKyAgICBWQVIxIChTVE9SRTEsIHN0MSAsIDAs IFNUT1JFLCB2MmRmKQorICAgICAgcmV0dXJuIEZsb2F0NjR4Ml90OworICAgIGRlZmF1bHQ6 CisgICAgICBnY2NfdW5yZWFjaGFibGUgKCk7CisgICAgICBicmVhazsKKyAgfQorfQorCiAv KiBUcnkgdG8gZm9sZCBTVE1ULCBnaXZlbiB0aGF0IGl0J3MgYSBjYWxsIHRvIHRoZSBidWls dC1pbiBmdW5jdGlvbiB3aXRoCiAgICBzdWJjb2RlIEZDT0RFLiAgUmV0dXJuIHRoZSBuZXcg c3RhdGVtZW50IG9uIHN1Y2Nlc3MgYW5kIG51bGwgb24KICAgIGZhaWx1cmUuICAqLwogZ2lt cGxlICoKLWFhcmNoNjRfZ2VuZXJhbF9naW1wbGVfZm9sZF9idWlsdGluICh1bnNpZ25lZCBp bnQgZmNvZGUsIGdjYWxsICpzdG10KQorYWFyY2g2NF9nZW5lcmFsX2dpbXBsZV9mb2xkX2J1 aWx0aW4gKHVuc2lnbmVkIGludCBmY29kZSwgZ2NhbGwgKnN0bXQsCisJCQkJICAgICBnaW1w bGVfc3RtdF9pdGVyYXRvciAqZ3NpKQogewogICBnaW1wbGUgKm5ld19zdG10ID0gTlVMTDsK ICAgdW5zaWduZWQgbmFyZ3MgPSBnaW1wbGVfY2FsbF9udW1fYXJncyAoc3RtdCk7CkBAIC0y NDIxLDYgKzI0NzYsNTIgQEAgYWFyY2g2NF9nZW5lcmFsX2dpbXBsZV9mb2xkX2J1aWx0aW4g KHVuc2lnbmVkIGludCBmY29kZSwgZ2NhbGwgKnN0bXQpCiAJCQkJCSAgICAgICAxLCBhcmdz WzBdKTsKIAlnaW1wbGVfY2FsbF9zZXRfbGhzIChuZXdfc3RtdCwgZ2ltcGxlX2NhbGxfbGhz IChzdG10KSk7CiAJYnJlYWs7CisKKyAgICAgLypsb3dlciBzdG9yZSBhbmQgbG9hZCBuZW9u IGJ1aWx0aW5zIHRvIGdpbXBsZS4gICovCisgICAgIEJVSUxUSU5fVkFMTF9GMTYgKExPQUQx LCBsZDEsIDAsIExPQUQpCisJaWYgKCFCWVRFU19CSUdfRU5ESUFOKQorCSAgeworCSAgICBl bnVtIGFhcmNoNjRfc2ltZF90eXBlIG1lbV90eXBlCisJICAgICAgPSBnZXRfbWVtX3R5cGVf Zm9yX2xvYWRfc3RvcmUoZmNvZGUpOworCSAgICBhYXJjaDY0X3NpbWRfdHlwZV9pbmZvIHNp bWRfdHlwZQorCSAgICAgID0gYWFyY2g2NF9zaW1kX3R5cGVzW21lbV90eXBlXTsKKwkgICAg dHJlZSBlbHRfcHRyX3R5cGUgPSBidWlsZF9wb2ludGVyX3R5cGUgKHNpbWRfdHlwZS5lbHR5 cGUpOworCSAgICB0cmVlIHplcm8gPSBidWlsZF96ZXJvX2NzdCAoZWx0X3B0cl90eXBlKTsK KwkgICAgZ2ltcGxlX3NlcSBzdG10cyA9IE5VTEw7CisJICAgIHRyZWUgYmFzZSA9IGdpbXBs ZV9jb252ZXJ0ICgmc3RtdHMsIGVsdF9wdHJfdHlwZSwKKwkJCQkJYXJnc1swXSk7CisJICAg IGlmIChzdG10cykKKwkgICAgICBnc2lfaW5zZXJ0X3NlcV9iZWZvcmUgKGdzaSwgc3RtdHMs IEdTSV9TQU1FX1NUTVQpOworCSAgICBuZXdfc3RtdAorCSAgICAgID0gZ2ltcGxlX2J1aWxk X2Fzc2lnbiAoZ2ltcGxlX2dldF9saHMgKHN0bXQpLAorCQkJCSAgICAgZm9sZF9idWlsZDIg KE1FTV9SRUYsCisJCQkJCQkgIHNpbWRfdHlwZS5pdHlwZSwKKwkJCQkJCSAgYmFzZSwgemVy bykpOworCSAgfQorCWJyZWFrOworCisgICAgICBCVUlMVElOX1ZBTExfRjE2IChTVE9SRTEs IHN0MSwgMCwgU1RPUkUpCisJaWYgKCFCWVRFU19CSUdfRU5ESUFOKQorCSAgeworCSAgICBl bnVtIGFhcmNoNjRfc2ltZF90eXBlIG1lbV90eXBlCisJICAgICAgPSBnZXRfbWVtX3R5cGVf Zm9yX2xvYWRfc3RvcmUoZmNvZGUpOworCSAgICBhYXJjaDY0X3NpbWRfdHlwZV9pbmZvIHNp bWRfdHlwZQorCSAgICAgID0gYWFyY2g2NF9zaW1kX3R5cGVzW21lbV90eXBlXTsKKwkgICAg dHJlZSBlbHRfcHRyX3R5cGUgPSBidWlsZF9wb2ludGVyX3R5cGUgKHNpbWRfdHlwZS5lbHR5 cGUpOworCSAgICB0cmVlIHplcm8gPSBidWlsZF96ZXJvX2NzdCAoZWx0X3B0cl90eXBlKTsK KwkgICAgZ2ltcGxlX3NlcSBzdG10cyA9IE5VTEw7CisJICAgIHRyZWUgYmFzZSA9IGdpbXBs ZV9jb252ZXJ0ICgmc3RtdHMsIGVsdF9wdHJfdHlwZSwKKwkJCQkJYXJnc1swXSk7CisJICAg IGlmIChzdG10cykKKwkgICAgICBnc2lfaW5zZXJ0X3NlcV9iZWZvcmUgKGdzaSwgc3RtdHMs IEdTSV9TQU1FX1NUTVQpOworCSAgICBuZXdfc3RtdAorCSAgICAgID0gZ2ltcGxlX2J1aWxk X2Fzc2lnbiAoZm9sZF9idWlsZDIgKE1FTV9SRUYsCisJCQkJICAgICBzaW1kX3R5cGUuaXR5 cGUsCisJCQkJICAgICBiYXNlLAorCQkJCSAgICAgemVybyksIGFyZ3NbMV0pOworCSAgfQor CWJyZWFrOworCiAgICAgICBCVUlMVElOX1ZEUUlGIChVTk9QLCByZWR1Y19zbWF4X3NjYWxf LCAxMCwgQUxMKQogICAgICAgQlVJTFRJTl9WRFFfQkhTSSAoVU5PUFUsIHJlZHVjX3VtYXhf c2NhbF8sIDEwLCBBTEwpCiAJbmV3X3N0bXQgPSBnaW1wbGVfYnVpbGRfY2FsbF9pbnRlcm5h bCAoSUZOX1JFRFVDX01BWCwKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvYWFyY2g2NC9hYXJj aDY0LXByb3Rvcy5oIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQtcHJvdG9zLmgKaW5k ZXggYjkxZWVlYmExMDEyZWY4MzBmOGJiMzUzNWM3YzgxYzI5YWZjY2MxNy4uNzY4ZThmYWUx MzZkYWE4NjZmZTU4OWQ3MmYzMDUxNGUxMjI5MTgwZiAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZp Zy9hYXJjaDY0L2FhcmNoNjQtcHJvdG9zLmgKKysrIGIvZ2NjL2NvbmZpZy9hYXJjaDY0L2Fh cmNoNjQtcHJvdG9zLmgKQEAgLTk2Miw3ICs5NjIsOCBAQCB2b2lkIGFhcmNoNjRfb3ZlcnJp ZGVfb3B0aW9uc19pbnRlcm5hbCAoc3RydWN0IGdjY19vcHRpb25zICopOwogY29uc3QgY2hh ciAqYWFyY2g2NF9nZW5lcmFsX21hbmdsZV9idWlsdGluX3R5cGUgKGNvbnN0X3RyZWUpOwog dm9pZCBhYXJjaDY0X2dlbmVyYWxfaW5pdF9idWlsdGlucyAodm9pZCk7CiB0cmVlIGFhcmNo NjRfZ2VuZXJhbF9mb2xkX2J1aWx0aW4gKHVuc2lnbmVkIGludCwgdHJlZSwgdW5zaWduZWQg aW50LCB0cmVlICopOwotZ2ltcGxlICphYXJjaDY0X2dlbmVyYWxfZ2ltcGxlX2ZvbGRfYnVp bHRpbiAodW5zaWduZWQgaW50LCBnY2FsbCAqKTsKK2dpbXBsZSAqYWFyY2g2NF9nZW5lcmFs X2dpbXBsZV9mb2xkX2J1aWx0aW4gKHVuc2lnbmVkIGludCwgZ2NhbGwgKiwKKwkJCQkJICAg ICBnaW1wbGVfc3RtdF9pdGVyYXRvciAqKTsKIHJ0eCBhYXJjaDY0X2dlbmVyYWxfZXhwYW5k X2J1aWx0aW4gKHVuc2lnbmVkIGludCwgdHJlZSwgcnR4LCBpbnQpOwogdHJlZSBhYXJjaDY0 X2dlbmVyYWxfYnVpbHRpbl9kZWNsICh1bnNpZ25lZCwgYm9vbCk7CiB0cmVlIGFhcmNoNjRf Z2VuZXJhbF9idWlsdGluX3JzcXJ0ICh1bnNpZ25lZCBpbnQpOwpkaWZmIC0tZ2l0IGEvZ2Nj L2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQuYyBiL2djYy9jb25maWcvYWFyY2g2NC9hYXJjaDY0 LmMKaW5kZXggNzZkOTlkMjQ3YWU0NjAxOTgzNjZhNDM4MGIxN2YwODgwZmVjODE3OS4uMjFm NWE1NmI0ZTUwMWMxZDVmZGI4MTZmYzljYzkyNTM3OWFiZTlkZCAxMDA2NDQKLS0tIGEvZ2Nj L2NvbmZpZy9hYXJjaDY0L2FhcmNoNjQuYworKysgYi9nY2MvY29uZmlnL2FhcmNoNjQvYWFy Y2g2NC5jCkBAIC0xNDE1Niw3ICsxNDE1Niw3IEBAIGFhcmNoNjRfZ2ltcGxlX2ZvbGRfYnVp bHRpbiAoZ2ltcGxlX3N0bXRfaXRlcmF0b3IgKmdzaSkKICAgc3dpdGNoIChjb2RlICYgQUFS Q0g2NF9CVUlMVElOX0NMQVNTKQogICAgIHsKICAgICBjYXNlIEFBUkNINjRfQlVJTFRJTl9H RU5FUkFMOgotICAgICAgbmV3X3N0bXQgPSBhYXJjaDY0X2dlbmVyYWxfZ2ltcGxlX2ZvbGRf YnVpbHRpbiAoc3ViY29kZSwgc3RtdCk7CisgICAgICBuZXdfc3RtdCA9IGFhcmNoNjRfZ2Vu ZXJhbF9naW1wbGVfZm9sZF9idWlsdGluIChzdWJjb2RlLCBzdG10LCBnc2kpOwogICAgICAg YnJlYWs7CiAKICAgICBjYXNlIEFBUkNINjRfQlVJTFRJTl9TVkU6CmRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9mbWxhX2ludHJpbnNpY18xLmMgYi9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9mbWxhX2ludHJpbnNpY18xLmMKaW5k ZXggNTlhZDQxZWQwNDcxYjE3NDE4YzM5NWYzMWZiZTY2NmI2MGVjMzYyMy4uYWRiNzg3YTg1 OTlhZjIzODQ3ZGQ2MmRjZDE1M2Q3Y2ZlNDNkYWNjMCAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvZm1sYV9pbnRyaW5zaWNfMS5jCisrKyBiL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2ZtbGFfaW50cmluc2ljXzEuYwpAQCAtMTEs NiArMTEsNyBAQCBleHRlcm4gdm9pZCBhYm9ydCAodm9pZCk7CiAKICNkZWZpbmUgVEVTVF9W TUxBKHExLCBxMiwgc2l6ZSwgaW4xX2xhbmVzLCBpbjJfbGFuZXMpCQkJXAogc3RhdGljIHZv aWQJCQkJCQkJCVwKK19fYXR0cmlidXRlX18oKG5vaXBhLG5vaW5saW5lKSkJCQkJCQlcCiB0 ZXN0X3ZmbWEjI3ExIyNfbGFuZSMjcTIjI19mIyNzaXplIChmbG9hdCMjc2l6ZSMjX3QgKiBy ZXMsCQlcCiAJCQkJICAgY29uc3QgZmxvYXQjI3NpemUjI190ICppbjEsCQlcCiAJCQkJICAg Y29uc3QgZmxvYXQjI3NpemUjI190ICppbjIpCQlcCkBAIC0xMDQsMTIgKzEwNSwxMiBAQCBt YWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICB2Zm1hcV9sYW5lcV9mMzIuICAqLwog LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJmbWxhXFx0dlxbMC05XF0r XC40cywgdlxbMC05XF0rXC40cywgdlxbMC05XF0rXC5zXFxcW1xbMC05XF0rXFxcXSIgMiB9 IH0gKi8KIAotLyogdmZtYV9sYW5lX2Y2NC4gICovCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXItdGltZXMgImZtYWRkXFx0ZFxbMC05XF0rXCwgZFxbMC05XF0rXCwgZFxbMC05 XF0rXCwgZFxbMC05XF0rIiAxIH0gfSAqLworLyogdmZtYV9sYW5lX2Y2NC4KKyAgIHZmbWFf bGFuZXFfZjY0LiAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJm bWFkZFxcdGRcWzAtOVxdK1wsIGRcWzAtOVxdK1wsIGRcWzAtOVxdK1wsIGRcWzAtOVxdKyIg MiB9IH0gKi8KIAogLyogdmZtYXFfbGFuZV9mNjQuCi0gICB2Zm1hX2xhbmVxX2Y2NC4KICAg IHZmbWFxX2xhbmVxX2Y2NC4gICovCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIt dGltZXMgImZtbGFcXHR2XFswLTlcXStcLjJkLCB2XFswLTlcXStcLjJkLCB2XFswLTlcXStc LmRcXFxbXFswLTlcXStcXFxdIiAzIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNz ZW1ibGVyLXRpbWVzICJmbWxhXFx0dlxbMC05XF0rXC4yZCwgdlxbMC05XF0rXC4yZCwgdlxb MC05XF0rXC5kXFxcW1xbMC05XF0rXFxcXSIgMiB9IH0gKi8KIAogCmRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9mbWxzX2ludHJpbnNpY18xLmMgYi9n Y2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9mbWxzX2ludHJpbnNpY18xLmMKaW5k ZXggMmQ1YTNkMzA1MzYwYTA4YTk2NjNjZmQ0OTdjYjFhNTM3NGI0YjMyNy4uODY1ZGVmMjhj M2Y0ZDA0MDQyYWI0OTVkMjMyYmI4NjVjYWJiMmI1MCAxMDA2NDQKLS0tIGEvZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvZm1sc19pbnRyaW5zaWNfMS5jCisrKyBiL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2ZtbHNfaW50cmluc2ljXzEuYwpAQCAtMTEs NiArMTEsNyBAQCBleHRlcm4gdm9pZCBhYm9ydCAodm9pZCk7CiAKICNkZWZpbmUgVEVTVF9W TUxTKHExLCBxMiwgc2l6ZSwgaW4xX2xhbmVzLCBpbjJfbGFuZXMpCQkJXAogc3RhdGljIHZv aWQJCQkJCQkJCVwKK19fYXR0cmlidXRlX18oKG5vaXBhLG5vaW5saW5lKSkJCQkJCQlcCiB0 ZXN0X3ZmbXMjI3ExIyNfbGFuZSMjcTIjI19mIyNzaXplIChmbG9hdCMjc2l6ZSMjX3QgKiBy ZXMsCQlcCiAJCQkJICAgY29uc3QgZmxvYXQjI3NpemUjI190ICppbjEsCQlcCiAJCQkJICAg Y29uc3QgZmxvYXQjI3NpemUjI190ICppbjIpCQlcCkBAIC0xMDUsMTIgKzEwNiwxMiBAQCBt YWluIChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCiAgICB2Zm1zcV9sYW5lcV9mMzIuICAqLwog LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJmbWxzXFx0dlxbMC05XF0r XC40cywgdlxbMC05XF0rXC40cywgdlxbMC05XF0rXC5zXFxcW1xbMC05XF0rXFxcXSIgMiB9 IH0gKi8KIAotLyogdmZtc19sYW5lX2Y2NC4gICovCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXItdGltZXMgImZtc3ViXFx0ZFxbMC05XF0rXCwgZFxbMC05XF0rXCwgZFxbMC05 XF0rXCwgZFxbMC05XF0rIiAxIH0gfSAqLworLyogdmZtc19sYW5lX2Y2NC4KKyAgIHZmbXNf bGFuZXFfZjY0LiAgKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAi Zm1zdWJcXHRkXFswLTlcXStcLCBkXFswLTlcXStcLCBkXFswLTlcXStcLCBkXFswLTlcXSsi IDIgfSB9ICovCiAKIC8qIHZmbXNxX2xhbmVfZjY0LgotICAgdmZtc19sYW5lcV9mNjQuCiAg ICB2Zm1zcV9sYW5lcV9mNjQuICAqLwotLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy LXRpbWVzICJmbWxzXFx0dlxbMC05XF0rXC4yZCwgdlxbMC05XF0rXC4yZCwgdlxbMC05XF0r XC5kXFxcW1xbMC05XF0rXFxcXSIgMyB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFz c2VtYmxlci10aW1lcyAiZm1sc1xcdHZcWzAtOVxdK1wuMmQsIHZcWzAtOVxdK1wuMmQsIHZc WzAtOVxdK1wuZFxcXFtcWzAtOVxdK1xcXF0iIDIgfSB9ICovCiAKIApkaWZmIC0tZ2l0IGEv Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvZm11bF9pbnRyaW5zaWNfMS5jIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvZm11bF9pbnRyaW5zaWNfMS5jCmlu ZGV4IDhiMDg4MGQ4OWIxMzU5NmRlYTdkYjc5YzE0Y2I3ZDEyNGNmNzA3OWMuLmQwMTA5NWU4 MWMxZTQ1ZGMxZGE5OThhYTMzN2JhNTUxYjM3NTJlYmUgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L2ZtdWxfaW50cmluc2ljXzEuYworKysgYi9nY2Mv dGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9mbXVsX2ludHJpbnNpY18xLmMKQEAgLTks NiArOSw3IEBAIGV4dGVybiBkb3VibGUgZmFicyAoZG91YmxlKTsKIAogI2RlZmluZSBURVNU X1ZNVUwocTEsIHEyLCBzaXplLCBpbjFfbGFuZXMsIGluMl9sYW5lcykJCQlcCiBzdGF0aWMg dm9pZAkJCQkJCQkJXAorX19hdHRyaWJ1dGVfXygobm9pcGEsbm9pbmxpbmUpKQkJCQkJCVwK IHRlc3Rfdm11bCMjcTEjI19sYW5lIyNxMiMjX2YjI3NpemUgKGZsb2F0IyNzaXplIyNfdCAq IHJlcywJCVwKIAkJCQkgICBjb25zdCBmbG9hdCMjc2l6ZSMjX3QgKmluMSwJCVwKIAkJCQkg ICBjb25zdCBmbG9hdCMjc2l6ZSMjX3QgKmluMikJCVwKQEAgLTEwNCwxMiArMTA1LDEyIEBA IG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikKICAgIHZtdWxxX2xhbmVxX2YzMi4gICov CiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgImZtdWxcXHR2XFswLTlc XStcLjRzLCB2XFswLTlcXStcLjRzLCB2XFswLTlcXStcLnNcXFxbXFswLTlcXStcXFxdIiAy IH0gfSAqLwogCi0vKiB2bXVsX2xhbmVfZjY0LiAgKi8KLS8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlci10aW1lcyAiZm11bFxcdGRcWzAtOVxdKywgZFxbMC05XF0rLCBkXFswLTlc XSsiIDEgfSB9ICovCisvKiB2bXVsX2xhbmVfZjY0LgorICAgVm11bF9sYW5lcV9mNjQuICov CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgImZtdWxcXHRkXFswLTlc XSssIGRcWzAtOVxdKywgZFxbMC05XF0rIiAyIH0gfSAqLwogCi0vKiB2bXVsX2xhbmVxX2Y2 NC4KLSAgIHZtdWxxX2xhbmVfZjY0LgorLyogdm11bHFfbGFuZV9mNjQuCiAgICB2bXVscV9s YW5lcV9mNjQuICAqLwotLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJm bXVsXFx0dlxbMC05XF0rXC4yZCwgdlxbMC05XF0rXC4yZCwgdlxbMC05XF0rXC5kXFxcW1xb MC05XF0rXFxcXSIgMyB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10 aW1lcyAiZm11bFxcdHZcWzAtOVxdK1wuMmQsIHZcWzAtOVxdK1wuMmQsIHZcWzAtOVxdK1wu ZFxcXFtcWzAtOVxdK1xcXF0iIDIgfSB9ICovCiAKIApkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvbWxhX2ludHJpbnNpY18xLmMgYi9nY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvYWFyY2g2NC9tbGFfaW50cmluc2ljXzEuYwppbmRleCA0NmIzYzc4 YzEzMWVhOTJlYWUyMDhkMzk5ZWYyNWM3MWNkODQ0NmY3Li44ODViZmIzOWI3OTdlNmQwOTVh YWVjYWZhMDI3MTA5NGMzNGZiZWE1IDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvYWFyY2g2NC9tbGFfaW50cmluc2ljXzEuYworKysgYi9nY2MvdGVzdHN1aXRlL2dj Yy50YXJnZXQvYWFyY2g2NC9tbGFfaW50cmluc2ljXzEuYwpAQCAtMTEsNiArMTEsNyBAQCBl eHRlcm4gdm9pZCBhYm9ydCAodm9pZCk7CiAKICNkZWZpbmUgVEVTVF9WTUxBKHEsIHN1LCBz aXplLCBpbjFfbGFuZXMsIGluMl9sYW5lcykJCVwKIHN0YXRpYyB2b2lkCQkJCQkJCVwKK19f YXR0cmlidXRlX18oKG5vaXBhLG5vaW5saW5lKSkJCQkJCVwKIHRlc3Rfdm1sYXFfbGFuZSMj cSMjXyMjc3UjI3NpemUgKE1BUCMjc3UgKHNpemUsICkgKiByZXMsCVwKIAkJCQkgY29uc3Qg TUFQIyNzdShzaXplLCApICppbjEsCVwKIAkJCQkgY29uc3QgTUFQIyNzdShzaXplLCApICpp bjIpCVwKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L21s c19pbnRyaW5zaWNfMS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvbWxz X2ludHJpbnNpY18xLmMKaW5kZXggZTAxYTRmNmQwZTFlODNjYWMwNDJhMmNhZDRmMDI2NjRi ODdlOGMwNS4uZGYwNDZjZTMyYzAzMmJjZTcwNTU5YTg0MmQ1MjAwMTI2NGVjYmNiYyAxMDA2 NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvbWxzX2ludHJpbnNp Y18xLmMKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvbWxzX2ludHJp bnNpY18xLmMKQEAgLTExLDYgKzExLDcgQEAgZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQpOwog CiAjZGVmaW5lIFRFU1RfVk1MUyhxLCBzdSwgc2l6ZSwgaW4xX2xhbmVzLCBpbjJfbGFuZXMp CQlcCiBzdGF0aWMgdm9pZAkJCQkJCQlcCitfX2F0dHJpYnV0ZV9fKChub2lwYSxub2lubGlu ZSkpCQkJCQlcCiB0ZXN0X3ZtbHNxX2xhbmUjI3EjI18jI3N1IyNzaXplIChNQVAjI3N1IChz aXplLCApICogcmVzLAlcCiAJCQkJIGNvbnN0IE1BUCMjc3Uoc2l6ZSwgKSAqaW4xLAlcCiAJ CQkJIGNvbnN0IE1BUCMjc3Uoc2l6ZSwgKSAqaW4yKQlcCmRpZmYgLS1naXQgYS9nY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9tdWxfaW50cmluc2ljXzEuYyBiL2djYy90ZXN0 c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L211bF9pbnRyaW5zaWNfMS5jCmluZGV4IDAwZWY0 ZjJkZTZjNTUxMDYzOGI3ZTMxOTkwYzA3NTRmNjBkM2U0ZDAuLjUxN2I5MzdmM2UxYjYxMmQ1 YTljM2MyZjY4YTUyOWE2MzFkODQ4ZTAgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9hYXJjaDY0L211bF9pbnRyaW5zaWNfMS5jCisrKyBiL2djYy90ZXN0c3VpdGUv Z2NjLnRhcmdldC9hYXJjaDY0L211bF9pbnRyaW5zaWNfMS5jCkBAIC0xMSw2ICsxMSw3IEBA IGV4dGVybiB2b2lkIGFib3J0ICh2b2lkKTsKIAogI2RlZmluZSBURVNUX1ZNVUwocSwgc3Us IHNpemUsIGluMV9sYW5lcywgaW4yX2xhbmVzKQkJXAogc3RhdGljIHZvaWQJCQkJCQkJXAor X19hdHRyaWJ1dGVfXygobm9pcGEsbm9pbmxpbmUpKQkJCQkJXAogdGVzdF92bXVscV9sYW5l IyNxIyNfIyNzdSMjc2l6ZSAoTUFQIyNzdSAoc2l6ZSwgKSAqIHJlcywJXAogCQkJCSBjb25z dCBNQVAjI3N1KHNpemUsICkgKmluMSwJXAogCQkJCSBjb25zdCBNQVAjI3N1KHNpemUsICkg KmluMikJXApkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQv c2ltZC92bXVsX2VsZW1fMS5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQv c2ltZC92bXVsX2VsZW1fMS5jCmluZGV4IGExZmFlZmQ4OGJhY2FiYWRmNDViZjVhMjJjYTU0 ODFkYjEzYzQxY2IuLmZmYTM5MWFlYWUxZmEwYjUyZWY0YWQ3YWUwNDBhOGJjNDBlMTYwZDIg MTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3NpbWQvdm11 bF9lbGVtXzEuYworKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9zaW1k L3ZtdWxfZWxlbV8xLmMKQEAgLTE0NiwxMiArMTQ2LDE0IEBAIGNoZWNrX3Yyc2YgKGZsb2F0 MzJfdCBlbGVtQSwgZmxvYXQzMl90IGVsZW1CKQogCiAgIHZzdDFfZjMyICh2ZWMzMngyX3Jl cywgdm11bF9uX2YzMiAodmVjMzJ4Ml9zcmMsIGVsZW1BKSk7CiAKKyAgYXNtIHZvbGF0aWxl ICgiIiA6IDogOiAibWVtb3J5Iik7CiAgIGZvciAoaW5keCA9IDA7IGluZHggPCAyOyBpbmR4 KyspCiAgICAgaWYgKCogKHVpbnQzMl90ICopICZ2ZWMzMngyX3Jlc1tpbmR4XSAhPSAqICh1 aW50MzJfdCAqKSAmZXhwZWN0ZWQyXzFbaW5keF0pCiAgICAgICBhYm9ydCAoKTsKIAogICB2 c3QxX2YzMiAodmVjMzJ4Ml9yZXMsIHZtdWxfbl9mMzIgKHZlYzMyeDJfc3JjLCBlbGVtQikp OwogCisgIGFzbSB2b2xhdGlsZSAoIiIgOiA6IDogIm1lbW9yeSIpOwogICBmb3IgKGluZHgg PSAwOyBpbmR4IDwgMjsgaW5keCsrKQogICAgIGlmICgqICh1aW50MzJfdCAqKSAmdmVjMzJ4 Ml9yZXNbaW5keF0gIT0gKiAodWludDMyX3QgKikgJmV4cGVjdGVkMl8yW2luZHhdKQogICAg ICAgYWJvcnQgKCk7CkBAIC0xNjksMjQgKzE3MSwyOCBAQCBjaGVja192NHNmIChmbG9hdDMy X3QgZWxlbUEsIGZsb2F0MzJfdCBlbGVtQiwgZmxvYXQzMl90IGVsZW1DLCBmbG9hdDMyX3Qg ZWxlbUQpCiAKICAgdnN0MXFfZjMyICh2ZWMzMng0X3Jlcywgdm11bHFfbl9mMzIgKHZlYzMy eDRfc3JjLCBlbGVtQSkpOwogCisgIGFzbSB2b2xhdGlsZSAoIiIgOiA6IDogIm1lbW9yeSIp OwogICBmb3IgKGluZHggPSAwOyBpbmR4IDwgNDsgaW5keCsrKQogICAgIGlmICgqICh1aW50 MzJfdCAqKSAmdmVjMzJ4NF9yZXNbaW5keF0gIT0gKiAodWludDMyX3QgKikgJmV4cGVjdGVk NF8xW2luZHhdKQogICAgICAgYWJvcnQgKCk7CiAKICAgdnN0MXFfZjMyICh2ZWMzMng0X3Jl cywgdm11bHFfbl9mMzIgKHZlYzMyeDRfc3JjLCBlbGVtQikpOwogCisgIGFzbSB2b2xhdGls ZSAoIiIgOiA6IDogIm1lbW9yeSIpOwogICBmb3IgKGluZHggPSAwOyBpbmR4IDwgNDsgaW5k eCsrKQogICAgIGlmICgqICh1aW50MzJfdCAqKSAmdmVjMzJ4NF9yZXNbaW5keF0gIT0gKiAo dWludDMyX3QgKikgJmV4cGVjdGVkNF8yW2luZHhdKQogICAgICAgYWJvcnQgKCk7CiAKICAg dnN0MXFfZjMyICh2ZWMzMng0X3Jlcywgdm11bHFfbl9mMzIgKHZlYzMyeDRfc3JjLCBlbGVt QykpOwogCisgIGFzbSB2b2xhdGlsZSAoIiIgOiA6IDogIm1lbW9yeSIpOwogICBmb3IgKGlu ZHggPSAwOyBpbmR4IDwgNDsgaW5keCsrKQogICAgIGlmICgqICh1aW50MzJfdCAqKSAmdmVj MzJ4NF9yZXNbaW5keF0gIT0gKiAodWludDMyX3QgKikgJmV4cGVjdGVkNF8zW2luZHhdKQog ICAgICAgYWJvcnQgKCk7CiAKICAgdnN0MXFfZjMyICh2ZWMzMng0X3Jlcywgdm11bHFfbl9m MzIgKHZlYzMyeDRfc3JjLCBlbGVtRCkpOwogCisgIGFzbSB2b2xhdGlsZSAoIiIgOiA6IDog Im1lbW9yeSIpOwogICBmb3IgKGluZHggPSAwOyBpbmR4IDwgNDsgaW5keCsrKQogICAgIGlm ICgqICh1aW50MzJfdCAqKSAmdmVjMzJ4NF9yZXNbaW5keF0gIT0gKiAodWludDMyX3QgKikg JmV4cGVjdGVkNF80W2luZHhdKQogICAgICAgYWJvcnQgKCk7CkBAIC0yMDQsMTIgKzIxMCwx NCBAQCBjaGVja192MmRmIChmbG9hdDY0X3QgZWxlbWRDLCBmbG9hdDY0X3QgZWxlbWREKQog CiAgIHZzdDFxX2Y2NCAodmVjNjR4Ml9yZXMsIHZtdWxxX25fZjY0ICh2ZWM2NHgyX3NyYywg ZWxlbWRDKSk7CiAKKyAgYXNtIHZvbGF0aWxlICgiIiA6IDogOiAibWVtb3J5Iik7CiAgIGZv ciAoaW5keCA9IDA7IGluZHggPCAyOyBpbmR4KyspCiAgICAgaWYgKCogKHVpbnQ2NF90ICop ICZ2ZWM2NHgyX3Jlc1tpbmR4XSAhPSAqICh1aW50NjRfdCAqKSAmZXhwZWN0ZWRkMl8xW2lu ZHhdKQogICAgICAgYWJvcnQgKCk7CiAKICAgdnN0MXFfZjY0ICh2ZWM2NHgyX3Jlcywgdm11 bHFfbl9mNjQgKHZlYzY0eDJfc3JjLCBlbGVtZEQpKTsKIAorICBhc20gdm9sYXRpbGUgKCIi IDogOiA6ICJtZW1vcnkiKTsKICAgZm9yIChpbmR4ID0gMDsgaW5keCA8IDI7IGluZHgrKykK ICAgICBpZiAoKiAodWludDY0X3QgKikgJnZlYzY0eDJfcmVzW2luZHhdICE9ICogKHVpbnQ2 NF90ICopICZleHBlY3RlZGQyXzJbaW5keF0pCiAgICAgICBhYm9ydCAoKTsKQEAgLTIyNywx MiArMjM1LDE0IEBAIGNoZWNrX3Yyc2kgKGludDMyX3QgZWxlbXNBLCBpbnQzMl90IGVsZW1z QikKIAogICB2c3QxX3MzMiAodmVjczMyeDJfcmVzLCB2bXVsX25fczMyICh2ZWNzMzJ4Ml9z cmMsIGVsZW1zQSkpOwogCisgIGFzbSB2b2xhdGlsZSAoIiIgOiA6IDogIm1lbW9yeSIpOwog ICBmb3IgKGluZHggPSAwOyBpbmR4IDwgMjsgaW5keCsrKQogICAgIGlmICh2ZWNzMzJ4Ml9y ZXNbaW5keF0gIT0gZXhwZWN0ZWRzMl8xW2luZHhdKQogICAgICAgYWJvcnQgKCk7CiAKICAg dnN0MV9zMzIgKHZlY3MzMngyX3Jlcywgdm11bF9uX3MzMiAodmVjczMyeDJfc3JjLCBlbGVt c0IpKTsKIAorICBhc20gdm9sYXRpbGUgKCIiIDogOiA6ICJtZW1vcnkiKTsKICAgZm9yIChp bmR4ID0gMDsgaW5keCA8IDI7IGluZHgrKykKICAgICBpZiAodmVjczMyeDJfcmVzW2luZHhd ICE9IGV4cGVjdGVkczJfMltpbmR4XSkKICAgICAgIGFib3J0ICgpOwpAQCAtMjQ4LDEyICsy NTgsMTQgQEAgY2hlY2tfdjJzaV91bnNpZ25lZCAodWludDMyX3QgZWxlbXVzQSwgdWludDMy X3QgZWxlbXVzQikKIAogICB2c3QxX3UzMiAodmVjdXMzMngyX3Jlcywgdm11bF9uX3UzMiAo dmVjdXMzMngyX3NyYywgZWxlbXVzQSkpOwogCisgIGFzbSB2b2xhdGlsZSAoIiIgOiA6IDog Im1lbW9yeSIpOwogICBmb3IgKGluZHggPSAwOyBpbmR4IDwgMjsgaW5keCsrKQogICAgIGlm ICh2ZWN1czMyeDJfcmVzW2luZHhdICE9IGV4cGVjdGVkdXMyXzFbaW5keF0pCiAgICAgICBh Ym9ydCAoKTsKIAogICB2c3QxX3UzMiAodmVjdXMzMngyX3Jlcywgdm11bF9uX3UzMiAodmVj dXMzMngyX3NyYywgZWxlbXVzQikpOwogCisgIGFzbSB2b2xhdGlsZSAoIiIgOiA6IDogIm1l bW9yeSIpOwogICBmb3IgKGluZHggPSAwOyBpbmR4IDwgMjsgaW5keCsrKQogICAgIGlmICh2 ZWN1czMyeDJfcmVzW2luZHhdICE9IGV4cGVjdGVkdXMyXzJbaW5keF0pCiAgICAgICBhYm9y dCAoKTsKQEAgLTI3MSwyNCArMjgzLDI4IEBAIGNoZWNrX3Y0c2kgKGludDMyX3QgZWxlbXNB LCBpbnQzMl90IGVsZW1zQiwgaW50MzJfdCBlbGVtc0MsIGludDMyX3QgZWxlbXNEKQogCiAg IHZzdDFxX3MzMiAodmVjczMyeDRfcmVzLCB2bXVscV9uX3MzMiAodmVjczMyeDRfc3JjLCBl bGVtc0EpKTsKIAorICBhc20gdm9sYXRpbGUgKCIiIDogOiA6ICJtZW1vcnkiKTsKICAgZm9y IChpbmR4ID0gMDsgaW5keCA8IDQ7IGluZHgrKykKICAgICBpZiAodmVjczMyeDRfcmVzW2lu ZHhdICE9IGV4cGVjdGVkczRfMVtpbmR4XSkKICAgICAgIGFib3J0ICgpOwogCiAgIHZzdDFx X3MzMiAodmVjczMyeDRfcmVzLCB2bXVscV9uX3MzMiAodmVjczMyeDRfc3JjLCBlbGVtc0Ip KTsKIAorICBhc20gdm9sYXRpbGUgKCIiIDogOiA6ICJtZW1vcnkiKTsKICAgZm9yIChpbmR4 ID0gMDsgaW5keCA8IDQ7IGluZHgrKykKICAgICBpZiAodmVjczMyeDRfcmVzW2luZHhdICE9 IGV4cGVjdGVkczRfMltpbmR4XSkKICAgICAgIGFib3J0ICgpOwogCiAgIHZzdDFxX3MzMiAo dmVjczMyeDRfcmVzLCB2bXVscV9uX3MzMiAodmVjczMyeDRfc3JjLCBlbGVtc0MpKTsKIAor ICBhc20gdm9sYXRpbGUgKCIiIDogOiA6ICJtZW1vcnkiKTsKICAgZm9yIChpbmR4ID0gMDsg aW5keCA8IDQ7IGluZHgrKykKICAgICBpZiAodmVjczMyeDRfcmVzW2luZHhdICE9IGV4cGVj dGVkczRfM1tpbmR4XSkKICAgICAgIGFib3J0ICgpOwogCiAgIHZzdDFxX3MzMiAodmVjczMy eDRfcmVzLCB2bXVscV9uX3MzMiAodmVjczMyeDRfc3JjLCBlbGVtc0QpKTsKIAorICBhc20g dm9sYXRpbGUgKCIiIDogOiA6ICJtZW1vcnkiKTsKICAgZm9yIChpbmR4ID0gMDsgaW5keCA8 IDQ7IGluZHgrKykKICAgICBpZiAodmVjczMyeDRfcmVzW2luZHhdICE9IGV4cGVjdGVkczRf NFtpbmR4XSkKICAgICAgIGFib3J0ICgpOwpAQCAtMzA1LDI0ICszMjEsMjggQEAgY2hlY2tf djRzaV91bnNpZ25lZCAodWludDMyX3QgZWxlbXVzQSwgdWludDMyX3QgZWxlbXVzQiwgdWlu dDMyX3QgZWxlbXVzQywKIAogICB2c3QxcV91MzIgKHZlY3VzMzJ4NF9yZXMsIHZtdWxxX25f dTMyICh2ZWN1czMyeDRfc3JjLCBlbGVtdXNBKSk7CiAKKyAgYXNtIHZvbGF0aWxlICgiIiA6 IDogOiAibWVtb3J5Iik7CiAgIGZvciAoaW5keCA9IDA7IGluZHggPCA0OyBpbmR4KyspCiAg ICAgaWYgKHZlY3VzMzJ4NF9yZXNbaW5keF0gIT0gZXhwZWN0ZWR1czRfMVtpbmR4XSkKICAg ICAgIGFib3J0ICgpOwogCiAgIHZzdDFxX3UzMiAodmVjdXMzMng0X3Jlcywgdm11bHFfbl91 MzIgKHZlY3VzMzJ4NF9zcmMsIGVsZW11c0IpKTsKIAorICBhc20gdm9sYXRpbGUgKCIiIDog OiA6ICJtZW1vcnkiKTsKICAgZm9yIChpbmR4ID0gMDsgaW5keCA8IDQ7IGluZHgrKykKICAg ICBpZiAodmVjdXMzMng0X3Jlc1tpbmR4XSAhPSBleHBlY3RlZHVzNF8yW2luZHhdKQogICAg ICAgYWJvcnQgKCk7CiAKICAgdnN0MXFfdTMyICh2ZWN1czMyeDRfcmVzLCB2bXVscV9uX3Uz MiAodmVjdXMzMng0X3NyYywgZWxlbXVzQykpOwogCisgIGFzbSB2b2xhdGlsZSAoIiIgOiA6 IDogIm1lbW9yeSIpOwogICBmb3IgKGluZHggPSAwOyBpbmR4IDwgNDsgaW5keCsrKQogICAg IGlmICh2ZWN1czMyeDRfcmVzW2luZHhdICE9IGV4cGVjdGVkdXM0XzNbaW5keF0pCiAgICAg ICBhYm9ydCAoKTsKIAogICB2c3QxcV91MzIgKHZlY3VzMzJ4NF9yZXMsIHZtdWxxX25fdTMy ICh2ZWN1czMyeDRfc3JjLCBlbGVtdXNEKSk7CiAKKyAgYXNtIHZvbGF0aWxlICgiIiA6IDog OiAibWVtb3J5Iik7CiAgIGZvciAoaW5keCA9IDA7IGluZHggPCA0OyBpbmR4KyspCiAgICAg aWYgKHZlY3VzMzJ4NF9yZXNbaW5keF0gIT0gZXhwZWN0ZWR1czRfNFtpbmR4XSkKICAgICAg IGFib3J0ICgpOwpAQCAtMzQxLDI0ICszNjEsMjggQEAgY2hlY2tfdjRoaSAoaW50MTZfdCBl bGVtaEEsIGludDE2X3QgZWxlbWhCLCBpbnQxNl90IGVsZW1oQywgaW50MTZfdCBlbGVtaEQp CiAKICAgdnN0MV9zMTYgKHZlY2gxNng0X3Jlcywgdm11bF9uX3MxNiAodmVjaDE2eDRfc3Jj LCBlbGVtaEEpKTsKIAorICBhc20gdm9sYXRpbGUgKCIiIDogOiA6ICJtZW1vcnkiKTsKICAg Zm9yIChpbmR4ID0gMDsgaW5keCA8IDQ7IGluZHgrKykKICAgICBpZiAodmVjaDE2eDRfcmVz W2luZHhdICE9IGV4cGVjdGVkaDRfMVtpbmR4XSkKICAgICAgIGFib3J0ICgpOwogCiAgIHZz dDFfczE2ICh2ZWNoMTZ4NF9yZXMsIHZtdWxfbl9zMTYgKHZlY2gxNng0X3NyYywgZWxlbWhC KSk7CiAKKyAgYXNtIHZvbGF0aWxlICgiIiA6IDogOiAibWVtb3J5Iik7CiAgIGZvciAoaW5k eCA9IDA7IGluZHggPCA0OyBpbmR4KyspCiAgICAgaWYgKHZlY2gxNng0X3Jlc1tpbmR4XSAh PSBleHBlY3RlZGg0XzJbaW5keF0pCiAgICAgICBhYm9ydCAoKTsKIAogICB2c3QxX3MxNiAo dmVjaDE2eDRfcmVzLCB2bXVsX25fczE2ICh2ZWNoMTZ4NF9zcmMsIGVsZW1oQykpOwogCisg IGFzbSB2b2xhdGlsZSAoIiIgOiA6IDogIm1lbW9yeSIpOwogICBmb3IgKGluZHggPSAwOyBp bmR4IDwgNDsgaW5keCsrKQogICAgIGlmICh2ZWNoMTZ4NF9yZXNbaW5keF0gIT0gZXhwZWN0 ZWRoNF8zW2luZHhdKQogICAgICAgYWJvcnQgKCk7CiAKICAgdnN0MV9zMTYgKHZlY2gxNng0 X3Jlcywgdm11bF9uX3MxNiAodmVjaDE2eDRfc3JjLCBlbGVtaEQpKTsKIAorICBhc20gdm9s YXRpbGUgKCIiIDogOiA6ICJtZW1vcnkiKTsKICAgZm9yIChpbmR4ID0gMDsgaW5keCA8IDQ7 IGluZHgrKykKICAgICBpZiAodmVjaDE2eDRfcmVzW2luZHhdICE9IGV4cGVjdGVkaDRfNFtp bmR4XSkKICAgICAgIGFib3J0ICgpOwpAQCAtMzc1LDI0ICszOTksMjggQEAgY2hlY2tfdjRo aV91bnNpZ25lZCAodWludDE2X3QgZWxlbXVoQSwgdWludDE2X3QgZWxlbXVoQiwgdWludDE2 X3QgZWxlbXVoQywKIAogICB2c3QxX3UxNiAodmVjdWgxNng0X3Jlcywgdm11bF9uX3UxNiAo dmVjdWgxNng0X3NyYywgZWxlbXVoQSkpOwogCisgIGFzbSB2b2xhdGlsZSAoIiIgOiA6IDog Im1lbW9yeSIpOwogICBmb3IgKGluZHggPSAwOyBpbmR4IDwgNDsgaW5keCsrKQogICAgIGlm ICh2ZWN1aDE2eDRfcmVzW2luZHhdICE9IGV4cGVjdGVkdWg0XzFbaW5keF0pCiAgICAgICBh Ym9ydCAoKTsKIAogICB2c3QxX3UxNiAodmVjdWgxNng0X3Jlcywgdm11bF9uX3UxNiAodmVj dWgxNng0X3NyYywgZWxlbXVoQikpOwogCisgIGFzbSB2b2xhdGlsZSAoIiIgOiA6IDogIm1l bW9yeSIpOwogICBmb3IgKGluZHggPSAwOyBpbmR4IDwgNDsgaW5keCsrKQogICAgIGlmICh2 ZWN1aDE2eDRfcmVzW2luZHhdICE9IGV4cGVjdGVkdWg0XzJbaW5keF0pCiAgICAgICBhYm9y dCAoKTsKIAogICB2c3QxX3UxNiAodmVjdWgxNng0X3Jlcywgdm11bF9uX3UxNiAodmVjdWgx Nng0X3NyYywgZWxlbXVoQykpOwogCisgIGFzbSB2b2xhdGlsZSAoIiIgOiA6IDogIm1lbW9y eSIpOwogICBmb3IgKGluZHggPSAwOyBpbmR4IDwgNDsgaW5keCsrKQogICAgIGlmICh2ZWN1 aDE2eDRfcmVzW2luZHhdICE9IGV4cGVjdGVkdWg0XzNbaW5keF0pCiAgICAgICBhYm9ydCAo KTsKIAogICB2c3QxX3UxNiAodmVjdWgxNng0X3Jlcywgdm11bF9uX3UxNiAodmVjdWgxNng0 X3NyYywgZWxlbXVoRCkpOwogCisgIGFzbSB2b2xhdGlsZSAoIiIgOiA6IDogIm1lbW9yeSIp OwogICBmb3IgKGluZHggPSAwOyBpbmR4IDwgNDsgaW5keCsrKQogICAgIGlmICh2ZWN1aDE2 eDRfcmVzW2luZHhdICE9IGV4cGVjdGVkdWg0XzRbaW5keF0pCiAgICAgICBhYm9ydCAoKTsK QEAgLTQxMSw0OCArNDM5LDU2IEBAIGNoZWNrX3Y4aGkgKGludDE2X3QgZWxlbWhBLCBpbnQx Nl90IGVsZW1oQiwgaW50MTZfdCBlbGVtaEMsIGludDE2X3QgZWxlbWhELAogCiAgIHZzdDFx X3MxNiAodmVjaDE2eDhfcmVzLCB2bXVscV9uX3MxNiAodmVjaDE2eDhfc3JjLCBlbGVtaEEp KTsKIAorICBhc20gdm9sYXRpbGUgKCIiIDogOiA6ICJtZW1vcnkiKTsKICAgZm9yIChpbmR4 ID0gMDsgaW5keCA8IDg7IGluZHgrKykKICAgICBpZiAodmVjaDE2eDhfcmVzW2luZHhdICE9 IGV4cGVjdGVkaDhfMVtpbmR4XSkKICAgICAgIGFib3J0ICgpOwogCiAgIHZzdDFxX3MxNiAo dmVjaDE2eDhfcmVzLCB2bXVscV9uX3MxNiAodmVjaDE2eDhfc3JjLCBlbGVtaEIpKTsKIAor ICBhc20gdm9sYXRpbGUgKCIiIDogOiA6ICJtZW1vcnkiKTsKICAgZm9yIChpbmR4ID0gMDsg aW5keCA8IDg7IGluZHgrKykKICAgICBpZiAodmVjaDE2eDhfcmVzW2luZHhdICE9IGV4cGVj dGVkaDhfMltpbmR4XSkKICAgICAgIGFib3J0ICgpOwogCiAgIHZzdDFxX3MxNiAodmVjaDE2 eDhfcmVzLCB2bXVscV9uX3MxNiAodmVjaDE2eDhfc3JjLCBlbGVtaEMpKTsKIAorICBhc20g dm9sYXRpbGUgKCIiIDogOiA6ICJtZW1vcnkiKTsKICAgZm9yIChpbmR4ID0gMDsgaW5keCA8 IDg7IGluZHgrKykKICAgICBpZiAodmVjaDE2eDhfcmVzW2luZHhdICE9IGV4cGVjdGVkaDhf M1tpbmR4XSkKICAgICAgIGFib3J0ICgpOwogCiAgIHZzdDFxX3MxNiAodmVjaDE2eDhfcmVz LCB2bXVscV9uX3MxNiAodmVjaDE2eDhfc3JjLCBlbGVtaEQpKTsKIAorICBhc20gdm9sYXRp bGUgKCIiIDogOiA6ICJtZW1vcnkiKTsKICAgZm9yIChpbmR4ID0gMDsgaW5keCA8IDg7IGlu ZHgrKykKICAgICBpZiAodmVjaDE2eDhfcmVzW2luZHhdICE9IGV4cGVjdGVkaDhfNFtpbmR4 XSkKICAgICAgIGFib3J0ICgpOwogCiAgIHZzdDFxX3MxNiAodmVjaDE2eDhfcmVzLCB2bXVs cV9uX3MxNiAodmVjaDE2eDhfc3JjLCBlbGVtaEUpKTsKIAorICBhc20gdm9sYXRpbGUgKCIi IDogOiA6ICJtZW1vcnkiKTsKICAgZm9yIChpbmR4ID0gMDsgaW5keCA8IDg7IGluZHgrKykK ICAgICBpZiAodmVjaDE2eDhfcmVzW2luZHhdICE9IGV4cGVjdGVkaDhfNVtpbmR4XSkKICAg ICAgIGFib3J0ICgpOwogCiAgIHZzdDFxX3MxNiAodmVjaDE2eDhfcmVzLCB2bXVscV9uX3Mx NiAodmVjaDE2eDhfc3JjLCBlbGVtaEYpKTsKIAorICBhc20gdm9sYXRpbGUgKCIiIDogOiA6 ICJtZW1vcnkiKTsKICAgZm9yIChpbmR4ID0gMDsgaW5keCA8IDg7IGluZHgrKykKICAgICBp ZiAodmVjaDE2eDhfcmVzW2luZHhdICE9IGV4cGVjdGVkaDhfNltpbmR4XSkKICAgICAgIGFi b3J0ICgpOwogCiAgIHZzdDFxX3MxNiAodmVjaDE2eDhfcmVzLCB2bXVscV9uX3MxNiAodmVj aDE2eDhfc3JjLCBlbGVtaEcpKTsKIAorICBhc20gdm9sYXRpbGUgKCIiIDogOiA6ICJtZW1v cnkiKTsKICAgZm9yIChpbmR4ID0gMDsgaW5keCA8IDg7IGluZHgrKykKICAgICBpZiAodmVj aDE2eDhfcmVzW2luZHhdICE9IGV4cGVjdGVkaDhfN1tpbmR4XSkKICAgICAgIGFib3J0ICgp OwogCiAgIHZzdDFxX3MxNiAodmVjaDE2eDhfcmVzLCB2bXVscV9uX3MxNiAodmVjaDE2eDhf c3JjLCBlbGVtaEgpKTsKIAorICBhc20gdm9sYXRpbGUgKCIiIDogOiA6ICJtZW1vcnkiKTsK ICAgZm9yIChpbmR4ID0gMDsgaW5keCA8IDg7IGluZHgrKykKICAgICBpZiAodmVjaDE2eDhf cmVzW2luZHhdICE9IGV4cGVjdGVkaDhfOFtpbmR4XSkKICAgICAgIGFib3J0ICgpOwpAQCAt NDcwLDQ4ICs1MDYsNTYgQEAgY2hlY2tfdjhoaV91bnNpZ25lZCAodWludDE2X3QgZWxlbXVo QSwgdWludDE2X3QgZWxlbXVoQiwgdWludDE2X3QgZWxlbXVoQywKIAogICB2c3QxcV91MTYg KHZlY3VoMTZ4OF9yZXMsIHZtdWxxX25fdTE2ICh2ZWN1aDE2eDhfc3JjLCBlbGVtdWhBKSk7 CiAKKyAgYXNtIHZvbGF0aWxlICgiIiA6IDogOiAibWVtb3J5Iik7CiAgIGZvciAoaW5keCA9 IDA7IGluZHggPCA4OyBpbmR4KyspCiAgICAgaWYgKHZlY3VoMTZ4OF9yZXNbaW5keF0gIT0g ZXhwZWN0ZWR1aDhfMVtpbmR4XSkKICAgICAgIGFib3J0ICgpOwogCiAgIHZzdDFxX3UxNiAo dmVjdWgxNng4X3Jlcywgdm11bHFfbl91MTYgKHZlY3VoMTZ4OF9zcmMsIGVsZW11aEIpKTsK IAorICBhc20gdm9sYXRpbGUgKCIiIDogOiA6ICJtZW1vcnkiKTsKICAgZm9yIChpbmR4ID0g MDsgaW5keCA8IDg7IGluZHgrKykKICAgICBpZiAodmVjdWgxNng4X3Jlc1tpbmR4XSAhPSBl eHBlY3RlZHVoOF8yW2luZHhdKQogICAgICAgYWJvcnQgKCk7CiAKICAgdnN0MXFfdTE2ICh2 ZWN1aDE2eDhfcmVzLCB2bXVscV9uX3UxNiAodmVjdWgxNng4X3NyYywgZWxlbXVoQykpOwog CisgIGFzbSB2b2xhdGlsZSAoIiIgOiA6IDogIm1lbW9yeSIpOwogICBmb3IgKGluZHggPSAw OyBpbmR4IDwgODsgaW5keCsrKQogICAgIGlmICh2ZWN1aDE2eDhfcmVzW2luZHhdICE9IGV4 cGVjdGVkdWg4XzNbaW5keF0pCiAgICAgICBhYm9ydCAoKTsKIAogICB2c3QxcV91MTYgKHZl Y3VoMTZ4OF9yZXMsIHZtdWxxX25fdTE2ICh2ZWN1aDE2eDhfc3JjLCBlbGVtdWhEKSk7CiAK KyAgYXNtIHZvbGF0aWxlICgiIiA6IDogOiAibWVtb3J5Iik7CiAgIGZvciAoaW5keCA9IDA7 IGluZHggPCA4OyBpbmR4KyspCiAgICAgaWYgKHZlY3VoMTZ4OF9yZXNbaW5keF0gIT0gZXhw ZWN0ZWR1aDhfNFtpbmR4XSkKICAgICAgIGFib3J0ICgpOwogCiAgIHZzdDFxX3UxNiAodmVj dWgxNng4X3Jlcywgdm11bHFfbl91MTYgKHZlY3VoMTZ4OF9zcmMsIGVsZW11aEUpKTsKIAor ICBhc20gdm9sYXRpbGUgKCIiIDogOiA6ICJtZW1vcnkiKTsKICAgZm9yIChpbmR4ID0gMDsg aW5keCA8IDg7IGluZHgrKykKICAgICBpZiAodmVjdWgxNng4X3Jlc1tpbmR4XSAhPSBleHBl Y3RlZHVoOF81W2luZHhdKQogICAgICAgYWJvcnQgKCk7CiAKICAgdnN0MXFfdTE2ICh2ZWN1 aDE2eDhfcmVzLCB2bXVscV9uX3UxNiAodmVjdWgxNng4X3NyYywgZWxlbXVoRikpOwogCisg IGFzbSB2b2xhdGlsZSAoIiIgOiA6IDogIm1lbW9yeSIpOwogICBmb3IgKGluZHggPSAwOyBp bmR4IDwgODsgaW5keCsrKQogICAgIGlmICh2ZWN1aDE2eDhfcmVzW2luZHhdICE9IGV4cGVj dGVkdWg4XzZbaW5keF0pCiAgICAgICBhYm9ydCAoKTsKIAogICB2c3QxcV91MTYgKHZlY3Vo MTZ4OF9yZXMsIHZtdWxxX25fdTE2ICh2ZWN1aDE2eDhfc3JjLCBlbGVtdWhHKSk7CiAKKyAg YXNtIHZvbGF0aWxlICgiIiA6IDogOiAibWVtb3J5Iik7CiAgIGZvciAoaW5keCA9IDA7IGlu ZHggPCA4OyBpbmR4KyspCiAgICAgaWYgKHZlY3VoMTZ4OF9yZXNbaW5keF0gIT0gZXhwZWN0 ZWR1aDhfN1tpbmR4XSkKICAgICAgIGFib3J0ICgpOwogCiAgIHZzdDFxX3UxNiAodmVjdWgx Nng4X3Jlcywgdm11bHFfbl91MTYgKHZlY3VoMTZ4OF9zcmMsIGVsZW11aEgpKTsKIAorICBh c20gdm9sYXRpbGUgKCIiIDogOiA6ICJtZW1vcnkiKTsKICAgZm9yIChpbmR4ID0gMDsgaW5k eCA8IDg7IGluZHgrKykKICAgICBpZiAodmVjdWgxNng4X3Jlc1tpbmR4XSAhPSBleHBlY3Rl ZHVoOF84W2luZHhdKQogICAgICAgYWJvcnQgKCk7CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvYWFyY2g2NC92Y2x6LmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvYWFyY2g2NC92Y2x6LmMKaW5kZXggYTM2ZWU0NGZjMTY1ODg4NmYwNGRmZjE5Yjk0NmI5 MzNmOTY2ODAwOC4uY2E0ZDE3NDI2ZTY0NWMwZjhiYmUzYTRjZGQ5NjI4NDhiNGUxY2JlZCAx MDA2NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvdmNsei5jCisr KyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3ZjbHouYwpAQCAtNjYsMjIg KzY2LDYyIEBAIGV4dGVybiB2b2lkIGFib3J0ICh2b2lkKTsKICNkZWZpbmUgQ0xaX0lOU1Qo cmVnX2xlbiwgZGF0YV9sZW4sIGlzX3NpZ25lZCkgXAogICBDT05DQVQxICh2Y2x6LCBQT1NU RklYIChyZWdfbGVuLCBkYXRhX2xlbiwgaXNfc2lnbmVkKSkKIAotI2RlZmluZSBSVU5fVEVT VCh0ZXN0X3NldCwgYW5zd19zZXQsIHJlZ19sZW4sIGRhdGFfbGVuLCBpc19zaWduZWQsIG4p CVwKLSAgSU5ISUJfT1BUSU1JWkFUSU9OOwkJCQkJCQlcCi0gIGEgPSBMT0FEX0lOU1QgKHJl Z19sZW4sIGRhdGFfbGVuLCBpc19zaWduZWQpICh0ZXN0X3NldCk7CQlcCi0gIGIgPSBMT0FE X0lOU1QgKHJlZ19sZW4sIGRhdGFfbGVuLCBpc19zaWduZWQpIChhbnN3X3NldCk7CSAgICAg ICAgXAotICBhID0gQ0xaX0lOU1QgKHJlZ19sZW4sIGRhdGFfbGVuLCBpc19zaWduZWQpIChh KTsJCQlcCi0gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspCQkJCQkJXAotICAgIGlmIChhIFtp XSAhPSBiIFtpXSkJCQkJCQkJXAotICAgICAgcmV0dXJuIDE7CisjZGVmaW5lIEJVSUxEX1RF U1QodHlwZSwgc2l6ZSwgbGFuZXMpCQkJICAgIFwKK2ludCBfX2F0dHJpYnV0ZV9fKChub2lw YSxub2lubGluZSkpCQkJICAgIFwKK3J1bl90ZXN0IyN0eXBlIyNzaXplIyN4IyNsYW5lcyAo aW50IyNzaXplIyNfdCogdGVzdF9zZXQsICAgIFwKKwkJCQlpbnQjI3NpemUjI190KiBhbnN3 X3NldCwgICAgXAorCQkJCWludCByZWdfbGVuLCBpbnQgZGF0YV9sZW4sICBcCisJCQkJaW50 IG4pCQkJICAgIFwKK3sJCQkJCQkJICAgIFwKKyAgaW50IGk7CQkJCQkJICAgIFwKKyAgSU5I SUJfT1BUSU1JWkFUSU9OOwkJCQkJICAgIFwKKyAgaW50IyNzaXplIyN4IyNsYW5lcyMjX3Qg YSA9IHZsZDEjI3R5cGUjI3NpemUgKHRlc3Rfc2V0KTsgIFwKKyAgaW50IyNzaXplIyN4IyNs YW5lcyMjX3QgYiA9IHZsZDEjI3R5cGUjI3NpemUgKGFuc3dfc2V0KTsgIFwKKyAgYSA9IHZj bHojI3R5cGUjI3NpemUgKGEpOwkJCQkgICAgXAorICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsr KXsJCQkJICAgIFwKKyAgICBpZiAoYSBbaV0gIT0gYiBbaV0pCQkJCQkgICAgXAorICAgICAg cmV0dXJuIDE7CQkJCQkJICAgIFwKKyAgfQkJCQkJCQkgICAgXAorICByZXR1cm4gMDsJCQkJ CQkgICAgXAorfQorCisvKiB1bnNpZ25lZCBpbnB1dHMgICovCisjZGVmaW5lIFVfQlVJTERf VEVTVCh0eXBlLCBzaXplLCBsYW5lcykJCQkgICAgXAoraW50IF9fYXR0cmlidXRlX18oKG5v aXBhLG5vaW5saW5lKSkJCQkgICAgXAorcnVuX3Rlc3QjI3R5cGUjI3NpemUjI3gjI2xhbmVz ICh1aW50IyNzaXplIyNfdCogdGVzdF9zZXQsICAgXAorCQkJCXVpbnQjI3NpemUjI190KiBh bnN3X3NldCwgICBcCisJCQkJaW50IHJlZ19sZW4sIGludCBkYXRhX2xlbiwgIFwKKwkJCQlp bnQgbikJICAgICAgICAgICAgICAgICAgICBcCit7CQkJCQkJCSAgICBcCisgIGludCBpOwkJ CQkJCSAgICBcCisgIElOSElCX09QVElNSVpBVElPTjsJCQkJCSAgICBcCisgIHVpbnQjI3Np emUjI3gjI2xhbmVzIyNfdCBhID0gdmxkMSMjdHlwZSMjc2l6ZSAodGVzdF9zZXQpOyBcCisg IHVpbnQjI3NpemUjI3gjI2xhbmVzIyNfdCBiID0gdmxkMSMjdHlwZSMjc2l6ZSAoYW5zd19z ZXQpOyBcCisgIGEgPSB2Y2x6IyN0eXBlIyNzaXplIChhKTsJCQkJICAgIFwKKyAgZm9yIChp ID0gMDsgaSA8IG47IGkrKyl7CQkJCSAgICBcCisgICAgaWYgKGEgW2ldICE9IGIgW2ldKQkJ CQkJICAgIFwKKyAgICAgIHJldHVybiAxOwkJCQkJCSAgICBcCisgIH0JCQkJCQkJICAgIFwK KyAgcmV0dXJuIDA7CQkJCQkJICAgIFwKK30KKworQlVJTERfVEVTVCAoX3MsIDgsIDgpCitC VUlMRF9URVNUIChfcywgMTYsIDQpCitCVUlMRF9URVNUIChfcywgMzIsIDIpCitCVUlMRF9U RVNUIChxX3MsIDgsIDE2KQorQlVJTERfVEVTVCAocV9zLCAxNiwgOCkKK0JVSUxEX1RFU1Qg KHFfcywgMzIsIDQpCisKK1VfQlVJTERfVEVTVCAoX3UsIDgsIDgpCitVX0JVSUxEX1RFU1Qg KF91LCAxNiwgNCkKK1VfQlVJTERfVEVTVCAoX3UsIDMyLCAyKQorVV9CVUlMRF9URVNUIChx X3UsIDgsIDE2KQorVV9CVUlMRF9URVNUIChxX3UsIDE2LCA4KQorVV9CVUlMRF9URVNUIChx X3UsIDMyLCA0KQogCiBpbnQgX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkKIHRlc3RfdmNs el9zOCAoKQogewotICBpbnQgaTsKLSAgaW50OHg4X3QgYTsKLSAgaW50OHg4X3QgYjsKLQog ICBpbnQ4X3QgdGVzdF9zZXQwWzhdID0gewogICAgIFRFU1QwLCBURVNUMSwgVEVTVDIsIFRF U1QzLAogICAgIFRFU1Q0LCBURVNUNSwgVEVTVDYsIFRFU1Q3CkBAIC05OCwyMiArMTM4LDE4 IEBAIHRlc3RfdmNsel9zOCAoKQogICAgIDAsIDAsIDAsIDAsCiAgICAgMCwgMCwgMCwgMAog ICB9OwotICBSVU5fVEVTVCAodGVzdF9zZXQwLCBhbnN3X3NldDAsIDY0LCA4LCAxLCA4KTsK LSAgUlVOX1RFU1QgKHRlc3Rfc2V0MSwgYW5zd19zZXQxLCA2NCwgOCwgMSwgMSk7CisgIGlu dCBvMSA9IHJ1bl90ZXN0X3M4eDggKHRlc3Rfc2V0MCwgYW5zd19zZXQwLCA2NCwgOCwgOCk7 CisgIGludCBvMiA9IHJ1bl90ZXN0X3M4eDggKHRlc3Rfc2V0MSwgYW5zd19zZXQxLCA2NCwg OCwgMSk7CiAKLSAgcmV0dXJuIDA7CisgIHJldHVybiBvMXx8bzI7CiB9CiAKIC8qIERvdWJs ZSBzY2FuLWFzc2VtYmxlci10aW1lcyB0byB0YWtlIGFjY291bnQgb2YgdW5zaWduZWQgZnVu Y3Rpb25zLiAgKi8KLS8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAiY2x6 XFx0dlxbMC05XF0rXC44YiwgdlxbMC05XF0rXC44YiIgNCB9IH0gKi8KKy8qIHsgZGctZmlu YWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAiY2x6XFx0dlxbMC05XF0rXC44YiwgdlxbMC05 XF0rXC44YiIgMiB9IH0gKi8KIAogaW50IF9fYXR0cmlidXRlX18gKChub2lubGluZSkpCiB0 ZXN0X3ZjbHpfczE2ICgpCiB7Ci0gIGludCBpOwotICBpbnQxNng0X3QgYTsKLSAgaW50MTZ4 NF90IGI7Ci0KICAgaW50MTZfdCB0ZXN0X3NldDBbNF0gPSB7IFRFU1QwLCBURVNUMSwgVEVT VDIsIFRFU1QzIH07CiAgIGludDE2X3QgdGVzdF9zZXQxWzRdID0geyBURVNUNCwgVEVTVDUs IFRFU1Q2LCBURVNUNyB9OwogICBpbnQxNl90IHRlc3Rfc2V0Mls0XSA9IHsgVEVTVDgsIFRF U1Q5LCBURVNUMTAsIFRFU1QxMSB9OwpAQCAtMTI2LDI1ICsxNjIsMjEgQEAgdGVzdF92Y2x6 X3MxNiAoKQogICBpbnQxNl90IGFuc3dfc2V0M1s0XSA9IHsgNCwgMywgMiwgMSB9OwogICBp bnQxNl90IGFuc3dfc2V0NFs0XSA9IHsgMCwgMCwgMCwgMCB9OwogCi0gIFJVTl9URVNUICh0 ZXN0X3NldDAsIGFuc3dfc2V0MCwgNjQsIDE2LCAxLCA0KTsKLSAgUlVOX1RFU1QgKHRlc3Rf c2V0MSwgYW5zd19zZXQxLCA2NCwgMTYsIDEsIDQpOwotICBSVU5fVEVTVCAodGVzdF9zZXQy LCBhbnN3X3NldDIsIDY0LCAxNiwgMSwgNCk7Ci0gIFJVTl9URVNUICh0ZXN0X3NldDMsIGFu c3dfc2V0MywgNjQsIDE2LCAxLCA0KTsKLSAgUlVOX1RFU1QgKHRlc3Rfc2V0NCwgYW5zd19z ZXQ0LCA2NCwgMTYsIDEsIDEpOworICBpbnQgbzEgPSBydW5fdGVzdF9zMTZ4NCAodGVzdF9z ZXQwLCBhbnN3X3NldDAsIDY0LCAxNiwgNCk7CisgIGludCBvMiA9IHJ1bl90ZXN0X3MxNng0 ICh0ZXN0X3NldDEsIGFuc3dfc2V0MSwgNjQsIDE2LCA0KTsKKyAgaW50IG8zID0gcnVuX3Rl c3RfczE2eDQgKHRlc3Rfc2V0MiwgYW5zd19zZXQyLCA2NCwgMTYsIDQpOworICBpbnQgbzQg PSBydW5fdGVzdF9zMTZ4NCAodGVzdF9zZXQzLCBhbnN3X3NldDMsIDY0LCAxNiwgNCk7Cisg IGludCBvNSA9IHJ1bl90ZXN0X3MxNng0ICh0ZXN0X3NldDQsIGFuc3dfc2V0NCwgNjQsIDE2 LCAxKTsKIAotICByZXR1cm4gMDsKKyAgcmV0dXJuIG8xfHxvMnx8bzN8fG80fHxvNTsKIH0K IAogLyogRG91YmxlIHNjYW4tYXNzZW1ibGVyLXRpbWVzIHRvIHRha2UgYWNjb3VudCBvZiB1 bnNpZ25lZCBmdW5jdGlvbnMuICAqLwotLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy LXRpbWVzICJjbHpcXHR2XFswLTlcXStcLjRoLCB2XFswLTlcXStcLjRoIiAxMH0gfSAqLwor LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJjbHpcXHR2XFswLTlcXStc LjRoLCB2XFswLTlcXStcLjRoIiAyfSB9ICovCiAKIGludCBfX2F0dHJpYnV0ZV9fICgobm9p bmxpbmUpKQogdGVzdF92Y2x6X3MzMiAoKQogewotICBpbnQgaTsKLSAgaW50MzJ4Ml90IGE7 Ci0gIGludDMyeDJfdCBiOwotCiAgIGludDMyX3QgdGVzdF9zZXQwWzJdID0geyBURVNUMCwg VEVTVDEgfTsKICAgaW50MzJfdCB0ZXN0X3NldDFbMl0gPSB7IFRFU1QyLCBURVNUMyB9Owog ICBpbnQzMl90IHRlc3Rfc2V0MlsyXSA9IHsgVEVTVDQsIFRFU1Q1IH07CkBAIC0xODEsMzcg KzIxMywzNCBAQCB0ZXN0X3ZjbHpfczMyICgpCiAgIGludDMyX3QgYW5zd19zZXQxNVsyXSA9 IHsgMiwgMSB9OwogICBpbnQzMl90IGFuc3dfc2V0MTZbMl0gPSB7IDAsIDAgfTsKIAotICBS VU5fVEVTVCAodGVzdF9zZXQwLCBhbnN3X3NldDAsIDY0LCAzMiwgMSwgMik7Ci0gIFJVTl9U RVNUICh0ZXN0X3NldDEsIGFuc3dfc2V0MSwgNjQsIDMyLCAxLCAyKTsKLSAgUlVOX1RFU1Qg KHRlc3Rfc2V0MiwgYW5zd19zZXQyLCA2NCwgMzIsIDEsIDIpOwotICBSVU5fVEVTVCAodGVz dF9zZXQzLCBhbnN3X3NldDMsIDY0LCAzMiwgMSwgMik7Ci0gIFJVTl9URVNUICh0ZXN0X3Nl dDQsIGFuc3dfc2V0NCwgNjQsIDMyLCAxLCAyKTsKLSAgUlVOX1RFU1QgKHRlc3Rfc2V0NSwg YW5zd19zZXQ1LCA2NCwgMzIsIDEsIDIpOwotICBSVU5fVEVTVCAodGVzdF9zZXQ2LCBhbnN3 X3NldDYsIDY0LCAzMiwgMSwgMik7Ci0gIFJVTl9URVNUICh0ZXN0X3NldDcsIGFuc3dfc2V0 NywgNjQsIDMyLCAxLCAyKTsKLSAgUlVOX1RFU1QgKHRlc3Rfc2V0OCwgYW5zd19zZXQ4LCA2 NCwgMzIsIDEsIDIpOwotICBSVU5fVEVTVCAodGVzdF9zZXQ5LCBhbnN3X3NldDksIDY0LCAz MiwgMSwgMik7Ci0gIFJVTl9URVNUICh0ZXN0X3NldDEwLCBhbnN3X3NldDEwLCA2NCwgMzIs IDEsIDIpOwotICBSVU5fVEVTVCAodGVzdF9zZXQxMSwgYW5zd19zZXQxMSwgNjQsIDMyLCAx LCAyKTsKLSAgUlVOX1RFU1QgKHRlc3Rfc2V0MTIsIGFuc3dfc2V0MTIsIDY0LCAzMiwgMSwg Mik7Ci0gIFJVTl9URVNUICh0ZXN0X3NldDEzLCBhbnN3X3NldDEzLCA2NCwgMzIsIDEsIDIp OwotICBSVU5fVEVTVCAodGVzdF9zZXQxNCwgYW5zd19zZXQxNCwgNjQsIDMyLCAxLCAyKTsK LSAgUlVOX1RFU1QgKHRlc3Rfc2V0MTUsIGFuc3dfc2V0MTUsIDY0LCAzMiwgMSwgMik7Ci0g IFJVTl9URVNUICh0ZXN0X3NldDE2LCBhbnN3X3NldDE2LCA2NCwgMzIsIDEsIDEpOwotCi0g IHJldHVybiAwOworICBpbnQgbzEgPSBydW5fdGVzdF9zMzJ4MiAodGVzdF9zZXQwLCBhbnN3 X3NldDAsIDY0LCAzMiwgMik7CisgIGludCBvMiA9IHJ1bl90ZXN0X3MzMngyICh0ZXN0X3Nl dDEsIGFuc3dfc2V0MSwgNjQsIDMyLCAyKTsKKyAgaW50IG8zID0gcnVuX3Rlc3RfczMyeDIg KHRlc3Rfc2V0MiwgYW5zd19zZXQyLCA2NCwgMzIsIDIpOworICBpbnQgbzQgPSBydW5fdGVz dF9zMzJ4MiAodGVzdF9zZXQzLCBhbnN3X3NldDMsIDY0LCAzMiwgMik7CisgIGludCBvNSA9 IHJ1bl90ZXN0X3MzMngyICh0ZXN0X3NldDQsIGFuc3dfc2V0NCwgNjQsIDMyLCAyKTsKKyAg aW50IG82ID0gcnVuX3Rlc3RfczMyeDIgKHRlc3Rfc2V0NSwgYW5zd19zZXQ1LCA2NCwgMzIs IDIpOworICBpbnQgbzcgPSBydW5fdGVzdF9zMzJ4MiAodGVzdF9zZXQ2LCBhbnN3X3NldDYs IDY0LCAzMiwgMik7CisgIGludCBvOCA9IHJ1bl90ZXN0X3MzMngyICh0ZXN0X3NldDcsIGFu c3dfc2V0NywgNjQsIDMyLCAyKTsKKyAgaW50IG85ID0gcnVuX3Rlc3RfczMyeDIgKHRlc3Rf c2V0OCwgYW5zd19zZXQ4LCA2NCwgMzIsIDIpOworICBpbnQgbzEwID0gcnVuX3Rlc3RfczMy eDIgKHRlc3Rfc2V0OSwgYW5zd19zZXQ5LCA2NCwgMzIsIDIpOworICBpbnQgbzExID0gcnVu X3Rlc3RfczMyeDIgKHRlc3Rfc2V0MTAsIGFuc3dfc2V0MTAsIDY0LCAzMiwgMik7CisgIGlu dCBvMTIgPSBydW5fdGVzdF9zMzJ4MiAodGVzdF9zZXQxMSwgYW5zd19zZXQxMSwgNjQsIDMy LCAyKTsKKyAgaW50IG8xMyA9IHJ1bl90ZXN0X3MzMngyICh0ZXN0X3NldDEyLCBhbnN3X3Nl dDEyLCA2NCwgMzIsIDIpOworICBpbnQgbzE0ID0gcnVuX3Rlc3RfczMyeDIgKHRlc3Rfc2V0 MTMsIGFuc3dfc2V0MTMsIDY0LCAzMiwgMik7CisgIGludCBvMTUgPSBydW5fdGVzdF9zMzJ4 MiAodGVzdF9zZXQxNCwgYW5zd19zZXQxNCwgNjQsIDMyLCAyKTsKKyAgaW50IG8xNiA9IHJ1 bl90ZXN0X3MzMngyICh0ZXN0X3NldDE1LCBhbnN3X3NldDE1LCA2NCwgMzIsIDIpOworICBp bnQgbzE3ID0gcnVuX3Rlc3RfczMyeDIgKHRlc3Rfc2V0MTYsIGFuc3dfc2V0MTYsIDY0LCAz MiwgMSk7CisKKyAgcmV0dXJuIG8xfHxvMnx8bzN8fG80fHxvNXx8bzZ8fG83fHxvOHx8bzl8 fG8xMHx8bzExfHxvMTJ8fG8xM3x8bzE0CisgICAgfHxvMTV8fG8xNnx8bzE3OwogfQogCiAv KiBEb3VibGUgc2Nhbi1hc3NlbWJsZXItdGltZXMgdG8gdGFrZSBhY2NvdW50IG9mIHVuc2ln bmVkIGZ1bmN0aW9ucy4gICovCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGlt ZXMgImNselxcdHZcWzAtOVxdK1wuMnMsIHZcWzAtOVxdK1wuMnMiIDM0IH0gfSAqLworLyog eyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJjbHpcXHR2XFswLTlcXStcLjJz LCB2XFswLTlcXStcLjJzIiAgMiB9IH0gKi8KIAogaW50IF9fYXR0cmlidXRlX18gKChub2lu bGluZSkpCiB0ZXN0X3ZjbHpxX3M4ICgpCiB7Ci0gIGludCBpOwotICBpbnQ4eDE2X3QgYTsK LSAgaW50OHgxNl90IGI7Ci0KICAgaW50OF90IHRlc3Rfc2V0MFsxNl0gPSB7CiAgICAgVEVT VDAsIFRFU1QxLCBURVNUMiwgVEVTVDMsIFRFU1Q0LCBURVNUNSwgVEVTVDYsIFRFU1Q3LAog ICAgIFRFU1Q4LCBURVNUOCwgVEVTVDgsIFRFU1Q4LCBURVNUOCwgVEVTVDgsIFRFU1Q4LCBU RVNUOApAQCAtMjE5LDggKzI0OCw4IEBAIHRlc3RfdmNsenFfczggKCkKICAgaW50OF90IGFu c3dfc2V0MFsxNl0gPSB7CiAgICAgOCwgNywgNiwgNSwgNCwgMywgMiwgMSwgMCwgMCwgMCwg MCwgMCwgMCwgMCwgMAogICB9OwotICBSVU5fVEVTVCAodGVzdF9zZXQwLCBhbnN3X3NldDAs IDEyOCwgOCwgMSwgOSk7Ci0gIHJldHVybiAwOworICBpbnQgbzEgPSBydW5fdGVzdHFfczh4 MTYgKHRlc3Rfc2V0MCwgYW5zd19zZXQwLCAxMjgsIDgsIDkpOworICByZXR1cm4gbzE7CiB9 CiAKIC8qIERvdWJsZSBzY2FuLWFzc2VtYmxlci10aW1lcyB0byB0YWtlIGFjY291bnQgb2Yg dW5zaWduZWQgZnVuY3Rpb25zLiAgKi8KQEAgLTIyOSwxMCArMjU4LDYgQEAgdGVzdF92Y2x6 cV9zOCAoKQogaW50IF9fYXR0cmlidXRlX18gKChub2lubGluZSkpCiB0ZXN0X3ZjbHpxX3Mx NiAoKQogewotICBpbnQgaTsKLSAgaW50MTZ4OF90IGE7Ci0gIGludDE2eDhfdCBiOwotCiAg IGludDE2X3QgdGVzdF9zZXQwWzhdID0gewogICAgIFRFU1QwLCBURVNUMSwgVEVTVDIsIFRF U1QzLCBURVNUNCwgVEVTVDUsIFRFU1Q2LCBURVNUNwogICB9OwpAQCAtMjUyLDIzICsyNzcs MTkgQEAgdGVzdF92Y2x6cV9zMTYgKCkKICAgaW50MTZfdCBhbnN3X3NldDJbOF0gPSB7CiAg ICAgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAogICB9OwotICBSVU5fVEVTVCAodGVzdF9zZXQw LCBhbnN3X3NldDAsIDEyOCwgMTYsIDEsIDgpOwotICBSVU5fVEVTVCAodGVzdF9zZXQxLCBh bnN3X3NldDEsIDEyOCwgMTYsIDEsIDgpOwotICBSVU5fVEVTVCAodGVzdF9zZXQyLCBhbnN3 X3NldDIsIDEyOCwgMTYsIDEsIDEpOworICBpbnQgbzEgPSBydW5fdGVzdHFfczE2eDggKHRl c3Rfc2V0MCwgYW5zd19zZXQwLCAxMjgsIDE2LCA4KTsKKyAgaW50IG8yID0gcnVuX3Rlc3Rx X3MxNng4ICh0ZXN0X3NldDEsIGFuc3dfc2V0MSwgMTI4LCAxNiwgOCk7CisgIGludCBvMyA9 IHJ1bl90ZXN0cV9zMTZ4OCAodGVzdF9zZXQyLCBhbnN3X3NldDIsIDEyOCwgMTYsIDEpOwog Ci0gIHJldHVybiAwOworICByZXR1cm4gbzF8fG8yfHxvMzsKIH0KIAogLyogRG91YmxlIHNj YW4tYXNzZW1ibGVyLXRpbWVzIHRvIHRha2UgYWNjb3VudCBvZiB1bnNpZ25lZCBmdW5jdGlv bnMuICAqLwotLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJjbHpcXHR2 XFswLTlcXStcLjhoLCB2XFswLTlcXStcLjhoIiA2IH0gfSAqLworLyogeyBkZy1maW5hbCB7 IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJjbHpcXHR2XFswLTlcXStcLjhoLCB2XFswLTlcXStc LjhoIiAyIH0gfSAqLwogCiBpbnQgX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkKIHRlc3Rf dmNsenFfczMyICgpCiB7Ci0gIGludCBpOwotICBpbnQzMng0X3QgYTsKLSAgaW50MzJ4NF90 IGI7Ci0KICAgaW50MzJfdCB0ZXN0X3NldDBbNF0gPSB7IFRFU1QwLCBURVNUMSwgVEVTVDIs IFRFU1QzIH07CiAgIGludDMyX3QgdGVzdF9zZXQxWzRdID0geyBURVNUNCwgVEVTVDUsIFRF U1Q2LCBURVNUNyB9OwogICBpbnQzMl90IHRlc3Rfc2V0Mls0XSA9IHsgVEVTVDgsIFRFU1Q5 LCBURVNUMTAsIFRFU1QxMSB9OwpAQCAtMjg5LDI3ICszMTAsMjMgQEAgdGVzdF92Y2x6cV9z MzIgKCkKICAgaW50MzJfdCBhbnN3X3NldDdbNF0gPSB7IDQsIDMsIDIsIDEgfTsKICAgaW50 MzJfdCBhbnN3X3NldDhbNF0gPSB7IDAsIDAsIDAsIDAgfTsKIAotICBSVU5fVEVTVCAodGVz dF9zZXQwLCBhbnN3X3NldDAsIDEyOCwgMzIsIDEsIDQpOwotICBSVU5fVEVTVCAodGVzdF9z ZXQxLCBhbnN3X3NldDEsIDEyOCwgMzIsIDEsIDQpOwotICBSVU5fVEVTVCAodGVzdF9zZXQy LCBhbnN3X3NldDIsIDEyOCwgMzIsIDEsIDQpOwotICBSVU5fVEVTVCAodGVzdF9zZXQzLCBh bnN3X3NldDMsIDEyOCwgMzIsIDEsIDQpOwotICBSVU5fVEVTVCAodGVzdF9zZXQ0LCBhbnN3 X3NldDQsIDEyOCwgMzIsIDEsIDEpOworICBpbnQgbzEgPSBydW5fdGVzdHFfczMyeDQgKHRl c3Rfc2V0MCwgYW5zd19zZXQwLCAxMjgsIDMyLCA0KTsKKyAgaW50IG8yID0gcnVuX3Rlc3Rx X3MzMng0ICh0ZXN0X3NldDEsIGFuc3dfc2V0MSwgMTI4LCAzMiwgNCk7CisgIGludCBvMyA9 IHJ1bl90ZXN0cV9zMzJ4NCAodGVzdF9zZXQyLCBhbnN3X3NldDIsIDEyOCwgMzIsIDQpOwor ICBpbnQgbzQgPSBydW5fdGVzdHFfczMyeDQgKHRlc3Rfc2V0MywgYW5zd19zZXQzLCAxMjgs IDMyLCA0KTsKKyAgaW50IG81ID0gcnVuX3Rlc3RxX3MzMng0ICh0ZXN0X3NldDQsIGFuc3df c2V0NCwgMTI4LCAzMiwgMSk7CiAKLSAgcmV0dXJuIDA7CisgIHJldHVybiBvMXx8bzJ8fG8z fHxvNHx8bzU7CiB9CiAKIC8qIERvdWJsZSBzY2FuLWFzc2VtYmxlci10aW1lcyB0byB0YWtl IGFjY291bnQgb2YgdW5zaWduZWQgZnVuY3Rpb25zLiAgKi8KLS8qIHsgZGctZmluYWwgeyBz Y2FuLWFzc2VtYmxlci10aW1lcyAiY2x6XFx0dlxbMC05XF0rXC40cywgdlxbMC05XF0rXC40 cyIgMTAgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgImNs elxcdHZcWzAtOVxdK1wuNHMsIHZcWzAtOVxdK1wuNHMiIDIgfSB9ICovCiAKIC8qIFVuc2ln bmVkIHZlcnNpb25zLiAgKi8KIAogaW50IF9fYXR0cmlidXRlX18gKChub2lubGluZSkpCiB0 ZXN0X3ZjbHpfdTggKCkKIHsKLSAgaW50IGk7Ci0gIHVpbnQ4eDhfdCBhOwotICB1aW50OHg4 X3QgYjsKLQogICB1aW50OF90IHRlc3Rfc2V0MFs4XSA9IHsKICAgICBURVNUMCwgVEVTVDEs IFRFU1QyLCBURVNUMywgVEVTVDQsIFRFU1Q1LCBURVNUNiwgVEVTVDcKICAgfTsKQEAgLTMy MywxMCArMzQwLDEwIEBAIHRlc3RfdmNsel91OCAoKQogICAgIDAsIDAsIDAsIDAsIDAsIDAs IDAsIDAKICAgfTsKIAotICBSVU5fVEVTVCAodGVzdF9zZXQwLCBhbnN3X3NldDAsIDY0LCA4 LCAwLCA4KTsKLSAgUlVOX1RFU1QgKHRlc3Rfc2V0MSwgYW5zd19zZXQxLCA2NCwgOCwgMCwg MSk7CisgIGludCBvMSA9IHJ1bl90ZXN0X3U4eDggKHRlc3Rfc2V0MCwgYW5zd19zZXQwLCA2 NCwgOCwgOCk7CisgIGludCBvMiA9IHJ1bl90ZXN0X3U4eDggKHRlc3Rfc2V0MSwgYW5zd19z ZXQxLCA2NCwgOCwgMSk7CiAKLSAgcmV0dXJuIDA7CisgIHJldHVybiBvMXx8bzI7CiB9CiAK IC8qIEFTTSBzY2FuIG5lYXIgdGVzdCBmb3Igc2lnbmVkIHZlcnNpb24uICAqLwpAQCAtMzM0 LDEwICszNTEsNiBAQCB0ZXN0X3ZjbHpfdTggKCkKIGludCBfX2F0dHJpYnV0ZV9fICgobm9p bmxpbmUpKQogdGVzdF92Y2x6X3UxNiAoKQogewotICBpbnQgaTsKLSAgdWludDE2eDRfdCBh OwotICB1aW50MTZ4NF90IGI7Ci0KICAgdWludDE2X3QgdGVzdF9zZXQwWzRdID0geyBURVNU MCwgVEVTVDEsIFRFU1QyLCBURVNUMyB9OwogICB1aW50MTZfdCB0ZXN0X3NldDFbNF0gPSB7 IFRFU1Q0LCBURVNUNSwgVEVTVDYsIFRFU1Q3IH07CiAgIHVpbnQxNl90IHRlc3Rfc2V0Mls0 XSA9IHsgVEVTVDgsIFRFU1Q5LCBURVNUMTAsIFRFU1QxMSB9OwpAQCAtMzUwLDEzICszNjMs MTMgQEAgdGVzdF92Y2x6X3UxNiAoKQogICB1aW50MTZfdCBhbnN3X3NldDNbNF0gPSB7IDQs IDMsIDIsIDEgfTsKICAgdWludDE2X3QgYW5zd19zZXQ0WzRdID0geyAwLCAwLCAwLCAwIH07 CiAKLSAgUlVOX1RFU1QgKHRlc3Rfc2V0MCwgYW5zd19zZXQwLCA2NCwgMTYsIDAsIDQpOwot ICBSVU5fVEVTVCAodGVzdF9zZXQxLCBhbnN3X3NldDEsIDY0LCAxNiwgMCwgNCk7Ci0gIFJV Tl9URVNUICh0ZXN0X3NldDIsIGFuc3dfc2V0MiwgNjQsIDE2LCAwLCA0KTsKLSAgUlVOX1RF U1QgKHRlc3Rfc2V0MywgYW5zd19zZXQzLCA2NCwgMTYsIDAsIDQpOwotICBSVU5fVEVTVCAo dGVzdF9zZXQ0LCBhbnN3X3NldDQsIDY0LCAxNiwgMCwgMSk7CisgIGludCBvMSA9IHJ1bl90 ZXN0X3UxNng0ICh0ZXN0X3NldDAsIGFuc3dfc2V0MCwgNjQsIDE2LCA0KTsKKyAgaW50IG8y ID0gcnVuX3Rlc3RfdTE2eDQgKHRlc3Rfc2V0MSwgYW5zd19zZXQxLCA2NCwgMTYsIDQpOwor ICBpbnQgbzMgPSBydW5fdGVzdF91MTZ4NCAodGVzdF9zZXQyLCBhbnN3X3NldDIsIDY0LCAx NiwgNCk7CisgIGludCBvNCA9IHJ1bl90ZXN0X3UxNng0ICh0ZXN0X3NldDMsIGFuc3dfc2V0 MywgNjQsIDE2LCA0KTsKKyAgaW50IG81ID0gcnVuX3Rlc3RfdTE2eDQgKHRlc3Rfc2V0NCwg YW5zd19zZXQ0LCA2NCwgMTYsIDEpOwogCi0gIHJldHVybiAwOworICByZXR1cm4gbzF8fG8y fHxvM3x8bzR8fG81OwogfQogCiAvKiBBU00gc2NhbiBuZWFyIHRlc3QgZm9yIHNpZ25lZCB2 ZXJzaW9uLiAgKi8KQEAgLTM2NCwxMCArMzc3LDYgQEAgdGVzdF92Y2x6X3UxNiAoKQogaW50 IF9fYXR0cmlidXRlX18gKChub2lubGluZSkpCiB0ZXN0X3ZjbHpfdTMyICgpCiB7Ci0gIGlu dCBpOwotICB1aW50MzJ4Ml90IGE7Ci0gIHVpbnQzMngyX3QgYjsKLQogICB1aW50MzJfdCB0 ZXN0X3NldDBbMl0gPSB7IFRFU1QwLCBURVNUMSB9OwogICB1aW50MzJfdCB0ZXN0X3NldDFb Ml0gPSB7IFRFU1QyLCBURVNUMyB9OwogICB1aW50MzJfdCB0ZXN0X3NldDJbMl0gPSB7IFRF U1Q0LCBURVNUNSB9OwpAQCAtNDA0LDI1ICs0MTMsMjYgQEAgdGVzdF92Y2x6X3UzMiAoKQog ICB1aW50MzJfdCBhbnN3X3NldDE1WzJdID0geyAyLCAxIH07CiAgIHVpbnQzMl90IGFuc3df c2V0MTZbMl0gPSB7IDAsIDAgfTsKIAotICBSVU5fVEVTVCAodGVzdF9zZXQwLCBhbnN3X3Nl dDAsIDY0LCAzMiwgMCwgMik7Ci0gIFJVTl9URVNUICh0ZXN0X3NldDEsIGFuc3dfc2V0MSwg NjQsIDMyLCAwLCAyKTsKLSAgUlVOX1RFU1QgKHRlc3Rfc2V0MiwgYW5zd19zZXQyLCA2NCwg MzIsIDAsIDIpOwotICBSVU5fVEVTVCAodGVzdF9zZXQzLCBhbnN3X3NldDMsIDY0LCAzMiwg MCwgMik7Ci0gIFJVTl9URVNUICh0ZXN0X3NldDQsIGFuc3dfc2V0NCwgNjQsIDMyLCAwLCAy KTsKLSAgUlVOX1RFU1QgKHRlc3Rfc2V0NSwgYW5zd19zZXQ1LCA2NCwgMzIsIDAsIDIpOwot ICBSVU5fVEVTVCAodGVzdF9zZXQ2LCBhbnN3X3NldDYsIDY0LCAzMiwgMCwgMik7Ci0gIFJV Tl9URVNUICh0ZXN0X3NldDcsIGFuc3dfc2V0NywgNjQsIDMyLCAwLCAyKTsKLSAgUlVOX1RF U1QgKHRlc3Rfc2V0OCwgYW5zd19zZXQ4LCA2NCwgMzIsIDAsIDIpOwotICBSVU5fVEVTVCAo dGVzdF9zZXQ5LCBhbnN3X3NldDksIDY0LCAzMiwgMCwgMik7Ci0gIFJVTl9URVNUICh0ZXN0 X3NldDEwLCBhbnN3X3NldDEwLCA2NCwgMzIsIDAsIDIpOwotICBSVU5fVEVTVCAodGVzdF9z ZXQxMSwgYW5zd19zZXQxMSwgNjQsIDMyLCAwLCAyKTsKLSAgUlVOX1RFU1QgKHRlc3Rfc2V0 MTIsIGFuc3dfc2V0MTIsIDY0LCAzMiwgMCwgMik7Ci0gIFJVTl9URVNUICh0ZXN0X3NldDEz LCBhbnN3X3NldDEzLCA2NCwgMzIsIDAsIDIpOwotICBSVU5fVEVTVCAodGVzdF9zZXQxNCwg YW5zd19zZXQxNCwgNjQsIDMyLCAwLCAyKTsKLSAgUlVOX1RFU1QgKHRlc3Rfc2V0MTUsIGFu c3dfc2V0MTUsIDY0LCAzMiwgMCwgMik7Ci0gIFJVTl9URVNUICh0ZXN0X3NldDE2LCBhbnN3 X3NldDE2LCA2NCwgMzIsIDAsIDEpOwotCi0gIHJldHVybiAwOworICBpbnQgbzEgPSBydW5f dGVzdF91MzJ4MiAodGVzdF9zZXQwLCBhbnN3X3NldDAsIDY0LCAzMiwgMik7CisgIGludCBv MiA9IHJ1bl90ZXN0X3UzMngyICh0ZXN0X3NldDEsIGFuc3dfc2V0MSwgNjQsIDMyLCAyKTsK KyAgaW50IG8zID0gcnVuX3Rlc3RfdTMyeDIgKHRlc3Rfc2V0MiwgYW5zd19zZXQyLCA2NCwg MzIsIDIpOworICBpbnQgbzQgPSBydW5fdGVzdF91MzJ4MiAodGVzdF9zZXQzLCBhbnN3X3Nl dDMsIDY0LCAzMiwgMik7CisgIGludCBvNSA9IHJ1bl90ZXN0X3UzMngyICh0ZXN0X3NldDQs IGFuc3dfc2V0NCwgNjQsIDMyLCAyKTsKKyAgaW50IG82ID0gcnVuX3Rlc3RfdTMyeDIgKHRl c3Rfc2V0NSwgYW5zd19zZXQ1LCA2NCwgMzIsIDIpOworICBpbnQgbzcgPSBydW5fdGVzdF91 MzJ4MiAodGVzdF9zZXQ2LCBhbnN3X3NldDYsIDY0LCAzMiwgMik7CisgIGludCBvOCA9IHJ1 bl90ZXN0X3UzMngyICh0ZXN0X3NldDcsIGFuc3dfc2V0NywgNjQsIDMyLCAyKTsKKyAgaW50 IG85ID0gcnVuX3Rlc3RfdTMyeDIgKHRlc3Rfc2V0OCwgYW5zd19zZXQ4LCA2NCwgMzIsIDIp OworICBpbnQgbzEwID0gcnVuX3Rlc3RfdTMyeDIgKHRlc3Rfc2V0OSwgYW5zd19zZXQ5LCA2 NCwgMzIsIDIpOworICBpbnQgbzExID0gcnVuX3Rlc3RfdTMyeDIgKHRlc3Rfc2V0MTAsIGFu c3dfc2V0MTAsIDY0LCAzMiwgMik7CisgIGludCBvMTIgPSBydW5fdGVzdF91MzJ4MiAodGVz dF9zZXQxMSwgYW5zd19zZXQxMSwgNjQsIDMyLCAyKTsKKyAgaW50IG8xMyA9IHJ1bl90ZXN0 X3UzMngyICh0ZXN0X3NldDEyLCBhbnN3X3NldDEyLCA2NCwgMzIsIDIpOworICBpbnQgbzE0 ID0gcnVuX3Rlc3RfdTMyeDIgKHRlc3Rfc2V0MTMsIGFuc3dfc2V0MTMsIDY0LCAzMiwgMik7 CisgIGludCBvMTUgPSBydW5fdGVzdF91MzJ4MiAodGVzdF9zZXQxNCwgYW5zd19zZXQxNCwg NjQsIDMyLCAyKTsKKyAgaW50IG8xNiA9IHJ1bl90ZXN0X3UzMngyICh0ZXN0X3NldDE1LCBh bnN3X3NldDE1LCA2NCwgMzIsIDIpOworICBpbnQgbzE3ID0gcnVuX3Rlc3RfdTMyeDIgKHRl c3Rfc2V0MTYsIGFuc3dfc2V0MTYsIDY0LCAzMiwgMSk7CisKKyAgcmV0dXJuIG8xfHxvMnx8 bzN8fG80fHxvNXx8bzZ8fG83fHxvOHx8bzl8fG8xMHx8bzExfHxvMTJ8fG8xM3x8bzE0Cisg ICAgICAgIHx8bzE1fHxvMTZ8fG8xNzsKIH0KIAogLyogQVNNIHNjYW4gbmVhciB0ZXN0IGZv ciBzaWduZWQgdmVyc2lvbi4gICovCkBAIC00NDEsOSArNDUxLDkgQEAgdGVzdF92Y2x6cV91 OCAoKQogICB1aW50OF90IGFuc3dfc2V0MFsxNl0gPSB7CiAgICAgOCwgNywgNiwgNSwgNCwg MywgMiwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMAogICB9OwotICBSVU5fVEVTVCAodGVz dF9zZXQwLCBhbnN3X3NldDAsIDEyOCwgOCwgMCwgOSk7CisgIGludCBvMSA9IHJ1bl90ZXN0 cV91OHgxNiAodGVzdF9zZXQwLCBhbnN3X3NldDAsIDEyOCwgOCwgOSk7CiAKLSAgcmV0dXJu IDA7CisgIHJldHVybiBvMTsKIH0KIAogLyogQVNNIHNjYW4gbmVhciB0ZXN0IGZvciBzaWdu ZWQgdmVyc2lvbi4gICovCkBAIC00NzYsMTEgKzQ4NiwxMSBAQCB0ZXN0X3ZjbHpxX3UxNiAo KQogICAgIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKICAgfTsKIAotICBSVU5fVEVTVCAodGVz dF9zZXQwLCBhbnN3X3NldDAsIDEyOCwgMTYsIDAsIDgpOwotICBSVU5fVEVTVCAodGVzdF9z ZXQxLCBhbnN3X3NldDEsIDEyOCwgMTYsIDAsIDgpOwotICBSVU5fVEVTVCAodGVzdF9zZXQy LCBhbnN3X3NldDIsIDEyOCwgMTYsIDAsIDEpOworICBpbnQgbzEgPSBydW5fdGVzdHFfdTE2 eDggKHRlc3Rfc2V0MCwgYW5zd19zZXQwLCAxMjgsIDE2LCA4KTsKKyAgaW50IG8yID0gcnVu X3Rlc3RxX3UxNng4ICh0ZXN0X3NldDEsIGFuc3dfc2V0MSwgMTI4LCAxNiwgOCk7CisgIGlu dCBvMyA9IHJ1bl90ZXN0cV91MTZ4OCAodGVzdF9zZXQyLCBhbnN3X3NldDIsIDEyOCwgMTYs IDEpOwogCi0gIHJldHVybiAwOworICByZXR1cm4gbzF8fG8yfHxvMzsKIH0KIAogLyogQVNN IHNjYW4gbmVhciB0ZXN0IGZvciBzaWduZWQgdmVyc2lvbi4gICovCkBAIC00ODgsMTAgKzQ5 OCw2IEBAIHRlc3RfdmNsenFfdTE2ICgpCiBpbnQgX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5l KSkKIHRlc3RfdmNsenFfdTMyICgpCiB7Ci0gIGludCBpOwotICB1aW50MzJ4NF90IGE7Ci0g IHVpbnQzMng0X3QgYjsKLQogICB1aW50MzJfdCB0ZXN0X3NldDBbNF0gPSB7IFRFU1QwLCBU RVNUMSwgVEVTVDIsIFRFU1QzIH07CiAgIHVpbnQzMl90IHRlc3Rfc2V0MVs0XSA9IHsgVEVT VDQsIFRFU1Q1LCBURVNUNiwgVEVTVDcgfTsKICAgdWludDMyX3QgdGVzdF9zZXQyWzRdID0g eyBURVNUOCwgVEVTVDksIFRFU1QxMCwgVEVTVDExIH07CkBAIC01MTIsMTMgKzUxOCwxMyBA QCB0ZXN0X3ZjbHpxX3UzMiAoKQogICB1aW50MzJfdCBhbnN3X3NldDdbNF0gPSB7IDQsIDMs IDIsIDEgfTsKICAgdWludDMyX3QgYW5zd19zZXQ4WzRdID0geyAwLCAwLCAwLCAwIH07CiAK LSAgUlVOX1RFU1QgKHRlc3Rfc2V0MCwgYW5zd19zZXQwLCAxMjgsIDMyLCAwLCA0KTsKLSAg UlVOX1RFU1QgKHRlc3Rfc2V0MSwgYW5zd19zZXQxLCAxMjgsIDMyLCAwLCA0KTsKLSAgUlVO X1RFU1QgKHRlc3Rfc2V0MiwgYW5zd19zZXQyLCAxMjgsIDMyLCAwLCA0KTsKLSAgUlVOX1RF U1QgKHRlc3Rfc2V0MywgYW5zd19zZXQzLCAxMjgsIDMyLCAwLCA0KTsKLSAgUlVOX1RFU1Qg KHRlc3Rfc2V0NCwgYW5zd19zZXQ0LCAxMjgsIDMyLCAwLCAxKTsKKyAgaW50IG8xID0gcnVu X3Rlc3RxX3UzMng0ICh0ZXN0X3NldDAsIGFuc3dfc2V0MCwgMTI4LCAzMiwgNCk7CisgIGlu dCBvMiA9IHJ1bl90ZXN0cV91MzJ4NCAodGVzdF9zZXQxLCBhbnN3X3NldDEsIDEyOCwgMzIs IDQpOworICBpbnQgbzMgPSBydW5fdGVzdHFfdTMyeDQgKHRlc3Rfc2V0MiwgYW5zd19zZXQy LCAxMjgsIDMyLCA0KTsKKyAgaW50IG80ID0gcnVuX3Rlc3RxX3UzMng0ICh0ZXN0X3NldDMs IGFuc3dfc2V0MywgMTI4LCAzMiwgNCk7CisgIGludCBvNSA9IHJ1bl90ZXN0cV91MzJ4NCAo dGVzdF9zZXQ0LCBhbnN3X3NldDQsIDEyOCwgMzIsIDEpOwogCi0gIHJldHVybiAwOworICBy ZXR1cm4gbzF8fG8yfHxvM3x8bzR8fG81OwogfQogCiAvKiBBU00gc2NhbiBuZWFyIHRlc3Qg Zm9yIHNpZ25lZCB2ZXJzaW9uLiAgKi8KZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9hYXJjaDY0L3ZuZWdfcy5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2Fh cmNoNjQvdm5lZ19zLmMKaW5kZXggNjk0NzUyNmFiZGQ0ZjQ5Y2Y1NjA2NjE1MzFlOTZmZWI5 YjkzNGViNS4uOGRkYzRkMjFjMWY4OWQ2YzY2NjI0YTMzZWUwMzg2Y2IzYTI4YzUxMiAxMDA2 NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvdm5lZ19zLmMKKysr IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvdm5lZ19zLmMKQEAgLTMxLDQ5 ICszMSwyNCBAQAogCiBleHRlcm4gdm9pZCBhYm9ydCAodm9pZCk7CiAKLSNkZWZpbmUgQ09O Q0FUKGEsIGIpIGEjI2IKLSNkZWZpbmUgQ09OQ0FUMShhLCBiKSBDT05DQVQgKGEsIGIpCi0j ZGVmaW5lIFJFR19JTkZFWDY0IF8KLSNkZWZpbmUgUkVHX0lORkVYMTI4IHFfCi0jZGVmaW5l IFJFR19JTkZFWChyZWdfbGVuKSBSRUdfSU5GRVgjI3JlZ19sZW4KLSNkZWZpbmUgUE9TVEZJ WChyZWdfbGVuLCBkYXRhX2xlbikgXAotICBDT05DQVQxIChSRUdfSU5GRVggKHJlZ19sZW4p LCBzIyNkYXRhX2xlbikKLSNkZWZpbmUgREFUQV9UWVBFXzMyIGZsb2F0Ci0jZGVmaW5lIERB VEFfVFlQRV82NCBkb3VibGUKLSNkZWZpbmUgREFUQV9UWVBFKGRhdGFfbGVuKSBEQVRBX1RZ UEVfIyNkYXRhX2xlbgotCi0jZGVmaW5lIEZPUkNFX1NJTURfSU5TVDY0XzgoZGF0YSkKLSNk ZWZpbmUgRk9SQ0VfU0lNRF9JTlNUNjRfMTYoZGF0YSkKLSNkZWZpbmUgRk9SQ0VfU0lNRF9J TlNUNjRfMzIoZGF0YSkKLSNkZWZpbmUgRk9SQ0VfU0lNRF9JTlNUNjRfNjQoZGF0YSkgZm9y Y2Vfc2ltZCAoZGF0YSkKLSNkZWZpbmUgRk9SQ0VfU0lNRF9JTlNUMTI4XzgoZGF0YSkKLSNk ZWZpbmUgRk9SQ0VfU0lNRF9JTlNUMTI4XzE2KGRhdGEpCi0jZGVmaW5lIEZPUkNFX1NJTURf SU5TVDEyOF8zMihkYXRhKQotI2RlZmluZSBGT1JDRV9TSU1EX0lOU1QxMjhfNjQoZGF0YSkK LQotI2RlZmluZSBGT1JDRV9TSU1EX0lOU1QocmVnX2xlbiwgZGF0YV9sZW4sIGRhdGEpIFwK LSAgQ09OQ0FUMSAoRk9SQ0VfU0lNRF9JTlNULCByZWdfbGVuIyNfIyNkYXRhX2xlbikgKGRh dGEpCi0jZGVmaW5lIExPQURfSU5TVChyZWdfbGVuLCBkYXRhX2xlbikgXAotICBDT05DQVQx ICh2bGQxLCBQT1NURklYIChyZWdfbGVuLCBkYXRhX2xlbikpCi0jZGVmaW5lIE5FR19JTlNU KHJlZ19sZW4sIGRhdGFfbGVuKSBcCi0gIENPTkNBVDEgKHZuZWcsIFBPU1RGSVggKHJlZ19s ZW4sIGRhdGFfbGVuKSkKLQotI2RlZmluZSBSVU5fVEVTVCh0ZXN0X3NldCwgYW5zd19zZXQs IHJlZ19sZW4sIGRhdGFfbGVuLCBuLCBhLCBiKQlcCi0gIHsJCQkJCQkJCQlcCi0gICAgaW50 IGk7CQkJCQkJCQlcCi0gICAgSU5ISUJfT1BUSU1JWkFUSU9OOwkJCQkJCQlcCi0gICAgKGEp ID0gTE9BRF9JTlNUIChyZWdfbGVuLCBkYXRhX2xlbikgKHRlc3Rfc2V0KTsJCQlcCi0gICAg KGIpID0gTE9BRF9JTlNUIChyZWdfbGVuLCBkYXRhX2xlbikgKGFuc3dfc2V0KTsJCQlcCi0g ICAgRk9SQ0VfU0lNRF9JTlNUIChyZWdfbGVuLCBkYXRhX2xlbiwgYSkJCQkJXAotICAgIGEg PSBORUdfSU5TVCAocmVnX2xlbiwgZGF0YV9sZW4pIChhKTsJCQkJXAotICAgIEZPUkNFX1NJ TURfSU5TVCAocmVnX2xlbiwgZGF0YV9sZW4sIGEpCQkJCVwKLSAgICBmb3IgKGkgPSAwOyBp IDwgbjsgaSsrKQkJCQkJCVwKLSAgICAgIHsJCQkJCQkJCQlcCi0gICAgICAgIElOSElCX09Q VElNSVpBVElPTjsJCQkJCQlcCi0JaWYgKGFbaV0gIT0gYltpXSkJCQkJCQlcCi0JICByZXR1 cm4gMTsJCQkJCQkJXAotICAgICAgfQkJCQkJCQkJCVwKLSAgfQorI2RlZmluZSBCVUlMRF9U RVNUKHR5cGUsIHNpemUsIGxhbmVzKQkJCSAgIFwKK2ludCBfX2F0dHJpYnV0ZV9fKChub2lw YSxub2lubGluZSkpCQkJICAgXAorcnVuX3Rlc3QjI3R5cGUjI3NpemUjI3gjI2xhbmVzIChp bnQjI3NpemUjI190KiB0ZXN0X3NldCwgICBcCisJCSAgICAgICBpbnQjI3NpemUjI190KiBh bnN3X3NldCwJCSAgIFwKKwkJICAgICAgIGludCByZWdfbGVuLCBpbnQgZGF0YV9sZW4sIGlu dCBuKSAgIFwKK3sJCQkJCQkJICAgXAorICBpbnQgaTsJCQkJCQkgICBcCisgIGludCMjc2l6 ZSMjeCMjbGFuZXMjI190IGEgPSB2bGQxIyN0eXBlIyNzaXplICh0ZXN0X3NldCk7IFwKKyAg aW50IyNzaXplIyN4IyNsYW5lcyMjX3QgYiA9IHZsZDEjI3R5cGUjI3NpemUgKGFuc3dfc2V0 KTsgXAorICBhID0gdm5lZyMjdHlwZSMjc2l6ZSAoYSk7CQkJCSAgIFwKKyAgZm9yIChpID0g MDsgaSA8IG47IGkrKykJCQkJICAgXAorICB7CQkJCSAgICBcCisgICAgSU5ISUJfT1BUSU1J WkFUSU9OOwkJICAgIFwKKyAgICBpZiAoYVtpXSAhPSBiW2ldKQkJICAgIFwKKyAgICByZXR1 cm4gMTsJCQkgICAgXAorICB9CQkJCSAgICBcCisgIHJldHVybiAwOwkJCSAgICBcCit9CQkJ CSAgICBcCiAKICNkZWZpbmUgUlVOX1RFU1RfU0NBTEFSKHRlc3RfdmFsLCBhbnN3X3ZhbCwg YSwgYikgICAgIFwKICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKQEAgLTg3LDEyICs2MiwxOSBAQCBleHRlcm4gdm9pZCBhYm9ydCAo dm9pZCk7CiAgICAgZm9yY2Vfc2ltZCAocmVzKTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCiAgIH0KIAorQlVJTERfVEVTVCAoX3MsIDgsIDgpCitCVUlMRF9URVNUIChf cywgMTYsIDQpCitCVUlMRF9URVNUIChfcywgMzIsIDIpCitCVUlMRF9URVNUIChfcywgNjQs IDEpCisKK0JVSUxEX1RFU1QgKHFfcywgOCwgMTYpCitCVUlMRF9URVNUIChxX3MsIDE2LCA4 KQorQlVJTERfVEVTVCAocV9zLCAzMiwgNCkKK0JVSUxEX1RFU1QgKHFfcywgNjQsIDIpCisK IGludCBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQogdGVzdF92bmVnX3M4ICgpCiB7Ci0g IGludDh4OF90IGE7Ci0gIGludDh4OF90IGI7Ci0KICAgaW50OF90IHRlc3Rfc2V0MFs4XSA9 IHsKICAgICBURVNUMCwgVEVTVDEsIFRFU1QyLCBURVNUMywgVEVTVDQsIFRFU1Q1LCBTQ0hB Ul9NQVgsIFNDSEFSX01JTgogICB9OwpAQCAtMTAwLDkgKzgyLDkgQEAgdGVzdF92bmVnX3M4 ICgpCiAgICAgQU5TVzAsIEFOU1cxLCBBTlNXMiwgQU5TVzMsIEFOU1c0LCBBTlNXNSwgU0NI QVJfTUlOICsgMSwgU0NIQVJfTUlOCiAgIH07CiAKLSAgUlVOX1RFU1QgKHRlc3Rfc2V0MCwg YW5zd19zZXQwLCA2NCwgOCwgOCwgYSwgYik7CisgIGludCBvMSA9IHJ1bl90ZXN0X3M4eDgg KHRlc3Rfc2V0MCwgYW5zd19zZXQwLCA2NCwgOCwgOCk7CiAKLSAgcmV0dXJuIDA7CisgIHJl dHVybiBvMTsKIH0KIAogLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJu ZWdcXHR2XFswLTlcXStcLjhiLCB2XFswLTlcXStcLjhiIiAxIH0gfSAqLwpAQCAtMTEwLDI5 ICs5MiwyMyBAQCB0ZXN0X3ZuZWdfczggKCkKIGludCBfX2F0dHJpYnV0ZV9fICgobm9pbmxp bmUpKQogdGVzdF92bmVnX3MxNiAoKQogewotICBpbnQxNng0X3QgYTsKLSAgaW50MTZ4NF90 IGI7Ci0KICAgaW50MTZfdCB0ZXN0X3NldDBbNF0gPSB7IFRFU1QwLCBURVNUMSwgVEVTVDIs IFRFU1QzIH07CiAgIGludDE2X3QgdGVzdF9zZXQxWzRdID0geyBURVNUNCwgVEVTVDUsIFNI UlRfTUFYLCBTSFJUX01JTiB9OwogCiAgIGludDE2X3QgYW5zd19zZXQwWzRdID0geyBBTlNX MCwgQU5TVzEsIEFOU1cyLCBBTlNXMyB9OwogICBpbnQxNl90IGFuc3dfc2V0MVs0XSA9IHsg QU5TVzQsIEFOU1c1LCBTSFJUX01JTiArIDEsIFNIUlRfTUlOIH07CiAKLSAgUlVOX1RFU1Qg KHRlc3Rfc2V0MCwgYW5zd19zZXQwLCA2NCwgMTYsIDQsIGEsIGIpOwotICBSVU5fVEVTVCAo dGVzdF9zZXQxLCBhbnN3X3NldDEsIDY0LCAxNiwgNCwgYSwgYik7CisgIGludCBvMSA9IHJ1 bl90ZXN0X3MxNng0ICh0ZXN0X3NldDAsIGFuc3dfc2V0MCwgNjQsIDE2LCA0KTsKKyAgaW50 IG8yID0gcnVuX3Rlc3RfczE2eDQgKHRlc3Rfc2V0MSwgYW5zd19zZXQxLCA2NCwgMTYsIDQp OwogCi0gIHJldHVybiAwOworICByZXR1cm4gbzF8fG8yOwogfQogCi0vKiB7IGRnLWZpbmFs IHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgIm5lZ1xcdHZcWzAtOVxdK1wuNGgsIHZcWzAtOVxd K1wuNGgiIDIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMg Im5lZ1xcdHZcWzAtOVxdK1wuNGgsIHZcWzAtOVxdK1wuNGgiIDEgfSB9ICovCiAKIGludCBf X2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQogdGVzdF92bmVnX3MzMiAoKQogewotICBpbnQz MngyX3QgYTsKLSAgaW50MzJ4Ml90IGI7Ci0KICAgaW50MzJfdCB0ZXN0X3NldDBbMl0gPSB7 IFRFU1QwLCBURVNUMSB9OwogICBpbnQzMl90IHRlc3Rfc2V0MVsyXSA9IHsgVEVTVDIsIFRF U1QzIH07CiAgIGludDMyX3QgdGVzdF9zZXQyWzJdID0geyBURVNUNCwgVEVTVDUgfTsKQEAg LTE0MywyMiArMTE5LDE5IEBAIHRlc3Rfdm5lZ19zMzIgKCkKICAgaW50MzJfdCBhbnN3X3Nl dDJbMl0gPSB7IEFOU1c0LCBBTlNXNSB9OwogICBpbnQzMl90IGFuc3dfc2V0M1syXSA9IHsg SU5UX01JTiArIDEsIElOVF9NSU4gfTsKIAotICBSVU5fVEVTVCAodGVzdF9zZXQwLCBhbnN3 X3NldDAsIDY0LCAzMiwgMiwgYSwgYik7Ci0gIFJVTl9URVNUICh0ZXN0X3NldDEsIGFuc3df c2V0MSwgNjQsIDMyLCAyLCBhLCBiKTsKLSAgUlVOX1RFU1QgKHRlc3Rfc2V0MiwgYW5zd19z ZXQyLCA2NCwgMzIsIDIsIGEsIGIpOwotICBSVU5fVEVTVCAodGVzdF9zZXQzLCBhbnN3X3Nl dDMsIDY0LCAzMiwgMiwgYSwgYik7CisgIGludCBvMSA9IHJ1bl90ZXN0X3MzMngyICh0ZXN0 X3NldDAsIGFuc3dfc2V0MCwgNjQsIDMyLCAyKTsKKyAgaW50IG8yID0gcnVuX3Rlc3RfczMy eDIgKHRlc3Rfc2V0MSwgYW5zd19zZXQxLCA2NCwgMzIsIDIpOworICBpbnQgbzMgPSBydW5f dGVzdF9zMzJ4MiAodGVzdF9zZXQyLCBhbnN3X3NldDIsIDY0LCAzMiwgMik7CisgIGludCBv NCA9IHJ1bl90ZXN0X3MzMngyICh0ZXN0X3NldDMsIGFuc3dfc2V0MywgNjQsIDMyLCAyKTsK IAotICByZXR1cm4gMDsKKyAgcmV0dXJuIG8xfHxvMnx8bzN8fG80OwogfQogCi0vKiB7IGRn LWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMgIm5lZ1xcdHZcWzAtOVxdK1wuMnMsIHZc WzAtOVxdK1wuMnMiIDQgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIt dGltZXMgIm5lZ1xcdHZcWzAtOVxdK1wuMnMsIHZcWzAtOVxdK1wuMnMiIDEgfSB9ICovCiAK IGludCBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQogdGVzdF92bmVnX3M2NCAoKQogewot ICBpbnQ2NHgxX3QgYTsKLSAgaW50NjR4MV90IGI7Ci0KICAgaW50NjRfdCB0ZXN0X3NldDBb MV0gPSB7IFRFU1QwIH07CiAgIGludDY0X3QgdGVzdF9zZXQxWzFdID0geyBURVNUMSB9Owog ICBpbnQ2NF90IHRlc3Rfc2V0MlsxXSA9IHsgVEVTVDIgfTsKQEAgLTE3NywxNiArMTUwLDE2 IEBAIHRlc3Rfdm5lZ19zNjQgKCkKICAgaW50NjRfdCBhbnN3X3NldDZbMV0gPSB7IExMT05H X01JTiArIDEgfTsKICAgaW50NjRfdCBhbnN3X3NldDdbMV0gPSB7IExMT05HX01JTiB9Owog Ci0gIFJVTl9URVNUICh0ZXN0X3NldDAsIGFuc3dfc2V0MCwgNjQsIDY0LCAxLCBhLCBiKTsK LSAgUlVOX1RFU1QgKHRlc3Rfc2V0MSwgYW5zd19zZXQxLCA2NCwgNjQsIDEsIGEsIGIpOwot ICBSVU5fVEVTVCAodGVzdF9zZXQyLCBhbnN3X3NldDIsIDY0LCA2NCwgMSwgYSwgYik7Ci0g IFJVTl9URVNUICh0ZXN0X3NldDMsIGFuc3dfc2V0MywgNjQsIDY0LCAxLCBhLCBiKTsKLSAg UlVOX1RFU1QgKHRlc3Rfc2V0NCwgYW5zd19zZXQ0LCA2NCwgNjQsIDEsIGEsIGIpOwotICBS VU5fVEVTVCAodGVzdF9zZXQ1LCBhbnN3X3NldDUsIDY0LCA2NCwgMSwgYSwgYik7Ci0gIFJV Tl9URVNUICh0ZXN0X3NldDYsIGFuc3dfc2V0NiwgNjQsIDY0LCAxLCBhLCBiKTsKLSAgUlVO X1RFU1QgKHRlc3Rfc2V0NywgYW5zd19zZXQ3LCA2NCwgNjQsIDEsIGEsIGIpOworICBpbnQg bzEgPSBydW5fdGVzdF9zNjR4MSAodGVzdF9zZXQwLCBhbnN3X3NldDAsIDY0LCA2NCwgMSk7 CisgIGludCBvMiA9IHJ1bl90ZXN0X3M2NHgxICAodGVzdF9zZXQxLCBhbnN3X3NldDEsIDY0 LCA2NCwgMSk7CisgIGludCBvMyA9IHJ1bl90ZXN0X3M2NHgxICh0ZXN0X3NldDIsIGFuc3df c2V0MiwgNjQsIDY0LCAxKTsKKyAgaW50IG80ID0gcnVuX3Rlc3RfczY0eDEgKHRlc3Rfc2V0 MywgYW5zd19zZXQzLCA2NCwgNjQsIDEpOworICBpbnQgbzUgPSBydW5fdGVzdF9zNjR4MSAo dGVzdF9zZXQ0LCBhbnN3X3NldDQsIDY0LCA2NCwgMSk7CisgIGludCBvNiA9IHJ1bl90ZXN0 X3M2NHgxICh0ZXN0X3NldDUsIGFuc3dfc2V0NSwgNjQsIDY0LCAxKTsKKyAgaW50IG83ID0g cnVuX3Rlc3RfczY0eDEgKHRlc3Rfc2V0NiwgYW5zd19zZXQ2LCA2NCwgNjQsIDEpOworICBp bnQgbzggPSBydW5fdGVzdF9zNjR4MSAodGVzdF9zZXQ3LCBhbnN3X3NldDcsIDY0LCA2NCwg MSk7CiAKLSAgcmV0dXJuIDA7CisgIHJldHVybiBvMXx8bzJ8fG8zfHxvNHx8bzV8fG82fHxv N3x8bzg7CiB9CiAKIGludCBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQpAQCAtMjA2LDE0 ICsxNzksMTEgQEAgdGVzdF92bmVnZF9zNjQgKCkKICAgcmV0dXJuIDA7CiB9CiAKLS8qIHsg ZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAibmVnXFx0ZFxbMC05XF0rLCBkXFsw LTlcXSsiIDE2IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVz ICJuZWdcXHRkXFswLTlcXSssIGRcWzAtOVxdKyIgOCB9IH0gKi8KIAogaW50IF9fYXR0cmli dXRlX18gKChub2lubGluZSkpCiB0ZXN0X3ZuZWdxX3M4ICgpCiB7Ci0gIGludDh4MTZfdCBh OwotICBpbnQ4eDE2X3QgYjsKLQogICBpbnQ4X3QgdGVzdF9zZXQwWzE2XSA9IHsKICAgICBU RVNUMCwgVEVTVDEsIFRFU1QyLCBURVNUMywgVEVTVDQsIFRFU1Q1LCBTQ0hBUl9NQVgsIFND SEFSX01JTiwKICAgICA0LCA4LCAxNSwgMTYsIDIzLCA0MiwgLTEsIC0yCkBAIC0yMjQsOSAr MTk0LDkgQEAgdGVzdF92bmVncV9zOCAoKQogICAgIC00LCAtOCwgLTE1LCAtMTYsIC0yMywg LTQyLCAxLCAyCiAgIH07CiAKLSAgUlVOX1RFU1QgKHRlc3Rfc2V0MCwgYW5zd19zZXQwLCAx MjgsIDgsIDgsIGEsIGIpOworICBpbnQgbzEgPSBydW5fdGVzdHFfczh4MTYgKHRlc3Rfc2V0 MCwgYW5zd19zZXQwLCAxMjgsIDgsIDgpOwogCi0gIHJldHVybiAwOworICByZXR1cm4gbzE7 CiB9CiAKIC8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAibmVnXFx0dlxb MC05XF0rXC4xNmIsIHZcWzAtOVxdK1wuMTZiIiAxIH0gfSAqLwpAQCAtMjM0LDkgKzIwNCw2 IEBAIHRlc3Rfdm5lZ3FfczggKCkKIGludCBfX2F0dHJpYnV0ZV9fICgobm9pbmxpbmUpKQog dGVzdF92bmVncV9zMTYgKCkKIHsKLSAgaW50MTZ4OF90IGE7Ci0gIGludDE2eDhfdCBiOwot CiAgIGludDE2X3QgdGVzdF9zZXQwWzhdID0gewogICAgIFRFU1QwLCBURVNUMSwgVEVTVDIs IFRFU1QzLCBURVNUNCwgVEVTVDUsIFNIUlRfTUFYLCBTSFJUX01JTgogICB9OwpAQCAtMjQ0 LDkgKzIxMSw5IEBAIHRlc3Rfdm5lZ3FfczE2ICgpCiAgICAgQU5TVzAsIEFOU1cxLCBBTlNX MiwgQU5TVzMsIEFOU1c0LCBBTlNXNSwgU0hSVF9NSU4gKyAxLCBTSFJUX01JTgogICB9Owog Ci0gIFJVTl9URVNUICh0ZXN0X3NldDAsIGFuc3dfc2V0MCwgMTI4LCAxNiwgOCwgYSwgYik7 CisgIGludCBvMSA9IHJ1bl90ZXN0cV9zMTZ4OCAodGVzdF9zZXQwLCBhbnN3X3NldDAsIDEy OCwgMTYsIDgpOwogCi0gIHJldHVybiAwOworICByZXR1cm4gbzE7CiB9CiAKIC8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyAibmVnXFx0dlxbMC05XF0rXC44aCwgdlxb MC05XF0rXC44aCIgMSB9IH0gKi8KQEAgLTI1NCwyOSArMjIxLDIzIEBAIHRlc3Rfdm5lZ3Ff czE2ICgpCiBpbnQgX19hdHRyaWJ1dGVfXyAoKG5vaW5saW5lKSkKIHRlc3Rfdm5lZ3FfczMy ICgpCiB7Ci0gIGludDMyeDRfdCBhOwotICBpbnQzMng0X3QgYjsKLQogICBpbnQzMl90IHRl c3Rfc2V0MFs0XSA9IHsgVEVTVDAsIFRFU1QxLCBURVNUMiwgVEVTVDMgfTsKICAgaW50MzJf dCB0ZXN0X3NldDFbNF0gPSB7IFRFU1Q0LCBURVNUNSwgSU5UX01BWCwgSU5UX01JTiB9Owog CiAgIGludDMyX3QgYW5zd19zZXQwWzRdID0geyBBTlNXMCwgQU5TVzEsIEFOU1cyLCBBTlNX MyB9OwogICBpbnQzMl90IGFuc3dfc2V0MVs0XSA9IHsgQU5TVzQsIEFOU1c1LCBJTlRfTUlO ICsgMSwgSU5UX01JTiB9OwogCi0gIFJVTl9URVNUICh0ZXN0X3NldDAsIGFuc3dfc2V0MCwg MTI4LCAzMiwgNCwgYSwgYik7Ci0gIFJVTl9URVNUICh0ZXN0X3NldDEsIGFuc3dfc2V0MSwg MTI4LCAzMiwgNCwgYSwgYik7CisgIGludCBvMSA9IHJ1bl90ZXN0cV9zMzJ4NCAodGVzdF9z ZXQwLCBhbnN3X3NldDAsIDEyOCwgMzIsIDQpOworICBpbnQgbzIgPSBydW5fdGVzdHFfczMy eDQgKHRlc3Rfc2V0MSwgYW5zd19zZXQxLCAxMjgsIDMyLCA0KTsKIAotICByZXR1cm4gMDsK KyAgcmV0dXJuIG8xfHxvMjsKIH0KIAotLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy LXRpbWVzICJuZWdcXHR2XFswLTlcXStcLjRzLCB2XFswLTlcXStcLjRzIiAyIH0gfSAqLwor LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJuZWdcXHR2XFswLTlcXStc LjRzLCB2XFswLTlcXStcLjRzIiAxIH0gfSAqLwogCiBpbnQgX19hdHRyaWJ1dGVfXyAoKG5v aW5saW5lKSkKIHRlc3Rfdm5lZ3FfczY0ICgpCiB7Ci0gIGludDY0eDJfdCBhOwotICBpbnQ2 NHgyX3QgYjsKLQogICBpbnQ2NF90IHRlc3Rfc2V0MFsyXSA9IHsgVEVTVDAsIFRFU1QxIH07 CiAgIGludDY0X3QgdGVzdF9zZXQxWzJdID0geyBURVNUMiwgVEVTVDMgfTsKICAgaW50NjRf dCB0ZXN0X3NldDJbMl0gPSB7IFRFU1Q0LCBURVNUNSB9OwpAQCAtMjg3LDE1ICsyNDgsMTUg QEAgdGVzdF92bmVncV9zNjQgKCkKICAgaW50NjRfdCBhbnN3X3NldDJbMl0gPSB7IEFOU1c0 LCBBTlNXNSB9OwogICBpbnQ2NF90IGFuc3dfc2V0M1syXSA9IHsgTExPTkdfTUlOICsgMSwg TExPTkdfTUlOIH07CiAKLSAgUlVOX1RFU1QgKHRlc3Rfc2V0MCwgYW5zd19zZXQwLCAxMjgs IDY0LCAyLCBhLCBiKTsKLSAgUlVOX1RFU1QgKHRlc3Rfc2V0MSwgYW5zd19zZXQxLCAxMjgs IDY0LCAyLCBhLCBiKTsKLSAgUlVOX1RFU1QgKHRlc3Rfc2V0MiwgYW5zd19zZXQyLCAxMjgs IDY0LCAyLCBhLCBiKTsKLSAgUlVOX1RFU1QgKHRlc3Rfc2V0MywgYW5zd19zZXQzLCAxMjgs IDY0LCAyLCBhLCBiKTsKKyAgaW50IG8xID0gcnVuX3Rlc3RxX3M2NHgyICh0ZXN0X3NldDAs IGFuc3dfc2V0MCwgMTI4LCA2NCwgMik7CisgIGludCBvMiA9IHJ1bl90ZXN0cV9zNjR4MiAo dGVzdF9zZXQxLCBhbnN3X3NldDEsIDEyOCwgNjQsIDIpOworICBpbnQgbzMgPSBydW5fdGVz dHFfczY0eDIgKHRlc3Rfc2V0MiwgYW5zd19zZXQyLCAxMjgsIDY0LCAyKTsKKyAgaW50IG80 ID0gcnVuX3Rlc3RxX3M2NHgyICh0ZXN0X3NldDMsIGFuc3dfc2V0MywgMTI4LCA2NCwgMik7 CiAKLSAgcmV0dXJuIDA7CisgIHJldHVybiBvMXx8bzJ8fG8yfHxvNDsKIH0KIAotLyogeyBk Zy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzICJuZWdcXHR2XFswLTlcXStcLjJkLCB2 XFswLTlcXStcLjJkIiA0IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy LXRpbWVzICJuZWdcXHR2XFswLTlcXStcLjJkLCB2XFswLTlcXStcLjJkIiAxIH0gfSAqLwog CiBpbnQKIG1haW4gKGludCBhcmdjLCBjaGFyICoqYXJndikK --------------hVkmO75U0CtQG8QJgGLRrUk2--