From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-lf1-x12a.google.com (mail-lf1-x12a.google.com [IPv6:2a00:1450:4864:20::12a]) by sourceware.org (Postfix) with ESMTPS id 6B0E73858D35; Thu, 17 Aug 2023 15:41:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 6B0E73858D35 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-lf1-x12a.google.com with SMTP id 2adb3069b0e04-4ff9121fd29so3162093e87.3; Thu, 17 Aug 2023 08:41:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1692286895; x=1692891695; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=UNHRNpC7P7UuEROnLCjIaETm9hQdYKmx6zWEtsA2Vyk=; b=mJRWTSRGrmy1XkyYdKshhR4Q75PWT2Fy7SNp6mkfrJTTLlMQ3LVrhwQdMMlfcv7MjG djP6A9XbO9/HRQ3XHjYLiuXv+A6HMHTr2+fG3RaOERQ/f3W6Kbe8uz7xrCpHWHQA+rcs 2mb5R2OZbIbWGHSUJE06P3Ko1D/d1NzceCZZZ+DLwF9oE9mGu3v4vPWi6T0sQOPrEGfF 4IUIRXRzN/6ewFpyyHK8ETozkoh4WP6XeN3IXxNbJJoPYQoQi+Q65zc+pRCnWFS0D2o4 66q3OvRbfv0wAsjPayWzkNZ3Ra4m6cPwKS9bEOeCXrlx3Tfq6YdPsM//3Ykpg6SYJtwy QZCw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1692286895; x=1692891695; 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=UNHRNpC7P7UuEROnLCjIaETm9hQdYKmx6zWEtsA2Vyk=; b=CMpHVOUK07+Eff+V7VhZPjxCfk7JAQWTY0ZKirG12eMVrcRZ/ZiYhM81dmKsGD6Ova vt6LmH8QcDOQ9oRVEyBrFib3f2whMfTa3mwUzpJ51+uISD4yitfJQyaNpOkI0k//BPHU gqzUnujTUYpS8THLmciqKOgknfOHiQmB1kDQrgl4al0AyspjJCfiFPjzQaSa6TVhIvVB IeXTAa2OYECmVubv1TRDHuEQuhtW+nNcHa2oDRftbiA62O/y0OBrFrRZI6RRnsqjCx5M PqijLVrK7/KSC4cTxLd2Tr/b/h5SIwz4xCfM58bD/G+0JbtDRIJnWmFk2XpeVxwKKI3c qJHw== X-Gm-Message-State: AOJu0YzSZNU7gG7KE3Ua+cpSYizc6OUKCatd02g6HKXmNODiYEvkw1yo h7XsGkdkp/X5EnsTfMp0hICkhhtwJU/zmjgGI44= X-Google-Smtp-Source: AGHT+IEUyENvFgdcoHiZG8VYMArUecIpycVWJfoOAnlgyRSnN6B6Osh4mySgVXha2f0DAQu4NPmehOj7F0jPswsA9X8= X-Received: by 2002:ac2:499c:0:b0:4fe:1f02:e54b with SMTP id f28-20020ac2499c000000b004fe1f02e54bmr4279042lfl.56.1692286894380; Thu, 17 Aug 2023 08:41:34 -0700 (PDT) MIME-Version: 1.0 References: <059ffebd230df2dbbac3f138ec85016bb7a7306a.camel@redhat.com> In-Reply-To: From: Guillaume Gomez Date: Thu, 17 Aug 2023 17:41:22 +0200 Message-ID: Subject: Re: [PATCH] libgccjit: Add support for `restrict` attribute on function parameters To: David Malcolm Cc: gcc-patches@gcc.gnu.org, jit@gcc.gnu.org Content-Type: multipart/mixed; boundary="0000000000003342ea0603203f02" X-Spam-Status: No, score=-7.9 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: --0000000000003342ea0603203f02 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable 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. 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 thi= s > > > 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 thi= s > > > 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 > > > --0000000000003342ea0603203f02 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_llfbwx3f0 RnJvbSAwNmIwOWQ0NTJlOGYwYTNkOTI3NTQwOGM3Yzk2NzBjMDY4ZTFmMDQ1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBHdWlsbGF1bWUgR29tZXogPGd1aWxsYXVtZTEuZ29tZXpAZ21h aWwuY29tPgpEYXRlOiBGcmksIDExIEF1ZyAyMDIzIDIyOjQ4OjExICswMjAwClN1YmplY3Q6IFtQ QVRDSF0gW1BBVENIXSBBZGQgc3VwcG9ydCBmb3IgYHJlc3RyaWN0YCBhdHRyaWJ1dGUgb24gZnVu Y3Rpb24KIHBhcmFtZXRlcnMKCmdjYy9qaXQvQ2hhbmdlbG9nOgoJKiBqaXQtcGxheWJhY2suY2M6 IFJlbW92ZSB0cmFpbGluZyB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMuCgkqIGppdC1wbGF5YmFjay5o OiBBZGQgZ2V0X3Jlc3RyaWN0IG1ldGhvZC4KCSogaml0LXJlY29yZGluZy5jYzogQWRkIGdldF9y ZXN0cmljdCBtZXRob2RzLgoJKiBqaXQtcmVjb3JkaW5nLmg6IEFkZCBnZXRfcmVzdHJpY3QgbWV0 aG9kcy4KCSogbGliZ2Njaml0KysuaDogQWRkIGdldF9yZXN0cmljdCBtZXRob2RzLgoJKiBsaWJn Y2NqaXQuY2M6IEFkZCBnY2Nfaml0X3R5cGVfZ2V0X3Jlc3RyaWN0LgoJKiBsaWJnY2NqaXQuaDog RGVjbGFyZSBnY2Nfaml0X3R5cGVfZ2V0X3Jlc3RyaWN0LgoJKiBsaWJnY2NqaXQubWFwOiBEZWNs YXJlIGdjY19qaXRfdHlwZV9nZXRfcmVzdHJpY3QuCgpnY2MvdGVzdHN1aXRlL0NoYW5nZUxvZzoK CSogaml0LmRnL3Rlc3QtcmVzdHJpY3QuYzogQWRkIHRlc3QgZm9yIF9fcmVzdHJpY3RfXyBhdHRy aWJ1dGUuCgkqIGppdC5kZy9hbGwtbm9uLWZhaWxpbmctdGVzdHMuaDogQWRkIHRlc3QtcmVzdHJp Y3QuYyB0byB0aGUgbGlzdC4KCmdjYy9qaXQvQ2hhbmdlTG9nOgoJKiBkb2NzL3RvcGljcy9jb21w YXRpYmlsaXR5LnJzdDogQWRkIGRvY3VtZW50YXRpb24gZm9yIExJQkdDQ0pJVF9BQklfMjUuCgkq IGRvY3MvdG9waWNzL3R5cGVzLnJzdDogQWRkIGRvY3VtZW50YXRpb24gZm9yIGdjY19qaXRfdHlw ZV9nZXRfcmVzdHJpY3QuCgpTaWduZWQtb2ZmLWJ5OiBHdWlsbGF1bWUgR29tZXogPGd1aWxsYXVt ZTEuZ29tZXpAZ21haWwuY29tPgotLS0KIGdjYy9qaXQvZG9jcy90b3BpY3MvY29tcGF0aWJpbGl0 eS5yc3QgICAgICAgIHwgIDcgKysKIGdjYy9qaXQvZG9jcy90b3BpY3MvdHlwZXMucnN0ICAgICAg ICAgICAgICAgIHwgMTIgKysrCiBnY2Mvaml0L2ppdC1wbGF5YmFjay5jYyAgICAgICAgICAgICAg ICAgICAgICB8ICAyICstCiBnY2Mvaml0L2ppdC1wbGF5YmFjay5oICAgICAgICAgICAgICAgICAg ICAgICB8ICA1ICsrCiBnY2Mvaml0L2ppdC1yZWNvcmRpbmcuY2MgICAgICAgICAgICAgICAgICAg ICB8IDQ3ICsrKysrKysrKysrKwogZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmggICAgICAgICAgICAg ICAgICAgICAgfCAzNyArKysrKysrKystCiBnY2Mvaml0L2xpYmdjY2ppdCsrLmggICAgICAgICAg ICAgICAgICAgICAgICB8ICA2ICsrCiBnY2Mvaml0L2xpYmdjY2ppdC5jYyAgICAgICAgICAgICAg ICAgICAgICAgICB8IDE0ICsrKysKIGdjYy9qaXQvbGliZ2Njaml0LmggICAgICAgICAgICAgICAg ICAgICAgICAgIHwgIDkgKysrCiBnY2Mvaml0L2xpYmdjY2ppdC5tYXAgICAgICAgICAgICAgICAg ICAgICAgICB8ICA1ICsrCiBnY2MvdGVzdHN1aXRlL2ppdC5kZy9hbGwtbm9uLWZhaWxpbmctdGVz dHMuaCB8ICAzICsKIGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtcmVzdHJpY3QuYyAgICAgICAg IHwgNzcgKysrKysrKysrKysrKysrKysrKysKIDEyIGZpbGVzIGNoYW5nZWQsIDIyMiBpbnNlcnRp b25zKCspLCAyIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUv aml0LmRnL3Rlc3QtcmVzdHJpY3QuYwoKZGlmZiAtLWdpdCBhL2djYy9qaXQvZG9jcy90b3BpY3Mv Y29tcGF0aWJpbGl0eS5yc3QgYi9nY2Mvaml0L2RvY3MvdG9waWNzL2NvbXBhdGliaWxpdHkucnN0 CmluZGV4IGY0ZmZhMDdlYzQ4Li5lYmVkZTQ0MGVlNCAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9kb2Nz L3RvcGljcy9jb21wYXRpYmlsaXR5LnJzdAorKysgYi9nY2Mvaml0L2RvY3MvdG9waWNzL2NvbXBh dGliaWxpdHkucnN0CkBAIC0zNzEsMyArMzcxLDEwIEBAIGFsaWdubWVudCBvZiBhIHZhcmlhYmxl OgogCiAgICogOmZ1bmM6YGdjY19qaXRfbHZhbHVlX3NldF9hbGlnbm1lbnRgCiAgICogOmZ1bmM6 YGdjY19qaXRfbHZhbHVlX2dldF9hbGlnbm1lbnRgCisKKy4uIF9MSUJHQ0NKSVRfQUJJXzI1Ogor CitgYExJQkdDQ0pJVF9BQklfMjVgYAorLS0tLS0tLS0tLS0tLS0tLS0tLS0KK2BgTElCR0NDSklU X0FCSV8yNWBgIGNvdmVycyB0aGUgYWRkaXRpb24gb2YKKzpmdW5jOmBnY2Nfaml0X3R5cGVfZ2V0 X3Jlc3RyaWN0YApkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9kb2NzL3RvcGljcy90eXBlcy5yc3QgYi9n Y2Mvaml0L2RvY3MvdG9waWNzL3R5cGVzLnJzdAppbmRleCBmNWYyYWFjMWYwYy4uZDhjMWQxNWQ2 OWQgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvZG9jcy90b3BpY3MvdHlwZXMucnN0CisrKyBiL2djYy9q aXQvZG9jcy90b3BpY3MvdHlwZXMucnN0CkBAIC01NDEsMyArNTQxLDE1IEBAIFJlZmxlY3Rpb24g QVBJCiAgICAuLiBjb2RlLWJsb2NrOjogYwogCiAgICAgICAjaWZkZWYgTElCR0NDSklUX0hBVkVf U0laRURfSU5URUdFUlMKKworLi4gZnVuY3Rpb246OiAgZ2NjX2ppdF90eXBlICpcCisgICAgICAg ICAgICAgICBnY2Nfaml0X3R5cGVfZ2V0X3Jlc3RyaWN0IChnY2Nfaml0X3R5cGUgKnR5cGUpCisK KyAgICAgR2l2ZW4gdHlwZSAiVCIsIGdldCB0eXBlICJyZXN0cmljdCBUIi4KKworICAgVGhpcyBl bnRyeXBvaW50IHdhcyBhZGRlZCBpbiA6cmVmOmBMSUJHQ0NKSVRfQUJJXzI1YDsgeW91IGNhbiB0 ZXN0IGZvcgorICAgaXRzIHByZXNlbmNlIHVzaW5nCisKKyAgIC4uIGNvZGUtYmxvY2s6OiBjCisK KyAgICAgICNpZmRlZiBMSUJHQ0NKSVRfSEFWRV9nY2Nfaml0X3R5cGVfZ2V0X3Jlc3RyaWN0CmRp ZmYgLS1naXQgYS9nY2Mvaml0L2ppdC1wbGF5YmFjay5jYyBiL2djYy9qaXQvaml0LXBsYXliYWNr LmNjCmluZGV4IGUwNmYxNjFhYWQ5Li45Yjc1NzM4MmY3YSAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9q aXQtcGxheWJhY2suY2MKKysrIGIvZ2NjL2ppdC9qaXQtcGxheWJhY2suY2MKQEAgLTMzOTMsNyAr MzM5Myw3IEBAIGlmICh0KSBcCiAgIE5BTUVfVFlQRSAoY29tcGxleF9mbG9hdF90eXBlX25vZGUs ICJjb21wbGV4IGZsb2F0Iik7CiAgIE5BTUVfVFlQRSAoY29tcGxleF9kb3VibGVfdHlwZV9ub2Rl LCAiY29tcGxleCBkb3VibGUiKTsKICAgTkFNRV9UWVBFIChjb21wbGV4X2xvbmdfZG91YmxlX3R5 cGVfbm9kZSwgImNvbXBsZXggbG9uZyBkb3VibGUiKTsKLSAgCisKICAgbV9jb25zdF9jaGFyX3B0 ciA9IGJ1aWxkX3BvaW50ZXJfdHlwZSgKICAgICBidWlsZF9xdWFsaWZpZWRfdHlwZSAoY2hhcl90 eXBlX25vZGUsIFRZUEVfUVVBTF9DT05TVCkpOwogCmRpZmYgLS1naXQgYS9nY2Mvaml0L2ppdC1w bGF5YmFjay5oIGIvZ2NjL2ppdC9qaXQtcGxheWJhY2suaAppbmRleCA4ODMxNTlmMDNjMy4uNDM4 ZjM5NWY2ZDkgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvaml0LXBsYXliYWNrLmgKKysrIGIvZ2NjL2pp dC9qaXQtcGxheWJhY2suaApAQCAtNDQ2LDYgKzQ0NiwxMSBAQCBwdWJsaWM6CiAgICAgcmV0dXJu IG5ldyB0eXBlIChidWlsZF9xdWFsaWZpZWRfdHlwZSAobV9pbm5lciwgVFlQRV9RVUFMX1ZPTEFU SUxFKSk7CiAgIH0KIAorICB0eXBlICpnZXRfcmVzdHJpY3QgKCkgY29uc3QKKyAgeworICAgIHJl dHVybiBuZXcgdHlwZSAoYnVpbGRfcXVhbGlmaWVkX3R5cGUgKG1faW5uZXIsIFRZUEVfUVVBTF9S RVNUUklDVCkpOworICB9CisKICAgdHlwZSAqZ2V0X2FsaWduZWQgKHNpemVfdCBhbGlnbm1lbnRf aW5fYnl0ZXMpIGNvbnN0OwogICB0eXBlICpnZXRfdmVjdG9yIChzaXplX3QgbnVtX3VuaXRzKSBj b25zdDsKIApkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmNjIGIvZ2NjL2ppdC9q aXQtcmVjb3JkaW5nLmNjCmluZGV4IGRmMDM2OGZmOGY3Li4zMjZjOGMyODA5ZiAxMDA2NDQKLS0t IGEvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmNjCisrKyBiL2djYy9qaXQvaml0LXJlY29yZGluZy5j YwpAQCAtMjI2Nyw2ICsyMjY3LDE5IEBAIHJlY29yZGluZzo6dHlwZTo6Z2V0X2NvbnN0ICgpCiAg IHJldHVybiByZXN1bHQ7CiB9CiAKKy8qIEdpdmVuIGEgdHlwZSBULCBnZXQgdGhlIHR5cGUgcmVz dHJpY3QgVC4KKworICAgSW1wbGVtZW50cyB0aGUgcG9zdC1lcnJvci1jaGVja2luZyBwYXJ0IG9m CisgICBnY2Nfaml0X3R5cGVfZ2V0X3Jlc3RyaWN0LiAgKi8KKworcmVjb3JkaW5nOjp0eXBlICoK K3JlY29yZGluZzo6dHlwZTo6Z2V0X3Jlc3RyaWN0ICgpCit7CisgIHJlY29yZGluZzo6dHlwZSAq cmVzdWx0ID0gbmV3IG1lbWVudG9fb2ZfZ2V0X3Jlc3RyaWN0ICh0aGlzKTsKKyAgbV9jdHh0LT5y ZWNvcmQgKHJlc3VsdCk7CisgIHJldHVybiByZXN1bHQ7Cit9CisKIC8qIEdpdmVuIGEgdHlwZSBU LCBnZXQgdGhlIHR5cGUgdm9sYXRpbGUgVC4KIAogICAgSW1wbGVtZW50cyB0aGUgcG9zdC1lcnJv ci1jaGVja2luZyBwYXJ0IG9mCkBAIC0yOTYwLDYgKzI5NzMsNDAgQEAgcmVjb3JkaW5nOjptZW1l bnRvX29mX2dldF92b2xhdGlsZTo6d3JpdGVfcmVwcm9kdWNlciAocmVwcm9kdWNlciAmcikKIAkg ICByLmdldF9pZGVudGlmaWVyX2FzX3R5cGUgKG1fb3RoZXJfdHlwZSkpOwogfQogCisvKiBUaGUg aW1wbGVtZW50YXRpb24gb2YgY2xhc3MgZ2NjOjpqaXQ6OnJlY29yZGluZzo6bWVtZW50b19vZl9n ZXRfcmVzdHJpY3QuICAqLworCisvKiBJbXBsZW1lbnRhdGlvbiBvZiBwdXJlIHZpcnR1YWwgaG9v ayByZWNvcmRpbmc6Om1lbWVudG86OnJlcGxheV9pbnRvCisgICBmb3IgcmVjb3JkaW5nOjptZW1l bnRvX29mX2dldF9yZXN0cmljdC4gICovCisKK3ZvaWQKK3JlY29yZGluZzo6bWVtZW50b19vZl9n ZXRfcmVzdHJpY3Q6OnJlcGxheV9pbnRvIChyZXBsYXllciAqKQoreworICBzZXRfcGxheWJhY2tf b2JqIChtX290aGVyX3R5cGUtPnBsYXliYWNrX3R5cGUgKCktPmdldF9yZXN0cmljdCAoKSk7Cit9 CisKKy8qIEltcGxlbWVudGF0aW9uIG9mIHJlY29yZGluZzo6bWVtZW50bzo6bWFrZV9kZWJ1Z19z dHJpbmcgZm9yCisgICByZXN1bHRzIG9mIGdldF9yZXN0cmljdCwgcHJlcGVuZGluZyAicmVzdHJp Y3QgIi4gICovCisKK3JlY29yZGluZzo6c3RyaW5nICoKK3JlY29yZGluZzo6bWVtZW50b19vZl9n ZXRfcmVzdHJpY3Q6Om1ha2VfZGVidWdfc3RyaW5nICgpCit7CisgIHJldHVybiBzdHJpbmc6OmZy b21fcHJpbnRmIChtX2N0eHQsCisJCQkgICAgICAicmVzdHJpY3QgJXMiLCBtX290aGVyX3R5cGUt PmdldF9kZWJ1Z19zdHJpbmcgKCkpOworfQorCisvKiBJbXBsZW1lbnRhdGlvbiBvZiByZWNvcmRp bmc6Om1lbWVudG86OndyaXRlX3JlcHJvZHVjZXIgZm9yIHJlc3RyaWN0CisgICB0eXBlcy4gICov CisKK3ZvaWQKK3JlY29yZGluZzo6bWVtZW50b19vZl9nZXRfcmVzdHJpY3Q6OndyaXRlX3JlcHJv ZHVjZXIgKHJlcHJvZHVjZXIgJnIpCit7CisgIGNvbnN0IGNoYXIgKmlkID0gci5tYWtlX2lkZW50 aWZpZXIgKHRoaXMsICJ0eXBlIik7CisgIHIud3JpdGUgKCIgIGdjY19qaXRfdHlwZSAqJXMgPVxu IgorCSAgICIgICAgZ2NjX2ppdF90eXBlX2dldF9yZXN0cmljdCAoJXMpO1xuIiwKKwkgICBpZCwK KwkgICByLmdldF9pZGVudGlmaWVyX2FzX3R5cGUgKG1fb3RoZXJfdHlwZSkpOworfQorCiAvKiBU aGUgaW1wbGVtZW50YXRpb24gb2YgY2xhc3MgZ2NjOjpqaXQ6OnJlY29yZGluZzo6bWVtZW50b19v Zl9nZXRfYWxpZ25lZC4gICovCiAKIC8qIEltcGxlbWVudGF0aW9uIG9mIHB1cmUgdmlydHVhbCBo b29rIHJlY29yZGluZzo6bWVtZW50bzo6cmVwbGF5X2ludG8KZGlmZiAtLWdpdCBhL2djYy9qaXQv aml0LXJlY29yZGluZy5oIGIvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmgKaW5kZXggNDAwY2YzNDU2 MDAuLjE1NDc4N2I3NTkzIDEwMDY0NAotLS0gYS9nY2Mvaml0L2ppdC1yZWNvcmRpbmcuaAorKysg Yi9nY2Mvaml0L2ppdC1yZWNvcmRpbmcuaApAQCAtNTI0LDYgKzUyNCw3IEBAIHB1YmxpYzoKICAg dHlwZSAqZ2V0X3BvaW50ZXIgKCk7CiAgIHR5cGUgKmdldF9jb25zdCAoKTsKICAgdHlwZSAqZ2V0 X3ZvbGF0aWxlICgpOworICB0eXBlICpnZXRfcmVzdHJpY3QgKCk7CiAgIHR5cGUgKmdldF9hbGln bmVkIChzaXplX3QgYWxpZ25tZW50X2luX2J5dGVzKTsKICAgdHlwZSAqZ2V0X3ZlY3RvciAoc2l6 ZV90IG51bV91bml0cyk7CiAKQEAgLTU2OCw2ICs1NjksNyBAQCBwdWJsaWM6CiAgIHZpcnR1YWwg Ym9vbCBpc19ib29sICgpIGNvbnN0ID0gMDsKICAgdmlydHVhbCB0eXBlICppc19wb2ludGVyICgp ID0gMDsKICAgdmlydHVhbCB0eXBlICppc192b2xhdGlsZSAoKSB7IHJldHVybiBOVUxMOyB9Cisg IHZpcnR1YWwgdHlwZSAqaXNfcmVzdHJpY3QgKCkgeyByZXR1cm4gTlVMTDsgfQogICB2aXJ0dWFs IHR5cGUgKmlzX2NvbnN0ICgpIHsgcmV0dXJuIE5VTEw7IH0KICAgdmlydHVhbCB0eXBlICppc19h cnJheSAoKSA9IDA7CiAgIHZpcnR1YWwgc3RydWN0XyAqaXNfc3RydWN0ICgpIHsgcmV0dXJuIE5V TEw7IH0KQEAgLTY4Niw3ICs2ODgsNyBAQCBwcml2YXRlOgogfTsKIAogLyogQSBkZWNvcmF0ZWQg dmVyc2lvbiBvZiBhIHR5cGUsIGZvciBnZXRfY29uc3QsIGdldF92b2xhdGlsZSwKLSAgIGdldF9h bGlnbmVkLCBhbmQgZ2V0X3ZlY3Rvci4gICovCisgICBnZXRfYWxpZ25lZCwgZ2V0X3Jlc3RyaWN0 LCBhbmQgZ2V0X3ZlY3Rvci4gICovCiAKIGNsYXNzIGRlY29yYXRlZF90eXBlIDogcHVibGljIHR5 cGUKIHsKQEAgLTc2OSw2ICs3NzEsMzkgQEAgcHJpdmF0ZToKICAgdm9pZCB3cml0ZV9yZXByb2R1 Y2VyIChyZXByb2R1Y2VyICZyKSBmaW5hbCBvdmVycmlkZTsKIH07CiAKKy8qIFJlc3VsdCBvZiAi Z2NjX2ppdF90eXBlX2dldF9yZXN0cmljdCIuICAqLworY2xhc3MgbWVtZW50b19vZl9nZXRfcmVz dHJpY3QgOiBwdWJsaWMgZGVjb3JhdGVkX3R5cGUKK3sKK3B1YmxpYzoKKyAgbWVtZW50b19vZl9n ZXRfcmVzdHJpY3QgKHR5cGUgKm90aGVyX3R5cGUpCisgIDogZGVjb3JhdGVkX3R5cGUgKG90aGVy X3R5cGUpIHt9CisKKyAgYm9vbCBpc19zYW1lX3R5cGVfYXMgKHR5cGUgKm90aGVyKSBmaW5hbCBv dmVycmlkZQorICB7CisgICAgaWYgKCFvdGhlci0+aXNfcmVzdHJpY3QgKCkpCisgICAgICByZXR1 cm4gZmFsc2U7CisgICAgcmV0dXJuIG1fb3RoZXJfdHlwZS0+aXNfc2FtZV90eXBlX2FzIChvdGhl ci0+aXNfcmVzdHJpY3QgKCkpOworICB9CisKKyAgdHlwZSogY29weSAoY29udGV4dCogY3R4dCkg ZmluYWwgb3ZlcnJpZGUKKyAgeworICAgIHR5cGUqIHJlc3VsdCA9IG5ldyBtZW1lbnRvX29mX2dl dF9yZXN0cmljdCAobV9vdGhlcl90eXBlLT5jb3B5IChjdHh0KSk7CisgICAgY3R4dC0+cmVjb3Jk IChyZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7CisgIH0KKworICAvKiBTdHJpcCBvZmYgdGhl ICJyZXN0cmljdCIsIGdpdmluZyB0aGUgdW5kZXJseWluZyB0eXBlLiAgKi8KKyAgdHlwZSAqdW5x dWFsaWZpZWQgKCkgZmluYWwgb3ZlcnJpZGUgeyByZXR1cm4gbV9vdGhlcl90eXBlOyB9CisKKyAg dHlwZSAqaXNfcmVzdHJpY3QgKCkgZmluYWwgb3ZlcnJpZGUgeyByZXR1cm4gbV9vdGhlcl90eXBl OyB9CisKKyAgdm9pZCByZXBsYXlfaW50byAocmVwbGF5ZXIgKikgZmluYWwgb3ZlcnJpZGU7CisK K3ByaXZhdGU6CisgIHN0cmluZyAqIG1ha2VfZGVidWdfc3RyaW5nICgpIGZpbmFsIG92ZXJyaWRl OworICB2b2lkIHdyaXRlX3JlcHJvZHVjZXIgKHJlcHJvZHVjZXIgJnIpIGZpbmFsIG92ZXJyaWRl OworfTsKKwogLyogUmVzdWx0IG9mICJnY2Nfaml0X3R5cGVfZ2V0X2FsaWduZWQiLiAgKi8KIGNs YXNzIG1lbWVudG9fb2ZfZ2V0X2FsaWduZWQgOiBwdWJsaWMgZGVjb3JhdGVkX3R5cGUKIHsKZGlm ZiAtLWdpdCBhL2djYy9qaXQvbGliZ2Njaml0KysuaCBiL2djYy9qaXQvbGliZ2Njaml0KysuaApp bmRleCBkZjA3ODg5YmU4OS4uNGEwNGRiMzg2ZTYgMTAwNjQ0Ci0tLSBhL2djYy9qaXQvbGliZ2Nj aml0KysuaAorKysgYi9nY2Mvaml0L2xpYmdjY2ppdCsrLmgKQEAgLTE0MTAsNiArMTQxMCwxMiBA QCB0eXBlOjpnZXRfY29uc3QgKCkKICAgcmV0dXJuIHR5cGUgKGdjY19qaXRfdHlwZV9nZXRfY29u c3QgKGdldF9pbm5lcl90eXBlICgpKSk7CiB9CiAKK2lubGluZSB0eXBlCit0eXBlOjpnZXRfcmVz dHJpY3QgKCkKK3sKKyAgcmV0dXJuIHR5cGUgKGdjY19qaXRfdHlwZV9nZXRfcmVzdHJpY3QgKGdl dF9pbm5lcl90eXBlICgpKSk7Cit9CisKIGlubGluZSB0eXBlCiB0eXBlOjpnZXRfdm9sYXRpbGUg KCkKIHsKZGlmZiAtLWdpdCBhL2djYy9qaXQvbGliZ2Njaml0LmNjIGIvZ2NjL2ppdC9saWJnY2Nq aXQuY2MKaW5kZXggMmRlZjU4ZjZhYTcuLjI2ZmEyYjM0MDcxIDEwMDY0NAotLS0gYS9nY2Mvaml0 L2xpYmdjY2ppdC5jYworKysgYi9nY2Mvaml0L2xpYmdjY2ppdC5jYwpAQCAtNTM0LDYgKzUzNCwy MCBAQCBnY2Nfaml0X3R5cGVfZ2V0X3ZvbGF0aWxlIChnY2Nfaml0X3R5cGUgKnR5cGUpCiAgIHJl dHVybiAoZ2NjX2ppdF90eXBlICopdHlwZS0+Z2V0X3ZvbGF0aWxlICgpOwogfQogCisvKiBQdWJs aWMgZW50cnlwb2ludC4gIFNlZSBkZXNjcmlwdGlvbiBpbiBsaWJnY2NqaXQuaC4KKworICAgQWZ0 ZXIgZXJyb3ItY2hlY2tpbmcsIHRoZSByZWFsIHdvcmsgaXMgZG9uZSBieSB0aGUKKyAgIGdjYzo6 aml0OjpyZWNvcmRpbmc6OnR5cGU6OmdldF9yZXN0cmljdCBtZXRob2QsIGluCisgICBqaXQtcmVj b3JkaW5nLmNjLiAgKi8KKworZ2NjX2ppdF90eXBlICoKK2djY19qaXRfdHlwZV9nZXRfcmVzdHJp Y3QgKGdjY19qaXRfdHlwZSAqdHlwZSkKK3sKKyAgUkVUVVJOX05VTExfSUZfRkFJTCAodHlwZSwg TlVMTCwgTlVMTCwgIk5VTEwgdHlwZSIpOworCisgIHJldHVybiAoZ2NjX2ppdF90eXBlICopdHlw ZS0+Z2V0X3Jlc3RyaWN0ICgpOworfQorCiAvKiBQdWJsaWMgZW50cnlwb2ludC4gIFNlZSBkZXNj cmlwdGlvbiBpbiBsaWJnY2NqaXQuaC4KIAogICAgQWZ0ZXIgZXJyb3ItY2hlY2tpbmcsIHRoZSBy ZWFsIHdvcmsgaXMgZG9uZSBieSB0aGUKZGlmZiAtLWdpdCBhL2djYy9qaXQvbGliZ2Njaml0Lmgg Yi9nY2Mvaml0L2xpYmdjY2ppdC5oCmluZGV4IDA1N2QzZTU4ZTczLi43NDlmNmMyNDE3NyAxMDA2 NDQKLS0tIGEvZ2NjL2ppdC9saWJnY2NqaXQuaAorKysgYi9nY2Mvaml0L2xpYmdjY2ppdC5oCkBA IC02MzAsNiArNjMwLDE1IEBAIGdjY19qaXRfdHlwZV9nZXRfY29uc3QgKGdjY19qaXRfdHlwZSAq dHlwZSk7CiBleHRlcm4gZ2NjX2ppdF90eXBlICoKIGdjY19qaXRfdHlwZV9nZXRfdm9sYXRpbGUg KGdjY19qaXRfdHlwZSAqdHlwZSk7CiAKKyNkZWZpbmUgTElCR0NDSklUX0hBVkVfZ2NjX2ppdF90 eXBlX2dldF9yZXN0cmljdAorCisvKiBHaXZlbiB0eXBlICJUIiwgZ2V0IHR5cGUgInJlc3RyaWN0 IFQiLgorICAgVGhpcyBBUEkgZW50cnlwb2ludCB3YXMgYWRkZWQgaW4gTElCR0NDSklUX0FCSV8y NTsgeW91IGNhbiB0ZXN0IGZvciBpdHMKKyAgIHByZXNlbmNlIHVzaW5nCisgICAgICNpZmRlZiBM SUJHQ0NKSVRfSEFWRV9nY2Nfaml0X3R5cGVfZ2V0X3Jlc3RyaWN0ICAqLworZXh0ZXJuIGdjY19q aXRfdHlwZSAqCitnY2Nfaml0X3R5cGVfZ2V0X3Jlc3RyaWN0IChnY2Nfaml0X3R5cGUgKnR5cGUp OworCiAjZGVmaW5lIExJQkdDQ0pJVF9IQVZFX1NJWkVEX0lOVEVHRVJTCiAKIC8qIEdpdmVuIHR5 cGVzIExUWVBFIGFuZCBSVFlQRSwgcmV0dXJuIG5vbi16ZXJvIGlmIHRoZXkgYXJlIGNvbXBhdGli bGUuCmRpZmYgLS1naXQgYS9nY2Mvaml0L2xpYmdjY2ppdC5tYXAgYi9nY2Mvaml0L2xpYmdjY2pp dC5tYXAKaW5kZXggMjU0NjNiOTRmZTguLjhiOTBhMGUyZmYzIDEwMDY0NAotLS0gYS9nY2Mvaml0 L2xpYmdjY2ppdC5tYXAKKysrIGIvZ2NjL2ppdC9saWJnY2NqaXQubWFwCkBAIC0yNzEsMyArMjcx LDggQEAgTElCR0NDSklUX0FCSV8yNCB7CiAgICAgZ2NjX2ppdF9sdmFsdWVfc2V0X2FsaWdubWVu dDsKICAgICBnY2Nfaml0X2x2YWx1ZV9nZXRfYWxpZ25tZW50OwogfSBMSUJHQ0NKSVRfQUJJXzIz OworCitMSUJHQ0NKSVRfQUJJXzI1IHsKKyAgZ2xvYmFsOgorICAgIGdjY19qaXRfdHlwZV9nZXRf cmVzdHJpY3Q7Cit9IExJQkdDQ0pJVF9BQklfMjQ7CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRl L2ppdC5kZy9hbGwtbm9uLWZhaWxpbmctdGVzdHMuaCBiL2djYy90ZXN0c3VpdGUvaml0LmRnL2Fs bC1ub24tZmFpbGluZy10ZXN0cy5oCmluZGV4IDgwNjA2MDc2ZTc4Li5lNzYyNTYzZjliZCAxMDA2 NDQKLS0tIGEvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvYWxsLW5vbi1mYWlsaW5nLXRlc3RzLmgKKysr IGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvYWxsLW5vbi1mYWlsaW5nLXRlc3RzLmgKQEAgLTMxMyw2 ICszMTMsOSBAQAogI3VuZGVmIGNyZWF0ZV9jb2RlCiAjdW5kZWYgdmVyaWZ5X2NvZGUKIAorLyog dGVzdC1yZXN0cmljdC5jOiBUaGlzIGNhbid0IGJlIGluIHRoZSB0ZXN0Y2FzZXMgYXJyYXkgYXMg aXQgbmVlZHMKKyAgIHRoZSBgLU8zYCBmbGFnLiAgKi8KKwogLyogdGVzdC1yZWdpc3Rlci12YXJp YWJsZS5jOiBUaGlzIGNhbid0IGJlIGluIHRoZSB0ZXN0Y2FzZXMgYXJyYXkgYXMgaXQKICAgIGlz IHRhcmdldC1zcGVjaWZpYy4gICovCiAKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvaml0LmRn L3Rlc3QtcmVzdHJpY3QuYyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtcmVzdHJpY3QuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTZhYzk2MzI0ZDIKLS0tIC9k ZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LXJlc3RyaWN0LmMKQEAgLTAs MCArMSw3NyBAQAorLyogeyBkZy1kbyBjb21waWxlIHsgdGFyZ2V0IHg4Nl82NC0qLSogfSB9ICov CisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSAi bGliZ2Njaml0LmgiCisKKy8qIFdlIGRvbid0IHdhbnQgc2V0X29wdGlvbnMoKSBpbiBoYXJuZXNz LmggdG8gc2V0IC1PMyB0byBzZWUgdGhhdCB0aGUgcmVzdHJpY3QKKwkgYXR0cmlidXRlIGFmZmVj dHMgdGhlIG9wdGltaXphdGlvbnMuICovCisjZGVmaW5lIFRFU1RfRVNDSEVXU19TRVRfT1BUSU9O Uworc3RhdGljIHZvaWQgc2V0X29wdGlvbnMgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgY29uc3Qg Y2hhciAqYXJndjApCit7CisJLy8gU2V0ICItTzMiLgorCWdjY19qaXRfY29udGV4dF9zZXRfaW50 X29wdGlvbihjdHh0LCBHQ0NfSklUX0lOVF9PUFRJT05fT1BUSU1JWkFUSU9OX0xFVkVMLCAzKTsK K30KKworI2RlZmluZSBURVNUX0NPTVBJTElOR19UT19GSUxFCisjZGVmaW5lIE9VVFBVVF9LSU5E ICAgICAgR0NDX0pJVF9PVVRQVVRfS0lORF9BU1NFTUJMRVIKKyNkZWZpbmUgT1VUUFVUX0ZJTEVO QU1FICAib3V0cHV0LW9mLXRlc3QtcmVzdHJpY3QuYy5zIgorI2luY2x1ZGUgImhhcm5lc3MuaCIK Kwordm9pZAorY3JlYXRlX2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgdm9pZCAqdXNlcl9k YXRhKQoreworCS8qIExldCdzIHRyeSB0byBpbmplY3QgdGhlIGVxdWl2YWxlbnQgb2Y6Cit2b2lk IHQoaW50ICpfX3Jlc3RyaWN0X18gYSwgaW50ICpfX3Jlc3RyaWN0X18gYiwgY2hhciAqX19yZXN0 cmljdF9fIGMpIHsKKwkqYSArPSAqYzsKKwkqYiArPSAqYzsKK30KKwkqLworCWdjY19qaXRfdHlw ZSAqaW50X3R5cGUgPQorCQlnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsIEdDQ19KSVRf VFlQRV9JTlQpOworCWdjY19qaXRfdHlwZSAqcGludF90eXBlID0gZ2NjX2ppdF90eXBlX2dldF9w b2ludGVyKGludF90eXBlKTsKKwlnY2Nfaml0X3R5cGUgKnBpbnRfcmVzdHJpY3RfdHlwZSA9IGdj Y19qaXRfdHlwZV9nZXRfcmVzdHJpY3QocGludF90eXBlKTsKKworCWdjY19qaXRfdHlwZSAqdm9p ZF90eXBlID0KKwkJZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCBHQ0NfSklUX1RZUEVf Vk9JRCk7CisKKwlnY2Nfaml0X3BhcmFtICphID0KKwkJZ2NjX2ppdF9jb250ZXh0X25ld19wYXJh bSAoY3R4dCwgTlVMTCwgcGludF9yZXN0cmljdF90eXBlLCAiYSIpOworCWdjY19qaXRfcGFyYW0g KmIgPQorCQlnY2Nfaml0X2NvbnRleHRfbmV3X3BhcmFtIChjdHh0LCBOVUxMLCBwaW50X3Jlc3Ry aWN0X3R5cGUsICJiIik7CisJZ2NjX2ppdF9wYXJhbSAqYyA9CisJCWdjY19qaXRfY29udGV4dF9u ZXdfcGFyYW0gKGN0eHQsIE5VTEwsIHBpbnRfcmVzdHJpY3RfdHlwZSwgImMiKTsKKwlnY2Nfaml0 X3BhcmFtICpwYXJhbXNbM10gPSB7YSwgYiwgY307CisKKwlnY2Nfaml0X2Z1bmN0aW9uICpmdW5j X3QgPQorCQlnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LCBOVUxMLAorCQkJCQlH Q0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAorCQkJCQl2b2lkX3R5cGUsCisJCQkJCSJ0IiwKKwkJ CQkJMywgcGFyYW1zLAorCQkJCQkwKTsKKworCWdjY19qaXRfYmxvY2sgKmJsb2NrID0gZ2NjX2pp dF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZ1bmNfdCwgTlVMTCk7CisKKwkvKiAqYSArPSAqYzsgKi8K KwlnY2Nfaml0X2Jsb2NrX2FkZF9hc3NpZ25tZW50X29wICgKKwkJYmxvY2ssIE5VTEwsCisJCWdj Y19qaXRfcnZhbHVlX2RlcmVmZXJlbmNlIChnY2Nfaml0X3BhcmFtX2FzX3J2YWx1ZSAoYSksIE5V TEwpLAorCQlHQ0NfSklUX0JJTkFSWV9PUF9QTFVTLAorCQlnY2Nfaml0X2x2YWx1ZV9hc19ydmFs dWUgKAorCQkJZ2NjX2ppdF9ydmFsdWVfZGVyZWZlcmVuY2UgKGdjY19qaXRfcGFyYW1fYXNfcnZh bHVlIChjKSwgTlVMTCkpKTsKKwkvKiAqYiArPSAqYzsgKi8KKwlnY2Nfaml0X2Jsb2NrX2FkZF9h c3NpZ25tZW50X29wICgKKwkJYmxvY2ssIE5VTEwsCisJCWdjY19qaXRfcnZhbHVlX2RlcmVmZXJl bmNlIChnY2Nfaml0X3BhcmFtX2FzX3J2YWx1ZSAoYiksIE5VTEwpLAorCQlHQ0NfSklUX0JJTkFS WV9PUF9QTFVTLAorCQlnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUgKAorCQkJZ2NjX2ppdF9ydmFs dWVfZGVyZWZlcmVuY2UgKGdjY19qaXRfcGFyYW1fYXNfcnZhbHVlIChjKSwgTlVMTCkpKTsKKwor CWdjY19qaXRfYmxvY2tfZW5kX3dpdGhfdm9pZF9yZXR1cm4gKGJsb2NrLCBOVUxMKTsKK30KKwor LyogeyBkZy1maW5hbCB7IGppdC12ZXJpZnktb3V0cHV0LWZpbGUtd2FzLWNyZWF0ZWQgIiIgfSB9 ICovCisvKiB7IGRnLWZpbmFsIHsgaml0LXZlcmlmeS1hc3NlbWJsZXItb3V0cHV0ICJhZGRsCSVl YXgsICglcmRpKQorCWFkZGwJJWVheCwgKCVyc2kpIiB9IH0gKi8KLS0gCjIuMzQuMQoK --0000000000003342ea0603203f02--