Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w0dRS-0024rj-1c for pgsql-hackers@arkaria.postgresql.org; Thu, 12 Mar 2026 10:38:58 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w0dRQ-00EG4D-1C for pgsql-hackers@arkaria.postgresql.org; Thu, 12 Mar 2026 10:38:56 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w0dRP-00EG45-2G for pgsql-hackers@lists.postgresql.org; Thu, 12 Mar 2026 10:38:56 +0000 Received: from mail-yx1-xb130.google.com ([2607:f8b0:4864:20::b130]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w0dRL-00000001ku9-2izv for pgsql-hackers@lists.postgresql.org; Thu, 12 Mar 2026 10:38:55 +0000 Received: by mail-yx1-xb130.google.com with SMTP id 956f58d0204a3-649278a69c5so828839d50.3 for ; Thu, 12 Mar 2026 03:38:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1773311930; cv=none; d=google.com; s=arc-20240605; b=azmG/qjTHDOxxQ78I5nfnHbSsvOi3KLFaTqx8gXSTLeMA3pHWb2L4uITssd+TeE0bH 0m8+smTYIrF4WmvrzBfrA5TTGlWKjFIkaMSwrZkZ7Ccjx30Ni2BKngT7hZ4LckGuAqLw bMrsGt64l6FCkN1tEG6+QFkyh5CZtGWX3wu6E/yIDaJ0VB3OP/9KN3T6/L6HQw2L2QXj g5Bj9icM+s/8SucAYkaz85L7NY8Nk5jmdt3amwyN9/iUArsCZA/hzvnsbp0p21uUpX1I 3vYU1yd9fpno9D/CeyzXqabKWp6T25ss+Ge+Hg5H7iN4wnRWH3Vm51ajpXLC+CGArZu3 WA5w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=nsSLYsvZGLmy0UpQ3dXdJMPYVg/SJwHg0mizg4i1hJ4=; fh=aEHE5Dcg2s1v0N2xmdKRWQotMxL2CVXIYccMJvAdJjc=; b=QwA0jGzTAFULmgoXuNi5fST6TyoqvxGvgQVnYVnfC/Dx1Gu9ck8w55ZMSpOL9/sFx1 saUj7GICck/X+xzjjEBY2YQXZ/95d9JjvNoDjNDYCq1ZQXMFznWNkzTmv2a9o4N+gs1a mFxvnTx7UqX5GC/7udMMT4zjUEaj2q1rvjoFadRcc4wKJl1FuYit0W6Ub8bhZogtJdOK 7qIgs8u/7jUN03ugCCn3sZoszLGDSQudhqu/U/RS/Gcy5nvUo2ZuBWcor93zt7w6RKaY eRY5amnxQa9tx3UX3Ov6nIVp8Qq1LhkfAaDUcD7Kc/vA1i+aJ8YOl0UyR15uZAMbr029 J3AA==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773311930; x=1773916730; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=nsSLYsvZGLmy0UpQ3dXdJMPYVg/SJwHg0mizg4i1hJ4=; b=M2bQC9uHSubAyey6EbsVZVGvGYje5yml5JyXs5QlVbgkYrobDQbOS26BOnnr62Y128 /l7tsBANgPLkaXN0m/RQhF/n3FrtFlr8OlxrE4QWZhNfp3NjnTRiaXTC6qJyBU4jkDox VPPppC7sAJrnVqLpehAx7VHQ2lGUug6OQ5xEcaNadyJEy5CfEX4do0XC/7bafuR+JsvJ 6BmD7QN1dRdGMregExYNmqFaBs0Guw7lpC1QyZWeEfHzu0AO5qFYDqtvGOU2cSIbhXlk BCYHrbBxLX7ciRCtHxStiyF+u8P/ypCnD4QYiCe2zdjK31Yn8hnCP+Dx26F6PzMr+Gte ZT4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1773311930; x=1773916730; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=nsSLYsvZGLmy0UpQ3dXdJMPYVg/SJwHg0mizg4i1hJ4=; b=Y7RXTSV/8AfDkhCCcjO6rSTPVEuMlbGzyAEyqgfwldeV6yyz4q33PppAhsvmDUmKGO V/XFpSE1eS6mnvkciQYSiFOHppai/+JdlCYcUx5wbY4mPISTDTUbrUURqymlhbIH8uDC 8DJygP/BXd5AXcCejehfMs/mjY1lj7YRF2LIhJy0L8Nf0QIbe6rk95rPSRccpCyeZyxJ rkV5SckGE/gItFYTXpxo0jwn1L+FugcrfKci8wg476+AtoSVIkrmzkmYyzihg68ERDk6 S/4bKoiFAnfDIU9qEHLc9Y8jMyByoWsGVcFsfd5peUG78hCEUEXfT8aStlK3myE/gic9 byyA== X-Forwarded-Encrypted: i=1; AJvYcCUGde50RCpZWWJVUgK9PmEFndOFlO0cuo1DqcZY4gEFmb+1zERFGpAiYJSwu+HRjt/gJia4h1bEI7F3jZEy@lists.postgresql.org X-Gm-Message-State: AOJu0Yzf84VycgHbccgHO6cOFgFTtKr74nltTfUPR6umyn9+fzvnJgPQ fmS7NGazMUZBuRkiJzMI3EBd3SYzz74ZHirX7TId0JIANSUt9awUIOS8DZBts0InhI8pfp7Xm/u EM/ak4ZGTRTB9fEINXQwYh49PmzOMdso= X-Gm-Gg: ATEYQzytnwxsF7jvHkzeyQdJmPqi1b8qDU7Fp016GuoKoc7UmXmwjG4oce7YZWliKD8 ArbgFl4LRENSbh9gVF45HRDIXb5HikhDs8bgr/JerJv0bRbWCFjtmYO03O7BIzjS+0rKeVXR5/C EamlPdsZq88IB84jrugJmriBQN2kVGxjcdJwrkqtyzCZq8jYUevw8+uRKLTmIp7MC1x/or+bL+d pICxarpXJWSXeciHokMmYnzCOF95313VjhN8+L3X9wgdn+NBaTwoY90GDRoqJ1rFva5U2nzuTYd QVuCVezvQlNpHFis1UXHGtpyrtwzkU4EXXKN3dchLjn/DPsnbgCwCP1uUPTxLZbMO+5q87h50MZ nIrv9CxX82OjS3a8BzBl5aX2JJmpP1vmdFVo7AGruaA71oZ9Y6TYte5sbdw== X-Received: by 2002:a05:690e:1aa7:b0:646:b1f3:aeb2 with SMTP id 956f58d0204a3-64d65686a28mr4058093d50.3.1773311930202; Thu, 12 Mar 2026 03:38:50 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Pavel Stehule Date: Thu, 12 Mar 2026 11:38:11 +0100 X-Gm-Features: AaiRm503-ocvgocThlRHLjDkl3_qvCQD_wpZ-xRTYuo-Zau2MR3bQgphLDTLjK8 Message-ID: Subject: Re: POC: PLpgSQL FOREACH IN JSON ARRAY To: Chao Li Cc: Jim Jones , PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000ad34b9064cd15bc1" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000ad34b9064cd15bc1 Content-Type: multipart/alternative; boundary="000000000000ad34b7064cd15bbf" --000000000000ad34b7064cd15bbf Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi =C4=8Dt 12. 3. 2026 v 4:55 odes=C3=ADlatel Chao Li = napsal: > > > > On Mar 5, 2026, at 02:50, Pavel Stehule wrote= : > > > > Hi > > > > st 4. 3. 2026 v 12:35 odes=C3=ADlatel Jim Jones > napsal: > > I reviewed the code I have nothing to add at this point. LGTM! > > > > The tests touch a lot of different scenarios, but for the sake of > > completeness I'd like to suggest adding these three cases: > > > > -- EXIT and CONTINUE can be triggered by LOOP_RC_PROCESSING > > DO $$ > > DECLARE x int; > > BEGIN > > FOREACH x IN JSON ARRAY '[1,2,3,4,5]' > > LOOP > > EXIT WHEN x =3D 3; > > RAISE NOTICE '%', x; > > END LOOP; > > END; > > $$; > > > > DO $$ > > DECLARE x int; > > BEGIN > > FOREACH x IN JSON ARRAY '[1,2,3,4,5]' > > LOOP > > CONTINUE WHEN x % 2 =3D 0; > > RAISE NOTICE '%', x; > > END LOOP; > > END; > > $$; > > > > > > -- Variable instead of string > > DO $$ > > DECLARE x int; arr jsonb; > > BEGIN > > SELECT jsonb_agg(i) INTO arr > > FROM generate_series(1,3) i; > > > > FOREACH x IN JSON ARRAY arr > > LOOP > > RAISE NOTICE '%', x; > > END LOOP; > > END; > > $$; > > > > > > I merged these examples to tests > > > > Thank you for review > > > > Regards > > > > Pavel > > > > Thanks! > > > > Best, Jim > > > > I just reviewed and tested the patch. Here comes my comments: > > 1 - pl_gram.y > ``` > + > ereport(ERROR, > + > (errcode(ERRCODE_SYNTAX_ERROR), > + > errmsg("not zero slice is allowed only for arrays"), > + > parser_errposition(@4))); > ``` > > * () around errcode and errmsg are no longer needed. This comment is > general, and I saw other ereport() also use () in this patch. > * parser_errposition should have the same indention as errmsg. > fixed > > 2 - pl_exec.c > ``` > + errdetail("Cannot iterate over a object > value."))); > ``` > > Typo: a -> an > fixed > > 3 - pl_exec.c > ``` > + tmp_cxt =3D AllocSetContextCreate(CurrentMemoryContext, > + > "FOREACH IN JSON ARRAY temporary cxt", > + > ALLOCSET_DEFAULT_SIZES); > ``` > > Do we need to destroy tmp_cxt after the loop? > no - it is cleaned by MemoryContextReset(stmt_mcontext); > > 4 Looks like record type of loop var is not supported: > ``` > evantest=3D# do $$ > declare > r record; > begin > foreach r in json array '[{"x":1,"y":"hi"},{"x":2,"y":"hello"}]=E2=80= =99 > loop > raise notice 'x: %, y: %', r.x, r.y; > end loop; > end; > $$; > ERROR: record type has not been registered > CONTEXT: PL/pgSQL function inline_code_block line 5 at FOREACH over json > array > ``` > > So, I want to check if you intentionally don=E2=80=99t want to support th= at or > just missed that? If it=E2=80=99s not supported, then maybe document that= . > It is intentional at this moment (and I think so it will be in future too). For reading fields from a json object I use the json_populate_type function, and this function needs a known tupdesc. Generally JSON objects have no fixed structure, and when a record's variable has no assigned type, then we have to create new tupdesc for each value. This can be possibly slow and memory expensive. Probably - I never tested this case. It is valid use case, but it can be solved in later - and the support will be more invasive - requires support in json_populate_type I enhanced doc The target variable can be of type RECORD, but the real structure has to be assigned before usage in FOREACH statement. > > 5 I tried that composite type of loop var is supported, maybe add a test > case for that. What I tested: > ``` > create type t_foreach_json_row as ( > x int, > y text, > z numeric > ); > > do $$ > declare > r t_foreach_json_row; > begin > foreach r in json array > '[{"x":1,"y":"one","z":1.5}, > {"x":2,"y":"two"}, > {"y":"three","z":3.14}, > {}]' > loop > raise notice 'x=3D%, y=3D%, z=3D%', r.x, r.y, r.z; > end loop; > end; > $$; > > drop type t_foreach_json_row; > ``` > it is there already create type t3 as (x int, y numeric, z varchar); do $$ declare c t3; begin foreach c in json array '[{}, {"z":"Hi"}, {"y": 3.14}, {"z":"Hi", "x":10, "y":3.14}]' loop raise notice 'x: %, y: %, z: %', c.x, c.y, c.z; end loop; end; $$; assigned updated version - I'll try to modify this patch like Tom proposed in the next version. But the fundament behavior should be same Thank you for check and testing Regards Pavel > > Best regards, > -- > Chao Li (Evan) > HighGo Software Co., Ltd. > https://www.highgo.com/ > > > > > --000000000000ad34b7064cd15bbf Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi

=C4=8Dt 12. 3. 2026 v=C2=A04:= 55 odes=C3=ADlatel Chao Li <li= .evan.chao@gmail.com> napsal:


> On Mar 5, 2026, at 02:50, Pavel Stehule <pavel.stehule@gmail.com> wrote: >
> Hi
>
> st 4. 3. 2026 v 12:35 odes=C3=ADlatel Jim Jones <jim.jones@uni-muenster.de&= gt; napsal:
> I reviewed the code I have nothing to add at this point. LGTM!
>
> The tests touch a lot of different scenarios, but for the sake of
> completeness I'd like to suggest adding these three cases:
>
> -- EXIT and CONTINUE can be triggered by LOOP_RC_PROCESSING
> DO $$
> DECLARE x int;
> BEGIN
>=C2=A0 =C2=A0FOREACH x IN JSON ARRAY '[1,2,3,4,5]'
>=C2=A0 =C2=A0LOOP
>=C2=A0 =C2=A0 =C2=A0EXIT WHEN x =3D 3;
>=C2=A0 =C2=A0 =C2=A0RAISE NOTICE '%', x;
>=C2=A0 =C2=A0END LOOP;
> END;
> $$;
>
> DO $$
> DECLARE x int;
> BEGIN
>=C2=A0 =C2=A0FOREACH x IN JSON ARRAY '[1,2,3,4,5]'
>=C2=A0 =C2=A0LOOP
>=C2=A0 =C2=A0 =C2=A0CONTINUE WHEN x % 2 =3D 0;
>=C2=A0 =C2=A0 =C2=A0RAISE NOTICE '%', x;
>=C2=A0 =C2=A0END LOOP;
> END;
> $$;
>
>
> -- Variable instead of string
> DO $$
> DECLARE x int; arr jsonb;
> BEGIN
>=C2=A0 =C2=A0SELECT jsonb_agg(i) INTO arr
>=C2=A0 =C2=A0FROM generate_series(1,3) i;
>
>=C2=A0 =C2=A0FOREACH x IN JSON ARRAY arr
>=C2=A0 =C2=A0LOOP
>=C2=A0 =C2=A0 =C2=A0RAISE NOTICE '%', x;
>=C2=A0 =C2=A0END LOOP;
> END;
> $$;
>
>
> I merged these examples to tests
>
> Thank you for review
>
> Regards
>
> Pavel
>=C2=A0
> Thanks!
>
> Best, Jim
> <v20260304-5-0001-FOREACH-scalar-IN-JSON-ARRAY.patch>

I just reviewed and tested the patch. Here comes my comments:

1 - pl_gram.y
```
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0ereport(ERROR,
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0(errcode(ERRCODE= _SYNTAX_ERROR),
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 errmsg("no= t zero slice is allowed only for arrays"),
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 parser_errposition(@4)));
```

* () around errcode and errmsg are no longer needed. This comment is genera= l, and I saw other ereport() also use () in this patch.
* parser_errposition should have the same indention as errmsg.

fixed
=C2=A0

2 - pl_exec.c
```
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 errdetail("Cannot iterate over = a object value.")));
```

Typo: a -> an

fixed
=C2=A0=

3 - pl_exec.c
```
+=C2=A0 =C2=A0 =C2=A0 =C2=A0tmp_cxt =3D AllocSetContextCreate(CurrentMemory= Context,
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0"FOREACH IN JSON ARRAY temporary cxt&qu= ot;,
+=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 = =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2= =A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0ALLOCSET_DEFAULT_SIZES);
```

Do we need to destroy tmp_cxt after the loop?

no - it is cleaned by=C2=A0MemoryContextReset(stmt_mcontext);=C2=A0<= /div>

4 Looks like record type of loop var is not supported:
```
evantest=3D# do $$
declare
=C2=A0 r record;
begin
=C2=A0 foreach r in json array '[{"x":1,"y":"h= i"},{"x":2,"y":"hello"}]=E2=80=99
=C2=A0 loop
=C2=A0 =C2=A0 raise notice 'x: %, y: %', r.x, r.y;
=C2=A0 end loop;
end;
$$;
ERROR:=C2=A0 record type has not been registered
CONTEXT:=C2=A0 PL/pgSQL function inline_code_block line 5 at FOREACH over j= son array
```

So, I want to check if you intentionally don=E2=80=99t want to support that= or just missed that? If it=E2=80=99s not supported, then maybe document th= at.

It is intentional at this=C2=A0mome= nt (and I think so it will be in future too). For reading fields from a jso= n object I use the json_populate_type function, and this function needs a k= nown tupdesc. Generally=C2=A0JSON objects have no fixed structure, and when= a record's variable=C2=A0has no assigned type, then we have to create = new tupdesc=C2=A0for each value.=C2=A0This can be possibly slow and memory = expensive. Probably - I never tested this case. It is valid use case, but i= t can be solved in later - and the support will be more invasive - requires= support in=C2=A0json_populate_type

I enhanced doc=

=C2=A0 =C2=A0 <para>
=C2=A0 =C2=A0 =C2= =A0The target variable can be of type RECORD, but the real structure has to= be
=C2=A0 =C2=A0 =C2=A0assigned before usage in FOREACH statement.
= =C2=A0 =C2=A0 </para>


=C2=A0

5 I tried that composite type of loop var is supported, maybe add a test ca= se for that. What I tested:
```
create type t_foreach_json_row as (
=C2=A0 x int,
=C2=A0 y text,
=C2=A0 z numeric
);

do $$
declare
=C2=A0 r t_foreach_json_row;
begin
=C2=A0 foreach r in json array
=C2=A0 =C2=A0 '[{"x":1,"y":"one","z&= quot;:1.5},
=C2=A0 =C2=A0 =C2=A0 {"x":2,"y":"two"},
=C2=A0 =C2=A0 =C2=A0 {"y":"three","z":3.14},<= br> =C2=A0 =C2=A0 =C2=A0 {}]'
=C2=A0 loop
=C2=A0 =C2=A0 raise notice 'x=3D%, y=3D%, z=3D%', r.x, r.y, r.z; =C2=A0 end loop;
end;
$$;

drop type t_foreach_json_row;
```

it is there already

<= /div>
create type t3 as (x int, y numeric, z varchar);

do $$
= declare c t3;
begin
=C2=A0 foreach c in json array '[{}, {"z= ":"Hi"}, {"y": 3.14}, {"z":"Hi"= ;, "x":10, "y":3.14}]'
=C2=A0 loop
=C2=A0 =C2= =A0 raise notice 'x: %, y: %, z: %', c.x, c.y, c.z;
=C2=A0 end l= oop;
end;
$$;

assigned updated version -=C2=A0

I'll try to modify this patch like Tom proposed in= the next version. But the fundament behavior should be same

=
Thank you for check and testing

Regards=

Pavel


=C2= =A0

Best regards,
--
Chao Li (Evan)
HighGo Software Co., Ltd.
ht= tps://www.highgo.com/




--000000000000ad34b7064cd15bbf-- --000000000000ad34b9064cd15bc1 Content-Type: text/x-patch; charset="US-ASCII"; name="v20260312-6-0001-FOREACH-scalar-IN-JSON-ARRAY.patch" Content-Disposition: attachment; filename="v20260312-6-0001-FOREACH-scalar-IN-JSON-ARRAY.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmnc3hyy0 RnJvbSAwNzk4ZDQ3OGRkYmZhMTY3NmFjZTJkYWZlOGJkODQ0MTQyM2E1NmE0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAib2tib2JAZ2l0aHViLmNvbSIgPHBhdmVsLnN0ZWh1bGVAZ21h aWwuY29tPgpEYXRlOiBNb24sIDIzIEZlYiAyMDI2IDEyOjUzOjQ0ICswMTAwClN1YmplY3Q6IFtQ QVRDSF0gRk9SRUFDSCBzY2FsYXIgSU4gSlNPTiBBUlJBWQoKdGhpcyBwYXRjaCBpbnRyb2R1Y2Ug Rk9SRUFDSCBzY2FsYXJfdmFyIElOIEpTT04gQVJSQVkuIFRoZSBkZXNpZ24gaXMgYmFzZWQKb24g YmVoYXZlIG9mIGpzb25iX2FycmF5X2VsZW1lbnRzIGZ1bmN0aW9ucy4gSW4gdGhpcyBjYXNlLCBG T1JFQUNIIGVuZm9yY2UKY2FzdGluZyB0byB0YXJnZXQgdHlwZSAoYmVjYXVzZSB3ZSBrbm93IHRh cmdldCB0eXBlKSBhbmQgdHJ5IHRvIHJlZHVjZQpJTyBjYXN0aW5nLiBBdHRlbnRpb246IElPIGNh c3RpbmcgY2FuIGJlIG1vcmUgc3RyaWN0LCB0aGVuIGNhc3RpbmcgYmFzZWQKb24gY2FzdCBmdW5j dGlvbnMuCgpERUNMQVJFIHQgaW50OwpCRUdJTgogIC0tIHRoaXMgY2FuIHdvcmsgYmVjYXVzZSB3 ZSB1c2UgY2FzdCBudW1lcmljIC0+IGludAogIEZPUkVBQ0ggdCBJTiBKU09OIEFSUkFZICdbMSwy LDMuMTRdJwogIExPT1AKCiAgLS0gdGhpcyBmYWlscywgYmVjYXVzZSBJTyBjYXN0IGlzIHVzZWQs IGFuZCBpbnRlZ2VyIGlucHV0IGZ1bmN0aW9uCiAgLS0gYWxsb3dzIG9ubHkgZGlnaXRzCiAgRk9S RUFDIHQgSU4gSlNPTiBBUlJBWSAnWzEsMiwzLCIzLjE0Il0nCiAgTE9PUAoKQ29uY2VwdHVhbCBx dWVzdGlvbiBpcyBpZiBjYXN0aW5nIHNob3VsZCBiZSBzdHJpY3QgbGlrZSAib2xkIiBQb3N0Z3Jl U1FMCmpzb24gZnVuY3Rpb24gb3IgbGF4IGFzICJuZXciIFNRTC9KU09OIGZ1bmN0aW9ucz8gSSBj YW4gaW1hZ2luZSBsYXggbW9kZQphcyBkZWZhdWx0IHdpdGggcG9zc2liaWxpdHkgdG8gc3dpdGNo IHRvIHN0cmljdCBtb2RlICh0aGlzIGlzIG5vdCBpbXBsZW1lbnRlZApub3cpOgoKICBGT1JFQUNI IHQgSU4gSlNPTiBBUlJBWSAnWzEsMiwzXScgRVJST1IgT04gRU1QVFkgRVJST1IgT04gRVJST1IK ICBMT09QCiAgICAuLi4KClRoZSBwZXJmb3JtYW5jZSAoYmVzdCBjYXNlIGZvciBpdGVyYXRpb24g b3ZlciAxMDAwIGZpZWxkcyBhcnJheSkgaXMgYWJvdXQKNHggYmV0dGVyIHRoYW4gd2hlbiBGT1Ig SU4gU0VMRUNUIGpzb25iX2FycmF5X2VsZW1lbnRzIGlzIHVzZWQuCi0tLQogZG9jL3NyYy9zZ21s L3BscGdzcWwuc2dtbCAgICAgICAgICAgICAgICAgICAgIHwgIDY1ICsrKysKIHNyYy9wbC9wbHBn c3FsL3NyYy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogLi4uL3BscGdzcWwv c3JjL2V4cGVjdGVkL3BscGdzcWxfZm9yZWFjaC5vdXQgIHwgMjk3ICsrKysrKysrKysrKysrKysr Kwogc3JjL3BsL3BscGdzcWwvc3JjL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgIHwgICAxICsK IHNyYy9wbC9wbHBnc3FsL3NyYy9wbF9leGVjLmMgICAgICAgICAgICAgICAgICB8IDI5NiArKysr KysrKysrKysrKysrKwogc3JjL3BsL3BscGdzcWwvc3JjL3BsX2Z1bmNzLmMgICAgICAgICAgICAg ICAgIHwgIDI5ICsrCiBzcmMvcGwvcGxwZ3NxbC9zcmMvcGxfZ3JhbS55ICAgICAgICAgICAgICAg ICAgfCAgMzkgKystCiBzcmMvcGwvcGxwZ3NxbC9zcmMvcGxfdW5yZXNlcnZlZF9rd2xpc3QuaCAg ICAgfCAgIDEgKwogc3JjL3BsL3BscGdzcWwvc3JjL3BscGdzcWwuaCAgICAgICAgICAgICAgICAg IHwgIDM2ICsrLQogc3JjL3BsL3BscGdzcWwvc3JjL3NxbC9wbHBnc3FsX2ZvcmVhY2guc3FsICAg IHwgMjUzICsrKysrKysrKysrKysrKwogMTAgZmlsZXMgY2hhbmdlZCwgMTAxMSBpbnNlcnRpb25z KCspLCA4IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9wbC9wbHBnc3FsL3Ny Yy9leHBlY3RlZC9wbHBnc3FsX2ZvcmVhY2gub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Bs L3BscGdzcWwvc3JjL3NxbC9wbHBnc3FsX2ZvcmVhY2guc3FsCgpkaWZmIC0tZ2l0IGEvZG9jL3Ny Yy9zZ21sL3BscGdzcWwuc2dtbCBiL2RvYy9zcmMvc2dtbC9wbHBnc3FsLnNnbWwKaW5kZXggNTYx ZjZlNTBkNjMuLjRhMjdlMDEzZjJhIDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcGxwZ3NxbC5z Z21sCisrKyBiL2RvYy9zcmMvc2dtbC9wbHBnc3FsLnNnbWwKQEAgLTI3ODAsNiArMjc4MCw3MSBA QCBOT1RJQ0U6ICByb3cgPSB7MTAsMTEsMTJ9CiAgICAgPC9wYXJhPgogICAgPC9zZWN0Mj4KIAor ICAgPHNlY3QyIGlkPSJwbHBnc3FsLWZvcmVhY2gtanNvbi1hcnJheSI+CisgICAgPHRpdGxlPkxv b3BpbmcgdGhyb3VnaCBKU09OIGFycmF5czwvdGl0bGU+CisKKyAgICA8cGFyYT4KKyAgICAgVGhl IDxsaXRlcmFsPkZPUkVBQ0g8L2xpdGVyYWw+IGxvb3AgaXMgbXVjaCBsaWtlIGEgcmVndWxhcgor ICAgICA8bGl0ZXJhbD5GT1JFQUNIPC9saXRlcmFsPiBsb29wIG92ZXIgYXJyYXlzLAorICAgICBi dXQgaW5zdGVhZCBvZiBpdGVyYXRpbmcgdGhyb3VnaCBlbGVtZW50cyBvZiB0aGUgYXJyYXksCisg ICAgIGl0IGl0ZXJhdGVzIHRocm91Z2ggdGhlIGVsZW1lbnRzIG9mIGEgSlNPTiBhcnJheSB2YWx1 ZQorICAgICAoZXhwcmVzc2lvbiBpcyBpbnRlcm5hbGx5IGNhc3RlZCB0byBqc29uYiB0eXBlKS4K KworPHN5bm9wc2lzPgorPG9wdGlvbmFsPiAmbHQ7Jmx0OzxyZXBsYWNlYWJsZT5sYWJlbDwvcmVw bGFjZWFibGU+Jmd0OyZndDsgPC9vcHRpb25hbD4KK0ZPUkVBQ0ggPHJlcGxhY2VhYmxlPnRhcmdl dDwvcmVwbGFjZWFibGU+IElOIEpTT04gQVJSQVkgPHJlcGxhY2VhYmxlPmV4cHJlc3Npb248L3Jl cGxhY2VhYmxlPiBMT09QCisgICAgPHJlcGxhY2VhYmxlPnN0YXRlbWVudHM8L3JlcGxhY2VhYmxl PgorRU5EIExPT1AgPG9wdGlvbmFsPiA8cmVwbGFjZWFibGU+bGFiZWw8L3JlcGxhY2VhYmxlPiA8 L29wdGlvbmFsPjsKKzwvc3lub3BzaXM+CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAg IFRoZSB0YXJnZXQgY2FuIGJlIGEgc2NhbGFyIHZhcmlhYmxlLCBhIGNvbXBvc2l0ZSB2YXJpYWJs ZSwgb3IgYSBsaXN0CisgICAgIG9mIHNjYWxhciB2YXJpYWJsZXMuIFdoZW4gdmFyaWFibGUgaXMg bm90IHNjYWxhciwgdGhlbiBhc3NpZ25lZCB2YWx1ZQorICAgICBzaG91bGQgYmUgYSBKU09OIG9i amVjdCBhbmQgdGhlIEpTT04gYXR0cmlidXRlcyBhcmUgYXNzaWduZWQgYnkgbmFtZXMuCisKKzxw cm9ncmFtbGlzdGluZz4KK0NSRUFURSBGVU5DVElPTiBwcmludF9lbGVtZW50cyhqc29uYikgUkVU VVJOUyB2b2lkIEFTICQkCitERUNMQVJFCisgIHggaW50OworQkVHSU4KKyAgRk9SRUFDSCB4IElO IEpTT04gQVJSQVkgJDEKKyAgTE9PUAorICAgIFJBSVNFIE5PVElDRSAncm93ID0gJScsIHg7Cisg IEVORCBMT09QOworRU5EOworJCQgTEFOR1VBR0UgcGxwZ3NxbDsKKworU0VMRUNUIHByaW50X2Vs ZW1lbnRzKCdbMSwyLDNdJyk7CitOT1RJQ0U6ICByb3cgPSAxCitOT1RJQ0U6ICByb3cgPSAyCitO T1RJQ0U6ICByb3cgPSAzCisKK0NSRUFURSBGVU5DVElPTiBwcmludF9maWVsZHMoanNvbmIpIFJF VFVSTlMgdm9pZCBBUyAkJAorREVDTEFSRQorICB4IGludDsgeSB2YXJjaGFyOworQkVHSU4KKyAg Rk9SRUFDSCB4LCB5IElOIEpTT04gQVJSQVkgJDEKKyAgTE9PUAorICAgIFJBSVNFIE5PVElDRSAn eDogJSwgeTogJScsIHgsIHk7CisgIEVORCBMT09QOworRU5EOworJCQgTEFOR1VBR0UgcGxwZ3Nx bDsKKworU0VMRUNUIHByaW50X2ZpZWxkcygnW3t9LHsieCI6MTB9LHsieSI6IkhpIn0seyJ5Ijoi SGkiLCAieCI6MTAwMH1dJyk7CitOT1RJQ0U6ICB4OiAmbHQ7TlVMTCZndDssIHk6ICZsdDtOVUxM Jmd0OworTk9USUNFOiAgeDogMTAsIHk6ICZsdDtOVUxMJmd0OworTk9USUNFOiAgeDogJmx0O05V TEwmZ3Q7LCB5OiBIaQorTk9USUNFOiAgeDogMTAwMCwgeTogSGkKKzwvcHJvZ3JhbWxpc3Rpbmc+ CisgICAgPC9wYXJhPgorCisgICAgPHBhcmE+CisgICAgIFRoZSB0YXJnZXQgdmFyaWFibGUgY2Fu IGJlIG9mIHR5cGUgPGxpdGVyYWw+UkVDT1JEPC9saXRlcmFsPiwgYnV0IHRoZSByZWFsIHN0cnVj dHVyZSBoYXMgdG8gYmUKKyAgICAgYXNzaWduZWQgYmVmb3JlIHVzYWdlIGluIHRoZSA8bGl0ZXJh bD5GT1JFQUNIPC9saXRlcmFsPiBzdGF0ZW1lbnQuCisgICAgPC9wYXJhPgorICAgPC9zZWN0Mj4K KwogICAgPHNlY3QyIGlkPSJwbHBnc3FsLWVycm9yLXRyYXBwaW5nIj4KICAgICA8dGl0bGU+VHJh cHBpbmcgRXJyb3JzPC90aXRsZT4KIApkaWZmIC0tZ2l0IGEvc3JjL3BsL3BscGdzcWwvc3JjL01h a2VmaWxlIGIvc3JjL3BsL3BscGdzcWwvc3JjL01ha2VmaWxlCmluZGV4IDYzY2I5NmZhZTNlLi41 YmQwY2YzMWRmYyAxMDA2NDQKLS0tIGEvc3JjL3BsL3BscGdzcWwvc3JjL01ha2VmaWxlCisrKyBi L3NyYy9wbC9wbHBnc3FsL3NyYy9NYWtlZmlsZQpAQCAtMzUsNyArMzUsNyBAQCBSRUdSRVNTX09Q VFMgPSAtLWRibmFtZT0kKFBMX1RFU1REQikKIFJFR1JFU1MgPSBwbHBnc3FsX2FycmF5IHBscGdz cWxfY2FjaGUgcGxwZ3NxbF9jYWxsIHBscGdzcWxfY29udHJvbCBcCiAJcGxwZ3NxbF9jb3B5IHBs cGdzcWxfZG9tYWluIHBscGdzcWxfbWlzYyBcCiAJcGxwZ3NxbF9yZWNvcmQgcGxwZ3NxbF9zaW1w bGUgcGxwZ3NxbF90cmFuc2FjdGlvbiBcCi0JcGxwZ3NxbF90cmFwIHBscGdzcWxfdHJpZ2dlciBw bHBnc3FsX3ZhcnByb3BzCisJcGxwZ3NxbF90cmFwIHBscGdzcWxfdHJpZ2dlciBwbHBnc3FsX3Zh cnByb3BzIHBscGdzcWxfZm9yZWFjaAogCiAjIHdoZXJlIHRvIGZpbmQgZ2VuX2tleXdvcmRsaXN0 LnBsIGFuZCBzdWJzaWRpYXJ5IGZpbGVzCiBUT09MU0RJUiA9ICQodG9wX3NyY2Rpcikvc3JjL3Rv b2xzCmRpZmYgLS1naXQgYS9zcmMvcGwvcGxwZ3NxbC9zcmMvZXhwZWN0ZWQvcGxwZ3NxbF9mb3Jl YWNoLm91dCBiL3NyYy9wbC9wbHBnc3FsL3NyYy9leHBlY3RlZC9wbHBnc3FsX2ZvcmVhY2gub3V0 Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wOTBkYTk4Mzg0OAotLS0g L2Rldi9udWxsCisrKyBiL3NyYy9wbC9wbHBnc3FsL3NyYy9leHBlY3RlZC9wbHBnc3FsX2ZvcmVh Y2gub3V0CkBAIC0wLDAgKzEsMjk3IEBACistLSBpbnB1dCBtdXN0IGJlIGEgSlNPTiBhcnJheQor ZG8gJCQKK2RlY2xhcmUgeCBudW1lcmljOworYmVnaW4KKyAgZm9yZWFjaCB4IGluIGpzb24gYXJy YXkgTlVMTCAtLSBmYWlsCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUnLCB4OworICBlbmQg bG9vcDsKK2VuZDsKKyQkOworRVJST1I6ICBGT1JFQUNIIGV4cHJlc3Npb24gbXVzdCBub3QgYmUg bnVsbAorQ09OVEVYVDogIFBML3BnU1FMIGZ1bmN0aW9uIGlubGluZV9jb2RlX2Jsb2NrIGxpbmUg NCBhdCBGT1JFQUNIIG92ZXIganNvbiBhcnJheQorZG8gJCQKK2RlY2xhcmUgeCBudW1lcmljOwor YmVnaW4KKyAgZm9yZWFjaCB4IGluIGpzb24gYXJyYXkgJzEwJyAtLSBmYWlsCisgIGxvb3AKKyAg ICByYWlzZSBub3RpY2UgJyUnLCB4OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworRVJST1I6ICBG T1JFQUNIIGV4cHJlc3Npb24gbXVzdCBldmFsdWF0ZSB0byBhIEpTT04gYXJyYXkKK0hJTlQ6ICBD YW5ub3QgaXRlcmF0ZSBvdmVyIGEgc2NhbGFyIHZhbHVlLgorQ09OVEVYVDogIFBML3BnU1FMIGZ1 bmN0aW9uIGlubGluZV9jb2RlX2Jsb2NrIGxpbmUgNCBhdCBGT1JFQUNIIG92ZXIganNvbiBhcnJh eQorZG8gJCQKK2RlY2xhcmUgeCBudW1lcmljOworYmVnaW4KKyAgZm9yZWFjaCB4IGluIGpzb24g YXJyYXkgJ3t9JyAtLSBmYWlsCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUnLCB4OworICBl bmQgbG9vcDsKK2VuZDsKKyQkOworRVJST1I6ICBGT1JFQUNIIGV4cHJlc3Npb24gbXVzdCBldmFs dWF0ZSB0byBhIEpTT04gYXJyYXkKK0RFVEFJTDogIENhbm5vdCBpdGVyYXRlIG92ZXIgYW4gb2Jq ZWN0IHZhbHVlLgorQ09OVEVYVDogIFBML3BnU1FMIGZ1bmN0aW9uIGlubGluZV9jb2RlX2Jsb2Nr IGxpbmUgNCBhdCBGT1JFQUNIIG92ZXIganNvbiBhcnJheQorLS0gbnVtZXJpYyB0byBudW1lcmlj CitkbyAkJAorZGVjbGFyZSB4IG51bWVyaWM7CitiZWdpbgorICBmb3JlYWNoIHggaW4ganNvbiBh cnJheSAnWzEwLDIwLDMwLDMuMTQsIG51bGxdJworICBsb29wCisgICAgcmFpc2Ugbm90aWNlICcl JywgeDsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKK05PVElDRTogIDEwCitOT1RJQ0U6ICAyMAor Tk9USUNFOiAgMzAKK05PVElDRTogIDMuMTQKK05PVElDRTogIDxOVUxMPgorLS0gbnVtZXJpYyB0 byBpbnQgYnkgY2FzdAorZG8gJCQKK2RlY2xhcmUgeCBpbnQ7CitiZWdpbgorICBmb3JlYWNoIHgg aW4ganNvbiBhcnJheSAnWzEwLDIwLDMwLDMuMTQsIG51bGxdJworICBsb29wCisgICAgcmFpc2Ug bm90aWNlICclJywgeDsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKK05PVElDRTogIDEwCitOT1RJ Q0U6ICAyMAorTk9USUNFOiAgMzAKK05PVElDRTogIDMKK05PVElDRTogIDxOVUxMPgorLS0gdGVz dCBvZiBGT1VORCB2YXJpYWJsZQorZG8gJCQKK2RlY2xhcmUgeCBpbnQ7CitiZWdpbgorICBmb3Jl YWNoIHggaW4ganNvbiBhcnJheSAnWzEwXScKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAnJScs IHg7CisgIGVuZCBsb29wOworICByYWlzZSBub3RpY2UgJ0ZPVU5EOiAlJywgZm91bmQ7CitlbmQ7 CiskJDsKK05PVElDRTogIDEwCitOT1RJQ0U6ICBGT1VORDogdAorLS0gdGVzdCBvZiBGT1VORCB2 YXJpYWJsZQorZG8gJCQKK2RlY2xhcmUgeCBpbnQ7CitiZWdpbgorICBmb3JlYWNoIHggaW4ganNv biBhcnJheSAnW10nCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUnLCB4OworICBlbmQgbG9v cDsKKyAgcmFpc2Ugbm90aWNlICdGT1VORDogJScsIGZvdW5kOworZW5kOworJCQ7CitOT1RJQ0U6 ICBGT1VORDogZgorLS0gY29udmVyc2lvbiAiMy4xNCIgdG8gaW50IHNob3VsZCB0byBmYWlsIGR1 ZSBJTyBjYXN0CitkbyAkJAorZGVjbGFyZSB4IGludDsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBq c29uIGFycmF5ICdbIjEwIiwyMCwzMCwiMy4xNCJdJworICBsb29wCisgICAgcmFpc2Ugbm90aWNl ICclJywgeDsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKK05PVElDRTogIDEwCitOT1RJQ0U6ICAy MAorTk9USUNFOiAgMzAKK0VSUk9SOiAgaW52YWxpZCBpbnB1dCBzeW50YXggZm9yIHR5cGUgaW50 ZWdlcjogIjMuMTQiCitDT05URVhUOiAgUEwvcGdTUUwgZnVuY3Rpb24gaW5saW5lX2NvZGVfYmxv Y2sgbGluZSA0IGF0IEZPUkVBQ0ggb3ZlciBqc29uIGFycmF5CitkbyAkJAorZGVjbGFyZSB4IGJv b2xlYW47CitiZWdpbgorICBmb3JlYWNoIHggaW4ganNvbiBhcnJheSAnW3RydWUsIGZhbHNlXScK KyAgbG9vcAorICBpZiB4IHRoZW4KKyAgICByYWlzZSBub3RpY2UgJ3RydWUnOworICBlbHNlCisg ICAgcmFpc2Ugbm90aWNlICdmYWxzZSc7CisgIGVuZCBpZjsKKyAgZW5kIGxvb3A7CitlbmQ7Cisk JDsKK05PVElDRTogIHRydWUKK05PVElDRTogIGZhbHNlCistLSBqc29uYiB0byBqc29uYgorZG8g JCQKK2RlY2xhcmUgeCBqc29uYjsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBqc29uIGFycmF5ICdb MTAsMjAsMzAsMy4xNCwgbnVsbCwgIkhpIl0nCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUn LCB4OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworTk9USUNFOiAgMTAKK05PVElDRTogIDIwCitO T1RJQ0U6ICAzMAorTk9USUNFOiAgMy4xNAorTk9USUNFOiAgbnVsbAorTk9USUNFOiAgIkhpIgor LS0ganNvbmIgdG8ganNvbgorZG8gJCQKK2RlY2xhcmUgeCBqc29uOworYmVnaW4KKyAgZm9yZWFj aCB4IGluIGpzb24gYXJyYXkgJ1sxMCwyMCwzMCwzLjE0LCBudWxsLCAiSGkiXScKKyAgbG9vcAor ICAgIHJhaXNlIG5vdGljZSAnJScsIHg7CisgIGVuZCBsb29wOworZW5kOworJCQ7CitOT1RJQ0U6 ICAxMAorTk9USUNFOiAgMjAKK05PVElDRTogIDMwCitOT1RJQ0U6ICAzLjE0CitOT1RJQ0U6ICBu dWxsCitOT1RJQ0U6ICAiSGkiCistLSBpdGVyYXRpb24gb3ZlciBjb21wb3NpdGVzCitkbyAkJAor ZGVjbGFyZSB4IGludDsgeSBudW1lcmljOyB6IHZhcmNoYXI7CitiZWdpbgorICBmb3JlYWNoIHgs IHksIHogaW4ganNvbiBhcnJheSAnW3t9LCB7InoiOiJIaSJ9LCB7InkiOiAzLjE0fSwgeyJ6Ijoi SGkiLCAieCI6MTAsICJ5IjozLjE0fV0nCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJ3g6ICUs IHk6ICUsIHo6ICUnLCB4LCB5LCB6OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworTk9USUNFOiAg eDogPE5VTEw+LCB5OiA8TlVMTD4sIHo6IDxOVUxMPgorTk9USUNFOiAgeDogPE5VTEw+LCB5OiA8 TlVMTD4sIHo6IEhpCitOT1RJQ0U6ICB4OiA8TlVMTD4sIHk6IDMuMTQsIHo6IDxOVUxMPgorTk9U SUNFOiAgeDogMTAsIHk6IDMuMTQsIHo6IEhpCitjcmVhdGUgdHlwZSB0MyBhcyAoeCBpbnQsIHkg bnVtZXJpYywgeiB2YXJjaGFyKTsKK2RvICQkCitkZWNsYXJlIGMgdDM7CitiZWdpbgorICBmb3Jl YWNoIGMgaW4ganNvbiBhcnJheSAnW3t9LCB7InoiOiJIaSJ9LCB7InkiOiAzLjE0fSwgeyJ6Ijoi SGkiLCAieCI6MTAsICJ5IjozLjE0fV0nCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJ3g6ICUs IHk6ICUsIHo6ICUnLCBjLngsIGMueSwgYy56OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworTk9U SUNFOiAgeDogPE5VTEw+LCB5OiA8TlVMTD4sIHo6IDxOVUxMPgorTk9USUNFOiAgeDogPE5VTEw+ LCB5OiA8TlVMTD4sIHo6IEhpCitOT1RJQ0U6ICB4OiA8TlVMTD4sIHk6IDMuMTQsIHo6IDxOVUxM PgorTk9USUNFOiAgeDogMTAsIHk6IDMuMTQsIHo6IEhpCitkbyAkJAorZGVjbGFyZSBjIHQzOwor YmVnaW4KKyAgZm9yZWFjaCBjLngsIGMueSwgYy56IGluIGpzb24gYXJyYXkgJ1t7fSwgeyJ6Ijoi SGkifSwgeyJ5IjogMy4xNH0sIHsieiI6IkhpIiwgIngiOjEwLCAieSI6My4xNH1dJworICBsb29w CisgICAgcmFpc2Ugbm90aWNlICd4OiAlLCB5OiAlLCB6OiAlJywgYy54LCBjLnksIGMuejsKKyAg ZW5kIGxvb3A7CitlbmQ7CiskJDsKK05PVElDRTogIHg6IDxOVUxMPiwgeTogPE5VTEw+LCB6OiA8 TlVMTD4KK05PVElDRTogIHg6IDxOVUxMPiwgeTogPE5VTEw+LCB6OiBIaQorTk9USUNFOiAgeDog PE5VTEw+LCB5OiAzLjE0LCB6OiA8TlVMTD4KK05PVElDRTogIHg6IDEwLCB5OiAzLjE0LCB6OiBI aQorZHJvcCB0eXBlIHQzOworLS0gdGFyZ2V0IGNhbiBiZSBhIGFycmF5CitkbyAkJAorZGVjbGFy ZSB4IGludFtdOworYmVnaW4KKyAgZm9yZWFjaCB4IGluIGpzb24gYXJyYXkgJ1tbMSwyLDNdLFs0 LDUsNl1dJworICBsb29wCisgICAgcmFpc2Ugbm90aWNlICclICUgJScsIHhbMV0sIHhbMl0sIHhb M107CisgIGVuZCBsb29wOworZW5kOworJCQ7CitOT1RJQ0U6ICAxIDIgMworTk9USUNFOiAgNCA1 IDYKK2RvICQkCitkZWNsYXJlIHggdmFyY2hhcltdOworYmVnaW4KKyAgZm9yZWFjaCB4IGluIGpz b24gYXJyYXkgJ1tbIkhpIiwiSGVsbG8iXSxbIkhlbGxvIiwiSGkiXV0nCisgIGxvb3AKKyAgICBy YWlzZSBub3RpY2UgJyUgJScsIHhbMV0sIHhbMl07CisgIGVuZCBsb29wOworZW5kOworJCQ7CitO T1RJQ0U6ICBIaSBIZWxsbworTk9USUNFOiAgSGVsbG8gSGkKK2RvICQkCitkZWNsYXJlIHggdmFy Y2hhcltdOworYmVnaW4KKyAgZm9yZWFjaCB4IGluIGpzb24gYXJyYXkgJ1tbIkhpIiwiSGVsbG8i XSxbIkhlbGxvIiwiSGkiXV0nCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUgJScsIHhbMV0s IHhbMl07CisgIGVuZCBsb29wOworZW5kOworJCQ7CitOT1RJQ0U6ICBIaSBIZWxsbworTk9USUNF OiAgSGVsbG8gSGkKK2RvICQkCitkZWNsYXJlIHggaW50W107IHkgdmFyY2hhcjsKK2JlZ2luCisg IGZvcmVhY2ggeCwgeSBpbiBqc29uIGFycmF5ICdbeyJ4IjpbMSwyLDNdLCAieSI6IkhpIn0sIHsi eCI6WzQsNSw2XSwgInkiOiJIaSJ9XScKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAnJSAlICUs IHk6ICUnLCB4WzFdLCB4WzJdLCB4WzNdLCB5OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworTk9U SUNFOiAgMSAyIDMsIHk6IEhpCitOT1RJQ0U6ICA0IDUgNiwgeTogSGkKK2NyZWF0ZSB0eXBlIHQy IGFzICh4IGludFtdLCB5IHZhcmNoYXIpOworZG8gJCQKK2RlY2xhcmUgYyB0MjsKK2JlZ2luCisg IGZvcmVhY2ggYyBpbiBqc29uIGFycmF5ICdbeyJ4IjpbMSwyLDNdLCAieSI6IkhpIn0sIHsieCI6 WzQsNSw2XSwgInkiOiJIaSJ9XScKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAnJSAlICUsIHk6 ICUnLCBjLnhbMV0sIGMueFsyXSwgYy54WzNdLCBjLnk7CisgIGVuZCBsb29wOworZW5kOworJCQ7 CitOT1RJQ0U6ICAxIDIgMywgeTogSGkKK05PVElDRTogIDQgNSA2LCB5OiBIaQorZHJvcCB0eXBl IHQyOworLS0gRVhJVCBhbmQgQ09OVElOVUUgY2FuIGJlIHRyaWdnZXJlZCBieSBMT09QX1JDX1BS T0NFU1NJTkcKK2RvICQkCitkZWNsYXJlIHggaW50OworYmVnaW4KKyAgZm9yZWFjaCB4IGluIGpz b24gYXJyYXkgJ1sxLDIsMyw0LDVdJworICBsb29wCisgICAgZXhpdCB3aGVuIHggPSAzOworICAg IHJhaXNlIG5vdGljZSAnJScsIHg7CisgIGVuZCBsb29wOworZW5kOworJCQ7CitOT1RJQ0U6ICAx CitOT1RJQ0U6ICAyCitkbyAkJAorZGVjbGFyZSB4IGludDsKK2JlZ2luCisgIGZvcmVhY2ggeCBp biBqc29uIGFycmF5ICdbMSwyLDMsNCw1XScKKyAgbG9vcAorICAgIGNvbnRpbnVlIHdoZW4geCAl IDIgPSAwOworICAgIHJhaXNlIG5vdGljZSAnJScsIHg7CisgIGVuZCBsb29wOworZW5kOworJCQ7 CitOT1RJQ0U6ICAxCitOT1RJQ0U6ICAzCitOT1RJQ0U6ICA1CistLSBWYXJpYWJsZSBpbnN0ZWFk IG9mIHN0cmluZworRE8gJCQKK2RlY2xhcmUKKyAgeCBpbnQ7CisgIGFyciBqc29uYjsKK2JlZ2lu CisgIHNlbGVjdCBqc29uYl9hZ2coaSkgaW50byBhcnIKKyAgICBmcm9tIGdlbmVyYXRlX3Nlcmll cygxLDMpIGcoaSk7CisKKyAgZm9yZWFjaCB4IGluIGpzb24gYXJyYXkgYXJyCisgIGxvb3AKKyAg ICByYWlzZSBub3RpY2UgJyUnLCB4OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworTk9USUNFOiAg MQorTk9USUNFOiAgMgorTk9USUNFOiAgMwpkaWZmIC0tZ2l0IGEvc3JjL3BsL3BscGdzcWwvc3Jj L21lc29uLmJ1aWxkIGIvc3JjL3BsL3BscGdzcWwvc3JjL21lc29uLmJ1aWxkCmluZGV4IDZmZjI3 MDA2Y2ZjLi42MDllZWQ3YTI4ZCAxMDA2NDQKLS0tIGEvc3JjL3BsL3BscGdzcWwvc3JjL21lc29u LmJ1aWxkCisrKyBiL3NyYy9wbC9wbHBnc3FsL3NyYy9tZXNvbi5idWlsZApAQCAtODgsNiArODgs NyBAQCB0ZXN0cyArPSB7CiAgICAgICAncGxwZ3NxbF90cmFwJywKICAgICAgICdwbHBnc3FsX3Ry aWdnZXInLAogICAgICAgJ3BscGdzcWxfdmFycHJvcHMnLAorICAgICAgJ3BscGdzcWxfZm9yZWFj aCcsCiAgICAgXSwKICAgfSwKIH0KZGlmZiAtLWdpdCBhL3NyYy9wbC9wbHBnc3FsL3NyYy9wbF9l eGVjLmMgYi9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxfZXhlYy5jCmluZGV4IDg0NTUyZTMyYzg3Li4y ZTEwOGQ3ZTkxOCAxMDA2NDQKLS0tIGEvc3JjL3BsL3BscGdzcWwvc3JjL3BsX2V4ZWMuYworKysg Yi9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxfZXhlYy5jCkBAIC00MSw2ICs0MSw4IEBACiAjaW5jbHVk ZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9kYXR1bS5oIgogI2luY2x1ZGUg InV0aWxzL2ZtZ3JvaWRzLmgiCisjaW5jbHVkZSAidXRpbHMvanNvbmIuaCIKKyNpbmNsdWRlICJ1 dGlscy9qc29uZnVuY3MuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRl ICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgpAQCAtMzA1LDYgKzMw Nyw4IEBAIHN0YXRpYyBpbnQJZXhlY19zdG10X2ZvcmMoUExwZ1NRTF9leGVjc3RhdGUgKmVzdGF0 ZSwKIAkJCQkJCSAgIFBMcGdTUUxfc3RtdF9mb3JjICpzdG10KTsKIHN0YXRpYyBpbnQJZXhlY19z dG10X2ZvcmVhY2hfYShQTHBnU1FMX2V4ZWNzdGF0ZSAqZXN0YXRlLAogCQkJCQkJCQlQTHBnU1FM X3N0bXRfZm9yZWFjaF9hICpzdG10KTsKK3N0YXRpYyBpbnQJZXhlY19zdG10X2ZvcmVhY2hfanNv bl9hKFBMcGdTUUxfZXhlY3N0YXRlICplc3RhdGUsCisJCQkJCQkJCQkgUExwZ1NRTF9zdG10X2Zv cmVhY2hfanNvbl9hICpzdG10KTsKIHN0YXRpYyBpbnQJZXhlY19zdG10X29wZW4oUExwZ1NRTF9l eGVjc3RhdGUgKmVzdGF0ZSwKIAkJCQkJCSAgIFBMcGdTUUxfc3RtdF9vcGVuICpzdG10KTsKIHN0 YXRpYyBpbnQJZXhlY19zdG10X2ZldGNoKFBMcGdTUUxfZXhlY3N0YXRlICplc3RhdGUsCkBAIC0y MDc1LDYgKzIwNzksMTAgQEAgZXhlY19zdG10cyhQTHBnU1FMX2V4ZWNzdGF0ZSAqZXN0YXRlLCBM aXN0ICpzdG10cykKIAkJCQlyYyA9IGV4ZWNfc3RtdF9mb3JlYWNoX2EoZXN0YXRlLCAoUExwZ1NR TF9zdG10X2ZvcmVhY2hfYSAqKSBzdG10KTsKIAkJCQlicmVhazsKIAorCQkJY2FzZSBQTFBHU1FM X1NUTVRfRk9SRUFDSF9KU09OX0E6CisJCQkJcmMgPSBleGVjX3N0bXRfZm9yZWFjaF9qc29uX2Eo ZXN0YXRlLCAoUExwZ1NRTF9zdG10X2ZvcmVhY2hfanNvbl9hICopIHN0bXQpOworCQkJCWJyZWFr OworCiAJCQljYXNlIFBMUEdTUUxfU1RNVF9FWElUOgogCQkJCXJjID0gZXhlY19zdG10X2V4aXQo ZXN0YXRlLCAoUExwZ1NRTF9zdG10X2V4aXQgKikgc3RtdCk7CiAJCQkJYnJlYWs7CkBAIC0yOTk1 LDYgKzMwMDMsMjQ5IEBAIGV4ZWNfc3RtdF9mb3JjKFBMcGdTUUxfZXhlY3N0YXRlICplc3RhdGUs IFBMcGdTUUxfc3RtdF9mb3JjICpzdG10KQogfQogCiAKKy8qCisgKiBDb252ZXJ0IEpzb25iVmFs dWUgdG8gRGF0dW0gdGhhdCBjYW4gYmUgYXNzaWduZWQgdG8gUExwZ1NRTF92YXIuCisgKi8KK3N0 YXRpYyBEYXR1bQorSnNvbmJWYWx1ZVRvRGF0dW0oSnNvbmJWYWx1ZSAqamJ2LAorCQkJCSAgT2lk ICp0eXBpZCwgaW50MzIgKnR5cG1vZCwgYm9vbCAqaXNudWxsLAorCQkJCSAgT2lkIGV4cGVjdGVk X3R5cGlkLCBpbnQzMiBleHBlY3RlZF90eXBtb2QsCisJCQkJICB2b2lkICoqY2FjaGUsIE1lbW9y eUNvbnRleHQgbWN4dCkKK3sKKwlpZiAoZXhwZWN0ZWRfdHlwaWQgPT0gSlNPTkJPSUQpCisJewor CQkqdHlwaWQgPSBKU09OQk9JRDsKKwkJKnR5cG1vZCA9IC0xOworCQkqaXNudWxsID0gZmFsc2U7 CisKKwkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShKc29uYlZhbHVlVG9Kc29uYihqYnYpKTsKKwl9 CisJZWxzZSBpZiAoZXhwZWN0ZWRfdHlwaWQgPT0gSlNPTk9JRCkKKwl7CisJCUpzb25iCSAgICpq c29uYjsKKwkJY2hhcgkgICAqc3RyOworCisJCS8qIHNlcmlhbGl6ZSBKc29uVmFsdWUgdG8gSlNP TiB0ZXh0ICovCisJCWpzb25iID0gSnNvbmJWYWx1ZVRvSnNvbmIoamJ2KTsKKwkJc3RyID0gSnNv bmJUb0NTdHJpbmcoTlVMTCwgJmpzb25iLT5yb290LCBWQVJTSVpFKGpzb25iKSk7CisKKwkJKnR5 cGlkID0gVEVYVE9JRDsKKwkJKnR5cG1vZCA9IC0xOworCQkqaXNudWxsID0gZmFsc2U7CisKKwkJ cmV0dXJuIFBvaW50ZXJHZXREYXR1bShjc3RyaW5nX3RvX3RleHQoc3RyKSk7CisJfQorCWVsc2Ug aWYgKGpidi0+dHlwZSA9PSBqYnZOdWxsKQorCXsKKwkJKnR5cGlkID0gZXhwZWN0ZWRfdHlwaWQ7 CisJCSp0eXBtb2QgPSAtMTsKKwkJKmlzbnVsbCA9IHRydWU7CisKKwkJcmV0dXJuIChEYXR1bSkg MDsKKwl9CisJZWxzZSBpZiAoamJ2LT50eXBlID09IGpidlN0cmluZykKKwl7CisJCSp0eXBpZCA9 IFRFWFRPSUQ7CisJCSp0eXBtb2QgPSAtMTsKKwkJKmlzbnVsbCA9IGZhbHNlOworCisJCXJldHVy biBQb2ludGVyR2V0RGF0dW0oY3N0cmluZ190b190ZXh0X3dpdGhfbGVuKGpidi0+dmFsLnN0cmlu Zy52YWwsCisJCQkJCQkJCQkJCQkJCWpidi0+dmFsLnN0cmluZy5sZW4pKTsKKwl9CisJZWxzZSBp ZiAoamJ2LT50eXBlID09IGpidk51bWVyaWMpCisJeworCQkqdHlwaWQgPSBOVU1FUklDT0lEOwor CQkqdHlwbW9kID0gLTE7CisJCSppc251bGwgPSBmYWxzZTsKKworCQlyZXR1cm4gUG9pbnRlckdl dERhdHVtKGpidi0+dmFsLm51bWVyaWMpOworCX0KKwllbHNlIGlmIChqYnYtPnR5cGUgPT0gamJ2 Qm9vbCkKKwl7CisJCSp0eXBpZCA9IEJPT0xPSUQ7CisJCSp0eXBtb2QgPSAtMTsKKwkJKmlzbnVs bCA9IGZhbHNlOworCisJCXJldHVybiBCb29sR2V0RGF0dW0oamJ2LT52YWwuYm9vbGVhbik7CisJ fQorCWVsc2UKKwl7CisJCUpzb25iCSpqc29uYjsKKwkJRGF0dW0JcmVzdWx0OworCisJCS8qIGlz bnVsbCBpbiBqc29uX3BvcHVsYXRlX3R5cGUgaXMgaW5vdXQgYXJndW1lbnQgKi8KKwkJKmlzbnVs bCA9IGZhbHNlOworCisJCWpzb25iID0gSnNvbmJWYWx1ZVRvSnNvbmIoamJ2KTsKKwkJcmVzdWx0 ID0ganNvbl9wb3B1bGF0ZV90eXBlKFBvaW50ZXJHZXREYXR1bShqc29uYiksIEpTT05CT0lELAor CQkJCQkJCQkJZXhwZWN0ZWRfdHlwaWQsIGV4cGVjdGVkX3R5cG1vZCwKKwkJCQkJCQkJCWNhY2hl LCBtY3h0LAorCQkJCQkJCQkJaXNudWxsLCBmYWxzZSwgTlVMTCk7CisKKwkJKnR5cGlkID0gZXhw ZWN0ZWRfdHlwaWQ7CisJCSp0eXBtb2QgPSBleHBlY3RlZF90eXBtb2Q7CisKKwkJcmV0dXJuIHJl c3VsdDsKKwl9Cit9CisKKy8qIC0tLS0tLS0tLS0KKyAqIGV4ZWNfc3RtdF9mb3JlYWNoX2pzb25f YQkJCUxvb3Agb3ZlciBlbGVtZW50cyBpbiBqc29uIGFycmF5CisgKgorICogV2hlbiB0YXJnZXQg aXMgYSBjb21wb3NpdGUsIHRoZW4gdGFyZ2V0IGlzIHBvcHVsYXRlZCBsaWtlIGpzb25fdG9fcG9w dWxhdGVfcmVjb3JkLgorICoganNvbmIgZG9lc24ndCBwcmVzZXJ2ZSBhdHRyaWJ1dGUgb3JkZXIs IHNvIHBvc2l0aW9uIGJhc2VkIG1hcHBpbmcgYmV0d2VlbgorICogdGFyZ2V0IGFuZCBzb3VyY2Ug Y2FuIGJlIHBvc3NpYmx5IGRhbmdlcm91cyAod2l0aCB1bmV4cGVjdGVkIGJlaGF2ZSkuCisgKiAt LS0tLS0tLS0tCisgKi8KK3N0YXRpYyBpbnQKK2V4ZWNfc3RtdF9mb3JlYWNoX2pzb25fYShQTHBn U1FMX2V4ZWNzdGF0ZSAqZXN0YXRlLAorCQkJCQkJIFBMcGdTUUxfc3RtdF9mb3JlYWNoX2pzb25f YSAqc3RtdCkKK3sKKwlPaWQJCQlleHBydHlwZWlkOworCWludDMyCQlleHBydHlwbW9kOworCURh dHVtCQlleHByZGF0dW07CisJUExwZ1NRTF9kYXR1bSAqbG9vcF92YXI7CisJT2lkCQkJbG9vcF92 YXJfdHlwaWQ7CisJaW50MzIJCWxvb3BfdmFyX3R5cG1vZDsKKwlPaWQJCQlsb29wX3Zhcl9jb2xs YXRpb247CisJSnNvbmIJICAgKmpiOworCUpzb25iSXRlcmF0b3IgKml0OworCUpzb25iVmFsdWUJ amJ2OworCUpzb25iSXRlcmF0b3JUb2tlbiByOworCU1lbW9yeUNvbnRleHQgc3RtdF9tY29udGV4 dDsKKwlNZW1vcnlDb250ZXh0IG9sZGNvbnRleHQ7CisJTWVtb3J5Q29udGV4dCB0bXBfY3h0Owor CWJvb2wJCWZvdW5kID0gZmFsc2U7CisJYm9vbAkJaXNudWxsOworCWJvb2wJCXNraXBOZXN0ZWQg PSBmYWxzZTsKKwlpbnQJCQlyYyA9IFBMUEdTUUxfUkNfT0s7CisJdm9pZAkgICAqY2FjaGUgPSBO VUxMOworCisJLyogZ2V0IHRoZSB2YWx1ZSBvZiB0aGUgZXhwcmVzc2lvbiAqLworCWV4cHJkYXR1 bSA9IGV4ZWNfZXZhbF9leHByKGVzdGF0ZSwgc3RtdC0+ZXhwciwgJmlzbnVsbCwKKwkJCQkJCQkg ICAmZXhwcnR5cGVpZCwgJmV4cHJ0eXBtb2QpOworCWlmIChpc251bGwpCisJCWVyZXBvcnQoRVJS T1IsCisJCQkJKGVycmNvZGUoRVJSQ09ERV9OVUxMX1ZBTFVFX05PVF9BTExPV0VEKSwKKwkJCQkg ZXJybXNnKCJGT1JFQUNIIGV4cHJlc3Npb24gbXVzdCBub3QgYmUgbnVsbCIpKSk7CisKKwkvKgor CSAqIERvIGFzIG11Y2ggYXMgcG9zc2libGUgb2YgdGhlIGNvZGUgYmVsb3cgaW4gc3RtdF9tY29u dGV4dCwgdG8gYXZvaWQgYW55CisJICogbGVha3MgZnJvbSBjYWxsZWQgc3Vicm91dGluZXMuICBX ZSBuZWVkIGEgcHJpdmF0ZSBzdG10X21jb250ZXh0IHNpbmNlCisJICogd2UnbGwgYmUgY2FsbGlu ZyBhcmJpdHJhcnkgc3RhdGVtZW50IGNvZGUuCisJICovCisJc3RtdF9tY29udGV4dCA9IGdldF9z dG10X21jb250ZXh0KGVzdGF0ZSk7CisJcHVzaF9zdG10X21jb250ZXh0KGVzdGF0ZSk7CisJb2xk Y29udGV4dCA9IE1lbW9yeUNvbnRleHRTd2l0Y2hUbyhzdG10X21jb250ZXh0KTsKKworCXRtcF9j eHQgPSBBbGxvY1NldENvbnRleHRDcmVhdGUoQ3VycmVudE1lbW9yeUNvbnRleHQsCisJCQkJCQkJ CQkiRk9SRUFDSCBJTiBKU09OIEFSUkFZIHRlbXBvcmFyeSBjeHQiLAorCQkJCQkJCQkJQUxMT0NT RVRfREVGQVVMVF9TSVpFUyk7CisKKwkvKiBjYXN0IHRvIGpzb25iICovCisJZXhwcmRhdHVtID0g ZXhlY19jYXN0X3ZhbHVlKGVzdGF0ZSwgZXhwcmRhdHVtLCAmaXNudWxsLAorCQkJCQkJCQlleHBy dHlwZWlkLCBleHBydHlwbW9kLAorCQkJCQkJCQlKU09OQk9JRCwgLTEpOworCisJQXNzZXJ0KCFp c251bGwpOworCisJLyoKKwkgKiBXZSBtdXN0IGNvcHkgdGhlIGFycmF5IGludG8gc3RtdF9tY29u dGV4dCwgZWxzZSBpdCB3aWxsIGRpc2FwcGVhciBpbgorCSAqIGV4ZWNfZXZhbF9jbGVhbnVwLiAg VGhpcyBpcyBhbm5veWluZywgYnV0IGNsZWFudXAgd2lsbCBjZXJ0YWlubHkgaGFwcGVuCisJICog d2hpbGUgcnVubmluZyB0aGUgbG9vcCBib2R5LCBzbyB3ZSBoYXZlIGxpdHRsZSBjaG9pY2UuCisJ ICovCisJamIgPSBEYXR1bUdldEpzb25iUENvcHkoZXhwcmRhdHVtKTsKKworCS8qIENsZWFuIHVw IGFueSBsZWZ0b3ZlciB0ZW1wb3JhcnkgbWVtb3J5ICovCisJZXhlY19ldmFsX2NsZWFudXAoZXN0 YXRlKTsKKworCS8qCisJICogVGhpcyBpcyBjb21wYXRpYmxlIHdpdGgganNvbmJfYXJyYXlfZWxl bWVudC4gU1FML0pTT04gZnVuY3Rpb25zIGFyZSBub3QKKwkgKiB0b28gc3RyaWN0IGxpa2UgUG9z dGdyZVNRTCBwcm9wcmlldGFyeSAob2xkIGpzb24pIGZ1bmN0aW9ucy4gSW4gU1FML0pTT04KKwkg KiBhIHNjYWxhciBpcyBlcXVhbCB0byBvbmUgZWxlbWVudCBhcnJheS4gVGhlIGJhc2ljIHF1ZXN0 aW9uIGlzIGlmIEZPUkVBQ0gKKwkgKiBzaG91bGQgYmUgbW9yZSByZXN0cmljdGl2ZSBsaWtlIG9s ZCBKU09OIGZ1bmN0aW9uLCBvciBsZXNzIHJlc3RyaWN0aXZlCisJICogbGlrZSBTUUwvSlNPTiBm dW5jdGlvbnMuCisJICovCisJaWYgKEpCX1JPT1RfSVNfU0NBTEFSKGpiKSkKKwkJZXJlcG9ydChF UlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJ CQkgZXJybXNnKCJGT1JFQUNIIGV4cHJlc3Npb24gbXVzdCBldmFsdWF0ZSB0byBhIEpTT04gYXJy YXkiKSwKKwkJCQkgZXJyaGludCgiQ2Fubm90IGl0ZXJhdGUgb3ZlciBhIHNjYWxhciB2YWx1ZS4i KSkpOworCWVsc2UgaWYgKEpCX1JPT1RfSVNfT0JKRUNUKGpiKSkKKwkJZXJlcG9ydChFUlJPUiwK KwkJCQkoZXJyY29kZShFUlJDT0RFX0lOVkFMSURfUEFSQU1FVEVSX1ZBTFVFKSwKKwkJCQkgZXJy bXNnKCJGT1JFQUNIIGV4cHJlc3Npb24gbXVzdCBldmFsdWF0ZSB0byBhIEpTT04gYXJyYXkiKSwK KwkJCQkgZXJyZGV0YWlsKCJDYW5ub3QgaXRlcmF0ZSBvdmVyIGFuIG9iamVjdCB2YWx1ZS4iKSkp OworCisJQXNzZXJ0KEpCX1JPT1RfSVNfQVJSQVkoamIpKTsKKworCS8qIFNldCB1cCB0aGUgbG9v cCB2YXJpYWJsZSBhbmQgc2VlIGlmIGl0IGlzIG9mIGFuIGFycmF5IHR5cGUgKi8KKwlsb29wX3Zh ciA9IGVzdGF0ZS0+ZGF0dW1zW3N0bXQtPnZhcm5vXTsKKworCXBscGdzcWxfZXhlY19nZXRfZGF0 dW1fdHlwZV9pbmZvKGVzdGF0ZSwgbG9vcF92YXIsCisJCQkJCQkJCQkgJmxvb3BfdmFyX3R5cGlk LCAmbG9vcF92YXJfdHlwbW9kLAorCQkJCQkJCQkJICZsb29wX3Zhcl9jb2xsYXRpb24pOworCisJ aXQgPSBKc29uYkl0ZXJhdG9ySW5pdCgmamItPnJvb3QpOworCisJd2hpbGUgKChyID0gSnNvbmJJ dGVyYXRvck5leHQoJml0LCAmamJ2LCBza2lwTmVzdGVkKSkgIT0gV0pCX0RPTkUpCisJeworCQlz a2lwTmVzdGVkID0gdHJ1ZTsKKworCQlpZiAociA9PSBXSkJfRUxFTSkKKwkJeworCQkJRGF0dW0J CXZhbDsKKwkJCU9pZAkJCXZhbHR5cGlkOworCQkJaW50MzIJCXZhbHR5cG1vZDsKKwkJCWJvb2wJ CXZhbGlzbnVsbDsKKworCQkJZm91bmQgPSB0cnVlOwkJCS8qIGxvb3BlZCBhdCBsZWFzdCBvbmNl ICovCisKKwkJCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyh0bXBfY3h0KTsKKworCQkJdmFsID0gSnNv bmJWYWx1ZVRvRGF0dW0oJmpidiwKKwkJCQkJCQkJCSZ2YWx0eXBpZCwgJnZhbHR5cG1vZCwgJnZh bGlzbnVsbCwKKwkJCQkJCQkJCWxvb3BfdmFyX3R5cGlkLCBsb29wX3Zhcl90eXBtb2QsCisJCQkJ CQkJCQkmY2FjaGUsIHN0bXRfbWNvbnRleHQpOworCisJCQkvKiBleGVjX2Fzc2lnbl92YWx1ZSBh bmQgZXhlY19zdG10cyBtdXN0IHJ1biBpbiB0aGUgbWFpbiBjb250ZXh0ICovCisJCQlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CisKKwkJCS8qIEFzc2lnbiBjdXJyZW50IGVsZW1l bnQvc2xpY2UgdG8gdGhlIGxvb3AgdmFyaWFibGUgKi8KKwkJCWV4ZWNfYXNzaWduX3ZhbHVlKGVz dGF0ZSwgbG9vcF92YXIsIHZhbCwKKwkJCQkJCQkgIHZhbGlzbnVsbCwgdmFsdHlwaWQsIHZhbHR5 cG1vZCk7CisKKwkJCU1lbW9yeUNvbnRleHRSZXNldCh0bXBfY3h0KTsKKworCQkJLyoKKwkJCSAq IEV4ZWN1dGUgdGhlIHN0YXRlbWVudHMKKwkJCSAqLworCQkJcmMgPSBleGVjX3N0bXRzKGVzdGF0 ZSwgc3RtdC0+Ym9keSk7CisKKwkJCUxPT1BfUkNfUFJPQ0VTU0lORyhzdG10LT5sYWJlbCwgYnJl YWspOworCisJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8oc3RtdF9tY29udGV4dCk7CisJCX0KKwl9 CisKKwkvKiBSZXN0b3JlIG1lbW9yeSBjb250ZXh0IHN0YXRlICovCisJTWVtb3J5Q29udGV4dFN3 aXRjaFRvKG9sZGNvbnRleHQpOworCXBvcF9zdG10X21jb250ZXh0KGVzdGF0ZSk7CisKKwkvKiBS ZWxlYXNlIHRlbXBvcmFyeSBtZW1vcnksIGluY2x1ZGluZyB0aGUgYXJyYXkgdmFsdWUgKi8KKwlN ZW1vcnlDb250ZXh0UmVzZXQoc3RtdF9tY29udGV4dCk7CisKKwkvKgorCSAqIFNldCB0aGUgRk9V TkQgdmFyaWFibGUgdG8gaW5kaWNhdGUgdGhlIHJlc3VsdCBvZiBleGVjdXRpbmcgdGhlIGxvb3AK KwkgKiAobmFtZWx5LCB3aGV0aGVyIHdlIGxvb3BlZCBvbmUgb3IgbW9yZSB0aW1lcykuIFRoaXMg bXVzdCBiZSBzZXQgaGVyZSBzbworCSAqIHRoYXQgaXQgZG9lcyBub3QgaW50ZXJmZXJlIHdpdGgg dGhlIHZhbHVlIG9mIHRoZSBGT1VORCB2YXJpYWJsZSBpbnNpZGUKKwkgKiB0aGUgbG9vcCBwcm9j ZXNzaW5nIGl0c2VsZi4KKwkgKi8KKwlleGVjX3NldF9mb3VuZChlc3RhdGUsIGZvdW5kKTsKKwor CXJldHVybiByYzsKK30KKwogLyogLS0tLS0tLS0tLQogICogZXhlY19zdG10X2ZvcmVhY2hfYQkJ CUxvb3Agb3ZlciBlbGVtZW50cyBvciBzbGljZXMgb2YgYW4gYXJyYXkKICAqCkBAIC01NTM3LDYg KzU3ODgsNTEgQEAgcGxwZ3NxbF9leGVjX2dldF9kYXR1bV90eXBlX2luZm8oUExwZ1NRTF9leGVj c3RhdGUgKmVzdGF0ZSwKIAkJCQlicmVhazsKIAkJCX0KIAorCQljYXNlIFBMUEdTUUxfRFRZUEVf Uk9XOgorCQkJeworCQkJCVBMcGdTUUxfcm93ICpyb3cgPSAoUExwZ1NRTF9yb3cgKikgZGF0dW07 CisKKwkJCQlpZiAoIXJvdy0+cm93dHVwZGVzYykKKwkJCQl7CisJCQkJCWludAkJCWk7CisKKwkJ CQkJcm93LT5yb3d0dXBkZXNjID0gQ3JlYXRlVGVtcGxhdGVUdXBsZURlc2Mocm93LT5uZmllbGRz KTsKKworCQkJCQlmb3IgKGkgPSAwOyBpIDwgcm93LT5uZmllbGRzOyBpKyspCisJCQkJCXsKKwkJ CQkJCVBMcGdTUUxfZGF0dW0gKnZhciA9IGVzdGF0ZS0+ZGF0dW1zW3Jvdy0+dmFybm9zW2ldXTsK KwkJCQkJCU9pZAkJCXZhcnR5cGlkOworCQkJCQkJaW50MzIJCXZhcnR5cG1vZDsKKwkJCQkJCU9p ZAkJCXZhcmNvbGxhdGlvbjsKKworCQkJCQkJLyoKKwkJCQkJCSAqIFdlIGNhbm5vdCB1c2UgZmll bGRuYW1lcyBmb3IgdHVwZGVzY2VudHJ5LCBiZWNhdXNlCisJCQkJCQkgKiB0aGVzZSBuYW1lcyBj YW4gYmUgc3VmZml4ZWQgYnkgbmFtZSBvZiByb3cgdmFyaWFibGUuCisJCQkJCQkgKiBVbmZvcnR1 bmF0ZWx5LCB0aGUgUExwZ1NRTF9yZWNmaWVsZCBpcyBub3QgY2FzdGVkIHRvCisJCQkJCQkgKiBQ THBnU1FMX3ZhcmlhYmxlLgorCQkJCQkJICovCisJCQkJCQlwbHBnc3FsX2V4ZWNfZ2V0X2RhdHVt X3R5cGVfaW5mbyhlc3RhdGUsIHZhciwKKwkJCQkJCQkJCQkJCQkJICZ2YXJ0eXBpZCwgJnZhcnR5 cG1vZCwKKwkJCQkJCQkJCQkJCQkJICZ2YXJjb2xsYXRpb24pOworCisJCQkJCQlUdXBsZURlc2NJ bml0RW50cnkocm93LT5yb3d0dXBkZXNjLCBpICsgMSwKKwkJCQkJCQkJCQkgICB2YXItPnJlZm5h bWUsIHZhcnR5cGlkLCB2YXJ0eXBtb2QsCisJCQkJCQkJCQkJICAgMCk7CisJCQkJCQlUdXBsZURl c2NJbml0RW50cnlDb2xsYXRpb24ocm93LT5yb3d0dXBkZXNjLCBpICsgMSwKKwkJCQkJCQkJCQkJ CQl2YXJjb2xsYXRpb24pOworCQkJCQl9CisKKwkJCQkJLyogTWFrZSBzdXJlIHdlIGhhdmUgYSB2 YWxpZCB0eXBlL3R5cG1vZCBzZXR0aW5nICovCisJCQkJCUJsZXNzVHVwbGVEZXNjKHJvdy0+cm93 dHVwZGVzYyk7CisJCQkJfQorCisJCQkJKnR5cGVJZCA9IHJvdy0+cm93dHVwZGVzYy0+dGR0eXBl aWQ7CisJCQkJKnR5cE1vZCA9IHJvdy0+cm93dHVwZGVzYy0+dGR0eXBtb2Q7CisJCQkJLyogY29t cG9zaXRlIHR5cGVzIGFyZSBuZXZlciBjb2xsYXRhYmxlICovCisJCQkJKmNvbGxhdGlvbiA9IElu dmFsaWRPaWQ7CisJCQkJYnJlYWs7CisJCQl9CisKIAkJY2FzZSBQTFBHU1FMX0RUWVBFX1JFQzoK IAkJCXsKIAkJCQlQTHBnU1FMX3JlYyAqcmVjID0gKFBMcGdTUUxfcmVjICopIGRhdHVtOwpkaWZm IC0tZ2l0IGEvc3JjL3BsL3BscGdzcWwvc3JjL3BsX2Z1bmNzLmMgYi9zcmMvcGwvcGxwZ3NxbC9z cmMvcGxfZnVuY3MuYwppbmRleCA5MmNkOTExNmMwZS4uNzUxMWZhYjdlNjggMTAwNjQ0Ci0tLSBh L3NyYy9wbC9wbHBnc3FsL3NyYy9wbF9mdW5jcy5jCisrKyBiL3NyYy9wbC9wbHBnc3FsL3NyYy9w bF9mdW5jcy5jCkBAIC0yNTMsNiArMjUzLDggQEAgcGxwZ3NxbF9zdG10X3R5cGVuYW1lKFBMcGdT UUxfc3RtdCAqc3RtdCkKIAkJCXJldHVybiBfKCJGT1Igb3ZlciBjdXJzb3IiKTsKIAkJY2FzZSBQ TFBHU1FMX1NUTVRfRk9SRUFDSF9BOgogCQkJcmV0dXJuIF8oIkZPUkVBQ0ggb3ZlciBhcnJheSIp OworCQljYXNlIFBMUEdTUUxfU1RNVF9GT1JFQUNIX0pTT05fQToKKwkJCXJldHVybiBfKCJGT1JF QUNIIG92ZXIganNvbiBhcnJheSIpOwogCQljYXNlIFBMUEdTUUxfU1RNVF9FWElUOgogCQkJcmV0 dXJuICgoUExwZ1NRTF9zdG10X2V4aXQgKikgc3RtdCktPmlzX2V4aXQgPyAiRVhJVCIgOiAiQ09O VElOVUUiOwogCQljYXNlIFBMUEdTUUxfU1RNVF9SRVRVUk46CkBAIC00NjcsNiArNDY5LDE0IEBA IHBscGdzcWxfc3RhdGVtZW50X3RyZWVfd2Fsa2VyX2ltcGwoUExwZ1NRTF9zdG10ICpzdG10LAog CQkJewogCQkJCVBMcGdTUUxfc3RtdF9mb3JlYWNoX2EgKmZzdG10ID0gKFBMcGdTUUxfc3RtdF9m b3JlYWNoX2EgKikgc3RtdDsKIAorCQkJCUVfV0FMSyhmc3RtdC0+ZXhwcik7CisJCQkJU19MSVNU X1dBTEsoZnN0bXQtPmJvZHkpOworCQkJCWJyZWFrOworCQkJfQorCQljYXNlIFBMUEdTUUxfU1RN VF9GT1JFQUNIX0pTT05fQToKKwkJCXsKKwkJCQlQTHBnU1FMX3N0bXRfZm9yZWFjaF9qc29uX2Eg KmZzdG10ID0gKFBMcGdTUUxfc3RtdF9mb3JlYWNoX2pzb25fYSAqKSBzdG10OworCiAJCQkJRV9X QUxLKGZzdG10LT5leHByKTsKIAkJCQlTX0xJU1RfV0FMSyhmc3RtdC0+Ym9keSk7CiAJCQkJYnJl YWs7CkBAIC03OTUsNiArODA1LDcgQEAgc3RhdGljIHZvaWQgZHVtcF9mb3JpKFBMcGdTUUxfc3Rt dF9mb3JpICpzdG10KTsKIHN0YXRpYyB2b2lkIGR1bXBfZm9ycyhQTHBnU1FMX3N0bXRfZm9ycyAq c3RtdCk7CiBzdGF0aWMgdm9pZCBkdW1wX2ZvcmMoUExwZ1NRTF9zdG10X2ZvcmMgKnN0bXQpOwog c3RhdGljIHZvaWQgZHVtcF9mb3JlYWNoX2EoUExwZ1NRTF9zdG10X2ZvcmVhY2hfYSAqc3RtdCk7 CitzdGF0aWMgdm9pZCBkdW1wX2ZvcmVhY2hfanNvbl9hKFBMcGdTUUxfc3RtdF9mb3JlYWNoX2pz b25fYSAqc3RtdCk7CiBzdGF0aWMgdm9pZCBkdW1wX2V4aXQoUExwZ1NRTF9zdG10X2V4aXQgKnN0 bXQpOwogc3RhdGljIHZvaWQgZHVtcF9yZXR1cm4oUExwZ1NRTF9zdG10X3JldHVybiAqc3RtdCk7 CiBzdGF0aWMgdm9pZCBkdW1wX3JldHVybl9uZXh0KFBMcGdTUUxfc3RtdF9yZXR1cm5fbmV4dCAq c3RtdCk7CkBAIC04NjEsNiArODcyLDkgQEAgZHVtcF9zdG10KFBMcGdTUUxfc3RtdCAqc3RtdCkK IAkJY2FzZSBQTFBHU1FMX1NUTVRfRk9SRUFDSF9BOgogCQkJZHVtcF9mb3JlYWNoX2EoKFBMcGdT UUxfc3RtdF9mb3JlYWNoX2EgKikgc3RtdCk7CiAJCQlicmVhazsKKwkJY2FzZSBQTFBHU1FMX1NU TVRfRk9SRUFDSF9KU09OX0E6CisJCQlkdW1wX2ZvcmVhY2hfanNvbl9hKChQTHBnU1FMX3N0bXRf Zm9yZWFjaF9qc29uX2EgKikgc3RtdCk7CisJCQlicmVhazsKIAkJY2FzZSBQTFBHU1FMX1NUTVRf RVhJVDoKIAkJCWR1bXBfZXhpdCgoUExwZ1NRTF9zdG10X2V4aXQgKikgc3RtdCk7CiAJCQlicmVh azsKQEAgLTExNTcsNiArMTE3MSwyMSBAQCBkdW1wX2ZvcmVhY2hfYShQTHBnU1FMX3N0bXRfZm9y ZWFjaF9hICpzdG10KQogCXByaW50ZigiICAgIEVOREZPUkVBQ0hBIik7CiB9CiAKK3N0YXRpYyB2 b2lkCitkdW1wX2ZvcmVhY2hfanNvbl9hKFBMcGdTUUxfc3RtdF9mb3JlYWNoX2pzb25fYSAqc3Rt dCkKK3sKKwlkdW1wX2luZCgpOworCXByaW50ZigiRk9SRUFDSEEgdmFyICVkICIsIHN0bXQtPnZh cm5vKTsKKwlwcmludGYoIklOIEpTT04gQVJSQVkgIik7CisJZHVtcF9leHByKHN0bXQtPmV4cHIp OworCXByaW50ZigiXG4iKTsKKworCWR1bXBfc3RtdHMoc3RtdC0+Ym9keSk7CisKKwlkdW1wX2lu ZCgpOworCXByaW50ZigiICAgIEVOREZPUkVBQ0hBIik7Cit9CisKIHN0YXRpYyB2b2lkCiBkdW1w X29wZW4oUExwZ1NRTF9zdG10X29wZW4gKnN0bXQpCiB7CmRpZmYgLS1naXQgYS9zcmMvcGwvcGxw Z3NxbC9zcmMvcGxfZ3JhbS55IGIvc3JjL3BsL3BscGdzcWwvc3JjL3BsX2dyYW0ueQppbmRleCA1 MDA5ZTU5YTc4Zi4uYzc2MGUwNGQ2NmIgMTAwNjQ0Ci0tLSBhL3NyYy9wbC9wbHBnc3FsL3NyYy9w bF9ncmFtLnkKKysrIGIvc3JjL3BsL3BscGdzcWwvc3JjL3BsX2dyYW0ueQpAQCAtMTc4LDYgKzE3 OCw3IEBAIHN0YXRpYwl2b2lkCQkJY2hlY2tfcmFpc2VfcGFyYW1ldGVycyhQTHBnU1FMX3N0bXRf cmFpc2UgKnN0bXQpOwogCVBMcGdTUUxfZGlhZ19pdGVtICpkaWFnaXRlbTsKIAlQTHBnU1FMX3N0 bXRfZmV0Y2ggKmZldGNoOwogCVBMcGdTUUxfY2FzZV93aGVuICpjYXNld2hlbjsKKwlQTHBnU1FM X3N0bXRfZm9yZWFjaCAqZm9yZWFjaDsKIH0KIAogJXR5cGUgPGRlY2xoZHI+IGRlY2xfc2VjdApA QCAtMjIwLDYgKzIyMSw3IEBAIHN0YXRpYwl2b2lkCQkJY2hlY2tfcmFpc2VfcGFyYW1ldGVycyhQ THBnU1FMX3N0bXRfcmFpc2UgKnN0bXQpOwogCiAldHlwZSA8Y2FzZXdoZW4+CWNhc2Vfd2hlbgog JXR5cGUgPGxpc3Q+CWNhc2Vfd2hlbl9saXN0IG9wdF9jYXNlX2Vsc2UKKyV0eXBlIDxmb3JlYWNo Pglmb3JlYWNoX3R5cGUKIAogJXR5cGUgPGJvb2xlYW4+CWdldGRpYWdfYXJlYV9vcHQKICV0eXBl IDxsaXN0PglnZXRkaWFnX2xpc3QKQEAgLTM0MSw2ICszNDMsNyBAQCBzdGF0aWMJdm9pZAkJCWNo ZWNrX3JhaXNlX3BhcmFtZXRlcnMoUExwZ1NRTF9zdG10X3JhaXNlICpzdG10KTsKICV0b2tlbiA8 a2V5d29yZD4JS19QUklOVF9TVFJJQ1RfUEFSQU1TCiAldG9rZW4gPGtleXdvcmQ+CUtfUFJJT1IK ICV0b2tlbiA8a2V5d29yZD4JS19RVUVSWQorJXRva2VuIDxrZXl3b3JkPglLX0pTT04KICV0b2tl biA8a2V5d29yZD4JS19SQUlTRQogJXRva2VuIDxrZXl3b3JkPglLX1JFTEFUSVZFCiAldG9rZW4g PGtleXdvcmQ+CUtfUkVUVVJOCkBAIC0xNjcxLDE2ICsxNjc0LDI5IEBAIGZvcl92YXJpYWJsZQk6 IFRfREFUVU0KIAkJCQkJfQogCQkJCTsKIAotc3RtdF9mb3JlYWNoX2EJOiBvcHRfbG9vcF9sYWJl bCBLX0ZPUkVBQ0ggZm9yX3ZhcmlhYmxlIGZvcmVhY2hfc2xpY2UgS19JTiBLX0FSUkFZIGV4cHJf dW50aWxfbG9vcCBsb29wX2JvZHkKK3N0bXRfZm9yZWFjaF9hCTogb3B0X2xvb3BfbGFiZWwgS19G T1JFQUNIIGZvcl92YXJpYWJsZSBmb3JlYWNoX3NsaWNlIEtfSU4gZm9yZWFjaF90eXBlIGV4cHJf dW50aWxfbG9vcCBsb29wX2JvZHkKIAkJCQkJewotCQkJCQkJUExwZ1NRTF9zdG10X2ZvcmVhY2hf YSAqbmV3OworCQkJCQkJUExwZ1NRTF9zdG10X2ZvcmVhY2ggKm5ldzsKIAotCQkJCQkJbmV3ID0g cGFsbG9jMF9vYmplY3QoUExwZ1NRTF9zdG10X2ZvcmVhY2hfYSk7Ci0JCQkJCQluZXctPmNtZF90 eXBlID0gUExQR1NRTF9TVE1UX0ZPUkVBQ0hfQTsKKwkJCQkJCW5ldyA9ICQ2OwogCQkJCQkJbmV3 LT5saW5lbm8gPSBwbHBnc3FsX2xvY2F0aW9uX3RvX2xpbmVubyhAMiwgeXlzY2FubmVyKTsKIAkJ CQkJCW5ldy0+c3RtdGlkID0gKytwbHBnc3FsX2N1cnJfY29tcGlsZS0+bnN0YXRlbWVudHM7CiAJ CQkJCQluZXctPmxhYmVsID0gJDE7Ci0JCQkJCQluZXctPnNsaWNlID0gJDQ7CisKKwkJCQkJCWlm ICgkNCA+IDApCisJCQkJCQl7CisJCQkJCQkJLyogc2xpY2luZyBpcyBzdXBwb3J0ZWQgb25seSBi eSBGT1JFQUNIIElOIEFSUkFZICovCisJCQkJCQkJaWYgKG5ldy0+Y21kX3R5cGUgPT0gUExQR1NR TF9TVE1UX0ZPUkVBQ0hfQSkKKwkJCQkJCQl7CisJCQkJCQkJCSgoUExwZ1NRTF9zdG10X2ZvcmVh Y2hfYSAqKSBuZXcpLT5zbGljZSA9ICQ0OworCQkJCQkJCX0KKwkJCQkJCQllbHNlCisJCQkJCQkJ CWVyZXBvcnQoRVJST1IsCisJCQkJCQkJCQkJKGVycmNvZGUoRVJSQ09ERV9TWU5UQVhfRVJST1Ip LAorCQkJCQkJCQkJCSBlcnJtc2coIm5vdCB6ZXJvIHNsaWNlIGlzIGFsbG93ZWQgb25seSBmb3Ig YXJyYXlzIiksCisJCQkJCQkJCQkJCQlwYXJzZXJfZXJycG9zaXRpb24oQDQpKSk7CisJCQkJCQl9 CisKIAkJCQkJCW5ldy0+ZXhwciA9ICQ3OwogCQkJCQkJbmV3LT5ib2R5ID0gJDguc3RtdHM7CiAK QEAgLTE3MTksNiArMTczNSwxOSBAQCBmb3JlYWNoX3NsaWNlCToKIAkJCQkJfQogCQkJCTsKIAor Zm9yZWFjaF90eXBlCToKKwkJCQkgIEtfQVJSQVkKKwkJCQkJeworCQkJCQkJJCQgPSAoUExwZ1NR TF9zdG10X2ZvcmVhY2ggKikgcGFsbG9jMF9vYmplY3QoUExwZ1NRTF9zdG10X2ZvcmVhY2hfYSk7 CisJCQkJCQkkJC0+Y21kX3R5cGUgPSBQTFBHU1FMX1NUTVRfRk9SRUFDSF9BOworCQkJCQl9CisJ CQkJfCBLX0pTT04gS19BUlJBWQorCQkJCQl7CisJCQkJCQkkJCA9IChQTHBnU1FMX3N0bXRfZm9y ZWFjaCAqKSBwYWxsb2MwX29iamVjdChQTHBnU1FMX3N0bXRfZm9yZWFjaF9qc29uX2EpOworCQkJ CQkJJCQtPmNtZF90eXBlID0gUExQR1NRTF9TVE1UX0ZPUkVBQ0hfSlNPTl9BOworCQkJCQl9CisJ CQkJOworCiBzdG10X2V4aXQJCTogZXhpdF90eXBlIG9wdF9sYWJlbCBvcHRfZXhpdGNvbmQKIAkJ CQkJewogCQkJCQkJUExwZ1NRTF9zdG10X2V4aXQgKm5ldzsKZGlmZiAtLWdpdCBhL3NyYy9wbC9w bHBnc3FsL3NyYy9wbF91bnJlc2VydmVkX2t3bGlzdC5oIGIvc3JjL3BsL3BscGdzcWwvc3JjL3Bs X3VucmVzZXJ2ZWRfa3dsaXN0LmgKaW5kZXggNjM3OWU4NmM4Y2IuLmQ3NTg4ZDNiNGFkIDEwMDY0 NAotLS0gYS9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxfdW5yZXNlcnZlZF9rd2xpc3QuaAorKysgYi9z cmMvcGwvcGxwZ3NxbC9zcmMvcGxfdW5yZXNlcnZlZF9rd2xpc3QuaApAQCAtNjksNiArNjksNyBA QCBQR19LRVlXT1JEKCJpbXBvcnQiLCBLX0lNUE9SVCkKIFBHX0tFWVdPUkQoImluZm8iLCBLX0lO Rk8pCiBQR19LRVlXT1JEKCJpbnNlcnQiLCBLX0lOU0VSVCkKIFBHX0tFWVdPUkQoImlzIiwgS19J UykKK1BHX0tFWVdPUkQoImpzb24iLCBLX0pTT04pCiBQR19LRVlXT1JEKCJsYXN0IiwgS19MQVNU KQogUEdfS0VZV09SRCgibG9nIiwgS19MT0cpCiBQR19LRVlXT1JEKCJtZXJnZSIsIEtfTUVSR0Up CmRpZmYgLS1naXQgYS9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxwZ3NxbC5oIGIvc3JjL3BsL3BscGdz cWwvc3JjL3BscGdzcWwuaAppbmRleCBhZGRiMTRhOTk1OS4uYzU3YjFkYTliOTUgMTAwNjQ0Ci0t LSBhL3NyYy9wbC9wbHBnc3FsL3NyYy9wbHBnc3FsLmgKKysrIGIvc3JjL3BsL3BscGdzcWwvc3Jj L3BscGdzcWwuaApAQCAtMTEyLDYgKzExMiw3IEBAIHR5cGVkZWYgZW51bSBQTHBnU1FMX3N0bXRf dHlwZQogCVBMUEdTUUxfU1RNVF9GT1JTLAogCVBMUEdTUUxfU1RNVF9GT1JDLAogCVBMUEdTUUxf U1RNVF9GT1JFQUNIX0EsCisJUExQR1NRTF9TVE1UX0ZPUkVBQ0hfSlNPTl9BLAogCVBMUEdTUUxf U1RNVF9FWElULAogCVBMUEdTUUxfU1RNVF9SRVRVUk4sCiAJUExQR1NRTF9TVE1UX1JFVFVSTl9O RVhULApAQCAtMjk5LDYgKzMwMCw3IEBAIHR5cGVkZWYgc3RydWN0IFBMcGdTUUxfZGF0dW0KIHsK IAlQTHBnU1FMX2RhdHVtX3R5cGUgZHR5cGU7CiAJaW50CQkJZG5vOworCWNoYXIJICAgKnJlZm5h bWU7CiB9IFBMcGdTUUxfZGF0dW07CiAKIC8qCkBAIC00NDQsOSArNDQ2LDkgQEAgdHlwZWRlZiBz dHJ1Y3QgUExwZ1NRTF9yZWNmaWVsZAogewogCVBMcGdTUUxfZGF0dW1fdHlwZSBkdHlwZTsKIAlp bnQJCQlkbm87CisJY2hhcgkgICAqZmllbGRuYW1lOwkJLyogbmFtZSBvZiBmaWVsZCAqLwogCS8q IGVuZCBvZiBQTHBnU1FMX2RhdHVtIGZpZWxkcyAqLwogCi0JY2hhcgkgICAqZmllbGRuYW1lOwkJ LyogbmFtZSBvZiBmaWVsZCAqLwogCWludAkJCXJlY3BhcmVudG5vOwkvKiBkbm8gb2YgcGFyZW50 IHJlY29yZCAqLwogCWludAkJCW5leHRmaWVsZDsJCS8qIGRubyBvZiBuZXh0IGNoaWxkLCBvciAt MSBpZiBub25lICovCiAJdWludDY0CQlyZWN0dXBsZWRlc2NpZDsgLyogcmVjb3JkJ3MgdHVwbGVk ZXNjIElEIGFzIG9mIGxhc3QgbG9va3VwICovCkBAIC03NjYsNiArNzY4LDIwIEBAIHR5cGVkZWYg c3RydWN0IFBMcGdTUUxfc3RtdF9keW5mb3JzCiAJTGlzdAkgICAqcGFyYW1zOwkJCS8qIFVTSU5H IGV4cHJlc3Npb25zICovCiB9IFBMcGdTUUxfc3RtdF9keW5mb3JzOwogCisvKgorICogRk9SRUFD SCBsb29wIChhbmNlc3RvciBJTiBBUlJBWSBhbmQgSU4gSlNPTiBBUlJBWSBsb29wKQorICovCit0 eXBlZGVmIHN0cnVjdCBQTHBnU1FMX3N0bXRfZm9yZWFjaAoreworCVBMcGdTUUxfc3RtdF90eXBl IGNtZF90eXBlOworCWludAkJCWxpbmVubzsKKwl1bnNpZ25lZCBpbnQgc3RtdGlkOworCWNoYXIJ ICAgKmxhYmVsOworCWludAkJCXZhcm5vOwkJCS8qIGxvb3AgdGFyZ2V0IHZhcmlhYmxlICovCisJ UExwZ1NRTF9leHByICpleHByOwkJCS8qIHNldCBleHByZXNzaW9uICovCisJTGlzdAkgICAqYm9k eTsJCQkvKiBMaXN0IG9mIHN0YXRlbWVudHMgKi8KK30gUExwZ1NRTF9zdG10X2ZvcmVhY2g7CisK IC8qCiAgKiBGT1JFQUNIIGl0ZW0gaW4gYXJyYXkgbG9vcAogICovCkBAIC03NzYsMTEgKzc5Miwy NyBAQCB0eXBlZGVmIHN0cnVjdCBQTHBnU1FMX3N0bXRfZm9yZWFjaF9hCiAJdW5zaWduZWQgaW50 IHN0bXRpZDsKIAljaGFyCSAgICpsYWJlbDsKIAlpbnQJCQl2YXJubzsJCQkvKiBsb29wIHRhcmdl dCB2YXJpYWJsZSAqLwotCWludAkJCXNsaWNlOwkJCS8qIHNsaWNlIGRpbWVuc2lvbiwgb3IgMCAq LwogCVBMcGdTUUxfZXhwciAqZXhwcjsJCQkvKiBhcnJheSBleHByZXNzaW9uICovCiAJTGlzdAkg ICAqYm9keTsJCQkvKiBMaXN0IG9mIHN0YXRlbWVudHMgKi8KKwkvKiBlbmQgb2YgZmllbGRzIHRo YXQgbXVzdCBtYXRjaCBQTHBnU1FMX3N0bXRfZm9yZWFjaCAqLworCWludAkJCXNsaWNlOwkJCS8q IHNsaWNlIGRpbWVuc2lvbiwgb3IgMCAqLwogfSBQTHBnU1FMX3N0bXRfZm9yZWFjaF9hOwogCisv KgorICogRk9SRUFDSCBpdGVtIGluIGFycmF5IGxvb3AKKyAqLwordHlwZWRlZiBzdHJ1Y3QgUExw Z1NRTF9zdG10X2ZvcmVhY2hfanNvbl9hCit7CisJUExwZ1NRTF9zdG10X3R5cGUgY21kX3R5cGU7 CisJaW50CQkJbGluZW5vOworCXVuc2lnbmVkIGludCBzdG10aWQ7CisJY2hhcgkgICAqbGFiZWw7 CisJaW50CQkJdmFybm87CQkJLyogbG9vcCB0YXJnZXQgdmFyaWFibGUgKi8KKwlQTHBnU1FMX2V4 cHIgKmV4cHI7CQkJLyogYXJyYXkgZXhwcmVzc2lvbiAqLworCUxpc3QJICAgKmJvZHk7CQkJLyog TGlzdCBvZiBzdGF0ZW1lbnRzICovCisJLyogZW5kIG9mIGZpZWxkcyB0aGF0IG11c3QgbWF0Y2gg UExwZ1NRTF9zdG10X2ZvcmVhY2ggKi8KK30gUExwZ1NRTF9zdG10X2ZvcmVhY2hfanNvbl9hOwor CiAvKgogICogT1BFTiBhIGN1cnZhcgogICovCmRpZmYgLS1naXQgYS9zcmMvcGwvcGxwZ3NxbC9z cmMvc3FsL3BscGdzcWxfZm9yZWFjaC5zcWwgYi9zcmMvcGwvcGxwZ3NxbC9zcmMvc3FsL3BscGdz cWxfZm9yZWFjaC5zcWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjBk ZGU4ZDZmYmE0Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3BsL3BscGdzcWwvc3JjL3NxbC9wbHBn c3FsX2ZvcmVhY2guc3FsCkBAIC0wLDAgKzEsMjUzIEBACistLSBpbnB1dCBtdXN0IGJlIGEgSlNP TiBhcnJheQorZG8gJCQKK2RlY2xhcmUgeCBudW1lcmljOworYmVnaW4KKyAgZm9yZWFjaCB4IGlu IGpzb24gYXJyYXkgTlVMTCAtLSBmYWlsCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUnLCB4 OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworCitkbyAkJAorZGVjbGFyZSB4IG51bWVyaWM7Citi ZWdpbgorICBmb3JlYWNoIHggaW4ganNvbiBhcnJheSAnMTAnIC0tIGZhaWwKKyAgbG9vcAorICAg IHJhaXNlIG5vdGljZSAnJScsIHg7CisgIGVuZCBsb29wOworZW5kOworJCQ7CisKK2RvICQkCitk ZWNsYXJlIHggbnVtZXJpYzsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBqc29uIGFycmF5ICd7fScg LS0gZmFpbAorICBsb29wCisgICAgcmFpc2Ugbm90aWNlICclJywgeDsKKyAgZW5kIGxvb3A7Citl bmQ7CiskJDsKKworLS0gbnVtZXJpYyB0byBudW1lcmljCitkbyAkJAorZGVjbGFyZSB4IG51bWVy aWM7CitiZWdpbgorICBmb3JlYWNoIHggaW4ganNvbiBhcnJheSAnWzEwLDIwLDMwLDMuMTQsIG51 bGxdJworICBsb29wCisgICAgcmFpc2Ugbm90aWNlICclJywgeDsKKyAgZW5kIGxvb3A7CitlbmQ7 CiskJDsKKworLS0gbnVtZXJpYyB0byBpbnQgYnkgY2FzdAorZG8gJCQKK2RlY2xhcmUgeCBpbnQ7 CitiZWdpbgorICBmb3JlYWNoIHggaW4ganNvbiBhcnJheSAnWzEwLDIwLDMwLDMuMTQsIG51bGxd JworICBsb29wCisgICAgcmFpc2Ugbm90aWNlICclJywgeDsKKyAgZW5kIGxvb3A7CitlbmQ7Cisk JDsKKworLS0gdGVzdCBvZiBGT1VORCB2YXJpYWJsZQorZG8gJCQKK2RlY2xhcmUgeCBpbnQ7Citi ZWdpbgorICBmb3JlYWNoIHggaW4ganNvbiBhcnJheSAnWzEwXScKKyAgbG9vcAorICAgIHJhaXNl IG5vdGljZSAnJScsIHg7CisgIGVuZCBsb29wOworICByYWlzZSBub3RpY2UgJ0ZPVU5EOiAlJywg Zm91bmQ7CitlbmQ7CiskJDsKKworLS0gdGVzdCBvZiBGT1VORCB2YXJpYWJsZQorZG8gJCQKK2Rl Y2xhcmUgeCBpbnQ7CitiZWdpbgorICBmb3JlYWNoIHggaW4ganNvbiBhcnJheSAnW10nCisgIGxv b3AKKyAgICByYWlzZSBub3RpY2UgJyUnLCB4OworICBlbmQgbG9vcDsKKyAgcmFpc2Ugbm90aWNl ICdGT1VORDogJScsIGZvdW5kOworZW5kOworJCQ7CisKKy0tIGNvbnZlcnNpb24gIjMuMTQiIHRv IGludCBzaG91bGQgdG8gZmFpbCBkdWUgSU8gY2FzdAorZG8gJCQKK2RlY2xhcmUgeCBpbnQ7Citi ZWdpbgorICBmb3JlYWNoIHggaW4ganNvbiBhcnJheSAnWyIxMCIsMjAsMzAsIjMuMTQiXScKKyAg bG9vcAorICAgIHJhaXNlIG5vdGljZSAnJScsIHg7CisgIGVuZCBsb29wOworZW5kOworJCQ7CisK K2RvICQkCitkZWNsYXJlIHggYm9vbGVhbjsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBqc29uIGFy cmF5ICdbdHJ1ZSwgZmFsc2VdJworICBsb29wCisgIGlmIHggdGhlbgorICAgIHJhaXNlIG5vdGlj ZSAndHJ1ZSc7CisgIGVsc2UKKyAgICByYWlzZSBub3RpY2UgJ2ZhbHNlJzsKKyAgZW5kIGlmOwor ICBlbmQgbG9vcDsKK2VuZDsKKyQkOworCistLSBqc29uYiB0byBqc29uYgorZG8gJCQKK2RlY2xh cmUgeCBqc29uYjsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBqc29uIGFycmF5ICdbMTAsMjAsMzAs My4xNCwgbnVsbCwgIkhpIl0nCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUnLCB4OworICBl bmQgbG9vcDsKK2VuZDsKKyQkOworCistLSBqc29uYiB0byBqc29uCitkbyAkJAorZGVjbGFyZSB4 IGpzb247CitiZWdpbgorICBmb3JlYWNoIHggaW4ganNvbiBhcnJheSAnWzEwLDIwLDMwLDMuMTQs IG51bGwsICJIaSJdJworICBsb29wCisgICAgcmFpc2Ugbm90aWNlICclJywgeDsKKyAgZW5kIGxv b3A7CitlbmQ7CiskJDsKKworLS0gaXRlcmF0aW9uIG92ZXIgY29tcG9zaXRlcworZG8gJCQKK2Rl Y2xhcmUgeCBpbnQ7IHkgbnVtZXJpYzsgeiB2YXJjaGFyOworYmVnaW4KKyAgZm9yZWFjaCB4LCB5 LCB6IGluIGpzb24gYXJyYXkgJ1t7fSwgeyJ6IjoiSGkifSwgeyJ5IjogMy4xNH0sIHsieiI6Ikhp IiwgIngiOjEwLCAieSI6My4xNH1dJworICBsb29wCisgICAgcmFpc2Ugbm90aWNlICd4OiAlLCB5 OiAlLCB6OiAlJywgeCwgeSwgejsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKKworY3JlYXRlIHR5 cGUgdDMgYXMgKHggaW50LCB5IG51bWVyaWMsIHogdmFyY2hhcik7CisKK2RvICQkCitkZWNsYXJl IGMgdDM7CitiZWdpbgorICBmb3JlYWNoIGMgaW4ganNvbiBhcnJheSAnW3t9LCB7InoiOiJIaSJ9 LCB7InkiOiAzLjE0fSwgeyJ6IjoiSGkiLCAieCI6MTAsICJ5IjozLjE0fV0nCisgIGxvb3AKKyAg ICByYWlzZSBub3RpY2UgJ3g6ICUsIHk6ICUsIHo6ICUnLCBjLngsIGMueSwgYy56OworICBlbmQg bG9vcDsKK2VuZDsKKyQkOworCitkbyAkJAorZGVjbGFyZSBjIHQzOworYmVnaW4KKyAgZm9yZWFj aCBjLngsIGMueSwgYy56IGluIGpzb24gYXJyYXkgJ1t7fSwgeyJ6IjoiSGkifSwgeyJ5IjogMy4x NH0sIHsieiI6IkhpIiwgIngiOjEwLCAieSI6My4xNH1dJworICBsb29wCisgICAgcmFpc2Ugbm90 aWNlICd4OiAlLCB5OiAlLCB6OiAlJywgYy54LCBjLnksIGMuejsKKyAgZW5kIGxvb3A7CitlbmQ7 CiskJDsKKworZHJvcCB0eXBlIHQzOworCistLSB0YXJnZXQgY2FuIGJlIGEgYXJyYXkKK2RvICQk CitkZWNsYXJlIHggaW50W107CitiZWdpbgorICBmb3JlYWNoIHggaW4ganNvbiBhcnJheSAnW1sx LDIsM10sWzQsNSw2XV0nCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUgJSAlJywgeFsxXSwg eFsyXSwgeFszXTsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKKworZG8gJCQKK2RlY2xhcmUgeCB2 YXJjaGFyW107CitiZWdpbgorICBmb3JlYWNoIHggaW4ganNvbiBhcnJheSAnW1siSGkiLCJIZWxs byJdLFsiSGVsbG8iLCJIaSJdXScKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAnJSAlJywgeFsx XSwgeFsyXTsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKKworZG8gJCQKK2RlY2xhcmUgeCB2YXJj aGFyW107CitiZWdpbgorICBmb3JlYWNoIHggaW4ganNvbiBhcnJheSAnW1siSGkiLCJIZWxsbyJd LFsiSGVsbG8iLCJIaSJdXScKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAnJSAlJywgeFsxXSwg eFsyXTsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKKworCitkbyAkJAorZGVjbGFyZSB4IGludFtd OyB5IHZhcmNoYXI7CitiZWdpbgorICBmb3JlYWNoIHgsIHkgaW4ganNvbiBhcnJheSAnW3sieCI6 WzEsMiwzXSwgInkiOiJIaSJ9LCB7IngiOls0LDUsNl0sICJ5IjoiSGkifV0nCisgIGxvb3AKKyAg ICByYWlzZSBub3RpY2UgJyUgJSAlLCB5OiAlJywgeFsxXSwgeFsyXSwgeFszXSwgeTsKKyAgZW5k IGxvb3A7CitlbmQ7CiskJDsKKworY3JlYXRlIHR5cGUgdDIgYXMgKHggaW50W10sIHkgdmFyY2hh cik7CisKK2RvICQkCitkZWNsYXJlIGMgdDI7CitiZWdpbgorICBmb3JlYWNoIGMgaW4ganNvbiBh cnJheSAnW3sieCI6WzEsMiwzXSwgInkiOiJIaSJ9LCB7IngiOls0LDUsNl0sICJ5IjoiSGkifV0n CisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUgJSAlLCB5OiAlJywgYy54WzFdLCBjLnhbMl0s IGMueFszXSwgYy55OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworCitkcm9wIHR5cGUgdDI7CisK Ky0tIEVYSVQgYW5kIENPTlRJTlVFIGNhbiBiZSB0cmlnZ2VyZWQgYnkgTE9PUF9SQ19QUk9DRVNT SU5HCitkbyAkJAorZGVjbGFyZSB4IGludDsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBqc29uIGFy cmF5ICdbMSwyLDMsNCw1XScKKyAgbG9vcAorICAgIGV4aXQgd2hlbiB4ID0gMzsKKyAgICByYWlz ZSBub3RpY2UgJyUnLCB4OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworCitkbyAkJAorZGVjbGFy ZSB4IGludDsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBqc29uIGFycmF5ICdbMSwyLDMsNCw1XScK KyAgbG9vcAorICAgIGNvbnRpbnVlIHdoZW4geCAlIDIgPSAwOworICAgIHJhaXNlIG5vdGljZSAn JScsIHg7CisgIGVuZCBsb29wOworZW5kOworJCQ7CisKKy0tIFZhcmlhYmxlIGluc3RlYWQgb2Yg c3RyaW5nCitETyAkJAorZGVjbGFyZQorICB4IGludDsKKyAgYXJyIGpzb25iOworYmVnaW4KKyAg c2VsZWN0IGpzb25iX2FnZyhpKSBpbnRvIGFycgorICAgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEs MykgZyhpKTsKKworICBmb3JlYWNoIHggaW4ganNvbiBhcnJheSBhcnIKKyAgbG9vcAorICAgIHJh aXNlIG5vdGljZSAnJScsIHg7CisgIGVuZCBsb29wOworZW5kOworJCQ7Ci0tIAoyLjUzLjAKCg== --000000000000ad34b9064cd15bc1--