From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 102744 invoked by alias); 8 Oct 2019 00:10:04 -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 102058 invoked by uid 89); 8 Oct 2019 00:10:03 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-20.8 required=5.0 tests=AWL,BAYES_00,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,KAM_NUMSUBJECT,KAM_SHORT,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.1 spammy=!slp_node, to_constant, UD:code, UD:op1 X-HELO: mail-lf1-f68.google.com Received: from mail-lf1-f68.google.com (HELO mail-lf1-f68.google.com) (209.85.167.68) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Tue, 08 Oct 2019 00:09:58 +0000 Received: by mail-lf1-f68.google.com with SMTP id u28so10541422lfc.5 for ; Mon, 07 Oct 2019 17:09:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=9WlBJFyFm+xBrxu7zDWtGMEgGsgf+KlRAQ9bdkrqf4I=; b=lE/ZcxpQURIhnsSAOmicurKcuBZL28LS9hxrghOVNl3vaac4GLOO4tPfJ3SpMMFcKN QvqwGpKq8iaMnrcHhwoDe8dMfwAMsf1B6dXv0J0FXMgQJMT7FaZv8DD62G/D5C/3kQqi 19zD776FH7PomzEIa/gsFW2llvonnU1rjOfwWtOWvzXxDVMq0XeWZ5J7IsF/SnQuOjHs SyDiwpVOQ3faZDRAcbXt6HYZV1JCgWeE3ZsnzifE11BlD64cqTGAWIczgdZHkZ8RKPns DGb+26+dJtumqvHd3P3Q4dgIPk7mlTRRirdilWWEJRXkx9MHOVuf1wAjBgr3ljuKUEpn wBAg== MIME-Version: 1.0 References: In-Reply-To: From: Prathamesh Kulkarni Date: Tue, 08 Oct 2019 00:10:00 -0000 Message-ID: Subject: Re: [SVE] PR86753 To: Richard Biener Cc: Richard Sandiford , gcc Patches Content-Type: multipart/mixed; boundary="000000000000fb666005945afcb9" X-IsSubscribed: yes X-SW-Source: 2019-10/txt/msg00506.txt.bz2 --000000000000fb666005945afcb9 Content-Type: text/plain; charset="UTF-8" Content-length: 12306 On Fri, 4 Oct 2019 at 16:08, Richard Biener wrote: > > On Thu, Oct 3, 2019 at 1:42 AM Prathamesh Kulkarni > wrote: > > > > On Wed, 25 Sep 2019 at 09:17, Prathamesh Kulkarni > > wrote: > > > > > > On Mon, 16 Sep 2019 at 08:54, Prathamesh Kulkarni > > > wrote: > > > > > > > > On Mon, 9 Sep 2019 at 09:36, Prathamesh Kulkarni > > > > wrote: > > > > > > > > > > On Mon, 9 Sep 2019 at 16:45, Richard Sandiford > > > > > wrote: > > > > > > > > > > > > Prathamesh Kulkarni writes: > > > > > > > With patch, the only following FAIL remains for aarch64-sve.exp: > > > > > > > FAIL: gcc.target/aarch64/sve/cond_unary_2.c -march=armv8.2-a+sve > > > > > > > scan-assembler-times \\tmovprfx\\t 6 > > > > > > > which now contains 14. > > > > > > > Should I adjust the test, assuming the change isn't a regression ? > > > > > > > > > > > > Well, it is kind-of a regression, but it really just means that the > > > > > > integer code is now consistent with the floating-point code in having > > > > > > an unnecessary MOVPRFX. So I think adjusting the count is fine. > > > > > > Presumably any future fix for the existing redundant MOVPRFXs will > > > > > > apply to the new ones as well. > > > > > > > > > > > > The patch looks good to me, just some very minor nits: > > > > > > > > > > > > > @@ -8309,11 +8309,12 @@ vect_double_mask_nunits (tree type) > > > > > > > > > > > > > > /* Record that a fully-masked version of LOOP_VINFO would need MASKS to > > > > > > > contain a sequence of NVECTORS masks that each control a vector of type > > > > > > > - VECTYPE. */ > > > > > > > + VECTYPE. SCALAR_MASK if non-null, represents the mask used for corresponding > > > > > > > + load/store stmt. */ > > > > > > > > > > > > Should be two spaces between sentences. Maybe: > > > > > > > > > > > > VECTYPE. If SCALAR_MASK is nonnull, the fully-masked loop would AND > > > > > > these vector masks with the vector version of SCALAR_MASK. */ > > > > > > > > > > > > since the mask isn't necessarily for a load or store statement. > > > > > > > > > > > > > [...] > > > > > > > @@ -1879,7 +1879,8 @@ static tree permute_vec_elements (tree, tree, tree, stmt_vec_info, > > > > > > > says how the load or store is going to be implemented and GROUP_SIZE > > > > > > > is the number of load or store statements in the containing group. > > > > > > > If the access is a gather load or scatter store, GS_INFO describes > > > > > > > - its arguments. > > > > > > > + its arguments. SCALAR_MASK is the scalar mask used for corresponding > > > > > > > + load or store stmt. > > > > > > > > > > > > Maybe: > > > > > > > > > > > > its arguments. If the load or store is conditional, SCALAR_MASK is the > > > > > > condition under which it occurs. > > > > > > > > > > > > since SCALAR_MASK can be null here too. > > > > > > > > > > > > > [...] > > > > > > > @@ -9975,6 +9978,31 @@ vectorizable_condition (stmt_vec_info stmt_info, gimple_stmt_iterator *gsi, > > > > > > > /* Handle cond expr. */ > > > > > > > for (j = 0; j < ncopies; j++) > > > > > > > { > > > > > > > + tree loop_mask = NULL_TREE; > > > > > > > + bool swap_cond_operands = false; > > > > > > > + > > > > > > > + if (loop_vinfo && LOOP_VINFO_FULLY_MASKED_P (loop_vinfo)) > > > > > > > + { > > > > > > > + scalar_cond_masked_key cond (cond_expr, ncopies); > > > > > > > + if (loop_vinfo->scalar_cond_masked_set.contains (cond)) > > > > > > > + { > > > > > > > + vec_loop_masks *masks = &LOOP_VINFO_MASKS (loop_vinfo); > > > > > > > + loop_mask = vect_get_loop_mask (gsi, masks, ncopies, vectype, j); > > > > > > > + } > > > > > > > + else > > > > > > > + { > > > > > > > + cond.code = invert_tree_comparison (cond.code, > > > > > > > + HONOR_NANS (TREE_TYPE (cond.op0))); > > > > > > > > > > > > Long line. Maybe just split it out into a separate assignment: > > > > > > > > > > > > bool honor_nans = HONOR_NANS (TREE_TYPE (cond.op0)); > > > > > > cond.code = invert_tree_comparison (cond.code, honor_nans); > > > > > > > > > > > > > + if (loop_vinfo->scalar_cond_masked_set.contains (cond)) > > > > > > > + { > > > > > > > + vec_loop_masks *masks = &LOOP_VINFO_MASKS (loop_vinfo); > > > > > > > + loop_mask = vect_get_loop_mask (gsi, masks, ncopies, vectype, j); > > > > > > > > > > > > Long line here too. > > > > > > > > > > > > > [...] > > > > > > > @@ -10090,6 +10121,26 @@ vectorizable_condition (stmt_vec_info stmt_info, gimple_stmt_iterator *gsi, > > > > > > > } > > > > > > > } > > > > > > > } > > > > > > > + > > > > > > > + if (loop_mask) > > > > > > > + { > > > > > > > + if (COMPARISON_CLASS_P (vec_compare)) > > > > > > > + { > > > > > > > + tree tmp = make_ssa_name (vec_cmp_type); > > > > > > > + gassign *g = gimple_build_assign (tmp, > > > > > > > + TREE_CODE (vec_compare), > > > > > > > + TREE_OPERAND (vec_compare, 0), > > > > > > d> + TREE_OPERAND (vec_compare, 1)); > > > > > > > > > > > > Two long lines. > > > > > > > > > > > > > + vect_finish_stmt_generation (stmt_info, g, gsi); > > > > > > > + vec_compare = tmp; > > > > > > > + } > > > > > > > + > > > > > > > + tree tmp2 = make_ssa_name (vec_cmp_type); > > > > > > > + gassign *g = gimple_build_assign (tmp2, BIT_AND_EXPR, vec_compare, loop_mask); > > > > > > > > > > > > Long line here too. > > > > > > > > > > > > > [...] > > > > > > > diff --git a/gcc/tree-vectorizer.c b/gcc/tree-vectorizer.c > > > > > > > index dc181524744..c4b2d8e8647 100644 > > > > > > > --- a/gcc/tree-vectorizer.c > > > > > > > +++ b/gcc/tree-vectorizer.c > > > > > > > @@ -1513,3 +1513,39 @@ make_pass_ipa_increase_alignment (gcc::context *ctxt) > > > > > > > { > > > > > > > return new pass_ipa_increase_alignment (ctxt); > > > > > > > } > > > > > > > + > > > > > > > +/* If code(T) is comparison op or def of comparison stmt, > > > > > > > + extract it's operands. > > > > > > > + Else return . */ > > > > > > > + > > > > > > > +void > > > > > > > +scalar_cond_masked_key::get_cond_ops_from_tree (tree t) > > > > > > > +{ > > > > > > > + if (TREE_CODE_CLASS (TREE_CODE (t)) == tcc_comparison) > > > > > > > + { > > > > > > > + this->code = TREE_CODE (t); > > > > > > > + this->op0 = TREE_OPERAND (t, 0); > > > > > > > + this->op1 = TREE_OPERAND (t, 1); > > > > > > > + return; > > > > > > > + } > > > > > > > + > > > > > > > + if (TREE_CODE (t) == SSA_NAME) > > > > > > > + { > > > > > > > + gassign *stmt = dyn_cast (SSA_NAME_DEF_STMT (t)); > > > > > > > + if (stmt) > > > > > > > + { > > > > > > > > > > > > Might as well do this as: > > > > > > > > > > > > if (TREE_CODE (t) == SSA_NAME) > > > > > > if (gassign *stmt = dyn_cast (SSA_NAME_DEF_STMT (t))) > > > > > > { > > > > > > > > > > > > The patch (as hoped) introduces some XPASSes: > > > > > > > > > > > > XPASS: gcc.target/aarch64/sve/cond_cnot_2.c scan-assembler-not \\tsel\\t > > > > > > XPASS: gcc.target/aarch64/sve/vcond_4.c scan-assembler-times \\tfcmge\\tp[0-9]+\\.d, p[0-7]/z, z[0-9]+\\.d, #0\\.0\\n 21 > > > > > > XPASS: gcc.target/aarch64/sve/vcond_4.c scan-assembler-times \\tfcmge\\tp[0-9]+\\.d, p[0-7]/z, z[0-9]+\\.d, z[0-9]+\\.d\\n 42 > > > > > > XPASS: gcc.target/aarch64/sve/vcond_4.c scan-assembler-times \\tfcmge\\tp[0-9]+\\.s, p[0-7]/z, z[0-9]+\\.s, #0\\.0\\n 15 > > > > > > XPASS: gcc.target/aarch64/sve/vcond_4.c scan-assembler-times \\tfcmge\\tp[0-9]+\\.s, p[0-7]/z, z[0-9]+\\.s, z[0-9]+\\.s\\n 30 > > > > > > XPASS: gcc.target/aarch64/sve/vcond_4.c scan-assembler-times \\tfcmgt\\tp[0-9]+\\.d, p[0-7]/z, z[0-9]+\\.d, #0\\.0\\n 21 > > > > > > XPASS: gcc.target/aarch64/sve/vcond_4.c scan-assembler-times \\tfcmgt\\tp[0-9]+\\.d, p[0-7]/z, z[0-9]+\\.d, z[0-9]+\\.d\\n 42 > > > > > > XPASS: gcc.target/aarch64/sve/vcond_4.c scan-assembler-times \\tfcmgt\\tp[0-9]+\\.s, p[0-7]/z, z[0-9]+\\.s, #0\\.0\\n 15 > > > > > > XPASS: gcc.target/aarch64/sve/vcond_4.c scan-assembler-times \\tfcmgt\\tp[0-9]+\\.s, p[0-7]/z, z[0-9]+\\.s, z[0-9]+\\.s\\n 30 > > > > > > XPASS: gcc.target/aarch64/sve/vcond_4.c scan-assembler-times \\tfcmle\\tp[0-9]+\\.d, p[0-7]/z, z[0-9]+\\.d, #0\\.0\\n 21 > > > > > > XPASS: gcc.target/aarch64/sve/vcond_4.c scan-assembler-times \\tfcmle\\tp[0-9]+\\.d, p[0-7]/z, z[0-9]+\\.d, z[0-9]+\\.d\\n 42 > > > > > > XPASS: gcc.target/aarch64/sve/vcond_4.c scan-assembler-times \\tfcmle\\tp[0-9]+\\.s, p[0-7]/z, z[0-9]+\\.s, #0\\.0\\n 15 > > > > > > XPASS: gcc.target/aarch64/sve/vcond_4.c scan-assembler-times \\tfcmle\\tp[0-9]+\\.s, p[0-7]/z, z[0-9]+\\.s, z[0-9]+\\.s\\n 30 > > > > > > XPASS: gcc.target/aarch64/sve/vcond_4.c scan-assembler-times \\tfcmlt\\tp[0-9]+\\.d, p[0-7]/z, z[0-9]+\\.d, #0\\.0\\n 21 > > > > > > XPASS: gcc.target/aarch64/sve/vcond_4.c scan-assembler-times \\tfcmlt\\tp[0-9]+\\.d, p[0-7]/z, z[0-9]+\\.d, z[0-9]+\\.d\\n 42 > > > > > > XPASS: gcc.target/aarch64/sve/vcond_4.c scan-assembler-times \\tfcmlt\\tp[0-9]+\\.s, p[0-7]/z, z[0-9]+\\.s, #0\\.0\\n 15 > > > > > > XPASS: gcc.target/aarch64/sve/vcond_4.c scan-assembler-times \\tfcmlt\\tp[0-9]+\\.s, p[0-7]/z, z[0-9]+\\.s, z[0-9]+\\.s\\n 30 > > > > > > XPASS: gcc.target/aarch64/sve/vcond_4.c scan-assembler-times \\tfcmuo\\tp[0-9]+\\.d, p[0-7]/z, z[0-9]+\\.d, z[0-9]+\\.d\\n 252 > > > > > > XPASS: gcc.target/aarch64/sve/vcond_4.c scan-assembler-times \\tfcmuo\\tp[0-9]+\\.s, p[0-7]/z, z[0-9]+\\.s, z[0-9]+\\.s\\n 180 > > > > > > XPASS: gcc.target/aarch64/sve/vcond_5.c scan-assembler-times \\tfcmge\\tp[0-9]+\\.d, p[0-7]/z, z[0-9]+\\.d, #0\\.0 21 > > > > > > XPASS: gcc.target/aarch64/sve/vcond_5.c scan-assembler-times \\tfcmge\\tp[0-9]+\\.d, p[0-7]/z, z[0-9]+\\.d, z[0-9]+\\.d 42 > > > > > > XPASS: gcc.target/aarch64/sve/vcond_5.c scan-assembler-times \\tfcmge\\tp[0-9]+\\.s, p[0-7]/z, z[0-9]+\\.s, #0\\.0 15 > > > > > > XPASS: gcc.target/aarch64/sve/vcond_5.c scan-assembler-times \\tfcmge\\tp[0-9]+\\.s, p[0-7]/z, z[0-9]+\\.s, z[0-9]+\\.s 30 > > > > > > XPASS: gcc.target/aarch64/sve/vcond_5.c scan-assembler-times \\tfcmle\\tp[0-9]+\\.d, p[0-7]/z, z[0-9]+\\.d, #0\\.0 21 > > > > > > XPASS: gcc.target/aarch64/sve/vcond_5.c scan-assembler-times \\tfcmle\\tp[0-9]+\\.d, p[0-7]/z, z[0-9]+\\.d, z[0-9]+\\.d 42 > > > > > > XPASS: gcc.target/aarch64/sve/vcond_5.c scan-assembler-times \\tfcmle\\tp[0-9]+\\.s, p[0-7]/z, z[0-9]+\\.s, #0\\.0 15 > > > > > > XPASS: gcc.target/aarch64/sve/vcond_5.c scan-assembler-times \\tfcmle\\tp[0-9]+\\.s, p[0-7]/z, z[0-9]+\\.s, z[0-9]+\\.s 30 > > > > > > > > > > > > Could you remove the associated xfails (and comments above them where > > > > > > appropriate)? > > > > > > > > > > > > OK with those changes from my POV, but please give Richi a day or so > > > > > > to object. > > > > > > > > > > > > Thanks for doing this. > > > > > Thanks for the suggestions, I have updated the patch accordingly. > > > > > Boostrap+test in progress on x86_64-unknown-linux-gnu and aarch64-linux-gnu. > > > > > Richi, does the patch look OK to you ? > > > > ping https://gcc.gnu.org/ml/gcc-patches/2019-09/msg00573.html > > > ping * 2: https://gcc.gnu.org/ml/gcc-patches/2019-09/msg00573.html > > ping * 3: https://gcc.gnu.org/ml/gcc-patches/2019-09/msg00573.html > > It looks reasonable but the vectorizable_condition totally lack > comments... Hi Richard, I rebased the patch on top of trunk, and added some comments to vectorizable_condition, and scalar_cond_masked_key. Does it look OK ? Thanks, Prathamesh > > Richard. > > > Thanks, > > Prathamesh > > > > > > Thanks, > > > Prathamesh > > > > > > > > Thanks, > > > > Prathamesh > > > > > > > > > > Thanks, > > > > > Prathamesh > > > > > > > > > > > > Richard --000000000000fb666005945afcb9 Content-Type: text/x-patch; charset="US-ASCII"; name="pr86753-v2-4.diff" Content-Disposition: attachment; filename="pr86753-v2-4.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_k1h351v80 Content-length: 34453 ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0 L3N2ZS9jb25kX2Nub3RfMi5jIGIvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0 L2FhcmNoNjQvc3ZlL2NvbmRfY25vdF8yLmMKaW5kZXggZDY4OWUyMWRjMTEu LjNkZjI0MzFiZTM4IDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2djYy50 YXJnZXQvYWFyY2g2NC9zdmUvY29uZF9jbm90XzIuYworKysgYi9nY2MvdGVz dHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9zdmUvY29uZF9jbm90XzIuYwpA QCAtMzIsNCArMzIsNCBAQCBURVNUX0FMTCAoREVGX0xPT1ApCiAvKiB7IGRn LWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90IHtcdG1vdlx0en0gfSB9ICov CiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90IHtcdG1vdnBy ZnhcdH0gfSB9ICovCiAvKiBDdXJyZW50bHkgd2UgY2Fub25pY2FsaXplIHRo ZSA/OiBzbyB0aGF0ICFiW2ldIGlzIHRoZSAiZmFsc2UiIHZhbHVlLiAgKi8K LS8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci1ub3Qge1x0c2VsXHR9 IHsgeGZhaWwgKi0qLSogfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlci1ub3Qge1x0c2VsXHR9IH0gfSAqLwpkaWZmIC0tZ2l0IGEv Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvc3ZlL2NvbmRfY29u dmVydF8xLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9z dmUvY29uZF9jb252ZXJ0XzEuYwppbmRleCBkY2MzMDc2OGY4OC4uODYwNjRl YmZjYmEgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9h YXJjaDY0L3N2ZS9jb25kX2NvbnZlcnRfMS5jCisrKyBiL2djYy90ZXN0c3Vp dGUvZ2NjLnRhcmdldC9hYXJjaDY0L3N2ZS9jb25kX2NvbnZlcnRfMS5jCkBA IC0xMSw3ICsxMSwxMCBAQAogCQkgICBJTlRfVFlQRSAqX19yZXN0cmljdCBw cmVkLCBpbnQgbikJCVwKICAgewkJCQkJCQkJXAogICAgIGZvciAoaW50IGkg PSAwOyBpIDwgbjsgKytpKQkJCQkJXAotICAgICAgcltpXSA9IHByZWRbaV0g PyAoRkxPQVRfVFlQRSkgYVtpXSA6IGJbaV07CQlcCisgICAgICB7CQkJCQkJ CQlcCisJRkxPQVRfVFlQRSBiaSA9IGJbaV07CQkJCQlcCisJcltpXSA9IHBy ZWRbaV0gPyAoRkxPQVRfVFlQRSkgYVtpXSA6IGJpOwkJXAorICAgICAgfQkJ CQkJCQkJXAogICB9CiAKICNkZWZpbmUgVEVTVF9BTEwoVCkgXApkaWZmIC0t Z2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvc3ZlL2Nv bmRfY29udmVydF80LmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFy Y2g2NC9zdmUvY29uZF9jb252ZXJ0XzQuYwppbmRleCA3ZTVmMmE3M2VkOS4u ZTNhOTQ3YjI2OTggMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvZ2NjLnRh cmdldC9hYXJjaDY0L3N2ZS9jb25kX2NvbnZlcnRfNC5jCisrKyBiL2djYy90 ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3N2ZS9jb25kX2NvbnZlcnRf NC5jCkBAIC0xMSw3ICsxMSwxMCBAQAogCQkgICBJTlRfVFlQRSAqX19yZXN0 cmljdCBwcmVkLCBpbnQgbikJCVwKICAgewkJCQkJCQkJXAogICAgIGZvciAo aW50IGkgPSAwOyBpIDwgbjsgKytpKQkJCQkJXAotICAgICAgcltpXSA9IHBy ZWRbaV0gPyAoSU5UX1RZUEUpIGFbaV0gOiBiW2ldOwkJCVwKKyAgICAgIHsJ CQkJCQkJCVwKKwlJTlRfVFlQRSBiaSA9IGJbaV07CQkJCQlcCisJcltpXSA9 IHByZWRbaV0gPyAoSU5UX1RZUEUpIGFbaV0gOiBiaTsJCQlcCisgICAgICB9 CQkJCQkJCQlcCiAgIH0KIAogI2RlZmluZSBURVNUX0FMTChUKSBcCmRpZmYg LS1naXQgYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9zdmUv Y29uZF91bmFyeV8yLmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFy Y2g2NC9zdmUvY29uZF91bmFyeV8yLmMKaW5kZXggOTkxY2NmMDE2ZDEuLjk3 ZDFiOGY1ZDQ1IDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2djYy50YXJn ZXQvYWFyY2g2NC9zdmUvY29uZF91bmFyeV8yLmMKKysrIGIvZ2NjL3Rlc3Rz dWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvc3ZlL2NvbmRfdW5hcnlfMi5jCkBA IC0xMyw3ICsxMywxMCBAQAogCQkgICAgICBUWVBFICpfX3Jlc3RyaWN0IHBy ZWQsIGludCBuKQkJXAogICB7CQkJCQkJCQlcCiAgICAgZm9yIChpbnQgaSA9 IDA7IGkgPCBuOyArK2kpCQkJCQlcCi0gICAgICByW2ldID0gcHJlZFtpXSA/ IE9QIChhW2ldKSA6IGJbaV07CQkJXAorICAgICAgewkJCQkJCQkJXAorCVRZ UEUgYmkgPSBiW2ldOwkJCQkJCVwKKwlyW2ldID0gcHJlZFtpXSA/IE9QIChh W2ldKSA6IGJpOwkJCVwKKyAgICAgIH0JCQkJCQkJCVwKICAgfQogCiAjZGVm aW5lIFRFU1RfSU5UX1RZUEUoVCwgVFlQRSkgXApkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvc3ZlL2ZtbGFfMi5jIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvc3ZlL2ZtbGFfMi5j CmluZGV4IDVjMDRiY2RiM2Y1Li5hMWIwNjY3ZGFiNSAxMDA2NDQKLS0tIGEv Z2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvc3ZlL2ZtbGFfMi5j CisrKyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3N2ZS9m bWxhXzIuYwpAQCAtMTUsNSArMTUsOSBAQCBmIChkb3VibGUgKnJlc3RyaWN0 IGEsIGRvdWJsZSAqcmVzdHJpY3QgYiwgZG91YmxlICpyZXN0cmljdCBjLAog ICAgIH0KIH0KIAotLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRp bWVzIHtcdGZtbGFcdHpbMC05XStcLmQsIHBbMC03XS9tLCB6WzAtOV0rXC5k LCB6WzAtOV0rXC5kXG59IDIgfSB9ICovCisvKiBTZWUgaHR0cHM6Ly9nY2Mu Z251Lm9yZy9tbC9nY2MtcGF0Y2hlcy8yMDE5LTA4L21zZzAxNjQ0Lmh0bWwK KyAgIGZvciBYRkFJTGluZyB0aGUgYmVsb3cgdGVzdC4gICovCisKKy8qIHsg ZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHRmbWxhXHR6WzAt OV0rXC5kLCBwWzAtN10vbSwgelswLTldK1wuZCwgelswLTldK1wuZFxufSAy IHsgeGZhaWwgKi0qLSogfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlci10aW1lcyB7XHRmbWxhXHR6WzAtOV0rXC5kLCBwWzAtN10v bSwgelswLTldK1wuZCwgelswLTldK1wuZFxufSAzIH0gfSAqLwogLyogeyBk Zy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLW5vdCB7XHRmbWFkXHR9IH0gfSAq LwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNo NjQvc3ZlL3Zjb25kXzQuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9h YXJjaDY0L3N2ZS92Y29uZF80LmMKaW5kZXggMDBkODQ3NjBhMTkuLmIzOGYy M2U4N2JhIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQv YWFyY2g2NC9zdmUvdmNvbmRfNC5jCisrKyBiL2djYy90ZXN0c3VpdGUvZ2Nj LnRhcmdldC9hYXJjaDY0L3N2ZS92Y29uZF80LmMKQEAgLTk4LDI0ICs5OCwy NCBAQCBURVNUX0NNUCAobnVndCkKIC8qIHsgZGctZmluYWwgeyBzY2FuLWFz c2VtYmxlci10aW1lcyB7XHRmY21uZVx0cFswLTldK1wucywgcFswLTddL3os IHpbMC05XStcLnMsIHpbMC05XStcLnNcbn0gMzAgeyB4ZmFpbCAqLSotKiB9 IH0gfSAqLwogCiAvKiA1IGZvciBsdCwgNSBmb3IgdWx0IGFuZCA1IGZvciBu dWx0LiAgKi8KLS8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1l cyB7XHRmY21sdFx0cFswLTldK1wucywgcFswLTddL3osIHpbMC05XStcLnMs ICMwXC4wXG59IDE1IHsgeGZhaWwgKi0qLSogfSB9IH0gKi8KLS8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHRmY21sdFx0cFswLTld K1wucywgcFswLTddL3osIHpbMC05XStcLnMsIHpbMC05XStcLnNcbn0gMzAg eyB4ZmFpbCAqLSotKiB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4t YXNzZW1ibGVyLXRpbWVzIHtcdGZjbWx0XHRwWzAtOV0rXC5zLCBwWzAtN10v eiwgelswLTldK1wucywgIzBcLjBcbn0gMTUgfSB9ICovCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1x0ZmNtbHRcdHBbMC05XStc LnMsIHBbMC03XS96LCB6WzAtOV0rXC5zLCB6WzAtOV0rXC5zXG59IDMwIH0g fSAqLwogCiAvKiA1IGZvciBsZSwgNSBmb3IgdWxlIGFuZCA1IGZvciBudWxl LiAgKi8KLS8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7 XHRmY21sZVx0cFswLTldK1wucywgcFswLTddL3osIHpbMC05XStcLnMsICMw XC4wXG59IDE1IHsgeGZhaWwgKi0qLSogfSB9IH0gKi8KLS8qIHsgZGctZmlu YWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHRmY21sZVx0cFswLTldK1wu cywgcFswLTddL3osIHpbMC05XStcLnMsIHpbMC05XStcLnNcbn0gMzAgeyB4 ZmFpbCAqLSotKiB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNz ZW1ibGVyLXRpbWVzIHtcdGZjbWxlXHRwWzAtOV0rXC5zLCBwWzAtN10veiwg elswLTldK1wucywgIzBcLjBcbn0gMTUgfSB9ICovCisvKiB7IGRnLWZpbmFs IHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1x0ZmNtbGVcdHBbMC05XStcLnMs IHBbMC03XS96LCB6WzAtOV0rXC5zLCB6WzAtOV0rXC5zXG59IDMwIH0gfSAq LwogCiAvKiA1IGZvciBndCwgNSBmb3IgdWd0IGFuZCA1IGZvciBudWd0LiAg Ki8KLS8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHRm Y21ndFx0cFswLTldK1wucywgcFswLTddL3osIHpbMC05XStcLnMsICMwXC4w XG59IDE1IHsgeGZhaWwgKi0qLSogfSB9IH0gKi8KLS8qIHsgZGctZmluYWwg eyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHRmY21ndFx0cFswLTldK1wucywg cFswLTddL3osIHpbMC05XStcLnMsIHpbMC05XStcLnNcbn0gMzAgeyB4ZmFp bCAqLSotKiB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1i bGVyLXRpbWVzIHtcdGZjbWd0XHRwWzAtOV0rXC5zLCBwWzAtN10veiwgelsw LTldK1wucywgIzBcLjBcbn0gMTUgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi1hc3NlbWJsZXItdGltZXMge1x0ZmNtZ3RcdHBbMC05XStcLnMsIHBb MC03XS96LCB6WzAtOV0rXC5zLCB6WzAtOV0rXC5zXG59IDMwIH0gfSAqLwog CiAvKiA1IGZvciBnZSwgNSBmb3IgdWdlIGFuZCA1IGZvciBudWdlLiAgKi8K LS8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHRmY21n ZVx0cFswLTldK1wucywgcFswLTddL3osIHpbMC05XStcLnMsICMwXC4wXG59 IDE1IHsgeGZhaWwgKi0qLSogfSB9IH0gKi8KLS8qIHsgZGctZmluYWwgeyBz Y2FuLWFzc2VtYmxlci10aW1lcyB7XHRmY21nZVx0cFswLTldK1wucywgcFsw LTddL3osIHpbMC05XStcLnMsIHpbMC05XStcLnNcbn0gMzAgeyB4ZmFpbCAq LSotKiB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy LXRpbWVzIHtcdGZjbWdlXHRwWzAtOV0rXC5zLCBwWzAtN10veiwgelswLTld K1wucywgIzBcLjBcbn0gMTUgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXItdGltZXMge1x0ZmNtZ2VcdHBbMC05XStcLnMsIHBbMC03 XS96LCB6WzAtOV0rXC5zLCB6WzAtOV0rXC5zXG59IDMwIH0gfSAqLwogCiAv KiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90IHtcdGZjbXVvXHRw WzAtOV0rXC5zLCBwWzAtN10veiwgelswLTldK1wucywgIzBcLjBcbn0gfSB9 ICovCiAvKiAzIGxvb3BzICogNSBpbnZvY2F0aW9ucyBmb3IgYWxsIDEyIHVu b3JkZXJlZCBjb21wYXJpc29ucy4gICovCi0vKiB7IGRnLWZpbmFsIHsgc2Nh bi1hc3NlbWJsZXItdGltZXMge1x0ZmNtdW9cdHBbMC05XStcLnMsIHBbMC03 XS96LCB6WzAtOV0rXC5zLCB6WzAtOV0rXC5zXG59IDE4MCB7IHhmYWlsICot Ki0qIH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIt dGltZXMge1x0ZmNtdW9cdHBbMC05XStcLnMsIHBbMC03XS96LCB6WzAtOV0r XC5zLCB6WzAtOV0rXC5zXG59IDE4MCB9IH0gKi8KIAogLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdGZjbWVxXHRwWzAtOV0rXC5k LCBwWzAtN10veiwgelswLTldK1wuZCwgIzBcLjBcbn0gNyB7IHhmYWlsICot Ki0qIH0gfSB9ICovCiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXIt dGltZXMge1x0ZmNtZXFcdHBbMC05XStcLmQsIHBbMC03XS96LCB6WzAtOV0r XC5kLCB6WzAtOV0rXC5kXG59IDE0IHsgeGZhaWwgKi0qLSogfSB9IH0gKi8K QEAgLTEyMywxOSArMTIzLDE5IEBAIFRFU1RfQ01QIChudWd0KQogLyogeyBk Zy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdGZjbW5lXHRwWzAt OV0rXC5kLCBwWzAtN10veiwgelswLTldK1wuZCwgIzBcLjBcbn0gMjEgeyB4 ZmFpbCAqLSotKiB9IH0gfSAqLwogLyogeyBkZy1maW5hbCB7IHNjYW4tYXNz ZW1ibGVyLXRpbWVzIHtcdGZjbW5lXHRwWzAtOV0rXC5kLCBwWzAtN10veiwg elswLTldK1wuZCwgelswLTldK1wuZFxufSA0MiB7IHhmYWlsICotKi0qIH0g fSB9ICovCiAKLS8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1l cyB7XHRmY21sdFx0cFswLTldK1wuZCwgcFswLTddL3osIHpbMC05XStcLmQs ICMwXC4wXG59IDIxIHsgeGZhaWwgKi0qLSogfSB9IH0gKi8KLS8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHRmY21sdFx0cFswLTld K1wuZCwgcFswLTddL3osIHpbMC05XStcLmQsIHpbMC05XStcLmRcbn0gNDIg eyB4ZmFpbCAqLSotKiB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4t YXNzZW1ibGVyLXRpbWVzIHtcdGZjbWx0XHRwWzAtOV0rXC5kLCBwWzAtN10v eiwgelswLTldK1wuZCwgIzBcLjBcbn0gMjEgfSB9ICovCisvKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1x0ZmNtbHRcdHBbMC05XStc LmQsIHBbMC03XS96LCB6WzAtOV0rXC5kLCB6WzAtOV0rXC5kXG59IDQyIH0g fSAqLwogCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMg e1x0ZmNtbGVcdHBbMC05XStcLmQsIHBbMC03XS96LCB6WzAtOV0rXC5kLCAj MFwuMFxufSAyMSB7IHhmYWlsICotKi0qIH0gfSB9ICovCi0vKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1x0ZmNtbGVcdHBbMC05XStc LmQsIHBbMC03XS96LCB6WzAtOV0rXC5kLCB6WzAtOV0rXC5kXG59IDQyIHsg eGZhaWwgKi0qLSogfSB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLWFz c2VtYmxlci10aW1lcyB7XHRmY21sZVx0cFswLTldK1wuZCwgcFswLTddL3os IHpbMC05XStcLmQsICMwXC4wXG59IDIxIH0gfSAqLworLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdGZjbWxlXHRwWzAtOV0rXC5k LCBwWzAtN10veiwgelswLTldK1wuZCwgelswLTldK1wuZFxufSA0MiB9IH0g Ki8KIAotLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtc dGZjbWd0XHRwWzAtOV0rXC5kLCBwWzAtN10veiwgelswLTldK1wuZCwgIzBc LjBcbn0gMjEgeyB4ZmFpbCAqLSotKiB9IH0gfSAqLwotLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdGZjbWd0XHRwWzAtOV0rXC5k LCBwWzAtN10veiwgelswLTldK1wuZCwgelswLTldK1wuZFxufSA0MiB7IHhm YWlsICotKi0qIH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3Nl bWJsZXItdGltZXMge1x0ZmNtZ3RcdHBbMC05XStcLmQsIHBbMC03XS96LCB6 WzAtOV0rXC5kLCAjMFwuMFxufSAyMSB9IH0gKi8KKy8qIHsgZGctZmluYWwg eyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHRmY21ndFx0cFswLTldK1wuZCwg cFswLTddL3osIHpbMC05XStcLmQsIHpbMC05XStcLmRcbn0gNDIgfSB9ICov CiAKLS8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHRm Y21nZVx0cFswLTldK1wuZCwgcFswLTddL3osIHpbMC05XStcLmQsICMwXC4w XG59IDIxIHsgeGZhaWwgKi0qLSogfSB9IH0gKi8KLS8qIHsgZGctZmluYWwg eyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHRmY21nZVx0cFswLTldK1wuZCwg cFswLTddL3osIHpbMC05XStcLmQsIHpbMC05XStcLmRcbn0gNDIgeyB4ZmFp bCAqLSotKiB9IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1i bGVyLXRpbWVzIHtcdGZjbWdlXHRwWzAtOV0rXC5kLCBwWzAtN10veiwgelsw LTldK1wuZCwgIzBcLjBcbn0gMjEgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsg c2Nhbi1hc3NlbWJsZXItdGltZXMge1x0ZmNtZ2VcdHBbMC05XStcLmQsIHBb MC03XS96LCB6WzAtOV0rXC5kLCB6WzAtOV0rXC5kXG59IDQyIH0gfSAqLwog CiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItbm90IHtcdGZjbXVv XHRwWzAtOV0rXC5kLCBwWzAtN10veiwgelswLTldK1wuZCwgIzBcLjBcbn0g fSB9ICovCiAvKiAzIGxvb3BzICogNSBpbnZvY2F0aW9ucywgd2l0aCAyIGlu dm9jYXRpb25zIGhhdmluZyBuY29waWVzID09IDIsCiAgICBmb3IgYWxsIDEy IHVub3JkZXJlZCBjb21wYXJpc29ucy4gICovCi0vKiB7IGRnLWZpbmFsIHsg c2Nhbi1hc3NlbWJsZXItdGltZXMge1x0ZmNtdW9cdHBbMC05XStcLmQsIHBb MC03XS96LCB6WzAtOV0rXC5kLCB6WzAtOV0rXC5kXG59IDI1MiB7IHhmYWls ICotKi0qIH0gfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXItdGltZXMge1x0ZmNtdW9cdHBbMC05XStcLmQsIHBbMC03XS96LCB6WzAt OV0rXC5kLCB6WzAtOV0rXC5kXG59IDI1MiB9IH0gKi8KZGlmZiAtLWdpdCBh L2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hYXJjaDY0L3N2ZS92Y29uZF81 LmMgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2NC9zdmUvdmNv bmRfNS5jCmluZGV4IDIzYmZiN2IyNjQ5Li4yZjE2ZmJmZjUyMiAxMDA2NDQK LS0tIGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2FhcmNoNjQvc3ZlL3Zj b25kXzUuYworKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYWFyY2g2 NC9zdmUvdmNvbmRfNS5jCkBAIC0xOSwxNiArMTksMTYgQEAKIC8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHRmY21sdFx0cFswLTld K1wucywgcFswLTddL3osIHpbMC05XStcLnMsIHpbMC05XStcLnN9IDQwIHsg eGZhaWwgKi0qLSogfSB9IH0gKi8KIAogLyogNSBmb3IgbGUsIDUgZm9yIHVs ZSBhbmQgNSBmb3IgbnVsZS4gICovCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXItdGltZXMge1x0ZmNtbGVcdHBbMC05XStcLnMsIHBbMC03XS96 LCB6WzAtOV0rXC5zLCAjMFwuMH0gMTUgeyB4ZmFpbCAqLSotKiB9IH0gfSAq LwotLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdGZj bWxlXHRwWzAtOV0rXC5zLCBwWzAtN10veiwgelswLTldK1wucywgelswLTld K1wuc30gMzAgeyB4ZmFpbCAqLSotKiB9IH0gfSAqLworLyogeyBkZy1maW5h bCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdGZjbWxlXHRwWzAtOV0rXC5z LCBwWzAtN10veiwgelswLTldK1wucywgIzBcLjB9IDE1IH0gfSAqLworLyog eyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdGZjbWxlXHRw WzAtOV0rXC5zLCBwWzAtN10veiwgelswLTldK1wucywgelswLTldK1wuc30g MzAgfSB9ICovCiAKIC8qIDUgZm9yIGd0LCA1IGZvciB1Z3QsIDUgZm9yIG51 ZXEgYW5kIDUgZm9yIG51Z3QuICAqLwogLyogeyBkZy1maW5hbCB7IHNjYW4t YXNzZW1ibGVyLXRpbWVzIHtcdGZjbWd0XHRwWzAtOV0rXC5zLCBwWzAtN10v eiwgelswLTldK1wucywgIzBcLjB9IDIwIHsgeGZhaWwgKi0qLSogfSB9IH0g Ki8KIC8qIHsgZGctZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHRm Y21ndFx0cFswLTldK1wucywgcFswLTddL3osIHpbMC05XStcLnMsIHpbMC05 XStcLnN9IDQwIHsgeGZhaWwgKi0qLSogfSB9IH0gKi8KIAogLyogNSBmb3Ig Z2UsIDUgZm9yIHVnZSBhbmQgNSBmb3IgbnVnZS4gICovCi0vKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1x0ZmNtZ2VcdHBbMC05XStc LnMsIHBbMC03XS96LCB6WzAtOV0rXC5zLCAjMFwuMH0gMTUgeyB4ZmFpbCAq LSotKiB9IH0gfSAqLwotLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy LXRpbWVzIHtcdGZjbWdlXHRwWzAtOV0rXC5zLCBwWzAtN10veiwgelswLTld K1wucywgelswLTldK1wuc30gMzAgeyB4ZmFpbCAqLSotKiB9IH0gfSAqLwor LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdGZjbWdl XHRwWzAtOV0rXC5zLCBwWzAtN10veiwgelswLTldK1wucywgIzBcLjB9IDE1 IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVz IHtcdGZjbWdlXHRwWzAtOV0rXC5zLCBwWzAtN10veiwgelswLTldK1wucywg elswLTldK1wuc30gMzAgfSB9ICovCiAKIC8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlci1ub3Qge1x0ZmNtdW9cdHBbMC05XStcLnMsIHBbMC03XS96 LCB6WzAtOV0rXC5zLCAjMFwuMH0gfSB9ICovCiAvKiAzIGxvb3BzICogNSBp bnZvY2F0aW9ucyBmb3Igb3JkZXJlZCwgdW5vcmRlcmVkIGFtZCB1ZXEuICAq LwpAQCAtNDMsMTQgKzQzLDE0IEBACiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi1h c3NlbWJsZXItdGltZXMge1x0ZmNtbHRcdHBbMC05XStcLmQsIHBbMC03XS96 LCB6WzAtOV0rXC5kLCAjMFwuMH0gMjggeyB4ZmFpbCAqLSotKiB9IH0gfSAq LwogLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdGZj bWx0XHRwWzAtOV0rXC5kLCBwWzAtN10veiwgelswLTldK1wuZCwgelswLTld K1wuZH0gNTYgeyB4ZmFpbCAqLSotKiB9IH0gfSAqLwogCi0vKiB7IGRnLWZp bmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1x0ZmNtbGVcdHBbMC05XStc LmQsIHBbMC03XS96LCB6WzAtOV0rXC5kLCAjMFwuMH0gMjEgeyB4ZmFpbCAq LSotKiB9IH0gfSAqLwotLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVy LXRpbWVzIHtcdGZjbWxlXHRwWzAtOV0rXC5kLCBwWzAtN10veiwgelswLTld K1wuZCwgelswLTldK1wuZH0gNDIgeyB4ZmFpbCAqLSotKiB9IH0gfSAqLwor LyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVzIHtcdGZjbWxl XHRwWzAtOV0rXC5kLCBwWzAtN10veiwgelswLTldK1wuZCwgIzBcLjB9IDIx IH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tYXNzZW1ibGVyLXRpbWVz IHtcdGZjbWxlXHRwWzAtOV0rXC5kLCBwWzAtN10veiwgelswLTldK1wuZCwg elswLTldK1wuZH0gNDIgfSB9ICovCiAKIC8qIHsgZGctZmluYWwgeyBzY2Fu LWFzc2VtYmxlci10aW1lcyB7XHRmY21ndFx0cFswLTldK1wuZCwgcFswLTdd L3osIHpbMC05XStcLmQsICMwXC4wfSAyOCB7IHhmYWlsICotKi0qIH0gfSB9 ICovCiAvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1x0 ZmNtZ3RcdHBbMC05XStcLmQsIHBbMC03XS96LCB6WzAtOV0rXC5kLCB6WzAt OV0rXC5kfSA1NiB7IHhmYWlsICotKi0qIH0gfSB9ICovCiAKLS8qIHsgZGct ZmluYWwgeyBzY2FuLWFzc2VtYmxlci10aW1lcyB7XHRmY21nZVx0cFswLTld K1wuZCwgcFswLTddL3osIHpbMC05XStcLmQsICMwXC4wfSAyMSB7IHhmYWls ICotKi0qIH0gfSB9ICovCi0vKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJs ZXItdGltZXMge1x0ZmNtZ2VcdHBbMC05XStcLmQsIHBbMC03XS96LCB6WzAt OV0rXC5kLCB6WzAtOV0rXC5kfSA0MiB7IHhmYWlsICotKi0qIH0gfSB9ICov CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGltZXMge1x0ZmNt Z2VcdHBbMC05XStcLmQsIHBbMC03XS96LCB6WzAtOV0rXC5kLCAjMFwuMH0g MjEgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi1hc3NlbWJsZXItdGlt ZXMge1x0ZmNtZ2VcdHBbMC05XStcLmQsIHBbMC03XS96LCB6WzAtOV0rXC5k LCB6WzAtOV0rXC5kfSA0MiB9IH0gKi8KIAogLyogeyBkZy1maW5hbCB7IHNj YW4tYXNzZW1ibGVyLW5vdCB7XHRmY211b1x0cFswLTldK1wuZCwgcFswLTdd L3osIHpbMC05XStcLmQsICMwXC4wfSB9IH0gKi8KIC8qIDMgbG9vcHMgKiA1 IGludm9jYXRpb25zLCB3aXRoIDIgaW52b2NhdGlvbnMgaGF2aW5nIG5jb3Bp ZXMgPT0gMiwKZGlmZiAtLWdpdCBhL2djYy90cmVlLXZlY3QtbG9vcC5jIGIv Z2NjL3RyZWUtdmVjdC1sb29wLmMKaW5kZXggM2RiNGE1Y2RmNzguLmRhOTUy NjQ1NzU5IDEwMDY0NAotLS0gYS9nY2MvdHJlZS12ZWN0LWxvb3AuYworKysg Yi9nY2MvdHJlZS12ZWN0LWxvb3AuYwpAQCAtNjYwMyw3ICs2NjAzLDcgQEAg dmVjdG9yaXphYmxlX3JlZHVjdGlvbiAoc3RtdF92ZWNfaW5mbyBzdG10X2lu Zm8sIGdpbXBsZV9zdG10X2l0ZXJhdG9yICpnc2ksCiAJfQogICAgICAgZWxz ZQogCXZlY3RfcmVjb3JkX2xvb3BfbWFzayAobG9vcF92aW5mbywgbWFza3Ms IG5jb3BpZXMgKiB2ZWNfbnVtLAotCQkJICAgICAgIHZlY3R5cGVfaW4pOwor CQkJICAgICAgIHZlY3R5cGVfaW4sIE5VTEwpOwogICAgIH0KICAgaWYgKGR1 bXBfZW5hYmxlZF9wICgpCiAgICAgICAmJiByZWR1Y3Rpb25fdHlwZSA9PSBG T0xEX0xFRlRfUkVEVUNUSU9OKQpAQCAtODAwNSw3ICs4MDA1LDcgQEAgdmVj dG9yaXphYmxlX2xpdmVfb3BlcmF0aW9uIChzdG10X3ZlY19pbmZvIHN0bXRf aW5mbywKIAkgICAgICBnY2NfYXNzZXJ0IChuY29waWVzID09IDEgJiYgIXNs cF9ub2RlKTsKIAkgICAgICB2ZWN0X3JlY29yZF9sb29wX21hc2sgKGxvb3Bf dmluZm8sCiAJCQkJICAgICAmTE9PUF9WSU5GT19NQVNLUyAobG9vcF92aW5m byksCi0JCQkJICAgICAxLCB2ZWN0eXBlKTsKKwkJCQkgICAgIDEsIHZlY3R5 cGUsIE5VTEwpOwogCSAgICB9CiAJfQogICAgICAgcmV0dXJuIHRydWU7CkBA IC04MjA0LDExICs4MjA0LDEyIEBAIHZlY3RfZG91YmxlX21hc2tfbnVuaXRz ICh0cmVlIHR5cGUpCiAKIC8qIFJlY29yZCB0aGF0IGEgZnVsbHktbWFza2Vk IHZlcnNpb24gb2YgTE9PUF9WSU5GTyB3b3VsZCBuZWVkIE1BU0tTIHRvCiAg ICBjb250YWluIGEgc2VxdWVuY2Ugb2YgTlZFQ1RPUlMgbWFza3MgdGhhdCBl YWNoIGNvbnRyb2wgYSB2ZWN0b3Igb2YgdHlwZQotICAgVkVDVFlQRS4gICov CisgICBWRUNUWVBFLiAgSWYgU0NBTEFSX01BU0sgaXMgbm9ubnVsbCwgdGhl IGZ1bGx5LW1hc2tlZCBsb29wIHdvdWxkIEFORAorICAgdGhlc2UgdmVjdG9y IG1hc2tzIHdpdGggdGhlIHZlY3RvciB2ZXJzaW9uIG9mIFNDQUxBUl9NQVNL LiAgKi8KIAogdm9pZAogdmVjdF9yZWNvcmRfbG9vcF9tYXNrIChsb29wX3Zl Y19pbmZvIGxvb3BfdmluZm8sIHZlY19sb29wX21hc2tzICptYXNrcywKLQkJ ICAgICAgIHVuc2lnbmVkIGludCBudmVjdG9ycywgdHJlZSB2ZWN0eXBlKQor CQkgICAgICAgdW5zaWduZWQgaW50IG52ZWN0b3JzLCB0cmVlIHZlY3R5cGUs IHRyZWUgc2NhbGFyX21hc2spCiB7CiAgIGdjY19hc3NlcnQgKG52ZWN0b3Jz ICE9IDApOwogICBpZiAobWFza3MtPmxlbmd0aCAoKSA8IG52ZWN0b3JzKQpA QCAtODIxOSw2ICs4MjIwLDEzIEBAIHZlY3RfcmVjb3JkX2xvb3BfbWFzayAo bG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLCB2ZWNfbG9vcF9tYXNrcyAqbWFz a3MsCiAgIHVuc2lnbmVkIGludCBuc2NhbGFyc19wZXJfaXRlcgogICAgID0g ZXhhY3RfZGl2IChudmVjdG9ycyAqIFRZUEVfVkVDVE9SX1NVQlBBUlRTICh2 ZWN0eXBlKSwKIAkJIExPT1BfVklORk9fVkVDVF9GQUNUT1IgKGxvb3Bfdmlu Zm8pKS50b19jb25zdGFudCAoKTsKKworICBpZiAoc2NhbGFyX21hc2spCisg ICAgeworICAgICAgc2NhbGFyX2NvbmRfbWFza2VkX2tleSBjb25kIChzY2Fs YXJfbWFzaywgbnZlY3RvcnMpOworICAgICAgbG9vcF92aW5mby0+c2NhbGFy X2NvbmRfbWFza2VkX3NldC5hZGQgKGNvbmQpOworICAgIH0KKwogICBpZiAo cmdtLT5tYXhfbnNjYWxhcnNfcGVyX2l0ZXIgPCBuc2NhbGFyc19wZXJfaXRl cikKICAgICB7CiAgICAgICByZ20tPm1heF9uc2NhbGFyc19wZXJfaXRlciA9 IG5zY2FsYXJzX3Blcl9pdGVyOwpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVj dC1zdG10cy5jIGIvZ2NjL3RyZWUtdmVjdC1zdG10cy5jCmluZGV4IGNhYzc0 MTAzODdiLi40ZGI4ZTI0Y2NkMSAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtdmVj dC1zdG10cy5jCisrKyBiL2djYy90cmVlLXZlY3Qtc3RtdHMuYwpAQCAtMTg3 OSw3ICsxODc5LDggQEAgc3RhdGljIHRyZWUgcGVybXV0ZV92ZWNfZWxlbWVu dHMgKHRyZWUsIHRyZWUsIHRyZWUsIHN0bXRfdmVjX2luZm8sCiAgICBzYXlz IGhvdyB0aGUgbG9hZCBvciBzdG9yZSBpcyBnb2luZyB0byBiZSBpbXBsZW1l bnRlZCBhbmQgR1JPVVBfU0laRQogICAgaXMgdGhlIG51bWJlciBvZiBsb2Fk IG9yIHN0b3JlIHN0YXRlbWVudHMgaW4gdGhlIGNvbnRhaW5pbmcgZ3JvdXAu CiAgICBJZiB0aGUgYWNjZXNzIGlzIGEgZ2F0aGVyIGxvYWQgb3Igc2NhdHRl ciBzdG9yZSwgR1NfSU5GTyBkZXNjcmliZXMKLSAgIGl0cyBhcmd1bWVudHMu CisgICBpdHMgYXJndW1lbnRzLiAgSWYgdGhlIGxvYWQgb3Igc3RvcmUgaXMg Y29uZGl0aW9uYWwsIFNDQUxBUl9NQVNLIGlzIHRoZQorICAgY29uZGl0aW9u IHVuZGVyIHdoaWNoIGl0IG9jY3Vycy4KIAogICAgQ2xlYXIgTE9PUF9WSU5G T19DQU5fRlVMTFlfTUFTS19QIGlmIGEgZnVsbHktbWFza2VkIGxvb3AgaXMg bm90CiAgICBzdXBwb3J0ZWQsIG90aGVyd2lzZSByZWNvcmQgdGhlIHJlcXVp cmVkIG1hc2sgdHlwZXMuICAqLwpAQCAtMTg4OCw3ICsxODg5LDcgQEAgc3Rh dGljIHZvaWQKIGNoZWNrX2xvYWRfc3RvcmVfbWFza2luZyAobG9vcF92ZWNf aW5mbyBsb29wX3ZpbmZvLCB0cmVlIHZlY3R5cGUsCiAJCQkgIHZlY19sb2Fk X3N0b3JlX3R5cGUgdmxzX3R5cGUsIGludCBncm91cF9zaXplLAogCQkJICB2 ZWN0X21lbW9yeV9hY2Nlc3NfdHlwZSBtZW1vcnlfYWNjZXNzX3R5cGUsCi0J CQkgIGdhdGhlcl9zY2F0dGVyX2luZm8gKmdzX2luZm8pCisJCQkgIGdhdGhl cl9zY2F0dGVyX2luZm8gKmdzX2luZm8sIHRyZWUgc2NhbGFyX21hc2spCiB7 CiAgIC8qIEludmFyaWFudCBsb2FkcyBuZWVkIG5vIHNwZWNpYWwgc3VwcG9y dC4gICovCiAgIGlmIChtZW1vcnlfYWNjZXNzX3R5cGUgPT0gVk1BVF9JTlZB UklBTlQpCkBAIC0xOTEyLDcgKzE5MTMsNyBAQCBjaGVja19sb2FkX3N0b3Jl X21hc2tpbmcgKGxvb3BfdmVjX2luZm8gbG9vcF92aW5mbywgdHJlZSB2ZWN0 eXBlLAogCSAgcmV0dXJuOwogCX0KICAgICAgIHVuc2lnbmVkIGludCBuY29w aWVzID0gdmVjdF9nZXRfbnVtX2NvcGllcyAobG9vcF92aW5mbywgdmVjdHlw ZSk7Ci0gICAgICB2ZWN0X3JlY29yZF9sb29wX21hc2sgKGxvb3BfdmluZm8s IG1hc2tzLCBuY29waWVzLCB2ZWN0eXBlKTsKKyAgICAgIHZlY3RfcmVjb3Jk X2xvb3BfbWFzayAobG9vcF92aW5mbywgbWFza3MsIG5jb3BpZXMsIHZlY3R5 cGUsIHNjYWxhcl9tYXNrKTsKICAgICAgIHJldHVybjsKICAgICB9CiAKQEAg LTE5MzYsNyArMTkzNyw3IEBAIGNoZWNrX2xvYWRfc3RvcmVfbWFza2luZyAo bG9vcF92ZWNfaW5mbyBsb29wX3ZpbmZvLCB0cmVlIHZlY3R5cGUsCiAJICBy ZXR1cm47CiAJfQogICAgICAgdW5zaWduZWQgaW50IG5jb3BpZXMgPSB2ZWN0 X2dldF9udW1fY29waWVzIChsb29wX3ZpbmZvLCB2ZWN0eXBlKTsKLSAgICAg IHZlY3RfcmVjb3JkX2xvb3BfbWFzayAobG9vcF92aW5mbywgbWFza3MsIG5j b3BpZXMsIHZlY3R5cGUpOworICAgICAgdmVjdF9yZWNvcmRfbG9vcF9tYXNr IChsb29wX3ZpbmZvLCBtYXNrcywgbmNvcGllcywgdmVjdHlwZSwgc2NhbGFy X21hc2spOwogICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMTk3NCw3ICsx OTc1LDcgQEAgY2hlY2tfbG9hZF9zdG9yZV9tYXNraW5nIChsb29wX3ZlY19p bmZvIGxvb3BfdmluZm8sIHRyZWUgdmVjdHlwZSwKICAgcG9seV91aW50NjQg dmYgPSBMT09QX1ZJTkZPX1ZFQ1RfRkFDVE9SIChsb29wX3ZpbmZvKTsKICAg dW5zaWduZWQgaW50IG52ZWN0b3JzOwogICBpZiAoY2FuX2Rpdl9hd2F5X2Zy b21femVyb19wIChncm91cF9zaXplICogdmYsIG51bml0cywgJm52ZWN0b3Jz KSkKLSAgICB2ZWN0X3JlY29yZF9sb29wX21hc2sgKGxvb3BfdmluZm8sIG1h c2tzLCBudmVjdG9ycywgdmVjdHlwZSk7CisgICAgdmVjdF9yZWNvcmRfbG9v cF9tYXNrIChsb29wX3ZpbmZvLCBtYXNrcywgbnZlY3RvcnMsIHZlY3R5cGUs IHNjYWxhcl9tYXNrKTsKICAgZWxzZQogICAgIGdjY191bnJlYWNoYWJsZSAo KTsKIH0KQEAgLTM0MzYsNyArMzQzNyw5IEBAIHZlY3Rvcml6YWJsZV9jYWxs IChzdG10X3ZlY19pbmZvIHN0bXRfaW5mbywgZ2ltcGxlX3N0bXRfaXRlcmF0 b3IgKmdzaSwKIAkgIHVuc2lnbmVkIGludCBudmVjdG9ycyA9IChzbHBfbm9k ZQogCQkJCSAgID8gU0xQX1RSRUVfTlVNQkVSX09GX1ZFQ19TVE1UUyAoc2xw X25vZGUpCiAJCQkJICAgOiBuY29waWVzKTsKLQkgIHZlY3RfcmVjb3JkX2xv b3BfbWFzayAobG9vcF92aW5mbywgbWFza3MsIG52ZWN0b3JzLCB2ZWN0eXBl X291dCk7CisJICB0cmVlIHNjYWxhcl9tYXNrID0gZ2ltcGxlX2NhbGxfYXJn IChzdG10X2luZm8tPnN0bXQsIG1hc2tfb3Bubyk7CisJICB2ZWN0X3JlY29y ZF9sb29wX21hc2sgKGxvb3BfdmluZm8sIG1hc2tzLCBudmVjdG9ycywKKwkJ CQkgdmVjdHlwZV9vdXQsIHNjYWxhcl9tYXNrKTsKIAl9CiAgICAgICByZXR1 cm4gdHJ1ZTsKICAgICB9CkBAIC03MzkwLDcgKzczOTMsNyBAQCB2ZWN0b3Jp emFibGVfc3RvcmUgKHN0bXRfdmVjX2luZm8gc3RtdF9pbmZvLCBnaW1wbGVf c3RtdF9pdGVyYXRvciAqZ3NpLAogICAgICAgaWYgKGxvb3BfdmluZm8KIAkg ICYmIExPT1BfVklORk9fQ0FOX0ZVTExZX01BU0tfUCAobG9vcF92aW5mbykp CiAJY2hlY2tfbG9hZF9zdG9yZV9tYXNraW5nIChsb29wX3ZpbmZvLCB2ZWN0 eXBlLCB2bHNfdHlwZSwgZ3JvdXBfc2l6ZSwKLQkJCQkgIG1lbW9yeV9hY2Nl c3NfdHlwZSwgJmdzX2luZm8pOworCQkJCSAgbWVtb3J5X2FjY2Vzc190eXBl LCAmZ3NfaW5mbywgbWFzayk7CiAKICAgICAgIFNUTVRfVklORk9fVFlQRSAo c3RtdF9pbmZvKSA9IHN0b3JlX3ZlY19pbmZvX3R5cGU7CiAgICAgICB2ZWN0 X21vZGVsX3N0b3JlX2Nvc3QgKHN0bXRfaW5mbywgbmNvcGllcywgcmhzX2R0 LCBtZW1vcnlfYWNjZXNzX3R5cGUsCkBAIC04NjM3LDcgKzg2NDAsNyBAQCB2 ZWN0b3JpemFibGVfbG9hZCAoc3RtdF92ZWNfaW5mbyBzdG10X2luZm8sIGdp bXBsZV9zdG10X2l0ZXJhdG9yICpnc2ksCiAgICAgICBpZiAobG9vcF92aW5m bwogCSAgJiYgTE9PUF9WSU5GT19DQU5fRlVMTFlfTUFTS19QIChsb29wX3Zp bmZvKSkKIAljaGVja19sb2FkX3N0b3JlX21hc2tpbmcgKGxvb3BfdmluZm8s IHZlY3R5cGUsIFZMU19MT0FELCBncm91cF9zaXplLAotCQkJCSAgbWVtb3J5 X2FjY2Vzc190eXBlLCAmZ3NfaW5mbyk7CisJCQkJICBtZW1vcnlfYWNjZXNz X3R5cGUsICZnc19pbmZvLCBtYXNrKTsKIAogICAgICAgU1RNVF9WSU5GT19U WVBFIChzdG10X2luZm8pID0gbG9hZF92ZWNfaW5mb190eXBlOwogICAgICAg dmVjdF9tb2RlbF9sb2FkX2Nvc3QgKHN0bXRfaW5mbywgbmNvcGllcywgbWVt b3J5X2FjY2Vzc190eXBlLApAQCAtOTc3NCw2ICs5Nzc3LDEwIEBAIHZlY3Rf aXNfc2ltcGxlX2NvbmQgKHRyZWUgY29uZCwgdmVjX2luZm8gKnZpbmZvLAog CiAgICBXaGVuIFNUTVRfSU5GTyBpcyB2ZWN0b3JpemVkIGFzIGEgbmVzdGVk IGN5Y2xlLCBmb3JfcmVkdWN0aW9uIGlzIHRydWUuCiAKKyAgIEZvciBDT05E X0VYUFI8QywgVCwgRT4gaWYgVCBjb21lcyBmcm9tIG1hc2tlZCBsb2FkLCBh bmQgaXMgY29uZGl0aW9uYWwKKyAgIG9uIEMsIHdlIGFwcGx5IGxvb3AgbWFz ayB0byByZXN1bHQgb2YgdmVjdG9yIGNvbXBhcmlzb24sIGlmIGl0J3MgcHJl c2VudC4KKyAgIFNpbWlsYXJseSBmb3IgRSwgaWYgaXQgaXMgY29uZGl0aW9u YWwgb24gIUMuCisKICAgIFJldHVybiB0cnVlIGlmIFNUTVRfSU5GTyBpcyB2 ZWN0b3JpemFibGUgaW4gdGhpcyB3YXkuICAqLwogCiBib29sCkBAIC05OTk5 LDYgKzEwMDA2LDM1IEBAIHZlY3Rvcml6YWJsZV9jb25kaXRpb24gKHN0bXRf dmVjX2luZm8gc3RtdF9pbmZvLCBnaW1wbGVfc3RtdF9pdGVyYXRvciAqZ3Np LAogICAvKiBIYW5kbGUgY29uZCBleHByLiAgKi8KICAgZm9yIChqID0gMDsg aiA8IG5jb3BpZXM7IGorKykKICAgICB7CisgICAgICB0cmVlIGxvb3BfbWFz ayA9IE5VTExfVFJFRTsKKyAgICAgIGJvb2wgc3dhcF9jb25kX29wZXJhbmRz ID0gZmFsc2U7CisKKyAgICAgIC8qIExvb2sgdXAgaWYgdGhlcmUgaXMgYSBs b29wIG1hc2sgYXNzb2NpYXRlZCB3aXRoIHRoZQorCSBzY2FsYXIgY29uZCwg b3IgaXQncyBpbnZlcnNlLiAgKi8KKworICAgICAgaWYgKGxvb3BfdmluZm8g JiYgTE9PUF9WSU5GT19GVUxMWV9NQVNLRURfUCAobG9vcF92aW5mbykpCisJ eworCSAgc2NhbGFyX2NvbmRfbWFza2VkX2tleSBjb25kIChjb25kX2V4cHIs IG5jb3BpZXMpOworCSAgaWYgKGxvb3BfdmluZm8tPnNjYWxhcl9jb25kX21h c2tlZF9zZXQuY29udGFpbnMgKGNvbmQpKQorCSAgICB7CisJICAgICAgdmVj X2xvb3BfbWFza3MgKm1hc2tzID0gJkxPT1BfVklORk9fTUFTS1MgKGxvb3Bf dmluZm8pOworCSAgICAgIGxvb3BfbWFzayA9IHZlY3RfZ2V0X2xvb3BfbWFz ayAoZ3NpLCBtYXNrcywgbmNvcGllcywgdmVjdHlwZSwgaik7CisJICAgIH0K KwkgIGVsc2UKKwkgICAgeworCSAgICAgIGJvb2wgaG9ub3JfbmFucyA9IEhP Tk9SX05BTlMgKFRSRUVfVFlQRSAoY29uZC5vcDApKTsKKwkgICAgICBjb25k LmNvZGUgPSBpbnZlcnRfdHJlZV9jb21wYXJpc29uIChjb25kLmNvZGUsIGhv bm9yX25hbnMpOworCSAgICAgIGlmIChsb29wX3ZpbmZvLT5zY2FsYXJfY29u ZF9tYXNrZWRfc2V0LmNvbnRhaW5zIChjb25kKSkKKwkJeworCQkgIHZlY19s b29wX21hc2tzICptYXNrcyA9ICZMT09QX1ZJTkZPX01BU0tTIChsb29wX3Zp bmZvKTsKKwkJICBsb29wX21hc2sgPSB2ZWN0X2dldF9sb29wX21hc2sgKGdz aSwgbWFza3MsIG5jb3BpZXMsCisJCQkJCQkgIHZlY3R5cGUsIGopOworCQkg IGNvbmRfY29kZSA9IGNvbmQuY29kZTsKKwkJICBzd2FwX2NvbmRfb3BlcmFu ZHMgPSB0cnVlOworCQl9CisJICAgIH0KKwl9CisKICAgICAgIHN0bXRfdmVj X2luZm8gbmV3X3N0bXRfaW5mbyA9IE5VTEw7CiAgICAgICBpZiAoaiA9PSAw KQogCXsKQEAgLTEwMDc2LDYgKzEwMTEyLDkgQEAgdmVjdG9yaXphYmxlX2Nv bmRpdGlvbiAoc3RtdF92ZWNfaW5mbyBzdG10X2luZm8sIGdpbXBsZV9zdG10 X2l0ZXJhdG9yICpnc2ksCiAgICAgICAgICAgdmVjX3RoZW5fY2xhdXNlID0g dmVjX29wcm5kczJbaV07CiAgICAgICAgICAgdmVjX2Vsc2VfY2xhdXNlID0g dmVjX29wcm5kczNbaV07CiAKKwkgIGlmIChzd2FwX2NvbmRfb3BlcmFuZHMp CisJICAgIHN0ZDo6c3dhcCAodmVjX3RoZW5fY2xhdXNlLCB2ZWNfZWxzZV9j bGF1c2UpOworCiAJICBpZiAobWFza2VkKQogCSAgICB2ZWNfY29tcGFyZSA9 IHZlY19jb25kX2xoczsKIAkgIGVsc2UKQEAgLTEwMTE0LDYgKzEwMTUzLDQ3 IEBAIHZlY3Rvcml6YWJsZV9jb25kaXRpb24gKHN0bXRfdmVjX2luZm8gc3Rt dF9pbmZvLCBnaW1wbGVfc3RtdF9pdGVyYXRvciAqZ3NpLAogCQkgICAgfQog CQl9CiAJICAgIH0KKworCSAgLyogSWYgbG9vcCBtYXNrIGlzIHByZXNlbnQs IHRoZW4gQU5EIGl0IHdpdGgKKwkgICAgIHJlc3VsdCBvZiB2ZWMgY29tcGFy aXNvbiwgc28gbGF0ZXIgcGFzc2VzIChmcmU0KQorCSAgICAgd2lsbCByZXVz ZSB0aGUgc2FtZSBjb25kaXRpb24gdXNlZCBpbiBtYXNrZWQgbG9hZC4KKwor CSAgICAgRm9yIGV4YW1wbGU6CisJICAgICBmb3IgKGludCBpID0gMDsgaSA8 IDEwMDsgKytpKQorCSAgICAgICB4W2ldID0geVtpXSA/IHpbaV0gOiAxMDsK KworCSAgICAgcmVzdWx0cyBpbiBmb2xsb3dpbmcgb3B0aW1pemVkIEdJTVBM RTogCisKKwkgICAgIG1hc2tfXzM1LjhfNDMgPSB2ZWN0X180LjdfNDEgIT0g eyAwLCAuLi4gfTsKKwkgICAgIHZlY19tYXNrX2FuZF80NiA9IGxvb3BfbWFz a180MCAmIG1hc2tfXzM1LjhfNDM7CisJICAgICBfMTkgPSAmTUVNW2Jhc2U6 IHpfMTIoRCksIGluZGV4OiBpdnRtcF81Niwgc3RlcDogNCwgb2Zmc2V0OiAw Ql07CisJICAgICB2ZWN0X2lmdG1wLjExXzQ3ID0gLk1BU0tfTE9BRCAoXzE5 LCA0QiwgdmVjX21hc2tfYW5kXzQ2KTsKKwkgICAgIHZlY3RfaWZ0bXAuMTJf NTIgPSBWRUNfQ09ORF9FWFBSIDx2ZWNfbWFza19hbmRfNDYsCisJCQkJCSAg ICAgICB2ZWN0X2lmdG1wLjExXzQ3LCB7IDEwLCAuLi4gfT47CisKKwkgICAg IGluc3RlYWQgb2YgcmVjb21wdXRpbmcgdmVjICE9IHsgMCwgLi4uIH0gaW4g dmVjX2NvbmRfZXhwciAgKi8KKworCSAgaWYgKGxvb3BfbWFzaykKKwkgICAg eworCSAgICAgIGlmIChDT01QQVJJU09OX0NMQVNTX1AgKHZlY19jb21wYXJl KSkKKwkJeworCQkgIHRyZWUgdG1wID0gbWFrZV9zc2FfbmFtZSAodmVjX2Nt cF90eXBlKTsKKwkJICB0cmVlIG9wMCA9IFRSRUVfT1BFUkFORCAodmVjX2Nv bXBhcmUsIDApOworCQkgIHRyZWUgb3AxID0gVFJFRV9PUEVSQU5EICh2ZWNf Y29tcGFyZSwgMSk7CisJCSAgZ2Fzc2lnbiAqZyA9IGdpbXBsZV9idWlsZF9h c3NpZ24gKHRtcCwKKwkJCQkJCSAgICBUUkVFX0NPREUgKHZlY19jb21wYXJl KSwKKwkJCQkJCSAgICBvcDAsIG9wMSk7CisJCSAgdmVjdF9maW5pc2hfc3Rt dF9nZW5lcmF0aW9uIChzdG10X2luZm8sIGcsIGdzaSk7CisJCSAgdmVjX2Nv bXBhcmUgPSB0bXA7CisJCX0KKworCSAgICAgIHRyZWUgdG1wMiA9IG1ha2Vf c3NhX25hbWUgKHZlY19jbXBfdHlwZSk7CisJICAgICAgZ2Fzc2lnbiAqZyA9 IGdpbXBsZV9idWlsZF9hc3NpZ24gKHRtcDIsIEJJVF9BTkRfRVhQUiwKKwkJ CQkJCXZlY19jb21wYXJlLCBsb29wX21hc2spOworCSAgICAgIHZlY3RfZmlu aXNoX3N0bXRfZ2VuZXJhdGlvbiAoc3RtdF9pbmZvLCBnLCBnc2kpOworCSAg ICAgIHZlY19jb21wYXJlID0gdG1wMjsKKwkgICAgfQorCiAJICBpZiAocmVk dWN0aW9uX3R5cGUgPT0gRVhUUkFDVF9MQVNUX1JFRFVDVElPTikKIAkgICAg ewogCSAgICAgIGlmICghaXNfZ2ltcGxlX3ZhbCAodmVjX2NvbXBhcmUpKQpk aWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVjdG9yaXplci5jIGIvZ2NjL3RyZWUt dmVjdG9yaXplci5jCmluZGV4IDgwMGM5OWZlYTI2Li4yMDk0NWEzOWM4NCAx MDA2NDQKLS0tIGEvZ2NjL3RyZWUtdmVjdG9yaXplci5jCisrKyBiL2djYy90 cmVlLXZlY3Rvcml6ZXIuYwpAQCAtMTUxNiwzICsxNTE2LDM2IEBAIG1ha2Vf cGFzc19pcGFfaW5jcmVhc2VfYWxpZ25tZW50IChnY2M6OmNvbnRleHQgKmN0 eHQpCiB7CiAgIHJldHVybiBuZXcgcGFzc19pcGFfaW5jcmVhc2VfYWxpZ25t ZW50IChjdHh0KTsKIH0KKworLyogSWYgY29kZShUKSBpcyBjb21wYXJpc29u IG9wIG9yIGRlZiBvZiBjb21wYXJpc29uIHN0bXQsCisgICBleHRyYWN0IGl0 J3Mgb3BlcmFuZHMuCisgICBFbHNlIHJldHVybiA8TkVfRVhQUiwgVCwgMD4u ICAqLworCit2b2lkCitzY2FsYXJfY29uZF9tYXNrZWRfa2V5OjpnZXRfY29u ZF9vcHNfZnJvbV90cmVlICh0cmVlIHQpCit7CisgIGlmIChUUkVFX0NPREVf Q0xBU1MgKFRSRUVfQ09ERSAodCkpID09IHRjY19jb21wYXJpc29uKQorICAg IHsKKyAgICAgIHRoaXMtPmNvZGUgPSBUUkVFX0NPREUgKHQpOworICAgICAg dGhpcy0+b3AwID0gVFJFRV9PUEVSQU5EICh0LCAwKTsKKyAgICAgIHRoaXMt Pm9wMSA9IFRSRUVfT1BFUkFORCAodCwgMSk7CisgICAgICByZXR1cm47Cisg ICAgfQorCisgIGlmIChUUkVFX0NPREUgKHQpID09IFNTQV9OQU1FKQorICAg IGlmIChnYXNzaWduICpzdG10ID0gZHluX2Nhc3Q8Z2Fzc2lnbiAqPiAoU1NB X05BTUVfREVGX1NUTVQgKHQpKSkKKyAgICAgIHsKKwl0cmVlX2NvZGUgY29k ZSA9IGdpbXBsZV9hc3NpZ25fcmhzX2NvZGUgKHN0bXQpOworCWlmIChUUkVF X0NPREVfQ0xBU1MgKGNvZGUpID09IHRjY19jb21wYXJpc29uKQorCSAgewor CSAgICB0aGlzLT5jb2RlID0gY29kZTsKKwkgICAgdGhpcy0+b3AwID0gZ2lt cGxlX2Fzc2lnbl9yaHMxIChzdG10KTsKKwkgICAgdGhpcy0+b3AxID0gZ2lt cGxlX2Fzc2lnbl9yaHMyIChzdG10KTsKKwkgICAgcmV0dXJuOworCSAgfQor ICAgICAgfQorCisgIHRoaXMtPmNvZGUgPSBORV9FWFBSOworICB0aGlzLT5v cDAgPSB0OworICB0aGlzLT5vcDEgPSBidWlsZF96ZXJvX2NzdCAoVFJFRV9U WVBFICh0KSk7Cit9CmRpZmYgLS1naXQgYS9nY2MvdHJlZS12ZWN0b3JpemVy LmggYi9nY2MvdHJlZS12ZWN0b3JpemVyLmgKaW5kZXggODM3ZmI1YWI1MjUu LjYzMmYxMmEzMGRjIDEwMDY0NAotLS0gYS9nY2MvdHJlZS12ZWN0b3JpemVy LmgKKysrIGIvZ2NjL3RyZWUtdmVjdG9yaXplci5oCkBAIC0yNiw2ICsyNiw3 IEBAIHR5cGVkZWYgY2xhc3MgX3N0bXRfdmVjX2luZm8gKnN0bXRfdmVjX2lu Zm87CiAjaW5jbHVkZSAidHJlZS1kYXRhLXJlZi5oIgogI2luY2x1ZGUgInRy ZWUtaGFzaC10cmFpdHMuaCIKICNpbmNsdWRlICJ0YXJnZXQuaCIKKyNpbmNs dWRlICJoYXNoLXNldC5oIgogCiAvKiBVc2VkIGZvciBuYW1pbmcgb2YgbmV3 IHRlbXBvcmFyaWVzLiAgKi8KIGVudW0gdmVjdF92YXJfa2luZCB7CkBAIC0x NzcsNyArMTc4LDc4IEBAIHB1YmxpYzoKICNkZWZpbmUgU0xQX1RSRUVfVFdP X09QRVJBVE9SUyhTKQkJIChTKS0+dHdvX29wZXJhdG9ycwogI2RlZmluZSBT TFBfVFJFRV9ERUZfVFlQRShTKQkJCSAoUyktPmRlZl90eXBlCiAKKy8qIEtl eSBmb3IgbWFwIHRoYXQgcmVjb3JkcyBhc3NvY2lhdGlvbiBiZXR3ZWVuCisg ICBzY2FsYXIgY29uZGl0aW9ucyB1c2VkIGluIG1hc2tlZCBsb2FkcyBhbmQg Y29ycmVzcG9uZGluZworICAgbG9vcCBtYXNrLiBUaGUgbWFwIGlzIHBvcHVs YXRlZCBieSB2ZWN0X3JlY29yZF9sb29wX21hc2suCisgICB2ZWN0b3JpemFi bGVfY29uZGl0aW9uIHVzZXMgdGhlIG1hcCB0byBjaGVjayBpZiBzY2FsYXIK KyAgIGNvbmQgKG9yIGl0J3MgaW52ZXJzZSkgaGFzIGEgbG9vcCBtYXNrIGFz c29jaWF0ZWQgd2l0aCBpdCwKKyAgIGFuZCBpZiB5ZXMsIGFwcGxpZXMgbG9v cCBtYXNrIHRvIHJlc3VsdCBvZiB2ZWN0b3IgY29tcGFyaXNvbi4gICovCisg CitzdHJ1Y3Qgc2NhbGFyX2NvbmRfbWFza2VkX2tleQoreworICBzY2FsYXJf Y29uZF9tYXNrZWRfa2V5ICh0cmVlIHQsIHVuc2lnbmVkIG5jb3BpZXNfKQor ICAgIDogbmNvcGllcyAobmNvcGllc18pCisgIHsKKyAgICBnZXRfY29uZF9v cHNfZnJvbV90cmVlICh0KTsKKyAgfQorCisgIHZvaWQgZ2V0X2NvbmRfb3Bz X2Zyb21fdHJlZSAodHJlZSk7CisKKyAgdW5zaWduZWQgbmNvcGllczsKKyAg dHJlZV9jb2RlIGNvZGU7CisgIHRyZWUgb3AwOworICB0cmVlIG9wMTsKK307 CiAKK3RlbXBsYXRlPD4KK3N0cnVjdCBkZWZhdWx0X2hhc2hfdHJhaXRzPHNj YWxhcl9jb25kX21hc2tlZF9rZXk+Cit7CisgIHR5cGVkZWYgc2NhbGFyX2Nv bmRfbWFza2VkX2tleSBjb21wYXJlX3R5cGU7CisgIHR5cGVkZWYgc2NhbGFy X2NvbmRfbWFza2VkX2tleSB2YWx1ZV90eXBlOworCisgIHN0YXRpYyBpbmxp bmUgaGFzaHZhbF90CisgIGhhc2ggKHZhbHVlX3R5cGUgdikKKyAgeworICAg IGluY2hhc2g6Omhhc2ggaDsKKyAgICBoLmFkZF9pbnQgKHYuY29kZSk7Cisg ICAgaW5jaGFzaDo6YWRkX2V4cHIgKHYub3AwLCBoLCAwKTsKKyAgICBpbmNo YXNoOjphZGRfZXhwciAodi5vcDEsIGgsIDApOworICAgIGguYWRkX2ludCAo di5uY29waWVzKTsKKyAgICByZXR1cm4gaC5lbmQgKCk7CisgIH0KKworICBz dGF0aWMgaW5saW5lIGJvb2wKKyAgZXF1YWwgKHZhbHVlX3R5cGUgZXhpc3Rp bmcsIHZhbHVlX3R5cGUgY2FuZGlkYXRlKQorICB7CisgICAgcmV0dXJuIChl eGlzdGluZy5uY29waWVzID09IGNhbmRpZGF0ZS5uY29waWVzCisJICAgICYm IGV4aXN0aW5nLmNvZGUgPT0gY2FuZGlkYXRlLmNvZGUKKwkgICAgJiYgb3Bl cmFuZF9lcXVhbF9wIChleGlzdGluZy5vcDAsIGNhbmRpZGF0ZS5vcDAsIDAp CisJICAgICYmIG9wZXJhbmRfZXF1YWxfcCAoZXhpc3Rpbmcub3AxLCBjYW5k aWRhdGUub3AxLCAwKSk7CisgIH0KKworICBzdGF0aWMgaW5saW5lIHZvaWQK KyAgbWFya19lbXB0eSAodmFsdWVfdHlwZSAmdikKKyAgeworICAgIHYubmNv cGllcyA9IDA7CisgIH0KKworICBzdGF0aWMgaW5saW5lIGJvb2wKKyAgaXNf ZW1wdHkgKHZhbHVlX3R5cGUgdikKKyAgeworICAgIHJldHVybiB2Lm5jb3Bp ZXMgPT0gMDsKKyAgfQorCisgIHN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX2Rl bGV0ZWQgKHZhbHVlX3R5cGUgJikge30KKworICBzdGF0aWMgaW5saW5lIGJv b2wgaXNfZGVsZXRlZCAoY29uc3QgdmFsdWVfdHlwZSAmKQorICB7CisgICAg cmV0dXJuIGZhbHNlOworICB9CisKKyAgc3RhdGljIGlubGluZSB2b2lkIHJl bW92ZSAodmFsdWVfdHlwZSAmKSB7fQorfTsKKwordHlwZWRlZiBoYXNoX3Nl dDxzY2FsYXJfY29uZF9tYXNrZWRfa2V5PiBzY2FsYXJfY29uZF9tYXNrZWRf c2V0X3R5cGU7CiAKIC8qIERlc2NyaWJlcyB0d28gb2JqZWN0cyB3aG9zZSBh ZGRyZXNzZXMgbXVzdCBiZSB1bmVxdWFsIGZvciB0aGUgdmVjdG9yaXplZAog ICAgbG9vcCB0byBiZSB2YWxpZC4gICovCkBAIC0yNTgsNiArMzMwLDkgQEAg cHVibGljOgogICAvKiBDb3N0IGRhdGEgdXNlZCBieSB0aGUgdGFyZ2V0IGNv c3QgbW9kZWwuICAqLwogICB2b2lkICp0YXJnZXRfY29zdF9kYXRhOwogCisg IC8qIFNldCBvZiBzY2FsYXIgY29uZGl0aW9ucyB0aGF0IGhhdmUgbG9vcCBt YXNrIGFwcGxpZWQuICAqLworICBzY2FsYXJfY29uZF9tYXNrZWRfc2V0X3R5 cGUgc2NhbGFyX2NvbmRfbWFza2VkX3NldDsKKwogcHJpdmF0ZToKICAgc3Rt dF92ZWNfaW5mbyBuZXdfc3RtdF92ZWNfaW5mbyAoZ2ltcGxlICpzdG10KTsK ICAgdm9pZCBzZXRfdmluZm9fZm9yX3N0bXQgKGdpbXBsZSAqLCBzdG10X3Zl Y19pbmZvKTsKQEAgLTE2NDEsNyArMTcxNiw3IEBAIGV4dGVybiB2b2lkIHZl Y3RfZ2VuX3ZlY3Rvcl9sb29wX25pdGVycyAobG9vcF92ZWNfaW5mbywgdHJl ZSwgdHJlZSAqLAogZXh0ZXJuIHRyZWUgdmVjdF9oYWx2ZV9tYXNrX251bml0 cyAodHJlZSk7CiBleHRlcm4gdHJlZSB2ZWN0X2RvdWJsZV9tYXNrX251bml0 cyAodHJlZSk7CiBleHRlcm4gdm9pZCB2ZWN0X3JlY29yZF9sb29wX21hc2sg KGxvb3BfdmVjX2luZm8sIHZlY19sb29wX21hc2tzICosCi0JCQkJICAgdW5z aWduZWQgaW50LCB0cmVlKTsKKwkJCQkgICB1bnNpZ25lZCBpbnQsIHRyZWUs IHRyZWUpOwogZXh0ZXJuIHRyZWUgdmVjdF9nZXRfbG9vcF9tYXNrIChnaW1w bGVfc3RtdF9pdGVyYXRvciAqLCB2ZWNfbG9vcF9tYXNrcyAqLAogCQkJCXVu c2lnbmVkIGludCwgdHJlZSwgdW5zaWduZWQgaW50KTsKIAo= --000000000000fb666005945afcb9--