From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wr1-x42f.google.com (mail-wr1-x42f.google.com [IPv6:2a00:1450:4864:20::42f]) by sourceware.org (Postfix) with ESMTPS id 873CC3858D32; Fri, 25 Aug 2023 20:47:57 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 873CC3858D32 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com Received: by mail-wr1-x42f.google.com with SMTP id ffacd0b85a97d-31ad9155414so987630f8f.3; Fri, 25 Aug 2023 13:47:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1692996476; x=1693601276; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=4nITQmlzfK5gGyAfWjEyvMQDZGwOjnQhqhYW7ogl87Q=; b=qgvswiIzcTfStWFAZukBrRpWkby/91h8CZ2IiJjI35AvbFduRV08Gest5ch3VFf5En r02eKwDBWq7i5/S3lRBat42qLvGiXELO/Rvs/twz8BXUEL+j83gcLI+J+S/gWA3RNeDP vyorOj7WViDuBoUh+6bWTnoLYI5sB1ESSMBuxH/+0wGaH84FYpBWDhMwLQvinedARHjm VbV4CyYMvHVjaYgl0YKkONdepu/zUh4+q0RVauyWrh7Dc9Ywa3ESXYNCykCq8625Vj6E E8Np2jZHuGA3eqveMCBzfTVQTkcB7+ABL0ASqkvvn+Jua/+q84PftPRwHnB1dkOOAoyg zfsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692996476; x=1693601276; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=4nITQmlzfK5gGyAfWjEyvMQDZGwOjnQhqhYW7ogl87Q=; b=aNXCUZDhduHcR4i8LnBvUGL1a0PUYK6efLNep6C2h76VQmMcipANPyLS+TaPB4+4W2 YMykXCMh8UvQYUoYE/dDX8Bi+jOHYCtunuNppmPNV0gGOfiGOP2dkg1EcgO7E6RMplPe f4rbWrk7irFzdmVBFOZVx9q7TxINJDIuxYQA4obbBUxZE2tL4xgpCmF3McSn1fL2SCnf tGB34UvJCv3ZgNfSYRmdt30AcjT1WcfgDO1Ou/4zFXEyTCb9LNvNhsIDjDptpBDvqRl+ 4UC4cINZtfZTSZnBTalQ+nUlwR0ZCgyW19IVBdnaUpARwV+zSZJxLAK5meC6jCs38edd Mgcw== X-Gm-Message-State: AOJu0Yzd7NtMsIsAoDPSh/xlqQ9btfyqyLQryUe030EorYNb0GELCWxH /Gk8N8G2lhYQ+gejOhWeA8KhbUTCpW1HOLtm/s4= X-Google-Smtp-Source: AGHT+IFzmI8odnG++9IV35F4p4PHO2reiaIXAqtQoD7sVm9thMIwba/2Ih9ZrhLT8ftBov5Q1I+v+4TzeXGZTJEXgWQ= X-Received: by 2002:adf:f80b:0:b0:317:df82:2868 with SMTP id s11-20020adff80b000000b00317df822868mr14818115wrp.26.1692996475960; Fri, 25 Aug 2023 13:47:55 -0700 (PDT) MIME-Version: 1.0 References: <059ffebd230df2dbbac3f138ec85016bb7a7306a.camel@redhat.com> In-Reply-To: From: Guillaume Gomez Date: Fri, 25 Aug 2023 22:47:44 +0200 Message-ID: Subject: Re: [PATCH] libgccjit: Add support for `restrict` attribute on function parameters To: Antoni Boucher Cc: David Malcolm , gcc-patches@gcc.gnu.org, jit@gcc.gnu.org Content-Type: multipart/mixed; boundary="0000000000008e57ec0603c57523" X-Spam-Status: No, score=-9.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM,GIT_PATCH_0,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --0000000000008e57ec0603c57523 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable After more investigations, it seems like the fault was on our side as we were calling `gcc_jit_type_get_restrict` on types that weren't pointers. I added a check for that in `gcc_jit_type_get_restrict` directly as well. We will continue our investigation to be sure we didn't miss anything. Le mar. 22 ao=C3=BBt 2023 =C3=A0 17:26, Antoni Boucher a= =C3=A9crit : > > Since the tests in the PR for rustc_codegen_gcc > (https://github.com/rust-lang/rustc_codegen_gcc/pull/312) currently > fails, let's wait a bit before merging the patch, in case it would need > some fixes. > > On Thu, 2023-08-17 at 20:09 +0200, Guillaume Gomez via Jit wrote: > > Quick question: do you plan to make the merge or should I ask Antoni? > > > > Le jeu. 17 ao=C3=BBt 2023 =C3=A0 17:59, Guillaume Gomez > > > > a =C3=A9crit : > > > > > Thanks for the review! > > > > > > Le jeu. 17 ao=C3=BBt 2023 =C3=A0 17:50, David Malcolm a > > > =C3=A9crit > > > : > > > > > > > > On Thu, 2023-08-17 at 17:41 +0200, Guillaume Gomez wrote: > > > > > And now I just discovered that a lot of commits from Antoni's > > > > > fork > > > > > haven't been sent upstream which is why the ABI count is so > > > > > high in > > > > > his repository. Fixed that as well. > > > > > > > > Thanks for the updated patch; I was about to comment on that. > > > > > > > > This version is good for gcc trunk. > > > > > > > > Dave > > > > > > > > > > > > > > Le jeu. 17 ao=C3=BBt 2023 =C3=A0 17:26, Guillaume Gomez > > > > > a =C3=A9crit : > > > > > > > > > > > > Antoni spot a typo I made: > > > > > > > > > > > > I added `LIBGCCJIT_HAVE_gcc_jit_type_get_size` instead of > > > > > > `LIBGCCJIT_HAVE_gcc_jit_type_get_restrict`. Fixed in this > > > > > > patch, > > > > > > sorry > > > > > > for the noise. > > > > > > > > > > > > Le jeu. 17 ao=C3=BBt 2023 =C3=A0 11:30, Guillaume Gomez > > > > > > a =C3=A9crit : > > > > > > > > > > > > > > Hi Dave, > > > > > > > > > > > > > > > What kind of testing has the patch had? (e.g. did you run > > > > > > > > "make > > > > > > > > check- > > > > > > > > jit" ? Has this been in use on real Rust code?) > > > > > > > > > > > > > > I tested it as Rust backend directly on this code: > > > > > > > > > > > > > > ``` > > > > > > > pub fn foo(a: &mut i32, b: &mut i32, c: &i32) { > > > > > > > *a +=3D *c; > > > > > > > *b +=3D *c; > > > > > > > } > > > > > > > ``` > > > > > > > > > > > > > > I ran it with `rustc` (and the GCC backend) with the > > > > > > > following > > > > > > > flags: > > > > > > > `-C link-args=3D-lc --emit=3Dasm -O --crate-type=3Dlib` which > > > > > > > gave the > > > > > > > diff > > > > > > > you can see in the attached file. Explanations: the diff on > > > > > > > the > > > > > > > right > > > > > > > has the `__restrict__` attribute used whereas on the left > > > > > > > it is > > > > > > > the > > > > > > > current version where we don't handle it. > > > > > > > > > > > > > > As for C testing, I used this code: > > > > > > > > > > > > > > ``` > > > > > > > void t(int *__restrict__ a, int *__restrict__ b, char > > > > > > > *__restrict__ c) { > > > > > > > *a +=3D *c; > > > > > > > *b +=3D *c; > > > > > > > } > > > > > > > ``` > > > > > > > > > > > > > > (without the `__restrict__` of course when I need to have a > > > > > > > witness > > > > > > > ASM). I attached the diff as well, this time the file with > > > > > > > the > > > > > > > use of > > > > > > > `__restrict__` in on the left. I compiled with the > > > > > > > following > > > > > > > flags: > > > > > > > `-S -O3`. > > > > > > > > > > > > > > > Please add a feature macro: > > > > > > > > #define LIBGCCJIT_HAVE_gcc_jit_type_get_restrict > > > > > > > > (see the similar ones in the header). > > > > > > > > > > > > > > I added `LIBGCCJIT_HAVE_gcc_jit_type_get_size` and extended > > > > > > > the > > > > > > > documentation as well to mention the ABI change. > > > > > > > > > > > > > > > Please add a new ABI tag (LIBGCCJIT_ABI_25 ?), rather > > > > > > > > than > > > > > > > > adding this > > > > > > > > to ABI_0. > > > > > > > > > > > > > > I added `LIBGCCJIT_ABI_34` as `LIBGCCJIT_ABI_33` was the > > > > > > > last > > > > > > > one. > > > > > > > > > > > > > > > This refers to a "cold attribute"; is this a vestige of a > > > > > > > > copy- > > > > > > > > and- > > > > > > > > paste from a different test case? > > > > > > > > > > > > > > It is a vestige indeed... Missed this one. > > > > > > > > > > > > > > > I see that the test scans the generated assembler. Does > > > > > > > > the > > > > > > > > test > > > > > > > > actually verify that restrict has an effect, or was that > > > > > > > > another > > > > > > > > vestige from a different test case? > > > > > > > > > > > > > > No, this time it's what I wanted. Please see the C diff I > > > > > > > provided > > > > > > > above to see that the ASM has a small diff that allowed me > > > > > > > to > > > > > > > confirm > > > > > > > that the `__restrict__` attribute was correctly set. > > > > > > > > > > > > > > > If this test is meant to run at -O3 and thus can't be > > > > > > > > part of > > > > > > > > test- > > > > > > > > combination.c, please add a comment about it to > > > > > > > > gcc/testsuite/jit.dg/all-non-failing-tests.h (in the > > > > > > > > alphabetical > > > > > > > > place). > > > > > > > > > > > > > > Below `-O3`, this ASM difference doesn't appear > > > > > > > unfortunately. > > > > > > > > > > > > > > > The patch also needs to add documentation for the new > > > > > > > > entrypoint (in > > > > > > > > topics/types.rst), and for the new ABI tag (in > > > > > > > > topics/compatibility.rst). > > > > > > > > > > > > > > Added! > > > > > > > > > > > > > > > Thanks again for the patch; hope the above is > > > > > > > > constructive > > > > > > > > > > > > > > It was incredibly useful! Thanks for taking time to writing > > > > > > > down > > > > > > > the > > > > > > > explanations. > > > > > > > > > > > > > > The new patch is attached to this email. > > > > > > > > > > > > > > Cordially. > > > > > > > > > > > > > > Le jeu. 17 ao=C3=BBt 2023 =C3=A0 01:06, David Malcolm > > > > > > > > > > > > > > a =C3=A9crit : > > > > > > > > > > > > > > > > On Wed, 2023-08-16 at 22:06 +0200, Guillaume Gomez via > > > > > > > > Jit > > > > > > > > wrote: > > > > > > > > > My apologies, forgot to run the commit checkers. Here's > > > > > > > > > the > > > > > > > > > commit > > > > > > > > > with the errors fixed. > > > > > > > > > > > > > > > > > > Le mer. 16 ao=C3=BBt 2023 =C3=A0 18:32, Guillaume Gomez > > > > > > > > > a =C3=A9crit : > > > > > > > > > > > > > > > > > > > > Hi, > > > > > > > > > > > > > > > > Hi Guillaume, thanks for the patch. > > > > > > > > > > > > > > > > > > > > > > > > > > > > This patch adds the possibility to specify the > > > > > > > > > > __restrict__ > > > > > > > > > > attribute > > > > > > > > > > for function parameters. It is used by the Rust GCC > > > > > > > > > > backend. > > > > > > > > > > > > > > > > What kind of testing has the patch had? (e.g. did you run > > > > > > > > "make > > > > > > > > check- > > > > > > > > jit" ? Has this been in use on real Rust code?) > > > > > > > > > > > > > > > > Overall, this patch looks close to being ready, but some > > > > > > > > nits > > > > > > > > below... > > > > > > > > > > > > > > > > [...] > > > > > > > > > > > > > > > > > diff --git a/gcc/jit/libgccjit.h b/gcc/jit/libgccjit.h > > > > > > > > > index 60eaf39bff6..2e0d08a06d8 100644 > > > > > > > > > --- a/gcc/jit/libgccjit.h > > > > > > > > > +++ b/gcc/jit/libgccjit.h > > > > > > > > > @@ -635,6 +635,10 @@ gcc_jit_type_get_const > > > > > > > > > (gcc_jit_type > > > > > > > > > *type); > > > > > > > > > extern gcc_jit_type * > > > > > > > > > gcc_jit_type_get_volatile (gcc_jit_type *type); > > > > > > > > > > > > > > > > > > +/* Given type "T", get type "restrict T". */ > > > > > > > > > +extern gcc_jit_type * > > > > > > > > > +gcc_jit_type_get_restrict (gcc_jit_type *type); > > > > > > > > > + > > > > > > > > > #define LIBGCCJIT_HAVE_SIZED_INTEGERS > > > > > > > > > > > > > > > > > > /* Given types LTYPE and RTYPE, return non-zero if > > > > > > > > > they are > > > > > > > > compatible. > > > > > > > > > > > > > > > > Please add a feature macro: > > > > > > > > #define LIBGCCJIT_HAVE_gcc_jit_type_get_restrict > > > > > > > > (see the similar ones in the header). > > > > > > > > > > > > > > > > > diff --git a/gcc/jit/libgccjit.map > > > > > > > > > b/gcc/jit/libgccjit.map > > > > > > > > > index e52de0057a5..b7289b13845 100644 > > > > > > > > > --- a/gcc/jit/libgccjit.map > > > > > > > > > +++ b/gcc/jit/libgccjit.map > > > > > > > > > @@ -104,6 +104,7 @@ LIBGCCJIT_ABI_0 > > > > > > > > > gcc_jit_type_as_object; > > > > > > > > > gcc_jit_type_get_const; > > > > > > > > > gcc_jit_type_get_pointer; > > > > > > > > > + gcc_jit_type_get_restrict; > > > > > > > > > gcc_jit_type_get_volatile; > > > > > > > > > > > > > > > > Please add a new ABI tag (LIBGCCJIT_ABI_25 ?), rather > > > > > > > > than > > > > > > > > adding this > > > > > > > > to ABI_0. > > > > > > > > > > > > > > > > > diff --git a/gcc/testsuite/jit.dg/test-restrict.c > > > > > > > > b/gcc/testsuite/jit.dg/test-restrict.c > > > > > > > > > new file mode 100644 > > > > > > > > > index 00000000000..4c8c4407f91 > > > > > > > > > --- /dev/null > > > > > > > > > +++ b/gcc/testsuite/jit.dg/test-restrict.c > > > > > > > > > @@ -0,0 +1,77 @@ > > > > > > > > > +/* { dg-do compile { target x86_64-*-* } } */ > > > > > > > > > + > > > > > > > > > +#include > > > > > > > > > +#include > > > > > > > > > + > > > > > > > > > +#include "libgccjit.h" > > > > > > > > > + > > > > > > > > > +/* We don't want set_options() in harness.h to set -O3 > > > > > > > > > to > > > > > > > > > see that > > > > > > > > the cold > > > > > > > > > + attribute affects the optimizations. */ > > > > > > > > > > > > > > > > This refers to a "cold attribute"; is this a vestige of a > > > > > > > > copy- > > > > > > > > and- > > > > > > > > paste from a different test case? > > > > > > > > > > > > > > > > I see that the test scans the generated assembler. Does > > > > > > > > the > > > > > > > > test > > > > > > > > actually verify that restrict has an effect, or was that > > > > > > > > another > > > > > > > > vestige from a different test case? > > > > > > > > > > > > > > > > > +#define TEST_ESCHEWS_SET_OPTIONS > > > > > > > > > +static void set_options (gcc_jit_context *ctxt, const > > > > > > > > > char > > > > > > > > > *argv0) > > > > > > > > > +{ > > > > > > > > > + // Set "-O3". > > > > > > > > > + gcc_jit_context_set_int_option(ctxt, > > > > > > > > GCC_JIT_INT_OPTION_OPTIMIZATION_LEVEL, 3); > > > > > > > > > +} > > > > > > > > > + > > > > > > > > > +#define TEST_COMPILING_TO_FILE > > > > > > > > > +#define OUTPUT_KIND GCC_JIT_OUTPUT_KIND_ASSEMBLER > > > > > > > > > +#define OUTPUT_FILENAME "output-of-test-restrict.c.s" > > > > > > > > > +#include "harness.h" > > > > > > > > > + > > > > > > > > > +void > > > > > > > > > +create_code (gcc_jit_context *ctxt, void *user_data) > > > > > > > > > +{ > > > > > > > > > + /* Let's try to inject the equivalent of: > > > > > > > > > +void t(int *__restrict__ a, int *__restrict__ b, char > > > > > > > > > *__restrict__ > > > > > > > > c) { > > > > > > > > > + *a +=3D *c; > > > > > > > > > + *b +=3D *c; > > > > > > > > > +} > > > > > > > > > + */ > > > > > > > > > + gcc_jit_type *int_type =3D > > > > > > > > > + gcc_jit_context_get_type (ctxt, > > > > > > > > > GCC_JIT_TYPE_INT); > > > > > > > > > + gcc_jit_type *pint_type =3D > > > > > > > > > gcc_jit_type_get_pointer(int_type); > > > > > > > > > + gcc_jit_type *pint_restrict_type =3D > > > > > > > > gcc_jit_type_get_restrict(pint_type); > > > > > > > > > + > > > > > > > > > + gcc_jit_type *void_type =3D > > > > > > > > > + gcc_jit_context_get_type (ctxt, > > > > > > > > > GCC_JIT_TYPE_VOID); > > > > > > > > > + > > > > > > > > > + gcc_jit_param *a =3D > > > > > > > > > + gcc_jit_context_new_param (ctxt, NULL, > > > > > > > > pint_restrict_type, "a"); > > > > > > > > > + gcc_jit_param *b =3D > > > > > > > > > + gcc_jit_context_new_param (ctxt, NULL, > > > > > > > > pint_restrict_type, "b"); > > > > > > > > > + gcc_jit_param *c =3D > > > > > > > > > + gcc_jit_context_new_param (ctxt, NULL, > > > > > > > > pint_restrict_type, "c"); > > > > > > > > > + gcc_jit_param *params[3] =3D {a, b, c}; > > > > > > > > > + > > > > > > > > > + gcc_jit_function *func_t =3D > > > > > > > > > + gcc_jit_context_new_function (ctxt, NULL, > > > > > > > > > + > > > > > > > > > GCC_JIT_FUNCTION_EXPORTED, > > > > > > > > > + void_type, > > > > > > > > > + "t", > > > > > > > > > + 3, params, > > > > > > > > > + 0); > > > > > > > > > + > > > > > > > > > + gcc_jit_block *block =3D gcc_jit_function_new_block > > > > > > > > > (func_t, > > > > > > > > NULL); > > > > > > > > > + > > > > > > > > > + /* *a +=3D *c; */ > > > > > > > > > + gcc_jit_block_add_assignment_op ( > > > > > > > > > + block, NULL, > > > > > > > > > + gcc_jit_rvalue_dereference > > > > > > > > > (gcc_jit_param_as_rvalue > > > > > > > > (a), NULL), > > > > > > > > > + GCC_JIT_BINARY_OP_PLUS, > > > > > > > > > + gcc_jit_lvalue_as_rvalue ( > > > > > > > > > + gcc_jit_rvalue_dereference > > > > > > > > (gcc_jit_param_as_rvalue (c), NULL))); > > > > > > > > > + /* *b +=3D *c; */ > > > > > > > > > + gcc_jit_block_add_assignment_op ( > > > > > > > > > + block, NULL, > > > > > > > > > + gcc_jit_rvalue_dereference > > > > > > > > > (gcc_jit_param_as_rvalue > > > > > > > > (b), NULL), > > > > > > > > > + GCC_JIT_BINARY_OP_PLUS, > > > > > > > > > + gcc_jit_lvalue_as_rvalue ( > > > > > > > > > + gcc_jit_rvalue_dereference > > > > > > > > (gcc_jit_param_as_rvalue (c), NULL))); > > > > > > > > > + > > > > > > > > > + gcc_jit_block_end_with_void_return (block, NULL); > > > > > > > > > +} > > > > > > > > > + > > > > > > > > > +/* { dg-final { jit-verify-output-file-was-created "" > > > > > > > > > } } */ > > > > > > > > > +/* { dg-final { jit-verify-assembler-output "addl > > > > > > > > > %eax, > > > > > > > > > (%rdi) > > > > > > > > > + addl %eax, (%rsi)" } } */ > > > > > > > > > -- > > > > > > > > > 2.34.1 > > > > > > > > > > > > > > > > > > > > > > > > > If this test is meant to run at -O3 and thus can't be > > > > > > > > part of > > > > > > > > test- > > > > > > > > combination.c, please add a comment about it to > > > > > > > > gcc/testsuite/jit.dg/all-non-failing-tests.h (in the > > > > > > > > alphabetical > > > > > > > > place). > > > > > > > > > > > > > > > > The patch also needs to add documentation for the new > > > > > > > > entrypoint (in > > > > > > > > topics/types.rst), and for the new ABI tag (in > > > > > > > > topics/compatibility.rst). > > > > > > > > > > > > > > > > > > > > > > > > Thanks again for the patch; hope the above is > > > > > > > > constructive > > > > > > > > Dave > > > > > > > > > > > > > > > > --0000000000008e57ec0603c57523 Content-Type: text/x-patch; charset="US-ASCII"; name="0001-PATCH-Add-support-for-restrict-attribute-on-function.patch" Content-Disposition: attachment; filename="0001-PATCH-Add-support-for-restrict-attribute-on-function.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_llr2coye0 RnJvbSBkY2RjZmRjYjlkODE3ZmY1OWM2ZTFmNDQ4YmM0ZTYzOTA0OWVkODkzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHdWlsbGF1bWUgR29tZXogPGd1aWxsYXVtZTEuZ29tZXpAZ21h aWwuY29tPgpEYXRlOiBGcmksIDExIEF1ZyAyMDIzIDIyOjQ4OjExICswMjAwClN1YmplY3Q6IFtQ QVRDSF0gW1BBVENIXSBBZGQgc3VwcG9ydCBmb3IgYHJlc3RyaWN0YCBhdHRyaWJ1dGUgb24gZnVu Y3Rpb24KIHBhcmFtZXRlcnMKCmdjYy9qaXQvQ2hhbmdlbG9nOgoJKiBqaXQtcGxheWJhY2suY2M6 IFJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMuCgkqIGppdC1wbGF5YmFjay5o OiBBZGQgZ2V0X3Jlc3RyaWN0IG1ldGhvZC4KCSogaml0LXJlY29yZGluZy5jYzogQWRkIGdldF9y ZXN0cmljdCBtZXRob2RzLgoJKiBqaXQtcmVjb3JkaW5nLmg6IEFkZCBnZXRfcmVzdHJpY3QgbWV0 aG9kcy4KCSogbGliZ2Njaml0KysuaDogQWRkIGdldF9yZXN0cmljdCBtZXRob2RzLgoJKiBsaWJn Y2NqaXQuY2M6IEFkZCBnY2Nfaml0X3R5cGVfZ2V0X3Jlc3RyaWN0LgoJKiBsaWJnY2NqaXQuaDog RGVjbGFyZSBnY2Nfaml0X3R5cGVfZ2V0X3Jlc3RyaWN0LgoJKiBsaWJnY2NqaXQubWFwOiBEZWNs YXJlIGdjY19qaXRfdHlwZV9nZXRfcmVzdHJpY3QuCgpnY2MvdGVzdHN1aXRlL0NoYW5nZUxvZzoK CSogaml0LmRnL3Rlc3QtcmVzdHJpY3QuYzogQWRkIHRlc3QgZm9yIF9fcmVzdHJpY3RfXyBhdHRy aWJ1dGUuCgkqIGppdC5kZy9hbGwtbm9uLWZhaWxpbmctdGVzdHMuaDogQWRkIHRlc3QtcmVzdHJp Y3QuYyB0byB0aGUgbGlzdC4KCmdjYy9qaXQvQ2hhbmdlTG9nOgoJKiBkb2NzL3RvcGljcy9jb21w YXRpYmlsaXR5LnJzdDogQWRkIGRvY3VtZW50YXRpb24gZm9yIExJQkdDQ0pJVF9BQklfMjUuCgkq IGRvY3MvdG9waWNzL3R5cGVzLnJzdDogQWRkIGRvY3VtZW50YXRpb24gZm9yIGdjY19qaXRfdHlw ZV9nZXRfcmVzdHJpY3QuCgpTaWduZWQtb2ZmLWJ5OiBHdWlsbGF1bWUgR29tZXogPGd1aWxsYXVt ZTEuZ29tZXpAZ21haWwuY29tPgotLS0KIGdjYy9qaXQvZG9jcy90b3BpY3MvY29tcGF0aWJpbGl0 eS5yc3QgICAgICAgIHwgIDcgKysKIGdjYy9qaXQvZG9jcy90b3BpY3MvdHlwZXMucnN0ICAgICAg ICAgICAgICAgIHwgMTIgKysrCiBnY2Mvaml0L2ppdC1wbGF5YmFjay5jYyAgICAgICAgICAgICAg ICAgICAgICB8ICAyICstCiBnY2Mvaml0L2ppdC1wbGF5YmFjay5oICAgICAgICAgICAgICAgICAg ICAgICB8ICA1ICsrCiBnY2Mvaml0L2ppdC1yZWNvcmRpbmcuY2MgICAgICAgICAgICAgICAgICAg ICB8IDQ3ICsrKysrKysrKysrKwogZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmggICAgICAgICAgICAg ICAgICAgICAgfCAzMCArKysrKysrLQogZ2NjL2ppdC9saWJnY2NqaXQrKy5oICAgICAgICAgICAg ICAgICAgICAgICAgfCAgNiArKwogZ2NjL2ppdC9saWJnY2NqaXQuY2MgICAgICAgICAgICAgICAg ICAgICAgICAgfCAxNSArKysrCiBnY2Mvaml0L2xpYmdjY2ppdC5oICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICA5ICsrKwogZ2NjL2ppdC9saWJnY2NqaXQubWFwICAgICAgICAgICAgICAgICAg ICAgICAgfCAgNSArKwogZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvYWxsLW5vbi1mYWlsaW5nLXRlc3Rz LmggfCAgMyArCiBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LXJlc3RyaWN0LmMgICAgICAgICB8 IDc3ICsrKysrKysrKysrKysrKysrKysrCiAxMiBmaWxlcyBjaGFuZ2VkLCAyMTYgaW5zZXJ0aW9u cygrKSwgMiBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2pp dC5kZy90ZXN0LXJlc3RyaWN0LmMKCmRpZmYgLS1naXQgYS9nY2Mvaml0L2RvY3MvdG9waWNzL2Nv bXBhdGliaWxpdHkucnN0IGIvZ2NjL2ppdC9kb2NzL3RvcGljcy9jb21wYXRpYmlsaXR5LnJzdApp bmRleCBmNGZmYTA3ZWM0OC4uZWJlZGU0NDBlZTQgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvZG9jcy90 b3BpY3MvY29tcGF0aWJpbGl0eS5yc3QKKysrIGIvZ2NjL2ppdC9kb2NzL3RvcGljcy9jb21wYXRp YmlsaXR5LnJzdApAQCAtMzcxLDMgKzM3MSwxMCBAQCBhbGlnbm1lbnQgb2YgYSB2YXJpYWJsZToK IAogICAqIDpmdW5jOmBnY2Nfaml0X2x2YWx1ZV9zZXRfYWxpZ25tZW50YAogICAqIDpmdW5jOmBn Y2Nfaml0X2x2YWx1ZV9nZXRfYWxpZ25tZW50YAorCisuLiBfTElCR0NDSklUX0FCSV8yNToKKwor YGBMSUJHQ0NKSVRfQUJJXzI1YGAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tCitgYExJQkdDQ0pJVF9B QklfMjVgYCBjb3ZlcnMgdGhlIGFkZGl0aW9uIG9mCis6ZnVuYzpgZ2NjX2ppdF90eXBlX2dldF9y ZXN0cmljdGAKZGlmZiAtLWdpdCBhL2djYy9qaXQvZG9jcy90b3BpY3MvdHlwZXMucnN0IGIvZ2Nj L2ppdC9kb2NzL3RvcGljcy90eXBlcy5yc3QKaW5kZXggZjVmMmFhYzFmMGMuLmQ4YzFkMTVkNjlk IDEwMDY0NAotLS0gYS9nY2Mvaml0L2RvY3MvdG9waWNzL3R5cGVzLnJzdAorKysgYi9nY2Mvaml0 L2RvY3MvdG9waWNzL3R5cGVzLnJzdApAQCAtNTQxLDMgKzU0MSwxNSBAQCBSZWZsZWN0aW9uIEFQ SQogICAgLi4gY29kZS1ibG9jazo6IGMKIAogICAgICAgI2lmZGVmIExJQkdDQ0pJVF9IQVZFX1NJ WkVEX0lOVEVHRVJTCisKKy4uIGZ1bmN0aW9uOjogIGdjY19qaXRfdHlwZSAqXAorICAgICAgICAg ICAgICAgZ2NjX2ppdF90eXBlX2dldF9yZXN0cmljdCAoZ2NjX2ppdF90eXBlICp0eXBlKQorCisg ICAgIEdpdmVuIHR5cGUgIlQiLCBnZXQgdHlwZSAicmVzdHJpY3QgVCIuCisKKyAgIFRoaXMgZW50 cnlwb2ludCB3YXMgYWRkZWQgaW4gOnJlZjpgTElCR0NDSklUX0FCSV8yNWA7IHlvdSBjYW4gdGVz dCBmb3IKKyAgIGl0cyBwcmVzZW5jZSB1c2luZworCisgICAuLiBjb2RlLWJsb2NrOjogYworCisg ICAgICAjaWZkZWYgTElCR0NDSklUX0hBVkVfZ2NjX2ppdF90eXBlX2dldF9yZXN0cmljdApkaWZm IC0tZ2l0IGEvZ2NjL2ppdC9qaXQtcGxheWJhY2suY2MgYi9nY2Mvaml0L2ppdC1wbGF5YmFjay5j YwppbmRleCBlMDZmMTYxYWFkOS4uOWI3NTczODJmN2EgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvaml0 LXBsYXliYWNrLmNjCisrKyBiL2djYy9qaXQvaml0LXBsYXliYWNrLmNjCkBAIC0zMzkzLDcgKzMz OTMsNyBAQCBpZiAodCkgXAogICBOQU1FX1RZUEUgKGNvbXBsZXhfZmxvYXRfdHlwZV9ub2RlLCAi Y29tcGxleCBmbG9hdCIpOwogICBOQU1FX1RZUEUgKGNvbXBsZXhfZG91YmxlX3R5cGVfbm9kZSwg ImNvbXBsZXggZG91YmxlIik7CiAgIE5BTUVfVFlQRSAoY29tcGxleF9sb25nX2RvdWJsZV90eXBl X25vZGUsICJjb21wbGV4IGxvbmcgZG91YmxlIik7Ci0gIAorCiAgIG1fY29uc3RfY2hhcl9wdHIg PSBidWlsZF9wb2ludGVyX3R5cGUoCiAgICAgYnVpbGRfcXVhbGlmaWVkX3R5cGUgKGNoYXJfdHlw ZV9ub2RlLCBUWVBFX1FVQUxfQ09OU1QpKTsKIApkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9qaXQtcGxh eWJhY2suaCBiL2djYy9qaXQvaml0LXBsYXliYWNrLmgKaW5kZXggODgzMTU5ZjAzYzMuLjQzOGYz OTVmNmQ5IDEwMDY0NAotLS0gYS9nY2Mvaml0L2ppdC1wbGF5YmFjay5oCisrKyBiL2djYy9qaXQv aml0LXBsYXliYWNrLmgKQEAgLTQ0Niw2ICs0NDYsMTEgQEAgcHVibGljOgogICAgIHJldHVybiBu ZXcgdHlwZSAoYnVpbGRfcXVhbGlmaWVkX3R5cGUgKG1faW5uZXIsIFRZUEVfUVVBTF9WT0xBVElM RSkpOwogICB9CiAKKyAgdHlwZSAqZ2V0X3Jlc3RyaWN0ICgpIGNvbnN0CisgIHsKKyAgICByZXR1 cm4gbmV3IHR5cGUgKGJ1aWxkX3F1YWxpZmllZF90eXBlIChtX2lubmVyLCBUWVBFX1FVQUxfUkVT VFJJQ1QpKTsKKyAgfQorCiAgIHR5cGUgKmdldF9hbGlnbmVkIChzaXplX3QgYWxpZ25tZW50X2lu X2J5dGVzKSBjb25zdDsKICAgdHlwZSAqZ2V0X3ZlY3RvciAoc2l6ZV90IG51bV91bml0cykgY29u c3Q7CiAKZGlmZiAtLWdpdCBhL2djYy9qaXQvaml0LXJlY29yZGluZy5jYyBiL2djYy9qaXQvaml0 LXJlY29yZGluZy5jYwppbmRleCBkZjAzNjhmZjhmNy4uMzI2YzhjMjgwOWYgMTAwNjQ0Ci0tLSBh L2djYy9qaXQvaml0LXJlY29yZGluZy5jYworKysgYi9nY2Mvaml0L2ppdC1yZWNvcmRpbmcuY2MK QEAgLTIyNjcsNiArMjI2NywxOSBAQCByZWNvcmRpbmc6OnR5cGU6OmdldF9jb25zdCAoKQogICBy ZXR1cm4gcmVzdWx0OwogfQogCisvKiBHaXZlbiBhIHR5cGUgVCwgZ2V0IHRoZSB0eXBlIHJlc3Ry aWN0IFQuCisKKyAgIEltcGxlbWVudHMgdGhlIHBvc3QtZXJyb3ItY2hlY2tpbmcgcGFydCBvZgor ICAgZ2NjX2ppdF90eXBlX2dldF9yZXN0cmljdC4gICovCisKK3JlY29yZGluZzo6dHlwZSAqCity ZWNvcmRpbmc6OnR5cGU6OmdldF9yZXN0cmljdCAoKQoreworICByZWNvcmRpbmc6OnR5cGUgKnJl c3VsdCA9IG5ldyBtZW1lbnRvX29mX2dldF9yZXN0cmljdCAodGhpcyk7CisgIG1fY3R4dC0+cmVj b3JkIChyZXN1bHQpOworICByZXR1cm4gcmVzdWx0OworfQorCiAvKiBHaXZlbiBhIHR5cGUgVCwg Z2V0IHRoZSB0eXBlIHZvbGF0aWxlIFQuCiAKICAgIEltcGxlbWVudHMgdGhlIHBvc3QtZXJyb3It Y2hlY2tpbmcgcGFydCBvZgpAQCAtMjk2MCw2ICsyOTczLDQwIEBAIHJlY29yZGluZzo6bWVtZW50 b19vZl9nZXRfdm9sYXRpbGU6OndyaXRlX3JlcHJvZHVjZXIgKHJlcHJvZHVjZXIgJnIpCiAJICAg ci5nZXRfaWRlbnRpZmllcl9hc190eXBlIChtX290aGVyX3R5cGUpKTsKIH0KIAorLyogVGhlIGlt cGxlbWVudGF0aW9uIG9mIGNsYXNzIGdjYzo6aml0OjpyZWNvcmRpbmc6Om1lbWVudG9fb2ZfZ2V0 X3Jlc3RyaWN0LiAgKi8KKworLyogSW1wbGVtZW50YXRpb24gb2YgcHVyZSB2aXJ0dWFsIGhvb2sg cmVjb3JkaW5nOjptZW1lbnRvOjpyZXBsYXlfaW50bworICAgZm9yIHJlY29yZGluZzo6bWVtZW50 b19vZl9nZXRfcmVzdHJpY3QuICAqLworCit2b2lkCityZWNvcmRpbmc6Om1lbWVudG9fb2ZfZ2V0 X3Jlc3RyaWN0OjpyZXBsYXlfaW50byAocmVwbGF5ZXIgKikKK3sKKyAgc2V0X3BsYXliYWNrX29i aiAobV9vdGhlcl90eXBlLT5wbGF5YmFja190eXBlICgpLT5nZXRfcmVzdHJpY3QgKCkpOworfQor CisvKiBJbXBsZW1lbnRhdGlvbiBvZiByZWNvcmRpbmc6Om1lbWVudG86Om1ha2VfZGVidWdfc3Ry aW5nIGZvcgorICAgcmVzdWx0cyBvZiBnZXRfcmVzdHJpY3QsIHByZXBlbmRpbmcgInJlc3RyaWN0 ICIuICAqLworCityZWNvcmRpbmc6OnN0cmluZyAqCityZWNvcmRpbmc6Om1lbWVudG9fb2ZfZ2V0 X3Jlc3RyaWN0OjptYWtlX2RlYnVnX3N0cmluZyAoKQoreworICByZXR1cm4gc3RyaW5nOjpmcm9t X3ByaW50ZiAobV9jdHh0LAorCQkJICAgICAgInJlc3RyaWN0ICVzIiwgbV9vdGhlcl90eXBlLT5n ZXRfZGVidWdfc3RyaW5nICgpKTsKK30KKworLyogSW1wbGVtZW50YXRpb24gb2YgcmVjb3JkaW5n OjptZW1lbnRvOjp3cml0ZV9yZXByb2R1Y2VyIGZvciByZXN0cmljdAorICAgdHlwZXMuICAqLwor Cit2b2lkCityZWNvcmRpbmc6Om1lbWVudG9fb2ZfZ2V0X3Jlc3RyaWN0Ojp3cml0ZV9yZXByb2R1 Y2VyIChyZXByb2R1Y2VyICZyKQoreworICBjb25zdCBjaGFyICppZCA9IHIubWFrZV9pZGVudGlm aWVyICh0aGlzLCAidHlwZSIpOworICByLndyaXRlICgiICBnY2Nfaml0X3R5cGUgKiVzID1cbiIK KwkgICAiICAgIGdjY19qaXRfdHlwZV9nZXRfcmVzdHJpY3QgKCVzKTtcbiIsCisJICAgaWQsCisJ ICAgci5nZXRfaWRlbnRpZmllcl9hc190eXBlIChtX290aGVyX3R5cGUpKTsKK30KKwogLyogVGhl IGltcGxlbWVudGF0aW9uIG9mIGNsYXNzIGdjYzo6aml0OjpyZWNvcmRpbmc6Om1lbWVudG9fb2Zf Z2V0X2FsaWduZWQuICAqLwogCiAvKiBJbXBsZW1lbnRhdGlvbiBvZiBwdXJlIHZpcnR1YWwgaG9v ayByZWNvcmRpbmc6Om1lbWVudG86OnJlcGxheV9pbnRvCmRpZmYgLS1naXQgYS9nY2Mvaml0L2pp dC1yZWNvcmRpbmcuaCBiL2djYy9qaXQvaml0LXJlY29yZGluZy5oCmluZGV4IDQwMGNmMzQ1NjAw Li40YTgwODI5OTFmYiAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmgKKysrIGIv Z2NjL2ppdC9qaXQtcmVjb3JkaW5nLmgKQEAgLTUyNCw2ICs1MjQsNyBAQCBwdWJsaWM6CiAgIHR5 cGUgKmdldF9wb2ludGVyICgpOwogICB0eXBlICpnZXRfY29uc3QgKCk7CiAgIHR5cGUgKmdldF92 b2xhdGlsZSAoKTsKKyAgdHlwZSAqZ2V0X3Jlc3RyaWN0ICgpOwogICB0eXBlICpnZXRfYWxpZ25l ZCAoc2l6ZV90IGFsaWdubWVudF9pbl9ieXRlcyk7CiAgIHR5cGUgKmdldF92ZWN0b3IgKHNpemVf dCBudW1fdW5pdHMpOwogCkBAIC01NjgsNiArNTY5LDcgQEAgcHVibGljOgogICB2aXJ0dWFsIGJv b2wgaXNfYm9vbCAoKSBjb25zdCA9IDA7CiAgIHZpcnR1YWwgdHlwZSAqaXNfcG9pbnRlciAoKSA9 IDA7CiAgIHZpcnR1YWwgdHlwZSAqaXNfdm9sYXRpbGUgKCkgeyByZXR1cm4gTlVMTDsgfQorICB2 aXJ0dWFsIHR5cGUgKmlzX3Jlc3RyaWN0ICgpIHsgcmV0dXJuIE5VTEw7IH0KICAgdmlydHVhbCB0 eXBlICppc19jb25zdCAoKSB7IHJldHVybiBOVUxMOyB9CiAgIHZpcnR1YWwgdHlwZSAqaXNfYXJy YXkgKCkgPSAwOwogICB2aXJ0dWFsIHN0cnVjdF8gKmlzX3N0cnVjdCAoKSB7IHJldHVybiBOVUxM OyB9CkBAIC02ODYsNyArNjg4LDcgQEAgcHJpdmF0ZToKIH07CiAKIC8qIEEgZGVjb3JhdGVkIHZl cnNpb24gb2YgYSB0eXBlLCBmb3IgZ2V0X2NvbnN0LCBnZXRfdm9sYXRpbGUsCi0gICBnZXRfYWxp Z25lZCwgYW5kIGdldF92ZWN0b3IuICAqLworICAgZ2V0X2FsaWduZWQsIGdldF9yZXN0cmljdCwg YW5kIGdldF92ZWN0b3IuICAqLwogCiBjbGFzcyBkZWNvcmF0ZWRfdHlwZSA6IHB1YmxpYyB0eXBl CiB7CkBAIC03NjksNiArNzcxLDMyIEBAIHByaXZhdGU6CiAgIHZvaWQgd3JpdGVfcmVwcm9kdWNl ciAocmVwcm9kdWNlciAmcikgZmluYWwgb3ZlcnJpZGU7CiB9OwogCisvKiBSZXN1bHQgb2YgImdj Y19qaXRfdHlwZV9nZXRfcmVzdHJpY3QiLiAgKi8KK2NsYXNzIG1lbWVudG9fb2ZfZ2V0X3Jlc3Ry aWN0IDogcHVibGljIGRlY29yYXRlZF90eXBlCit7CitwdWJsaWM6CisgIG1lbWVudG9fb2ZfZ2V0 X3Jlc3RyaWN0ICh0eXBlICpvdGhlcl90eXBlKQorICA6IGRlY29yYXRlZF90eXBlIChvdGhlcl90 eXBlKSB7fQorCisgIGJvb2wgaXNfc2FtZV90eXBlX2FzICh0eXBlICpvdGhlcikgZmluYWwgb3Zl cnJpZGUKKyAgeworICAgIGlmICghb3RoZXItPmlzX3Jlc3RyaWN0ICgpKQorICAgICAgcmV0dXJu IGZhbHNlOworICAgIHJldHVybiBtX290aGVyX3R5cGUtPmlzX3NhbWVfdHlwZV9hcyAob3RoZXIt PmlzX3Jlc3RyaWN0ICgpKTsKKyAgfQorCisgIC8qIFN0cmlwIG9mZiB0aGUgInJlc3RyaWN0Iiwg Z2l2aW5nIHRoZSB1bmRlcmx5aW5nIHR5cGUuICAqLworICB0eXBlICp1bnF1YWxpZmllZCAoKSBm aW5hbCBvdmVycmlkZSB7IHJldHVybiBtX290aGVyX3R5cGU7IH0KKworICB0eXBlICppc19yZXN0 cmljdCAoKSBmaW5hbCBvdmVycmlkZSB7IHJldHVybiBtX290aGVyX3R5cGU7IH0KKworICB2b2lk IHJlcGxheV9pbnRvIChyZXBsYXllciAqKSBmaW5hbCBvdmVycmlkZTsKKworcHJpdmF0ZToKKyAg c3RyaW5nICogbWFrZV9kZWJ1Z19zdHJpbmcgKCkgZmluYWwgb3ZlcnJpZGU7CisgIHZvaWQgd3Jp dGVfcmVwcm9kdWNlciAocmVwcm9kdWNlciAmcikgZmluYWwgb3ZlcnJpZGU7Cit9OworCiAvKiBS ZXN1bHQgb2YgImdjY19qaXRfdHlwZV9nZXRfYWxpZ25lZCIuICAqLwogY2xhc3MgbWVtZW50b19v Zl9nZXRfYWxpZ25lZCA6IHB1YmxpYyBkZWNvcmF0ZWRfdHlwZQogewpkaWZmIC0tZ2l0IGEvZ2Nj L2ppdC9saWJnY2NqaXQrKy5oIGIvZ2NjL2ppdC9saWJnY2NqaXQrKy5oCmluZGV4IGRmMDc4ODli ZTg5Li40YTA0ZGIzODZlNiAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9saWJnY2NqaXQrKy5oCisrKyBi L2djYy9qaXQvbGliZ2Njaml0KysuaApAQCAtMTQxMCw2ICsxNDEwLDEyIEBAIHR5cGU6OmdldF9j b25zdCAoKQogICByZXR1cm4gdHlwZSAoZ2NjX2ppdF90eXBlX2dldF9jb25zdCAoZ2V0X2lubmVy X3R5cGUgKCkpKTsKIH0KIAoraW5saW5lIHR5cGUKK3R5cGU6OmdldF9yZXN0cmljdCAoKQorewor ICByZXR1cm4gdHlwZSAoZ2NjX2ppdF90eXBlX2dldF9yZXN0cmljdCAoZ2V0X2lubmVyX3R5cGUg KCkpKTsKK30KKwogaW5saW5lIHR5cGUKIHR5cGU6OmdldF92b2xhdGlsZSAoKQogewpkaWZmIC0t Z2l0IGEvZ2NjL2ppdC9saWJnY2NqaXQuY2MgYi9nY2Mvaml0L2xpYmdjY2ppdC5jYwppbmRleCAy ZGVmNThmNmFhNy4uMDQ1MWI0ZGY3ZjkgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvbGliZ2Njaml0LmNj CisrKyBiL2djYy9qaXQvbGliZ2Njaml0LmNjCkBAIC01MzQsNiArNTM0LDIxIEBAIGdjY19qaXRf dHlwZV9nZXRfdm9sYXRpbGUgKGdjY19qaXRfdHlwZSAqdHlwZSkKICAgcmV0dXJuIChnY2Nfaml0 X3R5cGUgKil0eXBlLT5nZXRfdm9sYXRpbGUgKCk7CiB9CiAKKy8qIFB1YmxpYyBlbnRyeXBvaW50 LiAgU2VlIGRlc2NyaXB0aW9uIGluIGxpYmdjY2ppdC5oLgorCisgICBBZnRlciBlcnJvci1jaGVj a2luZywgdGhlIHJlYWwgd29yayBpcyBkb25lIGJ5IHRoZQorICAgZ2NjOjpqaXQ6OnJlY29yZGlu Zzo6dHlwZTo6Z2V0X3Jlc3RyaWN0IG1ldGhvZCwgaW4KKyAgIGppdC1yZWNvcmRpbmcuY2MuICAq LworCitnY2Nfaml0X3R5cGUgKgorZ2NjX2ppdF90eXBlX2dldF9yZXN0cmljdCAoZ2NjX2ppdF90 eXBlICp0eXBlKQoreworICBSRVRVUk5fTlVMTF9JRl9GQUlMICh0eXBlLCBOVUxMLCBOVUxMLCAi TlVMTCB0eXBlIik7CisgIFJFVFVSTl9OVUxMX0lGX0ZBSUwgKHR5cGUtPmlzX3BvaW50ZXIgKCks IE5VTEwsIE5VTEwsICJub3QgYSBwb2ludGVyIHR5cGUiKTsKKworICByZXR1cm4gKGdjY19qaXRf dHlwZSAqKXR5cGUtPmdldF9yZXN0cmljdCAoKTsKK30KKwogLyogUHVibGljIGVudHJ5cG9pbnQu ICBTZWUgZGVzY3JpcHRpb24gaW4gbGliZ2Njaml0LmguCiAKICAgIEFmdGVyIGVycm9yLWNoZWNr aW5nLCB0aGUgcmVhbCB3b3JrIGlzIGRvbmUgYnkgdGhlCmRpZmYgLS1naXQgYS9nY2Mvaml0L2xp YmdjY2ppdC5oIGIvZ2NjL2ppdC9saWJnY2NqaXQuaAppbmRleCAwNTdkM2U1OGU3My4uNzQ5ZjZj MjQxNzcgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvbGliZ2Njaml0LmgKKysrIGIvZ2NjL2ppdC9saWJn Y2NqaXQuaApAQCAtNjMwLDYgKzYzMCwxNSBAQCBnY2Nfaml0X3R5cGVfZ2V0X2NvbnN0IChnY2Nf aml0X3R5cGUgKnR5cGUpOwogZXh0ZXJuIGdjY19qaXRfdHlwZSAqCiBnY2Nfaml0X3R5cGVfZ2V0 X3ZvbGF0aWxlIChnY2Nfaml0X3R5cGUgKnR5cGUpOwogCisjZGVmaW5lIExJQkdDQ0pJVF9IQVZF X2djY19qaXRfdHlwZV9nZXRfcmVzdHJpY3QKKworLyogR2l2ZW4gdHlwZSAiVCIsIGdldCB0eXBl ICJyZXN0cmljdCBUIi4KKyAgIFRoaXMgQVBJIGVudHJ5cG9pbnQgd2FzIGFkZGVkIGluIExJQkdD Q0pJVF9BQklfMjU7IHlvdSBjYW4gdGVzdCBmb3IgaXRzCisgICBwcmVzZW5jZSB1c2luZworICAg ICAjaWZkZWYgTElCR0NDSklUX0hBVkVfZ2NjX2ppdF90eXBlX2dldF9yZXN0cmljdCAgKi8KK2V4 dGVybiBnY2Nfaml0X3R5cGUgKgorZ2NjX2ppdF90eXBlX2dldF9yZXN0cmljdCAoZ2NjX2ppdF90 eXBlICp0eXBlKTsKKwogI2RlZmluZSBMSUJHQ0NKSVRfSEFWRV9TSVpFRF9JTlRFR0VSUwogCiAv KiBHaXZlbiB0eXBlcyBMVFlQRSBhbmQgUlRZUEUsIHJldHVybiBub24temVybyBpZiB0aGV5IGFy ZSBjb21wYXRpYmxlLgpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9saWJnY2NqaXQubWFwIGIvZ2NjL2pp dC9saWJnY2NqaXQubWFwCmluZGV4IDI1NDYzYjk0ZmU4Li44YjkwYTBlMmZmMyAxMDA2NDQKLS0t IGEvZ2NjL2ppdC9saWJnY2NqaXQubWFwCisrKyBiL2djYy9qaXQvbGliZ2Njaml0Lm1hcApAQCAt MjcxLDMgKzI3MSw4IEBAIExJQkdDQ0pJVF9BQklfMjQgewogICAgIGdjY19qaXRfbHZhbHVlX3Nl dF9hbGlnbm1lbnQ7CiAgICAgZ2NjX2ppdF9sdmFsdWVfZ2V0X2FsaWdubWVudDsKIH0gTElCR0ND SklUX0FCSV8yMzsKKworTElCR0NDSklUX0FCSV8yNSB7CisgIGdsb2JhbDoKKyAgICBnY2Nfaml0 X3R5cGVfZ2V0X3Jlc3RyaWN0OworfSBMSUJHQ0NKSVRfQUJJXzI0OwpkaWZmIC0tZ2l0IGEvZ2Nj L3Rlc3RzdWl0ZS9qaXQuZGcvYWxsLW5vbi1mYWlsaW5nLXRlc3RzLmggYi9nY2MvdGVzdHN1aXRl L2ppdC5kZy9hbGwtbm9uLWZhaWxpbmctdGVzdHMuaAppbmRleCA4MDYwNjA3NmU3OC4uZTc2MjU2 M2Y5YmQgMTAwNjQ0Ci0tLSBhL2djYy90ZXN0c3VpdGUvaml0LmRnL2FsbC1ub24tZmFpbGluZy10 ZXN0cy5oCisrKyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL2FsbC1ub24tZmFpbGluZy10ZXN0cy5o CkBAIC0zMTMsNiArMzEzLDkgQEAKICN1bmRlZiBjcmVhdGVfY29kZQogI3VuZGVmIHZlcmlmeV9j b2RlCiAKKy8qIHRlc3QtcmVzdHJpY3QuYzogVGhpcyBjYW4ndCBiZSBpbiB0aGUgdGVzdGNhc2Vz IGFycmF5IGFzIGl0IG5lZWRzCisgICB0aGUgYC1PM2AgZmxhZy4gICovCisKIC8qIHRlc3QtcmVn aXN0ZXItdmFyaWFibGUuYzogVGhpcyBjYW4ndCBiZSBpbiB0aGUgdGVzdGNhc2VzIGFycmF5IGFz IGl0CiAgICBpcyB0YXJnZXQtc3BlY2lmaWMuICAqLwogCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1 aXRlL2ppdC5kZy90ZXN0LXJlc3RyaWN0LmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LXJl c3RyaWN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmE2YWM5NjMy NGQyCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1yZXN0cmlj dC5jCkBAIC0wLDAgKzEsNzcgQEAKKy8qIHsgZGctZG8gY29tcGlsZSB7IHRhcmdldCB4ODZfNjQt Ki0qIH0gfSAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKwor I2luY2x1ZGUgImxpYmdjY2ppdC5oIgorCisvKiBXZSBkb24ndCB3YW50IHNldF9vcHRpb25zKCkg aW4gaGFybmVzcy5oIHRvIHNldCAtTzMgdG8gc2VlIHRoYXQgdGhlIHJlc3RyaWN0CisJIGF0dHJp YnV0ZSBhZmZlY3RzIHRoZSBvcHRpbWl6YXRpb25zLiAqLworI2RlZmluZSBURVNUX0VTQ0hFV1Nf U0VUX09QVElPTlMKK3N0YXRpYyB2b2lkIHNldF9vcHRpb25zIChnY2Nfaml0X2NvbnRleHQgKmN0 eHQsIGNvbnN0IGNoYXIgKmFyZ3YwKQoreworCS8vIFNldCAiLU8zIi4KKwlnY2Nfaml0X2NvbnRl eHRfc2V0X2ludF9vcHRpb24oY3R4dCwgR0NDX0pJVF9JTlRfT1BUSU9OX09QVElNSVpBVElPTl9M RVZFTCwgMyk7Cit9CisKKyNkZWZpbmUgVEVTVF9DT01QSUxJTkdfVE9fRklMRQorI2RlZmluZSBP VVRQVVRfS0lORCAgICAgIEdDQ19KSVRfT1VUUFVUX0tJTkRfQVNTRU1CTEVSCisjZGVmaW5lIE9V VFBVVF9GSUxFTkFNRSAgIm91dHB1dC1vZi10ZXN0LXJlc3RyaWN0LmMucyIKKyNpbmNsdWRlICJo YXJuZXNzLmgiCisKK3ZvaWQKK2NyZWF0ZV9jb2RlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsIHZv aWQgKnVzZXJfZGF0YSkKK3sKKwkvKiBMZXQncyB0cnkgdG8gaW5qZWN0IHRoZSBlcXVpdmFsZW50 IG9mOgordm9pZCB0KGludCAqX19yZXN0cmljdF9fIGEsIGludCAqX19yZXN0cmljdF9fIGIsIGNo YXIgKl9fcmVzdHJpY3RfXyBjKSB7CisJKmEgKz0gKmM7CisJKmIgKz0gKmM7Cit9CisJKi8KKwln Y2Nfaml0X3R5cGUgKmludF90eXBlID0KKwkJZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0 LCBHQ0NfSklUX1RZUEVfSU5UKTsKKwlnY2Nfaml0X3R5cGUgKnBpbnRfdHlwZSA9IGdjY19qaXRf dHlwZV9nZXRfcG9pbnRlcihpbnRfdHlwZSk7CisJZ2NjX2ppdF90eXBlICpwaW50X3Jlc3RyaWN0 X3R5cGUgPSBnY2Nfaml0X3R5cGVfZ2V0X3Jlc3RyaWN0KHBpbnRfdHlwZSk7CisKKwlnY2Nfaml0 X3R5cGUgKnZvaWRfdHlwZSA9CisJCWdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwgR0ND X0pJVF9UWVBFX1ZPSUQpOworCisJZ2NjX2ppdF9wYXJhbSAqYSA9CisJCWdjY19qaXRfY29udGV4 dF9uZXdfcGFyYW0gKGN0eHQsIE5VTEwsIHBpbnRfcmVzdHJpY3RfdHlwZSwgImEiKTsKKwlnY2Nf aml0X3BhcmFtICpiID0KKwkJZ2NjX2ppdF9jb250ZXh0X25ld19wYXJhbSAoY3R4dCwgTlVMTCwg cGludF9yZXN0cmljdF90eXBlLCAiYiIpOworCWdjY19qaXRfcGFyYW0gKmMgPQorCQlnY2Nfaml0 X2NvbnRleHRfbmV3X3BhcmFtIChjdHh0LCBOVUxMLCBwaW50X3Jlc3RyaWN0X3R5cGUsICJjIik7 CisJZ2NjX2ppdF9wYXJhbSAqcGFyYW1zWzNdID0ge2EsIGIsIGN9OworCisJZ2NjX2ppdF9mdW5j dGlvbiAqZnVuY190ID0KKwkJZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwgTlVM TCwKKwkJCQkJR0NDX0pJVF9GVU5DVElPTl9FWFBPUlRFRCwKKwkJCQkJdm9pZF90eXBlLAorCQkJ CQkidCIsCisJCQkJCTMsIHBhcmFtcywKKwkJCQkJMCk7CisKKwlnY2Nfaml0X2Jsb2NrICpibG9j ayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrIChmdW5jX3QsIE5VTEwpOworCisJLyogKmEg Kz0gKmM7ICovCisJZ2NjX2ppdF9ibG9ja19hZGRfYXNzaWdubWVudF9vcCAoCisJCWJsb2NrLCBO VUxMLAorCQlnY2Nfaml0X3J2YWx1ZV9kZXJlZmVyZW5jZSAoZ2NjX2ppdF9wYXJhbV9hc19ydmFs dWUgKGEpLCBOVUxMKSwKKwkJR0NDX0pJVF9CSU5BUllfT1BfUExVUywKKwkJZ2NjX2ppdF9sdmFs dWVfYXNfcnZhbHVlICgKKwkJCWdjY19qaXRfcnZhbHVlX2RlcmVmZXJlbmNlIChnY2Nfaml0X3Bh cmFtX2FzX3J2YWx1ZSAoYyksIE5VTEwpKSk7CisJLyogKmIgKz0gKmM7ICovCisJZ2NjX2ppdF9i bG9ja19hZGRfYXNzaWdubWVudF9vcCAoCisJCWJsb2NrLCBOVUxMLAorCQlnY2Nfaml0X3J2YWx1 ZV9kZXJlZmVyZW5jZSAoZ2NjX2ppdF9wYXJhbV9hc19ydmFsdWUgKGIpLCBOVUxMKSwKKwkJR0ND X0pJVF9CSU5BUllfT1BfUExVUywKKwkJZ2NjX2ppdF9sdmFsdWVfYXNfcnZhbHVlICgKKwkJCWdj Y19qaXRfcnZhbHVlX2RlcmVmZXJlbmNlIChnY2Nfaml0X3BhcmFtX2FzX3J2YWx1ZSAoYyksIE5V TEwpKSk7CisKKwlnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3ZvaWRfcmV0dXJuIChibG9jaywgTlVM TCk7Cit9CisKKy8qIHsgZGctZmluYWwgeyBqaXQtdmVyaWZ5LW91dHB1dC1maWxlLXdhcy1jcmVh dGVkICIiIH0gfSAqLworLyogeyBkZy1maW5hbCB7IGppdC12ZXJpZnktYXNzZW1ibGVyLW91dHB1 dCAiYWRkbAklZWF4LCAoJXJkaSkKKwlhZGRsCSVlYXgsICglcnNpKSIgfSB9ICovCi0tIAoyLjM0 LjEKCg== --0000000000008e57ec0603c57523--