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.94.2) (envelope-from ) id 1qSqYf-007WW2-90 for pgsql-hackers@arkaria.postgresql.org; Mon, 07 Aug 2023 03:05:25 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1qSqXd-0069dd-SL for pgsql-hackers@arkaria.postgresql.org; Mon, 07 Aug 2023 03:04:22 +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.94.2) (envelope-from ) id 1qSqXd-0069aw-AP for pgsql-hackers@lists.postgresql.org; Mon, 07 Aug 2023 03:04:21 +0000 Received: from mail-oa1-x29.google.com ([2001:4860:4864:20::29]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.94.2) (envelope-from ) id 1qSqXZ-000wjw-K7 for pgsql-hackers@postgresql.org; Mon, 07 Aug 2023 03:04:20 +0000 Received: by mail-oa1-x29.google.com with SMTP id 586e51a60fabf-1ba5cda3530so3169631fac.3 for ; Sun, 06 Aug 2023 20:04:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20221208; t=1691377457; x=1691982257; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=uFndg4d75pnBBregHqOPGOYzoAy8O6A3zQ6hD9qGNdU=; b=JEGNTU7S9c2SEbfKkH4PE76uY7nT/dGH30f2xNaPVljDGLFo0oi3RoilW98CIQihnt hUCvV6lyY9eqDR9Z23QMOFEMhHk/TqP4GBwAQP5TUqs9XvxRzBXwXU8nAwc+snzYWRpa XqtvrUXrWmC/2CaKFTyKlFlIIHJAxw+LWVv7Km377rZXDGpzbulbJhUbEgxD02yjeGj5 LSMEzrZ8sZvZ/U749ohmk9/5Im8wOvJ0BStXicKJW46M9FQwov6RH2aqAsz31XH2X+2z ZMYNMGbJosYwaW/vJIgidAbuPoTb2HBZmSQbQsJwGM2CavT/FIt4S4vYpJxVHFWcXmKy mQvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1691377457; x=1691982257; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=uFndg4d75pnBBregHqOPGOYzoAy8O6A3zQ6hD9qGNdU=; b=TgirXgDmtEwnufWa17lgAiFZjQB7MHQJEljRPwz2nHfgIzHSWINbyj753sm7j7qOm/ 6csvlUJkJUL5ulRWdhQYxgdBDJkjOw8BI5+DJXr3JggmFUgSJwtrssW5wOo4/MzpjoxX ALQiUx3eEH8sSOnQpqoXvJB6v5mHweNc7bF/OuVztyyoSPL90OUexhvsM27/0Zxbgtc+ fj3r/qEa9rac6SJ0CYCAPp5rExsVs0872/d4FMaKeMd+JUlr3XaxVcrj076mGHd017OU UY2DUF5Br0isPGr1bpViWy+d7pMPju00ay08CaDharsXj8JdcOdoUdcRqfEpEZ+qu8V+ nwRw== X-Gm-Message-State: AOJu0YyF2lrZvj2g3GrnRlHS7HFUln/nthz9nb5KX0ESBg0VdE+hm08C 3mD1EJsO8OAzZjoC1tUWkrB9QDGPaSktJ6gH4oGLUKYwq6Y= X-Google-Smtp-Source: AGHT+IGy9SL2C9bt1DzKPUv9HefylseBSLmopmuaBV83JvseQ1JZZ54CgBULmX+qADkGtqIbiGjYiIhlIYTPceoPjUI= X-Received: by 2002:a05:6870:6486:b0:1bb:8867:f7ed with SMTP id cz6-20020a056870648600b001bb8867f7edmr10381237oab.33.1691377456867; Sun, 06 Aug 2023 20:04:16 -0700 (PDT) MIME-Version: 1.0 References: <3507485.1691090027@sss.pgh.pa.us> In-Reply-To: From: Andy Fan Date: Mon, 7 Aug 2023 11:04:05 +0800 Message-ID: Subject: Re: Extract numeric filed in JSONB more effectively To: Tom Lane Cc: Pavel Stehule , jian he , pgsql-hackers Content-Type: multipart/mixed; boundary="0000000000007f7cb106024c8038" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000007f7cb106024c8038 Content-Type: multipart/alternative; boundary="0000000000007f7cb006024c8036" --0000000000007f7cb006024c8036 Content-Type: text/plain; charset="UTF-8" Hi: > For all the people who are interested in this topic, I will post a > planner support function soon, you can check that then. > > The updated patch doesn't need users to change their codes and can get better performance. Thanks for all the feedback which makes things better. To verify there is no unexpected stuff happening, here is the performance comparison between master and patched. create table tb(a jsonb); insert into tb select '{"a": true, "b": 23.3333}' from generate_series(1, 100000)i; Master: select 1 from tb where (a->'b')::numeric = 1; Time: 31.020 ms select 1 from tb where not (a->'a')::boolean; Time: 25.888 ms select 1 from tb where (a->'b')::int2 = 1; Time: 30.138 ms select 1 from tb where (a->'b')::int4 = 1; Time: 32.384 ms select 1 from tb where (a->'b')::int8 = 1;\ Time: 29.922 ms select 1 from tb where (a->'b')::float4 = 1; Time: 54.139 ms select 1 from tb where (a->'b')::float8 = 1; Time: 66.933 ms Patched: select 1 from tb where (a->'b')::numeric = 1; Time: 15.203 ms select 1 from tb where not (a->'a')::boolean; Time: 12.894 ms select 1 from tb where (a->'b')::int2 = 1; Time: 16.847 ms select 1 from tb where (a->'b')::int4 = 1; Time: 17.105 ms select 1 from tb where (a->'b')::int8 = 1; Time: 16.720 ms select 1 from tb where (a->'b')::float4 = 1; Time: 33.409 ms select 1 from tb where (a->'b')::float8 = 1; Time: 34.660 ms -- Best Regards Andy Fan --0000000000007f7cb006024c8036 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Hi:
=C2=A0
=
For all the people who are interested in= this topic, I will post a=C2=A0
planner support function soon,= =C2=A0 you can check that then.


The updated patch doesn't need users to change their c= odes and can get
better performance. Thanks for all the feedback which m= akes things better.

To verify there is no unexpected stuff happening= , here is the performance
comparison between master and patched.

= create table tb(a jsonb);
insert into tb select '{"a": tru= e, "b": 23.3333}' from generate_series(1,
100000)i;
Master:
select 1 from tb where =C2=A0(a->'b')::numeric =3D 1= ;
Time: 31.020 ms

select 1 from tb where not (a->'a'):= :boolean;
Time: 25.888 ms

select 1 from tb where =C2=A0(a->= 9;b')::int2 =3D 1;
Time: 30.138 ms

select 1 from tb where =C2= =A0(a->'b')::int4 =3D 1;
Time: 32.384 ms

select 1 from= tb where =C2=A0(a->'b')::int8 =3D 1;\
Time: 29.922 ms
select 1 from tb where =C2=A0(a->'b')::float4 =3D 1;
Time: 5= 4.139 ms

select 1 from tb where =C2=A0(a->'b')::float8 = =3D 1;
Time: 66.933 ms

Patched:

select 1 from tb where =C2= =A0(a->'b')::numeric =3D 1;
Time: 15.203 ms

select 1 f= rom tb where not (a->'a')::boolean;
Time: 12.894 ms

se= lect 1 from tb where =C2=A0(a->'b')::int2 =3D 1;
Time: 16.847= ms

select 1 from tb where =C2=A0(a->'b')::int4 =3D 1;Time: 17.105 ms

select 1 from tb where =C2=A0(a->'b')::i= nt8 =3D 1;
Time: 16.720 ms

select 1 from tb where =C2=A0(a->&#= 39;b')::float4 =3D 1;
Time: 33.409 ms

select 1 from tb where = =C2=A0(a->'b')::float8 =3D 1;
Time: 34.660 ms

=
--
Best Regards
Andy Fan
=
--0000000000007f7cb006024c8036-- --0000000000007f7cb106024c8038 Content-Type: application/octet-stream; name="v3-0001-Optimize-extracting-a-given-data-type-from-jsonb.patch" Content-Disposition: attachment; filename="v3-0001-Optimize-extracting-a-given-data-type-from-jsonb.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_ll0afjcm0 RnJvbSBkY2Q4ZDc3NmZlYWY4YzI5NWI1MWZhMjU0NDg0NmM2MTczZWU2NjRjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmR5IEZhbiA8emhpaHVpLmZhbjEyMTNAZ21haWwuY29tPgpE YXRlOiBNb24sIDcgQXVnIDIwMjMgMTA6NDQ6MjMgKzA4MDAKU3ViamVjdDogW1BBVENIIHYzXSBP cHRpbWl6ZSBleHRyYWN0aW5nIGEgZ2l2ZW4gZGF0YSB0eXBlIGZyb20ganNvbmIuCgpQcmV2aW91 c2x5IGFmdGVyIHdlIGdldCBhIEpzb25iVmFsdWUsIHdlIG5lZWQgdG8gY29udmVydCBpdCB0bwpK c29uYiBmaXJzdCB0aGVuIGNhc3QgdGhlIEpzb25iIHRvIHRoZSBnaXZlbiB0eXBlLiBJbiB0aGlz IHBhdGNoLAp3ZSBjb3ZlcnQgdGhlIEpzb25iVmFsdWUgdG8gdGhlIGRlc2lyZWQgdHlwZSBkaXJl Y3RseS4KLS0tCiBzcmMvYmFja2VuZC91dGlscy9hZHQvanNvbmIuYyAgICAgICAgICAgIHwgMTM0 ICsrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvaW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNpb24u aCAgICAgICAgIHwgICAyICstCiBzcmMvaW5jbHVkZS9jYXRhbG9nL3BnX3Byb2MuZGF0ICAgICAg ICAgIHwgIDIyICsrLS0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvanNvbmIub3V0ICAgICAg fCAxMzQgKysrKysrKysrKysrLS0tLS0tLS0tLS0KIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv b3ByX3Nhbml0eS5vdXQgfCAgIDcgKy0KIHNyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iLnNxbCAg ICAgICAgICAgfCAgMzYgKysrLS0tCiA2IGZpbGVzIGNoYW5nZWQsIDI0NCBpbnNlcnRpb25zKCsp LCA5MSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNv bmIuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9qc29uYi5jCmluZGV4IDk3ODE4NTJiMGNiLi5h NTc3YjJhMjc5ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25iLmMKKysr IGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25iLmMKQEAgLTE3LDExICsxNywxNCBAQAogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfcHJvYy5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgog I2luY2x1ZGUgImZ1bmNhcGkuaCIKKyNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIKKyNpbmNs dWRlICJub2Rlcy9zdXBwb3J0bm9kZXMuaCIKICNpbmNsdWRlICJsaWJwcS9wcWZvcm1hdC5oIgog I2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5j bHVkZSAidXRpbHMvZGF0ZS5oIgogI2luY2x1ZGUgInV0aWxzL2RhdGV0aW1lLmgiCisjaW5jbHVk ZSAidXRpbHMvZm1ncm9pZHMuaCIKICNpbmNsdWRlICJ1dGlscy9qc29uLmgiCiAjaW5jbHVkZSAi dXRpbHMvanNvbmIuaCIKICNpbmNsdWRlICJ1dGlscy9qc29uZnVuY3MuaCIKQEAgLTIwMzgsNiAr MjA0MSwxMzcgQEAgY2Fubm90Q2FzdEpzb25iVmFsdWUoZW51bSBqYnZUeXBlIHR5cGUsIGNvbnN0 IGNoYXIgKnNxbHR5cGUpCiAJZWxvZyhFUlJPUiwgInVua25vd24ganNvbmIgdHlwZTogJWQiLCAo aW50KSB0eXBlKTsKIH0KIAorc3RhdGljIGJvb2wKK2pzb25iX2Nhc3RfaXNfb3B0aW1pemVkKE9p ZCB0YXJnZXRfdHlwZSkKK3sKKwlzd2l0Y2godGFyZ2V0X3R5cGUpCisJeworCQljYXNlIE5VTUVS SUNPSUQ6CisJCWNhc2UgQk9PTE9JRDoKKwkJY2FzZSBJTlQyT0lEOgorCQljYXNlIElOVDRPSUQ6 CisJCWNhc2UgSU5UOE9JRDoKKwkJY2FzZSBGTE9BVDRPSUQ6CisJCWNhc2UgRkxPQVQ4T0lEOgor CQkJcmV0dXJuIHRydWU7CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gZmFsc2U7CisJfQorfQorCitE YXR1bQoranNvbmJfY2FzdF9zdXBwb3J0KFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJTm9kZQkgICAq cmF3cmVxID0gKE5vZGUgKikgUEdfR0VUQVJHX1BPSU5URVIoMCk7CisKKwlpZiAoSXNBKHJhd3Jl cSwgU3VwcG9ydFJlcXVlc3RTaW1wbGlmeSkpCisJeworCQlTdXBwb3J0UmVxdWVzdFNpbXBsaWZ5 ICpyZXEgPSAoU3VwcG9ydFJlcXVlc3RTaW1wbGlmeSAqKSByYXdyZXE7CisJCUZ1bmNFeHByCSpm ZXhwciA9IHBhbGxvYyhzaXplb2YoRnVuY0V4cHIpKTsKKwkJT3BFeHByCQkqb3BleHByOworCisJ CW1lbWNweShmZXhwciwgcmVxLT5mY2FsbCwgc2l6ZW9mKEZ1bmNFeHByKSk7CisKKwkJb3BleHBy ID0gKE9wRXhwciAqKSBsaW5pdGlhbChmZXhwci0+YXJncyk7CisKKwkJLyoKKwkJICogU2ltcGxp ZnkgY2FzdChqc29uYl9vYmplY3RfZmlsZWQoanNvbmIsIGZpbGVkTmFtZSkgYXMgdHlwZSkKKwkJ ICogdG8ganNvbmJfb2JqZWN0X2ZpZWxkX3R5cGUoanNvbmIsIGZpbGVkTmFtZSwgdGFyZ2V0VHlw ZU9pZCk7CisJCSAqLworCQlpZiAoSXNBKG9wZXhwciwgT3BFeHByKSAmJgorCQkJb3BleHByLT5v cGZ1bmNpZCAgPT0gRl9KU09OQl9PQkpFQ1RfRklFTEQgJiYKKwkJCWpzb25iX2Nhc3RfaXNfb3B0 aW1pemVkKGZleHByLT5mdW5jcmVzdWx0dHlwZSkpCisJCXsKKwkJCWZleHByLT5mdW5jaWQgPSBG X0pTT05CX09CSkVDVF9GSUVMRF9UWVBFOworCQkJZmV4cHItPmFyZ3MgPSBvcGV4cHItPmFyZ3M7 CisKKwkJCS8qIFRlbGwgdGhlIGpzb25iX29iamVjdF9maWVsZF90eXBlIHdoYXQgaXMgdGhlIHRh cmdldCB0eXBlLiAqLworCQkJZmV4cHItPmFyZ3MgPSBsYXBwZW5kKGZleHByLT5hcmdzLCBtYWtl Q29uc3QoT0lET0lELCAwLCAwLCBzaXplb2YoT2lkKSwKKwkJCQkJCQkJCQkJCQkJIGZleHByLT5m dW5jcmVzdWx0dHlwZSwKKwkJCQkJCQkJCQkJCQkJIGZhbHNlLCB0cnVlKSk7CisJCX0KKworCQlQ R19SRVRVUk5fUE9JTlRFUihmZXhwcik7CisJfQorCisJUEdfUkVUVVJOX1BPSU5URVIoTlVMTCk7 Cit9CisKK0RhdHVtCitqc29uYl9vYmplY3RfZmllbGRfdHlwZShQR19GVU5DVElPTl9BUkdTKQor eworCUpzb25iCSAgICpqYiA9IFBHX0dFVEFSR19KU09OQl9QKDApOworCXRleHQJICAgKmtleSA9 IFBHX0dFVEFSR19URVhUX1BQKDEpOworCU9pZAkJCXRhcmdldE9pZCA9IFBHX0dFVEFSR19PSUQo Mik7CisKKwlKc29uYlZhbHVlICp2OworCUpzb25iVmFsdWUJdmJ1ZjsKKworCWlmICghSkJfUk9P VF9JU19PQkpFQ1QoamIpKQorCQlQR19SRVRVUk5fTlVMTCgpOworCisJdiA9IGdldEtleUpzb25W YWx1ZUZyb21Db250YWluZXIoJmpiLT5yb290LAorCQkJCQkJCQkJIFZBUkRBVEFfQU5ZKGtleSks CisJCQkJCQkJCQkgVkFSU0laRV9BTllfRVhIRFIoa2V5KSwKKwkJCQkJCQkJCSAmdmJ1Zik7CisK KwlpZiAodiA9PSBOVUxMKQorCQlQR19SRVRVUk5fTlVMTCgpOworCisJc3dpdGNoKHRhcmdldE9p ZCkKKwl7CisJCURhdHVtCXJldFZhbHVlOworCisJCWNhc2UgQk9PTE9JRDoKKwkJCWlmICh2LT50 eXBlICE9IGpidkJvb2wpCisJCQkJY2Fubm90Q2FzdEpzb25iVmFsdWUodi0+dHlwZSwgImJvb2wi KTsKKwkJCVBHX1JFVFVSTl9CT09MKHYtPnZhbC5ib29sZWFuKTsKKworCQljYXNlIE5VTUVSSUNP SUQ6CisJCQlpZiAodi0+dHlwZSAhPSBqYnZOdW1lcmljKQorCQkJCWNhbm5vdENhc3RKc29uYlZh bHVlKHYtPnR5cGUsICJudW1lcmljIik7CisJCQlQR19SRVRVUk5fTlVNRVJJQyh2LT52YWwubnVt ZXJpYyk7CisJCWNhc2UgSU5UMk9JRDoKKwkJCWlmICh2LT50eXBlICE9IGpidk51bWVyaWMpCisJ CQkJY2Fubm90Q2FzdEpzb25iVmFsdWUodi0+dHlwZSwgInNtYWxsaW50Iik7CisJCQlyZXRWYWx1 ZSA9IERpcmVjdEZ1bmN0aW9uQ2FsbDEobnVtZXJpY19pbnQyLAorCQkJCQkJCQkJCSAgIE51bWVy aWNHZXREYXR1bSh2LT52YWwubnVtZXJpYykpOworCQkJUEdfUkVUVVJOX0RBVFVNKHJldFZhbHVl KTsKKwkJY2FzZSBJTlQ0T0lEOgorCQkJaWYgKHYtPnR5cGUgIT0gamJ2TnVtZXJpYykKKwkJCQlj YW5ub3RDYXN0SnNvbmJWYWx1ZSh2LT50eXBlLCAiaW50ZWdlciIpOworCQkJcmV0VmFsdWUgPSBE aXJlY3RGdW5jdGlvbkNhbGwxKG51bWVyaWNfaW50NCwKKwkJCQkJCQkJCQkgICBOdW1lcmljR2V0 RGF0dW0odi0+dmFsLm51bWVyaWMpKTsKKwkJCVBHX1JFVFVSTl9EQVRVTShyZXRWYWx1ZSk7CisK KwkJY2FzZSBJTlQ4T0lEOgorCQkJaWYgKHYtPnR5cGUgIT0gamJ2TnVtZXJpYykKKwkJCQljYW5u b3RDYXN0SnNvbmJWYWx1ZSh2LT50eXBlLCAiYmlnaW50Iik7CisJCQlyZXRWYWx1ZSA9IERpcmVj dEZ1bmN0aW9uQ2FsbDEobnVtZXJpY19pbnQ4LAorCQkJCQkJCQkJCSAgIE51bWVyaWNHZXREYXR1 bSh2LT52YWwubnVtZXJpYykpOworCQkJUEdfUkVUVVJOX0RBVFVNKHJldFZhbHVlKTsKKworCQlj YXNlIEZMT0FUNE9JRDoKKwkJCWlmICh2LT50eXBlICE9IGpidk51bWVyaWMpCisJCQkJY2Fubm90 Q2FzdEpzb25iVmFsdWUodi0+dHlwZSwgInJlYWwiKTsKKwkJCXJldFZhbHVlID0gRGlyZWN0RnVu Y3Rpb25DYWxsMShudW1lcmljX2Zsb2F0NCwKKwkJCQkJCQkJCQkgICBOdW1lcmljR2V0RGF0dW0o di0+dmFsLm51bWVyaWMpKTsKKwkJCVBHX1JFVFVSTl9EQVRVTShyZXRWYWx1ZSk7CisKKwkJY2Fz ZSBGTE9BVDhPSUQ6CisJCQlpZiAodi0+dHlwZSAhPSBqYnZOdW1lcmljKQorCQkJCWNhbm5vdENh c3RKc29uYlZhbHVlKHYtPnR5cGUsICJkb3VibGUgcHJlY2lzaW9uIik7CisJCQlyZXRWYWx1ZSA9 IERpcmVjdEZ1bmN0aW9uQ2FsbDEobnVtZXJpY19mbG9hdDgsCisJCQkJCQkJCQkJICAgTnVtZXJp Y0dldERhdHVtKHYtPnZhbC5udW1lcmljKSk7CisJCQlQR19SRVRVUk5fREFUVU0ocmV0VmFsdWUp OworCisJCWRlZmF1bHQ6CisJCQllbG9nKEVSUk9SLCAiY2FzdCBqc29uYiBmaWVsZCB0byAlZCBp cyBub3Qgc3VwcG9ydGVkLiIsIHRhcmdldE9pZCk7CisJfQorCisJUEdfUkVUVVJOX1BPSU5URVIo MCk7Cit9CisKIERhdHVtCiBqc29uYl9ib29sKFBHX0ZVTkNUSU9OX0FSR1MpCiB7CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNpb24uaCBiL3NyYy9pbmNsdWRlL2NhdGFs b2cvY2F0dmVyc2lvbi5oCmluZGV4IGY1MDdiNDliYjI4Li4zOTFkZmI4MWIyYSAxMDA2NDQKLS0t IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2ZXJzaW9uLmgKKysrIGIvc3JjL2luY2x1ZGUvY2F0 YWxvZy9jYXR2ZXJzaW9uLmgKQEAgLTU3LDYgKzU3LDYgQEAKICAqLwogCiAvKgkJCQkJCQl5eXl5 bW1kZE4gKi8KLSNkZWZpbmUgQ0FUQUxPR19WRVJTSU9OX05PCTIwMjMwNzI2MQorI2RlZmluZSBD QVRBTE9HX1ZFUlNJT05fTk8JMjAyMzA4MDcxCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvY2F0YWxvZy9wZ19wcm9jLmRhdCBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5k YXQKaW5kZXggNjk5NjA3Mzk4OWEuLjEwODI4MGIzNTVkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9jYXRhbG9nL3BnX3Byb2MuZGF0CisrKyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvcGdfcHJvYy5k YXQKQEAgLTQ1NzUsMjUgKzQ1NzUsMjYgQEAKICAgcHJvbmFtZSA9PiAncGdfbHNuJywgcHJvcmV0 dHlwZSA9PiAncGdfbHNuJywgcHJvYXJndHlwZXMgPT4gJ251bWVyaWMnLAogICBwcm9zcmMgPT4g J251bWVyaWNfcGdfbHNuJyB9LAogCi17IG9pZCA9PiAnMzU1NicsIGRlc2NyID0+ICdjb252ZXJ0 IGpzb25iIHRvIGJvb2xlYW4nLAoreyBvaWQgPT4gJzM1NTYnLCBkZXNjciA9PiAnY29udmVydCBq c29uYiB0byBib29sZWFuJywgcHJvc3VwcG9ydCA9PiAnanNvbmJfY2FzdF9zdXBwb3J0JywKICAg cHJvbmFtZSA9PiAnYm9vbCcsIHByb3JldHR5cGUgPT4gJ2Jvb2wnLCBwcm9hcmd0eXBlcyA9PiAn anNvbmInLAogICBwcm9zcmMgPT4gJ2pzb25iX2Jvb2wnIH0sCiB7IG9pZCA9PiAnMzQ0OScsIGRl c2NyID0+ICdjb252ZXJ0IGpzb25iIHRvIG51bWVyaWMnLAotICBwcm9uYW1lID0+ICdudW1lcmlj JywgcHJvcmV0dHlwZSA9PiAnbnVtZXJpYycsIHByb2FyZ3R5cGVzID0+ICdqc29uYicsCisgIHBy b25hbWUgPT4gJ251bWVyaWMnLCBwcm9zdXBwb3J0ID0+ICdqc29uYl9jYXN0X3N1cHBvcnQnLAor ICBwcm9yZXR0eXBlID0+ICdudW1lcmljJywgcHJvYXJndHlwZXMgPT4gJ2pzb25iJywKICAgcHJv c3JjID0+ICdqc29uYl9udW1lcmljJyB9LAoteyBvaWQgPT4gJzM0NTAnLCBkZXNjciA9PiAnY29u dmVydCBqc29uYiB0byBpbnQyJywKK3sgb2lkID0+ICczNDUwJywgZGVzY3IgPT4gJ2NvbnZlcnQg anNvbmIgdG8gaW50MicsIHByb3N1cHBvcnQgPT4gJ2pzb25iX2Nhc3Rfc3VwcG9ydCcsCiAgIHBy b25hbWUgPT4gJ2ludDInLCBwcm9yZXR0eXBlID0+ICdpbnQyJywgcHJvYXJndHlwZXMgPT4gJ2pz b25iJywKICAgcHJvc3JjID0+ICdqc29uYl9pbnQyJyB9LAoteyBvaWQgPT4gJzM0NTEnLCBkZXNj ciA9PiAnY29udmVydCBqc29uYiB0byBpbnQ0JywKK3sgb2lkID0+ICczNDUxJywgZGVzY3IgPT4g J2NvbnZlcnQganNvbmIgdG8gaW50NCcsIHByb3N1cHBvcnQgPT4gJ2pzb25iX2Nhc3Rfc3VwcG9y dCcsCiAgIHByb25hbWUgPT4gJ2ludDQnLCBwcm9yZXR0eXBlID0+ICdpbnQ0JywgcHJvYXJndHlw ZXMgPT4gJ2pzb25iJywKICAgcHJvc3JjID0+ICdqc29uYl9pbnQ0JyB9LAoteyBvaWQgPT4gJzM0 NTInLCBkZXNjciA9PiAnY29udmVydCBqc29uYiB0byBpbnQ4JywKK3sgb2lkID0+ICczNDUyJywg ZGVzY3IgPT4gJ2NvbnZlcnQganNvbmIgdG8gaW50OCcsIHByb3N1cHBvcnQgPT4gJ2pzb25iX2Nh c3Rfc3VwcG9ydCcsCiAgIHByb25hbWUgPT4gJ2ludDgnLCBwcm9yZXR0eXBlID0+ICdpbnQ4Jywg cHJvYXJndHlwZXMgPT4gJ2pzb25iJywKICAgcHJvc3JjID0+ICdqc29uYl9pbnQ4JyB9LAoteyBv aWQgPT4gJzM0NTMnLCBkZXNjciA9PiAnY29udmVydCBqc29uYiB0byBmbG9hdDQnLAoreyBvaWQg PT4gJzM0NTMnLCBkZXNjciA9PiAnY29udmVydCBqc29uYiB0byBmbG9hdDQnLCBwcm9zdXBwb3J0 ID0+ICdqc29uYl9jYXN0X3N1cHBvcnQnLAogICBwcm9uYW1lID0+ICdmbG9hdDQnLCBwcm9yZXR0 eXBlID0+ICdmbG9hdDQnLCBwcm9hcmd0eXBlcyA9PiAnanNvbmInLAogICBwcm9zcmMgPT4gJ2pz b25iX2Zsb2F0NCcgfSwKLXsgb2lkID0+ICcyNTgwJywgZGVzY3IgPT4gJ2NvbnZlcnQganNvbmIg dG8gZmxvYXQ4JywKK3sgb2lkID0+ICcyNTgwJywgZGVzY3IgPT4gJ2NvbnZlcnQganNvbmIgdG8g ZmxvYXQ4JywgcHJvc3VwcG9ydCA9PiAnanNvbmJfY2FzdF9zdXBwb3J0JywKICAgcHJvbmFtZSA9 PiAnZmxvYXQ4JywgcHJvcmV0dHlwZSA9PiAnZmxvYXQ4JywgcHJvYXJndHlwZXMgPT4gJ2pzb25i JywKICAgcHJvc3JjID0+ICdqc29uYl9mbG9hdDgnIH0sCiAKQEAgLTk5MjgsNiArOTkyOSwxMyBA QAogICBwcm9uYW1lID0+ICdqc29uYl9vYmplY3RfZmllbGRfdGV4dCcsIHByb3JldHR5cGUgPT4g J3RleHQnLAogICBwcm9hcmd0eXBlcyA9PiAnanNvbmIgdGV4dCcsIHByb2FyZ25hbWVzID0+ICd7 ZnJvbV9qc29uLCBmaWVsZF9uYW1lfScsCiAgIHByb3NyYyA9PiAnanNvbmJfb2JqZWN0X2ZpZWxk X3RleHQnIH0sCit7IG9pZCA9PiAnMzgxMycsIGRlc2NyID0+ICdyZXR1cm4gYSBnaXZlbiB0eXBl IHNwZWNpZmllZCBpbiBkZXNpcmVkX3R5cGUgZnJvbSBqc29uYiBmaWVsZCcsCisgIHByb25hbWUg PT4gJ2pzb25iX29iamVjdF9maWVsZF90eXBlJywgcHJvcmV0dHlwZSA9PiAnYW55ZWxlbWVudCcs CisgIHByb2FyZ3R5cGVzID0+ICdqc29uYiB0ZXh0IG9pZCcsIHByb2FyZ25hbWVzID0+ICd7ZnJv bV9qc29uLCBmaWVsZF9uYW1lLCBkZXNpcmVkX3R5cGV9JywKKyAgcHJvc3JjID0+ICdqc29uYl9v YmplY3RfZmllbGRfdHlwZSd9LAoreyBvaWQgPT4gJzM4MTQnLCBkZXNjciA9PiAncGxhbm5lciBz dXBwb3J0IGZvciBudW1lcmljKGpzb25iKScsCisgIHByb25hbWUgPT4gJ2pzb25iX2Nhc3Rfc3Vw cG9ydCcsIHByb3JldHR5cGUgPT4gJ2ludGVybmFsJywKKyAgcHJvYXJndHlwZXMgPT4gJ2ludGVy bmFsJywgcHJvc3JjID0+ICdqc29uYl9jYXN0X3N1cHBvcnQnIH0sCiB7IG9pZCA9PiAnMzIxNScs CiAgIHByb25hbWUgPT4gJ2pzb25iX2FycmF5X2VsZW1lbnQnLCBwcm9yZXR0eXBlID0+ICdqc29u YicsCiAgIHByb2FyZ3R5cGVzID0+ICdqc29uYiBpbnQ0JywgcHJvYXJnbmFtZXMgPT4gJ3tmcm9t X2pzb24sIGVsZW1lbnRfaW5kZXh9JywKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhw ZWN0ZWQvanNvbmIub3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9qc29uYi5vdXQKaW5k ZXggNGExNmQwZGJhZmIuLjVhMTQ0NTM0Y2MxIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL2pzb25iLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pzb25i Lm91dApAQCAtNTQ3MSwxMDcgKzU0NzEsMTEzIEBAIHNlbGVjdCB0c19oZWFkbGluZSgnW10nOjpq c29uYiwgdHNxdWVyeSgnYWFhICYgYmJiJykpOwogKDEgcm93KQogCiAtLSBjYXN0cwotc2VsZWN0 ICd0cnVlJzo6anNvbmI6OmJvb2w7Ci0gYm9vbCAKLS0tLS0tLQotIHQKK3NlbGVjdCAndHJ1ZSc6 Ompzb25iOjpib29sLCAoJ3siYSI6IHRydWV9Jzo6anNvbmItPidhJyk6OmJvb2w7CisgYm9vbCB8 IGJvb2wgCistLS0tLS0rLS0tLS0tCisgdCAgICB8IHQKICgxIHJvdykKIAogc2VsZWN0ICdbXSc6 Ompzb25iOjpib29sOwogRVJST1I6ICBjYW5ub3QgY2FzdCBqc29uYiBhcnJheSB0byB0eXBlIGJv b2xlYW4KLXNlbGVjdCAnMS4wJzo6anNvbmI6OmZsb2F0OwotIGZsb2F0OCAKLS0tLS0tLS0tCi0g ICAgICAxCitzZWxlY3QgKCd7ImEiOiBbXX0nOjpqc29uYi0+J2EnKTo6Ym9vbDsKK0VSUk9SOiAg Y2Fubm90IGNhc3QganNvbmIgYXJyYXkgdG8gdHlwZSBib29sZWFuCitzZWxlY3QgJzEuMCc6Ompz b25iOjpmbG9hdCwgKCd7ImEiOiAxLjB9Jzo6anNvbmItPidhJyk6OmZsb2F0OworIGZsb2F0OCB8 IGZsb2F0OCAKKy0tLS0tLS0tKy0tLS0tLS0tCisgICAgICAxIHwgICAgICAxCiAoMSByb3cpCiAK IHNlbGVjdCAnWzEuMF0nOjpqc29uYjo6ZmxvYXQ7CiBFUlJPUjogIGNhbm5vdCBjYXN0IGpzb25i IGFycmF5IHRvIHR5cGUgZG91YmxlIHByZWNpc2lvbgotc2VsZWN0ICcxMjM0NSc6Ompzb25iOjpp bnQ0OwotIGludDQgIAotLS0tLS0tLQotIDEyMzQ1CitzZWxlY3QgKCd7ImEiOiBbMS4wXX0nOjpq c29uYi0+J2EnKTo6ZmxvYXQ7CitFUlJPUjogIGNhbm5vdCBjYXN0IGpzb25iIGFycmF5IHRvIHR5 cGUgZG91YmxlIHByZWNpc2lvbgorc2VsZWN0ICcxMjM0NSc6Ompzb25iOjppbnQ0LCAgKCd7ImEi OiAxMjM0NX0nOjpqc29uYi0+J2EnKTo6aW50NDsKKyBpbnQ0ICB8IGludDQgIAorLS0tLS0tLSst LS0tLS0tCisgMTIzNDUgfCAxMjM0NQogKDEgcm93KQogCiBzZWxlY3QgJyJoZWxsbyInOjpqc29u Yjo6aW50NDsKIEVSUk9SOiAgY2Fubm90IGNhc3QganNvbmIgc3RyaW5nIHRvIHR5cGUgaW50ZWdl cgotc2VsZWN0ICcxMjM0NSc6Ompzb25iOjpudW1lcmljOwotIG51bWVyaWMgCi0tLS0tLS0tLS0K LSAgIDEyMzQ1CitzZWxlY3QgKCd7ImEiOiAiaGVsbG8ifSc6Ompzb25iLT4nYScpOjppbnQ0Owor RVJST1I6ICBjYW5ub3QgY2FzdCBqc29uYiBzdHJpbmcgdG8gdHlwZSBpbnRlZ2VyCitzZWxlY3Qg JzEyMzQ1Jzo6anNvbmI6Om51bWVyaWMsICgneyJhIjogMTIzNDV9Jzo6anNvbmItPidhJyk6Om51 bWVyaWM7CisgbnVtZXJpYyB8IG51bWVyaWMgCistLS0tLS0tLS0rLS0tLS0tLS0tCisgICAxMjM0 NSB8ICAgMTIzNDUKICgxIHJvdykKIAogc2VsZWN0ICd7fSc6Ompzb25iOjpudW1lcmljOwogRVJS T1I6ICBjYW5ub3QgY2FzdCBqc29uYiBvYmplY3QgdG8gdHlwZSBudW1lcmljCi1zZWxlY3QgJzEy MzQ1LjA1Jzo6anNvbmI6Om51bWVyaWM7Ci0gbnVtZXJpYyAgCi0tLS0tLS0tLS0tCi0gMTIzNDUu MDUKK3NlbGVjdCAnMTIzNDUuMDUnOjpqc29uYjo6bnVtZXJpYywgKCd7ImEiOiAxMjM0NS4wNX0n Ojpqc29uYi0+J2EnKTo6bnVtZXJpYzsKKyBudW1lcmljICB8IG51bWVyaWMgIAorLS0tLS0tLS0t LSstLS0tLS0tLS0tCisgMTIzNDUuMDUgfCAxMjM0NS4wNQogKDEgcm93KQogCi1zZWxlY3QgJzEy MzQ1LjA1Jzo6anNvbmI6OmZsb2F0NDsKLSAgZmxvYXQ0ICAKLS0tLS0tLS0tLS0KLSAxMjM0NS4w NQorc2VsZWN0ICcxMjM0NS4wNSc6Ompzb25iOjpmbG9hdDQsICgneyJhIjogMTIzNDUuMDV9Jzo6 anNvbmItPidhJyk6OmZsb2F0NDsKKyAgZmxvYXQ0ICB8ICBmbG9hdDQgIAorLS0tLS0tLS0tLSst LS0tLS0tLS0tCisgMTIzNDUuMDUgfCAxMjM0NS4wNQogKDEgcm93KQogCi1zZWxlY3QgJzEyMzQ1 LjA1Jzo6anNvbmI6OmZsb2F0ODsKLSAgZmxvYXQ4ICAKLS0tLS0tLS0tLS0KLSAxMjM0NS4wNQor c2VsZWN0ICcxMjM0NS4wNSc6Ompzb25iOjpmbG9hdDgsICgneyJhIjogMTIzNDUuMDV9Jzo6anNv bmItPidhJyk6OmZsb2F0ODsKKyAgZmxvYXQ4ICB8ICBmbG9hdDggIAorLS0tLS0tLS0tLSstLS0t LS0tLS0tCisgMTIzNDUuMDUgfCAxMjM0NS4wNQogKDEgcm93KQogCi1zZWxlY3QgJzEyMzQ1LjA1 Jzo6anNvbmI6OmludDI7Ci0gaW50MiAgCi0tLS0tLS0tCi0gMTIzNDUKK3NlbGVjdCAnMTIzNDUu MDUnOjpqc29uYjo6aW50MiwgKCd7ImEiOiAxMjM0NS4wNX0nOjpqc29uYi0+J2EnKTo6aW50MjsK KyBpbnQyICB8IGludDIgIAorLS0tLS0tLSstLS0tLS0tCisgMTIzNDUgfCAxMjM0NQogKDEgcm93 KQogCi1zZWxlY3QgJzEyMzQ1LjA1Jzo6anNvbmI6OmludDQ7Ci0gaW50NCAgCi0tLS0tLS0tCi0g MTIzNDUKK3NlbGVjdCAnMTIzNDUuMDUnOjpqc29uYjo6aW50NCwgKCd7ImEiOiAxMjM0NS4wNX0n Ojpqc29uYi0+J2EnKTo6aW50NDsKKyBpbnQ0ICB8IGludDQgIAorLS0tLS0tLSstLS0tLS0tCisg MTIzNDUgfCAxMjM0NQogKDEgcm93KQogCi1zZWxlY3QgJzEyMzQ1LjA1Jzo6anNvbmI6OmludDg7 Ci0gaW50OCAgCi0tLS0tLS0tCi0gMTIzNDUKK3NlbGVjdCAnMTIzNDUuMDUnOjpqc29uYjo6aW50 OCwgKCd7ImEiOiAxMjM0NS4wNX0nOjpqc29uYi0+J2EnKTo6aW50ODsKKyBpbnQ4ICB8IGludDgg IAorLS0tLS0tLSstLS0tLS0tCisgMTIzNDUgfCAxMjM0NQogKDEgcm93KQogCi1zZWxlY3QgJzEy MzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUnOjpqc29u Yjo6bnVtZXJpYzsKLSAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpYyAgICAgICAgICAgICAg ICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCi0gMTIzNDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwNQorc2VsZWN0ICcxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDA1Jzo6anNvbmI6Om51bWVyaWMsICgneyJhIjogMTIzNDUuMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNX0nOjpqc29uYi0+J2EnKTo6bnVtZXJp YzsKKyAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpYyAgICAgICAgICAgICAgICAgICAgICAg IHwgICAgICAgICAgICAgICAgICAgICAgIG51bWVyaWMgICAgICAgICAgICAgICAgICAgICAgICAK Ky0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSst LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAx MjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1IHwgMTIz NDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNQogKDEgcm93 KQogCi1zZWxlY3QgJzEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDUnOjpqc29uYjo6ZmxvYXQ0OwotIGZsb2F0NCAKLS0tLS0tLS0tCi0gIDEyMzQ1Citz ZWxlY3QgJzEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDUnOjpqc29uYjo6ZmxvYXQ0LCAgKCd7ImEiOiAxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1fSc6Ompzb25iLT4nYScpOjpmbG9hdDQ7CisgZmxvYXQ0 IHwgZmxvYXQ0IAorLS0tLS0tLS0rLS0tLS0tLS0KKyAgMTIzNDUgfCAgMTIzNDUKICgxIHJvdykK IAotc2VsZWN0ICcxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDA1Jzo6anNvbmI6OmZsb2F0ODsKLSBmbG9hdDggCi0tLS0tLS0tLQotICAxMjM0NQorc2Vs ZWN0ICcxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1 Jzo6anNvbmI6OmZsb2F0OCwgKCd7ImEiOiAxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDA1fSc6Ompzb25iLT4nYScpOjpmbG9hdDg7CisgZmxvYXQ4IHwg ZmxvYXQ4IAorLS0tLS0tLS0rLS0tLS0tLS0KKyAgMTIzNDUgfCAgMTIzNDUKICgxIHJvdykKIAot c2VsZWN0ICcxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDA1Jzo6anNvbmI6OmludDI7Ci0gaW50MiAgCi0tLS0tLS0tCi0gMTIzNDUKK3NlbGVjdCAnMTIz NDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSc6Ompzb25i OjppbnQyLCAoJ3siYSI6IDEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDV9Jzo6anNvbmItPidhJyk6OmludDI7CisgaW50MiAgfCBpbnQyICAKKy0tLS0t LS0rLS0tLS0tLQorIDEyMzQ1IHwgMTIzNDUKICgxIHJvdykKIAotc2VsZWN0ICcxMjM0NS4wMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Jzo6anNvbmI6OmludDQ7 Ci0gaW50NCAgCi0tLS0tLS0tCi0gMTIzNDUKK3NlbGVjdCAnMTIzNDUuMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSc6Ompzb25iOjppbnQ0LCAoJ3siYSI6IDEy MzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDV9Jzo6anNv bmItPidhJyk6OmludDQ7CisgaW50NCAgfCBpbnQ0ICAKKy0tLS0tLS0rLS0tLS0tLQorIDEyMzQ1 IHwgMTIzNDUKICgxIHJvdykKIAotc2VsZWN0ICcxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Jzo6anNvbmI6OmludDg7Ci0gaW50OCAgCi0tLS0tLS0t Ci0gMTIzNDUKK3NlbGVjdCAnMTIzNDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwNSc6Ompzb25iOjppbnQ4LCAoJ3siYSI6IDEyMzQ1LjAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDV9Jzo6anNvbmItPidhJyk6OmludDg7Cisg aW50OCAgfCBpbnQ4ICAKKy0tLS0tLS0rLS0tLS0tLQorIDEyMzQ1IHwgMTIzNDUKICgxIHJvdykK IApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9vcHJfc2FuaXR5Lm91dCBi L3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb3ByX3Nhbml0eS5vdXQKaW5kZXggYTFiZGYyYzBi NWYuLmI0YzM2NDcyZWIyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL29w cl9zYW5pdHkub3V0CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvb3ByX3Nhbml0eS5v dXQKQEAgLTMwOSw4ICszMDksOCBAQCBXSEVSRSBwMS5wcm9yZXR0eXBlIElOCiAgICAgICdhbnly YW5nZSc6OnJlZ3R5cGUgPSBBTlkgKHAxLnByb2FyZ3R5cGVzKSBPUgogICAgICAnYW55bXVsdGly YW5nZSc6OnJlZ3R5cGUgPSBBTlkgKHAxLnByb2FyZ3R5cGVzKSkKIE9SREVSIEJZIDI7Ci0gb2lk ICB8ICAgIHByb25hbWUgICAgIAotLS0tLS0tKy0tLS0tLS0tLS0tLS0tLS0KKyBvaWQgIHwgICAg ICAgICBwcm9uYW1lICAgICAgICAgCistLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog IDIyOTYgfCBhbnlhcnJheV9pbgogIDI1MDIgfCBhbnlhcnJheV9yZWN2CiAgMjMxMiB8IGFueWVs ZW1lbnRfaW4KQEAgLTMyMCw3ICszMjAsOCBAQCBPUkRFUiBCWSAyOwogIDI0MDAgfCBhcnJheV9y ZWN2CiAgMzUwNiB8IGVudW1faW4KICAzNTMyIHwgZW51bV9yZWN2Ci0oOSByb3dzKQorIDM4MTMg fCBqc29uYl9vYmplY3RfZmllbGRfdHlwZQorKDEwIHJvd3MpCiAKIC0tIGFueXJhbmdlIGFuZCBh bnltdWx0aXJhbmdlIGFyZSB0aWdodGVyIHRoYW4gdGhlIHJlc3QsIGNhbiBvbmx5IHJlc29sdmUK IC0tIGZyb20gZWFjaCBvdGhlcgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNv bmIuc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbmIuc3FsCmluZGV4IGU0YjdjZGY3MDNk Li5hMGIzMjRjOGJlZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9zcWwvanNvbmIuc3Fs CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL2pzb25iLnNxbApAQCAtMTQ5NiwyMyArMTQ5Niwy NyBAQCBzZWxlY3QgdHNfaGVhZGxpbmUoJ3t9Jzo6anNvbmIsIHRzcXVlcnkoJ2FhYSAmIGJiYicp KTsKIHNlbGVjdCB0c19oZWFkbGluZSgnW10nOjpqc29uYiwgdHNxdWVyeSgnYWFhICYgYmJiJykp OwogCiAtLSBjYXN0cwotc2VsZWN0ICd0cnVlJzo6anNvbmI6OmJvb2w7CitzZWxlY3QgJ3RydWUn Ojpqc29uYjo6Ym9vbCwgKCd7ImEiOiB0cnVlfSc6Ompzb25iLT4nYScpOjpib29sOwogc2VsZWN0 ICdbXSc6Ompzb25iOjpib29sOwotc2VsZWN0ICcxLjAnOjpqc29uYjo6ZmxvYXQ7CitzZWxlY3Qg KCd7ImEiOiBbXX0nOjpqc29uYi0+J2EnKTo6Ym9vbDsKK3NlbGVjdCAnMS4wJzo6anNvbmI6OmZs b2F0LCAoJ3siYSI6IDEuMH0nOjpqc29uYi0+J2EnKTo6ZmxvYXQ7CiBzZWxlY3QgJ1sxLjBdJzo6 anNvbmI6OmZsb2F0Owotc2VsZWN0ICcxMjM0NSc6Ompzb25iOjppbnQ0Oworc2VsZWN0ICgneyJh IjogWzEuMF19Jzo6anNvbmItPidhJyk6OmZsb2F0Oworc2VsZWN0ICcxMjM0NSc6Ompzb25iOjpp bnQ0LCAgKCd7ImEiOiAxMjM0NX0nOjpqc29uYi0+J2EnKTo6aW50NDsKIHNlbGVjdCAnImhlbGxv Iic6Ompzb25iOjppbnQ0Owotc2VsZWN0ICcxMjM0NSc6Ompzb25iOjpudW1lcmljOworc2VsZWN0 ICgneyJhIjogImhlbGxvIn0nOjpqc29uYi0+J2EnKTo6aW50NDsKKworc2VsZWN0ICcxMjM0NSc6 Ompzb25iOjpudW1lcmljLCAoJ3siYSI6IDEyMzQ1fSc6Ompzb25iLT4nYScpOjpudW1lcmljOwog c2VsZWN0ICd7fSc6Ompzb25iOjpudW1lcmljOwotc2VsZWN0ICcxMjM0NS4wNSc6Ompzb25iOjpu dW1lcmljOwotc2VsZWN0ICcxMjM0NS4wNSc6Ompzb25iOjpmbG9hdDQ7Ci1zZWxlY3QgJzEyMzQ1 LjA1Jzo6anNvbmI6OmZsb2F0ODsKLXNlbGVjdCAnMTIzNDUuMDUnOjpqc29uYjo6aW50MjsKLXNl bGVjdCAnMTIzNDUuMDUnOjpqc29uYjo6aW50NDsKLXNlbGVjdCAnMTIzNDUuMDUnOjpqc29uYjo6 aW50ODsKLXNlbGVjdCAnMTIzNDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwNSc6Ompzb25iOjpudW1lcmljOwotc2VsZWN0ICcxMjM0NS4wMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Jzo6anNvbmI6OmZsb2F0NDsKLXNlbGVj dCAnMTIzNDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSc6 Ompzb25iOjpmbG9hdDg7Ci1zZWxlY3QgJzEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDUnOjpqc29uYjo6aW50MjsKLXNlbGVjdCAnMTIzNDUuMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSc6Ompzb25iOjppbnQ0Owot c2VsZWN0ICcxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDA1Jzo6anNvbmI6OmludDg7CitzZWxlY3QgJzEyMzQ1LjA1Jzo6anNvbmI6Om51bWVyaWMsICgn eyJhIjogMTIzNDUuMDV9Jzo6anNvbmItPidhJyk6Om51bWVyaWM7CitzZWxlY3QgJzEyMzQ1LjA1 Jzo6anNvbmI6OmZsb2F0NCwgKCd7ImEiOiAxMjM0NS4wNX0nOjpqc29uYi0+J2EnKTo6ZmxvYXQ0 Oworc2VsZWN0ICcxMjM0NS4wNSc6Ompzb25iOjpmbG9hdDgsICgneyJhIjogMTIzNDUuMDV9Jzo6 anNvbmItPidhJyk6OmZsb2F0ODsKK3NlbGVjdCAnMTIzNDUuMDUnOjpqc29uYjo6aW50MiwgKCd7 ImEiOiAxMjM0NS4wNX0nOjpqc29uYi0+J2EnKTo6aW50MjsKK3NlbGVjdCAnMTIzNDUuMDUnOjpq c29uYjo6aW50NCwgKCd7ImEiOiAxMjM0NS4wNX0nOjpqc29uYi0+J2EnKTo6aW50NDsKK3NlbGVj dCAnMTIzNDUuMDUnOjpqc29uYjo6aW50OCwgKCd7ImEiOiAxMjM0NS4wNX0nOjpqc29uYi0+J2En KTo6aW50ODsKK3NlbGVjdCAnMTIzNDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwNSc6Ompzb25iOjpudW1lcmljLCAoJ3siYSI6IDEyMzQ1LjAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDV9Jzo6anNvbmItPidhJyk6Om51bWVy aWM7CitzZWxlY3QgJzEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDUnOjpqc29uYjo6ZmxvYXQ0LCAgKCd7ImEiOiAxMjM0NS4wMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1fSc6Ompzb25iLT4nYScpOjpmbG9hdDQ7Citz ZWxlY3QgJzEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDUnOjpqc29uYjo6ZmxvYXQ4LCAoJ3siYSI6IDEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDV9Jzo6anNvbmItPidhJyk6OmZsb2F0ODsKK3NlbGVjdCAn MTIzNDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNSc6Ompz b25iOjppbnQyLCAoJ3siYSI6IDEyMzQ1LjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDV9Jzo6anNvbmItPidhJyk6OmludDI7CitzZWxlY3QgJzEyMzQ1LjAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDUnOjpqc29uYjo6aW50NCwg KCd7ImEiOiAxMjM0NS4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw MDA1fSc6Ompzb25iLT4nYScpOjppbnQ0Oworc2VsZWN0ICcxMjM0NS4wMDAwMDAwMDAwMDAwMDAw MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDA1Jzo6anNvbmI6OmludDgsICgneyJhIjogMTIz NDUuMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwNX0nOjpqc29u Yi0+J2EnKTo6aW50ODsKLS0gCjIuMjEuMAoK --0000000000007f7cb106024c8038--