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 1vxrJX-00HCUv-2D for pgsql-hackers@arkaria.postgresql.org; Wed, 04 Mar 2026 18:51:20 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vxrJU-00DwA0-29 for pgsql-hackers@arkaria.postgresql.org; Wed, 04 Mar 2026 18:51:17 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vxrJU-00Dw9s-0e for pgsql-hackers@lists.postgresql.org; Wed, 04 Mar 2026 18:51:16 +0000 Received: from mail-yw1-x112f.google.com ([2607:f8b0:4864:20::112f]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1vxrJS-00000000a4W-17am for pgsql-hackers@lists.postgresql.org; Wed, 04 Mar 2026 18:51:16 +0000 Received: by mail-yw1-x112f.google.com with SMTP id 00721157ae682-798374d0f44so109639627b3.0 for ; Wed, 04 Mar 2026 10:51:13 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1772650272; cv=none; d=google.com; s=arc-20240605; b=US/LDU/mXx/UWfbAJVFr7d/RAkaIEZdhEzw6QZDBrv71zsWhpdkyMgi7VcKyQqhJ4c hkrCrnyl2qw4TxLmWTOxLfeccf6SWtuQdnqLPxnbjWww5omAyJN9Qp+JkAUW6fDID1jV beNlo4KRd4gzPvJVK6JovPmWloY6urT9PdaKvljWWG8ubJb96OCxK82VEPIWG3h8tbkG 3cP5xCi711ruWN3UlXgWQLcRKUVfrQRgKXZBEInVZu5MRXllCO0WqMX//kzmvs4nN/WV NGx60JuXjRdf8o/qrgitR0v3jYmr7zn/tugPKaZRBFyhEaagb14HL8I0Y3ugcFpKXNAG J/0w== 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=iU0PQpXQjGTWXeap+KSHWvaG8uMUI03uJMB4I9TWo/E=; fh=eGhD8NE58EmIgD6b+gPO+CvU80MO/Q+yy1QKus3+4M4=; b=O2IKm5A0ssTp3i9x2Qm5rOWDslKqcAp+u6XmHYIdON3jznIJuiFQPTIT2IGjRNP4bW C2UDuoGuhUulm/dQJ4/xugn4Ly/eY2RY8wRHLwpc9o357gbsqwi9SlumV3JblbT4EQeo B8LlHin1GAQlY35JDhB1gul8zawhkhtdR6SmFhfEecgFRgk4ANzGVzt7SVxfHfnNJMso K+lfUzm4MOqI2bABDt2b8pfCH0aBxSra8VB5XcrO1ILS60lFJPQHttMfODRMVvySyuLx gZyPJ1zwX0ViOgYJYzQZforSiy9hau/iPCd9BXxfoHX++XwqiGBcpjzims6RnvC33HY6 /rpw==; 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=1772650272; x=1773255072; 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=iU0PQpXQjGTWXeap+KSHWvaG8uMUI03uJMB4I9TWo/E=; b=JU2vWplWDUYRfJ8h6prp8qMCbISxNLWQJONBdCibmnMwKrLWXIIka0bNEeVsPyauXS gCL/2N3RFvR72OBD+YhG7XRCFPGWTIZJUpytE403vGjs4E6PBYVmVWPmQE+lM2iLXDIh oFrIV3R4Inrk2BZc2E9WPfWdin+XPoK15r7ZnACiU1mO8EGovbH9pOA1SxvlPsj34Mcr SlZWdpvh8rQNQbXihhtOPekISJgjhBZtZI3QISHFt9ckGHYHKZP/p761EY/J4ULjczHA 5TGnsbFnd3r6Vt3LX39vwkRCpL/tP/7O0txF9J5AheEBPGUDU429oFfuYfne+fMjRKvE DKdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1772650272; x=1773255072; 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=iU0PQpXQjGTWXeap+KSHWvaG8uMUI03uJMB4I9TWo/E=; b=bw55X8kojhrjT+HVEst/Zre7SfwUsCLh53/e7eSdLIDzt2rFmlbyzMvLQ9sssIBr+V 0j0mhAaQga2y1jnXNfi+ucz2fLHdMbwBK5MIGOdaUuWX+v2Cr4d1Zbz9np6ru/i76ycM Q9FFscLL/+8OVn6bFBjGSwN1KzsbZJ/m7/8uZCmZGTIhqO46L99ZsyEgCFO9SxHkk+ji qT4Kd2ka9Bgz5gOxvXNEd4+hNsIAndv0Anr9fylnXLddH68Xm5s1U3zOKdcTcZKUFNYS tsLT70FFtl4h8ANsD2JRqgNPVlvxzgHqTla8fkSPE5zXREQAKf54cNeZyV/jRPq3QwWY eCGw== X-Gm-Message-State: AOJu0Yxm6Ga0D27j0NTYFV1BBgC7eCcnPCyHB/MnSeJ2bkQAEE3qW5mH tlvz9xjC87v2A5h0tdbY+3T7ZIGIVOTe8zOwJlyI29+2BJOL+QlPRGM+a4k6sOh2x/Z9NX//86C 6wfdbFW0lkWJv9fLGFPKOOwcKCRClvrg= X-Gm-Gg: ATEYQzw4SlYRJmfbEA6QylmyTyX0n315MosCPU37FxqguW1cp4GgtZtqYtrulqK+EvA 1VpmgZxbreKWUMvx457vlcXtRA+s44kipJeDBeAsKo3RsCVJDcXkXhOUY2a3aHANtMDn9u2WYwF N5jI2IqNXd/KBFPrPuy2hj4zlSBCPSWZEMSWzGfR6d6Rk/a8S5NgNXmzMyplV0bA57YSYgExXIu Ucl1eK00lAIZqoLVbwoAH+DB67K2RVNUVZI+p49+FZjEo+tigLv2Gxc/jGF2MRwq0hilV1GBczE VW5xdzyysKndGS+1TchKuZqypLfKoLCC3zNOnv9HvfPZQLdmYeiScOgVV8+o74Z7eTsAhZEVcjR bK2jn1Z83zS/e6Z7v8mMRDsqVFky8d4yY1Ritt4n3AIBpE6IMrbKBZGB4uw== X-Received: by 2002:a53:d017:0:b0:649:37ed:b7b5 with SMTP id 956f58d0204a3-64cedd38afamr4575500d50.44.1772650272330; Wed, 04 Mar 2026 10:51:12 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Pavel Stehule Date: Wed, 4 Mar 2026 19:50:34 +0100 X-Gm-Features: AaiRm50mLTVIrnFHGw5rYdhcgfjT6Bdvz8TmzbVj-49_4v_6Zy2aivO5jwnkO-Q Message-ID: Subject: Re: POC: PLpgSQL FOREACH IN JSON ARRAY To: Jim Jones Cc: PostgreSQL Hackers Content-Type: multipart/mixed; boundary="000000000000cb6e35064c374d51" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000cb6e35064c374d51 Content-Type: multipart/alternative; boundary="000000000000cb6e35064c374d4f" --000000000000cb6e35064c374d4f Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable 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 > --000000000000cb6e35064c374d4f Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi

st 4. 3. 2026 v=C2=A012:35 od= es=C3=ADlatel Jim Jones <ji= m.jones@uni-muenster.de> napsal:
I reviewed the code I have nothing to add at this p= oint. 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 FOREACH x IN JSON ARRAY '[1,2,3,4,5]'
=C2=A0 LOOP
=C2=A0 =C2=A0 EXIT WHEN x =3D 3;
=C2=A0 =C2=A0 RAISE NOTICE '%', x;
=C2=A0 END LOOP;
END;
$$;

DO $$
DECLARE x int;
BEGIN
=C2=A0 FOREACH x IN JSON ARRAY '[1,2,3,4,5]'
=C2=A0 LOOP
=C2=A0 =C2=A0 CONTINUE WHEN x % 2 =3D 0;
=C2=A0 =C2=A0 RAISE NOTICE '%', x;
=C2=A0 END LOOP;
END;
$$;


-- Variable instead of string
DO $$
DECLARE x int; arr jsonb;
BEGIN
=C2=A0 SELECT jsonb_agg(i) INTO arr
=C2=A0 FROM generate_series(1,3) i;

=C2=A0 FOREACH x IN JSON ARRAY arr
=C2=A0 LOOP
=C2=A0 =C2=A0 RAISE NOTICE '%', x;
=C2=A0 END LOOP;
END;
$$;


I merged these examples to tests
=

Thank you for review

Regards

Pavel
=C2=A0

Thanks!

Best, Jim
--000000000000cb6e35064c374d4f-- --000000000000cb6e35064c374d51 Content-Type: text/x-patch; charset="US-ASCII"; name="v20260304-5-0001-FOREACH-scalar-IN-JSON-ARRAY.patch" Content-Disposition: attachment; filename="v20260304-5-0001-FOREACH-scalar-IN-JSON-ARRAY.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mmce6azz0 RnJvbSBiNGZiNTdjYTdlMjBkZGVmNTQ1NGYxNzQyYmIxNDY3MGY0YWI0OTVjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAib2tib2JAZ2l0aHViLmNvbSIgPHBhdmVsLnN0ZWh1bGVAZ21h aWwuY29tPgpEYXRlOiBNb24sIDIzIEZlYiAyMDI2IDEyOjUzOjQ0ICswMTAwClN1YmplY3Q6IFtQ QVRDSF0gRk9SRUFDSCBzY2FsYXIgSU4gSlNPTiBBUlJBWQoKdGhpcyBwYXRjaCBpbnRyb2R1Y2Ug Rk9SRUFDSCBzY2FsYXJfdmFyIElOIEpTT04gQVJSQVkuIFRoZSBkZXNpZ24gaXMgYmFzZWQKb24g YmVoYXZlIG9mIGpzb25iX2FycmF5X2VsZW1lbnRzIGZ1bmN0aW9ucy4gSW4gdGhpcyBjYXNlLCBG T1JFQUNIIGVuZm9yY2UKY2FzdGluZyB0byB0YXJnZXQgdHlwZSAoYmVjYXVzZSB3ZSBrbm93IHRh cmdldCB0eXBlKSBhbmQgdHJ5IHRvIHJlZHVjZQpJTyBjYXN0aW5nLiBBdHRlbnRpb246IElPIGNh c3RpbmcgY2FuIGJlIG1vcmUgc3RyaWN0LCB0aGVuIGNhc3RpbmcgYmFzZWQKb24gY2FzdCBmdW5j dGlvbnMuCgpERUNMQVJFIHQgaW50OwpCRUdJTgogIC0tIHRoaXMgY2FuIHdvcmsgYmVjYXVzZSB3 ZSB1c2UgY2FzdCBudW1lcmljIC0+IGludAogIEZPUkVBQ0ggdCBJTiBKU09OIEFSUkFZICdbMSwy LDMuMTRdJwogIExPT1AKCiAgLS0gdGhpcyBmYWlscywgYmVjYXVzZSBJTyBjYXN0IGlzIHVzZWQs IGFuZCBpbnRlZ2VyIGlucHV0IGZ1bmN0aW9uCiAgLS0gYWxsb3dzIG9ubHkgZGlnaXRzCiAgRk9S RUFDIHQgSU4gSlNPTiBBUlJBWSAnWzEsMiwzLCIzLjE0Il0nCiAgTE9PUAoKQ29uY2VwdHVhbCBx dWVzdGlvbiBpcyBpZiBjYXN0aW5nIHNob3VsZCBiZSBzdHJpY3QgbGlrZSAib2xkIiBQb3N0Z3Jl U1FMCmpzb24gZnVuY3Rpb24gb3IgbGF4IGFzICJuZXciIFNRTC9KU09OIGZ1bmN0aW9ucz8gSSBj YW4gaW1hZ2luZSBsYXggbW9kZQphcyBkZWZhdWx0IHdpdGggcG9zc2liaWxpdHkgdG8gc3dpdGNo IHRvIHN0cmljdCBtb2RlICh0aGlzIGlzIG5vdCBpbXBsZW1lbnRlZApub3cpOgoKICBGT1JFQUNI IHQgSU4gSlNPTiBBUlJBWSAnWzEsMiwzXScgRVJST1IgT04gRU1QVFkgRVJST1IgT04gRVJST1IK ICBMT09QCiAgICAuLi4KClRoZSBwZXJmb3JtYW5jZSAoYmVzdCBjYXNlIGZvciBpdGVyYXRpb24g b3ZlciAxMDAwIGZpZWxkcyBhcnJheSkgaXMgYWJvdXQKNHggYmV0dGVyIHRoYW4gd2hlbiBGT1Ig SU4gU0VMRUNUIGpzb25iX2FycmF5X2VsZW1lbnRzIGlzIHVzZWQuCi0tLQogZG9jL3NyYy9zZ21s L3BscGdzcWwuc2dtbCAgICAgICAgICAgICAgICAgICAgIHwgIDYwICsrKysKIHNyYy9wbC9wbHBn c3FsL3NyYy9NYWtlZmlsZSAgICAgICAgICAgICAgICAgICB8ICAgMiArLQogLi4uL3BscGdzcWwv c3JjL2V4cGVjdGVkL3BscGdzcWxfZm9yZWFjaC5vdXQgIHwgMjk3ICsrKysrKysrKysrKysrKysr Kwogc3JjL3BsL3BscGdzcWwvc3JjL21lc29uLmJ1aWxkICAgICAgICAgICAgICAgIHwgICAxICsK IHNyYy9wbC9wbHBnc3FsL3NyYy9wbF9leGVjLmMgICAgICAgICAgICAgICAgICB8IDI5NiArKysr KysrKysrKysrKysrKwogc3JjL3BsL3BscGdzcWwvc3JjL3BsX2Z1bmNzLmMgICAgICAgICAgICAg ICAgIHwgIDI5ICsrCiBzcmMvcGwvcGxwZ3NxbC9zcmMvcGxfZ3JhbS55ICAgICAgICAgICAgICAg ICAgfCAgMzkgKystCiBzcmMvcGwvcGxwZ3NxbC9zcmMvcGxfdW5yZXNlcnZlZF9rd2xpc3QuaCAg ICAgfCAgIDEgKwogc3JjL3BsL3BscGdzcWwvc3JjL3BscGdzcWwuaCAgICAgICAgICAgICAgICAg IHwgIDM2ICsrLQogc3JjL3BsL3BscGdzcWwvc3JjL3NxbC9wbHBnc3FsX2ZvcmVhY2guc3FsICAg IHwgMjUzICsrKysrKysrKysrKysrKwogMTAgZmlsZXMgY2hhbmdlZCwgMTAwNiBpbnNlcnRpb25z KCspLCA4IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9wbC9wbHBnc3FsL3Ny Yy9leHBlY3RlZC9wbHBnc3FsX2ZvcmVhY2gub3V0CiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3Bs L3BscGdzcWwvc3JjL3NxbC9wbHBnc3FsX2ZvcmVhY2guc3FsCgpkaWZmIC0tZ2l0IGEvZG9jL3Ny Yy9zZ21sL3BscGdzcWwuc2dtbCBiL2RvYy9zcmMvc2dtbC9wbHBnc3FsLnNnbWwKaW5kZXggNTYx ZjZlNTBkNjMuLjc2MWIzY2Q5ZDM1IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvcGxwZ3NxbC5z Z21sCisrKyBiL2RvYy9zcmMvc2dtbC9wbHBnc3FsLnNnbWwKQEAgLTI3ODAsNiArMjc4MCw2NiBA 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+ CisgICAgPC9wYXJhPgorICAgPC9zZWN0Mj4KKwogICAgPHNlY3QyIGlkPSJwbHBnc3FsLWVycm9y LXRyYXBwaW5nIj4KICAgICA8dGl0bGU+VHJhcHBpbmcgRXJyb3JzPC90aXRsZT4KIApkaWZmIC0t Z2l0IGEvc3JjL3BsL3BscGdzcWwvc3JjL01ha2VmaWxlIGIvc3JjL3BsL3BscGdzcWwvc3JjL01h a2VmaWxlCmluZGV4IDYzY2I5NmZhZTNlLi41YmQwY2YzMWRmYyAxMDA2NDQKLS0tIGEvc3JjL3Bs L3BscGdzcWwvc3JjL01ha2VmaWxlCisrKyBiL3NyYy9wbC9wbHBnc3FsL3NyYy9NYWtlZmlsZQpA QCAtMzUsNyArMzUsNyBAQCBSRUdSRVNTX09QVFMgPSAtLWRibmFtZT0kKFBMX1RFU1REQikKIFJF R1JFU1MgPSBwbHBnc3FsX2FycmF5IHBscGdzcWxfY2FjaGUgcGxwZ3NxbF9jYWxsIHBscGdzcWxf Y29udHJvbCBcCiAJcGxwZ3NxbF9jb3B5IHBscGdzcWxfZG9tYWluIHBscGdzcWxfbWlzYyBcCiAJ cGxwZ3NxbF9yZWNvcmQgcGxwZ3NxbF9zaW1wbGUgcGxwZ3NxbF90cmFuc2FjdGlvbiBcCi0JcGxw Z3NxbF90cmFwIHBscGdzcWxfdHJpZ2dlciBwbHBnc3FsX3ZhcnByb3BzCisJcGxwZ3NxbF90cmFw IHBscGdzcWxfdHJpZ2dlciBwbHBnc3FsX3ZhcnByb3BzIHBscGdzcWxfZm9yZWFjaAogCiAjIHdo ZXJlIHRvIGZpbmQgZ2VuX2tleXdvcmRsaXN0LnBsIGFuZCBzdWJzaWRpYXJ5IGZpbGVzCiBUT09M U0RJUiA9ICQodG9wX3NyY2Rpcikvc3JjL3Rvb2xzCmRpZmYgLS1naXQgYS9zcmMvcGwvcGxwZ3Nx bC9zcmMvZXhwZWN0ZWQvcGxwZ3NxbF9mb3JlYWNoLm91dCBiL3NyYy9wbC9wbHBnc3FsL3NyYy9l eHBlY3RlZC9wbHBnc3FsX2ZvcmVhY2gub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi42ZDM5NTYwYmFkZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9wbC9wbHBnc3Fs L3NyYy9leHBlY3RlZC9wbHBnc3FsX2ZvcmVhY2gub3V0CkBAIC0wLDAgKzEsMjk3IEBACistLSBp bnB1dCBtdXN0IGJlIGEgSlNPTiBhcnJheQorZG8gJCQKK2RlY2xhcmUgeCBudW1lcmljOworYmVn aW4KKyAgZm9yZWFjaCB4IGluIGpzb24gYXJyYXkgTlVMTCAtLSBmYWlsCisgIGxvb3AKKyAgICBy YWlzZSBub3RpY2UgJyUnLCB4OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworRVJST1I6ICBGT1JF QUNIIGV4cHJlc3Npb24gbXVzdCBub3QgYmUgbnVsbAorQ09OVEVYVDogIFBML3BnU1FMIGZ1bmN0 aW9uIGlubGluZV9jb2RlX2Jsb2NrIGxpbmUgNCBhdCBGT1JFQUNIIG92ZXIganNvbiBhcnJheQor ZG8gJCQKK2RlY2xhcmUgeCBudW1lcmljOworYmVnaW4KKyAgZm9yZWFjaCB4IGluIGpzb24gYXJy YXkgJzEwJyAtLSBmYWlsCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUnLCB4OworICBlbmQg bG9vcDsKK2VuZDsKKyQkOworRVJST1I6ICBGT1JFQUNIIGV4cHJlc3Npb24gbXVzdCBldmFsdWF0 ZSB0byBhIEpTT04gYXJyYXkKK0hJTlQ6ICBDYW5ub3QgaXRlcmF0ZSBvdmVyIGEgc2NhbGFyIHZh bHVlLgorQ09OVEVYVDogIFBML3BnU1FMIGZ1bmN0aW9uIGlubGluZV9jb2RlX2Jsb2NrIGxpbmUg NCBhdCBGT1JFQUNIIG92ZXIganNvbiBhcnJheQorZG8gJCQKK2RlY2xhcmUgeCBudW1lcmljOwor YmVnaW4KKyAgZm9yZWFjaCB4IGluIGpzb24gYXJyYXkgJ3t9JyAtLSBmYWlsCisgIGxvb3AKKyAg ICByYWlzZSBub3RpY2UgJyUnLCB4OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworRVJST1I6ICBG T1JFQUNIIGV4cHJlc3Npb24gbXVzdCBldmFsdWF0ZSB0byBhIEpTT04gYXJyYXkKK0RFVEFJTDog IENhbm5vdCBpdGVyYXRlIG92ZXIgYSBvYmplY3QgdmFsdWUuCitDT05URVhUOiAgUEwvcGdTUUwg ZnVuY3Rpb24gaW5saW5lX2NvZGVfYmxvY2sgbGluZSA0IGF0IEZPUkVBQ0ggb3ZlciBqc29uIGFy cmF5CistLSBudW1lcmljIHRvIG51bWVyaWMKK2RvICQkCitkZWNsYXJlIHggbnVtZXJpYzsKK2Jl Z2luCisgIGZvcmVhY2ggeCBpbiBqc29uIGFycmF5ICdbMTAsMjAsMzAsMy4xNCwgbnVsbF0nCisg IGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUnLCB4OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOwor Tk9USUNFOiAgMTAKK05PVElDRTogIDIwCitOT1RJQ0U6ICAzMAorTk9USUNFOiAgMy4xNAorTk9U SUNFOiAgPE5VTEw+CistLSBudW1lcmljIHRvIGludCBieSBjYXN0CitkbyAkJAorZGVjbGFyZSB4 IGludDsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBqc29uIGFycmF5ICdbMTAsMjAsMzAsMy4xNCwg bnVsbF0nCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUnLCB4OworICBlbmQgbG9vcDsKK2Vu ZDsKKyQkOworTk9USUNFOiAgMTAKK05PVElDRTogIDIwCitOT1RJQ0U6ICAzMAorTk9USUNFOiAg MworTk9USUNFOiAgPE5VTEw+CistLSB0ZXN0IG9mIEZPVU5EIHZhcmlhYmxlCitkbyAkJAorZGVj bGFyZSB4IGludDsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBqc29uIGFycmF5ICdbMTBdJworICBs b29wCisgICAgcmFpc2Ugbm90aWNlICclJywgeDsKKyAgZW5kIGxvb3A7CisgIHJhaXNlIG5vdGlj ZSAnRk9VTkQ6ICUnLCBmb3VuZDsKK2VuZDsKKyQkOworTk9USUNFOiAgMTAKK05PVElDRTogIEZP VU5EOiB0CistLSB0ZXN0IG9mIEZPVU5EIHZhcmlhYmxlCitkbyAkJAorZGVjbGFyZSB4IGludDsK K2JlZ2luCisgIGZvcmVhY2ggeCBpbiBqc29uIGFycmF5ICdbXScKKyAgbG9vcAorICAgIHJhaXNl IG5vdGljZSAnJScsIHg7CisgIGVuZCBsb29wOworICByYWlzZSBub3RpY2UgJ0ZPVU5EOiAlJywg Zm91bmQ7CitlbmQ7CiskJDsKK05PVElDRTogIEZPVU5EOiBmCistLSBjb252ZXJzaW9uICIzLjE0 IiB0byBpbnQgc2hvdWxkIHRvIGZhaWwgZHVlIElPIGNhc3QKK2RvICQkCitkZWNsYXJlIHggaW50 OworYmVnaW4KKyAgZm9yZWFjaCB4IGluIGpzb24gYXJyYXkgJ1siMTAiLDIwLDMwLCIzLjE0Il0n CisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUnLCB4OworICBlbmQgbG9vcDsKK2VuZDsKKyQk OworTk9USUNFOiAgMTAKK05PVElDRTogIDIwCitOT1RJQ0U6ICAzMAorRVJST1I6ICBpbnZhbGlk IGlucHV0IHN5bnRheCBmb3IgdHlwZSBpbnRlZ2VyOiAiMy4xNCIKK0NPTlRFWFQ6ICBQTC9wZ1NR TCBmdW5jdGlvbiBpbmxpbmVfY29kZV9ibG9jayBsaW5lIDQgYXQgRk9SRUFDSCBvdmVyIGpzb24g YXJyYXkKK2RvICQkCitkZWNsYXJlIHggYm9vbGVhbjsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBq c29uIGFycmF5ICdbdHJ1ZSwgZmFsc2VdJworICBsb29wCisgIGlmIHggdGhlbgorICAgIHJhaXNl IG5vdGljZSAndHJ1ZSc7CisgIGVsc2UKKyAgICByYWlzZSBub3RpY2UgJ2ZhbHNlJzsKKyAgZW5k IGlmOworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworTk9USUNFOiAgdHJ1ZQorTk9USUNFOiAgZmFs c2UKKy0tIGpzb25iIHRvIGpzb25iCitkbyAkJAorZGVjbGFyZSB4IGpzb25iOworYmVnaW4KKyAg Zm9yZWFjaCB4IGluIGpzb24gYXJyYXkgJ1sxMCwyMCwzMCwzLjE0LCBudWxsLCAiSGkiXScKKyAg bG9vcAorICAgIHJhaXNlIG5vdGljZSAnJScsIHg7CisgIGVuZCBsb29wOworZW5kOworJCQ7CitO T1RJQ0U6ICAxMAorTk9USUNFOiAgMjAKK05PVElDRTogIDMwCitOT1RJQ0U6ICAzLjE0CitOT1RJ Q0U6ICBudWxsCitOT1RJQ0U6ICAiSGkiCistLSBqc29uYiB0byBqc29uCitkbyAkJAorZGVjbGFy ZSB4IGpzb247CitiZWdpbgorICBmb3JlYWNoIHggaW4ganNvbiBhcnJheSAnWzEwLDIwLDMwLDMu MTQsIG51bGwsICJIaSJdJworICBsb29wCisgICAgcmFpc2Ugbm90aWNlICclJywgeDsKKyAgZW5k IGxvb3A7CitlbmQ7CiskJDsKK05PVElDRTogIDEwCitOT1RJQ0U6ICAyMAorTk9USUNFOiAgMzAK K05PVElDRTogIDMuMTQKK05PVElDRTogIG51bGwKK05PVElDRTogICJIaSIKKy0tIGl0ZXJhdGlv biBvdmVyIGNvbXBvc2l0ZXMKK2RvICQkCitkZWNsYXJlIHggaW50OyB5IG51bWVyaWM7IHogdmFy Y2hhcjsKK2JlZ2luCisgIGZvcmVhY2ggeCwgeSwgeiBpbiBqc29uIGFycmF5ICdbe30sIHsieiI6 IkhpIn0sIHsieSI6IDMuMTR9LCB7InoiOiJIaSIsICJ4IjoxMCwgInkiOjMuMTR9XScKKyAgbG9v cAorICAgIHJhaXNlIG5vdGljZSAneDogJSwgeTogJSwgejogJScsIHgsIHksIHo7CisgIGVuZCBs b29wOworZW5kOworJCQ7CitOT1RJQ0U6ICB4OiA8TlVMTD4sIHk6IDxOVUxMPiwgejogPE5VTEw+ CitOT1RJQ0U6ICB4OiA8TlVMTD4sIHk6IDxOVUxMPiwgejogSGkKK05PVElDRTogIHg6IDxOVUxM PiwgeTogMy4xNCwgejogPE5VTEw+CitOT1RJQ0U6ICB4OiAxMCwgeTogMy4xNCwgejogSGkKK2Ny ZWF0ZSB0eXBlIHQzIGFzICh4IGludCwgeSBudW1lcmljLCB6IHZhcmNoYXIpOworZG8gJCQKK2Rl Y2xhcmUgYyB0MzsKK2JlZ2luCisgIGZvcmVhY2ggYyBpbiBqc29uIGFycmF5ICdbe30sIHsieiI6 IkhpIn0sIHsieSI6IDMuMTR9LCB7InoiOiJIaSIsICJ4IjoxMCwgInkiOjMuMTR9XScKKyAgbG9v cAorICAgIHJhaXNlIG5vdGljZSAneDogJSwgeTogJSwgejogJScsIGMueCwgYy55LCBjLno7Cisg IGVuZCBsb29wOworZW5kOworJCQ7CitOT1RJQ0U6ICB4OiA8TlVMTD4sIHk6IDxOVUxMPiwgejog PE5VTEw+CitOT1RJQ0U6ICB4OiA8TlVMTD4sIHk6IDxOVUxMPiwgejogSGkKK05PVElDRTogIHg6 IDxOVUxMPiwgeTogMy4xNCwgejogPE5VTEw+CitOT1RJQ0U6ICB4OiAxMCwgeTogMy4xNCwgejog SGkKK2RvICQkCitkZWNsYXJlIGMgdDM7CitiZWdpbgorICBmb3JlYWNoIGMueCwgYy55LCBjLnog aW4ganNvbiBhcnJheSAnW3t9LCB7InoiOiJIaSJ9LCB7InkiOiAzLjE0fSwgeyJ6IjoiSGkiLCAi eCI6MTAsICJ5IjozLjE0fV0nCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJ3g6ICUsIHk6ICUs IHo6ICUnLCBjLngsIGMueSwgYy56OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworTk9USUNFOiAg eDogPE5VTEw+LCB5OiA8TlVMTD4sIHo6IDxOVUxMPgorTk9USUNFOiAgeDogPE5VTEw+LCB5OiA8 TlVMTD4sIHo6IEhpCitOT1RJQ0U6ICB4OiA8TlVMTD4sIHk6IDMuMTQsIHo6IDxOVUxMPgorTk9U SUNFOiAgeDogMTAsIHk6IDMuMTQsIHo6IEhpCitkcm9wIHR5cGUgdDM7CistLSB0YXJnZXQgY2Fu IGJlIGEgYXJyYXkKK2RvICQkCitkZWNsYXJlIHggaW50W107CitiZWdpbgorICBmb3JlYWNoIHgg aW4ganNvbiBhcnJheSAnW1sxLDIsM10sWzQsNSw2XV0nCisgIGxvb3AKKyAgICByYWlzZSBub3Rp Y2UgJyUgJSAlJywgeFsxXSwgeFsyXSwgeFszXTsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKK05P VElDRTogIDEgMiAzCitOT1RJQ0U6ICA0IDUgNgorZG8gJCQKK2RlY2xhcmUgeCB2YXJjaGFyW107 CitiZWdpbgorICBmb3JlYWNoIHggaW4ganNvbiBhcnJheSAnW1siSGkiLCJIZWxsbyJdLFsiSGVs bG8iLCJIaSJdXScKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAnJSAlJywgeFsxXSwgeFsyXTsK KyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKK05PVElDRTogIEhpIEhlbGxvCitOT1RJQ0U6ICBIZWxs byBIaQorZG8gJCQKK2RlY2xhcmUgeCB2YXJjaGFyW107CitiZWdpbgorICBmb3JlYWNoIHggaW4g anNvbiBhcnJheSAnW1siSGkiLCJIZWxsbyJdLFsiSGVsbG8iLCJIaSJdXScKKyAgbG9vcAorICAg IHJhaXNlIG5vdGljZSAnJSAlJywgeFsxXSwgeFsyXTsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsK K05PVElDRTogIEhpIEhlbGxvCitOT1RJQ0U6ICBIZWxsbyBIaQorZG8gJCQKK2RlY2xhcmUgeCBp bnRbXTsgeSB2YXJjaGFyOworYmVnaW4KKyAgZm9yZWFjaCB4LCB5IGluIGpzb24gYXJyYXkgJ1t7 IngiOlsxLDIsM10sICJ5IjoiSGkifSwgeyJ4IjpbNCw1LDZdLCAieSI6IkhpIn1dJworICBsb29w CisgICAgcmFpc2Ugbm90aWNlICclICUgJSwgeTogJScsIHhbMV0sIHhbMl0sIHhbM10sIHk7Cisg IGVuZCBsb29wOworZW5kOworJCQ7CitOT1RJQ0U6ICAxIDIgMywgeTogSGkKK05PVElDRTogIDQg NSA2LCB5OiBIaQorY3JlYXRlIHR5cGUgdDIgYXMgKHggaW50W10sIHkgdmFyY2hhcik7CitkbyAk JAorZGVjbGFyZSBjIHQyOworYmVnaW4KKyAgZm9yZWFjaCBjIGluIGpzb24gYXJyYXkgJ1t7Ingi OlsxLDIsM10sICJ5IjoiSGkifSwgeyJ4IjpbNCw1LDZdLCAieSI6IkhpIn1dJworICBsb29wCisg ICAgcmFpc2Ugbm90aWNlICclICUgJSwgeTogJScsIGMueFsxXSwgYy54WzJdLCBjLnhbM10sIGMu eTsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKK05PVElDRTogIDEgMiAzLCB5OiBIaQorTk9USUNF OiAgNCA1IDYsIHk6IEhpCitkcm9wIHR5cGUgdDI7CistLSBFWElUIGFuZCBDT05USU5VRSBjYW4g YmUgdHJpZ2dlcmVkIGJ5IExPT1BfUkNfUFJPQ0VTU0lORworZG8gJCQKK2RlY2xhcmUgeCBpbnQ7 CitiZWdpbgorICBmb3JlYWNoIHggaW4ganNvbiBhcnJheSAnWzEsMiwzLDQsNV0nCisgIGxvb3AK KyAgICBleGl0IHdoZW4geCA9IDM7CisgICAgcmFpc2Ugbm90aWNlICclJywgeDsKKyAgZW5kIGxv b3A7CitlbmQ7CiskJDsKK05PVElDRTogIDEKK05PVElDRTogIDIKK2RvICQkCitkZWNsYXJlIHgg aW50OworYmVnaW4KKyAgZm9yZWFjaCB4IGluIGpzb24gYXJyYXkgJ1sxLDIsMyw0LDVdJworICBs b29wCisgICAgY29udGludWUgd2hlbiB4ICUgMiA9IDA7CisgICAgcmFpc2Ugbm90aWNlICclJywg eDsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKK05PVElDRTogIDEKK05PVElDRTogIDMKK05PVElD RTogIDUKKy0tIFZhcmlhYmxlIGluc3RlYWQgb2Ygc3RyaW5nCitETyAkJAorZGVjbGFyZQorICB4 IGludDsKKyAgYXJyIGpzb25iOworYmVnaW4KKyAgc2VsZWN0IGpzb25iX2FnZyhpKSBpbnRvIGFy cgorICAgIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEsMykgZyhpKTsKKworICBmb3JlYWNoIHggaW4g anNvbiBhcnJheSBhcnIKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAnJScsIHg7CisgIGVuZCBs b29wOworZW5kOworJCQ7CitOT1RJQ0U6ICAxCitOT1RJQ0U6ICAyCitOT1RJQ0U6ICAzCmRpZmYg LS1naXQgYS9zcmMvcGwvcGxwZ3NxbC9zcmMvbWVzb24uYnVpbGQgYi9zcmMvcGwvcGxwZ3NxbC9z cmMvbWVzb24uYnVpbGQKaW5kZXggNmZmMjcwMDZjZmMuLjYwOWVlZDdhMjhkIDEwMDY0NAotLS0g YS9zcmMvcGwvcGxwZ3NxbC9zcmMvbWVzb24uYnVpbGQKKysrIGIvc3JjL3BsL3BscGdzcWwvc3Jj L21lc29uLmJ1aWxkCkBAIC04OCw2ICs4OCw3IEBAIHRlc3RzICs9IHsKICAgICAgICdwbHBnc3Fs X3RyYXAnLAogICAgICAgJ3BscGdzcWxfdHJpZ2dlcicsCiAgICAgICAncGxwZ3NxbF92YXJwcm9w cycsCisgICAgICAncGxwZ3NxbF9mb3JlYWNoJywKICAgICBdLAogICB9LAogfQpkaWZmIC0tZ2l0 IGEvc3JjL3BsL3BscGdzcWwvc3JjL3BsX2V4ZWMuYyBiL3NyYy9wbC9wbHBnc3FsL3NyYy9wbF9l eGVjLmMKaW5kZXggODQ1NTJlMzJjODcuLjAzNjM5MGYwN2E0IDEwMDY0NAotLS0gYS9zcmMvcGwv cGxwZ3NxbC9zcmMvcGxfZXhlYy5jCisrKyBiL3NyYy9wbC9wbHBnc3FsL3NyYy9wbF9leGVjLmMK QEAgLTQxLDYgKzQxLDggQEAKICNpbmNsdWRlICJ1dGlscy9idWlsdGlucy5oIgogI2luY2x1ZGUg InV0aWxzL2RhdHVtLmgiCiAjaW5jbHVkZSAidXRpbHMvZm1ncm9pZHMuaCIKKyNpbmNsdWRlICJ1 dGlscy9qc29uYi5oIgorI2luY2x1ZGUgInV0aWxzL2pzb25mdW5jcy5oIgogI2luY2x1ZGUgInV0 aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAjaW5jbHVkZSAi dXRpbHMvcmVsLmgiCkBAIC0zMDUsNiArMzA3LDggQEAgc3RhdGljIGludAlleGVjX3N0bXRfZm9y YyhQTHBnU1FMX2V4ZWNzdGF0ZSAqZXN0YXRlLAogCQkJCQkJICAgUExwZ1NRTF9zdG10X2ZvcmMg KnN0bXQpOwogc3RhdGljIGludAlleGVjX3N0bXRfZm9yZWFjaF9hKFBMcGdTUUxfZXhlY3N0YXRl ICplc3RhdGUsCiAJCQkJCQkJCVBMcGdTUUxfc3RtdF9mb3JlYWNoX2EgKnN0bXQpOworc3RhdGlj IGludAlleGVjX3N0bXRfZm9yZWFjaF9qc29uX2EoUExwZ1NRTF9leGVjc3RhdGUgKmVzdGF0ZSwK KwkJCQkJCQkJCSBQTHBnU1FMX3N0bXRfZm9yZWFjaF9qc29uX2EgKnN0bXQpOwogc3RhdGljIGlu dAlleGVjX3N0bXRfb3BlbihQTHBnU1FMX2V4ZWNzdGF0ZSAqZXN0YXRlLAogCQkJCQkJICAgUExw Z1NRTF9zdG10X29wZW4gKnN0bXQpOwogc3RhdGljIGludAlleGVjX3N0bXRfZmV0Y2goUExwZ1NR TF9leGVjc3RhdGUgKmVzdGF0ZSwKQEAgLTIwNzUsNiArMjA3OSwxMCBAQCBleGVjX3N0bXRzKFBM cGdTUUxfZXhlY3N0YXRlICplc3RhdGUsIExpc3QgKnN0bXRzKQogCQkJCXJjID0gZXhlY19zdG10 X2ZvcmVhY2hfYShlc3RhdGUsIChQTHBnU1FMX3N0bXRfZm9yZWFjaF9hICopIHN0bXQpOwogCQkJ CWJyZWFrOwogCisJCQljYXNlIFBMUEdTUUxfU1RNVF9GT1JFQUNIX0pTT05fQToKKwkJCQlyYyA9 IGV4ZWNfc3RtdF9mb3JlYWNoX2pzb25fYShlc3RhdGUsIChQTHBnU1FMX3N0bXRfZm9yZWFjaF9q c29uX2EgKikgc3RtdCk7CisJCQkJYnJlYWs7CisKIAkJCWNhc2UgUExQR1NRTF9TVE1UX0VYSVQ6 CiAJCQkJcmMgPSBleGVjX3N0bXRfZXhpdChlc3RhdGUsIChQTHBnU1FMX3N0bXRfZXhpdCAqKSBz dG10KTsKIAkJCQlicmVhazsKQEAgLTI5OTUsNiArMzAwMywyNDkgQEAgZXhlY19zdG10X2ZvcmMo UExwZ1NRTF9leGVjc3RhdGUgKmVzdGF0ZSwgUExwZ1NRTF9zdG10X2ZvcmMgKnN0bXQpCiB9CiAK IAorLyoKKyAqIENvbnZlcnQgSnNvbmJWYWx1ZSB0byBEYXR1bSB0aGF0IGNhbiBiZSBhc3NpZ25l ZCB0byBQTHBnU1FMX3Zhci4KKyAqLworc3RhdGljIERhdHVtCitKc29uYlZhbHVlVG9EYXR1bShK c29uYlZhbHVlICpqYnYsCisJCQkJICBPaWQgKnR5cGlkLCBpbnQzMiAqdHlwbW9kLCBib29sICpp c251bGwsCisJCQkJICBPaWQgZXhwZWN0ZWRfdHlwaWQsIGludDMyIGV4cGVjdGVkX3R5cG1vZCwK KwkJCQkgIHZvaWQgKipjYWNoZSwgTWVtb3J5Q29udGV4dCBtY3h0KQoreworCWlmIChleHBlY3Rl ZF90eXBpZCA9PSBKU09OQk9JRCkKKwl7CisJCSp0eXBpZCA9IEpTT05CT0lEOworCQkqdHlwbW9k ID0gLTE7CisJCSppc251bGwgPSBmYWxzZTsKKworCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKEpz b25iVmFsdWVUb0pzb25iKGpidikpOworCX0KKwllbHNlIGlmIChleHBlY3RlZF90eXBpZCA9PSBK U09OT0lEKQorCXsKKwkJSnNvbmIJICAgKmpzb25iOworCQljaGFyCSAgICpzdHI7CisKKwkJLyog c2VyaWFsaXplIEpzb25WYWx1ZSB0byBKU09OIHRleHQgKi8KKwkJanNvbmIgPSBKc29uYlZhbHVl VG9Kc29uYihqYnYpOworCQlzdHIgPSBKc29uYlRvQ1N0cmluZyhOVUxMLCAmanNvbmItPnJvb3Qs IFZBUlNJWkUoanNvbmIpKTsKKworCQkqdHlwaWQgPSBURVhUT0lEOworCQkqdHlwbW9kID0gLTE7 CisJCSppc251bGwgPSBmYWxzZTsKKworCQlyZXR1cm4gUG9pbnRlckdldERhdHVtKGNzdHJpbmdf dG9fdGV4dChzdHIpKTsKKwl9CisJZWxzZSBpZiAoamJ2LT50eXBlID09IGpidk51bGwpCisJewor CQkqdHlwaWQgPSBleHBlY3RlZF90eXBpZDsKKwkJKnR5cG1vZCA9IC0xOworCQkqaXNudWxsID0g dHJ1ZTsKKworCQlyZXR1cm4gKERhdHVtKSAwOworCX0KKwllbHNlIGlmIChqYnYtPnR5cGUgPT0g amJ2U3RyaW5nKQorCXsKKwkJKnR5cGlkID0gVEVYVE9JRDsKKwkJKnR5cG1vZCA9IC0xOworCQkq aXNudWxsID0gZmFsc2U7CisKKwkJcmV0dXJuIFBvaW50ZXJHZXREYXR1bShjc3RyaW5nX3RvX3Rl eHRfd2l0aF9sZW4oamJ2LT52YWwuc3RyaW5nLnZhbCwKKwkJCQkJCQkJCQkJCQkJamJ2LT52YWwu c3RyaW5nLmxlbikpOworCX0KKwllbHNlIGlmIChqYnYtPnR5cGUgPT0gamJ2TnVtZXJpYykKKwl7 CisJCSp0eXBpZCA9IE5VTUVSSUNPSUQ7CisJCSp0eXBtb2QgPSAtMTsKKwkJKmlzbnVsbCA9IGZh bHNlOworCisJCXJldHVybiBQb2ludGVyR2V0RGF0dW0oamJ2LT52YWwubnVtZXJpYyk7CisJfQor CWVsc2UgaWYgKGpidi0+dHlwZSA9PSBqYnZCb29sKQorCXsKKwkJKnR5cGlkID0gQk9PTE9JRDsK KwkJKnR5cG1vZCA9IC0xOworCQkqaXNudWxsID0gZmFsc2U7CisKKwkJcmV0dXJuIEJvb2xHZXRE YXR1bShqYnYtPnZhbC5ib29sZWFuKTsKKwl9CisJZWxzZQorCXsKKwkJSnNvbmIJKmpzb25iOwor CQlEYXR1bQlyZXN1bHQ7CisKKwkJLyogaXNudWxsIGluIGpzb25fcG9wdWxhdGVfdHlwZSBpcyBp bm91dCBhcmd1bWVudCAqLworCQkqaXNudWxsID0gZmFsc2U7CisKKwkJanNvbmIgPSBKc29uYlZh bHVlVG9Kc29uYihqYnYpOworCQlyZXN1bHQgPSBqc29uX3BvcHVsYXRlX3R5cGUoUG9pbnRlckdl dERhdHVtKGpzb25iKSwgSlNPTkJPSUQsCisJCQkJCQkJCQlleHBlY3RlZF90eXBpZCwgZXhwZWN0 ZWRfdHlwbW9kLAorCQkJCQkJCQkJY2FjaGUsIG1jeHQsCisJCQkJCQkJCQlpc251bGwsIGZhbHNl LCBOVUxMKTsKKworCQkqdHlwaWQgPSBleHBlY3RlZF90eXBpZDsKKwkJKnR5cG1vZCA9IGV4cGVj dGVkX3R5cG1vZDsKKworCQlyZXR1cm4gcmVzdWx0OworCX0KK30KKworLyogLS0tLS0tLS0tLQor ICogZXhlY19zdG10X2ZvcmVhY2hfanNvbl9hCQkJTG9vcCBvdmVyIGVsZW1lbnRzIGluIGpzb24g YXJyYXkKKyAqCisgKiBXaGVuIHRhcmdldCBpcyBhIGNvbXBvc2l0ZSwgdGhlbiB0YXJnZXQgaXMg cG9wdWxhdGVkIGxpa2UganNvbl90b19wb3B1bGF0ZV9yZWNvcmQuCisgKiBqc29uYiBkb2Vzbid0 IHByZXNlcnZlIGF0dHJpYnV0ZSBvcmRlciwgc28gcG9zaXRpb24gYmFzZWQgbWFwcGluZyBiZXR3 ZWVuCisgKiB0YXJnZXQgYW5kIHNvdXJjZSBjYW4gYmUgcG9zc2libHkgZGFuZ2Vyb3VzICh3aXRo IHVuZXhwZWN0ZWQgYmVoYXZlKS4KKyAqIC0tLS0tLS0tLS0KKyAqLworc3RhdGljIGludAorZXhl Y19zdG10X2ZvcmVhY2hfanNvbl9hKFBMcGdTUUxfZXhlY3N0YXRlICplc3RhdGUsCisJCQkJCQkg UExwZ1NRTF9zdG10X2ZvcmVhY2hfanNvbl9hICpzdG10KQoreworCU9pZAkJCWV4cHJ0eXBlaWQ7 CisJaW50MzIJCWV4cHJ0eXBtb2Q7CisJRGF0dW0JCWV4cHJkYXR1bTsKKwlQTHBnU1FMX2RhdHVt ICpsb29wX3ZhcjsKKwlPaWQJCQlsb29wX3Zhcl90eXBpZDsKKwlpbnQzMgkJbG9vcF92YXJfdHlw bW9kOworCU9pZAkJCWxvb3BfdmFyX2NvbGxhdGlvbjsKKwlKc29uYgkgICAqamI7CisJSnNvbmJJ dGVyYXRvciAqaXQ7CisJSnNvbmJWYWx1ZQlqYnY7CisJSnNvbmJJdGVyYXRvclRva2VuIHI7CisJ TWVtb3J5Q29udGV4dCBzdG10X21jb250ZXh0OworCU1lbW9yeUNvbnRleHQgb2xkY29udGV4dDsK KwlNZW1vcnlDb250ZXh0IHRtcF9jeHQ7CisJYm9vbAkJZm91bmQgPSBmYWxzZTsKKwlib29sCQlp c251bGw7CisJYm9vbAkJc2tpcE5lc3RlZCA9IGZhbHNlOworCWludAkJCXJjID0gUExQR1NRTF9S Q19PSzsKKwl2b2lkCSAgICpjYWNoZSA9IE5VTEw7CisKKwkvKiBnZXQgdGhlIHZhbHVlIG9mIHRo ZSBleHByZXNzaW9uICovCisJZXhwcmRhdHVtID0gZXhlY19ldmFsX2V4cHIoZXN0YXRlLCBzdG10 LT5leHByLCAmaXNudWxsLAorCQkJCQkJCSAgICZleHBydHlwZWlkLCAmZXhwcnR5cG1vZCk7CisJ aWYgKGlzbnVsbCkKKwkJZXJlcG9ydChFUlJPUiwKKwkJCQkoZXJyY29kZShFUlJDT0RFX05VTExf VkFMVUVfTk9UX0FMTE9XRUQpLAorCQkJCSBlcnJtc2coIkZPUkVBQ0ggZXhwcmVzc2lvbiBtdXN0 IG5vdCBiZSBudWxsIikpKTsKKworCS8qCisJICogRG8gYXMgbXVjaCBhcyBwb3NzaWJsZSBvZiB0 aGUgY29kZSBiZWxvdyBpbiBzdG10X21jb250ZXh0LCB0byBhdm9pZCBhbnkKKwkgKiBsZWFrcyBm cm9tIGNhbGxlZCBzdWJyb3V0aW5lcy4gIFdlIG5lZWQgYSBwcml2YXRlIHN0bXRfbWNvbnRleHQg c2luY2UKKwkgKiB3ZSdsbCBiZSBjYWxsaW5nIGFyYml0cmFyeSBzdGF0ZW1lbnQgY29kZS4KKwkg Ki8KKwlzdG10X21jb250ZXh0ID0gZ2V0X3N0bXRfbWNvbnRleHQoZXN0YXRlKTsKKwlwdXNoX3N0 bXRfbWNvbnRleHQoZXN0YXRlKTsKKwlvbGRjb250ZXh0ID0gTWVtb3J5Q29udGV4dFN3aXRjaFRv KHN0bXRfbWNvbnRleHQpOworCisJdG1wX2N4dCA9IEFsbG9jU2V0Q29udGV4dENyZWF0ZShDdXJy ZW50TWVtb3J5Q29udGV4dCwKKwkJCQkJCQkJCSJGT1JFQUNIIElOIEpTT04gQVJSQVkgdGVtcG9y YXJ5IGN4dCIsCisJCQkJCQkJCQlBTExPQ1NFVF9ERUZBVUxUX1NJWkVTKTsKKworCS8qIGNhc3Qg dG8ganNvbmIgKi8KKwlleHByZGF0dW0gPSBleGVjX2Nhc3RfdmFsdWUoZXN0YXRlLCBleHByZGF0 dW0sICZpc251bGwsCisJCQkJCQkJCWV4cHJ0eXBlaWQsIGV4cHJ0eXBtb2QsCisJCQkJCQkJCUpT T05CT0lELCAtMSk7CisKKwlBc3NlcnQoIWlzbnVsbCk7CisKKwkvKgorCSAqIFdlIG11c3QgY29w eSB0aGUgYXJyYXkgaW50byBzdG10X21jb250ZXh0LCBlbHNlIGl0IHdpbGwgZGlzYXBwZWFyIGlu CisJICogZXhlY19ldmFsX2NsZWFudXAuICBUaGlzIGlzIGFubm95aW5nLCBidXQgY2xlYW51cCB3 aWxsIGNlcnRhaW5seSBoYXBwZW4KKwkgKiB3aGlsZSBydW5uaW5nIHRoZSBsb29wIGJvZHksIHNv IHdlIGhhdmUgbGl0dGxlIGNob2ljZS4KKwkgKi8KKwlqYiA9IERhdHVtR2V0SnNvbmJQQ29weShl eHByZGF0dW0pOworCisJLyogQ2xlYW4gdXAgYW55IGxlZnRvdmVyIHRlbXBvcmFyeSBtZW1vcnkg Ki8KKwlleGVjX2V2YWxfY2xlYW51cChlc3RhdGUpOworCisJLyoKKwkgKiBUaGlzIGlzIGNvbXBh dGlibGUgd2l0aCBqc29uYl9hcnJheV9lbGVtZW50LiBTUUwvSlNPTiBmdW5jdGlvbnMgYXJlIG5v dAorCSAqIHRvbyBzdHJpY3QgbGlrZSBQb3N0Z3JlU1FMIHByb3ByaWV0YXJ5IChvbGQganNvbikg ZnVuY3Rpb25zLiBJbiBTUUwvSlNPTgorCSAqIGEgc2NhbGFyIGlzIGVxdWFsIHRvIG9uZSBlbGVt ZW50IGFycmF5LiBUaGUgYmFzaWMgcXVlc3Rpb24gaXMgaWYgRk9SRUFDSAorCSAqIHNob3VsZCBi ZSBtb3JlIHJlc3RyaWN0aXZlIGxpa2Ugb2xkIEpTT04gZnVuY3Rpb24sIG9yIGxlc3MgcmVzdHJp Y3RpdmUKKwkgKiBsaWtlIFNRTC9KU09OIGZ1bmN0aW9ucy4KKwkgKi8KKwlpZiAoSkJfUk9PVF9J U19TQ0FMQVIoamIpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5W QUxJRF9QQVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coIkZPUkVBQ0ggZXhwcmVzc2lvbiBt dXN0IGV2YWx1YXRlIHRvIGEgSlNPTiBhcnJheSIpLAorCQkJCSBlcnJoaW50KCJDYW5ub3QgaXRl cmF0ZSBvdmVyIGEgc2NhbGFyIHZhbHVlLiIpKSk7CisJZWxzZSBpZiAoSkJfUk9PVF9JU19PQkpF Q1QoamIpKQorCQllcmVwb3J0KEVSUk9SLAorCQkJCShlcnJjb2RlKEVSUkNPREVfSU5WQUxJRF9Q QVJBTUVURVJfVkFMVUUpLAorCQkJCSBlcnJtc2coIkZPUkVBQ0ggZXhwcmVzc2lvbiBtdXN0IGV2 YWx1YXRlIHRvIGEgSlNPTiBhcnJheSIpLAorCQkJCSBlcnJkZXRhaWwoIkNhbm5vdCBpdGVyYXRl IG92ZXIgYSBvYmplY3QgdmFsdWUuIikpKTsKKworCUFzc2VydChKQl9ST09UX0lTX0FSUkFZKGpi KSk7CisKKwkvKiBTZXQgdXAgdGhlIGxvb3AgdmFyaWFibGUgYW5kIHNlZSBpZiBpdCBpcyBvZiBh biBhcnJheSB0eXBlICovCisJbG9vcF92YXIgPSBlc3RhdGUtPmRhdHVtc1tzdG10LT52YXJub107 CisKKwlwbHBnc3FsX2V4ZWNfZ2V0X2RhdHVtX3R5cGVfaW5mbyhlc3RhdGUsIGxvb3BfdmFyLAor CQkJCQkJCQkJICZsb29wX3Zhcl90eXBpZCwgJmxvb3BfdmFyX3R5cG1vZCwKKwkJCQkJCQkJCSAm bG9vcF92YXJfY29sbGF0aW9uKTsKKworCWl0ID0gSnNvbmJJdGVyYXRvckluaXQoJmpiLT5yb290 KTsKKworCXdoaWxlICgociA9IEpzb25iSXRlcmF0b3JOZXh0KCZpdCwgJmpidiwgc2tpcE5lc3Rl ZCkpICE9IFdKQl9ET05FKQorCXsKKwkJc2tpcE5lc3RlZCA9IHRydWU7CisKKwkJaWYgKHIgPT0g V0pCX0VMRU0pCisJCXsKKwkJCURhdHVtCQl2YWw7CisJCQlPaWQJCQl2YWx0eXBpZDsKKwkJCWlu dDMyCQl2YWx0eXBtb2Q7CisJCQlib29sCQl2YWxpc251bGw7CisKKwkJCWZvdW5kID0gdHJ1ZTsJ CQkvKiBsb29wZWQgYXQgbGVhc3Qgb25jZSAqLworCisJCQlNZW1vcnlDb250ZXh0U3dpdGNoVG8o dG1wX2N4dCk7CisKKwkJCXZhbCA9IEpzb25iVmFsdWVUb0RhdHVtKCZqYnYsCisJCQkJCQkJCQkm dmFsdHlwaWQsICZ2YWx0eXBtb2QsICZ2YWxpc251bGwsCisJCQkJCQkJCQlsb29wX3Zhcl90eXBp ZCwgbG9vcF92YXJfdHlwbW9kLAorCQkJCQkJCQkJJmNhY2hlLCBzdG10X21jb250ZXh0KTsKKwor CQkJLyogZXhlY19hc3NpZ25fdmFsdWUgYW5kIGV4ZWNfc3RtdHMgbXVzdCBydW4gaW4gdGhlIG1h aW4gY29udGV4dCAqLworCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZGNvbnRleHQpOworCisJ CQkvKiBBc3NpZ24gY3VycmVudCBlbGVtZW50L3NsaWNlIHRvIHRoZSBsb29wIHZhcmlhYmxlICov CisJCQlleGVjX2Fzc2lnbl92YWx1ZShlc3RhdGUsIGxvb3BfdmFyLCB2YWwsCisJCQkJCQkJICB2 YWxpc251bGwsIHZhbHR5cGlkLCB2YWx0eXBtb2QpOworCisJCQlNZW1vcnlDb250ZXh0UmVzZXQo dG1wX2N4dCk7CisKKwkJCS8qCisJCQkgKiBFeGVjdXRlIHRoZSBzdGF0ZW1lbnRzCisJCQkgKi8K KwkJCXJjID0gZXhlY19zdG10cyhlc3RhdGUsIHN0bXQtPmJvZHkpOworCisJCQlMT09QX1JDX1BS T0NFU1NJTkcoc3RtdC0+bGFiZWwsIGJyZWFrKTsKKworCQkJTWVtb3J5Q29udGV4dFN3aXRjaFRv KHN0bXRfbWNvbnRleHQpOworCQl9CisJfQorCisJLyogUmVzdG9yZSBtZW1vcnkgY29udGV4dCBz dGF0ZSAqLworCU1lbW9yeUNvbnRleHRTd2l0Y2hUbyhvbGRjb250ZXh0KTsKKwlwb3Bfc3RtdF9t Y29udGV4dChlc3RhdGUpOworCisJLyogUmVsZWFzZSB0ZW1wb3JhcnkgbWVtb3J5LCBpbmNsdWRp bmcgdGhlIGFycmF5IHZhbHVlICovCisJTWVtb3J5Q29udGV4dFJlc2V0KHN0bXRfbWNvbnRleHQp OworCisJLyoKKwkgKiBTZXQgdGhlIEZPVU5EIHZhcmlhYmxlIHRvIGluZGljYXRlIHRoZSByZXN1 bHQgb2YgZXhlY3V0aW5nIHRoZSBsb29wCisJICogKG5hbWVseSwgd2hldGhlciB3ZSBsb29wZWQg b25lIG9yIG1vcmUgdGltZXMpLiBUaGlzIG11c3QgYmUgc2V0IGhlcmUgc28KKwkgKiB0aGF0IGl0 IGRvZXMgbm90IGludGVyZmVyZSB3aXRoIHRoZSB2YWx1ZSBvZiB0aGUgRk9VTkQgdmFyaWFibGUg aW5zaWRlCisJICogdGhlIGxvb3AgcHJvY2Vzc2luZyBpdHNlbGYuCisJICovCisJZXhlY19zZXRf Zm91bmQoZXN0YXRlLCBmb3VuZCk7CisKKwlyZXR1cm4gcmM7Cit9CisKIC8qIC0tLS0tLS0tLS0K ICAqIGV4ZWNfc3RtdF9mb3JlYWNoX2EJCQlMb29wIG92ZXIgZWxlbWVudHMgb3Igc2xpY2VzIG9m IGFuIGFycmF5CiAgKgpAQCAtNTUzNyw2ICs1Nzg4LDUxIEBAIHBscGdzcWxfZXhlY19nZXRfZGF0 dW1fdHlwZV9pbmZvKFBMcGdTUUxfZXhlY3N0YXRlICplc3RhdGUsCiAJCQkJYnJlYWs7CiAJCQl9 CiAKKwkJY2FzZSBQTFBHU1FMX0RUWVBFX1JPVzoKKwkJCXsKKwkJCQlQTHBnU1FMX3JvdyAqcm93 ID0gKFBMcGdTUUxfcm93ICopIGRhdHVtOworCisJCQkJaWYgKCFyb3ctPnJvd3R1cGRlc2MpCisJ CQkJeworCQkJCQlpbnQJCQlpOworCisJCQkJCXJvdy0+cm93dHVwZGVzYyA9IENyZWF0ZVRlbXBs YXRlVHVwbGVEZXNjKHJvdy0+bmZpZWxkcyk7CisKKwkJCQkJZm9yIChpID0gMDsgaSA8IHJvdy0+ bmZpZWxkczsgaSsrKQorCQkJCQl7CisJCQkJCQlQTHBnU1FMX2RhdHVtICp2YXIgPSBlc3RhdGUt PmRhdHVtc1tyb3ctPnZhcm5vc1tpXV07CisJCQkJCQlPaWQJCQl2YXJ0eXBpZDsKKwkJCQkJCWlu dDMyCQl2YXJ0eXBtb2Q7CisJCQkJCQlPaWQJCQl2YXJjb2xsYXRpb247CisKKwkJCQkJCS8qCisJ CQkJCQkgKiBXZSBjYW5ub3QgdXNlIGZpZWxkbmFtZXMgZm9yIHR1cGRlc2NlbnRyeSwgYmVjYXVz ZQorCQkJCQkJICogdGhlc2UgbmFtZXMgY2FuIGJlIHN1ZmZpeGVkIGJ5IG5hbWUgb2Ygcm93IHZh cmlhYmxlLgorCQkJCQkJICogVW5mb3J0dW5hdGVseSwgdGhlIFBMcGdTUUxfcmVjZmllbGQgaXMg bm90IGNhc3RlZCB0bworCQkJCQkJICogUExwZ1NRTF92YXJpYWJsZS4KKwkJCQkJCSAqLworCQkJ CQkJcGxwZ3NxbF9leGVjX2dldF9kYXR1bV90eXBlX2luZm8oZXN0YXRlLCB2YXIsCisJCQkJCQkJ CQkJCQkJCSAmdmFydHlwaWQsICZ2YXJ0eXBtb2QsCisJCQkJCQkJCQkJCQkJCSAmdmFyY29sbGF0 aW9uKTsKKworCQkJCQkJVHVwbGVEZXNjSW5pdEVudHJ5KHJvdy0+cm93dHVwZGVzYywgaSArIDEs CisJCQkJCQkJCQkJICAgdmFyLT5yZWZuYW1lLCB2YXJ0eXBpZCwgdmFydHlwbW9kLAorCQkJCQkJ CQkJCSAgIDApOworCQkJCQkJVHVwbGVEZXNjSW5pdEVudHJ5Q29sbGF0aW9uKHJvdy0+cm93dHVw ZGVzYywgaSArIDEsCisJCQkJCQkJCQkJCQkJdmFyY29sbGF0aW9uKTsKKwkJCQkJfQorCisJCQkJ CS8qIE1ha2Ugc3VyZSB3ZSBoYXZlIGEgdmFsaWQgdHlwZS90eXBtb2Qgc2V0dGluZyAqLworCQkJ CQlCbGVzc1R1cGxlRGVzYyhyb3ctPnJvd3R1cGRlc2MpOworCQkJCX0KKworCQkJCSp0eXBlSWQg PSByb3ctPnJvd3R1cGRlc2MtPnRkdHlwZWlkOworCQkJCSp0eXBNb2QgPSByb3ctPnJvd3R1cGRl c2MtPnRkdHlwbW9kOworCQkJCS8qIGNvbXBvc2l0ZSB0eXBlcyBhcmUgbmV2ZXIgY29sbGF0YWJs ZSAqLworCQkJCSpjb2xsYXRpb24gPSBJbnZhbGlkT2lkOworCQkJCWJyZWFrOworCQkJfQorCiAJ CWNhc2UgUExQR1NRTF9EVFlQRV9SRUM6CiAJCQl7CiAJCQkJUExwZ1NRTF9yZWMgKnJlYyA9IChQ THBnU1FMX3JlYyAqKSBkYXR1bTsKZGlmZiAtLWdpdCBhL3NyYy9wbC9wbHBnc3FsL3NyYy9wbF9m dW5jcy5jIGIvc3JjL3BsL3BscGdzcWwvc3JjL3BsX2Z1bmNzLmMKaW5kZXggOTJjZDkxMTZjMGUu Ljc1MTFmYWI3ZTY4IDEwMDY0NAotLS0gYS9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxfZnVuY3MuYwor KysgYi9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxfZnVuY3MuYwpAQCAtMjUzLDYgKzI1Myw4IEBAIHBs cGdzcWxfc3RtdF90eXBlbmFtZShQTHBnU1FMX3N0bXQgKnN0bXQpCiAJCQlyZXR1cm4gXygiRk9S IG92ZXIgY3Vyc29yIik7CiAJCWNhc2UgUExQR1NRTF9TVE1UX0ZPUkVBQ0hfQToKIAkJCXJldHVy biBfKCJGT1JFQUNIIG92ZXIgYXJyYXkiKTsKKwkJY2FzZSBQTFBHU1FMX1NUTVRfRk9SRUFDSF9K U09OX0E6CisJCQlyZXR1cm4gXygiRk9SRUFDSCBvdmVyIGpzb24gYXJyYXkiKTsKIAkJY2FzZSBQ TFBHU1FMX1NUTVRfRVhJVDoKIAkJCXJldHVybiAoKFBMcGdTUUxfc3RtdF9leGl0ICopIHN0bXQp LT5pc19leGl0ID8gIkVYSVQiIDogIkNPTlRJTlVFIjsKIAkJY2FzZSBQTFBHU1FMX1NUTVRfUkVU VVJOOgpAQCAtNDY3LDYgKzQ2OSwxNCBAQCBwbHBnc3FsX3N0YXRlbWVudF90cmVlX3dhbGtlcl9p bXBsKFBMcGdTUUxfc3RtdCAqc3RtdCwKIAkJCXsKIAkJCQlQTHBnU1FMX3N0bXRfZm9yZWFjaF9h ICpmc3RtdCA9IChQTHBnU1FMX3N0bXRfZm9yZWFjaF9hICopIHN0bXQ7CiAKKwkJCQlFX1dBTEso ZnN0bXQtPmV4cHIpOworCQkJCVNfTElTVF9XQUxLKGZzdG10LT5ib2R5KTsKKwkJCQlicmVhazsK KwkJCX0KKwkJY2FzZSBQTFBHU1FMX1NUTVRfRk9SRUFDSF9KU09OX0E6CisJCQl7CisJCQkJUExw Z1NRTF9zdG10X2ZvcmVhY2hfanNvbl9hICpmc3RtdCA9IChQTHBnU1FMX3N0bXRfZm9yZWFjaF9q c29uX2EgKikgc3RtdDsKKwogCQkJCUVfV0FMSyhmc3RtdC0+ZXhwcik7CiAJCQkJU19MSVNUX1dB TEsoZnN0bXQtPmJvZHkpOwogCQkJCWJyZWFrOwpAQCAtNzk1LDYgKzgwNSw3IEBAIHN0YXRpYyB2 b2lkIGR1bXBfZm9yaShQTHBnU1FMX3N0bXRfZm9yaSAqc3RtdCk7CiBzdGF0aWMgdm9pZCBkdW1w X2ZvcnMoUExwZ1NRTF9zdG10X2ZvcnMgKnN0bXQpOwogc3RhdGljIHZvaWQgZHVtcF9mb3JjKFBM cGdTUUxfc3RtdF9mb3JjICpzdG10KTsKIHN0YXRpYyB2b2lkIGR1bXBfZm9yZWFjaF9hKFBMcGdT UUxfc3RtdF9mb3JlYWNoX2EgKnN0bXQpOworc3RhdGljIHZvaWQgZHVtcF9mb3JlYWNoX2pzb25f YShQTHBnU1FMX3N0bXRfZm9yZWFjaF9qc29uX2EgKnN0bXQpOwogc3RhdGljIHZvaWQgZHVtcF9l eGl0KFBMcGdTUUxfc3RtdF9leGl0ICpzdG10KTsKIHN0YXRpYyB2b2lkIGR1bXBfcmV0dXJuKFBM cGdTUUxfc3RtdF9yZXR1cm4gKnN0bXQpOwogc3RhdGljIHZvaWQgZHVtcF9yZXR1cm5fbmV4dChQ THBnU1FMX3N0bXRfcmV0dXJuX25leHQgKnN0bXQpOwpAQCAtODYxLDYgKzg3Miw5IEBAIGR1bXBf c3RtdChQTHBnU1FMX3N0bXQgKnN0bXQpCiAJCWNhc2UgUExQR1NRTF9TVE1UX0ZPUkVBQ0hfQToK IAkJCWR1bXBfZm9yZWFjaF9hKChQTHBnU1FMX3N0bXRfZm9yZWFjaF9hICopIHN0bXQpOwogCQkJ YnJlYWs7CisJCWNhc2UgUExQR1NRTF9TVE1UX0ZPUkVBQ0hfSlNPTl9BOgorCQkJZHVtcF9mb3Jl YWNoX2pzb25fYSgoUExwZ1NRTF9zdG10X2ZvcmVhY2hfanNvbl9hICopIHN0bXQpOworCQkJYnJl YWs7CiAJCWNhc2UgUExQR1NRTF9TVE1UX0VYSVQ6CiAJCQlkdW1wX2V4aXQoKFBMcGdTUUxfc3Rt dF9leGl0ICopIHN0bXQpOwogCQkJYnJlYWs7CkBAIC0xMTU3LDYgKzExNzEsMjEgQEAgZHVtcF9m b3JlYWNoX2EoUExwZ1NRTF9zdG10X2ZvcmVhY2hfYSAqc3RtdCkKIAlwcmludGYoIiAgICBFTkRG T1JFQUNIQSIpOwogfQogCitzdGF0aWMgdm9pZAorZHVtcF9mb3JlYWNoX2pzb25fYShQTHBnU1FM X3N0bXRfZm9yZWFjaF9qc29uX2EgKnN0bXQpCit7CisJZHVtcF9pbmQoKTsKKwlwcmludGYoIkZP UkVBQ0hBIHZhciAlZCAiLCBzdG10LT52YXJubyk7CisJcHJpbnRmKCJJTiBKU09OIEFSUkFZICIp OworCWR1bXBfZXhwcihzdG10LT5leHByKTsKKwlwcmludGYoIlxuIik7CisKKwlkdW1wX3N0bXRz KHN0bXQtPmJvZHkpOworCisJZHVtcF9pbmQoKTsKKwlwcmludGYoIiAgICBFTkRGT1JFQUNIQSIp OworfQorCiBzdGF0aWMgdm9pZAogZHVtcF9vcGVuKFBMcGdTUUxfc3RtdF9vcGVuICpzdG10KQog ewpkaWZmIC0tZ2l0IGEvc3JjL3BsL3BscGdzcWwvc3JjL3BsX2dyYW0ueSBiL3NyYy9wbC9wbHBn c3FsL3NyYy9wbF9ncmFtLnkKaW5kZXggNTAwOWU1OWE3OGYuLjIzYjQ2NWIxMGQ1IDEwMDY0NAot LS0gYS9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxfZ3JhbS55CisrKyBiL3NyYy9wbC9wbHBnc3FsL3Ny Yy9wbF9ncmFtLnkKQEAgLTE3OCw2ICsxNzgsNyBAQCBzdGF0aWMJdm9pZAkJCWNoZWNrX3JhaXNl X3BhcmFtZXRlcnMoUExwZ1NRTF9zdG10X3JhaXNlICpzdG10KTsKIAlQTHBnU1FMX2RpYWdfaXRl bSAqZGlhZ2l0ZW07CiAJUExwZ1NRTF9zdG10X2ZldGNoICpmZXRjaDsKIAlQTHBnU1FMX2Nhc2Vf d2hlbiAqY2FzZXdoZW47CisJUExwZ1NRTF9zdG10X2ZvcmVhY2ggKmZvcmVhY2g7CiB9CiAKICV0 eXBlIDxkZWNsaGRyPiBkZWNsX3NlY3QKQEAgLTIyMCw2ICsyMjEsNyBAQCBzdGF0aWMJdm9pZAkJ CWNoZWNrX3JhaXNlX3BhcmFtZXRlcnMoUExwZ1NRTF9zdG10X3JhaXNlICpzdG10KTsKIAogJXR5 cGUgPGNhc2V3aGVuPgljYXNlX3doZW4KICV0eXBlIDxsaXN0PgljYXNlX3doZW5fbGlzdCBvcHRf Y2FzZV9lbHNlCisldHlwZSA8Zm9yZWFjaD4JZm9yZWFjaF90eXBlCiAKICV0eXBlIDxib29sZWFu PglnZXRkaWFnX2FyZWFfb3B0CiAldHlwZSA8bGlzdD4JZ2V0ZGlhZ19saXN0CkBAIC0zNDEsNiAr MzQzLDcgQEAgc3RhdGljCXZvaWQJCQljaGVja19yYWlzZV9wYXJhbWV0ZXJzKFBMcGdTUUxfc3Rt dF9yYWlzZSAqc3RtdCk7CiAldG9rZW4gPGtleXdvcmQ+CUtfUFJJTlRfU1RSSUNUX1BBUkFNUwog JXRva2VuIDxrZXl3b3JkPglLX1BSSU9SCiAldG9rZW4gPGtleXdvcmQ+CUtfUVVFUlkKKyV0b2tl biA8a2V5d29yZD4JS19KU09OCiAldG9rZW4gPGtleXdvcmQ+CUtfUkFJU0UKICV0b2tlbiA8a2V5 d29yZD4JS19SRUxBVElWRQogJXRva2VuIDxrZXl3b3JkPglLX1JFVFVSTgpAQCAtMTY3MSwxNiAr MTY3NCwyOSBAQCBmb3JfdmFyaWFibGUJOiBUX0RBVFVNCiAJCQkJCX0KIAkJCQk7CiAKLXN0bXRf Zm9yZWFjaF9hCTogb3B0X2xvb3BfbGFiZWwgS19GT1JFQUNIIGZvcl92YXJpYWJsZSBmb3JlYWNo X3NsaWNlIEtfSU4gS19BUlJBWSBleHByX3VudGlsX2xvb3AgbG9vcF9ib2R5CitzdG10X2ZvcmVh Y2hfYQk6IG9wdF9sb29wX2xhYmVsIEtfRk9SRUFDSCBmb3JfdmFyaWFibGUgZm9yZWFjaF9zbGlj ZSBLX0lOIGZvcmVhY2hfdHlwZSBleHByX3VudGlsX2xvb3AgbG9vcF9ib2R5CiAJCQkJCXsKLQkJ CQkJCVBMcGdTUUxfc3RtdF9mb3JlYWNoX2EgKm5ldzsKKwkJCQkJCVBMcGdTUUxfc3RtdF9mb3Jl YWNoICpuZXc7CiAKLQkJCQkJCW5ldyA9IHBhbGxvYzBfb2JqZWN0KFBMcGdTUUxfc3RtdF9mb3Jl YWNoX2EpOwotCQkJCQkJbmV3LT5jbWRfdHlwZSA9IFBMUEdTUUxfU1RNVF9GT1JFQUNIX0E7CisJ CQkJCQluZXcgPSAkNjsKIAkJCQkJCW5ldy0+bGluZW5vID0gcGxwZ3NxbF9sb2NhdGlvbl90b19s aW5lbm8oQDIsIHl5c2Nhbm5lcik7CiAJCQkJCQluZXctPnN0bXRpZCA9ICsrcGxwZ3NxbF9jdXJy X2NvbXBpbGUtPm5zdGF0ZW1lbnRzOwogCQkJCQkJbmV3LT5sYWJlbCA9ICQxOwotCQkJCQkJbmV3 LT5zbGljZSA9ICQ0OworCisJCQkJCQlpZiAoJDQgPiAwKQorCQkJCQkJeworCQkJCQkJCS8qIHNs aWNpbmcgaXMgc3VwcG9ydGVkIG9ubHkgYnkgRk9SRUFDSCBJTiBBUlJBWSAqLworCQkJCQkJCWlm IChuZXctPmNtZF90eXBlID09IFBMUEdTUUxfU1RNVF9GT1JFQUNIX0EpCisJCQkJCQkJeworCQkJ CQkJCQkoKFBMcGdTUUxfc3RtdF9mb3JlYWNoX2EgKikgbmV3KS0+c2xpY2UgPSAkNDsKKwkJCQkJ CQl9CisJCQkJCQkJZWxzZQorCQkJCQkJCQllcmVwb3J0KEVSUk9SLAorCQkJCQkJCQkJCShlcnJj b2RlKEVSUkNPREVfU1lOVEFYX0VSUk9SKSwKKwkJCQkJCQkJCQkgZXJybXNnKCJub3QgemVybyBz bGljZSBpcyBhbGxvd2VkIG9ubHkgZm9yIGFycmF5cyIpLAorCQkJCQkJCQkJCQkJIHBhcnNlcl9l cnJwb3NpdGlvbihANCkpKTsKKwkJCQkJCX0KKwogCQkJCQkJbmV3LT5leHByID0gJDc7CiAJCQkJ CQluZXctPmJvZHkgPSAkOC5zdG10czsKIApAQCAtMTcxOSw2ICsxNzM1LDE5IEBAIGZvcmVhY2hf c2xpY2UJOgogCQkJCQl9CiAJCQkJOwogCitmb3JlYWNoX3R5cGUJOgorCQkJCSAgS19BUlJBWQor CQkJCQl7CisJCQkJCQkkJCA9IChQTHBnU1FMX3N0bXRfZm9yZWFjaCAqKSBwYWxsb2MwX29iamVj dChQTHBnU1FMX3N0bXRfZm9yZWFjaF9hKTsKKwkJCQkJCSQkLT5jbWRfdHlwZSA9IFBMUEdTUUxf U1RNVF9GT1JFQUNIX0E7CisJCQkJCX0KKwkJCQl8IEtfSlNPTiBLX0FSUkFZCisJCQkJCXsKKwkJ CQkJCSQkID0gKFBMcGdTUUxfc3RtdF9mb3JlYWNoICopIHBhbGxvYzBfb2JqZWN0KFBMcGdTUUxf c3RtdF9mb3JlYWNoX2pzb25fYSk7CisJCQkJCQkkJC0+Y21kX3R5cGUgPSBQTFBHU1FMX1NUTVRf Rk9SRUFDSF9KU09OX0E7CisJCQkJCX0KKwkJCQk7CisKIHN0bXRfZXhpdAkJOiBleGl0X3R5cGUg b3B0X2xhYmVsIG9wdF9leGl0Y29uZAogCQkJCQl7CiAJCQkJCQlQTHBnU1FMX3N0bXRfZXhpdCAq bmV3OwpkaWZmIC0tZ2l0IGEvc3JjL3BsL3BscGdzcWwvc3JjL3BsX3VucmVzZXJ2ZWRfa3dsaXN0 LmggYi9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxfdW5yZXNlcnZlZF9rd2xpc3QuaAppbmRleCA2Mzc5 ZTg2YzhjYi4uZDc1ODhkM2I0YWQgMTAwNjQ0Ci0tLSBhL3NyYy9wbC9wbHBnc3FsL3NyYy9wbF91 bnJlc2VydmVkX2t3bGlzdC5oCisrKyBiL3NyYy9wbC9wbHBnc3FsL3NyYy9wbF91bnJlc2VydmVk X2t3bGlzdC5oCkBAIC02OSw2ICs2OSw3IEBAIFBHX0tFWVdPUkQoImltcG9ydCIsIEtfSU1QT1JU KQogUEdfS0VZV09SRCgiaW5mbyIsIEtfSU5GTykKIFBHX0tFWVdPUkQoImluc2VydCIsIEtfSU5T RVJUKQogUEdfS0VZV09SRCgiaXMiLCBLX0lTKQorUEdfS0VZV09SRCgianNvbiIsIEtfSlNPTikK IFBHX0tFWVdPUkQoImxhc3QiLCBLX0xBU1QpCiBQR19LRVlXT1JEKCJsb2ciLCBLX0xPRykKIFBH X0tFWVdPUkQoIm1lcmdlIiwgS19NRVJHRSkKZGlmZiAtLWdpdCBhL3NyYy9wbC9wbHBnc3FsL3Ny Yy9wbHBnc3FsLmggYi9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxwZ3NxbC5oCmluZGV4IGFkZGIxNGE5 OTU5Li5jNTdiMWRhOWI5NSAxMDA2NDQKLS0tIGEvc3JjL3BsL3BscGdzcWwvc3JjL3BscGdzcWwu aAorKysgYi9zcmMvcGwvcGxwZ3NxbC9zcmMvcGxwZ3NxbC5oCkBAIC0xMTIsNiArMTEyLDcgQEAg dHlwZWRlZiBlbnVtIFBMcGdTUUxfc3RtdF90eXBlCiAJUExQR1NRTF9TVE1UX0ZPUlMsCiAJUExQ R1NRTF9TVE1UX0ZPUkMsCiAJUExQR1NRTF9TVE1UX0ZPUkVBQ0hfQSwKKwlQTFBHU1FMX1NUTVRf Rk9SRUFDSF9KU09OX0EsCiAJUExQR1NRTF9TVE1UX0VYSVQsCiAJUExQR1NRTF9TVE1UX1JFVFVS TiwKIAlQTFBHU1FMX1NUTVRfUkVUVVJOX05FWFQsCkBAIC0yOTksNiArMzAwLDcgQEAgdHlwZWRl ZiBzdHJ1Y3QgUExwZ1NRTF9kYXR1bQogewogCVBMcGdTUUxfZGF0dW1fdHlwZSBkdHlwZTsKIAlp bnQJCQlkbm87CisJY2hhcgkgICAqcmVmbmFtZTsKIH0gUExwZ1NRTF9kYXR1bTsKIAogLyoKQEAg LTQ0NCw5ICs0NDYsOSBAQCB0eXBlZGVmIHN0cnVjdCBQTHBnU1FMX3JlY2ZpZWxkCiB7CiAJUExw Z1NRTF9kYXR1bV90eXBlIGR0eXBlOwogCWludAkJCWRubzsKKwljaGFyCSAgICpmaWVsZG5hbWU7 CQkvKiBuYW1lIG9mIGZpZWxkICovCiAJLyogZW5kIG9mIFBMcGdTUUxfZGF0dW0gZmllbGRzICov CiAKLQljaGFyCSAgICpmaWVsZG5hbWU7CQkvKiBuYW1lIG9mIGZpZWxkICovCiAJaW50CQkJcmVj cGFyZW50bm87CS8qIGRubyBvZiBwYXJlbnQgcmVjb3JkICovCiAJaW50CQkJbmV4dGZpZWxkOwkJ LyogZG5vIG9mIG5leHQgY2hpbGQsIG9yIC0xIGlmIG5vbmUgKi8KIAl1aW50NjQJCXJlY3R1cGxl ZGVzY2lkOyAvKiByZWNvcmQncyB0dXBsZWRlc2MgSUQgYXMgb2YgbGFzdCBsb29rdXAgKi8KQEAg LTc2Niw2ICs3NjgsMjAgQEAgdHlwZWRlZiBzdHJ1Y3QgUExwZ1NRTF9zdG10X2R5bmZvcnMKIAlM aXN0CSAgICpwYXJhbXM7CQkJLyogVVNJTkcgZXhwcmVzc2lvbnMgKi8KIH0gUExwZ1NRTF9zdG10 X2R5bmZvcnM7CiAKKy8qCisgKiBGT1JFQUNIIGxvb3AgKGFuY2VzdG9yIElOIEFSUkFZIGFuZCBJ TiBKU09OIEFSUkFZIGxvb3ApCisgKi8KK3R5cGVkZWYgc3RydWN0IFBMcGdTUUxfc3RtdF9mb3Jl YWNoCit7CisJUExwZ1NRTF9zdG10X3R5cGUgY21kX3R5cGU7CisJaW50CQkJbGluZW5vOworCXVu c2lnbmVkIGludCBzdG10aWQ7CisJY2hhcgkgICAqbGFiZWw7CisJaW50CQkJdmFybm87CQkJLyog bG9vcCB0YXJnZXQgdmFyaWFibGUgKi8KKwlQTHBnU1FMX2V4cHIgKmV4cHI7CQkJLyogc2V0IGV4 cHJlc3Npb24gKi8KKwlMaXN0CSAgICpib2R5OwkJCS8qIExpc3Qgb2Ygc3RhdGVtZW50cyAqLwor fSBQTHBnU1FMX3N0bXRfZm9yZWFjaDsKKwogLyoKICAqIEZPUkVBQ0ggaXRlbSBpbiBhcnJheSBs b29wCiAgKi8KQEAgLTc3NiwxMSArNzkyLDI3IEBAIHR5cGVkZWYgc3RydWN0IFBMcGdTUUxfc3Rt dF9mb3JlYWNoX2EKIAl1bnNpZ25lZCBpbnQgc3RtdGlkOwogCWNoYXIJICAgKmxhYmVsOwogCWlu dAkJCXZhcm5vOwkJCS8qIGxvb3AgdGFyZ2V0IHZhcmlhYmxlICovCi0JaW50CQkJc2xpY2U7CQkJ Lyogc2xpY2UgZGltZW5zaW9uLCBvciAwICovCiAJUExwZ1NRTF9leHByICpleHByOwkJCS8qIGFy cmF5IGV4cHJlc3Npb24gKi8KIAlMaXN0CSAgICpib2R5OwkJCS8qIExpc3Qgb2Ygc3RhdGVtZW50 cyAqLworCS8qIGVuZCBvZiBmaWVsZHMgdGhhdCBtdXN0IG1hdGNoIFBMcGdTUUxfc3RtdF9mb3Jl YWNoICovCisJaW50CQkJc2xpY2U7CQkJLyogc2xpY2UgZGltZW5zaW9uLCBvciAwICovCiB9IFBM cGdTUUxfc3RtdF9mb3JlYWNoX2E7CiAKKy8qCisgKiBGT1JFQUNIIGl0ZW0gaW4gYXJyYXkgbG9v cAorICovCit0eXBlZGVmIHN0cnVjdCBQTHBnU1FMX3N0bXRfZm9yZWFjaF9qc29uX2EKK3sKKwlQ THBnU1FMX3N0bXRfdHlwZSBjbWRfdHlwZTsKKwlpbnQJCQlsaW5lbm87CisJdW5zaWduZWQgaW50 IHN0bXRpZDsKKwljaGFyCSAgICpsYWJlbDsKKwlpbnQJCQl2YXJubzsJCQkvKiBsb29wIHRhcmdl dCB2YXJpYWJsZSAqLworCVBMcGdTUUxfZXhwciAqZXhwcjsJCQkvKiBhcnJheSBleHByZXNzaW9u ICovCisJTGlzdAkgICAqYm9keTsJCQkvKiBMaXN0IG9mIHN0YXRlbWVudHMgKi8KKwkvKiBlbmQg b2YgZmllbGRzIHRoYXQgbXVzdCBtYXRjaCBQTHBnU1FMX3N0bXRfZm9yZWFjaCAqLworfSBQTHBn U1FMX3N0bXRfZm9yZWFjaF9qc29uX2E7CisKIC8qCiAgKiBPUEVOIGEgY3VydmFyCiAgKi8KZGlm ZiAtLWdpdCBhL3NyYy9wbC9wbHBnc3FsL3NyYy9zcWwvcGxwZ3NxbF9mb3JlYWNoLnNxbCBiL3Ny Yy9wbC9wbHBnc3FsL3NyYy9zcWwvcGxwZ3NxbF9mb3JlYWNoLnNxbApuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMGRkZThkNmZiYTQKLS0tIC9kZXYvbnVsbAorKysgYi9z cmMvcGwvcGxwZ3NxbC9zcmMvc3FsL3BscGdzcWxfZm9yZWFjaC5zcWwKQEAgLTAsMCArMSwyNTMg QEAKKy0tIGlucHV0IG11c3QgYmUgYSBKU09OIGFycmF5CitkbyAkJAorZGVjbGFyZSB4IG51bWVy aWM7CitiZWdpbgorICBmb3JlYWNoIHggaW4ganNvbiBhcnJheSBOVUxMIC0tIGZhaWwKKyAgbG9v cAorICAgIHJhaXNlIG5vdGljZSAnJScsIHg7CisgIGVuZCBsb29wOworZW5kOworJCQ7CisKK2Rv ICQkCitkZWNsYXJlIHggbnVtZXJpYzsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBqc29uIGFycmF5 ICcxMCcgLS0gZmFpbAorICBsb29wCisgICAgcmFpc2Ugbm90aWNlICclJywgeDsKKyAgZW5kIGxv b3A7CitlbmQ7CiskJDsKKworZG8gJCQKK2RlY2xhcmUgeCBudW1lcmljOworYmVnaW4KKyAgZm9y ZWFjaCB4IGluIGpzb24gYXJyYXkgJ3t9JyAtLSBmYWlsCisgIGxvb3AKKyAgICByYWlzZSBub3Rp Y2UgJyUnLCB4OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworCistLSBudW1lcmljIHRvIG51bWVy aWMKK2RvICQkCitkZWNsYXJlIHggbnVtZXJpYzsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBqc29u IGFycmF5ICdbMTAsMjAsMzAsMy4xNCwgbnVsbF0nCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2Ug JyUnLCB4OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworCistLSBudW1lcmljIHRvIGludCBieSBj YXN0CitkbyAkJAorZGVjbGFyZSB4IGludDsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBqc29uIGFy cmF5ICdbMTAsMjAsMzAsMy4xNCwgbnVsbF0nCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJyUn LCB4OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworCistLSB0ZXN0IG9mIEZPVU5EIHZhcmlhYmxl CitkbyAkJAorZGVjbGFyZSB4IGludDsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBqc29uIGFycmF5 ICdbMTBdJworICBsb29wCisgICAgcmFpc2Ugbm90aWNlICclJywgeDsKKyAgZW5kIGxvb3A7Cisg IHJhaXNlIG5vdGljZSAnRk9VTkQ6ICUnLCBmb3VuZDsKK2VuZDsKKyQkOworCistLSB0ZXN0IG9m IEZPVU5EIHZhcmlhYmxlCitkbyAkJAorZGVjbGFyZSB4IGludDsKK2JlZ2luCisgIGZvcmVhY2gg eCBpbiBqc29uIGFycmF5ICdbXScKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAnJScsIHg7Cisg IGVuZCBsb29wOworICByYWlzZSBub3RpY2UgJ0ZPVU5EOiAlJywgZm91bmQ7CitlbmQ7CiskJDsK KworLS0gY29udmVyc2lvbiAiMy4xNCIgdG8gaW50IHNob3VsZCB0byBmYWlsIGR1ZSBJTyBjYXN0 CitkbyAkJAorZGVjbGFyZSB4IGludDsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBqc29uIGFycmF5 ICdbIjEwIiwyMCwzMCwiMy4xNCJdJworICBsb29wCisgICAgcmFpc2Ugbm90aWNlICclJywgeDsK KyAgZW5kIGxvb3A7CitlbmQ7CiskJDsKKworZG8gJCQKK2RlY2xhcmUgeCBib29sZWFuOworYmVn aW4KKyAgZm9yZWFjaCB4IGluIGpzb24gYXJyYXkgJ1t0cnVlLCBmYWxzZV0nCisgIGxvb3AKKyAg aWYgeCB0aGVuCisgICAgcmFpc2Ugbm90aWNlICd0cnVlJzsKKyAgZWxzZQorICAgIHJhaXNlIG5v dGljZSAnZmFsc2UnOworICBlbmQgaWY7CisgIGVuZCBsb29wOworZW5kOworJCQ7CisKKy0tIGpz b25iIHRvIGpzb25iCitkbyAkJAorZGVjbGFyZSB4IGpzb25iOworYmVnaW4KKyAgZm9yZWFjaCB4 IGluIGpzb24gYXJyYXkgJ1sxMCwyMCwzMCwzLjE0LCBudWxsLCAiSGkiXScKKyAgbG9vcAorICAg IHJhaXNlIG5vdGljZSAnJScsIHg7CisgIGVuZCBsb29wOworZW5kOworJCQ7CisKKy0tIGpzb25i IHRvIGpzb24KK2RvICQkCitkZWNsYXJlIHgganNvbjsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBq c29uIGFycmF5ICdbMTAsMjAsMzAsMy4xNCwgbnVsbCwgIkhpIl0nCisgIGxvb3AKKyAgICByYWlz ZSBub3RpY2UgJyUnLCB4OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworCistLSBpdGVyYXRpb24g b3ZlciBjb21wb3NpdGVzCitkbyAkJAorZGVjbGFyZSB4IGludDsgeSBudW1lcmljOyB6IHZhcmNo YXI7CitiZWdpbgorICBmb3JlYWNoIHgsIHksIHogaW4ganNvbiBhcnJheSAnW3t9LCB7InoiOiJI aSJ9LCB7InkiOiAzLjE0fSwgeyJ6IjoiSGkiLCAieCI6MTAsICJ5IjozLjE0fV0nCisgIGxvb3AK KyAgICByYWlzZSBub3RpY2UgJ3g6ICUsIHk6ICUsIHo6ICUnLCB4LCB5LCB6OworICBlbmQgbG9v cDsKK2VuZDsKKyQkOworCitjcmVhdGUgdHlwZSB0MyBhcyAoeCBpbnQsIHkgbnVtZXJpYywgeiB2 YXJjaGFyKTsKKworZG8gJCQKK2RlY2xhcmUgYyB0MzsKK2JlZ2luCisgIGZvcmVhY2ggYyBpbiBq c29uIGFycmF5ICdbe30sIHsieiI6IkhpIn0sIHsieSI6IDMuMTR9LCB7InoiOiJIaSIsICJ4Ijox MCwgInkiOjMuMTR9XScKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAneDogJSwgeTogJSwgejog JScsIGMueCwgYy55LCBjLno7CisgIGVuZCBsb29wOworZW5kOworJCQ7CisKK2RvICQkCitkZWNs YXJlIGMgdDM7CitiZWdpbgorICBmb3JlYWNoIGMueCwgYy55LCBjLnogaW4ganNvbiBhcnJheSAn W3t9LCB7InoiOiJIaSJ9LCB7InkiOiAzLjE0fSwgeyJ6IjoiSGkiLCAieCI6MTAsICJ5IjozLjE0 fV0nCisgIGxvb3AKKyAgICByYWlzZSBub3RpY2UgJ3g6ICUsIHk6ICUsIHo6ICUnLCBjLngsIGMu eSwgYy56OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworCitkcm9wIHR5cGUgdDM7CisKKy0tIHRh cmdldCBjYW4gYmUgYSBhcnJheQorZG8gJCQKK2RlY2xhcmUgeCBpbnRbXTsKK2JlZ2luCisgIGZv cmVhY2ggeCBpbiBqc29uIGFycmF5ICdbWzEsMiwzXSxbNCw1LDZdXScKKyAgbG9vcAorICAgIHJh aXNlIG5vdGljZSAnJSAlICUnLCB4WzFdLCB4WzJdLCB4WzNdOworICBlbmQgbG9vcDsKK2VuZDsK KyQkOworCitkbyAkJAorZGVjbGFyZSB4IHZhcmNoYXJbXTsKK2JlZ2luCisgIGZvcmVhY2ggeCBp biBqc29uIGFycmF5ICdbWyJIaSIsIkhlbGxvIl0sWyJIZWxsbyIsIkhpIl1dJworICBsb29wCisg ICAgcmFpc2Ugbm90aWNlICclICUnLCB4WzFdLCB4WzJdOworICBlbmQgbG9vcDsKK2VuZDsKKyQk OworCitkbyAkJAorZGVjbGFyZSB4IHZhcmNoYXJbXTsKK2JlZ2luCisgIGZvcmVhY2ggeCBpbiBq c29uIGFycmF5ICdbWyJIaSIsIkhlbGxvIl0sWyJIZWxsbyIsIkhpIl1dJworICBsb29wCisgICAg cmFpc2Ugbm90aWNlICclICUnLCB4WzFdLCB4WzJdOworICBlbmQgbG9vcDsKK2VuZDsKKyQkOwor CisKK2RvICQkCitkZWNsYXJlIHggaW50W107IHkgdmFyY2hhcjsKK2JlZ2luCisgIGZvcmVhY2gg eCwgeSBpbiBqc29uIGFycmF5ICdbeyJ4IjpbMSwyLDNdLCAieSI6IkhpIn0sIHsieCI6WzQsNSw2 XSwgInkiOiJIaSJ9XScKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAnJSAlICUsIHk6ICUnLCB4 WzFdLCB4WzJdLCB4WzNdLCB5OworICBlbmQgbG9vcDsKK2VuZDsKKyQkOworCitjcmVhdGUgdHlw ZSB0MiBhcyAoeCBpbnRbXSwgeSB2YXJjaGFyKTsKKworZG8gJCQKK2RlY2xhcmUgYyB0MjsKK2Jl Z2luCisgIGZvcmVhY2ggYyBpbiBqc29uIGFycmF5ICdbeyJ4IjpbMSwyLDNdLCAieSI6IkhpIn0s IHsieCI6WzQsNSw2XSwgInkiOiJIaSJ9XScKKyAgbG9vcAorICAgIHJhaXNlIG5vdGljZSAnJSAl ICUsIHk6ICUnLCBjLnhbMV0sIGMueFsyXSwgYy54WzNdLCBjLnk7CisgIGVuZCBsb29wOworZW5k OworJCQ7CisKK2Ryb3AgdHlwZSB0MjsKKworLS0gRVhJVCBhbmQgQ09OVElOVUUgY2FuIGJlIHRy aWdnZXJlZCBieSBMT09QX1JDX1BST0NFU1NJTkcKK2RvICQkCitkZWNsYXJlIHggaW50OworYmVn aW4KKyAgZm9yZWFjaCB4IGluIGpzb24gYXJyYXkgJ1sxLDIsMyw0LDVdJworICBsb29wCisgICAg ZXhpdCB3aGVuIHggPSAzOworICAgIHJhaXNlIG5vdGljZSAnJScsIHg7CisgIGVuZCBsb29wOwor ZW5kOworJCQ7CisKK2RvICQkCitkZWNsYXJlIHggaW50OworYmVnaW4KKyAgZm9yZWFjaCB4IGlu IGpzb24gYXJyYXkgJ1sxLDIsMyw0LDVdJworICBsb29wCisgICAgY29udGludWUgd2hlbiB4ICUg MiA9IDA7CisgICAgcmFpc2Ugbm90aWNlICclJywgeDsKKyAgZW5kIGxvb3A7CitlbmQ7CiskJDsK KworLS0gVmFyaWFibGUgaW5zdGVhZCBvZiBzdHJpbmcKK0RPICQkCitkZWNsYXJlCisgIHggaW50 OworICBhcnIganNvbmI7CitiZWdpbgorICBzZWxlY3QganNvbmJfYWdnKGkpIGludG8gYXJyCisg ICAgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMSwzKSBnKGkpOworCisgIGZvcmVhY2ggeCBpbiBqc29u IGFycmF5IGFycgorICBsb29wCisgICAgcmFpc2Ugbm90aWNlICclJywgeDsKKyAgZW5kIGxvb3A7 CitlbmQ7CiskJDsKLS0gCjIuNTMuMAoK --000000000000cb6e35064c374d51--